@nx/storybook
Version:
61 lines (60 loc) • 2.95 kB
JavaScript
;
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);
}