@@ -332,6 +332,14 @@ export function findBinary (bin) {
332332 return bin
333333}
334334
335+ /**
336+ * @param {string } projectDir
337+ */
338+ export const listWorkspaces = async ( projectDir ) => {
339+ const manifest = fs . readJSONSync ( path . join ( projectDir , 'package.json' ) )
340+ return manifest . workspaces ?? undefined
341+ }
342+
335343/**
336344 * @typedef {object } Project
337345 * @property {any } manifest
@@ -341,21 +349,20 @@ export function findBinary (bin) {
341349 */
342350
343351/**
344- * @param {string } projectDir
345352 * @param {(project: Project) => Promise<void> } fn
346353 * @param {object } [opts]
354+ * @param {string[]? } [opts.workspaces]
347355 * @param {number } [opts.concurrency]
348356 */
349- export async function everyMonorepoProject ( projectDir , fn , opts ) {
350- const manifest = fs . readJSONSync ( path . join ( projectDir , 'package.json' ) )
351- const workspaces = manifest . workspaces
352-
353- if ( ! workspaces || ! Array . isArray ( workspaces ) ) {
357+ export async function everyMonorepoProject ( fn , opts ) {
358+ const workspaces = ( opts ?. workspaces ?? await listWorkspaces ( process . cwd ( ) ) ) . filter ( ( /** @type {string | null } */ workspace ) => workspace != null )
359+ if ( ! workspaces || ! Array . isArray ( workspaces ) || workspaces . length === 0 ) {
354360 throw new Error ( 'No monorepo workspaces found' )
355361 }
356362
357363 /** @type {Record<string, Project> } */
358- const projects = await parseProjects ( projectDir , workspaces )
364+
365+ const projects = await parseProjects ( workspaces )
359366
360367 checkForCircularDependencies ( projects )
361368
@@ -398,25 +405,23 @@ export async function everyMonorepoProject (projectDir, fn, opts) {
398405}
399406
400407/**
401- *
402- * @param {string } projectDir
403408 * @param {string[] } workspaces
409+ * @param {string | undefined } cwd
404410 */
405- export const getSubprojectDirectories = async ( projectDir , workspaces ) => fg . glob ( workspaces , {
406- cwd : projectDir ,
411+ export const getSubprojectDirectories = async ( workspaces , cwd = process . cwd ( ) ) => fg . glob ( workspaces , {
412+ cwd,
407413 onlyFiles : false
408414} )
409415
410416/**
411417 *
412- * @param {string } projectDir
413418 * @param {string[] } workspaces
414419 */
415- export async function parseProjects ( projectDir , workspaces ) {
420+ export async function parseProjects ( workspaces ) {
416421 /** @type {Record<string, Project> } */
417422 const projects = { }
418423
419- for ( const subProjectDir of await getSubprojectDirectories ( projectDir , workspaces ) ) {
424+ for ( const subProjectDir of await getSubprojectDirectories ( workspaces ) ) {
420425 const stat = fs . statSync ( subProjectDir )
421426
422427 if ( ! stat . isDirectory ( ) ) {
0 commit comments