-
-
Notifications
You must be signed in to change notification settings - Fork 9.3k
/
preset.ts
54 lines (42 loc) · 1.67 KB
/
preset.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
import { dirname, join } from 'node:path';
import type { PresetProperty } from 'storybook/internal/types';
import type { PluginOption } from 'vite';
import { vueComponentMeta } from './plugins/vue-component-meta';
import { vueDocgen } from './plugins/vue-docgen';
import { templateCompilation } from './plugins/vue-template';
import type { FrameworkOptions, StorybookConfig, VueDocgenPlugin } from './types';
const getAbsolutePath = <I extends string>(input: I): I =>
dirname(require.resolve(join(input, 'package.json'))) as any;
export const core: PresetProperty<'core'> = {
builder: getAbsolutePath('@storybook/builder-vite'),
renderer: getAbsolutePath('@storybook/vue3'),
};
export const viteFinal: StorybookConfig['viteFinal'] = async (config, options) => {
const plugins: PluginOption[] = [templateCompilation()];
const framework = await options.presets.apply('framework');
const frameworkOptions: FrameworkOptions =
typeof framework === 'string' ? {} : (framework.options ?? {});
const docgen = resolveDocgenOptions(frameworkOptions.docgen);
// add docgen plugin depending on framework option
if (docgen.plugin === 'vue-component-meta') {
plugins.push(await vueComponentMeta(docgen.tsconfig));
} else {
plugins.push(await vueDocgen());
}
const { mergeConfig } = await import('vite');
return mergeConfig(config, {
plugins,
});
};
/** Resolves the docgen framework option. */
const resolveDocgenOptions = (
docgen?: FrameworkOptions['docgen']
): { plugin: VueDocgenPlugin; tsconfig?: string } => {
if (!docgen) {
return { plugin: 'vue-docgen-api' };
}
if (typeof docgen === 'string') {
return { plugin: docgen };
}
return docgen;
};