@uipath/rpa-tool 1.198.1 → 1.198.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/tool.js +518 -132
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -2197,7 +2197,7 @@ var {
|
|
|
2197
2197
|
|
|
2198
2198
|
// src/commander-polyfill.ts
|
|
2199
2199
|
if (!Command.prototype.trackedAction) {
|
|
2200
|
-
Command.prototype.trackedAction = function(context, fn) {
|
|
2200
|
+
Command.prototype.trackedAction = function(context, fn, _properties) {
|
|
2201
2201
|
return this.action(async (...args) => {
|
|
2202
2202
|
try {
|
|
2203
2203
|
await fn(...args);
|
package/dist/tool.js
CHANGED
|
@@ -3245,8 +3245,8 @@ async function refreshTokenFingerprint(refreshToken) {
|
|
|
3245
3245
|
const digest = await globalThis.crypto.subtle.digest("SHA-256", bytes);
|
|
3246
3246
|
return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, "0")).join("").slice(0, 16);
|
|
3247
3247
|
}
|
|
3248
|
-
const { createHash } = await import("node:crypto");
|
|
3249
|
-
return
|
|
3248
|
+
const { createHash: createHash2 } = await import("node:crypto");
|
|
3249
|
+
return createHash2("sha256").update(refreshToken).digest("hex").slice(0, 16);
|
|
3250
3250
|
}
|
|
3251
3251
|
function breakerPathFor(authPath) {
|
|
3252
3252
|
return `${authPath}${BREAKER_SUFFIX}`;
|
|
@@ -3986,19 +3986,19 @@ var __create3, __getProtoOf3, __defProp3, __getOwnPropNames3, __hasOwnProp3, __t
|
|
|
3986
3986
|
}
|
|
3987
3987
|
const subprocess = childProcess32.spawn(command, cliArguments, childProcessOptions);
|
|
3988
3988
|
if (options.wait) {
|
|
3989
|
-
return new Promise((
|
|
3989
|
+
return new Promise((resolve4, reject) => {
|
|
3990
3990
|
subprocess.once("error", reject);
|
|
3991
3991
|
subprocess.once("close", (exitCode) => {
|
|
3992
3992
|
if (!options.allowNonzeroExitCode && exitCode !== 0) {
|
|
3993
3993
|
reject(new Error(`Exited with code ${exitCode}`));
|
|
3994
3994
|
return;
|
|
3995
3995
|
}
|
|
3996
|
-
|
|
3996
|
+
resolve4(subprocess);
|
|
3997
3997
|
});
|
|
3998
3998
|
});
|
|
3999
3999
|
}
|
|
4000
4000
|
if (isFallbackAttempt) {
|
|
4001
|
-
return new Promise((
|
|
4001
|
+
return new Promise((resolve4, reject) => {
|
|
4002
4002
|
subprocess.once("error", reject);
|
|
4003
4003
|
subprocess.once("spawn", () => {
|
|
4004
4004
|
subprocess.once("close", (exitCode) => {
|
|
@@ -4008,17 +4008,17 @@ var __create3, __getProtoOf3, __defProp3, __getOwnPropNames3, __hasOwnProp3, __t
|
|
|
4008
4008
|
return;
|
|
4009
4009
|
}
|
|
4010
4010
|
subprocess.unref();
|
|
4011
|
-
|
|
4011
|
+
resolve4(subprocess);
|
|
4012
4012
|
});
|
|
4013
4013
|
});
|
|
4014
4014
|
});
|
|
4015
4015
|
}
|
|
4016
4016
|
subprocess.unref();
|
|
4017
|
-
return new Promise((
|
|
4017
|
+
return new Promise((resolve4, reject) => {
|
|
4018
4018
|
subprocess.once("error", reject);
|
|
4019
4019
|
subprocess.once("spawn", () => {
|
|
4020
4020
|
subprocess.off("error", reject);
|
|
4021
|
-
|
|
4021
|
+
resolve4(subprocess);
|
|
4022
4022
|
});
|
|
4023
4023
|
});
|
|
4024
4024
|
}, open2 = (target, options) => {
|
|
@@ -36901,19 +36901,19 @@ var isDockerCached3, cachedResult3, hasContainerEnv3 = () => {
|
|
|
36901
36901
|
}
|
|
36902
36902
|
const subprocess = childProcess33.spawn(command, cliArguments, childProcessOptions);
|
|
36903
36903
|
if (options.wait) {
|
|
36904
|
-
return new Promise((
|
|
36904
|
+
return new Promise((resolve5, reject) => {
|
|
36905
36905
|
subprocess.once("error", reject);
|
|
36906
36906
|
subprocess.once("close", (exitCode) => {
|
|
36907
36907
|
if (!options.allowNonzeroExitCode && exitCode !== 0) {
|
|
36908
36908
|
reject(new Error(`Exited with code ${exitCode}`));
|
|
36909
36909
|
return;
|
|
36910
36910
|
}
|
|
36911
|
-
|
|
36911
|
+
resolve5(subprocess);
|
|
36912
36912
|
});
|
|
36913
36913
|
});
|
|
36914
36914
|
}
|
|
36915
36915
|
if (isFallbackAttempt) {
|
|
36916
|
-
return new Promise((
|
|
36916
|
+
return new Promise((resolve5, reject) => {
|
|
36917
36917
|
subprocess.once("error", reject);
|
|
36918
36918
|
subprocess.once("spawn", () => {
|
|
36919
36919
|
subprocess.once("close", (exitCode) => {
|
|
@@ -36923,17 +36923,17 @@ var isDockerCached3, cachedResult3, hasContainerEnv3 = () => {
|
|
|
36923
36923
|
return;
|
|
36924
36924
|
}
|
|
36925
36925
|
subprocess.unref();
|
|
36926
|
-
|
|
36926
|
+
resolve5(subprocess);
|
|
36927
36927
|
});
|
|
36928
36928
|
});
|
|
36929
36929
|
});
|
|
36930
36930
|
}
|
|
36931
36931
|
subprocess.unref();
|
|
36932
|
-
return new Promise((
|
|
36932
|
+
return new Promise((resolve5, reject) => {
|
|
36933
36933
|
subprocess.once("error", reject);
|
|
36934
36934
|
subprocess.once("spawn", () => {
|
|
36935
36935
|
subprocess.off("error", reject);
|
|
36936
|
-
|
|
36936
|
+
resolve5(subprocess);
|
|
36937
36937
|
});
|
|
36938
36938
|
});
|
|
36939
36939
|
}, open3 = (target, options) => {
|
|
@@ -49534,7 +49534,7 @@ function withTrailingSeparator(p) {
|
|
|
49534
49534
|
}
|
|
49535
49535
|
|
|
49536
49536
|
// src/tool.ts
|
|
49537
|
-
import { resolve as
|
|
49537
|
+
import { resolve as resolve12 } from "node:path";
|
|
49538
49538
|
|
|
49539
49539
|
// node_modules/@uipath/common/dist/index.js
|
|
49540
49540
|
import { createRequire as createRequire2 } from "node:module";
|
|
@@ -59091,7 +59091,7 @@ var {
|
|
|
59091
59091
|
// package.json
|
|
59092
59092
|
var package_default = {
|
|
59093
59093
|
name: "@uipath/rpa-tool",
|
|
59094
|
-
version: "1.198.
|
|
59094
|
+
version: "1.198.2",
|
|
59095
59095
|
description: "Tool for creating and managing UiPath RPA projects",
|
|
59096
59096
|
keywords: [
|
|
59097
59097
|
"uipcli-tool",
|
|
@@ -59234,7 +59234,7 @@ function attachWrapperOptions(cmd) {
|
|
|
59234
59234
|
|
|
59235
59235
|
// src/commander-polyfill.ts
|
|
59236
59236
|
if (!Command2.prototype.trackedAction) {
|
|
59237
|
-
Command2.prototype.trackedAction = function(context, fn) {
|
|
59237
|
+
Command2.prototype.trackedAction = function(context, fn, _properties) {
|
|
59238
59238
|
return this.action(async (...args) => {
|
|
59239
59239
|
try {
|
|
59240
59240
|
await fn(...args);
|
|
@@ -59370,18 +59370,231 @@ var registerListInstancesCommand = (program3) => {
|
|
|
59370
59370
|
};
|
|
59371
59371
|
|
|
59372
59372
|
// src/commands/packager/analyze.ts
|
|
59373
|
-
import { isAbsolute as isAbsolute5, join as
|
|
59373
|
+
import { isAbsolute as isAbsolute5, join as join11 } from "node:path";
|
|
59374
|
+
|
|
59375
|
+
// src/telemetry/project-shape.ts
|
|
59376
|
+
import { readdirSync as readdirSync2, readFileSync } from "node:fs";
|
|
59377
|
+
import { dirname as dirname2, join as join4 } from "node:path";
|
|
59378
|
+
|
|
59379
|
+
// src/telemetry/project-json-path.ts
|
|
59380
|
+
import { statSync } from "node:fs";
|
|
59381
|
+
import { basename as basename2, join as join3, resolve as resolve2 } from "node:path";
|
|
59382
|
+
function resolveProjectJsonPath(input) {
|
|
59383
|
+
const abs = resolve2(input);
|
|
59384
|
+
let stats;
|
|
59385
|
+
try {
|
|
59386
|
+
stats = statSync(abs);
|
|
59387
|
+
} catch {
|
|
59388
|
+
return;
|
|
59389
|
+
}
|
|
59390
|
+
if (stats.isDirectory()) {
|
|
59391
|
+
return join3(abs, "project.json");
|
|
59392
|
+
}
|
|
59393
|
+
return basename2(abs).toLowerCase() === "project.json" ? abs : undefined;
|
|
59394
|
+
}
|
|
59395
|
+
|
|
59396
|
+
// src/telemetry/project-shape.ts
|
|
59397
|
+
var MAX_FILES = 500;
|
|
59398
|
+
var MAX_WALK_MS = 50;
|
|
59399
|
+
var SKIP_DIRS = new Set(["obj", "bin", "node_modules"]);
|
|
59400
|
+
function countActivities(xamlPath) {
|
|
59401
|
+
try {
|
|
59402
|
+
const matches = readFileSync(xamlPath, "utf8").match(/WorkflowViewState\.IdRef=/g);
|
|
59403
|
+
return matches ? matches.length : 0;
|
|
59404
|
+
} catch {
|
|
59405
|
+
return 0;
|
|
59406
|
+
}
|
|
59407
|
+
}
|
|
59408
|
+
function isTestCaseEntry(entry) {
|
|
59409
|
+
if (typeof entry !== "object" || entry === null) {
|
|
59410
|
+
return false;
|
|
59411
|
+
}
|
|
59412
|
+
const record = entry;
|
|
59413
|
+
if (record.isTestCase === true) {
|
|
59414
|
+
return true;
|
|
59415
|
+
}
|
|
59416
|
+
if (typeof record.testCaseId === "string" && record.testCaseId.length > 0) {
|
|
59417
|
+
return true;
|
|
59418
|
+
}
|
|
59419
|
+
for (const key of ["testCaseType", "editorType", "fileType", "type"]) {
|
|
59420
|
+
const value = record[key];
|
|
59421
|
+
if (typeof value === "string" && /test/i.test(value)) {
|
|
59422
|
+
return true;
|
|
59423
|
+
}
|
|
59424
|
+
}
|
|
59425
|
+
return false;
|
|
59426
|
+
}
|
|
59427
|
+
function readManifestCounts(jsonPath) {
|
|
59428
|
+
const counts = {};
|
|
59429
|
+
let project;
|
|
59430
|
+
try {
|
|
59431
|
+
project = JSON.parse(readFileSync(jsonPath, "utf8"));
|
|
59432
|
+
} catch {
|
|
59433
|
+
return counts;
|
|
59434
|
+
}
|
|
59435
|
+
if (project.dependencies && typeof project.dependencies === "object") {
|
|
59436
|
+
counts.dependencyCount = String(Object.keys(project.dependencies).length);
|
|
59437
|
+
}
|
|
59438
|
+
if (Array.isArray(project.entryPoints)) {
|
|
59439
|
+
counts.entryPointCount = String(project.entryPoints.length);
|
|
59440
|
+
}
|
|
59441
|
+
const fileInfo = project.designOptions?.fileInfoCollection;
|
|
59442
|
+
if (Array.isArray(fileInfo)) {
|
|
59443
|
+
counts.testCaseCount = String(fileInfo.filter(isTestCaseEntry).length);
|
|
59444
|
+
}
|
|
59445
|
+
return counts;
|
|
59446
|
+
}
|
|
59447
|
+
function getProjectShapeProps(projectDirInput) {
|
|
59448
|
+
if (!projectDirInput) {
|
|
59449
|
+
return {};
|
|
59450
|
+
}
|
|
59451
|
+
const jsonPath = resolveProjectJsonPath(projectDirInput);
|
|
59452
|
+
if (!jsonPath) {
|
|
59453
|
+
return {};
|
|
59454
|
+
}
|
|
59455
|
+
const projectDir = dirname2(jsonPath);
|
|
59456
|
+
const shape = readManifestCounts(jsonPath);
|
|
59457
|
+
let fileCount = 0;
|
|
59458
|
+
let workflowCount = 0;
|
|
59459
|
+
let codedWorkflowCount = 0;
|
|
59460
|
+
let activityCount = 0;
|
|
59461
|
+
let truncated = false;
|
|
59462
|
+
const start = performance.now();
|
|
59463
|
+
const stack = [projectDir];
|
|
59464
|
+
while (stack.length > 0 && !truncated) {
|
|
59465
|
+
const dir = stack.pop();
|
|
59466
|
+
if (dir === undefined) {
|
|
59467
|
+
break;
|
|
59468
|
+
}
|
|
59469
|
+
let entries;
|
|
59470
|
+
try {
|
|
59471
|
+
entries = readdirSync2(dir, { withFileTypes: true });
|
|
59472
|
+
} catch {
|
|
59473
|
+
continue;
|
|
59474
|
+
}
|
|
59475
|
+
for (const entry of entries) {
|
|
59476
|
+
if (fileCount >= MAX_FILES || performance.now() - start > MAX_WALK_MS) {
|
|
59477
|
+
truncated = true;
|
|
59478
|
+
break;
|
|
59479
|
+
}
|
|
59480
|
+
if (entry.isDirectory()) {
|
|
59481
|
+
if (!entry.name.startsWith(".") && !SKIP_DIRS.has(entry.name)) {
|
|
59482
|
+
stack.push(join4(dir, entry.name));
|
|
59483
|
+
}
|
|
59484
|
+
continue;
|
|
59485
|
+
}
|
|
59486
|
+
if (!entry.isFile()) {
|
|
59487
|
+
continue;
|
|
59488
|
+
}
|
|
59489
|
+
fileCount++;
|
|
59490
|
+
const lower2 = entry.name.toLowerCase();
|
|
59491
|
+
if (lower2.endsWith(".xaml")) {
|
|
59492
|
+
workflowCount++;
|
|
59493
|
+
activityCount += countActivities(join4(dir, entry.name));
|
|
59494
|
+
} else if (lower2.endsWith(".cs")) {
|
|
59495
|
+
codedWorkflowCount++;
|
|
59496
|
+
}
|
|
59497
|
+
}
|
|
59498
|
+
}
|
|
59499
|
+
shape.fileCount = String(fileCount);
|
|
59500
|
+
shape.workflowCount = String(workflowCount);
|
|
59501
|
+
shape.codedWorkflowCount = String(codedWorkflowCount);
|
|
59502
|
+
shape.activityCount = String(activityCount);
|
|
59503
|
+
if (truncated) {
|
|
59504
|
+
shape.shapeTruncated = "true";
|
|
59505
|
+
}
|
|
59506
|
+
return shape;
|
|
59507
|
+
}
|
|
59508
|
+
|
|
59509
|
+
// src/telemetry/studio-shaped-props.ts
|
|
59510
|
+
import { readFileSync as readFileSync2 } from "node:fs";
|
|
59511
|
+
|
|
59512
|
+
// src/telemetry/authoring-session.ts
|
|
59513
|
+
import { hostname } from "node:os";
|
|
59514
|
+
|
|
59515
|
+
// src/telemetry/identity-hash.ts
|
|
59516
|
+
import { createHash } from "node:crypto";
|
|
59517
|
+
function identityHash(value) {
|
|
59518
|
+
return createHash("sha256").update(value.trim().toLowerCase()).digest("hex").slice(0, 16);
|
|
59519
|
+
}
|
|
59520
|
+
|
|
59521
|
+
// src/telemetry/authoring-session.ts
|
|
59522
|
+
var SESSION_ID_ENV = "UIPATH_SESSION_ID";
|
|
59523
|
+
function getAuthoringSessionProps() {
|
|
59524
|
+
const explicit = process.env[SESSION_ID_ENV];
|
|
59525
|
+
if (explicit && explicit.trim().length > 0) {
|
|
59526
|
+
return {
|
|
59527
|
+
authoringSessionId: identityHash(explicit),
|
|
59528
|
+
authoringSessionSource: "explicit"
|
|
59529
|
+
};
|
|
59530
|
+
}
|
|
59531
|
+
try {
|
|
59532
|
+
return {
|
|
59533
|
+
authoringSessionId: identityHash(`${process.ppid}:${hostname()}`),
|
|
59534
|
+
authoringSessionSource: "ppid"
|
|
59535
|
+
};
|
|
59536
|
+
} catch {
|
|
59537
|
+
return {};
|
|
59538
|
+
}
|
|
59539
|
+
}
|
|
59540
|
+
|
|
59541
|
+
// src/telemetry/studio-shaped-props.ts
|
|
59542
|
+
var TELEMETRY_SOURCE = "rpa-tool";
|
|
59543
|
+
function asNonEmptyString(value) {
|
|
59544
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
59545
|
+
}
|
|
59546
|
+
function readProjectFields(input) {
|
|
59547
|
+
const path3 = resolveProjectJsonPath(input);
|
|
59548
|
+
if (!path3) {
|
|
59549
|
+
return {};
|
|
59550
|
+
}
|
|
59551
|
+
let project;
|
|
59552
|
+
try {
|
|
59553
|
+
project = JSON.parse(readFileSync2(path3, "utf8"));
|
|
59554
|
+
} catch {
|
|
59555
|
+
return {};
|
|
59556
|
+
}
|
|
59557
|
+
const fields = {};
|
|
59558
|
+
const set = (key, value) => {
|
|
59559
|
+
const str = asNonEmptyString(value);
|
|
59560
|
+
if (str) {
|
|
59561
|
+
fields[key] = str;
|
|
59562
|
+
}
|
|
59563
|
+
};
|
|
59564
|
+
const projectId = asNonEmptyString(project.projectId);
|
|
59565
|
+
if (projectId) {
|
|
59566
|
+
fields.projectIdHash = identityHash(projectId);
|
|
59567
|
+
const noDash = projectId.trim().toLowerCase().replaceAll("-", "");
|
|
59568
|
+
if (/^[0-9a-f]{32}$/.test(noDash)) {
|
|
59569
|
+
fields.projectIdNoDash = noDash;
|
|
59570
|
+
}
|
|
59571
|
+
}
|
|
59572
|
+
set("targetFramework", project.targetFramework);
|
|
59573
|
+
set("expressionLanguage", project.expressionLanguage);
|
|
59574
|
+
set("projectType", project.designOptions?.outputType);
|
|
59575
|
+
set("projectVersion", project.projectVersion);
|
|
59576
|
+
return fields;
|
|
59577
|
+
}
|
|
59578
|
+
function buildStudioShapedProps(projectDir, extra) {
|
|
59579
|
+
const fields = projectDir ? readProjectFields(projectDir) : {};
|
|
59580
|
+
return {
|
|
59581
|
+
source: TELEMETRY_SOURCE,
|
|
59582
|
+
...getAuthoringSessionProps(),
|
|
59583
|
+
...fields,
|
|
59584
|
+
...extra
|
|
59585
|
+
};
|
|
59586
|
+
}
|
|
59374
59587
|
|
|
59375
59588
|
// src/commands/packager/packager-shared.ts
|
|
59376
59589
|
import {
|
|
59377
59590
|
mkdtempSync as mkdtempSync2,
|
|
59378
|
-
readFileSync as
|
|
59591
|
+
readFileSync as readFileSync4,
|
|
59379
59592
|
rmSync as rmSync2,
|
|
59380
|
-
statSync,
|
|
59593
|
+
statSync as statSync2,
|
|
59381
59594
|
writeFileSync as writeFileSync2
|
|
59382
59595
|
} from "node:fs";
|
|
59383
59596
|
import { tmpdir as tmpdir7 } from "node:os";
|
|
59384
|
-
import { basename as
|
|
59597
|
+
import { basename as basename6, dirname as dirname6, join as join10, resolve as resolve6 } from "node:path";
|
|
59385
59598
|
|
|
59386
59599
|
// src/load-packager-tool.ts
|
|
59387
59600
|
async function loadPackagerTool() {
|
|
@@ -59401,7 +59614,7 @@ async function loadPackagerTool() {
|
|
|
59401
59614
|
// src/resolution/orchestrator-restore-feeds.ts
|
|
59402
59615
|
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
59403
59616
|
import { tmpdir as tmpdir4 } from "node:os";
|
|
59404
|
-
import { join as
|
|
59617
|
+
import { join as join6 } from "node:path";
|
|
59405
59618
|
var ORCHESTRATOR_RESTORE_FEEDS_ENV = "UIPATH_ORCHESTRATOR_RESTORE_FEEDS";
|
|
59406
59619
|
var FEEDS_TIMEOUT_MS = 1e4;
|
|
59407
59620
|
var LIBRARIES_PURPOSE = "Libraries";
|
|
@@ -59452,8 +59665,8 @@ async function fetchLibraryFeeds(orchestratorUrl, accessToken, tenantId, log) {
|
|
|
59452
59665
|
return feeds.filter((f) => f.purpose === LIBRARIES_PURPOSE && !!f.feedUrl).map((f) => ({ Url: f.feedUrl, AccessToken: accessToken }));
|
|
59453
59666
|
}
|
|
59454
59667
|
function writeFeedsFile(feeds) {
|
|
59455
|
-
const dir = mkdtempSync(
|
|
59456
|
-
const path4 =
|
|
59668
|
+
const dir = mkdtempSync(join6(tmpdir4(), "uip-rpa-feeds-"));
|
|
59669
|
+
const path4 = join6(dir, "nuget-feeds.json");
|
|
59457
59670
|
writeFileSync(path4, JSON.stringify(feeds));
|
|
59458
59671
|
process.on("exit", () => {
|
|
59459
59672
|
try {
|
|
@@ -59464,11 +59677,11 @@ function writeFeedsFile(feeds) {
|
|
|
59464
59677
|
}
|
|
59465
59678
|
|
|
59466
59679
|
// src/resolution/robot-bin-resolver.ts
|
|
59467
|
-
import { join as
|
|
59680
|
+
import { join as join7, posix, win32 } from "node:path";
|
|
59468
59681
|
|
|
59469
59682
|
// src/resolution/resolver-deps.ts
|
|
59470
59683
|
import { execFileSync as execFileSync5, spawn } from "node:child_process";
|
|
59471
|
-
import { existsSync as existsSync3, readdirSync as
|
|
59684
|
+
import { existsSync as existsSync3, readdirSync as readdirSync3, readFileSync as readFileSync3 } from "node:fs";
|
|
59472
59685
|
import { createRequire as createRequire4 } from "node:module";
|
|
59473
59686
|
|
|
59474
59687
|
// src/ipc/IpcCall.ts
|
|
@@ -60087,7 +60300,7 @@ class IpcCall {
|
|
|
60087
60300
|
const call = operation(this.proxy, this.ict);
|
|
60088
60301
|
if (this.timeoutMs == null)
|
|
60089
60302
|
return call;
|
|
60090
|
-
return new Promise((
|
|
60303
|
+
return new Promise((resolve4, reject) => {
|
|
60091
60304
|
let settled = false;
|
|
60092
60305
|
const timer = setTimeout(() => {
|
|
60093
60306
|
if (settled)
|
|
@@ -60100,7 +60313,7 @@ class IpcCall {
|
|
|
60100
60313
|
if (!settled) {
|
|
60101
60314
|
settled = true;
|
|
60102
60315
|
clearTimeout(timer);
|
|
60103
|
-
|
|
60316
|
+
resolve4(val);
|
|
60104
60317
|
}
|
|
60105
60318
|
}, (err) => {
|
|
60106
60319
|
if (!settled) {
|
|
@@ -60357,10 +60570,10 @@ var defaultResolverDeps = {
|
|
|
60357
60570
|
return existsSync3(path4);
|
|
60358
60571
|
},
|
|
60359
60572
|
readFile(path4) {
|
|
60360
|
-
return
|
|
60573
|
+
return readFileSync3(path4, "utf-8");
|
|
60361
60574
|
},
|
|
60362
60575
|
readDir(path4) {
|
|
60363
|
-
return
|
|
60576
|
+
return readdirSync3(path4);
|
|
60364
60577
|
},
|
|
60365
60578
|
resolveModule(specifier) {
|
|
60366
60579
|
return createRequire4(import.meta.url).resolve(specifier);
|
|
@@ -60382,7 +60595,7 @@ var defaultResolverDeps = {
|
|
|
60382
60595
|
child.unref();
|
|
60383
60596
|
},
|
|
60384
60597
|
sleep(ms) {
|
|
60385
|
-
return new Promise((
|
|
60598
|
+
return new Promise((resolve4) => setTimeout(resolve4, ms));
|
|
60386
60599
|
},
|
|
60387
60600
|
log(_message) {},
|
|
60388
60601
|
fetchFeatures(pipeName) {
|
|
@@ -60409,7 +60622,7 @@ var HELM_EXE = process.platform === "win32" ? "UiPath.Studio.Helm.exe" : "UiPath
|
|
|
60409
60622
|
// src/resolution/robot-bin-resolver.ts
|
|
60410
60623
|
var LOCAL_ROBOT_FEEDS_ENV = "UIPATH_LOCAL_ROBOT_FEEDS";
|
|
60411
60624
|
function robotNugetConfigPath(robotDir) {
|
|
60412
|
-
return
|
|
60625
|
+
return join7(robotDir, "NuGet.config");
|
|
60413
60626
|
}
|
|
60414
60627
|
var ROBOT_WINDOWS_MARKER = "UiRobot.exe";
|
|
60415
60628
|
var ROBOT_MACOS_MARKER = "UiRobot.dll";
|
|
@@ -60477,7 +60690,7 @@ var MIN_BUNDLED_DOTNET_MAJOR = 8;
|
|
|
60477
60690
|
function detectDotnetRuntimeMajor(dotnetRoot, deps) {
|
|
60478
60691
|
let entries;
|
|
60479
60692
|
try {
|
|
60480
|
-
entries = deps.readDir(
|
|
60693
|
+
entries = deps.readDir(join7(dotnetRoot, "shared", "Microsoft.NETCore.App"));
|
|
60481
60694
|
} catch {
|
|
60482
60695
|
return;
|
|
60483
60696
|
}
|
|
@@ -60496,10 +60709,10 @@ function detectDotnetRuntimeMajor(dotnetRoot, deps) {
|
|
|
60496
60709
|
function resolveBundledDotnet(robotDir, deps) {
|
|
60497
60710
|
if (!robotDir)
|
|
60498
60711
|
return;
|
|
60499
|
-
const exePath = process.platform === "win32" ?
|
|
60712
|
+
const exePath = process.platform === "win32" ? join7(robotDir, "dotnet.exe") : join7(robotDir, "dotnet", "dotnet");
|
|
60500
60713
|
if (!deps.fileExists(exePath))
|
|
60501
60714
|
return;
|
|
60502
|
-
const dotnetRoot = process.platform === "win32" ? robotDir :
|
|
60715
|
+
const dotnetRoot = process.platform === "win32" ? robotDir : join7(robotDir, "dotnet");
|
|
60503
60716
|
const runtimeMajor = detectDotnetRuntimeMajor(dotnetRoot, deps);
|
|
60504
60717
|
if (runtimeMajor === undefined || runtimeMajor < MIN_BUNDLED_DOTNET_MAJOR) {
|
|
60505
60718
|
const reason = runtimeMajor === undefined ? "could not determine its .NET runtime version" : `highest .NET runtime major ${runtimeMajor} is below the required ${MIN_BUNDLED_DOTNET_MAJOR}`;
|
|
@@ -60570,6 +60783,55 @@ async function resolveSessionConnection() {
|
|
|
60570
60783
|
}
|
|
60571
60784
|
}
|
|
60572
60785
|
|
|
60786
|
+
// src/telemetry/failure-classification.ts
|
|
60787
|
+
var NUGET_MISSING = /\bNU110[12]\b/;
|
|
60788
|
+
var COMPILER_DIAGNOSTIC = /\b(?:CS|BC)[0-9]{3,5}\b/;
|
|
60789
|
+
function classifyFailure(signal) {
|
|
60790
|
+
if (signal.exitCode === 130) {
|
|
60791
|
+
return "user_cancelled";
|
|
60792
|
+
}
|
|
60793
|
+
if (signal.isFileLock || signal.errorCode === "permission_denied") {
|
|
60794
|
+
return "internal";
|
|
60795
|
+
}
|
|
60796
|
+
const codes = `${signal.errorCode ?? ""} ${signal.message ?? ""}`;
|
|
60797
|
+
if (NUGET_MISSING.test(codes)) {
|
|
60798
|
+
return "missing_dependency";
|
|
60799
|
+
}
|
|
60800
|
+
if (COMPILER_DIAGNOSTIC.test(codes)) {
|
|
60801
|
+
return "validation";
|
|
60802
|
+
}
|
|
60803
|
+
return "unknown";
|
|
60804
|
+
}
|
|
60805
|
+
function extractRunExceptionType(rawResult) {
|
|
60806
|
+
let parsed;
|
|
60807
|
+
try {
|
|
60808
|
+
parsed = JSON.parse(rawResult);
|
|
60809
|
+
} catch {
|
|
60810
|
+
return;
|
|
60811
|
+
}
|
|
60812
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
60813
|
+
return;
|
|
60814
|
+
}
|
|
60815
|
+
const record = parsed;
|
|
60816
|
+
const direct = asTypeName(record.ExceptionType ?? record.exceptionType);
|
|
60817
|
+
if (direct) {
|
|
60818
|
+
return direct;
|
|
60819
|
+
}
|
|
60820
|
+
const debugDetails = record.DebugDetails ?? record.debugDetails;
|
|
60821
|
+
if (typeof debugDetails === "string") {
|
|
60822
|
+
try {
|
|
60823
|
+
const details = JSON.parse(debugDetails);
|
|
60824
|
+
return asTypeName(details.ExceptionType ?? details.exceptionType);
|
|
60825
|
+
} catch {
|
|
60826
|
+
return;
|
|
60827
|
+
}
|
|
60828
|
+
}
|
|
60829
|
+
return;
|
|
60830
|
+
}
|
|
60831
|
+
function asTypeName(value) {
|
|
60832
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
60833
|
+
}
|
|
60834
|
+
|
|
60573
60835
|
// src/commands/packager/packager-shared.ts
|
|
60574
60836
|
var LOG_LEVEL_NAMES = ["Debug", "Info", "Warn", "Error"];
|
|
60575
60837
|
var GOVERNANCE_FILE_TYPES = ["Default", "AutomationOps", "Studio"];
|
|
@@ -60609,22 +60871,22 @@ async function buildBaseOptions(opts) {
|
|
|
60609
60871
|
return options;
|
|
60610
60872
|
}
|
|
60611
60873
|
function resolveProjectInput(projectDir) {
|
|
60612
|
-
const abs =
|
|
60874
|
+
const abs = resolve6(projectDir);
|
|
60613
60875
|
let stats;
|
|
60614
60876
|
try {
|
|
60615
|
-
stats =
|
|
60877
|
+
stats = statSync2(abs);
|
|
60616
60878
|
} catch {
|
|
60617
60879
|
return abs;
|
|
60618
60880
|
}
|
|
60619
60881
|
if (!stats.isFile()) {
|
|
60620
60882
|
return abs;
|
|
60621
60883
|
}
|
|
60622
|
-
const fileName =
|
|
60884
|
+
const fileName = basename6(abs).toLowerCase();
|
|
60623
60885
|
if (fileName === "project.json") {
|
|
60624
|
-
return
|
|
60886
|
+
return dirname6(abs);
|
|
60625
60887
|
}
|
|
60626
60888
|
if (fileName.endsWith(".uip")) {
|
|
60627
|
-
return new Uint8Array(
|
|
60889
|
+
return new Uint8Array(readFileSync4(abs));
|
|
60628
60890
|
}
|
|
60629
60891
|
throw new Error(`Unsupported project input: ${abs}. Provide a project directory, project.json file, or .uip archive.`);
|
|
60630
60892
|
}
|
|
@@ -60632,8 +60894,8 @@ function createTemporaryFeedsConfig(feeds) {
|
|
|
60632
60894
|
if (feeds.length === 0) {
|
|
60633
60895
|
return;
|
|
60634
60896
|
}
|
|
60635
|
-
const directory = mkdtempSync2(
|
|
60636
|
-
const path4 =
|
|
60897
|
+
const directory = mkdtempSync2(join10(tmpdir7(), "rpa-tool-nuget-"));
|
|
60898
|
+
const path4 = join10(directory, "nuget-feeds.json");
|
|
60637
60899
|
try {
|
|
60638
60900
|
writeFileSync2(path4, JSON.stringify(feeds));
|
|
60639
60901
|
} catch (error) {
|
|
@@ -60654,7 +60916,7 @@ function cleanupTemporaryFeedsConfig(config) {
|
|
|
60654
60916
|
function readFeedSourcesFromFile(path4) {
|
|
60655
60917
|
let raw;
|
|
60656
60918
|
try {
|
|
60657
|
-
raw =
|
|
60919
|
+
raw = readFileSync4(path4, "utf8");
|
|
60658
60920
|
} catch {
|
|
60659
60921
|
return null;
|
|
60660
60922
|
}
|
|
@@ -60717,7 +60979,7 @@ async function runPackagerCommand(opts, config) {
|
|
|
60717
60979
|
OutputFormatter.error(new FailureOutput("Failure", `${config.label} failed: project directory must not be empty.`, config.hint));
|
|
60718
60980
|
return false;
|
|
60719
60981
|
}
|
|
60720
|
-
const projectDir =
|
|
60982
|
+
const projectDir = resolve6(rawProjectDir);
|
|
60721
60983
|
opts = { ...opts, projectDir };
|
|
60722
60984
|
const LOGGER_LEVELS = {
|
|
60723
60985
|
Debug: LogLevel.DEBUG,
|
|
@@ -60754,11 +61016,24 @@ async function runPackagerCommand(opts, config) {
|
|
|
60754
61016
|
return true;
|
|
60755
61017
|
}
|
|
60756
61018
|
const rawFailure = result.message ?? (result.errorCode ? `Error code: ${result.errorCode}` : "Unknown error");
|
|
60757
|
-
|
|
61019
|
+
const lockFailure = detectLockedProjectFilesFailure(config.label, rawFailure);
|
|
61020
|
+
const failure = lockFailure ?? new FailureOutput("Failure", `${config.label} failed: ${rawFailure}`, config.hint);
|
|
61021
|
+
failure.TelemetryErrorClass = classifyFailure({
|
|
61022
|
+
errorCode: result.errorCode,
|
|
61023
|
+
message: rawFailure,
|
|
61024
|
+
isFileLock: lockFailure !== null
|
|
61025
|
+
});
|
|
61026
|
+
OutputFormatter.error(failure);
|
|
60758
61027
|
return false;
|
|
60759
61028
|
} catch (error) {
|
|
60760
61029
|
const rawFailure = error instanceof Error ? error.message : String(error);
|
|
60761
|
-
|
|
61030
|
+
const lockFailure = detectLockedProjectFilesFailure(config.label, rawFailure);
|
|
61031
|
+
const failure = lockFailure ?? new FailureOutput("Failure", `${config.label} failed: ${rawFailure}`, config.hint);
|
|
61032
|
+
failure.TelemetryErrorClass = classifyFailure({
|
|
61033
|
+
message: rawFailure,
|
|
61034
|
+
isFileLock: lockFailure !== null
|
|
61035
|
+
});
|
|
61036
|
+
OutputFormatter.error(failure);
|
|
60762
61037
|
return false;
|
|
60763
61038
|
} finally {
|
|
60764
61039
|
cleanupTemporaryFeedsConfig(temporaryFeedsConfig);
|
|
@@ -60797,22 +61072,30 @@ function registerAnalyzeCommand(program4) {
|
|
|
60797
61072
|
isSuccessfulResult: (result) => result.isSuccess || extractFindings(result).length > 0,
|
|
60798
61073
|
formatSuccess: (result) => {
|
|
60799
61074
|
const findings = extractFindings(result);
|
|
61075
|
+
const summary = summarizeFindings(findings);
|
|
61076
|
+
emitAnalyzeResult(opts.projectDir, findings, summary);
|
|
60800
61077
|
return {
|
|
60801
61078
|
Success: true,
|
|
60802
|
-
Summary:
|
|
61079
|
+
Summary: summary,
|
|
60803
61080
|
Findings: findings
|
|
60804
61081
|
};
|
|
60805
61082
|
}
|
|
60806
61083
|
});
|
|
60807
61084
|
if (!success)
|
|
60808
61085
|
processContext.exit(1);
|
|
61086
|
+
}, (projectDir, opts) => {
|
|
61087
|
+
const dir = resolveProjectDir(projectDir, opts);
|
|
61088
|
+
return buildStudioShapedProps(dir, {
|
|
61089
|
+
action: "analyze",
|
|
61090
|
+
...getProjectShapeProps(dir)
|
|
61091
|
+
});
|
|
60809
61092
|
});
|
|
60810
61093
|
}
|
|
60811
61094
|
function resolveProjectDir(projectDir, opts) {
|
|
60812
61095
|
if (!opts.repositoryPath || isAbsolute5(projectDir)) {
|
|
60813
61096
|
return projectDir;
|
|
60814
61097
|
}
|
|
60815
|
-
return
|
|
61098
|
+
return join11(opts.repositoryPath, projectDir);
|
|
60816
61099
|
}
|
|
60817
61100
|
function resolveGovernanceFileType(opts) {
|
|
60818
61101
|
if (opts.policyFileType)
|
|
@@ -60906,6 +61189,29 @@ function summarizeFindings(findings) {
|
|
|
60906
61189
|
}
|
|
60907
61190
|
return summary;
|
|
60908
61191
|
}
|
|
61192
|
+
function emitAnalyzeResult(projectDir, findings, summary) {
|
|
61193
|
+
try {
|
|
61194
|
+
const topRuleIds = distinctRuleIds(findings).slice(0, 10).join(",");
|
|
61195
|
+
telemetry.trackEvent("uip.rpa.analyze.result", redactProperties({
|
|
61196
|
+
...buildStudioShapedProps(projectDir, { action: "analyze" }),
|
|
61197
|
+
findingCount: String(findings.length),
|
|
61198
|
+
errorCount: String(summary.Critical + summary.Error),
|
|
61199
|
+
warningCount: String(summary.Warning),
|
|
61200
|
+
infoCount: String(summary.Information + summary.Verbose),
|
|
61201
|
+
...topRuleIds ? { topRuleIds } : {}
|
|
61202
|
+
}));
|
|
61203
|
+
} catch {}
|
|
61204
|
+
}
|
|
61205
|
+
function distinctRuleIds(findings) {
|
|
61206
|
+
const ids = new Set;
|
|
61207
|
+
for (const finding of findings) {
|
|
61208
|
+
const id = finding.ErrorCode || finding.RuleName;
|
|
61209
|
+
if (id) {
|
|
61210
|
+
ids.add(id);
|
|
61211
|
+
}
|
|
61212
|
+
}
|
|
61213
|
+
return [...ids];
|
|
61214
|
+
}
|
|
60909
61215
|
function normalizeLevel(value) {
|
|
60910
61216
|
switch (value.toLowerCase()) {
|
|
60911
61217
|
case "critical":
|
|
@@ -60964,11 +61270,14 @@ function registerBuildCommand(program4) {
|
|
|
60964
61270
|
});
|
|
60965
61271
|
if (!success)
|
|
60966
61272
|
processContext.exit(1);
|
|
60967
|
-
})
|
|
61273
|
+
}, (projectDir) => buildStudioShapedProps(projectDir, {
|
|
61274
|
+
action: "build",
|
|
61275
|
+
...getProjectShapeProps(projectDir)
|
|
61276
|
+
}));
|
|
60968
61277
|
}
|
|
60969
61278
|
|
|
60970
61279
|
// src/commands/packager/pack.ts
|
|
60971
|
-
import { isAbsolute as isAbsolute6, resolve as
|
|
61280
|
+
import { isAbsolute as isAbsolute6, resolve as resolve7 } from "node:path";
|
|
60972
61281
|
function registerPackCommand(program4) {
|
|
60973
61282
|
const cmd = program4.command("pack").description("Pack a UiPath project into a .nupkg (compiles, validates, and bundles).");
|
|
60974
61283
|
cmd.argument("<project-dir>", "Path to the UiPath project directory, project.json file, or .uip archive").argument("<output-path>", "Directory where .nupkg is written");
|
|
@@ -61029,6 +61338,7 @@ function registerPackCommand(program4) {
|
|
|
61029
61338
|
const firstPackage = packages[0] ?? "";
|
|
61030
61339
|
const packagePath = firstPackage ? absolutePath(firstPackage) : "";
|
|
61031
61340
|
const packageMetadata = inferPackageMetadata(packagePath, opts.packageVersion);
|
|
61341
|
+
emitPackResult(opts.projectDir, packageMetadata);
|
|
61032
61342
|
return {
|
|
61033
61343
|
Success: true,
|
|
61034
61344
|
Packages: packages,
|
|
@@ -61042,10 +61352,22 @@ function registerPackCommand(program4) {
|
|
|
61042
61352
|
});
|
|
61043
61353
|
if (!success)
|
|
61044
61354
|
processContext.exit(1);
|
|
61045
|
-
})
|
|
61355
|
+
}, (projectDir) => buildStudioShapedProps(projectDir, {
|
|
61356
|
+
action: "pack",
|
|
61357
|
+
...getProjectShapeProps(projectDir)
|
|
61358
|
+
}));
|
|
61046
61359
|
}
|
|
61047
61360
|
function absolutePath(filePath) {
|
|
61048
|
-
return isAbsolute6(filePath) ? filePath :
|
|
61361
|
+
return isAbsolute6(filePath) ? filePath : resolve7(filePath);
|
|
61362
|
+
}
|
|
61363
|
+
function emitPackResult(projectDir, meta) {
|
|
61364
|
+
try {
|
|
61365
|
+
telemetry.trackEvent("uip.rpa.pack.result", redactProperties({
|
|
61366
|
+
...buildStudioShapedProps(projectDir, { action: "pack" }),
|
|
61367
|
+
...meta.packageName ? { packageIdHash: identityHash(meta.packageName) } : {},
|
|
61368
|
+
...meta.packageVersion ? { packageVersion: meta.packageVersion } : {}
|
|
61369
|
+
}));
|
|
61370
|
+
} catch {}
|
|
61049
61371
|
}
|
|
61050
61372
|
function inferPackageMetadata(packagePath, explicitVersion) {
|
|
61051
61373
|
const packageVersion = explicitVersion || inferPackageVersion(packagePath);
|
|
@@ -61075,10 +61397,10 @@ function packageFileStem(packagePath) {
|
|
|
61075
61397
|
// src/commands/packager/restore.ts
|
|
61076
61398
|
import { mkdtempSync as mkdtempSync3 } from "node:fs";
|
|
61077
61399
|
import { tmpdir as tmpdir8 } from "node:os";
|
|
61078
|
-
import { isAbsolute as isAbsolute7, join as
|
|
61400
|
+
import { isAbsolute as isAbsolute7, join as join12, relative as relative5, resolve as resolve8 } from "node:path";
|
|
61079
61401
|
function isWithinOrEqual(parent, candidate) {
|
|
61080
61402
|
const norm = process.platform === "win32" ? (p) => p.toLowerCase() : (p) => p;
|
|
61081
|
-
const rel = relative5(norm(
|
|
61403
|
+
const rel = relative5(norm(resolve8(parent)), norm(resolve8(candidate)));
|
|
61082
61404
|
if (rel === "")
|
|
61083
61405
|
return true;
|
|
61084
61406
|
return !rel.startsWith("..") && !isAbsolute7(rel);
|
|
@@ -61097,7 +61419,7 @@ function registerRestoreCommand(program4) {
|
|
|
61097
61419
|
label: "Restore",
|
|
61098
61420
|
hint: "Check project path and NuGet configuration.",
|
|
61099
61421
|
execute: async (packager, options) => {
|
|
61100
|
-
options.outputPath = outputPath ?? mkdtempSync3(
|
|
61422
|
+
options.outputPath = outputPath ?? mkdtempSync3(join12(tmpdir8(), "rpa-tool-restore-"));
|
|
61101
61423
|
return packager.restoreProjectAsync(options);
|
|
61102
61424
|
}
|
|
61103
61425
|
});
|
|
@@ -61116,7 +61438,7 @@ function kebabToCamel(name) {
|
|
|
61116
61438
|
}
|
|
61117
61439
|
|
|
61118
61440
|
// src/cli/structured-input.ts
|
|
61119
|
-
import { readFileSync as
|
|
61441
|
+
import { readFileSync as readFileSync5 } from "node:fs";
|
|
61120
61442
|
|
|
61121
61443
|
class StructuredInputError extends Error {
|
|
61122
61444
|
constructor(message) {
|
|
@@ -61129,7 +61451,7 @@ var defaultStructuredValueReader = {
|
|
|
61129
61451
|
readText(path4) {
|
|
61130
61452
|
let bytes;
|
|
61131
61453
|
try {
|
|
61132
|
-
bytes =
|
|
61454
|
+
bytes = readFileSync5(path4);
|
|
61133
61455
|
} catch (cause) {
|
|
61134
61456
|
throw new StructuredInputError(`Cannot read file '${path4}': ${cause instanceof Error ? cause.message : String(cause)}. ` + `File paths resolve relative to the current directory.`);
|
|
61135
61457
|
}
|
|
@@ -61954,7 +62276,53 @@ var CLI_DERIVED_COMMANDS = [
|
|
|
61954
62276
|
}
|
|
61955
62277
|
];
|
|
61956
62278
|
|
|
62279
|
+
// src/telemetry/tool-enrichment.ts
|
|
62280
|
+
function asString(value) {
|
|
62281
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
62282
|
+
}
|
|
62283
|
+
function globalProjectDir() {
|
|
62284
|
+
return extractArg(process.argv, "project-dir", process.cwd()) ?? process.cwd();
|
|
62285
|
+
}
|
|
62286
|
+
var TOOL_ENRICHERS = {
|
|
62287
|
+
[ToolName.RunFile]: (opts, lockedCommand) => buildStudioShapedProps(globalProjectDir(), {
|
|
62288
|
+
action: "run",
|
|
62289
|
+
runKind: String(lockedCommand ?? opts.command ?? "StartExecution")
|
|
62290
|
+
}),
|
|
62291
|
+
[ToolName.CreateProject]: (opts) => {
|
|
62292
|
+
const extra = { action: "create" };
|
|
62293
|
+
const targetFramework = asString(opts.targetFramework);
|
|
62294
|
+
if (targetFramework)
|
|
62295
|
+
extra.targetFramework = targetFramework;
|
|
62296
|
+
const expressionLanguage = asString(opts.expressionLanguage);
|
|
62297
|
+
if (expressionLanguage)
|
|
62298
|
+
extra.expressionLanguage = expressionLanguage;
|
|
62299
|
+
const templateId = asString(opts.templateId);
|
|
62300
|
+
if (templateId)
|
|
62301
|
+
extra.templateId = templateId;
|
|
62302
|
+
return buildStudioShapedProps(undefined, extra);
|
|
62303
|
+
},
|
|
62304
|
+
[ToolName.OpenProject]: (opts) => buildStudioShapedProps(asString(opts.projectDir) ?? globalProjectDir(), {
|
|
62305
|
+
action: "handoff-to-studio"
|
|
62306
|
+
}),
|
|
62307
|
+
[ToolName.GetErrors]: () => buildStudioShapedProps(globalProjectDir(), { action: "diagnose" }),
|
|
62308
|
+
[ToolName.InstallOrUpdatePackages]: () => buildStudioShapedProps(globalProjectDir(), {
|
|
62309
|
+
action: "manage-dependencies"
|
|
62310
|
+
})
|
|
62311
|
+
};
|
|
62312
|
+
function hasToolEnricher(toolName) {
|
|
62313
|
+
return Object.hasOwn(TOOL_ENRICHERS, toolName);
|
|
62314
|
+
}
|
|
62315
|
+
function studioShapedPropsForTool(toolName, opts, lockedCommand) {
|
|
62316
|
+
return TOOL_ENRICHERS[toolName]?.(opts, lockedCommand);
|
|
62317
|
+
}
|
|
62318
|
+
|
|
61957
62319
|
// src/commands/register-mcp-commands.ts
|
|
62320
|
+
function studioShapedPropsCallback(toolName, lockedCommand) {
|
|
62321
|
+
if (!hasToolEnricher(toolName)) {
|
|
62322
|
+
return;
|
|
62323
|
+
}
|
|
62324
|
+
return (opts) => studioShapedPropsForTool(toolName, opts, lockedCommand) ?? {};
|
|
62325
|
+
}
|
|
61958
62326
|
async function registerMcpCommands(program4, client) {
|
|
61959
62327
|
const tools = await client.listTools();
|
|
61960
62328
|
const groupCache = new Map;
|
|
@@ -62011,7 +62379,7 @@ function registerDerivedCommand(program4, baseTool, derived, cache, client) {
|
|
|
62011
62379
|
if (output.exitCode !== 0) {
|
|
62012
62380
|
processContext.exit(output.exitCode);
|
|
62013
62381
|
}
|
|
62014
|
-
});
|
|
62382
|
+
}, studioShapedPropsCallback(baseTool.name, derived.lockedArgs.command));
|
|
62015
62383
|
}
|
|
62016
62384
|
function getOrCreateGroup(program4, segments, cache) {
|
|
62017
62385
|
let parent = program4;
|
|
@@ -62054,7 +62422,7 @@ function registerSubcommand(program4, tool, cliCmd, hidden, client) {
|
|
|
62054
62422
|
if (output.exitCode !== 0) {
|
|
62055
62423
|
processContext.exit(output.exitCode);
|
|
62056
62424
|
}
|
|
62057
|
-
});
|
|
62425
|
+
}, studioShapedPropsCallback(tool.name));
|
|
62058
62426
|
}
|
|
62059
62427
|
function applyStructuredArgErrorHint(sub3, flags) {
|
|
62060
62428
|
const structured = flags.filter((f) => f.typeHint === "json" || f.typeHint === "jsonArray");
|
|
@@ -62135,7 +62503,7 @@ function addFlagToCommand(sub3, flag) {
|
|
|
62135
62503
|
}
|
|
62136
62504
|
|
|
62137
62505
|
// src/resolution/helm-npm-resolver.ts
|
|
62138
|
-
import { dirname as
|
|
62506
|
+
import { dirname as dirname7, join as join13 } from "node:path";
|
|
62139
62507
|
function helmPackageName() {
|
|
62140
62508
|
const key = `${process.platform}-${process.arch}`;
|
|
62141
62509
|
switch (key) {
|
|
@@ -62158,7 +62526,7 @@ function helmPackageName() {
|
|
|
62158
62526
|
function resolveHelmFromNpm(deps) {
|
|
62159
62527
|
const localDir = process.env.HELM_LOCAL_DIR;
|
|
62160
62528
|
if (localDir) {
|
|
62161
|
-
const helmExePath2 =
|
|
62529
|
+
const helmExePath2 = join13(localDir, HELM_EXE);
|
|
62162
62530
|
if (deps.fileExists(helmExePath2)) {
|
|
62163
62531
|
deps.log(`Using local Helm from HELM_LOCAL_DIR: ${localDir}`);
|
|
62164
62532
|
return { toolsDir: localDir, helmExePath: helmExePath2 };
|
|
@@ -62174,8 +62542,8 @@ function resolveHelmFromNpm(deps) {
|
|
|
62174
62542
|
const detail = err2 instanceof Error ? err2.message : String(err2);
|
|
62175
62543
|
throw new Error(`Helm binary package '${packageName}' is not installed. It installs ` + "automatically as an optionalDependency of @uipath/rpa-tool for " + `${process.platform}/${process.arch}. If you installed with ` + "--omit=optional or --no-optional, reinstall without that flag, or " + `set HELM_LOCAL_DIR to a Helm tools directory. (${detail})`);
|
|
62176
62544
|
}
|
|
62177
|
-
const toolsDir =
|
|
62178
|
-
const helmExePath =
|
|
62545
|
+
const toolsDir = join13(dirname7(packageJsonPath), "tools");
|
|
62546
|
+
const helmExePath = join13(toolsDir, HELM_EXE);
|
|
62179
62547
|
if (!deps.fileExists(helmExePath)) {
|
|
62180
62548
|
throw new Error(`Helm binary not found at ${helmExePath} inside package ` + `'${packageName}'. The package may be corrupt or incomplete.`);
|
|
62181
62549
|
}
|
|
@@ -62218,17 +62586,17 @@ import {
|
|
|
62218
62586
|
existsSync as existsSync6,
|
|
62219
62587
|
mkdirSync as mkdirSync2,
|
|
62220
62588
|
openSync as openSync2,
|
|
62221
|
-
readdirSync as
|
|
62222
|
-
readFileSync as
|
|
62589
|
+
readdirSync as readdirSync4,
|
|
62590
|
+
readFileSync as readFileSync6,
|
|
62223
62591
|
renameSync,
|
|
62224
62592
|
rmSync as rmSync3,
|
|
62225
|
-
statSync as
|
|
62593
|
+
statSync as statSync3,
|
|
62226
62594
|
unlinkSync as unlinkSync2,
|
|
62227
62595
|
utimesSync,
|
|
62228
62596
|
writeSync
|
|
62229
62597
|
} from "node:fs";
|
|
62230
62598
|
import { homedir as homedir5 } from "node:os";
|
|
62231
|
-
import { join as
|
|
62599
|
+
import { join as join14 } from "node:path";
|
|
62232
62600
|
var DEFAULT_MAX_SLOTS = 3;
|
|
62233
62601
|
var READY_MARKER = ".ready";
|
|
62234
62602
|
var STAGING_DIR = ".staging";
|
|
@@ -62242,20 +62610,20 @@ function resolveHelmCacheRoot() {
|
|
|
62242
62610
|
if (override)
|
|
62243
62611
|
return override;
|
|
62244
62612
|
if (process.platform === "win32") {
|
|
62245
|
-
const base = process.env.LOCALAPPDATA ??
|
|
62246
|
-
return
|
|
62613
|
+
const base = process.env.LOCALAPPDATA ?? join14(homedir5(), "AppData", "Local");
|
|
62614
|
+
return join14(base, "UiPath", "Helm");
|
|
62247
62615
|
}
|
|
62248
62616
|
if (process.platform === "darwin") {
|
|
62249
|
-
return
|
|
62617
|
+
return join14(homedir5(), "Library", "Caches", "UiPath", "Helm");
|
|
62250
62618
|
}
|
|
62251
|
-
const xdg = process.env.XDG_CACHE_HOME ??
|
|
62252
|
-
return
|
|
62619
|
+
const xdg = process.env.XDG_CACHE_HOME ?? join14(homedir5(), ".cache");
|
|
62620
|
+
return join14(xdg, "uipath", "helm");
|
|
62253
62621
|
}
|
|
62254
62622
|
function slotName(version) {
|
|
62255
62623
|
return version.replace(/[\\/]/g, "_");
|
|
62256
62624
|
}
|
|
62257
62625
|
function helmSlotDir(root, version) {
|
|
62258
|
-
return
|
|
62626
|
+
return join14(root, slotName(version));
|
|
62259
62627
|
}
|
|
62260
62628
|
function touch(path4) {
|
|
62261
62629
|
try {
|
|
@@ -62271,7 +62639,7 @@ function tryAcquireLock(lockPath, log) {
|
|
|
62271
62639
|
return true;
|
|
62272
62640
|
} catch {
|
|
62273
62641
|
try {
|
|
62274
|
-
const raw =
|
|
62642
|
+
const raw = readFileSync6(lockPath, "utf-8");
|
|
62275
62643
|
const { pid, ts } = JSON.parse(raw);
|
|
62276
62644
|
const dead = typeof pid === "number" && !isProcessAlive(pid);
|
|
62277
62645
|
const old = typeof ts === "number" && Date.now() - ts > STALE_LOCK_MS;
|
|
@@ -62290,14 +62658,14 @@ function releaseLock(lockPath) {
|
|
|
62290
62658
|
} catch {}
|
|
62291
62659
|
}
|
|
62292
62660
|
function publishSlot(sourceToolsDir, slot, root, version, log) {
|
|
62293
|
-
const stagingRoot =
|
|
62661
|
+
const stagingRoot = join14(root, STAGING_DIR);
|
|
62294
62662
|
mkdirSync2(stagingRoot, { recursive: true });
|
|
62295
|
-
const staging =
|
|
62663
|
+
const staging = join14(stagingRoot, `${slotName(version)}-${process.pid}-${Date.now().toString(36)}`);
|
|
62296
62664
|
rmSync3(staging, { recursive: true, force: true });
|
|
62297
62665
|
log(`Materializing Helm slot ${slot} from ${sourceToolsDir}`);
|
|
62298
62666
|
cpSync(sourceToolsDir, staging, { recursive: true });
|
|
62299
62667
|
const now = new Date;
|
|
62300
|
-
const markerFd = openSync2(
|
|
62668
|
+
const markerFd = openSync2(join14(staging, READY_MARKER), "w");
|
|
62301
62669
|
writeSync(markerFd, now.getTime().toString());
|
|
62302
62670
|
closeSync2(markerFd);
|
|
62303
62671
|
rmSync3(slot, { recursive: true, force: true });
|
|
@@ -62308,14 +62676,14 @@ function publishSlot(sourceToolsDir, slot, root, version, log) {
|
|
|
62308
62676
|
}
|
|
62309
62677
|
}
|
|
62310
62678
|
function evictSlots(root, targetSlot, liveBinDirs, maxSlots, log) {
|
|
62311
|
-
const entries =
|
|
62679
|
+
const entries = readdirSync4(root, { withFileTypes: true }).filter((e) => e.isDirectory() && e.name !== STAGING_DIR).map((e) => join14(root, e.name)).filter((dir) => existsSync6(join14(dir, READY_MARKER)));
|
|
62312
62680
|
if (entries.length <= maxSlots)
|
|
62313
62681
|
return;
|
|
62314
62682
|
const targetNorm = normalizePath(targetSlot);
|
|
62315
62683
|
const now = Date.now();
|
|
62316
62684
|
const readyMtime = (dir) => {
|
|
62317
62685
|
try {
|
|
62318
|
-
return
|
|
62686
|
+
return statSync3(join14(dir, READY_MARKER)).mtimeMs;
|
|
62319
62687
|
} catch {
|
|
62320
62688
|
return 0;
|
|
62321
62689
|
}
|
|
@@ -62340,20 +62708,20 @@ function evictSlots(root, targetSlot, liveBinDirs, maxSlots, log) {
|
|
|
62340
62708
|
}
|
|
62341
62709
|
}
|
|
62342
62710
|
function cleanupStale(root) {
|
|
62343
|
-
const stagingRoot =
|
|
62711
|
+
const stagingRoot = join14(root, STAGING_DIR);
|
|
62344
62712
|
let entries;
|
|
62345
62713
|
try {
|
|
62346
|
-
entries =
|
|
62714
|
+
entries = readdirSync4(stagingRoot);
|
|
62347
62715
|
} catch {
|
|
62348
62716
|
return;
|
|
62349
62717
|
}
|
|
62350
62718
|
const now = Date.now();
|
|
62351
62719
|
for (const name of entries) {
|
|
62352
|
-
const dir =
|
|
62720
|
+
const dir = join14(stagingRoot, name);
|
|
62353
62721
|
const parts = name.split("-");
|
|
62354
62722
|
const pid = Number.parseInt(parts[parts.length - 2] ?? "", 10);
|
|
62355
62723
|
try {
|
|
62356
|
-
const age = now -
|
|
62724
|
+
const age = now - statSync3(dir).mtimeMs;
|
|
62357
62725
|
const ownerDead = Number.isNaN(pid) || !isProcessAlive(pid);
|
|
62358
62726
|
if (ownerDead && age > STALE_STAGING_MS) {
|
|
62359
62727
|
rmSync3(dir, { recursive: true, force: true });
|
|
@@ -62367,14 +62735,14 @@ async function ensureHelmSlot(opts) {
|
|
|
62367
62735
|
const root = opts.cacheRoot ?? resolveHelmCacheRoot();
|
|
62368
62736
|
const maxSlots = opts.maxSlots ?? DEFAULT_MAX_SLOTS;
|
|
62369
62737
|
const slot = helmSlotDir(root, opts.version);
|
|
62370
|
-
const readyPath =
|
|
62738
|
+
const readyPath = join14(slot, READY_MARKER);
|
|
62371
62739
|
const fromSource = () => ({
|
|
62372
62740
|
toolsDir: opts.sourceToolsDir,
|
|
62373
|
-
helmExePath:
|
|
62741
|
+
helmExePath: join14(opts.sourceToolsDir, opts.helmExeName)
|
|
62374
62742
|
});
|
|
62375
62743
|
const fromSlot = () => {
|
|
62376
62744
|
touch(readyPath);
|
|
62377
|
-
return { toolsDir: slot, helmExePath:
|
|
62745
|
+
return { toolsDir: slot, helmExePath: join14(slot, opts.helmExeName) };
|
|
62378
62746
|
};
|
|
62379
62747
|
if (existsSync6(readyPath)) {
|
|
62380
62748
|
log(`Using cached Helm slot: ${slot}`);
|
|
@@ -62386,7 +62754,7 @@ async function ensureHelmSlot(opts) {
|
|
|
62386
62754
|
log(`Cannot create Helm cache root ${root}; running from source.`);
|
|
62387
62755
|
return fromSource();
|
|
62388
62756
|
}
|
|
62389
|
-
const lockPath =
|
|
62757
|
+
const lockPath = join14(root, `${slotName(opts.version)}.lock`);
|
|
62390
62758
|
const deadline = Date.now() + MAX_WAIT_MS;
|
|
62391
62759
|
while (true) {
|
|
62392
62760
|
if (existsSync6(readyPath))
|
|
@@ -62422,7 +62790,7 @@ async function ensureHelmSlot(opts) {
|
|
|
62422
62790
|
}
|
|
62423
62791
|
|
|
62424
62792
|
// src/resolution/studio-bin-resolver.ts
|
|
62425
|
-
import { join as
|
|
62793
|
+
import { join as join15, win32 as win322 } from "node:path";
|
|
62426
62794
|
function getProcessExecutablePath(pid, deps) {
|
|
62427
62795
|
const exePath = deps.executeCommand("powershell", [
|
|
62428
62796
|
"-NoProfile",
|
|
@@ -62517,7 +62885,7 @@ function getStudioFileVersion(binDir, deps) {
|
|
|
62517
62885
|
}
|
|
62518
62886
|
}
|
|
62519
62887
|
function readManifest(binDir, filename, deps) {
|
|
62520
|
-
const manifestPath =
|
|
62888
|
+
const manifestPath = join15(binDir, filename);
|
|
62521
62889
|
try {
|
|
62522
62890
|
const content = deps.readFile(manifestPath);
|
|
62523
62891
|
return JSON.parse(content);
|
|
@@ -62530,7 +62898,7 @@ function readInteropManifest(binDir, deps) {
|
|
|
62530
62898
|
return readManifest(binDir, INTEROP_MANIFEST, deps);
|
|
62531
62899
|
}
|
|
62532
62900
|
function validateInteropSupport(binDir, deps) {
|
|
62533
|
-
const manifestPath =
|
|
62901
|
+
const manifestPath = join15(binDir, INTEROP_MANIFEST);
|
|
62534
62902
|
if (!deps.fileExists(manifestPath)) {
|
|
62535
62903
|
const version = getStudioFileVersion(binDir, deps);
|
|
62536
62904
|
throw new Error(`Studio ${version} does not support rpa-tool. Please upgrade to the latest version of UiPath Studio.`);
|
|
@@ -62538,8 +62906,8 @@ function validateInteropSupport(binDir, deps) {
|
|
|
62538
62906
|
}
|
|
62539
62907
|
|
|
62540
62908
|
// src/resolution/studio-startup.ts
|
|
62541
|
-
import { chmodSync, statSync as
|
|
62542
|
-
import { join as
|
|
62909
|
+
import { chmodSync, statSync as statSync4 } from "node:fs";
|
|
62910
|
+
import { join as join16 } from "node:path";
|
|
62543
62911
|
async function waitForInstanceAvailability(processId, deps, timeoutMs = DEFAULT_TIMEOUT_MS2) {
|
|
62544
62912
|
const deadline = Date.now() + timeoutMs;
|
|
62545
62913
|
let pollCount = 0;
|
|
@@ -62568,7 +62936,7 @@ async function waitForInstanceAvailability(processId, deps, timeoutMs = DEFAULT_
|
|
|
62568
62936
|
async function startStudioAndWait(binDir, deps, timeoutMs = DEFAULT_TIMEOUT_MS2) {
|
|
62569
62937
|
const existingPids = new Set(deps.discoverInstances().instances.map((i2) => i2.processId));
|
|
62570
62938
|
deps.log(`Existing Studio PIDs: [${[...existingPids].join(", ")}]`);
|
|
62571
|
-
const exePath =
|
|
62939
|
+
const exePath = join16(binDir, STUDIO_EXE);
|
|
62572
62940
|
deps.log(`Starting Studio: ${exePath}`);
|
|
62573
62941
|
deps.spawnDetached(exePath, []);
|
|
62574
62942
|
const deadline = Date.now() + timeoutMs;
|
|
@@ -62603,7 +62971,7 @@ function ensureExecutable(exePath, log) {
|
|
|
62603
62971
|
if (process.platform === "win32")
|
|
62604
62972
|
return;
|
|
62605
62973
|
try {
|
|
62606
|
-
chmodSync(exePath,
|
|
62974
|
+
chmodSync(exePath, statSync4(exePath).mode | 73);
|
|
62607
62975
|
} catch (err2) {
|
|
62608
62976
|
log(`Could not set +x on ${exePath}: ${err2 instanceof Error ? err2.message : String(err2)}`);
|
|
62609
62977
|
}
|
|
@@ -63279,8 +63647,8 @@ function createInterpolator(values) {
|
|
|
63279
63647
|
}
|
|
63280
63648
|
|
|
63281
63649
|
// src/external-cli/discovery.ts
|
|
63282
|
-
import { existsSync as existsSync7, readFileSync as
|
|
63283
|
-
import { join as
|
|
63650
|
+
import { existsSync as existsSync7, readFileSync as readFileSync7 } from "node:fs";
|
|
63651
|
+
import { join as join17 } from "node:path";
|
|
63284
63652
|
|
|
63285
63653
|
class MissingAllDependenciesError extends Error {
|
|
63286
63654
|
projectDir;
|
|
@@ -63312,10 +63680,10 @@ class PackageRootMissingError extends Error {
|
|
|
63312
63680
|
}
|
|
63313
63681
|
var defaultDeps = {
|
|
63314
63682
|
fileExists: existsSync7,
|
|
63315
|
-
readFile: (path4) =>
|
|
63683
|
+
readFile: (path4) => readFileSync7(path4, "utf-8")
|
|
63316
63684
|
};
|
|
63317
63685
|
function discoverPackageRoot(params, deps = defaultDeps) {
|
|
63318
|
-
const depsFile =
|
|
63686
|
+
const depsFile = join17(params.projectDir, ".local", "AllDependencies.json");
|
|
63319
63687
|
if (!deps.fileExists(depsFile)) {
|
|
63320
63688
|
throw new MissingAllDependenciesError(params.projectDir, depsFile);
|
|
63321
63689
|
}
|
|
@@ -63325,7 +63693,7 @@ function discoverPackageRoot(params, deps = defaultDeps) {
|
|
|
63325
63693
|
if (packageFolders.length === 0) {
|
|
63326
63694
|
throw new Error("No packageFolders found in AllDependencies.json.");
|
|
63327
63695
|
}
|
|
63328
|
-
const packageRoot =
|
|
63696
|
+
const packageRoot = join17(packageFolders[0], library.path);
|
|
63329
63697
|
if (!deps.fileExists(packageRoot)) {
|
|
63330
63698
|
throw new PackageRootMissingError(packageRoot);
|
|
63331
63699
|
}
|
|
@@ -63347,23 +63715,23 @@ function findLibraryEntry(allDeps, packageId) {
|
|
|
63347
63715
|
import {
|
|
63348
63716
|
existsSync as existsSync8,
|
|
63349
63717
|
mkdirSync as mkdirSync3,
|
|
63350
|
-
readFileSync as
|
|
63351
|
-
statSync as
|
|
63718
|
+
readFileSync as readFileSync8,
|
|
63719
|
+
statSync as statSync5,
|
|
63352
63720
|
writeFileSync as writeFileSync3
|
|
63353
63721
|
} from "node:fs";
|
|
63354
|
-
import { dirname as
|
|
63722
|
+
import { dirname as dirname8, join as join18 } from "node:path";
|
|
63355
63723
|
var defaultDeps2 = {
|
|
63356
63724
|
fileExists: existsSync8,
|
|
63357
|
-
readFile: (path4) =>
|
|
63725
|
+
readFile: (path4) => readFileSync8(path4, "utf-8"),
|
|
63358
63726
|
writeFile: (path4, content) => {
|
|
63359
|
-
mkdirSync3(
|
|
63727
|
+
mkdirSync3(dirname8(path4), { recursive: true });
|
|
63360
63728
|
writeFileSync3(path4, content, "utf-8");
|
|
63361
63729
|
},
|
|
63362
|
-
getModifiedTime: (path4) =>
|
|
63730
|
+
getModifiedTime: (path4) => statSync5(path4).mtimeMs
|
|
63363
63731
|
};
|
|
63364
63732
|
function discoverPackageRootCached(params, deps = defaultDeps2) {
|
|
63365
|
-
const cacheFilePath =
|
|
63366
|
-
const allDepsPath =
|
|
63733
|
+
const cacheFilePath = join18(params.projectDir, ".local", "rpa-tool", `${params.commandName}.json`);
|
|
63734
|
+
const allDepsPath = join18(params.projectDir, ".local", "AllDependencies.json");
|
|
63367
63735
|
let entry;
|
|
63368
63736
|
if (deps.fileExists(cacheFilePath)) {
|
|
63369
63737
|
try {
|
|
@@ -63419,7 +63787,7 @@ function mergeEnv(extra) {
|
|
|
63419
63787
|
return { ...process.env, ...extra };
|
|
63420
63788
|
}
|
|
63421
63789
|
function spawnForward(exePath, args, env) {
|
|
63422
|
-
return new Promise((
|
|
63790
|
+
return new Promise((resolve9, reject) => {
|
|
63423
63791
|
const child = spawn3(exePath, args, {
|
|
63424
63792
|
stdio: "inherit",
|
|
63425
63793
|
env: mergeEnv(env)
|
|
@@ -63428,12 +63796,12 @@ function spawnForward(exePath, args, env) {
|
|
|
63428
63796
|
reject(new Error(`Failed to spawn '${exePath}': ${err2.message}`));
|
|
63429
63797
|
});
|
|
63430
63798
|
child.on("close", (code) => {
|
|
63431
|
-
|
|
63799
|
+
resolve9(code ?? 1);
|
|
63432
63800
|
});
|
|
63433
63801
|
});
|
|
63434
63802
|
}
|
|
63435
63803
|
function spawnCapture(exePath, args, env) {
|
|
63436
|
-
return new Promise((
|
|
63804
|
+
return new Promise((resolve9, reject) => {
|
|
63437
63805
|
const child = spawn3(exePath, args, {
|
|
63438
63806
|
stdio: ["inherit", "pipe", "pipe"],
|
|
63439
63807
|
env: mergeEnv(env)
|
|
@@ -63449,7 +63817,7 @@ function spawnCapture(exePath, args, env) {
|
|
|
63449
63817
|
reject(new Error(`Failed to spawn '${exePath}': ${err2.message}`));
|
|
63450
63818
|
});
|
|
63451
63819
|
child.on("close", (code) => {
|
|
63452
|
-
|
|
63820
|
+
resolve9({
|
|
63453
63821
|
exitCode: code ?? 1,
|
|
63454
63822
|
stdout: Buffer.concat(stdoutChunks).toString("utf8"),
|
|
63455
63823
|
stderr: Buffer.concat(stderrChunks).toString("utf8")
|
|
@@ -63460,12 +63828,12 @@ function spawnCapture(exePath, args, env) {
|
|
|
63460
63828
|
|
|
63461
63829
|
// src/external-cli/manifest-reader.ts
|
|
63462
63830
|
import { execFileSync as execFileSync8 } from "node:child_process";
|
|
63463
|
-
import { existsSync as existsSync9, readFileSync as
|
|
63464
|
-
import { join as
|
|
63831
|
+
import { existsSync as existsSync9, readFileSync as readFileSync9 } from "node:fs";
|
|
63832
|
+
import { join as join19 } from "node:path";
|
|
63465
63833
|
var MANIFEST_FILENAME = "cli.manifest.json";
|
|
63466
63834
|
var defaultDeps3 = {
|
|
63467
63835
|
fileExists: existsSync9,
|
|
63468
|
-
readFile: (path4) =>
|
|
63836
|
+
readFile: (path4) => readFileSync9(path4, "utf-8")
|
|
63469
63837
|
};
|
|
63470
63838
|
function isRosettaTranslated() {
|
|
63471
63839
|
try {
|
|
@@ -63517,7 +63885,7 @@ function resolveExecutableRelativePath(manifest, manifestPath, platformKey) {
|
|
|
63517
63885
|
throw new Error(`Manifest ${manifestPath} declares neither 'tool.executable' nor 'tool.executables'.`);
|
|
63518
63886
|
}
|
|
63519
63887
|
function readCliManifest(packageRoot, deps = defaultDeps3) {
|
|
63520
|
-
const manifestPath =
|
|
63888
|
+
const manifestPath = join19(packageRoot, MANIFEST_FILENAME);
|
|
63521
63889
|
if (!deps.fileExists(manifestPath)) {
|
|
63522
63890
|
throw new Error(`CLI manifest not found at ${manifestPath}. ` + `Ensure the package includes a ${MANIFEST_FILENAME} file.`);
|
|
63523
63891
|
}
|
|
@@ -63532,7 +63900,7 @@ function readCliManifest(packageRoot, deps = defaultDeps3) {
|
|
|
63532
63900
|
}
|
|
63533
63901
|
const platformKey = (deps.getPlatformKey ?? getCurrentPlatformKey)();
|
|
63534
63902
|
const relExe = resolveExecutableRelativePath(manifest, manifestPath, platformKey);
|
|
63535
|
-
const exePath =
|
|
63903
|
+
const exePath = join19(packageRoot, relExe);
|
|
63536
63904
|
if (!deps.fileExists(exePath)) {
|
|
63537
63905
|
throw new Error(`Executable not found at ${exePath} as declared in ${manifestPath}.`);
|
|
63538
63906
|
}
|
|
@@ -67288,19 +67656,19 @@ var baseOpen5 = async (options) => {
|
|
|
67288
67656
|
}
|
|
67289
67657
|
const subprocess = childProcess35.spawn(command, cliArguments, childProcessOptions);
|
|
67290
67658
|
if (options.wait) {
|
|
67291
|
-
return new Promise((
|
|
67659
|
+
return new Promise((resolve10, reject) => {
|
|
67292
67660
|
subprocess.once("error", reject);
|
|
67293
67661
|
subprocess.once("close", (exitCode) => {
|
|
67294
67662
|
if (!options.allowNonzeroExitCode && exitCode !== 0) {
|
|
67295
67663
|
reject(new Error(`Exited with code ${exitCode}`));
|
|
67296
67664
|
return;
|
|
67297
67665
|
}
|
|
67298
|
-
|
|
67666
|
+
resolve10(subprocess);
|
|
67299
67667
|
});
|
|
67300
67668
|
});
|
|
67301
67669
|
}
|
|
67302
67670
|
if (isFallbackAttempt) {
|
|
67303
|
-
return new Promise((
|
|
67671
|
+
return new Promise((resolve10, reject) => {
|
|
67304
67672
|
subprocess.once("error", reject);
|
|
67305
67673
|
subprocess.once("spawn", () => {
|
|
67306
67674
|
subprocess.once("close", (exitCode) => {
|
|
@@ -67310,17 +67678,17 @@ var baseOpen5 = async (options) => {
|
|
|
67310
67678
|
return;
|
|
67311
67679
|
}
|
|
67312
67680
|
subprocess.unref();
|
|
67313
|
-
|
|
67681
|
+
resolve10(subprocess);
|
|
67314
67682
|
});
|
|
67315
67683
|
});
|
|
67316
67684
|
});
|
|
67317
67685
|
}
|
|
67318
67686
|
subprocess.unref();
|
|
67319
|
-
return new Promise((
|
|
67687
|
+
return new Promise((resolve10, reject) => {
|
|
67320
67688
|
subprocess.once("error", reject);
|
|
67321
67689
|
subprocess.once("spawn", () => {
|
|
67322
67690
|
subprocess.off("error", reject);
|
|
67323
|
-
|
|
67691
|
+
resolve10(subprocess);
|
|
67324
67692
|
});
|
|
67325
67693
|
});
|
|
67326
67694
|
};
|
|
@@ -75396,7 +75764,7 @@ function getDefaultActivityXamlTool(session) {
|
|
|
75396
75764
|
|
|
75397
75765
|
// src/tools/local/get-errors.ts
|
|
75398
75766
|
import { existsSync as existsSync11 } from "node:fs";
|
|
75399
|
-
import { isAbsolute as isAbsolute9, resolve as
|
|
75767
|
+
import { isAbsolute as isAbsolute9, resolve as resolve10 } from "node:path";
|
|
75400
75768
|
var SEVERITIES = ["error", "warning", "info", "verbose"];
|
|
75401
75769
|
var LEVEL_BY_NAME = Object.fromEntries(SEVERITIES.map((name, i3) => [name, i3 + 1]));
|
|
75402
75770
|
var NAME_BY_LEVEL = Object.fromEntries(SEVERITIES.map((name, i3) => [i3 + 1, name]));
|
|
@@ -75454,7 +75822,7 @@ function resolveTargetedFile(filePath, projectDir) {
|
|
|
75454
75822
|
if (isAbsolute9(filePath)) {
|
|
75455
75823
|
return filePath;
|
|
75456
75824
|
}
|
|
75457
|
-
return projectDir !== undefined ?
|
|
75825
|
+
return projectDir !== undefined ? resolve10(projectDir, filePath) : undefined;
|
|
75458
75826
|
}
|
|
75459
75827
|
function getErrorsTool(session) {
|
|
75460
75828
|
return createToolHandler(session, {
|
|
@@ -76688,6 +77056,22 @@ class HelmRunService {
|
|
|
76688
77056
|
}
|
|
76689
77057
|
|
|
76690
77058
|
// src/tools/local/run-file.ts
|
|
77059
|
+
function emitRunExceptionType(resultText, projectDir) {
|
|
77060
|
+
if (!resultText) {
|
|
77061
|
+
return;
|
|
77062
|
+
}
|
|
77063
|
+
try {
|
|
77064
|
+
const exceptionType = extractRunExceptionType(resultText);
|
|
77065
|
+
if (!exceptionType) {
|
|
77066
|
+
return;
|
|
77067
|
+
}
|
|
77068
|
+
const dir = projectDir ?? extractArg(process.argv, "project-dir", process.cwd());
|
|
77069
|
+
telemetry.trackEvent("uip.rpa.run.result", redactProperties({
|
|
77070
|
+
...buildStudioShapedProps(dir, { action: "run" }),
|
|
77071
|
+
exceptionType
|
|
77072
|
+
}));
|
|
77073
|
+
} catch {}
|
|
77074
|
+
}
|
|
76691
77075
|
var EXPRESSION_COMMANDS = new Set(["TestActivity", "StartDebuggingFromHere"]);
|
|
76692
77076
|
var START_COMMANDS2 = new Set([
|
|
76693
77077
|
"StartExecution",
|
|
@@ -76815,7 +77199,7 @@ function runFileTool(session) {
|
|
|
76815
77199
|
},
|
|
76816
77200
|
required: ["filePath"]
|
|
76817
77201
|
}
|
|
76818
|
-
}, async (session2, args,
|
|
77202
|
+
}, async (session2, args, projectDir) => {
|
|
76819
77203
|
const command = args.command || "StartExecution";
|
|
76820
77204
|
const filePath = args.filePath;
|
|
76821
77205
|
const inputArguments = toJsonText(args.inputArguments);
|
|
@@ -76868,6 +77252,7 @@ function runFileTool(session) {
|
|
|
76868
77252
|
}
|
|
76869
77253
|
const helmRun = new HelmRunService(session2);
|
|
76870
77254
|
const helmResult = await helmRun.runFile(filePath, inputArguments ?? "", logLevel, command, skipBuild, profiling, folderPath, waitTimeoutSeconds, breakpoints);
|
|
77255
|
+
emitRunExceptionType(helmResult.runResult, projectDir);
|
|
76871
77256
|
return {
|
|
76872
77257
|
content: [
|
|
76873
77258
|
{
|
|
@@ -76894,6 +77279,7 @@ function runFileTool(session) {
|
|
|
76894
77279
|
}
|
|
76895
77280
|
}
|
|
76896
77281
|
const result = await session2.execute((instance) => instance.services.run.executeCommand(command, filePath, inputArguments ?? "", inputVariables ?? "", logLevel, profiling), { requiresProject: true });
|
|
77282
|
+
emitRunExceptionType(result, projectDir);
|
|
76897
77283
|
return {
|
|
76898
77284
|
content: [
|
|
76899
77285
|
{
|
|
@@ -77080,18 +77466,18 @@ function stopExecutionTool(hostStudioPid) {
|
|
|
77080
77466
|
// src/tools/local/tm-config.ts
|
|
77081
77467
|
import { existsSync as existsSync12 } from "node:fs";
|
|
77082
77468
|
import { mkdir as mkdir6, readFile as readFile6, writeFile as writeFile6 } from "node:fs/promises";
|
|
77083
|
-
import { dirname as
|
|
77469
|
+
import { dirname as dirname10, join as join21, resolve as resolve11 } from "node:path";
|
|
77084
77470
|
var TM_DATA_DIR = ".tmh";
|
|
77085
77471
|
var TM_CONFIG_FILE = "config.json";
|
|
77086
77472
|
var PROJECT_FILE2 = "project.json";
|
|
77087
77473
|
function resolveProjectDir2(projectDir) {
|
|
77088
|
-
return
|
|
77474
|
+
return resolve11(projectDir ?? process.cwd());
|
|
77089
77475
|
}
|
|
77090
77476
|
function tmConfigPath(projectDir) {
|
|
77091
|
-
return
|
|
77477
|
+
return join21(projectDir, TM_DATA_DIR, TM_CONFIG_FILE);
|
|
77092
77478
|
}
|
|
77093
77479
|
function assertIsProject(projectDir) {
|
|
77094
|
-
if (!existsSync12(
|
|
77480
|
+
if (!existsSync12(join21(projectDir, PROJECT_FILE2))) {
|
|
77095
77481
|
throw new Error(`No UiPath project found at '${projectDir}' (missing ${PROJECT_FILE2}). ` + `Pass --project-dir pointing at the project root.`);
|
|
77096
77482
|
}
|
|
77097
77483
|
}
|
|
@@ -77109,7 +77495,7 @@ async function readTmSettings(projectDir) {
|
|
|
77109
77495
|
}
|
|
77110
77496
|
async function writeTmSettings(projectDir, settings) {
|
|
77111
77497
|
const path4 = tmConfigPath(projectDir);
|
|
77112
|
-
await mkdir6(
|
|
77498
|
+
await mkdir6(dirname10(path4), { recursive: true });
|
|
77113
77499
|
const text = JSON.stringify(settings, (_key, value) => value === null ? undefined : value, 2);
|
|
77114
77500
|
await writeFile6(path4, text, "utf8");
|
|
77115
77501
|
return path4;
|
|
@@ -77123,7 +77509,7 @@ function isSameTestManagerServer(a, b) {
|
|
|
77123
77509
|
}
|
|
77124
77510
|
var TM_LIVE_RELOAD_STUDIO_VERSION = "26.0.197";
|
|
77125
77511
|
function normalizeDir(path4) {
|
|
77126
|
-
return
|
|
77512
|
+
return resolve11(path4).replace(/[\\/]+$/, "").toLowerCase();
|
|
77127
77513
|
}
|
|
77128
77514
|
function findOpenStudioInstance(projectDir, instances) {
|
|
77129
77515
|
const target = normalizeDir(projectDir);
|
|
@@ -77606,7 +77992,7 @@ var registerCommands = async (program5, options) => {
|
|
|
77606
77992
|
hostStudioPid: process.env.UIPATH_STUDIO_PID ? parseInt(process.env.UIPATH_STUDIO_PID, 10) : undefined,
|
|
77607
77993
|
timeoutSeconds: parseInt(extractArg(process.argv, "timeout", "300") ?? "300", 10)
|
|
77608
77994
|
};
|
|
77609
|
-
resolved.projectDir =
|
|
77995
|
+
resolved.projectDir = resolve12(resolved.projectDir);
|
|
77610
77996
|
mirrorRobotDirToEnv(resolved.robotDir);
|
|
77611
77997
|
if (!options) {
|
|
77612
77998
|
const displayDefaults = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uipath/rpa-tool",
|
|
3
|
-
"version": "1.198.
|
|
3
|
+
"version": "1.198.2",
|
|
4
4
|
"description": "Tool for creating and managing UiPath RPA projects",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"uipcli-tool",
|
|
@@ -59,11 +59,11 @@
|
|
|
59
59
|
"typescript": "^5.7.2"
|
|
60
60
|
},
|
|
61
61
|
"optionalDependencies": {
|
|
62
|
-
"@uipath/studio-helm-win32-x64": "1.198.
|
|
63
|
-
"@uipath/studio-helm-win32-arm64": "1.198.
|
|
64
|
-
"@uipath/studio-helm-linux-x64": "1.198.
|
|
65
|
-
"@uipath/studio-helm-linux-arm64": "1.198.
|
|
66
|
-
"@uipath/studio-helm-darwin-x64": "1.198.
|
|
67
|
-
"@uipath/studio-helm-darwin-arm64": "1.198.
|
|
62
|
+
"@uipath/studio-helm-win32-x64": "1.198.2",
|
|
63
|
+
"@uipath/studio-helm-win32-arm64": "1.198.2",
|
|
64
|
+
"@uipath/studio-helm-linux-x64": "1.198.2",
|
|
65
|
+
"@uipath/studio-helm-linux-arm64": "1.198.2",
|
|
66
|
+
"@uipath/studio-helm-darwin-x64": "1.198.2",
|
|
67
|
+
"@uipath/studio-helm-darwin-arm64": "1.198.2"
|
|
68
68
|
}
|
|
69
69
|
}
|