@xano/sdk 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +26 -16
- package/dist/.build-fingerprint +1 -1
- package/dist/{agent-file-refresh-KVLR7M5Y.js → agent-file-refresh-67QIX45H.js} +14 -13
- package/dist/{answer-shape-XGR2DGWY.js → answer-shape-UCDUKPAN.js} +5 -5
- package/dist/{backend-dir-IE4RMUFH.js → backend-dir-3LIL6SCT.js} +13 -12
- package/dist/{backend-slot-6HBWG5FN.js → backend-slot-JREP27UD.js} +4 -4
- package/dist/bin.js +53 -52
- package/dist/{branch-T2APKPVG.js → branch-2IPHOAYS.js} +9 -9
- package/dist/{branch-commands-HXXTCSOO.js → branch-commands-KTKAXBAN.js} +29 -30
- package/dist/bundle.js +9 -39
- package/dist/{capture-HBXFXZEW.js → capture-GW5KNKMB.js} +3 -3
- package/dist/{chunk-JZWUAEMO.js → chunk-26MOFAJT.js} +2 -2
- package/dist/{chunk-RXCT3OCU.js → chunk-2FLIJGBZ.js} +3 -3
- package/dist/{chunk-UIEFE6FU.js → chunk-2WBH5HUY.js} +7 -7
- package/dist/{chunk-Y76ERHLK.js → chunk-3BBIDW3Y.js} +5 -5
- package/dist/{chunk-DGWHAVRG.js → chunk-3EDSPMXN.js} +12 -1
- package/dist/{chunk-JXKO6JT7.js → chunk-3II44CUJ.js} +14 -14
- package/dist/{chunk-7GX445AE.js → chunk-4XHAT7C5.js} +2 -2
- package/dist/{chunk-OKNE3TWU.js → chunk-5KJBWIDZ.js} +83 -5
- package/dist/{chunk-SRX6B544.js → chunk-5QMJOE2K.js} +5 -5
- package/dist/{chunk-UJ6ZZJDD.js → chunk-5TVFLG3C.js} +2 -2
- package/dist/{chunk-L3BDO2BI.js → chunk-5YQV35C2.js} +7 -7
- package/dist/{chunk-Z4VN347O.js → chunk-6X3MY2JP.js} +2 -2
- package/dist/{chunk-65SW2BA5.js → chunk-6X6BJN6Y.js} +3 -3
- package/dist/{chunk-M7GJ6YUF.js → chunk-763M6LX3.js} +16 -2
- package/dist/{chunk-XJU6UAFV.js → chunk-7FIMUFBP.js} +2 -2
- package/dist/{chunk-TEBS7FE6.js → chunk-7GAIJW62.js} +2 -2
- package/dist/{chunk-K6CB5TKM.js → chunk-7REDHC4N.js} +2 -2
- package/dist/chunk-7VR4IO5B.js +44 -0
- package/dist/chunk-A7MRZ4GF.js +78 -0
- package/dist/{chunk-CV54PASI.js → chunk-ATJ2W7DC.js} +70 -50
- package/dist/{chunk-WYS6XVZ3.js → chunk-AVS4WPPY.js} +2 -2
- package/dist/{chunk-5XVBT6CQ.js → chunk-BL3AZ3AP.js} +2 -2
- package/dist/chunk-BTVUYHWV.js +111 -0
- package/dist/{chunk-NGAODDLX.js → chunk-CCU5CCRX.js} +4 -4
- package/dist/{chunk-BBPAXOU6.js → chunk-CHINR7WD.js} +6 -6
- package/dist/{chunk-SQPIECXD.js → chunk-CJDPSCMX.js} +45 -5
- package/dist/{chunk-3HOGFGKG.js → chunk-D3KEPRRN.js} +2 -2
- package/dist/{chunk-XNZURZ7T.js → chunk-D7BUMOKU.js} +2 -2
- package/dist/{chunk-WRBKLYSJ.js → chunk-DNBP4GJN.js} +4 -3
- package/dist/{chunk-XMDDBEEM.js → chunk-E763QI3G.js} +2 -2
- package/dist/{chunk-4NEBBKOP.js → chunk-EADVVTDK.js} +7 -7
- package/dist/{chunk-N6BWB35H.js → chunk-ENMBEXOP.js} +3 -3
- package/dist/{chunk-57HMNJGB.js → chunk-EQFYOOO6.js} +69 -34
- package/dist/{chunk-WOGJB2F6.js → chunk-FNLTFOUD.js} +4 -9
- package/dist/{chunk-FV55SRQU.js → chunk-FQ53GTII.js} +9 -9
- package/dist/{chunk-TUEFTRC2.js → chunk-FU3VCE5A.js} +45 -26
- package/dist/{chunk-YSLMMR2U.js → chunk-GHQ4BVI4.js} +14 -14
- package/dist/{chunk-Z2BRSQ6M.js → chunk-GLY552SI.js} +84 -57
- package/dist/{chunk-XIABDKFQ.js → chunk-GOLFAEUV.js} +2 -2
- package/dist/{chunk-ZHGWR45B.js → chunk-GW5RHGOB.js} +8 -8
- package/dist/{chunk-3BJYQGAZ.js → chunk-GWTFI3GA.js} +2 -2
- package/dist/{chunk-K6PRKPFX.js → chunk-GZHLCUZ6.js} +7 -7
- package/dist/{chunk-LLS2WO2K.js → chunk-HCG7NDIL.js} +4 -4
- package/dist/{chunk-NNB7VUCH.js → chunk-I3H3HCPY.js} +47 -26
- package/dist/{chunk-KUU7T4ZE.js → chunk-I3VHW6XM.js} +13 -13
- package/dist/{chunk-ES5A66IH.js → chunk-IF4PEGVD.js} +8 -8
- package/dist/{chunk-Y6NO3DLQ.js → chunk-IMELQ2I6.js} +3 -3
- package/dist/{chunk-V4IBHDIY.js → chunk-ITC2R2OT.js} +7 -7
- package/dist/{chunk-KQLACS4Q.js → chunk-IXFJORNH.js} +4 -4
- package/dist/{chunk-SF2B7MZK.js → chunk-IYXL5NYU.js} +259 -31
- package/dist/{chunk-57B56I4B.js → chunk-JFBRXRJD.js} +58 -34
- package/dist/chunk-JI3BLXWQ.js +107 -0
- package/dist/{chunk-4DJTQ6W4.js → chunk-JIKGT7DO.js} +2 -1
- package/dist/{chunk-5D6DGF3W.js → chunk-JRVQ7M7W.js} +8 -8
- package/dist/{chunk-AESE434J.js → chunk-JXVJGF3Y.js} +2 -2
- package/dist/chunk-KPFS3RGM.js +257 -0
- package/dist/{chunk-SNGFEESM.js → chunk-LAOMN6QQ.js} +3 -3
- package/dist/{chunk-TM5LRSBB.js → chunk-LBJA7IEM.js} +370 -45
- package/dist/{chunk-OVV2HXJ6.js → chunk-LD6ARK3A.js} +2 -2
- package/dist/{chunk-F6IKWAIU.js → chunk-LL7SGTRC.js} +18 -19
- package/dist/{chunk-OJPZEUPH.js → chunk-M5CSVB23.js} +4 -4
- package/dist/{chunk-GMVW6ZZK.js → chunk-MBDFH7XB.js} +4 -4
- package/dist/{chunk-5YBNXNKU.js → chunk-MFWF2NZJ.js} +12 -5
- package/dist/{chunk-G57RYMKB.js → chunk-N5I37JFB.js} +2 -2
- package/dist/{chunk-QOLOQ35F.js → chunk-ND43ZOS3.js} +5 -5
- package/dist/chunk-NDWVJ2QZ.js +67 -0
- package/dist/{chunk-5RLAF6RL.js → chunk-NPODGBVJ.js} +4 -4
- package/dist/{chunk-JQOX6HW4.js → chunk-OIKLDDYC.js} +2 -2
- package/dist/{chunk-AMBEITWL.js → chunk-PFBXSVZF.js} +4 -4
- package/dist/{chunk-3VX7VAQT.js → chunk-PMMHSX4H.js} +26 -9
- package/dist/{chunk-MYLPOVX6.js → chunk-QJM5XZ4K.js} +5 -5
- package/dist/{chunk-U6DR6464.js → chunk-QXYMDARD.js} +4 -4
- package/dist/{chunk-DEVGLLNZ.js → chunk-QZEAANWP.js} +5 -5
- package/dist/{chunk-LZDA6SVD.js → chunk-RIN4YY34.js} +78 -65
- package/dist/{chunk-37FBPMNE.js → chunk-S56YBYMN.js} +5 -2
- package/dist/{chunk-S5TEJIGP.js → chunk-SKEG3V2V.js} +2 -2
- package/dist/{chunk-VZ22VUAS.js → chunk-SLGJIWCY.js} +3 -3
- package/dist/{chunk-4QFBEKXI.js → chunk-SPITRSOF.js} +2 -2
- package/dist/{chunk-QZTJ2556.js → chunk-SPKA2LV6.js} +4 -4
- package/dist/{chunk-YI76TURL.js → chunk-SSITMX7I.js} +8 -8
- package/dist/{chunk-JSEVKRVJ.js → chunk-T4LJ5UR2.js} +29 -7
- package/dist/{chunk-44CWK6YC.js → chunk-TECTL2NU.js} +4 -4
- package/dist/{chunk-AGD7F7YI.js → chunk-TTEIDD5Q.js} +3 -3
- package/dist/{chunk-NUU76247.js → chunk-U35MTOXQ.js} +3 -3
- package/dist/{chunk-4QBGE3EO.js → chunk-U6MTGB46.js} +4 -4
- package/dist/{chunk-3WHWOKU4.js → chunk-UD2Z7K6W.js} +4 -4
- package/dist/{chunk-I5VEROXW.js → chunk-UIVMR7UK.js} +2 -2
- package/dist/{chunk-F3557PVM.js → chunk-VDHA5SSQ.js} +2 -2
- package/dist/{chunk-3IYVHVM6.js → chunk-VJFMUJWZ.js} +4 -4
- package/dist/{chunk-4GDEEY2U.js → chunk-VW4CWVYX.js} +4 -4
- package/dist/chunk-WAVNUTMT.js +9 -0
- package/dist/{chunk-A4NNCI4O.js → chunk-WBH4KJWM.js} +3 -3
- package/dist/{chunk-HOOOOJJP.js → chunk-WZHLMU6T.js} +2 -2
- package/dist/{chunk-S5KQIFKJ.js → chunk-XFBGXB7X.js} +130 -86
- package/dist/{chunk-IV446ZLJ.js → chunk-Y453TW6J.js} +2 -2
- package/dist/{chunk-CJ76PSJT.js → chunk-YGLMRH5U.js} +8 -8
- package/dist/{chunk-GPI3OWRE.js → chunk-YHB34BN6.js} +2 -1
- package/dist/{chunk-BMCZQZMI.js → chunk-YKP4ZKVO.js} +13 -9
- package/dist/{chunk-HLQH3AXB.js → chunk-YR2I5HGE.js} +2 -2
- package/dist/{chunk-OGUMHW2X.js → chunk-YYC2DZMG.js} +7 -7
- package/dist/{chunk-Z3SNX45M.js → chunk-YYLUBYXM.js} +2 -2
- package/dist/{chunk-PIPIA7K7.js → chunk-Z4ZGTCCD.js} +7 -7
- package/dist/{chunk-AGSCOISO.js → chunk-ZDP6GDAB.js} +75 -75
- package/dist/{chunk-7DBM6XHR.js → chunk-ZJSTUD6D.js} +8 -8
- package/dist/cli.d.ts +17 -9
- package/dist/cli.js +51 -50
- package/dist/{codegen-command-L2OO6OTE.js → codegen-command-R5IASBFC.js} +72 -66
- package/dist/codegen.d.ts +2 -2
- package/dist/codegen.js +2 -2
- package/dist/{commands-2E4JB3DB.js → commands-H7CPMMHH.js} +3 -3
- package/dist/{completion-LPJIH5VQ.js → completion-W5ZAI6TN.js} +3 -3
- package/dist/{config-QDCRKEWD.js → config-MZ5KG4EP.js} +4 -4
- package/dist/{deploy-command-HJZNYCUY.js → deploy-command-34T2LKQ5.js} +58 -57
- package/dist/{deploy-source-5COWTBOC.js → deploy-source-YLQ7WMYR.js} +32 -31
- package/dist/{dev-env-sync-GZ4QQJGV.js → dev-env-sync-TMJTNU3U.js} +52 -51
- package/dist/{diagnostics-LSMGB4TY.js → diagnostics-OMN5Y2AH.js} +2 -2
- package/dist/{display-name-hint-AHCNH6TF.js → display-name-hint-ZJGFNJKQ.js} +11 -11
- package/dist/{emit-DqG6qddr.d.ts → emit-D125xxty.d.ts} +66 -20
- package/dist/env-example-refresh-CQP3ZMKM.js +133 -0
- package/dist/{env-pull-command-Z4RLVEGJ.js → env-pull-command-UTG6IC2K.js} +46 -46
- package/dist/{env-target-ZHQUS5BO.js → env-target-FZROWYFS.js} +12 -12
- package/dist/{env-var-command-FKQ4VVQ6.js → env-var-command-VYDBQJJW.js} +41 -40
- package/dist/{ephemeral-L4KUOGEU.js → ephemeral-BIE6FMJV.js} +9 -9
- package/dist/{ephemeral-command-GRPFI3TD.js → ephemeral-command-OZ26RGXF.js} +47 -47
- package/dist/{ephemeral-state-VLYU2BXR.js → ephemeral-state-SNZOX2YK.js} +10 -10
- package/dist/{generate-command-XNODJFDQ.js → generate-command-4HR7MR36.js} +80 -72
- package/dist/{gitignore-VWRSZX5F.js → gitignore-EWQBXNX2.js} +17 -16
- package/dist/{guards-OPSGB6LG.js → guards-KYEOCVHN.js} +6 -6
- package/dist/{impersonate-command-AEKIZHHK.js → impersonate-command-WC7OGKUM.js} +37 -36
- package/dist/{import-PHSSFFLA.js → import-7Z4GCCPO.js} +5 -5
- package/dist/index.d.ts +14 -20
- package/dist/index.js +13 -13
- package/dist/{init-command-TI3HCKXZ.js → init-command-HAO3WXH3.js} +57 -55
- package/dist/{init-modules-SGSX7XEY.js → init-modules-NSKD4ASY.js} +10 -9
- package/dist/{init-web-6HX3YLQP.js → init-web-MKFFOQUU.js} +3 -3
- package/dist/internal.d.ts +5 -5
- package/dist/internal.js +47 -20
- package/dist/{io-TAF4WXYQ.js → io-PGTCBSIQ.js} +6 -4
- package/dist/{keep-data-merge-GUGF7MVZ.js → keep-data-merge-QR2TMKEO.js} +28 -29
- package/dist/{lambda-config-reconcile-65U6I4KU.js → lambda-config-reconcile-7FJXXV6V.js} +3 -3
- package/dist/{landed-QA6PRTV2.js → landed-F7PCHGCK.js} +3 -3
- package/dist/{landing-record-FCAWLCZU.js → landing-record-MWXFIRCP.js} +22 -21
- package/dist/{live-diff-IM4W3ELT.js → live-diff-5E2BQWQ7.js} +9 -8
- package/dist/{local-engine-choice-FPJAZSSD.js → local-engine-choice-VD5LNXJU.js} +35 -34
- package/dist/{local-engine-command-73NHWD6V.js → local-engine-command-RYLGMQ2O.js} +40 -39
- package/dist/{local-engine-deploy-Y4OAWL7K.js → local-engine-deploy-6O7NKZCA.js} +12 -12
- package/dist/{local-engine-process-6YPJHKYM.js → local-engine-process-ZLLZEIRF.js} +7 -7
- package/dist/{local-engine-update-check-X7TZGRFL.js → local-engine-update-check-LVX4HBBI.js} +5 -5
- package/dist/{lock-WXXC3QHL.js → lock-HDCHD2ON.js} +4 -2
- package/dist/{lock-commands-PKDBNRSD.js → lock-commands-X2OECR4R.js} +56 -55
- package/dist/{login-command-V4U4FA5G.js → login-command-RLLKD565.js} +27 -26
- package/dist/{logout-command-TV3P545Z.js → logout-command-XDMSXCDO.js} +15 -15
- package/dist/{loop-VKHGQ6MP.js → loop-SUB6C2LK.js} +8 -9
- package/dist/{marketplace-command-LEFOAEAV.js → marketplace-command-2NHHY2X3.js} +86 -50
- package/dist/{marketplace-resolve-ME7O7JBJ.js → marketplace-resolve-OTZYT4FG.js} +7 -6
- package/dist/{meta-client-TEEECA5W.js → meta-client-TMHVBZFY.js} +13 -13
- package/dist/{module-manifest-7YLGIRCY.js → module-manifest-FNMW23IX.js} +7 -4
- package/dist/node.d.ts +5 -5
- package/dist/node.js +57 -57
- package/dist/{operation-outcome-GNDD35WL.js → operation-outcome-RN62735X.js} +22 -22
- package/dist/{output-target-5FWX3NGZ.js → output-target-MOLCTPBP.js} +18 -17
- package/dist/{package-manager-PRAHUSCN.js → package-manager-K762W7XT.js} +2 -2
- package/dist/{plan-disclosure-QGL5UYQR.js → plan-disclosure-CY7AF6KP.js} +19 -20
- package/dist/{plugin-contributions-GNFTWDEB.js → plugin-contributions-WR26U7NT.js} +6 -6
- package/dist/{plugin-prompt-VEQGMZ4T.js → plugin-prompt-ZUYQQIX4.js} +5 -5
- package/dist/{plugin-questions-BGRL23GO.js → plugin-questions-HAZOQ67R.js} +4 -4
- package/dist/plugin.d.ts +254 -10
- package/dist/{preflight-command-VKJKXRRI.js → preflight-command-OHJXYND3.js} +64 -64
- package/dist/{profile-command-P7A3BH26.js → profile-command-6JWT2BTL.js} +28 -27
- package/dist/{profile-pointer-HG7IXE4I.js → profile-pointer-PDA5XBIB.js} +4 -4
- package/dist/{project-dependency-Z4CKOCJI.js → project-dependency-GZWWGWEW.js} +11 -8
- package/dist/{project-sdk-JWZWGXXR.js → project-sdk-3W72H5QO.js} +4 -4
- package/dist/promote-command-UYAMUXKB.js +146 -0
- package/dist/{prompt-SURZOUUW.js → prompt-U37K5RPQ.js} +4 -4
- package/dist/{publish-command-HGAB3H4A.js → publish-command-BUS27HGB.js} +61 -60
- package/dist/{pull-command-EUEWBRXZ.js → pull-command-ZGUNP27P.js} +75 -69
- package/dist/{pull-superseded-TOT5S4QU.js → pull-superseded-EZBGYRZF.js} +4 -4
- package/dist/{raw-where-EoWl5fqY.d.ts → raw-where-ZMLND6AG.d.ts} +20 -3
- package/dist/{release-command-WOVQAMUY.js → release-command-BQ6OHS3P.js} +69 -66
- package/dist/{release-ns-command-WOQE2BDQ.js → release-ns-command-ATGVBVIU.js} +85 -85
- package/dist/{retry-command-JRGMZZAC.js → retry-command-QJ57WVW7.js} +8 -8
- package/dist/{routes-manifest-URFMAWJE.js → routes-manifest-YR4ZIMLM.js} +15 -7
- package/dist/routes-manifest-file-UALYSZLY.js +41 -0
- package/dist/scaffold.js +2 -2
- package/dist/{secrets-file-YWZWVJ52.js → secrets-file-LMS7KX3E.js} +17 -16
- package/dist/{secrets-fill-command-HIHK3VH2.js → secrets-fill-command-QNBDGCGM.js} +55 -54
- package/dist/{seed-24DTEY5S.js → seed-SZ6OS5DQ.js} +8 -8
- package/dist/{source-resolve-OWD3MIEO.js → source-resolve-MKLNYFWG.js} +20 -20
- package/dist/{static-host-UIR2OLPQ.js → static-host-ONEHA4LI.js} +5 -5
- package/dist/{status-command-JKTHH5QE.js → status-command-XKIFKBGM.js} +38 -37
- package/dist/{store-zxw2go0f.d.ts → store-Bg4Na6Sm.d.ts} +2 -2
- package/dist/{store-5YAQS6KU.js → store-X6ZH7EC3.js} +6 -6
- package/dist/sync-baseline-DOV5AGIO.js +36 -0
- package/dist/{sync-contributions-RBB6JVOL.js → sync-contributions-HNVHDIQW.js} +20 -12
- package/dist/sync-record-PRXHLK4S.js +42 -0
- package/dist/{table-MQFVYA4K.js → table-DC36QA4Y.js} +8 -8
- package/dist/{tables-command-5Q4BSUNO.js → tables-command-UQLKTELN.js} +38 -37
- package/dist/{tenant-Q3LPVSSM.js → tenant-EKNQGG5A.js} +10 -10
- package/dist/{tenant-command-BFVU2PEX.js → tenant-command-2LWP2MPB.js} +99 -94
- package/dist/{test-command-F4VUU4QR.js → test-command-IU5MBBXY.js} +36 -35
- package/dist/{tests-5ZSDFVIJ.js → tests-RG2Y5EQ4.js} +6 -6
- package/dist/{token-TERSTNU4.js → token-7AWSJLKO.js} +11 -11
- package/dist/toolchain-hooks-4ZMQLBPQ.js +46 -0
- package/dist/{toolchain-modules-FD5ANV2U.js → toolchain-modules-VU7SURVJ.js} +8 -5
- package/dist/toolchain-peers-CIDNEEQV.js +28 -0
- package/dist/{tracked-backend-B4HTME4S.js → tracked-backend-4BHSV7NC.js} +34 -33
- package/dist/{update-check-O4C2LCZH.js → update-check-A7FXIINW.js} +54 -53
- package/dist/{upgrade-command-NVFWLMTA.js → upgrade-command-C5KBITFI.js} +58 -57
- package/dist/{whoami-command-YKNTISIV.js → whoami-command-7WQII2H4.js} +14 -14
- package/dist/{workspace-GGVGE2S5.js → workspace-Z46PUZNI.js} +5 -5
- package/dist/{workspace-binding-OS4ZOX4S.js → workspace-binding-JE6YNDZJ.js} +13 -13
- package/dist/{workspace-command-GTUNVN7K.js → workspace-command-FC4IMLAE.js} +113 -82
- package/dist/{workspace-env-467C5KHM.js → workspace-env-N4ZPFT6A.js} +14 -13
- package/dist/{workspace-export-3XTVGQVM.js → workspace-export-3A5BZTPS.js} +5 -5
- package/dist/{writable-7SSWUQJ3.js → writable-D7KCZI5N.js} +4 -4
- package/dist/{xano-6RS5XQZE.js → xano-LCI7VWPS.js} +8 -8
- package/dist/{xanosdk-import-E3WSIYUE.js → xanosdk-import-P2A2KSXM.js} +8 -8
- package/dist/{xanosdk-project-KH5TZ2KI.js → xanosdk-project-6AGMW2SL.js} +15 -14
- package/guides/cli.md +4 -4
- package/guides/codes.md +7 -2
- package/guides/deploying.md +52 -0
- package/guides/marketplace.md +21 -0
- package/guides/module-contract.md +80 -4
- package/guides/typed-frontend.md +37 -0
- package/llms/client.md +11 -1
- package/llms/filters.md +4 -0
- package/llms/kinds-core.md +1 -1
- package/llms/statements-data.md +3 -2
- package/llms/toolchain.md +12 -0
- package/llms-full.txt +34 -7
- package/llms.txt +3 -3
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/dist/chunk-MEIJDRHU.js +0 -243
- package/dist/env-example-refresh-DWQIOQYR.js +0 -127
- package/dist/promote-command-KHTIK44I.js +0 -141
- package/dist/toolchain-hooks-QVUZ6HZ4.js +0 -96
|
@@ -1,7 +1,285 @@
|
|
|
1
|
+
import {
|
|
2
|
+
byCodeUnit
|
|
3
|
+
} from "./chunk-WAVNUTMT.js";
|
|
1
4
|
import {
|
|
2
5
|
parsePathParams,
|
|
3
6
|
pathSegment
|
|
4
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-VJFMUJWZ.js";
|
|
8
|
+
import {
|
|
9
|
+
linkedTableOf,
|
|
10
|
+
tableRefOf
|
|
11
|
+
} from "./chunk-EHP3WPEG.js";
|
|
12
|
+
import {
|
|
13
|
+
COLUMN_NULLABLE_TYPES,
|
|
14
|
+
INPUT_NULLABLE_TYPES,
|
|
15
|
+
isListColumn
|
|
16
|
+
} from "./chunk-JIKGT7DO.js";
|
|
17
|
+
|
|
18
|
+
// src/emit/route-inputs.ts
|
|
19
|
+
var SCALAR_TYPES = /* @__PURE__ */ new Set([
|
|
20
|
+
"text",
|
|
21
|
+
"int",
|
|
22
|
+
"decimal",
|
|
23
|
+
"bool",
|
|
24
|
+
"email",
|
|
25
|
+
"password",
|
|
26
|
+
"uuid",
|
|
27
|
+
"date",
|
|
28
|
+
"epochms",
|
|
29
|
+
"json",
|
|
30
|
+
"file",
|
|
31
|
+
"blob",
|
|
32
|
+
"blob_img",
|
|
33
|
+
"blob_video",
|
|
34
|
+
"blob_audio",
|
|
35
|
+
"geo_point",
|
|
36
|
+
"geo_multipoint",
|
|
37
|
+
"geo_linestring",
|
|
38
|
+
"geo_multilinestring",
|
|
39
|
+
"geo_polygon",
|
|
40
|
+
"geo_multipolygon"
|
|
41
|
+
]);
|
|
42
|
+
var INPUT_NULLABLE = new Set(INPUT_NULLABLE_TYPES);
|
|
43
|
+
var COLUMN_NULLABLE = new Set(COLUMN_NULLABLE_TYPES);
|
|
44
|
+
function isRow(v) {
|
|
45
|
+
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
46
|
+
}
|
|
47
|
+
function rows(v) {
|
|
48
|
+
return Array.isArray(v) ? v.filter(isRow) : [];
|
|
49
|
+
}
|
|
50
|
+
function tableColumns(payload) {
|
|
51
|
+
const out = /* @__PURE__ */ new Map();
|
|
52
|
+
for (const table of rows(payload.dbo)) {
|
|
53
|
+
if (typeof table.guid === "string" && table.guid !== "" && Array.isArray(table.schema)) {
|
|
54
|
+
out.set(table.guid, table.schema);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
function describeInputs(input, tables) {
|
|
60
|
+
return rows(input).map((row) => describeField(row, INPUT_NULLABLE, tables));
|
|
61
|
+
}
|
|
62
|
+
function bound(v) {
|
|
63
|
+
const n = typeof v === "number" ? Math.trunc(v) : typeof v === "string" ? Number.parseInt(v, 10) : Number.NaN;
|
|
64
|
+
return Number.isFinite(n) && n > 0 ? n : void 0;
|
|
65
|
+
}
|
|
66
|
+
function listOf(row) {
|
|
67
|
+
if (!isListColumn({ style: isRow(row.style) ? row.style : void 0 })) return false;
|
|
68
|
+
const stored = isRow(row.list) ? row.list : {};
|
|
69
|
+
const min = bound(stored.min);
|
|
70
|
+
const max = bound(stored.max);
|
|
71
|
+
return { ...min !== void 0 ? { min } : {}, ...max !== void 0 ? { max } : {} };
|
|
72
|
+
}
|
|
73
|
+
function methodArg(v) {
|
|
74
|
+
return typeof v === "string" ? v : typeof v === "number" || typeof v === "boolean" ? String(v) : JSON.stringify(v);
|
|
75
|
+
}
|
|
76
|
+
function methodsOf(stored, honorDisabled = true) {
|
|
77
|
+
return rows(stored).flatMap((m) => {
|
|
78
|
+
if (typeof m.name !== "string" || m.name === "@") return [];
|
|
79
|
+
if (honorDisabled && m.disabled === true) return [];
|
|
80
|
+
return [{ name: m.name, args: Array.isArray(m.arg) ? m.arg.map(methodArg) : [] }];
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function baseOf(row, type, nullableByDefault) {
|
|
84
|
+
return {
|
|
85
|
+
name: typeof row.name === "string" ? row.name : "",
|
|
86
|
+
required: row.required === true,
|
|
87
|
+
// The engine binds every `json` input nullable, whatever was stored.
|
|
88
|
+
nullable: type === "json" ? true : typeof row.nullable === "boolean" ? row.nullable : nullableByDefault.has(type),
|
|
89
|
+
list: listOf(row),
|
|
90
|
+
// The engine renders an enum, a vector and an object without their
|
|
91
|
+
// methods, so none of them applies one.
|
|
92
|
+
methods: type === "enum" || type === "vector" || type === "obj" ? [] : methodsOf(row.methods)
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function describeField(row, nullableByDefault, tables) {
|
|
96
|
+
const type = typeof row.type === "string" ? row.type : "";
|
|
97
|
+
const field = row;
|
|
98
|
+
const linked = linkedTableOf(field);
|
|
99
|
+
if (linked !== null) return expandDbLink(row, linked, tables);
|
|
100
|
+
const base = baseOf(row, type, nullableByDefault);
|
|
101
|
+
const table = tableRefOf(field);
|
|
102
|
+
if (table !== null) return { ...base, type: "tableRef", keyType: type === "uuid" ? "uuid" : "int", table };
|
|
103
|
+
if (type === "enum") {
|
|
104
|
+
const values = Array.isArray(row.values) ? row.values : [];
|
|
105
|
+
return { ...base, type, values: values.map((v) => typeof v === "number" ? v : methodArg(v)) };
|
|
106
|
+
}
|
|
107
|
+
if (type === "vector") {
|
|
108
|
+
const size = isRow(row.vector) ? Number(row.vector.size) : Number.NaN;
|
|
109
|
+
return { ...base, type, size: Number.isFinite(size) ? size : 0 };
|
|
110
|
+
}
|
|
111
|
+
if (type === "obj") {
|
|
112
|
+
return { ...base, type, children: rows(row.children).map((child) => describeField(child, nullableByDefault, tables)) };
|
|
113
|
+
}
|
|
114
|
+
if (SCALAR_TYPES.has(type)) return { ...base, type };
|
|
115
|
+
return { ...base, type: "unknown", storedType: type };
|
|
116
|
+
}
|
|
117
|
+
function customizeMap(v) {
|
|
118
|
+
return isRow(v) ? v : {};
|
|
119
|
+
}
|
|
120
|
+
function expandDbLink(row, table, tables) {
|
|
121
|
+
const name = typeof row.name === "string" ? row.name : "";
|
|
122
|
+
const schema = tables.get(table);
|
|
123
|
+
if (schema === void 0) return { name, type: "dbLink", table, columns: void 0 };
|
|
124
|
+
const hidden = new Set(Array.isArray(row.hidden) ? row.hidden.filter((h) => typeof h === "string") : []);
|
|
125
|
+
const columns = rows(schema).filter((column) => column.name !== "id" && !hidden.has(String(column.name)));
|
|
126
|
+
return { name, type: "dbLink", table, columns: customizeColumns(columns, customizeMap(row.customize), tables) };
|
|
127
|
+
}
|
|
128
|
+
function customizeColumns(columns, customize, tables) {
|
|
129
|
+
return columns.flatMap((column) => {
|
|
130
|
+
const name = String(column.name);
|
|
131
|
+
const node = Object.hasOwn(customize, name) ? customize[name] : void 0;
|
|
132
|
+
if (node === void 0) {
|
|
133
|
+
if (column.access === "private" || column.access === "internal") return [];
|
|
134
|
+
return [describeField(column, COLUMN_NULLABLE, tables)];
|
|
135
|
+
}
|
|
136
|
+
const settings = isRow(node) ? node : {};
|
|
137
|
+
if (settings.hidden === true) return [];
|
|
138
|
+
const described = describeField(column, COLUMN_NULLABLE, tables);
|
|
139
|
+
const nested = customizeMap(settings.customize);
|
|
140
|
+
if (Object.keys(nested).length > 0) {
|
|
141
|
+
if (described.type !== "obj") return [described];
|
|
142
|
+
return [{ ...described, children: customizeColumns(rows(column.children), nested, tables) }];
|
|
143
|
+
}
|
|
144
|
+
if (described.type === "dbLink") return [described];
|
|
145
|
+
const methods = described.type === "obj" ? [] : methodsOf(settings.methods, false);
|
|
146
|
+
return [{ ...described, required: settings.required === true, methods }];
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// src/emit/route-input-types.ts
|
|
151
|
+
var NO_ROUTE_INPUTS = { routes: [], channels: [], messages: [] };
|
|
152
|
+
var OBJECT_MEMBERS = /* @__PURE__ */ new Set([
|
|
153
|
+
"constructor",
|
|
154
|
+
"toString",
|
|
155
|
+
"toLocaleString",
|
|
156
|
+
"valueOf",
|
|
157
|
+
"hasOwnProperty",
|
|
158
|
+
"isPrototypeOf",
|
|
159
|
+
"propertyIsEnumerable"
|
|
160
|
+
]);
|
|
161
|
+
var FILE_REF = "{ path?: string; name?: string; type?: string; size?: number; access?: string; meta?: unknown; url?: string }";
|
|
162
|
+
var FILE_UPLOAD = "{ readonly __fileUpload?: never }";
|
|
163
|
+
var POSITION = "{ lng: number; lat: number }";
|
|
164
|
+
var GEO = {
|
|
165
|
+
geo_point: `{ type: "point"; data: ${POSITION} }`,
|
|
166
|
+
geo_multipoint: `{ type: "points"; data: ${POSITION}[] }`,
|
|
167
|
+
geo_linestring: `{ type: "path"; data: ${POSITION}[] }`,
|
|
168
|
+
geo_multilinestring: `{ type: "paths"; data: ${POSITION}[][] }`,
|
|
169
|
+
geo_polygon: `{ type: "poly"; data: ${POSITION}[] }`,
|
|
170
|
+
geo_multipolygon: `{ type: "polys"; data: ${POSITION}[][] }`
|
|
171
|
+
};
|
|
172
|
+
var SCALAR = {
|
|
173
|
+
text: "string",
|
|
174
|
+
email: "string",
|
|
175
|
+
password: "string",
|
|
176
|
+
uuid: "string",
|
|
177
|
+
date: "string",
|
|
178
|
+
int: "number",
|
|
179
|
+
decimal: "number",
|
|
180
|
+
epochms: "number",
|
|
181
|
+
bool: "boolean",
|
|
182
|
+
json: "unknown",
|
|
183
|
+
file: FILE_UPLOAD,
|
|
184
|
+
blob: FILE_REF,
|
|
185
|
+
blob_img: FILE_REF,
|
|
186
|
+
blob_video: FILE_REF,
|
|
187
|
+
blob_audio: FILE_REF,
|
|
188
|
+
...GEO
|
|
189
|
+
};
|
|
190
|
+
function propertyName(name) {
|
|
191
|
+
return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) ? name : JSON.stringify(name);
|
|
192
|
+
}
|
|
193
|
+
function baseType(d, indent) {
|
|
194
|
+
switch (d.type) {
|
|
195
|
+
case "enum":
|
|
196
|
+
return d.values.length === 0 ? "never" : d.values.map((v) => typeof v === "number" ? String(v) : JSON.stringify(v)).join(" | ");
|
|
197
|
+
case "vector":
|
|
198
|
+
return "number[]";
|
|
199
|
+
case "tableRef":
|
|
200
|
+
return d.keyType === "uuid" ? "string" : "number";
|
|
201
|
+
case "obj":
|
|
202
|
+
return objectType(d.children, indent);
|
|
203
|
+
case "unknown":
|
|
204
|
+
return "unknown";
|
|
205
|
+
default:
|
|
206
|
+
return SCALAR[d.type] ?? "unknown";
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function valueType(d, indent) {
|
|
210
|
+
let type = baseType(d, indent);
|
|
211
|
+
if (d.list !== false) type = d.type === "enum" ? `(${type})[]` : `${type}[]`;
|
|
212
|
+
if (d.nullable && type !== "unknown") type = `${type} | null`;
|
|
213
|
+
return type;
|
|
214
|
+
}
|
|
215
|
+
function objectType(inputs, indent) {
|
|
216
|
+
const keys = /* @__PURE__ */ new Map();
|
|
217
|
+
let open = false;
|
|
218
|
+
const inner = `${indent} `;
|
|
219
|
+
const visit = (list) => {
|
|
220
|
+
for (const d of list) {
|
|
221
|
+
if (d.type === "dbLink") {
|
|
222
|
+
if (d.columns === void 0) open = true;
|
|
223
|
+
else visit(d.columns);
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
const type = valueType(d, inner);
|
|
227
|
+
const seen = keys.get(d.name);
|
|
228
|
+
if (seen === void 0) {
|
|
229
|
+
keys.set(d.name, { types: [type], required: d.required });
|
|
230
|
+
} else {
|
|
231
|
+
if (!seen.types.includes(type)) seen.types.push(type);
|
|
232
|
+
seen.required &&= d.required;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
visit(inputs);
|
|
237
|
+
const rows2 = [...keys].map(([name, { types, required }]) => {
|
|
238
|
+
const widened = !required && OBJECT_MEMBERS.has(name) ? [...types, `Object[${JSON.stringify(name)}]`] : types;
|
|
239
|
+
return `${inner}${propertyName(name)}${required ? "" : "?"}: ${widened.join(" | ")};`;
|
|
240
|
+
});
|
|
241
|
+
if (open) rows2.push(`${inner}[column: string]: unknown;`);
|
|
242
|
+
return rows2.length === 0 ? "{}" : `{
|
|
243
|
+
${rows2.join("\n")}
|
|
244
|
+
${indent}}`;
|
|
245
|
+
}
|
|
246
|
+
function inputMap(name, doc, sets) {
|
|
247
|
+
const rows2 = sets.map((set) => ` ${JSON.stringify(set.key)}: ${objectType(set.inputs, " ")};`);
|
|
248
|
+
return `${doc}
|
|
249
|
+
export type ${name} = ${rows2.length === 0 ? "{}" : `{
|
|
250
|
+
${rows2.join("\n")}
|
|
251
|
+
}`};
|
|
252
|
+
`;
|
|
253
|
+
}
|
|
254
|
+
function renderRouteInputTypes(inputs) {
|
|
255
|
+
return `
|
|
256
|
+
${inputMap(
|
|
257
|
+
"RouteInputs",
|
|
258
|
+
`/**
|
|
259
|
+
* The request body/query inputs of every endpoint, keyed exactly like ROUTES.
|
|
260
|
+
* Path params are inputs too, so they appear here as well as in routePath().
|
|
261
|
+
* Matches InferInput<typeof def>, except that a database-link input appears as
|
|
262
|
+
* the linked table's columns, which is what the server accepts.
|
|
263
|
+
*/`,
|
|
264
|
+
inputs.routes
|
|
265
|
+
)}
|
|
266
|
+
${inputMap(
|
|
267
|
+
"ChannelInputs",
|
|
268
|
+
"/** The path params of every realtime channel, keyed exactly like CHANNELS. */",
|
|
269
|
+
inputs.channels
|
|
270
|
+
)}
|
|
271
|
+
${inputMap(
|
|
272
|
+
"MessageInputs",
|
|
273
|
+
`/**
|
|
274
|
+
* The payload of every realtime message, keyed "<channel key> <message name>"
|
|
275
|
+
* (e.g. "rooms/{room_id} send").
|
|
276
|
+
*/`,
|
|
277
|
+
inputs.messages
|
|
278
|
+
)}
|
|
279
|
+
/** Every realtime message in this workspace, keyed "<channel key> <message name>". */
|
|
280
|
+
export type MessageName = keyof MessageInputs;
|
|
281
|
+
`;
|
|
282
|
+
}
|
|
5
283
|
|
|
6
284
|
// src/emit/routes-manifest.ts
|
|
7
285
|
var RouteManifestError = class extends Error {
|
|
@@ -12,16 +290,36 @@ function routeKey(route) {
|
|
|
12
290
|
function qualifiedRouteKey(route) {
|
|
13
291
|
return `${route.group}:${routeKey(route)}`;
|
|
14
292
|
}
|
|
293
|
+
function keyRoutes(routes) {
|
|
294
|
+
const sorted = [...routes].sort(
|
|
295
|
+
(a, b) => a.canonical.localeCompare(b.canonical) || a.name.localeCompare(b.name) || a.verb.localeCompare(b.verb)
|
|
296
|
+
);
|
|
297
|
+
const holders = /* @__PURE__ */ new Map();
|
|
298
|
+
for (const route of sorted) holders.set(routeKey(route), (holders.get(routeKey(route)) ?? 0) + 1);
|
|
299
|
+
return sorted.map((route) => {
|
|
300
|
+
const short = routeKey(route);
|
|
301
|
+
const group = route.group ?? route.canonical;
|
|
302
|
+
return { route, key: holders.get(short) > 1 ? qualifiedRouteKey({ ...route, group }) : short, short, group };
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
function keyChannels(channels) {
|
|
306
|
+
const holders = /* @__PURE__ */ new Map();
|
|
307
|
+
for (const channel of channels) holders.set(channel.name, (holders.get(channel.name) ?? 0) + 1);
|
|
308
|
+
return [...channels].sort((a, b) => a.name.localeCompare(b.name) || a.server.localeCompare(b.server)).map((channel) => ({
|
|
309
|
+
channel,
|
|
310
|
+
key: holders.get(channel.name) > 1 ? `${channel.server}:${channel.name}` : channel.name
|
|
311
|
+
}));
|
|
312
|
+
}
|
|
15
313
|
function literal(value) {
|
|
16
314
|
return JSON.stringify(value);
|
|
17
315
|
}
|
|
18
|
-
function objectLiteral(
|
|
19
|
-
return
|
|
20
|
-
${
|
|
316
|
+
function objectLiteral(rows2) {
|
|
317
|
+
return rows2.length === 0 ? "{}" : `{
|
|
318
|
+
${rows2.join("\n")}
|
|
21
319
|
}`;
|
|
22
320
|
}
|
|
23
|
-
function overloadsFor(fn,
|
|
24
|
-
return
|
|
321
|
+
function overloadsFor(fn, rows2) {
|
|
322
|
+
return rows2.map(
|
|
25
323
|
(r) => r.params.length === 0 ? `export function ${fn}(name: ${literal(r.name)}): string;` : `export function ${fn}(name: ${literal(r.name)}, params: { ${r.params.map((p) => `${literal(p)}: string | number`).join("; ")} }): string;`
|
|
26
324
|
).join("\n");
|
|
27
325
|
}
|
|
@@ -37,17 +335,14 @@ function renderRealtime(realtime) {
|
|
|
37
335
|
}
|
|
38
336
|
seenServer.add(server.name);
|
|
39
337
|
}
|
|
40
|
-
const holders = /* @__PURE__ */ new Map();
|
|
41
|
-
for (const channel of realtime.channels) holders.set(channel.name, (holders.get(channel.name) ?? 0) + 1);
|
|
42
338
|
const ambiguous = /* @__PURE__ */ new Map();
|
|
43
339
|
const seenChannel = /* @__PURE__ */ new Set();
|
|
44
|
-
const channels =
|
|
340
|
+
const channels = keyChannels(realtime.channels).map(({ channel, key }) => {
|
|
45
341
|
if (!known.has(channel.server)) {
|
|
46
342
|
throw new RouteManifestError(
|
|
47
343
|
`The channel "${channel.name}" names the realtime server "${channel.server}", which is not in this workspace. A channel's socket URL comes from its server's canonical, so the server must be registered too.`
|
|
48
344
|
);
|
|
49
345
|
}
|
|
50
|
-
const key = holders.get(channel.name) > 1 ? `${channel.server}:${channel.name}` : channel.name;
|
|
51
346
|
if (seenChannel.has(key)) {
|
|
52
347
|
throw new RouteManifestError(
|
|
53
348
|
`The realtime server "${channel.server}" has two channels both named "${channel.name}". Rename one.`
|
|
@@ -91,18 +386,10 @@ export type ChannelName = keyof typeof CHANNELS;
|
|
|
91
386
|
${ambiguousOverloads}${overloadsFor("channelPath", channels.map((c) => ({ name: c.key, params: c.params })))}
|
|
92
387
|
${realtimeImplementation(ambiguousKeys.length > 0)}`;
|
|
93
388
|
}
|
|
94
|
-
function renderRouteManifest(routes, realtime) {
|
|
95
|
-
const sorted = [...routes].sort(
|
|
96
|
-
(a, b) => a.canonical.localeCompare(b.canonical) || a.name.localeCompare(b.name) || a.verb.localeCompare(b.verb)
|
|
97
|
-
);
|
|
98
|
-
const holders = /* @__PURE__ */ new Map();
|
|
99
|
-
for (const route of sorted) holders.set(routeKey(route), (holders.get(routeKey(route)) ?? 0) + 1);
|
|
389
|
+
function renderRouteManifest(routes, realtime, inputs = NO_ROUTE_INPUTS) {
|
|
100
390
|
const ambiguous = /* @__PURE__ */ new Map();
|
|
101
391
|
const seen = /* @__PURE__ */ new Map();
|
|
102
|
-
const
|
|
103
|
-
const short = routeKey(route);
|
|
104
|
-
const group = route.group ?? route.canonical;
|
|
105
|
-
const key = holders.get(short) > 1 ? qualifiedRouteKey({ ...route, group }) : short;
|
|
392
|
+
const rows2 = keyRoutes(routes).map(({ route, key, short, group }) => {
|
|
106
393
|
const clash = seen.get(key);
|
|
107
394
|
if (clash !== void 0) {
|
|
108
395
|
throw new RouteManifestError(
|
|
@@ -115,7 +402,7 @@ function renderRouteManifest(routes, realtime) {
|
|
|
115
402
|
const path = `/api:${route.canonical}/${route.name.replace(/^\/+/, "")}`;
|
|
116
403
|
return { ...route, key, params, path };
|
|
117
404
|
});
|
|
118
|
-
const entries =
|
|
405
|
+
const entries = rows2.map(
|
|
119
406
|
(r) => ` ${literal(r.key)}: { verb: ${literal(r.verb)}, path: ${literal(r.path)} },`
|
|
120
407
|
);
|
|
121
408
|
const ambiguousKeys = [...ambiguous.keys()].sort();
|
|
@@ -133,7 +420,7 @@ const AMBIGUOUS: Record<string, readonly string[]> = ${objectLiteral(
|
|
|
133
420
|
)};
|
|
134
421
|
`;
|
|
135
422
|
const realtimeSection = realtime && (realtime.servers.length > 0 || realtime.channels.length > 0) ? renderRealtime(realtime) : "";
|
|
136
|
-
return `${
|
|
423
|
+
return `${MANIFEST_HEADER}${FILL_PARAMS}${ambiguousSection}
|
|
137
424
|
export const ROUTES = ${objectLiteral(entries)} as const;
|
|
138
425
|
|
|
139
426
|
/**
|
|
@@ -141,10 +428,10 @@ export const ROUTES = ${objectLiteral(entries)} as const;
|
|
|
141
428
|
* or \`"<group>:<VERB> <name>"\` when that pair is in more than one api group.
|
|
142
429
|
*/
|
|
143
430
|
export type RouteName = keyof typeof ROUTES;
|
|
144
|
-
${
|
|
145
|
-
${
|
|
146
|
-
` : ""}${overloadsFor("routePath",
|
|
147
|
-
${implementation(ambiguousKeys.length > 0)}${realtimeSection}`;
|
|
431
|
+
${rows2.length > 1 ? MANY_ROUTES : ""}
|
|
432
|
+
${rows2.length > 1 ? UNION_OVERLOAD : ""}${ambiguousOverloads ? `${ambiguousOverloads}
|
|
433
|
+
` : ""}${overloadsFor("routePath", rows2.map((r) => ({ name: r.key, params: r.params })))}
|
|
434
|
+
${implementation(ambiguousKeys.length > 0)}${realtimeSection}${renderRouteInputTypes(inputs)}`;
|
|
148
435
|
}
|
|
149
436
|
var UNION_OVERLOAD = `/** A union of route names (e.g. a \`key: RouteName\` parameter): params checked at runtime. */
|
|
150
437
|
export function routePath<N extends RouteName>(name: ManyRoutes<N>, params?: Record<string, string | number>): string;
|
|
@@ -153,13 +440,16 @@ var MANY_ROUTES = `
|
|
|
153
440
|
/** \`N\` when it is a union of two or more route names, else \`never\`. */
|
|
154
441
|
type ManyRoutes<N> = [(N extends unknown ? (x: N) => void : never) extends (x: infer I) => void ? I : never] extends [never] ? N : never;
|
|
155
442
|
`;
|
|
156
|
-
var
|
|
443
|
+
var MANIFEST_HEADER = `/**
|
|
157
444
|
* GENERATED by \`xanosdk routes --emit\`. Do not edit.
|
|
158
445
|
*
|
|
159
|
-
* Plain data plus one interpolator
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
446
|
+
* Plain data plus one interpolator, and the request input types of every
|
|
447
|
+
* endpoint, channel and message. The core sections import nothing; the only
|
|
448
|
+
* imports are the packages an installed module's block declares, never the
|
|
449
|
+
* SDK itself. So a frontend gets the typed path/verb (and socket) contract
|
|
450
|
+
* without pulling the SDK runtime into its bundle. Regenerate after changing an
|
|
451
|
+
* endpoint's name, verb, api group or inputs, or a realtime server's, channel's
|
|
452
|
+
* or message's name or inputs.
|
|
163
453
|
*/
|
|
164
454
|
`;
|
|
165
455
|
var FILL_PARAMS = `
|
|
@@ -376,12 +666,13 @@ function planRouteManifest(payload, locked = () => void 0) {
|
|
|
376
666
|
if (guid === void 0) continue;
|
|
377
667
|
const name = text(a.name);
|
|
378
668
|
if (name !== void 0) groupByGuid.set(guid, name);
|
|
379
|
-
const
|
|
380
|
-
if (
|
|
669
|
+
const resolved2 = text(a.canonical) ?? (name !== void 0 ? locked("app", name) : void 0);
|
|
670
|
+
if (resolved2) canonicalByGuid.set(guid, resolved2);
|
|
381
671
|
}
|
|
382
|
-
const
|
|
672
|
+
const storedInputs = /* @__PURE__ */ new Map();
|
|
673
|
+
const rows2 = list("query").map((q) => {
|
|
383
674
|
const group = ref(q.app);
|
|
384
|
-
|
|
675
|
+
const row = {
|
|
385
676
|
verb: q.verb,
|
|
386
677
|
// already an uppercase HttpVerb in the bundle
|
|
387
678
|
// Match getPath(): the path segment drops any leading slash on the name.
|
|
@@ -389,8 +680,10 @@ function planRouteManifest(payload, locked = () => void 0) {
|
|
|
389
680
|
canonical: group !== void 0 ? canonicalByGuid.get(group) : void 0,
|
|
390
681
|
...group !== void 0 && groupByGuid.has(group) ? { group: groupByGuid.get(group) } : {}
|
|
391
682
|
};
|
|
683
|
+
storedInputs.set(row, q.input);
|
|
684
|
+
return row;
|
|
392
685
|
});
|
|
393
|
-
|
|
686
|
+
rows2.sort((a, b) => (a.canonical ?? "").localeCompare(b.canonical ?? "") || a.name.localeCompare(b.name));
|
|
394
687
|
const serverNameByGuid = /* @__PURE__ */ new Map();
|
|
395
688
|
const serverRows = list("realtime_server").flatMap((s) => {
|
|
396
689
|
const name = text(s.name);
|
|
@@ -401,23 +694,51 @@ function planRouteManifest(payload, locked = () => void 0) {
|
|
|
401
694
|
});
|
|
402
695
|
const servers = serverRows.flatMap((s) => s.canonical ? [{ name: s.name, canonical: s.canonical }] : []);
|
|
403
696
|
const describable = new Set(servers.map((s) => s.name));
|
|
697
|
+
const channelGuids = /* @__PURE__ */ new Map();
|
|
404
698
|
const channels = list("channel").flatMap((c) => {
|
|
405
699
|
const name = text(c.name);
|
|
406
700
|
if (name === void 0) return [];
|
|
407
701
|
const serverGuid = ref(c.server);
|
|
408
702
|
const server = serverGuid !== void 0 ? serverNameByGuid.get(serverGuid) : void 0;
|
|
409
703
|
if (server === void 0 || !describable.has(server)) return [];
|
|
410
|
-
|
|
704
|
+
const channel = { name, server };
|
|
705
|
+
channelGuids.set(channel, text(c.guid));
|
|
706
|
+
storedInputs.set(channel, c.input);
|
|
707
|
+
return [channel];
|
|
708
|
+
});
|
|
709
|
+
const resolved = rows2.flatMap((r) => {
|
|
710
|
+
if (!r.canonical) return [];
|
|
711
|
+
const entry = { name: r.name, verb: r.verb, canonical: r.canonical, ...r.group !== void 0 ? { group: r.group } : {} };
|
|
712
|
+
storedInputs.set(entry, storedInputs.get(r));
|
|
713
|
+
return [entry];
|
|
714
|
+
});
|
|
715
|
+
const tables = tableColumns(payload);
|
|
716
|
+
const routeInputs = keyRoutes(resolved).map(({ route, key }) => ({
|
|
717
|
+
key,
|
|
718
|
+
inputs: describeInputs(storedInputs.get(route), tables)
|
|
719
|
+
}));
|
|
720
|
+
const channelKeyByGuid = /* @__PURE__ */ new Map();
|
|
721
|
+
const channelInputs = keyChannels(channels).map(({ channel, key }) => {
|
|
722
|
+
const guid = channelGuids.get(channel);
|
|
723
|
+
if (guid !== void 0) channelKeyByGuid.set(guid, key);
|
|
724
|
+
return { key, inputs: describeInputs(storedInputs.get(channel), tables) };
|
|
725
|
+
});
|
|
726
|
+
const messageInputs = list("message").flatMap((m) => {
|
|
727
|
+
const name = text(m.name);
|
|
728
|
+
const guid = ref(m.channel);
|
|
729
|
+
const channel = guid !== void 0 ? channelKeyByGuid.get(guid) : void 0;
|
|
730
|
+
if (name === void 0 || channel === void 0) return [];
|
|
731
|
+
return [{ key: `${channel} ${name}`, channel, name, inputs: describeInputs(m.input, tables) }];
|
|
411
732
|
});
|
|
733
|
+
messageInputs.sort((a, b) => byCodeUnit(a.key, b.key));
|
|
412
734
|
return {
|
|
413
|
-
rows,
|
|
414
|
-
resolved
|
|
415
|
-
|
|
416
|
-
),
|
|
417
|
-
unresolved: rows.filter((r) => !r.canonical),
|
|
735
|
+
rows: rows2,
|
|
736
|
+
resolved,
|
|
737
|
+
unresolved: rows2.filter((r) => !r.canonical),
|
|
418
738
|
servers,
|
|
419
739
|
unresolvedServers: serverRows.filter((s) => !s.canonical).map((s) => s.name),
|
|
420
|
-
channels
|
|
740
|
+
channels,
|
|
741
|
+
inputs: { routes: routeInputs, channels: channelInputs, messages: messageInputs }
|
|
421
742
|
};
|
|
422
743
|
}
|
|
423
744
|
function unresolvedCanonicalMessage(unresolved, entry) {
|
|
@@ -430,7 +751,8 @@ function renderPlannedManifest(plan, entry = "<entry>") {
|
|
|
430
751
|
if (plan.resolved.length === 0 && plan.servers.length === 0) return void 0;
|
|
431
752
|
return renderRouteManifest(
|
|
432
753
|
plan.resolved,
|
|
433
|
-
plan.servers.length > 0 ? { servers: plan.servers, channels: plan.channels } : void 0
|
|
754
|
+
plan.servers.length > 0 ? { servers: plan.servers, channels: plan.channels } : void 0,
|
|
755
|
+
plan.inputs
|
|
434
756
|
);
|
|
435
757
|
}
|
|
436
758
|
|
|
@@ -438,10 +760,13 @@ export {
|
|
|
438
760
|
RouteManifestError,
|
|
439
761
|
routeKey,
|
|
440
762
|
qualifiedRouteKey,
|
|
763
|
+
keyRoutes,
|
|
764
|
+
keyChannels,
|
|
441
765
|
renderRouteManifest,
|
|
766
|
+
MANIFEST_HEADER,
|
|
442
767
|
ROUTES_MANIFEST_BASENAME,
|
|
443
768
|
planRouteManifest,
|
|
444
769
|
unresolvedCanonicalMessage,
|
|
445
770
|
renderPlannedManifest
|
|
446
771
|
};
|
|
447
|
-
//# sourceMappingURL=chunk-
|
|
772
|
+
//# sourceMappingURL=chunk-LBJA7IEM.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
installedCliAt,
|
|
10
10
|
pathsShownFrom
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-D7BUMOKU.js";
|
|
12
12
|
|
|
13
13
|
// src/emit/project-sdk.ts
|
|
14
14
|
import { existsSync, readFileSync, realpathSync } from "fs";
|
|
@@ -87,4 +87,4 @@ export {
|
|
|
87
87
|
installedCliCommand,
|
|
88
88
|
skewNote
|
|
89
89
|
};
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-LD6ARK3A.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
classifyNpmFailure
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YYC2DZMG.js";
|
|
4
4
|
import {
|
|
5
5
|
condenseNpmError,
|
|
6
6
|
runNpmQuiet,
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "./chunk-ZFDZKNGG.js";
|
|
9
9
|
import {
|
|
10
10
|
detectInstallRoot
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-DNBP4GJN.js";
|
|
12
12
|
import {
|
|
13
13
|
decodeDigest,
|
|
14
14
|
reactPreset
|
|
@@ -17,8 +17,9 @@ import {
|
|
|
17
17
|
blockVersion,
|
|
18
18
|
composeBlock,
|
|
19
19
|
findBlock,
|
|
20
|
+
htmlDialect,
|
|
20
21
|
upsertBlock
|
|
21
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-3EDSPMXN.js";
|
|
22
23
|
import {
|
|
23
24
|
detail,
|
|
24
25
|
projectFileCli,
|
|
@@ -28,7 +29,7 @@ import {
|
|
|
28
29
|
success,
|
|
29
30
|
warn,
|
|
30
31
|
withSpinner
|
|
31
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-D7BUMOKU.js";
|
|
32
33
|
import {
|
|
33
34
|
defaultThemeChoice,
|
|
34
35
|
themeGuidanceSection
|
|
@@ -58,6 +59,8 @@ The published types and JSDoc (\`node_modules/@xano/sdk/**/*.d.ts\`) are that
|
|
|
58
59
|
same surface with the compiler attached. Author against those signatures. Do
|
|
59
60
|
**not** invent an API that isn't there \u2014 if the types don't offer something,
|
|
60
61
|
make your best typed guess from the exported signatures and note the gap.`;
|
|
62
|
+
var README_GUIDANCE = `- \`README.md\` \u2014 for a visitor to the repository: what the app does, how to run it, and
|
|
63
|
+
what it is built on. Its \`## Built with\` footer is a managed block this SDK refreshes.`;
|
|
61
64
|
var LOCK_GUIDANCE = `Object identity derives from \`(type, name)\`, so a rename
|
|
62
65
|
changes an object's guid and the engine DELETES and recreates it rather than
|
|
63
66
|
renaming in place. \`xano/xano.lock\` freezes each guid and each API group's
|
|
@@ -149,9 +152,10 @@ ${LEARN_FROM_THE_LIBRARY}
|
|
|
149
152
|
|
|
150
153
|
\`frontend/src/lib/api.ts\` takes request paths from \`xano/routes.gen.ts\`
|
|
151
154
|
(\`routePath("GET notes/{id}", { id })\`), generated from the query defs by
|
|
152
|
-
\`npm run xano:routes\` and regenerated by dev, build and typecheck
|
|
153
|
-
|
|
154
|
-
|
|
155
|
+
\`npm run xano:routes\` and regenerated by dev, build and typecheck. Request types
|
|
156
|
+
come from the same file (\`RouteInputs["POST create_note"]\`, \`MessageInputs\` for
|
|
157
|
+
realtime); response types from the defs with \`import type\` (\`InferResponse\`).
|
|
158
|
+
Never hand-type a URL or a request body, and never import a
|
|
155
159
|
def as a value in the frontend: its \`getPath()\` drags the backend into the bundle.
|
|
156
160
|
|
|
157
161
|
### Layout
|
|
@@ -160,6 +164,7 @@ def as a value in the frontend: its \`getPath()\` drags the backend into the bun
|
|
|
160
164
|
groups, and endpoints. Pin each API group's canonical slug so public paths are
|
|
161
165
|
stable and \`xano:routes\` resolves without a lock file.
|
|
162
166
|
- \`xano/EXAMPLE.md\` \u2014 the walkthrough for adding your first table + endpoint.
|
|
167
|
+
${README_GUIDANCE}
|
|
163
168
|
${frontendSection(frontend)}
|
|
164
169
|
|
|
165
170
|
### Workflow
|
|
@@ -264,8 +269,9 @@ ${LEARN_FROM_THE_LIBRARY}
|
|
|
264
269
|
|
|
265
270
|
\`frontend/src/lib/api.ts\` takes request paths from \`xano/routes.gen.ts\`
|
|
266
271
|
(\`routePath("GET notes/{id}", { id })\`), generated from the query defs in
|
|
267
|
-
\`xano/\` by \`npm run xano:routes
|
|
268
|
-
\`
|
|
272
|
+
\`xano/\` by \`npm run xano:routes\`. Request types come from the same file
|
|
273
|
+
(\`RouteInputs["<VERB> <name>"]\`, \`MessageInputs\` for realtime); response types
|
|
274
|
+
from the defs with \`import type\` (\`InferResponse\`). Never hand-type a URL or a
|
|
269
275
|
request body, and never import a def as a value in the frontend.
|
|
270
276
|
|
|
271
277
|
### Layout
|
|
@@ -273,6 +279,7 @@ request body, and never import a def as a value in the frontend.
|
|
|
273
279
|
- \`xano/index.ts\` \u2014 the barrel: default-exports the \`workspace()\` with every pulled object registered.
|
|
274
280
|
- \`xano/<kind>/<name>.ts\` \u2014 one file per object (tables in \`xano/table/\`); \`xano/_shared.ts\` \u2014 anything else referenced from more than one file.
|
|
275
281
|
- \`xano/README.md\` \u2014 the decode report for this pull.
|
|
282
|
+
${README_GUIDANCE}
|
|
276
283
|
${frontendSection(frontend)}
|
|
277
284
|
|
|
278
285
|
### Workflow
|
|
@@ -306,15 +313,7 @@ Other \`@xano-sdk/*\` packages register onto the same workspace \u2014 but a
|
|
|
306
313
|
composing them from a module outside \`xano/\`.
|
|
307
314
|
`;
|
|
308
315
|
}
|
|
309
|
-
var
|
|
310
|
-
var BLOCK_END = "<!-- END:xanosdk-agent-rules -->";
|
|
311
|
-
var AGENT_DIALECT = {
|
|
312
|
-
begin: () => BLOCK_BEGIN,
|
|
313
|
-
end: () => BLOCK_END,
|
|
314
|
-
stamp: (version) => `<!-- xanosdk ${version} \u2014 generated; edits inside this block are overwritten -->`,
|
|
315
|
-
parseStamp: (block) => /<!-- xanosdk ([^\s]+) — generated/.exec(block)?.[1] ?? null
|
|
316
|
-
};
|
|
317
|
-
var AGENT_BLOCK = { dialect: AGENT_DIALECT, pkg: "xanosdk-agent-rules" };
|
|
316
|
+
var AGENT_BLOCK = { dialect: htmlDialect("xanosdk-agent-rules"), pkg: "xanosdk-agent-rules" };
|
|
318
317
|
function managedBlock(body, version) {
|
|
319
318
|
return composeBlock(AGENT_BLOCK, [body], version);
|
|
320
319
|
}
|
|
@@ -661,4 +660,4 @@ export {
|
|
|
661
660
|
changedOnDisk,
|
|
662
661
|
scaffoldProject
|
|
663
662
|
};
|
|
664
|
-
//# sourceMappingURL=chunk-
|
|
663
|
+
//# sourceMappingURL=chunk-LL7SGTRC.js.map
|