creevey 0.9.0-beta.0 → 0.9.0-beta.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 (203) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +9 -1
  3. package/addon/README.md +3 -0
  4. package/addon/package.json +5 -0
  5. package/docs/config.md +29 -26
  6. package/jest.config.js +6 -0
  7. package/lib/cjs/client/addon/Manager.js +122 -270
  8. package/lib/cjs/client/addon/components/Addon.js +17 -38
  9. package/lib/cjs/client/addon/components/Icons.js +11 -7
  10. package/lib/cjs/client/addon/components/Panel.js +17 -13
  11. package/lib/cjs/client/addon/components/TestSelect.js +11 -9
  12. package/lib/cjs/client/addon/components/Tools.js +22 -41
  13. package/lib/cjs/client/addon/decorator.js +1 -1
  14. package/lib/cjs/client/addon/index.js +31 -0
  15. package/lib/cjs/client/addon/preset.ie11.js +74 -0
  16. package/lib/cjs/client/addon/preset.js +4 -68
  17. package/lib/cjs/client/addon/preset.sb7.js +19 -0
  18. package/lib/cjs/client/addon/preview.js +14 -0
  19. package/lib/cjs/client/addon/register.js +46 -70
  20. package/lib/cjs/client/addon/utils.js +6 -2
  21. package/lib/cjs/client/addon/withCreevey.js +161 -366
  22. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +23 -21
  23. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +22 -18
  24. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +42 -64
  25. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +35 -48
  26. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +24 -43
  27. package/lib/cjs/client/shared/components/ImagesView/index.js +9 -9
  28. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +12 -8
  29. package/lib/cjs/client/shared/components/PageFooter/Paging.js +14 -18
  30. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +22 -18
  31. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +42 -67
  32. package/lib/cjs/client/shared/components/ResultsPage.js +39 -69
  33. package/lib/cjs/client/shared/creeveyClientApi.js +55 -82
  34. package/lib/cjs/client/shared/helpers.js +139 -210
  35. package/lib/cjs/client/shared/viewMode.js +5 -5
  36. package/lib/cjs/client/web/142.js +2 -0
  37. package/lib/cjs/client/web/142.js.LICENSE.txt +12 -0
  38. package/lib/cjs/client/web/32.js +1 -0
  39. package/lib/cjs/client/web/551.js +1 -0
  40. package/lib/cjs/client/web/566.js +2 -0
  41. package/lib/cjs/client/web/566.js.LICENSE.txt +31 -0
  42. package/lib/cjs/client/web/691.js +2 -0
  43. package/lib/cjs/client/web/691.js.LICENSE.txt +8 -0
  44. package/lib/cjs/client/web/725.js +1 -0
  45. package/lib/cjs/client/web/main.js +2 -38
  46. package/lib/cjs/client/web/main.js.LICENSE.txt +49 -0
  47. package/lib/cjs/creevey.js +3 -5
  48. package/lib/cjs/index.js +5 -5
  49. package/lib/cjs/server/config.js +3 -5
  50. package/lib/cjs/server/docker.js +3 -7
  51. package/lib/cjs/server/extract.js +1 -5
  52. package/lib/cjs/server/index.js +1 -1
  53. package/lib/cjs/server/loaders/babel/creevey-plugin.js +1 -3
  54. package/lib/cjs/server/loaders/babel/helpers.js +13 -23
  55. package/lib/cjs/server/loaders/babel/register.js +2 -4
  56. package/lib/cjs/server/loaders/webpack/compile.js +34 -51
  57. package/lib/cjs/server/loaders/webpack/creevey-loader.js +20 -22
  58. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +2 -7
  59. package/lib/cjs/server/loaders/webpack/mdx-loader.js +2 -2
  60. package/lib/cjs/server/loaders/webpack/start.js +1 -1
  61. package/lib/cjs/server/logger.js +2 -1
  62. package/lib/cjs/server/master/index.js +2 -2
  63. package/lib/cjs/server/master/pool.js +9 -18
  64. package/lib/cjs/server/master/runner.js +53 -66
  65. package/lib/cjs/server/master/server.js +5 -3
  66. package/lib/cjs/server/messages.js +8 -10
  67. package/lib/cjs/server/selenium/browser.js +58 -70
  68. package/lib/cjs/server/selenium/selenoid.js +5 -7
  69. package/lib/cjs/server/stories.js +16 -33
  70. package/lib/cjs/server/storybook/entry.js +7 -22
  71. package/lib/cjs/server/storybook/helpers.js +21 -28
  72. package/lib/cjs/server/storybook/providers/browser.js +10 -14
  73. package/lib/cjs/server/storybook/providers/hybrid.js +17 -14
  74. package/lib/cjs/server/storybook/providers/nodejs.js +12 -12
  75. package/lib/cjs/server/{parser.js → testsFiles/parser.js} +1 -14
  76. package/lib/cjs/server/testsFiles/register.js +44 -0
  77. package/lib/cjs/server/update.js +1 -5
  78. package/lib/cjs/server/utils.js +27 -36
  79. package/lib/cjs/server/worker/reporter.js +8 -20
  80. package/lib/cjs/server/worker/worker.js +9 -19
  81. package/lib/cjs/shared/index.js +101 -0
  82. package/lib/cjs/shared/serializeRegExp.js +42 -0
  83. package/lib/cjs/types.js +7 -6
  84. package/lib/esm/client/addon/Manager.js +122 -270
  85. package/lib/esm/client/addon/components/Addon.js +15 -34
  86. package/lib/esm/client/addon/components/Icons.js +10 -6
  87. package/lib/esm/client/addon/components/Panel.js +17 -13
  88. package/lib/esm/client/addon/components/TestSelect.js +11 -9
  89. package/lib/esm/client/addon/components/Tools.js +20 -37
  90. package/lib/esm/client/addon/decorator.js +1 -1
  91. package/lib/esm/client/addon/index.js +2 -0
  92. package/lib/esm/client/addon/preset.ie11.js +59 -0
  93. package/lib/esm/client/addon/preset.js +4 -52
  94. package/lib/esm/client/addon/preset.sb7.js +8 -0
  95. package/lib/esm/client/addon/preview.js +5 -0
  96. package/lib/esm/client/addon/register.js +42 -66
  97. package/lib/esm/client/addon/utils.js +3 -2
  98. package/lib/esm/client/addon/withCreevey.js +156 -363
  99. package/lib/esm/client/shared/components/ImagesView/BlendView.js +21 -17
  100. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +21 -17
  101. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +40 -60
  102. package/lib/esm/client/shared/components/ImagesView/SlideView.js +33 -44
  103. package/lib/esm/client/shared/components/ImagesView/SwapView.js +22 -39
  104. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
  105. package/lib/esm/client/shared/components/PageFooter/Paging.js +14 -18
  106. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +22 -18
  107. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +37 -60
  108. package/lib/esm/client/shared/components/ResultsPage.js +36 -64
  109. package/lib/esm/client/shared/creeveyClientApi.js +57 -84
  110. package/lib/esm/client/shared/helpers.js +123 -194
  111. package/lib/esm/client/shared/viewMode.js +4 -4
  112. package/lib/esm/creevey.js +3 -5
  113. package/lib/esm/index.js +2 -4
  114. package/lib/esm/server/config.js +3 -5
  115. package/lib/esm/server/docker.js +2 -2
  116. package/lib/esm/server/extract.js +1 -3
  117. package/lib/esm/server/index.js +1 -1
  118. package/lib/esm/server/loaders/babel/creevey-plugin.js +1 -3
  119. package/lib/esm/server/loaders/babel/helpers.js +12 -22
  120. package/lib/esm/server/loaders/babel/register.js +3 -5
  121. package/lib/esm/server/loaders/webpack/compile.js +35 -52
  122. package/lib/esm/server/loaders/webpack/creevey-loader.js +9 -10
  123. package/lib/esm/server/loaders/webpack/dummy-hmr.js +2 -6
  124. package/lib/esm/server/loaders/webpack/mdx-loader.js +2 -2
  125. package/lib/esm/server/loaders/webpack/start.js +1 -1
  126. package/lib/esm/server/master/index.js +2 -2
  127. package/lib/esm/server/master/pool.js +7 -18
  128. package/lib/esm/server/master/runner.js +53 -66
  129. package/lib/esm/server/master/server.js +5 -3
  130. package/lib/esm/server/messages.js +3 -5
  131. package/lib/esm/server/selenium/browser.js +54 -66
  132. package/lib/esm/server/selenium/selenoid.js +4 -6
  133. package/lib/esm/server/stories.js +16 -32
  134. package/lib/esm/server/storybook/entry.js +5 -22
  135. package/lib/esm/server/storybook/helpers.js +12 -21
  136. package/lib/esm/server/storybook/providers/browser.js +6 -9
  137. package/lib/esm/server/storybook/providers/hybrid.js +10 -13
  138. package/lib/esm/server/storybook/providers/nodejs.js +10 -11
  139. package/lib/esm/server/{parser.js → testsFiles/parser.js} +1 -14
  140. package/lib/esm/server/testsFiles/register.js +31 -0
  141. package/lib/esm/server/update.js +1 -5
  142. package/lib/esm/server/utils.js +18 -31
  143. package/lib/esm/server/worker/reporter.js +8 -20
  144. package/lib/esm/server/worker/worker.js +9 -19
  145. package/lib/esm/shared/index.js +78 -0
  146. package/lib/esm/shared/serializeRegExp.js +24 -0
  147. package/lib/esm/types.js +1 -0
  148. package/lib/types/client/addon/Manager.d.ts +2 -2
  149. package/lib/types/client/addon/components/TestSelect.d.ts +0 -1
  150. package/lib/types/client/addon/index.d.ts +2 -0
  151. package/lib/types/client/addon/preset.d.ts +0 -22
  152. package/lib/types/client/addon/preset.ie11.d.ts +10 -0
  153. package/lib/types/client/addon/preset.sb7.d.ts +2 -0
  154. package/lib/types/client/addon/preview.d.ts +4 -0
  155. package/lib/types/client/addon/utils.d.ts +1 -0
  156. package/lib/types/client/addon/withCreevey.d.ts +1 -1
  157. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +1 -1
  158. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +0 -1
  159. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +1 -1
  160. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +1 -1
  161. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +1 -1
  162. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +0 -1
  163. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +0 -1
  164. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +1 -1
  165. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +0 -1
  166. package/lib/types/client/shared/components/ResultsPage.d.ts +1 -1
  167. package/lib/types/client/web/CreeveyApp.d.ts +0 -1
  168. package/lib/types/client/web/CreeveyLoader.d.ts +1 -2
  169. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +1 -1
  170. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +0 -1
  171. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +4 -4
  172. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +0 -1
  173. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +1 -1
  174. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +1 -1
  175. package/lib/types/index.d.ts +4 -2
  176. package/lib/types/server/config.d.ts +1 -1
  177. package/lib/types/server/loaders/babel/register.d.ts +1 -1
  178. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +4 -2
  179. package/lib/types/server/logger.d.ts +6 -2
  180. package/lib/types/server/messages.d.ts +13 -12
  181. package/lib/types/server/selenium/browser.d.ts +5 -3
  182. package/lib/types/server/storybook/entry.d.ts +2 -3
  183. package/lib/types/server/storybook/helpers.d.ts +1 -1
  184. package/lib/types/server/storybook/providers/browser.d.ts +2 -4
  185. package/lib/types/server/storybook/providers/hybrid.d.ts +2 -4
  186. package/lib/types/server/storybook/providers/nodejs.d.ts +3 -3
  187. package/lib/types/server/{parser.d.ts → testsFiles/parser.d.ts} +1 -1
  188. package/lib/types/server/testsFiles/register.d.ts +2 -0
  189. package/lib/types/server/utils.d.ts +5 -1
  190. package/lib/types/{shared.d.ts → shared/index.d.ts} +1 -10
  191. package/lib/types/shared/serializeRegExp.d.ts +9 -0
  192. package/lib/types/types.d.ts +7 -9
  193. package/package.json +119 -102
  194. package/preset/ie11.js +5 -0
  195. package/{preset.js → preset/index.js} +2 -2
  196. package/preset/sb7.js +5 -0
  197. package/types/global.d.ts +5 -0
  198. package/types/mdx.d.ts +3 -2
  199. package/lib/cjs/client/web/1.js +0 -13
  200. package/lib/cjs/client/web/2.js +0 -1
  201. package/lib/cjs/shared.js +0 -107
  202. package/lib/esm/shared.js +0 -76
  203. package/storybook-static/stories.json +0 -21
