UNPKG

4.01 kBPlain TextView Raw
1import type {AnySchemaObject, SchemaObject, JTDParser} from "./types"
2import type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from "./types/jtd-schema"
3import AjvCore, {CurrentOptions} from "./core"
4import jtdVocabulary from "./vocabularies/jtd"
5import jtdMetaSchema from "./refs/jtd-schema"
6import compileSerializer from "./compile/jtd/serialize"
7import compileParser from "./compile/jtd/parse"
8import {SchemaEnv} from "./compile"
9
10const META_SCHEMA_ID = "JTD-meta-schema"
11
12type JTDOptions = CurrentOptions & {
13 // strict mode options not supported with JTD:
14 strict?: never
15 allowMatchingProperties?: never
16 allowUnionTypes?: never
17 validateFormats?: never
18 // validation and reporting options not supported with JTD:
19 $data?: never
20 verbose?: boolean
21 $comment?: never
22 formats?: never
23 loadSchema?: never
24 // options to modify validated data:
25 useDefaults?: never
26 coerceTypes?: never
27 // advanced options:
28 next?: never
29 unevaluated?: never
30 dynamicRef?: never
31 meta?: boolean
32 defaultMeta?: never
33 inlineRefs?: boolean
34 loopRequired?: never
35 multipleOfPrecision?: never
36}
37
38class Ajv extends AjvCore {
39 constructor(opts: JTDOptions = {}) {
40 super({
41 ...opts,
42 jtd: true,
43 })
44 }
45
46 _addVocabularies(): void {
47 super._addVocabularies()
48 this.addVocabulary(jtdVocabulary)
49 }
50
51 _addDefaultMetaSchema(): void {
52 super._addDefaultMetaSchema()
53 if (!this.opts.meta) return
54 this.addMetaSchema(jtdMetaSchema, META_SCHEMA_ID, false)
55 }
56
57 defaultMeta(): string | AnySchemaObject | undefined {
58 return (this.opts.defaultMeta =
59 super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))
60 }
61
62 compileSerializer<T = unknown>(schema: SchemaObject): (data: T) => string
63 // Separated for type inference to work
64 // eslint-disable-next-line @typescript-eslint/unified-signatures
65 compileSerializer<T = unknown>(schema: JTDSchemaType<T>): (data: T) => string
66 compileSerializer<T = unknown>(schema: SchemaObject): (data: T) => string {
67 const sch = this._addSchema(schema)
68 return sch.serialize || this._compileSerializer(sch)
69 }
70
71 compileParser<T = unknown>(schema: SchemaObject): JTDParser<T>
72 // Separated for type inference to work
73 // eslint-disable-next-line @typescript-eslint/unified-signatures
74 compileParser<T = unknown>(schema: JTDSchemaType<T>): JTDParser<T>
75 compileParser<T = unknown>(schema: SchemaObject): JTDParser<T> {
76 const sch = this._addSchema(schema)
77 return (sch.parse || this._compileParser(sch)) as JTDParser<T>
78 }
79
80 private _compileSerializer<T>(sch: SchemaEnv): (data: T) => string {
81 compileSerializer.call(this, sch, (sch.schema as AnySchemaObject).definitions || {})
82 /* istanbul ignore if */
83 if (!sch.serialize) throw new Error("ajv implementation error")
84 return sch.serialize
85 }
86
87 private _compileParser(sch: SchemaEnv): JTDParser {
88 compileParser.call(this, sch, (sch.schema as AnySchemaObject).definitions || {})
89 /* istanbul ignore if */
90 if (!sch.parse) throw new Error("ajv implementation error")
91 return sch.parse
92 }
93}
94
95module.exports = exports = Ajv
96Object.defineProperty(exports, "__esModule", {value: true})
97
98export default Ajv
99
100export {
101 Format,
102 FormatDefinition,
103 AsyncFormatDefinition,
104 KeywordDefinition,
105 KeywordErrorDefinition,
106 CodeKeywordDefinition,
107 MacroKeywordDefinition,
108 FuncKeywordDefinition,
109 Vocabulary,
110 Schema,
111 SchemaObject,
112 AnySchemaObject,
113 AsyncSchema,
114 AnySchema,
115 ValidateFunction,
116 AsyncValidateFunction,
117 ErrorObject,
118 ErrorNoParams,
119 JTDParser,
120} from "./types"
121
122export {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from "./core"
123export {SchemaCxt, SchemaObjCxt} from "./compile"
124export {KeywordCxt} from "./compile/validate"
125export {JTDErrorObject} from "./vocabularies/jtd"
126export {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from "./compile/codegen"
127
128export {JTDSchemaType, SomeJTDSchemaType, JTDDataType}
129export {JTDOptions}