diff --git a/code/lib/cli/package.json b/code/lib/cli/package.json index e40de7032657..4ffce1dd476d 100644 --- a/code/lib/cli/package.json +++ b/code/lib/cli/package.json @@ -101,6 +101,7 @@ "@types/semver": "^7.3.4", "@types/shelljs": "^0.8.7", "@types/util-deprecate": "^1.0.0", + "slash": "^5.0.0", "strip-json-comments": "^3.1.1", "typescript": "~4.9.3" }, diff --git a/code/lib/cli/src/automigrate/fixes/mdx-gfm.test.ts b/code/lib/cli/src/automigrate/fixes/mdx-gfm.test.ts index b9143dd8f28d..55ec1971e7c3 100644 --- a/code/lib/cli/src/automigrate/fixes/mdx-gfm.test.ts +++ b/code/lib/cli/src/automigrate/fixes/mdx-gfm.test.ts @@ -3,6 +3,11 @@ import type { PackageJson } from '../../js-package-manager'; import { makePackageManager, mockStorybookData } from '../helpers/testing-helpers'; import { mdxgfm } from './mdx-gfm'; +jest.mock('globby', () => ({ + __esModule: true, + default: jest.fn().mockResolvedValue(['a/fake/file.mdx']), +})); + const check = async ({ packageJson, main: mainConfig, @@ -88,7 +93,9 @@ describe('continue', () => { await expect( check({ packageJson, - main: {}, + main: { + stories: ['**/*.stories.mdx'], + }, }) ).resolves.toBeTruthy(); }); @@ -97,6 +104,7 @@ describe('continue', () => { check({ packageJson, main: { + stories: ['**/*.stories.mdx'], addons: [ { name: '@storybook/addon-essentials', @@ -118,6 +126,7 @@ describe('continue', () => { check({ packageJson, main: { + stories: ['**/*.stories.mdx'], addons: ['@storybook/addon-essentials'], }, }) diff --git a/code/lib/cli/src/automigrate/fixes/mdx-gfm.ts b/code/lib/cli/src/automigrate/fixes/mdx-gfm.ts index 97e6b3f65e47..e4f0f6b8b7cd 100644 --- a/code/lib/cli/src/automigrate/fixes/mdx-gfm.ts +++ b/code/lib/cli/src/automigrate/fixes/mdx-gfm.ts @@ -1,5 +1,8 @@ import { dedent } from 'ts-dedent'; import semver from 'semver'; +import { join } from 'path'; +import slash from 'slash'; +import glob from 'globby'; import { getStorybookData, updateMainConfig } from '../helpers/mainConfigFile'; import type { Fix } from '../types'; import { getStorybookVersionSpecifier } from '../../helpers'; @@ -22,9 +25,27 @@ export const mdxgfm: Fix = { return null; } + const hasMDXFiles = await mainConfig?.stories?.reduce(async (acc, item) => { + const val = await acc; + + if (val === true) { + return true; + } + + const pattern = + typeof item === 'string' + ? slash(join(configDir, item)) + : slash(join(configDir, item.directory, item.files)); + + const files = await glob(pattern); + + return files.some((f) => f.endsWith('.mdx')); + }, Promise.resolve(false)); + const usesMDX1 = mainConfig?.features?.legacyMdx1 === true || false; const skip = usesMDX1 || + !hasMDXFiles || !!mainConfig.addons?.find((item) => { if (item === '@storybook/addon-mdx-gfm') { return true; diff --git a/code/yarn.lock b/code/yarn.lock index 173a23b9ea72..1d668c8c55b4 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -5745,6 +5745,7 @@ __metadata: semver: ^7.3.7 shelljs: ^0.8.5 simple-update-notifier: ^1.0.0 + slash: ^5.0.0 strip-json-comments: ^3.1.1 tempy: ^1.0.1 ts-dedent: ^2.0.0