1
1
import { glob } from 'glob' ;
2
2
import { join } from 'node:path' ;
3
- import type { Settings } from '../models' ;
3
+ import type { Logger , Settings } from '../models' ;
4
4
import { detectMonorepoTool } from './detect-tool' ;
5
5
import { getToolHandler } from './handlers' ;
6
6
import { listPackages } from './packages' ;
7
7
import type { MonorepoHandlerOptions , ProjectConfig } from './tools' ;
8
8
9
- // eslint-disable-next-line max-lines-per-function
10
9
export async function listMonorepoProjects (
11
10
settings : Settings ,
12
11
) : Promise < ProjectConfig [ ] > {
@@ -41,33 +40,19 @@ export async function listMonorepoProjects(
41
40
}
42
41
43
42
if ( settings . projects ) {
44
- const directories = await glob (
45
- settings . projects . map ( path => path . replace ( / \/ $ / , '/' ) ) ,
46
- { cwd : options . cwd } ,
47
- ) ;
48
- logger . info (
49
- `Found ${
50
- directories . length
51
- } project folders matching "${ settings . projects . join (
52
- ', ' ,
53
- ) } " from configuration`,
54
- ) ;
55
- logger . debug ( `Projects: ${ directories . join ( ', ' ) } ` ) ;
56
- return directories . toSorted ( ) . map ( directory => ( {
57
- name : directory ,
43
+ return listProjectsByGlobs ( {
44
+ patterns : settings . projects ,
45
+ cwd : options . cwd ,
58
46
bin : settings . bin ,
59
- directory : join ( options . cwd , directory ) ,
60
- } ) ) ;
47
+ logger ,
48
+ } ) ;
61
49
}
62
50
63
- const packages = await listPackages ( options . cwd ) ;
64
- logger . info ( `Found ${ packages . length } NPM packages in repository` ) ;
65
- logger . debug ( `Projects: ${ packages . map ( ( { name } ) => name ) . join ( ', ' ) } ` ) ;
66
- return packages . map ( ( { name, directory } ) => ( {
67
- name,
51
+ return listProjectsByNpmPackages ( {
52
+ cwd : options . cwd ,
68
53
bin : settings . bin ,
69
- directory ,
70
- } ) ) ;
54
+ logger ,
55
+ } ) ;
71
56
}
72
57
73
58
function createMonorepoHandlerOptions (
@@ -88,3 +73,49 @@ function createMonorepoHandlerOptions(
88
73
} ) ,
89
74
} ;
90
75
}
76
+
77
+ async function listProjectsByGlobs ( args : {
78
+ patterns : string [ ] ;
79
+ cwd : string ;
80
+ bin : string ;
81
+ logger : Logger ;
82
+ } ) : Promise < ProjectConfig [ ] > {
83
+ const { patterns, cwd, bin, logger } = args ;
84
+
85
+ const directories = await glob (
86
+ patterns . map ( path => path . replace ( / \/ $ / , '/' ) ) ,
87
+ { cwd } ,
88
+ ) ;
89
+
90
+ logger . info (
91
+ `Found ${ directories . length } project folders matching "${ patterns . join (
92
+ ', ' ,
93
+ ) } " from configuration`,
94
+ ) ;
95
+ logger . debug ( `Projects: ${ directories . join ( ', ' ) } ` ) ;
96
+
97
+ return directories . toSorted ( ) . map ( directory => ( {
98
+ name : directory ,
99
+ bin,
100
+ directory : join ( cwd , directory ) ,
101
+ } ) ) ;
102
+ }
103
+
104
+ async function listProjectsByNpmPackages ( args : {
105
+ cwd : string ;
106
+ bin : string ;
107
+ logger : Logger ;
108
+ } ) : Promise < ProjectConfig [ ] > {
109
+ const { cwd, bin, logger } = args ;
110
+
111
+ const packages = await listPackages ( cwd ) ;
112
+
113
+ logger . info ( `Found ${ packages . length } NPM packages in repository` ) ;
114
+ logger . debug ( `Projects: ${ packages . map ( ( { name } ) => name ) . join ( ', ' ) } ` ) ;
115
+
116
+ return packages . map ( ( { name, directory } ) => ( {
117
+ name,
118
+ bin,
119
+ directory,
120
+ } ) ) ;
121
+ }
0 commit comments