@storybook/cli 7.0.0-alpha.1 → 7.0.0-alpha.2

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 (53) hide show
  1. package/dist/cjs/automigrate/index.js +9 -3
  2. package/dist/cjs/babel-config.js +5 -4
  3. package/dist/cjs/frameworks/angular/Button.stories.ts +5 -3
  4. package/dist/cjs/generate.js +1 -1
  5. package/dist/cjs/generators/ANGULAR/index.js +24 -1
  6. package/dist/cjs/generators/baseGenerator.js +36 -36
  7. package/dist/cjs/generators/configure.js +16 -18
  8. package/dist/cjs/generators/types.js +5 -0
  9. package/dist/cjs/helpers.js +10 -12
  10. package/dist/cjs/initiate.js +2 -1
  11. package/dist/cjs/repro-generators/configs.js +22 -24
  12. package/dist/cjs/repro-generators/scripts.js +23 -13
  13. package/dist/cjs/versions.js +73 -73
  14. package/dist/esm/automigrate/index.js +9 -3
  15. package/dist/esm/babel-config.js +5 -4
  16. package/dist/esm/frameworks/angular/Button.stories.ts +5 -3
  17. package/dist/esm/generate.js +1 -1
  18. package/dist/esm/generators/ANGULAR/index.js +24 -1
  19. package/dist/esm/generators/baseGenerator.js +36 -36
  20. package/dist/esm/generators/configure.js +16 -18
  21. package/dist/esm/generators/types.js +5 -0
  22. package/dist/esm/helpers.js +10 -12
  23. package/dist/esm/initiate.js +2 -1
  24. package/dist/esm/repro-generators/configs.js +22 -24
  25. package/dist/esm/repro-generators/scripts.js +23 -13
  26. package/dist/esm/versions.js +73 -73
  27. package/dist/types/generators/ANGULAR/index.d.ts +1 -1
  28. package/dist/types/generators/AURELIA/index.d.ts +1 -1
  29. package/dist/types/generators/EMBER/index.d.ts +1 -1
  30. package/dist/types/generators/HTML/index.d.ts +1 -1
  31. package/dist/types/generators/MARIONETTE/index.d.ts +1 -1
  32. package/dist/types/generators/MARKO/index.d.ts +1 -1
  33. package/dist/types/generators/MITHRIL/index.d.ts +1 -1
  34. package/dist/types/generators/PREACT/index.d.ts +1 -1
  35. package/dist/types/generators/RAX/index.d.ts +1 -1
  36. package/dist/types/generators/REACT/index.d.ts +1 -1
  37. package/dist/types/generators/REACT_SCRIPTS/index.d.ts +1 -1
  38. package/dist/types/generators/RIOT/index.d.ts +1 -1
  39. package/dist/types/generators/SERVER/index.d.ts +1 -1
  40. package/dist/types/generators/SFC_VUE/index.d.ts +1 -1
  41. package/dist/types/generators/SVELTE/index.d.ts +1 -1
  42. package/dist/types/generators/VUE/index.d.ts +1 -1
  43. package/dist/types/generators/VUE3/index.d.ts +1 -1
  44. package/dist/types/generators/WEB-COMPONENTS/index.d.ts +1 -1
  45. package/dist/types/generators/WEBPACK_REACT/index.d.ts +1 -1
  46. package/dist/types/generators/baseGenerator.d.ts +3 -20
  47. package/dist/types/generators/configure.d.ts +2 -1
  48. package/dist/types/generators/types.d.ts +36 -0
  49. package/dist/types/helpers.d.ts +1 -1
  50. package/dist/types/initiate.d.ts +1 -15
  51. package/dist/types/repro-generators/configs.d.ts +1 -4
  52. package/dist/types/repro-generators/scripts.d.ts +1 -1
  53. package/package.json +9 -9
