Skip to content

Commit 021d886

Browse files
committed
make all storybook configs TS
1 parent 3d65b88 commit 021d886

File tree

11 files changed

+58
-61
lines changed

11 files changed

+58
-61
lines changed

Diff for: configs/storybook/main.js renamed to configs/storybook/main.ts

+28-11
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
1-
const fs = require('node:fs');
1+
import { readFileSync } from 'node:fs';
2+
import { isObject } from '@guardian/libs';
3+
import type { StorybookConfig } from '@storybook/react-webpack5';
4+
5+
export type { StorybookConfig };
26

37
const nodeModulesExclude = {
48
and: [/node_modules/],
59
not: [/@guardian\//],
610
};
711

8-
module.exports = {
12+
const config: StorybookConfig = {
913
stories: [],
1014
addons: [
1115
'@storybook/addon-a11y',
1216
'@storybook/addon-essentials',
1317
'@storybook/addon-links',
1418
],
15-
features: {
16-
// used in composition
17-
buildStoriesJson: true,
18-
},
1919
webpackFinal: async (config, { configType }) => {
20+
config.module ??= { rules: [] };
21+
config.module.rules ??= [];
22+
2023
config.module.rules.push({
2124
test: /\.(ts|tsx)$/,
2225
exclude: nodeModulesExclude,
@@ -45,11 +48,23 @@ module.exports = {
4548
});
4649

4750
// update storybook webpack config to transpile *all* JS
48-
config.module.rules.find(
49-
(rule) => String(rule.test) === String(/\.(cjs|mjs|tsx?|jsx?)$/),
50-
).exclude = nodeModulesExclude;
51+
for (const rule of config.module.rules) {
52+
if (isObject(rule) && rule.test instanceof RegExp) {
53+
if (
54+
rule.test.test('file.js') ||
55+
rule.test.test('file.cjs') ||
56+
rule.test.test('file.mjs') ||
57+
rule.test.test('file.jsx') ||
58+
rule.test.test('file.ts') ||
59+
rule.test.test('file.cts') ||
60+
rule.test.test('file.mts') ||
61+
rule.test.test('file.tsx')
62+
) {
63+
rule.exclude = nodeModulesExclude;
64+
}
65+
}
66+
}
5167

52-
config.resolve.plugins ||= [];
5368
return config;
5469
},
5570
framework: {
@@ -60,5 +75,7 @@ module.exports = {
6075
autodocs: true,
6176
},
6277
previewHead: (head) =>
63-
head + fs.readFileSync(require.resolve('./preview-head.html'), 'utf8'),
78+
head + readFileSync(require.resolve('./preview-head.html'), 'utf8'),
6479
};
80+
81+
export default config;

Diff for: configs/storybook/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"@babel/preset-typescript": "7.24.1",
1212
"@emotion/babel-plugin": "11.12.0",
1313
"@emotion/react": "11.11.3",
14+
"@guardian/libs": "workspace:*",
1415
"@guardian/source": "workspace:*",
1516
"@storybook/addon-a11y": "8.2.7",
1617
"@storybook/addon-docs": "8.2.7",

Diff for: configs/storybook/preview/FocusManagerDecorator.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import type { Decorator } from '@storybook/react';
2-
import { useEffect } from 'react';
31
import { FocusStyleManager } from '@guardian/source/foundations';
2+
import { useEffect } from 'react';
3+
import type { Decorator } from '@storybook/react';
44

55
export const FocusManagerDecorator: Decorator = (storyFn) => {
66
useEffect(() => {

Diff for: configs/storybook/preview/ThemeProviderDecorator.tsx

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
/* eslint-disable @typescript-eslint/no-unsafe-assignment -- storybook type contains `any`s */
2-
31
import { ThemeProvider } from '@emotion/react';
42
import type { Decorator } from '@storybook/react';
53

Diff for: configs/storybook/preview/viewport.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import type { Breakpoint } from '@guardian/source/foundations';
21
import { breakpoints } from '@guardian/source/foundations';
2+
import type { Breakpoint } from '@guardian/source/foundations';
33

44
type ViewportMeta = {
55
[key in Breakpoint]: {
@@ -66,7 +66,7 @@ const viewportEntries = Object.entries(breakpoints).map(([name, width]) => {
6666
];
6767
});
6868

69-
const viewportEntriesObject = Object.fromEntries(viewportEntries) as Viewports;
69+
const viewportEntriesObject: Viewports = Object.fromEntries(viewportEntries);
7070

7171
export const viewport = {
7272
viewports: {

Diff for: configs/storybook/tsconfig.json

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"extends": "../../tsconfig.base.json",
3+
"include": ["**/*"]
4+
}

Diff for: libs/@guardian/source-development-kitchen/.storybook/main.js

-22
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import base from '../../../../configs/storybook/main';
2+
import type { StorybookConfig } from '../../../../configs/storybook/main';
3+
4+
const config: StorybookConfig = {
5+
...base,
6+
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
7+
};
8+
9+
export default config;

Diff for: libs/@guardian/source/.storybook/main.js

-22
This file was deleted.

Diff for: libs/@guardian/source/.storybook/main.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import base from '../../../../configs/storybook/main';
2+
import type { StorybookConfig } from '../../../../configs/storybook/main';
3+
4+
const config: StorybookConfig = {
5+
...base,
6+
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
7+
};
8+
9+
export default config;

Diff for: pnpm-lock.yaml

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)