@@ -4,7 +4,7 @@ import { makePackageInfos, type PartialPackageInfos } from '../../__fixtures__/p
44import { consideredDependencies } from '../../types/PackageInfo' ;
55import { initMockLogs } from '../../__fixtures__/mockLogs' ;
66
7- type PartialBumpInfo = Parameters < typeof setDependentVersions > [ 0 ] ;
7+ type PartialBumpInfo = Parameters < typeof setDependentVersions > [ 0 ] [ 'bumpInfo' ] ;
88
99describe ( 'setDependentVersions' , ( ) => {
1010 const logs = initMockLogs ( { alsoLog : [ 'warn' , 'error' ] } ) ;
@@ -35,7 +35,7 @@ describe('setDependentVersions', () => {
3535 modifiedPackages : new Set ( [ 'pkg-a' ] ) ,
3636 } ) ;
3737
38- const result = setDependentVersions ( bumpInfo , { } ) ;
38+ const result = setDependentVersions ( { bumpInfo, options : { } } ) ;
3939
4040 expect ( result ) . toEqual ( { } ) ;
4141 } ) ;
@@ -46,7 +46,7 @@ describe('setDependentVersions', () => {
4646 modifiedPackages : new Set ( ) ,
4747 } ) ;
4848
49- const result = setDependentVersions ( bumpInfo , { } ) ;
49+ const result = setDependentVersions ( { bumpInfo, options : { } } ) ;
5050
5151 expect ( result ) . toEqual ( { } ) ;
5252 } ) ;
@@ -61,7 +61,7 @@ describe('setDependentVersions', () => {
6161 } ,
6262 } ) ;
6363
64- const result = setDependentVersions ( bumpInfo , { } ) ;
64+ const result = setDependentVersions ( { bumpInfo, options : { } } ) ;
6565
6666 expect ( bumpInfo . packageInfos [ 'pkg-b' ] . dependencies ! [ 'pkg-a' ] ) . toBe ( '^2.0.0' ) ;
6767 expect ( result ) . toEqual ( { 'pkg-b' : new Set ( [ 'pkg-a' ] ) } ) ;
@@ -78,7 +78,7 @@ describe('setDependentVersions', () => {
7878 } ,
7979 } ) ;
8080
81- const result = setDependentVersions ( bumpInfo , { } ) ;
81+ const result = setDependentVersions ( { bumpInfo, options : { } } ) ;
8282
8383 expect ( bumpInfo . packageInfos [ 'pkg-b' ] . dependencies ! [ 'pkg-a' ] ) . toBe ( '^1.1.0' ) ;
8484 expect ( bumpInfo . packageInfos [ 'pkg-c' ] . dependencies ! [ 'pkg-a' ] ) . toBe ( '~1.1.0' ) ;
@@ -93,7 +93,7 @@ describe('setDependentVersions', () => {
9393 } ,
9494 } ) ;
9595
96- const result = setDependentVersions ( bumpInfo , { } ) ;
96+ const result = setDependentVersions ( { bumpInfo, options : { } } ) ;
9797
9898 expect ( bumpInfo . packageInfos [ 'pkg-b' ] [ depType ] ! [ 'pkg-a' ] ) . toBe ( '^1.1.0' ) ;
9999 expect ( result ) . toEqual ( { 'pkg-b' : new Set ( [ 'pkg-a' ] ) } ) ;
@@ -109,7 +109,7 @@ describe('setDependentVersions', () => {
109109 } ,
110110 } ) ;
111111
112- const result = setDependentVersions ( bumpInfo , { } ) ;
112+ const result = setDependentVersions ( { bumpInfo, options : { } } ) ;
113113
114114 expect ( bumpInfo . packageInfos [ 'pkg-a' ] . dependencies ! [ 'external' ] ) . toBe ( '^1.0.0' ) ;
115115 expect ( result ) . toEqual ( { } ) ;
@@ -124,7 +124,7 @@ describe('setDependentVersions', () => {
124124 } ,
125125 } ) ;
126126
127- const result = setDependentVersions ( bumpInfo , { } ) ;
127+ const result = setDependentVersions ( { bumpInfo, options : { } } ) ;
128128
129129 expect ( bumpInfo . packageInfos [ 'pkg-c' ] . dependencies ! [ 'pkg-a' ] ) . toBe ( '^1.0.1' ) ;
130130 expect ( bumpInfo . packageInfos [ 'pkg-c' ] . peerDependencies ! [ 'pkg-b' ] ) . toBe ( '^1.1.0' ) ;
@@ -139,44 +139,90 @@ describe('setDependentVersions', () => {
139139 } ,
140140 } ) ;
141141
142- setDependentVersions ( bumpInfo , { verbose : true } ) ;
142+ setDependentVersions ( { bumpInfo, options : { verbose : true } } ) ;
143143
144144 expect ( logs . mocks . log ) . toHaveBeenCalledWith ( 'pkg-b needs to be bumped because pkg-a ^1.0.0 -> ^2.0.0' ) ;
145145 } ) ;
146146
147- // Documenting this issue
148147 // https://github.com/microsoft/beachball/issues/981
149- it ( 'currently misses bumps of workspace: ranges' , ( ) => {
148+ it . each ( [ 'workspace:*' , 'workspace:^' , 'workspace:~' ] ) (
149+ 'records dependent bumps for %s ranges (range string unchanged)' ,
150+ workspaceVersion => {
151+ const bumpInfo = makeBumpInfo ( {
152+ packageInfos : {
153+ 'pkg-a' : { version : '1.1.0' } ,
154+ 'pkg-b' : { version : '1.0.1' , dependencies : { 'pkg-a' : workspaceVersion } } ,
155+ } ,
156+ } ) ;
157+
158+ const result = setDependentVersions ( { bumpInfo, options : { } } ) ;
159+
160+ expect ( bumpInfo . packageInfos [ 'pkg-b' ] . dependencies ! [ 'pkg-a' ] ) . toBe ( workspaceVersion ) ;
161+ expect ( result ) . toEqual ( { 'pkg-b' : new Set ( [ 'pkg-a' ] ) } ) ;
162+ }
163+ ) ;
164+
165+ // https://github.com/microsoft/beachball/issues/981
166+ it . each ( [ 'catalog:' , 'catalog:foo' ] ) (
167+ 'records dependent bumps for %s ranges (range string unchanged)' ,
168+ catalogVersion => {
169+ const bumpInfo = makeBumpInfo ( {
170+ packageInfos : {
171+ 'pkg-a' : { version : '1.1.0' } ,
172+ 'pkg-b' : { version : '1.0.1' , dependencies : { 'pkg-a' : catalogVersion } } ,
173+ } ,
174+ } ) ;
175+
176+ const result = setDependentVersions ( { bumpInfo, options : { } } ) ;
177+
178+ expect ( bumpInfo . packageInfos [ 'pkg-b' ] . dependencies ! [ 'pkg-a' ] ) . toBe ( catalogVersion ) ;
179+ expect ( result ) . toEqual ( { 'pkg-b' : new Set ( [ 'pkg-a' ] ) } ) ;
180+ }
181+ ) ;
182+
183+ // file: deps are intentionally excluded — see #1080
184+ it ( 'does not record dependent bumps for file: ranges' , ( ) => {
185+ const bumpInfo = makeBumpInfo ( {
186+ packageInfos : {
187+ 'pkg-a' : { version : '1.1.0' } ,
188+ 'pkg-b' : { version : '1.0.1' , dependencies : { 'pkg-a' : 'file:../pkg-a' } } ,
189+ } ,
190+ } ) ;
191+
192+ const result = setDependentVersions ( { bumpInfo, options : { } } ) ;
193+
194+ expect ( bumpInfo . packageInfos [ 'pkg-b' ] . dependencies ! [ 'pkg-a' ] ) . toBe ( 'file:../pkg-a' ) ;
195+ expect ( result ) . toEqual ( { } ) ;
196+ } ) ;
197+
198+ it ( 'does not record dependent bumps for workspace:/catalog: with skipImplicitBumps: true' , ( ) => {
150199 const bumpInfo = makeBumpInfo ( {
151200 packageInfos : {
152201 'pkg-a' : { version : '1.1.0' } ,
153- // * means an exact dependency and should definitely cause a bump
154202 'pkg-b' : { version : '1.0.1' , dependencies : { 'pkg-a' : 'workspace:*' } } ,
203+ 'pkg-c' : { version : '1.0.1' , dependencies : { 'pkg-a' : 'catalog:foo' } } ,
155204 } ,
156205 } ) ;
157206
158- const result = setDependentVersions ( bumpInfo , { } ) ;
207+ const result = setDependentVersions ( { bumpInfo, options : { } , skipImplicitBumps : true } ) ;
159208
160209 expect ( bumpInfo . packageInfos [ 'pkg-b' ] . dependencies ! [ 'pkg-a' ] ) . toBe ( 'workspace:*' ) ;
161- expect ( result ) . toEqual ( { } ) ; // should have pkg-b depending on pkg-a
210+ expect ( bumpInfo . packageInfos [ 'pkg-c' ] . dependencies ! [ 'pkg-a' ] ) . toBe ( 'catalog:foo' ) ;
211+ expect ( result ) . toEqual ( { } ) ;
162212 } ) ;
163213
164- // Documenting this issue
165- // https://github.com/microsoft/beachball/issues/981
166- it ( 'currently misses bumps of catalog: ranges' , ( ) => {
214+ it ( 'logs a different verbose message when the range is unchanged' , ( ) => {
167215 const bumpInfo = makeBumpInfo ( {
168216 packageInfos : {
169217 'pkg-a' : { version : '1.1.0' } ,
170- // Assume there's a catalog like this:
171- // catalog:
172- // pkg-a: ^1.1.0
173- 'pkg-b' : { version : '1.0.1' , dependencies : { 'pkg-a' : 'catalog:' } } ,
218+ 'pkg-b' : { version : '1.0.1' , dependencies : { 'pkg-a' : 'workspace:*' } } ,
174219 } ,
175220 } ) ;
176221
177- const result = setDependentVersions ( bumpInfo , { } ) ;
222+ setDependentVersions ( { bumpInfo, options : { verbose : true } } ) ;
178223
179- expect ( bumpInfo . packageInfos [ 'pkg-b' ] . dependencies ! [ 'pkg-a' ] ) . toBe ( 'catalog:' ) ;
180- expect ( result ) . toEqual ( { } ) ; // should have pkg-b depending on pkg-a
224+ expect ( logs . mocks . log ) . toHaveBeenCalledWith (
225+ 'pkg-b needs a changelog entry because pkg-a was bumped to 1.1.0 (range workspace:* unchanged)'
226+ ) ;
181227 } ) ;
182228} ) ;
0 commit comments