@expo/cli 0.13.2 → 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 +30 -27
- 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/config/configAsync.js +1 -1
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/config/index.js +2 -2
- package/build/src/config/index.js.map +1 -1
- package/build/src/customize/generate.js +1 -1
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/typescript.js +6 -4
- 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/index.js +4 -4
- package/build/src/export/embed/index.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 +74 -83
- 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 +24 -14
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +109 -58
- 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 +56 -23
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/index.js +11 -9
- 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/web/index.js +2 -2
- package/build/src/export/web/index.js.map +1 -1
- package/build/src/export/writeContents.js +6 -3
- 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/login/index.js +1 -1
- package/build/src/login/index.js.map +1 -1
- package/build/src/logout/index.js +1 -1
- package/build/src/logout/index.js.map +1 -1
- 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/index.js +3 -3
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +39 -17
- 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/register/index.js +1 -1
- package/build/src/register/index.js.map +1 -1
- package/build/src/run/android/index.js +2 -2
- package/build/src/run/android/index.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +35 -2
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/index.js +2 -2
- package/build/src/run/ios/index.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/index.js +3 -3
- package/build/src/start/index.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 -20
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +67 -64
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/bundleApiRoutes.js +4 -19
- package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
- package/build/src/start/server/metro/createExpoMetroResolver.js +187 -0
- package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -0
- 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/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/formatFileCandidates.js +72 -0
- package/build/src/start/server/metro/formatFileCandidates.js.map +1 -0
- 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 +37 -16
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +3 -2
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/router.js +6 -3
- 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 +268 -191
- 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 +45 -68
- 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/middleware/resolveAssets.js.map +1 -1
- package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
- package/build/src/start/server/type-generation/expo-env.js +1 -1
- package/build/src/start/server/type-generation/expo-env.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +1 -0
- package/build/src/start/server/type-generation/routes.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 +2 -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 +6 -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/build/src/whoami/index.js +1 -1
- package/build/src/whoami/index.js.map +1 -1
- package/package.json +16 -16
- package/static/shims/react-native-web/dist/cjs/exports/AppRegistry/AppContainer.js +13 -0
- package/static/shims/react-native-web/dist/cjs/exports/BackHandler/index.js +10 -0
- package/static/shims/react-native-web/dist/exports/AppRegistry/AppContainer.js +12 -0
- package/static/shims/react-native-web/dist/exports/BackHandler/index.js +7 -0
- package/build/src/export/createBundles.js +0 -37
- package/build/src/export/createBundles.js.map +0 -1
- package/build/src/start/server/metro/resolveFromProject.js +0 -90
- package/build/src/start/server/metro/resolveFromProject.js.map +0 -1
- package/build/src/start/server/middleware/resolveEntryPoint.js +0 -42
- package/build/src/start/server/middleware/resolveEntryPoint.js.map +0 -1
|
@@ -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":"AAAA;;;;QAmBsBA,+BAA+B,GAA/BA,+BAA+B;QAyD/BC,iBAAiB,GAAjBA,iBAAiB;QA+BjBC,oBAAoB,GAApBA,oBAAoB;AAzG3B,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACG,IAAA,UAAW,kCAAX,WAAW,EAAA;AAChB,IAAA,KAAM,kCAAN,MAAM,EAAA;AAGgB,IAAA,WAAc,WAAd,cAAc,CAAA;AACzCC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AAC2B,IAAA,cAA0C,WAA1C,0CAA0C,CAAA;AAC7D,IAAA,MAAgB,WAAhB,gBAAgB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEvC,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,0BAA0B,CAAC,AAAsB,AAAC;AAO1E,eAAeL,+BAA+B,CACnDM,WAAmB,EACnBC,GAAM,EACNC,MAAe,EACyD;QACnED,IAAuB;IAA5B,IAAI,CAACA,CAAAA,CAAAA,IAAuB,GAAvBA,GAAG,CAACE,mBAAmB,SAAQ,GAA/BF,KAAAA,CAA+B,GAA/BA,IAAuB,CAAEG,MAAM,CAAA,IAAI,CAACF,MAAM,CAACE,MAAM,EAAE;QACtD,OAAOH,GAAG,CAACE,mBAAmB,CAAC;QAC/B,OAAOF,GAAG,CAAC;KACZ;IACD,qEAAqE;IACrE,sEAAsE;IACtE,6EAA6E;IAC7E,yEAAyE;IAEzE,MAAMI,YAAY,GAAaJ,GAAG,CAACE,mBAAmB,CAACG,GAAG,CAAC,CAACC,CAAS,GACnEC,KAAI,QAAA,CAACC,IAAI,CAACT,WAAW,EAAEO,CAAC,CAAC;IAAA,CAC1B,AAAC;IAEFG,WAAW,CAACL,YAAY,CAAC,CAAC;IAE1B,MAAMM,gBAAgB,GAAGT,MAAM,CAC5BI,GAAG,CAAC,CAACM,KAAK,GAAK;QACd,MAAMC,YAAY,GAAGC,iBAAiB,CAACF,KAAK,EAAEP,YAAY,CAAC,AAAC;QAC5D,IAAIQ,YAAY,EAAE;gBACuCD,GAAW;YAAlEd,KAAK,CAAC,CAAC,EAAEe,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC,OAAO,EAAED,CAAAA,GAAW,GAAXA,KAAK,CAACG,KAAK,SAAK,GAAhBH,KAAAA,CAAgB,GAAhBA,GAAW,AAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,OAAOA,KAAK,CAACI,UAAU,CAACV,GAAG,CACzB,CAACW,IAAI,GAAK,QAAQ,GAAGA,IAAI,GAAG,CAAC,MAAM,IAAIL,KAAK,IAAIA,KAAK,CAACM,IAAI,GAAG,GAAG,GAAGN,KAAK,CAACM,IAAI,GAAG,EAAE,CAAC;YAAA,CACpF,CAAC;SACH;QACD,OAAO,EAAE,CAAC;KACX,CAAC,CACDC,IAAI,EAAE,AAAC;IAEV,wEAAwE;IACxE,yBAAyB;IACzB,CAAClB,GAAG,CAAQ,CAACmB,aAAa,GAAG;WAAI,IAAIC,GAAG,CAACV,gBAAgB,CAAC;KAAC,CAAC;IAC5D,OAAOV,GAAG,CAACE,mBAAmB,CAAC;IAE/B,OAAOF,GAAG,CAAC;CACZ;AAED,SAASS,WAAW,CAACY,QAAkB,EAAE;IACvC,wHAAwH;IACxHzB,GAAG,CAAC0B,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAC/CD,QAAQ,CAACE,OAAO,CAAC,CAACjB,CAAC,GAAKV,GAAG,CAAC0B,GAAG,CAAC,IAAI,GAAGhB,CAAC,CAAC;IAAA,CAAC,CAAC;CAC5C;AAED,SAASO,iBAAiB,CAACF,KAAY,EAAEU,QAAkB,EAAE;QAC9CV,GAAW;IAAxB,MAAMa,IAAI,GAAGb,CAAAA,GAAW,GAAXA,KAAK,CAACG,KAAK,SAAK,GAAhBH,KAAAA,CAAgB,GAAhBA,GAAW,AAAE,CAAC,CAAC,CAAC,AAAC;IAC9B,OAAO,CAAC,CAAC,CACP,kBAAkB,IAAIA,KAAK,IAC3BA,KAAK,CAACc,gBAAgB,IACtBD,IAAI,IACJH,QAAQ,CAACK,IAAI,CAAC,CAACC,OAAO,GAAKC,CAAAA,GAAAA,UAAS,AAAe,CAAA,QAAf,CAACJ,IAAI,EAAEG,OAAO,CAAC;IAAA,CAAC,CACrD,CAAC;CACH;AAEM,eAAejC,iBAAiB,CACrCK,WAAmB,EACnB,EACEC,GAAG,CAAA,EACH6B,SAAS,CAAA,EACTC,OAAO,CAAA,EAKR,EACD;QAMI7B,GAAS;IALb,MAAMA,MAAM,GAAY8B,CAAAA,GAAAA,MAAM,AAG7B,CAAA,OAH6B,CAC5BC,MAAM,CAACC,MAAM,CAACH,OAAO,CAAC,CAACI,OAAO,CAAC,CAACC,MAAM,GAAKA,MAAM,CAAElC,MAAM;IAAA,CAAC,EAC1D,CAACU,KAAK,GAAKA,KAAK,CAACK,IAAI;IAAA,CACtB,AAAC;IAEF,IAAIf,CAAAA,GAAS,GAATA,MAAM,CAAC,CAAC,CAAC,SAAY,GAArBA,KAAAA,CAAqB,GAArBA,GAAS,CAAEc,UAAU,EAAE;QACzBnB,GAAG,CAAC0B,GAAG,CAAC,eAAe,CAAC,CAAC;QACzB,MAAMc,CAAAA,GAAAA,WAAe,AAAoC,CAAA,gBAApC,CAACrC,WAAW,EAAE;YAAEE,MAAM;YAAE4B,SAAS;SAAE,CAAC,CAAC;KAC3D;IAED,wCAAwC;IACxC,MAAMQ,CAAAA,GAAAA,cAAyB,AAAkB,CAAA,0BAAlB,CAACtC,WAAW,EAAEC,GAAG,CAAC,CAAC;IAElD,sEAAsE;IACtE,MAAMP,+BAA+B,CAACM,WAAW,EAAEC,GAAG,EAAEC,MAAM,CAAC,CAAC;IAEhE,OAAO;QAAED,GAAG;QAAEC,MAAM;KAAE,CAAC;CACxB;AAEM,eAAeN,oBAAoB,CAAC,EACzCkC,SAAS,CAAA,EACTC,OAAO,CAAA,EACPQ,QAAQ,CAAA,EAKT,EAAE;QAMoBrC,GAAS;IAL9B,MAAMA,MAAM,GAAG8B,CAAAA,GAAAA,MAAM,AAGpB,CAAA,OAHoB,CACnBC,MAAM,CAACC,MAAM,CAACH,OAAO,CAAC,CAACI,OAAO,CAAC,CAACC,MAAM,GAAKA,MAAM,CAAEI,GAAG;IAAA,CAAC,EACvD,CAAC5B,KAAK,GAAKA,KAAK,CAAC6B,QAAQ;IAAA,CAC1B,AAAC;IAEF,MAAMC,YAAY,GAAGxC,CAAAA,GAAS,GAATA,MAAM,CAAC,CAAC,CAAC,SAAU,GAAnBA,KAAAA,CAAmB,GAAnBA,GAAS,CAAEuC,QAAQ,AAAC;IACzC,IAAI,CAACC,YAAY,EAAE,OAAO,EAAE,CAAC;IAE7B,MAAMC,GAAE,QAAA,CAACC,QAAQ,CAACC,KAAK,CAACrC,KAAI,QAAA,CAACC,IAAI,CAACqB,SAAS,EAAEtB,KAAI,QAAA,CAACsC,OAAO,CAACJ,YAAY,CAAC,CAAC,EAAE;QAAEK,SAAS,EAAE,IAAI;KAAE,CAAC,CAAC;IAE/F,MAAMC,OAAO,CAACC,GAAG,CACf/C,MAAM,CAACI,GAAG,CAAC,CAAC4C,CAAC,GAAKP,GAAE,QAAA,CAACC,QAAQ,CAACO,SAAS,CAAC3C,KAAI,QAAA,CAACC,IAAI,CAACqB,SAAS,EAAEoB,CAAC,CAACT,QAAQ,CAAC,EAAES,CAAC,CAACE,MAAM,CAAC;IAAA,CAAC,CACrF,CAAC;IAEF,OAAOlD,MAAM,CAACI,GAAG,CAAC,CAAC4C,CAAC,GAAKX,QAAQ,GAAG,GAAG,GAAGW,CAAC,CAACT,QAAQ;IAAA,CAAC,CAAC;CACvD"}
|
|
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.");
|
|
@@ -72,31 +73,41 @@ function isEnableHermesManaged(expoConfig, platform) {
|
|
|
72
73
|
return false;
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
|
-
async function buildHermesBundleAsync(projectRoot, code, map,
|
|
76
|
+
async function buildHermesBundleAsync(projectRoot, { code , map , minify =false }) {
|
|
76
77
|
const tempDir = _path.default.join(_os.default.tmpdir(), `expo-bundler-${_process.default.pid}`);
|
|
77
78
|
await _fsExtra.default.ensureDir(tempDir);
|
|
78
79
|
try {
|
|
79
80
|
const tempBundleFile = _path.default.join(tempDir, "index.bundle");
|
|
80
|
-
const tempSourcemapFile = _path.default.join(tempDir, "index.bundle.map");
|
|
81
81
|
await _fsExtra.default.writeFile(tempBundleFile, code);
|
|
82
|
-
|
|
82
|
+
if (map) {
|
|
83
|
+
const tempSourcemapFile = _path.default.join(tempDir, "index.bundle.map");
|
|
84
|
+
await _fsExtra.default.writeFile(tempSourcemapFile, map);
|
|
85
|
+
}
|
|
83
86
|
const tempHbcFile = _path.default.join(tempDir, "index.hbc");
|
|
84
87
|
const hermesCommand = importHermesCommandFromProject(projectRoot);
|
|
85
88
|
const args = [
|
|
86
89
|
"-emit-binary",
|
|
87
90
|
"-out",
|
|
88
91
|
tempHbcFile,
|
|
89
|
-
tempBundleFile
|
|
90
|
-
"-output-source-map"
|
|
92
|
+
tempBundleFile
|
|
91
93
|
];
|
|
92
|
-
if (
|
|
94
|
+
if (minify) {
|
|
93
95
|
args.push("-O");
|
|
94
96
|
}
|
|
97
|
+
if (map) {
|
|
98
|
+
args.push("-output-source-map");
|
|
99
|
+
}
|
|
95
100
|
await (0, _spawnAsync).default(hermesCommand, args);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
let hbc;
|
|
102
|
+
let sourcemap = null;
|
|
103
|
+
if (!map) {
|
|
104
|
+
hbc = await _fsExtra.default.readFile(tempHbcFile);
|
|
105
|
+
} else {
|
|
106
|
+
[hbc, sourcemap] = await Promise.all([
|
|
107
|
+
_fsExtra.default.readFile(tempHbcFile),
|
|
108
|
+
createHermesSourcemapAsync(projectRoot, map, `${tempHbcFile}.map`),
|
|
109
|
+
]);
|
|
110
|
+
}
|
|
100
111
|
return {
|
|
101
112
|
hbc,
|
|
102
113
|
sourcemap
|
|
@@ -106,10 +117,9 @@ async function buildHermesBundleAsync(projectRoot, code, map, optimize = false)
|
|
|
106
117
|
}
|
|
107
118
|
}
|
|
108
119
|
async function createHermesSourcemapAsync(projectRoot, sourcemap, hermesMapFile) {
|
|
109
|
-
const composeSourceMaps = (0, _resolveFromProject).importMetroSourceMapComposeSourceMapsFromProject(projectRoot);
|
|
110
120
|
const bundlerSourcemap = JSON.parse(sourcemap);
|
|
111
121
|
const hermesSourcemap = await _fsExtra.default.readJSON(hermesMapFile);
|
|
112
|
-
return JSON.stringify(composeSourceMaps([
|
|
122
|
+
return JSON.stringify((0, _metroSourceMap).composeSourceMaps([
|
|
113
123
|
bundlerSourcemap,
|
|
114
124
|
hermesSourcemap
|
|
115
125
|
]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/exportHermes.ts"],"sourcesContent":["import type { ExpoConfig, Platform } from '@expo/config';\nimport spawnAsync from '@expo/spawn-async';\nimport fs from 'fs-extra';\nimport os from 'os';\nimport path from 'path';\nimport process from 'process';\n\nimport {\n importMetroSourceMapComposeSourceMapsFromProject,\n resolveFromProject,\n} from '../start/server/metro/resolveFromProject';\n\nexport function importHermesCommandFromProject(projectRoot: string): string {\n const platformExecutable = getHermesCommandPlatform();\n const hermescLocations = [\n // Override hermesc dir by environment variables\n process.env['REACT_NATIVE_OVERRIDE_HERMES_DIR']\n ? `${process.env['REACT_NATIVE_OVERRIDE_HERMES_DIR']}/build/bin/hermesc`\n : '',\n\n // Building hermes from source\n 'react-native/ReactAndroid/hermes-engine/build/hermes/bin/hermesc',\n\n // Prebuilt hermesc in official react-native 0.69+\n `react-native/sdks/hermesc/${platformExecutable}`,\n\n // Legacy hermes-engine package\n `hermes-engine/${platformExecutable}`,\n ];\n\n for (const location of hermescLocations) {\n try {\n return resolveFromProject(projectRoot, location);\n } catch {}\n }\n throw new Error('Cannot find the hermesc executable.');\n}\n\nfunction getHermesCommandPlatform(): string {\n switch (os.platform()) {\n case 'darwin':\n return 'osx-bin/hermesc';\n case 'linux':\n return 'linux64-bin/hermesc';\n case 'win32':\n return 'win64-bin/hermesc.exe';\n default:\n throw new Error(`Unsupported host platform for Hermes compiler: ${os.platform()}`);\n }\n}\n\nexport function isEnableHermesManaged(expoConfig: ExpoConfig, platform: Platform): boolean {\n switch (platform) {\n case 'android': {\n return (expoConfig.android?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n case 'ios': {\n return (expoConfig.ios?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n default:\n return false;\n }\n}\n\ninterface HermesBundleOutput {\n hbc: Uint8Array;\n sourcemap: string;\n}\nexport async function buildHermesBundleAsync(\n projectRoot: string,\n code: string,\n map: string,\n optimize: boolean = false\n): Promise<HermesBundleOutput> {\n const tempDir = path.join(os.tmpdir(), `expo-bundler-${process.pid}`);\n await fs.ensureDir(tempDir);\n try {\n const tempBundleFile = path.join(tempDir, 'index.bundle');\n const tempSourcemapFile = path.join(tempDir, 'index.bundle.map');\n await fs.writeFile(tempBundleFile, code);\n await fs.writeFile(tempSourcemapFile, map);\n\n const tempHbcFile = path.join(tempDir, 'index.hbc');\n const hermesCommand = importHermesCommandFromProject(projectRoot);\n const args = ['-emit-binary', '-out', tempHbcFile, tempBundleFile, '-output-source-map'];\n if (optimize) {\n args.push('-O');\n }\n await spawnAsync(hermesCommand, args);\n\n const [hbc, sourcemap] = await Promise.all([\n fs.readFile(tempHbcFile),\n createHermesSourcemapAsync(projectRoot, map, `${tempHbcFile}.map`),\n ]);\n return {\n hbc,\n sourcemap,\n };\n } finally {\n await fs.remove(tempDir);\n }\n}\n\nexport async function createHermesSourcemapAsync(\n projectRoot: string,\n sourcemap: string,\n hermesMapFile: string\n): Promise<string> {\n const composeSourceMaps = importMetroSourceMapComposeSourceMapsFromProject(projectRoot);\n const bundlerSourcemap = JSON.parse(sourcemap);\n const hermesSourcemap = await fs.readJSON(hermesMapFile);\n return JSON.stringify(composeSourceMaps([bundlerSourcemap, hermesSourcemap]));\n}\n\nexport function parseGradleProperties(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (let line of content.split('\\n')) {\n line = line.trim();\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n const sepIndex = line.indexOf('=');\n const key = line.substr(0, sepIndex);\n const value = line.substr(sepIndex + 1);\n result[key] = value;\n }\n return result;\n}\n\nexport async function maybeThrowFromInconsistentEngineAsync(\n projectRoot: string,\n configFilePath: string,\n platform: string,\n isHermesManaged: boolean\n): Promise<void> {\n const configFileName = path.basename(configFilePath);\n if (\n platform === 'android' &&\n (await maybeInconsistentEngineAndroidAsync(projectRoot, isHermesManaged))\n ) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and Android native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In Android native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'android', 'gradle.properties')}\\n` +\n ` - ${path.join(projectRoot, 'android', 'app', 'build.gradle')}\\n` +\n 'Learn more: https://expo.fyi/hermes-android-config'\n );\n }\n\n if (platform === 'ios' && (await maybeInconsistentEngineIosAsync(projectRoot, isHermesManaged))) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and iOS native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In iOS native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile')}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile.properties.json')}\\n` +\n 'Learn more: https://expo.fyi/hermes-ios-config'\n );\n }\n}\n\nexport async function maybeInconsistentEngineAndroidAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check android native project if by chance to be consistent between app config\n\n // Check gradle.properties from prebuild template\n const gradlePropertiesPath = path.join(projectRoot, 'android', 'gradle.properties');\n if (fs.existsSync(gradlePropertiesPath)) {\n const props = parseGradleProperties(await fs.readFile(gradlePropertiesPath, 'utf8'));\n const isHermesBare = props['hermesEnabled'] === 'true';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\nexport async function maybeInconsistentEngineIosAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check ios native project if by chance to be consistent between app config\n\n // Check ios/Podfile for \":hermes_enabled => true\"\n const podfilePath = path.join(projectRoot, 'ios', 'Podfile');\n if (fs.existsSync(podfilePath)) {\n const content = await fs.readFile(podfilePath, 'utf8');\n const isPropsReference =\n content.search(\n /^\\s*:hermes_enabled\\s*=>\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*nil\\s*\\|\\|\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*'hermes',?/m\n ) >= 0;\n const isHermesBare = content.search(/^\\s*:hermes_enabled\\s*=>\\s*true,?\\s+/m) >= 0;\n if (!isPropsReference && isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n // Check Podfile.properties.json from prebuild template\n const podfilePropertiesPath = path.join(projectRoot, 'ios', 'Podfile.properties.json');\n if (fs.existsSync(podfilePropertiesPath)) {\n const props = await parsePodfilePropertiesAsync(podfilePropertiesPath);\n const isHermesBare = props['expo.jsEngine'] === 'hermes';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\n// https://github.com/facebook/hermes/blob/release-v0.5/include/hermes/BCGen/HBC/BytecodeFileFormat.h#L24-L25\nconst HERMES_MAGIC_HEADER = 'c61fbc03c103191f';\n\nexport async function isHermesBytecodeBundleAsync(file: string): Promise<boolean> {\n const header = await readHermesHeaderAsync(file);\n return header.slice(0, 8).toString('hex') === HERMES_MAGIC_HEADER;\n}\n\nexport async function getHermesBytecodeBundleVersionAsync(file: string): Promise<number> {\n const header = await readHermesHeaderAsync(file);\n if (header.slice(0, 8).toString('hex') !== HERMES_MAGIC_HEADER) {\n throw new Error('Invalid hermes bundle file');\n }\n return header.readUInt32LE(8);\n}\n\nasync function readHermesHeaderAsync(file: string): Promise<Buffer> {\n const fd = await fs.open(file, 'r');\n const buffer = Buffer.alloc(12);\n await fs.read(fd, buffer, 0, 12, null);\n await fs.close(fd);\n return buffer;\n}\n\nasync function parsePodfilePropertiesAsync(\n podfilePropertiesPath: string\n): Promise<Record<string, string>> {\n try {\n return JSON.parse(await fs.readFile(podfilePropertiesPath, 'utf8'));\n } catch {\n return {};\n }\n}\n"],"names":["importHermesCommandFromProject","isEnableHermesManaged","buildHermesBundleAsync","createHermesSourcemapAsync","parseGradleProperties","maybeThrowFromInconsistentEngineAsync","maybeInconsistentEngineAndroidAsync","maybeInconsistentEngineIosAsync","isHermesBytecodeBundleAsync","getHermesBytecodeBundleVersionAsync","projectRoot","platformExecutable","getHermesCommandPlatform","hermescLocations","process","env","location","resolveFromProject","Error","os","platform","expoConfig","android","jsEngine","ios","code","map","optimize","tempDir","path","join","tmpdir","pid","fs","ensureDir","tempBundleFile","tempSourcemapFile","writeFile","tempHbcFile","hermesCommand","args","push","spawnAsync","hbc","sourcemap","Promise","all","readFile","remove","hermesMapFile","composeSourceMaps","importMetroSourceMapComposeSourceMapsFromProject","bundlerSourcemap","JSON","parse","hermesSourcemap","readJSON","stringify","content","result","line","split","trim","startsWith","sepIndex","indexOf","key","substr","value","configFilePath","isHermesManaged","configFileName","basename","gradlePropertiesPath","existsSync","props","isHermesBare","podfilePath","isPropsReference","search","podfilePropertiesPath","parsePodfilePropertiesAsync","HERMES_MAGIC_HEADER","file","header","readHermesHeaderAsync","slice","toString","readUInt32LE","fd","open","buffer","Buffer","alloc","read","close"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/export/exportHermes.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport spawnAsync from '@expo/spawn-async';\nimport fs from 'fs-extra';\nimport { composeSourceMaps } from 'metro-source-map';\nimport os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport resolveFrom from 'resolve-from';\n\nexport function importHermesCommandFromProject(projectRoot: string): string {\n const platformExecutable = getHermesCommandPlatform();\n const hermescLocations = [\n // Override hermesc dir by environment variables\n process.env['REACT_NATIVE_OVERRIDE_HERMES_DIR']\n ? `${process.env['REACT_NATIVE_OVERRIDE_HERMES_DIR']}/build/bin/hermesc`\n : '',\n\n // Building hermes from source\n 'react-native/ReactAndroid/hermes-engine/build/hermes/bin/hermesc',\n\n // Prebuilt hermesc in official react-native 0.69+\n `react-native/sdks/hermesc/${platformExecutable}`,\n\n // Legacy hermes-engine package\n `hermes-engine/${platformExecutable}`,\n ];\n\n for (const location of hermescLocations) {\n try {\n return resolveFrom(projectRoot, location);\n } catch {}\n }\n throw new Error('Cannot find the hermesc executable.');\n}\n\nfunction getHermesCommandPlatform(): string {\n switch (os.platform()) {\n case 'darwin':\n return 'osx-bin/hermesc';\n case 'linux':\n return 'linux64-bin/hermesc';\n case 'win32':\n return 'win64-bin/hermesc.exe';\n default:\n throw new Error(`Unsupported host platform for Hermes compiler: ${os.platform()}`);\n }\n}\n\nexport function isEnableHermesManaged(\n expoConfig: Partial<Pick<ExpoConfig, 'ios' | 'android' | 'jsEngine'>>,\n platform: string\n): boolean {\n switch (platform) {\n case 'android': {\n return (expoConfig.android?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n case 'ios': {\n return (expoConfig.ios?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n default:\n return false;\n }\n}\n\ninterface HermesBundleOutput {\n hbc: Uint8Array;\n sourcemap: string | null;\n}\nexport async function buildHermesBundleAsync(\n projectRoot: string,\n {\n code,\n map,\n minify = false,\n }: {\n code: string;\n map: string | null;\n minify?: boolean;\n }\n): Promise<HermesBundleOutput> {\n const tempDir = path.join(os.tmpdir(), `expo-bundler-${process.pid}`);\n await fs.ensureDir(tempDir);\n try {\n const tempBundleFile = path.join(tempDir, 'index.bundle');\n await fs.writeFile(tempBundleFile, code);\n\n if (map) {\n const tempSourcemapFile = path.join(tempDir, 'index.bundle.map');\n await fs.writeFile(tempSourcemapFile, map);\n }\n\n const tempHbcFile = path.join(tempDir, 'index.hbc');\n const hermesCommand = importHermesCommandFromProject(projectRoot);\n const args = ['-emit-binary', '-out', tempHbcFile, tempBundleFile];\n if (minify) {\n args.push('-O');\n }\n if (map) {\n args.push('-output-source-map');\n }\n await spawnAsync(hermesCommand, args);\n\n let hbc: Buffer;\n let sourcemap: string | null = null;\n\n if (!map) {\n hbc = await fs.readFile(tempHbcFile);\n } else {\n [hbc, sourcemap] = await Promise.all([\n fs.readFile(tempHbcFile),\n createHermesSourcemapAsync(projectRoot, map, `${tempHbcFile}.map`),\n ]);\n }\n return {\n hbc,\n sourcemap,\n };\n } finally {\n await fs.remove(tempDir);\n }\n}\n\nexport async function createHermesSourcemapAsync(\n projectRoot: string,\n sourcemap: string,\n hermesMapFile: string\n): Promise<string> {\n const bundlerSourcemap = JSON.parse(sourcemap);\n const hermesSourcemap = await fs.readJSON(hermesMapFile);\n return JSON.stringify(composeSourceMaps([bundlerSourcemap, hermesSourcemap]));\n}\n\nexport function parseGradleProperties(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (let line of content.split('\\n')) {\n line = line.trim();\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n const sepIndex = line.indexOf('=');\n const key = line.substr(0, sepIndex);\n const value = line.substr(sepIndex + 1);\n result[key] = value;\n }\n return result;\n}\n\nexport async function maybeThrowFromInconsistentEngineAsync(\n projectRoot: string,\n configFilePath: string,\n platform: string,\n isHermesManaged: boolean\n): Promise<void> {\n const configFileName = path.basename(configFilePath);\n if (\n platform === 'android' &&\n (await maybeInconsistentEngineAndroidAsync(projectRoot, isHermesManaged))\n ) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and Android native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In Android native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'android', 'gradle.properties')}\\n` +\n ` - ${path.join(projectRoot, 'android', 'app', 'build.gradle')}\\n` +\n 'Learn more: https://expo.fyi/hermes-android-config'\n );\n }\n\n if (platform === 'ios' && (await maybeInconsistentEngineIosAsync(projectRoot, isHermesManaged))) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and iOS native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In iOS native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile')}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile.properties.json')}\\n` +\n 'Learn more: https://expo.fyi/hermes-ios-config'\n );\n }\n}\n\nexport async function maybeInconsistentEngineAndroidAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check android native project if by chance to be consistent between app config\n\n // Check gradle.properties from prebuild template\n const gradlePropertiesPath = path.join(projectRoot, 'android', 'gradle.properties');\n if (fs.existsSync(gradlePropertiesPath)) {\n const props = parseGradleProperties(await fs.readFile(gradlePropertiesPath, 'utf8'));\n const isHermesBare = props['hermesEnabled'] === 'true';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\nexport async function maybeInconsistentEngineIosAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check ios native project if by chance to be consistent between app config\n\n // Check ios/Podfile for \":hermes_enabled => true\"\n const podfilePath = path.join(projectRoot, 'ios', 'Podfile');\n if (fs.existsSync(podfilePath)) {\n const content = await fs.readFile(podfilePath, 'utf8');\n const isPropsReference =\n content.search(\n /^\\s*:hermes_enabled\\s*=>\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*nil\\s*\\|\\|\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*'hermes',?/m\n ) >= 0;\n const isHermesBare = content.search(/^\\s*:hermes_enabled\\s*=>\\s*true,?\\s+/m) >= 0;\n if (!isPropsReference && isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n // Check Podfile.properties.json from prebuild template\n const podfilePropertiesPath = path.join(projectRoot, 'ios', 'Podfile.properties.json');\n if (fs.existsSync(podfilePropertiesPath)) {\n const props = await parsePodfilePropertiesAsync(podfilePropertiesPath);\n const isHermesBare = props['expo.jsEngine'] === 'hermes';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\n// https://github.com/facebook/hermes/blob/release-v0.5/include/hermes/BCGen/HBC/BytecodeFileFormat.h#L24-L25\nconst HERMES_MAGIC_HEADER = 'c61fbc03c103191f';\n\nexport async function isHermesBytecodeBundleAsync(file: string): Promise<boolean> {\n const header = await readHermesHeaderAsync(file);\n return header.slice(0, 8).toString('hex') === HERMES_MAGIC_HEADER;\n}\n\nexport async function getHermesBytecodeBundleVersionAsync(file: string): Promise<number> {\n const header = await readHermesHeaderAsync(file);\n if (header.slice(0, 8).toString('hex') !== HERMES_MAGIC_HEADER) {\n throw new Error('Invalid hermes bundle file');\n }\n return header.readUInt32LE(8);\n}\n\nasync function readHermesHeaderAsync(file: string): Promise<Buffer> {\n const fd = await fs.open(file, 'r');\n const buffer = Buffer.alloc(12);\n await fs.read(fd, buffer, 0, 12, null);\n await fs.close(fd);\n return buffer;\n}\n\nasync function parsePodfilePropertiesAsync(\n podfilePropertiesPath: string\n): Promise<Record<string, string>> {\n try {\n return JSON.parse(await fs.readFile(podfilePropertiesPath, 'utf8'));\n } catch {\n return {};\n }\n}\n"],"names":["importHermesCommandFromProject","isEnableHermesManaged","buildHermesBundleAsync","createHermesSourcemapAsync","parseGradleProperties","maybeThrowFromInconsistentEngineAsync","maybeInconsistentEngineAndroidAsync","maybeInconsistentEngineIosAsync","isHermesBytecodeBundleAsync","getHermesBytecodeBundleVersionAsync","projectRoot","platformExecutable","getHermesCommandPlatform","hermescLocations","process","env","location","resolveFrom","Error","os","platform","expoConfig","android","jsEngine","ios","code","map","minify","tempDir","path","join","tmpdir","pid","fs","ensureDir","tempBundleFile","writeFile","tempSourcemapFile","tempHbcFile","hermesCommand","args","push","spawnAsync","hbc","sourcemap","readFile","Promise","all","remove","hermesMapFile","bundlerSourcemap","JSON","parse","hermesSourcemap","readJSON","stringify","composeSourceMaps","content","result","line","split","trim","startsWith","sepIndex","indexOf","key","substr","value","configFilePath","isHermesManaged","configFileName","basename","gradlePropertiesPath","existsSync","props","isHermesBare","podfilePath","isPropsReference","search","podfilePropertiesPath","parsePodfilePropertiesAsync","HERMES_MAGIC_HEADER","file","header","readHermesHeaderAsync","slice","toString","readUInt32LE","fd","open","buffer","Buffer","alloc","read","close"],"mappings":"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"}
|