@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
package/dist/bundle.js ADDED
@@ -0,0 +1,153 @@
1
+ import {
2
+ linkedTableOf,
3
+ tableRefOf
4
+ } from "./chunk-EHP3WPEG.js";
5
+ import {
6
+ deepEqual,
7
+ normalize
8
+ } from "./chunk-L5JYN3NM.js";
9
+ import {
10
+ STATEMENT_SURFACES,
11
+ sPathOf
12
+ } from "./chunk-Q7DGTQ5G.js";
13
+ import "./chunk-G554NZNI.js";
14
+ import "./chunk-N5GKCWE5.js";
15
+ import "./chunk-OXA6PSZT.js";
16
+ import "./chunk-VAX3UZOY.js";
17
+ import "./chunk-NZOWWHU5.js";
18
+ import "./chunk-4BW2SG2N.js";
19
+ import "./chunk-TTEIYD5P.js";
20
+ import "./chunk-CIMQZRRE.js";
21
+ import {
22
+ sha1Bytes
23
+ } from "./chunk-OHX6MIUZ.js";
24
+ import "./chunk-36JUQZVQ.js";
25
+ import "./chunk-PZ5AY32C.js";
26
+
27
+ // src/bundle/catalog.ts
28
+ var cached;
29
+ function statementCatalog() {
30
+ if (cached) return cached;
31
+ const map = /* @__PURE__ */ new Map();
32
+ for (const [surface, storedName] of STATEMENT_SURFACES) {
33
+ const existing = map.get(storedName);
34
+ if (existing) {
35
+ map.set(storedName, { ...existing, surfaces: [...existing.surfaces, surface] });
36
+ continue;
37
+ }
38
+ map.set(storedName, {
39
+ storedName,
40
+ surface,
41
+ sPath: sPathOf(surface),
42
+ surfaces: [surface]
43
+ });
44
+ }
45
+ cached = map;
46
+ return map;
47
+ }
48
+
49
+ // src/bundle/walk.ts
50
+ var SUB_STACK_KEYS = ["if", "elif", "else", "then", "run"];
51
+ var SUB_STACK_LABELS = {
52
+ "mvp:conditional": { if: "then", elif: "elif", else: "else" },
53
+ "mvp:conditional_elif": { if: "then" },
54
+ "mvp:switch": { elif: "cases", else: "default" },
55
+ "mvp:switch_case": { if: "body" },
56
+ "mvp:try_catch": { if: "try", else: "catch", then: "finally" }
57
+ };
58
+ var isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
59
+ function runOf(value) {
60
+ if (!isRecord(value)) return null;
61
+ const run = value.run;
62
+ return Array.isArray(run) ? run : null;
63
+ }
64
+ function subStacks(raw) {
65
+ const context = raw?.context;
66
+ if (!isRecord(context)) return [];
67
+ const labels = (Object.hasOwn(SUB_STACK_LABELS, raw.name) ? SUB_STACK_LABELS[raw.name] : void 0) ?? {};
68
+ const found = [];
69
+ const push = (key, value) => {
70
+ const run = key === "run" ? Array.isArray(value) ? value : null : runOf(value);
71
+ if (!run) return;
72
+ found.push({ key, label: labels[key] ?? (key === "run" ? "body" : key), run });
73
+ };
74
+ for (const key of SUB_STACK_KEYS) {
75
+ if (Object.hasOwn(context, key)) push(key, context[key]);
76
+ }
77
+ for (const key of Object.keys(context)) {
78
+ if (!SUB_STACK_KEYS.includes(key)) push(key, context[key]);
79
+ }
80
+ return found;
81
+ }
82
+ function statementPath(segments) {
83
+ return segments.join(".");
84
+ }
85
+ function walk(run) {
86
+ const out = [];
87
+ const pending = [];
88
+ for (let i = run.length - 1; i >= 0; i--) {
89
+ pending.push({ raw: run[i], path: statementPath([i]), depth: 0 });
90
+ }
91
+ while (pending.length > 0) {
92
+ const frame = pending.pop();
93
+ out.push(frame);
94
+ const children = [];
95
+ for (const sub of subStacks(frame.raw)) {
96
+ for (let i = 0; i < sub.run.length; i++) {
97
+ children.push({
98
+ raw: sub.run[i],
99
+ path: statementPath([frame.path, sub.key, i]),
100
+ depth: frame.depth + 1
101
+ });
102
+ }
103
+ }
104
+ for (let i = children.length - 1; i >= 0; i--) pending.push(children[i]);
105
+ }
106
+ return out;
107
+ }
108
+
109
+ // src/bundle/hash.ts
110
+ var isRecord2 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
111
+ function withoutIgnoredInputs(value) {
112
+ if (Array.isArray(value)) return value.map(withoutIgnoredInputs);
113
+ if (!isRecord2(value)) return value;
114
+ const out = /* @__PURE__ */ Object.create(null);
115
+ for (const [key, member] of Object.entries(value)) {
116
+ if (key === "input" && Array.isArray(member)) {
117
+ out[key] = member.filter((entry) => !(isRecord2(entry) && entry.ignore === true)).map(withoutIgnoredInputs);
118
+ continue;
119
+ }
120
+ out[key] = withoutIgnoredInputs(member);
121
+ }
122
+ return out;
123
+ }
124
+ function canonicalJson(value) {
125
+ if (Array.isArray(value)) return `[${value.map(canonicalJson).join(",")}]`;
126
+ if (isRecord2(value)) {
127
+ const parts = Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key])}`);
128
+ return `{${parts.join(",")}}`;
129
+ }
130
+ return value === void 0 ? "null" : JSON.stringify(value);
131
+ }
132
+ var HEX = "0123456789abcdef";
133
+ function structuralHash(raw) {
134
+ const reduced = withoutIgnoredInputs(normalize(raw));
135
+ const bytes = sha1Bytes(canonicalJson(reduced));
136
+ let hex = "";
137
+ for (const byte of bytes) hex += HEX[byte >> 4] + HEX[byte & 15];
138
+ return hex;
139
+ }
140
+ export {
141
+ SUB_STACK_KEYS,
142
+ canonicalJson,
143
+ deepEqual,
144
+ linkedTableOf,
145
+ normalize,
146
+ statementCatalog,
147
+ statementPath,
148
+ structuralHash,
149
+ subStacks,
150
+ tableRefOf,
151
+ walk
152
+ };
153
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1,41 @@
1
+ import {
2
+ fixtureDirForKind
3
+ } from "./chunk-NWKXM5RD.js";
4
+ import "./chunk-6MR5TI5V.js";
5
+ import "./chunk-5ZSO4T2G.js";
6
+ import "./chunk-XNCP4KYO.js";
7
+ import "./chunk-NZOWWHU5.js";
8
+ import "./chunk-4BW2SG2N.js";
9
+ import "./chunk-CIMQZRRE.js";
10
+ import "./chunk-OHX6MIUZ.js";
11
+ import "./chunk-36JUQZVQ.js";
12
+ import "./chunk-PZ5AY32C.js";
13
+
14
+ // src/validate/capture.ts
15
+ import { mkdirSync, writeFileSync } from "fs";
16
+ import { resolve as resolvePath, dirname } from "path";
17
+ function captureFixtures(entries, outDir = "validate-out") {
18
+ const written = [];
19
+ const madeDirs = /* @__PURE__ */ new Set();
20
+ for (const entry of entries) {
21
+ if (entry.fetched === void 0) continue;
22
+ const dir = fixtureDirForKind(entry.kind);
23
+ const path = dir === void 0 ? resolvePath(outDir, `${safeName(entry.name)}.json`) : resolvePath(outDir, dir, `${safeName(entry.name)}.json`);
24
+ const parent = dirname(path);
25
+ if (!madeDirs.has(parent)) {
26
+ mkdirSync(parent, { recursive: true });
27
+ madeDirs.add(parent);
28
+ }
29
+ writeFileSync(path, JSON.stringify(entry.fetched, null, 2) + "\n", "utf8");
30
+ written.push({ name: entry.name, path });
31
+ }
32
+ return written;
33
+ }
34
+ function safeName(name) {
35
+ const cleaned = name.replace(/[^a-zA-Z0-9._-]+/g, "_").replace(/^_+|_+$/g, "");
36
+ return cleaned === "" ? "fixture" : cleaned;
37
+ }
38
+ export {
39
+ captureFixtures
40
+ };
41
+ //# sourceMappingURL=capture-WAXPD7DR.js.map
@@ -0,0 +1,23 @@
1
+ // src/statements/superseded.ts
2
+ var SUPERSEDED_STATEMENTS = /* @__PURE__ */ new Map([
3
+ // Four crypto families, each phased forward with breaking changes between
4
+ // versions. The engine still registers a class for every one of them.
5
+ ["mvp:crypto_jwe_decode", "mvp:crypto_jwe_decode2"],
6
+ ["mvp:crypto_jwe_encode", "mvp:crypto_jwe_encode3"],
7
+ ["mvp:crypto_jwe_encode2", "mvp:crypto_jwe_encode3"],
8
+ ["mvp:crypto_jws_decode", "mvp:crypto_jws_decode2"],
9
+ ["mvp:crypto_jws_encode", "mvp:crypto_jws_encode2"],
10
+ // Retired outright — an old third-party log connector with no successor.
11
+ ["mvp:connect_ncscale_send_log", ""]
12
+ ]);
13
+ function supersededBy(storedName, surfaceOf) {
14
+ const successor = SUPERSEDED_STATEMENTS.get(storedName);
15
+ if (successor === void 0 || successor === "") return null;
16
+ return surfaceOf(successor) ?? successor;
17
+ }
18
+
19
+ export {
20
+ SUPERSEDED_STATEMENTS,
21
+ supersededBy
22
+ };
23
+ //# sourceMappingURL=chunk-27GWNP2I.js.map
@@ -0,0 +1,177 @@
1
+ import {
2
+ assertCanonical,
3
+ buildWorkspaceHistory,
4
+ encodeMiddlewareList
5
+ } from "./chunk-5V5XU32D.js";
6
+ import {
7
+ brandDef
8
+ } from "./chunk-ERVIASGL.js";
9
+ import {
10
+ registerKind
11
+ } from "./chunk-4POWHT2K.js";
12
+ import {
13
+ findNonJson,
14
+ nonJsonMessage
15
+ } from "./chunk-H2V3N23D.js";
16
+ import {
17
+ env
18
+ } from "./chunk-OXA6PSZT.js";
19
+ import {
20
+ describeEntry
21
+ } from "./chunk-CIMQZRRE.js";
22
+
23
+ // src/kinds/workspace-config.ts
24
+ var LEGACY_REALTIME = {
25
+ hash: "",
26
+ mode: "",
27
+ enabled: false,
28
+ channels: []
29
+ };
30
+ var DEFAULT_DOCUMENTATION = {
31
+ token: "",
32
+ whitelist: {},
33
+ require_token: false
34
+ };
35
+ var DEFAULT_PREFERENCES = {
36
+ allow_push: false,
37
+ track_performance: true,
38
+ use_internal_docs: false
39
+ };
40
+ var DEFAULT_SETTINGS = {
41
+ ai_enabled: false,
42
+ ai_settings: {
43
+ providers: {
44
+ google: { model: "", api_key: "" },
45
+ openai: { model: "", api_key: "" },
46
+ anthropic: { model: "", api_key: "" },
47
+ "azure-openai": { model: "", api_key: "", base_url: "", api_version: "" }
48
+ },
49
+ default_provider: "free"
50
+ },
51
+ hide_xano_agent: false
52
+ };
53
+ function mergeOverDefaults(defaults, authored, field = "") {
54
+ return mergeOver(
55
+ defaults,
56
+ authored ?? {},
57
+ field
58
+ );
59
+ }
60
+ function mergeOver(base, over, path) {
61
+ const out = { ...base };
62
+ for (const [key, value] of Object.entries(over)) {
63
+ const under = out[key];
64
+ const at = path === "" ? key : `${path}.${key}`;
65
+ out[key] = isPlainRecord(under) && isPlainRecord(value) ? mergeOver(under, value, at) : plainClone(value, at);
66
+ }
67
+ return out;
68
+ }
69
+ function plainClone(value, at) {
70
+ const found = findNonJson(value);
71
+ if (found !== void 0) {
72
+ const path = found.path === "" ? at : found.path.startsWith("[") ? `${at}${found.path}` : `${at}.${found.path}`;
73
+ throw new Error(nonJsonMessage("workspaceConfig", path, found.value));
74
+ }
75
+ return structuredClone(value);
76
+ }
77
+ function isPlainRecord(value) {
78
+ return value !== null && typeof value === "object" && !Array.isArray(value);
79
+ }
80
+ function encodeWorkspaceEnv(env2) {
81
+ return Object.entries(env2).map(([name, value]) => {
82
+ if (value === void 0) value = "";
83
+ if (typeof value !== "string") {
84
+ throw new Error(
85
+ `workspaceConfig: env "${name}" is ${value === null ? "null" : typeof value}; an env value is a string. Write \`String(value)\`, or \`""\` to leave it for the backend's .env to supply.`
86
+ );
87
+ }
88
+ return { name, value, market_item: [] };
89
+ });
90
+ }
91
+ function encodeWorkspaceMiddleware(m) {
92
+ return {
93
+ function_pre: encodeMiddlewareList(m.function?.pre),
94
+ function_post: encodeMiddlewareList(m.function?.post),
95
+ query_pre: encodeMiddlewareList(m.query?.pre),
96
+ query_post: encodeMiddlewareList(m.query?.post),
97
+ task_pre: encodeMiddlewareList(m.task?.pre),
98
+ task_post: encodeMiddlewareList(m.task?.post),
99
+ tool_pre: encodeMiddlewareList(m.tool?.pre),
100
+ tool_post: encodeMiddlewareList(m.tool?.post)
101
+ };
102
+ }
103
+ function encodeWorkspaceDocumentation(doc) {
104
+ const { token, ...rest } = doc;
105
+ return typeof token === "string" && token !== "" ? { ...rest, token } : rest;
106
+ }
107
+ function encodeWorkspaceConfig(def) {
108
+ if (def.name === void 0 || def.name === null) {
109
+ throw new Error(
110
+ 'workspace: no name. `workspaceConfig({ name })` is optional because the config inherits the name from `workspace("\u2026")` \u2014 so either start from `workspace("my-app")` or give this config an explicit `name`.'
111
+ );
112
+ }
113
+ assertCanonical(`workspace "${def.name}"`, def.canonical);
114
+ return {
115
+ name: def.name,
116
+ description: def.description ?? "",
117
+ canonical: def.canonical ?? "",
118
+ use_xdo: def.use_xdo ?? false,
119
+ preferences: mergeOverDefaults(DEFAULT_PREFERENCES, def.preferences, "preferences"),
120
+ // PRESENCE-ONLY, both of them. `?? DEFAULT` here is what made the wipe
121
+ // expressible: an author who deleted a secret-bearing block from source got
122
+ // `{token:"", whitelist:{}, require_token:false}` sent to the target, which
123
+ // is a Private doc site turned public with nothing said. Omission now means
124
+ // "leave the live block alone", which is what an author deleting it meant.
125
+ ...def.realtime !== void 0 ? { realtime: def.realtime } : {},
126
+ ...def.documentation !== void 0 ? { documentation: encodeWorkspaceDocumentation(def.documentation) } : {},
127
+ swagger: def.swagger ?? false,
128
+ ...def.middleware !== void 0 ? { middleware: encodeWorkspaceMiddleware(def.middleware) } : {},
129
+ ...def.history !== void 0 ? { history: buildWorkspaceHistory(def.history) } : {},
130
+ env: def.env ? encodeWorkspaceEnv(def.env) : [],
131
+ settings: mergeOverDefaults(DEFAULT_SETTINGS, def.settings, "settings"),
132
+ // Presence-preserving: each key is written only when the author set it, and
133
+ // each nested optional likewise, so a pulled workspace re-exports to its own
134
+ // bytes whether or not the engine happened to store the `?=` default.
135
+ ...def.use_custom_names !== void 0 ? { use_custom_names: def.use_custom_names } : {},
136
+ ...def.defaults !== void 0 ? { defaults: { ...def.defaults } } : {},
137
+ ...def.datasources !== void 0 ? { datasources: def.datasources.map((d) => ({ ...d })) } : {},
138
+ ...def.datasource_live !== void 0 ? { datasource_live: { ...def.datasource_live } } : {}
139
+ };
140
+ }
141
+ var workspaceKind = {
142
+ name: "workspace",
143
+ payloadKey: "workspace",
144
+ encode: encodeWorkspaceConfig
145
+ };
146
+ registerKind(workspaceKind);
147
+ function workspaceConfig(def) {
148
+ return brandDef(def, "workspace");
149
+ }
150
+ function typedEnv(config) {
151
+ if (typeof config !== "object" || config === null || Array.isArray(config)) {
152
+ throw new Error(
153
+ `typedEnv() takes the workspaceConfig({ env }) it reads names from \u2014 got ${describeEntry(config)}.`
154
+ );
155
+ }
156
+ const declared = config.env;
157
+ if (declared !== void 0 && declared !== null && (typeof declared !== "object" || Array.isArray(declared))) {
158
+ throw new Error(`typedEnv(): the config's \`env\` must be a { NAME: value } record \u2014 got ${describeEntry(declared)}.`);
159
+ }
160
+ const out = {};
161
+ for (const name of Object.keys(config.env ?? {})) {
162
+ Object.defineProperty(out, name, { get: () => env(name), enumerable: true });
163
+ }
164
+ return out;
165
+ }
166
+
167
+ export {
168
+ LEGACY_REALTIME,
169
+ DEFAULT_DOCUMENTATION,
170
+ DEFAULT_PREFERENCES,
171
+ DEFAULT_SETTINGS,
172
+ encodeWorkspaceConfig,
173
+ workspaceKind,
174
+ workspaceConfig,
175
+ typedEnv
176
+ };
177
+ //# sourceMappingURL=chunk-2CMJZDCL.js.map
@@ -0,0 +1,302 @@
1
+ // src/workspace/diagnostics.ts
2
+ var ENV = "stack.env-undeclared";
3
+ var MIXED = "condition.mixed";
4
+ var DOCS_PUBLIC = "api-group.docs-public";
5
+ var ELICIT = "mcp.write-before-elicit";
6
+ var VALUES = [
7
+ "expression.ignore-empty-static-empty",
8
+ "value.interpolated-object",
9
+ "value.regex-operands-reversed",
10
+ "value.timezone-unknown",
11
+ "field.default-not-text",
12
+ "field.enum-default-not-a-value",
13
+ "field.email-default-invalid",
14
+ "field.input-default-invalid",
15
+ "value.obj-zero-based-numeric-keys",
16
+ "value.int-out-of-range"
17
+ ];
18
+ var STACK = /* @__PURE__ */ (() => [
19
+ ENV,
20
+ MIXED,
21
+ "stack.blank-table",
22
+ "stack.inp-undeclared",
23
+ "stack.unbound-var",
24
+ "storage.stored-file-input",
25
+ "stack.password-input-double-hash",
26
+ "stack.zip-password-absent",
27
+ "stack.to-throw-isolated-var",
28
+ "statement.reserved-input-name",
29
+ "statement.omitted-input",
30
+ "db.bulk-update-partial-item",
31
+ "db.internal-column-read",
32
+ "db.query-output-mixed-roots",
33
+ "db.query-output-totals-off",
34
+ "db.query-output-joined-column",
35
+ "db.query-output-unknown-column",
36
+ "db.output-unknown-column",
37
+ "db.query-output-not-envelope-rooted",
38
+ "db.query-envelope-read-unpaged",
39
+ "db.safe-ref-match-arg",
40
+ "db.null-match-arg",
41
+ "db.filter-operand-invalid",
42
+ "search.request-only-filter",
43
+ "switch.missing-break",
44
+ "stack.expect-outside-test",
45
+ "realtime.publish-unknown-server",
46
+ "realtime.publish-unknown-channel",
47
+ "redis.ratelimit-no-error",
48
+ "agent.args-placeholder-unpassed",
49
+ ...VALUES
50
+ ])();
51
+ var NO_CALLER = ["stack.auth-no-caller", "stack.auth-null-host"];
52
+ var TEST_LIVE = "test.live-datasource";
53
+ var TOOLSET = /* @__PURE__ */ (() => [ENV, MIXED, ...VALUES, "toolset.tool-reads-auth-ungated", "toolset.tool-ref-zero"])();
54
+ var ALLOWABLE_WARNINGS = /* @__PURE__ */ (() => ({
55
+ query: [
56
+ "query.path-segment-candidate",
57
+ TEST_LIVE,
58
+ ...STACK,
59
+ ...NO_CALLER,
60
+ "query.auth-table-unflagged",
61
+ "query.input-name-mangled",
62
+ "middleware.post-merge-list",
63
+ "response.unbound-return",
64
+ "mcp.elicit-outside-mcp"
65
+ ],
66
+ function: [TEST_LIVE, ...STACK, "function.reserved-input-name", "response.unbound-return"],
67
+ task: [...STACK, ...NO_CALLER, "mcp.elicit-outside-mcp"],
68
+ middleware: [
69
+ TEST_LIVE,
70
+ ...STACK,
71
+ "middleware.input-never-bound",
72
+ "middleware.inp-unresolvable",
73
+ "middleware.auth-null-host",
74
+ "middleware.envelope-unnested",
75
+ "middleware.post-reads-request"
76
+ ],
77
+ trigger: [
78
+ ...STACK,
79
+ "stack.auth-no-caller",
80
+ "trigger.search-bare-column",
81
+ "trigger.search-unknown-column",
82
+ "trigger.no-action",
83
+ "trigger.unbound",
84
+ "realtime.gate-denies-everyone",
85
+ "realtime.deliver-falsy-return",
86
+ "realtime.join-deliver-object-response",
87
+ "realtime.deliver-without-per-recipient"
88
+ ],
89
+ tool: [...STACK, ELICIT, "mcp.elicit-duplicate-key", "tool.output-mismatch"],
90
+ prompt: [...STACK, ELICIT, "mcp.elicit-duplicate-key", "mcp.prompt-no-response"],
91
+ resource: [...STACK, ELICIT, "mcp.elicit-duplicate-key"],
92
+ agent: TOOLSET,
93
+ mcp_server: [...TOOLSET, "toolset.primitive-reads-auth-ungated"],
94
+ message: [...STACK, "realtime.deliver-explicit"],
95
+ workflow_test: ["workflow-test.live-datasource", ...STACK],
96
+ realtime_server: ["realtime.server-disabled"],
97
+ channel: ["realtime.conversation-no-limit", "realtime.per-recipient-without-deliver", ...VALUES],
98
+ microservice: [ENV],
99
+ api_group: [DOCS_PUBLIC, "api-group.cors-origin-unmatchable", "api-group.cors-no-origins", "api-group.cors-wildcard-origin", "api-group.cors-no-methods"],
100
+ table: [
101
+ "table.column-name-unusable",
102
+ ...VALUES,
103
+ "table.view-id-not-uuid",
104
+ "table.view-duplicate",
105
+ "table.view-unknown-column",
106
+ "table.reserved-column-name",
107
+ "field.vector-not-nullable"
108
+ ],
109
+ addon: [...VALUES, "search.request-only-filter", "db.filter-operand-invalid"],
110
+ knowledge: [
111
+ "knowledge.agents-md-mode",
112
+ "knowledge.newline",
113
+ "knowledge.empty-body",
114
+ "knowledge.refs-include-source",
115
+ "knowledge.refs-symlink-skipped"
116
+ ],
117
+ // The workspace config's allow accepts a code on EVERY def, so it offers only
118
+ // the two whose subject is the workspace's own declaration.
119
+ workspace: [ENV, DOCS_PUBLIC]
120
+ }))();
121
+ function allowableWarnings(kindName) {
122
+ return ALLOWABLE_WARNINGS[kindName] ?? [];
123
+ }
124
+ var ADVISORY_WARNINGS = [
125
+ "query.path-segment-candidate",
126
+ ENV,
127
+ MIXED,
128
+ ELICIT,
129
+ "workflow-test.live-datasource",
130
+ TEST_LIVE,
131
+ "statement.omitted-input",
132
+ "realtime.server-disabled",
133
+ DOCS_PUBLIC
134
+ ];
135
+ var WORKSPACE_WIDE_WARNINGS = ["lock.same-name-siblings"];
136
+ var consoleSink = (diagnostic) => {
137
+ console.warn(formatDiagnostic(diagnostic));
138
+ };
139
+ var SINK_KEY = /* @__PURE__ */ Symbol.for("xanosdk.diagnostics.sink");
140
+ function sink(diagnostic) {
141
+ (globalThis[SINK_KEY] ?? consoleSink)(diagnostic);
142
+ }
143
+ function setDiagnosticSink(next) {
144
+ const slot = globalThis;
145
+ const previous = slot[SINK_KEY] ?? consoleSink;
146
+ slot[SINK_KEY] = next ?? consoleSink;
147
+ return previous;
148
+ }
149
+ function formatDiagnostic(diagnostic) {
150
+ return `xanosdk: ${diagnostic.message}`;
151
+ }
152
+ var DiagnosticError = class extends Error {
153
+ constructor(message, details) {
154
+ super(message);
155
+ this.details = details;
156
+ }
157
+ details;
158
+ name = "DiagnosticError";
159
+ code = "SDK_EXPORT_INVALID";
160
+ };
161
+ function isDiagnosticError(err) {
162
+ if (err instanceof DiagnosticError) return true;
163
+ const e = err;
164
+ return err instanceof Error && e?.name === "DiagnosticError" && e.code === "SDK_EXPORT_INVALID" && Array.isArray(e.details);
165
+ }
166
+ function emitDiagnostic(diagnostic) {
167
+ if (diagnostic.severity === "error") throw new DiagnosticError(formatDiagnostic(diagnostic), [diagnostic]);
168
+ sink(diagnostic);
169
+ }
170
+ var DiagnosticBag = class {
171
+ /**
172
+ * `strict`: report every warning as an error, so the build fails instead of
173
+ * printing.
174
+ *
175
+ * Warnings here are the shapes that deploy clean and then do the wrong thing —
176
+ * a `bulk.update` zero-filling the columns an item omits, an `ignoreEmpty`
177
+ * that returns the whole table. They stay warnings by default because each has
178
+ * a legitimate use, and the author who means it should not have to work around
179
+ * a guard. But the audience for this SDK is largely an agent that never reads
180
+ * stderr, and CI has no way to notice a message nobody fails on. `strict`
181
+ * gives a pipeline one switch that turns "printed something" into "did not
182
+ * ship".
183
+ *
184
+ * Scope: the diagnostics an EXPORT collects. A guard that runs while a
185
+ * statement is being built ({@link emitDiagnostic}) has already had its say by
186
+ * then — those throw or warn on the spot, at the line that caused them.
187
+ */
188
+ constructor(strict = false) {
189
+ this.strict = strict;
190
+ }
191
+ strict;
192
+ items = [];
193
+ acceptedItems = [];
194
+ skippedCodes = /* @__PURE__ */ new Set();
195
+ add(diagnostic) {
196
+ this.items.push(diagnostic);
197
+ }
198
+ /** Record an error; `subject` (the encoded object it is about) names its def. An error is never accepted. */
199
+ error(code, message, subject) {
200
+ this.add({ severity: "error", code, message, ...this.about(subject) });
201
+ }
202
+ /**
203
+ * Record a warning. `subject` is the encoded object it is about; a warning the
204
+ * author accepted on that object's def (`diagnostics: { allow }`, see
205
+ * {@link DefDiagnostics}) is dropped here, at both settings.
206
+ */
207
+ warn(code, message, subject) {
208
+ if (this.isAccepted(code, () => message, subject)) return;
209
+ this.add({ severity: "warning", code, message, ...this.about(subject) });
210
+ }
211
+ /**
212
+ * Whether the author accepted `code` on `subject` — recorded in
213
+ * {@link accepted} when so. For a check that raises one warning for many
214
+ * defs: it asks per def, and leaves out the ones that accepted it. `message`
215
+ * is built only for an accepted finding.
216
+ */
217
+ isAccepted(code, message, subject) {
218
+ if (this.accepts?.(code, subject) !== true) return false;
219
+ this.acceptedItems.push({ severity: "warning", code, message: message(), ...this.about(subject) });
220
+ return true;
221
+ }
222
+ /** Whether the author accepted `code` on `subject`; set by the export that owns the defs, read through {@link isAccepted}. */
223
+ accepts;
224
+ /** The def an encoded `subject` was registered from; set by the export that owns the defs. */
225
+ describe;
226
+ about(subject) {
227
+ const described = subject === void 0 ? void 0 : this.describe?.(subject);
228
+ return described === void 0 ? {} : { subject: described };
229
+ }
230
+ /** The warnings an allow accepted, in the order they were found. */
231
+ accepted() {
232
+ return [...this.acceptedItems];
233
+ }
234
+ /**
235
+ * Record that the check behind `code` did not run in this export, so an
236
+ * allow naming it is not reported unused — it had nothing to accept here.
237
+ */
238
+ skipped(code) {
239
+ this.skippedCodes.add(code);
240
+ }
241
+ /** Whether the check behind `code` was {@link skipped}. */
242
+ wasSkipped(code) {
243
+ return this.skippedCodes.has(code);
244
+ }
245
+ /** Report something the author must know, which is not a defect. See the module note. */
246
+ notice(code, message) {
247
+ this.add({ severity: "notice", code, message });
248
+ }
249
+ /** Everything recorded so far, in the order it was found. */
250
+ all() {
251
+ return [...this.items];
252
+ }
253
+ /**
254
+ * Emit the warnings, then throw if anything was an error. Warnings are
255
+ * emitted first: an author fixing the error still wants to see the rest of
256
+ * what the build found. Under `strict` a warning IS an error — it is reported
257
+ * in the thrown failure only, since sinking it as well printed its text
258
+ * twice. A notice is printed at both settings and fails at neither.
259
+ */
260
+ flush() {
261
+ for (const item of this.items) {
262
+ if (item.severity === "notice" || item.severity === "warning" && !this.strict) sink(item);
263
+ }
264
+ const errors = this.items.filter(
265
+ (item) => item.severity === "error" || this.strict && item.severity === "warning"
266
+ );
267
+ if (errors.length === 0) return;
268
+ const promoted = errors.filter((item) => item.severity === "warning").length;
269
+ const strictNote = promoted > 0 ? " (`strict`: warnings are errors)" : "";
270
+ if (errors.length === 1) {
271
+ throw new DiagnosticError(`${formatDiagnostic(errors[0])}${strictNote}`, errors);
272
+ }
273
+ const total = problemCount(errors);
274
+ const hard = total - promoted;
275
+ const headline = promoted === 0 ? `export failed with ${total} errors` : `export stopped: ${total} findings fail \`strict\`` + (hard === 0 ? " (warnings are errors)" : ` (${hard} error${hard === 1 ? "" : "s"}; \`strict\` makes ${promoted === 1 ? "1 warning an error" : `${promoted} warnings errors`})`);
276
+ throw new DiagnosticError(`xanosdk: ${headline}.
277
+ ${numberedList(errors)}`, errors);
278
+ }
279
+ };
280
+ function problemCount(items) {
281
+ return items.reduce((n, item) => n + (item.unlisted ?? 1), 0);
282
+ }
283
+ function numberedList(items) {
284
+ let n = 0;
285
+ return items.map((item) => item.unlisted === void 0 ? ` ${++n}. ${item.message}` : ` ${item.message}`).join("\n");
286
+ }
287
+
288
+ export {
289
+ ALLOWABLE_WARNINGS,
290
+ allowableWarnings,
291
+ ADVISORY_WARNINGS,
292
+ WORKSPACE_WIDE_WARNINGS,
293
+ setDiagnosticSink,
294
+ formatDiagnostic,
295
+ DiagnosticError,
296
+ isDiagnosticError,
297
+ emitDiagnostic,
298
+ DiagnosticBag,
299
+ problemCount,
300
+ numberedList
301
+ };
302
+ //# sourceMappingURL=chunk-2EZ3ZJZZ.js.map