@@ -16,13 +16,7 @@ export function isLikeSelector(selector) {
16
16
17
17
export const CIRCULAR_SELECTOR = new Error ( 'Encountered a circular selector' ) ;
18
18
19
- export function selectComparable ( actual , selector , circular = new Set ( ) ) {
20
- if ( circular . has ( selector ) ) {
21
- throw CIRCULAR_SELECTOR ;
22
- }
23
-
24
- circular . add ( selector ) ;
25
-
19
+ export function selectComparable ( actual , selector , circular = [ selector ] ) {
26
20
if ( isPrimitive ( actual ) ) {
27
21
return actual ;
28
22
}
@@ -31,9 +25,17 @@ export function selectComparable(actual, selector, circular = new Set()) {
31
25
const enumerableKeys = Reflect . ownKeys ( selector ) . filter ( key => Reflect . getOwnPropertyDescriptor ( selector , key ) . enumerable ) ;
32
26
for ( const key of enumerableKeys ) {
33
27
const subselector = Reflect . get ( selector , key ) ;
34
- comparable [ key ] = isLikeSelector ( subselector )
35
- ? selectComparable ( Reflect . get ( actual , key ) , subselector , circular )
36
- : Reflect . get ( actual , key ) ;
28
+ if ( isLikeSelector ( subselector ) ) {
29
+ if ( circular . includes ( subselector ) ) {
30
+ throw CIRCULAR_SELECTOR ;
31
+ }
32
+
33
+ circular . push ( subselector ) ;
34
+ comparable [ key ] = selectComparable ( Reflect . get ( actual , key ) , subselector , circular ) ;
35
+ circular . pop ( ) ;
36
+ } else {
37
+ comparable [ key ] = Reflect . get ( actual , key ) ;
38
+ }
37
39
}
38
40
39
41
return comparable ;
0 commit comments