@ec0lint/ec0lintrc
Version:
ec0lint configuration
188 lines (179 loc) • 5.27 kB
JavaScript
/**
* @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;
};