Spaces:
Running
Running
; | |
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 |