creevey 0.9.2 → 0.10.0-beta.1

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 (271) hide show
  1. package/chromatic.config.json +5 -0
  2. package/dist/client/addon/components/Addon.d.ts +1 -0
  3. package/dist/client/addon/components/Addon.js.map +1 -1
  4. package/dist/client/addon/components/Icons.d.ts +1 -0
  5. package/dist/client/addon/components/Icons.js.map +1 -1
  6. package/dist/client/addon/components/Panel.d.ts +1 -0
  7. package/dist/client/addon/components/Panel.js.map +1 -1
  8. package/dist/client/addon/components/TestSelect.d.ts +1 -0
  9. package/dist/client/addon/components/TestSelect.js +4 -3
  10. package/dist/client/addon/components/TestSelect.js.map +1 -1
  11. package/dist/client/addon/components/Tools.d.ts +1 -0
  12. package/dist/client/addon/components/Tools.js +7 -8
  13. package/dist/client/addon/components/Tools.js.map +1 -1
  14. package/dist/client/addon/controller.d.ts +1 -1
  15. package/dist/client/addon/controller.js.map +1 -1
  16. package/dist/client/addon/decorator.d.ts +1 -1
  17. package/dist/client/addon/manager.js +3 -2
  18. package/dist/client/addon/manager.js.map +1 -1
  19. package/dist/client/addon/preview.d.ts +1 -1
  20. package/dist/client/addon/withCreevey.d.ts +6 -8
  21. package/dist/client/addon/withCreevey.js +21 -19
  22. package/dist/client/addon/withCreevey.js.map +1 -1
  23. package/dist/client/shared/components/ImagesView/BlendView.d.ts +1 -1
  24. package/dist/client/shared/components/ImagesView/BlendView.js.map +1 -1
  25. package/dist/client/shared/components/ImagesView/ImagesView.d.ts +1 -0
  26. package/dist/client/shared/components/ImagesView/ImagesView.js.map +1 -1
  27. package/dist/client/shared/components/ImagesView/SideBySideView.d.ts +1 -1
  28. package/dist/client/shared/components/ImagesView/SideBySideView.js.map +1 -1
  29. package/dist/client/shared/components/ImagesView/SlideView.d.ts +1 -1
  30. package/dist/client/shared/components/ImagesView/SlideView.js.map +1 -1
  31. package/dist/client/shared/components/ImagesView/SwapView.d.ts +1 -1
  32. package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
  33. package/dist/client/shared/components/PageFooter/PageFooter.d.ts +1 -0
  34. package/dist/client/shared/components/PageFooter/PageFooter.js +1 -1
  35. package/dist/client/shared/components/PageFooter/PageFooter.js.map +1 -1
  36. package/dist/client/shared/components/PageFooter/Paging.d.ts +2 -2
  37. package/dist/client/shared/components/PageFooter/Paging.js +8 -6
  38. package/dist/client/shared/components/PageFooter/Paging.js.map +1 -1
  39. package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
  40. package/dist/client/shared/components/PageHeader/PageHeader.d.ts +1 -0
  41. package/dist/client/shared/components/PageHeader/PageHeader.js +2 -1
  42. package/dist/client/shared/components/PageHeader/PageHeader.js.map +1 -1
  43. package/dist/client/shared/components/ResultsPage.d.ts +2 -2
  44. package/dist/client/shared/components/ResultsPage.js.map +1 -1
  45. package/dist/client/web/CreeveyApp.d.ts +1 -0
  46. package/dist/client/web/CreeveyApp.js.map +1 -1
  47. package/dist/client/web/CreeveyLoader.d.ts +1 -0
  48. package/dist/client/web/CreeveyLoader.js.map +1 -1
  49. package/dist/client/web/CreeveyView/SideBar/Checkbox.d.ts +1 -1
  50. package/dist/client/web/CreeveyView/SideBar/Checkbox.js +4 -4
  51. package/dist/client/web/CreeveyView/SideBar/Checkbox.js.map +1 -1
  52. package/dist/client/web/CreeveyView/SideBar/Search.d.ts +1 -0
  53. package/dist/client/web/CreeveyView/SideBar/Search.js +4 -4
  54. package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
  55. package/dist/client/web/CreeveyView/SideBar/SideBar.d.ts +1 -1
  56. package/dist/client/web/CreeveyView/SideBar/SideBar.js +1 -7
  57. package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
  58. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.d.ts +1 -0
  59. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +5 -4
  60. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
  61. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +1 -0
  62. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js +4 -3
  63. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js.map +1 -1
  64. package/dist/client/web/CreeveyView/SideBar/SuiteLink.d.ts +3 -7
  65. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +6 -5
  66. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
  67. package/dist/client/web/CreeveyView/SideBar/TestLink.d.ts +1 -0
  68. package/dist/client/web/CreeveyView/SideBar/TestLink.js +5 -1
  69. package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
  70. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js +15 -8
  71. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js.map +1 -1
  72. package/dist/client/web/CreeveyView/SideBar/TestsStatus.js +5 -4
  73. package/dist/client/web/CreeveyView/SideBar/TestsStatus.js.map +1 -1
  74. package/dist/client/web/CreeveyView/SideBar/Toggle.d.ts +1 -0
  75. package/dist/client/web/CreeveyView/SideBar/Toggle.js.map +1 -1
  76. package/dist/client/web/KeyboardEventsContext.d.ts +3 -4
  77. package/dist/client/web/KeyboardEventsContext.js.map +1 -1
  78. package/dist/client/web/assets/index-DkmZfG9C.js +591 -0
  79. package/dist/client/web/index.html +1 -1
  80. package/dist/client/web/index.js +5 -6
  81. package/dist/client/web/index.js.map +1 -1
  82. package/dist/creevey.js +21 -9
  83. package/dist/creevey.js.map +1 -1
  84. package/dist/index.js +2 -2
  85. package/dist/index.js.map +1 -1
  86. package/dist/playwright.d.ts +2 -0
  87. package/dist/playwright.js +6 -0
  88. package/dist/playwright.js.map +1 -0
  89. package/dist/selenium.d.ts +2 -0
  90. package/dist/selenium.js +6 -0
  91. package/dist/selenium.js.map +1 -0
  92. package/dist/server/config.d.ts +1 -1
  93. package/dist/server/config.js +16 -6
  94. package/dist/server/config.js.map +1 -1
  95. package/dist/server/docker.d.ts +2 -2
  96. package/dist/server/docker.js +46 -40
  97. package/dist/server/docker.js.map +1 -1
  98. package/dist/server/index.js +64 -15
  99. package/dist/server/index.js.map +1 -1
  100. package/dist/server/master/master.d.ts +1 -5
  101. package/dist/server/master/master.js +3 -3
  102. package/dist/server/master/master.js.map +1 -1
  103. package/dist/server/master/pool.d.ts +2 -1
  104. package/dist/server/master/pool.js +9 -5
  105. package/dist/server/master/pool.js.map +1 -1
  106. package/dist/server/master/runner.d.ts +1 -1
  107. package/dist/server/master/runner.js +2 -2
  108. package/dist/server/master/runner.js.map +1 -1
  109. package/dist/server/master/server.js +1 -0
  110. package/dist/server/master/server.js.map +1 -1
  111. package/dist/server/master/start.d.ts +3 -0
  112. package/dist/server/master/{index.js → start.js} +6 -9
  113. package/dist/server/master/start.js.map +1 -0
  114. package/dist/server/messages.d.ts +4 -10
  115. package/dist/server/messages.js +4 -58
  116. package/dist/server/messages.js.map +1 -1
  117. package/dist/server/playwright/docker-file.d.ts +1 -0
  118. package/dist/server/playwright/docker-file.js +27 -0
  119. package/dist/server/playwright/docker-file.js.map +1 -0
  120. package/dist/server/playwright/docker.d.ts +1 -0
  121. package/dist/server/playwright/docker.js +26 -0
  122. package/dist/server/playwright/docker.js.map +1 -0
  123. package/dist/server/playwright/internal.d.ts +25 -0
  124. package/dist/server/playwright/internal.js +319 -0
  125. package/dist/server/playwright/internal.js.map +1 -0
  126. package/dist/server/playwright/webdriver.d.ts +17 -0
  127. package/dist/server/playwright/webdriver.js +108 -0
  128. package/dist/server/playwright/webdriver.js.map +1 -0
  129. package/dist/server/providers/browser.d.ts +2 -0
  130. package/dist/server/{storybook/providers → providers}/browser.js +6 -7
  131. package/dist/server/providers/browser.js.map +1 -0
  132. package/dist/server/providers/hybrid.d.ts +2 -0
  133. package/dist/server/{storybook/providers → providers}/hybrid.js +8 -8
  134. package/dist/server/providers/hybrid.js.map +1 -0
  135. package/dist/server/reporter.d.ts +26 -0
  136. package/dist/server/{worker/reporter.js → reporter.js} +34 -56
  137. package/dist/server/reporter.js.map +1 -0
  138. package/dist/server/selenium/internal.d.ts +32 -0
  139. package/dist/server/selenium/internal.js +617 -0
  140. package/dist/server/selenium/internal.js.map +1 -0
  141. package/dist/server/selenium/selenoid.js +6 -13
  142. package/dist/server/selenium/selenoid.js.map +1 -1
  143. package/dist/server/selenium/webdriver.d.ts +25 -0
  144. package/dist/server/selenium/webdriver.js +113 -0
  145. package/dist/server/selenium/webdriver.js.map +1 -0
  146. package/dist/server/stories.js +16 -9
  147. package/dist/server/stories.js.map +1 -1
  148. package/dist/server/telemetry.d.ts +1 -1
  149. package/dist/server/telemetry.js +4 -4
  150. package/dist/server/telemetry.js.map +1 -1
  151. package/dist/server/utils.d.ts +3 -4
  152. package/dist/server/utils.js +10 -9
  153. package/dist/server/utils.js.map +1 -1
  154. package/dist/server/webdriver.d.ts +20 -0
  155. package/dist/server/webdriver.js +79 -0
  156. package/dist/server/webdriver.js.map +1 -0
  157. package/dist/server/worker/chai-image.d.ts +2 -5
  158. package/dist/server/worker/chai-image.js +14 -102
  159. package/dist/server/worker/chai-image.js.map +1 -1
  160. package/dist/server/worker/match-image.d.ts +14 -0
  161. package/dist/server/worker/match-image.js +231 -0
  162. package/dist/server/worker/match-image.js.map +1 -0
  163. package/dist/server/worker/start.d.ts +2 -0
  164. package/dist/server/worker/start.js +236 -0
  165. package/dist/server/worker/start.js.map +1 -0
  166. package/dist/types.d.ts +119 -65
  167. package/dist/types.js +15 -9
  168. package/dist/types.js.map +1 -1
  169. package/package.json +123 -112
  170. package/playwright.d.ts +2 -0
  171. package/selenium.d.ts +2 -0
  172. package/src/client/addon/components/Addon.tsx +1 -1
  173. package/src/client/addon/components/Icons.tsx +1 -1
  174. package/src/client/addon/components/Panel.tsx +1 -1
  175. package/src/client/addon/components/TestSelect.tsx +5 -5
  176. package/src/client/addon/components/Tools.tsx +9 -9
  177. package/src/client/addon/controller.ts +1 -1
  178. package/src/client/addon/manager.ts +4 -4
  179. package/src/client/addon/withCreevey.ts +26 -28
  180. package/src/client/shared/components/ImagesView/BlendView.tsx +1 -1
  181. package/src/client/shared/components/ImagesView/ImagesView.tsx +2 -2
  182. package/src/client/shared/components/ImagesView/SideBySideView.tsx +1 -1
  183. package/src/client/shared/components/ImagesView/SlideView.tsx +1 -1
  184. package/src/client/shared/components/ImagesView/SwapView.tsx +1 -1
  185. package/src/client/shared/components/PageFooter/PageFooter.tsx +2 -2
  186. package/src/client/shared/components/PageFooter/Paging.tsx +13 -13
  187. package/src/client/shared/components/PageHeader/ImagePreview.tsx +1 -1
  188. package/src/client/shared/components/PageHeader/PageHeader.tsx +4 -3
  189. package/src/client/shared/components/ResultsPage.tsx +1 -1
  190. package/src/client/web/CreeveyApp.tsx +1 -1
  191. package/src/client/web/CreeveyLoader.tsx +1 -1
  192. package/src/client/web/CreeveyView/SideBar/Checkbox.tsx +6 -7
  193. package/src/client/web/CreeveyView/SideBar/Search.tsx +4 -4
  194. package/src/client/web/CreeveyView/SideBar/SideBar.tsx +3 -10
  195. package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +7 -6
  196. package/src/client/web/CreeveyView/SideBar/SideBarHeader.tsx +7 -6
  197. package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +8 -6
  198. package/src/client/web/CreeveyView/SideBar/TestLink.tsx +8 -3
  199. package/src/client/web/CreeveyView/SideBar/TestStatusIcon.tsx +18 -10
  200. package/src/client/web/CreeveyView/SideBar/TestsStatus.tsx +7 -10
  201. package/src/client/web/CreeveyView/SideBar/Toggle.tsx +1 -2
  202. package/src/client/web/KeyboardEventsContext.tsx +3 -4
  203. package/src/client/web/index.html +1 -1
  204. package/src/client/web/index.tsx +4 -3
  205. package/src/creevey.ts +25 -8
  206. package/src/index.ts +2 -2
  207. package/src/playwright.ts +1 -0
  208. package/src/selenium.ts +1 -0
  209. package/src/server/config.ts +25 -10
  210. package/src/server/docker.ts +58 -44
  211. package/src/server/index.ts +75 -18
  212. package/src/server/master/master.ts +3 -6
  213. package/src/server/master/pool.ts +20 -7
  214. package/src/server/master/runner.ts +2 -2
  215. package/src/server/master/server.ts +1 -0
  216. package/src/server/master/{index.ts → start.ts} +13 -11
  217. package/src/server/messages.ts +11 -75
  218. package/src/server/playwright/docker-file.ts +22 -0
  219. package/src/server/playwright/docker.ts +31 -0
  220. package/src/server/playwright/internal.ts +387 -0
  221. package/src/server/playwright/webdriver.ts +131 -0
  222. package/src/server/{storybook/providers → providers}/browser.ts +7 -8
  223. package/src/server/{storybook/providers → providers}/hybrid.ts +19 -19
  224. package/src/server/{worker/reporter.ts → reporter.ts} +40 -72
  225. package/src/server/selenium/internal.ts +812 -0
  226. package/src/server/selenium/selenoid.ts +12 -17
  227. package/src/server/selenium/webdriver.ts +146 -0
  228. package/src/server/stories.ts +18 -11
  229. package/src/server/telemetry.ts +2 -2
  230. package/src/server/utils.ts +9 -9
  231. package/src/server/webdriver.ts +130 -0
  232. package/src/server/worker/chai-image.ts +21 -133
  233. package/src/server/worker/match-image.ts +303 -0
  234. package/src/server/worker/start.ts +275 -0
  235. package/src/types.ts +155 -61
  236. package/types/playwright-context.d.ts +7 -0
  237. package/types/selenium-context.d.ts +7 -0
  238. package/dist/client/web/202.js +0 -1
  239. package/dist/client/web/270.js +0 -43
  240. package/dist/client/web/752.js +0 -1
  241. package/dist/client/web/main.js +0 -79
  242. package/dist/client/web/main.js.LICENSE.txt +0 -34
  243. package/dist/server/master/index.d.ts +0 -3
  244. package/dist/server/master/index.js.map +0 -1
  245. package/dist/server/selenium/browser.d.ts +0 -19
  246. package/dist/server/selenium/browser.js +0 -640
  247. package/dist/server/selenium/browser.js.map +0 -1
  248. package/dist/server/selenium/index.d.ts +0 -2
  249. package/dist/server/selenium/index.js +0 -19
  250. package/dist/server/selenium/index.js.map +0 -1
  251. package/dist/server/storybook/providers/browser.d.ts +0 -2
  252. package/dist/server/storybook/providers/browser.js.map +0 -1
  253. package/dist/server/storybook/providers/hybrid.d.ts +0 -2
  254. package/dist/server/storybook/providers/hybrid.js.map +0 -1
  255. package/dist/server/worker/helpers.d.ts +0 -8
  256. package/dist/server/worker/helpers.js +0 -57
  257. package/dist/server/worker/helpers.js.map +0 -1
  258. package/dist/server/worker/index.d.ts +0 -1
  259. package/dist/server/worker/index.js +0 -6
  260. package/dist/server/worker/index.js.map +0 -1
  261. package/dist/server/worker/reporter.d.ts +0 -8
  262. package/dist/server/worker/reporter.js.map +0 -1
  263. package/dist/server/worker/worker.d.ts +0 -4
  264. package/dist/server/worker/worker.js +0 -217
  265. package/dist/server/worker/worker.js.map +0 -1
  266. package/src/server/selenium/browser.ts +0 -840
  267. package/src/server/selenium/index.ts +0 -2
  268. package/src/server/worker/helpers.ts +0 -61
  269. package/src/server/worker/index.ts +0 -1
  270. package/src/server/worker/worker.ts +0 -245
  271. package/types/mocha.d.ts +0 -20
