Skip to content

Build: Require explicit relative import extensions#34417

Merged
kasperpeulen merged 6 commits into
nextfrom
kasper/ts-import-extensions
Apr 1, 2026
Merged

Build: Require explicit relative import extensions#34417
kasperpeulen merged 6 commits into
nextfrom
kasper/ts-import-extensions

Conversation

@kasperpeulen
Copy link
Copy Markdown
Member

@kasperpeulen kasperpeulen commented Mar 31, 2026

Closes #

What I did

Switched the import-extension migration over to the official import-x/extensions rule instead of a custom local rule, with fix: true enabled so ESLint can rewrite missing relative TS/JS extensions automatically.

This keeps package imports untouched via ignorePackages: true, excludes consumer-facing surfaces entirely in ESLint config (docs, template, templates, __testfixtures__, and __mocks-ng-workspace__), and splits the change into two commits:

  1. configure the guardrails
  2. run full-repo lint --fix to rewrite imports

The earlier “reports but does not rewrite” behavior came from using the rule without its built-in fix: true option.

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!

No browser or sandbox validation was needed for this internal tooling migration.

Validation run from the first commit (Build: Add explicit import extension guardrails):

  1. Run yarn --cwd scripts lint:js:cmd . --fix --quiet
  2. Run yarn --cwd code lint:js:cmd . --fix --quiet
  3. Confirm the resulting full-tree rewrite matches the second commit
  4. Confirm excluded consumer-facing surfaces remain untouched

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 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 publish.yml --field pr=<PR_NUMBER>

@kasperpeulen kasperpeulen added build Internal-facing build tooling & test updates ci:normal labels Mar 31, 2026
@storybook-app-bot
Copy link
Copy Markdown

storybook-app-bot Bot commented Mar 31, 2026

Package Benchmarks

Commit: 4c95059, ran on 1 April 2026 at 14:39:33 UTC

No significant changes detected, all good. 👏

@kasperpeulen kasperpeulen marked this pull request as ready for review March 31, 2026 15:30
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 31, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR converts many relative import/export specifiers to explicit file extensions (e.g., .ts, .tsx, .js) across the repo and adds an ESLint override enforcing extensioned imports for TypeScript files. Changes are documentation and import-resolution only; no runtime logic or public API signatures were modified.

Changes

