UNPKG

@storybook/cli

Version:

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

119 lines (95 loc) 3.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.baseGenerator = baseGenerator; require("core-js/modules/es.promise.js"); var _fsExtra = _interopRequireDefault(require("fs-extra")); var _coreCommon = require("@storybook/core-common"); var _project_types = require("../project_types"); var _helpers = require("../helpers"); var _configure = require("./configure"); var _jsPackageManager = require("../js-package-manager"); var _babelConfig = require("../babel-config"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const defaultOptions = { extraPackages: [], extraAddons: [], staticDir: undefined, addScripts: true, addComponents: true, addBabel: true, addESLint: false, extraMain: undefined, extensions: undefined, commonJs: false }; const builderDependencies = builder => { switch (builder) { case _project_types.CoreBuilder.Webpack4: return []; case _project_types.CoreBuilder.Webpack5: return ['@storybook/builder-webpack5', '@storybook/manager-webpack5']; default: return [builder]; } }; const stripVersions = addons => addons.map(addon => (0, _jsPackageManager.getPackageDetails)(addon)[0]); async function baseGenerator(packageManager, npmOptions, { language, builder }, framework, options = defaultOptions) { const { extraAddons, extraPackages, staticDir, addScripts, addComponents, addBabel, addESLint, extraMain, extensions } = Object.assign({}, defaultOptions, options); // added to main.js // make sure to update `canUsePrebuiltManager` in dev-server.js and build-manager-config/main.js when this list changes const addons = ['@storybook/addon-links', '@storybook/addon-essentials']; // added to package.json const addonPackages = [...addons, '@storybook/addon-actions']; const yarn2Dependencies = packageManager.type === 'yarn2' ? ['@storybook/addon-docs', '@mdx-js/react'] : []; const files = await _fsExtra.default.readdir(process.cwd()); const isNewFolder = !files.some(fname => fname.startsWith('.babel') || fname.startsWith('babel') || fname === 'package.json'); const packageJson = packageManager.retrievePackageJson(); const installedDependencies = new Set(Object.keys(packageJson.dependencies)); const frameworkPackage = `@storybook/${framework}`; const packages = [frameworkPackage, ...addonPackages, ...extraPackages, ...extraAddons, ...yarn2Dependencies, ...builderDependencies(builder)].filter(Boolean).filter(packageToInstall => !installedDependencies.has((0, _jsPackageManager.getPackageDetails)(packageToInstall)[0])); const versionedPackages = await packageManager.getVersionedPackages(...packages); const mainOptions = builder !== _project_types.CoreBuilder.Webpack4 ? Object.assign({ core: { builder } }, extraMain) : extraMain; (0, _configure.configure)(framework, Object.assign({ framework: frameworkPackage, addons: [...addons, ...stripVersions(extraAddons)], extensions, commonJs: options.commonJs }, mainOptions)); if (addComponents) { (0, _helpers.copyComponents)(framework, language); } const babelDependencies = addBabel ? await (0, _helpers.getBabelDependencies)(packageManager, packageJson) : []; if (isNewFolder) { babelDependencies.push(...(0, _coreCommon.getStorybookBabelDependencies)()); await (0, _babelConfig.generateStorybookBabelConfigInCWD)(); } packageManager.addDependencies(Object.assign({}, npmOptions, { packageJson }), [...versionedPackages, ...babelDependencies]); if (addScripts) { packageManager.addStorybookCommandInScripts({ port: 6006, staticFolder: staticDir }); } if (addESLint) { packageManager.addESLintConfig(); } }