@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.
- package/dist/{add-collection-BjVAdZ1n.mjs → add-collection-CC6KSwjX.mjs} +5 -5
- package/dist/{alert-DCLhfwdv.mjs → alert-Dt6La9tK.mjs} +7 -7
- package/dist/{alerts-DRin_wt2.mjs → alerts-ClKnJqgB.mjs} +6 -6
- package/dist/{append-DQ9rPJHZ.mjs → append-pnaQWP_A.mjs} +4 -4
- package/dist/{archive-D6xzHaM3.mjs → archive-By1pLYtO.mjs} +3 -3
- package/dist/{archive-xcgoVPwv.mjs → archive-CLu2TGW5.mjs} +5 -5
- package/dist/{archive-HeRygdKz2.mjs → archive-COP9joWU.mjs} +4 -4
- package/dist/{archive-COFQAHAL.mjs → archive-CSnBFcQ_.mjs} +3 -3
- package/dist/{archive-1YVo-Wsu.mjs → archive-Ct1eyolN.mjs} +3 -3
- package/dist/{archive-_c-ISZmi.mjs → archive-D7nAQcCz.mjs} +3 -3
- package/dist/{archive-BzVxRqpL.mjs → archive-DEDA48w3.mjs} +5 -5
- package/dist/{archive-BVRKE9Ev.mjs → archive-DJAsSzCz.mjs} +5 -5
- package/dist/{archive-BPCgmLcV.mjs → archive-DtabbPUk.mjs} +4 -4
- package/dist/{archive-o5cWV3vZ.mjs → archive-YNpa8daf.mjs} +3 -3
- package/dist/{archive-D3yPvUtz.mjs → archive-ewitrKdx.mjs} +5 -5
- package/dist/{auth-DJn5T6zA.mjs → auth-DdLhXCn-.mjs} +5 -5
- package/dist/body-Dd-TwYYL.mjs +17 -0
- package/dist/branch-flag-pFQPNYKr.mjs +9 -0
- package/dist/{branches-CUyPxeeW.mjs → branches-ZvGNhed6.mjs} +3 -3
- package/dist/breaking-BLswgvkA.mjs +36 -0
- package/dist/broken-BN0nL2hf.mjs +37 -0
- package/dist/bulk-discard-values-DFJUjSnE.mjs +49 -0
- package/dist/bulk-edit-Brqr67bu.mjs +53 -0
- package/dist/bulk-rescan-values-DndXXi2N.mjs +28 -0
- package/dist/bulk-sync-schema-mO-t2QlL.mjs +28 -0
- package/dist/{cancel-BNuVls58.mjs → cancel-DP03dXBf.mjs} +3 -3
- package/dist/{cancel-task-DUmlQQpi.mjs → cancel-task-CELBfBPP.mjs} +4 -4
- package/dist/{card-voh1k4hl.mjs → card-Bv4ZN0oV.mjs} +5 -3
- package/dist/card-CFd-GUEM.mjs +25 -0
- package/dist/{card-CEkp1mcI.mjs → card-DSrgU7lT.mjs} +1 -1
- package/dist/{cards-_gbvw3wp.mjs → cards-Cn2ywFTJ.mjs} +6 -6
- package/dist/cli.mjs +410 -100
- package/dist/{client-BnK0evYf.mjs → client-ToLiPu9q.mjs} +316 -316
- package/dist/{collection-DYM0p3Xl.mjs → collection-BG3Ksea-.mjs} +1 -1
- package/dist/collection-BKNShKcY.mjs +21 -0
- package/dist/{collection-BxdPxD38.mjs → collection-D3KXhvnc.mjs} +7 -5
- package/dist/{collection-namespace-DM90lA8C.mjs → collection-namespace-CWW6hZxK.mjs} +2 -2
- package/dist/{content-translation-CqB3peU9.mjs → content-translation-C19SqZWp.mjs} +3 -3
- package/dist/copy-BGK8Wz6d.mjs +55 -0
- package/dist/copy-COLUuiuF.mjs +36 -0
- package/dist/copy-flags-eU8aa0zj.mjs +32 -0
- package/dist/{create-CnJKj9Nl.mjs → create-B2tuInV9.mjs} +4 -4
- package/dist/{create-D4Y69cDF.mjs → create-B3TKri1E.mjs} +4 -4
- package/dist/{create-BSvTs-EV.mjs → create-B4gXKDRr.mjs} +3 -3
- package/dist/create-B63JphYe.mjs +34 -0
- package/dist/{create-IFjwHs0G.mjs → create-BH6kLjHS.mjs} +4 -4
- package/dist/{create-BIUVvIGH.mjs → create-BwifyhyL.mjs} +3 -3
- package/dist/{create-CwXUMOMd.mjs → create-Colz5bOO.mjs} +3 -3
- package/dist/{create-Cm9Z-rfe2.mjs → create-CulUZgN1.mjs} +4 -4
- package/dist/{create-DNx9TGHs.mjs → create-Cxuqr3kT.mjs} +6 -6
- package/dist/{create-CUHpxANR.mjs → create-CzW_UTE7.mjs} +6 -6
- package/dist/{create-BMKuihoI.mjs → create-DNR8RMvV.mjs} +6 -6
- package/dist/{create-DMVw9nrZ.mjs → create-DSHeoV7e.mjs} +4 -4
- package/dist/{create-DVo8-IzZ.mjs → create-DWbW2WSc.mjs} +6 -6
- package/dist/{create-va8bByVt.mjs → create-Dx8nfjGs.mjs} +3 -3
- package/dist/{create-B7S5fCkD.mjs → create-XGomrTz5.mjs} +5 -5
- package/dist/{create-branch-Cw-uXows.mjs → create-branch-DxL7KUZp.mjs} +4 -4
- package/dist/{create-B48rmY8v.mjs → create-g1f2yJ4s.mjs} +3 -3
- package/dist/{csv-CaKx1oFZ.mjs → csv-C6TEfLMi.mjs} +4 -4
- package/dist/{current-task-lGh69Z1i.mjs → current-task-CHs0zNFM.mjs} +4 -4
- package/dist/dashboard-AWrXqQ7a.mjs +35 -0
- package/dist/{dashboard-D0hwTC-f.mjs → dashboard-Phz3XpRM.mjs} +2 -1
- package/dist/{dashboard-DgK81azj.mjs → dashboard-XSTr9QCr.mjs} +6 -2
- package/dist/database-D-CRyRIv.mjs +45 -0
- package/dist/{database-C3E9PZSx.mjs → database-MlUPpitM.mjs} +1 -1
- package/dist/dataset-p5oNPQgL.mjs +66 -0
- package/dist/{db-BRHPjshe.mjs → db-BFSeETMO.mjs} +7 -7
- package/dist/{delete-DMETa-37.mjs → delete-BUKgSJhh.mjs} +4 -4
- package/dist/{delete-CQWCfqHf.mjs → delete-CPBByycV.mjs} +4 -4
- package/dist/{delete-Ci0aDYpf.mjs → delete-Cucqn4-V.mjs} +4 -4
- package/dist/{delete-BxBadE3q.mjs → delete-D79TlpcE.mjs} +4 -4
- package/dist/delete-DZJxBmdU.mjs +44 -0
- package/dist/{delete-G6EiGn2Q.mjs → delete-DndykJn2.mjs} +4 -4
- package/dist/delete-runtime-BbmRg_in.mjs +55 -0
- package/dist/{delete-table-N4rZtt1T.mjs → delete-table-CbsWcjh5.mjs} +4 -4
- package/dist/{dependencies-edN0P1SS.mjs → dependencies-B-880phi.mjs} +5 -5
- package/dist/dependency-DBUJwXqv.mjs +15 -0
- package/dist/dependency-DKSjKT8P.mjs +165 -0
- package/dist/dependency-DSxKm9oS.mjs +111 -0
- package/dist/dependents-C_FDnpZs.mjs +52 -0
- package/dist/{dirty-U51bMoCP.mjs → dirty-B-Is68--.mjs} +5 -5
- package/dist/discard-values-yzH-kIsr.mjs +55 -0
- package/dist/document-BRaba87v.mjs +20 -0
- package/dist/{document-CA0Q6lqu.mjs → document-C18b5rM6.mjs} +1 -1
- package/dist/{document-BHpLJbKU.mjs → document-DFCj1Az_.mjs} +2 -1
- package/dist/{download-BJA6k-e6.mjs → download-DluF-vnU.mjs} +2 -2
- package/dist/{eid-BtlRU1E0.mjs → eid-Dz-mP40j.mjs} +11 -10
- package/dist/entity-CA4zfRt4.mjs +20 -0
- package/dist/entry-flags-7x7bIyOQ.mjs +42 -0
- package/dist/{events-B5rnOo-L.mjs → events-2sOk6H09.mjs} +4 -4
- package/dist/export-BKkAJOFb.mjs +74 -0
- package/dist/export-flags-NiZ7C3Gm.mjs +81 -0
- package/dist/export-preflight-CwJ_3-iX.mjs +35 -0
- package/dist/{field-CcN4oZy6.mjs → field-5nivEfd6.mjs} +33 -3
- package/dist/field-BARgq5I9.mjs +21 -0
- package/dist/field-wmN6raOG.mjs +128 -0
- package/dist/{fields-zQ6O_W_H.mjs → fields-Bod0s_uV.mjs} +6 -6
- package/dist/filter-flags-BYcbB85j.mjs +71 -0
- package/dist/fks-IUw66K_Q.mjs +36 -0
- package/dist/{get-BDrmBZ1z.mjs → get-B8DUMrCw.mjs} +5 -5
- package/dist/{get-is8x5f2n.mjs → get-BGqvoGQM.mjs} +3 -3
- package/dist/{get-CekXFP3x.mjs → get-BSUsfysk.mjs} +3 -3
- package/dist/{get-CeSQptdl.mjs → get-BXsLkoit.mjs} +5 -5
- package/dist/{get-DhpMuTSt.mjs → get-BXssHyJ1.mjs} +5 -5
- package/dist/get-Bct52yPw.mjs +36 -0
- package/dist/{get-DXwlZjw0.mjs → get-Besqwy32.mjs} +3 -3
- package/dist/{get-BLjcCXp8.mjs → get-BfSX-OeS.mjs} +3 -3
- package/dist/{get-BLcS4il2.mjs → get-Biy4gOzu2.mjs} +3 -3
- package/dist/{get-BSoMWp4t2.mjs → get-CYIeiTZ9.mjs} +4 -4
- package/dist/{get-CwiJWeH4.mjs → get-CaEiQnSw.mjs} +4 -4
- package/dist/{get-xPv7e5Ez.mjs → get-Cl81y0Md.mjs} +5 -5
- package/dist/{get-Cf6a4fFN.mjs → get-D1NjMXAH.mjs} +4 -4
- package/dist/{get-EFsmL4le.mjs → get-D2cPuOPR.mjs} +5 -5
- package/dist/{get-Dg-S07ri.mjs → get-DITlshJH.mjs} +3 -3
- package/dist/{get-CTp5l7aU.mjs → get-DLyg6Al9.mjs} +3 -3
- package/dist/{get-93wuhTn2.mjs → get-DQZfaVNq.mjs} +4 -4
- package/dist/{get-CG6G-mzV.mjs → get-DtBqoGTa.mjs} +5 -5
- package/dist/{get-DC_huYD8.mjs → get-_ik_5_lQ.mjs} +5 -5
- package/dist/{get-run-DwY4sFGy.mjs → get-run-CEc_tr5b.mjs} +4 -4
- package/dist/{git-sync-BwBRmEhE.mjs → git-sync-COokpYgc.mjs} +12 -3
- package/dist/git-sync-DKcaddkV.mjs +29 -0
- package/dist/git-sync-DspFahwV.mjs +165 -0
- package/dist/glossary-BlNCrYbw.mjs +30 -0
- package/dist/glossary-CWIX8Zh6.mjs +14 -0
- package/dist/glossary-LmZWwCNP.mjs +21 -0
- package/dist/graph-f6Bp1e8U.mjs +34 -0
- package/dist/{group-YQQ5GIcP.mjs → group-bpD_KcjA.mjs} +1 -1
- package/dist/{has-remote-changes-DE2_14FK.mjs → has-remote-changes-B8MmN6yh.mjs} +4 -4
- package/dist/{import-Cs7wk058.mjs → import-Bhq15KgP.mjs} +19 -8
- package/dist/{input-DEvkIjGr.mjs → input-D8qW-KtR.mjs} +6 -2
- package/dist/{is-dirty-XqDfqXGi.mjs → is-dirty-CAsVuVx8.mjs} +2 -2
- package/dist/{items-BloAjPwA.mjs → items-BZJomiDE.mjs} +8 -8
- package/dist/{key-PYetuQ13.mjs → key-BynJSK9u.mjs} +1 -1
- package/dist/{library-Dgq_5BFh.mjs → library-B7wDH-Nc.mjs} +5 -5
- package/dist/{library-PGCfm0UA.mjs → library-BOv5SY24.mjs} +1 -1
- package/dist/{library-BPIzb3K_.mjs → library-Ck0EK5bi.mjs} +4 -2
- package/dist/{list-CZCaqPoo.mjs → list-B2uUl26x.mjs} +6 -6
- package/dist/{list-3ErmGdY0.mjs → list-B4luDSYj.mjs} +6 -6
- package/dist/{list-D04uiS3F.mjs → list-B8ND9t2h.mjs} +3 -3
- package/dist/{list-CghNKfYJ.mjs → list-BT5t8ZOl.mjs} +4 -4
- package/dist/{list-VzrtA9lt.mjs → list-BT7xiUQe.mjs} +3 -3
- package/dist/{list-D9d5ocYi.mjs → list-BWFCv_zk.mjs} +5 -5
- package/dist/{list-DboUvg-Y.mjs → list-BtZVe1Nq.mjs} +6 -6
- package/dist/{list-sdCIS2Df.mjs → list-BwdSG-P5.mjs} +5 -5
- package/dist/{list-yV6CyPzn.mjs → list-C-A-2HFq.mjs} +3 -3
- package/dist/list-C9x--9Jq.mjs +101 -0
- package/dist/{list-CUJ1wem9.mjs → list-CCdXig7b.mjs} +4 -4
- package/dist/{list-BfLo1xI8.mjs → list-CJDFoOHb.mjs} +3 -3
- package/dist/{list-Bzm5mXRo.mjs → list-CLFu3mQB.mjs} +3 -3
- package/dist/{list-BZnf3RmA.mjs → list-Cd40Kr0R.mjs} +3 -3
- package/dist/{list-CUXlZiS1.mjs → list-Cj_mTxbY.mjs} +4 -4
- package/dist/{list-f8Csdjyc.mjs → list-CtS50R7m.mjs} +5 -5
- package/dist/{list-vsXIMssK.mjs → list-CvZyTwmV.mjs} +5 -5
- package/dist/list-DcnNlYQA.mjs +35 -0
- package/dist/{list-DuJezLm_.mjs → list-DtgbtE3_.mjs} +3 -3
- package/dist/{login-Vw51Gts5.mjs → login-Bi_nGMJ9.mjs} +6 -6
- package/dist/{logout-BDIqoVhv.mjs → logout-CiHQJWTu.mjs} +2 -2
- package/dist/{measure-LY9Tp9QZ.mjs → measure-D2qq5e8f.mjs} +6 -6
- package/dist/moderation-review-BdqEH6N1.mjs +31 -0
- package/dist/{notification-DVrLkjFT.mjs → notification-DOYdl0ao.mjs} +1 -1
- package/dist/{parameter-values-DWjmO7Ai.mjs → parameter-values-CZow98nb.mjs} +3 -3
- package/dist/{parse-enum-Dc0dMZ3P.mjs → parse-enum-CLIXMsd8.mjs} +1 -1
- package/dist/parse-id-BW09NysN.mjs +13 -0
- package/dist/{parse-ref-DTDld_LJ.mjs → parse-ref-Cw5fa4FI.mjs} +1 -1
- package/dist/parse-text-T0lTXzTZ.mjs +11 -0
- package/dist/{path-BUUAGYO5.mjs → path-K6LPLYPb.mjs} +4 -4
- package/dist/{poll-CZeXepUQ.mjs → poll-Dz4tUm2f.mjs} +2 -2
- package/dist/{preflight-DcULqq8E.mjs → preflight-CX6cqB90.mjs} +3 -3
- package/dist/{process-CTrfxxaC.mjs → process-D0HdqZ3r.mjs} +1 -1
- package/dist/{publish-qVFmJQ1E.mjs → publish-COatW4Un.mjs} +4 -4
- package/dist/{pulse-x0gFxWfG.mjs → pulse-D1uh8UIU.mjs} +1 -1
- package/dist/query-BJXTIDhy.mjs +328 -0
- package/dist/{query-Cq1lmqL5.mjs → query-DmvkyDfo.mjs} +14 -33
- package/dist/remapping-CPAvDKHV.mjs +53 -0
- package/dist/{remove-collection-DBqh2Lqm.mjs → remove-collection-Bg-sNX3U.mjs} +5 -5
- package/dist/{render-Gx1hR7IF.mjs → render-BSfDD6ip.mjs} +2 -2
- package/dist/{replace-CujInVY9.mjs → replace-RCHeZLUT.mjs} +4 -4
- package/dist/{rescan-values-HypqBCSK.mjs → rescan-values-CpDGYZvf.mjs} +5 -5
- package/dist/rescan-values-PeMnpaFY.mjs +32 -0
- package/dist/{run-DEkQSOQa.mjs → run-CaQ7kubO.mjs} +3 -3
- package/dist/{run-b3jyF29q.mjs → run-DkRkZRgf.mjs} +4 -4
- package/dist/{runs-GHqHLGy4.mjs → runs-BDjoVJ0P.mjs} +5 -5
- package/dist/{runtime-nCPku2nN.mjs → runtime-CZ5zh32z.mjs} +21 -82
- package/dist/{schema-tables-B5L05Y1L.mjs → schema-tables-C2qjLcPq.mjs} +6 -6
- package/dist/{schemas-Clx26p_4.mjs → schemas-D8hfNduk.mjs} +4 -4
- package/dist/search-BrQQuNmh.mjs +131 -0
- package/dist/search-CnTXKJgx.mjs +85 -0
- package/dist/{segment-DiRJcbam.mjs → segment-Bi6eqj3e.mjs} +6 -6
- package/dist/{send-DIHkDNBN.mjs → send-CAjgVNlA.mjs} +3 -3
- package/dist/{set-D77qUZML.mjs → set-BXTkYWid.mjs} +4 -4
- package/dist/{set-active-DCdFgD0O.mjs → set-active-CBQVCePU.mjs} +3 -3
- package/dist/set-sensitivity-D39kGTob.mjs +57 -0
- package/dist/{setting-DR9bj232.mjs → setting-CPkvkc4H.mjs} +4 -4
- package/dist/{setup-DGa2LLEp.mjs → setup-Be3xDXHi.mjs} +3 -3
- package/dist/{signal-k7cm5N6h.mjs → signal-CxWeLszu.mjs} +1 -1
- package/dist/{skill-list-DAvGGHzS.mjs → skill-list-CBGq30sI.mjs} +2 -2
- package/dist/{skills-CqtNuSXM.mjs → skills-CJ9eXouJ.mjs} +2 -2
- package/dist/{skills-CCn7cyMP.mjs → skills-DyiLycMY.mjs} +3 -3
- package/dist/snippet-QirK70R_.mjs +19 -0
- package/dist/{stash-BTtsV0AG.mjs → stash-BVN3s5N_.mjs} +6 -6
- package/dist/{status-CW7Dt-nV.mjs → status-BtbMmIWo.mjs} +7 -7
- package/dist/{status-XgSS3StV.mjs → status-CxP6w3aL.mjs} +3 -3
- package/dist/{subscription-CofRU47d.mjs → subscription-Dr-YHARg.mjs} +6 -6
- package/dist/{subscriptions-DCuuPF6U.mjs → subscriptions-8tM8TTeQ.mjs} +6 -6
- package/dist/{summary-uGlgKE3C.mjs → summary-DKx6ptQe.mjs} +5 -5
- package/dist/sync-schema-B8RY0Ra4.mjs +32 -0
- package/dist/{sync-schema-Cu9rD3eH.mjs → sync-schema-kNriXZjG.mjs} +6 -6
- package/dist/sync-task-CXFoqlpF.mjs +53 -0
- package/dist/table-CZnT6d9x.mjs +26 -0
- package/dist/{table-DfuY0N8e.mjs → table-Ci6bhZkb.mjs} +35 -12
- package/dist/table-CxvaDiIZ.mjs +155 -0
- package/dist/table-selector-flags-1bYkAKld.mjs +42 -0
- package/dist/text-DaNkPRwt.mjs +6 -0
- package/dist/timeline-CUzx6uXi.mjs +21 -0
- package/dist/{timeline-event-D-h0A_oh.mjs → timeline-event-DpNm4dkn.mjs} +6 -6
- package/dist/{transform-CtqB1WYo.mjs → transform-CNBIV7No.mjs} +1 -1
- package/dist/transform-g4-HHzDp.mjs +28 -0
- package/dist/transform-job-DqBtnTrG.mjs +22 -0
- package/dist/{transform-tag-BLp_p9J-.mjs → transform-tag-nTb0Ivpj.mjs} +5 -5
- package/dist/{transforms-n2IwEcbU.mjs → transforms-BSsAfwAg.mjs} +5 -5
- package/dist/tree-lMvw1jnZ.mjs +34 -0
- package/dist/{unpublish-DVQCAa3g.mjs → unpublish-CYFDd828.mjs} +3 -3
- package/dist/unreferenced-8Xdq76Kw.mjs +36 -0
- package/dist/{update-oQeQyqKO.mjs → update-6P_GYCLT.mjs} +5 -5
- package/dist/{update-DFdBeJwc.mjs → update-B28EJzrx.mjs} +13 -8
- package/dist/{update-DffrdV4b.mjs → update-BDunZa7G.mjs} +4 -4
- package/dist/{update-DKO9HF1f.mjs → update-BT2yNB_g.mjs} +6 -6
- package/dist/{update-rFRPLlb6.mjs → update-BnMUSFYZ.mjs} +4 -4
- package/dist/update-BwrYeKso.mjs +41 -0
- package/dist/{update-B7CikkI0.mjs → update-C7DEMiu-.mjs} +7 -7
- package/dist/{update-CAsqNhDC.mjs → update-CITzAFG8.mjs} +4 -4
- package/dist/update-CLl8tE20.mjs +181 -0
- package/dist/{update-C05J2nZ2.mjs → update-CM5uuhjB.mjs} +4 -4
- package/dist/{update-ChpOukqq.mjs → update-CQXcsvaa.mjs} +5 -5
- package/dist/{update-D4ggtuG4.mjs → update-Cs2zv_L2.mjs} +7 -7
- package/dist/{update-NGq0yXZk.mjs → update-D--Fw7-_.mjs} +5 -5
- package/dist/{update-D9H6Lh5U.mjs → update-D9p0N8ky.mjs} +4 -4
- package/dist/{update-CKDRuduL.mjs → update-DAzRx0of.mjs} +5 -5
- package/dist/{update-CnkPYL2i.mjs → update-D_DCOOAB.mjs} +6 -6
- package/dist/{update-DScUzKLI.mjs → update-_sYM1GuU.mjs} +7 -7
- package/dist/{update-dashcard-DvPqLJ3N.mjs → update-dashcard-VNnIqHDI.mjs} +6 -6
- package/dist/{upgrade-BRgw0fvn.mjs → upgrade-Tj_reACv.mjs} +4 -4
- package/dist/upload-BKxOpSz3.mjs +13 -0
- package/dist/{upload-Do2PBSeH.mjs → upload-C2fhpKkP.mjs} +2 -2
- package/dist/{upload-BrfbcbBW.mjs → upload-Dg91ldGg.mjs} +3 -3
- package/dist/{uuid-B4eij1d7.mjs → uuid-Blpv_e0S.mjs} +2 -2
- package/dist/{validate-xR_MHBNR.mjs → validate-D7e110oU.mjs} +1 -1
- package/dist/{validate-query-D6_ad-Gi.mjs → validate-query-C7LuKiUT.mjs} +2 -2
- package/dist/{values-xgOftPq5.mjs → values-PonkbYAK.mjs} +5 -5
- package/dist/verify-DixUBbd2.mjs +38 -0
- package/dist/verify-Dv7ER11c.mjs +38 -0
- package/dist/{verify-DTOA_wVM.mjs → verify-Mpb65a5v.mjs} +3 -3
- package/dist/verify-flags-CMpRkMPa.mjs +58 -0
- package/dist/{wait-BjeFgR13.mjs → wait-CaH6XHQV.mjs} +6 -6
- package/dist/{wait-flags-BCeCnaz3.mjs → wait-flags-rUU4NUrv.mjs} +2 -2
- package/dist/{window-DSb1tqSe.mjs → window-CI_QD04s.mjs} +1 -1
- package/package.json +1 -1
- package/skill-data/core/SKILL.md +18 -11
- package/skill-data/dashboard/SKILL.md +1 -1
- package/skill-data/document/SKILL.md +12 -1
- package/skill-data/git-sync/SKILL.md +61 -9
- package/skill-data/mbql/SKILL.md +5 -0
- package/skill-data/metadata/SKILL.md +36 -6
- package/dist/body-Cu94pH4P.mjs +0 -17
- package/dist/card-ByOzVxpI.mjs +0 -24
- package/dist/collection-BGbW7u_Q.mjs +0 -20
- package/dist/dashboard-Bzjz2v6u.mjs +0 -33
- package/dist/database-JtHTqSpq.mjs +0 -26
- package/dist/delete-runtime-BKEzJn22.mjs +0 -49
- package/dist/document-DqJ7Cysa.mjs +0 -19
- package/dist/export-DO2josC0.mjs +0 -63
- package/dist/field-CHZByaXa.mjs +0 -18
- package/dist/field-fDtIrY6D.mjs +0 -80
- package/dist/get-yHIEezeG.mjs +0 -31
- package/dist/git-sync-NhfLSZA6.mjs +0 -28
- package/dist/git-sync-TjX1r_wF.mjs +0 -136
- package/dist/list-DgteFn01.mjs +0 -34
- package/dist/parse-id-whJX4DAb.mjs +0 -10
- package/dist/query-BPtIy79s.mjs +0 -114
- package/dist/query-result-E4Q-Gra6.mjs +0 -15
- package/dist/search-DxiuY5EV.mjs +0 -97
- package/dist/selectors-rEFuyXPZ.mjs +0 -35
- package/dist/snippet-g9JTDxqu.mjs +0 -19
- package/dist/sync-task-BXeWuARG.mjs +0 -37
- package/dist/table-C6h4tIRw.mjs +0 -37
- package/dist/table-Di-EY7pg.mjs +0 -18
- package/dist/timeline-D7EsWZm6.mjs +0 -21
- package/dist/transform-8XK1LIgC.mjs +0 -28
- package/dist/transform-job-CTizQkWy.mjs +0 -22
- package/dist/tree-cqxiDh2b.mjs +0 -26
- package/dist/upload-VXBFKzLT.mjs +0 -13
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { n as windowList } from "./window-
|
|
4
|
-
import { n as DocumentCompact } from "./document-
|
|
5
|
-
import { t as documentView } from "./document-
|
|
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 {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { n as windowList } from "./window-
|
|
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 {
|
|
2
|
-
import { A as
|
|
3
|
-
import {
|
|
4
|
-
import { t as verifyAndProbe } from "./verify-
|
|
5
|
-
import { a as renderUserRole, i as renderUserName, n as renderSkew, o as renderVersionTag } from "./render-
|
|
6
|
-
import { t as openBrowser } from "./process-
|
|
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 {
|
|
2
|
-
import {
|
|
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-
|
|
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-
|
|
15
|
-
get: () => import("./get-
|
|
16
|
-
create: () => import("./create-
|
|
17
|
-
update: () => import("./update-
|
|
18
|
-
archive: () => import("./archive-
|
|
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 {
|
|
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
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
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 = {
|
|
@@ -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 };
|
|
@@ -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 {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { n as windowList } from "./window-
|
|
4
|
-
import { i as loadVisibleSkills, n as findSkillByName, r as loadAllSkills } from "./skills-
|
|
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 {
|
|
2
|
-
import { n as throwIfAborted, t as combineAborts } from "./signal-
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import "./validate-
|
|
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,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { a as CollectionCompact, r as Collection } from "./collection-
|
|
4
|
-
import {
|
|
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) {
|
|
@@ -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 };
|