@expo/cli 0.18.19 → 0.18.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +1 -1
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +110 -41
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +0 -1
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/exportApp.js +133 -92
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportHermes.js +15 -0
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +5 -49
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +5 -4
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/run/startBundler.js +1 -8
- package/build/src/run/startBundler.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +10 -3
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +19 -4
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevelopmentSession.js +21 -11
- package/build/src/start/server/DevelopmentSession.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +9 -123
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +469 -177
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js +0 -9
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +44 -37
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +49 -2
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/metroPrivateServer.js +26 -0
- package/build/src/start/server/metro/metroPrivateServer.js.map +1 -0
- package/build/src/start/server/metro/runServer-fork.js +44 -21
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +9 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +7 -4
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +16 -4
- package/build/src/start/server/middleware/metroOptions.js.map +1 -1
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/utils/telemetry/getContext.js +1 -1
- package/package.json +3 -3
- package/build/src/export/fork-bundleAsync.js +0 -284
- package/build/src/export/fork-bundleAsync.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/cli",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.21",
|
|
4
4
|
"description": "The Expo CLI",
|
|
5
5
|
"main": "build/bin/cli",
|
|
6
6
|
"bin": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"lint": "expo-module lint",
|
|
18
18
|
"typecheck": "expo-module typecheck",
|
|
19
19
|
"test": "expo-module test",
|
|
20
|
-
"test:e2e": "jest --config e2e/jest.config.js
|
|
20
|
+
"test:e2e": "jest --config e2e/jest.config.js",
|
|
21
21
|
"test:playwright": "playwright test",
|
|
22
22
|
"prepublishOnly": "expo-module prepublishOnly",
|
|
23
23
|
"expo-module": "expo-module",
|
|
@@ -172,5 +172,5 @@
|
|
|
172
172
|
"tree-kill": "^1.2.2",
|
|
173
173
|
"tsd": "^0.28.1"
|
|
174
174
|
},
|
|
175
|
-
"gitHead": "
|
|
175
|
+
"gitHead": "5e6538be9ebd87877867d0710029a64c883ca00e"
|
|
176
176
|
}
|
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: all[name]
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
createBundlesAsync: ()=>createBundlesAsync,
|
|
13
|
-
getAssets: ()=>getAssets
|
|
14
|
-
});
|
|
15
|
-
function _config() {
|
|
16
|
-
const data = require("@expo/config");
|
|
17
|
-
_config = function() {
|
|
18
|
-
return data;
|
|
19
|
-
};
|
|
20
|
-
return data;
|
|
21
|
-
}
|
|
22
|
-
function _getAssets() {
|
|
23
|
-
const data = /*#__PURE__*/ _interopRequireDefault(require("@expo/metro-config/build/transform-worker/getAssets"));
|
|
24
|
-
_getAssets = function() {
|
|
25
|
-
return data;
|
|
26
|
-
};
|
|
27
|
-
return data;
|
|
28
|
-
}
|
|
29
|
-
function _assert() {
|
|
30
|
-
const data = /*#__PURE__*/ _interopRequireDefault(require("assert"));
|
|
31
|
-
_assert = function() {
|
|
32
|
-
return data;
|
|
33
|
-
};
|
|
34
|
-
return data;
|
|
35
|
-
}
|
|
36
|
-
function _metro() {
|
|
37
|
-
const data = /*#__PURE__*/ _interopRequireDefault(require("metro"));
|
|
38
|
-
_metro = function() {
|
|
39
|
-
return data;
|
|
40
|
-
};
|
|
41
|
-
return data;
|
|
42
|
-
}
|
|
43
|
-
function _server() {
|
|
44
|
-
const data = /*#__PURE__*/ _interopRequireDefault(require("metro/src/Server"));
|
|
45
|
-
_server = function() {
|
|
46
|
-
return data;
|
|
47
|
-
};
|
|
48
|
-
return data;
|
|
49
|
-
}
|
|
50
|
-
function _splitBundleOptions() {
|
|
51
|
-
const data = /*#__PURE__*/ _interopRequireDefault(require("metro/src/lib/splitBundleOptions"));
|
|
52
|
-
_splitBundleOptions = function() {
|
|
53
|
-
return data;
|
|
54
|
-
};
|
|
55
|
-
return data;
|
|
56
|
-
}
|
|
57
|
-
function _path() {
|
|
58
|
-
const data = /*#__PURE__*/ _interopRequireDefault(require("path"));
|
|
59
|
-
_path = function() {
|
|
60
|
-
return data;
|
|
61
|
-
};
|
|
62
|
-
return data;
|
|
63
|
-
}
|
|
64
|
-
const _exportHermes = require("./exportHermes");
|
|
65
|
-
const _attachAtlas = require("../start/server/metro/debugging/attachAtlas");
|
|
66
|
-
const _instantiateMetro = require("../start/server/metro/instantiateMetro");
|
|
67
|
-
const _manifestMiddleware = require("../start/server/middleware/ManifestMiddleware");
|
|
68
|
-
const _metroOptions = require("../start/server/middleware/metroOptions");
|
|
69
|
-
const _env = require("../utils/env");
|
|
70
|
-
const _errors = require("../utils/errors");
|
|
71
|
-
function _interopRequireDefault(obj) {
|
|
72
|
-
return obj && obj.__esModule ? obj : {
|
|
73
|
-
default: obj
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
let nextBuildID = 0;
|
|
77
|
-
async function assertEngineMismatchAsync(projectRoot, exp, platform) {
|
|
78
|
-
const isHermesManaged = (0, _exportHermes.isEnableHermesManaged)(exp, platform);
|
|
79
|
-
const paths = (0, _config().getConfigFilePaths)(projectRoot);
|
|
80
|
-
var _dynamicConfigPath, ref;
|
|
81
|
-
const configFilePath = (ref = (_dynamicConfigPath = paths.dynamicConfigPath) != null ? _dynamicConfigPath : paths.staticConfigPath) != null ? ref : "app.json";
|
|
82
|
-
await (0, _exportHermes.maybeThrowFromInconsistentEngineAsync)(projectRoot, configFilePath, platform, isHermesManaged);
|
|
83
|
-
}
|
|
84
|
-
async function createBundlesAsync(projectRoot, projectConfig, bundleOptions) {
|
|
85
|
-
if (!bundleOptions.platforms.length) {
|
|
86
|
-
return {};
|
|
87
|
-
}
|
|
88
|
-
const { exp , pkg } = projectConfig;
|
|
89
|
-
var _entryPoint;
|
|
90
|
-
const bundles = await bundleProductionMetroClientAsync(projectRoot, exp, {
|
|
91
|
-
// If not legacy, ignore the target option to prevent warnings from being thrown.
|
|
92
|
-
resetCache: bundleOptions.clear,
|
|
93
|
-
maxWorkers: bundleOptions.maxWorkers
|
|
94
|
-
}, bundleOptions.platforms.map((platform)=>({
|
|
95
|
-
platform,
|
|
96
|
-
entryPoint: (_entryPoint = bundleOptions.entryPoint) != null ? _entryPoint : (0, _manifestMiddleware.getEntryWithServerRoot)(projectRoot, {
|
|
97
|
-
platform,
|
|
98
|
-
pkg
|
|
99
|
-
}),
|
|
100
|
-
sourcemaps: bundleOptions.sourcemaps,
|
|
101
|
-
minify: bundleOptions.minify,
|
|
102
|
-
bytecode: bundleOptions.bytecode,
|
|
103
|
-
dev: bundleOptions.dev
|
|
104
|
-
})));
|
|
105
|
-
// { ios: bundle, android: bundle }
|
|
106
|
-
return bundleOptions.platforms.reduce((prev, platform, index)=>({
|
|
107
|
-
...prev,
|
|
108
|
-
[platform]: bundles[index]
|
|
109
|
-
}), {});
|
|
110
|
-
}
|
|
111
|
-
function assertMetroConfig(config) {
|
|
112
|
-
var ref;
|
|
113
|
-
if (!((ref = config.serializer) == null ? void 0 : ref.customSerializer)) {
|
|
114
|
-
throw new _errors.CommandError("METRO_CONFIG_MALFORMED", `The Metro bundler configuration is missing required features from 'expo/metro-config' and cannot be used with Expo CLI. Ensure the metro.config.js file is extending 'expo/metro-config'. Learn more: https://docs.expo.dev/guides/customizing-metro`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
async function bundleProductionMetroClientAsync(projectRoot, expoConfig, metroOptions, bundles) {
|
|
118
|
-
// Assert early so the user doesn't have to wait until bundling is complete to find out that
|
|
119
|
-
// Hermes won't be available.
|
|
120
|
-
await Promise.all(bundles.map(({ platform })=>assertEngineMismatchAsync(projectRoot, expoConfig, platform)));
|
|
121
|
-
const { config , reporter } = await (0, _instantiateMetro.loadMetroConfigAsync)(projectRoot, metroOptions, {
|
|
122
|
-
exp: expoConfig,
|
|
123
|
-
isExporting: true,
|
|
124
|
-
getMetroBundler () {
|
|
125
|
-
return metroServer.getBundler().getBundler();
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
assertMetroConfig(config);
|
|
129
|
-
// Attach Expo Atlas if enabled
|
|
130
|
-
await (0, _attachAtlas.attachAtlasAsync)({
|
|
131
|
-
exp: expoConfig,
|
|
132
|
-
projectRoot,
|
|
133
|
-
metroConfig: config,
|
|
134
|
-
isExporting: true,
|
|
135
|
-
resetAtlasFile: true
|
|
136
|
-
});
|
|
137
|
-
const metroServer = await _metro().default.runMetro(config, {
|
|
138
|
-
watch: false
|
|
139
|
-
});
|
|
140
|
-
const buildAsync = async (bundle)=>{
|
|
141
|
-
const buildID = `bundle_${nextBuildID++}_${bundle.platform}`;
|
|
142
|
-
const isHermes = (0, _exportHermes.isEnableHermesManaged)(expoConfig, bundle.platform);
|
|
143
|
-
if (isHermes) {
|
|
144
|
-
await assertEngineMismatchAsync(projectRoot, expoConfig, bundle.platform);
|
|
145
|
-
}
|
|
146
|
-
const bundleOptions = {
|
|
147
|
-
..._server().default.DEFAULT_BUNDLE_OPTIONS,
|
|
148
|
-
sourceMapUrl: bundle.sourceMapUrl,
|
|
149
|
-
...(0, _metroOptions.getMetroDirectBundleOptionsForExpoConfig)(projectRoot, expoConfig, {
|
|
150
|
-
splitChunks: !_env.env.EXPO_NO_BUNDLE_SPLITTING && bundle.platform === "web",
|
|
151
|
-
minify: bundle.minify,
|
|
152
|
-
mainModuleName: bundle.entryPoint,
|
|
153
|
-
platform: bundle.platform,
|
|
154
|
-
mode: bundle.dev ? "development" : "production",
|
|
155
|
-
engine: isHermes ? "hermes" : undefined,
|
|
156
|
-
serializerIncludeMaps: bundle.sourcemaps,
|
|
157
|
-
bytecode: bundle.bytecode && isHermes,
|
|
158
|
-
// Bundle splitting on web-only for now.
|
|
159
|
-
// serializerOutput: bundle.platform === 'web' ? 'static' : undefined,
|
|
160
|
-
serializerOutput: "static",
|
|
161
|
-
isExporting: true
|
|
162
|
-
}),
|
|
163
|
-
bundleType: "bundle",
|
|
164
|
-
inlineSourceMap: false,
|
|
165
|
-
createModuleIdFactory: config.serializer.createModuleIdFactory,
|
|
166
|
-
onProgress: (transformedFileCount, totalFileCount)=>{
|
|
167
|
-
reporter.update({
|
|
168
|
-
buildID,
|
|
169
|
-
type: "bundle_transform_progressed",
|
|
170
|
-
transformedFileCount,
|
|
171
|
-
totalFileCount
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
};
|
|
175
|
-
const bundleDetails = {
|
|
176
|
-
...bundleOptions,
|
|
177
|
-
buildID
|
|
178
|
-
};
|
|
179
|
-
reporter.update({
|
|
180
|
-
buildID,
|
|
181
|
-
type: "bundle_build_started",
|
|
182
|
-
bundleDetails
|
|
183
|
-
});
|
|
184
|
-
try {
|
|
185
|
-
const artifacts = await forkMetroBuildAsync(metroServer, bundleOptions);
|
|
186
|
-
reporter.update({
|
|
187
|
-
buildID,
|
|
188
|
-
type: "bundle_build_done"
|
|
189
|
-
});
|
|
190
|
-
return artifacts;
|
|
191
|
-
} catch (error) {
|
|
192
|
-
reporter.update({
|
|
193
|
-
buildID,
|
|
194
|
-
type: "bundle_build_failed"
|
|
195
|
-
});
|
|
196
|
-
throw error;
|
|
197
|
-
}
|
|
198
|
-
};
|
|
199
|
-
try {
|
|
200
|
-
return await Promise.all(bundles.map((bundle)=>buildAsync(bundle)));
|
|
201
|
-
} catch (error) {
|
|
202
|
-
// New line so errors don't show up inline with the progress bar
|
|
203
|
-
console.log("");
|
|
204
|
-
throw error;
|
|
205
|
-
} finally{
|
|
206
|
-
metroServer.end();
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
async function getAssets(metro, options) {
|
|
210
|
-
const { entryFile , onProgress , resolverOptions , transformOptions } = (0, _splitBundleOptions().default)(options);
|
|
211
|
-
// @ts-expect-error: _bundler isn't exposed on the type.
|
|
212
|
-
const dependencies = await metro._bundler.getDependencies([
|
|
213
|
-
entryFile
|
|
214
|
-
], transformOptions, resolverOptions, {
|
|
215
|
-
onProgress,
|
|
216
|
-
shallow: false,
|
|
217
|
-
lazy: false
|
|
218
|
-
});
|
|
219
|
-
// @ts-expect-error
|
|
220
|
-
const _config = metro._config;
|
|
221
|
-
return (0, _getAssets().default)(dependencies, {
|
|
222
|
-
processModuleFilter: _config.serializer.processModuleFilter,
|
|
223
|
-
assetPlugins: _config.transformer.assetPlugins,
|
|
224
|
-
platform: transformOptions.platform,
|
|
225
|
-
projectRoot: _config.projectRoot,
|
|
226
|
-
publicPath: _config.transformer.publicPath
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
function isMetroServerInstance(metro) {
|
|
230
|
-
return "_shouldAddModuleToIgnoreList" in metro;
|
|
231
|
-
}
|
|
232
|
-
async function forkMetroBuildAsync(metro, options) {
|
|
233
|
-
var ref;
|
|
234
|
-
if (!isMetroServerInstance(metro)) {
|
|
235
|
-
throw new Error("Expected Metro server instance to have private functions exposed.");
|
|
236
|
-
}
|
|
237
|
-
if (((ref = options.serializerOptions) == null ? void 0 : ref.output) !== "static") {
|
|
238
|
-
throw new Error("Only multi-serializer output is supported.");
|
|
239
|
-
}
|
|
240
|
-
const { entryFile , graphOptions , onProgress , resolverOptions , serializerOptions , transformOptions , } = (0, _splitBundleOptions().default)(options);
|
|
241
|
-
const { prepend , graph } = await metro._bundler.buildGraph(entryFile, transformOptions, resolverOptions, {
|
|
242
|
-
onProgress,
|
|
243
|
-
shallow: graphOptions.shallow,
|
|
244
|
-
// @ts-expect-error
|
|
245
|
-
lazy: graphOptions.lazy
|
|
246
|
-
});
|
|
247
|
-
const entryPoint = metro._getEntryPointAbsolutePath(entryFile);
|
|
248
|
-
var _unstable_serverRoot;
|
|
249
|
-
const bundleOptions = {
|
|
250
|
-
asyncRequireModulePath: await metro._resolveRelativePath(metro._config.transformer.asyncRequireModulePath, {
|
|
251
|
-
relativeTo: "project",
|
|
252
|
-
resolverOptions,
|
|
253
|
-
transformOptions
|
|
254
|
-
}),
|
|
255
|
-
processModuleFilter: metro._config.serializer.processModuleFilter,
|
|
256
|
-
createModuleId: metro._createModuleId,
|
|
257
|
-
getRunModuleStatement: metro._config.serializer.getRunModuleStatement,
|
|
258
|
-
dev: transformOptions.dev,
|
|
259
|
-
includeAsyncPaths: graphOptions.lazy,
|
|
260
|
-
projectRoot: metro._config.projectRoot,
|
|
261
|
-
modulesOnly: serializerOptions.modulesOnly,
|
|
262
|
-
runBeforeMainModule: metro._config.serializer.getModulesRunBeforeMainModule(_path().default.relative(metro._config.projectRoot, entryPoint)),
|
|
263
|
-
runModule: serializerOptions.runModule,
|
|
264
|
-
sourceMapUrl: serializerOptions.sourceMapUrl,
|
|
265
|
-
sourceUrl: serializerOptions.sourceUrl,
|
|
266
|
-
inlineSourceMap: serializerOptions.inlineSourceMap,
|
|
267
|
-
serverRoot: (_unstable_serverRoot = metro._config.server.unstable_serverRoot) != null ? _unstable_serverRoot : metro._config.projectRoot,
|
|
268
|
-
shouldAddToIgnoreList: (module)=>metro._shouldAddModuleToIgnoreList(module),
|
|
269
|
-
// Custom options we pass to the serializer to emulate the URL query parameters.
|
|
270
|
-
serializerOptions: options.serializerOptions
|
|
271
|
-
};
|
|
272
|
-
assertMetroConfig(metro._config);
|
|
273
|
-
const bundle = await metro._config.serializer.customSerializer(entryPoint, // @ts-expect-error: Metro is typed incorrectly
|
|
274
|
-
prepend, graph, bundleOptions);
|
|
275
|
-
try {
|
|
276
|
-
const parsed = typeof bundle === "string" ? JSON.parse(bundle) : bundle;
|
|
277
|
-
(0, _assert().default)("artifacts" in parsed && Array.isArray(parsed.artifacts), "Expected serializer to return an object with key artifacts to contain an array of serial assets.");
|
|
278
|
-
return parsed;
|
|
279
|
-
} catch (error) {
|
|
280
|
-
throw new Error("Serializer did not return expected format. The project copy of `expo/metro-config` may be out of date. Error: " + error.message);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
//# sourceMappingURL=fork-bundleAsync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/export/fork-bundleAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfigFilePaths, Platform, ProjectConfig } from '@expo/config';\nimport { LoadOptions } from '@expo/metro-config';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport getMetroAssets from '@expo/metro-config/build/transform-worker/getAssets';\nimport assert from 'assert';\nimport Metro, { MixedOutput, Module, ReadOnlyGraph } from 'metro';\nimport type { TransformInputOptions } from 'metro/src/DeltaBundler/types';\nimport IncrementalBundler from 'metro/src/IncrementalBundler';\nimport Server from 'metro/src/Server';\nimport splitBundleOptions from 'metro/src/lib/splitBundleOptions';\nimport type {\n ResolverInputOptions,\n BundleOptions as MetroBundleOptions,\n} from 'metro/src/shared/types';\nimport { ConfigT } from 'metro-config';\nimport path from 'path';\n\nimport { isEnableHermesManaged, maybeThrowFromInconsistentEngineAsync } from './exportHermes';\nimport { attachAtlasAsync } from '../start/server/metro/debugging/attachAtlas';\nimport { loadMetroConfigAsync } from '../start/server/metro/instantiateMetro';\nimport { getEntryWithServerRoot } from '../start/server/middleware/ManifestMiddleware';\nimport {\n ExpoMetroBundleOptions,\n getMetroDirectBundleOptionsForExpoConfig,\n} from '../start/server/middleware/metroOptions';\nimport { env } from '../utils/env';\nimport { CommandError } from '../utils/errors';\n\nexport type MetroDevServerOptions = LoadOptions;\n\nexport type BundleOptions = {\n entryPoint: string;\n platform: 'android' | 'ios' | 'web';\n dev?: boolean;\n minify?: boolean;\n bytecode: boolean;\n sourceMapUrl?: string;\n sourcemaps?: boolean;\n};\nexport type BundleAssetWithFileHashes = Metro.AssetData & {\n fileHashes: string[]; // added by the hashAssets asset plugin\n};\nexport type BundleOutput = {\n artifacts: SerialAsset[];\n assets: readonly BundleAssetWithFileHashes[];\n};\n\nlet nextBuildID = 0;\n\nasync function assertEngineMismatchAsync(\n projectRoot: string,\n exp: Pick<ExpoConfig, 'ios' | 'android' | 'jsEngine'>,\n platform: Platform\n) {\n const isHermesManaged = isEnableHermesManaged(exp, platform);\n\n const paths = getConfigFilePaths(projectRoot);\n const configFilePath = paths.dynamicConfigPath ?? paths.staticConfigPath ?? 'app.json';\n await maybeThrowFromInconsistentEngineAsync(\n projectRoot,\n configFilePath,\n platform,\n isHermesManaged\n );\n}\n\nexport async function createBundlesAsync(\n projectRoot: string,\n projectConfig: ProjectConfig,\n bundleOptions: {\n clear?: boolean;\n maxWorkers?: number;\n platforms: Platform[];\n dev?: boolean;\n minify?: boolean;\n bytecode: boolean;\n sourcemaps?: boolean;\n entryPoint?: string;\n }\n): Promise<Partial<Record<Platform, BundleOutput>>> {\n if (!bundleOptions.platforms.length) {\n return {};\n }\n const { exp, pkg } = projectConfig;\n\n const bundles = await bundleProductionMetroClientAsync(\n projectRoot,\n exp,\n {\n // If not legacy, ignore the target option to prevent warnings from being thrown.\n resetCache: bundleOptions.clear,\n maxWorkers: bundleOptions.maxWorkers,\n },\n bundleOptions.platforms.map((platform: Platform) => ({\n platform,\n entryPoint:\n bundleOptions.entryPoint ?? getEntryWithServerRoot(projectRoot, { platform, pkg }),\n sourcemaps: bundleOptions.sourcemaps,\n minify: bundleOptions.minify,\n bytecode: bundleOptions.bytecode,\n dev: bundleOptions.dev,\n }))\n );\n\n // { ios: bundle, android: bundle }\n return bundleOptions.platforms.reduce<Partial<Record<Platform, BundleOutput>>>(\n (prev, platform, index) => ({\n ...prev,\n [platform]: bundles[index],\n }),\n {}\n );\n}\n\nfunction assertMetroConfig(\n config: ConfigT\n): asserts config is ConfigT & { serializer: NonNullable<ConfigT['serializer']> } {\n if (!config.serializer?.customSerializer) {\n throw new CommandError(\n 'METRO_CONFIG_MALFORMED',\n `The Metro bundler configuration is missing required features from 'expo/metro-config' and cannot be used with Expo CLI. Ensure the metro.config.js file is extending 'expo/metro-config'. Learn more: https://docs.expo.dev/guides/customizing-metro`\n );\n }\n}\n\nasync function bundleProductionMetroClientAsync(\n projectRoot: string,\n expoConfig: ExpoConfig,\n metroOptions: MetroDevServerOptions,\n bundles: BundleOptions[]\n): Promise<BundleOutput[]> {\n // Assert early so the user doesn't have to wait until bundling is complete to find out that\n // Hermes won't be available.\n await Promise.all(\n bundles.map(({ platform }) => assertEngineMismatchAsync(projectRoot, expoConfig, platform))\n );\n\n const { config, reporter } = await loadMetroConfigAsync(projectRoot, metroOptions, {\n exp: expoConfig,\n isExporting: true,\n getMetroBundler() {\n return metroServer.getBundler().getBundler();\n },\n });\n\n assertMetroConfig(config);\n\n // Attach Expo Atlas if enabled\n await attachAtlasAsync({\n exp: expoConfig,\n projectRoot,\n metroConfig: config,\n isExporting: true,\n resetAtlasFile: true, // NOTE(cedric): reset the Atlas file once, and reuse it for static exports\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 if (isHermes) {\n await assertEngineMismatchAsync(projectRoot, expoConfig, bundle.platform);\n }\n const bundleOptions: MetroBundleOptions = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n sourceMapUrl: bundle.sourceMapUrl,\n ...getMetroDirectBundleOptionsForExpoConfig(projectRoot, expoConfig, {\n splitChunks: !env.EXPO_NO_BUNDLE_SPLITTING && bundle.platform === 'web',\n minify: bundle.minify,\n mainModuleName: bundle.entryPoint,\n platform: bundle.platform,\n mode: bundle.dev ? 'development' : 'production',\n engine: isHermes ? 'hermes' : undefined,\n serializerIncludeMaps: bundle.sourcemaps,\n bytecode: bundle.bytecode && isHermes,\n // Bundle splitting on web-only for now.\n // serializerOutput: bundle.platform === 'web' ? 'static' : undefined,\n serializerOutput: 'static',\n isExporting: true,\n }),\n bundleType: 'bundle',\n inlineSourceMap: false,\n createModuleIdFactory: config.serializer.createModuleIdFactory,\n onProgress: (transformedFileCount: number, totalFileCount: number) => {\n reporter.update({\n buildID,\n type: 'bundle_transform_progressed',\n transformedFileCount,\n totalFileCount,\n });\n },\n };\n\n const bundleDetails = {\n ...bundleOptions,\n buildID,\n };\n reporter.update({\n buildID,\n type: 'bundle_build_started',\n bundleDetails,\n });\n try {\n const artifacts = await forkMetroBuildAsync(metroServer, bundleOptions);\n reporter.update({\n buildID,\n type: 'bundle_build_done',\n });\n return artifacts;\n } catch (error) {\n reporter.update({\n buildID,\n type: 'bundle_build_failed',\n });\n\n throw error;\n }\n };\n\n try {\n return await Promise.all(bundles.map((bundle) => buildAsync(bundle)));\n } catch (error) {\n // New line so errors don't show up inline with the progress bar\n console.log('');\n throw error;\n } finally {\n metroServer.end();\n }\n}\n\n// Forked out of Metro because the `this._getServerRootDir()` doesn't match the development\n// behavior.\nexport async function getAssets(metro: Metro.Server, options: MetroBundleOptions) {\n const { entryFile, onProgress, resolverOptions, transformOptions } = splitBundleOptions(options);\n\n // @ts-expect-error: _bundler isn't exposed on the type.\n const dependencies = await metro._bundler.getDependencies(\n [entryFile],\n transformOptions,\n resolverOptions,\n { onProgress, shallow: false, lazy: false }\n );\n\n // @ts-expect-error\n const _config = metro._config as ConfigT;\n\n return getMetroAssets(dependencies, {\n processModuleFilter: _config.serializer.processModuleFilter,\n assetPlugins: _config.transformer.assetPlugins,\n platform: transformOptions.platform!,\n projectRoot: _config.projectRoot, // this._getServerRootDir(),\n publicPath: _config.transformer.publicPath,\n });\n}\n\nfunction isMetroServerInstance(metro: Metro.Server): metro is Metro.Server & {\n _shouldAddModuleToIgnoreList: (module: Module<MixedOutput>) => boolean;\n _bundler: IncrementalBundler;\n _config: ConfigT;\n _createModuleId: (path: string) => number;\n _resolveRelativePath(\n filePath: string,\n {\n relativeTo,\n resolverOptions,\n transformOptions,\n }: {\n relativeTo: 'project' | 'server';\n resolverOptions: ResolverInputOptions;\n transformOptions: TransformInputOptions;\n }\n ): Promise<string>;\n _getEntryPointAbsolutePath(entryFile: string): string;\n _getSortedModules(graph: ReadOnlyGraph): Module<MixedOutput>[];\n} {\n return '_shouldAddModuleToIgnoreList' in metro;\n}\n\nasync function forkMetroBuildAsync(\n metro: Metro.Server,\n options: ExpoMetroBundleOptions\n): Promise<{ artifacts: SerialAsset[]; assets: readonly BundleAssetWithFileHashes[] }> {\n if (!isMetroServerInstance(metro)) {\n throw new Error('Expected Metro server instance to have private functions exposed.');\n }\n\n if (options.serializerOptions?.output !== 'static') {\n throw new Error('Only multi-serializer output is supported.');\n }\n\n const {\n entryFile,\n graphOptions,\n onProgress,\n resolverOptions,\n serializerOptions,\n transformOptions,\n } = splitBundleOptions(options);\n\n const { prepend, graph } = await metro._bundler.buildGraph(\n entryFile,\n transformOptions,\n resolverOptions,\n {\n onProgress,\n shallow: graphOptions.shallow,\n // @ts-expect-error\n lazy: graphOptions.lazy,\n }\n );\n\n const entryPoint = metro._getEntryPointAbsolutePath(entryFile);\n\n const bundleOptions = {\n asyncRequireModulePath: await metro._resolveRelativePath(\n metro._config.transformer.asyncRequireModulePath,\n {\n relativeTo: 'project',\n resolverOptions,\n transformOptions,\n }\n ),\n processModuleFilter: metro._config.serializer.processModuleFilter,\n createModuleId: metro._createModuleId,\n getRunModuleStatement: metro._config.serializer.getRunModuleStatement,\n dev: transformOptions.dev,\n includeAsyncPaths: graphOptions.lazy,\n projectRoot: metro._config.projectRoot,\n modulesOnly: serializerOptions.modulesOnly,\n runBeforeMainModule: metro._config.serializer.getModulesRunBeforeMainModule(\n path.relative(metro._config.projectRoot, entryPoint)\n ),\n runModule: serializerOptions.runModule,\n sourceMapUrl: serializerOptions.sourceMapUrl,\n sourceUrl: serializerOptions.sourceUrl,\n inlineSourceMap: serializerOptions.inlineSourceMap,\n serverRoot: metro._config.server.unstable_serverRoot ?? metro._config.projectRoot,\n shouldAddToIgnoreList: (module: Module<MixedOutput>) =>\n metro._shouldAddModuleToIgnoreList(module),\n // Custom options we pass to the serializer to emulate the URL query parameters.\n serializerOptions: options.serializerOptions,\n };\n\n assertMetroConfig(metro._config);\n\n const bundle = await metro._config.serializer.customSerializer!(\n entryPoint,\n // @ts-expect-error: Metro is typed incorrectly\n prepend,\n graph,\n bundleOptions\n );\n\n try {\n const parsed = typeof bundle === 'string' ? JSON.parse(bundle) : bundle;\n\n assert(\n 'artifacts' in parsed && Array.isArray(parsed.artifacts),\n 'Expected serializer to return an object with key artifacts to contain an array of serial assets.'\n );\n return parsed;\n } catch (error: any) {\n throw new Error(\n 'Serializer did not return expected format. The project copy of `expo/metro-config` may be out of date. Error: ' +\n error.message\n );\n }\n}\n"],"names":["createBundlesAsync","getAssets","nextBuildID","assertEngineMismatchAsync","projectRoot","exp","platform","isHermesManaged","isEnableHermesManaged","paths","getConfigFilePaths","configFilePath","dynamicConfigPath","staticConfigPath","maybeThrowFromInconsistentEngineAsync","projectConfig","bundleOptions","platforms","length","pkg","bundles","bundleProductionMetroClientAsync","resetCache","clear","maxWorkers","map","entryPoint","getEntryWithServerRoot","sourcemaps","minify","bytecode","dev","reduce","prev","index","assertMetroConfig","config","serializer","customSerializer","CommandError","expoConfig","metroOptions","Promise","all","reporter","loadMetroConfigAsync","isExporting","getMetroBundler","metroServer","getBundler","attachAtlasAsync","metroConfig","resetAtlasFile","Metro","runMetro","watch","buildAsync","bundle","buildID","isHermes","Server","DEFAULT_BUNDLE_OPTIONS","sourceMapUrl","getMetroDirectBundleOptionsForExpoConfig","splitChunks","env","EXPO_NO_BUNDLE_SPLITTING","mainModuleName","mode","engine","undefined","serializerIncludeMaps","serializerOutput","bundleType","inlineSourceMap","createModuleIdFactory","onProgress","transformedFileCount","totalFileCount","update","type","bundleDetails","artifacts","forkMetroBuildAsync","error","console","log","end","metro","options","entryFile","resolverOptions","transformOptions","splitBundleOptions","dependencies","_bundler","getDependencies","shallow","lazy","_config","getMetroAssets","processModuleFilter","assetPlugins","transformer","publicPath","isMetroServerInstance","Error","serializerOptions","output","graphOptions","prepend","graph","buildGraph","_getEntryPointAbsolutePath","asyncRequireModulePath","_resolveRelativePath","relativeTo","createModuleId","_createModuleId","getRunModuleStatement","includeAsyncPaths","modulesOnly","runBeforeMainModule","getModulesRunBeforeMainModule","path","relative","runModule","sourceUrl","serverRoot","server","unstable_serverRoot","shouldAddToIgnoreList","module","_shouldAddModuleToIgnoreList","parsed","JSON","parse","assert","Array","isArray","message"],"mappings":"AAAA;;;;;;;;;;;IAkEsBA,kBAAkB,MAAlBA,kBAAkB;IAyKlBC,SAAS,MAATA,SAAS;;;yBA3OyC,cAAc;;;;;;;8DAG3D,qDAAqD;;;;;;;8DAC7D,QAAQ;;;;;;;8DAC+B,OAAO;;;;;;;8DAG9C,kBAAkB;;;;;;;8DACN,kCAAkC;;;;;;;8DAMhD,MAAM;;;;;;8BAEsD,gBAAgB;6BAC5D,6CAA6C;kCACzC,wCAAwC;oCACtC,+CAA+C;8BAI/E,yCAAyC;qBAC5B,cAAc;wBACL,iBAAiB;;;;;;AAqB9C,IAAIC,WAAW,GAAG,CAAC,AAAC;AAEpB,eAAeC,yBAAyB,CACtCC,WAAmB,EACnBC,GAAqD,EACrDC,QAAkB,EAClB;IACA,MAAMC,eAAe,GAAGC,IAAAA,aAAqB,sBAAA,EAACH,GAAG,EAAEC,QAAQ,CAAC,AAAC;IAE7D,MAAMG,KAAK,GAAGC,IAAAA,OAAkB,EAAA,mBAAA,EAACN,WAAW,CAAC,AAAC;QACvBK,kBAAuB,EAAvBA,GAAiD;IAAxE,MAAME,cAAc,GAAGF,CAAAA,GAAiD,GAAjDA,CAAAA,kBAAuB,GAAvBA,KAAK,CAACG,iBAAiB,YAAvBH,kBAAuB,GAAIA,KAAK,CAACI,gBAAgB,YAAjDJ,GAAiD,GAAI,UAAU,AAAC;IACvF,MAAMK,IAAAA,aAAqC,sCAAA,EACzCV,WAAW,EACXO,cAAc,EACdL,QAAQ,EACRC,eAAe,CAChB,CAAC;AACJ,CAAC;AAEM,eAAeP,kBAAkB,CACtCI,WAAmB,EACnBW,aAA4B,EAC5BC,aASC,EACiD;IAClD,IAAI,CAACA,aAAa,CAACC,SAAS,CAACC,MAAM,EAAE;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,EAAEb,GAAG,CAAA,EAAEc,GAAG,CAAA,EAAE,GAAGJ,aAAa,AAAC;QAa7BC,WAAwB;IAX9B,MAAMI,OAAO,GAAG,MAAMC,gCAAgC,CACpDjB,WAAW,EACXC,GAAG,EACH;QACE,iFAAiF;QACjFiB,UAAU,EAAEN,aAAa,CAACO,KAAK;QAC/BC,UAAU,EAAER,aAAa,CAACQ,UAAU;KACrC,EACDR,aAAa,CAACC,SAAS,CAACQ,GAAG,CAAC,CAACnB,QAAkB,GAAK,CAAC;YACnDA,QAAQ;YACRoB,UAAU,EACRV,CAAAA,WAAwB,GAAxBA,aAAa,CAACU,UAAU,YAAxBV,WAAwB,GAAIW,IAAAA,mBAAsB,uBAAA,EAACvB,WAAW,EAAE;gBAAEE,QAAQ;gBAAEa,GAAG;aAAE,CAAC;YACpFS,UAAU,EAAEZ,aAAa,CAACY,UAAU;YACpCC,MAAM,EAAEb,aAAa,CAACa,MAAM;YAC5BC,QAAQ,EAAEd,aAAa,CAACc,QAAQ;YAChCC,GAAG,EAAEf,aAAa,CAACe,GAAG;SACvB,CAAC,CAAC,CACJ,AAAC;IAEF,mCAAmC;IACnC,OAAOf,aAAa,CAACC,SAAS,CAACe,MAAM,CACnC,CAACC,IAAI,EAAE3B,QAAQ,EAAE4B,KAAK,GAAK,CAAC;YAC1B,GAAGD,IAAI;YACP,CAAC3B,QAAQ,CAAC,EAAEc,OAAO,CAACc,KAAK,CAAC;SAC3B,CAAC,EACF,EAAE,CACH,CAAC;AACJ,CAAC;AAED,SAASC,iBAAiB,CACxBC,MAAe,EACiE;QAC3EA,GAAiB;IAAtB,IAAI,CAACA,CAAAA,CAAAA,GAAiB,GAAjBA,MAAM,CAACC,UAAU,SAAkB,GAAnCD,KAAAA,CAAmC,GAAnCA,GAAiB,CAAEE,gBAAgB,CAAA,EAAE;QACxC,MAAM,IAAIC,OAAY,aAAA,CACpB,wBAAwB,EACxB,CAAC,oPAAoP,CAAC,CACvP,CAAC;IACJ,CAAC;AACH,CAAC;AAED,eAAelB,gCAAgC,CAC7CjB,WAAmB,EACnBoC,UAAsB,EACtBC,YAAmC,EACnCrB,OAAwB,EACC;IACzB,4FAA4F;IAC5F,6BAA6B;IAC7B,MAAMsB,OAAO,CAACC,GAAG,CACfvB,OAAO,CAACK,GAAG,CAAC,CAAC,EAAEnB,QAAQ,CAAA,EAAE,GAAKH,yBAAyB,CAACC,WAAW,EAAEoC,UAAU,EAAElC,QAAQ,CAAC,CAAC,CAC5F,CAAC;IAEF,MAAM,EAAE8B,MAAM,CAAA,EAAEQ,QAAQ,CAAA,EAAE,GAAG,MAAMC,IAAAA,iBAAoB,qBAAA,EAACzC,WAAW,EAAEqC,YAAY,EAAE;QACjFpC,GAAG,EAAEmC,UAAU;QACfM,WAAW,EAAE,IAAI;QACjBC,eAAe,IAAG;YAChB,OAAOC,WAAW,CAACC,UAAU,EAAE,CAACA,UAAU,EAAE,CAAC;QAC/C,CAAC;KACF,CAAC,AAAC;IAEHd,iBAAiB,CAACC,MAAM,CAAC,CAAC;IAE1B,+BAA+B;IAC/B,MAAMc,IAAAA,YAAgB,iBAAA,EAAC;QACrB7C,GAAG,EAAEmC,UAAU;QACfpC,WAAW;QACX+C,WAAW,EAAEf,MAAM;QACnBU,WAAW,EAAE,IAAI;QACjBM,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IAEH,MAAMJ,WAAW,GAAG,MAAMK,MAAK,EAAA,QAAA,CAACC,QAAQ,CAAClB,MAAM,EAAE;QAC/CmB,KAAK,EAAE,KAAK;KACb,CAAC,AAAC;IAEH,MAAMC,UAAU,GAAG,OAAOC,MAAqB,GAA4B;QACzE,MAAMC,OAAO,GAAG,CAAC,OAAO,EAAExD,WAAW,EAAE,CAAC,CAAC,EAAEuD,MAAM,CAACnD,QAAQ,CAAC,CAAC,AAAC;QAC7D,MAAMqD,QAAQ,GAAGnD,IAAAA,aAAqB,sBAAA,EAACgC,UAAU,EAAEiB,MAAM,CAACnD,QAAQ,CAAC,AAAC;QACpE,IAAIqD,QAAQ,EAAE;YACZ,MAAMxD,yBAAyB,CAACC,WAAW,EAAEoC,UAAU,EAAEiB,MAAM,CAACnD,QAAQ,CAAC,CAAC;QAC5E,CAAC;QACD,MAAMU,aAAa,GAAuB;YACxC,GAAG4C,OAAM,EAAA,QAAA,CAACC,sBAAsB;YAChCC,YAAY,EAAEL,MAAM,CAACK,YAAY;YACjC,GAAGC,IAAAA,aAAwC,yCAAA,EAAC3D,WAAW,EAAEoC,UAAU,EAAE;gBACnEwB,WAAW,EAAE,CAACC,IAAG,IAAA,CAACC,wBAAwB,IAAIT,MAAM,CAACnD,QAAQ,KAAK,KAAK;gBACvEuB,MAAM,EAAE4B,MAAM,CAAC5B,MAAM;gBACrBsC,cAAc,EAAEV,MAAM,CAAC/B,UAAU;gBACjCpB,QAAQ,EAAEmD,MAAM,CAACnD,QAAQ;gBACzB8D,IAAI,EAAEX,MAAM,CAAC1B,GAAG,GAAG,aAAa,GAAG,YAAY;gBAC/CsC,MAAM,EAAEV,QAAQ,GAAG,QAAQ,GAAGW,SAAS;gBACvCC,qBAAqB,EAAEd,MAAM,CAAC7B,UAAU;gBACxCE,QAAQ,EAAE2B,MAAM,CAAC3B,QAAQ,IAAI6B,QAAQ;gBACrC,wCAAwC;gBACxC,sEAAsE;gBACtEa,gBAAgB,EAAE,QAAQ;gBAC1B1B,WAAW,EAAE,IAAI;aAClB,CAAC;YACF2B,UAAU,EAAE,QAAQ;YACpBC,eAAe,EAAE,KAAK;YACtBC,qBAAqB,EAAEvC,MAAM,CAACC,UAAU,CAACsC,qBAAqB;YAC9DC,UAAU,EAAE,CAACC,oBAA4B,EAAEC,cAAsB,GAAK;gBACpElC,QAAQ,CAACmC,MAAM,CAAC;oBACdrB,OAAO;oBACPsB,IAAI,EAAE,6BAA6B;oBACnCH,oBAAoB;oBACpBC,cAAc;iBACf,CAAC,CAAC;YACL,CAAC;SACF,AAAC;QAEF,MAAMG,aAAa,GAAG;YACpB,GAAGjE,aAAa;YAChB0C,OAAO;SACR,AAAC;QACFd,QAAQ,CAACmC,MAAM,CAAC;YACdrB,OAAO;YACPsB,IAAI,EAAE,sBAAsB;YAC5BC,aAAa;SACd,CAAC,CAAC;QACH,IAAI;YACF,MAAMC,SAAS,GAAG,MAAMC,mBAAmB,CAACnC,WAAW,EAAEhC,aAAa,CAAC,AAAC;YACxE4B,QAAQ,CAACmC,MAAM,CAAC;gBACdrB,OAAO;gBACPsB,IAAI,EAAE,mBAAmB;aAC1B,CAAC,CAAC;YACH,OAAOE,SAAS,CAAC;QACnB,EAAE,OAAOE,KAAK,EAAE;YACdxC,QAAQ,CAACmC,MAAM,CAAC;gBACdrB,OAAO;gBACPsB,IAAI,EAAE,qBAAqB;aAC5B,CAAC,CAAC;YAEH,MAAMI,KAAK,CAAC;QACd,CAAC;IACH,CAAC,AAAC;IAEF,IAAI;QACF,OAAO,MAAM1C,OAAO,CAACC,GAAG,CAACvB,OAAO,CAACK,GAAG,CAAC,CAACgC,MAAM,GAAKD,UAAU,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxE,EAAE,OAAO2B,KAAK,EAAE;QACd,gEAAgE;QAChEC,OAAO,CAACC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAMF,KAAK,CAAC;IACd,CAAC,QAAS;QACRpC,WAAW,CAACuC,GAAG,EAAE,CAAC;IACpB,CAAC;AACH,CAAC;AAIM,eAAetF,SAAS,CAACuF,KAAmB,EAAEC,OAA2B,EAAE;IAChF,MAAM,EAAEC,SAAS,CAAA,EAAEd,UAAU,CAAA,EAAEe,eAAe,CAAA,EAAEC,gBAAgB,CAAA,EAAE,GAAGC,IAAAA,mBAAkB,EAAA,QAAA,EAACJ,OAAO,CAAC,AAAC;IAEjG,wDAAwD;IACxD,MAAMK,YAAY,GAAG,MAAMN,KAAK,CAACO,QAAQ,CAACC,eAAe,CACvD;QAACN,SAAS;KAAC,EACXE,gBAAgB,EAChBD,eAAe,EACf;QAAEf,UAAU;QAAEqB,OAAO,EAAE,KAAK;QAAEC,IAAI,EAAE,KAAK;KAAE,CAC5C,AAAC;IAEF,mBAAmB;IACnB,MAAMC,OAAO,GAAGX,KAAK,CAACW,OAAO,AAAW,AAAC;IAEzC,OAAOC,IAAAA,UAAc,EAAA,QAAA,EAACN,YAAY,EAAE;QAClCO,mBAAmB,EAAEF,OAAO,CAAC9D,UAAU,CAACgE,mBAAmB;QAC3DC,YAAY,EAAEH,OAAO,CAACI,WAAW,CAACD,YAAY;QAC9ChG,QAAQ,EAAEsF,gBAAgB,CAACtF,QAAQ;QACnCF,WAAW,EAAE+F,OAAO,CAAC/F,WAAW;QAChCoG,UAAU,EAAEL,OAAO,CAACI,WAAW,CAACC,UAAU;KAC3C,CAAC,CAAC;AACL,CAAC;AAED,SAASC,qBAAqB,CAACjB,KAAmB,EAmBhD;IACA,OAAO,8BAA8B,IAAIA,KAAK,CAAC;AACjD,CAAC;AAED,eAAeL,mBAAmB,CAChCK,KAAmB,EACnBC,OAA+B,EACsD;QAKjFA,GAAyB;IAJ7B,IAAI,CAACgB,qBAAqB,CAACjB,KAAK,CAAC,EAAE;QACjC,MAAM,IAAIkB,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,IAAIjB,CAAAA,CAAAA,GAAyB,GAAzBA,OAAO,CAACkB,iBAAiB,SAAQ,GAAjClB,KAAAA,CAAiC,GAAjCA,GAAyB,CAAEmB,MAAM,CAAA,KAAK,QAAQ,EAAE;QAClD,MAAM,IAAIF,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,EACJhB,SAAS,CAAA,EACTmB,YAAY,CAAA,EACZjC,UAAU,CAAA,EACVe,eAAe,CAAA,EACfgB,iBAAiB,CAAA,EACjBf,gBAAgB,CAAA,IACjB,GAAGC,IAAAA,mBAAkB,EAAA,QAAA,EAACJ,OAAO,CAAC,AAAC;IAEhC,MAAM,EAAEqB,OAAO,CAAA,EAAEC,KAAK,CAAA,EAAE,GAAG,MAAMvB,KAAK,CAACO,QAAQ,CAACiB,UAAU,CACxDtB,SAAS,EACTE,gBAAgB,EAChBD,eAAe,EACf;QACEf,UAAU;QACVqB,OAAO,EAAEY,YAAY,CAACZ,OAAO;QAC7B,mBAAmB;QACnBC,IAAI,EAAEW,YAAY,CAACX,IAAI;KACxB,CACF,AAAC;IAEF,MAAMxE,UAAU,GAAG8D,KAAK,CAACyB,0BAA0B,CAACvB,SAAS,CAAC,AAAC;QAyBjDF,oBAAwC;IAvBtD,MAAMxE,aAAa,GAAG;QACpBkG,sBAAsB,EAAE,MAAM1B,KAAK,CAAC2B,oBAAoB,CACtD3B,KAAK,CAACW,OAAO,CAACI,WAAW,CAACW,sBAAsB,EAChD;YACEE,UAAU,EAAE,SAAS;YACrBzB,eAAe;YACfC,gBAAgB;SACjB,CACF;QACDS,mBAAmB,EAAEb,KAAK,CAACW,OAAO,CAAC9D,UAAU,CAACgE,mBAAmB;QACjEgB,cAAc,EAAE7B,KAAK,CAAC8B,eAAe;QACrCC,qBAAqB,EAAE/B,KAAK,CAACW,OAAO,CAAC9D,UAAU,CAACkF,qBAAqB;QACrExF,GAAG,EAAE6D,gBAAgB,CAAC7D,GAAG;QACzByF,iBAAiB,EAAEX,YAAY,CAACX,IAAI;QACpC9F,WAAW,EAAEoF,KAAK,CAACW,OAAO,CAAC/F,WAAW;QACtCqH,WAAW,EAAEd,iBAAiB,CAACc,WAAW;QAC1CC,mBAAmB,EAAElC,KAAK,CAACW,OAAO,CAAC9D,UAAU,CAACsF,6BAA6B,CACzEC,KAAI,EAAA,QAAA,CAACC,QAAQ,CAACrC,KAAK,CAACW,OAAO,CAAC/F,WAAW,EAAEsB,UAAU,CAAC,CACrD;QACDoG,SAAS,EAAEnB,iBAAiB,CAACmB,SAAS;QACtChE,YAAY,EAAE6C,iBAAiB,CAAC7C,YAAY;QAC5CiE,SAAS,EAAEpB,iBAAiB,CAACoB,SAAS;QACtCrD,eAAe,EAAEiC,iBAAiB,CAACjC,eAAe;QAClDsD,UAAU,EAAExC,CAAAA,oBAAwC,GAAxCA,KAAK,CAACW,OAAO,CAAC8B,MAAM,CAACC,mBAAmB,YAAxC1C,oBAAwC,GAAIA,KAAK,CAACW,OAAO,CAAC/F,WAAW;QACjF+H,qBAAqB,EAAE,CAACC,MAA2B,GACjD5C,KAAK,CAAC6C,4BAA4B,CAACD,MAAM,CAAC;QAC5C,gFAAgF;QAChFzB,iBAAiB,EAAElB,OAAO,CAACkB,iBAAiB;KAC7C,AAAC;IAEFxE,iBAAiB,CAACqD,KAAK,CAACW,OAAO,CAAC,CAAC;IAEjC,MAAM1C,MAAM,GAAG,MAAM+B,KAAK,CAACW,OAAO,CAAC9D,UAAU,CAACC,gBAAgB,CAC5DZ,UAAU,EACV,+CAA+C;IAC/CoF,OAAO,EACPC,KAAK,EACL/F,aAAa,CACd,AAAC;IAEF,IAAI;QACF,MAAMsH,MAAM,GAAG,OAAO7E,MAAM,KAAK,QAAQ,GAAG8E,IAAI,CAACC,KAAK,CAAC/E,MAAM,CAAC,GAAGA,MAAM,AAAC;QAExEgF,IAAAA,OAAM,EAAA,QAAA,EACJ,WAAW,IAAIH,MAAM,IAAII,KAAK,CAACC,OAAO,CAACL,MAAM,CAACpD,SAAS,CAAC,EACxD,kGAAkG,CACnG,CAAC;QACF,OAAOoD,MAAM,CAAC;IAChB,EAAE,OAAOlD,KAAK,EAAO;QACnB,MAAM,IAAIsB,KAAK,CACb,gHAAgH,GAC9GtB,KAAK,CAACwD,OAAO,CAChB,CAAC;IACJ,CAAC;AACH,CAAC"}
|