import { expectAssignable, expectError, expectType } from "tsd"; import SerializerSelector, { RouteDefinition, Serializer, SerializerCompiler, SerializerFactory, SerializerSelector as SerializerSelectorNamed, StandaloneSerializer, } from ".."; /** * SerializerSelector */ { const compiler = SerializerSelector(); expectType(compiler); } { const compiler = SerializerSelectorNamed(); expectType(compiler); } { { const sampleSchema = { $id: 'example1', type: 'object', properties: { name: { type: 'string' } } } const externalSchemas1 = {} const factory = SerializerSelector() expectType(factory); const compiler = factory(externalSchemas1, {}) expectType(compiler); const serializeFunc = compiler({ schema: sampleSchema }) expectType(serializeFunc); expectType(serializeFunc({ name: 'hello' })) } } /** * StandaloneSerializer */ const reader = StandaloneSerializer({ readMode: true, restoreFunction: (route: RouteDefinition) => { expectAssignable(route) return {} as Serializer }, }); expectType(reader); const writer = StandaloneSerializer({ readMode: false, storeFunction: (route: RouteDefinition, code: string) => { expectAssignable(route) expectAssignable(code) }, }); expectType(writer); { const base = { $id: 'urn:schema:base', definitions: { hello: { type: 'string' } }, type: 'object', properties: { hello: { $ref: '#/definitions/hello' } } } const refSchema = { $id: 'urn:schema:ref', type: 'object', properties: { hello: { $ref: 'urn:schema:base#/definitions/hello' } } } const endpointSchema = { schema: { $id: 'urn:schema:endpoint', $ref: 'urn:schema:ref' } } const schemaMap = { [base.$id]: base, [refSchema.$id]: refSchema } expectError(StandaloneSerializer({ readMode: true, storeFunction () { } })) expectError(StandaloneSerializer({ readMode: false, restoreFunction () {} })) expectError(StandaloneSerializer({ restoreFunction () {} })) expectType(StandaloneSerializer({ storeFunction (routeOpts, schemaSerializerCode) { expectType(routeOpts) expectType(schemaSerializerCode) } })) expectType(StandaloneSerializer({ readMode: true, restoreFunction (routeOpts) { expectType(routeOpts) return {} as Serializer } })) const factory = StandaloneSerializer({ readMode: false, storeFunction (routeOpts, schemaSerializerCode) { expectType(routeOpts) expectType(schemaSerializerCode) } }) expectType(factory) const compiler = factory(schemaMap) expectType(compiler) expectType(compiler(endpointSchema)) }