creevey 0.9.0-beta.2 → 0.9.0-beta.4

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 (234) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +9 -1
  3. package/addon/README.md +3 -0
  4. package/addon/package.json +4 -0
  5. package/docs/config.md +29 -26
  6. package/jest.config.js +6 -0
  7. package/lib/cjs/client/addon/Manager.js +122 -270
  8. package/lib/cjs/client/addon/components/Addon.js +17 -38
  9. package/lib/cjs/client/addon/components/Icons.js +11 -7
  10. package/lib/cjs/client/addon/components/Panel.js +17 -13
  11. package/lib/cjs/client/addon/components/TestSelect.js +11 -9
  12. package/lib/cjs/client/addon/components/Tools.js +21 -40
  13. package/lib/cjs/client/addon/decorator.js +1 -1
  14. package/lib/cjs/client/addon/index.js +31 -0
  15. package/lib/cjs/client/addon/preset.ie11.js +74 -0
  16. package/lib/cjs/client/addon/preset.js +14 -33
  17. package/lib/cjs/client/addon/register.js +46 -70
  18. package/lib/cjs/client/addon/utils.js +6 -2
  19. package/lib/cjs/client/addon/withCreevey.js +161 -342
  20. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +23 -21
  21. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +22 -18
  22. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +42 -64
  23. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +35 -48
  24. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +24 -43
  25. package/lib/cjs/client/shared/components/ImagesView/index.js +9 -9
  26. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +12 -8
  27. package/lib/cjs/client/shared/components/PageFooter/Paging.js +14 -18
  28. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +22 -18
  29. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +42 -67
  30. package/lib/cjs/client/shared/components/ResultsPage.js +39 -69
  31. package/lib/cjs/client/shared/creeveyClientApi.js +55 -82
  32. package/lib/cjs/client/shared/helpers.js +139 -210
  33. package/lib/cjs/client/shared/viewMode.js +5 -5
  34. package/lib/cjs/client/web/142.js +2 -0
  35. package/lib/cjs/client/web/142.js.LICENSE.txt +12 -0
  36. package/lib/cjs/client/web/32.js +1 -0
  37. package/lib/cjs/client/web/551.js +1 -0
  38. package/lib/cjs/client/web/566.js +2 -0
  39. package/lib/cjs/client/web/566.js.LICENSE.txt +31 -0
  40. package/lib/cjs/client/web/691.js +2 -0
  41. package/lib/cjs/client/web/691.js.LICENSE.txt +8 -0
  42. package/lib/cjs/client/web/725.js +1 -0
  43. package/lib/cjs/client/web/main.js +2 -38
  44. package/lib/cjs/client/web/main.js.LICENSE.txt +49 -0
  45. package/lib/cjs/creevey.js +3 -5
  46. package/lib/cjs/index.js +4 -4
  47. package/lib/cjs/server/config.js +2 -4
  48. package/lib/cjs/server/docker.js +3 -7
  49. package/lib/cjs/server/extract.js +1 -5
  50. package/lib/cjs/server/index.js +1 -1
  51. package/lib/cjs/server/loaders/babel/creevey-plugin.js +1 -3
  52. package/lib/cjs/server/loaders/babel/helpers.js +13 -23
  53. package/lib/cjs/server/loaders/babel/register.js +2 -4
  54. package/lib/cjs/server/loaders/webpack/compile.js +34 -51
  55. package/lib/cjs/server/loaders/webpack/creevey-loader.js +20 -22
  56. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +2 -7
  57. package/lib/cjs/server/loaders/webpack/mdx-loader.js +2 -2
  58. package/lib/cjs/server/loaders/webpack/start.js +1 -1
  59. package/lib/cjs/server/logger.js +2 -1
  60. package/lib/cjs/server/master/index.js +2 -2
  61. package/lib/cjs/server/master/pool.js +9 -18
  62. package/lib/cjs/server/master/runner.js +53 -66
  63. package/lib/cjs/server/master/server.js +5 -3
  64. package/lib/cjs/server/messages.js +8 -10
  65. package/lib/cjs/server/selenium/browser.js +22 -46
  66. package/lib/cjs/server/selenium/selenoid.js +5 -7
  67. package/lib/cjs/server/stories.js +16 -33
  68. package/lib/cjs/server/storybook/entry.js +7 -22
  69. package/lib/cjs/server/storybook/helpers.js +20 -27
  70. package/lib/cjs/server/storybook/providers/browser.js +5 -9
  71. package/lib/cjs/server/storybook/providers/nodejs.js +7 -9
  72. package/lib/cjs/server/update.js +1 -5
  73. package/lib/cjs/server/utils.js +27 -36
  74. package/lib/cjs/server/worker/reporter.js +8 -20
  75. package/lib/cjs/server/worker/worker.js +6 -16
  76. package/lib/cjs/shared/index.js +101 -0
  77. package/lib/cjs/shared/serializeRegExp.js +42 -0
  78. package/lib/cjs/types.js +6 -6
  79. package/lib/esm/client/addon/Manager.js +122 -270
  80. package/lib/esm/client/addon/components/Addon.js +15 -34
  81. package/lib/esm/client/addon/components/Icons.js +10 -6
  82. package/lib/esm/client/addon/components/Panel.js +17 -13
  83. package/lib/esm/client/addon/components/TestSelect.js +11 -9
  84. package/lib/esm/client/addon/components/Tools.js +19 -36
  85. package/lib/esm/client/addon/decorator.js +1 -1
  86. package/lib/esm/client/addon/index.js +2 -0
  87. package/lib/esm/client/addon/preset.ie11.js +59 -0
  88. package/lib/esm/client/addon/preset.js +12 -27
  89. package/lib/esm/client/addon/register.js +42 -66
  90. package/lib/esm/client/addon/utils.js +3 -2
  91. package/lib/esm/client/addon/withCreevey.js +155 -341
  92. package/lib/esm/client/shared/components/ImagesView/BlendView.js +21 -17
  93. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +21 -17
  94. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +40 -60
  95. package/lib/esm/client/shared/components/ImagesView/SlideView.js +33 -44
  96. package/lib/esm/client/shared/components/ImagesView/SwapView.js +22 -39
  97. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
  98. package/lib/esm/client/shared/components/PageFooter/Paging.js +14 -18
  99. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +22 -18
  100. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +37 -60
  101. package/lib/esm/client/shared/components/ResultsPage.js +36 -64
  102. package/lib/esm/client/shared/creeveyClientApi.js +57 -84
  103. package/lib/esm/client/shared/helpers.js +123 -194
  104. package/lib/esm/client/shared/viewMode.js +4 -4
  105. package/lib/esm/creevey.js +3 -5
  106. package/lib/esm/index.js +1 -3
  107. package/lib/esm/server/config.js +2 -4
  108. package/lib/esm/server/docker.js +2 -2
  109. package/lib/esm/server/extract.js +1 -3
  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 +3 -5
  114. package/lib/esm/server/loaders/webpack/compile.js +35 -52
  115. package/lib/esm/server/loaders/webpack/creevey-loader.js +9 -10
  116. package/lib/esm/server/loaders/webpack/dummy-hmr.js +2 -6
  117. package/lib/esm/server/loaders/webpack/mdx-loader.js +2 -2
  118. package/lib/esm/server/loaders/webpack/start.js +1 -1
  119. package/lib/esm/server/master/index.js +2 -2
  120. package/lib/esm/server/master/pool.js +7 -18
  121. package/lib/esm/server/master/runner.js +53 -66
  122. package/lib/esm/server/master/server.js +5 -3
  123. package/lib/esm/server/messages.js +3 -5
  124. package/lib/esm/server/selenium/browser.js +19 -43
  125. package/lib/esm/server/selenium/selenoid.js +4 -6
  126. package/lib/esm/server/stories.js +16 -32
  127. package/lib/esm/server/storybook/entry.js +5 -22
  128. package/lib/esm/server/storybook/helpers.js +11 -20
  129. package/lib/esm/server/storybook/providers/browser.js +4 -5
  130. package/lib/esm/server/storybook/providers/nodejs.js +7 -8
  131. package/lib/esm/server/update.js +1 -5
  132. package/lib/esm/server/utils.js +18 -31
  133. package/lib/esm/server/worker/reporter.js +8 -20
  134. package/lib/esm/server/worker/worker.js +6 -16
  135. package/lib/esm/shared/index.js +78 -0
  136. package/lib/esm/shared/serializeRegExp.js +24 -0
  137. package/lib/types/cli.d.ts +1 -1
  138. package/lib/types/client/addon/Manager.d.ts +37 -37
  139. package/lib/types/client/addon/components/Addon.d.ts +8 -8
  140. package/lib/types/client/addon/components/Icons.d.ts +7 -7
  141. package/lib/types/client/addon/components/Panel.d.ts +9 -9
  142. package/lib/types/client/addon/components/TestSelect.d.ts +8 -9
  143. package/lib/types/client/addon/components/Tools.d.ts +6 -6
  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 +23 -24
  147. package/lib/types/client/addon/preset.ie11.d.ts +10 -0
  148. package/lib/types/client/addon/readyForCapture.d.ts +6 -6
  149. package/lib/types/client/addon/register.d.ts +3 -3
  150. package/lib/types/client/addon/utils.d.ts +3 -2
  151. package/lib/types/client/addon/withCreevey.d.ts +24 -24
  152. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -3
  153. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +24 -25
  154. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -3
  155. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -3
  156. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -3
  157. package/lib/types/client/shared/components/ImagesView/index.d.ts +5 -5
  158. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +8 -9
  159. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +7 -8
  160. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +12 -12
  161. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +16 -17
  162. package/lib/types/client/shared/components/ResultsPage.d.ts +18 -18
  163. package/lib/types/client/shared/creeveyClientApi.d.ts +9 -9
  164. package/lib/types/client/shared/helpers.d.ts +46 -46
  165. package/lib/types/client/shared/viewMode.d.ts +4 -4
  166. package/lib/types/client/web/CreeveyApp.d.ts +11 -12
  167. package/lib/types/client/web/CreeveyContext.d.ts +11 -11
  168. package/lib/types/client/web/CreeveyLoader.d.ts +2 -3
  169. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +19 -19
  170. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +6 -6
  171. package/lib/types/client/web/CreeveyView/SideBar/SideBar.d.ts +14 -14
  172. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +12 -13
  173. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +33 -33
  174. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +7 -8
  175. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +10 -10
  176. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +9 -9
  177. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +6 -6
  178. package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +1 -1
  179. package/lib/types/client/web/KeyboardEventsContext.d.ts +13 -13
  180. package/lib/types/client/web/index.d.ts +4 -4
  181. package/lib/types/creevey.d.ts +1 -1
  182. package/lib/types/index.d.ts +0 -1
  183. package/lib/types/server/config.d.ts +4 -4
  184. package/lib/types/server/docker.d.ts +7 -7
  185. package/lib/types/server/extract.d.ts +2 -2
  186. package/lib/types/server/index.d.ts +2 -2
  187. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +1 -1
  188. package/lib/types/server/loaders/babel/helpers.d.ts +19 -19
  189. package/lib/types/server/loaders/babel/register.d.ts +5 -5
  190. package/lib/types/server/loaders/hooks/mdx.d.ts +1 -1
  191. package/lib/types/server/loaders/hooks/svelte.d.ts +1 -1
  192. package/lib/types/server/loaders/webpack/compile.d.ts +2 -2
  193. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +4 -2
  194. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +10 -10
  195. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +6 -6
  196. package/lib/types/server/loaders/webpack/start.d.ts +1 -1
  197. package/lib/types/server/logger.d.ts +10 -6
  198. package/lib/types/server/master/api.d.ts +7 -7
  199. package/lib/types/server/master/index.d.ts +3 -3
  200. package/lib/types/server/master/master.d.ts +7 -7
  201. package/lib/types/server/master/pool.d.ts +31 -31
  202. package/lib/types/server/master/runner.d.ts +26 -26
  203. package/lib/types/server/master/server.d.ts +2 -2
  204. package/lib/types/server/messages.d.ts +27 -27
  205. package/lib/types/server/selenium/browser.d.ts +17 -17
  206. package/lib/types/server/selenium/index.d.ts +2 -2
  207. package/lib/types/server/selenium/selenoid.d.ts +3 -3
  208. package/lib/types/server/stories.d.ts +8 -8
  209. package/lib/types/server/storybook/entry.d.ts +17 -18
  210. package/lib/types/server/storybook/helpers.d.ts +24 -24
  211. package/lib/types/server/storybook/providers/browser.d.ts +4 -4
  212. package/lib/types/server/storybook/providers/hybrid.d.ts +4 -4
  213. package/lib/types/server/storybook/providers/nodejs.d.ts +9 -9
  214. package/lib/types/server/testsFiles/parser.d.ts +12 -12
  215. package/lib/types/server/testsFiles/register.d.ts +2 -2
  216. package/lib/types/server/update.d.ts +2 -2
  217. package/lib/types/server/utils.d.ts +24 -20
  218. package/lib/types/server/worker/chai-image.d.ts +6 -6
  219. package/lib/types/server/worker/helpers.d.ts +8 -8
  220. package/lib/types/server/worker/index.d.ts +1 -1
  221. package/lib/types/server/worker/reporter.d.ts +8 -8
  222. package/lib/types/server/worker/worker.d.ts +4 -4
  223. package/lib/types/{shared.d.ts → shared/index.d.ts} +7 -16
  224. package/lib/types/shared/serializeRegExp.d.ts +9 -0
  225. package/lib/types/types.d.ts +489 -489
  226. package/package.json +114 -102
  227. package/preset/ie11.js +5 -0
  228. package/{preset.js → preset/index.js} +2 -2
  229. package/types/mdx.d.ts +3 -2
  230. package/lib/cjs/client/web/1.js +0 -13
  231. package/lib/cjs/client/web/2.js +0 -1
  232. package/lib/cjs/shared.js +0 -124
  233. package/lib/esm/shared.js +0 -93
  234. package/storybook-static/stories.json +0 -21
