creevey 0.9.0-beta.2 → 0.9.0-beta.3

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 +33 -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 +12 -31
  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 +11 -26
  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
@@ -19,20 +19,16 @@ var _types = require("../types");
19
19
 
20
20
  var _utils = require("./utils");
21
21
 
22
- var _helpers = require("./storybook/helpers");
23
-
24
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
23
 
26
24
  function storyTestFabric(delay, testFn) {
27
25
  return async function storyTest() {
28
- var _testFn$call;
29
-
30
26
  delay ? await new Promise(resolve => setTimeout(resolve, delay)) : void 0;
31
- 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, {
27
+ await (testFn ? testFn.call(this) : this.screenshots.length > 0 ? this.expect(this.screenshots.reduce((screenshots, {
32
28
  imageName,
33
29
  screenshot
34
30
  }, index) => ({ ...screenshots,
35
- [imageName !== null && imageName !== void 0 ? imageName : `screenshot_${index}`]: screenshot
31
+ [imageName ?? `screenshot_${index}`]: screenshot
36
32
  }), {})).to.matchImages() : this.expect(await this.takeScreenshot()).to.matchImage());
37
33
  };
38
34
  }
@@ -62,15 +58,13 @@ function createCreeveyTest(browser, storyMeta, skipOptions, testName) {
62
58
  function convertStories(browserName, stories) {
63
59
  const tests = {};
64
60
  (Array.isArray(stories) ? stories : Object.values(stories)).forEach(storyMeta => {
65
- var _storyMeta$parameters;
66
-
67
61
  // TODO Skip docsOnly stories for now
68
62
  if (storyMeta.parameters.docsOnly) return;
69
63
  const {
70
64
  delay: delayParam,
71
65
  tests: storyTests,
72
66
  skip
73
- } = (_storyMeta$parameters = storyMeta.parameters.creevey) !== null && _storyMeta$parameters !== void 0 ? _storyMeta$parameters : {};
67
+ } = storyMeta.parameters.creevey ?? {};
74
68
  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]
75
69
  // typeof tests === "function" => rootSuite -> kindSuite -> storyTest -> browser -> [images.png]
76
70
  // typeof tests === "object" => rootSuite -> kindSuite -> storySuite -> test -> [browsers.png]
@@ -105,11 +99,11 @@ async function loadTestsFromStories(browsers, provider, update) {
105
99
  const tests = {};
106
100
  browsers.forEach(browser => {
107
101
  Array.from(storiesByFiles.entries()).forEach(([filename, stories]) => {
108
- var _testIdsByFiles$get$f, _testIdsByFiles$get;
102
+ var _testIdsByFiles$get;
109
103
 
110
104
  Object.assign(tests, convertStories(browser, stories));
111
105
  const changed = Object.keys(tests);
112
- 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 : [];
106
+ const removed = ((_testIdsByFiles$get = testIdsByFiles.get(filename)) === null || _testIdsByFiles$get === void 0 ? void 0 : _testIdsByFiles$get.filter(testId => !tests[testId])) ?? [];
113
107
  if (changed.length == 0) testIdsByFiles.delete(filename);else testIdsByFiles.set(filename, changed);
114
108
  Object.assign(testsDiff, tests);
115
109
  removed.forEach(testId => testsDiff[testId] = undefined);
@@ -125,36 +119,25 @@ async function loadTestsFromStories(browsers, provider, update) {
125
119
  fileName
126
120
  }
127
121
  }
128
- }) => {
129
- var _testIdsByFiles$get2;
130
-
131
- return (// TODO Don't use filename as a key, due possible collisions if two require.context with same structure of modules are defined
132
- testIdsByFiles.set(fileName, [...((_testIdsByFiles$get2 = testIdsByFiles.get(fileName)) !== null && _testIdsByFiles$get2 !== void 0 ? _testIdsByFiles$get2 : []), id])
133
- );
134
- });
122
+ }) => // TODO Don't use filename as a key, due possible collisions if two require.context with same structure of modules are defined
123
+ testIdsByFiles.set(fileName, [...(testIdsByFiles.get(fileName) ?? []), id]));
135
124
  return tests;
136
125
  }
137
126
 
