@storybook/cli 6.4.0-beta.2 → 6.4.0-beta.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/cjs/automigrate/fixes/angular12.js +79 -0
  2. package/dist/cjs/automigrate/fixes/cra5.js +79 -0
  3. package/dist/cjs/automigrate/fixes/index.js +33 -0
  4. package/dist/cjs/automigrate/fixes/mainjsFramework.js +89 -0
  5. package/dist/cjs/automigrate/fixes/webpack5.js +156 -0
  6. package/dist/cjs/automigrate/helpers/getStorybookConfiguration.js +27 -0
  7. package/dist/cjs/automigrate/helpers/getStorybookInfo.js +94 -0
  8. package/dist/cjs/automigrate/index.js +72 -0
  9. package/dist/cjs/automigrate/types.js +1 -0
  10. package/dist/cjs/frameworks/web-components/js/Button.js +1 -1
  11. package/dist/cjs/frameworks/web-components/ts/Button.ts +1 -1
  12. package/dist/cjs/generate.js +11 -2
  13. package/dist/cjs/generators/ANGULAR/index.js +1 -1
  14. package/dist/cjs/generators/AURELIA/index.js +1 -1
  15. package/dist/cjs/generators/REACT_NATIVE/index.js +2 -2
  16. package/dist/cjs/generators/REACT_NATIVE/template-csf/storybook/index.js +1 -1
  17. package/dist/cjs/generators/REACT_SCRIPTS/index.js +21 -4
  18. package/dist/cjs/generators/SERVER/index.js +1 -1
  19. package/dist/cjs/generators/baseGenerator.js +6 -2
  20. package/dist/cjs/helpers.js +3 -11
  21. package/dist/cjs/initiate.js +2 -17
  22. package/dist/cjs/project_types.js +1 -10
  23. package/dist/cjs/upgrade.js +37 -5
  24. package/dist/cjs/versions.json +57 -55
  25. package/dist/esm/automigrate/fixes/angular12.js +79 -0
  26. package/dist/esm/automigrate/fixes/cra5.js +79 -0
  27. package/dist/esm/automigrate/fixes/index.js +33 -0
  28. package/dist/esm/automigrate/fixes/mainjsFramework.js +89 -0
  29. package/dist/esm/automigrate/fixes/webpack5.js +156 -0
  30. package/dist/esm/automigrate/helpers/getStorybookConfiguration.js +27 -0
  31. package/dist/esm/automigrate/helpers/getStorybookInfo.js +94 -0
  32. package/dist/esm/automigrate/index.js +72 -0
  33. package/dist/esm/automigrate/types.js +1 -0
  34. package/dist/esm/frameworks/web-components/js/Button.js +1 -1
  35. package/dist/esm/frameworks/web-components/ts/Button.ts +1 -1
  36. package/dist/esm/generate.js +11 -2
  37. package/dist/esm/generators/ANGULAR/index.js +1 -1
  38. package/dist/esm/generators/AURELIA/index.js +1 -1
  39. package/dist/esm/generators/REACT_NATIVE/index.js +2 -2
  40. package/dist/esm/generators/REACT_NATIVE/template-csf/storybook/index.js +1 -1
  41. package/dist/esm/generators/REACT_SCRIPTS/index.js +21 -4
  42. package/dist/esm/generators/SERVER/index.js +1 -1
  43. package/dist/esm/generators/baseGenerator.js +6 -2
  44. package/dist/esm/helpers.js +3 -11
  45. package/dist/esm/initiate.js +2 -17
  46. package/dist/esm/project_types.js +1 -10
  47. package/dist/esm/upgrade.js +37 -5
  48. package/dist/esm/versions.json +57 -55
  49. package/dist/modern/automigrate/fixes/angular12.js +79 -0
  50. package/dist/modern/automigrate/fixes/cra5.js +79 -0
  51. package/dist/modern/automigrate/fixes/index.js +33 -0
  52. package/dist/modern/automigrate/fixes/mainjsFramework.js +89 -0
  53. package/dist/modern/automigrate/fixes/webpack5.js +156 -0
  54. package/dist/modern/automigrate/helpers/getStorybookConfiguration.js +27 -0
  55. package/dist/modern/automigrate/helpers/getStorybookInfo.js +94 -0
  56. package/dist/modern/automigrate/index.js +72 -0
  57. package/dist/modern/automigrate/types.js +1 -0
  58. package/dist/modern/frameworks/web-components/js/Button.js +1 -1
  59. package/dist/modern/generate.js +11 -2
  60. package/dist/modern/generators/ANGULAR/index.js +1 -1
  61. package/dist/modern/generators/AURELIA/index.js +1 -1
  62. package/dist/modern/generators/REACT_NATIVE/index.js +2 -2
  63. package/dist/modern/generators/REACT_NATIVE/template-csf/storybook/index.js +1 -1
  64. package/dist/modern/generators/REACT_SCRIPTS/index.js +21 -4
  65. package/dist/modern/generators/SERVER/index.js +1 -1
  66. package/dist/modern/generators/baseGenerator.js +6 -2
  67. package/dist/modern/helpers.js +3 -11
  68. package/dist/modern/initiate.js +2 -17
  69. package/dist/modern/project_types.js +1 -10
  70. package/dist/modern/upgrade.js +37 -5
  71. package/dist/modern/versions.json +57 -55
  72. package/dist/ts3.4/automigrate/fixes/angular12.d.ts +15 -0
  73. package/dist/ts3.4/automigrate/fixes/cra5.d.ts +15 -0
  74. package/dist/ts3.4/automigrate/fixes/index.d.ts +3 -0
  75. package/dist/ts3.4/automigrate/fixes/mainjsFramework.d.ts +8 -0
  76. package/dist/ts3.4/automigrate/fixes/webpack5.d.ts +26 -0
  77. package/dist/ts3.4/automigrate/helpers/getStorybookConfiguration.d.ts +1 -0
  78. package/dist/ts3.4/automigrate/helpers/getStorybookInfo.d.ts +11 -0
  79. package/dist/ts3.4/automigrate/index.d.ts +7 -0
  80. package/dist/ts3.4/automigrate/types.d.ts +15 -0
  81. package/dist/ts3.4/generators/REACT_NATIVE/index.d.ts +1 -2
  82. package/dist/ts3.4/generators/baseGenerator.d.ts +1 -2
  83. package/dist/ts3.4/helpers.d.ts +2 -2
  84. package/dist/ts3.4/initiate.d.ts +1 -2
  85. package/dist/ts3.4/project_types.d.ts +0 -7
  86. package/dist/ts3.4/upgrade.d.ts +7 -3
  87. package/dist/ts3.9/automigrate/fixes/angular12.d.ts +15 -0
  88. package/dist/ts3.9/automigrate/fixes/cra5.d.ts +15 -0
  89. package/dist/ts3.9/automigrate/fixes/index.d.ts +3 -0
  90. package/dist/ts3.9/automigrate/fixes/mainjsFramework.d.ts +8 -0
  91. package/dist/ts3.9/automigrate/fixes/webpack5.d.ts +26 -0
  92. package/dist/ts3.9/automigrate/helpers/getStorybookConfiguration.d.ts +1 -0
  93. package/dist/ts3.9/automigrate/helpers/getStorybookInfo.d.ts +11 -0
  94. package/dist/ts3.9/automigrate/index.d.ts +7 -0
  95. package/dist/ts3.9/automigrate/types.d.ts +15 -0
  96. package/dist/ts3.9/generators/REACT_NATIVE/index.d.ts +1 -2
  97. package/dist/ts3.9/generators/baseGenerator.d.ts +1 -2
  98. package/dist/ts3.9/helpers.d.ts +2 -2
  99. package/dist/ts3.9/initiate.d.ts +1 -2
  100. package/dist/ts3.9/project_types.d.ts +0 -7
  101. package/dist/ts3.9/upgrade.d.ts +7 -3
  102. package/package.json +7 -6
