Comparing version 5.3.0 to 5.3.1
@@ -1,10 +0,15 @@ | ||
const isObject = selector => Reflect.getPrototypeOf(selector) === Object.prototype; | ||
const isPrimitive = value => value === null || typeof value !== 'object'; | ||
export function isLikeSelector(selector) { | ||
if (selector === null || typeof selector !== 'object') { | ||
// Require selector to be an array or plain object. | ||
if ( | ||
isPrimitive(selector) | ||
|| (!Array.isArray(selector) && Reflect.getPrototypeOf(selector) !== Object.prototype) | ||
) { | ||
return false; | ||
} | ||
const keyCount = Reflect.ownKeys(selector).length; | ||
return (Array.isArray(selector) && keyCount > 1) || (isObject(selector) && keyCount > 0); | ||
// Also require at least one enumerable property. | ||
const descriptors = Object.getOwnPropertyDescriptors(selector); | ||
return Reflect.ownKeys(descriptors).some(key => descriptors[key].enumerable === true); | ||
} | ||
@@ -14,21 +19,25 @@ | ||
export function selectComparable(lhs, selector, circular = new Set()) { | ||
if (circular.has(selector)) { | ||
throw CIRCULAR_SELECTOR; | ||
export function selectComparable(actual, selector, circular = [selector]) { | ||
if (isPrimitive(actual)) { | ||
return actual; | ||
} | ||
circular.add(selector); | ||
const comparable = Array.isArray(selector) ? [] : {}; | ||
const enumerableKeys = Reflect.ownKeys(selector).filter(key => Reflect.getOwnPropertyDescriptor(selector, key).enumerable); | ||
for (const key of enumerableKeys) { | ||
const subselector = Reflect.get(selector, key); | ||
if (isLikeSelector(subselector)) { | ||
if (circular.includes(subselector)) { | ||
throw CIRCULAR_SELECTOR; | ||
} | ||
if (lhs === null || typeof lhs !== 'object') { | ||
return lhs; | ||
circular.push(subselector); | ||
comparable[key] = selectComparable(Reflect.get(actual, key), subselector, circular); | ||
circular.pop(); | ||
} else { | ||
comparable[key] = Reflect.get(actual, key); | ||
} | ||
} | ||
const comparable = Array.isArray(selector) ? [] : {}; | ||
for (const [key, rhs] of Object.entries(selector)) { | ||
comparable[key] = isLikeSelector(rhs) | ||
? selectComparable(Reflect.get(lhs, key), rhs, circular) | ||
: Reflect.get(lhs, key); | ||
} | ||
return comparable; | ||
} |
{ | ||
"name": "ava", | ||
"version": "5.3.0", | ||
"version": "5.3.1", | ||
"description": "Node.js test runner that lets you develop with confidence.", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
271614
7227