creevey 0.10.0-beta.8 → 0.10.0-rc.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 (350) hide show
  1. package/AUTHORS +2 -0
  2. package/CHANGELOG.md +281 -0
  3. package/README.md +19 -41
  4. package/dist/client/addon/components/Addon.js +18 -8
  5. package/dist/client/addon/components/Addon.js.map +1 -1
  6. package/dist/client/addon/components/Panel.js +4 -4
  7. package/dist/client/addon/components/Panel.js.map +1 -1
  8. package/dist/client/addon/components/TestSelect.js +2 -2
  9. package/dist/client/addon/components/TestSelect.js.map +1 -1
  10. package/dist/client/addon/components/Tools.js +19 -9
  11. package/dist/client/addon/components/Tools.js.map +1 -1
  12. package/dist/client/addon/controller.d.ts +1 -1
  13. package/dist/client/addon/controller.js +3 -3
  14. package/dist/client/addon/controller.js.map +1 -1
  15. package/dist/client/addon/decorator.d.ts +1 -1
  16. package/dist/client/addon/makeDecorator.d.ts +9 -0
  17. package/dist/client/addon/makeDecorator.js +48 -0
  18. package/dist/client/addon/makeDecorator.js.map +1 -0
  19. package/dist/client/addon/manager.js +38 -39
  20. package/dist/client/addon/manager.js.map +1 -1
  21. package/dist/client/addon/preset.d.ts +0 -1
  22. package/dist/client/addon/preset.js +3 -2
  23. package/dist/client/addon/preset.js.map +1 -1
  24. package/dist/client/addon/preview.d.ts +1 -1
  25. package/dist/client/addon/withCreevey.d.ts +5 -3
  26. package/dist/client/addon/withCreevey.js +14 -21
  27. package/dist/client/addon/withCreevey.js.map +1 -1
  28. package/dist/client/shared/components/ImagesView/BlendView.d.ts +2 -2
  29. package/dist/client/shared/components/ImagesView/BlendView.js +18 -8
  30. package/dist/client/shared/components/ImagesView/BlendView.js.map +1 -1
  31. package/dist/client/shared/components/ImagesView/ImagesView.js +1 -1
  32. package/dist/client/shared/components/ImagesView/ImagesView.js.map +1 -1
  33. package/dist/client/shared/components/ImagesView/SideBySideView.d.ts +2 -2
  34. package/dist/client/shared/components/ImagesView/SideBySideView.js +19 -9
  35. package/dist/client/shared/components/ImagesView/SideBySideView.js.map +1 -1
  36. package/dist/client/shared/components/ImagesView/SlideView.d.ts +2 -2
  37. package/dist/client/shared/components/ImagesView/SlideView.js +19 -9
  38. package/dist/client/shared/components/ImagesView/SlideView.js.map +1 -1
  39. package/dist/client/shared/components/ImagesView/SwapView.d.ts +2 -2
  40. package/dist/client/shared/components/ImagesView/SwapView.js +31 -9
  41. package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
  42. package/dist/client/shared/components/ImagesView/common.d.ts +1 -1
  43. package/dist/client/shared/components/PageFooter/PageFooter.js +1 -1
  44. package/dist/client/shared/components/PageFooter/PageFooter.js.map +1 -1
  45. package/dist/client/shared/components/PageFooter/Paging.js +1 -1
  46. package/dist/client/shared/components/PageFooter/Paging.js.map +1 -1
  47. package/dist/client/shared/components/PageHeader/ImagePreview.d.ts +2 -2
  48. package/dist/client/shared/components/PageHeader/ImagePreview.js +2 -1
  49. package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
  50. package/dist/client/shared/components/PageHeader/PageHeader.js +34 -13
  51. package/dist/client/shared/components/PageHeader/PageHeader.js.map +1 -1
  52. package/dist/client/shared/components/ResultsPage.d.ts +2 -2
  53. package/dist/client/shared/components/ResultsPage.js +45 -15
  54. package/dist/client/shared/components/ResultsPage.js.map +1 -1
  55. package/dist/client/shared/creeveyClientApi.js +18 -1
  56. package/dist/client/shared/creeveyClientApi.js.map +1 -1
  57. package/dist/client/shared/helpers.d.ts +1 -3
  58. package/dist/client/shared/helpers.js +4 -19
  59. package/dist/client/shared/helpers.js.map +1 -1
  60. package/dist/client/web/CreeveyApp.d.ts +1 -0
  61. package/dist/client/web/CreeveyApp.js +44 -15
  62. package/dist/client/web/CreeveyApp.js.map +1 -1
  63. package/dist/client/web/CreeveyContext.d.ts +6 -0
  64. package/dist/client/web/CreeveyContext.js +21 -7
  65. package/dist/client/web/CreeveyContext.js.map +1 -1
  66. package/dist/client/web/CreeveyLoader.d.ts +1 -1
  67. package/dist/client/web/CreeveyLoader.js +3 -3
  68. package/dist/client/web/CreeveyLoader.js.map +1 -1
  69. package/dist/client/web/CreeveyView/SideBar/Checkbox.d.ts +4 -4
  70. package/dist/client/web/CreeveyView/SideBar/Checkbox.js +36 -6
  71. package/dist/client/web/CreeveyView/SideBar/Checkbox.js.map +1 -1
  72. package/dist/client/web/CreeveyView/SideBar/Search.js +20 -10
  73. package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
  74. package/dist/client/web/CreeveyView/SideBar/SideBar.js +26 -12
  75. package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
  76. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +67 -13
  77. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
  78. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js +32 -12
  79. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js.map +1 -1
  80. package/dist/client/web/CreeveyView/SideBar/SuiteLink.d.ts +6 -6
  81. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +20 -13
  82. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
  83. package/dist/client/web/CreeveyView/SideBar/TestLink.js +20 -13
  84. package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
  85. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +2 -2
  86. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js +2 -2
  87. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js.map +1 -1
  88. package/dist/client/web/CreeveyView/SideBar/TestsStatus.d.ts +2 -2
  89. package/dist/client/web/CreeveyView/SideBar/TestsStatus.js +3 -2
  90. package/dist/client/web/CreeveyView/SideBar/TestsStatus.js.map +1 -1
  91. package/dist/client/web/CreeveyView/SideBar/Toggle.js +1 -1
  92. package/dist/client/web/CreeveyView/SideBar/Toggle.js.map +1 -1
  93. package/dist/client/web/KeyboardEventsContext.d.ts +1 -8
  94. package/dist/client/web/KeyboardEventsContext.js +79 -64
  95. package/dist/client/web/KeyboardEventsContext.js.map +1 -1
  96. package/dist/client/web/assets/index-CtSq3IhG.js +518 -0
  97. package/dist/client/web/index.html +1 -1
  98. package/dist/client/web/index.js +26 -11
  99. package/dist/client/web/index.js.map +1 -1
  100. package/dist/client/web/themes.d.ts +2 -0
  101. package/dist/client/web/themes.js +22 -0
  102. package/dist/client/web/themes.js.map +1 -0
  103. package/dist/creevey.d.ts +1 -1
  104. package/dist/creevey.js +122 -41
  105. package/dist/creevey.js.map +1 -1
  106. package/dist/index.d.ts +1 -0
  107. package/dist/playwright/generator.d.ts +25 -0
  108. package/dist/playwright/generator.js +243 -0
  109. package/dist/playwright/generator.js.map +1 -0
  110. package/dist/playwright/helpers.d.ts +2 -0
  111. package/dist/playwright/helpers.js +29 -0
  112. package/dist/playwright/helpers.js.map +1 -0
  113. package/dist/playwright/reporter.d.ts +83 -0
  114. package/dist/playwright/reporter.js +334 -0
  115. package/dist/playwright/reporter.js.map +1 -0
  116. package/dist/playwright/setup.d.ts +3 -0
  117. package/dist/playwright/setup.js +72 -0
  118. package/dist/playwright/setup.js.map +1 -0
  119. package/dist/playwright.d.ts +1 -0
  120. package/dist/playwright.js +3 -1
  121. package/dist/playwright.js.map +1 -1
  122. package/dist/server/compare.d.ts +18 -0
  123. package/dist/server/compare.js +182 -0
  124. package/dist/server/compare.js.map +1 -0
  125. package/dist/server/config.d.ts +3 -3
  126. package/dist/server/config.js +75 -8
  127. package/dist/server/config.js.map +1 -1
  128. package/dist/server/connection.d.ts +3 -0
  129. package/dist/server/connection.js +28 -0
  130. package/dist/server/connection.js.map +1 -0
  131. package/dist/server/docker.d.ts +1 -1
  132. package/dist/server/docker.js +54 -32
  133. package/dist/server/docker.js.map +1 -1
  134. package/dist/server/index.d.ts +2 -2
  135. package/dist/server/index.js +165 -64
  136. package/dist/server/index.js.map +1 -1
  137. package/dist/server/master/api.d.ts +11 -6
  138. package/dist/server/master/api.js +88 -25
  139. package/dist/server/master/api.js.map +1 -1
  140. package/dist/server/master/handlers/capture-handler.d.ts +5 -0
  141. package/dist/server/master/handlers/capture-handler.js +25 -0
  142. package/dist/server/master/handlers/capture-handler.js.map +1 -0
  143. package/dist/server/master/handlers/index.d.ts +4 -0
  144. package/dist/server/master/handlers/index.js +21 -0
  145. package/dist/server/master/handlers/index.js.map +1 -0
  146. package/dist/server/master/handlers/ping-handler.d.ts +2 -0
  147. package/dist/server/master/handlers/ping-handler.js +8 -0
  148. package/dist/server/master/handlers/ping-handler.js.map +1 -0
  149. package/dist/server/master/handlers/static-handler.d.ts +1 -0
  150. package/dist/server/master/handlers/static-handler.js +20 -0
  151. package/dist/server/master/handlers/static-handler.js.map +1 -0
  152. package/dist/server/master/handlers/stories-handler.d.ts +4 -0
  153. package/dist/server/master/handlers/stories-handler.js +24 -0
  154. package/dist/server/master/handlers/stories-handler.js.map +1 -0
  155. package/dist/server/master/master.js +7 -24
  156. package/dist/server/master/master.js.map +1 -1
  157. package/dist/server/master/pool.d.ts +1 -0
  158. package/dist/server/master/pool.js +5 -3
  159. package/dist/server/master/pool.js.map +1 -1
  160. package/dist/server/master/queue.d.ts +1 -1
  161. package/dist/server/master/queue.js +14 -6
  162. package/dist/server/master/queue.js.map +1 -1
  163. package/dist/server/master/runner.d.ts +6 -6
  164. package/dist/server/master/runner.js +98 -130
  165. package/dist/server/master/runner.js.map +1 -1
  166. package/dist/server/master/server.d.ts +1 -1
  167. package/dist/server/master/server.js +193 -88
  168. package/dist/server/master/server.js.map +1 -1
  169. package/dist/server/master/start.d.ts +1 -2
  170. package/dist/server/master/start.js +13 -29
  171. package/dist/server/master/start.js.map +1 -1
  172. package/dist/server/master/testsManager.d.ts +81 -0
  173. package/dist/server/master/testsManager.js +282 -0
  174. package/dist/server/master/testsManager.js.map +1 -0
  175. package/dist/server/playwright/docker-file.d.ts +1 -1
  176. package/dist/server/playwright/docker-file.js +17 -8
  177. package/dist/server/playwright/docker-file.js.map +1 -1
  178. package/dist/server/playwright/docker.d.ts +2 -1
  179. package/dist/server/playwright/docker.js +10 -2
  180. package/dist/server/playwright/docker.js.map +1 -1
  181. package/dist/server/playwright/index-source.mjs +16 -0
  182. package/dist/server/playwright/internal.d.ts +7 -7
  183. package/dist/server/playwright/internal.js +144 -84
  184. package/dist/server/playwright/internal.js.map +1 -1
  185. package/dist/server/playwright/webdriver.d.ts +3 -3
  186. package/dist/server/playwright/webdriver.js +0 -6
  187. package/dist/server/playwright/webdriver.js.map +1 -1
  188. package/dist/server/providers/browser.js +4 -3
  189. package/dist/server/providers/browser.js.map +1 -1
  190. package/dist/server/providers/hybrid.js +2 -2
  191. package/dist/server/providers/hybrid.js.map +1 -1
  192. package/dist/server/report.d.ts +10 -0
  193. package/dist/server/report.js +45 -0
  194. package/dist/server/report.js.map +1 -0
  195. package/dist/server/reporters/creevey.d.ts +7 -0
  196. package/dist/server/reporters/creevey.js +63 -0
  197. package/dist/server/reporters/creevey.js.map +1 -0
  198. package/dist/server/reporters/index.d.ts +2 -0
  199. package/dist/server/reporters/index.js +16 -0
  200. package/dist/server/reporters/index.js.map +1 -0
  201. package/dist/server/reporters/junit.d.ts +16 -0
  202. package/dist/server/reporters/junit.js +167 -0
  203. package/dist/server/reporters/junit.js.map +1 -0
  204. package/dist/server/reporters/teamcity.d.ts +7 -0
  205. package/dist/server/reporters/teamcity.js +60 -0
  206. package/dist/server/reporters/teamcity.js.map +1 -0
  207. package/dist/server/selenium/internal.d.ts +4 -4
  208. package/dist/server/selenium/internal.js +56 -40
  209. package/dist/server/selenium/internal.js.map +1 -1
  210. package/dist/server/selenium/selenoid.js +12 -6
  211. package/dist/server/selenium/selenoid.js.map +1 -1
  212. package/dist/server/selenium/webdriver.d.ts +3 -3
  213. package/dist/server/selenium/webdriver.js +4 -8
  214. package/dist/server/selenium/webdriver.js.map +1 -1
  215. package/dist/server/shutdown.d.ts +1 -0
  216. package/dist/server/shutdown.js +23 -0
  217. package/dist/server/shutdown.js.map +1 -0
  218. package/dist/server/stories.d.ts +0 -1
  219. package/dist/server/stories.js +0 -12
  220. package/dist/server/stories.js.map +1 -1
  221. package/dist/server/telemetry.js +3 -3
  222. package/dist/server/telemetry.js.map +1 -1
  223. package/dist/server/testsFiles/parser.js +45 -5
  224. package/dist/server/testsFiles/parser.js.map +1 -1
  225. package/dist/server/utils.d.ts +23 -0
  226. package/dist/server/utils.js +114 -15
  227. package/dist/server/utils.js.map +1 -1
  228. package/dist/server/webdriver.d.ts +1 -1
  229. package/dist/server/worker/context.d.ts +3 -0
  230. package/dist/server/worker/context.js +15 -0
  231. package/dist/server/worker/context.js.map +1 -0
  232. package/dist/server/worker/match-image.d.ts +8 -12
  233. package/dist/server/worker/match-image.js +11 -178
  234. package/dist/server/worker/match-image.js.map +1 -1
  235. package/dist/server/worker/start.d.ts +2 -2
  236. package/dist/server/worker/start.js +41 -64
  237. package/dist/server/worker/start.js.map +1 -1
  238. package/dist/shared/index.d.ts +1 -1
  239. package/dist/shared/index.js +9 -7
  240. package/dist/shared/index.js.map +1 -1
  241. package/dist/types.d.ts +84 -43
  242. package/dist/types.js +65 -1
  243. package/dist/types.js.map +1 -1
  244. package/docs/cli.md +80 -0
  245. package/docs/config.md +179 -165
  246. package/docs/examples/playwright-reporer/playwright.config.ts +37 -0
  247. package/docs/migration-0.9-to-0.10.md +144 -0
  248. package/docs/playwright-reporter.md +357 -0
  249. package/docs/storybook.md +60 -0
  250. package/docs/tests.md +50 -45
  251. package/package.json +78 -83
  252. package/playwright.config.mts +46 -0
  253. package/src/client/addon/components/Addon.tsx +1 -1
  254. package/src/client/addon/components/Panel.tsx +4 -4
  255. package/src/client/addon/components/TestSelect.tsx +2 -2
  256. package/src/client/addon/components/Tools.tsx +2 -2
  257. package/src/client/addon/controller.ts +4 -4
  258. package/src/client/addon/makeDecorator.ts +69 -0
  259. package/src/client/addon/manager.ts +38 -37
  260. package/src/client/addon/preset.ts +2 -1
  261. package/src/client/addon/withCreevey.ts +16 -19
  262. package/src/client/shared/components/ImagesView/BlendView.tsx +1 -1
  263. package/src/client/shared/components/ImagesView/ImagesView.tsx +1 -1
  264. package/src/client/shared/components/ImagesView/SideBySideView.tsx +2 -2
  265. package/src/client/shared/components/ImagesView/SlideView.tsx +2 -2
  266. package/src/client/shared/components/ImagesView/SwapView.tsx +20 -2
  267. package/src/client/shared/components/ImagesView/common.ts +1 -1
  268. package/src/client/shared/components/PageFooter/PageFooter.tsx +1 -1
  269. package/src/client/shared/components/PageFooter/Paging.tsx +1 -1
  270. package/src/client/shared/components/PageHeader/ImagePreview.tsx +2 -1
  271. package/src/client/shared/components/PageHeader/PageHeader.tsx +23 -7
  272. package/src/client/shared/components/ResultsPage.tsx +33 -10
  273. package/src/client/shared/creeveyClientApi.ts +19 -1
  274. package/src/client/shared/helpers.ts +4 -24
  275. package/src/client/web/CreeveyApp.tsx +30 -9
  276. package/src/client/web/CreeveyContext.tsx +11 -0
  277. package/src/client/web/CreeveyLoader.tsx +2 -2
  278. package/src/client/web/CreeveyView/SideBar/Checkbox.tsx +3 -3
  279. package/src/client/web/CreeveyView/SideBar/Search.tsx +4 -4
  280. package/src/client/web/CreeveyView/SideBar/SideBar.tsx +11 -6
  281. package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +48 -15
  282. package/src/client/web/CreeveyView/SideBar/SideBarHeader.tsx +20 -5
  283. package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +12 -12
  284. package/src/client/web/CreeveyView/SideBar/TestLink.tsx +10 -10
  285. package/src/client/web/CreeveyView/SideBar/TestStatusIcon.tsx +2 -2
  286. package/src/client/web/CreeveyView/SideBar/TestsStatus.tsx +3 -2
  287. package/src/client/web/CreeveyView/SideBar/Toggle.tsx +1 -1
  288. package/src/client/web/KeyboardEventsContext.tsx +61 -73
  289. package/src/client/web/index.tsx +10 -5
  290. package/src/client/web/themes.ts +24 -0
  291. package/src/creevey.ts +92 -38
  292. package/src/playwright/generator.ts +322 -0
  293. package/src/playwright/helpers.ts +31 -0
  294. package/src/playwright/reporter.ts +381 -0
  295. package/src/playwright/setup.ts +84 -0
  296. package/src/playwright.ts +1 -0
  297. package/src/server/compare.ts +260 -0
  298. package/src/server/config.ts +52 -9
  299. package/src/server/connection.ts +26 -0
  300. package/src/server/docker.ts +62 -34
  301. package/src/server/index.ts +166 -79
  302. package/src/server/master/api.ts +94 -28
  303. package/src/server/master/handlers/capture-handler.ts +20 -0
  304. package/src/server/master/handlers/index.ts +4 -0
  305. package/src/server/master/handlers/ping-handler.ts +6 -0
  306. package/src/server/master/handlers/static-handler.ts +16 -0
  307. package/src/server/master/handlers/stories-handler.ts +20 -0
  308. package/src/server/master/master.ts +10 -27
  309. package/src/server/master/pool.ts +7 -3
  310. package/src/server/master/queue.ts +21 -7
  311. package/src/server/master/runner.ts +123 -134
  312. package/src/server/master/server.ts +214 -101
  313. package/src/server/master/start.ts +19 -41
  314. package/src/server/master/testsManager.ts +316 -0
  315. package/src/server/playwright/docker-file.ts +20 -8
  316. package/src/server/playwright/docker.ts +16 -3
  317. package/src/server/playwright/index-source.mjs +16 -0
  318. package/src/server/playwright/internal.ts +176 -103
  319. package/src/server/playwright/webdriver.ts +4 -10
  320. package/src/server/providers/browser.ts +4 -3
  321. package/src/server/providers/hybrid.ts +2 -3
  322. package/src/server/report.ts +51 -0
  323. package/src/server/reporters/creevey.ts +71 -0
  324. package/src/server/reporters/index.ts +11 -0
  325. package/src/server/reporters/junit.ts +207 -0
  326. package/src/server/reporters/teamcity.ts +74 -0
  327. package/src/server/selenium/internal.ts +70 -53
  328. package/src/server/selenium/selenoid.ts +13 -6
  329. package/src/server/selenium/webdriver.ts +8 -12
  330. package/src/server/shutdown.ts +19 -0
  331. package/src/server/stories.ts +1 -12
  332. package/src/server/telemetry.ts +3 -3
  333. package/src/server/testsFiles/parser.ts +52 -4
  334. package/src/server/utils.ts +124 -16
  335. package/src/server/webdriver.ts +1 -1
  336. package/src/server/worker/context.ts +14 -0
  337. package/src/server/worker/match-image.ts +16 -248
  338. package/src/server/worker/start.ts +49 -79
  339. package/src/shared/index.ts +10 -8
  340. package/src/types.ts +91 -58
  341. package/types/global.d.ts +1 -0
  342. package/dist/client/web/assets/index-DB8lHlJw.js +0 -591
  343. package/dist/server/reporter.d.ts +0 -26
  344. package/dist/server/reporter.js +0 -108
  345. package/dist/server/reporter.js.map +0 -1
  346. package/dist/server/update.d.ts +0 -2
  347. package/dist/server/update.js +0 -53
  348. package/dist/server/update.js.map +0 -1
  349. package/src/server/reporter.ts +0 -139
  350. package/src/server/update.ts +0 -74
