You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					132 lines
				
				4.0 KiB
			
		
		
			
		
	
	
					132 lines
				
				4.0 KiB
			| 
											3 years ago
										 | import type {AnySchemaObject, SchemaObject, JTDParser} from "./types" | ||
|  | import type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from "./types/jtd-schema" | ||
|  | import AjvCore, {CurrentOptions} from "./core" | ||
|  | import jtdVocabulary from "./vocabularies/jtd" | ||
|  | import jtdMetaSchema from "./refs/jtd-schema" | ||
|  | import compileSerializer from "./compile/jtd/serialize" | ||
|  | import compileParser from "./compile/jtd/parse" | ||
|  | import {SchemaEnv} from "./compile" | ||
|  | 
 | ||
|  | const META_SCHEMA_ID = "JTD-meta-schema" | ||
|  | 
 | ||
|  | type JTDOptions = CurrentOptions & { | ||
|  |   // strict mode options not supported with JTD:
 | ||
|  |   strict?: never | ||
|  |   allowMatchingProperties?: never | ||
|  |   allowUnionTypes?: never | ||
|  |   validateFormats?: never | ||
|  |   // validation and reporting options not supported with JTD:
 | ||
|  |   $data?: never | ||
|  |   verbose?: boolean | ||
|  |   $comment?: never | ||
|  |   formats?: never | ||
|  |   loadSchema?: never | ||
|  |   // options to modify validated data:
 | ||
|  |   useDefaults?: never | ||
|  |   coerceTypes?: never | ||
|  |   // advanced options:
 | ||
|  |   next?: never | ||
|  |   unevaluated?: never | ||
|  |   dynamicRef?: never | ||
|  |   meta?: boolean | ||
|  |   defaultMeta?: never | ||
|  |   inlineRefs?: boolean | ||
|  |   loopRequired?: never | ||
|  |   multipleOfPrecision?: never | ||
|  | } | ||
|  | 
 | ||
|  | class Ajv extends AjvCore { | ||
|  |   constructor(opts: JTDOptions = {}) { | ||
|  |     super({ | ||
|  |       ...opts, | ||
|  |       jtd: true, | ||
|  |     }) | ||
|  |   } | ||
|  | 
 | ||
|  |   _addVocabularies(): void { | ||
|  |     super._addVocabularies() | ||
|  |     this.addVocabulary(jtdVocabulary) | ||
|  |   } | ||
|  | 
 | ||
|  |   _addDefaultMetaSchema(): void { | ||
|  |     super._addDefaultMetaSchema() | ||
|  |     if (!this.opts.meta) return | ||
|  |     this.addMetaSchema(jtdMetaSchema, META_SCHEMA_ID, false) | ||
|  |   } | ||
|  | 
 | ||
|  |   defaultMeta(): string | AnySchemaObject | undefined { | ||
|  |     return (this.opts.defaultMeta = | ||
|  |       super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined)) | ||
|  |   } | ||
|  | 
 | ||
|  |   compileSerializer<T = unknown>(schema: SchemaObject): (data: T) => string | ||
|  |   // Separated for type inference to work
 | ||
|  |   // eslint-disable-next-line @typescript-eslint/unified-signatures
 | ||
|  |   compileSerializer<T = unknown>(schema: JTDSchemaType<T>): (data: T) => string | ||
|  |   compileSerializer<T = unknown>(schema: SchemaObject): (data: T) => string { | ||
|  |     const sch = this._addSchema(schema) | ||
|  |     return sch.serialize || this._compileSerializer(sch) | ||
|  |   } | ||
|  | 
 | ||
|  |   compileParser<T = unknown>(schema: SchemaObject): JTDParser<T> | ||
|  |   // Separated for type inference to work
 | ||
|  |   // eslint-disable-next-line @typescript-eslint/unified-signatures
 | ||
|  |   compileParser<T = unknown>(schema: JTDSchemaType<T>): JTDParser<T> | ||
|  |   compileParser<T = unknown>(schema: SchemaObject): JTDParser<T> { | ||
|  |     const sch = this._addSchema(schema) | ||
|  |     return (sch.parse || this._compileParser(sch)) as JTDParser<T> | ||
|  |   } | ||
|  | 
 | ||
|  |   private _compileSerializer<T>(sch: SchemaEnv): (data: T) => string { | ||
|  |     compileSerializer.call(this, sch, (sch.schema as AnySchemaObject).definitions || {}) | ||
|  |     /* istanbul ignore if */ | ||
|  |     if (!sch.serialize) throw new Error("ajv implementation error") | ||
|  |     return sch.serialize | ||
|  |   } | ||
|  | 
 | ||
|  |   private _compileParser(sch: SchemaEnv): JTDParser { | ||
|  |     compileParser.call(this, sch, (sch.schema as AnySchemaObject).definitions || {}) | ||
|  |     /* istanbul ignore if */ | ||
|  |     if (!sch.parse) throw new Error("ajv implementation error") | ||
|  |     return sch.parse | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = exports = Ajv | ||
|  | Object.defineProperty(exports, "__esModule", {value: true}) | ||
|  | 
 | ||
|  | export default Ajv | ||
|  | 
 | ||
|  | export { | ||
|  |   Format, | ||
|  |   FormatDefinition, | ||
|  |   AsyncFormatDefinition, | ||
|  |   KeywordDefinition, | ||
|  |   KeywordErrorDefinition, | ||
|  |   CodeKeywordDefinition, | ||
|  |   MacroKeywordDefinition, | ||
|  |   FuncKeywordDefinition, | ||
|  |   Vocabulary, | ||
|  |   Schema, | ||
|  |   SchemaObject, | ||
|  |   AnySchemaObject, | ||
|  |   AsyncSchema, | ||
|  |   AnySchema, | ||
|  |   ValidateFunction, | ||
|  |   AsyncValidateFunction, | ||
|  |   ErrorObject, | ||
|  |   ErrorNoParams, | ||
|  |   JTDParser, | ||
|  | } from "./types" | ||
|  | 
 | ||
|  | export {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from "./core" | ||
|  | export {SchemaCxt, SchemaObjCxt} from "./compile" | ||
|  | export {KeywordCxt} from "./compile/validate" | ||
|  | export {JTDErrorObject} from "./vocabularies/jtd" | ||
|  | export {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from "./compile/codegen" | ||
|  | 
 | ||
|  | export {JTDSchemaType, SomeJTDSchemaType, JTDDataType} | ||
|  | export {JTDOptions} | ||
|  | export {default as ValidationError} from "./runtime/validation_error" | ||
|  | export {default as MissingRefError} from "./compile/ref_error" |