Skip to content

Commit 1959de4

Browse files
authoredNov 16, 2021
fix minContains: 0, closes #1819 (#1820)
1 parent 683de4e commit 1959de4

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed
 

‎lib/vocabularies/applicator/contains.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,12 @@ const def: CodeKeywordDefinition = {
6363
const valid = gen.name("valid")
6464
if (max === undefined && min === 1) {
6565
validateItems(valid, () => gen.if(valid, () => gen.break()))
66+
} else if (min === 0) {
67+
gen.let(valid, true)
68+
if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)
6669
} else {
6770
gen.let(valid, false)
68-
if (min === 0) {
69-
gen.if(_`${data}.length > 0`, validateItemsWithCount, () => gen.assign(valid, true))
70-
} else {
71-
validateItemsWithCount()
72-
}
71+
validateItemsWithCount()
7372
}
7473
cxt.result(valid, () => cxt.reset())
7574

‎spec/issues/1819_mincontains.spec.ts

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import _Ajv from "../ajv2020"
2+
import * as assert from "assert"
3+
4+
describe("`minContains: 0` without valid items (issue #1819)", () => {
5+
const ajv = new _Ajv()
6+
7+
const schema = {
8+
type: "array",
9+
minContains: 0,
10+
maxContains: 1,
11+
contains: {type: "number"},
12+
}
13+
14+
const validate = ajv.compile(schema)
15+
16+
it("no items valid", () => assert.strictEqual(validate(["foo"]), true))
17+
it("1 item valid", () => assert.strictEqual(validate(["foo", 1]), true))
18+
it("2 items invalid", () => assert.strictEqual(validate(["foo", 1, 2]), false))
19+
})

0 commit comments

Comments
 (0)
Please sign in to comment.