Skip to content

Commit a63a4f4

Browse files
committed
Merge pull request #25740 from storybookjs/valentin/fix-storybook-config-typing-for-webpack-projects
Webpack: Update StorybookConfig import in core-webpack types.ts (cherry picked from commit a91240a)
1 parent 2f353e5 commit a63a4f4

File tree

11 files changed

+53
-89
lines changed

11 files changed

+53
-89
lines changed

code/builders/builder-webpack5/src/types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ import type {
33
Options,
44
BuilderResult as BuilderResultBase,
55
StorybookConfig,
6+
TypescriptOptions as WebpackTypescriptOptions,
67
} from '@storybook/core-webpack';
78

89
import type ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
910

10-
type TypeScriptOptionsBase = Required<StorybookConfig>['typescript'];
11+
type TypeScriptOptionsBase = Partial<WebpackTypescriptOptions>;
1112

1213
/**
1314
* Options for TypeScript usage within Storybook.
@@ -19,7 +20,7 @@ export interface TypescriptOptions extends TypeScriptOptionsBase {
1920
checkOptions?: ConstructorParameters<typeof ForkTsCheckerWebpackPlugin>[0];
2021
}
2122

22-
export interface StorybookConfigWebpack extends Pick<StorybookConfig, 'webpack' | 'webpackFinal'> {
23+
export interface StorybookConfigWebpack extends Omit<StorybookConfig, 'webpack' | 'webpackFinal'> {
2324
/**
2425
* Modify or return a custom Webpack config after the Storybook's default configuration
2526
* has run (mostly used by addons).

code/frameworks/angular/src/preset.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ export const previewAnnotations: StorybookConfig['previewAnnotations'] = (
2525
return annotations;
2626
};
2727

28-
export const core: PresetProperty<'core', StorybookConfig> = async (config, options) => {
29-
const framework = await options.presets.apply<StorybookConfig['framework']>('framework');
28+
export const core: PresetProperty<'core'> = async (config, options) => {
29+
const framework = await options.presets.apply('framework');
3030

3131
return {
3232
...config,
@@ -37,7 +37,7 @@ export const core: PresetProperty<'core', StorybookConfig> = async (config, opti
3737
};
3838
};
3939

40-
export const typescript: PresetProperty<'typescript', StorybookConfig> = async (config) => {
40+
export const typescript: PresetProperty<'typescript'> = async (config) => {
4141
return {
4242
...config,
4343
skipBabel: true,

code/frameworks/ember/src/preset.ts

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,39 @@ export const addons: PresetProperty<'addons', StorybookConfig> = [
1010
require.resolve('./server/framework-preset-ember-docs'),
1111
];
1212

13-
export const core: PresetProperty<'core', StorybookConfig> = async (config, options) => {
14-
const framework = await options.presets.apply<StorybookConfig['framework']>('framework');
13+
export const webpackFinal: StorybookConfig['webpackFinal'] = async (baseConfig, options) => {
14+
const { virtualModules } = await getVirtualModules(options);
15+
16+
const babelOptions = await options.presets.apply('babel', {}, options);
17+
const typescriptOptions = await options.presets.apply('typescript', {}, options);
18+
19+
return {
20+
...baseConfig,
21+
module: {
22+
...baseConfig.module,
23+
rules: [
24+
...(baseConfig.module?.rules ?? []),
25+
{
26+
test: typescriptOptions.skipCompiler ? /\.((c|m)?jsx?)$/ : /\.((c|m)?(j|t)sx?)$/,
27+
use: [
28+
{
29+
loader: require.resolve('babel-loader'),
30+
options: {
31+
cacheDirectory: resolvePathInStorybookCache('babel'),
32+
...babelOptions,
33+
},
34+
},
35+
],
36+
include: [getProjectRoot()],
37+
exclude: [/node_modules/, ...Object.keys(virtualModules)],
38+
},
39+
],
40+
},
41+
};
42+
};
43+
44+
export const core: PresetProperty<'core'> = async (config, options) => {
45+
const framework = await options.presets.apply('framework');
1546

1647
return {
1748
...config,
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import type { PresetProperty } from '@storybook/types';
22
import { dirname, join } from 'path';
3-
import type { StorybookConfig } from './types';
43

54
function getAbsolutePath<I extends string>(value: I): I {
65
return dirname(require.resolve(join(value, 'package.json'))) as any;
76
}
87

9-
export const core: PresetProperty<'core', StorybookConfig> = {
8+
export const core: PresetProperty<'core'> = {
109
builder: getAbsolutePath('@storybook/builder-vite'),
1110
renderer: getAbsolutePath('@storybook/html'),
1211
};

code/frameworks/nextjs/src/preset.ts

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -23,38 +23,8 @@ export const addons: PresetProperty<'addons', StorybookConfig> = [
2323
dirname(require.resolve(join('@storybook/preset-react-webpack', 'package.json'))),
2424
];
2525

26-
const defaultFrameworkOptions: FrameworkOptions = {};
27-
28-
export const frameworkOptions = async (
29-
_: never,
30-
options: Options
31-
): Promise<StorybookConfig['framework']> => {
32-
const config = await options.presets.apply<StorybookConfig['framework']>('framework');
33-
34-
if (typeof config === 'string') {
35-
return {
36-
name: config,
37-
options: defaultFrameworkOptions,
38-
};
39-
}
40-
if (typeof config === 'undefined') {
41-
return {
42-
name: require.resolve('@storybook/nextjs') as '@storybook/nextjs',
43-
options: defaultFrameworkOptions,
44-
};
45-
}
46-
47-
return {
48-
name: config.name,
49-
options: {
50-
...defaultFrameworkOptions,
51-
...config.options,
52-
},
53-
};
54-
};
55-
56-
export const core: PresetProperty<'core', StorybookConfig> = async (config, options) => {
57-
const framework = await options.presets.apply<StorybookConfig['framework']>('framework');
26+
export const core: PresetProperty<'core'> = async (config, options) => {
27+
const framework = await options.presets.apply('framework');
5828

5929
return {
6030
...config,
@@ -134,7 +104,6 @@ export const babel = async (baseConfig: TransformOptions): Promise<TransformOpti
134104
};
135105

136106
export const webpackFinal: StorybookConfig['webpackFinal'] = async (baseConfig, options) => {
137-
// eslint-disable-next-line @typescript-eslint/no-shadow
138107
const frameworkOptions = await options.presets.apply<{ options: FrameworkOptions }>(
139108
'frameworkOptions'
140109
);

code/frameworks/preact-vite/src/preset.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { StorybookConfig } from './types';
77
const getAbsolutePath = <I extends string>(input: I): I =>
88
dirname(require.resolve(join(input, 'package.json'))) as any;
99

10-
export const core: PresetProperty<'core', StorybookConfig> = {
10+
export const core: PresetProperty<'core'> = {
1111
builder: getAbsolutePath('@storybook/builder-vite'),
1212
renderer: getAbsolutePath('@storybook/preact'),
1313
};

code/frameworks/react-vite/src/preset.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { StorybookConfig } from './types';
77
const getAbsolutePath = <I extends string>(input: I): I =>
88
dirname(require.resolve(join(input, 'package.json'))) as any;
99

10-
export const core: PresetProperty<'core', StorybookConfig> = {
10+
export const core: PresetProperty<'core'> = {
1111
builder: getAbsolutePath('@storybook/builder-vite'),
1212
renderer: getAbsolutePath('@storybook/react'),
1313
};

code/frameworks/react-webpack5/src/preset.ts

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
/* eslint-disable no-param-reassign */
2-
31
import { dirname, join } from 'path';
4-
import type { PresetProperty, Options } from '@storybook/types';
5-
import type { FrameworkOptions, StorybookConfig } from './types';
2+
import type { PresetProperty } from '@storybook/types';
3+
import type { StorybookConfig } from './types';
64

