@expo/cli 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/build/bin/cli +8 -3
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/export/createBundles.js +1 -0
  4. package/build/src/export/createBundles.js.map +1 -1
  5. package/build/src/export/embed/exportEmbedAsync.js +1 -2
  6. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  7. package/build/src/export/embed/resolveOptions.js +3 -3
  8. package/build/src/export/embed/resolveOptions.js.map +1 -1
  9. package/build/src/export/exportApp.js +4 -4
  10. package/build/src/export/exportApp.js.map +1 -1
  11. package/build/src/export/exportStaticAsync.js +18 -18
  12. package/build/src/export/exportStaticAsync.js.map +1 -1
  13. package/build/src/export/fork-bundleAsync.js +0 -1
  14. package/build/src/export/fork-bundleAsync.js.map +1 -1
  15. package/build/src/export/index.js +5 -1
  16. package/build/src/export/index.js.map +1 -1
  17. package/build/src/export/resolveOptions.js +1 -0
  18. package/build/src/export/resolveOptions.js.map +1 -1
  19. package/build/src/install/checkPackages.js +6 -0
  20. package/build/src/install/checkPackages.js.map +1 -1
  21. package/build/src/install/installAsync.js +15 -1
  22. package/build/src/install/installAsync.js.map +1 -1
  23. package/build/src/prebuild/copyTemplateFiles.js +3 -33
  24. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  25. package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
  26. package/build/src/prebuild/prebuildAsync.js +1 -1
  27. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  28. package/build/src/prebuild/updateFromTemplate.js +1 -8
  29. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  30. package/build/src/prebuild/updatePackageJson.js +33 -47
  31. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  32. package/build/src/start/doctor/dependencies/getVersionedPackages.js +13 -2
  33. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  34. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +11 -1
  35. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  36. package/build/src/start/doctor/ngrok/ExternalModule.js +2 -2
  37. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  38. package/build/src/start/index.js +3 -1
  39. package/build/src/start/index.js.map +1 -1
  40. package/build/src/start/server/getStaticRenderFunctions.js +2 -1
  41. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  42. package/build/src/start/server/metro/MetroBundlerDevServer.js +16 -33
  43. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  44. package/build/src/start/server/metro/externals.js +7 -30
  45. package/build/src/start/server/metro/externals.js.map +1 -1
  46. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
  47. package/build/src/start/server/metro/instantiateMetro.js +7 -4
  48. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  49. package/build/src/start/server/metro/metroErrorInterface.js +26 -3
  50. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  51. package/build/src/start/server/metro/router.js +14 -5
  52. package/build/src/start/server/metro/router.js.map +1 -1
  53. package/build/src/start/server/metro/runServer-fork.js +0 -1
  54. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  55. package/build/src/start/server/metro/withMetroMultiPlatform.js +10 -4
  56. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  57. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
  58. package/build/src/start/server/middleware/CreateFileMiddleware.js +6 -3
  59. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
  60. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +75 -15
  61. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  62. package/build/src/start/server/middleware/ManifestMiddleware.js +8 -3
  63. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  64. package/build/src/start/server/type-generation/index.js +9 -1
  65. package/build/src/start/server/type-generation/index.js.map +1 -1
  66. package/build/src/start/server/type-generation/routes.js +2 -3
  67. package/build/src/start/server/type-generation/routes.js.map +1 -1
  68. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  69. package/build/src/utils/cocoapods.js +1 -1
  70. package/build/src/utils/cocoapods.js.map +1 -1
  71. package/build/src/utils/dir.js +16 -6
  72. package/build/src/utils/dir.js.map +1 -1
  73. package/build/src/utils/downloadExpoGoAsync.js +2 -1
  74. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  75. package/build/src/utils/env.js +3 -0
  76. package/build/src/utils/env.js.map +1 -1
  77. package/build/src/utils/strings.js +24 -0
  78. package/build/src/utils/strings.js.map +1 -0
  79. package/package.json +6 -8
  80. package/build/src/prebuild/writeMetroConfig.js +0 -89
  81. package/build/src/prebuild/writeMetroConfig.js.map +0 -1
package/build/bin/cli CHANGED
@@ -86,6 +86,11 @@ const commands = {
86
86
  }).then((i)=>i.expoInstall
87
87
  )
88
88
  ,
