@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.
- 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 +14 -10
- package/.turbo/turbo-transpile-typescript.log +3 -3
- package/CHANGELOG.md +2 -0
- package/build/js/index.js +493 -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 +258 -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 +148 -31
- package/coverage/Timing.ts.html +1 -1
- package/coverage/clover.xml +533 -389
- 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 +174 -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 +106 -34
- package/src/Host.ts +5 -1
- package/src/PackageJson.ts +3 -3
- package/src/SimpleHost.ts +14 -3
- package/src/Table.ts +62 -23
- package/src/__tests__/CachingHost.spec.ts +203 -166
- package/src/findWorkspaceDir.ts +3 -3
- package/src/getPackageNameToDir.ts +6 -2
- package/src/getWorkspacePackageDirs.ts +22 -10
- 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 +10 -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">82.98% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
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">
|
|
47
|
+
<span class="strong">82.98% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
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
|
|
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>
|
|
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"> </span>
|
|
565
635
|
<span class="cline-any cline-neutral"> </span>
|
|
566
636
|
<span class="cline-any cline-neutral"> </span>
|
|
567
637
|
<span class="cline-any cline-neutral"> </span>
|
|
568
638
|
<span class="cline-any cline-neutral"> </span>
|
|
569
639
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
571
643
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
575
649
|
<span class="cline-any cline-no"> </span>
|
|
576
650
|
<span class="cline-any cline-yes">295x</span>
|
|
@@ -586,6 +660,9 @@
|
|
|
586
660
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
653
730
|
<span class="cline-any cline-neutral"> </span>
|
|
654
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>
|
|
737
|
+
<span class="cline-any cline-neutral"> </span>
|
|
738
|
+
<span class="cline-any cline-neutral"> </span>
|
|
655
739
|
<span class="cline-any cline-yes">1x</span>
|
|
656
740
|
<span class="cline-any cline-neutral"> </span>
|
|
657
741
|
<span class="cline-any cline-yes">11x</span>
|
|
@@ -687,6 +771,9 @@
|
|
|
687
771
|
<span class="cline-any cline-neutral"> </span>
|
|
688
772
|
<span class="cline-any cline-neutral"> </span>
|
|
689
773
|
<span class="cline-any cline-neutral"> </span>
|
|
774
|
+
<span class="cline-any cline-neutral"> </span>
|
|
775
|
+
<span class="cline-any cline-neutral"> </span>
|
|
776
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
702
792
|
<span class="cline-any cline-yes">11x</span>
|
|
703
793
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -717,15 +807,22 @@
|
|
|
717
807
|
<span class="cline-any cline-neutral"> </span>
|
|
718
808
|
<span class="cline-any cline-neutral"> </span>
|
|
719
809
|
<span class="cline-any cline-neutral"> </span>
|
|
810
|
+
<span class="cline-any cline-neutral"> </span>
|
|
811
|
+
<span class="cline-any cline-neutral"> </span>
|
|
812
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
817
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
726
821
|
<span class="cline-any cline-yes">53x</span>
|
|
727
822
|
<span class="cline-any cline-no"> </span>
|
|
728
823
|
<span class="cline-any cline-no"> </span>
|
|
824
|
+
<span class="cline-any cline-no"> </span>
|
|
825
|
+
<span class="cline-any cline-no"> </span>
|
|
729
826
|
<span class="cline-any cline-yes">53x</span>
|
|
730
827
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
760
857
|
<span class="cline-any cline-no"> </span>
|
|
858
|
+
<span class="cline-any cline-no"> </span>
|
|
859
|
+
<span class="cline-any cline-no"> </span>
|
|
761
860
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
769
868
|
<span class="cline-any cline-no"> </span>
|
|
869
|
+
<span class="cline-any cline-no"> </span>
|
|
870
|
+
<span class="cline-any cline-no"> </span>
|
|
871
|
+
<span class="cline-any cline-no"> </span>
|
|
872
|
+
<span class="cline-any cline-no"> </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"> </span>
|
|
@@ -787,6 +890,7 @@
|
|
|
787
890
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
799
903
|
<span class="cline-any cline-no"> </span>
|
|
800
904
|
<span class="cline-any cline-no"> </span>
|
|
905
|
+
<span class="cline-any cline-no"> </span>
|
|
906
|
+
<span class="cline-any cline-no"> </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"> </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"> </span>
|
|
827
939
|
<span class="cline-any cline-yes">33x</span>
|
|
828
940
|
<span class="cline-any cline-neutral"> </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"> </span>
|
|
837
954
|
<span class="cline-any cline-no"> </span>
|
|
838
955
|
<span class="cline-any cline-no"> </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"> </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"> </span>
|
|
1021
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1022
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
@@ -927,8 +1049,22 @@
|
|
|
927
1049
|
<span class="cline-any cline-neutral"> </span>
|
|
928
1050
|
<span class="cline-any cline-neutral"> </span>
|
|
929
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>
|
|
1056
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1057
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1058
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1059
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
932
1068
|
<span class="cline-any cline-neutral"> </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"> </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"> </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"> </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"> </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"> </span>
|
|
@@ -1028,6 +1170,8 @@
|
|
|
1028
1170
|
<span class="cline-any cline-yes">27x</span>
|
|
1029
1171
|
<span class="cline-any cline-no"> </span>
|
|
1030
1172
|
<span class="cline-any cline-no"> </span>
|
|
1173
|
+
<span class="cline-any cline-no"> </span>
|
|
1174
|
+
<span class="cline-any cline-no"> </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
|
|
|
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
|
|
|
1067
|
-
function assertNoTombstone(
|
|
1211
|
+
function assertNoTombstone(
|
|
1212
|
+
node: Node,
|
|
1213
|
+
): asserts node is Node & { 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 & { tombstone?:
|
|
|
1072
1218
|
|
|
1073
1219
|
function assertNotType<N extends Node, T extends Node["type"]>(
|
|
1074
1220
|
node: N,
|
|
1075
|
-
type: T
|
|
1221
|
+
type: T,
|
|
1076
1222
|
): asserts node is N & { type: Exclude<N["type"], T> } {
|
|
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
|
|
|
1082
|
-
function assertType<N extends Node, T extends Node["type"]>(
|
|
1228
|
+
function assertType<N extends Node, T extends Node["type"]>(
|
|
1229
|
+
node: N,
|
|
1230
|
+
type: T,
|
|
1231
|
+
): asserts node is N & { 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<"symlink"> {
|
|
|
1145
1294
|
symlink: string;
|
|
1146
1295
|
}
|
|
1147
1296
|
|
|
1148
|
-
type Node =
|
|
1297
|
+
type Node =
|
|
1298
|
+
| DirNode
|
|
1299
|
+
| FileNode
|
|
1300
|
+
| SymlinkNode
|
|
1301
|
+
| DirTombstoneNode
|
|
1302
|
+
| FileTombstoneNode
|
|
1303
|
+
| DirStubNode
|
|
1304
|
+
| FileStubNode;
|
|
1149
1305
|
|
|
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
|
-
> = realFs
|
|
1325
|
+
> = realFs,
|
|
1170
1326
|
) {}
|
|
1171
1327
|
|
|
1172
1328
|
#replaceNode(
|
|
1173
1329
|
node: FileNode | FileStubNode | SymlinkNode,
|
|
1174
|
-
newNode: Omit<FileTombstoneNode, "fullPath" | "parent">
|
|
1330
|
+
newNode: Omit<FileTombstoneNode, "fullPath" | "parent">,
|
|
1175
1331
|
): FileTombstoneNode;
|
|
1176
1332
|
#replaceNode(
|
|
1177
1333
|
node: FileNode | FileStubNode | FileTombstoneNode,
|
|
1178
|
-
newNode: Omit<FileNode, "fullPath" | "parent">
|
|
1334
|
+
newNode: Omit<FileNode, "fullPath" | "parent">,
|
|
1179
1335
|
): FileNode;
|
|
1180
1336
|
#replaceNode(
|
|
1181
1337
|
node: DirTombstoneNode | DirStubNode,
|
|
1182
|
-
newNode: Omit<DirNode, "fullPath" | "parent" | "dir">
|
|
1338
|
+
newNode: Omit<DirNode, "fullPath" | "parent" | "dir">,
|
|
1183
1339
|
): DirStubNode;
|
|
1184
|
-
#replaceNode(
|
|
1185
|
-
|
|
1340
|
+
#replaceNode(
|
|
1341
|
+
node: DirNode,
|
|
1342
|
+
newNode: Omit<DirTombstoneNode, "fullPath" | "parent" | "dir">,
|
|
1343
|
+
): DirTombstoneNode;
|
|
1344
|
+
#replaceNode(
|
|
1345
|
+
node: Node,
|
|
1346
|
+
partialNewNode: Omit<Node, "fullPath" | "parent">,
|
|
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
|
-
):
|
|
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
|
|
|
1221
1388
|
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(
|
|
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
|
|
|
@@ -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(
|
|
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
|
|
|
1257
1428
|
if (!parent && 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(
|
|
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
|
|
|
1283
1458
|
let curPath = root;
|
|
1284
|
-
let curNode: Node = this.#trees.get(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(
|
|
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)
|
|
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
|
|
|
1309
1488
|
#getNode(filePath: string) {
|
|
1310
1489
|
const canonicalPath = path.resolve(filePath);
|
|
1311
|
-
const { pathWithSymlinks, node } = this.#getNearestAncestorNode(
|
|
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
|
|
|
1318
|
-
#getNodeResolvingSymlinks(
|
|
1499
|
+
#getNodeResolvingSymlinks(
|
|
1500
|
+
filePath: string,
|
|
1501
|
+
follows: number = 100,
|
|
1502
|
+
): Exclude<Node, SymlinkNode> | 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
|
|
|
1327
|
-
mkdir(
|
|
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(
|
|
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(
|
|
1544
|
+
toMake.unshift(
|
|
1545
|
+
path.resolve(node.fullPath, path.relative(rootPath, maybePath)),
|
|
1546
|
+
);
|
|
1356
1547
|
maybePath = path.dirname(maybePath);
|
|
1357
1548
|
}
|
|
1358
1549
|
|
|
@@ -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 } | {
|
|
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
|
|
|
@@ -1420,10 +1614,24 @@ export class CachingHost implements Host {
|
|
|
1420
1614
|
}
|
|
1421
1615
|
|
|
1422
1616
|
writeFile(filePath: string, buffer: Buffer): void;
|
|
1423
|
-
writeFile(
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
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
|
|
|
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
|
|
|
1442
|
-
const maybeDirNode = this.#getNodeResolvingSymlinks(
|
|
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
|
|
|
1478
|
-
async #flushFileNode(
|
|
1688
|
+
async #flushFileNode(
|
|
1689
|
+
node: FileNode | FileStubNode | FileTombstoneNode,
|
|
1690
|
+
): Promise<unknown> {
|
|
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
|
|
|
1511
|
-
async #flushDirNode(
|
|
1723
|
+
async #flushDirNode(
|
|
1724
|
+
node: DirNode | DirStubNode | DirTombstoneNode,
|
|
1725
|
+
): Promise<unknown> {
|
|
1512
1726
|
if (!node.tombstone && 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<unknown>[] = [];
|
|
1522
1736
|
for (const child of node.dir.values()) {
|
|
1523
1737
|
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(
|
|
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-
|
|
1774
|
+
at 2025-01-22T17:39:00.274Z
|
|
1559
1775
|
</div>
|
|
1560
1776
|
<script src="prettify.js"></script>
|
|
1561
1777
|
<script>
|