@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,365 @@
1
+ import {
2
+ sha256Hex
3
+ } from "./chunk-NA3PXMEF.js";
4
+ import {
5
+ normalizeEngineVersion
6
+ } from "./chunk-APWXY5SL.js";
7
+ import {
8
+ localEngineBinDir,
9
+ localEngineHome
10
+ } from "./chunk-AM4FKL4J.js";
11
+ import {
12
+ SDK_PACKAGE,
13
+ composeToolchainConfig,
14
+ readProjectManifest,
15
+ readToolchainBlock,
16
+ writeToolchainConfig
17
+ } from "./chunk-JTUKLCXS.js";
18
+ import {
19
+ atomicWrite
20
+ } from "./chunk-LLNZGEFK.js";
21
+
22
+ // src/deploy/local-engine-cache.ts
23
+ import {
24
+ lstatSync,
25
+ mkdirSync,
26
+ mkdtempSync,
27
+ readFileSync,
28
+ readdirSync,
29
+ realpathSync,
30
+ renameSync,
31
+ rmSync,
32
+ statSync,
33
+ writeFileSync,
34
+ chmodSync
35
+ } from "fs";
36
+ import { randomBytes } from "crypto";
37
+ import { basename, isAbsolute, join, relative, sep } from "path";
38
+ var ENGINE_EXECUTABLE_FILE = "engine";
39
+ var ENGINE_RECORD_FILE = "engine.json";
40
+ var RELEASE_VERSION = /^v\d+\.\d+\.\d+$/;
41
+ var OVERRIDE_DIR = /^src-[0-9a-f]{16}$/;
42
+ function engineEntryDirName(key) {
43
+ if ("version" in key) {
44
+ if (!RELEASE_VERSION.test(key.version)) {
45
+ throw new Error(
46
+ `"${key.version}" is not an engine version \u2014 they are written vMAJOR.MINOR.PATCH, like v0.1.5 \u2014 so no cache path was built from it.`
47
+ );
48
+ }
49
+ return key.version;
50
+ }
51
+ return `src-${sha256Hex(key.source).slice(0, 16)}`;
52
+ }
53
+ function engineEntryDir(key, env = process.env) {
54
+ return join(localEngineBinDir(env), engineEntryDirName(key));
55
+ }
56
+ function ownerUid() {
57
+ return typeof process.getuid === "function" ? process.getuid() : void 0;
58
+ }
59
+ function assertSafeCacheDir(dir, env = process.env) {
60
+ const home = localEngineHome(env);
61
+ let base;
62
+ try {
63
+ base = realpathSync(home);
64
+ } catch {
65
+ return;
66
+ }
67
+ const rel = relative(home, dir);
68
+ const tail = rel === "" || rel.startsWith("..") || isAbsolute(rel) ? [] : rel.split(sep);
69
+ let current = base;
70
+ for (const part of [void 0, ...tail]) {
71
+ if (part !== void 0) current = join(current, part);
72
+ let st;
73
+ try {
74
+ st = lstatSync(current);
75
+ } catch {
76
+ return;
77
+ }
78
+ if (st.isSymbolicLink()) {
79
+ throw new Error(
80
+ `The local engine cache path is a symlink, and a symlink points somewhere these checks never looked: ${current}
81
+ Replace it with a real directory, or point the cache elsewhere with XANOSDK_LOCAL_ENGINE_HOME.`
82
+ );
83
+ }
84
+ if ((st.mode & 18) !== 0) {
85
+ throw new Error(
86
+ `The local engine cache is writable by other users on this machine: ${current}
87
+ Anything that can write there can replace the engine executable, and an executable this SDK spawns is not a file to leave open. Run \`chmod go-w\` on it, or point the cache somewhere private with XANOSDK_LOCAL_ENGINE_HOME.`
88
+ );
89
+ }
90
+ const uid = ownerUid();
91
+ if (uid !== void 0 && st.uid !== uid) {
92
+ throw new Error(
93
+ `The local engine cache is owned by another user: ${current}
94
+ An executable this SDK spawns has to be one only you can replace. Take ownership of it, or point the cache somewhere you own with XANOSDK_LOCAL_ENGINE_HOME.`
95
+ );
96
+ }
97
+ }
98
+ }
99
+ function readRecord(dir) {
100
+ try {
101
+ const raw = JSON.parse(readFileSync(join(dir, ENGINE_RECORD_FILE), "utf8"));
102
+ if (typeof raw.url !== "string" || typeof raw.digest !== "string") return void 0;
103
+ if (raw.source !== "release" && raw.source !== "override") return void 0;
104
+ if (raw.source === "release" && typeof raw.version !== "string") return void 0;
105
+ return {
106
+ source: raw.source,
107
+ ...raw.source === "release" ? { version: raw.version } : {},
108
+ url: raw.url,
109
+ digest: raw.digest,
110
+ fetchedAt: typeof raw.fetchedAt === "number" ? raw.fetchedAt : 0,
111
+ ...typeof raw.archiveDigest === "string" ? { archiveDigest: raw.archiveDigest } : {}
112
+ };
113
+ } catch {
114
+ return void 0;
115
+ }
116
+ }
117
+ function entryAt(dir, name) {
118
+ const record = readRecord(dir);
119
+ if (record === void 0) return void 0;
120
+ if (RELEASE_VERSION.test(name)) {
121
+ if (record.source !== "release" || record.version !== name) return void 0;
122
+ } else if (OVERRIDE_DIR.test(name)) {
123
+ if (record.source !== "override") return void 0;
124
+ } else {
125
+ return void 0;
126
+ }
127
+ const executable = join(dir, ENGINE_EXECUTABLE_FILE);
128
+ try {
129
+ if (!statSync(executable).isFile()) return void 0;
130
+ } catch {
131
+ return void 0;
132
+ }
133
+ return {
134
+ dir,
135
+ executable,
136
+ source: record.source,
137
+ ...record.version !== void 0 ? { version: record.version } : {},
138
+ url: record.url,
139
+ digest: record.digest,
140
+ fetchedAt: record.fetchedAt,
141
+ ...record.archiveDigest !== void 0 ? { archiveDigest: record.archiveDigest } : {}
142
+ };
143
+ }
144
+ function readEngineEntry(key, env = process.env) {
145
+ const name = engineEntryDirName(key);
146
+ return entryAt(join(localEngineBinDir(env), name), name);
147
+ }
148
+ function entriesMatching(pattern, env) {
149
+ const bin = localEngineBinDir(env);
150
+ let names;
151
+ try {
152
+ names = readdirSync(bin, { withFileTypes: true }).filter((e) => e.isDirectory() && pattern.test(e.name)).map((e) => e.name);
153
+ } catch {
154
+ return [];
155
+ }
156
+ return names.flatMap((name) => entryAt(join(bin, name), name) ?? []);
157
+ }
158
+ function semverParts(version) {
159
+ return version.slice(1).split(".").map(Number);
160
+ }
161
+ function listReleaseEntries(env = process.env) {
162
+ return entriesMatching(RELEASE_VERSION, env).sort((a, b) => {
163
+ const pa = semverParts(a.version);
164
+ const pb = semverParts(b.version);
165
+ for (let i = 0; i < 3; i++) if (pa[i] !== pb[i]) return pb[i] - pa[i];
166
+ return 0;
167
+ });
168
+ }
169
+ function listOverrideEntries(env = process.env) {
170
+ return entriesMatching(OVERRIDE_DIR, env).sort((a, b) => b.fetchedAt - a.fetchedAt);
171
+ }
172
+ var LEGACY_DIR = /^[0-9a-f]{16}$/;
173
+ function listLegacyCacheDirs(env = process.env) {
174
+ const bin = localEngineBinDir(env);
175
+ try {
176
+ return readdirSync(bin, { withFileTypes: true }).filter((e) => e.isDirectory() && LEGACY_DIR.test(e.name)).map((e) => join(bin, e.name)).sort();
177
+ } catch {
178
+ return [];
179
+ }
180
+ }
181
+ function verifiedEngineExecutable(entry, env = process.env) {
182
+ assertSafeCacheDir(entry.dir, env);
183
+ let bytes;
184
+ try {
185
+ bytes = readFileSync(entry.executable);
186
+ } catch {
187
+ throw new Error(
188
+ `The cached engine is gone from ${entry.dir}.
189
+ Re-run the same \`xanosdk deploy --local-engine\` and it is fetched again.`
190
+ );
191
+ }
192
+ const actual = sha256Hex(bytes);
193
+ if (actual !== entry.digest) {
194
+ throw new Error(
195
+ `The cached engine's bytes do not match the digest recorded when it was fetched, so it will not be run: ${entry.dir}
196
+ Something replaced it after it was downloaded. Delete that directory and re-run the same \`xanosdk deploy --local-engine\` to get it again.`
197
+ );
198
+ }
199
+ return entry.executable;
200
+ }
201
+ function stageEngine(opts) {
202
+ const env = opts.env ?? process.env;
203
+ const key = opts.version !== void 0 ? { version: opts.version } : { source: opts.url };
204
+ const dir = engineEntryDir(key, env);
205
+ const source = opts.version !== void 0 ? "release" : "override";
206
+ const bin = localEngineBinDir(env);
207
+ assertSafeCacheDir(bin, env);
208
+ mkdirSync(bin, { recursive: true, mode: 448 });
209
+ assertSafeCacheDir(bin, env);
210
+ const staging = mkdtempSync(join(bin, ".staging-"));
211
+ try {
212
+ const executable = join(staging, ENGINE_EXECUTABLE_FILE);
213
+ writeFileSync(executable, opts.executable, { mode: 384 });
214
+ const record = {
215
+ source,
216
+ ...opts.version !== void 0 ? { version: opts.version } : {},
217
+ url: opts.url,
218
+ digest: opts.digest,
219
+ fetchedAt: Date.now(),
220
+ ...opts.archiveDigest !== void 0 ? { archiveDigest: opts.archiveDigest } : {}
221
+ };
222
+ atomicWrite(join(staging, ENGINE_RECORD_FILE), JSON.stringify(record, null, 2) + "\n", {
223
+ mode: 384
224
+ });
225
+ chmodSync(executable, 448);
226
+ opts.beforeCommit?.(staging);
227
+ const winner = publishStaged(staging, dir, opts.digest, bin);
228
+ if (winner !== void 0) return winner;
229
+ return {
230
+ dir,
231
+ executable: join(dir, ENGINE_EXECUTABLE_FILE),
232
+ source,
233
+ ...opts.version !== void 0 ? { version: opts.version } : {},
234
+ url: opts.url,
235
+ digest: opts.digest,
236
+ fetchedAt: record.fetchedAt,
237
+ ...opts.archiveDigest !== void 0 ? { archiveDigest: opts.archiveDigest } : {}
238
+ };
239
+ } catch (err) {
240
+ rmSync(staging, { recursive: true, force: true });
241
+ throw err;
242
+ }
243
+ }
244
+ var ENTRY_TAKEN = /* @__PURE__ */ new Set(["ENOTEMPTY", "EEXIST"]);
245
+ function publishStaged(staging, dir, digest, bin) {
246
+ const name = basename(dir);
247
+ for (let attempt = 0; attempt < 3; attempt++) {
248
+ try {
249
+ renameSync(staging, dir);
250
+ return void 0;
251
+ } catch (err) {
252
+ if (!ENTRY_TAKEN.has(err.code ?? "")) throw err;
253
+ }
254
+ const existing = entryAt(dir, name);
255
+ if (existing !== void 0 && existing.digest === digest) {
256
+ rmSync(staging, { recursive: true, force: true });
257
+ return existing;
258
+ }
259
+ const retired = join(bin, `.retired-${randomBytes(8).toString("hex")}`);
260
+ try {
261
+ renameSync(dir, retired);
262
+ } catch (err) {
263
+ if (err.code === "ENOENT") continue;
264
+ throw err;
265
+ }
266
+ rmSync(retired, { recursive: true, force: true });
267
+ }
268
+ throw new Error(
269
+ `Another run kept writing a different engine to ${dir} while this one staged, so this run stopped without publishing its own. Let the other deploy finish and re-run this one.`
270
+ );
271
+ }
272
+ function diskBytes(path) {
273
+ let st;
274
+ try {
275
+ st = lstatSync(path);
276
+ } catch {
277
+ return 0;
278
+ }
279
+ if (!st.isDirectory()) return st.size;
280
+ let total = 0;
281
+ let names;
282
+ try {
283
+ names = readdirSync(path);
284
+ } catch {
285
+ return 0;
286
+ }
287
+ for (const name of names) total += diskBytes(join(path, name));
288
+ return total;
289
+ }
290
+
291
+ // src/deploy/local-engine-pin.ts
292
+ import { existsSync, writeFileSync as writeFileSync2 } from "fs";
293
+ import { join as join2 } from "path";
294
+ var PIN_FIELD = "localEngine";
295
+ function isUnusablePin(pin) {
296
+ return typeof pin === "object" && pin !== null;
297
+ }
298
+ function readPin(projectDir, opts = {}) {
299
+ const path = join2(projectDir, "package.json");
300
+ if (!existsSync(path)) return void 0;
301
+ const manifest = readProjectManifest(projectDir);
302
+ if (manifest === null) {
303
+ opts.warn?.(
304
+ `${path} could not be parsed as a JSON object, so its local engine pin was not read.`
305
+ );
306
+ return { unusable: void 0 };
307
+ }
308
+ const own = readToolchainBlock(projectDir, manifest)[SDK_PACKAGE];
309
+ if (typeof own !== "object" || own === null || Array.isArray(own)) return null;
310
+ if (!(PIN_FIELD in own)) return null;
311
+ const value = own[PIN_FIELD];
312
+ if (typeof value === "string") {
313
+ try {
314
+ return normalizeEngineVersion(value);
315
+ } catch {
316
+ }
317
+ }
318
+ opts.warn?.(
319
+ `the "${PIN_FIELD}" pin under "xanosdk"."${SDK_PACKAGE}" in ${path} is ${JSON.stringify(value)}, not a version like "v0.1.5", so it was ignored.`
320
+ );
321
+ return { unusable: value };
322
+ }
323
+ function writePin(projectDir, version) {
324
+ if (!RELEASE_VERSION.test(version)) {
325
+ throw new Error(
326
+ `cannot pin local engine version ${JSON.stringify(version)}: expected vMAJOR.MINOR.PATCH, like "v0.1.5".`
327
+ );
328
+ }
329
+ const path = join2(projectDir, "package.json");
330
+ if (!existsSync(path)) {
331
+ const text = composeToolchainConfig("{}\n", { [SDK_PACKAGE]: { [PIN_FIELD]: version } });
332
+ try {
333
+ writeFileSync2(path, text, { flag: "wx" });
334
+ return { created: true, changed: true, path };
335
+ } catch (err) {
336
+ if (err.code !== "EEXIST") throw err;
337
+ }
338
+ }
339
+ const block = readToolchainBlock(projectDir);
340
+ const own = block[SDK_PACKAGE];
341
+ const next = {
342
+ ...block,
343
+ [SDK_PACKAGE]: {
344
+ ...typeof own === "object" && own !== null && !Array.isArray(own) ? own : {},
345
+ [PIN_FIELD]: version
346
+ }
347
+ };
348
+ const changed = writeToolchainConfig(projectDir, next);
349
+ return { created: false, changed, path };
350
+ }
351
+
352
+ export {
353
+ RELEASE_VERSION,
354
+ readEngineEntry,
355
+ listReleaseEntries,
356
+ listOverrideEntries,
357
+ listLegacyCacheDirs,
358
+ verifiedEngineExecutable,
359
+ stageEngine,
360
+ diskBytes,
361
+ isUnusablePin,
362
+ readPin,
363
+ writePin
364
+ };
365
+ //# sourceMappingURL=chunk-6ELFRN3P.js.map