@@ -228,40 +228,21 @@ describe('performPublishOverrides', () => {
228228 return cloneObject ( packageJsons [ pkg . name ] ) ;
229229 }
230230 }
231- throw new Error ( `not found : ${ path } ` ) ;
231+ throw new Error ( `Path not mocked for readJson : ${ path } ` ) ;
232232 } ) as typeof _readJson ) ;
233233
234234 return { packageInfos, packageJsons } ;
235235 }
236236
237- it ( 'overrides accepted publishConfig keys and preserves values not specified' , ( ) => {
238- const publishConfig : PublishConfig = {
239- main : 'lib/index.js' ,
240- types : 'lib/index.d.ts' ,
241- } ;
242- const { packageInfos, packageJsons } = createFullFixture ( { foo : { publishConfig } } ) ;
243- expect ( packageJsons . foo ) . not . toMatchObject ( publishConfig ) ;
237+ it ( 'does not write package.json if no overrides needed' , ( ) => {
238+ const { packageInfos } = createFullFixture ( { foo : { } } ) ;
244239
245240 performPublishOverrides ( [ 'foo' ] , packageInfos , undefined ) ;
246241
247- expect ( mockWriteJson ) . toHaveBeenCalledTimes ( 1 ) ;
248- expect ( publishConfig ) . toEqual ( {
249- main : 'lib/index.js' ,
250- types : 'lib/index.d.ts' ,
251- } ) ;
252- expect ( mockWriteJson ) . toHaveBeenCalledWith (
253- packageInfos . foo . packageJsonPath ,
254- // package.json data with publishConfig values promoted to root,
255- // and any original values not specified in publishConfig preserved
256- {
257- ...packageJsons . foo ,
258- ...publishConfig ,
259- publishConfig : { } ,
260- }
261- ) ;
242+ expect ( mockWriteJson ) . not . toHaveBeenCalled ( ) ;
262243 } ) ;
263244
264- it ( 'does not override non-accepted publishConfig keys' , ( ) => {
245+ it ( 'does not write package.json if publishConfig has only non-accepted keys' , ( ) => {
265246 const publishConfig = { version : '1.2.3' , extra : 'nope' } as unknown as PublishConfig ;
266247 const { packageInfos, packageJsons } = createFullFixture ( { foo : { publishConfig } } ) ;
267248 expect ( packageJsons . foo ) . not . toMatchObject ( publishConfig ) ;
@@ -271,23 +252,27 @@ describe('performPublishOverrides', () => {
271252 expect ( mockWriteJson ) . not . toHaveBeenCalled ( ) ;
272253 } ) ;
273254
274- it ( 'performs overrides for multiple packages' , ( ) => {
255+ it ( 'writes package.json for multiple packages with publishConfig overrides' , ( ) => {
256+ const unsupportedConfig = { version : '1.2.3' , extra : 'nope' } as unknown as PublishConfig ;
275257 const { packageInfos, packageJsons } = createFullFixture ( {
276- foo : { publishConfig : { main : 'lib/index.js' } } ,
258+ foo : { bin : './bin.js' , publishConfig : { main : 'lib/index.js' , ... unsupportedConfig } } ,
277259 bar : { publishConfig : { types : 'lib/index.d.ts' } } ,
260+ baz : { } ,
278261 } ) ;
279- const originalFoo = packageJsons . foo ;
280- const originalBar = packageJsons . bar ;
262+ const { foo : originalFoo , bar : originalBar } = packageJsons ;
281263 expect ( originalFoo ) . not . toMatchObject ( originalFoo . publishConfig ! ) ;
282264 expect ( originalBar ) . not . toMatchObject ( originalBar . publishConfig ! ) ;
283265
284- performPublishOverrides ( [ 'foo' , 'bar' ] , packageInfos , undefined ) ;
266+ performPublishOverrides ( [ 'foo' , 'bar' , 'baz' ] , packageInfos , undefined ) ;
285267
268+ // only called for packages that need updates, not baz
286269 expect ( mockWriteJson ) . toHaveBeenCalledTimes ( 2 ) ;
287270 expect ( mockWriteJson ) . toHaveBeenCalledWith ( packageInfos . foo . packageJsonPath , {
271+ // package.json data with publishConfig values promoted to root,
272+ // and any original values not specified in publishConfig preserved
288273 ...originalFoo ,
289- ... originalFoo . publishConfig ,
290- publishConfig : { } ,
274+ main : 'lib/index.js' ,
275+ publishConfig : unsupportedConfig , // unsupported keys remain in publishConfig
291276 } ) ;
292277 expect ( mockWriteJson ) . toHaveBeenCalledWith ( packageInfos . bar . packageJsonPath , {
293278 ...originalBar ,
@@ -296,26 +281,44 @@ describe('performPublishOverrides', () => {
296281 } ) ;
297282 } ) ;
298283
299- it . each ( [
284+ it . each < [ string , string ] > ( [
300285 [ 'workspace:*' , '1.0.0' ] ,
301- [ 'workspace:~' , '~1.0.0' ] ,
302- [ 'workspace:^' , '^1.0.0' ] ,
303- [ 'workspace:~1.0.0' , '~1.0.0' ] ,
304286 [ 'workspace:^1.0.0' , '^1.0.0' ] ,
305- ] ) ( 'overrides %s dependency versions ' , ( dependencyVersion , expectedPublishVersion ) => {
287+ ] ) ( 'writes package.json with %s dependency version updates ' , ( depVersion , expectedVersion ) => {
306288 const { packageInfos, packageJsons } = createFullFixture ( {
307289 foo : { version : '1.0.0' } ,
308- bar : { version : '2.0.0' , dependencies : { foo : dependencyVersion } } ,
290+ bar : { version : '2.0.0' , dependencies : { foo : depVersion } } ,
309291 } ) ;
310- expect ( packageJsons . bar . dependencies ! . foo ) . toBe ( dependencyVersion ) ;
292+ expect ( packageJsons . bar . dependencies ! . foo ) . toBe ( depVersion ) ;
311293
312294 performPublishOverrides ( [ 'bar' ] , packageInfos , undefined ) ;
313295
314296 expect ( mockWriteJson ) . toHaveBeenCalledTimes ( 1 ) ;
315297 expect ( mockWriteJson ) . toHaveBeenCalledWith (
316298 packageInfos . bar . packageJsonPath ,
317299 expect . objectContaining ( {
318- dependencies : { foo : expectedPublishVersion } ,
300+ dependencies : { foo : expectedVersion } ,
301+ } )
302+ ) ;
303+ } ) ;
304+
305+ it ( 'writes package.json with catalog dependency version updates' , ( ) => {
306+ const { packageInfos, packageJsons } = createFullFixture ( {
307+ foo : { version : '1.0.0' } ,
308+ bar : { version : '2.0.0' , dependencies : { foo : 'catalog:' , react : 'catalog:' , extra : '~1.2.3' } } ,
309+ } ) ;
310+ expect ( packageJsons . bar . dependencies ! . react ) . toBe ( 'catalog:' ) ;
311+ const catalogs : Catalogs = {
312+ default : { foo : 'workspace:^' , react : '^18.0.0' } ,
313+ } ;
314+
315+ performPublishOverrides ( [ 'bar' ] , packageInfos , catalogs ) ;
316+
317+ expect ( mockWriteJson ) . toHaveBeenCalledTimes ( 1 ) ;
318+ expect ( mockWriteJson ) . toHaveBeenCalledWith (
319+ packageInfos . bar . packageJsonPath ,
320+ expect . objectContaining ( {
321+ dependencies : { foo : '^1.0.0' , react : '^18.0.0' , extra : '~1.2.3' } ,
319322 } )
320323 ) ;
321324 } ) ;
0 commit comments