UNPKG

@nx/storybook

Version:

The Nx Plugin for Storybook contains executors and generators for allowing your workspace to use the powerful Storybook integration testing & documenting capabilities.

72 lines (71 loc) 3.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ensureDependencies = ensureDependencies; const devkit_1 = require("@nx/devkit"); const semver_1 = require("semver"); const utilities_1 = require("../../../utils/utilities"); const versions_1 = require("../../../utils/versions"); function ensureDependencies(tree, options) { const storybookVersionToInstall = (0, utilities_1.getInstalledStorybookVersion)(tree); const installedStorybookMajorVersion = (0, utilities_1.storybookMajorVersion)(tree); const dependencies = {}; const devDependencies = installedStorybookMajorVersion < 9 ? { '@storybook/core-server': storybookVersionToInstall, '@storybook/addon-essentials': storybookVersionToInstall, } : {}; const packageJson = (0, devkit_1.readJson)(tree, 'package.json'); packageJson.dependencies ??= {}; packageJson.devDependencies ??= {}; if (!(0, semver_1.gte)((0, semver_1.coerce)(storybookVersionToInstall), '8.0.0')) { // Needed for Storybook 7 // https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-peer-dependencies-required if (!packageJson.dependencies['react'] && !packageJson.devDependencies['react']) { dependencies['react'] = versions_1.reactVersion; } if (!packageJson.dependencies['react-dom'] && !packageJson.devDependencies['react-dom']) { dependencies['react-dom'] = versions_1.reactVersion; } } if (options.uiFramework) { devDependencies[options.uiFramework] = storybookVersionToInstall; const isPnpm = (0, devkit_1.detectPackageManager)(tree.root) === 'pnpm'; if (isPnpm) { // If it's pnpm, it needs the framework without the builder // as a dependency too (eg. @storybook/react) const matchResult = options.uiFramework?.match(/^@storybook\/([\w-]+?)(?:-(?:vite|webpack5|webpack))?$/); const uiFrameworkWithoutBuilder = matchResult ? `@storybook/${matchResult[1]}` : null; if (uiFrameworkWithoutBuilder && uiFrameworkWithoutBuilder !== options.uiFramework) { devDependencies[uiFrameworkWithoutBuilder] = storybookVersionToInstall; } } if (options.uiFramework === '@storybook/vue3-vite') { if (!packageJson.dependencies['@storybook/vue3'] && !packageJson.devDependencies['@storybook/vue3']) { devDependencies['@storybook/vue3'] = storybookVersionToInstall; } } if (options.uiFramework === '@storybook/angular') { if (!packageJson.dependencies['@angular/forms'] && !packageJson.devDependencies['@angular/forms']) { devDependencies['@angular/forms'] = '*'; } } if (options.uiFramework === '@storybook/web-components-vite') { devDependencies['lit'] = versions_1.litVersion; } if (options.uiFramework.endsWith('-vite')) { if (!packageJson.dependencies['vite'] && !packageJson.devDependencies['vite']) { devDependencies['vite'] = versions_1.viteVersion; } } } return (0, devkit_1.addDependenciesToPackageJson)(tree, dependencies, devDependencies); }