75
const getAbsolutePath = <I extends string>(input: I): I =>
86
dirname(require.resolve(join(input, 'package.json'))) as any;
@@ -11,40 +9,8 @@ export const addons: PresetProperty<'addons', StorybookConfig> = [
119
getAbsolutePath('@storybook/preset-react-webpack'),
1210
];
1311

14-
const defaultFrameworkOptions: FrameworkOptions = {
15-
legacyRootApi: true,
16-
};
17-
18-
export const frameworkOptions = async (
19-
_: never,
20-
options: Options
21-
): Promise<StorybookConfig['framework']> => {
22-
const config = await options.presets.apply<StorybookConfig['framework']>('framework');
23-
24-
if (typeof config === 'string') {
25-
return {
26-
name: config,
27-
options: defaultFrameworkOptions,
28-
};
29-
}
30-
if (typeof config === 'undefined') {
31-
return {
32-
name: getAbsolutePath('@storybook/react-webpack5'),
33-
options: defaultFrameworkOptions,
34-
};
35-
}
36-
37-
return {
38-
name: config.name,
39-
options: {
40-
...defaultFrameworkOptions,
41-
...config.options,
42-
},
43-
};
44-
};
45-
46-
export const core: PresetProperty<'core', StorybookConfig> = async (config, options) => {
47-
const framework = await options.presets.apply<StorybookConfig['framework']>('framework');
12+
export const core: PresetProperty<'core'> = async (config, options) => {
13+
const framework = await options.presets.apply('framework');
4814

4915
return {
5016
...config,
@@ -57,8 +23,10 @@ export const core: PresetProperty<'core', StorybookConfig> = async (config, opti
5723
};
5824

5925
export const webpack: StorybookConfig['webpack'] = async (config) => {
26+
// eslint-disable-next-line no-param-reassign
6027
config.resolve = config.resolve || {};
6128

29+
// eslint-disable-next-line no-param-reassign
6230
config.resolve.alias = {
6331
...config.resolve?.alias,
6432
'@storybook/react': getAbsolutePath('@storybook/react'),

code/frameworks/svelte-vite/src/preset.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { svelteDocgen } from './plugins/svelte-docgen';
88
const getAbsolutePath = <I extends string>(input: I): I =>
99
dirname(require.resolve(join(input, 'package.json'))) as any;
1010

11-
export const core: PresetProperty<'core', StorybookConfig> = {
11+
export const core: PresetProperty<'core'> = {
1212
builder: getAbsolutePath('@storybook/builder-vite'),
1313
renderer: getAbsolutePath('@storybook/svelte'),
1414
};

code/frameworks/vue3-webpack5/src/preset.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import { dirname, join } from 'path';
22
import type { PresetProperty } from '@storybook/types';
3-
import type { StorybookConfig } from './types';
43

54
const getAbsolutePath = <I extends string>(input: I): I =>
65
dirname(require.resolve(join(input, 'package.json'))) as any;
76

8-
export const addons: PresetProperty<'addons', StorybookConfig> = [
9-
getAbsolutePath('@storybook/preset-vue3-webpack'),
10-
];
7+
export const addons: PresetProperty<'addons'> = [getAbsolutePath('@storybook/preset-vue3-webpack')];
118

129
export const core: PresetProperty<'core', StorybookConfig> = async (config, options) => {
1310
const framework = await options.presets.apply<StorybookConfig['framework']>('framework');
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import type { PresetProperty } from '@storybook/types';
22
import { dirname, join } from 'path';
3-
import type { StorybookConfig } from './types';
43

54
const getAbsolutePath = <I extends string>(input: I): I =>
65
dirname(require.resolve(join(input, 'package.json'))) as any;
76

8-
export const core: PresetProperty<'core', StorybookConfig> = {
7+
export const core: PresetProperty<'core'> = {
98
builder: getAbsolutePath('@storybook/builder-vite'),
109
renderer: getAbsolutePath('@storybook/web-components'),
1110
};

0 commit comments

Comments
 (0)