@monorepolint/utils 0.6.0-alpha.2 → 0.6.0-alpha.4

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.
Files changed (56) hide show
  1. package/.turbo/turbo-clean.log +1 -1
  2. package/.turbo/turbo-compile-typescript.log +1 -1
  3. package/.turbo/turbo-lint.log +7 -7
  4. package/.turbo/turbo-test.log +11 -10
  5. package/.turbo/turbo-transpile-typescript.log +4 -4
  6. package/CHANGELOG.md +4 -0
  7. package/build/js/index.js +489 -443
  8. package/build/js/index.js.map +1 -1
  9. package/build/tsconfig.tsbuildinfo +1 -1
  10. package/build/types/CachingHost.d.ts.map +1 -1
  11. package/build/types/Host.d.ts.map +1 -1
  12. package/build/types/PackageJson.d.ts.map +1 -1
  13. package/build/types/SimpleHost.d.ts.map +1 -1
  14. package/build/types/Table.d.ts.map +1 -1
  15. package/build/types/findWorkspaceDir.d.ts.map +1 -1
  16. package/build/types/getPackageNameToDir.d.ts.map +1 -1
  17. package/build/types/getWorkspacePackageDirs.d.ts.map +1 -1
  18. package/build/types/index.d.ts +7 -7
  19. package/build/types/index.d.ts.map +1 -1
  20. package/build/types/matchesAnyGlob.d.ts.map +1 -1
  21. package/build/types/mutateJson.d.ts.map +1 -1
  22. package/build/types/nanosecondsToSanity.d.ts.map +1 -1
  23. package/coverage/AggregateTiming.ts.html +2 -2
  24. package/coverage/CachingHost.ts.html +252 -42
  25. package/coverage/Host.ts.html +15 -3
  26. package/coverage/PackageJson.ts.html +4 -4
  27. package/coverage/SimpleHost.ts.html +40 -7
  28. package/coverage/Table.ts.html +137 -29
  29. package/coverage/Timing.ts.html +1 -1
  30. package/coverage/clover.xml +527 -396
  31. package/coverage/coverage-final.json +13 -13
  32. package/coverage/findWorkspaceDir.ts.html +4 -4
  33. package/coverage/getPackageNameToDir.ts.html +18 -6
  34. package/coverage/getWorkspacePackageDirs.ts.html +168 -138
  35. package/coverage/index.html +40 -40
  36. package/coverage/index.ts.html +30 -30
  37. package/coverage/matchesAnyGlob.ts.html +37 -10
  38. package/coverage/mutateJson.ts.html +17 -5
  39. package/coverage/nanosecondsToSanity.ts.html +11 -5
  40. package/package.json +1 -2
  41. package/src/AggregateTiming.ts +1 -1
  42. package/src/CachingHost.ts +104 -34
  43. package/src/Host.ts +5 -1
  44. package/src/PackageJson.ts +3 -3
  45. package/src/SimpleHost.ts +14 -3
  46. package/src/Table.ts +58 -22
  47. package/src/__tests__/CachingHost.spec.ts +203 -166
  48. package/src/findWorkspaceDir.ts +3 -3
  49. package/src/getPackageNameToDir.ts +6 -2
  50. package/src/getWorkspacePackageDirs.ts +19 -9
  51. package/src/index.ts +7 -7
  52. package/src/matchesAnyGlob.ts +12 -3
  53. package/src/mutateJson.ts +5 -1
  54. package/src/nanosecondsToSanity.ts +3 -1
  55. package/vitest.config.mjs +6 -7
  56. package/vitest.config.mjs.timestamp-1736878329730-aa478e2241542.mjs +2 -2
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">84.43% </span>
26
+ <span class="strong">83.42% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>282/334</span>
28
+ <span class='fraction'>317/380</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">84.43% </span>
47
+ <span class="strong">83.42% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>282/334</span>
49
+ <span class='fraction'>317/380</span>
50
50
  </div>
51
51
 
52
52
 
@@ -558,19 +558,91 @@
558
558
  <a name='L493'></a><a href='#L493'>493</a>
559
559
  <a name='L494'></a><a href='#L494'>494</a>
560
560
  <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
562
- <span class="cline-any cline-neutral">&nbsp;</span>
563
- <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
627
+ <a name='L562'></a><a href='#L562'>562</a>
628
+ <a name='L563'></a><a href='#L563'>563</a>
629
+ <a name='L564'></a><a href='#L564'>564</a>
630
+ <a name='L565'></a><a href='#L565'>565</a>
631
+ <a name='L566'></a><a href='#L566'>566</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
564
632
  <span class="cline-any cline-neutral">&nbsp;</span>
565
633
  <span class="cline-any cline-neutral">&nbsp;</span>