package/src/types.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import type { StoryContextForEnhancers, DecoratorFunction } from '@storybook/csf';
2
- import type { IKey } from 'selenium-webdriver/lib/input.js';
3
2
  import type { Worker as ClusterWorker } from 'cluster';
4
- import type { until, WebDriver, WebElementPromise } from 'selenium-webdriver';
5
3
  import type Pixelmatch from 'pixelmatch';
6
- import type { Context } from 'mocha';
4
+ import type { ODiffOptions } from 'odiff-bin';
7
5
  import type { expect } from 'chai';
6
+ import type EventEmitter from 'events';
7
+ import type Logger from 'loglevel';
8
+ // import type { Browser } from 'playwright-core';
8
9
 
9
10
  /* eslint-disable @typescript-eslint/no-explicit-any */
10
11
  export type DiffOptions = typeof Pixelmatch extends (
@@ -80,19 +81,30 @@ export interface CreeveyStory {
80
81
  };
81
82
  }
82
83
 
83
- export interface Capabilities {
84
+ // TODO Rework browser config
85
+ /*
86
+ export class ChromeConfig {
87
+ browserName: 'chrome'
88
+
89
+ constructor({ limit, version, ... })
90
+ }
91
+ */
92
+ export interface BrowserConfigObject {
84
93
  browserName: string;
94
+ /**
95
+ * Browser version. Ignored with Playwright webdriver
96
+ */
85
97
  browserVersion?: string;
86
- platformName?: string;
87
98
  /**
88
- * @deprecated use `browserVersion` instead
99
+ * Operation system name. Ignored with Playwright webdriver
89
100
  */
90
- version?: string;
91
- [prop: string]: unknown;
92
- }
93
-
94
- export type BrowserConfig = Capabilities & {
101
+ platformName?: string;
102
+ // customizeBuilder?: (builder: Builder) => Builder;
95
103
  limit?: number;
104
+ /**
105
+ * Selenium grid url
106
+ * @default config.gridUrl
107
+ */
96
108
  gridUrl?: string;
97
109
  storybookUrl?: string;
98
110
  /**
@@ -102,7 +114,7 @@ export type BrowserConfig = Capabilities & {
102
114
  _storybookGlobals?: StorybookGlobals;
103
115
  /**
104
116
  * Specify custom docker image. Used only with `useDocker == true`
105
- * @default `selenoid/${browserName}:${browserVersion ?? 'latest'}`
117
+ * @default `selenoid/${browserName}:${browserVersion ?? 'latest'}` or `mcr.microsoft.com/playwright:${playwrightVersion}`
106
118
  */
107
119
  dockerImage?: string;
108
120
  /**
@@ -110,12 +122,36 @@ export type BrowserConfig = Capabilities & {
110
122
  * Used only with `useDocker == false`
111
123
  */
112
124
  webdriverCommand?: string[];
125
+ // TODO Check version compatibility
126
+ // playwrightVersion?: string;
127
+ // /**
128
+ // * Use to start standalone playwright browser
129
+ // */
130
+ // playwrightBrowser?: () => Promise<Browser>;
113
131
  viewport?: { width: number; height: number };
114
- };
132
+
133
+ [name: string]: unknown;
134
+ }
115
135
 
