@@ -416,6 +416,132 @@ describe('scanForIntents', () => {
416416 expect ( versionWarning ) . toContain ( 'across 3 versions' )
417417 expect ( versionWarning ) . toContain ( 'Using 5.0.0' )
418418 } )
419+
420+ it ( 'prefers stable releases over prereleases at the same depth' , async ( ) => {
421+ writeJson ( join ( root , 'package.json' ) , {
422+ name : 'app' ,
423+ private : true ,
424+ dependencies : {
425+ 'consumer-a' : '1.0.0' ,
426+ 'consumer-b' : '1.0.0' ,
427+ } ,
428+ } )
429+
430+ const consumerADir = createDir ( root , 'node_modules' , 'consumer-a' )
431+ const consumerBDir = createDir ( root , 'node_modules' , 'consumer-b' )
432+
433+ writeJson ( join ( consumerADir , 'package.json' ) , {
434+ name : 'consumer-a' ,
435+ version : '1.0.0' ,
436+ dependencies : { '@tanstack/query' : '5.0.0-beta.1' } ,
437+ } )
438+ writeJson ( join ( consumerBDir , 'package.json' ) , {
439+ name : 'consumer-b' ,
440+ version : '1.0.0' ,
441+ dependencies : { '@tanstack/query' : '5.0.0' } ,
442+ } )
443+
444+ const prereleaseDir = createDir (
445+ consumerADir ,
446+ 'node_modules' ,
447+ '@tanstack' ,
448+ 'query' ,
449+ )
450+ const stableDir = createDir (
451+ consumerBDir ,
452+ 'node_modules' ,
453+ '@tanstack' ,
454+ 'query' ,
455+ )
456+
457+ writeJson ( join ( prereleaseDir , 'package.json' ) , {
458+ name : '@tanstack/query' ,
459+ version : '5.0.0-beta.1' ,
460+ intent : { version : 1 , repo : 'TanStack/query' , docs : 'docs/' } ,
461+ } )
462+ writeJson ( join ( stableDir , 'package.json' ) , {
463+ name : '@tanstack/query' ,
464+ version : '5.0.0' ,
465+ intent : { version : 1 , repo : 'TanStack/query' , docs : 'docs/' } ,
466+ } )
467+ writeSkillMd ( createDir ( prereleaseDir , 'skills' , 'fetching' ) , {
468+ name : 'fetching' ,
469+ description : 'Prerelease query skill' ,
470+ } )
471+ writeSkillMd ( createDir ( stableDir , 'skills' , 'fetching' ) , {
472+ name : 'fetching' ,
473+ description : 'Stable query skill' ,
474+ } )
475+
476+ const result = await scanForIntents ( root )
477+
478+ expect ( result . packages ) . toHaveLength ( 1 )
479+ expect ( result . packages [ 0 ] ! . version ) . toBe ( '5.0.0' )
480+ expect ( result . packages [ 0 ] ! . packageRoot ) . toBe ( stableDir )
481+ } )
482+
483+ it ( 'prefers valid semver versions over invalid ones at the same depth' , async ( ) => {
484+ writeJson ( join ( root , 'package.json' ) , {
485+ name : 'app' ,
486+ private : true ,
487+ dependencies : {
488+ 'consumer-a' : '1.0.0' ,
489+ 'consumer-b' : '1.0.0' ,
490+ } ,
491+ } )
492+
493+ const consumerADir = createDir ( root , 'node_modules' , 'consumer-a' )
494+ const consumerBDir = createDir ( root , 'node_modules' , 'consumer-b' )
495+
496+ writeJson ( join ( consumerADir , 'package.json' ) , {
497+ name : 'consumer-a' ,
498+ version : '1.0.0' ,
499+ dependencies : { '@tanstack/query' : 'workspace-dev' } ,
500+ } )
501+ writeJson ( join ( consumerBDir , 'package.json' ) , {
502+ name : 'consumer-b' ,
503+ version : '1.0.0' ,
504+ dependencies : { '@tanstack/query' : '5.0.0' } ,
505+ } )
506+
507+ const invalidDir = createDir (
508+ consumerADir ,
509+ 'node_modules' ,
510+ '@tanstack' ,
511+ 'query' ,
512+ )
513+ const validDir = createDir (
514+ consumerBDir ,
515+ 'node_modules' ,
516+ '@tanstack' ,
517+ 'query' ,
518+ )
519+
520+ writeJson ( join ( invalidDir , 'package.json' ) , {
521+ name : '@tanstack/query' ,
522+ version : 'workspace-dev' ,
523+ intent : { version : 1 , repo : 'TanStack/query' , docs : 'docs/' } ,
524+ } )
525+ writeJson ( join ( validDir , 'package.json' ) , {
526+ name : '@tanstack/query' ,
527+ version : '5.0.0' ,
528+ intent : { version : 1 , repo : 'TanStack/query' , docs : 'docs/' } ,
529+ } )
530+ writeSkillMd ( createDir ( invalidDir , 'skills' , 'fetching' ) , {
531+ name : 'fetching' ,
532+ description : 'Invalid version query skill' ,
533+ } )
534+ writeSkillMd ( createDir ( validDir , 'skills' , 'fetching' ) , {
535+ name : 'fetching' ,
536+ description : 'Valid version query skill' ,
537+ } )
538+
539+ const result = await scanForIntents ( root )
540+
541+ expect ( result . packages ) . toHaveLength ( 1 )
542+ expect ( result . packages [ 0 ] ! . version ) . toBe ( '5.0.0' )
543+ expect ( result . packages [ 0 ] ! . packageRoot ) . toBe ( validDir )
544+ } )
419545} )
420546
421547describe ( 'package manager detection' , ( ) => {
0 commit comments