Skip to content

Turbopack: compute exports without full analysis#92823

Merged
mischnic merged 2 commits into
canaryfrom
mischnic/get-exports-without-analyze
Apr 28, 2026
Merged

Turbopack: compute exports without full analysis#92823
mischnic merged 2 commits into
canaryfrom
mischnic/get-exports-without-analyze

Conversation

@mischnic
Copy link
Copy Markdown
Member

@mischnic mischnic commented Apr 15, 2026

We don't actually need the full analysis to compute exports. This can break some task cycles, and might theoretically improve task latency.

The CPU time appears to be marginally higher (but not statistically significant), but no impact on overall build time:

* c4fdcc2651 - (14 hours ago) compute exports before final_read_hint() - Niklas Mischkulnig (origin/mischnic/get-exports-without-analyze, mischnic/get-exports-without-analyze)

pnpm next build --experimental-build-mode=compile  378.10s user 58.28s system 760% cpu 57.411 total
pnpm next build --experimental-build-mode=compile  383.64s user 60.32s system 738% cpu 1:00.10 total
pnpm next build --experimental-build-mode=compile  378.70s user 55.65s system 718% cpu 1:00.41 total

* 8ddc1cdbdd - (38 minutes ago) Use OIDC for CodSpeed (#93059) - Niklas Mischkulnig (origin/canary, origin/HEAD, canary)

pnpm next build --experimental-build-mode=compile  376.95s user 58.30s system 755% cpu 57.597 total
pnpm next build --experimental-build-mode=compile  375.85s user 61.75s system 738% cpu 59.230 total
pnpm next build --experimental-build-mode=compile  377.75s user 63.00s system 729% cpu 1:00.39 total

@nextjs-bot nextjs-bot added created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js. labels Apr 15, 2026
@mischnic mischnic changed the title compute_ecmascript_module_exports Turbopack: compute exports without full analysis Apr 15, 2026
Copy link
Copy Markdown
Member Author

mischnic commented Apr 15, 2026

@nextjs-bot
Copy link
Copy Markdown
Contributor

nextjs-bot commented Apr 15, 2026

Failing test suites

Commit: c56a330 | About building and testing Next.js

pnpm test-dev-turbo test/e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts (turbopack) (job)

  • instant-navigation-testing-api > reload followed by MPA navigation, both block dynamic data (DD)
  • instant-navigation-testing-api > successive MPA navigations within instant scope (DD)
  • instant-navigation-testing-api > does not leak runtime data from hover prefetch into instant shell (DD)
  • instant-navigation-testing-api > subsequent navigations after instant scope are not locked (DD)
  • instant-navigation-testing-api > throws descriptive error on fresh page without baseURL (DD)
  • instant-navigation-testing-api > sets cookie before first navigation when using baseURL (DD)
  • instant-navigation-testing-api > clears cookie after instant scope exits (DD)
  • instant-navigation-testing-api > clears cookie even when callback throws (DD)
  • instant-navigation-testing-api - root params > includes root param in instant shell (DD)
  • instant-navigation-testing-api > runtime params are excluded from instant shell > does not include cookie values in instant shell during client navigation (DD)
  • instant-navigation-testing-api > runtime params are excluded from instant shell > does not include dynamic param values in instant shell during client navigation (DD)
  • instant-navigation-testing-api > runtime params are excluded from instant shell > does not include search param values in instant shell during client navigation (DD)
  • instant-navigation-testing-api > runtime params are excluded from instant shell > does not include cookie values in instant shell during page load (DD)
  • instant-navigation-testing-api > runtime params are excluded from instant shell > does not include dynamic param values in instant shell during page load (DD)
  • instant-navigation-testing-api > runtime params are excluded from instant shell > does not include search param values in instant shell during page load (DD)
  • instant-navigation-testing-api > statically generated params are included in instant shell > includes statically generated param values in instant shell during client navigation (DD)
  • instant-navigation-testing-api > statically generated params are included in instant shell > includes statically generated param values in instant shell during page load (DD)
Expand output

● instant-navigation-testing-api › reload followed by MPA navigation, both block dynamic data

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:229:5)

● instant-navigation-testing-api › successive MPA navigations within instant scope

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:260:5)

● instant-navigation-testing-api › runtime params are excluded from instant shell › does not include cookie values in instant shell during client navigation

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:313:7)

● instant-navigation-testing-api › runtime params are excluded from instant shell › does not include dynamic param values in instant shell during client navigation

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:338:7)

● instant-navigation-testing-api › runtime params are excluded from instant shell › does not include search param values in instant shell during client navigation

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:363:7)

● instant-navigation-testing-api › runtime params are excluded from instant shell › does not include cookie values in instant shell during page load

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:394:7)

