@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.
- package/.turbo/turbo-clean.log +1 -1
- package/.turbo/turbo-compile-typescript.log +1 -1
- package/.turbo/turbo-lint.log +7 -7
- package/.turbo/turbo-test.log +11 -10
- package/.turbo/turbo-transpile-typescript.log +4 -4
- package/CHANGELOG.md +4 -0
- package/build/js/index.js +489 -443
- package/build/js/index.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/CachingHost.d.ts.map +1 -1
- package/build/types/Host.d.ts.map +1 -1
- package/build/types/PackageJson.d.ts.map +1 -1
- package/build/types/SimpleHost.d.ts.map +1 -1
- package/build/types/Table.d.ts.map +1 -1
- package/build/types/findWorkspaceDir.d.ts.map +1 -1
- package/build/types/getPackageNameToDir.d.ts.map +1 -1
- package/build/types/getWorkspacePackageDirs.d.ts.map +1 -1
- package/build/types/index.d.ts +7 -7
- package/build/types/index.d.ts.map +1 -1
- package/build/types/matchesAnyGlob.d.ts.map +1 -1
- package/build/types/mutateJson.d.ts.map +1 -1
- package/build/types/nanosecondsToSanity.d.ts.map +1 -1
- package/coverage/AggregateTiming.ts.html +2 -2
- package/coverage/CachingHost.ts.html +252 -42
- package/coverage/Host.ts.html +15 -3
- package/coverage/PackageJson.ts.html +4 -4
- package/coverage/SimpleHost.ts.html +40 -7
- package/coverage/Table.ts.html +137 -29
- package/coverage/Timing.ts.html +1 -1
- package/coverage/clover.xml +527 -396
- package/coverage/coverage-final.json +13 -13
- package/coverage/findWorkspaceDir.ts.html +4 -4
- package/coverage/getPackageNameToDir.ts.html +18 -6
- package/coverage/getWorkspacePackageDirs.ts.html +168 -138
- package/coverage/index.html +40 -40
- package/coverage/index.ts.html +30 -30
- package/coverage/matchesAnyGlob.ts.html +37 -10
- package/coverage/mutateJson.ts.html +17 -5
- package/coverage/nanosecondsToSanity.ts.html +11 -5
- package/package.json +1 -2
- package/src/AggregateTiming.ts +1 -1
- package/src/CachingHost.ts +104 -34
- package/src/Host.ts +5 -1
- package/src/PackageJson.ts +3 -3
- package/src/SimpleHost.ts +14 -3
- package/src/Table.ts +58 -22
- package/src/__tests__/CachingHost.spec.ts +203 -166
- package/src/findWorkspaceDir.ts +3 -3
- package/src/getPackageNameToDir.ts +6 -2
- package/src/getWorkspacePackageDirs.ts +19 -9
- package/src/index.ts +7 -7
- package/src/matchesAnyGlob.ts +12 -3
- package/src/mutateJson.ts +5 -1
- package/src/nanosecondsToSanity.ts +3 -1
- package/vitest.config.mjs +6 -7
- 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">
|
|
26
|
+
<span class="strong">83.42% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
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">
|
|
47
|
+
<span class="strong">83.42% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
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
|
|
562
|
-
<
|
|
563
|
-
<
|
|
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"> </span>
|
|
565
633
|
<span class="cline-any cline-neutral"> </span>
|
|
566
634
|
<span class="cline-any cline-neutral"> </span>
|
|
567
635
|
<span class="cline-any cline-neutral"> </span>
|
|
568
636
|
<span class="cline-any cline-neutral"> </span>
|
|
569
637
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
571
641
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
575
647
|
<span class="cline-any cline-no"> </span>
|
|
576
648
|
<span class="cline-any cline-yes">295x</span>
|
|
@@ -586,6 +658,9 @@
|
|
|
586
658
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
653
728
|
<span class="cline-any cline-neutral"> </span>
|
|
654
729
|
<span class="cline-any cline-neutral"> </span>
|
|
730
|
+
<span class="cline-any cline-neutral"> </span>
|
|
731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-neutral"> </span>
|
|
733
|
+
<span class="cline-any cline-neutral"> </span>
|
|
734
|
+
<span class="cline-any cline-neutral"> </span>
|
|
735
|
+
<span class="cline-any cline-neutral"> </span>
|
|
736
|
+
<span class="cline-any cline-neutral"> </span>
|
|
655
737
|
<span class="cline-any cline-yes">1x</span>
|
|
656
738
|
<span class="cline-any cline-neutral"> </span>
|
|
657
739
|
<span class="cline-any cline-yes">11x</span>
|
|
@@ -687,6 +769,9 @@
|
|
|
687
769
|
<span class="cline-any cline-neutral"> </span>
|
|
688
770
|
<span class="cline-any cline-neutral"> </span>
|
|
689
771
|
<span class="cline-any cline-neutral"> </span>
|
|
772
|
+
<span class="cline-any cline-neutral"> </span>
|
|
773
|
+
<span class="cline-any cline-neutral"> </span>
|
|
774
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
702
790
|
<span class="cline-any cline-yes">11x</span>
|
|
703
791
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -717,15 +805,22 @@
|
|
|
717
805
|
<span class="cline-any cline-neutral"> </span>
|
|
718
806
|
<span class="cline-any cline-neutral"> </span>
|
|
719
807
|
<span class="cline-any cline-neutral"> </span>
|
|
808
|
+
<span class="cline-any cline-neutral"> </span>
|
|
809
|
+
<span class="cline-any cline-neutral"> </span>
|
|
810
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
815
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
726
819
|
<span class="cline-any cline-yes">53x</span>
|
|
727
820
|
<span class="cline-any cline-no"> </span>
|
|
728
821
|
<span class="cline-any cline-no"> </span>
|
|
822
|
+
<span class="cline-any cline-no"> </span>
|
|
823
|
+
<span class="cline-any cline-no"> </span>
|
|
729
824
|
<span class="cline-any cline-yes">53x</span>
|
|
730
825
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
760
855
|
<span class="cline-any cline-no"> </span>
|
|
856
|
+
<span class="cline-any cline-no"> </span>
|
|
857
|
+
<span class="cline-any cline-no"> </span>
|
|
761
858
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
769
866
|
<span class="cline-any cline-no"> </span>
|
|
867
|
+
<span class="cline-any cline-no"> </span>
|
|
868
|
+
<span class="cline-any cline-no"> </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"> </span>
|
|
@@ -787,6 +886,7 @@
|
|
|
787
886
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
799
899
|
<span class="cline-any cline-no"> </span>
|
|
800
900
|
<span class="cline-any cline-no"> </span>
|
|
901
|
+
<span class="cline-any cline-no"> </span>
|
|
902
|
+
<span class="cline-any cline-no"> </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"> </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"> </span>
|
|
827
935
|
<span class="cline-any cline-yes">33x</span>
|
|
828
936
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
837
950
|
<span class="cline-any cline-no"> </span>
|
|
838
951
|
<span class="cline-any cline-no"> </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"> </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"> </span>
|
|
1017
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1018
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
@@ -927,8 +1045,22 @@
|
|
|
927
1045
|
<span class="cline-any cline-neutral"> </span>
|
|
928
1046
|
<span class="cline-any cline-neutral"> </span>
|
|
929
1047
|
<span class="cline-any cline-neutral"> </span>
|
|
1048
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1049
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1050
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1051
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1052
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1053
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1054
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1055
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
932
1064
|
<span class="cline-any cline-neutral"> </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"> </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"> </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"> </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"> </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"> </span>
|
|
@@ -1028,6 +1166,8 @@
|
|
|
1028
1166
|
<span class="cline-any cline-yes">27x</span>
|
|
1029
1167
|
<span class="cline-any cline-no"> </span>
|
|
1030
1168
|
<span class="cline-any cline-no"> </span>
|
|
1169
|
+
<span class="cline-any cline-no"> </span>
|
|
1170
|
+
<span class="cline-any cline-no"> </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
|
|
|
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
|
|
|
1067
|
-
function assertNoTombstone(
|
|
1207
|
+
function assertNoTombstone(
|
|
1208
|
+
node: Node,
|
|
1209
|
+
): asserts node is Node & { 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 & { tombstone?:
|
|
|
1072
1214
|
|
|
1073
1215
|
function assertNotType<N extends Node, T extends Node["type"]>(
|
|
1074
1216
|
node: N,
|
|
1075
|
-
type: T
|
|
1217
|
+
type: T,
|
|
1076
1218
|
): asserts node is N & { type: Exclude<N["type"], T> } {
|
|
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
|
|
|
1082
|
-
function assertType<N extends Node, T extends Node["type"]>(
|
|
1224
|
+
function assertType<N extends Node, T extends Node["type"]>(
|
|
1225
|
+
node: N,
|
|
1226
|
+
type: T,
|
|
1227
|
+
): asserts node is N & { 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<"symlink"> {
|
|
|
1145
1290
|
symlink: string;
|
|
1146
1291
|
}
|
|
1147
1292
|
|
|
1148
|
-
type Node =
|
|
1293
|
+
type Node =
|
|
1294
|
+
| DirNode
|
|
1295
|
+
| FileNode
|
|
1296
|
+
| SymlinkNode
|
|
1297
|
+
| DirTombstoneNode
|
|
1298
|
+
| FileTombstoneNode
|
|
1299
|
+
| DirStubNode
|
|
1300
|
+
| FileStubNode;
|
|
1149
1301
|
|
|
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
|
-
> = realFs
|
|
1321
|
+
> = realFs,
|
|
1170
1322
|
) {}
|
|
1171
1323
|
|
|
1172
1324
|
#replaceNode(
|
|
1173
1325
|
node: FileNode | FileStubNode | SymlinkNode,
|
|
1174
|
-
newNode: Omit<FileTombstoneNode, "fullPath" | "parent">
|
|
1326
|
+
newNode: Omit<FileTombstoneNode, "fullPath" | "parent">,
|
|
1175
1327
|
): FileTombstoneNode;
|
|
1176
1328
|
#replaceNode(
|
|
1177
1329
|
node: FileNode | FileStubNode | FileTombstoneNode,
|
|
1178
|
-
newNode: Omit<FileNode, "fullPath" | "parent">
|
|
1330
|
+
newNode: Omit<FileNode, "fullPath" | "parent">,
|
|
1179
1331
|
): FileNode;
|
|
1180
1332
|
#replaceNode(
|
|
1181
1333
|
node: DirTombstoneNode | DirStubNode,
|
|
1182
|
-
newNode: Omit<DirNode, "fullPath" | "parent" | "dir">
|
|
1334
|
+
newNode: Omit<DirNode, "fullPath" | "parent" | "dir">,
|
|
1183
1335
|
): DirStubNode;
|
|
1184
|
-
#replaceNode(
|
|
1185
|
-
|
|
1336
|
+
#replaceNode(
|
|
1337
|
+
node: DirNode,
|
|
1338
|
+
newNode: Omit<DirTombstoneNode, "fullPath" | "parent" | "dir">,
|
|
1339
|
+
): DirTombstoneNode;
|
|
1340
|
+
#replaceNode(
|
|
1341
|
+
node: Node,
|
|
1342
|
+
partialNewNode: Omit<Node, "fullPath" | "parent">,
|
|
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
|
-
):
|
|
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
|
|
|
1221
1384
|
if (!parent && 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(
|
|
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
|
|
|
@@ -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(
|
|
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
|
|
|
1257
1424
|
if (!parent && 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(
|
|
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
|
|
|
1283
1452
|
let curPath = root;
|
|
1284
|
-
let curNode: Node = this.#trees.get(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(
|
|
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)
|
|
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
|
|
|
1309
1482
|
#getNode(filePath: string) {
|
|
1310
1483
|
const canonicalPath = path.resolve(filePath);
|
|
1311
|
-
const { pathWithSymlinks, node } = this.#getNearestAncestorNode(
|
|
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
|
|
|
1318
|
-
#getNodeResolvingSymlinks(
|
|
1493
|
+
#getNodeResolvingSymlinks(
|
|
1494
|
+
filePath: string,
|
|
1495
|
+
follows: number = 100,
|
|
1496
|
+
): Exclude<Node, SymlinkNode> | 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
|
|
|
1327
|
-
mkdir(
|
|
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(
|
|
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(
|
|
1538
|
+
toMake.unshift(
|
|
1539
|
+
path.resolve(node.fullPath, path.relative(rootPath, maybePath)),
|
|
1540
|
+
);
|
|
1356
1541
|
maybePath = path.dirname(maybePath);
|
|
1357
1542
|
}
|
|
1358
1543
|
|
|
@@ -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 } | {
|
|
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
|
|
|
@@ -1420,10 +1608,24 @@ export class CachingHost implements Host {
|
|
|
1420
1608
|
}
|
|
1421
1609
|
|
|
1422
1610
|
writeFile(filePath: string, buffer: Buffer): void;
|
|
1423
|
-
writeFile(
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
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
|
|
|
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
|
|
|
1442
|
-
const maybeDirNode = this.#getNodeResolvingSymlinks(
|
|
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
|
|
|
1478
|
-
async #flushFileNode(
|
|
1682
|
+
async #flushFileNode(
|
|
1683
|
+
node: FileNode | FileStubNode | FileTombstoneNode,
|
|
1684
|
+
): Promise<unknown> {
|
|
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
|
|
|
1511
|
-
async #flushDirNode(
|
|
1717
|
+
async #flushDirNode(
|
|
1718
|
+
node: DirNode | DirStubNode | DirTombstoneNode,
|
|
1719
|
+
): Promise<unknown> {
|
|
1512
1720
|
if (!node.tombstone && 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<unknown>[] = [];
|
|
1522
1730
|
for (const child of node.dir.values()) {
|
|
1523
1731
|
if (node.<span class="branch-0 cbranch-no" title="branch not covered" >tombstone && !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(
|
|
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-
|
|
1768
|
+
at 2025-01-31T20:59:52.637Z
|
|
1559
1769
|
</div>
|
|
1560
1770
|
<script src="prettify.js"></script>
|
|
1561
1771
|
<script>
|