MCPcopy
hub / github.com/ajv-validator/ajv / code

Function code

lib/vocabularies/validation/enum.ts:19–51  ·  view source on GitHub ↗
(cxt: KeywordCxt)

Source from the content-addressed store, hash-verified

17 $data: true,
18 error,
19 code(cxt: KeywordCxt) {
20 const {gen, data, $data, schema, schemaCode, it} = cxt
21 if (!$data && schema.length === 0) throw new Error("enum must have non-empty array")
22 const useLoop = schema.length >= it.opts.loopEnum
23 let eql: Name | undefined
24 const getEql = (): Name => (eql ??= useFunc(gen, equal))
25
26 let valid: Code
27 if (useLoop || $data) {
28 valid = gen.let("valid")
29 cxt.block$data(valid, loopEnum)
30 } else {
31 /* istanbul ignore if */
32 if (!Array.isArray(schema)) throw new Error("ajv implementation error")
33 const vSchema = gen.const("vSchema", schemaCode)
34 valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))
35 }
36 cxt.pass(valid)
37
38 function loopEnum(): void {
39 gen.assign(valid, false)
40 gen.forOf("v", schemaCode as Code, (v) =>
41 gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())
42 )
43 }
44
45 function equalCode(vSchema: Name, i: number): Code {
46 const sch = schema[i]
47 return typeof sch === "object" && sch !== null
48 ? _`${getEql()}(${data}, ${vSchema}[${i}])`
49 : _`${data} === ${sch}`
50 }
51 },
52}
53
54export default def

Callers

nothing calls this directly

Calls 6

orFunction · 0.90
equalCodeFunction · 0.85
letMethod · 0.80
block$dataMethod · 0.80
constMethod · 0.80
passMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…