ajv.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. export {
  2. Format,
  3. FormatDefinition,
  4. AsyncFormatDefinition,
  5. KeywordDefinition,
  6. KeywordErrorDefinition,
  7. CodeKeywordDefinition,
  8. MacroKeywordDefinition,
  9. FuncKeywordDefinition,
  10. Vocabulary,
  11. Schema,
  12. SchemaObject,
  13. AnySchemaObject,
  14. AsyncSchema,
  15. AnySchema,
  16. ValidateFunction,
  17. AsyncValidateFunction,
  18. ErrorObject,
  19. ErrorNoParams,
  20. } from "./types"
  21. export {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from "./core"
  22. export {SchemaCxt, SchemaObjCxt} from "./compile"
  23. import KeywordCxt from "./compile/context"
  24. export {KeywordCxt}
  25. export {DefinedError} from "./vocabularies/errors"
  26. export {JSONType} from "./compile/rules"
  27. export {JSONSchemaType} from "./types/json-schema"
  28. export {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from "./compile/codegen"
  29. import type {AnySchemaObject} from "./types"
  30. import AjvCore from "./core"
  31. import draft7Vocabularies from "./vocabularies/draft7"
  32. import draft7MetaSchema = require("./refs/json-schema-draft-07.json")
  33. const META_SUPPORT_DATA = ["/properties"]
  34. const META_SCHEMA_ID = "http://json-schema.org/draft-07/schema"
  35. export default class Ajv extends AjvCore {
  36. _addVocabularies(): void {
  37. super._addVocabularies()
  38. draft7Vocabularies.forEach((v) => this.addVocabulary(v))
  39. }
  40. _addDefaultMetaSchema(): void {
  41. super._addDefaultMetaSchema()
  42. const {$data, meta} = this.opts
  43. if (!meta) return
  44. const metaSchema = $data
  45. ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)
  46. : draft7MetaSchema
  47. this.addMetaSchema(metaSchema, META_SCHEMA_ID, false)
  48. this.refs["http://json-schema.org/schema"] = META_SCHEMA_ID
  49. }
  50. defaultMeta(): string | AnySchemaObject | undefined {
  51. return (this.opts.defaultMeta =
  52. super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))
  53. }
  54. }