@@ -34,9 +34,15 @@ const automigrate = async ({
34
34
 
35
35
  for (let i = 0; i < filtered.length; i += 1) {
36
36
  const f = _fixes.fixes[i];
37
- const result = await f.check({
38
- packageManager
39
- });
37
+ let result;
38
+
39
+ try {
40
+ result = await f.check({
41
+ packageManager
42
+ });
43
+ } catch (e) {
44
+ logger.info(`failed to check fix: ${f.id}`);
45
+ }
40
46
 
41
47
  if (result) {
42
48
  logger.info(`🔎 found a '${_chalk.default.cyan(f.id)}' migration:`);
@@ -11,8 +11,6 @@ var _fsExtra = require("fs-extra");
11
11
 
12
12
  var _nodeLogger = require("@storybook/node-logger");
13
13
 
14
- var _coreCommon = require("@storybook/core-common");
15
-
16
14
  var _path = _interopRequireDefault(require("path"));
17
15
 
18
16
  var _prompts = _interopRequireDefault(require("prompts"));
@@ -33,8 +31,11 @@ const generateStorybookBabelConfig = async ({
33
31
  }) => {
34
32
  _nodeLogger.logger.info(`Generating the storybook default babel config at ${target}`);
35
33
 
36
- const config = (0, _coreCommon.getStorybookBabelConfig)();
37
- const contents = JSON.stringify(config, null, 2);
34
+ const contents = JSON.stringify({
35
+ sourceType: 'unambiguous',
36
+ presets: [],
37
+ plugins: []
38
+ }, null, 2);
38
39
  const fileName = '.babelrc.json';
39
40
 
40
41
  const location = _path.default.join(target, fileName);
@@ -13,9 +13,11 @@ export default {
13
13
  } as Meta;
14
14
 
15
15
  // More on component templates: https://storybook.js.org/docs/angular/writing-stories/introduction#using-args
16
- const Template: Story<Button> = (args: Button) => ({
17
- props: args,
18
- });
16
+ const Template: Story<Button> = (args: Button) => {
17
+ return {
18
+ props: { backgroundColor: null, ...args },
19
+ };
20
+ };
19
21
 
20
22
  export const Primary = Template.bind({});
21
23
  // More on args: https://storybook.js.org/docs/angular/writing-stories/args
@@ -52,7 +52,7 @@ process.env.STORYBOOK_DISABLE_TELEMETRY && process.env.STORYBOOK_DISABLE_TELEMET
52
52
 
53
53
  _commander.default.option('--enable-crash-reports', 'enable sending crash reports to telemetry data');
54
54
 
55
- _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));
55
+ _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('--use-pnp', 'Enable pnp mode').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));
56
56
 
57
57
  _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));
58
58
 
@@ -57,7 +57,30 @@ const generator = async (packageManager, npmOptions, options) => {
57
57
  addScripts: false
58
58
  });
59
59
  (0, _helpers.copyTemplate)(__dirname);
60
- editAngularAppTsConfig();
60
+ editAngularAppTsConfig(); // TODO: we need to add the following:
61
+
62
+ /*
63
+ "storybook": {
64
+ "builder": "@storybook/angular:start-storybook",
65
+ "options": {
66
+ "browserTarget": "angular-cli:build",
67
+ "port": 4400
68
+ }
69
+ },
70
+ "build-storybook": {
71
+ "builder": "@storybook/angular:build-storybook",
72
+ "options": {
73
+ "browserTarget": "angular-cli:build"
74
+ }
75
+ }
76
+ */
77
+ // to the user's angular.json file. see: https://github.com/storybookjs/storybook/blob/next/examples/angular-cli/angular.json#L78
78
+ // then we want to add these scripts to package.json
79
+ // packageManager.addScripts({
80
+ // storybook: 'ng storybook',
81
+ // 'build-storybook': 'ng build-storybook',
82
+ // });
83
+
61
84
  (0, _angularHelpers.editStorybookTsConfig)(_path.default.resolve('./.storybook/tsconfig.json')); // edit scripts to generate docs
62
85
 
63
86
  const tsConfigFile = await (0, _angularHelpers.getBaseTsConfigName)();
@@ -54,33 +54,39 @@ const getBuilderDetails = builder => {
54
54
  return builder;
55
55
  };
56
56
 
