creevey 0.9.0-non-webpack.2.fix-capture-element → 0.9.0

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