diff --git a/code/core/src/common/utils/get-addon-names.test.ts b/code/core/src/common/utils/get-addon-names.test.ts index 7cfd1db63849..182426948dfe 100644 --- a/code/core/src/common/utils/get-addon-names.test.ts +++ b/code/core/src/common/utils/get-addon-names.test.ts @@ -42,6 +42,18 @@ describe('getAddonNames', () => { expect(result).toEqual(['@storybook/addon-highlight', '@storybook/addon-outline']); }); + it('should extract addon names from windows absolute paths', () => { + const config = { + stories: [], + addons: [ + '\\sandbox\\react-vite-default-ts\\node_modules\\@storybook\\addon-highlight', + '\\sandbox\\react-vite-default-ts\\node_modules\\@storybook\\addon-outline', + ], + }; + const result = getAddonNames(config); + expect(result).toEqual(['@storybook/addon-highlight', '@storybook/addon-outline']); + }); + it('should extract addon names from pnpm paths', () => { const config = { stories: [], diff --git a/code/core/src/common/utils/get-addon-names.ts b/code/core/src/common/utils/get-addon-names.ts index 0c763cf5b271..98d0f3b9ee1a 100644 --- a/code/core/src/common/utils/get-addon-names.ts +++ b/code/core/src/common/utils/get-addon-names.ts @@ -1,5 +1,7 @@ import type { StorybookConfig } from 'storybook/internal/types'; +import { normalizePath } from './normalize-path'; + export const getAddonNames = (mainConfig: StorybookConfig): string[] => { const addons = mainConfig.addons || []; const addonList = addons.map((addon) => { @@ -14,6 +16,9 @@ export const getAddonNames = (mainConfig: StorybookConfig): string[] => { return undefined; } + // Ensure posix paths for plugin name sniffing + name = normalizePath(name); + // For absolute paths, pnpm and yarn pnp, // Remove everything before and including "node_modules/" name = name.replace(/.*node_modules\//, '');