Skip to content

Commit 31386c6

Browse files
committed
🎨 refactor iteration logic for improved readability and type safety
1 parent 5ae7c4b commit 31386c6

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

lib/src/utils.dart

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -394,26 +394,30 @@ final class Utils {
394394
final HashSet visited = HashSet.identity()..add(root);
395395

396396
while (stack.isNotEmpty) {
397-
final node = stack.removeLast();
397+
final Object node = stack.removeLast();
398398

399399
if (node is Map) {
400-
// Iterate over a snapshot of entries to allow safe removal while iterating
401-
final List<MapEntry> entries = List.of(node.entries);
402-
for (final MapEntry e in entries) {
403-
switch (e.value) {
400+
for (final key in List<String>.from(node.keys)) {
401+
final value = node[key];
402+
switch (value) {
404403
case Undefined():
405-
node.remove(e.key);
406-
case Map() || List() when visited.add(e.value):
407-
stack.add(e.value);
404+
node.remove(key);
405+
case Map() || List() when visited.add(value):
406+
stack.add(value);
407+
default:
408+
break;
408409
}
409410
}
410411
} else if (node is List) {
411412
for (int i = node.length - 1; i >= 0; i--) {
412413
final v = node[i];
413-
if (v is Undefined) {
414-
node.removeAt(i);
415-
} else if (v is Map || v is List) {
416-
if (visited.add(v)) stack.add(v);
414+
switch (v) {
415+
case Undefined():
416+
node.removeAt(i);
417+
case Map() || List() when visited.add(v):
418+
stack.add(v);
419+
default:
420+
break;
417421
}
418422
}
419423
}

0 commit comments

Comments
 (0)