UNPKG

5.18 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.baseGenerator = baseGenerator;
7
8require("core-js/modules/es.promise.js");
9
10var _fsExtra = _interopRequireDefault(require("fs-extra"));
11
12var _tsDedent = _interopRequireDefault(require("ts-dedent"));
13
14var _coreCommon = require("@storybook/core-common");
15
16var _project_types = require("../project_types");
17
18var _helpers = require("../helpers");
19
20var _configure = require("./configure");
21
22var _jsPackageManager = require("../js-package-manager");
23
24var _babelConfig = require("../babel-config");
25
26function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
28const defaultOptions = {
29 extraPackages: [],
30 extraAddons: [],
31 staticDir: undefined,
32 addScripts: true,
33 addComponents: true,
34 addBabel: true,
35 addESLint: false,
36 extraMain: undefined,
37 extensions: undefined,
38 commonJs: false
39};
40
41const builderDependencies = builder => {
42 switch (builder) {
43 case _project_types.CoreBuilder.Webpack4:
44 return ['@storybook/builder-webpack4', '@storybook/manager-webpack4'];
45
46 case _project_types.CoreBuilder.Webpack5:
47 return ['@storybook/builder-webpack5', '@storybook/manager-webpack5'];
48
49 case _project_types.CoreBuilder.Vite:
50 return ['@storybook/builder-vite'];
51
52 default:
53 return [builder];
54 }
55};
56
57const stripVersions = addons => addons.map(addon => (0, _jsPackageManager.getPackageDetails)(addon)[0]);
58
59const hasInteractiveStories = framework => ['react', 'angular', 'preact', 'svelte', 'vue', 'vue3', 'html'].includes(framework);
60
61async function baseGenerator(packageManager, npmOptions, {
62 language,
63 builder,
64 commonJs
65}, framework, options = defaultOptions) {
66 const {
67 extraAddons,
68 extraPackages,
69 staticDir,
70 addScripts,
71 addComponents,
72 addBabel,
73 addESLint,
74 extraMain,
75 extensions
76 } = Object.assign({}, defaultOptions, options); // added to main.js
77 // make sure to update `canUsePrebuiltManager` in dev-server.js and build-manager-config/main.js when this list changes
78
79 const addons = ['@storybook/addon-links', '@storybook/addon-essentials']; // added to package.json
80
81 const addonPackages = [...addons, '@storybook/addon-actions'];
82
83 if (hasInteractiveStories(framework)) {
84 addons.push('@storybook/addon-interactions');
85 addonPackages.push('@storybook/addon-interactions', '@storybook/testing-library');
86 }
87
88 const yarn2Dependencies = packageManager.type === 'yarn2' ? ['@storybook/addon-docs', '@mdx-js/react@1.x.x'] : [];
89 const files = await _fsExtra.default.readdir(process.cwd());
90 const isNewFolder = !files.some(fname => fname.startsWith('.babel') || fname.startsWith('babel') || fname === 'package.json');
91 const packageJson = packageManager.retrievePackageJson();
92 const installedDependencies = new Set(Object.keys(packageJson.dependencies));
93 const frameworkPackage = `@storybook/${framework}`;
94 const packages = [frameworkPackage, ...addonPackages, ...extraPackages, ...extraAddons, ...yarn2Dependencies, ...builderDependencies(builder)].filter(Boolean).filter(packageToInstall => !installedDependencies.has((0, _jsPackageManager.getPackageDetails)(packageToInstall)[0]));
95 const versionedPackages = await packageManager.getVersionedPackages(...packages);
96 const coreBuilders = [_project_types.CoreBuilder.Webpack4, _project_types.CoreBuilder.Webpack5, _project_types.CoreBuilder.Vite];
97 const expandedBuilder = coreBuilders.includes(builder) ? `@storybook/builder-${builder}` : builder;
98 const mainOptions = builder !== _project_types.CoreBuilder.Webpack4 ? Object.assign({
99 core: {
100 builder: expandedBuilder
101 }
102 }, extraMain) : extraMain; // Default vite builder to storyStoreV7
103
104 if (expandedBuilder === '@storybook/builder-vite') {
105 mainOptions.features = Object.assign({}, mainOptions.features, {
106 storyStoreV7: true
107 });
108 }
109
110 (0, _configure.configure)(framework, Object.assign({
111 framework: frameworkPackage,
112 addons: [...addons, ...stripVersions(extraAddons)],
113 extensions,
114 commonJs
115 }, mainOptions));
116
117 if (addComponents) {
118 await (0, _helpers.copyComponents)(framework, language);
119 } // FIXME: temporary workaround for https://github.com/storybookjs/storybook/issues/17516
120
121
122 if (expandedBuilder === '@storybook/builder-vite') {
123 const previewHead = (0, _tsDedent.default)`
124 <script>
125 window.global = window;
126 </script>
127 `;
128 await _fsExtra.default.writeFile(`.storybook/preview-head.html`, previewHead, {
129 encoding: 'utf8'
130 });
131 }
132
133 const babelDependencies = addBabel ? await (0, _helpers.getBabelDependencies)(packageManager, packageJson) : [];
134
135 if (isNewFolder) {
136 babelDependencies.push(...(0, _coreCommon.getStorybookBabelDependencies)());
137 await (0, _babelConfig.generateStorybookBabelConfigInCWD)();
138 }
139
140 packageManager.addDependencies(Object.assign({}, npmOptions, {
141 packageJson
142 }), [...versionedPackages, ...babelDependencies]);
143
144 if (addScripts) {
145 packageManager.addStorybookCommandInScripts({
146 port: 6006,
147 staticFolder: staticDir
148 });
149 }
150
151 if (addESLint) {
152 packageManager.addESLintConfig();
153 }
154}
\No newline at end of file