● instant-navigation-testing-api › runtime params are excluded from instant shell › does not include dynamic param values in instant shell during page load

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:419:7)

● instant-navigation-testing-api › runtime params are excluded from instant shell › does not include search param values in instant shell during page load

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:444:7)

● instant-navigation-testing-api › statically generated params are included in instant shell › includes statically generated param values in instant shell during client navigation

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:475:7)

● instant-navigation-testing-api › statically generated params are included in instant shell › includes statically generated param values in instant shell during page load

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:496:7)

● instant-navigation-testing-api › does not leak runtime data from hover prefetch into instant shell

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:529:5)

● instant-navigation-testing-api › subsequent navigations after instant scope are not locked

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:556:5)

● instant-navigation-testing-api › throws descriptive error on fresh page without baseURL

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

Expected substring: not "at instant "
Received string:        "    at instant (/root/actions-runner/_work/next.js/next.js/packages/next-playwright/dist/index.js:32:15)"

  631 |         .find((line) => line.trimStart().startsWith('at '))
  632 |       expect(firstFrame).not.toContain('resolveURL')
> 633 |       expect(firstFrame).not.toContain('at instant ')
      |                              ^
  634 |     } finally {
  635 |       await freshPage.close()
  636 |     }

  at Object.toContain (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:633:30)

● instant-navigation-testing-api › throws descriptive error on fresh page without baseURL

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `instant-navigation-testing-api throws descriptive error on fresh page without baseURL 1`

- Snapshot  - 29
+ Received  +  1

- Could not infer the base URL of the application.
-
- instant() needs to know the base URL so it can configure the
- browser before the first page load. If the page is already
- loaded, the base URL is detected automatically.
- Otherwise, you can fix this in one of two ways:
-
- 1. Pass a baseURL option:
-
-   await instant(page, async () => {
-     await page.goto('http://localhost:3000')
-     // ...
-   }, { baseURL: 'http://localhost:3000' })
-
-   Tip: If you use baseURL in your Playwright config, you can
-   get it from the test fixture:
-
-     test('my test', async ({ page, baseURL }) => {
-       await instant(page, async () => {
-         // ...
-       }, { baseURL })
-     })
-
- 2. Navigate to a page before calling instant():
-
-   await page.goto('http://localhost:3000')
-   await instant(page, async () => {
-     // ...
-   })
+ An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  593 |       }
  594 |       // Snapshot the error message