@@ -1,90 +1,44 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
-
3
- 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."); }
4
-
5
- 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; }
6
-
7
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
-
9
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
10
-
11
- 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."); }
12
-
13
- 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); }
14
-
15
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
16
-
17
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
18
-
19
- 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; }
20
-
21
- 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); } }
22
-
23
- 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); }); }; }
24
-
25
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
26
-
27
1
  import * as Events from '@storybook/core-events';
28
2
  import * as polyfill from 'event-source-polyfill';
29
- import { buildQueries, within } from '@storybook/testing-library';
3
+ // import { buildQueries, within } from '@storybook/testing-library';
30
4
  import { addons, makeDecorator } from '@storybook/addons';
31
5
  import { isObject, noop } from '../../types';
32
6
  import { denormalizeStoryParameters, serializeRawStories } from '../../shared';
33
- import { getConnectionUrl } from '../shared/helpers';
7
+ import { getConnectionUrl } from '../shared/helpers'; // import { isInternetExplorer } from './utils';
34
8
 
35
- if ((typeof process === "undefined" ? "undefined" : _typeof(process)) != 'object' || typeof process.version != 'string') {
9
+ if (typeof process != 'object' || typeof process.version != 'string') {
36
10
  // NOTE If you don't use babel-polyfill or any other polyfills that add EventSource for IE11
37
11
  // You don't get hot reload in IE11. So put polyfill for that to better UX
38
12
  // Don't load in nodejs environment
39
13
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
40
- var NativeEventSource = polyfill.NativeEventSource,
41
- EventSourcePolyfill = polyfill.EventSourcePolyfill; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
14
+ const {
15
+ NativeEventSource,
16
+ EventSourcePolyfill
17
+ } = polyfill; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
42
18
 
43
19
  window.EventSource = NativeEventSource || EventSourcePolyfill;
44
20
  }
45
21
 
46
- var disableAnimationsStyles = "\n*,\n*:hover,\n*::before,\n*::after {\n animation-delay: -0.0001ms !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n cursor: none !important;\n caret-color: transparent !important;\n transition: 0s !important;\n}\n";
47
-
48
- function resetCurrentStory(_x) {
49
- return _resetCurrentStory.apply(this, arguments);
50
- }
22
+ const disableAnimationsStyles = "\n*,\n*:hover,\n*::before,\n*::after {\n animation-delay: -0.0001ms !important;\n animation-duration: 0s !important;\n animation-play-state: paused !important;\n cursor: none !important;\n caret-color: transparent !important;\n transition: 0s !important;\n}\n";
51
23
 
52
- function _resetCurrentStory() {
53
- _resetCurrentStory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(channel) {
54
- return regeneratorRuntime.wrap(function _callee4$(_context4) {
55
- while (1) {
56
- switch (_context4.prev = _context4.next) {
57
- case 0:
58
- setTimeout(function () {
59
- return channel.emit(Events.SET_CURRENT_STORY, {
60
- storyId: true,
61
- name: '',
62
- kind: ''
63
- });
64
- }, 0);
65
- return _context4.abrupt("return", new Promise(function (resolve) {
66
- return channel.once(Events.STORY_MISSING, resolve);
67
- }));
68
-
69
- case 2:
70
- case "end":
71
- return _context4.stop();
72
- }
73
- }
74
- }, _callee4);
75
- }));
76
- return _resetCurrentStory.apply(this, arguments);
24
+ async function resetCurrentStory(channel) {
25
+ setTimeout(() => channel.emit(Events.SET_CURRENT_STORY, {
26
+ storyId: true,
27
+ name: '',
28
+ kind: ''
29
+ }), 0);
30
+ return new Promise(resolve => channel.once(Events.STORY_MISSING, resolve));
77
31
  }
