From 37d70857e839a3435d03a182aed8f5feeba56760 Mon Sep 17 00:00:00 2001 From: bhvgt Date: Fri, 4 Mar 2022 12:01:09 +0530 Subject: [PATCH 1/5] fix: emit equal when needed - alternative to #1853 --- lib/vocabularies/validation/enum.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/vocabularies/validation/enum.ts b/lib/vocabularies/validation/enum.ts index fa85373c4..49b0c562e 100644 --- a/lib/vocabularies/validation/enum.ts +++ b/lib/vocabularies/validation/enum.ts @@ -20,7 +20,12 @@ const def: CodeKeywordDefinition = { 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 = useFunc(gen, equal) + let eql: Name; + function getEql() { + eql = eql || useFunc(gen, equal); + return eql; + } + let valid: Code if (useLoop || $data) { valid = gen.let("valid") @@ -36,14 +41,14 @@ const def: CodeKeywordDefinition = { function loopEnum(): void { gen.assign(valid, false) gen.forOf("v", schemaCode as Code, (v) => - gen.if(_`${eql}(${data}, ${v})`, () => gen.assign(valid, true).break()) + gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break()) ) } function equalCode(vSchema: Name, i: number): Code { const sch = schema[i] return typeof sch === "object" && sch !== null - ? _`${eql}(${data}, ${vSchema}[${i}])` + ? _`${getEql()}(${data}, ${vSchema}[${i}])` : _`${data} === ${sch}` } }, From e22fbcb62f8b6acd2565b64a0017213862e47daf Mon Sep 17 00:00:00 2001 From: bhvgt Date: Fri, 4 Mar 2022 12:45:59 +0530 Subject: [PATCH 2/5] fix: prettier errors --- lib/vocabularies/validation/enum.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/vocabularies/validation/enum.ts b/lib/vocabularies/validation/enum.ts index 49b0c562e..98b91c581 100644 --- a/lib/vocabularies/validation/enum.ts +++ b/lib/vocabularies/validation/enum.ts @@ -20,10 +20,10 @@ const def: CodeKeywordDefinition = { 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: Name; + let eql: Name function getEql() { - eql = eql || useFunc(gen, equal); - return eql; + eql = eql || useFunc(gen, equal) + return eql } let valid: Code From 1a12056ccf24fb99dd031d193330133937fb1d2f Mon Sep 17 00:00:00 2001 From: bhvgt Date: Fri, 4 Mar 2022 12:52:51 +0530 Subject: [PATCH 3/5] fix: tslint errors --- lib/vocabularies/validation/enum.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vocabularies/validation/enum.ts b/lib/vocabularies/validation/enum.ts index 98b91c581..13ff50572 100644 --- a/lib/vocabularies/validation/enum.ts +++ b/lib/vocabularies/validation/enum.ts @@ -21,7 +21,7 @@ const def: CodeKeywordDefinition = { if (!$data && schema.length === 0) throw new Error("enum must have non-empty array") const useLoop = schema.length >= it.opts.loopEnum let eql: Name - function getEql() { + function getEql(): Name { eql = eql || useFunc(gen, equal) return eql } From 2266c379ed92c26d740a0fab1323d9723485aad9 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 22 Mar 2022 20:54:31 +0000 Subject: [PATCH 4/5] Update lib/vocabularies/validation/enum.ts --- lib/vocabularies/validation/enum.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/vocabularies/validation/enum.ts b/lib/vocabularies/validation/enum.ts index 13ff50572..e91303867 100644 --- a/lib/vocabularies/validation/enum.ts +++ b/lib/vocabularies/validation/enum.ts @@ -20,10 +20,9 @@ const def: CodeKeywordDefinition = { 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: Name + let eql: Name? function getEql(): Name { - eql = eql || useFunc(gen, equal) - return eql + return (eql ??= useFunc(gen, equal)) } let valid: Code From 24ae3b0c1b5a0789a6fa9fee46a99b553f99e139 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 22 Mar 2022 21:03:50 +0000 Subject: [PATCH 5/5] Update lib/vocabularies/validation/enum.ts --- lib/vocabularies/validation/enum.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/vocabularies/validation/enum.ts b/lib/vocabularies/validation/enum.ts index e91303867..76377fb02 100644 --- a/lib/vocabularies/validation/enum.ts +++ b/lib/vocabularies/validation/enum.ts @@ -20,10 +20,8 @@ const def: CodeKeywordDefinition = { 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: Name? - function getEql(): Name { - return (eql ??= useFunc(gen, equal)) - } + let eql: Name | undefined + const getEql = (): Name => (eql ??= useFunc(gen, equal)) let valid: Code if (useLoop || $data) {