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

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 +14 -10
  5. package/.turbo/turbo-transpile-typescript.log +3 -3
  6. package/CHANGELOG.md +2 -0
  7. package/build/js/index.js +493 -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 +258 -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 +148 -31
  29. package/coverage/Timing.ts.html +1 -1
  30. package/coverage/clover.xml +533 -389
  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 +174 -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 +106 -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 +62 -23
  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 +22 -10
  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 +10 -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">82.98% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>282/334</span>
28
+ <span class='fraction'>317/382</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">82.98% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>282/334</span>
49
+ <span class='fraction'>317/382</span>
50
50
  </div>
51
51
 
52
52
 
@@ -558,19 +558,93 @@
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>
632
+ <a name='L567'></a><a href='#L567'>567</a>
633
+ <a name='L568'></a><a href='#L568'>568</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
564
634
  <span class="cline-any cline-neutral">&nbsp;</span>
565
635
  <span class="cline-any cline-neutral">&nbsp;</span>
566
636
  <span class="cline-any cline-neutral">&nbsp;</span>
567
637
  <span class="cline-any cline-neutral">&nbsp;</span>
568
638
  <span class="cline-any cline-neutral">&nbsp;</span>
569
639
  <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-yes">1x</span>
641
+ <span class="cline-any cline-yes">1x</span>
570
642
  <span class="cline-any cline-neutral">&nbsp;</span>
571
643
  <span class="cline-any cline-neutral">&nbsp;</span>
572
644
  <span class="cline-any cline-yes">295x</span>
573
645
  <span class="cline-any cline-yes">295x</span>
646
+ <span class="cline-any cline-yes">295x</span>
647
+ <span class="cline-any cline-yes">295x</span>
574
648
  <span class="cline-any cline-no">&nbsp;</span>
575
649
  <span class="cline-any cline-no">&nbsp;</span>
576
650
  <span class="cline-any cline-yes">295x</span>
@@ -586,6 +660,9 @@
586
660
  <span class="cline-any cline-neutral">&nbsp;</span>
587
661
  <span class="cline-any cline-yes">147x</span>
588
662
  <span class="cline-any cline-yes">147x</span>
663
+ <span class="cline-any cline-yes">147x</span>
664
+ <span class="cline-any cline-yes">147x</span>
665
+ <span class="cline-any cline-yes">147x</span>
589
666
  <span class="cline-any cline-yes">1x</span>
590
667
  <span class="cline-any cline-yes">1x</span>
591
668
  <span class="cline-any cline-yes">147x</span>
@@ -652,6 +729,13 @@
652
729
  <span class="cline-any cline-neutral">&nbsp;</span>
653
730
  <span class="cline-any cline-neutral">&nbsp;</span>
654
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>
737
+ <span class="cline-any cline-neutral">&nbsp;</span>
738
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
739
  <span class="cline-any cline-yes">1x</span>
656
740
  <span class="cline-any cline-neutral">&nbsp;</span>
657
741
  <span class="cline-any cline-yes">11x</span>
@@ -687,6 +771,9 @@
687
771
  <span class="cline-any cline-neutral">&nbsp;</span>
688
772
  <span class="cline-any cline-neutral">&nbsp;</span>
689
773
  <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
777
  <span class="cline-any cline-yes">11x</span>
691
778
  <span class="cline-any cline-yes">9x</span>
692
779
  <span class="cline-any cline-yes">9x</span>
@@ -698,6 +785,9 @@
698
785
  <span class="cline-any cline-yes">9x</span>
699
786
  <span class="cline-any cline-yes">9x</span>
700
787
  <span class="cline-any cline-yes">9x</span>
788
+ <span class="cline-any cline-yes">9x</span>
789
+ <span class="cline-any cline-yes">9x</span>
790
+ <span class="cline-any cline-yes">9x</span>
701
791
  <span class="cline-any cline-neutral">&nbsp;</span>
702
792
  <span class="cline-any cline-yes">11x</span>
