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
@@ -1,41 +1,12 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
-
3
- 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; }
4
-
5
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
6
-
7
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
8
-
9
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
10
-
11
- function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
12
-
13
- 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."); }
14
-
15
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
16
-
17
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
18
-
19
- 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."); }
20
-
21
- 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); }
22
-
23
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
24
-
25
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
26
-
27
- 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; }
28
-
29
1
  import { themes } from '@storybook/theming';
30
2
  import { parse, stringify } from 'qs';
31
3
  import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
32
4
  import { isTest, isDefined } from '../../types';
33
- var statusUpdatesMap = new Map([[undefined, /(unknown|success|failed|pending|running)/], ['unknown', /(success|failed|pending|running)/], ['success', /(failed|pending|running)/], ['failed', /(pending|running)/], ['pending', /running/]]);
34
-
5
+ const statusUpdatesMap = new Map([[undefined, /(unknown|success|failed|pending|running)/], ['unknown', /(success|failed|pending|running)/], ['success', /(failed|pending|running)/], ['failed', /(pending|running)/], ['pending', /running/]]);
35
6
  function makeEmptySuiteNode() {
36
- var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
7
+ let path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
37
8
  return {
38
- path: path,
9
+ path,
39
10
  skip: true,
40
11
  opened: false,
41
12
  checked: true,
@@ -43,199 +14,167 @@ function makeEmptySuiteNode() {
43
14
  children: {}
44
15
  };
45
16
  }
46
-
47
17
  export function calcStatus(oldStatus, newStatus) {
48
- var _statusUpdatesMap$get;
49
-
50
- return newStatus && (_statusUpdatesMap$get = statusUpdatesMap.get(oldStatus)) !== null && _statusUpdatesMap$get !== void 0 && _statusUpdatesMap$get.test(newStatus) ? newStatus : oldStatus;
18
+ return newStatus && statusUpdatesMap.get(oldStatus)?.test(newStatus) ? newStatus : oldStatus;
51
19
  }
52
20
  export function getTestPath(test) {
53
- var browser = test.browser,
54
- testName = test.testName,
55
- storyPath = test.storyPath;
56
- return [].concat(_toConsumableArray(storyPath), [testName, browser]).filter(isDefined);
21
+ const {
22
+ browser,
23
+ testName,
24
+ storyPath
25
+ } = test;
26
+ return [...storyPath, testName, browser].filter(isDefined);
57
27
  }
58
28
  export function getSuiteByPath(suite, path) {
59
- return path.reduce(function (suiteOrTest, pathToken) {
60
- return isTest(suiteOrTest) ? suiteOrTest : suiteOrTest === null || suiteOrTest === void 0 ? void 0 : suiteOrTest.children[pathToken];
61
- }, suite);
29
+ return path.reduce((suiteOrTest, pathToken) => isTest(suiteOrTest) ? suiteOrTest : suiteOrTest?.children[pathToken], suite);
62
30
  }
63
31
  export function getTestByPath(suite, path) {
64
- var _getSuiteByPath;
65
-
66
- var test = (_getSuiteByPath = getSuiteByPath(suite, path)) !== null && _getSuiteByPath !== void 0 ? _getSuiteByPath : suite;
32
+ const test = getSuiteByPath(suite, path) ?? suite;
67
33
  return isTest(test) ? test : null;
68
34
  }
69
35
  export function getTestsByStoryId(suite, storyId) {
70
- return Object.values(suite.children).filter(isDefined).flatMap(function (suiteOrTest) {
36
+ return Object.values(suite.children).filter(isDefined).flatMap(suiteOrTest => {
71
37
  if (isTest(suiteOrTest)) return suiteOrTest.storyId === storyId ? suiteOrTest : [];
72
38
  return getTestsByStoryId(suiteOrTest, storyId);
73
39
  }).filter(isDefined);
74
40
  }
75
-
76
41
  function checkTests(suiteOrTest, checked) {
77
42
  suiteOrTest.checked = checked;
78
-
79
43
  if (!isTest(suiteOrTest)) {
80
44
  suiteOrTest.indeterminate = false;
81
- Object.values(suiteOrTest.children).filter(isDefined).forEach(function (child) {
82
- return checkTests(child, checked);
83
- });
45
+ Object.values(suiteOrTest.children).filter(isDefined).forEach(child => checkTests(child, checked));
84
46
  }
85
47
  }
86
-
87
48
  function updateChecked(suite) {
88
- var children = Object.values(suite.children).filter(isDefined).filter(function (child) {
89
- return !child.skip;
90
- });
91
- var checkedEvery = children.every(function (test) {
92
- return test.checked;
93
- });
94
- var checkedSome = children.some(function (test) {
95
- return test.checked;
96
- });
97
- var indeterminate = children.some(function (test) {
98
- return isTest(test) ? false : test.indeterminate;
99
- }) || !checkedEvery && checkedSome;
100
- var checked = indeterminate || suite.checked == checkedEvery ? suite.checked : checkedEvery;
49
+ const children = Object.values(suite.children).filter(isDefined).filter(child => !child.skip);
50
+ const checkedEvery = children.every(test => test.checked);
51
+ const checkedSome = children.some(test => test.checked);
52
+ const indeterminate = children.some(test => isTest(test) ? false : test.indeterminate) || !checkedEvery && checkedSome;
53
+ const checked = indeterminate || suite.checked == checkedEvery ? suite.checked : checkedEvery;
101
54
  suite.checked = checked;
102
55
  suite.indeterminate = indeterminate;
103
56
  }
104
-
105
57
  export function checkSuite(suite, path, checked) {
106
- var subSuite = getSuiteByPath(suite, path);
58
+ const subSuite = getSuiteByPath(suite, path);
107
59
  if (subSuite) checkTests(subSuite, checked);
108
- path.slice(0, -1).map(function (_, index, tokens) {
109
- return tokens.slice(0, tokens.length - index);
110
- }).forEach(function (parentPath) {
111
- var parentSuite = getSuiteByPath(suite, parentPath);
60
+ path.slice(0, -1).map((_, index, tokens) => tokens.slice(0, tokens.length - index)).forEach(parentPath => {
61
+ const parentSuite = getSuiteByPath(suite, parentPath);
112
62
  if (isTest(parentSuite)) return;
113
63
  if (parentSuite) updateChecked(parentSuite);
114
64
  });
115
65
  updateChecked(suite);
116
66
  }
117
67
  export function treeifyTests(testsById) {
118
- var rootSuite = makeEmptySuiteNode();
68
+ const rootSuite = makeEmptySuiteNode();
119
69
  rootSuite.opened = true;
120
- Object.values(testsById).forEach(function (test) {
70
+ Object.values(testsById).forEach(test => {
121
71
  if (!test) return;
122
-
123
- var _getTestPath$reverse = getTestPath(test).reverse(),
124
- _getTestPath$reverse2 = _toArray(_getTestPath$reverse),
125
- browser = _getTestPath$reverse2[0],
126
- testPath = _getTestPath$reverse2.slice(1);
127
-
128
- var lastSuite = testPath.reverse().reduce(function (suite, token) {
129
- var subSuite = suite.children[token] || makeEmptySuiteNode([].concat(_toConsumableArray(suite.path), [token]));
72
+ const [browser, ...testPath] = getTestPath(test).reverse();
73
+ const lastSuite = testPath.reverse().reduce((suite, token) => {
74
+ const subSuite = suite.children[token] || makeEmptySuiteNode([...suite.path, token]);
130
75
  subSuite.status = calcStatus(subSuite.status, test.status);
131
76
  if (!test.skip) subSuite.skip = false;
132
77
  if (!subSuite.skip) suite.skip = false;
133
78
  suite.children[token] = subSuite;
134
79
  suite.status = calcStatus(suite.status, subSuite.status);
135
-
136
80
  if (isTest(subSuite)) {
137
- throw new Error("Suite and Test should not have same path '".concat(JSON.stringify(getTestPath(subSuite)), "'"));
81
+ throw new Error(`Suite and Test should not have same path '${JSON.stringify(getTestPath(subSuite))}'`);
138
82
  }
139
-
140
83
  return subSuite;
141
84
  }, rootSuite);
142
- lastSuite.children[browser] = _objectSpread(_objectSpread({}, test), {}, {
85
+ lastSuite.children[browser] = {
86
+ ...test,
143
87
  checked: true
144
- });
88
+ };
145
89
  });
146
90
  return rootSuite;
147
91
  }
148
92
  export function getCheckedTests(suite) {
149
- return Object.values(suite.children).filter(isDefined).flatMap(function (suiteOrTest) {
93
+ return Object.values(suite.children).filter(isDefined).flatMap(suiteOrTest => {
150
94
  if (isTest(suiteOrTest)) return suiteOrTest.checked ? suiteOrTest : [];
151
95
  if (!suiteOrTest.checked && !suiteOrTest.indeterminate) return [];
152
96
  return getCheckedTests(suiteOrTest);
153
97
  });
154
98
  }
155
99
  export function updateTestStatus(suite, path, update) {
156
- var _suite$children$title;
157
-
158
- var title = path.shift();
100
+ const title = path.shift();
159
101
  if (!title) return;
160
- var suiteOrTest = (_suite$children$title = suite.children[title]) !== null && _suite$children$title !== void 0 ? _suite$children$title : suite.children[title] = _objectSpread(_objectSpread({}, path.length == 0 ? update : makeEmptySuiteNode([].concat(_toConsumableArray(suite.path), [title]))), {}, {
102
+ const suiteOrTest = suite.children[title] ?? (suite.children[title] = {
103
+ ...(path.length == 0 ? update : makeEmptySuiteNode([...suite.path, title])),
161
104
  checked: suite.checked
162
105
  });
163
-
164
106
  if (isTest(suiteOrTest)) {
165
- var _test$results;
166
-
167
- var test = suiteOrTest;
168
- var skip = update.skip,
169
- status = update.status,
170
- results = update.results,
171
- approved = update.approved;
107
+ const test = suiteOrTest;
108
+ const {
109
+ skip,
110
+ status,
111
+ results,
112
+ approved
113
+ } = update;
172
114
  if (isDefined(skip)) test.skip = skip;
173
115
  if (isDefined(status)) test.status = status;
174
- if (isDefined(results)) test.results ? (_test$results = test.results).push.apply(_test$results, _toConsumableArray(results)) : test.results = results;
175
- if (isDefined(approved)) Object.entries(approved).forEach(function (_ref) {
176
- var _ref2 = _slicedToArray(_ref, 2),
177
- image = _ref2[0],
178
- retry = _ref2[1];
179
-
116
+ if (isDefined(results)) test.results ? test.results.push(...results) : test.results = results;
117
+ if (isDefined(approved)) Object.entries(approved).forEach(_ref => {
118
+ let [image, retry] = _ref;
180
119
  return retry !== undefined && ((test.approved = test.approved || {})[image] = retry);
181
120
  });
182
121
  } else {
183
- var subSuite = suiteOrTest;
122
+ const subSuite = suiteOrTest;
184
123
  updateTestStatus(subSuite, path, update);
185
124
  }
186
-
187
- suite.skip = Object.values(suite.children).filter(isDefined).map(function (_ref3) {
188
- var skip = _ref3.skip;
125
+ suite.skip = Object.values(suite.children).filter(isDefined).map(_ref2 => {
126
+ let {
127
+ skip
128
+ } = _ref2;
189
129
  return skip;
190
130
  }).every(Boolean);
191
- suite.status = Object.values(suite.children).filter(isDefined).map(function (_ref4) {
192
- var status = _ref4.status;
131
+ suite.status = Object.values(suite.children).filter(isDefined).map(_ref3 => {
132
+ let {
133
+ status
134
+ } = _ref3;
193
135
  return status;
194
136
  }).reduce(calcStatus);
195
137
  }
196
138
  export function removeTests(suite, path) {
197
- var _suiteOrTest$children;
198
-
199
- var title = path.shift();
139
+ const title = path.shift();
200
140
  if (!title) return;
201
- var suiteOrTest = suite.children[title];
141
+ const suiteOrTest = suite.children[title];
202
142
  if (suiteOrTest && !isTest(suiteOrTest)) removeTests(suiteOrTest, path);
203
- if (isTest(suiteOrTest) || Object.keys((_suiteOrTest$children = suiteOrTest === null || suiteOrTest === void 0 ? void 0 : suiteOrTest.children) !== null && _suiteOrTest$children !== void 0 ? _suiteOrTest$children : {}).length == 0) delete suite.children[title];
143
+ if (isTest(suiteOrTest) || Object.keys(suiteOrTest?.children ?? {}).length == 0) delete suite.children[title];
204
144
  if (Object.keys(suite.children).length == 0) return;
205
145
  updateChecked(suite);
206
- suite.skip = Object.values(suite.children).filter(isDefined).map(function (_ref5) {
207
- var skip = _ref5.skip;
146
+ suite.skip = Object.values(suite.children).filter(isDefined).map(_ref4 => {
147
+ let {
148
+ skip
149
+ } = _ref4;
208
150
  return skip;
209
151
  }).every(Boolean);
210
- suite.status = Object.values(suite.children).filter(isDefined).map(function (_ref6) {
211
- var status = _ref6.status;
152
+ suite.status = Object.values(suite.children).filter(isDefined).map(_ref5 => {
153
+ let {
154
+ status
155
+ } = _ref5;
212
156
  return status;
213
157
  }).reduce(calcStatus);
214
158
  }
215
159
  export function filterTests(suite, filter) {
216
- var status = filter.status,
217
- subStrings = filter.subStrings;
160
+ const {
161
+ status,
162
+ subStrings
163
+ } = filter;
218
164
  if (!status && !subStrings.length) return suite;
219
-
220
- var filteredSuite = _objectSpread(_objectSpread({}, suite), {}, {
165
+ const filteredSuite = {
166
+ ...suite,
221
167
  children: {}
222
- });
223
-
224
- Object.entries(suite.children).forEach(function (_ref7) {
225
- var _ref8 = _slicedToArray(_ref7, 2),
226
- title = _ref8[0],
227
- suiteOrTest = _ref8[1];
228
-
168
+ };
169
+ Object.entries(suite.children).forEach(_ref6 => {
170
+ let [title, suiteOrTest] = _ref6;
229
171
  if (!suiteOrTest || suiteOrTest.skip) return;
230
-
231
- if (!status && subStrings.some(function (subString) {
232
- return title.toLowerCase().includes(subString);
233
- })) {
172
+ if (!status && subStrings.some(subString => title.toLowerCase().includes(subString))) {
234
173
  filteredSuite.children[title] = suiteOrTest;
235
174
  } else if (isTest(suiteOrTest)) {
236
175
  if (status && suiteOrTest.status && ['pending', 'running', status].includes(suiteOrTest.status)) filteredSuite.children[title] = suiteOrTest;
237
176
  } else {
238
- var filteredSubSuite = filterTests(suiteOrTest, filter);
177
+ const filteredSubSuite = filterTests(suiteOrTest, filter);
239
178
  if (Object.keys(filteredSubSuite.children).length == 0) return;
240
179
  filteredSuite.children[title] = filteredSubSuite;
241
180
  }
@@ -243,7 +182,7 @@ export function filterTests(suite, filter) {
243
182
  return filteredSuite;
244
183
  }
245
184
  export function openSuite(suite, path, opened) {
246
- var subSuite = path.reduce(function (suiteOrTest, pathToken) {
185
+ const subSuite = path.reduce((suiteOrTest, pathToken) => {
247
186
  if (suiteOrTest && !isTest(suiteOrTest)) {
248
187
  if (opened) suiteOrTest.opened = opened;
249
188
  return suiteOrTest.children[pathToken];
@@ -253,25 +192,21 @@ export function openSuite(suite, path, opened) {
253
192
  }
254
193
  export function flattenSuite(suite) {
255
194
  if (!suite.opened) return [];
256
- return Object.entries(suite.children).flatMap(function (_ref9) {
257
- var _ref10 = _slicedToArray(_ref9, 2),
258
- title = _ref10[0],
259
- subSuite = _ref10[1];
260
-
195
+ return Object.entries(suite.children).flatMap(_ref7 => {
196
+ let [title, subSuite] = _ref7;
261
197
  return subSuite ? [{
262
- title: title,
198
+ title,
263
199
  suite: subSuite
264
- }].concat(_toConsumableArray(isTest(subSuite) ? [] : flattenSuite(subSuite))) : [];
200
+ }, ...(isTest(subSuite) ? [] : flattenSuite(subSuite))] : [];
265
201
  });
266
202
  }
267
203
  export function countTestsStatus(suite) {
268
- var successCount = 0;
269
- var failedCount = 0;
270
- var skippedCount = 0;
271
- var pendingCount = 0;
272
- var cases = Object.values(suite.children).filter(isDefined);
273
- var suiteOrTest;
274
-
204
+ let successCount = 0;
205
+ let failedCount = 0;
206
+ let skippedCount = 0;
207
+ let pendingCount = 0;
208
+ const cases = Object.values(suite.children).filter(isDefined);
209
+ let suiteOrTest;
275
210
  while (suiteOrTest = cases.pop()) {
276
211
  if (isTest(suiteOrTest)) {
277
212
  if (suiteOrTest.skip) skippedCount++;
@@ -279,15 +214,14 @@ export function countTestsStatus(suite) {
279
214
  if (suiteOrTest.status === 'failed') failedCount++;
280
215
  if (suiteOrTest.status === 'pending') pendingCount++;
281
216
  } else {
282
- cases.push.apply(cases, _toConsumableArray(Object.values(suiteOrTest.children).filter(isDefined)));
217
+ cases.push(...Object.values(suiteOrTest.children).filter(isDefined));
283
218
  }
284
219
  }
285
-
286
220
  return {
287
- successCount: successCount,
288
- failedCount: failedCount,
289
- skippedCount: skippedCount,
290
- pendingCount: pendingCount
221
+ successCount,
222
+ failedCount,
223
+ skippedCount,
224
+ pendingCount
291
225
  };
292
226
  }
293
227
  export function getConnectionUrl() {
@@ -295,130 +229,99 @@ export function getConnectionUrl() {
295
229
  }
296
230
  export function getImageUrl(path, imageName) {
297
231
  // path => [kind, story, test, browser]
298
- var browser = path.slice(-1)[0];
299
- var imagesUrl = window.location.host ? "".concat(window.location.protocol, "//").concat(getConnectionUrl()).concat(window.location.pathname == '/' ? '/report' : window.location.pathname.split('/').slice(0, -1).join('/'), "/").concat(encodeURI(path.slice(0, -1).join('/'))) : encodeURI(path.slice(0, -1).join('/'));
300
- return imageName == browser ? imagesUrl : "".concat(imagesUrl, "/").concat(encodeURI(browser));
232
+ const browser = path.slice(-1)[0];
233
+ const imagesUrl = window.location.host ? `${window.location.protocol}//${getConnectionUrl()}${window.location.pathname == '/' ? '/report' : window.location.pathname.split('/').slice(0, -1).join('/')}/${encodeURI(path.slice(0, -1).join('/'))}` : encodeURI(path.slice(0, -1).join('/'));
234
+ return imageName == browser ? imagesUrl : `${imagesUrl}/${encodeURI(browser)}`;
301
235
  }
302
236
  export function getBorderSize(element) {
303
237
  // NOTE Firefox returns empty string for `borderWidth` prop
304
- var borderSize = parseFloat(getComputedStyle(element).borderTopWidth);
238
+ const borderSize = parseFloat(getComputedStyle(element).borderTopWidth);
305
239
  return Number.isNaN(borderSize) ? 0 : borderSize;
306
240
  }
307
241
  export function useLoadImages(s1, s2, s3) {
308
- var _useState = useState(false),
309
- _useState2 = _slicedToArray(_useState, 2),
310
- loaded = _useState2[0],
311
- setLoaded = _useState2[1];
312
-
313
- useEffect(function () {
242
+ const [loaded, setLoaded] = useState(false);
243
+ useEffect(() => {
314
244
  setLoaded(false);
315
- void Promise.all([s1, s2, s3].map(function (url) {
316
- return new Promise(function (resolve) {
317
- var image = document.createElement('img');
318
- image.src = url;
319
- image.onload = resolve;
320
- image.onerror = resolve;
321
- });
322
- })).then(function () {
323
- return setLoaded(true);
324
- });
245
+ void Promise.all([s1, s2, s3].map(url => new Promise(resolve => {
246
+ const image = document.createElement('img');
247
+ image.src = url;
248
+ image.onload = resolve;
249
+ image.onerror = resolve;
250
+ }))).then(() => setLoaded(true));
325
251
  }, [s1, s2, s3]);
326
252
  return loaded;
327
253
  }
254
+
328
255
  /**
329
256
  * Uses the ResizeObserver API to observe changes within the given HTML Element DOM Rect.
330
257
  *
331
258
  * @returns dimensions of element's content box (which means without paddings and border width)
332
259
  */
333
-
334
260
  export function useResizeObserver(elementRef, onResize) {
335
- var debounceTimeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 16;
336
- var observerRef = useRef(null);
337
- useEffect(function () {
261
+ let debounceTimeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 16;
262
+ const observerRef = useRef(null);
263
+ useEffect(() => {
338
264
  if (!elementRef.current) return;
339
265
  observerRef.current = new ResizeObserver(onResize);
340
266
  observerRef.current.observe(elementRef.current);
341
- return function () {
342
- var _observerRef$current;
343
-
344
- return (_observerRef$current = observerRef.current) === null || _observerRef$current === void 0 ? void 0 : _observerRef$current.disconnect();
345
- };
267
+ return () => observerRef.current?.disconnect();
346
268
  }, [debounceTimeout, elementRef, onResize]);
347
269
  }
348
270
  export function useApplyScale(imageRef, scale, dependency) {
349
- useLayoutEffect(function () {
271
+ useLayoutEffect(() => {
350
272
  if (!imageRef.current) return;
351
- var image = imageRef.current;
352
- var borderSize = getBorderSize(image);
353
- image.style.height = "".concat(image.naturalHeight * scale + borderSize * 2, "px");
273
+ const image = imageRef.current;
274
+ const borderSize = getBorderSize(image);
275
+ image.style.height = `${image.naturalHeight * scale + borderSize * 2}px`;
354
276
  }, [imageRef, scale, dependency]);
355
277
  }
356
278
  export function useCalcScale(diffImageRef, loaded) {
357
- var _useState3 = useState(1),
358
- _useState4 = _slicedToArray(_useState3, 2),
359
- scale = _useState4[0],
360
- setScale = _useState4[1];
361
-
362
- var calcScale = useCallback(function () {
363
- var diffImage = diffImageRef.current;
279
+ const [scale, setScale] = useState(1);
280
+ const calcScale = useCallback(() => {
281
+ const diffImage = diffImageRef.current;
364
282
  if (!diffImage || !loaded) return setScale(1);
365
- var borderSize = getBorderSize(diffImage);
366
- var ratio = (diffImage.getBoundingClientRect().width - borderSize * 2) / diffImage.naturalWidth;
283
+ const borderSize = getBorderSize(diffImage);
284
+ const ratio = (diffImage.getBoundingClientRect().width - borderSize * 2) / diffImage.naturalWidth;
367
285
  setScale(Math.min(1, ratio));
368
286
  }, [diffImageRef, loaded]);
369
287
  useResizeObserver(diffImageRef, calcScale);
370
288
  useLayoutEffect(calcScale, [calcScale]);
371
289
  return scale;
372
290
  }
373
- var CREEVEY_THEME = 'Creevey_theme';
374
-
291
+ const CREEVEY_THEME = 'Creevey_theme';
375
292
  function isTheme(theme) {
376
293
  return isDefined(theme) && Object.prototype.hasOwnProperty.call(themes, theme);
377
294
  }
378
-
379
295
  function initialTheme() {
380
- var theme = localStorage.getItem(CREEVEY_THEME);
296
+ const theme = localStorage.getItem(CREEVEY_THEME);
381
297
  return isTheme(theme) ? theme : 'light';
382
298
  }
383
-
384
299
  export function useTheme() {
385
- var _useState5 = useState(initialTheme()),
386
- _useState6 = _slicedToArray(_useState5, 2),
387
- theme = _useState6[0],
388
- setTheme = _useState6[1];
389
-
390
- useEffect(function () {
300
+ const [theme, setTheme] = useState(initialTheme());
301
+ useEffect(() => {
391
302
  localStorage.setItem(CREEVEY_THEME, theme);
392
303
  }, [theme]);
393
304
  return [theme, setTheme];
394
305
  }
395
306
  export function setSearchParams(testPath) {
396
- var pageUrl = "?".concat(stringify({
397
- testPath: testPath
398
- }));
307
+ const pageUrl = `?${stringify({
308
+ testPath
309
+ })}`;
399
310
  window.history.pushState({
400
- testPath: testPath
311
+ testPath
401
312
  }, '', pageUrl);
402
313
  }
403
314
  export function getTestPathFromSearch() {
404
- var _parse = parse(window.location.search.slice(1)),
405
- testPath = _parse.testPath; //@ts-expect-error: This expression is not callable.
406
-
407
-
408
- if (Array.isArray(testPath) && testPath.every(function (token) {
409
- return typeof token == 'string';
410
- })) {
315
+ const {
316
+ testPath
317
+ } = parse(window.location.search.slice(1));
318
+ //@ts-expect-error: This expression is not callable.
319
+ if (Array.isArray(testPath) && testPath.every(token => typeof token == 'string')) {
411
320
  return testPath;
412
321
  }
413
-
414
322
  return [];
415
323
  }
416
324
  export function useForceUpdate() {
417
- var _useState7 = useState({}),
418
- _useState8 = _slicedToArray(_useState7, 2),
419
- update = _useState8[1];
420
-
421
- return useCallback(function () {
422
- return update({});
423
- }, []);
325
+ const [, update] = useState({});
326
+ return useCallback(() => update({}), []);
424
327
  }
@@ -1,6 +1,6 @@
1
- export var VIEW_MODE_KEY = 'Creevey_view_mode';
2
- export var viewModes = ['side-by-side', 'swap', 'slide', 'blend'];
3
- export var getViewMode = function getViewMode() {
4
- var item = localStorage.getItem(VIEW_MODE_KEY);
1
+ export const VIEW_MODE_KEY = 'Creevey_view_mode';
2
+ export const viewModes = ['side-by-side', 'swap', 'slide', 'blend'];
3
+ export const getViewMode = () => {
4
+ const item = localStorage.getItem(VIEW_MODE_KEY);
5
5
  return item && viewModes.includes(item) ? item : 'side-by-side';
6
6
  };
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkcreevey=self.webpackChunkcreevey||[]).push([[192],{8192:(e,r,a)=>{a.r(r),a.d(r,{SyntaxHighlighter:()=>c.d3,createCopyToClipboardFunction:()=>c.xV,default:()=>c.qG});var c=a(23809)}}]);