-
-
Notifications
You must be signed in to change notification settings - Fork 9.4k
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
Next.js: Add support for Next 15 #29587
Conversation
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.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Consider adding error handling for unexpected alias types
@@ -11,24 +13,26 @@ export default { | |||
src: Accessibility, | |||
alt: 'Accessibility', | |||
}, | |||
}; | |||
} as Meta<typeof Component>; |
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.
logic: Component is not defined but used in type reference
@@ -10,17 +12,19 @@ export default { | |||
src: Accessibility, | |||
alt: 'Accessibility', | |||
}, | |||
}; | |||
} as Meta<typeof Component>; |
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.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: consider extracting header entries before mapping to avoid multiple await calls
@@ -10,19 +12,21 @@ export default { | |||
rsc: true, | |||
}, | |||
}, | |||
}; | |||
} as Meta<typeof Component>; |
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.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: Story type uses undefined Component type. Should be type Story = StoryObj<typeof RSC>
@@ -5,7 +5,7 @@ import { cookies } from 'next/headers'; | |||
import { redirect } from 'next/navigation'; | |||
|
|||
export async function accessRoute() { | |||
const user = cookies().get('user'); | |||
const user = (await cookies()).get('user'); |
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.
style: Consider adding error handling around the await in case cookies() rejects
@@ -15,6 +15,6 @@ const Component = () => ( | |||
|
|||
export default { | |||
component: Component, | |||
}; | |||
} as Meta<typeof Component>; | |||
|
|||
export const Default = {}; |
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.
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! |
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.
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:merged
orci:daily
GH 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.ts
Make 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/core
team 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/headers
tonext/dist/client/components/headers
incode/frameworks/nextjs/src/compatibility/compatibility-map.ts
code/frameworks/nextjs/src/export-mocks/headers/index.ts
to handle async cookies/headers APIs in Next.js 15code/frameworks/nextjs/src/export-mocks/webpack.ts
^15.0.0
)configureAliases