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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "creevey",
3
3
  "description": "Cross-browser screenshot testing tool for Storybook with fancy UI Runner",
4
- "version": "0.10.0-beta.8",
4
+ "version": "0.10.0-rc.0",
5
5
  "type": "commonjs",
6
6
  "bin": "dist/cli.js",
7
7
  "main": "./dist/index.js",
@@ -12,6 +12,14 @@
12
12
  "types": "./dist/playwright.d.ts",
13
13
  "default": "./dist/playwright.js"
14
14
  },
15
+ "./playwright/setup": {
16
+ "types": "./dist/playwright/setup.d.ts",
17
+ "default": "./dist/playwright/setup.js"
18
+ },
19
+ "./playwright/reporter": {
20
+ "types": "./dist/playwright/reporter.d.ts",
21
+ "default": "./dist/playwright/reporter.js"
22
+ },
15
23
  "./selenium": {
16
24
  "types": "./dist/selenium.d.ts",
17
25
  "default": "./dist/selenium.js"
@@ -48,15 +56,16 @@
48
56
  "lint:tsc": "tsc --noEmit",
49
57
  "lint:eslint": "eslint",
50
58
  "lint:prettier": "prettier --check .",
51
- "test": "vitest",
59
+ "test": "vitest run",
60
+ "test:watch": "vitest",
52
61
  "start": "concurrently \"yarn start:client\" \"yarn start:storybook\" \"yarn start:creevey\"",
53
62
  "start:client": "vite",
54
63
  "start:storybook": "storybook dev --ci -p 6006",
55
- "start:creevey": "yarn creevey --ui",
64
+ "start:creevey": "yarn creevey test --ui",
56
65
  "creevey": "tsx ./src/cli",
57
- "creevey:github": "yarn creevey --config .creevey/github.config.mts",
58
- "creevey:gitlab": "yarn creevey --config .creevey/gitlab.config.mts",
59
- "creevey:hybrid": "yarn creevey --config .creevey/hybrid.config.mts",
66
+ "creevey:github": "yarn creevey test --config .creevey/github.config.mts",
67
+ "creevey:gitlab": "yarn creevey test --config .creevey/gitlab.config.mts",
68
+ "creevey:hybrid": "yarn creevey test --config .creevey/hybrid.config.mts",
60
69
  "fix": "concurrently \"yarn fix:eslint\" \"yarn fix:prettier\"",
61
70
  "fix:eslint": "eslint --fix",
62
71
  "fix:prettier": "prettier --write .",
@@ -64,7 +73,7 @@
64
73
  "build": "yarn prebuild && yarn build:client && yarn build:creevey && yarn postbuild",
65
74
  "build:client": "vite build",
66
75
  "build:creevey": "tsc --build tsconfig.prod.json",
67
- "postbuild": "cp \"\"scripts/dist/*.d.ts\"\" dist/",
76
+ "postbuild": "cp \"\"scripts/dist/*.d.ts\"\" dist/ && cp \"\"src/server/playwright/index-source.mjs\"\" dist/server/playwright/index-source.mjs",
68
77
  "version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md",
69
78
  "build-storybook": "storybook build",
70
79
  "chromatic": "chromatic --project-token=chpt_80df83ca94e6fb4",
@@ -74,11 +83,11 @@
74
83
  "node": ">=18.0"
75
84
  },
76
85
  "peerDependencies": {
77
- "playwright": "*",
86
+ "playwright-core": "*",
78
87
  "selenium-webdriver": "*"
79
88
  },
