creevey 0.8.0-beta.0 → 0.9.0-beta.0

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 (149) hide show
  1. package/CHANGELOG.md +5 -9
  2. package/lib/cjs/client/addon/Manager.js +0 -1
  3. package/lib/cjs/client/addon/preset.js +1 -0
  4. package/lib/cjs/client/addon/readyForCapture.js +12 -0
  5. package/lib/cjs/client/addon/withCreevey.js +313 -41
  6. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +3 -3
  7. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +3 -3
  8. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +4 -3
  9. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +3 -3
  10. package/lib/cjs/client/shared/helpers.js +1 -1
  11. package/lib/cjs/client/web/main.js +6 -6
  12. package/lib/cjs/index.js +27 -9
  13. package/lib/cjs/server/config.js +7 -3
  14. package/lib/cjs/server/extract.js +11 -4
  15. package/lib/cjs/server/index.js +2 -4
  16. package/lib/cjs/server/master/index.js +3 -9
  17. package/lib/cjs/server/master/master.js +1 -0
  18. package/lib/cjs/server/master/pool.js +29 -29
  19. package/lib/cjs/server/master/server.js +75 -3
  20. package/lib/cjs/server/messages.js +124 -12
  21. package/lib/cjs/server/parser.js +85 -0
  22. package/lib/cjs/server/selenium/browser.js +119 -21
  23. package/lib/cjs/server/stories.js +49 -46
  24. package/lib/cjs/server/storybook/providers/browser.js +78 -0
  25. package/lib/cjs/server/storybook/providers/hybrid.js +79 -0
  26. package/lib/cjs/server/storybook/{nodejs-provider.js → providers/nodejs.js} +32 -13
  27. package/lib/cjs/server/utils.js +7 -0
  28. package/lib/cjs/server/worker/helpers.js +2 -6
  29. package/lib/cjs/server/worker/worker.js +15 -3
  30. package/lib/cjs/shared.js +78 -6
  31. package/lib/cjs/types.js +5 -0
  32. package/lib/esm/client/addon/Manager.js +0 -1
  33. package/lib/esm/client/addon/preset.js +1 -0
  34. package/lib/esm/client/addon/readyForCapture.js +5 -0
  35. package/lib/esm/client/addon/withCreevey.js +303 -41
  36. package/lib/esm/client/shared/components/ImagesView/BlendView.js +2 -3
  37. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +2 -3
  38. package/lib/esm/client/shared/components/ImagesView/SlideView.js +3 -3
  39. package/lib/esm/client/shared/components/ImagesView/SwapView.js +2 -3
  40. package/lib/esm/client/shared/helpers.js +1 -1
  41. package/lib/esm/index.js +6 -3
  42. package/lib/esm/server/config.js +7 -5
  43. package/lib/esm/server/extract.js +8 -4
  44. package/lib/esm/server/index.js +2 -3
  45. package/lib/esm/server/master/index.js +4 -10
  46. package/lib/esm/server/master/master.js +1 -0
  47. package/lib/esm/server/master/pool.js +31 -31
  48. package/lib/esm/server/master/server.js +73 -5
  49. package/lib/esm/server/messages.js +118 -12
  50. package/lib/esm/server/parser.js +63 -0
  51. package/lib/esm/server/selenium/browser.js +116 -23
  52. package/lib/esm/server/stories.js +50 -46
  53. package/lib/esm/server/storybook/providers/browser.js +61 -0
  54. package/lib/esm/server/storybook/providers/hybrid.js +63 -0
  55. package/lib/esm/server/storybook/{nodejs-provider.js → providers/nodejs.js} +30 -13
  56. package/lib/esm/server/utils.js +6 -1
  57. package/lib/esm/server/worker/helpers.js +2 -6
  58. package/lib/esm/server/worker/worker.js +16 -4
  59. package/lib/esm/shared.js +59 -5
  60. package/lib/esm/types.js +3 -0
  61. package/lib/types/cli.d.ts +1 -1
  62. package/lib/types/client/addon/Manager.d.ts +37 -37
  63. package/lib/types/client/addon/components/Addon.d.ts +8 -8
  64. package/lib/types/client/addon/components/Icons.d.ts +7 -7
  65. package/lib/types/client/addon/components/Panel.d.ts +9 -9
  66. package/lib/types/client/addon/components/TestSelect.d.ts +9 -9
  67. package/lib/types/client/addon/components/Tools.d.ts +6 -6
  68. package/lib/types/client/addon/decorator.d.ts +1 -1
  69. package/lib/types/client/addon/preset.d.ts +24 -22
  70. package/lib/types/client/addon/readyForCapture.d.ts +6 -0
  71. package/lib/types/client/addon/register.d.ts +3 -3
  72. package/lib/types/client/addon/utils.d.ts +2 -2
  73. package/lib/types/client/addon/withCreevey.d.ts +24 -13
  74. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -3
  75. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +25 -25
  76. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -3
  77. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -3
  78. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -3
  79. package/lib/types/client/shared/components/ImagesView/index.d.ts +5 -5
  80. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +9 -9
  81. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +8 -8
  82. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +12 -12
  83. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +17 -17
  84. package/lib/types/client/shared/components/ResultsPage.d.ts +18 -18
  85. package/lib/types/client/shared/creeveyClientApi.d.ts +9 -9
  86. package/lib/types/client/shared/helpers.d.ts +46 -46
  87. package/lib/types/client/shared/viewMode.d.ts +4 -4
  88. package/lib/types/client/web/CreeveyApp.d.ts +12 -12
  89. package/lib/types/client/web/CreeveyContext.d.ts +11 -11
  90. package/lib/types/client/web/CreeveyLoader.d.ts +3 -3
  91. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +19 -19
  92. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +6 -6
  93. package/lib/types/client/web/CreeveyView/SideBar/SideBar.d.ts +14 -14
  94. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +13 -13
  95. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +33 -33
  96. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +8 -8
  97. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +10 -10
  98. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +9 -9
  99. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +6 -6
  100. package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +1 -1
  101. package/lib/types/client/web/KeyboardEventsContext.d.ts +13 -13
  102. package/lib/types/client/web/index.d.ts +4 -4
  103. package/lib/types/creevey.d.ts +1 -1
  104. package/lib/types/index.d.ts +2 -1
  105. package/lib/types/server/config.d.ts +4 -4
  106. package/lib/types/server/docker.d.ts +7 -7
  107. package/lib/types/server/extract.d.ts +2 -2
  108. package/lib/types/server/index.d.ts +2 -2
  109. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +1 -1
  110. package/lib/types/server/loaders/babel/helpers.d.ts +19 -19
  111. package/lib/types/server/loaders/babel/register.d.ts +5 -5
  112. package/lib/types/server/loaders/hooks/mdx.d.ts +1 -1
  113. package/lib/types/server/loaders/hooks/svelte.d.ts +1 -1
  114. package/lib/types/server/loaders/webpack/compile.d.ts +2 -2
  115. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +2 -2
  116. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +10 -10
  117. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +6 -6
  118. package/lib/types/server/loaders/webpack/start.d.ts +1 -1
  119. package/lib/types/server/logger.d.ts +6 -6
  120. package/lib/types/server/master/api.d.ts +7 -7
  121. package/lib/types/server/master/index.d.ts +3 -3
  122. package/lib/types/server/master/master.d.ts +7 -6
  123. package/lib/types/server/master/pool.d.ts +31 -30
  124. package/lib/types/server/master/runner.d.ts +26 -26
  125. package/lib/types/server/master/server.d.ts +2 -2
  126. package/lib/types/server/messages.d.ts +28 -18
  127. package/lib/types/server/parser.d.ts +12 -0
  128. package/lib/types/server/selenium/browser.d.ts +17 -14
  129. package/lib/types/server/selenium/index.d.ts +2 -2
  130. package/lib/types/server/selenium/selenoid.d.ts +3 -3
  131. package/lib/types/server/stories.d.ts +8 -8
  132. package/lib/types/server/storybook/entry.d.ts +18 -18
  133. package/lib/types/server/storybook/helpers.d.ts +24 -24
  134. package/lib/types/server/storybook/providers/browser.d.ts +4 -0
  135. package/lib/types/server/storybook/providers/hybrid.d.ts +4 -0
  136. package/lib/types/server/storybook/providers/nodejs.d.ts +9 -0
  137. package/lib/types/server/update.d.ts +2 -2
  138. package/lib/types/server/utils.d.ts +20 -19
  139. package/lib/types/server/worker/chai-image.d.ts +6 -6
  140. package/lib/types/server/worker/helpers.d.ts +8 -7
  141. package/lib/types/server/worker/index.d.ts +1 -1
  142. package/lib/types/server/worker/reporter.d.ts +8 -8
  143. package/lib/types/server/worker/worker.d.ts +4 -4
  144. package/lib/types/shared.d.ts +16 -4
  145. package/lib/types/types.d.ts +488 -459
  146. package/package.json +12 -6
  147. package/storybook-static/stories.json +21 -0
  148. package/types/mocha.d.ts +1 -0
  149. package/lib/types/server/storybook/nodejs-provider.d.ts +0 -5
