123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- "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
|