566
634
  <span class="cline-any cline-neutral">&nbsp;</span>
567
635
  <span class="cline-any cline-neutral">&nbsp;</span>
568
636
  <span class="cline-any cline-neutral">&nbsp;</span>
569
637
  <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-yes">1x</span>
639
+ <span class="cline-any cline-yes">1x</span>
570
640
  <span class="cline-any cline-neutral">&nbsp;</span>
571
641
  <span class="cline-any cline-neutral">&nbsp;</span>
572
642
  <span class="cline-any cline-yes">295x</span>
573
643
  <span class="cline-any cline-yes">295x</span>
644
+ <span class="cline-any cline-yes">295x</span>
645
+ <span class="cline-any cline-yes">295x</span>
574
646
  <span class="cline-any cline-no">&nbsp;</span>
575
647
  <span class="cline-any cline-no">&nbsp;</span>
576
648
  <span class="cline-any cline-yes">295x</span>
@@ -586,6 +658,9 @@
586
658
  <span class="cline-any cline-neutral">&nbsp;</span>
587
659
  <span class="cline-any cline-yes">147x</span>
588
660
  <span class="cline-any cline-yes">147x</span>
661
+ <span class="cline-any cline-yes">147x</span>
662
+ <span class="cline-any cline-yes">147x</span>
663
+ <span class="cline-any cline-yes">147x</span>
589
664
  <span class="cline-any cline-yes">1x</span>
590
665
  <span class="cline-any cline-yes">1x</span>
591
666
  <span class="cline-any cline-yes">147x</span>
@@ -652,6 +727,13 @@
652
727
  <span class="cline-any cline-neutral">&nbsp;</span>
653
728
  <span class="cline-any cline-neutral">&nbsp;</span>
654
729
  <span class="cline-any cline-neutral">&nbsp;</span>
730
+ <span class="cline-any cline-neutral">&nbsp;</span>
731
+ <span class="cline-any cline-neutral">&nbsp;</span>
732
+ <span class="cline-any cline-neutral">&nbsp;</span>
733
+ <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-neutral">&nbsp;</span>
735
+ <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
737
  <span class="cline-any cline-yes">1x</span>
656
738
  <span class="cline-any cline-neutral">&nbsp;</span>
657
739
  <span class="cline-any cline-yes">11x</span>
@@ -687,6 +769,9 @@
687
769
  <span class="cline-any cline-neutral">&nbsp;</span>
688
770
  <span class="cline-any cline-neutral">&nbsp;</span>
689
771
  <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
775
  <span class="cline-any cline-yes">11x</span>
691
776
  <span class="cline-any cline-yes">9x</span>
692
777
  <span class="cline-any cline-yes">9x</span>
@@ -698,6 +783,9 @@
698
783
  <span class="cline-any cline-yes">9x</span>
699
784
  <span class="cline-any cline-yes">9x</span>
700
785
  <span class="cline-any cline-yes">9x</span>
786
+ <span class="cline-any cline-yes">9x</span>
787
+ <span class="cline-any cline-yes">9x</span>
788
+ <span class="cline-any cline-yes">9x</span>
701
789
  <span class="cline-any cline-neutral">&nbsp;</span>
702
790
  <span class="cline-any cline-yes">11x</span>
703
791
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -717,15 +805,22 @@
717
805
  <span class="cline-any cline-neutral">&nbsp;</span>
718
806
  <span class="cline-any cline-neutral">&nbsp;</span>
719
807
  <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-neutral">&nbsp;</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span>
720
811
  <span class="cline-any cline-yes">11x</span>
721
812
  <span class="cline-any cline-yes">53x</span>
722
813
  <span class="cline-any cline-yes">53x</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-neutral">&nbsp;</span>
723
816
  <span class="cline-any cline-yes">53x</span>
724
817
  <span class="cline-any cline-yes">53x</span>
725
818
  <span class="cline-any cline-neutral">&nbsp;</span>
726
819
  <span class="cline-any cline-yes">53x</span>
727
820
  <span class="cline-any cline-no">&nbsp;</span>
728
821
  <span class="cline-any cline-no">&nbsp;</span>
822
+ <span class="cline-any cline-no">&nbsp;</span>
823
+ <span class="cline-any cline-no">&nbsp;</span>
729
824
  <span class="cline-any cline-yes">53x</span>
730
825
  <span class="cline-any cline-neutral">&nbsp;</span>
731
826
  <span class="cline-any cline-yes">53x</span>
@@ -758,6 +853,8 @@
758
853
  <span class="cline-any cline-yes">7x</span>
759
854
  <span class="cline-any cline-no">&nbsp;</span>
760
855
  <span class="cline-any cline-no">&nbsp;</span>
