@expo/cli 0.18.16 → 0.18.18

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.
Files changed (56) hide show
  1. package/build/bin/cli +1 -1
  2. package/build/src/export/createMetadataJson.js.map +1 -1
  3. package/build/src/export/embed/exportEmbedAsync.js +110 -41
  4. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  5. package/build/src/export/embed/resolveOptions.js +0 -1
  6. package/build/src/export/embed/resolveOptions.js.map +1 -1
  7. package/build/src/export/exportApp.js +130 -92
  8. package/build/src/export/exportApp.js.map +1 -1
  9. package/build/src/export/exportAssets.js.map +1 -1
  10. package/build/src/export/exportHermes.js +15 -0
  11. package/build/src/export/exportHermes.js.map +1 -1
  12. package/build/src/export/exportStaticAsync.js +3 -48
  13. package/build/src/export/exportStaticAsync.js.map +1 -1
  14. package/build/src/export/saveAssets.js.map +1 -1
  15. package/build/src/run/startBundler.js +1 -8
  16. package/build/src/run/startBundler.js.map +1 -1
  17. package/build/src/start/platforms/DeviceManager.js.map +1 -1
  18. package/build/src/start/platforms/PlatformManager.js +7 -2
  19. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  20. package/build/src/start/platforms/android/AndroidDeviceManager.js +3 -0
  21. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  22. package/build/src/start/platforms/ios/AppleDeviceManager.js +6 -2
  23. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  24. package/build/src/start/platforms/ios/simctl.js +80 -0
  25. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  26. package/build/src/start/server/BundlerDevServer.js +9 -2
  27. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  28. package/build/src/start/server/DevServerManager.js +13 -1
  29. package/build/src/start/server/DevServerManager.js.map +1 -1
  30. package/build/src/start/server/getStaticRenderFunctions.js +9 -123
  31. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  32. package/build/src/start/server/metro/MetroBundlerDevServer.js +391 -102
  33. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  34. package/build/src/start/server/metro/createServerRouteMiddleware.js +0 -9
  35. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  36. package/build/src/start/server/metro/instantiateMetro.js +19 -12
  37. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  38. package/build/src/start/server/metro/metroErrorInterface.js +49 -2
  39. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  40. package/build/src/start/server/metro/metroPrivateServer.js +26 -0
  41. package/build/src/start/server/metro/metroPrivateServer.js.map +1 -0
  42. package/build/src/start/server/metro/runServer-fork.js +28 -20
  43. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  44. package/build/src/start/server/metro/withMetroMultiPlatform.js +5 -13
  45. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  46. package/build/src/start/server/middleware/ManifestMiddleware.js +6 -3
  47. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  48. package/build/src/start/server/middleware/metroOptions.js +11 -3
  49. package/build/src/start/server/middleware/metroOptions.js.map +1 -1
  50. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  51. package/build/src/utils/port.js +1 -1
  52. package/build/src/utils/port.js.map +1 -1
  53. package/build/src/utils/telemetry/getContext.js +1 -1
  54. package/package.json +5 -4
  55. package/build/src/export/fork-bundleAsync.js +0 -284
  56. package/build/src/export/fork-bundleAsync.js.map +0 -1
@@ -26,6 +26,13 @@ function _chalk() {
26
26
  };
27
27
  return data;
28
28
  }
