[pull] canary from vercel:canary#789
Merged
pull[bot] merged 7 commits intocode:canaryfrom Feb 13, 2026
Merged
Conversation
…gnoreIssue (#89817) ## What? Moves the `turbopackIgnoreIssue` config from `experimental` to the stable `turbopack` config as `turbopack.ignoreIssue`. ## Why? Reviewers on #89682 agreed the API is stable enough to graduate from experimental. Also addresses a docs wording suggestion. ## How? - **TypeScript types**: Moved `ignoreIssue` field from `ExperimentalConfig` to `TurbopackOptions` in `config-shared.ts` - **Zod schema**: Moved validation from `experimentalSchema` to `zTurbopackConfig` in `config-schema.ts` - **Serialization**: Moved RegExp serialization logic into the turbopack block in `build/swc/index.ts` - **Rust**: Moved `ignore_issue` field from `ExperimentalConfig` to `TurbopackConfig` in `next_config.rs`, updated the `turbopack_ignore_issue_rules()` method to read from `self.turbopack` - **Tests**: Updated config in test to use `turbopack.ignoreIssue` instead of `experimental.turbopackIgnoreIssue` - **Docs**: Removed `version: experimental`, updated all code examples, moved entry from experimental table to stable config list in turbopack.mdx, fixed "Good to know" wording to say "prefer using more specific `path` patterns" (since `path` is already required)
When running `next build --debug-prerender`, React owner stacks are now captured and displayed in prerender error output. This makes it much easier to diagnose which component triggered uncached I/O or accessed request data without Suspense. Previously, `--debug-prerender` only enabled source maps and disabled minification. Now it also auto-enables `allowDevelopmentBuild` and sets `NODE_ENV=development`, which loads React development builds where `captureOwnerStack()` is available. The main challenge is that with `NODE_ENV=development`, both server and client bundles include dev-only code paths (HMR, WebSocket connections, dev overlay, debug channel, etc.) that expect a running dev server. We don't want these when using `next start`. To solve this, we introduce `process.env.__NEXT_DEV_SERVER`, an internal env var that is truthy only during `next dev`. In client bundles, it's inlined at build time (`'1'` for `next dev`, `''` for `next build`). In production server runtime bundles, it's inlined as `''` for dead-code elimination. In development server runtime bundles, it's left as a runtime check because those bundles are shared between `next dev` (where it's set) and `next build --debug-prerender` (where it's not). Meanwhile, `NODE_ENV` continues to control React's dev/prod mode and error formatting, which is exactly what we want for `--debug-prerender`. This also replaces the previous `renderOpts.dev` / `workStore.dev` pattern, which was unreliable because `RouteModule.isDev` was derived from `NODE_ENV` at compile time. When `allowDevelopmentBuild` set `NODE_ENV=development`, `isDev` would be compiled as `true` and incorrectly activate all dev guards during `next start`. Key changes: - `config.ts` auto-enables `allowDevelopmentBuild` and sets `NODE_ENV=development` when `--debug-prerender` is active - `define-env.ts` inlines `__NEXT_DEV_SERVER` into all bundles (truthy for dev, falsy for build) so dev-server features are dead-code eliminated in production and `--debug-prerender` builds - `next-dev.ts` and `next.ts` set `__NEXT_DEV_SERVER` in the process environment for externalized server-side code - `renderOpts.dev` and `workStore.dev` are removed — all consumers now use `__NEXT_DEV_SERVER` (for dev-server features) or `NODE_ENV` (for error formatting that should work in both dev and `--debug-prerender` builds) - `patch-error-inspect.ts` devirtualizes React server URLs in source map URLs so they display as readable file paths
## Enable Rust backtraces in CI tests ### What? Added `RUST_BACKTRACE=1` environment variable to all Turbopack-related test workflows. ### Why? This change enables detailed Rust backtraces when Turbopack encounters errors during CI tests, making it easier to diagnose and fix issues that occur in the Rust components. Notably, some assertions/panics are about detecting race conditions, e.g. ``` thread 'tokio-runtime-worker' (1056161) panicked at turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs:426:13: Concurrent task lock acquisition detected. This is not allowed and indicates a bug. It can lead to deadlocks. note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace ``` Rather than painfully attempting to reproduce locally we can just run with the env var all the time and perhaps that will be enough to figure out rare issues
This caused two requests and the preloading to not be effective at all #89771 added the dpl id in CSS for `url()`s
) ## What? Adds support for inline loader configuration in Turbopack via import attributes. Developers can apply webpack-compatible loaders to individual imports using the `with` clause, without needing global `turbopack.rules` configuration. ```tsx import rawText from '../data.txt' with { turbopackLoader: 'raw-loader', turbopackAs: '*.js' } import value from '../data.js' with { turbopackLoader: 'string-replace-loader', turbopackLoaderOptions: '{"search":"PLACEHOLDER","replace":"replaced value"}' } ``` ## Why? Global `turbopack.rules` applies loaders to all files matching a pattern. This PR provides per-import granularity — useful when only a specific import needs special treatment, avoiding side effects on other imports of the same file type. ## How? ### Import attributes parsing (`turbopack-ecmascript/src/analyzer/imports.rs`) - Extended `ImportAnnotations` to parse four new attributes: `turbopackLoader`, `turbopackLoaderOptions`, `turbopackAs`, `turbopackModuleType` - All values are strings per TC39 import attributes spec (`turbopackLoaderOptions` is a JSON-encoded string) - Added unit tests for the parser ### New structured loader type (`turbopack-core/src/loader.rs`) - Added `WebpackLoaderItem` struct shared between inline and global loader paths ### Reference type plumbing (`turbopack-core/src/reference_type.rs`, `turbopack-ecmascript/src/references/esm/base.rs`) - Added `ImportWithTurbopackUse` variant to `EcmaScriptModulesReferenceSubType` carrying the parsed loader, rename_as, and module_type - ESM reference resolution maps the parsed annotations to this new subtype ### Loader execution (`turbopack/src/lib.rs`) - In `process_default_internal`, detects `ImportWithTurbopackUse` references and applies the loader as a source transform via the existing webpack loader infrastructure - Requires `enable_webpack_loaders` to be configured (same as global rules) - Supports `turbopackAs` (re-processes with new extension) and `turbopackModuleType` (directly sets module type) - Avoids infinite recursion by switching to plain `Import` reference type on re-processing ### Documentation (`docs/.../turbopack.mdx`) - Added section documenting the four import attributes with examples - Added version history entry for v16.2.0 ### Testing (`test/development/app-dir/turbopack-import-assertions-use/`) - E2e test covering raw loader, replace loader with options, `turbopackModuleType: 'ecmascript'`, and `turbopackModuleType: 'json'` - Turbopack-only (skipped for webpack)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )