"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const codegen_1 = require("../../compile/codegen"); const metadata_1 = require("./metadata"); const nullable_1 = require("./nullable"); 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", error, code(cxt) { (0, metadata_1.checkMetadata)(cxt); const { gen, data, schema, schemaValue, parentSchema, it } = cxt; if (schema.length === 0) throw new Error("enum must have non-empty array"); if (schema.length !== new Set(schema).size) throw new Error("enum items must be unique"); let valid; const isString = (0, codegen_1._) `typeof ${data} == "string"`; if (schema.length >= it.opts.loopEnum) { let cond; [valid, cond] = (0, nullable_1.checkNullable)(cxt, isString); gen.if(cond, loopEnum); } else { /* istanbul ignore if */ if (!Array.isArray(schema)) throw new Error("ajv implementation error"); valid = (0, codegen_1.and)(isString, (0, codegen_1.or)(...schema.map((value) => (0, codegen_1._) `${data} === ${value}`))); if (parentSchema.nullable) valid = (0, codegen_1.or)((0, codegen_1._) `${data} === null`, valid); } cxt.pass(valid); function loopEnum() { gen.forOf("v", schemaValue, (v) => gen.if((0, codegen_1._) `${valid} = ${data} === ${v}`, () => gen.break())); } }, }; exports.default = def; //# sourceMappingURL=enum.js.map