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.

61 lines (60 loc) 2.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ensureDependencies = ensureDependencies; const devkit_1 = require("@nx/devkit"); 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 = {}; // Storybook v8 ships `@storybook/core-server` and `@storybook/addon-essentials` // as separate packages; v9 folds them into `storybook`. const devDependencies = installedStorybookMajorVersion === 8 ? { '@storybook/core-server': storybookVersionToInstall, '@storybook/addon-essentials': storybookVersionToInstall, } : {}; const packageJson = (0, devkit_1.readJson)(tree, 'package.json'); packageJson.dependencies ??= {}; packageJson.devDependencies ??= {}; 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, undefined, true); }