UNPKG

6.15 kBJavaScriptView Raw
1"use strict";
2
3require("core-js/modules/es.symbol.description.js");
4
5var _commander = _interopRequireDefault(require("commander"));
6
7var _path = _interopRequireDefault(require("path"));
8
9var _chalk = _interopRequireDefault(require("chalk"));
10
11var _envinfo = _interopRequireDefault(require("envinfo"));
12
13var _leven = _interopRequireDefault(require("leven"));
14
15var _readPkgUp = require("read-pkg-up");
16
17var _initiate = require("./initiate");
18
19var _add = require("./add");
20
21var _migrate = require("./migrate");
22
23var _extract = require("./extract");
24
25var _upgrade = require("./upgrade");
26
27var _repro = require("./repro");
28
29var _link = require("./link");
30
31var _automigrate = require("./automigrate");
32
33var _babelConfig = require("./babel-config");
34
35function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
37const pkg = (0, _readPkgUp.sync)({
38 cwd: __dirname
39}).packageJson;
40const logger = console;
41
42_commander.default.command('init').description('Initialize Storybook into your project.').option('-f --force', 'Force add Storybook').option('-s --skip-install', 'Skip installing deps').option('-N --use-npm', 'Use npm to install deps').option('-p --parser <babel | babylon | flow | ts | tsx>', 'jscodeshift parser').option('-t --type <type>', 'Add Storybook for a specific project type').option('-y --yes', 'Answer yes to all prompts').option('-b --builder <builder>', 'Builder library').option('-l --linkable', 'Prepare installation for link (contributor helper)').action(options => (0, _initiate.initiate)(options, pkg));
43
44_commander.default.command('add <addon>').description('Add an addon to your Storybook').option('-N --use-npm', 'Use NPM to build the Storybook server').option('-s --skip-postinstall', 'Skip package specific postinstall config modifications').action((addonName, options) => (0, _add.add)(addonName, options));
45
46_commander.default.command('babelrc').description('generate the default storybook babel config into your current working directory').action(() => (0, _babelConfig.generateStorybookBabelConfigInCWD)());
47
48_commander.default.command('upgrade').description('Upgrade your Storybook packages to the latest').option('-N --use-npm', 'Use NPM to build the Storybook server').option('-y --yes', 'Skip prompting the user').option('-n --dry-run', 'Only check for upgrades, do not install').option('-p --prerelease', 'Upgrade to the pre-release packages').option('-s --skip-check', 'Skip postinstall version and automigration checks').action(options => (0, _upgrade.upgrade)(options));
49
50_commander.default.command('info').description('Prints debugging information about the local environment').action(() => {
51 logger.log(_chalk.default.bold('\nEnvironment Info:'));
52
53 _envinfo.default.run({
54 System: ['OS', 'CPU'],
55 Binaries: ['Node', 'Yarn', 'npm'],
56 Browsers: ['Chrome', 'Edge', 'Firefox', 'Safari'],
57 npmPackages: '@storybook/*',
58 npmGlobalPackages: '@storybook/*'
59 }).then(logger.log);
60});
61
62_commander.default.command('migrate [migration]').description('Run a Storybook codemod migration on your source files').option('-l --list', 'List available migrations').option('-g --glob <glob>', 'Glob for files upon which to apply the migration', '**/*.js').option('-p --parser <babel | babylon | flow | ts | tsx>', 'jscodeshift parser').option('-n --dry-run', 'Dry run: verify the migration exists and show the files to which it will be applied').option('-r --rename <from-to>', 'Rename suffix of matching files after codemod has been applied, e.g. ".js:.ts"').action((migration, {
63 configDir,
64 glob,
65 dryRun,
66 list,
67 rename,
68 parser
69}) => {
70 (0, _migrate.migrate)(migration, {
71 configDir,
72 glob,
73 dryRun,
74 list,
75 rename,
76 parser,
77 logger
78 }).catch(err => {
79 logger.error(err);
80 process.exit(1);
81 });
82});
83
84_commander.default.command('extract [location] [output]').description('extract stories.json from a built version').action((location = 'storybook-static', output = _path.default.join(location, 'stories.json')) => (0, _extract.extract)(location, output).catch(e => {
85 logger.error(e);
86 process.exit(1);
87}));
88
89_commander.default.command('repro [outputDirectory]').description('Create a reproduction from a set of possible templates').option('-f --framework <framework>', 'Filter on given framework').option('-t --template <template>', 'Use the given template').option('-l --list', 'List available templates').option('-g --generator <generator>', 'Use custom generator command').option('--pnp', "Use Yarn Plug'n'Play mode instead of node_modules one").option('--e2e', 'Used in e2e context').action((outputDirectory, {
90 framework,
91 template,
92 list,
93 e2e,
94 generator,
95 pnp
96}) => (0, _repro.repro)({
97 outputDirectory,
98 framework,
99 template,
100 list,
101 e2e,
102 generator,
103 pnp
104}).catch(e => {
105 logger.error(e);
106 process.exit(1);
107}));
108
109_commander.default.command('link <repo-url-or-directory>').description('Pull down a repro from a URL (or a local directory), link it, and run storybook').option('--local', 'Link a local directory already in your file system').action((target, {
110 local
111}) => (0, _link.link)({
112 target,
113 local
114}).catch(e => {
115 logger.error(e);
116 process.exit(1);
117}));
118
119_commander.default.command('automigrate [fixId]').description('Check storybook for known problems or migrations and apply fixes').option('-y --yes', 'Skip prompting the user').option('-n --dry-run', 'Only check for fixes, do not actually run them').action((fixId, options) => (0, _automigrate.automigrate)(Object.assign({
120 fixId
121}, options)).catch(e => {
122 logger.error(e);
123 process.exit(1);
124}));
125
126_commander.default.on('command:*', ([invalidCmd]) => {
127 logger.error(' Invalid command: %s.\n See --help for a list of available commands.', invalidCmd); // eslint-disable-next-line
128
129 const availableCommands = _commander.default.commands.map(cmd => cmd._name);
130
131 const suggestion = availableCommands.find(cmd => (0, _leven.default)(cmd, invalidCmd) < 3);
132
133 if (suggestion) {
134 logger.log(`\n Did you mean ${suggestion}?`);
135 }
136
137 process.exit(1);
138});
139
140_commander.default.usage('<command> [options]').version(pkg.version).parse(process.argv);
\No newline at end of file