Skip to content

Handle more known protocols in stackframe locations#76085

Closed
eps1lon wants to merge 1 commit intosebbie/02-15-_dev-overlay_stop_hiding_rsc_protocolfrom
sebbie/02-15-handle_more_known_protocols_in_stackframe_locations
Closed

Handle more known protocols in stackframe locations#76085
eps1lon wants to merge 1 commit intosebbie/02-15-_dev-overlay_stop_hiding_rsc_protocolfrom
sebbie/02-15-handle_more_known_protocols_in_stackframe_locations

Conversation

@eps1lon
Copy link
Member

@eps1lon eps1lon commented Feb 15, 2025

Adds support for turbopack:, rsc:, and webpack-internal:.

Now we no longer need to manually hide rsc: in file locations since that was a bug that was just masked.

It should really just parse any valid URL scheme.
Riskier and harder to implement for Gecko though so
restricting this fix to known cases for now.

Copy link
Member Author

eps1lon commented Feb 15, 2025

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@ijjk
Copy link
Member

ijjk commented Feb 15, 2025

Failing test suites

Commit: c1e35fc

pnpm test-dev test/e2e/app-dir/use-cache-close-over-function/use-cache-close-over-function.test.ts

  • use-cache-close-over-function > should show the error overlay for server-side usage
Expand output

● use-cache-close-over-function › should show the error overlay for server-side usage

expect(received).toContain(expected) // indexOf

Expected substring: "Error: Functions cannot be passed directly to Client Components unless you explicitly expose it by marking it with \"use server\". Or maybe you meant to call this function rather than return it.
  [function fn]
   ^^^^^^^^^^^

  at createCachedFn (../app/server/page.tsx:6:2)
  at eval (../app/server/page.tsx:12:23)
      at (rsc)"
  Received string:    " ✓ Compiled /server in 498ms (758 modules)
  Error: Functions cannot be passed directly to Client Components unless you explicitly expose it by marking it with \"use server\". Or maybe you meant to call this function rather than return it.
    [function fn]
     ^^^^^^^^^^^
  at createCachedFn (../app/server/page.tsx:6:2)
  at eval (../app/server/page.tsx:12:23)
  at <unknown> (rsc)/./app/server/page.tsx (../../../../../../tmp/next-install-9f5b1e661479fc30d064f5195aa155e164d985ea5162ac77d0201bc4be47c82a/.next/server/app/server/page.js:172:1)
  at Function.__webpack_require__ (../.next/server/webpack-runtime.js:33:42)
    4 |   }
    5 |
  > 6 |   return async () => {
      |  ^
    7 |     'use cache'
    8 |     return Math.random() + fn()
    9 |   }
  Error: Functions cannot be passed directly to Client Components unless you explicitly expose it by marking it with \"use server\". Or maybe you meant to call this function rather than return it.
    [function fn]
     ^^^^^^^^^^^
  at createCachedFn (../app/server/page.tsx:6:2)
  at eval (../app/server/page.tsx:12:23)
  at <unknown> (rsc)/./app/server/page.tsx (../../../../../../tmp/next-install-9f5b1e661479fc30d064f5195aa155e164d985ea5162ac77d0201bc4be47c82a/.next/server/app/server/page.js:172:1)
  at Function.__webpack_require__ (../.next/server/webpack-runtime.js:33:42)
    4 |   }
    5 |
  > 6 |   return async () => {
      |  ^
    7 |     'use cache'
    8 |     return Math.random() + fn()
    9 |   }
   ⨯ unhandledRejection: Error: Functions cannot be passed directly to Client Components unless you explicitly expose it by marking it with \"use server\". Or maybe you meant to call this function rather than return it.
    [function fn]
     ^^^^^^^^^^^
  at createCachedFn (../app/server/page.tsx:6:2)
  at eval (../app/server/page.tsx:12:23)
  at <unknown> (rsc)/./app/server/page.tsx (../../../../../../tmp/next-install-9f5b1e661479fc30d064f5195aa155e164d985ea5162ac77d0201bc4be47c82a/.next/server/app/server/page.js:172:1)
  at Function.__webpack_require__ (../.next/server/webpack-runtime.js:33:42)
    4 |   }
    5 |
  > 6 |   return async () => {
      |  ^
    7 |     'use cache'
    8 |     return Math.random() + fn()
    9 |   }
   ⨯ unhandledRejection:  Error: Functions cannot be passed directly to Client Components unless you explicitly expose it by marking it with \"use server\". Or maybe you meant to call this function rather than return it.
    [function fn]
     ^^^^^^^^^^^
  at createCachedFn (../app/server/page.tsx:6:2)
  at eval (../app/server/page.tsx:12:23)
  at <unknown> (rsc)/./app/server/page.tsx (../../../../../../tmp/next-install-9f5b1e661479fc30d064f5195aa155e164d985ea5162ac77d0201bc4be47c82a/.next/server/app/server/page.js:172:1)
  at Function.__webpack_require__ (../.next/server/webpack-runtime.js:33:42)
    4 |   }
    5 |
  > 6 |   return async () => {
      |  ^
    7 |     'use cache'
    8 |     return Math.random() + fn()
    9 |   }
   ⨯ Error: Functions cannot be passed directly to Client Components unless you explicitly expose it by marking it with \"use server\". Or maybe you meant to call this function rather than return it.
    [function fn]
     ^^^^^^^^^^^
  at createCachedFn (../app/server/page.tsx:6:2)
  at eval (../app/server/page.tsx:12:23)
  at <unknown> (rsc)/./app/server/page.tsx (../../../../../../tmp/next-install-9f5b1e661479fc30d064f5195aa155e164d985ea5162ac77d0201bc4be47c82a/.next/server/app/server/page.js:172:1)
  at Function.__webpack_require__ (../.next/server/webpack-runtime.js:33:42)
    4 |   }
    5 |
  > 6 |   return async () => {
      |  ^
    7 |     'use cache'
    8 |     return Math.random() + fn()
    9 |   } {
    digest: '1209631720'
  }
   GET /server 200 in 2326ms
  "
  at Object.toContain (e2e/app-dir/use-cache-close-over-function/use-cache-close-over-function.test.ts:108:25)

