Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Current behavior for module evaluation sourcemapping #73737

Draft
wants to merge 2 commits into
base: sebbie/12-06-add_todisplayredbox_snapshot_matcher
Choose a base branch
from

Conversation

eps1lon
Copy link
Member

@eps1lon eps1lon commented Dec 10, 2024

No description provided.

…snapshot matchers

These are meant to replace `assertHasRedbox` over time.
We want that every redbox insertion in the future asserts on the full error (message, stack, codeframe) in both browser
and terminal.

We'll slowly expand usage of these matchers until all use cases are covered at which point the old, granular helpers are removed.

The end goal is full confidence in our error display without sacrificing DX for people focused on the error message itself.

The downside of inline snapshot matcher that we can't have fine-grained TODO comments.
But that's only a concern for the few working on working on the error display infra.
The goal here is to encourage using these helpers so the priorities of the few working on error infra is lowest.

The most annoying fact is the need for forking assertions between Turbopack and Webpack.
All the more reason for us to fix the off-by-one column issues between Turbopack and Webpack.
Copy link
Member Author

eps1lon commented Dec 10, 2024

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 Dec 10, 2024

Failing test suites

Commit: 40adafa

pnpm test test/unit/web-runtime/next-request.test.ts

Expand output

● Test suite failed to run

EvalError: Code generation from strings disallowed for this context

  at Function.wrapfunction [as function] (../node_modules/.pnpm/depd@1.1.2/node_modules/depd/index.js:413:42)
  at Object.<anonymous> (../node_modules/.pnpm/body-parser@1.19.0/node_modules/body-parser/index.js:37:46)
  at Object.<anonymous> (../node_modules/.pnpm/express@4.17.0/node_modules/express/lib/express.js:15:18)

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

pnpm test-dev-turbo test/development/app-dir/dynamic-io-dev-errors/dynamic-io-dev-errors.test.ts (turbopack)

  • Dynamic IO Dev Errors > should show a red box error on the SSR render
Expand output

