Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions types/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import _ajv, { AnySchema, Options as AjvOptions, ValidateFunction, Plugin } from 'ajv'
import AjvJTD, { JTDOptions } from 'ajv/dist/jtd'
import type { JTDOptions } from 'ajv/dist/jtd'
import type { Options, ErrorObject } from 'ajv'
import { AnyValidateFunction } from 'ajv/dist/core'

type Ajv = _ajv
type AjvSerializerGenerator = typeof AjvCompiler

type AjvJTDCompile = AjvJTD['compileSerializer']
type AjvCompile = (schema: AnySchema, _meta?: boolean) => AnyValidateFunction
type AjvJTDCompile = (routeDefinition: AjvCompiler.RouteDefinition) => (data: unknown) => string
type AjvCompile = (routeDefinition: AjvCompiler.RouteDefinition) => AnyValidateFunction

type SharedCompilerOptions = {
onCreate?: (ajvInstance: Ajv) => void;
Expand Down Expand Up @@ -52,10 +52,11 @@ declare namespace AjvCompiler {
}

export type RouteDefinition = {
method: string,
url: string,
httpPart: HttpParts,
schema?: unknown,
schema: AnySchema,
method?: string,
url?: string,
httpPart?: HttpParts | string,
httpStatus?: string,
}

export type StandaloneRestoreFunction = (opts: RouteDefinition) => ValidateFunction
Expand All @@ -74,9 +75,11 @@ declare namespace AjvCompiler {

export type StandaloneOptions = StandaloneOptionsReadModeOn | StandaloneOptionsReadModeOff

export type ValidatorFactory = BuildCompilerFromPool | BuildSerializerFromPool
export type ValidatorFactory = BuildCompilerFromPool
export type SerializerFactory = BuildSerializerFromPool

export type ValidatorCompiler = ReturnType<ValidatorFactory>
export type SerializerCompiler = ReturnType<SerializerFactory>

export { StandaloneValidator }

Expand Down
34 changes: 33 additions & 1 deletion types/index.tst.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@ import { expect } from 'tstyche'
import AjvCompiler, {
AjvReference,
ValidatorFactory,
SerializerFactory,
StandaloneValidator,
RouteDefinition,
ErrorObject,
BuildCompilerFromPool,
BuildSerializerFromPool,
ValidatorCompiler
ValidatorCompiler,
SerializerCompiler
} from '..'
import type Ajv from 'ajv'

Expand Down Expand Up @@ -342,3 +344,33 @@ expect(AjvReference).type.toBe<Symbol>()
}
)
}

// ValidatorCompiler and SerializerCompiler types
{
const validatorFactory = AjvCompiler()
expect(validatorFactory).type.toBeAssignableTo<ValidatorFactory>()
const validatorCompiler = validatorFactory({}, {})
expect(validatorCompiler).type.toBeAssignableTo<ValidatorCompiler>()

const routeDef: RouteDefinition = {
schema: { type: 'string' },
method: 'GET',
url: '/test',
httpPart: AjvCompiler.HttpParts.Body,
httpStatus: '200'
}
const validate = validatorCompiler(routeDef)
expect(validate).type.toBe<AnyValidateFunction>()

const minimalRouteDef: RouteDefinition = {
schema: { type: 'number' }
}
expect(validatorCompiler(minimalRouteDef)).type.toBe<AnyValidateFunction>()

const serializerFactory = AjvCompiler({ jtdSerializer: true })
expect(serializerFactory).type.toBeAssignableTo<SerializerFactory>()
const serializerCompiler = serializerFactory({}, {})
expect(serializerCompiler).type.toBeAssignableTo<SerializerCompiler>()
const serialize = serializerCompiler(routeDef)
expect(serialize).type.toBe<(data: unknown) => string>()
}
Loading