creevey 0.9.0-beta.1 → 0.9.0-beta.2
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/lib/cjs/cli.js +5 -0
- package/lib/cjs/client/addon/Manager.js +412 -0
- package/lib/cjs/client/addon/components/Addon.js +76 -0
- package/lib/cjs/client/addon/components/Icons.js +42 -0
- package/lib/cjs/client/addon/components/Panel.js +68 -0
- package/lib/cjs/client/addon/components/TestSelect.js +63 -0
- package/lib/cjs/client/addon/components/Tools.js +114 -0
- package/lib/cjs/client/addon/decorator.js +11 -0
- package/lib/cjs/client/addon/preset.js +81 -0
- package/lib/cjs/client/addon/readyForCapture.js +12 -0
- package/lib/cjs/client/addon/register.js +96 -0
- package/lib/cjs/client/addon/utils.js +38 -0
- package/lib/cjs/client/addon/withCreevey.js +531 -0
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +85 -0
- package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +88 -0
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +176 -0
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +179 -0
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +110 -0
- package/lib/cjs/client/shared/components/ImagesView/index.js +45 -0
- package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +46 -0
- package/lib/cjs/client/shared/components/PageFooter/Paging.js +98 -0
- package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +78 -0
- package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +144 -0
- package/lib/cjs/client/shared/components/ResultsPage.js +173 -0
- package/lib/cjs/client/shared/creeveyClientApi.js +103 -0
- package/lib/cjs/client/shared/helpers.js +482 -0
- package/lib/cjs/client/shared/viewMode.js +17 -0
- package/lib/cjs/client/web/index.html +19 -0
- package/lib/cjs/creevey.js +71 -0
- package/lib/cjs/index.js +62 -0
- package/lib/cjs/server/config.js +96 -0
- package/lib/cjs/server/docker.js +150 -0
- package/lib/cjs/server/extract.js +50 -0
- package/lib/cjs/server/index.js +83 -0
- package/lib/cjs/server/loaders/babel/creevey-plugin.js +88 -0
- package/lib/cjs/server/loaders/babel/helpers.js +479 -0
- package/lib/cjs/server/loaders/babel/register.js +126 -0
- package/lib/cjs/server/loaders/hooks/mdx.js +30 -0
- package/lib/cjs/server/loaders/hooks/svelte.js +65 -0
- package/lib/cjs/server/loaders/webpack/compile.js +286 -0
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +174 -0
- package/lib/cjs/server/loaders/webpack/dummy-hmr.js +44 -0
- package/lib/cjs/server/loaders/webpack/mdx-loader.js +72 -0
- package/lib/cjs/server/loaders/webpack/start.js +41 -0
- package/lib/cjs/server/logger.js +47 -0
- package/lib/cjs/server/master/api.js +71 -0
- package/lib/cjs/server/master/index.js +146 -0
- package/lib/cjs/server/master/master.js +57 -0
- package/lib/cjs/server/master/pool.js +206 -0
- package/lib/cjs/server/master/runner.js +294 -0
- package/lib/cjs/server/master/server.js +129 -0
- package/lib/cjs/server/messages.js +266 -0
- package/lib/cjs/server/selenium/browser.js +680 -0
- package/lib/cjs/server/selenium/index.js +31 -0
- package/lib/cjs/server/selenium/selenoid.js +174 -0
- package/lib/cjs/server/stories.js +170 -0
- package/lib/cjs/server/storybook/entry.js +68 -0
- package/lib/cjs/server/storybook/helpers.js +165 -0
- package/lib/cjs/server/storybook/providers/browser.js +78 -0
- package/lib/cjs/server/storybook/providers/hybrid.js +84 -0
- package/lib/cjs/server/storybook/providers/nodejs.js +239 -0
- package/lib/cjs/server/testsFiles/parser.js +72 -0
- package/lib/cjs/server/testsFiles/register.js +48 -0
- package/lib/cjs/server/update.js +83 -0
- package/lib/cjs/server/utils.js +185 -0
- package/lib/cjs/server/worker/chai-image.js +142 -0
- package/lib/cjs/server/worker/helpers.js +69 -0
- package/lib/cjs/server/worker/index.js +15 -0
- package/lib/cjs/server/worker/reporter.js +120 -0
- package/lib/cjs/server/worker/worker.js +278 -0
- package/lib/cjs/shared.js +124 -0
- package/lib/cjs/types.js +74 -0
- package/lib/esm/cli.js +4 -0
- package/lib/esm/client/addon/Manager.js +396 -0
- package/lib/esm/client/addon/components/Addon.js +58 -0
- package/lib/esm/client/addon/components/Icons.js +27 -0
- package/lib/esm/client/addon/components/Panel.js +49 -0
- package/lib/esm/client/addon/components/TestSelect.js +49 -0
- package/lib/esm/client/addon/components/Tools.js +91 -0
- package/lib/esm/client/addon/decorator.js +2 -0
- package/lib/esm/client/addon/preset.js +56 -0
- package/lib/esm/client/addon/readyForCapture.js +5 -0
- package/lib/esm/client/addon/register.js +75 -0
- package/lib/esm/client/addon/utils.js +31 -0
- package/lib/esm/client/addon/withCreevey.js +509 -0
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +63 -0
- package/lib/esm/client/shared/components/ImagesView/ImagesView.js +65 -0
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +151 -0
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +154 -0
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +88 -0
- package/lib/esm/client/shared/components/ImagesView/index.js +5 -0
- package/lib/esm/client/shared/components/PageFooter/PageFooter.js +32 -0
- package/lib/esm/client/shared/components/PageFooter/Paging.js +84 -0
- package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +64 -0
- package/lib/esm/client/shared/components/PageHeader/PageHeader.js +120 -0
- package/lib/esm/client/shared/components/ResultsPage.js +143 -0
- package/lib/esm/client/shared/creeveyClientApi.js +94 -0
- package/lib/esm/client/shared/helpers.js +424 -0
- package/lib/esm/client/shared/viewMode.js +6 -0
- package/lib/esm/creevey.js +56 -0
- package/lib/esm/index.js +7 -0
- package/lib/esm/server/config.js +73 -0
- package/lib/esm/server/docker.js +123 -0
- package/lib/esm/server/extract.js +34 -0
- package/lib/esm/server/index.js +64 -0
- package/lib/esm/server/loaders/babel/creevey-plugin.js +74 -0
- package/lib/esm/server/loaders/babel/helpers.js +462 -0
- package/lib/esm/server/loaders/babel/register.js +105 -0
- package/lib/esm/server/loaders/hooks/mdx.js +15 -0
- package/lib/esm/server/loaders/hooks/svelte.js +49 -0
- package/lib/esm/server/loaders/webpack/compile.js +263 -0
- package/lib/esm/server/loaders/webpack/creevey-loader.js +153 -0
- package/lib/esm/server/loaders/webpack/dummy-hmr.js +36 -0
- package/lib/esm/server/loaders/webpack/mdx-loader.js +58 -0
- package/lib/esm/server/loaders/webpack/start.js +27 -0
- package/lib/esm/server/logger.js +20 -0
- package/lib/esm/server/master/api.js +60 -0
- package/lib/esm/server/master/index.js +125 -0
- package/lib/esm/server/master/master.js +38 -0
- package/lib/esm/server/master/pool.js +187 -0
- package/lib/esm/server/master/runner.js +272 -0
- package/lib/esm/server/master/server.js +105 -0
- package/lib/esm/server/messages.js +234 -0
- package/lib/esm/server/selenium/browser.js +647 -0
- package/lib/esm/server/selenium/index.js +2 -0
- package/lib/esm/server/selenium/selenoid.js +151 -0
- package/lib/esm/server/stories.js +151 -0
- package/lib/esm/server/storybook/entry.js +44 -0
- package/lib/esm/server/storybook/helpers.js +106 -0
- package/lib/esm/server/storybook/providers/browser.js +61 -0
- package/lib/esm/server/storybook/providers/hybrid.js +64 -0
- package/lib/esm/server/storybook/providers/nodejs.js +217 -0
- package/lib/esm/server/testsFiles/parser.js +50 -0
- package/lib/esm/server/testsFiles/register.js +35 -0
- package/lib/esm/server/update.js +65 -0
- package/lib/esm/server/utils.js +146 -0
- package/lib/esm/server/worker/chai-image.js +130 -0
- package/lib/esm/server/worker/helpers.js +60 -0
- package/lib/esm/server/worker/index.js +1 -0
- package/lib/esm/server/worker/reporter.js +98 -0
- package/lib/esm/server/worker/worker.js +248 -0
- package/lib/esm/shared.js +93 -0
- package/lib/esm/types.js +43 -0
- package/lib/types/index.d.ts +2 -4
- package/package.json +1 -1
@@ -0,0 +1,278 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = worker;
|
7
|
+
|
8
|
+
var _util = require("util");
|
9
|
+
|
10
|
+
var _fs = _interopRequireDefault(require("fs"));
|
11
|
+
|
12
|
+
var _path = _interopRequireDefault(require("path"));
|
13
|
+
|
14
|
+
var _chai = _interopRequireDefault(require("chai"));
|
15
|
+
|
16
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
17
|
+
|
18
|
+
var _mocha = _interopRequireDefault(require("mocha"));
|
19
|
+
|
20
|
+
var _seleniumWebdriver = require("selenium-webdriver");
|
21
|
+
|
22
|
+
var _types = require("../../types");
|
23
|
+
|
24
|
+
var _messages = require("../messages");
|
25
|
+
|
26
|
+
var _chaiImage = _interopRequireDefault(require("./chai-image"));
|
27
|
+
|
28
|
+
var _selenium = require("../selenium");
|
29
|
+
|
30
|
+
var _reporter = require("./reporter");
|
31
|
+
|
32
|
+
var _helpers = require("./helpers");
|
33
|
+
|
34
|
+
var _logger = require("../logger");
|
35
|
+
|
36
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
37
|
+
|
38
|
+
const statAsync = (0, _util.promisify)(_fs.default.stat);
|
39
|
+
const readdirAsync = (0, _util.promisify)(_fs.default.readdir);
|
40
|
+
const readFileAsync = (0, _util.promisify)(_fs.default.readFile);
|
41
|
+
const writeFileAsync = (0, _util.promisify)(_fs.default.writeFile);
|
42
|
+
const mkdirAsync = (0, _util.promisify)(_fs.default.mkdir);
|
43
|
+
|
44
|
+
async function getStat(filePath) {
|
45
|
+
try {
|
46
|
+
return await statAsync(filePath);
|
47
|
+
} catch (error) {
|
48
|
+
if (typeof error == 'object' && error && error.code === 'ENOENT') {
|
49
|
+
return null;
|
50
|
+
}
|
51
|
+
|
52
|
+
throw error;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
async function getLastImageNumber(imageDir, imageName) {
|
57
|
+
const actualImagesRegexp = new RegExp(`${imageName}-actual-(\\d+)\\.png`);
|
58
|
+
|
59
|
+
try {
|
60
|
+
var _await$readdirAsync$m;
|
61
|
+
|
62
|
+
return (_await$readdirAsync$m = (await readdirAsync(imageDir)).map(filename => filename.replace(actualImagesRegexp, '$1')).map(Number).filter(x => !isNaN(x)).sort((a, b) => b - a)[0]) !== null && _await$readdirAsync$m !== void 0 ? _await$readdirAsync$m : 0;
|
63
|
+
} catch (_error) {
|
64
|
+
return 0;
|
65
|
+
}
|
66
|
+
} // FIXME browser options hotfix
|
67
|
+
|
68
|
+
|
69
|
+
async function worker(config, options) {
|
70
|
+
var _await$browser$getSes;
|
71
|
+
|
72
|
+
let retries = 0;
|
73
|
+
let images = {};
|
74
|
+
let error = undefined;
|
75
|
+
const screenshots = [];
|
76
|
+
const testScope = [];
|
77
|
+
|
78
|
+
function runHandler(failures) {
|
79
|
+
if (failures > 0 && (error || Object.values(images).some(image => (image === null || image === void 0 ? void 0 : image.error) != null))) {
|
80
|
+
var _error2;
|
81
|
+
|
82
|
+
const isTimeout = hasTimeout(error) || Object.values(images).some(image => hasTimeout(image === null || image === void 0 ? void 0 : image.error));
|
83
|
+
const payload = {
|
84
|
+
status: 'failed',
|
85
|
+
images,
|
86
|
+
error
|
87
|
+
};
|
88
|
+
isTimeout ? (0, _messages.emitWorkerMessage)({
|
89
|
+
type: 'error',
|
90
|
+
payload: {
|
91
|
+
error: (_error2 = error) !== null && _error2 !== void 0 ? _error2 : 'Unknown error'
|
92
|
+
}
|
93
|
+
}) : (0, _messages.emitTestMessage)({
|
94
|
+
type: 'end',
|
95
|
+
payload
|
96
|
+
});
|
97
|
+
} else {
|
98
|
+
(0, _messages.emitTestMessage)({
|
99
|
+
type: 'end',
|
100
|
+
payload: {
|
101
|
+
status: 'success',
|
102
|
+
images
|
103
|
+
}
|
104
|
+
});
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
async function saveImages(imageDir, images) {
|
109
|
+
await mkdirAsync(imageDir, {
|
110
|
+
recursive: true
|
111
|
+
});
|
112
|
+
|
113
|
+
for (const {
|
114
|
+
name,
|
115
|
+
data
|
116
|
+
} of images) {
|
117
|
+
await writeFileAsync(_path.default.join(imageDir, name), data);
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
121
|
+
async function getExpected(assertImageName) {
|
122
|
+
var _images$imageName;
|
123
|
+
|
124
|
+
// context => [kind, story, test, browser]
|
125
|
+
// rootSuite -> kindSuite -> storyTest -> [browsers.png]
|
126
|
+
// rootSuite -> kindSuite -> storySuite -> test -> [browsers.png]
|
127
|
+
const testPath = [...testScope];
|
128
|
+
const imageName = assertImageName !== null && assertImageName !== void 0 ? assertImageName : testPath.pop();
|
129
|
+
const imagesMeta = [];
|
130
|
+
|
131
|
+
const reportImageDir = _path.default.join(config.reportDir, ...testPath);
|
132
|
+
|
133
|
+
const imageNumber = (await getLastImageNumber(reportImageDir, imageName)) + 1;
|
134
|
+
const actualImageName = `${imageName}-actual-${imageNumber}.png`;
|
135
|
+
const image = images[imageName] = (_images$imageName = images[imageName]) !== null && _images$imageName !== void 0 ? _images$imageName : {
|
136
|
+
actual: actualImageName
|
137
|
+
};
|
138
|
+
|
139
|
+
const onCompare = async (actual, expect, diff) => {
|
140
|
+
imagesMeta.push({
|
141
|
+
name: image.actual,
|
142
|
+
data: actual
|
143
|
+
});
|
144
|
+
|
145
|
+
if (diff && expect) {
|
146
|
+
image.expect = `${imageName}-expect-${imageNumber}.png`;
|
147
|
+
image.diff = `${imageName}-diff-${imageNumber}.png`;
|
148
|
+
imagesMeta.push({
|
149
|
+
name: image.expect,
|
150
|
+
data: expect
|
151
|
+
});
|
152
|
+
imagesMeta.push({
|
153
|
+
name: image.diff,
|
154
|
+
data: diff
|
155
|
+
});
|
156
|
+
}
|
157
|
+
|
158
|
+
if (options.saveReport) {
|
159
|
+
await saveImages(reportImageDir, imagesMeta);
|
160
|
+
}
|
161
|
+
};
|
162
|
+
|
163
|
+
const expectImageDir = _path.default.join(config.screenDir, ...testPath);
|
164
|
+
|
165
|
+
const expectImageStat = await getStat(_path.default.join(expectImageDir, `${imageName}.png`));
|
166
|
+
if (!expectImageStat) return {
|
167
|
+
expected: null,
|
168
|
+
onCompare
|
169
|
+
};
|
170
|
+
const expected = await readFileAsync(_path.default.join(expectImageDir, `${imageName}.png`));
|
171
|
+
return {
|
172
|
+
expected,
|
173
|
+
onCompare
|
174
|
+
};
|
175
|
+
}
|
176
|
+
|
177
|
+
const mochaOptions = {
|
178
|
+
timeout: 30000,
|
179
|
+
reporter: process.env.TEAMCITY_VERSION ? _reporter.TeamcityReporter : options.reporter || _reporter.CreeveyReporter,
|
180
|
+
reporterOptions: {
|
181
|
+
reportDir: config.reportDir,
|
182
|
+
topLevelSuite: options.browser,
|
183
|
+
|
184
|
+
get willRetry() {
|
185
|
+
return retries < config.maxRetries;
|
186
|
+
},
|
187
|
+
|
188
|
+
get images() {
|
189
|
+
return images;
|
190
|
+
},
|
191
|
+
|
192
|
+
get sessionId() {
|
193
|
+
return sessionId;
|
194
|
+
}
|
195
|
+
|
196
|
+
}
|
197
|
+
};
|
198
|
+
const mocha = new _mocha.default(mochaOptions); // @ts-expect-error: @types/mocha has out-dated types
|
199
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
200
|
+
|
201
|
+
mocha.cleanReferencesAfterRun(false);
|
202
|
+
|
203
|
+
_chai.default.use((0, _chaiImage.default)(getExpected, config.diffOptions));
|
204
|
+
|
205
|
+
if ((await (0, _selenium.getBrowser)(config, options.browser)) == null) return;
|
206
|
+
await (0, _helpers.addTestsFromStories)(mocha.suite, config, {
|
207
|
+
browser: options.browser,
|
208
|
+
watch: options.ui,
|
209
|
+
debug: options.debug,
|
210
|
+
port: options.port
|
211
|
+
});
|
212
|
+
|
213
|
+
try {
|
214
|
+
var _await$getBrowser;
|
215
|
+
|
216
|
+
await ((_await$getBrowser = await (0, _selenium.getBrowser)(config, options.browser)) === null || _await$getBrowser === void 0 ? void 0 : _await$getBrowser.getCurrentUrl());
|
217
|
+
} catch (_) {
|
218
|
+
await (0, _selenium.closeBrowser)();
|
219
|
+
}
|
220
|
+
|
221
|
+
const browser = await (0, _selenium.getBrowser)(config, options.browser);
|
222
|
+
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();
|
223
|
+
if (browser == null) return;
|
224
|
+
const interval = setInterval(() => void browser.getCurrentUrl().then(url => {
|
225
|
+
if (options.debug) _logger.logger.debug(`${options.browser}:${_chalk.default.gray(sessionId)}`, 'current url', _chalk.default.magenta(url));
|
226
|
+
}), 10 * 1000);
|
227
|
+
(0, _messages.subscribeOn)('shutdown', () => clearInterval(interval));
|
228
|
+
mocha.suite.beforeAll(function () {
|
229
|
+
this.config = config;
|
230
|
+
this.browser = browser;
|
231
|
+
this.until = _seleniumWebdriver.until;
|
232
|
+
this.keys = _seleniumWebdriver.Key;
|
233
|
+
this.expect = _chai.default.expect;
|
234
|
+
this.browserName = options.browser;
|
235
|
+
this.testScope = testScope;
|
236
|
+
this.screenshots = screenshots;
|
237
|
+
});
|
238
|
+
mocha.suite.beforeEach(_selenium.switchStory);
|
239
|
+
(0, _messages.subscribeOn)('test', message => {
|
240
|
+
if (message.type != 'start') return;
|
241
|
+
const test = message.payload;
|
242
|
+
const testPath = test.path.join(' ').replace(/[|\\{}()[\]^$+*?.-]/g, '\\$&');
|
243
|
+
images = {};
|
244
|
+
error = undefined;
|
245
|
+
retries = test.retries;
|
246
|
+
mocha.grep(new RegExp(`^${testPath}$`));
|
247
|
+
const runner = mocha.run(runHandler); // TODO How handle browser corruption?
|
248
|
+
|
249
|
+
runner.on('fail', (_test, reason) => {
|
250
|
+
if (!(reason instanceof Error)) {
|
251
|
+
error = reason;
|
252
|
+
} else if (!(0, _types.isImageError)(reason)) {
|
253
|
+
var _reason$stack;
|
254
|
+
|
255
|
+
error = (_reason$stack = reason.stack) !== null && _reason$stack !== void 0 ? _reason$stack : reason.message;
|
256
|
+
} else if (typeof reason.images == 'string') {
|
257
|
+
const image = images[testScope.slice(-1)[0]];
|
258
|
+
if (image) image.error = reason.images;
|
259
|
+
} else {
|
260
|
+
const imageErrors = reason.images;
|
261
|
+
Object.keys(imageErrors).forEach(imageName => {
|
262
|
+
const image = images[imageName];
|
263
|
+
if (image) image.error = imageErrors[imageName];
|
264
|
+
});
|
265
|
+
}
|
266
|
+
});
|
267
|
+
});
|
268
|
+
|
269
|
+
_logger.logger.info(`${options.browser}:${_chalk.default.gray(sessionId)} is ready`);
|
270
|
+
|
271
|
+
(0, _messages.emitWorkerMessage)({
|
272
|
+
type: 'ready'
|
273
|
+
});
|
274
|
+
}
|
275
|
+
|
276
|
+
function hasTimeout(str) {
|
277
|
+
return str != null && str.toLowerCase().includes('timeout');
|
278
|
+
}
|
@@ -0,0 +1,124 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.deserializeStory = exports.deserializeRawStories = exports.serializeRawStories = exports.deserializeRegExp = exports.serializeRegExp = exports.isSerializedRegExp = exports.denormalizeStoryParameters = exports.combineParameters = void 0;
|
7
|
+
|
8
|
+
var _lodash = require("lodash");
|
9
|
+
|
10
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
11
|
+
|
12
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
13
|
+
|
14
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
15
|
+
|
16
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
17
|
+
|
18
|
+
// NOTE: Copy-paste from storybook/api
|
19
|
+
var combineParameters = function combineParameters() {
|
20
|
+
for (var _len = arguments.length, parameterSets = new Array(_len), _key = 0; _key < _len; _key++) {
|
21
|
+
parameterSets[_key] = arguments[_key];
|
22
|
+
}
|
23
|
+
|
24
|
+
return (// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
25
|
+
_lodash.mergeWith.apply(void 0, [{}].concat(parameterSets, [function (_, srcValue) {
|
26
|
+
// Treat arrays as scalars:
|
27
|
+
if (Array.isArray(srcValue)) return srcValue;
|
28
|
+
return undefined;
|
29
|
+
}]))
|
30
|
+
);
|
31
|
+
}; // NOTE: Copy-paste from storybook/api
|
32
|
+
|
33
|
+
|
34
|
+
exports.combineParameters = combineParameters;
|
35
|
+
|
36
|
+
var denormalizeStoryParameters = function denormalizeStoryParameters(_ref) {
|
37
|
+
var globalParameters = _ref.globalParameters,
|
38
|
+
kindParameters = _ref.kindParameters,
|
39
|
+
stories = _ref.stories;
|
40
|
+
return (0, _lodash.mapValues)(stories, function (storyData) {
|
41
|
+
var _globalParameters$cre, _kindParameters$story, _kindParameters$story2;
|
42
|
+
|
43
|
+
storyData.parameters.creevey = combineParameters((_globalParameters$cre = globalParameters.creevey) !== null && _globalParameters$cre !== void 0 ? _globalParameters$cre : {}, (_kindParameters$story = (_kindParameters$story2 = kindParameters[storyData.kind]) === null || _kindParameters$story2 === void 0 ? void 0 : _kindParameters$story2.creevey) !== null && _kindParameters$story !== void 0 ? _kindParameters$story : {}, storyData.parameters.creevey);
|
44
|
+
return storyData;
|
45
|
+
});
|
46
|
+
};
|
47
|
+
|
48
|
+
exports.denormalizeStoryParameters = denormalizeStoryParameters;
|
49
|
+
|
50
|
+
var isSerializedRegExp = function isSerializedRegExp(exp) {
|
51
|
+
return _typeof(exp) === 'object' && exp !== null && Reflect.get(exp, '__regexp') === true;
|
52
|
+
};
|
53
|
+
|
54
|
+
exports.isSerializedRegExp = isSerializedRegExp;
|
55
|
+
|
56
|
+
var serializeRegExp = function serializeRegExp(exp) {
|
57
|
+
var source = exp.source,
|
58
|
+
flags = exp.flags;
|
59
|
+
return {
|
60
|
+
__regexp: true,
|
61
|
+
source: source,
|
62
|
+
flags: flags
|
63
|
+
};
|
64
|
+
};
|
65
|
+
|
66
|
+
exports.serializeRegExp = serializeRegExp;
|
67
|
+
|
68
|
+
var deserializeRegExp = function deserializeRegExp(_ref2) {
|
69
|
+
var source = _ref2.source,
|
70
|
+
flags = _ref2.flags;
|
71
|
+
return new RegExp(source, flags);
|
72
|
+
};
|
73
|
+
|
74
|
+
exports.deserializeRegExp = deserializeRegExp;
|
75
|
+
|
76
|
+
var serializeRawStories = function serializeRawStories(stories) {
|
77
|
+
return (0, _lodash.mapValues)(stories, function (storyData) {
|
78
|
+
var creevey = storyData.parameters.creevey;
|
79
|
+
|
80
|
+
if (creevey !== null && creevey !== void 0 && creevey.skip) {
|
81
|
+
creevey.skip = (0, _lodash.cloneDeepWith)(creevey.skip, function (value) {
|
82
|
+
if (value instanceof RegExp) {
|
83
|
+
return serializeRegExp(value);
|
84
|
+
}
|
85
|
+
|
86
|
+
return undefined;
|
87
|
+
});
|
88
|
+
}
|
89
|
+
|
90
|
+
return storyData;
|
91
|
+
});
|
92
|
+
};
|
93
|
+
|
94
|
+
exports.serializeRawStories = serializeRawStories;
|
95
|
+
|
96
|
+
var deserializeRawStories = function deserializeRawStories(stories) {
|
97
|
+
return (0, _lodash.mapValues)(stories, deserializeStory);
|
98
|
+
};
|
99
|
+
|
100
|
+
exports.deserializeRawStories = deserializeRawStories;
|
101
|
+
|
102
|
+
var deserializeStory = function deserializeStory(story) {
|
103
|
+
var creevey = story.parameters.creevey;
|
104
|
+
|
105
|
+
if (creevey !== null && creevey !== void 0 && creevey.skip) {
|
106
|
+
return _objectSpread(_objectSpread({}, story), {}, {
|
107
|
+
parameters: _objectSpread(_objectSpread({}, story.parameters), {}, {
|
108
|
+
creevey: _objectSpread(_objectSpread({}, creevey), {}, {
|
109
|
+
skip: (0, _lodash.cloneDeepWith)(creevey.skip, function (value) {
|
110
|
+
if (isSerializedRegExp(value)) {
|
111
|
+
return deserializeRegExp(value);
|
112
|
+
}
|
113
|
+
|
114
|
+
return undefined;
|
115
|
+
})
|
116
|
+
})
|
117
|
+
})
|
118
|
+
});
|
119
|
+
}
|
120
|
+
|
121
|
+
return story;
|
122
|
+
};
|
123
|
+
|
124
|
+
exports.deserializeStory = deserializeStory;
|
package/lib/cjs/types.js
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.noop = noop;
|
7
|
+
exports.isDefined = isDefined;
|
8
|
+
exports.isTest = isTest;
|
9
|
+
exports.isObject = isObject;
|
10
|
+
exports.isString = isString;
|
11
|
+
exports.isFunction = isFunction;
|
12
|
+
exports.isImageError = isImageError;
|
13
|
+
exports.isProcessMessage = isProcessMessage;
|
14
|
+
exports.isWorkerMessage = isWorkerMessage;
|
15
|
+
exports.isStoriesMessage = isStoriesMessage;
|
16
|
+
exports.isTestMessage = isTestMessage;
|
17
|
+
exports.isWebpackMessage = isWebpackMessage;
|
18
|
+
exports.isDockerMessage = isDockerMessage;
|
19
|
+
|
20
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
21
|
+
|
22
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
23
|
+
function noop() {
|
24
|
+
/* noop */
|
25
|
+
}
|
26
|
+
|
27
|
+
function isDefined(value) {
|
28
|
+
return value !== null && value !== undefined;
|
29
|
+
}
|
30
|
+
|
31
|
+
function isTest(x) {
|
32
|
+
return isDefined(x) && 'id' in x && 'storyId' in x && typeof x.id == 'string' && typeof x.storyId == 'string';
|
33
|
+
}
|
34
|
+
|
35
|
+
function isObject(x) {
|
36
|
+
return typeof x == 'object' && x != null;
|
37
|
+
}
|
38
|
+
|
39
|
+
function isString(x) {
|
40
|
+
return typeof x == 'string';
|
41
|
+
} // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
42
|
+
|
43
|
+
|
44
|
+
function isFunction(x) {
|
45
|
+
return typeof x == 'function';
|
46
|
+
}
|
47
|
+
|
48
|
+
function isImageError(error) {
|
49
|
+
return error instanceof Error && 'images' in error;
|
50
|
+
}
|
51
|
+
|
52
|
+
function isProcessMessage(message) {
|
53
|
+
return isObject(message) && 'scope' in message;
|
54
|
+
}
|
55
|
+
|
56
|
+
function isWorkerMessage(message) {
|
57
|
+
return isProcessMessage(message) && message.scope == 'worker';
|
58
|
+
}
|
59
|
+
|
60
|
+
function isStoriesMessage(message) {
|
61
|
+
return isProcessMessage(message) && message.scope == 'stories';
|
62
|
+
}
|
63
|
+
|
64
|
+
function isTestMessage(message) {
|
65
|
+
return isProcessMessage(message) && message.scope == 'test';
|
66
|
+
}
|
67
|
+
|
68
|
+
function isWebpackMessage(message) {
|
69
|
+
return isProcessMessage(message) && message.scope == 'webpack';
|
70
|
+
}
|
71
|
+
|
72
|
+
function isDockerMessage(message) {
|
73
|
+
return isProcessMessage(message) && message.scope == 'docker';
|
74
|
+
}
|
package/lib/esm/cli.js
ADDED