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,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
- }