-
-
Notifications
You must be signed in to change notification settings - Fork 9.8k
Telemetry: Remove instance of check for sub-error handling #33356
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 d8169b5
☁️ Nx Cloud last updated this comment at |
|
View your CI Pipeline Execution ↗ for commit d8169b5
☁️ Nx Cloud last updated this comment at |
📝 WalkthroughWalkthroughModifies error handling in telemetry to use a permissive runtime check for Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10–15 minutes
Possibly related PRs
✨ Finishing touches
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/core/src/core-server/withTelemetry.ts(1 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{js,jsx,json,html,ts,tsx,mjs}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Use ESLint and Prettier configurations that are enforced in the codebase
Files:
code/core/src/core-server/withTelemetry.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Enable TypeScript strict mode
Files:
code/core/src/core-server/withTelemetry.ts
code/**/*.{ts,tsx,js,jsx,mjs}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
code/**/*.{ts,tsx,js,jsx,mjs}: Use server-side logger from 'storybook/internal/node-logger' for Node.js code
Use client-side logger from 'storybook/internal/client-logger' for browser code
Do not use console.log, console.warn, or console.error directly unless in isolated files where importing loggers would significantly increase bundle size
Files:
code/core/src/core-server/withTelemetry.ts
code/**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Export functions that need to be tested from their modules
Files:
code/core/src/core-server/withTelemetry.ts
code/**/*.{js,jsx,json,html,ts,tsx,mjs}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
code/**/*.{js,jsx,json,html,ts,tsx,mjs}: Run Prettier with --write flag to format code before committing
Run ESLint with yarn lint:js:cmd to check for linting issues and fix errors before committing
Files:
code/core/src/core-server/withTelemetry.ts
🧠 Learnings (1)
📚 Learning: 2025-11-05T09:37:25.920Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/tooltip/WithTooltip.tsx:54-96
Timestamp: 2025-11-05T09:37:25.920Z
Learning: Repo: storybookjs/storybook — In code/core/src/components/components/tooltip/WithTooltip.tsx, the legacy WithTooltip implementation is intentionally reintroduced for backward compatibility and is deprecated; maintainers (per Sidnioulz) do not want maintenance or improvements on it. Prefer WithTooltipNew/Popover; avoid suggesting changes to WithTooltip.* going forward.
Applied to files:
code/core/src/core-server/withTelemetry.ts
🧬 Code graph analysis (1)
code/core/src/core-server/withTelemetry.ts (1)
code/core/src/server-errors.ts (1)
StorybookError(8-8)
⏰ 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). (6)
- GitHub Check: normal
- GitHub Check: nx
- GitHub Check: nx
- GitHub Check: Core Unit Tests, windows-latest
- GitHub Check: nx
- GitHub Check: nx
| if (error && 'subErrors' in error && error.subErrors.length > 0) { | ||
| for (const subError of error.subErrors) { | ||
| if (subError instanceof StorybookError) { | ||
| await sendTelemetryError(subError, eventType, options, blocking, error); | ||
| } | ||
| await sendTelemetryError(subError, eventType, options, blocking, error as StorybookError); | ||
| } | ||
| } |
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.
Add defensive checks to prevent runtime errors with non-StorybookError objects.
The change replaces strict type checking with duck-typing ('subErrors' in error), which introduces several type safety risks:
-
No array validation:
error.subErrors.lengthassumessubErrorsis an array, but theinoperator only checks property existence. If a non-arraysubErrorsproperty exists, this will throw at runtime. -
Unsafe cast to StorybookError: Line 142 casts
error as StorybookErrorwithout verification. When this reaches line 130,parent.fullErrorCodemay be undefined if the error lacks this property. -
Missing structural validation: Each
subErroris passed recursively without verifying it matches the expected error structure.
While the try-catch block prevents crashes, it may mask legitimate issues and make debugging harder.
Consider adding defensive runtime checks:
- if (error && 'subErrors' in error && error.subErrors.length > 0) {
+ if (
+ error &&
+ 'subErrors' in error &&
+ Array.isArray(error.subErrors) &&
+ error.subErrors.length > 0 &&
+ 'fullErrorCode' in error
+ ) {
for (const subError of error.subErrors) {
await sendTelemetryError(subError, eventType, options, blocking, error as StorybookError);
}
}Alternatively, verify this change is intentional and document why duck-typing is preferred over instanceof StorybookError.
…e-of-check Telemetry: Remove instance of check for sub-error handling (cherry picked from commit 87bdf8b)
Closes #
What I did
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
Release Notes
✏️ Tip: You can customize this high-level summary in your review settings.