@@ -2,6 +2,7 @@ import { AnySchemaObject, ValidateFunction } from 'ajv'
22import { AnyValidateFunction } from 'ajv/dist/core'
33import { expectAssignable , expectType } from 'tsd'
44import AjvCompiler , { AjvReference , ValidatorFactory , StandaloneValidator , RouteDefinition , ErrorObject , BuildCompilerFromPool , BuildSerializerFromPool , ValidatorCompiler } from '..'
5+ import type Ajv from 'ajv'
56
67{
78 const compiler = AjvCompiler ( { } )
@@ -228,30 +229,74 @@ expectType<Symbol>(AjvReference)
228229// Plugins
229230{
230231 const factory = AjvCompiler ( )
232+ const compilerFactoryParams = {
233+ customOptions : { } ,
234+ plugins : [
235+ ( ajv : Ajv ) => {
236+ expectType < Ajv > ( ajv )
237+ return ajv
238+ } ,
239+ ( ajv : Ajv , options : unknown ) => {
240+ expectType < Ajv > ( ajv )
241+ expectType < unknown > ( options )
242+ return ajv
243+ }
244+ ]
245+ }
246+ expectAssignable < Parameters < BuildCompilerFromPool > > ( [ { } , compilerFactoryParams ] )
247+
231248 const compiler = factory ( { } , {
249+ customOptions : { } ,
232250 plugins : [
233251 ( ajv ) => {
234- expectType < import ( 'ajv' ) . default > ( ajv )
252+ expectType < Ajv > ( ajv )
235253 return ajv
236254 } ,
237255 ( ajv , options ) => {
238- expectType < import ( 'ajv' ) . default > ( ajv )
256+ expectType < Ajv > ( ajv )
239257 expectType < unknown > ( options )
240258 return ajv
241- } ,
242- [
243- ( ajv ) => {
244- expectType < import ( 'ajv' ) . default > ( ajv )
245- return ajv
246- } , [ 'keyword1' , 'keyword2' ]
247- ] ,
248- [
249- ( ajv ) => {
250- expectType < import ( 'ajv' ) . default > ( ajv )
251- return ajv
252- } , [ { key : 'value' } ]
253- ] ,
259+ }
254260 ]
255261 } )
256262 expectAssignable < ValidatorCompiler > ( compiler )
257263}
264+ // Compiler factory should allow both signatures (mode: JTD and mode omitted)
265+ {
266+ expectAssignable < Parameters < BuildCompilerFromPool > > ( [ { } , { } ] )
267+
268+ const ajvPlugin = ( ajv : Ajv ) : Ajv => {
269+ expectType < Ajv > ( ajv )
270+ return ajv
271+ }
272+ expectAssignable < Parameters < BuildCompilerFromPool > > ( [ { } , { plugins : [ ajvPlugin ] } ] )
273+
274+ expectAssignable < Parameters < BuildCompilerFromPool > > ( [ { } , {
275+ mode : 'JTD' ,
276+ customOptions : {
277+ removeAdditional : 'all'
278+ } ,
279+ plugins : [ ajvPlugin ]
280+ } ] )
281+
282+ expectAssignable < Parameters < BuildCompilerFromPool > > ( [ { } , {
283+ mode : 'JTD' ,
284+ customOptions : {
285+ removeAdditional : 'all'
286+ } ,
287+ plugins : [ [ ajvPlugin , [ 'string1' , 'string2' ] ] ]
288+ } ] )
289+
290+ expectAssignable < Parameters < BuildCompilerFromPool > > ( [ { } , {
291+ plugins : [
292+ ajvPlugin ,
293+ ( ajv : Ajv , options : unknown ) : Ajv => {
294+ expectType < Ajv > ( ajv )
295+ expectType < unknown > ( options )
296+ return ajv
297+ } ,
298+ [ ajvPlugin , [ 'keyword1' , 'keyword2' ] ] ,
299+ [ ajvPlugin , [ { key : 'value' } ] ] ,
300+ ]
301+ } ] )
302+ }
0 commit comments