@@ -0,0 +1,2 @@
1
+ import { Page } from '@playwright/test';
2
+ export declare function waitForStorybookReady(page: Page, timeout?: number): Promise<void>;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.waitForStorybookReady = waitForStorybookReady;
4
+ const types_1 = require("../types");
5
+ async function waitForStorybookReady(page, timeout = 60000) {
6
+ const isStorybookInitialized = await page.evaluate(({ timeout, event }) => {
7
+ return new Promise((resolve, reject) => {
8
+ let attempts = 0;
9
+ const maxAttempts = timeout / 100;
10
+ function check() {
11
+ if (typeof window.__STORYBOOK_ADDONS_CHANNEL__ !== 'undefined' &&
12
+ window.__STORYBOOK_ADDONS_CHANNEL__.last(event) !== undefined) {
13
+ resolve(true);
14
+ }
15
+ else if (attempts++ < maxAttempts) {
16
+ setTimeout(check, 100);
17
+ }
18
+ else {
19
+ reject(new Error('Storybook initialization timed out. Required Storybook functions not found on window.'));
20
+ }
21
+ }
22
+ check();
23
+ });
24
+ }, { timeout, event: types_1.StorybookEvents.SET_GLOBALS });
25
+ if (!isStorybookInitialized) {
26
+ throw new Error('Failed to confirm Storybook API is ready after extended wait.');
27
+ }
28
+ }
29
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/playwright/helpers.ts"],"names":[],"mappings":";;AAGA,sDA2BC;AA9BD,oCAA2C;AAGpC,KAAK,UAAU,qBAAqB,CAAC,IAAU,EAAE,OAAO,GAAG,KAAK;IACrE,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAChD,CAAC,EAAE,OAAO,EAAE,KAAK,EAAsC,EAAE,EAAE;QACzD,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,MAAM,WAAW,GAAG,OAAO,GAAG,GAAG,CAAC;YAClC,SAAS,KAAK;gBACZ,IACE,OAAO,MAAM,CAAC,4BAA4B,KAAK,WAAW;oBAC1D,MAAM,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,EAC7D,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;qBAAM,IAAI,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;oBACpC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC,CAAC;gBAC7G,CAAC;YACH,CAAC;YACD,KAAK,EAAE,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAe,CAAC,WAAW,EAAE,CAChD,CAAC;IAEF,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
@@ -0,0 +1,83 @@
1
+ import type { Reporter, FullConfig, Suite, TestCase, TestResult, TestStep } from '@playwright/test/reporter';
2
+ /**
3
+ * CreeveyPlaywrightReporter is a Playwright reporter that integrates with Creevey
4
+ * to provide visual testing capabilities and use Creevey's UI for reviewing and approving screenshots.
5
+ */
6
+ declare class CreeveyPlaywrightReporter implements Reporter {
7
+ private testsManager;
8
+ private api;
9
+ private port;
10
+ private debug;
11
+ private testIdMap;
12
+ private asyncQueue;
13
+ /**
14
+ * Creates a new instance of the CreeveyPlaywrightReporter
15
+ * @param options Configuration options for the reporter
16
+ */
17
+ constructor(options?: {
18
+ port?: number;
19
+ debug?: boolean;
20
+ });
21
+ /**
22
+ * Called when the test run starts
23
+ * @param config Playwright configuration
24
+ * @param suite Test suite information
25
+ */
26
+ onBegin(config: FullConfig, suite: Suite): void;
27
+ /**
28
+ * Called when a test begins
29
+ * @param test Test case information
30
+ * @param result Test result (initially empty)
31
+ */
32
+ onTestBegin(test: TestCase, _result: TestResult): void;
33
+ /**
34
+ * Called when a test step begins
35
+ * @param test Test case information
36
+ * @param result Test result
37
+ * @param step Test step information
38
+ */
39
+ onStepBegin(test: TestCase, _result: TestResult, step: TestStep): void;
40
+ /**
41
+ * Called when a test step ends
42
+ * @param test Test case information
43
+ * @param result Test result
44
+ * @param step Test step information
45
+ */
46
+ onStepEnd(_test: TestCase, _result: TestResult, step: TestStep): void;
47
+ /**
48
+ * Called when a test ends
49
+ * @param test Test case information
50
+ * @param result Test result
51
+ */
52
+ onTestEnd(test: TestCase, result: TestResult): void;
53
+ /**
54
+ * Called when the test run ends
55
+ * @param result The overall test run result
56
+ */
57
+ onEnd(result: {
58
+ status: 'passed' | 'failed' | 'timedout' | 'interrupted';
59
+ }): Promise<void>;
60
+ /**
61
+ * Maps a Playwright test to a Creevey test format
62
+ * @param test Playwright test case
63
+ * @returns Creevey test object or null if mapping fails
64
+ */
65
+ private mapToCreeveyTest;
66
+ /**
67
+ * Process a test result and any attachments
68
+ * @param test Playwright test case
69
+ * @param result Playwright test result
70
+ */
71
+ private processTestResult;
72
+ /**
73
+ * Logs a debug message if debug mode is enabled
74
+ * @param message Message to log
75
+ */
76
+ private logDebug;
77
+ /**
78
+ * Logs an error message
79
+ * @param message Error message to log
80
+ */
81
+ private logError;
82
+ }
83
+ export default CreeveyPlaywrightReporter;
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const promises_1 = __importDefault(require("fs/promises"));
7
+ const crypto_1 = require("crypto");
8
+ const types_js_1 = require("../types.js");
9
+ const testsManager_js_1 = require("../server/master/testsManager.js");
10
+ const api_js_1 = require("../server/master/api.js");
11
+ const utils_js_1 = require("../server/utils.js");
12
+ const server_js_1 = require("../server/master/server.js");
13
+ const assert_1 = __importDefault(require("assert"));
14
+ /**
15
+ * Simple async queue to handle operations in sequence without returning promises
16
+ * from reporter methods that should be synchronous
17
+ */
18
+ class AsyncQueue {
19
+ queue;
20
+ constructor() {
21
+ this.queue = Promise.resolve();
22
+ }
23
+ /**
24
+ * Add an async operation to the queue
25
+ * @param operation Async operation to execute
26
+ */
27
+ enqueue(operation) {
28
+ this.queue = this.queue.then(operation).catch((error) => {
29
+ console.error(`Error in async queue: ${error instanceof Error ? error.message : String(error)}`);
30
+ });
31
+ }
32
+ /**
33
+ * Wait for all operations in the queue to complete
34
+ */
35
+ async waitForCompletion() {
36
+ await this.queue;
37
+ }
38
+ }
39
+ /**
40
+ * CreeveyPlaywrightReporter is a Playwright reporter that integrates with Creevey
41
+ * to provide visual testing capabilities and use Creevey's UI for reviewing and approving screenshots.
42
+ */
43
+ class CreeveyPlaywrightReporter {
44
+ testsManager = null;
45
+ api = null;
46
+ port;
47
+ debug;
48
+ testIdMap = new Map(); // Maps Playwright test IDs to Creevey test IDs
49
+ asyncQueue = new AsyncQueue();
50
+ /**
51
+ * Creates a new instance of the CreeveyPlaywrightReporter
52
+ * @param options Configuration options for the reporter
53
+ */
54
+ constructor(options) {
55
+ this.port = options?.port ?? 3000;
56
+ this.debug = options?.debug ?? false;
57
+ }
58
+ /**
59
+ * Called when the test run starts
60
+ * @param config Playwright configuration
61
+ * @param suite Test suite information
62
+ */
63
+ onBegin(config, suite) {
64
+ this.logDebug('CreeveyPlaywrightReporter started');
65
+ const [snapshotDir, ...restSnapshotDirs] = [...new Set(config.projects.map((project) => project.snapshotDir))];
66
+ const [outputDir, ...restOutputDirs] = [...new Set(config.projects.map((project) => project.outputDir))];
67
+ (0, assert_1.default)(restSnapshotDirs.length === 0, 'Currently multiple snapshot directories are not supported');
68
+ (0, assert_1.default)(restOutputDirs.length === 0, 'Currently multiple output directories are not supported');
69
+ // Initialize TestsManager
70
+ this.testsManager = new testsManager_js_1.TestsManager(snapshotDir, outputDir);
71
+ // Use the async queue to handle initialization without returning a promise
72
+ this.asyncQueue.enqueue(async () => {
73
+ (0, assert_1.default)(this.testsManager, 'TestsManager is not initialized');
74
+ try {
75
+ await promises_1.default.mkdir(outputDir, { recursive: true });
76
+ await (0, utils_js_1.copyStatics)(outputDir);
77
+ }
78
+ catch (error) {
79
+ this.logError(`Failed to initialize report directory: ${error instanceof Error ? error.message : String(error)}`);
80
+ }
81
+ // Start server API
82
+ try {
83
+ const resolveApi = (0, server_js_1.start)(outputDir, this.port, true);
84
+ // Create and connect the API
85
+ this.api = new api_js_1.CreeveyApi(this.testsManager);
86
+ resolveApi(this.api);
87
+ const testsList = suite
88
+ .allTests()
89
+ .map((test) => {
90
+ const creeveyTest = this.mapToCreeveyTest(test);
91
+ if (!creeveyTest)
92
+ return;
93
+ this.testIdMap.set(test.id, creeveyTest.id);
94
+ return creeveyTest;
95
+ })
96
+ .filter(types_js_1.isDefined);
97
+ const tests = {};
98
+ for (const test of testsList) {
99
+ tests[test.id] = test;
100
+ }
101
+ this.testsManager.updateTests(tests);
102
+ console.log(`Creevey report server started at http://localhost:${this.port}`);
103
+ }
104
+ catch (error) {
105
+ this.logError(`Could not start Creevey server: ${error instanceof Error ? error.message : String(error)}`);
106
+ console.log('Screenshots will still be captured but UI will not be available');
107
+ }
108
+ });
109
+ }
110
+ /**
111
+ * Called when a test begins
112
+ * @param test Test case information
113
+ * @param result Test result (initially empty)
114
+ */
115
+ onTestBegin(test, _result) {
116
+ try {
117
+ (0, assert_1.default)(this.testsManager, 'TestsManager is not initialized');
118
+ const creeveyTestId = this.testIdMap.get(test.id);
119
+ if (creeveyTestId) {
120
+ // Update test status to running
121
+ this.testsManager.updateTestStatus(creeveyTestId, 'running');
122
+ this.logDebug(`Test started: ${test.title} (${creeveyTestId})`);
123
+ }
124
+ }
125
+ catch (error) {
126
+ this.logError(`Error in onTestBegin: ${error instanceof Error ? error.message : String(error)}`);
127
+ }
128
+ }
129
+ /**
130
+ * Called when a test step begins
131
+ * @param test Test case information
132
+ * @param result Test result
133
+ * @param step Test step information
134
+ */
135
+ onStepBegin(test, _result, step) {
136
+ /*
137
+ [Creevey Reporter] Step started: browserType.launch in test: 100 X 100 Vs 2000 X 100
138
+ [Creevey Reporter] Step started: browserType.launch in test: Side By Side
139
+ [Creevey Reporter] Step started: browserType.launch in test: Full
140
+ */
141
+ if (this.debug) {
142
+ this.logDebug(`Step started: ${step.title} in test: ${test.title}`);
143
+ }
144
+ }
145
+ /**
146
+ * Called when a test step ends
147
+ * @param test Test case information
148
+ * @param result Test result
149
+ * @param step Test step information
150
+ */
151
+ onStepEnd(_test, _result, step) {
152
+ try {
153
+ // If step has attachments, process them
154
+ if (step.attachments.length > 0) {
155
+ this.logDebug(`Processing ${step.attachments.length} attachments from step: ${step.title}`);
156
+ // We'll process attachments in onTestEnd for simplicity in this initial implementation
157
+ }
158
+ }
159
+ catch (error) {
160
+ this.logError(`Error in onStepEnd: ${error instanceof Error ? error.message : String(error)}`);
161
+ }
162
+ }
163
+ /**
164
+ * Called when a test ends
165
+ * @param test Test case information
166
+ * @param result Test result
167
+ */
168
+ onTestEnd(test, result) {
169
+ const creeveyTestId = this.testIdMap.get(test.id);
170
+ // Use the async queue to handle result processing without returning a promise
171
+ this.asyncQueue.enqueue(async () => {
172
+ try {
173
+ // Process test results and screenshots
174
+ await this.processTestResult(test, result);
175
+ if (creeveyTestId) {
176
+ this.logDebug(`Test ended: ${test.title} (${creeveyTestId}) with status: ${result.status}`);
177
+ }
178
+ }
179
+ catch (error) {
180
+ this.logError(`Error in onTestEnd: ${error instanceof Error ? error.message : String(error)}`);
181
+ }
182
+ });
183
+ }
184
+ /**
185
+ * Called when the test run ends
186
+ * @param result The overall test run result
187
+ */
188
+ async onEnd(result) {
189
+ // Use the async queue to handle final operations without returning a promise
190
+ this.asyncQueue.enqueue(async () => {
191
+ try {
192
+ (0, assert_1.default)(this.testsManager, 'TestsManager is not initialized');
193
+ // Save test data
194
+ await this.testsManager.saveTestData();
195
+ this.logDebug(`Test run ended with status: ${result.status}`);
196
+ // TODO: Tell how to run reporter `yarn creevey update ./report --ui`
197
+ }
198
+ catch (error) {
199
+ this.logError(`Error during reporter cleanup: ${error instanceof Error ? error.message : String(error)}`);
200
+ }
201
+ });
202
+ // Wait for all previous operations to complete
203
+ await this.asyncQueue.waitForCompletion();
204
+ }
205
+ /**
206
+ * Maps a Playwright test to a Creevey test format
207
+ * @param test Playwright test case
208
+ * @returns Creevey test object or null if mapping fails
209
+ */
210
+ mapToCreeveyTest(test) {
211
+ try {
212
+ const storyName = test.title;
213
+ const storyTitle = test.parent.title;
214
+ const projectName = test.parent.project()?.name ?? 'chromium';
215
+ const testPath = [storyTitle, storyName, projectName];
216
+ const { description: storyId } = test.annotations.find((annotation) => annotation.type === 'storyId') ?? {};
217
+ // Generate a unique test ID
218
+ const testId = (0, crypto_1.createHash)('sha1').update(testPath.join('/')).digest('hex');
219
+ // Create the test metadata
220
+ const testMeta = {
221
+ id: testId,
222
+ storyPath: [...storyTitle.split('/').map((x) => x.trim()), storyName],
223
+ browser: projectName,
224
+ storyId: storyId ?? '',
225
+ };
226
+ // Create a stub ServerTest object
227
+ // This is missing the story and fn properties which would be used in a real Creevey test
228
+ // However, for our reporter purposes, we just need the metadata
229
+ const serverTest = {
230
+ ...testMeta,
231
+ story: {
232
+ parameters: {},
233
+ initialArgs: {},
234
+ argTypes: {},
235
+ component: '',
236
+ componentId: '',
237
+ name: storyName,
238
+ tags: [],
239
+ title: storyTitle,
240
+ kind: storyTitle,
241
+ id: storyId ?? '',
242
+ story: storyName,
243
+ }, // Placeholder
244
+ fn: async () => {
245
+ /* Empty function as placeholder */
246
+ }, // Placeholder
247
+ };
248
+ return serverTest;
249
+ }
250
+ catch (error) {
251
+ this.logError(`Error mapping test to Creevey format: ${error instanceof Error ? error.message : String(error)}`);
252
+ return null;
253
+ }
254
+ }
255
+ /**
256
+ * Process a test result and any attachments
257
+ * @param test Playwright test case
258
+ * @param result Playwright test result
259
+ */
260
+ async processTestResult(test, result) {
261
+ const creeveyTestId = this.testIdMap.get(test.id);
262
+ if (!creeveyTestId) {
263
+ this.logError(`No Creevey test ID found for test: ${test.title}`);
264
+ return Promise.resolve();
265
+ }
266
+ (0, assert_1.default)(this.testsManager, 'TestsManager is not initialized');
267
+ // Determine test status
268
+ let status;
269
+ switch (result.status) {
270
+ case 'passed':
271
+ status = 'success';
272
+ break;
273
+ case 'failed':
274
+ case 'timedOut':
275
+ status = 'failed';
276
+ break;
277
+ default:
278
+ status = 'unknown';
279
+ }
280
+ // Process attachments
281
+ const images = {};
282
+ const attachmentPaths = [];
283
+ const projectName = test.parent.project()?.name ?? 'chromium';
284
+ for (const attachment of result.attachments) {
285
+ const { name, path: attachmentPath } = attachment;
286
+ if (!attachmentPath)
287
+ continue;
288
+ attachmentPaths.push(attachmentPath);
289
+ switch (true) {
290
+ case name.includes('actual'): {
291
+ images[projectName] = { ...images[projectName], actual: name };
292
+ break;
293
+ }
294
+ case name.includes('expect'): {
295
+ images[projectName] = { ...images[projectName], expect: name };
296
+ break;
297
+ }
298
+ case name.includes('diff'): {
299
+ images[projectName] = { ...images[projectName], diff: name };
300
+ break;
301
+ }
302
+ }
303
+ }
304
+ // Update test status and result
305
+ const testResult = {
306
+ status: status === 'success' ? 'success' : 'failed',
307
+ retries: result.retry,
308
+ images,
309
+ error: result.error?.message ?? undefined,
310
+ duration: result.duration,
311
+ attachments: attachmentPaths,
312
+ browserName: projectName,
313
+ };
314
+ this.testsManager.updateTestStatus(creeveyTestId, status, testResult);
315
+ }
316
+ /**
317
+ * Logs a debug message if debug mode is enabled
318
+ * @param message Message to log
319
+ */
320
+ logDebug(message) {
321
+ if (this.debug) {
322
+ console.log(`[Creevey Reporter] ${message}`);
323
+ }
324
+ }
325
+ /**
326
+ * Logs an error message
327
+ * @param message Error message to log
328
+ */
329
+ logError(message) {
330
+ console.error(`[Creevey Reporter] ERROR: ${message}`);
331
+ }
332
+ }
333
+ exports.default = CreeveyPlaywrightReporter;
334
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/playwright/reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { FullConfig } from '@playwright/test';
2
+ declare function globalSetup(config: FullConfig): Promise<void>;
3
+ export default globalSetup;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const path_1 = __importDefault(require("path"));
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const promises_1 = require("fs/promises");
9
+ const test_1 = require("@playwright/test");
10
+ const utils_1 = require("../server/utils");
11
+ const webdriver_1 = require("../server/webdriver");
12
+ const helpers_1 = require("./helpers");
13
+ // This function will fetch stories and cache them or an error if fetching fails.
14
+ // It's intended to be called once before tests that depend on stories are defined.
15
+ async function ensureStoriesFetched(page, storybookUrl) {
16
+ try {
17
+ console.log(`Fetching stories from: ${storybookUrl}`);
18
+ await page.goto((0, webdriver_1.appendIframePath)(storybookUrl), { waitUntil: 'networkidle', timeout: 60000 });
19
+ await (0, helpers_1.waitForStorybookReady)(page);
20
+ // TODO: Inline `serializeRawStories` to serialize creevey skip parameters
21
+ const fetchedStories = await page.evaluate(() => window.__STORYBOOK_PREVIEW__.extract());
22
+ if (!fetchedStories || Object.keys(fetchedStories).length === 0) {
23
+ throw new Error('No stories were found or cached from Storybook.');
24
+ }
25
+ console.log(`Successfully fetched and cached ${Object.keys(fetchedStories).length} stories.`);
26
+ return fetchedStories;
27
+ }
28
+ catch (error) {
29
+ console.error('Error fetching stories');
30
+ throw error;
31
+ }
32
+ }
33
+ const browsers = {
34
+ chromium: test_1.chromium,
35
+ firefox: test_1.firefox,
36
+ webkit: test_1.webkit,
37
+ };
38
+ // TODO: Setup should generate test files for each story file (component)
39
+ // TODO: Add support for multiple storybook urls
40
+ async function globalSetup(config) {
41
+ const storybookUrl = config.webServer?.url;
42
+ const { defaultBrowserType = 'chromium', browserName = defaultBrowserType } = config.projects[0].use;
43
+ (0, assert_1.default)(storybookUrl, 'Storybook URL is required');
44
+ const cacheDir = await (0, utils_1.getCreeveyCache)();
45
+ (0, assert_1.default)(cacheDir, 'Cache directory not found');
46
+ await (0, promises_1.mkdir)(cacheDir, { recursive: true });
47
+ process.env.CREEVEY_CACHE_DIR = cacheDir;
48
+ const browser = await browsers[browserName].launch();
49
+ const context = await browser.newContext();
50
+ const page = await context.newPage();
51
+ if (process.env.PWDEBUG) {
52
+ await context.tracing.start({ name: 'storybook-setup' });
53
+ }
54
+ try {
55
+ const stories = await ensureStoriesFetched(page, storybookUrl);
56
+ await (0, promises_1.writeFile)(path_1.default.join(cacheDir, 'stories.json'), JSON.stringify(stories, null, 2));
57
+ }
58
+ catch (error) {
59
+ console.error('Error in globalSetup:', error);
60
+ if (process.env.PWDEBUG) {
61
+ const tracePath = path_1.default.join(cacheDir, 'storybook-setup-trace.zip');
62
+ console.log('Trace is saved to:', tracePath);
63
+ await context.tracing.stop({ path: tracePath });
64
+ }
65
+ throw error;
66
+ }
67
+ finally {
68
+ await browser.close();
69
+ }
70
+ }
71
+ exports.default = globalSetup;
72
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/playwright/setup.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  /// <reference types="../types/playwright-context" />
2
2
  export { PlaywrightWebdriver } from './server/playwright/webdriver.js';