703
793
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -717,15 +807,22 @@
717
807
  <span class="cline-any cline-neutral">&nbsp;</span>
718
808
  <span class="cline-any cline-neutral">&nbsp;</span>
719
809
  <span class="cline-any cline-neutral">&nbsp;</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span>
811
+ <span class="cline-any cline-neutral">&nbsp;</span>
812
+ <span class="cline-any cline-neutral">&nbsp;</span>
720
813
  <span class="cline-any cline-yes">11x</span>
721
814
  <span class="cline-any cline-yes">53x</span>
722
815
  <span class="cline-any cline-yes">53x</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span>
817
+ <span class="cline-any cline-neutral">&nbsp;</span>
723
818
  <span class="cline-any cline-yes">53x</span>
724
819
  <span class="cline-any cline-yes">53x</span>
725
820
  <span class="cline-any cline-neutral">&nbsp;</span>
726
821
  <span class="cline-any cline-yes">53x</span>
727
822
  <span class="cline-any cline-no">&nbsp;</span>
728
823
  <span class="cline-any cline-no">&nbsp;</span>
824
+ <span class="cline-any cline-no">&nbsp;</span>
825
+ <span class="cline-any cline-no">&nbsp;</span>
729
826
  <span class="cline-any cline-yes">53x</span>
730
827
  <span class="cline-any cline-neutral">&nbsp;</span>
731
828
  <span class="cline-any cline-yes">53x</span>
@@ -758,6 +855,8 @@
758
855
  <span class="cline-any cline-yes">7x</span>
759
856
  <span class="cline-any cline-no">&nbsp;</span>
760
857
  <span class="cline-any cline-no">&nbsp;</span>
858
+ <span class="cline-any cline-no">&nbsp;</span>
859
+ <span class="cline-any cline-no">&nbsp;</span>
761
860
  <span class="cline-any cline-neutral">&nbsp;</span>
762
861
  <span class="cline-any cline-yes">53x</span>
763
862
  <span class="cline-any cline-yes">11x</span>
@@ -767,6 +866,10 @@
767
866
  <span class="cline-any cline-yes">33x</span>
768
867
  <span class="cline-any cline-no">&nbsp;</span>
769
868
  <span class="cline-any cline-no">&nbsp;</span>
869
+ <span class="cline-any cline-no">&nbsp;</span>
870
+ <span class="cline-any cline-no">&nbsp;</span>
871
+ <span class="cline-any cline-no">&nbsp;</span>
872
+ <span class="cline-any cline-no">&nbsp;</span>
770
873
  <span class="cline-any cline-yes">33x</span>
771
874
  <span class="cline-any cline-yes">53x</span>
772
875
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -787,6 +890,7 @@
787
890
  <span class="cline-any cline-neutral">&nbsp;</span>
788
891
  <span class="cline-any cline-yes">45x</span>
789
892
  <span class="cline-any cline-yes">45x</span>
893
+ <span class="cline-any cline-yes">11x</span>
790
894
  <span class="cline-any cline-yes">45x</span>
791
895
  <span class="cline-any cline-yes">45x</span>
792
896
  <span class="cline-any cline-yes">138x</span>
@@ -798,9 +902,12 @@
798
902
  <span class="cline-any cline-no">&nbsp;</span>
799
903
  <span class="cline-any cline-no">&nbsp;</span>
800
904
  <span class="cline-any cline-no">&nbsp;</span>
905
+ <span class="cline-any cline-no">&nbsp;</span>
906
+ <span class="cline-any cline-no">&nbsp;</span>
801
907
  <span class="cline-any cline-yes">138x</span>
802
908
  <span class="cline-any cline-yes">138x</span>
803
909
  <span class="cline-any cline-yes">138x</span>
910
+ <span class="cline-any cline-yes">42x</span>
804
911
  <span class="cline-any cline-yes">138x</span>
805
912
  <span class="cline-any cline-yes">138x</span>
806
913
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -815,6 +922,8 @@
815
922
  <span class="cline-any cline-yes">40x</span>