package/CHANGELOG.md CHANGED
@@ -1,19 +1,15 @@
1
1
  # [0.8.0-beta.0](https://github.com/wKich/creevey/compare/v0.7.39...v0.8.0-beta.0) (2022-03-17)
2
2
 
3
-
4
3
  ### Bug Fixes
5
4
 
6
- * 🐛 revert cross-env scripts, as they not work in unix ([92b04a5](https://github.com/wKich/creevey/commit/92b04a5bed56191b7ee6bd169f5327e30a1c2232))
7
-
5
+ - 🐛 revert cross-env scripts, as they not work in unix ([92b04a5](https://github.com/wKich/creevey/commit/92b04a5bed56191b7ee6bd169f5327e30a1c2232))
8
6
 
9
7
  ### Features
10
8
 
11
- * 🎸 change format for `skip` parameter ([f244b7c](https://github.com/wKich/creevey/commit/f244b7cd344b276762408a1df841e5afc3853fad))
12
- * 🎸 Improve skip options ([2fcc624](https://github.com/wKich/creevey/commit/2fcc624a9b2ab1dcdce3927779c8f58bb0a0d02c))
13
- * new creevey params: "global" and "kind" ([7d7c885](https://github.com/wKich/creevey/commit/7d7c88521a28c91586bfdd663500bea576845292))
14
- * support storybook 6.4 ([74010e5](https://github.com/wKich/creevey/commit/74010e53d93ff1815427cd7ee818481ce6e21288))
15
-
16
-
9
+ - 🎸 change format for `skip` parameter ([f244b7c](https://github.com/wKich/creevey/commit/f244b7cd344b276762408a1df841e5afc3853fad))
10
+ - 🎸 Improve skip options ([2fcc624](https://github.com/wKich/creevey/commit/2fcc624a9b2ab1dcdce3927779c8f58bb0a0d02c))
11
+ - new creevey params: "global" and "kind" ([7d7c885](https://github.com/wKich/creevey/commit/7d7c88521a28c91586bfdd663500bea576845292))
12
+ - support storybook 6.4 ([74010e5](https://github.com/wKich/creevey/commit/74010e53d93ff1815427cd7ee818481ce6e21288))
17
13
 
18
14
  ## [0.7.39](https://github.com/wKich/creevey/compare/v0.7.38...v0.7.39) (2021-11-04)
19
15
 
@@ -244,7 +244,6 @@ var CreeveyManager = /*#__PURE__*/function () {
244
244
  });
245
245
 
246
246
  _defineProperty(this, "onSetStories", function (data) {
247
- // TODO: Send PR to storybook to fix this
248
247
  var stories = data.v ? (0, _shared.denormalizeStoryParameters)(data) : data.stories;
249
248
  _this.stories = stories;
250
249
  });
@@ -72,6 +72,7 @@ function managerWebpack(config, options) {
72
72
  DefinePlugin = _ref$DefinePlugin === void 0 ? _webpack.DefinePlugin : _ref$DefinePlugin;
73
73
 
74
74
  (_config$plugins = config.plugins) === null || _config$plugins === void 0 ? void 0 : _config$plugins.push(new DefinePlugin({
75
+ __CREEVEY_SERVER_HOST__: options.creeveyHost,
75
76
  __CREEVEY_SERVER_PORT__: (_options$creeveyPort = options.creeveyPort) !== null && _options$creeveyPort !== void 0 ? _options$creeveyPort : 3000,
76
77
  __CREEVEY_CLIENT_PORT__: options.clientPort
77
78
  }));
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.readyForCapture = readyForCapture;
7
+
8
+ function readyForCapture() {
9
+ var _window$__CREEVEY_SET, _window;
10
+
11
+ (_window$__CREEVEY_SET = (_window = window).__CREEVEY_SET_READY_FOR_CAPTURE__) === null || _window$__CREEVEY_SET === void 0 ? void 0 : _window$__CREEVEY_SET.call(_window);
12
+ }
@@ -4,19 +4,46 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.withCreevey = withCreevey;
7
+ exports.capture = capture;
7
8
 
8
9
  var Events = _interopRequireWildcard(require("@storybook/core-events"));
9
10
 
10
11
  var polyfill = _interopRequireWildcard(require("event-source-polyfill"));
11
12
 
13
+ var _testingLibrary = require("@storybook/testing-library");
14
+
12
15
  var _addons = require("@storybook/addons");
13
16
 
14
17
  var _types = require("../../types");
15
18
 
19
+ var _shared = require("../../shared");
20
+
21
+ var _helpers = require("../shared/helpers");
22
+
16
23
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
24
 
18
25
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
26
 
27
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
28
+
29
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
30
+
31
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
32
+
33
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
34
+
35
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
36
+
37
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
38
+
39
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
40
+
41
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
42
+
43
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
44
+
45
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
46
+
20
47
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
21
48
 
22
49
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
@@ -41,10 +68,10 @@ function resetCurrentStory(_x) {
41
68
  }
42
69
 
43
70
  function _resetCurrentStory() {
44
- _resetCurrentStory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(channel) {
45
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
71
+ _resetCurrentStory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(channel) {
72
+ return regeneratorRuntime.wrap(function _callee4$(_context4) {
46
73
  while (1) {
47
- switch (_context3.prev = _context3.next) {
74
+ switch (_context4.prev = _context4.next) {
48
75
  case 0:
49
76
  setTimeout(function () {
50
77
  return channel.emit(Events.SET_CURRENT_STORY, {
@@ -53,16 +80,16 @@ function _resetCurrentStory() {
53
80
  kind: ''
54
81
  });
55
82
  }, 0);
56
- return _context3.abrupt("return", new Promise(function (resolve) {
83
+ return _context4.abrupt("return", new Promise(function (resolve) {
57
84
  return channel.once(Events.STORY_MISSING, resolve);
58
85
  }));
59
86
 
60
87
  case 2:
61
88
  case "end":
62
- return _context3.stop();
89
+ return _context4.stop();
63
90
  }
64
91
  }
65
- }, _callee3);
92
+ }, _callee4);
66
93
  }));
67
94
  return _resetCurrentStory.apply(this, arguments);
68
95
  }
@@ -136,9 +163,40 @@ function waitForFontsLoaded() {
136
163
  }
137
164
  }
138
165
 
166
+ function waitForCaptureCall() {
167
+ return new Promise(function (resolve) {
168
+ return captureResolver = resolve;
169
+ });
170
+ }
171
+
172
+ function initCreeveyState() {
173
+ var _window$localStorage$;
174
+
175
+ var prevState = JSON.parse((_window$localStorage$ = window.localStorage.getItem('Creevey_Tests')) !== null && _window$localStorage$ !== void 0 ? _window$localStorage$ : '{}');
176
+ if (prevState.creeveyHost) window.__CREEVEY_SERVER_HOST__ = prevState.creeveyHost;
177
+ if (prevState.creeveyPort) window.__CREEVEY_SERVER_PORT__ = prevState.creeveyPort;
178
+ if (prevState.setStoriesCounter) setStoriesCounter = prevState.setStoriesCounter;
179
+ if (prevState.isTestBrowser) isTestBrowser = prevState.isTestBrowser;
180
+ window.addEventListener('beforeunload', function () {
181
+ window.localStorage.setItem('Creevey_Tests', JSON.stringify({
182
+ creeveyHost: window.__CREEVEY_SERVER_HOST__,
183
+ creeveyPort: window.__CREEVEY_SERVER_PORT__,
184
+ setStoriesCounter: setStoriesCounter,
185
+ isTestBrowser: isTestBrowser
186
+ }));
187
+ });
188
+ }
189
+
190
+ var isTestBrowser = false;
191
+ var captureResolver;
192
+ var waitForCreevey;
193
+ var creeveyReady;
194
+ var setStoriesCounter = 0;
195
+
139
196
  function withCreevey() {
140
197
  var currentStory = '';
141
198
  var isAnimationDisabled = false;
199
+ initCreeveyState();
142
200
 
143
201
  function disableAnimation() {
144
202
  isAnimationDisabled = true;
@@ -149,42 +207,131 @@ function withCreevey() {
149
207
  document.head.appendChild(style);
150
208
  }
151
209
 
210
+ function getStories() {
211
+ return _getStories.apply(this, arguments);
212
+ }
213
+
214
+ function _getStories() {
215
+ _getStories = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
216
+ var _window$__STORYBOOK_S;
217
+
218
+ var storiesPromise, store;
219
+ return regeneratorRuntime.wrap(function _callee$(_context) {
220
+ while (1) {
221
+ switch (_context.prev = _context.next) {
222
+ case 0:
223
+ storiesPromise = new Promise(function (resolve) {
224
+ return _addons.addons.getChannel().once(Events.SET_STORIES, function (data) {
225
+ return resolve((0, _shared.serializeRawStories)((0, _shared.denormalizeStoryParameters)(data)));
226
+ });
227
+ });
228
+ store = (_window$__STORYBOOK_S = window.__STORYBOOK_STORY_STORE__) !== null && _window$__STORYBOOK_S !== void 0 ? _window$__STORYBOOK_S : {}; // @ts-expect-error `pushToManager` exists only in Storybook 6.0 - 6.3
229
+
230
+ if (!store.pushToManager) {
231
+ _context.next = 6;
232
+ break;
233
+ }
234
+
235
+ // @ts-expect-error `pushToManager` exists only in Storybook 6.0 - 6.3
236
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
237
+ store.pushToManager();
238
+ _context.next = 13;
239
+ break;
240
+
241
+ case 6:
242
+ if (!store.cacheAllCSFFiles) {
243
+ _context.next = 12;
244
+ break;
245
+ }
246
+
247
+ _context.next = 9;
248
+ return store.cacheAllCSFFiles();
249
+
250
+ case 9:
251
+ _addons.addons.getChannel().emit(Events.SET_STORIES, store.getSetStoriesPayload());
252
+
253
+ _context.next = 13;
254
+ break;
255
+
256
+ case 12:
257
+ return _context.abrupt("return");
258
+
259
+ case 13:
260
+ _addons.addons.getChannel().on(Events.SET_STORIES, function (data) {
261
+ // TODO Figure out how to get only updated stories
262
+ // TODO Subscribe on hmr? like use dummy-hmr
263
+ setStoriesCounter += 1;
264
+ var stories = (0, _shared.serializeRawStories)((0, _shared.denormalizeStoryParameters)(data));
265
+ var storiesByFiles = new Map();
266
+ Object.values(stories).forEach(function (story) {
267
+ var storiesFromFile = storiesByFiles.get(story.parameters.fileName);
268
+ if (storiesFromFile) storiesFromFile.push(story);else storiesByFiles.set(story.parameters.fileName, [story]);
269
+ });
270
+ void fetch("http://".concat((0, _helpers.getConnectionUrl)(), "/stories"), {
271
+ method: 'POST',
272
+ headers: {
273
+ 'Content-Type': 'application/json'
274
+ },
275
+ body: JSON.stringify({
276
+ setStoriesCounter: setStoriesCounter,
277
+ stories: _toConsumableArray(storiesByFiles.entries())
278
+ })
279
+ });
280
+ });
281
+
282
+ return _context.abrupt("return", storiesPromise);
283
+
284
+ case 15:
285
+ case "end":
286
+ return _context.stop();
287
+ }
288
+ }
289
+ }, _callee);
290
+ }));
291
+ return _getStories.apply(this, arguments);
292
+ }
293
+
152
294
  function selectStory(_x2, _x3, _x4, _x5, _x6) {
153
295
  return _selectStory.apply(this, arguments);
154
296
  }
155
297
 
156
298
  function _selectStory() {
157
- _selectStory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(storyId, kind, name, shouldWaitForReady, callback) {
158
- var channel, waitForReady, renderPromise, errorPromise, _reason$stack, errorMessage;
299
+ _selectStory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(storyId, kind, name, shouldWaitForReady, callback) {
300
+ var channel, waitForReady, isCaptureCalled, renderPromise, errorPromise, capturePromise, _reason$stack, errorMessage;
159
301
 
160
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
302
+ return regeneratorRuntime.wrap(function _callee3$(_context3) {
161
303
  while (1) {
162
- switch (_context2.prev = _context2.next) {
304
+ switch (_context3.prev = _context3.next) {
163
305
  case 0:
164
306
  if (!isAnimationDisabled) disableAnimation();
307
+ isTestBrowser = true;
165
308
  channel = _addons.addons.getChannel();
166
309
  waitForReady = shouldWaitForReady ? new Promise(function (resolve) {
167
310
  return window.__CREEVEY_SET_READY_FOR_CAPTURE__ = resolve;
168
311
  }) : Promise.resolve();
169
312
 
170
313
  if (!(storyId == currentStory)) {
171
- _context2.next = 8;
314
+ _context3.next = 9;
172
315
  break;
173
316
  }
174
317
 
175
- _context2.next = 6;
318
+ _context3.next = 7;
176
319
  return resetCurrentStory(channel);
177
320
 
178
- case 6:
179
- _context2.next = 9;
321
+ case 7:
322
+ _context3.next = 10;
180
323
  break;
181
324
 
182
- case 8:
325
+ case 9:
183
326
  currentStory = storyId;
184
327
 
185
- case 9:
328
+ case 10:
329
+ isCaptureCalled = false;
186
330
  renderPromise = waitForStoryRendered(channel);
187
331
  errorPromise = catchRenderError(channel);
332
+ capturePromise = waitForCaptureCall().then(function () {
333
+ return isCaptureCalled = true;
334
+ });
188
335
  setTimeout(function () {
189
336
  return channel.emit(Events.SET_CURRENT_STORY, {
190
337
  storyId: storyId,
@@ -192,57 +339,57 @@ function withCreevey() {
192
339
  kind: kind
193
340
  });
194
341
  }, 0);
195
- _context2.prev = 12;
196
- _context2.next = 15;
197
- return Promise.race([_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
198
- return regeneratorRuntime.wrap(function _callee$(_context) {
342
+ _context3.prev = 15;
343
+ _context3.next = 18;
344
+ return Promise.race([_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
345
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
199
346
  while (1) {
200
- switch (_context.prev = _context.next) {
347
+ switch (_context2.prev = _context2.next) {
201
348
  case 0:
202
- _context.next = 2;
203
- return renderPromise;
349
+ _context2.next = 2;
350
+ return Promise.race([renderPromise, capturePromise]);
204
351
 
205
352
  case 2:
206
- _context.next = 4;
353
+ _context2.next = 4;
207
354
  return waitForFontsLoaded();
208
355
 
209
356
  case 4:
210
- _context.next = 6;
357
+ _context2.next = 6;
211
358
  return waitForReady;
212
359
 
213
360
  case 6:
214
361
  case "end":
215
- return _context.stop();
362
+ return _context2.stop();
216
363
  }
217
364
  }
218
- }, _callee);
365
+ }, _callee2);
219
366
  }))(), errorPromise]);
220
367
 
221
- case 15:
222
- callback();
223
- _context2.next = 22;
368
+ case 18:
369
+ callback([null, isCaptureCalled]);
370
+ _context3.next = 25;
224
371
  break;
225
372
 
226
- case 18:
227
- _context2.prev = 18;
228
- _context2.t0 = _context2["catch"](12);
373
+ case 21:
374
+ _context3.prev = 21;
375
+ _context3.t0 = _context3["catch"](15);
229
376
  // NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
230
377
  // NOTE Event `STORY_ERRORED` return error-like object without `name` field
231
- errorMessage = _context2.t0 instanceof Error ? (_reason$stack = _context2.t0.stack) !== null && _reason$stack !== void 0 ? _reason$stack : _context2.t0.message : (0, _types.isObject)(_context2.t0) ? "".concat(_context2.t0.message, "\n ").concat(_context2.t0.stack) : _context2.t0;
232
- callback(errorMessage);
378
+ errorMessage = _context3.t0 instanceof Error ? (_reason$stack = _context3.t0.stack) !== null && _reason$stack !== void 0 ? _reason$stack : _context3.t0.message : (0, _types.isObject)(_context3.t0) ? "".concat(_context3.t0.message, "\n ").concat(_context3.t0.stack) : _context3.t0;
379
+ callback([errorMessage]);
233
380
 
234
- case 22:
235
- _context2.prev = 22;
381
+ case 25:
382
+ _context3.prev = 25;
236
383
  renderPromise.cancel();
237
384
  errorPromise.cancel();
238
- return _context2.finish(22);
385
+ return _context3.finish(25);
239
386
 
240
- case 26:
387
+ case 29:
241
388
  case "end":
242
- return _context2.stop();
389
+ return _context3.stop();
243
390
  }
244
391
  }
245
- }, _callee2, null, [[12, 18, 22, 26]]);
392
+ }, _callee3, null, [[15, 21, 25, 29]]);
246
393
  }));
247
394
  return _selectStory.apply(this, arguments);
248
395
  }
@@ -269,16 +416,141 @@ function withCreevey() {
269
416
  (_ignoreStyles$parentN = ignoreStyles.parentNode) === null || _ignoreStyles$parentN === void 0 ? void 0 : _ignoreStyles$parentN.removeChild(ignoreStyles);
270
417
  }
271
418
 
419
+ function hasPlayCompletedYet(callback) {
420
+ creeveyReady();
421
+ var isCaptureCalled = false;
422
+ var isPlayCompleted = false;
423
+
424
+ var channel = _addons.addons.getChannel();
425
+
426
+ void waitForStoryRendered(channel).then(function () {
427
+ if (isCaptureCalled) return;
428
+ isPlayCompleted = true;
429
+ callback(true);
430
+ });
431
+ void waitForCaptureCall().then(function () {
432
+ if (isPlayCompleted) return;
433
+ isCaptureCalled = true;
434
+ callback(false);
435
+ });
436
+ }
437
+
438
+ window.__CREEVEY_GET_STORIES__ = getStories;
272
439
  window.__CREEVEY_SELECT_STORY__ = selectStory;
273
440
  window.__CREEVEY_UPDATE_GLOBALS__ = updateGlobals;
274
441
  window.__CREEVEY_INSERT_IGNORE_STYLES__ = insertIgnoreStyles;
275
442
  window.__CREEVEY_REMOVE_IGNORE_STYLES__ = removeIgnoreStyles;
443
+ window.__CREEVEY_HAS_PLAY_COMPLETED_YET__ = hasPlayCompletedYet;
276
444
  window.__CREEVEY_SET_READY_FOR_CAPTURE__ = _types.noop;
445
+
446
+ var queryAllByQuery = function queryAllByQuery(container, query) {
447
+ return _toConsumableArray(container.querySelectorAll(query)).filter(function (e) {
448
+ return e instanceof HTMLElement;
449
+ });
450
+ };
451
+
452
+ var getMultipleError = function getMultipleError(_, query) {
453
+ return "Found multiple elements by query: ".concat(query);
454
+ };
455
+
456
+ var getMissingError = function getMissingError(_, query) {
457
+ return "Unable to find an element by query: ".concat(query);
458
+ };
459
+
460
+ var _buildQueries = (0, _testingLibrary.buildQueries)(queryAllByQuery, getMultipleError, getMissingError),
461
+ _buildQueries2 = _slicedToArray(_buildQueries, 5),
462
+ queryByQuery = _buildQueries2[0],
463
+ getAllByQuery = _buildQueries2[1],
464
+ getByQuery = _buildQueries2[2],
465
+ findAllByQuery = _buildQueries2[3],
466
+ findByQuery = _buildQueries2[4];
467
+
468
+ var queries = {
469
+ queryByQuery: queryByQuery,
470
+ getAllByQuery: getAllByQuery,
471
+ getByQuery: getByQuery,
472
+ findAllByQuery: findAllByQuery,
473
+ findByQuery: findByQuery
474
+ };
277
475
  return (0, _addons.makeDecorator)({
278
476
  name: 'withCreevey',
279
477
  parameterName: 'creevey',
280
478
  wrapper: function wrapper(getStory, context) {
479
+ var _ref2;
480
+
481
+ // TODO Define proper types, like captureElement is a promise
482
+ var _context$parameters$c = context.parameters.creevey = (_ref2 = context.parameters.creevey) !== null && _ref2 !== void 0 ? _ref2 : {},
483
+ captureElement = _context$parameters$c.captureElement;
484
+
485
+ Object.defineProperty(context.parameters.creevey, 'captureElement', {
486
+ get: function get() {
487
+ switch (true) {
488
+ case captureElement === undefined:
489
+ return Promise.resolve(context.canvasElement);
490
+
491
+ case captureElement === null:
492
+ return Promise.resolve(document.documentElement);
493
+
494
+ case typeof captureElement == 'string':
495
+ return (0, _testingLibrary.within)(context.canvasElement, queries).findByQuery(captureElement);
496
+
497
+ case typeof captureElement == 'function':
498
+ // TODO Define type for it
499
+ return Promise.resolve(captureElement(context));
500
+ }
501
+ },
502
+ enumerable: true,
503
+ configurable: true
504
+ });
281
505
  return getStory(context);
282
506
  }
283
507
  });
508
+ }
509
+
510
+ function capture(_x7) {
511
+ return _capture.apply(this, arguments);
512
+ }
513
+
514
+ function _capture() {
515
+ _capture = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(options) {
516
+ return regeneratorRuntime.wrap(function _callee5$(_context5) {
517
+ while (1) {
518
+ switch (_context5.prev = _context5.next) {
519
+ case 0:
520
+ if (isTestBrowser) {
521
+ _context5.next = 2;
522
+ break;
523
+ }
524
+
525
+ return _context5.abrupt("return");
526
+
527
+ case 2:
528
+ captureResolver();
529
+ waitForCreevey = new Promise(function (resolve) {
530
+ return creeveyReady = resolve;
531
+ });
532
+ _context5.next = 6;
533
+ return fetch("http://".concat((0, _helpers.getConnectionUrl)(), "/capture"), {
534
+ method: 'POST',
535
+ headers: {
536
+ 'Content-Type': 'application/json'
537
+ },
538
+ body: JSON.stringify({
539
+ workerId: window.__CREEVEY_WORKER_ID__,
540
+ options: options
541
+ })
542
+ });
543
+
544
+ case 6:
545
+ _context5.next = 8;
546
+ return waitForCreevey;
547
+
548
+ case 8:
549
+ case "end":
550
+ return _context5.stop();
551
+ }
552
+ }
553
+ }, _callee5);
554
+ }));
555
+ return _capture.apply(this, arguments);
284
556
  }
@@ -15,6 +15,8 @@ var _theming = require("@storybook/theming");
15
15
 
16
16
  var _helpers = require("../../helpers");
17
17
 
18
+ var _readyForCapture = require("../../../addon/readyForCapture");
19
+
18
20
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
21
 
20
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -61,9 +63,7 @@ var BlendView = (0, _theming.withTheme)(function (_ref2) {
61
63
  (0, _helpers.useApplyScale)(expectImageRef, scale, loaded);
62
64
  (0, _helpers.useApplyScale)(actualImageRef, scale, loaded);
63
65
  (0, _react.useEffect)(function () {
64
- var _window$__CREEVEY_SET, _window;
65
-
66
- if (loaded) (_window$__CREEVEY_SET = (_window = window).__CREEVEY_SET_READY_FOR_CAPTURE__) === null || _window$__CREEVEY_SET === void 0 ? void 0 : _window$__CREEVEY_SET.call(_window);
66
+ if (loaded) (0, _readyForCapture.readyForCapture)();
67
67
  }, [loaded]);
68
68
  return /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(ImageContainer, null, /*#__PURE__*/_react.default.createElement(Image, {
69
69
  ref: expectImageRef,
@@ -17,6 +17,8 @@ var _helpers = require("../../helpers");
17
17
 
18
18
  var _components = require("@storybook/components");
19
19
 
20
+ var _readyForCapture = require("../../../addon/readyForCapture");
21
+
20
22
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
23
 
22
24
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -134,9 +136,7 @@ var SideBySideView = (0, _theming.withTheme)(function (_ref3) {
134
136
  (0, _helpers.useApplyScale)(expectImageRef, scale);
135
137
  (0, _helpers.useApplyScale)(actualImageRef, scale);
136
138
  (0, _react.useEffect)(function () {
137
- var _window$__CREEVEY_SET, _window;
138
-
139
- if (loaded) (_window$__CREEVEY_SET = (_window = window).__CREEVEY_SET_READY_FOR_CAPTURE__) === null || _window$__CREEVEY_SET === void 0 ? void 0 : _window$__CREEVEY_SET.call(_window);
139
+ if (loaded) (0, _readyForCapture.readyForCapture)();
140
140
  }, [loaded]);
141
141
  return /*#__PURE__*/_react.default.createElement(Container, {
142
142
  ref: containerRef
@@ -17,6 +17,8 @@ var _helpers = require("../../helpers");
17
17
 
18
18
  var _components = require("@storybook/components");
19
19
 
20
+ var _readyForCapture = require("../../../addon/readyForCapture");
21
+
20
22
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
23
 
22
24
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -141,11 +143,10 @@ var SlideView = (0, _theming.withTheme)(function (_ref3) {
141
143
  }
142
144
  }, [loaded]);
143
145
  (0, _react.useEffect)(function () {
144
- var _window$__CREEVEY_SET, _window;
145
-
146
- if (loaded) (_window$__CREEVEY_SET = (_window = window).__CREEVEY_SET_READY_FOR_CAPTURE__) === null || _window$__CREEVEY_SET === void 0 ? void 0 : _window$__CREEVEY_SET.call(_window);
146
+ if (loaded) (0, _readyForCapture.readyForCapture)();
147
147
  }, [loaded]);
148
148
  return loaded ? /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(Input, {
149
+ "data-testid": "slider",
149
150
  type: "range",
150
151
  min: 0,
151
152
  max: 100,
@@ -17,6 +17,8 @@ var _helpers = require("../../helpers");
17
17
 
18
18
  var _components = require("@storybook/components");
19
19
 
20
+ var _readyForCapture = require("../../../addon/readyForCapture");
21
+
20
22
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
23
 
22
24
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -80,9 +82,7 @@ var SwapView = (0, _theming.withTheme)(function (_ref2) {
80
82
  });
81
83
  }, []);
82
84
  (0, _react.useEffect)(function () {
83
- var _window$__CREEVEY_SET, _window;
84
-
85
- if (loaded) (_window$__CREEVEY_SET = (_window = window).__CREEVEY_SET_READY_FOR_CAPTURE__) === null || _window$__CREEVEY_SET === void 0 ? void 0 : _window$__CREEVEY_SET.call(_window);
85
+ if (loaded) (0, _readyForCapture.readyForCapture)();
86
86
  }, [loaded]);
87
87
  return loaded ? /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(Image, {
88
88
  ref: expectImageRef,
@@ -339,7 +339,7 @@ function countTestsStatus(suite) {
339
339
  }
340
340
 
341
341
  function getConnectionUrl() {
342
- return [window.location.hostname, typeof __CREEVEY_SERVER_PORT__ == 'undefined' ? window.location.port : __CREEVEY_SERVER_PORT__].filter(Boolean).join(':');
342
+ return [typeof __CREEVEY_SERVER_HOST__ == 'undefined' ? window.location.hostname : __CREEVEY_SERVER_HOST__, typeof __CREEVEY_SERVER_PORT__ == 'undefined' ? window.location.port : __CREEVEY_SERVER_PORT__].filter(Boolean).join(':');
343
343
  }
344
344
 
345
345
  function getImageUrl(path, imageName) {