diff --git a/src/keywords/properties.test.ts b/src/keywords/properties.test.ts index 6a1055a9..1dd710dc 100644 --- a/src/keywords/properties.test.ts +++ b/src/keywords/properties.test.ts @@ -108,4 +108,15 @@ describe("keyword : properties : validate", () => { assert.deepEqual(errors.length, 1); }); + + it("should validate undefined properties with boolean schema `false`", () => { + const { valid } = compileSchema({ + type: "object", + properties: { + header: false + } + }).validate({ header: undefined }); + + assert.equal(valid, true); + }); }); diff --git a/src/keywords/properties.ts b/src/keywords/properties.ts index 5adc94d1..0ac78401 100644 --- a/src/keywords/properties.ts +++ b/src/keywords/properties.ts @@ -42,11 +42,14 @@ function validateProperties({ node, data, pointer, path }: JsonSchemaValidatorPa const errors: ValidationResult[] = []; const properties = node.properties ?? {}; Object.keys(data).forEach((propertyName) => { - if (properties[propertyName] == null) { + const value = getValue(data, propertyName); + const propertyNode = properties[propertyName]; + + if (propertyNode == null || value === void 0) { return; } - const propertyNode = properties[propertyName]; - const result = validateNode(propertyNode, getValue(data, propertyName), `${pointer}/${propertyName}`, path); + + const result = validateNode(propertyNode, value, `${pointer}/${propertyName}`, path); errors.push(...result); }); return errors;