discriminator.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const codegen_1 = require("../../compile/codegen");
  4. const metadata_1 = require("./metadata");
  5. const nullable_1 = require("./nullable");
  6. const def = {
  7. keyword: "discriminator",
  8. schemaType: "string",
  9. implements: ["mapping"],
  10. code(cxt) {
  11. metadata_1.checkMetadata(cxt);
  12. const { gen, data, schema, parentSchema } = cxt;
  13. const [valid, cond] = nullable_1.checkNullableObject(cxt, data);
  14. gen.if(cond, () => {
  15. const tag = gen.const("tag", codegen_1._ `${data}${codegen_1.getProperty(schema)}`);
  16. gen.if(codegen_1._ `typeof ${tag} == "string"`, () => {
  17. gen.if(false);
  18. for (const tagValue in parentSchema.mapping) {
  19. gen.elseIf(codegen_1._ `${tag} === ${tagValue}`);
  20. gen.assign(valid, applyTagSchema(tagValue));
  21. }
  22. gen.endIf();
  23. });
  24. });
  25. cxt.pass(valid);
  26. function applyTagSchema(schemaProp) {
  27. const _valid = gen.name("valid");
  28. cxt.subschema({
  29. keyword: "mapping",
  30. schemaProp,
  31. jtdDiscriminator: schema,
  32. }, _valid);
  33. return _valid;
  34. }
  35. },
  36. };
  37. exports.default = def;
  38. //# sourceMappingURL=discriminator.js.map