@@ -4,19 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
- var _global$__CREEVEY_HMR;
9
-
10
- global.__CREEVEY_HMR_DATA__ = (_global$__CREEVEY_HMR = global.__CREEVEY_HMR_DATA__) !== null && _global$__CREEVEY_HMR !== void 0 ? _global$__CREEVEY_HMR : {};
7
+ global.__CREEVEY_HMR_DATA__ = global.__CREEVEY_HMR_DATA__ ?? {};
11
8
  Object.entries(__webpack_require__.m).forEach(([key, moduleFn]) => {
12
9
  __webpack_require__.m[key] = new Proxy(moduleFn, {
13
10
  apply(target, thisArg, args) {
14
- var _global$__CREEVEY_HMR2;
15
-
16
11
  const [module] = args;
17
12
  const {
18
13
  data
19
- } = global.__CREEVEY_HMR_DATA__[module.i] = (_global$__CREEVEY_HMR2 = global.__CREEVEY_HMR_DATA__[module.i]) !== null && _global$__CREEVEY_HMR2 !== void 0 ? _global$__CREEVEY_HMR2 : {
14
+ } = global.__CREEVEY_HMR_DATA__[module.i] = global.__CREEVEY_HMR_DATA__[module.i] ?? {
20
15
  data: {}
21
16
  };
22
17
  Object.assign(module, {
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.webpack = webpack;
7
6
  exports.mdxOptions = exports.mdxLoaders = void 0;
7
+ exports.webpack = webpack;
8
8
 
9
9
  var _helpers = require("../../storybook/helpers");
10
10
 
@@ -58,7 +58,7 @@ function webpack(webpackConfig = {}, options = {}) {
58
58
  configureJSX = true
59
59
  } = options;
60
60
  exports.mdxLoaders = mdxLoaders = [{
61
- loader: (0, _helpers.isStorybookVersionLessThan)(6, 2) ? (0, _helpers.resolveFromStorybookCore)('babel-loader') : (0, _helpers.resolveFromStorybookBuilderWebpack4)('babel-loader'),
61
+ loader: (0, _helpers.resolveFromStorybookBuilderWebpack4)('babel-loader'),
62
62
  options: createBabelOptions({
63
63
  babelOptions,
64
64
  mdxBabelOptions,
@@ -23,7 +23,7 @@ function startWebpackCompiler() {
23
23
 
24
24
  webpackCompiler.on('message', message => {
25
25
  if (!(0, _types.isWebpackMessage)(message)) return;
26
- Object.values(_cluster.default.workers).filter(worker => worker != webpackCompiler).forEach(worker => worker === null || worker === void 0 ? void 0 : worker.send(message));
26
+ Object.values(_cluster.default.workers ?? {}).filter(worker => worker != webpackCompiler).forEach(worker => worker === null || worker === void 0 ? void 0 : worker.send(message));
27
27
 
28
28
  switch (message.type) {
29
29
  case 'success':
@@ -3,13 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.colors = void 0;
6
7
  Object.defineProperty(exports, "getLogger", {
7
8
  enumerable: true,
8
9
  get: function () {
9
10
  return _loglevel.getLogger;
10
11
  }
11
12
  });
12
- exports.logger = exports.colors = void 0;
13
+ exports.logger = void 0;
13
14
 
14
15
  var _chalk = _interopRequireDefault(require("chalk"));
15
16
 
@@ -126,9 +126,9 @@ async function _default(config, options, resolveApi) {
126
126
  }
127
127
 
128
128
  runner.once('stop', () => {
129
- var _runner$status$tests, _runner6;
129
+ var _runner6;
130
130
 
131
- const tests = Object.values((_runner$status$tests = (_runner6 = runner) === null || _runner6 === void 0 ? void 0 : _runner6.status.tests) !== null && _runner$status$tests !== void 0 ? _runner$status$tests : {});
131
+ const tests = Object.values(((_runner6 = runner) === null || _runner6 === void 0 ? void 0 : _runner6.status.tests) ?? {});
132
132
  const isSuccess = tests.filter(_types.isDefined).filter(({
133
133
  skip
134
134
  }) => !skip).every(({
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _cluster = _interopRequireDefault(require("cluster"));
8
+ var _cluster = _interopRequireWildcard(require("cluster"));
9
9
 
10
10
  var _events = require("events");
11
11
 
@@ -15,13 +15,17 @@ var _messages = require("../messages");
15
15
 
16
16
  var _utils = require("../utils");
17
17
 
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ 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); }
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; }
20
+ 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; }
21
21
 
22
22
  const FORK_RETRIES = 5;
23
23
 
24
24
  class Pool extends _events.EventEmitter {
25
+ workers = [];
26
+ queue = [];
27
+ forcedStop = false;
28
+
25
29
  get isRunning() {
26
30
  return this.workers.length !== this.freeWorkers.length;
27
31
  }
@@ -29,19 +33,6 @@ class Pool extends _events.EventEmitter {
29
33
  constructor(config, browser) {
30
34
  super();
31
35
  this.browser = browser;
32
-
33
- _defineProperty(this, "maxRetries", void 0);
34
-
35
- _defineProperty(this, "config", void 0);
36
-
37
- _defineProperty(this, "workers", []);
38
-
39
- _defineProperty(this, "queue", []);
40
-
41
- _defineProperty(this, "forcedStop", false);
42
-
43
- _defineProperty(this, "failFast", void 0);
44
-
45
36
  this.failFast = config.failFast;
46
37
  this.maxRetries = config.maxRetries;
47
38
  this.config = config.browsers[browser];
@@ -51,7 +42,7 @@ class Pool extends _events.EventEmitter {
51
42
  const poolSize = this.config.limit || 1;
52
43
  this.workers = (await Promise.all(Array.from({
53
44
  length: poolSize
54
- }).map(() => this.forkWorker()))).filter(workerOrError => workerOrError instanceof _cluster.default.Worker);
45
+ }).map(() => this.forkWorker()))).filter(workerOrError => workerOrError instanceof _cluster.Worker);
55
46
  if (this.workers.length != poolSize) throw new Error(`Can't instantiate workers for ${this.browser} due many errors`);
56
47
  this.workers.forEach(worker => this.exitHandler(worker));
57
48
  }
@@ -151,7 +142,7 @@ class Pool extends _events.EventEmitter {
151
142
  worker.once('exit', async () => {
152
143
  if (_utils.isShuttingDown.current) return;
153
144
  const workerOrError = await this.forkWorker();
154
- if (!(workerOrError instanceof _cluster.default.Worker)) throw new Error(`Can't instantiate worker for ${this.browser} due many errors`);
145
+ if (!(workerOrError instanceof _cluster.Worker)) throw new Error(`Can't instantiate worker for ${this.browser} due many errors`);
155
146
  this.exitHandler(workerOrError);
156
147
  this.workers[this.workers.indexOf(worker)] = workerOrError;
157
148
  this.process();
@@ -19,69 +19,44 @@ var _pool = _interopRequireDefault(require("./pool"));
19
19
 
20
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
21
 
22
- 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; }
23
-
24
22
  const copyFileAsync = (0, _util.promisify)(_fs.copyFile);
25
23
  const mkdirAsync = (0, _util.promisify)(_fs.mkdir);
26
24
 
27
25
  class Runner extends _events.EventEmitter {
26
+ pools = {};
27
+ tests = {};
28
+
28
29
  get isRunning() {
29
30
  return Object.values(this.pools).some(pool => pool.isRunning);
30
31
  }
31
32
 
32
33
  constructor(config) {
33
34
  super();
35
+ this.failFast = config.failFast;
36
+ this.screenDir = config.screenDir;
37
+ this.reportDir = config.reportDir;
38
+ this.browsers = Object.keys(config.browsers);
39
+ this.browsers.map(browser => this.pools[browser] = new _pool.default(config, browser)).map(pool => pool.on('test', this.handlePoolMessage));
40
+ }
34
41
 
35
- _defineProperty(this, "failFast", void 0);
36
-
37
- _defineProperty(this, "screenDir", void 0);
38
-
39
- _defineProperty(this, "reportDir", void 0);
40
-
41
- _defineProperty(this, "browsers", void 0);
42
-
43
- _defineProperty(this, "pools", {});
44
-
45
- _defineProperty(this, "tests", {});
46
-
47
- _defineProperty(this, "handlePoolMessage", message => {
48
- const {
49
- id,
50
- status,
51
- result
52
- } = message;
53
- const test = this.tests[id];
54
- if (!test) return;
55
- const {
56
- browser,
57
- testName,
58
- storyPath,
59
- storyId
60
- } = test; // TODO Handle 'retrying' status
61
-
62
- test.status = status == 'retrying' ? 'failed' : status;
63
-
64
- if (!result) {
65
- this.sendUpdate({
66
- tests: {
67
- [id]: {
68
- id,
69
- browser,
70
- testName,
71
- storyPath,
72
- status: test.status,
73
- storyId
74
- }
75
- }
76
- });
77
- return;
78
- }
42
+ handlePoolMessage = message => {
43
+ const {
44
+ id,
45
+ status,
46
+ result
47
+ } = message;
48
+ const test = this.tests[id];
49
+ if (!test) return;
50
+ const {
51
+ browser,
52
+ testName,
53
+ storyPath,
54
+ storyId
55
+ } = test; // TODO Handle 'retrying' status
79
56
 
80
- if (!test.results) {
81
- test.results = [];
82
- }
57
+ test.status = status == 'retrying' ? 'failed' : status;
83
58
 
84
- test.results.push(result);
59
+ if (!result) {
85
60
  this.sendUpdate({
86
61
  tests: {
87
62
  [id]: {
@@ -90,29 +65,41 @@ class Runner extends _events.EventEmitter {
90
65
  testName,
91
66
  storyPath,
92
67
  status: test.status,
93
- results: [result],
94
68
  storyId
95
69
  }
96
70
  }
97
71
  });
98
- if (this.failFast && status == 'failed') this.stop();
99
- });
72
+ return;
73
+ }
100
74
 
101
- _defineProperty(this, "handlePoolStop", () => {
102
- if (!this.isRunning) {
103
- this.sendUpdate({
104
- isRunning: false
105
- });
106
- this.emit('stop');
75
+ if (!test.results) {
76
+ test.results = [];
77
+ }
78
+
79
+ test.results.push(result);
80
+ this.sendUpdate({
81
+ tests: {
82
+ [id]: {
83
+ id,
84
+ browser,
85
+ testName,
86
+ storyPath,
87
+ status: test.status,
88
+ results: [result],
89
+ storyId
90
+ }
107
91
  }
108
92
  });
109
-
110
- this.failFast = config.failFast;
111
- this.screenDir = config.screenDir;
112
- this.reportDir = config.reportDir;
113
- this.browsers = Object.keys(config.browsers);
114
- this.browsers.map(browser => this.pools[browser] = new _pool.default(config, browser)).map(pool => pool.on('test', this.handlePoolMessage));
115
- }
93
+ if (this.failFast && status == 'failed') this.stop();
94
+ };
95
+ handlePoolStop = () => {
96
+ if (!this.isRunning) {
97
+ this.sendUpdate({
98
+ isRunning: false
99
+ });
100
+ this.emit('stop');
101
+ }
102
+ };
116
103
 
117
104
  async init() {
118
105
  await Promise.all(Object.values(this.pools).map(pool => pool.init()));
@@ -75,7 +75,7 @@ function server(reportDir, port, ui) {
75
75
  type: 'update',
76
76
  payload: deserializedStories
77
77
  });
78
- Object.values(_cluster.default.workers).filter(_types.isDefined).filter(worker => worker.isConnected()).forEach(worker => (0, _messages.sendStoriesMessage)(worker, {
78
+ Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).filter(worker => worker.isConnected()).forEach(worker => (0, _messages.sendStoriesMessage)(worker, {
79
79
  type: 'update',
80
80
  payload: deserializedStories
81
81
  }));
@@ -90,7 +90,7 @@ function server(reportDir, port, ui) {
90
90
  workerId,
91
91
  options
92
92
  } = ctx.request.body;
93
- const worker = Object.values(_cluster.default.workers).filter(_types.isDefined).find(worker => worker.process.pid == workerId); // NOTE: Hypothetical case when someone send to us capture req and we don't have a worker with browser session for it
93
+ const worker = Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).find(worker => worker.process.pid == workerId); // NOTE: Hypothetical case when someone send to us capture req and we don't have a worker with browser session for it
94
94
 
95
95
  if (!worker) return;
96
96
  await new Promise(resolve => {
@@ -122,7 +122,9 @@ function server(reportDir, port, ui) {
122
122
  void creeveyApi.then(api => {
123
123
  api.subscribe(wss);
124
124
  wss.on('connection', ws => {
125
- ws.on('message', message => api.handleMessage(ws, message));
125
+ ws.on('message', (message, isBinary) => {
126
+ api.handleMessage(ws, isBinary ? message : message.toString());
127
+ });
126
128
  });
127
129
  });
128
130
  return resolveApi;
@@ -3,16 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.emitWorkerMessage = emitWorkerMessage;
6
+ exports.emitDockerMessage = emitDockerMessage;
7
+ exports.emitShutdownMessage = emitShutdownMessage;
7
8
  exports.emitStoriesMessage = emitStoriesMessage;
8
9
  exports.emitTestMessage = emitTestMessage;
9
10
  exports.emitWebpackMessage = emitWebpackMessage;
10
- exports.emitDockerMessage = emitDockerMessage;
11
- exports.emitShutdownMessage = emitShutdownMessage;
12
- exports.sendStoriesMessage = sendStoriesMessage;
13
- exports.sendTestMessage = sendTestMessage;
11
+ exports.emitWorkerMessage = emitWorkerMessage;
14
12
  exports.sendDockerMessage = sendDockerMessage;
15
13
  exports.sendShutdownMessage = sendShutdownMessage;
14
+ exports.sendStoriesMessage = sendStoriesMessage;
15
+ exports.sendTestMessage = sendTestMessage;
16
16
  exports.subscribeOn = subscribeOn;
17
17
  exports.subscribeOnWorker = subscribeOnWorker;
18
18
 
@@ -21,10 +21,10 @@ var _cluster = _interopRequireDefault(require("cluster"));
21
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
22
 
23
23
  function emitMessage(message) {
24
- var _process$send, _process$send2, _process;
24
+ var _process$send, _process;
25
25
 
26
26
  if (_cluster.default.isWorker && !process.connected) return false;
27
- return (_process$send = (_process$send2 = (_process = process).send) === null || _process$send2 === void 0 ? void 0 : _process$send2.call(_process, message)) !== null && _process$send !== void 0 ? _process$send : // @ts-expect-error: wrong typings `process.emit` return boolean
27
+ return ((_process$send = (_process = process).send) === null || _process$send === void 0 ? void 0 : _process$send.call(_process, message)) ?? // @ts-expect-error: wrong typings `process.emit` return boolean
28
28
  process.emit('message', message);
29
29
  }
30
30
 
@@ -190,9 +190,7 @@ function subscribeOn(scope, handler) {
190
190
  const workers = new Map();
191
191
 
192
192
  function subscribeOnWorker(worker, scope, handler) {
193
- var _workers$get;
194
-
195
- const workerHandlers = (_workers$get = workers.get(worker)) !== null && _workers$get !== void 0 ? _workers$get : createHandlers();
193
+ const workerHandlers = workers.get(worker) ?? createHandlers();
196
194
 
197
195
  if (!workers.has(worker)) {
198
196
  workers.set(worker, workerHandlers);
@@ -3,12 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.takeScreenshot = takeScreenshot;
7
- exports.updateStorybookGlobals = updateStorybookGlobals;
8
- exports.loadStoriesFromBrowser = loadStoriesFromBrowser;
9
- exports.getBrowser = getBrowser;
10
6
  exports.closeBrowser = closeBrowser;
7
+ exports.getBrowser = getBrowser;
8
+ exports.loadStoriesFromBrowser = loadStoriesFromBrowser;
11
9
  exports.switchStory = switchStory;
10
+ exports.takeScreenshot = takeScreenshot;
11
+ exports.updateStorybookGlobals = updateStorybookGlobals;
12
12
 
13
13
  var _chalk = _interopRequireDefault(require("chalk"));
14
14
 
@@ -51,9 +51,7 @@ function getSessionData(grid, sessionId = '') {
51
51
  gridUrl.pathname = `/host/${sessionId}`;
52
52
  return new Promise((resolve, reject) => (gridUrl.protocol == 'https:' ? _https.default : _http.default).get(gridUrl.toString(), res => {
53
53
  if (res.statusCode !== 200) {
54
- var _res$statusCode;
55
-
56
- return reject(new Error(`Couldn't get session data for ${sessionId}. Status code: ${(_res$statusCode = res.statusCode) !== null && _res$statusCode !== void 0 ? _res$statusCode : 'Unknown'}`));
54
+ return reject(new Error(`Couldn't get session data for ${sessionId}. Status code: ${res.statusCode ?? 'Unknown'}`));
57
55
  }
58
56
 
59
57
  let data = '';
@@ -63,9 +61,7 @@ function getSessionData(grid, sessionId = '') {
63
61
  try {
64
62
  resolve(JSON.parse(data));
65
63
  } catch (error) {
66
- var _error$stack;
67
-
68
- reject(new Error(`Couldn't get session data for ${sessionId}. ${error instanceof Error ? (_error$stack = error.stack) !== null && _error$stack !== void 0 ? _error$stack : error.message : error}`));
64
+ reject(new Error(`Couldn't get session data for ${sessionId}. ${error instanceof Error ? error.stack ?? error.message : error}`));
69
65
  }
70
66
  });
71
67
  }));
@@ -131,17 +127,6 @@ function getUrlChecker(browser) {
131
127
  }
132
128
 
133
129
  async function waitForStorybook(browser) {
134
- // NOTE: Storybook 5.x doesn't have the `last` method
135
- if ((0, _helpers.isStorybookVersionLessThan)(6)) {
136
- browserLogger.debug('Waiting for `load` event to make sure that storybook is initiated');
137
- return browser.executeAsyncScript(function (callback) {
138
- if (document.readyState == 'complete') return callback();
139
- window.addEventListener('load', function () {
140
- callback();
141
- });
142
- });
143
- }
144
-
145
130
  browserLogger.debug('Waiting for `setStories` event to make sure that storybook is initiated');
146
131
  let wait = true;
147
132
  let isTimeout = false;
@@ -164,11 +149,11 @@ async function waitForStorybook(browser) {
164
149
  }
165
150
 
166
151
  async function resetMousePosition(browser) {
167
- var _ref, _await$browser$getCap, _await$browser$getCap2, _await$browser$getCap3;
152
+ var _await$browser$getCap, _await$browser$getCap2;
168
153
 
169
154
  browserLogger.debug('Resetting mouse position to the top-left corner');
170
155
  const browserName = (await browser.getCapabilities()).getBrowserName();
171
- const [browserVersion] = (_ref = (_await$browser$getCap = (_await$browser$getCap2 = (await browser.getCapabilities()).getBrowserVersion()) === null || _await$browser$getCap2 === void 0 ? void 0 : _await$browser$getCap2.split('.')) !== null && _await$browser$getCap !== void 0 ? _await$browser$getCap : (_await$browser$getCap3 = (await browser.getCapabilities()).get('version')) === null || _await$browser$getCap3 === void 0 ? void 0 : _await$browser$getCap3.split('.')) !== null && _ref !== void 0 ? _ref : []; // NOTE Reset mouse position to support keweb selenium grid browser versions
156
+ const [browserVersion] = ((_await$browser$getCap = (await browser.getCapabilities()).getBrowserVersion()) === null || _await$browser$getCap === void 0 ? void 0 : _await$browser$getCap.split('.')) ?? ((_await$browser$getCap2 = (await browser.getCapabilities()).get('version')) === null || _await$browser$getCap2 === void 0 ? void 0 : _await$browser$getCap2.split('.')) ?? []; // NOTE Reset mouse position to support keweb selenium grid browser versions
172
157
 
173
158
  if (browserName == 'chrome' && browserVersion == '70') {
174
159
  const {
@@ -252,10 +237,10 @@ const getScrollBarWidth = (() => {
252
237
 
253
238
 
254
239
  async function hasScrollBar(browser) {
255
- var _await$browser$getCap4, _await$browser$getCap5;
240
+ var _await$browser$getCap3;
256
241
 
257
242
  const browserName = (await browser.getCapabilities()).getBrowserName();
258
- const [browserVersion] = (_await$browser$getCap4 = (_await$browser$getCap5 = (await browser.getCapabilities()).getBrowserVersion()) === null || _await$browser$getCap5 === void 0 ? void 0 : _await$browser$getCap5.split('.')) !== null && _await$browser$getCap4 !== void 0 ? _await$browser$getCap4 : [];
243
+ const [browserVersion] = ((_await$browser$getCap3 = (await browser.getCapabilities()).getBrowserVersion()) === null || _await$browser$getCap3 === void 0 ? void 0 : _await$browser$getCap3.split('.')) ?? [];
259
244
  return browserName != 'Safari' && // NOTE This need to work with keweb selenium grid
260
245
  !(browserName == 'firefox' && browserVersion == '61');
261
246
  }
@@ -306,7 +291,8 @@ async function takeCompositeScreenshot(browser, windowRect, elementRect) {
306
291
  const scrollOffset = isFitVertically || isScreenshotWithoutScrollBar ? 0 : scrollBarWidth;
307
292
  const i = (y * compositeImage.width + x) * 4;
308
293
  const j = // NOTE compositeImage(x, y) => image(x, y)
309
- (y % viewportHeight * (viewportWidth + scrollOffset) + x % viewportWidth) * 4 + (isLastRow ? yOffset * (viewportWidth + scrollOffset) * 4 : 0) + (isLastCol ? xOffset * 4 : 0);
294
+ (y % viewportHeight * (viewportWidth + scrollOffset) + x % viewportWidth) * 4 + ( // NOTE Offset for last row/col image
295
+ isLastRow ? yOffset * (viewportWidth + scrollOffset) * 4 : 0) + (isLastCol ? xOffset * 4 : 0);
310
296
  const image = images[row * cols + col];
311
297
  compositeImage.data[i + 0] = image.data[j + 0];
312
298
  compositeImage.data[i + 1] = image.data[j + 1];
@@ -355,7 +341,7 @@ async function takeScreenshot(browser, captureElement, ignoreElements) {
355
341
  const {
356
342
  elementRect,
357
343
  windowRect
358
- } = rects !== null && rects !== void 0 ? rects : {};
344
+ } = rects ?? {};
359
345
  if (!elementRect || !windowRect) throw new Error(`Couldn't find element with selector: '${captureElement}'`);
360
346
  const isFitIntoViewport = elementRect.width + elementRect.left <= windowRect.width && elementRect.height + elementRect.top <= windowRect.height;
361
347
  if (isFitIntoViewport) browserLogger.debug(`Capturing ${_chalk.default.cyan(captureElement)}`);else browserLogger.debug(`Capturing composite screenshot image of ${_chalk.default.cyan(captureElement)}`);
@@ -381,19 +367,14 @@ async function selectStory(browser, {
381
367
  return callback(["Creevey can't switch story. This may happened if forget to add `creevey` addon to your storybook config, or storybook not loaded in browser due syntax error."]);
382
368
  }
383
369
 
384
- window.__CREEVEY_SELECT_STORY__(id, kind, name, shouldWaitForReady, callback);
370
+ void window.__CREEVEY_SELECT_STORY__(id, kind, name, shouldWaitForReady, callback);
385
371
  }, id, kind, name, waitForReady);
386
- const [errorMessage, isCaptureCalled = false] = result || [];
372
+ const [errorMessage, isCaptureCalled = false] = result ?? [];
387
373
  if (errorMessage) throw new Error(errorMessage);
388
374
  return isCaptureCalled;
389
375
  }
390
376
 
391
377
  async function updateStorybookGlobals(browser, globals) {
392
- if ((0, _helpers.isStorybookVersionLessThan)(6)) {
393
- browserLogger.warn('Globals are not supported by Storybook versions less than 6');
394
- return;
395
- }
396
-
397
378
  browserLogger.debug('Applying storybook globals');
398
379
  await browser.executeScript(function (globals) {
399
380
  window.__CREEVEY_UPDATE_GLOBALS__(globals);
@@ -430,11 +411,8 @@ async function resolveCreeveyHost(browser, port) {
430
411
  const addresses = getAddresses();
431
412
  creeveyServerHost = await browser.executeAsyncScript(function (hosts, port, callback) {
432
413
  void Promise.all(hosts.map(function (host) {
433
- return new Promise(function (resolve, reject) {
434
- setTimeout(reject, 10000); // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
435
-
436
- fetch('//' + host + ':' + port + '/ping').then(resolve).catch(reject);
437
- }).then(function (response) {
414
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
415
+ return fetch('http://' + host + ':' + port + '/ping').then(function (response) {
438
416
  return response.text();
439
417
  }).then(function (pong) {
440
418
  return pong == 'pong' ? host : null;
@@ -530,7 +508,7 @@ async function getBrowser(config, name) {
530
508
  });
531
509
  }, () => viewport && browser && resizeViewport(browser, viewport), () => browser && openStorybookPage(browser, realAddress, config.resolveStorybookUrl), () => browser && waitForStorybook(browser)], () => !_utils.isShuttingDown.current);
532
510
  } catch (originalError) {
533
- var _await$browser$getCur, _browser4;
511
+ var _browser4;
534
512
 
535
513
  if (_utils.isShuttingDown.current) {
536
514
  var _browser3;
@@ -541,7 +519,7 @@ async function getBrowser(config, name) {
541
519
  }
542
520
 
543
521
  if (originalError instanceof Error && originalError.name == 'ResolveUrlError') throw originalError;
544
- const error = new Error(`Can't load storybook root page by URL ${(_await$browser$getCur = await ((_browser4 = browser) === null || _browser4 === void 0 ? void 0 : _browser4.getCurrentUrl())) !== null && _await$browser$getCur !== void 0 ? _await$browser$getCur : realAddress}`);
522
+ const error = new Error(`Can't load storybook root page by URL ${(await ((_browser4 = browser) === null || _browser4 === void 0 ? void 0 : _browser4.getCurrentUrl())) ?? realAddress}`);
545
523
  if (originalError instanceof Error) error.stack = originalError.stack;
546
524
  throw error;
547
525
  }
@@ -579,7 +557,7 @@ async function closeBrowser() {
579
557
  }
580
558
 
581
559
  async function switchStory() {
582
- var _this$currentTest, _this$currentTest$ctx, _parameters$creevey;
560
+ var _this$currentTest, _this$currentTest$ctx;
583
561
 
584
562
  let testOrSuite = this.currentTest;
585
563
  if (!testOrSuite) throw new Error("Can't switch story, because test context doesn't have 'currentTest' field");
@@ -606,7 +584,7 @@ async function switchStory() {
606
584
  captureElement = '#root',
607
585
  waitForReady,
608
586
  ignoreElements
609
- } = (_parameters$creevey = parameters.creevey) !== null && _parameters$creevey !== void 0 ? _parameters$creevey : {};
587
+ } = parameters.creevey ?? {};
610
588
  browserLogger.debug(`Switching to story ${_chalk.default.cyan(kind)}/${_chalk.default.cyan(name)} by id ${_chalk.default.magenta(id)}`);
611
589
  if (captureElement) Object.defineProperty(this, 'captureElement', {
612
590
  enumerable: true,
@@ -622,8 +600,6 @@ async function switchStory() {
622
600
  let storyPlayResolver;
623
601
  let waitForComplete = new Promise(resolve => storyPlayResolver = resolve);
624
602
  const unsubscribe = (0, _messages.subscribeOn)('stories', message => {
625
- var _payload$captureEleme, _payload$ignoreElemen;
626
-
627
603
  if (message.type != 'capture') return;
628
604
  const {
629
605
  payload = {},
@@ -631,7 +607,7 @@ async function switchStory() {
631
607
  imageName
632
608
  } = {}
633
609
  } = message;
634
- void takeScreenshot(this.browser, (_payload$captureEleme = payload.captureElement) !== null && _payload$captureEleme !== void 0 ? _payload$captureEleme : captureElement, (_payload$ignoreElemen = payload.ignoreElements) !== null && _payload$ignoreElemen !== void 0 ? _payload$ignoreElemen : ignoreElements).then(screenshot => {
610
+ void takeScreenshot(this.browser, payload.captureElement ?? captureElement, payload.ignoreElements ?? ignoreElements).then(screenshot => {
635
611
  this.screenshots.push({
636
612
  imageName,
637
613
  screenshot
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.startSelenoidStandalone = startSelenoidStandalone;
7
6
  exports.startSelenoidContainer = startSelenoidContainer;
7
+ exports.startSelenoidStandalone = startSelenoidStandalone;
8
8
 
9
9
  var _path = _interopRequireDefault(require("path"));
10
10
 
@@ -20,7 +20,7 @@ var _core = require("@octokit/core");
20
20
 
21
21
  var _messages = require("../messages");
22
22
 
23
- var _cluster = require("cluster");
23
+ var _cluster = _interopRequireDefault(require("cluster"));
24
24
 
25
25
  var _shelljs = require("shelljs");
26
26
 
@@ -62,8 +62,6 @@ async function createSelenoidConfig(browsers, {
62
62
  }
63
63
 
64
64
  async function downloadSelenoidBinary(destination) {
65
- var _assets$find;
66
-
67
65
  const platformNameMapping = {
68
66
  darwin: 'selenoid_darwin_amd64',
69
67
  linux: 'selenoid_linux_amd64',
@@ -80,9 +78,9 @@ async function downloadSelenoidBinary(destination) {
80
78
  const {
81
79
  browser_download_url: downloadUrl,
82
80
  size: binarySize
83
- } = (_assets$find = assets.find(({
81
+ } = assets.find(({
84
82
  name
85
- }) => platformNameMapping[process.platform] == name)) !== null && _assets$find !== void 0 ? _assets$find : {};
83
+ }) => platformNameMapping[process.platform] == name) ?? {};
86
84
  if ((0, _fs.existsSync)(destination) && (0, _fs.lstatSync)(destination).size == binarySize) return;
87
85
 
88
86
  if (!downloadUrl) {
@@ -94,7 +92,7 @@ async function downloadSelenoidBinary(destination) {
94
92
 
95
93
  async function startSelenoidStandalone(config, debug) {
96
94
  config.gridUrl = 'http://localhost:4444/wd/hub';
97
- if (_cluster.isWorker) return;
95
+ if (_cluster.default.isWorker) return;
98
96
  const browsers = Object.values(config.browsers).filter(browser => !browser.gridUrl);
99
97
  const selenoidConfigDir = await createSelenoidConfig(browsers, {
100
98
  useDocker: false