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.

142 lines (141 loc) 6.63 kB
"use strict"; 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, }); }