@uipath/solution-sdk 1.203.0-preview.205 → 1.204.0-preview.206
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/THIRD-PARTY-NOTICES.md +2 -2
- package/dist/{embedded-file-reader-xxqe8vs8.js → embedded-file-reader-rf2g1kfj.js} +2 -2
- package/dist/generated/src/apis/DeploymentsApi.d.ts +27 -23
- package/dist/generated/src/models/DeploymentResourceInfo.d.ts +109 -0
- package/dist/generated/src/models/DeploymentResourceReplacementDto.d.ts +50 -0
- package/dist/generated/src/models/DeploymentUpgradeState.d.ts +27 -0
- package/dist/generated/src/models/PageInfoDtoOfDeploymentResourceInfo.d.ts +39 -0
- package/dist/generated/src/models/ResetConfigurationSource.d.ts +25 -0
- package/dist/generated/src/models/index.d.ts +5 -2
- package/dist/{index-y8tgscfm.js → index-6gp5j7j5.js} +22 -6
- package/dist/{index-4zqv4bn2.js → index-bdpp6dsk.js} +565 -92
- package/dist/index.js +345 -209
- package/dist/resources/index.js +418 -82
- package/dist/scripts/generate-sdk.js +14 -7
- package/dist/solution-auth.js +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/resources/index.d.ts +2 -0
- package/dist/src/resources/providers/resource-builder-init.d.ts +1 -1
- package/dist/src/resources/services/remote-resources.d.ts +45 -0
- package/dist/src/resources/services/resource-name.d.ts +28 -0
- package/dist/src/resources/services/sync-resources-from-bindings.d.ts +17 -5
- package/dist/src/solution-auth.d.ts +3 -0
- package/dist/src/zip-utils.d.ts +8 -0
- package/package.json +2 -2
- package/dist/generated/src/models/DeploymentRunResponse.d.ts +0 -51
- package/dist/generated/src/models/DeploymentUpgradeRequest.d.ts +0 -38
- package/dist/src/deployments-auto-install.d.ts +0 -55
package/dist/resources/index.js
CHANGED
|
@@ -18,12 +18,12 @@ import {
|
|
|
18
18
|
logger,
|
|
19
19
|
normalizeProjectType,
|
|
20
20
|
toPortableRelativePath
|
|
21
|
-
} from "../index-
|
|
21
|
+
} from "../index-bdpp6dsk.js";
|
|
22
22
|
import {
|
|
23
23
|
getAuthContext,
|
|
24
24
|
getLoginStatusAsync,
|
|
25
25
|
getSolutionAuthContext
|
|
26
|
-
} from "../index-
|
|
26
|
+
} from "../index-6gp5j7j5.js";
|
|
27
27
|
import {
|
|
28
28
|
getFileSystem
|
|
29
29
|
} from "../index-g0hcxnae.js";
|
|
@@ -3314,7 +3314,6 @@ class InMemoryCacheProvider {
|
|
|
3314
3314
|
this._defaultTtlMs = defaultTtlMs;
|
|
3315
3315
|
}
|
|
3316
3316
|
}
|
|
3317
|
-
|
|
3318
3317
|
// ../../node_modules/@uipath/resource-builder-sdk/dist/providers/ip-range-bypass-secret-provider.js
|
|
3319
3318
|
class NullIpRangeBypassSecretProvider {
|
|
3320
3319
|
async getIpRangeBypassSecretAsync(_cancellationToken) {
|
|
@@ -3335,6 +3334,183 @@ class NullSecretsProvider {
|
|
|
3335
3334
|
}
|
|
3336
3335
|
}
|
|
3337
3336
|
|
|
3337
|
+
// ../../node_modules/@uipath/resource-builder-sdk/dist/exceptions/timeout-exception.js
|
|
3338
|
+
class TimeoutException extends Error {
|
|
3339
|
+
constructor(message, timeoutMs) {
|
|
3340
|
+
super(message);
|
|
3341
|
+
this.name = "TimeoutException";
|
|
3342
|
+
this.timeoutMs = timeoutMs;
|
|
3343
|
+
if (Error.captureStackTrace)
|
|
3344
|
+
Error.captureStackTrace(this, TimeoutException);
|
|
3345
|
+
}
|
|
3346
|
+
}
|
|
3347
|
+
|
|
3348
|
+
// ../../node_modules/@uipath/resource-builder-sdk/dist/helpers/timeout.js
|
|
3349
|
+
function createTimeoutSignal(timeoutMs, description, linkedSignal) {
|
|
3350
|
+
const controller = new AbortController;
|
|
3351
|
+
let timeoutId;
|
|
3352
|
+
const dispose = () => {
|
|
3353
|
+
if (timeoutId !== undefined) {
|
|
3354
|
+
clearTimeout(timeoutId);
|
|
3355
|
+
timeoutId = undefined;
|
|
3356
|
+
}
|
|
3357
|
+
linkedSignal?.removeEventListener("abort", onLinkedAbort);
|
|
3358
|
+
};
|
|
3359
|
+
const onLinkedAbort = () => {
|
|
3360
|
+
dispose();
|
|
3361
|
+
controller.abort(linkedSignal?.reason);
|
|
3362
|
+
};
|
|
3363
|
+
if (linkedSignal?.aborted) {
|
|
3364
|
+
controller.abort(linkedSignal.reason);
|
|
3365
|
+
return {
|
|
3366
|
+
signal: controller.signal,
|
|
3367
|
+
dispose
|
|
3368
|
+
};
|
|
3369
|
+
}
|
|
3370
|
+
timeoutId = setTimeout(() => {
|
|
3371
|
+
dispose();
|
|
3372
|
+
controller.abort(new TimeoutException(`${description} timed out after ${timeoutMs}ms`, timeoutMs));
|
|
3373
|
+
}, timeoutMs);
|
|
3374
|
+
linkedSignal?.addEventListener("abort", onLinkedAbort, {
|
|
3375
|
+
once: true
|
|
3376
|
+
});
|
|
3377
|
+
return {
|
|
3378
|
+
signal: controller.signal,
|
|
3379
|
+
dispose
|
|
3380
|
+
};
|
|
3381
|
+
}
|
|
3382
|
+
var MAX_TIMEOUT_MS = 2147483647;
|
|
3383
|
+
function isValidTimeoutMs(value) {
|
|
3384
|
+
return typeof value == "number" && Number.isFinite(value) && value > 0 && value <= MAX_TIMEOUT_MS;
|
|
3385
|
+
}
|
|
3386
|
+
function readTimeoutOverrideMs(storageKey) {
|
|
3387
|
+
try {
|
|
3388
|
+
if ("u" < typeof localStorage)
|
|
3389
|
+
return;
|
|
3390
|
+
const raw = localStorage.getItem(storageKey);
|
|
3391
|
+
if (raw === null || raw.trim() === "")
|
|
3392
|
+
return;
|
|
3393
|
+
const parsed = Number(raw);
|
|
3394
|
+
return isValidTimeoutMs(parsed) ? parsed : undefined;
|
|
3395
|
+
} catch {
|
|
3396
|
+
return;
|
|
3397
|
+
}
|
|
3398
|
+
}
|
|
3399
|
+
|
|
3400
|
+
// ../../node_modules/@uipath/resource-builder-sdk/dist/exceptions/operation-cancelled-exception.js
|
|
3401
|
+
class OperationCancelledException extends Error {
|
|
3402
|
+
constructor(message, operationName) {
|
|
3403
|
+
super(message ?? "The operation was cancelled");
|
|
3404
|
+
this.name = "OperationCancelledException";
|
|
3405
|
+
this.operationName = operationName;
|
|
3406
|
+
if (Error.captureStackTrace)
|
|
3407
|
+
Error.captureStackTrace(this, OperationCancelledException);
|
|
3408
|
+
}
|
|
3409
|
+
}
|
|
3410
|
+
|
|
3411
|
+
// ../../node_modules/@uipath/resource-builder-sdk/dist/providers/timeout-file-storage-provider.js
|
|
3412
|
+
class TimeoutFileStorageProvider2 {
|
|
3413
|
+
fileExistsAsync(path, cancellationToken) {
|
|
3414
|
+
return this.guard(`fileExists(${path})`, cancellationToken, (signal) => this.inner.fileExistsAsync(path, signal));
|
|
3415
|
+
}
|
|
3416
|
+
async openFileAsync(path, cancellationToken) {
|
|
3417
|
+
const stream = await this.guard(`openFile(${path})`, cancellationToken, (signal) => this.inner.openFileAsync(path, signal));
|
|
3418
|
+
return this.bindReadsToTimeout(stream, `read(${path})`, cancellationToken);
|
|
3419
|
+
}
|
|
3420
|
+
bindReadsToTimeout(stream, description, cancellationToken) {
|
|
3421
|
+
const reader = stream.getReader();
|
|
3422
|
+
return new ReadableStream({
|
|
3423
|
+
pull: async (controller) => {
|
|
3424
|
+
let result;
|
|
3425
|
+
try {
|
|
3426
|
+
result = await this.guard(description, cancellationToken, () => reader.read());
|
|
3427
|
+
} catch (error) {
|
|
3428
|
+
reader.cancel(error).catch(() => {});
|
|
3429
|
+
throw error;
|
|
3430
|
+
}
|
|
3431
|
+
if (result.done)
|
|
3432
|
+
controller.close();
|
|
3433
|
+
else
|
|
3434
|
+
controller.enqueue(result.value);
|
|
3435
|
+
},
|
|
3436
|
+
cancel: (reason) => reader.cancel(reason)
|
|
3437
|
+
});
|
|
3438
|
+
}
|
|
3439
|
+
readFileToEndAsync(path, cancellationToken) {
|
|
3440
|
+
return this.guard(`readFileToEnd(${path})`, cancellationToken, (signal) => this.inner.readFileToEndAsync(path, signal));
|
|
3441
|
+
}
|
|
3442
|
+
writeFileAsync(path, content, cancellationToken) {
|
|
3443
|
+
return this.guard(`writeFile(${path})`, cancellationToken, (signal) => this.inner.writeFileAsync(path, content, signal));
|
|
3444
|
+
}
|
|
3445
|
+
deleteFileAsync(path, cancellationToken) {
|
|
3446
|
+
return this.guard(`deleteFile(${path})`, cancellationToken, (signal) => this.inner.deleteFileAsync(path, signal));
|
|
3447
|
+
}
|
|
3448
|
+
getFilesAsync(path, searchPattern, cancellationToken) {
|
|
3449
|
+
return this.guard(`getFiles(${path ?? ""}, ${searchPattern ?? ""})`, cancellationToken, (signal) => this.inner.getFilesAsync(path, searchPattern, signal));
|
|
3450
|
+
}
|
|
3451
|
+
async guard(description, cancellationToken, operation) {
|
|
3452
|
+
const timeout = createTimeoutSignal(this.timeoutMs, `File storage operation ${description}`, cancellationToken);
|
|
3453
|
+
try {
|
|
3454
|
+
return await Promise.race([
|
|
3455
|
+
operation(timeout.signal),
|
|
3456
|
+
rejectOnAbort(timeout.signal)
|
|
3457
|
+
]);
|
|
3458
|
+
} catch (error) {
|
|
3459
|
+
if (cancellationToken?.aborted)
|
|
3460
|
+
throw cancellationToken.reason instanceof OperationCancelledException ? cancellationToken.reason : new OperationCancelledException(undefined, description);
|
|
3461
|
+
if (timeout.signal.aborted && timeout.signal.reason instanceof TimeoutException)
|
|
3462
|
+
throw timeout.signal.reason;
|
|
3463
|
+
throw error;
|
|
3464
|
+
} finally {
|
|
3465
|
+
timeout.dispose();
|
|
3466
|
+
}
|
|
3467
|
+
}
|
|
3468
|
+
constructor(inner, timeoutMs) {
|
|
3469
|
+
this.inner = inner;
|
|
3470
|
+
this.timeoutMs = timeoutMs;
|
|
3471
|
+
}
|
|
3472
|
+
}
|
|
3473
|
+
function rejectOnAbort(signal) {
|
|
3474
|
+
return new Promise((_, reject) => {
|
|
3475
|
+
if (signal.aborted)
|
|
3476
|
+
return void reject(signal.reason);
|
|
3477
|
+
signal.addEventListener("abort", () => reject(signal.reason), {
|
|
3478
|
+
once: true
|
|
3479
|
+
});
|
|
3480
|
+
});
|
|
3481
|
+
}
|
|
3482
|
+
function withFileOperationTimeout2(provider, timeoutMs) {
|
|
3483
|
+
if (!isValidTimeoutMs(timeoutMs) || provider instanceof TimeoutFileStorageProvider2)
|
|
3484
|
+
return provider;
|
|
3485
|
+
return new TimeoutFileStorageProvider2(provider, timeoutMs);
|
|
3486
|
+
}
|
|
3487
|
+
|
|
3488
|
+
// ../../node_modules/@uipath/resource-builder-sdk/dist/solution/solution-context-options.js
|
|
3489
|
+
var DEFAULT_SOLUTION_CONTEXT_OPTIONS = {
|
|
3490
|
+
lockTimeoutMs: 30000,
|
|
3491
|
+
fileOperationTimeoutMs: 30000
|
|
3492
|
+
};
|
|
3493
|
+
var SOLUTION_CONTEXT_TIMEOUT_STORAGE_KEY = "SOL_RB_SOLUTION_CONTEXT_TIMEOUT_MS";
|
|
3494
|
+
var FILE_OPERATION_TIMEOUT_STORAGE_KEY = "SOL_RB_FILE_OPERATION_TIMEOUT_MS";
|
|
3495
|
+
function resolveTimeoutMs(storageKey, configured, fallback) {
|
|
3496
|
+
const override = readTimeoutOverrideMs(storageKey);
|
|
3497
|
+
if (override !== undefined)
|
|
3498
|
+
return override;
|
|
3499
|
+
return isValidTimeoutMs(configured) ? configured : fallback;
|
|
3500
|
+
}
|
|
3501
|
+
function resolveLockTimeoutMs(options) {
|
|
3502
|
+
return resolveTimeoutMs(SOLUTION_CONTEXT_TIMEOUT_STORAGE_KEY, options?.lockTimeoutMs, DEFAULT_SOLUTION_CONTEXT_OPTIONS.lockTimeoutMs);
|
|
3503
|
+
}
|
|
3504
|
+
function resolveFileOperationTimeoutMs(options) {
|
|
3505
|
+
return resolveTimeoutMs(FILE_OPERATION_TIMEOUT_STORAGE_KEY, options?.fileOperationTimeoutMs, DEFAULT_SOLUTION_CONTEXT_OPTIONS.fileOperationTimeoutMs);
|
|
3506
|
+
}
|
|
3507
|
+
function mergeSolutionContextOptions(options) {
|
|
3508
|
+
return {
|
|
3509
|
+
lockTimeoutMs: isValidTimeoutMs(options?.lockTimeoutMs) ? options.lockTimeoutMs : DEFAULT_SOLUTION_CONTEXT_OPTIONS.lockTimeoutMs,
|
|
3510
|
+
fileOperationTimeoutMs: isValidTimeoutMs(options?.fileOperationTimeoutMs) ? options.fileOperationTimeoutMs : DEFAULT_SOLUTION_CONTEXT_OPTIONS.fileOperationTimeoutMs
|
|
3511
|
+
};
|
|
3512
|
+
}
|
|
3513
|
+
|
|
3338
3514
|
// ../../node_modules/@uipath/resource-builder-sdk/dist/solution/models.js
|
|
3339
3515
|
var SolutionConstants = {
|
|
3340
3516
|
RESOURCE_FILES_FOLDER_NAME: "resources",
|
|
@@ -3469,17 +3645,6 @@ class DisconnectedException extends Error {
|
|
|
3469
3645
|
}
|
|
3470
3646
|
}
|
|
3471
3647
|
|
|
3472
|
-
// ../../node_modules/@uipath/resource-builder-sdk/dist/exceptions/operation-cancelled-exception.js
|
|
3473
|
-
class OperationCancelledException extends Error {
|
|
3474
|
-
constructor(message, operationName) {
|
|
3475
|
-
super(message ?? "The operation was cancelled");
|
|
3476
|
-
this.name = "OperationCancelledException";
|
|
3477
|
-
this.operationName = operationName;
|
|
3478
|
-
if (Error.captureStackTrace)
|
|
3479
|
-
Error.captureStackTrace(this, OperationCancelledException);
|
|
3480
|
-
}
|
|
3481
|
-
}
|
|
3482
|
-
|
|
3483
3648
|
// ../../node_modules/@uipath/resource-builder-sdk/dist/exceptions/invalid-operation-exception.js
|
|
3484
3649
|
class InvalidOperationException extends Error {
|
|
3485
3650
|
constructor(message) {
|
|
@@ -4144,10 +4309,14 @@ class MultiFileSolutionDefinitionProvider {
|
|
|
4144
4309
|
this._jsonSerializer = this.jsonSerializerFactory.getByName(JsonSerializerNames.CamelCaseIndented);
|
|
4145
4310
|
return this._jsonSerializer;
|
|
4146
4311
|
}
|
|
4312
|
+
async getFileStorageProviderAsync(context, cancellationToken) {
|
|
4313
|
+
const provider = await this.fileStorageProviderFactory.getProviderAsync(context, cancellationToken);
|
|
4314
|
+
return withFileOperationTimeout2(provider, resolveFileOperationTimeoutMs(this.options));
|
|
4315
|
+
}
|
|
4147
4316
|
async readAsync(context, cancellationToken) {
|
|
4148
4317
|
this.logger.info("Reading multi-file solution definition for solution %s", context.path);
|
|
4149
4318
|
const solutionKey = this.getSolutionKey(context);
|
|
4150
|
-
const fileStorageProvider = await this.
|
|
4319
|
+
const fileStorageProvider = await this.getFileStorageProviderAsync(context, cancellationToken);
|
|
4151
4320
|
const resources = [];
|
|
4152
4321
|
const solutionFiles = [];
|
|
4153
4322
|
let hashes;
|
|
@@ -4223,6 +4392,12 @@ class MultiFileSolutionDefinitionProvider {
|
|
|
4223
4392
|
invalidFiles.push(resourceFile);
|
|
4224
4393
|
}
|
|
4225
4394
|
} catch (ex) {
|
|
4395
|
+
if (ex instanceof OperationCancelledException || cancellationToken?.aborted) {
|
|
4396
|
+
this.logger.warn("Operation cancelled while reading file %s for solution %s", resourceFile, context.path);
|
|
4397
|
+
throw ex instanceof OperationCancelledException ? ex : new OperationCancelledException;
|
|
4398
|
+
}
|
|
4399
|
+
if (ex instanceof TimeoutException)
|
|
4400
|
+
throw new TimeoutException(`Reading resource file ${resourceFile} for solution ${context.path} timed out: ${ex.message}`, ex.timeoutMs);
|
|
4226
4401
|
if (isFileNotFoundError(ex)) {
|
|
4227
4402
|
this.logger.warn("Resource file listed but missing in storage for solution %s: %s", resourceFile, context.path);
|
|
4228
4403
|
missingFiles.push(resourceFile);
|
|
@@ -4275,7 +4450,7 @@ class MultiFileSolutionDefinitionProvider {
|
|
|
4275
4450
|
async writeAsync(context, solution, cancellationToken) {
|
|
4276
4451
|
if (context.isReadOnly)
|
|
4277
4452
|
return;
|
|
4278
|
-
const fileStorageProvider = await this.
|
|
4453
|
+
const fileStorageProvider = await this.getFileStorageProviderAsync(context, cancellationToken);
|
|
4279
4454
|
const existingHashes = this.getHashes(context);
|
|
4280
4455
|
const existingPaths = this.getPaths(context);
|
|
4281
4456
|
const existingTree = this.getTree(context);
|
|
@@ -4350,7 +4525,7 @@ class MultiFileSolutionDefinitionProvider {
|
|
|
4350
4525
|
async deleteFilesAsync(context, filesToDelete, cancellationToken) {
|
|
4351
4526
|
if (!filesToDelete || filesToDelete.length === 0 || context.isReadOnly)
|
|
4352
4527
|
return;
|
|
4353
|
-
const fileStorageProvider = await this.
|
|
4528
|
+
const fileStorageProvider = await this.getFileStorageProviderAsync(context, cancellationToken);
|
|
4354
4529
|
for (const file of filesToDelete)
|
|
4355
4530
|
try {
|
|
4356
4531
|
const outputPath = this.joinPath("resourceFiles", file.name);
|
|
@@ -4547,7 +4722,8 @@ class MultiFileSolutionDefinitionProvider {
|
|
|
4547
4722
|
const hex = Math.abs(hash).toString(16).padStart(8, "0");
|
|
4548
4723
|
return `${hex.slice(0, 8)}-${hex.slice(0, 4)}-4${hex.slice(1, 4)}-8${hex.slice(1, 4)}-${hex.slice(0, 12).padEnd(12, "0")}`;
|
|
4549
4724
|
}
|
|
4550
|
-
constructor(fileStorageProviderFactory, jsonSerializerFactory, loggerFactory) {
|
|
4725
|
+
constructor(fileStorageProviderFactory, jsonSerializerFactory, loggerFactory, options) {
|
|
4726
|
+
this.options = options;
|
|
4551
4727
|
this._caseInsensitiveSerializer = null;
|
|
4552
4728
|
this._jsonSerializer = null;
|
|
4553
4729
|
this.fileStorageProviderFactory = fileStorageProviderFactory;
|
|
@@ -4560,12 +4736,13 @@ MultiFileSolutionDefinitionProvider.INVALID_FILE_NAME_CHARS = /[<>:"/\\|?*\x00-\
|
|
|
4560
4736
|
// ../../node_modules/@uipath/resource-builder-sdk/dist/solution/multi-file-solution-definition-factory.js
|
|
4561
4737
|
class MultiFileSolutionDefinitionFactory {
|
|
4562
4738
|
async getProviderAsync(cancellationToken) {
|
|
4563
|
-
return new MultiFileSolutionDefinitionProvider(this.fileStorageProviderFactory, this.jsonSerializerFactory, this.loggerFactory);
|
|
4739
|
+
return new MultiFileSolutionDefinitionProvider(this.fileStorageProviderFactory, this.jsonSerializerFactory, this.loggerFactory, this.options);
|
|
4564
4740
|
}
|
|
4565
|
-
constructor(fileStorageProviderFactory, jsonSerializerFactory, loggerFactory) {
|
|
4741
|
+
constructor(fileStorageProviderFactory, jsonSerializerFactory, loggerFactory, options) {
|
|
4566
4742
|
this.fileStorageProviderFactory = fileStorageProviderFactory;
|
|
4567
4743
|
this.jsonSerializerFactory = jsonSerializerFactory;
|
|
4568
4744
|
this.loggerFactory = loggerFactory;
|
|
4745
|
+
this.options = options;
|
|
4569
4746
|
this.logger = loggerFactory.create("MultiFileSolutionDefinitionFactory");
|
|
4570
4747
|
}
|
|
4571
4748
|
}
|
|
@@ -4573,7 +4750,7 @@ class MultiFileSolutionDefinitionFactory {
|
|
|
4573
4750
|
// ../../node_modules/@uipath/resource-builder-sdk/dist/embedded-files-default.js
|
|
4574
4751
|
async function createDefaultEmbeddedFileReaderAsync() {
|
|
4575
4752
|
const [{ EmbeddedFileReader }, { JsonSerializerFactory: JsonSerializerFactory2 }] = await Promise.all([
|
|
4576
|
-
import("../embedded-file-reader-
|
|
4753
|
+
import("../embedded-file-reader-rf2g1kfj.js"),
|
|
4577
4754
|
import("../index-dqa169gp.js")
|
|
4578
4755
|
]);
|
|
4579
4756
|
return new EmbeddedFileReader(new JsonSerializerFactory2);
|
|
@@ -4606,7 +4783,8 @@ var ServiceTokens = {
|
|
|
4606
4783
|
JsonSerializerFactory: "IJsonSerializerFactory",
|
|
4607
4784
|
SerializerProxy: "ISerializerProxy",
|
|
4608
4785
|
StreamSerializer: "IStreamSerializer",
|
|
4609
|
-
HttpReaderOptions: "HttpReaderOptions"
|
|
4786
|
+
HttpReaderOptions: "HttpReaderOptions",
|
|
4787
|
+
SolutionContextOptions: "SolutionContextOptions"
|
|
4610
4788
|
};
|
|
4611
4789
|
var Tokens = {
|
|
4612
4790
|
IMediator: "IMediator",
|
|
@@ -5172,7 +5350,8 @@ class BindingOverwritesHandler {
|
|
|
5172
5350
|
[BindingsKnownKeys.FolderKeyPropertyName]: resourceOverwrite.folderKey ?? ""
|
|
5173
5351
|
};
|
|
5174
5352
|
else {
|
|
5175
|
-
const
|
|
5353
|
+
const isBusinessRule = bindingResource.binding.resourceType === models_BindingsResourceType.BusinessRule;
|
|
5354
|
+
const folderPath = bindingResource.isArtefactResource && !isBusinessRule ? "" : resourceOverwrite.folderFullyQualifiedName ?? "";
|
|
5176
5355
|
overwrite = {
|
|
5177
5356
|
[BindingsKnownKeys.FolderPathPropertyName]: folderPath,
|
|
5178
5357
|
[BindingsKnownKeys.NamePropertyName]: resourceOverwrite.resourceName
|
|
@@ -5330,42 +5509,6 @@ class AsyncSemaphore {
|
|
|
5330
5509
|
this._permits = permits;
|
|
5331
5510
|
}
|
|
5332
5511
|
}
|
|
5333
|
-
function createTimeoutSignal(timeoutMs, linkedSignal) {
|
|
5334
|
-
const controller = new AbortController;
|
|
5335
|
-
const timeoutId = setTimeout(() => {
|
|
5336
|
-
controller.abort(new Error(`Operation timed out after ${timeoutMs}ms`));
|
|
5337
|
-
}, timeoutMs);
|
|
5338
|
-
if (linkedSignal)
|
|
5339
|
-
if (linkedSignal.aborted) {
|
|
5340
|
-
clearTimeout(timeoutId);
|
|
5341
|
-
controller.abort(linkedSignal.reason);
|
|
5342
|
-
} else
|
|
5343
|
-
linkedSignal.addEventListener("abort", () => {
|
|
5344
|
-
clearTimeout(timeoutId);
|
|
5345
|
-
controller.abort(linkedSignal.reason);
|
|
5346
|
-
}, {
|
|
5347
|
-
signal: controller.signal
|
|
5348
|
-
});
|
|
5349
|
-
controller.signal.addEventListener("abort", () => {
|
|
5350
|
-
clearTimeout(timeoutId);
|
|
5351
|
-
});
|
|
5352
|
-
return controller.signal;
|
|
5353
|
-
}
|
|
5354
|
-
var DEFAULT_TIMEOUT_MS = 5000;
|
|
5355
|
-
var SOLUTION_CONTEXT_TIMEOUT_STORAGE_KEY = "SOL_RB_SOLUTION_CONTEXT_TIMEOUT_MS";
|
|
5356
|
-
function getLockTimeoutMs() {
|
|
5357
|
-
try {
|
|
5358
|
-
if ("u" < typeof localStorage)
|
|
5359
|
-
return DEFAULT_TIMEOUT_MS;
|
|
5360
|
-
const raw = localStorage.getItem(SOLUTION_CONTEXT_TIMEOUT_STORAGE_KEY);
|
|
5361
|
-
if (raw === null || raw.trim() === "")
|
|
5362
|
-
return DEFAULT_TIMEOUT_MS;
|
|
5363
|
-
const parsed = Number(raw);
|
|
5364
|
-
return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_TIMEOUT_MS;
|
|
5365
|
-
} catch {
|
|
5366
|
-
return DEFAULT_TIMEOUT_MS;
|
|
5367
|
-
}
|
|
5368
|
-
}
|
|
5369
5512
|
|
|
5370
5513
|
class SolutionContext {
|
|
5371
5514
|
get isLoaded() {
|
|
@@ -5493,30 +5636,42 @@ class SolutionContext {
|
|
|
5493
5636
|
throw new FileDependencyNotFoundException(missingFileDependencies);
|
|
5494
5637
|
}
|
|
5495
5638
|
async doWithLockAsync(doWork, cancellationToken) {
|
|
5496
|
-
const
|
|
5497
|
-
|
|
5639
|
+
const lockTimeoutMs = resolveLockTimeoutMs(this._options);
|
|
5640
|
+
const lockTimeout = createTimeoutSignal(lockTimeoutMs, `Waiting for the lock on solution ${this.path}`, cancellationToken);
|
|
5498
5641
|
try {
|
|
5499
|
-
|
|
5642
|
+
await this._semaphore.acquire(lockTimeout.signal);
|
|
5643
|
+
} catch (error) {
|
|
5644
|
+
if (!cancellationToken?.aborted && lockTimeout.signal.reason instanceof TimeoutException)
|
|
5645
|
+
throw lockTimeout.signal.reason;
|
|
5646
|
+
throw error;
|
|
5647
|
+
} finally {
|
|
5648
|
+
lockTimeout.dispose();
|
|
5649
|
+
}
|
|
5650
|
+
try {
|
|
5651
|
+
return await doWork(cancellationToken);
|
|
5500
5652
|
} finally {
|
|
5501
5653
|
this._semaphore.release();
|
|
5502
5654
|
}
|
|
5503
5655
|
}
|
|
5504
|
-
constructor(path, isReadOnlyOrProvider,
|
|
5656
|
+
constructor(path, isReadOnlyOrProvider, definitionProviderOrOptions, options) {
|
|
5505
5657
|
this._definition = null;
|
|
5506
5658
|
this._semaphore = new AsyncSemaphore(1);
|
|
5507
5659
|
this._items = {};
|
|
5508
5660
|
this._persistChanges = true;
|
|
5509
5661
|
ArgumentException.throwIfNullOrEmpty(path, "path");
|
|
5510
5662
|
if (typeof isReadOnlyOrProvider == "boolean") {
|
|
5663
|
+
const definitionProvider = definitionProviderOrOptions;
|
|
5511
5664
|
ArgumentException.throwIfNull(definitionProvider, "definitionProvider");
|
|
5512
5665
|
this.path = path;
|
|
5513
5666
|
this.isReadOnly = isReadOnlyOrProvider;
|
|
5514
5667
|
this._definitionProvider = definitionProvider;
|
|
5668
|
+
this._options = options;
|
|
5515
5669
|
} else {
|
|
5516
5670
|
ArgumentException.throwIfNull(isReadOnlyOrProvider, "definitionProvider");
|
|
5517
5671
|
this.path = path;
|
|
5518
5672
|
this.isReadOnly = false;
|
|
5519
5673
|
this._definitionProvider = isReadOnlyOrProvider;
|
|
5674
|
+
this._options = definitionProviderOrOptions;
|
|
5520
5675
|
}
|
|
5521
5676
|
}
|
|
5522
5677
|
}
|
|
@@ -5527,7 +5682,8 @@ class SolutionContextFactory {
|
|
|
5527
5682
|
ArgumentException.throwIfNullOrEmpty(path, "path");
|
|
5528
5683
|
const solutionDefinitionFactory = this._container.resolve(Tokens.ISolutionDefinitionFactory);
|
|
5529
5684
|
const solutionDefinitionProvider = await solutionDefinitionFactory.getProviderAsync(cancellationToken);
|
|
5530
|
-
|
|
5685
|
+
const options = this._container.isRegistered(ServiceTokens.SolutionContextOptions, true) ? this._container.resolve(ServiceTokens.SolutionContextOptions) : undefined;
|
|
5686
|
+
return new SolutionContext(path, isReadOnly, solutionDefinitionProvider, options);
|
|
5531
5687
|
}
|
|
5532
5688
|
constructor(_container) {
|
|
5533
5689
|
this._container = _container;
|
|
@@ -6549,7 +6705,13 @@ var solutionsSubtypesMap = {
|
|
|
6549
6705
|
Api: "api",
|
|
6550
6706
|
Function: "function",
|
|
6551
6707
|
McpServer: "mcpserver",
|
|
6552
|
-
BusinessRule: "businessRule"
|
|
6708
|
+
BusinessRule: "businessRule",
|
|
6709
|
+
Native: "native",
|
|
6710
|
+
Federated: "federated",
|
|
6711
|
+
Case: "case",
|
|
6712
|
+
CaseMain: "caseMain",
|
|
6713
|
+
CaseComment: "caseComment",
|
|
6714
|
+
CaseDocument: "caseDocument"
|
|
6553
6715
|
};
|
|
6554
6716
|
function mapResourceToSolutionSubtype(entitySubtype) {
|
|
6555
6717
|
if (!entitySubtype)
|
|
@@ -14980,9 +15142,9 @@ class UnconfiguredEmbeddedFileReader {
|
|
|
14980
15142
|
}
|
|
14981
15143
|
|
|
14982
15144
|
// ../../node_modules/@uipath/resource-builder-sdk/dist/container.js
|
|
14983
|
-
function createContainer(accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory, embeddedFileReader) {
|
|
15145
|
+
function createContainer(accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory, embeddedFileReader, solutionContextOptions) {
|
|
14984
15146
|
const childContainer = import_tsyringe6.container.createChildContainer();
|
|
14985
|
-
registerProviders(childContainer, accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory);
|
|
15147
|
+
registerProviders(childContainer, accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory, solutionContextOptions);
|
|
14986
15148
|
registerServices(childContainer, embeddedFileReader);
|
|
14987
15149
|
registerHandlers(childContainer);
|
|
14988
15150
|
childContainer.register(ServiceTokens.Mediator, {
|
|
@@ -15006,7 +15168,7 @@ function registerProvider(diContainer, token, provider) {
|
|
|
15006
15168
|
break;
|
|
15007
15169
|
}
|
|
15008
15170
|
}
|
|
15009
|
-
function registerProviders(diContainer, accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory) {
|
|
15171
|
+
function registerProviders(diContainer, accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, httpReaderOptions, loggerFactory, solutionContextOptions) {
|
|
15010
15172
|
registerProvider(diContainer, ServiceTokens.AccessProvider, accessProvider);
|
|
15011
15173
|
registerProvider(diContainer, ServiceTokens.CacheProvider, cacheProvider);
|
|
15012
15174
|
registerProvider(diContainer, ServiceTokens.SecretsProvider, secretsProvider);
|
|
@@ -15021,6 +15183,7 @@ function registerProviders(diContainer, accessProvider, cacheProvider, secretsPr
|
|
|
15021
15183
|
...httpReaderOptions
|
|
15022
15184
|
};
|
|
15023
15185
|
diContainer.registerInstance(ServiceTokens.HttpReaderOptions, mergedOptions);
|
|
15186
|
+
diContainer.registerInstance(ServiceTokens.SolutionContextOptions, mergeSolutionContextOptions(solutionContextOptions));
|
|
15024
15187
|
}
|
|
15025
15188
|
function registerServices(diContainer, embeddedFileReader) {
|
|
15026
15189
|
diContainer.register(ServiceTokens.AutomationSolutionsClientProxy, {
|
|
@@ -15755,6 +15918,10 @@ class ResourceBuilderConfiguration {
|
|
|
15755
15918
|
this._httpReaderOptions = options;
|
|
15756
15919
|
return this;
|
|
15757
15920
|
}
|
|
15921
|
+
addSolutionContextOptions(options) {
|
|
15922
|
+
this._solutionContextOptions = options;
|
|
15923
|
+
return this;
|
|
15924
|
+
}
|
|
15758
15925
|
addLoggerFactory(factoryProvider, lifetime = service_tokens_ServiceLifetime.Singleton) {
|
|
15759
15926
|
this._loggerFactoryProvider = factoryProvider;
|
|
15760
15927
|
this._loggerFactoryLifetime = lifetime;
|
|
@@ -15819,7 +15986,7 @@ class ResourceBuilderConfiguration {
|
|
|
15819
15986
|
};
|
|
15820
15987
|
} else if (!solutionDefinitionProvider && fileStorageProviderFactory)
|
|
15821
15988
|
solutionDefinitionFactory = {
|
|
15822
|
-
instance: new MultiFileSolutionDefinitionFactory(fileStorageProviderFactory.instance, new JsonSerializerFactory, loggerFactoryInstance),
|
|
15989
|
+
instance: new MultiFileSolutionDefinitionFactory(fileStorageProviderFactory.instance, new JsonSerializerFactory, loggerFactoryInstance, this._solutionContextOptions),
|
|
15823
15990
|
lifetime: service_tokens_ServiceLifetime.Scoped
|
|
15824
15991
|
};
|
|
15825
15992
|
const artifactResourceSpecEnhancerInstance = this._artifactResourceSpecEnhancerProvider ? await this.resolveGenericProvider(this._artifactResourceSpecEnhancerProvider) : new DefaultArtifactResourceSpecEnhancer;
|
|
@@ -15828,7 +15995,7 @@ class ResourceBuilderConfiguration {
|
|
|
15828
15995
|
lifetime: this._artifactResourceSpecEnhancerLifetime
|
|
15829
15996
|
};
|
|
15830
15997
|
const embeddedFileReader = await createDefaultEmbeddedFileReaderAsync();
|
|
15831
|
-
const container3 = createContainer(accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, this._httpReaderOptions, loggerFactory, embeddedFileReader);
|
|
15998
|
+
const container3 = createContainer(accessProvider, cacheProvider, secretsProvider, fileStorageProviderFactory, ipRangeBypassSecretProvider, solutionDefinitionProvider, solutionDefinitionFactory, artifactResourceSpecEnhancer, this._httpReaderOptions, loggerFactory, embeddedFileReader, this._solutionContextOptions);
|
|
15832
15999
|
return new ResourceBuilderServices(container3);
|
|
15833
16000
|
}
|
|
15834
16001
|
async buildServices() {
|
|
@@ -15849,7 +16016,6 @@ class ResourceBuilderConfiguration {
|
|
|
15849
16016
|
function createResourceBuilderConfiguration() {
|
|
15850
16017
|
return new ResourceBuilderConfiguration;
|
|
15851
16018
|
}
|
|
15852
|
-
|
|
15853
16019
|
// src/resources/services/solution-manifest.ts
|
|
15854
16020
|
async function assertSolutionManifest(dir) {
|
|
15855
16021
|
const fs = getFileSystem();
|
|
@@ -16205,7 +16371,7 @@ class CliResourceBuilderLoggerFactory {
|
|
|
16205
16371
|
}
|
|
16206
16372
|
|
|
16207
16373
|
// ../orchestrator-sdk/generated/src/runtime.ts
|
|
16208
|
-
var BASE_PATH = "https://alpha.uipath.com/
|
|
16374
|
+
var BASE_PATH = "https://alpha.uipath.com/Ada/byoa/orchestrator_".replace(/\/+$/, "");
|
|
16209
16375
|
|
|
16210
16376
|
class Configuration {
|
|
16211
16377
|
configuration;
|
|
@@ -16458,7 +16624,7 @@ var package_default = {
|
|
|
16458
16624
|
name: "@uipath/orchestrator-sdk",
|
|
16459
16625
|
author: "UiPath",
|
|
16460
16626
|
license: "SEE LICENSE IN LICENSE.txt",
|
|
16461
|
-
version: "1.
|
|
16627
|
+
version: "1.204.0",
|
|
16462
16628
|
repository: {
|
|
16463
16629
|
type: "git",
|
|
16464
16630
|
url: "https://github.com/UiPath/cli.git",
|
|
@@ -18010,6 +18176,12 @@ async function createApiClient(ApiClass, options) {
|
|
|
18010
18176
|
const config = await createOrchestratorConfig(options);
|
|
18011
18177
|
return new ApiClass(config);
|
|
18012
18178
|
}
|
|
18179
|
+
// ../orchestrator-sdk/src/knowledge-bundles.ts
|
|
18180
|
+
var KB_INLINE_LIMITS = {
|
|
18181
|
+
maxObjectBytes: 16 * 1024 * 1024,
|
|
18182
|
+
maxBodyBytes: 100 * 1024 * 1024,
|
|
18183
|
+
maxParts: 1e4
|
|
18184
|
+
};
|
|
18013
18185
|
// src/resources/providers/solution-access-provider.ts
|
|
18014
18186
|
var ORG_SCOPED_SERVICES = new Set(["apps", "authz"]);
|
|
18015
18187
|
|
|
@@ -18324,6 +18496,81 @@ function hasAnyTemplateRow(projectType) {
|
|
|
18324
18496
|
return key === wanted || key.startsWith(`${wanted}_`);
|
|
18325
18497
|
});
|
|
18326
18498
|
}
|
|
18499
|
+
// src/resources/services/remote-resources.ts
|
|
18500
|
+
function getRemoteResourceClients(services2) {
|
|
18501
|
+
return {
|
|
18502
|
+
catalog: services2.container.resolve(Tokens.IResourceCatalogClientProxy),
|
|
18503
|
+
importer: services2.container.resolve(Tokens.IImportResourceHelper)
|
|
18504
|
+
};
|
|
18505
|
+
}
|
|
18506
|
+
async function findCatalogEntityAsync(catalog, query, match) {
|
|
18507
|
+
let pageCursor;
|
|
18508
|
+
do {
|
|
18509
|
+
const page = await catalog.searchFolderEntities({
|
|
18510
|
+
...query,
|
|
18511
|
+
pageSize: 100,
|
|
18512
|
+
pageCursor
|
|
18513
|
+
});
|
|
18514
|
+
const found = (page.items ?? []).find(match);
|
|
18515
|
+
if (found) {
|
|
18516
|
+
return found;
|
|
18517
|
+
}
|
|
18518
|
+
pageCursor = page.nextPage ?? undefined;
|
|
18519
|
+
} while (pageCursor);
|
|
18520
|
+
return;
|
|
18521
|
+
}
|
|
18522
|
+
function toResourceReference(entity) {
|
|
18523
|
+
return toCatalogReference({
|
|
18524
|
+
kind: entity.entityType ?? "",
|
|
18525
|
+
type: entity.entitySubType ?? undefined,
|
|
18526
|
+
key: entity.entityKey ?? "",
|
|
18527
|
+
name: entity.entityName ?? undefined,
|
|
18528
|
+
folderPath: entity.fullyQualifiedName ?? undefined,
|
|
18529
|
+
folderKey: entity.folderKey ?? undefined
|
|
18530
|
+
});
|
|
18531
|
+
}
|
|
18532
|
+
function toCatalogReference(reference) {
|
|
18533
|
+
const { folderPath, folderKey, ...rest } = reference;
|
|
18534
|
+
return {
|
|
18535
|
+
...rest,
|
|
18536
|
+
folder: folderPath ? { fullyQualifiedName: folderPath, folderKey } : undefined
|
|
18537
|
+
};
|
|
18538
|
+
}
|
|
18539
|
+
async function exportResourceDefinitionAsync(importer, reference) {
|
|
18540
|
+
const payload = await importer.exportResourceAsync(reference);
|
|
18541
|
+
return payload.resourceDefinitions.find((d) => d.key === reference.key);
|
|
18542
|
+
}
|
|
18543
|
+
function readSpecProperty(spec, name) {
|
|
18544
|
+
if (!spec) {
|
|
18545
|
+
return;
|
|
18546
|
+
}
|
|
18547
|
+
if (spec[name] !== undefined) {
|
|
18548
|
+
return spec[name];
|
|
18549
|
+
}
|
|
18550
|
+
const lower = name.toLowerCase();
|
|
18551
|
+
const key = Object.keys(spec).find((k) => k.toLowerCase() === lower);
|
|
18552
|
+
return key === undefined ? undefined : spec[key];
|
|
18553
|
+
}
|
|
18554
|
+
function readSpecEntryPoints(spec) {
|
|
18555
|
+
const entryPoints = parseJsonString(readSpecProperty(spec, "entryPoints"));
|
|
18556
|
+
if (!Array.isArray(entryPoints) || !entryPoints.every((entry) => entry !== null && typeof entry === "object")) {
|
|
18557
|
+
return;
|
|
18558
|
+
}
|
|
18559
|
+
return entryPoints.map((entry) => ({
|
|
18560
|
+
UniqueId: String(readSpecProperty(entry, "uniqueId") ?? ""),
|
|
18561
|
+
Path: String(readSpecProperty(entry, "path") ?? ""),
|
|
18562
|
+
DisplayName: String(readSpecProperty(entry, "displayName") ?? ""),
|
|
18563
|
+
InputArguments: readSpecProperty(entry, "inputArguments"),
|
|
18564
|
+
OutputArguments: readSpecProperty(entry, "outputArguments")
|
|
18565
|
+
}));
|
|
18566
|
+
}
|
|
18567
|
+
function parseJsonString(raw) {
|
|
18568
|
+
if (typeof raw !== "string") {
|
|
18569
|
+
return raw;
|
|
18570
|
+
}
|
|
18571
|
+
const [error, parsed] = catchError(() => JSON.parse(raw));
|
|
18572
|
+
return error ? undefined : parsed;
|
|
18573
|
+
}
|
|
18327
18574
|
// src/resources/services/resource-casing.ts
|
|
18328
18575
|
var RESOURCE_FILES_FOLDER_NAME = "resources";
|
|
18329
18576
|
function lowerFirstChar(value) {
|
|
@@ -18481,7 +18728,52 @@ function parseResourceHeader(content) {
|
|
|
18481
18728
|
return null;
|
|
18482
18729
|
}
|
|
18483
18730
|
}
|
|
18731
|
+
// src/resources/services/resource-name.ts
|
|
18732
|
+
var MAX_RESOURCE_NAME_LENGTH = 256;
|
|
18733
|
+
var UNSAFE_NAME_CHARS = /[\\/:*?"<>|]/;
|
|
18734
|
+
function hasControlChar(value) {
|
|
18735
|
+
for (let i = 0;i < value.length; i++) {
|
|
18736
|
+
if (value.charCodeAt(i) < 32)
|
|
18737
|
+
return true;
|
|
18738
|
+
}
|
|
18739
|
+
return false;
|
|
18740
|
+
}
|
|
18741
|
+
function validateResourceName(name, options = {}) {
|
|
18742
|
+
const optionName = options.optionName ?? "--name";
|
|
18743
|
+
if (name.trim() === "") {
|
|
18744
|
+
return {
|
|
18745
|
+
ok: false,
|
|
18746
|
+
message: `${optionName} must not be blank`,
|
|
18747
|
+
instructions: "Pass a non-empty resource name."
|
|
18748
|
+
};
|
|
18749
|
+
}
|
|
18750
|
+
if (name.length > MAX_RESOURCE_NAME_LENGTH) {
|
|
18751
|
+
return {
|
|
18752
|
+
ok: false,
|
|
18753
|
+
message: `${optionName} exceeds the ${MAX_RESOURCE_NAME_LENGTH}-character limit (got ${name.length})`,
|
|
18754
|
+
instructions: "Shorten the resource name. Orchestrator name limits are kind-specific (queues cap at 50, assets at 256)."
|
|
18755
|
+
};
|
|
18756
|
+
}
|
|
18757
|
+
if (UNSAFE_NAME_CHARS.test(name) || hasControlChar(name)) {
|
|
18758
|
+
return {
|
|
18759
|
+
ok: false,
|
|
18760
|
+
message: `${optionName} contains unsafe characters`,
|
|
18761
|
+
instructions: 'Resource names cannot contain path separators (/, \\), control characters, or any of: : * ? " < > |'
|
|
18762
|
+
};
|
|
18763
|
+
}
|
|
18764
|
+
return { ok: true };
|
|
18765
|
+
}
|
|
18766
|
+
function assertValidResourceName(name, options = {}) {
|
|
18767
|
+
const result = validateResourceName(name, options);
|
|
18768
|
+
if (!result.ok) {
|
|
18769
|
+
throw new Error(`${result.message}. ${result.instructions}`);
|
|
18770
|
+
}
|
|
18771
|
+
}
|
|
18484
18772
|
// src/resources/services/sync-resources-from-bindings.ts
|
|
18773
|
+
var TYPE_IS_IDENTITY_REPLACE_OPTIONS = new Set([
|
|
18774
|
+
"SameType",
|
|
18775
|
+
"SameNameAndType"
|
|
18776
|
+
]);
|
|
18485
18777
|
var BINDINGS_JSON_FALLBACK_TYPES = new Set(["agent", "function"]);
|
|
18486
18778
|
function placeholderForType(type) {
|
|
18487
18779
|
switch ((type ?? "string").toLowerCase()) {
|
|
@@ -18511,7 +18803,7 @@ async function buildKindResolver(metadataReader) {
|
|
|
18511
18803
|
byKind.set(key, list);
|
|
18512
18804
|
}
|
|
18513
18805
|
return async (kind, type) => {
|
|
18514
|
-
const cacheKey = `${kind}|${type
|
|
18806
|
+
const cacheKey = (type === undefined ? kind : `${kind}|${type}`).toLowerCase();
|
|
18515
18807
|
if (cache.has(cacheKey))
|
|
18516
18808
|
return cache.get(cacheKey);
|
|
18517
18809
|
const list = byKind.get(kind.toLowerCase());
|
|
@@ -18519,7 +18811,9 @@ async function buildKindResolver(metadataReader) {
|
|
|
18519
18811
|
cache.set(cacheKey, undefined);
|
|
18520
18812
|
return;
|
|
18521
18813
|
}
|
|
18522
|
-
const
|
|
18814
|
+
const subtypes = list.flatMap((r) => r.type ? [r.type] : []);
|
|
18815
|
+
const matched = type === undefined ? undefined : findSubtypeEntry(list, type);
|
|
18816
|
+
const entry = matched ?? list[0];
|
|
18523
18817
|
const version = entry.versions?.[0];
|
|
18524
18818
|
const requiredDefaults = [];
|
|
18525
18819
|
for (const prop of version?.spec ?? []) {
|
|
@@ -18538,16 +18832,35 @@ async function buildKindResolver(metadataReader) {
|
|
|
18538
18832
|
}
|
|
18539
18833
|
}
|
|
18540
18834
|
}
|
|
18835
|
+
const takesFreeFormType = type !== undefined && type.trim() !== "" && subtypes.length === 0 && TYPE_IS_IDENTITY_REPLACE_OPTIONS.has(String(version?.replaceOption));
|
|
18541
18836
|
const resolved = {
|
|
18542
18837
|
type: entry.type,
|
|
18543
18838
|
virtualizable: version?.supportsInLineCreation ?? false,
|
|
18544
18839
|
requiredDefaults,
|
|
18545
|
-
specProperties
|
|
18840
|
+
specProperties,
|
|
18841
|
+
subtypes,
|
|
18842
|
+
typeMatched: type === undefined || matched !== undefined || takesFreeFormType
|
|
18546
18843
|
};
|
|
18547
18844
|
cache.set(cacheKey, resolved);
|
|
18548
18845
|
return resolved;
|
|
18549
18846
|
};
|
|
18550
18847
|
}
|
|
18848
|
+
function formatResourceSubtypes(subtypes) {
|
|
18849
|
+
return subtypes.map((subtype) => {
|
|
18850
|
+
const alias = mapSolutionToResourceSubtype(subtype);
|
|
18851
|
+
return alias && alias.toLowerCase() !== subtype.toLowerCase() ? `${subtype} (${alias})` : subtype;
|
|
18852
|
+
}).join(", ");
|
|
18853
|
+
}
|
|
18854
|
+
function sameResourceSubtype(a, b) {
|
|
18855
|
+
if (a === undefined || b === undefined)
|
|
18856
|
+
return false;
|
|
18857
|
+
if (a.toLowerCase() === b.toLowerCase())
|
|
18858
|
+
return true;
|
|
18859
|
+
return mapSolutionToResourceSubtype(a)?.toLowerCase() === mapSolutionToResourceSubtype(b)?.toLowerCase();
|
|
18860
|
+
}
|
|
18861
|
+
function findSubtypeEntry(list, type) {
|
|
18862
|
+
return list.find((r) => !!r.type && sameResourceSubtype(r.type, type));
|
|
18863
|
+
}
|
|
18551
18864
|
function resolveBindingResourceIdentity(binding) {
|
|
18552
18865
|
switch (binding.resourceType) {
|
|
18553
18866
|
case models_BindingsResourceType.TimeTrigger:
|
|
@@ -18860,14 +19173,18 @@ async function findResourceByKeyInRcs(builder, kind, expectedKey, folderPath, pr
|
|
|
18860
19173
|
return;
|
|
18861
19174
|
}
|
|
18862
19175
|
async function searchRcsResources(builder, kind, name) {
|
|
19176
|
+
const [searchError, matches] = await catchError(searchRcsResourcesStrict(builder, kind, name));
|
|
19177
|
+
if (searchError) {
|
|
19178
|
+
logger.warn(`Failed to search ${kind} resources in RCS: ${searchError.message}`);
|
|
19179
|
+
return [];
|
|
19180
|
+
}
|
|
19181
|
+
return matches;
|
|
19182
|
+
}
|
|
19183
|
+
async function searchRcsResourcesStrict(builder, kind, name) {
|
|
18863
19184
|
let pageCursor;
|
|
18864
19185
|
const allMatches = [];
|
|
18865
19186
|
do {
|
|
18866
|
-
const
|
|
18867
|
-
if (searchError) {
|
|
18868
|
-
logger.warn(`Failed to search ${kind} resources in RCS: ${searchError.message}`);
|
|
18869
|
-
return [];
|
|
18870
|
-
}
|
|
19187
|
+
const result = await builder.searchResourcesAsync(kind, undefined, name, pageCursor, 50, undefined, false);
|
|
18871
19188
|
for (const folderResources of result.availableResources) {
|
|
18872
19189
|
const matches = folderResources.resources.filter((r) => r.name.toLowerCase() === name.toLowerCase());
|
|
18873
19190
|
for (const match of matches) {
|
|
@@ -18921,7 +19238,13 @@ async function resolveResourceKindMetadata(services2, kind, type) {
|
|
|
18921
19238
|
}
|
|
18922
19239
|
async function createLocalResource(params) {
|
|
18923
19240
|
const { builder, services: services2, kind, type, name } = params;
|
|
19241
|
+
if (type !== undefined && type.trim() === "") {
|
|
19242
|
+
throw new Error(`Type for kind ${kind} is empty.`);
|
|
19243
|
+
}
|
|
18924
19244
|
const metadata = await resolveResourceKindMetadata(services2, kind, type);
|
|
19245
|
+
if (type !== undefined && metadata && !metadata.typeMatched) {
|
|
19246
|
+
throw new Error(metadata.subtypes.length > 0 ? `Unknown type "${type}" for kind ${kind}. Use one of: ${formatResourceSubtypes(metadata.subtypes)}` : `Kind ${kind} has no subtypes, so type "${type}" does not apply.`);
|
|
19247
|
+
}
|
|
18925
19248
|
const minted = await mintVirtualResource(builder, kind, metadata?.type ?? type, name, metadata);
|
|
18926
19249
|
if (!minted?.resource)
|
|
18927
19250
|
return;
|
|
@@ -19346,21 +19669,27 @@ function sortKeysDeep(value) {
|
|
|
19346
19669
|
}
|
|
19347
19670
|
export {
|
|
19348
19671
|
EntryPointSpecEnhancer,
|
|
19672
|
+
MAX_RESOURCE_NAME_LENGTH,
|
|
19349
19673
|
ProjectManifestError,
|
|
19350
19674
|
addProjectArtifactsToSolutionAsync,
|
|
19351
19675
|
applyEntryPointEnhancementAsync,
|
|
19352
19676
|
assertSolutionManifest,
|
|
19677
|
+
assertValidResourceName,
|
|
19353
19678
|
computeEntryPointSpec,
|
|
19354
19679
|
createLocalResource,
|
|
19355
19680
|
createProjectInSolutionBuilder,
|
|
19356
19681
|
createResourceBuilderServices,
|
|
19357
19682
|
createResourceKindMetadataResolver,
|
|
19683
|
+
exportResourceDefinitionAsync,
|
|
19684
|
+
findCatalogEntityAsync,
|
|
19358
19685
|
findMatchingLocalResource,
|
|
19359
19686
|
findMatchingMemberResource,
|
|
19360
19687
|
findMemberCloneResources,
|
|
19361
19688
|
findProjectFile,
|
|
19362
19689
|
findResourceByKeyInRcs,
|
|
19363
19690
|
findResourceInRcs,
|
|
19691
|
+
formatResourceSubtypes,
|
|
19692
|
+
getRemoteResourceClients,
|
|
19364
19693
|
hasAnyTemplateRow,
|
|
19365
19694
|
hasBareTemplateRow,
|
|
19366
19695
|
isMissingProjectTypeError,
|
|
@@ -19371,6 +19700,8 @@ export {
|
|
|
19371
19700
|
readProjectFile,
|
|
19372
19701
|
readSolutionFile,
|
|
19373
19702
|
readSolutionManifest,
|
|
19703
|
+
readSpecEntryPoints,
|
|
19704
|
+
readSpecProperty,
|
|
19374
19705
|
readUipxProjects,
|
|
19375
19706
|
resolveProjectDirFromManifest,
|
|
19376
19707
|
resolveResourceKindMetadata,
|
|
@@ -19378,12 +19709,17 @@ export {
|
|
|
19378
19709
|
resourceRefreshAsync,
|
|
19379
19710
|
resourceRemoteSyncAsync,
|
|
19380
19711
|
restoreSolutionFile,
|
|
19712
|
+
sameResourceSubtype,
|
|
19381
19713
|
saveCasingNormalized,
|
|
19382
19714
|
searchRcsResources,
|
|
19715
|
+
searchRcsResourcesStrict,
|
|
19383
19716
|
syncAndLog,
|
|
19384
19717
|
syncResourcesFromBindings,
|
|
19718
|
+
toCatalogReference,
|
|
19719
|
+
toResourceReference,
|
|
19385
19720
|
uniqueNameForResource,
|
|
19721
|
+
validateResourceName,
|
|
19386
19722
|
writeSolutionFile
|
|
19387
19723
|
};
|
|
19388
19724
|
|
|
19389
|
-
//# debugId=
|
|
19725
|
+
//# debugId=67B9891A0091029064756E2164756E21
|