`t.like` mishandles symbol-keyed and non-enumerable properties
gibson042 opened this issue · 0 comments
gibson042 commented
This is actually two distinct but related issues affecting t.like
, which is effectively a concordance deep comparison of a comparable value against a selector value, where the comparable is a filtered view of the actual input with respect to the selector.
- Rejection of empty selector objects mistakenly allows objects based on the presence of non-enumerable properties that are ignored by concordance, resulting in inappropriate pass results from e.g.
t.like({}, Object.defineProperties({}, {x: {enumerable: false}}))
. - Use of
Object.entries(selector)
inselectComparable
ignores symbol-keyed properties that are respected by concordance, resulting in inappropriate failure results from e.g.t.like({[Symbol.toStringTag]: 'Custom'}, {[Symbol.toStringTag]: 'Custom'})
.