816
923
  <span class="cline-any cline-yes">40x</span>
817
924
  <span class="cline-any cline-yes">40x</span>
925
+ <span class="cline-any cline-yes">40x</span>
926
+ <span class="cline-any cline-yes">40x</span>
818
927
  <span class="cline-any cline-yes">36x</span>
819
928
  <span class="cline-any cline-yes">36x</span>
820
929
  <span class="cline-any cline-yes">4x</span>
@@ -823,6 +932,9 @@
823
932
  <span class="cline-any cline-yes">11x</span>
824
933
  <span class="cline-any cline-yes">33x</span>
825
934
  <span class="cline-any cline-yes">33x</span>
935
+ <span class="cline-any cline-yes">33x</span>
936
+ <span class="cline-any cline-yes">33x</span>
937
+ <span class="cline-any cline-yes">33x</span>
826
938
  <span class="cline-any cline-neutral">&nbsp;</span>
827
939
  <span class="cline-any cline-yes">33x</span>
828
940
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -833,6 +945,11 @@
833
945
  <span class="cline-any cline-yes">5x</span>
834
946
  <span class="cline-any cline-yes">5x</span>
835
947
  <span class="cline-any cline-yes">5x</span>
948
+ <span class="cline-any cline-yes">5x</span>
949
+ <span class="cline-any cline-yes">5x</span>
950
+ <span class="cline-any cline-yes">5x</span>
951
+ <span class="cline-any cline-yes">5x</span>
952
+ <span class="cline-any cline-yes">5x</span>
836
953
  <span class="cline-any cline-no">&nbsp;</span>
837
954
  <span class="cline-any cline-no">&nbsp;</span>
838
955
  <span class="cline-any cline-no">&nbsp;</span>
@@ -860,6 +977,8 @@
860
977
  <span class="cline-any cline-yes">3x</span>
861
978
  <span class="cline-any cline-yes">3x</span>
862
979
  <span class="cline-any cline-yes">3x</span>
980
+ <span class="cline-any cline-yes">3x</span>
981
+ <span class="cline-any cline-yes">3x</span>
863
982
  <span class="cline-any cline-neutral">&nbsp;</span>
864
983
  <span class="cline-any cline-yes">5x</span>
865
984
  <span class="cline-any cline-yes">3x</span>
@@ -898,6 +1017,9 @@
898
1017
  <span class="cline-any cline-yes">11x</span>
899
1018
  <span class="cline-any cline-yes">13x</span>
900
1019
  <span class="cline-any cline-yes">13x</span>
1020
+ <span class="cline-any cline-neutral">&nbsp;</span>
1021
+ <span class="cline-any cline-neutral">&nbsp;</span>
1022
+ <span class="cline-any cline-neutral">&nbsp;</span>
901
1023
  <span class="cline-any cline-yes">13x</span>
902
1024
  <span class="cline-any cline-yes">13x</span>
903
1025
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -927,8 +1049,22 @@
927
1049
  <span class="cline-any cline-neutral">&nbsp;</span>
928
1050
  <span class="cline-any cline-neutral">&nbsp;</span>
929
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>
1056
+ <span class="cline-any cline-neutral">&nbsp;</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-neutral">&nbsp;</span>
1059
+ <span class="cline-any cline-neutral">&nbsp;</span>
930
1060
  <span class="cline-any cline-yes">11x</span>
931
1061
  <span class="cline-any cline-yes">7x</span>
1062
+ <span class="cline-any cline-yes">7x</span>
1063
+ <span class="cline-any cline-yes">7x</span>
1064
+ <span class="cline-any cline-yes">7x</span>
1065
+ <span class="cline-any cline-yes">7x</span>
1066
+ <span class="cline-any cline-yes">7x</span>
1067
+ <span class="cline-any cline-no">&nbsp;</span>
932
1068
  <span class="cline-any cline-neutral">&nbsp;</span>
933
1069
  <span class="cline-any cline-yes">7x</span>
934
1070
  <span class="cline-any cline-yes">7x</span>
