| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| const codegen_1 = require("../../compile/codegen"); |
| const util_1 = require("../../compile/util"); |
| const names_1 = require("../../compile/names"); |
| const error = { |
| message: "must NOT have unevaluated properties", |
| params: ({ params }) => (0, codegen_1._) `{unevaluatedProperty: ${params.unevaluatedProperty}}`, |
| }; |
| const def = { |
| keyword: "unevaluatedProperties", |
| type: "object", |
| schemaType: ["boolean", "object"], |
| trackErrors: true, |
| error, |
| code(cxt) { |
| const { gen, schema, data, errsCount, it } = cxt; |
| /* istanbul ignore if */ |
| if (!errsCount) |
| throw new Error("ajv implementation error"); |
| const { allErrors, props } = it; |
| if (props instanceof codegen_1.Name) { |
| gen.if((0, codegen_1._) `${props} !== true`, () => gen.forIn("key", data, (key) => gen.if(unevaluatedDynamic(props, key), () => unevaluatedPropCode(key)))); |
| } |
| else if (props !== true) { |
| gen.forIn("key", data, (key) => props === undefined |
| ? unevaluatedPropCode(key) |
| : gen.if(unevaluatedStatic(props, key), () => unevaluatedPropCode(key))); |
| } |
| it.props = true; |
| cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`); |
| function unevaluatedPropCode(key) { |
| if (schema === false) { |
| cxt.setParams({ unevaluatedProperty: key }); |
| cxt.error(); |
| if (!allErrors) |
| gen.break(); |
| return; |
| } |
| if (!(0, util_1.alwaysValidSchema)(it, schema)) { |
| const valid = gen.name("valid"); |
| cxt.subschema({ |
| keyword: "unevaluatedProperties", |
| dataProp: key, |
| dataPropType: util_1.Type.Str, |
| }, valid); |
| if (!allErrors) |
| gen.if((0, codegen_1.not)(valid), () => gen.break()); |
| } |
| } |
| function unevaluatedDynamic(evaluatedProps, key) { |
| return (0, codegen_1._) `!${evaluatedProps} || !${evaluatedProps}[${key}]`; |
| } |
| function unevaluatedStatic(evaluatedProps, key) { |
| const ps = []; |
| for (const p in evaluatedProps) { |
| if (evaluatedProps[p] === true) |
| ps.push((0, codegen_1._) `${key} !== ${p}`); |
| } |
| return (0, codegen_1.and)(...ps); |
| } |
| }, |
| }; |
| exports.default = def; |
| //# sourceMappingURL=unevaluatedProperties.js.map |