diff --git a/patches/ajv+8.17.1.patch b/patches/ajv+8.17.1.patch index 3bd5dc1d6..9cf6c1cf2 100644 --- a/patches/ajv+8.17.1.patch +++ b/patches/ajv+8.17.1.patch @@ -28,363 +28,6 @@ index 8fc94fd..abeeda9 100644 function parseBooleanToken(bool, fail) { return (cxt) => { const { gen, data } = cxt; -diff --git a/node_modules/ajv/dist/compile/jtd/parse.js.orig b/node_modules/ajv/dist/compile/jtd/parse.js.orig -new file mode 100644 -index 0000000..8fc94fd ---- /dev/null -+++ b/node_modules/ajv/dist/compile/jtd/parse.js.orig -@@ -0,0 +1,350 @@ -+"use strict"; -+Object.defineProperty(exports, "__esModule", { value: true }); -+const types_1 = require("./types"); -+const __1 = require(".."); -+const codegen_1 = require("../codegen"); -+const ref_error_1 = require("../ref_error"); -+const names_1 = require("../names"); -+const code_1 = require("../../vocabularies/code"); -+const ref_1 = require("../../vocabularies/jtd/ref"); -+const type_1 = require("../../vocabularies/jtd/type"); -+const parseJson_1 = require("../../runtime/parseJson"); -+const util_1 = require("../util"); -+const timestamp_1 = require("../../runtime/timestamp"); -+const genParse = { -+ elements: parseElements, -+ values: parseValues, -+ discriminator: parseDiscriminator, -+ properties: parseProperties, -+ optionalProperties: parseProperties, -+ enum: parseEnum, -+ type: parseType, -+ ref: parseRef, -+}; -+function compileParser(sch, definitions) { -+ const _sch = __1.getCompilingSchema.call(this, sch); -+ if (_sch) -+ return _sch; -+ const { es5, lines } = this.opts.code; -+ const { ownProperties } = this.opts; -+ const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties }); -+ const parseName = gen.scopeName("parse"); -+ const cxt = { -+ self: this, -+ gen, -+ schema: sch.schema, -+ schemaEnv: sch, -+ definitions, -+ data: names_1.default.data, -+ parseName, -+ char: gen.name("c"), -+ }; -+ let sourceCode; -+ try { -+ this._compilations.add(sch); -+ sch.parseName = parseName; -+ parserFunction(cxt); -+ gen.optimize(this.opts.code.optimize); -+ const parseFuncCode = gen.toString(); -+ sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${parseFuncCode}`; -+ const makeParse = new Function(`${names_1.default.scope}`, sourceCode); -+ const parse = makeParse(this.scope.get()); -+ this.scope.value(parseName, { ref: parse }); -+ sch.parse = parse; -+ } -+ catch (e) { -+ if (sourceCode) -+ this.logger.error("Error compiling parser, function code:", sourceCode); -+ delete sch.parse; -+ delete sch.parseName; -+ throw e; -+ } -+ finally { -+ this._compilations.delete(sch); -+ } -+ return sch; -+} -+exports.default = compileParser; -+const undef = (0, codegen_1._) `undefined`; -+function parserFunction(cxt) { -+ const { gen, parseName, char } = cxt; -+ gen.func(parseName, (0, codegen_1._) `${names_1.default.json}, ${names_1.default.jsonPos}, ${names_1.default.jsonPart}`, false, () => { -+ gen.let(names_1.default.data); -+ gen.let(char); -+ gen.assign((0, codegen_1._) `${parseName}.message`, undef); -+ gen.assign((0, codegen_1._) `${parseName}.position`, undef); -+ gen.assign(names_1.default.jsonPos, (0, codegen_1._) `${names_1.default.jsonPos} || 0`); -+ gen.const(names_1.default.jsonLen, (0, codegen_1._) `${names_1.default.json}.length`); -+ parseCode(cxt); -+ skipWhitespace(cxt); -+ gen.if(names_1.default.jsonPart, () => { -+ gen.assign((0, codegen_1._) `${parseName}.position`, names_1.default.jsonPos); -+ gen.return(names_1.default.data); -+ }); -+ gen.if((0, codegen_1._) `${names_1.default.jsonPos} === ${names_1.default.jsonLen}`, () => gen.return(names_1.default.data)); -+ jsonSyntaxError(cxt); -+ }); -+} -+function parseCode(cxt) { -+ let form; -+ for (const key of types_1.jtdForms) { -+ if (key in cxt.schema) { -+ form = key; -+ break; -+ } -+ } -+ if (form) -+ parseNullable(cxt, genParse[form]); -+ else -+ parseEmpty(cxt); -+} -+const parseBoolean = parseBooleanToken(true, parseBooleanToken(false, jsonSyntaxError)); -+function parseNullable(cxt, parseForm) { -+ const { gen, schema, data } = cxt; -+ if (!schema.nullable) -+ return parseForm(cxt); -+ tryParseToken(cxt, "null", parseForm, () => gen.assign(data, null)); -+} -+function parseElements(cxt) { -+ const { gen, schema, data } = cxt; -+ parseToken(cxt, "["); -+ const ix = gen.let("i", 0); -+ gen.assign(data, (0, codegen_1._) `[]`); -+ parseItems(cxt, "]", () => { -+ const el = gen.let("el"); -+ parseCode({ ...cxt, schema: schema.elements, data: el }); -+ gen.assign((0, codegen_1._) `${data}[${ix}++]`, el); -+ }); -+} -+function parseValues(cxt) { -+ const { gen, schema, data } = cxt; -+ parseToken(cxt, "{"); -+ gen.assign(data, (0, codegen_1._) `{}`); -+ parseItems(cxt, "}", () => parseKeyValue(cxt, schema.values)); -+} -+function parseItems(cxt, endToken, block) { -+ tryParseItems(cxt, endToken, block); -+ parseToken(cxt, endToken); -+} -+function tryParseItems(cxt, endToken, block) { -+ const { gen } = cxt; -+ gen.for((0, codegen_1._) `;${names_1.default.jsonPos}<${names_1.default.jsonLen} && ${jsonSlice(1)}!==${endToken};`, () => { -+ block(); -+ tryParseToken(cxt, ",", () => gen.break(), hasItem); -+ }); -+ function hasItem() { -+ tryParseToken(cxt, endToken, () => { }, jsonSyntaxError); -+ } -+} -+function parseKeyValue(cxt, schema) { -+ const { gen } = cxt; -+ const key = gen.let("key"); -+ parseString({ ...cxt, data: key }); -+ parseToken(cxt, ":"); -+ parsePropertyValue(cxt, key, schema); -+} -+function parseDiscriminator(cxt) { -+ const { gen, data, schema } = cxt; -+ const { discriminator, mapping } = schema; -+ parseToken(cxt, "{"); -+ gen.assign(data, (0, codegen_1._) `{}`); -+ const startPos = gen.const("pos", names_1.default.jsonPos); -+ const value = gen.let("value"); -+ const tag = gen.let("tag"); -+ tryParseItems(cxt, "}", () => { -+ const key = gen.let("key"); -+ parseString({ ...cxt, data: key }); -+ parseToken(cxt, ":"); -+ gen.if((0, codegen_1._) `${key} === ${discriminator}`, () => { -+ parseString({ ...cxt, data: tag }); -+ gen.assign((0, codegen_1._) `${data}[${key}]`, tag); -+ gen.break(); -+ }, () => parseEmpty({ ...cxt, data: value }) // can be discarded/skipped -+ ); -+ }); -+ gen.assign(names_1.default.jsonPos, startPos); -+ gen.if((0, codegen_1._) `${tag} === undefined`); -+ parsingError(cxt, (0, codegen_1.str) `discriminator tag not found`); -+ for (const tagValue in mapping) { -+ gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`); -+ parseSchemaProperties({ ...cxt, schema: mapping[tagValue] }, discriminator); -+ } -+ gen.else(); -+ parsingError(cxt, (0, codegen_1.str) `discriminator value not in schema`); -+ gen.endIf(); -+} -+function parseProperties(cxt) { -+ const { gen, data } = cxt; -+ parseToken(cxt, "{"); -+ gen.assign(data, (0, codegen_1._) `{}`); -+ parseSchemaProperties(cxt); -+} -+function parseSchemaProperties(cxt, discriminator) { -+ const { gen, schema, data } = cxt; -+ const { properties, optionalProperties, additionalProperties } = schema; -+ parseItems(cxt, "}", () => { -+ const key = gen.let("key"); -+ parseString({ ...cxt, data: key }); -+ parseToken(cxt, ":"); -+ gen.if(false); -+ parseDefinedProperty(cxt, key, properties); -+ parseDefinedProperty(cxt, key, optionalProperties); -+ if (discriminator) { -+ gen.elseIf((0, codegen_1._) `${key} === ${discriminator}`); -+ const tag = gen.let("tag"); -+ parseString({ ...cxt, data: tag }); // can be discarded, it is already assigned -+ } -+ gen.else(); -+ if (additionalProperties) { -+ parseEmpty({ ...cxt, data: (0, codegen_1._) `${data}[${key}]` }); -+ } -+ else { -+ parsingError(cxt, (0, codegen_1.str) `property ${key} not allowed`); -+ } -+ gen.endIf(); -+ }); -+ if (properties) { -+ const hasProp = (0, code_1.hasPropFunc)(gen); -+ const allProps = (0, codegen_1.and)(...Object.keys(properties).map((p) => (0, codegen_1._) `${hasProp}.call(${data}, ${p})`)); -+ gen.if((0, codegen_1.not)(allProps), () => parsingError(cxt, (0, codegen_1.str) `missing required properties`)); -+ } -+} -+function parseDefinedProperty(cxt, key, schemas = {}) { -+ const { gen } = cxt; -+ for (const prop in schemas) { -+ gen.elseIf((0, codegen_1._) `${key} === ${prop}`); -+ parsePropertyValue(cxt, key, schemas[prop]); -+ } -+} -+function parsePropertyValue(cxt, key, schema) { -+ parseCode({ ...cxt, schema, data: (0, codegen_1._) `${cxt.data}[${key}]` }); -+} -+function parseType(cxt) { -+ const { gen, schema, data, self } = cxt; -+ switch (schema.type) { -+ case "boolean": -+ parseBoolean(cxt); -+ break; -+ case "string": -+ parseString(cxt); -+ break; -+ case "timestamp": { -+ parseString(cxt); -+ const vts = (0, util_1.useFunc)(gen, timestamp_1.default); -+ const { allowDate, parseDate } = self.opts; -+ const notValid = allowDate ? (0, codegen_1._) `!${vts}(${data}, true)` : (0, codegen_1._) `!${vts}(${data})`; -+ const fail = parseDate -+ ? (0, codegen_1.or)(notValid, (0, codegen_1._) `(${data} = new Date(${data}), false)`, (0, codegen_1._) `isNaN(${data}.valueOf())`) -+ : notValid; -+ gen.if(fail, () => parsingError(cxt, (0, codegen_1.str) `invalid timestamp`)); -+ break; -+ } -+ case "float32": -+ case "float64": -+ parseNumber(cxt); -+ break; -+ default: { -+ const t = schema.type; -+ if (!self.opts.int32range && (t === "int32" || t === "uint32")) { -+ parseNumber(cxt, 16); // 2 ** 53 - max safe integer -+ if (t === "uint32") { -+ gen.if((0, codegen_1._) `${data} < 0`, () => parsingError(cxt, (0, codegen_1.str) `integer out of range`)); -+ } -+ } -+ else { -+ const [min, max, maxDigits] = type_1.intRange[t]; -+ parseNumber(cxt, maxDigits); -+ gen.if((0, codegen_1._) `${data} < ${min} || ${data} > ${max}`, () => parsingError(cxt, (0, codegen_1.str) `integer out of range`)); -+ } -+ } -+ } -+} -+function parseString(cxt) { -+ parseToken(cxt, '"'); -+ parseWith(cxt, parseJson_1.parseJsonString); -+} -+function parseEnum(cxt) { -+ const { gen, data, schema } = cxt; -+ const enumSch = schema.enum; -+ parseToken(cxt, '"'); -+ // TODO loopEnum -+ gen.if(false); -+ for (const value of enumSch) { -+ const valueStr = JSON.stringify(value).slice(1); // remove starting quote -+ gen.elseIf((0, codegen_1._) `${jsonSlice(valueStr.length)} === ${valueStr}`); -+ gen.assign(data, (0, codegen_1.str) `${value}`); -+ gen.add(names_1.default.jsonPos, valueStr.length); -+ } -+ gen.else(); -+ jsonSyntaxError(cxt); -+ gen.endIf(); -+} -+function parseNumber(cxt, maxDigits) { -+ const { gen } = cxt; -+ skipWhitespace(cxt); -+ gen.if((0, codegen_1._) `"-0123456789".indexOf(${jsonSlice(1)}) < 0`, () => jsonSyntaxError(cxt), () => parseWith(cxt, parseJson_1.parseJsonNumber, maxDigits)); -+} -+function parseBooleanToken(bool, fail) { -+ return (cxt) => { -+ const { gen, data } = cxt; -+ tryParseToken(cxt, `${bool}`, () => fail(cxt), () => gen.assign(data, bool)); -+ }; -+} -+function parseRef(cxt) { -+ const { gen, self, definitions, schema, schemaEnv } = cxt; -+ const { ref } = schema; -+ const refSchema = definitions[ref]; -+ if (!refSchema) -+ throw new ref_error_1.default(self.opts.uriResolver, "", ref, `No definition ${ref}`); -+ if (!(0, ref_1.hasRef)(refSchema)) -+ return parseCode({ ...cxt, schema: refSchema }); -+ const { root } = schemaEnv; -+ const sch = compileParser.call(self, new __1.SchemaEnv({ schema: refSchema, root }), definitions); -+ partialParse(cxt, getParser(gen, sch), true); -+} -+function getParser(gen, sch) { -+ return sch.parse -+ ? gen.scopeValue("parse", { ref: sch.parse }) -+ : (0, codegen_1._) `${gen.scopeValue("wrapper", { ref: sch })}.parse`; -+} -+function parseEmpty(cxt) { -+ parseWith(cxt, parseJson_1.parseJson); -+} -+function parseWith(cxt, parseFunc, args) { -+ partialParse(cxt, (0, util_1.useFunc)(cxt.gen, parseFunc), args); -+} -+function partialParse(cxt, parseFunc, args) { -+ const { gen, data } = cxt; -+ gen.assign(data, (0, codegen_1._) `${parseFunc}(${names_1.default.json}, ${names_1.default.jsonPos}${args ? (0, codegen_1._) `, ${args}` : codegen_1.nil})`); -+ gen.assign(names_1.default.jsonPos, (0, codegen_1._) `${parseFunc}.position`); -+ gen.if((0, codegen_1._) `${data} === undefined`, () => parsingError(cxt, (0, codegen_1._) `${parseFunc}.message`)); -+} -+function parseToken(cxt, tok) { -+ tryParseToken(cxt, tok, jsonSyntaxError); -+} -+function tryParseToken(cxt, tok, fail, success) { -+ const { gen } = cxt; -+ const n = tok.length; -+ skipWhitespace(cxt); -+ gen.if((0, codegen_1._) `${jsonSlice(n)} === ${tok}`, () => { -+ gen.add(names_1.default.jsonPos, n); -+ success === null || success === void 0 ? void 0 : success(cxt); -+ }, () => fail(cxt)); -+} -+function skipWhitespace({ gen, char: c }) { -+ gen.code((0, codegen_1._) `while((${c}=${names_1.default.json}[${names_1.default.jsonPos}],${c}===" "||${c}==="\\n"||${c}==="\\r"||${c}==="\\t"))${names_1.default.jsonPos}++;`); -+} -+function jsonSlice(len) { -+ return len === 1 -+ ? (0, codegen_1._) `${names_1.default.json}[${names_1.default.jsonPos}]` -+ : (0, codegen_1._) `${names_1.default.json}.slice(${names_1.default.jsonPos}, ${names_1.default.jsonPos}+${len})`; -+} -+function jsonSyntaxError(cxt) { -+ parsingError(cxt, (0, codegen_1._) `"unexpected token " + ${names_1.default.json}[${names_1.default.jsonPos}]`); -+} -+function parsingError({ gen, parseName }, msg) { -+ gen.assign((0, codegen_1._) `${parseName}.message`, msg); -+ gen.assign((0, codegen_1._) `${parseName}.position`, names_1.default.jsonPos); -+ gen.return(undef); -+} -+//# sourceMappingURL=parse.js.map -\ No newline at end of file diff --git a/node_modules/ajv/dist/compile/rules.js b/node_modules/ajv/dist/compile/rules.js index 82a591f..1ebd8fe 100644 --- a/node_modules/ajv/dist/compile/rules.js @@ -450,216 +93,6 @@ index 6d03e0d..a35a428 100644 default: return (0, codegen_1._) `typeof ${data} ${EQ} ${dataType}`; } -diff --git a/node_modules/ajv/dist/compile/validate/dataType.js.orig b/node_modules/ajv/dist/compile/validate/dataType.js.orig -new file mode 100644 -index 0000000..6d03e0d ---- /dev/null -+++ b/node_modules/ajv/dist/compile/validate/dataType.js.orig -@@ -0,0 +1,203 @@ -+"use strict"; -+Object.defineProperty(exports, "__esModule", { value: true }); -+exports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0; -+const rules_1 = require("../rules"); -+const applicability_1 = require("./applicability"); -+const errors_1 = require("../errors"); -+const codegen_1 = require("../codegen"); -+const util_1 = require("../util"); -+var DataType; -+(function (DataType) { -+ DataType[DataType["Correct"] = 0] = "Correct"; -+ DataType[DataType["Wrong"] = 1] = "Wrong"; -+})(DataType || (exports.DataType = DataType = {})); -+function getSchemaTypes(schema) { -+ const types = getJSONTypes(schema.type); -+ const hasNull = types.includes("null"); -+ if (hasNull) { -+ if (schema.nullable === false) -+ throw new Error("type: null contradicts nullable: false"); -+ } -+ else { -+ if (!types.length && schema.nullable !== undefined) { -+ throw new Error('"nullable" cannot be used without "type"'); -+ } -+ if (schema.nullable === true) -+ types.push("null"); -+ } -+ return types; -+} -+exports.getSchemaTypes = getSchemaTypes; -+// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -+function getJSONTypes(ts) { -+ const types = Array.isArray(ts) ? ts : ts ? [ts] : []; -+ if (types.every(rules_1.isJSONType)) -+ return types; -+ throw new Error("type must be JSONType or JSONType[]: " + types.join(",")); -+} -+exports.getJSONTypes = getJSONTypes; -+function coerceAndCheckDataType(it, types) { -+ const { gen, data, opts } = it; -+ const coerceTo = coerceToTypes(types, opts.coerceTypes); -+ const checkTypes = types.length > 0 && -+ !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0])); -+ if (checkTypes) { -+ const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong); -+ gen.if(wrongType, () => { -+ if (coerceTo.length) -+ coerceData(it, types, coerceTo); -+ else -+ reportTypeError(it); -+ }); -+ } -+ return checkTypes; -+} -+exports.coerceAndCheckDataType = coerceAndCheckDataType; -+const COERCIBLE = new Set(["string", "number", "integer", "boolean", "null"]); -+function coerceToTypes(types, coerceTypes) { -+ return coerceTypes -+ ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === "array" && t === "array")) -+ : []; -+} -+function coerceData(it, types, coerceTo) { -+ const { gen, data, opts } = it; -+ const dataType = gen.let("dataType", (0, codegen_1._) `typeof ${data}`); -+ const coerced = gen.let("coerced", (0, codegen_1._) `undefined`); -+ if (opts.coerceTypes === "array") { -+ gen.if((0, codegen_1._) `${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen -+ .assign(data, (0, codegen_1._) `${data}[0]`) -+ .assign(dataType, (0, codegen_1._) `typeof ${data}`) -+ .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))); -+ } -+ gen.if((0, codegen_1._) `${coerced} !== undefined`); -+ for (const t of coerceTo) { -+ if (COERCIBLE.has(t) || (t === "array" && opts.coerceTypes === "array")) { -+ coerceSpecificType(t); -+ } -+ } -+ gen.else(); -+ reportTypeError(it); -+ gen.endIf(); -+ gen.if((0, codegen_1._) `${coerced} !== undefined`, () => { -+ gen.assign(data, coerced); -+ assignParentData(it, coerced); -+ }); -+ function coerceSpecificType(t) { -+ switch (t) { -+ case "string": -+ gen -+ .elseIf((0, codegen_1._) `${dataType} == "number" || ${dataType} == "boolean"`) -+ .assign(coerced, (0, codegen_1._) `"" + ${data}`) -+ .elseIf((0, codegen_1._) `${data} === null`) -+ .assign(coerced, (0, codegen_1._) `""`); -+ return; -+ case "number": -+ gen -+ .elseIf((0, codegen_1._) `${dataType} == "boolean" || ${data} === null -+ || (${dataType} == "string" && ${data} && ${data} == +${data})`) -+ .assign(coerced, (0, codegen_1._) `+${data}`); -+ return; -+ case "integer": -+ gen -+ .elseIf((0, codegen_1._) `${dataType} === "boolean" || ${data} === null -+ || (${dataType} === "string" && ${data} && ${data} == +${data} && !(${data} % 1))`) -+ .assign(coerced, (0, codegen_1._) `+${data}`); -+ return; -+ case "boolean": -+ gen -+ .elseIf((0, codegen_1._) `${data} === "false" || ${data} === 0 || ${data} === null`) -+ .assign(coerced, false) -+ .elseIf((0, codegen_1._) `${data} === "true" || ${data} === 1`) -+ .assign(coerced, true); -+ return; -+ case "null": -+ gen.elseIf((0, codegen_1._) `${data} === "" || ${data} === 0 || ${data} === false`); -+ gen.assign(coerced, null); -+ return; -+ case "array": -+ gen -+ .elseIf((0, codegen_1._) `${dataType} === "string" || ${dataType} === "number" -+ || ${dataType} === "boolean" || ${data} === null`) -+ .assign(coerced, (0, codegen_1._) `[${data}]`); -+ } -+ } -+} -+function assignParentData({ gen, parentData, parentDataProperty }, expr) { -+ // TODO use gen.property -+ gen.if((0, codegen_1._) `${parentData} !== undefined`, () => gen.assign((0, codegen_1._) `${parentData}[${parentDataProperty}]`, expr)); -+} -+function checkDataType(dataType, data, strictNums, correct = DataType.Correct) { -+ const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ; -+ let cond; -+ switch (dataType) { -+ case "null": -+ return (0, codegen_1._) `${data} ${EQ} null`; -+ case "array": -+ cond = (0, codegen_1._) `Array.isArray(${data})`; -+ break; -+ case "object": -+ cond = (0, codegen_1._) `${data} && typeof ${data} == "object" && !Array.isArray(${data})`; -+ break; -+ case "integer": -+ cond = numCond((0, codegen_1._) `!(${data} % 1) && !isNaN(${data})`); -+ break; -+ case "number": -+ cond = numCond(); -+ break; -+ default: -+ return (0, codegen_1._) `typeof ${data} ${EQ} ${dataType}`; -+ } -+ return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond); -+ function numCond(_cond = codegen_1.nil) { -+ return (0, codegen_1.and)((0, codegen_1._) `typeof ${data} == "number"`, _cond, strictNums ? (0, codegen_1._) `isFinite(${data})` : codegen_1.nil); -+ } -+} -+exports.checkDataType = checkDataType; -+function checkDataTypes(dataTypes, data, strictNums, correct) { -+ if (dataTypes.length === 1) { -+ return checkDataType(dataTypes[0], data, strictNums, correct); -+ } -+ let cond; -+ const types = (0, util_1.toHash)(dataTypes); -+ if (types.array && types.object) { -+ const notObj = (0, codegen_1._) `typeof ${data} != "object"`; -+ cond = types.null ? notObj : (0, codegen_1._) `!${data} || ${notObj}`; -+ delete types.null; -+ delete types.array; -+ delete types.object; -+ } -+ else { -+ cond = codegen_1.nil; -+ } -+ if (types.number) -+ delete types.integer; -+ for (const t in types) -+ cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct)); -+ return cond; -+} -+exports.checkDataTypes = checkDataTypes; -+const typeError = { -+ message: ({ schema }) => `must be ${schema}`, -+ params: ({ schema, schemaValue }) => typeof schema == "string" ? (0, codegen_1._) `{type: ${schema}}` : (0, codegen_1._) `{type: ${schemaValue}}`, -+}; -+function reportTypeError(it) { -+ const cxt = getTypeErrorContext(it); -+ (0, errors_1.reportError)(cxt, typeError); -+} -+exports.reportTypeError = reportTypeError; -+function getTypeErrorContext(it) { -+ const { gen, data, schema } = it; -+ const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, "type"); -+ return { -+ gen, -+ keyword: "type", -+ data, -+ schema: schema.type, -+ schemaCode, -+ schemaValue: schemaCode, -+ parentSchema: schema, -+ params: {}, -+ it, -+ }; -+} -+//# sourceMappingURL=dataType.js.map -\ No newline at end of file diff --git a/node_modules/ajv/dist/refs/json-schema-2019-09/meta/validation.json b/node_modules/ajv/dist/refs/json-schema-2019-09/meta/validation.json index 7027a12..25679c8 100644 --- a/node_modules/ajv/dist/refs/json-schema-2019-09/meta/validation.json @@ -814,79 +247,3 @@ index 17a0b51..bc54aad 100644 case "float32": case "float64": cond = (0, codegen_1._) `typeof ${data} == "number"`; -diff --git a/node_modules/ajv/dist/vocabularies/jtd/type.js.orig b/node_modules/ajv/dist/vocabularies/jtd/type.js.orig -new file mode 100644 -index 0000000..17a0b51 ---- /dev/null -+++ b/node_modules/ajv/dist/vocabularies/jtd/type.js.orig -@@ -0,0 +1,69 @@ -+"use strict"; -+Object.defineProperty(exports, "__esModule", { value: true }); -+exports.intRange = void 0; -+const codegen_1 = require("../../compile/codegen"); -+const timestamp_1 = require("../../runtime/timestamp"); -+const util_1 = require("../../compile/util"); -+const metadata_1 = require("./metadata"); -+const error_1 = require("./error"); -+exports.intRange = { -+ int8: [-128, 127, 3], -+ uint8: [0, 255, 3], -+ int16: [-32768, 32767, 5], -+ uint16: [0, 65535, 5], -+ int32: [-2147483648, 2147483647, 10], -+ uint32: [0, 4294967295, 10], -+}; -+const error = { -+ message: (cxt) => (0, error_1.typeErrorMessage)(cxt, cxt.schema), -+ params: (cxt) => (0, error_1.typeErrorParams)(cxt, cxt.schema), -+}; -+function timestampCode(cxt) { -+ const { gen, data, it } = cxt; -+ const { timestamp, allowDate } = it.opts; -+ if (timestamp === "date") -+ return (0, codegen_1._) `${data} instanceof Date `; -+ const vts = (0, util_1.useFunc)(gen, timestamp_1.default); -+ const allowDateArg = allowDate ? (0, codegen_1._) `, true` : codegen_1.nil; -+ const validString = (0, codegen_1._) `typeof ${data} == "string" && ${vts}(${data}${allowDateArg})`; -+ return timestamp === "string" ? validString : (0, codegen_1.or)((0, codegen_1._) `${data} instanceof Date`, validString); -+} -+const def = { -+ keyword: "type", -+ schemaType: "string", -+ error, -+ code(cxt) { -+ (0, metadata_1.checkMetadata)(cxt); -+ const { data, schema, parentSchema, it } = cxt; -+ let cond; -+ switch (schema) { -+ case "boolean": -+ case "string": -+ cond = (0, codegen_1._) `typeof ${data} == ${schema}`; -+ break; -+ case "timestamp": { -+ cond = timestampCode(cxt); -+ break; -+ } -+ case "float32": -+ case "float64": -+ cond = (0, codegen_1._) `typeof ${data} == "number"`; -+ break; -+ default: { -+ const sch = schema; -+ cond = (0, codegen_1._) `typeof ${data} == "number" && isFinite(${data}) && !(${data} % 1)`; -+ if (!it.opts.int32range && (sch === "int32" || sch === "uint32")) { -+ if (sch === "uint32") -+ cond = (0, codegen_1._) `${cond} && ${data} >= 0`; -+ } -+ else { -+ const [min, max] = exports.intRange[sch]; -+ cond = (0, codegen_1._) `${cond} && ${data} >= ${min} && ${data} <= ${max}`; -+ } -+ } -+ } -+ cxt.pass(parentSchema.nullable ? (0, codegen_1.or)((0, codegen_1._) `${data} === null`, cond) : cond); -+ }, -+}; -+exports.default = def; -+//# sourceMappingURL=type.js.map -\ No newline at end of file