@expo/cli 0.7.3 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/bin/cli +17 -3
- package/build/bin/cli.map +1 -1
- package/build/src/api/getExpoGoIntermediateCertificate.js +0 -2
- package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
- package/build/src/api/getProjectDevelopmentCertificate.js +0 -2
- package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
- package/build/src/api/graphql/queries/AppQuery.js +39 -0
- package/build/src/api/graphql/queries/AppQuery.js.map +1 -0
- package/build/src/api/graphql/queries/UserQuery.js +10 -3
- package/build/src/api/graphql/queries/UserQuery.js.map +1 -1
- package/build/src/api/graphql/types/App.js +23 -0
- package/build/src/api/graphql/types/App.js.map +1 -0
- package/build/src/api/signManifest.js +0 -12
- package/build/src/api/signManifest.js.map +1 -1
- package/build/src/api/user/UserSettings.js.map +1 -1
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/config/configAsync.js +3 -0
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/customize/customizeAsync.js +3 -0
- package/build/src/customize/customizeAsync.js.map +1 -1
- package/build/src/export/createBundles.js +8 -3
- package/build/src/export/createBundles.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +23 -0
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -0
- package/build/src/export/embed/index.js +117 -0
- package/build/src/export/embed/index.js.map +1 -0
- package/build/src/export/embed/resolveOptions.js +63 -0
- package/build/src/export/embed/resolveOptions.js.map +1 -0
- package/build/src/export/exportApp.js +58 -31
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +17 -0
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js +3 -0
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +179 -0
- package/build/src/export/exportStaticAsync.js.map +1 -0
- package/build/src/export/fork-bundleAsync.js +15 -43
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/html.js +21 -0
- package/build/src/export/html.js.map +1 -0
- package/build/src/export/index.js +5 -1
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/printBundleSizes.js +2 -2
- package/build/src/export/printBundleSizes.js.map +1 -1
- package/build/src/export/resolveOptions.js +1 -0
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js +3 -0
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/writeContents.js +5 -2
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/graphql/generated.js +462 -0
- package/build/src/graphql/generated.js.map +1 -0
- package/build/src/install/checkPackages.js +6 -0
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/installAsync.js +18 -1
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/prebuild/clearNativeFolder.js +6 -1
- package/build/src/prebuild/clearNativeFolder.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +3 -33
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/ensureConfigAsync.js +1 -12
- package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +7 -2
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +7 -8
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/resolveTemplate.js +5 -0
- package/build/src/prebuild/resolveTemplate.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +6 -8
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +33 -47
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/prebuild/validateTemplatePlatforms.js +48 -0
- package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -0
- package/build/src/run/android/runAndroidAsync.js +4 -0
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +25 -19
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
- package/build/src/run/ios/options/resolveNativeScheme.js +13 -4
- package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
- package/build/src/run/ios/runIosAsync.js +3 -0
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/run/startBundler.js +4 -0
- package/build/src/run/startBundler.js.map +1 -1
- package/build/src/start/doctor/Prerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +12 -6
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +13 -2
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +12 -4
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +31 -5
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/typescript/updateTSConfig.js +6 -0
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +1 -0
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
- package/build/src/start/index.js +3 -1
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +1 -1
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +16 -2
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +33 -2
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +167 -0
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -0
- package/build/src/start/server/metro/MetroBundlerDevServer.js +262 -3
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +2 -34
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/externals.js +72 -0
- package/build/src/start/server/metro/externals.js.map +1 -0
- package/build/src/start/server/metro/getCssModulesFromBundler.js +77 -0
- package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -0
- package/build/src/start/server/metro/inspector-proxy/index.js +2 -2
- package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/proxy.js +1 -3
- package/build/src/start/server/metro/inspector-proxy/proxy.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +47 -48
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +137 -0
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -0
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +51 -0
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -0
- package/build/src/start/server/metro/resolveFromProject.js +26 -3
- package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
- package/build/src/start/server/metro/router.js +15 -2
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +107 -0
- package/build/src/start/server/metro/runServer-fork.js.map +1 -0
- package/build/src/start/server/metro/symbolicate.js +6 -0
- package/build/src/start/server/metro/symbolicate.js.map +1 -0
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +70 -0
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -0
- package/build/src/start/server/metro/withMetroMultiPlatform.js +188 -45
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js +8 -1
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CreateFileMiddleware.js +6 -3
- package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +113 -47
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +59 -20
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/type-generation/expo-env.js +27 -0
- package/build/src/start/server/type-generation/expo-env.js.map +1 -0
- package/build/src/start/server/type-generation/index.js +57 -0
- package/build/src/start/server/type-generation/index.js.map +1 -0
- package/build/src/start/server/type-generation/routes.js +291 -0
- package/build/src/start/server/type-generation/routes.js.map +1 -0
- package/build/src/start/server/type-generation/tsconfig.js +89 -0
- package/build/src/start/server/type-generation/tsconfig.js.map +1 -0
- package/build/src/start/server/webTemplate.js +20 -4
- package/build/src/start/server/webTemplate.js.map +1 -1
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +4 -6
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/startAsync.js +30 -8
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/FileNotifier.js +11 -4
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/analytics/getMetroProperties.js +1 -1
- package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/codesigning.js +31 -7
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/dir.js +16 -6
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/env.js +6 -0
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/mergeGitIgnorePaths.js +42 -0
- package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
- package/build/src/utils/nodeEnv.js +11 -0
- package/build/src/utils/nodeEnv.js.map +1 -0
- package/build/src/utils/resolveArgs.js +43 -0
- package/build/src/utils/resolveArgs.js.map +1 -1
- package/build/src/utils/strings.js +24 -0
- package/build/src/utils/strings.js.map +1 -0
- package/build/src/utils/template.js +21 -0
- package/build/src/utils/template.js.map +1 -0
- package/build/src/utils/tsconfig/evaluateTsConfig.js +61 -0
- package/build/src/utils/tsconfig/evaluateTsConfig.js.map +1 -0
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +69 -0
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -0
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +88 -0
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +1 -0
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +41 -0
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -0
- package/package.json +16 -10
- package/static/template/metro.config.js +4 -1
- package/build/src/api/getProject.js +0 -19
- package/build/src/api/getProject.js.map +0 -1
- package/build/src/api/graphql/generated.js +0 -113
- package/build/src/api/graphql/generated.js.map +0 -1
- package/build/src/prebuild/writeMetroConfig.js +0 -89
- package/build/src/prebuild/writeMetroConfig.js.map +0 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.unstable_exportStaticAsync = unstable_exportStaticAsync;
|
|
6
|
+
exports.getFilesToExportFromServerAsync = getFilesToExportFromServerAsync;
|
|
7
|
+
exports.exportFromServerAsync = exportFromServerAsync;
|
|
8
|
+
exports.getHtmlFiles = getHtmlFiles;
|
|
9
|
+
exports.getPathVariations = getPathVariations;
|
|
10
|
+
var _assert = _interopRequireDefault(require("assert"));
|
|
11
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
12
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
13
|
+
var _path = _interopRequireDefault(require("path"));
|
|
14
|
+
var _prettyBytes = _interopRequireDefault(require("pretty-bytes"));
|
|
15
|
+
var _util = require("util");
|
|
16
|
+
var _log = require("../log");
|
|
17
|
+
var _devServerManager = require("../start/server/DevServerManager");
|
|
18
|
+
var _metroBundlerDevServer = require("../start/server/metro/MetroBundlerDevServer");
|
|
19
|
+
var _metroErrorInterface = require("../start/server/metro/metroErrorInterface");
|
|
20
|
+
function _interopRequireDefault(obj) {
|
|
21
|
+
return obj && obj.__esModule ? obj : {
|
|
22
|
+
default: obj
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const debug = require("debug")("expo:export:generateStaticRoutes");
|
|
26
|
+
async function unstable_exportStaticAsync(projectRoot, options) {
|
|
27
|
+
// NOTE(EvanBacon): Please don't use this feature.
|
|
28
|
+
_log.Log.warn("Static exporting with Metro is an experimental feature.");
|
|
29
|
+
const devServerManager = new _devServerManager.DevServerManager(projectRoot, {
|
|
30
|
+
minify: options.minify,
|
|
31
|
+
mode: "production",
|
|
32
|
+
location: {}
|
|
33
|
+
});
|
|
34
|
+
await devServerManager.startAsync([
|
|
35
|
+
{
|
|
36
|
+
type: "metro"
|
|
37
|
+
},
|
|
38
|
+
]);
|
|
39
|
+
await exportFromServerAsync(projectRoot, devServerManager, options);
|
|
40
|
+
await devServerManager.stopAsync();
|
|
41
|
+
}
|
|
42
|
+
/** Match `(page)` -> `page` */ function matchGroupName(name) {
|
|
43
|
+
var ref;
|
|
44
|
+
return (ref = name.match(/^\(([^/]+?)\)$/)) == null ? void 0 : ref[1];
|
|
45
|
+
}
|
|
46
|
+
async function getFilesToExportFromServerAsync(projectRoot, { manifest , renderAsync }) {
|
|
47
|
+
// name : contents
|
|
48
|
+
const files = new Map();
|
|
49
|
+
await Promise.all(getHtmlFiles({
|
|
50
|
+
manifest
|
|
51
|
+
}).map(async (outputPath)=>{
|
|
52
|
+
const pathname = outputPath.replace(/(index)?\.html$/, "");
|
|
53
|
+
try {
|
|
54
|
+
files.set(outputPath, "");
|
|
55
|
+
const data = await renderAsync(pathname);
|
|
56
|
+
files.set(outputPath, data);
|
|
57
|
+
} catch (e) {
|
|
58
|
+
await (0, _metroErrorInterface).logMetroErrorAsync({
|
|
59
|
+
error: e,
|
|
60
|
+
projectRoot
|
|
61
|
+
});
|
|
62
|
+
throw new Error("Failed to statically export route: " + pathname);
|
|
63
|
+
}
|
|
64
|
+
}));
|
|
65
|
+
return files;
|
|
66
|
+
}
|
|
67
|
+
async function exportFromServerAsync(projectRoot, devServerManager, { outputDir , minify }) {
|
|
68
|
+
const devServer = devServerManager.getDefaultDevServer();
|
|
69
|
+
(0, _assert).default(devServer instanceof _metroBundlerDevServer.MetroBundlerDevServer);
|
|
70
|
+
const [manifest, resources, renderAsync] = await Promise.all([
|
|
71
|
+
devServer.getRoutesAsync(),
|
|
72
|
+
devServer.getStaticResourcesAsync({
|
|
73
|
+
mode: "production",
|
|
74
|
+
minify
|
|
75
|
+
}),
|
|
76
|
+
devServer.getStaticRenderFunctionAsync({
|
|
77
|
+
mode: "production",
|
|
78
|
+
minify
|
|
79
|
+
}),
|
|
80
|
+
]);
|
|
81
|
+
debug("Routes:\n", (0, _util).inspect(manifest, {
|
|
82
|
+
colors: true,
|
|
83
|
+
depth: null
|
|
84
|
+
}));
|
|
85
|
+
const files = await getFilesToExportFromServerAsync(projectRoot, {
|
|
86
|
+
manifest,
|
|
87
|
+
async renderAsync (pathname) {
|
|
88
|
+
const template = await renderAsync(pathname);
|
|
89
|
+
return devServer.composeResourcesWithHtml({
|
|
90
|
+
mode: "production",
|
|
91
|
+
resources,
|
|
92
|
+
template
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
resources.forEach((resource)=>{
|
|
97
|
+
files.set(resource.filename, resource.source);
|
|
98
|
+
});
|
|
99
|
+
_fs.default.mkdirSync(_path.default.join(outputDir), {
|
|
100
|
+
recursive: true
|
|
101
|
+
});
|
|
102
|
+
_log.Log.log("");
|
|
103
|
+
_log.Log.log(_chalk.default.bold`Exporting ${files.size} files:`);
|
|
104
|
+
await Promise.all([
|
|
105
|
+
...files.entries()
|
|
106
|
+
].sort(([a], [b])=>a.localeCompare(b)
|
|
107
|
+
).map(async ([file, contents])=>{
|
|
108
|
+
const length = Buffer.byteLength(contents, "utf8");
|
|
109
|
+
_log.Log.log(file, _chalk.default.gray`(${(0, _prettyBytes).default(length)})`);
|
|
110
|
+
const outputPath = _path.default.join(outputDir, file);
|
|
111
|
+
await _fs.default.promises.mkdir(_path.default.dirname(outputPath), {
|
|
112
|
+
recursive: true
|
|
113
|
+
});
|
|
114
|
+
await _fs.default.promises.writeFile(outputPath, contents);
|
|
115
|
+
}));
|
|
116
|
+
_log.Log.log("");
|
|
117
|
+
}
|
|
118
|
+
function getHtmlFiles({ manifest }) {
|
|
119
|
+
const htmlFiles = new Set();
|
|
120
|
+
function traverseScreens(screens, basePath = "") {
|
|
121
|
+
for (const value of Object.values(screens)){
|
|
122
|
+
if (typeof value === "string") {
|
|
123
|
+
let filePath = basePath + value;
|
|
124
|
+
if (value === "") {
|
|
125
|
+
filePath = basePath === "" ? "index" : basePath.endsWith("/") ? basePath + "index" : basePath.slice(0, -1);
|
|
126
|
+
}
|
|
127
|
+
// TODO: Dedupe requests for alias routes.
|
|
128
|
+
addOptionalGroups(filePath);
|
|
129
|
+
} else if (typeof value === "object" && (value == null ? void 0 : value.screens)) {
|
|
130
|
+
const newPath = basePath + value.path + "/";
|
|
131
|
+
traverseScreens(value.screens, newPath);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function addOptionalGroups(path) {
|
|
136
|
+
const variations = getPathVariations(path);
|
|
137
|
+
for (const variation of variations){
|
|
138
|
+
htmlFiles.add(variation);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
traverseScreens(manifest.screens);
|
|
142
|
+
return Array.from(htmlFiles).map((value)=>{
|
|
143
|
+
const parts = value.split("/");
|
|
144
|
+
// Replace `:foo` with `[foo]` and `*foo` with `[...foo]`
|
|
145
|
+
const partsWithGroups = parts.map((part)=>{
|
|
146
|
+
if (part.startsWith(":")) {
|
|
147
|
+
return `[${part.slice(1)}]`;
|
|
148
|
+
} else if (part.startsWith("*")) {
|
|
149
|
+
return `[...${part.slice(1)}]`;
|
|
150
|
+
}
|
|
151
|
+
return part;
|
|
152
|
+
});
|
|
153
|
+
return partsWithGroups.join("/") + ".html";
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function getPathVariations(routePath) {
|
|
157
|
+
const variations = new Set([
|
|
158
|
+
routePath
|
|
159
|
+
]);
|
|
160
|
+
const segments1 = routePath.split("/");
|
|
161
|
+
function generateVariations(segments, index) {
|
|
162
|
+
if (index >= segments.length) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const newSegments = [
|
|
166
|
+
...segments
|
|
167
|
+
];
|
|
168
|
+
while(index < newSegments.length && matchGroupName(newSegments[index]) && newSegments.length > 1){
|
|
169
|
+
newSegments.splice(index, 1);
|
|
170
|
+
variations.add(newSegments.join("/"));
|
|
171
|
+
generateVariations(newSegments, index + 1);
|
|
172
|
+
}
|
|
173
|
+
generateVariations(segments, index + 1);
|
|
174
|
+
}
|
|
175
|
+
generateVariations(segments1, 0);
|
|
176
|
+
return Array.from(variations);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
//# sourceMappingURL=exportStaticAsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/export/exportStaticAsync.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport prettyBytes from 'pretty-bytes';\nimport { inspect } from 'util';\n\nimport { Log } from '../log';\nimport { DevServerManager } from '../start/server/DevServerManager';\nimport { MetroBundlerDevServer } from '../start/server/metro/MetroBundlerDevServer';\nimport { logMetroErrorAsync } from '../start/server/metro/metroErrorInterface';\n\nconst debug = require('debug')('expo:export:generateStaticRoutes') as typeof console.log;\n\ntype Options = { outputDir: string; minify: boolean };\n\n/** @private */\nexport async function unstable_exportStaticAsync(projectRoot: string, options: Options) {\n // NOTE(EvanBacon): Please don't use this feature.\n Log.warn('Static exporting with Metro is an experimental feature.');\n\n const devServerManager = new DevServerManager(projectRoot, {\n minify: options.minify,\n mode: 'production',\n location: {},\n });\n\n await devServerManager.startAsync([\n {\n type: 'metro',\n },\n ]);\n\n await exportFromServerAsync(projectRoot, devServerManager, options);\n\n await devServerManager.stopAsync();\n}\n\n/** Match `(page)` -> `page` */\nfunction matchGroupName(name: string): string | undefined {\n return name.match(/^\\(([^/]+?)\\)$/)?.[1];\n}\n\nexport async function getFilesToExportFromServerAsync(\n projectRoot: string,\n {\n manifest,\n renderAsync,\n }: {\n manifest: any;\n renderAsync: (pathname: string) => Promise<string>;\n }\n): Promise<Map<string, string>> {\n // name : contents\n const files = new Map<string, string>();\n\n await Promise.all(\n getHtmlFiles({ manifest }).map(async (outputPath) => {\n const pathname = outputPath.replace(/(index)?\\.html$/, '');\n try {\n files.set(outputPath, '');\n const data = await renderAsync(pathname);\n files.set(outputPath, data);\n } catch (e: any) {\n await logMetroErrorAsync({ error: e, projectRoot });\n throw new Error('Failed to statically export route: ' + pathname);\n }\n })\n );\n\n return files;\n}\n\n/** Perform all fs commits */\nexport async function exportFromServerAsync(\n projectRoot: string,\n devServerManager: DevServerManager,\n { outputDir, minify }: Options\n): Promise<void> {\n const devServer = devServerManager.getDefaultDevServer();\n assert(devServer instanceof MetroBundlerDevServer);\n\n const [manifest, resources, renderAsync] = await Promise.all([\n devServer.getRoutesAsync(),\n devServer.getStaticResourcesAsync({ mode: 'production', minify }),\n devServer.getStaticRenderFunctionAsync({\n mode: 'production',\n minify,\n }),\n ]);\n\n debug('Routes:\\n', inspect(manifest, { colors: true, depth: null }));\n\n const files = await getFilesToExportFromServerAsync(projectRoot, {\n manifest,\n async renderAsync(pathname: string) {\n const template = await renderAsync(pathname);\n return devServer.composeResourcesWithHtml({\n mode: 'production',\n resources,\n template,\n });\n },\n });\n\n resources.forEach((resource) => {\n files.set(resource.filename, resource.source);\n });\n\n fs.mkdirSync(path.join(outputDir), { recursive: true });\n\n Log.log('');\n Log.log(chalk.bold`Exporting ${files.size} files:`);\n await Promise.all(\n [...files.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(async ([file, contents]) => {\n const length = Buffer.byteLength(contents, 'utf8');\n Log.log(file, chalk.gray`(${prettyBytes(length)})`);\n const outputPath = path.join(outputDir, file);\n await fs.promises.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.promises.writeFile(outputPath, contents);\n })\n );\n Log.log('');\n}\n\nexport function getHtmlFiles({ manifest }: { manifest: any }): string[] {\n const htmlFiles = new Set<string>();\n\n function traverseScreens(screens: string | { screens: any; path: string }, basePath = '') {\n for (const value of Object.values(screens)) {\n if (typeof value === 'string') {\n let filePath = basePath + value;\n if (value === '') {\n filePath =\n basePath === ''\n ? 'index'\n : basePath.endsWith('/')\n ? basePath + 'index'\n : basePath.slice(0, -1);\n }\n // TODO: Dedupe requests for alias routes.\n addOptionalGroups(filePath);\n } else if (typeof value === 'object' && value?.screens) {\n const newPath = basePath + value.path + '/';\n traverseScreens(value.screens, newPath);\n }\n }\n }\n\n function addOptionalGroups(path: string) {\n const variations = getPathVariations(path);\n for (const variation of variations) {\n htmlFiles.add(variation);\n }\n }\n\n traverseScreens(manifest.screens);\n\n return Array.from(htmlFiles).map((value) => {\n const parts = value.split('/');\n // Replace `:foo` with `[foo]` and `*foo` with `[...foo]`\n const partsWithGroups = parts.map((part) => {\n if (part.startsWith(':')) {\n return `[${part.slice(1)}]`;\n } else if (part.startsWith('*')) {\n return `[...${part.slice(1)}]`;\n }\n return part;\n });\n return partsWithGroups.join('/') + '.html';\n });\n}\n\n// Given a route like `(foo)/bar/(baz)`, return all possible variations of the route.\n// e.g. `(foo)/bar/(baz)`, `(foo)/bar/baz`, `foo/bar/(baz)`, `foo/bar/baz`,\nexport function getPathVariations(routePath: string): string[] {\n const variations = new Set<string>([routePath]);\n const segments = routePath.split('/');\n\n function generateVariations(segments: string[], index: number): void {\n if (index >= segments.length) {\n return;\n }\n\n const newSegments = [...segments];\n while (\n index < newSegments.length &&\n matchGroupName(newSegments[index]) &&\n newSegments.length > 1\n ) {\n newSegments.splice(index, 1);\n variations.add(newSegments.join('/'));\n generateVariations(newSegments, index + 1);\n }\n\n generateVariations(segments, index + 1);\n }\n\n generateVariations(segments, 0);\n\n return Array.from(variations);\n}\n"],"names":["unstable_exportStaticAsync","getFilesToExportFromServerAsync","exportFromServerAsync","getHtmlFiles","getPathVariations","debug","require","projectRoot","options","Log","warn","devServerManager","DevServerManager","minify","mode","location","startAsync","type","stopAsync","matchGroupName","name","match","manifest","renderAsync","files","Map","Promise","all","map","outputPath","pathname","replace","set","data","e","logMetroErrorAsync","error","Error","outputDir","devServer","getDefaultDevServer","assert","MetroBundlerDevServer","resources","getRoutesAsync","getStaticResourcesAsync","getStaticRenderFunctionAsync","inspect","colors","depth","template","composeResourcesWithHtml","forEach","resource","filename","source","fs","mkdirSync","path","join","recursive","log","chalk","bold","size","entries","sort","a","b","localeCompare","file","contents","length","Buffer","byteLength","gray","prettyBytes","promises","mkdir","dirname","writeFile","htmlFiles","Set","traverseScreens","screens","basePath","value","Object","values","filePath","endsWith","slice","addOptionalGroups","newPath","variations","variation","add","Array","from","parts","split","partsWithGroups","part","startsWith","routePath","segments","generateVariations","index","newSegments","splice"],"mappings":"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"}
|
|
@@ -7,29 +7,13 @@ var _config = require("@expo/config");
|
|
|
7
7
|
var _hermesBundler = require("@expo/dev-server/build/HermesBundler");
|
|
8
8
|
var _importMetroFromProject = require("@expo/dev-server/build/metro/importMetroFromProject");
|
|
9
9
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var _withMetroMultiPlatform = require("../start/server/metro/withMetroMultiPlatform");
|
|
13
|
-
var _platformBundlers = require("../start/server/platformBundlers");
|
|
14
|
-
var _getMetroProperties = require("../utils/analytics/getMetroProperties");
|
|
15
|
-
var _rudderstackClient = require("../utils/analytics/rudderstackClient");
|
|
10
|
+
var _getCssModulesFromBundler = require("../start/server/metro/getCssModulesFromBundler");
|
|
11
|
+
var _instantiateMetro = require("../start/server/metro/instantiateMetro");
|
|
16
12
|
function _interopRequireDefault(obj) {
|
|
17
13
|
return obj && obj.__esModule ? obj : {
|
|
18
14
|
default: obj
|
|
19
15
|
};
|
|
20
16
|
}
|
|
21
|
-
function getExpoMetroConfig(projectRoot, { logger }) {
|
|
22
|
-
try {
|
|
23
|
-
return (0, _importMetroFromProject).importExpoMetroConfigFromProject(projectRoot);
|
|
24
|
-
} catch {
|
|
25
|
-
// If expo isn't installed, use the unversioned config and warn about installing expo.
|
|
26
|
-
}
|
|
27
|
-
const unversionedVersion = require("@expo/metro-config/package.json").version;
|
|
28
|
-
logger.info({
|
|
29
|
-
tag: "expo"
|
|
30
|
-
}, _chalk.default.gray(`\u203A Unversioned ${_chalk.default.bold`@expo/metro-config@${unversionedVersion}`} is being used. Bundling apps may not work as expected, and is subject to breaking changes. Install ${_chalk.default.bold`expo`} or set the app.json sdkVersion to use a stable version of @expo/metro-config.`));
|
|
31
|
-
return require("@expo/metro-config");
|
|
32
|
-
}
|
|
33
17
|
let nextBuildID = 0;
|
|
34
18
|
// Fork of @expo/dev-server bundleAsync to add Metro logging back.
|
|
35
19
|
async function assertEngineMismatchAsync(projectRoot, exp, platform) {
|
|
@@ -46,24 +30,9 @@ async function bundleAsync(projectRoot, expoConfig, options, bundles) {
|
|
|
46
30
|
));
|
|
47
31
|
const metro = (0, _importMetroFromProject).importMetroFromProject(projectRoot);
|
|
48
32
|
const Server = (0, _importMetroFromProject).importMetroServerFromProject(projectRoot);
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
const reporter = {
|
|
52
|
-
update (event) {
|
|
53
|
-
terminalReporter.update(event);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
const ExpoMetroConfig = getExpoMetroConfig(projectRoot, options);
|
|
57
|
-
const { exp } = (0, _config).getConfig(projectRoot, {
|
|
58
|
-
skipSDKVersionRequirement: true
|
|
59
|
-
});
|
|
60
|
-
let config = await ExpoMetroConfig.loadAsync(projectRoot, {
|
|
61
|
-
reporter,
|
|
62
|
-
...options
|
|
33
|
+
const { config , reporter } = await (0, _instantiateMetro).loadMetroConfigAsync(projectRoot, options, {
|
|
34
|
+
exp: expoConfig
|
|
63
35
|
});
|
|
64
|
-
const bundlerPlatforms = (0, _platformBundlers).getPlatformBundlers(exp);
|
|
65
|
-
config = await (0, _withMetroMultiPlatform).withMetroMultiPlatformAsync(projectRoot, config, bundlerPlatforms);
|
|
66
|
-
(0, _rudderstackClient).logEventAsync("metro config", (0, _getMetroProperties).getMetroProperties(projectRoot, exp, config));
|
|
67
36
|
const metroServer = await metro.runMetro(config, {
|
|
68
37
|
watch: false
|
|
69
38
|
});
|
|
@@ -83,7 +52,7 @@ async function bundleAsync(projectRoot, expoConfig, options, bundles) {
|
|
|
83
52
|
createModuleIdFactory: config.serializer.createModuleIdFactory,
|
|
84
53
|
onProgress: (transformedFileCount, totalFileCount)=>{
|
|
85
54
|
if (!options.quiet) {
|
|
86
|
-
|
|
55
|
+
reporter.update({
|
|
87
56
|
buildID,
|
|
88
57
|
type: "bundle_transform_progressed",
|
|
89
58
|
transformedFileCount,
|
|
@@ -96,26 +65,29 @@ async function bundleAsync(projectRoot, expoConfig, options, bundles) {
|
|
|
96
65
|
...bundleOptions,
|
|
97
66
|
buildID
|
|
98
67
|
};
|
|
99
|
-
|
|
68
|
+
reporter.update({
|
|
100
69
|
buildID,
|
|
101
70
|
type: "bundle_build_started",
|
|
102
|
-
// @ts-expect-error: TODO
|
|
103
71
|
bundleDetails
|
|
104
72
|
});
|
|
105
73
|
try {
|
|
106
74
|
const { code , map } = await metroServer.build(bundleOptions);
|
|
107
|
-
const assets = await
|
|
108
|
-
|
|
75
|
+
const [assets, css] = await Promise.all([
|
|
76
|
+
metroServer.getAssets(bundleOptions),
|
|
77
|
+
(0, _getCssModulesFromBundler).getCssModulesFromBundler(config, metroServer.getBundler(), bundleOptions),
|
|
78
|
+
]);
|
|
79
|
+
reporter.update({
|
|
109
80
|
buildID,
|
|
110
81
|
type: "bundle_build_done"
|
|
111
82
|
});
|
|
112
83
|
return {
|
|
113
84
|
code,
|
|
114
85
|
map,
|
|
115
|
-
assets
|
|
86
|
+
assets: assets,
|
|
87
|
+
css
|
|
116
88
|
};
|
|
117
89
|
} catch (error) {
|
|
118
|
-
|
|
90
|
+
reporter.update({
|
|
119
91
|
buildID,
|
|
120
92
|
type: "bundle_build_failed"
|
|
121
93
|
});
|
|
@@ -131,7 +103,7 @@ async function bundleAsync(projectRoot, expoConfig, options, bundles) {
|
|
|
131
103
|
android: "Android",
|
|
132
104
|
web: "Web"
|
|
133
105
|
}[platform] || platform);
|
|
134
|
-
|
|
106
|
+
reporter.terminal.log(`${platformTag} Building Hermes bytecode for the bundle`);
|
|
135
107
|
var _minify;
|
|
136
108
|
const hermesBundleOutput = await (0, _hermesBundler).buildHermesBundleAsync(projectRoot, bundleOutput.code, bundleOutput.map, (_minify = bundle.minify) != null ? _minify : !bundle.dev);
|
|
137
109
|
bundleOutput.hermesBytecodeBundle = hermesBundleOutput.hbc;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/fork-bundleAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig, getConfigFilePaths, Platform } from '@expo/config';\nimport {\n buildHermesBundleAsync,\n isEnableHermesManaged,\n maybeThrowFromInconsistentEngineAsync,\n} from '@expo/dev-server/build/HermesBundler';\nimport {\n importExpoMetroConfigFromProject,\n importMetroFromProject,\n importMetroServerFromProject,\n} from '@expo/dev-server/build/metro/importMetroFromProject';\nimport { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport Metro from 'metro';\nimport { Terminal } from 'metro-core';\n\nimport { MetroTerminalReporter } from '../start/server/metro/MetroTerminalReporter';\nimport { withMetroMultiPlatformAsync } from '../start/server/metro/withMetroMultiPlatform';\nimport { getPlatformBundlers } from '../start/server/platformBundlers';\nimport { getMetroProperties } from '../utils/analytics/getMetroProperties';\nimport { logEventAsync } from '../utils/analytics/rudderstackClient';\n\nexport type MetroDevServerOptions = LoadOptions & {\n logger: import('@expo/bunyan');\n quiet?: boolean;\n};\nexport type BundleOptions = {\n entryPoint: string;\n platform: 'android' | 'ios' | 'web';\n dev?: boolean;\n minify?: boolean;\n sourceMapUrl?: string;\n};\nexport type BundleAssetWithFileHashes = Metro.AssetData & {\n fileHashes: string[]; // added by the hashAssets asset plugin\n};\nexport type BundleOutput = {\n code: string;\n map?: string;\n hermesBytecodeBundle?: Uint8Array;\n hermesSourcemap?: string;\n assets: readonly BundleAssetWithFileHashes[];\n};\n\nfunction getExpoMetroConfig(\n projectRoot: string,\n { logger }: Pick<MetroDevServerOptions, 'logger'>\n): typeof import('@expo/metro-config') {\n try {\n return importExpoMetroConfigFromProject(projectRoot);\n } catch {\n // If expo isn't installed, use the unversioned config and warn about installing expo.\n }\n\n const unversionedVersion = require('@expo/metro-config/package.json').version;\n logger.info(\n { tag: 'expo' },\n chalk.gray(\n `\\u203A Unversioned ${chalk.bold`@expo/metro-config@${unversionedVersion}`} is being used. Bundling apps may not work as expected, and is subject to breaking changes. Install ${chalk.bold`expo`} or set the app.json sdkVersion to use a stable version of @expo/metro-config.`\n )\n );\n\n return require('@expo/metro-config');\n}\n\nlet nextBuildID = 0;\n\n// Fork of @expo/dev-server bundleAsync to add Metro logging back.\n\nasync function assertEngineMismatchAsync(projectRoot: string, exp: ExpoConfig, platform: Platform) {\n const isHermesManaged = isEnableHermesManaged(exp, platform);\n\n const paths = getConfigFilePaths(projectRoot);\n const configFilePath = paths.dynamicConfigPath ?? paths.staticConfigPath ?? 'app.json';\n await maybeThrowFromInconsistentEngineAsync(\n projectRoot,\n configFilePath,\n platform,\n isHermesManaged\n );\n}\n\nexport async function bundleAsync(\n projectRoot: string,\n expoConfig: ExpoConfig,\n options: MetroDevServerOptions,\n bundles: BundleOptions[]\n): Promise<BundleOutput[]> {\n // Assert early so the user doesn't have to wait until bundling is complete to find out that\n // Hermes won't be available.\n await Promise.all(\n bundles.map(({ platform }) => assertEngineMismatchAsync(projectRoot, expoConfig, platform))\n );\n\n const metro = importMetroFromProject(projectRoot);\n const Server = importMetroServerFromProject(projectRoot);\n\n const terminal = new Terminal(process.stdout);\n const terminalReporter = new MetroTerminalReporter(projectRoot, terminal);\n\n const reporter = {\n update(event: any) {\n terminalReporter.update(event);\n },\n };\n\n const ExpoMetroConfig = getExpoMetroConfig(projectRoot, options);\n\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n let config = await ExpoMetroConfig.loadAsync(projectRoot, { reporter, ...options });\n\n const bundlerPlatforms = getPlatformBundlers(exp);\n\n config = await withMetroMultiPlatformAsync(projectRoot, config, bundlerPlatforms);\n\n logEventAsync('metro config', getMetroProperties(projectRoot, exp, config));\n\n const metroServer = await metro.runMetro(config, {\n watch: false,\n });\n\n const buildAsync = async (bundle: BundleOptions): Promise<BundleOutput> => {\n const buildID = `bundle_${nextBuildID++}_${bundle.platform}`;\n const isHermes = isEnableHermesManaged(expoConfig, bundle.platform);\n const bundleOptions: Metro.BundleOptions = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n bundleType: 'bundle',\n platform: bundle.platform,\n entryFile: bundle.entryPoint,\n dev: bundle.dev ?? false,\n minify: !isHermes && (bundle.minify ?? !bundle.dev),\n inlineSourceMap: false,\n sourceMapUrl: bundle.sourceMapUrl,\n createModuleIdFactory: config.serializer.createModuleIdFactory,\n onProgress: (transformedFileCount: number, totalFileCount: number) => {\n if (!options.quiet) {\n terminalReporter.update({\n buildID,\n type: 'bundle_transform_progressed',\n transformedFileCount,\n totalFileCount,\n });\n }\n },\n };\n const bundleDetails = {\n ...bundleOptions,\n buildID,\n };\n terminalReporter.update({\n buildID,\n type: 'bundle_build_started',\n // @ts-expect-error: TODO\n bundleDetails,\n });\n try {\n const { code, map } = await metroServer.build(bundleOptions);\n const assets = (await metroServer.getAssets(\n bundleOptions\n )) as readonly BundleAssetWithFileHashes[];\n terminalReporter.update({\n buildID,\n type: 'bundle_build_done',\n });\n return { code, map, assets };\n } catch (error) {\n terminalReporter.update({\n buildID,\n type: 'bundle_build_failed',\n });\n\n throw error;\n }\n };\n\n const maybeAddHermesBundleAsync = async (\n bundle: BundleOptions,\n bundleOutput: BundleOutput\n ): Promise<BundleOutput> => {\n const { platform } = bundle;\n const isHermesManaged = isEnableHermesManaged(expoConfig, platform);\n if (isHermesManaged) {\n const platformTag = chalk.bold(\n { ios: 'iOS', android: 'Android', web: 'Web' }[platform] || platform\n );\n\n terminalReporter.terminal.log(`${platformTag} Building Hermes bytecode for the bundle`);\n\n const hermesBundleOutput = await buildHermesBundleAsync(\n projectRoot,\n bundleOutput.code,\n bundleOutput.map!,\n bundle.minify ?? !bundle.dev\n );\n bundleOutput.hermesBytecodeBundle = hermesBundleOutput.hbc;\n bundleOutput.hermesSourcemap = hermesBundleOutput.sourcemap;\n }\n return bundleOutput;\n };\n\n try {\n const intermediateOutputs = await Promise.all(bundles.map((bundle) => buildAsync(bundle)));\n const bundleOutputs: BundleOutput[] = [];\n for (let i = 0; i < bundles.length; ++i) {\n // hermesc does not support parallel building even we spawn processes.\n // we should build them sequentially.\n bundleOutputs.push(await maybeAddHermesBundleAsync(bundles[i], intermediateOutputs[i]));\n }\n return bundleOutputs;\n } catch (error) {\n // New line so errors don't show up inline with the progress bar\n console.log('');\n throw error;\n } finally {\n metroServer.end();\n }\n}\n"],"names":["bundleAsync","getExpoMetroConfig","projectRoot","logger","importExpoMetroConfigFromProject","unversionedVersion","require","version","info","tag","chalk","gray","bold","nextBuildID","assertEngineMismatchAsync","exp","platform","isHermesManaged","isEnableHermesManaged","paths","getConfigFilePaths","configFilePath","dynamicConfigPath","staticConfigPath","maybeThrowFromInconsistentEngineAsync","expoConfig","options","bundles","Promise","all","map","metro","importMetroFromProject","Server","importMetroServerFromProject","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","ExpoMetroConfig","getConfig","skipSDKVersionRequirement","config","loadAsync","bundlerPlatforms","getPlatformBundlers","withMetroMultiPlatformAsync","logEventAsync","getMetroProperties","metroServer","runMetro","watch","buildAsync","bundle","buildID","isHermes","bundleOptions","DEFAULT_BUNDLE_OPTIONS","bundleType","entryFile","entryPoint","dev","minify","inlineSourceMap","sourceMapUrl","createModuleIdFactory","serializer","onProgress","transformedFileCount","totalFileCount","quiet","type","bundleDetails","code","build","assets","getAssets","error","maybeAddHermesBundleAsync","bundleOutput","platformTag","ios","android","web","log","hermesBundleOutput","buildHermesBundleAsync","hermesBytecodeBundle","hbc","hermesSourcemap","sourcemap","intermediateOutputs","bundleOutputs","i","length","push","console","end"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/fork-bundleAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfigFilePaths, Platform } from '@expo/config';\nimport {\n buildHermesBundleAsync,\n isEnableHermesManaged,\n maybeThrowFromInconsistentEngineAsync,\n} from '@expo/dev-server/build/HermesBundler';\nimport {\n importMetroFromProject,\n importMetroServerFromProject,\n} from '@expo/dev-server/build/metro/importMetroFromProject';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport Metro from 'metro';\nimport type { BundleOptions as MetroBundleOptions } from 'metro/src/shared/types';\n\nimport { CSSAsset, getCssModulesFromBundler } from '../start/server/metro/getCssModulesFromBundler';\nimport { loadMetroConfigAsync } from '../start/server/metro/instantiateMetro';\n\nexport type MetroDevServerOptions = LoadOptions & {\n logger: import('@expo/bunyan');\n quiet?: boolean;\n};\nexport type BundleOptions = {\n entryPoint: string;\n platform: 'android' | 'ios' | 'web';\n dev?: boolean;\n minify?: boolean;\n sourceMapUrl?: string;\n};\nexport type BundleAssetWithFileHashes = Metro.AssetData & {\n fileHashes: string[]; // added by the hashAssets asset plugin\n};\nexport type BundleOutput = {\n code: string;\n map?: string;\n hermesBytecodeBundle?: Uint8Array;\n hermesSourcemap?: string;\n css: CSSAsset[];\n assets: readonly BundleAssetWithFileHashes[];\n};\n\nlet nextBuildID = 0;\n\n// Fork of @expo/dev-server bundleAsync to add Metro logging back.\n\nasync function assertEngineMismatchAsync(projectRoot: string, exp: ExpoConfig, platform: Platform) {\n const isHermesManaged = isEnableHermesManaged(exp, platform);\n\n const paths = getConfigFilePaths(projectRoot);\n const configFilePath = paths.dynamicConfigPath ?? paths.staticConfigPath ?? 'app.json';\n await maybeThrowFromInconsistentEngineAsync(\n projectRoot,\n configFilePath,\n platform,\n isHermesManaged\n );\n}\n\nexport async function bundleAsync(\n projectRoot: string,\n expoConfig: ExpoConfig,\n options: MetroDevServerOptions,\n bundles: BundleOptions[]\n): Promise<BundleOutput[]> {\n // Assert early so the user doesn't have to wait until bundling is complete to find out that\n // Hermes won't be available.\n await Promise.all(\n bundles.map(({ platform }) => assertEngineMismatchAsync(projectRoot, expoConfig, platform))\n );\n\n const metro = importMetroFromProject(projectRoot);\n const Server = importMetroServerFromProject(projectRoot);\n\n const { config, reporter } = await loadMetroConfigAsync(projectRoot, options, {\n exp: expoConfig,\n });\n\n const metroServer = await metro.runMetro(config, {\n watch: false,\n });\n\n const buildAsync = async (bundle: BundleOptions): Promise<BundleOutput> => {\n const buildID = `bundle_${nextBuildID++}_${bundle.platform}`;\n const isHermes = isEnableHermesManaged(expoConfig, bundle.platform);\n const bundleOptions: MetroBundleOptions = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n bundleType: 'bundle',\n platform: bundle.platform,\n entryFile: bundle.entryPoint,\n dev: bundle.dev ?? false,\n minify: !isHermes && (bundle.minify ?? !bundle.dev),\n inlineSourceMap: false,\n sourceMapUrl: bundle.sourceMapUrl,\n createModuleIdFactory: config.serializer.createModuleIdFactory,\n onProgress: (transformedFileCount: number, totalFileCount: number) => {\n if (!options.quiet) {\n reporter.update({\n buildID,\n type: 'bundle_transform_progressed',\n transformedFileCount,\n totalFileCount,\n });\n }\n },\n };\n const bundleDetails = {\n ...bundleOptions,\n buildID,\n };\n reporter.update({\n buildID,\n type: 'bundle_build_started',\n bundleDetails,\n });\n try {\n const { code, map } = await metroServer.build(bundleOptions);\n const [assets, css] = await Promise.all([\n metroServer.getAssets(bundleOptions),\n getCssModulesFromBundler(config, metroServer.getBundler(), bundleOptions),\n ]);\n\n reporter.update({\n buildID,\n type: 'bundle_build_done',\n });\n return { code, map, assets: assets as readonly BundleAssetWithFileHashes[], css };\n } catch (error) {\n reporter.update({\n buildID,\n type: 'bundle_build_failed',\n });\n\n throw error;\n }\n };\n\n const maybeAddHermesBundleAsync = async (\n bundle: BundleOptions,\n bundleOutput: BundleOutput\n ): Promise<BundleOutput> => {\n const { platform } = bundle;\n const isHermesManaged = isEnableHermesManaged(expoConfig, platform);\n if (isHermesManaged) {\n const platformTag = chalk.bold(\n { ios: 'iOS', android: 'Android', web: 'Web' }[platform] || platform\n );\n\n reporter.terminal.log(`${platformTag} Building Hermes bytecode for the bundle`);\n\n const hermesBundleOutput = await buildHermesBundleAsync(\n projectRoot,\n bundleOutput.code,\n bundleOutput.map!,\n bundle.minify ?? !bundle.dev\n );\n bundleOutput.hermesBytecodeBundle = hermesBundleOutput.hbc;\n bundleOutput.hermesSourcemap = hermesBundleOutput.sourcemap;\n }\n return bundleOutput;\n };\n\n try {\n const intermediateOutputs = await Promise.all(bundles.map((bundle) => buildAsync(bundle)));\n const bundleOutputs: BundleOutput[] = [];\n for (let i = 0; i < bundles.length; ++i) {\n // hermesc does not support parallel building even we spawn processes.\n // we should build them sequentially.\n bundleOutputs.push(await maybeAddHermesBundleAsync(bundles[i], intermediateOutputs[i]));\n }\n return bundleOutputs;\n } catch (error) {\n // New line so errors don't show up inline with the progress bar\n console.log('');\n throw error;\n } finally {\n metroServer.end();\n }\n}\n"],"names":["bundleAsync","nextBuildID","assertEngineMismatchAsync","projectRoot","exp","platform","isHermesManaged","isEnableHermesManaged","paths","getConfigFilePaths","configFilePath","dynamicConfigPath","staticConfigPath","maybeThrowFromInconsistentEngineAsync","expoConfig","options","bundles","Promise","all","map","metro","importMetroFromProject","Server","importMetroServerFromProject","config","reporter","loadMetroConfigAsync","metroServer","runMetro","watch","buildAsync","bundle","buildID","isHermes","bundleOptions","DEFAULT_BUNDLE_OPTIONS","bundleType","entryFile","entryPoint","dev","minify","inlineSourceMap","sourceMapUrl","createModuleIdFactory","serializer","onProgress","transformedFileCount","totalFileCount","quiet","update","type","bundleDetails","code","build","assets","css","getAssets","getCssModulesFromBundler","getBundler","error","maybeAddHermesBundleAsync","bundleOutput","platformTag","chalk","bold","ios","android","web","terminal","log","hermesBundleOutput","buildHermesBundleAsync","hermesBytecodeBundle","hbc","hermesSourcemap","sourcemap","intermediateOutputs","bundleOutputs","i","length","push","console","end"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.appendLinkToHtml = appendLinkToHtml;
|
|
6
|
+
exports.appendScriptsToHtml = appendScriptsToHtml;
|
|
7
|
+
function appendLinkToHtml(html, links) {
|
|
8
|
+
return html.replace("</head>", links.map((link)=>{
|
|
9
|
+
let linkTag = `<link rel="${link.rel}"`;
|
|
10
|
+
if (link.href) linkTag += ` href="${link.href}"`;
|
|
11
|
+
if (link.as) linkTag += ` as="${link.as}"`;
|
|
12
|
+
linkTag += ">";
|
|
13
|
+
return linkTag;
|
|
14
|
+
}).join("") + "</head>");
|
|
15
|
+
}
|
|
16
|
+
function appendScriptsToHtml(html, scripts) {
|
|
17
|
+
return html.replace("</body>", scripts.map((script)=>`<script src="${script}" defer></script>`
|
|
18
|
+
).join("") + "</body>");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/export/html.ts"],"sourcesContent":["// <link rel=\"preload\" href=\"/_expo/static/css/xxxxxx.css\" as=\"style\">\nexport function appendLinkToHtml(\n html: string,\n links: { rel: string; href: string; as?: string }[]\n) {\n return html.replace(\n '</head>',\n links\n .map((link) => {\n let linkTag = `<link rel=\"${link.rel}\"`;\n\n if (link.href) linkTag += ` href=\"${link.href}\"`;\n if (link.as) linkTag += ` as=\"${link.as}\"`;\n\n linkTag += '>';\n\n return linkTag;\n })\n .join('') + '</head>'\n );\n}\n\nexport function appendScriptsToHtml(html: string, scripts: string[]) {\n return html.replace(\n '</body>',\n scripts.map((script) => `<script src=\"${script}\" defer></script>`).join('') + '</body>'\n );\n}\n"],"names":["appendLinkToHtml","appendScriptsToHtml","html","links","replace","map","link","linkTag","rel","href","as","join","scripts","script"],"mappings":"AACA;;;;QAAgBA,gBAAgB,GAAhBA,gBAAgB;QAqBhBC,mBAAmB,GAAnBA,mBAAmB;AArB5B,SAASD,gBAAgB,CAC9BE,IAAY,EACZC,KAAmD,EACnD;IACA,OAAOD,IAAI,CAACE,OAAO,CACjB,SAAS,EACTD,KAAK,CACFE,GAAG,CAAC,CAACC,IAAI,GAAK;QACb,IAAIC,OAAO,GAAG,CAAC,WAAW,EAAED,IAAI,CAACE,GAAG,CAAC,CAAC,CAAC,AAAC;QAExC,IAAIF,IAAI,CAACG,IAAI,EAAEF,OAAO,IAAI,CAAC,OAAO,EAAED,IAAI,CAACG,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,IAAIH,IAAI,CAACI,EAAE,EAAEH,OAAO,IAAI,CAAC,KAAK,EAAED,IAAI,CAACI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE3CH,OAAO,IAAI,GAAG,CAAC;QAEf,OAAOA,OAAO,CAAC;KAChB,CAAC,CACDI,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS,CACxB,CAAC;CACH;AAEM,SAASV,mBAAmB,CAACC,IAAY,EAAEU,OAAiB,EAAE;IACnE,OAAOV,IAAI,CAACE,OAAO,CACjB,SAAS,EACTQ,OAAO,CAACP,GAAG,CAAC,CAACQ,MAAM,GAAK,CAAC,aAAa,EAAEA,MAAM,CAAC,iBAAiB,CAAC;IAAA,CAAC,CAACF,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS,CACxF,CAAC;CACH"}
|
|
@@ -44,6 +44,7 @@ const expoExport = async (argv)=>{
|
|
|
44
44
|
"--max-workers": Number,
|
|
45
45
|
"--output-dir": String,
|
|
46
46
|
"--platform": String,
|
|
47
|
+
"--no-minify": Boolean,
|
|
47
48
|
// Hack: This is added because EAS CLI always includes the flag.
|
|
48
49
|
// If supplied, we'll do nothing with the value, but at least the process won't crash.
|
|
49
50
|
// Note that we also don't show this value in the `--help` prompt since we don't want people to use it.
|
|
@@ -53,7 +54,9 @@ const expoExport = async (argv)=>{
|
|
|
53
54
|
// '-s': '--dump-sourcemap',
|
|
54
55
|
// '-d': '--dump-assetmap',
|
|
55
56
|
"-c": "--clear",
|
|
56
|
-
"-p": "--platform"
|
|
57
|
+
"-p": "--platform",
|
|
58
|
+
// Interop with Metro docs and RedBox errors.
|
|
59
|
+
"--reset-cache": "--clear"
|
|
57
60
|
}, argv);
|
|
58
61
|
if (args["--help"]) {
|
|
59
62
|
(0, _args).printHelp(`Export the static files of the app for hosting it on a web server`, _chalk.default`npx expo export {dim <dir>}`, [
|
|
@@ -64,6 +67,7 @@ const expoExport = async (argv)=>{
|
|
|
64
67
|
`--dump-assetmap Dump the asset map for further processing`,
|
|
65
68
|
`--dump-sourcemap Dump the source map for debugging the JS bundle`,
|
|
66
69
|
_chalk.default`-p, --platform <platform> Options: android, ios, web, all. {dim Default: all}`,
|
|
70
|
+
`--no-minify Prevent minifying source`,
|
|
67
71
|
`-c, --clear Clear the bundler cache`,
|
|
68
72
|
`-h, --help Usage info`,
|
|
69
73
|
].join("\n"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertArgs, getProjectRoot, printHelp } from '../utils/args';\nimport { logCmdError } from '../utils/errors';\n\nexport const expoExport: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--clear': Boolean,\n '--dump-assetmap': Boolean,\n '--dev': Boolean,\n '--dump-sourcemap': Boolean,\n '--max-workers': Number,\n '--output-dir': String,\n '--platform': String,\n\n // Hack: This is added because EAS CLI always includes the flag.\n // If supplied, we'll do nothing with the value, but at least the process won't crash.\n // Note that we also don't show this value in the `--help` prompt since we don't want people to use it.\n '--experimental-bundle': Boolean,\n\n // Aliases\n '-h': '--help',\n // '-s': '--dump-sourcemap',\n // '-d': '--dump-assetmap',\n '-c': '--clear',\n '-p': '--platform',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Export the static files of the app for hosting it on a web server`,\n chalk`npx expo export {dim <dir>}`,\n [\n chalk`<dir> Directory of the Expo project. {dim Default: Current working directory}`,\n `--dev Configure static files for developing locally using a non-https server`,\n chalk`--output-dir <dir> The directory to export the static files to. {dim Default: dist}`,\n `--max-workers <number> Maximum number of tasks to allow the bundler to spawn`,\n `--dump-assetmap Dump the asset map for further processing`,\n `--dump-sourcemap Dump the source map for debugging the JS bundle`,\n chalk`-p, --platform <platform> Options: android, ios, web, all. {dim Default: all}`,\n `-c, --clear Clear the bundler cache`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n const projectRoot = getProjectRoot(args);\n const { resolveOptionsAsync } = await import('./resolveOptions');\n const options = await resolveOptionsAsync(projectRoot, args).catch(logCmdError);\n\n const { exportAsync } = await import('./exportAsync');\n return exportAsync(projectRoot, options).catch(logCmdError);\n};\n"],"names":["expoExport","argv","args","assertArgs","Boolean","Number","String","printHelp","chalk","join","projectRoot","getProjectRoot","resolveOptionsAsync","options","catch","logCmdError","exportAsync"],"mappings":"AAAA;;;;;;AACkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAG6B,IAAA,KAAe,WAAf,eAAe,CAAA;AACzC,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtC,MAAMA,UAAU,GAAY,OAAOC,IAAI,GAAK;IACjD,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,KAAU,
|
|
1
|
+
{"version":3,"sources":["../../../src/export/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertArgs, getProjectRoot, printHelp } from '../utils/args';\nimport { logCmdError } from '../utils/errors';\n\nexport const expoExport: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--clear': Boolean,\n '--dump-assetmap': Boolean,\n '--dev': Boolean,\n '--dump-sourcemap': Boolean,\n '--max-workers': Number,\n '--output-dir': String,\n '--platform': String,\n '--no-minify': Boolean,\n\n // Hack: This is added because EAS CLI always includes the flag.\n // If supplied, we'll do nothing with the value, but at least the process won't crash.\n // Note that we also don't show this value in the `--help` prompt since we don't want people to use it.\n '--experimental-bundle': Boolean,\n\n // Aliases\n '-h': '--help',\n // '-s': '--dump-sourcemap',\n // '-d': '--dump-assetmap',\n '-c': '--clear',\n '-p': '--platform',\n // Interop with Metro docs and RedBox errors.\n '--reset-cache': '--clear',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Export the static files of the app for hosting it on a web server`,\n chalk`npx expo export {dim <dir>}`,\n [\n chalk`<dir> Directory of the Expo project. {dim Default: Current working directory}`,\n `--dev Configure static files for developing locally using a non-https server`,\n chalk`--output-dir <dir> The directory to export the static files to. {dim Default: dist}`,\n `--max-workers <number> Maximum number of tasks to allow the bundler to spawn`,\n `--dump-assetmap Dump the asset map for further processing`,\n `--dump-sourcemap Dump the source map for debugging the JS bundle`,\n chalk`-p, --platform <platform> Options: android, ios, web, all. {dim Default: all}`,\n `--no-minify Prevent minifying source`,\n `-c, --clear Clear the bundler cache`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n const projectRoot = getProjectRoot(args);\n const { resolveOptionsAsync } = await import('./resolveOptions');\n const options = await resolveOptionsAsync(projectRoot, args).catch(logCmdError);\n\n const { exportAsync } = await import('./exportAsync');\n return exportAsync(projectRoot, options).catch(logCmdError);\n};\n"],"names":["expoExport","argv","args","assertArgs","Boolean","Number","String","printHelp","chalk","join","projectRoot","getProjectRoot","resolveOptionsAsync","options","catch","logCmdError","exportAsync"],"mappings":"AAAA;;;;;;AACkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAG6B,IAAA,KAAe,WAAf,eAAe,CAAA;AACzC,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtC,MAAMA,UAAU,GAAY,OAAOC,IAAI,GAAK;IACjD,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,KAAU,AA4BtB,CAAA,WA5BsB,CACrB;QACE,QAAQ;QACR,QAAQ,EAAEC,OAAO;QACjB,SAAS,EAAEA,OAAO;QAClB,iBAAiB,EAAEA,OAAO;QAC1B,OAAO,EAAEA,OAAO;QAChB,kBAAkB,EAAEA,OAAO;QAC3B,eAAe,EAAEC,MAAM;QACvB,cAAc,EAAEC,MAAM;QACtB,YAAY,EAAEA,MAAM;QACpB,aAAa,EAAEF,OAAO;QAEtB,gEAAgE;QAChE,sFAAsF;QACtF,uGAAuG;QACvG,uBAAuB,EAAEA,OAAO;QAEhC,UAAU;QACV,IAAI,EAAE,QAAQ;QACd,4BAA4B;QAC5B,2BAA2B;QAC3B,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;QAClB,6CAA6C;QAC7C,eAAe,EAAE,SAAS;KAC3B,EACDH,IAAI,CACL,AAAC;IAEF,IAAIC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClBK,CAAAA,GAAAA,KAAS,AAeR,CAAA,UAfQ,CACP,CAAC,iEAAiE,CAAC,EACnEC,MAAK,QAAA,CAAC,2BAA2B,CAAC,EAClC;YACEA,MAAK,QAAA,CAAC,kGAAkG,CAAC;YACzG,CAAC,iGAAiG,CAAC;YACnGA,MAAK,QAAA,CAAC,2FAA2F,CAAC;YAClG,CAAC,gFAAgF,CAAC;YAClF,CAAC,oEAAoE,CAAC;YACtE,CAAC,0EAA0E,CAAC;YAC5EA,MAAK,QAAA,CAAC,8EAA8E,CAAC;YACrF,CAAC,mDAAmD,CAAC;YACrD,CAAC,kDAAkD,CAAC;YACpD,CAAC,qCAAqC,CAAC;SACxC,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;IAED,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,KAAc,AAAM,CAAA,eAAN,CAACT,IAAI,CAAC,AAAC;IACzC,MAAM,EAAEU,mBAAmB,CAAA,EAAE,GAAG,MAAM;+CAAO,kBAAkB;MAAC,AAAC;IACjE,MAAMC,OAAO,GAAG,MAAMD,mBAAmB,CAACF,WAAW,EAAER,IAAI,CAAC,CAACY,KAAK,CAACC,OAAW,YAAA,CAAC,AAAC;IAEhF,MAAM,EAAEC,WAAW,CAAA,EAAE,GAAG,MAAM;+CAAO,eAAe;MAAC,AAAC;IACtD,OAAOA,WAAW,CAACN,WAAW,EAAEG,OAAO,CAAC,CAACC,KAAK,CAACC,OAAW,YAAA,CAAC,CAAC;CAC7D,AAAC;QAxDWf,UAAU,GAAVA,UAAU"}
|
|
@@ -41,7 +41,7 @@ function printBundleSizes(bundles) {
|
|
|
41
41
|
for (const [platform, bundleOutput] of Object.entries(bundles)){
|
|
42
42
|
if (bundleOutput.hermesBytecodeBundle) {
|
|
43
43
|
files.push([
|
|
44
|
-
_chalk.default.bold(`index.${platform}.
|
|
44
|
+
_chalk.default.bold(`index.${platform}.hbc`),
|
|
45
45
|
bundleOutput.hermesBytecodeBundle
|
|
46
46
|
]);
|
|
47
47
|
} else if (bundleOutput.code) {
|
|
@@ -52,7 +52,7 @@ function printBundleSizes(bundles) {
|
|
|
52
52
|
}
|
|
53
53
|
if (bundleOutput.hermesSourcemap) {
|
|
54
54
|
files.push([
|
|
55
|
-
_chalk.default.dim(`index.${platform}.
|
|
55
|
+
_chalk.default.dim(`index.${platform}.hbc.map`),
|
|
56
56
|
bundleOutput.hermesSourcemap
|
|
57
57
|
]);
|
|
58
58
|
} else if (bundleOutput.map) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/printBundleSizes.ts"],"sourcesContent":["import { Platform } from '@expo/config';\nimport chalk from 'chalk';\nimport prettyBytes from 'pretty-bytes';\nimport table from 'text-table';\n\nimport * as Log from '../log';\nimport { stripAnsi } from '../utils/ansi';\nimport { learnMore } from '../utils/link';\nimport { BundleOutput } from './fork-bundleAsync';\n\nexport function printBundleSizes(bundles: Partial<Record<Platform, BundleOutput>>) {\n const files: [string, string | Uint8Array][] = [];\n\n for (const [platform, bundleOutput] of Object.entries(bundles) as [\n Platform,\n Pick<BundleOutput, 'hermesBytecodeBundle' | 'code' | 'hermesSourcemap' | 'map'>\n ][]) {\n if (bundleOutput.hermesBytecodeBundle) {\n files.push([chalk.bold(`index.${platform}.
|
|
1
|
+
{"version":3,"sources":["../../../src/export/printBundleSizes.ts"],"sourcesContent":["import { Platform } from '@expo/config';\nimport chalk from 'chalk';\nimport prettyBytes from 'pretty-bytes';\nimport table from 'text-table';\n\nimport * as Log from '../log';\nimport { stripAnsi } from '../utils/ansi';\nimport { learnMore } from '../utils/link';\nimport { BundleOutput } from './fork-bundleAsync';\n\nexport function printBundleSizes(bundles: Partial<Record<Platform, BundleOutput>>) {\n const files: [string, string | Uint8Array][] = [];\n\n for (const [platform, bundleOutput] of Object.entries(bundles) as [\n Platform,\n Pick<BundleOutput, 'hermesBytecodeBundle' | 'code' | 'hermesSourcemap' | 'map'>\n ][]) {\n if (bundleOutput.hermesBytecodeBundle) {\n files.push([chalk.bold(`index.${platform}.hbc`), bundleOutput.hermesBytecodeBundle]);\n } else if (bundleOutput.code) {\n files.push([chalk.bold(`index.${platform}.js`), bundleOutput.code]);\n }\n if (bundleOutput.hermesSourcemap) {\n files.push([chalk.dim(`index.${platform}.hbc.map`), bundleOutput.hermesSourcemap]);\n } else if (bundleOutput.map) {\n files.push([chalk.dim(`index.${platform}.js.map`), bundleOutput.map]);\n }\n }\n\n Log.log();\n Log.log(createFilesTable(files.sort((a, b) => a[1].length - b[1].length)));\n Log.log();\n Log.log(\n chalk`💡 JavaScript bundle sizes affect startup time. {dim ${learnMore(\n `https://expo.fyi/javascript-bundle-sizes`\n )}}`\n );\n Log.log();\n\n return files;\n}\n\nexport function createFilesTable(files: [string, string | Uint8Array][]): string {\n const tableData = files.map((item, index) => {\n const fileBranch =\n index === 0 ? (files.length > 1 ? '┌' : '─') : index === files.length - 1 ? '└' : '├';\n\n return [`${fileBranch} ${item[0]}`, prettyBytes(Buffer.byteLength(item[1], 'utf8'))];\n });\n return table([['Bundle', 'Size'].map((v) => chalk.underline(v)), ...tableData], {\n align: ['l', 'r'],\n stringLength: (str) => stripAnsi(str)?.length ?? 0,\n });\n}\n"],"names":["printBundleSizes","createFilesTable","Log","bundles","files","platform","bundleOutput","Object","entries","hermesBytecodeBundle","push","chalk","bold","code","hermesSourcemap","dim","map","log","sort","a","b","length","learnMore","tableData","item","index","fileBranch","prettyBytes","Buffer","byteLength","stripAnsi","table","v","underline","align","stringLength","str"],"mappings":"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"}
|
|
@@ -52,6 +52,7 @@ async function resolveOptionsAsync(projectRoot, args) {
|
|
|
52
52
|
return {
|
|
53
53
|
outputDir: (ref1 = args["--output-dir"]) != null ? ref1 : "dist",
|
|
54
54
|
platforms,
|
|
55
|
+
minify: !args["--no-minify"],
|
|
55
56
|
clear: !!args["--clear"],
|
|
56
57
|
dev: !!args["--dev"],
|
|
57
58
|
maxWorkers: args["--max-workers"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/resolveOptions.ts"],"sourcesContent":["import { getConfig, Platform } from '@expo/config';\n\nimport { getPlatformBundlers, PlatformBundlers } from '../start/server/platformBundlers';\nimport { CommandError } from '../utils/errors';\n\nexport type Options = {\n outputDir: string;\n platforms: Platform[];\n maxWorkers?: number;\n dev: boolean;\n clear: boolean;\n dumpAssetmap: boolean;\n dumpSourcemap: boolean;\n};\n\n/** Returns an array of platforms based on the input platform identifier and runtime constraints. */\nexport function resolvePlatformOption(\n platformBundlers: PlatformBundlers,\n platform: string = 'all'\n): Platform[] {\n const platforms: Partial<PlatformBundlers> = Object.fromEntries(\n Object.entries(platformBundlers).filter(([, bundler]) => bundler === 'metro')\n );\n\n if (!Object.keys(platforms).length) {\n throw new CommandError(\n `No platforms are configured to use the Metro bundler in the project Expo config.`\n );\n }\n\n const assertPlatformBundler = (platform: Platform) => {\n if (!platforms[platform]) {\n throw new CommandError(\n 'BAD_ARGS',\n `Platform \"${platform}\" is not configured to use the Metro bundler in the project Expo config.`\n );\n }\n };\n\n switch (platform) {\n case 'ios':\n assertPlatformBundler('ios');\n return ['ios'];\n case 'web':\n assertPlatformBundler('web');\n return ['web'];\n case 'android':\n assertPlatformBundler('android');\n return ['android'];\n case 'all':\n return Object.keys(platforms) as Platform[];\n default:\n throw new CommandError(\n `Unsupported platform \"${platform}\". Options are: ${Object.keys(platforms).join(',')}, all`\n );\n }\n}\n\nexport async function resolveOptionsAsync(projectRoot: string, args: any): Promise<Options> {\n const { exp } = getConfig(projectRoot, { skipPlugins: true, skipSDKVersionRequirement: true });\n const platformBundlers = getPlatformBundlers(exp);\n const platforms: Platform[] = resolvePlatformOption(\n platformBundlers,\n args['--platform'] ?? 'all'\n );\n\n return {\n outputDir: args['--output-dir'] ?? 'dist',\n platforms,\n clear: !!args['--clear'],\n dev: !!args['--dev'],\n maxWorkers: args['--max-workers'],\n dumpAssetmap: !!args['--dump-assetmap'],\n dumpSourcemap: !!args['--dump-sourcemap'],\n };\n}\n"],"names":["resolvePlatformOption","resolveOptionsAsync","platformBundlers","platform","platforms","Object","fromEntries","entries","filter","bundler","keys","length","CommandError","assertPlatformBundler","join","projectRoot","args","exp","getConfig","skipPlugins","skipSDKVersionRequirement","getPlatformBundlers","outputDir","clear","dev","maxWorkers","dumpAssetmap","dumpSourcemap"],"mappings":"AAAA;;;;
|
|
1
|
+
{"version":3,"sources":["../../../src/export/resolveOptions.ts"],"sourcesContent":["import { getConfig, Platform } from '@expo/config';\n\nimport { getPlatformBundlers, PlatformBundlers } from '../start/server/platformBundlers';\nimport { CommandError } from '../utils/errors';\n\nexport type Options = {\n outputDir: string;\n platforms: Platform[];\n maxWorkers?: number;\n dev: boolean;\n clear: boolean;\n minify: boolean;\n dumpAssetmap: boolean;\n dumpSourcemap: boolean;\n};\n\n/** Returns an array of platforms based on the input platform identifier and runtime constraints. */\nexport function resolvePlatformOption(\n platformBundlers: PlatformBundlers,\n platform: string = 'all'\n): Platform[] {\n const platforms: Partial<PlatformBundlers> = Object.fromEntries(\n Object.entries(platformBundlers).filter(([, bundler]) => bundler === 'metro')\n );\n\n if (!Object.keys(platforms).length) {\n throw new CommandError(\n `No platforms are configured to use the Metro bundler in the project Expo config.`\n );\n }\n\n const assertPlatformBundler = (platform: Platform) => {\n if (!platforms[platform]) {\n throw new CommandError(\n 'BAD_ARGS',\n `Platform \"${platform}\" is not configured to use the Metro bundler in the project Expo config.`\n );\n }\n };\n\n switch (platform) {\n case 'ios':\n assertPlatformBundler('ios');\n return ['ios'];\n case 'web':\n assertPlatformBundler('web');\n return ['web'];\n case 'android':\n assertPlatformBundler('android');\n return ['android'];\n case 'all':\n return Object.keys(platforms) as Platform[];\n default:\n throw new CommandError(\n `Unsupported platform \"${platform}\". Options are: ${Object.keys(platforms).join(',')}, all`\n );\n }\n}\n\nexport async function resolveOptionsAsync(projectRoot: string, args: any): Promise<Options> {\n const { exp } = getConfig(projectRoot, { skipPlugins: true, skipSDKVersionRequirement: true });\n const platformBundlers = getPlatformBundlers(exp);\n const platforms: Platform[] = resolvePlatformOption(\n platformBundlers,\n args['--platform'] ?? 'all'\n );\n\n return {\n outputDir: args['--output-dir'] ?? 'dist',\n platforms,\n minify: !args['--no-minify'],\n clear: !!args['--clear'],\n dev: !!args['--dev'],\n maxWorkers: args['--max-workers'],\n dumpAssetmap: !!args['--dump-assetmap'],\n dumpSourcemap: !!args['--dump-sourcemap'],\n };\n}\n"],"names":["resolvePlatformOption","resolveOptionsAsync","platformBundlers","platform","platforms","Object","fromEntries","entries","filter","bundler","keys","length","CommandError","assertPlatformBundler","join","projectRoot","args","exp","getConfig","skipPlugins","skipSDKVersionRequirement","getPlatformBundlers","outputDir","minify","clear","dev","maxWorkers","dumpAssetmap","dumpSourcemap"],"mappings":"AAAA;;;;QAiBgBA,qBAAqB,GAArBA,qBAAqB;QA0CfC,mBAAmB,GAAnBA,mBAAmB;AA3DL,IAAA,OAAc,WAAd,cAAc,CAAA;AAEI,IAAA,iBAAkC,WAAlC,kCAAkC,CAAA;AAC3D,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;AAcvC,SAASD,qBAAqB,CACnCE,gBAAkC,EAClCC,SAAgB,GAAG,KAAK,EACZ;IACZ,MAAMC,SAAS,GAA8BC,MAAM,CAACC,WAAW,CAC7DD,MAAM,CAACE,OAAO,CAACL,gBAAgB,CAAC,CAACM,MAAM,CAAC,CAAC,GAAGC,OAAO,CAAC,GAAKA,OAAO,KAAK,OAAO;IAAA,CAAC,CAC9E,AAAC;IAEF,IAAI,CAACJ,MAAM,CAACK,IAAI,CAACN,SAAS,CAAC,CAACO,MAAM,EAAE;QAClC,MAAM,IAAIC,OAAY,aAAA,CACpB,CAAC,gFAAgF,CAAC,CACnF,CAAC;KACH;IAED,MAAMC,qBAAqB,GAAG,CAACV,QAAkB,GAAK;QACpD,IAAI,CAACC,SAAS,CAACD,QAAQ,CAAC,EAAE;YACxB,MAAM,IAAIS,OAAY,aAAA,CACpB,UAAU,EACV,CAAC,UAAU,EAAET,QAAQ,CAAC,wEAAwE,CAAC,CAChG,CAAC;SACH;KACF,AAAC;IAEF,OAAQA,SAAQ;QACd,KAAK,KAAK;YACRU,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC7B,OAAO;gBAAC,KAAK;aAAC,CAAC;QACjB,KAAK,KAAK;YACRA,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC7B,OAAO;gBAAC,KAAK;aAAC,CAAC;QACjB,KAAK,SAAS;YACZA,qBAAqB,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO;gBAAC,SAAS;aAAC,CAAC;QACrB,KAAK,KAAK;YACR,OAAOR,MAAM,CAACK,IAAI,CAACN,SAAS,CAAC,CAAe;QAC9C;YACE,MAAM,IAAIQ,OAAY,aAAA,CACpB,CAAC,sBAAsB,EAAET,SAAQ,CAAC,gBAAgB,EAAEE,MAAM,CAACK,IAAI,CAACN,SAAS,CAAC,CAACU,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAC5F,CAAC;KACL;CACF;AAEM,eAAeb,mBAAmB,CAACc,WAAmB,EAAEC,IAAS,EAAoB;IAC1F,MAAM,EAAEC,GAAG,CAAA,EAAE,GAAGC,CAAAA,GAAAA,OAAS,AAAqE,CAAA,UAArE,CAACH,WAAW,EAAE;QAAEI,WAAW,EAAE,IAAI;QAAEC,yBAAyB,EAAE,IAAI;KAAE,CAAC,AAAC;IAC/F,MAAMlB,gBAAgB,GAAGmB,CAAAA,GAAAA,iBAAmB,AAAK,CAAA,oBAAL,CAACJ,GAAG,CAAC,AAAC;QAGhDD,GAAkB;IAFpB,MAAMZ,SAAS,GAAeJ,qBAAqB,CACjDE,gBAAgB,EAChBc,CAAAA,GAAkB,GAAlBA,IAAI,CAAC,YAAY,CAAC,YAAlBA,GAAkB,GAAI,KAAK,CAC5B,AAAC;QAGWA,IAAoB;IADjC,OAAO;QACLM,SAAS,EAAEN,CAAAA,IAAoB,GAApBA,IAAI,CAAC,cAAc,CAAC,YAApBA,IAAoB,GAAI,MAAM;QACzCZ,SAAS;QACTmB,MAAM,EAAE,CAACP,IAAI,CAAC,aAAa,CAAC;QAC5BQ,KAAK,EAAE,CAAC,CAACR,IAAI,CAAC,SAAS,CAAC;QACxBS,GAAG,EAAE,CAAC,CAACT,IAAI,CAAC,OAAO,CAAC;QACpBU,UAAU,EAAEV,IAAI,CAAC,eAAe,CAAC;QACjCW,YAAY,EAAE,CAAC,CAACX,IAAI,CAAC,iBAAiB,CAAC;QACvCY,aAAa,EAAE,CAAC,CAACZ,IAAI,CAAC,kBAAkB,CAAC;KAC1C,CAAC;CACH"}
|
|
@@ -10,6 +10,7 @@ var _webSupportProjectPrerequisite = require("../../start/doctor/web/WebSupportP
|
|
|
10
10
|
var _platformBundlers = require("../../start/server/platformBundlers");
|
|
11
11
|
var _webpackBundlerDevServer = require("../../start/server/webpack/WebpackBundlerDevServer");
|
|
12
12
|
var _errors = require("../../utils/errors");
|
|
13
|
+
var _nodeEnv = require("../../utils/nodeEnv");
|
|
13
14
|
function _interopRequireDefault(obj) {
|
|
14
15
|
return obj && obj.__esModule ? obj : {
|
|
15
16
|
default: obj
|
|
@@ -18,6 +19,8 @@ function _interopRequireDefault(obj) {
|
|
|
18
19
|
async function exportWebAsync(projectRoot, options) {
|
|
19
20
|
// Ensure webpack is available
|
|
20
21
|
await new _webSupportProjectPrerequisite.WebSupportProjectPrerequisite(projectRoot).assertAsync();
|
|
22
|
+
(0, _nodeEnv).setNodeEnv(options.dev ? "development" : "production");
|
|
23
|
+
require("@expo/env").load(projectRoot);
|
|
21
24
|
const { exp } = (0, _config).getConfig(projectRoot);
|
|
22
25
|
const platformBundlers = (0, _platformBundlers).getPlatformBundlers(exp);
|
|
23
26
|
// Create a bundler interface
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/export/web/exportWebAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport { Log } from '../../log';\nimport { WebSupportProjectPrerequisite } from '../../start/doctor/web/WebSupportProjectPrerequisite';\nimport { getPlatformBundlers } from '../../start/server/platformBundlers';\nimport { WebpackBundlerDevServer } from '../../start/server/webpack/WebpackBundlerDevServer';\nimport { CommandError } from '../../utils/errors';\nimport { Options } from './resolveOptions';\n\nexport async function exportWebAsync(projectRoot: string, options: Options) {\n // Ensure webpack is available\n await new WebSupportProjectPrerequisite(projectRoot).assertAsync();\n\n const { exp } = getConfig(projectRoot);\n const platformBundlers = getPlatformBundlers(exp);\n // Create a bundler interface\n const bundler = new WebpackBundlerDevServer(projectRoot, platformBundlers, false);\n\n // If the user set `web.bundler: 'metro'` then they should use `expo export` instead.\n if (!bundler.isTargetingWeb()) {\n throw new CommandError(\n chalk`{bold expo export:web} can only be used with Webpack. Use {bold expo export} for other bundlers.`\n );\n }\n\n Log.log(`Exporting with Webpack...`);\n\n // Bundle the app\n await bundler.bundleAsync({\n mode: options.dev ? 'development' : 'production',\n clear: options.clear,\n });\n}\n"],"names":["exportWebAsync","projectRoot","options","WebSupportProjectPrerequisite","assertAsync","exp","getConfig","platformBundlers","getPlatformBundlers","bundler","WebpackBundlerDevServer","isTargetingWeb","CommandError","chalk","Log","log","bundleAsync","mode","
|
|
1
|
+
{"version":3,"sources":["../../../../src/export/web/exportWebAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport { Log } from '../../log';\nimport { WebSupportProjectPrerequisite } from '../../start/doctor/web/WebSupportProjectPrerequisite';\nimport { getPlatformBundlers } from '../../start/server/platformBundlers';\nimport { WebpackBundlerDevServer } from '../../start/server/webpack/WebpackBundlerDevServer';\nimport { CommandError } from '../../utils/errors';\nimport { setNodeEnv } from '../../utils/nodeEnv';\nimport { Options } from './resolveOptions';\n\nexport async function exportWebAsync(projectRoot: string, options: Options) {\n // Ensure webpack is available\n await new WebSupportProjectPrerequisite(projectRoot).assertAsync();\n\n setNodeEnv(options.dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const { exp } = getConfig(projectRoot);\n const platformBundlers = getPlatformBundlers(exp);\n // Create a bundler interface\n const bundler = new WebpackBundlerDevServer(projectRoot, platformBundlers, false);\n\n // If the user set `web.bundler: 'metro'` then they should use `expo export` instead.\n if (!bundler.isTargetingWeb()) {\n throw new CommandError(\n chalk`{bold expo export:web} can only be used with Webpack. Use {bold expo export} for other bundlers.`\n );\n }\n\n Log.log(`Exporting with Webpack...`);\n\n // Bundle the app\n await bundler.bundleAsync({\n mode: options.dev ? 'development' : 'production',\n clear: options.clear,\n });\n}\n"],"names":["exportWebAsync","projectRoot","options","WebSupportProjectPrerequisite","assertAsync","setNodeEnv","dev","require","load","exp","getConfig","platformBundlers","getPlatformBundlers","bundler","WebpackBundlerDevServer","isTargetingWeb","CommandError","chalk","Log","log","bundleAsync","mode","clear"],"mappings":"AAAA;;;;QAWsBA,cAAc,GAAdA,cAAc;AAXV,IAAA,OAAc,WAAd,cAAc,CAAA;AACtB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEL,IAAA,IAAW,WAAX,WAAW,CAAA;AACe,IAAA,8BAAsD,WAAtD,sDAAsD,CAAA;AAChE,IAAA,iBAAqC,WAArC,qCAAqC,CAAA;AACjC,IAAA,wBAAoD,WAApD,oDAAoD,CAAA;AAC/D,IAAA,OAAoB,WAApB,oBAAoB,CAAA;AACtB,IAAA,QAAqB,WAArB,qBAAqB,CAAA;;;;;;AAGzC,eAAeA,cAAc,CAACC,WAAmB,EAAEC,OAAgB,EAAE;IAC1E,8BAA8B;IAC9B,MAAM,IAAIC,8BAA6B,8BAAA,CAACF,WAAW,CAAC,CAACG,WAAW,EAAE,CAAC;IAEnEC,CAAAA,GAAAA,QAAU,AAA4C,CAAA,WAA5C,CAACH,OAAO,CAACI,GAAG,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC;IACvDC,OAAO,CAAC,WAAW,CAAC,CAACC,IAAI,CAACP,WAAW,CAAC,CAAC;IAEvC,MAAM,EAAEQ,GAAG,CAAA,EAAE,GAAGC,CAAAA,GAAAA,OAAS,AAAa,CAAA,UAAb,CAACT,WAAW,CAAC,AAAC;IACvC,MAAMU,gBAAgB,GAAGC,CAAAA,GAAAA,iBAAmB,AAAK,CAAA,oBAAL,CAACH,GAAG,CAAC,AAAC;IAClD,6BAA6B;IAC7B,MAAMI,OAAO,GAAG,IAAIC,wBAAuB,wBAAA,CAACb,WAAW,EAAEU,gBAAgB,EAAE,KAAK,CAAC,AAAC;IAElF,qFAAqF;IACrF,IAAI,CAACE,OAAO,CAACE,cAAc,EAAE,EAAE;QAC7B,MAAM,IAAIC,OAAY,aAAA,CACpBC,MAAK,QAAA,CAAC,gGAAgG,CAAC,CACxG,CAAC;KACH;IAEDC,IAAG,IAAA,CAACC,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAErC,iBAAiB;IACjB,MAAMN,OAAO,CAACO,WAAW,CAAC;QACxBC,IAAI,EAAEnB,OAAO,CAACI,GAAG,GAAG,aAAa,GAAG,YAAY;QAChDgB,KAAK,EAAEpB,OAAO,CAACoB,KAAK;KACrB,CAAC,CAAC;CACJ"}
|