80
89
  "peerDependenciesMeta": {
81
- "playwright": {
90
+ "playwright-core": {
82
91
  "optional": true
83
92
  },
84
93
  "selenium-webdriver": {
@@ -86,108 +95,94 @@
86
95
  }
87
96
  },
88
97
  "dependencies": {
89
- "@koa/cors": "^5.0.0",
90
- "@octokit/core": "^6.1.2",
91
- "@storybook/icons": "^1.2.12",
98
+ "@octokit/core": "^6.1.5",
99
+ "@storybook/icons": "^1.4.0",
92
100
  "@types/chai": "^4.3.20",
93
- "@types/dockerode": "^3.3.32",
94
- "@types/koa": "^2.15.0",
95
- "@types/koa-bodyparser": "^4.3.12",
96
- "@types/koa-mount": "^4.0.5",
97
- "@types/koa-static": "^4.0.4",
98
- "@types/koa__cors": "^5.0.0",
99
- "@types/lodash": "^4.17.13",
101
+ "@types/dockerode": "^3.3.39",
102
+ "@types/lodash": "^4.17.17",
100
103
  "@types/micromatch": "^4.0.9",
101
- "@types/minimist": "^1.2.5",
102
104
  "@types/pixelmatch": "^5.2.6",
103
105
  "@types/pngjs": "^6.0.5",
104
- "@types/qs": "^6.9.17",
105
- "@types/react": "^18.3.12",
106
- "@types/react-dom": "^18.3.1",
107
- "@types/selenium-webdriver": "^4.1.27",
108
- "@types/shelljs": "^0.8.15",
109
- "@types/ws": "^8.5.13",
106
+ "@types/qs": "^6.14.0",
107
+ "@types/react": "^18.3.23",
108
+ "@types/react-dom": "^18.3.7",
109
+ "@types/selenium-webdriver": "^4.1.28",
110
+ "@types/shelljs": "^0.8.16",
111
+ "@types/ws": "^8.18.1",
112
+ "cac": "^6.7.14",
110
113
  "chai": "^4.5.0",
111
114
  "chalk": "^4.1.2",
112
- "chokidar": "^4.0.1",
113
- "dockerode": "^4.0.2",
115
+ "chokidar": "^4.0.3",
116
+ "dockerode": "^4.0.6",
114
117
  "find-cache-dir": "^5.0.0",
115
118
  "get-port": "^7.1.0",
116
- "koa": "^2.15.3",
117
- "koa-bodyparser": "^4.4.1",
118
- "koa-mount": "^4.0.0",
119
- "koa-static": "^5.0.0",
120
119
  "lodash": "^4.17.21",
121
120
  "loglevel": "^1.9.2",
122
121
  "loglevel-plugin-prefix": "^0.8.4",
123
122
  "micromatch": "^4.0.8",
124
- "minimist": "^1.2.8",
125
- "odiff-bin": "^3.2.0",
123
+ "odiff-bin": "^3.2.1",
124
+ "open": "^10.1.2",
125
+ "package-manager-detector": "^0.2.11",
126
+ "pidtree": "^0.6.0",
126
127
  "pixelmatch": "^6.0.0",
127
128
  "pngjs": "^7.0.0",
128
129
  "polished": "^4.3.1",
129
- "qs": "^6.13.1",
130
- "semver": "^7.6.3",
131
- "shelljs": "^0.8.5",
130
+ "qs": "^6.14.0",
131
+ "semver": "^7.7.2",
132
+ "shelljs": "^0.9.2",
132
133
  "tar-stream": "^3.1.7",
133
- "tsx": "^4.19.2",
134
- "uuid": "^11.0.3",
135
- "ws": "^8.18.0",
136
- "yocto-spinner": "^0.1.1"
134
+ "tsx": "^4.19.4",
135
+ "uuid": "^11.1.0",
136
+ "valibot": "^1.1.0",
137
+ "ws": "^8.18.2",
138
+ "yocto-spinner": "^0.2.3"
137
139
  },
138
140
  "devDependencies": {
139
- "@chromatic-com/storybook": "^3.2.2",
140
- "@eslint/js": "^9.15.0",
141
- "@storybook/addon-essentials": "^8.4.5",
142
- "@storybook/addon-interactions": "^8.4.5",
143
- "@storybook/blocks": "^8.4.5",
144
- "@storybook/channels": "^8.4.5",
145
- "@storybook/components": "^8.4.5",
146
- "@storybook/csf": "^0.1.11",
147
- "@storybook/manager-api": "^8.4.5",
148
- "@storybook/preview-api": "^8.4.5",
149
- "@storybook/react": "^8.4.5",
150
- "@storybook/react-vite": "^8.4.5",
151
- "@storybook/test": "^8.4.5",
152
- "@storybook/theming": "^8.4.5",
153
- "@storybook/types": "^8.4.5",
141
+ "@chromatic-com/storybook": "^4.0.0",
142
+ "@eslint/js": "^9.27.0",
143
+ "@playwright/test": "^1.52.0",
144
+ "@storybook/addon-docs": "^9.0.0",
145
+ "@storybook/react-vite": "^9.0.0",
154
146
  "@types/eslint": "^9.6.1",
155
- "@types/eslint__js": "^8.42.3",
156
- "@types/node": "^18.19.64",
147
+ "@types/node": "^18.19.105",
157
148
  "@types/resize-observer-browser": "^0.1.11",
158
- "@types/semver": "^7.5.8",
149
+ "@types/semver": "^7.7.0",
159
150
  "@types/tar-stream": "^3.1.3",
160
151
  "@types/tmp": "^0.2.6",
161
- "@vitejs/plugin-react-swc": "^3.7.1",
162
- "browserstack-local": "^1.5.5",
163
- "chromatic": "^11.18.1",
164
- "concurrently": "^9.1.0",
152
+ "@typescript-eslint/parser": "^8.33.0",
153
+ "@vitejs/plugin-react-swc": "^3.10.0",
154
+ "browserstack-local": "^1.5.6",
155
+ "chromatic": "^12.0.0",
156
+ "concurrently": "^9.1.2",
165
157
  "conventional-changelog-cli": "^5.0.0",
166
- "dotenv": "^16.4.5",
167
- "eslint": "^9.15.0",
168
- "eslint-config-prettier": "^9.1.0",
169
- "eslint-plugin-prettier": "^5.2.1",
170
- "eslint-plugin-react": "^7.37.2",
171
- "eslint-plugin-react-hooks": "^5.0.0",
158
+ "dotenv": "^16.5.0",
159
+ "eslint": "^9.27.0",
160
+ "eslint-config-prettier": "^10.1.5",
161
+ "eslint-import-resolver-typescript": "^4.4.1",
162
+ "eslint-plugin-import-x": "^4.13.3",
163
+ "eslint-plugin-prettier": "^5.4.0",
164
+ "eslint-plugin-react": "^7.37.5",
165
+ "eslint-plugin-react-hooks": "^5.2.0",
166
+ "eslint-plugin-storybook": "^9.0.0",
172
167
  "git-cz": "^4.9.0",
173
- "globals": "^15.12.0",
168
+ "globals": "^16.2.0",
174
169
  "husky": "^9.1.7",
175
170
  "immer": "^10.1.1",
176
- "lint-staged": "^15.2.10",
171
+ "lint-staged": "^15.5.2",
177
172
  "pinst": "^3.0.0",
178
- "playwright-core": "^1.49.0",
179
- "prettier": "^3.3.3",
173
+ "playwright-core": "^1.52.0",
174
+ "prettier": "^3.5.3",
180
175
  "react": "^18.3.1",
181
176
  "react-dom": "^18.3.1",
182
177
  "react-is": "^18.3.1",
183
- "selenium-webdriver": "^4.26.0",
184
- "storybook": "^8.4.5",
178
+ "selenium-webdriver": "^4.33.0",
179
+ "storybook": "^9.0.0",
185
180
  "tmp": "^0.2.3",
186
- "typescript": "^5.6.3",
187
- "typescript-eslint": "^8.15.0",
188
- "use-immer": "^0.10.0",
189
- "vite": "^5.4.11",
190
- "vitest": "^2.1.5"
181
+ "typescript": "^5.8.3",
182
+ "typescript-eslint": "^8.33.0",
183
+ "use-immer": "^0.11.0",
184
+ "vite": "^6.3.5",
185
+ "vitest": "^3.1.4"
191
186
  },
192
187
  "config": {
193
188
  "commitizen": {
@@ -207,7 +202,7 @@
207
202
  "displayName": "Creevey"
208
203
  },
209
204
  "volta": {
210
- "node": "20.16.0",
211
- "yarn": "4.4.0"
212
- }
205
+ "node": "22.15.0"
206
+ },
207
+ "packageManager": "yarn@4.9.1"
213
208
  }
