creevey 0.9.0-beta.2 → 0.9.0-non-webpack.1

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 (236) hide show
  1. package/AUTHORS +15 -15
  2. package/CHANGELOG.md +1275 -1275
  3. package/LICENSE +21 -21
  4. package/README.md +7 -0
  5. package/addon/README.md +3 -0
  6. package/addon/package.json +4 -0
  7. package/docs/config.md +212 -212
  8. package/docs/grid.md +10 -10
  9. package/docs/tests.md +63 -63
  10. package/jest.config.js +6 -0
  11. package/lib/cjs/client/addon/Manager.js +123 -271
  12. package/lib/cjs/client/addon/components/Addon.js +17 -38
  13. package/lib/cjs/client/addon/components/Icons.js +12 -8
  14. package/lib/cjs/client/addon/components/Panel.js +17 -13
  15. package/lib/cjs/client/addon/components/TestSelect.js +11 -9
  16. package/lib/cjs/client/addon/components/Tools.js +21 -40
  17. package/lib/cjs/client/addon/decorator.js +1 -1
  18. package/lib/cjs/client/addon/index.js +31 -0
  19. package/lib/cjs/client/addon/preset.js +13 -32
  20. package/lib/cjs/client/addon/register.js +46 -70
  21. package/lib/cjs/client/addon/utils.js +1 -1
  22. package/lib/cjs/client/addon/withCreevey.js +164 -344
  23. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +23 -21
  24. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +22 -18
  25. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +42 -64
  26. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +35 -48
  27. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +24 -43
  28. package/lib/cjs/client/shared/components/ImagesView/index.js +9 -9
  29. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +12 -8
  30. package/lib/cjs/client/shared/components/PageFooter/Paging.js +14 -18
  31. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +22 -18
  32. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +42 -67
  33. package/lib/cjs/client/shared/components/ResultsPage.js +39 -69
  34. package/lib/cjs/client/shared/creeveyClientApi.js +55 -82
  35. package/lib/cjs/client/shared/helpers.js +143 -214
  36. package/lib/cjs/client/shared/viewMode.js +5 -5
  37. package/lib/cjs/client/web/142.js +2 -0
  38. package/lib/cjs/client/web/142.js.LICENSE.txt +12 -0
  39. package/lib/cjs/client/web/32.js +1 -0
  40. package/lib/cjs/client/web/551.js +1 -0
  41. package/lib/cjs/client/web/566.js +2 -0
  42. package/lib/cjs/client/web/566.js.LICENSE.txt +31 -0
  43. package/lib/cjs/client/web/691.js +2 -0
  44. package/lib/cjs/client/web/691.js.LICENSE.txt +8 -0
  45. package/lib/cjs/client/web/725.js +1 -0
  46. package/lib/cjs/client/web/index.html +19 -19
  47. package/lib/cjs/client/web/main.js +2 -38
  48. package/lib/cjs/client/web/main.js.LICENSE.txt +49 -0
  49. package/lib/cjs/creevey.js +3 -5
  50. package/lib/cjs/index.js +4 -4
  51. package/lib/cjs/server/config.js +1 -1
  52. package/lib/cjs/server/docker.js +3 -7
  53. package/lib/cjs/server/index.js +1 -1
  54. package/lib/cjs/server/loaders/babel/creevey-plugin.js +1 -3
  55. package/lib/cjs/server/loaders/babel/helpers.js +13 -23
  56. package/lib/cjs/server/loaders/babel/register.js +1 -3
  57. package/lib/cjs/server/loaders/webpack/compile.js +31 -24
  58. package/lib/cjs/server/loaders/webpack/creevey-loader.js +10 -5
  59. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +2 -7
  60. package/lib/cjs/server/loaders/webpack/mdx-loader.js +1 -1
  61. package/lib/cjs/server/loaders/webpack/start.js +1 -1
  62. package/lib/cjs/server/logger.js +2 -1
  63. package/lib/cjs/server/master/index.js +2 -2
  64. package/lib/cjs/server/master/pool.js +9 -18
  65. package/lib/cjs/server/master/runner.js +53 -66
  66. package/lib/cjs/server/master/server.js +2 -2
  67. package/lib/cjs/server/messages.js +8 -10
  68. package/lib/cjs/server/selenium/browser.js +23 -31
  69. package/lib/cjs/server/selenium/selenoid.js +5 -7
  70. package/lib/cjs/server/stories.js +9 -20
  71. package/lib/cjs/server/storybook/entry.js +5 -3
  72. package/lib/cjs/server/storybook/helpers.js +15 -21
  73. package/lib/cjs/server/storybook/providers/browser.js +5 -9
  74. package/lib/cjs/server/storybook/providers/nodejs.js +4 -4
  75. package/lib/cjs/server/update.js +1 -5
  76. package/lib/cjs/server/utils.js +13 -15
  77. package/lib/cjs/server/worker/reporter.js +8 -20
  78. package/lib/cjs/server/worker/worker.js +6 -16
  79. package/lib/cjs/shared/index.js +101 -0
  80. package/lib/cjs/shared/serializeRegExp.js +42 -0
  81. package/lib/cjs/types.js +6 -6
  82. package/lib/esm/client/addon/Manager.js +123 -271
  83. package/lib/esm/client/addon/components/Addon.js +15 -34
  84. package/lib/esm/client/addon/components/Icons.js +11 -7
  85. package/lib/esm/client/addon/components/Panel.js +17 -13
  86. package/lib/esm/client/addon/components/TestSelect.js +11 -9
  87. package/lib/esm/client/addon/components/Tools.js +19 -36
  88. package/lib/esm/client/addon/decorator.js +1 -1
  89. package/lib/esm/client/addon/index.js +2 -0
  90. package/lib/esm/client/addon/preset.js +10 -25
  91. package/lib/esm/client/addon/register.js +42 -66
  92. package/lib/esm/client/addon/utils.js +1 -1
  93. package/lib/esm/client/addon/withCreevey.js +157 -341
  94. package/lib/esm/client/shared/components/ImagesView/BlendView.js +21 -17
  95. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +21 -17
  96. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +40 -60
  97. package/lib/esm/client/shared/components/ImagesView/SlideView.js +33 -44
  98. package/lib/esm/client/shared/components/ImagesView/SwapView.js +22 -39
  99. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
  100. package/lib/esm/client/shared/components/PageFooter/Paging.js +14 -18
  101. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +22 -18
  102. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +37 -60
  103. package/lib/esm/client/shared/components/ResultsPage.js +36 -64
  104. package/lib/esm/client/shared/creeveyClientApi.js +57 -84
  105. package/lib/esm/client/shared/helpers.js +127 -198
  106. package/lib/esm/client/shared/viewMode.js +4 -4
  107. package/lib/esm/creevey.js +3 -5
  108. package/lib/esm/index.js +1 -3
  109. package/lib/esm/server/docker.js +2 -2
  110. package/lib/esm/server/index.js +1 -1
  111. package/lib/esm/server/loaders/babel/creevey-plugin.js +1 -3
  112. package/lib/esm/server/loaders/babel/helpers.js +12 -22
  113. package/lib/esm/server/loaders/babel/register.js +1 -3
  114. package/lib/esm/server/loaders/webpack/compile.js +31 -24
  115. package/lib/esm/server/loaders/webpack/creevey-loader.js +9 -4
  116. package/lib/esm/server/loaders/webpack/dummy-hmr.js +2 -6
  117. package/lib/esm/server/loaders/webpack/start.js +1 -1
  118. package/lib/esm/server/master/index.js +2 -2
  119. package/lib/esm/server/master/pool.js +7 -18
  120. package/lib/esm/server/master/runner.js +53 -66
  121. package/lib/esm/server/master/server.js +2 -2
  122. package/lib/esm/server/messages.js +3 -5
  123. package/lib/esm/server/selenium/browser.js +20 -28
  124. package/lib/esm/server/selenium/selenoid.js +4 -6
  125. package/lib/esm/server/stories.js +9 -20
  126. package/lib/esm/server/storybook/entry.js +4 -2
  127. package/lib/esm/server/storybook/helpers.js +7 -15
  128. package/lib/esm/server/storybook/providers/browser.js +4 -5
  129. package/lib/esm/server/storybook/providers/nodejs.js +3 -3
  130. package/lib/esm/server/update.js +1 -5
  131. package/lib/esm/server/utils.js +5 -9
  132. package/lib/esm/server/worker/reporter.js +8 -20
  133. package/lib/esm/server/worker/worker.js +6 -16
  134. package/lib/esm/shared/index.js +78 -0
  135. package/lib/esm/shared/serializeRegExp.js +24 -0
  136. package/lib/types/cli.d.ts +1 -1
  137. package/lib/types/client/addon/Manager.d.ts +37 -37
  138. package/lib/types/client/addon/components/Addon.d.ts +8 -8
  139. package/lib/types/client/addon/components/Icons.d.ts +7 -7
  140. package/lib/types/client/addon/components/Panel.d.ts +9 -9
  141. package/lib/types/client/addon/components/TestSelect.d.ts +8 -9
  142. package/lib/types/client/addon/components/Tools.d.ts +6 -6
  143. package/lib/types/client/addon/decorator.d.ts +1 -1
  144. package/lib/types/client/addon/index.d.ts +2 -0
  145. package/lib/types/client/addon/preset.d.ts +23 -24
  146. package/lib/types/client/addon/readyForCapture.d.ts +6 -6
  147. package/lib/types/client/addon/register.d.ts +3 -3
  148. package/lib/types/client/addon/utils.d.ts +2 -2
  149. package/lib/types/client/addon/withCreevey.d.ts +24 -24
  150. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -3
  151. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +24 -25
  152. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -3
  153. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -3
  154. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -3
  155. package/lib/types/client/shared/components/ImagesView/index.d.ts +5 -5
  156. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +8 -9
  157. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +7 -8
  158. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +12 -12
  159. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +16 -17
  160. package/lib/types/client/shared/components/ResultsPage.d.ts +18 -18
  161. package/lib/types/client/shared/creeveyClientApi.d.ts +9 -9
  162. package/lib/types/client/shared/helpers.d.ts +46 -46
  163. package/lib/types/client/shared/viewMode.d.ts +4 -4
  164. package/lib/types/client/web/CreeveyApp.d.ts +11 -12
  165. package/lib/types/client/web/CreeveyContext.d.ts +11 -11
  166. package/lib/types/client/web/CreeveyLoader.d.ts +2 -3
  167. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +19 -19
  168. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +6 -6
  169. package/lib/types/client/web/CreeveyView/SideBar/SideBar.d.ts +14 -14
  170. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +12 -13
  171. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +33 -33
  172. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +7 -8
  173. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +10 -10
  174. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +9 -9
  175. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +6 -6
  176. package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +1 -1
  177. package/lib/types/client/web/KeyboardEventsContext.d.ts +13 -13
  178. package/lib/types/client/web/index.d.ts +4 -4
  179. package/lib/types/creevey.d.ts +1 -1
  180. package/lib/types/index.d.ts +0 -1
  181. package/lib/types/server/config.d.ts +4 -4
  182. package/lib/types/server/docker.d.ts +7 -7
  183. package/lib/types/server/extract.d.ts +2 -2
  184. package/lib/types/server/index.d.ts +2 -2
  185. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +1 -1
  186. package/lib/types/server/loaders/babel/helpers.d.ts +19 -19
  187. package/lib/types/server/loaders/babel/register.d.ts +5 -5
  188. package/lib/types/server/loaders/hooks/mdx.d.ts +1 -1
  189. package/lib/types/server/loaders/hooks/svelte.d.ts +1 -1
  190. package/lib/types/server/loaders/webpack/compile.d.ts +2 -2
  191. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +4 -2
  192. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +10 -10
  193. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +6 -6
  194. package/lib/types/server/loaders/webpack/start.d.ts +1 -1
  195. package/lib/types/server/logger.d.ts +10 -6
  196. package/lib/types/server/master/api.d.ts +7 -7
  197. package/lib/types/server/master/index.d.ts +3 -3
  198. package/lib/types/server/master/master.d.ts +7 -7
  199. package/lib/types/server/master/pool.d.ts +31 -31
  200. package/lib/types/server/master/runner.d.ts +26 -26
  201. package/lib/types/server/master/server.d.ts +2 -2
  202. package/lib/types/server/messages.d.ts +27 -27
  203. package/lib/types/server/selenium/browser.d.ts +17 -17
  204. package/lib/types/server/selenium/index.d.ts +2 -2
  205. package/lib/types/server/selenium/selenoid.d.ts +3 -3
  206. package/lib/types/server/stories.d.ts +8 -8
  207. package/lib/types/server/storybook/entry.d.ts +18 -18
  208. package/lib/types/server/storybook/helpers.d.ts +24 -24
  209. package/lib/types/server/storybook/providers/browser.d.ts +4 -4
  210. package/lib/types/server/storybook/providers/hybrid.d.ts +4 -4
  211. package/lib/types/server/storybook/providers/nodejs.d.ts +9 -9
  212. package/lib/types/server/testsFiles/parser.d.ts +12 -12
  213. package/lib/types/server/testsFiles/register.d.ts +2 -2
  214. package/lib/types/server/update.d.ts +2 -2
  215. package/lib/types/server/utils.d.ts +20 -20
  216. package/lib/types/server/worker/chai-image.d.ts +6 -6
  217. package/lib/types/server/worker/helpers.d.ts +8 -8
  218. package/lib/types/server/worker/index.d.ts +1 -1
  219. package/lib/types/server/worker/reporter.d.ts +8 -8
  220. package/lib/types/server/worker/worker.d.ts +4 -4
  221. package/lib/types/{shared.d.ts → shared/index.d.ts} +7 -16
  222. package/lib/types/shared/serializeRegExp.d.ts +9 -0
  223. package/lib/types/types.d.ts +490 -489
  224. package/package.json +115 -102
  225. package/preset.js +9 -9
  226. package/types/babel__register.d.ts +1 -1
  227. package/types/chai.d.ts +12 -12
  228. package/types/event-source-polyfill.d.ts +6 -6
  229. package/types/mdx.d.ts +3 -2
  230. package/types/mocha.d.ts +20 -20
  231. package/types/png.d.ts +4 -4
  232. package/lib/cjs/client/web/1.js +0 -13
  233. package/lib/cjs/client/web/2.js +0 -1
  234. package/lib/cjs/shared.js +0 -124
  235. package/lib/esm/shared.js +0 -93
  236. package/storybook-static/stories.json +0 -21