Cohort / File(s) Summary
Docs & Linting
AGENTS.md, code/.eslintrc.js
Added contributor guidance requiring explicit file extensions for TS/JS relative imports; added ESLint override enabling import-x/extensions rule for **/*.ts/**/*.tsx with several excluded paths.
Storybook config & setup
code/.storybook/*, code/.storybook/preview.tsx, code/.storybook/storybook.setup.ts
Updated Storybook preview/setup imports to use explicit .ts/.tsx/.js extensions.
Addons (grouped)
code/addons/a11y/**, code/addons/links/**, code/addons/onboarding/**, code/addons/pseudo-states/**, code/addons/themes/**, code/addons/vitest/**
Rewrote relative imports/re-exports across addon sources, stories, tests, build-config and vitest configs to include explicit extensions (.ts, .tsx, .js as applicable).
Builders
code/builders/builder-vite/**, code/builders/builder-webpack5/**
Updated builder plugin, preset, test, and config imports/re-exports to explicit .ts/.tsx module specifiers; adjusted codegen and virtual module import targets.
Core: Actions & Models
code/core/src/actions/**, code/core/src/actions/models/**
Converted action-related source, runtime, model and re-export module specifiers to explicit file extensions and index entrypoints.
Core: Common & Utilities
code/core/src/common/**, code/core/src/common/js-package-manager/**
Mass update of utility, CLI, package-manager, template, and test imports to explicit .ts/index.ts entrypoints; numerous test files adjusted accordingly.
Core: Infrastructure
code/core/src/babel/**, code/core/src/backgrounds/**, code/core/src/bin/**, code/core/src/builder-manager/**, code/core/src/channels/**, code/core/src/component-testing/**
Updated re-exports, type-only imports, and implementation imports across core infra modules to use explicit .ts/index.ts/.tsx specifiers.
Misc tests & tooling
various **/*.test.ts, **/*.test-d.ts
Aligned test static imports and dynamic/vi.mock import targets to the new extensioned module specifiers; some test mocks adjusted to reference .ts paths.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

Copy link
Copy Markdown
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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
code/addons/docs/src/mdx-loader.ts (1)

36-36: ⚠️ Potential issue | 🟡 Minor

Consider using Storybook's node logger instead of console.error.

This file uses console.error in the error handler. Per coding guidelines, Storybook code should use storybook/internal/node-logger for server-side logging instead of raw console.* calls. While webpack loaders are somewhat isolated, the logger would provide consistent error formatting across the codebase.

📝 Suggested change
+import { logger } from 'storybook/internal/node-logger';
+
 async function loader(this: LoaderContext, content: string): Promise<void> {
   const callback = this.async();
   const options = { ...this.getOptions(), filepath: this.resourcePath };
 
   try {
     const result = await compile(content, options);
     const code = `${DEFAULT_RENDERER}\n${result}`;
     return callback(null, code);
   } catch (err: any) {
-    console.error('Error loading:', this.resourcePath);
+    logger.error('Error loading:', this.resourcePath);
     return callback(err);
   }
 }

As per coding guidelines: "Use Storybook loggers (storybook/internal/node-logger for server-side, storybook/internal/client-logger for client-side) instead of raw console.* methods in normal code paths. Avoid console.log, console.warn, and console.error unless the file is isolated enough that importing the logger is not reasonable."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@code/addons/docs/src/mdx-loader.ts` at line 36, Replace the raw console.error
call in the error handler of the mdx loader with Storybook's server logger:
import the node logger from 'storybook/internal/node-logger' and call its error
method instead of console.error, including the error object and
this.resourcePath for context (i.e., update the error use in the function/method
that currently logs "Error loading:" and references this.resourcePath to use
logger.error with a descriptive message and the caught error). Ensure the import
is added at the top of mdx-loader.ts and remove the console.error usage so
server-side logs use Storybook's formatting.
🧹 Nitpick comments (2)
code/addons/a11y/src/components/A11YPanel.test.tsx (1)

18-19: Mock path should match import specifier for consistency.

The import at line 13 uses './A11yContext.tsx' but the mock path here uses './A11yContext' without the extension. For consistency with the explicit-extension convention, consider updating the mock path.

♻️ Suggested fix
-vi.mock('./A11yContext');
+vi.mock('./A11yContext.tsx');
 const mockedUseA11yContext = vi.mocked(useA11yContext);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@code/addons/a11y/src/components/A11YPanel.test.tsx` around lines 18 - 19,
Update the vi.mock call to use the exact import specifier used elsewhere
(include the .tsx extension) so the mock path matches the import; change the
mock invocation that references './A11yContext' to './A11yContext.tsx' and
ensure the mockedUseA11yContext (vi.mocked(useA11yContext)) still references the
same symbol to keep the test mock consistent with the import.
code/builders/builder-vite/src/index.test.ts (1)

9-11: Mock path should match import specifier for consistency.

The import at line 7 uses './vite-server.ts' but the mock path here uses './vite-server' without the extension. For consistency and to ensure the mock resolves correctly with the new explicit-extension convention, consider updating the mock path.

♻️ Suggested fix
-vi.mock('./vite-server', () => ({
+vi.mock('./vite-server.ts', () => ({
   createViteServer: vi.fn(),
 }));
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@code/builders/builder-vite/src/index.test.ts` around lines 9 - 11, Update the
mock path to match the import specifier: change the vi.mock call that currently
targets './vite-server' to use the explicit extension './vite-server.ts' so it
resolves consistently with the import of createViteServer; ensure the mocked
export name createViteServer remains vi.fn() to keep tests functioning.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@code/addons/docs/src/mdx-loader.ts`:
- Line 36: Replace the raw console.error call in the error handler of the mdx
loader with Storybook's server logger: import the node logger from
'storybook/internal/node-logger' and call its error method instead of
console.error, including the error object and this.resourcePath for context
(i.e., update the error use in the function/method that currently logs "Error
loading:" and references this.resourcePath to use logger.error with a
descriptive message and the caught error). Ensure the import is added at the top
of mdx-loader.ts and remove the console.error usage so server-side logs use
Storybook's formatting.

---

Nitpick comments:
In `@code/addons/a11y/src/components/A11YPanel.test.tsx`:
- Around line 18-19: Update the vi.mock call to use the exact import specifier
used elsewhere (include the .tsx extension) so the mock path matches the import;
change the mock invocation that references './A11yContext' to
'./A11yContext.tsx' and ensure the mockedUseA11yContext
(vi.mocked(useA11yContext)) still references the same symbol to keep the test
mock consistent with the import.

In `@code/builders/builder-vite/src/index.test.ts`:
- Around line 9-11: Update the mock path to match the import specifier: change
the vi.mock call that currently targets './vite-server' to use the explicit
extension './vite-server.ts' so it resolves consistently with the import of
createViteServer; ensure the mocked export name createViteServer remains vi.fn()
to keep tests functioning.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0a92af25-92b0-47ac-aaf6-3c92404fc54e

📥 Commits

Reviewing files that changed from the base of the PR and between d748443 and 9ac85f7.

📒 Files selected for processing (300)
  • AGENTS.md
  • code/.eslintrc.js
  • code/.storybook/bench/bench.stories.tsx
  • code/.storybook/preview.tsx
  • code/.storybook/storybook.setup.ts
  • code/addons/a11y/build-config.ts
  • code/addons/a11y/src/a11yRunner.test.ts
  • code/addons/a11y/src/a11yRunner.ts
  • code/addons/a11y/src/a11yRunnerUtils.test.ts
  • code/addons/a11y/src/a11yRunnerUtils.ts
  • code/addons/a11y/src/axeRuleMappingHelper.ts
  • code/addons/a11y/src/components/A11YPanel.stories.tsx
  • code/addons/a11y/src/components/A11YPanel.test.tsx
  • code/addons/a11y/src/components/A11YPanel.tsx
  • code/addons/a11y/src/components/A11yContext.test.tsx
  • code/addons/a11y/src/components/A11yContext.tsx
  • code/addons/a11y/src/components/Report/Details.tsx
  • code/addons/a11y/src/components/Report/Report.stories.tsx
  • code/addons/a11y/src/components/Report/Report.tsx
  • code/addons/a11y/src/components/Tabs.tsx
  • code/addons/a11y/src/components/TestDiscrepancyMessage.stories.tsx
  • code/addons/a11y/src/components/TestDiscrepancyMessage.tsx
  • code/addons/a11y/src/components/VisionSimulator.stories.tsx
  • code/addons/a11y/src/components/VisionSimulator.tsx
  • code/addons/a11y/src/index.ts
  • code/addons/a11y/src/manager.test.tsx
  • code/addons/a11y/src/manager.tsx
  • code/addons/a11y/src/postinstall.ts
  • code/addons/a11y/src/preview.test.tsx
  • code/addons/a11y/src/preview.tsx
  • code/addons/a11y/src/types.ts
  • code/addons/a11y/src/withVisionSimulator.ts
  • code/addons/a11y/vitest.config.ts
  • code/addons/docs/build-config.ts
  • code/addons/docs/src/blocks.ts
  • code/addons/docs/src/blocks/blocks/Anchor.stories.tsx
  • code/addons/docs/src/blocks/blocks/ArgTypes.stories.tsx
  • code/addons/docs/src/blocks/blocks/ArgTypes.tsx
  • code/addons/docs/src/blocks/blocks/Canvas.stories.tsx
  • code/addons/docs/src/blocks/blocks/Canvas.tsx
  • code/addons/docs/src/blocks/blocks/Controls.stories.tsx
  • code/addons/docs/src/blocks/blocks/Controls.tsx
  • code/addons/docs/src/blocks/blocks/Description.stories.tsx
  • code/addons/docs/src/blocks/blocks/Description.tsx
  • code/addons/docs/src/blocks/blocks/Docs.tsx
  • code/addons/docs/src/blocks/blocks/DocsContainer.tsx
  • code/addons/docs/src/blocks/blocks/DocsPage.stories.tsx
  • code/addons/docs/src/blocks/blocks/DocsPage.test.ts
  • code/addons/docs/src/blocks/blocks/DocsPage.tsx
  • code/addons/docs/src/blocks/blocks/DocsStory.tsx
  • code/addons/docs/src/blocks/blocks/Heading.tsx
  • code/addons/docs/src/blocks/blocks/Markdown.stories.tsx
  • code/addons/docs/src/blocks/blocks/Markdown.tsx
  • code/addons/docs/src/blocks/blocks/Meta.tsx
  • code/addons/docs/src/blocks/blocks/Primary.stories.tsx
  • code/addons/docs/src/blocks/blocks/Primary.tsx
  • code/addons/docs/src/blocks/blocks/Source.stories.tsx
  • code/addons/docs/src/blocks/blocks/Source.tsx
  • code/addons/docs/src/blocks/blocks/Stories.stories.tsx
  • code/addons/docs/src/blocks/blocks/Stories.tsx
  • code/addons/docs/src/blocks/blocks/Story.stories.tsx
  • code/addons/docs/src/blocks/blocks/Story.tsx
  • code/addons/docs/src/blocks/blocks/Subheading.tsx
  • code/addons/docs/src/blocks/blocks/Subtitle.stories.tsx
  • code/addons/docs/src/blocks/blocks/Subtitle.tsx
  • code/addons/docs/src/blocks/blocks/Title.stories.tsx
  • code/addons/docs/src/blocks/blocks/Title.tsx
  • code/addons/docs/src/blocks/blocks/Unstyled.tsx
  • code/addons/docs/src/blocks/blocks/Wrapper.tsx
  • code/addons/docs/src/blocks/blocks/external/ExternalDocs.tsx
  • code/addons/docs/src/blocks/blocks/external/ExternalDocsContainer.tsx
  • code/addons/docs/src/blocks/blocks/external/ExternalPreview.ts
  • code/addons/docs/src/blocks/blocks/index.ts
  • code/addons/docs/src/blocks/blocks/mdx.tsx
  • code/addons/docs/src/blocks/blocks/useOf.ts
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/addons/docs/src/blocks/blocks/useStory.ts
  • code/addons/docs/src/blocks/blocks/utils.ts
  • code/addons/docs/src/blocks/component-overrides.stories.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/ArgControl.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/ArgJsDoc.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/ArgRow.stories.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/ArgRow.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/ArgValue.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/ArgsTable.stories.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/ArgsTable.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/SectionRow.stories.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/TabbedArgsTable.stories.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/TabbedArgsTable.tsx
  • code/addons/docs/src/blocks/components/ArgsTable/index.ts
  • code/addons/docs/src/blocks/components/ColorPalette.stories.tsx
  • code/addons/docs/src/blocks/components/ColorPalette.tsx
  • code/addons/docs/src/blocks/components/DocsPage.stories.tsx
  • code/addons/docs/src/blocks/components/DocsPage.test.tsx
  • code/addons/docs/src/blocks/components/EmptyBlock.stories.tsx
  • code/addons/docs/src/blocks/components/IconGallery.stories.tsx
  • code/addons/docs/src/blocks/components/IconGallery.tsx
  • code/addons/docs/src/blocks/components/Preview.stories.tsx
  • code/addons/docs/src/blocks/components/Preview.tsx
  • code/addons/docs/src/blocks/components/Source.stories.tsx
  • code/addons/docs/src/blocks/components/Source.tsx
  • code/addons/docs/src/blocks/components/Story.stories.tsx
  • code/addons/docs/src/blocks/components/Story.tsx
  • code/addons/docs/src/blocks/components/TableOfContents.stories.tsx
  • code/addons/docs/src/blocks/components/Title.stories.ts
  • code/addons/docs/src/blocks/components/Toolbar.tsx
  • code/addons/docs/src/blocks/components/Typeset.stories.tsx
  • code/addons/docs/src/blocks/components/Typeset.tsx
  • code/addons/docs/src/blocks/components/index.ts
  • code/addons/docs/src/blocks/controls/Boolean.stories.tsx
  • code/addons/docs/src/blocks/controls/Boolean.tsx
  • code/addons/docs/src/blocks/controls/Color.stories.tsx
  • code/addons/docs/src/blocks/controls/Color.tsx
  • code/addons/docs/src/blocks/controls/Date.stories.tsx
  • code/addons/docs/src/blocks/controls/Date.test.ts
  • code/addons/docs/src/blocks/controls/Date.tsx
  • code/addons/docs/src/blocks/controls/Files.stories.tsx
  • code/addons/docs/src/blocks/controls/Files.tsx
  • code/addons/docs/src/blocks/controls/Number.stories.tsx
  • code/addons/docs/src/blocks/controls/Number.tsx
  • code/addons/docs/src/blocks/controls/Object.stories.tsx
  • code/addons/docs/src/blocks/controls/Object.tsx
  • code/addons/docs/src/blocks/controls/Range.stories.tsx
  • code/addons/docs/src/blocks/controls/Range.tsx
  • code/addons/docs/src/blocks/controls/Text.stories.tsx
  • code/addons/docs/src/blocks/controls/Text.tsx
  • code/addons/docs/src/blocks/controls/helpers.test.ts
  • code/addons/docs/src/blocks/controls/index.tsx
  • code/addons/docs/src/blocks/controls/options/CheckOptions.stories.tsx
  • code/addons/docs/src/blocks/controls/options/Checkbox.tsx
  • code/addons/docs/src/blocks/controls/options/Options.tsx
  • code/addons/docs/src/blocks/controls/options/Radio.tsx
  • code/addons/docs/src/blocks/controls/options/RadioOptions.stories.tsx
  • code/addons/docs/src/blocks/controls/options/Select.tsx
  • code/addons/docs/src/blocks/controls/options/SelectOptions.stories.tsx
  • code/addons/docs/src/blocks/controls/options/helpers.ts
  • code/addons/docs/src/blocks/controls/options/index.ts
  • code/addons/docs/src/blocks/controls/react-editable-json-tree/JsonNodes.tsx
  • code/addons/docs/src/blocks/controls/react-editable-json-tree/index.tsx
  • code/addons/docs/src/blocks/controls/types.ts
  • code/addons/docs/src/blocks/examples/ArgTypesParameters.stories.tsx
  • code/addons/docs/src/blocks/examples/ArgTypesWithSubcomponentsParameters.stories.tsx
  • code/addons/docs/src/blocks/examples/Button.stories.tsx
  • code/addons/docs/src/blocks/examples/ButtonNoAutodocs.stories.tsx
  • code/addons/docs/src/blocks/examples/ButtonReadonly.stories.tsx
  • code/addons/docs/src/blocks/examples/ButtonSomeAutodocs.stories.tsx
  • code/addons/docs/src/blocks/examples/ButtonWithMetaDescriptionAsBoth.stories.tsx
  • code/addons/docs/src/blocks/examples/ButtonWithMetaDescriptionAsComment.stories.tsx
  • code/addons/docs/src/blocks/examples/ButtonWithMetaDescriptionAsParameter.stories.tsx
  • code/addons/docs/src/blocks/examples/ButtonWithMetaSubtitleAsBoth.stories.tsx
  • code/addons/docs/src/blocks/examples/ButtonWithMetaSubtitleAsComponentSubtitle.stories.tsx
  • code/addons/docs/src/blocks/examples/ButtonWithMetaSubtitleAsDocsSubtitle.stories.tsx
  • code/addons/docs/src/blocks/examples/CanvasParameters.stories.tsx
  • code/addons/docs/src/blocks/examples/ControlsParameters.stories.tsx
  • code/addons/docs/src/blocks/examples/ControlsWithSubcomponentsParameters.stories.tsx
  • code/addons/docs/src/blocks/examples/DocsPageParameters.stories.tsx
  • code/addons/docs/src/blocks/examples/EmptyArgTypes.stories.tsx
  • code/addons/docs/src/blocks/examples/SourceParameters.stories.tsx
  • code/addons/docs/src/blocks/examples/StoriesParameters.stories.tsx
  • code/addons/docs/src/blocks/examples/StoryParameters.stories.tsx
  • code/addons/docs/src/compiler/index.test.ts
  • code/addons/docs/src/compiler/index.ts
  • code/addons/docs/src/index.ts
  • code/addons/docs/src/manager.tsx
  • code/addons/docs/src/manifest.test.ts
  • code/addons/docs/src/mdx-loader.ts
  • code/addons/docs/src/mdx-plugin.ts
  • code/addons/docs/src/preset.ts
  • code/addons/docs/src/preview.ts
  • code/addons/docs/src/types.ts
  • code/addons/docs/vitest.config.ts
  • code/addons/links/build-config.ts
  • code/addons/links/src/index.ts
  • code/addons/links/src/manager.ts
  • code/addons/links/src/preview.ts
  • code/addons/links/src/react/components/link.test.tsx
  • code/addons/links/src/react/components/link.tsx
  • code/addons/links/src/react/index.ts
  • code/addons/links/src/utils.test.ts
  • code/addons/links/src/utils.ts
  • code/addons/links/vitest.config.ts
  • code/addons/onboarding/build-config.ts
  • code/addons/onboarding/example-stories/Button.stories.tsx
  • code/addons/onboarding/src/Onboarding.tsx
  • code/addons/onboarding/src/Survey.tsx
  • code/addons/onboarding/src/components/Confetti/Confetti.stories.tsx
  • code/addons/onboarding/src/components/List/List.stories.tsx
  • code/addons/onboarding/src/components/List/List.tsx
  • code/addons/onboarding/src/components/List/ListItem/ListItem.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx
  • code/addons/onboarding/src/features/SplashScreen/SplashScreen.stories.tsx
  • code/addons/onboarding/src/manager.tsx
  • code/addons/onboarding/src/preset.ts
  • code/addons/onboarding/vitest.config.ts
  • code/addons/pseudo-states/build-config.ts
  • code/addons/pseudo-states/src/index.ts
  • code/addons/pseudo-states/src/manager.ts
  • code/addons/pseudo-states/src/manager/PseudoStateTool.tsx
  • code/addons/pseudo-states/src/preview.ts
  • code/addons/pseudo-states/src/preview/rewriteStyleSheet.test.ts
  • code/addons/pseudo-states/src/preview/rewriteStyleSheet.ts
  • code/addons/pseudo-states/src/preview/splitSelectors.test.ts
  • code/addons/pseudo-states/src/preview/withPseudoState.ts
  • code/addons/pseudo-states/src/stories/Button.stories.tsx
  • code/addons/pseudo-states/src/stories/CSSAtRules.stories.tsx
  • code/addons/pseudo-states/src/stories/CustomElement.stories.tsx
  • code/addons/pseudo-states/src/stories/CustomElementNested.stories.tsx
  • code/addons/pseudo-states/src/stories/CustomElementNested.tsx
  • code/addons/pseudo-states/src/stories/Input.stories.tsx
  • code/addons/pseudo-states/src/stories/NestedRules.stories.tsx
  • code/addons/pseudo-states/src/stories/Portal.stories.tsx
  • code/addons/pseudo-states/src/stories/ShadowRoot.stories.tsx
  • code/addons/pseudo-states/src/stories/ShadowRootWithPart.stories.tsx
  • code/addons/pseudo-states/src/types.test-d.ts
  • code/addons/pseudo-states/src/types.ts
  • code/addons/pseudo-states/vitest.config.ts
  • code/addons/themes/build-config.ts
  • code/addons/themes/src/constants.ts
  • code/addons/themes/src/decorators/class-name.decorator.tsx
  • code/addons/themes/src/decorators/data-attribute.decorator.tsx
  • code/addons/themes/src/decorators/helpers.ts
  • code/addons/themes/src/decorators/index.ts
  • code/addons/themes/src/decorators/provider.decorator.tsx
  • code/addons/themes/src/index.ts
  • code/addons/themes/src/manager.tsx
  • code/addons/themes/src/preview.ts
  • code/addons/themes/src/theme-switcher.tsx
  • code/addons/themes/vitest.config.ts
  • code/addons/vitest/build-config.ts
  • code/addons/vitest/src/components/Description.tsx
  • code/addons/vitest/src/components/GlobalErrorModal.stories.tsx
  • code/addons/vitest/src/components/GlobalErrorModal.tsx
  • code/addons/vitest/src/components/RelativeTime.stories.tsx
  • code/addons/vitest/src/components/SidebarContextMenu.tsx
  • code/addons/vitest/src/components/TestProviderRender.stories.tsx
  • code/addons/vitest/src/components/TestProviderRender.tsx
  • code/addons/vitest/src/components/TestStatusIcon.stories.tsx
  • code/addons/vitest/src/constants.ts
  • code/addons/vitest/src/logger.ts
  • code/addons/vitest/src/manager-store.mock.ts
  • code/addons/vitest/src/manager-store.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/vitest/src/node/boot-test-runner.test.ts
  • code/addons/vitest/src/node/boot-test-runner.ts
  • code/addons/vitest/src/node/coverage-reporter.ts
  • code/addons/vitest/src/node/reporter.ts
  • code/addons/vitest/src/node/test-manager.test.ts
  • code/addons/vitest/src/node/test-manager.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/node/vitest.ts
  • code/addons/vitest/src/postinstall.test.ts
  • code/addons/vitest/src/postinstall.ts
  • code/addons/vitest/src/preset.ts
  • code/addons/vitest/src/updateVitestFile.config.3.2.test.ts
  • code/addons/vitest/src/updateVitestFile.config.4.test.ts
  • code/addons/vitest/src/updateVitestFile.config.test.ts
  • code/addons/vitest/src/updateVitestFile.config.workspace.test.ts
  • code/addons/vitest/src/updateVitestFile.test.ts
  • code/addons/vitest/src/use-test-provider-state.ts
  • code/addons/vitest/src/utils.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/addons/vitest/src/vitest-plugin/setup-file.test.ts
  • code/addons/vitest/src/vitest-plugin/setup-file.ts
  • code/addons/vitest/src/vitest-plugin/test-utils.ts
  • code/addons/vitest/src/vitest-plugin/utils.ts
  • code/addons/vitest/src/vitest-plugin/viewports.test.ts
  • code/addons/vitest/vitest.config.ts
  • code/builders/builder-vite/build-config.ts
  • code/builders/builder-vite/src/build.ts
  • code/builders/builder-vite/src/codegen-importfn-script.test.ts
  • code/builders/builder-vite/src/codegen-importfn-script.ts
  • code/builders/builder-vite/src/codegen-modern-iframe-script.test.ts
  • code/builders/builder-vite/src/codegen-modern-iframe-script.ts
  • code/builders/builder-vite/src/codegen-project-annotations.ts
  • code/builders/builder-vite/src/index.test.ts
  • code/builders/builder-vite/src/index.ts
  • code/builders/builder-vite/src/plugins/code-generator-plugin.ts
  • code/builders/builder-vite/src/plugins/index.ts
  • code/builders/builder-vite/src/plugins/storybook-entry-plugin.ts
  • code/builders/builder-vite/src/plugins/storybook-external-globals-plugin.test.ts
  • code/builders/builder-vite/src/plugins/storybook-optimize-deps-plugin.test.ts
  • code/builders/builder-vite/src/plugins/storybook-optimize-deps-plugin.ts
  • code/builders/builder-vite/src/plugins/storybook-project-annotations-plugin.ts
  • code/builders/builder-vite/src/plugins/storybook-runtime-plugin.ts
  • code/builders/builder-vite/src/plugins/vite-mock/plugin.ts
  • code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
  • code/builders/builder-vite/src/preset.ts
  • code/builders/builder-vite/src/transform-iframe-html.ts
  • code/builders/builder-vite/src/utils/build-module-graph.test.ts
  • code/builders/builder-vite/src/utils/has-vite-plugins.test.ts
  • code/builders/builder-vite/src/utils/process-preview-annotation.test.ts
  • code/builders/builder-vite/src/utils/without-vite-plugins.test.ts
  • code/builders/builder-vite/src/vite-config.test.ts
  • code/builders/builder-vite/src/vite-config.ts
  • code/builders/builder-vite/src/vite-server.ts
  • code/builders/builder-vite/vitest.config.ts
  • code/builders/builder-webpack5/build-config.ts
  • code/builders/builder-webpack5/src/index.ts

@kasperpeulen kasperpeulen force-pushed the kasper/ts-import-extensions branch 3 times, most recently from 049dcfa to 56d4a80 Compare March 31, 2026 16:28
Copy link
Copy Markdown
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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
code/core/src/common/js-package-manager/Yarn2Proxy.test.ts (1)

21-21: ⚠️ Potential issue | 🟡 Minor

Mismatch between import specifier and mock target.

The import on line 5 uses '../utils/command.ts' with the explicit extension, but the mock target on line 21 still uses the extensionless path '../utils/command'. This inconsistency may cause the mock to fail to intercept the import correctly.

Other test files in this PR (e.g., PNPMProxy.test.ts, Yarn1Proxy.test.ts, NPMProxy.test.ts) use the consistent pattern with vi.mock(import('../utils/command.ts'), { spy: true }).

🔧 Proposed fix to align mock target with import
-vi.mock('../utils/command', { spy: true });
+vi.mock(import('../utils/command.ts'), { spy: true });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@code/core/src/common/js-package-manager/Yarn2Proxy.test.ts` at line 21, The
mock target path for vi.mock doesn't match the test import's specifier; update
the mock to use the exact same module specifier used in the import (use the
explicit extension). Replace the current vi.mock('../utils/command', { spy: true
}) with the consistent form used elsewhere, e.g.
vi.mock(import('../utils/command.ts'), { spy: true }) so the mock correctly
intercepts imports of the module referenced by the tests.
🧹 Nitpick comments (1)
code/core/src/common/utils/setup-addon-in-config.test.ts (1)

7-10: Align vi.mock() specifiers with repo patterns for consistency.

Lines 7–10 import with .ts extensions, but Lines 13–15 use extensionless paths in vi.mock(). While Vite normalizes both forms to the same module, this repository consistently uses extensionless paths in mocks. Aligning to the established pattern improves clarity and consistency.

Note: ./setup-addon-in-config.ts is intentionally not mocked (it's the unit under test).

Suggested improvement
-vi.mock('./sync-main-preview-addons', { spy: true });
-vi.mock('./wrap-getAbsolutePath-utils', { spy: true });
-vi.mock('./load-main-config', { spy: true });
+vi.mock('./sync-main-preview-addons.ts', { spy: true });
+vi.mock('./wrap-getAbsolutePath-utils.ts', { spy: true });
+vi.mock('./load-main-config.ts', { spy: true });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@code/core/src/common/utils/setup-addon-in-config.test.ts` around lines 7 -
10, The imports at the top use .ts extensions (loadMainConfigModule,
setupAddonInConfig, syncModule, wrapUtils) but mocks later use extensionless
module specifiers; update the import specifiers for loadMainConfigModule,
syncModule and wrapUtils to use extensionless paths (e.g. './load-main-config',
'./sync-main-preview-addons', './wrap-getAbsolutePath-utils') to match the repo
mock pattern while leaving setupAddonInConfig untouched since it’s the unit
under test, and ensure vi.mock calls continue to reference the same
extensionless strings.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@code/core/src/common/utils/resolve-path-in-sb-cache.test.ts`:
- Around line 7-8: Update the mock specifier so it exactly matches the import
used in the test: change the vi.mock call that targets '../versions' to use the
same module specifier string as the import (../versions.ts) so the mock is
actually applied to the imported module (affects the vi.mock for the module
providing versions used by resolvePathInStorybookCache).

---

Outside diff comments:
In `@code/core/src/common/js-package-manager/Yarn2Proxy.test.ts`:
- Line 21: The mock target path for vi.mock doesn't match the test import's
specifier; update the mock to use the exact same module specifier used in the
import (use the explicit extension). Replace the current
vi.mock('../utils/command', { spy: true }) with the consistent form used
elsewhere, e.g. vi.mock(import('../utils/command.ts'), { spy: true }) so the
mock correctly intercepts imports of the module referenced by the tests.

---

Nitpick comments:
In `@code/core/src/common/utils/setup-addon-in-config.test.ts`:
- Around line 7-10: The imports at the top use .ts extensions
(loadMainConfigModule, setupAddonInConfig, syncModule, wrapUtils) but mocks
later use extensionless module specifiers; update the import specifiers for
loadMainConfigModule, syncModule and wrapUtils to use extensionless paths (e.g.
'./load-main-config', './sync-main-preview-addons',
'./wrap-getAbsolutePath-utils') to match the repo mock pattern while leaving
setupAddonInConfig untouched since it’s the unit under test, and ensure vi.mock
calls continue to reference the same extensionless strings.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c050730f-c3ed-4e96-8924-bcb926d707d2

📥 Commits

Reviewing files that changed from the base of the PR and between 049dcfa and 56d4a80.

📒 Files selected for processing (300)
  • AGENTS.md
  • code/.eslintrc.js
  • code/.storybook/bench/bench.stories.tsx
  • code/.storybook/preview.tsx
  • code/.storybook/storybook.setup.ts
  • code/addons/a11y/build-config.ts
  • code/addons/a11y/src/a11yRunner.test.ts
  • code/addons/a11y/src/a11yRunner.ts
  • code/addons/a11y/src/a11yRunnerUtils.test.ts
  • code/addons/a11y/src/a11yRunnerUtils.ts
  • code/addons/a11y/src/axeRuleMappingHelper.ts
  • code/addons/a11y/src/components/A11YPanel.stories.tsx
  • code/addons/a11y/src/components/A11YPanel.test.tsx
  • code/addons/a11y/src/components/A11YPanel.tsx
  • code/addons/a11y/src/components/A11yContext.test.tsx
  • code/addons/a11y/src/components/A11yContext.tsx
  • code/addons/a11y/src/components/Report/Details.tsx
  • code/addons/a11y/src/components/Report/Report.stories.tsx
  • code/addons/a11y/src/components/Report/Report.tsx
  • code/addons/a11y/src/components/Tabs.tsx
  • code/addons/a11y/src/components/TestDiscrepancyMessage.stories.tsx
  • code/addons/a11y/src/components/TestDiscrepancyMessage.tsx
  • code/addons/a11y/src/components/VisionSimulator.stories.tsx
  • code/addons/a11y/src/components/VisionSimulator.tsx
  • code/addons/a11y/src/index.ts
  • code/addons/a11y/src/manager.test.tsx
  • code/addons/a11y/src/manager.tsx
  • code/addons/a11y/src/postinstall.ts
  • code/addons/a11y/src/preview.test.tsx
  • code/addons/a11y/src/preview.tsx
  • code/addons/a11y/src/types.ts
  • code/addons/a11y/src/withVisionSimulator.ts
  • code/addons/a11y/vitest.config.ts
  • code/addons/links/build-config.ts
  • code/addons/links/src/index.ts
  • code/addons/links/src/manager.ts
  • code/addons/links/src/preview.ts
  • code/addons/links/src/react/components/link.test.tsx
  • code/addons/links/src/react/components/link.tsx
  • code/addons/links/src/react/index.ts
  • code/addons/links/src/utils.test.ts
  • code/addons/links/src/utils.ts
  • code/addons/links/vitest.config.ts
  • code/addons/onboarding/build-config.ts
  • code/addons/onboarding/example-stories/Button.stories.tsx
  • code/addons/onboarding/src/Onboarding.tsx
  • code/addons/onboarding/src/Survey.tsx
  • code/addons/onboarding/src/components/Confetti/Confetti.stories.tsx
  • code/addons/onboarding/src/components/List/List.stories.tsx
  • code/addons/onboarding/src/components/List/List.tsx
  • code/addons/onboarding/src/components/List/ListItem/ListItem.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx
  • code/addons/onboarding/src/features/SplashScreen/SplashScreen.stories.tsx
  • code/addons/onboarding/src/manager.tsx
  • code/addons/onboarding/src/preset.ts
  • code/addons/onboarding/vitest.config.ts
  • code/addons/pseudo-states/build-config.ts
  • code/addons/pseudo-states/src/index.ts
  • code/addons/pseudo-states/src/manager.ts
  • code/addons/pseudo-states/src/manager/PseudoStateTool.tsx
  • code/addons/pseudo-states/src/preview.ts
  • code/addons/pseudo-states/src/preview/rewriteStyleSheet.test.ts
  • code/addons/pseudo-states/src/preview/rewriteStyleSheet.ts
  • code/addons/pseudo-states/src/preview/splitSelectors.test.ts
  • code/addons/pseudo-states/src/preview/withPseudoState.ts
  • code/addons/pseudo-states/src/stories/Button.stories.tsx
  • code/addons/pseudo-states/src/stories/CSSAtRules.stories.tsx
  • code/addons/pseudo-states/src/stories/CustomElement.stories.tsx
  • code/addons/pseudo-states/src/stories/CustomElementNested.stories.tsx
  • code/addons/pseudo-states/src/stories/CustomElementNested.tsx
  • code/addons/pseudo-states/src/stories/Input.stories.tsx
  • code/addons/pseudo-states/src/stories/NestedRules.stories.tsx
  • code/addons/pseudo-states/src/stories/Portal.stories.tsx
  • code/addons/pseudo-states/src/stories/ShadowRoot.stories.tsx
  • code/addons/pseudo-states/src/stories/ShadowRootWithPart.stories.tsx
  • code/addons/pseudo-states/src/types.test-d.ts
  • code/addons/pseudo-states/src/types.ts
  • code/addons/pseudo-states/vitest.config.ts
  • code/addons/themes/build-config.ts
  • code/addons/themes/src/constants.ts
  • code/addons/themes/src/decorators/class-name.decorator.tsx
  • code/addons/themes/src/decorators/data-attribute.decorator.tsx
  • code/addons/themes/src/decorators/helpers.ts
  • code/addons/themes/src/decorators/index.ts
  • code/addons/themes/src/decorators/provider.decorator.tsx
  • code/addons/themes/src/index.ts
  • code/addons/themes/src/manager.tsx
  • code/addons/themes/src/preview.ts
  • code/addons/themes/src/theme-switcher.tsx
  • code/addons/themes/vitest.config.ts
  • code/addons/vitest/build-config.ts
  • code/addons/vitest/src/components/Description.tsx
  • code/addons/vitest/src/components/GlobalErrorModal.stories.tsx
  • code/addons/vitest/src/components/GlobalErrorModal.tsx
  • code/addons/vitest/src/components/RelativeTime.stories.tsx
  • code/addons/vitest/src/components/SidebarContextMenu.tsx
  • code/addons/vitest/src/components/TestProviderRender.stories.tsx
  • code/addons/vitest/src/components/TestProviderRender.tsx
  • code/addons/vitest/src/components/TestStatusIcon.stories.tsx
  • code/addons/vitest/src/constants.ts
  • code/addons/vitest/src/logger.ts
  • code/addons/vitest/src/manager-store.mock.ts
  • code/addons/vitest/src/manager-store.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/vitest/src/node/boot-test-runner.test.ts
  • code/addons/vitest/src/node/boot-test-runner.ts
  • code/addons/vitest/src/node/coverage-reporter.ts
  • code/addons/vitest/src/node/reporter.ts
  • code/addons/vitest/src/node/test-manager.test.ts
  • code/addons/vitest/src/node/test-manager.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/node/vitest.ts
  • code/addons/vitest/src/postinstall.test.ts
  • code/addons/vitest/src/postinstall.ts
  • code/addons/vitest/src/preset.ts
  • code/addons/vitest/src/updateVitestFile.config.3.2.test.ts
  • code/addons/vitest/src/updateVitestFile.config.4.test.ts
  • code/addons/vitest/src/updateVitestFile.config.test.ts
  • code/addons/vitest/src/updateVitestFile.config.workspace.test.ts
  • code/addons/vitest/src/updateVitestFile.test.ts
  • code/addons/vitest/src/use-test-provider-state.ts
  • code/addons/vitest/src/utils.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/addons/vitest/src/vitest-plugin/setup-file.test.ts
  • code/addons/vitest/src/vitest-plugin/setup-file.ts
  • code/addons/vitest/src/vitest-plugin/test-utils.ts
  • code/addons/vitest/src/vitest-plugin/utils.ts
  • code/addons/vitest/src/vitest-plugin/viewports.test.ts
  • code/addons/vitest/vitest.config.ts
  • code/builders/builder-vite/build-config.ts
  • code/builders/builder-vite/src/build.ts
  • code/builders/builder-vite/src/codegen-importfn-script.test.ts
  • code/builders/builder-vite/src/codegen-importfn-script.ts
  • code/builders/builder-vite/src/codegen-modern-iframe-script.test.ts
  • code/builders/builder-vite/src/codegen-modern-iframe-script.ts
  • code/builders/builder-vite/src/codegen-project-annotations.ts
  • code/builders/builder-vite/src/index.test.ts
  • code/builders/builder-vite/src/index.ts
  • code/builders/builder-vite/src/plugins/code-generator-plugin.ts
  • code/builders/builder-vite/src/plugins/index.ts
  • code/builders/builder-vite/src/plugins/storybook-entry-plugin.ts
  • code/builders/builder-vite/src/plugins/storybook-external-globals-plugin.test.ts
  • code/builders/builder-vite/src/plugins/storybook-optimize-deps-plugin.test.ts
  • code/builders/builder-vite/src/plugins/storybook-optimize-deps-plugin.ts
  • code/builders/builder-vite/src/plugins/storybook-project-annotations-plugin.ts
  • code/builders/builder-vite/src/plugins/storybook-runtime-plugin.ts
  • code/builders/builder-vite/src/plugins/vite-mock/plugin.ts
  • code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
  • code/builders/builder-vite/src/preset.ts
  • code/builders/builder-vite/src/transform-iframe-html.ts
  • code/builders/builder-vite/src/utils/build-module-graph.test.ts
  • code/builders/builder-vite/src/utils/has-vite-plugins.test.ts
  • code/builders/builder-vite/src/utils/process-preview-annotation.test.ts
  • code/builders/builder-vite/src/utils/without-vite-plugins.test.ts
  • code/builders/builder-vite/src/vite-config.test.ts
  • code/builders/builder-vite/src/vite-config.ts
  • code/builders/builder-vite/src/vite-server.ts
  • code/builders/builder-vite/vitest.config.ts
  • code/builders/builder-webpack5/build-config.ts
  • code/builders/builder-webpack5/src/index.ts
  • code/builders/builder-webpack5/src/presets/custom-webpack-preset.ts
  • code/builders/builder-webpack5/src/presets/preview-preset.ts
  • code/builders/builder-webpack5/src/preview/iframe-webpack.config.ts
  • code/builders/builder-webpack5/src/preview/virtual-module-mapping.ts
  • code/builders/builder-webpack5/vitest.config.ts
  • code/core/build-config.ts
  • code/core/scripts/generate-source-files.ts
  • code/core/src/__tests/preview-errors.test.ts
  • code/core/src/__tests/server-errors.test.ts
  • code/core/src/__tests/storybook-error.test.ts
  • code/core/src/actions/addArgs.ts
  • code/core/src/actions/addArgsHelpers.test.ts
  • code/core/src/actions/addArgsHelpers.ts
  • code/core/src/actions/components/ActionLogger/index.tsx
  • code/core/src/actions/components/Title.tsx
  • code/core/src/actions/containers/ActionLogger/index.tsx
  • code/core/src/actions/decorator.ts
  • code/core/src/actions/index.ts
  • code/core/src/actions/loaders.ts
  • code/core/src/actions/manager.tsx
  • code/core/src/actions/models/ActionDisplay.ts
  • code/core/src/actions/models/ActionsFunction.ts
  • code/core/src/actions/models/ActionsMap.ts
  • code/core/src/actions/models/HandlerFunction.test-d.ts
  • code/core/src/actions/models/index.ts
  • code/core/src/actions/preview.ts
  • code/core/src/actions/runtime/action.ts
  • code/core/src/actions/runtime/actions.ts
  • code/core/src/actions/runtime/configureActions.ts
  • code/core/src/actions/runtime/index.ts
  • code/core/src/babel/expression-resolver.test.ts
  • code/core/src/babel/index.ts
  • code/core/src/babel/vitest-config-helpers.test.ts
  • code/core/src/babel/vitest-config-helpers.ts
  • code/core/src/backgrounds/components/Tool.tsx
  • code/core/src/backgrounds/decorator.ts
  • code/core/src/backgrounds/defaults.ts
  • code/core/src/backgrounds/manager.tsx
  • code/core/src/backgrounds/preview.ts
  • code/core/src/backgrounds/types.ts
  • code/core/src/bin/core.ts
  • code/core/src/bin/dispatcher.ts
  • code/core/src/bin/loader.test.ts
  • code/core/src/bin/loader.ts
  • code/core/src/builder-manager/index.ts
  • code/core/src/builder-manager/utils/data.ts
  • code/core/src/builder-manager/utils/files.test.ts
  • code/core/src/builder-manager/utils/files.ts
  • code/core/src/builder-manager/utils/template.ts
  • code/core/src/channels/index.test.ts
  • code/core/src/channels/index.ts
  • code/core/src/channels/main.ts
  • code/core/src/channels/postmessage/index.ts
  • code/core/src/channels/websocket/index.ts
  • code/core/src/cli/AddonVitestService.constants.ts
  • code/core/src/cli/AddonVitestService.test.ts
  • code/core/src/cli/AddonVitestService.ts
  • code/core/src/cli/NpmOptions.ts
  • code/core/src/cli/dirs.ts
  • code/core/src/cli/eslintPlugin.test.ts
  • code/core/src/cli/eslintPlugin.ts
  • code/core/src/cli/globalSettings.test.ts
  • code/core/src/cli/globalSettings.ts
  • code/core/src/cli/helpers.test.ts
  • code/core/src/cli/helpers.ts
  • code/core/src/cli/index.ts
  • code/core/src/client-logger/index.test.ts
  • code/core/src/common/config.test.ts
  • code/core/src/common/index.ts
  • code/core/src/common/js-package-manager/BUNProxy.ts
  • code/core/src/common/js-package-manager/JsPackageManager.test.ts
  • code/core/src/common/js-package-manager/JsPackageManager.ts
  • code/core/src/common/js-package-manager/JsPackageManagerFactory.test.ts
  • code/core/src/common/js-package-manager/JsPackageManagerFactory.ts
  • code/core/src/common/js-package-manager/NPMProxy.test.ts
  • code/core/src/common/js-package-manager/NPMProxy.ts
  • code/core/src/common/js-package-manager/PNPMProxy.test.ts
  • code/core/src/common/js-package-manager/PNPMProxy.ts
  • code/core/src/common/js-package-manager/Yarn1Proxy.test.ts
  • code/core/src/common/js-package-manager/Yarn1Proxy.ts
  • code/core/src/common/js-package-manager/Yarn2Proxy.test.ts
  • code/core/src/common/js-package-manager/Yarn2Proxy.ts
  • code/core/src/common/js-package-manager/index.ts
  • code/core/src/common/presets.test.ts
  • code/core/src/common/presets.ts
  • code/core/src/common/utils/__tests__/interpret-files.test.ts
  • code/core/src/common/utils/__tests__/normalize-stories.test.ts
  • code/core/src/common/utils/__tests__/paths.test.ts
  • code/core/src/common/utils/__tests__/template.test.ts
  • code/core/src/common/utils/cache.ts
  • code/core/src/common/utils/cli.test.ts
  • code/core/src/common/utils/cli.ts
  • code/core/src/common/utils/envs.ts
  • code/core/src/common/utils/file-cache.ts
  • code/core/src/common/utils/formatter.test.ts
  • code/core/src/common/utils/get-addon-annotations.test.ts
  • code/core/src/common/utils/get-addon-annotations.ts
  • code/core/src/common/utils/get-addon-names.test.ts
  • code/core/src/common/utils/get-addon-names.ts
  • code/core/src/common/utils/get-framework-name.test.ts
  • code/core/src/common/utils/get-framework-name.ts
  • code/core/src/common/utils/get-renderer-name.test.ts
  • code/core/src/common/utils/get-renderer-name.ts
  • code/core/src/common/utils/get-story-id.test.ts
  • code/core/src/common/utils/get-story-id.ts
  • code/core/src/common/utils/get-storybook-configuration.test.ts
  • code/core/src/common/utils/get-storybook-info.ts
  • code/core/src/common/utils/get-storybook-refs.test.ts
  • code/core/src/common/utils/get-storybook-refs.ts
  • code/core/src/common/utils/interpret-require.ts
  • code/core/src/common/utils/load-main-config.ts
  • code/core/src/common/utils/load-manager-or-addons-file.ts
  • code/core/src/common/utils/load-preview-or-config-file.ts
  • code/core/src/common/utils/normalize-path.test.ts
  • code/core/src/common/utils/normalize-stories.ts
  • code/core/src/common/utils/paths.ts
  • code/core/src/common/utils/posix.test.ts
  • code/core/src/common/utils/remove.ts
  • code/core/src/common/utils/resolve-path-in-sb-cache.test.ts
  • code/core/src/common/utils/resolve-path-in-sb-cache.ts
  • code/core/src/common/utils/scan-and-transform-files.test.ts
  • code/core/src/common/utils/scan-and-transform-files.ts
  • code/core/src/common/utils/setup-addon-in-config.test.ts
  • code/core/src/common/utils/setup-addon-in-config.ts
  • code/core/src/common/utils/sync-main-preview-addons.test.ts
  • code/core/src/common/utils/sync-main-preview-addons.ts
  • code/core/src/common/utils/template.ts
  • code/core/src/common/utils/transform-imports.test.ts
  • code/core/src/common/utils/utils.test.ts
  • code/core/src/common/utils/validate-config.test.ts
  • code/core/src/common/utils/validate-config.ts
  • code/core/src/common/utils/validate-configuration-files.ts
  • code/core/src/common/utils/write-file-with-retry.test.ts
  • code/core/src/component-testing/components/DetachedDebuggerMessage.tsx
  • code/core/src/component-testing/components/EmptyState.tsx
  • code/core/src/component-testing/components/Interaction.stories.tsx
  • code/core/src/component-testing/components/Interaction.tsx
  • code/core/src/component-testing/components/InteractionsPanel.stories.tsx
  • code/core/src/component-testing/components/InteractionsPanel.tsx
✅ Files skipped from review due to trivial changes (270)
  • code/core/src/common/utils/resolve-path-in-sb-cache.ts
  • code/addons/pseudo-states/src/manager/PseudoStateTool.tsx
  • code/addons/links/src/manager.ts
  • code/addons/links/src/react/index.ts
  • code/core/src/common/utils/utils.test.ts
  • code/core/src/common/utils/posix.test.ts
  • code/core/src/common/utils/file-cache.ts
  • code/core/src/common/utils/sync-main-preview-addons.test.ts
  • code/core/src/common/utils/formatter.test.ts
  • code/addons/a11y/src/types.ts
  • code/addons/pseudo-states/src/preview.ts
  • code/addons/pseudo-states/src/stories/Button.stories.tsx
  • code/core/src/common/utils/get-storybook-refs.test.ts
  • code/core/src/common/utils/cli.test.ts
  • code/core/src/common/utils/get-addon-names.test.ts
  • code/core/src/common/js-package-manager/index.ts
  • code/core/src/common/js-package-manager/Yarn2Proxy.ts
  • code/core/src/cli/helpers.test.ts
  • code/addons/a11y/vitest.config.ts
  • code/addons/pseudo-states/src/stories/CSSAtRules.stories.tsx
  • code/core/src/common/js-package-manager/Yarn1Proxy.ts
  • code/core/src/common/utils/remove.ts
  • code/core/src/common/utils/load-preview-or-config-file.ts
  • code/core/src/common/utils/setup-addon-in-config.ts
  • code/addons/a11y/build-config.ts
  • code/addons/onboarding/src/components/Confetti/Confetti.stories.tsx
  • code/addons/a11y/src/components/VisionSimulator.tsx
  • code/addons/a11y/src/components/TestDiscrepancyMessage.tsx
  • code/addons/onboarding/src/preset.ts
  • code/addons/links/src/utils.ts
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.tsx
  • code/addons/a11y/src/a11yRunner.test.ts
  • code/addons/a11y/src/components/Report/Report.stories.tsx
  • code/core/src/common/utils/get-renderer-name.ts
  • code/core/src/common/utils/validate-config.ts
  • code/core/src/common/utils/tests/interpret-files.test.ts
  • code/addons/pseudo-states/src/stories/CustomElement.stories.tsx
  • code/addons/pseudo-states/src/stories/Input.stories.tsx
  • code/addons/a11y/src/components/Tabs.tsx
  • code/addons/pseudo-states/src/stories/CustomElementNested.stories.tsx
  • code/addons/links/src/preview.ts
  • code/addons/onboarding/src/components/List/ListItem/ListItem.tsx
  • code/core/src/common/utils/get-storybook-configuration.test.ts
  • code/addons/onboarding/src/components/List/List.stories.tsx
  • code/core/src/common/utils/sync-main-preview-addons.ts
  • code/core/src/common/utils/get-storybook-info.ts
  • code/addons/a11y/src/components/TestDiscrepancyMessage.stories.tsx
  • code/addons/pseudo-states/src/preview/rewriteStyleSheet.ts
  • code/addons/a11y/src/components/A11YPanel.stories.tsx
  • code/addons/a11y/src/preview.test.tsx
  • code/addons/pseudo-states/src/types.ts
  • code/addons/themes/src/manager.tsx
  • code/addons/a11y/src/components/VisionSimulator.stories.tsx
  • code/addons/onboarding/vitest.config.ts
  • code/addons/pseudo-states/src/preview/splitSelectors.test.ts
  • code/addons/onboarding/src/Survey.tsx
  • code/addons/links/src/react/components/link.test.tsx
  • code/addons/themes/src/decorators/helpers.ts
  • code/core/src/common/js-package-manager/BUNProxy.ts
  • code/addons/a11y/src/components/A11YPanel.tsx
  • code/addons/a11y/src/axeRuleMappingHelper.ts
  • code/addons/onboarding/build-config.ts
  • code/addons/themes/src/preview.ts
  • code/addons/a11y/src/postinstall.ts
  • code/addons/a11y/src/manager.test.tsx
  • code/addons/vitest/src/components/GlobalErrorModal.tsx
  • code/.storybook/storybook.setup.ts
  • code/addons/a11y/src/a11yRunner.ts
  • code/addons/a11y/src/a11yRunnerUtils.test.ts
  • code/addons/pseudo-states/src/manager.ts
  • code/addons/a11y/src/a11yRunnerUtils.ts
  • code/addons/onboarding/src/features/SplashScreen/SplashScreen.stories.tsx
  • code/addons/onboarding/example-stories/Button.stories.tsx
  • code/addons/pseudo-states/src/stories/Portal.stories.tsx
  • code/addons/links/build-config.ts
  • code/addons/themes/src/decorators/data-attribute.decorator.tsx
  • code/addons/themes/src/decorators/index.ts
  • code/addons/themes/build-config.ts
  • code/addons/a11y/src/components/Report/Report.tsx
  • code/addons/onboarding/src/features/IntentSurvey/IntentSurvey.stories.tsx
  • code/addons/onboarding/src/components/List/List.tsx
  • code/addons/pseudo-states/vitest.config.ts
  • code/addons/vitest/src/components/GlobalErrorModal.stories.tsx
  • code/addons/a11y/src/preview.tsx
  • code/addons/pseudo-states/src/types.test-d.ts
  • code/addons/links/src/react/components/link.tsx
  • code/addons/themes/src/decorators/provider.decorator.tsx
  • code/addons/vitest/build-config.ts
  • code/addons/pseudo-states/src/preview/rewriteStyleSheet.test.ts
  • code/addons/a11y/src/components/A11yContext.test.tsx
  • code/addons/vitest/src/components/Description.tsx
  • code/addons/themes/src/index.ts
  • code/addons/pseudo-states/src/stories/NestedRules.stories.tsx
  • code/addons/vitest/src/components/TestStatusIcon.stories.tsx
  • code/addons/vitest/src/node/boot-test-runner.test.ts
  • code/addons/links/vitest.config.ts
  • code/addons/vitest/src/components/TestProviderRender.tsx
  • code/addons/themes/vitest.config.ts
  • code/addons/pseudo-states/src/preview/withPseudoState.ts
  • code/.storybook/preview.tsx
  • code/addons/a11y/src/withVisionSimulator.ts
  • code/addons/pseudo-states/src/index.ts
  • code/.storybook/bench/bench.stories.tsx
  • code/addons/pseudo-states/src/stories/CustomElementNested.tsx
  • code/addons/themes/src/decorators/class-name.decorator.tsx
  • code/core/src/babel/vitest-config-helpers.ts
  • code/addons/vitest/src/node/test-manager.ts
  • code/addons/vitest/src/node/coverage-reporter.ts
  • code/addons/vitest/src/manager-store.ts
  • code/addons/vitest/src/updateVitestFile.test.ts
  • code/addons/vitest/src/components/SidebarContextMenu.tsx
  • code/addons/themes/src/constants.ts
  • code/addons/vitest/src/components/TestProviderRender.stories.tsx
  • code/core/src/actions/index.ts
  • code/addons/vitest/src/node/test-manager.test.ts
  • code/addons/vitest/src/node/vitest.ts
  • code/addons/vitest/src/constants.ts
  • code/addons/vitest/src/components/RelativeTime.stories.tsx
  • code/addons/pseudo-states/build-config.ts
  • code/addons/vitest/src/node/reporter.ts
  • code/core/src/actions/loaders.ts
  • code/addons/vitest/src/postinstall.test.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/vitest/src/updateVitestFile.config.workspace.test.ts
  • code/addons/themes/src/theme-switcher.tsx
  • code/addons/vitest/src/logger.ts
  • code/addons/vitest/src/updateVitestFile.config.test.ts
  • code/core/src/backgrounds/defaults.ts
  • code/core/src/babel/expression-resolver.test.ts
  • code/builders/builder-vite/src/plugins/storybook-optimize-deps-plugin.test.ts
  • code/core/src/actions/addArgsHelpers.ts
  • code/addons/vitest/vitest.config.ts
  • code/core/src/actions/addArgs.ts
  • code/core/src/backgrounds/components/Tool.tsx
  • code/addons/a11y/src/components/A11YPanel.test.tsx
  • code/addons/a11y/src/index.ts
  • code/builders/builder-vite/src/plugins/storybook-project-annotations-plugin.ts
  • code/addons/vitest/src/updateVitestFile.config.3.2.test.ts
  • code/addons/vitest/src/preset.ts
  • code/core/src/actions/runtime/action.ts
  • code/core/src/actions/models/ActionsFunction.ts
  • code/addons/vitest/src/node/boot-test-runner.ts
  • code/builders/builder-vite/src/utils/build-module-graph.test.ts
  • code/addons/vitest/src/updateVitestFile.config.4.test.ts
  • code/core/src/__tests/server-errors.test.ts
  • code/addons/a11y/src/manager.tsx
  • code/builders/builder-webpack5/src/presets/preview-preset.ts
  • code/builders/builder-vite/src/vite-config.test.ts
  • code/builders/builder-vite/src/vite-config.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/core/src/actions/models/index.ts
  • code/builders/builder-vite/src/plugins/storybook-runtime-plugin.ts
  • code/core/src/actions/runtime/configureActions.ts
  • code/core/src/backgrounds/manager.tsx
  • code/builders/builder-webpack5/src/preview/iframe-webpack.config.ts
  • code/builders/builder-vite/src/index.ts
  • code/core/src/actions/manager.tsx
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/actions/models/ActionsMap.ts
  • code/addons/pseudo-states/src/stories/ShadowRoot.stories.tsx
  • code/core/src/actions/addArgsHelpers.test.ts
  • code/core/src/babel/vitest-config-helpers.test.ts
  • code/addons/vitest/src/vitest-plugin/test-utils.ts
  • code/builders/builder-vite/src/codegen-project-annotations.ts
  • code/addons/onboarding/src/Onboarding.tsx
  • code/addons/vitest/src/vitest-plugin/viewports.test.ts
  • code/addons/vitest/src/use-test-provider-state.ts
  • code/builders/builder-vite/src/preset.ts
  • code/addons/links/src/index.ts
  • code/builders/builder-vite/src/plugins/code-generator-plugin.ts
  • code/builders/builder-vite/src/transform-iframe-html.ts
  • code/builders/builder-webpack5/build-config.ts
  • code/addons/vitest/src/vitest-plugin/setup-file.test.ts
  • code/core/src/actions/components/Title.tsx
  • code/builders/builder-vite/src/utils/without-vite-plugins.test.ts
  • code/core/src/component-testing/components/Interaction.tsx
  • code/core/src/__tests/storybook-error.test.ts
  • code/core/src/channels/main.ts
  • code/builders/builder-vite/src/codegen-importfn-script.ts
  • code/addons/vitest/src/vitest-plugin/setup-file.ts
  • code/core/src/builder-manager/utils/files.test.ts
  • code/builders/builder-vite/src/codegen-modern-iframe-script.test.ts
  • code/builders/builder-webpack5/src/index.ts
  • code/builders/builder-webpack5/vitest.config.ts
  • code/builders/builder-vite/src/build.ts
  • code/builders/builder-vite/src/utils/has-vite-plugins.test.ts
  • code/builders/builder-vite/build-config.ts
  • code/builders/builder-webpack5/src/presets/custom-webpack-preset.ts
  • code/addons/vitest/src/vitest-plugin/utils.ts
  • code/addons/pseudo-states/src/stories/ShadowRootWithPart.stories.tsx
  • code/builders/builder-vite/src/plugins/storybook-entry-plugin.ts
  • code/core/src/channels/index.test.ts
  • code/core/src/builder-manager/utils/files.ts
  • code/core/src/channels/websocket/index.ts
  • code/core/src/channels/postmessage/index.ts
  • code/addons/vitest/src/manager-store.mock.ts
  • code/addons/onboarding/src/manager.tsx
  • code/addons/vitest/src/postinstall.ts
  • code/core/src/bin/dispatcher.ts
  • code/builders/builder-vite/src/plugins/webpack-stats-plugin.ts
  • code/core/src/component-testing/components/EmptyState.tsx
  • code/core/src/cli/dirs.ts
  • code/builders/builder-vite/src/plugins/storybook-external-globals-plugin.test.ts
  • code/builders/builder-vite/src/vite-server.ts
  • code/builders/builder-vite/src/utils/process-preview-annotation.test.ts
  • code/core/src/cli/NpmOptions.ts
  • code/core/src/actions/runtime/actions.ts
  • code/core/src/backgrounds/preview.ts
  • code/core/src/actions/components/ActionLogger/index.tsx
  • code/core/src/common/utils/scan-and-transform-files.ts
  • code/core/src/cli/AddonVitestService.test.ts
  • code/builders/builder-vite/src/plugins/vite-mock/plugin.ts
  • code/core/src/__tests/preview-errors.test.ts
  • code/builders/builder-vite/src/codegen-modern-iframe-script.ts
  • code/core/src/actions/preview.ts
  • code/core/src/actions/models/HandlerFunction.test-d.ts
  • code/core/src/common/utils/validate-configuration-files.ts
  • code/core/src/cli/AddonVitestService.constants.ts
  • code/core/src/common/utils/get-renderer-name.test.ts
  • code/core/src/common/js-package-manager/PNPMProxy.ts
  • code/core/src/cli/helpers.ts
  • code/core/src/common/utils/tests/paths.test.ts
  • code/core/src/common/utils/template.ts
  • code/core/src/builder-manager/utils/data.ts
  • code/core/src/common/utils/get-addon-annotations.test.ts
  • code/core/src/common/utils/validate-config.test.ts
  • code/addons/links/src/utils.test.ts
  • code/builders/builder-vite/src/codegen-importfn-script.test.ts
  • code/core/build-config.ts
  • code/core/src/actions/containers/ActionLogger/index.tsx
  • code/core/src/cli/AddonVitestService.ts
  • code/core/src/common/utils/normalize-stories.ts
  • code/core/src/component-testing/components/Interaction.stories.tsx
  • code/addons/a11y/src/components/A11yContext.tsx
  • code/core/src/bin/loader.test.ts
  • code/core/src/common/utils/scan-and-transform-files.test.ts
  • code/core/src/client-logger/index.test.ts
  • code/core/src/common/utils/get-framework-name.test.ts
  • code/core/src/cli/eslintPlugin.test.ts
  • code/core/src/common/utils/get-addon-annotations.ts
  • code/core/src/common/js-package-manager/JsPackageManager.test.ts
  • code/core/src/backgrounds/decorator.ts
  • code/core/src/cli/globalSettings.test.ts
  • code/core/src/common/utils/envs.ts
  • code/core/src/common/utils/cache.ts
  • code/core/src/common/utils/get-addon-names.ts
  • code/builders/builder-vite/src/plugins/index.ts
  • code/core/src/common/utils/get-framework-name.ts
  • code/core/src/common/utils/tests/normalize-stories.test.ts
  • code/core/src/common/config.test.ts
  • code/core/src/common/presets.ts
  • code/core/src/common/utils/write-file-with-retry.test.ts
  • code/core/src/common/utils/normalize-path.test.ts
  • code/core/src/common/presets.test.ts
  • code/core/src/common/js-package-manager/JsPackageManagerFactory.test.ts
  • code/core/src/common/utils/get-story-id.ts
  • code/core/src/common/utils/load-manager-or-addons-file.ts
  • code/core/src/common/utils/interpret-require.ts
  • code/core/src/component-testing/components/InteractionsPanel.stories.tsx
  • code/core/src/actions/runtime/index.ts
  • code/core/src/common/js-package-manager/JsPackageManager.ts
  • code/builders/builder-vite/src/plugins/storybook-optimize-deps-plugin.ts
  • AGENTS.md
  • code/core/src/common/utils/cli.ts
  • code/core/src/component-testing/components/DetachedDebuggerMessage.tsx
  • code/core/src/cli/index.ts
  • code/addons/vitest/src/utils.ts
  • code/core/src/common/utils/load-main-config.ts
  • code/builders/builder-vite/vitest.config.ts
  • code/core/src/common/utils/tests/template.test.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • code/.eslintrc.js
  • code/addons/a11y/src/components/Report/Details.tsx
  • code/builders/builder-vite/src/index.test.ts

Comment thread code/core/src/common/utils/resolve-path-in-sb-cache.test.ts
@kasperpeulen kasperpeulen force-pushed the kasper/ts-import-extensions branch from 56d4a80 to ca67671 Compare March 31, 2026 16:44
@kasperpeulen kasperpeulen reopened this Mar 31, 2026
@kasperpeulen kasperpeulen force-pushed the kasper/ts-import-extensions branch 6 times, most recently from 5550b30 to 2e035f0 Compare April 1, 2026 10:47
@kasperpeulen kasperpeulen force-pushed the kasper/ts-import-extensions branch from 2e035f0 to d7078fe Compare April 1, 2026 10:58
@kasperpeulen kasperpeulen force-pushed the kasper/ts-import-extensions branch from d7078fe to d2d1bc6 Compare April 1, 2026 11:34
…nsions

# Conflicts:
#	code/builders/builder-vite/src/index.ts
#	code/core/src/core-server/dev-server.ts
#	code/core/src/manager-api/modules/stories.ts
#	code/core/src/manager-api/tests/stories.test.ts
#	code/core/src/manager/components/preview/tools/addons.tsx
#	code/core/src/manager/components/preview/tools/menu.tsx
#	code/core/src/manager/components/sidebar/Filter.stories.tsx
#	code/core/src/manager/components/sidebar/Filter.story-helpers.tsx
#	code/core/src/manager/components/sidebar/Filter.tsx
#	code/core/src/manager/components/sidebar/FilterPanel.stories.tsx
#	code/core/src/manager/components/sidebar/Sidebar.tsx
#	code/core/src/manager/components/sidebar/TagsFilterPanel.tsx
@nx-cloud
Copy link
Copy Markdown

nx-cloud Bot commented Apr 1, 2026

View your CI Pipeline Execution ↗ for commit 4c95059

Command Status Duration Result
nx run-many -t compile,check,knip,test,lint,fmt... ✅ Succeeded 6m 24s View ↗

☁️ Nx Cloud last updated this comment at 2026-04-01 14:35:02 UTC

@kasperpeulen kasperpeulen merged commit 95aa114 into next Apr 1, 2026
124 checks passed
@kasperpeulen kasperpeulen deleted the kasper/ts-import-extensions branch April 1, 2026 14:58
@github-actions github-actions Bot mentioned this pull request Apr 1, 2026
9 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build Internal-facing build tooling & test updates ci:normal

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants