properties.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const context_1 = require("../../compile/context");
  4. const code_1 = require("../code");
  5. const util_1 = require("../../compile/util");
  6. const additionalProperties_1 = require("./additionalProperties");
  7. const def = {
  8. keyword: "properties",
  9. type: "object",
  10. schemaType: "object",
  11. code(cxt) {
  12. const { gen, schema, parentSchema, data, it } = cxt;
  13. if (it.opts.removeAdditional === "all" && parentSchema.additionalProperties === undefined) {
  14. additionalProperties_1.default.code(new context_1.default(it, additionalProperties_1.default, "additionalProperties"));
  15. }
  16. const allProps = code_1.allSchemaProperties(schema);
  17. if (it.opts.unevaluated && allProps.length && it.props !== true) {
  18. it.props = util_1.mergeEvaluated.props(gen, util_1.toHash(allProps), it.props);
  19. }
  20. const properties = allProps.filter((p) => !util_1.alwaysValidSchema(it, schema[p]));
  21. if (properties.length === 0)
  22. return;
  23. const valid = gen.name("valid");
  24. for (const prop of properties) {
  25. if (hasDefault(prop)) {
  26. applyPropertySchema(prop);
  27. }
  28. else {
  29. gen.if(code_1.propertyInData(data, prop, it.opts.ownProperties));
  30. applyPropertySchema(prop);
  31. if (!it.allErrors)
  32. gen.else().var(valid, true);
  33. gen.endIf();
  34. }
  35. cxt.ok(valid);
  36. }
  37. function hasDefault(prop) {
  38. return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined;
  39. }
  40. function applyPropertySchema(prop) {
  41. cxt.subschema({
  42. keyword: "properties",
  43. schemaProp: prop,
  44. dataProp: prop,
  45. strictSchema: it.strictSchema,
  46. }, valid);
  47. }
  48. },
  49. };
  50. exports.default = def;
  51. //# sourceMappingURL=properties.js.map