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 generateStaticViewConfigs: boolean; 28} 29 30function assertIsBoolean(val: any): asserts val is boolean { 31 if (typeof val !== 'boolean') { 32 throw new CommandError(`Expected boolean, got ${typeof val}`); 33 } 34} 35 36export function resolveOptions( 37 args: arg.Result<arg.Spec>, 38 parsed: Awaited<ReturnType<typeof resolveCustomBooleanArgsAsync>> 39): Options { 40 const dev = parsed.args['--dev'] ?? true; 41 assertIsBoolean(dev); 42 43 const generateStaticViewConfigs = parsed.args['--generate-static-view-configs'] ?? true; 44 assertIsBoolean(generateStaticViewConfigs); 45 46 const minify = parsed.args['--minify'] ?? true; 47 assertIsBoolean(minify); 48 49 const entryFile = args['--entry-file']; 50 if (!entryFile) { 51 throw new CommandError(`Missing required argument: --entry-file`); 52 } 53 const bundleOutput = args['--bundle-output']; 54 if (!bundleOutput) { 55 throw new CommandError(`Missing required argument: --bundle-output`); 56 } 57 return { 58 entryFile, 59 assetCatalogDest: args['--asset-catalog-dest'], 60 platform: args['--platform'] ?? 'ios', 61 transformer: args['--transformer'], 62 // TODO: Support `--dev false` 63 // dev: false, 64 bundleOutput, 65 bundleEncoding: args['--bundle-encoding'] ?? 'utf8', 66 maxWorkers: args['--max-workers'], 67 sourcemapOutput: args['--sourcemap-output'], 68 sourcemapSourcesRoot: args['--sourcemap-sources-root'], 69 sourcemapUseAbsolutePath: !!parsed.args['--sourcemap-use-absolute-path'], 70 assetsDest: args['--assets-dest'], 71 unstableTransformProfile: args['--unstable-transform-profile'], 72 resetCache: !!parsed.args['--reset-cache'], 73 resetGlobalCache: false, 74 verbose: args['--verbose'] ?? env.EXPO_DEBUG, 75 config: args['--config'] ? path.resolve(args['--config']) : undefined, 76 dev, 77 generateStaticViewConfigs, 78 minify, 79 }; 80} 81