1- import type { PackageInfo } from '../types'
1+ import type { GitCommit } from 'changelogen'
2+ import type { BumpConfig , PackageInfo , PackageWithCommits } from '../types'
23import { existsSync , readFileSync } from 'node:fs'
34import { join } from 'node:path'
45import { logger } from '@maz-ui/node'
@@ -10,12 +11,13 @@ export interface PackageWithDeps extends PackageInfo {
1011export interface PackageToBump extends PackageInfo {
1112 reason : 'commits' | 'dependency'
1213 dependencyChain ?: string [ ]
14+ commits : GitCommit [ ]
1315}
1416
1517/**
1618 * Get workspace dependencies of a package (only dependencies and peerDependencies, not devDependencies)
1719 */
18- export function getPackageDependencies ( packagePath : string , allPackageNames : Set < string > ) : string [ ] {
20+ export function getPackageDependencies ( packagePath : string , allPackageNames : Set < string > , dependencyTypes : BumpConfig [ 'dependencyTypes' ] ) : string [ ] {
1921 const packageJsonPath = join ( packagePath , 'package.json' )
2022 if ( ! existsSync ( packageJsonPath ) ) {
2123 return [ ]
@@ -26,8 +28,9 @@ export function getPackageDependencies(packagePath: string, allPackageNames: Set
2628
2729 // Only check dependencies and peerDependencies (not devDependencies per industry best practices)
2830 const allDeps = {
29- ...packageJson . dependencies ,
30- ...packageJson . peerDependencies ,
31+ ...( dependencyTypes ?. includes ( 'dependencies' ) ? packageJson . dependencies : { } ) ,
32+ ...( dependencyTypes ?. includes ( 'peerDependencies' ) ? packageJson . peerDependencies : { } ) ,
33+ ...( dependencyTypes ?. includes ( 'devDependencies' ) ? packageJson . devDependencies : { } ) ,
3134 }
3235
3336 for ( const depName of Object . keys ( allDeps ) ) {
@@ -42,12 +45,12 @@ export function getPackageDependencies(packagePath: string, allPackageNames: Set
4245/**
4346 * Transform packages array into PackageWithDeps with their workspace dependencies
4447 */
45- export function getPackagesWithDependencies ( packages : PackageInfo [ ] ) : PackageWithDeps [ ] {
48+ export function getPackagesWithDependencies ( packages : PackageInfo [ ] , dependencyTypes : BumpConfig [ 'dependencyTypes' ] ) : PackageWithDeps [ ] {
4649 const allPackageNames = new Set ( packages . map ( p => p . name ) )
4750
4851 return packages . map ( pkg => ( {
4952 ...pkg ,
50- dependencies : getPackageDependencies ( pkg . path , allPackageNames ) ,
53+ dependencies : getPackageDependencies ( pkg . path , allPackageNames , dependencyTypes ) ,
5154 } ) )
5255}
5356
@@ -64,29 +67,35 @@ export function getDependentsOf(packageName: string, allPackages: PackageWithDep
6467 * Recursively expand packages to bump with all their dependents (transitive)
6568 * Returns packages with reason for bumping and dependency chain for traceability
6669 */
67- export function expandPackagesToBumpWithDependents (
68- packagesToBump : PackageInfo [ ] ,
69- allPackages : PackageInfo [ ] ,
70- ) : PackageToBump [ ] {
71- const packagesWithDeps = getPackagesWithDependencies ( allPackages )
70+ export function expandPackagesToBumpWithDependents ( {
71+ packagesWithCommits,
72+ allPackages,
73+ dependencyTypes,
74+ } : {
75+ packagesWithCommits : PackageWithCommits [ ]
76+ allPackages : PackageInfo [ ]
77+ dependencyTypes : BumpConfig [ 'dependencyTypes' ]
78+ } ) : PackageToBump [ ] {
79+ const packagesWithDeps = getPackagesWithDependencies ( allPackages , dependencyTypes )
7280 const result = new Map < string , PackageToBump > ( )
7381
74- // Add initial packages (those with commits)
75- for ( const pkg of packagesToBump ) {
82+ logger . debug ( `Expanding packages to bump: ${ packagesWithCommits . length } packages with commits, ${ allPackages . length } total packages` )
83+
84+ for ( const pkg of packagesWithCommits ) {
7685 result . set ( pkg . name , {
7786 ...pkg ,
7887 reason : 'commits' ,
88+ commits : pkg . commits ,
7989 } )
8090 }
8191
82- // Track packages to process for finding dependents
83- const toProcess = [ ...packagesToBump . map ( p => p . name ) ]
92+ const toProcess = [ ...packagesWithCommits . map ( p => p . name ) ]
8493 const processed = new Set < string > ( )
8594
8695 while ( toProcess . length > 0 ) {
87- const currentPkgName = toProcess . shift ( ) !
96+ const currentPkgName = toProcess . shift ( )
8897
89- if ( processed . has ( currentPkgName ) ) {
98+ if ( ! currentPkgName || processed . has ( currentPkgName ) ) {
9099 continue
91100 }
92101
@@ -107,9 +116,9 @@ export function expandPackagesToBumpWithDependents(
107116 ...packageInfo ,
108117 reason : 'dependency' ,
109118 dependencyChain : chain ,
119+ commits : [ ] ,
110120 } )
111121
112- // Add to processing queue to find transitive dependents
113122 toProcess . push ( dependent . name )
114123
115124 logger . debug ( `${ dependent . name } will be bumped (depends on ${ chain . join ( ' → ' ) } )` )
0 commit comments