Next.js: Add support for Next 15#29587
Conversation
There was a problem hiding this comment.
36 file(s) reviewed, 10 comment(s)
Edit PR Review Bot Settings | Greptile
| (warning) => | ||
| warning.message.includes("export 'draftMode'") && | ||
| warning.message.includes('next/dist/server/request/headers'), | ||
| ]; |
There was a problem hiding this comment.
style: ignoring warnings about missing draftMode export could mask real issues if the export path changes again in future Next.js versions
| Object.entries(aliases).forEach(([name, alias]) => { | ||
| addScopedAlias(baseConfig, name, alias); | ||
| if (typeof alias === 'string') { | ||
| addScopedAlias(baseConfig, name, alias); | ||
| } else { | ||
| setAlias(baseConfig, name, alias); | ||
| } | ||
| }); |
There was a problem hiding this comment.
style: Consider adding error handling for unexpected alias types
| alt: 'Accessibility', | ||
| }, | ||
| }; | ||
| } as Meta<typeof Component>; |
There was a problem hiding this comment.
logic: Component is not defined but used in type reference
| alt: 'Accessibility', | ||
| }, | ||
| }; | ||
| } as Meta<typeof Component>; |
There was a problem hiding this comment.
logic: 'Component' is undefined, should be 'Image' since that's the component being used in the stories
| </p> | ||
| ); | ||
| })} | ||
| {(await cookies()).getAll().map(({ name, value }) => { |
There was a problem hiding this comment.
style: consider extracting cookie data before mapping to avoid multiple await calls
|
|
||
| <h3>Headers:</h3> | ||
| {Array.from(headers().entries()).map(([name, value]: [string, string]) => { | ||
| {Array.from((await headers()).entries()).map(([name, value]: [string, string]) => { |
There was a problem hiding this comment.
style: consider extracting header entries before mapping to avoid multiple await calls
| }, | ||
| }, | ||
| }; | ||
| } as Meta<typeof Component>; |
There was a problem hiding this comment.
logic: Component is not defined but used in type annotation. This will cause a TypeScript error. Should be RSC instead of Component
| }; | ||
| } as Meta<typeof Component>; | ||
|
|
||
| type Story = StoryObj<typeof Component>; |
There was a problem hiding this comment.
logic: Story type uses undefined Component type. Should be type Story = StoryObj<typeof RSC>
|
|
||
| export async function accessRoute() { | ||
| const user = cookies().get('user'); | ||
| const user = (await cookies()).get('user'); |
There was a problem hiding this comment.
style: Consider adding error handling around the await in case cookies() rejects
| }; | ||
| } as Meta<typeof Component>; | ||
|
|
||
| export const Default = {}; |
There was a problem hiding this comment.
syntax: Missing type annotation for Default story export. Should be typed as StoryObj for proper type checking.
|
@yannbf Does this also fix #29582 (comment)? |
06607c2 to
a2b9245
Compare
☁️ Nx Cloud ReportCI is running/has finished running commands for commit 4d3c6d9. As they complete they will appear below. Click to see the status, the terminal output, and the build insights. 📂 See all runs for this CI Pipeline Execution ✅ Successfully ran 1 targetSent with 💌 from NxCloud. |
213ff3b to
7cde000
Compare
Yes it should! |
shilman
left a comment
There was a problem hiding this comment.
Only did a cursory review to get this merged. @valentinpalkovic can you please re-review once you have time?
Next.js: Add support for Next 15 (cherry picked from commit fa138f6)
Next.js: Add support for Next 15 (cherry picked from commit fa138f6)
Next.js: Add support for Next 15 (cherry picked from commit fa138f6)
Closes #29380, #29565, #29582
What I did
This PR introduces support for Next.js 15 (Webpack - @storybook/nextjs) by making changes to the mocks and adding a compatibility layer for Next.js 14. There will be a followup PR for experimental next vite.
It was tested in all sandboxes, as well as in portable stories.
Additionally, it revamps how the Next.js sandboxes are generated:
It also moves all of the Nextjs stories into a single place, so they are all tested in all the nextjs sandboxes. As a result, it also has changes in the e2e specs.
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 canary-release-pr.yml --field pr=<PR_NUMBER>Greptile Summary
Added support for Next.js 15 by updating webpack configuration and compatibility mappings to handle breaking changes in Next.js's internal folder structure.
next/dist/server/request/headerstonext/dist/client/components/headersincode/frameworks/nextjs/src/compatibility/compatibility-map.tscode/frameworks/nextjs/src/export-mocks/headers/index.tsto handle async cookies/headers APIs in Next.js 15code/frameworks/nextjs/src/export-mocks/webpack.ts^15.0.0)configureAliases