Skip to content

Conversation

@ndelangen
Copy link
Member

@ndelangen ndelangen commented Jan 20, 2026

What I did

Noticed a bug in the gathering of react-docgen-data, we passed the containing-object data, instead of the data.

Checklist for Contributors

Testing

The changes in this PR are covered in the following automated tests:

  • stories
  • unit tests
  • integration tests
  • end-to-end tests

Manual testing

Caution

This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!

Documentation

  • Add or update documentation reflecting your changes
  • If you are deprecating/removing a feature, make sure to update
    MIGRATION.MD

Checklist for Maintainers

  • When this PR is ready for testing, make sure to add ci:normal, ci:merged or ci:daily GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found in code/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 pull request has been released as version 0.0.0-pr-33598-sha-c91e37ca. Try it out in a new sandbox by running npx storybook@0.0.0-pr-33598-sha-c91e37ca sandbox or in an existing project with npx storybook@0.0.0-pr-33598-sha-c91e37ca upgrade.

More information
Published version 0.0.0-pr-33598-sha-c91e37ca
Triggered by @yannbf
Repository storybookjs/storybook
Branch norbert/fix-js-docgen-data
Commit c91e37ca
Datetime Tue Jan 20 15:00:09 UTC 2026 (1768921209)
Workflow run 21176214594

To request a new release of this pull request, mention the @storybookjs/core team.

core team members can create a new canary release here or locally with gh workflow run --repo storybookjs/storybook publish.yml --field pr=33598

Summary by CodeRabbit

  • Bug Fixes
    • Corrected component documentation extraction so documentation data is sourced and interpreted reliably.
    • Improved generation of array-type argument values with safer handling for empty or unspecified element types, reducing incorrect or unexpected argument outputs.

✏️ Tip: You can customize this high-level summary in your review settings.

@ndelangen ndelangen self-assigned this Jan 20, 2026
@ndelangen ndelangen requested a review from yannbf January 20, 2026 14:38
@ndelangen ndelangen marked this pull request as ready for review January 20, 2026 14:38
@nx-cloud
Copy link

nx-cloud bot commented Jan 20, 2026

View your CI Pipeline Execution ↗ for commit 2336b2e

Command Status Duration Result
nx run-many -t compile,check,knip,test,pretty-d... ❌ Failed 9m 49s View ↗

☁️ Nx Cloud last updated this comment at 2026-01-20 15:24:23 UTC

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 20, 2026

📝 Walkthrough

Walkthrough

extractReactDocgenInfo now reads docgen.reactDocgen.data instead of docgen.reactDocgen; the dummy-value generator for SBType arrays treats sbType.value as an optional array, returning [] for empty/'other' and otherwise generating from the first element.

Changes

Cohort / File(s) Summary
React Docgen Data Access
code/renderers/react/src/componentManifest/reactDocgen/extractReactDocgenInfo.ts
Switched the payload passed to extractArgTypes from docgen.reactDocgen to docgen.reactDocgen.data in extractArgTypesFromDocgen.
Array Type Dummy Value Generation
code/core/src/core-server/utils/get-dummy-args-from-argtypes.ts
generateDummyValueFromSBType now treats sbType.value as an optional SBType[]; returns [] if empty or first element is 'other', otherwise generates a dummy value from sbType.value[0].
Tests Updated for SBType[]
code/core/src/core-server/utils/get-dummy-args-from-argtypes.test.ts
Test inputs updated to pass array-structured SBType values (type-only import added); observable test behavior unchanged.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

✨ Finishing touches
  • 📝 Generate docstrings

Comment @coderabbitai help to get the list of available commands and usage tips.

@storybook-app-bot
Copy link

storybook-app-bot bot commented Jan 20, 2026

Package Benchmarks

Commit: 2336b2e, ran on 20 January 2026 at 15:22:21 UTC

The following packages have significant changes to their size or dependencies:

@storybook/builder-webpack5

Before After Difference
Dependency count 192 192 0
Self size 75 KB 75 KB 🎉 -6 B 🎉
Dependency size 32.24 MB 32.25 MB 🚨 +11 KB 🚨
Bundle Size Analyzer Link Link

storybook

Before After Difference
Dependency count 49 49 0
Self size 20.30 MB 20.32 MB 🚨 +21 KB 🚨
Dependency size 16.52 MB 16.52 MB 🎉 -4 B 🎉
Bundle Size Analyzer Link Link

@storybook/ember

Before After Difference
Dependency count 196 196 0
Self size 15 KB 15 KB 🚨 +12 B 🚨
Dependency size 28.96 MB 28.97 MB 🚨 +11 KB 🚨
Bundle Size Analyzer Link Link

@storybook/nextjs

Before After Difference
Dependency count 538 538 0
Self size 646 KB 646 KB 🚨 +110 B 🚨
Dependency size 59.22 MB 59.73 MB 🚨 +505 KB 🚨
Bundle Size Analyzer Link Link

@storybook/nextjs-vite

Before After Difference
Dependency count 127 127 0
Self size 1.12 MB 1.12 MB 🚨 +14 B 🚨
Dependency size 21.82 MB 22.32 MB 🚨 +496 KB 🚨
Bundle Size Analyzer Link Link

@storybook/react-native-web-vite

Before After Difference
Dependency count 159 159 0
Self size 30 KB 30 KB 🚨 +8 B 🚨
Dependency size 23.00 MB 23.61 MB 🚨 +610 KB 🚨
Bundle Size Analyzer Link Link

@storybook/react-vite

