@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.
Files changed (336) hide show
  1. package/CHANGELOG.md +788 -0
  2. package/LICENSE +21 -0
  3. package/README.md +541 -0
  4. package/dist/.build-fingerprint +1 -0
  5. package/dist/agent-file-refresh-ZEMK33AX.js +38 -0
  6. package/dist/answer-shape-K67TAAPY.js +33 -0
  7. package/dist/backend-dir-2U53CIAL.js +39 -0
  8. package/dist/backend-slot-7QXW2QYC.js +28 -0
  9. package/dist/bin.d.ts +1 -0
  10. package/dist/bin.js +255 -0
  11. package/dist/branch-NCRNWQBQ.js +61 -0
  12. package/dist/branch-commands-ACIRCEQJ.js +79 -0
  13. package/dist/bundle.d.ts +223 -0
  14. package/dist/bundle.js +153 -0
  15. package/dist/capture-WAXPD7DR.js +41 -0
  16. package/dist/chunk-27GWNP2I.js +23 -0
  17. package/dist/chunk-2CMJZDCL.js +177 -0
  18. package/dist/chunk-2EZ3ZJZZ.js +302 -0
  19. package/dist/chunk-2GNFDZA2.js +390 -0
  20. package/dist/chunk-2MNLRIOX.js +11 -0
  21. package/dist/chunk-2TFRR6JV.js +104 -0
  22. package/dist/chunk-2ZUEE4EK.js +408 -0
  23. package/dist/chunk-36JUQZVQ.js +22 -0
  24. package/dist/chunk-3DRXWLJ5.js +83 -0
  25. package/dist/chunk-3JDU4VRL.js +137 -0
  26. package/dist/chunk-3KZCLN4Z.js +241 -0
  27. package/dist/chunk-3LDULPRE.js +168 -0
  28. package/dist/chunk-3M4LFYNQ.js +111 -0
  29. package/dist/chunk-3XI5CTUE.js +22 -0
  30. package/dist/chunk-3YW23UFH.js +50 -0
  31. package/dist/chunk-45UIT5T2.js +862 -0
  32. package/dist/chunk-4BW2SG2N.js +46 -0
  33. package/dist/chunk-4KHEMC32.js +79 -0
  34. package/dist/chunk-4POWHT2K.js +321 -0
  35. package/dist/chunk-4Q2GN7NW.js +192 -0
  36. package/dist/chunk-5A2PLKZB.js +70 -0
  37. package/dist/chunk-5FBYXK5P.js +159 -0
  38. package/dist/chunk-5HVXPTU4.js +323 -0
  39. package/dist/chunk-5QU2P5CA.js +304 -0
  40. package/dist/chunk-5V5XU32D.js +191 -0
  41. package/dist/chunk-5ZSO4T2G.js +10 -0
  42. package/dist/chunk-622HUCZT.js +10 -0
  43. package/dist/chunk-65HWOMGV.js +177 -0
  44. package/dist/chunk-6ELFRN3P.js +365 -0
  45. package/dist/chunk-6HO3NCSJ.js +1055 -0
  46. package/dist/chunk-6IUMKYWI.js +457 -0
  47. package/dist/chunk-6KEB3C3U.js +65 -0
  48. package/dist/chunk-6MR5TI5V.js +987 -0
  49. package/dist/chunk-6NNTNXN7.js +157 -0
  50. package/dist/chunk-6PBR37LN.js +97 -0
  51. package/dist/chunk-6QXLMMT3.js +155 -0
  52. package/dist/chunk-6ZGJCBZS.js +224 -0
  53. package/dist/chunk-73IVBKMA.js +250 -0
  54. package/dist/chunk-7G3CTU7I.js +286 -0
  55. package/dist/chunk-A3UDOZB6.js +222 -0
  56. package/dist/chunk-A6E77GDW.js +85 -0
  57. package/dist/chunk-AHJWCYQO.js +660 -0
  58. package/dist/chunk-AKNCFVKZ.js +36 -0
  59. package/dist/chunk-AM4FKL4J.js +237 -0
  60. package/dist/chunk-AN6BL47T.js +26 -0
  61. package/dist/chunk-AOSYVMUS.js +147 -0
  62. package/dist/chunk-APWXY5SL.js +182 -0
  63. package/dist/chunk-AWEIIR2U.js +218 -0
  64. package/dist/chunk-AWQ7BQTQ.js +73 -0
  65. package/dist/chunk-BAUZOWGX.js +393 -0
  66. package/dist/chunk-BHACRS6R.js +940 -0
  67. package/dist/chunk-BWPNT55T.js +680 -0
  68. package/dist/chunk-C6RIMRU4.js +187 -0
  69. package/dist/chunk-CGVQZXYG.js +263 -0
  70. package/dist/chunk-CIMQZRRE.js +162 -0
  71. package/dist/chunk-CJHQKJU4.js +113 -0
  72. package/dist/chunk-CTMO46PK.js +1897 -0
  73. package/dist/chunk-D53J55C5.js +106 -0
  74. package/dist/chunk-D7VGG3WS.js +90 -0
  75. package/dist/chunk-DAD3ONIS.js +245 -0
  76. package/dist/chunk-DGWHAVRG.js +162 -0
  77. package/dist/chunk-DX4QR4B2.js +483 -0
  78. package/dist/chunk-EHP3WPEG.js +21 -0
  79. package/dist/chunk-ELP2HMXC.js +432 -0
  80. package/dist/chunk-ERVIASGL.js +21 -0
  81. package/dist/chunk-ET4Y4XCB.js +865 -0
  82. package/dist/chunk-ETO6LGLD.js +4750 -0
  83. package/dist/chunk-EUUUMY7J.js +24 -0
  84. package/dist/chunk-FQJ2TTHP.js +218 -0
  85. package/dist/chunk-FQOF7E2E.js +133 -0
  86. package/dist/chunk-FWD7AL6N.js +21 -0
  87. package/dist/chunk-FXFV3KU6.js +138 -0
  88. package/dist/chunk-FXRQOWTE.js +171 -0
  89. package/dist/chunk-G554NZNI.js +210 -0
  90. package/dist/chunk-GSGDWJB5.js +13 -0
  91. package/dist/chunk-H2V3N23D.js +66 -0
  92. package/dist/chunk-H5C7MBCR.js +159 -0
  93. package/dist/chunk-HHN734BU.js +371 -0
  94. package/dist/chunk-HRVBLCVJ.js +243 -0
  95. package/dist/chunk-HVRUQXGD.js +1264 -0
  96. package/dist/chunk-I4F5TCJH.js +130 -0
  97. package/dist/chunk-IDOTCMDV.js +57 -0
  98. package/dist/chunk-IGOLHKWF.js +427 -0
  99. package/dist/chunk-JGE7CAWB.js +148 -0
  100. package/dist/chunk-JTUKLCXS.js +92 -0
  101. package/dist/chunk-JZGVVJSI.js +66 -0
  102. package/dist/chunk-K4WX6UUU.js +923 -0
  103. package/dist/chunk-K5BBGTYZ.js +217 -0
  104. package/dist/chunk-K6RXBGUB.js +427 -0
  105. package/dist/chunk-KTSDSD36.js +165 -0
  106. package/dist/chunk-L5JYN3NM.js +1038 -0
  107. package/dist/chunk-LIEOKXKD.js +354 -0
  108. package/dist/chunk-LLNZGEFK.js +51 -0
  109. package/dist/chunk-LPECSJ2J.js +55 -0
  110. package/dist/chunk-LQCMKAJ7.js +413 -0
  111. package/dist/chunk-LRN4ZJCQ.js +1145 -0
  112. package/dist/chunk-MJ4ZVHKN.js +17 -0
  113. package/dist/chunk-MXHSQOC4.js +3061 -0
  114. package/dist/chunk-N5GKCWE5.js +367 -0
  115. package/dist/chunk-NA3PXMEF.js +10 -0
  116. package/dist/chunk-NAQDMEHV.js +76 -0
  117. package/dist/chunk-NWKXM5RD.js +109 -0
  118. package/dist/chunk-NZOWWHU5.js +196 -0
  119. package/dist/chunk-OHX6MIUZ.js +184 -0
  120. package/dist/chunk-OOXWYAA4.js +15 -0
  121. package/dist/chunk-OPHB5ORL.js +1990 -0
  122. package/dist/chunk-OXA6PSZT.js +1725 -0
  123. package/dist/chunk-P2HAGF6H.js +73 -0
  124. package/dist/chunk-PTHVMXZI.js +3036 -0
  125. package/dist/chunk-PZ5AY32C.js +10 -0
  126. package/dist/chunk-Q325JKYB.js +189 -0
  127. package/dist/chunk-Q7DGTQ5G.js +255 -0
  128. package/dist/chunk-QCNYHBL7.js +601 -0
  129. package/dist/chunk-QO6BVGS5.js +145 -0
  130. package/dist/chunk-QXTKSOFI.js +76 -0
  131. package/dist/chunk-ROY4YAEQ.js +66 -0
  132. package/dist/chunk-RTJRZFFY.js +447 -0
  133. package/dist/chunk-SAVJUS2X.js +128 -0
  134. package/dist/chunk-SFLHVCKX.js +173 -0
  135. package/dist/chunk-STSFNCY4.js +127 -0
  136. package/dist/chunk-SWBF2LTK.js +170 -0
  137. package/dist/chunk-T5KELPAR.js +109 -0
  138. package/dist/chunk-TFFGOFVZ.js +1481 -0
  139. package/dist/chunk-TLHIFK4M.js +256 -0
  140. package/dist/chunk-TLQE7ZN3.js +156 -0
  141. package/dist/chunk-TPHWJ7UG.js +1981 -0
  142. package/dist/chunk-TRJCALW3.js +291 -0
  143. package/dist/chunk-TTEIYD5P.js +133 -0
  144. package/dist/chunk-U64O2MXY.js +407 -0
  145. package/dist/chunk-UCQ2VUTG.js +630 -0
  146. package/dist/chunk-UTI5G6OJ.js +44 -0
  147. package/dist/chunk-UVHDMMIP.js +188 -0
  148. package/dist/chunk-UZ6QQWJT.js +120 -0
  149. package/dist/chunk-VAX3UZOY.js +686 -0
  150. package/dist/chunk-W3HBUKFO.js +57 -0
  151. package/dist/chunk-WKQLGKCL.js +2823 -0
  152. package/dist/chunk-WQFNASK4.js +560 -0
  153. package/dist/chunk-WRBKLYSJ.js +224 -0
  154. package/dist/chunk-WTPZRR4I.js +17 -0
  155. package/dist/chunk-WZDJ2LLX.js +2385 -0
  156. package/dist/chunk-X2NL4KUO.js +14 -0
  157. package/dist/chunk-X4DVXBFY.js +38 -0
  158. package/dist/chunk-X677DMZM.js +7050 -0
  159. package/dist/chunk-XBKMWY7F.js +612 -0
  160. package/dist/chunk-XNCP4KYO.js +78 -0
  161. package/dist/chunk-XVBGLISP.js +35 -0
  162. package/dist/chunk-XW6KISBB.js +1192 -0
  163. package/dist/chunk-YGZHHAAB.js +8156 -0
  164. package/dist/chunk-YHEFQUQB.js +186 -0
  165. package/dist/chunk-YLDALTWZ.js +653 -0
  166. package/dist/chunk-YU4HSQW7.js +229 -0
  167. package/dist/chunk-ZDPP6RKB.js +27 -0
  168. package/dist/chunk-ZFDZKNGG.js +194 -0
  169. package/dist/chunk-ZIY7RNUT.js +49 -0
  170. package/dist/chunk-ZYJP6BOO.js +30 -0
  171. package/dist/cli.d.ts +1111 -0
  172. package/dist/cli.js +165 -0
  173. package/dist/codegen-command-VR2GWR6C.js +173 -0
  174. package/dist/codegen.d.ts +115 -0
  175. package/dist/codegen.js +19 -0
  176. package/dist/commands-GJMJ4XYZ.js +76 -0
  177. package/dist/completion-ZQLO6PB6.js +738 -0
  178. package/dist/config-MBYGCAFK.js +136 -0
  179. package/dist/deploy-command-JVZPWHMK.js +180 -0
  180. package/dist/deploy-source-3W45CXMP.js +81 -0
  181. package/dist/dev-env-sync-HN44K4D5.js +188 -0
  182. package/dist/diagnostics-UEAAHWVF.js +30 -0
  183. package/dist/display-name-hint-ABBPVQIR.js +46 -0
  184. package/dist/emit-CyhBDxli.d.ts +7007 -0
  185. package/dist/env-example-refresh-ET5HMMDW.js +126 -0
  186. package/dist/env-pull-command-TNMNB3CV.js +323 -0
  187. package/dist/env-target-O4HRKTGZ.js +40 -0
  188. package/dist/env-var-command-ZIRDCAZA.js +427 -0
  189. package/dist/ephemeral-P7F3PMAD.js +54 -0
  190. package/dist/ephemeral-command-CLJJKOFT.js +592 -0
  191. package/dist/ephemeral-state-PYCBSOGX.js +61 -0
  192. package/dist/file-lock-PT74GWYW.js +10 -0
  193. package/dist/generate-command-AYEOLA26.js +510 -0
  194. package/dist/gitignore-3SJ3WNRG.js +51 -0
  195. package/dist/guards-4EBNCZDC.js +162 -0
  196. package/dist/hosted-file-PSHJB3HX.js +28 -0
  197. package/dist/impersonate-command-5JAS3WSV.js +152 -0
  198. package/dist/import-EQSFU6JC.js +19 -0
  199. package/dist/index.d.ts +5470 -0
  200. package/dist/index.js +371 -0
  201. package/dist/init-command-X2FR4UAK.js +125 -0
  202. package/dist/init-modules-RY7UHAOL.js +50 -0
  203. package/dist/init-web-M4YZSZK6.js +42 -0
  204. package/dist/internal.d.ts +179 -0
  205. package/dist/internal.js +2634 -0
  206. package/dist/io-RC56QSN5.js +26 -0
  207. package/dist/keep-data-merge-7MPLVAVI.js +1119 -0
  208. package/dist/lambda-config-reconcile-OUZ4OYAB.js +116 -0
  209. package/dist/landed-753YLJ5H.js +40 -0
  210. package/dist/landing-record-SU52SKXU.js +61 -0
  211. package/dist/live-diff-YONW2VI3.js +65 -0
  212. package/dist/local-engine-choice-CH5X3W7E.js +79 -0
  213. package/dist/local-engine-command-Z3OL7VOD.js +766 -0
  214. package/dist/local-engine-config-5U3SC434.js +39 -0
  215. package/dist/local-engine-deploy-PCQ4SNPB.js +39 -0
  216. package/dist/local-engine-process-EHTE5LLU.js +63 -0
  217. package/dist/local-engine-state-A4FTRFAF.js +32 -0
  218. package/dist/local-engine-update-check-6L645VBL.js +162 -0
  219. package/dist/lock-MRRHW5GS.js +87 -0
  220. package/dist/lock-commands-2QG25HL7.js +963 -0
  221. package/dist/login-command-QPYRWOXZ.js +538 -0
  222. package/dist/logout-command-WOIQLDP6.js +56 -0
  223. package/dist/loop-ALIZLOSX.js +191 -0
  224. package/dist/marketplace-command-K5YL42NO.js +977 -0
  225. package/dist/marketplace-resolve-LY32JES5.js +40 -0
  226. package/dist/meta-client-YXGPW53C.js +244 -0
  227. package/dist/module-manifest-JFGHU2TC.js +38 -0
  228. package/dist/near-key.d.ts +13 -0
  229. package/dist/near-key.js +8 -0
  230. package/dist/node.d.ts +95 -0
  231. package/dist/node.js +969 -0
  232. package/dist/operation-outcome-TZSESNC7.js +51 -0
  233. package/dist/output-target-AL3I44GG.js +47 -0
  234. package/dist/package-manager-PRAHUSCN.js +34 -0
  235. package/dist/plan-disclosure-6G4MLZKD.js +114 -0
  236. package/dist/plugin-contributions-WRNY5ABG.js +28 -0
  237. package/dist/plugin-prompt-4VA3B4FF.js +20 -0
  238. package/dist/plugin-questions-JTSYA74Q.js +24 -0
  239. package/dist/plugin.d.ts +396 -0
  240. package/dist/plugin.js +1 -0
  241. package/dist/preflight-command-2T5Z36MI.js +321 -0
  242. package/dist/profile-command-AH3PIM4X.js +800 -0
  243. package/dist/profile-pointer-GRWJU3YD.js +31 -0
  244. package/dist/profile-select-74TRDEPD.js +23 -0
  245. package/dist/project-dependency-KSH63ODT.js +35 -0
  246. package/dist/project-sdk-REPPOIBD.js +24 -0
  247. package/dist/promote-command-PCWT5N6S.js +140 -0
  248. package/dist/prompt-II3F3LND.js +27 -0
  249. package/dist/publish-command-TTDUUJI5.js +414 -0
  250. package/dist/pull-command-VBO7C4S3.js +161 -0
  251. package/dist/pull-superseded-GJWLG7XO.js +20 -0
  252. package/dist/release-command-N4ZPKMHR.js +146 -0
  253. package/dist/release-ns-command-3KFDMZ6G.js +1745 -0
  254. package/dist/response-HlXahv4K.d.ts +925 -0
  255. package/dist/retry-command-AS5EVREX.js +34 -0
  256. package/dist/routes-manifest-SNWUVBT6.js +43 -0
  257. package/dist/runtime-XETHVF33.js +14 -0
  258. package/dist/scaffold.d.ts +1911 -0
  259. package/dist/scaffold.js +107 -0
  260. package/dist/secrets-file-LVZD6IIM.js +56 -0
  261. package/dist/secrets-fill-command-TTCPSVXN.js +218 -0
  262. package/dist/seed-VU7C3QYS.js +46 -0
  263. package/dist/sent-writes-N7X4OVXT.js +22 -0
  264. package/dist/source-resolve-S2XA3XZF.js +83 -0
  265. package/dist/static-host-B2Y6AG3W.js +352 -0
  266. package/dist/status-command-RUDXTF7I.js +554 -0
  267. package/dist/store-6VNCD4D7.js +20 -0
  268. package/dist/store-ARM6VMO5.js +98 -0
  269. package/dist/store-DuYfzKlW.d.ts +3144 -0
  270. package/dist/suggest-6FOOYKHG.js +12 -0
  271. package/dist/sveltekit.d.ts +154 -0
  272. package/dist/sveltekit.js +109 -0
  273. package/dist/sync-contributions-UCEROO26.js +415 -0
  274. package/dist/table-ENAVMITR.js +42 -0
  275. package/dist/tables-command-GUPXXSB5.js +156 -0
  276. package/dist/tenant-IIHPOHGP.js +42 -0
  277. package/dist/tenant-command-D5HGI2X4.js +965 -0
  278. package/dist/test-command-TIKZMDPZ.js +476 -0
  279. package/dist/tests-BGGIOK3L.js +26 -0
  280. package/dist/token-NICJUTMT.js +72 -0
  281. package/dist/toolchain-hooks-GHKLUJOH.js +96 -0
  282. package/dist/toolchain-modules-5EAZUONB.js +24 -0
  283. package/dist/tracked-backend-EIBUMDZA.js +80 -0
  284. package/dist/update-check-2W2NLDTC.js +136 -0
  285. package/dist/upgrade-command-QHNFWM7O.js +531 -0
  286. package/dist/verify-rollout-DRCK5TDD.js +61 -0
  287. package/dist/whoami-command-STGINTXH.js +51 -0
  288. package/dist/workspace-2CLHU2LK.js +93 -0
  289. package/dist/workspace-binding-56PIIPCP.js +54 -0
  290. package/dist/workspace-command-JEXQETJD.js +535 -0
  291. package/dist/workspace-env-F2RFMSC5.js +70 -0
  292. package/dist/workspace-export-OJSH2HIW.js +21 -0
  293. package/dist/writable-VA7OISSK.js +25 -0
  294. package/dist/xano-ICFUSPFR.js +42 -0
  295. package/dist/xanosdk-import-GN42TO2B.js +56 -0
  296. package/dist/xanosdk-project-S6DXJONQ.js +41 -0
  297. package/dist/xdo-CxDr2Q1C.d.ts +1371 -0
  298. package/guides/README.md +33 -0
  299. package/guides/authoring.md +921 -0
  300. package/guides/cli.md +401 -0
  301. package/guides/codegen.md +177 -0
  302. package/guides/codes.md +404 -0
  303. package/guides/coverage.md +74 -0
  304. package/guides/deploying.md +1525 -0
  305. package/guides/environment.md +400 -0
  306. package/guides/marketplace.md +415 -0
  307. package/guides/module-contract.md +558 -0
  308. package/guides/object-kinds.md +433 -0
  309. package/guides/project-structure.md +43 -0
  310. package/guides/scaffold.md +351 -0
  311. package/guides/typed-frontend.md +242 -0
  312. package/llms/client.md +63 -0
  313. package/llms/errors.md +56 -0
  314. package/llms/fields.md +176 -0
  315. package/llms/filters.md +183 -0
  316. package/llms/kinds-agent-mcp.md +30 -0
  317. package/llms/kinds-core.md +100 -0
  318. package/llms/kinds-knowledge.md +20 -0
  319. package/llms/kinds-realtime.md +76 -0
  320. package/llms/lambda.md +94 -0
  321. package/llms/legacy.md +44 -0
  322. package/llms/lock.md +40 -0
  323. package/llms/object-kinds.md +34 -0
  324. package/llms/statements-calls.md +62 -0
  325. package/llms/statements-catalog.md +320 -0
  326. package/llms/statements-data.md +66 -0
  327. package/llms/statements-runtime.md +68 -0
  328. package/llms/tests.md +59 -0
  329. package/llms/toolchain.md +16 -0
  330. package/llms/triggers.md +36 -0
  331. package/llms/values.md +29 -0
  332. package/llms-full.txt +2085 -0
  333. package/llms.txt +493 -0
  334. package/manifest.json +11224 -0
  335. package/package.json +162 -0
  336. package/types/lambda-globals.d.ts +129 -0
