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,644 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.closeBrowser = closeBrowser;
7
- exports.getBrowser = getBrowser;
8
- exports.loadStoriesFromBrowser = loadStoriesFromBrowser;
9
- exports.switchStory = switchStory;
10
- exports.takeScreenshot = takeScreenshot;
11
- exports.updateStorybookGlobals = updateStorybookGlobals;
12
- var _coreEvents = require("@storybook/core-events");
13
- var _chalk = _interopRequireDefault(require("chalk"));
14
- var _http = _interopRequireDefault(require("http"));
15
- var _https = _interopRequireDefault(require("https"));
16
- var _loglevel = require("loglevel");
17
- var _loglevelPluginPrefix = _interopRequireDefault(require("loglevel-plugin-prefix"));
18
- var _os = require("os");
19
- var _pngjs = require("pngjs");
20
- var _seleniumWebdriver = require("selenium-webdriver");
21
- var _capabilities = require("selenium-webdriver/lib/capabilities");
22
- var _types = require("../../types");
23
- var _logger = require("../logger");
24
- var _messages = require("../messages");
25
- var _utils = require("../utils");
26
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
27
- // import { Options as IeOptions } from 'selenium-webdriver/ie';
28
- // import { Options as EdgeOptions } from 'selenium-webdriver/edge';
29
- // import { Options as ChromeOptions } from 'selenium-webdriver/chrome';
30
- // import { Options as SafariOptions } from 'selenium-webdriver/safari';
31
- // import { Options as FirefoxOptions } from 'selenium-webdriver/firefox';
32
-
33
- // type UnPromise<P> = P extends Promise<infer T> ? T : never;
34
-
35
- const storybookRootID = 'storybook-root';
36
- const DOCKER_INTERNAL = 'host.docker.internal';
37
- let browserLogger = _logger.logger;
38
- let browserName = '';
39
- let browser = null;
40
- // let context: UnPromise<ReturnType<typeof BrowsingContext>> | null = null;
41
- let creeveyServerHost = null;
42
- function getSessionData(grid, sessionId = '') {
43
- const gridUrl = new URL(grid);
44
- gridUrl.pathname = `/host/${sessionId}`;
45
- return new Promise((resolve, reject) => (gridUrl.protocol == 'https:' ? _https.default : _http.default).get(gridUrl.toString(), res => {
46
- if (res.statusCode !== 200) {
47
- return reject(new Error(`Couldn't get session data for ${sessionId}. Status code: ${res.statusCode ?? 'Unknown'}`));
48
- }
49
- let data = '';
50
- res.setEncoding('utf8');
51
- res.on('data', chunk => data += chunk);
52
- res.on('end', () => {
53
- try {
54
- resolve(JSON.parse(data));
55
- } catch (error) {
56
- reject(new Error(`Couldn't get session data for ${sessionId}. ${error instanceof Error ? error.stack ?? error.message : error}`));
57
- }
58
- });
59
- }));
60
- }
61
- function getAddresses() {
62
- // TODO Check if docker is used
63
- return [DOCKER_INTERNAL].concat(...Object.values((0, _os.networkInterfaces)()).filter(_types.isDefined).map(network => network.filter(info => info.family == 'IPv4').map(info => info.address)));
64
- }
65
- async function resolveStorybookUrl(storybookUrl, checkUrl) {
66
- browserLogger.debug('Resolving storybook url');
67
- const addresses = getAddresses();
68
- for (const ip of addresses) {
69
- const resolvedUrl = storybookUrl.replace(_utils.LOCALHOST_REGEXP, ip);
70
- browserLogger.debug(`Checking storybook availability on ${_chalk.default.magenta(resolvedUrl)}`);
71
- if (await checkUrl(resolvedUrl)) {
72
- browserLogger.debug(`Resolved storybook url ${_chalk.default.magenta(resolvedUrl)}`);
73
- return resolvedUrl;
74
- }
75
- }
76
- const error = new Error('Please specify `storybookUrl` with IP address that accessible from remote browser');
77
- error.name = 'ResolveUrlError';
78
- throw error;
79
- }
80
- async function openUrlAndWaitForPageSource(browser, url, predicate) {
81
- let source = '';
82
- await browser.get(url);
83
- do {
84
- try {
85
- source = await browser.getPageSource();
86
- } catch (_) {
87
- // NOTE: Firefox can raise exception "curContainer.frame.document.documentElement is null"
88
- }
89
- } while (predicate(source));
90
- return source;
91
- }
92
- function getUrlChecker(browser) {
93
- return async url => {
94
- try {
95
- // NOTE: Before trying a new url, reset the current one
96
- browserLogger.debug(`Opening ${_chalk.default.magenta('about:blank')} page`);
97
- await openUrlAndWaitForPageSource(browser, 'about:blank', source => !source.includes('<body></body>'));
98
- browserLogger.debug(`Opening ${_chalk.default.magenta(url)} and checking the page source`);
99
- const source = await openUrlAndWaitForPageSource(browser, url,
100
- // NOTE: IE11 can return only `head` without body
101
- source => source.length == 0 || !/<body([^>]*>).+<\/body>/s.test(source));
102
- // NOTE: This is the most optimal way to check if we in storybook or not
103
- // We don't use any page load strategies except `NONE`
104
- // because other add significant delay and some of them don't work in earlier chrome versions
105
- // Browsers always load page successful even it's failed
106
- // So we just check `root` element
107
- browserLogger.debug(`Checking ${_chalk.default.cyan(`#${storybookRootID}`)} existence on ${_chalk.default.magenta(url)}`);
108
- return source.includes(`id="${storybookRootID}"`);
109
- } catch (error) {
110
- return false;
111
- }
112
- };
113
- }
114
- async function waitForStorybook(browser) {
115
- browserLogger.debug('Waiting for `setStories` event to make sure that storybook is initiated');
116
- let wait = true;
117
- let isTimeout = false;
118
- const initiateTimeout = setTimeout(() => {
119
- wait = false;
120
- isTimeout = true;
121
- }, 60000);
122
- while (wait !== false) {
123
- try {
124
- wait = await browser.executeScript(function (SET_GLOBALS) {
125
- if (typeof window.__STORYBOOK_ADDONS_CHANNEL__ == 'undefined') return true;
126
- if (window.__STORYBOOK_ADDONS_CHANNEL__.last(SET_GLOBALS) == undefined) return true;
127
- return false;
128
- }, _coreEvents.SET_GLOBALS);
129
- } catch (e) {
130
- browserLogger.debug('An error has been caught during the script: ', e);
131
- }
132
- if (!wait) clearTimeout(initiateTimeout);
133
- }
134
- if (isTimeout) throw new Error('Failed to wait `setStories` event');
135
- }
136
- async function resetMousePosition(browser) {
137
- var _await$browser$getCap, _await$browser$getCap2;
138
- browserLogger.debug('Resetting mouse position to the top-left corner');
139
- const browserName = (await browser.getCapabilities()).getBrowserName();
140
- const [browserVersion] = ((_await$browser$getCap = (await browser.getCapabilities()).getBrowserVersion()) === null || _await$browser$getCap === void 0 ? void 0 : _await$browser$getCap.split('.')) ?? ((_await$browser$getCap2 = (await browser.getCapabilities()).get('version')) === null || _await$browser$getCap2 === void 0 ? void 0 : _await$browser$getCap2.split('.')) ?? [];
141
-
142
- // NOTE Reset mouse position to support keweb selenium grid browser versions
143
- if (browserName == 'chrome' && browserVersion == '70') {
144
- const {
145
- top,
146
- left,
147
- width,
148
- height
149
- } = await browser.executeScript(function () {
150
- const bodyRect = document.body.getBoundingClientRect();
151
- return {
152
- top: bodyRect.top,
153
- left: bodyRect.left,
154
- width: bodyRect.width,
155
- height: bodyRect.height
156
- };
157
- });
158
- // NOTE Bridge mode doesn't support `Origin.VIEWPORT`, move mouse relative
159
- await browser.actions({
160
- bridge: true
161
- }).move({
162
- origin: browser.findElement(_seleniumWebdriver.By.css('body')),
163
- x: Math.ceil(-1 * width / 2) - left,
164
- y: Math.ceil(-1 * height / 2) - top
165
- }).perform();
166
- } else if (browserName == 'firefox' && browserVersion == '61') {
167
- // NOTE Firefox for some reason moving by 0 x 0 move cursor in bottom left corner :sad:
168
- await browser.actions().move({
169
- origin: _seleniumWebdriver.Origin.VIEWPORT,
170
- x: 0,
171
- y: 1
172
- }).perform();
173
- } else {
174
- // NOTE IE don't emit move events until force window focus or connect by RDP on virtual machine
175
- await browser.actions().move({
176
- origin: _seleniumWebdriver.Origin.VIEWPORT,
177
- x: 0,
178
- y: 0
179
- }).perform();
180
- }
181
- }
182
- async function resizeViewport(browser, viewport) {
183
- const windowRect = await browser.manage().window().getRect();
184
- const {
185
- innerWidth,
186
- innerHeight
187
- } = await browser.executeScript(function () {
188
- return {
189
- innerWidth: window.innerWidth,
190
- innerHeight: window.innerHeight
191
- };
192
- });
193
- browserLogger.debug(`Resizing viewport from ${innerWidth}x${innerHeight} to ${viewport.width}x${viewport.height}`);
194
- const dWidth = windowRect.width - innerWidth;
195
- const dHeight = windowRect.height - innerHeight;
196
- await browser.manage().window().setRect({
197
- width: viewport.width + dWidth,
198
- height: viewport.height + dHeight
199
- });
200
- }
201
- const getScrollBarWidth = (() => {
202
- let scrollBarWidth = null;
203
- return async browser => {
204
- if (scrollBarWidth != null) return Promise.resolve(scrollBarWidth);
205
- scrollBarWidth = await browser.executeScript(function () {
206
- // eslint-disable-next-line no-var
207
- var div = document.createElement('div');
208
- div.innerHTML = 'a'; // NOTE: In IE clientWidth is 0 if this div is empty.
209
- div.style.overflowY = 'scroll';
210
- document.body.appendChild(div);
211
- // eslint-disable-next-line no-var
212
- var widthDiff = div.offsetWidth - div.clientWidth;
213
- document.body.removeChild(div);
214
- return widthDiff;
215
- });
216
- return scrollBarWidth;
217
- };
218
- })();
219
-
220
- // NOTE Firefox and Safari take viewport screenshot without scrollbars
221
- async function hasScrollBar(browser) {
222
- var _await$browser$getCap3;
223
- const browserName = (await browser.getCapabilities()).getBrowserName();
224
- const [browserVersion] = ((_await$browser$getCap3 = (await browser.getCapabilities()).getBrowserVersion()) === null || _await$browser$getCap3 === void 0 ? void 0 : _await$browser$getCap3.split('.')) ?? [];
225
- return browserName != 'Safari' &&
226
- // NOTE This need to work with keweb selenium grid
227
- !(browserName == 'firefox' && browserVersion == '61');
228
- }
229
- async function takeCompositeScreenshot(browser, windowRect, elementRect) {
230
- const screens = [];
231
- const isScreenshotWithoutScrollBar = !(await hasScrollBar(browser));
232
- const scrollBarWidth = await getScrollBarWidth(browser);
233
- // NOTE Sometimes viewport has been scrolled somewhere
234
- const normalizedElementRect = {
235
- left: elementRect.left - windowRect.left,
236
- right: elementRect.left + elementRect.width - windowRect.left,
237
- top: elementRect.top - windowRect.top,
238
- bottom: elementRect.top + elementRect.height - windowRect.top
239
- };
240
- const isFitHorizontally = windowRect.width >= elementRect.width + normalizedElementRect.left;
241
- const isFitVertically = windowRect.height >= elementRect.height + normalizedElementRect.top;
242
- const viewportWidth = windowRect.width - (isFitVertically ? 0 : scrollBarWidth);
243
- const viewportHeight = windowRect.height - (isFitHorizontally ? 0 : scrollBarWidth);
244
- const cols = Math.ceil(elementRect.width / viewportWidth);
245
- const rows = Math.ceil(elementRect.height / viewportHeight);
246
- const xOffset = Math.round(isFitHorizontally ? normalizedElementRect.left : Math.max(0, cols * viewportWidth - elementRect.width));
247
- const yOffset = Math.round(isFitVertically ? normalizedElementRect.top : Math.max(0, rows * viewportHeight - elementRect.height));
248
- for (let row = 0; row < rows; row += 1) {
249
- for (let col = 0; col < cols; col += 1) {
250
- const dx = Math.min(viewportWidth * col + normalizedElementRect.left, Math.max(0, normalizedElementRect.right - viewportWidth));
251
- const dy = Math.min(viewportHeight * row + normalizedElementRect.top, Math.max(0, normalizedElementRect.bottom - viewportHeight));
252
- await browser.executeScript(function (x, y) {
253
- window.scrollTo(x, y);
254
- }, dx, dy);
255
- screens.push(await browser.takeScreenshot());
256
- }
257
- }
258
- const images = screens.map(s => Buffer.from(s, 'base64')).map(b => _pngjs.PNG.sync.read(b));
259
- const compositeImage = new _pngjs.PNG({
260
- width: Math.round(elementRect.width),
261
- height: Math.round(elementRect.height)
262
- });
263
- for (let y = 0; y < compositeImage.height; y += 1) {
264
- for (let x = 0; x < compositeImage.width; x += 1) {
265
- const col = Math.floor(x / viewportWidth);
266
- const row = Math.floor(y / viewportHeight);
267
- const isLastCol = cols - col == 1;
268
- const isLastRow = rows - row == 1;
269
- const scrollOffset = isFitVertically || isScreenshotWithoutScrollBar ? 0 : scrollBarWidth;
270
- const i = (y * compositeImage.width + x) * 4;
271
- const j =
272
- // NOTE compositeImage(x, y) => image(x, y)
273
- (y % viewportHeight * (viewportWidth + scrollOffset) + x % viewportWidth) * 4 + (
274
- // NOTE Offset for last row/col image
275
- isLastRow ? yOffset * (viewportWidth + scrollOffset) * 4 : 0) + (isLastCol ? xOffset * 4 : 0);
276
- const image = images[row * cols + col];
277
- compositeImage.data[i + 0] = image.data[j + 0];
278
- compositeImage.data[i + 1] = image.data[j + 1];
279
- compositeImage.data[i + 2] = image.data[j + 2];
280
- compositeImage.data[i + 3] = image.data[j + 3];
281
- }
282
- }
283
- return _pngjs.PNG.sync.write(compositeImage).toString('base64');
284
- }
285
- async function takeScreenshot(browser, captureElement, ignoreElements) {
286
- let screenshot;
287
- const ignoreStyles = await insertIgnoreStyles(browser, ignoreElements);
288
- try {
289
- if (!captureElement) {
290
- if (browserLogger.getLevel() <= _loglevel.levels.DEBUG) {
291
- const {
292
- innerWidth,
293
- innerHeight
294
- } = await browser.executeScript(function () {
295
- return {
296
- innerWidth: window.innerWidth,
297
- innerHeight: window.innerHeight
298
- };
299
- });
300
- browserLogger.debug(`Viewport size is: ${innerWidth}x${innerHeight}`);
301
- }
302
- browserLogger.debug('Capturing viewport screenshot');
303
- screenshot = await browser.takeScreenshot();
304
- browserLogger.debug('Viewport screenshot is captured');
305
- } else {
306
- browserLogger.debug(`Checking is element ${_chalk.default.cyan(captureElement)} fit into viewport`);
307
- const rects = await browser.executeScript(function (selector) {
308
- window.scrollTo(0, 0); // TODO Maybe we should remove same code from `resetMousePosition`
309
- // eslint-disable-next-line no-var
310
- var element = document.querySelector(selector);
311
- if (!element) return;
312
-
313
- // eslint-disable-next-line no-var
314
- var elementRect = element.getBoundingClientRect();
315
- return {
316
- elementRect: {
317
- top: elementRect.top,
318
- left: elementRect.left,
319
- width: elementRect.width,
320
- height: elementRect.height
321
- },
322
- windowRect: {
323
- top: Math.round(window.scrollY || window.pageYOffset),
324
- left: Math.round(window.scrollX || window.pageXOffset),
325
- width: window.innerWidth,
326
- height: window.innerHeight
327
- }
328
- };
329
- }, captureElement);
330
- const {
331
- elementRect,
332
- windowRect
333
- } = rects ?? {};
334
- if (!elementRect || !windowRect) throw new Error(`Couldn't find element with selector: '${captureElement}'`);
335
- const isFitIntoViewport = elementRect.width + elementRect.left <= windowRect.width && elementRect.height + elementRect.top <= windowRect.height;
336
- if (isFitIntoViewport) browserLogger.debug(`Capturing ${_chalk.default.cyan(captureElement)}`);else browserLogger.debug(`Capturing composite screenshot image of ${_chalk.default.cyan(captureElement)}`);
337
-
338
- // const element = await browser.findElement(By.css(captureElement));
339
- // screenshot = isFitIntoViewport
340
- // ? context
341
- // ? await context.captureElementScreenshot(await element.getId())
342
- // : await browser.findElement(By.css(captureElement)).takeScreenshot()
343
- // : // TODO pointer-events: none, need to research
344
- // await takeCompositeScreenshot(browser, windowRect, elementRect);
345
- screenshot = isFitIntoViewport ? await browser.findElement(_seleniumWebdriver.By.css(captureElement)).takeScreenshot() :
346
- // TODO pointer-events: none, need to research
347
- await takeCompositeScreenshot(browser, windowRect, elementRect);
348
- browserLogger.debug(`${_chalk.default.cyan(captureElement)} is captured`);
349
- }
350
- } finally {
351
- await removeIgnoreStyles(browser, ignoreStyles);
352
- }
353
- return screenshot;
354
- }
355
- async function selectStory(browser, {
356
- id,
357
- kind,
358
- name
359
- }, waitForReady = false) {
360
- browserLogger.debug(`Triggering 'SetCurrentStory' event with storyId ${_chalk.default.magenta(id)}`);
361
- const result = await browser.executeAsyncScript(function (id, kind, name, shouldWaitForReady, callback) {
362
- if (typeof window.__CREEVEY_SELECT_STORY__ == 'undefined') {
363
- return callback(["Creevey can't switch story. This may happened if forget to add `creevey` addon to your storybook config, or storybook not loaded in browser due syntax error."]);
364
- }
365
- void window.__CREEVEY_SELECT_STORY__(id, kind, name, shouldWaitForReady, callback);
366
- }, id, kind, name, waitForReady);
367
- const [errorMessage, isCaptureCalled = false] = result ?? [];
368
- if (errorMessage) throw new Error(errorMessage);
369
- return isCaptureCalled;
370
- }
371
- async function updateStorybookGlobals(browser, globals) {
372
- browserLogger.debug('Applying storybook globals');
373
- await browser.executeScript(function (globals) {
374
- window.__CREEVEY_UPDATE_GLOBALS__(globals);
375
- }, globals);
376
- }
377
- function appendIframePath(url) {
378
- return `${url.replace(/\/$/, '')}/iframe.html`;
379
- }
380
- async function openStorybookPage(browser, storybookUrl, resolver) {
381
- if (!_utils.LOCALHOST_REGEXP.test(storybookUrl)) {
382
- return browser === null || browser === void 0 ? void 0 : browser.get(appendIframePath(storybookUrl));
383
- }
384
- try {
385
- if (resolver) {
386
- browserLogger.debug('Resolving storybook url with custom resolver');
387
- const resolvedUrl = await resolver();
388
- browserLogger.debug(`Resolver storybook url ${resolvedUrl}`);
389
- return browser.get(appendIframePath(resolvedUrl));
390
- }
391
- // NOTE: getUrlChecker already calls `browser.get` so we don't need another one
392
- return void (await resolveStorybookUrl(appendIframePath(storybookUrl), getUrlChecker(browser)));
393
- } catch (error) {
394
- browserLogger.error('Failed to resolve storybook URL', error instanceof Error ? error.message : '');
395
- throw error;
396
- }
397
- }
398
- async function resolveCreeveyHost(browser, port) {
399
- if (creeveyServerHost != null) return creeveyServerHost;
400
- const addresses = getAddresses();
401
- creeveyServerHost = await browser.executeAsyncScript(function (hosts, port, callback) {
402
- void Promise.all(hosts.map(function (host) {
403
- return Promise.race([
404
- // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
405
- fetch('http://' + host + ':' + port + '/ping').then(function (response) {
406
- return response.text();
407
- }), new Promise((_resolve, reject) => {
408
- setTimeout(reject, 5000);
409
- })]).then(function (pong) {
410
- return pong == 'pong' ? host : null;
411
- }).catch(function () {
412
- return null;
413
- });
414
- })).then(function (hosts) {
415
- callback(hosts.find(function (host) {
416
- return host != null;
417
- }));
418
- });
419
- }, addresses, port);
420
- if (creeveyServerHost == null) throw new Error("Can't reach creevey server from a browser");
421
- return creeveyServerHost;
422
- }
423
- async function loadStoriesFromBrowser() {
424
- if (!browser) throw new Error("Can't get stories from browser if webdriver isn't connected");
425
- const stories = await browser.executeAsyncScript(function (callback) {
426
- void window.__CREEVEY_GET_STORIES__().then(callback);
427
- });
428
- if (!stories) throw new Error("Can't get stories, it seems creevey or storybook API isn't available");
429
- return stories;
430
- }
431
- async function getBrowser(config, options) {
432
- if (browser) return browser;
433
- browserName = options.browser;
434
- const browserConfig = config.browsers[browserName];
435
- const {
436
- gridUrl = config.gridUrl,
437
- storybookUrl: address = config.storybookUrl,
438
- limit,
439
- viewport,
440
- _storybookGlobals,
441
- ...userCapabilities
442
- } = browserConfig;
443
- void limit;
444
- const realAddress = address;
445
-
446
- // TODO Define some capabilities explicitly and define typings
447
- const capabilities = new _seleniumWebdriver.Capabilities({
448
- ...userCapabilities,
449
- pageLoadStrategy: _capabilities.PageLoadStrategy.EAGER
450
- });
451
- (0, _messages.subscribeOn)('shutdown', () => {
452
- var _browser;
453
- (_browser = browser) === null || _browser === void 0 || _browser.quit().finally(() =>
454
- // eslint-disable-next-line no-process-exit
455
- process.exit());
456
- browser = null;
457
- });
458
- try {
459
- var _await$browser$getSes;
460
- const url = new URL(gridUrl);
461
- url.username = url.username ? '********' : '';
462
- url.password = url.password ? '********' : '';
463
- browserLogger.debug(`(${browserName}) Connecting to Selenium ${_chalk.default.magenta(url.toString())}`);
464
- const prefs = new _seleniumWebdriver.logging.Preferences();
465
- if (options.trace) {
466
- for (const type of Object.values(_seleniumWebdriver.logging.Type)) {
467
- prefs.setLevel(type, _seleniumWebdriver.logging.Level.ALL);
468
- }
469
- }
470
-
471
- // const ie = new IeOptions();
472
- // const edge = new EdgeOptions();
473
- // const chrome = new ChromeOptions();
474
- // const safari = new SafariOptions();
475
- // const firefox = new FirefoxOptions();
476
- // edge.enableBidi();
477
- // chrome.enableBidi();
478
- // firefox.enableBidi();
479
-
480
- browser = await new _seleniumWebdriver.Builder()
481
- // .setIeOptions(ie)
482
- // .setEdgeOptions(edge)
483
- // .setChromeOptions(chrome)
484
- // .setSafariOptions(safari)
485
- // .setFirefoxOptions(firefox)
486
- .usingServer(gridUrl).withCapabilities(capabilities).setLoggingPrefs(prefs) // NOTE: Should go last
487
- .build();
488
-
489
- // const id = await browser.getWindowHandle();
490
- // context = await BrowsingContext(browser, { browsingContextId: id });
491
-
492
- const sessionId = (_await$browser$getSes = await browser.getSession()) === null || _await$browser$getSes === void 0 ? void 0 : _await$browser$getSes.getId();
493
- let browserHost = '';
494
- try {
495
- const {
496
- Name
497
- } = await getSessionData(gridUrl, sessionId);
498
- if (typeof Name == 'string') browserHost = Name;
499
- } catch (_) {
500
- /* noop */
501
- }
502
- browserLogger.debug(`(${browserName}) Connected successful with ${[_chalk.default.green(browserHost), _chalk.default.magenta(sessionId)].filter(Boolean).join(':')}`);
503
- browserLogger = (0, _loglevel.getLogger)(sessionId);
504
- _loglevelPluginPrefix.default.apply(browserLogger, {
505
- format(level) {
506
- const levelColor = _logger.colors[level.toUpperCase()];
507
- return `[${browserName}:${_chalk.default.gray(sessionId)}] ${levelColor(level)} =>`;
508
- }
509
- });
510
- await (0, _utils.runSequence)([() => {
511
- var _browser2;
512
- return (_browser2 = browser) === null || _browser2 === void 0 ? void 0 : _browser2.manage().setTimeouts({
513
- pageLoad: 10000,
514
- script: 60000
515
- });
516
- }, () => viewport && browser && resizeViewport(browser, viewport), () => browser && openStorybookPage(browser, realAddress, config.resolveStorybookUrl), () => browser && waitForStorybook(browser)], () => !_utils.isShuttingDown.current);
517
- } catch (originalError) {
518
- var _browser4;
519
- if (_utils.isShuttingDown.current) {
520
- var _browser3;
521
- (_browser3 = browser) === null || _browser3 === void 0 || _browser3.quit().catch(_types.noop);
522
- browser = null;
523
- return null;
524
- }
525
- if (originalError instanceof Error && originalError.name == 'ResolveUrlError') throw originalError;
526
- const error = new Error(`Can't load storybook root page by URL ${(await ((_browser4 = browser) === null || _browser4 === void 0 ? void 0 : _browser4.getCurrentUrl())) ?? realAddress}`);
527
- if (originalError instanceof Error) error.stack = originalError.stack;
528
- throw error;
529
- }
530
- if (_storybookGlobals) {
531
- await updateStorybookGlobals(browser, _storybookGlobals);
532
- }
533
- const creeveyHost = await resolveCreeveyHost(browser, options.port);
534
- await browser.executeScript(function (workerId, creeveyHost, creeveyPort) {
535
- window.__CREEVEY_WORKER_ID__ = workerId;
536
- window.__CREEVEY_SERVER_HOST__ = creeveyHost;
537
- window.__CREEVEY_SERVER_PORT__ = creeveyPort;
538
- }, process.pid, creeveyHost, options.port);
539
- return browser;
540
- }
541
- async function updateStoryArgs(browser, story, updatedArgs) {
542
- await browser.executeAsyncScript(function (storyId, updatedArgs, UPDATE_STORY_ARGS, STORY_RENDERED, callback) {
543
- window.__STORYBOOK_ADDONS_CHANNEL__.once(STORY_RENDERED, callback);
544
- window.__STORYBOOK_ADDONS_CHANNEL__.emit(UPDATE_STORY_ARGS, {
545
- storyId,
546
- updatedArgs
547
- });
548
- }, story.id, updatedArgs, _coreEvents.UPDATE_STORY_ARGS, _coreEvents.STORY_RENDERED);
549
- }
550
- async function closeBrowser() {
551
- if (!browser) return;
552
- try {
553
- await browser.quit();
554
- } finally {
555
- browser = null;
556
- }
557
- }
558
- async function switchStory() {
559
- var _this$currentTest;
560
- let testOrSuite = this.currentTest;
561
- if (!testOrSuite) throw new Error("Can't switch story, because test context doesn't have 'currentTest' field");
562
- this.testScope.length = 0;
563
- this.screenshots.length = 0;
564
- this.testScope.push(this.browserName);
565
- while ((_testOrSuite = testOrSuite) !== null && _testOrSuite !== void 0 && _testOrSuite.title) {
566
- var _testOrSuite;
567
- this.testScope.push(testOrSuite.title);
568
- testOrSuite = testOrSuite.parent;
569
- }
570
- const story = (_this$currentTest = this.currentTest) === null || _this$currentTest === void 0 || (_this$currentTest = _this$currentTest.ctx) === null || _this$currentTest === void 0 ? void 0 : _this$currentTest.story;
571
- if (!story) throw new Error(`Current test '${this.testScope.join('/')}' context doesn't have 'story' field`);
572
- const {
573
- id,
574
- kind,
575
- name,
576
- parameters
577
- } = story;
578
- const {
579
- captureElement = `#${storybookRootID}`,
580
- waitForReady,
581
- ignoreElements
582
- } = parameters.creevey ?? {};
583
- browserLogger.debug(`Switching to story ${_chalk.default.cyan(kind)}/${_chalk.default.cyan(name)} by id ${_chalk.default.magenta(id)}`);
584
- if (captureElement) Object.defineProperty(this, 'captureElement', {
585
- enumerable: true,
586
- configurable: true,
587
- get: () => this.browser.findElement(_seleniumWebdriver.By.css(captureElement))
588
- });else Reflect.deleteProperty(this, 'captureElement');
589
- this.takeScreenshot = () => takeScreenshot(this.browser, captureElement, ignoreElements);
590
- this.updateStoryArgs = updatedArgs => updateStoryArgs(this.browser, story, updatedArgs);
591
- this.testScope.reverse();
592
- let storyPlayResolver;
593
- let waitForComplete = new Promise(resolve => storyPlayResolver = resolve);
594
- const unsubscribe = (0, _messages.subscribeOn)('stories', message => {
595
- if (message.type != 'capture') return;
596
- const {
597
- payload = {},
598
- payload: {
599
- imageName
600
- } = {}
601
- } = message;
602
- void takeScreenshot(this.browser, payload.captureElement ?? captureElement, payload.ignoreElements ?? ignoreElements).then(screenshot => {
603
- this.screenshots.push({
604
- imageName,
605
- screenshot
606
- });
607
- void this.browser.executeAsyncScript(function (callback) {
608
- window.__CREEVEY_HAS_PLAY_COMPLETED_YET__(callback);
609
- }).then(isCompleted => storyPlayResolver(isCompleted));
610
- (0, _messages.emitStoriesMessage)({
611
- type: 'capture'
612
- });
613
- });
614
- });
615
- await resetMousePosition(this.browser);
616
- const isCaptureCalled = await selectStory(this.browser, {
617
- id,
618
- kind,
619
- name
620
- }, waitForReady);
621
- if (isCaptureCalled) {
622
- while (!(await waitForComplete)) {
623
- waitForComplete = new Promise(resolve => storyPlayResolver = resolve);
624
- }
625
- }
626
- unsubscribe();
627
- browserLogger.debug(`Story ${_chalk.default.magenta(id)} ready for capturing`);
628
- }
629
- async function insertIgnoreStyles(browser, ignoreElements) {
630
- const ignoreSelectors = Array.prototype.concat(ignoreElements).filter(Boolean);
631
- if (!ignoreSelectors.length) return null;
632
- browserLogger.debug('Hiding ignored elements before capturing');
633
- return await browser.executeScript(function (ignoreSelectors) {
634
- return window.__CREEVEY_INSERT_IGNORE_STYLES__(ignoreSelectors);
635
- }, ignoreSelectors);
636
- }
637
- async function removeIgnoreStyles(browser, ignoreStyles) {
638
- if (ignoreStyles) {
639
- browserLogger.debug('Revert hiding ignored elements');
640
- await browser.executeScript(function (ignoreStyles) {
641
- window.__CREEVEY_REMOVE_IGNORE_STYLES__(ignoreStyles);
642
- }, ignoreStyles);
643
- }
644
- }
@@ -1,27 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- var _browser = require("./browser");
7
- Object.keys(_browser).forEach(function (key) {
8
- if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _browser[key]) return;
10
- Object.defineProperty(exports, key, {
11
- enumerable: true,
12
- get: function () {
13
- return _browser[key];
14
- }
15
- });
16
- });
17
- var _selenoid = require("./selenoid");
18
- Object.keys(_selenoid).forEach(function (key) {
19
- if (key === "default" || key === "__esModule") return;
20
- if (key in exports && exports[key] === _selenoid[key]) return;
21
- Object.defineProperty(exports, key, {
22
- enumerable: true,
23
- get: function () {
24
- return _selenoid[key];
25
- }
26
- });
27
- });