@snups/rjsf-validator-ajv8
Version:
The ajv-8 based validator for @snups/rjsf-core
75 lines (70 loc) • 3.01 kB
JavaScript
// src/compileSchemaValidators.ts
import fs from "fs";
// src/compileSchemaValidatorsCode.ts
import standaloneCode from "ajv/dist/standalone";
import { schemaParser } from "@snups/rjsf-utils";
// src/createAjvInstance.ts
import Ajv from "ajv";
import ajvErrors from "ajv-errors";
import addFormats from "ajv-formats";
import isObject from "lodash/isObject";
import { ADDITIONAL_PROPERTY_FLAG, RJSF_ADDITIONAL_PROPERTIES_FLAG } from "@snups/rjsf-utils";
var AJV_CONFIG = {
allErrors: true,
multipleOfPrecision: 8,
strict: false,
verbose: true,
discriminator: false
// TODO enable this in V6
};
var COLOR_FORMAT_REGEX = /^(#?([0-9A-Fa-f]{3}){1,2}\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\)))$/;
var DATA_URL_FORMAT_REGEX = /^data:([a-z]+\/[a-z0-9-+.]+)?;(?:name=(.*);)?base64,(.*)$/;
function createAjvInstance(additionalMetaSchemas, customFormats, ajvOptionsOverrides = {}, ajvFormatOptions, AjvClass = Ajv, useAjvErrors) {
const ajv = new AjvClass({ ...AJV_CONFIG, ...ajvOptionsOverrides });
if (ajvFormatOptions) {
addFormats(ajv, ajvFormatOptions);
} else if (ajvFormatOptions !== false) {
addFormats(ajv);
}
ajv.addFormat("data-url", DATA_URL_FORMAT_REGEX);
ajv.addFormat("color", COLOR_FORMAT_REGEX);
ajv.addKeyword(ADDITIONAL_PROPERTY_FLAG);
ajv.addKeyword(RJSF_ADDITIONAL_PROPERTIES_FLAG);
if (Array.isArray(additionalMetaSchemas)) {
ajv.addMetaSchema(additionalMetaSchemas);
}
if (isObject(customFormats)) {
Object.keys(customFormats).forEach((formatName) => {
ajv.addFormat(formatName, customFormats[formatName]);
});
}
if (useAjvErrors) {
ajvErrors(ajv);
}
return ajv;
}
// src/compileSchemaValidatorsCode.ts
function compileSchemaValidatorsCode(schema, options = {}) {
const schemaMaps = schemaParser(schema);
const schemas = Object.values(schemaMaps);
const { additionalMetaSchemas, customFormats, ajvOptionsOverrides = {}, ajvFormatOptions, AjvClass, useAjvErrors } = options;
const compileOptions = {
...ajvOptionsOverrides,
code: { lines: true, ...ajvOptionsOverrides.code, source: true },
schemas
};
const ajv = createAjvInstance(additionalMetaSchemas, customFormats, compileOptions, ajvFormatOptions, AjvClass, useAjvErrors);
return standaloneCode(ajv);
}
// src/compileSchemaValidators.ts
function compileSchemaValidators(schema, output, options = {}) {
console.log("parsing the schema");
const moduleCode = compileSchemaValidatorsCode(schema, options);
console.log(`writing ${output}`);
fs.writeFileSync(output, moduleCode);
}
export {
compileSchemaValidatorsCode,
compileSchemaValidators as default
};
//# sourceMappingURL=compileSchemaValidators.esm.js.map