@metabase/cli 0.3.1 → 0.3.2-alpha.fix-transform-test-ee-path.8ac2a7a
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-CYDUm_XO.mjs → add-collection-B_-eMU_k.mjs} +6 -9
- package/dist/{alert-ClyhtxIz.mjs → alert-Dalin_DD.mjs} +7 -7
- package/dist/{alerts-Dt3D1gcz.mjs → alerts-DpBgrjPI.mjs} +7 -7
- package/dist/{append-Bl_Ensmr.mjs → append-C1JNVALm.mjs} +5 -5
- package/dist/{archive-BOyKhNOz.mjs → archive-52ZHbFDm2.mjs} +6 -6
- package/dist/{archive-DiGxCojL.mjs → archive-B51prFgS.mjs} +4 -4
- package/dist/{archive-CWceyy8x.mjs → archive-BkITQyWW.mjs} +5 -5
- package/dist/{archive-BJZ7Dace.mjs → archive-CISXgZAI.mjs} +6 -6
- package/dist/{archive-D3a3Wgz0.mjs → archive-CdKf_Eqq.mjs} +4 -4
- package/dist/{archive-DVGDg8mP.mjs → archive-CicPYX27.mjs} +6 -6
- package/dist/{archive-CNblz55j.mjs → archive-CwITzj_j.mjs} +6 -6
- package/dist/{archive-DSMqHRr1.mjs → archive-DA3OiLEE.mjs} +4 -4
- package/dist/{archive-nKD3mOB8.mjs → archive-DVHxeDKS.mjs} +6 -6
- package/dist/{archive-BdHXQg4I.mjs → archive-DckxlWBt.mjs} +4 -4
- package/dist/{archive-DDru3vdy.mjs → archive-cAdUa1-2.mjs} +4 -4
- package/dist/{auth-aCksg8q2.mjs → auth-A96JOCQx.mjs} +5 -5
- package/dist/{body-DxRSAMNC.mjs → body-CshgcV6U.mjs} +3 -3
- package/dist/{branches-_0VWR2Zm.mjs → branches-CbcwWYL9.mjs} +4 -7
- package/dist/{cancel-ctpVE8uC.mjs → cancel-DpDcVY7M.mjs} +4 -4
- package/dist/{cancel-task-FtxBka-M.mjs → cancel-task-B4RDvIYb.mjs} +5 -8
- package/dist/{card-zyUkr2nS.mjs → card-CEkp1mcI.mjs} +1 -1
- package/dist/card-CefVYtF7.mjs +24 -0
- package/dist/{card-DZxRmver.mjs → card-voh1k4hl.mjs} +14 -11
- package/dist/{cards-DHOWAvfv.mjs → cards-BC0JX8Yg.mjs} +7 -7
- package/dist/cli.mjs +582 -69
- package/dist/client-ClL6gf7G.mjs +3783 -0
- package/dist/collection-Be5AHVWP.mjs +20 -0
- package/dist/{collection-CfulNRBG.mjs → collection-BxdPxD38.mjs} +1 -1
- package/dist/{collection-CGoVLvcD.mjs → collection-DYM0p3Xl.mjs} +1 -1
- package/dist/{collection-namespace-CEoQ7G08.mjs → collection-namespace-Dv0l-V9K.mjs} +2 -2
- package/dist/{content-translation-DNKerjS3.mjs → content-translation-BXIXL4eW.mjs} +3 -3
- package/dist/{create-DmvoibX8.mjs → create--fiwuTWc.mjs} +4 -4
- package/dist/{create-CLG2-bso.mjs → create-B9qXQ_wV.mjs} +6 -6
- package/dist/{create-CEydRMWS.mjs → create-BVNhtAgF.mjs} +7 -7
- package/dist/{create-C9vy4ZG6.mjs → create-BbjSOTN-.mjs} +5 -5
- package/dist/{create-BdPVWYSi.mjs → create-BcsVwXgS2.mjs} +6 -6
- package/dist/{create-CcLchJAN.mjs → create-Bryrkb9g.mjs} +7 -7
- package/dist/{create-7ddYK4TA.mjs → create-CHr8MPPq.mjs} +6 -6
- package/dist/{create-DaYRnK5P.mjs → create-D--Z1S3p2.mjs} +8 -8
- package/dist/{create-F4Lf09xq.mjs → create-DWFJdyIr.mjs} +4 -4
- package/dist/{create-vlrlY-2E.mjs → create-Dhai9zAt.mjs} +4 -4
- package/dist/create-DiJ8bUb-.mjs +34 -0
- package/dist/{create-C78g8Crb.mjs → create-DmN2gFc4.mjs} +5 -5
- package/dist/{create-wJR4CxHA.mjs → create-NCKHHdov.mjs} +5 -8
- package/dist/{create-C3IaXXty.mjs → create-YetX69Re.mjs} +4 -4
- package/dist/{create-e650zxzX.mjs → create-Za1EskpV.mjs} +5 -5
- package/dist/{create-branch-B8C7jl-J.mjs → create-branch-CseVn3lp.mjs} +5 -9
- package/dist/{create-DIVhBIyE.mjs → create-kZIIEN2Y.mjs} +11 -7
- package/dist/{csv-BLPJtlSC.mjs → csv-DNzesu8y.mjs} +5 -5
- package/dist/{current-task-C-ldJbWE.mjs → current-task-DRTKZcP9.mjs} +5 -8
- package/dist/{dashboard-CtO_3EfC.mjs → dashboard-CMw13KXM.mjs} +10 -10
- package/dist/{dashboard-CKUR8ZpQ.mjs → dashboard-D0hwTC-f.mjs} +11 -2
- package/dist/{dashboard-BlbNszi8.mjs → dashboard-DgK81azj.mjs} +1 -1
- package/dist/{database-B19qlLKZ.mjs → database-C3E9PZSx.mjs} +1 -1
- package/dist/{database-C8G6ZKG0.mjs → database-JtHTqSpq.mjs} +1 -1
- package/dist/{db-xXselnBq.mjs → db-BDijt81U.mjs} +7 -7
- package/dist/{delete-BZZHw6pm.mjs → delete--15it-A8.mjs} +5 -5
- package/dist/delete-Bsdwqh7H.mjs +44 -0
- package/dist/{delete-ZJJyqsRh.mjs → delete-BudvZkvK.mjs} +5 -5
- package/dist/{delete-BwSPQy7m.mjs → delete-BxjJ66BS.mjs} +5 -5
- package/dist/{delete-BZwAOQxG.mjs → delete-Dc8E5YwZ.mjs} +5 -5
- package/dist/{delete-runtime-D74s6vhu.mjs → delete-runtime-BKEzJn22.mjs} +1 -2
- package/dist/{delete-table-CJktZE3w.mjs → delete-table-5AQpn8OB.mjs} +5 -5
- package/dist/{delete-D6WxgWRp.mjs → delete-wFsy80db.mjs} +5 -5
- package/dist/{dependencies-BdqIqEIy.mjs → dependencies-C1ogC3BV.mjs} +7 -7
- package/dist/{dirty-BW2As2wS.mjs → dirty-CSLDYO-K.mjs} +6 -9
- package/dist/document-BGzVip5_.mjs +19 -0
- package/dist/{document-Cd2mmqCp.mjs → document-BHpLJbKU.mjs} +5 -0
- package/dist/{document-D6OybtP2.mjs → document-CA0Q6lqu.mjs} +1 -1
- package/dist/{download-mfFJ9oRS.mjs → download-Ddap1OAo.mjs} +3 -6
- package/dist/{eid-DZ-4t2xe.mjs → eid-HnrWhPoe.mjs} +4 -5
- package/dist/{events-D6yFmXP1.mjs → events-CXqetjcS.mjs} +5 -5
- package/dist/{export-DYZjz1WP.mjs → export-IFZdgYZ2.mjs} +7 -10
- package/dist/{field-BJ54wmIX.mjs → field-BJ6HoLRd.mjs} +5 -5
- package/dist/{field-Cr2DPUG9.mjs → field-CcN4oZy6.mjs} +16 -1
- package/dist/{field-BPsNa-TO.mjs → field-fDtIrY6D.mjs} +1 -1
- package/dist/{fields-FUWCgPOa.mjs → fields-DxHxuxwO.mjs} +7 -7
- package/dist/{get-ByZJf9nO.mjs → get-B2pj2q3X.mjs} +5 -5
- package/dist/{get-C_5AbfpO.mjs → get-BF2vdF3W.mjs} +4 -4
- package/dist/{get-DAOSGt5Z.mjs → get-BGLvyOO3.mjs} +6 -6
- package/dist/{get-DMECsioX.mjs → get-BcoJ9Aha.mjs} +4 -4
- package/dist/{get-CsN7NBI0.mjs → get-BiPclcIP.mjs} +4 -4
- package/dist/{get-DCutQeiV.mjs → get-C3cuZNeW.mjs} +4 -4
- package/dist/{get-CQ0-fFWP.mjs → get-CDnmpfHQ.mjs} +5 -8
- package/dist/{get-DRJtsS1_.mjs → get-CE9_4Q7E.mjs} +4 -4
- package/dist/{get-C5q49Dgx.mjs → get-C_tdSMwW2.mjs} +6 -6
- package/dist/{get-CWnriw33.mjs → get-CxUQyhte.mjs} +6 -6
- package/dist/{get-DVyesErX.mjs → get-DW7mCaGe.mjs} +6 -6
- package/dist/{get-DYaQpixt.mjs → get-D_x-ENFe.mjs} +6 -6
- package/dist/{get-Ba2HRdrx.mjs → get-DjlQhgD4.mjs} +6 -6
- package/dist/{get-DhkltKIV.mjs → get-DmKtPNOy.mjs} +4 -4
- package/dist/{get-BWl3vzsf.mjs → get-Dtre5jzh.mjs} +6 -6
- package/dist/get-H6kInHIx.mjs +93 -0
- package/dist/{get-BraVQ1FJ.mjs → get-b0CoPz5B.mjs} +6 -6
- package/dist/{get-LAew34ID.mjs → get-eJilYnHk.mjs} +6 -6
- package/dist/get-i0KInCw9.mjs +32 -0
- package/dist/{get-_ggLr1tY.mjs → get-jofVjU6e.mjs} +6 -6
- package/dist/{get-run-oH4dRCBx.mjs → get-run-BE1HtJDW.mjs} +6 -6
- package/dist/{git-sync-BDnxPrqU.mjs → git-sync-BwBRmEhE.mjs} +18 -1
- package/dist/{git-sync-DxD_ng48.mjs → git-sync-TjX1r_wF.mjs} +1 -1
- package/dist/git-sync-xKC1sqC4.mjs +28 -0
- package/dist/{group-DBM87IgC.mjs → group-YQQ5GIcP.mjs} +2 -2
- package/dist/{has-remote-changes-CnmyIw_7.mjs → has-remote-changes-Cj1KhBOT.mjs} +5 -8
- package/dist/{import-B7Si-bSI.mjs → import-DLb9VN4l.mjs} +7 -10
- package/dist/{input-DH9i67x_.mjs → input-D5tQEfqN.mjs} +1 -1
- package/dist/{is-dirty-BOH_VEA8.mjs → is-dirty-BxtgV2xF.mjs} +3 -6
- package/dist/{items-DouHkWev.mjs → items-DLUYc5-z.mjs} +7 -7
- package/dist/{key-BEhqIzIQ.mjs → key-PYetuQ13.mjs} +1 -1
- package/dist/{library-1J_4Dicw.mjs → library-BNSxXOpc.mjs} +5 -5
- package/dist/library-BPIzb3K_.mjs +81 -0
- package/dist/{library-DfYAT2Ep.mjs → library-PGCfm0UA.mjs} +1 -1
- package/dist/{list-D25ofn4v.mjs → list-B1soS8QW.mjs} +7 -7
- package/dist/{list-Cy0w4Fap.mjs → list-BQnOEB3W.mjs} +4 -4
- package/dist/{list-BeMYIeiI.mjs → list-BUz6KOfw.mjs} +7 -7
- package/dist/{list-C1bAtgO1.mjs → list-BcP1DTJH.mjs} +4 -4
- package/dist/{list-DJK9_BEF.mjs → list-C5mS_ehX.mjs} +14 -13
- package/dist/{list-qs9wAtC3.mjs → list-CBLxhaNZ.mjs} +4 -4
- package/dist/{list-aKUk-a1Y.mjs → list-CERbeLbQ.mjs} +7 -7
- package/dist/{list-B2Ddf4W0.mjs → list-COLpwXW4.mjs} +5 -5
- package/dist/{list-sDpy4nDU.mjs → list-CQbiSx26.mjs} +6 -6
- package/dist/{list-C0zJ2ehz.mjs → list-CX9qZ-bx.mjs} +6 -6
- package/dist/{list-DhViDVx_.mjs → list-CehE6KBV.mjs} +6 -6
- package/dist/list-Cuhf2lKL.mjs +35 -0
- package/dist/{list-D2IYZ6lk.mjs → list-CzRzCbCY.mjs} +6 -6
- package/dist/{list-DWLGpMvr.mjs → list-D-SyhKFw.mjs} +7 -7
- package/dist/{list-DptEWB5Y.mjs → list-Dat8QNcf.mjs} +4 -4
- package/dist/{list-C7UvO3Uw.mjs → list-M8J10Ozk.mjs} +6 -6
- package/dist/{list-BXlTYsYA.mjs → list-Sd7jGZoX.mjs} +4 -4
- package/dist/list-cIMww2Me.mjs +60 -0
- package/dist/{list-BK_6VNm_.mjs → list-jhQSgh6i.mjs} +4 -4
- package/dist/{login-BmyCAfRV.mjs → login-BfLqBfCd.mjs} +18 -15
- package/dist/{logout-DUR32q0V.mjs → logout-BpRXB3Ze.mjs} +3 -4
- package/dist/{measure-DdVp-8jw.mjs → measure-Ds8O5Evr.mjs} +6 -6
- package/dist/{notification-Fcq1fIPw.mjs → notification-DVrLkjFT.mjs} +1 -1
- package/dist/{parameter-DUKR8NXo.mjs → parameter-Celg0wZa.mjs} +1 -1
- package/dist/{parameter-values-CBR-cBev.mjs → parameter-values-DhrkLXoN.mjs} +5 -6
- package/dist/{parse-enum-D0Jfm_Bz.mjs → parse-enum-Dc0dMZ3P.mjs} +1 -1
- package/dist/{parse-id-B3YwNojT.mjs → parse-id-DtM6q9HU.mjs} +1 -1
- package/dist/{parse-ref-ibKVB0J4.mjs → parse-ref-DTDld_LJ.mjs} +1 -1
- package/dist/{path-D8BQmEhL.mjs → path-_GHFrTLx.mjs} +5 -5
- package/dist/{poll-75SvT7Zv.mjs → poll-KLl4Eq8Y.mjs} +2 -2
- package/dist/{preflight-CoF1Em99.mjs → preflight-BpYtF0IU.mjs} +3 -4
- package/dist/{process-DBOOrmET.mjs → process-CLtOWKBn.mjs} +1 -1
- package/dist/{publish-Cb7XrQ3X.mjs → publish-D-7Zlmuk.mjs} +9 -9
- package/dist/{pulse-BmsDenXm.mjs → pulse-Dz0ocv0l.mjs} +1 -1
- package/dist/{pulse-DhG6I9mI.mjs → pulse-x0gFxWfG.mjs} +2 -2
- package/dist/{query-D35B588l.mjs → query-B1CZztxs.mjs} +10 -12
- package/dist/query-CxESKMve.mjs +114 -0
- package/dist/{query-result-DBDwk8TS.mjs → query-result-E4Q-Gra6.mjs} +1 -1
- package/dist/{remove-collection-DJem6V26.mjs → remove-collection-C4saCFxz.mjs} +6 -9
- package/dist/{render-CI93iP0I.mjs → render-6O_eF-P1.mjs} +13 -2
- package/dist/{replace-CtsWICrD.mjs → replace-BuR4f2Ai.mjs} +5 -5
- package/dist/{rescan-values-CaXUL6z5.mjs → rescan-values-CNOiiWQ5.mjs} +6 -6
- package/dist/{run-CM-Amtbf.mjs → run-DijA_BXt.mjs} +26 -14
- package/dist/run-FmRruANb.mjs +64 -0
- package/dist/{run-BeLm17F4.mjs → run-QEUbWNm7.mjs} +9 -9
- package/dist/{runs-DFG63zgr.mjs → runs-BSlhVeDO.mjs} +7 -7
- package/dist/{runtime-z8rra6-I.mjs → runtime-Dtb93zKy.mjs} +994 -252
- package/dist/{schema-tables-COAHkIcy.mjs → schema-tables-BE3rEb6I.mjs} +7 -7
- package/dist/{schemas-BX5BATiV.mjs → schemas-yDjBiwlH.mjs} +5 -5
- package/dist/{search-DFBwUc6d.mjs → search-BAXg-EJw.mjs} +2 -1
- package/dist/{search-CPvvmhdt.mjs → search-CR_xNArA.mjs} +6 -6
- package/dist/{segment-C62L6BI3.mjs → segment-Cm6zQjJW.mjs} +6 -6
- package/dist/{selectors-P4QnrORk.mjs → selectors-C-vgMcGK.mjs} +3 -3
- package/dist/{send-PZh5IKF8.mjs → send-kC8oerkT.mjs} +4 -4
- package/dist/{set-active-DL4QzWDO.mjs → set-active-lDKhAlij.mjs} +5 -5
- package/dist/{set-DbCtUoFd.mjs → set-tFhPkxrL.mjs} +5 -5
- package/dist/{setting-BlRcZbhC.mjs → setting-DrJXCaFE.mjs} +4 -4
- package/dist/{setup-D_SLaC-3.mjs → setup-BWY9M0iR.mjs} +4 -4
- package/dist/{signal-CMd0EFUa.mjs → signal-Csom0mt5.mjs} +11 -2
- package/dist/skill-list-CCes8pKe.mjs +76 -0
- package/dist/skills-DE9ej5Rg.mjs +351 -0
- package/dist/{skills-D991LB1M.mjs → skills-DPRN2384.mjs} +3 -3
- package/dist/snippet-DWHTSo9c.mjs +19 -0
- package/dist/{stash-DyBxFoP6.mjs → stash-C9oDvQ9P.mjs} +7 -11
- package/dist/{status-DUsiogz5.mjs → status-CkpujA26.mjs} +11 -9
- package/dist/{status-cfDHqK2Q.mjs → status-DSdXmNC3.mjs} +12 -11
- package/dist/{subscription-Bn0AU7GN.mjs → subscription-DKOKoHRG.mjs} +6 -6
- package/dist/{subscriptions-DwqjCVlc.mjs → subscriptions-C5SyJL4B.mjs} +7 -7
- package/dist/{summary-BGwSNzf4.mjs → summary-DTPgXsc0.mjs} +6 -6
- package/dist/{sync-schema-dtkDOAKe.mjs → sync-schema-DKKkNSR7.mjs} +7 -7
- package/dist/{sync-task-BACcrs0i.mjs → sync-task-BtDnTXCP.mjs} +3 -2
- package/dist/{table-CsIJNPFf.mjs → table-C6h4tIRw.mjs} +1 -1
- package/dist/{table-CeeTJgQb.mjs → table-DfuY0N8e.mjs} +51 -4
- package/dist/{table-BJoEAoCU.mjs → table-I8NXSdUC.mjs} +5 -5
- package/dist/timeline-B_ESH-6W.mjs +21 -0
- package/dist/{timeline-event-BsF7YqzZ.mjs → timeline-event-n4Lzet7l.mjs} +6 -6
- package/dist/transform-BNuNiH9d.mjs +28 -0
- package/dist/{transform-DoTyyXAu.mjs → transform-CtqB1WYo.mjs} +2 -2
- package/dist/{transform-D3QX0jxA.mjs → transform-DiW7bREn.mjs} +68 -5
- package/dist/{transform-job-50GZHhKH.mjs → transform-job-AaMZRxAq.mjs} +1 -1
- package/dist/transform-job-B7yc6dfH.mjs +22 -0
- package/dist/{transform-job-DRrK28IH.mjs → transform-job-CCguL6LP.mjs} +41 -4
- package/dist/{transform-tag-VM9R7Q_M.mjs → transform-tag-D6NXqWaX.mjs} +5 -5
- package/dist/transform-test-BjjCQ2xm.mjs +169 -0
- package/dist/transform-test-C1Oqtfb-.mjs +16 -0
- package/dist/transform-test-gzDcbypy.mjs +25 -0
- package/dist/{transforms-BjACGbBp.mjs → transforms-O4NtXqFz.mjs} +7 -7
- package/dist/transport-CyVo29u7.mjs +313 -0
- package/dist/{tree-BwS6JAmk.mjs → tree-CuyF116R.mjs} +4 -5
- package/dist/{unpublish-DWdPnENY.mjs → unpublish-DvWefKJi.mjs} +4 -7
- package/dist/{update-DkviXwSg.mjs → update-2KIpYgyj.mjs} +7 -7
- package/dist/{update-DKEHY-gt.mjs → update-76nzOc71.mjs} +7 -7
- package/dist/{update-B2CF2DK4.mjs → update-7oKvP1HC.mjs} +6 -6
- package/dist/{update-DTmRHBik.mjs → update-AJ2JmwDl.mjs} +7 -7
- package/dist/{update-BR_vkkd1.mjs → update-BB6Go_RX.mjs} +5 -5
- package/dist/{update-DCjAjihm.mjs → update-Bah7N8QX.mjs} +6 -6
- package/dist/{update-cqR1U6DU.mjs → update-CGJvIS-l.mjs} +5 -5
- package/dist/{update-tLIhVIPp.mjs → update-D7dG7H-z.mjs} +8 -8
- package/dist/{update-C1FBVLfC.mjs → update-DOdcflLH.mjs} +8 -8
- package/dist/{update-DlTaD1x3.mjs → update-DV54H3L5.mjs} +9 -9
- package/dist/{update-C4y3iQsv.mjs → update-DXmZuJho.mjs} +7 -7
- package/dist/{update-3idz42uD.mjs → update-DmgRIp7o.mjs} +7 -7
- package/dist/{update-DsZttiSC.mjs → update-H_fdjugs.mjs} +5 -5
- package/dist/{update-BCT9qpVr.mjs → update-To6A1Ugu.mjs} +5 -5
- package/dist/{update-dashcard-DlE_bb2F.mjs → update-dashcard-DjT5QOkL.mjs} +7 -7
- package/dist/update-l3PyNQKG.mjs +41 -0
- package/dist/{update-BpPaacCF.mjs → update-xEegxIyH.mjs} +6 -6
- package/dist/{upgrade-mNV7XuJG.mjs → upgrade-CuJx9fX4.mjs} +6 -8
- package/dist/upload-2YFFBSln.mjs +13 -0
- package/dist/{upload-CEGVxmYB.mjs → upload-CboARPZm.mjs} +4 -7
- package/dist/{upload-CD555ui1.mjs → upload-DOO94rCQ.mjs} +2 -2
- package/dist/{uuid-C4hqn3kA.mjs → uuid-InwZlrpQ.mjs} +10 -7
- package/dist/{validate-BWchyW0V.mjs → validate-D6-Vg_kn.mjs} +69 -23
- package/dist/{validate-query-DaGYSmpQ.mjs → validate-query-B90KYPQr.mjs} +3 -4
- package/dist/{values-C0O3eNaW.mjs → values-CsZLk1Ls.mjs} +6 -6
- package/dist/{verify-DfTjYF7s.mjs → verify-DrGjZwBM.mjs} +3 -18
- package/dist/{wait-WZmFenN_.mjs → wait-BmzdarP9.mjs} +7 -10
- package/dist/{wait-flags-BbfDSP8R.mjs → wait-flags-CiJGrTCT.mjs} +2 -2
- package/dist/{window-BkvrP0gB.mjs → window-DSb1tqSe.mjs} +1 -1
- package/package.json +1 -1
- package/skill-data/core/SKILL.md +31 -15
- package/skill-data/dashboard/SKILL.md +1 -1
- package/skill-data/data-workflow/references/building-clean-tables.md +6 -2
- package/skill-data/data-workflow/references/reusable-definitions.md +11 -3
- package/skill-data/document/SKILL.md +4 -1
- package/skill-data/git-sync/SKILL.md +5 -0
- package/skill-data/mbql/SKILL.md +84 -115
- package/skill-data/mbql/references/operators.md +77 -231
- package/skill-data/metadata/SKILL.md +1 -1
- package/skill-data/metadata/references/semantic-types.md +7 -1
- package/skill-data/native-sql/SKILL.md +8 -9
- package/skill-data/native-sql/references/template-tags.md +27 -27
- package/skill-data/notification/SKILL.md +7 -1
- package/skill-data/transform/SKILL.md +76 -4
- package/skill-data/transform-test-plan/SKILL.md +171 -0
- package/skill-data/transform-test-plan/references/checklist.md +81 -0
- package/skill-data/transform-test-plan/references/checks.md +263 -0
- package/skill-data/visualization/SKILL.md +13 -6
- package/skill-data/visualization/references/settings.md +13 -11
- package/skills/metabase-cli/SKILL.md +1 -1
- package/dist/card-CGCXbdmD.mjs +0 -24
- package/dist/client-mKuHg_sc.mjs +0 -2218
- package/dist/collection-D8Tk8i3a.mjs +0 -20
- package/dist/document-KbcHhzFz.mjs +0 -19
- package/dist/get-BC8J8BXB.mjs +0 -80
- package/dist/git-sync-Dik8nKfw.mjs +0 -28
- package/dist/library-ClLgrAXy.mjs +0 -19
- package/dist/list-CW5PdYCX.mjs +0 -98
- package/dist/network-error-D6CiOEBw.mjs +0 -431
- package/dist/predicates-Bkm2IoeX.mjs +0 -170
- package/dist/query-C256WBYG.mjs +0 -87
- package/dist/skills-DTCrMcix.mjs +0 -216
- package/dist/snippet-DTDO55Cg.mjs +0 -19
- package/dist/timeline-DcXPshcT.mjs +0 -21
- package/dist/transform-Dsf_wHAj.mjs +0 -28
- package/dist/transform-job-B1yLv5l-.mjs +0 -22
- package/dist/upload-DsYCf5kB.mjs +0 -13
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { n as windowList } from "./window-
|
|
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-Dtb93zKy.mjs";
|
|
3
|
+
import { n as windowList } from "./window-DSb1tqSe.mjs";
|
|
4
4
|
import { n as TimelineCompact } from "./timeline-CCSU2qOS.mjs";
|
|
5
5
|
import { n as timelineView } from "./timeline-uDCmwGFT.mjs";
|
|
6
6
|
//#region src/commands/timeline/list.ts
|
|
@@ -10,7 +10,7 @@ var list_default = defineMetabaseCommand({
|
|
|
10
10
|
name: "list",
|
|
11
11
|
description: "List timelines"
|
|
12
12
|
},
|
|
13
|
-
|
|
13
|
+
requires: ["timeline.list"],
|
|
14
14
|
args: {
|
|
15
15
|
...outputFlags,
|
|
16
16
|
...listFlags,
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { t as verifyAndProbe } from "./verify-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { a as renderVersionTag, i as renderUserRole, r as renderUserName } from "./render-CI93iP0I.mjs";
|
|
8
|
-
import { t as openBrowser } from "./process-DBOOrmET.mjs";
|
|
1
|
+
import { C as promptSelect, E as warn, H as outputFlags, Q as ConfigError, S as promptPassword, U as profileFlag, it as TimeoutError, nt as NetworkError, p as renderSummary, st as errorMessage, t as interruptSignal, 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-Dtb93zKy.mjs";
|
|
3
|
+
import { r as readInput } from "./input-D5tQEfqN.mjs";
|
|
4
|
+
import { t as verifyAndProbe } from "./verify-DrGjZwBM.mjs";
|
|
5
|
+
import { a as renderUserRole, i as renderUserName, n as renderSkew, o as renderVersionTag } from "./render-6O_eF-P1.mjs";
|
|
6
|
+
import { t as openBrowser } from "./process-CLtOWKBn.mjs";
|
|
9
7
|
import { z } from "zod";
|
|
10
8
|
import { createServer } from "node:http";
|
|
11
9
|
import { createHash, randomBytes } from "node:crypto";
|
|
@@ -149,7 +147,7 @@ async function resolveClientId(input, registrationEndpoint, redirectUri) {
|
|
|
149
147
|
})).client_id;
|
|
150
148
|
}
|
|
151
149
|
async function oauthLogin(input, deps) {
|
|
152
|
-
const metadata = input.metadata ?? await
|
|
150
|
+
const metadata = input.metadata ?? await discoverLoginMetadata(input.baseUrl, input.userAgent);
|
|
153
151
|
const pkce = generatePkce();
|
|
154
152
|
const state = randomState();
|
|
155
153
|
const server = await startCallbackServer(state, input.timeoutMs);
|
|
@@ -188,7 +186,7 @@ const LoginResult = z.object({
|
|
|
188
186
|
url: z.string(),
|
|
189
187
|
authenticated: z.boolean(),
|
|
190
188
|
user: ProbedUser.nullable(),
|
|
191
|
-
|
|
189
|
+
...ServerSummary.shape
|
|
192
190
|
});
|
|
193
191
|
const VERIFY_STEP_LABEL = Object.freeze({
|
|
194
192
|
user: "current user",
|
|
@@ -224,6 +222,11 @@ const loginView = {
|
|
|
224
222
|
key: "version",
|
|
225
223
|
label: "Version",
|
|
226
224
|
format: (value) => renderVersionTag(value)
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
key: "skew",
|
|
228
|
+
label: "Skew",
|
|
229
|
+
format: (value) => renderSkew(value)
|
|
227
230
|
}
|
|
228
231
|
]
|
|
229
232
|
};
|
|
@@ -233,7 +236,7 @@ var login_default = defineMetabaseCommand({
|
|
|
233
236
|
description: "Log in to a Metabase instance for a profile"
|
|
234
237
|
},
|
|
235
238
|
details: "Interactive login offers browser OAuth (recommended; Metabase v63+) or an API key — older servers fall back to the API key prompt automatically. Browser login opens Metabase, you sign in (password or SSO) and approve, and the CLI stores a refreshing access token. For CI/non-interactive use, supply an API key via --api-key, piped stdin, or $MB_API_KEY (first non-empty wins); any of these skips the browser flow, even on a TTY. The URL comes from --url or $MB_URL, prompted when stdin is a TTY.",
|
|
236
|
-
|
|
239
|
+
requires: ["user.current"],
|
|
237
240
|
args: {
|
|
238
241
|
...outputFlags,
|
|
239
242
|
...profileFlag,
|
|
@@ -302,8 +305,8 @@ async function probeOAuthSupport(url) {
|
|
|
302
305
|
try {
|
|
303
306
|
return await tryDiscoverMetadata(url, USER_AGENT);
|
|
304
307
|
} catch (error) {
|
|
305
|
-
if (error instanceof
|
|
306
|
-
throw
|
|
308
|
+
if (error instanceof NetworkError || error instanceof TimeoutError) throw new ConfigError(`could not reach ${url}: ${errorMessage(error)}`);
|
|
309
|
+
throw error;
|
|
307
310
|
}
|
|
308
311
|
}
|
|
309
312
|
async function chooseLoginMethod(metadata, clientId) {
|
|
@@ -344,7 +347,7 @@ async function completeLogin(profileName, url, credential, skipVerify, ctx, pers
|
|
|
344
347
|
url,
|
|
345
348
|
authenticated: false,
|
|
346
349
|
user: null,
|
|
347
|
-
|
|
350
|
+
...summarizeServer(null)
|
|
348
351
|
}, loginView, `Saved credentials for profile "${profileName}" (${url}) without verifying.`, ctx);
|
|
349
352
|
return;
|
|
350
353
|
}
|
|
@@ -371,7 +374,7 @@ async function completeLogin(profileName, url, credential, skipVerify, ctx, pers
|
|
|
371
374
|
url,
|
|
372
375
|
authenticated: true,
|
|
373
376
|
user: result.user,
|
|
374
|
-
|
|
377
|
+
...summarizeServer(result.server)
|
|
375
378
|
}, loginView, `Logged in to ${url} as ${who} (${role}). Saved to profile "${profileName}".${serverClause}`, ctx);
|
|
376
379
|
}
|
|
377
380
|
async function revokeUnsavedOAuthCredential(url, credential) {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { C as readProfileCredential, c as resolveProfileName, d as revokeOAuthCredential, t as defineMetabaseCommand, u as USER_AGENT, v as clearProfile, y as consumeKeychainResidualWarning } from "./runtime-z8rra6-I.mjs";
|
|
1
|
+
import { E as warn, H as outputFlags, U as profileFlag, p as renderSummary, st as errorMessage, 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-Dtb93zKy.mjs";
|
|
4
3
|
import { z } from "zod";
|
|
5
4
|
//#region src/commands/auth/logout.ts
|
|
6
5
|
const LogoutResult = z.object({
|
|
@@ -30,7 +29,7 @@ var logout_default = defineMetabaseCommand({
|
|
|
30
29
|
name: "logout",
|
|
31
30
|
description: "Clear stored credentials for a profile"
|
|
32
31
|
},
|
|
33
|
-
|
|
32
|
+
requires: [],
|
|
34
33
|
args: {
|
|
35
34
|
...outputFlags,
|
|
36
35
|
...profileFlag,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as defineCommandGroup } from "./group-
|
|
1
|
+
import { t as defineCommandGroup } from "./group-YQQ5GIcP.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-BQnOEB3W.mjs").then((mod) => mod.default),
|
|
15
|
+
get: () => import("./get-DmKtPNOy.mjs").then((mod) => mod.default),
|
|
16
|
+
create: () => import("./create-BbjSOTN-.mjs").then((mod) => mod.default),
|
|
17
|
+
update: () => import("./update-7oKvP1HC.mjs").then((mod) => mod.default),
|
|
18
|
+
archive: () => import("./archive-DA3OiLEE.mjs").then((mod) => mod.default)
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
21
|
//#endregion
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { g 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
|
|
@@ -106,4 +106,4 @@ const ParameterValuesCompact = ParameterValues.pick({
|
|
|
106
106
|
has_more_values: true
|
|
107
107
|
}).strip();
|
|
108
108
|
//#endregion
|
|
109
|
-
export { ParameterValuesCompact as i, ParameterMapping as n, ParameterValues as r, Parameter as t };
|
|
109
|
+
export { TemporalUnit as a, ParameterValuesCompact as i, ParameterMapping as n, ParameterValues as r, Parameter as t };
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
4
|
-
import {
|
|
5
|
-
import { i as ParameterValuesCompact, r as ParameterValues } from "./parameter-DUKR8NXo.mjs";
|
|
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-Dtb93zKy.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-DtM6q9HU.mjs";
|
|
4
|
+
import { i as ParameterValuesCompact, r as ParameterValues } from "./parameter-Celg0wZa.mjs";
|
|
6
5
|
//#region src/output/views/parameter.ts
|
|
7
6
|
const parameterValuesView = {
|
|
8
7
|
compactPick: ParameterValuesCompact,
|
|
@@ -23,7 +22,7 @@ var parameter_values_default = defineMetabaseCommand({
|
|
|
23
22
|
skill: "dashboard",
|
|
24
23
|
purpose: "dashboard parameters, mapping, value sources"
|
|
25
24
|
}],
|
|
26
|
-
|
|
25
|
+
requires: ["dashboard.parameterValues", "dashboard.searchParameterValues"],
|
|
27
26
|
args: {
|
|
28
27
|
...outputFlags,
|
|
29
28
|
...profileFlag,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Q 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*$/;
|
|
@@ -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 { B as listFlags, G as listEnvelopeSchema, H as outputFlags, d as renderList } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Dtb93zKy.mjs";
|
|
3
|
+
import { n as windowList } from "./window-DSb1tqSe.mjs";
|
|
4
|
+
import { i as loadVisibleSkills, n as findSkillByName, r as loadAllSkills } from "./skills-DE9ej5Rg.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
//#region src/commands/skills/path.ts
|
|
7
7
|
const SkillPath = z.object({
|
|
@@ -24,7 +24,7 @@ var path_default = defineMetabaseCommand({
|
|
|
24
24
|
name: "path",
|
|
25
25
|
description: "Print the absolute path to a skill (or all skills). Useful when an agent needs to read the SKILL.md or its references with the Read tool directly."
|
|
26
26
|
},
|
|
27
|
-
|
|
27
|
+
requires: null,
|
|
28
28
|
args: {
|
|
29
29
|
...outputFlags,
|
|
30
30
|
...listFlags,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as throwIfAborted, t as combineAborts } from "./signal-
|
|
1
|
+
import { it as TimeoutError } from "./cli.mjs";
|
|
2
|
+
import { n as throwIfAborted, t as combineAborts } from "./signal-Csom0mt5.mjs";
|
|
3
3
|
import { setTimeout } from "node:timers/promises";
|
|
4
4
|
//#region ../client/src/poll.ts
|
|
5
5
|
const DEFAULT_INTERVAL_MS = 2e3;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import "./validate-BWchyW0V.mjs";
|
|
1
|
+
import { Q as ConfigError, m as writeJson, tt as MetabaseError } from "./cli.mjs";
|
|
2
|
+
import { R as chainRequestFailure } from "./runtime-Dtb93zKy.mjs";
|
|
3
|
+
import "./validate-D6-Vg_kn.mjs";
|
|
5
4
|
//#region src/commands/dashboard/preflight.ts
|
|
6
5
|
async function preflightDashcardCardReferences(client, dashcards) {
|
|
7
6
|
const issues = await client.dashboard.checkCardReferences(dashcards);
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { n as tableSelectorFlags, t as parseTableSelectors } from "./selectors-P4QnrORk.mjs";
|
|
1
|
+
import { E as warn, H as outputFlags, U as profileFlag, p as renderSummary, st as errorMessage, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Dtb93zKy.mjs";
|
|
3
|
+
import { a as CollectionCompact, r as Collection } from "./collection-BxdPxD38.mjs";
|
|
4
|
+
import { n as tableSelectorFlags, t as parseTableSelectors } from "./selectors-C-vgMcGK.mjs";
|
|
6
5
|
import { z } from "zod";
|
|
7
6
|
//#region src/commands/git-sync/sync-scope.ts
|
|
8
7
|
function isOutsideSyncScope(collection) {
|
|
@@ -37,10 +36,11 @@ var publish_default = defineMetabaseCommand({
|
|
|
37
36
|
description: "Publish tables (and their upstream dependencies) to the Library Data collection"
|
|
38
37
|
},
|
|
39
38
|
details: "Sets each selected table and every upstream table it depends on into the Library Data collection, so they appear first in data pickers and rank up in search. The Library Data collection is resolved automatically (and the Library is created if it doesn't exist yet). Select with --table-ids, --db-ids, or --schemas (each schema id is \"<db-id>:<schema>\", e.g. 1:public); the filters are combined. Publishing does not add the Library Data collection to the git-sync scope — on an instance with remote sync configured, run `mb git-sync add-collection <collection-id>` so exports carry the published tables' metadata.",
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
requires: [
|
|
40
|
+
"library.ensureDataCollectionId",
|
|
41
|
+
"library.publishTables",
|
|
42
|
+
"gitSync.remoteUrl"
|
|
43
|
+
],
|
|
44
44
|
args: {
|
|
45
45
|
...outputFlags,
|
|
46
46
|
...profileFlag,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as PulseChannel, r as PulseCompact } from "./pulse-
|
|
1
|
+
import { g as MALFORMED_CELL } from "./cli.mjs";
|
|
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
|
|
5
5
|
const PulseChannelList = z.array(PulseChannel);
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { t as cardQueryView } from "./card-zyUkr2nS.mjs";
|
|
8
|
-
import { t as formatQueryResult } from "./query-result-DBDwk8TS.mjs";
|
|
1
|
+
import { H as outputFlags, Q as ConfigError, U as profileFlag, p as renderSummary, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { V as parseJson, it as parseOptionalInteger, t as defineMetabaseCommand } from "./runtime-Dtb93zKy.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-DtM6q9HU.mjs";
|
|
4
|
+
import { a as CardQueryResult, u as ExportFormat } from "./card-voh1k4hl.mjs";
|
|
5
|
+
import { t as cardQueryView } from "./card-CEkp1mcI.mjs";
|
|
6
|
+
import { t as formatQueryResult } from "./query-result-E4Q-Gra6.mjs";
|
|
9
7
|
import { t as pipeToStdout } from "./stream-McixcoUl.mjs";
|
|
10
8
|
import { z } from "zod";
|
|
11
9
|
//#region src/commands/card/query.ts
|
|
@@ -15,7 +13,7 @@ var query_default = defineMetabaseCommand({
|
|
|
15
13
|
name: "query",
|
|
16
14
|
description: "Run a saved card and return results (json envelope, or stream CSV/JSON/XLSX via --export-format)"
|
|
17
15
|
},
|
|
18
|
-
|
|
16
|
+
requires: ["card.exportQuery", "card.query"],
|
|
19
17
|
args: {
|
|
20
18
|
...outputFlags,
|
|
21
19
|
...profileFlag,
|
|
@@ -27,7 +25,7 @@ var query_default = defineMetabaseCommand({
|
|
|
27
25
|
},
|
|
28
26
|
"export-format": {
|
|
29
27
|
type: "string",
|
|
30
|
-
description: `Bypass JSON envelope and stream raw export: ${
|
|
28
|
+
description: `Bypass JSON envelope and stream raw export: ${ExportFormat.options.join(" | ")}`
|
|
31
29
|
},
|
|
32
30
|
parameters: {
|
|
33
31
|
type: "string",
|
|
@@ -80,8 +78,8 @@ function parseParameters(raw) {
|
|
|
80
78
|
return parseJson(raw, QueryParameters, { source: "--parameters" });
|
|
81
79
|
}
|
|
82
80
|
function parseExportFormat(raw) {
|
|
83
|
-
const result =
|
|
84
|
-
if (!result.success) throw new ConfigError(`invalid --export-format: "${raw}" (expected: ${
|
|
81
|
+
const result = ExportFormat.safeParse(raw);
|
|
82
|
+
if (!result.success) throw new ConfigError(`invalid --export-format: "${raw}" (expected: ${ExportFormat.options.join(", ")})`);
|
|
85
83
|
return result.data;
|
|
86
84
|
}
|
|
87
85
|
function applyLimit(result, limit) {
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { H as outputFlags, Q as ConfigError, U as profileFlag, m as writeJson, p as renderSummary, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { L as HttpError, R as chainRequestFailure, t as defineMetabaseCommand } from "./runtime-Dtb93zKy.mjs";
|
|
3
|
+
import { t as readBody } from "./body-CshgcV6U.mjs";
|
|
4
|
+
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
5
|
+
import { a as CardQueryResult, l as DatasetQuery } from "./card-voh1k4hl.mjs";
|
|
6
|
+
import { t as cardQueryView } from "./card-CEkp1mcI.mjs";
|
|
7
|
+
import { a as validateQuery, i as isMbql5Query, n as assertNotLegacyEnvelopeWrappingMbql5, r as getQuerySchemaBundle, t as ValidationOutcome } from "./validate-D6-Vg_kn.mjs";
|
|
8
|
+
import { o as skipValidateFlag } from "./validate-query-B90KYPQr.mjs";
|
|
9
|
+
import { t as formatQueryResult } from "./query-result-E4Q-Gra6.mjs";
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
//#region src/commands/query.ts
|
|
12
|
+
const QueryBody = z.unknown().describe("The query body: {\"lib/type\": \"mbql/query\", database, stages}; full schema: mb query --print-schema");
|
|
13
|
+
const QueryDryRunOutcome = ValidationOutcome.extend({ sql: z.string().nullable().describe("The compiled native query; null when it did not compile") });
|
|
14
|
+
const QueryOutput = z.union([CardQueryResult, QueryDryRunOutcome]);
|
|
15
|
+
const COMPILE_REJECTION_STATUSES = /* @__PURE__ */ new Set([400, 500]);
|
|
16
|
+
const FORBIDDEN_STATUS = 403;
|
|
17
|
+
const WHOLE_QUERY_POINTER = "";
|
|
18
|
+
var query_default = defineMetabaseCommand({
|
|
19
|
+
meta: {
|
|
20
|
+
name: "query",
|
|
21
|
+
description: "Run an ad-hoc MBQL or native query"
|
|
22
|
+
},
|
|
23
|
+
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.",
|
|
24
|
+
skills: [{
|
|
25
|
+
skill: "mbql",
|
|
26
|
+
purpose: "body shape, clause rules, and the dry-run loop"
|
|
27
|
+
}],
|
|
28
|
+
requires: ["dataset.native", "dataset.query"],
|
|
29
|
+
args: {
|
|
30
|
+
...outputFlags,
|
|
31
|
+
...profileFlag,
|
|
32
|
+
...connectionFlags,
|
|
33
|
+
...bodyInputFlags,
|
|
34
|
+
"dry-run": {
|
|
35
|
+
type: "boolean",
|
|
36
|
+
description: "Check the body and compile it on the server to native SQL without running it; prints {ok, errors, sql}"
|
|
37
|
+
},
|
|
38
|
+
"print-schema": {
|
|
39
|
+
type: "boolean",
|
|
40
|
+
description: "Emit the bundled MBQL 5 query JSON Schema and exit; no body required"
|
|
41
|
+
},
|
|
42
|
+
...skipValidateFlag
|
|
43
|
+
},
|
|
44
|
+
inputSchema: QueryBody,
|
|
45
|
+
outputSchema: QueryOutput,
|
|
46
|
+
examples: [
|
|
47
|
+
"mb query --print-schema",
|
|
48
|
+
"cat q.json | mb query --dry-run",
|
|
49
|
+
"mb query --file q.json",
|
|
50
|
+
"mb query --file q.json --skip-validate"
|
|
51
|
+
],
|
|
52
|
+
async run({ args, ctx, getClient }) {
|
|
53
|
+
if (args["print-schema"] === true) {
|
|
54
|
+
writeJson(getQuerySchemaBundle());
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const dryRun = args["dry-run"] === true;
|
|
58
|
+
const explicitSkip = args["skip-validate"] === true;
|
|
59
|
+
if (dryRun && explicitSkip) throw new ConfigError("--skip-validate cannot be combined with --dry-run");
|
|
60
|
+
const body = await readBody({
|
|
61
|
+
flag: args.body,
|
|
62
|
+
file: args.file
|
|
63
|
+
}, QueryBody);
|
|
64
|
+
if (!explicitSkip) assertNotLegacyEnvelopeWrappingMbql5(body, {
|
|
65
|
+
contextLabel: "query",
|
|
66
|
+
bodyNoun: "the body"
|
|
67
|
+
});
|
|
68
|
+
if (!explicitSkip && isMbql5Query(body)) {
|
|
69
|
+
const local = validateQuery(body);
|
|
70
|
+
if (!local.ok) {
|
|
71
|
+
writeJson(dryRun ? notCompiled(local) : local);
|
|
72
|
+
const hint = dryRun ? "" : " — pass --dry-run to check it without running";
|
|
73
|
+
throw new ConfigError(`validation failed: ${local.errors.length} error(s)${hint}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (dryRun) {
|
|
77
|
+
const query = DatasetQuery.parse(body);
|
|
78
|
+
const outcome = await (await getClient()).dataset.native(query).then(compiledOutcome, rejectedOutcome);
|
|
79
|
+
writeJson(outcome);
|
|
80
|
+
if (!outcome.ok) throw new ConfigError(`server validation failed: ${outcome.errors.length} error(s)`);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const queryResult = await (await getClient()).dataset.query(body);
|
|
84
|
+
renderSummary(queryResult, cardQueryView, () => formatQueryResult(queryResult), ctx);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
function notCompiled(local) {
|
|
88
|
+
return {
|
|
89
|
+
...local,
|
|
90
|
+
sql: null
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function compiledOutcome(compiled) {
|
|
94
|
+
return {
|
|
95
|
+
ok: true,
|
|
96
|
+
errors: [],
|
|
97
|
+
sql: typeof compiled.query === "string" ? compiled.query : JSON.stringify(compiled.query)
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function rejectedOutcome(error) {
|
|
101
|
+
if (!(error instanceof HttpError)) throw error;
|
|
102
|
+
if (error.status === FORBIDDEN_STATUS) throw chainRequestFailure(error, `the compile check could not run because the server refused permission: ${error.message}`);
|
|
103
|
+
if (!COMPILE_REJECTION_STATUSES.has(error.status)) throw error;
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
errors: [{
|
|
107
|
+
path: WHOLE_QUERY_POINTER,
|
|
108
|
+
message: error.message
|
|
109
|
+
}],
|
|
110
|
+
sql: null
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//#endregion
|
|
114
|
+
export { query_default as default };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { _ as formatScalar, v as renderRows } from "./cli.mjs";
|
|
2
2
|
//#region src/output/query-result.ts
|
|
3
3
|
function formatQueryResult(result) {
|
|
4
4
|
if (result.status !== "completed" || result.data === void 0) {
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import {
|
|
5
|
-
import { o as syncSettingsUpdateView } from "./git-sync-
|
|
1
|
+
import { H as outputFlags, U as profileFlag, p as renderSummary, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Dtb93zKy.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-DtM6q9HU.mjs";
|
|
4
|
+
import { c as SyncSettingsUpdateResult } from "./git-sync-BwBRmEhE.mjs";
|
|
5
|
+
import { o as syncSettingsUpdateView } from "./git-sync-TjX1r_wF.mjs";
|
|
6
6
|
//#region src/commands/git-sync/remove-collection.ts
|
|
7
7
|
var remove_collection_default = defineMetabaseCommand({
|
|
8
8
|
meta: {
|
|
9
9
|
name: "remove-collection",
|
|
10
10
|
description: "Unmark a collection as git-synced; cascades to descendants by location prefix"
|
|
11
11
|
},
|
|
12
|
-
|
|
13
|
-
minVersion: 60,
|
|
14
|
-
tokenFeature: "remote_sync"
|
|
15
|
-
},
|
|
12
|
+
requires: ["gitSync.setCollectionSynced"],
|
|
16
13
|
args: {
|
|
17
14
|
...outputFlags,
|
|
18
15
|
...profileFlag,
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import "./cli.mjs";
|
|
1
|
+
import { lt as KNOWN_RANGE } from "./cli.mjs";
|
|
2
|
+
import { Q as Skew } from "./runtime-Dtb93zKy.mjs";
|
|
2
3
|
//#region src/commands/auth/render.ts
|
|
4
|
+
const SKEW_LABEL = Object.freeze({
|
|
5
|
+
supported: "supported",
|
|
6
|
+
"older-than-known": `older than this CLI supports (v${KNOWN_RANGE.min} min)`,
|
|
7
|
+
"newer-than-known": `newer than this CLI knows (v${KNOWN_RANGE.max} max)`,
|
|
8
|
+
development: "development build (newer than every release)"
|
|
9
|
+
});
|
|
3
10
|
function pickProperty(value, key) {
|
|
4
11
|
if (typeof value !== "object" || value === null || !(key in value)) return;
|
|
5
12
|
return Reflect.get(value, key);
|
|
@@ -31,5 +38,9 @@ function renderVersionTag(value) {
|
|
|
31
38
|
function renderTimestamp(value) {
|
|
32
39
|
return typeof value === "string" ? value : "—";
|
|
33
40
|
}
|
|
41
|
+
function renderSkew(value) {
|
|
42
|
+
const parsed = Skew.safeParse(value);
|
|
43
|
+
return parsed.success ? SKEW_LABEL[parsed.data] : "—";
|
|
44
|
+
}
|
|
34
45
|
//#endregion
|
|
35
|
-
export {
|
|
46
|
+
export { renderUserRole as a, renderUserName as i, renderSkew as n, renderVersionTag as o, renderTimestamp as r, renderAuthMethod as t };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
1
|
+
import { H as outputFlags, U as profileFlag, p as renderSummary, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Dtb93zKy.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-DtM6q9HU.mjs";
|
|
4
4
|
import { n as UploadUpdateResult } from "./upload-DAtxBBms.mjs";
|
|
5
|
-
import { n as requireUploadFilePath, t as readCsvFile } from "./upload-
|
|
5
|
+
import { n as requireUploadFilePath, t as readCsvFile } from "./upload-DOO94rCQ.mjs";
|
|
6
6
|
import { n as uploadUpdateResultView } from "./upload-C3z5ZaXA.mjs";
|
|
7
7
|
//#region src/commands/upload/replace.ts
|
|
8
8
|
var replace_default = defineMetabaseCommand({
|
|
@@ -11,7 +11,7 @@ var replace_default = defineMetabaseCommand({
|
|
|
11
11
|
description: "Replace an existing uploaded table's rows with a CSV file"
|
|
12
12
|
},
|
|
13
13
|
details: "Replaces the contents of the table with the given id with the rows of the CSV. The table must have been created by a CSV upload and the CSV columns must match.",
|
|
14
|
-
|
|
14
|
+
requires: ["table.replaceCsv"],
|
|
15
15
|
args: {
|
|
16
16
|
...outputFlags,
|
|
17
17
|
...profileFlag,
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { a as DatabaseSyncResult } from "./database-
|
|
5
|
-
import { t as databaseSyncResultView } from "./database-
|
|
1
|
+
import { H as outputFlags, U as profileFlag, p as renderSummary, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Dtb93zKy.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-DtM6q9HU.mjs";
|
|
4
|
+
import { a as DatabaseSyncResult } from "./database-JtHTqSpq.mjs";
|
|
5
|
+
import { t as databaseSyncResultView } from "./database-C3E9PZSx.mjs";
|
|
6
6
|
//#region src/commands/db/rescan-values.ts
|
|
7
7
|
var rescan_values_default = defineMetabaseCommand({
|
|
8
8
|
meta: {
|
|
9
9
|
name: "rescan-values",
|
|
10
10
|
description: "Trigger a rescan of cached field values for a database"
|
|
11
11
|
},
|
|
12
|
-
|
|
12
|
+
requires: ["database.rescanValues"],
|
|
13
13
|
args: {
|
|
14
14
|
...outputFlags,
|
|
15
15
|
...profileFlag,
|