@xano/sdk 1.0.5 → 1.0.7

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 (277) hide show
  1. package/CHANGELOG.md +35 -5
  2. package/README.md +56 -20
  3. package/dist/.build-fingerprint +1 -1
  4. package/dist/{agent-file-refresh-KVLR7M5Y.js → agent-file-refresh-DGGSRPJ4.js} +15 -14
  5. package/dist/agent-skill-command-37DFYS7Q.js +414 -0
  6. package/dist/{answer-shape-XGR2DGWY.js → answer-shape-RBFDCNZ7.js} +5 -5
  7. package/dist/{backend-dir-IE4RMUFH.js → backend-dir-KDD43X7K.js} +16 -15
  8. package/dist/{backend-slot-6HBWG5FN.js → backend-slot-TBOVZXDE.js} +4 -4
  9. package/dist/bin.js +63 -61
  10. package/dist/{branch-T2APKPVG.js → branch-7PIKNUD7.js} +12 -11
  11. package/dist/{branch-commands-HXXTCSOO.js → branch-commands-EGY7ZEZE.js} +32 -32
  12. package/dist/bundle.js +9 -39
  13. package/dist/{capture-HBXFXZEW.js → capture-GW5KNKMB.js} +3 -3
  14. package/dist/{chunk-3BJYQGAZ.js → chunk-26LHXLD3.js} +2 -2
  15. package/dist/{chunk-N6BWB35H.js → chunk-2ACWDSAQ.js} +3 -3
  16. package/dist/{chunk-XIABDKFQ.js → chunk-2SD4LA22.js} +2 -2
  17. package/dist/{chunk-K6PRKPFX.js → chunk-2XWVZRL6.js} +7 -7
  18. package/dist/{chunk-ES5A66IH.js → chunk-2YER2J47.js} +13 -13
  19. package/dist/{chunk-G57RYMKB.js → chunk-3FRGNBOC.js} +2 -2
  20. package/dist/{chunk-BMCZQZMI.js → chunk-46PATL23.js} +13 -9
  21. package/dist/{chunk-MYLPOVX6.js → chunk-47XT6WQL.js} +8 -8
  22. package/dist/{chunk-AWQ7BQTQ.js → chunk-4GPIOIAC.js} +6 -1
  23. package/dist/{chunk-7GX445AE.js → chunk-4XHAT7C5.js} +2 -2
  24. package/dist/{chunk-QOLOQ35F.js → chunk-567KK6XF.js} +8 -8
  25. package/dist/{chunk-57HMNJGB.js → chunk-5GIOCDUM.js} +893 -922
  26. package/dist/{chunk-OKNE3TWU.js → chunk-5KJBWIDZ.js} +83 -5
  27. package/dist/{chunk-SRX6B544.js → chunk-5QMJOE2K.js} +5 -5
  28. package/dist/{chunk-AGD7F7YI.js → chunk-5SCPRXFB.js} +4 -4
  29. package/dist/{chunk-SNGFEESM.js → chunk-5ZG7V2VW.js} +3 -3
  30. package/dist/{chunk-XJU6UAFV.js → chunk-7FIMUFBP.js} +2 -2
  31. package/dist/{chunk-AESE434J.js → chunk-7M6JP3FS.js} +2 -2
  32. package/dist/{chunk-K6CB5TKM.js → chunk-7REDHC4N.js} +2 -2
  33. package/dist/chunk-7VR4IO5B.js +44 -0
  34. package/dist/{chunk-57B56I4B.js → chunk-7XXWKTCE.js} +65 -41
  35. package/dist/{chunk-PL7AIAWS.js → chunk-A4R5CAY4.js} +4 -111
  36. package/dist/{chunk-QZTJ2556.js → chunk-AKERAUNH.js} +4 -4
  37. package/dist/{chunk-JZWUAEMO.js → chunk-ARWMVNDJ.js} +6 -3
  38. package/dist/{chunk-WYS6XVZ3.js → chunk-AVS4WPPY.js} +2 -2
  39. package/dist/{chunk-KUU7T4ZE.js → chunk-B2URJBC4.js} +18 -18
  40. package/dist/chunk-B3P25SDP.js +78 -0
  41. package/dist/chunk-BRANWM4U.js +853 -0
  42. package/dist/{chunk-BBPAXOU6.js → chunk-BSVQEKHO.js} +6 -6
  43. package/dist/{chunk-3WHWOKU4.js → chunk-BZ6WTG3E.js} +4 -4
  44. package/dist/{chunk-XNZURZ7T.js → chunk-CH23ONYG.js} +77 -6
  45. package/dist/{chunk-SQPIECXD.js → chunk-CJDPSCMX.js} +45 -5
  46. package/dist/{chunk-M7GJ6YUF.js → chunk-CNZASQPL.js} +16 -2
  47. package/dist/{chunk-44CWK6YC.js → chunk-CPN6WSBH.js} +4 -4
  48. package/dist/{chunk-L3BDO2BI.js → chunk-CT3J5JRZ.js} +7 -7
  49. package/dist/{chunk-3HOGFGKG.js → chunk-D3KEPRRN.js} +2 -2
  50. package/dist/{chunk-OGUMHW2X.js → chunk-D5OZRJ3T.js} +7 -7
  51. package/dist/{chunk-S5KQIFKJ.js → chunk-DG3APBUJ.js} +208 -112
  52. package/dist/chunk-DIWF7L33.js +995 -0
  53. package/dist/{chunk-WRBKLYSJ.js → chunk-DNBP4GJN.js} +4 -3
  54. package/dist/{chunk-LZDA6SVD.js → chunk-DXZTL7NA.js} +141 -91
  55. package/dist/{chunk-XMDDBEEM.js → chunk-E763QI3G.js} +2 -2
  56. package/dist/{chunk-3VX7VAQT.js → chunk-EF4MHLEW.js} +26 -9
  57. package/dist/{chunk-AGSCOISO.js → chunk-ELPQTDW6.js} +108 -100
  58. package/dist/{chunk-Q22BMRPF.js → chunk-EPFDY5JU.js} +2 -2
  59. package/dist/{chunk-7DBM6XHR.js → chunk-EU32BC5B.js} +8 -8
  60. package/dist/{chunk-Y76ERHLK.js → chunk-FDTET7FZ.js} +6 -6
  61. package/dist/{chunk-Z3SNX45M.js → chunk-FENA7K7C.js} +3 -3
  62. package/dist/{chunk-WOGJB2F6.js → chunk-FNLTFOUD.js} +4 -9
  63. package/dist/{chunk-FV55SRQU.js → chunk-FQ53GTII.js} +9 -9
  64. package/dist/{chunk-DEVGLLNZ.js → chunk-GHMLRFRX.js} +8 -8
  65. package/dist/{chunk-GMVW6ZZK.js → chunk-H2K4GFUS.js} +4 -4
  66. package/dist/{chunk-NUU76247.js → chunk-HTQWAQRW.js} +3 -3
  67. package/dist/{chunk-ROY4YAEQ.js → chunk-HU7F56VF.js} +22 -2
  68. package/dist/{chunk-RXCT3OCU.js → chunk-HZ6ADG3O.js} +47 -8
  69. package/dist/{chunk-Z2BRSQ6M.js → chunk-I6XRUU6U.js} +91 -64
  70. package/dist/chunk-IPNN2KRW.js +257 -0
  71. package/dist/{chunk-SF2B7MZK.js → chunk-IYXL5NYU.js} +259 -31
  72. package/dist/chunk-JI3BLXWQ.js +107 -0
  73. package/dist/{chunk-4DJTQ6W4.js → chunk-JIKGT7DO.js} +2 -1
  74. package/dist/{chunk-OVV2HXJ6.js → chunk-JOOKM7AH.js} +2 -2
  75. package/dist/{chunk-65SW2BA5.js → chunk-JOWY6HFL.js} +3 -3
  76. package/dist/{chunk-I5VEROXW.js → chunk-JX6N73H3.js} +2 -2
  77. package/dist/{chunk-5D6DGF3W.js → chunk-L472YIGG.js} +8 -8
  78. package/dist/{chunk-HLQH3AXB.js → chunk-L6HZ67P6.js} +2 -2
  79. package/dist/{chunk-TM5LRSBB.js → chunk-LBJA7IEM.js} +370 -45
  80. package/dist/chunk-LCOCRJ4K.js +116 -0
  81. package/dist/{chunk-DGWHAVRG.js → chunk-LJM5CIY4.js} +16 -1
  82. package/dist/{chunk-5RLAF6RL.js → chunk-M2C54ZBC.js} +4 -4
  83. package/dist/{chunk-U6DR6464.js → chunk-M3NEK3LT.js} +4 -4
  84. package/dist/{chunk-5XVBT6CQ.js → chunk-MBL7CXJ7.js} +2 -2
  85. package/dist/{chunk-5YBNXNKU.js → chunk-MFWF2NZJ.js} +12 -5
  86. package/dist/{chunk-TEBS7FE6.js → chunk-MYZRMSPM.js} +2 -2
  87. package/dist/{chunk-YSLMMR2U.js → chunk-N3YFCFCO.js} +14 -14
  88. package/dist/{chunk-OJPZEUPH.js → chunk-NDJAKSE7.js} +11 -8
  89. package/dist/{chunk-PIPIA7K7.js → chunk-NV37YGOV.js} +7 -7
  90. package/dist/{chunk-ZHGWR45B.js → chunk-O56DQKPL.js} +9 -9
  91. package/dist/{chunk-4QBGE3EO.js → chunk-ORGNLQN6.js} +6 -6
  92. package/dist/{chunk-NNB7VUCH.js → chunk-PEIBGH2V.js} +55 -31
  93. package/dist/{chunk-UJ6ZZJDD.js → chunk-PEX4QZVI.js} +2 -2
  94. package/dist/{chunk-LLS2WO2K.js → chunk-PV25BDCH.js} +5 -5
  95. package/dist/{chunk-F3557PVM.js → chunk-PY722CHR.js} +2 -2
  96. package/dist/{chunk-4GDEEY2U.js → chunk-QGIZLFAS.js} +4 -4
  97. package/dist/{chunk-YI76TURL.js → chunk-QRQ54LUI.js} +16 -14
  98. package/dist/{chunk-JQOX6HW4.js → chunk-RBU2YX22.js} +3 -3
  99. package/dist/{chunk-4NEBBKOP.js → chunk-RRMH7WMY.js} +7 -7
  100. package/dist/{chunk-HOOOOJJP.js → chunk-S46ODQRA.js} +2 -2
  101. package/dist/{chunk-37FBPMNE.js → chunk-S56YBYMN.js} +5 -2
  102. package/dist/{chunk-4QFBEKXI.js → chunk-SDGV76HF.js} +2 -2
  103. package/dist/{chunk-CV54PASI.js → chunk-SGK3PTTM.js} +312 -132
  104. package/dist/{chunk-S5TEJIGP.js → chunk-SKEG3V2V.js} +2 -2
  105. package/dist/{chunk-VZ22VUAS.js → chunk-SLGJIWCY.js} +3 -3
  106. package/dist/{chunk-JSEVKRVJ.js → chunk-T4LJ5UR2.js} +29 -7
  107. package/dist/{chunk-JXKO6JT7.js → chunk-TWVUYS63.js} +24 -24
  108. package/dist/{chunk-UIEFE6FU.js → chunk-U5M7T6CI.js} +7 -7
  109. package/dist/{chunk-Z4VN347O.js → chunk-UYFUIHH3.js} +2 -2
  110. package/dist/{chunk-Y6NO3DLQ.js → chunk-V7MBRUK6.js} +3 -3
  111. package/dist/chunk-VAGSKUWC.js +67 -0
  112. package/dist/{chunk-A4NNCI4O.js → chunk-VIJ5D3RC.js} +3 -3
  113. package/dist/{chunk-3IYVHVM6.js → chunk-VJFMUJWZ.js} +4 -4
  114. package/dist/{chunk-V4IBHDIY.js → chunk-VNDR2T35.js} +7 -7
  115. package/dist/chunk-WAVNUTMT.js +9 -0
  116. package/dist/{chunk-KQLACS4Q.js → chunk-WNCW2RNB.js} +4 -4
  117. package/dist/chunk-WUEPP5HD.js +111 -0
  118. package/dist/{chunk-IV446ZLJ.js → chunk-Y453TW6J.js} +2 -2
  119. package/dist/{local-engine-command-73NHWD6V.js → chunk-YCUDOF6Q.js} +22 -76
  120. package/dist/{chunk-CJ76PSJT.js → chunk-YH2JVJAO.js} +12 -12
  121. package/dist/{chunk-GPI3OWRE.js → chunk-YHB34BN6.js} +2 -1
  122. package/dist/{chunk-AMBEITWL.js → chunk-ZGLNHA7T.js} +7 -7
  123. package/dist/{chunk-NGAODDLX.js → chunk-ZJOAWRED.js} +8 -8
  124. package/dist/{chunk-TUEFTRC2.js → chunk-ZXRDD3Q2.js} +50 -27
  125. package/dist/cli.d.ts +40 -11
  126. package/dist/cli.js +60 -56
  127. package/dist/{codegen-command-L2OO6OTE.js → codegen-command-T7TC7PQO.js} +79 -72
  128. package/dist/codegen.d.ts +2 -2
  129. package/dist/codegen.js +2 -2
  130. package/dist/{commands-2E4JB3DB.js → commands-JDENTDJS.js} +3 -3
  131. package/dist/{completion-LPJIH5VQ.js → completion-YFD5OVJW.js} +9 -5
  132. package/dist/{config-QDCRKEWD.js → config-YJFUTRJW.js} +8 -8
  133. package/dist/{deploy-command-HJZNYCUY.js → deploy-command-OEVEE6UG.js} +65 -63
  134. package/dist/deploy-source-HYVZEYXV.js +83 -0
  135. package/dist/{dev-env-sync-GZ4QQJGV.js → dev-env-sync-EFDCJ6KU.js} +63 -61
  136. package/dist/{diagnostics-LSMGB4TY.js → diagnostics-OMN5Y2AH.js} +2 -2
  137. package/dist/{display-name-hint-AHCNH6TF.js → display-name-hint-SW3GB3V7.js} +14 -13
  138. package/dist/{emit-DqG6qddr.d.ts → emit-Dov_92kn.d.ts} +66 -20
  139. package/dist/env-example-refresh-WNSOH534.js +134 -0
  140. package/dist/{env-pull-command-Z4RLVEGJ.js → env-pull-command-UYEXMQ3P.js} +53 -52
  141. package/dist/{env-target-ZHQUS5BO.js → env-target-JBSLBKNX.js} +15 -14
  142. package/dist/{env-var-command-FKQ4VVQ6.js → env-var-command-BJNRAXNV.js} +51 -49
  143. package/dist/{ephemeral-L4KUOGEU.js → ephemeral-CEOGMIEA.js} +11 -10
  144. package/dist/{ephemeral-command-GRPFI3TD.js → ephemeral-command-IPSGBCS5.js} +70 -69
  145. package/dist/{ephemeral-state-VLYU2BXR.js → ephemeral-state-MTBASPRS.js} +13 -12
  146. package/dist/{generate-command-XNODJFDQ.js → generate-command-XQXODBS6.js} +96 -86
  147. package/dist/{gitignore-VWRSZX5F.js → gitignore-RUVCIZO4.js} +21 -20
  148. package/dist/{guards-OPSGB6LG.js → guards-KYEOCVHN.js} +6 -6
  149. package/dist/{impersonate-command-AEKIZHHK.js → impersonate-command-MA27O7S5.js} +46 -44
  150. package/dist/{import-PHSSFFLA.js → import-XKRFHABE.js} +5 -5
  151. package/dist/index.d.ts +14 -20
  152. package/dist/index.js +13 -13
  153. package/dist/init-command-6RDTCMAB.js +143 -0
  154. package/dist/{init-modules-SGSX7XEY.js → init-modules-DHTBOCQT.js} +10 -9
  155. package/dist/{init-web-6HX3YLQP.js → init-web-ELBXSXDL.js} +3 -3
  156. package/dist/internal.d.ts +5 -5
  157. package/dist/internal.js +47 -20
  158. package/dist/{io-TAF4WXYQ.js → io-PGTCBSIQ.js} +6 -4
  159. package/dist/{keep-data-merge-GUGF7MVZ.js → keep-data-merge-TDJOIAVT.js} +33 -34
  160. package/dist/{lambda-config-reconcile-65U6I4KU.js → lambda-config-reconcile-47X5C2E4.js} +6 -5
  161. package/dist/{landed-QA6PRTV2.js → landed-F7PCHGCK.js} +3 -3
  162. package/dist/{landing-record-FCAWLCZU.js → landing-record-TPPYFQAS.js} +26 -25
  163. package/dist/{live-diff-IM4W3ELT.js → live-diff-5E2BQWQ7.js} +9 -8
  164. package/dist/local-engine-choice-S6VHPJRU.js +81 -0
  165. package/dist/local-engine-command-4EZCGZ6M.js +85 -0
  166. package/dist/{local-engine-config-W3KB7RWM.js → local-engine-config-2EBL3QKA.js} +3 -2
  167. package/dist/{local-engine-deploy-Y4OAWL7K.js → local-engine-deploy-FOPNWU7X.js} +18 -16
  168. package/dist/local-engine-lookup-GM3E3NPP.js +43 -0
  169. package/dist/local-engine-mcp-bridge-QKZHUGW3.js +423 -0
  170. package/dist/local-engine-mcp-command-BFQVLXZC.js +181 -0
  171. package/dist/{local-engine-process-6YPJHKYM.js → local-engine-process-XUQPQENQ.js} +12 -9
  172. package/dist/{local-engine-state-OCW5YDD7.js → local-engine-state-JQPKGB65.js} +4 -3
  173. package/dist/{local-engine-update-check-X7TZGRFL.js → local-engine-update-check-S7UF6ZF5.js} +7 -6
  174. package/dist/{lock-WXXC3QHL.js → lock-HDCHD2ON.js} +4 -2
  175. package/dist/{lock-commands-PKDBNRSD.js → lock-commands-HJ6Y5QVS.js} +66 -64
  176. package/dist/{login-command-V4U4FA5G.js → login-command-JO55NZAS.js} +34 -33
  177. package/dist/{logout-command-TV3P545Z.js → logout-command-MPRIRSJA.js} +18 -17
  178. package/dist/{loop-VKHGQ6MP.js → loop-SUB6C2LK.js} +8 -9
  179. package/dist/{marketplace-command-LEFOAEAV.js → marketplace-command-BM6G257N.js} +90 -54
  180. package/dist/{marketplace-resolve-ME7O7JBJ.js → marketplace-resolve-AWH3RG57.js} +7 -6
  181. package/dist/{meta-client-TEEECA5W.js → meta-client-AOSWODQQ.js} +16 -15
  182. package/dist/{module-manifest-7YLGIRCY.js → module-manifest-GXI46PEF.js} +7 -4
  183. package/dist/node.d.ts +5 -5
  184. package/dist/node.js +68 -67
  185. package/dist/operation-outcome-4UKPXTNC.js +53 -0
  186. package/dist/{output-target-5FWX3NGZ.js → output-target-RAZ4KN5J.js} +22 -21
  187. package/dist/{package-manager-PRAHUSCN.js → package-manager-K762W7XT.js} +2 -2
  188. package/dist/{plan-disclosure-QGL5UYQR.js → plan-disclosure-JR52DWXN.js} +21 -21
  189. package/dist/{plugin-contributions-GNFTWDEB.js → plugin-contributions-E6XHLQWK.js} +6 -6
  190. package/dist/{plugin-prompt-VEQGMZ4T.js → plugin-prompt-IODX5EU6.js} +5 -5
  191. package/dist/{plugin-questions-BGRL23GO.js → plugin-questions-AAAJ7POP.js} +4 -4
  192. package/dist/plugin.d.ts +254 -10
  193. package/dist/{preflight-command-VKJKXRRI.js → preflight-command-7GKJBWOQ.js} +71 -70
  194. package/dist/{profile-command-P7A3BH26.js → profile-command-CM6J7E2M.js} +35 -34
  195. package/dist/{profile-pointer-HG7IXE4I.js → profile-pointer-KTYXL6FU.js} +5 -4
  196. package/dist/{project-dependency-Z4CKOCJI.js → project-dependency-OQ5575QQ.js} +11 -8
  197. package/dist/{project-sdk-JWZWGXXR.js → project-sdk-2ESHHZVL.js} +4 -4
  198. package/dist/promote-command-BDRPG6UU.js +147 -0
  199. package/dist/{prompt-SURZOUUW.js → prompt-MQPGU4ZI.js} +4 -4
  200. package/dist/{publish-command-HGAB3H4A.js → publish-command-IEMYZ7LF.js} +69 -67
  201. package/dist/pull-command-S5E2ABZ4.js +169 -0
  202. package/dist/{pull-superseded-TOT5S4QU.js → pull-superseded-E34BZVLH.js} +4 -4
  203. package/dist/{raw-where-EoWl5fqY.d.ts → raw-where-ZMLND6AG.d.ts} +20 -3
  204. package/dist/release-command-7F5TBKO2.js +151 -0
  205. package/dist/{release-ns-command-WOQE2BDQ.js → release-ns-command-EK2ZQ4CC.js} +101 -100
  206. package/dist/{retry-command-JRGMZZAC.js → retry-command-GL5HCMVB.js} +10 -9
  207. package/dist/{routes-manifest-URFMAWJE.js → routes-manifest-YR4ZIMLM.js} +15 -7
  208. package/dist/routes-manifest-file-LCIKPDAG.js +41 -0
  209. package/dist/scaffold.js +4 -4
  210. package/dist/secrets-IV4N5HYI.js +20 -0
  211. package/dist/{secrets-file-YWZWVJ52.js → secrets-file-LXREYU3M.js} +21 -20
  212. package/dist/{secrets-fill-command-HIHK3VH2.js → secrets-fill-command-QHZS3KWM.js} +64 -62
  213. package/dist/{seed-24DTEY5S.js → seed-FRKMDN2Z.js} +9 -9
  214. package/dist/{source-resolve-OWD3MIEO.js → source-resolve-BBHYTOXI.js} +26 -24
  215. package/dist/{static-host-UIR2OLPQ.js → static-host-7LC7OZR4.js} +5 -5
  216. package/dist/{status-command-JKTHH5QE.js → status-command-TY253MJT.js} +54 -52
  217. package/dist/{store-zxw2go0f.d.ts → store-Boba9OOh.d.ts} +2 -2
  218. package/dist/{store-5YAQS6KU.js → store-VJ3OS6VO.js} +8 -7
  219. package/dist/sync-baseline-DOV5AGIO.js +36 -0
  220. package/dist/{sync-contributions-RBB6JVOL.js → sync-contributions-63542VE4.js} +20 -12
  221. package/dist/sync-record-RGHK7EAL.js +43 -0
  222. package/dist/{table-MQFVYA4K.js → table-OAYGFGEN.js} +8 -8
  223. package/dist/{tables-command-5Q4BSUNO.js → tables-command-PZIVDAH3.js} +45 -43
  224. package/dist/{tenant-Q3LPVSSM.js → tenant-Y3II4VY3.js} +12 -11
  225. package/dist/{tenant-command-BFVU2PEX.js → tenant-command-G6XON7CF.js} +113 -107
  226. package/dist/{test-command-F4VUU4QR.js → test-command-3FZOX7O3.js} +44 -42
  227. package/dist/{tests-5ZSDFVIJ.js → tests-KF6N6BZ7.js} +6 -6
  228. package/dist/{token-TERSTNU4.js → token-DJJUW5HY.js} +14 -13
  229. package/dist/toolchain-hooks-7PWCFLSU.js +46 -0
  230. package/dist/{toolchain-modules-FD5ANV2U.js → toolchain-modules-OTNSKK52.js} +8 -5
  231. package/dist/toolchain-peers-KQ7TQ2AR.js +28 -0
  232. package/dist/tracked-backend-AJCGTO5Y.js +82 -0
  233. package/dist/{update-check-O4C2LCZH.js → update-check-4E5L6GAW.js} +61 -59
  234. package/dist/{upgrade-command-NVFWLMTA.js → upgrade-command-BXMSQN4C.js} +68 -64
  235. package/dist/{whoami-command-YKNTISIV.js → whoami-command-NLCCIEUM.js} +17 -16
  236. package/dist/{workspace-GGVGE2S5.js → workspace-PNMJOXE4.js} +5 -5
  237. package/dist/{workspace-binding-OS4ZOX4S.js → workspace-binding-J5GWDFRI.js} +16 -15
  238. package/dist/{workspace-command-GTUNVN7K.js → workspace-command-MHIIY352.js} +125 -93
  239. package/dist/{workspace-env-467C5KHM.js → workspace-env-LLRWCHSA.js} +17 -16
  240. package/dist/{workspace-export-3XTVGQVM.js → workspace-export-BIKAYHWJ.js} +5 -5
  241. package/dist/{writable-7SSWUQJ3.js → writable-UOTO4WWC.js} +4 -4
  242. package/dist/{xano-6RS5XQZE.js → xano-LCI7VWPS.js} +8 -8
  243. package/dist/{xanosdk-import-E3WSIYUE.js → xanosdk-import-S7A3CVBN.js} +8 -8
  244. package/dist/{xanosdk-project-KH5TZ2KI.js → xanosdk-project-J4VCFRHP.js} +18 -17
  245. package/guides/README.md +2 -2
  246. package/guides/cli.md +73 -4
  247. package/guides/codegen.md +23 -5
  248. package/guides/codes.md +8 -2
  249. package/guides/coverage.md +5 -0
  250. package/guides/deploying.md +80 -0
  251. package/guides/marketplace.md +21 -0
  252. package/guides/module-contract.md +80 -4
  253. package/guides/scaffold.md +61 -10
  254. package/guides/typed-frontend.md +37 -0
  255. package/llms/client.md +11 -1
  256. package/llms/filters.md +4 -0
  257. package/llms/kinds-core.md +1 -1
  258. package/llms/statements-data.md +3 -2
  259. package/llms/toolchain.md +12 -0
  260. package/llms-full.txt +34 -7
  261. package/llms.txt +3 -3
  262. package/manifest.json +63 -5
  263. package/package.json +5 -2
  264. package/skills/xano-backend/SKILL.md +119 -0
  265. package/dist/chunk-F6IKWAIU.js +0 -664
  266. package/dist/chunk-M6ZFSTIZ.js +0 -630
  267. package/dist/chunk-MEIJDRHU.js +0 -243
  268. package/dist/deploy-source-5COWTBOC.js +0 -81
  269. package/dist/env-example-refresh-DWQIOQYR.js +0 -127
  270. package/dist/init-command-TI3HCKXZ.js +0 -126
  271. package/dist/local-engine-choice-FPJAZSSD.js +0 -79
  272. package/dist/operation-outcome-GNDD35WL.js +0 -51
  273. package/dist/promote-command-KHTIK44I.js +0 -141
  274. package/dist/pull-command-EUEWBRXZ.js +0 -162
  275. package/dist/release-command-WOVQAMUY.js +0 -147
  276. package/dist/toolchain-hooks-QVUZ6HZ4.js +0 -96
  277. package/dist/tracked-backend-B4HTME4S.js +0 -80
