@storybook/addon-svelte-csf 3.0.0-next.0 → 3.0.0-next.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 (33) hide show
  1. package/.babelrc.js +3 -4
  2. package/.eslintrc.js +6 -0
  3. package/README.md +21 -3
  4. package/dist/cjs/components/context.js +8 -16
  5. package/dist/cjs/constants.js +1 -1
  6. package/dist/cjs/index.js +8 -8
  7. package/dist/cjs/jest-transform.js +11 -7
  8. package/dist/cjs/parser/collect-stories.js +43 -58
  9. package/dist/cjs/parser/collect-stories.test.js +30 -10
  10. package/dist/cjs/parser/extract-id.js +8 -13
  11. package/dist/cjs/parser/extract-id.test.js +5 -5
  12. package/dist/cjs/parser/extract-stories.js +41 -44
  13. package/dist/cjs/parser/extract-stories.test.js +235 -17
  14. package/dist/cjs/parser/svelte-stories-loader.js +24 -31
  15. package/dist/cjs/plugins/vite-svelte-csf.js +66 -0
  16. package/dist/cjs/preset/index.js +49 -41
  17. package/dist/cjs/preset/indexer.js +14 -54
  18. package/dist/cjs/preset/manager.js +1 -1
  19. package/dist/esm/components/context.js +8 -14
  20. package/dist/esm/constants.js +1 -1
  21. package/dist/esm/jest-transform.js +11 -7
  22. package/dist/esm/parser/collect-stories.js +39 -55
  23. package/dist/esm/parser/collect-stories.test.js +30 -10
  24. package/dist/esm/parser/extract-id.js +8 -13
  25. package/dist/esm/parser/extract-id.test.js +5 -5
  26. package/dist/esm/parser/extract-stories.js +38 -39
  27. package/dist/esm/parser/extract-stories.test.js +235 -17
  28. package/dist/esm/parser/svelte-stories-loader.js +22 -28
  29. package/dist/esm/plugins/vite-svelte-csf.js +48 -0
  30. package/dist/esm/preset/index.js +46 -39
  31. package/dist/esm/preset/indexer.js +14 -51
  32. package/dist/esm/preset/manager.js +1 -1
  33. package/package.json +23 -13