Before After Difference
Dependency count 117 117 0
Self size 35 KB 35 KB 🎉 -8 B 🎉
Dependency size 19.62 MB 20.11 MB 🚨 +496 KB 🚨
Bundle Size Analyzer Link Link

@storybook/react-webpack5

Before After Difference
Dependency count 278 278 0
Self size 24 KB 24 KB 🎉 -10 B 🎉
Dependency size 44.13 MB 44.64 MB 🚨 +505 KB 🚨
Bundle Size Analyzer Link Link

@storybook/server-webpack5

Before After Difference
Dependency count 204 204 0
Self size 16 KB 16 KB 🎉 -10 B 🎉
Dependency size 33.49 MB 33.50 MB 🚨 +11 KB 🚨
Bundle Size Analyzer Link Link

@storybook/cli

Before After Difference
Dependency count 183 183 0
Self size 775 KB 775 KB 🚨 +219 B 🚨
Dependency size 67.38 MB 67.47 MB 🚨 +92 KB 🚨
Bundle Size Analyzer Link Link

@storybook/codemod

Before After Difference
Dependency count 176 176 0
Self size 30 KB 30 KB 🎉 -4 B 🎉
Dependency size 65.95 MB 66.05 MB 🚨 +92 KB 🚨
Bundle Size Analyzer Link Link

create-storybook

Before After Difference
Dependency count 50 50 0
Self size 1000 KB 1000 KB 🎉 -6 B 🎉
Dependency size 36.82 MB 36.84 MB 🚨 +21 KB 🚨
Bundle Size Analyzer node node

@storybook/preset-react-webpack

Before After Difference
Dependency count 170 170 0
Self size 18 KB 18 KB 🚨 +18 B 🚨
Dependency size 31.26 MB 31.28 MB 🚨 +11 KB 🚨
Bundle Size Analyzer Link Link

@storybook/react

Before After Difference
Dependency count 57 57 0
Self size 732 KB 1.23 MB 🚨 +494 KB 🚨
Dependency size 12.94 MB 12.94 MB 🚨 +2 KB 🚨
Bundle Size Analyzer Link Link
@storybook-bot
Copy link
Contributor

Failed to publish canary version of this pull request, triggered by @yannbf. See the failed workflow run at: https://github.com/storybookjs/storybook/actions/runs/21175957704

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

🤖 Fix all issues with AI agents
In `@code/core/src/core-server/utils/get-dummy-args-from-argtypes.ts`:
- Around line 229-236: In the 'array' branch handling SBType arrays, the guard
wrongly uses "v?.length < 1" which lets v undefined fallthrough and cause v[0]
access to throw; change the condition to check for missing/empty arrays first
(e.g. use "!v?.length" or an explicit "if (!v || v.length === 0)") so that when
sbType.value (v) is undefined or empty you return [] before checking v[0]?.name;
update the conditional in the case 'array' block surrounding
generateDummyValueFromSBType(v[0], propName, options) accordingly.
Comment on lines 229 to +236
case 'array': {
const v = sbType.value as unknown as SBType[];

// If we don't know what the element is, be conservative and return empty.
if (sbType.value.name === 'other') {
if (v?.length < 1 || v[0]?.name === 'other') {
return [];
}
return [generateDummyValueFromSBType(sbType.value, propName, options)];
return [generateDummyValueFromSBType(v[0], propName, options)];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Guard condition fails when v is undefined.

The condition v?.length < 1 doesn't protect against undefined values. When v is undefined:

  • v?.length evaluates to undefined
  • undefined < 1 is false (NaN comparison)
  • Code proceeds to v[0]?.name, which throws TypeError

Use !v?.length instead, which correctly handles both undefined/null and empty arrays.

Proposed fix
     case 'array': {
       const v = sbType.value as unknown as SBType[];

       // If we don't know what the element is, be conservative and return empty.
-      if (v?.length < 1 || v[0]?.name === 'other') {
+      if (!v?.length || v[0]?.name === 'other') {
         return [];
       }
       return [generateDummyValueFromSBType(v[0], propName, options)];
     }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
case 'array': {
const v = sbType.value as unknown as SBType[];
// If we don't know what the element is, be conservative and return empty.
if (sbType.value.name === 'other') {
if (v?.length < 1 || v[0]?.name === 'other') {
return [];
}
return [generateDummyValueFromSBType(sbType.value, propName, options)];
return [generateDummyValueFromSBType(v[0], propName, options)];
case 'array': {
const v = sbType.value as unknown as SBType[];
// If we don't know what the element is, be conservative and return empty.
if (!v?.length || v[0]?.name === 'other') {
return [];
}
return [generateDummyValueFromSBType(v[0], propName, options)];
}
🤖 Prompt for AI Agents
In `@code/core/src/core-server/utils/get-dummy-args-from-argtypes.ts` around lines
229 - 236, In the 'array' branch handling SBType arrays, the guard wrongly uses
"v?.length < 1" which lets v undefined fallthrough and cause v[0] access to
throw; change the condition to check for missing/empty arrays first (e.g. use
"!v?.length" or an explicit "if (!v || v.length === 0)") so that when
sbType.value (v) is undefined or empty you return [] before checking v[0]?.name;
update the conditional in the case 'array' block surrounding
generateDummyValueFromSBType(v[0], propName, options) accordingly.
…correct, but the types are wrong, changing the type (we tried) breaks more things
@ndelangen ndelangen merged commit c6a956d into next Jan 20, 2026
61 of 94 checks passed
@ndelangen ndelangen deleted the norbert/fix-js-docgen-data branch January 20, 2026 15:22
@github-actions github-actions bot mentioned this pull request Jan 20, 2026
18 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment