18d307f52SEvan Baconimport resolveFrom from 'resolve-from'; 28d307f52SEvan Bacon 38d307f52SEvan Baconimport { CommandError } from '../../../utils/errors'; 48d307f52SEvan Bacon 58d307f52SEvan Bacon// These resolvers enable us to test the CLI in older projects. 68d307f52SEvan Bacon// We may be able to get rid of this in the future. 78d307f52SEvan Bacon// TODO: Maybe combine with AsyncResolver? 88d307f52SEvan Baconclass WebpackImportError extends CommandError { 98d307f52SEvan Bacon constructor(projectRoot: string, moduleId: string) { 10*d04463cbSEvan Bacon super( 11*d04463cbSEvan Bacon 'WEBPACK_IMPORT', 12*d04463cbSEvan Bacon `Missing package "${moduleId}" in the project. Try running the command again. (cwd: ${projectRoot})` 13*d04463cbSEvan Bacon ); 148d307f52SEvan Bacon } 158d307f52SEvan Bacon} 168d307f52SEvan Bacon 178d307f52SEvan Baconfunction resolveFromProject(projectRoot: string, moduleId: string) { 188d307f52SEvan Bacon const resolvedPath = resolveFrom.silent(projectRoot, moduleId); 198d307f52SEvan Bacon if (!resolvedPath) { 208d307f52SEvan Bacon throw new WebpackImportError(projectRoot, moduleId); 218d307f52SEvan Bacon } 228d307f52SEvan Bacon return resolvedPath; 238d307f52SEvan Bacon} 248d307f52SEvan Bacon 258d307f52SEvan Baconfunction importFromProject(projectRoot: string, moduleId: string) { 268d307f52SEvan Bacon return require(resolveFromProject(projectRoot, moduleId)); 278d307f52SEvan Bacon} 288d307f52SEvan Bacon 298d307f52SEvan Bacon/** Import `webpack` from the project. */ 308d307f52SEvan Baconexport function importWebpackFromProject(projectRoot: string): typeof import('webpack') { 31*d04463cbSEvan Bacon return importFromProject(projectRoot, 'webpack'); 328d307f52SEvan Bacon} 338d307f52SEvan Bacon 348d307f52SEvan Bacon/** Import `@expo/webpack-config` from the project. */ 358d307f52SEvan Baconexport function importExpoWebpackConfigFromProject( 368d307f52SEvan Bacon projectRoot: string 378d307f52SEvan Bacon): typeof import('@expo/webpack-config') { 388d307f52SEvan Bacon return importFromProject(projectRoot, '@expo/webpack-config'); 398d307f52SEvan Bacon} 408d307f52SEvan Bacon 418d307f52SEvan Bacon/** Import `webpack-dev-server` from the project. */ 428d307f52SEvan Baconexport function importWebpackDevServerFromProject( 438d307f52SEvan Bacon projectRoot: string 448d307f52SEvan Bacon): typeof import('webpack-dev-server') { 45*d04463cbSEvan Bacon return importFromProject(projectRoot, 'webpack-dev-server'); 468d307f52SEvan Bacon} 47