@uipath/solution-tool 1.204.0-preview.254 → 1.205.0-preview.256
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/README.md +3 -3
- package/dist/THIRD-PARTY-NOTICES.md +2 -2
- package/dist/archive-extract-x35t9ktj.js +120 -0
- package/dist/cleanup-command-service-n4e7vxnw.js +149 -0
- package/dist/deploy-delete-service-cag0q8yx.js +25 -0
- package/dist/deploy-run-service-f0h8wb9w.js +25 -0
- package/dist/{deploy-status-service-sa302ab9.js → deploy-status-service-yh6xn6e0.js} +41 -33
- package/dist/deploy.js +23 -17
- package/dist/{deployment-search-692d15j3.js → deployment-search-mnywd9nc.js} +16 -10
- package/dist/{embedded-file-reader-rf2g1kfj.js → embedded-file-reader-z4becc02.js} +2 -2
- package/dist/{feed-resolver-yybwzmh6.js → feed-resolver-fve33dxq.js} +10 -9
- package/dist/feed-scope-failure-jmg4t1r1.js +19 -0
- package/dist/{feed-session-sxga31vn.js → feed-session-7xqphdrg.js} +3 -3
- package/dist/governance-options-4vxz7ekn.js +32 -0
- package/dist/index-g8c8nf1c.js +667 -0
- package/dist/index-prm27bvm.js +138 -0
- package/dist/index.js +27 -29
- package/dist/init.js +11 -10
- package/dist/{list-0qrxqrfn.js → list-50mepbed.js} +10 -8
- package/dist/models/pack-command-types.d.ts +15 -0
- package/dist/node-7jm7ksqa.js +86 -0
- package/dist/pack-command-service-dewf5vsq.js +35 -0
- package/dist/pack-project-xwd1rbaa.js +97 -0
- package/dist/pack.js +24 -14
- package/dist/package-id-1wr3cy9c.js +13 -0
- package/dist/packager-tool-09swr9cp.js +171 -0
- package/dist/{packager-tool-dapys0dd.js → packager-tool-2vmsh5pt.js} +196 -1519
- package/dist/{packager-tool-px1j9kre.js → packager-tool-3bwnkjdq.js} +2 -2
- package/dist/{packager-tool-gb35b4qs.js → packager-tool-43ahv5mn.js} +192 -96
- package/dist/{packager-tool-5v92rtp2.js → packager-tool-47by487p.js} +6 -4
- package/dist/packager-tool-47wzvqw0.js +86 -0
- package/dist/{packager-tool-zns6n8zp.js → packager-tool-5ddtwzva.js} +1 -1
- package/dist/packager-tool-5edvzz80.js +543 -0
- package/dist/{packager-tool-13dsb9e6.js → packager-tool-5n6jsn41.js} +104 -14
- package/dist/packager-tool-60af1hw2.js +26 -0
- package/dist/{packager-tool-f5gq77m5.js → packager-tool-61pwb567.js} +2 -2
- package/dist/{packager-tool-yrz4mwfn.js → packager-tool-6kz1pv9f.js} +1373 -486
- package/dist/packager-tool-6ybywxxn.js +1809 -0
- package/dist/packager-tool-8ptbmmmp.js +2132 -0
- package/dist/{packager-tool-7gr2nphb.js → packager-tool-97rcgwvv.js} +224 -6
- package/dist/{packager-tool-9z1yxjme.js → packager-tool-9t26kde1.js} +3556 -1646
- package/dist/packager-tool-act5r386.js +239 -0
- package/dist/packager-tool-amhyxzz6.js +125 -0
- package/dist/packager-tool-b03rva43.js +188 -0
- package/dist/{packager-tool-e2rtr49j.js → packager-tool-b2nhscfk.js} +15 -31
- package/dist/{packager-tool-v8rseyfk.js → packager-tool-d6rrfd46.js} +149 -53
- package/dist/packager-tool-frr2xmkr.js +445 -0
- package/dist/{packager-tool-v8bkkqdb.js → packager-tool-gmwva4yv.js} +5 -5
- package/dist/packager-tool-gs3f3tf7.js +103 -0
- package/dist/packager-tool-jg692f13.js +517 -0
- package/dist/packager-tool-jmpb786m.js +109 -0
- package/dist/{packager-tool-4ytxbjez.js → packager-tool-kds8ytzw.js} +74 -23
- package/dist/packager-tool-kkfb5kgn.js +182 -0
- package/dist/packager-tool-kvcxg0zv.js +1510 -0
- package/dist/packager-tool-n3jfjn5r.js +42 -0
- package/dist/{packager-tool-8sx1w3h1.js → packager-tool-n5d5dx5j.js} +2196 -3455
- package/dist/{packager-tool-97w8aw8y.js → packager-tool-nsya65z1.js} +357 -1370
- package/dist/{packager-tool-fv7xyzg2.js → packager-tool-pbmqk39a.js} +126 -128
- package/dist/{packager-tool-bqre28m1.js → packager-tool-qw47eyw7.js} +1 -1
- package/dist/{packager-tool-erp9bv22.js → packager-tool-rc3hwn4b.js} +25 -4
- package/dist/packager-tool-resolver-994z3jkj.js +23 -0
- package/dist/{packager-tool-d9ethrmn.js → packager-tool-rvt68c1t.js} +17 -8
- package/dist/{packager-tool-gab9y5ct.js → packager-tool-t8gh825q.js} +37 -13
- package/dist/{packager-tool-kswwd3hp.js → packager-tool-tx834spe.js} +2376 -4077
- package/dist/{packager-tool-zf3929se.js → packager-tool-v1f5e8t9.js} +11 -1
- package/dist/{packager-tool-wjk91v0q.js → packager-tool-w77d72a7.js} +13 -11
- package/dist/{packager-tool-1rzssy0x.js → packager-tool-wy4fx250.js} +19 -18
- package/dist/packager-tool-wz34ma3s.js +1333 -0
- package/dist/packager-tool-zq16e1xv.js +68 -0
- package/dist/packager-tool.js +2 -2
- package/dist/prepare-solution-resources-m1djfj62.js +29 -0
- package/dist/project-command-utils-t6pmpvq3.js +90 -0
- package/dist/project-contributions-79ndycrx.js +32 -0
- package/dist/publish.js +13 -12
- package/dist/resource-mutations-c3krjqze.js +36 -0
- package/dist/resource-version-lookup-0e3e2j58.js +99 -0
- package/dist/resource.js +10 -9
- package/dist/restore-command-service-5v0b9363.js +155 -0
- package/dist/run-service-tg6b67wp.js +428 -0
- package/dist/services/deploy-activate-service.d.ts +10 -5
- package/dist/services/deploy-delete-service.d.ts +8 -4
- package/dist/services/deploy-run-service.d.ts +34 -1
- package/dist/services/deploy-uninstall-service.d.ts +21 -3
- package/dist/services/deploy-upgrade-service.d.ts +35 -1
- package/dist/services/deployment-feed-locator.d.ts +15 -4
- package/dist/services/deployment-search-client.d.ts +5 -53
- package/dist/services/deployment-search.d.ts +58 -3
- package/dist/services/deployment-state.d.ts +84 -24
- package/dist/services/deployment-validation.d.ts +5 -0
- package/dist/services/emit-runtime-dependencies.d.ts +2 -1
- package/dist/services/feed-resolver.d.ts +6 -4
- package/dist/services/feed-selection.d.ts +47 -0
- package/dist/services/http-status.d.ts +2 -7
- package/dist/services/pack-command-service.d.ts +9 -0
- package/dist/services/pack-project-selection.d.ts +51 -0
- package/dist/services/pack-project.d.ts +26 -0
- package/dist/services/pack-service.d.ts +7 -3
- package/dist/services/package-search-client.d.ts +7 -0
- package/dist/services/packager-tool-resolver.d.ts +7 -1
- package/dist/services/packages-list-service.d.ts +1 -1
- package/dist/services/permanent-deletion-consent.d.ts +110 -0
- package/dist/services/pipeline-deploy-poll.d.ts +7 -0
- package/dist/services/prepare-solution-resources.d.ts +12 -2
- package/dist/services/project-contributions.d.ts +5 -4
- package/dist/services/search-failure.d.ts +9 -13
- package/dist/services/solution-packager-helpers.d.ts +5 -2
- package/dist/services/solution-path.d.ts +1 -1
- package/dist/services/uninstall-consent.d.ts +82 -0
- package/dist/ship-telemetry-myes7ak5.js +21 -0
- package/dist/solution-auth-aead70sw.js +11 -0
- package/dist/templates/AGENTS.md +125 -12
- package/dist/tool.js +27 -29
- package/dist/utils/deployment-errors.d.ts +9 -1
- package/package.json +2 -2
- package/dist/deploy-delete-service-7fms6rrp.js +0 -22
- package/dist/feed-scope-failure-kf94beem.js +0 -18
- package/dist/packager-tool-f2e9rzxk.js +0 -104
- package/dist/packager-tool-resolver-6zwhec62.js +0 -20
- package/dist/packager-tool-zdfn32bc.js +0 -4465
- package/dist/prepare-solution-resources-jpb5as2s.js +0 -25
- package/dist/project-contributions-6wpff2hm.js +0 -30
- package/dist/services/legacy-deployment-search-v3.d.ts +0 -23
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
// src/utils/deployment-errors.ts
|
|
2
|
+
function coerceWorkflowErrorMessages(raw) {
|
|
3
|
+
if (Array.isArray(raw)) {
|
|
4
|
+
return raw.map(coerceWorkflowErrorMessage).filter((error) => error !== undefined);
|
|
5
|
+
}
|
|
6
|
+
const coerced = coerceWorkflowErrorMessage(raw);
|
|
7
|
+
if (coerced) {
|
|
8
|
+
return [coerced];
|
|
9
|
+
}
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
function coerceWorkflowErrorMessage(raw) {
|
|
13
|
+
if (raw === null || raw === undefined) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (typeof raw === "string") {
|
|
17
|
+
const trimmed = raw.trim();
|
|
18
|
+
return trimmed ? { errorMessage: trimmed } : undefined;
|
|
19
|
+
}
|
|
20
|
+
if (!isRecord(raw)) {
|
|
21
|
+
return { errorMessage: String(raw) };
|
|
22
|
+
}
|
|
23
|
+
if (typeof raw.errorMessage === "string" && raw.errorMessage.trim()) {
|
|
24
|
+
return {
|
|
25
|
+
errorMessage: raw.errorMessage.trim(),
|
|
26
|
+
serviceMessage: typeof raw.serviceMessage === "string" ? raw.serviceMessage : undefined,
|
|
27
|
+
exceptionTrace: typeof raw.exceptionTrace === "string" ? raw.exceptionTrace : undefined,
|
|
28
|
+
serviceName: typeof raw.serviceName === "string" ? raw.serviceName : undefined
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return { errorMessage: stringifyUnexpectedWorkflowError(raw) };
|
|
32
|
+
}
|
|
33
|
+
function isRecord(value) {
|
|
34
|
+
return typeof value === "object" && value !== null;
|
|
35
|
+
}
|
|
36
|
+
function stringifyUnexpectedWorkflowError(value) {
|
|
37
|
+
try {
|
|
38
|
+
return JSON.stringify(value);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
return String(error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function formatSummaryValidationError(e) {
|
|
44
|
+
return e.errorType ? `[${e.errorType}] ${e.errorText}` : e.errorText;
|
|
45
|
+
}
|
|
46
|
+
function formatSummaryScheduleError(e) {
|
|
47
|
+
return e.errorCode ? `[${e.errorCode}] ${e.errorText}` : e.errorText;
|
|
48
|
+
}
|
|
49
|
+
function formatSummaryWorkflowError(e) {
|
|
50
|
+
const parts = [e.errorMessage];
|
|
51
|
+
const details = [];
|
|
52
|
+
if (e.serviceName) {
|
|
53
|
+
details.push(`service: ${e.serviceName}`);
|
|
54
|
+
}
|
|
55
|
+
if (e.serviceMessage) {
|
|
56
|
+
details.push(`reason: ${e.serviceMessage}`);
|
|
57
|
+
}
|
|
58
|
+
if (details.length > 0) {
|
|
59
|
+
parts.push(`(${details.join(", ")})`);
|
|
60
|
+
}
|
|
61
|
+
return parts.join(" ");
|
|
62
|
+
}
|
|
63
|
+
function nonEmpty(arr) {
|
|
64
|
+
return arr && arr.length > 0 ? arr : undefined;
|
|
65
|
+
}
|
|
66
|
+
function extractDeploymentErrors(result) {
|
|
67
|
+
const validationErrors = nonEmpty(result.validationResult?.validationErrors?.map(formatSummaryValidationError));
|
|
68
|
+
const conflictSources = [
|
|
69
|
+
...result.validationResult?.conflictErrors ?? [],
|
|
70
|
+
...result.conflictFixingErrors ?? []
|
|
71
|
+
];
|
|
72
|
+
const conflictErrors = nonEmpty(conflictSources.map(formatSummaryValidationError));
|
|
73
|
+
const scheduleErrors = nonEmpty(result.deploymentScheduleErrors?.map(formatSummaryScheduleError));
|
|
74
|
+
const deploymentErrors = nonEmpty(coerceWorkflowErrorMessages(result.deploymentResult?.errorMessage).map(formatSummaryWorkflowError));
|
|
75
|
+
if (!validationErrors && !conflictErrors && !scheduleErrors && !deploymentErrors) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
ValidationErrors: validationErrors,
|
|
80
|
+
ConflictErrors: conflictErrors,
|
|
81
|
+
ScheduleErrors: scheduleErrors,
|
|
82
|
+
DeploymentErrors: deploymentErrors
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function formatDeploymentErrorsAsText(summary) {
|
|
86
|
+
const lines = [];
|
|
87
|
+
if (summary.ValidationErrors) {
|
|
88
|
+
lines.push(`Validation: ${summary.ValidationErrors.join("; ")}`);
|
|
89
|
+
}
|
|
90
|
+
if (summary.ConflictErrors) {
|
|
91
|
+
lines.push(`Conflicts: ${summary.ConflictErrors.join("; ")}`);
|
|
92
|
+
}
|
|
93
|
+
if (summary.ScheduleErrors) {
|
|
94
|
+
lines.push(`Schedule: ${summary.ScheduleErrors.join("; ")}`);
|
|
95
|
+
}
|
|
96
|
+
if (summary.DeploymentErrors) {
|
|
97
|
+
lines.push(`Deployment: ${summary.DeploymentErrors.join("; ")}`);
|
|
98
|
+
}
|
|
99
|
+
return lines.join(`
|
|
100
|
+
`);
|
|
101
|
+
}
|
|
102
|
+
function formatErrorCode(errorCode) {
|
|
103
|
+
return errorCode ? `[${errorCode}] ` : "";
|
|
104
|
+
}
|
|
105
|
+
function formatDetailedValidationError(error) {
|
|
106
|
+
const resource = [error.kind, error.name].filter(Boolean).join(" ");
|
|
107
|
+
const prefix = resource ? `${resource}: ` : "";
|
|
108
|
+
return `${formatErrorCode(error.errorCode)}${prefix}${error.errorText}`;
|
|
109
|
+
}
|
|
110
|
+
function formatDetailedConflictError(error) {
|
|
111
|
+
const actions = error.conflictFixingActions?.length ? ` (fix: ${error.conflictFixingActions.join(", ")})` : "";
|
|
112
|
+
return `${formatDetailedValidationError(error)}${actions}`;
|
|
113
|
+
}
|
|
114
|
+
function formatDetailedScheduleError(error) {
|
|
115
|
+
return `${formatErrorCode(error.errorCode)}${error.errorText}`;
|
|
116
|
+
}
|
|
117
|
+
function formatDetailedWorkflowError(error) {
|
|
118
|
+
const parts = [
|
|
119
|
+
error.serviceName && error.errorMessage ? `${error.serviceName}: ${error.errorMessage}` : error.errorMessage ?? error.serviceName,
|
|
120
|
+
error.serviceMessage,
|
|
121
|
+
error.exceptionTrace
|
|
122
|
+
].filter(Boolean);
|
|
123
|
+
return parts.join(" | ");
|
|
124
|
+
}
|
|
125
|
+
function formatResourceInstallError(error) {
|
|
126
|
+
const context = [error.kind, error.type, error.name].filter(Boolean).join(" ");
|
|
127
|
+
return context ? `${context}: ${error.text}` : error.text;
|
|
128
|
+
}
|
|
129
|
+
function formatServiceError(service) {
|
|
130
|
+
const activation = service.activationStatus && service.activationStatus !== "None" ? `, ${service.activationStatus}` : "";
|
|
131
|
+
const state = `${service.status}${activation}`;
|
|
132
|
+
const servicePrefix = service.serviceName ? `${service.serviceName} (${state})` : state;
|
|
133
|
+
const encoded = parseServiceMessages(service.errorMessage);
|
|
134
|
+
const codeByText = new Map((encoded ?? []).map((message) => [message.text, message.errorCode]));
|
|
135
|
+
const listed = service.serviceErrorMessages ?? [];
|
|
136
|
+
const errors = [];
|
|
137
|
+
if (service.errorMessage && !encoded) {
|
|
138
|
+
errors.push(`${servicePrefix}: ${service.errorMessage}`);
|
|
139
|
+
}
|
|
140
|
+
errors.push(...listed.map((error) => `${servicePrefix}: ${formatErrorCode(codeByText.get(error.text))}${formatResourceInstallError(error)}`));
|
|
141
|
+
const listedTexts = new Set(listed.map((error) => error.text));
|
|
142
|
+
errors.push(...(encoded ?? []).filter((message) => !listedTexts.has(message.text)).map((message) => `${servicePrefix}: ${formatErrorCode(message.errorCode)}${message.text}`));
|
|
143
|
+
return errors;
|
|
144
|
+
}
|
|
145
|
+
function formatServiceErrors(services) {
|
|
146
|
+
return services?.flatMap(formatServiceError) ?? [];
|
|
147
|
+
}
|
|
148
|
+
function parseServiceMessages(raw) {
|
|
149
|
+
const trimmed = raw?.trim();
|
|
150
|
+
if (!trimmed?.startsWith("[")) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
let parsed;
|
|
154
|
+
try {
|
|
155
|
+
parsed = JSON.parse(trimmed);
|
|
156
|
+
} catch {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (!Array.isArray(parsed) || parsed.length === 0) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const messages = [];
|
|
163
|
+
for (const entry of parsed) {
|
|
164
|
+
if (!isRecord(entry) || typeof entry.text !== "string") {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
messages.push({
|
|
168
|
+
text: entry.text,
|
|
169
|
+
errorCode: typeof entry.errorCode === "string" && entry.errorCode ? entry.errorCode : undefined
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return messages;
|
|
173
|
+
}
|
|
174
|
+
function formatDeploymentIdentifiers(pipelineDeploymentId, status) {
|
|
175
|
+
const identifiers = [
|
|
176
|
+
`pipelineDeploymentId=${pipelineDeploymentId}`,
|
|
177
|
+
status.deploymentKey ? `deploymentKey=${status.deploymentKey}` : "",
|
|
178
|
+
status.configurationKey ? `configurationKey=${status.configurationKey}` : "",
|
|
179
|
+
status.instanceId ? `instanceId=${status.instanceId}` : ""
|
|
180
|
+
].filter(Boolean);
|
|
181
|
+
return `Operation: ${identifiers.join(", ")}`;
|
|
182
|
+
}
|
|
183
|
+
function formatDeploymentFailureDetails(pipelineDeploymentId, status) {
|
|
184
|
+
return [
|
|
185
|
+
...formatPipelineErrors(status),
|
|
186
|
+
formatDeploymentIdentifiers(pipelineDeploymentId, status)
|
|
187
|
+
].join(`
|
|
188
|
+
`);
|
|
189
|
+
}
|
|
190
|
+
function formatPipelineErrors(status) {
|
|
191
|
+
const errorParts = [];
|
|
192
|
+
const validationErrors = status.validationResult?.validationErrors;
|
|
193
|
+
if (validationErrors?.length) {
|
|
194
|
+
errorParts.push(`Validation: ${validationErrors.map(formatDetailedValidationError).join("; ")}`);
|
|
195
|
+
}
|
|
196
|
+
const conflictErrors = status.validationResult?.conflictErrors;
|
|
197
|
+
if (conflictErrors?.length) {
|
|
198
|
+
errorParts.push(`Conflicts: ${conflictErrors.map(formatDetailedConflictError).join("; ")}`);
|
|
199
|
+
}
|
|
200
|
+
if (status.conflictFixingErrors?.length) {
|
|
201
|
+
errorParts.push(`Conflict fixing: ${status.conflictFixingErrors.map(formatDetailedValidationError).join("; ")}`);
|
|
202
|
+
}
|
|
203
|
+
if (status.deploymentScheduleErrors?.length) {
|
|
204
|
+
errorParts.push(`Schedule: ${status.deploymentScheduleErrors.map(formatDetailedScheduleError).join("; ")}`);
|
|
205
|
+
}
|
|
206
|
+
const workflowErrors = coerceWorkflowErrorMessages(status.deploymentResult?.errorMessage);
|
|
207
|
+
if (workflowErrors.length) {
|
|
208
|
+
errorParts.push(`Deployment: ${workflowErrors.map(formatDetailedWorkflowError).join("; ")}`);
|
|
209
|
+
}
|
|
210
|
+
const serviceErrors = formatServiceErrors(status.deploymentResult?.services);
|
|
211
|
+
if (serviceErrors.length) {
|
|
212
|
+
errorParts.push(`Services: ${serviceErrors.join("; ")}`);
|
|
213
|
+
}
|
|
214
|
+
return errorParts;
|
|
215
|
+
}
|
|
216
|
+
function hasServerErrorCode(details, code) {
|
|
217
|
+
return new RegExp(`"errorCode"\\s*:\\s*"${code}"`).test(details);
|
|
218
|
+
}
|
|
219
|
+
function isBareResponse(details) {
|
|
220
|
+
return !/^\s*[{[]/.test(details);
|
|
221
|
+
}
|
|
222
|
+
var DRAFT_VERSION_MISMATCH_CODE = "DraftDeploymentHasDifferentPackageVersion";
|
|
223
|
+
var VALIDATION_CONFIRMATION_REQUIRED_CODE = "4026";
|
|
224
|
+
function leavesPendingDraft(status) {
|
|
225
|
+
return status === "ValidationFailed" || status === "ConflictFixingError" || status === "DeploymentScheduleError";
|
|
226
|
+
}
|
|
227
|
+
function installLandedDespiteStatus(status) {
|
|
228
|
+
const record = status.deploymentResult?.status;
|
|
229
|
+
return status.status !== "DeploymentSucceeded" && (record === "SuccessfulInstall" || record === "SuccessfulActivate");
|
|
230
|
+
}
|
|
231
|
+
function explainPipelineStatusAfterInstall(status) {
|
|
232
|
+
const lines = formatPipelineErrors(status);
|
|
233
|
+
const errors = lines.length > 0 ? ` ${lines.join(" ")}` : "";
|
|
234
|
+
return `The deploy pipeline ended at ${status.status} although the install landed (the deployment record reports ${status.deploymentResult?.status}): the errors it attached come from the activation validation the pipeline runs after the install, not from the install.${errors}`;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export { coerceWorkflowErrorMessages, extractDeploymentErrors, formatDeploymentErrorsAsText, formatServiceErrors, formatDeploymentFailureDetails, hasServerErrorCode, isBareResponse, DRAFT_VERSION_MISMATCH_CODE, VALIDATION_CONFIRMATION_REQUIRED_CODE, leavesPendingDraft, installLandedDespiteStatus, explainPipelineStatusAfterInstall };
|
|
238
|
+
|
|
239
|
+
//# debugId=DE311674F41DE19664756E2164756E21
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import {
|
|
2
|
+
logger,
|
|
3
|
+
trackShipSucceeded
|
|
4
|
+
} from "./packager-tool-tx834spe.js";
|
|
5
|
+
import {
|
|
6
|
+
ShipDimensions,
|
|
7
|
+
catchError
|
|
8
|
+
} from "./packager-tool-6ybywxxn.js";
|
|
9
|
+
import {
|
|
10
|
+
getFileSystem
|
|
11
|
+
} from "./packager-tool-v1f5e8t9.js";
|
|
12
|
+
import {
|
|
13
|
+
unzip
|
|
14
|
+
} from "./packager-tool-dfrk01gn.js";
|
|
15
|
+
|
|
16
|
+
// src/services/ship-telemetry.ts
|
|
17
|
+
var PROJECT_TYPE_MAP = {
|
|
18
|
+
Agent: "low_code_agent",
|
|
19
|
+
Api: "api_workflow",
|
|
20
|
+
AppV2: "coded_app",
|
|
21
|
+
CaseManagement: "case",
|
|
22
|
+
Flow: "flow",
|
|
23
|
+
Process: "rpa",
|
|
24
|
+
ProcessOrchestration: "bpmn",
|
|
25
|
+
WebApp: "coded_app",
|
|
26
|
+
processOrchestration: "bpmn"
|
|
27
|
+
};
|
|
28
|
+
function isRecord(value) {
|
|
29
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
30
|
+
}
|
|
31
|
+
function normalizeShipProjectType(projectType) {
|
|
32
|
+
return PROJECT_TYPE_MAP[projectType] ?? projectType.trim().toLowerCase();
|
|
33
|
+
}
|
|
34
|
+
function summarizeShipProjectTypes(projectTypes) {
|
|
35
|
+
const normalized = [
|
|
36
|
+
...new Set(projectTypes.map((projectType) => projectType.trim()).filter(Boolean).map(normalizeShipProjectType))
|
|
37
|
+
];
|
|
38
|
+
if (normalized.length === 0) {
|
|
39
|
+
return { projectType: "unknown" };
|
|
40
|
+
}
|
|
41
|
+
if (normalized.length === 1) {
|
|
42
|
+
return { projectType: normalized[0] };
|
|
43
|
+
}
|
|
44
|
+
const sortedProjectTypes = [...normalized];
|
|
45
|
+
sortedProjectTypes.sort((left, right) => left.localeCompare(right));
|
|
46
|
+
return {
|
|
47
|
+
projectType: "mixed",
|
|
48
|
+
projectTypes: sortedProjectTypes.join(",")
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function readProjectTypesFromUipx(content) {
|
|
52
|
+
const parsed = JSON.parse(content);
|
|
53
|
+
if (!isRecord(parsed) || !Array.isArray(parsed.Projects)) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
return parsed.Projects.map((project) => {
|
|
57
|
+
if (!isRecord(project)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
return typeof project.Type === "string" ? project.Type : undefined;
|
|
61
|
+
}).filter((projectType) => projectType !== undefined);
|
|
62
|
+
}
|
|
63
|
+
var MAX_INSPECTABLE_PACKAGE_BYTES = 256 * 1024 * 1024;
|
|
64
|
+
function isProjectManifestEntry(name) {
|
|
65
|
+
return name.endsWith(".uipx");
|
|
66
|
+
}
|
|
67
|
+
function unzipProjectManifests(archive) {
|
|
68
|
+
return new Promise((resolve, reject) => {
|
|
69
|
+
unzip(archive, { filter: (file) => isProjectManifestEntry(file.name) }, (error, entries) => {
|
|
70
|
+
if (error) {
|
|
71
|
+
reject(error);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
resolve(entries);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async function inspectSolutionPackageProjectTypes(packagePath) {
|
|
79
|
+
const fs = getFileSystem();
|
|
80
|
+
const [statError, stats] = await catchError(fs.stat(packagePath));
|
|
81
|
+
if (statError || !stats) {
|
|
82
|
+
logger.debug(`[Cli.ShipSucceeded] Could not stat solution package for project type telemetry: ${statError?.message ?? "no stats"}`);
|
|
83
|
+
return { projectType: "unknown" };
|
|
84
|
+
}
|
|
85
|
+
if (stats.size > MAX_INSPECTABLE_PACKAGE_BYTES) {
|
|
86
|
+
logger.debug(`[Cli.ShipSucceeded] Solution package is ${stats.size} bytes, over the ${MAX_INSPECTABLE_PACKAGE_BYTES}-byte inspection cap; skipping project type telemetry.`);
|
|
87
|
+
return { projectType: "unknown" };
|
|
88
|
+
}
|
|
89
|
+
const [readError, archive] = await catchError(fs.readFile(packagePath));
|
|
90
|
+
if (readError || !archive) {
|
|
91
|
+
logger.debug(`[Cli.ShipSucceeded] Could not read solution package for project type telemetry: ${readError?.message ?? "empty archive"}`);
|
|
92
|
+
return { projectType: "unknown" };
|
|
93
|
+
}
|
|
94
|
+
const [unzipError, entries] = await catchError(unzipProjectManifests(new Uint8Array(archive)));
|
|
95
|
+
if (unzipError || !entries) {
|
|
96
|
+
logger.debug(`[Cli.ShipSucceeded] Could not inspect solution package zip: ${unzipError?.message ?? "no entries"}`);
|
|
97
|
+
return { projectType: "unknown" };
|
|
98
|
+
}
|
|
99
|
+
const decoder = new TextDecoder;
|
|
100
|
+
const projectTypes = [];
|
|
101
|
+
for (const [entryName, entryBytes] of Object.entries(entries)) {
|
|
102
|
+
if (!isProjectManifestEntry(entryName)) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const [parseError, parsedTypes] = await catchError(Promise.resolve().then(() => readProjectTypesFromUipx(decoder.decode(entryBytes))));
|
|
106
|
+
if (parseError) {
|
|
107
|
+
logger.debug(`[Cli.ShipSucceeded] Could not parse ${entryName} for project type telemetry: ${parseError.message}`);
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
projectTypes.push(...parsedTypes);
|
|
111
|
+
}
|
|
112
|
+
return summarizeShipProjectTypes(projectTypes);
|
|
113
|
+
}
|
|
114
|
+
function trackSolutionShipSucceeded(payload) {
|
|
115
|
+
const { projectTypeSummary, ...rest } = payload;
|
|
116
|
+
return trackShipSucceeded({
|
|
117
|
+
...rest,
|
|
118
|
+
[ShipDimensions.ProjectType]: projectTypeSummary.projectType,
|
|
119
|
+
[ShipDimensions.ProjectTypes]: projectTypeSummary.projectTypes
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export { normalizeShipProjectType, summarizeShipProjectTypes, unzipProjectManifests, inspectSolutionPackageProjectTypes, trackSolutionShipSucceeded };
|
|
124
|
+
|
|
125
|
+
//# debugId=6877A4F6FFB0570C64756E2164756E21
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ProjectPackager,
|
|
3
|
+
ProjectPublisher,
|
|
4
|
+
ToolLogger,
|
|
5
|
+
setGlobalLogHandler
|
|
6
|
+
} from "./packager-tool-n5d5dx5j.js";
|
|
7
|
+
import {
|
|
8
|
+
ToolResult,
|
|
9
|
+
translate
|
|
10
|
+
} from "./packager-tool-pbmqk39a.js";
|
|
11
|
+
import {
|
|
12
|
+
DebugTelemetryProvider,
|
|
13
|
+
NodeContextStorage
|
|
14
|
+
} from "./packager-tool-tx834spe.js";
|
|
15
|
+
import {
|
|
16
|
+
TelemetryService
|
|
17
|
+
} from "./packager-tool-6ybywxxn.js";
|
|
18
|
+
import {
|
|
19
|
+
NodeFileSystem
|
|
20
|
+
} from "./packager-tool-v1f5e8t9.js";
|
|
21
|
+
// ../packager/project-packager/src/base-node-packager-factory.ts
|
|
22
|
+
class BaseNodePackagerFactory {
|
|
23
|
+
dotnetDiscovery;
|
|
24
|
+
getOrCreateFileSystem(config) {
|
|
25
|
+
return config?.fileSystem ?? new NodeFileSystem;
|
|
26
|
+
}
|
|
27
|
+
getOrCreateTelemetryService(config) {
|
|
28
|
+
if (config?.telemetryService) {
|
|
29
|
+
return config.telemetryService;
|
|
30
|
+
}
|
|
31
|
+
const provider = new DebugTelemetryProvider;
|
|
32
|
+
const contextStorage = new NodeContextStorage;
|
|
33
|
+
return new TelemetryService(provider, contextStorage);
|
|
34
|
+
}
|
|
35
|
+
checkDotnetAvailability(logger) {
|
|
36
|
+
if (!this.dotnetDiscovery) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const version = this.dotnetDiscovery.getDotnetVersion();
|
|
40
|
+
if (version) {
|
|
41
|
+
logger.info(translate.t("solutionpackager.dotnet.info.available", {
|
|
42
|
+
version
|
|
43
|
+
}));
|
|
44
|
+
} else {
|
|
45
|
+
logger.warn(translate.t("solutionpackager.dotnet.warnings.notAvailable"));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
configureLogHandler(config) {
|
|
49
|
+
if (config?.logHandler) {
|
|
50
|
+
setGlobalLogHandler(config.logHandler);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
configureLanguage(config) {
|
|
54
|
+
const language = config?.language ?? "en";
|
|
55
|
+
translate.setLocale(language);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// ../packager/project-packager/src/services/dotnet-discovery-service.ts
|
|
59
|
+
import { execSync } from "node:child_process";
|
|
60
|
+
|
|
61
|
+
class DotnetDiscoveryService {
|
|
62
|
+
cachedVersion;
|
|
63
|
+
isDotnetAvailable() {
|
|
64
|
+
return this.getDotnetVersion() !== undefined;
|
|
65
|
+
}
|
|
66
|
+
getDotnetVersion() {
|
|
67
|
+
if (this.cachedVersion !== undefined) {
|
|
68
|
+
return this.cachedVersion;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const output = execSync("dotnet --version", {
|
|
72
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
73
|
+
encoding: "utf-8"
|
|
74
|
+
});
|
|
75
|
+
this.cachedVersion = output.trim();
|
|
76
|
+
return this.cachedVersion;
|
|
77
|
+
} catch {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// ../packager/project-packager/src/services/package-sign-service.ts
|
|
84
|
+
import { spawn } from "node:child_process";
|
|
85
|
+
class NodePackageSignService {
|
|
86
|
+
dotnetDiscovery;
|
|
87
|
+
logger;
|
|
88
|
+
constructor(dotnetDiscovery, logger) {
|
|
89
|
+
this.dotnetDiscovery = dotnetDiscovery;
|
|
90
|
+
this.logger = logger;
|
|
91
|
+
}
|
|
92
|
+
async signPackageAsync(packagePath, certificatePath, certificatePassword, timestampServer) {
|
|
93
|
+
return this.signPackagesAsync([packagePath], certificatePath, certificatePassword, timestampServer);
|
|
94
|
+
}
|
|
95
|
+
async signPackagesAsync(packagePaths, certificatePath, certificatePassword, timestampServer) {
|
|
96
|
+
if (packagePaths.length === 0) {
|
|
97
|
+
return ToolResult.success();
|
|
98
|
+
}
|
|
99
|
+
if (!this.dotnetDiscovery.isDotnetAvailable()) {
|
|
100
|
+
return ToolResult.error("INTERNAL_ERROR" /* InternalError */, translate.t("solutionpackager.signing.errors.dotnetNotAvailable"));
|
|
101
|
+
}
|
|
102
|
+
const args = [
|
|
103
|
+
"nuget",
|
|
104
|
+
"sign",
|
|
105
|
+
...packagePaths,
|
|
106
|
+
"--certificate-path",
|
|
107
|
+
certificatePath,
|
|
108
|
+
"--overwrite"
|
|
109
|
+
];
|
|
110
|
+
if (certificatePassword) {
|
|
111
|
+
args.push("--certificate-password", certificatePassword);
|
|
112
|
+
}
|
|
113
|
+
if (timestampServer) {
|
|
114
|
+
args.push("--timestamper", timestampServer);
|
|
115
|
+
}
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
const childProcess = spawn("dotnet", args, {
|
|
118
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
119
|
+
shell: false,
|
|
120
|
+
windowsHide: true
|
|
121
|
+
});
|
|
122
|
+
let stderr = "";
|
|
123
|
+
childProcess.stdout?.on("data", (data) => {
|
|
124
|
+
this.logger.info(data.toString().trim());
|
|
125
|
+
});
|
|
126
|
+
childProcess.stderr?.on("data", (data) => {
|
|
127
|
+
stderr += data.toString();
|
|
128
|
+
});
|
|
129
|
+
childProcess.on("error", (error) => {
|
|
130
|
+
this.logger.error(`Failed to start dotnet process: ${error.message}`);
|
|
131
|
+
resolve(ToolResult.error("INTERNAL_ERROR" /* InternalError */, `Failed to start dotnet process: ${error.message}`));
|
|
132
|
+
});
|
|
133
|
+
childProcess.on("exit", (code) => {
|
|
134
|
+
if (code === 0) {
|
|
135
|
+
this.logger.info(`Successfully signed packages: ${packagePaths.join(", ")}`);
|
|
136
|
+
resolve(ToolResult.success());
|
|
137
|
+
} else {
|
|
138
|
+
const errorMessage = stderr.trim() || `dotnet nuget sign exited with code ${code}`;
|
|
139
|
+
this.logger.error(`Package signing failed: ${errorMessage}`);
|
|
140
|
+
resolve(ToolResult.error("INTERNAL_ERROR" /* InternalError */, `Package signing failed: ${errorMessage}`));
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// ../packager/project-packager/src/node-project-packager-factory.ts
|
|
148
|
+
class NodeProjectPackagerFactory extends BaseNodePackagerFactory {
|
|
149
|
+
async createAsync(config) {
|
|
150
|
+
const logger = new ToolLogger("ProjectPackagerFactory", "Create");
|
|
151
|
+
this.configureLanguage(config);
|
|
152
|
+
this.configureLogHandler(config);
|
|
153
|
+
logger.info("Creating ProjectPackager instance...");
|
|
154
|
+
const fileSystem = this.getOrCreateFileSystem(config);
|
|
155
|
+
const telemetryService = this.getOrCreateTelemetryService(config);
|
|
156
|
+
this.dotnetDiscovery = new DotnetDiscoveryService;
|
|
157
|
+
const packageSignService = new NodePackageSignService(this.dotnetDiscovery, logger);
|
|
158
|
+
const projectPackager = new ProjectPackager(fileSystem, telemetryService, packageSignService);
|
|
159
|
+
this.checkDotnetAvailability(logger);
|
|
160
|
+
logger.info("ProjectPackager created successfully.");
|
|
161
|
+
return projectPackager;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async function createNodeProjectPackager(options) {
|
|
165
|
+
const factory = new NodeProjectPackagerFactory;
|
|
166
|
+
return factory.createAsync(options);
|
|
167
|
+
}
|
|
168
|
+
// ../packager/project-packager/src/publish/node-project-publisher-factory.ts
|
|
169
|
+
class NodeProjectPublisherFactory extends BaseNodePackagerFactory {
|
|
170
|
+
async createAsync(config) {
|
|
171
|
+
const logger = new ToolLogger("ProjectPublisherFactory", "Create");
|
|
172
|
+
this.configureLanguage(config);
|
|
173
|
+
this.configureLogHandler(config);
|
|
174
|
+
logger.info("Creating ProjectPublisher instance...");
|
|
175
|
+
const fileSystem = this.getOrCreateFileSystem(config);
|
|
176
|
+
this.getOrCreateTelemetryService(config);
|
|
177
|
+
const projectPublisher = new ProjectPublisher(fileSystem);
|
|
178
|
+
logger.info("ProjectPublisher created successfully.");
|
|
179
|
+
return projectPublisher;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async function createNodeProjectPublisher(options) {
|
|
183
|
+
const factory = new NodeProjectPublisherFactory;
|
|
184
|
+
return factory.createAsync(options);
|
|
185
|
+
}
|
|
186
|
+
export { BaseNodePackagerFactory, DotnetDiscoveryService, NodePackageSignService, createNodeProjectPackager, createNodeProjectPublisher };
|
|
187
|
+
|
|
188
|
+
//# debugId=D4A8E25A7C76BDD464756E2164756E21
|
|
@@ -1,38 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
toolOwnedProjectTypes,
|
|
3
|
+
toolVerbForProjectType
|
|
4
|
+
} from "./packager-tool-60af1hw2.js";
|
|
1
5
|
import {
|
|
2
6
|
registerPackagerFactories
|
|
3
|
-
} from "./packager-tool-
|
|
7
|
+
} from "./packager-tool-5ddtwzva.js";
|
|
4
8
|
import {
|
|
5
9
|
toolsFactoryRepository
|
|
6
|
-
} from "./packager-tool-
|
|
10
|
+
} from "./packager-tool-pbmqk39a.js";
|
|
7
11
|
import {
|
|
8
|
-
catchError,
|
|
9
12
|
ensurePackagerFactory,
|
|
10
13
|
logger,
|
|
11
14
|
unsupportedSolutionProjectType
|
|
12
|
-
} from "./packager-tool-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
["Process", "rpa"],
|
|
17
|
-
["Tests", "rpa"],
|
|
18
|
-
["WebApp", "rpa"],
|
|
19
|
-
["AppV2", "codedapp"],
|
|
20
|
-
["Api", "api-workflow"],
|
|
21
|
-
["Agent", "agent"],
|
|
22
|
-
["Function", "function"],
|
|
23
|
-
["CaseManagement", "maestro"],
|
|
24
|
-
["ProcessOrchestration", "maestro"],
|
|
25
|
-
["processOrchestration", "maestro"],
|
|
26
|
-
["Flow", "maestro"],
|
|
27
|
-
["BusinessRules", "maestro"],
|
|
28
|
-
["Entity", "df"]
|
|
29
|
-
]);
|
|
30
|
-
function toolVerbForProjectType(projectType) {
|
|
31
|
-
return PROJECT_TYPE_TO_TOOL.get(projectType);
|
|
32
|
-
}
|
|
33
|
-
function toolOwnedProjectTypes() {
|
|
34
|
-
return [...PROJECT_TYPE_TO_TOOL.keys()];
|
|
35
|
-
}
|
|
15
|
+
} from "./packager-tool-tx834spe.js";
|
|
16
|
+
import {
|
|
17
|
+
catchError
|
|
18
|
+
} from "./packager-tool-6ybywxxn.js";
|
|
36
19
|
|
|
37
20
|
// src/services/packager-tool-resolver.ts
|
|
38
21
|
var PACKAGER_OWNED_TYPES = ["Connector"];
|
|
@@ -90,9 +73,10 @@ function packableProjectTypes() {
|
|
|
90
73
|
types.delete("processOrchestration");
|
|
91
74
|
return [...types].sort((a, b) => a.localeCompare(b));
|
|
92
75
|
}
|
|
93
|
-
async function ensurePackagerTools(solutionDir, fs) {
|
|
76
|
+
async function ensurePackagerTools(solutionDir, fs, options) {
|
|
94
77
|
registerPackagerFactories();
|
|
95
|
-
const
|
|
78
|
+
const only = options?.onlyProjectRelativePath;
|
|
79
|
+
const projects = (await readSolutionProjects(solutionDir, fs)).filter((project) => only === undefined || project.path === only);
|
|
96
80
|
if (projects.length === 0)
|
|
97
81
|
return;
|
|
98
82
|
const neededTools = new Set;
|
|
@@ -120,6 +104,6 @@ async function ensurePackagerTools(solutionDir, fs) {
|
|
|
120
104
|
}
|
|
121
105
|
}
|
|
122
106
|
|
|
123
|
-
export {
|
|
107
|
+
export { UnpackableProjectTypeError, isUnpackableProjectTypeError, ensurePackagerTools };
|
|
124
108
|
|
|
125
|
-
//# debugId=
|
|
109
|
+
//# debugId=CFEFCC90AA8142B364756E2164756E21
|