-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathreact-docs.ts
103 lines (91 loc) · 2.96 KB
/
react-docs.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import { mergeRsbuildConfig } from '@rsbuild/core'
import { hasDocsOrControls } from 'storybook/internal/docs-tools'
import type { RsbuildConfig } from '@rsbuild/core'
import { requirer } from './requirer'
import type { StorybookConfig } from './types'
export const rsbuildFinalDocs: NonNullable<
StorybookConfig['rsbuildFinal']
> = async (config, options): Promise<RsbuildConfig> => {
if (!hasDocsOrControls(options)) return config
const typescriptOptions = await options.presets.apply('typescript', {} as any)
const debug = options.loglevel === 'debug'
const { reactDocgen } = typescriptOptions || {}
if (typeof reactDocgen !== 'string') {
return config
}
if (reactDocgen !== 'react-docgen-typescript') {
return mergeRsbuildConfig(config, {
tools: {
rspack: {
module: {
rules: [
{
test: /\.(cjs|mjs|tsx?|jsx?)$/,
enforce: 'pre',
loader: requirer(
require.resolve,
'storybook-react-rsbuild/loaders/react-docgen-loader',
),
options: {
debug,
},
exclude: /(\.(stories|story)\.(js|jsx|ts|tsx))|(node_modules)/,
},
],
},
},
},
})
}
const { reactDocgen: reactDocGenPlugin } = await import(
'./plugins/react-docgen'
)
// TODO: Rspack doesn't support the hooks `react-docgen-typescript`' required.
// Currently, using `transform` hook to implement the same behavior.
return mergeRsbuildConfig(config, {
plugins: [
await reactDocGenPlugin({
include:
reactDocgen === 'react-docgen-typescript'
? /\.(mjs|tsx?|jsx?)$/
: /\.(mjs|jsx?)$/,
}),
],
})
// throw new Error(
// "Rspack didn't support the hooks `react-docgen-typescript`' required",
// )
// const { ReactDocgenTypeScriptPlugin } = await import(
// '@storybook/react-docgen-typescript-plugin'
// )
// const { reactDocgenTypescriptOptions } = typescriptOptions || {}
// return mergeRsbuildConfig(config, {
// tools: {
// rspack: {
// module: {
// rules: [
// {
// test: /\.(cjs|mjs|jsx?)$/,
// enforce: 'pre',
// loader: requirer(
// require.resolve,
// 'storybook-react-rsbuild/loaders/react-docgen-loader',
// ),
// options: {
// debug,
// },
// exclude: /(\.(stories|story)\.(js|jsx|ts|tsx))|(node_modules)/,
// },
// ],
// },
// plugins: [
// new ReactDocgenTypeScriptPlugin({
// ...reactDocgenTypescriptOptions,
// // We *need* this set so that RDT returns default values in the same format as react-docgen
// savePropValueAsString: true,
// }),
// ],
// },
// },
// })
}