116
136
  export type StorybookGlobals = Record<string, unknown>;
117
137
 
118
- export type Browser = boolean | string | BrowserConfig;
138
+ export type BrowserConfig = boolean | string | BrowserConfigObject;
139
+
140
+ export type CreeveyWebdriverConstructor = new (
141
+ browser: string,
142
+ gridUrl: string,
143
+ config: Config,
144
+ options: Options,
145
+ ) => CreeveyWebdriver;
146
+
147
+ export interface CreeveyWebdriver {
148
+ getSessionId(): Promise<string>;
149
+ openBrowser(fresh?: boolean): Promise<CreeveyWebdriver | null>;
150
+ closeBrowser(): Promise<void>;
151
+ loadStoriesFromBrowser(): Promise<StoriesRaw>;
152
+ switchStory(story: StoryInput, context: BaseCreeveyTestContext, logger: Logger.Logger): Promise<CreeveyTestContext>;
153
+ afterTest(test: ServerTest): Promise<void>;
154
+ }
119
155
 
120
156
  export interface HookConfig {
121
157
  before?: () => unknown;
@@ -131,6 +167,9 @@ export interface DockerAuth {
131
167
  serveraddress?: string;
132
168
  }
133
169
 
170
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
171
+ export type BaseReporter = new (runner: EventEmitter, options: { reporterOptions: any }) => void;
172
+
134
173
  export interface Config {
135
174
  /**
136
175
  * Url to Selenium grid hub or standalone selenium.
@@ -156,21 +195,40 @@ export interface Config {
156
195
  * @default path.join(process.cwd(), './report')
157
196
  */
158
197
  reportDir: string;
198
+ /**
199
+ * Specify a custom reporter for test results. Creevey accepts only mocha-like reporters
200
+ * @optional
201
+ */
202
+ reporter: BaseReporter;
203
+ /**
204
+ * Options which are used by reporter
205
+ */
206
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
207
+ reporterOptions?: Record<string, any>;
159
208
  /**
160
209
  * How much test would be retried
161
210
  * @default 0
162
211
  */
163
212
  maxRetries: number;
213
+ /**
214
+ * How much time should be spent on each test
215
+ * @default 30000
216
+ */
217
+ testTimeout: number;
164
218
  /**
165
219
  * Define pixelmatch diff options
166
- * @default { threshold: 0, includeAA: true }
220
+ * @default { threshold: 0.05, includeAA: false }
167
221
  */
168
222
  diffOptions: DiffOptions;
223
+ /**
224
+ *
225
+ */
226
+ odiffOptions: ODiffOptions; // TODO Update description
169
227
  /**
170
228
  * Browser capabilities
171
229
  * @default { chrome: true }
172
230
  */
173
- browsers: Record<string, Browser>;
231
+ browsers: Record<string, BrowserConfig>;
174
232
  /**
175
233
  * Hooks that allow run custom script before and after creevey start
176
234
  */
@@ -204,11 +262,11 @@ export interface Config {
204
262
  * }
205
263
  * ```
206
264
  */
207
- storiesProvider: StoriesProvider;
265
+ storiesProvider: StoriesProvider; // TODO Update description
208
266
  /**
209
- * Define custom babel options for load stories transformation
267
+ *
210
268
  */
211
- babelOptions: (options: Record<string, unknown>) => Record<string, unknown>;
269
+ webdriver: CreeveyWebdriverConstructor; // TODO Update description
212
270
  /**
213
271
  * Allows you to start selenoid without docker
214
272
  * and use standalone browsers
@@ -240,7 +298,6 @@ export interface Config {
240
298
  dockerImagePlatform: string;
241
299
  testsRegex?: RegExp;
242
300
  testsDir?: string;
243
- tsConfig?: string;
244
301
  /**
245
302
  * Telemetry contains information about Creevey and Storybook versions, used Creevey config, browsers and tests meta.
246
303
  * It's being sent only for projects from git.skbkontur.ru
@@ -249,9 +306,12 @@ export interface Config {
249
306
  disableTelemetry?: boolean;
250
307
  }
251
308
 
252
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
253
- export interface StoriesProvider<T = any> {
254
- (config: Config, options: T, storiesListener: (stories: Map<string, StoryInput[]>) => void): Promise<StoriesRaw>;
309
+ export interface StoriesProvider {
310
+ (
311
+ config: Config,
312
+ storiesListener: (stories: Map<string, StoryInput[]>) => void,
313
+ webdriver?: CreeveyWebdriver,
314
+ ): Promise<StoriesRaw>;
255
315
  providerName?: string;
256
316
  }
257
317
 
@@ -265,17 +325,25 @@ export interface Options {
265
325
  update: boolean | string;
266
326
  debug: boolean;
267
327
  trace: boolean;
268
- tests: boolean;
269
328
  browser?: string;
329
+ /**
330
+ * @deprecated use {@link Config.reporter} instead
331
+ */
270
332
  reporter?: string;
271
333
  screenDir?: string;
272
334
  reportDir?: string;
335
+ gridUrl?: string;
273
336
  storybookUrl?: string;
274
- saveReport: boolean;
275
337
  failFast?: boolean;
338
+ odiff?: boolean;
276
339
  }
277
340
 
278
- export type WorkerMessage = { type: 'ready'; payload?: never } | { type: 'error'; payload: { error: string } };
341
+ export type WorkerError = 'browser' | 'test' | 'unknown';
342
+
343
+ export type WorkerMessage =
344
+ | { type: 'ready'; payload?: never }
345
+ | { type: 'port'; payload: { port: number } }
346
+ | { type: 'error'; payload: { subtype: WorkerError; error: string } };
279
347
 
280
348
  export type StoriesMessage =
281
349
  | { type: 'get'; payload?: never }
@@ -287,29 +355,17 @@ export type TestMessage =
287
355
  | { type: 'start'; payload: { id: string; path: string[]; retries: number } }
288
356
  | { type: 'end'; payload: TestResult };
289
357
 
290
- export type WebpackMessage =
291
- | { type: 'success'; payload?: never }
292
- | { type: 'fail'; payload?: never }
293
- | { type: 'rebuild succeeded'; payload?: never }
294
- | { type: 'rebuild failed'; payload?: never };
295
-
296
- export type DockerMessage = { type: 'start'; payload?: never } | { type: 'success'; payload: { gridUrl: string } };
297
-
298
358
  export type ShutdownMessage = object;
299
359
 
300
360
  export type ProcessMessage =
301
361
  | (WorkerMessage & { scope: 'worker' })
302
362
  | (StoriesMessage & { scope: 'stories' })
303
363
  | (TestMessage & { scope: 'test' })
304
- | (WebpackMessage & { scope: 'webpack' })
305
- | (DockerMessage & { scope: 'docker' })
306
364
  | (ShutdownMessage & { scope: 'shutdown' });
307
365
 
308
366
  export type WorkerHandler = (message: WorkerMessage) => void;
309
367
  export type StoriesHandler = (message: StoriesMessage) => void;
310
368
  export type TestHandler = (message: TestMessage) => void;
311
- export type WebpackHandler = (message: WebpackMessage) => void;
312
- export type DockerHandler = (message: DockerMessage) => void;
313
369
  export type ShutdownHandler = (message: ShutdownMessage) => void;
314
370
 
315
371
  export interface Worker extends ClusterWorker {
@@ -334,8 +390,8 @@ export interface TestResult {
334
390
  error?: string;
335
391
  }
336
392
 
337
- export interface ImagesError extends Error {
338
- images: string | Partial<Record<string, string>>;
393
+ export class ImagesError extends Error {
394
+ images?: string | Partial<Record<string, string>>;
339
395
  }
340
396
 
341
397
  export interface TestMeta {
@@ -354,9 +410,65 @@ export interface TestData extends TestMeta {
354
410
  approved?: Partial<Record<string, number>> | null;
355
411
  }
356
412
 
413
+ export interface BaseCreeveyTestContext {
414
+ browserName: string;
415
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
416
+ webdriver: any;
417
+ /**
418
+ * @deprecated Usually for screenshot testing you don't need other type of assertions except matching images, but if you really need it, please use external `expect` libs
419
+ */
420
+ expect: typeof expect;
421
+ /**
422
+ * @internal
423
+ */
424
+ screenshots: { imageName?: string; screenshot: Buffer }[];
425
+ matchImage: (image: Buffer, imageName?: string) => Promise<void>;
426
+ matchImages: (images: Record<string, Buffer>) => Promise<void>;
427
+ }
428
+
429
+ export interface CreeveyTestContext extends BaseCreeveyTestContext {
430
+ takeScreenshot: () => Promise<Buffer>;
431
+ updateStoryArgs: (updatedArgs: Record<string, unknown>) => Promise<void>;
432
+ captureElement: string | null;
433
+ }
434
+
435
+ export enum TEST_EVENTS {
436
+ RUN_BEGIN = 'start',
437
+ RUN_END = 'end',
438
+ TEST_BEGIN = 'test',
439
+ TEST_END = 'test end',
440
+ TEST_FAIL = 'fail',
441
+ TEST_PASS = 'pass',
442
+ }
443
+
357
444
  export interface ServerTest extends TestData {
358
445
  story: StoryInput;
359
- fn: (this: Context) => Promise<void>;
446
+ fn: CreeveyTestFunction;
447
+ }
448
+
449
+ export interface FakeSuite {
450
+ title: string;
451
+ fullTitle: () => string;
452
+ titlePath: () => string[];
453
+ tests: FakeTest[];
454
+ }
455
+
456
+ // NOTE: Mocha-like test interface, used specifically for reporting
457
+ export interface FakeTest {
458
+ parent: FakeSuite;
459
+ title: string;
460
+ fullTitle: () => string;
461
+ titlePath: () => string[];
462
+ currentRetry: () => number;
463
+ retires: () => number;
464
+ slow: () => number;
465
+ duration?: number;
466
+ state?: 'failed' | 'passed';
467
+ // NOTE > duration, > duration / 2, > 0
468
+ speed?: 'slow' | 'medium' | 'fast';
469
+ err?: unknown;
470
+ // NOTE: image files
471
+ attachments?: string[];
360
472
  }
361
473
 
362
474
  export interface CreeveyStatus {
@@ -381,17 +493,7 @@ export interface SkipOption {
381
493
 
382
494
  export type SkipOptions = boolean | string | Record<string, SkipOption | SkipOption[]>;
383
495
 
384
- export interface CreeveyTestController {
385
- browser: WebDriver;
386
- until: typeof until;
387
- keys: IKey;
388
- expect: typeof expect;
389
- takeScreenshot: () => Promise<string>;
390
- updateStoryArgs: (updatedArgs: Record<string, unknown>) => Promise<void>;
391
- readonly captureElement?: WebElementPromise;
392
- }
393
-
394
- export type CreeveyTestFunction = (this: CreeveyTestController) => Promise<void>;
496
+ export type CreeveyTestFunction = (context: CreeveyTestContext) => Promise<void>;
395
497
 
396
498
  export interface CaptureOptions {
397
499
  imageName?: string;
@@ -474,7 +576,7 @@ export function isFunction(x: unknown): x is (...args: any[]) => any {
474
576
  }
475
577
 
476
578
  export function isImageError(error: unknown): error is ImagesError {
477
- return error instanceof Error && 'images' in error;
579
+ return error instanceof ImagesError && 'images' in error;
478
580
  }
479
581
 
480
582
  export function isProcessMessage(message: unknown): message is ProcessMessage {
@@ -492,11 +594,3 @@ export function isStoriesMessage(message: unknown): message is StoriesMessage {
492
594
  export function isTestMessage(message: unknown): message is TestMessage {
493
595
  return isProcessMessage(message) && message.scope == 'test';
494
596
  }
495
-
496
- export function isWebpackMessage(message: unknown): message is WebpackMessage {
497
- return isProcessMessage(message) && message.scope == 'webpack';
498
- }
499
-
500
- export function isDockerMessage(message: unknown): message is DockerMessage {
501
- return isProcessMessage(message) && message.scope == 'docker';
502
- }
@@ -0,0 +1,7 @@
1
+ import { Page } from 'playwright-core';
2
+
3
+ declare module 'creevey' {
4
+ interface CreeveyTestContext {
5
+ webdriver: Page;
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ import { WebDriver } from 'selenium-webdriver';
2
+
3
+ declare module 'creevey' {
4
+ interface CreeveyTestContext {
5
+ webdriver: WebDriver;
6
+ }
7
+ }
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkcreevey=self.webpackChunkcreevey||[]).push([[202],{47202:(e,t,i)=>{i.r(t),i.d(t,{WithToolTipState:()=>o.vb,WithTooltip:()=>o.vb,WithTooltipPure:()=>o.o4});var o=i(31461)}}]);