@expo/cli 0.18.19 → 0.18.21
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 +1 -1
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +110 -41
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +0 -1
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/exportApp.js +133 -92
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportHermes.js +15 -0
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +5 -49
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +5 -4
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/run/startBundler.js +1 -8
- package/build/src/run/startBundler.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +10 -3
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +19 -4
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevelopmentSession.js +21 -11
- package/build/src/start/server/DevelopmentSession.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +9 -123
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +469 -177
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js +0 -9
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +44 -37
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +49 -2
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/metroPrivateServer.js +26 -0
- package/build/src/start/server/metro/metroPrivateServer.js.map +1 -0
- package/build/src/start/server/metro/runServer-fork.js +44 -21
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +9 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +7 -4
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +16 -4
- package/build/src/start/server/middleware/metroOptions.js.map +1 -1
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/utils/telemetry/getContext.js +1 -1
- package/package.json +3 -3
- package/build/src/export/fork-bundleAsync.js +0 -284
- package/build/src/export/fork-bundleAsync.js.map +0 -1
|
@@ -13,6 +13,13 @@ function _config() {
|
|
|
13
13
|
};
|
|
14
14
|
return data;
|
|
15
15
|
}
|
|
16
|
+
function _assert() {
|
|
17
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("assert"));
|
|
18
|
+
_assert = function() {
|
|
19
|
+
return data;
|
|
20
|
+
};
|
|
21
|
+
return data;
|
|
22
|
+
}
|
|
16
23
|
function _chalk() {
|
|
17
24
|
const data = /*#__PURE__*/ _interopRequireDefault(require("chalk"));
|
|
18
25
|
_chalk = function() {
|
|
@@ -29,17 +36,20 @@ function _path() {
|
|
|
29
36
|
}
|
|
30
37
|
const _createMetadataJson = require("./createMetadataJson");
|
|
31
38
|
const _exportAssets = require("./exportAssets");
|
|
39
|
+
const _exportHermes = require("./exportHermes");
|
|
32
40
|
const _exportStaticAsync = require("./exportStaticAsync");
|
|
33
41
|
const _favicon = require("./favicon");
|
|
34
|
-
const _forkBundleAsync = require("./fork-bundleAsync");
|
|
35
42
|
const _getPublicExpoManifest = require("./getPublicExpoManifest");
|
|
36
43
|
const _publicFolder = require("./publicFolder");
|
|
37
44
|
const _saveAssets = require("./saveAssets");
|
|
38
45
|
const _writeContents = require("./writeContents");
|
|
39
46
|
const _log = /*#__PURE__*/ _interopRequireWildcard(require("../log"));
|
|
40
47
|
const _webSupportProjectPrerequisite = require("../start/doctor/web/WebSupportProjectPrerequisite");
|
|
48
|
+
const _devServerManager = require("../start/server/DevServerManager");
|
|
49
|
+
const _metroBundlerDevServer = require("../start/server/metro/MetroBundlerDevServer");
|
|
41
50
|
const _router = require("../start/server/metro/router");
|
|
42
51
|
const _serializeHtml = require("../start/server/metro/serializeHtml");
|
|
52
|
+
const _manifestMiddleware = require("../start/server/middleware/ManifestMiddleware");
|
|
43
53
|
const _metroOptions = require("../start/server/middleware/metroOptions");
|
|
44
54
|
const _webTemplate = require("../start/server/webTemplate");
|
|
45
55
|
const _env = require("../utils/env");
|
|
@@ -121,81 +131,135 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
|
|
|
121
131
|
const mode = dev ? "development" : "production";
|
|
122
132
|
const publicPath = _path().default.resolve(projectRoot, _env.env.EXPO_PUBLIC_FOLDER);
|
|
123
133
|
const outputPath = _path().default.resolve(projectRoot, outputDir);
|
|
124
|
-
// NOTE(kitten): The public folder is currently always copied, regardless of targetDomain
|
|
125
|
-
// split. Hence, there's another separate `copyPublicFolderAsync` call below for `web`
|
|
126
|
-
await (0, _publicFolder.copyPublicFolderAsync)(publicPath, outputPath);
|
|
127
|
-
// Run metro bundler and create the JS bundles/source maps.
|
|
128
|
-
const bundles = await (0, _forkBundleAsync.createBundlesAsync)(projectRoot, projectConfig, {
|
|
129
|
-
clear: !!clear,
|
|
130
|
-
minify,
|
|
131
|
-
bytecode,
|
|
132
|
-
sourcemaps: sourceMaps,
|
|
133
|
-
platforms: useServerRendering ? platforms.filter((platform)=>platform !== "web") : platforms,
|
|
134
|
-
dev,
|
|
135
|
-
maxWorkers
|
|
136
|
-
});
|
|
137
134
|
// Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).
|
|
138
135
|
const files = new Map();
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
136
|
+
const devServerManager = await _devServerManager.DevServerManager.startMetroAsync(projectRoot, {
|
|
137
|
+
minify,
|
|
138
|
+
mode,
|
|
139
|
+
port: 8081,
|
|
140
|
+
isExporting: true,
|
|
141
|
+
location: {},
|
|
142
|
+
resetDevServer: clear,
|
|
143
|
+
maxWorkers
|
|
144
144
|
});
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
145
|
+
const devServer = devServerManager.getDefaultDevServer();
|
|
146
|
+
(0, _assert().default)(devServer instanceof _metroBundlerDevServer.MetroBundlerDevServer);
|
|
147
|
+
const bundles = {};
|
|
148
|
+
const spaPlatforms = useServerRendering ? platforms.filter((platform)=>platform !== "web") : platforms;
|
|
149
|
+
try {
|
|
150
|
+
// NOTE(kitten): The public folder is currently always copied, regardless of targetDomain
|
|
151
|
+
// split. Hence, there's another separate `copyPublicFolderAsync` call below for `web`
|
|
152
|
+
await (0, _publicFolder.copyPublicFolderAsync)(publicPath, outputPath);
|
|
153
|
+
// Can be empty during web-only SSG.
|
|
154
|
+
if (spaPlatforms.length) {
|
|
155
|
+
await Promise.all(spaPlatforms.map(async (platform)=>{
|
|
156
|
+
var ref;
|
|
157
|
+
// Assert early so the user doesn't have to wait until bundling is complete to find out that
|
|
158
|
+
// Hermes won't be available.
|
|
159
|
+
const isHermes = (0, _exportHermes.isEnableHermesManaged)(exp, platform);
|
|
160
|
+
if (isHermes) {
|
|
161
|
+
await (0, _exportHermes.assertEngineMismatchAsync)(projectRoot, exp, platform);
|
|
162
|
+
}
|
|
163
|
+
// Run metro bundler and create the JS bundles/source maps.
|
|
164
|
+
const bundle = await devServer.legacySinglePageExportBundleAsync({
|
|
165
|
+
platform,
|
|
166
|
+
splitChunks: !_env.env.EXPO_NO_BUNDLE_SPLITTING && platform === "web",
|
|
167
|
+
mainModuleName: (0, _manifestMiddleware.getEntryWithServerRoot)(projectRoot, {
|
|
168
|
+
platform,
|
|
169
|
+
pkg: projectConfig.pkg
|
|
170
|
+
}),
|
|
171
|
+
mode: dev ? "development" : "production",
|
|
172
|
+
engine: isHermes ? "hermes" : undefined,
|
|
173
|
+
serializerIncludeMaps: sourceMaps,
|
|
174
|
+
bytecode: bytecode && isHermes,
|
|
175
|
+
reactCompiler: !!((ref = exp.experiments) == null ? void 0 : ref.reactCompiler)
|
|
176
|
+
});
|
|
177
|
+
bundles[platform] = bundle;
|
|
178
|
+
(0, _saveAssets.getFilesFromSerialAssets)(bundle.artifacts, {
|
|
179
|
+
includeSourceMaps: sourceMaps,
|
|
180
|
+
files
|
|
181
|
+
});
|
|
182
|
+
if (platform === "web") {
|
|
183
|
+
// TODO: Unify with exportStaticAsync
|
|
184
|
+
// TODO: Maybe move to the serializer.
|
|
185
|
+
let html = await (0, _serializeHtml.serializeHtmlWithAssets)({
|
|
186
|
+
isExporting: true,
|
|
187
|
+
resources: bundle.artifacts,
|
|
188
|
+
template: await (0, _webTemplate.createTemplateHtmlFromExpoConfigAsync)(projectRoot, {
|
|
189
|
+
scripts: [],
|
|
190
|
+
cssLinks: [],
|
|
191
|
+
exp: projectConfig.exp
|
|
192
|
+
}),
|
|
193
|
+
baseUrl
|
|
194
|
+
});
|
|
195
|
+
// Add the favicon assets to the HTML.
|
|
196
|
+
const modifyHtml = await (0, _favicon.getVirtualFaviconAssetsAsync)(projectRoot, {
|
|
197
|
+
outputDir,
|
|
198
|
+
baseUrl,
|
|
199
|
+
files,
|
|
200
|
+
exp: projectConfig.exp
|
|
201
|
+
});
|
|
202
|
+
if (modifyHtml) {
|
|
203
|
+
html = modifyHtml(html);
|
|
204
|
+
}
|
|
205
|
+
// Generate SPA-styled HTML file.
|
|
206
|
+
// If web exists, then write the template HTML file.
|
|
207
|
+
files.set("index.html", {
|
|
208
|
+
contents: html,
|
|
209
|
+
targetDomain: "client"
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}));
|
|
213
|
+
// TODO: Use same asset system across platforms again.
|
|
214
|
+
const { assets , embeddedHashSet } = await (0, _exportAssets.exportAssetsAsync)(projectRoot, {
|
|
215
|
+
files,
|
|
216
|
+
exp,
|
|
217
|
+
outputDir: outputPath,
|
|
218
|
+
bundles,
|
|
219
|
+
baseUrl
|
|
162
220
|
});
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
221
|
+
if (dumpAssetmap) {
|
|
222
|
+
_log.log("Creating asset map");
|
|
223
|
+
files.set("assetmap.json", {
|
|
224
|
+
contents: JSON.stringify((0, _writeContents.createAssetMap)({
|
|
225
|
+
assets
|
|
226
|
+
}))
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
const fileNames = Object.fromEntries(Object.entries(bundles).map(([platform, bundle])=>[
|
|
230
|
+
platform,
|
|
231
|
+
bundle.artifacts.filter((asset)=>asset.type === "js").map((asset)=>asset.filename),
|
|
232
|
+
]));
|
|
233
|
+
// build source maps
|
|
234
|
+
if (sourceMaps) {
|
|
235
|
+
_log.log("Preparing additional debugging files");
|
|
236
|
+
// If we output source maps, then add a debug HTML file which the user can open in
|
|
237
|
+
// the web browser to inspect the output like web.
|
|
238
|
+
files.set("debug.html", {
|
|
239
|
+
contents: (0, _writeContents.createSourceMapDebugHtml)({
|
|
240
|
+
fileNames: Object.values(fileNames).flat()
|
|
241
|
+
})
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
// Generate a `metadata.json` for EAS Update.
|
|
245
|
+
const contents = (0, _createMetadataJson.createMetadataJson)({
|
|
246
|
+
bundles,
|
|
247
|
+
fileNames,
|
|
248
|
+
embeddedHashSet
|
|
249
|
+
});
|
|
250
|
+
files.set("metadata.json", {
|
|
251
|
+
contents: JSON.stringify(contents)
|
|
177
252
|
});
|
|
178
253
|
}
|
|
179
|
-
//
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
fileNames,
|
|
183
|
-
embeddedHashSet
|
|
184
|
-
});
|
|
185
|
-
files.set("metadata.json", {
|
|
186
|
-
contents: JSON.stringify(contents)
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
// Additional web-only steps...
|
|
190
|
-
if (platforms.includes("web")) {
|
|
191
|
-
if (useServerRendering) {
|
|
192
|
-
var ref2;
|
|
254
|
+
// Additional web-only steps...
|
|
255
|
+
if (platforms.includes("web") && useServerRendering) {
|
|
256
|
+
var ref2, ref3;
|
|
193
257
|
const exportServer = ((ref2 = exp.web) == null ? void 0 : ref2.output) === "server";
|
|
194
258
|
if (exportServer) {
|
|
195
259
|
// TODO: Remove when this is abstracted into the files map
|
|
196
260
|
await (0, _publicFolder.copyPublicFolderAsync)(publicPath, _path().default.resolve(outputPath, "client"));
|
|
197
261
|
}
|
|
198
|
-
await (0, _exportStaticAsync.
|
|
262
|
+
await (0, _exportStaticAsync.exportFromServerAsync)(projectRoot, devServer, {
|
|
199
263
|
mode,
|
|
200
264
|
files,
|
|
201
265
|
clear: !!clear,
|
|
@@ -204,38 +268,15 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
|
|
|
204
268
|
baseUrl,
|
|
205
269
|
includeSourceMaps: sourceMaps,
|
|
206
270
|
routerRoot: (0, _router.getRouterDirectoryModuleIdWithManifest)(projectRoot, exp),
|
|
271
|
+
reactCompiler: !!((ref3 = exp.experiments) == null ? void 0 : ref3.reactCompiler),
|
|
207
272
|
exportServer,
|
|
208
273
|
maxWorkers,
|
|
209
|
-
isExporting: true
|
|
210
|
-
});
|
|
211
|
-
} else {
|
|
212
|
-
// TODO: Unify with exportStaticAsync
|
|
213
|
-
// TODO: Maybe move to the serializer.
|
|
214
|
-
let html = await (0, _serializeHtml.serializeHtmlWithAssets)({
|
|
215
274
|
isExporting: true,
|
|
216
|
-
|
|
217
|
-
template: await (0, _webTemplate.createTemplateHtmlFromExpoConfigAsync)(projectRoot, {
|
|
218
|
-
scripts: [],
|
|
219
|
-
cssLinks: []
|
|
220
|
-
}),
|
|
221
|
-
baseUrl
|
|
222
|
-
});
|
|
223
|
-
// Add the favicon assets to the HTML.
|
|
224
|
-
const modifyHtml = await (0, _favicon.getVirtualFaviconAssetsAsync)(projectRoot, {
|
|
225
|
-
outputDir,
|
|
226
|
-
baseUrl,
|
|
227
|
-
files
|
|
228
|
-
});
|
|
229
|
-
if (modifyHtml) {
|
|
230
|
-
html = modifyHtml(html);
|
|
231
|
-
}
|
|
232
|
-
// Generate SPA-styled HTML file.
|
|
233
|
-
// If web exists, then write the template HTML file.
|
|
234
|
-
files.set("index.html", {
|
|
235
|
-
contents: html,
|
|
236
|
-
targetDomain: "client"
|
|
275
|
+
exp: projectConfig.exp
|
|
237
276
|
});
|
|
238
277
|
}
|
|
278
|
+
} finally{
|
|
279
|
+
await devServerManager.stopAsync();
|
|
239
280
|
}
|
|
240
281
|
// Write all files at the end for unified logging.
|
|
241
282
|
await (0, _saveAssets.persistMetroFilesAsync)(files, outputPath);
|
|
@@ -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 { getBaseUrlFromExpoConfig } 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 mode = dev ? 'development' : 'production';\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 mode,\n files,\n clear: !!clear,\n outputDir: outputPath,\n minify,\n baseUrl,\n includeSourceMaps: sourceMaps,\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n exportServer,\n maxWorkers,\n isExporting: true,\n });\n } else {\n // TODO: Unify with exportStaticAsync\n // TODO: Maybe move to the serializer.\n let html = await serializeHtmlWithAssets({\n isExporting: true,\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","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","Log","warn","log","chalk","gray","startsWith","yellow","mode","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","routerRoot","getRouterDirectoryModuleIdWithManifest","isExporting","html","serializeHtmlWithAssets","resources","template","createTemplateHtmlFromExpoConfigAsync","scripts","cssLinks","modifyHtml","getVirtualFaviconAssetsAsync","targetDomain","persistMetroFilesAsync"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/exportApp.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport type { Platform } from '@expo/config';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { createMetadataJson } from './createMetadataJson';\nimport { exportAssetsAsync } from './exportAssets';\nimport { assertEngineMismatchAsync, isEnableHermesManaged } from './exportHermes';\nimport { exportFromServerAsync } from './exportStaticAsync';\nimport { getVirtualFaviconAssetsAsync } from './favicon';\nimport { getPublicExpoManifestAsync } from './getPublicExpoManifest';\nimport { copyPublicFolderAsync } from './publicFolder';\nimport { Options } from './resolveOptions';\nimport {\n ExportAssetMap,\n BundleOutput,\n getFilesFromSerialAssets,\n persistMetroFilesAsync,\n} from './saveAssets';\nimport { createAssetMap, createSourceMapDebugHtml } from './writeContents';\nimport * as Log from '../log';\nimport { WebSupportProjectPrerequisite } from '../start/doctor/web/WebSupportProjectPrerequisite';\nimport { DevServerManager } from '../start/server/DevServerManager';\nimport { MetroBundlerDevServer } from '../start/server/metro/MetroBundlerDevServer';\nimport { getRouterDirectoryModuleIdWithManifest } from '../start/server/metro/router';\nimport { serializeHtmlWithAssets } from '../start/server/metro/serializeHtml';\nimport { getEntryWithServerRoot } from '../start/server/middleware/ManifestMiddleware';\nimport { getBaseUrlFromExpoConfig } 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 mode = dev ? 'development' : 'production';\n const publicPath = path.resolve(projectRoot, env.EXPO_PUBLIC_FOLDER);\n const outputPath = path.resolve(projectRoot, outputDir);\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 const devServerManager = await DevServerManager.startMetroAsync(projectRoot, {\n minify,\n mode,\n port: 8081,\n isExporting: true,\n location: {},\n resetDevServer: clear,\n maxWorkers,\n });\n\n const devServer = devServerManager.getDefaultDevServer();\n assert(devServer instanceof MetroBundlerDevServer);\n\n const bundles: Partial<Record<Platform, BundleOutput>> = {};\n\n const spaPlatforms = useServerRendering\n ? platforms.filter((platform) => platform !== 'web')\n : platforms;\n\n try {\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 // Can be empty during web-only SSG.\n if (spaPlatforms.length) {\n await Promise.all(\n spaPlatforms.map(async (platform) => {\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 const isHermes = isEnableHermesManaged(exp, platform);\n if (isHermes) {\n await assertEngineMismatchAsync(projectRoot, exp, platform);\n }\n\n // Run metro bundler and create the JS bundles/source maps.\n const bundle = await devServer.legacySinglePageExportBundleAsync({\n platform,\n splitChunks: !env.EXPO_NO_BUNDLE_SPLITTING && platform === 'web',\n mainModuleName: getEntryWithServerRoot(projectRoot, {\n platform,\n pkg: projectConfig.pkg,\n }),\n mode: dev ? 'development' : 'production',\n engine: isHermes ? 'hermes' : undefined,\n serializerIncludeMaps: sourceMaps,\n bytecode: bytecode && isHermes,\n reactCompiler: !!exp.experiments?.reactCompiler,\n });\n\n bundles[platform] = bundle;\n\n getFilesFromSerialAssets(bundle.artifacts, {\n includeSourceMaps: sourceMaps,\n files,\n });\n\n if (platform === 'web') {\n // TODO: Unify with exportStaticAsync\n // TODO: Maybe move to the serializer.\n let html = await serializeHtmlWithAssets({\n isExporting: true,\n resources: bundle.artifacts,\n template: await createTemplateHtmlFromExpoConfigAsync(projectRoot, {\n scripts: [],\n cssLinks: [],\n exp: projectConfig.exp,\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 exp: projectConfig.exp,\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\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') && 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 exportFromServerAsync(projectRoot, devServer, {\n mode,\n files,\n clear: !!clear,\n outputDir: outputPath,\n minify,\n baseUrl,\n includeSourceMaps: sourceMaps,\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n reactCompiler: !!exp.experiments?.reactCompiler,\n exportServer,\n maxWorkers,\n isExporting: true,\n exp: projectConfig.exp,\n });\n }\n } finally {\n await devServerManager.stopAsync();\n }\n\n // Write all files at the end for unified logging.\n await persistMetroFilesAsync(files, outputPath);\n}\n"],"names":["exportAppAsync","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","Log","warn","log","chalk","gray","startsWith","yellow","mode","publicPath","path","resolve","env","EXPO_PUBLIC_FOLDER","outputPath","files","Map","devServerManager","DevServerManager","startMetroAsync","port","isExporting","location","resetDevServer","devServer","getDefaultDevServer","assert","MetroBundlerDevServer","bundles","spaPlatforms","filter","platform","copyPublicFolderAsync","Promise","all","map","isHermes","isEnableHermesManaged","assertEngineMismatchAsync","bundle","legacySinglePageExportBundleAsync","splitChunks","EXPO_NO_BUNDLE_SPLITTING","mainModuleName","getEntryWithServerRoot","pkg","engine","undefined","serializerIncludeMaps","reactCompiler","experiments","getFilesFromSerialAssets","artifacts","includeSourceMaps","html","serializeHtmlWithAssets","resources","template","createTemplateHtmlFromExpoConfigAsync","scripts","cssLinks","modifyHtml","getVirtualFaviconAssetsAsync","set","contents","targetDomain","assets","embeddedHashSet","exportAssetsAsync","JSON","stringify","createAssetMap","fileNames","Object","fromEntries","entries","asset","type","filename","createSourceMapDebugHtml","values","flat","createMetadataJson","exportServer","exportFromServerAsync","routerRoot","getRouterDirectoryModuleIdWithManifest","stopAsync","persistMetroFilesAsync"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/exportAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs';\nimport minimatch from 'minimatch';\nimport path from 'path';\n\nimport { BundleOutput } from './fork-bundleAsync';\nimport { persistMetroAssetsAsync } from './persistMetroAssets';\nimport { Asset, ExportAssetMap } from './saveAssets';\nimport * as Log from '../log';\nimport { resolveGoogleServicesFile } from '../start/server/middleware/resolveAssets';\nimport { uniqBy } from '../utils/array';\n\nconst debug = require('debug')('expo:export:exportAssets') as typeof console.log;\n\nfunction mapAssetHashToAssetString(asset: Asset, hash: string) {\n return 'asset_' + hash + ('type' in asset && asset.type ? '.' + asset.type : '');\n}\n\nexport function assetPatternsToBeBundled(\n exp: ExpoConfig & { extra?: { updates?: { assetPatternsToBeBundled?: string[] } } }\n): string[] | undefined {\n return exp?.extra?.updates?.assetPatternsToBeBundled?.length\n ? exp?.extra?.updates?.assetPatternsToBeBundled\n : undefined;\n}\n\n/**\n * Given an asset and a set of strings representing the assets to be bundled, returns true if\n * the asset is part of the set to be bundled.\n * @param asset Asset object\n * @param bundledAssetsSet Set of strings\n * @returns true if the asset should be bundled\n */\nfunction assetShouldBeIncludedInExport(asset: Asset, bundledAssetsSet: Set<string> | undefined) {\n if (!bundledAssetsSet) {\n return true;\n }\n return (\n asset.fileHashes.filter((hash) => bundledAssetsSet.has(mapAssetHashToAssetString(asset, hash)))\n .length > 0\n );\n}\n\n/**\n * Computes a set of strings representing the assets to be bundled with an export, given an array of assets,\n * and a set of patterns to match\n * @param assets The asset array\n * @param assetPatternsToBeBundled An array of strings with glob patterns to match\n * @param projectRoot The project root\n * @returns A set of asset strings\n */\nfunction setOfAssetsToBeBundled(\n assets: Asset[],\n assetPatternsToBeBundled: string[],\n projectRoot: string\n): Set<string> | undefined {\n // Convert asset patterns to a list of asset strings that match them.\n // Assets strings are formatted as `asset_<hash>.<type>` and represent\n // the name that the file will have in the app bundle. The `asset_` prefix is\n // needed because android doesn't support assets that start with numbers.\n\n const fullPatterns: string[] = assetPatternsToBeBundled.map((p: string) =>\n path.join(projectRoot, p)\n );\n\n logPatterns(fullPatterns);\n\n const allBundledAssets = assets\n .map((asset) => {\n const shouldBundle = shouldBundleAsset(asset, fullPatterns);\n if (shouldBundle) {\n debug(`${shouldBundle ? 'Include' : 'Exclude'} asset ${asset.files?.[0]}`);\n return asset.fileHashes.map((hash) => mapAssetHashToAssetString(asset, hash));\n }\n return [];\n })\n .flat();\n\n // The assets returned by the RN packager has duplicates so make sure we\n // only bundle each once.\n return new Set(allBundledAssets);\n}\n\n/**\n * Resolves the assetBundlePatterns from the manifest and returns the set of assets to bundle.\n *\n * @modifies {exp}\n */\nexport function resolveAssetPatternsToBeBundled<T extends ExpoConfig>(\n projectRoot: string,\n exp: T,\n assets: Asset[]\n): Set<string> | undefined {\n if (!assetPatternsToBeBundled(exp)) {\n return undefined;\n }\n const bundledAssets = setOfAssetsToBeBundled(\n assets,\n assetPatternsToBeBundled(exp) ?? ['**/*'],\n projectRoot\n );\n return bundledAssets;\n}\n\nfunction logPatterns(patterns: string[]) {\n // Only log the patterns in debug mode, if they aren't already defined in the app.json, then all files will be targeted.\n Log.log('\\nProcessing asset bundle patterns:');\n patterns.forEach((p) => Log.log('- ' + p));\n}\n\nfunction shouldBundleAsset(asset: Asset, patterns: string[]) {\n const file = asset.files?.[0];\n return !!(\n '__packager_asset' in asset &&\n asset.__packager_asset &&\n file &&\n patterns.some((pattern) => minimatch(file, pattern))\n );\n}\n\nexport async function exportAssetsAsync(\n projectRoot: string,\n {\n exp,\n outputDir,\n bundles: { web, ...bundles },\n baseUrl,\n files = new Map(),\n }: {\n exp: ExpoConfig;\n bundles: Partial<Record<string, BundleOutput>>;\n outputDir: string;\n baseUrl: string;\n files?: ExportAssetMap;\n }\n) {\n // NOTE: We use a different system for static web\n if (web) {\n // Save assets like a typical bundler, preserving the file paths on web.\n // TODO: Update React Native Web to support loading files from asset hashes.\n await persistMetroAssetsAsync(web.assets, {\n files,\n platform: 'web',\n outputDirectory: outputDir,\n baseUrl,\n });\n }\n\n const assets: Asset[] = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.assets),\n (asset) => asset.hash\n );\n\n let bundledAssetsSet: Set<string> | undefined = undefined;\n let filteredAssets = assets;\n const embeddedHashSet: Set<string> = new Set();\n\n if (assets[0]?.fileHashes) {\n debug(`Assets = ${JSON.stringify(assets, null, 2)}`);\n // Updates the manifest to reflect additional asset bundling + configs\n // Get only asset strings for assets we will save\n bundledAssetsSet = resolveAssetPatternsToBeBundled(projectRoot, exp, assets);\n if (bundledAssetsSet) {\n debug(`Bundled assets = ${JSON.stringify([...bundledAssetsSet], null, 2)}`);\n // Filter asset objects to only ones that include assetPatternsToBeBundled matches\n filteredAssets = assets.filter((asset) => {\n const shouldInclude = assetShouldBeIncludedInExport(asset, bundledAssetsSet);\n if (!shouldInclude) {\n embeddedHashSet.add(asset.hash);\n }\n return shouldInclude;\n });\n debug(`Filtered assets count = ${filteredAssets.length}`);\n }\n\n const hashes = new Set<string>();\n\n // Add assets to copy.\n filteredAssets.forEach((asset) => {\n const assetId =\n 'fileSystemLocation' in asset\n ? path.relative(projectRoot, path.join(asset.fileSystemLocation, asset.name)) +\n (asset.type ? '.' + asset.type : '')\n : undefined;\n\n asset.files.forEach((fp: string, index: number) => {\n const hash = asset.fileHashes[index];\n if (hashes.has(hash)) return;\n hashes.add(hash);\n files.set(path.join('assets', hash), {\n originFilename: path.relative(projectRoot, fp),\n contents: fs.readFileSync(fp),\n assetId,\n });\n });\n });\n }\n\n // Add google services file if it exists\n await resolveGoogleServicesFile(projectRoot, exp);\n\n return { exp, assets, embeddedHashSet, files };\n}\n"],"names":["assetPatternsToBeBundled","resolveAssetPatternsToBeBundled","exportAssetsAsync","debug","require","mapAssetHashToAssetString","asset","hash","type","exp","extra","updates","length","undefined","assetShouldBeIncludedInExport","bundledAssetsSet","fileHashes","filter","has","setOfAssetsToBeBundled","assets","projectRoot","fullPatterns","map","p","path","join","logPatterns","allBundledAssets","shouldBundle","shouldBundleAsset","files","flat","Set","bundledAssets","patterns","Log","log","forEach","file","__packager_asset","some","pattern","minimatch","outputDir","bundles","web","baseUrl","Map","persistMetroAssetsAsync","platform","outputDirectory","uniqBy","Object","values","flatMap","bundle","filteredAssets","embeddedHashSet","JSON","stringify","shouldInclude","add","hashes","assetId","relative","fileSystemLocation","name","fp","index","set","originFilename","contents","fs","readFileSync","resolveGoogleServicesFile"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/exportAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs';\nimport minimatch from 'minimatch';\nimport path from 'path';\n\nimport { persistMetroAssetsAsync } from './persistMetroAssets';\nimport type { Asset, ExportAssetMap, BundleOutput } from './saveAssets';\nimport * as Log from '../log';\nimport { resolveGoogleServicesFile } from '../start/server/middleware/resolveAssets';\nimport { uniqBy } from '../utils/array';\n\nconst debug = require('debug')('expo:export:exportAssets') as typeof console.log;\n\nfunction mapAssetHashToAssetString(asset: Asset, hash: string) {\n return 'asset_' + hash + ('type' in asset && asset.type ? '.' + asset.type : '');\n}\n\nexport function assetPatternsToBeBundled(\n exp: ExpoConfig & { extra?: { updates?: { assetPatternsToBeBundled?: string[] } } }\n): string[] | undefined {\n return exp?.extra?.updates?.assetPatternsToBeBundled?.length\n ? exp?.extra?.updates?.assetPatternsToBeBundled\n : undefined;\n}\n\n/**\n * Given an asset and a set of strings representing the assets to be bundled, returns true if\n * the asset is part of the set to be bundled.\n * @param asset Asset object\n * @param bundledAssetsSet Set of strings\n * @returns true if the asset should be bundled\n */\nfunction assetShouldBeIncludedInExport(asset: Asset, bundledAssetsSet: Set<string> | undefined) {\n if (!bundledAssetsSet) {\n return true;\n }\n return (\n asset.fileHashes.filter((hash) => bundledAssetsSet.has(mapAssetHashToAssetString(asset, hash)))\n .length > 0\n );\n}\n\n/**\n * Computes a set of strings representing the assets to be bundled with an export, given an array of assets,\n * and a set of patterns to match\n * @param assets The asset array\n * @param assetPatternsToBeBundled An array of strings with glob patterns to match\n * @param projectRoot The project root\n * @returns A set of asset strings\n */\nfunction setOfAssetsToBeBundled(\n assets: Asset[],\n assetPatternsToBeBundled: string[],\n projectRoot: string\n): Set<string> | undefined {\n // Convert asset patterns to a list of asset strings that match them.\n // Assets strings are formatted as `asset_<hash>.<type>` and represent\n // the name that the file will have in the app bundle. The `asset_` prefix is\n // needed because android doesn't support assets that start with numbers.\n\n const fullPatterns: string[] = assetPatternsToBeBundled.map((p: string) =>\n path.join(projectRoot, p)\n );\n\n logPatterns(fullPatterns);\n\n const allBundledAssets = assets\n .map((asset) => {\n const shouldBundle = shouldBundleAsset(asset, fullPatterns);\n if (shouldBundle) {\n debug(`${shouldBundle ? 'Include' : 'Exclude'} asset ${asset.files?.[0]}`);\n return asset.fileHashes.map((hash) => mapAssetHashToAssetString(asset, hash));\n }\n return [];\n })\n .flat();\n\n // The assets returned by the RN packager has duplicates so make sure we\n // only bundle each once.\n return new Set(allBundledAssets);\n}\n\n/**\n * Resolves the assetBundlePatterns from the manifest and returns the set of assets to bundle.\n *\n * @modifies {exp}\n */\nexport function resolveAssetPatternsToBeBundled<T extends ExpoConfig>(\n projectRoot: string,\n exp: T,\n assets: Asset[]\n): Set<string> | undefined {\n if (!assetPatternsToBeBundled(exp)) {\n return undefined;\n }\n const bundledAssets = setOfAssetsToBeBundled(\n assets,\n assetPatternsToBeBundled(exp) ?? ['**/*'],\n projectRoot\n );\n return bundledAssets;\n}\n\nfunction logPatterns(patterns: string[]) {\n // Only log the patterns in debug mode, if they aren't already defined in the app.json, then all files will be targeted.\n Log.log('\\nProcessing asset bundle patterns:');\n patterns.forEach((p) => Log.log('- ' + p));\n}\n\nfunction shouldBundleAsset(asset: Asset, patterns: string[]) {\n const file = asset.files?.[0];\n return !!(\n '__packager_asset' in asset &&\n asset.__packager_asset &&\n file &&\n patterns.some((pattern) => minimatch(file, pattern))\n );\n}\n\nexport async function exportAssetsAsync(\n projectRoot: string,\n {\n exp,\n outputDir,\n bundles: { web, ...bundles },\n baseUrl,\n files = new Map(),\n }: {\n exp: ExpoConfig;\n bundles: Partial<Record<string, BundleOutput>>;\n outputDir: string;\n baseUrl: string;\n files?: ExportAssetMap;\n }\n) {\n // NOTE: We use a different system for static web\n if (web) {\n // Save assets like a typical bundler, preserving the file paths on web.\n // TODO: Update React Native Web to support loading files from asset hashes.\n await persistMetroAssetsAsync(web.assets, {\n files,\n platform: 'web',\n outputDirectory: outputDir,\n baseUrl,\n });\n }\n\n const assets: Asset[] = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.assets),\n (asset) => asset.hash\n );\n\n let bundledAssetsSet: Set<string> | undefined = undefined;\n let filteredAssets = assets;\n const embeddedHashSet: Set<string> = new Set();\n\n if (assets[0]?.fileHashes) {\n debug(`Assets = ${JSON.stringify(assets, null, 2)}`);\n // Updates the manifest to reflect additional asset bundling + configs\n // Get only asset strings for assets we will save\n bundledAssetsSet = resolveAssetPatternsToBeBundled(projectRoot, exp, assets);\n if (bundledAssetsSet) {\n debug(`Bundled assets = ${JSON.stringify([...bundledAssetsSet], null, 2)}`);\n // Filter asset objects to only ones that include assetPatternsToBeBundled matches\n filteredAssets = assets.filter((asset) => {\n const shouldInclude = assetShouldBeIncludedInExport(asset, bundledAssetsSet);\n if (!shouldInclude) {\n embeddedHashSet.add(asset.hash);\n }\n return shouldInclude;\n });\n debug(`Filtered assets count = ${filteredAssets.length}`);\n }\n\n const hashes = new Set<string>();\n\n // Add assets to copy.\n filteredAssets.forEach((asset) => {\n const assetId =\n 'fileSystemLocation' in asset\n ? path.relative(projectRoot, path.join(asset.fileSystemLocation, asset.name)) +\n (asset.type ? '.' + asset.type : '')\n : undefined;\n\n asset.files.forEach((fp: string, index: number) => {\n const hash = asset.fileHashes[index];\n if (hashes.has(hash)) return;\n hashes.add(hash);\n files.set(path.join('assets', hash), {\n originFilename: path.relative(projectRoot, fp),\n contents: fs.readFileSync(fp),\n assetId,\n });\n });\n });\n }\n\n // Add google services file if it exists\n await resolveGoogleServicesFile(projectRoot, exp);\n\n return { exp, assets, embeddedHashSet, files };\n}\n"],"names":["assetPatternsToBeBundled","resolveAssetPatternsToBeBundled","exportAssetsAsync","debug","require","mapAssetHashToAssetString","asset","hash","type","exp","extra","updates","length","undefined","assetShouldBeIncludedInExport","bundledAssetsSet","fileHashes","filter","has","setOfAssetsToBeBundled","assets","projectRoot","fullPatterns","map","p","path","join","logPatterns","allBundledAssets","shouldBundle","shouldBundleAsset","files","flat","Set","bundledAssets","patterns","Log","log","forEach","file","__packager_asset","some","pattern","minimatch","outputDir","bundles","web","baseUrl","Map","persistMetroAssetsAsync","platform","outputDirectory","uniqBy","Object","values","flatMap","bundle","filteredAssets","embeddedHashSet","JSON","stringify","shouldInclude","add","hashes","assetId","relative","fileSystemLocation","name","fp","index","set","originFilename","contents","fs","readFileSync","resolveGoogleServicesFile"],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
+
assertEngineMismatchAsync: ()=>assertEngineMismatchAsync,
|
|
12
13
|
isEnableHermesManaged: ()=>isEnableHermesManaged,
|
|
13
14
|
parseGradleProperties: ()=>parseGradleProperties,
|
|
14
15
|
maybeThrowFromInconsistentEngineAsync: ()=>maybeThrowFromInconsistentEngineAsync,
|
|
@@ -17,6 +18,13 @@ _export(exports, {
|
|
|
17
18
|
isHermesBytecodeBundleAsync: ()=>isHermesBytecodeBundleAsync,
|
|
18
19
|
getHermesBytecodeBundleVersionAsync: ()=>getHermesBytecodeBundleVersionAsync
|
|
19
20
|
});
|
|
21
|
+
function _config() {
|
|
22
|
+
const data = require("@expo/config");
|
|
23
|
+
_config = function() {
|
|
24
|
+
return data;
|
|
25
|
+
};
|
|
26
|
+
return data;
|
|
27
|
+
}
|
|
20
28
|
function _fsExtra() {
|
|
21
29
|
const data = /*#__PURE__*/ _interopRequireDefault(require("fs-extra"));
|
|
22
30
|
_fsExtra = function() {
|
|
@@ -36,6 +44,13 @@ function _interopRequireDefault(obj) {
|
|
|
36
44
|
default: obj
|
|
37
45
|
};
|
|
38
46
|
}
|
|
47
|
+
async function assertEngineMismatchAsync(projectRoot, exp, platform) {
|
|
48
|
+
const isHermesManaged = isEnableHermesManaged(exp, platform);
|
|
49
|
+
const paths = (0, _config().getConfigFilePaths)(projectRoot);
|
|
50
|
+
var _dynamicConfigPath, ref;
|
|
51
|
+
const configFilePath = (ref = (_dynamicConfigPath = paths.dynamicConfigPath) != null ? _dynamicConfigPath : paths.staticConfigPath) != null ? ref : "app.json";
|
|
52
|
+
await maybeThrowFromInconsistentEngineAsync(projectRoot, configFilePath, platform, isHermesManaged);
|
|
53
|
+
}
|
|
39
54
|
function isEnableHermesManaged(expoConfig, platform) {
|
|
40
55
|
switch(platform){
|
|
41
56
|
case "android":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/exportHermes.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nexport function isEnableHermesManaged(\n expoConfig: Partial<Pick<ExpoConfig, 'ios' | 'android' | 'jsEngine'>>,\n platform: string\n): boolean {\n switch (platform) {\n case 'android': {\n return (expoConfig.android?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n case 'ios': {\n return (expoConfig.ios?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n default:\n return false;\n }\n}\n\nexport function parseGradleProperties(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (let line of content.split('\\n')) {\n line = line.trim();\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n const sepIndex = line.indexOf('=');\n const key = line.substr(0, sepIndex);\n const value = line.substr(sepIndex + 1);\n result[key] = value;\n }\n return result;\n}\n\nexport async function maybeThrowFromInconsistentEngineAsync(\n projectRoot: string,\n configFilePath: string,\n platform: string,\n isHermesManaged: boolean\n): Promise<void> {\n const configFileName = path.basename(configFilePath);\n if (\n platform === 'android' &&\n (await maybeInconsistentEngineAndroidAsync(projectRoot, isHermesManaged))\n ) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and Android native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In Android native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'android', 'gradle.properties')}\\n` +\n ` - ${path.join(projectRoot, 'android', 'app', 'build.gradle')}\\n` +\n 'Learn more: https://expo.fyi/hermes-android-config'\n );\n }\n\n if (platform === 'ios' && (await maybeInconsistentEngineIosAsync(projectRoot, isHermesManaged))) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and iOS native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In iOS native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile')}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile.properties.json')}\\n` +\n 'Learn more: https://expo.fyi/hermes-ios-config'\n );\n }\n}\n\nexport async function maybeInconsistentEngineAndroidAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check android native project if by chance to be consistent between app config\n\n // Check gradle.properties from prebuild template\n const gradlePropertiesPath = path.join(projectRoot, 'android', 'gradle.properties');\n if (fs.existsSync(gradlePropertiesPath)) {\n const props = parseGradleProperties(await fs.readFile(gradlePropertiesPath, 'utf8'));\n const isHermesBare = props['hermesEnabled'] === 'true';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\nexport async function maybeInconsistentEngineIosAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check ios native project if by chance to be consistent between app config\n\n // Check ios/Podfile for \":hermes_enabled => true\"\n const podfilePath = path.join(projectRoot, 'ios', 'Podfile');\n if (fs.existsSync(podfilePath)) {\n const content = await fs.readFile(podfilePath, 'utf8');\n const isPropsReference =\n content.search(\n /^\\s*:hermes_enabled\\s*=>\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*nil\\s*\\|\\|\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*'hermes',?/m\n ) >= 0;\n const isHermesBare = content.search(/^\\s*:hermes_enabled\\s*=>\\s*true,?\\s+/m) >= 0;\n if (!isPropsReference && isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n // Check Podfile.properties.json from prebuild template\n const podfilePropertiesPath = path.join(projectRoot, 'ios', 'Podfile.properties.json');\n if (fs.existsSync(podfilePropertiesPath)) {\n const props = await parsePodfilePropertiesAsync(podfilePropertiesPath);\n const isHermesBare = props['expo.jsEngine'] === 'hermes';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\n// https://github.com/facebook/hermes/blob/release-v0.5/include/hermes/BCGen/HBC/BytecodeFileFormat.h#L24-L25\nconst HERMES_MAGIC_HEADER = 'c61fbc03c103191f';\n\nexport async function isHermesBytecodeBundleAsync(file: string): Promise<boolean> {\n const header = await readHermesHeaderAsync(file);\n return header.slice(0, 8).toString('hex') === HERMES_MAGIC_HEADER;\n}\n\nexport async function getHermesBytecodeBundleVersionAsync(file: string): Promise<number> {\n const header = await readHermesHeaderAsync(file);\n if (header.slice(0, 8).toString('hex') !== HERMES_MAGIC_HEADER) {\n throw new Error('Invalid hermes bundle file');\n }\n return header.readUInt32LE(8);\n}\n\nasync function readHermesHeaderAsync(file: string): Promise<Buffer> {\n const fd = await fs.open(file, 'r');\n const buffer = Buffer.alloc(12);\n await fs.read(fd, buffer, 0, 12, null);\n await fs.close(fd);\n return buffer;\n}\n\nasync function parsePodfilePropertiesAsync(\n podfilePropertiesPath: string\n): Promise<Record<string, string>> {\n try {\n return JSON.parse(await fs.readFile(podfilePropertiesPath, 'utf8'));\n } catch {\n return {};\n }\n}\n"],"names":["isEnableHermesManaged","parseGradleProperties","maybeThrowFromInconsistentEngineAsync","maybeInconsistentEngineAndroidAsync","maybeInconsistentEngineIosAsync","isHermesBytecodeBundleAsync","getHermesBytecodeBundleVersionAsync","expoConfig","platform","android","jsEngine","ios","content","result","line","split","trim","startsWith","sepIndex","indexOf","key","substr","value","projectRoot","configFilePath","isHermesManaged","configFileName","path","basename","Error","join","gradlePropertiesPath","fs","existsSync","props","readFile","isHermesBare","podfilePath","isPropsReference","search","podfilePropertiesPath","parsePodfilePropertiesAsync","HERMES_MAGIC_HEADER","file","header","readHermesHeaderAsync","slice","toString","readUInt32LE","fd","open","buffer","Buffer","alloc","read","close","JSON","parse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/exportHermes.ts"],"sourcesContent":["import { ExpoConfig, getConfigFilePaths, Platform } from '@expo/config';\nimport fs from 'fs-extra';\nimport path from 'path';\n\nexport async function assertEngineMismatchAsync(\n projectRoot: string,\n exp: Pick<ExpoConfig, 'ios' | 'android' | 'jsEngine'>,\n platform: Platform\n) {\n const isHermesManaged = isEnableHermesManaged(exp, platform);\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 function isEnableHermesManaged(\n expoConfig: Partial<Pick<ExpoConfig, 'ios' | 'android' | 'jsEngine'>>,\n platform: string\n): boolean {\n switch (platform) {\n case 'android': {\n return (expoConfig.android?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n case 'ios': {\n return (expoConfig.ios?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n default:\n return false;\n }\n}\n\nexport function parseGradleProperties(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (let line of content.split('\\n')) {\n line = line.trim();\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n const sepIndex = line.indexOf('=');\n const key = line.substr(0, sepIndex);\n const value = line.substr(sepIndex + 1);\n result[key] = value;\n }\n return result;\n}\n\nexport async function maybeThrowFromInconsistentEngineAsync(\n projectRoot: string,\n configFilePath: string,\n platform: string,\n isHermesManaged: boolean\n): Promise<void> {\n const configFileName = path.basename(configFilePath);\n if (\n platform === 'android' &&\n (await maybeInconsistentEngineAndroidAsync(projectRoot, isHermesManaged))\n ) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and Android native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In Android native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'android', 'gradle.properties')}\\n` +\n ` - ${path.join(projectRoot, 'android', 'app', 'build.gradle')}\\n` +\n 'Learn more: https://expo.fyi/hermes-android-config'\n );\n }\n\n if (platform === 'ios' && (await maybeInconsistentEngineIosAsync(projectRoot, isHermesManaged))) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and iOS native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In iOS native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile')}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile.properties.json')}\\n` +\n 'Learn more: https://expo.fyi/hermes-ios-config'\n );\n }\n}\n\nexport async function maybeInconsistentEngineAndroidAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check android native project if by chance to be consistent between app config\n\n // Check gradle.properties from prebuild template\n const gradlePropertiesPath = path.join(projectRoot, 'android', 'gradle.properties');\n if (fs.existsSync(gradlePropertiesPath)) {\n const props = parseGradleProperties(await fs.readFile(gradlePropertiesPath, 'utf8'));\n const isHermesBare = props['hermesEnabled'] === 'true';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\nexport async function maybeInconsistentEngineIosAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check ios native project if by chance to be consistent between app config\n\n // Check ios/Podfile for \":hermes_enabled => true\"\n const podfilePath = path.join(projectRoot, 'ios', 'Podfile');\n if (fs.existsSync(podfilePath)) {\n const content = await fs.readFile(podfilePath, 'utf8');\n const isPropsReference =\n content.search(\n /^\\s*:hermes_enabled\\s*=>\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*nil\\s*\\|\\|\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*'hermes',?/m\n ) >= 0;\n const isHermesBare = content.search(/^\\s*:hermes_enabled\\s*=>\\s*true,?\\s+/m) >= 0;\n if (!isPropsReference && isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n // Check Podfile.properties.json from prebuild template\n const podfilePropertiesPath = path.join(projectRoot, 'ios', 'Podfile.properties.json');\n if (fs.existsSync(podfilePropertiesPath)) {\n const props = await parsePodfilePropertiesAsync(podfilePropertiesPath);\n const isHermesBare = props['expo.jsEngine'] === 'hermes';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\n// https://github.com/facebook/hermes/blob/release-v0.5/include/hermes/BCGen/HBC/BytecodeFileFormat.h#L24-L25\nconst HERMES_MAGIC_HEADER = 'c61fbc03c103191f';\n\nexport async function isHermesBytecodeBundleAsync(file: string): Promise<boolean> {\n const header = await readHermesHeaderAsync(file);\n return header.slice(0, 8).toString('hex') === HERMES_MAGIC_HEADER;\n}\n\nexport async function getHermesBytecodeBundleVersionAsync(file: string): Promise<number> {\n const header = await readHermesHeaderAsync(file);\n if (header.slice(0, 8).toString('hex') !== HERMES_MAGIC_HEADER) {\n throw new Error('Invalid hermes bundle file');\n }\n return header.readUInt32LE(8);\n}\n\nasync function readHermesHeaderAsync(file: string): Promise<Buffer> {\n const fd = await fs.open(file, 'r');\n const buffer = Buffer.alloc(12);\n await fs.read(fd, buffer, 0, 12, null);\n await fs.close(fd);\n return buffer;\n}\n\nasync function parsePodfilePropertiesAsync(\n podfilePropertiesPath: string\n): Promise<Record<string, string>> {\n try {\n return JSON.parse(await fs.readFile(podfilePropertiesPath, 'utf8'));\n } catch {\n return {};\n }\n}\n"],"names":["assertEngineMismatchAsync","isEnableHermesManaged","parseGradleProperties","maybeThrowFromInconsistentEngineAsync","maybeInconsistentEngineAndroidAsync","maybeInconsistentEngineIosAsync","isHermesBytecodeBundleAsync","getHermesBytecodeBundleVersionAsync","projectRoot","exp","platform","isHermesManaged","paths","getConfigFilePaths","configFilePath","dynamicConfigPath","staticConfigPath","expoConfig","android","jsEngine","ios","content","result","line","split","trim","startsWith","sepIndex","indexOf","key","substr","value","configFileName","path","basename","Error","join","gradlePropertiesPath","fs","existsSync","props","readFile","isHermesBare","podfilePath","isPropsReference","search","podfilePropertiesPath","parsePodfilePropertiesAsync","HERMES_MAGIC_HEADER","file","header","readHermesHeaderAsync","slice","toString","readUInt32LE","fd","open","buffer","Buffer","alloc","read","close","JSON","parse"],"mappings":"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"}
|
|
@@ -14,18 +14,11 @@ function _export(target, all) {
|
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
16
|
_export(exports, {
|
|
17
|
-
unstable_exportStaticAsync: ()=>unstable_exportStaticAsync,
|
|
18
17
|
getFilesToExportFromServerAsync: ()=>getFilesToExportFromServerAsync,
|
|
18
|
+
exportFromServerAsync: ()=>exportFromServerAsync,
|
|
19
19
|
getHtmlFiles: ()=>getHtmlFiles,
|
|
20
20
|
getPathVariations: ()=>getPathVariations
|
|
21
21
|
});
|
|
22
|
-
function _assert() {
|
|
23
|
-
const data = /*#__PURE__*/ _interopRequireDefault(require("assert"));
|
|
24
|
-
_assert = function() {
|
|
25
|
-
return data;
|
|
26
|
-
};
|
|
27
|
-
return data;
|
|
28
|
-
}
|
|
29
22
|
function _chalk() {
|
|
30
23
|
const data = /*#__PURE__*/ _interopRequireDefault(require("chalk"));
|
|
31
24
|
_chalk = function() {
|
|
@@ -65,53 +58,16 @@ const _favicon = require("./favicon");
|
|
|
65
58
|
const _persistMetroAssets = require("./persistMetroAssets");
|
|
66
59
|
const _saveAssets = require("./saveAssets");
|
|
67
60
|
const _log = require("../log");
|
|
68
|
-
const _devServerManager = require("../start/server/DevServerManager");
|
|
69
|
-
const _metroBundlerDevServer = require("../start/server/metro/MetroBundlerDevServer");
|
|
70
61
|
const _metroErrorInterface = require("../start/server/metro/metroErrorInterface");
|
|
71
62
|
const _router = require("../start/server/metro/router");
|
|
72
63
|
const _serializeHtml = require("../start/server/metro/serializeHtml");
|
|
73
64
|
const _link = require("../utils/link");
|
|
74
|
-
const _port = require("../utils/port");
|
|
75
65
|
function _interopRequireDefault(obj) {
|
|
76
66
|
return obj && obj.__esModule ? obj : {
|
|
77
67
|
default: obj
|
|
78
68
|
};
|
|
79
69
|
}
|
|
80
70
|
const debug = require("debug")("expo:export:generateStaticRoutes");
|
|
81
|
-
async function unstable_exportStaticAsync(projectRoot, options) {
|
|
82
|
-
_log.Log.log(`Static rendering is enabled. ` + (0, _link.learnMore)("https://docs.expo.dev/router/reference/static-rendering/"));
|
|
83
|
-
// Useful for running parallel e2e tests in CI.
|
|
84
|
-
const port = await (0, _port.getFreePortAsync)(8082);
|
|
85
|
-
// TODO: Prevent starting the watcher.
|
|
86
|
-
const devServerManager = new _devServerManager.DevServerManager(projectRoot, {
|
|
87
|
-
minify: options.minify,
|
|
88
|
-
mode: options.mode,
|
|
89
|
-
port,
|
|
90
|
-
isExporting: true,
|
|
91
|
-
location: {},
|
|
92
|
-
resetDevServer: options.clear,
|
|
93
|
-
maxWorkers: options.maxWorkers
|
|
94
|
-
});
|
|
95
|
-
await devServerManager.startAsync([
|
|
96
|
-
{
|
|
97
|
-
type: "metro",
|
|
98
|
-
options: {
|
|
99
|
-
port,
|
|
100
|
-
mode: options.mode,
|
|
101
|
-
location: {},
|
|
102
|
-
isExporting: true,
|
|
103
|
-
minify: options.minify,
|
|
104
|
-
resetDevServer: options.clear,
|
|
105
|
-
maxWorkers: options.maxWorkers
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
]);
|
|
109
|
-
try {
|
|
110
|
-
return await exportFromServerAsync(projectRoot, devServerManager, options);
|
|
111
|
-
} finally{
|
|
112
|
-
await devServerManager.stopAsync();
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
71
|
/** Match `(page)` -> `page` */ function matchGroupName(name) {
|
|
116
72
|
var ref;
|
|
117
73
|
return (ref = name.match(/^\(([^/]+?)\)$/)) == null ? void 0 : ref[1];
|
|
@@ -177,17 +133,17 @@ function makeRuntimeEntryPointsAbsolute(manifest, appDir) {
|
|
|
177
133
|
}
|
|
178
134
|
});
|
|
179
135
|
}
|
|
180
|
-
|
|
136
|
+
async function exportFromServerAsync(projectRoot, devServer, { outputDir , baseUrl , exportServer , includeSourceMaps , routerRoot , files =new Map() , exp }) {
|
|
137
|
+
_log.Log.log(`Static rendering is enabled. ` + (0, _link.learnMore)("https://docs.expo.dev/router/reference/static-rendering/"));
|
|
181
138
|
const platform = "web";
|
|
182
139
|
const isExporting = true;
|
|
183
140
|
const appDir = _path().default.join(projectRoot, routerRoot);
|
|
184
141
|
const injectFaviconTag = await (0, _favicon.getVirtualFaviconAssetsAsync)(projectRoot, {
|
|
185
142
|
outputDir,
|
|
186
143
|
baseUrl,
|
|
187
|
-
files
|
|
144
|
+
files,
|
|
145
|
+
exp
|
|
188
146
|
});
|
|
189
|
-
const devServer = devServerManager.getDefaultDevServer();
|
|
190
|
-
(0, _assert().default)(devServer instanceof _metroBundlerDevServer.MetroBundlerDevServer);
|
|
191
147
|
const [resources, { manifest , serverManifest , renderAsync }] = await Promise.all([
|
|
192
148
|
devServer.getStaticResourcesAsync({
|
|
193
149
|
includeSourceMaps
|