Read more about building and testing Next.js in contributing.md.

pnpm test-dev test/development/acceptance-app/ReactRefreshLogBox.test.ts

  • ReactRefreshLogBox app default > server component can recover from error thrown in the module
Expand output

● ReactRefreshLogBox app default › server component can recover from error thrown in the module

Expected Redbox but found no visible one.

  1079 |
  1080 |       await next.patchFile('index.js', "throw new Error('module error')")
> 1081 |       await session.assertHasRedbox()
       |       ^
  1082 |       await next.patchFile(
  1083 |         'index.js',
  1084 |         'export default function Page() {return <p>hello world</p>}'

  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:1081:7)

Read more about building and testing Next.js in contributing.md.

@ijjk
Copy link
Member

ijjk commented Feb 15, 2025

Stats from current PR

Default Build
General
vercel/next.js canary vercel/next.js sebbie/02-15-handle_more_known_protocols_in_stackframe_locations Change
buildDuration 29.4s 24.4s N/A
buildDurationCached 23.2s 18.8s N/A
nodeModulesSize 393 MB 393 MB N/A
nextStartRea..uration (ms) 794ms 791ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js sebbie/02-15-handle_more_known_protocols_in_stackframe_locations Change
5306-HASH.js gzip 55.2 kB 55.2 kB N/A
7048.HASH.js gzip 168 B 168 B
8377-HASH.js gzip 5.46 kB 5.46 kB N/A
bccd1874-HASH.js gzip 53 kB 53 kB
framework-HASH.js gzip 57.5 kB 57.5 kB N/A
main-app-HASH.js gzip 245 B 246 B N/A
main-HASH.js gzip 34.9 kB 34.9 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB
Overall change 54.9 kB 54.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js sebbie/02-15-handle_more_known_protocols_in_stackframe_locations Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages
vercel/next.js canary vercel/next.js sebbie/02-15-handle_more_known_protocols_in_stackframe_locations Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 193 B 192 B N/A
amp-HASH.js gzip 513 B 511 B N/A
css-HASH.js gzip 342 B 342 B
dynamic-HASH.js gzip 1.84 kB 1.84 kB N/A
edge-ssr-HASH.js gzip 265 B 264 B N/A
head-HASH.js gzip 363 B 360 B N/A
hooks-HASH.js gzip 393 B 390 B N/A
image-HASH.js gzip 4.59 kB 4.59 kB N/A
index-HASH.js gzip 268 B 266 B N/A
link-HASH.js gzip 2.35 kB 2.35 kB
routerDirect..HASH.js gzip 327 B 326 B N/A
script-HASH.js gzip 397 B 397 B
withRouter-HASH.js gzip 325 B 325 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 3.72 kB 3.72 kB
Client Build Manifests
vercel/next.js canary vercel/next.js sebbie/02-15-handle_more_known_protocols_in_stackframe_locations Change
_buildManifest.js gzip 749 B 747 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js sebbie/02-15-handle_more_known_protocols_in_stackframe_locations Change
index.html gzip 523 B 521 B N/A
link.html gzip 539 B 535 B N/A
withRouter.html gzip 520 B 517 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js sebbie/02-15-handle_more_known_protocols_in_stackframe_locations Change
edge-ssr.js gzip 130 kB 130 kB N/A
page.js gzip 211 kB 211 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js sebbie/02-15-handle_more_known_protocols_in_stackframe_locations Change
middleware-b..fest.js gzip 674 B 674 B
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 31.4 kB 31.4 kB N/A
edge-runtime..pack.js gzip 844 B 844 B
Overall change 1.52 kB 1.52 kB
Next Runtimes
vercel/next.js canary vercel/next.js sebbie/02-15-handle_more_known_protocols_in_stackframe_locations Change
app-page-exp...dev.js gzip 395 kB 395 kB N/A
app-page-exp..prod.js gzip 133 kB 133 kB
app-page-tur..prod.js gzip 145 kB 145 kB
app-page-tur..prod.js gzip 141 kB 141 kB
app-page.run...dev.js gzip 384 kB 384 kB N/A
app-page.run..prod.js gzip 129 kB 129 kB
app-route-ex...dev.js gzip 39.4 kB 39.4 kB
app-route-ex..prod.js gzip 25.7 kB 25.7 kB
app-route-tu..prod.js gzip 25.7 kB 25.7 kB
app-route-tu..prod.js gzip 25.5 kB 25.5 kB
app-route.ru...dev.js gzip 39.1 kB 39.1 kB
app-route.ru..prod.js gzip 25.5 kB 25.5 kB
dist_client_...dev.js gzip 356 B 356 B
dist_client_...dev.js gzip 349 B 349 B
pages-api-tu..prod.js gzip 9.72 kB 9.72 kB
pages-api.ru...dev.js gzip 11.8 kB 11.8 kB
pages-api.ru..prod.js gzip 9.72 kB 9.72 kB
pages-turbo...prod.js gzip 22 kB 22 kB
pages.runtim...dev.js gzip 31.6 kB 31.6 kB
pages.runtim..prod.js gzip 22 kB 22 kB
server.runti..prod.js gzip 61.2 kB 61.2 kB
Overall change 898 kB 898 kB
build cache
vercel/next.js canary vercel/next.js sebbie/02-15-handle_more_known_protocols_in_stackframe_locations Change
0.pack gzip 2.12 MB 2.12 MB N/A
index.pack gzip 76.9 kB 76.6 kB N/A
Overall change 0 B 0 B
Diff details
Diff for main-HASH.js

Diff too large to display

Diff for app-page-exp..ntime.dev.js

Diff too large to display

Diff for app-page.runtime.dev.js

Diff too large to display

Commit: c1e35fc

@eps1lon eps1lon force-pushed the sebbie/02-15-_dev-overlay_stop_hiding_rsc_protocol branch 2 times, most recently from b8f4b3d to 0ec9937 Compare February 15, 2025 21:38
Adds support for `turbopack:`, `rsc:`, and `webpack-internal:`.

It should really just parse any valid URL scheme.
Riskier and harder to implement for Gecko though so
restricting this fix to known cases for now.
@eps1lon eps1lon force-pushed the sebbie/02-15-handle_more_known_protocols_in_stackframe_locations branch from 87f3d0c to c1e35fc Compare February 15, 2025 21:39
@eps1lon eps1lon deleted the branch sebbie/02-15-_dev-overlay_stop_hiding_rsc_protocol February 15, 2025 22:18
@eps1lon eps1lon closed this Feb 15, 2025
@github-actions github-actions bot added the locked label Mar 2, 2025
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 2, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants