creevey 0.9.0-beta.20 → 0.9.0-beta.21

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 (477) hide show
  1. package/README.md +2 -2
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.js +5 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/client/addon/components/Addon.d.ts +8 -0
  6. package/dist/client/addon/components/Addon.js +57 -0
  7. package/dist/client/addon/components/Addon.js.map +1 -0
  8. package/{lib/types → dist}/client/addon/components/Icons.d.ts +0 -1
  9. package/dist/client/addon/components/Icons.js +18 -0
  10. package/dist/client/addon/components/Icons.js.map +1 -0
  11. package/{lib/types → dist}/client/addon/components/Panel.d.ts +1 -2
  12. package/dist/client/addon/components/Panel.js +32 -0
  13. package/dist/client/addon/components/Panel.js.map +1 -0
  14. package/{lib/types → dist}/client/addon/components/TestSelect.d.ts +1 -2
  15. package/dist/client/addon/components/TestSelect.js +33 -0
  16. package/dist/client/addon/components/TestSelect.js.map +1 -0
  17. package/dist/client/addon/components/Tools.d.ts +6 -0
  18. package/dist/client/addon/components/Tools.js +89 -0
  19. package/dist/client/addon/components/Tools.js.map +1 -0
  20. package/{lib/types/client/addon/Manager.d.ts → dist/client/addon/controller.d.ts} +8 -7
  21. package/dist/client/addon/controller.js +208 -0
  22. package/dist/client/addon/controller.js.map +1 -0
  23. package/dist/client/addon/decorator.js +6 -0
  24. package/dist/client/addon/decorator.js.map +1 -0
  25. package/dist/client/addon/index.d.ts +2 -0
  26. package/dist/client/addon/index.js +19 -0
  27. package/dist/client/addon/index.js.map +1 -0
  28. package/dist/client/addon/manager.js +41 -0
  29. package/dist/client/addon/manager.js.map +1 -0
  30. package/dist/client/addon/preset.js +6 -0
  31. package/dist/client/addon/preset.js.map +1 -0
  32. package/dist/client/addon/preview.js +8 -0
  33. package/dist/client/addon/preview.js.map +1 -0
  34. package/dist/client/addon/readyForCapture.js +7 -0
  35. package/dist/client/addon/readyForCapture.js.map +1 -0
  36. package/{lib/types → dist}/client/addon/utils.d.ts +1 -1
  37. package/dist/client/addon/utils.js +27 -0
  38. package/dist/client/addon/utils.js.map +1 -0
  39. package/{lib/types → dist}/client/addon/withCreevey.d.ts +3 -3
  40. package/dist/client/addon/withCreevey.js +286 -0
  41. package/dist/client/addon/withCreevey.js.map +1 -0
  42. package/{lib/types → dist}/client/shared/components/ImagesView/BlendView.d.ts +2 -2
  43. package/dist/client/shared/components/ImagesView/BlendView.js +74 -0
  44. package/dist/client/shared/components/ImagesView/BlendView.js.map +1 -0
  45. package/dist/client/shared/components/ImagesView/ImagesView.d.ts +9 -0
  46. package/dist/client/shared/components/ImagesView/ImagesView.js +43 -0
  47. package/dist/client/shared/components/ImagesView/ImagesView.js.map +1 -0
  48. package/{lib/types → dist}/client/shared/components/ImagesView/SideBySideView.d.ts +2 -2
  49. package/dist/client/shared/components/ImagesView/SideBySideView.js +121 -0
  50. package/dist/client/shared/components/ImagesView/SideBySideView.js.map +1 -0
  51. package/{lib/types → dist}/client/shared/components/ImagesView/SlideView.d.ts +2 -2
  52. package/dist/client/shared/components/ImagesView/SlideView.js +136 -0
  53. package/dist/client/shared/components/ImagesView/SlideView.js.map +1 -0
  54. package/{lib/types → dist}/client/shared/components/ImagesView/SwapView.d.ts +2 -2
  55. package/dist/client/shared/components/ImagesView/SwapView.js +72 -0
  56. package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -0
  57. package/{lib/types/client/shared/components/ImagesView/ImagesView.d.ts → dist/client/shared/components/ImagesView/common.d.ts} +1 -11
  58. package/dist/client/shared/components/ImagesView/common.js +14 -0
  59. package/dist/client/shared/components/ImagesView/common.js.map +1 -0
  60. package/dist/client/shared/components/ImagesView/index.d.ts +5 -0
  61. package/dist/client/shared/components/ImagesView/index.js +14 -0
  62. package/dist/client/shared/components/ImagesView/index.js.map +1 -0
  63. package/{lib/types → dist}/client/shared/components/PageFooter/PageFooter.d.ts +0 -1
  64. package/dist/client/shared/components/PageFooter/PageFooter.js +25 -0
  65. package/dist/client/shared/components/PageFooter/PageFooter.js.map +1 -0
  66. package/{lib/types → dist}/client/shared/components/PageFooter/Paging.d.ts +1 -2
  67. package/dist/client/shared/components/PageFooter/Paging.js +68 -0
  68. package/dist/client/shared/components/PageFooter/Paging.js.map +1 -0
  69. package/{lib/types → dist}/client/shared/components/PageHeader/ImagePreview.d.ts +1 -1
  70. package/dist/client/shared/components/PageHeader/ImagePreview.js +61 -0
  71. package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -0
  72. package/{lib/types → dist}/client/shared/components/PageHeader/PageHeader.d.ts +2 -5
  73. package/dist/client/shared/components/PageHeader/PageHeader.js +86 -0
  74. package/dist/client/shared/components/PageHeader/PageHeader.js.map +1 -0
  75. package/{lib/types → dist}/client/shared/components/ResultsPage.d.ts +3 -5
  76. package/dist/client/shared/components/ResultsPage.js +95 -0
  77. package/dist/client/shared/components/ResultsPage.js.map +1 -0
  78. package/{lib/types → dist}/client/shared/creeveyClientApi.d.ts +1 -1
  79. package/dist/client/shared/creeveyClientApi.js +53 -0
  80. package/dist/client/shared/creeveyClientApi.js.map +1 -0
  81. package/{lib/types → dist}/client/shared/helpers.d.ts +3 -3
  82. package/dist/client/shared/helpers.js +381 -0
  83. package/dist/client/shared/helpers.js.map +1 -0
  84. package/{lib/types → dist}/client/shared/viewMode.d.ts +1 -1
  85. package/dist/client/shared/viewMode.js +11 -0
  86. package/dist/client/shared/viewMode.js.map +1 -0
  87. package/dist/client/web/202.js +1 -0
  88. package/dist/client/web/270.js +43 -0
  89. package/dist/client/web/752.js +1 -0
  90. package/{lib/types → dist}/client/web/CreeveyApp.d.ts +2 -3
  91. package/dist/client/web/CreeveyApp.js +130 -0
  92. package/dist/client/web/CreeveyApp.js.map +1 -0
  93. package/{lib/types → dist}/client/web/CreeveyContext.d.ts +1 -1
  94. package/dist/client/web/CreeveyContext.js +17 -0
  95. package/dist/client/web/CreeveyContext.js.map +1 -0
  96. package/dist/client/web/CreeveyLoader.d.ts +3 -0
  97. package/dist/client/web/CreeveyLoader.js +52 -0
  98. package/dist/client/web/CreeveyLoader.js.map +1 -0
  99. package/{lib/types → dist}/client/web/CreeveyView/SideBar/Checkbox.d.ts +2 -2
  100. package/dist/client/web/CreeveyView/SideBar/Checkbox.js +86 -0
  101. package/dist/client/web/CreeveyView/SideBar/Checkbox.js.map +1 -0
  102. package/{lib/types → dist}/client/web/CreeveyView/SideBar/Search.d.ts +0 -1
  103. package/dist/client/web/CreeveyView/SideBar/Search.js +125 -0
  104. package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -0
  105. package/{lib/types → dist}/client/web/CreeveyView/SideBar/SideBar.d.ts +2 -2
  106. package/dist/client/web/CreeveyView/SideBar/SideBar.js +101 -0
  107. package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -0
  108. package/{lib/types → dist}/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +2 -3
  109. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js +113 -0
  110. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js.map +1 -0
  111. package/{lib/types → dist}/client/web/CreeveyView/SideBar/SuiteLink.d.ts +14 -14
  112. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +108 -0
  113. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -0
  114. package/{lib/types → dist}/client/web/CreeveyView/SideBar/TestLink.d.ts +1 -2
  115. package/dist/client/web/CreeveyView/SideBar/TestLink.js +63 -0
  116. package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -0
  117. package/{lib/types → dist}/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +2 -2
  118. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js +52 -0
  119. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js.map +1 -0
  120. package/{lib/types → dist}/client/web/CreeveyView/SideBar/TestsStatus.d.ts +3 -3
  121. package/dist/client/web/CreeveyView/SideBar/TestsStatus.js +74 -0
  122. package/dist/client/web/CreeveyView/SideBar/TestsStatus.js.map +1 -0
  123. package/{lib/types → dist}/client/web/CreeveyView/SideBar/Toggle.d.ts +0 -1
  124. package/dist/client/web/CreeveyView/SideBar/Toggle.js +69 -0
  125. package/dist/client/web/CreeveyView/SideBar/Toggle.js.map +1 -0
  126. package/dist/client/web/CreeveyView/SideBar/index.d.ts +1 -0
  127. package/dist/client/web/CreeveyView/SideBar/index.js +6 -0
  128. package/dist/client/web/CreeveyView/SideBar/index.js.map +1 -0
  129. package/{lib/types → dist}/client/web/KeyboardEventsContext.d.ts +4 -4
  130. package/dist/client/web/KeyboardEventsContext.js +116 -0
  131. package/dist/client/web/KeyboardEventsContext.js.map +1 -0
  132. package/{lib/types → dist}/client/web/index.d.ts +1 -1
  133. package/{lib/cjs → dist}/client/web/index.html +12 -3
  134. package/dist/client/web/index.js +75 -0
  135. package/dist/client/web/index.js.map +1 -0
  136. package/dist/client/web/main.js +79 -0
  137. package/dist/creevey.d.ts +1 -0
  138. package/dist/creevey.js +52 -0
  139. package/dist/creevey.js.map +1 -0
  140. package/dist/index.d.ts +5 -0
  141. package/dist/index.js +24 -0
  142. package/dist/index.js.map +1 -0
  143. package/{lib/types → dist}/server/config.d.ts +1 -1
  144. package/dist/server/config.js +84 -0
  145. package/dist/server/config.js.map +1 -0
  146. package/{lib/types → dist}/server/docker.d.ts +2 -2
  147. package/dist/server/docker.js +122 -0
  148. package/dist/server/docker.js.map +1 -0
  149. package/{lib/types → dist}/server/index.d.ts +1 -1
  150. package/dist/server/index.js +47 -0
  151. package/dist/server/index.js.map +1 -0
  152. package/{lib/types → dist}/server/logger.d.ts +2 -2
  153. package/dist/server/logger.js +25 -0
  154. package/dist/server/logger.js.map +1 -0
  155. package/{lib/types → dist}/server/master/api.d.ts +1 -1
  156. package/dist/server/master/api.js +50 -0
  157. package/dist/server/master/api.js.map +1 -0
  158. package/dist/server/master/index.d.ts +3 -0
  159. package/dist/server/master/index.js +110 -0
  160. package/dist/server/master/index.js.map +1 -0
  161. package/{lib/types → dist}/server/master/master.d.ts +2 -2
  162. package/dist/server/master/master.js +40 -0
  163. package/dist/server/master/master.js.map +1 -0
  164. package/{lib/types → dist}/server/master/pool.d.ts +1 -2
  165. package/dist/server/master/pool.js +186 -0
  166. package/dist/server/master/pool.js.map +1 -0
  167. package/{lib/types → dist}/server/master/runner.d.ts +3 -8
  168. package/dist/server/master/runner.js +172 -0
  169. package/dist/server/master/runner.js.map +1 -0
  170. package/dist/server/master/server.d.ts +2 -0
  171. package/dist/server/master/server.js +114 -0
  172. package/dist/server/master/server.js.map +1 -0
  173. package/{lib/types → dist}/server/messages.d.ts +1 -4
  174. package/dist/server/messages.js +222 -0
  175. package/dist/server/messages.js.map +1 -0
  176. package/{lib/types → dist}/server/selenium/browser.d.ts +1 -1
  177. package/dist/server/selenium/browser.js +634 -0
  178. package/dist/server/selenium/browser.js.map +1 -0
  179. package/dist/server/selenium/index.d.ts +2 -0
  180. package/dist/server/selenium/index.js +19 -0
  181. package/dist/server/selenium/index.js.map +1 -0
  182. package/{lib/types → dist}/server/selenium/selenoid.d.ts +1 -1
  183. package/dist/server/selenium/selenoid.js +120 -0
  184. package/dist/server/selenium/selenoid.js.map +1 -0
  185. package/{lib/types → dist}/server/stories.d.ts +2 -7
  186. package/dist/server/stories.js +92 -0
  187. package/dist/server/stories.js.map +1 -0
  188. package/dist/server/storybook/providers/browser.d.ts +2 -0
  189. package/dist/server/storybook/providers/browser.js +60 -0
  190. package/dist/server/storybook/providers/browser.js.map +1 -0
  191. package/dist/server/storybook/providers/hybrid.d.ts +2 -0
  192. package/dist/server/storybook/providers/hybrid.js +59 -0
  193. package/dist/server/storybook/providers/hybrid.js.map +1 -0
  194. package/dist/server/telemetry.js +196 -0
  195. package/dist/server/telemetry.js.map +1 -0
  196. package/{lib/types → dist}/server/testsFiles/parser.d.ts +2 -6
  197. package/dist/server/testsFiles/parser.js +50 -0
  198. package/dist/server/testsFiles/parser.js.map +1 -0
  199. package/dist/server/update.d.ts +2 -0
  200. package/dist/server/update.js +53 -0
  201. package/dist/server/update.js.map +1 -0
  202. package/{lib/types → dist}/server/utils.d.ts +9 -9
  203. package/dist/server/utils.js +142 -0
  204. package/dist/server/utils.js.map +1 -0
  205. package/{lib/types → dist}/server/worker/chai-image.d.ts +1 -2
  206. package/dist/server/worker/chai-image.js +113 -0
  207. package/dist/server/worker/chai-image.js.map +1 -0
  208. package/{lib/types → dist}/server/worker/helpers.d.ts +1 -1
  209. package/dist/server/worker/helpers.js +57 -0
  210. package/dist/server/worker/helpers.js.map +1 -0
  211. package/dist/server/worker/index.d.ts +1 -0
  212. package/dist/server/worker/index.js +6 -0
  213. package/dist/server/worker/index.js.map +1 -0
  214. package/dist/server/worker/reporter.js +130 -0
  215. package/dist/server/worker/reporter.js.map +1 -0
  216. package/dist/server/worker/worker.d.ts +4 -0
  217. package/dist/server/worker/worker.js +213 -0
  218. package/dist/server/worker/worker.js.map +1 -0
  219. package/{lib/types → dist}/shared/index.d.ts +1 -1
  220. package/dist/shared/index.js +77 -0
  221. package/dist/shared/index.js.map +1 -0
  222. package/dist/shared/serializeRegExp.js +25 -0
  223. package/dist/shared/serializeRegExp.js.map +1 -0
  224. package/{lib/types → dist}/types.d.ts +48 -71
  225. package/dist/types.js +61 -0
  226. package/dist/types.js.map +1 -0
  227. package/docs/config.md +1 -4
  228. package/docs/tests.md +3 -3
  229. package/eslint.config.mjs +62 -0
  230. package/manager/package.json +3 -0
  231. package/package.json +76 -103
  232. package/preset/README.md +3 -0
  233. package/preset/package.json +3 -0
  234. package/preview/README.md +3 -0
  235. package/preview/package.json +3 -0
  236. package/src/cli.ts +3 -0
  237. package/src/client/addon/components/Addon.tsx +53 -0
  238. package/src/client/addon/components/Icons.tsx +28 -0
  239. package/src/client/addon/components/Panel.tsx +53 -0
  240. package/src/client/addon/components/TestSelect.tsx +48 -0
  241. package/src/client/addon/components/Tools.tsx +93 -0
  242. package/src/client/addon/controller.ts +224 -0
  243. package/src/client/addon/decorator.ts +3 -0
  244. package/src/client/addon/index.ts +2 -0
  245. package/src/client/addon/manager.ts +44 -0
  246. package/{lib/esm/client/addon/preset.js → src/client/addon/preset.ts} +2 -1
  247. package/src/client/addon/preview.ts +7 -0
  248. package/src/client/addon/readyForCapture.ts +9 -0
  249. package/src/client/addon/utils.tsx +24 -0
  250. package/src/client/addon/withCreevey.ts +326 -0
  251. package/src/client/shared/components/ImagesView/BlendView.tsx +71 -0
  252. package/src/client/shared/components/ImagesView/ImagesView.tsx +62 -0
  253. package/src/client/shared/components/ImagesView/SideBySideView.tsx +139 -0
  254. package/{lib/esm/client/shared/components/ImagesView/SlideView.js → src/client/shared/components/ImagesView/SlideView.tsx} +78 -75
  255. package/src/client/shared/components/ImagesView/SwapView.tsx +81 -0
  256. package/src/client/shared/components/ImagesView/common.ts +23 -0
  257. package/src/client/shared/components/ImagesView/index.ts +5 -0
  258. package/src/client/shared/components/PageFooter/PageFooter.tsx +44 -0
  259. package/src/client/shared/components/PageFooter/Paging.tsx +105 -0
  260. package/src/client/shared/components/PageHeader/ImagePreview.tsx +82 -0
  261. package/src/client/shared/components/PageHeader/PageHeader.tsx +123 -0
  262. package/src/client/shared/components/ResultsPage.tsx +135 -0
  263. package/src/client/shared/creeveyClientApi.ts +64 -0
  264. package/src/client/shared/helpers.ts +422 -0
  265. package/src/client/shared/viewMode.ts +10 -0
  266. package/src/client/web/CreeveyApp.tsx +177 -0
  267. package/src/client/web/CreeveyContext.tsx +20 -0
  268. package/src/client/web/CreeveyLoader.tsx +56 -0
  269. package/src/client/web/CreeveyView/SideBar/Checkbox.tsx +118 -0
  270. package/src/client/web/CreeveyView/SideBar/Search.tsx +140 -0
  271. package/src/client/web/CreeveyView/SideBar/SideBar.tsx +125 -0
  272. package/src/client/web/CreeveyView/SideBar/SideBarHeader.tsx +138 -0
  273. package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +118 -0
  274. package/src/client/web/CreeveyView/SideBar/TestLink.tsx +67 -0
  275. package/src/client/web/CreeveyView/SideBar/TestStatusIcon.tsx +58 -0
  276. package/src/client/web/CreeveyView/SideBar/TestsStatus.tsx +105 -0
  277. package/src/client/web/CreeveyView/SideBar/Toggle.tsx +85 -0
  278. package/src/client/web/CreeveyView/SideBar/index.ts +1 -0
  279. package/src/client/web/KeyboardEventsContext.tsx +121 -0
  280. package/{lib/esm → src}/client/web/index.html +12 -3
  281. package/src/client/web/index.tsx +63 -0
  282. package/src/creevey.ts +47 -0
  283. package/src/index.ts +4 -0
  284. package/src/server/config.ts +83 -0
  285. package/src/server/docker.ts +136 -0
  286. package/src/server/index.ts +51 -0
  287. package/{lib/esm/server/logger.js → src/server/logger.ts} +8 -6
  288. package/src/server/master/api.ts +55 -0
  289. package/src/server/master/index.ts +111 -0
  290. package/src/server/master/master.ts +47 -0
  291. package/src/server/master/pool.ts +203 -0
  292. package/src/server/master/runner.ts +189 -0
  293. package/src/server/master/server.ts +124 -0
  294. package/src/server/messages.ts +273 -0
  295. package/src/server/selenium/browser.ts +834 -0
  296. package/src/server/selenium/index.ts +2 -0
  297. package/src/server/selenium/selenoid.ts +154 -0
  298. package/src/server/stories.ts +133 -0
  299. package/src/server/storybook/providers/browser.ts +58 -0
  300. package/src/server/storybook/providers/hybrid.ts +70 -0
  301. package/src/server/telemetry.ts +212 -0
  302. package/src/server/testsFiles/parser.ts +60 -0
  303. package/src/server/update.ts +74 -0
  304. package/src/server/utils.ts +184 -0
  305. package/src/server/worker/chai-image.ts +147 -0
  306. package/src/server/worker/helpers.ts +61 -0
  307. package/src/server/worker/index.ts +1 -0
  308. package/src/server/worker/reporter.ts +170 -0
  309. package/src/server/worker/worker.ts +234 -0
  310. package/src/shared/index.ts +76 -0
  311. package/src/shared/serializeRegExp.ts +26 -0
  312. package/src/types.ts +500 -0
  313. package/types/chai.d.ts +0 -1
  314. package/types/global.d.ts +1 -1
  315. package/types/mocha.d.ts +1 -1
  316. package/webpack.config.mjs +46 -0
  317. package/.yarn/install-state.gz +0 -0
  318. package/addon/package.json +0 -5
  319. package/jest.config.js +0 -6
  320. package/lib/cjs/cli.js +0 -6
  321. package/lib/cjs/client/addon/Manager.js +0 -192
  322. package/lib/cjs/client/addon/components/Addon.js +0 -48
  323. package/lib/cjs/client/addon/components/Icons.js +0 -40
  324. package/lib/cjs/client/addon/components/Panel.js +0 -59
  325. package/lib/cjs/client/addon/components/TestSelect.js +0 -52
  326. package/lib/cjs/client/addon/components/Tools.js +0 -84
  327. package/lib/cjs/client/addon/decorator.js +0 -8
  328. package/lib/cjs/client/addon/index.js +0 -27
  329. package/lib/cjs/client/addon/preset.js +0 -8
  330. package/lib/cjs/client/addon/preview.js +0 -11
  331. package/lib/cjs/client/addon/readyForCapture.js +0 -9
  332. package/lib/cjs/client/addon/register.js +0 -57
  333. package/lib/cjs/client/addon/utils.js +0 -34
  334. package/lib/cjs/client/addon/withCreevey.js +0 -272
  335. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +0 -75
  336. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +0 -76
  337. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +0 -139
  338. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +0 -151
  339. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +0 -79
  340. package/lib/cjs/client/shared/components/ImagesView/index.js +0 -40
  341. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +0 -43
  342. package/lib/cjs/client/shared/components/PageFooter/Paging.js +0 -77
  343. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +0 -86
  344. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +0 -100
  345. package/lib/cjs/client/shared/components/ResultsPage.js +0 -116
  346. package/lib/cjs/client/shared/creeveyClientApi.js +0 -66
  347. package/lib/cjs/client/shared/helpers.js +0 -357
  348. package/lib/cjs/client/shared/viewMode.js +0 -13
  349. package/lib/cjs/client/web/192.js +0 -1
  350. package/lib/cjs/client/web/632.js +0 -43
  351. package/lib/cjs/client/web/794.js +0 -1
  352. package/lib/cjs/client/web/main.js +0 -79
  353. package/lib/cjs/creevey.js +0 -56
  354. package/lib/cjs/index.js +0 -47
  355. package/lib/cjs/server/config.js +0 -76
  356. package/lib/cjs/server/docker.js +0 -124
  357. package/lib/cjs/server/index.js +0 -58
  358. package/lib/cjs/server/logger.js +0 -34
  359. package/lib/cjs/server/master/api.js +0 -58
  360. package/lib/cjs/server/master/index.js +0 -122
  361. package/lib/cjs/server/master/master.js +0 -42
  362. package/lib/cjs/server/master/pool.js +0 -163
  363. package/lib/cjs/server/master/runner.js +0 -254
  364. package/lib/cjs/server/master/server.js +0 -110
  365. package/lib/cjs/server/messages.js +0 -218
  366. package/lib/cjs/server/selenium/browser.js +0 -644
  367. package/lib/cjs/server/selenium/index.js +0 -27
  368. package/lib/cjs/server/selenium/selenoid.js +0 -148
  369. package/lib/cjs/server/stories.js +0 -148
  370. package/lib/cjs/server/storybook/providers/browser.js +0 -64
  371. package/lib/cjs/server/storybook/providers/hybrid.js +0 -63
  372. package/lib/cjs/server/telemetry.js +0 -167
  373. package/lib/cjs/server/testsFiles/parser.js +0 -56
  374. package/lib/cjs/server/testsFiles/register.js +0 -42
  375. package/lib/cjs/server/update.js +0 -62
  376. package/lib/cjs/server/utils.js +0 -144
  377. package/lib/cjs/server/worker/chai-image.js +0 -116
  378. package/lib/cjs/server/worker/helpers.js +0 -59
  379. package/lib/cjs/server/worker/index.js +0 -13
  380. package/lib/cjs/server/worker/reporter.js +0 -93
  381. package/lib/cjs/server/worker/worker.js +0 -238
  382. package/lib/cjs/shared/index.js +0 -87
  383. package/lib/cjs/shared/serializeRegExp.js +0 -34
  384. package/lib/cjs/types.js +0 -65
  385. package/lib/esm/cli.js +0 -4
  386. package/lib/esm/client/addon/Manager.js +0 -185
  387. package/lib/esm/client/addon/components/Addon.js +0 -39
  388. package/lib/esm/client/addon/components/Icons.js +0 -31
  389. package/lib/esm/client/addon/components/Panel.js +0 -51
  390. package/lib/esm/client/addon/components/TestSelect.js +0 -45
  391. package/lib/esm/client/addon/components/Tools.js +0 -75
  392. package/lib/esm/client/addon/decorator.js +0 -2
  393. package/lib/esm/client/addon/index.js +0 -2
  394. package/lib/esm/client/addon/preview.js +0 -5
  395. package/lib/esm/client/addon/readyForCapture.js +0 -3
  396. package/lib/esm/client/addon/register.js +0 -49
  397. package/lib/esm/client/addon/utils.js +0 -27
  398. package/lib/esm/client/addon/withCreevey.js +0 -263
  399. package/lib/esm/client/shared/components/ImagesView/BlendView.js +0 -67
  400. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +0 -67
  401. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +0 -131
  402. package/lib/esm/client/shared/components/ImagesView/SwapView.js +0 -71
  403. package/lib/esm/client/shared/components/ImagesView/index.js +0 -5
  404. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +0 -36
  405. package/lib/esm/client/shared/components/PageFooter/Paging.js +0 -70
  406. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +0 -79
  407. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +0 -92
  408. package/lib/esm/client/shared/components/ResultsPage.js +0 -107
  409. package/lib/esm/client/shared/creeveyClientApi.js +0 -60
  410. package/lib/esm/client/shared/helpers.js +0 -327
  411. package/lib/esm/client/shared/viewMode.js +0 -6
  412. package/lib/esm/client/web/192.js +0 -1
  413. package/lib/esm/client/web/632.js +0 -43
  414. package/lib/esm/client/web/794.js +0 -1
  415. package/lib/esm/client/web/main.js +0 -79
  416. package/lib/esm/client/web/main.js.LICENSE.txt +0 -34
  417. package/lib/esm/creevey.js +0 -53
  418. package/lib/esm/index.js +0 -4
  419. package/lib/esm/server/config.js +0 -66
  420. package/lib/esm/server/docker.js +0 -115
  421. package/lib/esm/server/index.js +0 -50
  422. package/lib/esm/server/master/api.js +0 -51
  423. package/lib/esm/server/master/index.js +0 -115
  424. package/lib/esm/server/master/master.js +0 -33
  425. package/lib/esm/server/master/pool.js +0 -154
  426. package/lib/esm/server/master/runner.js +0 -246
  427. package/lib/esm/server/master/server.js +0 -103
  428. package/lib/esm/server/messages.js +0 -200
  429. package/lib/esm/server/selenium/browser.js +0 -631
  430. package/lib/esm/server/selenium/index.js +0 -2
  431. package/lib/esm/server/selenium/selenoid.js +0 -140
  432. package/lib/esm/server/stories.js +0 -139
  433. package/lib/esm/server/storybook/providers/browser.js +0 -56
  434. package/lib/esm/server/storybook/providers/hybrid.js +0 -53
  435. package/lib/esm/server/telemetry.js +0 -160
  436. package/lib/esm/server/testsFiles/parser.js +0 -44
  437. package/lib/esm/server/testsFiles/register.js +0 -34
  438. package/lib/esm/server/update.js +0 -53
  439. package/lib/esm/server/utils.js +0 -125
  440. package/lib/esm/server/worker/chai-image.js +0 -109
  441. package/lib/esm/server/worker/helpers.js +0 -53
  442. package/lib/esm/server/worker/index.js +0 -1
  443. package/lib/esm/server/worker/reporter.js +0 -84
  444. package/lib/esm/server/worker/worker.js +0 -231
  445. package/lib/esm/shared/index.js +0 -77
  446. package/lib/esm/shared/serializeRegExp.js +0 -24
  447. package/lib/esm/types.js +0 -47
  448. package/lib/types/cli.d.ts +0 -1
  449. package/lib/types/client/addon/components/Addon.d.ts +0 -9
  450. package/lib/types/client/addon/components/Tools.d.ts +0 -7
  451. package/lib/types/client/addon/index.d.ts +0 -2
  452. package/lib/types/client/addon/register.d.ts +0 -3
  453. package/lib/types/client/shared/components/ImagesView/index.d.ts +0 -5
  454. package/lib/types/client/web/CreeveyLoader.d.ts +0 -3
  455. package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +0 -1
  456. package/lib/types/index.d.ts +0 -6
  457. package/lib/types/server/master/index.d.ts +0 -3
  458. package/lib/types/server/master/server.d.ts +0 -2
  459. package/lib/types/server/selenium/index.d.ts +0 -2
  460. package/lib/types/server/storybook/providers/browser.d.ts +0 -2
  461. package/lib/types/server/storybook/providers/hybrid.d.ts +0 -2
  462. package/lib/types/server/testsFiles/register.d.ts +0 -2
  463. package/lib/types/server/update.d.ts +0 -2
  464. package/lib/types/server/worker/index.d.ts +0 -1
  465. package/lib/types/server/worker/worker.d.ts +0 -4
  466. package/types/babel__register.d.ts +0 -1
  467. package/types/event-source-polyfill.d.ts +0 -6
  468. /package/{lib/types → dist}/client/addon/decorator.d.ts +0 -0
  469. /package/{lib/types/creevey.d.ts → dist/client/addon/manager.d.ts} +0 -0
  470. /package/{lib/types → dist}/client/addon/preset.d.ts +0 -0
  471. /package/{lib/types → dist}/client/addon/preview.d.ts +0 -0
  472. /package/{lib/types → dist}/client/addon/readyForCapture.d.ts +0 -0
  473. /package/{lib/cjs → dist}/client/web/main.js.LICENSE.txt +0 -0
  474. /package/{lib/types → dist}/server/telemetry.d.ts +0 -0
  475. /package/{lib/types → dist}/server/worker/reporter.d.ts +0 -0
  476. /package/{lib/types → dist}/shared/serializeRegExp.d.ts +0 -0
  477. /package/{addon → manager}/README.md +0 -0
