creevey 0.9.0-beta.13 → 0.9.0-beta.15

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 (216) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/.yarnrc.yml +1 -0
  3. package/lib/cjs/cli.js +1 -0
  4. package/lib/cjs/client/addon/Manager.js +151 -223
  5. package/lib/cjs/client/addon/components/Addon.js +2 -9
  6. package/lib/cjs/client/addon/components/Icons.js +1 -7
  7. package/lib/cjs/client/addon/components/Panel.js +5 -18
  8. package/lib/cjs/client/addon/components/TestSelect.js +12 -25
  9. package/lib/cjs/client/addon/components/Tools.js +17 -28
  10. package/lib/cjs/client/addon/decorator.js +1 -4
  11. package/lib/cjs/client/addon/index.js +0 -4
  12. package/lib/cjs/client/addon/preset.js +3 -12
  13. package/lib/cjs/client/addon/preview.js +1 -4
  14. package/lib/cjs/client/addon/readyForCapture.js +1 -4
  15. package/lib/cjs/client/addon/register.js +11 -26
  16. package/lib/cjs/client/addon/utils.js +1 -9
  17. package/lib/cjs/client/addon/withCreevey.js +55 -134
  18. package/lib/cjs/client/shared/components/ImagesView/BlendView.js +5 -17
  19. package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +8 -24
  20. package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +8 -23
  21. package/lib/cjs/client/shared/components/ImagesView/SlideView.js +7 -22
  22. package/lib/cjs/client/shared/components/ImagesView/SwapView.js +5 -17
  23. package/lib/cjs/client/shared/components/ImagesView/index.js +0 -5
  24. package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +1 -8
  25. package/lib/cjs/client/shared/components/PageFooter/Paging.js +2 -19
  26. package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +21 -17
  27. package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +5 -24
  28. package/lib/cjs/client/shared/components/ResultsPage.js +11 -38
  29. package/lib/cjs/client/shared/creeveyClientApi.js +3 -13
  30. package/lib/cjs/client/shared/helpers.js +21 -75
  31. package/lib/cjs/client/shared/viewMode.js +2 -6
  32. package/lib/cjs/client/web/192.js +1 -0
  33. package/lib/cjs/client/web/632.js +43 -0
  34. package/lib/cjs/client/web/794.js +1 -0
  35. package/lib/cjs/client/web/main.js +78 -1
  36. package/lib/cjs/client/web/main.js.LICENSE.txt +0 -15
  37. package/lib/cjs/creevey.js +5 -21
  38. package/lib/cjs/index.js +0 -15
  39. package/lib/cjs/server/config.js +13 -33
  40. package/lib/cjs/server/docker.js +5 -27
  41. package/lib/cjs/server/index.js +8 -33
  42. package/lib/cjs/server/logger.js +5 -19
  43. package/lib/cjs/server/master/api.js +1 -14
  44. package/lib/cjs/server/master/index.js +16 -46
  45. package/lib/cjs/server/master/master.js +6 -21
  46. package/lib/cjs/server/master/pool.js +3 -38
  47. package/lib/cjs/server/master/runner.js +15 -42
  48. package/lib/cjs/server/master/server.js +6 -27
  49. package/lib/cjs/server/messages.js +7 -53
  50. package/lib/cjs/server/selenium/browser.js +53 -137
  51. package/lib/cjs/server/selenium/index.js +0 -4
  52. package/lib/cjs/server/selenium/selenoid.js +7 -33
  53. package/lib/cjs/server/stories.js +25 -30
  54. package/lib/cjs/server/storybook/providers/browser.js +5 -18
  55. package/lib/cjs/server/storybook/providers/hybrid.js +9 -29
  56. package/lib/cjs/server/testsFiles/parser.js +3 -19
  57. package/lib/cjs/server/testsFiles/register.js +7 -9
  58. package/lib/cjs/server/update.js +3 -20
  59. package/lib/cjs/server/utils.js +9 -41
  60. package/lib/cjs/server/worker/chai-image.js +1 -27
  61. package/lib/cjs/server/worker/helpers.js +2 -12
  62. package/lib/cjs/server/worker/index.js +1 -3
  63. package/lib/cjs/server/worker/reporter.js +8 -24
  64. package/lib/cjs/server/worker/worker.js +5 -49
  65. package/lib/cjs/shared/index.js +22 -36
  66. package/lib/cjs/shared/serializeRegExp.js +0 -8
  67. package/lib/cjs/types.js +4 -14
  68. package/lib/esm/cli.js +1 -1
  69. package/lib/esm/client/addon/Manager.js +151 -214
  70. package/lib/esm/client/addon/components/Panel.js +4 -6
  71. package/lib/esm/client/addon/components/TestSelect.js +11 -17
  72. package/lib/esm/client/addon/components/Tools.js +15 -14
  73. package/lib/esm/client/addon/preset.js +2 -8
  74. package/lib/esm/client/addon/readyForCapture.js +1 -3
  75. package/lib/esm/client/addon/register.js +6 -8
  76. package/lib/esm/client/addon/utils.js +0 -5
  77. package/lib/esm/client/addon/withCreevey.js +54 -116
  78. package/lib/esm/client/shared/components/ImagesView/BlendView.js +1 -1
  79. package/lib/esm/client/shared/components/ImagesView/ImagesView.js +6 -8
  80. package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +4 -4
  81. package/lib/esm/client/shared/components/ImagesView/SlideView.js +3 -3
  82. package/lib/esm/client/shared/components/ImagesView/SwapView.js +1 -1
  83. package/lib/esm/client/shared/components/PageFooter/Paging.js +1 -11
  84. package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +18 -7
  85. package/lib/esm/client/shared/components/PageHeader/PageHeader.js +3 -8
  86. package/lib/esm/client/shared/components/ResultsPage.js +8 -16
  87. package/lib/esm/client/shared/creeveyClientApi.js +3 -10
  88. package/lib/esm/client/shared/helpers.js +21 -47
  89. package/lib/esm/client/web/192.js +1 -0
  90. package/lib/esm/client/web/632.js +43 -0
  91. package/lib/esm/client/web/794.js +1 -0
  92. package/lib/esm/client/web/index.html +19 -0
  93. package/lib/esm/client/web/main.js +79 -0
  94. package/lib/esm/client/web/main.js.LICENSE.txt +34 -0
  95. package/lib/esm/creevey.js +4 -8
  96. package/lib/esm/index.js +0 -1
  97. package/lib/esm/server/config.js +7 -14
  98. package/lib/esm/server/docker.js +4 -12
  99. package/lib/esm/server/index.js +7 -21
  100. package/lib/esm/server/logger.js +0 -1
  101. package/lib/esm/server/master/api.js +0 -9
  102. package/lib/esm/server/master/index.js +16 -32
  103. package/lib/esm/server/master/master.js +2 -7
  104. package/lib/esm/server/master/pool.js +1 -24
  105. package/lib/esm/server/master/runner.js +14 -27
  106. package/lib/esm/server/master/server.js +5 -9
  107. package/lib/esm/server/messages.js +6 -38
  108. package/lib/esm/server/selenium/browser.js +52 -115
  109. package/lib/esm/server/selenium/selenoid.js +6 -17
  110. package/lib/esm/server/stories.js +24 -20
  111. package/lib/esm/server/storybook/providers/browser.js +4 -8
  112. package/lib/esm/server/storybook/providers/hybrid.js +6 -14
  113. package/lib/esm/server/testsFiles/parser.js +0 -6
  114. package/lib/esm/server/testsFiles/register.js +5 -2
  115. package/lib/esm/server/update.js +0 -8
  116. package/lib/esm/server/utils.js +3 -11
  117. package/lib/esm/server/worker/chai-image.js +0 -21
  118. package/lib/esm/server/worker/helpers.js +2 -9
  119. package/lib/esm/server/worker/reporter.js +7 -10
  120. package/lib/esm/server/worker/worker.js +4 -25
  121. package/lib/esm/shared/index.js +24 -25
  122. package/lib/esm/types.js +4 -1
  123. package/lib/types/client/addon/Manager.d.ts +1 -1
  124. package/lib/types/client/addon/components/Addon.d.ts +1 -0
  125. package/lib/types/client/addon/components/Icons.d.ts +1 -0
  126. package/lib/types/client/addon/components/Panel.d.ts +1 -0
  127. package/lib/types/client/addon/components/TestSelect.d.ts +1 -0
  128. package/lib/types/client/addon/components/Tools.d.ts +1 -0
  129. package/lib/types/client/addon/decorator.d.ts +1 -1
  130. package/lib/types/client/addon/preset.d.ts +2 -2
  131. package/lib/types/client/addon/preview.d.ts +1 -1
  132. package/lib/types/client/addon/withCreevey.d.ts +3 -2
  133. package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -1
  134. package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +1 -0
  135. package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -1
  136. package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -1
  137. package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -1
  138. package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +1 -0
  139. package/lib/types/client/shared/components/PageFooter/Paging.d.ts +1 -0
  140. package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +3 -1
  141. package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +1 -0
  142. package/lib/types/client/shared/components/ResultsPage.d.ts +3 -1
  143. package/lib/types/client/web/CreeveyApp.d.ts +1 -0
  144. package/lib/types/client/web/CreeveyLoader.d.ts +2 -1
  145. package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +6 -3
  146. package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +1 -0
  147. package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +1 -0
  148. package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +19 -14
  149. package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +1 -0
  150. package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +3 -1
  151. package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +3 -1
  152. package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +1 -0
  153. package/lib/types/shared/index.d.ts +1 -1
  154. package/lib/types/types.d.ts +7 -28
  155. package/package.json +61 -79
  156. package/lib/cjs/client/addon/preset.ie11.js +0 -74
  157. package/lib/cjs/client/addon/preset.sb7.js +0 -19
  158. package/lib/cjs/client/web/142.js +0 -2
  159. package/lib/cjs/client/web/142.js.LICENSE.txt +0 -12
  160. package/lib/cjs/client/web/32.js +0 -1
  161. package/lib/cjs/client/web/551.js +0 -1
  162. package/lib/cjs/client/web/566.js +0 -2
  163. package/lib/cjs/client/web/566.js.LICENSE.txt +0 -31
  164. package/lib/cjs/client/web/691.js +0 -2
  165. package/lib/cjs/client/web/691.js.LICENSE.txt +0 -8
  166. package/lib/cjs/client/web/725.js +0 -1
  167. package/lib/cjs/server/extract.js +0 -46
  168. package/lib/cjs/server/loaders/babel/creevey-plugin.js +0 -86
  169. package/lib/cjs/server/loaders/babel/helpers.js +0 -469
  170. package/lib/cjs/server/loaders/babel/register.js +0 -124
  171. package/lib/cjs/server/loaders/hooks/mdx.js +0 -30
  172. package/lib/cjs/server/loaders/hooks/svelte.js +0 -65
  173. package/lib/cjs/server/loaders/webpack/compile.js +0 -269
  174. package/lib/cjs/server/loaders/webpack/creevey-loader.js +0 -172
  175. package/lib/cjs/server/loaders/webpack/dummy-hmr.js +0 -39
  176. package/lib/cjs/server/loaders/webpack/mdx-loader.js +0 -72
  177. package/lib/cjs/server/loaders/webpack/start.js +0 -41
  178. package/lib/cjs/server/storybook/entry.js +0 -53
  179. package/lib/cjs/server/storybook/helpers.js +0 -158
  180. package/lib/cjs/server/storybook/providers/nodejs.js +0 -239
  181. package/lib/esm/client/addon/preset.ie11.js +0 -59
  182. package/lib/esm/client/addon/preset.sb7.js +0 -8
  183. package/lib/esm/server/extract.js +0 -32
  184. package/lib/esm/server/loaders/babel/creevey-plugin.js +0 -72
  185. package/lib/esm/server/loaders/babel/helpers.js +0 -452
  186. package/lib/esm/server/loaders/babel/register.js +0 -103
  187. package/lib/esm/server/loaders/hooks/mdx.js +0 -15
  188. package/lib/esm/server/loaders/hooks/svelte.js +0 -49
  189. package/lib/esm/server/loaders/webpack/compile.js +0 -246
  190. package/lib/esm/server/loaders/webpack/creevey-loader.js +0 -152
  191. package/lib/esm/server/loaders/webpack/dummy-hmr.js +0 -32
  192. package/lib/esm/server/loaders/webpack/mdx-loader.js +0 -58
  193. package/lib/esm/server/loaders/webpack/start.js +0 -27
  194. package/lib/esm/server/storybook/entry.js +0 -27
  195. package/lib/esm/server/storybook/helpers.js +0 -97
  196. package/lib/esm/server/storybook/providers/nodejs.js +0 -216
  197. package/lib/types/client/addon/preset.ie11.d.ts +0 -10
  198. package/lib/types/client/addon/preset.sb7.d.ts +0 -2
  199. package/lib/types/server/extract.d.ts +0 -2
  200. package/lib/types/server/loaders/babel/creevey-plugin.d.ts +0 -1
  201. package/lib/types/server/loaders/babel/helpers.d.ts +0 -19
  202. package/lib/types/server/loaders/babel/register.d.ts +0 -5
  203. package/lib/types/server/loaders/hooks/mdx.d.ts +0 -1
  204. package/lib/types/server/loaders/hooks/svelte.d.ts +0 -1
  205. package/lib/types/server/loaders/webpack/compile.d.ts +0 -2
  206. package/lib/types/server/loaders/webpack/creevey-loader.d.ts +0 -4
  207. package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +0 -10
  208. package/lib/types/server/loaders/webpack/mdx-loader.d.ts +0 -6
  209. package/lib/types/server/loaders/webpack/start.d.ts +0 -1
  210. package/lib/types/server/storybook/entry.d.ts +0 -17
  211. package/lib/types/server/storybook/helpers.d.ts +0 -24
  212. package/lib/types/server/storybook/providers/nodejs.d.ts +0 -9
  213. package/preset/ie11.js +0 -5
  214. package/preset/index.js +0 -9
  215. package/preset/sb7.js +0 -5
  216. package/types/mdx.d.ts +0 -7