package/.babelrc.js CHANGED
@@ -1,8 +1,6 @@
1
1
  module.exports = {
2
- presets: ['@babel/preset-env', '@babel/preset-typescript'],
3
- plugins: [
4
- "@babel/plugin-transform-runtime"
5
- ],
2
+ presets: [['@babel/preset-env', { targets: { node: '16' } }], '@babel/preset-typescript'],
3
+ plugins: ['@babel/plugin-transform-runtime'],
6
4
  env: {
7
5
  esm: {
8
6
  presets: [
@@ -10,6 +8,7 @@ module.exports = {
10
8
  '@babel/env',
11
9
  {
12
10
  modules: false,
11
+ targets: { chrome: '100' },
13
12
  },
14
13
  ],
15
14
  ],
package/.eslintrc.js CHANGED
@@ -1,5 +1,11 @@
1
1
  module.exports = {
2
2
  root: true,
3
3
  extends: ['@storybook/eslint-config-storybook'],
4
+ rules: {
5
+ '@typescript-eslint/dot-notation': 'off',
6
+ '@typescript-eslint/no-implied-eval': 'off',
7
+ '@typescript-eslint/no-throw-literal': 'off',
8
+ '@typescript-eslint/return-await': 'off',
9
+ },
4
10
  overrides: [],
5
11
  };
package/README.md CHANGED
@@ -45,6 +45,24 @@ It supports:
45
45
 
46
46
  # Getting Started
47
47
 
48
- 1. Add '@storybook/addon-svelte-csf' to your dev dependencies
49
- 2. In `.storybook/main.js`, add `*.stories.svelte` to the stories patterns
50
- 3. In `.storybook/main.js`, add `@storybook/addon-svelte-csf` to the addons array
48
+ 1. `npm install --save-dev @storybook/addon-svelte-csf` or `yarn add --dev @storybook/addon-svelte-csf`
49
+ 2. In `.storybook/main.js`, add `@storybook/addon-svelte-csf` to the addons array
50
+ 3. In `.storybook/main.js`, add `*.stories.svelte` to the stories patterns
51
+
52
+ An example `main.js` configuration could look like this:
53
+
54
+ ```js
55
+ module.exports = {
56
+ stories: ['../src/**/*.stories.@(js|jsx|ts|tsx|svelte)'],
57
+ addons: [
58
+ '@storybook/addon-links',
59
+ '@storybook/addon-essentials',
60
+ '@storybook/addon-interactions',
61
+ '@storybook/addon-svelte-csf',
62
+ ],
63
+ framework: '@storybook/svelte-vite',
64
+ };
65
+ ```
66
+
67
+ > **Warning**
68
+ > v3 and above of this addon requires at least Storybook v7. If you're using Storybook between v6.4.20 and v7.0.0, you should instead use v2 of this addon with `npm install --save-dev @storybook/addon-svelte-csf@^2.0.10` or `yarn add --dev @storybook/addon-svelte-csf@^2.0.10`
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -9,30 +7,24 @@ exports.createRegistrationContext = createRegistrationContext;
9
7
  exports.createRenderContext = createRenderContext;
10
8
  exports.useContext = useContext;
11
9
 
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
10
  var _svelte = require("svelte");
15
11
 
16
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
-
18
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
19
-
20
- var CONTEXT_KEY = "storybook-registration-context";
12
+ const CONTEXT_KEY = "storybook-registration-context";
21
13
 
22
- function createRenderContext() {
23
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
24
- (0, _svelte.setContext)(CONTEXT_KEY, _objectSpread({
14
+ function createRenderContext(props = {}) {
15
+ (0, _svelte.setContext)(CONTEXT_KEY, {
25
16
  render: true,
26
- register: function register() {},
17
+ register: () => {},
27
18
  meta: {},
28
- args: {}
29
- }, props));
19
+ args: {},
20
+ ...props
21
+ });
30
22
  }
31
23
 
32
24
  function createRegistrationContext(repositories) {
33
25
  (0, _svelte.setContext)(CONTEXT_KEY, {
34
26
  render: false,
35
- register: function register(story) {
27
+ register: story => {
36
28
  repositories.stories.push(story);
37
29
  },
38
30
 
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ADDON_ID = void 0;
7
- var ADDON_ID = 'storybook/svelte-csf';
7
+ const ADDON_ID = 'storybook/svelte-csf';
8
8
  exports.ADDON_ID = ADDON_ID;
package/dist/cjs/index.js CHANGED
@@ -7,23 +7,23 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  Object.defineProperty(exports, "Meta", {
9
9
  enumerable: true,
10
- get: function get() {
11
- return _Meta["default"];
10
+ get: function () {
11
+ return _Meta.default;
12
12
  }
13
13
  });
14
14
  Object.defineProperty(exports, "Story", {
15
15
  enumerable: true,
16
- get: function get() {
17
- return _Story["default"];
16
+ get: function () {
17
+ return _Story.default;
18
18
  }
19
19
  });
20
20
  Object.defineProperty(exports, "Template", {
21
21
  enumerable: true,
22
- get: function get() {
23
- return _Template["default"];
22
+ get: function () {
23
+ return _Template.default;
24
24
  }
25
25
  });
26
- exports["default"] = void 0;
26
+ exports.default = void 0;
27
27
 
28
28
  var _Meta = _interopRequireDefault(require("./components/Meta.svelte"));
29
29
 
@@ -37,4 +37,4 @@ if (module && module.hot && module.hot.decline) {
37
37
 
38
38
 
39
39
  var _default = {};
40
- exports["default"] = _default;
40
+ exports.default = _default;
@@ -1,18 +1,22 @@
1
1
  "use strict";
2
2
 
3
- var svelte = require('svelte/compiler');
3
+ const svelte = require('svelte/compiler');
4
4
 
5
- var parser = require.resolve('./parser/collect-stories').replace(/[/\\]/g, '/');
5
+ const parser = require.resolve('./parser/collect-stories').replace(/[/\\]/g, '/');
6
6
 
7
7
  function process(src, filename) {
8
- var result = svelte.compile(src, {
8
+ const result = svelte.compile(src, {
9
9
  format: 'cjs',
10
- filename: filename,
10
+ filename,
11
11
  dev: true
12
12
  });
13
- var code = result.js ? result.js.code : result.code;
14
- var z = {
15
- code: "".concat(code, "\n const { default: parser } = require('").concat(parser, "');\n const md = parser(module.exports.default, {});\n module.exports = { default: md.meta, ...md.stories };\n Object.defineProperty(exports, \"__esModule\", { value: true });"),
13
+ const code = result.js ? result.js.code : result.code;
14
+ const z = {
15
+ code: `${code}
16
+ const { default: parser } = require('${parser}');
17
+ const md = parser(module.exports.default, {});
18
+ module.exports = { default: md.meta, ...md.stories };
19
+ Object.defineProperty(exports, "__esModule", { value: true });`,
16
20
  map: result.js ? result.js.map : result.map
17
21
  };
18
22
  return z;
@@ -5,11 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports["default"] = void 0;
9
-
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
-
12
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
8
+ exports.default = void 0;
13
9
 
14
10
  var _clientLogger = require("@storybook/client-logger");
15
11
 
@@ -21,7 +17,7 @@ var _RegisterContext = _interopRequireDefault(require("../components/RegisterCon
21
17
 
22
18
  var _RenderContext = _interopRequireDefault(require("../components/RenderContext.svelte"));
23
19
 
24
- var _excluded = ["id", "name", "template", "component", "source"];
20
+ /* eslint-env browser */
25
21
 
26
22
  /* Called from a webpack loader and a jest transformation.
27
23
  *
@@ -33,35 +29,33 @@ var _excluded = ["id", "name", "template", "component", "source"];
33
29
  * instantiate the main Stories component: Every Story but
34
30
  * the one selected is disabled.
35
31
  */
36
- var createFragment = document.createDocumentFragment ? function () {
37
- return document.createDocumentFragment();
38
- } : function () {
39
- return document.createElement('div');
40
- };
32
+ const createFragment = document.createDocumentFragment ? () => document.createDocumentFragment() : () => document.createElement('div');
41
33
 
42
- var _default = function _default(StoriesComponent, _ref) {
43
- var _ref$stories = _ref.stories,
44
- stories = _ref$stories === void 0 ? {} : _ref$stories,
45
- allocatedIds = _ref.allocatedIds;
46
- var repositories = {
34
+ var _default = (StoriesComponent, {
35
+ stories = {},
36
+ allocatedIds
37
+ }) => {
38
+ const repositories = {
47
39
  meta: null,
48
40
  stories: []
49
41
  }; // extract all stories
50
42
 
51
43
  try {
52
- var context = new _RegisterContext["default"]({
44
+ const context = new _RegisterContext.default({
53
45
  target: createFragment(),
54
46
  props: {
55
47
  Stories: StoriesComponent,
56
- repositories: repositories
48
+ repositories
57
49
  }
58
50
  });
59
51
  context.$destroy();
60
52
  } catch (e) {
61
- _clientLogger.logger.error("Error extracting stories ".concat(e.toString()), e);
53
+ _clientLogger.logger.error(`Error extracting stories ${e.toString()}`, e);
62
54
  }
63
55
 
64
- var meta = repositories.meta;
56
+ const {
57
+ meta
58
+ } = repositories;
65
59
 
66
60
  if (!meta) {
67
61
  _clientLogger.logger.error('Missing <Meta/> tag');
@@ -69,73 +63,64 @@ var _default = function _default(StoriesComponent, _ref) {
69
63
  return {};
70
64
  }
71
65
 
72
- var globalComponent = meta.component; // collect templates id
66
+ const {
67
+ component: globalComponent
68
+ } = meta; // collect templates id
73
69
 
74
- var templatesId = repositories.stories.filter(function (story) {
75
- return story.isTemplate;
76
- }).map(function (story) {
77
- return story.id;
78
- }); // check for duplicate templates
70
+ const templatesId = repositories.stories.filter(story => story.isTemplate).map(story => story.id); // check for duplicate templates
79
71
 
80
- var duplicateTemplatesId = templatesId.filter(function (item, index) {
81
- return templatesId.indexOf(item) !== index;
82
- });
72
+ const duplicateTemplatesId = templatesId.filter((item, index) => templatesId.indexOf(item) !== index);
83
73
 
84
74
  if (duplicateTemplatesId.length > 0) {
85
- _clientLogger.logger.warn("Found duplicates templates id for stories '".concat(meta.name, "': ").concat(duplicateTemplatesId));
75
+ _clientLogger.logger.warn(`Found duplicates templates id for stories '${meta.name}': ${duplicateTemplatesId}`);
86
76
  }
87
77
 
88
78
  return {
89
- meta: meta,
90
- stories: repositories.stories.filter(function (story) {
91
- return !story.isTemplate;
92
- }).reduce(function (all, story) {
93
- var id = story.id,
94
- name = story.name,
95
- template = story.template,
96
- component = story.component,
97
- _story$source = story.source,
98
- source = _story$source === void 0 ? false : _story$source,
99
- props = (0, _objectWithoutProperties2["default"])(story, _excluded);
100
- var storyId = (0, _extractId.extractId)(story, allocatedIds);
79
+ meta,
80
+ stories: repositories.stories.filter(story => !story.isTemplate).reduce((all, story) => {
81
+ const {
82
+ id,
83
+ name,
84
+ template,
85
+ component,
86
+ source = false,
87
+ ...props
88
+ } = story;
89
+ const storyId = (0, _extractId.extractId)(story, allocatedIds);
101
90
 
102
91
  if (!storyId) {
103
92
  return all;
104
93
  }
105
94
 
106
- var unknownTemplate = template != null && templatesId.indexOf(template) < 0;
95
+ const unknownTemplate = template != null && templatesId.indexOf(template) < 0;
107
96
 
108
- var storyFn = function storyFn(args, storyContext) {
97
+ const storyFn = (args, storyContext) => {
109
98
  if (unknownTemplate) {
110
- throw new Error("Story ".concat(name, " is referencing an unknown template ").concat(template));
99
+ throw new Error(`Story ${name} is referencing an unknown template ${template}`);
111
100
  }
112
101
 
113
102
  return {
114
- Component: _RenderContext["default"],
103
+ Component: _RenderContext.default,
115
104
  props: {
116
105
  Stories: StoriesComponent,
117
106
  storyName: name,
118
107
  templateId: template,
119
- args: args,
120
- storyContext: storyContext,
108
+ args,
109
+ storyContext,
121
110
  sourceComponent: component || globalComponent
122
111
  }
123
112
  };
124
113
  };
125
114
 
126
115
  storyFn.storyName = name;
127
- Object.entries(props).forEach(function (_ref2) {
128
- var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
129
- k = _ref3[0],
130
- v = _ref3[1];
131
-
116
+ Object.entries(props).forEach(([k, v]) => {
132
117
  storyFn[k] = v;
133
118
  }); // inject story sources
134
119
 
135
- var storyDef = stories[template ? "tpl:".concat(template) : storyId];
136
- var hasArgs = storyDef ? storyDef.hasArgs : true; // inject source snippet
120
+ const storyDef = stories[template ? `tpl:${template}` : storyId];
121
+ const hasArgs = storyDef ? storyDef.hasArgs : true; // inject source snippet
137
122
 
138
- var rawSource = storyDef ? storyDef.source : null;
123
+ const rawSource = storyDef ? storyDef.source : null;
139
124
 
140
125
  if (rawSource) {
141
126
  storyFn.parameters = (0, _clientApi.combineParameters)(storyFn.parameters || {}, {
@@ -145,7 +130,7 @@ var _default = function _default(StoriesComponent, _ref) {
145
130
  });
146
131
  }
147
132
 
148
- var snippet;
133
+ let snippet;
149
134
 
150
135
  if (source === true || source === false && !hasArgs) {
151
136
  snippet = rawSource;
@@ -170,4 +155,4 @@ var _default = function _default(StoriesComponent, _ref) {
170
155
  };
171
156
  };
172
157
 
173
- exports["default"] = _default;
158
+ exports.default = _default;
@@ -6,22 +6,42 @@ var _collectStories = _interopRequireDefault(require("./collect-stories"));
6
6
 
7
7
  var _TestStories = _interopRequireDefault(require("../components/__tests__/TestStories.svelte"));
8
8
 
9
- describe('parse-stories', function () {
10
- test('Extract Stories', function () {
11
- var data = (0, _collectStories["default"])(_TestStories["default"], {
9
+ describe('parse-stories', () => {
10
+ test('Extract Stories', () => {
11
+ const data = (0, _collectStories.default)(_TestStories.default, {
12
12
  stories: {
13
13
  'tpl:tpl2': 'tpl2src'
14
14
  }
15
15
  });
16
- var stories = data.stories,
17
- meta = data.meta;
18
- expect(meta).toMatchInlineSnapshot("\n Object {\n \"title\": \"Test\",\n }\n ");
19
- expect(stories).toMatchInlineSnapshot("\n Object {\n \"Story1\": [Function],\n \"Story2\": [Function],\n \"Story3\": [Function],\n }\n ");
16
+ const {
17
+ stories,
18
+ meta
19
+ } = data;
20
+ expect(meta).toMatchInlineSnapshot(`
21
+ Object {
22
+ "title": "Test",
23
+ }
24
+ `);
25
+ expect(stories).toMatchInlineSnapshot(`
26
+ Object {
27
+ "Story1": [Function],
28
+ "Story2": [Function],
29
+ "Story3": [Function],
30
+ }
31
+ `);
20
32
  expect(stories.Story1.storyName).toBe('Story1');
21
- expect(stories.Story1.parameters).toMatchInlineSnapshot("undefined");
33
+ expect(stories.Story1.parameters).toMatchInlineSnapshot(`undefined`);
22
34
  expect(stories.Story2.storyName).toBe('Story2');
23
- expect(stories.Story2.parameters).toMatchInlineSnapshot("undefined");
35
+ expect(stories.Story2.parameters).toMatchInlineSnapshot(`undefined`);
24
36
  expect(stories.Story3.storyName).toBe('Story3');
25
- expect(stories.Story3.parameters).toMatchInlineSnapshot("\n Object {\n \"docs\": Object {\n \"source\": Object {\n \"code\": \"xyz\",\n },\n },\n }\n ");
37
+ expect(stories.Story3.parameters).toMatchInlineSnapshot(`
38
+ Object {
39
+ "docs": Object {
40
+ "source": Object {
41
+ "code": "xyz",
42
+ },
43
+ },
44
+ }
45
+ `);
26
46
  });
27
47
  });
@@ -8,19 +8,16 @@ exports.extractId = extractId;
8
8
  var _clientLogger = require("@storybook/client-logger");
9
9
 
10
10
  function hashCode(str) {
11
- var h = str.split('') // eslint-disable-next-line no-bitwise
12
- .reduce(function (prevHash, currVal) {
13
- return (prevHash << 5) - prevHash + currVal.charCodeAt(0) | 0;
14
- }, 0);
11
+ const h = str.split('') // eslint-disable-next-line no-bitwise
12
+ .reduce((prevHash, currVal) => (prevHash << 5) - prevHash + currVal.charCodeAt(0) | 0, 0);
15
13
  return Math.abs(h).toString(16);
16
14
  } // extract a story id
17
15
 
18
16
 
19
- function extractId(_ref) {
20
- var id = _ref.id,
21
- name = _ref.name;
22
- var allocatedIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
23
-
17
+ function extractId({
18
+ id,
19
+ name
20
+ }, allocatedIds = []) {
24
21
  if (id) {
25
22
  return id;
26
23
  }
@@ -29,12 +26,10 @@ function extractId(_ref) {
29
26
  throw new Error("Id or Name should be specified");
30
27
  }
31
28
 
32
- var generated = name.replace(/\W+(.|$)/g, function (_, chr) {
33
- return chr.toUpperCase();
34
- });
29
+ let generated = name.replace(/\W+(.|$)/g, (_, chr) => chr.toUpperCase());
35
30
 
36
31
  if (allocatedIds.indexOf(generated) >= 0) {
37
- _clientLogger.logger.warn("Story name conflict with exports - Please add an explicit id for story ".concat(name));
32
+ _clientLogger.logger.warn(`Story name conflict with exports - Please add an explicit id for story ${name}`);
38
33
 
39
34
  generated += hashCode(name);
40
35
  }
@@ -2,23 +2,23 @@
2
2
 
3
3
  var _extractId = require("./extract-id");
4
4
 
5
- describe('extract-id', function () {
6
- test('name with spaces', function () {
5
+ describe('extract-id', () => {
6
+ test('name with spaces', () => {
7
7
  expect((0, _extractId.extractId)({
8
8
  name: 'Name with spaces'
9
9
  })).toBe('NameWithSpaces');
10
10
  });
11
- test('name with parenthesis', function () {
11
+ test('name with parenthesis', () => {
12
12
  expect((0, _extractId.extractId)({
13
13
  name: 'Name with (parenthesis)'
14
14
  })).toBe('NameWithParenthesis');
15
15
  });
16
- test('duplicates id', function () {
16
+ test('duplicates id', () => {
17
17
  expect((0, _extractId.extractId)({
18
18
  name: 'Button'
19
19
  }, ['Button'])).toBe('Button77471352');
20
20
  });
21
- test('No negative hash', function () {
21
+ test('No negative hash', () => {
22
22
  expect((0, _extractId.extractId)({
23
23
  name: 'Navbar'
24
24
  }, ['Navbar'])).toBe('Navbar7557f7d0');