@@ -0,0 +1,46 @@
1
+ import { defineConfig, devices } from '@playwright/test';
2
+
3
+ // NOTE: Default reporter for playwright
4
+ const defaultReporter = process.env.CI ? 'dot' : 'list';
5
+
6
+ export default defineConfig({
7
+ testDir: './tests',
8
+ snapshotDir: './stories/pw-images',
9
+ outputDir: './report',
10
+ testMatch: 'playwright.spec.ts',
11
+ globalSetup: './src/playwright/setup.ts',
12
+ fullyParallel: true,
13
+ forbidOnly: !!process.env.CI,
14
+ retries: process.env.CI ? 2 : 0,
15
+ reporter: [
16
+ !process.env.PWDEBUG ? [defaultReporter] : ['null'],
17
+ ['./src/playwright/reporter.ts', { debug: !!process.env.PWDEBUG }],
18
+ // NOTE: use `playwright test --ui` to run tests with Creevey reporter
19
+ ],
20
+ use: {
21
+ baseURL: 'http://localhost:6006',
22
+ trace: 'on-first-retry',
23
+ },
24
+ projects: [
25
+ {
26
+ name: 'chromium',
27
+ use: { ...devices['Desktop Chrome'] },
28
+ metadata: {
29
+ storybookGlobals: {},
30
+ },
31
+ },
32
+ // {
33
+ // name: 'firefox',
34
+ // use: { ...devices['Desktop Firefox'] },
35
+ // },
36
+ // {
37
+ // name: 'webkit',
38
+ // use: { ...devices['Desktop Safari'] },
39
+ // },
40
+ ],
41
+ webServer: {
42
+ command: 'yarn start:storybook',
43
+ url: 'http://localhost:6006',
44
+ reuseExistingServer: !process.env.CI,
45
+ },
46
+ });
@@ -1,5 +1,5 @@
1
1
  import React, { JSX, useEffect, useState } from 'react';
