bdy 1.19.4-dev-pipeline → 1.19.4-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/distTs/package.json +2 -2
  2. package/distTs/src/api/client.js +2 -103
  3. package/distTs/src/command/pipeline/run.js +125 -22
  4. package/distTs/src/command/pipeline.js +0 -23
  5. package/distTs/src/command/project/get.js +18 -0
  6. package/distTs/src/command/project/link.js +11 -11
  7. package/distTs/src/command/project/set.js +31 -0
  8. package/distTs/src/command/sandbox/get/yaml.js +30 -0
  9. package/distTs/src/command/vt/scrape.js +193 -0
  10. package/distTs/src/input.js +31 -14
  11. package/distTs/src/output.js +31 -149
  12. package/distTs/src/texts.js +35 -85
  13. package/distTs/src/tunnel/http.js +51 -14
  14. package/distTs/src/tunnel/output/interactive/tunnel.js +2 -2
  15. package/distTs/src/tunnel/tcp.js +7 -0
  16. package/package.json +2 -2
  17. package/distTs/src/command/crawl/link.js +0 -61
  18. package/distTs/src/command/crawl/run.js +0 -147
  19. package/distTs/src/command/crawl/validation.js +0 -154
  20. package/distTs/src/command/crawl.js +0 -13
  21. package/distTs/src/command/pipeline/create.js +0 -45
  22. package/distTs/src/command/pipeline/get.js +0 -42
  23. package/distTs/src/command/pipeline/list.js +0 -43
  24. package/distTs/src/command/pipeline/run/apply.js +0 -62
  25. package/distTs/src/command/pipeline/run/approve.js +0 -62
  26. package/distTs/src/command/pipeline/run/cancel.js +0 -36
  27. package/distTs/src/command/pipeline/run/list.js +0 -52
  28. package/distTs/src/command/pipeline/run/logs.js +0 -37
  29. package/distTs/src/command/pipeline/run/retry.js +0 -36
  30. package/distTs/src/command/pipeline/run/start.js +0 -96
  31. package/distTs/src/command/pipeline/run/status.js +0 -35
  32. package/distTs/src/command/pipeline/update.js +0 -41
  33. package/distTs/src/command/pipeline/yaml.js +0 -38
  34. package/distTs/src/command/tests/capture/validation.js +0 -46
  35. package/distTs/src/command/tests/capture.js +0 -103
  36. package/distTs/src/command/tests/unit/link.js +0 -61
  37. package/distTs/src/command/tests/unit/upload.js +0 -91
  38. package/distTs/src/command/tests/unit.js +0 -13
  39. package/distTs/src/command/tests/visual/link.js +0 -61
  40. package/distTs/src/command/tests/visual/session/close.js +0 -32
  41. package/distTs/src/command/tests/visual/session/create.js +0 -86
  42. package/distTs/src/command/tests/visual/session.js +0 -13
  43. package/distTs/src/command/tests/visual/setup.js +0 -20
  44. package/distTs/src/command/tests/visual/shared/validation.js +0 -145
  45. package/distTs/src/command/tests/visual/upload.js +0 -141
  46. package/distTs/src/command/tests/visual.js +0 -17
  47. package/distTs/src/command/tests.js +0 -15
  48. package/distTs/src/crawl/requests.js +0 -141
  49. package/distTs/src/output/pipeline.js +0 -1555
  50. package/distTs/src/types/crawl.js +0 -2
  51. package/distTs/src/types/pipeline.js +0 -424
  52. package/distTs/src/unitTest/context.js +0 -26