@@ -948,6 +1084,8 @@
948
1084
  <span class="cline-any cline-yes">2x</span>
949
1085
  <span class="cline-any cline-yes">2x</span>
950
1086
  <span class="cline-any cline-yes">2x</span>
1087
+ <span class="cline-any cline-yes">2x</span>
1088
+ <span class="cline-any cline-yes">2x</span>
951
1089
  <span class="cline-any cline-neutral">&nbsp;</span>
952
1090
  <span class="cline-any cline-yes">2x</span>
953
1091
  <span class="cline-any cline-yes">2x</span>
@@ -981,6 +1119,8 @@
981
1119
  <span class="cline-any cline-yes">1x</span>
982
1120
  <span class="cline-any cline-neutral">&nbsp;</span>
983
1121
  <span class="cline-any cline-yes">11x</span>
1122
+ <span class="cline-any cline-yes">5x</span>
1123
+ <span class="cline-any cline-yes">5x</span>
984
1124
  <span class="cline-any cline-neutral">&nbsp;</span>
985
1125
  <span class="cline-any cline-yes">5x</span>
986
1126
  <span class="cline-any cline-yes">1x</span>
@@ -1015,6 +1155,8 @@
1015
1155
  <span class="cline-any cline-neutral">&nbsp;</span>
1016
1156
  <span class="cline-any cline-yes">11x</span>
1017
1157
  <span class="cline-any cline-yes">26x</span>
1158
+ <span class="cline-any cline-yes">26x</span>
1159
+ <span class="cline-any cline-yes">26x</span>
1018
1160
  <span class="cline-any cline-yes">4x</span>
1019
1161
  <span class="cline-any cline-yes">4x</span>
1020
1162
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1028,6 +1170,8 @@
1028
1170
  <span class="cline-any cline-yes">27x</span>
1029
1171
  <span class="cline-any cline-no">&nbsp;</span>
1030
1172
  <span class="cline-any cline-no">&nbsp;</span>
1173
+ <span class="cline-any cline-no">&nbsp;</span>
1174
+ <span class="cline-any cline-no">&nbsp;</span>
1031
1175
  <span class="cline-any cline-yes">27x</span>
1032
1176
  <span class="cline-any cline-yes">19x</span>
1033
1177
  <span class="cline-any cline-yes">27x</span>
@@ -1061,10 +1205,12 @@
1061
1205
  */
1062
1206
  &nbsp;
1063
1207
  import * as realFs from "node:fs";
1064
- import { Host } from "./Host.js";
1065
1208
  import * as path from "node:path";
1209
+ import { Host } from "./Host.js";
1066
1210
  &nbsp;
