@expo/cli 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +5 -4
- package/build/bin/cli.map +1 -1
- package/build/src/api/getVersions.js.map +1 -1
- package/build/src/api/rest/cache/response.js.map +1 -1
- package/build/src/api/rest/client.js +2 -2
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/customize/typescript.js +3 -1
- package/build/src/customize/typescript.js.map +1 -1
- package/build/src/export/createMetadataJson.js +3 -2
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +44 -17
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +3 -3
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/exportApp.js +69 -80
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +81 -21
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportHermes.js +4 -4
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +55 -20
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +2 -2
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +12 -10
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/index.js +9 -7
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/metroAssetLocalPath.js +101 -0
- package/build/src/export/metroAssetLocalPath.js.map +1 -0
- package/build/src/export/persistMetroAssets.js +94 -21
- package/build/src/export/persistMetroAssets.js.map +1 -1
- package/build/src/export/resolveOptions.js +1 -1
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +9 -48
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js +1 -1
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/writeContents.js +3 -2
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/install/applyPlugins.js +52 -0
- package/build/src/install/applyPlugins.js.map +1 -0
- package/build/src/install/checkPackages.js +2 -2
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/fixPackages.js +84 -0
- package/build/src/install/fixPackages.js.map +1 -0
- package/build/src/install/installAsync.js +32 -61
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/installExpoPackage.js +79 -0
- package/build/src/install/installExpoPackage.js.map +1 -0
- package/build/src/prebuild/clearNativeFolder.js +1 -1
- package/build/src/prebuild/clearNativeFolder.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js +3 -3
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +21 -30
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +37 -15
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +2 -2
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +6 -6
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +49 -36
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/prebuild/validateTemplatePlatforms.js +2 -2
- package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +12 -4
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +20 -3
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +30 -11
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +14 -10
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +6 -1
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +63 -0
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -0
- package/build/src/start/server/getStaticRenderFunctions.js +21 -23
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +48 -64
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/bundleApiRoutes.js +4 -3
- package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
- package/build/src/start/server/metro/createExpoMetroResolver.js +62 -45
- package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
- package/build/src/start/server/metro/createJResolver.js +149 -0
- package/build/src/start/server/metro/createJResolver.js.map +1 -0
- package/build/src/start/server/metro/createServerRouteMiddleware.js +13 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/externals.js +25 -3
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/device.js +3 -1
- package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js +3 -4
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js +24 -0
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
- package/build/src/start/server/metro/inspector-proxy/handlers/utils.js +11 -0
- package/build/src/start/server/metro/inspector-proxy/handlers/utils.js.map +1 -0
- package/build/src/start/server/metro/inspector-proxy/index.js +10 -7
- package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +32 -10
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/router.js +4 -1
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +19 -10
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/serializeHtml.js +43 -0
- package/build/src/start/server/metro/serializeHtml.js.map +1 -0
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +1 -2
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +261 -201
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +114 -40
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +61 -0
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/ExpoMiddleware.js +2 -2
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +15 -66
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js +30 -26
- package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +7 -7
- package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +5 -2
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +3 -2
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -1
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +8 -7
- package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +123 -0
- package/build/src/start/server/middleware/metroOptions.js.map +1 -0
- package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
- package/build/src/utils/analytics/getMetroDebugProperties.js +1 -2
- package/build/src/utils/analytics/getMetroDebugProperties.js.map +1 -1
- package/build/src/utils/analytics/getMetroProperties.js +1 -2
- package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/args.js +4 -2
- package/build/src/utils/args.js.map +1 -1
- package/build/src/utils/cocoapods.js +1 -1
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/dir.js +18 -8
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/env.js +3 -0
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +2 -4
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/prompts.js +1 -28
- package/build/src/utils/prompts.js.map +1 -1
- package/package.json +15 -14
- package/static/shims/react-native-web/dist/cjs/exports/AppRegistry/AppContainer.js +13 -0
- package/static/shims/react-native-web/dist/exports/AppRegistry/AppContainer.js +12 -0
- package/build/src/start/server/metro/resolveFromProject.js +0 -90
- package/build/src/start/server/metro/resolveFromProject.js.map +0 -1
|
@@ -12,10 +12,10 @@ var _exportStaticAsync = require("./exportStaticAsync");
|
|
|
12
12
|
var _favicon = require("./favicon");
|
|
13
13
|
var _forkBundleAsync = require("./fork-bundleAsync");
|
|
14
14
|
var _getPublicExpoManifest = require("./getPublicExpoManifest");
|
|
15
|
-
var _persistMetroAssets = require("./persistMetroAssets");
|
|
16
15
|
var _printBundleSizes = require("./printBundleSizes");
|
|
17
16
|
var _writeContents = require("./writeContents");
|
|
18
17
|
var Log = _interopRequireWildcard(require("../log"));
|
|
18
|
+
var _metroOptions = require("../start/server/middleware/metroOptions");
|
|
19
19
|
var _webTemplate = require("../start/server/webTemplate");
|
|
20
20
|
var _dir = require("../utils/dir");
|
|
21
21
|
var _env = require("../utils/env");
|
|
@@ -46,8 +46,8 @@ function _interopRequireWildcard(obj) {
|
|
|
46
46
|
return newObj;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev , dumpAssetmap ,
|
|
50
|
-
var ref
|
|
49
|
+
async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev , dumpAssetmap , sourceMaps , minify }) {
|
|
50
|
+
var ref;
|
|
51
51
|
(0, _nodeEnv).setNodeEnv(dev ? "development" : "production");
|
|
52
52
|
require("@expo/env").load(projectRoot);
|
|
53
53
|
const projectConfig = (0, _config).getConfig(projectRoot);
|
|
@@ -55,19 +55,18 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
|
|
|
55
55
|
// Web doesn't require validation.
|
|
56
56
|
skipValidation: platforms.length === 1 && platforms[0] === "web"
|
|
57
57
|
});
|
|
58
|
-
var
|
|
58
|
+
var ref1;
|
|
59
59
|
const useServerRendering = [
|
|
60
60
|
"static",
|
|
61
61
|
"server"
|
|
62
|
-
].includes((
|
|
63
|
-
|
|
64
|
-
const basePath = ((ref4 = (ref1 = exp.experiments) == null ? void 0 : (ref2 = ref1.basePath) == null ? void 0 : ref2.replace(/\/+$/, "")) != null ? ref4 : "").trim();
|
|
62
|
+
].includes((ref1 = (ref = exp.web) == null ? void 0 : ref.output) != null ? ref1 : "");
|
|
63
|
+
const baseUrl = (0, _metroOptions).getBaseUrlFromExpoConfig(exp);
|
|
65
64
|
// Print out logs
|
|
66
|
-
if (
|
|
65
|
+
if (baseUrl) {
|
|
67
66
|
Log.log();
|
|
68
|
-
Log.log(_chalk.default.gray`Using (experimental) base path: ${
|
|
67
|
+
Log.log(_chalk.default.gray`Using (experimental) base path: ${baseUrl}`);
|
|
69
68
|
// Warn if not using an absolute path.
|
|
70
|
-
if (!
|
|
69
|
+
if (!baseUrl.startsWith("/")) {
|
|
71
70
|
Log.log(_chalk.default.yellow` Base path does not start with a slash. Requests will not be absolute.`);
|
|
72
71
|
}
|
|
73
72
|
}
|
|
@@ -84,20 +83,23 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
|
|
|
84
83
|
// Run metro bundler and create the JS bundles/source maps.
|
|
85
84
|
const bundles = await (0, _forkBundleAsync).createBundlesAsync(projectRoot, projectConfig, {
|
|
86
85
|
clear: !!clear,
|
|
87
|
-
platforms,
|
|
88
86
|
minify,
|
|
89
|
-
sourcemaps:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
// ? platforms.filter((platform) => platform !== 'web')
|
|
93
|
-
// : platforms,
|
|
87
|
+
sourcemaps: sourceMaps,
|
|
88
|
+
platforms: useServerRendering ? platforms.filter((platform)=>platform !== "web"
|
|
89
|
+
) : platforms,
|
|
94
90
|
dev
|
|
95
91
|
});
|
|
92
|
+
// Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).
|
|
93
|
+
const { hashes , fileNames } = await (0, _writeContents).writeBundlesAsync({
|
|
94
|
+
bundles,
|
|
95
|
+
useServerRendering,
|
|
96
|
+
outputDir: bundlesPath
|
|
97
|
+
});
|
|
96
98
|
const bundleEntries = Object.entries(bundles);
|
|
97
99
|
if (bundleEntries.length) {
|
|
98
100
|
// Log bundle size info to the user
|
|
99
101
|
(0, _printBundleSizes).printBundleSizes(Object.fromEntries(bundleEntries.map(([key, value])=>{
|
|
100
|
-
if (!
|
|
102
|
+
if (!sourceMaps) {
|
|
101
103
|
return [
|
|
102
104
|
key,
|
|
103
105
|
{
|
|
@@ -112,68 +114,14 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
|
|
|
112
114
|
value
|
|
113
115
|
];
|
|
114
116
|
})));
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
useServerRendering,
|
|
120
|
-
outputDir: bundlesPath
|
|
121
|
-
});
|
|
122
|
-
Log.log("Finished saving JS Bundles");
|
|
123
|
-
if (platforms.includes("web")) {
|
|
124
|
-
if (useServerRendering) {
|
|
125
|
-
var ref5;
|
|
126
|
-
await (0, _exportStaticAsync).unstable_exportStaticAsync(projectRoot, {
|
|
127
|
-
outputDir: outputPath,
|
|
128
|
-
minify,
|
|
129
|
-
basePath,
|
|
130
|
-
includeMaps: dumpSourcemap,
|
|
131
|
-
// @ts-expect-error: server not on type yet
|
|
132
|
-
exportServer: ((ref5 = exp.web) == null ? void 0 : ref5.output) === "server"
|
|
133
|
-
});
|
|
134
|
-
Log.log("Finished saving static files");
|
|
135
|
-
} else {
|
|
136
|
-
const cssLinks = await (0, _exportAssets).exportCssAssetsAsync({
|
|
137
|
-
outputDir,
|
|
138
|
-
bundles,
|
|
139
|
-
basePath
|
|
140
|
-
});
|
|
141
|
-
let html = await (0, _webTemplate).createTemplateHtmlFromExpoConfigAsync(projectRoot, {
|
|
142
|
-
scripts: [
|
|
143
|
-
`${basePath}/bundles/${fileNames.web}`
|
|
144
|
-
],
|
|
145
|
-
cssLinks
|
|
146
|
-
});
|
|
147
|
-
// Add the favicon assets to the HTML.
|
|
148
|
-
const modifyHtml = await (0, _favicon).getVirtualFaviconAssetsAsync(projectRoot, {
|
|
149
|
-
outputDir,
|
|
150
|
-
basePath
|
|
151
|
-
});
|
|
152
|
-
if (modifyHtml) {
|
|
153
|
-
html = modifyHtml(html);
|
|
154
|
-
}
|
|
155
|
-
// Generate SPA-styled HTML file.
|
|
156
|
-
// If web exists, then write the template HTML file.
|
|
157
|
-
await _fs.default.promises.writeFile(_path.default.join(staticFolder, "index.html"), html);
|
|
158
|
-
}
|
|
159
|
-
// TODO: Use a different mechanism for static web.
|
|
160
|
-
if (bundles.web) {
|
|
161
|
-
// Save assets like a typical bundler, preserving the file paths on web.
|
|
162
|
-
// TODO: Update React Native Web to support loading files from asset hashes.
|
|
163
|
-
await (0, _persistMetroAssets).persistMetroAssetsAsync(bundles.web.assets, {
|
|
164
|
-
platform: "web",
|
|
165
|
-
outputDirectory: staticFolder,
|
|
166
|
-
basePath
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// Can be empty during web-only SSG.
|
|
171
|
-
// TODO: Use same asset system across platforms again.
|
|
172
|
-
if (Object.keys(fileNames).length) {
|
|
173
|
-
const { assets } = await (0, _exportAssets).exportAssetsAsync(projectRoot, {
|
|
117
|
+
Log.log("Finished saving JS Bundles");
|
|
118
|
+
// Can be empty during web-only SSG.
|
|
119
|
+
// TODO: Use same asset system across platforms again.
|
|
120
|
+
const { assets , embeddedHashSet } = await (0, _exportAssets).exportAssetsAsync(projectRoot, {
|
|
174
121
|
exp,
|
|
175
122
|
outputDir: staticFolder,
|
|
176
|
-
bundles
|
|
123
|
+
bundles,
|
|
124
|
+
baseUrl
|
|
177
125
|
});
|
|
178
126
|
if (dumpAssetmap) {
|
|
179
127
|
Log.log("Dumping asset map");
|
|
@@ -183,8 +131,8 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
|
|
|
183
131
|
});
|
|
184
132
|
}
|
|
185
133
|
// build source maps
|
|
186
|
-
if (
|
|
187
|
-
Log.log("
|
|
134
|
+
if (sourceMaps) {
|
|
135
|
+
Log.log("Emitting source maps");
|
|
188
136
|
await (0, _writeContents).writeSourceMapsAsync({
|
|
189
137
|
bundles,
|
|
190
138
|
hashes,
|
|
@@ -203,8 +151,49 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
|
|
|
203
151
|
await (0, _writeContents).writeMetadataJsonAsync({
|
|
204
152
|
outputDir: staticFolder,
|
|
205
153
|
bundles,
|
|
206
|
-
fileNames
|
|
154
|
+
fileNames,
|
|
155
|
+
embeddedHashSet
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
// Additional web-only steps...
|
|
159
|
+
if (!platforms.includes("web")) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (useServerRendering) {
|
|
163
|
+
var ref2;
|
|
164
|
+
await (0, _exportStaticAsync).unstable_exportStaticAsync(projectRoot, {
|
|
165
|
+
clear: !!clear,
|
|
166
|
+
outputDir: outputPath,
|
|
167
|
+
minify,
|
|
168
|
+
baseUrl,
|
|
169
|
+
includeMaps: sourceMaps,
|
|
170
|
+
// @ts-expect-error: server not on type yet
|
|
171
|
+
exportServer: ((ref2 = exp.web) == null ? void 0 : ref2.output) === "server"
|
|
172
|
+
});
|
|
173
|
+
Log.log("Finished saving static files");
|
|
174
|
+
} else {
|
|
175
|
+
const cssLinks = await (0, _exportAssets).exportCssAssetsAsync({
|
|
176
|
+
outputDir,
|
|
177
|
+
bundles,
|
|
178
|
+
baseUrl
|
|
179
|
+
});
|
|
180
|
+
let html = await (0, _webTemplate).createTemplateHtmlFromExpoConfigAsync(projectRoot, {
|
|
181
|
+
scripts: [
|
|
182
|
+
`${baseUrl}/bundles/${fileNames.web}`
|
|
183
|
+
],
|
|
184
|
+
cssLinks
|
|
207
185
|
});
|
|
186
|
+
// Add the favicon assets to the HTML.
|
|
187
|
+
const modifyHtml = await (0, _favicon).getVirtualFaviconAssetsAsync(projectRoot, {
|
|
188
|
+
outputDir,
|
|
189
|
+
baseUrl
|
|
190
|
+
});
|
|
191
|
+
if (modifyHtml) {
|
|
192
|
+
html = modifyHtml(html);
|
|
193
|
+
}
|
|
194
|
+
// Generate SPA-styled HTML file.
|
|
195
|
+
// If web exists, then write the template HTML file.
|
|
196
|
+
await _fs.default.promises.writeFile(_path.default.join(staticFolder, "index.html"), html);
|
|
208
197
|
}
|
|
209
198
|
}
|
|
210
199
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/exportApp.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { exportAssetsAsync, exportCssAssetsAsync } from './exportAssets';\nimport { unstable_exportStaticAsync } from './exportStaticAsync';\nimport { getVirtualFaviconAssetsAsync } from './favicon';\nimport { createBundlesAsync } from './fork-bundleAsync';\nimport { getPublicExpoManifestAsync } from './getPublicExpoManifest';\nimport { persistMetroAssetsAsync } from './persistMetroAssets';\nimport { printBundleSizes } from './printBundleSizes';\nimport { Options } from './resolveOptions';\nimport {\n writeAssetMapAsync,\n writeBundlesAsync,\n writeDebugHtmlAsync,\n writeMetadataJsonAsync,\n writeSourceMapsAsync,\n} from './writeContents';\nimport * as Log from '../log';\nimport { createTemplateHtmlFromExpoConfigAsync } from '../start/server/webTemplate';\nimport { copyAsync, ensureDirectoryAsync } from '../utils/dir';\nimport { env } from '../utils/env';\nimport { setNodeEnv } from '../utils/nodeEnv';\n\n/**\n * The structure of the outputDir will be:\n *\n * ```\n * ├── assets\n * │ └── *\n * ├── bundles\n * │ ├── android-01ee6e3ab3e8c16a4d926c91808d5320.js\n * │ └── ios-ee8206cc754d3f7aa9123b7f909d94ea.js\n * └── metadata.json\n * ```\n */\nexport async function exportAppAsync(\n projectRoot: string,\n {\n platforms,\n outputDir,\n clear,\n dev,\n dumpAssetmap,\n dumpSourcemap,\n minify,\n }: Pick<\n Options,\n 'dumpAssetmap' | 'dumpSourcemap' | 'dev' | 'clear' | 'outputDir' | 'platforms' | 'minify'\n >\n): Promise<void> {\n setNodeEnv(dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const 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 const useServerRendering = ['static', 'server'].includes(exp.web?.output ?? '');\n const basePath = (exp.experiments?.basePath?.replace(/\\/+$/, '') ?? '').trim();\n\n // Print out logs\n if (basePath) {\n Log.log();\n Log.log(chalk.gray`Using (experimental) base path: ${basePath}`);\n // Warn if not using an absolute path.\n if (!basePath.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\n const outputPath = path.resolve(projectRoot, outputDir);\n const staticFolder = outputPath;\n const assetsPath = path.join(staticFolder, 'assets');\n const bundlesPath = path.join(staticFolder, 'bundles');\n\n await Promise.all([assetsPath, bundlesPath].map(ensureDirectoryAsync));\n\n await copyPublicFolderAsync(publicPath, staticFolder);\n\n // Run metro bundler and create the JS bundles/source maps.\n const bundles = await createBundlesAsync(projectRoot, projectConfig, {\n clear: !!clear,\n platforms,\n minify,\n sourcemaps: dumpSourcemap,\n // TODO: Breaks asset exports\n // platforms: useServerRendering\n // ? platforms.filter((platform) => platform !== 'web')\n // : platforms,\n dev,\n });\n\n const bundleEntries = Object.entries(bundles);\n if (bundleEntries.length) {\n // Log bundle size info to the user\n printBundleSizes(\n Object.fromEntries(\n bundleEntries.map(([key, value]) => {\n if (!dumpSourcemap) {\n return [\n key,\n {\n ...value,\n // Remove source maps from the bundles if they aren't going to be written.\n map: undefined,\n },\n ];\n }\n\n return [key, value];\n })\n )\n );\n }\n\n // Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).\n const { hashes, fileNames } = await writeBundlesAsync({\n bundles,\n useServerRendering,\n outputDir: bundlesPath,\n });\n\n Log.log('Finished saving JS Bundles');\n\n if (platforms.includes('web')) {\n if (useServerRendering) {\n await unstable_exportStaticAsync(projectRoot, {\n outputDir: outputPath,\n minify,\n basePath,\n includeMaps: dumpSourcemap,\n // @ts-expect-error: server not on type yet\n exportServer: exp.web?.output === 'server',\n });\n Log.log('Finished saving static files');\n } else {\n const cssLinks = await exportCssAssetsAsync({\n outputDir,\n bundles,\n basePath,\n });\n let html = await createTemplateHtmlFromExpoConfigAsync(projectRoot, {\n scripts: [`${basePath}/bundles/${fileNames.web}`],\n cssLinks,\n });\n // Add the favicon assets to the HTML.\n const modifyHtml = await getVirtualFaviconAssetsAsync(projectRoot, {\n outputDir,\n basePath,\n });\n if (modifyHtml) {\n html = modifyHtml(html);\n }\n // Generate SPA-styled HTML file.\n // If web exists, then write the template HTML file.\n await fs.promises.writeFile(path.join(staticFolder, 'index.html'), html);\n }\n\n // TODO: Use a different mechanism for static web.\n if (bundles.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(bundles.web.assets, {\n platform: 'web',\n outputDirectory: staticFolder,\n basePath,\n });\n }\n }\n\n // Can be empty during web-only SSG.\n // TODO: Use same asset system across platforms again.\n if (Object.keys(fileNames).length) {\n const { assets } = await exportAssetsAsync(projectRoot, {\n exp,\n outputDir: staticFolder,\n bundles,\n });\n\n if (dumpAssetmap) {\n Log.log('Dumping asset map');\n await writeAssetMapAsync({ outputDir: staticFolder, assets });\n }\n // build source maps\n if (dumpSourcemap) {\n Log.log('Dumping source maps');\n await writeSourceMapsAsync({\n bundles,\n hashes,\n outputDir: bundlesPath,\n fileNames,\n });\n\n Log.log('Preparing additional debugging files');\n // If we output source maps, then add a debug HTML file which the user can open in\n // the web browser to inspect the output like web.\n await writeDebugHtmlAsync({\n outputDir: staticFolder,\n fileNames,\n });\n }\n\n // Generate a `metadata.json` and the export is complete.\n await writeMetadataJsonAsync({ outputDir: staticFolder, bundles, fileNames });\n }\n}\n\n/**\n * Copy the contents of the public folder into the output folder.\n * This enables users to add static files like `favicon.ico` or `serve.json`.\n *\n * The contents of this folder are completely universal since they refer to\n * static network requests which fall outside the scope of React Native's magic\n * platform resolution patterns.\n */\nasync function copyPublicFolderAsync(publicFolder: string, outputFolder: string) {\n if (fs.existsSync(publicFolder)) {\n await copyAsync(publicFolder, outputFolder);\n }\n}\n"],"names":["exportAppAsync","Log","projectRoot","platforms","outputDir","clear","dev","dumpAssetmap","dumpSourcemap","minify","exp","setNodeEnv","require","load","projectConfig","getConfig","getPublicExpoManifestAsync","skipValidation","length","useServerRendering","includes","web","output","basePath","experiments","replace","trim","log","chalk","gray","startsWith","yellow","publicPath","path","resolve","env","EXPO_PUBLIC_FOLDER","outputPath","staticFolder","assetsPath","join","bundlesPath","Promise","all","map","ensureDirectoryAsync","copyPublicFolderAsync","bundles","createBundlesAsync","sourcemaps","bundleEntries","Object","entries","printBundleSizes","fromEntries","key","value","undefined","hashes","fileNames","writeBundlesAsync","unstable_exportStaticAsync","includeMaps","exportServer","cssLinks","exportCssAssetsAsync","html","createTemplateHtmlFromExpoConfigAsync","scripts","modifyHtml","getVirtualFaviconAssetsAsync","fs","promises","writeFile","persistMetroAssetsAsync","assets","platform","outputDirectory","keys","exportAssetsAsync","writeAssetMapAsync","writeSourceMapsAsync","writeDebugHtmlAsync","writeMetadataJsonAsync","publicFolder","outputFolder","existsSync","copyAsync"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/exportApp.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { exportAssetsAsync, exportCssAssetsAsync } from './exportAssets';\nimport { unstable_exportStaticAsync } from './exportStaticAsync';\nimport { getVirtualFaviconAssetsAsync } from './favicon';\nimport { createBundlesAsync } from './fork-bundleAsync';\nimport { getPublicExpoManifestAsync } from './getPublicExpoManifest';\nimport { printBundleSizes } from './printBundleSizes';\nimport { Options } from './resolveOptions';\nimport {\n writeAssetMapAsync,\n writeBundlesAsync,\n writeDebugHtmlAsync,\n writeMetadataJsonAsync,\n writeSourceMapsAsync,\n} from './writeContents';\nimport * as Log from '../log';\nimport { getBaseUrlFromExpoConfig } from '../start/server/middleware/metroOptions';\nimport { createTemplateHtmlFromExpoConfigAsync } from '../start/server/webTemplate';\nimport { copyAsync, ensureDirectoryAsync } from '../utils/dir';\nimport { env } from '../utils/env';\nimport { setNodeEnv } from '../utils/nodeEnv';\n\n/**\n * The structure of the outputDir will be:\n *\n * ```\n * ├── assets\n * │ └── *\n * ├── bundles\n * │ ├── android-01ee6e3ab3e8c16a4d926c91808d5320.js\n * │ └── ios-ee8206cc754d3f7aa9123b7f909d94ea.js\n * └── metadata.json\n * ```\n */\nexport async function exportAppAsync(\n projectRoot: string,\n {\n platforms,\n outputDir,\n clear,\n dev,\n dumpAssetmap,\n sourceMaps,\n minify,\n }: Pick<\n Options,\n 'dumpAssetmap' | 'sourceMaps' | 'dev' | 'clear' | 'outputDir' | 'platforms' | 'minify'\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 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\n const outputPath = path.resolve(projectRoot, outputDir);\n const staticFolder = outputPath;\n const assetsPath = path.join(staticFolder, 'assets');\n const bundlesPath = path.join(staticFolder, 'bundles');\n\n await Promise.all([assetsPath, bundlesPath].map(ensureDirectoryAsync));\n\n await copyPublicFolderAsync(publicPath, staticFolder);\n\n // Run metro bundler and create the JS bundles/source maps.\n const bundles = await createBundlesAsync(projectRoot, projectConfig, {\n clear: !!clear,\n minify,\n sourcemaps: sourceMaps,\n platforms: useServerRendering ? platforms.filter((platform) => platform !== 'web') : platforms,\n dev,\n });\n\n // Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).\n const { hashes, fileNames } = await writeBundlesAsync({\n bundles,\n useServerRendering,\n outputDir: bundlesPath,\n });\n const bundleEntries = Object.entries(bundles);\n if (bundleEntries.length) {\n // Log bundle size info to the user\n printBundleSizes(\n Object.fromEntries(\n bundleEntries.map(([key, value]) => {\n if (!sourceMaps) {\n return [\n key,\n {\n ...value,\n // Remove source maps from the bundles if they aren't going to be written.\n map: undefined,\n },\n ];\n }\n\n return [key, value];\n })\n )\n );\n\n Log.log('Finished saving JS Bundles');\n\n // Can be empty during web-only SSG.\n // TODO: Use same asset system across platforms again.\n const { assets, embeddedHashSet } = await exportAssetsAsync(projectRoot, {\n exp,\n outputDir: staticFolder,\n bundles,\n baseUrl,\n });\n\n if (dumpAssetmap) {\n Log.log('Dumping asset map');\n await writeAssetMapAsync({ outputDir: staticFolder, assets });\n }\n // build source maps\n if (sourceMaps) {\n Log.log('Emitting source maps');\n await writeSourceMapsAsync({\n bundles,\n hashes,\n outputDir: bundlesPath,\n fileNames,\n });\n\n Log.log('Preparing additional debugging files');\n // If we output source maps, then add a debug HTML file which the user can open in\n // the web browser to inspect the output like web.\n await writeDebugHtmlAsync({\n outputDir: staticFolder,\n fileNames,\n });\n }\n\n // Generate a `metadata.json` and the export is complete.\n await writeMetadataJsonAsync({ outputDir: staticFolder, bundles, fileNames, embeddedHashSet });\n }\n\n // Additional web-only steps...\n\n if (!platforms.includes('web')) {\n return;\n }\n\n if (useServerRendering) {\n await unstable_exportStaticAsync(projectRoot, {\n clear: !!clear,\n outputDir: outputPath,\n minify,\n baseUrl,\n includeMaps: sourceMaps,\n // @ts-expect-error: server not on type yet\n exportServer: exp.web?.output === 'server',\n });\n Log.log('Finished saving static files');\n } else {\n const cssLinks = await exportCssAssetsAsync({\n outputDir,\n bundles,\n baseUrl,\n });\n let html = await createTemplateHtmlFromExpoConfigAsync(projectRoot, {\n scripts: [`${baseUrl}/bundles/${fileNames.web}`],\n cssLinks,\n });\n // Add the favicon assets to the HTML.\n const modifyHtml = await getVirtualFaviconAssetsAsync(projectRoot, {\n outputDir,\n baseUrl,\n });\n if (modifyHtml) {\n html = modifyHtml(html);\n }\n // Generate SPA-styled HTML file.\n // If web exists, then write the template HTML file.\n await fs.promises.writeFile(path.join(staticFolder, 'index.html'), html);\n }\n}\n\n/**\n * Copy the contents of the public folder into the output folder.\n * This enables users to add static files like `favicon.ico` or `serve.json`.\n *\n * The contents of this folder are completely universal since they refer to\n * static network requests which fall outside the scope of React Native's magic\n * platform resolution patterns.\n */\nasync function copyPublicFolderAsync(publicFolder: string, outputFolder: string) {\n if (fs.existsSync(publicFolder)) {\n await copyAsync(publicFolder, outputFolder);\n }\n}\n"],"names":["exportAppAsync","Log","projectRoot","platforms","outputDir","clear","dev","dumpAssetmap","sourceMaps","minify","exp","setNodeEnv","require","load","projectConfig","getConfig","getPublicExpoManifestAsync","skipValidation","length","useServerRendering","includes","web","output","baseUrl","getBaseUrlFromExpoConfig","log","chalk","gray","startsWith","yellow","publicPath","path","resolve","env","EXPO_PUBLIC_FOLDER","outputPath","staticFolder","assetsPath","join","bundlesPath","Promise","all","map","ensureDirectoryAsync","copyPublicFolderAsync","bundles","createBundlesAsync","sourcemaps","filter","platform","hashes","fileNames","writeBundlesAsync","bundleEntries","Object","entries","printBundleSizes","fromEntries","key","value","undefined","assets","embeddedHashSet","exportAssetsAsync","writeAssetMapAsync","writeSourceMapsAsync","writeDebugHtmlAsync","writeMetadataJsonAsync","unstable_exportStaticAsync","includeMaps","exportServer","cssLinks","exportCssAssetsAsync","html","createTemplateHtmlFromExpoConfigAsync","scripts","modifyHtml","getVirtualFaviconAssetsAsync","fs","promises","writeFile","publicFolder","outputFolder","existsSync","copyAsync"],"mappings":"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"}
|
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
exports.
|
|
5
|
+
exports.assetPatternsToBeBundled = assetPatternsToBeBundled;
|
|
6
|
+
exports.resolveAssetPatternsToBeBundled = resolveAssetPatternsToBeBundled;
|
|
6
7
|
exports.exportAssetsAsync = exportAssetsAsync;
|
|
7
8
|
exports.exportCssAssetsAsync = exportCssAssetsAsync;
|
|
8
9
|
var _fs = _interopRequireDefault(require("fs"));
|
|
9
10
|
var _minimatch = _interopRequireDefault(require("minimatch"));
|
|
10
11
|
var _path = _interopRequireDefault(require("path"));
|
|
12
|
+
var _persistMetroAssets = require("./persistMetroAssets");
|
|
11
13
|
var _saveAssets = require("./saveAssets");
|
|
12
14
|
var Log = _interopRequireWildcard(require("../log"));
|
|
13
15
|
var _resolveAssets = require("../start/server/middleware/resolveAssets");
|
|
@@ -39,17 +41,39 @@ function _interopRequireWildcard(obj) {
|
|
|
39
41
|
}
|
|
40
42
|
}
|
|
41
43
|
const debug = require("debug")("expo:export:exportAssets");
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
function mapAssetHashToAssetString(asset, hash) {
|
|
45
|
+
return "asset_" + hash + ("type" in asset && asset.type ? "." + asset.type : "");
|
|
46
|
+
}
|
|
47
|
+
function assetPatternsToBeBundled(exp) {
|
|
48
|
+
var ref, ref1, ref2, ref3, ref4;
|
|
49
|
+
return (exp == null ? void 0 : (ref = exp.extra) == null ? void 0 : (ref1 = ref.updates) == null ? void 0 : (ref2 = ref1.assetPatternsToBeBundled) == null ? void 0 : ref2.length) ? exp == null ? void 0 : (ref3 = exp.extra) == null ? void 0 : (ref4 = ref3.updates) == null ? void 0 : ref4.assetPatternsToBeBundled : undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Given an asset and a set of strings representing the assets to be bundled, returns true if
|
|
53
|
+
* the asset is part of the set to be bundled.
|
|
54
|
+
* @param asset Asset object
|
|
55
|
+
* @param bundledAssetsSet Set of strings
|
|
56
|
+
* @returns true if the asset should be bundled
|
|
57
|
+
*/ function assetShouldBeIncludedInExport(asset, bundledAssetsSet) {
|
|
58
|
+
if (!bundledAssetsSet) {
|
|
59
|
+
return true;
|
|
47
60
|
}
|
|
61
|
+
return asset.fileHashes.filter((hash)=>bundledAssetsSet.has(mapAssetHashToAssetString(asset, hash))
|
|
62
|
+
).length > 0;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Computes a set of strings representing the assets to be bundled with an export, given an array of assets,
|
|
66
|
+
* and a set of patterns to match
|
|
67
|
+
* @param assets The asset array
|
|
68
|
+
* @param assetPatternsToBeBundled An array of strings with glob patterns to match
|
|
69
|
+
* @param projectRoot The project root
|
|
70
|
+
* @returns A set of asset strings
|
|
71
|
+
*/ function setOfAssetsToBeBundled(assets, assetPatternsToBeBundled1, projectRoot) {
|
|
48
72
|
// Convert asset patterns to a list of asset strings that match them.
|
|
49
73
|
// Assets strings are formatted as `asset_<hash>.<type>` and represent
|
|
50
74
|
// the name that the file will have in the app bundle. The `asset_` prefix is
|
|
51
75
|
// needed because android doesn't support assets that start with numbers.
|
|
52
|
-
const fullPatterns =
|
|
76
|
+
const fullPatterns = assetPatternsToBeBundled1.map((p)=>_path.default.join(projectRoot, p)
|
|
53
77
|
);
|
|
54
78
|
logPatterns(fullPatterns);
|
|
55
79
|
const allBundledAssets = assets.map((asset)=>{
|
|
@@ -57,18 +81,24 @@ async function resolveAssetBundlePatternsAsync(projectRoot, exp, assets) {
|
|
|
57
81
|
if (shouldBundle) {
|
|
58
82
|
var ref;
|
|
59
83
|
debug(`${shouldBundle ? "Include" : "Exclude"} asset ${(ref = asset.files) == null ? void 0 : ref[0]}`);
|
|
60
|
-
return asset.fileHashes.map((hash)=>
|
|
84
|
+
return asset.fileHashes.map((hash)=>mapAssetHashToAssetString(asset, hash)
|
|
61
85
|
);
|
|
62
86
|
}
|
|
63
87
|
return [];
|
|
64
88
|
}).flat();
|
|
65
89
|
// The assets returned by the RN packager has duplicates so make sure we
|
|
66
90
|
// only bundle each once.
|
|
67
|
-
(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
91
|
+
return new Set(allBundledAssets);
|
|
92
|
+
}
|
|
93
|
+
function resolveAssetPatternsToBeBundled(projectRoot, exp, assets) {
|
|
94
|
+
if (!assetPatternsToBeBundled(exp)) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
var ref;
|
|
98
|
+
const bundledAssets = setOfAssetsToBeBundled(assets, (ref = assetPatternsToBeBundled(exp)) != null ? ref : [
|
|
99
|
+
"**/*"
|
|
100
|
+
], projectRoot);
|
|
101
|
+
return bundledAssets;
|
|
72
102
|
}
|
|
73
103
|
function logPatterns(patterns) {
|
|
74
104
|
// Only log the patterns in debug mode, if they aren't already defined in the app.json, then all files will be targeted.
|
|
@@ -82,28 +112,58 @@ function shouldBundleAsset(asset, patterns) {
|
|
|
82
112
|
return !!("__packager_asset" in asset && asset.__packager_asset && file && patterns.some((pattern)=>(0, _minimatch).default(file, pattern)
|
|
83
113
|
));
|
|
84
114
|
}
|
|
85
|
-
async function exportAssetsAsync(projectRoot, { exp , outputDir , bundles }) {
|
|
115
|
+
async function exportAssetsAsync(projectRoot, { exp , outputDir , bundles: { web , ...bundles } , baseUrl }) {
|
|
86
116
|
var ref;
|
|
117
|
+
// NOTE: We use a different system for static web
|
|
118
|
+
if (web) {
|
|
119
|
+
// Save assets like a typical bundler, preserving the file paths on web.
|
|
120
|
+
// TODO: Update React Native Web to support loading files from asset hashes.
|
|
121
|
+
await (0, _persistMetroAssets).persistMetroAssetsAsync(web.assets, {
|
|
122
|
+
platform: "web",
|
|
123
|
+
outputDirectory: outputDir,
|
|
124
|
+
baseUrl
|
|
125
|
+
});
|
|
126
|
+
}
|
|
87
127
|
const assets = (0, _array).uniqBy(Object.values(bundles).flatMap((bundle)=>bundle.assets
|
|
88
128
|
), (asset)=>asset.hash
|
|
89
129
|
);
|
|
130
|
+
let bundledAssetsSet = undefined;
|
|
131
|
+
let filteredAssets = assets;
|
|
132
|
+
const embeddedHashSet = new Set();
|
|
90
133
|
if ((ref = assets[0]) == null ? void 0 : ref.fileHashes) {
|
|
134
|
+
debug(`Assets = ${JSON.stringify(assets, null, 2)}`);
|
|
135
|
+
// Updates the manifest to reflect additional asset bundling + configs
|
|
136
|
+
// Get only asset strings for assets we will save
|
|
137
|
+
bundledAssetsSet = resolveAssetPatternsToBeBundled(projectRoot, exp, assets);
|
|
138
|
+
if (bundledAssetsSet) {
|
|
139
|
+
debug(`Bundled assets = ${JSON.stringify([
|
|
140
|
+
...bundledAssetsSet
|
|
141
|
+
], null, 2)}`);
|
|
142
|
+
// Filter asset objects to only ones that include assetPatternsToBeBundled matches
|
|
143
|
+
filteredAssets = assets.filter((asset)=>{
|
|
144
|
+
const shouldInclude = assetShouldBeIncludedInExport(asset, bundledAssetsSet);
|
|
145
|
+
if (!shouldInclude) {
|
|
146
|
+
embeddedHashSet.add(asset.hash);
|
|
147
|
+
}
|
|
148
|
+
return shouldInclude;
|
|
149
|
+
});
|
|
150
|
+
debug(`Filtered assets count = ${filteredAssets.length}`);
|
|
151
|
+
}
|
|
91
152
|
Log.log("Saving assets");
|
|
92
|
-
await (0, _saveAssets).saveAssetsAsync(
|
|
93
|
-
assets,
|
|
153
|
+
await (0, _saveAssets).saveAssetsAsync({
|
|
154
|
+
assets: filteredAssets,
|
|
94
155
|
outputDir
|
|
95
156
|
});
|
|
96
157
|
}
|
|
97
158
|
// Add google services file if it exists
|
|
98
159
|
await (0, _resolveAssets).resolveGoogleServicesFile(projectRoot, exp);
|
|
99
|
-
// Updates the manifest to reflect additional asset bundling + configs
|
|
100
|
-
await resolveAssetBundlePatternsAsync(projectRoot, exp, assets);
|
|
101
160
|
return {
|
|
102
161
|
exp,
|
|
103
|
-
assets
|
|
162
|
+
assets,
|
|
163
|
+
embeddedHashSet
|
|
104
164
|
};
|
|
105
165
|
}
|
|
106
|
-
async function exportCssAssetsAsync({ outputDir , bundles ,
|
|
166
|
+
async function exportCssAssetsAsync({ outputDir , bundles , baseUrl }) {
|
|
107
167
|
var ref;
|
|
108
168
|
const assets = (0, _array).uniqBy(Object.values(bundles).flatMap((bundle)=>bundle.css
|
|
109
169
|
), (asset)=>asset.filename
|
|
@@ -115,7 +175,7 @@ async function exportCssAssetsAsync({ outputDir , bundles , basePath }) {
|
|
|
115
175
|
});
|
|
116
176
|
await Promise.all(assets.map((v)=>_fs.default.promises.writeFile(_path.default.join(outputDir, v.filename), v.source)
|
|
117
177
|
));
|
|
118
|
-
return assets.map((v)=>
|
|
178
|
+
return assets.map((v)=>baseUrl + "/" + v.filename
|
|
119
179
|
);
|
|
120
180
|
}
|
|
121
181
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/exportAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\nimport fs from 'fs';\nimport minimatch from 'minimatch';\nimport path from 'path';\n\nimport { BundleOutput } from './fork-bundleAsync';\nimport { Asset, saveAssetsAsync } 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\n/**\n * Resolves the assetBundlePatterns from the manifest and returns a list of assets to bundle.\n *\n * @modifies {exp}\n */\nexport async function resolveAssetBundlePatternsAsync<T extends ExpoConfig>(\n projectRoot: string,\n exp: T,\n assets: Asset[]\n): Promise<Omit<T, 'assetBundlePatterns'> & { bundledAssets?: string[] }> {\n if (!exp.assetBundlePatterns?.length || !assets.length) {\n delete exp.assetBundlePatterns;\n return exp;\n }\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[] = exp.assetBundlePatterns.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(\n (hash) => 'asset_' + hash + ('type' in asset && asset.type ? '.' + asset.type : '')\n );\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 (exp as any).bundledAssets = [...new Set(allBundledAssets)];\n delete exp.assetBundlePatterns;\n\n return exp;\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,\n }: {\n exp: ExpoConfig;\n bundles: Partial<Record<ModPlatform, BundleOutput>>;\n outputDir: string;\n }\n) {\n const assets: Asset[] = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.assets),\n (asset) => asset.hash\n );\n\n if (assets[0]?.fileHashes) {\n Log.log('Saving assets');\n await saveAssetsAsync(projectRoot, { assets, outputDir });\n }\n\n // Add google services file if it exists\n await resolveGoogleServicesFile(projectRoot, exp);\n\n // Updates the manifest to reflect additional asset bundling + configs\n await resolveAssetBundlePatternsAsync(projectRoot, exp, assets);\n\n return { exp, assets };\n}\n\nexport async function exportCssAssetsAsync({\n outputDir,\n bundles,\n basePath,\n}: {\n bundles: Partial<Record<ModPlatform, BundleOutput>>;\n outputDir: string;\n basePath: string;\n}) {\n const assets = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.css),\n (asset) => asset.filename\n );\n\n const cssDirectory = assets[0]?.filename;\n if (!cssDirectory) return [];\n\n await fs.promises.mkdir(path.join(outputDir, path.dirname(cssDirectory)), { recursive: true });\n\n await Promise.all(\n assets.map((v) => fs.promises.writeFile(path.join(outputDir, v.filename), v.source))\n );\n\n return assets.map((v) => basePath + '/' + v.filename);\n}\n"],"names":["resolveAssetBundlePatternsAsync","exportAssetsAsync","exportCssAssetsAsync","Log","debug","require","projectRoot","exp","assets","assetBundlePatterns","length","fullPatterns","map","p","path","join","logPatterns","allBundledAssets","asset","shouldBundle","shouldBundleAsset","files","fileHashes","hash","type","flat","bundledAssets","Set","patterns","log","forEach","file","__packager_asset","some","pattern","minimatch","outputDir","bundles","uniqBy","Object","values","flatMap","bundle","saveAssetsAsync","resolveGoogleServicesFile","basePath","css","filename","cssDirectory","fs","promises","mkdir","dirname","recursive","Promise","all","v","writeFile","source"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/exportAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\nimport fs from 'fs';\nimport minimatch from 'minimatch';\nimport path from 'path';\n\nimport { BundleOutput } from './fork-bundleAsync';\nimport { persistMetroAssetsAsync } from './persistMetroAssets';\nimport { Asset, saveAssetsAsync } 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 }: {\n exp: ExpoConfig;\n bundles: Partial<Record<string, BundleOutput>>;\n outputDir: string;\n baseUrl: string;\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 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 Log.log('Saving assets');\n await saveAssetsAsync({ assets: filteredAssets, outputDir });\n }\n\n // Add google services file if it exists\n await resolveGoogleServicesFile(projectRoot, exp);\n\n return { exp, assets, embeddedHashSet };\n}\n\nexport async function exportCssAssetsAsync({\n outputDir,\n bundles,\n baseUrl,\n}: {\n bundles: Partial<Record<ModPlatform, BundleOutput>>;\n outputDir: string;\n baseUrl: string;\n}) {\n const assets = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.css),\n (asset) => asset.filename\n );\n\n const cssDirectory = assets[0]?.filename;\n if (!cssDirectory) return [];\n\n await fs.promises.mkdir(path.join(outputDir, path.dirname(cssDirectory)), { recursive: true });\n\n await Promise.all(\n assets.map((v) => fs.promises.writeFile(path.join(outputDir, v.filename), v.source))\n );\n\n return assets.map((v) => baseUrl + '/' + v.filename);\n}\n"],"names":["assetPatternsToBeBundled","resolveAssetPatternsToBeBundled","exportAssetsAsync","exportCssAssetsAsync","Log","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","forEach","file","__packager_asset","some","pattern","minimatch","outputDir","bundles","web","baseUrl","persistMetroAssetsAsync","platform","outputDirectory","uniqBy","Object","values","flatMap","bundle","filteredAssets","embeddedHashSet","JSON","stringify","shouldInclude","add","saveAssetsAsync","resolveGoogleServicesFile","css","filename","cssDirectory","fs","promises","mkdir","dirname","recursive","Promise","all","v","writeFile","source"],"mappings":"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"}
|
|
@@ -14,10 +14,11 @@ exports.isHermesBytecodeBundleAsync = isHermesBytecodeBundleAsync;
|
|
|
14
14
|
exports.getHermesBytecodeBundleVersionAsync = getHermesBytecodeBundleVersionAsync;
|
|
15
15
|
var _spawnAsync = _interopRequireDefault(require("@expo/spawn-async"));
|
|
16
16
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
17
|
+
var _metroSourceMap = require("metro-source-map");
|
|
17
18
|
var _os = _interopRequireDefault(require("os"));
|
|
18
19
|
var _path = _interopRequireDefault(require("path"));
|
|
19
20
|
var _process = _interopRequireDefault(require("process"));
|
|
20
|
-
var
|
|
21
|
+
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
|
|
21
22
|
function _interopRequireDefault(obj) {
|
|
22
23
|
return obj && obj.__esModule ? obj : {
|
|
23
24
|
default: obj
|
|
@@ -37,7 +38,7 @@ function importHermesCommandFromProject(projectRoot) {
|
|
|
37
38
|
];
|
|
38
39
|
for (const location of hermescLocations){
|
|
39
40
|
try {
|
|
40
|
-
return (0,
|
|
41
|
+
return (0, _resolveFrom).default(projectRoot, location);
|
|
41
42
|
} catch {}
|
|
42
43
|
}
|
|
43
44
|
throw new Error("Cannot find the hermesc executable.");
|
|
@@ -116,10 +117,9 @@ async function buildHermesBundleAsync(projectRoot, { code , map , minify =false
|
|
|
116
117
|
}
|
|
117
118
|
}
|
|
118
119
|
async function createHermesSourcemapAsync(projectRoot, sourcemap, hermesMapFile) {
|
|
119
|
-
const composeSourceMaps = (0, _resolveFromProject).importMetroSourceMapComposeSourceMapsFromProject(projectRoot);
|
|
120
120
|
const bundlerSourcemap = JSON.parse(sourcemap);
|
|
121
121
|
const hermesSourcemap = await _fsExtra.default.readJSON(hermesMapFile);
|
|
122
|
-
return JSON.stringify(composeSourceMaps([
|
|
122
|
+
return JSON.stringify((0, _metroSourceMap).composeSourceMaps([
|
|
123
123
|
bundlerSourcemap,
|
|
124
124
|
hermesSourcemap
|
|
125
125
|
]));
|