@@ -1,37 +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 input_1 = __importDefault(require("../../../input"));
9
- const output_1 = __importDefault(require("../../../output"));
10
- const commandPipelineRunLogs = (0, utils_1.newCommand)('logs', texts_1.DESC_COMMAND_PIPELINE_RUN_LOGS);
11
- commandPipelineRunLogs.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
12
- commandPipelineRunLogs.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
13
- commandPipelineRunLogs.option('-n, --no-wait', texts_1.OPTION_PIPELINE_RUN_NO_WAIT);
14
- commandPipelineRunLogs.argument('<identifier>', texts_1.OPTION_PIPELINE_IDENTIFIER);
15
- commandPipelineRunLogs.argument('<run-id>', texts_1.OPTION_PIPELINE_RUN_ID);
16
- commandPipelineRunLogs.argument('<run-action-id>', texts_1.OPTION_PIPELINE_RUN_ACTION_ID);
17
- commandPipelineRunLogs.addHelpText('after', `\nEXAMPLES:${texts_1.EXAMPLE_PIPELINE_RUN_LOGS}`);
18
- commandPipelineRunLogs.action(async (identifier, runId, runActionId, options) => {
19
- const workspace = input_1.default.restApiWorkspace(options.workspace);
20
- const project = input_1.default.restApiProject(options.project);
21
- const client = input_1.default.restApiTokenClient();
22
- const rid = input_1.default.pipelineRunId(runId);
23
- const raid = input_1.default.pipelineRunActionId(runActionId);
24
- const data = await client.getPipelineByIdentifier(workspace, project, identifier);
25
- if (!data || !data.domain) {
26
- output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
27
- }
28
- if (!data.project_identifier) {
29
- output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
30
- }
31
- if (!data.pipeline_id) {
32
- output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
33
- }
34
- const OutputPipeline = require('../../../output/pipeline').default;
35
- await OutputPipeline.runLogs(client, workspace, project, data.pipeline_id, rid, raid, !options.wait);
36
- });
37
- exports.default = commandPipelineRunLogs;
@@ -1,36 +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 input_1 = __importDefault(require("../../../input"));
9
- const output_1 = __importDefault(require("../../../output"));
10
- const commandPipelineRunRetry = (0, utils_1.newCommand)('retry', texts_1.DESC_COMMAND_PIPELINE_RUN_RETRY);
11
- commandPipelineRunRetry.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
12
- commandPipelineRunRetry.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
13
- commandPipelineRunRetry.option('-n, --no-wait', texts_1.OPTION_PIPELINE_RUN_NO_WAIT);
14
- commandPipelineRunRetry.argument('<identifier>', texts_1.OPTION_PIPELINE_IDENTIFIER);
15
- commandPipelineRunRetry.argument('<run-id>', texts_1.OPTION_PIPELINE_RUN_ID);
16
- commandPipelineRunRetry.addHelpText('after', `\nEXAMPLES:${texts_1.EXAMPLE_PIPELINE_RUN_RETRY}`);
17
- commandPipelineRunRetry.action(async (identifier, runId, options) => {
18
- const workspace = input_1.default.restApiWorkspace(options.workspace);
19
- const project = input_1.default.restApiProject(options.project);
20
- const client = input_1.default.restApiTokenClient();
21
- const rid = input_1.default.pipelineRunId(runId);
22
- const data = await client.getPipelineByIdentifier(workspace, project, identifier);
23
- if (!data || !data.domain) {
24
- output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
25
- }
26
- if (!data.project_identifier) {
27
- output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
28
- }
29
- if (!data.pipeline_id) {
30
- output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
31
- }
32
- await client.pipelineRunRetry(workspace, project, data.pipeline_id, rid);
33
- const OutputPipeline = require('../../../output/pipeline').default;
34
- await OutputPipeline.runStatus(client, workspace, project, data.pipeline_id, rid, !options.wait);
35
- });
36
- exports.default = commandPipelineRunRetry;
@@ -1,96 +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 input_1 = __importDefault(require("../../../input"));
10
- const commandPipelineRunStart = (0, utils_1.newCommand)('start', texts_1.DESC_COMMAND_PIPELINE_RUN_START);
11
- commandPipelineRunStart.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
12
- commandPipelineRunStart.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
13
- commandPipelineRunStart.option('-b, --branch <branch>', texts_1.OPTION_PIPELINE_RUN_BRANCH);
14
- commandPipelineRunStart.option('-t, --tag <tag>', texts_1.OPTION_PIPELINE_RUN_TAG);
15
- commandPipelineRunStart.option('-pr, --pull-request <pull request>', texts_1.OPTION_PIPELINE_RUN_PULL_REQUEST);
16
- commandPipelineRunStart.option('-r, --revision <revision>', texts_1.OPTION_PIPELINE_RUN_REVISION);
17
- commandPipelineRunStart.option('--comment <comment>', texts_1.OPTION_PIPELINE_RUN_COMMENT);
18
- commandPipelineRunStart.option('-f, --refresh', texts_1.OPTION_PIPELINE_RUN_REFRESH);
19
- commandPipelineRunStart.option('-c, --clear-cache', texts_1.OPTION_PIPELINE_RUN_CLEAR_CACHE);
20
- commandPipelineRunStart.option('--priority <priority>', texts_1.OPTION_PIPELINE_RUN_PRIORITY);
21
- commandPipelineRunStart.option('-v, --variable <variables...>', texts_1.OPTION_PIPELINE_RUN_VAR);
22
- commandPipelineRunStart.option('-vm, --variable-masked <variables...>', texts_1.OPTION_PIPELINE_RUN_VAR);
23
- commandPipelineRunStart.option('--schedule <date>', texts_1.OPTION_PIPELINE_RUN_DELAY);
24
- commandPipelineRunStart.option('--action <actions...>', texts_1.OPTION_PIPELINE_RUN_ACTION);
25
- commandPipelineRunStart.option('--no-wait', texts_1.OPTION_PIPELINE_RUN_NO_WAIT);
26
- commandPipelineRunStart.argument('<identifier>', texts_1.OPTION_PIPELINE_IDENTIFIER);
27
- commandPipelineRunStart.usage('<identifier> [options]');
28
- commandPipelineRunStart.addHelpText('after', `\nEXAMPLES:${texts_1.EXAMPLE_PIPELINE_RUN_START}`);
29
- commandPipelineRunStart.action(async (identifier, options) => {
30
- const workspace = input_1.default.restApiWorkspace(options.workspace);
31
- const project = input_1.default.restApiProject(options.project);
32
- const client = input_1.default.restApiTokenClient();
33
- const data = await client.getPipelineByIdentifier(workspace, project, identifier);
34
- if (!data || !data.domain) {
35
- output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
36
- }
37
- if (!data.project_identifier) {
38
- output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
39
- }
40
- if (!data.pipeline_id) {
41
- output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
42
- }
43
- const body = {};
44
- if (options.branch) {
45
- body.branch = {
46
- name: options.branch,
47
- };
48
- }
49
- if (options.tag) {
50
- body.tag = {
51
- name: options.tag,
52
- };
53
- }
54
- if (options.pullRequest) {
55
- body.pull_request = {
56
- name: `pull/${options.pullRequest}`,
57
- };
58
- }
59
- if (options.revision) {
60
- body.to_revision = {
61
- revision: options.revision,
62
- };
63
- }
64
- if (options.comment) {
65
- body.comment = options.comment;
66
- }
67
- if (options.refresh) {
68
- body.refresh = true;
69
- }
70
- if (options.clearCache) {
71
- body.clear_cache = true;
72
- }
73
- const priority = input_1.default.pipelineRunPriority(options.priority);
74
- if (priority) {
75
- body.priority = priority;
76
- }
77
- body.variables = [];
78
- if (options.variable) {
79
- body.variables = body.variables.concat(input_1.default.pipelineRunVariable(options.variable, false));
80
- }
81
- if (options.variableMasked) {
82
- body.variables = body.variables.concat(input_1.default.pipelineRunVariable(options.variableMasked, true));
83
- }
84
- const delay = input_1.default.pipelineRunDelay(options.schedule);
85
- if (delay) {
86
- body.delay_until = delay;
87
- }
88
- const actions = input_1.default.pipelineRunAction(options.action);
89
- if (actions) {
90
- body.actions_to_run = actions;
91
- }
92
- const result = await client.pipelineRun(workspace, project, data.pipeline_id, body);
93
- const OutputPipeline = require('../../../output/pipeline').default;
94
- await OutputPipeline.runStatus(client, workspace, project, data.pipeline_id, result.id, !options.wait);
95
- });
96
- exports.default = commandPipelineRunStart;
@@ -1,35 +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 input_1 = __importDefault(require("../../../input"));
9
- const output_1 = __importDefault(require("../../../output"));
10
- const commandPipelineRunStatus = (0, utils_1.newCommand)('status', texts_1.DESC_COMMAND_PIPELINE_RUN_STATUS);
11
- commandPipelineRunStatus.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
12
- commandPipelineRunStatus.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
13
- commandPipelineRunStatus.option('-n, --no-wait', texts_1.OPTION_PIPELINE_RUN_NO_WAIT);
14
- commandPipelineRunStatus.argument('<identifier>', texts_1.OPTION_PIPELINE_IDENTIFIER);
15
- commandPipelineRunStatus.argument('<run-id>', texts_1.OPTION_PIPELINE_RUN_ID);
16
- commandPipelineRunStatus.addHelpText('after', `\nEXAMPLES:${texts_1.EXAMPLE_PIPELINE_RUN_STATUS}`);
17
- commandPipelineRunStatus.action(async (identifier, runId, options) => {
18
- const workspace = input_1.default.restApiWorkspace(options.workspace);
19
- const project = input_1.default.restApiProject(options.project);
20
- const client = input_1.default.restApiTokenClient();
21
- const rid = input_1.default.pipelineRunId(runId);
22
- const data = await client.getPipelineByIdentifier(workspace, project, identifier);
23
- if (!data || !data.domain) {
24
- output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
25
- }
26
- if (!data.project_identifier) {
27
- output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
28
- }
29
- if (!data.pipeline_id) {
30
- output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
31
- }
32
- const OutputPipeline = require('../../../output/pipeline').default;
33
- await OutputPipeline.runStatus(client, workspace, project, data.pipeline_id, rid, !options.wait);
34
- });
35
- exports.default = commandPipelineRunStatus;
@@ -1,41 +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 input_1 = __importDefault(require("../../input"));
9
- const output_1 = __importDefault(require("../../output"));
10
- const commandPipelineUpdate = (0, utils_1.newCommand)('update', texts_1.DESC_COMMAND_PIPELINE_UPDATE);
11
- commandPipelineUpdate.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
12
- commandPipelineUpdate.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
13
- commandPipelineUpdate.argument('<identifier>', texts_1.OPTION_PIPELINE_IDENTIFIER);
14
- commandPipelineUpdate.argument('<yaml|@path>', texts_1.OPTION_PIPELINE_YAML);
15
- commandPipelineUpdate.addHelpText('after', `\nEXAMPLES:${texts_1.EXAMPLE_PIPELINE_UPDATE}`);
16
- commandPipelineUpdate.action(async (identifier, y, options) => {
17
- const workspace = input_1.default.restApiWorkspace(options.workspace);
18
- const project = input_1.default.restApiProject(options.project);
19
- const yaml = input_1.default.restApiYaml(y);
20
- const client = input_1.default.restApiTokenClient();
21
- const data = await client.getPipelineByIdentifier(workspace, project, identifier);
22
- if (!data || !data.domain) {
23
- output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
24
- }
25
- if (!data.project_identifier) {
26
- output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
27
- }
28
- if (!data.pipeline_id) {
29
- output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
30
- }
31
- await client.updatePipelineYml(workspace, project, data.pipeline_id, {
32
- yaml: Buffer.from(yaml, 'utf8').toString('base64'),
33
- });
34
- const result = await client.getPipeline(workspace, project, data.pipeline_id);
35
- output_1.default.dim('Identifier: ', false);
36
- output_1.default.cyan(result.identifier);
37
- output_1.default.cyan(result.html_url);
38
- output_1.default.green(texts_1.TXT_PIPELINE_UPDATED);
39
- output_1.default.exitNormal();
40
- });
41
- exports.default = commandPipelineUpdate;
@@ -1,38 +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 input_1 = __importDefault(require("../../input"));
9
- const output_1 = __importDefault(require("../../output"));
10
- const commandPipelineYaml = (0, utils_1.newCommand)('yaml', texts_1.DESC_COMMAND_PIPELINE_YAML);
11
- commandPipelineYaml.hideVersionUpdate = true;
12
- commandPipelineYaml.alias('yml');
13
- commandPipelineYaml.option('-w, --workspace <domain>', texts_1.OPTION_REST_API_WORKSPACE);
14
- commandPipelineYaml.option('-p, --project <name>', texts_1.OPTION_REST_API_PROJECT);
15
- commandPipelineYaml.argument('<identifier>', texts_1.OPTION_PIPELINE_IDENTIFIER);
16
- commandPipelineYaml.addHelpText('after', `\nEXAMPLES:${texts_1.EXAMPLE_PIPELINE_YML}`);
17
- commandPipelineYaml.action(async (identifier, options) => {
18
- const workspace = input_1.default.restApiWorkspace(options.workspace);
19
- const project = input_1.default.restApiProject(options.project);
20
- const client = input_1.default.restApiTokenClient();
21
- const data = await client.getPipelineByIdentifier(workspace, project, identifier);
22
- if (!data || !data.domain) {
23
- output_1.default.exitError(texts_1.ERR_WORKSPACE_NOT_FOUND);
24
- }
25
- if (!data.project_identifier) {
26
- output_1.default.exitError(texts_1.ERR_PROJECT_NOT_FOUND);
27
- }
28
- if (!data.pipeline_id) {
29
- output_1.default.exitError(texts_1.ERR_PIPELINE_NOT_FOUND);
30
- }
31
- const result = await client.getPipelineYml(workspace, project, data.pipeline_id);
32
- let yml = '';
33
- if (result.yaml) {
34
- yml = Buffer.from(result.yaml, 'base64').toString('utf8');
35
- }
36
- output_1.default.exitNormal(yml);
37
- });
38
- exports.default = commandPipelineYaml;
@@ -1,46 +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
- exports.validateOptions = validateOptions;
7
- exports.checkIfMinimalOptionsAreProvided = checkIfMinimalOptionsAreProvided;
8
- const zod_1 = require("zod");
9
- const output_1 = __importDefault(require("../../../output"));
10
- const validation_1 = require("../visual/shared/validation");
11
- const optionsSchema = zod_1.z.object({
12
- urls: zod_1.z.string().optional(),
13
- sitemap: zod_1.z.string().optional(),
14
- urlsFile: zod_1.z.string().optional(),
15
- follow: zod_1.z.boolean(),
16
- respectRobots: zod_1.z.boolean(),
17
- ignore: zod_1.z
18
- .array(zod_1.z.string().regex(/^(?:([^:]+)::)?(?:(CSS|XPATH))=(.+)$/, {
19
- message: "Ignore option must follow pattern '[scope::]type=value' where type must be CSS or XPATH (scope is optional)",
20
- }))
21
- .optional()
22
- .transform(validation_1.parseScopedSelector),
23
- cookie: validation_1.cookieSchema,
24
- header: validation_1.headerSchema,
25
- delay: validation_1.delaySchema,
26
- waitFor: validation_1.waitForSchema,
27
- ignoreUrls: zod_1.z.array(zod_1.z.string()).optional(),
28
- dryRun: zod_1.z.boolean().optional(),
29
- });
30
- function validateOptions(options) {
31
- try {
32
- const validatedOptions = optionsSchema.parse(options);
33
- return validatedOptions;
34
- }
35
- catch (error) {
36
- if (error instanceof zod_1.ZodError) {
37
- output_1.default.exitError(error.errors.map((e) => e.message).join(', '));
38
- }
39
- else {
40
- throw error;
41
- }
42
- }
43
- }
44
- function checkIfMinimalOptionsAreProvided(options) {
45
- return !!options.urls || !!options.sitemap || !!options.urlsFile;
46
- }
@@ -1,103 +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 node_fs_1 = require("node:fs");
10
- const commandCapture = (0, utils_1.newCommand)('capture', texts_1.DESC_COMMAND_CAPTURE);
11
- commandCapture.option('--urls <urls>', texts_1.OPTION_COMPARE_URLS);
12
- commandCapture.option('--sitemap <sitemap>', texts_1.OPTION_COMPARE_SITEMAP);
13
- commandCapture.option('--urlsFile <urlsFile>', texts_1.OPTION_COMPARE_URLS_FILE);
14
- commandCapture.option('--dryRun', texts_1.OPTION_COMPARE_DRY_RUN);
15
- commandCapture.option('--follow', texts_1.OPTION_COMPARE_FOLLOW, false);
16
- commandCapture.option('--respectRobots', texts_1.OPTION_COMPARE_RESPECT_ROBOTS, false);
17
- commandCapture.option('--ignoreUrls <ignoreUrls...>', texts_1.OPTION_COMPARE_IGNORE_URLS);
18
- commandCapture.option('--ignore <ignores...>', texts_1.OPTION_COMPARE_IGNORE);
19
- commandCapture.option('--cookie <cookies...>', texts_1.OPTION_COMPARE_COOKIE);
20
- commandCapture.option('--header <headers...>', texts_1.OPTION_COMPARE_HEADER);
21
- commandCapture.option('--delay <delays...>', texts_1.OPTION_COMPARE_DELAY);
22
- commandCapture.option('--waitFor <waitFors...>', texts_1.OPTION_COMPARE_WAIT_FOR);
23
- commandCapture.action(async (options) => {
24
- const { getCiAndGitInfo, formattedCiInfo } = require('@buddy-works/ci-info');
25
- const { addProtocolIfMissing } = require('../../visualTest/linkUtils');
26
- const { sendCompareLinks } = require('../../visualTest/requests');
27
- const { checkIfMinimalOptionsAreProvided, validateOptions } = require('./capture/validation');
28
- const { createVtContext, applyToken, applyCiAndCommitInfo } = require('../../visualTest/context');
29
- const validatedOptions = validateOptions(options);
30
- const Input = require('../../input').default;
31
- const token = await Input.vtSuiteToken();
32
- if (!token) {
33
- output_1.default.exitError(texts_1.ERR_MISSING_VT_TOKEN);
34
- }
35
- const ctx = createVtContext();
36
- applyToken(ctx, token);
37
- if (!checkIfMinimalOptionsAreProvided(validatedOptions)) {
38
- output_1.default.exitError(texts_1.ERR_MISSING_URLS);
39
- }
40
- let urls = [];
41
- let sitemapSource;
42
- if (validatedOptions.urls) {
43
- const urlsList = getUrlsFromUrlOption(validatedOptions.urls);
44
- urls = urls.concat(urlsList);
45
- }
46
- if (validatedOptions.urlsFile) {
47
- const urlsList = getUrlsFromUrlFile(validatedOptions.urlsFile);
48
- urls = urls.concat(urlsList);
49
- }
50
- if (validatedOptions.sitemap) {
51
- sitemapSource = addProtocolIfMissing(validatedOptions.sitemap);
52
- }
53
- const { filteredUrls, duplicates } = filterDuplicates(urls);
54
- if (duplicates.length > 0) {
55
- output_1.default.normal(`Detected ${duplicates.length} duplicated urls:`);
56
- output_1.default.normal(duplicates.join('\n'));
57
- }
58
- if (validatedOptions.dryRun) {
59
- output_1.default.exitSuccess(`List of urls:\n${filteredUrls.join('\n')}`);
60
- }
61
- else if (filteredUrls.length > 1) {
62
- output_1.default.normal(`List of urls:\n${filteredUrls.join('\n')}`);
63
- }
64
- const ciAndGitInfo = await getCiAndGitInfo({});
65
- output_1.default.normal(formattedCiInfo(ciAndGitInfo));
66
- applyCiAndCommitInfo(ctx, ciAndGitInfo);
67
- try {
68
- const { message } = await sendCompareLinks(ctx, filteredUrls, validatedOptions, sitemapSource);
69
- output_1.default.exitSuccess(message);
70
- }
71
- catch (error) {
72
- output_1.default.exitError(`${error}`);
73
- }
74
- });
75
- function getUrlsFromUrlOption(urls) {
76
- const { addProtocolIfMissing } = require('../../visualTest/linkUtils');
77
- return urls.split(',').map((url) => addProtocolIfMissing(url).trim());
78
- }
79
- function getUrlsFromUrlFile(urlsFile) {
80
- const { addProtocolIfMissing } = require('../../visualTest/linkUtils');
81
- const urlsFromFile = (0, node_fs_1.readFileSync)(urlsFile, 'utf-8');
82
- return urlsFromFile
83
- .split('\n')
84
- .filter((url) => url.trim().length > 0)
85
- .map((url) => addProtocolIfMissing(url).trim());
86
- }
87
- function filterDuplicates(urls) {
88
- const seen = new Set();
89
- const duplicates = new Set();
90
- for (const url of urls) {
91
- if (seen.has(url)) {
92
- duplicates.add(url);
93
- }
94
- else {
95
- seen.add(url);
96
- }
97
- }
98
- return {
99
- filteredUrls: Array.from(seen),
100
- duplicates: Array.from(duplicates),
101
- };
102
- }
103
- exports.default = commandCapture;
@@ -1,61 +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 commandUtLink = (0, utils_1.newCommand)('link', texts_1.DESC_COMMAND_UT_LINK);
10
- commandUtLink.option('-w, --workspace <workspace>', texts_1.OPTION_REST_API_WORKSPACE);
11
- commandUtLink.option('-p, --project <project>', texts_1.OPTION_REST_API_PROJECT);
12
- commandUtLink.option('-s, --suite <suite>', texts_1.OPTION_SUITE_IDENTIFIER);
13
- commandUtLink.action(async (options) => {
14
- const Input = require('../../../input').default;
15
- const ProjectCfg = require('../../../project/cfg').default;
16
- output_1.default.handleSignals();
17
- const workspace = Input.restApiWorkspace(options.workspace);
18
- const project = Input.restApiProject(options.project);
19
- const client = Input.restApiTokenClient(false, options.api, options.region);
20
- let suiteIdentifier = options.suite;
21
- if (!suiteIdentifier) {
22
- const opt = await output_1.default.inputMenuAdv(texts_1.TXT_COMMAND_SUITE_SELECT, [
23
- {
24
- name: texts_1.TXT_COMMAND_SUITE_CREATE_NEW,
25
- description: texts_1.TXT_COMMAND_SUITE_CREATE_NEW_UT_DESC,
26
- value: 'new',
27
- },
28
- {
29
- name: texts_1.TXT_COMMAND_SUITE_LINK_EXISTING,
30
- description: texts_1.TXT_COMMAND_SUITE_LINK_EXISTING_DESC,
31
- value: 'existing',
32
- },
33
- ]);
34
- if (opt === 'new') {
35
- const name = await output_1.default.inputString(texts_1.TXT_COMMAND_SUITE_NAME);
36
- const response = await client.createUtSuite(workspace, project, { name, identifier: name });
37
- output_1.default.okSign();
38
- output_1.default.normal(texts_1.TXT_COMMAND_SUITE_CREATED);
39
- suiteIdentifier = response.identifier;
40
- }
41
- else {
42
- const result = await client.getUtSuites(workspace, project);
43
- const suites = result?.suites || [];
44
- if (!suites.length) {
45
- output_1.default.exitError(texts_1.ERR_NO_UT_SUITES);
46
- }
47
- if (suites.length === 1) {
48
- suiteIdentifier = suites[0].identifier;
49
- }
50
- else {
51
- const items = suites.map((s) => s.name || s.identifier);
52
- const index = await output_1.default.inputMenu(texts_1.TXT_COMMAND_UT_LINK_SELECT, items);
53
- suiteIdentifier = suites[index].identifier;
54
- }
55
- }
56
- }
57
- ProjectCfg.setSuite((0, utils_1.getWorkingDir)(), 'ut', suiteIdentifier);
58
- output_1.default.okSign();
59
- output_1.default.exitSuccess(texts_1.TXT_COMMAND_UT_LINK_SUCCESS);
60
- });
61
- exports.default = commandUtLink;
@@ -1,91 +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 commander_1 = require("commander");
10
- const node_path_1 = __importDefault(require("node:path"));
11
- const commandUtUpload = (0, utils_1.newCommand)('upload', texts_1.DESC_COMMAND_UT_UPLOAD);
12
- commandUtUpload.argument('<glob>', texts_1.OPTION_UPLOAD_REPORT_GLOB);
13
- commandUtUpload.addOption(new commander_1.Option('--format <format>', texts_1.OPTION_UPLOAD_REPORT_FORMAT)
14
- .choices(['junit-xml'])
15
- .makeOptionMandatory());
16
- commandUtUpload.option('--dryRun', texts_1.OPTION_UPLOAD_DRY_RUN);
17
- commandUtUpload.action(async (input, options) => {
18
- const { getCiInfo } = require('../../../unitTest/ci');
19
- const { sendUploadRequest } = require('../../../unitTest/requests');
20
- const { createUtContext, applyUtToken, applyUtCiInfo } = require('../../../unitTest/context');
21
- const Input = require('../../../input').default;
22
- const ctx = createUtContext();
23
- const token = await Input.utSuiteToken();
24
- if (!token) {
25
- output_1.default.exitError(texts_1.ERR_MISSING_UT_TOKEN);
26
- }
27
- applyUtToken(ctx, token);
28
- const { glob, dryRun } = validateInputAndOptions(input, options);
29
- const ciInfo = await getCiInfo();
30
- applyUtCiInfo(ctx, ciInfo);
31
- const { absolutePattern, files } = findFilesByGlob(glob);
32
- if (files.length === 0) {
33
- output_1.default.exitError(`No files matched the provided glob: ${absolutePattern}`);
34
- }
35
- if (dryRun) {
36
- output_1.default.normal(`Found ${files.length} report file(s) using pattern: ${absolutePattern}`);
37
- files.forEach((file) => {
38
- output_1.default.normal(file);
39
- });
40
- output_1.default.exitSuccess('Dry run completed');
41
- }
42
- await sendUploadRequest(ctx, files);
43
- output_1.default.exitSuccess('Upload completed');
44
- });
45
- exports.default = commandUtUpload;
46
- function validateInputAndOptions(input, options) {
47
- const z = require('zod');
48
- const { ZodError } = require('zod');
49
- const globSchema = z.string();
50
- const optionsSchema = z.object({
51
- format: z.enum(['junit-xml']),
52
- dryRun: z.boolean().optional(),
53
- });
54
- try {
55
- const glob = globSchema.parse(input);
56
- const { format, dryRun } = optionsSchema.parse(options);
57
- return {
58
- glob,
59
- format,
60
- dryRun,
61
- };
62
- }
63
- catch (error) {
64
- if (error instanceof ZodError) {
65
- output_1.default.exitError(error.errors.map((e) => `${e.path}: ${e.message}`).join(', '));
66
- }
67
- else {
68
- throw error;
69
- }
70
- }
71
- }
72
- function findFilesByGlob(pattern) {
73
- const { fdir } = require('fdir');
74
- const picomatch = require('picomatch');
75
- const cwd = process.cwd();
76
- const scan = picomatch.scan(pattern);
77
- if (!scan.isGlob) {
78
- return {
79
- absolutePattern: pattern,
80
- files: (0, utils_1.isFile)(pattern) ? [pattern] : [],
81
- };
82
- }
83
- if (node_path_1.default.isAbsolute(pattern)) {
84
- const root = scan.base;
85
- const files = new fdir().withFullPaths().glob(pattern).crawl(root).sync();
86
- return { absolutePattern: pattern, files };
87
- }
88
- const preparedPattern = node_path_1.default.resolve(cwd, pattern);
89
- const files = new fdir().withFullPaths().glob(preparedPattern).crawl().sync();
90
- return { absolutePattern: preparedPattern, files };
91
- }
@@ -1,13 +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 upload_1 = __importDefault(require("./unit/upload"));
9
- const link_1 = __importDefault(require("./unit/link"));
10
- const commandUnit = (0, utils_1.newCommand)('unit', texts_1.DESC_COMMAND_UNIT);
11
- commandUnit.addCommand(upload_1.default);
12
- commandUnit.addCommand(link_1.default);
13
- exports.default = commandUnit;