1 | "use strict";
|
2 |
|
3 | require("core-js/modules/es.promise.js");
|
4 |
|
5 | Object.defineProperty(exports, "__esModule", {
|
6 | value: true
|
7 | });
|
8 | exports.default = _default;
|
9 |
|
10 | var _updateNotifier = require("update-notifier");
|
11 |
|
12 | var _chalk = _interopRequireDefault(require("chalk"));
|
13 |
|
14 | var _prompts = _interopRequireDefault(require("prompts"));
|
15 |
|
16 | var _detect = require("./detect");
|
17 |
|
18 | var _project_types = require("./project_types");
|
19 |
|
20 | var _helpers = require("./helpers");
|
21 |
|
22 | var _ANGULAR = _interopRequireDefault(require("./generators/ANGULAR"));
|
23 |
|
24 | var _AURELIA = _interopRequireDefault(require("./generators/AURELIA"));
|
25 |
|
26 | var _EMBER = _interopRequireDefault(require("./generators/EMBER"));
|
27 |
|
28 | var _METEOR = _interopRequireDefault(require("./generators/METEOR"));
|
29 |
|
30 | var _REACT = _interopRequireDefault(require("./generators/REACT"));
|
31 |
|
32 | var _REACT_NATIVE = _interopRequireDefault(require("./generators/REACT_NATIVE"));
|
33 |
|
34 | var _REACT_SCRIPTS = _interopRequireDefault(require("./generators/REACT_SCRIPTS"));
|
35 |
|
36 | var _SFC_VUE = _interopRequireDefault(require("./generators/SFC_VUE"));
|
37 |
|
38 | var _UPDATE_PACKAGE_ORGANIZATIONS = _interopRequireDefault(require("./generators/UPDATE_PACKAGE_ORGANIZATIONS"));
|
39 |
|
40 | var _VUE = _interopRequireDefault(require("./generators/VUE"));
|
41 |
|
42 | var _VUE2 = _interopRequireDefault(require("./generators/VUE3"));
|
43 |
|
44 | var _WEBPACK_REACT = _interopRequireDefault(require("./generators/WEBPACK_REACT"));
|
45 |
|
46 | var _MITHRIL = _interopRequireDefault(require("./generators/MITHRIL"));
|
47 |
|
48 | var _MARIONETTE = _interopRequireDefault(require("./generators/MARIONETTE"));
|
49 |
|
50 | var _MARKO = _interopRequireDefault(require("./generators/MARKO"));
|
51 |
|
52 | var _HTML = _interopRequireDefault(require("./generators/HTML"));
|
53 |
|
54 | var _WEBCOMPONENTS = _interopRequireDefault(require("./generators/WEB-COMPONENTS"));
|
55 |
|
56 | var _RIOT = _interopRequireDefault(require("./generators/RIOT"));
|
57 |
|
58 | var _PREACT = _interopRequireDefault(require("./generators/PREACT"));
|
59 |
|
60 | var _SVELTE = _interopRequireDefault(require("./generators/SVELTE"));
|
61 |
|
62 | var _RAX = _interopRequireDefault(require("./generators/RAX"));
|
63 |
|
64 | var _warn = require("./warn");
|
65 |
|
66 | var _jsPackageManager = require("./js-package-manager");
|
67 |
|
68 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
69 |
|
70 | const logger = console;
|
71 |
|
72 | const installStorybook = (projectType, options) => {
|
73 | const packageManager = _jsPackageManager.JsPackageManagerFactory.getPackageManager(options.useNpm);
|
74 |
|
75 | const npmOptions = {
|
76 | installAsDevDependencies: true,
|
77 | skipInstall: options.skipInstall
|
78 | };
|
79 | const language = (0, _detect.detectLanguage)();
|
80 | const hasTSDependency = language === _project_types.SupportedLanguage.TYPESCRIPT;
|
81 | (0, _warn.warn)({
|
82 | hasTSDependency
|
83 | });
|
84 | const defaultStoryFormat = hasTSDependency ? _project_types.StoryFormat.CSF_TYPESCRIPT : _project_types.StoryFormat.CSF;
|
85 | const generatorOptions = {
|
86 | storyFormat: options.storyFormat || defaultStoryFormat,
|
87 | language,
|
88 | builder: options.builder || _project_types.Builder.Webpack4
|
89 | };
|
90 |
|
91 | const end = () => {
|
92 | if (!options.skipInstall) {
|
93 | packageManager.installDependencies();
|
94 | }
|
95 |
|
96 | logger.log('\nTo run your Storybook, type:\n');
|
97 | (0, _helpers.codeLog)([packageManager.getRunStorybookCommand()]);
|
98 | logger.log('\nFor more information visit:', _chalk.default.cyan('https://storybook.js.org'));
|
99 |
|
100 | logger.log();
|
101 | };
|
102 |
|
103 | const REACT_NATIVE_REPO = 'https://github.com/storybookjs/react-native';
|
104 |
|
105 | const runGenerator = () => {
|
106 | switch (projectType) {
|
107 | case _project_types.ProjectType.ALREADY_HAS_STORYBOOK:
|
108 | logger.log();
|
109 | (0, _helpers.paddedLog)('There seems to be a Storybook already available in this project.');
|
110 | (0, _helpers.paddedLog)('Apply following command to force:\n');
|
111 | (0, _helpers.codeLog)(['sb init [options] -f']);
|
112 |
|
113 | logger.log();
|
114 | return Promise.resolve();
|
115 |
|
116 | case _project_types.ProjectType.UPDATE_PACKAGE_ORGANIZATIONS:
|
117 | return (0, _UPDATE_PACKAGE_ORGANIZATIONS.default)(packageManager, options.parser, npmOptions).then(() => null)
|
118 | .then((0, _helpers.commandLog)('Upgrading your project to the new Storybook packages.')).then(end);
|
119 |
|
120 | case _project_types.ProjectType.REACT_SCRIPTS:
|
121 | return (0, _REACT_SCRIPTS.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Create React App" based project')).then(end);
|
122 |
|
123 | case _project_types.ProjectType.REACT:
|
124 | return (0, _REACT.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "React" app')).then(end);
|
125 |
|
126 | case _project_types.ProjectType.REACT_NATIVE:
|
127 | {
|
128 | return (options.yes ? Promise.resolve({
|
129 | server: true
|
130 | }) : (0, _prompts.default)([{
|
131 | type: 'confirm',
|
132 | name: 'server',
|
133 | message: 'Do you want to install dependencies necessary to run Storybook server? You can manually do it later by install @storybook/react-native-server',
|
134 | initial: false
|
135 | }])).then(({
|
136 | server
|
137 | }) => (0, _REACT_NATIVE.default)(packageManager, npmOptions, server, generatorOptions)).then((0, _helpers.commandLog)('Adding Storybook support to your "React Native" app')).then(end).then(() => {
|
138 | logger.log(_chalk.default.red('NOTE: installation is not 100% automated.'));
|
139 | logger.log(`To quickly run Storybook, replace contents of your app entry with:\n`);
|
140 | (0, _helpers.codeLog)(["export {default} from './storybook';"]);
|
141 | logger.log('\n For more in information, see the github readme:\n');
|
142 | logger.log(_chalk.default.cyan(REACT_NATIVE_REPO));
|
143 | logger.log();
|
144 | });
|
145 | }
|
146 |
|
147 | case _project_types.ProjectType.METEOR:
|
148 | return (0, _METEOR.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Meteor" app')).then(end);
|
149 |
|
150 | case _project_types.ProjectType.WEBPACK_REACT:
|
151 | return (0, _WEBPACK_REACT.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Webpack React" app')).then(end);
|
152 |
|
153 | case _project_types.ProjectType.REACT_PROJECT:
|
154 | return (0, _REACT.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "React" library')).then(end);
|
155 |
|
156 | case _project_types.ProjectType.SFC_VUE:
|
157 | return (0, _SFC_VUE.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Single File Components Vue" app')).then(end);
|
158 |
|
159 | case _project_types.ProjectType.VUE:
|
160 | return (0, _VUE.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Vue" app')).then(end);
|
161 |
|
162 | case _project_types.ProjectType.VUE3:
|
163 | return (0, _VUE2.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Vue 3" app')).then(end);
|
164 |
|
165 | case _project_types.ProjectType.ANGULAR:
|
166 | return (0, _ANGULAR.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Angular" app')).then(end);
|
167 |
|
168 | case _project_types.ProjectType.EMBER:
|
169 | return (0, _EMBER.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Ember" app')).then(end);
|
170 |
|
171 | case _project_types.ProjectType.MITHRIL:
|
172 | return (0, _MITHRIL.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Mithril" app')).then(end);
|
173 |
|
174 | case _project_types.ProjectType.MARIONETTE:
|
175 | return (0, _MARIONETTE.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Marionette.js" app')).then(end);
|
176 |
|
177 | case _project_types.ProjectType.MARKO:
|
178 | return (0, _MARKO.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Marko" app')).then(end);
|
179 |
|
180 | case _project_types.ProjectType.HTML:
|
181 | return (0, _HTML.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "HTML" app')).then(end);
|
182 |
|
183 | case _project_types.ProjectType.WEB_COMPONENTS:
|
184 | return (0, _WEBCOMPONENTS.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "web components" app')).then(end);
|
185 |
|
186 | case _project_types.ProjectType.RIOT:
|
187 | return (0, _RIOT.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "riot.js" app')).then(end);
|
188 |
|
189 | case _project_types.ProjectType.PREACT:
|
190 | return (0, _PREACT.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Preact" app')).then(end);
|
191 |
|
192 | case _project_types.ProjectType.SVELTE:
|
193 | return (0, _SVELTE.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Svelte" app')).then(end);
|
194 |
|
195 | case _project_types.ProjectType.RAX:
|
196 | return (0, _RAX.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Rax" app')).then(end);
|
197 |
|
198 | case _project_types.ProjectType.AURELIA:
|
199 | return (0, _AURELIA.default)(packageManager, npmOptions, generatorOptions).then((0, _helpers.commandLog)('Adding Storybook support to your "Aurelia" app')).then(end);
|
200 |
|
201 | case _project_types.ProjectType.UNSUPPORTED:
|
202 | (0, _helpers.paddedLog)(`We detected a project type that we don't support yet.`);
|
203 | (0, _helpers.paddedLog)(`If you'd like your framework to be supported, please let use know about it at https://github.com/storybookjs/storybook/issues`);
|
204 |
|
205 | logger.log();
|
206 | return Promise.resolve();
|
207 |
|
208 | default:
|
209 | (0, _helpers.paddedLog)(`We couldn't detect your project type. (code: ${projectType})`);
|
210 | (0, _helpers.paddedLog)('You can specify a project type explicitly via `sb init --type <type>`, see our docs on how to configure Storybook for your framework: https://storybook.js.org/docs/react/get-started/install');
|
211 |
|
212 | logger.log();
|
213 | return projectTypeInquirer(options);
|
214 | }
|
215 | };
|
216 |
|
217 | return runGenerator().catch(ex => {
|
218 | logger.error(`\n ${_chalk.default.red(ex.stack)}`);
|
219 | process.exit(1);
|
220 | });
|
221 | };
|
222 |
|
223 | const projectTypeInquirer = async options => {
|
224 | const manualAnswer = options.yes ? true : await (0, _prompts.default)([{
|
225 | type: 'confirm',
|
226 | name: 'manual',
|
227 | message: 'Do you want to manually choose a Storybook project type to install?'
|
228 | }]);
|
229 |
|
230 | if (manualAnswer !== true && manualAnswer.manual) {
|
231 | const frameworkAnswer = await (0, _prompts.default)([{
|
232 | type: 'select',
|
233 | name: 'manualFramework',
|
234 | message: 'Please choose a project type from the following list:',
|
235 | choices: _project_types.installableProjectTypes.map(type => ({
|
236 | title: type,
|
237 | value: type.toUpperCase()
|
238 | }))
|
239 | }]);
|
240 | return installStorybook(frameworkAnswer.manualFramework, options);
|
241 | }
|
242 |
|
243 | return Promise.resolve();
|
244 | };
|
245 |
|
246 | function _default(options, pkg) {
|
247 | const welcomeMessage = 'sb init - the simplest way to add a Storybook to your project.';
|
248 | logger.log(_chalk.default.inverse(`\n ${welcomeMessage} \n`));
|
249 |
|
250 | new _updateNotifier.UpdateNotifier({
|
251 | pkg,
|
252 | updateCheckInterval: 1000 * 60 * 60
|
253 |
|
254 | }).notify();
|
255 | let projectType;
|
256 | const projectTypeProvided = options.type;
|
257 | const infoText = projectTypeProvided ? 'Installing Storybook for user specified project type' : 'Detecting project type';
|
258 | const done = (0, _helpers.commandLog)(infoText);
|
259 |
|
260 | try {
|
261 | if (projectTypeProvided) {
|
262 | if (_project_types.installableProjectTypes.includes(options.type)) {
|
263 | const storybookInstalled = (0, _detect.isStorybookInstalled)((0, _jsPackageManager.readPackageJson)(), options.force);
|
264 | projectType = storybookInstalled ? _project_types.ProjectType.ALREADY_HAS_STORYBOOK : options.type.toUpperCase();
|
265 | } else {
|
266 | done(`The provided project type was not recognized by Storybook.`);
|
267 | logger.log(`\nThe project types currently supported by Storybook are:\n`);
|
268 |
|
269 | _project_types.installableProjectTypes.sort().forEach(framework => (0, _helpers.paddedLog)(`- ${framework}`));
|
270 |
|
271 | logger.log();
|
272 | process.exit(1);
|
273 | }
|
274 | } else {
|
275 | projectType = (0, _detect.detect)(options);
|
276 | }
|
277 | } catch (ex) {
|
278 | done(ex.message);
|
279 | process.exit(1);
|
280 | }
|
281 |
|
282 | done();
|
283 | const cleanOptions = Object.assign({}, options);
|
284 |
|
285 | if (options.storyFormat === _project_types.StoryFormat.MDX) {
|
286 | logger.warn(' The MDX CLI template is deprecated. The JS and TS templates already include MDX examples!');
|
287 | cleanOptions.storyFormat = undefined;
|
288 | }
|
289 |
|
290 | return installStorybook(projectType, cleanOptions);
|
291 | } |
\ | No newline at end of file |