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