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,140 +0,0 @@
1
- import path from 'path';
2
- import { promisify } from 'util';
3
- import { mkdir, writeFile, copyFile, lstatSync, existsSync } from 'fs';
4
- import { downloadBinary, getCreeveyCache } from '../utils';
5
- import { pullImages, runImage } from '../docker';
6
- import { Octokit } from '@octokit/core';
7
- import { subscribeOn } from '../messages';
8
- import cluster from 'cluster';
9
- import { chmod, exec } from 'shelljs';
10
- const mkdirAsync = promisify(mkdir);
11
- const writeFileAsync = promisify(writeFile);
12
- const copyFileAsync = promisify(copyFile);
13
- async function createSelenoidConfig(browsers, {
14
- useDocker
15
- }) {
16
- const selenoidConfig = {};
17
- const selenoidConfigDir = path.join(getCreeveyCache(), 'selenoid');
18
- browsers.forEach(({
19
- browserName,
20
- version = 'latest',
21
- browserVersion = version,
22
- dockerImage = `selenoid/${browserName}:${browserVersion}`,
23
- webdriverCommand = []
24
- }) => {
25
- if (!selenoidConfig[browserName]) selenoidConfig[browserName] = {
26
- default: browserVersion,
27
- versions: {}
28
- };
29
- if (!useDocker && webdriverCommand.length == 0) throw new Error('Please specify "webdriverCommand" browser option with path to browser webdriver');
30
- selenoidConfig[browserName].versions[browserVersion] = {
31
- image: useDocker ? dockerImage : webdriverCommand,
32
- port: '4444',
33
- path: !useDocker || ['chrome', 'opera', 'webkit', 'MicrosoftEdge'].includes(browserName) ? '/' : '/wd/hub'
34
- };
35
- });
36
- await mkdirAsync(selenoidConfigDir, {
37
- recursive: true
38
- });
39
- await writeFileAsync(path.join(selenoidConfigDir, 'browsers.json'), JSON.stringify(selenoidConfig));
40
- return selenoidConfigDir;
41
- }
42
- async function downloadSelenoidBinary(destination) {
43
- const platformNameMapping = {
44
- darwin: 'selenoid_darwin_amd64',
45
- linux: 'selenoid_linux_amd64',
46
- win32: 'selenoid_windows_amd64.exe'
47
- };
48
- const octokit = new Octokit();
49
- const response = await octokit.request('GET /repos/{owner}/{repo}/releases/latest', {
50
- owner: 'aerokube',
51
- repo: 'selenoid'
52
- });
53
- const {
54
- assets
55
- } = response.data;
56
- const {
57
- browser_download_url: downloadUrl,
58
- size: binarySize
59
- } = assets.find(({
60
- name
61
- }) => platformNameMapping[process.platform] == name) ?? {};
62
- if (existsSync(destination) && lstatSync(destination).size == binarySize) return;
63
- if (!downloadUrl) {
64
- throw new Error(`Couldn't get download url for selenoid binary. Please download it manually from "https://github.com/aerokube/selenoid/releases/latest" and define "selenoidPath" option in the Creevey config`);
65
- }
66
- return downloadBinary(downloadUrl, destination);
67
- }
68
- export async function startSelenoidStandalone(config, debug) {
69
- config.gridUrl = 'http://localhost:4444/wd/hub';
70
- if (cluster.isWorker) return;
71
- const browsers = Object.values(config.browsers).filter(browser => !browser.gridUrl);
72
- const selenoidConfigDir = await createSelenoidConfig(browsers, {
73
- useDocker: false
74
- });
75
- const binaryPath = path.join(selenoidConfigDir, process.platform == 'win32' ? 'selenoid.exe' : 'selenoid');
76
- if (config.selenoidPath) {
77
- await copyFileAsync(path.resolve(config.selenoidPath), binaryPath);
78
- } else {
79
- await downloadSelenoidBinary(binaryPath);
80
- }
81
-
82
- // TODO Download browser webdrivers
83
- try {
84
- if (process.platform != 'win32') chmod('+x', binaryPath);
85
- } catch (_) {
86
- /* noop */
87
- }
88
- const selenoidProcess = exec(`${binaryPath} -conf ./browsers.json -disable-docker`, {
89
- async: true,
90
- cwd: selenoidConfigDir
91
- });
92
- if (debug) {
93
- var _selenoidProcess$stdo, _selenoidProcess$stde;
94
- (_selenoidProcess$stdo = selenoidProcess.stdout) === null || _selenoidProcess$stdo === void 0 || _selenoidProcess$stdo.pipe(process.stdout);
95
- (_selenoidProcess$stde = selenoidProcess.stderr) === null || _selenoidProcess$stde === void 0 || _selenoidProcess$stde.pipe(process.stderr);
96
- }
97
- subscribeOn('shutdown', () => selenoidProcess.kill());
98
- }
99
- export async function startSelenoidContainer(config, debug) {
100
- const browsers = Object.values(config.browsers).filter(browser => !browser.gridUrl);
101
- const images = [];
102
- let limit = 0;
103
- browsers.forEach(({
104
- browserName,
105
- version = 'latest',
106
- browserVersion = version,
107
- limit: browserLimit = 1,
108
- dockerImage = `selenoid/${browserName}:${browserVersion}`
109
- }) => {
110
- limit += browserLimit;
111
- images.push(dockerImage);
112
- });
113
- const selenoidImage = config.dockerImage;
114
- const pullOptions = {
115
- auth: config.dockerAuth,
116
- platform: config.dockerImagePlatform
117
- };
118
- if (config.pullImages) {
119
- await pullImages([selenoidImage], pullOptions);
120
- await pullImages(images, pullOptions);
121
- }
122
-
123
- // TODO Allow pass custom options
124
- const selenoidOptions = {
125
- ExposedPorts: {
126
- '4444/tcp': {}
127
- },
128
- HostConfig: {
129
- PortBindings: {
130
- '4444/tcp': [{
131
- HostPort: '4444'
132
- }]
133
- },
134
- Binds: ['/var/run/docker.sock:/var/run/docker.sock', `${await createSelenoidConfig(browsers, {
135
- useDocker: true
136
- })}:/etc/selenoid/:ro`]
137
- }
138
- };
139
- return runImage(selenoidImage, ['-limit', String(limit)], selenoidOptions, debug);
140
- }
@@ -1,139 +0,0 @@
1
- import path from 'path';
2
- import { mkdirSync, writeFileSync } from 'fs';
3
- import { createHash } from 'crypto';
4
- import { mapValues, pick } from 'lodash';
5
- import { isDefined, isFunction, isObject } from '../types';
6
- import { shouldSkip, removeProps } from './utils';
7
- function storyTestFabric(delay, testFn) {
8
- return async function storyTest() {
9
- delay ? await new Promise(resolve => setTimeout(resolve, delay)) : void 0;
10
- await (testFn ? testFn.call(this) : this.screenshots.length > 0 ? this.expect(this.screenshots.reduce((screenshots, {
11
- imageName,
12
- screenshot
13
- }, index) => ({
14
- ...screenshots,
15
- [imageName ?? `screenshot_${index}`]: screenshot
16
- }), {})).to.matchImages() : this.expect(await this.takeScreenshot()).to.matchImage());
17
- };
18
- }
19
- function createCreeveyTest(browser, storyMeta, skipOptions, testName) {
20
- const {
21
- kind,
22
- name: story,
23
- id: storyId
24
- } = storyMeta;
25
- const path = [kind, story, testName, browser].filter(isDefined);
26
- const skip = skipOptions ? shouldSkip(browser, {
27
- kind,
28
- story
29
- }, skipOptions, testName) : false;
30
- const id = createHash('sha1').update(path.join('/')).digest('hex');
31
- return {
32
- id,
33
- skip,
34
- browser,
35
- testName,
36
- storyPath: [...kind.split('/').map(x => x.trim()), story],
37
- storyId
38
- };
39
- }
40
- function convertStories(browserName, stories) {
41
- const tests = {};
42
- (Array.isArray(stories) ? stories : Object.values(stories)).forEach(storyMeta => {
43
- // TODO Skip docsOnly stories for now
44
- if (storyMeta.parameters.docsOnly) return;
45
- const {
46
- delay: delayParam,
47
- tests: storyTests,
48
- skip
49
- } = storyMeta.parameters.creevey ?? {};
50
- const delay = typeof delayParam == 'number' ? delayParam : delayParam !== null && delayParam !== void 0 && delayParam.for.includes(browserName) ? delayParam.ms : 0;
51
-
52
- // typeof tests === "undefined" => rootSuite -> kindSuite -> storyTest -> [browsers.png]
53
- // typeof tests === "function" => rootSuite -> kindSuite -> storyTest -> browser -> [images.png]
54
- // typeof tests === "object" => rootSuite -> kindSuite -> storySuite -> test -> [browsers.png]
55
- // typeof tests === "object" => rootSuite -> kindSuite -> storySuite -> test -> browser -> [images.png]
56
-
57
- if (!storyTests) {
58
- const test = createCreeveyTest(browserName, storyMeta, skip);
59
- tests[test.id] = {
60
- ...test,
61
- storyId: storyMeta.id,
62
- story: storyMeta,
63
- fn: storyTestFabric(delay)
64
- };
65
- return;
66
- }
67
- Object.entries(storyTests).forEach(([testName, testFn]) => {
68
- const test = createCreeveyTest(browserName, storyMeta, skip, testName);
69
- tests[test.id] = {
70
- ...test,
71
- storyId: storyMeta.id,
72
- story: storyMeta,
73
- fn: storyTestFabric(delay, testFn)
74
- };
75
- });
76
- });
77
- return tests;
78
- }
79
- export async function loadTestsFromStories(browsers, provider, update) {
80
- const testIdsByFiles = new Map();
81
- const stories = await provider(storiesByFiles => {
82
- const testsDiff = {};
83
- const tests = {};
84
- browsers.forEach(browser => {
85
- Array.from(storiesByFiles.entries()).forEach(([filename, stories]) => {
86
- var _testIdsByFiles$get;
87
- Object.assign(tests, convertStories(browser, stories));
88
- const changed = Object.keys(tests);
89
- const removed = ((_testIdsByFiles$get = testIdsByFiles.get(filename)) === null || _testIdsByFiles$get === void 0 ? void 0 : _testIdsByFiles$get.filter(testId => !tests[testId])) ?? [];
90
- if (changed.length == 0) testIdsByFiles.delete(filename);else testIdsByFiles.set(filename, changed);
91
- Object.assign(testsDiff, tests);
92
- removed.forEach(testId => testsDiff[testId] = undefined);
93
- });
94
- });
95
- update === null || update === void 0 || update(testsDiff);
96
- });
97
- const tests = browsers.reduce((tests, browser) => Object.assign(tests, convertStories(browser, stories)), {});
98
- Object.values(tests).filter(isDefined).forEach(({
99
- id,
100
- story: {
101
- parameters: {
102
- fileName
103
- }
104
- }
105
- }) =>
106
- // TODO Don't use filename as a key, due possible collisions if two require.context with same structure of modules are defined
107
- testIdsByFiles.set(fileName, [...(testIdsByFiles.get(fileName) ?? []), id]));
108
- return tests;
109
- }
110
- export function saveStoriesJson(storiesData, extract) {
111
- const outputDir = typeof extract == 'boolean' ? 'storybook-static' : extract;
112
-
113
- // NOTE Copy-pasted from Storybook's `getStoriesJsonData` method
114
- const allowed = ['fileName', 'docsOnly', 'framework', '__id', '__isArgsStory'];
115
- storiesData.globalParameters = pick(storiesData.globalParameters, allowed);
116
- // @ts-expect-error ignore error
117
- storiesData.kindParameters = mapValues(storiesData.kindParameters, v => pick(v, allowed));
118
- // @ts-expect-error ignore error
119
- storiesData.stories = mapValues(storiesData.stories, v => ({
120
- ...pick(v, ['id', 'name', 'kind', 'story']),
121
- parameters: pick(v.parameters, allowed)
122
- }));
123
-
124
- // TODO Fix args stories
125
- removeProps(storiesData ?? {}, ['stories', () => true, 'parameters', '__isArgsStory']);
126
- Object.values((storiesData === null || storiesData === void 0 ? void 0 : storiesData.stories) ?? {}).forEach(story => isObject(story) && 'parameters' in story && isObject(story.parameters) && delete story.parameters.__isArgsStory);
127
- mkdirSync(outputDir, {
128
- recursive: true
129
- });
130
- writeFileSync(path.join(outputDir, 'stories.json'), JSON.stringify(storiesData, null, 2));
131
- }
132
- export function saveTestsJson(tests, dstPath = process.cwd()) {
133
- mkdirSync(dstPath, {
134
- recursive: true
135
- });
136
- writeFileSync(path.join(dstPath, 'tests.json'),
137
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
138
- JSON.stringify(tests, (_, value) => isFunction(value) ? value.toString() : value, 2));
139
- }
@@ -1,56 +0,0 @@
1
- import cluster from 'cluster';
2
- import { loadStoriesFromBrowser } from '../../selenium';
3
- import { emitStoriesMessage, sendStoriesMessage, subscribeOn, subscribeOnWorker } from '../../messages';
4
- import { isDefined } from '../../../types';
5
- import { logger } from '../../logger';
6
- import { deserializeRawStories } from '../../../shared';
7
- export const loadStories = async (_config, _options, storiesListener) => {
8
- if (cluster.isPrimary) {
9
- return new Promise(resolve => {
10
- const worker = Object.values(cluster.workers ?? {}).filter(isDefined).find(worker => worker.isConnected());
11
- if (worker) {
12
- const unsubscribe = subscribeOnWorker(worker, 'stories', message => {
13
- if (message.type == 'set') {
14
- const {
15
- stories,
16
- oldTests
17
- } = message.payload;
18
- if (oldTests.length > 0) logger.warn(`If you use browser stories provider of CSFv3 Storybook feature\n` + `Creevey will not load tests defined in story parameters from following stories:\n` + oldTests.join('\n'));
19
- unsubscribe();
20
- resolve(stories);
21
- }
22
- });
23
- sendStoriesMessage(worker, {
24
- type: 'get'
25
- });
26
- }
27
- subscribeOn('stories', message => {
28
- // TODO updates only one browser :(
29
- if (message.type == 'update') storiesListener(new Map(message.payload));
30
- });
31
- });
32
- } else {
33
- subscribeOn('stories', message => {
34
- if (message.type == 'get') emitStoriesMessage({
35
- type: 'set',
36
- payload: {
37
- stories,
38
- oldTests: storiesWithOldTests
39
- }
40
- });
41
- if (message.type == 'update') storiesListener(new Map(message.payload));
42
- });
43
- const stories = deserializeRawStories(await loadStoriesFromBrowser());
44
- const storiesWithOldTests = [];
45
- Object.values(stories).forEach(story => {
46
- var _parameters;
47
- if ((_parameters = story.parameters) !== null && _parameters !== void 0 && (_parameters = _parameters.creevey) !== null && _parameters !== void 0 && _parameters.tests) {
48
- var _parameters2;
49
- (_parameters2 = story.parameters) === null || _parameters2 === void 0 || (_parameters2 = _parameters2.creevey) === null || _parameters2 === void 0 || delete _parameters2.tests;
50
- storiesWithOldTests.push(`${story.kind}/${story.name}`);
51
- }
52
- });
53
- return stories;
54
- }
55
- };
56
- loadStories.providerName = 'browser';
@@ -1,53 +0,0 @@
1
- import chokidar from 'chokidar';
2
- import { loadStories as browserProvider } from './browser';
3
- import { logger } from '../../logger';
4
- import parse from '../../testsFiles/parser';
5
- import { readDirRecursive } from '../../../server/utils';
6
- import { combineParameters } from '../../../shared';
7
- export const loadStories = async (_config, _options, storiesListener) => {
8
- let creeveyParamsByStoryId = {};
9
- const mergeParamsFromTestsToStory = (story, creeveyParams) => {
10
- if (story.parameters) {
11
- story.parameters.creevey = combineParameters(story.parameters.creevey || {}, creeveyParams);
12
- }
13
- };
14
- const stories = await browserProvider(_config, {}, updatedStoriesByFiles => {
15
- Array.from(updatedStoriesByFiles.entries()).forEach(([, storiesArray]) => {
16
- storiesArray.forEach(story => {
17
- const creeveyParams = creeveyParamsByStoryId[story.id];
18
- if (creeveyParams) {
19
- mergeParamsFromTestsToStory(story, creeveyParams);
20
- }
21
- });
22
- });
23
- storiesListener(updatedStoriesByFiles);
24
- });
25
-
26
- // TODO fix test files hot reloading
27
- creeveyParamsByStoryId = await parseParams(_config /*, (data) => console.log(data) */);
28
- Object.entries(stories).forEach(([storyId, story]) => {
29
- mergeParamsFromTestsToStory(story, creeveyParamsByStoryId[storyId]);
30
- });
31
- return stories;
32
- };
33
- async function parseParams(config, listener) {
34
- if (!config.testsDir) {
35
- return Promise.resolve({});
36
- }
37
- const testFiles = readDirRecursive(config.testsDir).filter(file => {
38
- var _config$testsRegex;
39
- return (_config$testsRegex = config.testsRegex) === null || _config$testsRegex === void 0 ? void 0 : _config$testsRegex.test(file);
40
- });
41
- await (await import('../../testsFiles/register')).default(config);
42
- if (listener) {
43
- chokidar.watch(testFiles).on('change', filePath => {
44
- logger.debug(`changed: ${filePath}`);
45
-
46
- // doesn't work, always returns {} due modules caching
47
- // see https://github.com/nodejs/modules/issues/307
48
- void parse(testFiles).then(data => listener(data));
49
- });
50
- }
51
- return parse(testFiles);
52
- }
53
- loadStories.providerName = 'hybrid';
@@ -1,160 +0,0 @@
1
- import path from 'path';
2
- import https from 'https';
3
- import { exec } from 'shelljs';
4
- import { stringify } from 'qs';
5
- import { set } from 'lodash';
6
- import { v4 } from 'uuid';
7
- import { isDefined } from '../types';
8
- const konturGitHost = 'git.skbkontur.ru';
9
- const trackId = 232; // front_infra
10
- const origin = 'http://localhost/';
11
- const category = 'tests_run';
12
- const action = 'done';
13
- function buildPathname(label, info) {
14
- return `/track-event?${stringify({
15
- id: trackId,
16
- c: category,
17
- a: action,
18
- l: label,
19
- cv: typeof info == 'string' ? info : JSON.stringify(info),
20
- ts: new Date().toISOString(),
21
- url: origin
22
- })}`;
23
- }
24
- function sanitizeGridUrl(gridUrl) {
25
- const url = new URL(gridUrl);
26
- url.username = url.username ? '********' : '';
27
- url.password = url.password ? '********' : '';
28
- return url.toString();
29
- }
30
- function tryGetRepoUrl() {
31
- try {
32
- const gitRemoteOutput = exec('git remote -v', {
33
- silent: true
34
- });
35
- const [, repoUrl] = gitRemoteOutput.stdout.match(/origin\s+(.*)\s+\(fetch\)/) ?? [];
36
- return [repoUrl, null];
37
- } catch (error) {
38
- return [undefined, error];
39
- }
40
- }
41
- function tryGetStorybookVersion() {
42
- try {
43
- const storybookPackageOutput = exec(`node -e "console.log(JSON.stringify(require('storybook/package.json')))"`, {
44
- silent: true
45
- });
46
- const storybookPackage = JSON.parse(storybookPackageOutput);
47
- return [storybookPackage.version, null];
48
- } catch (error) {
49
- return [undefined, error];
50
- }
51
- }
52
- function tryGetCreeveyVersion() {
53
- try {
54
- // eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-missing-require
55
- const creeveyPackage = require('creevey/package.json');
56
- return [creeveyPackage.version, null];
57
- } catch (error) {
58
- return [undefined, error];
59
- }
60
- }
61
- function sendRequest(options) {
62
- return new Promise((resolve, reject) => {
63
- const req = https.request(options, res => {
64
- if (res.statusCode) {
65
- if (res.statusCode >= 200 && res.statusCode < 300) {
66
- resolve();
67
- } else if (res.statusCode >= 300 && res.statusCode < 400) {
68
- reject(new Error(`Redirection error: ${res.statusCode}`));
69
- } else if (res.statusCode >= 400 && res.statusCode < 500) {
70
- reject(new Error(`Client error: ${res.statusCode}`));
71
- } else if (res.statusCode >= 500 && res.statusCode < 600) {
72
- reject(new Error(`Server error: ${res.statusCode}`));
73
- } else {
74
- reject(new Error(`Unexpected status code: ${res.statusCode}`));
75
- }
76
- } else {
77
- reject(new Error('No status code received'));
78
- }
79
- });
80
- req.on('error', reject);
81
- req.end();
82
- });
83
- }
84
- export async function sendScreenshotsCount(config, options, status) {
85
- var _config$storiesProvid;
86
- const [repoUrl] = tryGetRepoUrl();
87
- const isKonturRepo = repoUrl === null || repoUrl === void 0 ? void 0 : repoUrl.includes(konturGitHost);
88
- if (!isKonturRepo || config.disableTelemetry) return;
89
- const uuid = v4();
90
- const [creeveyVersion, creeveyVersionError] = tryGetCreeveyVersion();
91
- const [storybookVersion, storybookVersionError] = tryGetStorybookVersion();
92
- const gridUrl = config.gridUrl ? sanitizeGridUrl(config.gridUrl) : undefined;
93
- const configMeta = {
94
- runId: uuid,
95
- repoUrl: repoUrl ?? 'unknown',
96
- creeveyVersion: creeveyVersion ?? 'unknown',
97
- storybookVersion: storybookVersion ?? 'unknown',
98
- options: options._,
99
- gridUrl,
100
- screenDir: config.screenDir ? path.relative(process.cwd(), config.screenDir) : undefined,
101
- useDocker: config.useDocker,
102
- dockerImage: config.dockerImage,
103
- maxRetries: config.maxRetries,
104
- diffOptions: config.diffOptions,
105
- storiesProvider: ((_config$storiesProvid = config.storiesProvider) === null || _config$storiesProvid === void 0 ? void 0 : _config$storiesProvid.providerName) ?? 'unknown',
106
- errors: [creeveyVersionError, storybookVersionError].some(Boolean) ? [creeveyVersionError ? `Error while getting creevey version: ${creeveyVersionError.message}` : undefined, storybookVersionError ? `Error while getting storybook version: ${storybookVersionError.message}` : undefined].filter(Boolean) : undefined
107
- };
108
- const browsersMeta = {
109
- runId: uuid,
110
- browsers: Object.fromEntries(Object.entries(config.browsers ?? {}).map(([name, browser]) => [name, typeof browser === 'object' ? {
111
- name: browser.name,
112
- gridUrl: browser.gridUrl ? sanitizeGridUrl(browser.gridUrl) : undefined,
113
- browserName: browser.browserName,
114
- browserVersion: browser.browserVersion,
115
- platformName: browser.platformName,
116
- viewport: browser.viewport,
117
- limit: browser.limit,
118
- dockerImage: browser.dockerImage,
119
- 'se:teamname': browser['se:teamname']
120
- } : browser]))
121
- };
122
- const tests = {};
123
- Object.values((status === null || status === void 0 ? void 0 : status.tests) ?? {}).filter(isDefined).forEach(test => {
124
- set(tests, [...test.storyPath, test.testName, test.browser].filter(isDefined), test.id);
125
- });
126
- const testsMeta = {
127
- runId: uuid,
128
- tests
129
- };
130
- const fullPathname = buildPathname('tests', testsMeta);
131
- // NOTE: Keep request path shorter than 32k symbols
132
- const chunksCount = Math.ceil(fullPathname.length / 32_000);
133
- let chunks = [];
134
- if (chunksCount > 1) {
135
- const testsString = JSON.stringify(tests);
136
- const chunkSize = Math.ceil(testsString.length / chunksCount);
137
- chunks = Array.from({
138
- length: chunksCount
139
- }).map((_, chunkIndex) => testsString.slice(chunkIndex * chunkSize, (chunkIndex + 1) * chunkSize)).map((testsPart, seq) => buildPathname('tests', {
140
- runId: uuid,
141
- tests: testsPart,
142
- seq
143
- }));
144
- } else {
145
- chunks = [fullPathname];
146
- }
147
- await Promise.all([sendRequest({
148
- host: 'metrika.kontur.ru',
149
- path: buildPathname('config', configMeta),
150
- protocol: 'https:'
151
- }), sendRequest({
152
- host: 'metrika.kontur.ru',
153
- path: buildPathname('browsers', browsersMeta),
154
- protocol: 'https:'
155
- }), ...chunks.map(chunk => sendRequest({
156
- host: 'metrika.kontur.ru',
157
- path: chunk,
158
- protocol: 'https:'
159
- }))]);
160
- }
@@ -1,44 +0,0 @@
1
- import { toId, storyNameFromExport } from '@storybook/csf';
2
- export default async function parse(files) {
3
- result = {};
4
- await Promise.all(files.map(async file => import(file)));
5
- return result;
6
- }
7
- let result = {};
8
- let kindTitle = '';
9
- let storyTitle = '';
10
- let storyParams = null;
11
- const setStoryParameters = params => {
12
- storyParams = params;
13
- };
14
- const getStoryId = (kindTitle, storyTitle) => {
15
- return toId(kindTitle, storyNameFromExport(storyTitle));
16
- };
17
- export const kind = (title, kindFn) => {
18
- kindTitle = title;
19
- kindFn();
20
- kindTitle = '';
21
- };
22
- export const story = (title, storyFn) => {
23
- var _result$storyId;
24
- storyTitle = title;
25
- storyParams = null;
26
- storyFn({
27
- setStoryParameters
28
- });
29
- const storyId = getStoryId(kindTitle, storyTitle);
30
- result[storyId] = Object.assign({}, storyParams, {
31
- tests: (_result$storyId = result[storyId]) === null || _result$storyId === void 0 ? void 0 : _result$storyId.tests
32
- });
33
- storyTitle = '';
34
- storyParams = null;
35
- };
36
- export const test = (title, testFn) => {
37
- const storyId = getStoryId(kindTitle, storyTitle);
38
- if (!result[storyId]) {
39
- result[storyId] = {};
40
- }
41
- result[storyId].tests = Object.assign({}, result[storyId].tests, {
42
- [title]: testFn
43
- });
44
- };
@@ -1,34 +0,0 @@
1
- import { addHook } from 'pirates';
2
- import { getTsconfig } from 'get-tsconfig';
3
- export default async function register(config) {
4
- addHook(() => '', {
5
- exts: ['.jpg', '.jpeg', '.png', '.gif', '.eot', '.otf', '.svg', '.ttf', '.woff', '.woff2', '.css', '.less', '.scss', '.styl'],
6
- ignoreNodeModules: false
7
- });
8
- const {
9
- path: tsConfigPath
10
- } = getTsconfig(config.tsConfig) || {};
11
-
12
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
13
- (await import('@babel/register')).default(config.babelOptions({
14
- babelrc: false,
15
- rootMode: 'upward-optional',
16
- ignore: [/node_modules/],
17
- extensions: ['.js', '.jsx', '.ts', '.tsx'],
18
- parserOpts: {
19
- sourceType: 'module',
20
- plugins: ['jsx', 'typescript']
21
- },
22
- presets: ['@babel/preset-typescript', ['@babel/preset-env', {
23
- targets: {
24
- node: '10'
25
- },
26
- modules: 'commonjs'
27
- }]],
28
- plugins: [['@babel/plugin-transform-runtime'], ...(tsConfigPath ? [['babel-plugin-tsconfig-paths', {
29
- tsconfig: tsConfigPath
30
- }]] : [])]
31
- }));
32
-
33
- // (await import('ts-node')).register({ project: tsConfigPath, transpileOnly: true });
34
- }
@@ -1,53 +0,0 @@
1
- import path from 'path';
2
- import fs, { mkdirSync } from 'fs';
3
- import micromatch from 'micromatch';
4
- import { isDefined } from '../types';
5
- function tryToLoadTestsData(filename) {
6
- try {
7
- // eslint-disable-next-line @typescript-eslint/no-var-requires
8
- return require(filename);
9
- } catch (_) {
10
- /* noop */
11
- }
12
- }
13
- const actualRegex = /^(.*)-actual-(\d+)\.png$/i;
14
- function approve(dirents, srcPath, dstPath, testPaths, isMatch) {
15
- dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(path.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => Number(retry) > (images.get(imageName) ?? -1) ? images.set(imageName, Number(retry)) : images, new Map()).forEach((retry, imageName) => {
16
- mkdirSync(dstPath, {
17
- recursive: true
18
- });
19
- fs.copyFileSync(path.join(srcPath, `${imageName}-actual-${retry}.png`), path.join(dstPath, `${imageName}.png`));
20
- });
21
- }
22
- function traverse(srcPath, dstPath, testPaths, isMatch) {
23
- const dirents = fs.readdirSync(srcPath, {
24
- withFileTypes: true
25
- });
26
- approve(dirents, srcPath, dstPath, testPaths, isMatch);
27
- dirents.filter(dirent => dirent.isDirectory()).map(dirent => [dirent.name, testPaths === null || testPaths === void 0 ? void 0 : testPaths.map(([token, ...restPath]) => token == dirent.name ? restPath : null).filter(isDefined)]).filter(([, paths]) => !paths || paths.length > 0).forEach(([dirname, paths]) => traverse(path.join(srcPath, dirname), path.join(dstPath, dirname), paths, isMatch));
28
- }
29
- export default function update(config, grepPattern) {
30
- const {
31
- reportDir,
32
- screenDir
33
- } = config;
34
- const isMatch = grepPattern ? micromatch.matcher(grepPattern, {
35
- contains: true
36
- }) : () => true;
37
- const testsMeta = tryToLoadTestsData(`${reportDir}/tests.json`);
38
- const testsReport = tryToLoadTestsData(`${reportDir}/data`);
39
- let testPaths = null;
40
- if (testsMeta && testsReport) {
41
- testPaths = Object.values(testsMeta).filter(isDefined).filter(({
42
- id
43
- }) => {
44
- var _testsReport$id;
45
- return ((_testsReport$id = testsReport[id]) === null || _testsReport$id === void 0 ? void 0 : _testsReport$id.status) == 'failed';
46
- }).map(({
47
- storyPath,
48
- testName,
49
- browser
50
- }) => [...storyPath, ...(testName ? [testName] : []), browser]);
51
- }
52
- traverse(reportDir, screenDir, testPaths, value => isMatch(path.relative(reportDir, value)));
53
- }