89
+ add: ()=>Promise.resolve().then(function() {
90
+ return _interopRequireWildcard(require("../src/install"));
91
+ }).then((i)=>i.expoInstall
92
+ )
93
+ ,
89
94
  customize: ()=>Promise.resolve().then(function() {
90
95
  return _interopRequireWildcard(require("../src/customize"));
91
96
  }).then((i)=>i.expoCustomize
@@ -127,7 +132,7 @@ const args = (0, _arg).default({
127
132
  });
128
133
  if (args["--version"]) {
129
134
  // Version is added in the build script.
130
- console.log("0.8.0");
135
+ console.log("0.9.0");
131
136
  process.exit(0);
132
137
  }
133
138
  if (args["--non-interactive"]) {
@@ -137,7 +142,7 @@ if (args["--non-interactive"]) {
137
142
  const isSubcommand = Boolean(commands[args._[0]]);
138
143
  // Handle `--help` flag
139
144
  if (!isSubcommand && args["--help"]) {
140
- const { login , logout , whoami , register , start , install , export: _export , config , customize , prebuild , "run:ios": runIos , "run:android": runAndroid , // NOTE(EvanBacon): Don't document this command as it's a temporary
145
+ const { login , logout , whoami , register , start , install , add , export: _export , config , customize , prebuild , "run:ios": runIos , "run:android": runAndroid , // NOTE(EvanBacon): Don't document this command as it's a temporary
141
146
  // workaround until we can use `expo export` for all production bundling.
142
147
  // https://github.com/expo/expo/pull/21396/files#r1121025873
143
148
  "export:embed": exportEmbed_unused , ...others } = commands;
@@ -257,7 +262,7 @@ commands[command]().then((exec)=>{
257
262
  logEventAsync("action", {
258
263
  action: `expo ${command}`,
259
264
  source: "expo/cli",
260
- source_version: "0.8.0"
265
+ source_version: "0.9.0"
261
266
  });
262
267
  });
263
268
 
package/build/bin/cli.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport arg from 'arg';\nimport chalk from 'chalk';\nimport Debug from 'debug';\nimport { boolish } from 'getenv';\n\n// Setup before requiring `debug`.\nif (boolish('EXPO_DEBUG', false)) {\n Debug.enable('expo:*');\n} else if (Debug.enabled('expo:')) {\n process.env.EXPO_DEBUG = '1';\n}\n\nconst defaultCmd = 'start';\n\nexport type Command = (argv?: string[]) => void;\n\nconst commands: { [command: string]: () => Promise<Command> } = {\n // Add a new command here\n // NOTE(EvanBacon): Ensure every bundler-related command sets `NODE_ENV` as expected for the command.\n 'run:ios': () => import('../src/run/ios').then((i) => i.expoRunIos),\n 'run:android': () => import('../src/run/android').then((i) => i.expoRunAndroid),\n start: () => import('../src/start').then((i) => i.expoStart),\n prebuild: () => import('../src/prebuild').then((i) => i.expoPrebuild),\n config: () => import('../src/config').then((i) => i.expoConfig),\n export: () => import('../src/export').then((i) => i.expoExport),\n 'export:web': () => import('../src/export/web').then((i) => i.expoExportWeb),\n 'export:embed': () => import('../src/export/embed').then((i) => i.expoExportEmbed),\n\n // Auxiliary commands\n install: () => import('../src/install').then((i) => i.expoInstall),\n customize: () => import('../src/customize').then((i) => i.expoCustomize),\n\n // Auth\n login: () => import('../src/login').then((i) => i.expoLogin),\n logout: () => import('../src/logout').then((i) => i.expoLogout),\n register: () => import('../src/register').then((i) => i.expoRegister),\n whoami: () => import('../src/whoami').then((i) => i.expoWhoami),\n};\n\nconst args = arg(\n {\n // Types\n '--version': Boolean,\n '--help': Boolean,\n // NOTE(EvanBacon): This is here to silence warnings from processes that\n // expect the global expo-cli.\n '--non-interactive': Boolean,\n\n // Aliases\n '-v': '--version',\n '-h': '--help',\n },\n {\n permissive: true,\n }\n);\n\nif (args['--version']) {\n // Version is added in the build script.\n console.log(process.env.__EXPO_VERSION);\n process.exit(0);\n}\n\nif (args['--non-interactive']) {\n console.warn(chalk.yellow` {bold --non-interactive} is not supported, use {bold $CI=1} instead`);\n}\n\n// Check if we are running `npx expo <subcommand>` or `npx expo`\nconst isSubcommand = Boolean(commands[args._[0]]);\n\n// Handle `--help` flag\nif (!isSubcommand && args['--help']) {\n const {\n login,\n logout,\n whoami,\n register,\n start,\n install,\n export: _export,\n config,\n customize,\n prebuild,\n 'run:ios': runIos,\n 'run:android': runAndroid,\n // NOTE(EvanBacon): Don't document this command as it's a temporary\n // workaround until we can use `expo export` for all production bundling.\n // https://github.com/expo/expo/pull/21396/files#r1121025873\n 'export:embed': exportEmbed_unused,\n ...others\n } = commands;\n\n console.log(chalk`\n {bold Usage}\n {dim $} npx expo <command>\n\n {bold Commands}\n ${Object.keys({ start, export: _export, ...others }).join(', ')}\n ${Object.keys({ 'run:ios': runIos, 'run:android': runAndroid, prebuild }).join(', ')}\n ${Object.keys({ install, customize, config }).join(', ')}\n {dim ${Object.keys({ login, logout, whoami, register }).join(', ')}}\n\n {bold Options}\n --version, -v Version number\n --help, -h Usage info\n\n For more info run a command with the {bold --help} flag\n {dim $} npx expo start --help\n`);\n\n process.exit(0);\n}\n\n// NOTE(EvanBacon): Squat some directory names to help with migration,\n// users can still use folders named \"send\" or \"eject\" by using the fully qualified `npx expo start ./send`.\nif (!isSubcommand) {\n const migrationMap: Record<string, string> = {\n init: 'npx create-expo-app',\n eject: 'npx expo prebuild',\n web: 'npx expo start --web',\n 'start:web': 'npx expo start --web',\n 'build:ios': 'eas build -p ios',\n 'build:android': 'eas build -p android',\n 'client:install:ios': 'npx expo start --ios',\n 'client:install:android': 'npx expo start --android',\n doctor: 'npx expo-doctor',\n upgrade: 'expo-cli upgrade',\n 'customize:web': 'npx expo customize',\n\n publish: 'eas update',\n 'publish:set': 'eas update',\n 'publish:rollback': 'eas update',\n 'publish:history': 'eas update',\n 'publish:details': 'eas update',\n\n 'build:web': 'npx expo export:web',\n\n 'credentials:manager': `eas credentials`,\n 'fetch:ios:certs': `eas credentials`,\n 'fetch:android:keystore': `eas credentials`,\n 'fetch:android:hashes': `eas credentials`,\n 'fetch:android:upload-cert': `eas credentials`,\n 'push:android:upload': `eas credentials`,\n 'push:android:show': `eas credentials`,\n 'push:android:clear': `eas credentials`,\n url: `eas build:list`,\n 'url:ipa': `eas build:list`,\n 'url:apk': `eas build:list`,\n webhooks: `eas webhook`,\n 'webhooks:add': `eas webhook:create`,\n 'webhooks:remove': `eas webhook:delete`,\n 'webhooks:update': `eas webhook:update`,\n\n 'build:status': `eas build:list`,\n 'upload:android': `eas submit -p android`,\n 'upload:ios': `eas submit -p ios`,\n };\n\n // TODO: Log telemetry about invalid command used.\n const subcommand = args._[0];\n if (subcommand in migrationMap) {\n const replacement = migrationMap[subcommand];\n console.log();\n console.log(\n chalk.yellow` {gray $} {bold expo ${subcommand}} is not supported in the local CLI, please use {bold ${replacement}} instead`\n );\n console.log();\n process.exit(1);\n }\n const deprecated = ['send', 'client:ios'];\n if (deprecated.includes(subcommand)) {\n console.log();\n console.log(chalk.yellow` {gray $} {bold expo ${subcommand}} is deprecated`);\n console.log();\n process.exit(1);\n }\n}\n\nconst command = isSubcommand ? args._[0] : defaultCmd;\nconst commandArgs = isSubcommand ? args._.slice(1) : args._;\n\n// Push the help flag to the subcommand args.\nif (args['--help']) {\n commandArgs.push('--help');\n}\n\n// Install exit hooks\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\ncommands[command]().then((exec) => {\n exec(commandArgs);\n\n // NOTE(EvanBacon): Track some basic telemetry events indicating the command\n // that was run. This can be disabled with the $EXPO_NO_TELEMETRY environment variable.\n // We do this to determine how well deprecations are going before removing a command.\n const { logEventAsync } =\n require('../src/utils/analytics/rudderstackClient') as typeof import('../src/utils/analytics/rudderstackClient');\n logEventAsync('action', {\n action: `expo ${command}`,\n source: 'expo/cli',\n source_version: process.env.__EXPO_VERSION,\n });\n});\n"],"names":["boolish","Debug","enable","enabled","process","env","EXPO_DEBUG","defaultCmd","commands","then","i","expoRunIos","expoRunAndroid","start","expoStart","prebuild","expoPrebuild","config","expoConfig","export","expoExport","expoExportWeb","expoExportEmbed","install","expoInstall","customize","expoCustomize","login","expoLogin","logout","expoLogout","register","expoRegister","whoami","expoWhoami","args","arg","Boolean","permissive","console","log","__EXPO_VERSION","exit","warn","chalk","yellow","isSubcommand","_","_export","runIos","runAndroid","exportEmbed_unused","others","Object","keys","join","migrationMap","init","eject","web","doctor","upgrade","publish","url","webhooks","subcommand","replacement","deprecated","includes","command","commandArgs","slice","push","on","exec","logEventAsync","require","action","source","source_version"],"mappings":"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"}
1
+ {"version":3,"sources":["../../bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport arg from 'arg';\nimport chalk from 'chalk';\nimport Debug from 'debug';\nimport { boolish } from 'getenv';\n\n// Setup before requiring `debug`.\nif (boolish('EXPO_DEBUG', false)) {\n Debug.enable('expo:*');\n} else if (Debug.enabled('expo:')) {\n process.env.EXPO_DEBUG = '1';\n}\n\nconst defaultCmd = 'start';\n\nexport type Command = (argv?: string[]) => void;\n\nconst commands: { [command: string]: () => Promise<Command> } = {\n // Add a new command here\n // NOTE(EvanBacon): Ensure every bundler-related command sets `NODE_ENV` as expected for the command.\n 'run:ios': () => import('../src/run/ios').then((i) => i.expoRunIos),\n 'run:android': () => import('../src/run/android').then((i) => i.expoRunAndroid),\n start: () => import('../src/start').then((i) => i.expoStart),\n prebuild: () => import('../src/prebuild').then((i) => i.expoPrebuild),\n config: () => import('../src/config').then((i) => i.expoConfig),\n export: () => import('../src/export').then((i) => i.expoExport),\n 'export:web': () => import('../src/export/web').then((i) => i.expoExportWeb),\n 'export:embed': () => import('../src/export/embed').then((i) => i.expoExportEmbed),\n\n // Auxiliary commands\n install: () => import('../src/install').then((i) => i.expoInstall),\n add: () => import('../src/install').then((i) => i.expoInstall),\n customize: () => import('../src/customize').then((i) => i.expoCustomize),\n\n // Auth\n login: () => import('../src/login').then((i) => i.expoLogin),\n logout: () => import('../src/logout').then((i) => i.expoLogout),\n register: () => import('../src/register').then((i) => i.expoRegister),\n whoami: () => import('../src/whoami').then((i) => i.expoWhoami),\n};\n\nconst args = arg(\n {\n // Types\n '--version': Boolean,\n '--help': Boolean,\n // NOTE(EvanBacon): This is here to silence warnings from processes that\n // expect the global expo-cli.\n '--non-interactive': Boolean,\n\n // Aliases\n '-v': '--version',\n '-h': '--help',\n },\n {\n permissive: true,\n }\n);\n\nif (args['--version']) {\n // Version is added in the build script.\n console.log(process.env.__EXPO_VERSION);\n process.exit(0);\n}\n\nif (args['--non-interactive']) {\n console.warn(chalk.yellow` {bold --non-interactive} is not supported, use {bold $CI=1} instead`);\n}\n\n// Check if we are running `npx expo <subcommand>` or `npx expo`\nconst isSubcommand = Boolean(commands[args._[0]]);\n\n// Handle `--help` flag\nif (!isSubcommand && args['--help']) {\n const {\n login,\n logout,\n whoami,\n register,\n start,\n install,\n add,\n export: _export,\n config,\n customize,\n prebuild,\n 'run:ios': runIos,\n 'run:android': runAndroid,\n // NOTE(EvanBacon): Don't document this command as it's a temporary\n // workaround until we can use `expo export` for all production bundling.\n // https://github.com/expo/expo/pull/21396/files#r1121025873\n 'export:embed': exportEmbed_unused,\n ...others\n } = commands;\n\n console.log(chalk`\n {bold Usage}\n {dim $} npx expo <command>\n\n {bold Commands}\n ${Object.keys({ start, export: _export, ...others }).join(', ')}\n ${Object.keys({ 'run:ios': runIos, 'run:android': runAndroid, prebuild }).join(', ')}\n ${Object.keys({ install, customize, config }).join(', ')}\n {dim ${Object.keys({ login, logout, whoami, register }).join(', ')}}\n\n {bold Options}\n --version, -v Version number\n --help, -h Usage info\n\n For more info run a command with the {bold --help} flag\n {dim $} npx expo start --help\n`);\n\n process.exit(0);\n}\n\n// NOTE(EvanBacon): Squat some directory names to help with migration,\n// users can still use folders named \"send\" or \"eject\" by using the fully qualified `npx expo start ./send`.\nif (!isSubcommand) {\n const migrationMap: Record<string, string> = {\n init: 'npx create-expo-app',\n eject: 'npx expo prebuild',\n web: 'npx expo start --web',\n 'start:web': 'npx expo start --web',\n 'build:ios': 'eas build -p ios',\n 'build:android': 'eas build -p android',\n 'client:install:ios': 'npx expo start --ios',\n 'client:install:android': 'npx expo start --android',\n doctor: 'npx expo-doctor',\n upgrade: 'expo-cli upgrade',\n 'customize:web': 'npx expo customize',\n\n publish: 'eas update',\n 'publish:set': 'eas update',\n 'publish:rollback': 'eas update',\n 'publish:history': 'eas update',\n 'publish:details': 'eas update',\n\n 'build:web': 'npx expo export:web',\n\n 'credentials:manager': `eas credentials`,\n 'fetch:ios:certs': `eas credentials`,\n 'fetch:android:keystore': `eas credentials`,\n 'fetch:android:hashes': `eas credentials`,\n 'fetch:android:upload-cert': `eas credentials`,\n 'push:android:upload': `eas credentials`,\n 'push:android:show': `eas credentials`,\n 'push:android:clear': `eas credentials`,\n url: `eas build:list`,\n 'url:ipa': `eas build:list`,\n 'url:apk': `eas build:list`,\n webhooks: `eas webhook`,\n 'webhooks:add': `eas webhook:create`,\n 'webhooks:remove': `eas webhook:delete`,\n 'webhooks:update': `eas webhook:update`,\n\n 'build:status': `eas build:list`,\n 'upload:android': `eas submit -p android`,\n 'upload:ios': `eas submit -p ios`,\n };\n\n // TODO: Log telemetry about invalid command used.\n const subcommand = args._[0];\n if (subcommand in migrationMap) {\n const replacement = migrationMap[subcommand];\n console.log();\n console.log(\n chalk.yellow` {gray $} {bold expo ${subcommand}} is not supported in the local CLI, please use {bold ${replacement}} instead`\n );\n console.log();\n process.exit(1);\n }\n const deprecated = ['send', 'client:ios'];\n if (deprecated.includes(subcommand)) {\n console.log();\n console.log(chalk.yellow` {gray $} {bold expo ${subcommand}} is deprecated`);\n console.log();\n process.exit(1);\n }\n}\n\nconst command = isSubcommand ? args._[0] : defaultCmd;\nconst commandArgs = isSubcommand ? args._.slice(1) : args._;\n\n// Push the help flag to the subcommand args.\nif (args['--help']) {\n commandArgs.push('--help');\n}\n\n// Install exit hooks\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\ncommands[command]().then((exec) => {\n exec(commandArgs);\n\n // NOTE(EvanBacon): Track some basic telemetry events indicating the command\n // that was run. This can be disabled with the $EXPO_NO_TELEMETRY environment variable.\n // We do this to determine how well deprecations are going before removing a command.\n const { logEventAsync } =\n require('../src/utils/analytics/rudderstackClient') as typeof import('../src/utils/analytics/rudderstackClient');\n logEventAsync('action', {\n action: `expo ${command}`,\n source: 'expo/cli',\n source_version: process.env.__EXPO_VERSION,\n });\n});\n"],"names":["boolish","Debug","enable","enabled","process","env","EXPO_DEBUG","defaultCmd","commands","then","i","expoRunIos","expoRunAndroid","start","expoStart","prebuild","expoPrebuild","config","expoConfig","export","expoExport","expoExportWeb","expoExportEmbed","install","expoInstall","add","customize","expoCustomize","login","expoLogin","logout","expoLogout","register","expoRegister","whoami","expoWhoami","args","arg","Boolean","permissive","console","log","__EXPO_VERSION","exit","warn","chalk","yellow","isSubcommand","_","_export","runIos","runAndroid","exportEmbed_unused","others","Object","keys","join","migrationMap","init","eject","web","doctor","upgrade","publish","url","webhooks","subcommand","replacement","deprecated","includes","command","commandArgs","slice","push","on","exec","logEventAsync","require","action","source","source_version"],"mappings":"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"}
@@ -52,6 +52,7 @@ async function createBundlesAsync(projectRoot, publishOptions = {}, bundleOption
52
52
  }, bundleOptions.platforms.map((platform)=>({
53
53
  platform,
54
54
  entryPoint: (0, _manifestMiddleware).getEntryWithServerRoot(projectRoot, projectConfig, platform),
55
+ minify: bundleOptions.minify,
55
56
  dev: bundleOptions.dev
56
57
  })
57
58
  ));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/createBundles.ts"],"sourcesContent":["import { getConfig, Platform, ProjectTarget } from '@expo/config';\n\nimport * as Log from '../log';\nimport { getEntryWithServerRoot } from '../start/server/middleware/ManifestMiddleware';\nimport { bundleAsync, BundleOutput } from './fork-bundleAsync';\n\nexport type PublishOptions = {\n releaseChannel?: string;\n target?: ProjectTarget;\n resetCache?: boolean;\n maxWorkers?: number;\n};\n\n// TODO: Reduce layers of indirection\nexport async function createBundlesAsync(\n projectRoot: string,\n publishOptions: PublishOptions = {},\n bundleOptions: { platforms: Platform[]; dev?: boolean }\n): Promise<Partial<Record<Platform, BundleOutput>>> {\n if (!bundleOptions.platforms.length) {\n return {};\n }\n const projectConfig = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n const { exp } = projectConfig;\n\n const bundles = await bundleAsync(\n projectRoot,\n exp,\n {\n // If not legacy, ignore the target option to prevent warnings from being thrown.\n resetCache: publishOptions.resetCache,\n maxWorkers: publishOptions.maxWorkers,\n logger: {\n info(tag: unknown, message: string) {\n Log.log(message);\n },\n error(tag: unknown, message: string) {\n Log.error(message);\n },\n } as any,\n quiet: false,\n },\n bundleOptions.platforms.map((platform: Platform) => ({\n platform,\n entryPoint: getEntryWithServerRoot(projectRoot, projectConfig, platform),\n dev: bundleOptions.dev,\n }))\n );\n\n // { ios: bundle, android: bundle }\n return bundleOptions.platforms.reduce<Partial<Record<Platform, BundleOutput>>>(\n (prev, platform, index) => ({\n ...prev,\n [platform]: bundles[index],\n }),\n {}\n );\n}\n"],"names":["createBundlesAsync","Log","projectRoot","publishOptions","bundleOptions","platforms","length","projectConfig","getConfig","skipSDKVersionRequirement","exp","bundles","bundleAsync","resetCache","maxWorkers","logger","info","tag","message","log","error","quiet","map","platform","entryPoint","getEntryWithServerRoot","dev","reduce","prev","index"],"mappings":"AAAA;;;;QAcsBA,kBAAkB,GAAlBA,kBAAkB;AAdW,IAAA,OAAc,WAAd,cAAc,CAAA;AAErDC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACwB,IAAA,mBAA+C,WAA/C,+CAA+C,CAAA;AAC5C,IAAA,gBAAoB,WAApB,oBAAoB,CAAA;;;;;;;;;;;;;;;;;;;;;;AAUvD,eAAeD,kBAAkB,CACtCE,WAAmB,EACnBC,cAA8B,GAAG,EAAE,EACnCC,aAAuD,EACL;IAClD,IAAI,CAACA,aAAa,CAACC,SAAS,CAACC,MAAM,EAAE;QACnC,OAAO,EAAE,CAAC;KACX;IACD,MAAMC,aAAa,GAAGC,CAAAA,GAAAA,OAAS,AAAkD,CAAA,UAAlD,CAACN,WAAW,EAAE;QAAEO,yBAAyB,EAAE,IAAI;KAAE,CAAC,AAAC;IAClF,MAAM,EAAEC,GAAG,CAAA,EAAE,GAAGH,aAAa,AAAC;IAE9B,MAAMI,OAAO,GAAG,MAAMC,CAAAA,GAAAA,gBAAW,AAsBhC,CAAA,YAtBgC,CAC/BV,WAAW,EACXQ,GAAG,EACH;QACE,iFAAiF;QACjFG,UAAU,EAAEV,cAAc,CAACU,UAAU;QACrCC,UAAU,EAAEX,cAAc,CAACW,UAAU;QACrCC,MAAM,EAAE;YACNC,IAAI,EAACC,GAAY,EAAEC,OAAe,EAAE;gBAClCjB,GAAG,CAACkB,GAAG,CAACD,OAAO,CAAC,CAAC;aAClB;YACDE,KAAK,EAACH,GAAY,EAAEC,OAAe,EAAE;gBACnCjB,GAAG,CAACmB,KAAK,CAACF,OAAO,CAAC,CAAC;aACpB;SACF;QACDG,KAAK,EAAE,KAAK;KACb,EACDjB,aAAa,CAACC,SAAS,CAACiB,GAAG,CAAC,CAACC,QAAkB,GAAK,CAAC;YACnDA,QAAQ;YACRC,UAAU,EAAEC,CAAAA,GAAAA,mBAAsB,AAAsC,CAAA,uBAAtC,CAACvB,WAAW,EAAEK,aAAa,EAAEgB,QAAQ,CAAC;YACxEG,GAAG,EAAEtB,aAAa,CAACsB,GAAG;SACvB,CAAC;IAAA,CAAC,CACJ,AAAC;IAEF,mCAAmC;IACnC,OAAOtB,aAAa,CAACC,SAAS,CAACsB,MAAM,CACnC,CAACC,IAAI,EAAEL,QAAQ,EAAEM,KAAK,GAAK,CAAC;YAC1B,GAAGD,IAAI;YACP,CAACL,QAAQ,CAAC,EAAEZ,OAAO,CAACkB,KAAK,CAAC;SAC3B,CAAC;IAAA,EACF,EAAE,CACH,CAAC;CACH"}
1
+ {"version":3,"sources":["../../../src/export/createBundles.ts"],"sourcesContent":["import { getConfig, Platform, ProjectTarget } from '@expo/config';\n\nimport * as Log from '../log';\nimport { getEntryWithServerRoot } from '../start/server/middleware/ManifestMiddleware';\nimport { bundleAsync, BundleOutput } from './fork-bundleAsync';\n\nexport type PublishOptions = {\n releaseChannel?: string;\n target?: ProjectTarget;\n resetCache?: boolean;\n maxWorkers?: number;\n};\n\n// TODO: Reduce layers of indirection\nexport async function createBundlesAsync(\n projectRoot: string,\n publishOptions: PublishOptions = {},\n bundleOptions: { platforms: Platform[]; dev?: boolean; minify?: boolean }\n): Promise<Partial<Record<Platform, BundleOutput>>> {\n if (!bundleOptions.platforms.length) {\n return {};\n }\n const projectConfig = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n const { exp } = projectConfig;\n\n const bundles = await bundleAsync(\n projectRoot,\n exp,\n {\n // If not legacy, ignore the target option to prevent warnings from being thrown.\n resetCache: publishOptions.resetCache,\n maxWorkers: publishOptions.maxWorkers,\n logger: {\n info(tag: unknown, message: string) {\n Log.log(message);\n },\n error(tag: unknown, message: string) {\n Log.error(message);\n },\n } as any,\n quiet: false,\n },\n bundleOptions.platforms.map((platform: Platform) => ({\n platform,\n entryPoint: getEntryWithServerRoot(projectRoot, projectConfig, platform),\n minify: bundleOptions.minify,\n dev: bundleOptions.dev,\n }))\n );\n\n // { ios: bundle, android: bundle }\n return bundleOptions.platforms.reduce<Partial<Record<Platform, BundleOutput>>>(\n (prev, platform, index) => ({\n ...prev,\n [platform]: bundles[index],\n }),\n {}\n );\n}\n"],"names":["createBundlesAsync","Log","projectRoot","publishOptions","bundleOptions","platforms","length","projectConfig","getConfig","skipSDKVersionRequirement","exp","bundles","bundleAsync","resetCache","maxWorkers","logger","info","tag","message","log","error","quiet","map","platform","entryPoint","getEntryWithServerRoot","minify","dev","reduce","prev","index"],"mappings":"AAAA;;;;QAcsBA,kBAAkB,GAAlBA,kBAAkB;AAdW,IAAA,OAAc,WAAd,cAAc,CAAA;AAErDC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACwB,IAAA,mBAA+C,WAA/C,+CAA+C,CAAA;AAC5C,IAAA,gBAAoB,WAApB,oBAAoB,CAAA;;;;;;;;;;;;;;;;;;;;;;AAUvD,eAAeD,kBAAkB,CACtCE,WAAmB,EACnBC,cAA8B,GAAG,EAAE,EACnCC,aAAyE,EACvB;IAClD,IAAI,CAACA,aAAa,CAACC,SAAS,CAACC,MAAM,EAAE;QACnC,OAAO,EAAE,CAAC;KACX;IACD,MAAMC,aAAa,GAAGC,CAAAA,GAAAA,OAAS,AAAkD,CAAA,UAAlD,CAACN,WAAW,EAAE;QAAEO,yBAAyB,EAAE,IAAI;KAAE,CAAC,AAAC;IAClF,MAAM,EAAEC,GAAG,CAAA,EAAE,GAAGH,aAAa,AAAC;IAE9B,MAAMI,OAAO,GAAG,MAAMC,CAAAA,GAAAA,gBAAW,AAuBhC,CAAA,YAvBgC,CAC/BV,WAAW,EACXQ,GAAG,EACH;QACE,iFAAiF;QACjFG,UAAU,EAAEV,cAAc,CAACU,UAAU;QACrCC,UAAU,EAAEX,cAAc,CAACW,UAAU;QACrCC,MAAM,EAAE;YACNC,IAAI,EAACC,GAAY,EAAEC,OAAe,EAAE;gBAClCjB,GAAG,CAACkB,GAAG,CAACD,OAAO,CAAC,CAAC;aAClB;YACDE,KAAK,EAACH,GAAY,EAAEC,OAAe,EAAE;gBACnCjB,GAAG,CAACmB,KAAK,CAACF,OAAO,CAAC,CAAC;aACpB;SACF;QACDG,KAAK,EAAE,KAAK;KACb,EACDjB,aAAa,CAACC,SAAS,CAACiB,GAAG,CAAC,CAACC,QAAkB,GAAK,CAAC;YACnDA,QAAQ;YACRC,UAAU,EAAEC,CAAAA,GAAAA,mBAAsB,AAAsC,CAAA,uBAAtC,CAACvB,WAAW,EAAEK,aAAa,EAAEgB,QAAQ,CAAC;YACxEG,MAAM,EAAEtB,aAAa,CAACsB,MAAM;YAC5BC,GAAG,EAAEvB,aAAa,CAACuB,GAAG;SACvB,CAAC;IAAA,CAAC,CACJ,AAAC;IAEF,mCAAmC;IACnC,OAAOvB,aAAa,CAACC,SAAS,CAACuB,MAAM,CACnC,CAACC,IAAI,EAAEN,QAAQ,EAAEO,KAAK,GAAK,CAAC;YAC1B,GAAGD,IAAI;YACP,CAACN,QAAQ,CAAC,EAAEZ,OAAO,CAACmB,KAAK,CAAC;SAC3B,CAAC;IAAA,EACF,EAAE,CACH,CAAC;CACH"}
@@ -17,8 +17,7 @@ async function exportEmbedAsync(projectRoot, options) {
17
17
  const buildBundleWithConfig = (0, _resolveFromProject).importCliBuildBundleWithConfigFromProject(projectRoot);
18
18
  // Import the internal `buildBundleWithConfig()` function from `react-native` for the purpose
19
19
  // of exporting with `@expo/metro-config` and other defaults like a resolved project entry.
20
- await buildBundleWithConfig(options, // @ts-expect-error: MetroConfig type mismatch.
21
- config);
20
+ await buildBundleWithConfig(options, config);
22
21
  }
23
22
 
24
23
  //# sourceMappingURL=exportEmbedAsync.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/export/embed/exportEmbedAsync.ts"],"sourcesContent":["import { loadMetroConfigAsync } from '../../start/server/metro/instantiateMetro';\nimport { importCliBuildBundleWithConfigFromProject } from '../../start/server/metro/resolveFromProject';\nimport { setNodeEnv } from '../../utils/nodeEnv';\nimport { Options } from './resolveOptions';\n\nexport async function exportEmbedAsync(projectRoot: string, options: Options) {\n setNodeEnv(options.dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const { config } = await loadMetroConfigAsync(projectRoot, {\n maxWorkers: options.maxWorkers,\n resetCache: options.resetCache,\n config: options.config,\n });\n\n const buildBundleWithConfig = importCliBuildBundleWithConfigFromProject(projectRoot);\n\n // Import the internal `buildBundleWithConfig()` function from `react-native` for the purpose\n // of exporting with `@expo/metro-config` and other defaults like a resolved project entry.\n await buildBundleWithConfig(\n options,\n // @ts-expect-error: MetroConfig type mismatch.\n config\n );\n}\n"],"names":["exportEmbedAsync","projectRoot","options","setNodeEnv","dev","require","load","config","loadMetroConfigAsync","maxWorkers","resetCache","buildBundleWithConfig","importCliBuildBundleWithConfigFromProject"],"mappings":"AAAA;;;;QAKsBA,gBAAgB,GAAhBA,gBAAgB;AALD,IAAA,iBAA2C,WAA3C,2CAA2C,CAAA;AACtB,IAAA,mBAA6C,WAA7C,6CAA6C,CAAA;AAC5E,IAAA,QAAqB,WAArB,qBAAqB,CAAA;AAGzC,eAAeA,gBAAgB,CAACC,WAAmB,EAAEC,OAAgB,EAAE;IAC5EC,CAAAA,GAAAA,QAAU,AAA4C,CAAA,WAA5C,CAACD,OAAO,CAACE,GAAG,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC;IACvDC,OAAO,CAAC,WAAW,CAAC,CAACC,IAAI,CAACL,WAAW,CAAC,CAAC;IAEvC,MAAM,EAAEM,MAAM,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,iBAAoB,AAI3C,CAAA,qBAJ2C,CAACP,WAAW,EAAE;QACzDQ,UAAU,EAAEP,OAAO,CAACO,UAAU;QAC9BC,UAAU,EAAER,OAAO,CAACQ,UAAU;QAC9BH,MAAM,EAAEL,OAAO,CAACK,MAAM;KACvB,CAAC,AAAC;IAEH,MAAMI,qBAAqB,GAAGC,CAAAA,GAAAA,mBAAyC,AAAa,CAAA,0CAAb,CAACX,WAAW,CAAC,AAAC;IAErF,6FAA6F;IAC7F,2FAA2F;IAC3F,MAAMU,qBAAqB,CACzBT,OAAO,EACP,+CAA+C;IAC/CK,MAAM,CACP,CAAC;CACH"}
1
+ {"version":3,"sources":["../../../../src/export/embed/exportEmbedAsync.ts"],"sourcesContent":["import { loadMetroConfigAsync } from '../../start/server/metro/instantiateMetro';\nimport { importCliBuildBundleWithConfigFromProject } from '../../start/server/metro/resolveFromProject';\nimport { setNodeEnv } from '../../utils/nodeEnv';\nimport { Options } from './resolveOptions';\n\nexport async function exportEmbedAsync(projectRoot: string, options: Options) {\n setNodeEnv(options.dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const { config } = await loadMetroConfigAsync(projectRoot, {\n maxWorkers: options.maxWorkers,\n resetCache: options.resetCache,\n config: options.config,\n });\n\n const buildBundleWithConfig = importCliBuildBundleWithConfigFromProject(projectRoot);\n\n // Import the internal `buildBundleWithConfig()` function from `react-native` for the purpose\n // of exporting with `@expo/metro-config` and other defaults like a resolved project entry.\n await buildBundleWithConfig(options, config);\n}\n"],"names":["exportEmbedAsync","projectRoot","options","setNodeEnv","dev","require","load","config","loadMetroConfigAsync","maxWorkers","resetCache","buildBundleWithConfig","importCliBuildBundleWithConfigFromProject"],"mappings":"AAAA;;;;QAKsBA,gBAAgB,GAAhBA,gBAAgB;AALD,IAAA,iBAA2C,WAA3C,2CAA2C,CAAA;AACtB,IAAA,mBAA6C,WAA7C,6CAA6C,CAAA;AAC5E,IAAA,QAAqB,WAArB,qBAAqB,CAAA;AAGzC,eAAeA,gBAAgB,CAACC,WAAmB,EAAEC,OAAgB,EAAE;IAC5EC,CAAAA,GAAAA,QAAU,AAA4C,CAAA,WAA5C,CAACD,OAAO,CAACE,GAAG,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC;IACvDC,OAAO,CAAC,WAAW,CAAC,CAACC,IAAI,CAACL,WAAW,CAAC,CAAC;IAEvC,MAAM,EAAEM,MAAM,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,iBAAoB,AAI3C,CAAA,qBAJ2C,CAACP,WAAW,EAAE;QACzDQ,UAAU,EAAEP,OAAO,CAACO,UAAU;QAC9BC,UAAU,EAAER,OAAO,CAACQ,UAAU;QAC9BH,MAAM,EAAEL,OAAO,CAACK,MAAM;KACvB,CAAC,AAAC;IAEH,MAAMI,qBAAqB,GAAGC,CAAAA,GAAAA,mBAAyC,AAAa,CAAA,0CAAb,CAACX,WAAW,CAAC,AAAC;IAErF,6FAA6F;IAC7F,2FAA2F;IAC3F,MAAMU,qBAAqB,CAACT,OAAO,EAAEK,MAAM,CAAC,CAAC;CAC9C"}
@@ -34,7 +34,7 @@ function resolveOptions(args, parsed) {
34
34
  if (!bundleOutput) {
35
35
  throw new _errors.CommandError(`Missing required argument: --bundle-output`);
36
36
  }
37
- var ref3, ref4, ref5;
37
+ var ref3, ref4, ref5, ref6;
38
38
  return {
39
39
  entryFile,
40
40
  assetCatalogDest: args["--asset-catalog-dest"],
@@ -49,10 +49,10 @@ function resolveOptions(args, parsed) {
49
49
  sourcemapSourcesRoot: args["--sourcemap-sources-root"],
50
50
  sourcemapUseAbsolutePath: !!parsed.args["--sourcemap-use-absolute-path"],
51
51
  assetsDest: args["--assets-dest"],
52
- unstableTransformProfile: args["--unstable-transform-profile"],
52
+ unstableTransformProfile: (ref5 = args["--unstable-transform-profile"]) != null ? ref5 : "default",
53
53
  resetCache: !!parsed.args["--reset-cache"],
54
54
  resetGlobalCache: false,
55
- verbose: (ref5 = args["--verbose"]) != null ? ref5 : _env.env.EXPO_DEBUG,
55
+ verbose: (ref6 = args["--verbose"]) != null ? ref6 : _env.env.EXPO_DEBUG,
56
56
  config: args["--config"] ? _path.default.resolve(args["--config"]) : undefined,
57
57
  dev,
58
58
  generateStaticViewConfigs,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/export/embed/resolveOptions.ts"],"sourcesContent":["import arg from 'arg';\nimport path from 'path';\n\nimport { env } from '../../utils/env';\nimport { CommandError } from '../../utils/errors';\nimport { resolveCustomBooleanArgsAsync } from '../../utils/resolveArgs';\n\nexport interface Options {\n assetsDest?: string;\n assetCatalogDest?: string;\n entryFile: string;\n resetCache: boolean;\n resetGlobalCache: boolean;\n transformer?: string;\n minify?: boolean;\n config?: string;\n platform: string;\n dev: boolean;\n bundleOutput: string;\n bundleEncoding?: string;\n maxWorkers?: number;\n sourcemapOutput?: string;\n sourcemapSourcesRoot?: string;\n sourcemapUseAbsolutePath: boolean;\n verbose: boolean;\n unstableTransformProfile?: string;\n generateStaticViewConfigs: boolean;\n}\n\nfunction assertIsBoolean(val: any): asserts val is boolean {\n if (typeof val !== 'boolean') {\n throw new CommandError(`Expected boolean, got ${typeof val}`);\n }\n}\n\nexport function resolveOptions(\n args: arg.Result<arg.Spec>,\n parsed: Awaited<ReturnType<typeof resolveCustomBooleanArgsAsync>>\n): Options {\n const dev = parsed.args['--dev'] ?? true;\n assertIsBoolean(dev);\n\n const generateStaticViewConfigs = parsed.args['--generate-static-view-configs'] ?? true;\n assertIsBoolean(generateStaticViewConfigs);\n\n const minify = parsed.args['--minify'] ?? true;\n assertIsBoolean(minify);\n\n const entryFile = args['--entry-file'];\n if (!entryFile) {\n throw new CommandError(`Missing required argument: --entry-file`);\n }\n const bundleOutput = args['--bundle-output'];\n if (!bundleOutput) {\n throw new CommandError(`Missing required argument: --bundle-output`);\n }\n return {\n entryFile,\n assetCatalogDest: args['--asset-catalog-dest'],\n platform: args['--platform'] ?? 'ios',\n transformer: args['--transformer'],\n // TODO: Support `--dev false`\n // dev: false,\n bundleOutput,\n bundleEncoding: args['--bundle-encoding'] ?? 'utf8',\n maxWorkers: args['--max-workers'],\n sourcemapOutput: args['--sourcemap-output'],\n sourcemapSourcesRoot: args['--sourcemap-sources-root'],\n sourcemapUseAbsolutePath: !!parsed.args['--sourcemap-use-absolute-path'],\n assetsDest: args['--assets-dest'],\n unstableTransformProfile: args['--unstable-transform-profile'],\n resetCache: !!parsed.args['--reset-cache'],\n resetGlobalCache: false,\n verbose: args['--verbose'] ?? env.EXPO_DEBUG,\n config: args['--config'] ? path.resolve(args['--config']) : undefined,\n dev,\n generateStaticViewConfigs,\n minify,\n };\n}\n"],"names":["resolveOptions","assertIsBoolean","val","CommandError","args","parsed","dev","generateStaticViewConfigs","minify","entryFile","bundleOutput","assetCatalogDest","platform","transformer","bundleEncoding","maxWorkers","sourcemapOutput","sourcemapSourcesRoot","sourcemapUseAbsolutePath","assetsDest","unstableTransformProfile","resetCache","resetGlobalCache","verbose","env","EXPO_DEBUG","config","path","resolve","undefined"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/export/embed/resolveOptions.ts"],"sourcesContent":["import arg from 'arg';\nimport path from 'path';\n\nimport { env } from '../../utils/env';\nimport { CommandError } from '../../utils/errors';\nimport { resolveCustomBooleanArgsAsync } from '../../utils/resolveArgs';\n\nexport interface Options {\n assetsDest?: string;\n assetCatalogDest?: string;\n entryFile: string;\n resetCache: boolean;\n resetGlobalCache: boolean;\n transformer?: string;\n minify?: boolean;\n config?: string;\n platform: string;\n dev: boolean;\n bundleOutput: string;\n bundleEncoding?: string;\n maxWorkers?: number;\n sourcemapOutput?: string;\n sourcemapSourcesRoot?: string;\n sourcemapUseAbsolutePath: boolean;\n verbose: boolean;\n unstableTransformProfile: string;\n generateStaticViewConfigs: boolean;\n}\n\nfunction assertIsBoolean(val: any): asserts val is boolean {\n if (typeof val !== 'boolean') {\n throw new CommandError(`Expected boolean, got ${typeof val}`);\n }\n}\n\nexport function resolveOptions(\n args: arg.Result<arg.Spec>,\n parsed: Awaited<ReturnType<typeof resolveCustomBooleanArgsAsync>>\n): Options {\n const dev = parsed.args['--dev'] ?? true;\n assertIsBoolean(dev);\n\n const generateStaticViewConfigs = parsed.args['--generate-static-view-configs'] ?? true;\n assertIsBoolean(generateStaticViewConfigs);\n\n const minify = parsed.args['--minify'] ?? true;\n assertIsBoolean(minify);\n\n const entryFile = args['--entry-file'];\n if (!entryFile) {\n throw new CommandError(`Missing required argument: --entry-file`);\n }\n const bundleOutput = args['--bundle-output'];\n if (!bundleOutput) {\n throw new CommandError(`Missing required argument: --bundle-output`);\n }\n return {\n entryFile,\n assetCatalogDest: args['--asset-catalog-dest'],\n platform: args['--platform'] ?? 'ios',\n transformer: args['--transformer'],\n // TODO: Support `--dev false`\n // dev: false,\n bundleOutput,\n bundleEncoding: args['--bundle-encoding'] ?? 'utf8',\n maxWorkers: args['--max-workers'],\n sourcemapOutput: args['--sourcemap-output'],\n sourcemapSourcesRoot: args['--sourcemap-sources-root'],\n sourcemapUseAbsolutePath: !!parsed.args['--sourcemap-use-absolute-path'],\n assetsDest: args['--assets-dest'],\n unstableTransformProfile: args['--unstable-transform-profile'] ?? 'default',\n resetCache: !!parsed.args['--reset-cache'],\n resetGlobalCache: false,\n verbose: args['--verbose'] ?? env.EXPO_DEBUG,\n config: args['--config'] ? path.resolve(args['--config']) : undefined,\n dev,\n generateStaticViewConfigs,\n minify,\n };\n}\n"],"names":["resolveOptions","assertIsBoolean","val","CommandError","args","parsed","dev","generateStaticViewConfigs","minify","entryFile","bundleOutput","assetCatalogDest","platform","transformer","bundleEncoding","maxWorkers","sourcemapOutput","sourcemapSourcesRoot","sourcemapUseAbsolutePath","assetsDest","unstableTransformProfile","resetCache","resetGlobalCache","verbose","env","EXPO_DEBUG","config","path","resolve","undefined"],"mappings":"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"}
@@ -43,7 +43,7 @@ function _interopRequireWildcard(obj) {
43
43
  return newObj;
44
44
  }
45
45
  }
46
- async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev , dumpAssetmap , dumpSourcemap }) {
46
+ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev , dumpAssetmap , dumpSourcemap , minify }) {
47
47
  var ref;
48
48
  (0, _nodeEnv).setNodeEnv(dev ? "development" : "production");
49
49
  require("@expo/env").load(projectRoot);
@@ -64,6 +64,7 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
64
64
  resetCache: !!clear
65
65
  }, {
66
66
  platforms,
67
+ minify,
67
68
  // TODO: Breaks asset exports
68
69
  // platforms: useWebSSG ? platforms.filter((platform) => platform !== 'web') : platforms,
69
70
  dev
@@ -99,7 +100,7 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
99
100
  await (0, _exportStaticAsync).unstable_exportStaticAsync(projectRoot, {
100
101
  outputDir: outputPath,
101
102
  // TODO: Expose
102
- minify: true
103
+ minify
103
104
  });
104
105
  Log.log("Finished saving static files");
105
106
  } else {
@@ -119,8 +120,7 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
119
120
  // Save assets like a typical bundler, preserving the file paths on web.
120
121
  const saveAssets = (0, _resolveFromProject).importCliSaveAssetsFromProject(projectRoot);
121
122
  await Promise.all(Object.entries(bundles).map(([platform, bundle])=>{
122
- return saveAssets(// @ts-expect-error: tolerable type mismatches: unused `readonly` (common in Metro) and `undefined` instead of `null`.
123
- bundle.assets, platform, staticFolder, undefined);
123
+ return saveAssets(bundle.assets, platform, staticFolder, undefined);
124
124
  }));
125
125
  }
126
126
  const { assets } = await (0, _exportAssets).exportAssetsAsync(projectRoot, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/exportApp.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { importCliSaveAssetsFromProject } from '../start/server/metro/resolveFromProject';\nimport { createTemplateHtmlFromExpoConfigAsync } from '../start/server/webTemplate';\nimport { copyAsync, ensureDirectoryAsync } from '../utils/dir';\nimport { env } from '../utils/env';\nimport { setNodeEnv } from '../utils/nodeEnv';\nimport { createBundlesAsync } from './createBundles';\nimport { exportAssetsAsync, exportCssAssetsAsync } from './exportAssets';\nimport { unstable_exportStaticAsync } from './exportStaticAsync';\nimport { getPublicExpoManifestAsync } from './getPublicExpoManifest';\nimport { printBundleSizes } from './printBundleSizes';\nimport { Options } from './resolveOptions';\nimport {\n writeAssetMapAsync,\n writeBundlesAsync,\n writeDebugHtmlAsync,\n writeMetadataJsonAsync,\n writeSourceMapsAsync,\n} from './writeContents';\n\n/**\n * The structure of the outputDir will be:\n *\n * ```\n * ├── assets\n * │ └── *\n * ├── bundles\n * │ ├── android-01ee6e3ab3e8c16a4d926c91808d5320.js\n * │ └── ios-ee8206cc754d3f7aa9123b7f909d94ea.js\n * └── metadata.json\n * ```\n */\nexport async function exportAppAsync(\n projectRoot: string,\n {\n platforms,\n outputDir,\n clear,\n dev,\n dumpAssetmap,\n dumpSourcemap,\n }: Pick<Options, 'dumpAssetmap' | 'dumpSourcemap' | 'dev' | 'clear' | 'outputDir' | 'platforms'>\n): Promise<void> {\n setNodeEnv(dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const exp = await getPublicExpoManifestAsync(projectRoot);\n\n const useWebSSG = exp.web?.output === 'static';\n\n const publicPath = path.resolve(projectRoot, env.EXPO_PUBLIC_FOLDER);\n\n const outputPath = path.resolve(projectRoot, outputDir);\n const staticFolder = outputPath;\n const assetsPath = path.join(staticFolder, 'assets');\n const bundlesPath = path.join(staticFolder, 'bundles');\n\n await Promise.all([assetsPath, bundlesPath].map(ensureDirectoryAsync));\n\n await copyPublicFolderAsync(publicPath, staticFolder);\n\n // Run metro bundler and create the JS bundles/source maps.\n const bundles = await createBundlesAsync(\n projectRoot,\n { resetCache: !!clear },\n {\n platforms,\n // TODO: Breaks asset exports\n // platforms: useWebSSG ? platforms.filter((platform) => platform !== 'web') : platforms,\n dev,\n // TODO: Disable source map generation if we aren't outputting them.\n }\n );\n\n const bundleEntries = Object.entries(bundles);\n if (bundleEntries.length) {\n // Log bundle size info to the user\n printBundleSizes(\n Object.fromEntries(\n bundleEntries.map(([key, value]) => {\n if (!dumpSourcemap) {\n return [\n key,\n {\n ...value,\n // Remove source maps from the bundles if they aren't going to be written.\n map: undefined,\n },\n ];\n }\n\n return [key, value];\n })\n )\n );\n }\n\n // Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).\n const { hashes, fileNames } = await writeBundlesAsync({ bundles, outputDir: bundlesPath });\n\n Log.log('Finished saving JS Bundles');\n\n if (platforms.includes('web')) {\n if (useWebSSG) {\n await unstable_exportStaticAsync(projectRoot, {\n outputDir: outputPath,\n // TODO: Expose\n minify: true,\n });\n Log.log('Finished saving static files');\n } else {\n const cssLinks = await exportCssAssetsAsync({\n outputDir,\n bundles,\n });\n // Generate SPA-styled HTML file.\n // If web exists, then write the template HTML file.\n await fs.promises.writeFile(\n path.join(staticFolder, 'index.html'),\n await createTemplateHtmlFromExpoConfigAsync(projectRoot, {\n scripts: [`/bundles/${fileNames.web}`],\n cssLinks,\n })\n );\n }\n\n // Save assets like a typical bundler, preserving the file paths on web.\n const saveAssets = importCliSaveAssetsFromProject(projectRoot);\n await Promise.all(\n Object.entries(bundles).map(([platform, bundle]) => {\n return saveAssets(\n // @ts-expect-error: tolerable type mismatches: unused `readonly` (common in Metro) and `undefined` instead of `null`.\n bundle.assets,\n platform,\n staticFolder,\n undefined\n );\n })\n );\n }\n\n const { assets } = await exportAssetsAsync(projectRoot, {\n exp,\n outputDir: staticFolder,\n bundles,\n });\n\n if (dumpAssetmap) {\n Log.log('Dumping asset map');\n await writeAssetMapAsync({ outputDir: staticFolder, assets });\n }\n\n // build source maps\n if (dumpSourcemap) {\n Log.log('Dumping source maps');\n await writeSourceMapsAsync({\n bundles,\n hashes,\n outputDir: bundlesPath,\n fileNames,\n });\n\n Log.log('Preparing additional debugging files');\n // If we output source maps, then add a debug HTML file which the user can open in\n // the web browser to inspect the output like web.\n await writeDebugHtmlAsync({\n outputDir: staticFolder,\n fileNames,\n });\n }\n\n // Generate a `metadata.json` and the export is complete.\n await writeMetadataJsonAsync({ outputDir: staticFolder, bundles, fileNames });\n}\n\n/**\n * Copy the contents of the public folder into the output folder.\n * This enables users to add static files like `favicon.ico` or `serve.json`.\n *\n * The contents of this folder are completely universal since they refer to\n * static network requests which fall outside the scope of React Native's magic\n * platform resolution patterns.\n */\nasync function copyPublicFolderAsync(publicFolder: string, outputFolder: string) {\n if (fs.existsSync(publicFolder)) {\n await copyAsync(publicFolder, outputFolder);\n }\n}\n"],"names":["exportAppAsync","Log","projectRoot","platforms","outputDir","clear","dev","dumpAssetmap","dumpSourcemap","exp","setNodeEnv","require","load","getPublicExpoManifestAsync","useWebSSG","web","output","publicPath","path","resolve","env","EXPO_PUBLIC_FOLDER","outputPath","staticFolder","assetsPath","join","bundlesPath","Promise","all","map","ensureDirectoryAsync","copyPublicFolderAsync","bundles","createBundlesAsync","resetCache","bundleEntries","Object","entries","length","printBundleSizes","fromEntries","key","value","undefined","hashes","fileNames","writeBundlesAsync","log","includes","unstable_exportStaticAsync","minify","cssLinks","exportCssAssetsAsync","fs","promises","writeFile","createTemplateHtmlFromExpoConfigAsync","scripts","saveAssets","importCliSaveAssetsFromProject","platform","bundle","assets","exportAssetsAsync","writeAssetMapAsync","writeSourceMapsAsync","writeDebugHtmlAsync","writeMetadataJsonAsync","publicFolder","outputFolder","existsSync","copyAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/exportApp.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { importCliSaveAssetsFromProject } from '../start/server/metro/resolveFromProject';\nimport { createTemplateHtmlFromExpoConfigAsync } from '../start/server/webTemplate';\nimport { copyAsync, ensureDirectoryAsync } from '../utils/dir';\nimport { env } from '../utils/env';\nimport { setNodeEnv } from '../utils/nodeEnv';\nimport { createBundlesAsync } from './createBundles';\nimport { exportAssetsAsync, exportCssAssetsAsync } from './exportAssets';\nimport { unstable_exportStaticAsync } from './exportStaticAsync';\nimport { getPublicExpoManifestAsync } from './getPublicExpoManifest';\nimport { printBundleSizes } from './printBundleSizes';\nimport { Options } from './resolveOptions';\nimport {\n writeAssetMapAsync,\n writeBundlesAsync,\n writeDebugHtmlAsync,\n writeMetadataJsonAsync,\n writeSourceMapsAsync,\n} from './writeContents';\n\n/**\n * The structure of the outputDir will be:\n *\n * ```\n * ├── assets\n * │ └── *\n * ├── bundles\n * │ ├── android-01ee6e3ab3e8c16a4d926c91808d5320.js\n * │ └── ios-ee8206cc754d3f7aa9123b7f909d94ea.js\n * └── metadata.json\n * ```\n */\nexport async function exportAppAsync(\n projectRoot: string,\n {\n platforms,\n outputDir,\n clear,\n dev,\n dumpAssetmap,\n dumpSourcemap,\n minify,\n }: Pick<\n Options,\n 'dumpAssetmap' | 'dumpSourcemap' | 'dev' | 'clear' | 'outputDir' | 'platforms' | 'minify'\n >\n): Promise<void> {\n setNodeEnv(dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const exp = await getPublicExpoManifestAsync(projectRoot);\n\n const useWebSSG = exp.web?.output === 'static';\n\n const publicPath = path.resolve(projectRoot, env.EXPO_PUBLIC_FOLDER);\n\n const outputPath = path.resolve(projectRoot, outputDir);\n const staticFolder = outputPath;\n const assetsPath = path.join(staticFolder, 'assets');\n const bundlesPath = path.join(staticFolder, 'bundles');\n\n await Promise.all([assetsPath, bundlesPath].map(ensureDirectoryAsync));\n\n await copyPublicFolderAsync(publicPath, staticFolder);\n\n // Run metro bundler and create the JS bundles/source maps.\n const bundles = await createBundlesAsync(\n projectRoot,\n { resetCache: !!clear },\n {\n platforms,\n minify,\n // TODO: Breaks asset exports\n // platforms: useWebSSG ? platforms.filter((platform) => platform !== 'web') : platforms,\n dev,\n // TODO: Disable source map generation if we aren't outputting them.\n }\n );\n\n const bundleEntries = Object.entries(bundles);\n if (bundleEntries.length) {\n // Log bundle size info to the user\n printBundleSizes(\n Object.fromEntries(\n bundleEntries.map(([key, value]) => {\n if (!dumpSourcemap) {\n return [\n key,\n {\n ...value,\n // Remove source maps from the bundles if they aren't going to be written.\n map: undefined,\n },\n ];\n }\n\n return [key, value];\n })\n )\n );\n }\n\n // Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).\n const { hashes, fileNames } = await writeBundlesAsync({ bundles, outputDir: bundlesPath });\n\n Log.log('Finished saving JS Bundles');\n\n if (platforms.includes('web')) {\n if (useWebSSG) {\n await unstable_exportStaticAsync(projectRoot, {\n outputDir: outputPath,\n // TODO: Expose\n minify,\n });\n Log.log('Finished saving static files');\n } else {\n const cssLinks = await exportCssAssetsAsync({\n outputDir,\n bundles,\n });\n // Generate SPA-styled HTML file.\n // If web exists, then write the template HTML file.\n await fs.promises.writeFile(\n path.join(staticFolder, 'index.html'),\n await createTemplateHtmlFromExpoConfigAsync(projectRoot, {\n scripts: [`/bundles/${fileNames.web}`],\n cssLinks,\n })\n );\n }\n\n // Save assets like a typical bundler, preserving the file paths on web.\n const saveAssets = importCliSaveAssetsFromProject(projectRoot);\n await Promise.all(\n Object.entries(bundles).map(([platform, bundle]) => {\n return saveAssets(bundle.assets, platform, staticFolder, undefined);\n })\n );\n }\n\n const { assets } = await exportAssetsAsync(projectRoot, {\n exp,\n outputDir: staticFolder,\n bundles,\n });\n\n if (dumpAssetmap) {\n Log.log('Dumping asset map');\n await writeAssetMapAsync({ outputDir: staticFolder, assets });\n }\n\n // build source maps\n if (dumpSourcemap) {\n Log.log('Dumping source maps');\n await writeSourceMapsAsync({\n bundles,\n hashes,\n outputDir: bundlesPath,\n fileNames,\n });\n\n Log.log('Preparing additional debugging files');\n // If we output source maps, then add a debug HTML file which the user can open in\n // the web browser to inspect the output like web.\n await writeDebugHtmlAsync({\n outputDir: staticFolder,\n fileNames,\n });\n }\n\n // Generate a `metadata.json` and the export is complete.\n await writeMetadataJsonAsync({ outputDir: staticFolder, bundles, fileNames });\n}\n\n/**\n * Copy the contents of the public folder into the output folder.\n * This enables users to add static files like `favicon.ico` or `serve.json`.\n *\n * The contents of this folder are completely universal since they refer to\n * static network requests which fall outside the scope of React Native's magic\n * platform resolution patterns.\n */\nasync function copyPublicFolderAsync(publicFolder: string, outputFolder: string) {\n if (fs.existsSync(publicFolder)) {\n await copyAsync(publicFolder, outputFolder);\n }\n}\n"],"names":["exportAppAsync","Log","projectRoot","platforms","outputDir","clear","dev","dumpAssetmap","dumpSourcemap","minify","exp","setNodeEnv","require","load","getPublicExpoManifestAsync","useWebSSG","web","output","publicPath","path","resolve","env","EXPO_PUBLIC_FOLDER","outputPath","staticFolder","assetsPath","join","bundlesPath","Promise","all","map","ensureDirectoryAsync","copyPublicFolderAsync","bundles","createBundlesAsync","resetCache","bundleEntries","Object","entries","length","printBundleSizes","fromEntries","key","value","undefined","hashes","fileNames","writeBundlesAsync","log","includes","unstable_exportStaticAsync","cssLinks","exportCssAssetsAsync","fs","promises","writeFile","createTemplateHtmlFromExpoConfigAsync","scripts","saveAssets","importCliSaveAssetsFromProject","platform","bundle","assets","exportAssetsAsync","writeAssetMapAsync","writeSourceMapsAsync","writeDebugHtmlAsync","writeMetadataJsonAsync","publicFolder","outputFolder","existsSync","copyAsync"],"mappings":"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"}
@@ -16,7 +16,7 @@ var _util = require("util");
16
16
  var _log = require("../log");
17
17
  var _devServerManager = require("../start/server/DevServerManager");
18
18
  var _metroBundlerDevServer = require("../start/server/metro/MetroBundlerDevServer");
19
- var _ansi = require("../utils/ansi");
19
+ var _metroErrorInterface = require("../start/server/metro/metroErrorInterface");
20
20
  function _interopRequireDefault(obj) {
21
21
  return obj && obj.__esModule ? obj : {
22
22
  default: obj
@@ -36,14 +36,14 @@ async function unstable_exportStaticAsync(projectRoot, options) {
36
36
  type: "metro"
37
37
  },
38
38
  ]);
39
- await exportFromServerAsync(devServerManager, options);
39
+ await exportFromServerAsync(projectRoot, devServerManager, options);
40
40
  await devServerManager.stopAsync();
41
41
  }
42
42
  /** Match `(page)` -> `page` */ function matchGroupName(name) {
43
43
  var ref;
44
44
  return (ref = name.match(/^\(([^/]+?)\)$/)) == null ? void 0 : ref[1];
45
45
  }
46
- async function getFilesToExportFromServerAsync({ manifest , renderAsync }) {
46
+ async function getFilesToExportFromServerAsync(projectRoot, { manifest , renderAsync }) {
47
47
  // name : contents
48
48
  const files = new Map();
49
49
  await Promise.all(getHtmlFiles({
@@ -55,32 +55,34 @@ async function getFilesToExportFromServerAsync({ manifest , renderAsync }) {
55
55
  const data = await renderAsync(pathname);
56
56
  files.set(outputPath, data);
57
57
  } catch (e) {
58
- // TODO: Format Metro error message better...
59
- _log.Log.error("Failed to statically render route:", pathname);
60
- e.message = (0, _ansi).stripAnsi(e.message);
61
- _log.Log.exception(e);
62
- throw e;
58
+ await (0, _metroErrorInterface).logMetroErrorAsync({
59
+ error: e,
60
+ projectRoot
61
+ });
62
+ throw new Error("Failed to statically export route: " + pathname);
63
63
  }
64
64
  }));
65
65
  return files;
66
66
  }
67
- async function exportFromServerAsync(devServerManager, { outputDir }) {
67
+ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir , minify }) {
68
68
  const devServer = devServerManager.getDefaultDevServer();
69
69
  (0, _assert).default(devServer instanceof _metroBundlerDevServer.MetroBundlerDevServer);
70
70
  const [manifest, resources, renderAsync] = await Promise.all([
71
71
  devServer.getRoutesAsync(),
72
72
  devServer.getStaticResourcesAsync({
73
- mode: "production"
73
+ mode: "production",
74
+ minify
74
75
  }),
75
76
  devServer.getStaticRenderFunctionAsync({
76
- mode: "production"
77
+ mode: "production",
78
+ minify
77
79
  }),
78
80
  ]);
79
81
  debug("Routes:\n", (0, _util).inspect(manifest, {
80
82
  colors: true,
81
83
  depth: null
82
84
  }));
83
- const files = await getFilesToExportFromServerAsync({
85
+ const files = await getFilesToExportFromServerAsync(projectRoot, {
84
86
  manifest,
85
87
  async renderAsync (pathname) {
86
88
  const template = await renderAsync(pathname);
@@ -160,12 +162,10 @@ function getPathVariations(routePath) {
160
162
  if (index >= segments.length) {
161
163
  return;
162
164
  }
163
- const segment = segments[index];
164
- const groupName = matchGroupName(segment);
165
- if (groupName) {
166
- const newSegments = [
167
- ...segments
168
- ];
165
+ const newSegments = [
166
+ ...segments
167
+ ];
168
+ while(index < newSegments.length && matchGroupName(newSegments[index]) && newSegments.length > 1){
169
169
  newSegments.splice(index, 1);
170
170
  variations.add(newSegments.join("/"));
171
171
  generateVariations(newSegments, index + 1);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/exportStaticAsync.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport prettyBytes from 'pretty-bytes';\nimport { inspect } from 'util';\n\nimport { Log } from '../log';\nimport { DevServerManager } from '../start/server/DevServerManager';\nimport { MetroBundlerDevServer } from '../start/server/metro/MetroBundlerDevServer';\nimport { stripAnsi } from '../utils/ansi';\n\nconst debug = require('debug')('expo:export:generateStaticRoutes') as typeof console.log;\n\ntype Options = { outputDir: string; minify: boolean };\n\n/** @private */\nexport async function unstable_exportStaticAsync(projectRoot: string, options: Options) {\n // NOTE(EvanBacon): Please don't use this feature.\n Log.warn('Static exporting with Metro is an experimental feature.');\n\n const devServerManager = new DevServerManager(projectRoot, {\n minify: options.minify,\n mode: 'production',\n location: {},\n });\n\n await devServerManager.startAsync([\n {\n type: 'metro',\n },\n ]);\n\n await exportFromServerAsync(devServerManager, options);\n\n await devServerManager.stopAsync();\n}\n\n/** Match `(page)` -> `page` */\nfunction matchGroupName(name: string): string | undefined {\n return name.match(/^\\(([^/]+?)\\)$/)?.[1];\n}\n\nexport async function getFilesToExportFromServerAsync({\n manifest,\n renderAsync,\n}: {\n manifest: any;\n renderAsync: (pathname: string) => Promise<string>;\n}): Promise<Map<string, string>> {\n // name : contents\n const files = new Map<string, string>();\n\n await Promise.all(\n getHtmlFiles({ manifest }).map(async (outputPath) => {\n const pathname = outputPath.replace(/(index)?\\.html$/, '');\n try {\n files.set(outputPath, '');\n const data = await renderAsync(pathname);\n files.set(outputPath, data);\n } catch (e: any) {\n // TODO: Format Metro error message better...\n Log.error('Failed to statically render route:', pathname);\n e.message = stripAnsi(e.message);\n Log.exception(e);\n throw e;\n }\n })\n );\n\n return files;\n}\n\n/** Perform all fs commits */\nexport async function exportFromServerAsync(\n devServerManager: DevServerManager,\n { outputDir }: Options\n): Promise<void> {\n const devServer = devServerManager.getDefaultDevServer();\n assert(devServer instanceof MetroBundlerDevServer);\n\n const [manifest, resources, renderAsync] = await Promise.all([\n devServer.getRoutesAsync(),\n devServer.getStaticResourcesAsync({ mode: 'production' }),\n devServer.getStaticRenderFunctionAsync({\n mode: 'production',\n }),\n ]);\n\n debug('Routes:\\n', inspect(manifest, { colors: true, depth: null }));\n\n const files = await getFilesToExportFromServerAsync({\n manifest,\n async renderAsync(pathname: string) {\n const template = await renderAsync(pathname);\n return devServer.composeResourcesWithHtml({\n mode: 'production',\n resources,\n template,\n });\n },\n });\n\n resources.forEach((resource) => {\n files.set(resource.filename, resource.source);\n });\n\n fs.mkdirSync(path.join(outputDir), { recursive: true });\n\n Log.log('');\n Log.log(chalk.bold`Exporting ${files.size} files:`);\n await Promise.all(\n [...files.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(async ([file, contents]) => {\n const length = Buffer.byteLength(contents, 'utf8');\n Log.log(file, chalk.gray`(${prettyBytes(length)})`);\n const outputPath = path.join(outputDir, file);\n await fs.promises.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.promises.writeFile(outputPath, contents);\n })\n );\n Log.log('');\n}\n\nexport function getHtmlFiles({ manifest }: { manifest: any }): string[] {\n const htmlFiles = new Set<string>();\n\n function traverseScreens(screens: string | { screens: any; path: string }, basePath = '') {\n for (const value of Object.values(screens)) {\n if (typeof value === 'string') {\n let filePath = basePath + value;\n if (value === '') {\n filePath =\n basePath === ''\n ? 'index'\n : basePath.endsWith('/')\n ? basePath + 'index'\n : basePath.slice(0, -1);\n }\n // TODO: Dedupe requests for alias routes.\n addOptionalGroups(filePath);\n } else if (typeof value === 'object' && value?.screens) {\n const newPath = basePath + value.path + '/';\n traverseScreens(value.screens, newPath);\n }\n }\n }\n\n function addOptionalGroups(path: string) {\n const variations = getPathVariations(path);\n for (const variation of variations) {\n htmlFiles.add(variation);\n }\n }\n\n traverseScreens(manifest.screens);\n\n return Array.from(htmlFiles).map((value) => {\n const parts = value.split('/');\n // Replace `:foo` with `[foo]` and `*foo` with `[...foo]`\n const partsWithGroups = parts.map((part) => {\n if (part.startsWith(':')) {\n return `[${part.slice(1)}]`;\n } else if (part.startsWith('*')) {\n return `[...${part.slice(1)}]`;\n }\n return part;\n });\n return partsWithGroups.join('/') + '.html';\n });\n}\n\n// Given a route like `(foo)/bar/(baz)`, return all possible variations of the route.\n// e.g. `(foo)/bar/(baz)`, `(foo)/bar/baz`, `foo/bar/(baz)`, `foo/bar/baz`,\nexport function getPathVariations(routePath: string): string[] {\n const variations = new Set<string>([routePath]);\n const segments = routePath.split('/');\n\n function generateVariations(segments: string[], index: number): void {\n if (index >= segments.length) {\n return;\n }\n\n const segment = segments[index];\n const groupName = matchGroupName(segment);\n if (groupName) {\n const newSegments = [...segments];\n newSegments.splice(index, 1);\n variations.add(newSegments.join('/'));\n\n generateVariations(newSegments, index + 1);\n }\n\n generateVariations(segments, index + 1);\n }\n\n generateVariations(segments, 0);\n\n return Array.from(variations);\n}\n"],"names":["unstable_exportStaticAsync","getFilesToExportFromServerAsync","exportFromServerAsync","getHtmlFiles","getPathVariations","debug","require","projectRoot","options","Log","warn","devServerManager","DevServerManager","minify","mode","location","startAsync","type","stopAsync","matchGroupName","name","match","manifest","renderAsync","files","Map","Promise","all","map","outputPath","pathname","replace","set","data","e","error","message","stripAnsi","exception","outputDir","devServer","getDefaultDevServer","assert","MetroBundlerDevServer","resources","getRoutesAsync","getStaticResourcesAsync","getStaticRenderFunctionAsync","inspect","colors","depth","template","composeResourcesWithHtml","forEach","resource","filename","source","fs","mkdirSync","path","join","recursive","log","chalk","bold","size","entries","sort","a","b","localeCompare","file","contents","length","Buffer","byteLength","gray","prettyBytes","promises","mkdir","dirname","writeFile","htmlFiles","Set","traverseScreens","screens","basePath","value","Object","values","filePath","endsWith","slice","addOptionalGroups","newPath","variations","variation","add","Array","from","parts","split","partsWithGroups","part","startsWith","routePath","segments","generateVariations","index","segment","groupName","newSegments","splice"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/exportStaticAsync.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport prettyBytes from 'pretty-bytes';\nimport { inspect } from 'util';\n\nimport { Log } from '../log';\nimport { DevServerManager } from '../start/server/DevServerManager';\nimport { MetroBundlerDevServer } from '../start/server/metro/MetroBundlerDevServer';\nimport { logMetroErrorAsync } from '../start/server/metro/metroErrorInterface';\n\nconst debug = require('debug')('expo:export:generateStaticRoutes') as typeof console.log;\n\ntype Options = { outputDir: string; minify: boolean };\n\n/** @private */\nexport async function unstable_exportStaticAsync(projectRoot: string, options: Options) {\n // NOTE(EvanBacon): Please don't use this feature.\n Log.warn('Static exporting with Metro is an experimental feature.');\n\n const devServerManager = new DevServerManager(projectRoot, {\n minify: options.minify,\n mode: 'production',\n location: {},\n });\n\n await devServerManager.startAsync([\n {\n type: 'metro',\n },\n ]);\n\n await exportFromServerAsync(projectRoot, devServerManager, options);\n\n await devServerManager.stopAsync();\n}\n\n/** Match `(page)` -> `page` */\nfunction matchGroupName(name: string): string | undefined {\n return name.match(/^\\(([^/]+?)\\)$/)?.[1];\n}\n\nexport async function getFilesToExportFromServerAsync(\n projectRoot: string,\n {\n manifest,\n renderAsync,\n }: {\n manifest: any;\n renderAsync: (pathname: string) => Promise<string>;\n }\n): Promise<Map<string, string>> {\n // name : contents\n const files = new Map<string, string>();\n\n await Promise.all(\n getHtmlFiles({ manifest }).map(async (outputPath) => {\n const pathname = outputPath.replace(/(index)?\\.html$/, '');\n try {\n files.set(outputPath, '');\n const data = await renderAsync(pathname);\n files.set(outputPath, data);\n } catch (e: any) {\n await logMetroErrorAsync({ error: e, projectRoot });\n throw new Error('Failed to statically export route: ' + pathname);\n }\n })\n );\n\n return files;\n}\n\n/** Perform all fs commits */\nexport async function exportFromServerAsync(\n projectRoot: string,\n devServerManager: DevServerManager,\n { outputDir, minify }: Options\n): Promise<void> {\n const devServer = devServerManager.getDefaultDevServer();\n assert(devServer instanceof MetroBundlerDevServer);\n\n const [manifest, resources, renderAsync] = await Promise.all([\n devServer.getRoutesAsync(),\n devServer.getStaticResourcesAsync({ mode: 'production', minify }),\n devServer.getStaticRenderFunctionAsync({\n mode: 'production',\n minify,\n }),\n ]);\n\n debug('Routes:\\n', inspect(manifest, { colors: true, depth: null }));\n\n const files = await getFilesToExportFromServerAsync(projectRoot, {\n manifest,\n async renderAsync(pathname: string) {\n const template = await renderAsync(pathname);\n return devServer.composeResourcesWithHtml({\n mode: 'production',\n resources,\n template,\n });\n },\n });\n\n resources.forEach((resource) => {\n files.set(resource.filename, resource.source);\n });\n\n fs.mkdirSync(path.join(outputDir), { recursive: true });\n\n Log.log('');\n Log.log(chalk.bold`Exporting ${files.size} files:`);\n await Promise.all(\n [...files.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(async ([file, contents]) => {\n const length = Buffer.byteLength(contents, 'utf8');\n Log.log(file, chalk.gray`(${prettyBytes(length)})`);\n const outputPath = path.join(outputDir, file);\n await fs.promises.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.promises.writeFile(outputPath, contents);\n })\n );\n Log.log('');\n}\n\nexport function getHtmlFiles({ manifest }: { manifest: any }): string[] {\n const htmlFiles = new Set<string>();\n\n function traverseScreens(screens: string | { screens: any; path: string }, basePath = '') {\n for (const value of Object.values(screens)) {\n if (typeof value === 'string') {\n let filePath = basePath + value;\n if (value === '') {\n filePath =\n basePath === ''\n ? 'index'\n : basePath.endsWith('/')\n ? basePath + 'index'\n : basePath.slice(0, -1);\n }\n // TODO: Dedupe requests for alias routes.\n addOptionalGroups(filePath);\n } else if (typeof value === 'object' && value?.screens) {\n const newPath = basePath + value.path + '/';\n traverseScreens(value.screens, newPath);\n }\n }\n }\n\n function addOptionalGroups(path: string) {\n const variations = getPathVariations(path);\n for (const variation of variations) {\n htmlFiles.add(variation);\n }\n }\n\n traverseScreens(manifest.screens);\n\n return Array.from(htmlFiles).map((value) => {\n const parts = value.split('/');\n // Replace `:foo` with `[foo]` and `*foo` with `[...foo]`\n const partsWithGroups = parts.map((part) => {\n if (part.startsWith(':')) {\n return `[${part.slice(1)}]`;\n } else if (part.startsWith('*')) {\n return `[...${part.slice(1)}]`;\n }\n return part;\n });\n return partsWithGroups.join('/') + '.html';\n });\n}\n\n// Given a route like `(foo)/bar/(baz)`, return all possible variations of the route.\n// e.g. `(foo)/bar/(baz)`, `(foo)/bar/baz`, `foo/bar/(baz)`, `foo/bar/baz`,\nexport function getPathVariations(routePath: string): string[] {\n const variations = new Set<string>([routePath]);\n const segments = routePath.split('/');\n\n function generateVariations(segments: string[], index: number): void {\n if (index >= segments.length) {\n return;\n }\n\n const newSegments = [...segments];\n while (\n index < newSegments.length &&\n matchGroupName(newSegments[index]) &&\n newSegments.length > 1\n ) {\n newSegments.splice(index, 1);\n variations.add(newSegments.join('/'));\n generateVariations(newSegments, index + 1);\n }\n\n generateVariations(segments, index + 1);\n }\n\n generateVariations(segments, 0);\n\n return Array.from(variations);\n}\n"],"names":["unstable_exportStaticAsync","getFilesToExportFromServerAsync","exportFromServerAsync","getHtmlFiles","getPathVariations","debug","require","projectRoot","options","Log","warn","devServerManager","DevServerManager","minify","mode","location","startAsync","type","stopAsync","matchGroupName","name","match","manifest","renderAsync","files","Map","Promise","all","map","outputPath","pathname","replace","set","data","e","logMetroErrorAsync","error","Error","outputDir","devServer","getDefaultDevServer","assert","MetroBundlerDevServer","resources","getRoutesAsync","getStaticResourcesAsync","getStaticRenderFunctionAsync","inspect","colors","depth","template","composeResourcesWithHtml","forEach","resource","filename","source","fs","mkdirSync","path","join","recursive","log","chalk","bold","size","entries","sort","a","b","localeCompare","file","contents","length","Buffer","byteLength","gray","prettyBytes","promises","mkdir","dirname","writeFile","htmlFiles","Set","traverseScreens","screens","basePath","value","Object","values","filePath","endsWith","slice","addOptionalGroups","newPath","variations","variation","add","Array","from","parts","split","partsWithGroups","part","startsWith","routePath","segments","generateVariations","index","newSegments","splice"],"mappings":"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"}
@@ -68,7 +68,6 @@ async function bundleAsync(projectRoot, expoConfig, options, bundles) {
68
68
  reporter.update({
69
69
  buildID,
70
70
  type: "bundle_build_started",
71
- // @ts-expect-error: TODO
72
71
  bundleDetails
73
72
  });
74
73
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/fork-bundleAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfigFilePaths, Platform } from '@expo/config';\nimport {\n buildHermesBundleAsync,\n isEnableHermesManaged,\n maybeThrowFromInconsistentEngineAsync,\n} from '@expo/dev-server/build/HermesBundler';\nimport {\n importMetroFromProject,\n importMetroServerFromProject,\n} from '@expo/dev-server/build/metro/importMetroFromProject';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport Metro from 'metro';\n\nimport { CSSAsset, getCssModulesFromBundler } from '../start/server/metro/getCssModulesFromBundler';\nimport { loadMetroConfigAsync } from '../start/server/metro/instantiateMetro';\n\nexport type MetroDevServerOptions = LoadOptions & {\n logger: import('@expo/bunyan');\n quiet?: boolean;\n};\nexport type BundleOptions = {\n entryPoint: string;\n platform: 'android' | 'ios' | 'web';\n dev?: boolean;\n minify?: boolean;\n sourceMapUrl?: string;\n};\nexport type BundleAssetWithFileHashes = Metro.AssetData & {\n fileHashes: string[]; // added by the hashAssets asset plugin\n};\nexport type BundleOutput = {\n code: string;\n map?: string;\n hermesBytecodeBundle?: Uint8Array;\n hermesSourcemap?: string;\n css: CSSAsset[];\n assets: readonly BundleAssetWithFileHashes[];\n};\n\nlet nextBuildID = 0;\n\n// Fork of @expo/dev-server bundleAsync to add Metro logging back.\n\nasync function assertEngineMismatchAsync(projectRoot: string, exp: ExpoConfig, platform: Platform) {\n const isHermesManaged = isEnableHermesManaged(exp, platform);\n\n const paths = getConfigFilePaths(projectRoot);\n const configFilePath = paths.dynamicConfigPath ?? paths.staticConfigPath ?? 'app.json';\n await maybeThrowFromInconsistentEngineAsync(\n projectRoot,\n configFilePath,\n platform,\n isHermesManaged\n );\n}\n\nexport async function bundleAsync(\n projectRoot: string,\n expoConfig: ExpoConfig,\n options: MetroDevServerOptions,\n bundles: BundleOptions[]\n): Promise<BundleOutput[]> {\n // Assert early so the user doesn't have to wait until bundling is complete to find out that\n // Hermes won't be available.\n await Promise.all(\n bundles.map(({ platform }) => assertEngineMismatchAsync(projectRoot, expoConfig, platform))\n );\n\n const metro = importMetroFromProject(projectRoot);\n const Server = importMetroServerFromProject(projectRoot);\n\n const { config, reporter } = await loadMetroConfigAsync(projectRoot, options, {\n exp: expoConfig,\n });\n\n const metroServer = await metro.runMetro(config, {\n watch: false,\n });\n\n const buildAsync = async (bundle: BundleOptions): Promise<BundleOutput> => {\n const buildID = `bundle_${nextBuildID++}_${bundle.platform}`;\n const isHermes = isEnableHermesManaged(expoConfig, bundle.platform);\n const bundleOptions: Metro.BundleOptions = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n bundleType: 'bundle',\n platform: bundle.platform,\n entryFile: bundle.entryPoint,\n dev: bundle.dev ?? false,\n minify: !isHermes && (bundle.minify ?? !bundle.dev),\n inlineSourceMap: false,\n sourceMapUrl: bundle.sourceMapUrl,\n createModuleIdFactory: config.serializer.createModuleIdFactory,\n onProgress: (transformedFileCount: number, totalFileCount: number) => {\n if (!options.quiet) {\n reporter.update({\n buildID,\n type: 'bundle_transform_progressed',\n transformedFileCount,\n totalFileCount,\n });\n }\n },\n };\n const bundleDetails = {\n ...bundleOptions,\n buildID,\n };\n reporter.update({\n buildID,\n type: 'bundle_build_started',\n // @ts-expect-error: TODO\n bundleDetails,\n });\n try {\n const { code, map } = await metroServer.build(bundleOptions);\n const [assets, css] = await Promise.all([\n metroServer.getAssets(bundleOptions),\n getCssModulesFromBundler(config, metroServer.getBundler(), bundleOptions),\n ]);\n\n reporter.update({\n buildID,\n type: 'bundle_build_done',\n });\n return { code, map, assets: assets as readonly BundleAssetWithFileHashes[], css };\n } catch (error) {\n reporter.update({\n buildID,\n type: 'bundle_build_failed',\n });\n\n throw error;\n }\n };\n\n const maybeAddHermesBundleAsync = async (\n bundle: BundleOptions,\n bundleOutput: BundleOutput\n ): Promise<BundleOutput> => {\n const { platform } = bundle;\n const isHermesManaged = isEnableHermesManaged(expoConfig, platform);\n if (isHermesManaged) {\n const platformTag = chalk.bold(\n { ios: 'iOS', android: 'Android', web: 'Web' }[platform] || platform\n );\n\n reporter.terminal.log(`${platformTag} Building Hermes bytecode for the bundle`);\n\n const hermesBundleOutput = await buildHermesBundleAsync(\n projectRoot,\n bundleOutput.code,\n bundleOutput.map!,\n bundle.minify ?? !bundle.dev\n );\n bundleOutput.hermesBytecodeBundle = hermesBundleOutput.hbc;\n bundleOutput.hermesSourcemap = hermesBundleOutput.sourcemap;\n }\n return bundleOutput;\n };\n\n try {\n const intermediateOutputs = await Promise.all(bundles.map((bundle) => buildAsync(bundle)));\n const bundleOutputs: BundleOutput[] = [];\n for (let i = 0; i < bundles.length; ++i) {\n // hermesc does not support parallel building even we spawn processes.\n // we should build them sequentially.\n bundleOutputs.push(await maybeAddHermesBundleAsync(bundles[i], intermediateOutputs[i]));\n }\n return bundleOutputs;\n } catch (error) {\n // New line so errors don't show up inline with the progress bar\n console.log('');\n throw error;\n } finally {\n metroServer.end();\n }\n}\n"],"names":["bundleAsync","nextBuildID","assertEngineMismatchAsync","projectRoot","exp","platform","isHermesManaged","isEnableHermesManaged","paths","getConfigFilePaths","configFilePath","dynamicConfigPath","staticConfigPath","maybeThrowFromInconsistentEngineAsync","expoConfig","options","bundles","Promise","all","map","metro","importMetroFromProject","Server","importMetroServerFromProject","config","reporter","loadMetroConfigAsync","metroServer","runMetro","watch","buildAsync","bundle","buildID","isHermes","bundleOptions","DEFAULT_BUNDLE_OPTIONS","bundleType","entryFile","entryPoint","dev","minify","inlineSourceMap","sourceMapUrl","createModuleIdFactory","serializer","onProgress","transformedFileCount","totalFileCount","quiet","update","type","bundleDetails","code","build","assets","css","getAssets","getCssModulesFromBundler","getBundler","error","maybeAddHermesBundleAsync","bundleOutput","platformTag","chalk","bold","ios","android","web","terminal","log","hermesBundleOutput","buildHermesBundleAsync","hermesBytecodeBundle","hbc","hermesSourcemap","sourcemap","intermediateOutputs","bundleOutputs","i","length","push","console","end"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/fork-bundleAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfigFilePaths, Platform } from '@expo/config';\nimport {\n buildHermesBundleAsync,\n isEnableHermesManaged,\n maybeThrowFromInconsistentEngineAsync,\n} from '@expo/dev-server/build/HermesBundler';\nimport {\n importMetroFromProject,\n importMetroServerFromProject,\n} from '@expo/dev-server/build/metro/importMetroFromProject';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport Metro from 'metro';\nimport type { BundleOptions as MetroBundleOptions } from 'metro/src/shared/types';\n\nimport { CSSAsset, getCssModulesFromBundler } from '../start/server/metro/getCssModulesFromBundler';\nimport { loadMetroConfigAsync } from '../start/server/metro/instantiateMetro';\n\nexport type MetroDevServerOptions = LoadOptions & {\n logger: import('@expo/bunyan');\n quiet?: boolean;\n};\nexport type BundleOptions = {\n entryPoint: string;\n platform: 'android' | 'ios' | 'web';\n dev?: boolean;\n minify?: boolean;\n sourceMapUrl?: string;\n};\nexport type BundleAssetWithFileHashes = Metro.AssetData & {\n fileHashes: string[]; // added by the hashAssets asset plugin\n};\nexport type BundleOutput = {\n code: string;\n map?: string;\n hermesBytecodeBundle?: Uint8Array;\n hermesSourcemap?: string;\n css: CSSAsset[];\n assets: readonly BundleAssetWithFileHashes[];\n};\n\nlet nextBuildID = 0;\n\n// Fork of @expo/dev-server bundleAsync to add Metro logging back.\n\nasync function assertEngineMismatchAsync(projectRoot: string, exp: ExpoConfig, platform: Platform) {\n const isHermesManaged = isEnableHermesManaged(exp, platform);\n\n const paths = getConfigFilePaths(projectRoot);\n const configFilePath = paths.dynamicConfigPath ?? paths.staticConfigPath ?? 'app.json';\n await maybeThrowFromInconsistentEngineAsync(\n projectRoot,\n configFilePath,\n platform,\n isHermesManaged\n );\n}\n\nexport async function bundleAsync(\n projectRoot: string,\n expoConfig: ExpoConfig,\n options: MetroDevServerOptions,\n bundles: BundleOptions[]\n): Promise<BundleOutput[]> {\n // Assert early so the user doesn't have to wait until bundling is complete to find out that\n // Hermes won't be available.\n await Promise.all(\n bundles.map(({ platform }) => assertEngineMismatchAsync(projectRoot, expoConfig, platform))\n );\n\n const metro = importMetroFromProject(projectRoot);\n const Server = importMetroServerFromProject(projectRoot);\n\n const { config, reporter } = await loadMetroConfigAsync(projectRoot, options, {\n exp: expoConfig,\n });\n\n const metroServer = await metro.runMetro(config, {\n watch: false,\n });\n\n const buildAsync = async (bundle: BundleOptions): Promise<BundleOutput> => {\n const buildID = `bundle_${nextBuildID++}_${bundle.platform}`;\n const isHermes = isEnableHermesManaged(expoConfig, bundle.platform);\n const bundleOptions: MetroBundleOptions = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n bundleType: 'bundle',\n platform: bundle.platform,\n entryFile: bundle.entryPoint,\n dev: bundle.dev ?? false,\n minify: !isHermes && (bundle.minify ?? !bundle.dev),\n inlineSourceMap: false,\n sourceMapUrl: bundle.sourceMapUrl,\n createModuleIdFactory: config.serializer.createModuleIdFactory,\n onProgress: (transformedFileCount: number, totalFileCount: number) => {\n if (!options.quiet) {\n reporter.update({\n buildID,\n type: 'bundle_transform_progressed',\n transformedFileCount,\n totalFileCount,\n });\n }\n },\n };\n const bundleDetails = {\n ...bundleOptions,\n buildID,\n };\n reporter.update({\n buildID,\n type: 'bundle_build_started',\n bundleDetails,\n });\n try {\n const { code, map } = await metroServer.build(bundleOptions);\n const [assets, css] = await Promise.all([\n metroServer.getAssets(bundleOptions),\n getCssModulesFromBundler(config, metroServer.getBundler(), bundleOptions),\n ]);\n\n reporter.update({\n buildID,\n type: 'bundle_build_done',\n });\n return { code, map, assets: assets as readonly BundleAssetWithFileHashes[], css };\n } catch (error) {\n reporter.update({\n buildID,\n type: 'bundle_build_failed',\n });\n\n throw error;\n }\n };\n\n const maybeAddHermesBundleAsync = async (\n bundle: BundleOptions,\n bundleOutput: BundleOutput\n ): Promise<BundleOutput> => {\n const { platform } = bundle;\n const isHermesManaged = isEnableHermesManaged(expoConfig, platform);\n if (isHermesManaged) {\n const platformTag = chalk.bold(\n { ios: 'iOS', android: 'Android', web: 'Web' }[platform] || platform\n );\n\n reporter.terminal.log(`${platformTag} Building Hermes bytecode for the bundle`);\n\n const hermesBundleOutput = await buildHermesBundleAsync(\n projectRoot,\n bundleOutput.code,\n bundleOutput.map!,\n bundle.minify ?? !bundle.dev\n );\n bundleOutput.hermesBytecodeBundle = hermesBundleOutput.hbc;\n bundleOutput.hermesSourcemap = hermesBundleOutput.sourcemap;\n }\n return bundleOutput;\n };\n\n try {\n const intermediateOutputs = await Promise.all(bundles.map((bundle) => buildAsync(bundle)));\n const bundleOutputs: BundleOutput[] = [];\n for (let i = 0; i < bundles.length; ++i) {\n // hermesc does not support parallel building even we spawn processes.\n // we should build them sequentially.\n bundleOutputs.push(await maybeAddHermesBundleAsync(bundles[i], intermediateOutputs[i]));\n }\n return bundleOutputs;\n } catch (error) {\n // New line so errors don't show up inline with the progress bar\n console.log('');\n throw error;\n } finally {\n metroServer.end();\n }\n}\n"],"names":["bundleAsync","nextBuildID","assertEngineMismatchAsync","projectRoot","exp","platform","isHermesManaged","isEnableHermesManaged","paths","getConfigFilePaths","configFilePath","dynamicConfigPath","staticConfigPath","maybeThrowFromInconsistentEngineAsync","expoConfig","options","bundles","Promise","all","map","metro","importMetroFromProject","Server","importMetroServerFromProject","config","reporter","loadMetroConfigAsync","metroServer","runMetro","watch","buildAsync","bundle","buildID","isHermes","bundleOptions","DEFAULT_BUNDLE_OPTIONS","bundleType","entryFile","entryPoint","dev","minify","inlineSourceMap","sourceMapUrl","createModuleIdFactory","serializer","onProgress","transformedFileCount","totalFileCount","quiet","update","type","bundleDetails","code","build","assets","css","getAssets","getCssModulesFromBundler","getBundler","error","maybeAddHermesBundleAsync","bundleOutput","platformTag","chalk","bold","ios","android","web","terminal","log","hermesBundleOutput","buildHermesBundleAsync","hermesBytecodeBundle","hbc","hermesSourcemap","sourcemap","intermediateOutputs","bundleOutputs","i","length","push","console","end"],"mappings":"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"}
@@ -44,6 +44,7 @@ const expoExport = async (argv)=>{
44
44
  "--max-workers": Number,
45
45
  "--output-dir": String,
46
46
  "--platform": String,
47
+ "--no-minify": Boolean,
47
48
  // Hack: This is added because EAS CLI always includes the flag.
48
49
  // If supplied, we'll do nothing with the value, but at least the process won't crash.
49
50
  // Note that we also don't show this value in the `--help` prompt since we don't want people to use it.
@@ -53,7 +54,9 @@ const expoExport = async (argv)=>{
53
54
  // '-s': '--dump-sourcemap',
54
55
  // '-d': '--dump-assetmap',
55
56
  "-c": "--clear",
56
- "-p": "--platform"
57
+ "-p": "--platform",
58
+ // Interop with Metro docs and RedBox errors.
59
+ "--reset-cache": "--clear"
57
60
  }, argv);
58
61
  if (args["--help"]) {
59
62
  (0, _args).printHelp(`Export the static files of the app for hosting it on a web server`, _chalk.default`npx expo export {dim <dir>}`, [
@@ -64,6 +67,7 @@ const expoExport = async (argv)=>{
64
67
  `--dump-assetmap Dump the asset map for further processing`,
65
68
  `--dump-sourcemap Dump the source map for debugging the JS bundle`,
66
69
  _chalk.default`-p, --platform <platform> Options: android, ios, web, all. {dim Default: all}`,
70
+ `--no-minify Prevent minifying source`,
67
71
  `-c, --clear Clear the bundler cache`,
68
72
  `-h, --help Usage info`,
69
73
  ].join("\n"));