57
- const getFrameworkDetails = (renderer, builder) => {
57
+ const wrapForPnp = packageName => `%%path.dirname(require.resolve(path.join('${packageName}', 'package.json')))%%`;
58
+
59
+ const getFrameworkDetails = (renderer, builder, pnp) => {
58
60
  const frameworkPackage = `@storybook/${renderer}-${builder}`;
61
+ const frameworkPackagePath = pnp ? wrapForPnp(frameworkPackage) : frameworkPackage;
59
62
  const rendererPackage = `@storybook/${renderer}`;
63
+ const rendererPackagePath = pnp ? wrapForPnp(rendererPackage) : rendererPackage;
64
+ const builderPackage = getBuilderDetails(builder);
65
+ const builderPackagePath = pnp ? wrapForPnp(builderPackage) : builderPackage;
60
66
  const isKnownFramework = !!_versions.default[frameworkPackage];
61
67
  const isKnownRenderer = !!_versions.default[rendererPackage];
62
- const builderPackage = getBuilderDetails(builder);
63
68
 
64
69
  if (renderer === 'angular') {
65
70
  return {
66
- package: rendererPackage,
67
- builder: builderPackage,
71
+ packages: [rendererPackage],
72
+ framework: rendererPackagePath,
68
73
  type: 'framework'
69
74
  };
70
75
  }
71
76
 
72
77
  if (isKnownFramework) {
73
78
  return {
74
- package: frameworkPackage,
75
- builder: builderPackage,
79
+ packages: [frameworkPackage],
80
+ framework: frameworkPackagePath,
76
81
  type: 'framework'
77
82
  };
78
83
  }
79
84
 
80
85
  if (isKnownRenderer) {
81
86
  return {
82
- package: rendererPackage,
83
- builder: builderPackage,
87
+ packages: [rendererPackage, builderPackage],
88
+ builder: builderPackagePath,
89
+ renderer: rendererPackagePath,
84
90
  type: 'renderer'
85
91
  };
86
92
  }
@@ -94,7 +100,8 @@ const hasInteractiveStories = framework => ['react', 'angular', 'preact', 'svelt
94
100
 
95
101
  async function baseGenerator(packageManager, npmOptions, {
96
102
  language,
97
- builder = _project_types.CoreBuilder.Webpack5
103
+ builder = _project_types.CoreBuilder.Webpack5,
104
+ pnp
98
105
  }, renderer, options = defaultOptions) {
99
106
  const {
100
107
  extraAddons: extraAddonPackages,
@@ -109,9 +116,9 @@ async function baseGenerator(packageManager, npmOptions, {
109
116
  } = Object.assign({}, defaultOptions, options); // added to main.js
110
117
  // make sure to update `canUsePrebuiltManager` in dev-server.js and build-manager-config/main.js when this list changes
111
118
 
112
- const addons = ['@storybook/addon-links', '@storybook/addon-essentials']; // added to package.json
119
+ const addons = ['@storybook/addon-links', '@storybook/addon-essentials', ...stripVersions(extraAddonPackages)]; // added to package.json
113
120
 
114
- const addonPackages = [...addons, '@storybook/addon-actions'];
121
+ const addonPackages = ['@storybook/addon-links', '@storybook/addon-essentials', '@storybook/addon-actions', ...extraAddonPackages];
115
122
 
116
123
  if (hasInteractiveStories(renderer)) {
117
124
  addons.push('@storybook/addon-interactions');
@@ -123,20 +130,15 @@ async function baseGenerator(packageManager, npmOptions, {
123
130
  const packageJson = packageManager.retrievePackageJson();
124
131
  const installedDependencies = new Set(Object.keys(Object.assign({}, packageJson.dependencies, packageJson.devDependencies)));
125
132
  const {
126
- package: frameworkPackage,
133
+ packages: frameworkPackages,
127
134
  type,
128
- builder: builderPackage
129
- } = getFrameworkDetails(renderer, builder); // temp
135
+ // @ts-ignore
136
+ renderer: rendererInclude,
137
+ framework: frameworkInclude,
138
+ builder: builderInclude
139
+ } = getFrameworkDetails(renderer, builder, pnp); // TODO: We need to start supporting this at some point
130
140
 
131
141
  if (type === 'renderer') {
132
- console.log({
133
- language,
134
- builder,
135
- renderer,
136
- builderPackage,
137
- frameworkPackage,
138
- type
139
- });
140
142
  throw new Error((0, _tsDedent.default)`
141
143
  Sorry, for now, you can not do this, please use a framework such as @storybook/react-webpack5
142
144
 
@@ -144,32 +146,30 @@ async function baseGenerator(packageManager, npmOptions, {
144
146
  `);
145
147
  }
146
148
 
147
- const packages = ['sb', frameworkPackage, ...addonPackages, ...extraPackages, ...extraAddonPackages, ...yarn2ExtraPackages, ...(type === 'framework' ? [] : [builderPackage])].filter(Boolean).filter(packageToInstall => !installedDependencies.has((0, _jsPackageManager.getPackageDetails)(packageToInstall)[0]));
149
+ const packages = ['sb', ...frameworkPackages, ...addonPackages, ...extraPackages, ...yarn2ExtraPackages].filter(Boolean).filter(packageToInstall => !installedDependencies.has((0, _jsPackageManager.getPackageDetails)(packageToInstall)[0]));
148
150
  const versionedPackages = await packageManager.getVersionedPackages(packages);
149
- console.log({
150
- versionedPackages
151
- });
152
- const mainOptions = type !== 'framework' ? Object.assign({
153
- core: {
154
- builder: builderPackage
155
- }
156
- }, extraMain) : extraMain;
157
- (0, _configure.configure)(renderer, Object.assign({
151
+ await _fsExtra.default.ensureDir('./.storybook');
152
+ await (0, _configure.configureMain)(Object.assign({
158
153
  framework: {
159
- name: frameworkPackage,
154
+ name: frameworkInclude,
160
155
  options: {}
161
156
  },
162
- addons: [...addons, ...stripVersions(extraAddonPackages)],
157
+ addons: pnp ? addons.map(wrapForPnp) : addons,
163
158
  extensions,
164
159
  commonJs: options.commonJs
165
- }, mainOptions));
160
+ }, extraMain, type !== 'framework' ? {
161
+ core: {
162
+ builder: builderInclude
163
+ }
164
+ } : {}));
165
+ await (0, _configure.configurePreview)(renderer, options.commonJs);
166
166
 
167
167
  if (addComponents) {
168
168
  (0, _helpers.copyComponents)(renderer, language);
169
169
  } // FIXME: temporary workaround for https://github.com/storybookjs/storybook/issues/17516
170
170
 
171
171
 
172
- if (builderPackage === '@storybook/builder-vite') {
172
+ if (frameworkPackages.includes('@storybook/builder-vite')) {
173
173
  const previewHead = (0, _tsDedent.default)`
174
174
  <script>
175
175
  window.global = window;
@@ -3,7 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.configure = configure;
6
+ exports.configureMain = configureMain;
7
+ exports.configurePreview = configurePreview;
8
+
9
+ require("core-js/modules/es.promise.js");
7
10
 
8
11
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
9
12
 
@@ -15,7 +18,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
15
18
 
16
19
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
17
20
 
18
- function configureMain(_ref) {
21
+ async function configureMain(_ref) {
19
22
  let {
20
23
  addons,
21
24
  extensions = ['js', 'jsx', 'ts', 'tsx'],
@@ -23,17 +26,20 @@ function configureMain(_ref) {
23
26
  } = _ref,
24
27
  custom = _objectWithoutPropertiesLoose(_ref, _excluded);
25
28
 
26
- const prefix = _fsExtra.default.existsSync('./src') ? '../src' : '../stories';
29
+ const prefix = (await _fsExtra.default.pathExists('./src')) ? '../src' : '../stories';
27
30
  const config = Object.assign({
28
31
  stories: [`${prefix}/**/*.stories.mdx`, `${prefix}/**/*.stories.@(${extensions.join('|')})`],
29
32
  addons
30
33
  }, custom); // replace escaped values and delimiters
31
34
 
32
- const stringified = `module.exports = ${JSON.stringify(config, null, 2).replace(/\\"/g, '"').replace(/['"]%%/g, '').replace(/%%['"]/, '').replace(/\\n/g, '\r\n')}`;
33
-
34
- _fsExtra.default.ensureDirSync('./.storybook');
35
+ const stringified = `module.exports = ${JSON.stringify(config, null, 2).replace(/\\"/g, '"').replace(/['"]%%/g, '').replace(/%%['"]/g, '').replace(/\\n/g, '\r\n')}`; // main.js isn't actually JSON, but we used JSON.stringify to convert the runtime-object into code.
36
+ // un-stringify the value for referencing packages by string
37
+ // .replaceAll(/"(path\.dirname\(require\.resolve\(path\.join\('.*\))"/g, (_, a) => a)}`;
35
38
 
36
- _fsExtra.default.writeFileSync(`./.storybook/main.${commonJs ? 'cjs' : 'js'}`, stringified, {
39
+ await _fsExtra.default.writeFile(`./.storybook/main.${commonJs ? 'cjs' : 'js'}`, (0, _tsDedent.default)`
40
+ const path = require('path');
41
+ ${stringified}
42
+ `, {
37
43
  encoding: 'utf8'
38
44
  });
39
45
  }
@@ -50,14 +56,14 @@ const frameworkToPreviewParts = {
50
56
  }
51
57
  };
52
58
 
53
- function configurePreview(framework, commonJs) {
59
+ async function configurePreview(framework, commonJs) {
54
60
  const {
55
61
  prefix = '',
56
62
  extraParameters = ''
57
63
  } = frameworkToPreviewParts[framework] || {};
58
64
  const previewPath = `./.storybook/preview.${commonJs ? 'cjs' : 'js'}`; // If the framework template included a preview then we have nothing to do
59
65
 
60
- if (_fsExtra.default.existsSync(previewPath)) {
66
+ if (await _fsExtra.default.pathExists(previewPath)) {
61
67
  return;
62
68
  }
63
69
 
@@ -73,15 +79,7 @@ function configurePreview(framework, commonJs) {
73
79
  },
74
80
  ${extraParameters}
75
81
  }`.replace(' \n', '').trim();
76
-
77
- _fsExtra.default.writeFileSync(previewPath, preview, {
82
+ await _fsExtra.default.writeFile(previewPath, preview, {
78
83
  encoding: 'utf8'
79
84
  });
80
- }
81
-
82
- function configure(framework, mainOptions) {
83
- _fsExtra.default.ensureDirSync('./.storybook');
84
-
85
- configureMain(mainOptions);
86
- configurePreview(framework, mainOptions.commonJs);
87
85
  }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -189,51 +189,49 @@ function copyTemplate(templateRoot) {
189
189
  });
190
190
  }
191
191
 
192
- function copyComponents(framework, language) {
192
+ async function copyComponents(framework, language) {
193
193
  const languageFolderMapping = {
194
194
  javascript: 'js',
195
195
  typescript: 'ts'
196
196
  };
197
197
 
198
- const componentsPath = () => {
198
+ const componentsPath = async () => {
199
199
  const frameworkPath = `frameworks/${framework}`;
200
200
 
201
201
  const languageSpecific = _path.default.resolve(__dirname, `${frameworkPath}/${languageFolderMapping[language]}`);
202
202
 
203
- if (_fsExtra.default.existsSync(languageSpecific)) {
203
+ if (await _fsExtra.default.pathExists(languageSpecific)) {
204
204
  return languageSpecific;
205
205
  }
206
206
 
207
207
  const jsFallback = _path.default.resolve(__dirname, `${frameworkPath}/${languageFolderMapping.javascript}`);
208
208
 
209
- if (_fsExtra.default.existsSync(jsFallback)) {
209
+ if (await _fsExtra.default.pathExists(jsFallback)) {
210
210
  return jsFallback;
211
211
  }
212
212
 
213
213
  const frameworkRootPath = _path.default.resolve(__dirname, frameworkPath);
214
214
 
215
- if (_fsExtra.default.existsSync(frameworkRootPath)) {
215
+ if (await _fsExtra.default.pathExists(frameworkRootPath)) {
216
216
  return frameworkRootPath;
217
217
  }
218
218
 
219
219
  throw new Error(`Unsupported framework: ${framework}`);
220
220
  };
221
221
 
222
- const targetPath = () => {
223
- if (_fsExtra.default.existsSync('./src')) {
222
+ const targetPath = async () => {
223
+ if (await _fsExtra.default.pathExists('./src')) {
224
224
  return './src/stories';
225
225
  }
226
226
 
227
227
  return './stories';
228
228
  };
229
229
 
230
- const destinationPath = targetPath();
231
-
232
- _fsExtra.default.copySync(componentsPath(), destinationPath, {
230
+ const destinationPath = await targetPath();
231
+ await _fsExtra.default.copy(await componentsPath(), destinationPath, {
233
232
  overwrite: true
234
233
  });
235
-
236
- _fsExtra.default.copySync(_path.default.resolve(__dirname, 'frameworks/common'), destinationPath, {
234
+ await _fsExtra.default.copy(_path.default.resolve(__dirname, 'frameworks/common'), destinationPath, {
237
235
  overwrite: true
238
236
  });
239
237
  }
@@ -81,7 +81,8 @@ const installStorybook = (projectType, packageManager, options) => {
81
81
  language,
82
82
  builder: options.builder || (0, _detect.detectBuilder)(packageManager),
83
83
  linkable: !!options.linkable,
84
- commonJs: options.commonJs
84
+ commonJs: options.commonJs,
85
+ pnp: options.usePnp
85
86
  };
86
87
 
87
88
  const runGenerator = async () => {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.web_components_typescript = exports.web_components_lit2 = exports.web_components = exports.vue3 = exports.vue = exports.vite_react = exports.svelte = exports.sfcVue = exports.react_typescript = exports.react_legacy_root_api = exports.react_in_yarn_workspace = exports.react = exports.preact = exports.html = exports.cra_typescript = exports.cra = exports.angular_modern_inline_rendering = exports.angular130 = exports.angular13 = exports.angular12 = exports.angular11 = exports.angular10 = exports.angular = void 0;
6
+ exports.web_components_typescript = exports.web_components_lit2 = exports.web_components = exports.vue3 = exports.vue = exports.svelte = exports.sfcVue = exports.react_typescript = exports.react_legacy_root_api = exports.react_in_yarn_workspace = exports.react = exports.preact = exports.html = exports.cra_typescript = exports.cra = exports.angular_modern_inline_rendering = exports.angular130 = exports.angular13 = exports.angular12 = exports.angular = void 0;
7
7
 
8
8
  /* eslint-disable camelcase */
9
9
  const fromDeps = (...args) => ['mkdir {{appName}}', 'cd {{appName}}', // Create `yarn.lock` to force Yarn to consider adding deps in this directory
@@ -67,15 +67,14 @@ const react_typescript = {
67
67
  path: '.babelrc',
68
68
  contents: '{ "presets": ["@babel/preset-react", "@babel/preset-typescript"] }'
69
69
  }]
70
- };
70
+ }; // export const vite_react: Parameters = {
71
+ // renderer: 'react',
72
+ // name: 'vite_react',
73
+ // version: 'latest',
74
+ // generator: 'npx -p create-vite@{{version}} create-vite {{appName}} --template react-ts',
75
+ // };
76
+
71
77
  exports.react_typescript = react_typescript;
72
- const vite_react = {
73
- renderer: 'react',
74
- name: 'vite_react',
75
- version: 'latest',
76
- generator: 'npx -p create-vite@{{version}} create-vite {{appName}} --template react-ts'
77
- };
78
- exports.vite_react = vite_react;
79
78
  const react_in_yarn_workspace = {
80
79
  renderer: 'react',
81
80
  name: 'react_in_yarn_workspace',
@@ -89,18 +88,8 @@ const baseAngular = {
89
88
  renderer: 'angular',
90
89
  name: 'angular',
91
90
  version: 'latest',
92
- generator: `npx -p @angular/cli@{{version}} ng new {{appName}} --routing=true --minimal=true --style=scss --skipInstall=true --strict`
91
+ generator: `npx -p @angular/cli@{{version}} ng new {{appName}} --routing=true --minimal=true --style=scss --skip-install=true --strict`
93
92
  };
94
- const angular10 = Object.assign({}, baseAngular, {
95
- name: 'angular10',
96
- version: 'v10-lts'
97
- });
98
- exports.angular10 = angular10;
99
- const angular11 = Object.assign({}, baseAngular, {
100
- name: 'angular11',
101
- version: 'v11-lts'
102
- });
103
- exports.angular11 = angular11;
104
93
  const angular12 = Object.assign({}, baseAngular, {
105
94
  name: 'angular12',
106
95
  version: 'v12-lts'
@@ -121,8 +110,7 @@ const angular_modern_inline_rendering = Object.assign({}, baseAngular, {
121
110
  additionalDeps: ['jest@27', '@storybook/test-runner'],
122
111
  mainOverrides: {
123
112
  features: {
124
- storyStoreV7: true,
125
- modernInlineRender: true
113
+ storyStoreV7: true
126
114
  }
127
115
  }
128
116
  });
@@ -140,14 +128,24 @@ const web_components = {
140
128
  exports.web_components = web_components;
141
129
  const web_components_typescript = Object.assign({}, web_components, {
142
130
  name: 'web_components_typescript',
143
- typescript: true
131
+ typescript: true,
132
+ additionalDeps: ['@babel/preset-typescript'],
133
+ additionalFiles: [{
134
+ path: '.babelrc',
135
+ contents: '{ "presets": ["@babel/preset-typescript"] }'
136
+ }]
144
137
  });
145
138
  exports.web_components_typescript = web_components_typescript;
146
139
  const web_components_lit2 = Object.assign({}, web_components, {
147
140
  version: 'next',
148
141
  name: 'web_components_lit2',
149
142
  generator: fromDeps('lit'),
150
- typescript: true
143
+ typescript: true,
144
+ additionalDeps: ['@babel/preset-typescript'],
145
+ additionalFiles: [{
146
+ path: '.babelrc',
147
+ contents: '{ "presets": ["@babel/preset-typescript"] }'
148
+ }]
151
149
  }); // #endregion
152
150
  // #region vue
153
151
 
@@ -41,11 +41,12 @@ const exec = async (command, options = {}, {
41
41
  logger.debug(command);
42
42
  return new Promise((resolve, reject) => {
43
43
  const defaultOptions = {
44
- silent: true
44
+ silent: false
45
45
  };
46
46
 
47
47
  const child = _shelljs.default.exec(command, Object.assign({}, defaultOptions, options, {
48
- async: true
48
+ async: true,
49
+ silent: false
49
50
  }));
50
51
 
51
52
  child.stderr.pipe(process.stderr);
@@ -170,28 +171,37 @@ const addAdditionalFiles = async ({
170
171
  additionalFiles,
171
172
  cwd
172
173
  }) => {
173
- if (!additionalFiles || additionalFiles.length === 0) {
174
- return;
175
- }
176
-
177
174
  logger.info(`⤵️ Adding required files`);
178
- additionalFiles.forEach(async file => {
175
+ await Promise.all(additionalFiles.map(async file => {
179
176
  await (0, _fsExtra.outputFile)(_path.default.resolve(cwd, file.path), file.contents, {
180
177
  encoding: 'UTF-8'
181
178
  });
182
- });
179
+ }));
183
180
  };
184
181
 
185
182
  const initStorybook = async ({
186
183
  cwd,
187
184
  autoDetect = true,
188
185
  name,
189
- e2e
186
+ e2e,
187
+ pnp
190
188
  }) => {
191
- const type = autoDetect ? '' : `--type ${name}`;
192
- const linkable = e2e ? '' : '--linkable';
189
+ const flags = ['--yes'];
190
+
191
+ if (!autoDetect) {
192
+ flags.push(`--type ${name}`);
193
+ }
194
+
195
+ if (e2e) {
196
+ flags.push('--linkable');
197
+ }
198
+
199
+ if (pnp) {
200
+ flags.push('--use-pnp');
201
+ }
202
+
193
203
  const sbCLICommand = useLocalSbCli ? `node ${_path.default.join(__dirname, '../../esm/generate')}` : `yarn dlx -p @storybook/cli sb`;
194
- const command = `${sbCLICommand} init --yes ${type} ${linkable}`;
204
+ const command = `${sbCLICommand} init ${flags.join(' ')}`;
195
205
  await exec(command, {
196
206
  cwd
197
207
  }, {
@@ -283,7 +293,7 @@ const createAndInit = async (cwd, _ref, {
283
293
  }));
284
294
  await doTask(addAdditionalFiles, Object.assign({}, options, {
285
295
  cwd
286
- }));
296
+ }), !!options.additionalFiles);
287
297
 
288
298
  if (e2e) {
289
299
  await doTask(addPackageResolutions, options);