1b6b91c50SEvan Baconimport arg from 'arg'; 2b6b91c50SEvan Baconimport path from 'path'; 3b6b91c50SEvan Bacon 4b6b91c50SEvan Baconimport { env } from '../../utils/env'; 5b6b91c50SEvan Baconimport { CommandError } from '../../utils/errors'; 6b6b91c50SEvan Baconimport { resolveCustomBooleanArgsAsync } from '../../utils/resolveArgs'; 7b6b91c50SEvan Bacon 8b6b91c50SEvan Baconexport interface Options { 9b6b91c50SEvan Bacon assetsDest?: string; 10b6b91c50SEvan Bacon assetCatalogDest?: string; 11b6b91c50SEvan Bacon entryFile: string; 12b6b91c50SEvan Bacon resetCache: boolean; 13b6b91c50SEvan Bacon resetGlobalCache: boolean; 14b6b91c50SEvan Bacon transformer?: string; 15b6b91c50SEvan Bacon minify?: boolean; 16b6b91c50SEvan Bacon config?: string; 17b6b91c50SEvan Bacon platform: string; 18b6b91c50SEvan Bacon dev: boolean; 19b6b91c50SEvan Bacon bundleOutput: string; 20b6b91c50SEvan Bacon bundleEncoding?: string; 21b6b91c50SEvan Bacon maxWorkers?: number; 22b6b91c50SEvan Bacon sourcemapOutput?: string; 23b6b91c50SEvan Bacon sourcemapSourcesRoot?: string; 24b6b91c50SEvan Bacon sourcemapUseAbsolutePath: boolean; 25b6b91c50SEvan Bacon verbose: boolean; 26da5824c9SKudo Chien unstableTransformProfile: string; 27b6b91c50SEvan Bacon} 28b6b91c50SEvan Bacon 29b6b91c50SEvan Baconfunction assertIsBoolean(val: any): asserts val is boolean { 30b6b91c50SEvan Bacon if (typeof val !== 'boolean') { 31b6b91c50SEvan Bacon throw new CommandError(`Expected boolean, got ${typeof val}`); 32b6b91c50SEvan Bacon } 33b6b91c50SEvan Bacon} 34b6b91c50SEvan Bacon 35b6b91c50SEvan Baconexport function resolveOptions( 36b6b91c50SEvan Bacon args: arg.Result<arg.Spec>, 37b6b91c50SEvan Bacon parsed: Awaited<ReturnType<typeof resolveCustomBooleanArgsAsync>> 38b6b91c50SEvan Bacon): Options { 39b6b91c50SEvan Bacon const dev = parsed.args['--dev'] ?? true; 40b6b91c50SEvan Bacon assertIsBoolean(dev); 41b6b91c50SEvan Bacon 42*fd2402c1SEvan Bacon const minify = parsed.args['--minify'] ?? !dev; 43b6b91c50SEvan Bacon assertIsBoolean(minify); 44b6b91c50SEvan Bacon 45b6b91c50SEvan Bacon const entryFile = args['--entry-file']; 46b6b91c50SEvan Bacon if (!entryFile) { 47b6b91c50SEvan Bacon throw new CommandError(`Missing required argument: --entry-file`); 48b6b91c50SEvan Bacon } 49b6b91c50SEvan Bacon const bundleOutput = args['--bundle-output']; 50b6b91c50SEvan Bacon if (!bundleOutput) { 51b6b91c50SEvan Bacon throw new CommandError(`Missing required argument: --bundle-output`); 52b6b91c50SEvan Bacon } 53b6b91c50SEvan Bacon return { 54b6b91c50SEvan Bacon entryFile, 55b6b91c50SEvan Bacon assetCatalogDest: args['--asset-catalog-dest'], 56b6b91c50SEvan Bacon platform: args['--platform'] ?? 'ios', 57b6b91c50SEvan Bacon transformer: args['--transformer'], 58b6b91c50SEvan Bacon // TODO: Support `--dev false` 59b6b91c50SEvan Bacon // dev: false, 60b6b91c50SEvan Bacon bundleOutput, 61b6b91c50SEvan Bacon bundleEncoding: args['--bundle-encoding'] ?? 'utf8', 62b6b91c50SEvan Bacon maxWorkers: args['--max-workers'], 63b6b91c50SEvan Bacon sourcemapOutput: args['--sourcemap-output'], 64b6b91c50SEvan Bacon sourcemapSourcesRoot: args['--sourcemap-sources-root'], 65b6b91c50SEvan Bacon sourcemapUseAbsolutePath: !!parsed.args['--sourcemap-use-absolute-path'], 66b6b91c50SEvan Bacon assetsDest: args['--assets-dest'], 67da5824c9SKudo Chien unstableTransformProfile: args['--unstable-transform-profile'] ?? 'default', 68b6b91c50SEvan Bacon resetCache: !!parsed.args['--reset-cache'], 69b6b91c50SEvan Bacon resetGlobalCache: false, 70b6b91c50SEvan Bacon verbose: args['--verbose'] ?? env.EXPO_DEBUG, 71b6b91c50SEvan Bacon config: args['--config'] ? path.resolve(args['--config']) : undefined, 72b6b91c50SEvan Bacon dev, 73b6b91c50SEvan Bacon minify, 74b6b91c50SEvan Bacon }; 75b6b91c50SEvan Bacon} 76