You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					48 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					48 lines
				
				1.9 KiB
			| 
											3 years ago
										 | "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; | ||
|  |         let eql; | ||
|  |         const getEql = () => (eql !== null && eql !== void 0 ? eql : (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._) `${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())); | ||
|  |         } | ||
|  |         function equalCode(vSchema, i) { | ||
|  |             const sch = schema[i]; | ||
|  |             return typeof sch === "object" && sch !== null | ||
|  |                 ? (0, codegen_1._) `${getEql()}(${data}, ${vSchema}[${i}])` | ||
|  |                 : (0, codegen_1._) `${data} === ${sch}`; | ||
|  |         } | ||
|  |     }, | ||
|  | }; | ||
|  | exports.default = def; | ||
|  | //# sourceMappingURL=enum.js.map
 |