@carthooks/arcubase-cli 0.1.3 → 0.1.4
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/bundle/arcubase-admin.mjs +366 -41
- package/bundle/arcubase.mjs +366 -41
- package/dist/bin/arcubase-admin.js +0 -0
- package/dist/bin/arcubase.js +0 -0
- package/dist/runtime/errors.d.ts +1 -0
- package/dist/runtime/errors.d.ts.map +1 -1
- package/dist/runtime/execute.d.ts.map +1 -1
- package/dist/runtime/execute.js +209 -6
- package/dist/runtime/upload.d.ts +13 -0
- package/dist/runtime/upload.d.ts.map +1 -0
- package/dist/runtime/upload.js +148 -0
- package/dist/runtime/zod_registry.d.ts.map +1 -1
- package/dist/runtime/zod_registry.js +27 -24
- package/dist/tests/execute_validation.test.js +153 -0
- package/dist/tests/help.test.js +18 -2
- package/dist/tests/upload.test.d.ts +2 -0
- package/dist/tests/upload.test.d.ts.map +1 -0
- package/dist/tests/upload.test.js +107 -0
- package/package.json +1 -1
- package/sdk-dist/docs/runtime-reference/README.md +11 -1
- package/sdk-dist/docs/runtime-reference/entity-schema/file.md +9 -0
- package/sdk-dist/docs/runtime-reference/entity-schema/image.md +9 -0
- package/sdk-dist/docs/runtime-reference/examples/oms-01/README.md +19 -0
- package/sdk-dist/docs/runtime-reference/row-crud.md +2 -0
- package/sdk-dist/docs/runtime-reference/table-lifecycle.md +12 -0
- package/sdk-dist/docs/runtime-reference/uploads.md +106 -0
- package/src/runtime/errors.ts +1 -0
- package/src/runtime/execute.ts +248 -6
- package/src/runtime/upload.ts +196 -0
- package/src/runtime/zod_registry.ts +27 -25
- package/src/tests/execute_validation.test.ts +183 -0
- package/src/tests/help.test.ts +23 -2
- package/src/tests/upload.test.ts +133 -0
package/bundle/arcubase.mjs
CHANGED
|
@@ -5276,8 +5276,8 @@ function getErrorMap() {
|
|
|
5276
5276
|
|
|
5277
5277
|
// node_modules/zod/v3/helpers/parseUtil.js
|
|
5278
5278
|
var makeIssue = (params) => {
|
|
5279
|
-
const { data, path, errorMaps, issueData } = params;
|
|
5280
|
-
const fullPath = [...
|
|
5279
|
+
const { data, path: path2, errorMaps, issueData } = params;
|
|
5280
|
+
const fullPath = [...path2, ...issueData.path || []];
|
|
5281
5281
|
const fullIssue = {
|
|
5282
5282
|
...issueData,
|
|
5283
5283
|
path: fullPath
|
|
@@ -5393,11 +5393,11 @@ var errorUtil;
|
|
|
5393
5393
|
|
|
5394
5394
|
// node_modules/zod/v3/types.js
|
|
5395
5395
|
var ParseInputLazyPath = class {
|
|
5396
|
-
constructor(parent, value,
|
|
5396
|
+
constructor(parent, value, path2, key) {
|
|
5397
5397
|
this._cachedPath = [];
|
|
5398
5398
|
this.parent = parent;
|
|
5399
5399
|
this.data = value;
|
|
5400
|
-
this._path =
|
|
5400
|
+
this._path = path2;
|
|
5401
5401
|
this._key = key;
|
|
5402
5402
|
}
|
|
5403
5403
|
get path() {
|
|
@@ -10372,54 +10372,53 @@ var examplesIndexDocHint = {
|
|
|
10372
10372
|
title: "Examples index",
|
|
10373
10373
|
file: "/opt/arcubase-sdk/docs/runtime-reference/examples/README.md"
|
|
10374
10374
|
};
|
|
10375
|
-
var omsExampleDocHint = {
|
|
10376
|
-
title: "OMS example 01",
|
|
10377
|
-
file: "/opt/arcubase-sdk/docs/runtime-reference/examples/oms-01/README.md"
|
|
10378
|
-
};
|
|
10379
10375
|
var docHintIndex = {
|
|
10380
10376
|
AppCreateByTenantsReqVO: [
|
|
10381
10377
|
{ title: "Table lifecycle", file: "/opt/arcubase-sdk/docs/runtime-reference/table-lifecycle.md" },
|
|
10382
|
-
examplesIndexDocHint
|
|
10383
|
-
omsExampleDocHint
|
|
10378
|
+
examplesIndexDocHint
|
|
10384
10379
|
],
|
|
10385
10380
|
AppCreateEntityReqVO: [
|
|
10386
10381
|
{ title: "Table lifecycle", file: "/opt/arcubase-sdk/docs/runtime-reference/table-lifecycle.md" },
|
|
10387
|
-
examplesIndexDocHint
|
|
10388
|
-
omsExampleDocHint
|
|
10382
|
+
examplesIndexDocHint
|
|
10389
10383
|
],
|
|
10390
10384
|
EntitySaveReqVO: [
|
|
10391
10385
|
{ title: "Entity schema", file: "/opt/arcubase-sdk/docs/runtime-reference/entity-schema.md" },
|
|
10392
|
-
|
|
10386
|
+
examplesIndexDocHint
|
|
10393
10387
|
],
|
|
10394
10388
|
EntityQueryReqVO: [
|
|
10395
10389
|
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" },
|
|
10396
10390
|
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" },
|
|
10397
|
-
|
|
10391
|
+
examplesIndexDocHint
|
|
10398
10392
|
],
|
|
10399
10393
|
EntityUpdateReqVO: [
|
|
10400
10394
|
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" },
|
|
10401
|
-
|
|
10395
|
+
{ title: "Uploads", file: "/opt/arcubase-sdk/docs/runtime-reference/uploads.md" },
|
|
10396
|
+
examplesIndexDocHint
|
|
10402
10397
|
],
|
|
10403
10398
|
EntitySelectionActionReqVO: [
|
|
10404
10399
|
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" },
|
|
10405
|
-
|
|
10400
|
+
examplesIndexDocHint
|
|
10406
10401
|
],
|
|
10407
10402
|
InsertReqVO: [
|
|
10408
10403
|
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" },
|
|
10409
|
-
|
|
10404
|
+
{ title: "Uploads", file: "/opt/arcubase-sdk/docs/runtime-reference/uploads.md" },
|
|
10405
|
+
examplesIndexDocHint
|
|
10410
10406
|
],
|
|
10411
10407
|
EntityBulkUpdateReqVO: [
|
|
10412
10408
|
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" },
|
|
10413
|
-
|
|
10409
|
+
examplesIndexDocHint
|
|
10414
10410
|
],
|
|
10415
10411
|
"EntityInvokeBatchOperatorReqVO & InvokeRequestVO": [
|
|
10416
|
-
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" }
|
|
10412
|
+
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" },
|
|
10413
|
+
examplesIndexDocHint
|
|
10417
10414
|
],
|
|
10418
10415
|
"{ policy_id: string selection: any }": [
|
|
10419
|
-
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" }
|
|
10416
|
+
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" },
|
|
10417
|
+
examplesIndexDocHint
|
|
10420
10418
|
],
|
|
10421
10419
|
"{ policy_id: string selection: any tag_names: string[] }": [
|
|
10422
|
-
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" }
|
|
10420
|
+
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" },
|
|
10421
|
+
examplesIndexDocHint
|
|
10423
10422
|
]
|
|
10424
10423
|
};
|
|
10425
10424
|
function getTypeHints(typeName) {
|
|
@@ -10452,52 +10451,56 @@ function getDocHints(typeName) {
|
|
|
10452
10451
|
var commandDocHintIndex = {
|
|
10453
10452
|
"admin.app.createAppByTenants": [
|
|
10454
10453
|
{ title: "Table lifecycle", file: "/opt/arcubase-sdk/docs/runtime-reference/table-lifecycle.md" },
|
|
10455
|
-
examplesIndexDocHint
|
|
10456
|
-
omsExampleDocHint
|
|
10454
|
+
examplesIndexDocHint
|
|
10457
10455
|
],
|
|
10458
10456
|
"admin.app.createEntity": [
|
|
10459
10457
|
{ title: "Table lifecycle", file: "/opt/arcubase-sdk/docs/runtime-reference/table-lifecycle.md" },
|
|
10460
|
-
|
|
10458
|
+
examplesIndexDocHint
|
|
10461
10459
|
],
|
|
10462
10460
|
"admin.entity.adminGetEntityInfo": [
|
|
10463
10461
|
{ title: "Table lifecycle", file: "/opt/arcubase-sdk/docs/runtime-reference/table-lifecycle.md" },
|
|
10464
|
-
|
|
10462
|
+
examplesIndexDocHint
|
|
10465
10463
|
],
|
|
10466
10464
|
"admin.entity.adminSaveEntity": [
|
|
10467
10465
|
{ title: "Entity schema", file: "/opt/arcubase-sdk/docs/runtime-reference/entity-schema.md" },
|
|
10468
|
-
|
|
10466
|
+
{ title: "Table lifecycle", file: "/opt/arcubase-sdk/docs/runtime-reference/table-lifecycle.md" },
|
|
10467
|
+
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" },
|
|
10468
|
+
examplesIndexDocHint
|
|
10469
10469
|
],
|
|
10470
10470
|
"user.workflow.insertEntity": [
|
|
10471
10471
|
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" },
|
|
10472
|
-
|
|
10472
|
+
{ title: "Uploads", file: "/opt/arcubase-sdk/docs/runtime-reference/uploads.md" },
|
|
10473
|
+
examplesIndexDocHint
|
|
10473
10474
|
],
|
|
10474
10475
|
"user.workflow.queryEntity": [
|
|
10475
10476
|
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" },
|
|
10476
|
-
|
|
10477
|
+
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" },
|
|
10478
|
+
examplesIndexDocHint
|
|
10477
10479
|
],
|
|
10478
10480
|
"user.workflow.getEntityRow": [
|
|
10479
10481
|
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" },
|
|
10480
|
-
|
|
10482
|
+
examplesIndexDocHint
|
|
10481
10483
|
],
|
|
10482
10484
|
"user.workflow.updateEntityRow": [
|
|
10483
10485
|
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" },
|
|
10484
|
-
|
|
10486
|
+
{ title: "Uploads", file: "/opt/arcubase-sdk/docs/runtime-reference/uploads.md" },
|
|
10487
|
+
examplesIndexDocHint
|
|
10485
10488
|
],
|
|
10486
10489
|
"user.workflow.queryEntitySelection": [
|
|
10487
10490
|
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" },
|
|
10488
|
-
|
|
10491
|
+
examplesIndexDocHint
|
|
10489
10492
|
],
|
|
10490
10493
|
"user.workflow.deleteEntityRow": [
|
|
10491
10494
|
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" },
|
|
10492
|
-
|
|
10495
|
+
examplesIndexDocHint
|
|
10493
10496
|
],
|
|
10494
10497
|
"user.workflow.restoreEntityRow": [
|
|
10495
10498
|
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" },
|
|
10496
|
-
|
|
10499
|
+
examplesIndexDocHint
|
|
10497
10500
|
],
|
|
10498
10501
|
"user.entity.updateEntityBulk": [
|
|
10499
10502
|
{ title: "Search and bulk actions", file: "/opt/arcubase-sdk/docs/runtime-reference/search-and-bulk-actions.md" },
|
|
10500
|
-
|
|
10503
|
+
examplesIndexDocHint
|
|
10501
10504
|
]
|
|
10502
10505
|
};
|
|
10503
10506
|
function getCommandDocHints(operation) {
|
|
@@ -10506,14 +10509,156 @@ function getCommandDocHints(operation) {
|
|
|
10506
10509
|
return commandDocHintIndex[key] ?? [];
|
|
10507
10510
|
}
|
|
10508
10511
|
|
|
10512
|
+
// src/runtime/upload.ts
|
|
10513
|
+
import fs2 from "fs";
|
|
10514
|
+
import path from "path";
|
|
10515
|
+
function readUploadSource(sourcePath) {
|
|
10516
|
+
const absolutePath = path.resolve(sourcePath);
|
|
10517
|
+
if (!fs2.existsSync(absolutePath)) {
|
|
10518
|
+
throw new CLIError("UPLOAD_SOURCE_NOT_FOUND", `upload source file does not exist: ${sourcePath}`, 2);
|
|
10519
|
+
}
|
|
10520
|
+
const stat = fs2.statSync(absolutePath);
|
|
10521
|
+
if (!stat.isFile()) {
|
|
10522
|
+
throw new CLIError("UPLOAD_SOURCE_INVALID", `upload source path must be a file: ${sourcePath}`, 2);
|
|
10523
|
+
}
|
|
10524
|
+
return {
|
|
10525
|
+
absolutePath,
|
|
10526
|
+
bytes: fs2.readFileSync(absolutePath)
|
|
10527
|
+
};
|
|
10528
|
+
}
|
|
10529
|
+
function parseJSONResponse(raw) {
|
|
10530
|
+
try {
|
|
10531
|
+
return raw ? JSON.parse(raw) : null;
|
|
10532
|
+
} catch {
|
|
10533
|
+
return raw;
|
|
10534
|
+
}
|
|
10535
|
+
}
|
|
10536
|
+
function requireTokenPayload(payload) {
|
|
10537
|
+
if (payload && typeof payload === "object" && payload.error) {
|
|
10538
|
+
const upstreamError = payload.error;
|
|
10539
|
+
const message = typeof upstreamError === "object" && upstreamError && "message" in upstreamError && typeof upstreamError.message === "string" ? upstreamError.message : typeof upstreamError === "string" ? upstreamError : JSON.stringify(upstreamError);
|
|
10540
|
+
throw new CLIError("UPSTREAM_BODY_ERROR", message, 1, {
|
|
10541
|
+
endpoint: "/upload/token",
|
|
10542
|
+
method: "POST",
|
|
10543
|
+
traceId: typeof payload.trace_id === "string" ? payload.trace_id : void 0,
|
|
10544
|
+
upstreamError
|
|
10545
|
+
});
|
|
10546
|
+
}
|
|
10547
|
+
if (!payload?.data || typeof payload.data !== "object") {
|
|
10548
|
+
throw new CLIError("UPLOAD_TOKEN_INVALID", "upload token response did not include data", 1);
|
|
10549
|
+
}
|
|
10550
|
+
return payload.data;
|
|
10551
|
+
}
|
|
10552
|
+
function renderUploadHelp() {
|
|
10553
|
+
return [
|
|
10554
|
+
"arcubase upload <local-file> [flags]",
|
|
10555
|
+
"",
|
|
10556
|
+
"purpose:",
|
|
10557
|
+
" - upload one local file through Arcubase",
|
|
10558
|
+
" - return a field value that can be used directly in file or image row payloads",
|
|
10559
|
+
"",
|
|
10560
|
+
"flags:",
|
|
10561
|
+
" --filename <name> override the uploaded filename stored in Arcubase",
|
|
10562
|
+
" --global request a global upload token instead of a tenant-scoped token",
|
|
10563
|
+
"",
|
|
10564
|
+
"result shape:",
|
|
10565
|
+
" - data is a JSON array",
|
|
10566
|
+
" - use that array directly as the value of a file or image field in insert/update payloads",
|
|
10567
|
+
"",
|
|
10568
|
+
"example:",
|
|
10569
|
+
" arcubase upload ./contract.pdf",
|
|
10570
|
+
" arcubase upload ./photo.jpg --filename lead-photo.jpg",
|
|
10571
|
+
"",
|
|
10572
|
+
"docs:",
|
|
10573
|
+
" - Uploads: /opt/arcubase-sdk/docs/runtime-reference/uploads.md",
|
|
10574
|
+
" - Row CRUD: /opt/arcubase-sdk/docs/runtime-reference/row-crud.md",
|
|
10575
|
+
" - File field: /opt/arcubase-sdk/docs/runtime-reference/entity-schema/file.md",
|
|
10576
|
+
" - Image field: /opt/arcubase-sdk/docs/runtime-reference/entity-schema/image.md"
|
|
10577
|
+
].join("\n");
|
|
10578
|
+
}
|
|
10579
|
+
async function uploadLocalFile(env, sourcePath, options, fetchImpl = fetch) {
|
|
10580
|
+
const { absolutePath, bytes } = readUploadSource(sourcePath);
|
|
10581
|
+
const filename = options.filename && options.filename.trim() || path.basename(absolutePath);
|
|
10582
|
+
const tokenResponse = await fetchImpl(buildURL(env.ARCUBASE_BASE_URL, "/upload/token"), {
|
|
10583
|
+
method: "POST",
|
|
10584
|
+
headers: {
|
|
10585
|
+
...buildRequestHeaders(env),
|
|
10586
|
+
"Content-Type": "application/json"
|
|
10587
|
+
},
|
|
10588
|
+
body: JSON.stringify({
|
|
10589
|
+
global: Boolean(options.global)
|
|
10590
|
+
})
|
|
10591
|
+
});
|
|
10592
|
+
const tokenRaw = await tokenResponse.text();
|
|
10593
|
+
const tokenParsed = parseJSONResponse(tokenRaw);
|
|
10594
|
+
if (!tokenResponse.ok) {
|
|
10595
|
+
throw new CLIError("UPLOAD_TOKEN_REQUEST_FAILED", typeof tokenParsed === "string" ? tokenParsed : JSON.stringify(tokenParsed), 1, {
|
|
10596
|
+
endpoint: "/upload/token",
|
|
10597
|
+
method: "POST"
|
|
10598
|
+
});
|
|
10599
|
+
}
|
|
10600
|
+
const tokenData = requireTokenPayload(tokenParsed);
|
|
10601
|
+
if (tokenData.mode !== "aliyun-oss" && tokenData.mode !== "s3-post-policy") {
|
|
10602
|
+
throw new CLIError("UPLOAD_MODE_UNSUPPORTED", `unsupported upload mode: ${String(tokenData.mode || "")}`, 1);
|
|
10603
|
+
}
|
|
10604
|
+
if (!tokenData.token_data?.dir || !tokenData.token_data.policy || !tokenData.token_data.host) {
|
|
10605
|
+
throw new CLIError("UPLOAD_TOKEN_INVALID", "upload token response is missing required token_data fields", 1);
|
|
10606
|
+
}
|
|
10607
|
+
if (tokenData.id === void 0 || tokenData.id === null || tokenData.id === "") {
|
|
10608
|
+
throw new CLIError("UPLOAD_TOKEN_INVALID", "upload token response is missing id", 1);
|
|
10609
|
+
}
|
|
10610
|
+
const form = new FormData();
|
|
10611
|
+
form.append("key", `${tokenData.token_data.dir}${filename}`);
|
|
10612
|
+
form.append("policy", tokenData.token_data.policy);
|
|
10613
|
+
if (tokenData.mode === "aliyun-oss") {
|
|
10614
|
+
if (!tokenData.token_data.accessid || !tokenData.token_data.signature) {
|
|
10615
|
+
throw new CLIError("UPLOAD_TOKEN_INVALID", "upload token response is missing required token_data fields", 1);
|
|
10616
|
+
}
|
|
10617
|
+
form.append("OSSAccessKeyId", tokenData.token_data.accessid);
|
|
10618
|
+
form.append("success_action_status", "200");
|
|
10619
|
+
form.append("signature", tokenData.token_data.signature);
|
|
10620
|
+
} else {
|
|
10621
|
+
if (!tokenData.token_data.x_amz_algorithm || !tokenData.token_data.x_amz_credential || !tokenData.token_data.x_amz_date || !tokenData.token_data.x_amz_signature) {
|
|
10622
|
+
throw new CLIError("UPLOAD_TOKEN_INVALID", "upload token response is missing required s3 token_data fields", 1);
|
|
10623
|
+
}
|
|
10624
|
+
form.append("x-amz-algorithm", tokenData.token_data.x_amz_algorithm);
|
|
10625
|
+
form.append("x-amz-credential", tokenData.token_data.x_amz_credential);
|
|
10626
|
+
form.append("x-amz-date", tokenData.token_data.x_amz_date);
|
|
10627
|
+
form.append("x-amz-signature", tokenData.token_data.x_amz_signature);
|
|
10628
|
+
}
|
|
10629
|
+
form.append("file", new Blob([new Uint8Array(bytes)]), filename);
|
|
10630
|
+
const uploadResponse = await fetchImpl(tokenData.token_data.host, {
|
|
10631
|
+
method: "POST",
|
|
10632
|
+
body: form
|
|
10633
|
+
});
|
|
10634
|
+
const uploadRaw = await uploadResponse.text();
|
|
10635
|
+
if (!uploadResponse.ok) {
|
|
10636
|
+
throw new CLIError("UPLOAD_TRANSFER_FAILED", uploadRaw || `upload failed with status ${uploadResponse.status}`, 1, {
|
|
10637
|
+
endpoint: tokenData.token_data.host,
|
|
10638
|
+
method: "POST"
|
|
10639
|
+
});
|
|
10640
|
+
}
|
|
10641
|
+
return [
|
|
10642
|
+
{
|
|
10643
|
+
upload_id: tokenData.id,
|
|
10644
|
+
file: filename,
|
|
10645
|
+
file_name: filename,
|
|
10646
|
+
meta: {}
|
|
10647
|
+
}
|
|
10648
|
+
];
|
|
10649
|
+
}
|
|
10650
|
+
|
|
10509
10651
|
// src/runtime/execute.ts
|
|
10510
10652
|
function renderRootHelp(scope) {
|
|
10511
10653
|
const binary = scope === "admin" ? "arcubase-admin" : "arcubase";
|
|
10654
|
+
const items = listModules(scope).map((item) => ` - ${item}`);
|
|
10512
10655
|
return [
|
|
10513
10656
|
`${binary} <module> <command> [flags]`,
|
|
10514
10657
|
"",
|
|
10658
|
+
...scope === "admin" ? ["use arcubase-admin for app, entity shell, and schema management", ""] : ["use arcubase for row CRUD, search, selection actions, and bulk actions", ""],
|
|
10515
10659
|
"modules:",
|
|
10516
|
-
...
|
|
10660
|
+
...items,
|
|
10661
|
+
...scope === "user" ? ["", "special commands:", " - upload <local-file>"] : []
|
|
10517
10662
|
].join("\n");
|
|
10518
10663
|
}
|
|
10519
10664
|
function renderModuleHelp(scope, moduleName) {
|
|
@@ -10525,15 +10670,26 @@ function renderModuleHelp(scope, moduleName) {
|
|
|
10525
10670
|
return [
|
|
10526
10671
|
`${scope === "admin" ? "arcubase-admin" : "arcubase"} ${moduleName} <command> [flags]`,
|
|
10527
10672
|
"",
|
|
10673
|
+
...scope === "admin" ? ["use arcubase-admin for app, entity shell, and schema management", ""] : ["use arcubase for row CRUD, search, selection actions, and bulk actions", ""],
|
|
10528
10674
|
"commands:",
|
|
10529
10675
|
...items.map((item) => ` - ${item.commandPath[1]}`)
|
|
10530
10676
|
].join("\n");
|
|
10531
10677
|
}
|
|
10678
|
+
function buildUnknownCommandDetails(scope, moduleName, commandName) {
|
|
10679
|
+
const suggestions = findCommandSuggestions(moduleName, commandName).map((item) => `${item.binary} ${item.moduleName} ${item.commandName}`);
|
|
10680
|
+
if (scope === "admin" && moduleName === "workflow" && suggestions.some((item) => item.startsWith("arcubase workflow "))) {
|
|
10681
|
+
return {
|
|
10682
|
+
suggestions,
|
|
10683
|
+
reason: `${moduleName} ${commandName} is a row operation, not an arcubase-admin command`,
|
|
10684
|
+
hint: `use: arcubase ${moduleName} ${commandName}`
|
|
10685
|
+
};
|
|
10686
|
+
}
|
|
10687
|
+
return suggestions.length > 0 ? { suggestions } : void 0;
|
|
10688
|
+
}
|
|
10532
10689
|
function renderCommandHelp(scope, moduleName, commandName) {
|
|
10533
10690
|
const command = findCommand(scope, moduleName, commandName);
|
|
10534
10691
|
if (!command) {
|
|
10535
|
-
|
|
10536
|
-
throw new CLIError("UNKNOWN_COMMAND", `unknown command: ${moduleName} ${commandName}`, 2, suggestions.length > 0 ? { suggestions } : void 0);
|
|
10692
|
+
throw new CLIError("UNKNOWN_COMMAND", `unknown command: ${moduleName} ${commandName}`, 2, buildUnknownCommandDetails(scope, moduleName, commandName));
|
|
10537
10693
|
}
|
|
10538
10694
|
const docHints = [
|
|
10539
10695
|
...getCommandDocHints(`${scope}.${command.module}.${command.functionName}`),
|
|
@@ -10547,6 +10703,12 @@ function renderCommandHelp(scope, moduleName, commandName) {
|
|
|
10547
10703
|
"query flags: --query-file",
|
|
10548
10704
|
command.endpointParams.length ? `path flags: ${command.endpointParams.map((item) => `--${item.replace(/_/g, "-")}`).join(", ")}` : "path flags: none",
|
|
10549
10705
|
command.scalarParams.length ? `scalar flags: ${command.scalarParams.map((item) => `--${item.name.replace(/([A-Z])/g, "-$1").toLowerCase()}`).join(", ")}` : "scalar flags: none",
|
|
10706
|
+
...scope === "admin" && moduleName === "entity" && commandName === "admin-save-entity" ? [
|
|
10707
|
+
"next step:",
|
|
10708
|
+
" - switch to arcubase for row operations",
|
|
10709
|
+
" - row insert: arcubase workflow insert-entity --app-id <app_id> --entity-id <entity_id> --body-file insert.json",
|
|
10710
|
+
" - row query: arcubase workflow query-entity --app-id <app_id> --entity-id <entity_id> --body-file query.json"
|
|
10711
|
+
] : [],
|
|
10550
10712
|
...docHints.length > 0 ? ["docs:", ...docHints.map((item) => ` - ${item.title}: ${item.file}`)] : []
|
|
10551
10713
|
].join("\n");
|
|
10552
10714
|
}
|
|
@@ -10594,13 +10756,139 @@ function buildScalarQuery(command, flags) {
|
|
|
10594
10756
|
function isRecord2(value) {
|
|
10595
10757
|
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
10596
10758
|
}
|
|
10597
|
-
function
|
|
10759
|
+
function extractEntityFields(payload) {
|
|
10760
|
+
const candidate = isRecord2(payload) && isRecord2(payload.data) ? payload.data : payload;
|
|
10761
|
+
if (!isRecord2(candidate) || !Array.isArray(candidate.fields)) {
|
|
10762
|
+
return [];
|
|
10763
|
+
}
|
|
10764
|
+
return candidate.fields.filter((item) => isRecord2(item)).filter((item) => typeof item.id === "number" && typeof item.type === "string").map((item) => ({
|
|
10765
|
+
id: item.id,
|
|
10766
|
+
type: item.type,
|
|
10767
|
+
label: typeof item.label === "string" ? item.label : void 0
|
|
10768
|
+
}));
|
|
10769
|
+
}
|
|
10770
|
+
async function fetchEntityFields(runtimeEnv, appId, entityId, fetchImpl) {
|
|
10771
|
+
const response = await fetchImpl(buildURL(runtimeEnv.ARCUBASE_BASE_URL, `/entity/${encodeURIComponent(appId)}/${encodeURIComponent(entityId)}`), {
|
|
10772
|
+
method: "GET",
|
|
10773
|
+
headers: buildRequestHeaders(runtimeEnv)
|
|
10774
|
+
});
|
|
10775
|
+
const raw = await response.text();
|
|
10776
|
+
let parsedResponse = raw;
|
|
10777
|
+
try {
|
|
10778
|
+
parsedResponse = raw ? JSON.parse(raw) : null;
|
|
10779
|
+
} catch {
|
|
10780
|
+
parsedResponse = raw;
|
|
10781
|
+
}
|
|
10782
|
+
if (!response.ok) {
|
|
10783
|
+
throw new CLIError("UPSTREAM_REQUEST_FAILED", typeof parsedResponse === "string" ? parsedResponse : JSON.stringify(parsedResponse), 1);
|
|
10784
|
+
}
|
|
10785
|
+
if (isRecord2(parsedResponse) && parsedResponse.error) {
|
|
10786
|
+
const upstreamError = parsedResponse.error;
|
|
10787
|
+
const upstreamMessage = isRecord2(upstreamError) && typeof upstreamError.message === "string" ? upstreamError.message : typeof upstreamError === "string" ? upstreamError : JSON.stringify(upstreamError);
|
|
10788
|
+
throw new CLIError("UPSTREAM_BODY_ERROR", upstreamMessage, 1, {
|
|
10789
|
+
endpoint: `/entity/${appId}/${entityId}`,
|
|
10790
|
+
method: "GET",
|
|
10791
|
+
upstreamError
|
|
10792
|
+
});
|
|
10793
|
+
}
|
|
10794
|
+
const fields = extractEntityFields(parsedResponse);
|
|
10795
|
+
return new Map(fields.map((field) => [field.id, field]));
|
|
10796
|
+
}
|
|
10797
|
+
function looksLikeLocalFilePath(value) {
|
|
10798
|
+
return value.startsWith("./") || value.startsWith("../") || value.startsWith("/") || value.startsWith("~/") || /\.(pdf|png|jpe?g|gif|webp|bmp|svg|heic|txt|csv|xlsx?|docx?|pptx?|zip)$/i.test(value);
|
|
10799
|
+
}
|
|
10800
|
+
function isValidUploadEntry(value) {
|
|
10801
|
+
if (!isRecord2(value)) {
|
|
10802
|
+
return false;
|
|
10803
|
+
}
|
|
10804
|
+
const hasUploadId = typeof value.upload_id === "number" || typeof value.upload_id === "string";
|
|
10805
|
+
const hasAssetsId = typeof value.assets_id === "number" || typeof value.assets_id === "string";
|
|
10806
|
+
return (hasUploadId || hasAssetsId) && typeof value.file === "string" && typeof value.file_name === "string";
|
|
10807
|
+
}
|
|
10808
|
+
async function validateFileFieldPayloads(scope, command, runtimeEnv, flags, body, fetchImpl) {
|
|
10809
|
+
if (!isRecord2(body)) {
|
|
10810
|
+
return;
|
|
10811
|
+
}
|
|
10812
|
+
const container = command.functionName === "updateEntityRow" ? body.data : body.fields;
|
|
10813
|
+
if (!isRecord2(container)) {
|
|
10814
|
+
return;
|
|
10815
|
+
}
|
|
10816
|
+
const appId = flagValue(flags, "app-id");
|
|
10817
|
+
const entityId = flagValue(flags, "entity-id");
|
|
10818
|
+
if (!appId || !entityId) {
|
|
10819
|
+
return;
|
|
10820
|
+
}
|
|
10821
|
+
const fieldsById = await fetchEntityFields(runtimeEnv, appId, entityId, fetchImpl);
|
|
10822
|
+
for (const [fieldIdText, value] of Object.entries(container)) {
|
|
10823
|
+
if (!/^\d+$/.test(fieldIdText)) {
|
|
10824
|
+
continue;
|
|
10825
|
+
}
|
|
10826
|
+
const fieldId = Number(fieldIdText);
|
|
10827
|
+
const field = fieldsById.get(fieldId);
|
|
10828
|
+
if (!field || field.type !== "file" && field.type !== "image") {
|
|
10829
|
+
continue;
|
|
10830
|
+
}
|
|
10831
|
+
const fieldPath = command.functionName === "updateEntityRow" ? `body.data.${fieldId}` : `body.fields.${fieldId}`;
|
|
10832
|
+
const fieldName = field.label ? `${field.label} (${field.type})` : `${field.type} field ${fieldId}`;
|
|
10833
|
+
if (typeof value === "string") {
|
|
10834
|
+
const guidance = looksLikeLocalFilePath(value) ? `do not put a local file path directly into ${fieldName}; run "arcubase upload ${value}" first and use the returned data array as the field value` : `${fieldName} must be an array returned by "arcubase upload <local-file>", not a string`;
|
|
10835
|
+
throw new CLIError("BODY_VALIDATION_FAILED", guidance, 2, {
|
|
10836
|
+
operation: `${scope}.${command.module}.${command.functionName}`,
|
|
10837
|
+
requestType: command.requestType ?? void 0,
|
|
10838
|
+
issues: [{ path: fieldPath, message: guidance }],
|
|
10839
|
+
docHints: [
|
|
10840
|
+
{ title: "Uploads", file: "/opt/arcubase-sdk/docs/runtime-reference/uploads.md" },
|
|
10841
|
+
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" }
|
|
10842
|
+
]
|
|
10843
|
+
});
|
|
10844
|
+
}
|
|
10845
|
+
if (isRecord2(value)) {
|
|
10846
|
+
const guidance = `${fieldName} must be an array. Run "arcubase upload <local-file>" and use the returned data array directly as the field value`;
|
|
10847
|
+
throw new CLIError("BODY_VALIDATION_FAILED", guidance, 2, {
|
|
10848
|
+
operation: `${scope}.${command.module}.${command.functionName}`,
|
|
10849
|
+
requestType: command.requestType ?? void 0,
|
|
10850
|
+
issues: [{ path: fieldPath, message: guidance }],
|
|
10851
|
+
docHints: [
|
|
10852
|
+
{ title: "Uploads", file: "/opt/arcubase-sdk/docs/runtime-reference/uploads.md" },
|
|
10853
|
+
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" }
|
|
10854
|
+
]
|
|
10855
|
+
});
|
|
10856
|
+
}
|
|
10857
|
+
if (!Array.isArray(value)) {
|
|
10858
|
+
const guidance = `${fieldName} must be an array returned by "arcubase upload <local-file>"`;
|
|
10859
|
+
throw new CLIError("BODY_VALIDATION_FAILED", guidance, 2, {
|
|
10860
|
+
operation: `${scope}.${command.module}.${command.functionName}`,
|
|
10861
|
+
requestType: command.requestType ?? void 0,
|
|
10862
|
+
issues: [{ path: fieldPath, message: guidance }],
|
|
10863
|
+
docHints: [
|
|
10864
|
+
{ title: "Uploads", file: "/opt/arcubase-sdk/docs/runtime-reference/uploads.md" },
|
|
10865
|
+
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" }
|
|
10866
|
+
]
|
|
10867
|
+
});
|
|
10868
|
+
}
|
|
10869
|
+
for (const [index, item] of value.entries()) {
|
|
10870
|
+
if (!isValidUploadEntry(item)) {
|
|
10871
|
+
const guidance = `${fieldName} entries must include upload_id or assets_id plus file and file_name. Use "arcubase upload <local-file>" and copy the returned array item as-is`;
|
|
10872
|
+
throw new CLIError("BODY_VALIDATION_FAILED", guidance, 2, {
|
|
10873
|
+
operation: `${scope}.${command.module}.${command.functionName}`,
|
|
10874
|
+
requestType: command.requestType ?? void 0,
|
|
10875
|
+
issues: [{ path: `${fieldPath}.${index}`, message: guidance }],
|
|
10876
|
+
docHints: [
|
|
10877
|
+
{ title: "Uploads", file: "/opt/arcubase-sdk/docs/runtime-reference/uploads.md" },
|
|
10878
|
+
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" }
|
|
10879
|
+
]
|
|
10880
|
+
});
|
|
10881
|
+
}
|
|
10882
|
+
}
|
|
10883
|
+
}
|
|
10884
|
+
}
|
|
10885
|
+
function throwBodyValidationFailure(message, requestType, path2, scope, command) {
|
|
10598
10886
|
throw new CLIError("BODY_VALIDATION_FAILED", message, 2, {
|
|
10599
10887
|
operation: `${scope}.${command.module}.${command.functionName}`,
|
|
10600
10888
|
requestType,
|
|
10601
10889
|
issues: [
|
|
10602
10890
|
{
|
|
10603
|
-
path,
|
|
10891
|
+
path: path2,
|
|
10604
10892
|
message
|
|
10605
10893
|
}
|
|
10606
10894
|
],
|
|
@@ -10655,6 +10943,31 @@ function validateActionSpecificBody(scope, command, flags, body) {
|
|
|
10655
10943
|
}
|
|
10656
10944
|
async function executeCLI(scope, argv, env, fetchImpl = fetch) {
|
|
10657
10945
|
const parsed = parseCLIArgs(argv);
|
|
10946
|
+
if (scope === "user" && parsed.commandTokens[0] === "upload") {
|
|
10947
|
+
if (hasFlag(parsed.flags, "help") || parsed.commandTokens.length === 1) {
|
|
10948
|
+
return { kind: "help", text: renderUploadHelp() };
|
|
10949
|
+
}
|
|
10950
|
+
const sourcePath = parsed.commandTokens[1];
|
|
10951
|
+
if (!sourcePath) {
|
|
10952
|
+
throw new CLIError("UPLOAD_SOURCE_REQUIRED", "upload requires a local file path", 2);
|
|
10953
|
+
}
|
|
10954
|
+
const runtimeEnv2 = env ?? loadRuntimeEnv(scope);
|
|
10955
|
+
const data = await uploadLocalFile(
|
|
10956
|
+
runtimeEnv2,
|
|
10957
|
+
sourcePath,
|
|
10958
|
+
{
|
|
10959
|
+
filename: flagValue(parsed.flags, "filename"),
|
|
10960
|
+
global: hasFlag(parsed.flags, "global")
|
|
10961
|
+
},
|
|
10962
|
+
fetchImpl
|
|
10963
|
+
);
|
|
10964
|
+
return {
|
|
10965
|
+
kind: "result",
|
|
10966
|
+
commandPath: ["upload", sourcePath],
|
|
10967
|
+
status: 200,
|
|
10968
|
+
data
|
|
10969
|
+
};
|
|
10970
|
+
}
|
|
10658
10971
|
if (parsed.commandTokens.length === 0) {
|
|
10659
10972
|
return { kind: "help", text: renderRootHelp(scope) };
|
|
10660
10973
|
}
|
|
@@ -10671,7 +10984,7 @@ async function executeCLI(scope, argv, env, fetchImpl = fetch) {
|
|
|
10671
10984
|
const runtimeEnv = env ?? loadRuntimeEnv(scope);
|
|
10672
10985
|
const command = findCommand(scope, moduleName, commandName);
|
|
10673
10986
|
if (!command) {
|
|
10674
|
-
throw new CLIError("UNKNOWN_COMMAND", `unknown command: ${moduleName} ${commandName}`, 2);
|
|
10987
|
+
throw new CLIError("UNKNOWN_COMMAND", `unknown command: ${moduleName} ${commandName}`, 2, buildUnknownCommandDetails(scope, moduleName, commandName));
|
|
10675
10988
|
}
|
|
10676
10989
|
const endpoint = normalizeExternalEndpoint(resolveEndpoint(command.endpoint, parsed.flags));
|
|
10677
10990
|
const scalarQuery = buildScalarQuery(command, parsed.flags);
|
|
@@ -10718,6 +11031,9 @@ async function executeCLI(scope, argv, env, fetchImpl = fetch) {
|
|
|
10718
11031
|
}
|
|
10719
11032
|
}
|
|
10720
11033
|
}
|
|
11034
|
+
if (scope === "user" && (command.functionName === "insertEntity" || command.functionName === "updateEntityRow")) {
|
|
11035
|
+
await validateFileFieldPayloads(scope, command, runtimeEnv, parsed.flags, validatedBody, fetchImpl);
|
|
11036
|
+
}
|
|
10721
11037
|
const response = await fetchImpl(buildURL(runtimeEnv.ARCUBASE_BASE_URL, endpoint, Object.keys(query).length > 0 ? query : void 0), {
|
|
10722
11038
|
method: command.method,
|
|
10723
11039
|
headers: {
|
|
@@ -10739,11 +11055,20 @@ async function executeCLI(scope, argv, env, fetchImpl = fetch) {
|
|
|
10739
11055
|
const upstreamError = parsedResponse.error;
|
|
10740
11056
|
const upstreamMessage = typeof upstreamError === "object" && upstreamError && "message" in upstreamError && typeof upstreamError.message === "string" ? upstreamError.message : typeof upstreamError === "string" ? upstreamError : JSON.stringify(upstreamError);
|
|
10741
11057
|
const traceId = typeof parsedResponse.trace_id === "string" ? parsedResponse.trace_id : typeof parsedResponse.request_id === "string" ? parsedResponse.request_id : void 0;
|
|
11058
|
+
const uploadBindFailure = upstreamMessage.includes("failed to bind upload to assets");
|
|
10742
11059
|
throw new CLIError("UPSTREAM_BODY_ERROR", upstreamMessage, 1, {
|
|
10743
11060
|
endpoint,
|
|
10744
11061
|
method: command.method,
|
|
10745
11062
|
traceId,
|
|
10746
|
-
upstreamError
|
|
11063
|
+
upstreamError,
|
|
11064
|
+
...uploadBindFailure ? {
|
|
11065
|
+
reason: "the row payload used a file/image upload entry, but Arcubase could not bind that upload into an asset record",
|
|
11066
|
+
hint: "verify the upload storage host is reachable from the Arcubase server, then rerun arcubase upload and retry the row insert/update",
|
|
11067
|
+
docHints: [
|
|
11068
|
+
{ title: "Uploads", file: "/opt/arcubase-sdk/docs/runtime-reference/uploads.md" },
|
|
11069
|
+
{ title: "Row CRUD", file: "/opt/arcubase-sdk/docs/runtime-reference/row-crud.md" }
|
|
11070
|
+
]
|
|
11071
|
+
} : {}
|
|
10747
11072
|
});
|
|
10748
11073
|
}
|
|
10749
11074
|
return {
|
|
File without changes
|
package/dist/bin/arcubase.js
CHANGED
|
File without changes
|
package/dist/runtime/errors.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB,CAAA;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAA;gBAEtB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI,EAAE,OAAO,CAAC,EAAE,eAAe;IAQlF,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CASlC"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB,CAAA;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAA;gBAEtB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI,EAAE,OAAO,CAAC,EAAE,eAAe;IAQlF,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CASlC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/runtime/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA;AAG1D,OAAO,EAAwE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/runtime/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA;AAG1D,OAAO,EAAwE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAK/H,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,CAAA;AAYD,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAa1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAehF;AAcD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA6BtG;AA8RD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,uBAAuB,CActH;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,SAAS,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CA4JrI"}
|