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

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 (94) hide show
  1. package/dist/cjs/automigrate/fixes/index.js +3 -1
  2. package/dist/cjs/automigrate/fixes/npm7.js +59 -0
  3. package/dist/cjs/automigrate/index.js +9 -3
  4. package/dist/cjs/babel-config.js +5 -4
  5. package/dist/cjs/frameworks/angular/Button.stories.ts +6 -4
  6. package/dist/cjs/frameworks/angular/Header.stories.ts +2 -2
  7. package/dist/cjs/frameworks/angular/Page.stories.ts +3 -3
  8. package/dist/cjs/frameworks/html/ts/Button.stories.ts +3 -3
  9. package/dist/cjs/frameworks/html/ts/Button.ts +6 -2
  10. package/dist/cjs/frameworks/html/ts/Header.stories.ts +3 -3
  11. package/dist/cjs/frameworks/html/ts/Page.stories.ts +2 -2
  12. package/dist/cjs/frameworks/html/ts/Page.ts +4 -4
  13. package/dist/cjs/frameworks/react/ts/Button.stories.tsx +2 -2
  14. package/dist/cjs/frameworks/react/ts/Header.stories.tsx +2 -2
  15. package/dist/cjs/frameworks/react/ts/Page.stories.tsx +2 -2
  16. package/dist/cjs/frameworks/web-components/ts/Button.stories.ts +2 -2
  17. package/dist/cjs/frameworks/web-components/ts/Header.stories.ts +2 -2
  18. package/dist/cjs/frameworks/web-components/ts/Page.stories.ts +2 -2
  19. package/dist/cjs/generate.js +1 -1
  20. package/dist/cjs/generators/ANGULAR/index.js +24 -1
  21. package/dist/cjs/generators/REACT_SCRIPTS/index.js +4 -4
  22. package/dist/cjs/generators/SVELTE/index.js +8 -14
  23. package/dist/cjs/generators/baseGenerator.js +39 -37
  24. package/dist/cjs/generators/configure.js +16 -18
  25. package/dist/cjs/generators/types.js +5 -0
  26. package/dist/cjs/helpers.js +10 -12
  27. package/dist/cjs/initiate.js +2 -1
  28. package/dist/cjs/js-package-manager/JsPackageManager.js +2 -2
  29. package/dist/cjs/js-package-manager/NPMProxy.js +18 -2
  30. package/dist/cjs/repro-generators/configs.js +22 -24
  31. package/dist/cjs/repro-generators/scripts.js +23 -13
  32. package/dist/cjs/versions.js +75 -73
  33. package/dist/esm/automigrate/fixes/index.js +3 -1
  34. package/dist/esm/automigrate/fixes/npm7.js +59 -0
  35. package/dist/esm/automigrate/index.js +9 -3
  36. package/dist/esm/babel-config.js +5 -4
  37. package/dist/esm/frameworks/angular/Button.stories.ts +6 -4
  38. package/dist/esm/frameworks/angular/Header.stories.ts +2 -2
  39. package/dist/esm/frameworks/angular/Page.stories.ts +3 -3
  40. package/dist/esm/frameworks/html/ts/Button.stories.ts +3 -3
  41. package/dist/esm/frameworks/html/ts/Button.ts +6 -2
  42. package/dist/esm/frameworks/html/ts/Header.stories.ts +3 -3
  43. package/dist/esm/frameworks/html/ts/Page.stories.ts +2 -2
  44. package/dist/esm/frameworks/html/ts/Page.ts +4 -4
  45. package/dist/esm/frameworks/react/ts/Button.stories.tsx +2 -2
  46. package/dist/esm/frameworks/react/ts/Header.stories.tsx +2 -2
  47. package/dist/esm/frameworks/react/ts/Page.stories.tsx +2 -2
  48. package/dist/esm/frameworks/web-components/ts/Button.stories.ts +2 -2
  49. package/dist/esm/frameworks/web-components/ts/Header.stories.ts +2 -2
  50. package/dist/esm/frameworks/web-components/ts/Page.stories.ts +2 -2
  51. package/dist/esm/generate.js +1 -1
  52. package/dist/esm/generators/ANGULAR/index.js +24 -1
  53. package/dist/esm/generators/REACT_SCRIPTS/index.js +4 -4
  54. package/dist/esm/generators/SVELTE/index.js +8 -14
  55. package/dist/esm/generators/baseGenerator.js +39 -37
  56. package/dist/esm/generators/configure.js +16 -18
  57. package/dist/esm/generators/types.js +5 -0
  58. package/dist/esm/helpers.js +10 -12
  59. package/dist/esm/initiate.js +2 -1
  60. package/dist/esm/js-package-manager/JsPackageManager.js +2 -2
  61. package/dist/esm/js-package-manager/NPMProxy.js +18 -2
  62. package/dist/esm/repro-generators/configs.js +22 -24
  63. package/dist/esm/repro-generators/scripts.js +23 -13
  64. package/dist/esm/versions.js +75 -73
  65. package/dist/types/automigrate/fixes/npm7.d.ts +9 -0
  66. package/dist/types/generators/ANGULAR/index.d.ts +1 -1
  67. package/dist/types/generators/AURELIA/index.d.ts +1 -1
  68. package/dist/types/generators/EMBER/index.d.ts +1 -1
  69. package/dist/types/generators/HTML/index.d.ts +1 -1
  70. package/dist/types/generators/MARIONETTE/index.d.ts +1 -1
  71. package/dist/types/generators/MARKO/index.d.ts +1 -1
  72. package/dist/types/generators/MITHRIL/index.d.ts +1 -1
  73. package/dist/types/generators/PREACT/index.d.ts +1 -1
  74. package/dist/types/generators/RAX/index.d.ts +1 -1
  75. package/dist/types/generators/REACT/index.d.ts +1 -1
  76. package/dist/types/generators/REACT_SCRIPTS/index.d.ts +1 -1
  77. package/dist/types/generators/RIOT/index.d.ts +1 -1
  78. package/dist/types/generators/SERVER/index.d.ts +1 -1
  79. package/dist/types/generators/SFC_VUE/index.d.ts +1 -1
  80. package/dist/types/generators/SVELTE/index.d.ts +1 -1
  81. package/dist/types/generators/VUE/index.d.ts +1 -1
  82. package/dist/types/generators/VUE3/index.d.ts +1 -1
  83. package/dist/types/generators/WEB-COMPONENTS/index.d.ts +1 -1
  84. package/dist/types/generators/WEBPACK_REACT/index.d.ts +1 -1
  85. package/dist/types/generators/baseGenerator.d.ts +3 -20
  86. package/dist/types/generators/configure.d.ts +2 -1
  87. package/dist/types/generators/types.d.ts +37 -0
  88. package/dist/types/helpers.d.ts +1 -1
  89. package/dist/types/initiate.d.ts +1 -15
  90. package/dist/types/js-package-manager/NPMProxy.d.ts +4 -0
  91. package/dist/types/repro-generators/configs.d.ts +1 -4
  92. package/dist/types/repro-generators/scripts.d.ts +1 -1
  93. package/dist/types/versions.d.ts +2 -0
  94. package/package.json +9 -9