● Dynamic IO Dev Errors › should show a red box error on the SSR render

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Dynamic IO Dev Errors should show a red box error on the SSR render 1`

- Snapshot  - 1
+ Received  + 2

@@ -6,7 +6,8 @@
  > 2 |   const random = Math.random()
      |                       ^
    3 |   return <div id="another-random">{random}</div>
    4 | }
    5 |",
-   "stack": "<empty>",
+   "stack": "JSON.parse
+ <anonymous> (0:0)",
  }

  24 |
  25 |     if (isTurbopack) {
> 26 |       await expect(browser).toDisplayCollapsedRedbox(`
     |                             ^
  27 |        {
  28 |          "description": "[ Server ] Error: Route "/error" used \`Math.random()\` outside of \`"use cache"\` and without explicitly calling \`await connection()\` beforehand. See more info here: https://nextjs.org/docs/messages/next-prerender-random",
  29 |          "source": "app/error/page.tsx (2:23) @ Page

  at Object.toDisplayCollapsedRedbox (development/app-dir/dynamic-io-dev-errors/dynamic-io-dev-errors.test.ts:26:29)

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

pnpm test-dev test/e2e/app-dir/server-source-maps/server-source-maps.test.ts

  • app-dir - server source maps > sourcemaps errors during module evaluation
Expand output

● app-dir - server source maps › sourcemaps errors during module evaluation

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

Expected substring: "
 ⨯ Error: Boom

  at [project]/app/module-evaluation/module.js [app-rsc] (ecmascript) (../app/module-evaluation/module.js:1:6)
  at [project]/app/module-evaluation/page.js [app-rsc] (ecmascript) (../app/module-evaluation/page.js:1:0)
       at [project]/app/module-evaluation/page.js [app-rsc] (ecmascript, Next.js server component) (.next··········
      "
  Received string:    " GET /rsc-error-log-custom-name 200 in 124ms
   ⚠ Fast Refresh had to perform a full reload due to a runtime error.
   ✓ Compiled /module-evaluation in 92ms (598 modules)
   ⨯ Error: Boom
  at eval (../app/module-evaluation/module.js:1:6)
  at (rsc)/./app/module-evaluation/module.js (../.next/server/app/module-evaluation/page.js:149:1)
  at __webpack_require__ (../.next/server/webpack-runtime.js:33:42)
  at eval (webpack-internal:///(rsc)../../../../../../app/module-evaluation/page.js:2:65)
  at (rsc)/./app/module-evaluation/page.js (../.next/server/app/module-evaluation/page.js:160:1)
  at Function.__webpack_require__ (../.next/server/webpack-runtime.js:33:42)
  > 1 | throw new Error('Boom')
      |      ^
    2 | {
    page: '/module-evaluation'
  }
   ○ Compiling /_error ...
   ✓ Compiled /_error in 725ms (839 modules)
   GET /module-evaluation 500 in 1304ms
  "
  at Object.toContain (e2e/app-dir/server-source-maps/server-source-maps.test.ts:277:27)

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

pnpm test test/integration/build-warnings/test/index.test.js (turbopack)

  • Build warnings > production mode > should warn about missing cache in CI
Expand output

● Build warnings › production mode › should warn about missing cache in CI

thrown: "Exceeded timeout of 60000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  84 |       })
  85 |
> 86 |       it('should warn about missing cache in CI', async () => {
     |       ^
  87 |         await remove(join(appDir, '.next'))
  88 |
  89 |         let { stdout } = await nextBuild(appDir, undefined, {

  at it (integration/build-warnings/test/index.test.js:86:7)
  at integration/build-warnings/test/index.test.js:10:56
  at Object.describe (integration/build-warnings/test/index.test.js:9:1)

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

pnpm test-dev test/development/acceptance-app/hydration-error.test.ts

  • Error overlay for hydration errors in App router > should collapse and uncollapse properly when there are many frames
Expand output

● Error overlay for hydration errors in App router › should collapse and uncollapse properly when there are many frames

expect(received).toBe(expected) // Object.is equality

Expected: 4
Received: NaN

  788 |
  789 |     retry(async () => {
> 790 |       expect(await getRedboxTotalErrorCount(browser)).toBe(4)
      |                                                       ^
  791 |     })
  792 |
  793 |     const description = await session.getRedboxDescription()

  at toBe (development/acceptance-app/hydration-error.test.ts:790:55)
  at retry (lib/next-test-utils.ts:806:14)

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

@eps1lon eps1lon force-pushed the sebbie/12-06-add_todisplayredbox_snapshot_matcher branch from f5a13f4 to ddc4812 Compare December 10, 2024 12:56
@ijjk
Copy link
Member

ijjk commented Dec 10, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js sebbie/12-10-current_behavior_for_module_evaluation_sourcemapping Change
buildDuration 24.3s 18.5s N/A
buildDurationCached 17.8s 15.7s N/A
nodeModulesSize 409 MB 409 MB N/A
nextStartRea..uration (ms) 485ms 480ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js sebbie/12-10-current_behavior_for_module_evaluation_sourcemapping Change
1187-HASH.js gzip 50.2 kB 50.2 kB N/A
8276.HASH.js gzip 169 B 168 B N/A
8377-HASH.js gzip 5.3 kB 5.3 kB N/A
bccd1874-HASH.js gzip 53 kB 53 kB N/A
framework-HASH.js gzip 57.5 kB 57.5 kB N/A
main-app-HASH.js gzip 232 B 235 B N/A
main-HASH.js gzip 33.8 kB 33.7 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB N/A
Overall change 0 B 0 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js sebbie/12-10-current_behavior_for_module_evaluation_sourcemapping 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/12-10-current_behavior_for_module_evaluation_sourcemapping Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 193 B 193 B
amp-HASH.js gzip 512 B 510 B N/A
css-HASH.js gzip 343 B 342 B N/A
dynamic-HASH.js gzip 1.84 kB 1.84 kB
edge-ssr-HASH.js gzip 265 B 265 B
head-HASH.js gzip 363 B 362 B N/A
hooks-HASH.js gzip 393 B 392 B N/A
image-HASH.js gzip 4.44 kB 4.43 kB N/A
index-HASH.js gzip 268 B 268 B
link-HASH.js gzip 2.35 kB 2.34 kB N/A
routerDirect..HASH.js gzip 328 B 328 B
script-HASH.js gzip 397 B 397 B
withRouter-HASH.js gzip 323 B 326 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 3.59 kB 3.59 kB
Client Build Manifests
vercel/next.js canary vercel/next.js sebbie/12-10-current_behavior_for_module_evaluation_sourcemapping Change
_buildManifest.js gzip 747 B 745 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js sebbie/12-10-current_behavior_for_module_evaluation_sourcemapping Change
index.html gzip 524 B 523 B N/A
link.html gzip 538 B 538 B
withRouter.html gzip 520 B 520 B
Overall change 1.06 kB 1.06 kB
Edge SSR bundle Size
vercel/next.js canary vercel/next.js sebbie/12-10-current_behavior_for_module_evaluation_sourcemapping Change
edge-ssr.js gzip 128 kB 128 kB N/A
page.js gzip 203 kB 203 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js sebbie/12-10-current_behavior_for_module_evaluation_sourcemapping Change
middleware-b..fest.js gzip 671 B 668 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 31 kB 31 kB N/A
edge-runtime..pack.js gzip 844 B 844 B
Overall change 844 B 844 B
Next Runtimes
vercel/next.js canary vercel/next.js sebbie/12-10-current_behavior_for_module_evaluation_sourcemapping Change
523-experime...dev.js gzip 322 B 322 B
523.runtime.dev.js gzip 314 B 314 B
app-page-exp...dev.js gzip 322 kB 322 kB
app-page-exp..prod.js gzip 127 kB 127 kB
app-page-tur..prod.js gzip 140 kB 140 kB
app-page-tur..prod.js gzip 135 kB 135 kB
app-page.run...dev.js gzip 312 kB 312 kB
app-page.run..prod.js gzip 122 kB 122 kB
app-route-ex...dev.js gzip 37.1 kB 37.1 kB
app-route-ex..prod.js gzip 25.1 kB 25.1 kB
app-route-tu..prod.js gzip 25.1 kB 25.1 kB
app-route-tu..prod.js gzip 24.9 kB 24.9 kB
app-route.ru...dev.js gzip 38.7 kB 38.7 kB
app-route.ru..prod.js gzip 24.9 kB 24.9 kB
pages-api-tu..prod.js gzip 9.56 kB 9.56 kB
pages-api.ru...dev.js gzip 11.4 kB 11.4 kB
pages-api.ru..prod.js gzip 9.56 kB 9.56 kB
pages-turbo...prod.js gzip 21.3 kB 21.3 kB
pages.runtim...dev.js gzip 27 kB 27 kB
pages.runtim..prod.js gzip 21.3 kB 21.3 kB
server.runti..prod.js gzip 916 kB 916 kB
Overall change 2.35 MB 2.35 MB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js sebbie/12-10-current_behavior_for_module_evaluation_sourcemapping Change
0.pack gzip 2.04 MB 2.04 MB ⚠️ +1.69 kB
index.pack gzip 146 kB 145 kB N/A
Overall change 2.04 MB 2.04 MB ⚠️ +1.69 kB
Diff details
Diff for main-HASH.js

Diff too large to display

Commit: 40adafa

@eps1lon eps1lon force-pushed the sebbie/12-06-add_todisplayredbox_snapshot_matcher branch 3 times, most recently from d664235 to c6d143c Compare December 10, 2024 22:50
@eps1lon eps1lon force-pushed the sebbie/12-06-add_todisplayredbox_snapshot_matcher branch from c6d143c to 7b303e2 Compare December 10, 2024 22:59
@eps1lon eps1lon force-pushed the sebbie/12-06-add_todisplayredbox_snapshot_matcher branch 2 times, most recently from e279a4a to e4f60ca Compare December 17, 2024 19:40
@eps1lon eps1lon force-pushed the sebbie/12-06-add_todisplayredbox_snapshot_matcher branch from e4f60ca to 6ae63a3 Compare December 18, 2024 13:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
created-by: Next.js team PRs by the Next.js team. tests
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants