UNPKG

@storybook/cli

Version:

Storybook's CLI - easiest method of adding storybook to your projects

140 lines (105 loc) • 6.15 kB
"use strict"; require("core-js/modules/es.symbol.description.js"); var _commander = _interopRequireDefault(require("commander")); var _path = _interopRequireDefault(require("path")); var _chalk = _interopRequireDefault(require("chalk")); var _envinfo = _interopRequireDefault(require("envinfo")); var _leven = _interopRequireDefault(require("leven")); var _readPkgUp = require("read-pkg-up"); var _initiate = require("./initiate"); var _add = require("./add"); var _migrate = require("./migrate"); var _extract = require("./extract"); var _upgrade = require("./upgrade"); var _repro = require("./repro"); var _link = require("./link"); var _automigrate = require("./automigrate"); var _babelConfig = require("./babel-config"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const pkg = (0, _readPkgUp.sync)({ cwd: __dirname }).packageJson; const logger = console; _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)); _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)); _commander.default.command('babelrc').description('generate the default storybook babel config into your current working directory').action(() => (0, _babelConfig.generateStorybookBabelConfigInCWD)()); _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)); _commander.default.command('info').description('Prints debugging information about the local environment').action(() => { logger.log(_chalk.default.bold('\nEnvironment Info:')); _envinfo.default.run({ System: ['OS', 'CPU'], Binaries: ['Node', 'Yarn', 'npm'], Browsers: ['Chrome', 'Edge', 'Firefox', 'Safari'], npmPackages: '@storybook/*', npmGlobalPackages: '@storybook/*' }).then(logger.log); }); _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, { configDir, glob, dryRun, list, rename, parser }) => { (0, _migrate.migrate)(migration, { configDir, glob, dryRun, list, rename, parser, logger }).catch(err => { logger.error(err); process.exit(1); }); }); _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 => { logger.error(e); process.exit(1); })); _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, { framework, template, list, e2e, generator, pnp }) => (0, _repro.repro)({ outputDirectory, framework, template, list, e2e, generator, pnp }).catch(e => { logger.error(e); process.exit(1); })); _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, { local }) => (0, _link.link)({ target, local }).catch(e => { logger.error(e); process.exit(1); })); _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({ fixId }, options)).catch(e => { logger.error(e); process.exit(1); })); _commander.default.on('command:*', ([invalidCmd]) => { logger.error(' Invalid command: %s.\n See --help for a list of available commands.', invalidCmd); // eslint-disable-next-line const availableCommands = _commander.default.commands.map(cmd => cmd._name); const suggestion = availableCommands.find(cmd => (0, _leven.default)(cmd, invalidCmd) < 3); if (suggestion) { logger.log(`\n Did you mean ${suggestion}?`); } process.exit(1); }); _commander.default.usage('<command> [options]').version(pkg.version).parse(process.argv);