@metabase/cli 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/dist/{add-collection-BjVAdZ1n.mjs → add-collection-CC6KSwjX.mjs} +5 -5
  2. package/dist/{alert-DCLhfwdv.mjs → alert-Dt6La9tK.mjs} +7 -7
  3. package/dist/{alerts-DRin_wt2.mjs → alerts-ClKnJqgB.mjs} +6 -6
  4. package/dist/{append-DQ9rPJHZ.mjs → append-pnaQWP_A.mjs} +4 -4
  5. package/dist/{archive-D6xzHaM3.mjs → archive-By1pLYtO.mjs} +3 -3
  6. package/dist/{archive-xcgoVPwv.mjs → archive-CLu2TGW5.mjs} +5 -5
  7. package/dist/{archive-HeRygdKz2.mjs → archive-COP9joWU.mjs} +4 -4
  8. package/dist/{archive-COFQAHAL.mjs → archive-CSnBFcQ_.mjs} +3 -3
  9. package/dist/{archive-1YVo-Wsu.mjs → archive-Ct1eyolN.mjs} +3 -3
  10. package/dist/{archive-_c-ISZmi.mjs → archive-D7nAQcCz.mjs} +3 -3
  11. package/dist/{archive-BzVxRqpL.mjs → archive-DEDA48w3.mjs} +5 -5
  12. package/dist/{archive-BVRKE9Ev.mjs → archive-DJAsSzCz.mjs} +5 -5
  13. package/dist/{archive-BPCgmLcV.mjs → archive-DtabbPUk.mjs} +4 -4
  14. package/dist/{archive-o5cWV3vZ.mjs → archive-YNpa8daf.mjs} +3 -3
  15. package/dist/{archive-D3yPvUtz.mjs → archive-ewitrKdx.mjs} +5 -5
  16. package/dist/{auth-DJn5T6zA.mjs → auth-DdLhXCn-.mjs} +5 -5
  17. package/dist/body-Dd-TwYYL.mjs +17 -0
  18. package/dist/branch-flag-pFQPNYKr.mjs +9 -0
  19. package/dist/{branches-CUyPxeeW.mjs → branches-ZvGNhed6.mjs} +3 -3
  20. package/dist/breaking-BLswgvkA.mjs +36 -0
  21. package/dist/broken-BN0nL2hf.mjs +37 -0
  22. package/dist/bulk-discard-values-DFJUjSnE.mjs +49 -0
  23. package/dist/bulk-edit-Brqr67bu.mjs +53 -0
  24. package/dist/bulk-rescan-values-DndXXi2N.mjs +28 -0
  25. package/dist/bulk-sync-schema-mO-t2QlL.mjs +28 -0
  26. package/dist/{cancel-BNuVls58.mjs → cancel-DP03dXBf.mjs} +3 -3
  27. package/dist/{cancel-task-DUmlQQpi.mjs → cancel-task-CELBfBPP.mjs} +4 -4
  28. package/dist/{card-voh1k4hl.mjs → card-Bv4ZN0oV.mjs} +5 -3
  29. package/dist/card-CFd-GUEM.mjs +25 -0
  30. package/dist/{card-CEkp1mcI.mjs → card-DSrgU7lT.mjs} +1 -1
  31. package/dist/{cards-_gbvw3wp.mjs → cards-Cn2ywFTJ.mjs} +6 -6
  32. package/dist/cli.mjs +410 -100
  33. package/dist/{client-BnK0evYf.mjs → client-ToLiPu9q.mjs} +316 -316
  34. package/dist/{collection-DYM0p3Xl.mjs → collection-BG3Ksea-.mjs} +1 -1
  35. package/dist/collection-BKNShKcY.mjs +21 -0
  36. package/dist/{collection-BxdPxD38.mjs → collection-D3KXhvnc.mjs} +7 -5
  37. package/dist/{collection-namespace-DM90lA8C.mjs → collection-namespace-CWW6hZxK.mjs} +2 -2
  38. package/dist/{content-translation-CqB3peU9.mjs → content-translation-C19SqZWp.mjs} +3 -3
  39. package/dist/copy-BGK8Wz6d.mjs +55 -0
  40. package/dist/copy-COLUuiuF.mjs +36 -0
  41. package/dist/copy-flags-eU8aa0zj.mjs +32 -0
  42. package/dist/{create-CnJKj9Nl.mjs → create-B2tuInV9.mjs} +4 -4
  43. package/dist/{create-D4Y69cDF.mjs → create-B3TKri1E.mjs} +4 -4
  44. package/dist/{create-BSvTs-EV.mjs → create-B4gXKDRr.mjs} +3 -3
  45. package/dist/create-B63JphYe.mjs +34 -0
  46. package/dist/{create-IFjwHs0G.mjs → create-BH6kLjHS.mjs} +4 -4
  47. package/dist/{create-BIUVvIGH.mjs → create-BwifyhyL.mjs} +3 -3
  48. package/dist/{create-CwXUMOMd.mjs → create-Colz5bOO.mjs} +3 -3
  49. package/dist/{create-Cm9Z-rfe2.mjs → create-CulUZgN1.mjs} +4 -4
  50. package/dist/{create-DNx9TGHs.mjs → create-Cxuqr3kT.mjs} +6 -6
  51. package/dist/{create-CUHpxANR.mjs → create-CzW_UTE7.mjs} +6 -6
  52. package/dist/{create-BMKuihoI.mjs → create-DNR8RMvV.mjs} +6 -6
  53. package/dist/{create-DMVw9nrZ.mjs → create-DSHeoV7e.mjs} +4 -4
  54. package/dist/{create-DVo8-IzZ.mjs → create-DWbW2WSc.mjs} +6 -6
  55. package/dist/{create-va8bByVt.mjs → create-Dx8nfjGs.mjs} +3 -3
  56. package/dist/{create-B7S5fCkD.mjs → create-XGomrTz5.mjs} +5 -5
  57. package/dist/{create-branch-Cw-uXows.mjs → create-branch-DxL7KUZp.mjs} +4 -4
  58. package/dist/{create-B48rmY8v.mjs → create-g1f2yJ4s.mjs} +3 -3
  59. package/dist/{csv-CaKx1oFZ.mjs → csv-C6TEfLMi.mjs} +4 -4
  60. package/dist/{current-task-lGh69Z1i.mjs → current-task-CHs0zNFM.mjs} +4 -4
  61. package/dist/dashboard-AWrXqQ7a.mjs +35 -0
  62. package/dist/{dashboard-D0hwTC-f.mjs → dashboard-Phz3XpRM.mjs} +2 -1
  63. package/dist/{dashboard-DgK81azj.mjs → dashboard-XSTr9QCr.mjs} +6 -2
  64. package/dist/database-D-CRyRIv.mjs +45 -0
  65. package/dist/{database-C3E9PZSx.mjs → database-MlUPpitM.mjs} +1 -1
  66. package/dist/dataset-p5oNPQgL.mjs +66 -0
  67. package/dist/{db-BRHPjshe.mjs → db-BFSeETMO.mjs} +7 -7
  68. package/dist/{delete-DMETa-37.mjs → delete-BUKgSJhh.mjs} +4 -4
  69. package/dist/{delete-CQWCfqHf.mjs → delete-CPBByycV.mjs} +4 -4
  70. package/dist/{delete-Ci0aDYpf.mjs → delete-Cucqn4-V.mjs} +4 -4
  71. package/dist/{delete-BxBadE3q.mjs → delete-D79TlpcE.mjs} +4 -4
  72. package/dist/delete-DZJxBmdU.mjs +44 -0
  73. package/dist/{delete-G6EiGn2Q.mjs → delete-DndykJn2.mjs} +4 -4
  74. package/dist/delete-runtime-BbmRg_in.mjs +55 -0
  75. package/dist/{delete-table-N4rZtt1T.mjs → delete-table-CbsWcjh5.mjs} +4 -4
  76. package/dist/{dependencies-edN0P1SS.mjs → dependencies-B-880phi.mjs} +5 -5
  77. package/dist/dependency-DBUJwXqv.mjs +15 -0
  78. package/dist/dependency-DKSjKT8P.mjs +165 -0
  79. package/dist/dependency-DSxKm9oS.mjs +111 -0
  80. package/dist/dependents-C_FDnpZs.mjs +52 -0
  81. package/dist/{dirty-U51bMoCP.mjs → dirty-B-Is68--.mjs} +5 -5
  82. package/dist/discard-values-yzH-kIsr.mjs +55 -0
  83. package/dist/document-BRaba87v.mjs +20 -0
  84. package/dist/{document-CA0Q6lqu.mjs → document-C18b5rM6.mjs} +1 -1
  85. package/dist/{document-BHpLJbKU.mjs → document-DFCj1Az_.mjs} +2 -1
  86. package/dist/{download-BJA6k-e6.mjs → download-DluF-vnU.mjs} +2 -2
  87. package/dist/{eid-BtlRU1E0.mjs → eid-Dz-mP40j.mjs} +11 -10
  88. package/dist/entity-CA4zfRt4.mjs +20 -0
  89. package/dist/entry-flags-7x7bIyOQ.mjs +42 -0
  90. package/dist/{events-B5rnOo-L.mjs → events-2sOk6H09.mjs} +4 -4
  91. package/dist/export-BKkAJOFb.mjs +74 -0
  92. package/dist/export-flags-NiZ7C3Gm.mjs +81 -0
  93. package/dist/export-preflight-CwJ_3-iX.mjs +35 -0
  94. package/dist/{field-CcN4oZy6.mjs → field-5nivEfd6.mjs} +33 -3
  95. package/dist/field-BARgq5I9.mjs +21 -0
  96. package/dist/field-wmN6raOG.mjs +128 -0
  97. package/dist/{fields-zQ6O_W_H.mjs → fields-Bod0s_uV.mjs} +6 -6
  98. package/dist/filter-flags-BYcbB85j.mjs +71 -0
  99. package/dist/fks-IUw66K_Q.mjs +36 -0
  100. package/dist/{get-BDrmBZ1z.mjs → get-B8DUMrCw.mjs} +5 -5
  101. package/dist/{get-is8x5f2n.mjs → get-BGqvoGQM.mjs} +3 -3
  102. package/dist/{get-CekXFP3x.mjs → get-BSUsfysk.mjs} +3 -3
  103. package/dist/{get-CeSQptdl.mjs → get-BXsLkoit.mjs} +5 -5
  104. package/dist/{get-DhpMuTSt.mjs → get-BXssHyJ1.mjs} +5 -5
  105. package/dist/get-Bct52yPw.mjs +36 -0
  106. package/dist/{get-DXwlZjw0.mjs → get-Besqwy32.mjs} +3 -3
  107. package/dist/{get-BLjcCXp8.mjs → get-BfSX-OeS.mjs} +3 -3
  108. package/dist/{get-BLcS4il2.mjs → get-Biy4gOzu2.mjs} +3 -3
  109. package/dist/{get-BSoMWp4t2.mjs → get-CYIeiTZ9.mjs} +4 -4
  110. package/dist/{get-CwiJWeH4.mjs → get-CaEiQnSw.mjs} +4 -4
  111. package/dist/{get-xPv7e5Ez.mjs → get-Cl81y0Md.mjs} +5 -5
  112. package/dist/{get-Cf6a4fFN.mjs → get-D1NjMXAH.mjs} +4 -4
  113. package/dist/{get-EFsmL4le.mjs → get-D2cPuOPR.mjs} +5 -5
  114. package/dist/{get-Dg-S07ri.mjs → get-DITlshJH.mjs} +3 -3
  115. package/dist/{get-CTp5l7aU.mjs → get-DLyg6Al9.mjs} +3 -3
  116. package/dist/{get-93wuhTn2.mjs → get-DQZfaVNq.mjs} +4 -4
  117. package/dist/{get-CG6G-mzV.mjs → get-DtBqoGTa.mjs} +5 -5
  118. package/dist/{get-DC_huYD8.mjs → get-_ik_5_lQ.mjs} +5 -5
  119. package/dist/{get-run-DwY4sFGy.mjs → get-run-CEc_tr5b.mjs} +4 -4
  120. package/dist/{git-sync-BwBRmEhE.mjs → git-sync-COokpYgc.mjs} +12 -3
  121. package/dist/git-sync-DKcaddkV.mjs +29 -0
  122. package/dist/git-sync-DspFahwV.mjs +165 -0
  123. package/dist/glossary-BlNCrYbw.mjs +30 -0
  124. package/dist/glossary-CWIX8Zh6.mjs +14 -0
  125. package/dist/glossary-LmZWwCNP.mjs +21 -0
  126. package/dist/graph-f6Bp1e8U.mjs +34 -0
  127. package/dist/{group-YQQ5GIcP.mjs → group-bpD_KcjA.mjs} +1 -1
  128. package/dist/{has-remote-changes-DE2_14FK.mjs → has-remote-changes-B8MmN6yh.mjs} +4 -4
  129. package/dist/{import-Cs7wk058.mjs → import-Bhq15KgP.mjs} +19 -8
  130. package/dist/{input-DEvkIjGr.mjs → input-D8qW-KtR.mjs} +6 -2
  131. package/dist/{is-dirty-XqDfqXGi.mjs → is-dirty-CAsVuVx8.mjs} +2 -2
  132. package/dist/{items-BloAjPwA.mjs → items-BZJomiDE.mjs} +8 -8
  133. package/dist/{key-PYetuQ13.mjs → key-BynJSK9u.mjs} +1 -1
  134. package/dist/{library-Dgq_5BFh.mjs → library-B7wDH-Nc.mjs} +5 -5
  135. package/dist/{library-PGCfm0UA.mjs → library-BOv5SY24.mjs} +1 -1
  136. package/dist/{library-BPIzb3K_.mjs → library-Ck0EK5bi.mjs} +4 -2
  137. package/dist/{list-CZCaqPoo.mjs → list-B2uUl26x.mjs} +6 -6
  138. package/dist/{list-3ErmGdY0.mjs → list-B4luDSYj.mjs} +6 -6
  139. package/dist/{list-D04uiS3F.mjs → list-B8ND9t2h.mjs} +3 -3
  140. package/dist/{list-CghNKfYJ.mjs → list-BT5t8ZOl.mjs} +4 -4
  141. package/dist/{list-VzrtA9lt.mjs → list-BT7xiUQe.mjs} +3 -3
  142. package/dist/{list-D9d5ocYi.mjs → list-BWFCv_zk.mjs} +5 -5
  143. package/dist/{list-DboUvg-Y.mjs → list-BtZVe1Nq.mjs} +6 -6
  144. package/dist/{list-sdCIS2Df.mjs → list-BwdSG-P5.mjs} +5 -5
  145. package/dist/{list-yV6CyPzn.mjs → list-C-A-2HFq.mjs} +3 -3
  146. package/dist/list-C9x--9Jq.mjs +101 -0
  147. package/dist/{list-CUJ1wem9.mjs → list-CCdXig7b.mjs} +4 -4
  148. package/dist/{list-BfLo1xI8.mjs → list-CJDFoOHb.mjs} +3 -3
  149. package/dist/{list-Bzm5mXRo.mjs → list-CLFu3mQB.mjs} +3 -3
  150. package/dist/{list-BZnf3RmA.mjs → list-Cd40Kr0R.mjs} +3 -3
  151. package/dist/{list-CUXlZiS1.mjs → list-Cj_mTxbY.mjs} +4 -4
  152. package/dist/{list-f8Csdjyc.mjs → list-CtS50R7m.mjs} +5 -5
  153. package/dist/{list-vsXIMssK.mjs → list-CvZyTwmV.mjs} +5 -5
  154. package/dist/list-DcnNlYQA.mjs +35 -0
  155. package/dist/{list-DuJezLm_.mjs → list-DtgbtE3_.mjs} +3 -3
  156. package/dist/{login-Vw51Gts5.mjs → login-Bi_nGMJ9.mjs} +6 -6
  157. package/dist/{logout-BDIqoVhv.mjs → logout-CiHQJWTu.mjs} +2 -2
  158. package/dist/{measure-LY9Tp9QZ.mjs → measure-D2qq5e8f.mjs} +6 -6
  159. package/dist/moderation-review-BdqEH6N1.mjs +31 -0
  160. package/dist/{notification-DVrLkjFT.mjs → notification-DOYdl0ao.mjs} +1 -1
  161. package/dist/{parameter-values-DWjmO7Ai.mjs → parameter-values-CZow98nb.mjs} +3 -3
  162. package/dist/{parse-enum-Dc0dMZ3P.mjs → parse-enum-CLIXMsd8.mjs} +1 -1
  163. package/dist/parse-id-BW09NysN.mjs +13 -0
  164. package/dist/{parse-ref-DTDld_LJ.mjs → parse-ref-Cw5fa4FI.mjs} +1 -1
  165. package/dist/parse-text-T0lTXzTZ.mjs +11 -0
  166. package/dist/{path-BUUAGYO5.mjs → path-K6LPLYPb.mjs} +4 -4
  167. package/dist/{poll-CZeXepUQ.mjs → poll-Dz4tUm2f.mjs} +2 -2
  168. package/dist/{preflight-DcULqq8E.mjs → preflight-CX6cqB90.mjs} +3 -3
  169. package/dist/{process-CTrfxxaC.mjs → process-D0HdqZ3r.mjs} +1 -1
  170. package/dist/{publish-qVFmJQ1E.mjs → publish-COatW4Un.mjs} +4 -4
  171. package/dist/{pulse-x0gFxWfG.mjs → pulse-D1uh8UIU.mjs} +1 -1
  172. package/dist/query-BJXTIDhy.mjs +328 -0
  173. package/dist/{query-Cq1lmqL5.mjs → query-DmvkyDfo.mjs} +14 -33
  174. package/dist/remapping-CPAvDKHV.mjs +53 -0
  175. package/dist/{remove-collection-DBqh2Lqm.mjs → remove-collection-Bg-sNX3U.mjs} +5 -5
  176. package/dist/{render-Gx1hR7IF.mjs → render-BSfDD6ip.mjs} +2 -2
  177. package/dist/{replace-CujInVY9.mjs → replace-RCHeZLUT.mjs} +4 -4
  178. package/dist/{rescan-values-HypqBCSK.mjs → rescan-values-CpDGYZvf.mjs} +5 -5
  179. package/dist/rescan-values-PeMnpaFY.mjs +32 -0
  180. package/dist/{run-DEkQSOQa.mjs → run-CaQ7kubO.mjs} +3 -3
  181. package/dist/{run-b3jyF29q.mjs → run-DkRkZRgf.mjs} +4 -4
  182. package/dist/{runs-GHqHLGy4.mjs → runs-BDjoVJ0P.mjs} +5 -5
  183. package/dist/{runtime-nCPku2nN.mjs → runtime-CZ5zh32z.mjs} +21 -82
  184. package/dist/{schema-tables-B5L05Y1L.mjs → schema-tables-C2qjLcPq.mjs} +6 -6
  185. package/dist/{schemas-Clx26p_4.mjs → schemas-D8hfNduk.mjs} +4 -4
  186. package/dist/search-BrQQuNmh.mjs +131 -0
  187. package/dist/search-CnTXKJgx.mjs +85 -0
  188. package/dist/{segment-DiRJcbam.mjs → segment-Bi6eqj3e.mjs} +6 -6
  189. package/dist/{send-DIHkDNBN.mjs → send-CAjgVNlA.mjs} +3 -3
  190. package/dist/{set-D77qUZML.mjs → set-BXTkYWid.mjs} +4 -4
  191. package/dist/{set-active-DCdFgD0O.mjs → set-active-CBQVCePU.mjs} +3 -3
  192. package/dist/set-sensitivity-D39kGTob.mjs +57 -0
  193. package/dist/{setting-DR9bj232.mjs → setting-CPkvkc4H.mjs} +4 -4
  194. package/dist/{setup-DGa2LLEp.mjs → setup-Be3xDXHi.mjs} +3 -3
  195. package/dist/{signal-k7cm5N6h.mjs → signal-CxWeLszu.mjs} +1 -1
  196. package/dist/{skill-list-DAvGGHzS.mjs → skill-list-CBGq30sI.mjs} +2 -2
  197. package/dist/{skills-CqtNuSXM.mjs → skills-CJ9eXouJ.mjs} +2 -2
  198. package/dist/{skills-CCn7cyMP.mjs → skills-DyiLycMY.mjs} +3 -3
  199. package/dist/snippet-QirK70R_.mjs +19 -0
  200. package/dist/{stash-BTtsV0AG.mjs → stash-BVN3s5N_.mjs} +6 -6
  201. package/dist/{status-CW7Dt-nV.mjs → status-BtbMmIWo.mjs} +7 -7
  202. package/dist/{status-XgSS3StV.mjs → status-CxP6w3aL.mjs} +3 -3
  203. package/dist/{subscription-CofRU47d.mjs → subscription-Dr-YHARg.mjs} +6 -6
  204. package/dist/{subscriptions-DCuuPF6U.mjs → subscriptions-8tM8TTeQ.mjs} +6 -6
  205. package/dist/{summary-uGlgKE3C.mjs → summary-DKx6ptQe.mjs} +5 -5
  206. package/dist/sync-schema-B8RY0Ra4.mjs +32 -0
  207. package/dist/{sync-schema-Cu9rD3eH.mjs → sync-schema-kNriXZjG.mjs} +6 -6
  208. package/dist/sync-task-CXFoqlpF.mjs +53 -0
  209. package/dist/table-CZnT6d9x.mjs +26 -0
  210. package/dist/{table-DfuY0N8e.mjs → table-Ci6bhZkb.mjs} +35 -12
  211. package/dist/table-CxvaDiIZ.mjs +155 -0
  212. package/dist/table-selector-flags-1bYkAKld.mjs +42 -0
  213. package/dist/text-DaNkPRwt.mjs +6 -0
  214. package/dist/timeline-CUzx6uXi.mjs +21 -0
  215. package/dist/{timeline-event-D-h0A_oh.mjs → timeline-event-DpNm4dkn.mjs} +6 -6
  216. package/dist/{transform-CtqB1WYo.mjs → transform-CNBIV7No.mjs} +1 -1
  217. package/dist/transform-g4-HHzDp.mjs +28 -0
  218. package/dist/transform-job-DqBtnTrG.mjs +22 -0
  219. package/dist/{transform-tag-BLp_p9J-.mjs → transform-tag-nTb0Ivpj.mjs} +5 -5
  220. package/dist/{transforms-n2IwEcbU.mjs → transforms-BSsAfwAg.mjs} +5 -5
  221. package/dist/tree-lMvw1jnZ.mjs +34 -0
  222. package/dist/{unpublish-DVQCAa3g.mjs → unpublish-CYFDd828.mjs} +3 -3
  223. package/dist/unreferenced-8Xdq76Kw.mjs +36 -0
  224. package/dist/{update-oQeQyqKO.mjs → update-6P_GYCLT.mjs} +5 -5
  225. package/dist/{update-DFdBeJwc.mjs → update-B28EJzrx.mjs} +13 -8
  226. package/dist/{update-DffrdV4b.mjs → update-BDunZa7G.mjs} +4 -4
  227. package/dist/{update-DKO9HF1f.mjs → update-BT2yNB_g.mjs} +6 -6
  228. package/dist/{update-rFRPLlb6.mjs → update-BnMUSFYZ.mjs} +4 -4
  229. package/dist/update-BwrYeKso.mjs +41 -0
  230. package/dist/{update-B7CikkI0.mjs → update-C7DEMiu-.mjs} +7 -7
  231. package/dist/{update-CAsqNhDC.mjs → update-CITzAFG8.mjs} +4 -4
  232. package/dist/update-CLl8tE20.mjs +181 -0
  233. package/dist/{update-C05J2nZ2.mjs → update-CM5uuhjB.mjs} +4 -4
  234. package/dist/{update-ChpOukqq.mjs → update-CQXcsvaa.mjs} +5 -5
  235. package/dist/{update-D4ggtuG4.mjs → update-Cs2zv_L2.mjs} +7 -7
  236. package/dist/{update-NGq0yXZk.mjs → update-D--Fw7-_.mjs} +5 -5
  237. package/dist/{update-D9H6Lh5U.mjs → update-D9p0N8ky.mjs} +4 -4
  238. package/dist/{update-CKDRuduL.mjs → update-DAzRx0of.mjs} +5 -5
  239. package/dist/{update-CnkPYL2i.mjs → update-D_DCOOAB.mjs} +6 -6
  240. package/dist/{update-DScUzKLI.mjs → update-_sYM1GuU.mjs} +7 -7
  241. package/dist/{update-dashcard-DvPqLJ3N.mjs → update-dashcard-VNnIqHDI.mjs} +6 -6
  242. package/dist/{upgrade-BRgw0fvn.mjs → upgrade-Tj_reACv.mjs} +4 -4
  243. package/dist/upload-BKxOpSz3.mjs +13 -0
  244. package/dist/{upload-Do2PBSeH.mjs → upload-C2fhpKkP.mjs} +2 -2
  245. package/dist/{upload-BrfbcbBW.mjs → upload-Dg91ldGg.mjs} +3 -3
  246. package/dist/{uuid-B4eij1d7.mjs → uuid-Blpv_e0S.mjs} +2 -2
  247. package/dist/{validate-xR_MHBNR.mjs → validate-D7e110oU.mjs} +1 -1
  248. package/dist/{validate-query-D6_ad-Gi.mjs → validate-query-C7LuKiUT.mjs} +2 -2
  249. package/dist/{values-xgOftPq5.mjs → values-PonkbYAK.mjs} +5 -5
  250. package/dist/verify-DixUBbd2.mjs +38 -0
  251. package/dist/verify-Dv7ER11c.mjs +38 -0
  252. package/dist/{verify-DTOA_wVM.mjs → verify-Mpb65a5v.mjs} +3 -3
  253. package/dist/verify-flags-CMpRkMPa.mjs +58 -0
  254. package/dist/{wait-BjeFgR13.mjs → wait-CaH6XHQV.mjs} +6 -6
  255. package/dist/{wait-flags-BCeCnaz3.mjs → wait-flags-rUU4NUrv.mjs} +2 -2
  256. package/dist/{window-DSb1tqSe.mjs → window-CI_QD04s.mjs} +1 -1
  257. package/package.json +1 -1
  258. package/skill-data/core/SKILL.md +18 -11
  259. package/skill-data/dashboard/SKILL.md +1 -1
  260. package/skill-data/document/SKILL.md +12 -1
  261. package/skill-data/git-sync/SKILL.md +61 -9
  262. package/skill-data/mbql/SKILL.md +5 -0
  263. package/skill-data/metadata/SKILL.md +36 -6
  264. package/dist/body-Cu94pH4P.mjs +0 -17
  265. package/dist/card-ByOzVxpI.mjs +0 -24
  266. package/dist/collection-BGbW7u_Q.mjs +0 -20
  267. package/dist/dashboard-Bzjz2v6u.mjs +0 -33
  268. package/dist/database-JtHTqSpq.mjs +0 -26
  269. package/dist/delete-runtime-BKEzJn22.mjs +0 -49
  270. package/dist/document-DqJ7Cysa.mjs +0 -19
  271. package/dist/export-DO2josC0.mjs +0 -63
  272. package/dist/field-CHZByaXa.mjs +0 -18
  273. package/dist/field-fDtIrY6D.mjs +0 -80
  274. package/dist/get-yHIEezeG.mjs +0 -31
  275. package/dist/git-sync-NhfLSZA6.mjs +0 -28
  276. package/dist/git-sync-TjX1r_wF.mjs +0 -136
  277. package/dist/list-DgteFn01.mjs +0 -34
  278. package/dist/parse-id-whJX4DAb.mjs +0 -10
  279. package/dist/query-BPtIy79s.mjs +0 -114
  280. package/dist/query-result-E4Q-Gra6.mjs +0 -15
  281. package/dist/search-DxiuY5EV.mjs +0 -97
  282. package/dist/selectors-rEFuyXPZ.mjs +0 -35
  283. package/dist/snippet-g9JTDxqu.mjs +0 -19
  284. package/dist/sync-task-BXeWuARG.mjs +0 -37
  285. package/dist/table-C6h4tIRw.mjs +0 -37
  286. package/dist/table-Di-EY7pg.mjs +0 -18
  287. package/dist/timeline-D7EsWZm6.mjs +0 -21
  288. package/dist/transform-8XK1LIgC.mjs +0 -28
  289. package/dist/transform-job-CTizQkWy.mjs +0 -22
  290. package/dist/tree-cqxiDh2b.mjs +0 -26
  291. package/dist/upload-VXBFKzLT.mjs +0 -13
