Simplify how json imports workby turning it into a source transform#89631
Simplify how json imports workby turning it into a source transform#89631lukesandberg wants to merge 1 commit intoimport_with_type_text_turbopackfrom
json imports workby turning it into a source transform#89631Conversation
|
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.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
turbopack/crates/turbopack-ecmascript/src/bytes_source_transform.rs
Outdated
Show resolved
Hide resolved
Failing test suitesCommit: 808696f | About building and testing Next.js
Expand output● required server files app router › should send the right cache headers for an app route ● required server files app router › should handle optional catchall ● required server files app router › should send the right cache headers for an app page ● required server files app router › should not fail caching ● required server files app router › should properly handle prerender for bot request ● required server files app router › should properly handle fallback for bot request ● required server files app router › should send cache tags in minimal mode for ISR ● required server files app router › should not send cache tags in minimal mode for SSR ● required server files app router › should not send invalid soft tags to cache handler ● required server files app router › should not override params with query params ● required server files app router › should de-dupe HTML/RSC requests for ISR pages ● required server files app router › should isolate cache between different ISR request groups ● Test suite failed to run
Expand output● next-server-nft › with output:standalone › should not trace too many files in next-server.js.nft.json ● next-server-nft › default mode › should not trace too many files in next-minimal-server.js.nft.json
Expand output● minimal-mode-response-cache › app router revalidate should work with previous response cache dynamic ● minimal-mode-response-cache › app router revalidate should work with previous response cache ● minimal-mode-response-cache › should have correct "Started server on" log ● minimal-mode-response-cache › should have correct responses ● Test suite failed to run
Expand output● standalone mode: runtimeServerDeploymentId › it should load app-page ● standalone mode: runtimeServerDeploymentId › it should load app-page-edge ● standalone mode: runtimeServerDeploymentId › it should load app-route ● standalone mode: runtimeServerDeploymentId › it should load app-route-edge ● standalone mode: runtimeServerDeploymentId › it should load pages-page ● standalone mode: runtimeServerDeploymentId › it should load pages-page-edge ● standalone mode: runtimeServerDeploymentId › it should load api/pages-route ● standalone mode: runtimeServerDeploymentId › it should load api/pages-route-edge
Expand output● standalone mode - metadata routes › should handle metadata icons correctly ● standalone mode - metadata routes › should handle metadata icons correctly ● standalone mode - metadata routes › should handle correctly not-found.js ● standalone mode - metadata routes › should handle correctly not-found.js ● standalone mode - metadata routes › should handle private _next unmatched route correctly ● standalone mode - metadata routes › should handle private _next unmatched route correctly ● standalone mode - metadata routes › should handle pages rendering correctly ● standalone mode - metadata routes › should handle pages rendering correctly
Expand output● output: standalone with twoslash › should annotate twoslash types default ● output: standalone with twoslash › should annotate twoslash types esnext
Expand output● runtime prefetching › passed to a public cache › can completely prefetch a page that uses cookies and no uncached IO ● runtime prefetching › passed to a public cache › can completely prefetch a page that uses cookies and no uncached IO
Expand output● pnpm support › should build with dependencies installed via pnpm ● pnpm support › should execute client-side JS on each page in output: "standalone" |
json imports workby turning it into a source transform fix it to bejson imports workby turning it into a source transform
Merging this PR will not alter performance
Comparing Footnotes
|
Stats from current PR✅ No significant changes detected📊 All Metrics📖 Metrics GlossaryDev Server Metrics:
Build Metrics:
Change Thresholds:
⚡ Dev Server
📦 Dev Server (Webpack) (Legacy)📦 Dev Server (Webpack)
⚡ Production Builds
📦 Production Builds (Webpack) (Legacy)📦 Production Builds (Webpack)
📦 Bundle SizesBundle Sizes⚡ TurbopackClient Main Bundles: **437 kB** → **437 kB**
|
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 766 B | 762 B | ✓ |
| Total | 766 B | 762 B | ✅ -4 B |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 451 B | 450 B | ✓ |
| Total | 451 B | 450 B | ✅ -1 B |
📦 Webpack
Client
Main Bundles
| Canary | PR | Change | |
|---|---|---|---|
| 5528-HASH.js gzip | 5.47 kB | N/A | - |
| 6280-HASH.js gzip | 56.9 kB | N/A | - |
| 6335.HASH.js gzip | 169 B | N/A | - |
| 912-HASH.js gzip | 4.53 kB | N/A | - |
| e8aec2e4-HASH.js gzip | 62.5 kB | N/A | - |
| framework-HASH.js gzip | 59.7 kB | 59.7 kB | ✓ |
| main-app-HASH.js gzip | 256 B | 253 B | 🟢 3 B (-1%) |
| main-HASH.js gzip | 39.1 kB | 39.1 kB | ✓ |
| webpack-HASH.js gzip | 1.68 kB | 1.68 kB | ✓ |
| 262-HASH.js gzip | N/A | 4.52 kB | - |
| 2889.HASH.js gzip | N/A | 169 B | - |
| 5602-HASH.js gzip | N/A | 5.48 kB | - |
| 6948ada0-HASH.js gzip | N/A | 62.5 kB | - |
| 9544-HASH.js gzip | N/A | 57.5 kB | - |
| Total | 230 kB | 231 kB |
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 | 194 B | 194 B | ✓ |
| _error-HASH.js gzip | 183 B | 180 B | 🟢 3 B (-2%) |
| css-HASH.js gzip | 331 B | 330 B | ✓ |
| dynamic-HASH.js gzip | 1.81 kB | 1.81 kB | ✓ |
| edge-ssr-HASH.js gzip | 256 B | 256 B | ✓ |
| head-HASH.js gzip | 351 B | 352 B | ✓ |
| hooks-HASH.js gzip | 384 B | 383 B | ✓ |
| image-HASH.js gzip | 580 B | 581 B | ✓ |
| index-HASH.js gzip | 260 B | 260 B | ✓ |
| link-HASH.js gzip | 2.49 kB | 2.49 kB | ✓ |
| routerDirect..HASH.js gzip | 320 B | 319 B | ✓ |
| script-HASH.js gzip | 386 B | 386 B | ✓ |
| withRouter-HASH.js gzip | 315 B | 315 B | ✓ |
| 1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
| Total | 7.97 kB | 7.97 kB | ✅ -1 B |
Server
Edge SSR
| Canary | PR | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 126 kB | 126 kB | ✓ |
| page.js gzip | 249 kB | 249 kB | ✓ |
| Total | 375 kB | 375 kB |
Middleware
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 616 B | 617 B | ✓ |
| middleware-r..fest.js gzip | 156 B | 155 B | ✓ |
| middleware.js gzip | 33.3 kB | 33 kB | ✓ |
| edge-runtime..pack.js gzip | 842 B | 842 B | ✓ |
| Total | 34.9 kB | 34.6 kB | ✅ -323 B |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 732 B | 736 B | ✓ |
| Total | 732 B | 736 B |
Build Cache
| Canary | PR | Change | |
|---|---|---|---|
| 0.pack gzip | 3.84 MB | 3.85 MB | 🔴 +13.3 kB (+0%) |
| index.pack gzip | 103 kB | 104 kB | ✓ |
| index.pack.old gzip | 103 kB | 103 kB | ✓ |
| Total | 4.05 MB | 4.06 MB |
🔄 Shared (bundler-independent)
Runtimes
| Canary | PR | Change | |
|---|---|---|---|
| app-page-exp...dev.js gzip | 315 kB | 315 kB | ✓ |
| app-page-exp..prod.js gzip | 167 kB | 167 kB | ✓ |
| app-page-tur...dev.js gzip | 315 kB | 315 kB | ✓ |
| app-page-tur..prod.js gzip | 167 kB | 167 kB | ✓ |
| app-page-tur...dev.js gzip | 312 kB | 312 kB | ✓ |
| app-page-tur..prod.js gzip | 165 kB | 165 kB | ✓ |
| app-page.run...dev.js gzip | 312 kB | 312 kB | ✓ |
| app-page.run..prod.js gzip | 165 kB | 165 kB | ✓ |
| app-route-ex...dev.js gzip | 70.5 kB | 70.5 kB | ✓ |
| app-route-ex..prod.js gzip | 49 kB | 49 kB | ✓ |
| app-route-tu...dev.js gzip | 70.5 kB | 70.5 kB | ✓ |
| app-route-tu..prod.js gzip | 49 kB | 49 kB | ✓ |
| app-route-tu...dev.js gzip | 70.1 kB | 70.1 kB | ✓ |
| app-route-tu..prod.js gzip | 48.8 kB | 48.8 kB | ✓ |
| app-route.ru...dev.js gzip | 70.1 kB | 70.1 kB | ✓ |
| app-route.ru..prod.js gzip | 48.7 kB | 48.7 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.2 kB | 43.2 kB | ✓ |
| pages-api-tu..prod.js gzip | 32.9 kB | 32.9 kB | ✓ |
| pages-api.ru...dev.js gzip | 43.1 kB | 43.1 kB | ✓ |
| pages-api.ru..prod.js gzip | 32.8 kB | 32.8 kB | ✓ |
| pages-turbo....dev.js gzip | 52.5 kB | 52.5 kB | ✓ |
| pages-turbo...prod.js gzip | 39.4 kB | 39.4 kB | ✓ |
| pages.runtim...dev.js gzip | 52.5 kB | 52.5 kB | ✓ |
| pages.runtim..prod.js gzip | 39.3 kB | 39.3 kB | ✓ |
| server.runti..prod.js gzip | 62.7 kB | 62.7 kB | ✓ |
| Total | 2.8 MB | 2.8 MB | ✓ |
5895894 to
37d3f07
Compare
f5b9826 to
4f31ce0
Compare
37d3f07 to
808696f
Compare

Refactor JSON module handling in Turbopack
What?
Moves the JSON module handling from a separate crate (
turbopack-json) into theturbopack-ecmascriptcrate as a source transform, similar to how text and binary files are handled.Why?
This simplifies the codebase by:
How?
turbopack-jsoncratejson_source_transform.rsmodule toturbopack-ecmascriptimport ... with { type: 'json' })