UNPKG

@sjsf/ajv8-validator

Version:

The ajv-8 based validator for svelte-jsonschema-form

34 lines (33 loc) 1.39 kB
import { memoize, weakMemoize } from "@sjsf/form/lib/memoize"; import { ID_KEY, prefixSchemaRefs, ROOT_SCHEMA_PREFIX } from "@sjsf/form/core"; export function createSchemaCompiler(ajv, _async, validatorsCache = new WeakMap()) { let rootSchemaId = ""; let usePrefixSchemaRefs = false; const compile = memoize(validatorsCache, (schema) => { let ajvSchema = schema; if (usePrefixSchemaRefs) { ajvSchema = prefixSchemaRefs(schema, rootSchemaId); delete ajvSchema[ID_KEY]; } return ajv.compile(ajvSchema); }); return (schema, rootSchema) => { rootSchemaId = rootSchema[ID_KEY] ?? ROOT_SCHEMA_PREFIX; let ajvSchema = ajv.getSchema(rootSchemaId)?.schema; if (ajvSchema !== undefined && ajvSchema !== rootSchema) { ajv.removeSchema(rootSchemaId); validatorsCache.delete(schema); ajvSchema = undefined; } if (ajvSchema === undefined) { ajv.addSchema(rootSchema, rootSchemaId); } usePrefixSchemaRefs = schema !== rootSchema; return compile(schema); }; } export function createFieldSchemaCompiler(ajv, async) { const validatorsCache = new WeakMap(); const compile = weakMemoize(validatorsCache, (schema) => ajv.compile({ ...schema, $async: async })); return (config) => compile(config.schema); }