bdy 1.12.8-dev → 1.12.8-dev-pipeline-run
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/distTs/package.json +1 -1
- package/package.json +1 -1
- package/distTs/bin/cli.js +0 -5
- package/distTs/src/agent/agent.js +0 -328
- package/distTs/src/agent/linux.js +0 -124
- package/distTs/src/agent/manager.js +0 -519
- package/distTs/src/agent/osx.js +0 -146
- package/distTs/src/agent/socket/client.js +0 -178
- package/distTs/src/agent/socket/tunnel.js +0 -237
- package/distTs/src/agent/socket.js +0 -242
- package/distTs/src/agent/system.js +0 -179
- package/distTs/src/agent/wait.js +0 -23
- package/distTs/src/agent/windows.js +0 -159
- package/distTs/src/agent.js +0 -302
- package/distTs/src/api/agent.js +0 -99
- package/distTs/src/api/buddy.js +0 -139
- package/distTs/src/api/socket.js +0 -159
- package/distTs/src/cfg.js +0 -234
- package/distTs/src/command/agent/disable.js +0 -27
- package/distTs/src/command/agent/enable.js +0 -27
- package/distTs/src/command/agent/install.js +0 -117
- package/distTs/src/command/agent/restart.js +0 -27
- package/distTs/src/command/agent/run.js +0 -19
- package/distTs/src/command/agent/start.js +0 -28
- package/distTs/src/command/agent/status.js +0 -34
- package/distTs/src/command/agent/stop.js +0 -28
- package/distTs/src/command/agent/target/disable.js +0 -27
- package/distTs/src/command/agent/target/enable.js +0 -27
- package/distTs/src/command/agent/target/status.js +0 -32
- package/distTs/src/command/agent/target.js +0 -15
- package/distTs/src/command/agent/tunnel/http.js +0 -43
- package/distTs/src/command/agent/tunnel/list.js +0 -27
- package/distTs/src/command/agent/tunnel/remove.js +0 -28
- package/distTs/src/command/agent/tunnel/start.js +0 -34
- package/distTs/src/command/agent/tunnel/status.js +0 -31
- package/distTs/src/command/agent/tunnel/tcp.js +0 -43
- package/distTs/src/command/agent/tunnel/tls.js +0 -43
- package/distTs/src/command/agent/tunnel.js +0 -23
- package/distTs/src/command/agent/uninstall.js +0 -44
- package/distTs/src/command/agent/update.js +0 -38
- package/distTs/src/command/agent/version.js +0 -21
- package/distTs/src/command/agent.js +0 -35
- package/distTs/src/command/config/add/http.js +0 -25
- package/distTs/src/command/config/add/tcp.js +0 -25
- package/distTs/src/command/config/add/tls.js +0 -25
- package/distTs/src/command/config/add.js +0 -15
- package/distTs/src/command/config/get/region.js +0 -15
- package/distTs/src/command/config/get/timeout.js +0 -15
- package/distTs/src/command/config/get/token.js +0 -15
- package/distTs/src/command/config/get/tunnel.js +0 -19
- package/distTs/src/command/config/get/tunnels.js +0 -15
- package/distTs/src/command/config/get/whitelist.js +0 -15
- package/distTs/src/command/config/get.js +0 -21
- package/distTs/src/command/config/remove/tunnel.js +0 -19
- package/distTs/src/command/config/remove.js +0 -11
- package/distTs/src/command/config/set/region.js +0 -17
- package/distTs/src/command/config/set/timeout.js +0 -17
- package/distTs/src/command/config/set/token.js +0 -16
- package/distTs/src/command/config/set/whitelist.js +0 -17
- package/distTs/src/command/config/set.js +0 -17
- package/distTs/src/command/config.js +0 -17
- package/distTs/src/command/http.js +0 -30
- package/distTs/src/command/pre.js +0 -49
- package/distTs/src/command/start.js +0 -28
- package/distTs/src/command/tcp.js +0 -30
- package/distTs/src/command/tls.js +0 -30
- package/distTs/src/command/tunnel/config.js +0 -17
- package/distTs/src/command/tunnel/http.js +0 -31
- package/distTs/src/command/tunnel/start.js +0 -28
- package/distTs/src/command/tunnel/tcp.js +0 -30
- package/distTs/src/command/tunnel/tls.js +0 -30
- package/distTs/src/command/tunnel.js +0 -19
- package/distTs/src/command/ut/upload.js +0 -108
- package/distTs/src/command/ut.js +0 -12
- package/distTs/src/command/version.js +0 -13
- package/distTs/src/command/vt/close.js +0 -27
- package/distTs/src/command/vt/compare/validation.js +0 -173
- package/distTs/src/command/vt/compare.js +0 -97
- package/distTs/src/command/vt/exec.js +0 -81
- package/distTs/src/command/vt/installBrowser.js +0 -20
- package/distTs/src/command/vt/scrap.js +0 -193
- package/distTs/src/command/vt/storybook.js +0 -92
- package/distTs/src/command/vt.js +0 -22
- package/distTs/src/format.js +0 -174
- package/distTs/src/index.js +0 -34
- package/distTs/src/input.js +0 -270
- package/distTs/src/logger.js +0 -95
- package/distTs/src/output/interactive/tunnel.js +0 -860
- package/distTs/src/output/noninteractive/agent/tunnels.js +0 -43
- package/distTs/src/output/noninteractive/config/tunnel.js +0 -65
- package/distTs/src/output/noninteractive/config/tunnels.js +0 -18
- package/distTs/src/output/noninteractive/tunnel.js +0 -59
- package/distTs/src/output.js +0 -143
- package/distTs/src/server/cert.js +0 -52
- package/distTs/src/server/http1.js +0 -75
- package/distTs/src/server/http2.js +0 -78
- package/distTs/src/server/sftp.js +0 -497
- package/distTs/src/server/ssh.js +0 -446
- package/distTs/src/server/tls.js +0 -41
- package/distTs/src/ssh/client.js +0 -197
- package/distTs/src/texts.js +0 -421
- package/distTs/src/tunnel/agent.js +0 -103
- package/distTs/src/tunnel/api/agent.js +0 -100
- package/distTs/src/tunnel/api/buddy.js +0 -141
- package/distTs/src/tunnel/cfg.js +0 -243
- package/distTs/src/tunnel/compression.js +0 -44
- package/distTs/src/tunnel/dns.js +0 -53
- package/distTs/src/tunnel/html/503.html +0 -338
- package/distTs/src/tunnel/html.js +0 -33
- package/distTs/src/tunnel/http/log.js +0 -218
- package/distTs/src/tunnel/http/serve.js +0 -133
- package/distTs/src/tunnel/http/stream.js +0 -34
- package/distTs/src/tunnel/http.js +0 -508
- package/distTs/src/tunnel/identification.js +0 -103
- package/distTs/src/tunnel/latency.js +0 -83
- package/distTs/src/tunnel/output/interactive/tunnel.js +0 -867
- package/distTs/src/tunnel/output/noninteractive/agent/tunnels.js +0 -45
- package/distTs/src/tunnel/output/noninteractive/config/tunnel.js +0 -67
- package/distTs/src/tunnel/output/noninteractive/config/tunnels.js +0 -20
- package/distTs/src/tunnel/output/noninteractive/tunnel.js +0 -61
- package/distTs/src/tunnel/server/cert.js +0 -54
- package/distTs/src/tunnel/server/http1.js +0 -80
- package/distTs/src/tunnel/server/http2.js +0 -84
- package/distTs/src/tunnel/server/sftp.js +0 -514
- package/distTs/src/tunnel/server/ssh.js +0 -464
- package/distTs/src/tunnel/server/tls.js +0 -47
- package/distTs/src/tunnel/ssh/client.js +0 -211
- package/distTs/src/tunnel/tcp.js +0 -113
- package/distTs/src/tunnel/tunnel.js +0 -1010
- package/distTs/src/tunnel.js +0 -656
- package/distTs/src/types/ciInfo.js +0 -10
- package/distTs/src/types/options.js +0 -2
- package/distTs/src/types/plugin.js +0 -2
- package/distTs/src/types/queue.js +0 -2
- package/distTs/src/types/requests.js +0 -2
- package/distTs/src/types/resources.js +0 -2
- package/distTs/src/types/schemas.js +0 -54
- package/distTs/src/types/scrape.js +0 -2
- package/distTs/src/types/snapshots.js +0 -2
- package/distTs/src/types/storybook.js +0 -2
- package/distTs/src/types/tunnel.js +0 -141
- package/distTs/src/unitTest/ci.js +0 -108
- package/distTs/src/unitTest/requests.js +0 -72
- package/distTs/src/utils.js +0 -378
- package/distTs/src/visualTest/browser.js +0 -39
- package/distTs/src/visualTest/ci.js +0 -241
- package/distTs/src/visualTest/context.js +0 -52
- package/distTs/src/visualTest/exec.js +0 -51
- package/distTs/src/visualTest/linkUtils.js +0 -21
- package/distTs/src/visualTest/queue.js +0 -43
- package/distTs/src/visualTest/requests.js +0 -365
- package/distTs/src/visualTest/resources.js +0 -259
- package/distTs/src/visualTest/server.js +0 -109
- package/distTs/src/visualTest/snapshots.js +0 -129
- package/distTs/src/visualTest/utils/parseDom.js +0 -238
- package/distTs/src/visualTest/validation.js +0 -18
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const utils_1 = require("../../utils");
|
|
7
|
-
const texts_1 = require("../../texts");
|
|
8
|
-
const validation_1 = require("../../visualTest/validation");
|
|
9
|
-
const requests_1 = require("../../visualTest/requests");
|
|
10
|
-
const output_1 = __importDefault(require("../../output"));
|
|
11
|
-
const context_1 = require("../../visualTest/context");
|
|
12
|
-
const server_1 = require("../../visualTest/server");
|
|
13
|
-
const which_1 = __importDefault(require("which"));
|
|
14
|
-
const snapshots_1 = require("../../visualTest/snapshots");
|
|
15
|
-
const ci_1 = require("../../visualTest/ci");
|
|
16
|
-
const exec_1 = require("../../visualTest/exec");
|
|
17
|
-
const browser_1 = require("../../visualTest/browser");
|
|
18
|
-
const commandVtExec = (0, utils_1.newCommand)('exec', texts_1.DESC_COMMAND_VT_EXEC);
|
|
19
|
-
commandVtExec.argument('<command>', texts_1.OPTION_EXEC_COMMAND);
|
|
20
|
-
commandVtExec.option('--skipDiscovery', texts_1.OPTION_EXEC_SKIP_DISCOVERY);
|
|
21
|
-
commandVtExec.option('--oneByOne', texts_1.OPTION_EXEC_ONE_BY_ONE);
|
|
22
|
-
commandVtExec.option('--parallel', texts_1.OPTION_EXEC_PARALLEL);
|
|
23
|
-
commandVtExec.action(async (command, options) => {
|
|
24
|
-
(0, context_1.setExecOptions)(options);
|
|
25
|
-
try {
|
|
26
|
-
const browserPath = await (0, browser_1.getBrowserPath)();
|
|
27
|
-
(0, context_1.setBrowserPath)(browserPath);
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
output_1.default.exitError(`${error}`);
|
|
31
|
-
}
|
|
32
|
-
if (!(0, validation_1.checkToken)()) {
|
|
33
|
-
output_1.default.exitError(texts_1.ERR_MISSING_VT_TOKEN);
|
|
34
|
-
}
|
|
35
|
-
if (!(0, validation_1.checkParallel)()) {
|
|
36
|
-
output_1.default.exitError(texts_1.ERR_MISSING_BUILD_ID);
|
|
37
|
-
}
|
|
38
|
-
const app = await (0, server_1.createServer)();
|
|
39
|
-
const [mainCommand, ...mainCommandArguments] = command.split(' ');
|
|
40
|
-
output_1.default.normal((0, texts_1.LOG_RUNNING_EXEC_COMMAND)(`${mainCommand} ${[...mainCommandArguments].join(' ')}`));
|
|
41
|
-
const resolved = await (0, which_1.default)(mainCommand, { nothrow: true });
|
|
42
|
-
if (!resolved) {
|
|
43
|
-
output_1.default.exitError((0, texts_1.ERR_MISSING_EXEC_COMMAND)(`${mainCommand} ${[...mainCommandArguments].join(' ')}`));
|
|
44
|
-
}
|
|
45
|
-
try {
|
|
46
|
-
let t1, t11;
|
|
47
|
-
if (context_1.debug) {
|
|
48
|
-
t1 = performance.now();
|
|
49
|
-
}
|
|
50
|
-
const defaultSettings = await (0, requests_1.getDefaultSettings)();
|
|
51
|
-
(0, snapshots_1.setDefaultSettings)(defaultSettings);
|
|
52
|
-
const ciAndGitInfo = await (0, ci_1.getCiAndGitInfo)({
|
|
53
|
-
baseBranch: defaultSettings.baseBranch,
|
|
54
|
-
});
|
|
55
|
-
(0, context_1.setCiAndCommitInfo)(ciAndGitInfo);
|
|
56
|
-
(0, ci_1.logCiInfo)(ciAndGitInfo);
|
|
57
|
-
if (context_1.debug) {
|
|
58
|
-
t11 = performance.now();
|
|
59
|
-
}
|
|
60
|
-
const spawnedProcessExitCode = await (0, exec_1.testExec)(mainCommand, [
|
|
61
|
-
...mainCommandArguments,
|
|
62
|
-
]);
|
|
63
|
-
if (context_1.debug && t11) {
|
|
64
|
-
const t22 = performance.now();
|
|
65
|
-
output_1.default.normal((0, texts_1.DEBUG_EXEC_TEST_COMMAND)(t22 - t11));
|
|
66
|
-
}
|
|
67
|
-
await app.close();
|
|
68
|
-
await (0, snapshots_1.finishProcessingSnapshots)(spawnedProcessExitCode);
|
|
69
|
-
(0, snapshots_1.showSessionLink)();
|
|
70
|
-
if (context_1.debug && t1) {
|
|
71
|
-
const t2 = performance.now();
|
|
72
|
-
output_1.default.normal((0, texts_1.DEBUG_EXEC_COMMAND)(t2 - t1));
|
|
73
|
-
}
|
|
74
|
-
process.exit(spawnedProcessExitCode);
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
await app.close();
|
|
78
|
-
output_1.default.exitError(`${error}`);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
exports.default = commandVtExec;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const utils_1 = require("../../utils");
|
|
7
|
-
const texts_1 = require("../../texts");
|
|
8
|
-
const output_1 = __importDefault(require("../../output"));
|
|
9
|
-
const browser_1 = require("../../visualTest/browser");
|
|
10
|
-
const commandVtInstallBrowser = (0, utils_1.newCommand)('install-browser', texts_1.DESC_COMMAND_VT_INSTALL_BROWSER);
|
|
11
|
-
commandVtInstallBrowser.action(async () => {
|
|
12
|
-
try {
|
|
13
|
-
await (0, browser_1.installBrowser)();
|
|
14
|
-
output_1.default.exitNormal('');
|
|
15
|
-
}
|
|
16
|
-
catch (error) {
|
|
17
|
-
output_1.default.exitError(`${error}`);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
exports.default = commandVtInstallBrowser;
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const utils_1 = require("../../utils");
|
|
7
|
-
const commander_1 = require("commander");
|
|
8
|
-
const texts_1 = require("../../texts");
|
|
9
|
-
const validation_1 = require("../../visualTest/validation");
|
|
10
|
-
const output_1 = __importDefault(require("../../output"));
|
|
11
|
-
const requests_1 = require("../../visualTest/requests");
|
|
12
|
-
const zod_1 = require("zod");
|
|
13
|
-
const node_zlib_1 = require("node:zlib");
|
|
14
|
-
const tar_stream_1 = __importDefault(require("tar-stream"));
|
|
15
|
-
const promises_1 = require("node:stream/promises");
|
|
16
|
-
const node_fs_1 = require("node:fs");
|
|
17
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
18
|
-
const promises_2 = require("node:fs/promises");
|
|
19
|
-
const commandScrap = (0, utils_1.newCommand)('scrap', texts_1.DESC_COMMAND_VT_SCRAP);
|
|
20
|
-
commandScrap.argument('<url>', texts_1.OPTION_SCRAP_URL);
|
|
21
|
-
commandScrap.option('--follow', texts_1.OPTION_SCRAP_FOLLOW, false);
|
|
22
|
-
commandScrap.addOption(new commander_1.Option('--outputType <type>', texts_1.OPTION_SCRAP_OUTPUT_TYPE)
|
|
23
|
-
.choices(['jpeg', 'png', 'md', 'html'])
|
|
24
|
-
.makeOptionMandatory());
|
|
25
|
-
commandScrap.option('--quality <quality>', texts_1.OPTION_SCRAP_QUALITY);
|
|
26
|
-
commandScrap.option('--fullPage', texts_1.OPTION_SCRAP_FULL_PAGE, false);
|
|
27
|
-
commandScrap.option('--cssSelector <selector>', texts_1.OPTION_SCRAP_CSS_SELECTOR);
|
|
28
|
-
commandScrap.option('--xpathSelector <selector>', texts_1.OPTION_SCRAP_XPATH_SELECTOR);
|
|
29
|
-
commandScrap.addOption(new commander_1.Option('--browser <browser>', texts_1.OPTION_SCRAP_BROWSER)
|
|
30
|
-
.choices(['chrome', 'firefox', 'safari'])
|
|
31
|
-
.default('chrome'));
|
|
32
|
-
commandScrap.option('--viewport <viewport>', texts_1.OPTION_SCRAP_VIEWPORT, '1920x1080');
|
|
33
|
-
commandScrap.option('--devicePixelRatio <ratio>', texts_1.OPTION_SCRAP_DEVICE_PIXEL_RATIO, '1');
|
|
34
|
-
commandScrap.option('--waitForElement <selector>', texts_1.OPTION_SCRAP_WAIT_FOR_ELEMENT);
|
|
35
|
-
commandScrap.option('--darkMode', texts_1.OPTION_SCRAP_DARK_MODE, false);
|
|
36
|
-
commandScrap.option('--delay <delay>', texts_1.OPTION_SCRAP_DELAY, '0');
|
|
37
|
-
commandScrap.option('--outputDir <dir>', texts_1.OPTION_SCRAP_OUTPUT_DIR, '.');
|
|
38
|
-
commandScrap.action(async (inputUrl, options) => {
|
|
39
|
-
if (!(0, validation_1.checkToken)()) {
|
|
40
|
-
output_1.default.exitError(texts_1.ERR_MISSING_VT_TOKEN);
|
|
41
|
-
}
|
|
42
|
-
const { url, follow, outputType, quality, outputDir, fullPage, cssSelector, xpathSelector, browser, viewport, devicePixelRatio, darkMode, delay, waitForElement, } = validateInputAndOptions(inputUrl, options);
|
|
43
|
-
try {
|
|
44
|
-
const { buildId } = await (0, requests_1.sendScrap)(url, outputType, follow, quality, fullPage, cssSelector, xpathSelector, browser, viewport, devicePixelRatio, darkMode, delay, waitForElement);
|
|
45
|
-
output_1.default.normal('Starting scrap session');
|
|
46
|
-
const status = await watchSessionStatus(buildId);
|
|
47
|
-
if (!status.ok) {
|
|
48
|
-
output_1.default.exitError(`Unexpected error while watching session status: ${status.error}`);
|
|
49
|
-
}
|
|
50
|
-
output_1.default.normal('Downloading scrap package');
|
|
51
|
-
const scrapPackageStream = await (0, requests_1.downloadScrapPackage)(buildId);
|
|
52
|
-
const brotliDecompressor = (0, node_zlib_1.createBrotliDecompress)();
|
|
53
|
-
const unpack = tar_stream_1.default.extract();
|
|
54
|
-
unpack.on('entry', async (header, stream, next) => {
|
|
55
|
-
const currentDir = process.cwd();
|
|
56
|
-
const preparedOutputDir = outputDir.startsWith('.')
|
|
57
|
-
? node_path_1.default.join(currentDir, outputDir)
|
|
58
|
-
: outputDir;
|
|
59
|
-
const newFilePath = node_path_1.default.join(preparedOutputDir, header.name);
|
|
60
|
-
try {
|
|
61
|
-
if (header.type === 'file') {
|
|
62
|
-
await (0, promises_2.mkdir)(node_path_1.default.dirname(newFilePath), { recursive: true });
|
|
63
|
-
const fileWriteStream = (0, node_fs_1.createWriteStream)(newFilePath);
|
|
64
|
-
await (0, promises_1.pipeline)(stream, fileWriteStream);
|
|
65
|
-
next();
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
stream.resume();
|
|
69
|
-
next();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
catch (entryError) {
|
|
73
|
-
output_1.default.error(`Error processing entry ${header.name}: ${entryError}`);
|
|
74
|
-
next(entryError);
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
await (0, promises_1.pipeline)(scrapPackageStream, brotliDecompressor, unpack);
|
|
78
|
-
output_1.default.exitSuccess('Downloading scrap package finished');
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
output_1.default.exitError(`${error}`);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
function validateInputAndOptions(input, options) {
|
|
85
|
-
const urlSchema = zod_1.z.string().url();
|
|
86
|
-
const optionsSchema = zod_1.z.object({
|
|
87
|
-
follow: zod_1.z.boolean(),
|
|
88
|
-
outputType: zod_1.z.enum(['jpeg', 'png', 'md', 'html']),
|
|
89
|
-
quality: zod_1.z.coerce.number().min(1).max(100).optional(),
|
|
90
|
-
outputDir: zod_1.z.string().default('.'),
|
|
91
|
-
fullPage: zod_1.z.boolean().optional(),
|
|
92
|
-
cssSelector: zod_1.z.string().optional(),
|
|
93
|
-
xpathSelector: zod_1.z.string().optional(),
|
|
94
|
-
browser: zod_1.z.enum(['chrome', 'firefox', 'safari']),
|
|
95
|
-
viewport: zod_1.z
|
|
96
|
-
.string()
|
|
97
|
-
.refine((value) => {
|
|
98
|
-
const [width, height] = value.split('x');
|
|
99
|
-
return (width &&
|
|
100
|
-
height &&
|
|
101
|
-
!isNaN(Number(width)) &&
|
|
102
|
-
!isNaN(Number(height)) &&
|
|
103
|
-
Number(width) > 0 &&
|
|
104
|
-
Number(height) > 0);
|
|
105
|
-
}, 'Invalid viewport format, example: 1920x1080')
|
|
106
|
-
.transform((value) => {
|
|
107
|
-
const [width, height] = value.split('x');
|
|
108
|
-
return {
|
|
109
|
-
width: Number(width),
|
|
110
|
-
height: Number(height),
|
|
111
|
-
};
|
|
112
|
-
}),
|
|
113
|
-
devicePixelRatio: zod_1.z.coerce.number().min(1).max(4),
|
|
114
|
-
darkMode: zod_1.z.boolean(),
|
|
115
|
-
delay: zod_1.z.coerce.number().min(0).max(10000),
|
|
116
|
-
waitForElement: zod_1.z.string().optional(),
|
|
117
|
-
});
|
|
118
|
-
try {
|
|
119
|
-
const url = urlSchema.parse(input);
|
|
120
|
-
const { follow, outputType, quality, outputDir, fullPage, cssSelector, xpathSelector, browser, viewport, devicePixelRatio, darkMode, delay, waitForElement, } = optionsSchema.parse(options);
|
|
121
|
-
if (typeof quality === 'number' && outputType !== 'jpeg') {
|
|
122
|
-
output_1.default.exitError('Quality is only supported for jpeg output type, use --outputType jpeg');
|
|
123
|
-
}
|
|
124
|
-
if (cssSelector && xpathSelector) {
|
|
125
|
-
output_1.default.exitError('Only one of --cssSelector or --xpathSelector can be used');
|
|
126
|
-
}
|
|
127
|
-
return {
|
|
128
|
-
url,
|
|
129
|
-
follow,
|
|
130
|
-
outputType,
|
|
131
|
-
quality,
|
|
132
|
-
outputDir,
|
|
133
|
-
fullPage,
|
|
134
|
-
cssSelector,
|
|
135
|
-
xpathSelector,
|
|
136
|
-
browser,
|
|
137
|
-
viewport,
|
|
138
|
-
devicePixelRatio,
|
|
139
|
-
darkMode,
|
|
140
|
-
delay,
|
|
141
|
-
waitForElement,
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
catch (error) {
|
|
145
|
-
if (error instanceof zod_1.ZodError) {
|
|
146
|
-
output_1.default.exitError(error.errors.map((e) => `${e.path}: ${e.message}`).join(', '));
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
throw error;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
async function watchSessionStatus(buildId) {
|
|
154
|
-
return new Promise((resolve) => {
|
|
155
|
-
const eventSource = (0, requests_1.connectToScrapSession)(buildId);
|
|
156
|
-
eventSource.addEventListener('SESSION_STATUS', (event) => {
|
|
157
|
-
const data = JSON.parse(event.data);
|
|
158
|
-
if (data.status === 'GATHER_URLS_COMPLETED') {
|
|
159
|
-
output_1.default.normal(`Gathering URLs completed, found ${data.text} URLs`);
|
|
160
|
-
}
|
|
161
|
-
else if (data.status === 'GATHER_URLS_FAILED') {
|
|
162
|
-
output_1.default.error('Gathering URLs failed');
|
|
163
|
-
}
|
|
164
|
-
else if (data.status === 'SCRAPE_URL_COMPLETED') {
|
|
165
|
-
output_1.default.normal(`Scraping ${data.text} completed`);
|
|
166
|
-
}
|
|
167
|
-
else if (data.status === 'SCRAPE_URL_FAILED') {
|
|
168
|
-
output_1.default.error(`Scraping ${data.text} failed`);
|
|
169
|
-
}
|
|
170
|
-
else if (data.status === 'CREATE_PACKAGE_COMPLETED') {
|
|
171
|
-
output_1.default.normal('Package created');
|
|
172
|
-
}
|
|
173
|
-
else if (data.status === 'CREATE_PACKAGE_FAILED') {
|
|
174
|
-
output_1.default.error('Package creation failed');
|
|
175
|
-
}
|
|
176
|
-
else if (data.status === 'FINISHED') {
|
|
177
|
-
eventSource.close();
|
|
178
|
-
output_1.default.normal('Scrap session finished');
|
|
179
|
-
resolve({ ok: true });
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
eventSource.addEventListener('error', (event) => {
|
|
183
|
-
if (event.code) {
|
|
184
|
-
eventSource.close();
|
|
185
|
-
if (event.code === 410) {
|
|
186
|
-
output_1.default.normal('Scrap session finished');
|
|
187
|
-
}
|
|
188
|
-
resolve({ ok: event.code === 410, error: event.code });
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
exports.default = commandScrap;
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const utils_1 = require("../../utils");
|
|
7
|
-
const texts_1 = require("../../texts");
|
|
8
|
-
const validation_1 = require("../../visualTest/validation");
|
|
9
|
-
const requests_1 = require("../../visualTest/requests");
|
|
10
|
-
const output_1 = __importDefault(require("../../output"));
|
|
11
|
-
const snapshots_1 = require("../../visualTest/snapshots");
|
|
12
|
-
const ci_1 = require("../../visualTest/ci");
|
|
13
|
-
const context_1 = require("../../visualTest/context");
|
|
14
|
-
const node_fs_1 = require("node:fs");
|
|
15
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
16
|
-
const commandVtStorybook = (0, utils_1.newCommand)('storybook', texts_1.DESC_COMMAND_VT_STORYBOOK);
|
|
17
|
-
commandVtStorybook.action(async () => {
|
|
18
|
-
if (!(0, validation_1.checkToken)()) {
|
|
19
|
-
output_1.default.exitError(texts_1.ERR_MISSING_VT_TOKEN);
|
|
20
|
-
}
|
|
21
|
-
const currentDirectoryFiles = getCurrentDirectoryFiles();
|
|
22
|
-
if (!isStorybookDirectory(currentDirectoryFiles)) {
|
|
23
|
-
output_1.default.exitError(texts_1.ERR_WRONG_STORYBOOK_DIRECTORY);
|
|
24
|
-
}
|
|
25
|
-
const storybookStoriesIndex = getStorybookStoriesIndex(currentDirectoryFiles);
|
|
26
|
-
const storiesList = getStoriesList(storybookStoriesIndex);
|
|
27
|
-
const storybookSnapshots = getStorybookSnapshots(storiesList);
|
|
28
|
-
const defaultSettings = await (0, requests_1.getDefaultSettings)();
|
|
29
|
-
(0, snapshots_1.setDefaultSettings)(defaultSettings);
|
|
30
|
-
const ciAndGitInfo = await (0, ci_1.getCiAndGitInfo)({
|
|
31
|
-
baseBranch: defaultSettings.baseBranch,
|
|
32
|
-
});
|
|
33
|
-
(0, context_1.setCiAndCommitInfo)(ciAndGitInfo);
|
|
34
|
-
(0, ci_1.logCiInfo)(ciAndGitInfo);
|
|
35
|
-
try {
|
|
36
|
-
const { message } = await (0, requests_1.sendStorybook)(storybookSnapshots, currentDirectoryFiles);
|
|
37
|
-
output_1.default.exitSuccess(message);
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
output_1.default.exitError(`${error}`);
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
function getCurrentDirectoryFiles() {
|
|
44
|
-
const cwd = process.cwd();
|
|
45
|
-
const filesAndDirectories = (0, node_fs_1.readdirSync)(cwd, {
|
|
46
|
-
encoding: 'utf8',
|
|
47
|
-
recursive: true,
|
|
48
|
-
});
|
|
49
|
-
return filesAndDirectories.filter((file) => {
|
|
50
|
-
const elementPath = node_path_1.default.join(cwd, file);
|
|
51
|
-
const stats = (0, node_fs_1.statSync)(elementPath);
|
|
52
|
-
return stats.isFile();
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
function isStorybookDirectory(files) {
|
|
56
|
-
return (files.length > 0 &&
|
|
57
|
-
files.includes('index.html') &&
|
|
58
|
-
files.includes('iframe.html'));
|
|
59
|
-
}
|
|
60
|
-
function getStorybookStoriesIndex(files) {
|
|
61
|
-
const indexFiles = files.find((file) => file === 'index.json');
|
|
62
|
-
if (indexFiles) {
|
|
63
|
-
return indexFiles;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
return output_1.default.exitError(texts_1.ERR_MISSING_STORYBOOK_INDEX_FILE);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
function getStoriesList(storybookStoriesIndex) {
|
|
70
|
-
const storiesListFile = (0, node_fs_1.readFileSync)(storybookStoriesIndex);
|
|
71
|
-
try {
|
|
72
|
-
const json = JSON.parse(storiesListFile.toString());
|
|
73
|
-
if (![4, 5].includes(json.v)) {
|
|
74
|
-
output_1.default.exitError(texts_1.ERR_UNSUPPORTED_STORYBOOK);
|
|
75
|
-
}
|
|
76
|
-
return json;
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
output_1.default.exitError(texts_1.ERR_PARSING_STORIES);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
function getStorybookSnapshots(storiesList) {
|
|
83
|
-
const stories = Object.entries(storiesList.entries)
|
|
84
|
-
.filter(([, value]) => value.type === 'story')
|
|
85
|
-
.map(([key, value]) => ({
|
|
86
|
-
id: key,
|
|
87
|
-
name: `${value.title}/${value.name}`,
|
|
88
|
-
}));
|
|
89
|
-
output_1.default.normal((0, texts_1.TXT_STORIES_AMOUNT)(stories.length));
|
|
90
|
-
return stories;
|
|
91
|
-
}
|
|
92
|
-
exports.default = commandVtStorybook;
|
package/distTs/src/command/vt.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const texts_1 = require("../texts");
|
|
7
|
-
const utils_1 = require("../utils");
|
|
8
|
-
const close_1 = __importDefault(require("./vt/close"));
|
|
9
|
-
const storybook_1 = __importDefault(require("./vt/storybook"));
|
|
10
|
-
const exec_1 = __importDefault(require("./vt/exec"));
|
|
11
|
-
const installBrowser_1 = __importDefault(require("./vt/installBrowser"));
|
|
12
|
-
const compare_1 = __importDefault(require("./vt/compare"));
|
|
13
|
-
const scrap_1 = __importDefault(require("./vt/scrap"));
|
|
14
|
-
const commandVt = (0, utils_1.newCommand)('visual', texts_1.DESC_COMMAND_VT);
|
|
15
|
-
commandVt.alias('vt');
|
|
16
|
-
commandVt.addCommand(close_1.default);
|
|
17
|
-
commandVt.addCommand(storybook_1.default);
|
|
18
|
-
commandVt.addCommand(exec_1.default);
|
|
19
|
-
commandVt.addCommand(installBrowser_1.default);
|
|
20
|
-
commandVt.addCommand(compare_1.default);
|
|
21
|
-
commandVt.addCommand(scrap_1.default);
|
|
22
|
-
exports.default = commandVt;
|
package/distTs/src/format.js
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const utils_1 = require("./utils");
|
|
7
|
-
const punycode_1 = __importDefault(require("punycode/"));
|
|
8
|
-
const tunnel_1 = require("./types/tunnel");
|
|
9
|
-
class Format {
|
|
10
|
-
static date() {
|
|
11
|
-
const dt = new Date();
|
|
12
|
-
return dt.toISOString();
|
|
13
|
-
}
|
|
14
|
-
static token(token) {
|
|
15
|
-
if (!token || token.length < 6)
|
|
16
|
-
return 'Not provided';
|
|
17
|
-
return token.substring(0, 3) + '...' + token.substring(token.length - 3);
|
|
18
|
-
}
|
|
19
|
-
static region(region) {
|
|
20
|
-
if (!region)
|
|
21
|
-
return 'Autodetect';
|
|
22
|
-
return region.toUpperCase();
|
|
23
|
-
}
|
|
24
|
-
static timeout(timeout) {
|
|
25
|
-
if (timeout === 1)
|
|
26
|
-
return '1 second';
|
|
27
|
-
return `${timeout} seconds`;
|
|
28
|
-
}
|
|
29
|
-
static tunnelTimeout(timeout) {
|
|
30
|
-
if (!timeout)
|
|
31
|
-
return 'Default';
|
|
32
|
-
return this.timeout(timeout);
|
|
33
|
-
}
|
|
34
|
-
static whitelist(whitelist) {
|
|
35
|
-
if (!whitelist || !whitelist.length)
|
|
36
|
-
return 'Everyone';
|
|
37
|
-
if (whitelist.includes('*'))
|
|
38
|
-
return 'Everyone';
|
|
39
|
-
return whitelist.join('\n');
|
|
40
|
-
}
|
|
41
|
-
static tunnelWhitelist(whitelist) {
|
|
42
|
-
if (!whitelist)
|
|
43
|
-
return 'Default';
|
|
44
|
-
return this.whitelist(whitelist);
|
|
45
|
-
}
|
|
46
|
-
static tunnelHeaders(headers) {
|
|
47
|
-
if (!headers || !headers.length)
|
|
48
|
-
return 'Not set';
|
|
49
|
-
return headers.map((h) => `${h.name}: ${h.value}`).join('\n');
|
|
50
|
-
}
|
|
51
|
-
static tunnelCircuitBreaker(cb) {
|
|
52
|
-
if (cb === undefined || cb === null)
|
|
53
|
-
return 'Not set';
|
|
54
|
-
return String(cb);
|
|
55
|
-
}
|
|
56
|
-
static tunnelUserAgent(userAgents) {
|
|
57
|
-
if (!userAgents || !userAgents.length)
|
|
58
|
-
return 'Everyone';
|
|
59
|
-
return userAgents.join('\n');
|
|
60
|
-
}
|
|
61
|
-
static type(type) {
|
|
62
|
-
return type.toUpperCase();
|
|
63
|
-
}
|
|
64
|
-
static tunnelRegion(region) {
|
|
65
|
-
if (!region)
|
|
66
|
-
return 'Default';
|
|
67
|
-
return this.region(region);
|
|
68
|
-
}
|
|
69
|
-
static identify(identifyType) {
|
|
70
|
-
if (identifyType === tunnel_1.TUNNEL_HTTP_IDENTIFY.HTTP1)
|
|
71
|
-
return 'Ver. 1.1';
|
|
72
|
-
return 'Ver. 2';
|
|
73
|
-
}
|
|
74
|
-
static terminate(terminate) {
|
|
75
|
-
if (terminate === tunnel_1.TUNNEL_TERMINATE_AT.AGENT)
|
|
76
|
-
return 'AGENT';
|
|
77
|
-
if (terminate === tunnel_1.TUNNEL_TERMINATE_AT.REGION)
|
|
78
|
-
return 'REGION';
|
|
79
|
-
return 'TARGET';
|
|
80
|
-
}
|
|
81
|
-
static serve(serve) {
|
|
82
|
-
return serve;
|
|
83
|
-
}
|
|
84
|
-
static hostHeader(host) {
|
|
85
|
-
if (!host)
|
|
86
|
-
return 'Not set';
|
|
87
|
-
return host;
|
|
88
|
-
}
|
|
89
|
-
static basicAuth(login, pass) {
|
|
90
|
-
if (!login || !pass)
|
|
91
|
-
return 'Not set';
|
|
92
|
-
return `${login}:${pass}`;
|
|
93
|
-
}
|
|
94
|
-
static latency(latency) {
|
|
95
|
-
if (latency < 0)
|
|
96
|
-
return 'Unreachable';
|
|
97
|
-
if (latency < 1000)
|
|
98
|
-
return `${latency.toFixed(0)}ms`;
|
|
99
|
-
return `${(latency / 1000).toFixed(0)}s`;
|
|
100
|
-
}
|
|
101
|
-
static yesNo(val) {
|
|
102
|
-
if (!val)
|
|
103
|
-
return 'No';
|
|
104
|
-
return 'Yes';
|
|
105
|
-
}
|
|
106
|
-
static entryHost(tunnel) {
|
|
107
|
-
let host = '';
|
|
108
|
-
host += tunnel.subdomain;
|
|
109
|
-
host += '.';
|
|
110
|
-
host += (tunnel.region || '').toLowerCase();
|
|
111
|
-
host += '-';
|
|
112
|
-
host += tunnel.sshId;
|
|
113
|
-
host += '.';
|
|
114
|
-
host += tunnel.domain;
|
|
115
|
-
return host;
|
|
116
|
-
}
|
|
117
|
-
static entryHostEncoded(tunnel) {
|
|
118
|
-
return punycode_1.default.toASCII(this.entryHost(tunnel));
|
|
119
|
-
}
|
|
120
|
-
static entry(tunnel) {
|
|
121
|
-
let entry = '';
|
|
122
|
-
if (tunnel.type === tunnel_1.TUNNEL_TYPE.HTTP)
|
|
123
|
-
entry += 'https://';
|
|
124
|
-
entry += this.entryHost(tunnel);
|
|
125
|
-
if (tunnel.type === tunnel_1.TUNNEL_TYPE.TCP)
|
|
126
|
-
entry += `:${tunnel.sshForwardPort}`;
|
|
127
|
-
else if (tunnel.type === tunnel_1.TUNNEL_TYPE.TLS)
|
|
128
|
-
entry += ':443';
|
|
129
|
-
return entry;
|
|
130
|
-
}
|
|
131
|
-
static target(type, target) {
|
|
132
|
-
if (type === tunnel_1.TUNNEL_TYPE.HTTP) {
|
|
133
|
-
let port = '80';
|
|
134
|
-
let host = 'localhost';
|
|
135
|
-
let proto = 'http';
|
|
136
|
-
let m = target.match(utils_1.TARGET_ONLY_PORT_REGEX);
|
|
137
|
-
if (m) {
|
|
138
|
-
port = m[0];
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
m = target.match(utils_1.TARGET_HTTP_REGEX);
|
|
142
|
-
if (m) {
|
|
143
|
-
if (m[2])
|
|
144
|
-
proto = m[2];
|
|
145
|
-
if (m[4])
|
|
146
|
-
host = m[4];
|
|
147
|
-
if (m[6])
|
|
148
|
-
port = m[6];
|
|
149
|
-
else if (proto === 'https')
|
|
150
|
-
port = '443';
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
let t = `${proto}://${host}`;
|
|
154
|
-
if (proto === 'http' && port !== '80')
|
|
155
|
-
t += `:${port}`;
|
|
156
|
-
else if (proto === 'https' && port !== '443')
|
|
157
|
-
t += `:${port}`;
|
|
158
|
-
return t;
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
let host = 'localhost';
|
|
162
|
-
let port = '80';
|
|
163
|
-
const m = target.match(utils_1.TARGET_TCP_TLS_REGEX);
|
|
164
|
-
if (m) {
|
|
165
|
-
if (m[3])
|
|
166
|
-
port = m[3];
|
|
167
|
-
if (m[2])
|
|
168
|
-
host = m[2];
|
|
169
|
-
}
|
|
170
|
-
return `${host}:${port}`;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
exports.default = Format;
|
package/distTs/src/index.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const output_1 = __importDefault(require("./output"));
|
|
7
|
-
const agent_1 = __importDefault(require("./command/agent"));
|
|
8
|
-
const logger_1 = __importDefault(require("./logger"));
|
|
9
|
-
const version_1 = __importDefault(require("./command/version"));
|
|
10
|
-
const pre_1 = __importDefault(require("./command/pre"));
|
|
11
|
-
const stream_1 = __importDefault(require("stream"));
|
|
12
|
-
const utils_1 = require("./utils");
|
|
13
|
-
const texts_1 = require("./texts");
|
|
14
|
-
const vt_1 = __importDefault(require("./command/vt"));
|
|
15
|
-
const ut_1 = __importDefault(require("./command/ut"));
|
|
16
|
-
const tunnel_1 = __importDefault(require("./command/tunnel"));
|
|
17
|
-
stream_1.default.setDefaultHighWaterMark(false, 67108864);
|
|
18
|
-
process.title = 'bdy';
|
|
19
|
-
process.on('uncaughtException', (err) => {
|
|
20
|
-
logger_1.default.fatal(err);
|
|
21
|
-
output_1.default.exitError(err);
|
|
22
|
-
});
|
|
23
|
-
const program = (0, utils_1.newCommand)('', texts_1.DESC_PROGRAM);
|
|
24
|
-
program.hook('preAction', pre_1.default);
|
|
25
|
-
program.configureHelp({
|
|
26
|
-
formatHelp: utils_1.formatHelp,
|
|
27
|
-
});
|
|
28
|
-
program.addCommand(tunnel_1.default);
|
|
29
|
-
if (!(0, utils_1.isDocker)())
|
|
30
|
-
program.addCommand(agent_1.default);
|
|
31
|
-
program.addCommand(version_1.default);
|
|
32
|
-
program.addCommand(vt_1.default);
|
|
33
|
-
program.addCommand(ut_1.default);
|
|
34
|
-
program.parse();
|