@expo/cli 0.17.5 → 0.17.7
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.
- package/build/bin/cli +2 -2
- package/build/src/export/embed/exportEmbedAsync.js +1 -0
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/exportApp.js +5 -1
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +3 -1
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/index.js +2 -0
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/resolveOptions.js +1 -0
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +0 -24
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +2 -1
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +4 -2
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +3 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +22 -10
- package/build/src/start/server/middleware/metroOptions.js.map +1 -1
- package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/package.json +3 -3
package/build/bin/cli
CHANGED
|
@@ -137,7 +137,7 @@ const args = (0, _arg).default({
|
|
|
137
137
|
});
|
|
138
138
|
if (args["--version"]) {
|
|
139
139
|
// Version is added in the build script.
|
|
140
|
-
console.log("0.17.
|
|
140
|
+
console.log("0.17.7");
|
|
141
141
|
process.exit(0);
|
|
142
142
|
}
|
|
143
143
|
if (args["--non-interactive"]) {
|
|
@@ -272,7 +272,7 @@ commands[command]().then((exec)=>{
|
|
|
272
272
|
logEventAsync("action", {
|
|
273
273
|
action: `expo ${command}`,
|
|
274
274
|
source: "expo/cli",
|
|
275
|
-
source_version: "0.17.
|
|
275
|
+
source_version: "0.17.7"
|
|
276
276
|
});
|
|
277
277
|
}
|
|
278
278
|
});
|
|
@@ -102,6 +102,7 @@ async function createMetroServerAndBundleRequestAsync(projectRoot, options) {
|
|
|
102
102
|
minify: options.minify,
|
|
103
103
|
mode: options.dev ? "development" : "production",
|
|
104
104
|
engine: isHermes ? "hermes" : undefined,
|
|
105
|
+
bytecode: isHermes,
|
|
105
106
|
isExporting: true
|
|
106
107
|
}),
|
|
107
108
|
sourceMapUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/export/embed/exportEmbedAsync.ts"],"sourcesContent":["/**\n * Copyright © 2023 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 { getConfig } from '@expo/config';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport Server from 'metro/src/Server';\nimport output from 'metro/src/shared/output/bundle';\nimport type { BundleOptions } from 'metro/src/shared/types';\nimport path from 'path';\n\nimport { Options } from './resolveOptions';\nimport { isExecutingFromXcodebuild, logMetroErrorInXcode } from './xcodeCompilerLogger';\nimport { Log } from '../../log';\nimport { loadMetroConfigAsync } from '../../start/server/metro/instantiateMetro';\nimport { getMetroDirectBundleOptionsForExpoConfig } from '../../start/server/middleware/metroOptions';\nimport { stripAnsi } from '../../utils/ansi';\nimport { removeAsync } from '../../utils/dir';\nimport { setNodeEnv } from '../../utils/nodeEnv';\nimport { profile } from '../../utils/profile';\nimport { isEnableHermesManaged } from '../exportHermes';\nimport { getAssets } from '../fork-bundleAsync';\nimport { persistMetroAssetsAsync } from '../persistMetroAssets';\n\nconst debug = require('debug')('expo:export:embed');\n\nfunction guessCopiedAppleBundlePath(bundleOutput: string) {\n // Ensure the path is familiar before guessing.\n if (!bundleOutput.match(/\\/Xcode\\/DerivedData\\/.*\\/Build\\/Products\\//)) {\n debug('Bundling to non-standard location:', bundleOutput);\n return false;\n }\n const bundleName = path.basename(bundleOutput);\n const bundleParent = path.dirname(bundleOutput);\n const possiblePath = globSync(path.join(bundleParent, `*.app/${bundleName}`), {\n // bundle identifiers can start with dots.\n dot: true,\n })[0];\n debug('Possible path for previous bundle:', possiblePath);\n return possiblePath;\n}\n\nexport async function exportEmbedAsync(projectRoot: string, options: Options) {\n setNodeEnv(options.dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n // Ensure we delete the old bundle to trigger a failure if the bundle cannot be created.\n await removeAsync(options.bundleOutput);\n\n // The iOS bundle is copied in to the Xcode project, so we need to remove the old one\n // to prevent Xcode from loading the old one after a build failure.\n if (options.platform === 'ios') {\n const previousPath = guessCopiedAppleBundlePath(options.bundleOutput);\n if (previousPath && fs.existsSync(previousPath)) {\n debug('Removing previous iOS bundle:', previousPath);\n await removeAsync(previousPath);\n }\n }\n\n const { bundle, assets } = await exportEmbedBundleAndAssetsAsync(projectRoot, options);\n\n fs.mkdirSync(path.dirname(options.bundleOutput), { recursive: true, mode: 0o755 });\n\n // Persist bundle and source maps.\n await Promise.all([\n output.save(bundle, options, Log.log),\n // NOTE(EvanBacon): This may need to be adjusted in the future if want to support baseUrl on native\n // platforms when doing production embeds (unlikely).\n options.assetsDest\n ? persistMetroAssetsAsync(assets, {\n platform: options.platform,\n outputDirectory: options.assetsDest,\n iosAssetCatalogDirectory: options.assetCatalogDest,\n })\n : null,\n ]);\n}\n\nexport async function createMetroServerAndBundleRequestAsync(\n projectRoot: string,\n options: Pick<\n Options,\n | 'maxWorkers'\n | 'config'\n | 'platform'\n | 'sourcemapOutput'\n | 'sourcemapUseAbsolutePath'\n | 'entryFile'\n | 'minify'\n | 'dev'\n | 'unstableTransformProfile'\n >\n): Promise<{ server: Server; bundleRequest: BundleOptions }> {\n const exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp;\n\n // TODO: This is slow ~40ms\n const { config } = await loadMetroConfigAsync(\n projectRoot,\n {\n maxWorkers: options.maxWorkers,\n resetCache: false, //options.resetCache,\n config: options.config,\n },\n {\n exp,\n isExporting: true,\n }\n );\n\n const isHermes = isEnableHermesManaged(exp, options.platform);\n\n let sourceMapUrl = options.sourcemapOutput;\n if (sourceMapUrl && !options.sourcemapUseAbsolutePath) {\n sourceMapUrl = path.basename(sourceMapUrl);\n }\n\n const bundleRequest = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n ...getMetroDirectBundleOptionsForExpoConfig(projectRoot, exp, {\n mainModuleName: options.entryFile,\n platform: options.platform,\n minify: options.minify,\n mode: options.dev ? 'development' : 'production',\n engine: isHermes ? 'hermes' : undefined,\n isExporting: true,\n }),\n sourceMapUrl,\n unstable_transformProfile: (options.unstableTransformProfile ||\n (isHermes ? 'hermes-stable' : 'default')) as BundleOptions['unstable_transformProfile'],\n };\n\n const server = new Server(config, {\n watch: false,\n });\n\n return { server, bundleRequest };\n}\n\nexport async function exportEmbedBundleAndAssetsAsync(\n projectRoot: string,\n options: Options\n): Promise<{\n bundle: Awaited<ReturnType<Server['build']>>;\n assets: Awaited<ReturnType<typeof getAssets>>;\n}> {\n const { server, bundleRequest } = await createMetroServerAndBundleRequestAsync(\n projectRoot,\n options\n );\n\n try {\n const bundle = await exportEmbedBundleAsync(server, bundleRequest, projectRoot, options);\n const assets = await exportEmbedAssetsAsync(server, bundleRequest, projectRoot, options);\n return { bundle, assets };\n } finally {\n server.end();\n }\n}\n\nexport async function exportEmbedBundleAsync(\n server: Server,\n bundleRequest: BundleOptions,\n projectRoot: string,\n options: Pick<Options, 'platform'>\n) {\n try {\n return await profile(\n server.build.bind(server),\n 'metro-bundle'\n )({\n ...bundleRequest,\n bundleType: 'bundle',\n });\n } catch (error: any) {\n if (isError(error)) {\n // Log using Xcode error format so the errors are picked up by xcodebuild.\n // https://developer.apple.com/documentation/xcode/running-custom-scripts-during-a-build#Log-errors-and-warnings-from-your-script\n if (options.platform === 'ios') {\n // If the error is about to be presented in Xcode, strip the ansi characters from the message.\n if ('message' in error && isExecutingFromXcodebuild()) {\n error.message = stripAnsi(error.message) as string;\n }\n logMetroErrorInXcode(projectRoot, error);\n }\n }\n throw error;\n }\n}\n\nexport async function exportEmbedAssetsAsync(\n server: Server,\n bundleRequest: BundleOptions,\n projectRoot: string,\n options: Pick<Options, 'platform'>\n) {\n try {\n return await getAssets(server, {\n ...bundleRequest,\n bundleType: 'todo',\n });\n } catch (error: any) {\n if (isError(error)) {\n // Log using Xcode error format so the errors are picked up by xcodebuild.\n // https://developer.apple.com/documentation/xcode/running-custom-scripts-during-a-build#Log-errors-and-warnings-from-your-script\n if (options.platform === 'ios') {\n // If the error is about to be presented in Xcode, strip the ansi characters from the message.\n if ('message' in error && isExecutingFromXcodebuild()) {\n error.message = stripAnsi(error.message) as string;\n }\n logMetroErrorInXcode(projectRoot, error);\n }\n }\n throw error;\n }\n}\n\nfunction isError(error: any): error is Error {\n return error instanceof Error;\n}\n"],"names":["exportEmbedAsync","createMetroServerAndBundleRequestAsync","exportEmbedBundleAndAssetsAsync","exportEmbedBundleAsync","exportEmbedAssetsAsync","debug","require","guessCopiedAppleBundlePath","bundleOutput","match","bundleName","path","basename","bundleParent","dirname","possiblePath","globSync","join","dot","projectRoot","options","setNodeEnv","dev","load","removeAsync","platform","previousPath","fs","existsSync","bundle","assets","mkdirSync","recursive","mode","Promise","all","output","save","Log","log","assetsDest","persistMetroAssetsAsync","outputDirectory","iosAssetCatalogDirectory","assetCatalogDest","exp","getConfig","skipSDKVersionRequirement","config","loadMetroConfigAsync","maxWorkers","resetCache","isExporting","isHermes","isEnableHermesManaged","sourceMapUrl","sourcemapOutput","sourcemapUseAbsolutePath","bundleRequest","Server","DEFAULT_BUNDLE_OPTIONS","getMetroDirectBundleOptionsForExpoConfig","mainModuleName","entryFile","minify","engine","undefined","unstable_transformProfile","unstableTransformProfile","server","watch","end","profile","build","bind","bundleType","error","isError","isExecutingFromXcodebuild","message","stripAnsi","logMetroErrorInXcode","getAssets","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/export/embed/exportEmbedAsync.ts"],"sourcesContent":["/**\n * Copyright © 2023 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 { getConfig } from '@expo/config';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport Server from 'metro/src/Server';\nimport output from 'metro/src/shared/output/bundle';\nimport type { BundleOptions } from 'metro/src/shared/types';\nimport path from 'path';\n\nimport { Options } from './resolveOptions';\nimport { isExecutingFromXcodebuild, logMetroErrorInXcode } from './xcodeCompilerLogger';\nimport { Log } from '../../log';\nimport { loadMetroConfigAsync } from '../../start/server/metro/instantiateMetro';\nimport { getMetroDirectBundleOptionsForExpoConfig } from '../../start/server/middleware/metroOptions';\nimport { stripAnsi } from '../../utils/ansi';\nimport { removeAsync } from '../../utils/dir';\nimport { setNodeEnv } from '../../utils/nodeEnv';\nimport { profile } from '../../utils/profile';\nimport { isEnableHermesManaged } from '../exportHermes';\nimport { getAssets } from '../fork-bundleAsync';\nimport { persistMetroAssetsAsync } from '../persistMetroAssets';\n\nconst debug = require('debug')('expo:export:embed');\n\nfunction guessCopiedAppleBundlePath(bundleOutput: string) {\n // Ensure the path is familiar before guessing.\n if (!bundleOutput.match(/\\/Xcode\\/DerivedData\\/.*\\/Build\\/Products\\//)) {\n debug('Bundling to non-standard location:', bundleOutput);\n return false;\n }\n const bundleName = path.basename(bundleOutput);\n const bundleParent = path.dirname(bundleOutput);\n const possiblePath = globSync(path.join(bundleParent, `*.app/${bundleName}`), {\n // bundle identifiers can start with dots.\n dot: true,\n })[0];\n debug('Possible path for previous bundle:', possiblePath);\n return possiblePath;\n}\n\nexport async function exportEmbedAsync(projectRoot: string, options: Options) {\n setNodeEnv(options.dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n // Ensure we delete the old bundle to trigger a failure if the bundle cannot be created.\n await removeAsync(options.bundleOutput);\n\n // The iOS bundle is copied in to the Xcode project, so we need to remove the old one\n // to prevent Xcode from loading the old one after a build failure.\n if (options.platform === 'ios') {\n const previousPath = guessCopiedAppleBundlePath(options.bundleOutput);\n if (previousPath && fs.existsSync(previousPath)) {\n debug('Removing previous iOS bundle:', previousPath);\n await removeAsync(previousPath);\n }\n }\n\n const { bundle, assets } = await exportEmbedBundleAndAssetsAsync(projectRoot, options);\n\n fs.mkdirSync(path.dirname(options.bundleOutput), { recursive: true, mode: 0o755 });\n\n // Persist bundle and source maps.\n await Promise.all([\n output.save(bundle, options, Log.log),\n // NOTE(EvanBacon): This may need to be adjusted in the future if want to support baseUrl on native\n // platforms when doing production embeds (unlikely).\n options.assetsDest\n ? persistMetroAssetsAsync(assets, {\n platform: options.platform,\n outputDirectory: options.assetsDest,\n iosAssetCatalogDirectory: options.assetCatalogDest,\n })\n : null,\n ]);\n}\n\nexport async function createMetroServerAndBundleRequestAsync(\n projectRoot: string,\n options: Pick<\n Options,\n | 'maxWorkers'\n | 'config'\n | 'platform'\n | 'sourcemapOutput'\n | 'sourcemapUseAbsolutePath'\n | 'entryFile'\n | 'minify'\n | 'dev'\n | 'unstableTransformProfile'\n >\n): Promise<{ server: Server; bundleRequest: BundleOptions }> {\n const exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp;\n\n // TODO: This is slow ~40ms\n const { config } = await loadMetroConfigAsync(\n projectRoot,\n {\n maxWorkers: options.maxWorkers,\n resetCache: false, //options.resetCache,\n config: options.config,\n },\n {\n exp,\n isExporting: true,\n }\n );\n\n const isHermes = isEnableHermesManaged(exp, options.platform);\n\n let sourceMapUrl = options.sourcemapOutput;\n if (sourceMapUrl && !options.sourcemapUseAbsolutePath) {\n sourceMapUrl = path.basename(sourceMapUrl);\n }\n\n const bundleRequest = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n ...getMetroDirectBundleOptionsForExpoConfig(projectRoot, exp, {\n mainModuleName: options.entryFile,\n platform: options.platform,\n minify: options.minify,\n mode: options.dev ? 'development' : 'production',\n engine: isHermes ? 'hermes' : undefined,\n bytecode: isHermes,\n isExporting: true,\n }),\n sourceMapUrl,\n unstable_transformProfile: (options.unstableTransformProfile ||\n (isHermes ? 'hermes-stable' : 'default')) as BundleOptions['unstable_transformProfile'],\n };\n\n const server = new Server(config, {\n watch: false,\n });\n\n return { server, bundleRequest };\n}\n\nexport async function exportEmbedBundleAndAssetsAsync(\n projectRoot: string,\n options: Options\n): Promise<{\n bundle: Awaited<ReturnType<Server['build']>>;\n assets: Awaited<ReturnType<typeof getAssets>>;\n}> {\n const { server, bundleRequest } = await createMetroServerAndBundleRequestAsync(\n projectRoot,\n options\n );\n\n try {\n const bundle = await exportEmbedBundleAsync(server, bundleRequest, projectRoot, options);\n const assets = await exportEmbedAssetsAsync(server, bundleRequest, projectRoot, options);\n return { bundle, assets };\n } finally {\n server.end();\n }\n}\n\nexport async function exportEmbedBundleAsync(\n server: Server,\n bundleRequest: BundleOptions,\n projectRoot: string,\n options: Pick<Options, 'platform'>\n) {\n try {\n return await profile(\n server.build.bind(server),\n 'metro-bundle'\n )({\n ...bundleRequest,\n bundleType: 'bundle',\n });\n } catch (error: any) {\n if (isError(error)) {\n // Log using Xcode error format so the errors are picked up by xcodebuild.\n // https://developer.apple.com/documentation/xcode/running-custom-scripts-during-a-build#Log-errors-and-warnings-from-your-script\n if (options.platform === 'ios') {\n // If the error is about to be presented in Xcode, strip the ansi characters from the message.\n if ('message' in error && isExecutingFromXcodebuild()) {\n error.message = stripAnsi(error.message) as string;\n }\n logMetroErrorInXcode(projectRoot, error);\n }\n }\n throw error;\n }\n}\n\nexport async function exportEmbedAssetsAsync(\n server: Server,\n bundleRequest: BundleOptions,\n projectRoot: string,\n options: Pick<Options, 'platform'>\n) {\n try {\n return await getAssets(server, {\n ...bundleRequest,\n bundleType: 'todo',\n });\n } catch (error: any) {\n if (isError(error)) {\n // Log using Xcode error format so the errors are picked up by xcodebuild.\n // https://developer.apple.com/documentation/xcode/running-custom-scripts-during-a-build#Log-errors-and-warnings-from-your-script\n if (options.platform === 'ios') {\n // If the error is about to be presented in Xcode, strip the ansi characters from the message.\n if ('message' in error && isExecutingFromXcodebuild()) {\n error.message = stripAnsi(error.message) as string;\n }\n logMetroErrorInXcode(projectRoot, error);\n }\n }\n throw error;\n }\n}\n\nfunction isError(error: any): error is Error {\n return error instanceof Error;\n}\n"],"names":["exportEmbedAsync","createMetroServerAndBundleRequestAsync","exportEmbedBundleAndAssetsAsync","exportEmbedBundleAsync","exportEmbedAssetsAsync","debug","require","guessCopiedAppleBundlePath","bundleOutput","match","bundleName","path","basename","bundleParent","dirname","possiblePath","globSync","join","dot","projectRoot","options","setNodeEnv","dev","load","removeAsync","platform","previousPath","fs","existsSync","bundle","assets","mkdirSync","recursive","mode","Promise","all","output","save","Log","log","assetsDest","persistMetroAssetsAsync","outputDirectory","iosAssetCatalogDirectory","assetCatalogDest","exp","getConfig","skipSDKVersionRequirement","config","loadMetroConfigAsync","maxWorkers","resetCache","isExporting","isHermes","isEnableHermesManaged","sourceMapUrl","sourcemapOutput","sourcemapUseAbsolutePath","bundleRequest","Server","DEFAULT_BUNDLE_OPTIONS","getMetroDirectBundleOptionsForExpoConfig","mainModuleName","entryFile","minify","engine","undefined","bytecode","unstable_transformProfile","unstableTransformProfile","server","watch","end","profile","build","bind","bundleType","error","isError","isExecutingFromXcodebuild","message","stripAnsi","logMetroErrorInXcode","getAssets","Error"],"mappings":"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"}
|
|
@@ -49,7 +49,7 @@ function _interopRequireWildcard(obj) {
|
|
|
49
49
|
return newObj;
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev , dumpAssetmap , sourceMaps , minify , maxWorkers }) {
|
|
52
|
+
async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev , dumpAssetmap , sourceMaps , minify , bytecode , maxWorkers }) {
|
|
53
53
|
var ref;
|
|
54
54
|
(0, _nodeEnv).setNodeEnv(dev ? "development" : "production");
|
|
55
55
|
require("@expo/env").load(projectRoot);
|
|
@@ -67,6 +67,9 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
|
|
|
67
67
|
"server"
|
|
68
68
|
].includes((ref1 = (ref = exp.web) == null ? void 0 : ref.output) != null ? ref1 : "");
|
|
69
69
|
const baseUrl = (0, _metroOptions).getBaseUrlFromExpoConfig(exp);
|
|
70
|
+
if (!bytecode && (platforms.includes("ios") || platforms.includes("android"))) {
|
|
71
|
+
Log.warn(`Bytecode makes the app startup faster, disabling bytecode is highly discouraged and should only be used for debugging purposes.`);
|
|
72
|
+
}
|
|
70
73
|
// Print out logs
|
|
71
74
|
if (baseUrl) {
|
|
72
75
|
Log.log();
|
|
@@ -85,6 +88,7 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
|
|
|
85
88
|
const bundles = await (0, _forkBundleAsync).createBundlesAsync(projectRoot, projectConfig, {
|
|
86
89
|
clear: !!clear,
|
|
87
90
|
minify,
|
|
91
|
+
bytecode,
|
|
88
92
|
sourcemaps: sourceMaps,
|
|
89
93
|
platforms: useServerRendering ? platforms.filter((platform)=>platform !== "web"
|
|
90
94
|
) : platforms,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/exportApp.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { createMetadataJson } from './createMetadataJson';\nimport { exportAssetsAsync } from './exportAssets';\nimport { unstable_exportStaticAsync } from './exportStaticAsync';\nimport { getVirtualFaviconAssetsAsync } from './favicon';\nimport { createBundlesAsync } from './fork-bundleAsync';\nimport { getPublicExpoManifestAsync } from './getPublicExpoManifest';\nimport { copyPublicFolderAsync } from './publicFolder';\nimport { Options } from './resolveOptions';\nimport { ExportAssetMap, getFilesFromSerialAssets, persistMetroFilesAsync } from './saveAssets';\nimport { createAssetMap, createSourceMapDebugHtml } from './writeContents';\nimport * as Log from '../log';\nimport { WebSupportProjectPrerequisite } from '../start/doctor/web/WebSupportProjectPrerequisite';\nimport { getRouterDirectoryModuleIdWithManifest } from '../start/server/metro/router';\nimport { serializeHtmlWithAssets } from '../start/server/metro/serializeHtml';\nimport {\n getAsyncRoutesFromExpoConfig,\n getBaseUrlFromExpoConfig,\n} from '../start/server/middleware/metroOptions';\nimport { createTemplateHtmlFromExpoConfigAsync } from '../start/server/webTemplate';\nimport { env } from '../utils/env';\nimport { setNodeEnv } from '../utils/nodeEnv';\n\nexport async function exportAppAsync(\n projectRoot: string,\n {\n platforms,\n outputDir,\n clear,\n dev,\n dumpAssetmap,\n sourceMaps,\n minify,\n maxWorkers,\n }: Pick<\n Options,\n | 'dumpAssetmap'\n | 'sourceMaps'\n | 'dev'\n | 'clear'\n | 'outputDir'\n | 'platforms'\n | 'minify'\n | 'maxWorkers'\n >\n): Promise<void> {\n setNodeEnv(dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const projectConfig = getConfig(projectRoot);\n const exp = await getPublicExpoManifestAsync(projectRoot, {\n // Web doesn't require validation.\n skipValidation: platforms.length === 1 && platforms[0] === 'web',\n });\n\n if (platforms.includes('web')) {\n await new WebSupportProjectPrerequisite(projectRoot).assertAsync();\n }\n\n const useServerRendering = ['static', 'server'].includes(exp.web?.output ?? '');\n const baseUrl = getBaseUrlFromExpoConfig(exp);\n\n // Print out logs\n if (baseUrl) {\n Log.log();\n Log.log(chalk.gray`Using (experimental) base path: ${baseUrl}`);\n // Warn if not using an absolute path.\n if (!baseUrl.startsWith('/')) {\n Log.log(\n chalk.yellow` Base path does not start with a slash. Requests will not be absolute.`\n );\n }\n }\n\n const publicPath = path.resolve(projectRoot, env.EXPO_PUBLIC_FOLDER);\n const outputPath = path.resolve(projectRoot, outputDir);\n\n // NOTE(kitten): The public folder is currently always copied, regardless of targetDomain\n // split. Hence, there's another separate `copyPublicFolderAsync` call below for `web`\n await copyPublicFolderAsync(publicPath, outputPath);\n\n // Run metro bundler and create the JS bundles/source maps.\n const bundles = await createBundlesAsync(projectRoot, projectConfig, {\n clear: !!clear,\n minify,\n sourcemaps: sourceMaps,\n platforms: useServerRendering ? platforms.filter((platform) => platform !== 'web') : platforms,\n dev,\n maxWorkers,\n });\n\n // Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).\n\n const files: ExportAssetMap = new Map();\n\n Object.values(bundles).forEach((bundle) => {\n getFilesFromSerialAssets(bundle.artifacts, {\n includeSourceMaps: sourceMaps,\n files,\n });\n });\n\n const bundleEntries = Object.entries(bundles);\n // Can be empty during web-only SSG.\n if (bundleEntries.length) {\n // TODO: Use same asset system across platforms again.\n const { assets, embeddedHashSet } = await exportAssetsAsync(projectRoot, {\n files,\n exp,\n outputDir: outputPath,\n bundles,\n baseUrl,\n });\n\n if (dumpAssetmap) {\n Log.log('Creating asset map');\n files.set('assetmap.json', { contents: JSON.stringify(createAssetMap({ assets })) });\n }\n\n const fileNames = Object.fromEntries(\n Object.entries(bundles).map(([platform, bundle]) => [\n platform,\n bundle.artifacts.filter((asset) => asset.type === 'js').map((asset) => asset.filename),\n ])\n );\n\n // build source maps\n if (sourceMaps) {\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 files.set('debug.html', {\n contents: createSourceMapDebugHtml({\n fileNames: Object.values(fileNames).flat(),\n }),\n });\n }\n\n // Generate a `metadata.json` for EAS Update.\n const contents = createMetadataJson({\n bundles,\n fileNames,\n embeddedHashSet,\n });\n files.set('metadata.json', { contents: JSON.stringify(contents) });\n }\n\n // Additional web-only steps...\n\n if (platforms.includes('web')) {\n if (useServerRendering) {\n const exportServer = exp.web?.output === 'server';\n\n if (exportServer) {\n // TODO: Remove when this is abstracted into the files map\n await copyPublicFolderAsync(publicPath, path.resolve(outputPath, 'client'));\n }\n\n await unstable_exportStaticAsync(projectRoot, {\n files,\n clear: !!clear,\n outputDir: outputPath,\n minify,\n baseUrl,\n includeSourceMaps: sourceMaps,\n asyncRoutes: getAsyncRoutesFromExpoConfig(exp, dev ? 'development' : 'production', 'web'),\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n exportServer,\n maxWorkers,\n });\n } else {\n // TODO: Unify with exportStaticAsync\n // TODO: Maybe move to the serializer.\n let html = await serializeHtmlWithAssets({\n mode: 'production',\n resources: bundles.web!.artifacts,\n template: await createTemplateHtmlFromExpoConfigAsync(projectRoot, {\n scripts: [],\n cssLinks: [],\n }),\n baseUrl,\n });\n\n // Add the favicon assets to the HTML.\n const modifyHtml = await getVirtualFaviconAssetsAsync(projectRoot, {\n outputDir,\n baseUrl,\n files,\n });\n if (modifyHtml) {\n html = modifyHtml(html);\n }\n\n // Generate SPA-styled HTML file.\n // If web exists, then write the template HTML file.\n files.set('index.html', {\n contents: html,\n targetDomain: 'client',\n });\n }\n }\n\n // Write all files at the end for unified logging.\n await persistMetroFilesAsync(files, outputPath);\n}\n"],"names":["exportAppAsync","Log","projectRoot","platforms","outputDir","clear","dev","dumpAssetmap","sourceMaps","minify","maxWorkers","exp","setNodeEnv","require","load","projectConfig","getConfig","getPublicExpoManifestAsync","skipValidation","length","includes","WebSupportProjectPrerequisite","assertAsync","useServerRendering","web","output","baseUrl","getBaseUrlFromExpoConfig","log","chalk","gray","startsWith","yellow","publicPath","path","resolve","env","EXPO_PUBLIC_FOLDER","outputPath","copyPublicFolderAsync","bundles","createBundlesAsync","sourcemaps","filter","platform","files","Map","Object","values","forEach","bundle","getFilesFromSerialAssets","artifacts","includeSourceMaps","bundleEntries","entries","assets","embeddedHashSet","exportAssetsAsync","set","contents","JSON","stringify","createAssetMap","fileNames","fromEntries","map","asset","type","filename","createSourceMapDebugHtml","flat","createMetadataJson","exportServer","unstable_exportStaticAsync","asyncRoutes","getAsyncRoutesFromExpoConfig","routerRoot","getRouterDirectoryModuleIdWithManifest","html","serializeHtmlWithAssets","mode","resources","template","createTemplateHtmlFromExpoConfigAsync","scripts","cssLinks","modifyHtml","getVirtualFaviconAssetsAsync","targetDomain","persistMetroFilesAsync"],"mappings":"AAAA;;;;QA0BsBA,cAAc,GAAdA,cAAc;AA1BV,IAAA,OAAc,WAAd,cAAc,CAAA;AACtB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACR,IAAA,KAAM,kCAAN,MAAM,EAAA;AAEY,IAAA,mBAAsB,WAAtB,sBAAsB,CAAA;AACvB,IAAA,aAAgB,WAAhB,gBAAgB,CAAA;AACP,IAAA,kBAAqB,WAArB,qBAAqB,CAAA;AACnB,IAAA,QAAW,WAAX,WAAW,CAAA;AACrB,IAAA,gBAAoB,WAApB,oBAAoB,CAAA;AACZ,IAAA,sBAAyB,WAAzB,yBAAyB,CAAA;AAC9B,IAAA,aAAgB,WAAhB,gBAAgB,CAAA;AAE2B,IAAA,WAAc,WAAd,cAAc,CAAA;AACtC,IAAA,cAAiB,WAAjB,iBAAiB,CAAA;AAC9DC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AAC+B,IAAA,8BAAmD,WAAnD,mDAAmD,CAAA;AAC1C,IAAA,OAA8B,WAA9B,8BAA8B,CAAA;AAC7C,IAAA,cAAqC,WAArC,qCAAqC,CAAA;AAItE,IAAA,aAAyC,WAAzC,yCAAyC,CAAA;AACM,IAAA,YAA6B,WAA7B,6BAA6B,CAAA;AAC/D,IAAA,IAAc,WAAd,cAAc,CAAA;AACP,IAAA,QAAkB,WAAlB,kBAAkB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtC,eAAeD,cAAc,CAClCE,WAAmB,EACnB,EACEC,SAAS,CAAA,EACTC,SAAS,CAAA,EACTC,KAAK,CAAA,EACLC,GAAG,CAAA,EACHC,YAAY,CAAA,EACZC,UAAU,CAAA,EACVC,MAAM,CAAA,EACNC,UAAU,CAAA,EAWX,EACc;QAc0CC,GAAO;IAbhEC,CAAAA,GAAAA,QAAU,AAAoC,CAAA,WAApC,CAACN,GAAG,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC;IAC/CO,OAAO,CAAC,WAAW,CAAC,CAACC,IAAI,CAACZ,WAAW,CAAC,CAAC;IAEvC,MAAMa,aAAa,GAAGC,CAAAA,GAAAA,OAAS,AAAa,CAAA,UAAb,CAACd,WAAW,CAAC,AAAC;IAC7C,MAAMS,GAAG,GAAG,MAAMM,CAAAA,GAAAA,sBAA0B,AAG1C,CAAA,2BAH0C,CAACf,WAAW,EAAE;QACxD,kCAAkC;QAClCgB,cAAc,EAAEf,SAAS,CAACgB,MAAM,KAAK,CAAC,IAAIhB,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK;KACjE,CAAC,AAAC;IAEH,IAAIA,SAAS,CAACiB,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC7B,MAAM,IAAIC,8BAA6B,8BAAA,CAACnB,WAAW,CAAC,CAACoB,WAAW,EAAE,CAAC;KACpE;QAEwDX,IAAe;IAAxE,MAAMY,kBAAkB,GAAG;QAAC,QAAQ;QAAE,QAAQ;KAAC,CAACH,QAAQ,CAACT,CAAAA,IAAe,GAAfA,CAAAA,GAAO,GAAPA,GAAG,CAACa,GAAG,SAAQ,GAAfb,KAAAA,CAAe,GAAfA,GAAO,CAAEc,MAAM,YAAfd,IAAe,GAAI,EAAE,CAAC,AAAC;IAChF,MAAMe,OAAO,GAAGC,CAAAA,GAAAA,aAAwB,AAAK,CAAA,yBAAL,CAAChB,GAAG,CAAC,AAAC;IAE9C,iBAAiB;IACjB,IAAIe,OAAO,EAAE;QACXzB,GAAG,CAAC2B,GAAG,EAAE,CAAC;QACV3B,GAAG,CAAC2B,GAAG,CAACC,MAAK,QAAA,CAACC,IAAI,CAAC,gCAAgC,EAAEJ,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,sCAAsC;QACtC,IAAI,CAACA,OAAO,CAACK,UAAU,CAAC,GAAG,CAAC,EAAE;YAC5B9B,GAAG,CAAC2B,GAAG,CACLC,MAAK,QAAA,CAACG,MAAM,CAAC,uEAAuE,CAAC,CACtF,CAAC;SACH;KACF;IAED,MAAMC,UAAU,GAAGC,KAAI,QAAA,CAACC,OAAO,CAACjC,WAAW,EAAEkC,IAAG,IAAA,CAACC,kBAAkB,CAAC,AAAC;IACrE,MAAMC,UAAU,GAAGJ,KAAI,QAAA,CAACC,OAAO,CAACjC,WAAW,EAAEE,SAAS,CAAC,AAAC;IAExD,yFAAyF;IACzF,sFAAsF;IACtF,MAAMmC,CAAAA,GAAAA,aAAqB,AAAwB,CAAA,sBAAxB,CAACN,UAAU,EAAEK,UAAU,CAAC,CAAC;IAEpD,2DAA2D;IAC3D,MAAME,OAAO,GAAG,MAAMC,CAAAA,GAAAA,gBAAkB,AAOtC,CAAA,mBAPsC,CAACvC,WAAW,EAAEa,aAAa,EAAE;QACnEV,KAAK,EAAE,CAAC,CAACA,KAAK;QACdI,MAAM;QACNiC,UAAU,EAAElC,UAAU;QACtBL,SAAS,EAAEoB,kBAAkB,GAAGpB,SAAS,CAACwC,MAAM,CAAC,CAACC,QAAQ,GAAKA,QAAQ,KAAK,KAAK;QAAA,CAAC,GAAGzC,SAAS;QAC9FG,GAAG;QACHI,UAAU;KACX,CAAC,AAAC;IAEH,oHAAoH;IAEpH,MAAMmC,KAAK,GAAmB,IAAIC,GAAG,EAAE,AAAC;IAExCC,MAAM,CAACC,MAAM,CAACR,OAAO,CAAC,CAACS,OAAO,CAAC,CAACC,MAAM,GAAK;QACzCC,CAAAA,GAAAA,WAAwB,AAGtB,CAAA,yBAHsB,CAACD,MAAM,CAACE,SAAS,EAAE;YACzCC,iBAAiB,EAAE7C,UAAU;YAC7BqC,KAAK;SACN,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,MAAMS,aAAa,GAAGP,MAAM,CAACQ,OAAO,CAACf,OAAO,CAAC,AAAC;IAC9C,oCAAoC;IACpC,IAAIc,aAAa,CAACnC,MAAM,EAAE;QACxB,sDAAsD;QACtD,MAAM,EAAEqC,MAAM,CAAA,EAAEC,eAAe,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,aAAiB,AAMzD,CAAA,kBANyD,CAACxD,WAAW,EAAE;YACvE2C,KAAK;YACLlC,GAAG;YACHP,SAAS,EAAEkC,UAAU;YACrBE,OAAO;YACPd,OAAO;SACR,CAAC,AAAC;QAEH,IAAInB,YAAY,EAAE;YAChBN,GAAG,CAAC2B,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAC9BiB,KAAK,CAACc,GAAG,CAAC,eAAe,EAAE;gBAAEC,QAAQ,EAAEC,IAAI,CAACC,SAAS,CAACC,CAAAA,GAAAA,cAAc,AAAY,CAAA,eAAZ,CAAC;oBAAEP,MAAM;iBAAE,CAAC,CAAC;aAAE,CAAC,CAAC;SACtF;QAED,MAAMQ,SAAS,GAAGjB,MAAM,CAACkB,WAAW,CAClClB,MAAM,CAACQ,OAAO,CAACf,OAAO,CAAC,CAAC0B,GAAG,CAAC,CAAC,CAACtB,QAAQ,EAAEM,MAAM,CAAC,GAAK;gBAClDN,QAAQ;gBACRM,MAAM,CAACE,SAAS,CAACT,MAAM,CAAC,CAACwB,KAAK,GAAKA,KAAK,CAACC,IAAI,KAAK,IAAI;gBAAA,CAAC,CAACF,GAAG,CAAC,CAACC,KAAK,GAAKA,KAAK,CAACE,QAAQ;gBAAA,CAAC;aACvF;QAAA,CAAC,CACH,AAAC;QAEF,oBAAoB;QACpB,IAAI7D,UAAU,EAAE;YACdP,GAAG,CAAC2B,GAAG,CAAC,sCAAsC,CAAC,CAAC;YAChD,kFAAkF;YAClF,kDAAkD;YAClDiB,KAAK,CAACc,GAAG,CAAC,YAAY,EAAE;gBACtBC,QAAQ,EAAEU,CAAAA,GAAAA,cAAwB,AAEhC,CAAA,yBAFgC,CAAC;oBACjCN,SAAS,EAAEjB,MAAM,CAACC,MAAM,CAACgB,SAAS,CAAC,CAACO,IAAI,EAAE;iBAC3C,CAAC;aACH,CAAC,CAAC;SACJ;QAED,6CAA6C;QAC7C,MAAMX,QAAQ,GAAGY,CAAAA,GAAAA,mBAAkB,AAIjC,CAAA,mBAJiC,CAAC;YAClChC,OAAO;YACPwB,SAAS;YACTP,eAAe;SAChB,CAAC,AAAC;QACHZ,KAAK,CAACc,GAAG,CAAC,eAAe,EAAE;YAAEC,QAAQ,EAAEC,IAAI,CAACC,SAAS,CAACF,QAAQ,CAAC;SAAE,CAAC,CAAC;KACpE;IAED,+BAA+B;IAE/B,IAAIzD,SAAS,CAACiB,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC7B,IAAIG,kBAAkB,EAAE;gBACDZ,IAAO;YAA5B,MAAM8D,YAAY,GAAG9D,CAAAA,CAAAA,IAAO,GAAPA,GAAG,CAACa,GAAG,SAAQ,GAAfb,KAAAA,CAAe,GAAfA,IAAO,CAAEc,MAAM,CAAA,KAAK,QAAQ,AAAC;YAElD,IAAIgD,YAAY,EAAE;gBAChB,0DAA0D;gBAC1D,MAAMlC,CAAAA,GAAAA,aAAqB,AAAgD,CAAA,sBAAhD,CAACN,UAAU,EAAEC,KAAI,QAAA,CAACC,OAAO,CAACG,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;aAC7E;YAED,MAAMoC,CAAAA,GAAAA,kBAA0B,AAW9B,CAAA,2BAX8B,CAACxE,WAAW,EAAE;gBAC5C2C,KAAK;gBACLxC,KAAK,EAAE,CAAC,CAACA,KAAK;gBACdD,SAAS,EAAEkC,UAAU;gBACrB7B,MAAM;gBACNiB,OAAO;gBACP2B,iBAAiB,EAAE7C,UAAU;gBAC7BmE,WAAW,EAAEC,CAAAA,GAAAA,aAA4B,AAAgD,CAAA,6BAAhD,CAACjE,GAAG,EAAEL,GAAG,GAAG,aAAa,GAAG,YAAY,EAAE,KAAK,CAAC;gBACzFuE,UAAU,EAAEC,CAAAA,GAAAA,OAAsC,AAAkB,CAAA,uCAAlB,CAAC5E,WAAW,EAAES,GAAG,CAAC;gBACpE8D,YAAY;gBACZ/D,UAAU;aACX,CAAC,CAAC;SACJ,MAAM;YACL,qCAAqC;YACrC,sCAAsC;YACtC,IAAIqE,IAAI,GAAG,MAAMC,CAAAA,GAAAA,cAAuB,AAQtC,CAAA,wBARsC,CAAC;gBACvCC,IAAI,EAAE,YAAY;gBAClBC,SAAS,EAAE1C,OAAO,CAAChB,GAAG,CAAE4B,SAAS;gBACjC+B,QAAQ,EAAE,MAAMC,CAAAA,GAAAA,YAAqC,AAGnD,CAAA,sCAHmD,CAAClF,WAAW,EAAE;oBACjEmF,OAAO,EAAE,EAAE;oBACXC,QAAQ,EAAE,EAAE;iBACb,CAAC;gBACF5D,OAAO;aACR,CAAC,AAAC;YAEH,sCAAsC;YACtC,MAAM6D,UAAU,GAAG,MAAMC,CAAAA,GAAAA,QAA4B,AAInD,CAAA,6BAJmD,CAACtF,WAAW,EAAE;gBACjEE,SAAS;gBACTsB,OAAO;gBACPmB,KAAK;aACN,CAAC,AAAC;YACH,IAAI0C,UAAU,EAAE;gBACdR,IAAI,GAAGQ,UAAU,CAACR,IAAI,CAAC,CAAC;aACzB;YAED,iCAAiC;YACjC,oDAAoD;YACpDlC,KAAK,CAACc,GAAG,CAAC,YAAY,EAAE;gBACtBC,QAAQ,EAAEmB,IAAI;gBACdU,YAAY,EAAE,QAAQ;aACvB,CAAC,CAAC;SACJ;KACF;IAED,kDAAkD;IAClD,MAAMC,CAAAA,GAAAA,WAAsB,AAAmB,CAAA,uBAAnB,CAAC7C,KAAK,EAAEP,UAAU,CAAC,CAAC;CACjD"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/exportApp.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { createMetadataJson } from './createMetadataJson';\nimport { exportAssetsAsync } from './exportAssets';\nimport { unstable_exportStaticAsync } from './exportStaticAsync';\nimport { getVirtualFaviconAssetsAsync } from './favicon';\nimport { createBundlesAsync } from './fork-bundleAsync';\nimport { getPublicExpoManifestAsync } from './getPublicExpoManifest';\nimport { copyPublicFolderAsync } from './publicFolder';\nimport { Options } from './resolveOptions';\nimport { ExportAssetMap, getFilesFromSerialAssets, persistMetroFilesAsync } from './saveAssets';\nimport { createAssetMap, createSourceMapDebugHtml } from './writeContents';\nimport * as Log from '../log';\nimport { WebSupportProjectPrerequisite } from '../start/doctor/web/WebSupportProjectPrerequisite';\nimport { getRouterDirectoryModuleIdWithManifest } from '../start/server/metro/router';\nimport { serializeHtmlWithAssets } from '../start/server/metro/serializeHtml';\nimport {\n getAsyncRoutesFromExpoConfig,\n getBaseUrlFromExpoConfig,\n} from '../start/server/middleware/metroOptions';\nimport { createTemplateHtmlFromExpoConfigAsync } from '../start/server/webTemplate';\nimport { env } from '../utils/env';\nimport { setNodeEnv } from '../utils/nodeEnv';\n\nexport async function exportAppAsync(\n projectRoot: string,\n {\n platforms,\n outputDir,\n clear,\n dev,\n dumpAssetmap,\n sourceMaps,\n minify,\n bytecode,\n maxWorkers,\n }: Pick<\n Options,\n | 'dumpAssetmap'\n | 'sourceMaps'\n | 'dev'\n | 'clear'\n | 'outputDir'\n | 'platforms'\n | 'minify'\n | 'bytecode'\n | 'maxWorkers'\n >\n): Promise<void> {\n setNodeEnv(dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const projectConfig = getConfig(projectRoot);\n const exp = await getPublicExpoManifestAsync(projectRoot, {\n // Web doesn't require validation.\n skipValidation: platforms.length === 1 && platforms[0] === 'web',\n });\n\n if (platforms.includes('web')) {\n await new WebSupportProjectPrerequisite(projectRoot).assertAsync();\n }\n\n const useServerRendering = ['static', 'server'].includes(exp.web?.output ?? '');\n const baseUrl = getBaseUrlFromExpoConfig(exp);\n\n if (!bytecode && (platforms.includes('ios') || platforms.includes('android'))) {\n Log.warn(\n `Bytecode makes the app startup faster, disabling bytecode is highly discouraged and should only be used for debugging purposes.`\n );\n }\n\n // Print out logs\n if (baseUrl) {\n Log.log();\n Log.log(chalk.gray`Using (experimental) base path: ${baseUrl}`);\n // Warn if not using an absolute path.\n if (!baseUrl.startsWith('/')) {\n Log.log(\n chalk.yellow` Base path does not start with a slash. Requests will not be absolute.`\n );\n }\n }\n\n const publicPath = path.resolve(projectRoot, env.EXPO_PUBLIC_FOLDER);\n const outputPath = path.resolve(projectRoot, outputDir);\n\n // NOTE(kitten): The public folder is currently always copied, regardless of targetDomain\n // split. Hence, there's another separate `copyPublicFolderAsync` call below for `web`\n await copyPublicFolderAsync(publicPath, outputPath);\n\n // Run metro bundler and create the JS bundles/source maps.\n const bundles = await createBundlesAsync(projectRoot, projectConfig, {\n clear: !!clear,\n minify,\n bytecode,\n sourcemaps: sourceMaps,\n platforms: useServerRendering ? platforms.filter((platform) => platform !== 'web') : platforms,\n dev,\n maxWorkers,\n });\n\n // Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).\n\n const files: ExportAssetMap = new Map();\n\n Object.values(bundles).forEach((bundle) => {\n getFilesFromSerialAssets(bundle.artifacts, {\n includeSourceMaps: sourceMaps,\n files,\n });\n });\n\n const bundleEntries = Object.entries(bundles);\n // Can be empty during web-only SSG.\n if (bundleEntries.length) {\n // TODO: Use same asset system across platforms again.\n const { assets, embeddedHashSet } = await exportAssetsAsync(projectRoot, {\n files,\n exp,\n outputDir: outputPath,\n bundles,\n baseUrl,\n });\n\n if (dumpAssetmap) {\n Log.log('Creating asset map');\n files.set('assetmap.json', { contents: JSON.stringify(createAssetMap({ assets })) });\n }\n\n const fileNames = Object.fromEntries(\n Object.entries(bundles).map(([platform, bundle]) => [\n platform,\n bundle.artifacts.filter((asset) => asset.type === 'js').map((asset) => asset.filename),\n ])\n );\n\n // build source maps\n if (sourceMaps) {\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 files.set('debug.html', {\n contents: createSourceMapDebugHtml({\n fileNames: Object.values(fileNames).flat(),\n }),\n });\n }\n\n // Generate a `metadata.json` for EAS Update.\n const contents = createMetadataJson({\n bundles,\n fileNames,\n embeddedHashSet,\n });\n files.set('metadata.json', { contents: JSON.stringify(contents) });\n }\n\n // Additional web-only steps...\n\n if (platforms.includes('web')) {\n if (useServerRendering) {\n const exportServer = exp.web?.output === 'server';\n\n if (exportServer) {\n // TODO: Remove when this is abstracted into the files map\n await copyPublicFolderAsync(publicPath, path.resolve(outputPath, 'client'));\n }\n\n await unstable_exportStaticAsync(projectRoot, {\n files,\n clear: !!clear,\n outputDir: outputPath,\n minify,\n baseUrl,\n includeSourceMaps: sourceMaps,\n asyncRoutes: getAsyncRoutesFromExpoConfig(exp, dev ? 'development' : 'production', 'web'),\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n exportServer,\n maxWorkers,\n });\n } else {\n // TODO: Unify with exportStaticAsync\n // TODO: Maybe move to the serializer.\n let html = await serializeHtmlWithAssets({\n mode: 'production',\n resources: bundles.web!.artifacts,\n template: await createTemplateHtmlFromExpoConfigAsync(projectRoot, {\n scripts: [],\n cssLinks: [],\n }),\n baseUrl,\n });\n\n // Add the favicon assets to the HTML.\n const modifyHtml = await getVirtualFaviconAssetsAsync(projectRoot, {\n outputDir,\n baseUrl,\n files,\n });\n if (modifyHtml) {\n html = modifyHtml(html);\n }\n\n // Generate SPA-styled HTML file.\n // If web exists, then write the template HTML file.\n files.set('index.html', {\n contents: html,\n targetDomain: 'client',\n });\n }\n }\n\n // Write all files at the end for unified logging.\n await persistMetroFilesAsync(files, outputPath);\n}\n"],"names":["exportAppAsync","Log","projectRoot","platforms","outputDir","clear","dev","dumpAssetmap","sourceMaps","minify","bytecode","maxWorkers","exp","setNodeEnv","require","load","projectConfig","getConfig","getPublicExpoManifestAsync","skipValidation","length","includes","WebSupportProjectPrerequisite","assertAsync","useServerRendering","web","output","baseUrl","getBaseUrlFromExpoConfig","warn","log","chalk","gray","startsWith","yellow","publicPath","path","resolve","env","EXPO_PUBLIC_FOLDER","outputPath","copyPublicFolderAsync","bundles","createBundlesAsync","sourcemaps","filter","platform","files","Map","Object","values","forEach","bundle","getFilesFromSerialAssets","artifacts","includeSourceMaps","bundleEntries","entries","assets","embeddedHashSet","exportAssetsAsync","set","contents","JSON","stringify","createAssetMap","fileNames","fromEntries","map","asset","type","filename","createSourceMapDebugHtml","flat","createMetadataJson","exportServer","unstable_exportStaticAsync","asyncRoutes","getAsyncRoutesFromExpoConfig","routerRoot","getRouterDirectoryModuleIdWithManifest","html","serializeHtmlWithAssets","mode","resources","template","createTemplateHtmlFromExpoConfigAsync","scripts","cssLinks","modifyHtml","getVirtualFaviconAssetsAsync","targetDomain","persistMetroFilesAsync"],"mappings":"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"}
|
|
@@ -47,6 +47,7 @@ async function createBundlesAsync(projectRoot, projectConfig, bundleOptions) {
|
|
|
47
47
|
}),
|
|
48
48
|
sourcemaps: bundleOptions.sourcemaps,
|
|
49
49
|
minify: bundleOptions.minify,
|
|
50
|
+
bytecode: bundleOptions.bytecode,
|
|
50
51
|
dev: bundleOptions.dev
|
|
51
52
|
})
|
|
52
53
|
));
|
|
@@ -86,15 +87,16 @@ async function bundleProductionMetroClientAsync(projectRoot, expoConfig, metroOp
|
|
|
86
87
|
..._server.default.DEFAULT_BUNDLE_OPTIONS,
|
|
87
88
|
sourceMapUrl: bundle.sourceMapUrl,
|
|
88
89
|
...(0, _metroOptions).getMetroDirectBundleOptionsForExpoConfig(projectRoot, expoConfig, {
|
|
90
|
+
minify: bundle.minify,
|
|
89
91
|
mainModuleName: bundle.entryPoint,
|
|
90
92
|
platform: bundle.platform,
|
|
91
93
|
mode: bundle.dev ? "development" : "production",
|
|
92
94
|
engine: isHermes ? "hermes" : undefined,
|
|
93
95
|
serializerIncludeMaps: bundle.sourcemaps,
|
|
96
|
+
bytecode: bundle.bytecode && isHermes,
|
|
94
97
|
// Bundle splitting on web-only for now.
|
|
95
98
|
// serializerOutput: bundle.platform === 'web' ? 'static' : undefined,
|
|
96
99
|
serializerOutput: "static",
|
|
97
|
-
serializerIncludeBytecode: isHermes,
|
|
98
100
|
isExporting: true
|
|
99
101
|
}),
|
|
100
102
|
bundleType: "bundle",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/fork-bundleAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfigFilePaths, Platform, ProjectConfig } from '@expo/config';\nimport { LoadOptions } from '@expo/metro-config';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport getMetroAssets from '@expo/metro-config/build/transform-worker/getAssets';\nimport assert from 'assert';\nimport Metro, { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { TransformInputOptions } from 'metro/src/DeltaBundler/types';\nimport IncrementalBundler from 'metro/src/IncrementalBundler';\nimport Server from 'metro/src/Server';\nimport splitBundleOptions from 'metro/src/lib/splitBundleOptions';\nimport type {\n ResolverInputOptions,\n BundleOptions as MetroBundleOptions,\n} from 'metro/src/shared/types';\nimport { ConfigT } from 'metro-config';\nimport path from 'path';\n\nimport { isEnableHermesManaged, maybeThrowFromInconsistentEngineAsync } from './exportHermes';\nimport { loadMetroConfigAsync } from '../start/server/metro/instantiateMetro';\nimport { getEntryWithServerRoot } from '../start/server/middleware/ManifestMiddleware';\nimport {\n ExpoMetroBundleOptions,\n getMetroDirectBundleOptionsForExpoConfig,\n} from '../start/server/middleware/metroOptions';\nimport { CommandError } from '../utils/errors';\n\nexport type MetroDevServerOptions = LoadOptions;\n\nexport type BundleOptions = {\n entryPoint: string;\n platform: 'android' | 'ios' | 'web';\n dev?: boolean;\n minify?: boolean;\n sourceMapUrl?: string;\n sourcemaps?: boolean;\n};\nexport type BundleAssetWithFileHashes = Metro.AssetData & {\n fileHashes: string[]; // added by the hashAssets asset plugin\n};\nexport type BundleOutput = {\n artifacts: SerialAsset[];\n assets: readonly BundleAssetWithFileHashes[];\n};\n\nlet nextBuildID = 0;\n\nasync function assertEngineMismatchAsync(\n projectRoot: string,\n exp: Pick<ExpoConfig, 'ios' | 'android' | 'jsEngine'>,\n platform: Platform\n) {\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 createBundlesAsync(\n projectRoot: string,\n projectConfig: ProjectConfig,\n bundleOptions: {\n clear?: boolean;\n maxWorkers?: number;\n platforms: Platform[];\n dev?: boolean;\n minify?: boolean;\n sourcemaps?: boolean;\n entryPoint?: string;\n }\n): Promise<Partial<Record<Platform, BundleOutput>>> {\n if (!bundleOptions.platforms.length) {\n return {};\n }\n const { exp, pkg } = projectConfig;\n\n const bundles = await bundleProductionMetroClientAsync(\n projectRoot,\n exp,\n {\n // If not legacy, ignore the target option to prevent warnings from being thrown.\n resetCache: bundleOptions.clear,\n maxWorkers: bundleOptions.maxWorkers,\n },\n bundleOptions.platforms.map((platform: Platform) => ({\n platform,\n entryPoint:\n bundleOptions.entryPoint ?? getEntryWithServerRoot(projectRoot, { platform, pkg }),\n sourcemaps: bundleOptions.sourcemaps,\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\nfunction assertMetroConfig(\n config: ConfigT\n): asserts config is ConfigT & { serializer: NonNullable<ConfigT['serializer']> } {\n if (!config.serializer?.customSerializer) {\n throw new CommandError(\n 'METRO_CONFIG_MALFORMED',\n `The Metro bundler configuration is missing required features from 'expo/metro-config' and cannot be used with Expo CLI. Ensure the metro.config.js file is extending 'expo/metro-config'. Learn more: https://docs.expo.dev/guides/customizing-metro`\n );\n }\n}\n\nasync function bundleProductionMetroClientAsync(\n projectRoot: string,\n expoConfig: ExpoConfig,\n metroOptions: 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 { config, reporter } = await loadMetroConfigAsync(projectRoot, metroOptions, {\n exp: expoConfig,\n isExporting: true,\n });\n\n assertMetroConfig(config);\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 if (isHermes) {\n await assertEngineMismatchAsync(projectRoot, expoConfig, bundle.platform);\n }\n const bundleOptions: MetroBundleOptions = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n sourceMapUrl: bundle.sourceMapUrl,\n ...getMetroDirectBundleOptionsForExpoConfig(projectRoot, expoConfig, {\n mainModuleName: bundle.entryPoint,\n platform: bundle.platform,\n mode: bundle.dev ? 'development' : 'production',\n engine: isHermes ? 'hermes' : undefined,\n serializerIncludeMaps: bundle.sourcemaps,\n // Bundle splitting on web-only for now.\n // serializerOutput: bundle.platform === 'web' ? 'static' : undefined,\n serializerOutput: 'static',\n serializerIncludeBytecode: isHermes,\n isExporting: true,\n }),\n bundleType: 'bundle',\n inlineSourceMap: false,\n createModuleIdFactory: config.serializer.createModuleIdFactory,\n onProgress: (transformedFileCount: number, totalFileCount: number) => {\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 artifacts = await forkMetroBuildAsync(metroServer, bundleOptions);\n reporter.update({\n buildID,\n type: 'bundle_build_done',\n });\n return artifacts;\n } catch (error) {\n reporter.update({\n buildID,\n type: 'bundle_build_failed',\n });\n\n throw error;\n }\n };\n\n try {\n return await Promise.all(bundles.map((bundle) => buildAsync(bundle)));\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\n// Forked out of Metro because the `this._getServerRootDir()` doesn't match the development\n// behavior.\nexport async function getAssets(metro: Metro.Server, options: MetroBundleOptions) {\n const { entryFile, onProgress, resolverOptions, transformOptions } = splitBundleOptions(options);\n\n // @ts-expect-error: _bundler isn't exposed on the type.\n const dependencies = await metro._bundler.getDependencies(\n [entryFile],\n transformOptions,\n resolverOptions,\n { onProgress, shallow: false, lazy: false }\n );\n\n // @ts-expect-error\n const _config = metro._config as ConfigT;\n\n return getMetroAssets(dependencies, {\n processModuleFilter: _config.serializer.processModuleFilter,\n assetPlugins: _config.transformer.assetPlugins,\n platform: transformOptions.platform!,\n projectRoot: _config.projectRoot, // this._getServerRootDir(),\n publicPath: _config.transformer.publicPath,\n });\n}\n\nfunction isMetroServerInstance(metro: Metro.Server): metro is Metro.Server & {\n _shouldAddModuleToIgnoreList: (module: Module<MixedOutput>) => boolean;\n _bundler: IncrementalBundler;\n _config: ConfigT;\n _createModuleId: (path: string) => number;\n _resolveRelativePath(\n filePath: string,\n {\n relativeTo,\n resolverOptions,\n transformOptions,\n }: {\n relativeTo: 'project' | 'server';\n resolverOptions: ResolverInputOptions;\n transformOptions: TransformInputOptions;\n }\n ): Promise<string>;\n _getEntryPointAbsolutePath(entryFile: string): string;\n _getSortedModules(graph: ReadOnlyGraph): Module<MixedOutput>[];\n} {\n return '_shouldAddModuleToIgnoreList' in metro;\n}\n\nasync function forkMetroBuildAsync(\n metro: Metro.Server,\n options: ExpoMetroBundleOptions\n): Promise<{ artifacts: SerialAsset[]; assets: readonly BundleAssetWithFileHashes[] }> {\n if (!isMetroServerInstance(metro)) {\n throw new Error('Expected Metro server instance to have private functions exposed.');\n }\n\n if (options.serializerOptions?.output !== 'static') {\n throw new Error('Only multi-serializer output is supported.');\n }\n\n const {\n entryFile,\n graphOptions,\n onProgress,\n resolverOptions,\n serializerOptions,\n transformOptions,\n } = splitBundleOptions(options);\n\n const { prepend, graph } = await metro._bundler.buildGraph(\n entryFile,\n transformOptions,\n resolverOptions,\n {\n onProgress,\n shallow: graphOptions.shallow,\n // @ts-expect-error\n lazy: graphOptions.lazy,\n }\n );\n\n const entryPoint = metro._getEntryPointAbsolutePath(entryFile);\n\n const bundleOptions = {\n asyncRequireModulePath: await metro._resolveRelativePath(\n metro._config.transformer.asyncRequireModulePath,\n {\n relativeTo: 'project',\n resolverOptions,\n transformOptions,\n }\n ),\n processModuleFilter: metro._config.serializer.processModuleFilter,\n createModuleId: metro._createModuleId,\n getRunModuleStatement: metro._config.serializer.getRunModuleStatement,\n dev: transformOptions.dev,\n includeAsyncPaths: graphOptions.lazy,\n projectRoot: metro._config.projectRoot,\n modulesOnly: serializerOptions.modulesOnly,\n runBeforeMainModule: metro._config.serializer.getModulesRunBeforeMainModule(\n path.relative(metro._config.projectRoot, entryPoint)\n ),\n runModule: serializerOptions.runModule,\n sourceMapUrl: serializerOptions.sourceMapUrl,\n sourceUrl: serializerOptions.sourceUrl,\n inlineSourceMap: serializerOptions.inlineSourceMap,\n serverRoot: metro._config.server.unstable_serverRoot ?? metro._config.projectRoot,\n shouldAddToIgnoreList: (module: Module<MixedOutput>) =>\n metro._shouldAddModuleToIgnoreList(module),\n // Custom options we pass to the serializer to emulate the URL query parameters.\n serializerOptions: options.serializerOptions,\n };\n\n assertMetroConfig(metro._config);\n\n const bundle = await metro._config.serializer.customSerializer!(\n entryPoint,\n // @ts-expect-error: Metro is typed incorrectly\n prepend,\n graph,\n bundleOptions\n );\n\n try {\n const parsed = typeof bundle === 'string' ? JSON.parse(bundle) : bundle;\n\n assert(\n 'artifacts' in parsed && Array.isArray(parsed.artifacts),\n 'Expected serializer to return an object with key artifacts to contain an array of serial assets.'\n );\n return parsed;\n } catch (error: any) {\n throw new Error(\n 'Serializer did not return expected format. The project copy of `expo/metro-config` may be out of date. Error: ' +\n error.message\n );\n }\n}\n"],"names":["createBundlesAsync","getAssets","nextBuildID","assertEngineMismatchAsync","projectRoot","exp","platform","isHermesManaged","isEnableHermesManaged","paths","getConfigFilePaths","configFilePath","dynamicConfigPath","staticConfigPath","maybeThrowFromInconsistentEngineAsync","projectConfig","bundleOptions","platforms","length","pkg","bundles","bundleProductionMetroClientAsync","resetCache","clear","maxWorkers","map","entryPoint","getEntryWithServerRoot","sourcemaps","minify","dev","reduce","prev","index","assertMetroConfig","config","serializer","customSerializer","CommandError","expoConfig","metroOptions","Promise","all","reporter","loadMetroConfigAsync","isExporting","metroServer","Metro","runMetro","watch","buildAsync","bundle","buildID","isHermes","Server","DEFAULT_BUNDLE_OPTIONS","sourceMapUrl","getMetroDirectBundleOptionsForExpoConfig","mainModuleName","mode","engine","undefined","serializerIncludeMaps","serializerOutput","serializerIncludeBytecode","bundleType","inlineSourceMap","createModuleIdFactory","onProgress","transformedFileCount","totalFileCount","update","type","bundleDetails","artifacts","forkMetroBuildAsync","error","console","log","end","metro","options","entryFile","resolverOptions","transformOptions","splitBundleOptions","dependencies","_bundler","getDependencies","shallow","lazy","_config","getMetroAssets","processModuleFilter","assetPlugins","transformer","publicPath","isMetroServerInstance","Error","serializerOptions","output","graphOptions","prepend","graph","buildGraph","_getEntryPointAbsolutePath","asyncRequireModulePath","_resolveRelativePath","relativeTo","createModuleId","_createModuleId","getRunModuleStatement","includeAsyncPaths","modulesOnly","runBeforeMainModule","getModulesRunBeforeMainModule","path","relative","runModule","sourceUrl","serverRoot","server","unstable_serverRoot","shouldAddToIgnoreList","module","_shouldAddModuleToIgnoreList","parsed","JSON","parse","assert","Array","isArray","message"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/fork-bundleAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfigFilePaths, Platform, ProjectConfig } from '@expo/config';\nimport { LoadOptions } from '@expo/metro-config';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport getMetroAssets from '@expo/metro-config/build/transform-worker/getAssets';\nimport assert from 'assert';\nimport Metro, { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { TransformInputOptions } from 'metro/src/DeltaBundler/types';\nimport IncrementalBundler from 'metro/src/IncrementalBundler';\nimport Server from 'metro/src/Server';\nimport splitBundleOptions from 'metro/src/lib/splitBundleOptions';\nimport type {\n ResolverInputOptions,\n BundleOptions as MetroBundleOptions,\n} from 'metro/src/shared/types';\nimport { ConfigT } from 'metro-config';\nimport path from 'path';\n\nimport { isEnableHermesManaged, maybeThrowFromInconsistentEngineAsync } from './exportHermes';\nimport { loadMetroConfigAsync } from '../start/server/metro/instantiateMetro';\nimport { getEntryWithServerRoot } from '../start/server/middleware/ManifestMiddleware';\nimport {\n ExpoMetroBundleOptions,\n getMetroDirectBundleOptionsForExpoConfig,\n} from '../start/server/middleware/metroOptions';\nimport { CommandError } from '../utils/errors';\n\nexport type MetroDevServerOptions = LoadOptions;\n\nexport type BundleOptions = {\n entryPoint: string;\n platform: 'android' | 'ios' | 'web';\n dev?: boolean;\n minify?: boolean;\n bytecode: boolean;\n sourceMapUrl?: string;\n sourcemaps?: boolean;\n};\nexport type BundleAssetWithFileHashes = Metro.AssetData & {\n fileHashes: string[]; // added by the hashAssets asset plugin\n};\nexport type BundleOutput = {\n artifacts: SerialAsset[];\n assets: readonly BundleAssetWithFileHashes[];\n};\n\nlet nextBuildID = 0;\n\nasync function assertEngineMismatchAsync(\n projectRoot: string,\n exp: Pick<ExpoConfig, 'ios' | 'android' | 'jsEngine'>,\n platform: Platform\n) {\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 createBundlesAsync(\n projectRoot: string,\n projectConfig: ProjectConfig,\n bundleOptions: {\n clear?: boolean;\n maxWorkers?: number;\n platforms: Platform[];\n dev?: boolean;\n minify?: boolean;\n bytecode: boolean;\n sourcemaps?: boolean;\n entryPoint?: string;\n }\n): Promise<Partial<Record<Platform, BundleOutput>>> {\n if (!bundleOptions.platforms.length) {\n return {};\n }\n const { exp, pkg } = projectConfig;\n\n const bundles = await bundleProductionMetroClientAsync(\n projectRoot,\n exp,\n {\n // If not legacy, ignore the target option to prevent warnings from being thrown.\n resetCache: bundleOptions.clear,\n maxWorkers: bundleOptions.maxWorkers,\n },\n bundleOptions.platforms.map((platform: Platform) => ({\n platform,\n entryPoint:\n bundleOptions.entryPoint ?? getEntryWithServerRoot(projectRoot, { platform, pkg }),\n sourcemaps: bundleOptions.sourcemaps,\n minify: bundleOptions.minify,\n bytecode: bundleOptions.bytecode,\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\nfunction assertMetroConfig(\n config: ConfigT\n): asserts config is ConfigT & { serializer: NonNullable<ConfigT['serializer']> } {\n if (!config.serializer?.customSerializer) {\n throw new CommandError(\n 'METRO_CONFIG_MALFORMED',\n `The Metro bundler configuration is missing required features from 'expo/metro-config' and cannot be used with Expo CLI. Ensure the metro.config.js file is extending 'expo/metro-config'. Learn more: https://docs.expo.dev/guides/customizing-metro`\n );\n }\n}\n\nasync function bundleProductionMetroClientAsync(\n projectRoot: string,\n expoConfig: ExpoConfig,\n metroOptions: 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 { config, reporter } = await loadMetroConfigAsync(projectRoot, metroOptions, {\n exp: expoConfig,\n isExporting: true,\n });\n\n assertMetroConfig(config);\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 if (isHermes) {\n await assertEngineMismatchAsync(projectRoot, expoConfig, bundle.platform);\n }\n const bundleOptions: MetroBundleOptions = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n sourceMapUrl: bundle.sourceMapUrl,\n ...getMetroDirectBundleOptionsForExpoConfig(projectRoot, expoConfig, {\n minify: bundle.minify,\n mainModuleName: bundle.entryPoint,\n platform: bundle.platform,\n mode: bundle.dev ? 'development' : 'production',\n engine: isHermes ? 'hermes' : undefined,\n serializerIncludeMaps: bundle.sourcemaps,\n bytecode: bundle.bytecode && isHermes,\n // Bundle splitting on web-only for now.\n // serializerOutput: bundle.platform === 'web' ? 'static' : undefined,\n serializerOutput: 'static',\n isExporting: true,\n }),\n bundleType: 'bundle',\n inlineSourceMap: false,\n createModuleIdFactory: config.serializer.createModuleIdFactory,\n onProgress: (transformedFileCount: number, totalFileCount: number) => {\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 artifacts = await forkMetroBuildAsync(metroServer, bundleOptions);\n reporter.update({\n buildID,\n type: 'bundle_build_done',\n });\n return artifacts;\n } catch (error) {\n reporter.update({\n buildID,\n type: 'bundle_build_failed',\n });\n\n throw error;\n }\n };\n\n try {\n return await Promise.all(bundles.map((bundle) => buildAsync(bundle)));\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\n// Forked out of Metro because the `this._getServerRootDir()` doesn't match the development\n// behavior.\nexport async function getAssets(metro: Metro.Server, options: MetroBundleOptions) {\n const { entryFile, onProgress, resolverOptions, transformOptions } = splitBundleOptions(options);\n\n // @ts-expect-error: _bundler isn't exposed on the type.\n const dependencies = await metro._bundler.getDependencies(\n [entryFile],\n transformOptions,\n resolverOptions,\n { onProgress, shallow: false, lazy: false }\n );\n\n // @ts-expect-error\n const _config = metro._config as ConfigT;\n\n return getMetroAssets(dependencies, {\n processModuleFilter: _config.serializer.processModuleFilter,\n assetPlugins: _config.transformer.assetPlugins,\n platform: transformOptions.platform!,\n projectRoot: _config.projectRoot, // this._getServerRootDir(),\n publicPath: _config.transformer.publicPath,\n });\n}\n\nfunction isMetroServerInstance(metro: Metro.Server): metro is Metro.Server & {\n _shouldAddModuleToIgnoreList: (module: Module<MixedOutput>) => boolean;\n _bundler: IncrementalBundler;\n _config: ConfigT;\n _createModuleId: (path: string) => number;\n _resolveRelativePath(\n filePath: string,\n {\n relativeTo,\n resolverOptions,\n transformOptions,\n }: {\n relativeTo: 'project' | 'server';\n resolverOptions: ResolverInputOptions;\n transformOptions: TransformInputOptions;\n }\n ): Promise<string>;\n _getEntryPointAbsolutePath(entryFile: string): string;\n _getSortedModules(graph: ReadOnlyGraph): Module<MixedOutput>[];\n} {\n return '_shouldAddModuleToIgnoreList' in metro;\n}\n\nasync function forkMetroBuildAsync(\n metro: Metro.Server,\n options: ExpoMetroBundleOptions\n): Promise<{ artifacts: SerialAsset[]; assets: readonly BundleAssetWithFileHashes[] }> {\n if (!isMetroServerInstance(metro)) {\n throw new Error('Expected Metro server instance to have private functions exposed.');\n }\n\n if (options.serializerOptions?.output !== 'static') {\n throw new Error('Only multi-serializer output is supported.');\n }\n\n const {\n entryFile,\n graphOptions,\n onProgress,\n resolverOptions,\n serializerOptions,\n transformOptions,\n } = splitBundleOptions(options);\n\n const { prepend, graph } = await metro._bundler.buildGraph(\n entryFile,\n transformOptions,\n resolverOptions,\n {\n onProgress,\n shallow: graphOptions.shallow,\n // @ts-expect-error\n lazy: graphOptions.lazy,\n }\n );\n\n const entryPoint = metro._getEntryPointAbsolutePath(entryFile);\n\n const bundleOptions = {\n asyncRequireModulePath: await metro._resolveRelativePath(\n metro._config.transformer.asyncRequireModulePath,\n {\n relativeTo: 'project',\n resolverOptions,\n transformOptions,\n }\n ),\n processModuleFilter: metro._config.serializer.processModuleFilter,\n createModuleId: metro._createModuleId,\n getRunModuleStatement: metro._config.serializer.getRunModuleStatement,\n dev: transformOptions.dev,\n includeAsyncPaths: graphOptions.lazy,\n projectRoot: metro._config.projectRoot,\n modulesOnly: serializerOptions.modulesOnly,\n runBeforeMainModule: metro._config.serializer.getModulesRunBeforeMainModule(\n path.relative(metro._config.projectRoot, entryPoint)\n ),\n runModule: serializerOptions.runModule,\n sourceMapUrl: serializerOptions.sourceMapUrl,\n sourceUrl: serializerOptions.sourceUrl,\n inlineSourceMap: serializerOptions.inlineSourceMap,\n serverRoot: metro._config.server.unstable_serverRoot ?? metro._config.projectRoot,\n shouldAddToIgnoreList: (module: Module<MixedOutput>) =>\n metro._shouldAddModuleToIgnoreList(module),\n // Custom options we pass to the serializer to emulate the URL query parameters.\n serializerOptions: options.serializerOptions,\n };\n\n assertMetroConfig(metro._config);\n\n const bundle = await metro._config.serializer.customSerializer!(\n entryPoint,\n // @ts-expect-error: Metro is typed incorrectly\n prepend,\n graph,\n bundleOptions\n );\n\n try {\n const parsed = typeof bundle === 'string' ? JSON.parse(bundle) : bundle;\n\n assert(\n 'artifacts' in parsed && Array.isArray(parsed.artifacts),\n 'Expected serializer to return an object with key artifacts to contain an array of serial assets.'\n );\n return parsed;\n } catch (error: any) {\n throw new Error(\n 'Serializer did not return expected format. The project copy of `expo/metro-config` may be out of date. Error: ' +\n error.message\n );\n }\n}\n"],"names":["createBundlesAsync","getAssets","nextBuildID","assertEngineMismatchAsync","projectRoot","exp","platform","isHermesManaged","isEnableHermesManaged","paths","getConfigFilePaths","configFilePath","dynamicConfigPath","staticConfigPath","maybeThrowFromInconsistentEngineAsync","projectConfig","bundleOptions","platforms","length","pkg","bundles","bundleProductionMetroClientAsync","resetCache","clear","maxWorkers","map","entryPoint","getEntryWithServerRoot","sourcemaps","minify","bytecode","dev","reduce","prev","index","assertMetroConfig","config","serializer","customSerializer","CommandError","expoConfig","metroOptions","Promise","all","reporter","loadMetroConfigAsync","isExporting","metroServer","Metro","runMetro","watch","buildAsync","bundle","buildID","isHermes","Server","DEFAULT_BUNDLE_OPTIONS","sourceMapUrl","getMetroDirectBundleOptionsForExpoConfig","mainModuleName","mode","engine","undefined","serializerIncludeMaps","serializerOutput","bundleType","inlineSourceMap","createModuleIdFactory","onProgress","transformedFileCount","totalFileCount","update","type","bundleDetails","artifacts","forkMetroBuildAsync","error","console","log","end","metro","options","entryFile","resolverOptions","transformOptions","splitBundleOptions","dependencies","_bundler","getDependencies","shallow","lazy","_config","getMetroAssets","processModuleFilter","assetPlugins","transformer","publicPath","isMetroServerInstance","Error","serializerOptions","output","graphOptions","prepend","graph","buildGraph","_getEntryPointAbsolutePath","asyncRequireModulePath","_resolveRelativePath","relativeTo","createModuleId","_createModuleId","getRunModuleStatement","includeAsyncPaths","modulesOnly","runBeforeMainModule","getModulesRunBeforeMainModule","path","relative","runModule","sourceUrl","serverRoot","server","unstable_serverRoot","shouldAddToIgnoreList","module","_shouldAddModuleToIgnoreList","parsed","JSON","parse","assert","Array","isArray","message"],"mappings":"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"}
|
|
@@ -47,6 +47,7 @@ const expoExport = async (argv)=>{
|
|
|
47
47
|
String
|
|
48
48
|
],
|
|
49
49
|
"--no-minify": Boolean,
|
|
50
|
+
"--no-bytecode": Boolean,
|
|
50
51
|
// Hack: This is added because EAS CLI always includes the flag.
|
|
51
52
|
// If supplied, we'll do nothing with the value, but at least the process won't crash.
|
|
52
53
|
// Note that we also don't show this value in the `--help` prompt since we don't want people to use it.
|
|
@@ -68,6 +69,7 @@ const expoExport = async (argv)=>{
|
|
|
68
69
|
_chalk.default`--output-dir <dir> The directory to export the static files to. {dim Default: dist}`,
|
|
69
70
|
`--dev Configure static files for developing locally using a non-https server`,
|
|
70
71
|
`--no-minify Prevent minifying source`,
|
|
72
|
+
`--no-bytecode Prevent generating Hermes bytecode`,
|
|
71
73
|
`--max-workers <number> Maximum number of tasks to allow the bundler to spawn`,
|
|
72
74
|
`--dump-assetmap Emit an asset map for further processing`,
|
|
73
75
|
_chalk.default`-p, --platform <platform> Options: android, ios, web, all. {dim Default: all}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertArgs, getProjectRoot, printHelp } from '../utils/args';\nimport { logCmdError } from '../utils/errors';\n\nexport const expoExport: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--clear': Boolean,\n '--dump-assetmap': Boolean,\n '--dev': Boolean,\n '--source-maps': Boolean,\n '--max-workers': Number,\n '--output-dir': String,\n '--platform': [String],\n '--no-minify': Boolean,\n\n // Hack: This is added because EAS CLI always includes the flag.\n // If supplied, we'll do nothing with the value, but at least the process won't crash.\n // Note that we also don't show this value in the `--help` prompt since we don't want people to use it.\n '--experimental-bundle': Boolean,\n\n // Aliases\n '-h': '--help',\n '-s': '--source-maps',\n // '-d': '--dump-assetmap',\n '-c': '--clear',\n '-p': '--platform',\n // Interop with Metro docs and RedBox errors.\n '--reset-cache': '--clear',\n\n // Deprecated\n '--dump-sourcemap': '--source-maps',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Export the static files of the app for hosting it on a web server`,\n chalk`npx expo export {dim <dir>}`,\n [\n chalk`<dir> Directory of the Expo project. {dim Default: Current working directory}`,\n chalk`--output-dir <dir> The directory to export the static files to. {dim Default: dist}`,\n `--dev Configure static files for developing locally using a non-https server`,\n `--no-minify Prevent minifying source`,\n `--max-workers <number> Maximum number of tasks to allow the bundler to spawn`,\n `--dump-assetmap Emit an asset map for further processing`,\n chalk`-p, --platform <platform> Options: android, ios, web, all. {dim Default: all}`,\n `-s, --source-maps Emit JavaScript source maps`,\n `-c, --clear Clear the bundler cache`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n const projectRoot = getProjectRoot(args);\n const { resolveOptionsAsync } = await import('./resolveOptions.js');\n const options = await resolveOptionsAsync(projectRoot, args).catch(logCmdError);\n\n const { exportAsync } = await import('./exportAsync.js');\n return exportAsync(projectRoot, options).catch(logCmdError);\n};\n"],"names":["expoExport","argv","args","assertArgs","Boolean","Number","String","printHelp","chalk","join","projectRoot","getProjectRoot","resolveOptionsAsync","options","catch","logCmdError","exportAsync"],"mappings":"AAAA;;;;;;AACkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAG6B,IAAA,KAAe,WAAf,eAAe,CAAA;AACzC,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtC,MAAMA,UAAU,GAAY,OAAOC,IAAI,GAAK;IACjD,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,KAAU,
|
|
1
|
+
{"version":3,"sources":["../../../src/export/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertArgs, getProjectRoot, printHelp } from '../utils/args';\nimport { logCmdError } from '../utils/errors';\n\nexport const expoExport: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--clear': Boolean,\n '--dump-assetmap': Boolean,\n '--dev': Boolean,\n '--source-maps': Boolean,\n '--max-workers': Number,\n '--output-dir': String,\n '--platform': [String],\n '--no-minify': Boolean,\n '--no-bytecode': Boolean,\n\n // Hack: This is added because EAS CLI always includes the flag.\n // If supplied, we'll do nothing with the value, but at least the process won't crash.\n // Note that we also don't show this value in the `--help` prompt since we don't want people to use it.\n '--experimental-bundle': Boolean,\n\n // Aliases\n '-h': '--help',\n '-s': '--source-maps',\n // '-d': '--dump-assetmap',\n '-c': '--clear',\n '-p': '--platform',\n // Interop with Metro docs and RedBox errors.\n '--reset-cache': '--clear',\n\n // Deprecated\n '--dump-sourcemap': '--source-maps',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Export the static files of the app for hosting it on a web server`,\n chalk`npx expo export {dim <dir>}`,\n [\n chalk`<dir> Directory of the Expo project. {dim Default: Current working directory}`,\n chalk`--output-dir <dir> The directory to export the static files to. {dim Default: dist}`,\n `--dev Configure static files for developing locally using a non-https server`,\n `--no-minify Prevent minifying source`,\n `--no-bytecode Prevent generating Hermes bytecode`,\n `--max-workers <number> Maximum number of tasks to allow the bundler to spawn`,\n `--dump-assetmap Emit an asset map for further processing`,\n chalk`-p, --platform <platform> Options: android, ios, web, all. {dim Default: all}`,\n `-s, --source-maps Emit JavaScript source maps`,\n `-c, --clear Clear the bundler cache`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n const projectRoot = getProjectRoot(args);\n const { resolveOptionsAsync } = await import('./resolveOptions.js');\n const options = await resolveOptionsAsync(projectRoot, args).catch(logCmdError);\n\n const { exportAsync } = await import('./exportAsync.js');\n return exportAsync(projectRoot, options).catch(logCmdError);\n};\n"],"names":["expoExport","argv","args","assertArgs","Boolean","Number","String","printHelp","chalk","join","projectRoot","getProjectRoot","resolveOptionsAsync","options","catch","logCmdError","exportAsync"],"mappings":"AAAA;;;;;;AACkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAG6B,IAAA,KAAe,WAAf,eAAe,CAAA;AACzC,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtC,MAAMA,UAAU,GAAY,OAAOC,IAAI,GAAK;IACjD,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,KAAU,AAgCtB,CAAA,WAhCsB,CACrB;QACE,QAAQ;QACR,QAAQ,EAAEC,OAAO;QACjB,SAAS,EAAEA,OAAO;QAClB,iBAAiB,EAAEA,OAAO;QAC1B,OAAO,EAAEA,OAAO;QAChB,eAAe,EAAEA,OAAO;QACxB,eAAe,EAAEC,MAAM;QACvB,cAAc,EAAEC,MAAM;QACtB,YAAY,EAAE;YAACA,MAAM;SAAC;QACtB,aAAa,EAAEF,OAAO;QACtB,eAAe,EAAEA,OAAO;QAExB,gEAAgE;QAChE,sFAAsF;QACtF,uGAAuG;QACvG,uBAAuB,EAAEA,OAAO;QAEhC,UAAU;QACV,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,eAAe;QACrB,2BAA2B;QAC3B,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;QAClB,6CAA6C;QAC7C,eAAe,EAAE,SAAS;QAE1B,aAAa;QACb,kBAAkB,EAAE,eAAe;KACpC,EACDH,IAAI,CACL,AAAC;IAEF,IAAIC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClBK,CAAAA,GAAAA,KAAS,AAgBR,CAAA,UAhBQ,CACP,CAAC,iEAAiE,CAAC,EACnEC,MAAK,QAAA,CAAC,2BAA2B,CAAC,EAClC;YACEA,MAAK,QAAA,CAAC,kGAAkG,CAAC;YACzGA,MAAK,QAAA,CAAC,2FAA2F,CAAC;YAClG,CAAC,iGAAiG,CAAC;YACnG,CAAC,mDAAmD,CAAC;YACrD,CAAC,6DAA6D,CAAC;YAC/D,CAAC,gFAAgF,CAAC;YAClF,CAAC,mEAAmE,CAAC;YACrEA,MAAK,QAAA,CAAC,8EAA8E,CAAC;YACrF,CAAC,sDAAsD,CAAC;YACxD,CAAC,kDAAkD,CAAC;YACpD,CAAC,qCAAqC,CAAC;SACxC,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;IAED,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,KAAc,AAAM,CAAA,eAAN,CAACT,IAAI,CAAC,AAAC;IACzC,MAAM,EAAEU,mBAAmB,CAAA,EAAE,GAAG,MAAM;+CAAO,qBAAqB;MAAC,AAAC;IACpE,MAAMC,OAAO,GAAG,MAAMD,mBAAmB,CAACF,WAAW,EAAER,IAAI,CAAC,CAACY,KAAK,CAACC,OAAW,YAAA,CAAC,AAAC;IAEhF,MAAM,EAAEC,WAAW,CAAA,EAAE,GAAG,MAAM;+CAAO,kBAAkB;MAAC,AAAC;IACzD,OAAOA,WAAW,CAACN,WAAW,EAAEG,OAAO,CAAC,CAACC,KAAK,CAACC,OAAW,YAAA,CAAC,CAAC;CAC7D,AAAC;QA7DWf,UAAU,GAAVA,UAAU"}
|
|
@@ -59,6 +59,7 @@ async function resolveOptionsAsync(projectRoot, args) {
|
|
|
59
59
|
platforms: resolvePlatformOption(exp, platformBundlers, args["--platform"]),
|
|
60
60
|
outputDir: (ref = args["--output-dir"]) != null ? ref : "dist",
|
|
61
61
|
minify: !args["--no-minify"],
|
|
62
|
+
bytecode: !args["--no-bytecode"],
|
|
62
63
|
clear: !!args["--clear"],
|
|
63
64
|
dev: !!args["--dev"],
|
|
64
65
|
maxWorkers: args["--max-workers"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/resolveOptions.ts"],"sourcesContent":["import { ExpoConfig, getConfig, Platform } from '@expo/config';\n\nimport { getPlatformBundlers, PlatformBundlers } from '../start/server/platformBundlers';\nimport { CommandError } from '../utils/errors';\n\nexport type Options = {\n outputDir: string;\n platforms: Platform[];\n maxWorkers?: number;\n dev: boolean;\n clear: boolean;\n minify: boolean;\n dumpAssetmap: boolean;\n sourceMaps: boolean;\n};\n\n/** Returns an array of platforms based on the input platform identifier and runtime constraints. */\nexport function resolvePlatformOption(\n exp: ExpoConfig,\n platformBundlers: PlatformBundlers,\n platform: string[] = ['all']\n): Platform[] {\n const platformsAvailable: Partial<PlatformBundlers> = Object.fromEntries(\n Object.entries(platformBundlers).filter(\n ([platform, bundler]) => bundler === 'metro' && exp.platforms?.includes(platform as Platform)\n )\n );\n\n if (!Object.keys(platformsAvailable).length) {\n throw new CommandError(\n `No platforms are configured to use the Metro bundler in the project Expo config.`\n );\n }\n\n const assertPlatformBundler = (platform: Platform): Platform => {\n if (!platformsAvailable[platform]) {\n if (!exp.platforms?.includes(platform) && platform === 'web') {\n // Pass through so the more robust error message is shown.\n return platform;\n }\n throw new CommandError(\n 'BAD_ARGS',\n `Platform \"${platform}\" is not configured to use the Metro bundler in the project Expo config, or is missing from the supported platforms in the platforms array: [${exp.platforms?.join(\n ', '\n )}].`\n );\n }\n\n return platform;\n };\n\n const knownPlatforms = ['android', 'ios', 'web'] as Platform[];\n const assertPlatformIsKnown = (platform: string): Platform => {\n if (!knownPlatforms.includes(platform as Platform)) {\n throw new CommandError(\n `Unsupported platform \"${platform}\". Options are: ${knownPlatforms.join(',')},all`\n );\n }\n\n return platform as Platform;\n };\n\n return (\n platform\n // Expand `all` to all available platforms.\n .map((platform) => (platform === 'all' ? Object.keys(platformsAvailable) : platform))\n .flat()\n // Remove duplicated platforms\n .filter((platform, index, list) => list.indexOf(platform) === index)\n // Assert platforms are valid\n .map((platform) => assertPlatformIsKnown(platform))\n .map((platform) => assertPlatformBundler(platform))\n );\n}\n\nexport async function resolveOptionsAsync(projectRoot: string, args: any): Promise<Options> {\n const { exp } = getConfig(projectRoot, { skipPlugins: true, skipSDKVersionRequirement: true });\n const platformBundlers = getPlatformBundlers(projectRoot, exp);\n\n return {\n platforms: resolvePlatformOption(exp, platformBundlers, args['--platform']),\n outputDir: args['--output-dir'] ?? 'dist',\n minify: !args['--no-minify'],\n clear: !!args['--clear'],\n dev: !!args['--dev'],\n maxWorkers: args['--max-workers'],\n dumpAssetmap: !!args['--dump-assetmap'],\n sourceMaps: !!args['--source-maps'],\n };\n}\n"],"names":["resolvePlatformOption","resolveOptionsAsync","exp","platformBundlers","platform","platformsAvailable","Object","fromEntries","entries","filter","bundler","platforms","includes","keys","length","CommandError","assertPlatformBundler","join","knownPlatforms","assertPlatformIsKnown","map","flat","index","list","indexOf","projectRoot","args","getConfig","skipPlugins","skipSDKVersionRequirement","getPlatformBundlers","outputDir","minify","clear","dev","maxWorkers","dumpAssetmap","sourceMaps"],"mappings":"AAAA;;;;
|
|
1
|
+
{"version":3,"sources":["../../../src/export/resolveOptions.ts"],"sourcesContent":["import { ExpoConfig, getConfig, Platform } from '@expo/config';\n\nimport { getPlatformBundlers, PlatformBundlers } from '../start/server/platformBundlers';\nimport { CommandError } from '../utils/errors';\n\nexport type Options = {\n outputDir: string;\n platforms: Platform[];\n maxWorkers?: number;\n dev: boolean;\n clear: boolean;\n minify: boolean;\n bytecode: boolean;\n dumpAssetmap: boolean;\n sourceMaps: boolean;\n};\n\n/** Returns an array of platforms based on the input platform identifier and runtime constraints. */\nexport function resolvePlatformOption(\n exp: ExpoConfig,\n platformBundlers: PlatformBundlers,\n platform: string[] = ['all']\n): Platform[] {\n const platformsAvailable: Partial<PlatformBundlers> = Object.fromEntries(\n Object.entries(platformBundlers).filter(\n ([platform, bundler]) => bundler === 'metro' && exp.platforms?.includes(platform as Platform)\n )\n );\n\n if (!Object.keys(platformsAvailable).length) {\n throw new CommandError(\n `No platforms are configured to use the Metro bundler in the project Expo config.`\n );\n }\n\n const assertPlatformBundler = (platform: Platform): Platform => {\n if (!platformsAvailable[platform]) {\n if (!exp.platforms?.includes(platform) && platform === 'web') {\n // Pass through so the more robust error message is shown.\n return platform;\n }\n throw new CommandError(\n 'BAD_ARGS',\n `Platform \"${platform}\" is not configured to use the Metro bundler in the project Expo config, or is missing from the supported platforms in the platforms array: [${exp.platforms?.join(\n ', '\n )}].`\n );\n }\n\n return platform;\n };\n\n const knownPlatforms = ['android', 'ios', 'web'] as Platform[];\n const assertPlatformIsKnown = (platform: string): Platform => {\n if (!knownPlatforms.includes(platform as Platform)) {\n throw new CommandError(\n `Unsupported platform \"${platform}\". Options are: ${knownPlatforms.join(',')},all`\n );\n }\n\n return platform as Platform;\n };\n\n return (\n platform\n // Expand `all` to all available platforms.\n .map((platform) => (platform === 'all' ? Object.keys(platformsAvailable) : platform))\n .flat()\n // Remove duplicated platforms\n .filter((platform, index, list) => list.indexOf(platform) === index)\n // Assert platforms are valid\n .map((platform) => assertPlatformIsKnown(platform))\n .map((platform) => assertPlatformBundler(platform))\n );\n}\n\nexport async function resolveOptionsAsync(projectRoot: string, args: any): Promise<Options> {\n const { exp } = getConfig(projectRoot, { skipPlugins: true, skipSDKVersionRequirement: true });\n const platformBundlers = getPlatformBundlers(projectRoot, exp);\n\n return {\n platforms: resolvePlatformOption(exp, platformBundlers, args['--platform']),\n outputDir: args['--output-dir'] ?? 'dist',\n minify: !args['--no-minify'],\n bytecode: !args['--no-bytecode'],\n clear: !!args['--clear'],\n dev: !!args['--dev'],\n maxWorkers: args['--max-workers'],\n dumpAssetmap: !!args['--dump-assetmap'],\n sourceMaps: !!args['--source-maps'],\n };\n}\n"],"names":["resolvePlatformOption","resolveOptionsAsync","exp","platformBundlers","platform","platformsAvailable","Object","fromEntries","entries","filter","bundler","platforms","includes","keys","length","CommandError","assertPlatformBundler","join","knownPlatforms","assertPlatformIsKnown","map","flat","index","list","indexOf","projectRoot","args","getConfig","skipPlugins","skipSDKVersionRequirement","getPlatformBundlers","outputDir","minify","bytecode","clear","dev","maxWorkers","dumpAssetmap","sourceMaps"],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
exports.persistMetroFilesAsync = persistMetroFilesAsync;
|
|
6
6
|
exports.getFilesFromSerialAssets = getFilesFromSerialAssets;
|
|
7
|
-
exports.modifyBundlesWithSourceMaps = modifyBundlesWithSourceMaps;
|
|
8
7
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
9
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
10
9
|
var _path = _interopRequireDefault(require("path"));
|
|
@@ -164,28 +163,5 @@ function getFilesFromSerialAssets(resources, { includeSourceMaps , files =new Ma
|
|
|
164
163
|
});
|
|
165
164
|
return files;
|
|
166
165
|
}
|
|
167
|
-
function modifyBundlesWithSourceMaps(filename, source, includeSourceMaps) {
|
|
168
|
-
if (filename.endsWith(".js")) {
|
|
169
|
-
// If the bundle ends with source map URLs then update them to point to the correct location.
|
|
170
|
-
// TODO: baseUrl support
|
|
171
|
-
const normalizedFilename = "/" + filename.replace(/^\/+/, "");
|
|
172
|
-
// Ref: https://developer.chrome.com/blog/sourcemaps/#sourceurl-and-displayname-in-action-eval-and-anonymous-functions
|
|
173
|
-
//# sourceMappingURL=//localhost:8085/index.map?platform=web&dev=false&hot=false&lazy=true&minify=true&resolver.environment=client&transform.environment=client&serializer.output=static
|
|
174
|
-
//# sourceURL=http://localhost:8085/index.bundle//&platform=web&dev=false&hot=false&lazy=true&minify=true&resolver.environment=client&transform.environment=client&serializer.output=static
|
|
175
|
-
return source.replace(/^\/\/# (sourceMappingURL|sourceURL)=.*$/gm, (...props)=>{
|
|
176
|
-
if (includeSourceMaps) {
|
|
177
|
-
// TODO: Drop sourceURL when the name is the same as the file output location.
|
|
178
|
-
if (props[1] === "sourceURL") {
|
|
179
|
-
return `//# ${props[1]}=` + normalizedFilename;
|
|
180
|
-
} else if (props[1] === "sourceMappingURL") {
|
|
181
|
-
const mapName = normalizedFilename + ".map";
|
|
182
|
-
return `//# ${props[1]}=` + mapName;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
return "";
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
return source;
|
|
189
|
-
}
|
|
190
166
|
|
|
191
167
|
//# sourceMappingURL=saveAssets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/saveAssets.ts"],"sourcesContent":["/**\n * Copyright © 2023 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 { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport prettyBytes from 'pretty-bytes';\n\nimport { BundleAssetWithFileHashes } from './fork-bundleAsync';\nimport { Log } from '../log';\n\nexport type ManifestAsset = { fileHashes: string[]; files: string[]; hash: string };\n\nexport type Asset = ManifestAsset | BundleAssetWithFileHashes;\n\nexport type ExportAssetDescriptor = {\n contents: string | Buffer;\n originFilename?: string;\n /** An identifier for grouping together variations of the same asset. */\n assetId?: string;\n /** Expo Router route path for formatting the HTML output. */\n routeId?: string;\n /** A key for grouping together output files by server- or client-side. */\n targetDomain?: 'server' | 'client';\n};\n\nexport type ExportAssetMap = Map<string, ExportAssetDescriptor>;\n\nexport async function persistMetroFilesAsync(files: ExportAssetMap, outputDir: string) {\n fs.mkdirSync(path.join(outputDir), { recursive: true });\n if (!files.size) {\n return;\n }\n\n // Test fixtures:\n // Log.log(\n // JSON.stringify(\n // Object.fromEntries([...files.entries()].map(([k, v]) => [k, { ...v, contents: '' }]))\n // )\n // );\n\n const assetEntries: [string, ExportAssetDescriptor][] = [];\n const routeEntries: [string, ExportAssetDescriptor][] = [];\n const remainingEntries: [string, ExportAssetDescriptor][] = [];\n\n let hasServerOutput = false;\n for (const asset of files.entries()) {\n hasServerOutput = hasServerOutput || asset[1].targetDomain === 'server';\n if (asset[1].assetId) assetEntries.push(asset);\n else if (asset[1].routeId != null) routeEntries.push(asset);\n else remainingEntries.push(asset);\n }\n\n const groups = groupBy(assetEntries, ([, { assetId }]) => assetId!);\n\n const contentSize = (contents: string | Buffer) => {\n const length =\n typeof contents === 'string' ? Buffer.byteLength(contents, 'utf8') : contents.length;\n return length;\n };\n\n const sizeStr = (contents: string | Buffer) => {\n const length = contentSize(contents);\n const size = chalk.gray`(${prettyBytes(length)})`;\n return size;\n };\n\n if (routeEntries.length) {\n const plural = routeEntries.length === 1 ? '' : 's';\n\n Log.log('');\n Log.log(chalk.bold`Exporting ${routeEntries.length} static route${plural}:`);\n\n for (const [, assets] of routeEntries.sort((a, b) => a[0].length - b[0].length)) {\n const id = assets.routeId!;\n Log.log('/' + (id === '' ? chalk.gray(' (index)') : id), sizeStr(assets.contents));\n }\n }\n\n const assetGroups = [...groups.entries()].sort((a, b) => a[0].localeCompare(b[0])) as [\n string,\n [string, ExportAssetDescriptor][],\n ][];\n\n if (assetGroups.length) {\n const totalAssets = assetGroups.reduce((sum, [, assets]) => sum + assets.length, 0);\n const plural = totalAssets === 1 ? '' : 's';\n\n Log.log('');\n Log.log(chalk.bold`Exporting ${totalAssets} asset${plural}:`);\n\n for (const [assetId, assets] of assetGroups) {\n const averageContentSize =\n assets.reduce((sum, [, { contents }]) => sum + contentSize(contents), 0) / assets.length;\n Log.log(\n assetId,\n chalk.gray(\n `(${[\n assets.length > 1 ? `${assets.length} variations` : '',\n `${prettyBytes(averageContentSize)}`,\n ]\n .filter(Boolean)\n .join(' | ')})`\n )\n );\n }\n }\n\n const bundles: Map<string, [string, ExportAssetDescriptor][]> = new Map();\n const other: [string, ExportAssetDescriptor][] = [];\n\n remainingEntries.forEach(([filepath, asset]) => {\n if (!filepath.match(/_expo\\/static\\//)) {\n other.push([filepath, asset]);\n } else {\n const platform = filepath.match(/_expo\\/static\\/js\\/([^/]+)\\//)?.[1] ?? 'web';\n if (!bundles.has(platform)) bundles.set(platform, []);\n\n bundles.get(platform)!.push([filepath, asset]);\n }\n });\n\n [...bundles.entries()].forEach(([platform, assets]) => {\n Log.log('');\n const plural = assets.length === 1 ? '' : 's';\n Log.log(chalk.bold`Exporting ${assets.length} bundle${plural} for ${platform}:`);\n\n const allAssets = assets.sort((a, b) => a[0].localeCompare(b[0]));\n while (allAssets.length) {\n const [filePath, asset] = allAssets.shift()!;\n Log.log(filePath, sizeStr(asset.contents));\n if (filePath.match(/\\.(js|hbc)$/)) {\n // Get source map\n const sourceMapIndex = allAssets.findIndex(([fp]) => fp === filePath + '.map');\n if (sourceMapIndex !== -1) {\n const [sourceMapFilePath, sourceMapAsset] = allAssets.splice(sourceMapIndex, 1)[0];\n Log.log(chalk.gray(sourceMapFilePath), sizeStr(sourceMapAsset.contents));\n }\n }\n }\n });\n\n if (other.length) {\n Log.log('');\n const plural = other.length === 1 ? '' : 's';\n Log.log(chalk.bold`Exporting ${other.length} file${plural}:`);\n\n for (const [filePath, asset] of other.sort((a, b) => a[0].localeCompare(b[0]))) {\n Log.log(filePath, sizeStr(asset.contents));\n }\n }\n\n // Decouple logging from writing for better performance.\n\n await Promise.all(\n [...files.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(async ([file, { contents, targetDomain }]) => {\n // NOTE: Only use `targetDomain` if we have at least one server asset\n const domain = (hasServerOutput && targetDomain) || '';\n const outputPath = path.join(outputDir, domain, file);\n await fs.promises.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.promises.writeFile(outputPath, contents);\n })\n );\n\n Log.log('');\n}\n\nfunction groupBy<T>(array: T[], key: (item: T) => string): Map<string, T[]> {\n const map = new Map<string, T[]>();\n array.forEach((item) => {\n const group = key(item);\n const list = map.get(group) ?? [];\n list.push(item);\n map.set(group, list);\n });\n return map;\n}\n\n// TODO: Move source map modification to the serializer\nexport function getFilesFromSerialAssets(\n resources: SerialAsset[],\n {\n includeSourceMaps,\n files = new Map(),\n platform,\n }: {\n includeSourceMaps: boolean;\n files?: ExportAssetMap;\n platform?: string;\n }\n) {\n resources.forEach((resource) => {\n files.set(resource.filename, {\n contents: resource.source,\n originFilename: resource.originFilename,\n targetDomain: platform === 'web' ? 'client' : undefined,\n });\n });\n\n return files;\n}\n\nexport function modifyBundlesWithSourceMaps(\n filename: string,\n source: string,\n includeSourceMaps: boolean\n): string {\n if (filename.endsWith('.js')) {\n // If the bundle ends with source map URLs then update them to point to the correct location.\n\n // TODO: baseUrl support\n const normalizedFilename = '/' + filename.replace(/^\\/+/, '');\n // Ref: https://developer.chrome.com/blog/sourcemaps/#sourceurl-and-displayname-in-action-eval-and-anonymous-functions\n //# sourceMappingURL=//localhost:8085/index.map?platform=web&dev=false&hot=false&lazy=true&minify=true&resolver.environment=client&transform.environment=client&serializer.output=static\n //# sourceURL=http://localhost:8085/index.bundle//&platform=web&dev=false&hot=false&lazy=true&minify=true&resolver.environment=client&transform.environment=client&serializer.output=static\n return source.replace(/^\\/\\/# (sourceMappingURL|sourceURL)=.*$/gm, (...props) => {\n if (includeSourceMaps) {\n // TODO: Drop sourceURL when the name is the same as the file output location.\n if (props[1] === 'sourceURL') {\n return `//# ${props[1]}=` + normalizedFilename;\n } else if (props[1] === 'sourceMappingURL') {\n const mapName = normalizedFilename + '.map';\n return `//# ${props[1]}=` + mapName;\n }\n }\n return '';\n });\n }\n return source;\n}\n"],"names":["persistMetroFilesAsync","getFilesFromSerialAssets","modifyBundlesWithSourceMaps","files","outputDir","fs","mkdirSync","path","join","recursive","size","assetEntries","routeEntries","remainingEntries","hasServerOutput","asset","entries","targetDomain","assetId","push","routeId","groups","groupBy","contentSize","contents","length","Buffer","byteLength","sizeStr","chalk","gray","prettyBytes","plural","Log","log","bold","assets","sort","a","b","id","assetGroups","localeCompare","totalAssets","reduce","sum","averageContentSize","filter","Boolean","bundles","Map","other","forEach","filepath","match","platform","has","set","get","allAssets","filePath","shift","sourceMapIndex","findIndex","fp","sourceMapFilePath","sourceMapAsset","splice","Promise","all","map","file","domain","outputPath","promises","mkdir","dirname","writeFile","array","key","item","group","list","resources","includeSourceMaps","resource","filename","source","originFilename","undefined","endsWith","normalizedFilename","replace","props","mapName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/saveAssets.ts"],"sourcesContent":["/**\n * Copyright © 2023 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 { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport prettyBytes from 'pretty-bytes';\n\nimport { BundleAssetWithFileHashes } from './fork-bundleAsync';\nimport { Log } from '../log';\n\nexport type ManifestAsset = { fileHashes: string[]; files: string[]; hash: string };\n\nexport type Asset = ManifestAsset | BundleAssetWithFileHashes;\n\nexport type ExportAssetDescriptor = {\n contents: string | Buffer;\n originFilename?: string;\n /** An identifier for grouping together variations of the same asset. */\n assetId?: string;\n /** Expo Router route path for formatting the HTML output. */\n routeId?: string;\n /** A key for grouping together output files by server- or client-side. */\n targetDomain?: 'server' | 'client';\n};\n\nexport type ExportAssetMap = Map<string, ExportAssetDescriptor>;\n\nexport async function persistMetroFilesAsync(files: ExportAssetMap, outputDir: string) {\n fs.mkdirSync(path.join(outputDir), { recursive: true });\n if (!files.size) {\n return;\n }\n\n // Test fixtures:\n // Log.log(\n // JSON.stringify(\n // Object.fromEntries([...files.entries()].map(([k, v]) => [k, { ...v, contents: '' }]))\n // )\n // );\n\n const assetEntries: [string, ExportAssetDescriptor][] = [];\n const routeEntries: [string, ExportAssetDescriptor][] = [];\n const remainingEntries: [string, ExportAssetDescriptor][] = [];\n\n let hasServerOutput = false;\n for (const asset of files.entries()) {\n hasServerOutput = hasServerOutput || asset[1].targetDomain === 'server';\n if (asset[1].assetId) assetEntries.push(asset);\n else if (asset[1].routeId != null) routeEntries.push(asset);\n else remainingEntries.push(asset);\n }\n\n const groups = groupBy(assetEntries, ([, { assetId }]) => assetId!);\n\n const contentSize = (contents: string | Buffer) => {\n const length =\n typeof contents === 'string' ? Buffer.byteLength(contents, 'utf8') : contents.length;\n return length;\n };\n\n const sizeStr = (contents: string | Buffer) => {\n const length = contentSize(contents);\n const size = chalk.gray`(${prettyBytes(length)})`;\n return size;\n };\n\n if (routeEntries.length) {\n const plural = routeEntries.length === 1 ? '' : 's';\n\n Log.log('');\n Log.log(chalk.bold`Exporting ${routeEntries.length} static route${plural}:`);\n\n for (const [, assets] of routeEntries.sort((a, b) => a[0].length - b[0].length)) {\n const id = assets.routeId!;\n Log.log('/' + (id === '' ? chalk.gray(' (index)') : id), sizeStr(assets.contents));\n }\n }\n\n const assetGroups = [...groups.entries()].sort((a, b) => a[0].localeCompare(b[0])) as [\n string,\n [string, ExportAssetDescriptor][],\n ][];\n\n if (assetGroups.length) {\n const totalAssets = assetGroups.reduce((sum, [, assets]) => sum + assets.length, 0);\n const plural = totalAssets === 1 ? '' : 's';\n\n Log.log('');\n Log.log(chalk.bold`Exporting ${totalAssets} asset${plural}:`);\n\n for (const [assetId, assets] of assetGroups) {\n const averageContentSize =\n assets.reduce((sum, [, { contents }]) => sum + contentSize(contents), 0) / assets.length;\n Log.log(\n assetId,\n chalk.gray(\n `(${[\n assets.length > 1 ? `${assets.length} variations` : '',\n `${prettyBytes(averageContentSize)}`,\n ]\n .filter(Boolean)\n .join(' | ')})`\n )\n );\n }\n }\n\n const bundles: Map<string, [string, ExportAssetDescriptor][]> = new Map();\n const other: [string, ExportAssetDescriptor][] = [];\n\n remainingEntries.forEach(([filepath, asset]) => {\n if (!filepath.match(/_expo\\/static\\//)) {\n other.push([filepath, asset]);\n } else {\n const platform = filepath.match(/_expo\\/static\\/js\\/([^/]+)\\//)?.[1] ?? 'web';\n if (!bundles.has(platform)) bundles.set(platform, []);\n\n bundles.get(platform)!.push([filepath, asset]);\n }\n });\n\n [...bundles.entries()].forEach(([platform, assets]) => {\n Log.log('');\n const plural = assets.length === 1 ? '' : 's';\n Log.log(chalk.bold`Exporting ${assets.length} bundle${plural} for ${platform}:`);\n\n const allAssets = assets.sort((a, b) => a[0].localeCompare(b[0]));\n while (allAssets.length) {\n const [filePath, asset] = allAssets.shift()!;\n Log.log(filePath, sizeStr(asset.contents));\n if (filePath.match(/\\.(js|hbc)$/)) {\n // Get source map\n const sourceMapIndex = allAssets.findIndex(([fp]) => fp === filePath + '.map');\n if (sourceMapIndex !== -1) {\n const [sourceMapFilePath, sourceMapAsset] = allAssets.splice(sourceMapIndex, 1)[0];\n Log.log(chalk.gray(sourceMapFilePath), sizeStr(sourceMapAsset.contents));\n }\n }\n }\n });\n\n if (other.length) {\n Log.log('');\n const plural = other.length === 1 ? '' : 's';\n Log.log(chalk.bold`Exporting ${other.length} file${plural}:`);\n\n for (const [filePath, asset] of other.sort((a, b) => a[0].localeCompare(b[0]))) {\n Log.log(filePath, sizeStr(asset.contents));\n }\n }\n\n // Decouple logging from writing for better performance.\n\n await Promise.all(\n [...files.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(async ([file, { contents, targetDomain }]) => {\n // NOTE: Only use `targetDomain` if we have at least one server asset\n const domain = (hasServerOutput && targetDomain) || '';\n const outputPath = path.join(outputDir, domain, file);\n await fs.promises.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.promises.writeFile(outputPath, contents);\n })\n );\n\n Log.log('');\n}\n\nfunction groupBy<T>(array: T[], key: (item: T) => string): Map<string, T[]> {\n const map = new Map<string, T[]>();\n array.forEach((item) => {\n const group = key(item);\n const list = map.get(group) ?? [];\n list.push(item);\n map.set(group, list);\n });\n return map;\n}\n\n// TODO: Move source map modification to the serializer\nexport function getFilesFromSerialAssets(\n resources: SerialAsset[],\n {\n includeSourceMaps,\n files = new Map(),\n platform,\n }: {\n includeSourceMaps: boolean;\n files?: ExportAssetMap;\n platform?: string;\n }\n) {\n resources.forEach((resource) => {\n files.set(resource.filename, {\n contents: resource.source,\n originFilename: resource.originFilename,\n targetDomain: platform === 'web' ? 'client' : undefined,\n });\n });\n\n return files;\n}\n"],"names":["persistMetroFilesAsync","getFilesFromSerialAssets","files","outputDir","fs","mkdirSync","path","join","recursive","size","assetEntries","routeEntries","remainingEntries","hasServerOutput","asset","entries","targetDomain","assetId","push","routeId","groups","groupBy","contentSize","contents","length","Buffer","byteLength","sizeStr","chalk","gray","prettyBytes","plural","Log","log","bold","assets","sort","a","b","id","assetGroups","localeCompare","totalAssets","reduce","sum","averageContentSize","filter","Boolean","bundles","Map","other","forEach","filepath","match","platform","has","set","get","allAssets","filePath","shift","sourceMapIndex","findIndex","fp","sourceMapFilePath","sourceMapAsset","splice","Promise","all","map","file","domain","outputPath","promises","mkdir","dirname","writeFile","array","key","item","group","list","resources","includeSourceMaps","resource","filename","source","originFilename","undefined"],"mappings":"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"}
|
|
@@ -119,7 +119,8 @@ async function createMetroEndpointAsync(projectRoot, devServerUrl, absoluteFileP
|
|
|
119
119
|
isExporting: true,
|
|
120
120
|
asyncRoutes: false,
|
|
121
121
|
routerRoot,
|
|
122
|
-
inlineSourceMap: false
|
|
122
|
+
inlineSourceMap: false,
|
|
123
|
+
bytecode: false
|
|
123
124
|
});
|
|
124
125
|
let url;
|
|
125
126
|
if (devServerUrl) {
|