@@ -809,6 +809,147 @@ t.same(bundledEdge.explain(), {
809
809
from : bundleParent . explain ( ) ,
810
810
} , 'bundled edge.explain as expected' )
811
811
812
+ t . test ( 'override references find the correct root' , ( t ) => {
813
+ const overrides = new OverrideSet ( {
814
+ overrides : {
815
+ foo : '$foo' ,
816
+ } ,
817
+ } )
818
+
819
+ const root = {
820
+ name : 'root' ,
821
+ packageName : 'root' ,
822
+ edgesOut : new Map ( ) ,
823
+ edgesIn : new Set ( ) ,
824
+ explain : ( ) => 'root node explanation' ,
825
+ package : {
826
+ name : 'root' ,
827
+ version : '1.2.3' ,
828
+ dependencies : {
829
+ foo : '^1.0.0' ,
830
+ } ,
831
+ overrides : {
832
+ foo : '$foo' ,
833
+ } ,
834
+ } ,
835
+ get version ( ) {
836
+ return this . package . version
837
+ } ,
838
+ isTop : true ,
839
+ parent : null ,
840
+ overrides,
841
+ resolve ( n ) {
842
+ return n === 'foo' ? foo : null
843
+ } ,
844
+ addEdgeOut ( edge ) {
845
+ this . edgesOut . set ( edge . name , edge )
846
+ } ,
847
+ addEdgeIn ( edge ) {
848
+ this . edgesIn . add ( edge )
849
+ } ,
850
+ }
851
+
852
+ const foo = {
853
+ name : 'foo' ,
854
+ packageName : 'foo' ,
855
+ edgesOut : new Map ( ) ,
856
+ edgesIn : new Set ( ) ,
857
+ explain : ( ) => 'foo node explanation' ,
858
+ package : {
859
+ name : 'foo' ,
860
+ version : '1.2.3' ,
861
+ dependencies : { } ,
862
+ } ,
863
+ get version ( ) {
864
+ return this . package . version
865
+ } ,
866
+ parent : root ,
867
+ root : root ,
868
+ resolve ( n ) {
869
+ return n === 'bar' ? bar : this . parent . resolve ( n )
870
+ } ,
871
+ addEdgeOut ( edge ) {
872
+ this . edgesOut . set ( edge . name , edge )
873
+ } ,
874
+ addEdgeIn ( edge ) {
875
+ this . edgesIn . add ( edge )
876
+ } ,
877
+ }
878
+ foo . overrides = overrides . getNodeRule ( foo )
879
+
880
+ const bar = {
881
+ name : 'bar' ,
882
+ packageName : 'bar' ,
883
+ edgesOut : new Map ( ) ,
884
+ edgesIn : new Set ( ) ,
885
+ explain : ( ) => 'bar node explanation' ,
886
+ package : {
887
+ name : 'bar' ,
888
+ version : '1.2.3' ,
889
+ dependencies : {
890
+ foo : '^2.0.0' ,
891
+ } ,
892
+ } ,
893
+ get version ( ) {
894
+ return this . package . version
895
+ } ,
896
+ parent : foo ,
897
+ root : root ,
898
+ resolve ( n ) {
899
+ return this . parent . resolve ( n )
900
+ } ,
901
+ addEdgeOut ( edge ) {
902
+ this . edgesOut . set ( edge . name , edge )
903
+ } ,
904
+ addEdgeIn ( edge ) {
905
+ this . edgesIn . add ( edge )
906
+ } ,
907
+ }
908
+ bar . overrides = foo . overrides . getNodeRule ( bar )
909
+
910
+ const virtualBar = {
911
+ name : 'bar' ,
912
+ packageName : 'bar' ,
913
+ edgesOut : new Map ( ) ,
914
+ edgesIn : new Set ( ) ,
915
+ explain : ( ) => 'bar node explanation' ,
916
+ package : {
917
+ name : 'bar' ,
918
+ version : '1.2.3' ,
919
+ dependencies : {
920
+ foo : '^2.0.0' ,
921
+ } ,
922
+ } ,
923
+ parent : null ,
924
+ root : null ,
925
+ sourceReference : bar ,
926
+ get version ( ) {
927
+ return this . package . version
928
+ } ,
929
+ resolve ( n ) {
930
+ return bar . resolve ( n )
931
+ } ,
932
+ addEdgeOut ( edge ) {
933
+ this . edgesOut . set ( edge . name , edge )
934
+ } ,
935
+ addEdgeIn ( edge ) {
936
+ this . edgesIn . add ( edge )
937
+ } ,
938
+ }
939
+ virtualBar . overrides = overrides
940
+
941
+ const edge = new Edge ( {
942
+ from : virtualBar ,
943
+ type : 'prod' ,
944
+ spec : '^2.0.0' ,
945
+ name : 'foo' ,
946
+ overrides : overrides . getEdgeRule ( { name : 'foo' , spec : '^2.0.0' } ) ,
947
+ } )
948
+
949
+ t . ok ( edge . valid , 'edge is valid' )
950
+ t . end ( )
951
+ } )
952
+
812
953
t . test ( 'shrinkwrapped and bundled deps are not overridden and remain valid' , ( t ) => {
813
954
const overrides = new OverrideSet ( {
814
955
overrides : {
0 commit comments