1067
- function assertNoTombstone(node: Node): asserts node is Node &amp; { tombstone?: false } {
1211
+ function assertNoTombstone(
1212
+ node: Node,
1213
+ ): asserts node is Node &amp; { tombstone?: false } {
1068
1214
  if (node.tombstone) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1069
1215
  <span class="cstat-no" title="statement not covered" > throw new Error(`Unexpected tombstone ${JSON.stringify(node)}`);</span>
1070
1216
  <span class="cstat-no" title="statement not covered" > }</span>
@@ -1072,14 +1218,17 @@ function assertNoTombstone(node: Node): asserts node is Node &amp; { tombstone?:
1072
1218
  &nbsp;
1073
1219
  function assertNotType&lt;N extends Node, T extends Node["type"]&gt;(
1074
1220
  node: N,
1075
- type: T
1221
+ type: T,
1076
1222
  ): asserts node is N &amp; { type: Exclude&lt;N["type"], T&gt; } {
1077
1223
  if (node.type === type) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1078
1224
  <span class="cstat-no" title="statement not covered" > throw new Error(`Unexpected node type ${JSON.stringify(node)}`);</span>
1079
1225
  <span class="cstat-no" title="statement not covered" > }</span>
1080
1226
  }
1081
1227
  &nbsp;
1082
- function assertType&lt;N extends Node, T extends Node["type"]&gt;(node: N, type: T): asserts node is N &amp; { type: T } {
1228
+ function assertType&lt;N extends Node, T extends Node["type"]&gt;(
1229
+ node: N,
1230
+ type: T,
1231
+ ): asserts node is N &amp; { type: T } {
1083
1232
  if (node.type !== type) {
1084
1233
  throw new Error(`Unexpected node type ${JSON.stringify(node)}`);
1085
1234
  }
@@ -1145,7 +1294,14 @@ interface SymlinkNode extends BaseNode&lt;"symlink"&gt; {
1145
1294
  symlink: string;
1146
1295
  }
1147
1296
  &nbsp;
1148
- type Node = DirNode | FileNode | SymlinkNode | DirTombstoneNode | FileTombstoneNode | DirStubNode | FileStubNode;
1297
+ type Node =
1298
+ | DirNode
1299
+ | FileNode
1300
+ | SymlinkNode
1301
+ | DirTombstoneNode
1302
+ | FileTombstoneNode
1303
+ | DirStubNode
1304
+ | FileStubNode;
1149
1305
  &nbsp;
1150
1306
  export class CachingHost implements Host {
1151
1307
  // We need many trees because of windows, key is the `root`
@@ -1166,23 +1322,29 @@ export class CachingHost implements Host {
1166
1322
  | "statSync"
1167
1323
  | "unlinkSync"
1168
1324
  | "writeFileSync"
1169
- &gt; = realFs
1325
+ &gt; = realFs,
1170
1326
  ) {}
1171
1327
  &nbsp;
1172
1328
  #replaceNode(
1173
1329
  node: FileNode | FileStubNode | SymlinkNode,
1174
- newNode: Omit&lt;FileTombstoneNode, "fullPath" | "parent"&gt;
1330
+ newNode: Omit&lt;FileTombstoneNode, "fullPath" | "parent"&gt;,
1175
1331
  ): FileTombstoneNode;
1176
1332
  #replaceNode(
1177
1333
  node: FileNode | FileStubNode | FileTombstoneNode,
1178
- newNode: Omit&lt;FileNode, "fullPath" | "parent"&gt;
1334
+ newNode: Omit&lt;FileNode, "fullPath" | "parent"&gt;,
1179
1335
  ): FileNode;
1180
1336
  #replaceNode(
1181
1337
  node: DirTombstoneNode | DirStubNode,
1182
- newNode: Omit&lt;DirNode, "fullPath" | "parent" | "dir"&gt;
1338
+ newNode: Omit&lt;DirNode, "fullPath" | "parent" | "dir"&gt;,
1183
1339
  ): 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 {
1340
+ #replaceNode(
1341
+ node: DirNode,
1342
+ newNode: Omit&lt;DirTombstoneNode, "fullPath" | "parent" | "dir"&gt;,
1343
+ ): DirTombstoneNode;
1344
+ #replaceNode(
1345
+ node: Node,
1346
+ partialNewNode: Omit&lt;Node, "fullPath" | "parent"&gt;,
1347
+ ): Node {
1186
1348
  if (!node.parent) <span class="branch-0 cbranch-no" title="branch not covered" >throw new Error("Cannot replace root node");</span>
1187
1349
  const newNode: Node = {
1188
1350
  ...partialNewNode,
@@ -1211,15 +1373,22 @@ export class CachingHost implements Host {
1211
1373
  * Throws if the path doesnt exist!
1212
1374
  */
1213
1375
  #stubify(filePath: string, parent: undefined): DirStubNode;
1214
- #stubify(filePath: string, parent: DirNode | DirStubNode | undefined): DirStubNode | SymlinkNode | FileStubNode;
1215
1376
  #stubify(
1216
1377
  filePath: string,
1217
- parent: DirNode | DirStubNode | undefined
1218
- ): typeof parent extends undefined ? DirNode | DirStubNode : DirNode | DirStubNode | SymlinkNode | FileStubNode {
1378
+ parent: DirNode | DirStubNode | undefined,
1379
+ ): DirStubNode | SymlinkNode | FileStubNode;
1380
+ #stubify(
1381
+ filePath: string,
1382
+ parent: DirNode | DirStubNode | undefined,
1383
+ ): typeof parent extends undefined ? DirNode | DirStubNode
1384
+ : DirNode | DirStubNode | SymlinkNode | FileStubNode
1385
+ {
1219
1386
  const canonicalPath = path.resolve(filePath);
1220
1387
  &nbsp;
1221
1388
  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>
1389
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1390
+ <span class="cstat-no" title="statement not covered" > `parent can only be null if path is root. Instead got: ${canonicalPath}`,</span>
1391
+ <span class="cstat-no" title="statement not covered" > );</span>
1223
1392
  <span class="cstat-no" title="statement not covered" > }</span>
