2019.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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, {Options} from "./core"
  31. import draft7Vocabularies from "./vocabularies/draft7"
  32. import dynamicVocabulary from "./vocabularies/dynamic"
  33. import nextVocabulary from "./vocabularies/next"
  34. import unevaluatedVocabulary from "./vocabularies/unevaluated"
  35. import addMetaSchema2019 from "./refs/json-schema-2019-09"
  36. const META_SCHEMA_ID = "https://json-schema.org/draft/2019-09/schema"
  37. export default class Ajv2019 extends AjvCore {
  38. constructor(opts: Options = {}) {
  39. super({
  40. ...opts,
  41. dynamicRef: true,
  42. next: true,
  43. unevaluated: true,
  44. })
  45. }
  46. _addVocabularies(): void {
  47. super._addVocabularies()
  48. this.addVocabulary(dynamicVocabulary)
  49. draft7Vocabularies.forEach((v) => this.addVocabulary(v))
  50. this.addVocabulary(nextVocabulary)
  51. this.addVocabulary(unevaluatedVocabulary)
  52. }
  53. _addDefaultMetaSchema(): void {
  54. super._addDefaultMetaSchema()
  55. const {$data, meta} = this.opts
  56. if (!meta) return
  57. addMetaSchema2019.call(this, $data)
  58. this.refs["http://json-schema.org/schema"] = META_SCHEMA_ID
  59. }
  60. defaultMeta(): string | AnySchemaObject | undefined {
  61. return (this.opts.defaultMeta =
  62. super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))
  63. }
  64. }