856
+ <span class="cline-any cline-no">&nbsp;</span>
857
+ <span class="cline-any cline-no">&nbsp;</span>
761
858
  <span class="cline-any cline-neutral">&nbsp;</span>
762
859
  <span class="cline-any cline-yes">53x</span>
763
860
  <span class="cline-any cline-yes">11x</span>
@@ -767,6 +864,8 @@
767
864
  <span class="cline-any cline-yes">33x</span>
768
865
  <span class="cline-any cline-no">&nbsp;</span>
769
866
  <span class="cline-any cline-no">&nbsp;</span>
867
+ <span class="cline-any cline-no">&nbsp;</span>
868
+ <span class="cline-any cline-no">&nbsp;</span>
770
869
  <span class="cline-any cline-yes">33x</span>
771
870
  <span class="cline-any cline-yes">53x</span>
772
871
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -787,6 +886,7 @@
787
886
  <span class="cline-any cline-neutral">&nbsp;</span>
788
887
  <span class="cline-any cline-yes">45x</span>
789
888
  <span class="cline-any cline-yes">45x</span>
889
+ <span class="cline-any cline-yes">11x</span>
790
890
  <span class="cline-any cline-yes">45x</span>
791
891
  <span class="cline-any cline-yes">45x</span>
792
892
  <span class="cline-any cline-yes">138x</span>
@@ -798,9 +898,12 @@
798
898
  <span class="cline-any cline-no">&nbsp;</span>
799
899
  <span class="cline-any cline-no">&nbsp;</span>
800
900
  <span class="cline-any cline-no">&nbsp;</span>
901
+ <span class="cline-any cline-no">&nbsp;</span>
902
+ <span class="cline-any cline-no">&nbsp;</span>
801
903
  <span class="cline-any cline-yes">138x</span>
802
904
  <span class="cline-any cline-yes">138x</span>
803
905
  <span class="cline-any cline-yes">138x</span>
906
+ <span class="cline-any cline-yes">42x</span>
804
907
  <span class="cline-any cline-yes">138x</span>
805
908
  <span class="cline-any cline-yes">138x</span>
806
909
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -815,6 +918,8 @@
815
918
  <span class="cline-any cline-yes">40x</span>
816
919
  <span class="cline-any cline-yes">40x</span>
817
920
  <span class="cline-any cline-yes">40x</span>
921
+ <span class="cline-any cline-yes">40x</span>
922
+ <span class="cline-any cline-yes">40x</span>
818
923
  <span class="cline-any cline-yes">36x</span>
819
924
  <span class="cline-any cline-yes">36x</span>
820
925
  <span class="cline-any cline-yes">4x</span>
@@ -823,6 +928,9 @@
823
928
  <span class="cline-any cline-yes">11x</span>
824
929
  <span class="cline-any cline-yes">33x</span>
825
930
  <span class="cline-any cline-yes">33x</span>
931
+ <span class="cline-any cline-yes">33x</span>
932
+ <span class="cline-any cline-yes">33x</span>
933
+ <span class="cline-any cline-yes">33x</span>
826
934
  <span class="cline-any cline-neutral">&nbsp;</span>
827
935
  <span class="cline-any cline-yes">33x</span>
828
936
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -833,6 +941,11 @@
833
941
  <span class="cline-any cline-yes">5x</span>
834
942
  <span class="cline-any cline-yes">5x</span>
835
943
  <span class="cline-any cline-yes">5x</span>
944
+ <span class="cline-any cline-yes">5x</span>
945
+ <span class="cline-any cline-yes">5x</span>
946
+ <span class="cline-any cline-yes">5x</span>
947
+ <span class="cline-any cline-yes">5x</span>
948
+ <span class="cline-any cline-yes">5x</span>
836
949
  <span class="cline-any cline-no">&nbsp;</span>
837
950
  <span class="cline-any cline-no">&nbsp;</span>
838
951
  <span class="cline-any cline-no">&nbsp;</span>
@@ -860,6 +973,8 @@
860
973
  <span class="cline-any cline-yes">3x</span>
861
974
  <span class="cline-any cline-yes">3x</span>
862
975
  <span class="cline-any cline-yes">3x</span>
976
+ <span class="cline-any cline-yes">3x</span>
977
+ <span class="cline-any cline-yes">3x</span>
863
978
  <span class="cline-any cline-neutral">&nbsp;</span>
864
979
  <span class="cline-any cline-yes">5x</span>
865
980
  <span class="cline-any cline-yes">3x</span>
@@ -898,6 +1013,9 @@
898
1013
  <span class="cline-any cline-yes">11x</span>
899
1014
  <span class="cline-any cline-yes">13x</span>
900
1015
  <span class="cline-any cline-yes">13x</span>
