-
-
Notifications
You must be signed in to change notification settings - Fork 9.3k
/
generate.js
96 lines (87 loc) · 3.36 KB
/
generate.js
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
import program from 'commander';
import path from 'path';
import chalk from 'chalk';
import envinfo from 'envinfo';
import leven from 'leven';
import pkg from '../package.json';
import initiate from './initiate';
import { add } from './add';
import { migrate } from './migrate';
import { extract } from './extract';
const logger = console;
program
.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('--story-format <csf | csf-ts | mdx >', 'Generate stories in a specified format')
.option('-y --yes', 'Answer yes to all prompts')
.action((options) => initiate(options, pkg));
program
.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) => add(addonName, options));
program
.command('info')
.description('Prints debugging information about the local environment')
.action(() => {
logger.log(chalk.bold('\nEnvironment Info:'));
envinfo
.run({
System: ['OS', 'CPU'],
Binaries: ['Node', 'Yarn', 'npm'],
Browsers: ['Chrome', 'Edge', 'Firefox', 'Safari'],
npmPackages: '@storybook/*',
npmGlobalPackages: '@storybook/*',
})
.then(logger.log);
});
program
.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, { configDir, glob, dryRun, list, rename, parser }) => {
migrate(migration, { configDir, glob, dryRun, list, rename, parser, logger }).catch((err) => {
logger.error(err);
process.exit(1);
});
});
program
.command('extract [location] [output]')
.description('extract stories.json from a built version')
.action((location = 'storybook-static', output = path.join(location, 'stories.json')) =>
extract(location, output).catch((e) => {
logger.error(e);
process.exit(1);
})
);
program.command('*', { noHelp: true }).action(() => {
const [, , invalidCmd] = process.argv;
logger.error(' Invalid command: %s.\n See --help for a list of available commands.', invalidCmd);
// eslint-disable-next-line
const availableCommands = program.commands.map(cmd => cmd._name);
const suggestion = availableCommands.find((cmd) => leven(cmd, invalidCmd) < 3);
if (suggestion) {
logger.log(`\n Did you mean ${suggestion}?`);
}
process.exit(1);
});
program.usage('<command> [options]').version(pkg.version).parse(process.argv);
if (program.rawArgs.length < 3) {
program.help();
}