@@ -0,0 +1,853 @@
1
+ import {
2
+ iconLibraryOf,
3
+ reactPreset,
4
+ renderThemeScript
5
+ } from "./chunk-5GIOCDUM.js";
6
+ import {
7
+ defaultThemeChoice
8
+ } from "./chunk-TFFGOFVZ.js";
9
+
10
+ // src/emit/frontend-svelte.ts
11
+ var CODE_CLASS = "bg-muted rounded px-1.5 py-0.5 font-mono text-sm";
12
+ function htmlText(s) {
13
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
14
+ }
15
+ function svelteText(s) {
16
+ return htmlText(s).replace(/\{/g, "&#123;").replace(/\}/g, "&#125;");
17
+ }
18
+ function renderNode(node) {
19
+ return "code" in node ? `<code class="${CODE_CLASS}">${svelteText(node.code)}</code>` : svelteText(node.text);
20
+ }
21
+ function renderNodes(nodes) {
22
+ return nodes.map(renderNode).join("");
23
+ }
24
+ function renderApp(landing, choice) {
25
+ const steps = landing.steps.map((step) => ` <li>${renderNodes(step)}</li>`).join("\n");
26
+ const toggle = choice.dark === "toggle";
27
+ const icons = iconLibraryOf(choice.icons).svelte;
28
+ return `<script lang="ts">
29
+ ${icons.arrowImport}
30
+
31
+ import { Button } from "$lib/components/ui/button/index.js";
32
+ import * as Card from "$lib/components/ui/card/index.js";${toggle ? `
33
+ import ModeToggle from "$lib/components/mode-toggle.svelte";` : ""}
34
+ </script>
35
+
36
+ <main class="mx-auto flex min-h-screen max-w-2xl flex-col justify-center p-8">${toggle ? `
37
+ <div class="mb-4 flex justify-end">
38
+ <ModeToggle />
39
+ </div>` : ""}
40
+ <Card.Root>
41
+ <Card.Header>
42
+ <Card.Title class="text-3xl tracking-tight">${svelteText(landing.title)}</Card.Title>
43
+ <Card.Description class="text-base">
44
+ ${renderNodes(landing.lead)}
45
+ </Card.Description>
46
+ </Card.Header>
47
+ <Card.Content>
48
+ <ol class="text-muted-foreground list-inside list-decimal space-y-2">
49
+ ${steps}
50
+ </ol>
51
+ </Card.Content>
52
+ <Card.Footer>
53
+ <!-- Components come from shadcn-svelte \u2014 add more with
54
+ \`npx shadcn-svelte@latest add <name>\`. -->
55
+ <Button href="${landing.cta.href}" target="_blank" rel="noreferrer">
56
+ ${svelteText(landing.cta.label)}
57
+ <${icons.arrowComponent} />
58
+ </Button>
59
+ </Card.Footer>
60
+ </Card.Root>
61
+ </main>
62
+ `;
63
+ }
64
+ function renderSvelteKitPlugin() {
65
+ return `sveltekit({
66
+ // RUNES MODE, FORCED \u2014 not left to Svelte 5's per-component detection.
67
+ //
68
+ // By default a component that uses \`export let\` and \`<slot>\` simply
69
+ // compiles in legacy mode and works, so the Svelte 4 API an assistant
70
+ // reaches for from older training data produces no error at all. Pinning
71
+ // runes here turns that into a compile failure naming the file, which is
72
+ // the same guidance the agent brief gives, enforced instead of stated.
73
+ //
74
+ // \`node_modules\` is exempted (returning undefined restores detection):
75
+ // an installed library compiles under whatever mode ITS author wrote for,
76
+ // and forcing ours onto it would break dependencies this project does not
77
+ // own. Removable in Svelte 6, where runes stop being opt-in.
78
+ compilerOptions: {
79
+ runes: ({ filename }) =>
80
+ filename.split(/[/\\\\]/).includes("node_modules") ? undefined : true,
81
+ },
82
+ // No \`preprocess\`. vite-plugin-svelte 7 compiles \`<script lang="ts">\`
83
+ // itself, so \`vitePreprocess()\` is the no-op it looks like \u2014 \`sv create\`
84
+ // emits none either. Verified against a real build: components typecheck
85
+ // and compile without it.
86
+ //
87
+ // The deploy target is a static host with NO server runtime \u2014 Xano is the
88
+ // backend. Routes are PRERENDERED (see frontend/src/routes/+layout.ts):
89
+ // each becomes its own HTML file at build time, and the host resolves a URL
90
+ // to it by trying the exact key, then \`{path}.html\`, then
91
+ // \`{path}/index.html\`. That is why no \`trailingSlash\` is configured \u2014 both
92
+ // output shapes resolve, so this stays on SvelteKit's default.
93
+ //
94
+ // The SDK's adapter, writing to frontend/dist. Every prerendered route is
95
+ // its own file; a route that sets \`prerender = false\` (a detail page for
96
+ // rows created at runtime) has no file, so the host answers it with
97
+ // 404.html, which the adapter writes as the app shell whenever such a
98
+ // route exists: the shell boots the app and renders the route in the
99
+ // browser, so a reload or a deep link works. While every route is
100
+ // prerendered, 404.html stays the prerendered /404 page.
101
+ //
102
+ // Do not swap it for \`@sveltejs/adapter-static\` with a \`fallback\`: that
103
+ // writes the shell at index.html, over the prerendered home page.
104
+ //
105
+ // \`xanosdk deploy --static-env\` still finds its anchor: every document
106
+ // renders from app.html, so each has a <head> that gets the injected globals.
107
+ adapter: adapter({ out: "frontend/dist" }),
108
+ // Absolute asset URLs, pinned rather than left to the default. Prerendered
109
+ // pages live at varying URL depths, and a relative \`../_app/\u2026\` computed for
110
+ // one depth 404s at another.
111
+ paths: { relative: false },
112
+ prerender: {
113
+ // A hash link in the shared layout \u2014 \`<a href="#services">\`, the default
114
+ // shape of a one-page site's nav \u2014 renders into EVERY prerendered route,
115
+ // including the scaffold's own /404. There it resolves to /404#services,
116
+ // an anchor that by definition is not on that page, and SvelteKit's
117
+ // default handler THROWS: the vite build succeeds and the prerender pass
118
+ // after it kills the build, with a stack trace naming only files inside
119
+ // node_modules and a route the author never wrote.
120
+ //
121
+ // So ignore a missing id on /404 specifically, rather than reaching for a
122
+ // blanket \`handleMissingId: "warn"\`. A hash link that is genuinely broken
123
+ // on a real route still fails the build, which is the check worth keeping.
124
+ handleMissingId: ({ path, message }) => {
125
+ if (path === "/404") return;
126
+ throw new Error(message);
127
+ },
128
+ },
129
+ // SvelteKit's project layout, redirected under frontend/ so this stays a
130
+ // single-root project: one package.json, one tsconfig.json, and xano/
131
+ // sitting alongside as the backend half. NOTE these are what make
132
+ // frontend/src/routes the routes directory \u2014 a file added under a
133
+ // top-level src/routes/ is not a route and will not be served.
134
+ files: {
135
+ routes: "frontend/src/routes",
136
+ lib: "frontend/src/lib",
137
+ appTemplate: "frontend/src/app.html",
138
+ assets: "frontend/static",
139
+ },
140
+ })`;
141
+ }
142
+ function renderAppHtml({ appName }, choice) {
143
+ return `<!doctype html>
144
+ <html lang="en">
145
+ <head>
146
+ <meta charset="utf-8" />
147
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
148
+ <title>${htmlText(appName)}</title>
149
+ ${renderThemeScript(choice.dark)}
150
+ <!-- Drop a favicon.png into frontend/static/ and link it here:
151
+ <link rel="icon" href="%sveltekit.assets%/favicon.png" />
152
+ Everything in that directory is copied to the site root verbatim. -->
153
+ <!-- Keep this inside <head>: \`xanosdk deploy --static-env\` injects the
154
+ backend URL here as a window global that frontend/src/lib/api.ts reads. -->
155
+ %sveltekit.head%
156
+ </head>
157
+ <body data-sveltekit-preload-data="hover">
158
+ <div style="display: contents">%sveltekit.body%</div>
159
+ </body>
160
+ </html>
161
+ `;
162
+ }
163
+ function renderModeToggleSvelte(icons) {
164
+ return `<script lang="ts">
165
+ ${icons.modeImports.join("\n ")}
166
+
167
+ import { Button } from "$lib/components/ui/button/index.js";
168
+ import { getMode, setMode, watchMode, type Mode } from "$lib/theme.js";
169
+
170
+ /** system \u2192 light \u2192 dark \u2192 system. */
171
+ const next: Record<Mode, Mode> = { system: "light", light: "dark", dark: "system" };
172
+
173
+ const icons = {
174
+ system: ${icons.modeComponents.system},
175
+ light: ${icons.modeComponents.light},
176
+ dark: ${icons.modeComponents.dark},
177
+ };
178
+
179
+ // Starts at "system" so the prerendered HTML is deterministic; the effect
180
+ // corrects it in the browser, after the inline script has already applied
181
+ // the right class.
182
+ let mode = $state<Mode>("system");
183
+
184
+ $effect(() => {
185
+ mode = getMode();
186
+ return watchMode((m) => (mode = m));
187
+ });
188
+
189
+ function change() {
190
+ const target = next[mode];
191
+ setMode(target);
192
+ mode = target;
193
+ }
194
+
195
+ const Icon = $derived(icons[mode]);
196
+ </script>
197
+
198
+ <Button variant="ghost" size="icon" onclick={change} aria-label="Switch to {next[mode]} theme">
199
+ <Icon />
200
+ </Button>
201
+ `;
202
+ }
203
+ function renderAppDts() {
204
+ return `// See https://svelte.dev/docs/kit/types#app.d.ts
205
+ declare global {
206
+ namespace App {
207
+ // interface Error {}
208
+ // interface Locals {}
209
+ // interface PageData {}
210
+ // interface PageState {}
211
+ // interface Platform {}
212
+ }
213
+ }
214
+
215
+ export {};
216
+ `;
217
+ }
218
+ function renderLayoutTs() {
219
+ return `// There is no server. The backend is Xano, reached through $lib/api.ts,
220
+ // and \`npm run xano:deploy:ephemeral\` ships this app to a static host with no runtime.
221
+ //
222
+ // prerender: true \u2014 every route is rendered to its own HTML file AT BUILD TIME
223
+ // and served as a real document. That is what makes each page load as itself
224
+ // rather than as an empty shell that fills in afterwards.
225
+ //
226
+ // Prerendering IS server-rendering, just at build time rather than per request.
227
+ // So module-scope \`window\`/\`document\` access now fails the BUILD instead of the
228
+ // browser \u2014 which is the better place to find out. Reach for browser globals
229
+ // inside onMount, or guard with \`import { browser } from "$app/environment"\`.
230
+ //
231
+ // A route with dynamic segments (e.g. /posts/[id]) cannot be prerendered unless
232
+ // the build knows which ones exist, so THE BUILD FAILS and names the route.
233
+ // In that route's +page.ts, either list the ids (only those get a page):
234
+ //
235
+ // export const entries = () => [{ id: "1" }, { id: "2" }];
236
+ //
237
+ // or, for rows created at runtime, render it in the browser instead:
238
+ //
239
+ // export const prerender = false;
240
+ //
241
+ // Inherited by every route below this one.
242
+ export const prerender = true;
243
+ `;
244
+ }
245
+ function renderErrorState() {
246
+ return `<script lang="ts">
247
+ // Shared by the prerendered /404 route and +error.svelte.
248
+ let { status = 404, message = "" }: { status?: number; message?: string } = $props();
249
+ </script>
250
+
251
+ <main class="grid min-h-screen place-items-center p-8">
252
+ <div class="max-w-md space-y-4 text-center">
253
+ <p class="text-6xl font-semibold tracking-tight">{status}</p>
254
+ <h1 class="text-xl font-medium">
255
+ {status === 404 ? "We can't find that page." : "Something went wrong."}
256
+ </h1>
257
+ <p class="text-muted-foreground text-sm">
258
+ {message !== "" ? message : "The link may be broken, or the page may have moved."}
259
+ </p>
260
+ <a
261
+ href="/"
262
+ class="bg-primary text-primary-foreground ring-offset-background focus-visible:ring-ring inline-flex h-10 items-center rounded-md px-5 text-sm font-medium transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none"
263
+ >
264
+ Back to safety
265
+ </a>
266
+ </div>
267
+ </main>
268
+ `;
269
+ }
270
+ function renderNotFoundRoute() {
271
+ return `<script lang="ts">
272
+ // Prerendered to 404.html, which is what tells the static host to answer an
273
+ // unmatched path with a real 404 instead of quietly serving the app shell
274
+ // with a 200 (a missing asset would then reach the browser as HTML, which it
275
+ // reports as "Unexpected token '<'").
276
+ //
277
+ // It must be a route, not +error.svelte: SvelteKit never prerenders the error
278
+ // component to a file, so relying on it would ship no 404.html at all.
279
+ //
280
+ // Delete this directory and an unmatched path serves the home page with a 200
281
+ // instead \u2014 which is worse, not better, so keep it unless you have a reason.
282
+ import ErrorState from "$lib/components/error-state.svelte";
283
+ </script>
284
+
285
+ <svelte:head>
286
+ <title>Page not found</title>
287
+ </svelte:head>
288
+
289
+ <ErrorState status={404} />
290
+ `;
291
+ }
292
+ function renderErrorSvelte() {
293
+ return `<script lang="ts">
294
+ // Rendered when a client-side navigation or load fails inside the running
295
+ // app. The static host never sees these \u2014 for a path that matched no
296
+ // document at all, it serves the prerendered routes/404 page instead.
297
+ import { page } from "$app/state";
298
+ import ErrorState from "$lib/components/error-state.svelte";
299
+ </script>
300
+
301
+ <svelte:head>
302
+ <title>{page.status === 404 ? "Page not found" : "Something went wrong"}</title>
303
+ </svelte:head>
304
+
305
+ <ErrorState status={page.status} message={page.error?.message ?? ""} />
306
+ `;
307
+ }
308
+ function renderLayoutSvelte() {
309
+ return `<script lang="ts">
310
+ // The shared token stylesheet \u2014 semantic colors (bg-primary,
311
+ // text-muted-foreground) plus the Tailwind v4 theme. Imported once here so
312
+ // every route gets it.
313
+ import "../index.css";
314
+
315
+ let { children } = $props();
316
+ </script>
317
+
318
+ {@render children()}
319
+ `;
320
+ }
321
+ function renderComponentsJson(choice) {
322
+ const config = {
323
+ $schema: "https://shadcn-svelte.com/schema.json",
324
+ tailwind: {
325
+ // v4 has no config file; the theme lives in the stylesheet — the same
326
+ // shared one the React preset points at.
327
+ css: "frontend/src/index.css",
328
+ // Tracks the theme the stylesheet was rendered from — see the React
329
+ // preset's note; the shadcn-svelte CLI reads it the same way.
330
+ baseColor: choice.theme.baseColor ?? "neutral"
331
+ },
332
+ aliases: {
333
+ components: "$lib/components",
334
+ utils: "$lib/utils",
335
+ ui: "$lib/components/ui",
336
+ hooks: "$lib/hooks",
337
+ lib: "$lib"
338
+ },
339
+ typescript: true,
340
+ registry: "https://shadcn-svelte.com/registry"
341
+ };
342
+ return JSON.stringify(config, null, 2) + "\n";
343
+ }
344
+ function renderButtonSvelte() {
345
+ return `<script lang="ts" module>
346
+ import { type VariantProps, tv } from "tailwind-variants";
347
+
348
+ export const buttonVariants = tv({
349
+ base: "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
350
+ variants: {
351
+ variant: {
352
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
353
+ destructive:
354
+ "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
355
+ outline:
356
+ "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
357
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
358
+ ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
359
+ link: "text-primary underline-offset-4 hover:underline",
360
+ },
361
+ size: {
362
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
363
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
364
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
365
+ icon: "size-9",
366
+ },
367
+ },
368
+ defaultVariants: {
369
+ variant: "default",
370
+ size: "default",
371
+ },
372
+ });
373
+
374
+ export type ButtonVariant = VariantProps<typeof buttonVariants>["variant"];
375
+ export type ButtonSize = VariantProps<typeof buttonVariants>["size"];
376
+
377
+ export type ButtonProps = WithElementRef<HTMLButtonAttributes> &
378
+ WithElementRef<HTMLAnchorAttributes> & {
379
+ variant?: ButtonVariant;
380
+ size?: ButtonSize;
381
+ };
382
+ </script>
383
+
384
+ <script lang="ts">
385
+ import type { HTMLAnchorAttributes, HTMLButtonAttributes } from "svelte/elements";
386
+ import type { WithElementRef } from "bits-ui";
387
+ import { cn } from "$lib/utils.js";
388
+
389
+ let {
390
+ class: className,
391
+ variant = "default",
392
+ size = "default",
393
+ ref = $bindable(null),
394
+ href = undefined,
395
+ type = "button",
396
+ children,
397
+ ...restProps
398
+ }: ButtonProps = $props();
399
+ </script>
400
+
401
+ {#if href}
402
+ <a
403
+ bind:this={ref}
404
+ data-slot="button"
405
+ class={cn(buttonVariants({ variant, size }), className)}
406
+ {href}
407
+ {...restProps}
408
+ >
409
+ {@render children?.()}
410
+ </a>
411
+ {:else}
412
+ <button
413
+ bind:this={ref}
414
+ data-slot="button"
415
+ class={cn(buttonVariants({ variant, size }), className)}
416
+ {type}
417
+ {...restProps}
418
+ >
419
+ {@render children?.()}
420
+ </button>
421
+ {/if}
422
+ `;
423
+ }
424
+ function renderButtonIndex() {
425
+ return `export {
426
+ default as Button,
427
+ buttonVariants,
428
+ type ButtonProps,
429
+ type ButtonSize,
430
+ type ButtonVariant,
431
+ } from "./button.svelte";
432
+ `;
433
+ }
434
+ function cardPart(slot, tag, classes) {
435
+ return `<script lang="ts">
436
+ import type { HTMLAttributes } from "svelte/elements";
437
+ import type { WithElementRef } from "bits-ui";
438
+ import { cn } from "$lib/utils.js";
439
+
440
+ let {
441
+ class: className,
442
+ ref = $bindable(null),
443
+ children,
444
+ ...restProps
445
+ }: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
446
+ </script>
447
+
448
+ <${tag}
449
+ bind:this={ref}
450
+ data-slot="${slot}"
451
+ class={cn("${classes}", className)}
452
+ {...restProps}
453
+ >
454
+ {@render children?.()}
455
+ </${tag}>
456
+ `;
457
+ }
458
+ function renderCardIndex() {
459
+ return `import Root from "./card.svelte";
460
+ import Content from "./card-content.svelte";
461
+ import Description from "./card-description.svelte";
462
+ import Footer from "./card-footer.svelte";
463
+ import Header from "./card-header.svelte";
464
+ import Title from "./card-title.svelte";
465
+
466
+ export {
467
+ Root,
468
+ Content,
469
+ Description,
470
+ Footer,
471
+ Header,
472
+ Title,
473
+ //
474
+ Root as Card,
475
+ Content as CardContent,
476
+ Description as CardDescription,
477
+ Footer as CardFooter,
478
+ Header as CardHeader,
479
+ Title as CardTitle,
480
+ };
481
+ `;
482
+ }
483
+ var sveltePreset = {
484
+ id: "svelte",
485
+ label: "SvelteKit",
486
+ dependencies: {
487
+ // shadcn-svelte's runtime surface. `bits-ui` is the headless primitive
488
+ // library its components are built on (the Radix equivalent), and
489
+ // `tailwind-variants` types the variants (the cva equivalent). clsx +
490
+ // tailwind-merge back the `cn()` its components import from `$lib/utils`.
491
+ // Pre-installed so `npx shadcn-svelte@latest add <component>` works
492
+ // without a separate npm i.
493
+ //
494
+ // The icon package is `--icons`, merged in by renderPackageJson from
495
+ // `iconBinding` below — see the React preset's note.
496
+ "bits-ui": "^2.18.1",
497
+ clsx: "^2.1.1",
498
+ "tailwind-merge": "^3.0.1",
499
+ "tailwind-variants": "^3.3.1"
500
+ },
501
+ devDependencies: {
502
+ // The SDK's adapter (`@xano/sdk/sveltekit`) bundles its server half with
503
+ // esbuild; Vite 8 does not install it.
504
+ esbuild: "^0.28.1",
505
+ // 2.70 peer-accepts vite ^8 and vite-plugin-svelte ^7 — the versions
506
+ // pinned below. Bump this line and those two together.
507
+ "@sveltejs/kit": "^2.70.2",
508
+ // 7.x, matching what `sv create` installs. It peer-requires vite ^8, so
509
+ // this line and the `vite` pin move together or not at all — and the React
510
+ // preset's plugin has the same constraint, which is why the two presets
511
+ // share one Vite major rather than each choosing.
512
+ "@sveltejs/vite-plugin-svelte": "^7.1.2",
513
+ "@tailwindcss/vite": "^4.1.5",
514
+ "@types/node": "^20.19.43",
515
+ svelte: "^5.56.9",
516
+ "svelte-check": "^4.7.6",
517
+ tailwindcss: "^4.1.5",
518
+ "tw-animate-css": "^1.2.4",
519
+ tsx: "^4.19.2",
520
+ // 6.x, the major `sv create` pins. svelte-check peer-accepts `^5 || ^6`;
521
+ // 7 is out but not yet in that range, so this tracks the canonical
522
+ // scaffold rather than latest.
523
+ typescript: "^6.0.3",
524
+ vite: "^8.0.16"
525
+ },
526
+ // svelte-check REPLACES `tsc --noEmit` here rather than joining it.
527
+ //
528
+ // It is a superset: reading the same tsconfig, it checks `xano/`'s TypeScript
529
+ // exactly as `tsc` would AND the components `tsc` cannot parse at all. Running
530
+ // both is not merely redundant — `tsc` fails outright on the UI kit's barrels,
531
+ // which re-export types from `.svelte` modules it only knows as default
532
+ // exports. Verified against a real scaffold: a type error planted in
533
+ // `xano/index.ts` and one planted in `App.svelte` are each caught by this
534
+ // command alone.
535
+ //
536
+ // `svelte-kit sync` runs first, and is not optional: it generates
537
+ // `.svelte-kit/tsconfig.json` (which the project's tsconfig extends) and the
538
+ // route types. Without it svelte-check fails on a missing extends target
539
+ // rather than on anything the user wrote.
540
+ checkCmd: "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
541
+ // SvelteKit supplies `$lib` on both sides — the Vite alias from its plugin
542
+ // and the tsconfig path from the config it generates. Declaring either by
543
+ // hand would be a second source of truth that can silently disagree.
544
+ aliasName: null,
545
+ aliasTarget: "frontend/src/lib",
546
+ tsconfigPaths: {},
547
+ tsconfigExtends: "./.svelte-kit/tsconfig.json",
548
+ // What `svelte-kit sync` generates and the extended config lists — re-added
549
+ // because our `include` replaces that config's rather than merging with it.
550
+ // These are the declarations behind `$app/*`, `$env/*`, and `./$types`.
551
+ tsconfigInclude: [
552
+ ".svelte-kit/ambient.d.ts",
553
+ ".svelte-kit/env.d.ts",
554
+ ".svelte-kit/non-ambient.d.ts",
555
+ ".svelte-kit/types/**/$types.d.ts"
556
+ ],
557
+ // `prepare` runs on `npm install`, so a fresh clone has `.svelte-kit/`
558
+ // before anything reads tsconfig.json.
559
+ extraScripts: { prepare: "svelte-kit sync" },
560
+ // shadcn-svelte's generated components import these from `$lib/utils.js`
561
+ // alongside `cn()`. Without them the scaffold type-checks until the first
562
+ // `npx shadcn-svelte@latest add <name>` — which the agent guidance tells
563
+ // assistants to run — and then fails inside components the user never wrote,
564
+ // with an error naming a file they have no reason to suspect.
565
+ //
566
+ // Verbatim from shadcn-svelte's own utils.ts, so a component the CLI writes
567
+ // resolves against exactly what upstream expects.
568
+ libUtilsExtra: `
569
+ export type WithoutChild<T> = T extends { child?: any } ? Omit<T, "child"> : T;
570
+ export type WithoutChildren<T> = T extends { children?: any } ? Omit<T, "children"> : T;
571
+ export type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;
572
+ export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & { ref?: U | null };
573
+ `,
574
+ gitignoreEntries: [".svelte-kit/"],
575
+ // No `jsx`. `verbatimModuleSyntax` is what svelte-check expects so that
576
+ // type-only imports in components are erased rather than emitted.
577
+ tsconfigOptions: { verbatimModuleSyntax: true },
578
+ viteImports: [
579
+ `import { sveltekit } from "@sveltejs/kit/vite";`,
580
+ `import adapter from "@xano/sdk/sveltekit";`,
581
+ `import tailwindcss from "@tailwindcss/vite";`
582
+ ],
583
+ // tailwindcss() before sveltekit() — the order Tailwind v4 documents for
584
+ // SvelteKit, so the stylesheet is processed before Kit consumes the graph.
585
+ //
586
+ // The whole SvelteKit config rides in the sveltekit() call. There is no
587
+ // svelte.config.js by design — see renderSvelteKitPlugin().
588
+ vitePlugins: ["tailwindcss()", renderSvelteKitPlugin()],
589
+ // SvelteKit resolves its own paths from this file's directory and redirects
590
+ // them into frontend/ via `files`; moving Vite's root under it puts the two
591
+ // into disagreement. Output is the adapter's job, not `build.outDir`.
592
+ viteRoot: null,
593
+ viteBuild: null,
594
+ // SvelteKit owns the page template — frontend/src/app.html. No `entryScript`
595
+ // follows: there is no shared index.html for it to point at.
596
+ ownsHtmlEntry: true,
597
+ files(vars, landing, choice = defaultThemeChoice()) {
598
+ const ui = "frontend/src/lib/components/ui";
599
+ return [
600
+ { path: "components.json", content: renderComponentsJson(choice) },
601
+ { path: "frontend/src/app.html", content: renderAppHtml(vars, choice) },
602
+ // Only for `--dark toggle` — see the React preset's note.
603
+ ...choice.dark === "toggle" ? [
604
+ {
605
+ path: "frontend/src/lib/components/mode-toggle.svelte",
606
+ content: renderModeToggleSvelte(iconLibraryOf(choice.icons).svelte)
607
+ }
608
+ ] : [],
609
+ { path: "frontend/src/app.d.ts", content: renderAppDts() },
610
+ { path: "frontend/src/routes/+layout.ts", content: renderLayoutTs() },
611
+ { path: "frontend/src/routes/+layout.svelte", content: renderLayoutSvelte() },
612
+ { path: "frontend/src/routes/+page.svelte", content: renderApp(landing, choice) },
613
+ { path: "frontend/src/routes/+error.svelte", content: renderErrorSvelte() },
614
+ { path: "frontend/src/routes/404/+page.svelte", content: renderNotFoundRoute() },
615
+ { path: "frontend/src/lib/components/error-state.svelte", content: renderErrorState() },
616
+ // `kit.files.assets` points here: static files copied to the site root
617
+ // verbatim. A README rather than a .gitkeep because this one gets
618
+ // PUBLISHED — everything here lands in frontend/dist, so the placeholder
619
+ // that keeps the directory in git is a file real users will see deployed.
620
+ {
621
+ path: "frontend/static/README.md",
622
+ content: `Files here are copied to the site root as-is \u2014 \`favicon.png\` is served
623
+ at \`/favicon.png\`. Reference them from a component with a root-relative
624
+ path, or from \`app.html\` via \`%sveltekit.assets%\`.
625
+
626
+ Delete this file once you add something real.
627
+ `
628
+ },
629
+ { path: `${ui}/button/button.svelte`, content: renderButtonSvelte() },
630
+ { path: `${ui}/button/index.ts`, content: renderButtonIndex() },
631
+ {
632
+ path: `${ui}/card/card.svelte`,
633
+ content: cardPart(
634
+ "card",
635
+ "div",
636
+ "flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm"
637
+ )
638
+ },
639
+ {
640
+ path: `${ui}/card/card-header.svelte`,
641
+ content: cardPart(
642
+ "card-header",
643
+ "div",
644
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6"
645
+ )
646
+ },
647
+ {
648
+ path: `${ui}/card/card-title.svelte`,
649
+ content: cardPart("card-title", "div", "leading-none font-semibold")
650
+ },
651
+ {
652
+ path: `${ui}/card/card-description.svelte`,
653
+ content: cardPart("card-description", "div", "text-sm text-muted-foreground")
654
+ },
655
+ {
656
+ path: `${ui}/card/card-content.svelte`,
657
+ content: cardPart("card-content", "div", "px-6")
658
+ },
659
+ {
660
+ path: `${ui}/card/card-footer.svelte`,
661
+ content: cardPart("card-footer", "div", "flex items-center px-6 [.border-t]:pt-6")
662
+ },
663
+ { path: `${ui}/card/index.ts`, content: renderCardIndex() }
664
+ ];
665
+ },
666
+ iconBinding(id) {
667
+ return iconLibraryOf(id).svelte;
668
+ },
669
+ readmeFrontendSection(icons) {
670
+ return `[SvelteKit](https://svelte.dev/docs/kit) with Svelte 5, styled with
671
+ [Tailwind CSS](https://tailwindcss.com) v4 and
672
+ [shadcn-svelte](https://shadcn-svelte.com).
673
+
674
+ Pages live in [\`frontend/src/routes/\`](frontend/src/routes/) \u2014 \`+page.svelte\`
675
+ is a page, a subdirectory is a nested route. Routes are **prerendered**: each
676
+ becomes its own HTML document at build time, so a page loads as itself rather
677
+ than as a shell that fills in afterwards, and an unmatched path returns a real
678
+ 404 from [\`+error.svelte\`](frontend/src/routes/+error.svelte).
679
+
680
+ > **There is no server.** \`npm run xano:deploy:ephemeral\` ships this app to a static host
681
+ > with no runtime of its own; Xano is the backend, reached through
682
+ > [\`frontend/src/lib/api.ts\`](frontend/src/lib/api.ts). So \`+page.server.ts\`,
683
+ > form actions, and server \`load\` have nothing to run on \u2014 and **nothing warns
684
+ > you**: a project using them builds and deploys green, then fails in the
685
+ > browser. Treat them as unavailable. That is the trade \u2014 the backend is
686
+ > authored in [\`xano/\`](xano/) as TypeScript and deployed alongside the
687
+ > frontend, so it is a real backend, just not this one.
688
+ >
689
+ > \`frontend/src/routes/+layout.ts\` sets \`prerender = true\` for the whole app.
690
+ > Because prerendering renders at build time, module-scope \`window\`/\`document\`
691
+ > access now fails the **build** rather than the browser \u2014 use \`onMount\`, or
692
+ > guard with \`import { browser } from "$app/environment"\`.
693
+
694
+ **A dynamic route fails the build until it says how it renders.** A route like
695
+ \`/posts/[id]\` cannot be prerendered unless the build knows which ids exist, so
696
+ the build stops and names it. For rows created at runtime (the usual detail
697
+ page), render it in the browser:
698
+
699
+ \`\`\`ts
700
+ // frontend/src/routes/posts/[id]/+page.ts
701
+ export const prerender = false;
702
+ \`\`\`
703
+
704
+ The host has no file for \`/posts/42\`, so it answers with \`404.html\`, which the
705
+ SDK's adapter (\`@xano/sdk/sveltekit\`, in \`vite.config.ts\`) writes as the app
706
+ shell: it boots the app and renders the route, so a reload or a deep link works
707
+ (the response status is still 404). Only for ids known at build time, list them
708
+ instead \u2014 each gets its own page, and no other id has one:
709
+ \`export const entries = () => [{ id: "1" }, { id: "2" }];\`
710
+
711
+ [\`frontend/src/routes/404/+page.svelte\`](frontend/src/routes/404/+page.svelte)
712
+ prerenders to \`404.html\` while every route is prerendered, which is what makes
713
+ an unmatched path return a real 404. It has to be a route: SvelteKit never
714
+ prerenders \`+error.svelte\` to a file. Once a route sets \`prerender = false\`,
715
+ the adapter writes the app shell there instead, and an unmatched path renders
716
+ \`+error.svelte\` in the browser, still with a 404.
717
+
718
+ shadcn-svelte is not a dependency \u2014
719
+ its components are copied into
720
+ [\`frontend/src/lib/components/ui/\`](frontend/src/lib/components/ui/) and owned by
721
+ this project, so edit them freely. \`Button\` and \`Card\` are already there; add
722
+ more with:
723
+
724
+ \`\`\`bash
725
+ npx shadcn-svelte@latest add dialog input form
726
+ \`\`\`
727
+
728
+ [\`components.json\`](components.json) is pre-configured, so that works with no
729
+ \`shadcn-svelte init\` step. ${iconLibraryOf(icons).guidance.svelte}
730
+
731
+ \`\`\`ts
732
+ ${iconLibraryOf(icons).svelte.arrowImport}
733
+ \`\`\`
734
+
735
+ [\`frontend/src/routes/+page.svelte\`](frontend/src/routes/+page.svelte) already
736
+ does, and that is the form \`npx shadcn-svelte@latest add\` writes too.
737
+
738
+ Components import through the \`$lib\` alias
739
+ (\`$lib/components/ui/button\`, \`$lib/utils\`), which SvelteKit points at
740
+ \`frontend/src/lib/\` via \`kit.files\` in
741
+ [\`vite.config.ts\`](vite.config.ts) \u2014 there is no \`paths\` entry to keep in
742
+ sync, and adding one would just be a second answer that can disagree.
743
+
744
+ Colors come from the theme tokens in
745
+ [\`frontend/src/index.css\`](frontend/src/index.css) \u2014 see **Theming** below.
746
+
747
+ > \`npm run typecheck\` runs \`svelte-kit sync && svelte-check\`, not \`tsc\`. It
748
+ > checks both halves \u2014 the backend's TypeScript and the components \u2014 where
749
+ > \`tsc\` cannot read \`.svelte\` files at all. Keep it in the script: it is what
750
+ > makes the frontend unable to drift from the backend defs. \`sync\` regenerates
751
+ > \`.svelte-kit/\`, which \`tsconfig.json\` extends; \`npm install\` runs it too.`;
752
+ },
753
+ agentGuidanceSection(icons) {
754
+ return `- \`frontend/src/\` \u2014 the SvelteKit app. Svelte 5 + Tailwind v4 + shadcn-svelte.
755
+ - **There is no server.** This deploys to a static host with no runtime, and
756
+ Xano is the backend. Never write \`+page.server.ts\`, \`+layout.server.ts\`,
757
+ form actions, or server \`load\` \u2014 reach the backend through
758
+ \`frontend/src/lib/api.ts\` instead, and never stand up a second backend here.
759
+ - **The build will not stop you.** A project containing \`+page.server.ts\`
760
+ compiles and deploys green, then fails in the browser on the live site. A
761
+ passing build is not evidence that a server feature works \u2014 there is
762
+ nothing to run it.
763
+ - \`frontend/src/routes/\` \u2014 file-based routing. A page is \`+page.svelte\`, a
764
+ nested route is a subdirectory. **Routes live under \`frontend/src/\`, not a
765
+ top-level \`src/\`** \u2014 \`files\` in the \`sveltekit()\` plugin config in
766
+ \`vite.config.ts\` points SvelteKit here. A file added under a top-level
767
+ \`src/routes/\` is not a route and is never served.
768
+ - **Routes are prerendered.** \`frontend/src/routes/+layout.ts\` sets
769
+ \`prerender = true\` for the whole app, so every route is rendered to its own
770
+ HTML document at build time and served as a real page. A static route needs
771
+ nothing registered \u2014 add \`+page.svelte\` and it works.
772
+ - **Prerendering renders at BUILD time**, so module-scope \`window\`/\`document\`
773
+ access now breaks the build, not the browser. Use \`onMount\`, or guard with
774
+ \`import { browser } from "$app/environment"\`. This is a page option, not a
775
+ server \u2014 do not "fix" it by reaching for \`ssr\` or a server file.
776
+ - **A dynamic route fails the build until it says how it renders.**
777
+ \`/posts/[id]\` cannot be prerendered unless the build knows which ids exist.
778
+ For rows created at runtime (a detail page), export
779
+ \`const prerender = false\` from that route's \`+page.ts\`: the host answers
780
+ it with the \`404.html\` app shell the SDK's adapter writes, which renders it
781
+ in the browser, so reloads and deep links work. \`entries\` only fits ids
782
+ known at build time \u2014 any other id has no page.
783
+ - \`frontend/src/routes/404/+page.svelte\` prerenders to \`404.html\`, which is
784
+ what makes an unmatched path return a real 404 instead of silently serving a
785
+ page with a 200. Keep it: without it a missing asset comes back as HTML and
786
+ the browser reports \`Unexpected token '<'\`. It has to be a route \u2014 SvelteKit
787
+ never prerenders \`+error.svelte\` to a file, so that alone would ship no
788
+ \`404.html\`.
789
+ - Keep the adapter in \`vite.config.ts\` (\`@xano/sdk/sveltekit\`). Do NOT
790
+ swap in \`@sveltejs/adapter-static\` with a \`fallback\`: it writes an empty
791
+ shell over the prerendered home page.
792
+ - Data loading: call \`api.ts\` from the component, or from a universal
793
+ \`+page.ts\` \`load\` if you need it before render. Both run in the browser.
794
+ - \`frontend/src/lib/components/ui/\` \u2014 shadcn-svelte components, **copied in and
795
+ owned by this project**. Edit them directly; there is no library to configure
796
+ around.
797
+ - Need one that isn't there? \`npx shadcn-svelte@latest add <name>\` \u2014 do not
798
+ hand-roll it, and do not add a different component library. Note the
799
+ \`-svelte\` suffix: the plain \`shadcn\` CLI writes React and will not work here.
800
+ - ${iconLibraryOf(icons).guidance.svelte.replace(/\n/g, "\n ")}
801
+ - That import form is what \`frontend/src/routes/+page.svelte\` already uses and
802
+ what \`npx shadcn-svelte@latest add\` writes, so matching it keeps what you
803
+ write consistent with what the CLI generates beside it. Do not add another
804
+ icon library and do not paste raw inline \`<svg>\` markup.
805
+ - Import via the \`$lib\` alias (\`$lib/components/ui/button\`, \`$lib/utils\`),
806
+ which SvelteKit generates for both TypeScript and the bundler. Do not add a
807
+ \`paths\` entry for it \u2014 a hand-written one is a second source of truth that
808
+ can disagree with the generated one.
809
+ - Components are Svelte 5 **runes** (\`$props()\`, \`$bindable()\`,
810
+ \`{@render children?.()}\`) \u2014 not the Svelte 4 \`export let\` / slot API. Runes
811
+ mode is FORCED in \`vite.config.ts\`, so \`export let\` is a compile error
812
+ naming the file rather than a component that quietly builds in legacy mode.
813
+ Do not "fix" that error by relaxing \`compilerOptions.runes\` \u2014 write the
814
+ rune.
815
+ - \`npm run typecheck\` runs \`svelte-kit sync && svelte-check\`, which checks both
816
+ \`xano/\` and the components. Do not swap it for \`tsc --noEmit\`: \`tsc\` cannot
817
+ read \`.svelte\` files and fails on the UI kit's barrels. \`sync\` regenerates
818
+ \`.svelte-kit/\`, which \`tsconfig.json\` extends \u2014 run it after adding a route.`;
819
+ }
820
+ };
821
+
822
+ // src/emit/frontend-presets.ts
823
+ var FRAMEWORKS = ["react", "svelte"];
824
+ var DEFAULT_FRAMEWORK = "react";
825
+ var PRESETS = {
826
+ react: reactPreset,
827
+ svelte: sveltePreset
828
+ };
829
+ function findFrontendPreset(id) {
830
+ const normalized = id.trim().toLowerCase();
831
+ return FRAMEWORKS.includes(normalized) ? PRESETS[normalized] : void 0;
832
+ }
833
+ function allFrontendPresets() {
834
+ return FRAMEWORKS.map((id) => PRESETS[id]);
835
+ }
836
+ function resolveFrameworkFlag(raw) {
837
+ const preset = findFrontendPreset(raw);
838
+ if (preset === void 0) {
839
+ throw new Error(
840
+ `Unknown --framework "${raw}". Valid frameworks: ${FRAMEWORKS.join(", ")}.`
841
+ );
842
+ }
843
+ return preset;
844
+ }
845
+
846
+ export {
847
+ FRAMEWORKS,
848
+ DEFAULT_FRAMEWORK,
849
+ findFrontendPreset,
850
+ allFrontendPresets,
851
+ resolveFrameworkFlag
852
+ };
853
+ //# sourceMappingURL=chunk-BRANWM4U.js.map