Include *all* object keys, not just enumerable string keys

master
Sven Slootweg 4 years ago
parent 0a34966500
commit b21051e8b4

@ -33,7 +33,7 @@ module.exports = function hasShape(rules) {
let unexpectedPropertyErrors = asExpression(() => {
if (!allowExtraProperties) {
return Object.keys(object).map((propertyName) => {
return Reflect.ownKeys(object).map((propertyName) => {
if (!containsRules(rules[propertyName])) {
return new ValidationError(`Encountered an unexpected property '${propertyName}'`);
} else {
@ -58,8 +58,8 @@ module.exports = function hasShape(rules) {
// We need to consider the keys from the ruleset (for detecting missing required properties) *and* the keys from the actual object (for handling extraneous values).
let allKeys = arrayUnion(
Object.keys(rules),
Object.keys(object)
Reflect.ownKeys(rules),
Reflect.ownKeys(object)
);
for (let key of allKeys) {
@ -82,6 +82,7 @@ module.exports = function hasShape(rules) {
}
} else {
// Extraneous property
// FIXME: Assign non-enumerable if the source property was non-enumerable!
newObject[key] = value;
}
}

Loading…
Cancel
Save