@@ -28,6 +28,8 @@ var _repro = require("./repro");
28
28
 
29
29
  var _link = require("./link");
30
30
 
31
+ var _automigrate = require("./automigrate");
32
+
31
33
  var _babelConfig = require("./babel-config");
32
34
 
33
35
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -37,13 +39,13 @@ const pkg = (0, _readPkgUp.sync)({
37
39
  }).packageJson;
38
40
  const logger = console;
39
41
 
40
- _commander.default.command('init').description('Initialize Storybook into your project.').option('-f --force', 'Force add Storybook').option('-s --skip-install', 'Skip installing deps').option('-N --use-npm', 'Use npm to install deps').option('-p --parser <babel | babylon | flow | ts | tsx>', 'jscodeshift parser').option('-t --type <type>', 'Add Storybook for a specific project type').option('--story-format <csf | csf-ts | mdx >', 'Generate stories in a specified format').option('-y --yes', 'Answer yes to all prompts').option('-b --builder <builder>', 'Builder library').option('-l --linkable', 'Prepare installation for link (contributor helper)').action(options => (0, _initiate.initiate)(options, pkg));
42
+ _commander.default.command('init').description('Initialize Storybook into your project.').option('-f --force', 'Force add Storybook').option('-s --skip-install', 'Skip installing deps').option('-N --use-npm', 'Use npm to install deps').option('-p --parser <babel | babylon | flow | ts | tsx>', 'jscodeshift parser').option('-t --type <type>', 'Add Storybook for a specific project type').option('-y --yes', 'Answer yes to all prompts').option('-b --builder <builder>', 'Builder library').option('-l --linkable', 'Prepare installation for link (contributor helper)').action(options => (0, _initiate.initiate)(options, pkg));
41
43
 
42
44
  _commander.default.command('add <addon>').description('Add an addon to your Storybook').option('-N --use-npm', 'Use NPM to build the Storybook server').option('-s --skip-postinstall', 'Skip package specific postinstall config modifications').action((addonName, options) => (0, _add.add)(addonName, options));
43
45
 
44
46
  _commander.default.command('babelrc').description('generate the default storybook babel config into your current working directory').action(() => (0, _babelConfig.generateStorybookBabelConfigInCWD)());
45
47
 
