-
-
Notifications
You must be signed in to change notification settings - Fork 9.8k
Next.js: Update SWC loader to support new wasm detection #33003
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
Conversation
|
View your CI Pipeline Execution ↗ for commit c5582fa
☁️ Nx Cloud last updated this comment at |
📝 WalkthroughWalkthroughUpdates Next.js SWC loader patch to use a namespaced Changes
Sequence Diagram(s)sequenceDiagram
participant Loader as webpack loader
participant nextSwcUtils as nextSwcUtils
participant Bindings as SWC bindings
rect rgb(245,250,255)
Loader->>nextSwcUtils: call isWasm() (async)
alt isWasm() available
nextSwcUtils-->>Loader: boolean (isWasm)
else isWasm() not available
Loader->>Bindings: getBindingsSync()
Bindings-->>Loader: bindings (with isWasm flag)
end
end
alt isWasm === true
Loader->>nextSwcUtils: transform(source, options)
nextSwcUtils-->>Loader: transformed result
else isWasm === false
Loader-->>Loader: skip WASM-specific branch / continue regular flow
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes
✨ Finishing touches
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🧰 Additional context used📓 Path-based instructions (4)**/*.{js,jsx,json,html,ts,tsx,mjs}📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Files:
**/*.{ts,tsx,js,jsx,mjs}📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Files:
code/**/*.{ts,tsx,js,jsx,mjs}📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Files:
{code/**,scripts/**}/**/*.{ts,tsx,js,jsx,mjs}📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Files:
🧠 Learnings (4)📓 Common learnings📚 Learning: 2025-10-13T13:33:14.659ZApplied to files:
📚 Learning: 2025-11-05T09:38:47.694ZApplied to files:
📚 Learning: 2025-11-05T09:37:25.903ZApplied to files:
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
🔇 Additional comments (1)
Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
code/frameworks/nextjs/src/swc/next-swc-loader-patch.ts(3 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{js,jsx,json,html,ts,tsx,mjs}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
**/*.{js,jsx,json,html,ts,tsx,mjs}: Run Prettier formatting on changed files before committing
Run ESLint on changed files and fix all errors/warnings before committing (useyarn lint:js:cmd <file>)
Files:
code/frameworks/nextjs/src/swc/next-swc-loader-patch.ts
**/*.{ts,tsx,js,jsx,mjs}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Export functions from modules when they need to be unit-tested
Files:
code/frameworks/nextjs/src/swc/next-swc-loader-patch.ts
code/**/*.{ts,tsx,js,jsx,mjs}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
In application code, use Storybook loggers instead of
console.*(client code:storybook/internal/client-logger; server code:storybook/internal/node-logger)
Files:
code/frameworks/nextjs/src/swc/next-swc-loader-patch.ts
{code/**,scripts/**}/**/*.{ts,tsx,js,jsx,mjs}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Do not use
console.log,console.warn, orconsole.errordirectly unless in isolated files where importing loggers would significantly increase bundle size
Files:
code/frameworks/nextjs/src/swc/next-swc-loader-patch.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Danger JS
- GitHub Check: daily
- GitHub Check: Core Unit Tests, windows-latest
🔇 Additional comments (3)
code/frameworks/nextjs/src/swc/next-swc-loader-patch.ts (3)
32-32: LGTM: Namespace import enables runtime API detection.The namespace import is the correct approach for supporting multiple Next.js versions where different APIs may or may not exist.
139-139: LGTM: Transform call updated consistently with namespace import.
172-172: LGTM: Correctly uses pre-computed WASM detection result.The conditional now uses the boolean value computed earlier in the function, which is more efficient than calling the detection function multiple times.
ndelangen
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🤪
fc364d7 to
c5582fa
Compare
Next.js: Update SWC loader to support new wasm detection (cherry picked from commit d12cf1b)
Closes #
What I did
The failure started at v16.0.2-canary.12 where they removed
isWasmfrom the swc index file as can be seen here in favor of using a new utilitygetBindingsSync. This PR updates the code to be compatible with the new and old way.Checklist for Contributors
Testing
The changes in this PR are covered in the following automated tests:
Manual testing
This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!
Documentation
MIGRATION.MD
Checklist for Maintainers
When this PR is ready for testing, make sure to add
ci:normal,ci:mergedorci:dailyGH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found incode/lib/cli-storybook/src/sandbox-templates.tsMake sure this PR contains one of the labels below:
Available labels
bug: Internal changes that fixes incorrect behavior.maintenance: User-facing maintenance tasks.dependencies: Upgrading (sometimes downgrading) dependencies.build: Internal-facing build tooling & test updates. Will not show up in release changelog.cleanup: Minor cleanup style change. Will not show up in release changelog.documentation: Documentation only changes. Will not show up in release changelog.feature request: Introducing a new feature.BREAKING CHANGE: Changes that break compatibility in some way with current major version.other: Changes that don't fit in the above categories.🦋 Canary release
This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the
@storybookjs/coreteam here.core team members can create a canary release here or locally with
gh workflow run --repo storybookjs/storybook publish.yml --field pr=<PR_NUMBER>Summary by CodeRabbit