2
- import { Placeholder } from '@storybook/components';
2
+ import { Placeholder } from 'storybook/internal/components';
3
3
  import { TestData } from '../../../types.js';
4
4
  import { Panel } from './Panel.js';
5
5
  import { CreeveyController } from '../controller.js';
@@ -1,11 +1,11 @@
1
1
  import React, { JSX } from 'react';
2
- import { Loader } from '@storybook/components';
3
- import { styled } from '@storybook/theming';
4
- import { TestData } from '../../../types.js';
2
+ import { Loader } from 'storybook/internal/components';
3
+ import { styled } from 'storybook/theming';
4
+ import { noop, TestData } from '../../../types.js';
5
5
  import { ResultsPage } from '../../shared/components/ResultsPage.js';
6
6
  import { getTestPath } from '../../shared/helpers.js';
7
7
  import TestSelect from './TestSelect.js';
8
- import { noop } from 'lodash';
8
+
9
9
  interface PanelProps {
10
10
  tests: TestData[];
11
11
  selectedTestId: string;
@@ -1,7 +1,7 @@
1
1
  import React, { JSX } from 'react';
2
- import { Button, TooltipLinkList, WithTooltip } from '@storybook/components';
2
+ import { Button, TooltipLinkList, WithTooltip } from 'storybook/internal/components';
3
3
  import { MenuIcon } from '@storybook/icons';
4
- import { styled } from '@storybook/theming';
4
+ import { styled } from 'storybook/theming';
5
5
  import { TestData } from '../../../types.js';
6
6
  import { getEmojiByTestStatus } from '../utils.js';
7
7
 
@@ -1,8 +1,8 @@
1
1
  import React, { JSX, Fragment, useState, useEffect } from 'react';
2
2
  import { stringify } from 'qs';
3
- import { IconButton, Separator } from '@storybook/components';
3
+ import { IconButton, Separator } from 'storybook/internal/components';
4
4
  import { StopIcon, ShareAltIcon, PlayIcon } from '@storybook/icons';
5
- import { styled } from '@storybook/theming';
5
+ import { styled } from 'storybook/theming';
6
6
  import { ForwardIcon, NextIcon } from './Icons.js';
7
7
  import { isDefined, TestData } from '../../../types.js';
8
8
  import { getTestPath, useForceUpdate } from '../../shared/helpers.js';
@@ -1,4 +1,4 @@
1
- import { Addon_TypesEnum } from '@storybook/types';
1
+ import { Addon_TypesEnum } from 'storybook/internal/types';
2
2
  import { denormalizeStoryParameters } from '../../shared/index.js';
3
3
  import {
4
4
  CreeveyStatus,
@@ -12,17 +12,17 @@ import {
12
12
  import { initCreeveyClientApi, CreeveyClientApi } from '../shared/creeveyClientApi.js';
13
13
  import { calcStatus } from '../shared/helpers.js';
14
14
  import { getEmojiByTestStatus } from './utils.js';
15
- import { API } from '@storybook/manager-api';
15
+ import { API } from 'storybook/manager-api';
16
16
 
17
17
  export const ADDON_ID = 'creevey';
18
18
 
19
19
  // TODO Add `useController` hook
20
- // TODO use `import { useGlobals, useStorybookApi } from '@storybook/manager-api';`
20
+ // TODO use `import { useGlobals, useStorybookApi } from 'storybook/manager-api';`
21
21
  export class CreeveyController {
22
22
  storyId = '';
23
23
  activeBrowser = '';
24
24
  selectedTestId = '';
25
- status: CreeveyStatus = { isRunning: false, tests: {}, browsers: [] };
25
+ status: CreeveyStatus = { isRunning: false, tests: {}, browsers: [], isUpdateMode: false };
26
26
  creeveyApi: CreeveyClientApi | null = null;
27
27
  stories: StoriesRaw = {};
28
28
 
@@ -0,0 +1,69 @@
1
+ // NOTE: This file is a modified version of the makeDecorator function from Storybook.
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ import type { Addon_StoryContext, Addon_LegacyStoryFn, Addon_StoryWrapper } from 'storybook/internal/types';
4
+
5
+ export interface MakeDecoratorOptions {
6
+ name: string;
7
+ parameterName: string;
8
+ skipIfNoParametersOrOptions?: boolean;
9
+ wrapper: Addon_StoryWrapper;
10
+ }
11
+
12
+ export type MakeDecoratorResult = (...args: any) => any;
13
+
14
+ export const makeDecorator = ({
15
+ name,
16
+ parameterName,
17
+ wrapper,
18
+ skipIfNoParametersOrOptions = false,
19
+ }: MakeDecoratorOptions): MakeDecoratorResult => {
20
+ const decorator = (options?: object) => (storyFn: Addon_LegacyStoryFn, context: Addon_StoryContext) => {
21
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unnecessary-condition
22
+ const parameters = context.parameters?.[parameterName];
23
+
24
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
25
+ if (parameters?.disable) {
26
+ return storyFn(context);
27
+ }
28
+
29
+ if (skipIfNoParametersOrOptions && !options && !parameters) {
30
+ return storyFn(context);
31
+ }
32
+
33
+ // @ts-expect-error - decorator is a function that returns a function
34
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-assignment
35
+ return wrapper(storyFn, context, { options, parameters });
36
+ };
37
+
38
+ return (...args: any) => {
39
+ // Used without options as .addDecorator(decorator)
40
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
41
+ if (typeof args[0] === 'function') {
42
+ // @ts-expect-error - decorator is a function that returns a function
43
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument
44
+ return decorator()(...args);
45
+ }
46
+
47
+ return (...innerArgs: any): any => {
48
+ // Used as [.]addDecorator(decorator(options))
49
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
50
+ if (innerArgs.length > 1) {
51
+ // Used as [.]addDecorator(decorator(option1, option2))
52
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
53
+ if (args.length > 1) {
54
+ // @ts-expect-error - decorator is a function that returns a function
55
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
56
+ return decorator(args)(...innerArgs);
57
+ }
58
+ // @ts-expect-error - decorator is a function that returns a function
59
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
60
+ return decorator(...args)(...innerArgs);
61
+ }
62
+
63
+ throw new Error(
64
+ `Passing stories directly into ${name}() is not allowed,
65
+ instead use addDecorator(${name}) and pass options with the '${parameterName}' parameter`,
66
+ );
67
+ };
68
+ };
69
+ };
@@ -1,44 +1,45 @@
1
- import React from 'react';
2
- import { Addon_TypesEnum } from '@storybook/types';
3
- import { addons, API } from '@storybook/manager-api';
4
- import { Addon } from './components/Addon.js';
5
- import { Tools } from './components/Tools.js';
6
- import { CreeveyController, ADDON_ID } from './controller.js';
1
+ // TODO: Disable manager for now until fully reworked
2
+ // import React from 'react';
3
+ // import { Addon_TypesEnum } from 'storybook/internal/types';
4
+ // import { addons, API } from 'storybook/manager-api';
5
+ // import { Addon } from './components/Addon.js';
6
+ // import { Tools } from './components/Tools.js';
7
+ // import { CreeveyController, ADDON_ID } from './controller.js';
7
8
 
8
- // TODO Take api from `import { useGlobals, useStorybookApi } from '@storybook/manager-api';`
9
- addons.register(ADDON_ID, (api) => {
10
- void registerCreeveyPanels(api);
11
- });
9
+ // // TODO Take api from `import { useGlobals, useStorybookApi } from 'storybook/manager-api';`
10
+ // addons.register(ADDON_ID, (api) => {
11
+ // void registerCreeveyPanels(api);
12
+ // });
12
13
 
13
- async function registerCreeveyPanels(storybookApi: API): Promise<void> {
14
- const controller = new CreeveyController(storybookApi);
14
+ // async function registerCreeveyPanels(storybookApi: API): Promise<void> {
15
+ // const controller = new CreeveyController(storybookApi);
15
16
 
16
- addons.add(`${ADDON_ID}/panel/run`, {
17
- title: `Creevey/Run`,
18
- match: ({ viewMode }) => !!(viewMode && /^story$/.exec(viewMode)),
19
- type: Addon_TypesEnum.TOOL,
17
+ // addons.add(`${ADDON_ID}/panel/run`, {
18
+ // title: `Creevey/Run`,
19
+ // match: ({ viewMode }) => !!(viewMode && /^story$/.exec(viewMode)),
20
+ // type: Addon_TypesEnum.TOOL,
20
21
 
21
- render: () => React.createElement(Tools, { controller }),
22
- });
23
- await controller.initAll();
24
- const browsers = controller.getBrowsers();
22
+ // render: () => React.createElement(Tools, { controller }),
23
+ // });
24
+ // await controller.initAll();
25
+ // const browsers = controller.getBrowsers();
25
26
 
26
- browsers.forEach((browser) => {
27
- const panelId = `${ADDON_ID}/panel/${browser}`;
28
- const title = controller.getTabTitle(browser);
29
- addons.add(panelId, {
30
- title,
31
- type: Addon_TypesEnum.PANEL,
32
- paramKey: browser,
27
+ // browsers.forEach((browser) => {
28
+ // const panelId = `${ADDON_ID}/panel/${browser}`;
29
+ // const title = controller.getTabTitle(browser);
30
+ // addons.add(panelId, {
31
+ // title,
32
+ // type: Addon_TypesEnum.PANEL,
33
+ // paramKey: browser,
33
34
 
34
- // NOTE key = PANEL_ID needs to correct render button in addons panel
35
+ // // NOTE key = PANEL_ID needs to correct render button in addons panel
35
36
 
36
- render: ({ active }) =>
37
- React.createElement(Addon, {
38
- active,
39
- controller,
40
- browser,
41
- }),
42
- });
43
- });
44
- }
37
+ // render: ({ active }) =>
38
+ // React.createElement(Addon, {
39
+ // active,
40
+ // controller,
41
+ // browser,
42
+ // }),
43
+ // });
44
+ // });
45
+ // }
@@ -1,3 +1,4 @@
1
1
  export const previewAnnotations = [require.resolve('./preview')];
2
2
 
3
- export const managerEntries = [require.resolve('./manager')];
3
+ // TODO: Disable manager for now until fully reworked
4
+ // export const managerEntries = [require.resolve('./manager')];
@@ -1,6 +1,6 @@
1
- import type { Renderer, StoryContextForEnhancers } from '@storybook/csf';
2
- import { makeDecorator, PreviewWeb, StoryStore } from '@storybook/preview-api';
3
- import { Channel } from '@storybook/channels';
1
+ import type { Renderer } from 'storybook/internal/types';
2
+ import type { PreviewWeb, StoryStore } from 'storybook/preview-api';
3
+ import { Channel } from 'storybook/internal/channels';
4
4
  import {
5
5
  CaptureOptions,
6
6
  CreeveyStoryParams,
@@ -12,9 +12,14 @@ import {
12
12
  } from '../../types.js';
13
13
  import { serializeRawStories } from '../../shared/index.js';
14
14
  import { getConnectionUrl } from '../shared/helpers.js';
15
+ import isEqual from 'lodash/isEqual.js';
16
+ import { makeDecorator } from './makeDecorator.js';
15
17
 
18
+ // TODO: Get rid of __CREEVEY_ prefixed variables, use storybook api directly
19
+ // TODO: Remove __CREEVEY_SET_READY_FOR_CAPTURE__ and `capture` function, because it seems not used, but we need to rethink how to write proper tests in play function
16
20
  declare global {
17
21
  interface Window {
22
+ __CREEVEY_ENV__: boolean;
18
23
  __CREEVEY_SERVER_HOST__: string;
19
24
  __CREEVEY_SERVER_PORT__: number;
20
25
  __CREEVEY_WORKER_ID__: number;
@@ -118,7 +123,6 @@ function initCreeveyState(): void {
118
123
 
119
124
  if (prevState.creeveyHost) window.__CREEVEY_SERVER_HOST__ = prevState.creeveyHost;
120
125
  if (prevState.creeveyPort) window.__CREEVEY_SERVER_PORT__ = prevState.creeveyPort;
121
- if (prevState.setStoriesCounter) setStoriesCounter = prevState.setStoriesCounter;
122
126
  if (prevState.isTestBrowser) isTestBrowser = prevState.isTestBrowser;
123
127
 
124
128
  window.addEventListener('beforeunload', () => {
@@ -127,7 +131,6 @@ function initCreeveyState(): void {
127
131
  JSON.stringify({
128
132
  creeveyHost: window.__CREEVEY_SERVER_HOST__,
129
133
  creeveyPort: window.__CREEVEY_SERVER_PORT__,
130
- setStoriesCounter,
131
134
  isTestBrowser,
132
135
  } as CreeveyTestsState),
133
136
  );
@@ -138,7 +141,7 @@ let isTestBrowser = false;
138
141
  let captureResolver: () => void;
139
142
  let waitForCreevey: Promise<void>;
140
143
  let creeveyReady: () => void;
141
- let setStoriesCounter = 0;
144
+ let globals = {};
142
145
 
143
146
  export function withCreevey(): ReturnType<typeof makeDecorator> {
144
147
  const addonsChannel = (): Channel => window.__STORYBOOK_ADDONS_CHANNEL__;
@@ -156,20 +159,9 @@ export function withCreevey(): ReturnType<typeof makeDecorator> {
156
159
  document.head.appendChild(style);
157
160
  }
158
161
 
162
+ // TODO Find a way to send stories updates to the server
159
163
  async function getStories(): Promise<StoriesRaw | undefined> {
160
164
  const stories = serializeRawStories(await window.__STORYBOOK_PREVIEW__.extract());
161
- const storiesByFiles = new Map<string, StoryContextForEnhancers[]>();
162
- Object.values(stories).forEach((story) => {
163
- const fileName = story.parameters.fileName as string;
164
- const storiesFromFile = storiesByFiles.get(fileName);
165
- if (storiesFromFile) storiesFromFile.push(story);
166
- else storiesByFiles.set(fileName, [story]);
167
- });
168
- void fetch(`http://${getConnectionUrl()}/stories`, {
169
- method: 'POST',
170
- headers: { 'Content-Type': 'application/json' },
171
- body: JSON.stringify({ setStoriesCounter, stories: [...storiesByFiles.entries()] }),
172
- });
173
165
  return stories;
174
166
  }
175
167
 
@@ -225,7 +217,10 @@ export function withCreevey(): ReturnType<typeof makeDecorator> {
225
217
  }
226
218
  }
227
219
 
228
- function updateGlobals(globals: StorybookGlobals): void {
220
+ function updateGlobals(newGlobals: StorybookGlobals): void {
221
+ if (isEqual(globals, newGlobals)) return;
222
+
223
+ globals = newGlobals;
229
224
  addonsChannel().emit(StorybookEvents.UPDATE_GLOBALS, { globals });
230
225
  }
231
226
 
@@ -274,6 +269,7 @@ export function withCreevey(): ReturnType<typeof makeDecorator> {
274
269
  });
275
270
  }
276
271
 
272
+ window.__CREEVEY_ENV__ = false;
277
273
  window.__CREEVEY_GET_STORIES__ = getStories;
278
274
  window.__CREEVEY_SELECT_STORY__ = selectStory;
279
275
  window.__CREEVEY_UPDATE_GLOBALS__ = updateGlobals;
@@ -315,6 +311,7 @@ export function withCreevey(): ReturnType<typeof makeDecorator> {
315
311
  });
316
312
  }
317
313
 
314
+ // TODO It's not accessible from the outside the package
318
315
  export async function capture(options?: CaptureOptions): Promise<void> {
319
316
  if (!isTestBrowser) return;
320
317
 
@@ -1,5 +1,5 @@
1
1
  import React, { JSX, useEffect, useRef } from 'react';
2
- import { styled, withTheme } from '@storybook/theming';
2
+ import { styled, withTheme } from 'storybook/theming';
3
3
  import { ViewPropsWithTheme, getBorderColor, themeBorderColors } from './common.js';
4
4
  import { useApplyScale, useCalcScale, useLoadImages } from '../../helpers.js';
5
5
  import { readyForCapture } from '../../../addon/readyForCapture.js';
@@ -1,5 +1,5 @@
1
1
  import React, { JSX, FunctionComponent } from 'react';
2
- import { styled, withTheme } from '@storybook/theming';
2
+ import { styled, withTheme } from 'storybook/theming';
3
3
  import { SideBySideView } from './SideBySideView.js';
4
4
  import { SwapView } from './SwapView.js';
5
5
  import { SlideView } from './SlideView.js';