46
- _commander.default.command('upgrade').description('Upgrade your Storybook packages to the latest').option('-N --use-npm', 'Use NPM to build the Storybook server').option('-n --dry-run', 'Only check for upgrades, do not install').option('-p --prerelease', 'Upgrade to the pre-release packages').option('-s --skip-check', 'Skip postinstall version consistency checks').action(options => (0, _upgrade.upgrade)(options));
48
+ _commander.default.command('upgrade').description('Upgrade your Storybook packages to the latest').option('-N --use-npm', 'Use NPM to build the Storybook server').option('-y --yes', 'Skip prompting the user').option('-n --dry-run', 'Only check for upgrades, do not install').option('-p --prerelease', 'Upgrade to the pre-release packages').option('-s --skip-check', 'Skip postinstall version and automigration checks').action(options => (0, _upgrade.upgrade)(options));
47
49
 
48
50
  _commander.default.command('info').description('Prints debugging information about the local environment').action(() => {
49
51
  logger.log(_chalk.default.bold('\nEnvironment Info:'));
@@ -114,6 +116,13 @@ _commander.default.command('link <repo-url-or-directory>').description('Pull dow
114
116
  process.exit(1);
115
117
  }));
116
118
 
119
+ _commander.default.command('automigrate [fixId]').description('Check storybook for known problems or migrations and apply fixes').option('-y --yes', 'Skip prompting the user').option('-n --dry-run', 'Only check for fixes, do not actually run them').action((fixId, options) => (0, _automigrate.automigrate)(Object.assign({
120
+ fixId
121
+ }, options)).catch(e => {
122
+ logger.error(e);
123
+ process.exit(1);
124
+ }));
125
+
117
126
  _commander.default.on('command:*', ([invalidCmd]) => {
118
127
  logger.error(' Invalid command: %s.\n See --help for a list of available commands.', invalidCmd); // eslint-disable-next-line
119
128
 
@@ -59,7 +59,7 @@ const generator = async (packageManager, npmOptions, options) => {
59
59
  extraPackages: ['@compodoc/compodoc', '@angular/elements', '@webcomponents/custom-elements'],
60
60
  addScripts: false
61
61
  });
62
- (0, _helpers.copyTemplate)(__dirname, options.storyFormat);
62
+ (0, _helpers.copyTemplate)(__dirname);
63
63
  editAngularAppTsConfig();
64
64
  (0, _angularHelpers.editStorybookTsConfig)(_path.default.resolve('./.storybook/tsconfig.json')); // edit scripts to generate docs
65
65
 
@@ -36,7 +36,7 @@ const generator = async (packageManager, npmOptions, options) => {
36
36
  (0, _baseGenerator.baseGenerator)(packageManager, npmOptions, options, 'aurelia', {
37
37
  extraPackages: ['aurelia']
38
38
  });
39
- (0, _helpers.copyTemplate)(__dirname, options.storyFormat);
39
+ (0, _helpers.copyTemplate)(__dirname);
40
40
  };
41
41
 
42
42
  var _default = generator;
@@ -15,7 +15,7 @@ var _helpers = require("../../helpers");
15
15
 
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
- const generator = async (packageManager, npmOptions, installServer, options) => {
18
+ const generator = async (packageManager, npmOptions, installServer) => {
19
19
  // set correct project name on entry files if possible
20
20
  const dirname = _shelljs.default.ls('-d', 'ios/*.xcodeproj').stdout; // Only notify about app name if running in React Native vanilla (Expo projects do not have ios directory)
21
21
 
@@ -50,7 +50,7 @@ const generator = async (packageManager, npmOptions, installServer, options) =>
50
50
  });
51
51
  }
52
52
 
53
- (0, _helpers.copyTemplate)(__dirname, options.storyFormat);
53
+ (0, _helpers.copyTemplate)(__dirname);
54
54
  };
55
55
 
56
56
  var _default = generator;
@@ -14,7 +14,7 @@ configure(() => {
14
14
  require('./stories');
15
15
  }, module);
16
16
 
17
- // Refer to https://github.com/storybookjs/storybook/tree/master/app/react-native#start-command-parameters
17
+ // Refer to https://github.com/storybookjs/react-native/tree/master/app/react-native#getstorybookui-options
18
18
  // To find allowed options for getStorybookUI
19
19
  const StorybookUIRoot = getStorybookUI({});
20
20
 
@@ -11,11 +11,17 @@ var _path = _interopRequireDefault(require("path"));
11
11
 
12
12
  var _fs = _interopRequireDefault(require("fs"));
13
13
 
14
+ var _semver = _interopRequireDefault(require("@storybook/semver"));
15
+
14
16
  var _baseGenerator = require("../baseGenerator");
15
17
 
18
+ var _project_types = require("../../project_types");
19
+
16
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
21
 
