"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const codegen_1 = require("../../compile/codegen"); const equal = require("fast-deep-equal"); const error = { message: "should be equal to one of the allowed values", params: ({ schemaCode }) => 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 = cxt.gen.scopeValue("func", { ref: equal, code: codegen_1._ `require("ajv/dist/compile/equal")`, }); 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 = 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(codegen_1._ `${eql}(${data}, ${v})`, () => gen.assign(valid, true).break())); } function equalCode(vSchema, i) { const sch = schema[i]; return sch && typeof sch === "object" ? codegen_1._ `${eql}(${data}, ${vSchema}[${i}])` : codegen_1._ `${data} === ${sch}`; } }, }; exports.default = def; //# sourceMappingURL=enum.js.map