@@ -1,5 +1,5 @@
1
1
  // also exported from '@storybook/angular' if you can deal with breaking changes in 6.1
2
- import { Story, Meta } from '@storybook/angular/types-6-0';
2
+ import type { Meta, StoryFn } from '@storybook/angular';
3
3
  import Button from './button.component';
4
4
 
5
5
  // More on default export: https://storybook.js.org/docs/angular/writing-stories/introduction#default-export
@@ -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: StoryFn<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
@@ -1,6 +1,6 @@
1
1
  import { moduleMetadata } from '@storybook/angular';
2
2
  import { CommonModule } from '@angular/common';
3
- import type { Story, Meta } from '@storybook/angular';
3
+ import type { Meta, StoryFn } from '@storybook/angular';
4
4
 
5
5
  import Button from './button.component';
6
6
  import Header from './header.component';
@@ -20,7 +20,7 @@ export default {
20
20
  },
21
21
  } as Meta;
22
22
 
23
- const Template: Story<Header> = (args: Header) => ({
23
+ const Template: StoryFn<Header> = (args: Header) => ({
24
24
  props: args,
25
25
  });
26
26
 
@@ -1,4 +1,4 @@
1
- import { moduleMetadata, Story, Meta } from '@storybook/angular';
1
+ import { moduleMetadata, StoryFn, Meta } from '@storybook/angular';
2
2
  import { within, userEvent } from '@storybook/testing-library';
3
3
  import { CommonModule } from '@angular/common';
4
4
 
@@ -10,7 +10,7 @@ export default {
10
10
  title: 'Example/Page',
11
11
  component: Page,
12
12
  parameters: {
13
- // More on Story layout: https://storybook.js.org/docs/angular/configure/story-layout
13
+ // More on StoryFn layout: https://storybook.js.org/docs/angular/configure/story-layout
14
14
  layout: 'fullscreen',
15
15
  },
16
16
  decorators: [
@@ -21,7 +21,7 @@ export default {
21
21
  ],
22
22
  } as Meta;
23
23
 
24
- const Template: Story<Page> = (args: Page) => ({
24
+ const Template: StoryFn<Page> = (args: Page) => ({
25
25
  props: args,
26
26
  });
27
27
 
@@ -1,4 +1,4 @@
1
- import { Story, Meta } from '@storybook/html';
1
+ import type { Meta, StoryFn } from '@storybook/html';
2
2
  import { createButton, ButtonProps } from './Button';
3
3
 
4
4
  // More on default export: https://storybook.js.org/docs/html/writing-stories/introduction#default-export
@@ -15,10 +15,10 @@ export default {
15
15
  options: ['small', 'medium', 'large'],
16
16
  },
17
17
  },
18
- } as Meta;
18
+ } as Meta<ButtonProps>;
19
19
 
20
20
  // More on component templates: https://storybook.js.org/docs/html/writing-stories/introduction#using-args
21
- const Template: Story<ButtonProps> = (args) => {
21
+ const Template: StoryFn<ButtonProps> = (args) => {
22
22
  // You can either use a function to create DOM elements or use a plain html string!
23
23
  // return `<div>${label}</div>`;
24
24
  return createButton(args);
@@ -36,12 +36,16 @@ export const createButton = ({
36
36
  const btn = document.createElement('button');
37
37
  btn.type = 'button';
38
38
  btn.innerText = label;
39
- btn.addEventListener('click', onClick);
39
+ if (onClick) {
40
+ btn.addEventListener('click', onClick);
41
+ }
40
42
 
41
43
  const mode = primary ? 'storybook-button--primary' : 'storybook-button--secondary';
42
44
  btn.className = ['storybook-button', `storybook-button--${size}`, mode].join(' ');
43
45
 
44
- btn.style.backgroundColor = backgroundColor;
46
+ if (backgroundColor) {
47
+ btn.style.backgroundColor = backgroundColor;
48
+ }
45
49
 
46
50
  return btn;
47
51
  };
@@ -1,4 +1,4 @@
1
- import { Story, Meta } from '@storybook/html';
1
+ import type { Meta, StoryFn } from '@storybook/html';
2
2
  import { createHeader, HeaderProps } from './Header';
3
3
 
4
4
  export default {
@@ -13,9 +13,9 @@ export default {
13
13
  onLogout: { action: 'onLogout' },
14
14
  onCreateAccount: { action: 'onCreateAccount' },
15
15
  },
16
- } as Meta;
16
+ } as Meta<HeaderProps>;
17
17
 
18
- const Template: Story<HeaderProps> = (args) => createHeader(args);
18
+ const Template: StoryFn<HeaderProps> = (args) => createHeader(args);
19
19
 
20
20
  export const LoggedIn = Template.bind({});
21
21
  LoggedIn.args = {
@@ -1,5 +1,5 @@
1
1
  import { within, userEvent } from '@storybook/testing-library';
2
- import { Story, Meta } from '@storybook/html';
2
+ import type { Meta, StoryFn } from '@storybook/html';
3
3
  import { createPage } from './Page';
4
4
 
5
5
  export default {
@@ -10,7 +10,7 @@ export default {
10
10
  },
11
11
  } as Meta;
12
12
 
13
- const Template: Story = () => createPage();
13
+ const Template: StoryFn = () => createPage();
14
14
 
15
15
  export const LoggedOut = Template.bind({});
16
16
 
@@ -7,12 +7,12 @@ type User = {
7
7
 
8
8
  export const createPage = () => {
9
9
  const article = document.createElement('article');
10
- let user: User = null;
11
- let header = null;
10
+ let user: User | undefined;
11
+ let header: HTMLElement | null = null;
12
12
 
13
13
  const rerenderHeader = () => {
14
14
  const wrapper = document.getElementsByTagName('article')[0];
15
- wrapper.replaceChild(createHeaderElement(), wrapper.firstChild);
15
+ wrapper.replaceChild(createHeaderElement(), wrapper.firstChild as HTMLElement);
16
16
  };
17
17
 
18
18
  const onLogin = () => {
@@ -21,7 +21,7 @@ export const createPage = () => {
21
21
  };
22
22
 
23
23
  const onLogout = () => {
24
- user = null;
24
+ user = undefined;
25
25
  rerenderHeader();
26
26
  };
27
27
 
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ComponentStory, ComponentMeta } from '@storybook/react';
2
+ import type { ComponentStoryFn, ComponentMeta } from '@storybook/react';
3
3
 
4
4
  import { Button } from './Button';
5
5
 
@@ -14,7 +14,7 @@ export default {
14
14
  } as ComponentMeta<typeof Button>;
15
15
 
16
16
  // More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
17
- const Template: ComponentStory<typeof Button> = (args) => <Button {...args} />;
17
+ const Template: ComponentStoryFn<typeof Button> = (args) => <Button {...args} />;
18
18
 
19
19
  export const Primary = Template.bind({});
20
20
  // More on args: https://storybook.js.org/docs/react/writing-stories/args
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ComponentStory, ComponentMeta } from '@storybook/react';
2
+ import type { ComponentStoryFn, ComponentMeta } from '@storybook/react';
3
3
 
4
4
  import { Header } from './Header';
5
5
 
@@ -12,7 +12,7 @@ export default {
12
12
  },
13
13
  } as ComponentMeta<typeof Header>;
14
14
 
15
- const Template: ComponentStory<typeof Header> = (args) => <Header {...args} />;
15
+ const Template: ComponentStoryFn<typeof Header> = (args) => <Header {...args} />;
16
16
 
17
17
  export const LoggedIn = Template.bind({});
18
18
  LoggedIn.args = {
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ComponentStory, ComponentMeta } from '@storybook/react';
2
+ import type { ComponentStoryFn, ComponentMeta } from '@storybook/react';
3
3
  import { within, userEvent } from '@storybook/testing-library';
4
4
  import { Page } from './Page';
5
5
 
@@ -12,7 +12,7 @@ export default {
12
12
  },
13
13
  } as ComponentMeta<typeof Page>;
14
14
 
15
- const Template: ComponentStory<typeof Page> = (args) => <Page {...args} />;
15
+ const Template: ComponentStoryFn<typeof Page> = (args) => <Page {...args} />;
16
16
 
17
17
  export const LoggedOut = Template.bind({});
18
18
 
@@ -1,4 +1,4 @@
1
- import { Story, Meta } from '@storybook/web-components';
1
+ import type { Meta, StoryFn } from '@storybook/web-components';
2
2
  import { Button, ButtonProps } from './Button';
3
3
 
4
4
  // More on default export: https://storybook.js.org/docs/web-components/writing-stories/introduction#default-export
@@ -16,7 +16,7 @@ export default {
16
16
  } as Meta;
17
17
 
18
18
  // More on component templates: https://storybook.js.org/docs/web-components/writing-stories/introduction#using-args
19
- const Template: Story<Partial<ButtonProps>> = (args) => Button(args);
19
+ const Template: StoryFn<ButtonProps> = (args) => Button(args);
20
20
 
21
21
  export const Primary = Template.bind({});
22
22
  // More on args: https://storybook.js.org/docs/web-components/writing-stories/args
@@ -1,11 +1,11 @@
1
- import { Story, Meta } from '@storybook/web-components';
1
+ import type { Meta, StoryFn } from '@storybook/web-components';
2
2
  import { Header, HeaderProps } from './Header';
3
3
 
4
4
  export default {
5
5
  title: 'Example/Header',
6
6
  } as Meta;
7
7
 
8
- const Template: Story<Partial<HeaderProps>> = (args) => Header(args);
8
+ const Template: StoryFn<HeaderProps> = (args) => Header(args);
9
9
 
10
10
  export const LoggedIn = Template.bind({});
11
11
  LoggedIn.args = {
@@ -1,4 +1,4 @@
1
- import { Story, Meta } from '@storybook/web-components';
1
+ import type { Meta, StoryFn } from '@storybook/web-components';
2
2
  import { Page, PageProps } from './Page';
3
3
  import * as HeaderStories from './Header.stories';
4
4
 
@@ -6,7 +6,7 @@ export default {
6
6
  title: 'Example/Page',
7
7
  } as Meta;
8
8
 
9
- const Template: Story<Partial<PageProps>> = (args) => Page(args);
9
+ const Template: StoryFn<PageProps> = (args) => Page(args);
10
10
 
11
11
  export const LoggedIn = Template.bind({});
12
12
  LoggedIn.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)();
@@ -30,10 +30,10 @@ const generator = async (packageManager, npmOptions, options) => {
30
30
  config.resolve.plugins.forEach((p) => {
31
31
  if (Array.isArray(p.appSrcs)) {
32
32
  p.appSrcs.push('${monorepoRootPath}');
33
- }
34
- });
35
- return config;
36
- }
33
+ }
34
+ });
35
+ return config;
36
+ }
37
37
  %%`
38
38
  } : {};
39
39
  const craVersion = (_semver$coerce = _semver.default.coerce(packageManager.retrievePackageJson().dependencies['react-scripts'])) === null || _semver$coerce === void 0 ? void 0 : _semver$coerce.version;
@@ -16,25 +16,21 @@ var _baseGenerator = require("../baseGenerator");
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
18
  const generator = async (packageManager, npmOptions, options) => {
19
- let extraMain;
19
+ let svelteOptions;
20
20
  let commonJs = false; // svelte.config.js ?
21
21
 
22
22
  if (_fsExtra.default.existsSync('./svelte.config.js')) {
23
23
  _nodeLogger.logger.info("Configuring preprocessor from 'svelte.config.js'");
24
24
 
25
- extraMain = {
26
- svelteOptions: {
27
- preprocess: '%%require("../svelte.config.js").preprocess%%'
28
- }
25
+ svelteOptions = {
26
+ preprocess: '%%require("../svelte.config.js").preprocess%%'
29
27
  };
30
28
  } else if (_fsExtra.default.existsSync('./svelte.config.cjs')) {
31
29
  _nodeLogger.logger.info("Configuring preprocessor from 'svelte.config.cjs'");
32
30
 
33
31
  commonJs = true;
34
- extraMain = {
35
- svelteOptions: {
36
- preprocess: '%%require("../svelte.config.cjs").preprocess%%'
37
- }
32
+ svelteOptions = {
33
+ preprocess: '%%require("../svelte.config.cjs").preprocess%%'
38
34
  };
39
35
  } else {
40
36
  // svelte-preprocess dependencies ?
@@ -43,10 +39,8 @@ const generator = async (packageManager, npmOptions, options) => {
43
39
  if (packageJson.devDependencies && packageJson.devDependencies['svelte-preprocess']) {
44
40
  _nodeLogger.logger.info("Configuring preprocessor with 'svelte-preprocess'");
45
41
 
46
- extraMain = {
47
- svelteOptions: {
48
- preprocess: '%%require("svelte-preprocess")()%%'
49
- }
42
+ svelteOptions = {
43
+ preprocess: '%%require("svelte-preprocess")()%%'
50
44
  };
51
45
  }
52
46
  }
@@ -54,7 +48,7 @@ const generator = async (packageManager, npmOptions, options) => {
54
48
  await (0, _baseGenerator.baseGenerator)(packageManager, npmOptions, options, 'svelte', {
55
49
  extraPackages: ['svelte', 'svelte-loader'],
56
50
  extensions: ['js', 'jsx', 'ts', 'tsx', 'svelte'],
57
- extraMain,
51
+ framework: svelteOptions,
58
52
  commonJs
59
53
  });
60
54
  };
@@ -34,6 +34,7 @@ const defaultOptions = {
34
34
  addBabel: true,
35
35
  addESLint: false,
36
36
  extraMain: undefined,
37
+ framework: undefined,
37
38
  extensions: undefined,
38
39
  commonJs: false
39
40
  };
@@ -54,33 +55,39 @@ const getBuilderDetails = builder => {
54
55
  return builder;
55
56
  };
56
57
 
57
- const getFrameworkDetails = (renderer, builder) => {
58
+ const wrapForPnp = packageName => `%%path.dirname(require.resolve(path.join('${packageName}', 'package.json')))%%`;
59
+
60
+ const getFrameworkDetails = (renderer, builder, pnp) => {
58
61
  const frameworkPackage = `@storybook/${renderer}-${builder}`;
62
+ const frameworkPackagePath = pnp ? wrapForPnp(frameworkPackage) : frameworkPackage;
59
63
  const rendererPackage = `@storybook/${renderer}`;
64
+ const rendererPackagePath = pnp ? wrapForPnp(rendererPackage) : rendererPackage;
65
+ const builderPackage = getBuilderDetails(builder);
66
+ const builderPackagePath = pnp ? wrapForPnp(builderPackage) : builderPackage;
60
67
  const isKnownFramework = !!_versions.default[frameworkPackage];
61
68
  const isKnownRenderer = !!_versions.default[rendererPackage];
62
- const builderPackage = getBuilderDetails(builder);
63
69
 
64
70
  if (renderer === 'angular') {
65
71
  return {
66
- package: rendererPackage,
67
- builder: builderPackage,
72
+ packages: [rendererPackage],
73
+ framework: rendererPackagePath,
68
74
  type: 'framework'
69
75
  };
70
76
  }
71
77
 
72
78
  if (isKnownFramework) {
73
79
  return {
74
- package: frameworkPackage,
75
- builder: builderPackage,
80
+ packages: [frameworkPackage],
81
+ framework: frameworkPackagePath,
76
82
  type: 'framework'
77
83
  };
78
84
  }
79
85
 
80
86
  if (isKnownRenderer) {
81
87
  return {
82
- package: rendererPackage,
83
- builder: builderPackage,
88
+ packages: [rendererPackage, builderPackage],
89
+ builder: builderPackagePath,
90
+ renderer: rendererPackagePath,
84
91
  type: 'renderer'
85
92
  };
86
93
  }
@@ -94,7 +101,8 @@ const hasInteractiveStories = framework => ['react', 'angular', 'preact', 'svelt
94
101
 
95
102
  async function baseGenerator(packageManager, npmOptions, {
96
103
  language,
97
- builder = _project_types.CoreBuilder.Webpack5
104
+ builder = _project_types.CoreBuilder.Webpack5,
105
+ pnp
98
106
  }, renderer, options = defaultOptions) {
99
107
  const {
100
108
  extraAddons: extraAddonPackages,
@@ -109,9 +117,9 @@ async function baseGenerator(packageManager, npmOptions, {
109
117
  } = Object.assign({}, defaultOptions, options); // added to main.js
110
118
  // make sure to update `canUsePrebuiltManager` in dev-server.js and build-manager-config/main.js when this list changes
111
119
 
112
- const addons = ['@storybook/addon-links', '@storybook/addon-essentials']; // added to package.json
120
+ const addons = ['@storybook/addon-links', '@storybook/addon-essentials', ...stripVersions(extraAddonPackages)]; // added to package.json
113
121
 
114
- const addonPackages = [...addons, '@storybook/addon-actions'];
122
+ const addonPackages = ['@storybook/addon-links', '@storybook/addon-essentials', '@storybook/addon-actions', ...extraAddonPackages];
115
123
 
116
124
  if (hasInteractiveStories(renderer)) {
117
125
  addons.push('@storybook/addon-interactions');
@@ -123,20 +131,16 @@ async function baseGenerator(packageManager, npmOptions, {
123
131
  const packageJson = packageManager.retrievePackageJson();
124
132
  const installedDependencies = new Set(Object.keys(Object.assign({}, packageJson.dependencies, packageJson.devDependencies)));
125
133
  const {
126
- package: frameworkPackage,
134
+ packages: frameworkPackages,
127
135
  type,
128
- builder: builderPackage
129
- } = getFrameworkDetails(renderer, builder); // temp
136
+ // @ts-ignore
137
+ renderer: rendererInclude,
138
+ // deepscan-disable-line UNUSED_DECL
139
+ framework: frameworkInclude,
140
+ builder: builderInclude
141
+ } = getFrameworkDetails(renderer, builder, pnp); // TODO: We need to start supporting this at some point
130
142
 
131
143
  if (type === 'renderer') {
132
- console.log({
133
- language,
134
- builder,
135
- renderer,
136
- builderPackage,
137
- frameworkPackage,
138
- type
139
- });
140
144
  throw new Error((0, _tsDedent.default)`