1016
+ <span class="cline-any cline-neutral">&nbsp;</span>
1017
+ <span class="cline-any cline-neutral">&nbsp;</span>
1018
+ <span class="cline-any cline-neutral">&nbsp;</span>
901
1019
  <span class="cline-any cline-yes">13x</span>
902
1020
  <span class="cline-any cline-yes">13x</span>
903
1021
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -927,8 +1045,22 @@
927
1045
  <span class="cline-any cline-neutral">&nbsp;</span>
928
1046
  <span class="cline-any cline-neutral">&nbsp;</span>
929
1047
  <span class="cline-any cline-neutral">&nbsp;</span>
1048
+ <span class="cline-any cline-neutral">&nbsp;</span>
1049
+ <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-neutral">&nbsp;</span>
1051
+ <span class="cline-any cline-neutral">&nbsp;</span>
1052
+ <span class="cline-any cline-neutral">&nbsp;</span>
1053
+ <span class="cline-any cline-neutral">&nbsp;</span>
1054
+ <span class="cline-any cline-neutral">&nbsp;</span>
1055
+ <span class="cline-any cline-neutral">&nbsp;</span>
930
1056
  <span class="cline-any cline-yes">11x</span>
931
1057
  <span class="cline-any cline-yes">7x</span>
1058
+ <span class="cline-any cline-yes">7x</span>
1059
+ <span class="cline-any cline-yes">7x</span>
1060
+ <span class="cline-any cline-yes">7x</span>
1061
+ <span class="cline-any cline-yes">7x</span>
1062
+ <span class="cline-any cline-yes">7x</span>
1063
+ <span class="cline-any cline-no">&nbsp;</span>
932
1064
  <span class="cline-any cline-neutral">&nbsp;</span>
933
1065
  <span class="cline-any cline-yes">7x</span>
934
1066
  <span class="cline-any cline-yes">7x</span>
@@ -948,6 +1080,8 @@
948
1080
  <span class="cline-any cline-yes">2x</span>
949
1081
  <span class="cline-any cline-yes">2x</span>
950
1082
  <span class="cline-any cline-yes">2x</span>
1083
+ <span class="cline-any cline-yes">2x</span>
1084
+ <span class="cline-any cline-yes">2x</span>
951
1085
  <span class="cline-any cline-neutral">&nbsp;</span>
952
1086
  <span class="cline-any cline-yes">2x</span>
953
1087
  <span class="cline-any cline-yes">2x</span>
@@ -981,6 +1115,8 @@
981
1115
  <span class="cline-any cline-yes">1x</span>
982
1116
  <span class="cline-any cline-neutral">&nbsp;</span>
983
1117
  <span class="cline-any cline-yes">11x</span>
1118
+ <span class="cline-any cline-yes">5x</span>
1119
+ <span class="cline-any cline-yes">5x</span>
984
1120
  <span class="cline-any cline-neutral">&nbsp;</span>
985
1121
  <span class="cline-any cline-yes">5x</span>
986
1122
  <span class="cline-any cline-yes">1x</span>
@@ -1015,6 +1151,8 @@
1015
1151
  <span class="cline-any cline-neutral">&nbsp;</span>
1016
1152
  <span class="cline-any cline-yes">11x</span>
1017
1153
  <span class="cline-any cline-yes">26x</span>
1154
+ <span class="cline-any cline-yes">26x</span>
1155
+ <span class="cline-any cline-yes">26x</span>
1018
1156
  <span class="cline-any cline-yes">4x</span>
1019
1157
  <span class="cline-any cline-yes">4x</span>
1020
1158
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1028,6 +1166,8 @@
1028
1166
  <span class="cline-any cline-yes">27x</span>
1029
1167
  <span class="cline-any cline-no">&nbsp;</span>
1030
1168
  <span class="cline-any cline-no">&nbsp;</span>
1169
+ <span class="cline-any cline-no">&nbsp;</span>
1170
+ <span class="cline-any cline-no">&nbsp;</span>
1031
1171
  <span class="cline-any cline-yes">27x</span>
1032
1172
  <span class="cline-any cline-yes">19x</span>
1033
1173
  <span class="cline-any cline-yes">27x</span>
@@ -1061,10 +1201,12 @@
1061
1201
  */
1062
1202
  &nbsp;
1063
1203
  import * as realFs from "node:fs";
1064
- import { Host } from "./Host.js";
1065
1204
  import * as path from "node:path";
1205
+ import { Host } from "./Host.js";
1066
1206
  &nbsp;