@@ -1,34 +0,0 @@
1
- /*
2
- object-assign
3
- (c) Sindre Sorhus
4
- @license MIT
5
- */
6
-
7
- /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
8
-
9
- /** @license React v0.20.2
10
- * scheduler.production.min.js
11
- *
12
- * Copyright (c) Facebook, Inc. and its affiliates.
13
- *
14
- * This source code is licensed under the MIT license found in the
15
- * LICENSE file in the root directory of this source tree.
16
- */
17
-
18
- /** @license React v17.0.2
19
- * react-dom.production.min.js
20
- *
21
- * Copyright (c) Facebook, Inc. and its affiliates.
22
- *
23
- * This source code is licensed under the MIT license found in the
24
- * LICENSE file in the root directory of this source tree.
25
- */
26
-
27
- /** @license React v17.0.2
28
- * react.production.min.js
29
- *
30
- * Copyright (c) Facebook, Inc. and its affiliates.
31
- *
32
- * This source code is licensed under the MIT license found in the
33
- * LICENSE file in the root directory of this source tree.
34
- */
@@ -1,53 +0,0 @@
1
- import cluster from 'cluster';
2
- import minimist from 'minimist';
3
- import creevey from './server';
4
- import { noop } from './types';
5
- import { emitWorkerMessage } from './server/messages';
6
- import { isShuttingDown, shutdown, shutdownWorkers } from './server/utils';
7
- import { setDefaultLevel, levels } from 'loglevel';
8
- import { logger } from './server/logger';
9
- function shutdownOnException(reason) {
10
- if (isShuttingDown.current) return;
11
- const error = reason instanceof Error ? reason.stack ?? reason.message : reason;
12
- logger.error(error);
13
- process.exitCode = -1;
14
- if (cluster.isWorker) emitWorkerMessage({
15
- type: 'error',
16
- payload: {
17
- error
18
- }
19
- });
20
- if (cluster.isPrimary && !isShuttingDown.current) void shutdownWorkers();
21
- }
22
- process.on('uncaughtException', shutdownOnException);
23
- process.on('unhandledRejection', shutdownOnException);
24
- if (cluster.isWorker) process.on('SIGINT', noop);
25
- if (cluster.isPrimary) process.on('SIGINT', shutdown);
26
- const argv = minimist(process.argv.slice(2), {
27
- string: ['browser', 'config', 'reporter', 'reportDir', 'screenDir', 'storybookUrl'],
28
- boolean: ['debug', 'trace', 'ui', 'saveReport', 'tests'],
29
- default: {
30
- port: 3000,
31
- saveReport: true
32
- },
33
- alias: {
34
- port: 'p',
35
- config: 'c',
36
- debug: 'd',
37
- update: 'u'
38
- }
39
- });
40
-
41
- // @ts-expect-error: define log level for storybook
42
- global.LOGLEVEL = argv.trace ? 'trace' : argv.debug ? 'debug' : 'warn';
43
- if (argv.trace) {
44
- logger.setDefaultLevel(levels.TRACE);
45
- setDefaultLevel(levels.TRACE);
46
- } else if (argv.debug) {
47
- logger.setDefaultLevel(levels.DEBUG);
48
- setDefaultLevel(levels.DEBUG);
49
- } else {
50
- logger.setDefaultLevel(levels.INFO);
51
- setDefaultLevel(levels.INFO);
52
- }
53
- void creevey(argv);
package/lib/esm/index.js DELETED
@@ -1,4 +0,0 @@
1
- export * from './types';
2
- export { loadStories as browserStoriesProvider } from './server/storybook/providers/browser';
3
- export { loadStories as hybridStoriesProvider } from './server/storybook/providers/hybrid';
4
- export * from './server/testsFiles/parser';
@@ -1,66 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { loadStories as browserStoriesProvider } from './storybook/providers/browser';
4
- import { isDefined } from '../types';
5
- export const defaultBrowser = 'chrome';
6
- export const defaultConfig = {
7
- disableTelemetry: false,
8
- useDocker: true,
9
- dockerImage: 'aerokube/selenoid:latest-release',
10
- dockerImagePlatform: '',
11
- pullImages: true,
12
- failFast: false,
13
- storybookUrl: 'http://localhost:6006',
14
- screenDir: path.resolve('images'),
15
- reportDir: path.resolve('report'),
16
- maxRetries: 0,
17
- diffOptions: {
18
- threshold: 0,
19
- includeAA: true
20
- },
21
- browsers: {
22
- [defaultBrowser]: true
23
- },
24
- hooks: {},
25
- babelOptions: _ => _,
26
- testsRegex: /\.creevey\.(t|j)s$/
27
- };
28
- function normalizeBrowserConfig(name, config) {
29
- if (typeof config == 'boolean') return {
30
- browserName: name
31
- };
32
- if (typeof config == 'string') return {
33
- browserName: config
34
- };
35
- return config;
36
- }
37
- function resolveConfigPath(configPath) {
38
- const rootDir = process.cwd();
39
- const configDir = path.resolve('.creevey');
40
- if (isDefined(configPath)) {
41
- configPath = path.resolve(configPath);
42
- } else if (fs.existsSync(configDir)) {
43
- configPath = path.join(configDir, 'config');
44
- // TODO We already find file with extension, why not use it?
45
- } else if (fs.readdirSync(rootDir).find(filename => filename.startsWith('creevey.config'))) {
46
- configPath = path.join(rootDir, 'creevey.config');
47
- }
48
- return configPath;
49
- }
50
- export async function readConfig(options) {
51
- const configPath = resolveConfigPath(options.config);
52
- const userConfig = {
53
- ...defaultConfig
54
- };
55
- if (isDefined(configPath)) Object.assign(userConfig, (await import(configPath)).default);
56
- if (!userConfig.storiesProvider) userConfig.storiesProvider = browserStoriesProvider;
57
- if (options.failFast != undefined) userConfig.failFast = Boolean(options.failFast);
58
- if (options.reportDir) userConfig.reportDir = path.resolve(options.reportDir);
59
- if (options.screenDir) userConfig.screenDir = path.resolve(options.screenDir);
60
- if (options.storybookUrl) userConfig.storybookUrl = options.storybookUrl;
61
-
62
- // NOTE: Hack to pass typescript checking
63
- const config = userConfig;
64
- Object.entries(config.browsers).forEach(([browser, browserConfig]) => config.browsers[browser] = normalizeBrowserConfig(browser, browserConfig));
65
- return config;
66
- }
@@ -1,115 +0,0 @@
1
- import cluster from 'cluster';
2
- import { isDockerMessage } from '../types';
3
- import { subscribeOn, sendDockerMessage, emitDockerMessage } from './messages';
4
- import { isInsideDocker, LOCALHOST_REGEXP } from './utils';
5
- import Dockerode from 'dockerode';
6
- import { Writable } from 'stream';
7
- import ora from 'ora';
8
- import { logger } from './logger';
9
- const docker = new Dockerode();
10
- class DevNull extends Writable {
11
- _write(_chunk, _encoding, callback) {
12
- setImmediate(callback);
13
- }
14
- }
15
- export async function pullImages(images, {
16
- auth,
17
- platform
18
- } = {}) {
19
- const args = {};
20
- if (auth) args.authconfig = auth;
21
- if (platform) args.platform = platform;
22
- logger.info('Pull docker images');
23
- for (const image of images) {
24
- await new Promise((resolve, reject) => {
25
- const spinner = ora(`${image}: Pull start`).start();
26
-
27
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
28
- docker.pull(image, args, function (pullError, stream) {
29
- if (pullError) {
30
- spinner.fail();
31
- return reject(pullError);
32
- }
33
-
34
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
35
- docker.modem.followProgress(stream, onFinished, onProgress);
36
- function onFinished(error) {
37
- if (error) {
38
- spinner.fail();
39
- return reject(error);
40
- }
41
- spinner.succeed(`${image}: Pull complete`);
42
- resolve();
43
- }
44
- function onProgress(event) {
45
- if (!/^[a-z0-9]{12}$/i.test(event.id)) return;
46
- spinner.text = `${image}: [${event.id}] ${event.status} ${event.progress ? `${event.progress}` : ''}`;
47
- }
48
- });
49
- });
50
- }
51
- }
52
- export async function runImage(image, args, options, debug) {
53
- await Promise.all((await docker.listContainers({
54
- all: true,
55
- filters: {
56
- ancestor: [image]
57
- }
58
- })).map(async info => {
59
- const container = docker.getContainer(info.Id);
60
- try {
61
- await container.stop();
62
- } catch (_) {
63
- /* noop */
64
- }
65
- await container.remove();
66
- }));
67
- const hub = docker.run(image, args, debug ? process.stdout : new DevNull(), options, error => {
68
- if (error) throw error;
69
- });
70
- return new Promise(resolve => {
71
- hub.once('container', container => {
72
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
73
- subscribeOn('shutdown', async () => {
74
- try {
75
- await container.stop();
76
- await container.remove();
77
- } catch (error) {
78
- /* noop */
79
- }
80
- });
81
- });
82
- hub.once('start', container => void container.inspect().then(info => resolve(info.NetworkSettings.Networks.bridge.IPAddress)));
83
- });
84
- }
85
- export default async function (config, browser, startContainer) {
86
- if (cluster.isPrimary) {
87
- const host = await startContainer();
88
- let gridUrl = 'http://localhost:4444/wd/hub';
89
- gridUrl = isInsideDocker ? gridUrl.replace(LOCALHOST_REGEXP, host) : gridUrl;
90
- cluster.on('message', (worker, message) => {
91
- if (!isDockerMessage(message)) return;
92
- const dockerMessage = message;
93
- if (dockerMessage.type != 'start') return;
94
- sendDockerMessage(worker, {
95
- type: 'success',
96
- payload: {
97
- gridUrl
98
- }
99
- });
100
- });
101
- } else {
102
- if (browser && config.browsers[browser].gridUrl) return Promise.resolve();
103
- return new Promise(resolve => {
104
- subscribeOn('docker', message => {
105
- if (message.type == 'success') {
106
- config.gridUrl = message.payload.gridUrl;
107
- resolve();
108
- }
109
- });
110
- emitDockerMessage({
111
- type: 'start'
112
- });
113
- });
114
- }
115
- }
@@ -1,50 +0,0 @@
1
- import cluster from 'cluster';
2
- import { readConfig, defaultBrowser } from './config';
3
- import { logger } from './logger';
4
-
5
- // NOTE: Impure function, mutate config by adding gridUrl prop
6
- async function startWebdriverServer(config, options) {
7
- if (config.useDocker) {
8
- return (await import('./docker')).default(config, options.browser, async () => (await import('./selenium/selenoid')).startSelenoidContainer(config, options.debug));
9
- } else {
10
- return (await import('./selenium/selenoid')).startSelenoidStandalone(config, options.debug);
11
- }
12
- }
13
- export default async function (options) {
14
- const config = await readConfig(options);
15
- const {
16
- browser = defaultBrowser,
17
- tests,
18
- update,
19
- ui,
20
- port
21
- } = options;
22
- if (!config) return;
23
-
24
- // NOTE: We don't need docker nor selenoid for webpack or update options
25
- if (!(config.gridUrl || Object.values(config.browsers).every(({
26
- gridUrl
27
- }) => gridUrl)) && !tests && !update) {
28
- await startWebdriverServer(config, options);
29
- }
30
- switch (true) {
31
- case Boolean(update):
32
- {
33
- return (await import('./update')).default(config, typeof update == 'string' ? update : undefined);
34
- }
35
- case cluster.isPrimary:
36
- {
37
- logger.info('Starting Master Process');
38
- const resolveApi = (await import('./master/server')).default(config.reportDir, port, ui);
39
- return (await import('./master')).default(config, options, resolveApi);
40
- }
41
- default:
42
- {
43
- logger.info(`Starting Worker for ${browser}`);
44
- return (await import('./worker')).default(config, {
45
- ...options,
46
- browser
47
- });
48
- }
49
- }
50
- }
@@ -1,51 +0,0 @@
1
- import WebSocket from 'ws';
2
- import { logger } from '../logger';
3
- function broadcast(wss, message) {
4
- wss.clients.forEach(ws => {
5
- if (ws.readyState === WebSocket.OPEN) {
6
- ws.send(JSON.stringify(message));
7
- }
8
- });
9
- }
10
- export default function creeveyApi(runner) {
11
- return {
12
- subscribe(wss) {
13
- runner.on('update', payload => broadcast(wss, {
14
- type: 'update',
15
- payload
16
- }));
17
- },
18
- handleMessage(ws, message) {
19
- if (typeof message != 'string') {
20
- logger.info('unhandled message', message);
21
- return;
22
- }
23
- const command = JSON.parse(message);
24
- switch (command.type) {
25
- case 'status':
26
- {
27
- ws.send(JSON.stringify({
28
- type: 'status',
29
- payload: runner.status
30
- }));
31
- return;
32
- }
33
- case 'start':
34
- {
35
- runner.start(command.payload);
36
- return;
37
- }
38
- case 'stop':
39
- {
40
- runner.stop();
41
- return;
42
- }
43
- case 'approve':
44
- {
45
- void runner.approve(command.payload);
46
- return;
47
- }
48
- }
49
- }
50
- };
51
- }
@@ -1,115 +0,0 @@
1
- import path from 'path';
2
- import { copyFile, readdir, mkdir, existsSync, writeFile } from 'fs';
3
- import { promisify } from 'util';
4
- import master from './master';
5
- import creeveyApi from './api';
6
- import { isDefined } from '../../types';
7
- import { shutdown, shutdownWorkers, testsToImages, readDirRecursive } from '../utils';
8
- import { subscribeOn } from '../messages';
9
- import { logger } from '../logger';
10
- import { sendScreenshotsCount } from '../telemetry';
11
- const writeFileAsync = promisify(writeFile);
12
- const copyFileAsync = promisify(copyFile);
13
- const readdirAsync = promisify(readdir);
14
- const mkdirAsync = promisify(mkdir);
15
- async function copyStatics(reportDir) {
16
- const clientDir = path.join(__dirname, '../../client/web');
17
- const files = (await readdirAsync(clientDir, {
18
- withFileTypes: true
19
- })).filter(dirent => dirent.isFile() && !dirent.name.endsWith('.d.ts') && !dirent.name.endsWith('.tsx')).map(dirent => dirent.name);
20
- await mkdirAsync(reportDir, {
21
- recursive: true
22
- });
23
- for (const file of files) {
24
- await copyFileAsync(path.join(clientDir, file), path.join(reportDir, file));
25
- }
26
- }
27
- function reportDataModule(data) {
28
- return `
29
- (function (root, factory) {
30
- if (typeof module === 'object' && module.exports) {
31
- module.exports = factory();
32
- } else {
33
- root.__CREEVEY_DATA__ = factory();
34
- }
35
- }(this, function () { return ${JSON.stringify(data)} }));
36
- `;
37
- }
38
- function outputUnnecessaryImages(imagesDir, images) {
39
- if (!existsSync(imagesDir)) return;
40
- const unnecessaryImages = readDirRecursive(imagesDir).map(imagePath => path.posix.relative(imagesDir, imagePath)).filter(imagePath => !images.has(imagePath));
41
- if (unnecessaryImages.length > 0) {
42
- logger.warn('We found unnecessary screenshot images, those can be safely removed:\n', unnecessaryImages.join('\n'));
43
- }
44
- }
45
- export default async function (config, options, resolveApi) {
46
- let runner = null;
47
- if (config.hooks.before) {
48
- await config.hooks.before();
49
- }
50
- subscribeOn('shutdown', () => {
51
- var _config$hooks$after, _config$hooks;
52
- return (_config$hooks$after = (_config$hooks = config.hooks).after) === null || _config$hooks$after === void 0 ? void 0 : _config$hooks$after.call(_config$hooks);
53
- });
54
- process.removeListener('SIGINT', shutdown);
55
- process.on('SIGINT', () => {
56
- var _runner, _runner2;
57
- (_runner = runner) === null || _runner === void 0 || _runner.removeAllListeners('stop');
58
- if ((_runner2 = runner) !== null && _runner2 !== void 0 && _runner2.isRunning) {
59
- var _runner4;
60
- // TODO Better handle stop
61
- void Promise.race([new Promise(resolve => setTimeout(resolve, 10000)), new Promise(resolve => {
62
- var _runner3;
63
- return (_runner3 = runner) === null || _runner3 === void 0 ? void 0 : _runner3.once('stop', resolve);
64
- })]).then(() => shutdownWorkers());
65
- (_runner4 = runner) === null || _runner4 === void 0 || _runner4.stop();
66
- } else {
67
- void shutdownWorkers();
68
- }
69
- });
70
- runner = await master(config, {
71
- watch: options.ui,
72
- debug: options.debug,
73
- port: options.port
74
- });
75
- if (options.saveReport) {
76
- runner.on('stop', () => {
77
- void copyStatics(config.reportDir).then(() => {
78
- var _runner5;
79
- return writeFileAsync(path.join(config.reportDir, 'data.js'), reportDataModule((_runner5 = runner) === null || _runner5 === void 0 ? void 0 : _runner5.status.tests));
80
- });
81
- });
82
- }
83
- if (options.ui) {
84
- resolveApi(creeveyApi(runner));
85
- logger.info(`Started on http://localhost:${options.port}`);
86
- } else {
87
- if (Object.values(runner.status.tests).filter(test => test && !test.skip).length == 0) {
88
- logger.warn("Don't have any tests to run");
89
- // eslint-disable-next-line no-process-exit
90
- void shutdownWorkers().then(() => process.exit());
91
- return;
92
- }
93
- runner.once('stop', () => {
94
- var _runner6, _runner7;
95
- const tests = Object.values(((_runner6 = runner) === null || _runner6 === void 0 ? void 0 : _runner6.status.tests) ?? {});
96
- const isSuccess = tests.filter(isDefined).filter(({
97
- skip
98
- }) => !skip).every(({
99
- status
100
- }) => status == 'success');
101
- // TODO output summary
102
- process.exitCode = isSuccess ? 0 : -1;
103
- if (!config.failFast) outputUnnecessaryImages(config.screenDir, testsToImages(tests));
104
- sendScreenshotsCount(config, options, (_runner7 = runner) === null || _runner7 === void 0 ? void 0 : _runner7.status).catch(reason => {
105
- const error = reason instanceof Error ? reason.stack ?? reason.message : reason;
106
- logger.warn(`Can't send telemetry: ${error}`);
107
- }).finally(() => {
108
- // eslint-disable-next-line no-process-exit
109
- void shutdownWorkers().then(() => process.exit());
110
- });
111
- });
112
- // TODO grep
113
- runner.start(Object.keys(runner.status.tests));
114
- }
115
- }
@@ -1,33 +0,0 @@
1
- import path from 'path';
2
- import { isDefined } from '../../types';
3
- import { loadTestsFromStories, saveTestsJson } from '../stories';
4
- import Runner from './runner';
5
- function mergeTests(testsWithReports, testsFromStories) {
6
- Object.values(testsFromStories).filter(isDefined).forEach(test => {
7
- const testWithReport = testsWithReports[test.id];
8
- if (!testWithReport) return;
9
- test.retries = testWithReport.retries;
10
- if (testWithReport.status == 'success' || testWithReport.status == 'failed') test.status = testWithReport.status;
11
- test.results = testWithReport.results;
12
- test.approved = testWithReport.approved;
13
- });
14
- return testsFromStories;
15
- }
16
- export default async function master(config, options) {
17
- const runner = new Runner(config);
18
- const reportDataPath = path.join(config.reportDir, 'data.js');
19
- let testsFromReport = {};
20
- try {
21
- testsFromReport = await import(reportDataPath);
22
- } catch (error) {
23
- // Ignore error
24
- }
25
- await runner.init();
26
- const tests = await loadTestsFromStories(Object.keys(config.browsers), listener => config.storiesProvider(config, options, listener), testsDiff => {
27
- runner.updateTests(testsDiff);
28
- saveTestsJson(runner.tests, config.reportDir);
29
- });
30
- runner.tests = mergeTests(testsFromReport, tests);
31
- saveTestsJson(runner.tests, config.reportDir);
32
- return runner;
33
- }
@@ -1,154 +0,0 @@
1
- import cluster, { Worker as ClusterWorker } from 'cluster';
2
- import { EventEmitter } from 'events';
3
- import { isWorkerMessage } from '../../types';
4
- import { sendTestMessage, sendShutdownMessage, subscribeOnWorker } from '../messages';
5
- import { isShuttingDown } from '../utils';
6
- const FORK_RETRIES = 5;
7
- export default class Pool extends EventEmitter {
8
- workers = [];
9
- queue = [];
10
- forcedStop = false;
11
- get isRunning() {
12
- return this.workers.length !== this.freeWorkers.length;
13
- }
14
- constructor(config, browser) {
15
- super();
16
- this.browser = browser;
17
- this.failFast = config.failFast;
18
- this.maxRetries = config.maxRetries;
19
- this.config = config.browsers[browser];
20
- }
21
- async init() {
22
- const poolSize = this.config.limit || 1;
23
- // TODO Init queue for workers to smooth browser starting load
24
- this.workers = (await Promise.all(Array.from({
25
- length: poolSize
26
- }).map(() => this.forkWorker()))).filter(workerOrError => workerOrError instanceof ClusterWorker);
27
- if (this.workers.length != poolSize) throw new Error(`Can't instantiate workers for ${this.browser} due many errors`);
28
- this.workers.forEach(worker => this.exitHandler(worker));
29
- }
30
- start(tests) {
31
- if (this.isRunning) return false;
32
- this.queue = tests.map(({
33
- id,
34
- path
35
- }) => ({
36
- id,
37
- path,
38
- retries: 0
39
- }));
40
- this.process();
41
- return true;
42
- }
43
- stop() {
44
- if (!this.isRunning) {
45
- this.emit('stop');
46
- return;
47
- }
48
- this.forcedStop = true;
49
- this.queue = [];
50
- }
51
- process() {
52
- const worker = this.getFreeWorker();
53
- const [test] = this.queue;
54
- if (this.queue.length == 0 && this.workers.length === this.freeWorkers.length) {
55
- this.forcedStop = false;
56
- this.emit('stop');
57
- return;
58
- }
59
- if (!worker || !test) return;
60
- worker.isRunning = true;
61
- const {
62
- id
63
- } = test;
64
- this.queue.shift();
65
- this.sendStatus({
66
- id,
67
- status: 'running'
68
- });
69
- this.subscribe(worker, test);
70
- sendTestMessage(worker, {
71
- type: 'start',
72
- payload: test
73
- });
74
- this.process();
75
- }
76
- sendStatus(message) {
77
- this.emit('test', message);
78
- }
79
- getFreeWorker() {
80
- return this.freeWorkers[Math.floor(Math.random() * this.freeWorkers.length)];
81
- }
82
- get aliveWorkers() {
83
- return this.workers.filter(worker => !worker.exitedAfterDisconnect);
84
- }
85
- get freeWorkers() {
86
- return this.aliveWorkers.filter(worker => !worker.isRunning);
87
- }
88
- async forkWorker(retry = 0) {
89
- cluster.setupPrimary({
90
- args: ['--browser', this.browser, ...process.argv.slice(2)]
91
- });
92
- const worker = cluster.fork();
93
- const message = await new Promise(resolve => {
94
- const readyHandler = message => {
95
- if (!isWorkerMessage(message)) return;
96
- worker.off('message', readyHandler);
97
- resolve(message);
98
- };
99
- worker.on('message', readyHandler);
100
- });
101
- if (message.type != 'error') return worker;
102
- this.gracefullyKill(worker);
103
- if (retry == FORK_RETRIES) return message.payload;
104
- return this.forkWorker(retry + 1);
105
- }
106
- exitHandler(worker) {
107
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
108
- worker.once('exit', async () => {
109
- if (isShuttingDown.current) return;
110
- const workerOrError = await this.forkWorker();
111
- if (!(workerOrError instanceof ClusterWorker)) throw new Error(`Can't instantiate worker for ${this.browser} due many errors`);
112
- this.exitHandler(workerOrError);
113
- this.workers[this.workers.indexOf(worker)] = workerOrError;
114
- this.process();
115
- });
116
- }
117
- gracefullyKill(worker) {
118
- const timeout = setTimeout(() => worker.kill(), 10000);
119
- worker.on('exit', () => clearTimeout(timeout));
120
- sendShutdownMessage(worker);
121
- }
122
- shouldRetry(test) {
123
- return test.retries < this.maxRetries && !this.forcedStop;
124
- }
125
- handleTestResult(worker, test, result) {
126
- const shouldRetry = result.status == 'failed' && this.shouldRetry(test);
127
- if (shouldRetry) {
128
- test.retries += 1;
129
- this.queue[this.failFast ? 'unshift' : 'push'](test);
130
- }
131
- this.sendStatus({
132
- id: test.id,
133
- status: shouldRetry ? 'retrying' : result.status,
134
- result
135
- });
136
- worker.isRunning = false;
137
- setImmediate(() => this.process());
138
- }
139
- subscribe(worker, test) {
140
- const subscriptions = [subscribeOnWorker(worker, 'worker', message => {
141
- if (message.type != 'error') return;
142
- subscriptions.forEach(unsubscribe => unsubscribe());
143
- this.gracefullyKill(worker);
144
- this.handleTestResult(worker, test, {
145
- status: 'failed',
146
- ...message.payload
147
- });
148
- }), subscribeOnWorker(worker, 'test', message => {
149
- if (message.type != 'end') return;
150
- subscriptions.forEach(unsubscribe => unsubscribe());
151
- this.handleTestResult(worker, test, message.payload);
152
- })];
153
- }
154
- }