@nikovirtala/projen-constructs 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +3 -2
- package/lib/components/typedoc.js +1 -1
- package/lib/components/vitest.js +1 -1
- package/lib/project-generator.js +1 -1
- package/lib/projects/awscdk-construct-library.generated.js +1 -1
- package/lib/projects/awscdk-typescript-app.generated.js +1 -1
- package/lib/projects/jsii.generated.js +1 -1
- package/lib/projects/typescript.generated.js +1 -1
- package/node_modules/@jsii/spec/LICENSE +202 -0
- package/node_modules/@jsii/spec/NOTICE +2 -0
- package/node_modules/@jsii/spec/README.md +13 -0
- package/node_modules/@jsii/spec/jest.config.mjs +9 -0
- package/node_modules/@jsii/spec/lib/assembly-utils.d.ts +59 -0
- package/node_modules/@jsii/spec/lib/assembly-utils.js +158 -0
- package/node_modules/@jsii/spec/lib/assembly.d.ts +920 -0
- package/node_modules/@jsii/spec/lib/assembly.js +203 -0
- package/node_modules/@jsii/spec/lib/configuration.d.ts +147 -0
- package/node_modules/@jsii/spec/lib/configuration.js +3 -0
- package/node_modules/@jsii/spec/lib/index.d.ts +7 -0
- package/node_modules/@jsii/spec/lib/index.js +23 -0
- package/node_modules/@jsii/spec/lib/name-tree.d.ts +60 -0
- package/node_modules/@jsii/spec/lib/name-tree.js +84 -0
- package/node_modules/@jsii/spec/lib/redirect.d.ts +33 -0
- package/node_modules/@jsii/spec/lib/redirect.js +46 -0
- package/node_modules/@jsii/spec/lib/validate-assembly.d.ts +4 -0
- package/node_modules/@jsii/spec/lib/validate-assembly.js +29 -0
- package/node_modules/@jsii/spec/package.json +41 -0
- package/node_modules/@jsii/spec/schema/assembly-redirect.schema.json +29 -0
- package/node_modules/@jsii/spec/schema/jsii-spec.schema.json +1110 -0
- package/node_modules/@mrgrain/jsii-struct-builder/LICENSE +202 -0
- package/node_modules/@mrgrain/jsii-struct-builder/README.md +387 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/builder/index.d.ts +1 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/builder/index.js +18 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/builder/struct.d.ts +144 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/builder/struct.js +163 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/index.d.ts +3 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/index.js +20 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/private/assembly.d.ts +2 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/private/assembly.js +76 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/private/index.d.ts +2 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/private/index.js +19 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/private/utils.d.ts +2 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/private/utils.js +14 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/projen/index.d.ts +2 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/projen/index.js +19 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/projen/projen-struct.d.ts +90 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/projen/projen-struct.js +112 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/projen/ts-interface.d.ts +15 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/projen/ts-interface.js +18 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/renderer/index.d.ts +1 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/renderer/index.js +18 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/renderer/typescript.d.ts +53 -0
- package/node_modules/@mrgrain/jsii-struct-builder/lib/renderer/typescript.js +194 -0
- package/node_modules/@mrgrain/jsii-struct-builder/package.json +116 -0
- package/node_modules/ajv/.runkit_example.js +23 -0
- package/node_modules/ajv/LICENSE +22 -0
- package/node_modules/ajv/README.md +207 -0
- package/node_modules/ajv/dist/2019.d.ts +19 -0
- package/node_modules/ajv/dist/2019.js +61 -0
- package/node_modules/ajv/dist/2019.js.map +1 -0
- package/node_modules/ajv/dist/2020.d.ts +19 -0
- package/node_modules/ajv/dist/2020.js +55 -0
- package/node_modules/ajv/dist/2020.js.map +1 -0
- package/node_modules/ajv/dist/ajv.d.ts +18 -0
- package/node_modules/ajv/dist/ajv.js +50 -0
- package/node_modules/ajv/dist/ajv.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/code.d.ts +40 -0
- package/node_modules/ajv/dist/compile/codegen/code.js +156 -0
- package/node_modules/ajv/dist/compile/codegen/code.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/index.d.ts +79 -0
- package/node_modules/ajv/dist/compile/codegen/index.js +697 -0
- package/node_modules/ajv/dist/compile/codegen/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/scope.d.ts +79 -0
- package/node_modules/ajv/dist/compile/codegen/scope.js +143 -0
- package/node_modules/ajv/dist/compile/codegen/scope.js.map +1 -0
- package/node_modules/ajv/dist/compile/errors.d.ts +13 -0
- package/node_modules/ajv/dist/compile/errors.js +123 -0
- package/node_modules/ajv/dist/compile/errors.js.map +1 -0
- package/node_modules/ajv/dist/compile/index.d.ts +80 -0
- package/node_modules/ajv/dist/compile/index.js +242 -0
- package/node_modules/ajv/dist/compile/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/parse.d.ts +4 -0
- package/node_modules/ajv/dist/compile/jtd/parse.js +350 -0
- package/node_modules/ajv/dist/compile/jtd/parse.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.d.ts +4 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.js +229 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/types.d.ts +6 -0
- package/node_modules/ajv/dist/compile/jtd/types.js +14 -0
- package/node_modules/ajv/dist/compile/jtd/types.js.map +1 -0
- package/node_modules/ajv/dist/compile/names.d.ts +20 -0
- package/node_modules/ajv/dist/compile/names.js +28 -0
- package/node_modules/ajv/dist/compile/names.js.map +1 -0
- package/node_modules/ajv/dist/compile/ref_error.d.ts +6 -0
- package/node_modules/ajv/dist/compile/ref_error.js +12 -0
- package/node_modules/ajv/dist/compile/ref_error.js.map +1 -0
- package/node_modules/ajv/dist/compile/resolve.d.ts +12 -0
- package/node_modules/ajv/dist/compile/resolve.js +155 -0
- package/node_modules/ajv/dist/compile/resolve.js.map +1 -0
- package/node_modules/ajv/dist/compile/rules.d.ts +28 -0
- package/node_modules/ajv/dist/compile/rules.js +26 -0
- package/node_modules/ajv/dist/compile/rules.js.map +1 -0
- package/node_modules/ajv/dist/compile/util.d.ts +40 -0
- package/node_modules/ajv/dist/compile/util.js +178 -0
- package/node_modules/ajv/dist/compile/util.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/applicability.d.ts +6 -0
- package/node_modules/ajv/dist/compile/validate/applicability.js +19 -0
- package/node_modules/ajv/dist/compile/validate/applicability.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.d.ts +4 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.js +50 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/dataType.d.ts +17 -0
- package/node_modules/ajv/dist/compile/validate/dataType.js +203 -0
- package/node_modules/ajv/dist/compile/validate/dataType.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/defaults.d.ts +2 -0
- package/node_modules/ajv/dist/compile/validate/defaults.js +35 -0
- package/node_modules/ajv/dist/compile/validate/defaults.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/index.d.ts +42 -0
- package/node_modules/ajv/dist/compile/validate/index.js +520 -0
- package/node_modules/ajv/dist/compile/validate/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/keyword.d.ts +8 -0
- package/node_modules/ajv/dist/compile/validate/keyword.js +124 -0
- package/node_modules/ajv/dist/compile/validate/keyword.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/subschema.d.ts +47 -0
- package/node_modules/ajv/dist/compile/validate/subschema.js +81 -0
- package/node_modules/ajv/dist/compile/validate/subschema.js.map +1 -0
- package/node_modules/ajv/dist/core.d.ts +173 -0
- package/node_modules/ajv/dist/core.js +618 -0
- package/node_modules/ajv/dist/core.js.map +1 -0
- package/node_modules/ajv/dist/jtd.d.ts +47 -0
- package/node_modules/ajv/dist/jtd.js +72 -0
- package/node_modules/ajv/dist/jtd.js.map +1 -0
- package/node_modules/ajv/dist/refs/data.json +13 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.d.ts +2 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.js +28 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.js.map +1 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/applicator.json +53 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/content.json +17 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/core.json +57 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/format.json +14 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/meta-data.json +37 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/validation.json +90 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/schema.json +39 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.d.ts +2 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.js +30 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.js.map +1 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json +48 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json +17 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json +51 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json +37 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json +90 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json +55 -0
- package/node_modules/ajv/dist/refs/json-schema-draft-06.json +137 -0
- package/node_modules/ajv/dist/refs/json-schema-draft-07.json +151 -0
- package/node_modules/ajv/dist/refs/json-schema-secure.json +88 -0
- package/node_modules/ajv/dist/refs/jtd-schema.d.ts +3 -0
- package/node_modules/ajv/dist/refs/jtd-schema.js +118 -0
- package/node_modules/ajv/dist/refs/jtd-schema.js.map +1 -0
- package/node_modules/ajv/dist/runtime/equal.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/equal.js +7 -0
- package/node_modules/ajv/dist/runtime/equal.js.map +1 -0
- package/node_modules/ajv/dist/runtime/parseJson.d.ts +18 -0
- package/node_modules/ajv/dist/runtime/parseJson.js +185 -0
- package/node_modules/ajv/dist/runtime/parseJson.js.map +1 -0
- package/node_modules/ajv/dist/runtime/quote.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/quote.js +30 -0
- package/node_modules/ajv/dist/runtime/quote.js.map +1 -0
- package/node_modules/ajv/dist/runtime/re2.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/re2.js +6 -0
- package/node_modules/ajv/dist/runtime/re2.js.map +1 -0
- package/node_modules/ajv/dist/runtime/timestamp.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/timestamp.js +42 -0
- package/node_modules/ajv/dist/runtime/timestamp.js.map +1 -0
- package/node_modules/ajv/dist/runtime/ucs2length.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/ucs2length.js +24 -0
- package/node_modules/ajv/dist/runtime/ucs2length.js.map +1 -0
- package/node_modules/ajv/dist/runtime/uri.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/uri.js +6 -0
- package/node_modules/ajv/dist/runtime/uri.js.map +1 -0
- package/node_modules/ajv/dist/runtime/validation_error.d.ts +7 -0
- package/node_modules/ajv/dist/runtime/validation_error.js +11 -0
- package/node_modules/ajv/dist/runtime/validation_error.js.map +1 -0
- package/node_modules/ajv/dist/standalone/index.d.ts +6 -0
- package/node_modules/ajv/dist/standalone/index.js +90 -0
- package/node_modules/ajv/dist/standalone/index.js.map +1 -0
- package/node_modules/ajv/dist/standalone/instance.d.ts +12 -0
- package/node_modules/ajv/dist/standalone/instance.js +35 -0
- package/node_modules/ajv/dist/standalone/instance.js.map +1 -0
- package/node_modules/ajv/dist/types/index.d.ts +183 -0
- package/node_modules/ajv/dist/types/index.js +3 -0
- package/node_modules/ajv/dist/types/index.js.map +1 -0
- package/node_modules/ajv/dist/types/json-schema.d.ts +125 -0
- package/node_modules/ajv/dist/types/json-schema.js +3 -0
- package/node_modules/ajv/dist/types/json-schema.js.map +1 -0
- package/node_modules/ajv/dist/types/jtd-schema.d.ts +174 -0
- package/node_modules/ajv/dist/types/jtd-schema.js +3 -0
- package/node_modules/ajv/dist/types/jtd-schema.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +49 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +106 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.js +23 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +12 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts +7 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.js +95 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts +21 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +85 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js +11 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.js +66 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.d.ts +13 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.js +44 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.js +52 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.js +30 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.js +26 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +60 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +75 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +12 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.js +54 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +38 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +13 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/code.d.ts +17 -0
- package/node_modules/ajv/dist/vocabularies/code.js +131 -0
- package/node_modules/ajv/dist/vocabularies/code.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/id.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/core/id.js +10 -0
- package/node_modules/ajv/dist/vocabularies/core/id.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/core/index.js +16 -0
- package/node_modules/ajv/dist/vocabularies/core/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.js +122 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.js +104 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.js +9 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.js +23 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/draft7.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/draft7.js +17 -0
- package/node_modules/ajv/dist/vocabularies/draft7.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js +30 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js +51 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.js +9 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js +16 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js +10 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/errors.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/errors.js +3 -0
- package/node_modules/ajv/dist/vocabularies/errors.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/format/format.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/format/format.js +92 -0
- package/node_modules/ajv/dist/vocabularies/format/format.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/format/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/format/index.js +6 -0
- package/node_modules/ajv/dist/vocabularies/format/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.js +71 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.js +24 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.js +43 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.js +20 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.js +29 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.js +25 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.js +22 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.js +15 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.d.ts +22 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.js +149 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.js +67 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.js +69 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.js +12 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.js +51 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/metadata.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/metadata.js +18 -0
- package/node_modules/ajv/dist/vocabularies/metadata.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/next.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/next.js +8 -0
- package/node_modules/ajv/dist/vocabularies/next.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.js +7 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js +40 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js +65 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.js +25 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js +12 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.js +48 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.d.ts +16 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.js +33 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.js +15 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.js +24 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.js +27 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.d.ts +11 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +27 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +24 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +26 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js +24 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.js +79 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +64 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +1 -0
- package/node_modules/ajv/lib/2019.ts +81 -0
- package/node_modules/ajv/lib/2020.ts +75 -0
- package/node_modules/ajv/lib/ajv.ts +70 -0
- package/node_modules/ajv/lib/compile/codegen/code.ts +169 -0
- package/node_modules/ajv/lib/compile/codegen/index.ts +852 -0
- package/node_modules/ajv/lib/compile/codegen/scope.ts +215 -0
- package/node_modules/ajv/lib/compile/errors.ts +184 -0
- package/node_modules/ajv/lib/compile/index.ts +324 -0
- package/node_modules/ajv/lib/compile/jtd/parse.ts +411 -0
- package/node_modules/ajv/lib/compile/jtd/serialize.ts +266 -0
- package/node_modules/ajv/lib/compile/jtd/types.ts +16 -0
- package/node_modules/ajv/lib/compile/names.ts +27 -0
- package/node_modules/ajv/lib/compile/ref_error.ts +13 -0
- package/node_modules/ajv/lib/compile/resolve.ts +149 -0
- package/node_modules/ajv/lib/compile/rules.ts +50 -0
- package/node_modules/ajv/lib/compile/util.ts +213 -0
- package/node_modules/ajv/lib/compile/validate/applicability.ts +22 -0
- package/node_modules/ajv/lib/compile/validate/boolSchema.ts +47 -0
- package/node_modules/ajv/lib/compile/validate/dataType.ts +230 -0
- package/node_modules/ajv/lib/compile/validate/defaults.ts +32 -0
- package/node_modules/ajv/lib/compile/validate/index.ts +582 -0
- package/node_modules/ajv/lib/compile/validate/keyword.ts +171 -0
- package/node_modules/ajv/lib/compile/validate/subschema.ts +135 -0
- package/node_modules/ajv/lib/core.ts +891 -0
- package/node_modules/ajv/lib/jtd.ts +132 -0
- package/node_modules/ajv/lib/refs/data.json +13 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/index.ts +28 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/applicator.json +53 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/content.json +17 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/core.json +57 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/format.json +14 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/meta-data.json +37 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/validation.json +90 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/schema.json +39 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/index.ts +30 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/applicator.json +48 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/content.json +17 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/core.json +51 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/meta-data.json +37 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/validation.json +90 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/schema.json +55 -0
- package/node_modules/ajv/lib/refs/json-schema-draft-06.json +137 -0
- package/node_modules/ajv/lib/refs/json-schema-draft-07.json +151 -0
- package/node_modules/ajv/lib/refs/json-schema-secure.json +88 -0
- package/node_modules/ajv/lib/refs/jtd-schema.ts +130 -0
- package/node_modules/ajv/lib/runtime/equal.ts +7 -0
- package/node_modules/ajv/lib/runtime/parseJson.ts +177 -0
- package/node_modules/ajv/lib/runtime/quote.ts +31 -0
- package/node_modules/ajv/lib/runtime/re2.ts +6 -0
- package/node_modules/ajv/lib/runtime/timestamp.ts +46 -0
- package/node_modules/ajv/lib/runtime/ucs2length.ts +20 -0
- package/node_modules/ajv/lib/runtime/uri.ts +6 -0
- package/node_modules/ajv/lib/runtime/validation_error.ts +13 -0
- package/node_modules/ajv/lib/standalone/index.ts +100 -0
- package/node_modules/ajv/lib/standalone/instance.ts +36 -0
- package/node_modules/ajv/lib/types/index.ts +244 -0
- package/node_modules/ajv/lib/types/json-schema.ts +187 -0
- package/node_modules/ajv/lib/types/jtd-schema.ts +273 -0
- package/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts +56 -0
- package/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts +118 -0
- package/node_modules/ajv/lib/vocabularies/applicator/allOf.ts +22 -0
- package/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts +14 -0
- package/node_modules/ajv/lib/vocabularies/applicator/contains.ts +109 -0
- package/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts +112 -0
- package/node_modules/ajv/lib/vocabularies/applicator/dependentSchemas.ts +11 -0
- package/node_modules/ajv/lib/vocabularies/applicator/if.ts +80 -0
- package/node_modules/ajv/lib/vocabularies/applicator/index.ts +53 -0
- package/node_modules/ajv/lib/vocabularies/applicator/items.ts +59 -0
- package/node_modules/ajv/lib/vocabularies/applicator/items2020.ts +36 -0
- package/node_modules/ajv/lib/vocabularies/applicator/not.ts +38 -0
- package/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts +82 -0
- package/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts +91 -0
- package/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/applicator/properties.ts +57 -0
- package/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts +50 -0
- package/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts +13 -0
- package/node_modules/ajv/lib/vocabularies/code.ts +168 -0
- package/node_modules/ajv/lib/vocabularies/core/id.ts +10 -0
- package/node_modules/ajv/lib/vocabularies/core/index.ts +16 -0
- package/node_modules/ajv/lib/vocabularies/core/ref.ts +129 -0
- package/node_modules/ajv/lib/vocabularies/discriminator/index.ts +113 -0
- package/node_modules/ajv/lib/vocabularies/discriminator/types.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/draft2020.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/draft7.ts +17 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/dynamicAnchor.ts +31 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/dynamicRef.ts +51 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/index.ts +9 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/recursiveAnchor.ts +14 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/recursiveRef.ts +10 -0
- package/node_modules/ajv/lib/vocabularies/errors.ts +18 -0
- package/node_modules/ajv/lib/vocabularies/format/format.ts +120 -0
- package/node_modules/ajv/lib/vocabularies/format/index.ts +6 -0
- package/node_modules/ajv/lib/vocabularies/jtd/discriminator.ts +89 -0
- package/node_modules/ajv/lib/vocabularies/jtd/elements.ts +32 -0
- package/node_modules/ajv/lib/vocabularies/jtd/enum.ts +45 -0
- package/node_modules/ajv/lib/vocabularies/jtd/error.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/jtd/index.ts +37 -0
- package/node_modules/ajv/lib/vocabularies/jtd/metadata.ts +24 -0
- package/node_modules/ajv/lib/vocabularies/jtd/nullable.ts +21 -0
- package/node_modules/ajv/lib/vocabularies/jtd/optionalProperties.ts +15 -0
- package/node_modules/ajv/lib/vocabularies/jtd/properties.ts +184 -0
- package/node_modules/ajv/lib/vocabularies/jtd/ref.ts +76 -0
- package/node_modules/ajv/lib/vocabularies/jtd/type.ts +75 -0
- package/node_modules/ajv/lib/vocabularies/jtd/union.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/jtd/values.ts +58 -0
- package/node_modules/ajv/lib/vocabularies/metadata.ts +17 -0
- package/node_modules/ajv/lib/vocabularies/next.ts +8 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/index.ts +7 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedItems.ts +47 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedProperties.ts +85 -0
- package/node_modules/ajv/lib/vocabularies/validation/const.ts +28 -0
- package/node_modules/ajv/lib/vocabularies/validation/dependentRequired.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/validation/enum.ts +54 -0
- package/node_modules/ajv/lib/vocabularies/validation/index.ts +49 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitContains.ts +16 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitItems.ts +26 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitLength.ts +30 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts +42 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts +26 -0
- package/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts +34 -0
- package/node_modules/ajv/lib/vocabularies/validation/pattern.ts +28 -0
- package/node_modules/ajv/lib/vocabularies/validation/required.ts +98 -0
- package/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts +79 -0
- package/node_modules/ajv/package.json +126 -0
- package/node_modules/fast-deep-equal/LICENSE +21 -0
- package/node_modules/fast-deep-equal/README.md +96 -0
- package/node_modules/fast-deep-equal/es6/index.d.ts +2 -0
- package/node_modules/fast-deep-equal/es6/index.js +72 -0
- package/node_modules/fast-deep-equal/es6/react.d.ts +2 -0
- package/node_modules/fast-deep-equal/es6/react.js +79 -0
- package/node_modules/fast-deep-equal/index.d.ts +4 -0
- package/node_modules/fast-deep-equal/index.js +46 -0
- package/node_modules/fast-deep-equal/package.json +61 -0
- package/node_modules/fast-deep-equal/react.d.ts +2 -0
- package/node_modules/fast-deep-equal/react.js +53 -0
- package/node_modules/fast-uri/.gitattributes +2 -0
- package/node_modules/fast-uri/.github/.stale.yml +21 -0
- package/node_modules/fast-uri/.github/dependabot.yml +13 -0
- package/node_modules/fast-uri/.github/tests_checker.yml +8 -0
- package/node_modules/fast-uri/.github/workflows/ci.yml +101 -0
- package/node_modules/fast-uri/.github/workflows/package-manager-ci.yml +24 -0
- package/node_modules/fast-uri/LICENSE +32 -0
- package/node_modules/fast-uri/README.md +143 -0
- package/node_modules/fast-uri/benchmark/benchmark.mjs +159 -0
- package/node_modules/fast-uri/benchmark/equal.mjs +51 -0
- package/node_modules/fast-uri/benchmark/non-simple-domain.mjs +22 -0
- package/node_modules/fast-uri/benchmark/package.json +17 -0
- package/node_modules/fast-uri/benchmark/string-array-to-hex-stripped.mjs +24 -0
- package/node_modules/fast-uri/benchmark/ws-is-secure.mjs +65 -0
- package/node_modules/fast-uri/eslint.config.js +6 -0
- package/node_modules/fast-uri/index.js +340 -0
- package/node_modules/fast-uri/lib/schemes.js +267 -0
- package/node_modules/fast-uri/lib/utils.js +336 -0
- package/node_modules/fast-uri/package.json +69 -0
- package/node_modules/fast-uri/test/ajv.test.js +43 -0
- package/node_modules/fast-uri/test/equal.test.js +108 -0
- package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +501 -0
- package/node_modules/fast-uri/test/fixtures/uri-js-serialize.json +120 -0
- package/node_modules/fast-uri/test/parse.test.js +318 -0
- package/node_modules/fast-uri/test/resolve.test.js +78 -0
- package/node_modules/fast-uri/test/rfc-3986.test.js +90 -0
- package/node_modules/fast-uri/test/serialize.test.js +151 -0
- package/node_modules/fast-uri/test/uri-js-compatibility.test.js +33 -0
- package/node_modules/fast-uri/test/uri-js.test.js +912 -0
- package/node_modules/fast-uri/test/util.test.js +38 -0
- package/node_modules/fast-uri/tsconfig.json +9 -0
- package/node_modules/fast-uri/types/index.d.ts +60 -0
- package/node_modules/fast-uri/types/index.test-d.ts +17 -0
- package/node_modules/json-schema-traverse/.eslintrc.yml +27 -0
- package/node_modules/json-schema-traverse/.github/FUNDING.yml +2 -0
- package/node_modules/json-schema-traverse/.github/workflows/build.yml +28 -0
- package/node_modules/json-schema-traverse/.github/workflows/publish.yml +27 -0
- package/node_modules/json-schema-traverse/LICENSE +21 -0
- package/node_modules/json-schema-traverse/README.md +95 -0
- package/node_modules/json-schema-traverse/index.d.ts +40 -0
- package/node_modules/json-schema-traverse/index.js +93 -0
- package/node_modules/json-schema-traverse/package.json +43 -0
- package/node_modules/json-schema-traverse/spec/.eslintrc.yml +6 -0
- package/node_modules/json-schema-traverse/spec/fixtures/schema.js +125 -0
- package/node_modules/json-schema-traverse/spec/index.spec.js +171 -0
- package/node_modules/require-from-string/index.js +34 -0
- package/node_modules/require-from-string/license +21 -0
- package/node_modules/require-from-string/package.json +28 -0
- package/node_modules/require-from-string/readme.md +56 -0
- package/package.json +3 -2
|
@@ -0,0 +1,891 @@
|
|
|
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
|
+
AnyValidateFunction,
|
|
19
|
+
ErrorObject,
|
|
20
|
+
ErrorNoParams,
|
|
21
|
+
} from "./types"
|
|
22
|
+
|
|
23
|
+
export {SchemaCxt, SchemaObjCxt} from "./compile"
|
|
24
|
+
export interface Plugin<Opts> {
|
|
25
|
+
(ajv: Ajv, options?: Opts): Ajv
|
|
26
|
+
[prop: string]: any
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export {KeywordCxt} from "./compile/validate"
|
|
30
|
+
export {DefinedError} from "./vocabularies/errors"
|
|
31
|
+
export {JSONType} from "./compile/rules"
|
|
32
|
+
export {JSONSchemaType} from "./types/json-schema"
|
|
33
|
+
export {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from "./types/jtd-schema"
|
|
34
|
+
export {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from "./compile/codegen"
|
|
35
|
+
|
|
36
|
+
import type {
|
|
37
|
+
Schema,
|
|
38
|
+
AnySchema,
|
|
39
|
+
AnySchemaObject,
|
|
40
|
+
SchemaObject,
|
|
41
|
+
AsyncSchema,
|
|
42
|
+
Vocabulary,
|
|
43
|
+
KeywordDefinition,
|
|
44
|
+
AddedKeywordDefinition,
|
|
45
|
+
AnyValidateFunction,
|
|
46
|
+
ValidateFunction,
|
|
47
|
+
AsyncValidateFunction,
|
|
48
|
+
ErrorObject,
|
|
49
|
+
Format,
|
|
50
|
+
AddedFormat,
|
|
51
|
+
RegExpEngine,
|
|
52
|
+
UriResolver,
|
|
53
|
+
} from "./types"
|
|
54
|
+
import type {JSONSchemaType} from "./types/json-schema"
|
|
55
|
+
import type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from "./types/jtd-schema"
|
|
56
|
+
import ValidationError from "./runtime/validation_error"
|
|
57
|
+
import MissingRefError from "./compile/ref_error"
|
|
58
|
+
import {getRules, ValidationRules, Rule, RuleGroup, JSONType} from "./compile/rules"
|
|
59
|
+
import {SchemaEnv, compileSchema, resolveSchema} from "./compile"
|
|
60
|
+
import {Code, ValueScope} from "./compile/codegen"
|
|
61
|
+
import {normalizeId, getSchemaRefs} from "./compile/resolve"
|
|
62
|
+
import {getJSONTypes} from "./compile/validate/dataType"
|
|
63
|
+
import {eachItem} from "./compile/util"
|
|
64
|
+
import * as $dataRefSchema from "./refs/data.json"
|
|
65
|
+
|
|
66
|
+
import DefaultUriResolver from "./runtime/uri"
|
|
67
|
+
|
|
68
|
+
const defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)
|
|
69
|
+
defaultRegExp.code = "new RegExp"
|
|
70
|
+
|
|
71
|
+
const META_IGNORE_OPTIONS: (keyof Options)[] = ["removeAdditional", "useDefaults", "coerceTypes"]
|
|
72
|
+
const EXT_SCOPE_NAMES = new Set([
|
|
73
|
+
"validate",
|
|
74
|
+
"serialize",
|
|
75
|
+
"parse",
|
|
76
|
+
"wrapper",
|
|
77
|
+
"root",
|
|
78
|
+
"schema",
|
|
79
|
+
"keyword",
|
|
80
|
+
"pattern",
|
|
81
|
+
"formats",
|
|
82
|
+
"validate$data",
|
|
83
|
+
"func",
|
|
84
|
+
"obj",
|
|
85
|
+
"Error",
|
|
86
|
+
])
|
|
87
|
+
|
|
88
|
+
export type Options = CurrentOptions & DeprecatedOptions
|
|
89
|
+
|
|
90
|
+
export interface CurrentOptions {
|
|
91
|
+
// strict mode options (NEW)
|
|
92
|
+
strict?: boolean | "log"
|
|
93
|
+
strictSchema?: boolean | "log"
|
|
94
|
+
strictNumbers?: boolean | "log"
|
|
95
|
+
strictTypes?: boolean | "log"
|
|
96
|
+
strictTuples?: boolean | "log"
|
|
97
|
+
strictRequired?: boolean | "log"
|
|
98
|
+
allowMatchingProperties?: boolean // disables a strict mode restriction
|
|
99
|
+
allowUnionTypes?: boolean
|
|
100
|
+
validateFormats?: boolean
|
|
101
|
+
// validation and reporting options:
|
|
102
|
+
$data?: boolean
|
|
103
|
+
allErrors?: boolean
|
|
104
|
+
verbose?: boolean
|
|
105
|
+
discriminator?: boolean
|
|
106
|
+
unicodeRegExp?: boolean
|
|
107
|
+
timestamp?: "string" | "date" // JTD only
|
|
108
|
+
parseDate?: boolean // JTD only
|
|
109
|
+
allowDate?: boolean // JTD only
|
|
110
|
+
$comment?:
|
|
111
|
+
| true
|
|
112
|
+
| ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)
|
|
113
|
+
formats?: {[Name in string]?: Format}
|
|
114
|
+
keywords?: Vocabulary
|
|
115
|
+
schemas?: AnySchema[] | {[Key in string]?: AnySchema}
|
|
116
|
+
logger?: Logger | false
|
|
117
|
+
loadSchema?: (uri: string) => Promise<AnySchemaObject>
|
|
118
|
+
// options to modify validated data:
|
|
119
|
+
removeAdditional?: boolean | "all" | "failing"
|
|
120
|
+
useDefaults?: boolean | "empty"
|
|
121
|
+
coerceTypes?: boolean | "array"
|
|
122
|
+
// advanced options:
|
|
123
|
+
next?: boolean // NEW
|
|
124
|
+
unevaluated?: boolean // NEW
|
|
125
|
+
dynamicRef?: boolean // NEW
|
|
126
|
+
schemaId?: "id" | "$id"
|
|
127
|
+
jtd?: boolean // NEW
|
|
128
|
+
meta?: SchemaObject | boolean
|
|
129
|
+
defaultMeta?: string | AnySchemaObject
|
|
130
|
+
validateSchema?: boolean | "log"
|
|
131
|
+
addUsedSchema?: boolean
|
|
132
|
+
inlineRefs?: boolean | number
|
|
133
|
+
passContext?: boolean
|
|
134
|
+
loopRequired?: number
|
|
135
|
+
loopEnum?: number // NEW
|
|
136
|
+
ownProperties?: boolean
|
|
137
|
+
multipleOfPrecision?: number
|
|
138
|
+
int32range?: boolean // JTD only
|
|
139
|
+
messages?: boolean
|
|
140
|
+
code?: CodeOptions // NEW
|
|
141
|
+
uriResolver?: UriResolver
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export interface CodeOptions {
|
|
145
|
+
es5?: boolean
|
|
146
|
+
esm?: boolean
|
|
147
|
+
lines?: boolean
|
|
148
|
+
optimize?: boolean | number
|
|
149
|
+
formats?: Code // code to require (or construct) map of available formats - for standalone code
|
|
150
|
+
source?: boolean
|
|
151
|
+
process?: (code: string, schema?: SchemaEnv) => string
|
|
152
|
+
regExp?: RegExpEngine
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
interface InstanceCodeOptions extends CodeOptions {
|
|
156
|
+
regExp: RegExpEngine
|
|
157
|
+
optimize: number
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
interface DeprecatedOptions {
|
|
161
|
+
/** @deprecated */
|
|
162
|
+
ignoreKeywordsWithRef?: boolean
|
|
163
|
+
/** @deprecated */
|
|
164
|
+
jsPropertySyntax?: boolean // added instead of jsonPointers
|
|
165
|
+
/** @deprecated */
|
|
166
|
+
unicode?: boolean
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
interface RemovedOptions {
|
|
170
|
+
format?: boolean
|
|
171
|
+
errorDataPath?: "object" | "property"
|
|
172
|
+
nullable?: boolean // "nullable" keyword is supported by default
|
|
173
|
+
jsonPointers?: boolean
|
|
174
|
+
extendRefs?: true | "ignore" | "fail"
|
|
175
|
+
missingRefs?: true | "ignore" | "fail"
|
|
176
|
+
processCode?: (code: string, schema?: SchemaEnv) => string
|
|
177
|
+
sourceCode?: boolean
|
|
178
|
+
strictDefaults?: boolean
|
|
179
|
+
strictKeywords?: boolean
|
|
180
|
+
uniqueItems?: boolean
|
|
181
|
+
unknownFormats?: true | string[] | "ignore"
|
|
182
|
+
cache?: any
|
|
183
|
+
serialize?: (schema: AnySchema) => unknown
|
|
184
|
+
ajvErrors?: boolean
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
type OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {
|
|
188
|
+
[K in keyof T]-?: string | undefined
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const removedOptions: OptionsInfo<RemovedOptions> = {
|
|
192
|
+
errorDataPath: "",
|
|
193
|
+
format: "`validateFormats: false` can be used instead.",
|
|
194
|
+
nullable: '"nullable" keyword is supported by default.',
|
|
195
|
+
jsonPointers: "Deprecated jsPropertySyntax can be used instead.",
|
|
196
|
+
extendRefs: "Deprecated ignoreKeywordsWithRef can be used instead.",
|
|
197
|
+
missingRefs: "Pass empty schema with $id that should be ignored to ajv.addSchema.",
|
|
198
|
+
processCode: "Use option `code: {process: (code, schemaEnv: object) => string}`",
|
|
199
|
+
sourceCode: "Use option `code: {source: true}`",
|
|
200
|
+
strictDefaults: "It is default now, see option `strict`.",
|
|
201
|
+
strictKeywords: "It is default now, see option `strict`.",
|
|
202
|
+
uniqueItems: '"uniqueItems" keyword is always validated.',
|
|
203
|
+
unknownFormats: "Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",
|
|
204
|
+
cache: "Map is used as cache, schema object as key.",
|
|
205
|
+
serialize: "Map is used as cache, schema object as key.",
|
|
206
|
+
ajvErrors: "It is default now.",
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const deprecatedOptions: OptionsInfo<DeprecatedOptions> = {
|
|
210
|
+
ignoreKeywordsWithRef: "",
|
|
211
|
+
jsPropertySyntax: "",
|
|
212
|
+
unicode: '"minLength"/"maxLength" account for unicode characters by default.',
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
type RequiredInstanceOptions = {
|
|
216
|
+
[K in
|
|
217
|
+
| "strictSchema"
|
|
218
|
+
| "strictNumbers"
|
|
219
|
+
| "strictTypes"
|
|
220
|
+
| "strictTuples"
|
|
221
|
+
| "strictRequired"
|
|
222
|
+
| "inlineRefs"
|
|
223
|
+
| "loopRequired"
|
|
224
|
+
| "loopEnum"
|
|
225
|
+
| "meta"
|
|
226
|
+
| "messages"
|
|
227
|
+
| "schemaId"
|
|
228
|
+
| "addUsedSchema"
|
|
229
|
+
| "validateSchema"
|
|
230
|
+
| "validateFormats"
|
|
231
|
+
| "int32range"
|
|
232
|
+
| "unicodeRegExp"
|
|
233
|
+
| "uriResolver"]: NonNullable<Options[K]>
|
|
234
|
+
} & {code: InstanceCodeOptions}
|
|
235
|
+
|
|
236
|
+
export type InstanceOptions = Options & RequiredInstanceOptions
|
|
237
|
+
|
|
238
|
+
const MAX_EXPRESSION = 200
|
|
239
|
+
|
|
240
|
+
// eslint-disable-next-line complexity
|
|
241
|
+
function requiredOptions(o: Options): RequiredInstanceOptions {
|
|
242
|
+
const s = o.strict
|
|
243
|
+
const _optz = o.code?.optimize
|
|
244
|
+
const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0
|
|
245
|
+
const regExp = o.code?.regExp ?? defaultRegExp
|
|
246
|
+
const uriResolver = o.uriResolver ?? DefaultUriResolver
|
|
247
|
+
return {
|
|
248
|
+
strictSchema: o.strictSchema ?? s ?? true,
|
|
249
|
+
strictNumbers: o.strictNumbers ?? s ?? true,
|
|
250
|
+
strictTypes: o.strictTypes ?? s ?? "log",
|
|
251
|
+
strictTuples: o.strictTuples ?? s ?? "log",
|
|
252
|
+
strictRequired: o.strictRequired ?? s ?? false,
|
|
253
|
+
code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},
|
|
254
|
+
loopRequired: o.loopRequired ?? MAX_EXPRESSION,
|
|
255
|
+
loopEnum: o.loopEnum ?? MAX_EXPRESSION,
|
|
256
|
+
meta: o.meta ?? true,
|
|
257
|
+
messages: o.messages ?? true,
|
|
258
|
+
inlineRefs: o.inlineRefs ?? true,
|
|
259
|
+
schemaId: o.schemaId ?? "$id",
|
|
260
|
+
addUsedSchema: o.addUsedSchema ?? true,
|
|
261
|
+
validateSchema: o.validateSchema ?? true,
|
|
262
|
+
validateFormats: o.validateFormats ?? true,
|
|
263
|
+
unicodeRegExp: o.unicodeRegExp ?? true,
|
|
264
|
+
int32range: o.int32range ?? true,
|
|
265
|
+
uriResolver: uriResolver,
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export interface Logger {
|
|
270
|
+
log(...args: unknown[]): unknown
|
|
271
|
+
warn(...args: unknown[]): unknown
|
|
272
|
+
error(...args: unknown[]): unknown
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
export default class Ajv {
|
|
276
|
+
opts: InstanceOptions
|
|
277
|
+
errors?: ErrorObject[] | null // errors from the last validation
|
|
278
|
+
logger: Logger
|
|
279
|
+
// shared external scope values for compiled functions
|
|
280
|
+
readonly scope: ValueScope
|
|
281
|
+
readonly schemas: {[Key in string]?: SchemaEnv} = {}
|
|
282
|
+
readonly refs: {[Ref in string]?: SchemaEnv | string} = {}
|
|
283
|
+
readonly formats: {[Name in string]?: AddedFormat} = {}
|
|
284
|
+
readonly RULES: ValidationRules
|
|
285
|
+
readonly _compilations: Set<SchemaEnv> = new Set()
|
|
286
|
+
private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}
|
|
287
|
+
private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()
|
|
288
|
+
private readonly _metaOpts: InstanceOptions
|
|
289
|
+
|
|
290
|
+
static ValidationError = ValidationError
|
|
291
|
+
static MissingRefError = MissingRefError
|
|
292
|
+
|
|
293
|
+
constructor(opts: Options = {}) {
|
|
294
|
+
opts = this.opts = {...opts, ...requiredOptions(opts)}
|
|
295
|
+
const {es5, lines} = this.opts.code
|
|
296
|
+
|
|
297
|
+
this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})
|
|
298
|
+
this.logger = getLogger(opts.logger)
|
|
299
|
+
const formatOpt = opts.validateFormats
|
|
300
|
+
opts.validateFormats = false
|
|
301
|
+
|
|
302
|
+
this.RULES = getRules()
|
|
303
|
+
checkOptions.call(this, removedOptions, opts, "NOT SUPPORTED")
|
|
304
|
+
checkOptions.call(this, deprecatedOptions, opts, "DEPRECATED", "warn")
|
|
305
|
+
this._metaOpts = getMetaSchemaOptions.call(this)
|
|
306
|
+
|
|
307
|
+
if (opts.formats) addInitialFormats.call(this)
|
|
308
|
+
this._addVocabularies()
|
|
309
|
+
this._addDefaultMetaSchema()
|
|
310
|
+
if (opts.keywords) addInitialKeywords.call(this, opts.keywords)
|
|
311
|
+
if (typeof opts.meta == "object") this.addMetaSchema(opts.meta)
|
|
312
|
+
addInitialSchemas.call(this)
|
|
313
|
+
opts.validateFormats = formatOpt
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
_addVocabularies(): void {
|
|
317
|
+
this.addKeyword("$async")
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
_addDefaultMetaSchema(): void {
|
|
321
|
+
const {$data, meta, schemaId} = this.opts
|
|
322
|
+
let _dataRefSchema: SchemaObject = $dataRefSchema
|
|
323
|
+
if (schemaId === "id") {
|
|
324
|
+
_dataRefSchema = {...$dataRefSchema}
|
|
325
|
+
_dataRefSchema.id = _dataRefSchema.$id
|
|
326
|
+
delete _dataRefSchema.$id
|
|
327
|
+
}
|
|
328
|
+
if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
defaultMeta(): string | AnySchemaObject | undefined {
|
|
332
|
+
const {meta, schemaId} = this.opts
|
|
333
|
+
return (this.opts.defaultMeta = typeof meta == "object" ? meta[schemaId] || meta : undefined)
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// Validate data using schema
|
|
337
|
+
// AnySchema will be compiled and cached using schema itself as a key for Map
|
|
338
|
+
validate(schema: Schema | string, data: unknown): boolean
|
|
339
|
+
validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>
|
|
340
|
+
validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T
|
|
341
|
+
// Separated for type inference to work
|
|
342
|
+
// eslint-disable-next-line @typescript-eslint/unified-signatures
|
|
343
|
+
validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T
|
|
344
|
+
// This overload is only intended for typescript inference, the first
|
|
345
|
+
// argument prevents manual type annotation from matching this overload
|
|
346
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
347
|
+
validate<N extends never, T extends SomeJTDSchemaType>(
|
|
348
|
+
schema: T,
|
|
349
|
+
data: unknown
|
|
350
|
+
): data is JTDDataType<T>
|
|
351
|
+
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
352
|
+
validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>
|
|
353
|
+
validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>
|
|
354
|
+
validate<T>(
|
|
355
|
+
schemaKeyRef: AnySchema | string, // key, ref or schema object
|
|
356
|
+
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
357
|
+
data: unknown | T // to be validated
|
|
358
|
+
): boolean | Promise<T> {
|
|
359
|
+
let v: AnyValidateFunction | undefined
|
|
360
|
+
if (typeof schemaKeyRef == "string") {
|
|
361
|
+
v = this.getSchema<T>(schemaKeyRef)
|
|
362
|
+
if (!v) throw new Error(`no schema with key or ref "${schemaKeyRef}"`)
|
|
363
|
+
} else {
|
|
364
|
+
v = this.compile<T>(schemaKeyRef)
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
const valid = v(data)
|
|
368
|
+
if (!("$async" in v)) this.errors = v.errors
|
|
369
|
+
return valid
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// Create validation function for passed schema
|
|
373
|
+
// _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.
|
|
374
|
+
compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>
|
|
375
|
+
// Separated for type inference to work
|
|
376
|
+
// eslint-disable-next-line @typescript-eslint/unified-signatures
|
|
377
|
+
compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>
|
|
378
|
+
// This overload is only intended for typescript inference, the first
|
|
379
|
+
// argument prevents manual type annotation from matching this overload
|
|
380
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
381
|
+
compile<N extends never, T extends SomeJTDSchemaType>(
|
|
382
|
+
schema: T,
|
|
383
|
+
_meta?: boolean
|
|
384
|
+
): ValidateFunction<JTDDataType<T>>
|
|
385
|
+
compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>
|
|
386
|
+
compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>
|
|
387
|
+
compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {
|
|
388
|
+
const sch = this._addSchema(schema, _meta)
|
|
389
|
+
return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// Creates validating function for passed schema with asynchronous loading of missing schemas.
|
|
393
|
+
// `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.
|
|
394
|
+
// TODO allow passing schema URI
|
|
395
|
+
// meta - optional true to compile meta-schema
|
|
396
|
+
compileAsync<T = unknown>(
|
|
397
|
+
schema: SchemaObject | JSONSchemaType<T>,
|
|
398
|
+
_meta?: boolean
|
|
399
|
+
): Promise<ValidateFunction<T>>
|
|
400
|
+
// Separated for type inference to work
|
|
401
|
+
// eslint-disable-next-line @typescript-eslint/unified-signatures
|
|
402
|
+
compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>
|
|
403
|
+
compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>
|
|
404
|
+
// eslint-disable-next-line @typescript-eslint/unified-signatures
|
|
405
|
+
compileAsync<T = unknown>(
|
|
406
|
+
schema: AnySchemaObject,
|
|
407
|
+
meta?: boolean
|
|
408
|
+
): Promise<AnyValidateFunction<T>>
|
|
409
|
+
compileAsync<T = unknown>(
|
|
410
|
+
schema: AnySchemaObject,
|
|
411
|
+
meta?: boolean
|
|
412
|
+
): Promise<AnyValidateFunction<T>> {
|
|
413
|
+
if (typeof this.opts.loadSchema != "function") {
|
|
414
|
+
throw new Error("options.loadSchema should be a function")
|
|
415
|
+
}
|
|
416
|
+
const {loadSchema} = this.opts
|
|
417
|
+
return runCompileAsync.call(this, schema, meta)
|
|
418
|
+
|
|
419
|
+
async function runCompileAsync(
|
|
420
|
+
this: Ajv,
|
|
421
|
+
_schema: AnySchemaObject,
|
|
422
|
+
_meta?: boolean
|
|
423
|
+
): Promise<AnyValidateFunction> {
|
|
424
|
+
await loadMetaSchema.call(this, _schema.$schema)
|
|
425
|
+
const sch = this._addSchema(_schema, _meta)
|
|
426
|
+
return sch.validate || _compileAsync.call(this, sch)
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {
|
|
430
|
+
if ($ref && !this.getSchema($ref)) {
|
|
431
|
+
await runCompileAsync.call(this, {$ref}, true)
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {
|
|
436
|
+
try {
|
|
437
|
+
return this._compileSchemaEnv(sch)
|
|
438
|
+
} catch (e) {
|
|
439
|
+
if (!(e instanceof MissingRefError)) throw e
|
|
440
|
+
checkLoaded.call(this, e)
|
|
441
|
+
await loadMissingSchema.call(this, e.missingSchema)
|
|
442
|
+
return _compileAsync.call(this, sch)
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {
|
|
447
|
+
if (this.refs[ref]) {
|
|
448
|
+
throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {
|
|
453
|
+
const _schema = await _loadSchema.call(this, ref)
|
|
454
|
+
if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)
|
|
455
|
+
if (!this.refs[ref]) this.addSchema(_schema, ref, meta)
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {
|
|
459
|
+
const p = this._loading[ref]
|
|
460
|
+
if (p) return p
|
|
461
|
+
try {
|
|
462
|
+
return await (this._loading[ref] = loadSchema(ref))
|
|
463
|
+
} finally {
|
|
464
|
+
delete this._loading[ref]
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// Adds schema to the instance
|
|
470
|
+
addSchema(
|
|
471
|
+
schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored
|
|
472
|
+
key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.
|
|
473
|
+
_meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.
|
|
474
|
+
_validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.
|
|
475
|
+
): Ajv {
|
|
476
|
+
if (Array.isArray(schema)) {
|
|
477
|
+
for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)
|
|
478
|
+
return this
|
|
479
|
+
}
|
|
480
|
+
let id: string | undefined
|
|
481
|
+
if (typeof schema === "object") {
|
|
482
|
+
const {schemaId} = this.opts
|
|
483
|
+
id = schema[schemaId]
|
|
484
|
+
if (id !== undefined && typeof id != "string") {
|
|
485
|
+
throw new Error(`schema ${schemaId} must be string`)
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
key = normalizeId(key || id)
|
|
489
|
+
this._checkUnique(key)
|
|
490
|
+
this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)
|
|
491
|
+
return this
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// Add schema that will be used to validate other schemas
|
|
495
|
+
// options in META_IGNORE_OPTIONS are alway set to false
|
|
496
|
+
addMetaSchema(
|
|
497
|
+
schema: AnySchemaObject,
|
|
498
|
+
key?: string, // schema key
|
|
499
|
+
_validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema
|
|
500
|
+
): Ajv {
|
|
501
|
+
this.addSchema(schema, key, true, _validateSchema)
|
|
502
|
+
return this
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// Validate schema against its meta-schema
|
|
506
|
+
validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {
|
|
507
|
+
if (typeof schema == "boolean") return true
|
|
508
|
+
let $schema: string | AnySchemaObject | undefined
|
|
509
|
+
$schema = schema.$schema
|
|
510
|
+
if ($schema !== undefined && typeof $schema != "string") {
|
|
511
|
+
throw new Error("$schema must be a string")
|
|
512
|
+
}
|
|
513
|
+
$schema = $schema || this.opts.defaultMeta || this.defaultMeta()
|
|
514
|
+
if (!$schema) {
|
|
515
|
+
this.logger.warn("meta-schema not available")
|
|
516
|
+
this.errors = null
|
|
517
|
+
return true
|
|
518
|
+
}
|
|
519
|
+
const valid = this.validate($schema, schema)
|
|
520
|
+
if (!valid && throwOrLogError) {
|
|
521
|
+
const message = "schema is invalid: " + this.errorsText()
|
|
522
|
+
if (this.opts.validateSchema === "log") this.logger.error(message)
|
|
523
|
+
else throw new Error(message)
|
|
524
|
+
}
|
|
525
|
+
return valid
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
// Get compiled schema by `key` or `ref`.
|
|
529
|
+
// (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)
|
|
530
|
+
getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {
|
|
531
|
+
let sch
|
|
532
|
+
while (typeof (sch = getSchEnv.call(this, keyRef)) == "string") keyRef = sch
|
|
533
|
+
if (sch === undefined) {
|
|
534
|
+
const {schemaId} = this.opts
|
|
535
|
+
const root = new SchemaEnv({schema: {}, schemaId})
|
|
536
|
+
sch = resolveSchema.call(this, root, keyRef)
|
|
537
|
+
if (!sch) return
|
|
538
|
+
this.refs[keyRef] = sch
|
|
539
|
+
}
|
|
540
|
+
return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
// Remove cached schema(s).
|
|
544
|
+
// If no parameter is passed all schemas but meta-schemas are removed.
|
|
545
|
+
// If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.
|
|
546
|
+
// Even if schema is referenced by other schemas it still can be removed as other schemas have local references.
|
|
547
|
+
removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {
|
|
548
|
+
if (schemaKeyRef instanceof RegExp) {
|
|
549
|
+
this._removeAllSchemas(this.schemas, schemaKeyRef)
|
|
550
|
+
this._removeAllSchemas(this.refs, schemaKeyRef)
|
|
551
|
+
return this
|
|
552
|
+
}
|
|
553
|
+
switch (typeof schemaKeyRef) {
|
|
554
|
+
case "undefined":
|
|
555
|
+
this._removeAllSchemas(this.schemas)
|
|
556
|
+
this._removeAllSchemas(this.refs)
|
|
557
|
+
this._cache.clear()
|
|
558
|
+
return this
|
|
559
|
+
case "string": {
|
|
560
|
+
const sch = getSchEnv.call(this, schemaKeyRef)
|
|
561
|
+
if (typeof sch == "object") this._cache.delete(sch.schema)
|
|
562
|
+
delete this.schemas[schemaKeyRef]
|
|
563
|
+
delete this.refs[schemaKeyRef]
|
|
564
|
+
return this
|
|
565
|
+
}
|
|
566
|
+
case "object": {
|
|
567
|
+
const cacheKey = schemaKeyRef
|
|
568
|
+
this._cache.delete(cacheKey)
|
|
569
|
+
let id = schemaKeyRef[this.opts.schemaId]
|
|
570
|
+
if (id) {
|
|
571
|
+
id = normalizeId(id)
|
|
572
|
+
delete this.schemas[id]
|
|
573
|
+
delete this.refs[id]
|
|
574
|
+
}
|
|
575
|
+
return this
|
|
576
|
+
}
|
|
577
|
+
default:
|
|
578
|
+
throw new Error("ajv.removeSchema: invalid parameter")
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
// add "vocabulary" - a collection of keywords
|
|
583
|
+
addVocabulary(definitions: Vocabulary): Ajv {
|
|
584
|
+
for (const def of definitions) this.addKeyword(def)
|
|
585
|
+
return this
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
addKeyword(
|
|
589
|
+
kwdOrDef: string | KeywordDefinition,
|
|
590
|
+
def?: KeywordDefinition // deprecated
|
|
591
|
+
): Ajv {
|
|
592
|
+
let keyword: string | string[]
|
|
593
|
+
if (typeof kwdOrDef == "string") {
|
|
594
|
+
keyword = kwdOrDef
|
|
595
|
+
if (typeof def == "object") {
|
|
596
|
+
this.logger.warn("these parameters are deprecated, see docs for addKeyword")
|
|
597
|
+
def.keyword = keyword
|
|
598
|
+
}
|
|
599
|
+
} else if (typeof kwdOrDef == "object" && def === undefined) {
|
|
600
|
+
def = kwdOrDef
|
|
601
|
+
keyword = def.keyword
|
|
602
|
+
if (Array.isArray(keyword) && !keyword.length) {
|
|
603
|
+
throw new Error("addKeywords: keyword must be string or non-empty array")
|
|
604
|
+
}
|
|
605
|
+
} else {
|
|
606
|
+
throw new Error("invalid addKeywords parameters")
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
checkKeyword.call(this, keyword, def)
|
|
610
|
+
if (!def) {
|
|
611
|
+
eachItem(keyword, (kwd) => addRule.call(this, kwd))
|
|
612
|
+
return this
|
|
613
|
+
}
|
|
614
|
+
keywordMetaschema.call(this, def)
|
|
615
|
+
const definition: AddedKeywordDefinition = {
|
|
616
|
+
...def,
|
|
617
|
+
type: getJSONTypes(def.type),
|
|
618
|
+
schemaType: getJSONTypes(def.schemaType),
|
|
619
|
+
}
|
|
620
|
+
eachItem(
|
|
621
|
+
keyword,
|
|
622
|
+
definition.type.length === 0
|
|
623
|
+
? (k) => addRule.call(this, k, definition)
|
|
624
|
+
: (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))
|
|
625
|
+
)
|
|
626
|
+
return this
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
getKeyword(keyword: string): AddedKeywordDefinition | boolean {
|
|
630
|
+
const rule = this.RULES.all[keyword]
|
|
631
|
+
return typeof rule == "object" ? rule.definition : !!rule
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// Remove keyword
|
|
635
|
+
removeKeyword(keyword: string): Ajv {
|
|
636
|
+
// TODO return type should be Ajv
|
|
637
|
+
const {RULES} = this
|
|
638
|
+
delete RULES.keywords[keyword]
|
|
639
|
+
delete RULES.all[keyword]
|
|
640
|
+
for (const group of RULES.rules) {
|
|
641
|
+
const i = group.rules.findIndex((rule) => rule.keyword === keyword)
|
|
642
|
+
if (i >= 0) group.rules.splice(i, 1)
|
|
643
|
+
}
|
|
644
|
+
return this
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// Add format
|
|
648
|
+
addFormat(name: string, format: Format): Ajv {
|
|
649
|
+
if (typeof format == "string") format = new RegExp(format)
|
|
650
|
+
this.formats[name] = format
|
|
651
|
+
return this
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
errorsText(
|
|
655
|
+
errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors
|
|
656
|
+
{separator = ", ", dataVar = "data"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`
|
|
657
|
+
): string {
|
|
658
|
+
if (!errors || errors.length === 0) return "No errors"
|
|
659
|
+
return errors
|
|
660
|
+
.map((e) => `${dataVar}${e.instancePath} ${e.message}`)
|
|
661
|
+
.reduce((text, msg) => text + separator + msg)
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
$dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {
|
|
665
|
+
const rules = this.RULES.all
|
|
666
|
+
metaSchema = JSON.parse(JSON.stringify(metaSchema))
|
|
667
|
+
for (const jsonPointer of keywordsJsonPointers) {
|
|
668
|
+
const segments = jsonPointer.split("/").slice(1) // first segment is an empty string
|
|
669
|
+
let keywords = metaSchema
|
|
670
|
+
for (const seg of segments) keywords = keywords[seg] as AnySchemaObject
|
|
671
|
+
|
|
672
|
+
for (const key in rules) {
|
|
673
|
+
const rule = rules[key]
|
|
674
|
+
if (typeof rule != "object") continue
|
|
675
|
+
const {$data} = rule.definition
|
|
676
|
+
const schema = keywords[key] as AnySchemaObject | undefined
|
|
677
|
+
if ($data && schema) keywords[key] = schemaOrData(schema)
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
return metaSchema
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {
|
|
685
|
+
for (const keyRef in schemas) {
|
|
686
|
+
const sch = schemas[keyRef]
|
|
687
|
+
if (!regex || regex.test(keyRef)) {
|
|
688
|
+
if (typeof sch == "string") {
|
|
689
|
+
delete schemas[keyRef]
|
|
690
|
+
} else if (sch && !sch.meta) {
|
|
691
|
+
this._cache.delete(sch.schema)
|
|
692
|
+
delete schemas[keyRef]
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
_addSchema(
|
|
699
|
+
schema: AnySchema,
|
|
700
|
+
meta?: boolean,
|
|
701
|
+
baseId?: string,
|
|
702
|
+
validateSchema = this.opts.validateSchema,
|
|
703
|
+
addSchema = this.opts.addUsedSchema
|
|
704
|
+
): SchemaEnv {
|
|
705
|
+
let id: string | undefined
|
|
706
|
+
const {schemaId} = this.opts
|
|
707
|
+
if (typeof schema == "object") {
|
|
708
|
+
id = schema[schemaId]
|
|
709
|
+
} else {
|
|
710
|
+
if (this.opts.jtd) throw new Error("schema must be object")
|
|
711
|
+
else if (typeof schema != "boolean") throw new Error("schema must be object or boolean")
|
|
712
|
+
}
|
|
713
|
+
let sch = this._cache.get(schema)
|
|
714
|
+
if (sch !== undefined) return sch
|
|
715
|
+
|
|
716
|
+
baseId = normalizeId(id || baseId)
|
|
717
|
+
const localRefs = getSchemaRefs.call(this, schema, baseId)
|
|
718
|
+
sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})
|
|
719
|
+
this._cache.set(sch.schema, sch)
|
|
720
|
+
if (addSchema && !baseId.startsWith("#")) {
|
|
721
|
+
// TODO atm it is allowed to overwrite schemas without id (instead of not adding them)
|
|
722
|
+
if (baseId) this._checkUnique(baseId)
|
|
723
|
+
this.refs[baseId] = sch
|
|
724
|
+
}
|
|
725
|
+
if (validateSchema) this.validateSchema(schema, true)
|
|
726
|
+
return sch
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
private _checkUnique(id: string): void {
|
|
730
|
+
if (this.schemas[id] || this.refs[id]) {
|
|
731
|
+
throw new Error(`schema with key or id "${id}" already exists`)
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {
|
|
736
|
+
if (sch.meta) this._compileMetaSchema(sch)
|
|
737
|
+
else compileSchema.call(this, sch)
|
|
738
|
+
|
|
739
|
+
/* istanbul ignore if */
|
|
740
|
+
if (!sch.validate) throw new Error("ajv implementation error")
|
|
741
|
+
return sch.validate
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
private _compileMetaSchema(sch: SchemaEnv): void {
|
|
745
|
+
const currentOpts = this.opts
|
|
746
|
+
this.opts = this._metaOpts
|
|
747
|
+
try {
|
|
748
|
+
compileSchema.call(this, sch)
|
|
749
|
+
} finally {
|
|
750
|
+
this.opts = currentOpts
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
export interface ErrorsTextOptions {
|
|
756
|
+
separator?: string
|
|
757
|
+
dataVar?: string
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
function checkOptions(
|
|
761
|
+
this: Ajv,
|
|
762
|
+
checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,
|
|
763
|
+
options: Options & RemovedOptions,
|
|
764
|
+
msg: string,
|
|
765
|
+
log: "warn" | "error" = "error"
|
|
766
|
+
): void {
|
|
767
|
+
for (const key in checkOpts) {
|
|
768
|
+
const opt = key as keyof typeof checkOpts
|
|
769
|
+
if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
function getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {
|
|
774
|
+
keyRef = normalizeId(keyRef) // TODO tests fail without this line
|
|
775
|
+
return this.schemas[keyRef] || this.refs[keyRef]
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
function addInitialSchemas(this: Ajv): void {
|
|
779
|
+
const optsSchemas = this.opts.schemas
|
|
780
|
+
if (!optsSchemas) return
|
|
781
|
+
if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)
|
|
782
|
+
else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
function addInitialFormats(this: Ajv): void {
|
|
786
|
+
for (const name in this.opts.formats) {
|
|
787
|
+
const format = this.opts.formats[name]
|
|
788
|
+
if (format) this.addFormat(name, format)
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
function addInitialKeywords(
|
|
793
|
+
this: Ajv,
|
|
794
|
+
defs: Vocabulary | {[K in string]?: KeywordDefinition}
|
|
795
|
+
): void {
|
|
796
|
+
if (Array.isArray(defs)) {
|
|
797
|
+
this.addVocabulary(defs)
|
|
798
|
+
return
|
|
799
|
+
}
|
|
800
|
+
this.logger.warn("keywords option as map is deprecated, pass array")
|
|
801
|
+
for (const keyword in defs) {
|
|
802
|
+
const def = defs[keyword] as KeywordDefinition
|
|
803
|
+
if (!def.keyword) def.keyword = keyword
|
|
804
|
+
this.addKeyword(def)
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
function getMetaSchemaOptions(this: Ajv): InstanceOptions {
|
|
809
|
+
const metaOpts = {...this.opts}
|
|
810
|
+
for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]
|
|
811
|
+
return metaOpts
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
const noLogs = {log() {}, warn() {}, error() {}}
|
|
815
|
+
|
|
816
|
+
function getLogger(logger?: Partial<Logger> | false): Logger {
|
|
817
|
+
if (logger === false) return noLogs
|
|
818
|
+
if (logger === undefined) return console
|
|
819
|
+
if (logger.log && logger.warn && logger.error) return logger as Logger
|
|
820
|
+
throw new Error("logger must implement log, warn and error methods")
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
const KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i
|
|
824
|
+
|
|
825
|
+
function checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {
|
|
826
|
+
const {RULES} = this
|
|
827
|
+
eachItem(keyword, (kwd) => {
|
|
828
|
+
if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)
|
|
829
|
+
if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)
|
|
830
|
+
})
|
|
831
|
+
if (!def) return
|
|
832
|
+
if (def.$data && !("code" in def || "validate" in def)) {
|
|
833
|
+
throw new Error('$data keyword must have "code" or "validate" function')
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
function addRule(
|
|
838
|
+
this: Ajv,
|
|
839
|
+
keyword: string,
|
|
840
|
+
definition?: AddedKeywordDefinition,
|
|
841
|
+
dataType?: JSONType
|
|
842
|
+
): void {
|
|
843
|
+
const post = definition?.post
|
|
844
|
+
if (dataType && post) throw new Error('keyword with "post" flag cannot have "type"')
|
|
845
|
+
const {RULES} = this
|
|
846
|
+
let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)
|
|
847
|
+
if (!ruleGroup) {
|
|
848
|
+
ruleGroup = {type: dataType, rules: []}
|
|
849
|
+
RULES.rules.push(ruleGroup)
|
|
850
|
+
}
|
|
851
|
+
RULES.keywords[keyword] = true
|
|
852
|
+
if (!definition) return
|
|
853
|
+
|
|
854
|
+
const rule: Rule = {
|
|
855
|
+
keyword,
|
|
856
|
+
definition: {
|
|
857
|
+
...definition,
|
|
858
|
+
type: getJSONTypes(definition.type),
|
|
859
|
+
schemaType: getJSONTypes(definition.schemaType),
|
|
860
|
+
},
|
|
861
|
+
}
|
|
862
|
+
if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)
|
|
863
|
+
else ruleGroup.rules.push(rule)
|
|
864
|
+
RULES.all[keyword] = rule
|
|
865
|
+
definition.implements?.forEach((kwd) => this.addKeyword(kwd))
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
function addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {
|
|
869
|
+
const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)
|
|
870
|
+
if (i >= 0) {
|
|
871
|
+
ruleGroup.rules.splice(i, 0, rule)
|
|
872
|
+
} else {
|
|
873
|
+
ruleGroup.rules.push(rule)
|
|
874
|
+
this.logger.warn(`rule ${before} is not defined`)
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
function keywordMetaschema(this: Ajv, def: KeywordDefinition): void {
|
|
879
|
+
let {metaSchema} = def
|
|
880
|
+
if (metaSchema === undefined) return
|
|
881
|
+
if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)
|
|
882
|
+
def.validateSchema = this.compile(metaSchema, true)
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
const $dataRef = {
|
|
886
|
+
$ref: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
function schemaOrData(schema: AnySchema): AnySchemaObject {
|
|
890
|
+
return {anyOf: [schema, $dataRef]}
|
|
891
|
+
}
|