@@ -0,0 +1,291 @@
1
+ import {
2
+ asTimestamp
3
+ } from "./chunk-2MNLRIOX.js";
4
+ import {
5
+ pipedYes
6
+ } from "./chunk-T5KELPAR.js";
7
+ import {
8
+ contextFlags
9
+ } from "./chunk-NAQDMEHV.js";
10
+ import {
11
+ shellWord
12
+ } from "./chunk-FWD7AL6N.js";
13
+ import {
14
+ describeTransportFailure,
15
+ httpFailure,
16
+ noteMetaAnswer,
17
+ parseJsonAnswer,
18
+ retryingFetch,
19
+ transportTarget,
20
+ withWriteStatusAftermath
21
+ } from "./chunk-YLDALTWZ.js";
22
+ import {
23
+ suggestAll
24
+ } from "./chunk-UTI5G6OJ.js";
25
+
26
+ // src/deploy/branch.ts
27
+ var BRANCH_TIMEOUT_MS = 3e4;
28
+ var BranchHttpError = class extends Error {
29
+ constructor(status, action, statusText, body, write = false) {
30
+ const head = httpFailure(action, { status, statusText }, body);
31
+ super(write ? withWriteStatusAftermath(head, status) : head);
32
+ this.status = status;
33
+ this.name = "BranchHttpError";
34
+ }
35
+ status;
36
+ };
37
+ var DEFAULT_BRANCH_LABEL = "v1";
38
+ function endpoint(baseUrl, workspaceId, suffix = "") {
39
+ return `${baseUrl.replace(/\/$/, "")}/api:meta/workspace/${workspaceId}/branch${suffix}`;
40
+ }
41
+ var BranchLabelError = class extends Error {
42
+ name = "BranchLabelError";
43
+ code = "SDK_USAGE";
44
+ };
45
+ var BranchNotFoundError = class extends Error {
46
+ name = "BranchNotFoundError";
47
+ exitCode = 8;
48
+ /** The near label a typo most likely meant — the document's `suggestion`. */
49
+ suggestion;
50
+ /** Every near label, when several tie. */
51
+ suggestions;
52
+ constructor(message, near = []) {
53
+ super(message);
54
+ this.suggestion = near[0];
55
+ this.suggestions = near.length > 1 ? [...near] : void 0;
56
+ }
57
+ };
58
+ var BRANCH_LABEL_PATTERN = /^[A-Za-z0-9_][A-Za-z0-9_.-]*$/;
59
+ function assertUsableBranchLabel(label, flag, withoutFlag = "drop the flag to release to whichever branch is currently live") {
60
+ const trimmed = label.trim();
61
+ if (trimmed === "") {
62
+ throw new BranchLabelError(
63
+ `\`${flag}\` needs a branch label and was given an empty one.
64
+ The engine does not reject an empty label \u2014 it would create a branch with no name, which cannot be selected, promoted or deleted afterwards.`
65
+ );
66
+ }
67
+ if (trimmed === DEFAULT_BRANCH_LABEL) {
68
+ throw new BranchLabelError(
69
+ `\`${flag}=${DEFAULT_BRANCH_LABEL}\` names the workspace's DEFAULT branch, which is reserved.
70
+ The engine does not store it as an ordinary branch, so it is not caught by an "already exists" check \u2014 targeting it does not stage anything, it writes to the branch every workspace starts on.
71
+ Pick a different label, or ${withoutFlag}.`
72
+ );
73
+ }
74
+ if (!BRANCH_LABEL_PATTERN.test(trimmed)) {
75
+ throw new BranchLabelError(
76
+ `\`${flag}\` was given "${trimmed}", which is not a usable branch label.
77
+ A label starts with a letter, digit or underscore and carries only letters, digits, underscores, dashes and dots (e.g. \`staging\`, \`release-2.1\`) \u2014 no spaces or slashes.`
78
+ );
79
+ }
80
+ return trimmed;
81
+ }
82
+ function findBranch(branches, label) {
83
+ const exact = branches.find((b) => b.label === label);
84
+ if (exact !== void 0) return exact;
85
+ const trimmed = label.trim();
86
+ if (trimmed === "") return void 0;
87
+ const near = branches.filter((b) => b.label.trim() === trimmed);
88
+ return near.length === 1 ? near[0] : void 0;
89
+ }
90
+ function requestInit(auth, init) {
91
+ return {
92
+ signal: AbortSignal.timeout(BRANCH_TIMEOUT_MS),
93
+ ...init,
94
+ headers: {
95
+ accept: "application/json",
96
+ Authorization: `Bearer ${auth.access_token}`,
97
+ ...init.headers ?? {}
98
+ }
99
+ };
100
+ }
101
+ function unreachable(action, url, err) {
102
+ return new Error(`${action} could not reach ${transportTarget(url)}: ${describeTransportFailure(err)}`, { cause: err });
103
+ }
104
+ async function bodyOf(res, action, write = false) {
105
+ const text = await res.text();
106
+ if (!res.ok) throw new BranchHttpError(res.status, action, res.statusText, text, write);
107
+ return text;
108
+ }
109
+ async function call(auth, url, init, action) {
110
+ let res;
111
+ try {
112
+ res = await fetch(url, requestInit(auth, init));
113
+ await noteMetaAnswer(url, res);
114
+ } catch (err) {
115
+ throw unreachable(action, url, err);
116
+ }
117
+ return bodyOf(res, action, true);
118
+ }
119
+ async function read(auth, url, action) {
120
+ let res;
121
+ try {
122
+ res = await retryingFetch(url, requestInit(auth, { method: "GET" }));
123
+ } catch (err) {
124
+ throw unreachable(action, url, err);
125
+ }
126
+ return bodyOf(res, action);
127
+ }
128
+ function toRecord(entry) {
129
+ if (entry === null || typeof entry !== "object") return void 0;
130
+ const row = entry;
131
+ const label = row.label;
132
+ if (typeof label !== "string" || label === "") return void 0;
133
+ return {
134
+ ...typeof row.id === "number" ? { id: row.id } : {},
135
+ label,
136
+ // Absent means false: the list shape omits `live` on non-live rows.
137
+ live: row.live === true,
138
+ backup: row.backup === true,
139
+ ...typeof row.created_at === "string" ? { createdAt: asTimestamp(row.created_at) ?? row.created_at } : {}
140
+ };
141
+ }
142
+ async function listBranchListing(auth, opts) {
143
+ const text = await read(auth, endpoint(opts.baseUrl, opts.workspaceId), "list branches");
144
+ const parsed = parseJsonAnswer(text, "list branches", opts.baseUrl);
145
+ if (!Array.isArray(parsed)) {
146
+ throw new Error(`list branches: ${transportTarget(opts.baseUrl)} answered with JSON that is not a list of branches.`);
147
+ }
148
+ const branches = [];
149
+ const unaddressable = [];
150
+ for (const entry of parsed) {
151
+ const record = toRecord(entry);
152
+ if (record !== void 0) {
153
+ branches.push(record);
154
+ continue;
155
+ }
156
+ if (entry === null || typeof entry !== "object") continue;
157
+ const row = entry;
158
+ unaddressable.push({
159
+ live: row.live === true,
160
+ backup: row.backup === true,
161
+ ...typeof row.created_at === "string" ? { createdAt: asTimestamp(row.created_at) ?? row.created_at } : {}
162
+ });
163
+ }
164
+ return { branches, unaddressable };
165
+ }
166
+ async function listBranches(auth, opts) {
167
+ return (await listBranchListing(auth, opts)).branches;
168
+ }
169
+ function liveBranchLabel(branches) {
170
+ return branches.find((b) => b.live)?.label;
171
+ }
172
+ async function createBranch(auth, opts) {
173
+ const label = assertUsableBranchLabel(opts.label, "branch label");
174
+ const text = await call(
175
+ auth,
176
+ endpoint(opts.baseUrl, opts.workspaceId),
177
+ {
178
+ method: "POST",
179
+ headers: { "Content-Type": "application/json" },
180
+ body: JSON.stringify({
181
+ source_branch: opts.sourceBranch ?? DEFAULT_BRANCH_LABEL,
182
+ label,
183
+ description: opts.description ?? ""
184
+ })
185
+ },
186
+ "create branch"
187
+ );
188
+ const parsed = parseJsonAnswer(text, "create branch", opts.baseUrl);
189
+ const record = toRecord(parsed);
190
+ if (record === void 0) {
191
+ throw new Error(`create branch: ${transportTarget(opts.baseUrl)} answered, but named no branch.`);
192
+ }
193
+ return record;
194
+ }
195
+ async function setLiveBranch(auth, opts) {
196
+ await call(
197
+ auth,
198
+ `${endpoint(opts.baseUrl, opts.workspaceId, `/${encodeURIComponent(opts.label)}/live`)}`,
199
+ { method: "POST" },
200
+ "set live branch"
201
+ );
202
+ }
203
+ async function deleteBranch(auth, opts) {
204
+ await call(
205
+ auth,
206
+ endpoint(opts.baseUrl, opts.workspaceId, `/${encodeURIComponent(opts.label)}`),
207
+ { method: "DELETE" },
208
+ "delete branch"
209
+ );
210
+ }
211
+ function assertBranchAbsent(branches, label, purpose = "deploy") {
212
+ const trimmed = label.trim();
213
+ const held = branches.find((b) => b.label === label) ?? branches.find((b) => b.label.trim() === trimmed);
214
+ if (held === void 0) return;
215
+ const shown = held.label === label ? `"${label}"` : `${JSON.stringify(held.label)} (the stored label of "${label}")`;
216
+ const free = freeBranchLabel(branches, trimmed);
217
+ if (purpose === "backup") {
218
+ throw new BranchTakenError(
219
+ `A branch named ${shown} already exists in this workspace, so \`--backup-branch\` cannot snapshot the live branch under that label \u2014 a snapshot is always a new branch.
220
+ Choose another label (\`${free}\` is free), or pass \`--backup-branch\` with no label for a timestamped one.`,
221
+ held.label,
222
+ free
223
+ );
224
+ }
225
+ const remedy = held.live ? `It is the LIVE branch, so it cannot be deleted. Pick a label that is free (\`${free}\` is), or make another branch live first (\`xanosdk workspace branch set-live <other>${pipedYes()}${contextFlags()}\`) and then delete it.` : `Pick a label that is free (\`${free}\` is), or delete it first with \`xanosdk workspace branch delete ${shellWord(held.label)}${pipedYes()}${contextFlags()}\`.`;
226
+ throw new BranchTakenError(
227
+ `A branch named ${shown} already exists in this workspace.
228
+ Deploying into it is not offered: it would be a fresh import over a branch someone may be reviewing, and the SDK cannot tell those apart.
229
+ ` + remedy,
230
+ held.label,
231
+ free
232
+ );
233
+ }
234
+ var BranchTakenError = class extends Error {
235
+ constructor(message, label, freeLabel) {
236
+ super(message);
237
+ this.label = label;
238
+ this.details = { conflictsWith: { branch: label }, ...freeLabel === void 0 ? {} : { freeLabel } };
239
+ }
240
+ label;
241
+ name = "BranchTakenError";
242
+ code = "SDK_BRANCH_TAKEN";
243
+ exitCode = 2;
244
+ details;
245
+ };
246
+ function derivedLabelTail(now, random = Math.random) {
247
+ const stamp = now.toISOString().replace(/[-:]/g, "").replace(/\.\d+Z$/, "Z");
248
+ const tag = Math.floor(random() * 65536).toString(16).padStart(4, "0");
249
+ return `${stamp}-${tag}`;
250
+ }
251
+ function freeBranchLabel(branches, label, random = Math.random) {
252
+ const taken = new Set(branches.map((b) => b.label.trim()));
253
+ for (; ; ) {
254
+ const candidate = `${label}-${Math.floor(random() * 65536).toString(16).padStart(4, "0")}`;
255
+ if (!taken.has(candidate)) return candidate;
256
+ }
257
+ }
258
+ function requireBranch(branches, label) {
259
+ const found = findBranch(branches, label);
260
+ if (found !== void 0) return found;
261
+ const known = branches.map((b) => /\s/.test(b.label) ? JSON.stringify(b.label) : b.label).join(", ");
262
+ const near = suggestAll(label.trim(), branches.map((b) => b.label));
263
+ throw new BranchNotFoundError(
264
+ `This workspace has no branch named "${label}".
265
+ ` + (known === "" ? `It reports no branches at all.` : `It has: ${known}`) + (near.length === 0 ? "" : `
266
+ Did you mean ${near.map((n) => JSON.stringify(n)).join(" or ")}?`),
267
+ near
268
+ );
269
+ }
270
+
271
+ export {
272
+ BranchHttpError,
273
+ DEFAULT_BRANCH_LABEL,
274
+ BranchLabelError,
275
+ BranchNotFoundError,
276
+ BRANCH_LABEL_PATTERN,
277
+ assertUsableBranchLabel,
278
+ findBranch,
279
+ listBranchListing,
280
+ listBranches,
281
+ liveBranchLabel,
282
+ createBranch,
283
+ setLiveBranch,
284
+ deleteBranch,
285
+ assertBranchAbsent,
286
+ BranchTakenError,
287
+ derivedLabelTail,
288
+ freeBranchLabel,
289
+ requireBranch
290
+ };
291
+ //# sourceMappingURL=chunk-TRJCALW3.js.map
@@ -0,0 +1,133 @@
1
+ // src/fields/field.ts
2
+ var COLUMN_NULLABLE_TYPES = [
3
+ "blob",
4
+ "blob_img",
5
+ "blob_video",
6
+ "blob_audio",
7
+ "geo_point",
8
+ "geo_multipoint",
9
+ "geo_linestring",
10
+ "geo_multilinestring",
11
+ "geo_polygon",
12
+ "geo_multipolygon",
13
+ "uuid",
14
+ "vector"
15
+ ];
16
+ var COLUMN_NULLABLE_BY_DEFAULT = new Set(COLUMN_NULLABLE_TYPES);
17
+ var INPUT_NULLABLE_TYPES = [...COLUMN_NULLABLE_TYPES, "file", "date", "epochms"];
18
+ var INPUT_NULLABLE_BY_DEFAULT = new Set(INPUT_NULLABLE_TYPES);
19
+ var INPUT_CONTEXT = {
20
+ customize: {},
21
+ marketItem: { id: 0, version: 0, guid: "" },
22
+ includeDescription: true,
23
+ nullableTypes: INPUT_NULLABLE_BY_DEFAULT
24
+ };
25
+ var COLUMN_CONTEXT = {
26
+ customize: {},
27
+ marketItem: { id: 0, version: 0, guid: "" },
28
+ includeDescription: true,
29
+ nullableTypes: COLUMN_NULLABLE_BY_DEFAULT
30
+ };
31
+ function defaultNullable(type, ctx) {
32
+ return ctx.nullableTypes.has(type);
33
+ }
34
+ function parseMethod(spec) {
35
+ if (typeof spec !== "string") return { name: spec.name, disabled: false, arg: spec.arg ?? [] };
36
+ const [name = spec, ...arg] = spec.split(/:(?<!^(?:ok|pattern|salt|startsWith):.+)/);
37
+ return { name, disabled: false, arg: arg.map((part) => part !== "" && String(Number(part)) === part ? Number(part) : part) };
38
+ }
39
+ function encodeMethods(methods) {
40
+ return (methods ?? []).map(parseMethod);
41
+ }
42
+ function encodeCustomize(customize) {
43
+ const out = /* @__PURE__ */ Object.create(null);
44
+ for (const [name, node] of Object.entries(customize ?? {})) {
45
+ out[name] = {
46
+ hidden: node.hidden ?? false,
47
+ default: node.default !== void 0 ? String(node.default) : "",
48
+ methods: encodeMethods(node.methods),
49
+ required: node.required ?? false,
50
+ customize: encodeCustomize(node.customize)
51
+ };
52
+ }
53
+ return out;
54
+ }
55
+ var RAW_FIELD = /* @__PURE__ */ Symbol.for("xanosdk.field.rawEnvelope");
56
+ function defaultEntry(options) {
57
+ if (options.noDefault === true) return {};
58
+ return { default: options.default !== void 0 ? String(options.default) : "" };
59
+ }
60
+ function isListColumn(col) {
61
+ return (col.style?.type ?? (col.array ? "list" : "single")) === "list";
62
+ }
63
+ function encodeField(name, type, options, ctx) {
64
+ const rawEnvelope = options?.[RAW_FIELD];
65
+ if (rawEnvelope !== void 0) return rawEnvelope;
66
+ const field = {
67
+ name,
68
+ type,
69
+ _xsid: "",
70
+ nullable: options.nullable ?? ctx.nullableTypes.has(type),
71
+ ...defaultEntry(options),
72
+ merge: options.merge ?? false,
73
+ hidden: options.hidden !== void 0 ? [...options.hidden] : [],
74
+ override: [],
75
+ customize: options.customize !== void 0 ? encodeCustomize(options.customize) : ctx.customize,
76
+ required: options.required ?? false,
77
+ values: options.values ?? [],
78
+ mode: options.mode ?? "",
79
+ format: options.format ?? "",
80
+ sensitive: options.sensitive ?? false,
81
+ list: options.list ?? { min: "", max: "" },
82
+ vector: options.vector ?? { size: 3 },
83
+ access: options.access ?? "public",
84
+ style: options.style ?? { type: options.array ? "list" : "single" },
85
+ children: (options.children ?? []).map((ch) => encodeField(ch.name, ch.type, ch, ctx)),
86
+ methods: encodeMethods(options.methods),
87
+ market_item: ctx.marketItem,
88
+ is_settings_registry: false
89
+ };
90
+ if (ctx.includeDescription) {
91
+ field.description = options.description ?? "";
92
+ }
93
+ return field;
94
+ }
95
+ var CATALOG_BY_TYPE = {
96
+ text: "text",
97
+ int: "int",
98
+ decimal: "decimal",
99
+ bool: "bool",
100
+ uuid: "uuid",
101
+ date: "date",
102
+ email: "email",
103
+ password: "password",
104
+ json: "json",
105
+ epochms: "timestamp",
106
+ blob_img: "image",
107
+ blob_video: "video",
108
+ blob_audio: "audio",
109
+ blob: "attachment",
110
+ geo_point: "geo.point",
111
+ geo_multipoint: "geo.multipoint",
112
+ geo_linestring: "geo.linestring",
113
+ geo_multilinestring: "geo.multilinestring",
114
+ geo_polygon: "geo.polygon",
115
+ geo_multipolygon: "geo.multipolygon"
116
+ };
117
+ function authoredFieldType(type) {
118
+ return Object.hasOwn(CATALOG_BY_TYPE, type) ? CATALOG_BY_TYPE[type] : type;
119
+ }
120
+
121
+ export {
122
+ COLUMN_NULLABLE_TYPES,
123
+ INPUT_CONTEXT,
124
+ COLUMN_CONTEXT,
125
+ defaultNullable,
126
+ parseMethod,
127
+ RAW_FIELD,
128
+ isListColumn,
129
+ encodeField,
130
+ CATALOG_BY_TYPE,
131
+ authoredFieldType
132
+ };
133
+ //# sourceMappingURL=chunk-TTEIYD5P.js.map