Spaces:
Sleeping
Sleeping
| /** | |
| * @fileoverview The instance of Ajv validator. | |
| * @author Evgeny Poberezkin | |
| */ | |
| //------------------------------------------------------------------------------ | |
| // Requirements | |
| //------------------------------------------------------------------------------ | |
| import Ajv from "ajv"; | |
| //----------------------------------------------------------------------------- | |
| // Helpers | |
| //----------------------------------------------------------------------------- | |
| /* | |
| * Copied from ajv/lib/refs/json-schema-draft-04.json | |
| * The MIT License (MIT) | |
| * Copyright (c) 2015-2017 Evgeny Poberezkin | |
| */ | |
| const metaSchema = { | |
| id: "http://json-schema.org/draft-04/schema#", | |
| $schema: "http://json-schema.org/draft-04/schema#", | |
| description: "Core schema meta-schema", | |
| definitions: { | |
| schemaArray: { | |
| type: "array", | |
| minItems: 1, | |
| items: { $ref: "#" } | |
| }, | |
| positiveInteger: { | |
| type: "integer", | |
| minimum: 0 | |
| }, | |
| positiveIntegerDefault0: { | |
| allOf: [{ $ref: "#/definitions/positiveInteger" }, { default: 0 }] | |
| }, | |
| simpleTypes: { | |
| enum: ["array", "boolean", "integer", "null", "number", "object", "string"] | |
| }, | |
| stringArray: { | |
| type: "array", | |
| items: { type: "string" }, | |
| minItems: 1, | |
| uniqueItems: true | |
| } | |
| }, | |
| type: "object", | |
| properties: { | |
| id: { | |
| type: "string" | |
| }, | |
| $schema: { | |
| type: "string" | |
| }, | |
| title: { | |
| type: "string" | |
| }, | |
| description: { | |
| type: "string" | |
| }, | |
| default: { }, | |
| multipleOf: { | |
| type: "number", | |
| minimum: 0, | |
| exclusiveMinimum: true | |
| }, | |
| maximum: { | |
| type: "number" | |
| }, | |
| exclusiveMaximum: { | |
| type: "boolean", | |
| default: false | |
| }, | |
| minimum: { | |
| type: "number" | |
| }, | |
| exclusiveMinimum: { | |
| type: "boolean", | |
| default: false | |
| }, | |
| maxLength: { $ref: "#/definitions/positiveInteger" }, | |
| minLength: { $ref: "#/definitions/positiveIntegerDefault0" }, | |
| pattern: { | |
| type: "string", | |
| format: "regex" | |
| }, | |
| additionalItems: { | |
| anyOf: [ | |
| { type: "boolean" }, | |
| { $ref: "#" } | |
| ], | |
| default: { } | |
| }, | |
| items: { | |
| anyOf: [ | |
| { $ref: "#" }, | |
| { $ref: "#/definitions/schemaArray" } | |
| ], | |
| default: { } | |
| }, | |
| maxItems: { $ref: "#/definitions/positiveInteger" }, | |
| minItems: { $ref: "#/definitions/positiveIntegerDefault0" }, | |
| uniqueItems: { | |
| type: "boolean", | |
| default: false | |
| }, | |
| maxProperties: { $ref: "#/definitions/positiveInteger" }, | |
| minProperties: { $ref: "#/definitions/positiveIntegerDefault0" }, | |
| required: { $ref: "#/definitions/stringArray" }, | |
| additionalProperties: { | |
| anyOf: [ | |
| { type: "boolean" }, | |
| { $ref: "#" } | |
| ], | |
| default: { } | |
| }, | |
| definitions: { | |
| type: "object", | |
| additionalProperties: { $ref: "#" }, | |
| default: { } | |
| }, | |
| properties: { | |
| type: "object", | |
| additionalProperties: { $ref: "#" }, | |
| default: { } | |
| }, | |
| patternProperties: { | |
| type: "object", | |
| additionalProperties: { $ref: "#" }, | |
| default: { } | |
| }, | |
| dependencies: { | |
| type: "object", | |
| additionalProperties: { | |
| anyOf: [ | |
| { $ref: "#" }, | |
| { $ref: "#/definitions/stringArray" } | |
| ] | |
| } | |
| }, | |
| enum: { | |
| type: "array", | |
| minItems: 1, | |
| uniqueItems: true | |
| }, | |
| type: { | |
| anyOf: [ | |
| { $ref: "#/definitions/simpleTypes" }, | |
| { | |
| type: "array", | |
| items: { $ref: "#/definitions/simpleTypes" }, | |
| minItems: 1, | |
| uniqueItems: true | |
| } | |
| ] | |
| }, | |
| format: { type: "string" }, | |
| allOf: { $ref: "#/definitions/schemaArray" }, | |
| anyOf: { $ref: "#/definitions/schemaArray" }, | |
| oneOf: { $ref: "#/definitions/schemaArray" }, | |
| not: { $ref: "#" } | |
| }, | |
| dependencies: { | |
| exclusiveMaximum: ["maximum"], | |
| exclusiveMinimum: ["minimum"] | |
| }, | |
| default: { } | |
| }; | |
| //------------------------------------------------------------------------------ | |
| // Public Interface | |
| //------------------------------------------------------------------------------ | |
| export default (additionalOptions = {}) => { | |
| const ajv = new Ajv({ | |
| meta: false, | |
| useDefaults: true, | |
| validateSchema: false, | |
| missingRefs: "ignore", | |
| verbose: true, | |
| schemaId: "auto", | |
| ...additionalOptions | |
| }); | |
| ajv.addMetaSchema(metaSchema); | |
| // eslint-disable-next-line no-underscore-dangle | |
| ajv._opts.defaultMeta = metaSchema.id; | |
| return ajv; | |
| }; | |