diff --git a/patches/@expo__cli@57.0.13.patch b/patches/@expo__cli@57.0.13.patch new file mode 100644 index 0000000000..23b1c23415 --- /dev/null +++ b/patches/@expo__cli@57.0.13.patch @@ -0,0 +1,22 @@ +diff --git a/build/src/start/server/serverLogLikeMetro.js b/build/src/start/server/serverLogLikeMetro.js +index b1f633512f0dea3203d1f1acd89edefe02cc30d5..34ed7d1d389ff51c9e08e743c79bd84782d7953d 100644 +--- a/build/src/start/server/serverLogLikeMetro.js ++++ b/build/src/start/server/serverLogLikeMetro.js +@@ -176,8 +176,15 @@ async function maybeSymbolicateAndFormatJSErrorStackLogAsync(projectRoot, level, + stack: ((_log_symbolicated = log.symbolicated) == null ? void 0 : (_log_symbolicated_stack = _log_symbolicated.stack) == null ? void 0 : _log_symbolicated_stack.stack) ?? [], + codeFrame: log.codeFrame + }); +- // NOTE: Message is printed above stack by the default Metro logic. So we don't need to include it here. +- const symbolicatedErrorStackLog = `\n\n${formatted.stack}`; ++ /* ++ * The original code assumed the message is printed above the stack by the default Metro ++ * logic and returned only the formatted stack. That only holds when the message and stack ++ * arrive as separate console arguments. React 19 owner-stack errors arrive as ONE merged ++ * string ("\n at ..."), so the caller replaces the whole argument with this ++ * return value and the message was silently dropped (terminal showed a blank "Web ERROR"). ++ * Prepend the parsed message when present so it is never lost. ++ */ ++ const symbolicatedErrorStackLog = error.message ? `${error.message}\n\n${formatted.stack}` : `\n\n${formatted.stack}`; + return { + isFallback: formatted.isFallback, + stack: symbolicatedErrorStackLog diff --git a/patches/@expo__cli@57.0.13.patch.md b/patches/@expo__cli@57.0.13.patch.md new file mode 100644 index 0000000000..5481f3933b --- /dev/null +++ b/patches/@expo__cli@57.0.13.patch.md @@ -0,0 +1,18 @@ +# @expo/cli + +## build/src/start/server/serverLogLikeMetro.js - keep the error message in web terminal logs + +Dev-server-terminal-only change; no runtime/app impact. + +React 19 appends owner stacks to dev warnings, so a web `console.error` +arrives at the CLI as one merged string (`"\n at ..."`). The +reporter replaces the whole argument with the symbolicated stack block and +dropped the parsed message, printing a blank `Web ERROR` with only a code +frame and call stack. + +The patch prepends `error.message` (when non-empty) to the returned stack +block. Native logs are unaffected (message and stack arrive as separate +arguments there). + +Unreported upstream as of 2026-08-13; worth filing against expo/expo +referencing expo/expo#46584. diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1bdc6c2632..803b02c70f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -29,6 +29,7 @@ allowBuilds: 'esbuild': false 'unrs-resolver': true patchedDependencies: + '@expo/cli@57.0.13': patches/@expo__cli@57.0.13.patch '@formatjs/bigdecimal@0.2.5': patches/@formatjs__bigdecimal@0.2.5.patch '@sentry/expo-upload-sourcemaps@8.18.0': patches/@sentry__expo-upload-sourcemaps@8.18.0.patch 'expo-age-range@57.0.2': patches/expo-age-range@57.0.2.patch