1067
- function assertNoTombstone(node: Node): asserts node is Node &amp; { tombstone?: false } {
1207
+ function assertNoTombstone(
1208
+ node: Node,
1209
+ ): asserts node is Node &amp; { tombstone?: false } {
1068
1210
  if (node.tombstone) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1069
1211
  <span class="cstat-no" title="statement not covered" > throw new Error(`Unexpected tombstone ${JSON.stringify(node)}`);</span>
1070
1212
  <span class="cstat-no" title="statement not covered" > }</span>
@@ -1072,14 +1214,17 @@ function assertNoTombstone(node: Node): asserts node is Node &amp; { tombstone?:
1072
1214
  &nbsp;
1073
1215
  function assertNotType&lt;N extends Node, T extends Node["type"]&gt;(
1074
1216
  node: N,
1075
- type: T
1217
+ type: T,
1076
1218
  ): asserts node is N &amp; { type: Exclude&lt;N["type"], T&gt; } {
1077
1219
  if (node.type === type) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1078
1220
  <span class="cstat-no" title="statement not covered" > throw new Error(`Unexpected node type ${JSON.stringify(node)}`);</span>
1079
1221
  <span class="cstat-no" title="statement not covered" > }</span>
1080
1222
  }
1081
1223
  &nbsp;
1082
- function assertType&lt;N extends Node, T extends Node["type"]&gt;(node: N, type: T): asserts node is N &amp; { type: T } {
1224
+ function assertType&lt;N extends Node, T extends Node["type"]&gt;(
1225
+ node: N,
1226
+ type: T,
1227
+ ): asserts node is N &amp; { type: T } {
1083
1228
  if (node.type !== type) {
1084
1229
  throw new Error(`Unexpected node type ${JSON.stringify(node)}`);
1085
1230
  }
@@ -1145,7 +1290,14 @@ interface SymlinkNode extends BaseNode&lt;"symlink"&gt; {
1145
1290
  symlink: string;
1146
1291
  }
1147
1292
  &nbsp;
1148
- type Node = DirNode | FileNode | SymlinkNode | DirTombstoneNode | FileTombstoneNode | DirStubNode | FileStubNode;
1293
+ type Node =
1294
+ | DirNode
1295
+ | FileNode
1296
+ | SymlinkNode
1297
+ | DirTombstoneNode
1298
+ | FileTombstoneNode
1299
+ | DirStubNode
1300
+ | FileStubNode;
1149
1301
  &nbsp;
1150
1302
  export class CachingHost implements Host {
1151
1303
  // We need many trees because of windows, key is the `root`
@@ -1166,23 +1318,29 @@ export class CachingHost implements Host {
1166
1318
  | "statSync"
1167
1319
  | "unlinkSync"
1168
1320
  | "writeFileSync"
1169
- &gt; = realFs
1321
+ &gt; = realFs,
1170
1322
  ) {}
1171
1323
  &nbsp;
1172
1324
  #replaceNode(
1173
1325
  node: FileNode | FileStubNode | SymlinkNode,
1174
- newNode: Omit&lt;FileTombstoneNode, "fullPath" | "parent"&gt;
1326
+ newNode: Omit&lt;FileTombstoneNode, "fullPath" | "parent"&gt;,
1175
1327
  ): FileTombstoneNode;
1176
1328
  #replaceNode(
1177
1329
  node: FileNode | FileStubNode | FileTombstoneNode,
1178
- newNode: Omit&lt;FileNode, "fullPath" | "parent"&gt;
1330
+ newNode: Omit&lt;FileNode, "fullPath" | "parent"&gt;,
1179
1331
  ): FileNode;
1180
1332
  #replaceNode(
1181
1333
  node: DirTombstoneNode | DirStubNode,
1182
- newNode: Omit&lt;DirNode, "fullPath" | "parent" | "dir"&gt;
1334
+ newNode: Omit&lt;DirNode, "fullPath" | "parent" | "dir"&gt;,
1183
1335
  ): DirStubNode;
1184
- #replaceNode(node: DirNode, newNode: Omit&lt;DirTombstoneNode, "fullPath" | "parent" | "dir"&gt;): DirTombstoneNode;
1185
- #replaceNode(node: Node, partialNewNode: Omit&lt;Node, "fullPath" | "parent"&gt;): Node {
1336
+ #replaceNode(
1337
+ node: DirNode,
1338
+ newNode: Omit&lt;DirTombstoneNode, "fullPath" | "parent" | "dir"&gt;,
1339
+ ): DirTombstoneNode;
1340
+ #replaceNode(
1341
+ node: Node,
1342
+ partialNewNode: Omit&lt;Node, "fullPath" | "parent"&gt;,
1343
+ ): Node {
1186
1344
  if (!node.parent) <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error("Cannot replace root node");</span>
1187
1345
  const newNode: Node = {
1188
1346
  ...partialNewNode,
@@ -1211,15 +1369,22 @@ export class CachingHost implements Host {
1211
1369
  * Throws if the path doesnt exist!
1212
1370
  */
1213
1371
  #stubify(filePath: string, parent: undefined): DirStubNode;
1214
- #stubify(filePath: string, parent: DirNode | DirStubNode | undefined): DirStubNode | SymlinkNode | FileStubNode;
1215
1372
  #stubify(
1216
1373
  filePath: string,
1217
- parent: DirNode | DirStubNode | undefined
1218
- ): typeof parent extends undefined ? DirNode | DirStubNode : DirNode | DirStubNode | SymlinkNode | FileStubNode {
1374
+ parent: DirNode | DirStubNode | undefined,
1375
+ ): DirStubNode | SymlinkNode | FileStubNode;
1376
+ #stubify(
1377
+ filePath: string,
1378
+ parent: DirNode | DirStubNode | undefined,
1379
+ ): typeof parent extends undefined ? DirNode | DirStubNode
1380
+ : DirNode | DirStubNode | SymlinkNode | FileStubNode
1381
+ {
1219
1382
  const canonicalPath = path.resolve(filePath);
1220
1383
  &nbsp;
1221
1384
  if (!parent &amp;&amp; canonicalPath !== path.parse(canonicalPath).root) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1222
- <span class="cstat-no" title="statement not covered" > throw new Error(`parent can only be null if path is root. Instead got: ${canonicalPath}`);</span>
1385
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1386
+ <span class="cstat-no" title="statement not covered" > `parent can only be null if path is root. Instead got: ${canonicalPath}`,</span>
1387
+ <span class="cstat-no" title="statement not covered" > );</span>
1223
1388
  <span class="cstat-no" title="statement not covered" > }</span>