138
127
  function saveStoriesJson(storiesData, extract) {
139
- var _storiesData$stories;
140
-
141
- const outputDir = typeof extract == 'boolean' ? 'storybook-static' : extract;
142
-
143
- if (!(0, _helpers.isStorybookVersionLessThan)(6)) {
144
- // NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
145
- const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
146
- storiesData.globalParameters = (0, _lodash.pick)(storiesData.globalParameters, allowed); // @ts-expect-error ignore error
128
+ const outputDir = typeof extract == 'boolean' ? 'storybook-static' : extract; // NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
147
129
 
148
- storiesData.kindParameters = (0, _lodash.mapValues)(storiesData.kindParameters, v => (0, _lodash.pick)(v, allowed)); // @ts-expect-error ignore error
130
+ const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
131
+ storiesData.globalParameters = (0, _lodash.pick)(storiesData.globalParameters, allowed); // @ts-expect-error ignore error
149
132
 
150
- storiesData.stories = (0, _lodash.mapValues)(storiesData.stories, v => ({ ...(0, _lodash.pick)(v, ['id', 'name', 'kind', 'story']),
151
- parameters: (0, _lodash.pick)(v.parameters, allowed)
152
- }));
153
- } // TODO Fix args stories
133
+ storiesData.kindParameters = (0, _lodash.mapValues)(storiesData.kindParameters, v => (0, _lodash.pick)(v, allowed)); // @ts-expect-error ignore error
154
134
 
135
+ storiesData.stories = (0, _lodash.mapValues)(storiesData.stories, v => ({ ...(0, _lodash.pick)(v, ['id', 'name', 'kind', 'story']),
136
+ parameters: (0, _lodash.pick)(v.parameters, allowed)
137
+ })); // TODO Fix args stories
155
138
 
156
- (0, _utils.removeProps)(storiesData !== null && storiesData !== void 0 ? storiesData : {}, ['stories', () => true, 'parameters', '__isArgsStory']);
157
- Object.values((_storiesData$stories = storiesData === null || storiesData === void 0 ? void 0 : storiesData.stories) !== null && _storiesData$stories !== void 0 ? _storiesData$stories : {}).forEach(story => (0, _types.isObject)(story) && 'parameters' in story && (0, _types.isObject)(story.parameters) && delete story.parameters.__isArgsStory);
139
+ (0, _utils.removeProps)(storiesData ?? {}, ['stories', () => true, 'parameters', '__isArgsStory']);
140
+ Object.values((storiesData === null || storiesData === void 0 ? void 0 : storiesData.stories) ?? {}).forEach(story => (0, _types.isObject)(story) && 'parameters' in story && (0, _types.isObject)(story.parameters) && delete story.parameters.__isArgsStory);
158
141
  (0, _fs.mkdirSync)(outputDir, {
159
142
  recursive: true
160
143
  });
@@ -3,23 +3,21 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.raw = exports.getStorybook = exports.setAddon = exports.clearDecorators = exports.addParameters = exports.addDecorator = exports.configure = exports.storiesOf = exports.forceReRender = exports.clientApi = exports.channel = void 0;
6
+ exports.storiesOf = exports.setAddon = exports.raw = exports.getStorybook = exports.forceReRender = exports.configure = exports.clientApi = exports.clearDecorators = exports.channel = exports.addParameters = exports.addDecorator = void 0;
7
7
 
8
8
  var _addons = require("@storybook/addons");
9
9
 
10
10
  var _helpers = require("./helpers");
11
11
 
12
- var _api$channel, _api$context;
13
-
14
12
  const framework = (0, _helpers.getStorybookFramework)(); // eslint-disable-next-line @typescript-eslint/no-var-requires
15
13
 
16
- const core = require((0, _helpers.resolveFromStorybook)('@storybook/core')); //@ts-expect-error: 6.2 use named exports
17
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
18
-
14
+ const core = require((0, _helpers.resolveFromStorybook)('@storybook/core-client'));
19
15
 
20
- const start = (0, _helpers.isStorybookVersionLessThan)(6, 2) ? core.default.start : core.start;
16
+ const start = core.start;
21
17
  const api = start(() => void 0);
22
- const channel = (0, _helpers.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.addons.getChannel();
18
+
19
+ const channel = _addons.addons.getChannel();
20
+
23
21
  exports.channel = channel;
24
22
  const clientApi = api.clientApi;
25
23
  exports.clientApi = clientApi;
@@ -35,21 +33,8 @@ const storiesOf = (kind, m) => {
35
33
  exports.storiesOf = storiesOf;
36
34
 
37
35
  const configure = (...args) => {
38
- if ((0, _helpers.isStorybookVersionLessThan)(5, 2)) {
39
- //NOTE: Storybook <= 5.1 pass args as is
40
- //@ts-expect-error: ignore it
41
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
42
- return api.configApi.configure(...args);
43
- }
44
-
45
- if ((0, _helpers.isStorybookVersionLessThan)(6)) {
46
- //NOTE: Storybook <= 5.3 pass `framework` as last argument
47
- //@ts-expect-error: ignore it
48
- return api.configure(...args, framework);
49
- } //NOTE Storybook 6.x pass `framework` as first argument
36
+ //NOTE Storybook 6.x pass `framework` as first argument
50
37
  //@ts-expect-error: ignore it
51
-
52
-
53
38
  return api.configure(framework, ...args);
54
39
  };
55
40
 
@@ -3,16 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.getStorybookFramework = getStorybookFramework;
7
+ exports.getStorybookVersion = getStorybookVersion;
6
8
  exports.hasDocsAddon = hasDocsAddon;
7
9
  exports.hasSvelteCSFAddon = hasSvelteCSFAddon;
8
- exports.getStorybookVersion = getStorybookVersion;
9
- exports.isStorybookVersionLessThan = isStorybookVersionLessThan;
10
- exports.isStorybookVersionGreaterThan = isStorybookVersionGreaterThan;
11
- exports.isStorybookVersion = isStorybookVersion;
12
- exports.getStorybookFramework = getStorybookFramework;
10
+ exports.importStorybookClientLogger = void 0;
13
11
  exports.importStorybookConfig = importStorybookConfig;
12
+ exports.importStorybookCoreEvents = exports.importStorybookCoreCommon = void 0;
14
13
  exports.isCSFv3Enabled = isCSFv3Enabled;
15
- exports.storybookConfigRef = exports.importStorybookCoreEvents = exports.importStorybookCoreCommon = exports.importStorybookClientLogger = exports.resolveFromStorybookCoreServer = exports.resolveFromStorybookCore = exports.resolveFromStorybookBuilderWebpack4 = exports.resolveFromStorybookAddonDocs = exports.resolveFromStorybook = exports.storybookDirRef = void 0;
14
+ exports.isStorybookVersion = isStorybookVersion;
15
+ exports.isStorybookVersionGreaterThan = isStorybookVersionGreaterThan;
16
+ exports.isStorybookVersionLessThan = isStorybookVersionLessThan;
17
+ exports.storybookDirRef = exports.storybookConfigRef = exports.resolveFromStorybookCoreServer = exports.resolveFromStorybookCoreClient = exports.resolveFromStorybookBuilderWebpack4 = exports.resolveFromStorybookAddonDocs = exports.resolveFromStorybook = void 0;
16
18
 
17
19
  var _path = _interopRequireDefault(require("path"));
18
20
 
@@ -42,9 +44,9 @@ const resolveFromStorybookBuilderWebpack4 = modulePath => (0, _resolveFrom.defau
42
44
 
43
45
  exports.resolveFromStorybookBuilderWebpack4 = resolveFromStorybookBuilderWebpack4;
44
46
 
45
- const resolveFromStorybookCore = modulePath => (0, _resolveFrom.default)(resolveFromStorybook('@storybook/core'), modulePath);
47
+ const resolveFromStorybookCoreClient = modulePath => (0, _resolveFrom.default)(resolveFromStorybook('@storybook/core-client'), modulePath);
46
48
 
47
- exports.resolveFromStorybookCore = resolveFromStorybookCore;
49
+ exports.resolveFromStorybookCoreClient = resolveFromStorybookCoreClient;
48
50
 
49
51
  const resolveFromStorybookCoreServer = modulePath => (0, _resolveFrom.default)(resolveFromStorybook('@storybook/core-server'), modulePath);
50
52
 
@@ -92,30 +94,22 @@ function getStorybookVersion() {
92
94
  }
93
95
 
94
96
  function isStorybookVersionLessThan(major, minor) {
95
- var _process$env$__CREEVE;
96
-
97
- const [sbMajor, sbMinor] = ((_process$env$__CREEVE = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE !== void 0 ? _process$env$__CREEVE : getStorybookVersion()).split('.');
97
+ const [sbMajor, sbMinor] = (process.env.__CREEVEY_STORYBOOK_VERSION__ ?? getStorybookVersion()).split('.');
98
98
  return Number(sbMajor) < major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) < minor;
99
99
  }
100
100
 
101
101
  function isStorybookVersionGreaterThan(major, minor) {
102
- var _process$env$__CREEVE2;
103
-
104
- const [sbMajor, sbMinor] = ((_process$env$__CREEVE2 = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE2 !== void 0 ? _process$env$__CREEVE2 : getStorybookVersion()).split('.');
102
+ const [sbMajor, sbMinor] = (process.env.__CREEVEY_STORYBOOK_VERSION__ ?? getStorybookVersion()).split('.');
105
103
  return Number(sbMajor) > major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) > minor;
106
104
  }
107
105
 
108
106
  function isStorybookVersion(major, minor) {
109
- var _process$env$__CREEVE3;
110
-
111
- const [sbMajor, sbMinor] = ((_process$env$__CREEVE3 = process.env.__CREEVEY_STORYBOOK_VERSION__) !== null && _process$env$__CREEVE3 !== void 0 ? _process$env$__CREEVE3 : getStorybookVersion()).split('.');
107
+ const [sbMajor, sbMinor] = (process.env.__CREEVEY_STORYBOOK_VERSION__ ?? getStorybookVersion()).split('.');
112
108
  return Number(sbMajor) == major || minor != undefined && Number(sbMajor) == major && Number(sbMinor) == minor;
113
109
  }
114
110
 
115
111
  function getStorybookFramework() {
116
- var _process$env$__CREEVE4;
117
-
118
- const framework = (_process$env$__CREEVE4 = process.env.__CREEVEY_STORYBOOK_FRAMEWORK__) !== null && _process$env$__CREEVE4 !== void 0 ? _process$env$__CREEVE4 : supportedFrameworks.find(framework => {
112
+ const framework = process.env.__CREEVEY_STORYBOOK_FRAMEWORK__ ?? supportedFrameworks.find(framework => {
119
113
  try {
120
114
  return require.resolve(resolveFromStorybook(`@storybook/${framework}`));
121
115
  } catch (_) {
@@ -139,8 +133,8 @@ async function importStorybookConfig() {
139
133
  try {
140
134
  return storybookConfigRef.current = (await Promise.resolve(`${require.resolve(configPath)}`).then(s => _interopRequireWildcard(require(s)))).default;
141
135
  } catch (_) {
142
- const storybookUtilsPath = isStorybookVersionLessThan(6, 2) ? '@storybook/core/dist/server/utils' : '@storybook/core-common/dist/cjs/utils';
143
- const serverRequireModule = isStorybookVersionLessThan(6, 2) ? 'server-require' : 'interpret-require'; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
136
+ const storybookUtilsPath = '@storybook/core-common/dist/cjs/utils';
137
+ const serverRequireModule = 'interpret-require'; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
144
138
 
145
139
  const {
146
140
  getInterpretedFile
@@ -149,17 +143,16 @@ async function importStorybookConfig() {
149
143
  const {
150
144
  default: serverRequireFallback,
151
145
  serverRequire = serverRequireFallback
152
- } = await Promise.resolve(`${resolveFromStorybook(`${storybookUtilsPath}/${serverRequireModule}`)}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
146
+ } = await Promise.resolve(`${resolveFromStorybook(`${storybookUtilsPath}/${serverRequireModule}`)}`).then(s => _interopRequireWildcard(require(s))); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
153
147
 
154
- const mainConfigFile = isStorybookVersionLessThan(6, 1) ? configPath : // eslint-disable-next-line @typescript-eslint/no-unsafe-call
155
- getInterpretedFile(configPath); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
148
+ const mainConfigFile = getInterpretedFile(configPath); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
156
149
 
157
150
  return storybookConfigRef.current = serverRequire(mainConfigFile);
158
151
  }
159
152
  }
160
153
 
161
154
  async function isCSFv3Enabled() {
162
- var _await$importStoryboo, _await$importStoryboo2, _await$importStoryboo3;
155
+ var _await$importStoryboo, _await$importStoryboo2;
163
156
 
164
- 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;
157
+ 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;
165
158
  }
@@ -5,28 +5,24 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.loadStories = loadStories;
7
7
 
8
- var _cluster = _interopRequireWildcard(require("cluster"));
8
+ var _cluster = _interopRequireDefault(require("cluster"));
9
9
 
10
10
  var _selenium = require("../../selenium");
11
11
 
12
12
  var _messages = require("../../messages");
13
13
 
14
- var _shared = require("../../../shared");
15
-
16
14
  var _types = require("../../../types");
17
15
 
18
16
  var _logger = require("../../logger");
19
17
 
20
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
-
22
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
19
 
24
20
  async function loadStories(_config, {
25
21
  port
26
22
  }, storiesListener) {
27
- if (_cluster.isMaster) {
23
+ if (_cluster.default.isPrimary) {
28
24
  return new Promise(resolve => {
29
- const worker = Object.values(_cluster.default.workers).filter(_types.isDefined).find(worker => worker.isConnected());
25
+ const worker = Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).find(worker => worker.isConnected());
30
26
 
31
27
  if (worker) {
32
28
  const unsubscribe = (0, _messages.subscribeOnWorker)(worker, 'stories', message => {
@@ -61,7 +57,7 @@ async function loadStories(_config, {
61
57
  });
62
58
  if (message.type == 'update') storiesListener(new Map(message.payload));
63
59
  });
64
- const stories = (0, _shared.deserializeRawStories)(await (0, _selenium.loadStoriesFromBrowser)(port));
60
+ const stories = await (0, _selenium.loadStoriesFromBrowser)(port);
65
61
  const storiesWithOldTests = [];
66
62
  Object.values(stories).forEach(story => {
67
63
  var _parameters, _parameters$creevey;
@@ -3,12 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.loadStories = loadStories;
7
6
  exports.extractStoriesData = extractStoriesData;
7
+ exports.loadStories = loadStories;
8
8
 
9
9
  var _path = _interopRequireDefault(require("path"));
10
10
 
11
- var _cluster = require("cluster");
11
+ var _cluster = _interopRequireDefault(require("cluster"));
12
12
 
13
13
  var _chokidar = _interopRequireDefault(require("chokidar"));
14
14
 
@@ -22,8 +22,6 @@ var _helpers = require("../helpers");
22
22
 
23
23
  var _logger = require("../../logger");
24
24
 
25
- var _shared = require("../../../shared");
26
-
27
25
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
26
 
29
27
  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); }
@@ -46,7 +44,7 @@ async function initStorybookEnvironment() {
46
44
  logger
47
45
  } = await (0, _helpers.importStorybookClientLogger)(); // NOTE: Disable duplication warnings for >=6.2 storybook
48
46
 
49
- if (_cluster.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
47
+ if (_cluster.default.isWorker) logger.warn = _types.noop; // NOTE: disable logger for 5.x storybook
50
48
 
51
49
  logger.debug = _types.noop;
52
50
  return Promise.resolve().then(() => _interopRequireWildcard(require('../entry')));
@@ -60,7 +58,7 @@ function watchStories(channel, watcher, initialFiles) {
60
58
  watcher.on('change', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
61
59
  watcher.on('unlink', filePath => storiesByFiles.set(_path.default.isAbsolute(filePath) ? filePath : `./${filePath.replace(/\\/g, '/')}`, []));
62
60
  return data => {
63
- const stories = (0, _helpers.isStorybookVersionLessThan)(6) || (0, _helpers.isStorybookVersionGreaterThan)(6, 3) ? data.stories : (0, _shared.denormalizeStoryParameters)(data);
61
+ const stories = data.stories;
64
62
  const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
65
63
  const addedFiles = Array.from(files).filter(filePath => !watchingFiles.has(filePath));
66
64
  const removedFiles = Array.from(watchingFiles).filter(filePath => !files.has(filePath));
@@ -126,7 +124,7 @@ async function loadStoriesDirectly(config, {
126
124
  stories
127
125
  } = await (0, _helpers.importStorybookConfig)();
128
126
  const contexts = stories.map(entry => {
129
- const normalizedEntry = (0, _helpers.isStorybookVersionLessThan)(6, 4) ? entry : normalizeStoriesEntry(entry, {
127
+ const normalizedEntry = normalizeStoriesEntry(entry, {
130
128
  configDir: config.storybookDir,
131
129
  workingDir: process.cwd()
132
130
  });
@@ -175,7 +173,7 @@ async function loadStoriesDirectly(config, {
175
173
  try {
176
174
  configure(contexts.map(ctx => ctx()), module, false);
177
175
  } catch (error) {
178
- if (_cluster.isMaster) _logger.logger.error(error);
176
+ if (_cluster.default.isPrimary) _logger.logger.error(error);
179
177
  }
180
178
  }
181
179
 
@@ -208,7 +206,7 @@ async function loadStories(config, {
208
206
  });
209
207
  const loadPromise = new Promise(resolve => {
210
208
  channel.once(Events.SET_STORIES, data => {
211
- const stories = (0, _helpers.isStorybookVersionLessThan)(6) || (0, _helpers.isStorybookVersionGreaterThan)(6, 3) ? data.stories : (0, _shared.denormalizeStoryParameters)(data);
209
+ const stories = data.stories;
212
210
  const files = new Set(Object.values(stories).map(story => story.parameters.fileName));
213
211
  if (watcher) channel.on(Events.SET_STORIES, watchStories(channel, watcher, files));
214
212
  resolve(stories);
@@ -31,11 +31,7 @@ function tryToLoadTestsData(filename) {
31
31
  const actualRegex = /^(.*)-actual-(\d+)\.png$/i;
32
32
 
33
33
  function approve(dirents, srcPath, dstPath, testPaths, isMatch) {
34
- dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => {
35
- var _images$get;
36
-
37
- return Number(retry) > ((_images$get = images.get(imageName)) !== null && _images$get !== void 0 ? _images$get : -1) ? images.set(imageName, Number(retry)) : images;
38
- }, new Map()).forEach((retry, imageName) => {
34
+ dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => Number(retry) > (images.get(imageName) ?? -1) ? images.set(imageName, Number(retry)) : images, new Map()).forEach((retry, imageName) => {
39
35
  (0, _fs.mkdirSync)(dstPath, {
40
36
  recursive: true
41
37
  });
@@ -3,15 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.shouldSkip = shouldSkip;
7
- exports.shutdownWorkers = shutdownWorkers;
8
- exports.shutdown = shutdown;
6
+ exports.extensions = exports.downloadBinary = exports.LOCALHOST_REGEXP = void 0;
9
7
  exports.getCreeveyCache = getCreeveyCache;
8
+ exports.isShuttingDown = exports.isInsideDocker = void 0;
9
+ exports.readDirRecursive = readDirRecursive;
10
+ exports.removeProps = removeProps;
10
11
  exports.runSequence = runSequence;
12
+ exports.shouldSkip = shouldSkip;
13
+ exports.shouldSkipByOption = shouldSkipByOption;
14
+ exports.shutdown = shutdown;
15
+ exports.shutdownWorkers = shutdownWorkers;
16
+ exports.skipOptionKeys = void 0;
11
17
  exports.testsToImages = testsToImages;
12
- exports.removeProps = removeProps;
13
- exports.readDirRecursive = readDirRecursive;
14
- exports.downloadBinary = exports.isInsideDocker = exports.skipOptionKeys = exports.extensions = exports.LOCALHOST_REGEXP = exports.isShuttingDown = void 0;
15
18
 
16
19
  var _fs = require("fs");
17
20
 
@@ -47,38 +50,30 @@ function shouldSkip(browser, meta, skipOptions, test) {
47
50
  return skipOptions;
48
51
  }
49
52
 
50
- if (Array.isArray(skipOptions)) {
51
- for (const skip of skipOptions) {
52
- const reason = shouldSkip(browser, meta, skip, test);
53
- if (reason) return reason;
54
- }
55
-
56
- return false;
53
+ for (const skipKey in skipOptions) {
54
+ const reason = shouldSkipByOption(browser, meta, skipOptions[skipKey], skipKey, test);
55
+ if (reason) return reason;
57
56
  }
58
57
 
59
- let hasSkipOptionKeys = false;
58
+ return false;
59
+ }
60
60
 
61
- for (const skipKey in skipOptions) {
62
- if (skipOptionKeys.includes(skipKey)) {
63
- hasSkipOptionKeys = true;
64
- continue;
61
+ function shouldSkipByOption(browser, meta, skipOption, reason, test) {
62
+ if (Array.isArray(skipOption)) {
63
+ for (const skip of skipOption) {
64
+ const result = shouldSkipByOption(browser, meta, skip, reason, test);
65
+ if (result) return result;
65
66
  }
66
67
 
67
- const reason = shouldSkip(browser, meta, {
68
- reason: skipKey,
69
- ...skipOptions[skipKey]
70
- }, test);
71
- if (reason) return reason;
68
+ return false;
72
69
  }
73
70
 
74
- if (!hasSkipOptionKeys) return false;
75
71
  const {
76
72
  in: browsers,
77
73
  kinds,
78
74
  stories,
79
- tests,
80
- reason = true
81
- } = skipOptions;
75
+ tests
76
+ } = skipOption;
82
77
  const {
83
78
  kind,
84
79
  story
@@ -92,7 +87,7 @@ function shouldSkip(browser, meta, skipOptions, test) {
92
87
 
93
88
  async function shutdownWorkers() {
94
89
  isShuttingDown.current = true;
95
- await Promise.all(Object.values(_cluster.default.workers).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
90
+ await Promise.all(Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
96
91
  const timeout = setTimeout(() => worker.kill(), 10000);
97
92
  worker.on('exit', () => {
98
93
  clearTimeout(timeout);
@@ -128,9 +123,9 @@ function testsToImages(tests) {
128
123
  storyPath,
129
124
  results
130
125
  }) => {
131
- var _results$slice$0$imag, _results$slice$;
126
+ var _results$slice$;
132
127
 
133
- return Object.keys((_results$slice$0$imag = results === null || results === void 0 ? void 0 : (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) !== null && _results$slice$0$imag !== void 0 ? _results$slice$0$imag : {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
128
+ return Object.keys((results === null || results === void 0 ? void 0 : (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) ?? {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
134
129
  })));
135
130
  } // https://tuhrig.de/how-to-know-you-are-inside-a-docker-container/
136
131
 
@@ -139,19 +134,15 @@ const isInsideDocker = (0, _fs.existsSync)('/proc/1/cgroup') && /docker/.test((0
139
134
  exports.isInsideDocker = isInsideDocker;
140
135
 
141
136
  const downloadBinary = (downloadUrl, destination) => new Promise((resolve, reject) => (0, _https.get)(downloadUrl, response => {
142
- var _response$statusCode2;
143
-
144
137
  if (response.statusCode == 302) {
145
- var _response$statusCode;
146
-
147
138
  const {
148
139
  location
149
140
  } = response.headers;
150
- if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${(_response$statusCode = response.statusCode) !== null && _response$statusCode !== void 0 ? _response$statusCode : 'UNKNOWN'}`));
141
+ if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
151
142
  return resolve(downloadBinary(location, destination));
152
143
  }
153
144
 
154
- if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${(_response$statusCode2 = response.statusCode) !== null && _response$statusCode2 !== void 0 ? _response$statusCode2 : 'UNKNOWN'}`));
145
+ if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
155
146
  const fileStream = (0, _fs.createWriteStream)(destination);
156
147
  response.pipe(fileStream);
157
148
  fileStream.on('finish', () => {
@@ -17,8 +17,6 @@ var _logger = require("../logger");
17
17
 
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
19
 
20
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
-
22
20
  const testLevels = {
23
21
  INFO: _chalk.default.green('PASS'),
24
22
  WARN: _chalk.default.yellow('START'),
@@ -43,11 +41,7 @@ class CreeveyReporter extends _mocha.reporters.Base {
43
41
 
44
42
  runner.on('test', test => testLogger.warn(_chalk.default.cyan(test.titlePath().join('/'))));
45
43
  runner.on('pass', test => testLogger.info(_chalk.default.cyan(test.titlePath().join('/'))));
46
- runner.on('fail', (test, error) => testLogger.error(_chalk.default.cyan(test.titlePath().join('/')), '\n ', getErrors(error, (error, imageName) => `${_chalk.default.bold(imageName !== null && imageName !== void 0 ? imageName : topLevelSuite)}:${error}`, error => {
47
- var _error$stack;
48
-
49
- return `${(_error$stack = error.stack) !== null && _error$stack !== void 0 ? _error$stack : error.message}`;
50
- }).join('\n ')));
44
+ runner.on('fail', (test, error) => testLogger.error(_chalk.default.cyan(test.titlePath().join('/')), '\n ', getErrors(error, (error, imageName) => `${_chalk.default.bold(imageName ?? topLevelSuite)}:${error}`, error => `${error.stack ?? error.message}`).join('\n ')));
51
45
  }
52
46
 
53
47
  }
@@ -57,20 +51,11 @@ exports.CreeveyReporter = CreeveyReporter;
57
51
  class TeamcityReporter extends _mocha.reporters.Base {
58
52
  constructor(runner, options) {
59
53
  super(runner);
60
-
61
- _defineProperty(this, "escape", str => {
62
- if (!str) return '';
63
- return str.toString() // eslint-disable-next-line no-control-regex
64
- .replace(/\x1B.*?m/g, '').replace(/\|/g, '||').replace(/\n/g, '|n').replace(/\r/g, '|r').replace(/\[/g, '|[').replace(/\]/g, '|]').replace(/\u0085/g, '|x').replace(/\u2028/g, '|l').replace(/\u2029/g, '|p').replace(/'/g, "|'");
65
- });
66
-
67
54
  const topLevelSuite = this.escape(options.reporterOptions.topLevelSuite);
68
55
  const reporterOptions = options.reporterOptions;
69
56
  runner.on('suite', suite => suite.root ? console.log(`##teamcity[testSuiteStarted name='${topLevelSuite}' flowId='${process.pid}']`) : console.log(`##teamcity[testSuiteStarted name='${this.escape(suite.title)}' flowId='${process.pid}']`));
70
57
  runner.on('test', test => console.log(`##teamcity[testStarted name='${this.escape(test.title)}' flowId='${process.pid}']`));
71
58
  runner.on('fail', (test, error) => {
72
- var _error$stack2;
73
-
74
59
  Object.entries(reporterOptions.images).forEach(([name, image]) => {
75
60
  if (!image) return;
76
61
  const filePath = test.titlePath().concat(name == topLevelSuite ? [] : [topLevelSuite]).map(this.escape).join('/'); // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -86,7 +71,7 @@ class TeamcityReporter extends _mocha.reporters.Base {
86
71
  }); // Output failed test as passed due TC don't support retry mechanic
87
72
  // https://teamcity-support.jetbrains.com/hc/en-us/community/posts/207216829-Count-test-as-successful-if-at-least-one-try-is-successful?page=1#community_comment_207394125
88
73
 
89
- reporterOptions.willRetry ? console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`) : console.log(`##teamcity[testFailed name='${this.escape(test.title)}' message='${this.escape(error.message)}' details='${this.escape((_error$stack2 = error.stack) !== null && _error$stack2 !== void 0 ? _error$stack2 : '')}' flowId='${process.pid}']`);
74
+ reporterOptions.willRetry ? console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`) : console.log(`##teamcity[testFailed name='${this.escape(test.title)}' message='${this.escape(error.message)}' details='${this.escape(error.stack ?? '')}' flowId='${process.pid}']`);
90
75
  });
91
76
  runner.on('pending', test => console.log(`##teamcity[testIgnored name='${this.escape(test.title)}' message='${this.escape(typeof test.skipReason == 'boolean' ? test.title : test.skipReason)}' flowId='${process.pid}']`));
92
77
  runner.on('test end', test => console.log(`##teamcity[testFinished name='${this.escape(test.title)}' flowId='${process.pid}']`));
@@ -94,6 +79,11 @@ class TeamcityReporter extends _mocha.reporters.Base {
94
79
  runner.on('end', () => console.log(`##teamcity[testSuiteFinished name='${topLevelSuite}' flowId='${process.pid}']`));
95
80
  }
96
81
 
82
+ escape = str => {
83
+ if (!str) return '';
84
+ return str.toString() // eslint-disable-next-line no-control-regex
85
+ .replace(/\x1B.*?m/g, '').replace(/\|/g, '||').replace(/\n/g, '|n').replace(/\r/g, '|r').replace(/\[/g, '|[').replace(/\]/g, '|]').replace(/\u0085/g, '|x').replace(/\u2028/g, '|l').replace(/\u2029/g, '|p').replace(/'/g, "|'");
86
+ };
97
87
  }
98
88
 
99
89
  exports.TeamcityReporter = TeamcityReporter;
@@ -110,9 +100,7 @@ function getErrors(error, imageErrorToString, errorToString) {
110
100
  } else {
111
101
  const imageErrors = error.images;
112
102
  Object.keys(imageErrors).forEach(imageName => {
113
- var _imageErrors$imageNam;
114
-
115
- errors.push(imageErrorToString((_imageErrors$imageNam = imageErrors[imageName]) !== null && _imageErrors$imageNam !== void 0 ? _imageErrors$imageNam : '', imageName));
103
+ errors.push(imageErrorToString(imageErrors[imageName] ?? '', imageName));
116
104
  });
117
105
  }
118
106