78
32
 
79
33
  function catchRenderError(channel) {
80
- var rejectCallback;
81
- var promise = new Promise(function (_resolve, reject) {
82
- return rejectCallback = reject;
83
- });
34
+ let rejectCallback;
35
+ const promise = new Promise((_resolve, reject) => rejectCallback = reject);
84
36
 
85
37
  function errorHandler(_ref) {
86
- var title = _ref.title,
87
- description = _ref.description;
38
+ let {
39
+ title,
40
+ description
41
+ } = _ref;
88
42
  rejectCallback({
89
43
  message: title,
90
44
  stack: description
@@ -108,10 +62,8 @@ function catchRenderError(channel) {
108
62
  }
109
63
 
110
64
  function waitForStoryRendered(channel) {
111
- var resolveCallback;
112
- var promise = new Promise(function (resolve) {
113
- return resolveCallback = resolve;
114
- });
65
+ let resolveCallback;
66
+ const promise = new Promise(resolve => resolveCallback = resolve);
115
67
 
116
68
  function renderHandler() {
117
69
  resolveCallback();
@@ -129,13 +81,11 @@ function waitForStoryRendered(channel) {
129
81
 
130
82
  function waitForFontsLoaded() {
131
83
  if (!document.fonts) return;
132
- var areFontsLoading = Array.from(document.fonts).some(function (font) {
133
- return font.status == 'loading';
134
- });
84
+ const areFontsLoading = Array.from(document.fonts).some(font => font.status == 'loading');
135
85
 
136
86
  if (areFontsLoading) {
137
- return new Promise(function (resolve) {
138
- var fontsLoadedHandler = function fontsLoadedHandler() {
87
+ return new Promise(resolve => {
88
+ const fontsLoadedHandler = () => {
139
89
  document.fonts.removeEventListener('loadingdone', fontsLoadedHandler);
140
90
  resolve();
141
91
  };
@@ -146,244 +96,128 @@ function waitForFontsLoaded() {
146
96
  }
147
97
 
148
98
  function waitForCaptureCall() {
149
- return new Promise(function (resolve) {
150
- return captureResolver = resolve;
151
- });
99
+ return new Promise(resolve => captureResolver = resolve);
152
100
  }
153
101
 
154
102
  function initCreeveyState() {
155
103
  var _window$localStorage$;
156
104
 
157
- var prevState = JSON.parse((_window$localStorage$ = window.localStorage.getItem('Creevey_Tests')) !== null && _window$localStorage$ !== void 0 ? _window$localStorage$ : '{}');
105
+ const prevState = JSON.parse((_window$localStorage$ = window.localStorage.getItem('Creevey_Tests')) !== null && _window$localStorage$ !== void 0 ? _window$localStorage$ : '{}');
158
106
  if (prevState.creeveyHost) window.__CREEVEY_SERVER_HOST__ = prevState.creeveyHost;
159
107
  if (prevState.creeveyPort) window.__CREEVEY_SERVER_PORT__ = prevState.creeveyPort;
160
108
  if (prevState.setStoriesCounter) setStoriesCounter = prevState.setStoriesCounter;
161
109
  if (prevState.isTestBrowser) isTestBrowser = prevState.isTestBrowser;
162
- window.addEventListener('beforeunload', function () {
110
+ window.addEventListener('beforeunload', () => {
163
111
  window.localStorage.setItem('Creevey_Tests', JSON.stringify({
164
112
  creeveyHost: window.__CREEVEY_SERVER_HOST__,
165
113
  creeveyPort: window.__CREEVEY_SERVER_PORT__,
166
- setStoriesCounter: setStoriesCounter,
167
- isTestBrowser: isTestBrowser
114
+ setStoriesCounter,
115
+ isTestBrowser
168
116
  }));
169
117
  });
170
118
  }
171
119
 
172
- var isTestBrowser = false;
173
- var captureResolver;
174
- var waitForCreevey;
175
- var creeveyReady;
176
- var setStoriesCounter = 0;
120
+ let isTestBrowser = false;
121
+ let captureResolver;
122
+ let waitForCreevey;
123
+ let creeveyReady;
124
+ let setStoriesCounter = 0;
177
125
  export function withCreevey() {
178
- var currentStory = '';
179
- var isAnimationDisabled = false;
126
+ let currentStory = '';
127
+ let isAnimationDisabled = false;
180
128
  initCreeveyState();
181
129
 
182
130
  function disableAnimation() {
183
131
  isAnimationDisabled = true;
184
- var style = document.createElement('style');
185
- var textNode = document.createTextNode(disableAnimationsStyles);
132
+ const style = document.createElement('style');
133
+ const textNode = document.createTextNode(disableAnimationsStyles);
186
134
  style.setAttribute('type', 'text/css');
187
135
  style.appendChild(textNode);
188
136
  document.head.appendChild(style);
189
137
  }
190
138
 
191
- function getStories() {
192
- return _getStories.apply(this, arguments);
193
- }
194
-
195
- function _getStories() {
196
- _getStories = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
197
- var _window$__STORYBOOK_S;
198
-
199
- var storiesPromise, store;
200
- return regeneratorRuntime.wrap(function _callee$(_context) {
201
- while (1) {
202
- switch (_context.prev = _context.next) {
203
- case 0:
204
- storiesPromise = new Promise(function (resolve) {
205
- return addons.getChannel().once(Events.SET_STORIES, function (data) {
206
- return resolve(serializeRawStories(denormalizeStoryParameters(data)));
207
- });
208
- });
209
- 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
210
-
211
- if (!store.pushToManager) {
212
- _context.next = 6;
213
- break;
214
- }
215
-
216
- // @ts-expect-error `pushToManager` exists only in Storybook 6.0 - 6.3
217
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
218
- store.pushToManager();
219
- _context.next = 13;
220
- break;
221
-
222
- case 6:
223
- if (!store.cacheAllCSFFiles) {
224
- _context.next = 12;
225
- break;
226
- }
227
-
228
- _context.next = 9;
229
- return store.cacheAllCSFFiles();
230
-
231
- case 9:
232
- addons.getChannel().emit(Events.SET_STORIES, store.getSetStoriesPayload());
233
- _context.next = 13;
234
- break;
235
-
236
- case 12:
237
- return _context.abrupt("return");
238
-
239
- case 13:
240
- addons.getChannel().on(Events.SET_STORIES, function (data) {
241
- // TODO Figure out how to get only updated stories
242
- // TODO Subscribe on hmr? like use dummy-hmr
243
- setStoriesCounter += 1;
244
- var stories = serializeRawStories(denormalizeStoryParameters(data));
245
- var storiesByFiles = new Map();
246
- Object.values(stories).forEach(function (story) {
247
- var storiesFromFile = storiesByFiles.get(story.parameters.fileName);
248
- if (storiesFromFile) storiesFromFile.push(story);else storiesByFiles.set(story.parameters.fileName, [story]);
249
- });
250
- void fetch("http://".concat(getConnectionUrl(), "/stories"), {
251
- method: 'POST',
252
- headers: {
253
- 'Content-Type': 'application/json'
254
- },
255
- body: JSON.stringify({
256
- setStoriesCounter: setStoriesCounter,
257
- stories: _toConsumableArray(storiesByFiles.entries())
258
- })
259
- });
260
- });
261
- return _context.abrupt("return", storiesPromise);
262
-
263
- case 15:
264
- case "end":
265
- return _context.stop();
266
- }
267
- }
268
- }, _callee);
269
- }));
270
- return _getStories.apply(this, arguments);
271
- }
272
-
273
- function selectStory(_x2, _x3, _x4, _x5, _x6) {
274
- return _selectStory.apply(this, arguments);
139
+ async function getStories() {
140
+ var _window$__STORYBOOK_S;
141
+
142
+ const storiesPromise = new Promise(resolve => addons.getChannel().once(Events.SET_STORIES, data => resolve(serializeRawStories(denormalizeStoryParameters(data)))));
143
+ const store = (_window$__STORYBOOK_S = window.__STORYBOOK_STORY_STORE__) !== null && _window$__STORYBOOK_S !== void 0 ? _window$__STORYBOOK_S : {};
144
+
145
+ if (store.cacheAllCSFFiles) {
146
+ await store.cacheAllCSFFiles();
147
+ addons.getChannel().emit(Events.SET_STORIES, store.getSetStoriesPayload());
148
+ } else return;
149
+
150
+ addons.getChannel().on(Events.SET_STORIES, data => {
151
+ // TODO Figure out how to get only updated stories
152
+ // TODO Subscribe on hmr? like use dummy-hmr
153
+ setStoriesCounter += 1;
154
+ const stories = serializeRawStories(denormalizeStoryParameters(data));
155
+ const storiesByFiles = new Map();
156
+ Object.values(stories).forEach(story => {
157
+ const storiesFromFile = storiesByFiles.get(story.parameters.fileName);
158
+ if (storiesFromFile) storiesFromFile.push(story);else storiesByFiles.set(story.parameters.fileName, [story]);
159
+ });
160
+ void fetch("http://".concat(getConnectionUrl(), "/stories"), {
161
+ method: 'POST',
162
+ headers: {
163
+ 'Content-Type': 'application/json'
164
+ },
165
+ body: JSON.stringify({
166
+ setStoriesCounter,
167
+ stories: [...storiesByFiles.entries()]
168
+ })
169
+ });
170
+ });
171
+ return storiesPromise;
275
172
  }
276
173
 
277
- function _selectStory() {
278
- _selectStory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(storyId, kind, name, shouldWaitForReady, callback) {
279
- var channel, waitForReady, isCaptureCalled, renderPromise, errorPromise, capturePromise, _reason$stack, errorMessage;
280
-
281
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
282
- while (1) {
283
- switch (_context3.prev = _context3.next) {
284
- case 0:
285
- if (!isAnimationDisabled) disableAnimation();
286
- isTestBrowser = true;
287
- channel = addons.getChannel();
288
- waitForReady = shouldWaitForReady ? new Promise(function (resolve) {
289
- return window.__CREEVEY_SET_READY_FOR_CAPTURE__ = resolve;
290
- }) : Promise.resolve();
291
-
292
- if (!(storyId == currentStory)) {
293
- _context3.next = 9;
294
- break;
295
- }
296
-
297
- _context3.next = 7;
298
- return resetCurrentStory(channel);
299
-
300
- case 7:
301
- _context3.next = 10;
302
- break;
303
-
304
- case 9:
305
- currentStory = storyId;
306
-
307
- case 10:
308
- isCaptureCalled = false;
309
- renderPromise = waitForStoryRendered(channel);
310
- errorPromise = catchRenderError(channel);
311
- capturePromise = waitForCaptureCall().then(function () {
312
- return isCaptureCalled = true;
313
- });
314
- setTimeout(function () {
315
- return channel.emit(Events.SET_CURRENT_STORY, {
316
- storyId: storyId,
317
- name: name,
318
- kind: kind
319
- });
320
- }, 0);
321
- _context3.prev = 15;
322
- _context3.next = 18;
323
- return Promise.race([_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
324
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
325
- while (1) {
326
- switch (_context2.prev = _context2.next) {
327
- case 0:
328
- _context2.next = 2;
329
- return Promise.race([renderPromise, capturePromise]);
330
-
331
- case 2:
332
- _context2.next = 4;
333
- return waitForFontsLoaded();
334
-
335
- case 4:
336
- _context2.next = 6;
337
- return waitForReady;
338
-
339
- case 6:
340
- case "end":
341
- return _context2.stop();
342
- }
343
- }
344
- }, _callee2);
345
- }))(), errorPromise]);
346
-
347
- case 18:
348
- callback([null, isCaptureCalled]);
349
- _context3.next = 25;
350
- break;
351
-
352
- case 21:
353
- _context3.prev = 21;
354
- _context3.t0 = _context3["catch"](15);
355
- // NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
356
- // NOTE Event `STORY_ERRORED` return error-like object without `name` field
357
- errorMessage = _context3.t0 instanceof Error ? (_reason$stack = _context3.t0.stack) !== null && _reason$stack !== void 0 ? _reason$stack : _context3.t0.message : isObject(_context3.t0) ? "".concat(_context3.t0.message, "\n ").concat(_context3.t0.stack) : _context3.t0;
358
- callback([errorMessage]);
359
-
360
- case 25:
361
- _context3.prev = 25;
362
- renderPromise.cancel();
363
- errorPromise.cancel();
364
- return _context3.finish(25);
365
-
366
- case 29:
367
- case "end":
368
- return _context3.stop();
369
- }
370
- }
371
- }, _callee3, null, [[15, 21, 25, 29]]);
372
- }));
373
- return _selectStory.apply(this, arguments);
174
+ async function selectStory(storyId, kind, name, shouldWaitForReady, callback) {
175
+ if (!isAnimationDisabled) disableAnimation();
176
+ isTestBrowser = true;
177
+ const channel = addons.getChannel();
178
+ const waitForReady = shouldWaitForReady ? new Promise(resolve => window.__CREEVEY_SET_READY_FOR_CAPTURE__ = resolve) : Promise.resolve();
179
+ if (storyId == currentStory) await resetCurrentStory(channel);else currentStory = storyId;
180
+ let isCaptureCalled = false;
181
+ const renderPromise = waitForStoryRendered(channel);
182
+ const errorPromise = catchRenderError(channel);
183
+ const capturePromise = waitForCaptureCall().then(() => isCaptureCalled = true);
184
+ setTimeout(() => channel.emit(Events.SET_CURRENT_STORY, {
185
+ storyId,
186
+ name,
187
+ kind
188
+ }), 0);
189
+
190
+ try {
191
+ await Promise.race([(async () => {
192
+ await Promise.race([renderPromise, capturePromise]);
193
+ await waitForFontsLoaded();
194
+ await waitForReady;
195
+ })(), errorPromise]);
196
+ callback([null, isCaptureCalled]);
197
+ } catch (reason) {
198
+ var _reason$stack;
199
+
200
+ // NOTE Event `STORY_THREW_EXCEPTION` triggered only in react and vue frameworks and return Error instance
201
+ // NOTE Event `STORY_ERRORED` return error-like object without `name` field
202
+ const errorMessage = reason instanceof Error ? (_reason$stack = reason.stack) !== null && _reason$stack !== void 0 ? _reason$stack : reason.message : isObject(reason) ? "".concat(reason.message, "\n ").concat(reason.stack) : reason;
203
+ callback([errorMessage]);
204
+ } finally {
205
+ renderPromise.cancel();
206
+ errorPromise.cancel();
207
+ }
374
208
  }
375
209
 
376
210
  function updateGlobals(globals) {
377
211
  addons.getChannel().emit(Events.UPDATE_GLOBALS, {
378
- globals: globals
212
+ globals
379
213
  });
380
214
  }
381
215
 
382
216
  function insertIgnoreStyles(ignoreSelectors) {
383
- var stylesElement = document.createElement('style');
217
+ const stylesElement = document.createElement('style');
384
218
  stylesElement.setAttribute('type', 'text/css');
385
219
  document.head.appendChild(stylesElement);
386
- ignoreSelectors.forEach(function (selector) {
220
+ ignoreSelectors.forEach(selector => {
387
221
  stylesElement.innerHTML += "\n ".concat(selector, " {\n background: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n outline: 0 !important;\n color: rgba(0,0,0,0) !important;\n }\n ").concat(selector, " *, ").concat(selector, "::before, ").concat(selector, "::after {\n visibility: hidden !important;\n }\n ");
388
222
  });
389
223
  return stylesElement;
@@ -397,15 +231,15 @@ export function withCreevey() {
397
231
 
398
232
  function hasPlayCompletedYet(callback) {
399
233
  creeveyReady();
400
- var isCaptureCalled = false;
401
- var isPlayCompleted = false;
402
- var channel = addons.getChannel();
403
- void waitForStoryRendered(channel).then(function () {
234
+ let isCaptureCalled = false;
235
+ let isPlayCompleted = false;
236
+ const channel = addons.getChannel();
237
+ void waitForStoryRendered(channel).then(() => {
404
238
  if (isCaptureCalled) return;
405
239
  isPlayCompleted = true;
406
240
  callback(true);
407
241
  });
408
- void waitForCaptureCall().then(function () {
242
+ void waitForCaptureCall().then(() => {
409
243
  if (isPlayCompleted) return;
410
244
  isCaptureCalled = true;
411
245
  callback(false);
@@ -418,49 +252,35 @@ export function withCreevey() {
418
252
  window.__CREEVEY_INSERT_IGNORE_STYLES__ = insertIgnoreStyles;
419
253
  window.__CREEVEY_REMOVE_IGNORE_STYLES__ = removeIgnoreStyles;
420
254
  window.__CREEVEY_HAS_PLAY_COMPLETED_YET__ = hasPlayCompletedYet;
421
- window.__CREEVEY_SET_READY_FOR_CAPTURE__ = noop;
255
+ window.__CREEVEY_SET_READY_FOR_CAPTURE__ = noop; // const queryAllByQuery = (container: HTMLElement, query: string): HTMLElement[] =>
256
+ // [...container.querySelectorAll(query)].filter((e) => e instanceof HTMLElement) as HTMLElement[];
257
+ // const getMultipleError = (_: Element | null, query: string): string => `Found multiple elements by query: ${query}`;
258
+ // const getMissingError = (_: Element | null, query: string): string => `Unable to find an element by query: ${query}`;
259
+ // const [queryByQuery, getAllByQuery, getByQuery, findAllByQuery, findByQuery] = buildQueries(
260
+ // queryAllByQuery,
261
+ // getMultipleError,
262
+ // getMissingError,
263
+ // );
264
+ // const queries = {
265
+ // queryByQuery,
266
+ // getAllByQuery,
267
+ // getByQuery,
268
+ // findAllByQuery,
269
+ // findByQuery,
270
+ // };
422
271
 
423
- var queryAllByQuery = function queryAllByQuery(container, query) {
424
- return _toConsumableArray(container.querySelectorAll(query)).filter(function (e) {
425
- return e instanceof HTMLElement;
426
- });
427
- };
428
-
429
- var getMultipleError = function getMultipleError(_, query) {
430
- return "Found multiple elements by query: ".concat(query);
431
- };
432
-
433
- var getMissingError = function getMissingError(_, query) {
434
- return "Unable to find an element by query: ".concat(query);
435
- };
436
-
437
- var _buildQueries = buildQueries(queryAllByQuery, getMultipleError, getMissingError),
438
- _buildQueries2 = _slicedToArray(_buildQueries, 5),
439
- queryByQuery = _buildQueries2[0],
440
- getAllByQuery = _buildQueries2[1],
441
- getByQuery = _buildQueries2[2],
442
- findAllByQuery = _buildQueries2[3],
443
- findByQuery = _buildQueries2[4];
444
-
445
- var queries = {
446
- queryByQuery: queryByQuery,
447
- getAllByQuery: getAllByQuery,
448
- getByQuery: getByQuery,
449
- findAllByQuery: findAllByQuery,
450
- findByQuery: findByQuery
451
- };
452
272
  return makeDecorator({
453
273
  name: 'withCreevey',
454
274
  parameterName: 'creevey',
455
- wrapper: function wrapper(getStory, context) {
275
+ wrapper: (getStory, context) => {
456
276
  var _ref2;
457
277
 
458
278
  // TODO Define proper types, like captureElement is a promise
459
- var _context$parameters$c = context.parameters.creevey = (_ref2 = context.parameters.creevey) !== null && _ref2 !== void 0 ? _ref2 : {},
460
- captureElement = _context$parameters$c.captureElement;
461
-
279
+ const {
280
+ captureElement
281
+ } = context.parameters.creevey = (_ref2 = context.parameters.creevey) !== null && _ref2 !== void 0 ? _ref2 : {};
462
282
  Object.defineProperty(context.parameters.creevey, 'captureElement', {
463
- get: function get() {
283
+ get() {
464
284
  switch (true) {
465
285
  case captureElement === undefined:
466
286
  return Promise.resolve(context.canvasElement);
@@ -469,13 +289,17 @@ export function withCreevey() {
469
289
  return Promise.resolve(document.documentElement);
470
290
 
471
291
  case typeof captureElement == 'string':
472
- return within(context.canvasElement, queries).findByQuery(captureElement);
292
+ return Promise.resolve(context.canvasElement.querySelector(captureElement));
293
+ // return isInternetExplorer // some code from testing-library makes IE hang
294
+ // ? Promise.resolve(context.canvasElement.querySelector(captureElement as string))
295
+ // : within<typeof queries>(context.canvasElement, queries).findByQuery(captureElement as string);
473
296
 
474
297
  case typeof captureElement == 'function':
475
298
  // TODO Define type for it
476
299
  return Promise.resolve(captureElement(context));
477
300
  }
478
301
  },
302
+
479
303
  enumerable: true,
480
304
  configurable: true
481
305
  });
@@ -483,50 +307,19 @@ export function withCreevey() {
483
307
  }
484
308
  });
485
309
  }
486
- export function capture(_x7) {
487
- return _capture.apply(this, arguments);
488
- }
489
-
490
- function _capture() {
491
- _capture = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(options) {
492
- return regeneratorRuntime.wrap(function _callee5$(_context5) {
493
- while (1) {
494
- switch (_context5.prev = _context5.next) {
495
- case 0:
496
- if (isTestBrowser) {
497
- _context5.next = 2;
498
- break;
499
- }
500
-
501
- return _context5.abrupt("return");
502
-
503
- case 2:
504
- captureResolver();
505
- waitForCreevey = new Promise(function (resolve) {
506
- return creeveyReady = resolve;
507
- });
508
- _context5.next = 6;
509
- return fetch("http://".concat(getConnectionUrl(), "/capture"), {
510
- method: 'POST',
511
- headers: {
512
- 'Content-Type': 'application/json'
513
- },
514
- body: JSON.stringify({
515
- workerId: window.__CREEVEY_WORKER_ID__,
516
- options: options
517
- })
518
- });
519
-
520
- case 6:
521
- _context5.next = 8;
522
- return waitForCreevey;
523
-
524
- case 8:
525
- case "end":
526
- return _context5.stop();
527
- }
528
- }
529
- }, _callee5);
530
- }));
531
- return _capture.apply(this, arguments);
310
+ export async function capture(options) {
311
+ if (!isTestBrowser) return;
312
+ captureResolver();
313
+ waitForCreevey = new Promise(resolve => creeveyReady = resolve);
314
+ await fetch("http://".concat(getConnectionUrl(), "/capture"), {
315
+ method: 'POST',
316
+ headers: {
317
+ 'Content-Type': 'application/json'
318
+ },
319
+ body: JSON.stringify({
320
+ workerId: window.__CREEVEY_WORKER_ID__,
321
+ options
322
+ })
323
+ });
324
+ await waitForCreevey;
532
325
  }