@metabase/cli 0.1.5 → 0.1.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 (228) hide show
  1. package/README.md +128 -115
  2. package/dist/add-collection-C9BdVBs2.mjs +11 -0
  3. package/dist/{add-collection-C_iovi9i.mjs → add-collection-DQjTlDNF.mjs} +12 -5
  4. package/dist/archive-B3qiL-kK.mjs +40 -0
  5. package/dist/{archive-DdaP94H3.mjs → archive-BXzghEQX.mjs} +10 -9
  6. package/dist/{archive-WaEW85NB.mjs → archive-CBGKzEAl.mjs} +9 -8
  7. package/dist/{archive-BKPO8lEO.mjs → archive-CuVk8iwN.mjs} +10 -9
  8. package/dist/archive-DTN9tLGT.mjs +40 -0
  9. package/dist/{archive-Dvzrmdbk.mjs → archive-De8jzzq7.mjs} +10 -9
  10. package/dist/auth-D9eAyVoG.mjs +19 -0
  11. package/dist/{body-XtR7-uCO.mjs → body-tcURGnGh.mjs} +4 -4
  12. package/dist/{branches-XUY4JY-X.mjs → branches-CIGkjXIk.mjs} +11 -7
  13. package/dist/{cancel-BrUVO_ax.mjs → cancel-pPsvgJ0Z.mjs} +9 -8
  14. package/dist/{cancel-task-oXheTOB6.mjs → cancel-task-BLGE4UlL.mjs} +12 -8
  15. package/dist/capabilities-7e9MgquN.mjs +29 -0
  16. package/dist/card-DDDrWcDU.mjs +20 -0
  17. package/dist/{card-CQxvHeyP.mjs → card-ezYiriML.mjs} +1 -1
  18. package/dist/{cards-CONTTAG9.mjs → cards-Dq3nx_9n.mjs} +8 -7
  19. package/dist/cli.mjs +264 -44
  20. package/dist/collection-DkEvCDar.mjs +20 -0
  21. package/dist/{predicates-CGO17Q15.mjs → command-augment-BH9qgQ5u.mjs} +66 -14
  22. package/dist/{create-Cs2xntFG.mjs → create-9DBTkbMq.mjs} +18 -16
  23. package/dist/{create-kYpjobrq.mjs → create-B1dyuL9Y.mjs} +16 -10
  24. package/dist/create-BIphz0kO.mjs +52 -0
  25. package/dist/create-BcgoukG4.mjs +50 -0
  26. package/dist/create-BdPoSk_7.mjs +50 -0
  27. package/dist/{create-DZxUeqdf.mjs → create-BrUqxreg.mjs} +11 -10
  28. package/dist/create-DHscDhRd.mjs +50 -0
  29. package/dist/{create-Dq25vsMu.mjs → create-aPaUEGdr.mjs} +11 -10
  30. package/dist/{create-branch-D5u14AxL.mjs → create-branch-DGoc9CUU.mjs} +12 -8
  31. package/dist/{create-Ca9lIDwP.mjs → create-w3mQg9n4.mjs} +11 -10
  32. package/dist/{credentials-BIQ1cEzM.mjs → credentials-qryRLUed.mjs} +12 -11
  33. package/dist/current-task-DZM28rnr.mjs +40 -0
  34. package/dist/{dashboard-CnMD04PQ.mjs → dashboard-B4bn3z6t.mjs} +2 -1
  35. package/dist/dashboard-BLf1RZlk.mjs +21 -0
  36. package/dist/{database-vvig8k4x.mjs → database-BXiue1in.mjs} +1 -1
  37. package/dist/{database-BSvzYlRe.mjs → database-Ce1gOJF7.mjs} +3 -3
  38. package/dist/db-CWTFe_FZ.mjs +22 -0
  39. package/dist/{delete-VTAS9EUt.mjs → delete-BPaFdHZP.mjs} +11 -8
  40. package/dist/{delete-CUx6RT9e.mjs → delete-BrJOotpW.mjs} +11 -8
  41. package/dist/{remove-C6bS0Z6w.mjs → delete-FFj1xQWO.mjs} +25 -20
  42. package/dist/{delete-runtime-DfFMWJJ6.mjs → delete-runtime-uuYbd4k2.mjs} +9 -7
  43. package/dist/{delete-table-DzUneMKe.mjs → delete-table-CNupWUO0.mjs} +11 -8
  44. package/dist/{deprovision-CpJfGgCt.mjs → deprovision-BNr9fPDY.mjs} +18 -12
  45. package/dist/{dirty-nkAOXxgC.mjs → dirty-BCkNOY8c.mjs} +11 -7
  46. package/dist/{docker-D5FTIoD0.mjs → docker-Ds252Mwc.mjs} +4 -4
  47. package/dist/{translate-Cqsd0Px5.mjs → eid-CLY5X0Uw.mjs} +43 -23
  48. package/dist/error-ZsFeevV2.mjs +191 -0
  49. package/dist/{export-BWvY7X_G.mjs → export-CgHgWW3I.mjs} +20 -18
  50. package/dist/{field-B3gvaqpK.mjs → field-E0IBy4Uw.mjs} +12 -3
  51. package/dist/field-LL6W_c-c.mjs +18 -0
  52. package/dist/{fields-dH16G5UV.mjs → fields-RkRWU-u9.mjs} +9 -8
  53. package/dist/{get-D96QEU49.mjs → get-42tJ7BNp.mjs} +8 -7
  54. package/dist/{get-C6SR3A9t.mjs → get-B8l4t4Pz.mjs} +10 -9
  55. package/dist/{get-BnBRKHr7.mjs → get-B9kwSs6U.mjs} +8 -7
  56. package/dist/{get-7macOPAI.mjs → get-Bo4Cpd_c.mjs} +7 -7
  57. package/dist/{get-BcqxMVC1.mjs → get-C9O_aEGo.mjs} +8 -7
  58. package/dist/{get-CKxlhMy1.mjs → get-CRvbChoX.mjs} +8 -7
  59. package/dist/{get-B7i_nYJB.mjs → get-CTDqioaj.mjs} +8 -7
  60. package/dist/{get-D8e_RzZ0.mjs → get-CiZrZJLt.mjs} +10 -9
  61. package/dist/{get-B08K82JV.mjs → get-CvmqPN30.mjs} +8 -7
  62. package/dist/{get-CACaBFLt.mjs → get-DmzgSgrl.mjs} +9 -8
  63. package/dist/{get-R7OaVL_t.mjs → get-DsqGHNHN.mjs} +8 -7
  64. package/dist/get-run-CBwcRc8E.mjs +38 -0
  65. package/dist/{get-DNN1X2gN.mjs → get-sMpa-X4E.mjs} +9 -8
  66. package/dist/{get-DAWofnzK.mjs → get-y17zJMnU.mjs} +8 -7
  67. package/dist/git-sync-CrWTo3YX.mjs +28 -0
  68. package/dist/{has-remote-changes-BAnIXQXU.mjs → has-remote-changes-CfRidwXT.mjs} +13 -8
  69. package/dist/{import-CfdPEMng.mjs → import-BZV0Z2KR.mjs} +21 -18
  70. package/dist/{input-BQ-BZA8h.mjs → input-cMSEqISy.mjs} +7 -4
  71. package/dist/is-dirty-CPzOnnH6.mjs +10 -0
  72. package/dist/{is-dirty-CZWcG0vj.mjs → is-dirty-hKcB4OH9.mjs} +9 -4
  73. package/dist/{items-DqwahOKf.mjs → items-C94eW2Yd.mjs} +10 -9
  74. package/dist/key-vkNkH82H.mjs +17 -0
  75. package/dist/license-B37055sr.mjs +17 -0
  76. package/dist/{list-L63TpX1t.mjs → list-B0V7FeL2.mjs} +7 -7
  77. package/dist/{list-Bkd7Nbds.mjs → list-BFlzLGlw.mjs} +7 -6
  78. package/dist/{list-yxVAE1S7.mjs → list-BJXaGk-z.mjs} +7 -6
  79. package/dist/{list-BqNMpIXy.mjs → list-BS_Bxejg.mjs} +9 -8
  80. package/dist/{list-J277Qtki.mjs → list-BmHoYJr7.mjs} +7 -6
  81. package/dist/list-C-oZe1_p.mjs +173 -0
  82. package/dist/{list-ViT2KWhv.mjs → list-CF1pMN4S.mjs} +7 -6
  83. package/dist/{list-BpNU1neq.mjs → list-CU6sOfI-.mjs} +9 -7
  84. package/dist/{list-oftHLFbE.mjs → list-CqN4gvCk.mjs} +9 -7
  85. package/dist/{list-DBOYoJtA.mjs → list-DUXdt0XI.mjs} +10 -6
  86. package/dist/{list-D41gfkKb.mjs → list-DfDZr55C.mjs} +10 -8
  87. package/dist/{list-vF4EneaE.mjs → list-DrINpVLM.mjs} +7 -6
  88. package/dist/{list-DJcGwJ4W.mjs → list-DuSoEk_J.mjs} +9 -8
  89. package/dist/{list-CQkDqphl.mjs → list-HS15y_WN.mjs} +7 -6
  90. package/dist/login-enh9Yimb.mjs +181 -0
  91. package/dist/{logout-DD4q5whi.mjs → logout-BWLPLDh8.mjs} +13 -11
  92. package/dist/{logs-Ci3mJE2z.mjs → logs-Cu3QtvPs.mjs} +9 -8
  93. package/dist/{manifest-CGM7XNLC.mjs → manifest-BNh0Lw6p.mjs} +15 -15
  94. package/dist/{measure-BEQfnLdN.mjs → measure-Bt3InQsA.mjs} +2 -2
  95. package/dist/measure-CDlEPFtB.mjs +19 -0
  96. package/dist/{metadata-BDat-jN9.mjs → metadata-BTTEBWdS.mjs} +10 -9
  97. package/dist/{metadata-29_qlqbz.mjs → metadata-D2TxboMm.mjs} +9 -8
  98. package/dist/parse-enum-CrEWOhuY.mjs +11 -0
  99. package/dist/{parse-id-CysSaCbf.mjs → parse-id-0_tOPvfI.mjs} +1 -1
  100. package/dist/{parse-ref-D1yeDOn8.mjs → parse-ref-DKag6a6I.mjs} +1 -1
  101. package/dist/{parse-schemas-B10n01ez.mjs → parse-schemas-D-qVLl4z.mjs} +2 -2
  102. package/dist/{path-DLByFMMA.mjs → path-C8GrBdgT.mjs} +7 -7
  103. package/dist/{poll-p9Y7-JEQ.mjs → poll-4eoh5J0r.mjs} +2 -2
  104. package/dist/{poll-task-BQe0NvJZ.mjs → poll-task-51WRdugU.mjs} +19 -20
  105. package/dist/{preflight-CvFu0Cct.mjs → preflight-BhsErYz3.mjs} +4 -4
  106. package/dist/{process-zJeVJZTM.mjs → process-CM7Uu5q_.mjs} +1 -1
  107. package/dist/{prompt-DgDNy_Pc.mjs → prompt-CFKoys7k.mjs} +3 -1
  108. package/dist/provision-Chf86BF0.mjs +83 -0
  109. package/dist/{ps-BxQdpkr5.mjs → ps-CEYtsKBj.mjs} +5 -3
  110. package/dist/ps-CIDwaubS.mjs +11 -0
  111. package/dist/{query-C7zTlFJA.mjs → query-BBCAF-tG.mjs} +17 -14
  112. package/dist/{query-CFH4nBlK.mjs → query-DYVBnu9d.mjs} +12 -9
  113. package/dist/query-result-ABPLz6I4.mjs +19 -0
  114. package/dist/{remove-BuWxx3hY.mjs → remove-2yInufA6.mjs} +14 -12
  115. package/dist/remove-collection-CBAHz0Dk.mjs +44 -0
  116. package/dist/{render-DuoDUTVL.mjs → render-0_GsapXa.mjs} +51 -23
  117. package/dist/render-khznBlla.mjs +32 -0
  118. package/dist/{rescan-values-DabyRYQ_.mjs → rescan-values-cfTSNQZo.mjs} +12 -11
  119. package/dist/{run-Cl-9RtC4.mjs → run-qgdEJv-I.mjs} +17 -15
  120. package/dist/{runs-BH6s1Zao.mjs → runs-BFIIH4GL.mjs} +9 -8
  121. package/dist/{runtime-CDu6fykq.mjs → runtime-Duawf5lE.mjs} +653 -428
  122. package/dist/{schema-tables-i58wp_p3.mjs → schema-tables-C2xM3dho.mjs} +9 -8
  123. package/dist/{schemas-_m8RYRl9.mjs → schemas-BP7xiktH.mjs} +7 -6
  124. package/dist/{search-DObOsjbP.mjs → search-DYP3lOlq.mjs} +12 -16
  125. package/dist/segment-B6HnNGDs.mjs +19 -0
  126. package/dist/{set-CwVWeAsi.mjs → set-DpRQqdo7.mjs} +13 -11
  127. package/dist/{set-CJA9dpK6.mjs → set-Tt-ioa4L.mjs} +14 -13
  128. package/dist/setting-DUa96KF3.mjs +17 -0
  129. package/dist/{setup-DqBOe3HZ.mjs → setup-BPlllnim.mjs} +10 -9
  130. package/dist/{skills-CHU7uuDU.mjs → skills-BkregMyb.mjs} +2 -2
  131. package/dist/{skills-C2rTVj0n.mjs → skills-SqbPo0BI.mjs} +3 -3
  132. package/dist/snippet-dJ68tGsl.mjs +19 -0
  133. package/dist/{start-CfruN4wF.mjs → start-DJZA67WF.mjs} +70 -38
  134. package/dist/{stash-CWuXKSZq.mjs → stash-C89zNKxo.mjs} +21 -18
  135. package/dist/{status-D-RYZB9G.mjs → status-B1EJ_jv0.mjs} +16 -9
  136. package/dist/status-BNvFPemM.mjs +100 -0
  137. package/dist/status-D5wSqYV_.mjs +34 -0
  138. package/dist/{stop-D8Hr4cKX.mjs → stop-5rCLmkCQ.mjs} +16 -11
  139. package/dist/{summary-Lt2XLBK9.mjs → summary-Cihbx0Qs.mjs} +8 -7
  140. package/dist/{sync-schema-BDElSynU.mjs → sync-schema-C3odu0ZH.mjs} +12 -11
  141. package/dist/table-J2f0STnB.mjs +19 -0
  142. package/dist/{table-B-PYcgGb.mjs → table-qDD2kApF.mjs} +1 -1
  143. package/dist/{transform-job-BrhOLO4M.mjs → transform-job-DjhoJbiV.mjs} +1 -1
  144. package/dist/transform-job-OW4SDhsQ.mjs +19 -0
  145. package/dist/transform-q1LYWQtW.mjs +24 -0
  146. package/dist/{tree-DfvjDjmk.mjs → tree-mvq9gM9w.mjs} +7 -6
  147. package/dist/{update-DzgXF082.mjs → update-BoIiuC70.mjs} +16 -14
  148. package/dist/{update-qnFY5IuC.mjs → update-C0jP0AKT.mjs} +12 -11
  149. package/dist/{update-zp7pCBZH.mjs → update-CbBnHz42.mjs} +16 -14
  150. package/dist/{update-B0bjPqKC.mjs → update-CtOo3LsX.mjs} +13 -12
  151. package/dist/{update-CVxOxmt6.mjs → update-DCrOQ1PW.mjs} +17 -15
  152. package/dist/{update-BYduslhn.mjs → update-DEZayTb4.mjs} +20 -15
  153. package/dist/{update-BgcroYkF.mjs → update-DwRxdflw.mjs} +12 -11
  154. package/dist/{update-D9Z8cL7h.mjs → update-Rr4usmCo.mjs} +12 -11
  155. package/dist/{update-DuA8-cCq.mjs → update-VvKMnwsM.mjs} +16 -14
  156. package/dist/{update-dashcard-CQ3kmmss.mjs → update-dashcard-DFvIz8Qj.mjs} +12 -11
  157. package/dist/{update-CqnDMNtZ.mjs → update-tRparnUs.mjs} +18 -16
  158. package/dist/{upgrade-CIgTr2CG.mjs → upgrade-D-Rl_fH9.mjs} +16 -29
  159. package/dist/{url-B5MgZXzg.mjs → url-BB6jeNQj.mjs} +11 -10
  160. package/dist/{uuid-CJz9TmHI.mjs → uuid-BSVUk8u2.mjs} +8 -6
  161. package/dist/{validate-CB0bu50i.mjs → validate-dPEOnOf8.mjs} +2 -1
  162. package/dist/{validate-query-CavIA0Q2.mjs → validate-query-CYvOP8Ld.mjs} +3 -3
  163. package/dist/values-D1RJE4H6.mjs +45 -0
  164. package/dist/verify-A7BWfBPZ.mjs +79 -0
  165. package/dist/{wait-BFqBlg0y.mjs → wait-B17I_pWy.mjs} +2 -2
  166. package/dist/{wait-tDp9ZOou.mjs → wait-DK5QDZ8n.mjs} +14 -10
  167. package/dist/{wait-flags-CN-e9zNq.mjs → wait-flags-DlfbIXHw.mjs} +20 -9
  168. package/dist/{workspace-credentials-4lIxxz4g.mjs → workspace-credentials-8CBMQJFz.mjs} +2 -2
  169. package/dist/workspace-ri6r3zWo.mjs +25 -0
  170. package/dist/{yaml-ECiog374.mjs → yaml-Gv6wRFMF.mjs} +1 -1
  171. package/package.json +2 -1
  172. package/skill-data/core/SKILL.md +55 -453
  173. package/skill-data/git-sync/SKILL.md +1 -1
  174. package/skill-data/mbql/SKILL.md +156 -0
  175. package/skill-data/mbql/references/operators.md +253 -0
  176. package/skill-data/transform/SKILL.md +2 -40
  177. package/skill-data/viz/SKILL.md +137 -0
  178. package/skill-data/viz/references/settings.md +312 -0
  179. package/skill-data/workspace/SKILL.md +45 -63
  180. package/skills/metabase-cli/SKILL.md +5 -26
  181. package/dist/add-collection-ucsyAMkV.mjs +0 -11
  182. package/dist/api-key-BENHbTbV.mjs +0 -13
  183. package/dist/auth-DICRtJDy.mjs +0 -19
  184. package/dist/card-l-UmrUIo.mjs +0 -20
  185. package/dist/collection-oV0olVY-.mjs +0 -19
  186. package/dist/command-augment-D9pI9Vbh.mjs +0 -11
  187. package/dist/create-CrUq6sib.mjs +0 -125
  188. package/dist/create-D3Z878yr.mjs +0 -50
  189. package/dist/create-Le3Bqn7b.mjs +0 -48
  190. package/dist/create-V-q2rU0T.mjs +0 -48
  191. package/dist/create-swbIXdo5.mjs +0 -48
  192. package/dist/current-task-DCq7rk9V.mjs +0 -36
  193. package/dist/dashboard-hbKDd36X.mjs +0 -20
  194. package/dist/db-qVK6NsdB.mjs +0 -22
  195. package/dist/eid-CDFXX_6H.mjs +0 -13
  196. package/dist/field-C0LE7RQI.mjs +0 -18
  197. package/dist/flag-pair-Fmcdkrfx.mjs +0 -17
  198. package/dist/get-run-CwFuR4Uw.mjs +0 -36
  199. package/dist/git-sync-DV7YjniX.mjs +0 -28
  200. package/dist/is-dirty-LxVbm2C5.mjs +0 -10
  201. package/dist/key-CCJdVWKc.mjs +0 -12
  202. package/dist/license-Cb6ewEJO.mjs +0 -17
  203. package/dist/list-DV6CONhp.mjs +0 -55
  204. package/dist/login-D1nZwgKv.mjs +0 -192
  205. package/dist/measure-XhJuL77y.mjs +0 -19
  206. package/dist/package-DFUprkSZ.mjs +0 -85
  207. package/dist/provision-BP-b4Are.mjs +0 -77
  208. package/dist/ps-Bk6unzaX.mjs +0 -11
  209. package/dist/remove-collection-Bc4roCq0.mjs +0 -38
  210. package/dist/segment-DfxZdJmR.mjs +0 -19
  211. package/dist/setting-Czy4ws6h.mjs +0 -18
  212. package/dist/snippet-BCY4KHBU.mjs +0 -19
  213. package/dist/status-1oUnw803.mjs +0 -56
  214. package/dist/status-J9HIDcA5.mjs +0 -32
  215. package/dist/table-BwX3Ib5f.mjs +0 -19
  216. package/dist/transform-iaAi37V0.mjs +0 -24
  217. package/dist/transform-job-Bemonf82.mjs +0 -19
  218. package/dist/values-BXN6tx1i.mjs +0 -36
  219. package/dist/workspace-BBsT0H0g.mjs +0 -24
  220. /package/dist/{body-flags-BK7J6Daz.mjs → body-flags-D7q87Btw.mjs} +0 -0
  221. /package/dist/{collection-B3sPXRLs.mjs → collection-Bcy8cWYH.mjs} +0 -0
  222. /package/dist/{paginate-CTSfuYiF.mjs → paginate-BexjkjbY.mjs} +0 -0
  223. /package/dist/{revision-message-flag-oyq2xrDU.mjs → revision-message-flag-DY29-cgz.mjs} +0 -0
  224. /package/dist/{segment-BMrUBz94.mjs → segment-DhBmcr_E.mjs} +0 -0
  225. /package/dist/{setting-CTaAeMci.mjs → setting-BzCng1Ub.mjs} +0 -0
  226. /package/dist/{snippet-CSWqkslB.mjs → snippet-bi_0XbNT.mjs} +0 -0
  227. /package/dist/{transform-DR4ejuPM.mjs → transform-BKahefz_.mjs} +0 -0
  228. /package/dist/{workspace-DUfqhPm5.mjs → workspace-D8HtUN0y.mjs} +0 -0