@@ -5,28 +5,24 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.loadStories = loadStories;
7
7
 
8
- var _cluster = _interopRequireWildcard(require("cluster"));
8
+ var _cluster = _interopRequireDefault(require("cluster"));
9
9
 
10
10
  var _selenium = require("../../selenium");
11
11
 
12
12
  var _messages = require("../../messages");
13
13
 
14
- var _shared = require("../../../shared");
15
-
16
14
  var _types = require("../../../types");
17
15
 
18
16
  var _logger = require("../../logger");
19
17
 
20
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
-
22
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
19
 
24
20
  async function loadStories(_config, {
25
21
  port
26
22
  }, storiesListener) {
27
- if (_cluster.isMaster) {
23
+ if (_cluster.default.isPrimary) {
28
24
  return new Promise(resolve => {
29
- const worker = Object.values(_cluster.default.workers).filter(_types.isDefined).find(worker => worker.isConnected());
25
+ const worker = Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).find(worker => worker.isConnected());
30
26
 
31
27
  if (worker) {
32
28
  const unsubscribe = (0, _messages.subscribeOnWorker)(worker, 'stories', message => {
@@ -61,7 +57,7 @@ async function loadStories(_config, {
61
57
  });
62
58
  if (message.type == 'update') storiesListener(new Map(message.payload));
63
59
  });
64
- const stories = (0, _shared.deserializeRawStories)(await (0, _selenium.loadStoriesFromBrowser)(port));
60
+ const stories = await (0, _selenium.loadStoriesFromBrowser)(port);
65
61
  const storiesWithOldTests = [];
66
62
  Object.values(stories).forEach(story => {
67
63
  var _parameters, _parameters$creevey;
@@ -3,12 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.loadStories = loadStories;
7
6
  exports.extractStoriesData = extractStoriesData;
7
+ exports.loadStories = loadStories;
8
8
 
9
9
  var _path = _interopRequireDefault(require("path"));
10
10
 
11
- var _cluster = require("cluster");
11
+ var _cluster = _interopRequireDefault(require("cluster"));
12
12
 
13
13
  var _chokidar = _interopRequireDefault(require("chokidar"));
14
14
 
@@ -46,7 +46,7 @@ async function initStorybookEnvironment() {
46
46
  logger
47
47
  } = await (0, _helpers.importStorybookClientLogger)(); // NOTE: Disable duplication warnings for >=6.2 storybook
48
48
 
49
- if (_cluster.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
49
+ if (_cluster.default.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
50
50
 
51
51
  logger.debug = _types.noop;
52
52
  return Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
@@ -175,7 +175,7 @@ async function loadStoriesDirectly(config, {
175
175
  try {
176
176
  configure(contexts.map(ctx => ctx()), module, false);
177
177
  } catch (error) {
178
- if (_cluster.isMaster) _logger.logger.error(error);
178
+ if (_cluster.default.isPrimary) _logger.logger.error(error);
179
179
  }
180
180
  }
181
181
 
@@ -31,11 +31,7 @@ function tryToLoadTestsData(filename) {
31
31
  const actualRegex = /^(.*)-actual-(\d+)\.png$/i;
32
32
 
33
33
  function approve(dirents, srcPath, dstPath, testPaths, isMatch) {
34
- dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => {
35
- var _images$get;
36
-
37
- return Number(retry) > ((_images$get = images.get(imageName)) !== null && _images$get !== void 0 ? _images$get : -1) ? images.set(imageName, Number(retry)) : images;
38
- }, new Map()).forEach((retry, imageName) => {
34
+ dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => Number(retry) > (images.get(imageName) ?? -1) ? images.set(imageName, Number(retry)) : images, new Map()).forEach((retry, imageName) => {
39
35
  (0, _fs.mkdirSync)(dstPath, {
40
36
  recursive: true
41
37
  });
@@ -3,15 +3,17 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.shouldSkip = shouldSkip;
7
- exports.shutdownWorkers = shutdownWorkers;
8
- exports.shutdown = shutdown;
6
+ exports.extensions = exports.downloadBinary = exports.LOCALHOST_REGEXP = void 0;
9
7
  exports.getCreeveyCache = getCreeveyCache;
8
+ exports.isShuttingDown = exports.isInsideDocker = void 0;
9
+ exports.readDirRecursive = readDirRecursive;
10
+ exports.removeProps = removeProps;
10
11
  exports.runSequence = runSequence;
12
+ exports.shouldSkip = shouldSkip;
13
+ exports.shutdown = shutdown;
14
+ exports.shutdownWorkers = shutdownWorkers;
15
+ exports.skipOptionKeys = void 0;
11
16
  exports.testsToImages = testsToImages;
12
- exports.removeProps = removeProps;
13
- exports.readDirRecursive = readDirRecursive;
14
- exports.downloadBinary = exports.isInsideDocker = exports.skipOptionKeys = exports.extensions = exports.LOCALHOST_REGEXP = exports.isShuttingDown = void 0;
15
17
 
16
18
  var _fs = require("fs");
17
19
 
@@ -92,7 +94,7 @@ function shouldSkip(browser, meta, skipOptions, test) {
92
94
 
93
95
  async function shutdownWorkers() {
94
96
  isShuttingDown.current = true;
95
- await Promise.all(Object.values(_cluster.default.workers).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
97
+ await Promise.all(Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
96
98
  const timeout = setTimeout(() => worker.kill(), 10000);
97
99
  worker.on('exit', () => {
98
100
  clearTimeout(timeout);
@@ -128,9 +130,9 @@ function testsToImages(tests) {
128
130
  storyPath,
129
131
  results
130
132
  }) => {
131
- var _results$slice$0$imag, _results$slice$;
133
+ var _results$slice$;
132
134
 
133
- return Object.keys((_results$slice$0$imag = results === null || results === void 0 ? void 0 : (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) !== null && _results$slice$0$imag !== void 0 ? _results$slice$0$imag : {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
135
+ return Object.keys((results === null || results === void 0 ? void 0 : (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) ?? {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
134
136
  })));
135
137
  } // https://tuhrig.de/how-to-know-you-are-inside-a-docker-container/
136
138
 
@@ -139,19 +141,15 @@ const isInsideDocker = (0, _fs.existsSync)('/proc/1/cgroup') && /docker/.test((0
139
141
  exports.isInsideDocker = isInsideDocker;
140
142
 
141
143
  const downloadBinary = (downloadUrl, destination) => new Promise((resolve, reject) => (0, _https.get)(downloadUrl, response => {
142
- var _response$statusCode2;
143
-
144
144
  if (response.statusCode == 302) {
145
- var _response$statusCode;
146
-
147
145
  const {
148
146
  location
149
147
  } = response.headers;
150
- if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${(_response$statusCode = response.statusCode) !== null && _response$statusCode !== void 0 ? _response$statusCode : 'UNKNOWN'}`));
148
+ if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
151
149
  return resolve(downloadBinary(location, destination));
152
150
  }
153
151
 
154
- if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${(_response$statusCode2 = response.statusCode) !== null && _response$statusCode2 !== void 0 ? _response$statusCode2 : 'UNKNOWN'}`));
152
+ if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
155
153
  const fileStream = (0, _fs.createWriteStream)(destination);
156
154
  response.pipe(fileStream);
157
155
  fileStream.on('finish', () => {
@@ -17,8 +17,6 @@ var _logger = require("../logger");
17
17
 
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
19
 
20
- 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; }
21
-
22
20
  const testLevels = {
23
21
  INFO: _chalk.default.green('PASS'),
24
22
  WARN: _chalk.default.yellow('START'),
@@ -43,11 +41,7 @@ class CreeveyReporter extends _mocha.reporters.Base {
43
41
 
44
42
  runner.on('test', test => testLogger.warn(_chalk.default.cyan(test.titlePath().join('/'))));
45
43
  runner.on('pass', test => testLogger.info(_chalk.default.cyan(test.titlePath().join('/'))));
46
- runner.on('fail', (test, error) => testLogger.error(_chalk.default.cyan(test.titlePath().join('/')), '\n ', getErrors(error, (error, imageName) => `${_chalk.default.bold(imageName !== null && imageName !== void 0 ? imageName : topLevelSuite)}:${error}`, error => {
47
- var _error$stack;
48
-
49
- return `${(_error$stack = error.stack) !== null && _error$stack !== void 0 ? _error$stack : error.message}`;
50
- }).join('\n ')));
44
+ runner.on('fail', (test, error) => testLogger.error(_chalk.default.cyan(test.titlePath().join('/')), '\n ', getErrors(error, (error, imageName) => `${_chalk.default.bold(imageName ?? topLevelSuite)}:${error}`, error => `${error.stack ?? error.message}`).join('\n ')));
51
45
  }
52
46
 
53
47
  }
@@ -57,20 +51,11 @@ exports.CreeveyReporter = CreeveyReporter;
57
51
  class TeamcityReporter extends _mocha.reporters.Base {
58
52
  constructor(runner, options) {
59
53
  super(runner);
60
-
61
- _defineProperty(this, "escape", str => {
62
- if (!str) return '';
63
- return str.toString() // eslint-disable-next-line no-control-regex
64
- .replace(/\x1B.*?m/g, '').replace(/\|/g, '||').replace(/\n/g, '|n').replace(/\r/g, '|r').replace(/\[/g, '|[').replace(/\]/g, '|]').replace(/\u0085/g, '|x').replace(/\u2028/g, '|l').replace(/\u2029/g, '|p').replace(/'/g, "|'");
65
- });
66
-
67
54
  const topLevelSuite = this.escape(options.reporterOptions.topLevelSuite);
68
55
  const reporterOptions = options.reporterOptions;
69
56
  runner.on('suite', suite => suite.root ? console.log(`##teamcity[testSuiteStarted name='${topLevelSuite}' flowId='${process.pid}']`) : console.log(`##teamcity[testSuiteStarted name='${this.escape(suite.title)}' flowId='${process.pid}']`));
70
57
  runner.on('test', test => console.log(`##teamcity[testStarted name='${this.escape(test.title)}' flowId='${process.pid}']`));
71
58
  runner.on('fail', (test, error) => {
72
- var _error$stack2;
73
-
74
59
  Object.entries(reporterOptions.images).forEach(([name, image]) => {
75
60
  if (!image) return;
76
61
  const filePath = test.titlePath().concat(name == topLevelSuite ? [] : [topLevelSuite]).map(this.escape).join('/'); // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -86,7 +71,7 @@ class TeamcityReporter extends _mocha.reporters.Base {
86
71
  }); // Output failed test as passed due TC don't support retry mechanic
87
72
  // https://teamcity-support.jetbrains.com/hc/en-us/community/posts/207216829-Count-test-as-successful-if-at-least-one-try-is-successful?page=1#community_comment_207394125
88
73
 
89
- reporterOptions.willRetry ? console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`) : console.log(`##teamcity[testFailed name='${this.escape(test.title)}' message='${this.escape(error.message)}' details='${this.escape((_error$stack2 = error.stack) !== null && _error$stack2 !== void 0 ? _error$stack2 : '')}' flowId='${process.pid}']`);
74
+ reporterOptions.willRetry ? console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`) : console.log(`##teamcity[testFailed name='${this.escape(test.title)}' message='${this.escape(error.message)}' details='${this.escape(error.stack ?? '')}' flowId='${process.pid}']`);
90
75
  });
91
76
  runner.on('pending', test => console.log(`##teamcity[testIgnored name='${this.escape(test.title)}' message='${this.escape(typeof test.skipReason == 'boolean' ? test.title : test.skipReason)}' flowId='${process.pid}']`));
92
77
  runner.on('test end', test => console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`));
@@ -94,6 +79,11 @@ class TeamcityReporter extends _mocha.reporters.Base {
94
79
  runner.on('end', () => console.log(`##teamcity[testSuiteFinished name='${topLevelSuite}' flowId='${process.pid}']`));
95
80
  }
96
81
 
82
+ escape = str => {
83
+ if (!str) return '';
84
+ return str.toString() // eslint-disable-next-line no-control-regex
85
+ .replace(/\x1B.*?m/g, '').replace(/\|/g, '||').replace(/\n/g, '|n').replace(/\r/g, '|r').replace(/\[/g, '|[').replace(/\]/g, '|]').replace(/\u0085/g, '|x').replace(/\u2028/g, '|l').replace(/\u2029/g, '|p').replace(/'/g, "|'");
86
+ };
97
87
  }
98
88
 
99
89
  exports.TeamcityReporter = TeamcityReporter;
@@ -110,9 +100,7 @@ function getErrors(error, imageErrorToString, errorToString) {
110
100
  } else {
111
101
  const imageErrors = error.images;
112
102
  Object.keys(imageErrors).forEach(imageName => {
113
- var _imageErrors$imageNam;
114
-
115
- errors.push(imageErrorToString((_imageErrors$imageNam = imageErrors[imageName]) !== null && _imageErrors$imageNam !== void 0 ? _imageErrors$imageNam : '', imageName));
103
+ errors.push(imageErrorToString(imageErrors[imageName] ?? '', imageName));
116
104
  });
117
105
  }
118
106
 
@@ -57,9 +57,7 @@ async function getLastImageNumber(imageDir, imageName) {
57
57
  const actualImagesRegexp = new RegExp(`${imageName}-actual-(\\d+)\\.png`);
58
58
 
59
59
  try {
60
- var _await$readdirAsync$m;
61
-
62
- return (_await$readdirAsync$m = (await readdirAsync(imageDir)).map(filename => filename.replace(actualImagesRegexp, '$1')).map(Number).filter(x => !isNaN(x)).sort((a, b) => b - a)[0]) !== null && _await$readdirAsync$m !== void 0 ? _await$readdirAsync$m : 0;
60
+ return (await readdirAsync(imageDir)).map(filename => filename.replace(actualImagesRegexp, '$1')).map(Number).filter(x => !isNaN(x)).sort((a, b) => b - a)[0] ?? 0;
63
61
  } catch (_error) {
64
62
  return 0;
65
63
  }
@@ -77,8 +75,6 @@ async function worker(config, options) {
77
75
 
78
76
  function runHandler(failures) {
79
77
  if (failures > 0 && (error || Object.values(images).some(image => (image === null || image === void 0 ? void 0 : image.error) != null))) {
80
- var _error2;
81
-
82
78
  const isTimeout = hasTimeout(error) || Object.values(images).some(image => hasTimeout(image === null || image === void 0 ? void 0 : image.error));
83
79
  const payload = {
84
80
  status: 'failed',
@@ -88,7 +84,7 @@ async function worker(config, options) {
88
84
  isTimeout ? (0, _messages.emitWorkerMessage)({
89
85
  type: 'error',
90
86
  payload: {
91
- error: (_error2 = error) !== null && _error2 !== void 0 ? _error2 : 'Unknown error'
87
+ error: error ?? 'Unknown error'
92
88
  }
93
89
  }) : (0, _messages.emitTestMessage)({
94
90
  type: 'end',
@@ -119,20 +115,18 @@ async function worker(config, options) {
119
115
  }
120
116
 
121
117
  async function getExpected(assertImageName) {
122
- var _images$imageName;
123
-
124
118
  // context => [kind, story, test, browser]
125
119
  // rootSuite -> kindSuite -> storyTest -> [browsers.png]
126
120
  // rootSuite -> kindSuite -> storySuite -> test -> [browsers.png]
127
121
  const testPath = [...testScope];
128
- const imageName = assertImageName !== null && assertImageName !== void 0 ? assertImageName : testPath.pop();
122
+ const imageName = assertImageName ?? testPath.pop();
129
123
  const imagesMeta = [];
130
124
 
131
125
  const reportImageDir = _path.default.join(config.reportDir, ...testPath);
132
126
 
133
127
  const imageNumber = (await getLastImageNumber(reportImageDir, imageName)) + 1;
134
128
  const actualImageName = `${imageName}-actual-${imageNumber}.png`;
135
- const image = images[imageName] = (_images$imageName = images[imageName]) !== null && _images$imageName !== void 0 ? _images$imageName : {
129
+ const image = images[imageName] = images[imageName] ?? {
136
130
  actual: actualImageName
137
131
  };
138
132
 
@@ -195,9 +189,7 @@ async function worker(config, options) {
195
189
 
196
190
  }
197
191
  };
198
- const mocha = new _mocha.default(mochaOptions); // @ts-expect-error: @types/mocha has out-dated types
199
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
200
-
192
+ const mocha = new _mocha.default(mochaOptions);
201
193
  mocha.cleanReferencesAfterRun(false);
202
194
 
203
195
  _chai.default.use((0, _chaiImage.default)(getExpected, config.diffOptions));
@@ -250,9 +242,7 @@ async function worker(config, options) {
250
242
  if (!(reason instanceof Error)) {
251
243
  error = reason;
252
244
  } else if (!(0, _types.isImageError)(reason)) {
253
- var _reason$stack;
254
-
255
- error = (_reason$stack = reason.stack) !== null && _reason$stack !== void 0 ? _reason$stack : reason.message;
245
+ error = reason.stack ?? reason.message;
256
246
  } else if (typeof reason.images == 'string') {
257
247
  const image = images[testScope.slice(-1)[0]];
258
248
  if (image) image.error = reason.images;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.serializeRawStories = exports.deserializeStory = exports.deserializeRawStories = exports.denormalizeStoryParameters = exports.combineParameters = void 0;
7
+
8
+ var _lodash = require("lodash");
9
+
10
+ var _serializeRegExp = require("./serializeRegExp");
11
+
12
+ // NOTE: Copy-paste from storybook/api
13
+ const combineParameters = function () {
14
+ for (var _len = arguments.length, parameterSets = new Array(_len), _key = 0; _key < _len; _key++) {
15
+ parameterSets[_key] = arguments[_key];
16
+ }
17
+
18
+ return (// eslint-disable-next-line @typescript-eslint/no-unsafe-return
19
+ (0, _lodash.mergeWith)({}, ...parameterSets, (_, srcValue) => {
20
+ // Treat arrays as scalars:
21
+ if (Array.isArray(srcValue)) return srcValue;
22
+ return undefined;
23
+ })
24
+ );
25
+ }; // NOTE: Copy-paste from storybook/api
26
+
27
+
28
+ exports.combineParameters = combineParameters;
29
+
30
+ const denormalizeStoryParameters = _ref => {
31
+ let {
32
+ globalParameters,
33
+ kindParameters,
34
+ stories
35
+ } = _ref;
36
+ return (0, _lodash.mapValues)(stories, storyData => {
37
+ var _kindParameters$story;
38
+
39
+ return { ...storyData,
40
+ parameters: combineParameters(globalParameters, (_kindParameters$story = kindParameters[storyData.kind]) !== null && _kindParameters$story !== void 0 ? _kindParameters$story : {}, storyData.parameters)
41
+ };
42
+ });
43
+ };
44
+
45
+ exports.denormalizeStoryParameters = denormalizeStoryParameters;
46
+
47
+ const serializeRawStories = stories => {
48
+ return (0, _lodash.mapValues)(stories, storyData => {
49
+ const creevey = storyData.parameters.creevey;
50
+
51
+ if (creevey !== null && creevey !== void 0 && creevey.skip) {
52
+ return { ...storyData,
53
+ parameters: { ...storyData.parameters,
54
+ creevey: { ...creevey,
55
+ skip: (0, _lodash.cloneDeepWith)(creevey.skip, value => {
56
+ if ((0, _serializeRegExp.isRegExp)(value)) {
57
+ return (0, _serializeRegExp.serializeRegExp)(value);
58
+ }
59
+
60
+ return undefined;
61
+ })
62
+ }
63
+ }
64
+ };
65
+ }
66
+
67
+ return storyData;
68
+ });
69
+ };
70
+
71
+ exports.serializeRawStories = serializeRawStories;
72
+
73
+ const deserializeRawStories = stories => {
74
+ return (0, _lodash.mapValues)(stories, deserializeStory);
75
+ };
76
+
77
+ exports.deserializeRawStories = deserializeRawStories;
78
+
79
+ const deserializeStory = story => {
80
+ const creevey = story.parameters.creevey;
81
+
82
+ if (creevey !== null && creevey !== void 0 && creevey.skip) {
83
+ return { ...story,
84
+ parameters: { ...story.parameters,
85
+ creevey: { ...creevey,
86
+ skip: (0, _lodash.cloneDeepWith)(creevey.skip, value => {
87
+ if ((0, _serializeRegExp.isSerializedRegExp)(value)) {
88
+ return (0, _serializeRegExp.deserializeRegExp)(value);
89
+ }
90
+
91
+ return undefined;
92
+ })
93
+ }
94
+ }
95
+ };
96
+ }
97
+
98
+ return story;
99
+ };
100
+
101
+ exports.deserializeStory = deserializeStory;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.serializeRegExp = exports.isSerializedRegExp = exports.isRegExp = exports.deserializeRegExp = void 0;
7
+
8
+ const isRegExp = exp => {
9
+ return exp instanceof RegExp;
10
+ };
11
+
12
+ exports.isRegExp = isRegExp;
13
+
14
+ const isSerializedRegExp = exp => {
15
+ return typeof exp === 'object' && exp !== null && Reflect.get(exp, '__regexp') === true;
16
+ };
17
+
18
+ exports.isSerializedRegExp = isSerializedRegExp;
19
+
20
+ const serializeRegExp = exp => {
21
+ const {
22
+ source,
23
+ flags
24
+ } = exp;
25
+ return {
26
+ __regexp: true,
27
+ source,
28
+ flags
29
+ };
30
+ };
31
+
32
+ exports.serializeRegExp = serializeRegExp;
33
+
34
+ const deserializeRegExp = _ref => {
35
+ let {
36
+ source,
37
+ flags
38
+ } = _ref;
39
+ return new RegExp(source, flags);
40
+ };
41
+
42
+ exports.deserializeRegExp = deserializeRegExp;
package/lib/cjs/types.js CHANGED
@@ -3,19 +3,19 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.noop = noop;
7
6
  exports.isDefined = isDefined;
8
- exports.isTest = isTest;
9
- exports.isObject = isObject;
10
- exports.isString = isString;
7
+ exports.isDockerMessage = isDockerMessage;
11
8
  exports.isFunction = isFunction;
12
9
  exports.isImageError = isImageError;
10
+ exports.isObject = isObject;
13
11
  exports.isProcessMessage = isProcessMessage;
14
- exports.isWorkerMessage = isWorkerMessage;
15
12
  exports.isStoriesMessage = isStoriesMessage;
13
+ exports.isString = isString;
14
+ exports.isTest = isTest;
16
15
  exports.isTestMessage = isTestMessage;
17
16
  exports.isWebpackMessage = isWebpackMessage;
18
- exports.isDockerMessage = isDockerMessage;
17
+ exports.isWorkerMessage = isWorkerMessage;
18
+ exports.noop = noop;
19
19
 
20
20
  /* eslint-disable @typescript-eslint/no-explicit-any */
21
21