unevaluatedProperties.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. }, valid);
  48. if (!allErrors)
  49. gen.if(codegen_1.not(valid), () => gen.break());
  50. }
  51. }
  52. function unevaluatedDynamic(evaluatedProps, key) {
  53. return codegen_1._ `!${evaluatedProps} || !${evaluatedProps}[${key}]`;
  54. }
  55. function unevaluatedStatic(evaluatedProps, key) {
  56. const ps = [];
  57. for (const p in evaluatedProps) {
  58. if (evaluatedProps[p] === true)
  59. ps.push(codegen_1._ `${key} !== ${p}`);
  60. }
  61. return codegen_1.and(...ps);
  62. }
  63. },
  64. };
  65. exports.default = def;
  66. //# sourceMappingURL=unevaluatedProperties.js.map