18
22
  const generator = async (packageManager, npmOptions, options) => {
23
+ var _semver$coerce;
24
+
19
25
  const extraMain = options.linkable ? {
20
26
  webpackFinal: `%%(config) => {
21
27
  const path = require('path');
@@ -29,10 +35,21 @@ const generator = async (packageManager, npmOptions, options) => {
29
35
  }
30
36
  %%`
31
37
  } : {};
32
- await (0, _baseGenerator.baseGenerator)(packageManager, npmOptions, options, 'react', {
33
- extraAddons: ['@storybook/preset-create-react-app'],
34
- // `@storybook/preset-create-react-app` has `@storybook/node-logger` as peerDep
35
- extraPackages: ['@storybook/node-logger'],
38
+ const craVersion = (_semver$coerce = _semver.default.coerce(packageManager.retrievePackageJson().dependencies['react-scripts'])) === null || _semver$coerce === void 0 ? void 0 : _semver$coerce.version;
39
+
40
+ const isCra5 = craVersion && _semver.default.gte(craVersion, '5.0.0');
41
+
42
+ const updatedOptions = isCra5 ? Object.assign({}, options, {
43
+ builder: _project_types.CoreBuilder.Webpack5
44
+ }) : options; // `@storybook/preset-create-react-app` has `@storybook/node-logger` as peerDep
45
+
46
+ const extraPackages = ['@storybook/node-logger'];
47
+ if (isCra5) extraPackages.push('webpack'); // preset v3 is compat with older versions of CRA, otherwise let version float
48
+
49
+ const extraAddons = [`@storybook/preset-create-react-app${isCra5 ? '' : '@3'}`];
50
+ await (0, _baseGenerator.baseGenerator)(packageManager, npmOptions, updatedOptions, 'react', {
51
+ extraAddons,
52
+ extraPackages,
36
53
  staticDir: _fs.default.existsSync(_path.default.resolve('./public')) ? 'public' : undefined,
37
54
  addBabel: false,
38
55
  addESLint: true,
@@ -15,7 +15,7 @@ const generator = async (packageManager, npmOptions, options) => {
15
15
  (0, _baseGenerator.baseGenerator)(packageManager, npmOptions, options, 'server', {
16
16
  extensions: ['json']
17
17
  });
18
- (0, _helpers.copyTemplate)(__dirname, options.storyFormat);
18
+ (0, _helpers.copyTemplate)(__dirname);
19
19
  };
20
20
 
21
21
  var _default = generator;
@@ -49,6 +49,8 @@ const builderDependencies = builder => {
49
49
  }
50
50
  };
51
51
 
52
+ const stripVersions = addons => addons.map(addon => (0, _jsPackageManager.getPackageDetails)(addon)[0]);
53
+
52
54
  async function baseGenerator(packageManager, npmOptions, {
53
55
  language,
54
56
  builder
@@ -74,7 +76,8 @@ async function baseGenerator(packageManager, npmOptions, {
74
76
  const isNewFolder = !files.some(fname => fname.startsWith('.babel') || fname.startsWith('babel') || fname === 'package.json');
75
77
  const packageJson = packageManager.retrievePackageJson();
76
78
  const installedDependencies = new Set(Object.keys(packageJson.dependencies));
77
- const packages = [`@storybook/${framework}`, ...addonPackages, ...extraPackages, ...extraAddons, ...yarn2Dependencies, ...builderDependencies(builder)].filter(Boolean).filter(packageToInstall => !installedDependencies.has((0, _jsPackageManager.getPackageDetails)(packageToInstall)[0]));
79
+ const frameworkPackage = `@storybook/${framework}`;
80
+ const packages = [frameworkPackage, ...addonPackages, ...extraPackages, ...extraAddons, ...yarn2Dependencies, ...builderDependencies(builder)].filter(Boolean).filter(packageToInstall => !installedDependencies.has((0, _jsPackageManager.getPackageDetails)(packageToInstall)[0]));
78
81
  const versionedPackages = await packageManager.getVersionedPackages(...packages);
79
82
  const mainOptions = builder !== _project_types.CoreBuilder.Webpack4 ? Object.assign({
80
83
  core: {
@@ -82,7 +85,8 @@ async function baseGenerator(packageManager, npmOptions, {
82
85
  }
83
86
  }, extraMain) : extraMain;
84
87
  (0, _configure.configure)(framework, Object.assign({
85
- addons: [...addons, ...extraAddons],
88
+ framework: frameworkPackage,
89
+ addons: [...addons, ...stripVersions(extraAddons)],
86
90
  extensions,
87
91
  commonJs: options.commonJs
88
92
  }, mainOptions));
@@ -28,8 +28,6 @@ var _semver = require("@storybook/semver");
28
28
 
29
29
  var _stripJsonComments = _interopRequireDefault(require("strip-json-comments"));
30
30
 
31
- var _project_types = require("./project_types");
32
-
33
31
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
32
 
35
33
  /* eslint-disable no-param-reassign */
@@ -178,17 +176,11 @@ function addToDevDependenciesIfNotPresent(packageJson, name, packageVersion) {
178
176
  }
179
177
  }
180
178
 
181
- function copyTemplate(templateRoot, storyFormat) {
182
- const templateDir = _path.default.resolve(templateRoot, `template-${storyFormat}/`);
179
+ function copyTemplate(templateRoot) {
180
+ const templateDir = _path.default.resolve(templateRoot, `template-csf/`);
183
181
 
184
182
  if (!_fs.default.existsSync(templateDir)) {
185
- // Fallback to CSF plain first, in case format is typescript but template is not available.
186
- if (storyFormat === _project_types.StoryFormat.CSF_TYPESCRIPT) {
187
- copyTemplate(templateRoot, _project_types.StoryFormat.CSF);
188
- return;
189
- }
190
-
191
- throw new Error(`Unsupported story format: ${storyFormat}`);
183
+ throw new Error(`Couldn't find template dir`);
192
184
  }
193
185
 
194
186
  _fsExtra.default.copySync(templateDir, '.', {
@@ -63,8 +63,6 @@ var _RAX = _interopRequireDefault(require("./generators/RAX"));
63
63
 
64
64
  var _SERVER = _interopRequireDefault(require("./generators/SERVER"));
65
65
 
66
- var _warn = require("./warn");
67
-
68
66
  var _jsPackageManager = require("./js-package-manager");
69
67
 
70
68
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -79,13 +77,7 @@ const installStorybook = (projectType, options) => {
79
77
  skipInstall: options.skipInstall
80
78
  };
81
79
  const language = (0, _detect.detectLanguage)();
82
- const hasTSDependency = language === _project_types.SupportedLanguage.TYPESCRIPT;
83
- (0, _warn.warn)({
84
- hasTSDependency
85
- });
86
- const defaultStoryFormat = hasTSDependency ? _project_types.StoryFormat.CSF_TYPESCRIPT : _project_types.StoryFormat.CSF;
87
80
  const generatorOptions = {
88
- storyFormat: options.storyFormat || defaultStoryFormat,
89
81
  language,
90
82
  builder: options.builder || _project_types.CoreBuilder.Webpack4,
91
83
  linkable: !!options.linkable,
@@ -138,7 +130,7 @@ const installStorybook = (projectType, options) => {
138
130
  initial: false
139
131
  }])).then(({
140
132
  server
141
- }) => (0, _REACT_NATIVE.default)(packageManager, npmOptions, server, generatorOptions)).then((0, _helpers.commandLog)('Adding Storybook support to your "React Native" app')).then(end).then(() => {
133
+ }) => (0, _REACT_NATIVE.default)(packageManager, npmOptions, server)).then((0, _helpers.commandLog)('Adding Storybook support to your "React Native" app')).then(end).then(() => {
142
134
  logger.log(_chalk.default.red('NOTE: installation is not 100% automated.'));
143
135
  logger.log(`To quickly run Storybook, replace contents of your app entry with:\n`);
144
136
  (0, _helpers.codeLog)(["export {default} from './storybook';"]);
@@ -289,14 +281,7 @@ function initiate(options, pkg) {
289
281
  }
290
282
 
291
283
  done();
292
- const cleanOptions = Object.assign({}, options);
293
-
294
- if (options.storyFormat === _project_types.StoryFormat.MDX) {
295
- logger.warn(' The MDX CLI template is deprecated. The JS and TS templates already include MDX examples!');
296
- cleanOptions.storyFormat = undefined;
297
- }
298
-
299
- return installStorybook(projectType, Object.assign({}, cleanOptions, isEsm ? {
284
+ return installStorybook(projectType, Object.assign({}, options, isEsm ? {
300
285
  commonJs: true
301
286
  } : undefined));
302
287
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.installableProjectTypes = exports.unsupportedTemplate = exports.supportedTemplates = exports.SupportedLanguage = exports.CoreBuilder = exports.StoryFormat = exports.SUPPORTED_FRAMEWORKS = exports.ProjectType = void 0;
6
+ exports.installableProjectTypes = exports.unsupportedTemplate = exports.supportedTemplates = exports.SupportedLanguage = exports.CoreBuilder = exports.SUPPORTED_FRAMEWORKS = exports.ProjectType = void 0;
7
7
 
8
8
  var _semver = require("@storybook/semver");
9
9
 
@@ -52,15 +52,6 @@ exports.ProjectType = ProjectType;
52
52
 
53
53
  const SUPPORTED_FRAMEWORKS = ['react', 'react-native', 'vue', 'vue3', 'angular', 'mithril', 'riot', 'ember', 'marionette', 'marko', 'meteor', 'preact', 'svelte', 'rax', 'aurelia'];
54
54
  exports.SUPPORTED_FRAMEWORKS = SUPPORTED_FRAMEWORKS;
55
- let StoryFormat;
56
- exports.StoryFormat = StoryFormat;
57
-
58
- (function (StoryFormat) {
59
- StoryFormat["CSF"] = "csf";
60
- StoryFormat["CSF_TYPESCRIPT"] = "csf-ts";
61
- StoryFormat["MDX"] = "mdx";
62
- })(StoryFormat || (exports.StoryFormat = StoryFormat = {}));
63
-
64
55
  let CoreBuilder; // The `& {}` bit allows for auto-complete, see: https://github.com/microsoft/TypeScript/issues/29729
65
56
 
66
57
  exports.CoreBuilder = CoreBuilder;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.upgrade = exports.checkVersionConsistency = exports.isCorePackage = exports.getStorybookVersion = void 0;
6
+ exports.upgrade = exports.addExtraFlags = exports.checkVersionConsistency = exports.isCorePackage = exports.getStorybookVersion = void 0;
7
7
 
8
8
  require("core-js/modules/es.promise.js");
9
9
 
@@ -17,6 +17,8 @@ var _jsPackageManager = require("./js-package-manager");
17
17
 
18
18
  var _helpers = require("./helpers");
19
19
 
20
+ var _automigrate = require("./automigrate");
21
+
20
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
23
 
22
24
  const versionRegex = /(@storybook\/[^@]+)@(\S+)/;
@@ -91,21 +93,45 @@ const checkVersionConsistency = () => {
91
93
  };
92
94
 
93
95
  exports.checkVersionConsistency = checkVersionConsistency;
96
+ const EXTRA_FLAGS = {
97
+ 'react-scripts@<5': ['--reject', '/preset-create-react-app/']
98
+ };
99
+
100
+ const addExtraFlags = (extraFlags, flags, {
101
+ dependencies,
102
+ devDependencies
103
+ }) => {
104
+ return Object.entries(extraFlags).reduce((acc, entry) => {
105
+ const [pattern, extra] = entry;
106
+ const [pkg, specifier] = (0, _jsPackageManager.getPackageDetails)(pattern);
107
+ const pkgVersion = dependencies[pkg] || devDependencies[pkg];
108
+
109
+ if (pkgVersion && _semver.default.satisfies(_semver.default.coerce(pkgVersion), specifier)) {
110
+ return [...acc, ...extra];
111
+ }
112
+
113
+ return acc;
114
+ }, [...flags]);
115
+ };
116
+
117
+ exports.addExtraFlags = addExtraFlags;
94
118
 
95
119
  const upgrade = async ({
96
120
  prerelease,
97
121
  skipCheck,
98
122
  useNpm,
99
- dryRun
123
+ dryRun,
124
+ yes
100
125
  }) => {
101
126
  const packageManager = _jsPackageManager.JsPackageManagerFactory.getPackageManager(useNpm);
102
127
 
103
128
  (0, _helpers.commandLog)(`Checking for latest versions of '@storybook/*' packages`);
104
- const flags = [];
129
+ let flags = [];
105
130
  if (!dryRun) flags.push('--upgrade');
106
131
  flags.push('--target');
107
132
  flags.push(prerelease ? 'greatest' : 'latest');
108
- const check = (0, _crossSpawn.sync)('npx', ['npm-check-updates', '/storybook/', ...flags], {
133
+ flags = addExtraFlags(EXTRA_FLAGS, flags, packageManager.retrievePackageJson());
134
+ const check = (0, _crossSpawn.sync)('npx', ['npm-check-updates@latest', '/storybook/', ...flags], {
109
135
  stdio: 'pipe'
110
136
  }).output.toString();
111
137
 
@@ -116,7 +142,13 @@ const upgrade = async ({
116
142
  packageManager.installDependencies();
117
143
  }
118
144
 
119
- if (!skipCheck) checkVersionConsistency();
145
+ if (!skipCheck) {
146
+ checkVersionConsistency();
147
+ await (0, _automigrate.automigrate)({
148
+ dryRun,
149
+ yes
150
+ });
151
+ }
120
152
  };
121
153
 
122
154
  exports.upgrade = upgrade;
@@ -1,57 +1,59 @@
1
1
  {
2
- "@storybook/addon-a11y": "6.4.0-beta.2",
3
- "@storybook/addon-actions": "6.4.0-beta.2",
4
- "@storybook/addon-backgrounds": "6.4.0-beta.2",
5
- "@storybook/addon-controls": "6.4.0-beta.2",
6
- "@storybook/addon-docs": "6.4.0-beta.2",
7
- "@storybook/addon-essentials": "6.4.0-beta.2",
8
- "@storybook/addon-jest": "6.4.0-beta.2",
9
- "@storybook/addon-links": "6.4.0-beta.2",
10
- "@storybook/addon-storyshots": "6.4.0-beta.2",
11
- "@storybook/addon-storyshots-puppeteer": "6.4.0-beta.2",
12
- "@storybook/addon-storysource": "6.4.0-beta.2",
13
- "@storybook/addon-toolbars": "6.4.0-beta.2",
14
- "@storybook/addon-viewport": "6.4.0-beta.2",
15
- "@storybook/addons": "6.4.0-beta.2",
16
- "@storybook/angular": "6.4.0-beta.2",
17
- "@storybook/api": "6.4.0-beta.2",
18
- "@storybook/aurelia": "6.4.0-beta.2",
19
- "@storybook/builder-webpack4": "6.4.0-beta.2",
20
- "@storybook/builder-webpack5": "6.4.0-beta.2",
21
- "@storybook/channel-postmessage": "6.4.0-beta.2",
22
- "@storybook/channel-websocket": "6.4.0-beta.2",
23
- "@storybook/channels": "6.4.0-beta.2",
24
- "@storybook/cli": "6.4.0-beta.2",
25
- "@storybook/client-api": "6.4.0-beta.2",
26
- "@storybook/client-logger": "6.4.0-beta.2",
27
- "@storybook/codemod": "6.4.0-beta.2",
28
- "@storybook/components": "6.4.0-beta.2",
29
- "@storybook/core": "6.4.0-beta.2",
30
- "@storybook/core-client": "6.4.0-beta.2",
31
- "@storybook/core-common": "6.4.0-beta.2",
32
- "@storybook/core-events": "6.4.0-beta.2",
33
- "@storybook/core-server": "6.4.0-beta.2",
34
- "@storybook/csf-tools": "6.4.0-beta.2",
35
- "@storybook/ember": "6.4.0-beta.2",
36
- "@storybook/html": "6.4.0-beta.2",
37
- "@storybook/manager-webpack4": "6.4.0-beta.2",
38
- "@storybook/manager-webpack5": "6.4.0-beta.2",
39
- "@storybook/marionette": "6.4.0-beta.2",
40
- "@storybook/marko": "6.4.0-beta.2",
41
- "@storybook/mithril": "6.4.0-beta.2",
42
- "@storybook/node-logger": "6.4.0-beta.2",
43
- "@storybook/postinstall": "6.4.0-beta.2",
44
- "@storybook/preact": "6.4.0-beta.2",
45
- "@storybook/rax": "6.4.0-beta.2",
46
- "@storybook/react": "6.4.0-beta.2",
47
- "@storybook/riot": "6.4.0-beta.2",
48
- "@storybook/router": "6.4.0-beta.2",
49
- "@storybook/server": "6.4.0-beta.2",
50
- "@storybook/source-loader": "6.4.0-beta.2",
51
- "@storybook/svelte": "6.4.0-beta.2",
52
- "@storybook/theming": "6.4.0-beta.2",
53
- "@storybook/ui": "6.4.0-beta.2",
54
- "@storybook/vue": "6.4.0-beta.2",
55
- "@storybook/vue3": "6.4.0-beta.2",
56
- "@storybook/web-components": "6.4.0-beta.2"
2
+ "@storybook/addon-a11y": "6.4.0-beta.23",
3
+ "@storybook/addon-actions": "6.4.0-beta.23",
4
+ "@storybook/addon-backgrounds": "6.4.0-beta.23",
5
+ "@storybook/addon-controls": "6.4.0-beta.23",
6
+ "@storybook/addon-docs": "6.4.0-beta.23",
7
+ "@storybook/addon-essentials": "6.4.0-beta.23",
8
+ "@storybook/addon-interactions": "6.4.0-beta.23",
9
+ "@storybook/addon-jest": "6.4.0-beta.23",
10
+ "@storybook/addon-links": "6.4.0-beta.23",
11
+ "@storybook/addon-storyshots": "6.4.0-beta.23",
12
+ "@storybook/addon-storyshots-puppeteer": "6.4.0-beta.23",
13
+ "@storybook/addon-storysource": "6.4.0-beta.23",
14
+ "@storybook/addon-toolbars": "6.4.0-beta.23",
15
+ "@storybook/addon-viewport": "6.4.0-beta.23",
16
+ "@storybook/addons": "6.4.0-beta.23",
17
+ "@storybook/angular": "6.4.0-beta.23",
18
+ "@storybook/api": "6.4.0-beta.23",
19
+ "@storybook/aurelia": "6.4.0-beta.23",
20
+ "@storybook/builder-webpack4": "6.4.0-beta.23",
21
+ "@storybook/builder-webpack5": "6.4.0-beta.23",
22
+ "@storybook/channel-postmessage": "6.4.0-beta.23",
23
+ "@storybook/channel-websocket": "6.4.0-beta.23",
24
+ "@storybook/channels": "6.4.0-beta.23",
25
+ "@storybook/cli": "6.4.0-beta.23",
26
+ "@storybook/client-api": "6.4.0-beta.23",
27
+ "@storybook/client-logger": "6.4.0-beta.23",
28
+ "@storybook/codemod": "6.4.0-beta.23",
29
+ "@storybook/components": "6.4.0-beta.23",
30
+ "@storybook/core": "6.4.0-beta.23",
31
+ "@storybook/core-client": "6.4.0-beta.23",
32
+ "@storybook/core-common": "6.4.0-beta.23",
33
+ "@storybook/core-events": "6.4.0-beta.23",
34
+ "@storybook/core-server": "6.4.0-beta.23",
35
+ "@storybook/csf-tools": "6.4.0-beta.23",
36
+ "@storybook/ember": "6.4.0-beta.23",
37
+ "@storybook/html": "6.4.0-beta.23",
38
+ "@storybook/instrumenter": "6.4.0-beta.23",
39
+ "@storybook/manager-webpack4": "6.4.0-beta.23",
40
+ "@storybook/manager-webpack5": "6.4.0-beta.23",
41
+ "@storybook/marionette": "6.4.0-beta.23",
42
+ "@storybook/marko": "6.4.0-beta.23",
43
+ "@storybook/mithril": "6.4.0-beta.23",
44
+ "@storybook/node-logger": "6.4.0-beta.23",
45
+ "@storybook/postinstall": "6.4.0-beta.23",
46
+ "@storybook/preact": "6.4.0-beta.23",
47
+ "@storybook/rax": "6.4.0-beta.23",
48
+ "@storybook/react": "6.4.0-beta.23",
49
+ "@storybook/riot": "6.4.0-beta.23",
50
+ "@storybook/router": "6.4.0-beta.23",
51
+ "@storybook/server": "6.4.0-beta.23",
52
+ "@storybook/source-loader": "6.4.0-beta.23",
53
+ "@storybook/svelte": "6.4.0-beta.23",
54
+ "@storybook/theming": "6.4.0-beta.23",
55
+ "@storybook/ui": "6.4.0-beta.23",
56
+ "@storybook/vue": "6.4.0-beta.23",
57
+ "@storybook/vue3": "6.4.0-beta.23",
58
+ "@storybook/web-components": "6.4.0-beta.23"
57
59
  }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.angular12 = void 0;
7
+
8
+ require("core-js/modules/es.promise.js");
9
+
10
+ var _chalk = _interopRequireDefault(require("chalk"));
11
+
12
+ var _tsDedent = _interopRequireDefault(require("ts-dedent"));
13
+
14
+ var _semver = _interopRequireDefault(require("@storybook/semver"));
15
+
16
+ var _webpack = require("./webpack5");
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ /**
21
+ * Is the user upgrading to Angular12?
22
+ *
23
+ * If so:
24
+ * - Run webpack5 fix
25
+ */
26
+ const angular12 = {
27
+ id: 'angular12',
28
+
29
+ async check({
30
+ packageManager
31
+ }) {
32
+ var _semver$coerce;
33
+
34
+ const packageJson = packageManager.retrievePackageJson();
35
+ const {
36
+ dependencies,
37
+ devDependencies
38
+ } = packageJson;
39
+ const angularVersion = dependencies['@angular/core'] || devDependencies['@angular/core'];
40
+ const angularCoerced = (_semver$coerce = _semver.default.coerce(angularVersion)) === null || _semver$coerce === void 0 ? void 0 : _semver$coerce.version;
41
+
42
+ if (!angularCoerced || _semver.default.lt(angularCoerced, '12.0.0')) {
43
+ return null;
44
+ }
45
+
46
+ const builderInfo = await _webpack.webpack5.checkWebpack5Builder(packageJson);
47
+ return builderInfo ? Object.assign({
48
+ angularVersion
49
+ }, builderInfo) : null;
50
+ },
51
+
52
+ prompt({
53
+ angularVersion,
54
+ storybookVersion
55
+ }) {
56
+ const angularFormatted = _chalk.default.cyan(`Angular ${angularVersion}`);
57
+
58
+ const sbFormatted = _chalk.default.cyan(`Storybook ${storybookVersion}`);
59
+
60
+ return (0, _tsDedent.default)`
61
+ We've detected you are running ${angularFormatted} which is powered by webpack5.
62
+ ${sbFormatted} runs webpack4 by default, which is incompatible.
63
+
64
+ In order to work with your version of Angular, we need to install Storybook's ${_chalk.default.cyan('webpack5 builder')}.
65
+
66
+ More info: ${_chalk.default.yellow('https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#angular12-upgrade')}
67
+ `;
68
+ },
69
+
70
+ async run(options) {
71
+ return _webpack.webpack5.run(Object.assign({}, options, {
72
+ result: Object.assign({
73
+ webpackVersion: null
74
+ }, options.result)
75
+ }));
76
+ }
77
+
78
+ };
79
+ exports.angular12 = angular12;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cra5 = void 0;
7
+
8
+ require("core-js/modules/es.promise.js");
9
+
10
+ var _chalk = _interopRequireDefault(require("chalk"));
11
+
12
+ var _tsDedent = _interopRequireDefault(require("ts-dedent"));
13
+
14
+ var _semver = _interopRequireDefault(require("@storybook/semver"));
15
+
16
+ var _webpack = require("./webpack5");
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ /**
21
+ * Is the user upgrading from CRA4 to CRA5?
22
+ *
23
+ * If so:
24
+ * - Run webpack5 fix
25
+ */
26
+ const cra5 = {
27
+ id: 'cra5',
28
+
29
+ async check({
30
+ packageManager
31
+ }) {
32
+ var _semver$coerce;
33
+
34
+ const packageJson = packageManager.retrievePackageJson();
35
+ const {
36
+ dependencies,
37
+ devDependencies
38
+ } = packageJson;
39
+ const craVersion = dependencies['react-scripts'] || devDependencies['react-scripts'];
40
+ const craCoerced = (_semver$coerce = _semver.default.coerce(craVersion)) === null || _semver$coerce === void 0 ? void 0 : _semver$coerce.version;
41
+
42
+ if (!craCoerced || _semver.default.lt(craCoerced, '5.0.0')) {
43
+ return null;
44
+ }
45
+
46
+ const builderInfo = await _webpack.webpack5.checkWebpack5Builder(packageJson);
47
+ return builderInfo ? Object.assign({
48
+ craVersion
49
+ }, builderInfo) : null;
50
+ },
51
+
52
+ prompt({
53
+ craVersion,
54
+ storybookVersion
55
+ }) {
56
+ const craFormatted = _chalk.default.cyan(`Create React App (CRA) ${craVersion}`);
57
+
58
+ const sbFormatted = _chalk.default.cyan(`Storybook ${storybookVersion}`);
59
+
60
+ return (0, _tsDedent.default)`
61
+ We've detected you are running ${craFormatted} which is powered by webpack5.
62
+ ${sbFormatted} runs webpack4 by default, which is incompatible.
63
+
64
+ In order to work with your version of CRA, we need to install Storybook's ${_chalk.default.cyan('webpack5 builder')}.
65
+
66
+ More info: ${_chalk.default.yellow('https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#cra5-upgrade')}
67
+ `;
68
+ },
69
+
70
+ async run(options) {
71
+ return _webpack.webpack5.run(Object.assign({}, options, {
72
+ result: Object.assign({
73
+ webpackVersion: null
74
+ }, options.result)
75
+ }));
76
+ }
77
+
78
+ };
79
+ exports.cra5 = cra5;