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
@@ -51,7 +51,7 @@ export default function server(reportDir, port, ui) {
51
51
  type: 'update',
52
52
  payload: deserializedStories
53
53
  });
54
- Object.values(cluster.workers).filter(isDefined).filter(worker => worker.isConnected()).forEach(worker => sendStoriesMessage(worker, {
54
+ Object.values(cluster.workers ?? {}).filter(isDefined).filter(worker => worker.isConnected()).forEach(worker => sendStoriesMessage(worker, {
55
55
  type: 'update',
56
56
  payload: deserializedStories
57
57
  }));
@@ -66,7 +66,7 @@ export default function server(reportDir, port, ui) {
66
66
  workerId,
67
67
  options
68
68
  } = ctx.request.body;
69
- const worker = Object.values(cluster.workers).filter(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
69
+ const worker = Object.values(cluster.workers ?? {}).filter(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
70
70
 
71
71
  if (!worker) return;
72
72
  await new Promise(resolve => {
@@ -98,7 +98,9 @@ export default function server(reportDir, port, ui) {
98
98
  void creeveyApi.then(api => {
99
99
  api.subscribe(wss);
100
100
  wss.on('connection', ws => {
101
- ws.on('message', message => api.handleMessage(ws, message));
101
+ ws.on('message', (message, isBinary) => {
102
+ api.handleMessage(ws, isBinary ? message : message.toString());
103
+ });
102
104
  });
103
105
  });
104
106
  return resolveApi;
@@ -1,10 +1,10 @@
1
1
  import cluster from 'cluster';
2
2
 
3
3
  function emitMessage(message) {
4
- var _process$send, _process$send2, _process;
4
+ var _process$send, _process;
5
5
 
6
6
  if (cluster.isWorker && !process.connected) return false;
7
- 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
7
+ 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
8
8
  process.emit('message', message);
9
9
  }
10
10
 
@@ -158,9 +158,7 @@ export function subscribeOn(scope, handler) {
158
158
  }
159
159
  const workers = new Map();
160
160
  export function subscribeOnWorker(worker, scope, handler) {
161
- var _workers$get;
162
-
163
- const workerHandlers = (_workers$get = workers.get(worker)) !== null && _workers$get !== void 0 ? _workers$get : createHandlers();
161
+ const workerHandlers = workers.get(worker) ?? createHandlers();
164
162
 
165
163
  if (!workers.has(worker)) {
166
164
  workers.set(worker, workerHandlers);
@@ -10,7 +10,7 @@ import { PageLoadStrategy } from 'selenium-webdriver/lib/capabilities';
10
10
  import { isDefined, noop } from '../../types';
11
11
  import { colors, logger } from '../logger';
12
12
  import { emitStoriesMessage, subscribeOn } from '../messages';
13
- import { importStorybookCoreEvents, isStorybookVersionLessThan } from '../storybook/helpers';
13
+ import { importStorybookCoreEvents } from '../storybook/helpers';
14
14
  import { isShuttingDown, LOCALHOST_REGEXP, runSequence } from '../utils';
15
15
  const DOCKER_INTERNAL = 'host.docker.internal';
16
16
  let browserLogger = logger;
@@ -23,9 +23,7 @@ function getSessionData(grid, sessionId = '') {
23
23
  gridUrl.pathname = `/host/${sessionId}`;
24
24
  return new Promise((resolve, reject) => (gridUrl.protocol == 'https:' ? https : http).get(gridUrl.toString(), res => {
25
25
  if (res.statusCode !== 200) {
26
- var _res$statusCode;
27
-
28
- 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'}`));
26
+ return reject(new Error(`Couldn't get session data for ${sessionId}. Status code: ${res.statusCode ?? 'Unknown'}`));
29
27
  }
30
28
 
31
29
  let data = '';
@@ -35,9 +33,7 @@ function getSessionData(grid, sessionId = '') {
35
33
  try {
36
34
  resolve(JSON.parse(data));
37
35
  } catch (error) {
38
- var _error$stack;
39
-
40
- 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}`));
36
+ reject(new Error(`Couldn't get session data for ${sessionId}. ${error instanceof Error ? error.stack ?? error.message : error}`));
41
37
  }
42
38
  });
43
39
  }));
@@ -103,17 +99,6 @@ function getUrlChecker(browser) {
103
99
  }
104
100
 
105
101
  async function waitForStorybook(browser) {
106
- // NOTE: Storybook 5.x doesn't have the `last` method
107
- if (isStorybookVersionLessThan(6)) {
108
- browserLogger.debug('Waiting for `load` event to make sure that storybook is initiated');
109
- return browser.executeAsyncScript(function (callback) {
110
- if (document.readyState == 'complete') return callback();
111
- window.addEventListener('load', function () {
112
- callback();
113
- });
114
- });
115
- }
116
-
117
102
  browserLogger.debug('Waiting for `setStories` event to make sure that storybook is initiated');
118
103
  let wait = true;
119
104
  let isTimeout = false;
@@ -136,11 +121,11 @@ async function waitForStorybook(browser) {
136
121
  }
137
122
 
138
123
  async function resetMousePosition(browser) {
139
- var _ref, _await$browser$getCap, _await$browser$getCap2, _await$browser$getCap3;
124
+ var _await$browser$getCap, _await$browser$getCap2;
140
125
 
141
126
  browserLogger.debug('Resetting mouse position to the top-left corner');
142
127
  const browserName = (await browser.getCapabilities()).getBrowserName();
143
- 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
128
+ 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
144
129
 
145
130
  if (browserName == 'chrome' && browserVersion == '70') {
146
131
  const {
@@ -224,10 +209,10 @@ const getScrollBarWidth = (() => {
224
209
 
225
210
 
226
211
  async function hasScrollBar(browser) {
227
- var _await$browser$getCap4, _await$browser$getCap5;
212
+ var _await$browser$getCap3;
228
213
 
229
214
  const browserName = (await browser.getCapabilities()).getBrowserName();
230
- 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 : [];
215
+ const [browserVersion] = ((_await$browser$getCap3 = (await browser.getCapabilities()).getBrowserVersion()) === null || _await$browser$getCap3 === void 0 ? void 0 : _await$browser$getCap3.split('.')) ?? [];
231
216
  return browserName != 'Safari' && // NOTE This need to work with keweb selenium grid
232
217
  !(browserName == 'firefox' && browserVersion == '61');
233
218
  }
@@ -278,7 +263,8 @@ async function takeCompositeScreenshot(browser, windowRect, elementRect) {
278
263
  const scrollOffset = isFitVertically || isScreenshotWithoutScrollBar ? 0 : scrollBarWidth;
279
264
  const i = (y * compositeImage.width + x) * 4;
280
265
  const j = // NOTE compositeImage(x, y) => image(x, y)
281
- (y % viewportHeight * (viewportWidth + scrollOffset) + x % viewportWidth) * 4 + (isLastRow ? yOffset * (viewportWidth + scrollOffset) * 4 : 0) + (isLastCol ? xOffset * 4 : 0);
266
+ (y % viewportHeight * (viewportWidth + scrollOffset) + x % viewportWidth) * 4 + ( // NOTE Offset for last row/col image
267
+ isLastRow ? yOffset * (viewportWidth + scrollOffset) * 4 : 0) + (isLastCol ? xOffset * 4 : 0);
282
268
  const image = images[row * cols + col];
283
269
  compositeImage.data[i + 0] = image.data[j + 0];
284
270
  compositeImage.data[i + 1] = image.data[j + 1];
@@ -327,7 +313,7 @@ export async function takeScreenshot(browser, captureElement, ignoreElements) {
327
313
  const {
328
314
  elementRect,
329
315
  windowRect
330
- } = rects !== null && rects !== void 0 ? rects : {};
316
+ } = rects ?? {};
331
317
  if (!elementRect || !windowRect) throw new Error(`Couldn't find element with selector: '${captureElement}'`);
332
318
  const isFitIntoViewport = elementRect.width + elementRect.left <= windowRect.width && elementRect.height + elementRect.top <= windowRect.height;
333
319
  if (isFitIntoViewport) browserLogger.debug(`Capturing ${chalk.cyan(captureElement)}`);else browserLogger.debug(`Capturing composite screenshot image of ${chalk.cyan(captureElement)}`);
@@ -353,19 +339,14 @@ async function selectStory(browser, {
353
339
  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."]);
354
340
  }
355
341
 
356
- window.__CREEVEY_SELECT_STORY__(id, kind, name, shouldWaitForReady, callback);
342
+ void window.__CREEVEY_SELECT_STORY__(id, kind, name, shouldWaitForReady, callback);
357
343
  }, id, kind, name, waitForReady);
358
- const [errorMessage, isCaptureCalled = false] = result || [];
344
+ const [errorMessage, isCaptureCalled = false] = result ?? [];
359
345
  if (errorMessage) throw new Error(errorMessage);
360
346
  return isCaptureCalled;
361
347
  }
362
348
 
363
349
  export async function updateStorybookGlobals(browser, globals) {
364
- if (isStorybookVersionLessThan(6)) {
365
- browserLogger.warn('Globals are not supported by Storybook versions less than 6');
366
- return;
367
- }
368
-
369
350
  browserLogger.debug('Applying storybook globals');
370
351
  await browser.executeScript(function (globals) {
371
352
  window.__CREEVEY_UPDATE_GLOBALS__(globals);
@@ -402,11 +383,8 @@ async function resolveCreeveyHost(browser, port) {
402
383
  const addresses = getAddresses();
403
384
  creeveyServerHost = await browser.executeAsyncScript(function (hosts, port, callback) {
404
385
  void Promise.all(hosts.map(function (host) {
405
- return new Promise(function (resolve, reject) {
406
- setTimeout(reject, 10000); // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
407
-
408
- fetch('//' + host + ':' + port + '/ping').then(resolve).catch(reject);
409
- }).then(function (response) {
386
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
387
+ return fetch('http://' + host + ':' + port + '/ping').then(function (response) {
410
388
  return response.text();
411
389
  }).then(function (pong) {
412
390
  return pong == 'pong' ? host : null;
@@ -498,7 +476,7 @@ export async function getBrowser(config, name) {
498
476
  });
499
477
  }, () => viewport && browser && resizeViewport(browser, viewport), () => browser && openStorybookPage(browser, realAddress, config.resolveStorybookUrl), () => browser && waitForStorybook(browser)], () => !isShuttingDown.current);
500
478
  } catch (originalError) {
501
- var _await$browser$getCur, _browser4;
479
+ var _browser4;
502
480
 
503
481
  if (isShuttingDown.current) {
504
482
  var _browser3;
@@ -509,7 +487,7 @@ export async function getBrowser(config, name) {
509
487
  }
510
488
 
511
489
  if (originalError instanceof Error && originalError.name == 'ResolveUrlError') throw originalError;
512
- 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}`);
490
+ const error = new Error(`Can't load storybook root page by URL ${(await ((_browser4 = browser) === null || _browser4 === void 0 ? void 0 : _browser4.getCurrentUrl())) ?? realAddress}`);
513
491
  if (originalError instanceof Error) error.stack = originalError.stack;
514
492
  throw error;
515
493
  }
@@ -546,7 +524,7 @@ export async function closeBrowser() {
546
524
  }
547
525
  }
548
526
  export async function switchStory() {
549
- var _this$currentTest, _this$currentTest$ctx, _parameters$creevey;
527
+ var _this$currentTest, _this$currentTest$ctx;
550
528
 
551
529
  let testOrSuite = this.currentTest;
552
530
  if (!testOrSuite) throw new Error("Can't switch story, because test context doesn't have 'currentTest' field");
@@ -573,7 +551,7 @@ export async function switchStory() {
573
551
  captureElement = '#root',
574
552
  waitForReady,
575
553
  ignoreElements
576
- } = (_parameters$creevey = parameters.creevey) !== null && _parameters$creevey !== void 0 ? _parameters$creevey : {};
554
+ } = parameters.creevey ?? {};
577
555
  browserLogger.debug(`Switching to story ${chalk.cyan(kind)}/${chalk.cyan(name)} by id ${chalk.magenta(id)}`);
578
556
  if (captureElement) Object.defineProperty(this, 'captureElement', {
579
557
  enumerable: true,
@@ -589,8 +567,6 @@ export async function switchStory() {
589
567
  let storyPlayResolver;
590
568
  let waitForComplete = new Promise(resolve => storyPlayResolver = resolve);
591
569
  const unsubscribe = subscribeOn('stories', message => {
592
- var _payload$captureEleme, _payload$ignoreElemen;
593
-
594
570
  if (message.type != 'capture') return;
595
571
  const {
596
572
  payload = {},
@@ -598,7 +574,7 @@ export async function switchStory() {
598
574
  imageName
599
575
  } = {}
600
576
  } = message;
601
- 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 => {
577
+ void takeScreenshot(this.browser, payload.captureElement ?? captureElement, payload.ignoreElements ?? ignoreElements).then(screenshot => {
602
578
  this.screenshots.push({
603
579
  imageName,
604
580
  screenshot
@@ -5,7 +5,7 @@ import { downloadBinary, getCreeveyCache } from '../utils';
5
5
  import { pullImages, runImage } from '../docker';
6
6
  import { Octokit } from '@octokit/core';
7
7
  import { subscribeOn } from '../messages';
8
- import { isWorker } from 'cluster';
8
+ import cluster from 'cluster';
9
9
  import { chmod, exec } from 'shelljs';
10
10
  const mkdirAsync = promisify(mkdir);
11
11
  const writeFileAsync = promisify(writeFile);
@@ -41,8 +41,6 @@ async function createSelenoidConfig(browsers, {
41
41
  }
42
42
 
43
43
  async function downloadSelenoidBinary(destination) {
44
- var _assets$find;
45
-
46
44
  const platformNameMapping = {
47
45
  darwin: 'selenoid_darwin_amd64',
48
46
  linux: 'selenoid_linux_amd64',
@@ -59,9 +57,9 @@ async function downloadSelenoidBinary(destination) {
59
57
  const {
60
58
  browser_download_url: downloadUrl,
61
59
  size: binarySize
62
- } = (_assets$find = assets.find(({
60
+ } = assets.find(({
63
61
  name
64
- }) => platformNameMapping[process.platform] == name)) !== null && _assets$find !== void 0 ? _assets$find : {};
62
+ }) => platformNameMapping[process.platform] == name) ?? {};
65
63
  if (existsSync(destination) && lstatSync(destination).size == binarySize) return;
66
64
 
67
65
  if (!downloadUrl) {
@@ -73,7 +71,7 @@ async function downloadSelenoidBinary(destination) {
73
71
 
74
72
  export async function startSelenoidStandalone(config, debug) {
75
73
  config.gridUrl = 'http://localhost:4444/wd/hub';
76
- if (isWorker) return;
74
+ if (cluster.isWorker) return;
77
75
  const browsers = Object.values(config.browsers).filter(browser => !browser.gridUrl);
78
76
  const selenoidConfigDir = await createSelenoidConfig(browsers, {
79
77
  useDocker: false
@@ -4,18 +4,15 @@ import { createHash } from 'crypto';
4
4
  import { mapValues, pick } from 'lodash';
5
5
  import { isDefined, isFunction, isObject } from '../types';
6
6
  import { shouldSkip, removeProps } from './utils';
7
- import { isStorybookVersionLessThan } from './storybook/helpers';
8
7
 
9
8
  function storyTestFabric(delay, testFn) {
10
9
  return async function storyTest() {
11
- var _testFn$call;
12
-
13
10
  delay ? await new Promise(resolve => setTimeout(resolve, delay)) : void 0;
14
- await ((_testFn$call = testFn === null || testFn === void 0 ? void 0 : testFn.call(this)) !== null && _testFn$call !== void 0 ? _testFn$call : this.screenshots.length > 0 ? this.expect(this.screenshots.reduce((screenshots, {
11
+ await (testFn ? testFn.call(this) : this.screenshots.length > 0 ? this.expect(this.screenshots.reduce((screenshots, {
15
12
  imageName,
16
13
  screenshot
17
14
  }, index) => ({ ...screenshots,
18
- [imageName !== null && imageName !== void 0 ? imageName : `screenshot_${index}`]: screenshot
15
+ [imageName ?? `screenshot_${index}`]: screenshot
19
16
  }), {})).to.matchImages() : this.expect(await this.takeScreenshot()).to.matchImage());
20
17
  };
21
18
  }
@@ -45,15 +42,13 @@ function createCreeveyTest(browser, storyMeta, skipOptions, testName) {
45
42
  function convertStories(browserName, stories) {
46
43
  const tests = {};
47
44
  (Array.isArray(stories) ? stories : Object.values(stories)).forEach(storyMeta => {
48
- var _storyMeta$parameters;
49
-
50
45
  // TODO Skip docsOnly stories for now
51
46
  if (storyMeta.parameters.docsOnly) return;
52
47
  const {
53
48
  delay: delayParam,
54
49
  tests: storyTests,
55
50
  skip
56
- } = (_storyMeta$parameters = storyMeta.parameters.creevey) !== null && _storyMeta$parameters !== void 0 ? _storyMeta$parameters : {};
51
+ } = storyMeta.parameters.creevey ?? {};
57
52
  const delay = typeof delayParam == 'number' ? delayParam : delayParam !== null && delayParam !== void 0 && delayParam.for.includes(browserName) ? delayParam.ms : 0; // typeof tests === "undefined" => rootSuite -> kindSuite -> storyTest -> [browsers.png]
58
53
  // typeof tests === "function" => rootSuite -> kindSuite -> storyTest -> browser -> [images.png]
59
54
  // typeof tests === "object" => rootSuite -> kindSuite -> storySuite -> test -> [browsers.png]
@@ -88,11 +83,11 @@ export async function loadTestsFromStories(browsers, provider, update) {
88
83
  const tests = {};
89
84
  browsers.forEach(browser => {
90
85
  Array.from(storiesByFiles.entries()).forEach(([filename, stories]) => {
91
- var _testIdsByFiles$get$f, _testIdsByFiles$get;
86
+ var _testIdsByFiles$get;
92
87
 
93
88
  Object.assign(tests, convertStories(browser, stories));
94
89
  const changed = Object.keys(tests);
95
- const removed = (_testIdsByFiles$get$f = (_testIdsByFiles$get = testIdsByFiles.get(filename)) === null || _testIdsByFiles$get === void 0 ? void 0 : _testIdsByFiles$get.filter(testId => !tests[testId])) !== null && _testIdsByFiles$get$f !== void 0 ? _testIdsByFiles$get$f : [];
90
+ const removed = ((_testIdsByFiles$get = testIdsByFiles.get(filename)) === null || _testIdsByFiles$get === void 0 ? void 0 : _testIdsByFiles$get.filter(testId => !tests[testId])) ?? [];
96
91
  if (changed.length == 0) testIdsByFiles.delete(filename);else testIdsByFiles.set(filename, changed);
97
92
  Object.assign(testsDiff, tests);
98
93
  removed.forEach(testId => testsDiff[testId] = undefined);
@@ -108,35 +103,24 @@ export async function loadTestsFromStories(browsers, provider, update) {
108
103
  fileName
109
104
  }
110
105
  }
111
- }) => {
112
- var _testIdsByFiles$get2;
113
-
114
- return (// TODO Don't use filename as a key, due possible collisions if two require.context with same structure of modules are defined
115
- testIdsByFiles.set(fileName, [...((_testIdsByFiles$get2 = testIdsByFiles.get(fileName)) !== null && _testIdsByFiles$get2 !== void 0 ? _testIdsByFiles$get2 : []), id])
116
- );
117
- });
106
+ }) => // TODO Don't use filename as a key, due possible collisions if two require.context with same structure of modules are defined
107
+ testIdsByFiles.set(fileName, [...(testIdsByFiles.get(fileName) ?? []), id]));
118
108
  return tests;
119
109
  }
120
110
  export function saveStoriesJson(storiesData, extract) {
121
- var _storiesData$stories;
122
-
123
- const outputDir = typeof extract == 'boolean' ? 'storybook-static' : extract;
124
-
125
- if (!isStorybookVersionLessThan(6)) {
126
- // NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
127
- const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
128
- storiesData.globalParameters = pick(storiesData.globalParameters, allowed); // @ts-expect-error ignore error
111
+ const outputDir = typeof extract == 'boolean' ? 'storybook-static' : extract; // NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
129
112
 
130
- storiesData.kindParameters = mapValues(storiesData.kindParameters, v => pick(v, allowed)); // @ts-expect-error ignore error
113
+ const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
114
+ storiesData.globalParameters = pick(storiesData.globalParameters, allowed); // @ts-expect-error ignore error
131
115
 
132
- storiesData.stories = mapValues(storiesData.stories, v => ({ ...pick(v, ['id', 'name', 'kind', 'story']),
133
- parameters: pick(v.parameters, allowed)
134
- }));
135
- } // TODO Fix args stories
116
+ storiesData.kindParameters = mapValues(storiesData.kindParameters, v => pick(v, allowed)); // @ts-expect-error ignore error
136
117
 
118
+ storiesData.stories = mapValues(storiesData.stories, v => ({ ...pick(v, ['id', 'name', 'kind', 'story']),
119
+ parameters: pick(v.parameters, allowed)
120
+ })); // TODO Fix args stories
137
121
 
138
- removeProps(storiesData !== null && storiesData !== void 0 ? storiesData : {}, ['stories', () => true, 'parameters', '__isArgsStory']);
139
- Object.values((_storiesData$stories = storiesData === null || storiesData === void 0 ? void 0 : storiesData.stories) !== null && _storiesData$stories !== void 0 ? _storiesData$stories : {}).forEach(story => isObject(story) && 'parameters' in story && isObject(story.parameters) && delete story.parameters.__isArgsStory);
122
+ removeProps(storiesData ?? {}, ['stories', () => true, 'parameters', '__isArgsStory']);
123
+ Object.values((storiesData === null || storiesData === void 0 ? void 0 : storiesData.stories) ?? {}).forEach(story => isObject(story) && 'parameters' in story && isObject(story.parameters) && delete story.parameters.__isArgsStory);
140
124
  mkdirSync(outputDir, {
141
125
  recursive: true
142
126
  });
@@ -1,16 +1,12 @@
1
- var _api$channel, _api$context;
2
-
3
1
  import { addons } from '@storybook/addons';
4
- import { getStorybookFramework, isStorybookVersionLessThan, resolveFromStorybook } from './helpers';
2
+ import { getStorybookFramework, resolveFromStorybook } from './helpers';
5
3
  const framework = getStorybookFramework(); // eslint-disable-next-line @typescript-eslint/no-var-requires
6
4
 
7
- const core = require(resolveFromStorybook('@storybook/core')); //@ts-expect-error: 6.2 use named exports
8
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
9
-
5
+ const core = require(resolveFromStorybook('@storybook/core-client'));
10
6
 
11
- const start = isStorybookVersionLessThan(6, 2) ? core.default.start : core.start;
7
+ const start = core.start;
12
8
  const api = start(() => void 0);
13
- export const channel = isStorybookVersionLessThan(6, 4) ? (_api$channel = api.channel) !== null && _api$channel !== void 0 ? _api$channel : (_api$context = api.context) === null || _api$context === void 0 ? void 0 : _api$context.channel : addons.getChannel();
9
+ export const channel = addons.getChannel();
14
10
  export const clientApi = api.clientApi;
15
11
  export const forceReRender = api.forceReRender;
16
12
  export const storiesOf = (kind, m) => {
@@ -19,21 +15,8 @@ export const storiesOf = (kind, m) => {
19
15
  });
20
16
  };
21
17
  export const configure = (...args) => {
22
- if (isStorybookVersionLessThan(5, 2)) {
23
- //NOTE: Storybook <= 5.1 pass args as is
24
- //@ts-expect-error: ignore it
25
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
26
- return api.configApi.configure(...args);
27
- }
28
-
29
- if (isStorybookVersionLessThan(6)) {
30
- //NOTE: Storybook <= 5.3 pass `framework` as last argument
31
- //@ts-expect-error: ignore it
32
- return api.configure(...args, framework);
33
- } //NOTE Storybook 6.x pass `framework` as first argument
18
+ //NOTE Storybook 6.x pass `framework` as first argument
34
19
  //@ts-expect-error: ignore it
35
-
36
-
37
20
  return api.configure(framework, ...args);
38
21
  };
39
22
  export const addDecorator = clientApi.addDecorator;
@@ -7,7 +7,7 @@ export const storybookDirRef = {
7
7
  export const resolveFromStorybook = modulePath => resolveFrom(storybookDirRef.current, modulePath);
8
8
  export const resolveFromStorybookAddonDocs = modulePath => resolveFrom(resolveFromStorybook('@storybook/addon-docs'), modulePath);
9
9
  export const resolveFromStorybookBuilderWebpack4 = modulePath => resolveFrom(resolveFromStorybook('@storybook/builder-webpack4'), modulePath);
10
- export const resolveFromStorybookCore = modulePath => resolveFrom(resolveFromStorybook('@storybook/core'), modulePath);
10
+ export const resolveFromStorybookCoreClient = modulePath => resolveFrom(resolveFromStorybook('@storybook/core-client'), modulePath);
11
11
  export const resolveFromStorybookCoreServer = modulePath => resolveFrom(resolveFromStorybook('@storybook/core-server'), modulePath);
12
12
 
13
13
  const importFromStorybook = modulePath => import(resolveFromStorybook(modulePath));
@@ -40,27 +40,19 @@ export function getStorybookVersion() {
40
40
  return version;
41
41
  }
42
42
  export function isStorybookVersionLessThan(major, minor) {
43
- var _process$env$__CREEVE;
44
-
45
- const [sbMajor, sbMinor] = ((_process$env$__CREEVE = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE !== void 0 ? _process$env$__CREEVE : getStorybookVersion()).split('.');
43
+ const [sbMajor, sbMinor] = (process.env.__CREEVEY_STORYBOOK_VERSION__ ?? getStorybookVersion()).split('.');
46
44
  return Number(sbMajor) < major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) < minor;
47
45
  }
48
46
  export function isStorybookVersionGreaterThan(major, minor) {
49
- var _process$env$__CREEVE2;
50
-
51
- const [sbMajor, sbMinor] = ((_process$env$__CREEVE2 = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE2 !== void 0 ? _process$env$__CREEVE2 : getStorybookVersion()).split('.');
47
+ const [sbMajor, sbMinor] = (process.env.__CREEVEY_STORYBOOK_VERSION__ ?? getStorybookVersion()).split('.');
52
48
  return Number(sbMajor) > major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) > minor;
53
49
  }
54
50
  export function isStorybookVersion(major, minor) {
55
- var _process$env$__CREEVE3;
56
-
57
- const [sbMajor, sbMinor] = ((_process$env$__CREEVE3 = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE3 !== void 0 ? _process$env$__CREEVE3 : getStorybookVersion()).split('.');
51
+ const [sbMajor, sbMinor] = (process.env.__CREEVEY_STORYBOOK_VERSION__ ?? getStorybookVersion()).split('.');
58
52
  return Number(sbMajor) == major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) == minor;
59
53
  }
60
54
  export function getStorybookFramework() {
61
- var _process$env$__CREEVE4;
62
-
63
- const framework = (_process$env$__CREEVE4 = process.env.__CREEVEY_STORYBOOK_FRAMEWORK__) !== null && _process$env$__CREEVE4 !== void 0 ? _process$env$__CREEVE4 : supportedFrameworks.find(framework => {
55
+ const framework = process.env.__CREEVEY_STORYBOOK_FRAMEWORK__ ?? supportedFrameworks.find(framework => {
64
56
  try {
65
57
  return require.resolve(resolveFromStorybook(`@storybook/${framework}`));
66
58
  } catch (_) {
@@ -81,8 +73,8 @@ export async function importStorybookConfig() {
81
73
  try {
82
74
  return storybookConfigRef.current = (await import(require.resolve(configPath))).default;
83
75
  } catch (_) {
84
- const storybookUtilsPath = isStorybookVersionLessThan(6, 2) ? '@storybook/core/dist/server/utils' : '@storybook/core-common/dist/cjs/utils';
85
- const serverRequireModule = isStorybookVersionLessThan(6, 2) ? 'server-require' : 'interpret-require'; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
76
+ const storybookUtilsPath = '@storybook/core-common/dist/cjs/utils';
77
+ const serverRequireModule = 'interpret-require'; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
86
78
 
87
79
  const {
88
80
  getInterpretedFile
@@ -91,16 +83,15 @@ export async function importStorybookConfig() {
91
83
  const {
92
84
  default: serverRequireFallback,
93
85
  serverRequire = serverRequireFallback
94
- } = await import(resolveFromStorybook(`${storybookUtilsPath}/${serverRequireModule}`)); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
86
+ } = await import(resolveFromStorybook(`${storybookUtilsPath}/${serverRequireModule}`)); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
95
87
 
96
- const mainConfigFile = isStorybookVersionLessThan(6, 1) ? configPath : // eslint-disable-next-line @typescript-eslint/no-unsafe-call
97
- getInterpretedFile(configPath); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
88
+ const mainConfigFile = getInterpretedFile(configPath); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
98
89
 
99
90
  return storybookConfigRef.current = serverRequire(mainConfigFile);
100
91
  }
101
92
  }
102
93
  export async function isCSFv3Enabled() {
103
- var _await$importStoryboo, _await$importStoryboo2, _await$importStoryboo3;
94
+ var _await$importStoryboo, _await$importStoryboo2;
104
95
 
105
- return (_await$importStoryboo = (_await$importStoryboo2 = await importStorybookConfig()) === null || _await$importStoryboo2 === void 0 ? void 0 : (_await$importStoryboo3 = _await$importStoryboo2.features) === null || _await$importStoryboo3 === void 0 ? void 0 : _await$importStoryboo3.previewCsfV3) !== null && _await$importStoryboo !== void 0 ? _await$importStoryboo : false;
96
+ return ((_await$importStoryboo = await importStorybookConfig()) === null || _await$importStoryboo === void 0 ? void 0 : (_await$importStoryboo2 = _await$importStoryboo.features) === null || _await$importStoryboo2 === void 0 ? void 0 : _await$importStoryboo2.previewCsfV3) ?? false;
106
97
  }
@@ -1,15 +1,14 @@
1
- import cluster, { isMaster } from 'cluster';
1
+ import cluster from 'cluster';
2
2
  import { loadStoriesFromBrowser } from '../../selenium';
3
3
  import { emitStoriesMessage, sendStoriesMessage, subscribeOn, subscribeOnWorker } from '../../messages';
4
- import { deserializeRawStories } from '../../../shared';
5
4
  import { isDefined } from '../../../types';
6
5
  import { logger } from '../../logger';
7
6
  export async function loadStories(_config, {
8
7
  port
9
8
  }, storiesListener) {
10
- if (isMaster) {
9
+ if (cluster.isPrimary) {
11
10
  return new Promise(resolve => {
12
- const worker = Object.values(cluster.workers).filter(isDefined).find(worker => worker.isConnected());
11
+ const worker = Object.values(cluster.workers ?? {}).filter(isDefined).find(worker => worker.isConnected());
13
12
 
14
13
  if (worker) {
15
14
  const unsubscribe = subscribeOnWorker(worker, 'stories', message => {
@@ -44,7 +43,7 @@ export async function loadStories(_config, {
44
43
  });
45
44
  if (message.type == 'update') storiesListener(new Map(message.payload));
46
45
  });
47
- const stories = deserializeRawStories(await loadStoriesFromBrowser(port));
46
+ const stories = await loadStoriesFromBrowser(port);
48
47
  const storiesWithOldTests = [];
49
48
  Object.values(stories).forEach(story => {
50
49
  var _parameters, _parameters$creevey;
@@ -1,13 +1,12 @@
1
1
  /* eslint-disable @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/ban-ts-comment */
2
2
  import path from 'path';
3
- import { isWorker, isMaster } from 'cluster';
3
+ import cluster from 'cluster';
4
4
  import chokidar from 'chokidar';
5
5
  import { noop } from '../../../types';
6
6
  import { getCreeveyCache } from '../../utils';
7
7
  import { subscribeOn } from '../../messages';
8
- import { importStorybookClientLogger, importStorybookConfig, importStorybookCoreCommon, importStorybookCoreEvents, isStorybookVersionGreaterThan, isStorybookVersionLessThan } from '../helpers';
8
+ import { importStorybookClientLogger, importStorybookConfig, importStorybookCoreCommon, importStorybookCoreEvents } from '../helpers';
9
9
  import { logger } from '../../logger';
10
- import { denormalizeStoryParameters } from '../../../shared';
11
10
 
12
11
  async function initStorybookEnvironment() {
13
12
  // @ts-expect-error There is no @types/global-jsdom package
@@ -25,7 +24,7 @@ async function initStorybookEnvironment() {
25
24
  logger
26
25
  } = await importStorybookClientLogger(); // NOTE: Disable duplication warnings for >=6.2 storybook
27
26
 
28
- if (isWorker) logger.warn = noop; // NOTE: disable logger for 5.x storybook
27
+ if (cluster.isWorker) logger.warn = noop; // NOTE: disable logger for 5.x storybook
29
28
 
30
29
  logger.debug = noop;
31
30
  return import('../entry');
@@ -39,7 +38,7 @@ function watchStories(channel, watcher, initialFiles) {
39
38
  watcher.on('change', filePath => storiesByFiles.set(path.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
40
39
  watcher.on('unlink', filePath => storiesByFiles.set(path.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
41
40
  return data => {
42
- const stories = isStorybookVersionLessThan(6) || isStorybookVersionGreaterThan(6, 3) ? data.stories : denormalizeStoryParameters(data);
41
+ const stories = data.stories;
43
42
  const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
44
43
  const addedFiles = Array.from(files).filter(filePath => !watchingFiles.has(filePath));
45
44
  const removedFiles = Array.from(watchingFiles).filter(filePath => !files.has(filePath));
@@ -105,7 +104,7 @@ async function loadStoriesDirectly(config, {
105
104
  stories
106
105
  } = await importStorybookConfig();
107
106
  const contexts = stories.map(entry => {
108
- const normalizedEntry = isStorybookVersionLessThan(6, 4) ? entry : normalizeStoriesEntry(entry, {
107
+ const normalizedEntry = normalizeStoriesEntry(entry, {
109
108
  configDir: config.storybookDir,
110
109
  workingDir: process.cwd()
111
110
  });
@@ -154,7 +153,7 @@ async function loadStoriesDirectly(config, {
154
153
  try {
155
154
  configure(contexts.map(ctx => ctx()), module, false);
156
155
  } catch (error) {
157
- if (isMaster) logger.error(error);
156
+ if (cluster.isPrimary) logger.error(error);
158
157
  }
159
158
  }
160
159
 
@@ -187,7 +186,7 @@ export async function loadStories(config, {
187
186
  });
188
187
  const loadPromise = new Promise(resolve => {
189
188
  channel.once(Events.SET_STORIES, data => {
190
- const stories = isStorybookVersionLessThan(6) || isStorybookVersionGreaterThan(6, 3) ? data.stories : denormalizeStoryParameters(data);
189
+ const stories = data.stories;
191
190
  const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
192
191
  if (watcher) channel.on(Events.SET_STORIES, watchStories(channel, watcher, files));
193
192
  resolve(stories);
@@ -15,11 +15,7 @@ function tryToLoadTestsData(filename) {
15
15
  const actualRegex = /^(.*)-actual-(\d+)\.png$/i;
16
16
 
17
17
  function approve(dirents, srcPath, dstPath, testPaths, isMatch) {
18
- dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(path.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => {
19
- var _images$get;
20
-
21
- return Number(retry) > ((_images$get = images.get(imageName)) !== null && _images$get !== void 0 ? _images$get : -1) ? images.set(imageName, Number(retry)) : images;
22
- }, new Map()).forEach((retry, imageName) => {
18
+ dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(path.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => Number(retry) > (images.get(imageName) ?? -1) ? images.set(imageName, Number(retry)) : images, new Map()).forEach((retry, imageName) => {
23
19
  mkdirSync(dstPath, {
24
20
  recursive: true
25
21
  });