creevey 0.9.0-beta.2 → 0.9.0-beta.20

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