@@ -16,29 +16,54 @@ import { mergeConfigs } from './utils/merge-configs';
1616import { fetchConfigsForWorkspaces , getPackageJson } from './utils/file-system' ;
1717import { getConfigPrompt , getMultiConfigPrompt } from './prompt' ;
1818
19- const ExperimentalModuleLoader = ( ) => ( {
20- install : async ( packageName : string ) =>
21- await installPackage ( packageName , {
22- cwd : __dirname ,
23- packageManager : 'npm' ,
24- additionalArgs : [ '--force' ] ,
25- } ) ,
26- require : ( packageName : string ) => require ( packageName ) ,
27- getInfo : ( packageName : string ) => {
19+ const ExperimentalModuleLoader = ( ) => {
20+ const getInfo = ( packageName : string ) => {
2821 const entryPath = require . resolve ( packageName ) ;
2922 const location = entryPath . split ( packageName ) [ 0 ] + packageName ;
30- const packageJsonRaw = fs . readFileSync (
23+ const pkgJsonRaw = fs . readFileSync (
3124 path . join ( location , 'package.json' ) ,
3225 'utf8' ,
3326 ) ;
27+ const pkgJson = JSON . parse ( pkgJsonRaw ) ;
3428
3529 return {
3630 location,
3731 entryPath,
38- pkgJson : JSON . parse ( packageJsonRaw ) ,
32+ pkgJson,
3933 } ;
40- } ,
41- } ) ;
34+ } ;
35+
36+ const install = async ( packageName : string ) => {
37+ await installPackage ( packageName , {
38+ cwd : __dirname ,
39+ packageManager : 'npm' ,
40+ additionalArgs : [ '--force' ] ,
41+ } ) ;
42+
43+ const { pkgJson } = getInfo ( packageName ) ;
44+
45+ // Install whitelisted devDependencies
46+ if ( pkgJson ?. hypermod ?. dependencies ) {
47+ await Promise . all (
48+ pkgJson . hypermod . dependencies . map ( ( dep : string ) => {
49+ const version = pkgJson . devDependencies [ dep ] ;
50+ if ( ! version ) return ;
51+ return installPackage ( `${ dep } @${ version } ` , {
52+ cwd : __dirname ,
53+ packageManager : 'npm' ,
54+ additionalArgs : [ '--force' ] ,
55+ } ) ;
56+ } ) ,
57+ ) ;
58+ }
59+ } ;
60+
61+ return {
62+ install,
63+ getInfo,
64+ require : ( packageName : string ) => require ( packageName ) ,
65+ } ;
66+ } ;
4267
4368export default async function main (
4469 paths : string [ ] ,
0 commit comments