1224
1393
  const stat = this.fs.lstatSync(canonicalPath); // may throw
1225
1394
  &nbsp;
@@ -1251,7 +1420,9 @@ export class CachingHost implements Host {
1251
1420
  needsFlush: false,
1252
1421
  };
1253
1422
  <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>
1423
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1424
+ <span class="cstat-no" title="statement not covered" > `what is not a file nor symlink nor directory? nothing we care about: ${canonicalPath}`,</span>
1425
+ <span class="cstat-no" title="statement not covered" > );</span>
1255
1426
  <span class="cstat-no" title="statement not covered" > }</span>
1256
1427
  &nbsp;
1257
1428
  if (!parent &amp;&amp; node.type === "dir") {
@@ -1260,7 +1431,11 @@ export class CachingHost implements Host {
1260
1431
  } else if (parent) {
1261
1432
  parent.dir.set(path.basename(canonicalPath), node);
1262
1433
  <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>
1434
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1435
+ <span class="cstat-no" title="statement not covered" > `root can only be a dir, got ${</span>
1436
+ <span class="cstat-no" title="statement not covered" > JSON.stringify(node)</span>
1437
+ <span class="cstat-no" title="statement not covered" > } for path: ${canonicalPath}`,</span>
1438
+ <span class="cstat-no" title="statement not covered" > );</span>
1264
1439
  <span class="cstat-no" title="statement not covered" > }</span>
1265
1440
  return node;
1266
1441
  }
@@ -1281,13 +1456,16 @@ export class CachingHost implements Host {
1281
1456
  }
1282
1457
  &nbsp;
1283
1458
  let curPath = root;
1284
- let curNode: Node = this.#trees.get(root) ?? this.#stubify(curPath, undefined); // its okay to throw if there is no root
1459
+ let curNode: Node = this.#trees.get(root)
1460
+ ?? this.#stubify(curPath, undefined); // its okay to throw if there is no root
1285
1461
  try {
1286
1462
  for (const part of parts) {
1287
1463
  assertNoTombstone(curNode);
1288
1464
  assertNotType(curNode, "file");
1289
1465
  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>
1466
+ <span class="cstat-no" title="statement not covered" > const linkedNode = this.#getNodeResolvingSymlinks(</span>
1467
+ <span class="cstat-no" title="statement not covered" > path.resolve(path.dirname(curPath), curNode.symlink),</span>
1468
+ <span class="cstat-no" title="statement not covered" > );</span>
1291
1469
  <span class="cstat-no" title="statement not covered" > assertExists(linkedNode);</span>
1292
1470
  <span class="cstat-no" title="statement not covered" > assertNoTombstone(linkedNode);</span>
1293
1471
  <span class="cstat-no" title="statement not covered" > assertType(linkedNode, "dir");</span>
@@ -1295,7 +1473,8 @@ export class CachingHost implements Host {
1295
1473
  <span class="cstat-no" title="statement not covered" > }</span>
1296
1474
  assertType(curNode, "dir");
1297
1475
  assertNoTombstone(curNode);
1298
- curNode = curNode.dir.get(part) ?? this.#stubify(path.join(curNode.fullPath, part), curNode);
1476
+ curNode = curNode.dir.get(part)
1477
+ ?? this.#stubify(path.join(curNode.fullPath, part), curNode);
1299
1478
  curPath = path.join(curPath, part);
1300
1479
  }
