UNPKG

@ec0lint/ec0lintrc

Version:

ec0lint configuration

188 lines (179 loc) 5.27 kB
/** * @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; };