code.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0;
  4. const codegen_1 = require("../compile/codegen");
  5. const util_1 = require("../compile/util");
  6. const names_1 = require("../compile/names");
  7. function checkReportMissingProp(cxt, prop) {
  8. const { gen, data, it } = cxt;
  9. gen.if(noPropertyInData(data, prop, it.opts.ownProperties), () => {
  10. cxt.setParams({ missingProperty: codegen_1._ `${prop}` }, true);
  11. cxt.error();
  12. });
  13. }
  14. exports.checkReportMissingProp = checkReportMissingProp;
  15. function checkMissingProp({ data, it: { opts } }, properties, missing) {
  16. return codegen_1.or(...properties.map((prop) => codegen_1._ `${noPropertyInData(data, prop, opts.ownProperties)} && (${missing} = ${prop})`));
  17. }
  18. exports.checkMissingProp = checkMissingProp;
  19. function reportMissingProp(cxt, missing) {
  20. cxt.setParams({ missingProperty: missing }, true);
  21. cxt.error();
  22. }
  23. exports.reportMissingProp = reportMissingProp;
  24. function isOwnProperty(data, property) {
  25. return codegen_1._ `Object.prototype.hasOwnProperty.call(${data}, ${property})`;
  26. }
  27. function propertyInData(data, property, ownProperties) {
  28. const cond = codegen_1._ `${data}${codegen_1.getProperty(property)} !== undefined`;
  29. return ownProperties ? codegen_1._ `${cond} && ${isOwnProperty(data, property)}` : cond;
  30. }
  31. exports.propertyInData = propertyInData;
  32. function noPropertyInData(data, property, ownProperties) {
  33. const cond = codegen_1._ `${data}${codegen_1.getProperty(property)} === undefined`;
  34. return ownProperties ? codegen_1._ `${cond} || !${isOwnProperty(data, property)}` : cond;
  35. }
  36. exports.noPropertyInData = noPropertyInData;
  37. function allSchemaProperties(schemaMap) {
  38. return schemaMap ? Object.keys(schemaMap).filter((p) => p !== "__proto__") : [];
  39. }
  40. exports.allSchemaProperties = allSchemaProperties;
  41. function schemaProperties(it, schemaMap) {
  42. return allSchemaProperties(schemaMap).filter((p) => !util_1.alwaysValidSchema(it, schemaMap[p]));
  43. }
  44. exports.schemaProperties = schemaProperties;
  45. function callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {
  46. const dataAndSchema = passSchema ? codegen_1._ `${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;
  47. const valCxt = [
  48. [names_1.default.dataPath, codegen_1.strConcat(names_1.default.dataPath, errorPath)],
  49. [names_1.default.parentData, it.parentData],
  50. [names_1.default.parentDataProperty, it.parentDataProperty],
  51. [names_1.default.rootData, names_1.default.rootData],
  52. ];
  53. if (it.opts.dynamicRef)
  54. valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);
  55. const args = codegen_1._ `${dataAndSchema}, ${gen.object(...valCxt)}`;
  56. return context !== codegen_1.nil ? codegen_1._ `${func}.call(${context}, ${args})` : codegen_1._ `${func}(${args})`;
  57. }
  58. exports.callValidateCode = callValidateCode;
  59. function usePattern(gen, pattern) {
  60. return gen.scopeValue("pattern", {
  61. key: pattern,
  62. ref: new RegExp(pattern, "u"),
  63. code: codegen_1._ `new RegExp(${pattern}, "u")`,
  64. });
  65. }
  66. exports.usePattern = usePattern;
  67. //# sourceMappingURL=code.js.map