UNPKG

4.2 kBJavaScriptView Raw
1"use strict";
2
3require("core-js/modules/es.promise.js");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.upgrade = exports.checkVersionConsistency = exports.isCorePackage = exports.getStorybookVersion = void 0;
9
10var _crossSpawn = require("cross-spawn");
11
12var _semver = _interopRequireDefault(require("@storybook/semver"));
13
14var _nodeLogger = require("@storybook/node-logger");
15
16var _jsPackageManager = require("./js-package-manager");
17
18var _helpers = require("./helpers");
19
20function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
22const versionRegex = /(@storybook\/[^@]+)@(\S+)/;
23
24const getStorybookVersion = line => {
25 if (line.startsWith('npm ')) return null;
26 const match = versionRegex.exec(line);
27 if (!match || !_semver.default.clean(match[2])) return null;
28 return {
29 package: match[1],
30 version: match[2]
31 };
32};
33
34exports.getStorybookVersion = getStorybookVersion;
35const excludeList = ['@storybook/linter-config', '@storybook/design-system', '@storybook/ember-cli-storybook', '@storybook/semver', '@storybook/eslint-config-storybook', '@storybook/bench', '@storybook/addon-bench', '@storybook/addon-console', '@storybook/csf', '@storybook/storybook-deployer'];
36
37const isCorePackage = pkg => pkg.startsWith('@storybook/') && !pkg.startsWith('@storybook/preset-') && !excludeList.includes(pkg);
38
39exports.isCorePackage = isCorePackage;
40const deprecatedPackages = [{
41 minVersion: '6.0.0-alpha.0',
42 url: 'https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#60-deprecations',
43 deprecations: ['@storybook/addon-notes', '@storybook/addon-info', '@storybook/addon-contexts', '@storybook/addon-options', '@storybook/addon-centered']
44}];
45
46const formatPackage = pkg => `${pkg.package}@${pkg.version}`;
47
48const warnPackages = pkgs => pkgs.forEach(pkg => _nodeLogger.logger.warn(`- ${formatPackage(pkg)}`));
49
50const checkVersionConsistency = () => {
51 const lines = (0, _crossSpawn.sync)('npm', ['ls'], {
52 stdio: 'pipe'
53 }).output.toString().split('\n');
54 const storybookPackages = lines.map(getStorybookVersion).filter(Boolean).filter(pkg => isCorePackage(pkg.package));
55
56 if (!storybookPackages.length) {
57 _nodeLogger.logger.warn('No storybook core packages found.');
58
59 _nodeLogger.logger.warn(`'npm ls | grep storybook' can show if multiple versions are installed.`);
60 }
61
62 storybookPackages.sort((a, b) => _semver.default.rcompare(a.version, b.version));
63 const latestVersion = storybookPackages[0].version;
64 const outdated = storybookPackages.filter(pkg => pkg.version !== latestVersion);
65
66 if (outdated.length > 0) {
67 _nodeLogger.logger.warn(`Found ${outdated.length} outdated packages (relative to '${formatPackage(storybookPackages[0])}')`);
68
69 _nodeLogger.logger.warn('Please make sure your packages are updated to ensure a consistent experience.');
70
71 warnPackages(outdated);
72 }
73
74 deprecatedPackages.forEach(({
75 minVersion,
76 url,
77 deprecations
78 }) => {
79 if (_semver.default.gte(latestVersion, minVersion)) {
80 const deprecated = storybookPackages.filter(pkg => deprecations.includes(pkg.package));
81
82 if (deprecated.length > 0) {
83 _nodeLogger.logger.warn(`Found ${deprecated.length} deprecated packages since ${minVersion}`);
84
85 _nodeLogger.logger.warn(`See ${url}`);
86
87 warnPackages(deprecated);
88 }
89 }
90 });
91};
92
93exports.checkVersionConsistency = checkVersionConsistency;
94
95const upgrade = async ({
96 prerelease,
97 skipCheck,
98 useNpm,
99 dryRun
100}) => {
101 const packageManager = _jsPackageManager.JsPackageManagerFactory.getPackageManager(useNpm);
102
103 (0, _helpers.commandLog)(`Checking for latest versions of '@storybook/*' packages`);
104 const flags = [];
105 if (!dryRun) flags.push('--upgrade');
106 flags.push('--target');
107 flags.push(prerelease ? 'greatest' : 'latest');
108 const check = (0, _crossSpawn.sync)('npx', ['npm-check-updates', '/storybook/', ...flags], {
109 stdio: 'pipe'
110 }).output.toString();
111
112 _nodeLogger.logger.info(check);
113
114 if (!dryRun) {
115 (0, _helpers.commandLog)(`Installing upgrades`);
116 packageManager.installDependencies();
117 }
118
119 if (!skipCheck) checkVersionConsistency();
120};
121
122exports.upgrade = upgrade;
\No newline at end of file