| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| const codegen_1 = require("ajv/dist/compile/codegen"); |
| const _util_1 = require("./_util"); |
| const error = { |
| message: ({ params: { schemaProp } }) => schemaProp |
| ? (0, codegen_1.str) `should match case "${schemaProp}" schema` |
| : (0, codegen_1.str) `should match default case schema`, |
| params: ({ params: { schemaProp } }) => schemaProp ? (0, codegen_1._) `{failingCase: ${schemaProp}}` : (0, codegen_1._) `{failingDefault: true}`, |
| }; |
| function getDef(opts) { |
| const metaSchema = (0, _util_1.metaSchemaRef)(opts); |
| return [ |
| { |
| keyword: "select", |
| schemaType: ["string", "number", "boolean", "null"], |
| $data: true, |
| error, |
| dependencies: ["selectCases"], |
| code(cxt) { |
| const { gen, schemaCode, parentSchema } = cxt; |
| cxt.block$data(codegen_1.nil, () => { |
| const valid = gen.let("valid", true); |
| const schValid = gen.name("_valid"); |
| const value = gen.const("value", (0, codegen_1._) `${schemaCode} === null ? "null" : ${schemaCode}`); |
| gen.if(false); // optimizer should remove it from generated code |
| for (const schemaProp in parentSchema.selectCases) { |
| cxt.setParams({ schemaProp }); |
| gen.elseIf((0, codegen_1._) `"" + ${value} == ${schemaProp}`); // intentional ==, to match numbers and booleans |
| const schCxt = cxt.subschema({ keyword: "selectCases", schemaProp }, schValid); |
| cxt.mergeEvaluated(schCxt, codegen_1.Name); |
| gen.assign(valid, schValid); |
| } |
| gen.else(); |
| if (parentSchema.selectDefault !== undefined) { |
| cxt.setParams({ schemaProp: undefined }); |
| const schCxt = cxt.subschema({ keyword: "selectDefault" }, schValid); |
| cxt.mergeEvaluated(schCxt, codegen_1.Name); |
| gen.assign(valid, schValid); |
| } |
| gen.endIf(); |
| cxt.pass(valid); |
| }); |
| }, |
| }, |
| { |
| keyword: "selectCases", |
| dependencies: ["select"], |
| metaSchema: { |
| type: "object", |
| additionalProperties: metaSchema, |
| }, |
| }, |
| { |
| keyword: "selectDefault", |
| dependencies: ["select", "selectCases"], |
| metaSchema, |
| }, |
| ]; |
| } |
| exports.default = getDef; |
| module.exports = getDef; |
| //# sourceMappingURL=select.js.map |