3
+ export { definePlaywrightTests } from './playwright/generator.js';
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PlaywrightWebdriver = void 0;
3
+ exports.definePlaywrightTests = exports.PlaywrightWebdriver = void 0;
4
4
  var webdriver_js_1 = require("./server/playwright/webdriver.js");
5
5
  Object.defineProperty(exports, "PlaywrightWebdriver", { enumerable: true, get: function () { return webdriver_js_1.PlaywrightWebdriver; } });
6
+ var generator_js_1 = require("./playwright/generator.js");
7
+ Object.defineProperty(exports, "definePlaywrightTests", { enumerable: true, get: function () { return generator_js_1.definePlaywrightTests; } });
6
8
  //# sourceMappingURL=playwright.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"playwright.js","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":";;;AAAA,iEAAuE;AAA9D,mHAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"playwright.js","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":";;;AAAA,iEAAuE;AAA9D,mHAAA,mBAAmB,OAAA;AAC5B,0DAAkE;AAAzD,qHAAA,qBAAqB,OAAA"}
@@ -0,0 +1,18 @@
1
+ import type { ODiffOptions } from 'odiff-bin';
2
+ import type { PixelmatchOptions } from 'pixelmatch';
3
+ import { Images } from '../types';
4
+ export interface ImageContext {
5
+ attachments: string[];
6
+ testFullPath: string[];
7
+ images: Partial<Record<string, Images>>;
8
+ }
9
+ export declare function getPixelmatchAssert(pixelmatch: typeof import('pixelmatch'), ctx: ImageContext, config: {
10
+ screenDir: string;
11
+ reportDir: string;
12
+ diffOptions: PixelmatchOptions;
13
+ }): (actual: Buffer, imageName?: string) => Promise<string | undefined>;
14
+ export declare function getOdiffAssert(compare: (typeof import('odiff-bin'))['compare'], ctx: ImageContext, config: {
15
+ screenDir: string;
16
+ reportDir: string;
17
+ odiffOptions?: ODiffOptions;
18
+ }): (image: Buffer, imageName?: string) => Promise<string | undefined>;