@metabase/cli 0.4.1-alpha.release-65-integration-branch.5cbe297 → 0.5.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-hv29px39.mjs → add-collection-COtKcy6Y.mjs} +4 -4
- package/dist/{alert-DnTCjYIu.mjs → alert-DMlSjPEv.mjs} +7 -7
- package/dist/{alerts-_ELZ12ye.mjs → alerts-s3al16NZ.mjs} +6 -6
- package/dist/{append-B9sLLPYT.mjs → append-CbGmdeLw.mjs} +4 -4
- package/dist/{archive-CwBk5vxQ.mjs → archive-5EY9UJU_.mjs} +5 -5
- package/dist/{archive-DDUSmbjn.mjs → archive-BFmx4B91.mjs} +3 -3
- package/dist/{archive-CdfyB0To.mjs → archive-BZCYIBhQ.mjs} +3 -3
- package/dist/{archive-BRX5fKPb.mjs → archive-C_UHeanE.mjs} +3 -3
- package/dist/{archive-BhIeDoLk.mjs → archive-Ce4eArrs.mjs} +3 -3
- package/dist/{archive-BAHzxkPR.mjs → archive-CnDriekB.mjs} +5 -5
- package/dist/{archive-CKWWyI1i.mjs → archive-DDO2XX0E.mjs} +4 -4
- package/dist/{archive-DD8C0Krt2.mjs → archive-DW7x0IFB.mjs} +4 -4
- package/dist/{archive-D22VL5Bx.mjs → archive-DvbaSglr.mjs} +3 -3
- package/dist/{archive-ZnHzMJaM.mjs → archive-DzSdJVqE.mjs} +5 -5
- package/dist/{archive-BdX0Uvf2.mjs → archive-a05W75XH.mjs} +3 -3
- package/dist/{auth-Ca84a5fv.mjs → auth-DOz7KW5E.mjs} +5 -5
- package/dist/{body-BVrHLwJU.mjs → body-Di7940x_.mjs} +2 -3
- package/dist/{branch-flag-Czh8JT1G.mjs → branch-flag-CfJ8vwgu.mjs} +1 -1
- package/dist/{branches-frSt4WcS.mjs → branches-BC-vlk6i.mjs} +3 -3
- package/dist/{breaking-zlgxxwdd.mjs → breaking-ByrjsFjq.mjs} +6 -6
- package/dist/{broken-BUAzpKLc.mjs → broken-DLSk1T88.mjs} +8 -8
- package/dist/{bulk-discard-values-DU15VJPb.mjs → bulk-discard-values-VKGj8c7z.mjs} +5 -5
- package/dist/{bulk-edit-TSa4lNkM.mjs → bulk-edit-CpuleeCQ.mjs} +5 -5
- package/dist/{bulk-rescan-values-BYJAsPC1.mjs → bulk-rescan-values-DeGwiqLS.mjs} +5 -5
- package/dist/{bulk-sync-schema-DtaOwEtW.mjs → bulk-sync-schema-BKVhauW1.mjs} +5 -5
- package/dist/{cancel-DCOvSQsq.mjs → cancel-qKj45001.mjs} +3 -3
- package/dist/{cancel-task-osQLETJh.mjs → cancel-task-nmBBd1Ky.mjs} +3 -3
- package/dist/card-Buc-X4Mh.mjs +25 -0
- package/dist/{card-P5mBknsl.mjs → card-Bv4ZN0oV.mjs} +12 -2
- package/dist/{card-CQNUT9pm.mjs → card-DSrgU7lT.mjs} +1 -1
- package/dist/{cards-B1pyPl77.mjs → cards-Bq73s48q.mjs} +4 -4
- package/dist/cli.mjs +628 -239
- package/dist/{client-1UIUBA_V.mjs → client-BmURNkkW.mjs} +998 -444
- package/dist/{collection-DPiztU_l.mjs → collection-C03LXnCT.mjs} +1 -1
- package/dist/collection-D-sS0AFw.mjs +21 -0
- package/dist/{collection-namespace-Cizv6-94.mjs → collection-namespace-DaDzK31i.mjs} +1 -2
- package/dist/{collection-BgPYl2c5.mjs → collection-zrZoJfgR.mjs} +1 -1
- package/dist/{content-translation-XnHISl5-.mjs → content-translation-BlG41YrA.mjs} +3 -3
- package/dist/{copy-BCVW48Jq.mjs → copy-DOKlVa7H.mjs} +6 -6
- package/dist/{copy-DAKdksBm.mjs → copy-DTiYs_a2.mjs} +4 -4
- package/dist/{copy-flags-D7NTgAz1.mjs → copy-flags-BhGWC5kS.mjs} +2 -2
- package/dist/{create-qCgnB-oZ.mjs → create-1rLk8b5q.mjs} +3 -3
- package/dist/{create-BfA1pnmS.mjs → create-B1QDNU1x.mjs} +6 -6
- package/dist/{create-BOvtRwRz.mjs → create-B1bX6ngX.mjs} +4 -4
- package/dist/{create-XnYN2zoc.mjs → create-B5BwdPwT.mjs} +6 -6
- package/dist/{create-CuhQ1Khk.mjs → create-BKKNIe93.mjs} +3 -3
- package/dist/{create-KyeJjhxH2.mjs → create-BXX_n64u.mjs} +4 -4
- package/dist/{create-B1ifNWcE.mjs → create-BpwZJZxb.mjs} +5 -5
- package/dist/{create-B57D5E-o.mjs → create-C0kz0oYc.mjs} +3 -3
- package/dist/{create-CW4WF073.mjs → create-Cob0gLsA.mjs} +3 -3
- package/dist/{create-D7zeAm-0.mjs → create-DPggIXfn.mjs} +4 -4
- package/dist/{create-Br5JxAeE.mjs → create-DUytP2Y1.mjs} +4 -4
- package/dist/{create-cqbpWaOi.mjs → create-DraZzrLO.mjs} +6 -6
- package/dist/{create-B5eo9PSN.mjs → create-Duj_2YIF.mjs} +4 -4
- package/dist/{create-D2iZsTRV.mjs → create-JaFhqysM.mjs} +5 -5
- package/dist/{create-branch-Cli5cXvk.mjs → create-branch-B5jB4tKk.mjs} +3 -3
- package/dist/{create-BzE4q6F_.mjs → create-d0trLAzB.mjs} +4 -4
- package/dist/{create-g4pZa_Xa.mjs → create-vOw8gmBU.mjs} +3 -3
- package/dist/{csv-CWIcAm_-.mjs → csv-DfExp9H_.mjs} +4 -4
- package/dist/{current-task-eBjusv2o.mjs → current-task-CbXIH_RA.mjs} +4 -4
- package/dist/dashboard-DH_soSQp.mjs +35 -0
- package/dist/{database-BT7DVgSr.mjs → database-BdKkae1m.mjs} +2 -2
- package/dist/{database-Kq2AL5jH.mjs → database-DoNoZ8Yc.mjs} +1 -1
- package/dist/{dataset-BmvCxGoE.mjs → dataset-DZgJm5hP.mjs} +3 -14
- package/dist/{db-_H9HAS6H.mjs → db-C82M3Gpg.mjs} +7 -7
- package/dist/{delete-C7QmQlp9.mjs → delete-9xHRd2CG.mjs} +4 -4
- package/dist/{delete-BMvVkW-m.mjs → delete-B4BfGfiJ.mjs} +4 -4
- package/dist/{delete-BW5QXiyJ.mjs → delete-D0xFMRRq.mjs} +4 -4
- package/dist/{delete-CynbfvS2.mjs → delete-DJ7SNXiH.mjs} +4 -4
- package/dist/{delete-BztmAfPc.mjs → delete-hcw_4pBG.mjs} +4 -4
- package/dist/{delete-DOn2uk0u.mjs → delete-hwPqKXeY.mjs} +4 -4
- package/dist/{delete-runtime-Cc7TASG7.mjs → delete-runtime-DkgYUQ_n.mjs} +1 -1
- package/dist/{delete-table-DFqm6bAq.mjs → delete-table-DhTMft7u.mjs} +4 -4
- package/dist/{dependencies-DZ-kMsDa.mjs → dependencies-B8H2gA04.mjs} +5 -5
- package/dist/dependency-CLznxtLE.mjs +15 -0
- package/dist/{dependency-BHKwKjhO.mjs → dependency-Dc33mjgd.mjs} +2 -2
- package/dist/{dependency-B4J1bwFh.mjs → dependency-tQBxYjFX.mjs} +2 -2
- package/dist/{dependents-Ia2fe_KK.mjs → dependents-B2GcS5kB.mjs} +9 -9
- package/dist/{dirty-BrXAPows.mjs → dirty-Cz2rUd6S.mjs} +4 -4
- package/dist/{discard-values-B9mTgFbV.mjs → discard-values-QWuWGaVK.mjs} +5 -5
- package/dist/{document-COQzVLjW.mjs → document-BDobDiap.mjs} +1 -1
- package/dist/document-WhSEyI-3.mjs +20 -0
- package/dist/{document-BsaKF8UR.mjs → document-wfWbV0B_.mjs} +1 -1
- package/dist/{download-CZdsDdhG.mjs → download-Dw15fUMy.mjs} +2 -2
- package/dist/{eid-DsGNJ16z.mjs → eid-Ex4G-ZlN.mjs} +4 -4
- package/dist/{entity-BFajNdQp.mjs → entity-DBKPaMr5.mjs} +2 -2
- package/dist/{entry-flags-BaZUoxUR.mjs → entry-flags-DgY3IXFe.mjs} +4 -4
- package/dist/{events-rkMIMpnS.mjs → events-BibJ4ya0.mjs} +4 -4
- package/dist/{export-BCkzx9zk.mjs → export-U8MdaatW.mjs} +7 -7
- package/dist/{export-flags-TuwwRhD6.mjs → export-flags-BrfeyE8D.mjs} +3 -3
- package/dist/{export-preflight-p7botJyN.mjs → export-preflight-A28L45au.mjs} +5 -5
- package/dist/field-qF1KRJYB.mjs +21 -0
- package/dist/{fields-CJVXOLbB.mjs → fields-i1TFa_th.mjs} +4 -4
- package/dist/{filter-flags-yY4RM312.mjs → filter-flags-Bm3vuSM-.mjs} +4 -5
- package/dist/{fks-B6hjrdJP.mjs → fks-Dcfn3-73.mjs} +6 -6
- package/dist/{get-Eforof5e.mjs → get-B4_3DID6.mjs} +5 -5
- package/dist/{get-zotSW00n.mjs → get-BCdtCwaG.mjs} +3 -3
- package/dist/{get-DpYTiE4D.mjs → get-BKDTRMNU.mjs} +3 -3
- package/dist/{get-DsbDxSpy.mjs → get-BiPSePQc.mjs} +3 -3
- package/dist/{get-BYtFVJHT.mjs → get-C3ojRVJ_.mjs} +4 -4
- package/dist/{get-D7HPiBB0.mjs → get-CCLWWqTD.mjs} +4 -4
- package/dist/{get-CoJcgFky.mjs → get-CVpIQb8v.mjs} +5 -5
- package/dist/{get-CXeFg0F2.mjs → get-CcwRn8Y2.mjs} +5 -5
- package/dist/{get-CWBN0G-4.mjs → get-CobILQ_7.mjs} +5 -5
- package/dist/{get-DPlSzRI0.mjs → get-Cwj1Q-at.mjs} +3 -3
- package/dist/{get-C6uLL4bJ.mjs → get-D0NZ0ZO1.mjs} +3 -3
- package/dist/{get-BvUNnNRq.mjs → get-DPZUIPjv.mjs} +3 -3
- package/dist/{get-Do1LC4I52.mjs → get-DUwX-RU82.mjs} +3 -3
- package/dist/{get-BxUgfEPW.mjs → get-DqYn9mez.mjs} +4 -4
- package/dist/{get-oLc5jgid2.mjs → get-Dz3dNirC.mjs} +4 -4
- package/dist/{get-DyS1mRI6.mjs → get-EKBYludD.mjs} +3 -3
- package/dist/{get-D1p-5ibI.mjs → get-HFQSttF3.mjs} +5 -5
- package/dist/{get-xmhwvAQJ.mjs → get-IjoHBExI.mjs} +5 -5
- package/dist/{get-B5L4BUGK.mjs → get-hAoJtVCK.mjs} +3 -3
- package/dist/{get-run-bU-d--nM.mjs → get-run-B2SnsZSY.mjs} +4 -4
- package/dist/git-sync-BlgB_-8-.mjs +29 -0
- package/dist/{git-sync-DspFahwV.mjs → git-sync-Ch1V1fEK.mjs} +1 -1
- package/dist/{glossary-CdW6RFId.mjs → glossary-6LLpItof.mjs} +1 -1
- package/dist/glossary-BvVxqjxJ.mjs +14 -0
- package/dist/{glossary-Del97Jqg.mjs → glossary-wnuxoE_I.mjs} +1 -1
- package/dist/{graph-CHXJ6mB7.mjs → graph-CHlfxVy1.mjs} +6 -6
- package/dist/{group-D4w87fXL.mjs → group-B3X3LTcU.mjs} +1 -1
- package/dist/{has-remote-changes-BXEe8Sv5.mjs → has-remote-changes-DCMpqGgE.mjs} +3 -3
- package/dist/{import-DZQb4bUo.mjs → import-C7MZhKo6.mjs} +7 -7
- package/dist/{input-DjHsV-kD.mjs → input-sRdxNc3T.mjs} +1 -1
- package/dist/{is-dirty-DwQ2_CCB.mjs → is-dirty-DpLyHebS.mjs} +2 -2
- package/dist/{items-DNdICQ7M.mjs → items-1ME_eg27.mjs} +6 -6
- package/dist/{key-BTaxFn_7.mjs → key-DMtgTOwN.mjs} +1 -1
- package/dist/{library-DmkpcZPb.mjs → library-CP-9yepy.mjs} +1 -1
- package/dist/{library-Cdj_uj1H.mjs → library-D2ogEIfI.mjs} +5 -5
- package/dist/{library-C4M8TF2N.mjs → library-fWEv38OB.mjs} +2 -2
- package/dist/{list-CYlPgzD1.mjs → list-B0h-j1E7.mjs} +3 -3
- package/dist/{list-CLJvuPXn.mjs → list-BUZ91ctZ.mjs} +5 -5
- package/dist/{list-89ZgbsvW.mjs → list-BUwDGyIu.mjs} +5 -5
- package/dist/{list-C-WGqRqN.mjs → list-BXcDPU5d.mjs} +6 -6
- package/dist/{list-C7PV9fYj.mjs → list-BoVeF8QA.mjs} +6 -6
- package/dist/{list-M20foZz2.mjs → list-C1oEpUZG.mjs} +3 -3
- package/dist/{list-OKHcr76i.mjs → list-C9996vbS.mjs} +3 -3
- package/dist/{list-2EWHwbQs.mjs → list-CJ5FyCnL.mjs} +4 -4
- package/dist/{list-DcHPY1Ti.mjs → list-CQi3AgS5.mjs} +4 -4
- package/dist/{list-epIn3uFZ.mjs → list-CVh8DHOO.mjs} +5 -5
- package/dist/{list-03zaydQe.mjs → list-DBAEy3Rx.mjs} +3 -3
- package/dist/{list-hINHmdMT.mjs → list-DkCadZ2E.mjs} +3 -3
- package/dist/{list-DsyvHBAv.mjs → list-DzP7YXdZ.mjs} +3 -3
- package/dist/{list-gqemddWB.mjs → list-LMlJ4uAY.mjs} +6 -6
- package/dist/{list-F4ENGV7j.mjs → list-NINy7ybI.mjs} +4 -4
- package/dist/{list-CZoaZc9g.mjs → list-OXiXtdiM.mjs} +5 -5
- package/dist/{list-Be6kDkyT.mjs → list-STy8UHs2.mjs} +6 -6
- package/dist/{list-DoLqxEjq.mjs → list-Ud7F0XdU.mjs} +3 -3
- package/dist/{list-__Q79YXk.mjs → list-dCi6OaIE.mjs} +4 -4
- package/dist/{login-BSqGgX8S.mjs → login-BMON3Fft.mjs} +6 -6
- package/dist/{logout-D92O4mQK.mjs → logout-Cx934GzW.mjs} +2 -2
- package/dist/{measure-DhX_mmZK.mjs → measure-CUqJtDNm.mjs} +6 -6
- package/dist/{notification-Cuuwoksm.mjs → notification-CCZ9mrOw.mjs} +1 -1
- package/dist/{parameter-values-BY2WA9qg.mjs → parameter-values-DCrU02Az.mjs} +3 -3
- package/dist/{parse-enum-BPKULOSw.mjs → parse-enum-Do5Cptbv.mjs} +1 -1
- package/dist/{parse-id-CxHp2akh.mjs → parse-id-oCbmouCn.mjs} +1 -1
- package/dist/{parse-ref-8bVX_9IN.mjs → parse-ref-Df8gusl4.mjs} +1 -1
- package/dist/{parse-text-Bm6eUa-p.mjs → parse-text-CVrP7GmZ.mjs} +1 -1
- package/dist/{path-D4Q1ZzCw.mjs → path-DTuSDGd6.mjs} +4 -4
- package/dist/{poll-DFZRtTA_.mjs → poll-BKo5dK0l.mjs} +2 -2
- package/dist/{preflight-BPaonBKy.mjs → preflight-UeYuGDPr.mjs} +2 -3
- package/dist/{process-B3Di_HtV.mjs → process-BpmZXbcw.mjs} +1 -1
- package/dist/{publish-BhgyrJ6c.mjs → publish-D3GwLC-K.mjs} +4 -4
- package/dist/{pulse-CIza18rO.mjs → pulse-DzVPfb5J.mjs} +1 -1
- package/dist/{query-CsBe-kJn.mjs → query-B1Cp9EO6.mjs} +6 -6
- package/dist/{query-DvlGWjgG.mjs → query-Ct697cY-.mjs} +13 -15
- package/dist/{remapping-CCEivr42.mjs → remapping-RsoPWE7c.mjs} +4 -4
- package/dist/{remove-collection-LpgGBYCl.mjs → remove-collection-BJo3Wd9K.mjs} +4 -4
- package/dist/{render-D5ehBS-7.mjs → render-C_ev6qoW.mjs} +2 -2
- package/dist/{replace-DeWgkbfZ.mjs → replace-BSAGp3cR.mjs} +4 -4
- package/dist/requirement-check-T3bjQ0Mr.mjs +60 -0
- package/dist/{rescan-values-CDDVS1tl.mjs → rescan-values-CE62_2dc.mjs} +5 -5
- package/dist/{rescan-values-aF18XAv6.mjs → rescan-values-rpro4Kw2.mjs} +5 -5
- package/dist/{run-DyGMvbMm.mjs → run-B3BRodEp.mjs} +3 -3
- package/dist/{run-Buf4B8QH.mjs → run-BI1QO9Kn.mjs} +7 -7
- package/dist/{runs-D2CXgW10.mjs → runs-CUseZezf.mjs} +5 -5
- package/dist/{runtime-X6hVzSMW.mjs → runtime-C5Ha6Ou8.mjs} +248 -534
- package/dist/{schema-tables-FUOIyoUU.mjs → schema-tables-C7YkyRh0.mjs} +6 -6
- package/dist/{schemas-CmfNeqzG.mjs → schemas-Bj5sJ9uB.mjs} +4 -4
- package/dist/{search-CLpDqYpY.mjs → search-BsAwK7Rk.mjs} +5 -5
- package/dist/{search-Dl7xzF6Q.mjs → search-CB1A4HWx.mjs} +6 -6
- package/dist/{segment-Bx28f38v.mjs → segment-BEjaeLc5.mjs} +6 -6
- package/dist/{send-CoGV2zkp.mjs → send-Dfh8d1gG.mjs} +3 -3
- package/dist/{set-CrR9IumN.mjs → set-DA8dKyzi.mjs} +4 -4
- package/dist/{set-active-CbiJv8Hg.mjs → set-active-AyjKtBD-.mjs} +3 -3
- package/dist/{set-sensitivity-CTHVxpnU.mjs → set-sensitivity-D0613dHA.mjs} +4 -4
- package/dist/{setting-CUxdweNJ.mjs → setting-B-bxCkC0.mjs} +4 -4
- package/dist/{setup-4uySIB-t.mjs → setup-Bvvqlz9d.mjs} +3 -3
- package/dist/{signal-0Yt8JTMn.mjs → signal-Dm4N0Bcc.mjs} +1 -1
- package/dist/{skill-list-goCqmfFF.mjs → skill-list-DkuCf0k4.mjs} +9 -3
- package/dist/{skills-DeWsLMwC.mjs → skills-DlDCTGVE.mjs} +2 -2
- package/dist/{skills-86j411Qz.mjs → skills-DxrO7HUz.mjs} +3 -3
- package/dist/snippet-B7Kau5U8.mjs +19 -0
- package/dist/{stash-BNKlbxtD.mjs → stash-j9JPv3ns.mjs} +5 -5
- package/dist/{status-B7bwHLkk.mjs → status-DcbvbRc5.mjs} +3 -3
- package/dist/{status-Bul9El-c.mjs → status-DxNcrfnI.mjs} +16 -7
- package/dist/{subscription-DPAGevGU.mjs → subscription-CSR2t-xK.mjs} +6 -6
- package/dist/{subscriptions-DIRsHcKP.mjs → subscriptions--0YvW40u.mjs} +6 -6
- package/dist/{summary-CeVt80Kb.mjs → summary-Dslv78-r.mjs} +3 -3
- package/dist/{sync-schema-B9fLcZoa.mjs → sync-schema-BSJiokQf.mjs} +6 -6
- package/dist/{sync-schema-oDTbhjW1.mjs → sync-schema-Dgij5ICd.mjs} +5 -5
- package/dist/{sync-task-BAMOf6_t.mjs → sync-task-a1zyF1Qb.mjs} +4 -5
- package/dist/{table-BFIOH6Pb.mjs → table-Uvu1roSx.mjs} +2 -2
- package/dist/table-qjgz2eek.mjs +26 -0
- package/dist/{table-selector-flags-BUR0-n6j.mjs → table-selector-flags-B9OiA3Z1.mjs} +3 -3
- package/dist/{table-Ci6bhZkb.mjs → table-zAdW5_3H.mjs} +5 -5
- package/dist/{text-CdtEI6l6.mjs → text-821Rn8M9.mjs} +1 -1
- package/dist/timeline-CNkrY3e3.mjs +21 -0
- package/dist/{timeline-event-BY2Hj72e.mjs → timeline-event-CSzx8EDP.mjs} +6 -6
- package/dist/{transform-D4z70PIN.mjs → transform-BKX6tl3i.mjs} +1 -1
- package/dist/transform-Y86R7_2F.mjs +28 -0
- package/dist/transform-job-Cg_1jzWI.mjs +22 -0
- package/dist/{transform-tag-CzjLKILh.mjs → transform-tag-DHg7j15d.mjs} +5 -5
- package/dist/{transforms-0uhBh0H4.mjs → transforms-DwxPfMiG.mjs} +5 -5
- package/dist/{tree-oBEw8hDj.mjs → tree-COFmA20J.mjs} +3 -3
- package/dist/{unpublish-BJ9OKN1N.mjs → unpublish-BQClh4U7.mjs} +3 -3
- package/dist/{unreferenced-D6UyA_Nu.mjs → unreferenced-DKc0zZDl.mjs} +6 -6
- package/dist/{update-CKJ6Das4.mjs → update-B-wcIl8T.mjs} +4 -4
- package/dist/{update-BqrZ-8IK.mjs → update-B8jQTspb.mjs} +8 -8
- package/dist/{update-BZgHTH5P.mjs → update-BBLbEPEP.mjs} +4 -4
- package/dist/{update-M7yDPmJ-.mjs → update-BNwjjMk6.mjs} +5 -5
- package/dist/{update-CEhub3Wz.mjs → update-BVFfoopT.mjs} +5 -5
- package/dist/{update-DGwGjOnH.mjs → update-BVMgrMy7.mjs} +5 -5
- package/dist/{update-CKe2Bwpv.mjs → update-Bgy2amR0.mjs} +6 -6
- package/dist/{update-D9eLVWFQ.mjs → update-C9HK3i8s.mjs} +5 -5
- package/dist/{update-Cv6IMLyu.mjs → update-CFfr1ZdL.mjs} +4 -4
- package/dist/{update-BK_SpSrG.mjs → update-CMRWXoZ2.mjs} +4 -4
- package/dist/{update-DKagaJw0.mjs → update-CPmPnEvm.mjs} +6 -6
- package/dist/{update-bGDXSnBh.mjs → update-Ca8LSZer.mjs} +5 -5
- package/dist/{update-DgmlUn64.mjs → update-DJwu8UT2.mjs} +4 -4
- package/dist/{update-DneJLQXe.mjs → update-Dwr3n7_n.mjs} +7 -7
- package/dist/{update-CYQkWLpZ.mjs → update-MxvqmZ3z.mjs} +6 -6
- package/dist/{update-dashcard-DNsf-gJ1.mjs → update-dashcard-C8QN2Qcu.mjs} +4 -4
- package/dist/{update-CHA4VWKT.mjs → update-kM3TDlEp.mjs} +7 -7
- package/dist/{update-7zsDGAWa.mjs → update-myfBF5qV.mjs} +4 -4
- package/dist/{upgrade-BRJH93W0.mjs → upgrade-BBOEVIRa.mjs} +4 -4
- package/dist/{upload-CGz8u2wG.mjs → upload-CoBd4qBp.mjs} +3 -3
- package/dist/{upload-DJB7DMA1.mjs → upload-CxpXpjCf.mjs} +2 -2
- package/dist/upload-fcim1xtK.mjs +13 -0
- package/dist/{uuid-3qmLYgrG.mjs → uuid-DW30GY7B.mjs} +2 -2
- package/dist/{validate-D_iikPkc.mjs → validate-n85yMraN.mjs} +1 -1
- package/dist/{validate-query-DIcK8alR.mjs → validate-query-BwXvFFYi.mjs} +3 -7
- package/dist/{values-Bn2Wcz4t.mjs → values-B6eFE4K5.mjs} +3 -3
- package/dist/{verify-C2K-zMuQ.mjs → verify-BSq7x66g.mjs} +3 -3
- package/dist/{verify-CCX2N98Q.mjs → verify-DnU-wXIs.mjs} +4 -4
- package/dist/{verify-CA4PEHlO.mjs → verify-Dp8tUbP3.mjs} +3 -3
- package/dist/{wait-DCgCJBqX.mjs → wait-D6Tw4ZxO.mjs} +6 -6
- package/dist/{wait-flags-aRQHTjwg.mjs → wait-flags-BRUzMI6S.mjs} +2 -2
- package/dist/{window-2ybHqui2.mjs → window-BqMFpWMh.mjs} +1 -1
- package/package.json +1 -1
- package/skill-data/core/SKILL.md +5 -5
- package/skill-data/dashboard/SKILL.md +6 -0
- package/skill-data/git-sync/SKILL.md +64 -14
- package/skill-data/native-sql/SKILL.md +1 -1
- package/skill-data/transform/SKILL.md +1 -63
- package/dist/archive-3MQyc5Ih.mjs +0 -32
- package/dist/card-P2-4BkXV.mjs +0 -25
- package/dist/collection-BI8Fy9vS.mjs +0 -21
- package/dist/create--b64pMVM.mjs +0 -34
- package/dist/create-C7fVbQbQ.mjs +0 -48
- package/dist/dashboard-C-YJxDam.mjs +0 -35
- package/dist/data-action-DER3EMD7.mjs +0 -24
- package/dist/data-action-DZxVB_hD.mjs +0 -85
- package/dist/data-action-R9qxJDPA.mjs +0 -40
- package/dist/delete-B0O-mf63.mjs +0 -44
- package/dist/delete-DPU-uQxU.mjs +0 -44
- package/dist/dependency-v9fHJ-N-.mjs +0 -15
- package/dist/document-CGvUmD9i.mjs +0 -20
- package/dist/execute-DvBse4aF.mjs +0 -45
- package/dist/field-C9AcBe8x.mjs +0 -21
- package/dist/get-BwKQw_rR.mjs +0 -31
- package/dist/get-DSjITPED.mjs +0 -32
- package/dist/git-sync-D4R0cHvk.mjs +0 -29
- package/dist/glossary-C6EnoEXg.mjs +0 -14
- package/dist/list-CzxrdWB8.mjs +0 -35
- package/dist/list-Owrzgtkc.mjs +0 -28
- package/dist/query-BKtMP5eH.mjs +0 -13
- package/dist/run-DlG3Ykj1.mjs +0 -63
- package/dist/snippet-C3gamfFK.mjs +0 -19
- package/dist/table-C--k-JXA.mjs +0 -26
- package/dist/timeline-ClMmTycg.mjs +0 -21
- package/dist/transform-BZaNFGeK.mjs +0 -28
- package/dist/transform-job-QMI2qWin.mjs +0 -22
- package/dist/transform-test-B9le1jKH.mjs +0 -16
- package/dist/transform-test-BjjCQ2xm.mjs +0 -169
- package/dist/transform-test-DHGKeuHa.mjs +0 -32
- package/dist/transport-BmNrb0Lz.mjs +0 -313
- package/dist/update-Bdi40RG0.mjs +0 -52
- package/dist/update-CXfLvhmK.mjs +0 -41
- package/dist/upload-T5wS1XtL.mjs +0 -13
- package/skill-data/data-action/SKILL.md +0 -125
- package/skill-data/transform-test-plan/SKILL.md +0 -82
- package/skill-data/transform-test-plan/references/checklist.md +0 -32
- package/skill-data/transform-test-plan/references/checks.md +0 -156
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-
|
|
4
|
-
import { r as parseWaitSchedule } from "./wait-flags-
|
|
5
|
-
import { u as syncTaskView } from "./git-sync-
|
|
6
|
-
import { a as throwIfFailedTask, i as taskPollOptions, n as formatSyncTask, r as syncTaskIdleView, t as SyncTaskOrIdle } from "./sync-task-
|
|
1
|
+
import { c as renderSummary, ct as profileFlag, nt as connectionFlags, st as outputFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-C5Ha6Ou8.mjs";
|
|
3
|
+
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-BKo5dK0l.mjs";
|
|
4
|
+
import { r as parseWaitSchedule } from "./wait-flags-BRUzMI6S.mjs";
|
|
5
|
+
import { u as syncTaskView } from "./git-sync-Ch1V1fEK.mjs";
|
|
6
|
+
import { a as throwIfFailedTask, i as taskPollOptions, n as formatSyncTask, r as syncTaskIdleView, t as SyncTaskOrIdle } from "./sync-task-a1zyF1Qb.mjs";
|
|
7
7
|
//#region src/commands/git-sync/wait.ts
|
|
8
8
|
const WaitResult = SyncTaskOrIdle;
|
|
9
9
|
var wait_default = defineMetabaseCommand({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as interruptSignal } from "./cli.mjs";
|
|
2
|
-
import { t as parseId } from "./parse-id-
|
|
3
|
-
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-
|
|
2
|
+
import { t as parseId } from "./parse-id-oCbmouCn.mjs";
|
|
3
|
+
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-BKo5dK0l.mjs";
|
|
4
4
|
//#region src/commands/wait-flags.ts
|
|
5
5
|
const waitScheduleFlags = {
|
|
6
6
|
timeout: {
|
package/package.json
CHANGED
package/skill-data/core/SKILL.md
CHANGED
|
@@ -12,7 +12,7 @@ Top-level command groups (run `mb <group> --help` to discover verbs):
|
|
|
12
12
|
|
|
13
13
|
```
|
|
14
14
|
auth | db | table | field | upload | content-translation | query | card | dashboard | snippet | segment | measure | collection | library
|
|
15
|
-
document | glossary | timeline | timeline-event | transform | transform-job | transform-tag |
|
|
15
|
+
document | glossary | timeline | timeline-event | transform | transform-job | transform-tag | alert | subscription | setting
|
|
16
16
|
search | dependency | git-sync | setup | eid | uuid | upgrade | skills
|
|
17
17
|
```
|
|
18
18
|
|
|
@@ -142,8 +142,11 @@ Routine verb shapes (list / get / create / update), every flag, and output schem
|
|
|
142
142
|
- **alert / subscription are two unrelated systems.** `alert` watches one **card** and fires on a send condition (`/api/notification`: a cron string, `channel/email`-prefixed handlers, typed recipients); `subscription` delivers one **dashboard** on a schedule (`/api/pulse`: structured `schedule_type` + hour/day/frame, bare `email` channels, `{id}|{email}` recipients). The bodies are not interchangeable. Both silently deliver nowhere if the server has no SMTP / Slack app — check `mb setting get 'email-configured?'` (quote it; the `?` is a shell glob) before creating either. Their list-valued fields (`handlers`/`subscriptions`, `channels`/`cards`) **replace wholesale** on update, so adding one recipient is a read-modify-write. `mb card alerts <id>` and `mb dashboard subscriptions <id>` list what's already attached to a card/dashboard; `archive` deactivates rather than deletes. Load the `notification` skill before authoring either body.
|
|
143
143
|
- **snippet `--archived` is a swap, not a union** — list returns _either_ active _or_ archived rows, never both. (Same for `--filter archived` on dashboard/collection.)
|
|
144
144
|
- **segment / measure.** `update` and `archive` require a non-blank `revision_message` (audit-logged); the CLI does not synthesize it on `update`. `archive` defaults to `"Archived via mb CLI"` — override with `--revision-message`. `definition` is a flat MBQL clause (→ `mbql`): segment = a filter, measure = exactly one aggregation.
|
|
145
|
-
- **timeline / timeline-event.**
|
|
145
|
+
- **timeline / timeline-event.** A timeline's events draw only on time-series questions saved in the **same collection** (`collection_id`; null = root) — not sub-collections, never on dashboard cards — and only when the event's `timestamp` falls inside the chart's range. Event `create` requires `timestamp` (ISO 8601), `timezone` (IANA name), `time_matters` (false = date-only), and `timeline_id` — no default timeline is auto-created. There is no `timeline-event list`; use `timeline events <id>` (`--archived` to include archived). Archiving a timeline cascades to its events; `delete` is a **hard** delete of both — prefer `archive`.
|
|
146
146
|
- **collection `<ref>`** (`get`/`items`): positive int, `root`, `trash`, or a 21-char entity_id; `update`/`archive` take the int only. `collection items` pages the server, pulling only what the cap can show — read `has_more`/`next_offset` to continue. `collection tree` is **JSON-only** and hides the Library without `--include-library`. A transform collection needs `collection create --namespace transforms`. `update` keeps `archived` unless `--archived` is given.
|
|
147
|
+
<!-- requires: remoteSync -->
|
|
148
|
+
- **remote-synced collections.** Synced content may depend only on synced content: a write that breaks this fails with 400 `Uses content that is not remote synced.` (a source outside sync scope) or `Used by remote synced content.` (archiving or moving out a dependency). Build versioned content inside the synced collection; to move existing content in, see `git-sync`.
|
|
149
|
+
<!-- /requires -->
|
|
147
150
|
- **setting set** parses the value as **strict JSON**: a string is `'"value"'` (inner quotes), booleans `true`/`false`, numbers bare. Wrong quoting silently errors — confirm with `setting get <key>` after. `setting get --json` works on every value type (wrapping bare-text responses into `{key, value}`).
|
|
148
151
|
- **search vs. list.** Enumerate with `… list` verbs; `search` ranks a query or spans resources. `--search-native-query` matches native query text and keeps only query-bearing models; dashboard questions need `--include-dashboard-questions`.
|
|
149
152
|
<!-- requires: transforms -->
|
|
@@ -171,9 +174,6 @@ This file is enough for any single-command task. For anything deeper, load the r
|
|
|
171
174
|
- **`notification`** — scheduled delivery: question alerts (`mb alert`) and dashboard subscriptions (`mb subscription`). Choosing between them, the two schedule/recipient contracts, channel prerequisites, testing a send.
|
|
172
175
|
<!-- requires: transforms -->
|
|
173
176
|
- **`transform`** — transform body JSON, create + run-with-wait, run inspection, tags, jobs.
|
|
174
|
-
<!-- /requires -->
|
|
175
|
-
<!-- requires: transformTests -->
|
|
176
|
-
- **`transform-test-plan`** — planning transform tests.
|
|
177
177
|
<!-- /requires -->
|
|
178
178
|
- **`document`** — Metabase documents (TipTap body, embedding cards).
|
|
179
179
|
<!-- requires: remoteSync -->
|
|
@@ -12,6 +12,12 @@ A dashboard starts as cards on a grid; it becomes an **app** when filters drive
|
|
|
12
12
|
|
|
13
13
|
Inspect before you wire: `mb dashboard get <id> --json` hydrates `parameters`, `dashcards`, and `tabs`; `mb dashboard cards <id>` lists just the dashcards. To start from an existing dashboard, `mb dashboard copy <id> --collection-id <id> --json` copies it with its tabs and dashcards (the cards stay referenced; `--deep` duplicates the questions and metrics into the target collection, and a dashboard holding dashboard questions needs it). Cards left out of the copy come back by id as `uncopied`.
|
|
14
14
|
|
|
15
|
+
<!-- requires: remoteSync -->
|
|
16
|
+
|
|
17
|
+
A dashboard bound for a remote-synced collection is built in it directly: create the dashboard there, then its cards. A card only this dashboard shows is best a **dashboard question** — `card create` with `"dashboard_id": <dash-id>` and the dashboard's `collection_id` — so the dashboard and its questions move as one unit. A card shared across dashboards is a regular card and moves into the synced collection before any dashboard that uses it (`git-sync` → "Moving content into or out of a synced collection").
|
|
18
|
+
|
|
19
|
+
<!-- /requires -->
|
|
20
|
+
|
|
15
21
|
## Layout: the grid is 24 columns — not 12
|
|
16
22
|
|
|
17
23
|
Every dashcard carries `{col, row, size_x, size_y}` in grid units: `col` is 0-indexed from the left edge, `row` grows downward, and `col + size_x ≤ 24`. **Full-width is `size_x: 24` — Metabase's per-chart _default_ width of 12 is half a row.** A layout authored on the usual 12-column web-grid assumption crams the whole dashboard into the left half of the viewport. The server stores whatever geometry you send — overlaps and gaps included, no auto-fix.
|
|
@@ -15,7 +15,7 @@ This skill covers the import/export workflow. Flag conventions and auth setup li
|
|
|
15
15
|
|
|
16
16
|
## Precondition: read state before mutating
|
|
17
17
|
|
|
18
|
-
Always run `status` (or
|
|
18
|
+
Always run `status` (or the individual checks below) before `import` or `export`. Importing on a dirty instance silently rejects unless you pass `--force`.
|
|
19
19
|
|
|
20
20
|
<!-- requires: remoteSyncMerge -->
|
|
21
21
|
|
|
@@ -26,11 +26,18 @@ Exporting after the remote moved on ends in a `conflict` task unless the export
|
|
|
26
26
|
```bash
|
|
27
27
|
mb git-sync status --profile <n> --json # → branch, dirty, current task
|
|
28
28
|
mb git-sync is-dirty --profile <n> --json # → {is_dirty: bool}; instance has unexported changes
|
|
29
|
-
mb git-sync has-remote-changes --profile <n> --json # → {has_changes: bool, remote_version, local_version, cached}; remote has unimported commits
|
|
30
29
|
mb git-sync dirty --profile <n> --json # → list the dirty objects
|
|
31
30
|
mb git-sync current-task --profile <n> --json # → in-flight task (or idle)
|
|
32
31
|
```
|
|
33
32
|
|
|
33
|
+
<!-- requires: remoteSyncRemoteChanges -->
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
mb git-sync has-remote-changes --profile <n> --json # → {has_changes: bool, remote_version, local_version, cached}; remote has unimported commits
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
<!-- /requires -->
|
|
40
|
+
|
|
34
41
|
**Clean up before exporting.** If you've created entities you intend to delete (a failed transform you're going to retry, a card you authored to test a body shape, a draft dashboard) — do the deletes _before_ the first `git-sync export`. Once committed, the cleanup needs a second commit, and the failed entity stays visible in `git log` forever. For transforms, prefer `transform update <id>` over delete + create (see the `transform` skill).
|
|
35
42
|
|
|
36
43
|
## Import (remote → instance)
|
|
@@ -53,8 +60,13 @@ Pulls the configured branch and applies it to the instance. Polls until the task
|
|
|
53
60
|
Workflow:
|
|
54
61
|
|
|
55
62
|
1. Read state (above) — confirm `is_dirty: false` (or `--force` is intended).
|
|
56
|
-
2.
|
|
57
|
-
|
|
63
|
+
2. `git-sync import --branch <branch>` — runs to terminal status by default.
|
|
64
|
+
|
|
65
|
+
<!-- requires: remoteSyncRemoteChanges -->
|
|
66
|
+
|
|
67
|
+
Between the two, confirm `has-remote-changes` reports `has_changes: true` — there's actually something to import.
|
|
68
|
+
|
|
69
|
+
<!-- /requires -->
|
|
58
70
|
|
|
59
71
|
<!-- requires: remoteSyncMerge -->
|
|
60
72
|
|
|
@@ -110,17 +122,29 @@ mb git-sync export-preflight --profile <n> --json # → {has_changes, clean, c
|
|
|
110
122
|
|
|
111
123
|
A dry run against the live remote branch, writing nothing. Read it between the state check and the export, and decide from the fields:
|
|
112
124
|
|
|
113
|
-
| Answer | Meaning | Move
|
|
114
|
-
| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
115
|
-
| `has_changes: false` | The remote has not moved past the last sync, or nothing has been synced yet — and then `force_push_casualties` is empty whatever the remote holds. | `export -m "..."` applies as-is. Don't read empty casualties on a never-synced instance as leave to `--force`.
|
|
116
|
-
| `has_changes: true`, `reason: null` | The remote moved on. `clean` says whether a three-way merge would apply; `conflicts` names the entities changed on both sides; `summary` counts what a merge would fold in. | `clean: true`: `export --merge -m "..."`. `clean: false`: the conflicts need the user's call
|
|
117
|
-
| `reason: "history-rewritten"` | The remote was force-pushed or rebased, so there is no merge base. | Only `export --force` can push, and only with the user's explicit go-ahead; `force_push_casualties` is exactly what it would delete or overwrite.
|
|
125
|
+
| Answer | Meaning | Move |
|
|
126
|
+
| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
127
|
+
| `has_changes: false` | The remote has not moved past the last sync, or nothing has been synced yet — and then `force_push_casualties` is empty whatever the remote holds. | `export -m "..."` applies as-is. Don't read empty casualties on a never-synced instance as leave to `--force`. |
|
|
128
|
+
| `has_changes: true`, `reason: null` | The remote moved on. `clean` says whether a three-way merge would apply; `conflicts` names the entities changed on both sides; `summary` counts what a merge would fold in. | `clean: true`: `export --merge -m "..."`. `clean: false`: the conflicts need the user's call between the three options under "After a `conflict` task". A plain `export` ends in a `conflict` task, and so does `stash`: its new branch starts at the moved remote tip. |
|
|
129
|
+
| `reason: "history-rewritten"` | The remote was force-pushed or rebased, so there is no merge base. | Only `export --force` can push, and only with the user's explicit go-ahead; `force_push_casualties` is exactly what it would delete or overwrite. |
|
|
130
|
+
|
|
131
|
+
`force_push_casualties` is reported on every answer: it is the remote content a force push would discard instead of merging, so read it before ever passing `--force`. It is empty when nothing has been synced yet, yet `export --force` then replaces the remote's managed directories wholesale: check the remote before forcing a first export.
|
|
118
132
|
|
|
119
|
-
|
|
133
|
+
Read the preflight before every export: an export that finds the divergence itself ends in `conflict`, and after that these fields can't be trusted (below).
|
|
120
134
|
|
|
121
135
|
### After a `conflict` task
|
|
122
136
|
|
|
123
|
-
A task that ends in `conflict`
|
|
137
|
+
Never answer a conflict with a retry. A task that ends in `conflict` may make the server count the remote commit it saw as synced; the server version does not say whether it does. If it does, `has-remote-changes` and `export-preflight` report nothing pending, `force_push_casualties` comes back empty, and a retried `export`, `export --merge` or `import --merge` succeeds without bringing the remote's changes into Metabase; a later full or forced export can then overwrite them on the remote. So don't decide from those reads. Take the user's call between:
|
|
138
|
+
|
|
139
|
+
- **The remote's side:** `import --force`. Discards Metabase's un-pushed work.
|
|
140
|
+
- **Metabase's side:** `export --force`. Overwrites the remote, and its casualties can't be previewed after a conflict: show the user the remote's commits since the last export in git first.
|
|
141
|
+
- **Both, through a reviewed PR:**
|
|
142
|
+
1. Note the tracked branch from `mb git-sync status --json` (`branch`): this is `<original>`.
|
|
143
|
+
2. `mb git-sync create-branch <name>`
|
|
144
|
+
3. `mb git-sync export -m "..."`
|
|
145
|
+
4. `mb git-sync import --force`, which reloads the instance from `<name>`.
|
|
146
|
+
5. Open a PR from `<name>` into `<original>` and review its diff before it merges. If the server counted the conflict as synced, `<name>` starts at the remote's tip, so the PR can undo the remote's edits to the conflicting entities without a git conflict: restore any such edit in the PR.
|
|
147
|
+
6. Once the PR merges, `mb git-sync import --branch <original>` tracks the original branch again and loads the merged result.
|
|
124
148
|
|
|
125
149
|
<!-- /requires -->
|
|
126
150
|
|
|
@@ -169,7 +193,7 @@ mb git-sync remove-collection <collection-id> --profile <n> --json
|
|
|
169
193
|
|
|
170
194
|
`<collection-id>` is a **positive integer** (the bulk endpoint's schema is `pos-int? → boolean`; nano-id / `root` / `trash` refs are not supported). Get the id from `collection list` (see `core`).
|
|
171
195
|
|
|
172
|
-
Both verbs return `{ success: true
|
|
196
|
+
Both verbs return `{ success: true }`, plus a `task_id` only when the toggle started a follow-up task (e.g. a finalization import after switching to read-only).
|
|
173
197
|
|
|
174
198
|
**Cascade.** A toggle on a parent cascades to every descendant by `location` prefix — `add-collection 4` flips `4` plus every collection nested under it. `remove-collection 4` is the symmetric inverse. There is no per-leaf-only mode.
|
|
175
199
|
|
|
@@ -183,6 +207,32 @@ mb setting set remote-sync-type '"read-write"' --profile <n>
|
|
|
183
207
|
|
|
184
208
|
**Verifying the result.** `mb git-sync status --profile <n> --json` lists the flagged collections under `synced_collections`, and `mb collection get <id> --json` shows the per-collection `is_remote_synced` flag.
|
|
185
209
|
|
|
210
|
+
## Moving content into or out of a synced collection
|
|
211
|
+
|
|
212
|
+
When remote sync is configured and the content is meant to be versioned, create it in the synced collection from the start. Nothing reaches git until `git-sync export`, and "Clean up before exporting" covers the drafts.
|
|
213
|
+
|
|
214
|
+
Synced content may only depend on synced content. Creating a card, dashboard, document, or collection in a synced collection, moving one in, or updating one inside it walks its dependencies, and the server refuses with 400 `Uses content that is not remote synced.` if any of them sits outside sync scope. What counts as a dependency:
|
|
215
|
+
|
|
216
|
+
- **Card:** the cards it is built on (source model, question, or metric), cards referenced as `{{#id}}` in native SQL, the card behind a filter's value source (`values_source_config.card_id`), and snippets — a snippet counts as synced only when the Library is.
|
|
217
|
+
- **Dashboard:** every dashcard's card, `series` cards, cards in parameter mappings and parameter value sources, actions, and the cards and dashboards a link card points to.
|
|
218
|
+
- Warehouse tables never count: a card on a raw table moves freely.
|
|
219
|
+
|
|
220
|
+
Three ways through:
|
|
221
|
+
|
|
222
|
+
1. **Bottom-up.** Move the sources first — models, then metrics, then the questions built on them — and the dashboard last. `card update <id> --body '{"collection_id":<synced-id>}'`, then `dashboard update <id> --body '{"collection_id":<synced-id>}'`.
|
|
223
|
+
2. **The whole containing collection.** `mb collection update <id> --parent-id <synced-id>` checks once, after the whole subtree has moved, so references inside the subtree pass.
|
|
224
|
+
3. **Dashboard questions.** A card created with `dashboard_id` (and the dashboard's `collection_id`) moves with its dashboard in the same transaction, so it never blocks the move.
|
|
225
|
+
|
|
226
|
+
The reverse holds too: archiving something, or moving it out of sync scope, is refused with 400 `Used by remote synced content.` while synced content still depends on it. The error names the dependents by model and id (`Used by remote synced content: Card 12, Dashboard 3. …`); move or archive those first, or leave the dependency in place.
|
|
227
|
+
|
|
228
|
+
Reading the inbound refusal: the error lists the blocking content as bare ids with no model type (`Uses content that is not remote synced: ids 412, 77. …`) — these are the dependencies to move first. Most are cards (`mb card get <id>`); otherwise try `mb dashboard get <id>` or `mb snippet get <id>`, and match the name against the content you meant to move.
|
|
229
|
+
|
|
230
|
+
<!-- requires: dependencyGraph -->
|
|
231
|
+
|
|
232
|
+
To plan the order before the first move, `mb dependency graph dashboard <id> --json` (or `card <id>`) lists everything the entity reads from; every card and snippet node outside the synced collection moves first.
|
|
233
|
+
|
|
234
|
+
<!-- /requires -->
|
|
235
|
+
|
|
186
236
|
<!-- requires: library -->
|
|
187
237
|
|
|
188
238
|
## Published table metadata (Library) and sync scope
|
|
@@ -203,11 +253,11 @@ Flagging the collection records it for the next export, which serializes its cur
|
|
|
203
253
|
|
|
204
254
|
## Don't (git-sync-specific)
|
|
205
255
|
|
|
206
|
-
- Don't turn instance-side changes into hand-written repo files
|
|
256
|
+
- Don't turn instance-side changes into hand-written repo files: export them and PR the exported branch (see the top of this skill). Files pushed behind Metabase's back race its own sync tasks.
|
|
207
257
|
- Don't conclude from an empty `dirty` list that a change type isn't tracked. Dirty-tracking only records changes to _eligible_ objects; the usual cause is scope (the collection isn't flagged — see "Published table metadata"), not capability. Check `synced_collections` in `status` before concluding.
|
|
208
258
|
- Don't run `git-sync import --force` or `git-sync export --force` without explicit user confirmation. Both are lossy — `--force` import discards instance-side work, `--force` export overwrites the remote branch.
|
|
209
259
|
- Don't drive `git-sync` against a Metabase instance that doesn't have remote-sync configured — every verb returns an error pointing at the missing `remote-sync-*` settings. To check: `mb setting get remote-sync-url --profile <n> --json`.
|
|
210
260
|
- Don't author content directly via `card create` / `transform create` and then assume `git-sync export` will commit it cleanly — the instance and repo can drift if you mix direct API writes with sync-tracked changes. If you do, follow direct writes immediately with `git-sync export -m "..."` to keep them in step.
|
|
261
|
+
- Don't move a dashboard or question into a synced collection before what it depends on, and don't retry a `Uses content that is not remote synced.` refusal unchanged. Move the listed dependencies first, move the whole containing collection, or build the content in the synced collection to begin with (see "Moving content into or out of a synced collection").
|
|
211
262
|
- Don't omit `-m` on `export` if the user wants a meaningful commit message — the default server-generated message is generic.
|
|
212
|
-
- Don't `git-sync export` to `main`/`master` without explicit user confirmation — sync work is conventionally on a feature branch. See "Branch guard" above.
|
|
213
263
|
- Don't reach for `mb setting set` to mark a collection as remote-synced — that endpoint writes single-key settings, not the bulk `collections` map. Use `mb git-sync add-collection <id>` / `mb git-sync remove-collection <id>` (above), and remember the toggle cascades to descendants.
|
|
@@ -112,6 +112,6 @@ mb card query 12 --parameters '[{"type":"string/=","target":["dimension",["templ
|
|
|
112
112
|
|
|
113
113
|
- Don't wrap a field filter in an operator (`WHERE col = {{ff}}`) — write it bare (`WHERE {{ff}}`).
|
|
114
114
|
- Don't author the flat `{type:"native", …}` form — send the native stage above.
|
|
115
|
-
- Don't use native SQL for DDL or multiple statements — the editor is read-only, single-statement; `CREATE`/`UPDATE`/`;`-chained SQL is unsupported. To materialize a table, use a `transform
|
|
115
|
+
- Don't use native SQL for DDL or multiple statements — the editor is read-only, single-statement; `CREATE`/`UPDATE`/`;`-chained SQL is unsupported. To materialize a table, use a `transform`.
|
|
116
116
|
- Don't expect `[[ ]]` to save you from a case/type mismatch — `WHERE plan = {{p}}` returns zero rows on a case-sensitive engine if the value's case is off; that's a value problem, not syntax.
|
|
117
117
|
- Don't reach for native when a structured query fits — you lose the engine-independence and readability of an `mbql.stage/mbql` stage.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: transform
|
|
3
|
-
description: Author and run Metabase transforms via `mb` — body shape (native SQL or structured MBQL), create + run-with-wait, run inspection, dependencies, cancel, the `update`-vs-recreate iteration rule, the writable-keys-only PATCH contract,
|
|
3
|
+
description: Author and run Metabase transforms via `mb` — body shape (native SQL or structured MBQL), create + run-with-wait, run inspection, dependencies, cancel, the `update`-vs-recreate iteration rule, the writable-keys-only PATCH contract, plus transform tags and tag-driven transform-job schedules. Load when the user touches transforms — "create a transform", "run a transform", "fix a failing transform", "list transform runs", "cancel a running transform", "manage transform tags", "run a transform job", or anything `mb transform …` / `mb transform-job …` / `mb transform-tag …`.
|
|
4
4
|
allowed-tools: Read, Write, Edit, Bash, AskUserQuestion
|
|
5
5
|
requires: [transforms]
|
|
6
6
|
---
|
|
@@ -173,68 +173,6 @@ mb transform run "$ID" --wait --profile <n> --json # → succeeded
|
|
|
173
173
|
|
|
174
174
|
If you really must `create + delete` instead, do the `delete` **before** the first `git-sync export` so the failed entity never lands in git history — an export of a soft-failed state is noise that needs a follow-up cleanup commit. See `git-sync`, "Read state before mutating", for the ordering rule.
|
|
175
175
|
|
|
176
|
-
<!-- requires: transformTests -->
|
|
177
|
-
|
|
178
|
-
## Transform tests
|
|
179
|
-
|
|
180
|
-
A transform test replaces every table the transform reads with a fixture, runs it into a temp table, and checks that output. The transform and the expectations read only the run's temp tables; a `format: "sql"` input runs verbatim against the transform's source database, so it may read real tables. Only query transforms (native SQL or MBQL) can be tested, and only on Postgres, MySQL, H2, ClickHouse, Redshift or SQL Server; otherwise `create`/`update`/`run` refuse with `transform-test.unsupported-transform` / `unsupported-driver` (422).
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
mb transform-test list --transform-id <id> --profile <n> --json # --transform-id is optional
|
|
184
|
-
mb transform-test get <id> --full --profile <n> --json # --full for inputs/expectations
|
|
185
|
-
mb transform-test create --file ./.scratch/test.json --profile <n> --json
|
|
186
|
-
mb transform-test update <id> --file ./.scratch/patch.json --profile <n> --json
|
|
187
|
-
mb transform-test delete <id> --yes --profile <n>
|
|
188
|
-
mb transform-test run <id> --profile <n> --json # exits 1 unless it passes
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
**`inputs`** — one per table the transform reads, each naming a `table` plus either `format: "sql"` with `sql`, or `format: "rows"` with `columns` (each a `name` and a `cast_type`) and `rows`.
|
|
192
|
-
|
|
193
|
-
**`cast_type` is a `CAST` target, not a column type**, and the two vocabularies differ per warehouse: MySQL casts to `SIGNED` and reports `BIGINT`; ClickHouse takes `Nullable(Int32)` for a column that is `Int64`. So a body is warehouse-specific — don't copy a `database_type` out of a run result into a `cast_type`, and don't expect one body to run everywhere.
|
|
194
|
-
|
|
195
|
-
**`expectations`** — `type: "empty"` with the `sql` that must return no rows, or `type: "equals"` with `format: "rows"` and the `columns` and `rows` the output must hold exactly. `equals` compares the rows as a multiset over the declared columns only, so an output column it does not declare is never checked. An `equals` without a `format` is refused, and one with `format: "sql"` is saved but reports `error` on every run, so its test can never pass.
|
|
196
|
-
|
|
197
|
-
**Expectation SQL may only name the transform's target table and its declared input tables.** Those are rewritten to the run's temp tables; any other table is refused with `transform-test.unremapped-reference` (400), at `create`/`update` as well as `run`. A column qualified by its table name (`people.id`) is refused the same way, in expectation SQL and in the transform's own SQL alike: qualify by an alias (`FROM people p … p.id`) or leave the column bare — for the transform's SQL that means editing the transform. Expectation names are unique within a test (refused with "expectation names must be unique within a test"), and every `rows` row carries exactly its declared columns (refused naming the missing or undeclared columns).
|
|
198
|
-
|
|
199
|
-
```json
|
|
200
|
-
{
|
|
201
|
-
"transform_id": 1,
|
|
202
|
-
"name": "adults only",
|
|
203
|
-
"inputs": [
|
|
204
|
-
{
|
|
205
|
-
"table": { "schema": "public", "name": "people" },
|
|
206
|
-
"format": "rows",
|
|
207
|
-
"columns": [
|
|
208
|
-
{ "name": "id", "cast_type": "INTEGER" },
|
|
209
|
-
{ "name": "age", "cast_type": "INTEGER" }
|
|
210
|
-
],
|
|
211
|
-
"rows": [
|
|
212
|
-
{ "id": 1, "age": 30 },
|
|
213
|
-
{ "id": 2, "age": 12 }
|
|
214
|
-
]
|
|
215
|
-
}
|
|
216
|
-
],
|
|
217
|
-
"expectations": [
|
|
218
|
-
{
|
|
219
|
-
"type": "equals",
|
|
220
|
-
"name": "exactly one row, id 1",
|
|
221
|
-
"format": "rows",
|
|
222
|
-
"columns": [{ "name": "id", "cast_type": "INTEGER" }],
|
|
223
|
-
"rows": [{ "id": 1 }]
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
"type": "empty",
|
|
227
|
-
"name": "no null ids",
|
|
228
|
-
"sql": "SELECT * FROM public.adults WHERE id IS NULL"
|
|
229
|
-
}
|
|
230
|
-
]
|
|
231
|
-
}
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
Create and update bodies are closed at every level (the top level is checked before sending; a stray nested key is a 400) — strip `id`, `entity_id`, `creator_id`, `created_at` and `updated_at` from a `get --full` body before sending it back.
|
|
235
|
-
|
|
236
|
-
<!-- /requires -->
|
|
237
|
-
|
|
238
176
|
## Drop the materialized table (keep the transform)
|
|
239
177
|
|
|
240
178
|
```bash
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { J as outputFlags, U as connectionFlags, Y as profileFlag, p as renderSummary } from "./cli.mjs";
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-X6hVzSMW.mjs";
|
|
3
|
-
import { t as parseId } from "./parse-id-CxHp2akh.mjs";
|
|
4
|
-
import { t as DataAction } from "./data-action-DZxVB_hD.mjs";
|
|
5
|
-
import { n as dataActionView } from "./data-action-R9qxJDPA.mjs";
|
|
6
|
-
//#region src/commands/data-action/archive.ts
|
|
7
|
-
var archive_default = defineMetabaseCommand({
|
|
8
|
-
meta: {
|
|
9
|
-
name: "archive",
|
|
10
|
-
description: "Archive (soft-delete) a data action by id"
|
|
11
|
-
},
|
|
12
|
-
requires: ["dataAction.archive"],
|
|
13
|
-
args: {
|
|
14
|
-
...outputFlags,
|
|
15
|
-
...profileFlag,
|
|
16
|
-
...connectionFlags,
|
|
17
|
-
id: {
|
|
18
|
-
type: "positional",
|
|
19
|
-
description: "Data action id",
|
|
20
|
-
required: true
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
outputSchema: DataAction,
|
|
24
|
-
examples: ["mb data-action archive 1"],
|
|
25
|
-
async run({ args, ctx, getClient }) {
|
|
26
|
-
const id = parseId(args.id);
|
|
27
|
-
const updated = await (await getClient()).dataAction.archive(id);
|
|
28
|
-
renderSummary(updated, dataActionView, `Archived data action ${updated.id} "${updated.name}".`, ctx);
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
//#endregion
|
|
32
|
-
export { archive_default as default };
|
package/dist/card-P2-4BkXV.mjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { t as defineCommandGroup } from "./group-D4w87fXL.mjs";
|
|
2
|
-
//#region src/commands/card/index.ts
|
|
3
|
-
var card_default = defineCommandGroup({
|
|
4
|
-
name: "card",
|
|
5
|
-
description: "Manage Metabase cards (questions, models, metrics)",
|
|
6
|
-
skills: [{
|
|
7
|
-
skill: "mbql",
|
|
8
|
-
purpose: "author the dataset_query"
|
|
9
|
-
}, {
|
|
10
|
-
skill: "visualization",
|
|
11
|
-
purpose: "choose display and visualization_settings"
|
|
12
|
-
}],
|
|
13
|
-
subCommands: {
|
|
14
|
-
list: () => import("./list-gqemddWB.mjs").then((mod) => mod.default),
|
|
15
|
-
get: () => import("./get-CWBN0G-4.mjs").then((mod) => mod.default),
|
|
16
|
-
query: () => import("./query-CsBe-kJn.mjs").then((mod) => mod.default),
|
|
17
|
-
alerts: () => import("./alerts-_ELZ12ye.mjs").then((mod) => mod.default),
|
|
18
|
-
create: () => import("./create-cqbpWaOi.mjs").then((mod) => mod.default),
|
|
19
|
-
update: () => import("./update-CHA4VWKT.mjs").then((mod) => mod.default),
|
|
20
|
-
verify: () => import("./verify-C2K-zMuQ.mjs").then((mod) => mod.default),
|
|
21
|
-
archive: () => import("./archive-CwBk5vxQ.mjs").then((mod) => mod.default)
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
//#endregion
|
|
25
|
-
export { card_default as default };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { t as defineCommandGroup } from "./group-D4w87fXL.mjs";
|
|
2
|
-
//#region src/commands/collection/index.ts
|
|
3
|
-
var collection_default = defineCommandGroup({
|
|
4
|
-
name: "collection",
|
|
5
|
-
description: "Manage Metabase collections",
|
|
6
|
-
skills: [{
|
|
7
|
-
skill: "core",
|
|
8
|
-
purpose: "collection ref forms and the transforms namespace"
|
|
9
|
-
}],
|
|
10
|
-
subCommands: {
|
|
11
|
-
list: () => import("./list-C7PV9fYj.mjs").then((mod) => mod.default),
|
|
12
|
-
get: () => import("./get-xmhwvAQJ.mjs").then((mod) => mod.default),
|
|
13
|
-
items: () => import("./items-DNdICQ7M.mjs").then((mod) => mod.default),
|
|
14
|
-
tree: () => import("./tree-oBEw8hDj.mjs").then((mod) => mod.default),
|
|
15
|
-
create: () => import("./create-BfA1pnmS.mjs").then((mod) => mod.default),
|
|
16
|
-
update: () => import("./update-BqrZ-8IK.mjs").then((mod) => mod.default),
|
|
17
|
-
archive: () => import("./archive-ZnHzMJaM.mjs").then((mod) => mod.default)
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
//#endregion
|
|
21
|
-
export { collection_default as default };
|
package/dist/create--b64pMVM.mjs
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { J as outputFlags, U as connectionFlags, Y as profileFlag, p as renderSummary } from "./cli.mjs";
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-X6hVzSMW.mjs";
|
|
3
|
-
import { t as readBody } from "./body-BVrHLwJU.mjs";
|
|
4
|
-
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
5
|
-
import { r as TransformTestCreateInput, t as TransformTest } from "./transform-test-BjjCQ2xm.mjs";
|
|
6
|
-
import { n as transformTestView } from "./transform-test-DHGKeuHa.mjs";
|
|
7
|
-
//#region src/commands/transform-test/create.ts
|
|
8
|
-
var create_default = defineMetabaseCommand({
|
|
9
|
-
meta: {
|
|
10
|
-
name: "create",
|
|
11
|
-
description: "Create a transform test from JSON"
|
|
12
|
-
},
|
|
13
|
-
details: "The JSON body needs a `transform_id`, a `name`, the `inputs` standing in for every table the transform reads, and the `expectations` checked against its output. An input names its `table` and carries either `format: \"sql\"` with a `sql` query or `format: \"rows\"` with `columns` and `rows`. An expectation is either `type: \"empty\"` with the `sql` that must return nothing, or `type: \"equals\"` with `format: \"rows\"` and the `columns` and `rows` the output must hold exactly. The body is closed at every level: a test read back with `get --full` has to shed `id`, `entity_id`, `creator_id`, `created_at` and `updated_at` before it can be sent.",
|
|
14
|
-
requires: ["transformTest.create"],
|
|
15
|
-
args: {
|
|
16
|
-
...outputFlags,
|
|
17
|
-
...profileFlag,
|
|
18
|
-
...connectionFlags,
|
|
19
|
-
...bodyInputFlags
|
|
20
|
-
},
|
|
21
|
-
inputSchema: TransformTestCreateInput,
|
|
22
|
-
outputSchema: TransformTest,
|
|
23
|
-
examples: ["cat transform-test.json | mb transform-test create", "mb transform-test create --file transform-test.json"],
|
|
24
|
-
async run({ args, ctx, getClient }) {
|
|
25
|
-
const body = await readBody({
|
|
26
|
-
flag: args.body,
|
|
27
|
-
file: args.file
|
|
28
|
-
}, TransformTestCreateInput);
|
|
29
|
-
const created = await (await getClient()).transformTest.create(body);
|
|
30
|
-
renderSummary(created, transformTestView, `Created transform test ${created.id} "${created.name}".`, ctx);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
//#endregion
|
|
34
|
-
export { create_default as default };
|
package/dist/create-C7fVbQbQ.mjs
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { J as outputFlags, U as connectionFlags, Y as profileFlag, p as renderSummary } from "./cli.mjs";
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-X6hVzSMW.mjs";
|
|
3
|
-
import { t as readBody } from "./body-BVrHLwJU.mjs";
|
|
4
|
-
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
5
|
-
import { r as DataActionCreateInput, t as DataAction } from "./data-action-DZxVB_hD.mjs";
|
|
6
|
-
import { n as DATA_ACTION_DATASET_QUERY_LABELS, o as preflightMbql5Query, s as skipValidateFlag } from "./validate-query-DIcK8alR.mjs";
|
|
7
|
-
import { n as dataActionView } from "./data-action-R9qxJDPA.mjs";
|
|
8
|
-
//#region src/commands/data-action/create.ts
|
|
9
|
-
var create_default = defineMetabaseCommand({
|
|
10
|
-
meta: {
|
|
11
|
-
name: "create",
|
|
12
|
-
description: "Create a data action from JSON"
|
|
13
|
-
},
|
|
14
|
-
details: "A data action is a parameterized native query that writes to a database, filed in a collection. The JSON body needs `name`, `type: \"query\"`, `database_id`, a native `dataset_query` whose `{{tag}}` placeholders are its inputs, and `parameters` targeting those tags; `collection_id` picks the collection (omit for the root). Data actions must be enabled on the database. An MBQL 5 `dataset_query` is checked against a bundled JSON Schema before sending; pass --skip-validate to bypass.",
|
|
15
|
-
skills: [{
|
|
16
|
-
skill: "data-action",
|
|
17
|
-
purpose: "author a data action and its parameters"
|
|
18
|
-
}, {
|
|
19
|
-
skill: "native-sql",
|
|
20
|
-
purpose: "the native query and its template tags"
|
|
21
|
-
}],
|
|
22
|
-
requires: ["dataAction.create"],
|
|
23
|
-
args: {
|
|
24
|
-
...outputFlags,
|
|
25
|
-
...profileFlag,
|
|
26
|
-
...connectionFlags,
|
|
27
|
-
...bodyInputFlags,
|
|
28
|
-
...skipValidateFlag
|
|
29
|
-
},
|
|
30
|
-
inputSchema: DataActionCreateInput,
|
|
31
|
-
outputSchema: DataAction,
|
|
32
|
-
examples: [
|
|
33
|
-
"cat data-action.json | mb data-action create",
|
|
34
|
-
"mb data-action create --file data-action.json",
|
|
35
|
-
"mb data-action create --file data-action.json --skip-validate"
|
|
36
|
-
],
|
|
37
|
-
async run({ args, ctx, getClient }) {
|
|
38
|
-
const body = await readBody({
|
|
39
|
-
flag: args.body,
|
|
40
|
-
file: args.file
|
|
41
|
-
}, DataActionCreateInput);
|
|
42
|
-
preflightMbql5Query(body.dataset_query, DATA_ACTION_DATASET_QUERY_LABELS, { skip: args["skip-validate"] === true });
|
|
43
|
-
const created = await (await getClient()).dataAction.create(body);
|
|
44
|
-
renderSummary(created, dataActionView, `Created data action ${created.id} "${created.name}".`, ctx);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
//#endregion
|
|
48
|
-
export { create_default as default };
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { t as defineCommandGroup } from "./group-D4w87fXL.mjs";
|
|
2
|
-
//#region src/commands/dashboard/index.ts
|
|
3
|
-
var dashboard_default = defineCommandGroup({
|
|
4
|
-
name: "dashboard",
|
|
5
|
-
description: "Manage Metabase dashboards",
|
|
6
|
-
skills: [
|
|
7
|
-
{
|
|
8
|
-
skill: "dashboard",
|
|
9
|
-
purpose: "wiring filters, linked filters, cross-filtering, click behavior, tabs"
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
skill: "visualization",
|
|
13
|
-
purpose: "dashcard display and visualization_settings"
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
skill: "core",
|
|
17
|
-
purpose: "the 24-column dashcard grid layout"
|
|
18
|
-
}
|
|
19
|
-
],
|
|
20
|
-
subCommands: {
|
|
21
|
-
list: () => import("./list-__Q79YXk.mjs").then((mod) => mod.default),
|
|
22
|
-
get: () => import("./get-BvUNnNRq.mjs").then((mod) => mod.default),
|
|
23
|
-
cards: () => import("./cards-B1pyPl77.mjs").then((mod) => mod.default),
|
|
24
|
-
"parameter-values": () => import("./parameter-values-BY2WA9qg.mjs").then((mod) => mod.default),
|
|
25
|
-
subscriptions: () => import("./subscriptions-DIRsHcKP.mjs").then((mod) => mod.default),
|
|
26
|
-
create: () => import("./create-BzE4q6F_.mjs").then((mod) => mod.default),
|
|
27
|
-
update: () => import("./update-D9eLVWFQ.mjs").then((mod) => mod.default),
|
|
28
|
-
"update-dashcard": () => import("./update-dashcard-DNsf-gJ1.mjs").then((mod) => mod.default),
|
|
29
|
-
copy: () => import("./copy-DAKdksBm.mjs").then((mod) => mod.default),
|
|
30
|
-
verify: () => import("./verify-CA4PEHlO.mjs").then((mod) => mod.default),
|
|
31
|
-
archive: () => import("./archive-D22VL5Bx.mjs").then((mod) => mod.default)
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
//#endregion
|
|
35
|
-
export { dashboard_default as default };
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { t as defineCommandGroup } from "./group-D4w87fXL.mjs";
|
|
2
|
-
//#region src/commands/data-action/index.ts
|
|
3
|
-
var data_action_default = defineCommandGroup({
|
|
4
|
-
name: "data-action",
|
|
5
|
-
description: "Manage Metabase data actions",
|
|
6
|
-
skills: [{
|
|
7
|
-
skill: "data-action",
|
|
8
|
-
purpose: "author and run data actions"
|
|
9
|
-
}, {
|
|
10
|
-
skill: "native-sql",
|
|
11
|
-
purpose: "the data action's native query and its template tags"
|
|
12
|
-
}],
|
|
13
|
-
subCommands: {
|
|
14
|
-
list: () => import("./list-Owrzgtkc.mjs").then((mod) => mod.default),
|
|
15
|
-
get: () => import("./get-BwKQw_rR.mjs").then((mod) => mod.default),
|
|
16
|
-
create: () => import("./create-C7fVbQbQ.mjs").then((mod) => mod.default),
|
|
17
|
-
update: () => import("./update-Bdi40RG0.mjs").then((mod) => mod.default),
|
|
18
|
-
archive: () => import("./archive-3MQyc5Ih.mjs").then((mod) => mod.default),
|
|
19
|
-
delete: () => import("./delete-B0O-mf63.mjs").then((mod) => mod.default),
|
|
20
|
-
execute: () => import("./execute-DvBse4aF.mjs").then((mod) => mod.default)
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
//#endregion
|
|
24
|
-
export { data_action_default as default };
|