29
+ function _path() {
30
+ const data = /*#__PURE__*/ _interopRequireDefault(require("path"));
31
+ _path = function() {
32
+ return data;
33
+ };
34
+ return data;
35
+ }
29
36
  function _resolveFrom() {
30
37
  const data = /*#__PURE__*/ _interopRequireDefault(require("resolve-from"));
31
38
  _resolveFrom = function() {
@@ -41,6 +48,7 @@ function _terminalLink() {
41
48
  return data;
42
49
  }
43
50
  const _log = require("../../../log");
51
+ const _ansi = require("../../../utils/ansi");
44
52
  const _errors = require("../../../utils/errors");
45
53
  const _getStaticRenderFunctions = require("../getStaticRenderFunctions");
46
54
  function _interopRequireDefault(obj) {
@@ -68,6 +76,9 @@ async function logMetroErrorWithStack(projectRoot, { stack , codeFrame , error
68
76
  _log.Log.log();
69
77
  _log.Log.log(_chalk().default.red("Metro error: ") + error.message);
70
78
  _log.Log.log();
79
+ if (error instanceof _errors.CommandError) {
80
+ return;
81
+ }
71
82
  if (codeFrame) {
72
83
  var ref;
73
84
  const maxWarningLineLength = Math.max(200, process.stdout.columns);
@@ -167,9 +178,40 @@ async function logMetroError(projectRoot, { error }) {
167
178
  error
168
179
  });
169
180
  }
181
+ function isTransformError(error) {
182
+ return error.type === "TransformError";
183
+ }
170
184
  /** @returns the html required to render the static metro error as an SPA. */ function logFromError({ error , projectRoot }) {
171
185
  const { LogBoxLog , parseErrorStack } = require((0, _resolveFrom().default)(projectRoot, "@expo/metro-runtime/symbolicate"));
172
- const stack = parseErrorStack(error.stack);
186
+ // Remap direct Metro Node.js errors to a format that will appear more client-friendly in the logbox UI.
187
+ let stack;
188
+ if (isTransformError(error)) {
189
+ // Syntax errors in static rendering.
190
+ stack = [
191
+ {
192
+ file: _path().default.join(projectRoot, error.filename),
193
+ methodName: "<unknown>",
194
+ arguments: [],
195
+ // TODO: Import stack
196
+ lineNumber: error.lineNumber,
197
+ column: error.column
198
+ },
199
+ ];
200
+ } else if ("originModulePath" in error) {
201
+ // TODO: Use import stack here when the error is resolution based.
202
+ stack = [
203
+ {
204
+ file: error.originModulePath,
205
+ methodName: "<unknown>",
206
+ arguments: [],
207
+ // TODO: Import stack
208
+ lineNumber: 0,
209
+ column: 0
210
+ },
211
+ ];
212
+ } else {
213
+ stack = parseErrorStack(error.stack);
214
+ }
173
215
  return new LogBoxLog({
174
216
  level: "static",
175
217
  message: {
@@ -209,6 +251,10 @@ async function getErrorOverlayHtmlAsync({ error , projectRoot , routerRoot }) {
209
251
  codeFrame: log.codeFrame,
210
252
  error
211
253
  });
254
+ // @ts-expect-error
255
+ if ("message" in log && "content" in log.message && typeof log.message.content === "string") {
256
+ log.message.content = (0, _ansi.stripAnsi)(log.message.content);
257
+ }
212
258
  const logBoxContext = {
213
259
  selectedLogIndex: 0,
214
260
  isDisabled: false,
@@ -224,7 +270,8 @@ async function getErrorOverlayHtmlAsync({ error , projectRoot , routerRoot }) {
224
270
  minify: false,
225
271
  baseUrl: "",
226
272
  routerRoot,
227
- isExporting: false
273
+ isExporting: false,
274
+ reactCompiler: false
228
275
  });
229
276
  const htmlWithJs = html.replace("</body>", `<script src=${errorOverlayEntry}></script></body>`);
230
277
  return htmlWithJs;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/metroErrorInterface.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport chalk from 'chalk';\nimport resolveFrom from 'resolve-from';\nimport { StackFrame } from 'stacktrace-parser';\nimport terminalLink from 'terminal-link';\n\nimport { Log } from '../../../log';\nimport { SilentError } from '../../../utils/errors';\nimport { createMetroEndpointAsync } from '../getStaticRenderFunctions';\n\ntype CodeFrame = {\n content: string;\n location?: {\n row: number;\n column: number;\n [key: string]: any;\n };\n fileName: string;\n};\n\ntype MetroStackFrame = StackFrame & { collapse?: boolean };\n\nfunction fill(width: number): string {\n return Array(width).join(' ');\n}\n\nfunction formatPaths(config: { filePath: string | null; line?: number; col?: number }) {\n const filePath = chalk.reset(config.filePath);\n return (\n chalk.dim('(') +\n filePath +\n chalk.dim(`:${[config.line, config.col].filter(Boolean).join(':')})`)\n );\n}\n\nexport async function logMetroErrorWithStack(\n projectRoot: string,\n {\n stack,\n codeFrame,\n error,\n }: {\n stack: MetroStackFrame[];\n codeFrame: CodeFrame;\n error: Error;\n }\n) {\n if (error instanceof SilentError) {\n return;\n }\n\n // process.stdout.write('\\u001b[0m'); // Reset attributes\n // process.stdout.write('\\u001bc'); // Reset the terminal\n\n const { getStackFormattedLocation } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n Log.log();\n Log.log(chalk.red('Metro error: ') + error.message);\n Log.log();\n\n if (codeFrame) {\n const maxWarningLineLength = Math.max(200, process.stdout.columns);\n\n const lineText = codeFrame.content;\n const isPreviewTooLong = codeFrame.content\n .split('\\n')\n .some((line) => line.length > maxWarningLineLength);\n const column = codeFrame.location?.column;\n // When the preview is too long, we skip reading the file and attempting to apply\n // code coloring, this is because it can get very slow.\n if (isPreviewTooLong) {\n let previewLine = '';\n let cursorLine = '';\n\n const formattedPath = formatPaths({\n filePath: codeFrame.fileName,\n line: codeFrame.location?.row,\n col: codeFrame.location?.column,\n });\n // Create a curtailed preview line like:\n // `...transition:'fade'},k._updatePropsStack=function(){clearImmediate(k._updateImmediate),k._updateImmediate...`\n // If there is no text preview or column number, we can't do anything.\n if (lineText && column != null) {\n const rangeWindow = Math.round(\n Math.max(codeFrame.fileName?.length ?? 0, Math.max(80, process.stdout.columns)) / 2\n );\n let minBounds = Math.max(0, column - rangeWindow);\n const maxBounds = Math.min(minBounds + rangeWindow * 2, lineText.length);\n previewLine = lineText.slice(minBounds, maxBounds);\n\n // If we splice content off the start, then we should append `...`.\n // This is unlikely to happen since we limit the activation size.\n if (minBounds > 0) {\n // Adjust the min bounds so the cursor is aligned after we add the \"...\"\n minBounds -= 3;\n previewLine = chalk.dim('...') + previewLine;\n }\n if (maxBounds < lineText.length) {\n previewLine += chalk.dim('...');\n }\n\n // If the column property could be found, then use that to fix the cursor location which is often broken in regex.\n cursorLine = (column == null ? '' : fill(column) + chalk.reset('^')).slice(minBounds);\n\n Log.log(\n [formattedPath, '', previewLine, cursorLine, chalk.dim('(error truncated)')].join('\\n')\n );\n }\n } else {\n Log.log(codeFrame.content);\n }\n }\n\n if (stack?.length) {\n Log.log();\n Log.log(chalk.bold`Call Stack`);\n\n const stackProps = stack.map((frame) => {\n return {\n title: frame.methodName,\n subtitle: getStackFormattedLocation(projectRoot, frame),\n collapse: frame.collapse,\n };\n });\n\n stackProps.forEach((frame) => {\n const position = terminalLink.isSupported\n ? terminalLink(frame.subtitle, frame.subtitle)\n : frame.subtitle;\n let lineItem = chalk.gray(` ${frame.title} (${position})`);\n if (frame.collapse) {\n lineItem = chalk.dim(lineItem);\n }\n Log.log(lineItem);\n });\n } else {\n Log.log(chalk.gray(` ${error.stack}`));\n }\n}\n\nexport async function logMetroError(projectRoot: string, { error }: { error: Error }) {\n if (error instanceof SilentError) {\n return;\n }\n\n const { LogBoxLog, parseErrorStack } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n const stack = parseErrorStack(error.stack);\n\n const log = new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n\n await new Promise((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nfunction logFromError({ error, projectRoot }: { error: Error; projectRoot: string }): {\n symbolicated: any;\n symbolicate: (type: string, callback: () => void) => void;\n codeFrame: CodeFrame;\n} {\n const { LogBoxLog, parseErrorStack } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n const stack = parseErrorStack(error.stack);\n\n return new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function logMetroErrorAsync({\n error,\n projectRoot,\n}: {\n error: Error;\n projectRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function getErrorOverlayHtmlAsync({\n error,\n projectRoot,\n routerRoot,\n}: {\n error: Error;\n projectRoot: string;\n routerRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n\n const logBoxContext = {\n selectedLogIndex: 0,\n isDisabled: false,\n logs: [log],\n };\n const html = `<html><head><style>#root,body,html{height:100%}body{overflow:hidden}#root{display:flex}</style></head><body><div id=\"root\"></div><script id=\"_expo-static-error\" type=\"application/json\">${JSON.stringify(\n logBoxContext\n )}</script></body></html>`;\n\n const errorOverlayEntry = await createMetroEndpointAsync(\n projectRoot,\n // Keep the URL relative\n '',\n resolveFrom(projectRoot, 'expo-router/_error'),\n {\n mode: 'development',\n platform: 'web',\n minify: false,\n baseUrl: '',\n routerRoot,\n isExporting: false,\n }\n );\n\n const htmlWithJs = html.replace('</body>', `<script src=${errorOverlayEntry}></script></body>`);\n return htmlWithJs;\n}\n"],"names":["logMetroErrorWithStack","logMetroError","logMetroErrorAsync","getErrorOverlayHtmlAsync","fill","width","Array","join","formatPaths","config","filePath","chalk","reset","dim","line","col","filter","Boolean","projectRoot","stack","codeFrame","error","SilentError","getStackFormattedLocation","require","resolveFrom","Log","log","red","message","maxWarningLineLength","Math","max","process","stdout","columns","lineText","content","isPreviewTooLong","split","some","length","column","location","previewLine","cursorLine","formattedPath","fileName","row","rangeWindow","round","minBounds","maxBounds","min","slice","bold","stackProps","map","frame","title","methodName","subtitle","collapse","forEach","position","terminalLink","isSupported","lineItem","gray","LogBoxLog","parseErrorStack","level","substitutions","isComponentError","category","componentStack","Promise","res","symbolicate","symbolicated","logFromError","routerRoot","logBoxContext","selectedLogIndex","isDisabled","logs","html","JSON","stringify","errorOverlayEntry","createMetroEndpointAsync","mode","platform","minify","baseUrl","isExporting","htmlWithJs","replace"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/metroErrorInterface.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport chalk from 'chalk';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport { StackFrame } from 'stacktrace-parser';\nimport terminalLink from 'terminal-link';\n\nimport { Log } from '../../../log';\nimport { stripAnsi } from '../../../utils/ansi';\nimport { CommandError, SilentError } from '../../../utils/errors';\nimport { createMetroEndpointAsync } from '../getStaticRenderFunctions';\n\ntype CodeFrame = {\n content: string;\n location?: {\n row: number;\n column: number;\n [key: string]: any;\n };\n fileName: string;\n};\n\ntype MetroStackFrame = StackFrame & { collapse?: boolean };\n\nfunction fill(width: number): string {\n return Array(width).join(' ');\n}\n\nfunction formatPaths(config: { filePath: string | null; line?: number; col?: number }) {\n const filePath = chalk.reset(config.filePath);\n return (\n chalk.dim('(') +\n filePath +\n chalk.dim(`:${[config.line, config.col].filter(Boolean).join(':')})`)\n );\n}\n\nexport async function logMetroErrorWithStack(\n projectRoot: string,\n {\n stack,\n codeFrame,\n error,\n }: {\n stack: MetroStackFrame[];\n codeFrame: CodeFrame;\n error: Error;\n }\n) {\n if (error instanceof SilentError) {\n return;\n }\n\n // process.stdout.write('\\u001b[0m'); // Reset attributes\n // process.stdout.write('\\u001bc'); // Reset the terminal\n\n const { getStackFormattedLocation } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n Log.log();\n Log.log(chalk.red('Metro error: ') + error.message);\n Log.log();\n\n if (error instanceof CommandError) {\n return;\n }\n\n if (codeFrame) {\n const maxWarningLineLength = Math.max(200, process.stdout.columns);\n\n const lineText = codeFrame.content;\n const isPreviewTooLong = codeFrame.content\n .split('\\n')\n .some((line) => line.length > maxWarningLineLength);\n const column = codeFrame.location?.column;\n // When the preview is too long, we skip reading the file and attempting to apply\n // code coloring, this is because it can get very slow.\n if (isPreviewTooLong) {\n let previewLine = '';\n let cursorLine = '';\n\n const formattedPath = formatPaths({\n filePath: codeFrame.fileName,\n line: codeFrame.location?.row,\n col: codeFrame.location?.column,\n });\n // Create a curtailed preview line like:\n // `...transition:'fade'},k._updatePropsStack=function(){clearImmediate(k._updateImmediate),k._updateImmediate...`\n // If there is no text preview or column number, we can't do anything.\n if (lineText && column != null) {\n const rangeWindow = Math.round(\n Math.max(codeFrame.fileName?.length ?? 0, Math.max(80, process.stdout.columns)) / 2\n );\n let minBounds = Math.max(0, column - rangeWindow);\n const maxBounds = Math.min(minBounds + rangeWindow * 2, lineText.length);\n previewLine = lineText.slice(minBounds, maxBounds);\n\n // If we splice content off the start, then we should append `...`.\n // This is unlikely to happen since we limit the activation size.\n if (minBounds > 0) {\n // Adjust the min bounds so the cursor is aligned after we add the \"...\"\n minBounds -= 3;\n previewLine = chalk.dim('...') + previewLine;\n }\n if (maxBounds < lineText.length) {\n previewLine += chalk.dim('...');\n }\n\n // If the column property could be found, then use that to fix the cursor location which is often broken in regex.\n cursorLine = (column == null ? '' : fill(column) + chalk.reset('^')).slice(minBounds);\n\n Log.log(\n [formattedPath, '', previewLine, cursorLine, chalk.dim('(error truncated)')].join('\\n')\n );\n }\n } else {\n Log.log(codeFrame.content);\n }\n }\n\n if (stack?.length) {\n Log.log();\n Log.log(chalk.bold`Call Stack`);\n\n const stackProps = stack.map((frame) => {\n return {\n title: frame.methodName,\n subtitle: getStackFormattedLocation(projectRoot, frame),\n collapse: frame.collapse,\n };\n });\n\n stackProps.forEach((frame) => {\n const position = terminalLink.isSupported\n ? terminalLink(frame.subtitle, frame.subtitle)\n : frame.subtitle;\n let lineItem = chalk.gray(` ${frame.title} (${position})`);\n if (frame.collapse) {\n lineItem = chalk.dim(lineItem);\n }\n Log.log(lineItem);\n });\n } else {\n Log.log(chalk.gray(` ${error.stack}`));\n }\n}\n\nexport async function logMetroError(projectRoot: string, { error }: { error: Error }) {\n if (error instanceof SilentError) {\n return;\n }\n\n const { LogBoxLog, parseErrorStack } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n const stack = parseErrorStack(error.stack);\n\n const log = new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n\n await new Promise((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\nfunction isTransformError(\n error: any\n): error is { type: 'TransformError'; filename: string; lineNumber: number; column: number } {\n return error.type === 'TransformError';\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nfunction logFromError({ error, projectRoot }: { error: Error; projectRoot: string }): {\n symbolicated: any;\n symbolicate: (type: string, callback: () => void) => void;\n codeFrame: CodeFrame;\n} {\n const { LogBoxLog, parseErrorStack } = require(\n resolveFrom(projectRoot, '@expo/metro-runtime/symbolicate')\n );\n\n // Remap direct Metro Node.js errors to a format that will appear more client-friendly in the logbox UI.\n let stack;\n if (isTransformError(error)) {\n // Syntax errors in static rendering.\n stack = [\n {\n file: path.join(projectRoot, error.filename),\n methodName: '<unknown>',\n arguments: [],\n // TODO: Import stack\n lineNumber: error.lineNumber,\n column: error.column,\n },\n ];\n } else if ('originModulePath' in error) {\n // TODO: Use import stack here when the error is resolution based.\n stack = [\n {\n file: error.originModulePath,\n methodName: '<unknown>',\n arguments: [],\n // TODO: Import stack\n lineNumber: 0,\n column: 0,\n },\n ];\n } else {\n stack = parseErrorStack(error.stack);\n }\n\n return new LogBoxLog({\n level: 'static',\n message: {\n content: error.message,\n substitutions: [],\n },\n isComponentError: false,\n stack,\n category: 'static',\n componentStack: [],\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function logMetroErrorAsync({\n error,\n projectRoot,\n}: {\n error: Error;\n projectRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n}\n\n/** @returns the html required to render the static metro error as an SPA. */\nexport async function getErrorOverlayHtmlAsync({\n error,\n projectRoot,\n routerRoot,\n}: {\n error: Error;\n projectRoot: string;\n routerRoot: string;\n}) {\n const log = logFromError({ projectRoot, error });\n\n await new Promise<void>((res) => log.symbolicate('stack', res));\n\n logMetroErrorWithStack(projectRoot, {\n stack: log.symbolicated?.stack?.stack ?? [],\n codeFrame: log.codeFrame,\n error,\n });\n\n // @ts-expect-error\n if ('message' in log && 'content' in log.message && typeof log.message.content === 'string') {\n log.message.content = stripAnsi(log.message.content);\n }\n\n const logBoxContext = {\n selectedLogIndex: 0,\n isDisabled: false,\n logs: [log],\n };\n const html = `<html><head><style>#root,body,html{height:100%}body{overflow:hidden}#root{display:flex}</style></head><body><div id=\"root\"></div><script id=\"_expo-static-error\" type=\"application/json\">${JSON.stringify(\n logBoxContext\n )}</script></body></html>`;\n\n const errorOverlayEntry = await createMetroEndpointAsync(\n projectRoot,\n // Keep the URL relative\n '',\n resolveFrom(projectRoot, 'expo-router/_error'),\n {\n mode: 'development',\n platform: 'web',\n minify: false,\n baseUrl: '',\n routerRoot,\n isExporting: false,\n reactCompiler: false,\n }\n );\n\n const htmlWithJs = html.replace('</body>', `<script src=${errorOverlayEntry}></script></body>`);\n return htmlWithJs;\n}\n"],"names":["logMetroErrorWithStack","logMetroError","logMetroErrorAsync","getErrorOverlayHtmlAsync","fill","width","Array","join","formatPaths","config","filePath","chalk","reset","dim","line","col","filter","Boolean","projectRoot","stack","codeFrame","error","SilentError","getStackFormattedLocation","require","resolveFrom","Log","log","red","message","CommandError","maxWarningLineLength","Math","max","process","stdout","columns","lineText","content","isPreviewTooLong","split","some","length","column","location","previewLine","cursorLine","formattedPath","fileName","row","rangeWindow","round","minBounds","maxBounds","min","slice","bold","stackProps","map","frame","title","methodName","subtitle","collapse","forEach","position","terminalLink","isSupported","lineItem","gray","LogBoxLog","parseErrorStack","level","substitutions","isComponentError","category","componentStack","Promise","res","symbolicate","symbolicated","isTransformError","type","logFromError","file","path","filename","arguments","lineNumber","originModulePath","routerRoot","stripAnsi","logBoxContext","selectedLogIndex","isDisabled","logs","html","JSON","stringify","errorOverlayEntry","createMetroEndpointAsync","mode","platform","minify","baseUrl","isExporting","reactCompiler","htmlWithJs","replace"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "assertMetroPrivateServer", {
6
+ enumerable: true,
7
+ get: ()=>assertMetroPrivateServer
8
+ });
9
+ function _nodeAssert() {
10
+ const data = /*#__PURE__*/ _interopRequireDefault(require("node:assert"));
11
+ _nodeAssert = function() {
12
+ return data;
13
+ };
14
+ return data;
15
+ }
16
+ function _interopRequireDefault(obj) {
17
+ return obj && obj.__esModule ? obj : {
18
+ default: obj
19
+ };
20
+ }
21
+ function assertMetroPrivateServer(metro) {
22
+ (0, _nodeAssert().default)(metro, "Metro server undefined.");
23
+ (0, _nodeAssert().default)("_config" in metro && "_bundler" in metro, "Metro server is missing expected properties (_config, _bundler). This could be due to a version mismatch or change in the Metro API.");
24
+ }
25
+
26
+ //# sourceMappingURL=metroPrivateServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/metroPrivateServer.ts"],"sourcesContent":["import { TransformInputOptions } from 'metro';\nimport type Metro from 'metro';\nimport { ConfigT } from 'metro-config';\nimport assert from 'node:assert';\n\nexport type MetroPrivateServer = import('metro').Server & {\n _bundler: import('metro/src/IncrementalBundler').default;\n _config: ConfigT;\n _createModuleId: (path: string) => number;\n _isEnded: boolean;\n _nextBundleBuildNumber: number;\n _platforms: Set<string>;\n _reporter: import('metro/src/lib/reporting').Reporter;\n _serverOptions: import('metro').ServerOptions | void;\n\n getNewBuildNumber(): number;\n _getSortedModules(\n graph: import('metro/src/IncrementalBundler').OutputGraph\n ): import('metro/src/DeltaBundler/types').Module[];\n\n _resolveRelativePath(\n filePath: string,\n {\n relativeTo,\n resolverOptions,\n transformOptions,\n }: {\n relativeTo: 'project' | 'server';\n resolverOptions: import('metro/src/shared/types').ResolverInputOptions;\n transformOptions: TransformInputOptions;\n }\n ): Promise<string>;\n\n _shouldAddModuleToIgnoreList(module: import('metro/src/DeltaBundler/types').Module<any>): boolean;\n};\n\nexport function assertMetroPrivateServer(metro: Metro.Server): asserts metro is MetroPrivateServer {\n assert(metro, 'Metro server undefined.');\n assert(\n '_config' in metro && '_bundler' in metro,\n 'Metro server is missing expected properties (_config, _bundler). This could be due to a version mismatch or change in the Metro API.'\n );\n}\n"],"names":["assertMetroPrivateServer","metro","assert"],"mappings":"AAAA;;;;+BAoCgBA,0BAAwB;;aAAxBA,wBAAwB;;;8DAjCrB,aAAa;;;;;;;;;;;AAiCzB,SAASA,wBAAwB,CAACC,KAAmB,EAAuC;IACjGC,IAAAA,WAAM,EAAA,QAAA,EAACD,KAAK,EAAE,yBAAyB,CAAC,CAAC;IACzCC,IAAAA,WAAM,EAAA,QAAA,EACJ,SAAS,IAAID,KAAK,IAAI,UAAU,IAAIA,KAAK,EACzC,sIAAsI,CACvI,CAAC;AACJ,CAAC"}
@@ -67,7 +67,7 @@ function _interopRequireDefault(obj) {
67
67
  default: obj
68
68
  };
69
69
  }
70
- const runServer = async (metroBundler, config, { hasReducedPerformance =false , host , onError , onReady , secureServerOptions , waitForBundler =false , websocketEndpoints ={} , watch })=>{
70
+ const runServer = async (metroBundler, config, { hasReducedPerformance =false , host , onError , onReady , secureServerOptions , waitForBundler =false , websocketEndpoints ={} , watch }, { mockServer })=>{
71
71
  // await earlyPortCheck(host, config.server.port);
72
72
  // if (secure != null || secureCert != null || secureKey != null) {
73
73
  // // eslint-disable-next-line no-console
@@ -91,21 +91,36 @@ const runServer = async (metroBundler, config, { hasReducedPerformance =false ,
91
91
  } else {
92
92
  httpServer = _http().default.createServer(serverApp);
93
93
  }
94
+ httpServer.on("error", (error)=>{
95
+ if ("code" in error && error.code === "EADDRINUSE") {
96
+ // If `Error: listen EADDRINUSE: address already in use :::8081` then print additional info
97
+ // about the process before throwing.
98
+ const info = (0, _getRunningProcess.getRunningProcess)(config.server.port);
99
+ if (info) {
100
+ _log.Log.error(`Port ${config.server.port} is busy running ${info.command} in: ${info.directory}`);
101
+ }
102
+ }
103
+ if (onError) {
104
+ onError(error);
105
+ }
106
+ end();
107
+ });
108
+ // Disable any kind of automatic timeout behavior for incoming
109
+ // requests in case it takes the packager more than the default
110
+ // timeout of 120 seconds to respond to a request.
111
+ httpServer.timeout = 0;
112
+ httpServer.on("close", ()=>{
113
+ end();
114
+ });
115
+ if (mockServer) {
116
+ return {
117
+ server: httpServer,
118
+ metro: metroServer
119
+ };
120
+ }
94
121
  return new Promise((resolve, reject)=>{
95
122
  httpServer.on("error", (error)=>{
96
- if ("code" in error && error.code === "EADDRINUSE") {
97
- // If `Error: listen EADDRINUSE: address already in use :::8081` then print additional info
98
- // about the process before throwing.
99
- const info = (0, _getRunningProcess.getRunningProcess)(config.server.port);
100
- if (info) {
101
- _log.Log.error(`Port ${config.server.port} is busy running ${info.command} in: ${info.directory}`);
102
- }
103
- }
104
- if (onError) {
105
- onError(error);
106
- }
107
123
  reject(error);
108
- end();
109
124
  });
110
125
  httpServer.listen(config.server.port, host, ()=>{
111
126
  if (onReady) {
@@ -132,13 +147,6 @@ const runServer = async (metroBundler, config, { hasReducedPerformance =false ,
132
147
  metro: metroServer
133
148
  });
134
149
  });
135
- // Disable any kind of automatic timeout behavior for incoming
136
- // requests in case it takes the packager more than the default
137
- // timeout of 120 seconds to respond to a request.
138
- httpServer.timeout = 0;
139
- httpServer.on("close", ()=>{
140
- end();
141
- });
142
150
  });
143
151
  };
144
152
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/runServer-fork.ts"],"sourcesContent":["// Copyright © 2023 650 Industries.\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n//\n// Forks https://github.com/facebook/metro/blob/b80d9a0f638ee9fb82ff69cd3c8d9f4309ca1da2/packages/metro/src/index.flow.js#L57\n// and adds the ability to access the bundler instance.\nimport assert from 'assert';\nimport http from 'http';\nimport https from 'https';\nimport Metro, { RunServerOptions, Server } from 'metro';\nimport MetroHmrServer from 'metro/src/HmrServer';\nimport createWebsocketServer from 'metro/src/lib/createWebsocketServer';\nimport { ConfigT } from 'metro-config';\nimport { parse } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { Log } from '../../../log';\nimport { getRunningProcess } from '../../../utils/getRunningProcess';\nimport type { ConnectAppType } from '../middleware/server.types';\n\nexport const runServer = async (\n metroBundler: MetroBundlerDevServer,\n config: ConfigT,\n {\n hasReducedPerformance = false,\n host,\n onError,\n onReady,\n secureServerOptions,\n waitForBundler = false,\n websocketEndpoints = {},\n watch,\n }: RunServerOptions\n): Promise<{ server: http.Server | https.Server; metro: Server }> => {\n // await earlyPortCheck(host, config.server.port);\n\n // if (secure != null || secureCert != null || secureKey != null) {\n // // eslint-disable-next-line no-console\n // console.warn(\n // chalk.inverse.yellow.bold(' DEPRECATED '),\n // 'The `secure`, `secureCert`, and `secureKey` options are now deprecated. ' +\n // 'Please use the `secureServerOptions` object instead to pass options to ' +\n // \"Metro's https development server.\",\n // );\n // }\n\n const { middleware, end, metroServer } = await Metro.createConnectMiddleware(config, {\n hasReducedPerformance,\n waitForBundler,\n watch,\n });\n\n assert(typeof (middleware as any).use === 'function');\n const serverApp = middleware as ConnectAppType;\n\n let httpServer: http.Server | https.Server;\n\n if (secureServerOptions != null) {\n httpServer = https.createServer(secureServerOptions, serverApp);\n } else {\n httpServer = http.createServer(serverApp);\n }\n return new Promise<{ server: http.Server | https.Server; metro: Server }>((resolve, reject) => {\n httpServer.on('error', (error) => {\n if ('code' in error && error.code === 'EADDRINUSE') {\n // If `Error: listen EADDRINUSE: address already in use :::8081` then print additional info\n // about the process before throwing.\n const info = getRunningProcess(config.server.port);\n if (info) {\n Log.error(\n `Port ${config.server.port} is busy running ${info.command} in: ${info.directory}`\n );\n }\n }\n\n if (onError) {\n onError(error);\n }\n reject(error);\n end();\n });\n\n httpServer.listen(config.server.port, host, () => {\n if (onReady) {\n onReady(httpServer);\n }\n\n Object.assign(websocketEndpoints, {\n // @ts-expect-error: incorrect types\n '/hot': createWebsocketServer({\n websocketServer: new MetroHmrServer(\n metroServer.getBundler(),\n metroServer.getCreateModuleId(),\n config\n ),\n }),\n });\n\n httpServer.on('upgrade', (request, socket, head) => {\n const { pathname } = parse(request.url!);\n if (pathname != null && websocketEndpoints[pathname]) {\n websocketEndpoints[pathname].handleUpgrade(request, socket, head, (ws) => {\n websocketEndpoints[pathname].emit('connection', ws, request);\n });\n } else {\n socket.destroy();\n }\n });\n\n resolve({ server: httpServer, metro: metroServer });\n });\n\n // Disable any kind of automatic timeout behavior for incoming\n // requests in case it takes the packager more than the default\n // timeout of 120 seconds to respond to a request.\n httpServer.timeout = 0;\n\n httpServer.on('close', () => {\n end();\n });\n });\n};\n"],"names":["runServer","metroBundler","config","hasReducedPerformance","host","onError","onReady","secureServerOptions","waitForBundler","websocketEndpoints","watch","middleware","end","metroServer","Metro","createConnectMiddleware","assert","use","serverApp","httpServer","https","createServer","http","Promise","resolve","reject","on","error","code","info","getRunningProcess","server","port","Log","command","directory","listen","Object","assign","createWebsocketServer","websocketServer","MetroHmrServer","getBundler","getCreateModuleId","request","socket","head","pathname","parse","url","handleUpgrade","ws","emit","destroy","metro","timeout"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/runServer-fork.ts"],"sourcesContent":["// Copyright © 2023 650 Industries.\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n//\n// Forks https://github.com/facebook/metro/blob/b80d9a0f638ee9fb82ff69cd3c8d9f4309ca1da2/packages/metro/src/index.flow.js#L57\n// and adds the ability to access the bundler instance.\nimport assert from 'assert';\nimport http from 'http';\nimport https from 'https';\nimport Metro, { RunServerOptions, Server } from 'metro';\nimport MetroHmrServer from 'metro/src/HmrServer';\nimport createWebsocketServer from 'metro/src/lib/createWebsocketServer';\nimport { ConfigT } from 'metro-config';\nimport { parse } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { Log } from '../../../log';\nimport { getRunningProcess } from '../../../utils/getRunningProcess';\nimport type { ConnectAppType } from '../middleware/server.types';\n\nexport const runServer = async (\n metroBundler: MetroBundlerDevServer,\n config: ConfigT,\n {\n hasReducedPerformance = false,\n host,\n onError,\n onReady,\n secureServerOptions,\n waitForBundler = false,\n websocketEndpoints = {},\n watch,\n }: RunServerOptions,\n {\n mockServer,\n }: {\n // Use a mock server object instead of creating a real server, this is used in export cases where we want to reuse codepaths but not actually start a server.\n mockServer: boolean;\n }\n): Promise<{ server: http.Server | https.Server; metro: Server }> => {\n // await earlyPortCheck(host, config.server.port);\n\n // if (secure != null || secureCert != null || secureKey != null) {\n // // eslint-disable-next-line no-console\n // console.warn(\n // chalk.inverse.yellow.bold(' DEPRECATED '),\n // 'The `secure`, `secureCert`, and `secureKey` options are now deprecated. ' +\n // 'Please use the `secureServerOptions` object instead to pass options to ' +\n // \"Metro's https development server.\",\n // );\n // }\n\n const { middleware, end, metroServer } = await Metro.createConnectMiddleware(config, {\n hasReducedPerformance,\n waitForBundler,\n watch,\n });\n\n assert(typeof (middleware as any).use === 'function');\n const serverApp = middleware as ConnectAppType;\n\n let httpServer: http.Server | https.Server;\n\n if (secureServerOptions != null) {\n httpServer = https.createServer(secureServerOptions, serverApp);\n } else {\n httpServer = http.createServer(serverApp);\n }\n\n httpServer.on('error', (error) => {\n if ('code' in error && error.code === 'EADDRINUSE') {\n // If `Error: listen EADDRINUSE: address already in use :::8081` then print additional info\n // about the process before throwing.\n const info = getRunningProcess(config.server.port);\n if (info) {\n Log.error(\n `Port ${config.server.port} is busy running ${info.command} in: ${info.directory}`\n );\n }\n }\n\n if (onError) {\n onError(error);\n }\n end();\n });\n\n // Disable any kind of automatic timeout behavior for incoming\n // requests in case it takes the packager more than the default\n // timeout of 120 seconds to respond to a request.\n httpServer.timeout = 0;\n\n httpServer.on('close', () => {\n end();\n });\n\n if (mockServer) {\n return { server: httpServer, metro: metroServer };\n }\n\n return new Promise<{ server: http.Server | https.Server; metro: Server }>((resolve, reject) => {\n httpServer.on('error', (error) => {\n reject(error);\n });\n\n httpServer.listen(config.server.port, host, () => {\n if (onReady) {\n onReady(httpServer);\n }\n\n Object.assign(websocketEndpoints, {\n // @ts-expect-error: incorrect types\n '/hot': createWebsocketServer({\n websocketServer: new MetroHmrServer(\n metroServer.getBundler(),\n metroServer.getCreateModuleId(),\n config\n ),\n }),\n });\n\n httpServer.on('upgrade', (request, socket, head) => {\n const { pathname } = parse(request.url!);\n if (pathname != null && websocketEndpoints[pathname]) {\n websocketEndpoints[pathname].handleUpgrade(request, socket, head, (ws) => {\n websocketEndpoints[pathname].emit('connection', ws, request);\n });\n } else {\n socket.destroy();\n }\n });\n\n resolve({ server: httpServer, metro: metroServer });\n });\n });\n};\n"],"names":["runServer","metroBundler","config","hasReducedPerformance","host","onError","onReady","secureServerOptions","waitForBundler","websocketEndpoints","watch","mockServer","middleware","end","metroServer","Metro","createConnectMiddleware","assert","use","serverApp","httpServer","https","createServer","http","on","error","code","info","getRunningProcess","server","port","Log","command","directory","timeout","metro","Promise","resolve","reject","listen","Object","assign","createWebsocketServer","websocketServer","MetroHmrServer","getBundler","getCreateModuleId","request","socket","head","pathname","parse","url","handleUpgrade","ws","emit","destroy"],"mappings":"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"}
@@ -121,7 +121,11 @@ function withWebPolyfills(config, { getMetroBundler }) {
121
121
  (0, _metroVirtualModules.getMetroBundlerWithVirtualModules)(getMetroBundler()).setVirtualModule(virtualModuleId, contents);
122
122
  if (ctx.platform === "web") {
123
123
  return [
124
- virtualModuleId
124
+ virtualModuleId,
125
+ // Ensure that the error-guard polyfill is included in the web polyfills to
126
+ // make metro-runtime work correctly.
127
+ // TODO: This module is pretty big for a function that simply re-throws an error that doesn't need to be caught.
128
+ require.resolve("@react-native/js-polyfills/error-guard"),
125
129
  ];
126
130
  }
127
131
  // Generally uses `rn-get-polyfills`
@@ -344,18 +348,6 @@ function withExtendedResolver(config, { tsconfig , isTsconfigPathsEnabled , isFa
344
348
  }
345
349
  return null;
346
350
  },
347
- // HACK(EvanBacon):
348
- // React Native uses `event-target-shim` incorrectly and this causes the native runtime
349
- // to fail to load. This is a temporary workaround until we can fix this upstream.
350
- // https://github.com/facebook/react-native/pull/38628
351
- (context, moduleName, platform)=>{
352
- if (platform !== "web" && moduleName === "event-target-shim") {
353
- debug("For event-target-shim to use js:", context.originModulePath);
354
- const doResolve = getStrictResolver(context, platform);
355
- return doResolve("event-target-shim/dist/event-target-shim.js");
356
- }
357
- return null;
358
- },
359
351
  // TODO: Reduce these as much as possible in the future.
360
352
  // Complex post-resolution rewrites.
361
353
  (context, moduleName, platform)=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/withMetroMultiPlatform.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { ExpoConfig, Platform } from '@expo/config';\nimport fs from 'fs';\nimport Bundler from 'metro/src/Bundler';\nimport { ConfigT } from 'metro-config';\nimport { Resolution, ResolutionContext, CustomResolutionContext } from 'metro-resolver';\nimport * as metroResolver from 'metro-resolver';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { createFastResolver } from './createExpoMetroResolver';\nimport { isNodeExternal, shouldCreateVirtualCanary, shouldCreateVirtualShim } from './externals';\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport { getMetroBundlerWithVirtualModules } from './metroVirtualModules';\nimport {\n withMetroErrorReportingResolver,\n withMetroMutatedResolverContext,\n withMetroResolvers,\n} from './withMetroResolvers';\nimport { Log } from '../../../log';\nimport { FileNotifier } from '../../../utils/FileNotifier';\nimport { env } from '../../../utils/env';\nimport { installExitHooks } from '../../../utils/exit';\nimport { isInteractive } from '../../../utils/interactive';\nimport { loadTsConfigPathsAsync, TsConfigPaths } from '../../../utils/tsconfig/loadTsConfigPaths';\nimport { resolveWithTsConfigPaths } from '../../../utils/tsconfig/resolveWithTsConfigPaths';\nimport { isServerEnvironment } from '../middleware/metroOptions';\nimport { PlatformBundlers } from '../platformBundlers';\n\ntype Mutable<T> = { -readonly [K in keyof T]: T[K] };\n\nconst debug = require('debug')('expo:start:server:metro:multi-platform') as typeof console.log;\n\nfunction withWebPolyfills(\n config: ConfigT,\n {\n getMetroBundler,\n }: {\n getMetroBundler: () => Bundler;\n }\n): ConfigT {\n const originalGetPolyfills = config.serializer.getPolyfills\n ? config.serializer.getPolyfills.bind(config.serializer)\n : () => [];\n\n const getPolyfills = (ctx: { platform: string | null }): readonly string[] => {\n const virtualModuleId = `\\0polyfill:external-require`;\n\n const contents = (() => {\n if (ctx.platform === 'web') {\n return `global.$$require_external = typeof window === \"undefined\" ? require : () => null;`;\n } else {\n // Wrap in try/catch to support Android.\n return 'try { global.$$require_external = typeof expo === \"undefined\" ? eval(\"require\") : (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} } catch { global.$$require_external = (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} }';\n }\n })();\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n\n if (ctx.platform === 'web') {\n return [virtualModuleId];\n }\n\n // Generally uses `rn-get-polyfills`\n const polyfills = originalGetPolyfills(ctx);\n return [...polyfills, virtualModuleId];\n };\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n getPolyfills,\n },\n };\n}\n\nfunction normalizeSlashes(p: string) {\n return p.replace(/\\\\/g, '/');\n}\n\nexport function getNodejsExtensions(srcExts: readonly string[]): string[] {\n const mjsExts = srcExts.filter((ext) => /mjs$/.test(ext));\n const nodejsSourceExtensions = srcExts.filter((ext) => !/mjs$/.test(ext));\n // find index of last `*.js` extension\n const jsIndex = nodejsSourceExtensions.reduce((index, ext, i) => {\n return /jsx?$/.test(ext) ? i : index;\n }, -1);\n\n // insert `*.mjs` extensions after `*.js` extensions\n nodejsSourceExtensions.splice(jsIndex + 1, 0, ...mjsExts);\n\n return nodejsSourceExtensions;\n}\n\n/**\n * Apply custom resolvers to do the following:\n * - Disable `.native.js` extensions on web.\n * - Alias `react-native` to `react-native-web` on web.\n * - Redirect `react-native-web/dist/modules/AssetRegistry/index.js` to `@react-native/assets/registry.js` on web.\n * - Add support for `tsconfig.json`/`jsconfig.json` aliases via `compilerOptions.paths`.\n * - Alias react-native renderer code to a vendored React canary build on native.\n */\nexport function withExtendedResolver(\n config: ConfigT,\n {\n tsconfig,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n getMetroBundler,\n }: {\n tsconfig: TsConfigPaths | null;\n isTsconfigPathsEnabled?: boolean;\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled?: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (isFastResolverEnabled) {\n Log.warn(`Experimental bundling features are enabled.`);\n }\n if (isReactCanaryEnabled) {\n Log.warn(`Experimental React Canary version is enabled.`);\n }\n\n // Get the `transformer.assetRegistryPath`\n // this needs to be unified since you can't dynamically\n // swap out the transformer based on platform.\n const assetRegistryPath = fs.realpathSync(\n path.resolve(resolveFrom(config.projectRoot, '@react-native/assets-registry/registry.js'))\n );\n\n const defaultResolver = metroResolver.resolve;\n const resolver = isFastResolverEnabled\n ? createFastResolver({\n preserveSymlinks: config.resolver?.unstable_enableSymlinks ?? true,\n blockList: Array.isArray(config.resolver?.blockList)\n ? config.resolver?.blockList\n : [config.resolver?.blockList],\n })\n : defaultResolver;\n\n const aliases: { [key: string]: Record<string, string> } = {\n web: {\n 'react-native': 'react-native-web',\n 'react-native/index': 'react-native-web',\n },\n };\n\n const universalAliases: [RegExp, string][] = [];\n\n // This package is currently always installed as it is included in the `expo` package.\n if (resolveFrom.silent(config.projectRoot, '@expo/vector-icons')) {\n debug('Enabling alias: react-native-vector-icons -> @expo/vector-icons');\n universalAliases.push([/^react-native-vector-icons(\\/.*)?/, '@expo/vector-icons$1']);\n }\n\n const preferredMainFields: { [key: string]: string[] } = {\n // Defaults from Expo Webpack. Most packages using `react-native` don't support web\n // in the `react-native` field, so we should prefer the `browser` field.\n // https://github.com/expo/router/issues/37\n web: ['browser', 'module', 'main'],\n };\n\n let tsConfigResolve =\n isTsconfigPathsEnabled && (tsconfig?.paths || tsconfig?.baseUrl != null)\n ? resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsconfig.paths ?? {},\n baseUrl: tsconfig.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsconfig.baseUrl,\n })\n : null;\n\n // TODO: Move this to be a transform key for invalidation.\n if (!isExporting && isInteractive()) {\n if (isTsconfigPathsEnabled) {\n // TODO: We should track all the files that used imports and invalidate them\n // currently the user will need to save all the files that use imports to\n // use the new aliases.\n const configWatcher = new FileNotifier(config.projectRoot, [\n './tsconfig.json',\n './jsconfig.json',\n ]);\n configWatcher.startObserving(() => {\n debug('Reloading tsconfig.json');\n loadTsConfigPathsAsync(config.projectRoot).then((tsConfigPaths) => {\n if (tsConfigPaths?.paths && !!Object.keys(tsConfigPaths.paths).length) {\n debug('Enabling tsconfig.json paths support');\n tsConfigResolve = resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsConfigPaths.paths ?? {},\n baseUrl: tsConfigPaths.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsConfigPaths.baseUrl,\n });\n } else {\n debug('Disabling tsconfig.json paths support');\n tsConfigResolve = null;\n }\n });\n });\n\n // TODO: This probably prevents the process from exiting.\n installExitHooks(() => {\n configWatcher.stopObserving();\n });\n } else {\n debug('Skipping tsconfig.json paths support');\n }\n }\n\n let nodejsSourceExtensions: string[] | null = null;\n\n function getStrictResolver(\n { resolveRequest, ...context }: ResolutionContext,\n platform: string | null\n ) {\n return function doResolve(moduleName: string): Resolution {\n return resolver(context, moduleName, platform);\n };\n }\n\n function getOptionalResolver(context: ResolutionContext, platform: string | null) {\n const doResolve = getStrictResolver(context, platform);\n return function optionalResolve(moduleName: string): Resolution | null {\n try {\n return doResolve(moduleName);\n } catch (error) {\n // If the error is directly related to a resolver not being able to resolve a module, then\n // we can ignore the error and try the next resolver. Otherwise, we should throw the error.\n const isResolutionError =\n isFailedToResolveNameError(error) || isFailedToResolvePathError(error);\n if (!isResolutionError) {\n throw error;\n }\n }\n return null;\n };\n }\n\n const metroConfigWithCustomResolver = withMetroResolvers(config, [\n // Mock out production react imports in development.\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n // This resolution is dev-only to prevent bundling the production React packages in development.\n // @ts-expect-error: dev is not on type.\n if (!context.dev) return null;\n\n if (\n // Match react-native renderers.\n (platform !== 'web' &&\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/]react-native[\\\\/]/) &&\n moduleName.match(/([\\\\/]ReactFabric|ReactNativeRenderer)-prod/)) ||\n // Match react production imports.\n (moduleName.match(/\\.production(\\.min)?\\.js$/) &&\n // Match if the import originated from a react package.\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/](react[-\\\\/]|scheduler[\\\\/])/))\n ) {\n debug(`Skipping production module: ${moduleName}`);\n // /Users/path/to/expo/node_modules/react/index.js ./cjs/react.production.min.js\n // /Users/path/to/expo/node_modules/react/jsx-dev-runtime.js ./cjs/react-jsx-dev-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n // /Users/path/to/expo/node_modules/react-refresh/runtime.js ./cjs/react-refresh-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/scheduler/index.native.js ./cjs/scheduler.native.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n return {\n type: 'empty',\n };\n }\n return null;\n },\n // tsconfig paths\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n return (\n tsConfigResolve?.(\n {\n originModulePath: context.originModulePath,\n moduleName,\n },\n getOptionalResolver(context, platform)\n ) ?? null\n );\n },\n\n // Node.js externals support\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n const isServer =\n context.customResolverOptions?.environment === 'node' ||\n context.customResolverOptions?.environment === 'react-server';\n\n if (platform !== 'web' && !isServer) {\n // This is a web/server-only feature, we may extend the shimming to native platforms in the future.\n return null;\n }\n\n const moduleId = isNodeExternal(moduleName);\n if (!moduleId) {\n return null;\n }\n\n if (\n // In browser runtimes, we want to either resolve a local node module by the same name, or shim the module to\n // prevent crashing when Node.js built-ins are imported.\n !isServer\n ) {\n // Perform optional resolve first. If the module doesn't exist (no module in the node_modules)\n // then we can mock the file to use an empty module.\n const result = getOptionalResolver(context, platform)(moduleName);\n return (\n result ?? {\n // In this case, mock the file to use an empty module.\n type: 'empty',\n }\n );\n }\n\n const contents = `module.exports=$$require_external('node:${moduleId}');`;\n debug(`Virtualizing Node.js \"${moduleId}\"`);\n const virtualModuleId = `\\0node:${moduleId}`;\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n };\n },\n\n // Basic moduleId aliases\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n // Conditionally remap `react-native` to `react-native-web` on web in\n // a way that doesn't require Babel to resolve the alias.\n if (platform && platform in aliases && aliases[platform][moduleName]) {\n const redirectedModuleName = aliases[platform][moduleName];\n return getStrictResolver(context, platform)(redirectedModuleName);\n }\n\n for (const [matcher, alias] of universalAliases) {\n const match = moduleName.match(matcher);\n if (match) {\n const aliasedModule = alias.replace(\n /\\$(\\d+)/g,\n (_, index) => match[parseInt(index, 10)] ?? ''\n );\n const doResolve = getStrictResolver(context, platform);\n debug(`Alias \"${moduleName}\" to \"${aliasedModule}\"`);\n return doResolve(aliasedModule);\n }\n }\n\n return null;\n },\n\n // HACK(EvanBacon):\n // React Native uses `event-target-shim` incorrectly and this causes the native runtime\n // to fail to load. This is a temporary workaround until we can fix this upstream.\n // https://github.com/facebook/react-native/pull/38628\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n if (platform !== 'web' && moduleName === 'event-target-shim') {\n debug('For event-target-shim to use js:', context.originModulePath);\n const doResolve = getStrictResolver(context, platform);\n return doResolve('event-target-shim/dist/event-target-shim.js');\n }\n\n return null;\n },\n\n // TODO: Reduce these as much as possible in the future.\n // Complex post-resolution rewrites.\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n const doResolve = getStrictResolver(context, platform);\n\n const result = doResolve(moduleName);\n\n if (result.type !== 'sourceFile') {\n return result;\n }\n\n if (platform === 'web') {\n // Replace the web resolver with the original one.\n // This is basically an alias for web-only.\n // TODO: Drop this in favor of the standalone asset registry module.\n if (shouldAliasAssetRegistryForWeb(platform, result)) {\n // @ts-expect-error: `readonly` for some reason.\n result.filePath = assetRegistryPath;\n }\n\n if (platform === 'web' && result.filePath.includes('node_modules')) {\n // Replace with static shims\n\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const shimFile = shouldCreateVirtualShim(normalName);\n if (shimFile) {\n const virtualId = `\\0shim:${normalName}`;\n const bundler = getMetroBundlerWithVirtualModules(getMetroBundler());\n if (!bundler.hasVirtualModule(virtualId)) {\n bundler.setVirtualModule(virtualId, fs.readFileSync(shimFile, 'utf8'));\n }\n debug(`Redirecting module \"${result.filePath}\" to shim`);\n\n return {\n ...result,\n filePath: virtualId,\n };\n }\n }\n } else {\n // When server components are enabled, redirect React Native's renderer to the canary build\n // this will enable the use hook and other requisite features from React 19.\n if (isReactCanaryEnabled && result.filePath.includes('node_modules')) {\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const canaryFile = shouldCreateVirtualCanary(normalName);\n if (canaryFile) {\n debug(`Redirecting React Native module \"${result.filePath}\" to canary build`);\n return {\n ...result,\n filePath: canaryFile,\n };\n }\n }\n }\n\n return result;\n },\n ]);\n\n // Ensure we mutate the resolution context to include the custom resolver options for server and web.\n const metroConfigWithCustomContext = withMetroMutatedResolverContext(\n metroConfigWithCustomResolver,\n (\n immutableContext: CustomResolutionContext,\n moduleName: string,\n platform: string | null\n ): CustomResolutionContext => {\n const context: Mutable<CustomResolutionContext> = {\n ...immutableContext,\n preferNativePlatform: platform !== 'web',\n };\n\n if (isServerEnvironment(context.customResolverOptions?.environment)) {\n // Adjust nodejs source extensions to sort mjs after js, including platform variants.\n if (nodejsSourceExtensions === null) {\n nodejsSourceExtensions = getNodejsExtensions(context.sourceExts);\n }\n context.sourceExts = nodejsSourceExtensions;\n\n context.unstable_enablePackageExports = true;\n context.unstable_conditionsByPlatform = {};\n // Node.js runtimes should only be importing main at the moment.\n // This is a temporary fix until we can support the package.json exports.\n context.mainFields = ['main', 'module'];\n\n // Enable react-server import conditions.\n if (context.customResolverOptions?.environment === 'react-server') {\n context.unstable_conditionNames = ['node', 'require', 'react-server', 'workerd'];\n } else {\n context.unstable_conditionNames = ['node', 'require'];\n }\n } else {\n // Non-server changes\n\n if (!env.EXPO_METRO_NO_MAIN_FIELD_OVERRIDE && platform && platform in preferredMainFields) {\n context.mainFields = preferredMainFields[platform];\n }\n }\n\n return context;\n }\n );\n\n return withMetroErrorReportingResolver(metroConfigWithCustomContext);\n}\n\n/** @returns `true` if the incoming resolution should be swapped on web. */\nexport function shouldAliasAssetRegistryForWeb(\n platform: string | null,\n result: Resolution\n): boolean {\n return (\n platform === 'web' &&\n result?.type === 'sourceFile' &&\n typeof result?.filePath === 'string' &&\n normalizeSlashes(result.filePath).endsWith(\n 'react-native-web/dist/modules/AssetRegistry/index.js'\n )\n );\n}\n/** @returns `true` if the incoming resolution should be swapped. */\nexport function shouldAliasModule(\n input: {\n platform: string | null;\n result: Resolution;\n },\n alias: { platform: string; output: string }\n): boolean {\n return (\n input.platform === alias.platform &&\n input.result?.type === 'sourceFile' &&\n typeof input.result?.filePath === 'string' &&\n normalizeSlashes(input.result.filePath).endsWith(alias.output)\n );\n}\n\n/** Add support for `react-native-web` and the Web platform. */\nexport async function withMetroMultiPlatformAsync(\n projectRoot: string,\n {\n config,\n exp,\n platformBundlers,\n isTsconfigPathsEnabled,\n webOutput,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n getMetroBundler,\n }: {\n config: ConfigT;\n exp: ExpoConfig;\n isTsconfigPathsEnabled: boolean;\n platformBundlers: PlatformBundlers;\n webOutput?: 'single' | 'static' | 'server';\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (!config.projectRoot) {\n // @ts-expect-error: read-only types\n config.projectRoot = projectRoot;\n }\n\n // Required for @expo/metro-runtime to format paths in the web LogBox.\n process.env.EXPO_PUBLIC_PROJECT_ROOT = process.env.EXPO_PUBLIC_PROJECT_ROOT ?? projectRoot;\n\n if (['static', 'server'].includes(webOutput ?? '')) {\n // Enable static rendering in runtime space.\n process.env.EXPO_PUBLIC_USE_STATIC = '1';\n }\n\n // This is used for running Expo CLI in development against projects outside the monorepo.\n if (!isDirectoryIn(__dirname, projectRoot)) {\n if (!config.watchFolders) {\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders = [];\n }\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(path.join(require.resolve('metro-runtime/package.json'), '../..'));\n }\n\n // @ts-expect-error\n config.transformer._expoRouterWebRendering = webOutput;\n // @ts-expect-error: Invalidate the cache when the location of expo-router changes on-disk.\n config.transformer._expoRouterPath = resolveFrom.silent(projectRoot, 'expo-router');\n\n let tsconfig: null | TsConfigPaths = null;\n\n if (isTsconfigPathsEnabled) {\n tsconfig = await loadTsConfigPathsAsync(projectRoot);\n }\n\n let expoConfigPlatforms = Object.entries(platformBundlers)\n .filter(\n ([platform, bundler]) => bundler === 'metro' && exp.platforms?.includes(platform as Platform)\n )\n .map(([platform]) => platform);\n\n if (Array.isArray(config.resolver.platforms)) {\n expoConfigPlatforms = [...new Set(expoConfigPlatforms.concat(config.resolver.platforms))];\n }\n\n // @ts-expect-error: typed as `readonly`.\n config.resolver.platforms = expoConfigPlatforms;\n\n config = withWebPolyfills(config, { getMetroBundler });\n\n return withExtendedResolver(config, {\n tsconfig,\n isExporting,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isReactCanaryEnabled,\n getMetroBundler,\n });\n}\n\nfunction isDirectoryIn(targetPath: string, rootPath: string) {\n return targetPath.startsWith(rootPath) && targetPath.length >= rootPath.length;\n}\n"],"names":["getNodejsExtensions","withExtendedResolver","shouldAliasAssetRegistryForWeb","shouldAliasModule","withMetroMultiPlatformAsync","debug","require","withWebPolyfills","config","getMetroBundler","originalGetPolyfills","serializer","getPolyfills","bind","ctx","virtualModuleId","contents","platform","getMetroBundlerWithVirtualModules","setVirtualModule","polyfills","normalizeSlashes","p","replace","srcExts","mjsExts","filter","ext","test","nodejsSourceExtensions","jsIndex","reduce","index","i","splice","tsconfig","isTsconfigPathsEnabled","isFastResolverEnabled","isExporting","isReactCanaryEnabled","Log","warn","assetRegistryPath","fs","realpathSync","path","resolve","resolveFrom","projectRoot","defaultResolver","metroResolver","resolver","createFastResolver","preserveSymlinks","unstable_enableSymlinks","blockList","Array","isArray","aliases","web","universalAliases","silent","push","preferredMainFields","tsConfigResolve","paths","baseUrl","resolveWithTsConfigPaths","hasBaseUrl","isInteractive","configWatcher","FileNotifier","startObserving","loadTsConfigPathsAsync","then","tsConfigPaths","Object","keys","length","installExitHooks","stopObserving","getStrictResolver","resolveRequest","context","doResolve","moduleName","getOptionalResolver","optionalResolve","error","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","metroConfigWithCustomResolver","withMetroResolvers","dev","originModulePath","match","type","isServer","customResolverOptions","environment","moduleId","isNodeExternal","result","filePath","redirectedModuleName","matcher","alias","aliasedModule","_","parseInt","includes","normalName","shimFile","shouldCreateVirtualShim","virtualId","bundler","hasVirtualModule","readFileSync","canaryFile","shouldCreateVirtualCanary","metroConfigWithCustomContext","withMetroMutatedResolverContext","immutableContext","preferNativePlatform","isServerEnvironment","sourceExts","unstable_enablePackageExports","unstable_conditionsByPlatform","mainFields","unstable_conditionNames","env","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","withMetroErrorReportingResolver","endsWith","input","output","exp","platformBundlers","webOutput","process","EXPO_PUBLIC_PROJECT_ROOT","EXPO_PUBLIC_USE_STATIC","isDirectoryIn","__dirname","watchFolders","join","transformer","_expoRouterWebRendering","_expoRouterPath","expoConfigPlatforms","entries","platforms","map","Set","concat","targetPath","rootPath","startsWith"],"mappings":"AAAA;;;;;CAKC,GACD;;;;;;;;;;;IAkFgBA,mBAAmB,MAAnBA,mBAAmB;IAsBnBC,oBAAoB,MAApBA,oBAAoB;IA0XpBC,8BAA8B,MAA9BA,8BAA8B;IAc9BC,iBAAiB,MAAjBA,iBAAiB;IAgBXC,2BAA2B,MAA3BA,2BAA2B;;;8DA/flC,IAAI;;;;;;;+DAIY,gBAAgB;;;;;;;8DAC9B,MAAM;;;;;;;8DACC,cAAc;;;;;;yCAEH,2BAA2B;2BACqB,aAAa;6BACzB,eAAe;qCACpC,uBAAuB;oCAKlE,sBAAsB;qBACT,cAAc;8BACL,6BAA6B;qBACtC,oBAAoB;sBACP,qBAAqB;6BACxB,4BAA4B;mCACJ,2CAA2C;0CACxD,kDAAkD;8BACvD,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKhE,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,wCAAwC,CAAC,AAAsB,AAAC;AAE/F,SAASC,gBAAgB,CACvBC,MAAe,EACf,EACEC,eAAe,CAAA,EAGhB,EACQ;IACT,MAAMC,oBAAoB,GAAGF,MAAM,CAACG,UAAU,CAACC,YAAY,GACvDJ,MAAM,CAACG,UAAU,CAACC,YAAY,CAACC,IAAI,CAACL,MAAM,CAACG,UAAU,CAAC,GACtD,IAAM,EAAE,AAAC;IAEb,MAAMC,YAAY,GAAG,CAACE,GAAgC,GAAwB;QAC5E,MAAMC,eAAe,GAAG,CAAC,2BAA2B,CAAC,AAAC;QAEtD,MAAMC,QAAQ,GAAG,CAAC,IAAM;YACtB,IAAIF,GAAG,CAACG,QAAQ,KAAK,KAAK,EAAE;gBAC1B,OAAO,CAAC,iFAAiF,CAAC,CAAC;YAC7F,OAAO;gBACL,wCAAwC;gBACxC,OAAO,6XAA6X,CAAC;YACvY,CAAC;QACH,CAAC,CAAC,EAAE,AAAC;QACLC,IAAAA,oBAAiC,kCAAA,EAACT,eAAe,EAAE,CAAC,CAACU,gBAAgB,CACnEJ,eAAe,EACfC,QAAQ,CACT,CAAC;QAEF,IAAIF,GAAG,CAACG,QAAQ,KAAK,KAAK,EAAE;YAC1B,OAAO;gBAACF,eAAe;aAAC,CAAC;QAC3B,CAAC;QAED,oCAAoC;QACpC,MAAMK,SAAS,GAAGV,oBAAoB,CAACI,GAAG,CAAC,AAAC;QAC5C,OAAO;eAAIM,SAAS;YAAEL,eAAe;SAAC,CAAC;IACzC,CAAC,AAAC;IAEF,OAAO;QACL,GAAGP,MAAM;QACTG,UAAU,EAAE;YACV,GAAGH,MAAM,CAACG,UAAU;YACpBC,YAAY;SACb;KACF,CAAC;AACJ,CAAC;AAED,SAASS,gBAAgB,CAACC,CAAS,EAAE;IACnC,OAAOA,CAAC,CAACC,OAAO,QAAQ,GAAG,CAAC,CAAC;AAC/B,CAAC;AAEM,SAASvB,mBAAmB,CAACwB,OAA0B,EAAY;IACxE,MAAMC,OAAO,GAAGD,OAAO,CAACE,MAAM,CAAC,CAACC,GAAG,GAAK,OAAOC,IAAI,CAACD,GAAG,CAAC,CAAC,AAAC;IAC1D,MAAME,sBAAsB,GAAGL,OAAO,CAACE,MAAM,CAAC,CAACC,GAAG,GAAK,CAAC,OAAOC,IAAI,CAACD,GAAG,CAAC,CAAC,AAAC;IAC1E,sCAAsC;IACtC,MAAMG,OAAO,GAAGD,sBAAsB,CAACE,MAAM,CAAC,CAACC,KAAK,EAAEL,GAAG,EAAEM,CAAC,GAAK;QAC/D,OAAO,QAAQL,IAAI,CAACD,GAAG,CAAC,GAAGM,CAAC,GAAGD,KAAK,CAAC;IACvC,CAAC,EAAE,CAAC,CAAC,CAAC,AAAC;IAEP,oDAAoD;IACpDH,sBAAsB,CAACK,MAAM,CAACJ,OAAO,GAAG,CAAC,EAAE,CAAC,KAAKL,OAAO,CAAC,CAAC;IAE1D,OAAOI,sBAAsB,CAAC;AAChC,CAAC;AAUM,SAAS5B,oBAAoB,CAClCO,MAAe,EACf,EACE2B,QAAQ,CAAA,EACRC,sBAAsB,CAAA,EACtBC,qBAAqB,CAAA,EACrBC,WAAW,CAAA,EACXC,oBAAoB,CAAA,EACpB9B,eAAe,CAAA,EAQhB,EACD;QAkBwBD,GAAe,EACRA,IAAe,EACpCA,IAAe,EACdA,IAAe;IApB1B,IAAI6B,qBAAqB,EAAE;QACzBG,IAAG,IAAA,CAACC,IAAI,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAIF,oBAAoB,EAAE;QACxBC,IAAG,IAAA,CAACC,IAAI,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,0CAA0C;IAC1C,uDAAuD;IACvD,8CAA8C;IAC9C,MAAMC,iBAAiB,GAAGC,GAAE,EAAA,QAAA,CAACC,YAAY,CACvCC,KAAI,EAAA,QAAA,CAACC,OAAO,CAACC,IAAAA,YAAW,EAAA,QAAA,EAACvC,MAAM,CAACwC,WAAW,EAAE,2CAA2C,CAAC,CAAC,CAC3F,AAAC;IAEF,MAAMC,eAAe,GAAGC,cAAa,EAAA,CAACJ,OAAO,AAAC;QAGtBtC,IAAwC;IAFhE,MAAM2C,QAAQ,GAAGd,qBAAqB,GAClCe,IAAAA,wBAAkB,mBAAA,EAAC;QACjBC,gBAAgB,EAAE7C,CAAAA,IAAwC,GAAxCA,CAAAA,GAAe,GAAfA,MAAM,CAAC2C,QAAQ,SAAyB,GAAxC3C,KAAAA,CAAwC,GAAxCA,GAAe,CAAE8C,uBAAuB,YAAxC9C,IAAwC,GAAI,IAAI;QAClE+C,SAAS,EAAEC,KAAK,CAACC,OAAO,CAACjD,CAAAA,IAAe,GAAfA,MAAM,CAAC2C,QAAQ,SAAW,GAA1B3C,KAAAA,CAA0B,GAA1BA,IAAe,CAAE+C,SAAS,CAAC,GAChD/C,CAAAA,IAAe,GAAfA,MAAM,CAAC2C,QAAQ,SAAW,GAA1B3C,KAAAA,CAA0B,GAA1BA,IAAe,CAAE+C,SAAS,GAC1B;YAAC/C,CAAAA,IAAe,GAAfA,MAAM,CAAC2C,QAAQ,SAAW,GAA1B3C,KAAAA,CAA0B,GAA1BA,IAAe,CAAE+C,SAAS;SAAC;KACjC,CAAC,GACFN,eAAe,AAAC;IAEpB,MAAMS,OAAO,GAA8C;QACzDC,GAAG,EAAE;YACH,cAAc,EAAE,kBAAkB;YAClC,oBAAoB,EAAE,kBAAkB;SACzC;KACF,AAAC;IAEF,MAAMC,gBAAgB,GAAuB,EAAE,AAAC;IAEhD,sFAAsF;IACtF,IAAIb,YAAW,EAAA,QAAA,CAACc,MAAM,CAACrD,MAAM,CAACwC,WAAW,EAAE,oBAAoB,CAAC,EAAE;QAChE3C,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACzEuD,gBAAgB,CAACE,IAAI,CAAC;;YAAsC,sBAAsB;SAAC,CAAC,CAAC;IACvF,CAAC;IAED,MAAMC,mBAAmB,GAAgC;QACvD,mFAAmF;QACnF,wEAAwE;QACxE,2CAA2C;QAC3CJ,GAAG,EAAE;YAAC,SAAS;YAAE,QAAQ;YAAE,MAAM;SAAC;KACnC,AAAC;QAKaxB,MAAc,EACZA,QAAgB;IAJjC,IAAI6B,eAAe,GACjB5B,sBAAsB,IAAI,CAACD,CAAAA,QAAQ,QAAO,GAAfA,KAAAA,CAAe,GAAfA,QAAQ,CAAE8B,KAAK,CAAA,IAAI9B,CAAAA,QAAQ,QAAS,GAAjBA,KAAAA,CAAiB,GAAjBA,QAAQ,CAAE+B,OAAO,CAAA,IAAI,IAAI,CAAC,GACpEC,yBAAwB,yBAAA,CAACtD,IAAI,CAACsD,yBAAwB,yBAAA,EAAE;QACtDF,KAAK,EAAE9B,CAAAA,MAAc,GAAdA,QAAQ,CAAC8B,KAAK,YAAd9B,MAAc,GAAI,EAAE;QAC3B+B,OAAO,EAAE/B,CAAAA,QAAgB,GAAhBA,QAAQ,CAAC+B,OAAO,YAAhB/B,QAAgB,GAAI3B,MAAM,CAACwC,WAAW;QAC/CoB,UAAU,EAAE,CAAC,CAACjC,QAAQ,CAAC+B,OAAO;KAC/B,CAAC,GACF,IAAI,AAAC;IAEX,0DAA0D;IAC1D,IAAI,CAAC5B,WAAW,IAAI+B,IAAAA,YAAa,cAAA,GAAE,EAAE;QACnC,IAAIjC,sBAAsB,EAAE;YAC1B,4EAA4E;YAC5E,yEAAyE;YACzE,uBAAuB;YACvB,MAAMkC,aAAa,GAAG,IAAIC,aAAY,aAAA,CAAC/D,MAAM,CAACwC,WAAW,EAAE;gBACzD,iBAAiB;gBACjB,iBAAiB;aAClB,CAAC,AAAC;YACHsB,aAAa,CAACE,cAAc,CAAC,IAAM;gBACjCnE,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBACjCoE,IAAAA,kBAAsB,uBAAA,EAACjE,MAAM,CAACwC,WAAW,CAAC,CAAC0B,IAAI,CAAC,CAACC,aAAa,GAAK;oBACjE,IAAIA,CAAAA,aAAa,QAAO,GAApBA,KAAAA,CAAoB,GAApBA,aAAa,CAAEV,KAAK,CAAA,IAAI,CAAC,CAACW,MAAM,CAACC,IAAI,CAACF,aAAa,CAACV,KAAK,CAAC,CAACa,MAAM,EAAE;wBACrEzE,KAAK,CAAC,sCAAsC,CAAC,CAAC;4BAErCsE,MAAmB,EACjBA,QAAqB;wBAFhCX,eAAe,GAAGG,yBAAwB,yBAAA,CAACtD,IAAI,CAACsD,yBAAwB,yBAAA,EAAE;4BACxEF,KAAK,EAAEU,CAAAA,MAAmB,GAAnBA,aAAa,CAACV,KAAK,YAAnBU,MAAmB,GAAI,EAAE;4BAChCT,OAAO,EAAES,CAAAA,QAAqB,GAArBA,aAAa,CAACT,OAAO,YAArBS,QAAqB,GAAInE,MAAM,CAACwC,WAAW;4BACpDoB,UAAU,EAAE,CAAC,CAACO,aAAa,CAACT,OAAO;yBACpC,CAAC,CAAC;oBACL,OAAO;wBACL7D,KAAK,CAAC,uCAAuC,CAAC,CAAC;wBAC/C2D,eAAe,GAAG,IAAI,CAAC;oBACzB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,yDAAyD;YACzDe,IAAAA,KAAgB,iBAAA,EAAC,IAAM;gBACrBT,aAAa,CAACU,aAAa,EAAE,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,OAAO;YACL3E,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAIwB,sBAAsB,GAAoB,IAAI,AAAC;IAEnD,SAASoD,iBAAiB,CACxB,EAAEC,cAAc,CAAA,EAAE,GAAGC,OAAO,EAAqB,EACjDlE,QAAuB,EACvB;QACA,OAAO,SAASmE,SAAS,CAACC,UAAkB,EAAc;YACxD,OAAOlC,QAAQ,CAACgC,OAAO,EAAEE,UAAU,EAAEpE,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC;IAED,SAASqE,mBAAmB,CAACH,OAA0B,EAAElE,QAAuB,EAAE;QAChF,MAAMmE,SAAS,GAAGH,iBAAiB,CAACE,OAAO,EAAElE,QAAQ,CAAC,AAAC;QACvD,OAAO,SAASsE,eAAe,CAACF,UAAkB,EAAqB;YACrE,IAAI;gBACF,OAAOD,SAAS,CAACC,UAAU,CAAC,CAAC;YAC/B,EAAE,OAAOG,KAAK,EAAE;gBACd,0FAA0F;gBAC1F,2FAA2F;gBAC3F,MAAMC,iBAAiB,GACrBC,IAAAA,YAA0B,2BAAA,EAACF,KAAK,CAAC,IAAIG,IAAAA,YAA0B,2BAAA,EAACH,KAAK,CAAC,AAAC;gBACzE,IAAI,CAACC,iBAAiB,EAAE;oBACtB,MAAMD,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;IACJ,CAAC;IAED,MAAMI,6BAA6B,GAAGC,IAAAA,mBAAkB,mBAAA,EAACrF,MAAM,EAAE;QAC/D,oDAAoD;QACpD,CAAC2E,OAA0B,EAAEE,UAAkB,EAAEpE,QAAuB,GAAK;YAC3E,gGAAgG;YAChG,wCAAwC;YACxC,IAAI,CAACkE,OAAO,CAACW,GAAG,EAAE,OAAO,IAAI,CAAC;YAE9B,IACE,gCAAgC;YAChC,CAAC7E,QAAQ,KAAK,KAAK,IACjBkE,OAAO,CAACY,gBAAgB,CAACC,KAAK,2CAA2C,IACzEX,UAAU,CAACW,KAAK,+CAA+C,CAAC,IAClE,kCAAkC;YAClC,CAACX,UAAU,CAACW,KAAK,6BAA6B,IAC5C,uDAAuD;YACvDb,OAAO,CAACY,gBAAgB,CAACC,KAAK,sDAAsD,CAAC,EACvF;gBACA3F,KAAK,CAAC,CAAC,4BAA4B,EAAEgF,UAAU,CAAC,CAAC,CAAC,CAAC;gBACnD,gFAAgF;gBAChF,0GAA0G;gBAC1G,sFAAsF;gBACtF,0GAA0G;gBAC1G,gIAAgI;gBAChI,gHAAgH;gBAChH,OAAO;oBACLY,IAAI,EAAE,OAAO;iBACd,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,iBAAiB;QACjB,CAACd,OAA0B,EAAEE,UAAkB,EAAEpE,QAAuB,GAAK;gBAEzE+C,GAMC;YAPH,OACEA,CAAAA,GAMC,GANDA,eAAe,QAMd,GANDA,KAAAA,CAMC,GANDA,eAAe,CACb;gBACE+B,gBAAgB,EAAEZ,OAAO,CAACY,gBAAgB;gBAC1CV,UAAU;aACX,EACDC,mBAAmB,CAACH,OAAO,EAAElE,QAAQ,CAAC,CACvC,YAND+C,GAMC,GAAI,IAAI,CACT;QACJ,CAAC;QAED,4BAA4B;QAC5B,CAACmB,OAA0B,EAAEE,UAAkB,EAAEpE,QAAuB,GAAK;gBAEzEkE,GAA6B,EAC7BA,IAA6B;YAF/B,MAAMe,QAAQ,GACZf,CAAAA,CAAAA,GAA6B,GAA7BA,OAAO,CAACgB,qBAAqB,SAAa,GAA1ChB,KAAAA,CAA0C,GAA1CA,GAA6B,CAAEiB,WAAW,CAAA,KAAK,MAAM,IACrDjB,CAAAA,CAAAA,IAA6B,GAA7BA,OAAO,CAACgB,qBAAqB,SAAa,GAA1ChB,KAAAA,CAA0C,GAA1CA,IAA6B,CAAEiB,WAAW,CAAA,KAAK,cAAc,AAAC;YAEhE,IAAInF,QAAQ,KAAK,KAAK,IAAI,CAACiF,QAAQ,EAAE;gBACnC,mGAAmG;gBACnG,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAMG,QAAQ,GAAGC,IAAAA,UAAc,eAAA,EAACjB,UAAU,CAAC,AAAC;YAC5C,IAAI,CAACgB,QAAQ,EAAE;gBACb,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IACE,6GAA6G;YAC7G,wDAAwD;YACxD,CAACH,QAAQ,EACT;gBACA,8FAA8F;gBAC9F,oDAAoD;gBACpD,MAAMK,MAAM,GAAGjB,mBAAmB,CAACH,OAAO,EAAElE,QAAQ,CAAC,CAACoE,UAAU,CAAC,AAAC;gBAClE,OACEkB,MAAM,WAANA,MAAM,GAAI;oBACR,sDAAsD;oBACtDN,IAAI,EAAE,OAAO;iBACd,CACD;YACJ,CAAC;YAED,MAAMjF,QAAQ,GAAG,CAAC,wCAAwC,EAAEqF,QAAQ,CAAC,GAAG,CAAC,AAAC;YAC1EhG,KAAK,CAAC,CAAC,sBAAsB,EAAEgG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAMtF,eAAe,GAAG,CAAC,OAAO,EAAEsF,QAAQ,CAAC,CAAC,AAAC;YAC7CnF,IAAAA,oBAAiC,kCAAA,EAACT,eAAe,EAAE,CAAC,CAACU,gBAAgB,CACnEJ,eAAe,EACfC,QAAQ,CACT,CAAC;YACF,OAAO;gBACLiF,IAAI,EAAE,YAAY;gBAClBO,QAAQ,EAAEzF,eAAe;aAC1B,CAAC;QACJ,CAAC;QAED,yBAAyB;QACzB,CAACoE,OAA0B,EAAEE,UAAkB,EAAEpE,QAAuB,GAAK;YAC3E,qEAAqE;YACrE,yDAAyD;YACzD,IAAIA,QAAQ,IAAIA,QAAQ,IAAIyC,OAAO,IAAIA,OAAO,CAACzC,QAAQ,CAAC,CAACoE,UAAU,CAAC,EAAE;gBACpE,MAAMoB,oBAAoB,GAAG/C,OAAO,CAACzC,QAAQ,CAAC,CAACoE,UAAU,CAAC,AAAC;gBAC3D,OAAOJ,iBAAiB,CAACE,OAAO,EAAElE,QAAQ,CAAC,CAACwF,oBAAoB,CAAC,CAAC;YACpE,CAAC;YAED,KAAK,MAAM,CAACC,OAAO,EAAEC,KAAK,CAAC,IAAI/C,gBAAgB,CAAE;gBAC/C,MAAMoC,KAAK,GAAGX,UAAU,CAACW,KAAK,CAACU,OAAO,CAAC,AAAC;gBACxC,IAAIV,KAAK,EAAE;wBAGOA,GAA0B;oBAF1C,MAAMY,aAAa,GAAGD,KAAK,CAACpF,OAAO,aAEjC,CAACsF,CAAC,EAAE7E,KAAK,GAAKgE,CAAAA,GAA0B,GAA1BA,KAAK,CAACc,QAAQ,CAAC9E,KAAK,EAAE,EAAE,CAAC,CAAC,YAA1BgE,GAA0B,GAAI,EAAE,CAC/C,AAAC;oBACF,MAAMZ,SAAS,GAAGH,iBAAiB,CAACE,OAAO,EAAElE,QAAQ,CAAC,AAAC;oBACvDZ,KAAK,CAAC,CAAC,OAAO,EAAEgF,UAAU,CAAC,MAAM,EAAEuB,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrD,OAAOxB,SAAS,CAACwB,aAAa,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mBAAmB;QACnB,uFAAuF;QACvF,kFAAkF;QAClF,sDAAsD;QACtD,CAACzB,OAA0B,EAAEE,UAAkB,EAAEpE,QAAuB,GAAK;YAC3E,IAAIA,QAAQ,KAAK,KAAK,IAAIoE,UAAU,KAAK,mBAAmB,EAAE;gBAC5DhF,KAAK,CAAC,kCAAkC,EAAE8E,OAAO,CAACY,gBAAgB,CAAC,CAAC;gBACpE,MAAMX,SAAS,GAAGH,iBAAiB,CAACE,OAAO,EAAElE,QAAQ,CAAC,AAAC;gBACvD,OAAOmE,SAAS,CAAC,6CAA6C,CAAC,CAAC;YAClE,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wDAAwD;QACxD,oCAAoC;QACpC,CAACD,OAA0B,EAAEE,UAAkB,EAAEpE,QAAuB,GAAK;YAC3E,MAAMmE,SAAS,GAAGH,iBAAiB,CAACE,OAAO,EAAElE,QAAQ,CAAC,AAAC;YAEvD,MAAMsF,MAAM,GAAGnB,SAAS,CAACC,UAAU,CAAC,AAAC;YAErC,IAAIkB,MAAM,CAACN,IAAI,KAAK,YAAY,EAAE;gBAChC,OAAOM,MAAM,CAAC;YAChB,CAAC;YAED,IAAItF,QAAQ,KAAK,KAAK,EAAE;gBACtB,kDAAkD;gBAClD,2CAA2C;gBAC3C,oEAAoE;gBACpE,IAAIf,8BAA8B,CAACe,QAAQ,EAAEsF,MAAM,CAAC,EAAE;oBACpD,gDAAgD;oBAChDA,MAAM,CAACC,QAAQ,GAAG9D,iBAAiB,CAAC;gBACtC,CAAC;gBAED,IAAIzB,QAAQ,KAAK,KAAK,IAAIsF,MAAM,CAACC,QAAQ,CAACO,QAAQ,CAAC,cAAc,CAAC,EAAE;oBAClE,4BAA4B;oBAE5B,MAAMC,UAAU,GAAG3F,gBAAgB,CAACkF,MAAM,CAACC,QAAQ,CAAC,AAClD,sDAAsD;qBACrDjF,OAAO,qBAAqB,EAAE,CAAC,AAAC;oBAEnC,MAAM0F,QAAQ,GAAGC,IAAAA,UAAuB,wBAAA,EAACF,UAAU,CAAC,AAAC;oBACrD,IAAIC,QAAQ,EAAE;wBACZ,MAAME,SAAS,GAAG,CAAC,OAAO,EAAEH,UAAU,CAAC,CAAC,AAAC;wBACzC,MAAMI,OAAO,GAAGlG,IAAAA,oBAAiC,kCAAA,EAACT,eAAe,EAAE,CAAC,AAAC;wBACrE,IAAI,CAAC2G,OAAO,CAACC,gBAAgB,CAACF,SAAS,CAAC,EAAE;4BACxCC,OAAO,CAACjG,gBAAgB,CAACgG,SAAS,EAAExE,GAAE,EAAA,QAAA,CAAC2E,YAAY,CAACL,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;wBACzE,CAAC;wBACD5G,KAAK,CAAC,CAAC,oBAAoB,EAAEkG,MAAM,CAACC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;wBAEzD,OAAO;4BACL,GAAGD,MAAM;4BACTC,QAAQ,EAAEW,SAAS;yBACpB,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,OAAO;gBACL,2FAA2F;gBAC3F,4EAA4E;gBAC5E,IAAI5E,oBAAoB,IAAIgE,MAAM,CAACC,QAAQ,CAACO,QAAQ,CAAC,cAAc,CAAC,EAAE;oBACpE,MAAMC,WAAU,GAAG3F,gBAAgB,CAACkF,MAAM,CAACC,QAAQ,CAAC,AAClD,sDAAsD;qBACrDjF,OAAO,qBAAqB,EAAE,CAAC,AAAC;oBAEnC,MAAMgG,UAAU,GAAGC,IAAAA,UAAyB,0BAAA,EAACR,WAAU,CAAC,AAAC;oBACzD,IAAIO,UAAU,EAAE;wBACdlH,KAAK,CAAC,CAAC,iCAAiC,EAAEkG,MAAM,CAACC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;wBAC9E,OAAO;4BACL,GAAGD,MAAM;4BACTC,QAAQ,EAAEe,UAAU;yBACrB,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAOhB,MAAM,CAAC;QAChB,CAAC;KACF,CAAC,AAAC;IAEH,qGAAqG;IACrG,MAAMkB,4BAA4B,GAAGC,IAAAA,mBAA+B,gCAAA,EAClE9B,6BAA6B,EAC7B,CACE+B,gBAAyC,EACzCtC,UAAkB,EAClBpE,QAAuB,GACK;YAMJkE,GAA6B;QALrD,MAAMA,OAAO,GAAqC;YAChD,GAAGwC,gBAAgB;YACnBC,oBAAoB,EAAE3G,QAAQ,KAAK,KAAK;SACzC,AAAC;QAEF,IAAI4G,IAAAA,aAAmB,oBAAA,EAAC1C,CAAAA,GAA6B,GAA7BA,OAAO,CAACgB,qBAAqB,SAAa,GAA1ChB,KAAAA,CAA0C,GAA1CA,GAA6B,CAAEiB,WAAW,CAAC,EAAE;gBAc/DjB,IAA6B;YAbjC,qFAAqF;YACrF,IAAItD,sBAAsB,KAAK,IAAI,EAAE;gBACnCA,sBAAsB,GAAG7B,mBAAmB,CAACmF,OAAO,CAAC2C,UAAU,CAAC,CAAC;YACnE,CAAC;YACD3C,OAAO,CAAC2C,UAAU,GAAGjG,sBAAsB,CAAC;YAE5CsD,OAAO,CAAC4C,6BAA6B,GAAG,IAAI,CAAC;YAC7C5C,OAAO,CAAC6C,6BAA6B,GAAG,EAAE,CAAC;YAC3C,gEAAgE;YAChE,yEAAyE;YACzE7C,OAAO,CAAC8C,UAAU,GAAG;gBAAC,MAAM;gBAAE,QAAQ;aAAC,CAAC;YAExC,yCAAyC;YACzC,IAAI9C,CAAAA,CAAAA,IAA6B,GAA7BA,OAAO,CAACgB,qBAAqB,SAAa,GAA1ChB,KAAAA,CAA0C,GAA1CA,IAA6B,CAAEiB,WAAW,CAAA,KAAK,cAAc,EAAE;gBACjEjB,OAAO,CAAC+C,uBAAuB,GAAG;oBAAC,MAAM;oBAAE,SAAS;oBAAE,cAAc;oBAAE,SAAS;iBAAC,CAAC;YACnF,OAAO;gBACL/C,OAAO,CAAC+C,uBAAuB,GAAG;oBAAC,MAAM;oBAAE,SAAS;iBAAC,CAAC;YACxD,CAAC;QACH,OAAO;YACL,qBAAqB;YAErB,IAAI,CAACC,IAAG,IAAA,CAACC,iCAAiC,IAAInH,QAAQ,IAAIA,QAAQ,IAAI8C,mBAAmB,EAAE;gBACzFoB,OAAO,CAAC8C,UAAU,GAAGlE,mBAAmB,CAAC9C,QAAQ,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,OAAOkE,OAAO,CAAC;IACjB,CAAC,CACF,AAAC;IAEF,OAAOkD,IAAAA,mBAA+B,gCAAA,EAACZ,4BAA4B,CAAC,CAAC;AACvE,CAAC;AAGM,SAASvH,8BAA8B,CAC5Ce,QAAuB,EACvBsF,MAAkB,EACT;IACT,OACEtF,QAAQ,KAAK,KAAK,IAClBsF,CAAAA,MAAM,QAAM,GAAZA,KAAAA,CAAY,GAAZA,MAAM,CAAEN,IAAI,CAAA,KAAK,YAAY,IAC7B,OAAOM,CAAAA,MAAM,QAAU,GAAhBA,KAAAA,CAAgB,GAAhBA,MAAM,CAAEC,QAAQ,CAAA,KAAK,QAAQ,IACpCnF,gBAAgB,CAACkF,MAAM,CAACC,QAAQ,CAAC,CAAC8B,QAAQ,CACxC,sDAAsD,CACvD,CACD;AACJ,CAAC;AAEM,SAASnI,iBAAiB,CAC/BoI,KAGC,EACD5B,KAA2C,EAClC;QAGP4B,GAAY,EACLA,IAAY;IAHrB,OACEA,KAAK,CAACtH,QAAQ,KAAK0F,KAAK,CAAC1F,QAAQ,IACjCsH,CAAAA,CAAAA,GAAY,GAAZA,KAAK,CAAChC,MAAM,SAAM,GAAlBgC,KAAAA,CAAkB,GAAlBA,GAAY,CAAEtC,IAAI,CAAA,KAAK,YAAY,IACnC,OAAOsC,CAAAA,CAAAA,IAAY,GAAZA,KAAK,CAAChC,MAAM,SAAU,GAAtBgC,KAAAA,CAAsB,GAAtBA,IAAY,CAAE/B,QAAQ,CAAA,KAAK,QAAQ,IAC1CnF,gBAAgB,CAACkH,KAAK,CAAChC,MAAM,CAACC,QAAQ,CAAC,CAAC8B,QAAQ,CAAC3B,KAAK,CAAC6B,MAAM,CAAC,CAC9D;AACJ,CAAC;AAGM,eAAepI,2BAA2B,CAC/C4C,WAAmB,EACnB,EACExC,MAAM,CAAA,EACNiI,GAAG,CAAA,EACHC,gBAAgB,CAAA,EAChBtG,sBAAsB,CAAA,EACtBuG,SAAS,CAAA,EACTtG,qBAAqB,CAAA,EACrBC,WAAW,CAAA,EACXC,oBAAoB,CAAA,EACpB9B,eAAe,CAAA,EAWhB,EACD;IACA,IAAI,CAACD,MAAM,CAACwC,WAAW,EAAE;QACvB,oCAAoC;QACpCxC,MAAM,CAACwC,WAAW,GAAGA,WAAW,CAAC;IACnC,CAAC;QAGsC4F,yBAAoC;IAD3E,sEAAsE;IACtEA,OAAO,CAACT,GAAG,CAACU,wBAAwB,GAAGD,CAAAA,yBAAoC,GAApCA,OAAO,CAACT,GAAG,CAACU,wBAAwB,YAApCD,yBAAoC,GAAI5F,WAAW,CAAC;IAE3F,IAAI;QAAC,QAAQ;QAAE,QAAQ;KAAC,CAAC+D,QAAQ,CAAC4B,SAAS,WAATA,SAAS,GAAI,EAAE,CAAC,EAAE;QAClD,4CAA4C;QAC5CC,OAAO,CAACT,GAAG,CAACW,sBAAsB,GAAG,GAAG,CAAC;IAC3C,CAAC;IAED,0FAA0F;IAC1F,IAAI,CAACC,aAAa,CAACC,SAAS,EAAEhG,WAAW,CAAC,EAAE;QAC1C,IAAI,CAACxC,MAAM,CAACyI,YAAY,EAAE;YACxB,6CAA6C;YAC7CzI,MAAM,CAACyI,YAAY,GAAG,EAAE,CAAC;QAC3B,CAAC;QACD,6CAA6C;QAC7CzI,MAAM,CAACyI,YAAY,CAACnF,IAAI,CAACjB,KAAI,EAAA,QAAA,CAACqG,IAAI,CAAC5I,OAAO,CAACwC,OAAO,CAAC,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,mBAAmB;IACnBtC,MAAM,CAAC2I,WAAW,CAACC,uBAAuB,GAAGT,SAAS,CAAC;IACvD,2FAA2F;IAC3FnI,MAAM,CAAC2I,WAAW,CAACE,eAAe,GAAGtG,YAAW,EAAA,QAAA,CAACc,MAAM,CAACb,WAAW,EAAE,aAAa,CAAC,CAAC;IAEpF,IAAIb,QAAQ,GAAyB,IAAI,AAAC;IAE1C,IAAIC,sBAAsB,EAAE;QAC1BD,QAAQ,GAAG,MAAMsC,IAAAA,kBAAsB,uBAAA,EAACzB,WAAW,CAAC,CAAC;IACvD,CAAC;IAED,IAAIsG,mBAAmB,GAAG1E,MAAM,CAAC2E,OAAO,CAACb,gBAAgB,CAAC,CACvDhH,MAAM,CACL,CAAC,CAACT,QAAQ,EAAEmG,OAAO,CAAC;YAA4BqB,GAAa;QAApCrB,OAAAA,OAAO,KAAK,OAAO,KAAIqB,CAAAA,GAAa,GAAbA,GAAG,CAACe,SAAS,SAAU,GAAvBf,KAAAA,CAAuB,GAAvBA,GAAa,CAAE1B,QAAQ,CAAC9F,QAAQ,CAAa,CAAA,CAAA;KAAA,CAC9F,CACAwI,GAAG,CAAC,CAAC,CAACxI,QAAQ,CAAC,GAAKA,QAAQ,CAAC,AAAC;IAEjC,IAAIuC,KAAK,CAACC,OAAO,CAACjD,MAAM,CAAC2C,QAAQ,CAACqG,SAAS,CAAC,EAAE;QAC5CF,mBAAmB,GAAG;eAAI,IAAII,GAAG,CAACJ,mBAAmB,CAACK,MAAM,CAACnJ,MAAM,CAAC2C,QAAQ,CAACqG,SAAS,CAAC,CAAC;SAAC,CAAC;IAC5F,CAAC;IAED,yCAAyC;IACzChJ,MAAM,CAAC2C,QAAQ,CAACqG,SAAS,GAAGF,mBAAmB,CAAC;IAEhD9I,MAAM,GAAGD,gBAAgB,CAACC,MAAM,EAAE;QAAEC,eAAe;KAAE,CAAC,CAAC;IAEvD,OAAOR,oBAAoB,CAACO,MAAM,EAAE;QAClC2B,QAAQ;QACRG,WAAW;QACXF,sBAAsB;QACtBC,qBAAqB;QACrBE,oBAAoB;QACpB9B,eAAe;KAChB,CAAC,CAAC;AACL,CAAC;AAED,SAASsI,aAAa,CAACa,UAAkB,EAAEC,QAAgB,EAAE;IAC3D,OAAOD,UAAU,CAACE,UAAU,CAACD,QAAQ,CAAC,IAAID,UAAU,CAAC9E,MAAM,IAAI+E,QAAQ,CAAC/E,MAAM,CAAC;AACjF,CAAC"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/withMetroMultiPlatform.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { ExpoConfig, Platform } from '@expo/config';\nimport fs from 'fs';\nimport Bundler from 'metro/src/Bundler';\nimport { ConfigT } from 'metro-config';\nimport { Resolution, ResolutionContext, CustomResolutionContext } from 'metro-resolver';\nimport * as metroResolver from 'metro-resolver';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { createFastResolver } from './createExpoMetroResolver';\nimport { isNodeExternal, shouldCreateVirtualCanary, shouldCreateVirtualShim } from './externals';\nimport { isFailedToResolveNameError, isFailedToResolvePathError } from './metroErrors';\nimport { getMetroBundlerWithVirtualModules } from './metroVirtualModules';\nimport {\n withMetroErrorReportingResolver,\n withMetroMutatedResolverContext,\n withMetroResolvers,\n} from './withMetroResolvers';\nimport { Log } from '../../../log';\nimport { FileNotifier } from '../../../utils/FileNotifier';\nimport { env } from '../../../utils/env';\nimport { installExitHooks } from '../../../utils/exit';\nimport { isInteractive } from '../../../utils/interactive';\nimport { loadTsConfigPathsAsync, TsConfigPaths } from '../../../utils/tsconfig/loadTsConfigPaths';\nimport { resolveWithTsConfigPaths } from '../../../utils/tsconfig/resolveWithTsConfigPaths';\nimport { isServerEnvironment } from '../middleware/metroOptions';\nimport { PlatformBundlers } from '../platformBundlers';\n\ntype Mutable<T> = { -readonly [K in keyof T]: T[K] };\n\nconst debug = require('debug')('expo:start:server:metro:multi-platform') as typeof console.log;\n\nfunction withWebPolyfills(\n config: ConfigT,\n {\n getMetroBundler,\n }: {\n getMetroBundler: () => Bundler;\n }\n): ConfigT {\n const originalGetPolyfills = config.serializer.getPolyfills\n ? config.serializer.getPolyfills.bind(config.serializer)\n : () => [];\n\n const getPolyfills = (ctx: { platform: string | null }): readonly string[] => {\n const virtualModuleId = `\\0polyfill:external-require`;\n\n const contents = (() => {\n if (ctx.platform === 'web') {\n return `global.$$require_external = typeof window === \"undefined\" ? require : () => null;`;\n } else {\n // Wrap in try/catch to support Android.\n return 'try { global.$$require_external = typeof expo === \"undefined\" ? eval(\"require\") : (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} } catch { global.$$require_external = (moduleId) => { throw new Error(`Node.js standard library module ${moduleId} is not available in this JavaScript environment`);} }';\n }\n })();\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n\n if (ctx.platform === 'web') {\n return [\n virtualModuleId,\n // Ensure that the error-guard polyfill is included in the web polyfills to\n // make metro-runtime work correctly.\n // TODO: This module is pretty big for a function that simply re-throws an error that doesn't need to be caught.\n require.resolve('@react-native/js-polyfills/error-guard'),\n ];\n }\n\n // Generally uses `rn-get-polyfills`\n const polyfills = originalGetPolyfills(ctx);\n return [...polyfills, virtualModuleId];\n };\n\n return {\n ...config,\n serializer: {\n ...config.serializer,\n getPolyfills,\n },\n };\n}\n\nfunction normalizeSlashes(p: string) {\n return p.replace(/\\\\/g, '/');\n}\n\nexport function getNodejsExtensions(srcExts: readonly string[]): string[] {\n const mjsExts = srcExts.filter((ext) => /mjs$/.test(ext));\n const nodejsSourceExtensions = srcExts.filter((ext) => !/mjs$/.test(ext));\n // find index of last `*.js` extension\n const jsIndex = nodejsSourceExtensions.reduce((index, ext, i) => {\n return /jsx?$/.test(ext) ? i : index;\n }, -1);\n\n // insert `*.mjs` extensions after `*.js` extensions\n nodejsSourceExtensions.splice(jsIndex + 1, 0, ...mjsExts);\n\n return nodejsSourceExtensions;\n}\n\n/**\n * Apply custom resolvers to do the following:\n * - Disable `.native.js` extensions on web.\n * - Alias `react-native` to `react-native-web` on web.\n * - Redirect `react-native-web/dist/modules/AssetRegistry/index.js` to `@react-native/assets/registry.js` on web.\n * - Add support for `tsconfig.json`/`jsconfig.json` aliases via `compilerOptions.paths`.\n * - Alias react-native renderer code to a vendored React canary build on native.\n */\nexport function withExtendedResolver(\n config: ConfigT,\n {\n tsconfig,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n getMetroBundler,\n }: {\n tsconfig: TsConfigPaths | null;\n isTsconfigPathsEnabled?: boolean;\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled?: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (isFastResolverEnabled) {\n Log.warn(`Experimental bundling features are enabled.`);\n }\n if (isReactCanaryEnabled) {\n Log.warn(`Experimental React Canary version is enabled.`);\n }\n\n // Get the `transformer.assetRegistryPath`\n // this needs to be unified since you can't dynamically\n // swap out the transformer based on platform.\n const assetRegistryPath = fs.realpathSync(\n path.resolve(resolveFrom(config.projectRoot, '@react-native/assets-registry/registry.js'))\n );\n\n const defaultResolver = metroResolver.resolve;\n const resolver = isFastResolverEnabled\n ? createFastResolver({\n preserveSymlinks: config.resolver?.unstable_enableSymlinks ?? true,\n blockList: Array.isArray(config.resolver?.blockList)\n ? config.resolver?.blockList\n : [config.resolver?.blockList],\n })\n : defaultResolver;\n\n const aliases: { [key: string]: Record<string, string> } = {\n web: {\n 'react-native': 'react-native-web',\n 'react-native/index': 'react-native-web',\n },\n };\n\n const universalAliases: [RegExp, string][] = [];\n\n // This package is currently always installed as it is included in the `expo` package.\n if (resolveFrom.silent(config.projectRoot, '@expo/vector-icons')) {\n debug('Enabling alias: react-native-vector-icons -> @expo/vector-icons');\n universalAliases.push([/^react-native-vector-icons(\\/.*)?/, '@expo/vector-icons$1']);\n }\n\n const preferredMainFields: { [key: string]: string[] } = {\n // Defaults from Expo Webpack. Most packages using `react-native` don't support web\n // in the `react-native` field, so we should prefer the `browser` field.\n // https://github.com/expo/router/issues/37\n web: ['browser', 'module', 'main'],\n };\n\n let tsConfigResolve =\n isTsconfigPathsEnabled && (tsconfig?.paths || tsconfig?.baseUrl != null)\n ? resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsconfig.paths ?? {},\n baseUrl: tsconfig.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsconfig.baseUrl,\n })\n : null;\n\n // TODO: Move this to be a transform key for invalidation.\n if (!isExporting && isInteractive()) {\n if (isTsconfigPathsEnabled) {\n // TODO: We should track all the files that used imports and invalidate them\n // currently the user will need to save all the files that use imports to\n // use the new aliases.\n const configWatcher = new FileNotifier(config.projectRoot, [\n './tsconfig.json',\n './jsconfig.json',\n ]);\n configWatcher.startObserving(() => {\n debug('Reloading tsconfig.json');\n loadTsConfigPathsAsync(config.projectRoot).then((tsConfigPaths) => {\n if (tsConfigPaths?.paths && !!Object.keys(tsConfigPaths.paths).length) {\n debug('Enabling tsconfig.json paths support');\n tsConfigResolve = resolveWithTsConfigPaths.bind(resolveWithTsConfigPaths, {\n paths: tsConfigPaths.paths ?? {},\n baseUrl: tsConfigPaths.baseUrl ?? config.projectRoot,\n hasBaseUrl: !!tsConfigPaths.baseUrl,\n });\n } else {\n debug('Disabling tsconfig.json paths support');\n tsConfigResolve = null;\n }\n });\n });\n\n // TODO: This probably prevents the process from exiting.\n installExitHooks(() => {\n configWatcher.stopObserving();\n });\n } else {\n debug('Skipping tsconfig.json paths support');\n }\n }\n\n let nodejsSourceExtensions: string[] | null = null;\n\n function getStrictResolver(\n { resolveRequest, ...context }: ResolutionContext,\n platform: string | null\n ) {\n return function doResolve(moduleName: string): Resolution {\n return resolver(context, moduleName, platform);\n };\n }\n\n function getOptionalResolver(context: ResolutionContext, platform: string | null) {\n const doResolve = getStrictResolver(context, platform);\n return function optionalResolve(moduleName: string): Resolution | null {\n try {\n return doResolve(moduleName);\n } catch (error) {\n // If the error is directly related to a resolver not being able to resolve a module, then\n // we can ignore the error and try the next resolver. Otherwise, we should throw the error.\n const isResolutionError =\n isFailedToResolveNameError(error) || isFailedToResolvePathError(error);\n if (!isResolutionError) {\n throw error;\n }\n }\n return null;\n };\n }\n\n const metroConfigWithCustomResolver = withMetroResolvers(config, [\n // Mock out production react imports in development.\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n // This resolution is dev-only to prevent bundling the production React packages in development.\n // @ts-expect-error: dev is not on type.\n if (!context.dev) return null;\n\n if (\n // Match react-native renderers.\n (platform !== 'web' &&\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/]react-native[\\\\/]/) &&\n moduleName.match(/([\\\\/]ReactFabric|ReactNativeRenderer)-prod/)) ||\n // Match react production imports.\n (moduleName.match(/\\.production(\\.min)?\\.js$/) &&\n // Match if the import originated from a react package.\n context.originModulePath.match(/[\\\\/]node_modules[\\\\/](react[-\\\\/]|scheduler[\\\\/])/))\n ) {\n debug(`Skipping production module: ${moduleName}`);\n // /Users/path/to/expo/node_modules/react/index.js ./cjs/react.production.min.js\n // /Users/path/to/expo/node_modules/react/jsx-dev-runtime.js ./cjs/react-jsx-dev-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n // /Users/path/to/expo/node_modules/react-refresh/runtime.js ./cjs/react-refresh-runtime.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/scheduler/index.native.js ./cjs/scheduler.native.production.min.js\n // /Users/path/to/expo/node_modules/react-native/node_modules/react-is/index.js ./cjs/react-is.production.min.js\n return {\n type: 'empty',\n };\n }\n return null;\n },\n // tsconfig paths\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n return (\n tsConfigResolve?.(\n {\n originModulePath: context.originModulePath,\n moduleName,\n },\n getOptionalResolver(context, platform)\n ) ?? null\n );\n },\n\n // Node.js externals support\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n const isServer =\n context.customResolverOptions?.environment === 'node' ||\n context.customResolverOptions?.environment === 'react-server';\n\n if (platform !== 'web' && !isServer) {\n // This is a web/server-only feature, we may extend the shimming to native platforms in the future.\n return null;\n }\n\n const moduleId = isNodeExternal(moduleName);\n if (!moduleId) {\n return null;\n }\n\n if (\n // In browser runtimes, we want to either resolve a local node module by the same name, or shim the module to\n // prevent crashing when Node.js built-ins are imported.\n !isServer\n ) {\n // Perform optional resolve first. If the module doesn't exist (no module in the node_modules)\n // then we can mock the file to use an empty module.\n const result = getOptionalResolver(context, platform)(moduleName);\n return (\n result ?? {\n // In this case, mock the file to use an empty module.\n type: 'empty',\n }\n );\n }\n\n const contents = `module.exports=$$require_external('node:${moduleId}');`;\n debug(`Virtualizing Node.js \"${moduleId}\"`);\n const virtualModuleId = `\\0node:${moduleId}`;\n getMetroBundlerWithVirtualModules(getMetroBundler()).setVirtualModule(\n virtualModuleId,\n contents\n );\n return {\n type: 'sourceFile',\n filePath: virtualModuleId,\n };\n },\n\n // Basic moduleId aliases\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n // Conditionally remap `react-native` to `react-native-web` on web in\n // a way that doesn't require Babel to resolve the alias.\n if (platform && platform in aliases && aliases[platform][moduleName]) {\n const redirectedModuleName = aliases[platform][moduleName];\n return getStrictResolver(context, platform)(redirectedModuleName);\n }\n\n for (const [matcher, alias] of universalAliases) {\n const match = moduleName.match(matcher);\n if (match) {\n const aliasedModule = alias.replace(\n /\\$(\\d+)/g,\n (_, index) => match[parseInt(index, 10)] ?? ''\n );\n const doResolve = getStrictResolver(context, platform);\n debug(`Alias \"${moduleName}\" to \"${aliasedModule}\"`);\n return doResolve(aliasedModule);\n }\n }\n\n return null;\n },\n\n // TODO: Reduce these as much as possible in the future.\n // Complex post-resolution rewrites.\n (context: ResolutionContext, moduleName: string, platform: string | null) => {\n const doResolve = getStrictResolver(context, platform);\n\n const result = doResolve(moduleName);\n\n if (result.type !== 'sourceFile') {\n return result;\n }\n\n if (platform === 'web') {\n // Replace the web resolver with the original one.\n // This is basically an alias for web-only.\n // TODO: Drop this in favor of the standalone asset registry module.\n if (shouldAliasAssetRegistryForWeb(platform, result)) {\n // @ts-expect-error: `readonly` for some reason.\n result.filePath = assetRegistryPath;\n }\n\n if (platform === 'web' && result.filePath.includes('node_modules')) {\n // Replace with static shims\n\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const shimFile = shouldCreateVirtualShim(normalName);\n if (shimFile) {\n const virtualId = `\\0shim:${normalName}`;\n const bundler = getMetroBundlerWithVirtualModules(getMetroBundler());\n if (!bundler.hasVirtualModule(virtualId)) {\n bundler.setVirtualModule(virtualId, fs.readFileSync(shimFile, 'utf8'));\n }\n debug(`Redirecting module \"${result.filePath}\" to shim`);\n\n return {\n ...result,\n filePath: virtualId,\n };\n }\n }\n } else {\n // When server components are enabled, redirect React Native's renderer to the canary build\n // this will enable the use hook and other requisite features from React 19.\n if (isReactCanaryEnabled && result.filePath.includes('node_modules')) {\n const normalName = normalizeSlashes(result.filePath)\n // Drop everything up until the `node_modules` folder.\n .replace(/.*node_modules\\//, '');\n\n const canaryFile = shouldCreateVirtualCanary(normalName);\n if (canaryFile) {\n debug(`Redirecting React Native module \"${result.filePath}\" to canary build`);\n return {\n ...result,\n filePath: canaryFile,\n };\n }\n }\n }\n\n return result;\n },\n ]);\n\n // Ensure we mutate the resolution context to include the custom resolver options for server and web.\n const metroConfigWithCustomContext = withMetroMutatedResolverContext(\n metroConfigWithCustomResolver,\n (\n immutableContext: CustomResolutionContext,\n moduleName: string,\n platform: string | null\n ): CustomResolutionContext => {\n const context: Mutable<CustomResolutionContext> = {\n ...immutableContext,\n preferNativePlatform: platform !== 'web',\n };\n\n if (isServerEnvironment(context.customResolverOptions?.environment)) {\n // Adjust nodejs source extensions to sort mjs after js, including platform variants.\n if (nodejsSourceExtensions === null) {\n nodejsSourceExtensions = getNodejsExtensions(context.sourceExts);\n }\n context.sourceExts = nodejsSourceExtensions;\n\n context.unstable_enablePackageExports = true;\n context.unstable_conditionsByPlatform = {};\n // Node.js runtimes should only be importing main at the moment.\n // This is a temporary fix until we can support the package.json exports.\n context.mainFields = ['main', 'module'];\n\n // Enable react-server import conditions.\n if (context.customResolverOptions?.environment === 'react-server') {\n context.unstable_conditionNames = ['node', 'require', 'react-server', 'workerd'];\n } else {\n context.unstable_conditionNames = ['node', 'require'];\n }\n } else {\n // Non-server changes\n\n if (!env.EXPO_METRO_NO_MAIN_FIELD_OVERRIDE && platform && platform in preferredMainFields) {\n context.mainFields = preferredMainFields[platform];\n }\n }\n\n return context;\n }\n );\n\n return withMetroErrorReportingResolver(metroConfigWithCustomContext);\n}\n\n/** @returns `true` if the incoming resolution should be swapped on web. */\nexport function shouldAliasAssetRegistryForWeb(\n platform: string | null,\n result: Resolution\n): boolean {\n return (\n platform === 'web' &&\n result?.type === 'sourceFile' &&\n typeof result?.filePath === 'string' &&\n normalizeSlashes(result.filePath).endsWith(\n 'react-native-web/dist/modules/AssetRegistry/index.js'\n )\n );\n}\n/** @returns `true` if the incoming resolution should be swapped. */\nexport function shouldAliasModule(\n input: {\n platform: string | null;\n result: Resolution;\n },\n alias: { platform: string; output: string }\n): boolean {\n return (\n input.platform === alias.platform &&\n input.result?.type === 'sourceFile' &&\n typeof input.result?.filePath === 'string' &&\n normalizeSlashes(input.result.filePath).endsWith(alias.output)\n );\n}\n\n/** Add support for `react-native-web` and the Web platform. */\nexport async function withMetroMultiPlatformAsync(\n projectRoot: string,\n {\n config,\n exp,\n platformBundlers,\n isTsconfigPathsEnabled,\n webOutput,\n isFastResolverEnabled,\n isExporting,\n isReactCanaryEnabled,\n getMetroBundler,\n }: {\n config: ConfigT;\n exp: ExpoConfig;\n isTsconfigPathsEnabled: boolean;\n platformBundlers: PlatformBundlers;\n webOutput?: 'single' | 'static' | 'server';\n isFastResolverEnabled?: boolean;\n isExporting?: boolean;\n isReactCanaryEnabled: boolean;\n getMetroBundler: () => Bundler;\n }\n) {\n if (!config.projectRoot) {\n // @ts-expect-error: read-only types\n config.projectRoot = projectRoot;\n }\n\n // Required for @expo/metro-runtime to format paths in the web LogBox.\n process.env.EXPO_PUBLIC_PROJECT_ROOT = process.env.EXPO_PUBLIC_PROJECT_ROOT ?? projectRoot;\n\n if (['static', 'server'].includes(webOutput ?? '')) {\n // Enable static rendering in runtime space.\n process.env.EXPO_PUBLIC_USE_STATIC = '1';\n }\n\n // This is used for running Expo CLI in development against projects outside the monorepo.\n if (!isDirectoryIn(__dirname, projectRoot)) {\n if (!config.watchFolders) {\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders = [];\n }\n // @ts-expect-error: watchFolders is readonly\n config.watchFolders.push(path.join(require.resolve('metro-runtime/package.json'), '../..'));\n }\n\n // @ts-expect-error\n config.transformer._expoRouterWebRendering = webOutput;\n // @ts-expect-error: Invalidate the cache when the location of expo-router changes on-disk.\n config.transformer._expoRouterPath = resolveFrom.silent(projectRoot, 'expo-router');\n\n let tsconfig: null | TsConfigPaths = null;\n\n if (isTsconfigPathsEnabled) {\n tsconfig = await loadTsConfigPathsAsync(projectRoot);\n }\n\n let expoConfigPlatforms = Object.entries(platformBundlers)\n .filter(\n ([platform, bundler]) => bundler === 'metro' && exp.platforms?.includes(platform as Platform)\n )\n .map(([platform]) => platform);\n\n if (Array.isArray(config.resolver.platforms)) {\n expoConfigPlatforms = [...new Set(expoConfigPlatforms.concat(config.resolver.platforms))];\n }\n\n // @ts-expect-error: typed as `readonly`.\n config.resolver.platforms = expoConfigPlatforms;\n\n config = withWebPolyfills(config, { getMetroBundler });\n\n return withExtendedResolver(config, {\n tsconfig,\n isExporting,\n isTsconfigPathsEnabled,\n isFastResolverEnabled,\n isReactCanaryEnabled,\n getMetroBundler,\n });\n}\n\nfunction isDirectoryIn(targetPath: string, rootPath: string) {\n return targetPath.startsWith(rootPath) && targetPath.length >= rootPath.length;\n}\n"],"names":["getNodejsExtensions","withExtendedResolver","shouldAliasAssetRegistryForWeb","shouldAliasModule","withMetroMultiPlatformAsync","debug","require","withWebPolyfills","config","getMetroBundler","originalGetPolyfills","serializer","getPolyfills","bind","ctx","virtualModuleId","contents","platform","getMetroBundlerWithVirtualModules","setVirtualModule","resolve","polyfills","normalizeSlashes","p","replace","srcExts","mjsExts","filter","ext","test","nodejsSourceExtensions","jsIndex","reduce","index","i","splice","tsconfig","isTsconfigPathsEnabled","isFastResolverEnabled","isExporting","isReactCanaryEnabled","Log","warn","assetRegistryPath","fs","realpathSync","path","resolveFrom","projectRoot","defaultResolver","metroResolver","resolver","createFastResolver","preserveSymlinks","unstable_enableSymlinks","blockList","Array","isArray","aliases","web","universalAliases","silent","push","preferredMainFields","tsConfigResolve","paths","baseUrl","resolveWithTsConfigPaths","hasBaseUrl","isInteractive","configWatcher","FileNotifier","startObserving","loadTsConfigPathsAsync","then","tsConfigPaths","Object","keys","length","installExitHooks","stopObserving","getStrictResolver","resolveRequest","context","doResolve","moduleName","getOptionalResolver","optionalResolve","error","isResolutionError","isFailedToResolveNameError","isFailedToResolvePathError","metroConfigWithCustomResolver","withMetroResolvers","dev","originModulePath","match","type","isServer","customResolverOptions","environment","moduleId","isNodeExternal","result","filePath","redirectedModuleName","matcher","alias","aliasedModule","_","parseInt","includes","normalName","shimFile","shouldCreateVirtualShim","virtualId","bundler","hasVirtualModule","readFileSync","canaryFile","shouldCreateVirtualCanary","metroConfigWithCustomContext","withMetroMutatedResolverContext","immutableContext","preferNativePlatform","isServerEnvironment","sourceExts","unstable_enablePackageExports","unstable_conditionsByPlatform","mainFields","unstable_conditionNames","env","EXPO_METRO_NO_MAIN_FIELD_OVERRIDE","withMetroErrorReportingResolver","endsWith","input","output","exp","platformBundlers","webOutput","process","EXPO_PUBLIC_PROJECT_ROOT","EXPO_PUBLIC_USE_STATIC","isDirectoryIn","__dirname","watchFolders","join","transformer","_expoRouterWebRendering","_expoRouterPath","expoConfigPlatforms","entries","platforms","map","Set","concat","targetPath","rootPath","startsWith"],"mappings":"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"}