@@ -17,7 +17,6 @@ const readdirAsync = promisify(fs.readdir);
17
17
  const readFileAsync = promisify(fs.readFile);
18
18
  const writeFileAsync = promisify(fs.writeFile);
19
19
  const mkdirAsync = promisify(fs.mkdir);
20
-
21
20
  async function getStat(filePath) {
22
21
  try {
23
22
  return await statAsync(filePath);
@@ -25,31 +24,26 @@ async function getStat(filePath) {
25
24
  if (typeof error == 'object' && error && error.code === 'ENOENT') {
26
25
  return null;
27
26
  }
28
-
29
27
  throw error;
30
28
  }
31
29
  }
32
-
33
30
  async function getLastImageNumber(imageDir, imageName) {
34
31
  const actualImagesRegexp = new RegExp(`${imageName}-actual-(\\d+)\\.png`);
35
-
36
32
  try {
37
33
  return (await readdirAsync(imageDir)).map(filename => filename.replace(actualImagesRegexp, '$1')).map(Number).filter(x => !isNaN(x)).sort((a, b) => b - a)[0] ?? 0;
38
34
  } catch (_error) {
39
35
  return 0;
40
36
  }
41
- } // FIXME browser options hotfix
42
-
37
+ }
43
38
 
39
+ // FIXME browser options hotfix
44
40
  export default async function worker(config, options) {
45
41
  var _await$browser$getSes;
46
-
47
42
  let retries = 0;
48
43
  let images = {};
49
44
  let error = undefined;
50
45
  const screenshots = [];
51
46
  const testScope = [];
52
-
53
47
  function runHandler(failures) {
54
48
  if (failures > 0 && (error || Object.values(images).some(image => (image === null || image === void 0 ? void 0 : image.error) != null))) {
55
49
  const isTimeout = hasTimeout(error) || Object.values(images).some(image => hasTimeout(image === null || image === void 0 ? void 0 : image.error));
@@ -77,12 +71,10 @@ export default async function worker(config, options) {
77
71
  });
78
72
  }
79
73
  }
