1dfe12d45SEvan Baconimport { getConfig } from '@expo/config'; 2dfe12d45SEvan Bacon 3dfe12d45SEvan Baconimport { queryAndGenerateAsync, selectAndGenerateAsync } from './generate'; 4dfe12d45SEvan Baconimport { Options } from './resolveOptions'; 5dfe12d45SEvan Baconimport { DestinationResolutionProps } from './templates'; 6*8a424bebSJames Ideimport { findUpProjectRootOrAssert } from '../utils/findUp'; 7*8a424bebSJames Ideimport { setNodeEnv } from '../utils/nodeEnv'; 8dfe12d45SEvan Bacon 9dfe12d45SEvan Baconexport async function customizeAsync(files: string[], options: Options, extras: any[]) { 102dd43328SEvan Bacon setNodeEnv('development'); 11dfe12d45SEvan Bacon // Locate the project root based on the process current working directory. 12dfe12d45SEvan Bacon // This enables users to run `npx expo customize` from a subdirectory of the project. 13dfe12d45SEvan Bacon const projectRoot = findUpProjectRootOrAssert(process.cwd()); 14dfe12d45SEvan Bacon 156a750d06SEvan Bacon require('@expo/env').load(projectRoot); 166a750d06SEvan Bacon 17dfe12d45SEvan Bacon // Get the static path (defaults to 'web/') 18dfe12d45SEvan Bacon // Doesn't matter if expo is installed or which mode is used. 19dfe12d45SEvan Bacon const { exp } = getConfig(projectRoot, { 20dfe12d45SEvan Bacon skipSDKVersionRequirement: true, 21dfe12d45SEvan Bacon }); 22dfe12d45SEvan Bacon 23dfe12d45SEvan Bacon // Create the destination resolution props which are used in both 24dfe12d45SEvan Bacon // the query and select functions. 25dfe12d45SEvan Bacon const props: DestinationResolutionProps = { 26dfe12d45SEvan Bacon webStaticPath: exp.web?.staticPath ?? 'web', 27dfe12d45SEvan Bacon }; 28dfe12d45SEvan Bacon 29dfe12d45SEvan Bacon // If the user provided files, we'll generate them without prompting. 30dfe12d45SEvan Bacon if (files.length) { 31dfe12d45SEvan Bacon return queryAndGenerateAsync(projectRoot, { 32dfe12d45SEvan Bacon files, 33dfe12d45SEvan Bacon props, 34dfe12d45SEvan Bacon extras, 35dfe12d45SEvan Bacon }); 36dfe12d45SEvan Bacon } 37dfe12d45SEvan Bacon 38dfe12d45SEvan Bacon // Otherwise, we'll prompt the user to select which files to generate. 39dfe12d45SEvan Bacon await selectAndGenerateAsync(projectRoot, { 40dfe12d45SEvan Bacon props, 41dfe12d45SEvan Bacon extras, 42dfe12d45SEvan Bacon }); 43dfe12d45SEvan Bacon} 44