1224
1389
  const stat = this.fs.lstatSync(canonicalPath); // may throw
1225
1390
  &nbsp;
@@ -1251,7 +1416,9 @@ export class CachingHost implements Host {
1251
1416
  needsFlush: false,
1252
1417
  };
1253
1418
  <span class="branch-0 cbranch-no" title="branch not covered" > } else {</span>
1254
- <span class="cstat-no" title="statement not covered" > throw new Error(`what is not a file nor symlink nor directory? nothing we care about: ${canonicalPath}`);</span>
1419
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1420
+ <span class="cstat-no" title="statement not covered" > `what is not a file nor symlink nor directory? nothing we care about: ${canonicalPath}`,</span>
1421
+ <span class="cstat-no" title="statement not covered" > );</span>
1255
1422
  <span class="cstat-no" title="statement not covered" > }</span>
1256
1423
  &nbsp;
1257
1424
  if (!parent &amp;&amp; node.type === "dir") {
@@ -1260,7 +1427,9 @@ export class CachingHost implements Host {
1260
1427
  } else if (parent) {
1261
1428
  parent.dir.set(path.basename(canonicalPath), node);
1262
1429
  <span class="branch-0 cbranch-no" title="branch not covered" > } else {</span>
1263
- <span class="cstat-no" title="statement not covered" > throw new Error(`root can only be a dir, got ${JSON.stringify(node)} for path: ${canonicalPath}`);</span>
1430
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1431
+ <span class="cstat-no" title="statement not covered" > `root can only be a dir, got ${JSON.stringify(node)} for path: ${canonicalPath}`,</span>
1432
+ <span class="cstat-no" title="statement not covered" > );</span>
1264
1433
  <span class="cstat-no" title="statement not covered" > }</span>
1265
1434
  return node;
1266
1435
  }
@@ -1281,13 +1450,16 @@ export class CachingHost implements Host {
1281
1450
  }
1282
1451
  &nbsp;
1283
1452
  let curPath = root;
1284
- let curNode: Node = this.#trees.get(root) ?? this.#stubify(curPath, undefined); // its okay to throw if there is no root
1453
+ let curNode: Node = this.#trees.get(root)
1454
+ ?? this.#stubify(curPath, undefined); // its okay to throw if there is no root
1285
1455
  try {
1286
1456
  for (const part of parts) {
1287
1457
  assertNoTombstone(curNode);
1288
1458
  assertNotType(curNode, "file");
1289
1459
  if (curNode.type === "symlink") <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1290
- <span class="cstat-no" title="statement not covered" > const linkedNode = this.#getNodeResolvingSymlinks(path.resolve(path.dirname(curPath), curNode.symlink));</span>
1460
+ <span class="cstat-no" title="statement not covered" > const linkedNode = this.#getNodeResolvingSymlinks(</span>
1461
+ <span class="cstat-no" title="statement not covered" > path.resolve(path.dirname(curPath), curNode.symlink),</span>
1462
+ <span class="cstat-no" title="statement not covered" > );</span>
1291
1463
  <span class="cstat-no" title="statement not covered" > assertExists(linkedNode);</span>
1292
1464
  <span class="cstat-no" title="statement not covered" > assertNoTombstone(linkedNode);</span>
1293
1465
  <span class="cstat-no" title="statement not covered" > assertType(linkedNode, "dir");</span>
@@ -1295,7 +1467,8 @@ export class CachingHost implements Host {
1295
1467
  <span class="cstat-no" title="statement not covered" > }</span>
1296
1468
  assertType(curNode, "dir");
1297
1469
  assertNoTombstone(curNode);
1298
- curNode = curNode.dir.get(part) ?? this.#stubify(path.join(curNode.fullPath, part), curNode);
1470
+ curNode = curNode.dir.get(part)
1471
+ ?? this.#stubify(path.join(curNode.fullPath, part), curNode);
1299
1472
  curPath = path.join(curPath, part);
1300
1473
  }
