1- import { strict as assert } from 'assert' ;
2- import * as childProcess from 'child_process' ;
31import path from 'path' ;
42import { readFileSync } from 'fs' ;
3+ import { globSync } from 'glob' ;
54
65/*
76 Enumerates through
@@ -23,28 +22,32 @@ const PROJECT_ROOT = process.cwd();
2322const readJson = ( filePath ) => {
2423 return JSON . parse ( readFileSync ( filePath ) ) ;
2524} ;
26- const getProcessOutput = ( cmd , args ) => {
27- const result = childProcess . spawnSync ( cmd , args ) ;
28- assert ( ! result . error , result . error ) ;
29- return result . stdout . toString ( 'utf8' ) ;
25+
26+ const getPackages = ( ) => {
27+ const TOP = process . cwd ( ) ;
28+ const pj = readJson ( path . join ( TOP , 'package.json' ) ) ;
29+ return pj . workspaces
30+ . map ( ( wsGlob ) => globSync ( path . join ( wsGlob , 'package.json' ) ) )
31+ . flat ( )
32+ . map ( ( p ) => {
33+ const pkgInfo = readJson ( p ) ;
34+ pkgInfo . location = path . dirname ( p ) ;
35+ pkgInfo . relativeLocation = path . relative ( PROJECT_ROOT , pkgInfo . location ) ;
36+ return pkgInfo ;
37+ } ) ;
3038}
3139
32- const lernaList = JSON
33- . parse ( getProcessOutput ( 'npx' , [ 'lerna' , 'list' , '--json' , '-a' ] ) )
34- . map ( ( pkgInfo ) => {
35- pkgInfo . relativeLocation = path . relative ( PROJECT_ROOT , pkgInfo . location ) ;
36- return pkgInfo ;
37- } ) ;
40+ const pkgList = getPackages ( ) ;
3841const manifest = readJson ( '.release-please-manifest.json' ) ;
3942const config = readJson ( 'release-please-config.json' ) ;
4043
41- const lernaPackages = new Set (
42- lernaList . map ( ( pkgInfo ) => pkgInfo . relativeLocation )
44+ const packageLocations = new Set (
45+ pkgList . map ( ( pkgInfo ) => pkgInfo . relativeLocation )
4346) ;
4447const manifestPackages = new Set ( Object . keys ( manifest ) ) ;
4548const configPackages = new Set ( Object . keys ( config . packages ) ) ;
4649
47- lernaList . forEach ( ( pkgInfo ) => {
50+ pkgList . forEach ( ( pkgInfo ) => {
4851 const relativeLocation = pkgInfo . relativeLocation
4952 if ( pkgInfo . private ) {
5053 // Should be in config, with `skip-github-release` option.
@@ -71,14 +74,14 @@ lernaList.forEach((pkgInfo) => {
7174
7275manifestPackages . forEach ( ( relativeLocation ) => {
7376 logErrorIf (
74- ! lernaPackages . has ( relativeLocation ) ,
77+ ! packageLocations . has ( relativeLocation ) ,
7578 `Extraneous path ${ relativeLocation } in .release-please-manifest.json`
7679 ) ;
7780} ) ;
7881
7982configPackages . forEach ( ( relativeLocation ) => {
8083 logErrorIf (
81- ! lernaPackages . has ( relativeLocation ) ,
84+ ! packageLocations . has ( relativeLocation ) ,
8285 `Extraneous path ${ relativeLocation } in release-please-config.json`
8386 ) ;
8487} ) ;
0 commit comments