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.46 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) { let storybook7VersionToInstall = versions_1.storybookVersion; if ((0, utilities_1.storybookMajorVersion)() >= 7 && (0, utilities_1.getInstalledStorybookVersion)() && (0, semver_1.gte)((0, utilities_1.getInstalledStorybookVersion)(), '7.0.0')) { storybook7VersionToInstall = (0, utilities_1.getInstalledStorybookVersion)(); } const dependencies = {}; const devDependencies = { '@storybook/core-server': storybook7VersionToInstall, '@storybook/addon-essentials': storybook7VersionToInstall, }; const packageJson = (0, devkit_1.readJson)(tree, 'package.json'); packageJson.dependencies ??= {}; packageJson.devDependencies ??= {}; if (!(0, semver_1.gte)((0, semver_1.coerce)(storybook7VersionToInstall), '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] = storybook7VersionToInstall; 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+)/); const uiFrameworkWithoutBuilder = matchResult ? matchResult[0] : null; if (uiFrameworkWithoutBuilder) { devDependencies[uiFrameworkWithoutBuilder] = storybook7VersionToInstall; } } if (options.uiFramework === '@storybook/vue3-vite') { if (!packageJson.dependencies['@storybook/vue3'] && !packageJson.devDependencies['@storybook/vue3']) { devDependencies['@storybook/vue3'] = storybook7VersionToInstall; } } if (options.uiFramework === '@storybook/angular') { if (!packageJson.dependencies['@angular/forms'] && !packageJson.devDependencies['@angular/forms']) { devDependencies['@angular/forms'] = '*'; } } if (options.uiFramework === '@storybook/web-components-vite' || options.uiFramework === '@storybook/web-components-webpack5') { 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); }