141
145
  Sorry, for now, you can not do this, please use a framework such as @storybook/react-webpack5
142
146
 
@@ -144,32 +148,30 @@ async function baseGenerator(packageManager, npmOptions, {
144
148
  `);
145
149
  }
146
150
 
147
- const packages = ['sb', frameworkPackage, ...addonPackages, ...extraPackages, ...extraAddonPackages, ...yarn2ExtraPackages, ...(type === 'framework' ? [] : [builderPackage])].filter(Boolean).filter(packageToInstall => !installedDependencies.has((0, _jsPackageManager.getPackageDetails)(packageToInstall)[0]));
151
+ const packages = ['storybook', ...frameworkPackages, ...addonPackages, ...extraPackages, ...yarn2ExtraPackages].filter(Boolean).filter(packageToInstall => !installedDependencies.has((0, _jsPackageManager.getPackageDetails)(packageToInstall)[0]));
148
152
  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({
153
+ await _fsExtra.default.ensureDir('./.storybook');
154
+ await (0, _configure.configureMain)(Object.assign({
158
155
  framework: {
159
- name: frameworkPackage,
160
- options: {}
156
+ name: frameworkInclude,
157
+ options: options.framework || {}
161
158
  },
162
- addons: [...addons, ...stripVersions(extraAddonPackages)],
159
+ addons: pnp ? addons.map(wrapForPnp) : addons,
163
160
  extensions,
164
161
  commonJs: options.commonJs
165
- }, mainOptions));
162
+ }, extraMain, type !== 'framework' ? {
163
+ core: {
164
+ builder: builderInclude
165
+ }
166
+ } : {}));
167
+ await (0, _configure.configurePreview)(renderer, options.commonJs);
166
168
 
167
169
  if (addComponents) {
168
170
  (0, _helpers.copyComponents)(renderer, language);
169
171
  } // FIXME: temporary workaround for https://github.com/storybookjs/storybook/issues/17516
170
172
 
171
173
 
172
- if (builderPackage === '@storybook/builder-vite') {
174
+ if (frameworkPackages.includes('@storybook/builder-vite')) {
173
175
  const previewHead = (0, _tsDedent.default)`
174
176
  <script>
175
177
  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
+ });