unevaluatedProperties.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const codegen_1 = require("../../compile/codegen");
  4. const util_1 = require("../../compile/util");
  5. const names_1 = require("../../compile/names");
  6. const subschema_1 = require("../../compile/subschema");
  7. const error = {
  8. message: "should NOT have unevaluated properties",
  9. params: ({ params }) => codegen_1._ `{unevaluatedProperty: ${params.unevaluatedProperty}}`,
  10. };
  11. const def = {
  12. keyword: "unevaluatedProperties",
  13. type: "object",
  14. schemaType: ["boolean", "object"],
  15. trackErrors: true,
  16. error,
  17. code(cxt) {
  18. const { gen, schema, data, errsCount, it } = cxt;
  19. /* istanbul ignore if */
  20. if (!errsCount)
  21. throw new Error("ajv implementation error");
  22. const { allErrors, props } = it;
  23. if (props instanceof codegen_1.Name) {
  24. gen.if(codegen_1._ `${props} !== true`, () => gen.forIn("key", data, (key) => gen.if(unevaluatedDynamic(props, key), () => unevaluatedPropCode(key))));
  25. }
  26. else if (props !== true) {
  27. gen.forIn("key", data, (key) => props === undefined
  28. ? unevaluatedPropCode(key)
  29. : gen.if(unevaluatedStatic(props, key), () => unevaluatedPropCode(key)));
  30. }
  31. it.props = true;
  32. cxt.ok(codegen_1._ `${errsCount} === ${names_1.default.errors}`);
  33. function unevaluatedPropCode(key) {
  34. if (schema === false) {
  35. cxt.setParams({ unevaluatedProperty: key });
  36. cxt.error();
  37. if (!allErrors)
  38. gen.break();
  39. return;
  40. }
  41. if (!util_1.alwaysValidSchema(it, schema)) {
  42. const valid = gen.name("valid");
  43. cxt.subschema({
  44. keyword: "unevaluatedProperties",
  45. dataProp: key,
  46. dataPropType: subschema_1.Type.Str,
  47. strictSchema: it.strictSchema,
  48. }, valid);
  49. if (!allErrors)
  50. gen.if(codegen_1.not(valid), () => gen.break());
  51. }
  52. }
  53. function unevaluatedDynamic(evaluatedProps, key) {
  54. return codegen_1._ `!${evaluatedProps} || !${evaluatedProps}[${key}]`;
  55. }
  56. function unevaluatedStatic(evaluatedProps, key) {
  57. const ps = [];
  58. for (const p in evaluatedProps) {
  59. if (evaluatedProps[p] === true)
  60. ps.push(codegen_1._ `${key} !== ${p}`);
  61. }
  62. return codegen_1.and(...ps);
  63. }
  64. },
  65. };
  66. exports.default = def;
  67. //# sourceMappingURL=unevaluatedProperties.js.map