80
-
81
74
  async function saveImages(imageDir, images) {
82
75
  await mkdirAsync(imageDir, {
83
76
  recursive: true
84
77
  });
85
-
86
78
  for (const {
87
79
  name,
88
80
  data
@@ -90,7 +82,6 @@ export default async function worker(config, options) {
90
82
  await writeFileAsync(path.join(imageDir, name), data);
91
83
  }
92
84
  }
93
-
94
85
  async function getExpected(assertImageName) {
95
86
  // context => [kind, story, test, browser]
96
87
  // rootSuite -> kindSuite -> storyTest -> [browsers.png]
@@ -104,13 +95,11 @@ export default async function worker(config, options) {
104
95
  const image = images[imageName] = images[imageName] ?? {
105
96
  actual: actualImageName
106
97
  };
107
-
108
98
  const onCompare = async (actual, expect, diff) => {
109
99
  imagesMeta.push({
110
100
  name: image.actual,
111
101
  data: actual
112
102
  });
113
-
114
103
  if (diff && expect) {
115
104
  image.expect = `${imageName}-expect-${imageNumber}.png`;
116
105
  image.diff = `${imageName}-diff-${imageNumber}.png`;
@@ -123,12 +112,10 @@ export default async function worker(config, options) {
123
112
  data: diff
124
113
  });
125
114
  }
126
-
127
115
  if (options.saveReport) {
128
116
  await saveImages(reportImageDir, imagesMeta);
129
117
  }
130
118
  };
131
-
132
119
  const expectImageDir = path.join(config.screenDir, ...testPath);
133
120
  const expectImageStat = await getStat(path.join(expectImageDir, `${imageName}.png`));
134
121
  if (!expectImageStat) return {
@@ -141,26 +128,21 @@ export default async function worker(config, options) {
141
128
  onCompare
142
129
  };
143
130
  }
144
-
145
131
  const mochaOptions = {
146
132
  timeout: 30000,
147
133
  reporter: process.env.TEAMCITY_VERSION ? TeamcityReporter : options.reporter || CreeveyReporter,
148
134
  reporterOptions: {
149
135
  reportDir: config.reportDir,
150
136
  topLevelSuite: options.browser,
151
-
152
137
  get willRetry() {
153
138
  return retries < config.maxRetries;
154
139
  },
155
-
156
140
  get images() {
157
141
  return images;
158
142
  },
159
-
160
143
  get sessionId() {
161
144
  return sessionId;
162
145
  }
163
-
164
146
  }
165
147
  };
166
148
  const mocha = new Mocha(mochaOptions);
@@ -173,15 +155,12 @@ export default async function worker(config, options) {
173
155
  debug: options.debug,
174
156
  port: options.port
175
157
  });
176
-
177
158
  try {
178
159
  var _await$getBrowser;
179
-
180
160
  await ((_await$getBrowser = await getBrowser(config, options)) === null || _await$getBrowser === void 0 ? void 0 : _await$getBrowser.getCurrentUrl());
181
161
  } catch (_) {
182
162
  await closeBrowser();
183
163
  }
184
-
185
164
  const browser = await getBrowser(config, options);
186
165
  const sessionId = (_await$browser$getSes = await (browser === null || browser === void 0 ? void 0 : browser.getSession())) === null || _await$browser$getSes === void 0 ? void 0 : _await$browser$getSes.getId();
187
166
  if (browser == null) return;
@@ -208,8 +187,9 @@ export default async function worker(config, options) {
208
187
  error = undefined;
209
188
  retries = test.retries;
210
189
  mocha.grep(new RegExp(`^${testPath}$`));
211
- const runner = mocha.run(runHandler); // TODO How handle browser corruption?
190
+ const runner = mocha.run(runHandler);
212
191
 
192
+ // TODO How handle browser corruption?
213
193
  runner.on('fail', (_test, reason) => {
214
194
  if (!(reason instanceof Error)) {
215
195
  error = reason;
@@ -232,7 +212,6 @@ export default async function worker(config, options) {
232
212
  type: 'ready'
233
213
  });
234
214
  }
235
-
236
215
  function hasTimeout(str) {
237
216
  return str != null && str.toLowerCase().includes('timeout');
238
217
  }
@@ -1,54 +1,53 @@
1
1
  import { mapValues, mergeWith, cloneDeepWith } from 'lodash';
2
- import { deserializeRegExp, isSerializedRegExp, isRegExp, serializeRegExp } from './serializeRegExp'; // NOTE: Copy-paste from storybook/api
2
+ import { deserializeRegExp, isSerializedRegExp, isRegExp, serializeRegExp } from './serializeRegExp';
3
3
 
4
+ // NOTE: Copy-paste from storybook/api
4
5
  export const combineParameters = function () {
5
6
  for (var _len = arguments.length, parameterSets = new Array(_len), _key = 0; _key < _len; _key++) {
6
7
  parameterSets[_key] = arguments[_key];
7
8
  }
8
-
9
- return (// eslint-disable-next-line @typescript-eslint/no-unsafe-return
9
+ return (
10
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
10
11
  mergeWith({}, ...parameterSets, (_, srcValue) => {
11
12
  // Treat arrays as scalars:
12
13
  if (Array.isArray(srcValue)) return srcValue;
13
14
  return undefined;
14
15
  })
15
16
  );
16
- }; // NOTE: Copy-paste from storybook/api
17
+ };
17
18
 
19
+ // NOTE: Copy-paste from storybook/api
18
20
  export const denormalizeStoryParameters = _ref => {
19
21
  let {
20
22
  globalParameters,
21
23
  kindParameters,
22
24
  stories
23
25
  } = _ref;
24
- return mapValues(stories, storyData => {
25
- var _kindParameters$story;
26
-
27
- return { ...storyData,
28
- parameters: combineParameters(globalParameters, (_kindParameters$story = kindParameters[storyData.kind]) !== null && _kindParameters$story !== void 0 ? _kindParameters$story : {}, storyData.parameters)
29
- };
30
- });
26
+ return mapValues(stories, storyData => ({
27
+ ...storyData,
28
+ parameters: combineParameters(globalParameters, kindParameters[storyData.kind] ?? {}, storyData.parameters)
29
+ }));
31
30
  };
32
31
  export const serializeRawStories = stories => {
33
32
  return mapValues(stories, storyData => {
34
33
  const creevey = storyData.parameters.creevey;
35
-
36
- if (creevey !== null && creevey !== void 0 && creevey.skip) {
37
- return { ...storyData,
38
- parameters: { ...storyData.parameters,
39
- creevey: { ...creevey,
34
+ if (creevey?.skip) {
35
+ return {
36
+ ...storyData,
37
+ parameters: {
38
+ ...storyData.parameters,
39
+ creevey: {
40
+ ...creevey,
40
41
  skip: cloneDeepWith(creevey.skip, value => {
41
42
  if (isRegExp(value)) {
42
43
  return serializeRegExp(value);
43
44
  }
44
-
45
45
  return undefined;
46
46
  })
47
47
  }
48
48
  }
49
49
  };
50
50
  }
51
-
52
51
  return storyData;
53
52
  });
54
53
  };
@@ -57,22 +56,22 @@ export const deserializeRawStories = stories => {
57
56
  };
58
57
  export const deserializeStory = story => {
59
58
  const creevey = story.parameters.creevey;
60
-
61
- if (creevey !== null && creevey !== void 0 && creevey.skip) {
62
- return { ...story,
63
- parameters: { ...story.parameters,
64
- creevey: { ...creevey,
59
+ if (creevey?.skip) {
60
+ return {
61
+ ...story,
62
+ parameters: {
63
+ ...story.parameters,
64
+ creevey: {
65
+ ...creevey,
65
66
  skip: cloneDeepWith(creevey.skip, value => {
66
67
  if (isSerializedRegExp(value)) {
67
68
  return deserializeRegExp(value);
68
69
  }
69
-
70
70
  return undefined;
71
71
  })
72
72
  }
73
73
  }
74
74
  };
75
75
  }
76
-
77
76
  return story;
78
77
  };
package/lib/esm/types.js CHANGED
@@ -1,7 +1,9 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
 
3
3
  /* eslint-enable @typescript-eslint/no-explicit-any */
4
+
4
5
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+
5
7
  export function noop() {
6
8
  /* noop */
7
9
  }
@@ -16,8 +18,9 @@ export function isObject(x) {
16
18
  }
17
19
  export function isString(x) {
18
20
  return typeof x == 'string';
19
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ }
20
22
 
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
24
  export function isFunction(x) {
22
25
  return typeof x == 'function';
23
26
  }
@@ -32,6 +32,6 @@ export declare class CreeveyManager {
32
32
  getTestsByStoryIdAndBrowser: (browser: string) => TestData[];
33
33
  getTabTitle: (browser: string) => string;
34
34
  setPanelsTitle: () => void;
35
- addStatusesToSideBar(): Promise<void>;
35
+ addStatusesToSideBar(): void;
36
36
  addStatusToStoryName(name: string, status: TestStatus | undefined, skip: string | boolean): string;
37
37
  }
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { CreeveyManager } from '../Manager';
2
3
  interface AddonProps {
3
4
  active?: boolean;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  interface IconProps {
2
3
  width?: number;
3
4
  height?: number;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { TestData } from '../../../types';
2
3
  interface PanelProps {
3
4
  tests: TestData[];
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { TestData } from '../../../types';
2
3
  interface TestSelectProps {
3
4
  tests: TestData[];
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { CreeveyManager } from '../Manager';
2
3
  interface ToolsProps {
3
4
  manager: CreeveyManager;
@@ -1 +1 @@
1
- export declare const decorators: import("@storybook/addons").MakeDecoratorResult[];
1
+ export declare const decorators: import("@storybook/preview-api/dist/addons").MakeDecoratorResult[];
@@ -1,2 +1,2 @@
1
- export declare function config(entry?: string[]): string[];
2
- export declare function managerEntries(entry?: string[]): string[];
1
+ export declare const previewAnnotations: string[];
2
+ export declare const managerEntries: string[];
@@ -1,4 +1,4 @@
1
1
  declare const preview: {
2
- decorators: import("@storybook/addons").MakeDecoratorResult[];
2
+ decorators: import("@storybook/preview-api/dist/addons").MakeDecoratorResult[];
3
3
  };
4
4
  export default preview;
@@ -1,7 +1,8 @@
1
1
  import type { PreviewWeb } from '@storybook/preview-web';
2
2
  import type { AnyFramework } from '@storybook/csf';
3
3
  import type { StoryStore } from '@storybook/client-api';
4
- import { MakeDecoratorResult, Channel } from '@storybook/addons';
4
+ import { makeDecorator } from '@storybook/preview-api';
5
+ import { Channel } from '@storybook/channels';
5
6
  import { CaptureOptions, StoriesRaw, StorybookGlobals } from '../../types';
6
7
  declare global {
7
8
  interface Window {
@@ -20,5 +21,5 @@ declare global {
20
21
  __STORYBOOK_PREVIEW__: PreviewWeb<AnyFramework>;
21
22
  }
22
23
  }
23
- export declare function withCreevey(): MakeDecoratorResult;
24
+ export declare function withCreevey(): ReturnType<typeof makeDecorator>;
24
25
  export declare function capture(options?: CaptureOptions): Promise<void>;
@@ -1,3 +1,5 @@
1
1
  import React from 'react';
2
2
  import { ViewPropsWithTheme } from './ImagesView';
3
- export declare const BlendView: React.FC<import("@storybook/theming").AddOptionalTo<ViewPropsWithTheme, "theme">>;
3
+ export declare const BlendView: React.FC<Pick<ViewPropsWithTheme, "diff" | "actual" | "expect"> & {
4
+ theme?: import("@storybook/theming").Theme | undefined;
5
+ }>;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { Images, ImagesViewMode } from '../../../../types';
2
3
  import { Theme } from '@storybook/theming';
3
4
  export declare const themeBorderColors: {
@@ -1,3 +1,5 @@
1
1
  import React from 'react';
2
2
  import { ViewPropsWithTheme } from './ImagesView';
3
- export declare const SideBySideView: React.FC<import("@storybook/theming").AddOptionalTo<ViewPropsWithTheme, "theme">>;
3
+ export declare const SideBySideView: React.FC<Pick<ViewPropsWithTheme, "diff" | "actual" | "expect"> & {
4
+ theme?: import("@storybook/theming").Theme | undefined;
5
+ }>;
@@ -1,3 +1,5 @@
1
1
  import React from 'react';
2
2
  import { ViewPropsWithTheme } from './ImagesView';
3
- export declare const SlideView: React.FC<import("@storybook/theming").AddOptionalTo<ViewPropsWithTheme, "theme">>;
3
+ export declare const SlideView: React.FC<Pick<ViewPropsWithTheme, "diff" | "actual" | "expect"> & {
4
+ theme?: import("@storybook/theming").Theme | undefined;
5
+ }>;
@@ -1,3 +1,5 @@
1
1
  import React from 'react';
2
2
  import { ViewPropsWithTheme } from './ImagesView';
3
- export declare const SwapView: React.FC<import("@storybook/theming").AddOptionalTo<ViewPropsWithTheme, "theme">>;
3
+ export declare const SwapView: React.FC<Pick<ViewPropsWithTheme, "diff" | "actual" | "expect"> & {
4
+ theme?: import("@storybook/theming").Theme | undefined;
5
+ }>;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  export interface PageFooterProps {
2
3
  canApprove: boolean;
3
4
  retriesCount: number;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  export interface PagingProps {
2
3
  activePage: number;
3
4
  onPageChange: (pageNumber: number) => void;
@@ -8,5 +8,7 @@ interface ImageSwapProps {
8
8
  theme: Theme;
9
9
  error?: boolean;
10
10
  }
11
- export declare const ImagePreview: React.FC<import("@storybook/theming").AddOptionalTo<ImageSwapProps, "theme">>;
11
+ export declare const ImagePreview: React.FC<Pick<ImageSwapProps, "error" | "imageName" | "url" | "onClick" | "isActive"> & {
12
+ theme?: Theme | undefined;
13
+ }>;
12
14
  export {};
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { ImagesViewMode, Images } from '../../../../types';
2
3
  interface PageHeaderProps {
3
4
  title: string[];
@@ -14,5 +14,7 @@ interface TestResultsProps {
14
14
  height?: string;
15
15
  }
16
16
  export declare function ResultsPageInternal({ id, path, results, approved, theme, onImageApprove, showTitle, height, }: TestResultsProps): JSX.Element;
17
- export declare const ResultsPage: React.FC<import("@storybook/theming").AddOptionalTo<TestResultsProps, "theme">>;
17
+ export declare const ResultsPage: React.FC<Pick<TestResultsProps, "id" | "results" | "path" | "height" | "approved" | "showTitle" | "onImageApprove"> & {
18
+ theme?: Theme | undefined;
19
+ }>;
18
20
  export {};
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { CreeveySuite } from '../../types';
2
3
  import { CreeveyClientApi } from '../shared/creeveyClientApi';
3
4
  export interface CreeveyAppProps {
@@ -1,2 +1,3 @@
1
- export declare const rotate360: import("@storybook/theming").Keyframes;
1
+ /// <reference types="react" />
2
+ export declare const rotate360: import("@storybook/theming/dist/create-77ee2cf0").K;
2
3
  export declare function CreeveyLoader(): JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Theme } from '@storybook/theming';
3
- interface BooleanProps {
3
+ interface CheckboxProps {
4
4
  checked?: boolean;
5
5
  onValueChange: (value: boolean) => void;
6
6
  disabled?: boolean;
@@ -8,8 +8,11 @@ interface BooleanProps {
8
8
  interface CheckboxState {
9
9
  indeterminate: boolean;
10
10
  }
11
- export declare const CheckboxContainer: import("@storybook/theming").StyledComponent<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, Pick<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement>>, Theme>;
12
- export declare class Checkbox extends React.Component<BooleanProps, CheckboxState> {
11
+ export declare const CheckboxContainer: import("@storybook/theming").StyledComponent<{
12
+ theme?: Theme | undefined;
13
+ as?: React.ElementType<any> | undefined;
14
+ }, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
15
+ export declare class Checkbox extends React.Component<CheckboxProps, CheckboxState> {
13
16
  state: CheckboxState;
14
17
  handleIndeterminateChange: (value: boolean) => void;
15
18
  setIndeterminate: () => void;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  interface SearchProps {
2
3
  onChange: (arg: string) => void;
3
4
  value: string;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { TestsStatusProps } from './TestsStatus';
2
3
  import { CreeveyViewFilter } from '../../../shared/helpers';
3
4
  interface SideBarHeaderProps {
@@ -6,28 +6,33 @@ export interface SuiteLinkProps {
6
6
  suite: CreeveySuite;
7
7
  'data-testid'?: string;
8
8
  }
9
- export declare const Container: React.FC<import("@storybook/theming").AddOptionalTo<Pick<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & Pick<{
9
+ export declare const Container: React.FC<Pick<{
10
+ theme?: Theme | undefined;
11
+ as?: React.ElementType<any> | undefined;
12
+ } & {
10
13
  theme: Theme;
11
14
  disabled?: boolean | undefined;
12
- }, "disabled"> & {
15
+ } & React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
16
+ children?: React.ReactNode;
17
+ }, "as" | keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement> | "disabled"> & {
18
+ theme?: Theme | undefined;
19
+ }>;
20
+ export declare const Button: React.FC<Pick<{
13
21
  theme?: Theme | undefined;
22
+ as?: React.ElementType<any> | undefined;
14
23
  } & {
15
- children?: React.ReactNode;
16
- }, "key" | "theme" | keyof React.HTMLAttributes<HTMLDivElement> | "disabled"> & {
17
- ref?: React.RefObject<HTMLDivElement> | ((instance: HTMLDivElement | null) => void) | null | undefined;
18
- }, "theme">>;
19
- export declare const Button: React.FC<import("@storybook/theming").AddOptionalTo<Pick<React.ClassAttributes<HTMLButtonElement> & React.ButtonHTMLAttributes<HTMLButtonElement> & Pick<{
20
24
  theme: Theme;
21
25
  active?: boolean | undefined;
22
26
  focused?: boolean | undefined;
23
- }, "active" | "focused"> & {
27
+ } & React.ClassAttributes<HTMLButtonElement> & React.ButtonHTMLAttributes<HTMLButtonElement> & {
28
+ children?: React.ReactNode;
29
+ }, "as" | "active" | keyof React.ClassAttributes<HTMLButtonElement> | keyof React.ButtonHTMLAttributes<HTMLButtonElement> | "focused"> & {
24
30
  theme?: Theme | undefined;
31
+ }>;
32
+ export declare const SuiteContainer: import("@storybook/theming").StyledComponent<{
33
+ theme?: Theme | undefined;
34
+ as?: React.ElementType<any> | undefined;
25
35
  } & {
26
- children?: React.ReactNode;
27
- }, "key" | "theme" | keyof React.ButtonHTMLAttributes<HTMLButtonElement> | "active" | "focused"> & {
28
- ref?: ((instance: HTMLButtonElement | null) => void) | React.RefObject<HTMLButtonElement> | null | undefined;
29
- }, "theme">>;
30
- export declare const SuiteContainer: import("@storybook/theming").StyledComponent<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
31
36
  padding: number;
32
- }, Theme>;
37
+ }, React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
33
38
  export declare function SuiteLink({ title, suite, 'data-testid': dataTid }: SuiteLinkProps): JSX.Element;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { CreeveyTest } from '../../../../types';
2
3
  export interface TestLinkProps {
3
4
  title: string;
@@ -7,4 +7,6 @@ export interface TestStatusIconProps {
7
7
  skip?: string | boolean;
8
8
  theme: Theme;
9
9
  }
10
- export declare const TestStatusIcon: React.FC<import("@storybook/theming").AddOptionalTo<TestStatusIconProps, "theme">>;
10
+ export declare const TestStatusIcon: React.FC<Pick<TestStatusIconProps, "skip" | "status" | "inverted"> & {
11
+ theme?: Theme | undefined;
12
+ }>;
@@ -6,4 +6,6 @@ export interface TestsStatusProps extends CreeveyTestsStatus {
6
6
  onClickByStatus: (value: TestStatus) => void;
7
7
  theme?: Theme;
8
8
  }
9
- export declare const TestsStatus: React.FC<import("@storybook/theming").AddOptionalTo<TestsStatusProps, "theme">>;
9
+ export declare const TestsStatus: React.FC<Pick<TestsStatusProps, "successCount" | "failedCount" | "pendingCount" | "skippedCount" | "onClickByStatus"> & {
10
+ theme?: Theme | undefined;
11
+ }>;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  interface ToggleProps {
2
3
  value?: boolean;
3
4
  onChange: (val: boolean) => void;
@@ -1,4 +1,4 @@
1
- import { Parameters } from '@storybook/api';
1
+ import { Parameters } from '@storybook/csf';
2
2
  import { SetStoriesData, StoriesRaw, StoryInput } from '../types';
3
3
  export declare const combineParameters: (...parameterSets: Parameters[]) => Parameters;
4
4
  export declare const denormalizeStoryParameters: ({ globalParameters, kindParameters, stories, }: SetStoriesData) => StoriesRaw;
@@ -1,12 +1,12 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="chai" />
3
- import type { API as StorybookAPI } from '@storybook/api';
4
- import type { DecoratorFunction } from '@storybook/addons';
3
+ import type { DecoratorFunction } from '@storybook/csf';
5
4
  import type { IKey } from 'selenium-webdriver/lib/input';
6
5
  import type { Worker as ClusterWorker } from 'cluster';
7
6
  import type { until, WebDriver, WebElementPromise } from 'selenium-webdriver';
8
7
  import type Pixelmatch from 'pixelmatch';
9
8
  import type { Context } from 'mocha';
9
+ import { StoryContextForEnhancers } from '@storybook/csf';
10
10
  export declare type DiffOptions = typeof Pixelmatch extends (x1: any, x2: any, x3: any, x4: any, x5: any, options?: infer T) => void ? T : never;
11
11
  export declare type SetStoriesData = {
12
12
  v?: number;
@@ -21,16 +21,14 @@ export declare type SetStoriesData = {
21
21
  }>;
22
22
  stories: StoriesRaw;
23
23
  };
24
- export declare type StoriesRaw = StorybookAPI extends {
25
- setStories: (stories: infer SS) => void;
26
- } ? SS : never;
24
+ export declare type StoriesRaw = Record<string, StoryContextForEnhancers>;
27
25
  export declare type StoryInput = StoriesRaw extends {
28
26
  [id: string]: infer S;
29
27
  } ? S : never;
30
- export interface StoryMeta<StoryFnReturnType = unknown> {
28
+ export interface StoryMeta {
31
29
  title: string;
32
30
  component?: unknown;
33
- decorators?: DecoratorFunction<StoryFnReturnType>[];
31
+ decorators?: DecoratorFunction[];
34
32
  parameters?: {
35
33
  creevey?: CreeveyStoryParams;
36
34
  [name: string]: unknown;
@@ -53,14 +51,14 @@ export interface CSFStory<StoryFnReturnType = unknown> {
53
51
  */
54
52
  story?: {
55
53
  name?: string;
56
- decorators?: DecoratorFunction<StoryFnReturnType>[];
54
+ decorators?: DecoratorFunction[];
57
55
  parameters?: {
58
56
  creevey?: CreeveyStoryParams;
59
57
  [name: string]: unknown;
60
58
  };
61
59
  };
62
60
  storyName?: string;
63
- decorators?: DecoratorFunction<StoryFnReturnType>[];
61
+ decorators?: DecoratorFunction[];
64
62
  parameters?: {
65
63
  creevey?: CreeveyStoryParams;
66
64
  [name: string]: unknown;
@@ -142,11 +140,6 @@ export interface Config {
142
140
  * @default path.join(process.cwd(), './report')
143
141
  */
144
142
  reportDir: string;
145
- /**
146
- * Absolute path to storybook config directory
147
- * @default path.join(process.cwd(), './.storybook')
148
- */
149
- storybookDir: string;
150
143
  /**
151
144
  * How much test would be retried
152
145
  * @default 0
@@ -173,18 +166,6 @@ export interface Config {
173
166
  * Works only with `useDocker == false`
174
167
  */
175
168
  selenoidPath?: string;
176
- /**
177
- * Creevey extract tests by using babel transformations
178
- * and load stories to nodejs directly.
179
- * In some edge cases it may fail to load tests.
180
- * In that case you can enable this option.
181
- * Creevey uses Storybook webpack config to build nodejs bundle with tests.
182
- * But it slightly slower and doesn't work if you use custom bundler for Storybook
183
- *
184
- * Affects only for Storybook 6.2+
185
- * @default false
186
- */
187
- useWebpackToExtractTests: boolean;
188
169
  /**
189
170
  * Creevey has two built-in stories providers.
190
171
  *
@@ -254,9 +235,7 @@ export interface Options {
254
235
  port: number;
255
236
  ui: boolean;
256
237
  update: boolean | string;
257
- webpack: boolean;
258
238
  debug: boolean;
259
- extract: boolean | string;
260
239
  tests: boolean;
261
240
  browser?: string;
262
241
  reporter?: string;