1301
1480
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -1308,14 +1487,19 @@ export class CachingHost implements Host {
1308
1487
  &nbsp;
1309
1488
  #getNode(filePath: string) {
1310
1489
  const canonicalPath = path.resolve(filePath);
1311
- const { pathWithSymlinks, node } = this.#getNearestAncestorNode(canonicalPath);
1490
+ const { pathWithSymlinks, node } = this.#getNearestAncestorNode(
1491
+ canonicalPath,
1492
+ );
1312
1493
  if (pathWithSymlinks === canonicalPath) {
1313
1494
  return node;
1314
1495
  }
1315
1496
  return undefined;
1316
1497
  }
1317
1498
  &nbsp;
1318
- #getNodeResolvingSymlinks(filePath: string, follows: number = 100): Exclude&lt;Node, SymlinkNode&gt; | undefined {
1499
+ #getNodeResolvingSymlinks(
1500
+ filePath: string,
1501
+ follows: number = 100,
1502
+ ): Exclude&lt;Node, SymlinkNode&gt; | undefined {
1319
1503
  const node = this.#getNode(filePath); // canonicalizes for us
1320
1504
  if (!node || node.type !== "symlink") return node;
1321
1505
  // this is a really poor mans way of doing this. but who has 100's of symlinks hanging around?
@@ -1324,9 +1508,14 @@ export class CachingHost implements Host {
1324
1508
  return this.#getNodeResolvingSymlinks(node.symlink, follows--);
1325
1509
  }
1326
1510
  &nbsp;
1327
- mkdir(filePath: string, opts: { recursive: boolean } = { recursive: false }): void {
1511
+ mkdir(
1512
+ filePath: string,
1513
+ opts: { recursive: boolean } = { recursive: false },
1514
+ ): void {
1328
1515
  const canonicalPath = path.resolve(filePath);
1329
- const { node, pathWithSymlinks } = this.#getNearestAncestorNode(canonicalPath);
1516
+ const { node, pathWithSymlinks } = this.#getNearestAncestorNode(
1517
+ canonicalPath,
1518
+ );
1330
1519
  if (filePath === pathWithSymlinks) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1331
1520
  <span class="cstat-no" title="statement not covered" > assertType(node, "dir");</span>
1332
1521
  <span class="cstat-no" title="statement not covered" > assertHasParent(node);</span>
@@ -1352,7 +1541,9 @@ export class CachingHost implements Host {
1352
1541
  let maybePath = canonicalPath;
1353
1542
  const toMake: string[] = [];
1354
1543
  while (maybePath !== rootPath) {
1355
- toMake.unshift(path.resolve(node.fullPath, path.relative(rootPath, maybePath)));
1544
+ toMake.unshift(
1545
+ path.resolve(node.fullPath, path.relative(rootPath, maybePath)),
1546
+ );
1356
1547
  maybePath = path.dirname(maybePath);
1357
1548
  }
1358
1549
  &nbsp;
@@ -1392,7 +1583,10 @@ export class CachingHost implements Host {
1392
1583
  readFile(filePath: string, opts: { asJson: true }): object;
1393
1584
  readFile(
1394
1585
  filePath: string,
1395
- opts: undefined | { encoding: BufferEncoding; asJson?: false } | { encoding?: never; asJson: true }
1586
+ opts: undefined | { encoding: BufferEncoding; asJson?: false } | {
1587
+ encoding?: never;
1588
+ asJson: true;
1589
+ },
1396
1590
  ) {
1397
1591
  let node = this.#getNodeResolvingSymlinks(filePath); // canonicalizes for us
1398
1592
  &nbsp;
@@ -1420,10 +1614,24 @@ export class CachingHost implements Host {
1420
1614
  }
1421
1615
  &nbsp;
1422
1616
  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>
1617
+ writeFile(
1618
+ filePath: string,
1619
+ body: string,
1620
+ opts: { encoding: BufferEncoding },
1621
+ ): void;
1622
+ writeFile(
1623
+ filePath: string,
1624
+ body: string,
1625
+ opts: { encoding: BufferEncoding },
1626
+ ): void;
1627
+ writeFile(
1628
+ filePath: string,
1629
+ body: string | Buffer,
1630
+ opts?: { encoding: BufferEncoding },
1631
+ ) {
1632
+ const fileContentsAsBuffer = typeof body === "string"
1633
+ ? Buffer.from(body, opts?.encoding<span class="branch-0 cbranch-no" title="branch not covered" >)</span>
1634
+ <span class="cstat-no" title="statement not covered" > : Buffer.from(body);</span>
1427
1635
  &nbsp;
1428
1636
  const canonicalPath = path.resolve(filePath);
1429
1637
  const existingNode = this.#getNodeResolvingSymlinks(canonicalPath);
@@ -1439,7 +1647,9 @@ export class CachingHost implements Host {
1439
1647
  return;
1440
1648
  }
1441
1649
  &nbsp;
1442
- const maybeDirNode = this.#getNodeResolvingSymlinks(path.dirname(canonicalPath));
1650
+ const maybeDirNode = this.#getNodeResolvingSymlinks(
1651
+ path.dirname(canonicalPath),
1652
+ );
1443
1653
  assertExists(maybeDirNode);
1444
1654
  assertType(maybeDirNode, "dir");
1445
1655
  assertNoTombstone(maybeDirNode);
@@ -1475,7 +1685,9 @@ export class CachingHost implements Host {
1475
1685
  });
1476
1686
  }
1477
1687
  &nbsp;
1478
- async #flushFileNode(node: FileNode | FileStubNode | FileTombstoneNode): Promise&lt;unknown&gt; {
1688
+ async #flushFileNode(
1689
+ node: FileNode | FileStubNode | FileTombstoneNode,
1690
+ ): Promise&lt;unknown&gt; {
1479
1691
  // FIXME all tombstones need a flush, so we can get rid of needsFlush for them
1480
1692
  if (node.tombstone) {
1481
1693
  try {
@@ -1508,7 +1720,9 @@ export class CachingHost implements Host {
1508
1720
  <span class="cstat-no" title="statement not covered" > return this.fs.promises.symlink(node.symlink, node.fullPath);</span>
1509
1721
  }
1510
1722
  &nbsp;
1511
- async #flushDirNode(node: DirNode | DirStubNode | DirTombstoneNode): Promise&lt;unknown&gt; {
1723
+ async #flushDirNode(
1724
+ node: DirNode | DirStubNode | DirTombstoneNode,
1725
+ ): Promise&lt;unknown&gt; {
1512
1726
  if (!node.tombstone &amp;&amp; node.needsFlush) {
1513
1727
  try {
1514
1728
  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 +1735,9 @@ export class CachingHost implements Host {
1521
1735
  const promises: Promise&lt;unknown&gt;[] = [];
1522
1736
  for (const child of node.dir.values()) {
1523
1737
  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>
1738
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
1739
+ <span class="cstat-no" title="statement not covered" > "Unexpected failure during sanity check. A non-deleted child is on a deleted dir",</span>
1740
+ <span class="cstat-no" title="statement not covered" > );</span>
1525
1741
  <span class="cstat-no" title="statement not covered" > }</span>
1526
1742
  if (child.type === "dir") {
1527
1743
  promises.push(this.#flushDirNode(child));
@@ -1555,7 +1771,7 @@ export class CachingHost implements Host {
1555
1771
  <div class='footer quiet pad2 space-top1 center small'>
1556
1772
  Code coverage generated by
1557
1773
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1558
- at 2025-01-17T16:18:31.005Z
1774
+ at 2025-01-22T17:39:00.274Z
1559
1775
  </div>
1560
1776
  <script src="prettify.js"></script>
1561
1777
  <script>