1301
1474
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -1308,14 +1481,19 @@ export class CachingHost implements Host {
1308
1481
  &nbsp;
1309
1482
  #getNode(filePath: string) {
1310
1483
  const canonicalPath = path.resolve(filePath);
1311
- const { pathWithSymlinks, node } = this.#getNearestAncestorNode(canonicalPath);
1484
+ const { pathWithSymlinks, node } = this.#getNearestAncestorNode(
1485
+ canonicalPath,
1486
+ );
1312
1487
  if (pathWithSymlinks === canonicalPath) {
1313
1488
  return node;
1314
1489
  }
1315
1490
  return undefined;
1316
1491
  }
1317
1492
  &nbsp;
1318
- #getNodeResolvingSymlinks(filePath: string, follows: number = 100): Exclude&lt;Node, SymlinkNode&gt; | undefined {
1493
+ #getNodeResolvingSymlinks(
1494
+ filePath: string,
1495
+ follows: number = 100,
1496
+ ): Exclude&lt;Node, SymlinkNode&gt; | undefined {
1319
1497
  const node = this.#getNode(filePath); // canonicalizes for us
1320
1498
  if (!node || node.type !== "symlink") return node;
1321
1499
  // this is a really poor mans way of doing this. but who has 100's of symlinks hanging around?
@@ -1324,9 +1502,14 @@ export class CachingHost implements Host {
1324
1502
  return this.#getNodeResolvingSymlinks(node.symlink, follows--);
1325
1503
  }
1326
1504
  &nbsp;
1327
- mkdir(filePath: string, opts: { recursive: boolean } = { recursive: false }): void {
1505
+ mkdir(
1506
+ filePath: string,
1507
+ opts: { recursive: boolean } = { recursive: false },
1508
+ ): void {
1328
1509
  const canonicalPath = path.resolve(filePath);
1329
- const { node, pathWithSymlinks } = this.#getNearestAncestorNode(canonicalPath);
1510
+ const { node, pathWithSymlinks } = this.#getNearestAncestorNode(
1511
+ canonicalPath,
1512
+ );
1330
1513
  if (filePath === pathWithSymlinks) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1331
1514
  <span class="cstat-no" title="statement not covered" > assertType(node, "dir");</span>
1332
1515
  <span class="cstat-no" title="statement not covered" > assertHasParent(node);</span>
@@ -1352,7 +1535,9 @@ export class CachingHost implements Host {
1352
1535
  let maybePath = canonicalPath;
1353
1536
  const toMake: string[] = [];
1354
1537
  while (maybePath !== rootPath) {
1355
- toMake.unshift(path.resolve(node.fullPath, path.relative(rootPath, maybePath)));
1538
+ toMake.unshift(
1539
+ path.resolve(node.fullPath, path.relative(rootPath, maybePath)),
1540
+ );
1356
1541
  maybePath = path.dirname(maybePath);
1357
1542
  }
1358
1543
  &nbsp;
@@ -1392,7 +1577,10 @@ export class CachingHost implements Host {
1392
1577
  readFile(filePath: string, opts: { asJson: true }): object;
1393
1578
  readFile(
1394
1579
  filePath: string,
1395
- opts: undefined | { encoding: BufferEncoding; asJson?: false } | { encoding?: never; asJson: true }
1580
+ opts: undefined | { encoding: BufferEncoding; asJson?: false } | {
1581
+ encoding?: never;
1582
+ asJson: true;
1583
+ },
1396
1584
  ) {
1397
1585
  let node = this.#getNodeResolvingSymlinks(filePath); // canonicalizes for us
1398
1586
  &nbsp;
@@ -1420,10 +1608,24 @@ export class CachingHost implements Host {
1420
1608
  }
1421
1609
  &nbsp;
1422
1610
  writeFile(filePath: string, buffer: Buffer): void;
1423
- writeFile(filePath: string, body: string, opts: { encoding: BufferEncoding }): void;
1424
- writeFile(filePath: string, body: string, opts: { encoding: BufferEncoding }): void;
1425
- writeFile(filePath: string, body: string | Buffer, opts?: { encoding: BufferEncoding }) {
1426
- const fileContentsAsBuffer = typeof body === "string" ? Buffer.from(body, opts?.encoding<span class="branch-0 cbranch-no" title="branch not covered" >) : Buffer.from(body);</span>
1611
+ writeFile(
1612
+ filePath: string,
1613
+ body: string,
1614
+ opts: { encoding: BufferEncoding },
1615
+ ): void;
1616
+ writeFile(
1617
+ filePath: string,
1618
+ body: string,
1619
+ opts: { encoding: BufferEncoding },
1620
+ ): void;
1621
+ writeFile(
1622
+ filePath: string,
1623
+ body: string | Buffer,
1624
+ opts?: { encoding: BufferEncoding },
1625
+ ) {
1626
+ const fileContentsAsBuffer = typeof body === "string"
1627
+ ? Buffer.from(body, opts?.encoding<span class="branch-0 cbranch-no" title="branch not covered" >)</span>
1628
+ <span class="cstat-no" title="statement not covered" > : Buffer.from(body);</span>
1427
1629
  &nbsp;
1428
1630
  const canonicalPath = path.resolve(filePath);
1429
1631
  const existingNode = this.#getNodeResolvingSymlinks(canonicalPath);
@@ -1439,7 +1641,9 @@ export class CachingHost implements Host {
1439
1641
  return;
1440
1642
  }
1441
1643
  &nbsp;
1442
- const maybeDirNode = this.#getNodeResolvingSymlinks(path.dirname(canonicalPath));
1644
+ const maybeDirNode = this.#getNodeResolvingSymlinks(
1645
+ path.dirname(canonicalPath),
1646
+ );
1443
1647
  assertExists(maybeDirNode);
1444
1648
  assertType(maybeDirNode, "dir");
1445
1649
  assertNoTombstone(maybeDirNode);
@@ -1475,7 +1679,9 @@ export class CachingHost implements Host {
1475
1679
  });
1476
1680
  }
1477
1681
  &nbsp;
1478
- async #flushFileNode(node: FileNode | FileStubNode | FileTombstoneNode): Promise&lt;unknown&gt; {
1682
+ async #flushFileNode(
1683
+ node: FileNode | FileStubNode | FileTombstoneNode,
1684
+ ): Promise&lt;unknown&gt; {
1479
1685
  // FIXME all tombstones need a flush, so we can get rid of needsFlush for them
1480
1686
  if (node.tombstone) {
1481
1687
  try {
@@ -1508,7 +1714,9 @@ export class CachingHost implements Host {
1508
1714
  <span class="cstat-no" title="statement not covered" > return this.fs.promises.symlink(node.symlink, node.fullPath);</span>
1509
1715
  }
1510
1716
  &nbsp;
1511
- async #flushDirNode(node: DirNode | DirStubNode | DirTombstoneNode): Promise&lt;unknown&gt; {
1717
+ async #flushDirNode(
1718
+ node: DirNode | DirStubNode | DirTombstoneNode,
1719
+ ): Promise&lt;unknown&gt; {
1512
1720
  if (!node.tombstone &amp;&amp; node.needsFlush) {
1513
1721
  try {
1514
1722
  await this.fs.promises.access(node.fullPath<span class="branch-0 cbranch-no" title="branch not covered" >); // throws if the file doesnt exist</span>
@@ -1521,7 +1729,9 @@ export class CachingHost implements Host {
1521
1729
  const promises: Promise&lt;unknown&gt;[] = [];
1522
1730
  for (const child of node.dir.values()) {
1523
1731
  if (node.<span class="branch-0 cbranch-no" title="branch not covered" >tombstone &amp;&amp; !child.tombstone) <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
1524
- <span class="cstat-no" title="statement not covered" > throw new Error("Unexpected failure during sanity check. A non-deleted child is on a deleted dir");</span>
1732
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1733
+ <span class="cstat-no" title="statement not covered" > "Unexpected failure during sanity check. A non-deleted child is on a deleted dir",</span>
1734
+ <span class="cstat-no" title="statement not covered" > );</span>
1525
1735
  <span class="cstat-no" title="statement not covered" > }</span>
1526
1736
  if (child.type === "dir") {
1527
1737
  promises.push(this.#flushDirNode(child));
@@ -1555,7 +1765,7 @@ export class CachingHost implements Host {
1555
1765
  <div class='footer quiet pad2 space-top1 center small'>
1556
1766
  Code coverage generated by
1557
1767
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1558
- at 2025-01-17T16:18:31.005Z
1768
+ at 2025-01-31T20:59:52.637Z
1559
1769
  </div>
1560
1770
  <script src="prettify.js"></script>
1561
1771
  <script>