@@ -1,8 +1,8 @@
1
- import { B as listFlags, G as listEnvelopeSchema, H as outputFlags, U as profileFlag, d as renderList, z as connectionFlags } from "./cli.mjs";
2
- import { t as defineMetabaseCommand } from "./runtime-nCPku2nN.mjs";
3
- import { n as windowList } from "./window-DSb1tqSe.mjs";
4
- import { n as DocumentCompact } from "./document-BHpLJbKU.mjs";
5
- import { t as documentView } from "./document-CA0Q6lqu.mjs";
1
+ import { G as listFlags, H as connectionFlags, J as profileFlag, X as listEnvelopeSchema, d as renderList, q as outputFlags } from "./cli.mjs";
2
+ import { t as defineMetabaseCommand } from "./runtime-CZ5zh32z.mjs";
3
+ import { n as windowList } from "./window-CI_QD04s.mjs";
4
+ import { n as DocumentCompact } from "./document-DFCj1Az_.mjs";
5
+ import { t as documentView } from "./document-C18b5rM6.mjs";
6
6
  //#region src/commands/document/list.ts
7
7
  const DocumentListEnvelope = listEnvelopeSchema(DocumentCompact);
8
8
  var list_default = defineMetabaseCommand({
@@ -0,0 +1,35 @@
1
+ import { G as listFlags, H as connectionFlags, J as profileFlag, X as listEnvelopeSchema, d as renderList, q as outputFlags } from "./cli.mjs";
2
+ import { t as defineMetabaseCommand } from "./runtime-CZ5zh32z.mjs";
3
+ import { n as windowList } from "./window-CI_QD04s.mjs";
4
+ import { n as GlossaryCompact } from "./glossary-BlNCrYbw.mjs";
5
+ import { t as parseOptionalText } from "./parse-text-T0lTXzTZ.mjs";
6
+ import { t as glossaryView } from "./glossary-LmZWwCNP.mjs";
7
+ //#region src/commands/glossary/list.ts
8
+ const GlossaryListEnvelope = listEnvelopeSchema(GlossaryCompact);
9
+ var list_default = defineMetabaseCommand({
10
+ meta: {
11
+ name: "list",
12
+ description: "List glossary entries in term order"
13
+ },
14
+ details: "`--search` matches the term or the definition as a case-insensitive substring. Some servers read `%` and `_` in the text as SQL LIKE wildcards rather than literal characters.",
15
+ requires: ["glossary.list"],
16
+ args: {
17
+ ...outputFlags,
18
+ ...listFlags,
19
+ ...profileFlag,
20
+ ...connectionFlags,
21
+ search: {
22
+ type: "string",
23
+ description: "Keep entries whose term or definition contains this text (case-insensitive)"
24
+ }
25
+ },
26
+ outputSchema: GlossaryListEnvelope,
27
+ examples: ["mb glossary list", "mb glossary list --search churn --json"],
28
+ async run({ args, ctx, getClient }) {
29
+ const search = parseOptionalText(args.search, "--search");
30
+ const { data } = await (await getClient()).glossary.list({ search });
31
+ renderList(windowList(data, ctx.range), glossaryView, ctx);
32
+ }
33
+ });
34
+ //#endregion
35
+ export { list_default as default };
@@ -1,6 +1,6 @@
1
- import { B as listFlags, G as listEnvelopeSchema, H as outputFlags, U as profileFlag, d as renderList, z as connectionFlags } from "./cli.mjs";
2
- import { t as defineMetabaseCommand } from "./runtime-nCPku2nN.mjs";
3
- import { n as windowList } from "./window-DSb1tqSe.mjs";
1
+ import { G as listFlags, H as connectionFlags, J as profileFlag, X as listEnvelopeSchema, d as renderList, q as outputFlags } from "./cli.mjs";
2
+ import { t as defineMetabaseCommand } from "./runtime-CZ5zh32z.mjs";
3
+ import { n as windowList } from "./window-CI_QD04s.mjs";
4
4
  import { n as SnippetCompact } from "./snippet-CyKAgIZl.mjs";
5
5
  import { t as snippetView } from "./snippet-oJLaYW9V.mjs";
6
6
  //#region src/commands/snippet/list.ts
@@ -1,9 +1,9 @@
1
- import { C as promptSelect, E as warn, H as outputFlags, Q as ConfigError, S as promptPassword, U as profileFlag, ot as errorMessage, p as renderSummary, rt as TimeoutError, t as interruptSignal, tt as NetworkError, w as promptText, z as connectionFlags } from "./cli.mjs";
2
- import { A as OAUTH_SCOPE, C as ProbedUser, D as OAUTH_CLIENT_NAME, J as normalizeUrl, K as oauthCredentialFromTokens, M as exchangeCode, N as registerClient, O as USER_AGENT, P as tryDiscoverMetadata, S as writeProfile, X as summarizeServer, Y as ServerSummary, b as writeProbeFailure, c as readEnvCredentials, f as consumeKeychainResidualWarning, j as discoverLoginMetadata, k as revokeOAuthCredential, m as keyringFallbackWarning, p as consumeKeyringDowngradeWarning, s as explicitProfileName, t as defineMetabaseCommand, u as DEFAULT_PROFILE, x as writeProbeResult, y as writeOAuthProfile } from "./runtime-nCPku2nN.mjs";
3
- import { r as readInput } from "./input-DEvkIjGr.mjs";
4
- import { t as verifyAndProbe } from "./verify-DTOA_wVM.mjs";
5
- import { a as renderUserRole, i as renderUserName, n as renderSkew, o as renderVersionTag } from "./render-Gx1hR7IF.mjs";
6
- import { t as openBrowser } from "./process-CTrfxxaC.mjs";
1
+ import { D as promptText, E as promptSelect, H as connectionFlags, J as profileFlag, T as promptPassword, at as ConfigError, ct as NetworkError, k as warn, p as renderSummary, pt as errorMessage, q as outputFlags, t as interruptSignal, ut as TimeoutError } from "./cli.mjs";
2
+ import { A as registerClient, D as OAUTH_SCOPE, E as revokeOAuthCredential, G as normalizeUrl, K as ServerSummary, O as discoverLoginMetadata, T as USER_AGENT, U as oauthCredentialFromTokens, _ as writeProbeFailure, a as readEnvCredentials, b as ProbedUser, d as keyringFallbackWarning, g as writeOAuthProfile, i as explicitProfileName, j as tryDiscoverMetadata, k as exchangeCode, l as consumeKeychainResidualWarning, q as summarizeServer, s as DEFAULT_PROFILE, t as defineMetabaseCommand, u as consumeKeyringDowngradeWarning, v as writeProbeResult, w as OAUTH_CLIENT_NAME, y as writeProfile } from "./runtime-CZ5zh32z.mjs";
3
+ import { i as readInput } from "./input-D8qW-KtR.mjs";
4
+ import { t as verifyAndProbe } from "./verify-Mpb65a5v.mjs";
5
+ import { a as renderUserRole, i as renderUserName, n as renderSkew, o as renderVersionTag } from "./render-BSfDD6ip.mjs";
6
+ import { t as openBrowser } from "./process-D0HdqZ3r.mjs";
7
7
  import { z } from "zod";
8
8
  import { createServer } from "node:http";
9
9
  import { createHash, randomBytes } from "node:crypto";
@@ -1,5 +1,5 @@
1
- import { E as warn, H as outputFlags, U as profileFlag, ot as errorMessage, p as renderSummary, x as promptConfirm } from "./cli.mjs";
2
- import { O as USER_AGENT, d as clearProfile, f as consumeKeychainResidualWarning, g as readProfileCredential, k as revokeOAuthCredential, l as resolveProfileName, t as defineMetabaseCommand } from "./runtime-nCPku2nN.mjs";
1
+ import { J as profileFlag, k as warn, p as renderSummary, pt as errorMessage, q as outputFlags, w as promptConfirm } from "./cli.mjs";
2
+ import { E as revokeOAuthCredential, T as USER_AGENT, c as clearProfile, l as consumeKeychainResidualWarning, o as resolveProfileName, p as readProfileCredential, t as defineMetabaseCommand } from "./runtime-CZ5zh32z.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/commands/auth/logout.ts
5
5
  const LogoutResult = z.object({
@@ -1,4 +1,4 @@
1
- import { t as defineCommandGroup } from "./group-YQQ5GIcP.mjs";
1
+ import { t as defineCommandGroup } from "./group-bpD_KcjA.mjs";
2
2
  //#region src/commands/measure/index.ts
3
3
  var measure_default = defineCommandGroup({
4
4
  name: "measure",
@@ -11,11 +11,11 @@ var measure_default = defineCommandGroup({
11
11
  purpose: "define reusable measures"
12
12
  }],
13
13
  subCommands: {
14
- list: () => import("./list-yV6CyPzn.mjs").then((mod) => mod.default),
15
- get: () => import("./get-CekXFP3x.mjs").then((mod) => mod.default),
16
- create: () => import("./create-CnJKj9Nl.mjs").then((mod) => mod.default),
17
- update: () => import("./update-CKDRuduL.mjs").then((mod) => mod.default),
18
- archive: () => import("./archive-1YVo-Wsu.mjs").then((mod) => mod.default)
14
+ list: () => import("./list-C-A-2HFq.mjs").then((mod) => mod.default),
15
+ get: () => import("./get-BSUsfysk.mjs").then((mod) => mod.default),
16
+ create: () => import("./create-B2tuInV9.mjs").then((mod) => mod.default),
17
+ update: () => import("./update-DAzRx0of.mjs").then((mod) => mod.default),
18
+ archive: () => import("./archive-Ct1eyolN.mjs").then((mod) => mod.default)
19
19
  }
20
20
  });
21
21
  //#endregion
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ //#region ../client/src/domain/moderation-review.ts
3
+ const ModeratedItemType = z.enum(["card", "dashboard"]);
4
+ const ModerationStatus = z.enum(["verified"]);
5
+ const ModerationReview = z.object({
6
+ id: z.number().int(),
7
+ moderated_item_id: z.number().int(),
8
+ moderated_item_type: ModeratedItemType,
9
+ moderator_id: z.number().int(),
10
+ status: ModerationStatus.nullable(),
11
+ text: z.string().nullable(),
12
+ most_recent: z.boolean(),
13
+ created_at: z.string(),
14
+ updated_at: z.string()
15
+ }).loose();
16
+ const ModerationReviewCompact = ModerationReview.pick({
17
+ id: true,
18
+ moderated_item_id: true,
19
+ moderated_item_type: true,
20
+ status: true,
21
+ text: true,
22
+ most_recent: true
23
+ }).strip();
24
+ const ModerationReviewCreateInput = z.object({
25
+ moderated_item_id: z.number().int().positive(),
26
+ moderated_item_type: ModeratedItemType,
27
+ status: ModerationStatus.nullable().optional(),
28
+ text: z.string().nullable().optional()
29
+ }).strict();
30
+ //#endregion
31
+ export { ModerationReviewCompact as n, ModerationReviewCreateInput as r, ModerationReview as t };
@@ -1,4 +1,4 @@
1
- import { g as MALFORMED_CELL } from "./cli.mjs";
1
+ import { _ as MALFORMED_CELL } from "./cli.mjs";
2
2
  import { i as NotificationCompact, o as NotificationHandler, r as NotificationCardPayload, s as NotificationSubscription } from "./notification-DaA4bBHW.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/output/views/notification.ts
@@ -1,6 +1,6 @@
1
- import { H as outputFlags, Q as ConfigError, U as profileFlag, p as renderSummary, z as connectionFlags } from "./cli.mjs";
2
- import { t as defineMetabaseCommand } from "./runtime-nCPku2nN.mjs";
3
- import { t as parseId } from "./parse-id-whJX4DAb.mjs";
1
+ import { H as connectionFlags, J as profileFlag, at as ConfigError, p as renderSummary, q as outputFlags } from "./cli.mjs";
2
+ import { t as defineMetabaseCommand } from "./runtime-CZ5zh32z.mjs";
3
+ import { t as parseId } from "./parse-id-BW09NysN.mjs";
4
4
  import { i as ParameterValuesCompact, r as ParameterValues } from "./parameter-Celg0wZa.mjs";
5
5
  //#region src/output/views/parameter.ts
6
6
  const parameterValuesView = {
@@ -1,4 +1,4 @@
1
- import { Q as ConfigError } from "./cli.mjs";
1
+ import { at as ConfigError } from "./cli.mjs";
2
2
  //#region src/commands/parse-enum.ts
3
3
  function parseEnumFlag(value, schema, name) {
4
4
  const result = schema.safeParse(value);
@@ -0,0 +1,13 @@
1
+ import { tt as parseInteger } from "./runtime-CZ5zh32z.mjs";
2
+ //#region src/commands/parse-id.ts
3
+ function parseId(value, name = "id") {
4
+ return parseInteger(value, {
5
+ name,
6
+ min: 1
7
+ });
8
+ }
9
+ function parseIdCsv(raw, name) {
10
+ return raw.split(",").map((part) => parseId(part, name));
11
+ }
12
+ //#endregion
13
+ export { parseIdCsv as n, parseId as t };
@@ -1,4 +1,4 @@
1
- import { Q as ConfigError } from "./cli.mjs";
1
+ import { at as ConfigError } from "./cli.mjs";
2
2
  //#region src/commands/collection/parse-ref.ts
3
3
  const SPECIAL_TOKENS = /* @__PURE__ */ new Set(["root", "trash"]);
4
4
  const POSITIVE_INTEGER_PATTERN = /^[1-9]\d*$/;
@@ -0,0 +1,11 @@
1
+ import { S as isBlank, at as ConfigError } from "./cli.mjs";
2
+ //#region src/commands/parse-text.ts
3
+ function parseText(value, name) {
4
+ if (isBlank(value)) throw new ConfigError(`invalid ${name}: must not be blank`);
5
+ return value;
6
+ }
7
+ function parseOptionalText(value, name) {
8
+ return value === void 0 ? void 0 : parseText(value, name);
9
+ }
10
+ //#endregion
11
+ export { parseText as n, parseOptionalText as t };
@@ -1,7 +1,7 @@
1
- import { B as listFlags, G as listEnvelopeSchema, H as outputFlags, d as renderList } from "./cli.mjs";
2
- import { t as defineMetabaseCommand } from "./runtime-nCPku2nN.mjs";
3
- import { n as windowList } from "./window-DSb1tqSe.mjs";
4
- import { i as loadVisibleSkills, n as findSkillByName, r as loadAllSkills } from "./skills-CqtNuSXM.mjs";
1
+ import { G as listFlags, X as listEnvelopeSchema, d as renderList, q as outputFlags } from "./cli.mjs";
2
+ import { t as defineMetabaseCommand } from "./runtime-CZ5zh32z.mjs";
3
+ import { n as windowList } from "./window-CI_QD04s.mjs";
4
+ import { i as loadVisibleSkills, n as findSkillByName, r as loadAllSkills } from "./skills-CJ9eXouJ.mjs";
5
5
  import { z } from "zod";
6
6
  //#region src/commands/skills/path.ts
7
7
  const SkillPath = z.object({
@@ -1,5 +1,5 @@
1
- import { rt as TimeoutError } from "./cli.mjs";
2
- import { n as throwIfAborted, t as combineAborts } from "./signal-k7cm5N6h.mjs";
1
+ import { ut as TimeoutError } from "./cli.mjs";
2
+ import { n as throwIfAborted, t as combineAborts } from "./signal-CxWeLszu.mjs";
3
3
  import { setTimeout } from "node:timers/promises";
4
4
  //#region ../client/src/poll.ts
5
5
  const DEFAULT_INTERVAL_MS = 2e3;
@@ -1,6 +1,6 @@
1
- import { Q as ConfigError, et as MetabaseError, m as writeJson } from "./cli.mjs";
2
- import { R as chainRequestFailure } from "./runtime-nCPku2nN.mjs";
3
- import "./validate-xR_MHBNR.mjs";
1
+ import { at as ConfigError, h as writeJson, st as MetabaseError } from "./cli.mjs";
2
+ import { F as chainRequestFailure } from "./runtime-CZ5zh32z.mjs";
3
+ import "./validate-D7e110oU.mjs";
4
4
  //#region src/commands/dashboard/preflight.ts
5
5
  async function preflightDashcardCardReferences(client, dashcards) {
6
6
  const issues = await client.dashboard.checkCardReferences(dashcards);
@@ -1,4 +1,4 @@
1
- import { st as isFileNotFoundError } from "./cli.mjs";
1
+ import { ht as isFileNotFoundError } from "./cli.mjs";
2
2
  import { spawn } from "node:child_process";
3
3
  //#region src/runtime/process.ts
4
4
  var ProcessNotFoundError = class extends Error {
@@ -1,7 +1,7 @@
1
- import { E as warn, H as outputFlags, U as profileFlag, ot as errorMessage, p as renderSummary, z as connectionFlags } from "./cli.mjs";
2
- import { t as defineMetabaseCommand } from "./runtime-nCPku2nN.mjs";
3
- import { a as CollectionCompact, r as Collection } from "./collection-BxdPxD38.mjs";
4
- import { n as tableSelectorFlags, t as parseTableSelectors } from "./selectors-rEFuyXPZ.mjs";
1
+ import { H as connectionFlags, J as profileFlag, k as warn, p as renderSummary, pt as errorMessage, q as outputFlags } from "./cli.mjs";
2
+ import { t as defineMetabaseCommand } from "./runtime-CZ5zh32z.mjs";
3
+ import { a as CollectionCompact, r as Collection } from "./collection-D3KXhvnc.mjs";
4
+ import { i as tableSelectorFlags, n as parseTableSelectors } from "./table-selector-flags-1bYkAKld.mjs";
5
5
  import { z } from "zod";
6
6
  //#region src/commands/git-sync/sync-scope.ts
7
7
  function isOutsideSyncScope(collection) {
@@ -1,4 +1,4 @@
1
- import { g as MALFORMED_CELL } from "./cli.mjs";
1
+ import { _ as MALFORMED_CELL } from "./cli.mjs";
2
2
  import { n as PulseChannel, r as PulseCompact } from "./pulse-Dz0ocv0l.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/output/views/pulse.ts
@@ -0,0 +1,328 @@
1
+ import { H as connectionFlags, J as profileFlag, _ as MALFORMED_CELL, at as ConfigError, h as writeJson, m as serializeJson, p as renderSummary, q as outputFlags, u as renderItem } from "./cli.mjs";
2
+ import { F as chainRequestFailure, P as HttpError, R as parseJson, t as defineMetabaseCommand } from "./runtime-CZ5zh32z.mjs";
3
+ import { t as readBody } from "./body-Dd-TwYYL.mjs";
4
+ import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
5
+ import { t as Field } from "./field-5nivEfd6.mjs";
6
+ import { a as CardQueryResult, l as DatasetQuery, p as VisualizationSettings } from "./card-Bv4ZN0oV.mjs";
7
+ import { p as TableQueryMetadata } from "./table-Ci6bhZkb.mjs";
8
+ import { t as Database } from "./database-D-CRyRIv.mjs";
9
+ import { t as Snippet } from "./snippet-CyKAgIZl.mjs";
10
+ import { a as VirtualTable, i as QueryMetadataCompact, n as CompiledQueryCompact, r as QueryMetadata, t as CompiledQuery } from "./dataset-p5oNPQgL.mjs";
11
+ import { t as cardQueryView } from "./card-DSrgU7lT.mjs";
12
+ import { a as validateQuery, i as isMbql5Query, n as assertNotLegacyEnvelopeWrappingMbql5, r as getQuerySchemaBundle, t as ValidationOutcome } from "./validate-D7e110oU.mjs";
13
+ import { o as skipValidateFlag } from "./validate-query-C7LuKiUT.mjs";
14
+ import { i as formatQueryResult, n as exportFlags, r as readExportRequest, t as assertStreamedOutput } from "./export-flags-NiZ7C3Gm.mjs";
15
+ import { t as pipeToStdout } from "./stream-McixcoUl.mjs";
16
+ import { z } from "zod";
17
+ //#region src/output/views/dataset.ts
18
+ const DatabaseNames = z.array(Database.pick({ name: true }));
19
+ const TableNames = z.array(z.union([TableQueryMetadata.pick({ display_name: true }), VirtualTable.pick({ display_name: true })]));
20
+ const FieldNames = z.array(Field.pick({ display_name: true }));
21
+ const SnippetNames = z.array(Snippet.pick({ name: true }));
22
+ function joinLabels(schema, label) {
23
+ return (value) => {
24
+ const parsed = schema.safeParse(value);
25
+ return parsed.success ? parsed.data.map(label).join(", ") : MALFORMED_CELL;
26
+ };
27
+ }
28
+ const compiledQueryView = {
29
+ compactPick: CompiledQueryCompact,
30
+ tableColumns: [
31
+ {
32
+ key: "query",
33
+ label: "Query"
34
+ },
35
+ {
36
+ key: "params",
37
+ label: "Params"
38
+ },
39
+ {
40
+ key: "collection",
41
+ label: "Collection"
42
+ }
43
+ ]
44
+ };
45
+ const queryMetadataView = {
46
+ compactPick: QueryMetadataCompact,
47
+ tableColumns: [
48
+ {
49
+ key: "databases",
50
+ label: "Databases",
51
+ format: joinLabels(DatabaseNames, (database) => database.name)
52
+ },
53
+ {
54
+ key: "tables",
55
+ label: "Tables",
56
+ format: joinLabels(TableNames, (table) => table.display_name)
57
+ },
58
+ {
59
+ key: "fields",
60
+ label: "Fields",
61
+ format: joinLabels(FieldNames, (field) => field.display_name)
62
+ },
63
+ {
64
+ key: "snippets",
65
+ label: "Snippets",
66
+ format: joinLabels(SnippetNames, (snippet) => snippet.name)
67
+ }
68
+ ]
69
+ };
70
+ //#endregion
71
+ //#region src/commands/query-mode.ts
72
+ const queryModeFlags = {
73
+ "dry-run": {
74
+ type: "boolean",
75
+ description: "Check the body and compile it on the server to native SQL without running it; prints {ok, errors, sql}"
76
+ },
77
+ compile: {
78
+ type: "boolean",
79
+ description: "Print the native query the server compiles the body to, instead of running it"
80
+ },
81
+ metadata: {
82
+ type: "boolean",
83
+ description: "Print the databases, tables, fields and snippets the body references, instead of running it"
84
+ },
85
+ pretty: {
86
+ type: "boolean",
87
+ description: "With --compile: format the native query for reading, as the server does by default; --no-pretty compiles to one line"
88
+ },
89
+ ...exportFlags,
90
+ "visualization-settings": {
91
+ type: "string",
92
+ description: "With --export-format: JSON object of visualization settings; column settings shape --format-rows, pivot_table.column_split the --pivot-results layout"
93
+ },
94
+ "print-schema": {
95
+ type: "boolean",
96
+ description: "Emit the bundled MBQL 5 query JSON Schema and exit; no body required"
97
+ }
98
+ };
99
+ const COLUMN_SPLIT_KEY = "pivot_table.column_split";
100
+ const PIVOT_NEEDS_SPLIT = `--pivot-results requires --visualization-settings with ${COLUMN_SPLIT_KEY}`;
101
+ function resolveQueryMode(args) {
102
+ const exportRequest = readExportRequest(args);
103
+ const visualizationSettings = readVisualizationSettings(args, exportRequest);
104
+ const selected = [];
105
+ if (args["print-schema"] === true) selected.push({
106
+ flag: "--print-schema",
107
+ mode: { kind: "print-schema" }
108
+ });
109
+ if (args["dry-run"] === true) selected.push({
110
+ flag: "--dry-run",
111
+ mode: { kind: "dry-run" }
112
+ });
113
+ if (args.compile === true) selected.push({
114
+ flag: "--compile",
115
+ mode: {
116
+ kind: "compile",
117
+ pretty: args.pretty
118
+ }
119
+ });
120
+ if (args.metadata === true) selected.push({
121
+ flag: "--metadata",
122
+ mode: { kind: "metadata" }
123
+ });
124
+ if (exportRequest !== null) {
125
+ const params = {
126
+ ...exportRequest.params,
127
+ visualization_settings: visualizationSettings
128
+ };
129
+ selected.push({
130
+ flag: "--export-format",
131
+ mode: {
132
+ kind: "export",
133
+ format: exportRequest.format,
134
+ params
135
+ }
136
+ });
137
+ }
138
+ const [first, ...rest] = selected;
139
+ if (first === void 0) {
140
+ assertPrettyLeftAlone(args, { kind: "run" });
141
+ return { kind: "run" };
142
+ }
143
+ if (rest.length > 0) {
144
+ const others = rest.map((entry) => entry.flag).join(", ");
145
+ throw new ConfigError(`${first.flag} cannot be combined with ${others}`);
146
+ }
147
+ assertPrettyLeftAlone(args, first.mode);
148
+ return first.mode;
149
+ }
150
+ function assertPrettyLeftAlone(args, mode) {
151
+ if (args.pretty === void 0 || mode.kind === "compile") return;
152
+ throw new ConfigError(`${args.pretty ? "--pretty" : "--no-pretty"} requires --compile`);
153
+ }
154
+ function readVisualizationSettings(args, exportRequest) {
155
+ const raw = args["visualization-settings"];
156
+ const given = raw !== void 0 && raw !== "";
157
+ if (exportRequest === null) {
158
+ if (given) throw new ConfigError("--visualization-settings requires --export-format");
159
+ return;
160
+ }
161
+ if (!given) {
162
+ if (exportRequest.params.pivot_results) throw new ConfigError(PIVOT_NEEDS_SPLIT);
163
+ return;
164
+ }
165
+ const settings = parseJson(raw, VisualizationSettings, { source: "--visualization-settings" });
166
+ if (exportRequest.params.pivot_results && !hasColumnSplit(settings)) throw new ConfigError(PIVOT_NEEDS_SPLIT);
167
+ return settings;
168
+ }
169
+ function hasColumnSplit(settings) {
170
+ const split = settings[COLUMN_SPLIT_KEY];
171
+ return typeof split === "object" && split !== null;
172
+ }
173
+ //#endregion
174
+ //#region src/commands/query.ts
175
+ const QueryBody = z.unknown().describe("The query body: {\"lib/type\": \"mbql/query\", database, stages}; full schema: mb query --print-schema");
176
+ const QueryDryRunOutcome = ValidationOutcome.extend({ sql: z.string().nullable().describe("The compiled native query; null when it did not compile") });
177
+ const QueryOutput = z.union([
178
+ CardQueryResult,
179
+ QueryDryRunOutcome,
180
+ CompiledQuery,
181
+ QueryMetadata
182
+ ]);
183
+ const COMPILE_REJECTION_STATUSES = /* @__PURE__ */ new Set([400, 500]);
184
+ const FORBIDDEN_STATUS = 403;
185
+ const WHOLE_QUERY_POINTER = "";
186
+ const VALIDATION_HINT = " — fix them, or pass --skip-validate to send anyway";
187
+ var query_default = defineMetabaseCommand({
188
+ meta: {
189
+ name: "query",
190
+ description: "Run, compile, or inspect an ad-hoc MBQL or native query"
191
+ },
192
+ details: "Reads a JSON query body from --body, --file, or stdin and runs it. MBQL 5 is Metabase's structured query format, shaped {\"lib/type\": \"mbql/query\", \"database\": <database id>, \"stages\": [{\"lib/type\": \"mbql.stage/mbql\", \"source-table\": <table id>, \"aggregation\": [[\"count\", {}]]}]} with ids from `mb database list` and `mb table list`; it is checked against a bundled JSON Schema before sending, and --print-schema prints that schema. --dry-run checks the body without running it: the local schema check, then the server compiles it to native SQL without touching the warehouse. It prints {ok, errors:[{path, message}], sql} and exits 0 when the query compiled, 2 when either check rejected it. Legacy MBQL 4 and legacy native bodies skip the local check. --compile prints the native query the server compiles the body to, --metadata the databases, tables, fields and snippets the body touches, and --export-format streams the rows as csv, json or xlsx; the three are mutually exclusive with each other, with --dry-run and with --print-schema. An export takes its column formatting and pivot layout from --visualization-settings, since an ad-hoc query has no card to read them from: --pivot-results needs their pivot_table.column_split.",
193
+ skills: [{
194
+ skill: "mbql",
195
+ purpose: "body shape, clause rules, and the dry-run loop"
196
+ }],
197
+ requires: [
198
+ "dataset.exportQuery",
199
+ "dataset.native",
200
+ "dataset.query",
201
+ "dataset.queryMetadata"
202
+ ],
203
+ args: {
204
+ ...outputFlags,
205
+ ...profileFlag,
206
+ ...connectionFlags,
207
+ ...bodyInputFlags,
208
+ ...queryModeFlags,
209
+ ...skipValidateFlag
210
+ },
211
+ inputSchema: QueryBody,
212
+ outputSchema: QueryOutput,
213
+ examples: [
214
+ "mb query --print-schema",
215
+ "cat q.json | mb query --dry-run",
216
+ "mb query --file q.json",
217
+ "mb query --file q.json --compile",
218
+ "mb query --file q.json --metadata --json",
219
+ "mb query --file q.json --export-format csv > rows.csv",
220
+ "mb query --file q.json --skip-validate"
221
+ ],
222
+ async run({ args, ctx, getClient }) {
223
+ const mode = resolveQueryMode(args);
224
+ if (mode.kind === "print-schema") {
225
+ writeJson(getQuerySchemaBundle());
226
+ return;
227
+ }
228
+ const skip = args["skip-validate"] === true;
229
+ if (mode.kind === "dry-run" && skip) throw new ConfigError("--skip-validate cannot be combined with --dry-run");
230
+ if (mode.kind === "export") assertStreamedOutput(ctx);
231
+ const sources = {
232
+ flag: args.body,
233
+ file: args.file
234
+ };
235
+ if (mode.kind === "dry-run") {
236
+ const query = await readQuery(sources, {
237
+ skip: false,
238
+ dryRun: true
239
+ });
240
+ const outcome = await (await getClient()).dataset.native(query).then(compiledOutcome, rejectedOutcome);
241
+ writeJson(outcome);
242
+ if (!outcome.ok) throw new ConfigError(`server validation failed: ${outcome.errors.length} error(s)`);
243
+ return;
244
+ }
245
+ const datasetQuery = await readQuery(sources, {
246
+ skip,
247
+ dryRun: false
248
+ });
249
+ const client = await getClient();
250
+ if (mode.kind === "run") {
251
+ const queryResult = await client.dataset.query(datasetQuery);
252
+ renderSummary(queryResult, cardQueryView, () => formatQueryResult(queryResult), ctx);
253
+ return;
254
+ }
255
+ switch (mode.kind) {
256
+ case "compile": {
257
+ const compiled = await client.dataset.native(datasetQuery, { pretty: mode.pretty }).catch(refusedCompile);
258
+ renderSummary(compiled, compiledQueryView, () => formatCompiledQuery(compiled), ctx);
259
+ return;
260
+ }
261
+ case "metadata":
262
+ renderItem(await client.dataset.queryMetadata(datasetQuery), queryMetadataView, ctx);
263
+ return;
264
+ case "export":
265
+ await pipeToStdout(await client.dataset.exportQuery(mode.format, {
266
+ query: datasetQuery,
267
+ ...mode.params
268
+ }));
269
+ return;
270
+ }
271
+ }
272
+ });
273
+ function notCompiled(local) {
274
+ return {
275
+ ...local,
276
+ sql: null
277
+ };
278
+ }
279
+ function compiledOutcome(compiled) {
280
+ return {
281
+ ok: true,
282
+ errors: [],
283
+ sql: formatCompiledQuery(compiled)
284
+ };
285
+ }
286
+ function rejectedOutcome(error) {
287
+ if (!(error instanceof HttpError)) throw error;
288
+ if (error.status === FORBIDDEN_STATUS) throw compilePermissionFailure(error);
289
+ if (!COMPILE_REJECTION_STATUSES.has(error.status)) throw error;
290
+ return {
291
+ ok: false,
292
+ errors: [{
293
+ path: WHOLE_QUERY_POINTER,
294
+ message: error.message
295
+ }],
296
+ sql: null
297
+ };
298
+ }
299
+ function refusedCompile(error) {
300
+ if (error instanceof HttpError && error.status === FORBIDDEN_STATUS) throw compilePermissionFailure(error);
301
+ throw error;
302
+ }
303
+ function compilePermissionFailure(error) {
304
+ return chainRequestFailure(error, `the server refused to compile the query; compiling needs native query permission on its database and access to every table and card it reads: ${error.message}`);
305
+ }
306
+ async function readQuery(sources, options) {
307
+ const body = await readBody(sources, QueryBody);
308
+ preflightQuery(body, options);
309
+ return DatasetQuery.parse(body);
310
+ }
311
+ function preflightQuery(body, options) {
312
+ if (options.skip) return;
313
+ assertNotLegacyEnvelopeWrappingMbql5(body, {
314
+ contextLabel: "query",
315
+ bodyNoun: "the body"
316
+ });
317
+ if (!isMbql5Query(body)) return;
318
+ const outcome = validateQuery(body);
319
+ if (outcome.ok) return;
320
+ writeJson(options.dryRun ? notCompiled(outcome) : outcome);
321
+ const hint = options.dryRun ? "" : VALIDATION_HINT;
322
+ throw new ConfigError(`validation failed: ${outcome.errors.length} error(s)${hint}`);
323
+ }
324
+ function formatCompiledQuery(compiled) {
325
+ return typeof compiled.query === "string" ? compiled.query : serializeJson(compiled.query, false);
326
+ }
327
+ //#endregion
328
+ export { query_default as default };