Skip to content

Commit d6d2191

Browse files
authored
Merge pull request #32142 from storybookjs/valentin/init-storybook-without-mdx-stories
Init: Exclude mdx stories when docs feature isn't selected during init
2 parents 4ee521b + 2875061 commit d6d2191

File tree

5 files changed

+52
-20
lines changed

5 files changed

+52
-20
lines changed

code/lib/create-storybook/src/generators/NUXT/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import { baseGenerator } from '../baseGenerator';
22
import type { Generator } from '../types';
33

44
const generator: Generator = async (packageManager, npmOptions, options) => {
5+
const extraStories = options.features.includes('docs') ? ['../components/**/*.mdx'] : [];
6+
7+
extraStories.push('../components/**/*.stories.@(js|jsx|ts|tsx|mdx)');
8+
59
await baseGenerator(
610
packageManager,
711
{
@@ -16,7 +20,7 @@ const generator: Generator = async (packageManager, npmOptions, options) => {
1620
installFrameworkPackages: false,
1721
componentsDestinationPath: './components',
1822
extraMain: {
19-
stories: ['../components/**/*.mdx', '../components/**/*.stories.@(js|jsx|ts|tsx|mdx)'],
23+
stories: extraStories,
2024
},
2125
},
2226
'nuxt'

code/lib/create-storybook/src/generators/baseGenerator.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,7 @@ export async function baseGenerator(
419419
name: frameworkPackagePath,
420420
options: options.framework || {},
421421
},
422+
features,
422423
frameworkPackage,
423424
prefixes,
424425
storybookConfigFolder,

code/lib/create-storybook/src/generators/configure.test.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ describe('configureMain', () => {
2626
name: '@storybook/react-vite',
2727
},
2828
frameworkPackage: '@storybook/react-vite',
29+
features: [],
2930
});
3031

3132
const { calls } = vi.mocked(fsp.writeFile).mock;
@@ -38,7 +39,6 @@ describe('configureMain', () => {
3839
/** @type { import('@storybook/react-vite').StorybookConfig } */
3940
const config = {
4041
"stories": [
41-
"../stories/**/*.mdx",
4242
"../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)"
4343
],
4444
"addons": [],
@@ -50,7 +50,7 @@ describe('configureMain', () => {
5050
`);
5151
});
5252

53-
it('should generate main.ts', async () => {
53+
it('should generate main.ts with docs feature', async () => {
5454
await configureMain({
5555
language: SupportedLanguage.TYPESCRIPT,
5656
addons: [],
@@ -60,6 +60,7 @@ describe('configureMain', () => {
6060
name: '@storybook/react-vite',
6161
},
6262
frameworkPackage: '@storybook/react-vite',
63+
features: ['docs'],
6364
});
6465

6566
const { calls } = vi.mocked(fsp.writeFile).mock;
@@ -83,6 +84,39 @@ describe('configureMain', () => {
8384
`);
8485
});
8586

87+
it('should generate main.ts without docs feature', async () => {
88+
await configureMain({
89+
language: SupportedLanguage.TYPESCRIPT,
90+
addons: [],
91+
prefixes: [],
92+
storybookConfigFolder: '.storybook',
93+
framework: {
94+
name: '@storybook/react-vite',
95+
},
96+
frameworkPackage: '@storybook/react-vite',
97+
features: [],
98+
});
99+
100+
const { calls } = vi.mocked(fsp.writeFile).mock;
101+
const [mainConfigPath, mainConfigContent] = calls[0];
102+
103+
expect(mainConfigPath).toEqual('./.storybook/main.ts');
104+
expect(mainConfigContent).toMatchInlineSnapshot(`
105+
"import type { StorybookConfig } from '@storybook/react-vite';
106+
107+
const config: StorybookConfig = {
108+
"stories": [
109+
"../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)"
110+
],
111+
"addons": [],
112+
"framework": {
113+
"name": "@storybook/react-vite"
114+
}
115+
};
116+
export default config;"
117+
`);
118+
});
119+
86120
it('should handle resolved paths in pnp', async () => {
87121
await configureMain({
88122
language: SupportedLanguage.JAVASCRIPT,
@@ -96,6 +130,7 @@ describe('configureMain', () => {
96130
name: "%%path.dirname(require.resolve(path.join('@storybook/react-webpack5', 'package.json')))%%",
97131
},
98132
frameworkPackage: '@storybook/react-webpack5',
133+
features: ['docs'],
99134
});
100135

101136
const { calls } = vi.mocked(fsp.writeFile).mock;

code/lib/create-storybook/src/generators/configure.ts

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { dedent } from 'ts-dedent';
55

66
import { SupportedLanguage } from '../../../../core/src/cli/project_types';
77
import { logger } from '../../../../core/src/node-logger';
8+
import type { GeneratorFeature } from './types';
89

910
interface ConfigureMainOptions {
1011
addons: string[];
@@ -14,6 +15,7 @@ interface ConfigureMainOptions {
1415
language: SupportedLanguage;
1516
prefixes: string[];
1617
frameworkPackage: string;
18+
features: GeneratorFeature[];
1719
/**
1820
* Extra values for main.js
1921
*
@@ -42,34 +44,24 @@ const pathExists = async (path: string) => {
4244
.catch(() => false);
4345
};
4446

45-
/**
46-
* We need to clean up the paths in case of pnp input:
47-
* `path.dirname(require.resolve(path.join('@storybook/react-webpack5', 'package.json')))` output:
48-
* `@storybook/react-webpack5`
49-
*/
50-
const sanitizeFramework = (framework: string) => {
51-
// extract either @storybook/<framework> or storybook-<framework>
52-
const matches = framework.match(/(@storybook\/\w+(?:-\w+)*)|(storybook-(\w+(?:-\w+)*))/g);
53-
if (!matches) {
54-
return undefined;
55-
}
56-
57-
return matches[0];
58-
};
59-
6047
export async function configureMain({
6148
addons,
6249
extensions = ['js', 'jsx', 'mjs', 'ts', 'tsx'],
6350
storybookConfigFolder,
6451
language,
6552
frameworkPackage,
6653
prefixes = [],
54+
features = [],
6755
...custom
6856
}: ConfigureMainOptions) {
6957
const srcPath = resolve(storybookConfigFolder, '../src');
7058
const prefix = (await pathExists(srcPath)) ? '../src' : '../stories';
59+
const stories = features.includes('docs') ? [`${prefix}/**/*.mdx`] : [];
60+
61+
stories.push(`${prefix}/**/*.stories.@(${extensions.join('|')})`);
62+
7163
const config = {
72-
stories: [`${prefix}/**/*.mdx`, `${prefix}/**/*.stories.@(${extensions.join('|')})`],
64+
stories,
7365
addons,
7466
...custom,
7567
};

code/lib/create-storybook/src/generators/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export type GeneratorOptions = {
1919
frameworkPreviewParts?: FrameworkPreviewParts;
2020
// skip prompting the user
2121
yes: boolean;
22-
features: string[];
22+
features: Array<GeneratorFeature>;
2323
};
2424

2525
export interface FrameworkOptions {

0 commit comments

Comments
 (0)