> 595 |       expect(caughtError!.message).toMatchInlineSnapshot(`
      |                                    ^
  596 |         "Could not infer the base URL of the application.
  597 |
  598 |         instant() needs to know the base URL so it can configure the

  at Object.toMatchInlineSnapshot (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:595:36)

● instant-navigation-testing-api › sets cookie before first navigation when using baseURL

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:643:7)

● instant-navigation-testing-api › clears cookie after instant scope exits

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:685:5)

● instant-navigation-testing-api › clears cookie even when callback throws

expect(received).rejects.toThrow(expected)

Expected substring: "test error"
Received message:   "An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?"

      30 |     const existingCookies = await page.context().cookies();
      31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
    > 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
         |               ^
      33 |             'calls is not supported. Did you forget to await the ' +
      34 |             'previous instant() call?');
      35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:702:5)
  at Object.toThrow (../node_modules/.pnpm/expect@29.7.0/node_modules/expect/build/index.js:218:22)
  at Object.toThrow (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:706:15)

● instant-navigation-testing-api - root params › includes root param in instant shell

An instant() scope is already active. Nesting instant() calls is not supported. Did you forget to await the previous instant() call?

  30 |     const existingCookies = await page.context().cookies();
  31 |     if (existingCookies.some((c) => c.name === INSTANT_COOKIE)) {
> 32 |         throw new Error('An instant() scope is already active. Nesting instant() ' +
     |               ^
  33 |             'calls is not supported. Did you forget to await the ' +
  34 |             'previous instant() call?');
  35 |     }

  at instant (../packages/next-playwright/dist/index.js:32:15)
  at Object.<anonymous> (e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts:730:5)

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Apr 15, 2026

Merging this PR will degrade performance by 3.91%

⚡ 1 improved benchmark
❌ 1 regressed benchmark
✅ 15 untouched benchmarks
⏩ 3 skipped benchmarks1

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation build[date-fns-single] 1.1 s 1.1 s +3.05%
Simulation app-page-turbo.runtime.prod.js[full] 616.9 ms 642 ms -3.91%

Comparing mischnic/get-exports-without-analyze (c4fdcc2) with mischnic/move-import-usage-into-evalcontext (5b1f1c2)

Open in CodSpeed

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@nextjs-bot
Copy link
Copy Markdown
Contributor

nextjs-bot commented Apr 15, 2026

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 455ms 455ms ▁▁██▁
Cold (Ready in log) 440ms 440ms ▇▃▃▂▅
Cold (First Request) 825ms 825ms ▁███▁
Warm (Listen) 456ms 456ms █▅▅█▅
Warm (Ready in log) 438ms 439ms ▃▅▇▅▁
Warm (First Request) 338ms 336ms ▃▅▆▁▁
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 456ms 455ms █▁█▁█
Cold (Ready in log) 441ms 442ms ▂▃▃▇█
Cold (First Request) 1.953s 1.946s ▆▆▅▇▇
Warm (Listen) 456ms 456ms ▅▅██▅
Warm (Ready in log) 440ms 441ms ▁▂▂▇▇
Warm (First Request) 1.946s 1.960s ▇█▇██

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 3.967s 3.963s █▃▁▂▇
Cached Build 4.008s 3.989s █▁▃▂▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.660s 14.608s ▂▁▄▇▇
Cached Build 14.784s 14.767s ▃▂▄▇█
node_modules Size 493 MB 493 MB █████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
053b9v5j96uu_.js gzip 8.56 kB N/A -
07rxhp_1_g4mu.js gzip 13.1 kB N/A -
096aa2uod0_wa.js gzip 9.82 kB N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0ea8vo2o6kp_s.js gzip 13.3 kB N/A -
0egovw6-5i1e3.js gzip 8.57 kB N/A -
0fli3_wppnim5.js gzip 12.9 kB N/A -
0gkovryjv05n3.js gzip 154 B N/A -
0ho78l23ixdy7.js gzip 155 B N/A -
0jrg8yoqn4b8e.js gzip 155 B N/A -
0k09jwjeb-tki.js gzip 13.8 kB N/A -
0kb7_ep3r1z0_.js gzip 10.1 kB N/A -
0kmgih16pb2zy.js gzip 9.24 kB N/A -
0lbv96yr1uj-x.js gzip 168 B N/A -
0wxpyd8r-vipl.js gzip 1.47 kB N/A -
1-z_xm7pzpbeh.js gzip 49.2 kB N/A -
11qa6mv6j4f0n.js gzip 160 B N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
16vepdkipri3r.js gzip 8.51 kB N/A -
17n96uu6y1pxq.js gzip 8.6 kB N/A -
1d9ms1y2nit5w.js gzip 65.5 kB N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1odlz7_bqi4gv.js gzip 160 B N/A -
1s-lssnhdqk31.js gzip 156 B N/A -
1xz7fhgdco-x_.js gzip 8.59 kB N/A -
2__-e_ym8n788.js gzip 450 B N/A -
22o6xd9_ywdu6.js gzip 233 B N/A -
2avcdi72oetam.js gzip 156 B N/A -
2h9_xc-4i5_oy.js gzip 152 B N/A -
2k1q_gre6hp0-.js gzip 8.56 kB N/A -
2kvj8yrfznmwx.js gzip 5.69 kB N/A -
2sgqisp4604si.js gzip 8.51 kB N/A -
2u7io78pjtekk.js gzip 156 B N/A -
3_lh2q04233ur.js gzip 70.8 kB N/A -
342ijzvrpe53h.js gzip 2.29 kB N/A -
3p575fh88tejl.js gzip 155 B N/A -
3v9s-fz24f8oo.js gzip 10.4 kB N/A -
3zdh_rd16s0i8.js gzip 157 B N/A -
420pn_b9x-3ir.js gzip 8.62 kB N/A -
43l229j-6khv5.js gzip 156 B N/A -
44un3--wmqiyh.js gzip 7.61 kB N/A -
turbopack-0x..2c1o.js gzip 4.19 kB N/A -
turbopack-0y..rjc9.js gzip 4.2 kB N/A -
turbopack-1k..rbj5.js gzip 4.19 kB N/A -
turbopack-1q.._m7g.js gzip 4.19 kB N/A -
turbopack-2-..4mlc.js gzip 4.17 kB N/A -
turbopack-22..h7oj.js gzip 4.19 kB N/A -
turbopack-25..lf2b.js gzip 4.19 kB N/A -
turbopack-2b..nby5.js gzip 4.19 kB N/A -
turbopack-2m..wm_6.js gzip 4.19 kB N/A -
turbopack-2n.._pfr.js gzip 4.19 kB N/A -
turbopack-3b..ydgx.js gzip 4.19 kB N/A -
turbopack-3e..0ajm.js gzip 4.19 kB N/A -
turbopack-3l..dvr5.js gzip 4.19 kB N/A -
turbopack-3m..qy5_.js gzip 4.19 kB N/A -
03_szppy5nakp.js gzip N/A 49.2 kB -
0arkbdqpxc37i.js gzip N/A 8.6 kB -
0iuamvde1mkye.js gzip N/A 166 B -
0mz-rbiau93_g.js gzip N/A 161 B -
0tvekitj587fh.js gzip N/A 8.51 kB -
0vcsfpshdbpoi.js gzip N/A 157 B -
0z83a1om5rvtt.js gzip N/A 7.61 kB -
1-jqyfc89tixo.js gzip N/A 1.46 kB -
14t1kneseb8th.js gzip N/A 2.3 kB -
16bh0aqv641xv.js gzip N/A 157 B -
192q2suy7rwb_.js gzip N/A 8.56 kB -
1ab2xruymo-oj.js gzip N/A 449 B -
1im7xphq6dxob.js gzip N/A 159 B -
1ng_99sotnhzq.js gzip N/A 159 B -
1qui_nsqw5190.js gzip N/A 157 B -
1wzrm0xjjbzn5.js gzip N/A 10.1 kB -
25a1yz7zua29z.js gzip N/A 13.8 kB -
2f2bp_kexa37v.js gzip N/A 13.3 kB -
2fpb7l1pbce6e.js gzip N/A 65.5 kB -
2i5v1taq97gql.js gzip N/A 8.59 kB -
2jrvadyrjp0yr.js gzip N/A 155 B -
2n3vh0w0tnb_2.js gzip N/A 8.52 kB -
2u_rpxq3tzytl.js gzip N/A 233 B -
2wfbykz1avdns.js gzip N/A 8.56 kB -
32sifemopndov.js gzip N/A 10.4 kB -
368lim5wq0o0r.js gzip N/A 12.9 kB -
37ba9t8u6k_9f.js gzip N/A 156 B -
3aouhp_o4j3ta.js gzip N/A 151 B -
3de283pazbu99.js gzip N/A 9.81 kB -
3drqjohogojbw.js gzip N/A 5.69 kB -
3g8l1m2-o-ewi.js gzip N/A 13.1 kB -
3gp2o_v7jcw6s.js gzip N/A 8.57 kB -
3kab57ds4zwc9.js gzip N/A 157 B -
3qu7g1q2l_x2n.js gzip N/A 9.24 kB -
3vucw_kkxf-6j.js gzip N/A 155 B -
3zycucbo0ee-y.js gzip N/A 70.8 kB -
41p1znhcs5rk8.js gzip N/A 155 B -
43j6fjudq0a3_.js gzip N/A 8.62 kB -
turbopack-02..ejcf.js gzip N/A 4.19 kB -
turbopack-04..36zk.js gzip N/A 4.19 kB -
turbopack-05..ed1i.js gzip N/A 4.19 kB -
turbopack-08..ymqg.js gzip N/A 4.19 kB -
turbopack-1e..75yv.js gzip N/A 4.17 kB -
turbopack-1e..lwrg.js gzip N/A 4.19 kB -
turbopack-1s..5095.js gzip N/A 4.19 kB -
turbopack-1w..leed.js gzip N/A 4.19 kB -
turbopack-1x..h7hw.js gzip N/A 4.19 kB -
turbopack-29..nv35.js gzip N/A 4.19 kB -
turbopack-2d..42om.js gzip N/A 4.2 kB -
turbopack-3f..ewzo.js gzip N/A 4.19 kB -
turbopack-3m..3yye.js gzip N/A 4.19 kB -
turbopack-3z..lv_i.js gzip N/A 4.19 kB -
Total 465 kB 465 kB ⚠️ +39 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 715 B 718 B
Total 715 B 718 B ⚠️ +3 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 434 B 429 B 🟢 5 B (-1%)
Total 434 B 429 B ✅ -5 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2637-HASH.js gzip 4.63 kB N/A -
7724.HASH.js gzip 169 B N/A -
8274-HASH.js gzip 61.3 kB N/A -
8817-HASH.js gzip 5.59 kB N/A -
c3500254-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 255 B 254 B
main-HASH.js gzip 39.4 kB 39.4 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
5887-HASH.js gzip N/A 5.61 kB -
6522-HASH.js gzip N/A 60.7 kB -
6779-HASH.js gzip N/A 4.63 kB -
8854.HASH.js gzip N/A 169 B -
eab920f9-HASH.js gzip N/A 62.8 kB -
Total 235 kB 235 kB ✅ -621 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 333 B 334 B
dynamic-HASH.js gzip 1.81 kB 1.8 kB
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 353 B 349 B 🟢 4 B (-1%)
hooks-HASH.js gzip 384 B 382 B
image-HASH.js gzip 581 B 581 B
index-HASH.js gzip 260 B 259 B
link-HASH.js gzip 2.51 kB 2.51 kB
routerDirect..HASH.js gzip 316 B 318 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 313 B 314 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.97 kB ✅ -10 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 125 kB
page.js gzip 273 kB 273 kB
Total 399 kB 398 kB ✅ -1 kB
Middleware
Canary PR Change
middleware-b..fest.js gzip 618 B 618 B
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 44.3 kB 44.3 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 46 kB 45.9 kB ✅ -90 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 721 B 720 B
Total 721 B 720 B ✅ -1 B
Build Cache
Canary PR Change
0.pack gzip 4.38 MB 4.38 MB
index.pack gzip 114 kB 112 kB 🟢 1.7 kB (-1%)
index.pack.old gzip 112 kB 115 kB 🔴 +3 kB (+3%)
Total 4.61 MB 4.61 MB ⚠️ +125 B

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 346 kB 346 kB
app-page-exp..prod.js gzip 192 kB 192 kB
app-page-tur...dev.js gzip 346 kB 346 kB
app-page-tur..prod.js gzip 192 kB 192 kB
app-page-tur...dev.js gzip 342 kB 342 kB
app-page-tur..prod.js gzip 190 kB 190 kB
app-page.run...dev.js gzip 343 kB 343 kB
app-page.run..prod.js gzip 190 kB 190 kB
app-route-ex...dev.js gzip 77 kB 77 kB
app-route-ex..prod.js gzip 52.5 kB 52.5 kB
app-route-tu...dev.js gzip 77.1 kB 77.1 kB
app-route-tu..prod.js gzip 52.6 kB 52.6 kB
app-route-tu...dev.js gzip 76.7 kB 76.7 kB
app-route-tu..prod.js gzip 52.3 kB 52.3 kB
app-route.ru...dev.js gzip 76.6 kB 76.6 kB
app-route.ru..prod.js gzip 52.3 kB 52.3 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 43.9 kB 43.9 kB
pages-api-tu..prod.js gzip 33.5 kB 33.5 kB
pages-api.ru...dev.js gzip 43.9 kB 43.9 kB
pages-api.ru..prod.js gzip 33.5 kB 33.5 kB
pages-turbo....dev.js gzip 53.3 kB 53.3 kB
pages-turbo...prod.js gzip 39.1 kB 39.1 kB
pages.runtim...dev.js gzip 53.3 kB 53.3 kB
pages.runtim..prod.js gzip 39.1 kB 39.1 kB
server.runti..prod.js gzip 62.9 kB 62.9 kB
Total 3.06 MB 3.06 MB ✅ -2 B
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/5af31e2a1e43eb70d4f9c5714709e813b020648b/next

@mischnic mischnic changed the base branch from mischnic/refactor-export-analysis to graphite-base/92823 April 15, 2026 16:22
@mischnic mischnic force-pushed the graphite-base/92823 branch from 3de5acb to de62a96 Compare April 15, 2026 16:22
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch from d3ce5ad to d48ce77 Compare April 15, 2026 16:22
@graphite-app graphite-app Bot changed the base branch from graphite-base/92823 to canary April 15, 2026 16:23
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch from d48ce77 to c86fa23 Compare April 15, 2026 16:23
@mischnic mischnic changed the base branch from canary to graphite-base/92823 April 15, 2026 20:32
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch from c86fa23 to 3af3a0d Compare April 15, 2026 20:32
@mischnic mischnic changed the base branch from graphite-base/92823 to mischnic/move-assignment-scopes-into-importmap April 15, 2026 20:32
@mischnic mischnic changed the base branch from mischnic/move-assignment-scopes-into-importmap to graphite-base/92823 April 15, 2026 21:35
@mischnic mischnic force-pushed the graphite-base/92823 branch from 644a490 to bf4de72 Compare April 15, 2026 21:35
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch from 3af3a0d to a0adf74 Compare April 15, 2026 21:35
@graphite-app graphite-app Bot changed the base branch from graphite-base/92823 to canary April 15, 2026 21:35
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch from a0adf74 to 5af31e2 Compare April 15, 2026 21:36
@mischnic mischnic changed the base branch from canary to graphite-base/92823 April 16, 2026 13:47
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch from 5af31e2 to c56a330 Compare April 16, 2026 13:47
@mischnic mischnic changed the base branch from graphite-base/92823 to mischnic/move-import-usage-into-evalcontext April 16, 2026 13:47
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch from c56a330 to 0e63b60 Compare April 20, 2026 12:18
@mischnic mischnic force-pushed the mischnic/move-import-usage-into-evalcontext branch from 9523c79 to 0e8a749 Compare April 20, 2026 12:18
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch from 355fab1 to bda7ace Compare April 21, 2026 07:00
@mischnic mischnic force-pushed the mischnic/move-import-usage-into-evalcontext branch from 0e8a749 to b12a466 Compare April 21, 2026 07:00
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch 2 times, most recently from 67437c6 to c4fdcc2 Compare April 21, 2026 08:08
@mischnic mischnic force-pushed the mischnic/move-import-usage-into-evalcontext branch from 2cdb01d to 5b1f1c2 Compare April 21, 2026 08:08
// cases where `module` is used in some other way. e. g. `const module = 42;`.
// But a false positive doesn't break anything, it only opts out of some
// optimizations, which is acceptable.
if &*i.sym == "module" || &*i.sym == "exports" {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

can't we check for the unresolved_mark?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

yes, I want to get rid of this AST traversal anyway and merge it into the other one anyway.

self.cjs = true;
self.found = true;
}
if &*i.sym == "__turbopack_export_value__" {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

leverage the constants from runtime_functions.rs?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

this code was also just moved around, see my comment above

@mischnic mischnic force-pushed the mischnic/move-import-usage-into-evalcontext branch from 5b1f1c2 to d49f65f Compare April 24, 2026 09:11
Base automatically changed from mischnic/move-import-usage-into-evalcontext to canary April 24, 2026 11:54
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch from c4fdcc2 to 0e59ef8 Compare April 24, 2026 13:54
@mischnic mischnic marked this pull request as ready for review April 24, 2026 13:54
@mischnic mischnic requested a review from lukesandberg April 24, 2026 14:25
@mischnic mischnic force-pushed the mischnic/get-exports-without-analyze branch from 0e59ef8 to 9c9441c Compare April 27, 2026 15:04
@github-actions
Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 813ms 812ms ████▁
Cold (Ready in log) 789ms 789ms ▇███▁
Cold (First Request) 1.247s 1.246s ▄█▆▇▁
Warm (Listen) 813ms 812ms ████▁
Warm (Ready in log) 789ms 788ms ▇███▁
Warm (First Request) 605ms 602ms ▄███▁
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 812ms 812ms ▆█▆▃▃
Cold (Ready in log) 785ms 786ms ▄▁▆█▄
Cold (First Request) 3.225s 3.268s ▇▁██▇
Warm (Listen) 810ms 811ms ███▁▅
Warm (Ready in log) 784ms 785ms ▁▁▇█▃
Warm (First Request) 3.249s 3.244s ▂▁█▄▅

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 4.902s 4.936s ▆█▇▇▁
Cached Build 4.893s 4.917s ▇███▁
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 23.789s 23.916s ▃▂██▁
Cached Build 23.784s 23.732s ▃▂▅█▁
node_modules Size 495 MB 495 MB ▆████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
01-6_54ba0k0y.js gzip 154 B N/A -
0944qdqmn3k_9.js gzip 155 B N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0f-q8zzucdwc3.js gzip 65.6 kB N/A -
0fli3_wppnim5.js gzip 12.9 kB N/A -
0kb7_ep3r1z0_.js gzip 10.1 kB N/A -
0kw8xgqdrilf6.js gzip 8.56 kB N/A -
0ojkk2e654xsc.js gzip 8.59 kB N/A -
0wxpyd8r-vipl.js gzip 1.47 kB N/A -
0xy2fhla48_rd.js gzip 9.24 kB N/A -
10wqsvi2mgfmi.js gzip 9.82 kB N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
16vepdkipri3r.js gzip 8.51 kB N/A -
17n96uu6y1pxq.js gzip 8.6 kB N/A -
18y4_8-9or0mn.js gzip 8.51 kB N/A -
1e_5zkfvstg8q.js gzip 156 B N/A -
1ean4gq-z36r_.js gzip 157 B N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1gq145j3kps-h.js gzip 8.62 kB N/A -
1l8jy7nkljsgq.js gzip 168 B N/A -
1nsh-mbn0e-se.js gzip 8.56 kB N/A -
1rkrjccz_3xg0.js gzip 156 B N/A -
1tsrrp1tdngti.js gzip 13.3 kB N/A -
1wbblhm8kdg1d.js gzip 70.9 kB N/A -
1zhyi9g5kansf.js gzip 154 B N/A -
2__-e_ym8n788.js gzip 450 B N/A -
22o6xd9_ywdu6.js gzip 233 B N/A -
25n272-g99oa1.js gzip 7.61 kB N/A -
2faj3acmavn9n.js gzip 13.1 kB N/A -
2j1iz188xmk36.js gzip 160 B N/A -
2kvj8yrfznmwx.js gzip 5.69 kB N/A -
2qv7m7xjnokgr.js gzip 8.58 kB N/A -
2rbo30-4ny8mh.js gzip 154 B N/A -
3-80nr8h1pqjf.js gzip 160 B N/A -
342ijzvrpe53h.js gzip 2.29 kB N/A -
37ocxk3g_cpz4.js gzip 151 B N/A -
39h4zmi4mmh6g.js gzip 154 B N/A -
3k1k5gtofm6eq.js gzip 10.4 kB N/A -
3pbddvt7wc0kj.js gzip 155 B N/A -
3xq6of2nocani.js gzip 49.5 kB N/A -
42_02jza_7yny.js gzip 13.8 kB N/A -
turbopack-07..o2xo.js gzip 4.2 kB N/A -
turbopack-0m..myg7.js gzip 4.19 kB N/A -
turbopack-1c..00of.js gzip 4.19 kB N/A -
turbopack-1r..s_sf.js gzip 4.19 kB N/A -
turbopack-1v..5vq7.js gzip 4.19 kB N/A -
turbopack-2b..mxg5.js gzip 4.17 kB N/A -
turbopack-2e..6yca.js gzip 4.19 kB N/A -
turbopack-2t..xoml.js gzip 4.19 kB N/A -
turbopack-3a..t58w.js gzip 4.19 kB N/A -
turbopack-3a..0hdw.js gzip 4.18 kB N/A -
turbopack-3g..5zpf.js gzip 4.19 kB N/A -
turbopack-3i..m52b.js gzip 4.19 kB N/A -
turbopack-3o..se_6.js gzip 4.19 kB N/A -
turbopack-40..xhg5.js gzip 4.19 kB N/A -
046-fvruyfvai.js gzip N/A 169 B -
0arkbdqpxc37i.js gzip N/A 8.6 kB -
0bz-xifewa17d.js gzip N/A 8.63 kB -
0g-ogwxewd_j1.js gzip N/A 160 B -
0s0bk-xebp_os.js gzip N/A 156 B -
0tvekitj587fh.js gzip N/A 8.51 kB -
0unv38p29s65n.js gzip N/A 157 B -
0yvk6-wi8e9wh.js gzip N/A 13.3 kB -
1-jqyfc89tixo.js gzip N/A 1.46 kB -
10y3h86mnhs_2.js gzip N/A 10.4 kB -
12hxdatac0fxj.js gzip N/A 49.5 kB -
14t1kneseb8th.js gzip N/A 2.3 kB -
15sb1-dsqfk_j.js gzip N/A 8.59 kB -
1ab2xruymo-oj.js gzip N/A 449 B -
1cz0kmzuvr895.js gzip N/A 70.9 kB -
1dt49_v4y8lxb.js gzip N/A 13.8 kB -
1h1t76gcgnmyq.js gzip N/A 155 B -
1tu25qtsmfhar.js gzip N/A 9.82 kB -
1vein_gnv3mwr.js gzip N/A 8.56 kB -
1vmibvuhp1gey.js gzip N/A 13.1 kB -
1wzrm0xjjbzn5.js gzip N/A 10.1 kB -
1z3g0uaqtv9_3.js gzip N/A 8.56 kB -
2bi5hx402juv-.js gzip N/A 8.58 kB -
2ea61-cwip0fs.js gzip N/A 155 B -
2hy56297fog9u.js gzip N/A 8.52 kB -
2u_rpxq3tzytl.js gzip N/A 233 B -
2uvhnhmzheo1m.js gzip N/A 155 B -
2walynarwdt57.js gzip N/A 157 B -
35nh2lh_i5pyh.js gzip N/A 7.61 kB -
368lim5wq0o0r.js gzip N/A 12.9 kB -
3bm69wgosyjbs.js gzip N/A 155 B -
3drqjohogojbw.js gzip N/A 5.69 kB -
3f92jauar3qug.js gzip N/A 154 B -
3opggfrdxeld1.js gzip N/A 157 B -
3wpp8nvyoj121.js gzip N/A 9.24 kB -
3z6o-lnurdcrt.js gzip N/A 65.5 kB -
41depz8-5weoh.js gzip N/A 157 B -
42et4jzs606qh.js gzip N/A 159 B -
turbopack-06..mtbh.js gzip N/A 4.19 kB -
turbopack-0q..9btj.js gzip N/A 4.19 kB -
turbopack-0v..z0lv.js gzip N/A 4.19 kB -
turbopack-1d..v44x.js gzip N/A 4.19 kB -
turbopack-1j..eamo.js gzip N/A 4.19 kB -
turbopack-1k.._0js.js gzip N/A 4.18 kB -
turbopack-1n..ylp8.js gzip N/A 4.2 kB -
turbopack-1v..2v1p.js gzip N/A 4.19 kB -
turbopack-1x..d429.js gzip N/A 4.19 kB -
turbopack-2f..121d.js gzip N/A 4.17 kB -
turbopack-2t..zaj-.js gzip N/A 4.19 kB -
turbopack-3d..a_ql.js gzip N/A 4.19 kB -
turbopack-3n..guyc.js gzip N/A 4.19 kB -
turbopack-42.._fgr.js gzip N/A 4.18 kB -
Total 465 kB 465 kB ⚠️ +48 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 718 B 722 B
Total 718 B 722 B ⚠️ +4 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 433 B 436 B
Total 433 B 436 B ⚠️ +3 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2637-HASH.js gzip 4.63 kB N/A -
7724.HASH.js gzip 169 B N/A -
8274-HASH.js gzip 61.4 kB N/A -
8817-HASH.js gzip 5.59 kB N/A -
c3500254-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 254 B 255 B
main-HASH.js gzip 39.4 kB 39.4 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
5887-HASH.js gzip N/A 5.61 kB -
6522-HASH.js gzip N/A 60.7 kB -
6779-HASH.js gzip N/A 4.63 kB -
8854.HASH.js gzip N/A 169 B -
eab920f9-HASH.js gzip N/A 62.8 kB -
Total 236 kB 235 kB ✅ -652 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 333 B 334 B
dynamic-HASH.js gzip 1.81 kB 1.8 kB
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 353 B 349 B 🟢 4 B (-1%)
hooks-HASH.js gzip 384 B 382 B
image-HASH.js gzip 581 B 581 B
index-HASH.js gzip 260 B 259 B
link-HASH.js gzip 2.52 kB 2.52 kB
routerDirect..HASH.js gzip 316 B 318 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 313 B 314 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.99 kB 7.98 kB ✅ -10 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 126 kB
page.js gzip 274 kB 274 kB
Total 400 kB 399 kB ✅ -584 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 618 B 615 B
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 44.3 kB 44.4 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.9 kB 46 kB ⚠️ +56 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 722 B 719 B
Total 722 B 719 B ✅ -3 B
Build Cache
Canary PR Change
0.pack gzip 4.41 MB 4.4 MB 🟢 6.12 kB (0%)
index.pack gzip 115 kB 115 kB
index.pack.old gzip 113 kB 115 kB 🔴 +1.82 kB (+2%)
Total 4.64 MB 4.63 MB ✅ -3.93 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 348 kB 348 kB
app-page-exp..prod.js gzip 193 kB 193 kB
app-page-tur...dev.js gzip 348 kB 348 kB
app-page-tur..prod.js gzip 193 kB 193 kB
app-page-tur...dev.js gzip 344 kB 344 kB
app-page-tur..prod.js gzip 191 kB 191 kB
app-page.run...dev.js gzip 345 kB 345 kB
app-page.run..prod.js gzip 191 kB 191 kB
app-route-ex...dev.js gzip 77.3 kB 77.3 kB
app-route-ex..prod.js gzip 52.8 kB 52.8 kB
app-route-tu...dev.js gzip 77.4 kB 77.4 kB
app-route-tu..prod.js gzip 52.8 kB 52.8 kB
app-route-tu...dev.js gzip 77 kB 77 kB
app-route-tu..prod.js gzip 52.5 kB 52.5 kB
app-route.ru...dev.js gzip 76.9 kB 76.9 kB
app-route.ru..prod.js gzip 52.5 kB 52.5 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 44.2 kB 44.2 kB
pages-api-tu..prod.js gzip 33.7 kB 33.7 kB
pages-api.ru...dev.js gzip 44.2 kB 44.2 kB
pages-api.ru..prod.js gzip 33.7 kB 33.7 kB
pages-turbo....dev.js gzip 53.6 kB 53.6 kB
pages-turbo...prod.js gzip 39.3 kB 39.3 kB
pages.runtim...dev.js gzip 53.6 kB 53.6 kB
pages.runtim..prod.js gzip 39.3 kB 39.3 kB
server.runti..prod.js gzip 63.1 kB 63.1 kB
Total 3.08 MB 3.08 MB
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/9c9441c7f92fd94d3937c49e8f522780dd73ac29/next

Commit: 9c9441c

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 27, 2026

Tests Passed

Commit: 9c9441c

@mischnic mischnic merged commit eb76391 into canary Apr 28, 2026
339 of 341 checks passed
@mischnic mischnic deleted the mischnic/get-exports-without-analyze branch April 28, 2026 09:52
@github-actions github-actions Bot locked as resolved and limited conversation to collaborators May 12, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

created-by: Turbopack team PRs by the Turbopack team. locked Turbopack Related to Turbopack with Next.js.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants