@nx/storybook
Version:
142 lines (141 loc) • 6.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.onlyShowGuide = onlyShowGuide;
exports.getAllStorybookInfo = getAllStorybookInfo;
exports.handleMigrationResult = handleMigrationResult;
exports.checkStorybookInstalled = checkStorybookInstalled;
exports.logResult = logResult;
const devkit_1 = require("@nx/devkit");
const fileutils_1 = require("nx/src/utils/fileutils");
const fs_1 = require("fs");
const path_1 = require("path");
function onlyShowGuide(storybookProjects) {
const packageManager = (0, devkit_1.detectPackageManager)();
const pm = (0, devkit_1.getPackageManagerCommand)(packageManager);
devkit_1.output.log({
title: 'Storybook 8 Migration Guide',
bodyLines: [
`You can run the following commands manually to upgrade your Storybook projects to Storybook 8:`,
``,
`1. Call the Storybook upgrade script:`,
`${pm.exec} ${packageManager === 'yarn' ? 'storybook' : 'storybook@latest'} upgrade`,
``,
`2. Call the Storybook automigrate scripts:`,
`Run the following commands for each Storybook project:`,
...Object.entries(storybookProjects).map(([_projectName, storybookProjectInfo]) => {
return `${pm.exec} ${packageManager === 'yarn' ? 'storybook' : 'storybook@latest'} automigrate --config-dir ${storybookProjectInfo.configDir}`;
}),
``,
],
});
}
function getAllStorybookInfo(tree) {
const allStorybookDirs = {};
(0, devkit_1.visitNotIgnoredFiles)(tree, '', (storybookConfigPath) => {
if (!storybookConfigPath.endsWith('.storybook/main.ts') &&
!storybookConfigPath.endsWith('.storybook/main.js')) {
return;
}
const storybookConfigDir = (0, path_1.dirname)(storybookConfigPath);
let projectRoot = '';
if (storybookConfigPath.includes('/.storybook')) {
projectRoot = storybookConfigDir.replace('/.storybook', '');
}
else {
projectRoot = storybookConfigDir.replace('.storybook', '');
}
if (projectRoot === '') {
projectRoot = '.';
}
const packageOrProjectJson = [
(0, devkit_1.joinPathFragments)(projectRoot, 'package.json'),
(0, devkit_1.joinPathFragments)(projectRoot, 'project.json'),
].find((p) => tree.exists(p));
if (!packageOrProjectJson) {
return;
}
const projectName = (0, devkit_1.readJson)(tree, packageOrProjectJson)?.name;
if (!projectName) {
return;
}
allStorybookDirs[projectName] = {
configDir: storybookConfigDir,
};
});
return allStorybookDirs;
}
function handleMigrationResult(migrateResult, allStorybookProjects) {
if ((0, fileutils_1.fileExists)((0, path_1.join)(devkit_1.workspaceRoot, 'migration-storybook.log')) &&
Object.keys(migrateResult.successfulProjects)?.length) {
const sbLogFile = (0, fs_1.readFileSync)((0, path_1.join)(devkit_1.workspaceRoot, 'migration-storybook.log'), 'utf-8');
Object.keys(migrateResult.successfulProjects).forEach((projectName) => {
if (sbLogFile.includes(`The migration failed to update your ${allStorybookProjects[projectName].configDir}`)) {
migrateResult.failedProjects[projectName] =
migrateResult.successfulProjects[projectName];
delete migrateResult.successfulProjects[projectName];
}
});
}
if (Object.keys(allStorybookProjects)?.length ===
Object.keys(migrateResult.successfulProjects)?.length ||
Object.keys(migrateResult.failedProjects)?.length === 0) {
devkit_1.output.log({
title: `Storybook configuration migrated.`,
bodyLines: [
`☑️ The automigrate command was successful.`,
`All your projects were migrated successfully.`,
],
color: 'green',
});
}
else {
if (Object.keys(migrateResult.failedProjects).length) {
if (Object.keys(migrateResult.failedProjects).length) {
devkit_1.output.log({
title: `Storybook configuration migrated.`,
bodyLines: [
`☑️ The automigrate command was successful.`,
`The following projects were migrated successfully:`,
...Object.keys(migrateResult.successfulProjects).map((project) => ` - ${project}`),
],
color: 'green',
});
}
devkit_1.output.log({
title: `Failed migrations.`,
bodyLines: [
`There were some projects that were not migrated successfully.`,
`⚠️ The following projects were not migrated successfully:`,
...Object.keys(migrateResult.failedProjects).map((project) => ` - ${project}`),
`You can run the following commands to migrate them manually:`,
...Object.entries(migrateResult.failedProjects).map(([_project, command]) => `- ${command}`),
],
color: 'red',
});
}
}
return migrateResult;
}
function checkStorybookInstalled(packageJson) {
return ((packageJson.dependencies['@storybook/core-server'] ||
packageJson.devDependencies['@storybook/core-server']) &&
(packageJson.dependencies['@nx/storybook'] ||
packageJson.devDependencies['@nx/storybook']));
}
function logResult(tree, migrationSummary) {
devkit_1.output.log({
title: `Migration complete!`,
bodyLines: [
`🎉 Your Storybook configuration has been migrated to Storybook ^8.0.0!`,
`📖 You can see a summary of the tasks that were performed in the storybook-migration-summary.md file in the root of your workspace.`,
],
color: 'green',
});
(0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, 'files'), '.', {
tmpl: '',
successfulProjects: Object.entries(migrationSummary?.successfulProjects)?.map(([_projectName, command]) => command),
failedProjects: Object.entries(migrationSummary?.failedProjects)?.map(([_projectName, command]) => command),
hasFailedProjects: Object.keys(migrationSummary?.failedProjects)?.length > 0,
hasSuccessfulProjects: Object.keys(migrationSummary?.successfulProjects)?.length > 0,
});
}