@@ -1,11 +1,11 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-CDu6fykq.mjs";
6
- import { parseId } from "./parse-id-CysSaCbf.mjs";
7
- import "./field-B3gvaqpK.mjs";
8
- import { Card, cardView } from "./card-CQxvHeyP.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderSummary } from "./render-0_GsapXa.mjs";
6
+ import "./field-E0IBy4Uw.mjs";
7
+ import { Card, cardView } from "./card-ezYiriML.mjs";
8
+ import { parseId } from "./parse-id-0_tOPvfI.mjs";
9
9
 
10
10
  //#region src/commands/card/archive.ts
11
11
  var archive_default = defineMetabaseCommand({
@@ -13,6 +13,7 @@ var archive_default = defineMetabaseCommand({
13
13
  name: "archive",
14
14
  description: "Archive (soft-delete) a card by id"
15
15
  },
16
+ capabilities: { minVersion: 58 },
16
17
  args: {
17
18
  ...outputFlags,
18
19
  ...profileFlag,
@@ -32,7 +33,7 @@ var archive_default = defineMetabaseCommand({
32
33
  method: "PUT",
33
34
  body: { archived: true }
34
35
  });
35
- renderItem(updated, cardView, ctx);
36
+ renderSummary(updated, cardView, `Archived card ${updated.id} "${updated.name}".`, ctx);
36
37
  }
37
38
  });
38
39
 
@@ -0,0 +1,19 @@
1
+ import { defineCommand } from "citty";
2
+
3
+ //#region src/commands/auth/index.ts
4
+ var auth_default = defineCommand({
5
+ meta: {
6
+ name: "auth",
7
+ description: "Authenticate against a Metabase instance"
8
+ },
9
+ default: "login",
10
+ subCommands: {
11
+ login: () => import("./login-enh9Yimb.mjs").then((m) => m.default),
12
+ status: () => import("./status-BNvFPemM.mjs").then((m) => m.default),
13
+ list: () => import("./list-C-oZe1_p.mjs").then((m) => m.default),
14
+ logout: () => import("./logout-BWLPLDh8.mjs").then((m) => m.default)
15
+ }
16
+ });
17
+
18
+ //#endregion
19
+ export { auth_default as default };
@@ -1,6 +1,6 @@
1
- import { ConfigError } from "./predicates-CGO17Q15.mjs";
2
- import { readInput } from "./input-BQ-BZA8h.mjs";
3
- import { parseJson } from "./runtime-CDu6fykq.mjs";
1
+ import { ConfigError } from "./command-augment-BH9qgQ5u.mjs";
2
+ import { parseJson } from "./runtime-Duawf5lE.mjs";
3
+ import { DEFAULT_FLAG_NAME, readInput } from "./input-cMSEqISy.mjs";
4
4
 
5
5
  //#region src/runtime/body.ts
6
6
  async function readBody(sources, schema) {
@@ -10,7 +10,7 @@ async function readBody(sources, schema) {
10
10
  }
11
11
  function assertSingleSource(sources) {
12
12
  const provided = [];
13
- if (sources.flag !== void 0 && sources.flag !== "") provided.push("--body");
13
+ if (sources.flag !== void 0 && sources.flag !== "") provided.push(DEFAULT_FLAG_NAME);
14
14
  if (sources.file !== void 0 && sources.file !== "") provided.push("--file");
15
15
  if (sources.positional !== void 0 && sources.positional !== "") provided.push("positional");
16
16
  if (provided.length > 1) throw new ConfigError(`multiple body sources given (${provided.join(", ")}); pass exactly one`);
@@ -1,10 +1,10 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import { REMOTE_SYNC_PATHS } from "./poll-task-BQe0NvJZ.mjs";
7
- import "./poll-p9Y7-JEQ.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import { REMOTE_SYNC_PATHS } from "./poll-task-51WRdugU.mjs";
7
+ import "./poll-4eoh5J0r.mjs";
8
8
  import { z } from "zod";
9
9
 
10
10
  //#region src/commands/git-sync/branches.ts
@@ -23,6 +23,10 @@ var branches_default = defineMetabaseCommand({
23
23
  name: "branches",
24
24
  description: "List branches on the configured git remote"
25
25
  },
26
+ capabilities: {
27
+ minVersion: 60,
28
+ tokenFeature: "remote_sync"
29
+ },
26
30
  args: {
27
31
  ...outputFlags,
28
32
  ...profileFlag,
@@ -1,9 +1,9 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-CDu6fykq.mjs";
6
- import { parseId } from "./parse-id-CysSaCbf.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderSummary } from "./render-0_GsapXa.mjs";
6
+ import { parseId } from "./parse-id-0_tOPvfI.mjs";
7
7
  import { z } from "zod";
8
8
 
9
9
  //#region src/commands/transform/cancel.ts
@@ -26,6 +26,7 @@ var cancel_default = defineMetabaseCommand({
26
26
  name: "cancel",
27
27
  description: "Cancel the current run for a transform"
28
28
  },
29
+ capabilities: { minVersion: 59 },
29
30
  args: {
30
31
  ...outputFlags,
31
32
  ...profileFlag,
@@ -45,10 +46,10 @@ var cancel_default = defineMetabaseCommand({
45
46
  method: "POST",
46
47
  expectContentType: "binary"
47
48
  });
48
- renderItem({
49
+ renderSummary({
49
50
  canceled: true,
50
51
  id
51
- }, transformCancelView, ctx);
52
+ }, transformCancelView, `Canceled the current run for transform ${id}.`, ctx);
52
53
  }
53
54
  });
54
55
 
@@ -1,10 +1,10 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-CDu6fykq.mjs";
6
- import { REMOTE_SYNC_PATHS, SyncTask, syncTaskView } from "./poll-task-BQe0NvJZ.mjs";
7
- import "./poll-p9Y7-JEQ.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderSummary } from "./render-0_GsapXa.mjs";
6
+ import { REMOTE_SYNC_PATHS, SyncTask, syncTaskView } from "./poll-task-51WRdugU.mjs";
7
+ import "./poll-4eoh5J0r.mjs";
8
8
 
9
9
  //#region src/commands/git-sync/cancel-task.ts
10
10
  var cancel_task_default = defineMetabaseCommand({
@@ -12,6 +12,10 @@ var cancel_task_default = defineMetabaseCommand({
12
12
  name: "cancel-task",
13
13
  description: "Cancel the running git-sync task"
14
14
  },
15
+ capabilities: {
16
+ minVersion: 60,
17
+ tokenFeature: "remote_sync"
18
+ },
15
19
  args: {
16
20
  ...outputFlags,
17
21
  ...profileFlag,
@@ -22,7 +26,7 @@ var cancel_task_default = defineMetabaseCommand({
22
26
  async run({ ctx, getClient }) {
23
27
  const client = await getClient();
24
28
  const task = await client.requestParsed(SyncTask, REMOTE_SYNC_PATHS.cancelTask, { method: "POST" });
25
- renderItem(task, syncTaskView, ctx);
29
+ renderSummary(task, syncTaskView, `Requested cancellation of ${task.sync_task_type} task #${task.id}.`, ctx);
26
30
  }
27
31
  });
28
32
 
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/runtime/predicates.ts
4
+ function isPlainObject(value) {
5
+ return typeof value === "object" && value !== null && !Array.isArray(value);
6
+ }
7
+
8
+ //#endregion
9
+ //#region src/output/notice.ts
10
+ function warn(message) {
11
+ process.stderr.write(message + "\n");
12
+ }
13
+ function listTruncationNotice(bytes) {
14
+ return `… cut at ${bytes} bytes; rerun with --max-bytes 0`;
15
+ }
16
+ function itemOversizeMessage(bytes, maxBytes) {
17
+ return `output is ${bytes} bytes, over the ${maxBytes}-byte --max-bytes cap; narrow with --fields, or pass --max-bytes 0 to disable`;
18
+ }
19
+
20
+ //#endregion
21
+ //#region src/runtime/capabilities.ts
22
+ const Capabilities = z.object({
23
+ minVersion: z.number(),
24
+ tokenFeature: z.string().optional()
25
+ });
26
+ const BASELINE_CAPABILITIES = Object.freeze({ minVersion: 58 });
27
+
28
+ //#endregion
29
+ export { BASELINE_CAPABILITIES, Capabilities, isPlainObject, itemOversizeMessage, listTruncationNotice, warn };
@@ -0,0 +1,20 @@
1
+ import { defineCommand } from "citty";
2
+
3
+ //#region src/commands/card/index.ts
4
+ var card_default = defineCommand({
5
+ meta: {
6
+ name: "card",
7
+ description: "Manage Metabase cards (questions, models, metrics)"
8
+ },
9
+ subCommands: {
10
+ list: () => import("./list-DfDZr55C.mjs").then((mod) => mod.default),
11
+ get: () => import("./get-sMpa-X4E.mjs").then((mod) => mod.default),
12
+ query: () => import("./query-DYVBnu9d.mjs").then((mod) => mod.default),
13
+ create: () => import("./create-BIphz0kO.mjs").then((mod) => mod.default),
14
+ update: () => import("./update-DCrOQ1PW.mjs").then((mod) => mod.default),
15
+ archive: () => import("./archive-De8jzzq7.mjs").then((mod) => mod.default)
16
+ }
17
+ });
18
+
19
+ //#endregion
20
+ export { card_default as default };
@@ -1,4 +1,4 @@
1
- import { FieldBaseType, FieldSemanticType } from "./field-B3gvaqpK.mjs";
1
+ import { FieldBaseType, FieldSemanticType } from "./field-E0IBy4Uw.mjs";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/domain/card.ts
@@ -1,10 +1,10 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import { parseId } from "./parse-id-CysSaCbf.mjs";
7
- import { DashboardDetail, DashcardCompact, dashcardView } from "./dashboard-CnMD04PQ.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import { parseId } from "./parse-id-0_tOPvfI.mjs";
7
+ import { DashboardDetail, DashcardCompact, dashcardView } from "./dashboard-B4bn3z6t.mjs";
8
8
 
9
9
  //#region src/commands/dashboard/cards.ts
10
10
  const DashcardListEnvelope = listEnvelopeSchema(DashcardCompact);
@@ -13,6 +13,7 @@ var cards_default = defineMetabaseCommand({
13
13
  name: "cards",
14
14
  description: "List dashcards on a dashboard"
15
15
  },
16
+ capabilities: { minVersion: 58 },
16
17
  args: {
17
18
  ...outputFlags,
18
19
  ...profileFlag,
package/dist/cli.mjs CHANGED
@@ -1,8 +1,55 @@
1
1
  #!/usr/bin/env node
2
- import { package_default } from "./package-DFUprkSZ.mjs";
3
- import { getMetabaseAugment } from "./command-augment-D9pI9Vbh.mjs";
2
+ import { ConfigError, flagConsumesValue, getMetabaseAugment, normalizeFlag, resolveCitty, toAliasArray } from "./command-augment-BH9qgQ5u.mjs";
3
+ import { connectionFlags, outputFlags, package_default, profileFlag, reportError } from "./error-ZsFeevV2.mjs";
4
4
  import { defineCommand, renderUsage, runMain } from "citty";
5
5
 
6
+ //#region src/commands/global-flags.ts
7
+ const ARGUMENT_SEPARATOR = "--";
8
+ const NEGATION_PREFIX = "no-";
9
+ const GLOBAL_FLAG_ARGS = {
10
+ ...outputFlags,
11
+ ...profileFlag,
12
+ ...connectionFlags
13
+ };
14
+ const GLOBAL_FLAG_NAMES = buildGlobalFlagNames();
15
+ function buildGlobalFlagNames() {
16
+ const names = new Set();
17
+ for (const [key, def] of Object.entries(GLOBAL_FLAG_ARGS)) {
18
+ names.add(normalizeFlag(key));
19
+ if ("alias" in def) for (const alias of toAliasArray(def.alias)) names.add(normalizeFlag(alias));
20
+ }
21
+ return names;
22
+ }
23
+ function isGlobalFlag(token) {
24
+ if (!token.startsWith("-") || token === ARGUMENT_SEPARATOR) return false;
25
+ const raw = token.includes("=") ? token.slice(0, token.indexOf("=")) : token;
26
+ const name = normalizeFlag(raw);
27
+ if (GLOBAL_FLAG_NAMES.has(name)) return true;
28
+ const bare = raw.replace(/^-+/, "");
29
+ if (bare.startsWith(NEGATION_PREFIX)) return GLOBAL_FLAG_NAMES.has(normalizeFlag(bare.slice(NEGATION_PREFIX.length)));
30
+ return false;
31
+ }
32
+ function hoistGlobalFlags(rawArgs) {
33
+ const leading = [];
34
+ let index = 0;
35
+ while (index < rawArgs.length) {
36
+ const token = rawArgs[index];
37
+ if (token === void 0 || !isGlobalFlag(token)) break;
38
+ leading.push(token);
39
+ index += 1;
40
+ if (flagConsumesValue(token, GLOBAL_FLAG_ARGS) && index < rawArgs.length) {
41
+ const value = rawArgs[index];
42
+ if (value !== void 0) {
43
+ leading.push(value);
44
+ index += 1;
45
+ }
46
+ }
47
+ }
48
+ if (leading.length === 0) return [...rawArgs];
49
+ return [...rawArgs.slice(index), ...leading];
50
+ }
51
+
52
+ //#endregion
6
53
  //#region src/main.ts
7
54
  const main = defineCommand({
8
55
  meta: {
@@ -11,31 +58,29 @@ const main = defineCommand({
11
58
  description: package_default.description
12
59
  },
13
60
  subCommands: {
14
- auth: () => import("./auth-DICRtJDy.mjs").then((mod) => mod.default),
15
- license: () => import("./license-Cb6ewEJO.mjs").then((mod) => mod.default),
16
- db: () => import("./db-qVK6NsdB.mjs").then((mod) => mod.default),
17
- table: () => import("./table-BwX3Ib5f.mjs").then((mod) => mod.default),
18
- field: () => import("./field-C0LE7RQI.mjs").then((mod) => mod.default),
19
- card: () => import("./card-l-UmrUIo.mjs").then((mod) => mod.default),
20
- dashboard: () => import("./dashboard-hbKDd36X.mjs").then((mod) => mod.default),
21
- collection: () => import("./collection-oV0olVY-.mjs").then((mod) => mod.default),
22
- transform: () => import("./transform-iaAi37V0.mjs").then((mod) => mod.default),
23
- "transform-job": () => import("./transform-job-Bemonf82.mjs").then((mod) => mod.default),
24
- setting: () => import("./setting-Czy4ws6h.mjs").then((mod) => mod.default),
25
- search: () => import("./search-DObOsjbP.mjs").then((mod) => mod.default),
26
- "git-sync": () => import("./git-sync-DV7YjniX.mjs").then((mod) => mod.default),
27
- workspace: () => import("./workspace-BBsT0H0g.mjs").then((mod) => mod.default),
28
- setup: () => import("./setup-DqBOe3HZ.mjs").then((mod) => mod.default),
29
- "api-key": () => import("./api-key-BENHbTbV.mjs").then((mod) => mod.default),
30
- snippet: () => import("./snippet-BCY4KHBU.mjs").then((mod) => mod.default),
31
- segment: () => import("./segment-DfxZdJmR.mjs").then((mod) => mod.default),
32
- measure: () => import("./measure-XhJuL77y.mjs").then((mod) => mod.default),
33
- eid: () => import("./eid-CDFXX_6H.mjs").then((mod) => mod.default),
34
- query: () => import("./query-C7zTlFJA.mjs").then((mod) => mod.default),
35
- uuid: () => import("./uuid-CJz9TmHI.mjs").then((mod) => mod.default),
36
- upgrade: () => import("./upgrade-CIgTr2CG.mjs").then((mod) => mod.default),
37
- skills: () => import("./skills-C2rTVj0n.mjs").then((mod) => mod.default),
38
- __manifest: () => import("./manifest-CGM7XNLC.mjs").then((mod) => mod.createManifestCommand(main))
61
+ auth: () => import("./auth-D9eAyVoG.mjs").then((mod) => mod.default),
62
+ db: () => import("./db-CWTFe_FZ.mjs").then((mod) => mod.default),
63
+ table: () => import("./table-J2f0STnB.mjs").then((mod) => mod.default),
64
+ field: () => import("./field-LL6W_c-c.mjs").then((mod) => mod.default),
65
+ card: () => import("./card-DDDrWcDU.mjs").then((mod) => mod.default),
66
+ dashboard: () => import("./dashboard-BLf1RZlk.mjs").then((mod) => mod.default),
67
+ collection: () => import("./collection-DkEvCDar.mjs").then((mod) => mod.default),
68
+ transform: () => import("./transform-q1LYWQtW.mjs").then((mod) => mod.default),
69
+ "transform-job": () => import("./transform-job-OW4SDhsQ.mjs").then((mod) => mod.default),
70
+ setting: () => import("./setting-DUa96KF3.mjs").then((mod) => mod.default),
71
+ search: () => import("./search-DYP3lOlq.mjs").then((mod) => mod.default),
72
+ "git-sync": () => import("./git-sync-CrWTo3YX.mjs").then((mod) => mod.default),
73
+ workspace: () => import("./workspace-ri6r3zWo.mjs").then((mod) => mod.default),
74
+ setup: () => import("./setup-BPlllnim.mjs").then((mod) => mod.default),
75
+ snippet: () => import("./snippet-dJ68tGsl.mjs").then((mod) => mod.default),
76
+ segment: () => import("./segment-B6HnNGDs.mjs").then((mod) => mod.default),
77
+ measure: () => import("./measure-CDlEPFtB.mjs").then((mod) => mod.default),
78
+ eid: () => import("./eid-CLY5X0Uw.mjs").then((mod) => mod.default),
79
+ query: () => import("./query-BBCAF-tG.mjs").then((mod) => mod.default),
80
+ uuid: () => import("./uuid-BSVUk8u2.mjs").then((mod) => mod.default),
81
+ upgrade: () => import("./upgrade-D-Rl_fH9.mjs").then((mod) => mod.default),
82
+ skills: () => import("./skills-SqbPo0BI.mjs").then((mod) => mod.default),
83
+ __manifest: () => import("./manifest-BNh0Lw6p.mjs").then((mod) => mod.createManifestCommand(main))
39
84
  }
40
85
  });
41
86
  var main_default = main;
@@ -43,38 +88,213 @@ var main_default = main;
43
88
  //#endregion
44
89
  //#region src/output/help.ts
45
90
  const ANSI_ESC = String.fromCharCode(27);
46
- const BREADCRUMB_SUFFIX = new RegExp(` \\([^()]*\\)(${ANSI_ESC}\\[\\d+m)?\\s*$`);
91
+ const ANSI_PATTERN = new RegExp(`${ANSI_ESC}\\[[0-9;]*m`, "g");
92
+ const BREADCRUMB_SUFFIX = / \([^()]*\)\s*$/;
47
93
  const TRAILING_WHITESPACE = /[ \t]+$/;
48
- async function showUsage(cmd, parent) {
49
- const raw = await renderUsage(cmd, parent);
94
+ const ALIAS_PAIR = /-([a-z0-9]+(?:-[a-z0-9]+)+), --[A-Za-z0-9]+/g;
95
+ const USAGE_PREFIX = "USAGE ";
96
+ const OPTIONS_HEADER = "OPTIONS";
97
+ const LINE_PREFIX = " ";
98
+ const COLUMN_GAP = " ";
99
+ const COMMAND_PLACEHOLDER = "<command> [options]";
100
+ const MANIFEST_COMMAND = "__manifest";
101
+ const CLI_NAME = "mb";
102
+ const HELP_FLAG_SPEC = "-h, --help";
103
+ const HELP_FLAG_DESCRIPTION = "Show help for this command";
104
+ const GETTING_STARTED_HINT = `First time? Run \`${CLI_NAME} auth login\` to connect to a Metabase instance.`;
105
+ async function showUsage(cmd, parent, breadcrumb) {
106
+ const raw = (await renderUsage(cmd, parent)).replace(ANSI_PATTERN, "");
50
107
  const lines = raw.split("\n").map((line) => line.replace(TRAILING_WHITESPACE, ""));
108
+ const cmdMeta = await resolveCitty(cmd.meta);
109
+ const parentMeta = parent === void 0 ? void 0 : await resolveCitty(parent.meta);
110
+ const cmdName = cmdMeta?.name ?? "";
111
+ const cittyName = parentMeta?.name ? `${parentMeta.name} ${cmdName}` : cmdName;
112
+ const hasSubCommands = Boolean(cmd.subCommands);
113
+ const isRoot = parent === void 0 && hasSubCommands;
114
+ const isManifest = cmdName === MANIFEST_COMMAND;
115
+ const augment = getMetabaseAugment(cmd);
116
+ const details = augment?.details ?? null;
117
+ const examples = augment?.examples ?? [];
118
+ const transformed = transformBody(lines, {
119
+ cittyName,
120
+ breadcrumb: breadcrumb ?? cittyName,
121
+ hasSubCommands
122
+ });
123
+ const body = withDetails(transformed, details).join("\n").trimEnd();
124
+ const sections = [body];
125
+ if (examples.length > 0) sections.push(renderExamples(examples));
126
+ if (isRoot) sections.push(GETTING_STARTED_HINT);
127
+ if (!isManifest) sections.push(renderSchemaHint());
128
+ process.stdout.write(sections.join("\n\n") + "\n");
129
+ }
130
+ function transformBody(lines, rewrite) {
131
+ const mapped = lines.map((line, index) => {
132
+ if (index === 0) return line.replace(BREADCRUMB_SUFFIX, "");
133
+ if (line.startsWith(USAGE_PREFIX)) return rewriteUsageLine(line, rewrite);
134
+ return fixAliasRow(line);
135
+ });
136
+ return injectHelpOption(mapped);
137
+ }
138
+ function rewriteUsageLine(line, rewrite) {
139
+ if (rewrite.hasSubCommands) return `${USAGE_PREFIX}${rewrite.breadcrumb} ${COMMAND_PLACEHOLDER}`;
140
+ const content = line.slice(USAGE_PREFIX.length);
141
+ if (!content.startsWith(rewrite.cittyName)) return line;
142
+ const rest = content.slice(rewrite.cittyName.length);
143
+ return `${USAGE_PREFIX}${rewrite.breadcrumb}${rest}`;
144
+ }
145
+ function fixAliasRow(line) {
146
+ return line.replace(ALIAS_PAIR, (match, kebab) => `--${kebab}`.padStart(match.length));
147
+ }
148
+ function injectHelpOption(lines) {
149
+ const headerIndex = lines.indexOf(OPTIONS_HEADER);
150
+ if (headerIndex < 0) return lines;
151
+ let firstRowIndex = headerIndex + 1;
152
+ while (firstRowIndex < lines.length && lines[firstRowIndex] === "") firstRowIndex += 1;
153
+ const sample = lines[firstRowIndex];
154
+ if (sample === void 0) return lines;
155
+ const layout = optionLayout(sample);
156
+ if (layout === null) return lines;
157
+ let endIndex = firstRowIndex;
158
+ while (endIndex < lines.length && lines[endIndex] !== "") endIndex += 1;
159
+ const helpRow = HELP_FLAG_SPEC.padStart(layout.flagEnd).padEnd(layout.descStart) + HELP_FLAG_DESCRIPTION;
160
+ return [
161
+ ...lines.slice(0, endIndex),
162
+ helpRow,
163
+ ...lines.slice(endIndex)
164
+ ];
165
+ }
166
+ function optionLayout(row) {
167
+ const firstNonSpace = row.search(/\S/);
168
+ if (firstNonSpace < 0) return null;
169
+ const flagEnd = row.indexOf(COLUMN_GAP, firstNonSpace);
170
+ if (flagEnd < 0) return null;
171
+ const gapRemainder = row.slice(flagEnd).search(/\S/);
172
+ if (gapRemainder < 0) return null;
173
+ return {
174
+ flagEnd,
175
+ descStart: flagEnd + gapRemainder
176
+ };
177
+ }
178
+ function withDetails(lines, details) {
179
+ if (details === null) return lines;
51
180
  const [first, ...rest] = lines;
52
- const stripped = first === void 0 ? "" : first.replace(BREADCRUMB_SUFFIX, "$1");
53
- const body = [stripped, ...rest].join("\n");
54
- const examples = getMetabaseAugment(cmd)?.examples ?? [];
55
- process.stdout.write(body + renderExamples(examples) + renderSchemaHint() + "\n");
181
+ if (first === void 0) return lines;
182
+ return [
183
+ first,
184
+ "",
185
+ details,
186
+ ...rest
187
+ ];
56
188
  }
57
189
  function renderExamples(examples) {
58
- if (examples.length === 0) return "";
59
- const lines = [
60
- "",
190
+ return [
61
191
  "EXAMPLES",
62
- ""
63
- ];
64
- for (const example of examples) lines.push(` ${example}`);
65
- return lines.join("\n");
192
+ "",
193
+ ...examples.map((example) => `${LINE_PREFIX}${example}`)
194
+ ].join("\n");
66
195
  }
67
196
  function renderSchemaHint() {
68
197
  return [
69
- "",
70
198
  "SCHEMA",
71
199
  "",
72
- " mb __manifest # machine-readable command tree (flags, output, examples)"
200
+ `${LINE_PREFIX}${CLI_NAME} ${MANIFEST_COMMAND} # machine-readable command manifest (flags, output, examples)`
73
201
  ].join("\n");
74
202
  }
203
+ async function walkCommandPath(root, rawArgs) {
204
+ const rootMeta = await resolveCitty(root.meta);
205
+ const segments = rootMeta?.name === void 0 ? [] : [rootMeta.name];
206
+ let current = root;
207
+ let index = 0;
208
+ while (index < rawArgs.length) {
209
+ const subCommands = await resolveCitty(current.subCommands);
210
+ if (subCommands === void 0) break;
211
+ const argsDef = await resolveCitty(current.args) ?? {};
212
+ index = skipFlags(rawArgs, index, argsDef);
213
+ const token = rawArgs[index];
214
+ if (token === void 0) break;
215
+ const match = await findSubCommand(subCommands, token);
216
+ if (match === null) return {
217
+ segments,
218
+ unknownToken: token
219
+ };
220
+ segments.push(match.name);
221
+ current = match.command;
222
+ index += 1;
223
+ }
224
+ return {
225
+ segments,
226
+ unknownToken: null
227
+ };
228
+ }
229
+ async function resolveBreadcrumb(root, rawArgs) {
230
+ const { segments } = await walkCommandPath(root, rawArgs);
231
+ return segments.length > 0 ? segments.join(" ") : CLI_NAME;
232
+ }
233
+ async function findUnknownCommand(root, rawArgs) {
234
+ return (await walkCommandPath(root, rawArgs)).unknownToken;
235
+ }
236
+ function skipFlags(rawArgs, start, argsDef) {
237
+ let index = start;
238
+ while (index < rawArgs.length) {
239
+ const token = rawArgs[index];
240
+ if (token === void 0) return index;
241
+ if (token === "--") return rawArgs.length;
242
+ if (!token.startsWith("-")) return index;
243
+ if (flagConsumesValue(token, argsDef)) index += 1;
244
+ index += 1;
245
+ }
246
+ return index;
247
+ }
248
+ async function findSubCommand(subCommands, token) {
249
+ const direct = subCommands[token];
250
+ if (direct !== void 0) {
251
+ const command = await resolveCitty(direct);
252
+ if (command === void 0) return null;
253
+ const meta = await resolveCitty(command.meta);
254
+ return {
255
+ name: meta?.name ?? token,
256
+ command
257
+ };
258
+ }
259
+ for (const [key, loader] of Object.entries(subCommands)) {
260
+ const command = await resolveCitty(loader);
261
+ if (command === void 0) continue;
262
+ const meta = await resolveCitty(command.meta);
263
+ if (toAliasArray(meta?.alias).includes(token)) return {
264
+ name: meta?.name ?? key,
265
+ command
266
+ };
267
+ }
268
+ return null;
269
+ }
75
270
 
76
271
  //#endregion
77
272
  //#region src/cli.ts
78
- runMain(main_default, { showUsage });
273
+ const HELP_FLAGS = new Set(["--help", "-h"]);
274
+ async function run() {
275
+ const rawArgs = hoistGlobalFlags(process.argv.slice(2));
276
+ const showUsageWithBreadcrumb = async (cmd, parent) => {
277
+ const breadcrumb = await resolveBreadcrumb(main_default, rawArgs);
278
+ await showUsage(cmd, parent, breadcrumb);
279
+ };
280
+ if (rawArgs.length === 0) {
281
+ await showUsageWithBreadcrumb(main_default);
282
+ return;
283
+ }
284
+ if (!rawArgs.some((arg) => HELP_FLAGS.has(arg))) {
285
+ const unknown = await findUnknownCommand(main_default, rawArgs);
286
+ if (unknown !== null) {
287
+ reportError(new ConfigError(`unknown command: ${unknown}`));
288
+ return;
289
+ }
290
+ }
291
+ await runMain(main_default, {
292
+ showUsage: showUsageWithBreadcrumb,
293
+ rawArgs
294
+ });
295
+ }
296
+ run().catch((error) => {
297
+ reportError(error);
298
+ });
79
299
 
80
300
  //#endregion
@@ -0,0 +1,20 @@
1
+ import { defineCommand } from "citty";
2
+
3
+ //#region src/commands/collection/index.ts
4
+ var collection_default = defineCommand({
5
+ meta: {
6
+ name: "collection",
7
+ description: "Manage Metabase collections"
8
+ },
9
+ subCommands: {
10
+ list: () => import("./list-CU6sOfI-.mjs").then((mod) => mod.default),
11
+ get: () => import("./get-CRvbChoX.mjs").then((mod) => mod.default),
12
+ items: () => import("./items-C94eW2Yd.mjs").then((mod) => mod.default),
13
+ tree: () => import("./tree-mvq9gM9w.mjs").then((mod) => mod.default),
14
+ create: () => import("./create-w3mQg9n4.mjs").then((mod) => mod.default),
15
+ archive: () => import("./archive-DTN9tLGT.mjs").then((mod) => mod.default)
16
+ }
17
+ });
18
+
19
+ //#endregion
20
+ export { collection_default as default };