| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| const codegen_1 = require("../../compile/codegen"); |
| const util_1 = require("../../compile/util"); |
| const equal_1 = require("../../runtime/equal"); |
| const error = { |
| message: "must be equal to one of the allowed values", |
| params: ({ schemaCode }) => (0, codegen_1._) `{allowedValues: ${schemaCode}}`, |
| }; |
| const def = { |
| keyword: "enum", |
| schemaType: "array", |
| $data: true, |
| error, |
| code(cxt) { |
| const { gen, data, $data, schema, schemaCode, it } = cxt; |
| if (!$data && schema.length === 0) |
| throw new Error("enum must have non-empty array"); |
| const useLoop = schema.length >= it.opts.loopEnum; |
| const eql = (0, util_1.useFunc)(gen, equal_1.default); |
| let valid; |
| if (useLoop || $data) { |
| valid = gen.let("valid"); |
| cxt.block$data(valid, loopEnum); |
| } |
| else { |
| /* istanbul ignore if */ |
| if (!Array.isArray(schema)) |
| throw new Error("ajv implementation error"); |
| const vSchema = gen.const("vSchema", schemaCode); |
| valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i))); |
| } |
| cxt.pass(valid); |
| function loopEnum() { |
| gen.assign(valid, false); |
| gen.forOf("v", schemaCode, (v) => gen.if((0, codegen_1._) `${eql}(${data}, ${v})`, () => gen.assign(valid, true).break())); |
| } |
| function equalCode(vSchema, i) { |
| const sch = schema[i]; |
| return typeof sch === "object" && sch !== null |
| ? (0, codegen_1._) `${eql}(${data}, ${vSchema}[${i}])` |
| : (0, codegen_1._) `${data} === ${sch}`; |
| } |
| }, |
| }; |
| exports.default = def; |
| //# sourceMappingURL=enum.js.map |