@thyn/core 0.0.306 → 0.0.308

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/element.js CHANGED
@@ -399,6 +399,161 @@ export function list(props, terminal = false) {
399
399
  });
400
400
  return outlet;
401
401
  }
402
+ // export function isolatedTerminalList(props) {
403
+ // let parent;
404
+ // let outlet = document.createDocumentFragment();
405
+ // let prevItems;
406
+ // const startBookend = document.createComment("") as any;
407
+ // const endBookend = document.createComment("") as any;
408
+ // startBookend.$frag = outlet;
409
+ // startBookend.$end = endBookend;
410
+ // const render = props.render;
411
+ // staticEffect(() => {
412
+ // parent = startBookend.parentNode;
413
+ // if (!parent) {
414
+ // prevItems = props.items();
415
+ // outlet.append(startBookend, ...prevItems.map(render), endBookend);
416
+ // return;
417
+ // }
418
+ // let nextItems = props.items();
419
+ // let newLength = nextItems.length;
420
+ // let oldLength = prevItems.length;
421
+ // if (!oldLength && newLength) {
422
+ // endBookend.before(...nextItems.map(render))
423
+ // prevItems = nextItems;
424
+ // nextItems = null;
425
+ // return;
426
+ // }
427
+ // const childNodeList = parent.childNodes as NodeListOf<ChildNode>;
428
+ // if (!newLength) {
429
+ // const end = childNodeList.length - 1;
430
+ // for (let i = 1; i < end; i++) {
431
+ // shallowTeardown(childNodeList[i]);
432
+ // }
433
+ // parent.textContent = "";
434
+ // parent.append(startBookend, endBookend);
435
+ // prevItems = nextItems;
436
+ // nextItems = null;
437
+ // return;
438
+ // }
439
+ // let start = nextItems.findIndex((item, index) => prevItems[index] !== item);
440
+ // if (start === oldLength) {
441
+ // endBookend.before(...nextItems.slice(start).map(render));
442
+ // prevItems = nextItems;
443
+ // nextItems = null;
444
+ // return;
445
+ // }
446
+ // let childNodes = Array.from(childNodeList);
447
+ // if (start < 0) {
448
+ // for (let i = nextItems.length; i < oldLength; i++) {
449
+ // const e = childNodes[1 + --oldLength];
450
+ // shallowTeardown(e);
451
+ // e.remove();
452
+ // }
453
+ // prevItems = nextItems;
454
+ // nextItems = null;
455
+ // childNodes = null;
456
+ // return;
457
+ // }
458
+ // if (start >= newLength) {
459
+ // while (start < oldLength) {
460
+ // const e = childNodes[1 + --oldLength];
461
+ // shallowTeardown(e);
462
+ // e.remove();
463
+ // }
464
+ // prevItems = nextItems;
465
+ // nextItems = null;
466
+ // childNodes = null;
467
+ // return;
468
+ // }
469
+ // // suffix
470
+ // for (
471
+ // oldLength--, newLength--;
472
+ // newLength > start &&
473
+ // oldLength >= start &&
474
+ // nextItems[newLength] === prevItems[oldLength];
475
+ // oldLength--, newLength--
476
+ // );
477
+ // const nextKeys = new Set(nextItems);
478
+ // const removalQueue = [];
479
+ // for (let i = start; i <= oldLength; i++) {
480
+ // if (!nextKeys.has(prevItems[i])) {
481
+ // const ch = childNodes[i + 1];
482
+ // shallowTeardown(ch);
483
+ // removalQueue.push(ch);
484
+ // childNodes[i + 1] = null;
485
+ // }
486
+ // }
487
+ // if (removalQueue.length === prevItems.length) {
488
+ // parent.textContent = "";
489
+ // parent.append(startBookend, ...nextItems.map(render), endBookend);
490
+ // prevItems = nextItems;
491
+ // nextItems = null;
492
+ // childNodes = null;
493
+ // return;
494
+ // }
495
+ // for (const e of removalQueue) {
496
+ // e.remove();
497
+ // }
498
+ // if (oldLength - start === removalQueue.length) {
499
+ // prevItems = nextItems;
500
+ // nextItems = null;
501
+ // childNodes = null;
502
+ // return;
503
+ // }
504
+ // let keyMap = new Map();
505
+ // for (let i = start; i <= oldLength; i++) {
506
+ // if (
507
+ // childNodes[i + 1] &&
508
+ // (!nextItems[i] ||
509
+ // prevItems[i] !== nextItems[i])
510
+ // ) {
511
+ // keyMap.set(prevItems[i], {
512
+ // el: childNodes[i + 1],
513
+ // item: prevItems[i],
514
+ // });
515
+ // }
516
+ // }
517
+ // while (start <= newLength) {
518
+ // const newChd = nextItems[start];
519
+ // const oldChd = prevItems[start];
520
+ // if (newChd === oldChd) {
521
+ // start++;
522
+ // continue;
523
+ // }
524
+ // if (oldChd === undefined) {
525
+ // parent.insertBefore(render(newChd), endBookend);
526
+ // start++;
527
+ // continue;
528
+ // }
529
+ // const mappedOld = keyMap.get(newChd);
530
+ // if (mappedOld) {
531
+ // const oldDom = childNodeList[start + 1];
532
+ // const { el, item } = mappedOld;
533
+ // if (oldDom !== el) {
534
+ // const tmp = el.nextSibling;
535
+ // parent.insertBefore(el, oldDom);
536
+ // parent.insertBefore(oldDom, tmp);
537
+ // } else if (item !== newChd) {
538
+ // replaceWith(newChd, el, render);
539
+ // }
540
+ // keyMap.delete(newChd);
541
+ // } else if (oldChd !== newChd) {
542
+ // parent.insertBefore(render(newChd), childNodeList[start + 1]);
543
+ // }
544
+ // start++;
545
+ // }
546
+ // for (const { el } of keyMap.values()) {
547
+ // shallowTeardown(el);
548
+ // el.remove();
549
+ // }
550
+ // keyMap = null;
551
+ // prevItems = nextItems;
552
+ // nextItems = null;
553
+ // childNodes = null;
554
+ // });
555
+ // return outlet;
556
+ // }
402
557
  export function isolatedTerminalList(props) {
403
558
  let parent;
404
559
  let outlet = document.createDocumentFragment();
@@ -418,6 +573,7 @@ export function isolatedTerminalList(props) {
418
573
  let nextItems = props.items();
419
574
  let newLength = nextItems.length;
420
575
  let oldLength = prevItems.length;
576
+ // Fast path: Empty to something
421
577
  if (!oldLength && newLength) {
422
578
  endBookend.before(...nextItems.map(render));
423
579
  prevItems = nextItems;
@@ -425,10 +581,12 @@ export function isolatedTerminalList(props) {
425
581
  return;
426
582
  }
427
583
  const childNodeList = parent.childNodes;
584
+ // Fast path: Something to empty
428
585
  if (!newLength) {
429
- const end = childNodeList.length - 1;
430
- for (let i = 1; i < end; i++) {
431
- shallowTeardown(childNodeList[i]);
586
+ let node = startBookend.nextSibling;
587
+ while (node !== endBookend) {
588
+ shallowTeardown(node);
589
+ node = node.nextSibling;
432
590
  }
433
591
  parent.textContent = "";
434
592
  parent.append(startBookend, endBookend);
@@ -436,118 +594,96 @@ export function isolatedTerminalList(props) {
436
594
  nextItems = null;
437
595
  return;
438
596
  }
439
- let start = nextItems.findIndex((item, index) => prevItems[index] !== item);
597
+ // 1. Prefix Optimization
598
+ let start = 0;
599
+ // Compare items until they mismatch or we reach the end
600
+ while (start < newLength && start < oldLength && prevItems[start] === nextItems[start]) {
601
+ start++;
602
+ }
440
603
  if (start === oldLength) {
441
604
  endBookend.before(...nextItems.slice(start).map(render));
442
605
  prevItems = nextItems;
443
606
  nextItems = null;
444
607
  return;
445
608
  }
446
- let childNodes = Array.from(childNodeList);
447
- if (start < 0) {
448
- for (let i = nextItems.length; i < oldLength; i++) {
449
- const e = childNodes[1 + --oldLength];
450
- shallowTeardown(e);
451
- e.remove();
609
+ // 2. Suffix Optimization
610
+ // Scan backwards from the end
611
+ while (newLength > start && oldLength > start && nextItems[newLength - 1] === prevItems[oldLength - 1]) {
612
+ oldLength--;
613
+ newLength--;
614
+ }
615
+ // Fast path: Simple Deletion (Prefix/Suffix matched, just remove middle)
616
+ if (start === newLength) {
617
+ // We need to remove from start to oldLength
618
+ // We can get the node at 'start' and walk forward
619
+ let node = childNodeList[start + 1];
620
+ for (let i = start; i < oldLength; i++) {
621
+ let next = node.nextSibling;
622
+ shallowTeardown(node);
623
+ node.remove();
624
+ node = next;
452
625
  }
453
626
  prevItems = nextItems;
454
627
  nextItems = null;
455
- childNodes = null;
456
628
  return;
457
629
  }
458
- if (start >= newLength) {
459
- while (start < oldLength) {
460
- const e = childNodes[1 + --oldLength];
461
- shallowTeardown(e);
462
- e.remove();
463
- }
464
- prevItems = nextItems;
465
- nextItems = null;
466
- childNodes = null;
467
- return;
468
- }
469
- // suffix
470
- for (oldLength--, newLength--; newLength > start &&
471
- oldLength >= start &&
472
- nextItems[newLength] === prevItems[oldLength]; oldLength--, newLength--)
473
- ;
474
- const nextKeys = new Set(nextItems);
475
- const removalQueue = [];
476
- for (let i = start; i <= oldLength; i++) {
477
- if (!nextKeys.has(prevItems[i])) {
478
- const ch = childNodes[i + 1];
479
- shallowTeardown(ch);
480
- removalQueue.push(ch);
481
- childNodes[i + 1] = null;
630
+ const keyMap = new Map();
631
+ let node = childNodeList[start + 1];
632
+ let cursor = node;
633
+ for (let i = start; i < oldLength; i++) {
634
+ keyMap.set(prevItems[i], node);
635
+ node = node.nextSibling;
636
+ }
637
+ // Replace all fast path
638
+ if (start === 0 && !keyMap.has(nextItems[0])) {
639
+ for (const oldNode of keyMap.values()) {
640
+ shallowTeardown(oldNode);
482
641
  }
483
- }
484
- if (removalQueue.length === prevItems.length) {
485
642
  parent.textContent = "";
486
643
  parent.append(startBookend, ...nextItems.map(render), endBookend);
487
644
  prevItems = nextItems;
488
645
  nextItems = null;
489
- childNodes = null;
490
646
  return;
491
647
  }
492
- for (const e of removalQueue) {
493
- e.remove();
494
- }
495
- if (oldLength - start === removalQueue.length) {
496
- prevItems = nextItems;
497
- nextItems = null;
498
- childNodes = null;
499
- return;
500
- }
501
- let keyMap = new Map();
502
- for (let i = start; i <= oldLength; i++) {
503
- if (childNodes[i + 1] &&
504
- (!nextItems[i] ||
505
- prevItems[i] !== nextItems[i])) {
506
- keyMap.set(prevItems[i], {
507
- el: childNodes[i + 1],
508
- item: prevItems[i],
509
- });
510
- }
511
- }
512
- while (start <= newLength) {
513
- const newChd = nextItems[start];
514
- const oldChd = prevItems[start];
515
- if (newChd === oldChd) {
516
- start++;
517
- continue;
518
- }
519
- if (oldChd === undefined) {
520
- parent.insertBefore(render(newChd), endBookend);
521
- start++;
522
- continue;
523
- }
524
- const mappedOld = keyMap.get(newChd);
525
- if (mappedOld) {
526
- const oldDom = childNodeList[start + 1];
527
- const { el, item } = mappedOld;
528
- if (oldDom !== el) {
529
- const tmp = el.nextSibling;
530
- parent.insertBefore(el, oldDom);
531
- parent.insertBefore(oldDom, tmp);
648
+ // Iterate through the NEW list
649
+ for (let i = start; i < newLength; i++) {
650
+ const newItem = nextItems[i];
651
+ const oldNode = keyMap.get(newItem);
652
+ if (oldNode) {
653
+ // MATCH: We found the item in the old list.
654
+ // Remove it from the map so we know it has been "claimed".
655
+ keyMap.delete(newItem);
656
+ if (oldNode === cursor) {
657
+ // It's already in the right spot. Just advance the cursor.
658
+ cursor = cursor.nextSibling;
532
659
  }
533
- else if (item !== newChd) {
534
- replaceWith(newChd, el, render);
660
+ else {
661
+ const swapTarget = oldNode.nextSibling;
662
+ // 2. Move old node to current spot (Standard)
663
+ parent.insertBefore(oldNode, cursor);
664
+ // 3. Move the cursor node to the empty spot (Swap)
665
+ parent.insertBefore(cursor, swapTarget);
666
+ // 4. Update the loop cursor
667
+ // Since we swapped, the node sitting at the NEXT index is likely
668
+ // the one that was originally after 'cursor'.
669
+ cursor = oldNode.nextSibling;
535
670
  }
536
- keyMap.delete(newChd);
537
671
  }
538
- else if (oldChd !== newChd) {
539
- parent.insertBefore(render(newChd), childNodeList[start + 1]);
672
+ else {
673
+ // MISS: This is a brand new item.
674
+ const newNode = render(newItem);
675
+ parent.insertBefore(newNode, cursor);
676
+ // Similarly, do not advance cursor (it gets pushed to the right).
540
677
  }
541
- start++;
542
678
  }
543
- for (const { el } of keyMap.values()) {
544
- shallowTeardown(el);
545
- el.remove();
679
+ // 4. Cleanup
680
+ // Any nodes remaining in the map were not present in the new list.
681
+ for (const unusedNode of keyMap.values()) {
682
+ shallowTeardown(unusedNode);
683
+ unusedNode.remove();
546
684
  }
547
- keyMap = null;
548
685
  prevItems = nextItems;
549
686
  nextItems = null;
550
- childNodes = null;
551
687
  });
552
688
  return outlet;
553
689
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thyn/core",
3
- "version": "0.0.306",
3
+ "version": "0.0.308",
4
4
  "scripts": {
5
5
  "build": "tsc",
6
6
  "pub": "tsc && npm version patch -f && npm -f publish --access=public",
package/src/element.ts CHANGED
@@ -424,6 +424,168 @@ export function list(props, terminal = false) {
424
424
  return outlet;
425
425
  }
426
426
 
427
+ // export function isolatedTerminalList(props) {
428
+ // let parent;
429
+ // let outlet = document.createDocumentFragment();
430
+ // let prevItems;
431
+ // const startBookend = document.createComment("") as any;
432
+ // const endBookend = document.createComment("") as any;
433
+ // startBookend.$frag = outlet;
434
+ // startBookend.$end = endBookend;
435
+ // const render = props.render;
436
+
437
+ // staticEffect(() => {
438
+ // parent = startBookend.parentNode;
439
+ // if (!parent) {
440
+ // prevItems = props.items();
441
+ // outlet.append(startBookend, ...prevItems.map(render), endBookend);
442
+ // return;
443
+ // }
444
+ // let nextItems = props.items();
445
+ // let newLength = nextItems.length;
446
+ // let oldLength = prevItems.length;
447
+ // if (!oldLength && newLength) {
448
+ // endBookend.before(...nextItems.map(render))
449
+ // prevItems = nextItems;
450
+ // nextItems = null;
451
+ // return;
452
+ // }
453
+ // const childNodeList = parent.childNodes as NodeListOf<ChildNode>;
454
+ // if (!newLength) {
455
+ // const end = childNodeList.length - 1;
456
+ // for (let i = 1; i < end; i++) {
457
+ // shallowTeardown(childNodeList[i]);
458
+ // }
459
+ // parent.textContent = "";
460
+ // parent.append(startBookend, endBookend);
461
+ // prevItems = nextItems;
462
+ // nextItems = null;
463
+ // return;
464
+ // }
465
+
466
+ // let start = nextItems.findIndex((item, index) => prevItems[index] !== item);
467
+ // if (start === oldLength) {
468
+ // endBookend.before(...nextItems.slice(start).map(render));
469
+ // prevItems = nextItems;
470
+ // nextItems = null;
471
+ // return;
472
+ // }
473
+
474
+ // let childNodes = Array.from(childNodeList);
475
+ // if (start < 0) {
476
+ // for (let i = nextItems.length; i < oldLength; i++) {
477
+ // const e = childNodes[1 + --oldLength];
478
+ // shallowTeardown(e);
479
+ // e.remove();
480
+ // }
481
+ // prevItems = nextItems;
482
+ // nextItems = null;
483
+ // childNodes = null;
484
+ // return;
485
+ // }
486
+
487
+ // if (start >= newLength) {
488
+ // while (start < oldLength) {
489
+ // const e = childNodes[1 + --oldLength];
490
+ // shallowTeardown(e);
491
+ // e.remove();
492
+ // }
493
+ // prevItems = nextItems;
494
+ // nextItems = null;
495
+ // childNodes = null;
496
+ // return;
497
+ // }
498
+
499
+ // // suffix
500
+ // for (
501
+ // oldLength--, newLength--;
502
+ // newLength > start &&
503
+ // oldLength >= start &&
504
+ // nextItems[newLength] === prevItems[oldLength];
505
+ // oldLength--, newLength--
506
+ // );
507
+
508
+ // const nextKeys = new Set(nextItems);
509
+ // const removalQueue = [];
510
+ // for (let i = start; i <= oldLength; i++) {
511
+ // if (!nextKeys.has(prevItems[i])) {
512
+ // const ch = childNodes[i + 1];
513
+ // shallowTeardown(ch);
514
+ // removalQueue.push(ch);
515
+ // childNodes[i + 1] = null;
516
+ // }
517
+ // }
518
+ // if (removalQueue.length === prevItems.length) {
519
+ // parent.textContent = "";
520
+ // parent.append(startBookend, ...nextItems.map(render), endBookend);
521
+ // prevItems = nextItems;
522
+ // nextItems = null;
523
+ // childNodes = null;
524
+ // return;
525
+ // }
526
+ // for (const e of removalQueue) {
527
+ // e.remove();
528
+ // }
529
+ // if (oldLength - start === removalQueue.length) {
530
+ // prevItems = nextItems;
531
+ // nextItems = null;
532
+ // childNodes = null;
533
+ // return;
534
+ // }
535
+ // let keyMap = new Map();
536
+ // for (let i = start; i <= oldLength; i++) {
537
+ // if (
538
+ // childNodes[i + 1] &&
539
+ // (!nextItems[i] ||
540
+ // prevItems[i] !== nextItems[i])
541
+ // ) {
542
+ // keyMap.set(prevItems[i], {
543
+ // el: childNodes[i + 1],
544
+ // item: prevItems[i],
545
+ // });
546
+ // }
547
+ // }
548
+ // while (start <= newLength) {
549
+ // const newChd = nextItems[start];
550
+ // const oldChd = prevItems[start];
551
+ // if (newChd === oldChd) {
552
+ // start++;
553
+ // continue;
554
+ // }
555
+ // if (oldChd === undefined) {
556
+ // parent.insertBefore(render(newChd), endBookend);
557
+ // start++;
558
+ // continue;
559
+ // }
560
+ // const mappedOld = keyMap.get(newChd);
561
+ // if (mappedOld) {
562
+ // const oldDom = childNodeList[start + 1];
563
+ // const { el, item } = mappedOld;
564
+ // if (oldDom !== el) {
565
+ // const tmp = el.nextSibling;
566
+ // parent.insertBefore(el, oldDom);
567
+ // parent.insertBefore(oldDom, tmp);
568
+ // } else if (item !== newChd) {
569
+ // replaceWith(newChd, el, render);
570
+ // }
571
+ // keyMap.delete(newChd);
572
+ // } else if (oldChd !== newChd) {
573
+ // parent.insertBefore(render(newChd), childNodeList[start + 1]);
574
+ // }
575
+ // start++;
576
+ // }
577
+ // for (const { el } of keyMap.values()) {
578
+ // shallowTeardown(el);
579
+ // el.remove();
580
+ // }
581
+ // keyMap = null;
582
+ // prevItems = nextItems;
583
+ // nextItems = null;
584
+ // childNodes = null;
585
+ // });
586
+ // return outlet;
587
+ // }
588
+
427
589
  export function isolatedTerminalList(props) {
428
590
  let parent;
429
591
  let outlet = document.createDocumentFragment();
@@ -441,20 +603,27 @@ export function isolatedTerminalList(props) {
441
603
  outlet.append(startBookend, ...prevItems.map(render), endBookend);
442
604
  return;
443
605
  }
606
+
444
607
  let nextItems = props.items();
445
608
  let newLength = nextItems.length;
446
609
  let oldLength = prevItems.length;
610
+
611
+ // Fast path: Empty to something
447
612
  if (!oldLength && newLength) {
448
- endBookend.before(...nextItems.map(render))
613
+ endBookend.before(...nextItems.map(render));
449
614
  prevItems = nextItems;
450
615
  nextItems = null;
451
616
  return;
452
617
  }
453
- const childNodeList = parent.childNodes as NodeListOf<ChildNode>;
618
+
619
+ const childNodeList = parent.childNodes;
620
+
621
+ // Fast path: Something to empty
454
622
  if (!newLength) {
455
- const end = childNodeList.length - 1;
456
- for (let i = 1; i < end; i++) {
457
- shallowTeardown(childNodeList[i]);
623
+ let node = startBookend.nextSibling;
624
+ while (node !== endBookend) {
625
+ shallowTeardown(node);
626
+ node = node.nextSibling;
458
627
  }
459
628
  parent.textContent = "";
460
629
  parent.append(startBookend, endBookend);
@@ -463,7 +632,13 @@ export function isolatedTerminalList(props) {
463
632
  return;
464
633
  }
465
634
 
466
- let start = nextItems.findIndex((item, index) => prevItems[index] !== item);
635
+ // 1. Prefix Optimization
636
+ let start = 0;
637
+ // Compare items until they mismatch or we reach the end
638
+ while (start < newLength && start < oldLength && prevItems[start] === nextItems[start]) {
639
+ start++;
640
+ }
641
+
467
642
  if (start === oldLength) {
468
643
  endBookend.before(...nextItems.slice(start).map(render));
469
644
  prevItems = nextItems;
@@ -471,117 +646,94 @@ export function isolatedTerminalList(props) {
471
646
  return;
472
647
  }
473
648
 
474
- let childNodes = Array.from(childNodeList);
475
- if (start < 0) {
476
- for (let i = nextItems.length; i < oldLength; i++) {
477
- const e = childNodes[1 + --oldLength];
478
- shallowTeardown(e);
479
- e.remove();
480
- }
481
- prevItems = nextItems;
482
- nextItems = null;
483
- childNodes = null;
484
- return;
649
+ // 2. Suffix Optimization
650
+ // Scan backwards from the end
651
+ while (newLength > start && oldLength > start && nextItems[newLength - 1] === prevItems[oldLength - 1]) {
652
+ oldLength--;
653
+ newLength--;
485
654
  }
486
655
 
487
- if (start >= newLength) {
488
- while (start < oldLength) {
489
- const e = childNodes[1 + --oldLength];
490
- shallowTeardown(e);
491
- e.remove();
656
+ // Fast path: Simple Deletion (Prefix/Suffix matched, just remove middle)
657
+ if (start === newLength) {
658
+ // We need to remove from start to oldLength
659
+ // We can get the node at 'start' and walk forward
660
+ let node = childNodeList[start + 1];
661
+ for (let i = start; i < oldLength; i++) {
662
+ let next = node.nextSibling;
663
+ shallowTeardown(node);
664
+ node.remove();
665
+ node = next;
492
666
  }
493
667
  prevItems = nextItems;
494
668
  nextItems = null;
495
- childNodes = null;
496
669
  return;
497
670
  }
498
671
 
499
- // suffix
500
- for (
501
- oldLength--, newLength--;
502
- newLength > start &&
503
- oldLength >= start &&
504
- nextItems[newLength] === prevItems[oldLength];
505
- oldLength--, newLength--
506
- );
672
+ const keyMap = new Map();
673
+ let node = childNodeList[start + 1];
674
+ let cursor = node;
675
+ for (let i = start; i < oldLength; i++) {
676
+ keyMap.set(prevItems[i], node);
677
+ node = node.nextSibling;
678
+ }
507
679
 
508
- const nextKeys = new Set(nextItems);
509
- const removalQueue = [];
510
- for (let i = start; i <= oldLength; i++) {
511
- if (!nextKeys.has(prevItems[i])) {
512
- const ch = childNodes[i + 1];
513
- shallowTeardown(ch);
514
- removalQueue.push(ch);
515
- childNodes[i + 1] = null;
680
+ // Replace all fast path
681
+ if (start === 0 && !keyMap.has(nextItems[0])) {
682
+ for (const oldNode of keyMap.values()) {
683
+ shallowTeardown(oldNode);
516
684
  }
517
- }
518
- if (removalQueue.length === prevItems.length) {
519
685
  parent.textContent = "";
520
686
  parent.append(startBookend, ...nextItems.map(render), endBookend);
521
687
  prevItems = nextItems;
522
688
  nextItems = null;
523
- childNodes = null;
524
689
  return;
525
690
  }
526
- for (const e of removalQueue) {
527
- e.remove();
528
- }
529
- if (oldLength - start === removalQueue.length) {
530
- prevItems = nextItems;
531
- nextItems = null;
532
- childNodes = null;
533
- return;
534
- }
535
- let keyMap = new Map();
536
- for (let i = start; i <= oldLength; i++) {
537
- if (
538
- childNodes[i + 1] &&
539
- (!nextItems[i] ||
540
- prevItems[i] !== nextItems[i])
541
- ) {
542
- keyMap.set(prevItems[i], {
543
- el: childNodes[i + 1],
544
- item: prevItems[i],
545
- });
546
- }
547
- }
548
- while (start <= newLength) {
549
- const newChd = nextItems[start];
550
- const oldChd = prevItems[start];
551
- if (newChd === oldChd) {
552
- start++;
553
- continue;
554
- }
555
- if (oldChd === undefined) {
556
- parent.insertBefore(render(newChd), endBookend);
557
- start++;
558
- continue;
559
- }
560
- const mappedOld = keyMap.get(newChd);
561
- if (mappedOld) {
562
- const oldDom = childNodeList[start + 1];
563
- const { el, item } = mappedOld;
564
- if (oldDom !== el) {
565
- const tmp = el.nextSibling;
566
- parent.insertBefore(el, oldDom);
567
- parent.insertBefore(oldDom, tmp);
568
- } else if (item !== newChd) {
569
- replaceWith(newChd, el, render);
691
+
692
+ // Iterate through the NEW list
693
+ for (let i = start; i < newLength; i++) {
694
+ const newItem = nextItems[i];
695
+ const oldNode = keyMap.get(newItem);
696
+
697
+ if (oldNode) {
698
+ // MATCH: We found the item in the old list.
699
+ // Remove it from the map so we know it has been "claimed".
700
+ keyMap.delete(newItem);
701
+
702
+ if (oldNode === cursor) {
703
+ // It's already in the right spot. Just advance the cursor.
704
+ cursor = cursor.nextSibling;
705
+ } else {
706
+ const swapTarget = oldNode.nextSibling;
707
+
708
+ // 2. Move old node to current spot (Standard)
709
+ parent.insertBefore(oldNode, cursor);
710
+
711
+ // 3. Move the cursor node to the empty spot (Swap)
712
+ parent.insertBefore(cursor, swapTarget);
713
+
714
+ // 4. Update the loop cursor
715
+ // Since we swapped, the node sitting at the NEXT index is likely
716
+ // the one that was originally after 'cursor'.
717
+ cursor = oldNode.nextSibling;
570
718
  }
571
- keyMap.delete(newChd);
572
- } else if (oldChd !== newChd) {
573
- parent.insertBefore(render(newChd), childNodeList[start + 1]);
719
+ } else {
720
+ // MISS: This is a brand new item.
721
+ const newNode = render(newItem);
722
+ parent.insertBefore(newNode, cursor);
723
+ // Similarly, do not advance cursor (it gets pushed to the right).
574
724
  }
575
- start++;
576
725
  }
577
- for (const { el } of keyMap.values()) {
578
- shallowTeardown(el);
579
- el.remove();
726
+
727
+ // 4. Cleanup
728
+ // Any nodes remaining in the map were not present in the new list.
729
+ for (const unusedNode of keyMap.values()) {
730
+ shallowTeardown(unusedNode);
731
+ unusedNode.remove();
580
732
  }
581
- keyMap = null;
733
+
582
734
  prevItems = nextItems;
583
735
  nextItems = null;
584
- childNodes = null;
585
736
  });
737
+
586
738
  return outlet;
587
- }
739
+ }
@@ -1 +1 @@
1
- {"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.es2020.full.d.ts","./src/signals.ts","./src/element.ts","./src/index.ts","./src/router.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@types/estree/index.d.ts"],"fileIdsList":[[56,57],[52],[52,53],[53]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"dc532534392e056678750d71483fbdf98e1f46687d3aa818505e3eb743dbbe15","signature":"c084f39693d652cdebc33667d280f50dece748c2ed4b408e06615834e51a5097"},{"version":"82555cf0639af5849abd34cbd61c2076c00c137a8125e44234f6fe4f23f0f466","signature":"f3ddd3670c33381859688f604378a0028cafa5b52cc936da9a225933eb464387"},{"version":"0e3be4d02e120fbbfd12edcc9ad69ff668f5f4303e2b9c80521a8a722428e97d","signature":"12fd8be483df752ac04ae85347f9c397954ac2390e0de50612bf8b9899d7767d"},{"version":"23e3a2d8ef7695586b582f6366a28b1404801ada9a0c82d895f19344f8100ea5","signature":"a32c52a25b47067dac589266e7667623ea1ef2b0c1f9c4fd41adbc7b67a59eee"},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1}],"root":[[52,55]],"options":{"allowJs":true,"checkJs":false,"composite":true,"esModuleInterop":true,"module":99,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"target":7},"referencedMap":[[58,1],[53,2],[54,3],[55,3],[52,4]],"latestChangedDtsFile":"./dist/router.d.ts","version":"5.9.3"}
1
+ {"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.es2020.full.d.ts","./src/signals.ts","./src/element.ts","./src/index.ts","./src/router.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@types/estree/index.d.ts"],"fileIdsList":[[56,57],[52],[52,53],[53]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"dc532534392e056678750d71483fbdf98e1f46687d3aa818505e3eb743dbbe15","signature":"c084f39693d652cdebc33667d280f50dece748c2ed4b408e06615834e51a5097"},{"version":"f247391aa07ef6522cfcb4551bfb98f7e5d86af51860b3258fe61c7216579fe4","signature":"f3ddd3670c33381859688f604378a0028cafa5b52cc936da9a225933eb464387"},{"version":"0e3be4d02e120fbbfd12edcc9ad69ff668f5f4303e2b9c80521a8a722428e97d","signature":"12fd8be483df752ac04ae85347f9c397954ac2390e0de50612bf8b9899d7767d"},{"version":"23e3a2d8ef7695586b582f6366a28b1404801ada9a0c82d895f19344f8100ea5","signature":"a32c52a25b47067dac589266e7667623ea1ef2b0c1f9c4fd41adbc7b67a59eee"},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1}],"root":[[52,55]],"options":{"allowJs":true,"checkJs":false,"composite":true,"esModuleInterop":true,"module":99,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"target":7},"referencedMap":[[58,1],[53,2],[54,3],[55,3],[52,4]],"latestChangedDtsFile":"./dist/router.d.ts","version":"5.9.3"}