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 error_1 = require("./error");
7 const types_1 = require("../discriminator/types");
10 const { schema, params } = cxt;
11 return params.discrError
12 ? params.discrError === types_1.DiscrError.Tag
13 ? `tag "${schema}" must be string`
14 : `value of tag "${schema}" must be in mapping`
15 : (0, error_1.typeErrorMessage)(cxt, "object");
18 const { schema, params } = cxt;
19 return params.discrError
20 ? (0, codegen_1._) `{error: ${params.discrError}, tag: ${schema}, tagValue: ${params.tag}}`
21 : (0, error_1.typeErrorParams)(cxt, "object");
25 keyword: "discriminator",
27 implements: ["mapping"],
30 (0, metadata_1.checkMetadata)(cxt);
31 const { gen, data, schema, parentSchema } = cxt;
32 const [valid, cond] = (0, nullable_1.checkNullableObject)(cxt, data);
34 validateDiscriminator();
35 gen.elseIf((0, codegen_1.not)(valid));
39 function validateDiscriminator() {
40 const tag = gen.const("tag", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(schema)}`);
41 gen.if((0, codegen_1._) `${tag} === undefined`);
42 cxt.error(false, { discrError: types_1.DiscrError.Tag, tag });
43 gen.elseIf((0, codegen_1._) `typeof ${tag} == "string"`);
46 cxt.error(false, { discrError: types_1.DiscrError.Tag, tag }, { instancePath: schema });
49 function validateMapping(tag) {
51 for (const tagValue in parentSchema.mapping) {
52 gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);
53 gen.assign(valid, applyTagSchema(tagValue));
56 cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag }, { instancePath: schema, schemaPath: "mapping", parentSchema: true });
59 function applyTagSchema(schemaProp) {
60 const _valid = gen.name("valid");
64 jtdDiscriminator: schema,
70 exports.default = def;
71 //# sourceMappingURL=discriminator.js.map