creevey 0.9.0-beta.20 → 0.9.0-beta.22

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 (475) 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 +86 -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 +10 -9
  203. package/dist/server/utils.js +157 -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/manager/package.json +3 -0
  230. package/package.json +76 -103
  231. package/preset/README.md +3 -0
  232. package/preset/package.json +3 -0
  233. package/preview/README.md +3 -0
  234. package/preview/package.json +3 -0
  235. package/src/cli.ts +3 -0
  236. package/src/client/addon/components/Addon.tsx +53 -0
  237. package/src/client/addon/components/Icons.tsx +28 -0
  238. package/src/client/addon/components/Panel.tsx +53 -0
  239. package/src/client/addon/components/TestSelect.tsx +48 -0
  240. package/src/client/addon/components/Tools.tsx +93 -0
  241. package/src/client/addon/controller.ts +224 -0
  242. package/src/client/addon/decorator.ts +3 -0
  243. package/src/client/addon/index.ts +2 -0
  244. package/src/client/addon/manager.ts +44 -0
  245. package/{lib/esm/client/addon/preset.js → src/client/addon/preset.ts} +2 -1
  246. package/src/client/addon/preview.ts +7 -0
  247. package/src/client/addon/readyForCapture.ts +9 -0
  248. package/src/client/addon/utils.tsx +24 -0
  249. package/src/client/addon/withCreevey.ts +326 -0
  250. package/src/client/shared/components/ImagesView/BlendView.tsx +71 -0
  251. package/src/client/shared/components/ImagesView/ImagesView.tsx +62 -0
  252. package/src/client/shared/components/ImagesView/SideBySideView.tsx +139 -0
  253. package/{lib/esm/client/shared/components/ImagesView/SlideView.js → src/client/shared/components/ImagesView/SlideView.tsx} +78 -75
  254. package/src/client/shared/components/ImagesView/SwapView.tsx +81 -0
  255. package/src/client/shared/components/ImagesView/common.ts +23 -0
  256. package/src/client/shared/components/ImagesView/index.ts +5 -0
  257. package/src/client/shared/components/PageFooter/PageFooter.tsx +44 -0
  258. package/src/client/shared/components/PageFooter/Paging.tsx +105 -0
  259. package/src/client/shared/components/PageHeader/ImagePreview.tsx +82 -0
  260. package/src/client/shared/components/PageHeader/PageHeader.tsx +123 -0
  261. package/src/client/shared/components/ResultsPage.tsx +135 -0
  262. package/src/client/shared/creeveyClientApi.ts +64 -0
  263. package/src/client/shared/helpers.ts +422 -0
  264. package/src/client/shared/viewMode.ts +10 -0
  265. package/src/client/web/CreeveyApp.tsx +177 -0
  266. package/src/client/web/CreeveyContext.tsx +20 -0
  267. package/src/client/web/CreeveyLoader.tsx +56 -0
  268. package/src/client/web/CreeveyView/SideBar/Checkbox.tsx +118 -0
  269. package/src/client/web/CreeveyView/SideBar/Search.tsx +140 -0
  270. package/src/client/web/CreeveyView/SideBar/SideBar.tsx +125 -0
  271. package/src/client/web/CreeveyView/SideBar/SideBarHeader.tsx +138 -0
  272. package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +118 -0
  273. package/src/client/web/CreeveyView/SideBar/TestLink.tsx +67 -0
  274. package/src/client/web/CreeveyView/SideBar/TestStatusIcon.tsx +58 -0
  275. package/src/client/web/CreeveyView/SideBar/TestsStatus.tsx +105 -0
  276. package/src/client/web/CreeveyView/SideBar/Toggle.tsx +85 -0
  277. package/src/client/web/CreeveyView/SideBar/index.ts +1 -0
  278. package/src/client/web/KeyboardEventsContext.tsx +121 -0
  279. package/{lib/esm → src}/client/web/index.html +12 -3
  280. package/src/client/web/index.tsx +63 -0
  281. package/src/creevey.ts +47 -0
  282. package/src/index.ts +4 -0
  283. package/src/server/config.ts +83 -0
  284. package/src/server/docker.ts +136 -0
  285. package/src/server/index.ts +51 -0
  286. package/{lib/esm/server/logger.js → src/server/logger.ts} +8 -6
  287. package/src/server/master/api.ts +55 -0
  288. package/src/server/master/index.ts +111 -0
  289. package/src/server/master/master.ts +47 -0
  290. package/src/server/master/pool.ts +203 -0
  291. package/src/server/master/runner.ts +189 -0
  292. package/src/server/master/server.ts +124 -0
  293. package/src/server/messages.ts +273 -0
  294. package/src/server/selenium/browser.ts +834 -0
  295. package/src/server/selenium/index.ts +2 -0
  296. package/src/server/selenium/selenoid.ts +154 -0
  297. package/src/server/stories.ts +133 -0
  298. package/src/server/storybook/providers/browser.ts +58 -0
  299. package/src/server/storybook/providers/hybrid.ts +70 -0
  300. package/src/server/telemetry.ts +212 -0
  301. package/src/server/testsFiles/parser.ts +62 -0
  302. package/src/server/update.ts +74 -0
  303. package/src/server/utils.ts +206 -0
  304. package/src/server/worker/chai-image.ts +147 -0
  305. package/src/server/worker/helpers.ts +61 -0
  306. package/src/server/worker/index.ts +1 -0
  307. package/src/server/worker/reporter.ts +170 -0
  308. package/src/server/worker/worker.ts +234 -0
  309. package/src/shared/index.ts +76 -0
  310. package/src/shared/serializeRegExp.ts +26 -0
  311. package/src/types.ts +500 -0
  312. package/types/chai.d.ts +0 -1
  313. package/types/global.d.ts +1 -1
  314. package/types/mocha.d.ts +1 -1
  315. package/.yarn/install-state.gz +0 -0
  316. package/addon/package.json +0 -5
  317. package/jest.config.js +0 -6
  318. package/lib/cjs/cli.js +0 -6
  319. package/lib/cjs/client/addon/Manager.js +0 -192
  320. package/lib/cjs/client/addon/components/Addon.js +0 -48
  321. package/lib/cjs/client/addon/components/Icons.js +0 -40
  322. package/lib/cjs/client/addon/components/Panel.js +0 -59
  323. package/lib/cjs/client/addon/components/TestSelect.js +0 -52
  324. package/lib/cjs/client/addon/components/Tools.js +0 -84
  325. package/lib/cjs/client/addon/decorator.js +0 -8
  326. package/lib/cjs/client/addon/index.js +0 -27
  327. package/lib/cjs/client/addon/preset.js +0 -8
  328. package/lib/cjs/client/addon/preview.js +0 -11
  329. package/lib/cjs/client/addon/readyForCapture.js +0 -9
  330. package/lib/cjs/client/addon/register.js +0 -57
  331. package/lib/cjs/client/addon/utils.js +0 -34
  332. package/lib/cjs/client/addon/withCreevey.js +0 -272
  333. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +0 -75
  334. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +0 -76
  335. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +0 -139
  336. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +0 -151
  337. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +0 -79
  338. package/lib/cjs/client/shared/components/ImagesView/index.js +0 -40
  339. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +0 -43
  340. package/lib/cjs/client/shared/components/PageFooter/Paging.js +0 -77
  341. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +0 -86
  342. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +0 -100
  343. package/lib/cjs/client/shared/components/ResultsPage.js +0 -116
  344. package/lib/cjs/client/shared/creeveyClientApi.js +0 -66
  345. package/lib/cjs/client/shared/helpers.js +0 -357
  346. package/lib/cjs/client/shared/viewMode.js +0 -13
  347. package/lib/cjs/client/web/192.js +0 -1
  348. package/lib/cjs/client/web/632.js +0 -43
  349. package/lib/cjs/client/web/794.js +0 -1
  350. package/lib/cjs/client/web/main.js +0 -79
  351. package/lib/cjs/creevey.js +0 -56
  352. package/lib/cjs/index.js +0 -47
  353. package/lib/cjs/server/config.js +0 -76
  354. package/lib/cjs/server/docker.js +0 -124
  355. package/lib/cjs/server/index.js +0 -58
  356. package/lib/cjs/server/logger.js +0 -34
  357. package/lib/cjs/server/master/api.js +0 -58
  358. package/lib/cjs/server/master/index.js +0 -122
  359. package/lib/cjs/server/master/master.js +0 -42
  360. package/lib/cjs/server/master/pool.js +0 -163
  361. package/lib/cjs/server/master/runner.js +0 -254
  362. package/lib/cjs/server/master/server.js +0 -110
  363. package/lib/cjs/server/messages.js +0 -218
  364. package/lib/cjs/server/selenium/browser.js +0 -644
  365. package/lib/cjs/server/selenium/index.js +0 -27
  366. package/lib/cjs/server/selenium/selenoid.js +0 -148
  367. package/lib/cjs/server/stories.js +0 -148
  368. package/lib/cjs/server/storybook/providers/browser.js +0 -64
  369. package/lib/cjs/server/storybook/providers/hybrid.js +0 -63
  370. package/lib/cjs/server/telemetry.js +0 -167
  371. package/lib/cjs/server/testsFiles/parser.js +0 -56
  372. package/lib/cjs/server/testsFiles/register.js +0 -42
  373. package/lib/cjs/server/update.js +0 -62
  374. package/lib/cjs/server/utils.js +0 -144
  375. package/lib/cjs/server/worker/chai-image.js +0 -116
  376. package/lib/cjs/server/worker/helpers.js +0 -59
  377. package/lib/cjs/server/worker/index.js +0 -13
  378. package/lib/cjs/server/worker/reporter.js +0 -93
  379. package/lib/cjs/server/worker/worker.js +0 -238
  380. package/lib/cjs/shared/index.js +0 -87
  381. package/lib/cjs/shared/serializeRegExp.js +0 -34
  382. package/lib/cjs/types.js +0 -65
  383. package/lib/esm/cli.js +0 -4
  384. package/lib/esm/client/addon/Manager.js +0 -185
  385. package/lib/esm/client/addon/components/Addon.js +0 -39
  386. package/lib/esm/client/addon/components/Icons.js +0 -31
  387. package/lib/esm/client/addon/components/Panel.js +0 -51
  388. package/lib/esm/client/addon/components/TestSelect.js +0 -45
  389. package/lib/esm/client/addon/components/Tools.js +0 -75
  390. package/lib/esm/client/addon/decorator.js +0 -2
  391. package/lib/esm/client/addon/index.js +0 -2
  392. package/lib/esm/client/addon/preview.js +0 -5
  393. package/lib/esm/client/addon/readyForCapture.js +0 -3
  394. package/lib/esm/client/addon/register.js +0 -49
  395. package/lib/esm/client/addon/utils.js +0 -27
  396. package/lib/esm/client/addon/withCreevey.js +0 -263
  397. package/lib/esm/client/shared/components/ImagesView/BlendView.js +0 -67
  398. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +0 -67
  399. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +0 -131
  400. package/lib/esm/client/shared/components/ImagesView/SwapView.js +0 -71
  401. package/lib/esm/client/shared/components/ImagesView/index.js +0 -5
  402. package/lib/esm/client/shared/components/PageFooter/PageFooter.js +0 -36
  403. package/lib/esm/client/shared/components/PageFooter/Paging.js +0 -70
  404. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +0 -79
  405. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +0 -92
  406. package/lib/esm/client/shared/components/ResultsPage.js +0 -107
  407. package/lib/esm/client/shared/creeveyClientApi.js +0 -60
  408. package/lib/esm/client/shared/helpers.js +0 -327
  409. package/lib/esm/client/shared/viewMode.js +0 -6
  410. package/lib/esm/client/web/192.js +0 -1
  411. package/lib/esm/client/web/632.js +0 -43
  412. package/lib/esm/client/web/794.js +0 -1
  413. package/lib/esm/client/web/main.js +0 -79
  414. package/lib/esm/client/web/main.js.LICENSE.txt +0 -34
  415. package/lib/esm/creevey.js +0 -53
  416. package/lib/esm/index.js +0 -4
  417. package/lib/esm/server/config.js +0 -66
  418. package/lib/esm/server/docker.js +0 -115
  419. package/lib/esm/server/index.js +0 -50
  420. package/lib/esm/server/master/api.js +0 -51
  421. package/lib/esm/server/master/index.js +0 -115
  422. package/lib/esm/server/master/master.js +0 -33
  423. package/lib/esm/server/master/pool.js +0 -154
  424. package/lib/esm/server/master/runner.js +0 -246
  425. package/lib/esm/server/master/server.js +0 -103
  426. package/lib/esm/server/messages.js +0 -200
  427. package/lib/esm/server/selenium/browser.js +0 -631
  428. package/lib/esm/server/selenium/index.js +0 -2
  429. package/lib/esm/server/selenium/selenoid.js +0 -140
  430. package/lib/esm/server/stories.js +0 -139
  431. package/lib/esm/server/storybook/providers/browser.js +0 -56
  432. package/lib/esm/server/storybook/providers/hybrid.js +0 -53
  433. package/lib/esm/server/telemetry.js +0 -160
  434. package/lib/esm/server/testsFiles/parser.js +0 -44
  435. package/lib/esm/server/testsFiles/register.js +0 -34
  436. package/lib/esm/server/update.js +0 -53
  437. package/lib/esm/server/utils.js +0 -125
  438. package/lib/esm/server/worker/chai-image.js +0 -109
  439. package/lib/esm/server/worker/helpers.js +0 -53
  440. package/lib/esm/server/worker/index.js +0 -1
  441. package/lib/esm/server/worker/reporter.js +0 -84
  442. package/lib/esm/server/worker/worker.js +0 -231
  443. package/lib/esm/shared/index.js +0 -77
  444. package/lib/esm/shared/serializeRegExp.js +0 -24
  445. package/lib/esm/types.js +0 -47
  446. package/lib/types/cli.d.ts +0 -1
  447. package/lib/types/client/addon/components/Addon.d.ts +0 -9
  448. package/lib/types/client/addon/components/Tools.d.ts +0 -7
  449. package/lib/types/client/addon/index.d.ts +0 -2
  450. package/lib/types/client/addon/register.d.ts +0 -3
  451. package/lib/types/client/shared/components/ImagesView/index.d.ts +0 -5
  452. package/lib/types/client/web/CreeveyLoader.d.ts +0 -3
  453. package/lib/types/client/web/CreeveyView/SideBar/index.d.ts +0 -1
  454. package/lib/types/index.d.ts +0 -6
  455. package/lib/types/server/master/index.d.ts +0 -3
  456. package/lib/types/server/master/server.d.ts +0 -2
  457. package/lib/types/server/selenium/index.d.ts +0 -2
  458. package/lib/types/server/storybook/providers/browser.d.ts +0 -2
  459. package/lib/types/server/storybook/providers/hybrid.d.ts +0 -2
  460. package/lib/types/server/testsFiles/register.d.ts +0 -2
  461. package/lib/types/server/update.d.ts +0 -2
  462. package/lib/types/server/worker/index.d.ts +0 -1
  463. package/lib/types/server/worker/worker.d.ts +0 -4
  464. package/types/babel__register.d.ts +0 -1
  465. package/types/event-source-polyfill.d.ts +0 -6
  466. /package/{lib/types → dist}/client/addon/decorator.d.ts +0 -0
  467. /package/{lib/types/creevey.d.ts → dist/client/addon/manager.d.ts} +0 -0
  468. /package/{lib/types → dist}/client/addon/preset.d.ts +0 -0
  469. /package/{lib/types → dist}/client/addon/preview.d.ts +0 -0
  470. /package/{lib/types → dist}/client/addon/readyForCapture.d.ts +0 -0
  471. /package/{lib/cjs → dist}/client/web/main.js.LICENSE.txt +0 -0
  472. /package/{lib/types → dist}/server/telemetry.d.ts +0 -0
  473. /package/{lib/types → dist}/server/worker/reporter.d.ts +0 -0
  474. /package/{lib/types → dist}/shared/serializeRegExp.d.ts +0 -0
  475. /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
- }