creevey 0.9.0-beta.12 → 0.9.0-beta.14
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.
- package/.yarn/install-state.gz +0 -0
- package/.yarnrc.yml +1 -0
- package/lib/cjs/cli.js +1 -0
- package/lib/cjs/client/addon/Manager.js +151 -223
- package/lib/cjs/client/addon/components/Addon.js +2 -9
- package/lib/cjs/client/addon/components/Icons.js +1 -7
- package/lib/cjs/client/addon/components/Panel.js +5 -18
- package/lib/cjs/client/addon/components/TestSelect.js +12 -25
- package/lib/cjs/client/addon/components/Tools.js +17 -28
- package/lib/cjs/client/addon/decorator.js +1 -4
- package/lib/cjs/client/addon/index.js +0 -4
- package/lib/cjs/client/addon/preset.js +3 -12
- package/lib/cjs/client/addon/preview.js +1 -4
- package/lib/cjs/client/addon/readyForCapture.js +1 -4
- package/lib/cjs/client/addon/register.js +11 -26
- package/lib/cjs/client/addon/utils.js +1 -9
- package/lib/cjs/client/addon/withCreevey.js +55 -134
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +5 -17
- package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +8 -24
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +7 -23
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +7 -22
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +5 -17
- package/lib/cjs/client/shared/components/ImagesView/index.js +0 -5
- package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +1 -8
- package/lib/cjs/client/shared/components/PageFooter/Paging.js +2 -19
- package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +21 -17
- package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +5 -24
- package/lib/cjs/client/shared/components/ResultsPage.js +9 -37
- package/lib/cjs/client/shared/creeveyClientApi.js +3 -13
- package/lib/cjs/client/shared/helpers.js +21 -75
- package/lib/cjs/client/shared/viewMode.js +2 -6
- package/lib/cjs/client/web/192.js +1 -0
- package/lib/cjs/client/web/632.js +43 -0
- package/lib/cjs/client/web/794.js +1 -0
- package/lib/cjs/client/web/main.js +78 -1
- package/lib/cjs/client/web/main.js.LICENSE.txt +0 -15
- package/lib/cjs/creevey.js +5 -21
- package/lib/cjs/index.js +0 -15
- package/lib/cjs/server/config.js +13 -33
- package/lib/cjs/server/docker.js +5 -27
- package/lib/cjs/server/index.js +8 -33
- package/lib/cjs/server/logger.js +5 -19
- package/lib/cjs/server/master/api.js +1 -14
- package/lib/cjs/server/master/index.js +15 -46
- package/lib/cjs/server/master/master.js +6 -21
- package/lib/cjs/server/master/pool.js +2 -37
- package/lib/cjs/server/master/runner.js +15 -42
- package/lib/cjs/server/master/server.js +5 -27
- package/lib/cjs/server/messages.js +7 -53
- package/lib/cjs/server/selenium/browser.js +47 -128
- package/lib/cjs/server/selenium/index.js +0 -4
- package/lib/cjs/server/selenium/selenoid.js +7 -33
- package/lib/cjs/server/stories.js +25 -30
- package/lib/cjs/server/storybook/providers/browser.js +5 -18
- package/lib/cjs/server/storybook/providers/hybrid.js +9 -29
- package/lib/cjs/server/testsFiles/parser.js +3 -19
- package/lib/cjs/server/testsFiles/register.js +7 -9
- package/lib/cjs/server/update.js +3 -20
- package/lib/cjs/server/utils.js +9 -41
- package/lib/cjs/server/worker/chai-image.js +1 -27
- package/lib/cjs/server/worker/helpers.js +2 -12
- package/lib/cjs/server/worker/index.js +1 -3
- package/lib/cjs/server/worker/reporter.js +8 -24
- package/lib/cjs/server/worker/worker.js +5 -49
- package/lib/cjs/shared/index.js +22 -36
- package/lib/cjs/shared/serializeRegExp.js +0 -8
- package/lib/cjs/types.js +4 -14
- package/lib/esm/cli.js +1 -1
- package/lib/esm/client/addon/Manager.js +151 -214
- package/lib/esm/client/addon/components/Panel.js +4 -6
- package/lib/esm/client/addon/components/TestSelect.js +11 -17
- package/lib/esm/client/addon/components/Tools.js +15 -14
- package/lib/esm/client/addon/preset.js +2 -8
- package/lib/esm/client/addon/readyForCapture.js +1 -3
- package/lib/esm/client/addon/register.js +6 -8
- package/lib/esm/client/addon/utils.js +0 -5
- package/lib/esm/client/addon/withCreevey.js +54 -116
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +1 -1
- package/lib/esm/client/shared/components/ImagesView/ImagesView.js +6 -8
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +3 -4
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +3 -3
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +1 -1
- package/lib/esm/client/shared/components/PageFooter/Paging.js +1 -11
- package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +18 -7
- package/lib/esm/client/shared/components/PageHeader/PageHeader.js +3 -8
- package/lib/esm/client/shared/components/ResultsPage.js +6 -15
- package/lib/esm/client/shared/creeveyClientApi.js +3 -10
- package/lib/esm/client/shared/helpers.js +21 -47
- package/lib/esm/client/web/192.js +1 -0
- package/lib/esm/client/web/632.js +43 -0
- package/lib/esm/client/web/794.js +1 -0
- package/lib/esm/client/web/index.html +19 -0
- package/lib/esm/client/web/main.js +79 -0
- package/lib/esm/client/web/main.js.LICENSE.txt +34 -0
- package/lib/esm/creevey.js +4 -8
- package/lib/esm/index.js +0 -1
- package/lib/esm/server/config.js +7 -14
- package/lib/esm/server/docker.js +4 -12
- package/lib/esm/server/index.js +7 -21
- package/lib/esm/server/logger.js +0 -1
- package/lib/esm/server/master/api.js +0 -9
- package/lib/esm/server/master/index.js +15 -32
- package/lib/esm/server/master/master.js +2 -7
- package/lib/esm/server/master/pool.js +0 -23
- package/lib/esm/server/master/runner.js +14 -27
- package/lib/esm/server/master/server.js +4 -9
- package/lib/esm/server/messages.js +6 -38
- package/lib/esm/server/selenium/browser.js +46 -106
- package/lib/esm/server/selenium/selenoid.js +6 -17
- package/lib/esm/server/stories.js +24 -20
- package/lib/esm/server/storybook/providers/browser.js +4 -8
- package/lib/esm/server/storybook/providers/hybrid.js +6 -14
- package/lib/esm/server/testsFiles/parser.js +0 -6
- package/lib/esm/server/testsFiles/register.js +5 -2
- package/lib/esm/server/update.js +0 -8
- package/lib/esm/server/utils.js +3 -11
- package/lib/esm/server/worker/chai-image.js +0 -21
- package/lib/esm/server/worker/helpers.js +2 -9
- package/lib/esm/server/worker/reporter.js +7 -10
- package/lib/esm/server/worker/worker.js +4 -25
- package/lib/esm/shared/index.js +24 -25
- package/lib/esm/types.js +4 -1
- package/lib/types/client/addon/Manager.d.ts +1 -1
- package/lib/types/client/addon/components/Addon.d.ts +1 -0
- package/lib/types/client/addon/components/Icons.d.ts +1 -0
- package/lib/types/client/addon/components/Panel.d.ts +1 -0
- package/lib/types/client/addon/components/TestSelect.d.ts +1 -0
- package/lib/types/client/addon/components/Tools.d.ts +1 -0
- package/lib/types/client/addon/decorator.d.ts +1 -1
- package/lib/types/client/addon/preset.d.ts +2 -2
- package/lib/types/client/addon/preview.d.ts +1 -1
- package/lib/types/client/addon/withCreevey.d.ts +3 -2
- package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -1
- package/lib/types/client/shared/components/ImagesView/ImagesView.d.ts +1 -0
- package/lib/types/client/shared/components/ImagesView/SideBySideView.d.ts +3 -1
- package/lib/types/client/shared/components/ImagesView/SlideView.d.ts +3 -1
- package/lib/types/client/shared/components/ImagesView/SwapView.d.ts +3 -1
- package/lib/types/client/shared/components/PageFooter/PageFooter.d.ts +1 -0
- package/lib/types/client/shared/components/PageFooter/Paging.d.ts +1 -0
- package/lib/types/client/shared/components/PageHeader/ImagePreview.d.ts +3 -1
- package/lib/types/client/shared/components/PageHeader/PageHeader.d.ts +1 -0
- package/lib/types/client/shared/components/ResultsPage.d.ts +3 -1
- package/lib/types/client/web/CreeveyApp.d.ts +1 -0
- package/lib/types/client/web/CreeveyLoader.d.ts +2 -1
- package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +4 -1
- package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +1 -0
- package/lib/types/client/web/CreeveyView/SideBar/SideBarHeader.d.ts +1 -0
- package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +19 -14
- package/lib/types/client/web/CreeveyView/SideBar/TestLink.d.ts +1 -0
- package/lib/types/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +3 -1
- package/lib/types/client/web/CreeveyView/SideBar/TestsStatus.d.ts +3 -1
- package/lib/types/client/web/CreeveyView/SideBar/Toggle.d.ts +1 -0
- package/lib/types/shared/index.d.ts +1 -1
- package/lib/types/types.d.ts +7 -28
- package/package.json +60 -78
- package/lib/cjs/client/addon/preset.ie11.js +0 -74
- package/lib/cjs/client/addon/preset.sb7.js +0 -19
- package/lib/cjs/client/web/142.js +0 -2
- package/lib/cjs/client/web/142.js.LICENSE.txt +0 -12
- package/lib/cjs/client/web/32.js +0 -1
- package/lib/cjs/client/web/551.js +0 -1
- package/lib/cjs/client/web/566.js +0 -2
- package/lib/cjs/client/web/566.js.LICENSE.txt +0 -31
- package/lib/cjs/client/web/691.js +0 -2
- package/lib/cjs/client/web/691.js.LICENSE.txt +0 -8
- package/lib/cjs/client/web/725.js +0 -1
- package/lib/cjs/server/extract.js +0 -46
- package/lib/cjs/server/loaders/babel/creevey-plugin.js +0 -86
- package/lib/cjs/server/loaders/babel/helpers.js +0 -469
- package/lib/cjs/server/loaders/babel/register.js +0 -124
- package/lib/cjs/server/loaders/hooks/mdx.js +0 -30
- package/lib/cjs/server/loaders/hooks/svelte.js +0 -65
- package/lib/cjs/server/loaders/webpack/compile.js +0 -269
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +0 -172
- package/lib/cjs/server/loaders/webpack/dummy-hmr.js +0 -39
- package/lib/cjs/server/loaders/webpack/mdx-loader.js +0 -72
- package/lib/cjs/server/loaders/webpack/start.js +0 -41
- package/lib/cjs/server/storybook/entry.js +0 -53
- package/lib/cjs/server/storybook/helpers.js +0 -158
- package/lib/cjs/server/storybook/providers/nodejs.js +0 -239
- package/lib/esm/client/addon/preset.ie11.js +0 -59
- package/lib/esm/client/addon/preset.sb7.js +0 -8
- package/lib/esm/server/extract.js +0 -32
- package/lib/esm/server/loaders/babel/creevey-plugin.js +0 -72
- package/lib/esm/server/loaders/babel/helpers.js +0 -452
- package/lib/esm/server/loaders/babel/register.js +0 -103
- package/lib/esm/server/loaders/hooks/mdx.js +0 -15
- package/lib/esm/server/loaders/hooks/svelte.js +0 -49
- package/lib/esm/server/loaders/webpack/compile.js +0 -246
- package/lib/esm/server/loaders/webpack/creevey-loader.js +0 -152
- package/lib/esm/server/loaders/webpack/dummy-hmr.js +0 -32
- package/lib/esm/server/loaders/webpack/mdx-loader.js +0 -58
- package/lib/esm/server/loaders/webpack/start.js +0 -27
- package/lib/esm/server/storybook/entry.js +0 -27
- package/lib/esm/server/storybook/helpers.js +0 -97
- package/lib/esm/server/storybook/providers/nodejs.js +0 -216
- package/lib/types/client/addon/preset.ie11.d.ts +0 -10
- package/lib/types/client/addon/preset.sb7.d.ts +0 -2
- package/lib/types/server/extract.d.ts +0 -2
- package/lib/types/server/loaders/babel/creevey-plugin.d.ts +0 -1
- package/lib/types/server/loaders/babel/helpers.d.ts +0 -19
- package/lib/types/server/loaders/babel/register.d.ts +0 -5
- package/lib/types/server/loaders/hooks/mdx.d.ts +0 -1
- package/lib/types/server/loaders/hooks/svelte.d.ts +0 -1
- package/lib/types/server/loaders/webpack/compile.d.ts +0 -2
- package/lib/types/server/loaders/webpack/creevey-loader.d.ts +0 -4
- package/lib/types/server/loaders/webpack/dummy-hmr.d.ts +0 -10
- package/lib/types/server/loaders/webpack/mdx-loader.d.ts +0 -6
- package/lib/types/server/loaders/webpack/start.d.ts +0 -1
- package/lib/types/server/storybook/entry.d.ts +0 -17
- package/lib/types/server/storybook/helpers.d.ts +0 -24
- package/lib/types/server/storybook/providers/nodejs.d.ts +0 -9
- package/preset/ie11.js +0 -5
- package/preset/index.js +0 -9
- package/preset/sb7.js +0 -5
- 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
|
-
}
|
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);
|
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
|
}
|
package/lib/esm/shared/index.js
CHANGED
@@ -1,54 +1,53 @@
|
|
1
1
|
import { mapValues, mergeWith, cloneDeepWith } from 'lodash';
|
2
|
-
import { deserializeRegExp, isSerializedRegExp, isRegExp, serializeRegExp } from './serializeRegExp';
|
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
|
-
|
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
|
-
};
|
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
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
37
|
-
|
38
|
-
parameters: {
|
39
|
-
|
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
|
-
|
62
|
-
|
63
|
-
parameters: {
|
64
|
-
|
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
|
-
}
|
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():
|
35
|
+
addStatusesToSideBar(): void;
|
36
36
|
addStatusToStoryName(name: string, status: TestStatus | undefined, skip: string | boolean): string;
|
37
37
|
}
|
@@ -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
|
2
|
-
export declare
|
1
|
+
export declare const previewAnnotations: string[];
|
2
|
+
export declare const managerEntries: string[];
|
@@ -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 {
|
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():
|
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<
|
3
|
+
export declare const BlendView: 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 SideBySideView: React.FC<
|
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<
|
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<
|
3
|
+
export declare const SwapView: React.FC<Pick<ViewPropsWithTheme, "diff" | "actual" | "expect"> & {
|
4
|
+
theme?: import("@storybook/theming").Theme | undefined;
|
5
|
+
}>;
|
@@ -8,5 +8,7 @@ interface ImageSwapProps {
|
|
8
8
|
theme: Theme;
|
9
9
|
error?: boolean;
|
10
10
|
}
|
11
|
-
export declare const ImagePreview: React.FC<
|
11
|
+
export declare const ImagePreview: React.FC<Pick<ImageSwapProps, "error" | "imageName" | "url" | "onClick" | "isActive"> & {
|
12
|
+
theme?: Theme | undefined;
|
13
|
+
}>;
|
12
14
|
export {};
|
@@ -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<
|
17
|
+
export declare const ResultsPage: React.FC<Pick<TestResultsProps, "id" | "results" | "path" | "height" | "approved" | "showTitle" | "onImageApprove"> & {
|
18
|
+
theme?: Theme | undefined;
|
19
|
+
}>;
|
18
20
|
export {};
|
@@ -8,7 +8,10 @@ interface BooleanProps {
|
|
8
8
|
interface CheckboxState {
|
9
9
|
indeterminate: boolean;
|
10
10
|
}
|
11
|
-
export declare const CheckboxContainer: import("@storybook/theming").StyledComponent<
|
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>, {}>;
|
12
15
|
export declare class Checkbox extends React.Component<BooleanProps, CheckboxState> {
|
13
16
|
state: CheckboxState;
|
14
17
|
handleIndeterminateChange: (value: boolean) => void;
|
@@ -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<
|
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
|
-
}
|
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
|
-
}
|
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
|
-
},
|
37
|
+
}, React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
|
33
38
|
export declare function SuiteLink({ title, suite, 'data-testid': dataTid }: SuiteLinkProps): JSX.Element;
|
@@ -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<
|
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<
|
9
|
+
export declare const TestsStatus: React.FC<Pick<TestsStatusProps, "successCount" | "failedCount" | "pendingCount" | "skippedCount" | "onClickByStatus"> & {
|
10
|
+
theme?: Theme | undefined;
|
11
|
+
}>;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Parameters } from '@storybook/
|
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;
|
package/lib/types/types.d.ts
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
/// <reference types="node" />
|
2
2
|
/// <reference types="chai" />
|
3
|
-
import type {
|
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 =
|
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
|
28
|
+
export interface StoryMeta {
|
31
29
|
title: string;
|
32
30
|
component?: unknown;
|
33
|
-
decorators?: DecoratorFunction
|
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
|
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
|
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;
|