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

Use TypeScript to check if a default case is required in switch #75854

Conversation

eps1lon
Copy link
Member

@eps1lon eps1lon commented Feb 10, 2025

Follow-up to https://github.com/vercel/next.js/pull/75839/files#r1948806062. TypeScript as switch exhaustiveness checks built in.

@ijjk ijjk added created-by: Next.js team PRs by the Next.js team. type: next labels Feb 10, 2025
Copy link
Member Author

eps1lon commented Feb 10, 2025

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

@@ -21,17 +21,13 @@ export type SupportedErrorEvent = {

function getErrorSignature(ev: SupportedErrorEvent): string {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once the switch is not exhaustive, TypeScript will error here because that would change the return type to string | void.

@ijjk
Copy link
Member

ijjk commented Feb 10, 2025

Failing test suites

Commit: 0eb587a

pnpm test test/integration/amp-export-validation/test/index.test.js (turbopack)

  • AMP Validation on Export > production mode > should have shown errors during build
Expand output

● AMP Validation on Export › production mode › should have shown errors during build

expect(received).toMatch(expected)

Expected pattern: /error.*The mandatory attribute 'height' is missing in tag 'amp-video'\./
Received string:  "   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amp-export-validation/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amp-export-validation/next.config.js
   ▲ Next.js 15.2.0-canary.48 (Turbopack)·
   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amp-export-validation/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amp-export-validation/next.config.js
   Building (0/7) ...
   Building (1/7)··
   Building (3/7)··
   Building (5/7)··
 ✓ Building (7/7)
 ✓ Compiled successfully in 2.3s
   Collecting page data ...
   Generating static pages (0/8) ...
   Generating static pages (2/8)··
 ⚠ Linting is disabled.
Error occurred prerendering page \"/cat\". Read more: https://nextjs.org/docs/messages/prerender-error
AssertionError: Assertion failed: WebAssembly is uninitialized

  at new module$contents$goog$asserts_AssertionError (../evalmachine.<anonymous>:106:1695)
  at module$contents$goog$asserts_doAssertFailure (../evalmachine.<anonymous>:107:354)
  at goog.asserts.assertExists (../evalmachine.<anonymous>:109:142)
  at Object.module$contents$amp$validator_validateString [as validateString] (../evalmachine.<anonymous>:2663:108)
  at Validator.validateString (../packages/next/dist/compiled/amphtml-validator/index.js:1:20650)
  at validateAmp (../packages/next/dist/export/routes/pages.js:87:34)
  at async exportPagesPage (../packages/next/dist/export/routes/pages.js:104:13)
  at async Span.traceAsyncFn (../packages/next/dist/trace/trace.js:156:20)
  at async exportPage (../packages/next/dist/export/worker.js:358:18)
  Export encountered an error on /cat, exiting the build.
   ⨯ Next.js build worker exited with code: 1 and signal: null
  "
  at Object.toMatch (integration/amp-export-validation/test/index.test.js:28:29)

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

@ijjk
Copy link
Member

ijjk commented Feb 10, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js sebbie/02-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ Change
buildDuration 20.1s 17s N/A
buildDurationCached 16.1s 13.6s N/A
nodeModulesSize 393 MB 393 MB N/A
nextStartRea..uration (ms) 425ms 445ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js sebbie/02-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ Change
5306-HASH.js gzip 54.3 kB 54.3 kB N/A
8276.HASH.js gzip 169 B 168 B N/A
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 246 B 245 B N/A
main-HASH.js gzip 34.6 kB 34.5 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB N/A
Overall change 53 kB 53 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js sebbie/02-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ 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-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ 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.59 kB 4.58 kB N/A
index-HASH.js gzip 268 B 268 B
link-HASH.js gzip 2.35 kB 2.35 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/02-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ Change
_buildManifest.js gzip 748 B 747 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js sebbie/02-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ Change
index.html gzip 523 B 524 B N/A
link.html gzip 538 B 538 B
withRouter.html gzip 519 B 521 B N/A
Overall change 538 B 538 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js sebbie/02-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ 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-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ Change
middleware-b..fest.js gzip 676 B 672 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 31.3 kB 31.3 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/02-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ Change
app-page-exp...dev.js gzip 394 kB 394 kB N/A
app-page-exp..prod.js gzip 132 kB 132 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 381 kB 381 kB N/A
app-page.run..prod.js gzip 129 kB 129 kB
app-route-ex...dev.js gzip 39.3 kB 39.3 kB
app-route-ex..prod.js gzip 25.6 kB 25.6 kB
app-route-tu..prod.js gzip 25.6 kB 25.6 kB
app-route-tu..prod.js gzip 25.4 kB 25.4 kB
app-route.ru...dev.js gzip 40.9 kB 40.9 kB
app-route.ru..prod.js gzip 25.4 kB 25.4 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.69 kB 9.69 kB
pages-api.ru...dev.js gzip 11.8 kB 11.8 kB
pages-api.ru..prod.js gzip 9.68 kB 9.68 kB
pages-turbo...prod.js gzip 21.9 kB 21.9 kB
pages.runtim...dev.js gzip 31.5 kB 31.5 kB
pages.runtim..prod.js gzip 21.9 kB 21.9 kB
server.runti..prod.js gzip 60.7 kB 60.7 kB
Overall change 897 kB 897 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js sebbie/02-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ Change
0.pack gzip 2.11 MB 2.11 MB N/A
index.pack gzip 76.3 kB 76.4 kB ⚠️ +129 B
Overall change 76.3 kB 76.4 kB ⚠️ +129 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: 0eb587a

@eps1lon eps1lon marked this pull request as ready for review February 10, 2025 11:34
@eps1lon eps1lon enabled auto-merge (squash) February 10, 2025 11:37
@eps1lon eps1lon merged commit 8efcdbe into canary Feb 10, 2025
131 checks passed
@eps1lon eps1lon deleted the sebbie/02-10-use_typescript_to_check_if_a_default_case_is_required_in_switch_ branch February 10, 2025 11:40
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 24, 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.

3 participants