@xano/sdk 1.0.0
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/CHANGELOG.md +788 -0
- package/LICENSE +21 -0
- package/README.md +541 -0
- package/dist/.build-fingerprint +1 -0
- package/dist/agent-file-refresh-ZEMK33AX.js +38 -0
- package/dist/answer-shape-K67TAAPY.js +33 -0
- package/dist/backend-dir-2U53CIAL.js +39 -0
- package/dist/backend-slot-7QXW2QYC.js +28 -0
- package/dist/bin.d.ts +1 -0
- package/dist/bin.js +255 -0
- package/dist/branch-NCRNWQBQ.js +61 -0
- package/dist/branch-commands-ACIRCEQJ.js +79 -0
- package/dist/bundle.d.ts +223 -0
- package/dist/bundle.js +153 -0
- package/dist/capture-WAXPD7DR.js +41 -0
- package/dist/chunk-27GWNP2I.js +23 -0
- package/dist/chunk-2CMJZDCL.js +177 -0
- package/dist/chunk-2EZ3ZJZZ.js +302 -0
- package/dist/chunk-2GNFDZA2.js +390 -0
- package/dist/chunk-2MNLRIOX.js +11 -0
- package/dist/chunk-2TFRR6JV.js +104 -0
- package/dist/chunk-2ZUEE4EK.js +408 -0
- package/dist/chunk-36JUQZVQ.js +22 -0
- package/dist/chunk-3DRXWLJ5.js +83 -0
- package/dist/chunk-3JDU4VRL.js +137 -0
- package/dist/chunk-3KZCLN4Z.js +241 -0
- package/dist/chunk-3LDULPRE.js +168 -0
- package/dist/chunk-3M4LFYNQ.js +111 -0
- package/dist/chunk-3XI5CTUE.js +22 -0
- package/dist/chunk-3YW23UFH.js +50 -0
- package/dist/chunk-45UIT5T2.js +862 -0
- package/dist/chunk-4BW2SG2N.js +46 -0
- package/dist/chunk-4KHEMC32.js +79 -0
- package/dist/chunk-4POWHT2K.js +321 -0
- package/dist/chunk-4Q2GN7NW.js +192 -0
- package/dist/chunk-5A2PLKZB.js +70 -0
- package/dist/chunk-5FBYXK5P.js +159 -0
- package/dist/chunk-5HVXPTU4.js +323 -0
- package/dist/chunk-5QU2P5CA.js +304 -0
- package/dist/chunk-5V5XU32D.js +191 -0
- package/dist/chunk-5ZSO4T2G.js +10 -0
- package/dist/chunk-622HUCZT.js +10 -0
- package/dist/chunk-65HWOMGV.js +177 -0
- package/dist/chunk-6ELFRN3P.js +365 -0
- package/dist/chunk-6HO3NCSJ.js +1055 -0
- package/dist/chunk-6IUMKYWI.js +457 -0
- package/dist/chunk-6KEB3C3U.js +65 -0
- package/dist/chunk-6MR5TI5V.js +987 -0
- package/dist/chunk-6NNTNXN7.js +157 -0
- package/dist/chunk-6PBR37LN.js +97 -0
- package/dist/chunk-6QXLMMT3.js +155 -0
- package/dist/chunk-6ZGJCBZS.js +224 -0
- package/dist/chunk-73IVBKMA.js +250 -0
- package/dist/chunk-7G3CTU7I.js +286 -0
- package/dist/chunk-A3UDOZB6.js +222 -0
- package/dist/chunk-A6E77GDW.js +85 -0
- package/dist/chunk-AHJWCYQO.js +660 -0
- package/dist/chunk-AKNCFVKZ.js +36 -0
- package/dist/chunk-AM4FKL4J.js +237 -0
- package/dist/chunk-AN6BL47T.js +26 -0
- package/dist/chunk-AOSYVMUS.js +147 -0
- package/dist/chunk-APWXY5SL.js +182 -0
- package/dist/chunk-AWEIIR2U.js +218 -0
- package/dist/chunk-AWQ7BQTQ.js +73 -0
- package/dist/chunk-BAUZOWGX.js +393 -0
- package/dist/chunk-BHACRS6R.js +940 -0
- package/dist/chunk-BWPNT55T.js +680 -0
- package/dist/chunk-C6RIMRU4.js +187 -0
- package/dist/chunk-CGVQZXYG.js +263 -0
- package/dist/chunk-CIMQZRRE.js +162 -0
- package/dist/chunk-CJHQKJU4.js +113 -0
- package/dist/chunk-CTMO46PK.js +1897 -0
- package/dist/chunk-D53J55C5.js +106 -0
- package/dist/chunk-D7VGG3WS.js +90 -0
- package/dist/chunk-DAD3ONIS.js +245 -0
- package/dist/chunk-DGWHAVRG.js +162 -0
- package/dist/chunk-DX4QR4B2.js +483 -0
- package/dist/chunk-EHP3WPEG.js +21 -0
- package/dist/chunk-ELP2HMXC.js +432 -0
- package/dist/chunk-ERVIASGL.js +21 -0
- package/dist/chunk-ET4Y4XCB.js +865 -0
- package/dist/chunk-ETO6LGLD.js +4750 -0
- package/dist/chunk-EUUUMY7J.js +24 -0
- package/dist/chunk-FQJ2TTHP.js +218 -0
- package/dist/chunk-FQOF7E2E.js +133 -0
- package/dist/chunk-FWD7AL6N.js +21 -0
- package/dist/chunk-FXFV3KU6.js +138 -0
- package/dist/chunk-FXRQOWTE.js +171 -0
- package/dist/chunk-G554NZNI.js +210 -0
- package/dist/chunk-GSGDWJB5.js +13 -0
- package/dist/chunk-H2V3N23D.js +66 -0
- package/dist/chunk-H5C7MBCR.js +159 -0
- package/dist/chunk-HHN734BU.js +371 -0
- package/dist/chunk-HRVBLCVJ.js +243 -0
- package/dist/chunk-HVRUQXGD.js +1264 -0
- package/dist/chunk-I4F5TCJH.js +130 -0
- package/dist/chunk-IDOTCMDV.js +57 -0
- package/dist/chunk-IGOLHKWF.js +427 -0
- package/dist/chunk-JGE7CAWB.js +148 -0
- package/dist/chunk-JTUKLCXS.js +92 -0
- package/dist/chunk-JZGVVJSI.js +66 -0
- package/dist/chunk-K4WX6UUU.js +923 -0
- package/dist/chunk-K5BBGTYZ.js +217 -0
- package/dist/chunk-K6RXBGUB.js +427 -0
- package/dist/chunk-KTSDSD36.js +165 -0
- package/dist/chunk-L5JYN3NM.js +1038 -0
- package/dist/chunk-LIEOKXKD.js +354 -0
- package/dist/chunk-LLNZGEFK.js +51 -0
- package/dist/chunk-LPECSJ2J.js +55 -0
- package/dist/chunk-LQCMKAJ7.js +413 -0
- package/dist/chunk-LRN4ZJCQ.js +1145 -0
- package/dist/chunk-MJ4ZVHKN.js +17 -0
- package/dist/chunk-MXHSQOC4.js +3061 -0
- package/dist/chunk-N5GKCWE5.js +367 -0
- package/dist/chunk-NA3PXMEF.js +10 -0
- package/dist/chunk-NAQDMEHV.js +76 -0
- package/dist/chunk-NWKXM5RD.js +109 -0
- package/dist/chunk-NZOWWHU5.js +196 -0
- package/dist/chunk-OHX6MIUZ.js +184 -0
- package/dist/chunk-OOXWYAA4.js +15 -0
- package/dist/chunk-OPHB5ORL.js +1990 -0
- package/dist/chunk-OXA6PSZT.js +1725 -0
- package/dist/chunk-P2HAGF6H.js +73 -0
- package/dist/chunk-PTHVMXZI.js +3036 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-Q325JKYB.js +189 -0
- package/dist/chunk-Q7DGTQ5G.js +255 -0
- package/dist/chunk-QCNYHBL7.js +601 -0
- package/dist/chunk-QO6BVGS5.js +145 -0
- package/dist/chunk-QXTKSOFI.js +76 -0
- package/dist/chunk-ROY4YAEQ.js +66 -0
- package/dist/chunk-RTJRZFFY.js +447 -0
- package/dist/chunk-SAVJUS2X.js +128 -0
- package/dist/chunk-SFLHVCKX.js +173 -0
- package/dist/chunk-STSFNCY4.js +127 -0
- package/dist/chunk-SWBF2LTK.js +170 -0
- package/dist/chunk-T5KELPAR.js +109 -0
- package/dist/chunk-TFFGOFVZ.js +1481 -0
- package/dist/chunk-TLHIFK4M.js +256 -0
- package/dist/chunk-TLQE7ZN3.js +156 -0
- package/dist/chunk-TPHWJ7UG.js +1981 -0
- package/dist/chunk-TRJCALW3.js +291 -0
- package/dist/chunk-TTEIYD5P.js +133 -0
- package/dist/chunk-U64O2MXY.js +407 -0
- package/dist/chunk-UCQ2VUTG.js +630 -0
- package/dist/chunk-UTI5G6OJ.js +44 -0
- package/dist/chunk-UVHDMMIP.js +188 -0
- package/dist/chunk-UZ6QQWJT.js +120 -0
- package/dist/chunk-VAX3UZOY.js +686 -0
- package/dist/chunk-W3HBUKFO.js +57 -0
- package/dist/chunk-WKQLGKCL.js +2823 -0
- package/dist/chunk-WQFNASK4.js +560 -0
- package/dist/chunk-WRBKLYSJ.js +224 -0
- package/dist/chunk-WTPZRR4I.js +17 -0
- package/dist/chunk-WZDJ2LLX.js +2385 -0
- package/dist/chunk-X2NL4KUO.js +14 -0
- package/dist/chunk-X4DVXBFY.js +38 -0
- package/dist/chunk-X677DMZM.js +7050 -0
- package/dist/chunk-XBKMWY7F.js +612 -0
- package/dist/chunk-XNCP4KYO.js +78 -0
- package/dist/chunk-XVBGLISP.js +35 -0
- package/dist/chunk-XW6KISBB.js +1192 -0
- package/dist/chunk-YGZHHAAB.js +8156 -0
- package/dist/chunk-YHEFQUQB.js +186 -0
- package/dist/chunk-YLDALTWZ.js +653 -0
- package/dist/chunk-YU4HSQW7.js +229 -0
- package/dist/chunk-ZDPP6RKB.js +27 -0
- package/dist/chunk-ZFDZKNGG.js +194 -0
- package/dist/chunk-ZIY7RNUT.js +49 -0
- package/dist/chunk-ZYJP6BOO.js +30 -0
- package/dist/cli.d.ts +1111 -0
- package/dist/cli.js +165 -0
- package/dist/codegen-command-VR2GWR6C.js +173 -0
- package/dist/codegen.d.ts +115 -0
- package/dist/codegen.js +19 -0
- package/dist/commands-GJMJ4XYZ.js +76 -0
- package/dist/completion-ZQLO6PB6.js +738 -0
- package/dist/config-MBYGCAFK.js +136 -0
- package/dist/deploy-command-JVZPWHMK.js +180 -0
- package/dist/deploy-source-3W45CXMP.js +81 -0
- package/dist/dev-env-sync-HN44K4D5.js +188 -0
- package/dist/diagnostics-UEAAHWVF.js +30 -0
- package/dist/display-name-hint-ABBPVQIR.js +46 -0
- package/dist/emit-CyhBDxli.d.ts +7007 -0
- package/dist/env-example-refresh-ET5HMMDW.js +126 -0
- package/dist/env-pull-command-TNMNB3CV.js +323 -0
- package/dist/env-target-O4HRKTGZ.js +40 -0
- package/dist/env-var-command-ZIRDCAZA.js +427 -0
- package/dist/ephemeral-P7F3PMAD.js +54 -0
- package/dist/ephemeral-command-CLJJKOFT.js +592 -0
- package/dist/ephemeral-state-PYCBSOGX.js +61 -0
- package/dist/file-lock-PT74GWYW.js +10 -0
- package/dist/generate-command-AYEOLA26.js +510 -0
- package/dist/gitignore-3SJ3WNRG.js +51 -0
- package/dist/guards-4EBNCZDC.js +162 -0
- package/dist/hosted-file-PSHJB3HX.js +28 -0
- package/dist/impersonate-command-5JAS3WSV.js +152 -0
- package/dist/import-EQSFU6JC.js +19 -0
- package/dist/index.d.ts +5470 -0
- package/dist/index.js +371 -0
- package/dist/init-command-X2FR4UAK.js +125 -0
- package/dist/init-modules-RY7UHAOL.js +50 -0
- package/dist/init-web-M4YZSZK6.js +42 -0
- package/dist/internal.d.ts +179 -0
- package/dist/internal.js +2634 -0
- package/dist/io-RC56QSN5.js +26 -0
- package/dist/keep-data-merge-7MPLVAVI.js +1119 -0
- package/dist/lambda-config-reconcile-OUZ4OYAB.js +116 -0
- package/dist/landed-753YLJ5H.js +40 -0
- package/dist/landing-record-SU52SKXU.js +61 -0
- package/dist/live-diff-YONW2VI3.js +65 -0
- package/dist/local-engine-choice-CH5X3W7E.js +79 -0
- package/dist/local-engine-command-Z3OL7VOD.js +766 -0
- package/dist/local-engine-config-5U3SC434.js +39 -0
- package/dist/local-engine-deploy-PCQ4SNPB.js +39 -0
- package/dist/local-engine-process-EHTE5LLU.js +63 -0
- package/dist/local-engine-state-A4FTRFAF.js +32 -0
- package/dist/local-engine-update-check-6L645VBL.js +162 -0
- package/dist/lock-MRRHW5GS.js +87 -0
- package/dist/lock-commands-2QG25HL7.js +963 -0
- package/dist/login-command-QPYRWOXZ.js +538 -0
- package/dist/logout-command-WOIQLDP6.js +56 -0
- package/dist/loop-ALIZLOSX.js +191 -0
- package/dist/marketplace-command-K5YL42NO.js +977 -0
- package/dist/marketplace-resolve-LY32JES5.js +40 -0
- package/dist/meta-client-YXGPW53C.js +244 -0
- package/dist/module-manifest-JFGHU2TC.js +38 -0
- package/dist/near-key.d.ts +13 -0
- package/dist/near-key.js +8 -0
- package/dist/node.d.ts +95 -0
- package/dist/node.js +969 -0
- package/dist/operation-outcome-TZSESNC7.js +51 -0
- package/dist/output-target-AL3I44GG.js +47 -0
- package/dist/package-manager-PRAHUSCN.js +34 -0
- package/dist/plan-disclosure-6G4MLZKD.js +114 -0
- package/dist/plugin-contributions-WRNY5ABG.js +28 -0
- package/dist/plugin-prompt-4VA3B4FF.js +20 -0
- package/dist/plugin-questions-JTSYA74Q.js +24 -0
- package/dist/plugin.d.ts +396 -0
- package/dist/plugin.js +1 -0
- package/dist/preflight-command-2T5Z36MI.js +321 -0
- package/dist/profile-command-AH3PIM4X.js +800 -0
- package/dist/profile-pointer-GRWJU3YD.js +31 -0
- package/dist/profile-select-74TRDEPD.js +23 -0
- package/dist/project-dependency-KSH63ODT.js +35 -0
- package/dist/project-sdk-REPPOIBD.js +24 -0
- package/dist/promote-command-PCWT5N6S.js +140 -0
- package/dist/prompt-II3F3LND.js +27 -0
- package/dist/publish-command-TTDUUJI5.js +414 -0
- package/dist/pull-command-VBO7C4S3.js +161 -0
- package/dist/pull-superseded-GJWLG7XO.js +20 -0
- package/dist/release-command-N4ZPKMHR.js +146 -0
- package/dist/release-ns-command-3KFDMZ6G.js +1745 -0
- package/dist/response-HlXahv4K.d.ts +925 -0
- package/dist/retry-command-AS5EVREX.js +34 -0
- package/dist/routes-manifest-SNWUVBT6.js +43 -0
- package/dist/runtime-XETHVF33.js +14 -0
- package/dist/scaffold.d.ts +1911 -0
- package/dist/scaffold.js +107 -0
- package/dist/secrets-file-LVZD6IIM.js +56 -0
- package/dist/secrets-fill-command-TTCPSVXN.js +218 -0
- package/dist/seed-VU7C3QYS.js +46 -0
- package/dist/sent-writes-N7X4OVXT.js +22 -0
- package/dist/source-resolve-S2XA3XZF.js +83 -0
- package/dist/static-host-B2Y6AG3W.js +352 -0
- package/dist/status-command-RUDXTF7I.js +554 -0
- package/dist/store-6VNCD4D7.js +20 -0
- package/dist/store-ARM6VMO5.js +98 -0
- package/dist/store-DuYfzKlW.d.ts +3144 -0
- package/dist/suggest-6FOOYKHG.js +12 -0
- package/dist/sveltekit.d.ts +154 -0
- package/dist/sveltekit.js +109 -0
- package/dist/sync-contributions-UCEROO26.js +415 -0
- package/dist/table-ENAVMITR.js +42 -0
- package/dist/tables-command-GUPXXSB5.js +156 -0
- package/dist/tenant-IIHPOHGP.js +42 -0
- package/dist/tenant-command-D5HGI2X4.js +965 -0
- package/dist/test-command-TIKZMDPZ.js +476 -0
- package/dist/tests-BGGIOK3L.js +26 -0
- package/dist/token-NICJUTMT.js +72 -0
- package/dist/toolchain-hooks-GHKLUJOH.js +96 -0
- package/dist/toolchain-modules-5EAZUONB.js +24 -0
- package/dist/tracked-backend-EIBUMDZA.js +80 -0
- package/dist/update-check-2W2NLDTC.js +136 -0
- package/dist/upgrade-command-QHNFWM7O.js +531 -0
- package/dist/verify-rollout-DRCK5TDD.js +61 -0
- package/dist/whoami-command-STGINTXH.js +51 -0
- package/dist/workspace-2CLHU2LK.js +93 -0
- package/dist/workspace-binding-56PIIPCP.js +54 -0
- package/dist/workspace-command-JEXQETJD.js +535 -0
- package/dist/workspace-env-F2RFMSC5.js +70 -0
- package/dist/workspace-export-OJSH2HIW.js +21 -0
- package/dist/writable-VA7OISSK.js +25 -0
- package/dist/xano-ICFUSPFR.js +42 -0
- package/dist/xanosdk-import-GN42TO2B.js +56 -0
- package/dist/xanosdk-project-S6DXJONQ.js +41 -0
- package/dist/xdo-CxDr2Q1C.d.ts +1371 -0
- package/guides/README.md +33 -0
- package/guides/authoring.md +921 -0
- package/guides/cli.md +401 -0
- package/guides/codegen.md +177 -0
- package/guides/codes.md +404 -0
- package/guides/coverage.md +74 -0
- package/guides/deploying.md +1525 -0
- package/guides/environment.md +400 -0
- package/guides/marketplace.md +415 -0
- package/guides/module-contract.md +558 -0
- package/guides/object-kinds.md +433 -0
- package/guides/project-structure.md +43 -0
- package/guides/scaffold.md +351 -0
- package/guides/typed-frontend.md +242 -0
- package/llms/client.md +63 -0
- package/llms/errors.md +56 -0
- package/llms/fields.md +176 -0
- package/llms/filters.md +183 -0
- package/llms/kinds-agent-mcp.md +30 -0
- package/llms/kinds-core.md +100 -0
- package/llms/kinds-knowledge.md +20 -0
- package/llms/kinds-realtime.md +76 -0
- package/llms/lambda.md +94 -0
- package/llms/legacy.md +44 -0
- package/llms/lock.md +40 -0
- package/llms/object-kinds.md +34 -0
- package/llms/statements-calls.md +62 -0
- package/llms/statements-catalog.md +320 -0
- package/llms/statements-data.md +66 -0
- package/llms/statements-runtime.md +68 -0
- package/llms/tests.md +59 -0
- package/llms/toolchain.md +16 -0
- package/llms/triggers.md +36 -0
- package/llms/values.md +29 -0
- package/llms-full.txt +2085 -0
- package/llms.txt +493 -0
- package/manifest.json +11224 -0
- package/package.json +162 -0
- package/types/lambda-globals.d.ts +129 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import {
|
|
2
|
+
classifyFailure
|
|
3
|
+
} from "./chunk-A6E77GDW.js";
|
|
4
|
+
import {
|
|
5
|
+
describeWrite
|
|
6
|
+
} from "./chunk-4KHEMC32.js";
|
|
7
|
+
import {
|
|
8
|
+
EXIT_OUTCOME_UNKNOWN,
|
|
9
|
+
exitCodeOf,
|
|
10
|
+
explainRunFailure,
|
|
11
|
+
failureError,
|
|
12
|
+
processExitCode,
|
|
13
|
+
registerOperation,
|
|
14
|
+
warn,
|
|
15
|
+
writeJson,
|
|
16
|
+
writeTargetPayload
|
|
17
|
+
} from "./chunk-PTHVMXZI.js";
|
|
18
|
+
|
|
19
|
+
// src/emit/operation-result.ts
|
|
20
|
+
var SERVER_PROCESSING_BOUND_MS = 6e5;
|
|
21
|
+
function rollUp(steps) {
|
|
22
|
+
const ran = steps.filter((s) => s !== "skipped");
|
|
23
|
+
if (ran.length === 0) return "no";
|
|
24
|
+
if (ran.includes("no")) return "no";
|
|
25
|
+
if (ran.includes("unknown")) return "unknown";
|
|
26
|
+
return "yes";
|
|
27
|
+
}
|
|
28
|
+
var OperationBuilder = class {
|
|
29
|
+
operation;
|
|
30
|
+
startedAt;
|
|
31
|
+
destination;
|
|
32
|
+
release;
|
|
33
|
+
branch;
|
|
34
|
+
residue;
|
|
35
|
+
extras;
|
|
36
|
+
order;
|
|
37
|
+
checks;
|
|
38
|
+
state = /* @__PURE__ */ new Map();
|
|
39
|
+
current;
|
|
40
|
+
now;
|
|
41
|
+
/** Attached by {@link runOperation}, so `sending()` reaches the interrupt path. */
|
|
42
|
+
registration;
|
|
43
|
+
constructor(init) {
|
|
44
|
+
this.operation = init.operation;
|
|
45
|
+
this.destination = "instance" in init.destination ? { ...init.destination } : writeTargetPayload(init.destination);
|
|
46
|
+
this.release = { ...init.release };
|
|
47
|
+
this.branch = init.branch;
|
|
48
|
+
this.extras = { ...init.extras ?? {} };
|
|
49
|
+
this.order = [...init.steps];
|
|
50
|
+
this.checks = new Set(init.checks ?? []);
|
|
51
|
+
for (const s of this.order) this.state.set(s, {});
|
|
52
|
+
this.now = init.now ?? Date.now;
|
|
53
|
+
this.startedAt = this.now();
|
|
54
|
+
}
|
|
55
|
+
stepState(step) {
|
|
56
|
+
const st = this.state.get(step);
|
|
57
|
+
if (st === void 0) {
|
|
58
|
+
throw new Error(
|
|
59
|
+
`"${step}" is not a requested step of ${this.operation} (${this.order.join(", ")}).`
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
return st;
|
|
63
|
+
}
|
|
64
|
+
/** The release as the server stored it, once it says. */
|
|
65
|
+
setRelease(release) {
|
|
66
|
+
this.release = { ...release };
|
|
67
|
+
}
|
|
68
|
+
setBranch(branch) {
|
|
69
|
+
this.branch = branch;
|
|
70
|
+
}
|
|
71
|
+
/** Record what a failed write left behind, and the command that removes it. */
|
|
72
|
+
setResidue(residue) {
|
|
73
|
+
this.residue = residue === void 0 ? void 0 : { ...residue };
|
|
74
|
+
}
|
|
75
|
+
/** Set an operation-specific extra. */
|
|
76
|
+
set(key, value) {
|
|
77
|
+
this.extras[key] = value;
|
|
78
|
+
}
|
|
79
|
+
/** Enter a step. A throw from here on is attributed to it. */
|
|
80
|
+
begin(step) {
|
|
81
|
+
this.stepState(step);
|
|
82
|
+
this.current = step;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The current step's write is about to go on the wire. Call immediately
|
|
86
|
+
* BEFORE sending it: from here a failure of this step is classified as a
|
|
87
|
+
* possibly-landed write, and Ctrl-C reports it `unknown` instead of
|
|
88
|
+
* "Cancelled.".
|
|
89
|
+
*/
|
|
90
|
+
sending() {
|
|
91
|
+
if (this.current === void 0)
|
|
92
|
+
throw new Error(
|
|
93
|
+
"sending() called outside a step; call begin(step) first."
|
|
94
|
+
);
|
|
95
|
+
this.stepState(this.current).sentAt = this.now();
|
|
96
|
+
this.registration?.markWriteSent();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Record a step's answer (default `yes`). A step never begun may be recorded
|
|
100
|
+
* directly — `skipped` for one the command had no need to run (a transfer
|
|
101
|
+
* that found its release already at the destination imports nothing).
|
|
102
|
+
*/
|
|
103
|
+
finish(step, completed = "yes") {
|
|
104
|
+
this.stepState(step).completed = completed;
|
|
105
|
+
if (this.current === step) this.current = void 0;
|
|
106
|
+
}
|
|
107
|
+
/** The step entered and not yet finished, if any. */
|
|
108
|
+
get inProgress() {
|
|
109
|
+
return this.current;
|
|
110
|
+
}
|
|
111
|
+
/** Whether the step in progress has sent its write. */
|
|
112
|
+
get inProgressSent() {
|
|
113
|
+
return this.current !== void 0 && this.stepState(this.current).sentAt !== void 0;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The result as it stands.
|
|
117
|
+
*
|
|
118
|
+
* Steps are resolved in this order: a recorded answer wins; the step in
|
|
119
|
+
* progress takes the interrupt's or the throw's outcome (or, at a normal
|
|
120
|
+
* return, `unknown` if its write was sent and `no` if not); a step never
|
|
121
|
+
* reached after one that stopped the run is `skipped`; any other step never
|
|
122
|
+
* reached is `no` — it did not happen, and nothing explains why.
|
|
123
|
+
*/
|
|
124
|
+
snapshot(ctx = {}) {
|
|
125
|
+
let latestUnknownSend;
|
|
126
|
+
let halted;
|
|
127
|
+
const stop = (name, completed) => {
|
|
128
|
+
halted ??= this.checks.has(name) && completed === "unknown" ? "uncarried" : "carried";
|
|
129
|
+
};
|
|
130
|
+
const steps = this.order.map((name) => {
|
|
131
|
+
const st = this.stepState(name);
|
|
132
|
+
let completed;
|
|
133
|
+
if (st.completed !== void 0) {
|
|
134
|
+
completed = st.completed;
|
|
135
|
+
if (completed === "no" || completed === "unknown") stop(name, completed);
|
|
136
|
+
} else if (name === this.current) {
|
|
137
|
+
completed = ctx.interrupted ? "unknown" : ctx.failure ?? (st.sentAt !== void 0 ? "unknown" : "no");
|
|
138
|
+
stop(name, completed);
|
|
139
|
+
} else {
|
|
140
|
+
completed = halted === "carried" ? "skipped" : "no";
|
|
141
|
+
}
|
|
142
|
+
if (completed === "unknown" && !this.checks.has(name)) {
|
|
143
|
+
const at = st.sentAt ?? this.startedAt;
|
|
144
|
+
latestUnknownSend = latestUnknownSend === void 0 ? at : Math.max(latestUnknownSend, at);
|
|
145
|
+
}
|
|
146
|
+
return { name, completed };
|
|
147
|
+
});
|
|
148
|
+
const core = {
|
|
149
|
+
operation: this.operation,
|
|
150
|
+
destination: this.destination,
|
|
151
|
+
release: this.release,
|
|
152
|
+
branch: this.branch,
|
|
153
|
+
// A check that could not run leaves the outcome as it was; see `checks`.
|
|
154
|
+
completed: rollUp(
|
|
155
|
+
steps.map(
|
|
156
|
+
(s) => this.checks.has(s.name) && s.completed === "unknown" ? "skipped" : s.completed
|
|
157
|
+
)
|
|
158
|
+
),
|
|
159
|
+
steps,
|
|
160
|
+
startedAt: new Date(this.startedAt).toISOString()
|
|
161
|
+
};
|
|
162
|
+
if (this.residue !== void 0) core.residue = this.residue;
|
|
163
|
+
const resolveWith = ctx.resolveWith ?? this.registration?.resolveWith;
|
|
164
|
+
if (latestUnknownSend !== void 0 && resolveWith !== void 0) {
|
|
165
|
+
core.resolveWith = resolveWith;
|
|
166
|
+
core.resolveNotBefore = new Date(
|
|
167
|
+
latestUnknownSend + SERVER_PROCESSING_BOUND_MS
|
|
168
|
+
).toISOString();
|
|
169
|
+
}
|
|
170
|
+
return { ...core, ...this.extras };
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
function createOperation(init) {
|
|
174
|
+
return new OperationBuilder(init);
|
|
175
|
+
}
|
|
176
|
+
var OperationError = class extends Error {
|
|
177
|
+
constructor(message, exitCode, result, options) {
|
|
178
|
+
super(message, options);
|
|
179
|
+
this.exitCode = exitCode;
|
|
180
|
+
this.result = result;
|
|
181
|
+
}
|
|
182
|
+
exitCode;
|
|
183
|
+
result;
|
|
184
|
+
name = "OperationError";
|
|
185
|
+
};
|
|
186
|
+
async function runOperation(op, opts, body) {
|
|
187
|
+
const registration = registerOperation({
|
|
188
|
+
machine: opts.machine,
|
|
189
|
+
resolveWith: opts.resolveWith,
|
|
190
|
+
...opts.what === void 0 ? {} : { what: opts.what },
|
|
191
|
+
snapshot: ({ interrupted }) => op.snapshot({ interrupted })
|
|
192
|
+
});
|
|
193
|
+
op.registration = registration;
|
|
194
|
+
let failure;
|
|
195
|
+
let outcome;
|
|
196
|
+
try {
|
|
197
|
+
await describeWrite(
|
|
198
|
+
{ ...opts.what === void 0 ? {} : { what: opts.what }, resolveWith: opts.resolveWith },
|
|
199
|
+
() => body(op)
|
|
200
|
+
);
|
|
201
|
+
} catch (caught) {
|
|
202
|
+
const err2 = await explainRunFailure(caught);
|
|
203
|
+
failure = { err: err2 };
|
|
204
|
+
outcome = classifyFailure(err2, { writeSent: op.inProgressSent });
|
|
205
|
+
}
|
|
206
|
+
let result;
|
|
207
|
+
try {
|
|
208
|
+
result = op.snapshot({
|
|
209
|
+
...outcome === void 0 ? {} : { failure: outcome },
|
|
210
|
+
resolveWith: opts.resolveWith
|
|
211
|
+
});
|
|
212
|
+
} finally {
|
|
213
|
+
registration.clear();
|
|
214
|
+
op.registration = void 0;
|
|
215
|
+
}
|
|
216
|
+
const unresolved = result.resolveWith !== void 0;
|
|
217
|
+
if (unresolved && opts.resolveSteps !== void 0) {
|
|
218
|
+
const { resolveNotBefore, ...rest } = result;
|
|
219
|
+
result = { ...rest, resolveSteps: [...opts.resolveSteps], resolveNotBefore };
|
|
220
|
+
}
|
|
221
|
+
const err = failure?.err;
|
|
222
|
+
const own = exitCodeOf(err);
|
|
223
|
+
const statedUnknown = failure !== void 0 && ownExitCode(err) === void 0 && processExitCode(err) === EXIT_OUTCOME_UNKNOWN;
|
|
224
|
+
const code = unresolved || statedUnknown ? EXIT_OUTCOME_UNKNOWN : ownExitCode(err) ?? opts.exitCode ?? 1;
|
|
225
|
+
const message = failure === void 0 ? `${op.operation} did not complete: ${result.steps.filter((s) => s.completed !== "yes").map((s) => `${s.name} ${s.completed}`).join(", ")}.` : err instanceof Error ? err.message : String(err);
|
|
226
|
+
if (failure !== void 0) {
|
|
227
|
+
result = { ok: false, ...result, error: failureError(err, message, code) };
|
|
228
|
+
}
|
|
229
|
+
if (opts.machine) writeJson(result);
|
|
230
|
+
if (unresolved) {
|
|
231
|
+
warn(
|
|
232
|
+
`Outcome unknown \u2014 check with \`${result.resolveWith}\` before retrying. An "absent" answer before ${result.resolveNotBefore} is not proof: the server may still be finishing the write.`,
|
|
233
|
+
"operation.outcome-unknown",
|
|
234
|
+
opts.resolveSteps
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
if (failure === void 0 && result.completed === "yes") return result;
|
|
238
|
+
if (failure !== void 0 && code === own) throw err;
|
|
239
|
+
throw new OperationError(
|
|
240
|
+
message,
|
|
241
|
+
code,
|
|
242
|
+
result,
|
|
243
|
+
failure === void 0 ? void 0 : { cause: err }
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
function ownExitCode(err) {
|
|
247
|
+
const code = err?.exitCode;
|
|
248
|
+
return typeof code === "number" ? exitCodeOf(err) : void 0;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export {
|
|
252
|
+
createOperation,
|
|
253
|
+
OperationError,
|
|
254
|
+
runOperation
|
|
255
|
+
};
|
|
256
|
+
//# sourceMappingURL=chunk-TLHIFK4M.js.map
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LOCK_PAYLOAD_KEYS,
|
|
3
|
+
lockKey
|
|
4
|
+
} from "./chunk-6MR5TI5V.js";
|
|
5
|
+
|
|
6
|
+
// src/lock/landed.ts
|
|
7
|
+
function destinationKey(instance, dest) {
|
|
8
|
+
let host;
|
|
9
|
+
try {
|
|
10
|
+
host = new URL(instance).host.toLowerCase();
|
|
11
|
+
} catch {
|
|
12
|
+
host = instance.replace(/^[a-z]+:\/\//i, "").replace(/\/.*$/, "").toLowerCase();
|
|
13
|
+
}
|
|
14
|
+
return dest.kind === "workspace" ? `${host}/workspace/${dest.workspaceId}` : `${host}/${dest.kind}/${dest.name}`;
|
|
15
|
+
}
|
|
16
|
+
function isEphemeralDestinationKey(key) {
|
|
17
|
+
return /^[^/\s]+\/ephemeral\/[^/\s]+$/.test(key);
|
|
18
|
+
}
|
|
19
|
+
function groupNames(payload) {
|
|
20
|
+
const groups = /* @__PURE__ */ new Map();
|
|
21
|
+
for (const section of ["app", "realtime_server", "channel"]) {
|
|
22
|
+
const rows = payload[section];
|
|
23
|
+
for (const g of Array.isArray(rows) ? rows : []) {
|
|
24
|
+
if (g === null || typeof g !== "object") continue;
|
|
25
|
+
const { name, guid, id } = g;
|
|
26
|
+
if (typeof name !== "string") continue;
|
|
27
|
+
if (typeof guid === "string" && guid !== "") groups.set(guid, name);
|
|
28
|
+
if (typeof id === "number" && id !== 0) groups.set(`${section}#${id}`, name);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return groups;
|
|
32
|
+
}
|
|
33
|
+
function landedKeyForRow(payloadKey, row, groups) {
|
|
34
|
+
if (typeof row.name !== "string" || row.name === "") return void 0;
|
|
35
|
+
const parent = (ref, section) => {
|
|
36
|
+
const id = ref?.id;
|
|
37
|
+
if (typeof id === "string" && id !== "") return groups.get(id) ?? id;
|
|
38
|
+
return typeof id === "number" && id !== 0 ? groups.get(`${section}#${id}`) ?? `#${id}` : "";
|
|
39
|
+
};
|
|
40
|
+
if (payloadKey === "channel") return lockKey(payloadKey, [parent(row.server, "realtime_server"), row.name].join("|"));
|
|
41
|
+
if (payloadKey === "message") {
|
|
42
|
+
return lockKey(payloadKey, [parent(row.server, "realtime_server"), parent(row.channel, "channel"), row.name].join("|"));
|
|
43
|
+
}
|
|
44
|
+
if (payloadKey !== "query") return lockKey(payloadKey, row.name);
|
|
45
|
+
const verb = typeof row.verb === "string" ? row.verb : "";
|
|
46
|
+
const appId = row.app?.id;
|
|
47
|
+
const group = appId === void 0 || appId === null || appId === 0 || appId === "" ? "" : groups.get(typeof appId === "number" ? `app#${appId}` : appId) ?? "";
|
|
48
|
+
return lockKey("query", [group, verb, row.name].join("|"));
|
|
49
|
+
}
|
|
50
|
+
function landedIdentities(bundle) {
|
|
51
|
+
const payload = bundle?.payload;
|
|
52
|
+
const out = {};
|
|
53
|
+
if (payload === null || typeof payload !== "object" || Array.isArray(payload)) return out;
|
|
54
|
+
const sections = payload;
|
|
55
|
+
const groups = groupNames(sections);
|
|
56
|
+
for (const payloadKey of LOCK_PAYLOAD_KEYS) {
|
|
57
|
+
const rows = sections[payloadKey];
|
|
58
|
+
if (!Array.isArray(rows)) continue;
|
|
59
|
+
for (const row of rows) {
|
|
60
|
+
if (row === null || typeof row !== "object") continue;
|
|
61
|
+
const r = row;
|
|
62
|
+
if (typeof r.guid !== "string" || r.guid === "") continue;
|
|
63
|
+
const key = landedKeyForRow(payloadKey, r, groups);
|
|
64
|
+
if (key === void 0) continue;
|
|
65
|
+
out[key] = payloadKey === "toolset" && r.type === "agent" ? { guid: r.guid, type: "agent" } : { guid: r.guid };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
function identitiesMatchLock(identities, lock) {
|
|
71
|
+
const keys = Object.keys(identities);
|
|
72
|
+
if (keys.length === 0) return false;
|
|
73
|
+
return keys.every((key) => {
|
|
74
|
+
const entry = lock.objects[key];
|
|
75
|
+
if (entry?.guid !== identities[key].guid) return false;
|
|
76
|
+
return !key.startsWith("toolset:") || entry.type === "agent" === (identities[key].type === "agent");
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function applyLanding(lock, destKey, update) {
|
|
80
|
+
const next = nextLandedRecord(lock.landed?.[destKey] ?? {}, update);
|
|
81
|
+
const landed = { ...lock.landed ?? {} };
|
|
82
|
+
if (Object.keys(next).length > 0) landed[destKey] = next;
|
|
83
|
+
else delete landed[destKey];
|
|
84
|
+
const objects = withoutPrunedObjects(lock.objects, update);
|
|
85
|
+
return Object.keys(landed).length > 0 ? { version: lock.version, objects, landed } : { version: lock.version, objects };
|
|
86
|
+
}
|
|
87
|
+
function withoutPrunedObjects(objects, update) {
|
|
88
|
+
const drop = Object.entries(update.removed ?? {}).filter(
|
|
89
|
+
([key, entry]) => objects[key]?.guid === entry.guid && update.identities[key] === void 0
|
|
90
|
+
);
|
|
91
|
+
if (drop.length === 0) return objects;
|
|
92
|
+
const kept = { ...objects };
|
|
93
|
+
for (const [key] of drop) delete kept[key];
|
|
94
|
+
return kept;
|
|
95
|
+
}
|
|
96
|
+
function nextLandedRecord(before, update) {
|
|
97
|
+
let next;
|
|
98
|
+
if (update.mode === "replace") {
|
|
99
|
+
next = { ...update.identities };
|
|
100
|
+
} else {
|
|
101
|
+
const landingGuids = new Map(Object.entries(update.identities).map(([k, e]) => [e.guid, k]));
|
|
102
|
+
next = {};
|
|
103
|
+
for (const [key, entry] of Object.entries(before)) {
|
|
104
|
+
const movedTo = landingGuids.get(entry.guid);
|
|
105
|
+
if (movedTo !== void 0 && movedTo !== key) continue;
|
|
106
|
+
next[key] = entry;
|
|
107
|
+
}
|
|
108
|
+
Object.assign(next, update.identities);
|
|
109
|
+
}
|
|
110
|
+
for (const [key, entry] of Object.entries(update.removed ?? {})) {
|
|
111
|
+
if (next[key]?.guid === entry.guid) delete next[key];
|
|
112
|
+
}
|
|
113
|
+
return next;
|
|
114
|
+
}
|
|
115
|
+
function storedColumnsOf(record) {
|
|
116
|
+
const out = /* @__PURE__ */ new Map();
|
|
117
|
+
for (const [key, entry] of Object.entries(record ?? {})) {
|
|
118
|
+
if (key.startsWith("dbo:") && entry.columns !== void 0) out.set(entry.guid, entry.columns);
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
function withStoredColumns(identities, stored) {
|
|
123
|
+
if (stored === void 0) return identities;
|
|
124
|
+
const out = {};
|
|
125
|
+
for (const [key, entry] of Object.entries(identities)) {
|
|
126
|
+
const columns = key.startsWith("dbo:") ? stored.get(entry.guid) : void 0;
|
|
127
|
+
out[key] = columns === void 0 ? entry : { ...entry, columns: { ...columns } };
|
|
128
|
+
}
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
131
|
+
function withoutLanding(lock, destKey) {
|
|
132
|
+
if (lock.landed?.[destKey] === void 0) return lock;
|
|
133
|
+
const { [destKey]: _dropped, ...landed } = lock.landed;
|
|
134
|
+
return Object.keys(landed).length > 0 ? { version: lock.version, objects: lock.objects, landed } : { version: lock.version, objects: lock.objects };
|
|
135
|
+
}
|
|
136
|
+
function landedOn(lock, destKey) {
|
|
137
|
+
const record = lock.landed?.[destKey];
|
|
138
|
+
return record === void 0 || Object.keys(record).length === 0 ? void 0 : record;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export {
|
|
142
|
+
destinationKey,
|
|
143
|
+
isEphemeralDestinationKey,
|
|
144
|
+
groupNames,
|
|
145
|
+
landedKeyForRow,
|
|
146
|
+
landedIdentities,
|
|
147
|
+
identitiesMatchLock,
|
|
148
|
+
applyLanding,
|
|
149
|
+
withoutPrunedObjects,
|
|
150
|
+
nextLandedRecord,
|
|
151
|
+
storedColumnsOf,
|
|
152
|
+
withStoredColumns,
|
|
153
|
+
withoutLanding,
|
|
154
|
+
landedOn
|
|
155
|
+
};
|
|
156
|
+
//# sourceMappingURL=chunk-TLQE7ZN3.js.map
|