creevey 0.9.0-beta.2 → 0.9.0-beta.20
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/CHANGELOG.md +51 -0
- package/README.md +9 -1
- package/addon/README.md +3 -0
- package/addon/package.json +5 -0
- package/docs/config.md +29 -26
- package/jest.config.js +6 -0
- package/lib/cjs/cli.js +1 -0
- package/lib/cjs/client/addon/Manager.js +170 -390
- package/lib/cjs/client/addon/components/Addon.js +17 -45
- package/lib/cjs/client/addon/components/Icons.js +12 -14
- package/lib/cjs/client/addon/components/Panel.js +21 -30
- package/lib/cjs/client/addon/components/TestSelect.js +20 -31
- package/lib/cjs/client/addon/components/Tools.js +35 -65
- package/lib/cjs/client/addon/decorator.js +1 -4
- package/lib/cjs/client/addon/index.js +27 -0
- package/lib/cjs/client/addon/preset.js +3 -76
- package/lib/cjs/client/addon/preview.js +11 -0
- package/lib/cjs/client/addon/readyForCapture.js +1 -4
- package/lib/cjs/client/addon/register.js +43 -82
- package/lib/cjs/client/addon/utils.js +4 -8
- package/lib/cjs/client/addon/withCreevey.js +145 -404
- package/lib/cjs/client/shared/components/ImagesView/BlendView.js +25 -35
- package/lib/cjs/client/shared/components/ImagesView/ImagesView.js +29 -41
- package/lib/cjs/client/shared/components/ImagesView/SideBySideView.js +46 -83
- package/lib/cjs/client/shared/components/ImagesView/SlideView.js +39 -67
- package/lib/cjs/client/shared/components/ImagesView/SwapView.js +26 -57
- package/lib/cjs/client/shared/components/ImagesView/index.js +9 -14
- package/lib/cjs/client/shared/components/PageFooter/PageFooter.js +13 -16
- package/lib/cjs/client/shared/components/PageFooter/Paging.js +16 -37
- package/lib/cjs/client/shared/components/PageHeader/ImagePreview.js +42 -34
- package/lib/cjs/client/shared/components/PageHeader/PageHeader.js +40 -84
- package/lib/cjs/client/shared/components/ResultsPage.js +42 -99
- package/lib/cjs/client/shared/creeveyClientApi.js +56 -93
- package/lib/cjs/client/shared/helpers.js +149 -274
- package/lib/cjs/client/shared/viewMode.js +5 -9
- 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 +79 -38
- package/lib/cjs/client/web/main.js.LICENSE.txt +34 -0
- package/lib/cjs/creevey.js +15 -30
- package/lib/cjs/index.js +0 -15
- package/lib/cjs/server/config.js +16 -36
- package/lib/cjs/server/docker.js +8 -34
- package/lib/cjs/server/index.js +9 -34
- package/lib/cjs/server/logger.js +7 -20
- package/lib/cjs/server/master/api.js +1 -14
- package/lib/cjs/server/master/index.js +25 -49
- package/lib/cjs/server/master/master.js +6 -21
- package/lib/cjs/server/master/pool.js +10 -53
- package/lib/cjs/server/master/runner.js +65 -105
- package/lib/cjs/server/master/server.js +10 -29
- package/lib/cjs/server/messages.js +14 -62
- package/lib/cjs/server/selenium/browser.js +149 -185
- package/lib/cjs/server/selenium/index.js +0 -4
- package/lib/cjs/server/selenium/selenoid.js +18 -44
- package/lib/cjs/server/stories.js +35 -57
- package/lib/cjs/server/storybook/providers/browser.js +15 -29
- package/lib/cjs/server/storybook/providers/hybrid.js +16 -37
- package/lib/cjs/server/telemetry.js +167 -0
- package/lib/cjs/server/testsFiles/parser.js +3 -19
- package/lib/cjs/server/testsFiles/register.js +8 -14
- package/lib/cjs/server/update.js +4 -25
- package/lib/cjs/server/utils.js +35 -76
- 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 +16 -43
- package/lib/cjs/server/worker/worker.js +32 -72
- package/lib/cjs/shared/index.js +87 -0
- package/lib/cjs/shared/serializeRegExp.js +34 -0
- package/lib/cjs/types.js +11 -20
- package/lib/esm/cli.js +1 -1
- package/lib/esm/client/addon/Manager.js +170 -381
- package/lib/esm/client/addon/components/Addon.js +15 -34
- package/lib/esm/client/addon/components/Icons.js +10 -6
- package/lib/esm/client/addon/components/Panel.js +20 -18
- package/lib/esm/client/addon/components/TestSelect.js +19 -23
- package/lib/esm/client/addon/components/Tools.js +33 -49
- package/lib/esm/client/addon/decorator.js +1 -1
- package/lib/esm/client/addon/index.js +2 -0
- package/lib/esm/client/addon/preset.js +2 -56
- package/lib/esm/client/addon/preview.js +5 -0
- package/lib/esm/client/addon/readyForCapture.js +1 -3
- package/lib/esm/client/addon/register.js +41 -67
- package/lib/esm/client/addon/utils.js +3 -7
- package/lib/esm/client/addon/withCreevey.js +142 -388
- package/lib/esm/client/shared/components/ImagesView/BlendView.js +22 -18
- package/lib/esm/client/shared/components/ImagesView/ImagesView.js +27 -25
- package/lib/esm/client/shared/components/ImagesView/SideBySideView.js +43 -63
- package/lib/esm/client/shared/components/ImagesView/SlideView.js +36 -47
- package/lib/esm/client/shared/components/ImagesView/SwapView.js +23 -40
- package/lib/esm/client/shared/components/PageFooter/PageFooter.js +12 -8
- package/lib/esm/client/shared/components/PageFooter/Paging.js +15 -29
- package/lib/esm/client/shared/components/PageHeader/ImagePreview.js +40 -25
- package/lib/esm/client/shared/components/PageHeader/PageHeader.js +38 -66
- package/lib/esm/client/shared/components/ResultsPage.js +39 -75
- package/lib/esm/client/shared/creeveyClientApi.js +56 -90
- package/lib/esm/client/shared/helpers.js +133 -230
- package/lib/esm/client/shared/viewMode.js +4 -4
- 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 +13 -16
- package/lib/esm/index.js +1 -4
- package/lib/esm/server/config.js +9 -16
- package/lib/esm/server/docker.js +6 -14
- package/lib/esm/server/index.js +8 -22
- package/lib/esm/server/logger.js +0 -1
- package/lib/esm/server/master/api.js +0 -9
- package/lib/esm/server/master/index.js +25 -35
- package/lib/esm/server/master/master.js +2 -7
- package/lib/esm/server/master/pool.js +8 -41
- package/lib/esm/server/master/runner.js +64 -90
- package/lib/esm/server/master/server.js +9 -11
- package/lib/esm/server/messages.js +8 -42
- package/lib/esm/server/selenium/browser.js +147 -163
- package/lib/esm/server/selenium/selenoid.js +16 -27
- package/lib/esm/server/stories.js +34 -46
- package/lib/esm/server/storybook/providers/browser.js +12 -17
- package/lib/esm/server/storybook/providers/hybrid.js +11 -22
- package/lib/esm/server/telemetry.js +160 -0
- package/lib/esm/server/testsFiles/parser.js +0 -6
- package/lib/esm/server/testsFiles/register.js +6 -7
- package/lib/esm/server/update.js +1 -13
- package/lib/esm/server/utils.js +20 -41
- 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 +15 -29
- package/lib/esm/server/worker/worker.js +31 -48
- package/lib/esm/shared/index.js +77 -0
- package/lib/esm/shared/serializeRegExp.js +24 -0
- package/lib/esm/types.js +5 -1
- package/lib/types/client/addon/Manager.d.ts +3 -3
- 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/Tools.d.ts +1 -0
- package/lib/types/client/addon/decorator.d.ts +1 -1
- package/lib/types/client/addon/index.d.ts +2 -0
- package/lib/types/client/addon/preset.d.ts +2 -24
- package/lib/types/client/addon/preview.d.ts +4 -0
- package/lib/types/client/addon/utils.d.ts +1 -0
- package/lib/types/client/addon/withCreevey.d.ts +4 -3
- package/lib/types/client/shared/components/ImagesView/BlendView.d.ts +3 -1
- 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/PageHeader/ImagePreview.d.ts +3 -1
- package/lib/types/client/shared/components/ResultsPage.d.ts +3 -1
- package/lib/types/client/web/CreeveyLoader.d.ts +1 -1
- package/lib/types/client/web/CreeveyView/SideBar/Checkbox.d.ts +6 -3
- package/lib/types/client/web/CreeveyView/SideBar/Search.d.ts +1 -0
- package/lib/types/client/web/CreeveyView/SideBar/SuiteLink.d.ts +19 -14
- 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/client/web/KeyboardEventsContext.d.ts +4 -2
- package/lib/types/index.d.ts +4 -1
- package/lib/types/server/logger.d.ts +6 -2
- package/lib/types/server/messages.d.ts +14 -12
- package/lib/types/server/selenium/browser.d.ts +5 -3
- package/lib/types/server/storybook/providers/browser.d.ts +2 -4
- package/lib/types/server/storybook/providers/hybrid.d.ts +2 -4
- package/lib/types/server/telemetry.d.ts +2 -0
- package/lib/types/server/utils.d.ts +5 -1
- package/lib/types/shared/index.d.ts +7 -0
- package/lib/types/shared/serializeRegExp.d.ts +9 -0
- package/lib/types/types.d.ts +29 -36
- package/package.json +132 -133
- package/types/global.d.ts +5 -0
- package/lib/cjs/client/web/1.js +0 -13
- package/lib/cjs/client/web/2.js +0 -1
- package/lib/cjs/server/extract.js +0 -50
- package/lib/cjs/server/loaders/babel/creevey-plugin.js +0 -88
- package/lib/cjs/server/loaders/babel/helpers.js +0 -479
- package/lib/cjs/server/loaders/babel/register.js +0 -126
- 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 -286
- package/lib/cjs/server/loaders/webpack/creevey-loader.js +0 -174
- package/lib/cjs/server/loaders/webpack/dummy-hmr.js +0 -44
- 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 -68
- package/lib/cjs/server/storybook/helpers.js +0 -165
- package/lib/cjs/server/storybook/providers/nodejs.js +0 -239
- package/lib/cjs/shared.js +0 -124
- package/lib/esm/server/extract.js +0 -34
- package/lib/esm/server/loaders/babel/creevey-plugin.js +0 -74
- package/lib/esm/server/loaders/babel/helpers.js +0 -462
- package/lib/esm/server/loaders/babel/register.js +0 -105
- 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 -263
- package/lib/esm/server/loaders/webpack/creevey-loader.js +0 -153
- package/lib/esm/server/loaders/webpack/dummy-hmr.js +0 -36
- 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 -44
- package/lib/esm/server/storybook/helpers.js +0 -106
- package/lib/esm/server/storybook/providers/nodejs.js +0 -217
- package/lib/esm/shared.js +0 -93
- 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 -2
- 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 -18
- package/lib/types/server/storybook/helpers.d.ts +0 -24
- package/lib/types/server/storybook/providers/nodejs.d.ts +0 -9
- package/lib/types/shared.d.ts +0 -16
- package/preset.js +0 -9
- package/storybook-static/stories.json +0 -21
- package/types/mdx.d.ts +0 -6
@@ -0,0 +1,167 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.sendScreenshotsCount = sendScreenshotsCount;
|
7
|
+
var _path = _interopRequireDefault(require("path"));
|
8
|
+
var _https = _interopRequireDefault(require("https"));
|
9
|
+
var _shelljs = require("shelljs");
|
10
|
+
var _qs = require("qs");
|
11
|
+
var _lodash = require("lodash");
|
12
|
+
var _uuid = require("uuid");
|
13
|
+
var _types = require("../types");
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
15
|
+
const konturGitHost = 'git.skbkontur.ru';
|
16
|
+
const trackId = 232; // front_infra
|
17
|
+
const origin = 'http://localhost/';
|
18
|
+
const category = 'tests_run';
|
19
|
+
const action = 'done';
|
20
|
+
function buildPathname(label, info) {
|
21
|
+
return `/track-event?${(0, _qs.stringify)({
|
22
|
+
id: trackId,
|
23
|
+
c: category,
|
24
|
+
a: action,
|
25
|
+
l: label,
|
26
|
+
cv: typeof info == 'string' ? info : JSON.stringify(info),
|
27
|
+
ts: new Date().toISOString(),
|
28
|
+
url: origin
|
29
|
+
})}`;
|
30
|
+
}
|
31
|
+
function sanitizeGridUrl(gridUrl) {
|
32
|
+
const url = new URL(gridUrl);
|
33
|
+
url.username = url.username ? '********' : '';
|
34
|
+
url.password = url.password ? '********' : '';
|
35
|
+
return url.toString();
|
36
|
+
}
|
37
|
+
function tryGetRepoUrl() {
|
38
|
+
try {
|
39
|
+
const gitRemoteOutput = (0, _shelljs.exec)('git remote -v', {
|
40
|
+
silent: true
|
41
|
+
});
|
42
|
+
const [, repoUrl] = gitRemoteOutput.stdout.match(/origin\s+(.*)\s+\(fetch\)/) ?? [];
|
43
|
+
return [repoUrl, null];
|
44
|
+
} catch (error) {
|
45
|
+
return [undefined, error];
|
46
|
+
}
|
47
|
+
}
|
48
|
+
function tryGetStorybookVersion() {
|
49
|
+
try {
|
50
|
+
const storybookPackageOutput = (0, _shelljs.exec)(`node -e "console.log(JSON.stringify(require('storybook/package.json')))"`, {
|
51
|
+
silent: true
|
52
|
+
});
|
53
|
+
const storybookPackage = JSON.parse(storybookPackageOutput);
|
54
|
+
return [storybookPackage.version, null];
|
55
|
+
} catch (error) {
|
56
|
+
return [undefined, error];
|
57
|
+
}
|
58
|
+
}
|
59
|
+
function tryGetCreeveyVersion() {
|
60
|
+
try {
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-missing-require
|
62
|
+
const creeveyPackage = require('creevey/package.json');
|
63
|
+
return [creeveyPackage.version, null];
|
64
|
+
} catch (error) {
|
65
|
+
return [undefined, error];
|
66
|
+
}
|
67
|
+
}
|
68
|
+
function sendRequest(options) {
|
69
|
+
return new Promise((resolve, reject) => {
|
70
|
+
const req = _https.default.request(options, res => {
|
71
|
+
if (res.statusCode) {
|
72
|
+
if (res.statusCode >= 200 && res.statusCode < 300) {
|
73
|
+
resolve();
|
74
|
+
} else if (res.statusCode >= 300 && res.statusCode < 400) {
|
75
|
+
reject(new Error(`Redirection error: ${res.statusCode}`));
|
76
|
+
} else if (res.statusCode >= 400 && res.statusCode < 500) {
|
77
|
+
reject(new Error(`Client error: ${res.statusCode}`));
|
78
|
+
} else if (res.statusCode >= 500 && res.statusCode < 600) {
|
79
|
+
reject(new Error(`Server error: ${res.statusCode}`));
|
80
|
+
} else {
|
81
|
+
reject(new Error(`Unexpected status code: ${res.statusCode}`));
|
82
|
+
}
|
83
|
+
} else {
|
84
|
+
reject(new Error('No status code received'));
|
85
|
+
}
|
86
|
+
});
|
87
|
+
req.on('error', reject);
|
88
|
+
req.end();
|
89
|
+
});
|
90
|
+
}
|
91
|
+
async function sendScreenshotsCount(config, options, status) {
|
92
|
+
var _config$storiesProvid;
|
93
|
+
const [repoUrl] = tryGetRepoUrl();
|
94
|
+
const isKonturRepo = repoUrl === null || repoUrl === void 0 ? void 0 : repoUrl.includes(konturGitHost);
|
95
|
+
if (!isKonturRepo || config.disableTelemetry) return;
|
96
|
+
const uuid = (0, _uuid.v4)();
|
97
|
+
const [creeveyVersion, creeveyVersionError] = tryGetCreeveyVersion();
|
98
|
+
const [storybookVersion, storybookVersionError] = tryGetStorybookVersion();
|
99
|
+
const gridUrl = config.gridUrl ? sanitizeGridUrl(config.gridUrl) : undefined;
|
100
|
+
const configMeta = {
|
101
|
+
runId: uuid,
|
102
|
+
repoUrl: repoUrl ?? 'unknown',
|
103
|
+
creeveyVersion: creeveyVersion ?? 'unknown',
|
104
|
+
storybookVersion: storybookVersion ?? 'unknown',
|
105
|
+
options: options._,
|
106
|
+
gridUrl,
|
107
|
+
screenDir: config.screenDir ? _path.default.relative(process.cwd(), config.screenDir) : undefined,
|
108
|
+
useDocker: config.useDocker,
|
109
|
+
dockerImage: config.dockerImage,
|
110
|
+
maxRetries: config.maxRetries,
|
111
|
+
diffOptions: config.diffOptions,
|
112
|
+
storiesProvider: ((_config$storiesProvid = config.storiesProvider) === null || _config$storiesProvid === void 0 ? void 0 : _config$storiesProvid.providerName) ?? 'unknown',
|
113
|
+
errors: [creeveyVersionError, storybookVersionError].some(Boolean) ? [creeveyVersionError ? `Error while getting creevey version: ${creeveyVersionError.message}` : undefined, storybookVersionError ? `Error while getting storybook version: ${storybookVersionError.message}` : undefined].filter(Boolean) : undefined
|
114
|
+
};
|
115
|
+
const browsersMeta = {
|
116
|
+
runId: uuid,
|
117
|
+
browsers: Object.fromEntries(Object.entries(config.browsers ?? {}).map(([name, browser]) => [name, typeof browser === 'object' ? {
|
118
|
+
name: browser.name,
|
119
|
+
gridUrl: browser.gridUrl ? sanitizeGridUrl(browser.gridUrl) : undefined,
|
120
|
+
browserName: browser.browserName,
|
121
|
+
browserVersion: browser.browserVersion,
|
122
|
+
platformName: browser.platformName,
|
123
|
+
viewport: browser.viewport,
|
124
|
+
limit: browser.limit,
|
125
|
+
dockerImage: browser.dockerImage,
|
126
|
+
'se:teamname': browser['se:teamname']
|
127
|
+
} : browser]))
|
128
|
+
};
|
129
|
+
const tests = {};
|
130
|
+
Object.values((status === null || status === void 0 ? void 0 : status.tests) ?? {}).filter(_types.isDefined).forEach(test => {
|
131
|
+
(0, _lodash.set)(tests, [...test.storyPath, test.testName, test.browser].filter(_types.isDefined), test.id);
|
132
|
+
});
|
133
|
+
const testsMeta = {
|
134
|
+
runId: uuid,
|
135
|
+
tests
|
136
|
+
};
|
137
|
+
const fullPathname = buildPathname('tests', testsMeta);
|
138
|
+
// NOTE: Keep request path shorter than 32k symbols
|
139
|
+
const chunksCount = Math.ceil(fullPathname.length / 32_000);
|
140
|
+
let chunks = [];
|
141
|
+
if (chunksCount > 1) {
|
142
|
+
const testsString = JSON.stringify(tests);
|
143
|
+
const chunkSize = Math.ceil(testsString.length / chunksCount);
|
144
|
+
chunks = Array.from({
|
145
|
+
length: chunksCount
|
146
|
+
}).map((_, chunkIndex) => testsString.slice(chunkIndex * chunkSize, (chunkIndex + 1) * chunkSize)).map((testsPart, seq) => buildPathname('tests', {
|
147
|
+
runId: uuid,
|
148
|
+
tests: testsPart,
|
149
|
+
seq
|
150
|
+
}));
|
151
|
+
} else {
|
152
|
+
chunks = [fullPathname];
|
153
|
+
}
|
154
|
+
await Promise.all([sendRequest({
|
155
|
+
host: 'metrika.kontur.ru',
|
156
|
+
path: buildPathname('config', configMeta),
|
157
|
+
protocol: 'https:'
|
158
|
+
}), sendRequest({
|
159
|
+
host: 'metrika.kontur.ru',
|
160
|
+
path: buildPathname('browsers', browsersMeta),
|
161
|
+
protocol: 'https:'
|
162
|
+
}), ...chunks.map(chunk => sendRequest({
|
163
|
+
host: 'metrika.kontur.ru',
|
164
|
+
path: chunk,
|
165
|
+
protocol: 'https:'
|
166
|
+
}))]);
|
167
|
+
}
|
@@ -5,43 +5,32 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.default = parse;
|
7
7
|
exports.test = exports.story = exports.kind = void 0;
|
8
|
-
|
9
8
|
var _csf = require("@storybook/csf");
|
10
|
-
|
11
|
-
function
|
12
|
-
|
13
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
14
|
-
|
9
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
10
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
15
11
|
async function parse(files) {
|
16
12
|
result = {};
|
17
|
-
await Promise.all(files.map(async file => Promise
|
13
|
+
await Promise.all(files.map(async file => (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(file)));
|
18
14
|
return result;
|
19
15
|
}
|
20
|
-
|
21
16
|
let result = {};
|
22
17
|
let kindTitle = '';
|
23
18
|
let storyTitle = '';
|
24
19
|
let storyParams = null;
|
25
|
-
|
26
20
|
const setStoryParameters = params => {
|
27
21
|
storyParams = params;
|
28
22
|
};
|
29
|
-
|
30
23
|
const getStoryId = (kindTitle, storyTitle) => {
|
31
24
|
return (0, _csf.toId)(kindTitle, (0, _csf.storyNameFromExport)(storyTitle));
|
32
25
|
};
|
33
|
-
|
34
26
|
const kind = (title, kindFn) => {
|
35
27
|
kindTitle = title;
|
36
28
|
kindFn();
|
37
29
|
kindTitle = '';
|
38
30
|
};
|
39
|
-
|
40
31
|
exports.kind = kind;
|
41
|
-
|
42
32
|
const story = (title, storyFn) => {
|
43
33
|
var _result$storyId;
|
44
|
-
|
45
34
|
storyTitle = title;
|
46
35
|
storyParams = null;
|
47
36
|
storyFn({
|
@@ -54,19 +43,14 @@ const story = (title, storyFn) => {
|
|
54
43
|
storyTitle = '';
|
55
44
|
storyParams = null;
|
56
45
|
};
|
57
|
-
|
58
46
|
exports.story = story;
|
59
|
-
|
60
47
|
const test = (title, testFn) => {
|
61
48
|
const storyId = getStoryId(kindTitle, storyTitle);
|
62
|
-
|
63
49
|
if (!result[storyId]) {
|
64
50
|
result[storyId] = {};
|
65
51
|
}
|
66
|
-
|
67
52
|
result[storyId].tests = Object.assign({}, result[storyId].tests, {
|
68
53
|
[title]: testFn
|
69
54
|
});
|
70
55
|
};
|
71
|
-
|
72
56
|
exports.test = test;
|
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.default = register;
|
7
|
-
|
8
7
|
var _pirates = require("pirates");
|
9
|
-
|
10
8
|
var _getTsconfig = require("get-tsconfig");
|
11
|
-
|
12
|
-
function
|
13
|
-
|
14
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
15
|
-
|
9
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
10
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
16
11
|
async function register(config) {
|
17
12
|
(0, _pirates.addHook)(() => '', {
|
18
13
|
exts: ['.jpg', '.jpeg', '.png', '.gif', '.eot', '.otf', '.svg', '.ttf', '.woff', '.woff2', '.css', '.less', '.scss', '.styl'],
|
@@ -20,8 +15,9 @@ async function register(config) {
|
|
20
15
|
});
|
21
16
|
const {
|
22
17
|
path: tsConfigPath
|
23
|
-
} = (0, _getTsconfig.getTsconfig)(config.tsConfig) || {};
|
18
|
+
} = (0, _getTsconfig.getTsconfig)(config.tsConfig) || {};
|
24
19
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
25
21
|
(await Promise.resolve().then(() => _interopRequireWildcard(require('@babel/register')))).default(config.babelOptions({
|
26
22
|
babelrc: false,
|
27
23
|
rootMode: 'upward-optional',
|
@@ -37,12 +33,10 @@ async function register(config) {
|
|
37
33
|
},
|
38
34
|
modules: 'commonjs'
|
39
35
|
}]],
|
40
|
-
plugins: [['@babel/plugin-transform-runtime'], ['babel-plugin-tsconfig-paths', {
|
36
|
+
plugins: [['@babel/plugin-transform-runtime'], ...(tsConfigPath ? [['babel-plugin-tsconfig-paths', {
|
41
37
|
tsconfig: tsConfigPath
|
42
|
-
}]]
|
38
|
+
}]] : [])]
|
43
39
|
}));
|
44
|
-
|
45
|
-
|
46
|
-
transpileOnly: true
|
47
|
-
});
|
40
|
+
|
41
|
+
// (await import('ts-node')).register({ project: tsConfigPath, transpileOnly: true });
|
48
42
|
}
|
package/lib/cjs/server/update.js
CHANGED
@@ -4,21 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.default = update;
|
7
|
-
|
8
7
|
var _path = _interopRequireDefault(require("path"));
|
9
|
-
|
10
8
|
var _fs = _interopRequireWildcard(require("fs"));
|
11
|
-
|
12
9
|
var _micromatch = _interopRequireDefault(require("micromatch"));
|
13
|
-
|
14
10
|
var _types = require("../types");
|
15
|
-
|
16
|
-
function
|
17
|
-
|
18
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
19
|
-
|
20
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
21
|
-
|
11
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
12
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
22
14
|
function tryToLoadTestsData(filename) {
|
23
15
|
try {
|
24
16
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
@@ -27,32 +19,22 @@ function tryToLoadTestsData(filename) {
|
|
27
19
|
/* noop */
|
28
20
|
}
|
29
21
|
}
|
30
|
-
|
31
22
|
const actualRegex = /^(.*)-actual-(\d+)\.png$/i;
|
32
|
-
|
33
23
|
function approve(dirents, srcPath, dstPath, testPaths, isMatch) {
|
34
|
-
dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => {
|
35
|
-
var _images$get;
|
36
|
-
|
37
|
-
return Number(retry) > ((_images$get = images.get(imageName)) !== null && _images$get !== void 0 ? _images$get : -1) ? images.set(imageName, Number(retry)) : images;
|
38
|
-
}, new Map()).forEach((retry, imageName) => {
|
24
|
+
dirents.filter(dirent => dirent.isFile()).map(dirent => actualRegex.exec(dirent.name)).filter(_types.isDefined).filter(([fileName, imageName]) => !testPaths || testPaths.find(([token]) => token == imageName) && isMatch(_path.default.join(srcPath, fileName))).reduce((images, [, imageName, retry]) => Number(retry) > (images.get(imageName) ?? -1) ? images.set(imageName, Number(retry)) : images, new Map()).forEach((retry, imageName) => {
|
39
25
|
(0, _fs.mkdirSync)(dstPath, {
|
40
26
|
recursive: true
|
41
27
|
});
|
42
|
-
|
43
28
|
_fs.default.copyFileSync(_path.default.join(srcPath, `${imageName}-actual-${retry}.png`), _path.default.join(dstPath, `${imageName}.png`));
|
44
29
|
});
|
45
30
|
}
|
46
|
-
|
47
31
|
function traverse(srcPath, dstPath, testPaths, isMatch) {
|
48
32
|
const dirents = _fs.default.readdirSync(srcPath, {
|
49
33
|
withFileTypes: true
|
50
34
|
});
|
51
|
-
|
52
35
|
approve(dirents, srcPath, dstPath, testPaths, isMatch);
|
53
36
|
dirents.filter(dirent => dirent.isDirectory()).map(dirent => [dirent.name, testPaths === null || testPaths === void 0 ? void 0 : testPaths.map(([token, ...restPath]) => token == dirent.name ? restPath : null).filter(_types.isDefined)]).filter(([, paths]) => !paths || paths.length > 0).forEach(([dirname, paths]) => traverse(_path.default.join(srcPath, dirname), _path.default.join(dstPath, dirname), paths, isMatch));
|
54
37
|
}
|
55
|
-
|
56
38
|
function update(config, grepPattern) {
|
57
39
|
const {
|
58
40
|
reportDir,
|
@@ -64,13 +46,11 @@ function update(config, grepPattern) {
|
|
64
46
|
const testsMeta = tryToLoadTestsData(`${reportDir}/tests.json`);
|
65
47
|
const testsReport = tryToLoadTestsData(`${reportDir}/data`);
|
66
48
|
let testPaths = null;
|
67
|
-
|
68
49
|
if (testsMeta && testsReport) {
|
69
50
|
testPaths = Object.values(testsMeta).filter(_types.isDefined).filter(({
|
70
51
|
id
|
71
52
|
}) => {
|
72
53
|
var _testsReport$id;
|
73
|
-
|
74
54
|
return ((_testsReport$id = testsReport[id]) === null || _testsReport$id === void 0 ? void 0 : _testsReport$id.status) == 'failed';
|
75
55
|
}).map(({
|
76
56
|
storyPath,
|
@@ -78,6 +58,5 @@ function update(config, grepPattern) {
|
|
78
58
|
browser
|
79
59
|
}) => [...storyPath, ...(testName ? [testName] : []), browser]);
|
80
60
|
}
|
81
|
-
|
82
61
|
traverse(reportDir, screenDir, testPaths, value => isMatch(_path.default.relative(reportDir, value)));
|
83
62
|
}
|
package/lib/cjs/server/utils.js
CHANGED
@@ -3,82 +3,58 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
7
|
-
exports.shutdownWorkers = shutdownWorkers;
|
8
|
-
exports.shutdown = shutdown;
|
6
|
+
exports.extensions = exports.downloadBinary = exports.LOCALHOST_REGEXP = void 0;
|
9
7
|
exports.getCreeveyCache = getCreeveyCache;
|
8
|
+
exports.isShuttingDown = exports.isInsideDocker = void 0;
|
9
|
+
exports.readDirRecursive = readDirRecursive;
|
10
|
+
exports.removeProps = removeProps;
|
10
11
|
exports.runSequence = runSequence;
|
12
|
+
exports.shouldSkip = shouldSkip;
|
13
|
+
exports.shouldSkipByOption = shouldSkipByOption;
|
14
|
+
exports.shutdown = shutdown;
|
15
|
+
exports.shutdownWorkers = shutdownWorkers;
|
16
|
+
exports.skipOptionKeys = void 0;
|
11
17
|
exports.testsToImages = testsToImages;
|
12
|
-
exports.removeProps = removeProps;
|
13
|
-
exports.readDirRecursive = readDirRecursive;
|
14
|
-
exports.downloadBinary = exports.isInsideDocker = exports.skipOptionKeys = exports.extensions = exports.LOCALHOST_REGEXP = exports.isShuttingDown = void 0;
|
15
|
-
|
16
18
|
var _fs = require("fs");
|
17
|
-
|
18
19
|
var _cluster = _interopRequireDefault(require("cluster"));
|
19
|
-
|
20
20
|
var _types = require("../types");
|
21
|
-
|
22
21
|
var _messages = require("./messages");
|
23
|
-
|
24
22
|
var _findCacheDir = _interopRequireDefault(require("find-cache-dir"));
|
25
|
-
|
26
23
|
var _https = require("https");
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
const isShuttingDown = {
|
24
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
25
|
+
const isShuttingDown = exports.isShuttingDown = {
|
31
26
|
current: false
|
32
27
|
};
|
33
|
-
exports.
|
34
|
-
const
|
35
|
-
exports.
|
36
|
-
const extensions = ['.js', '.jsx', '.ts', '.tsx'];
|
37
|
-
exports.extensions = extensions;
|
38
|
-
const skipOptionKeys = ['in', 'kinds', 'stories', 'tests', 'reason'];
|
39
|
-
exports.skipOptionKeys = skipOptionKeys;
|
40
|
-
|
28
|
+
const LOCALHOST_REGEXP = exports.LOCALHOST_REGEXP = /(localhost|127\.0\.0\.1)/i;
|
29
|
+
const extensions = exports.extensions = ['.js', '.jsx', '.ts', '.tsx'];
|
30
|
+
const skipOptionKeys = exports.skipOptionKeys = ['in', 'kinds', 'stories', 'tests', 'reason'];
|
41
31
|
function matchBy(pattern, value) {
|
42
32
|
return typeof pattern == 'string' && pattern == value || Array.isArray(pattern) && pattern.includes(value) || pattern instanceof RegExp && pattern.test(value) || !(0, _types.isDefined)(pattern);
|
43
33
|
}
|
44
|
-
|
45
34
|
function shouldSkip(browser, meta, skipOptions, test) {
|
46
35
|
if (typeof skipOptions != 'object') {
|
47
36
|
return skipOptions;
|
48
37
|
}
|
49
|
-
|
50
|
-
if (Array.isArray(skipOptions)) {
|
51
|
-
for (const skip of skipOptions) {
|
52
|
-
const reason = shouldSkip(browser, meta, skip, test);
|
53
|
-
if (reason) return reason;
|
54
|
-
}
|
55
|
-
|
56
|
-
return false;
|
57
|
-
}
|
58
|
-
|
59
|
-
let hasSkipOptionKeys = false;
|
60
|
-
|
61
38
|
for (const skipKey in skipOptions) {
|
62
|
-
|
63
|
-
hasSkipOptionKeys = true;
|
64
|
-
continue;
|
65
|
-
}
|
66
|
-
|
67
|
-
const reason = shouldSkip(browser, meta, {
|
68
|
-
reason: skipKey,
|
69
|
-
...skipOptions[skipKey]
|
70
|
-
}, test);
|
39
|
+
const reason = shouldSkipByOption(browser, meta, skipOptions[skipKey], skipKey, test);
|
71
40
|
if (reason) return reason;
|
72
41
|
}
|
73
|
-
|
74
|
-
|
42
|
+
return false;
|
43
|
+
}
|
44
|
+
function shouldSkipByOption(browser, meta, skipOption, reason, test) {
|
45
|
+
if (Array.isArray(skipOption)) {
|
46
|
+
for (const skip of skipOption) {
|
47
|
+
const result = shouldSkipByOption(browser, meta, skip, reason, test);
|
48
|
+
if (result) return result;
|
49
|
+
}
|
50
|
+
return false;
|
51
|
+
}
|
75
52
|
const {
|
76
53
|
in: browsers,
|
77
54
|
kinds,
|
78
55
|
stories,
|
79
|
-
tests
|
80
|
-
|
81
|
-
} = skipOptions;
|
56
|
+
tests
|
57
|
+
} = skipOption;
|
82
58
|
const {
|
83
59
|
kind,
|
84
60
|
story
|
@@ -89,10 +65,9 @@ function shouldSkip(browser, meta, skipOptions, test) {
|
|
89
65
|
const skipByTest = !(0, _types.isDefined)(test) || matchBy(tests, test);
|
90
66
|
return skipByBrowser && skipByKind && skipByStory && skipByTest && reason;
|
91
67
|
}
|
92
|
-
|
93
68
|
async function shutdownWorkers() {
|
94
69
|
isShuttingDown.current = true;
|
95
|
-
await Promise.all(Object.values(_cluster.default.workers).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
|
70
|
+
await Promise.all(Object.values(_cluster.default.workers ?? {}).filter(_types.isDefined).filter(worker => worker.isConnected()).map(worker => new Promise(resolve => {
|
96
71
|
const timeout = setTimeout(() => worker.kill(), 10000);
|
97
72
|
worker.on('exit', () => {
|
98
73
|
clearTimeout(timeout);
|
@@ -102,25 +77,21 @@ async function shutdownWorkers() {
|
|
102
77
|
})));
|
103
78
|
(0, _messages.emitShutdownMessage)();
|
104
79
|
}
|
105
|
-
|
106
80
|
function shutdown() {
|
107
81
|
// eslint-disable-next-line no-process-exit
|
108
82
|
process.exit();
|
109
83
|
}
|
110
|
-
|
111
84
|
function getCreeveyCache() {
|
112
85
|
return (0, _findCacheDir.default)({
|
113
86
|
name: 'creevey',
|
114
87
|
cwd: __dirname
|
115
88
|
});
|
116
89
|
}
|
117
|
-
|
118
90
|
async function runSequence(seq, predicate) {
|
119
91
|
for (const fn of seq) {
|
120
92
|
if (predicate()) await fn();
|
121
93
|
}
|
122
94
|
}
|
123
|
-
|
124
95
|
function testsToImages(tests) {
|
125
96
|
return new Set([].concat(...tests.filter(_types.isDefined).map(({
|
126
97
|
browser,
|
@@ -128,30 +99,22 @@ function testsToImages(tests) {
|
|
128
99
|
storyPath,
|
129
100
|
results
|
130
101
|
}) => {
|
131
|
-
var _results$slice
|
132
|
-
|
133
|
-
return Object.keys((_results$slice$0$imag = results === null || results === void 0 ? void 0 : (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) !== null && _results$slice$0$imag !== void 0 ? _results$slice$0$imag : {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
|
102
|
+
var _results$slice$;
|
103
|
+
return Object.keys((results === null || results === void 0 || (_results$slice$ = results.slice(-1)[0]) === null || _results$slice$ === void 0 ? void 0 : _results$slice$.images) ?? {}).map(image => `${[...storyPath, testName, browser, browser == image ? undefined : image].filter(_types.isDefined).join('/')}.png`);
|
134
104
|
})));
|
135
|
-
}
|
136
|
-
|
137
|
-
|
138
|
-
const isInsideDocker = (0, _fs.existsSync)('/proc/1/cgroup') && /docker/.test((0, _fs.readFileSync)('/proc/1/cgroup', 'utf8'));
|
139
|
-
exports.isInsideDocker = isInsideDocker;
|
105
|
+
}
|
140
106
|
|
107
|
+
// https://tuhrig.de/how-to-know-you-are-inside-a-docker-container/
|
108
|
+
const isInsideDocker = exports.isInsideDocker = (0, _fs.existsSync)('/proc/1/cgroup') && /docker/.test((0, _fs.readFileSync)('/proc/1/cgroup', 'utf8'));
|
141
109
|
const downloadBinary = (downloadUrl, destination) => new Promise((resolve, reject) => (0, _https.get)(downloadUrl, response => {
|
142
|
-
var _response$statusCode2;
|
143
|
-
|
144
110
|
if (response.statusCode == 302) {
|
145
|
-
var _response$statusCode;
|
146
|
-
|
147
111
|
const {
|
148
112
|
location
|
149
113
|
} = response.headers;
|
150
|
-
if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${
|
114
|
+
if (!location) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
|
151
115
|
return resolve(downloadBinary(location, destination));
|
152
116
|
}
|
153
|
-
|
154
|
-
if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${(_response$statusCode2 = response.statusCode) !== null && _response$statusCode2 !== void 0 ? _response$statusCode2 : 'UNKNOWN'}`));
|
117
|
+
if (response.statusCode != 200) return reject(new Error(`Couldn't download selenoid. Status code: ${response.statusCode ?? 'UNKNOWN'}`));
|
155
118
|
const fileStream = (0, _fs.createWriteStream)(destination);
|
156
119
|
response.pipe(fileStream);
|
157
120
|
fileStream.on('finish', () => {
|
@@ -163,12 +126,9 @@ const downloadBinary = (downloadUrl, destination) => new Promise((resolve, rejec
|
|
163
126
|
reject(error);
|
164
127
|
});
|
165
128
|
}));
|
166
|
-
|
167
129
|
exports.downloadBinary = downloadBinary;
|
168
|
-
|
169
130
|
function removeProps(obj, propPath) {
|
170
131
|
const [prop, ...restPath] = propPath;
|
171
|
-
|
172
132
|
if (restPath.length > 0) {
|
173
133
|
if (typeof prop == 'string') obj[prop] && removeProps(obj[prop], restPath);
|
174
134
|
if ((0, _types.isFunction)(prop)) Object.keys(obj).filter(prop).forEach(key => obj[key] && removeProps(obj[key], restPath));
|
@@ -177,7 +137,6 @@ function removeProps(obj, propPath) {
|
|
177
137
|
if ((0, _types.isFunction)(prop)) Object.keys(obj).filter(prop).forEach(key => delete obj[key]);
|
178
138
|
}
|
179
139
|
}
|
180
|
-
|
181
140
|
function readDirRecursive(dirPath) {
|
182
141
|
return [].concat(...(0, _fs.readdirSync)(dirPath, {
|
183
142
|
withFileTypes: true
|