@metabase/cli 0.4.0 → 0.4.1-alpha.release-65-integration-branch.5cbe297
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-CC6KSwjX.mjs → add-collection-hv29px39.mjs} +3 -3
- package/dist/{alert-Dt6La9tK.mjs → alert-DnTCjYIu.mjs} +7 -7
- package/dist/{alerts-ClKnJqgB.mjs → alerts-_ELZ12ye.mjs} +6 -6
- package/dist/{append-pnaQWP_A.mjs → append-B9sLLPYT.mjs} +4 -4
- package/dist/archive-3MQyc5Ih.mjs +32 -0
- package/dist/{archive-ewitrKdx.mjs → archive-BAHzxkPR.mjs} +5 -5
- package/dist/{archive-D7nAQcCz.mjs → archive-BRX5fKPb.mjs} +3 -3
- package/dist/{archive-Ct1eyolN.mjs → archive-BdX0Uvf2.mjs} +3 -3
- package/dist/{archive-YNpa8daf.mjs → archive-BhIeDoLk.mjs} +3 -3
- package/dist/{archive-DtabbPUk.mjs → archive-CKWWyI1i.mjs} +4 -4
- package/dist/{archive-By1pLYtO.mjs → archive-CdfyB0To.mjs} +3 -3
- package/dist/{archive-DJAsSzCz.mjs → archive-CwBk5vxQ.mjs} +5 -5
- package/dist/{archive-CLu2TGW5.mjs → archive-D22VL5Bx.mjs} +3 -3
- package/dist/{archive-COP9joWU.mjs → archive-DD8C0Krt2.mjs} +4 -4
- package/dist/{archive-CSnBFcQ_.mjs → archive-DDUSmbjn.mjs} +3 -3
- package/dist/{archive-DEDA48w3.mjs → archive-ZnHzMJaM.mjs} +5 -5
- package/dist/{auth-DdLhXCn-.mjs → auth-Ca84a5fv.mjs} +5 -5
- package/dist/{body-Dd-TwYYL.mjs → body-BVrHLwJU.mjs} +3 -3
- package/dist/{branch-flag-pFQPNYKr.mjs → branch-flag-Czh8JT1G.mjs} +1 -1
- package/dist/{branches-ZvGNhed6.mjs → branches-frSt4WcS.mjs} +3 -3
- package/dist/{breaking-BLswgvkA.mjs → breaking-zlgxxwdd.mjs} +6 -6
- package/dist/{broken-BN0nL2hf.mjs → broken-BUAzpKLc.mjs} +8 -8
- package/dist/{bulk-discard-values-DFJUjSnE.mjs → bulk-discard-values-DU15VJPb.mjs} +5 -5
- package/dist/{bulk-edit-Brqr67bu.mjs → bulk-edit-TSa4lNkM.mjs} +4 -4
- package/dist/{bulk-rescan-values-DndXXi2N.mjs → bulk-rescan-values-BYJAsPC1.mjs} +4 -4
- package/dist/{bulk-sync-schema-mO-t2QlL.mjs → bulk-sync-schema-DtaOwEtW.mjs} +4 -4
- package/dist/{cancel-DP03dXBf.mjs → cancel-DCOvSQsq.mjs} +3 -3
- package/dist/{cancel-task-CELBfBPP.mjs → cancel-task-osQLETJh.mjs} +2 -2
- package/dist/{card-DSrgU7lT.mjs → card-CQNUT9pm.mjs} +1 -1
- package/dist/card-P2-4BkXV.mjs +25 -0
- package/dist/{card-Bv4ZN0oV.mjs → card-P5mBknsl.mjs} +2 -12
- package/dist/{cards-Cn2ywFTJ.mjs → cards-B1pyPl77.mjs} +4 -4
- package/dist/cli.mjs +79 -48
- package/dist/{client-ToLiPu9q.mjs → client-1UIUBA_V.mjs} +91 -482
- package/dist/collection-BI8Fy9vS.mjs +21 -0
- package/dist/{collection-D3KXhvnc.mjs → collection-BgPYl2c5.mjs} +1 -1
- package/dist/{collection-BG3Ksea-.mjs → collection-DPiztU_l.mjs} +1 -1
- package/dist/{collection-namespace-CWW6hZxK.mjs → collection-namespace-Cizv6-94.mjs} +2 -2
- package/dist/{content-translation-C19SqZWp.mjs → content-translation-XnHISl5-.mjs} +3 -3
- package/dist/{copy-COLUuiuF.mjs → copy-BCVW48Jq.mjs} +6 -6
- package/dist/{copy-BGK8Wz6d.mjs → copy-DAKdksBm.mjs} +4 -4
- package/dist/{copy-flags-eU8aa0zj.mjs → copy-flags-D7NTgAz1.mjs} +2 -2
- package/dist/create--b64pMVM.mjs +34 -0
- package/dist/{create-B63JphYe.mjs → create-B1ifNWcE.mjs} +5 -5
- package/dist/{create-Dx8nfjGs.mjs → create-B57D5E-o.mjs} +3 -3
- package/dist/{create-DSHeoV7e.mjs → create-B5eo9PSN.mjs} +4 -4
- package/dist/{create-B2tuInV9.mjs → create-BOvtRwRz.mjs} +4 -4
- package/dist/{create-CzW_UTE7.mjs → create-BfA1pnmS.mjs} +6 -6
- package/dist/{create-B3TKri1E.mjs → create-Br5JxAeE.mjs} +4 -4
- package/dist/{create-DNR8RMvV.mjs → create-BzE4q6F_.mjs} +4 -4
- package/dist/create-C7fVbQbQ.mjs +48 -0
- package/dist/{create-g1f2yJ4s.mjs → create-CW4WF073.mjs} +3 -3
- package/dist/{create-Colz5bOO.mjs → create-CuhQ1Khk.mjs} +3 -3
- package/dist/{create-XGomrTz5.mjs → create-D2iZsTRV.mjs} +5 -5
- package/dist/{create-BH6kLjHS.mjs → create-D7zeAm-0.mjs} +4 -4
- package/dist/{create-CulUZgN1.mjs → create-KyeJjhxH2.mjs} +4 -4
- package/dist/{create-Cxuqr3kT.mjs → create-XnYN2zoc.mjs} +6 -6
- package/dist/{create-branch-DxL7KUZp.mjs → create-branch-Cli5cXvk.mjs} +2 -2
- package/dist/{create-DWbW2WSc.mjs → create-cqbpWaOi.mjs} +6 -6
- package/dist/{create-B4gXKDRr.mjs → create-g4pZa_Xa.mjs} +3 -3
- package/dist/{create-BwifyhyL.mjs → create-qCgnB-oZ.mjs} +3 -3
- package/dist/{csv-C6TEfLMi.mjs → csv-CWIcAm_-.mjs} +4 -4
- package/dist/{current-task-CHs0zNFM.mjs → current-task-eBjusv2o.mjs} +3 -3
- package/dist/dashboard-C-YJxDam.mjs +35 -0
- package/dist/data-action-DER3EMD7.mjs +24 -0
- package/dist/data-action-DZxVB_hD.mjs +85 -0
- package/dist/data-action-R9qxJDPA.mjs +40 -0
- package/dist/{database-D-CRyRIv.mjs → database-BT7DVgSr.mjs} +1 -1
- package/dist/{database-MlUPpitM.mjs → database-Kq2AL5jH.mjs} +1 -1
- package/dist/{dataset-p5oNPQgL.mjs → dataset-BmvCxGoE.mjs} +1 -1
- package/dist/{db-BFSeETMO.mjs → db-_H9HAS6H.mjs} +7 -7
- package/dist/delete-B0O-mf63.mjs +44 -0
- package/dist/{delete-D79TlpcE.mjs → delete-BMvVkW-m.mjs} +4 -4
- package/dist/{delete-DZJxBmdU.mjs → delete-BW5QXiyJ.mjs} +4 -4
- package/dist/{delete-BUKgSJhh.mjs → delete-BztmAfPc.mjs} +4 -4
- package/dist/{delete-DndykJn2.mjs → delete-C7QmQlp9.mjs} +4 -4
- package/dist/{delete-Cucqn4-V.mjs → delete-CynbfvS2.mjs} +4 -4
- package/dist/{delete-CPBByycV.mjs → delete-DOn2uk0u.mjs} +4 -4
- package/dist/delete-DPU-uQxU.mjs +44 -0
- package/dist/{delete-runtime-BbmRg_in.mjs → delete-runtime-Cc7TASG7.mjs} +1 -1
- package/dist/{delete-table-CbsWcjh5.mjs → delete-table-DFqm6bAq.mjs} +4 -4
- package/dist/{dependencies-B-880phi.mjs → dependencies-DZ-kMsDa.mjs} +5 -5
- package/dist/{dependency-DKSjKT8P.mjs → dependency-B4J1bwFh.mjs} +2 -2
- package/dist/{dependency-DSxKm9oS.mjs → dependency-BHKwKjhO.mjs} +2 -2
- package/dist/dependency-v9fHJ-N-.mjs +15 -0
- package/dist/{dependents-C_FDnpZs.mjs → dependents-Ia2fe_KK.mjs} +9 -9
- package/dist/{dirty-B-Is68--.mjs → dirty-BrXAPows.mjs} +3 -3
- package/dist/{discard-values-yzH-kIsr.mjs → discard-values-B9mTgFbV.mjs} +5 -5
- package/dist/{document-C18b5rM6.mjs → document-BsaKF8UR.mjs} +1 -1
- package/dist/document-CGvUmD9i.mjs +20 -0
- package/dist/{document-DFCj1Az_.mjs → document-COQzVLjW.mjs} +1 -1
- package/dist/{download-DluF-vnU.mjs → download-CZdsDdhG.mjs} +2 -2
- package/dist/{eid-Dz-mP40j.mjs → eid-DsGNJ16z.mjs} +4 -4
- package/dist/{entity-CA4zfRt4.mjs → entity-BFajNdQp.mjs} +2 -2
- package/dist/{entry-flags-7x7bIyOQ.mjs → entry-flags-BaZUoxUR.mjs} +4 -4
- package/dist/{events-2sOk6H09.mjs → events-rkMIMpnS.mjs} +4 -4
- package/dist/execute-DvBse4aF.mjs +45 -0
- package/dist/{export-BKkAJOFb.mjs → export-BCkzx9zk.mjs} +5 -5
- package/dist/{export-flags-NiZ7C3Gm.mjs → export-flags-TuwwRhD6.mjs} +3 -3
- package/dist/{export-preflight-CwJ_3-iX.mjs → export-preflight-p7botJyN.mjs} +3 -3
- package/dist/field-C9AcBe8x.mjs +21 -0
- package/dist/{fields-Bod0s_uV.mjs → fields-CJVXOLbB.mjs} +4 -4
- package/dist/{filter-flags-BYcbB85j.mjs → filter-flags-yY4RM312.mjs} +5 -4
- package/dist/{fks-IUw66K_Q.mjs → fks-B6hjrdJP.mjs} +5 -5
- package/dist/{get-DLyg6Al9.mjs → get-B5L4BUGK.mjs} +3 -3
- package/dist/{get-D1NjMXAH.mjs → get-BYtFVJHT.mjs} +4 -4
- package/dist/{get-DtBqoGTa.mjs → get-BvUNnNRq.mjs} +3 -3
- package/dist/get-BwKQw_rR.mjs +31 -0
- package/dist/{get-DQZfaVNq.mjs → get-BxUgfEPW.mjs} +4 -4
- package/dist/{get-BGqvoGQM.mjs → get-C6uLL4bJ.mjs} +3 -3
- package/dist/{get-Cl81y0Md.mjs → get-CWBN0G-4.mjs} +5 -5
- package/dist/{get-BXsLkoit.mjs → get-CXeFg0F2.mjs} +5 -5
- package/dist/{get-_ik_5_lQ.mjs → get-CoJcgFky.mjs} +5 -5
- package/dist/{get-D2cPuOPR.mjs → get-D1p-5ibI.mjs} +4 -4
- package/dist/{get-CaEiQnSw.mjs → get-D7HPiBB0.mjs} +4 -4
- package/dist/{get-Bct52yPw.mjs → get-DPlSzRI0.mjs} +3 -3
- package/dist/get-DSjITPED.mjs +32 -0
- package/dist/{get-Biy4gOzu2.mjs → get-Do1LC4I52.mjs} +3 -3
- package/dist/{get-DITlshJH.mjs → get-DpYTiE4D.mjs} +3 -3
- package/dist/{get-Besqwy32.mjs → get-DsbDxSpy.mjs} +3 -3
- package/dist/{get-BSUsfysk.mjs → get-DyS1mRI6.mjs} +3 -3
- package/dist/{get-B8DUMrCw.mjs → get-Eforof5e.mjs} +5 -5
- package/dist/{get-CYIeiTZ9.mjs → get-oLc5jgid2.mjs} +4 -4
- package/dist/{get-run-CEc_tr5b.mjs → get-run-bU-d--nM.mjs} +4 -4
- package/dist/{get-BXssHyJ1.mjs → get-xmhwvAQJ.mjs} +5 -5
- package/dist/{get-BfSX-OeS.mjs → get-zotSW00n.mjs} +3 -3
- package/dist/git-sync-D4R0cHvk.mjs +29 -0
- package/dist/glossary-C6EnoEXg.mjs +14 -0
- package/dist/{glossary-BlNCrYbw.mjs → glossary-CdW6RFId.mjs} +1 -1
- package/dist/{glossary-LmZWwCNP.mjs → glossary-Del97Jqg.mjs} +1 -1
- package/dist/{graph-f6Bp1e8U.mjs → graph-CHXJ6mB7.mjs} +6 -6
- package/dist/{group-bpD_KcjA.mjs → group-D4w87fXL.mjs} +1 -1
- package/dist/{has-remote-changes-B8MmN6yh.mjs → has-remote-changes-BXEe8Sv5.mjs} +2 -2
- package/dist/{import-Bhq15KgP.mjs → import-DZQb4bUo.mjs} +5 -5
- package/dist/{input-D8qW-KtR.mjs → input-DjHsV-kD.mjs} +1 -1
- package/dist/{is-dirty-CAsVuVx8.mjs → is-dirty-DwQ2_CCB.mjs} +2 -2
- package/dist/{items-BZJomiDE.mjs → items-DNdICQ7M.mjs} +6 -6
- package/dist/{key-BynJSK9u.mjs → key-BTaxFn_7.mjs} +1 -1
- package/dist/{library-Ck0EK5bi.mjs → library-C4M8TF2N.mjs} +1 -1
- package/dist/{library-B7wDH-Nc.mjs → library-Cdj_uj1H.mjs} +5 -5
- package/dist/{library-BOv5SY24.mjs → library-DmkpcZPb.mjs} +1 -1
- package/dist/{list-DtgbtE3_.mjs → list-03zaydQe.mjs} +3 -3
- package/dist/{list-BT5t8ZOl.mjs → list-2EWHwbQs.mjs} +4 -4
- package/dist/{list-CtS50R7m.mjs → list-89ZgbsvW.mjs} +5 -5
- package/dist/{list-C9x--9Jq.mjs → list-Be6kDkyT.mjs} +5 -5
- package/dist/{list-DcnNlYQA.mjs → list-C-WGqRqN.mjs} +6 -6
- package/dist/{list-BtZVe1Nq.mjs → list-C7PV9fYj.mjs} +6 -6
- package/dist/{list-BWFCv_zk.mjs → list-CLJvuPXn.mjs} +5 -5
- package/dist/{list-CLFu3mQB.mjs → list-CYlPgzD1.mjs} +3 -3
- package/dist/{list-CvZyTwmV.mjs → list-CZoaZc9g.mjs} +5 -5
- package/dist/list-CzxrdWB8.mjs +35 -0
- package/dist/{list-CCdXig7b.mjs → list-DcHPY1Ti.mjs} +4 -4
- package/dist/{list-BT7xiUQe.mjs → list-DoLqxEjq.mjs} +3 -3
- package/dist/{list-C-A-2HFq.mjs → list-DsyvHBAv.mjs} +3 -3
- package/dist/{list-Cj_mTxbY.mjs → list-F4ENGV7j.mjs} +4 -4
- package/dist/{list-CJDFoOHb.mjs → list-M20foZz2.mjs} +3 -3
- package/dist/{list-Cd40Kr0R.mjs → list-OKHcr76i.mjs} +3 -3
- package/dist/list-Owrzgtkc.mjs +28 -0
- package/dist/{list-B2uUl26x.mjs → list-__Q79YXk.mjs} +4 -4
- package/dist/{list-BwdSG-P5.mjs → list-epIn3uFZ.mjs} +5 -5
- package/dist/{list-B4luDSYj.mjs → list-gqemddWB.mjs} +6 -6
- package/dist/{list-B8ND9t2h.mjs → list-hINHmdMT.mjs} +3 -3
- package/dist/{login-Bi_nGMJ9.mjs → login-BSqGgX8S.mjs} +6 -6
- package/dist/{logout-CiHQJWTu.mjs → logout-D92O4mQK.mjs} +2 -2
- package/dist/{measure-D2qq5e8f.mjs → measure-DhX_mmZK.mjs} +6 -6
- package/dist/{notification-DOYdl0ao.mjs → notification-Cuuwoksm.mjs} +1 -1
- package/dist/{parameter-values-CZow98nb.mjs → parameter-values-BY2WA9qg.mjs} +3 -3
- package/dist/{parse-enum-CLIXMsd8.mjs → parse-enum-BPKULOSw.mjs} +1 -1
- package/dist/{parse-id-BW09NysN.mjs → parse-id-CxHp2akh.mjs} +1 -1
- package/dist/{parse-ref-Cw5fa4FI.mjs → parse-ref-8bVX_9IN.mjs} +1 -1
- package/dist/{parse-text-T0lTXzTZ.mjs → parse-text-Bm6eUa-p.mjs} +1 -1
- package/dist/{path-K6LPLYPb.mjs → path-D4Q1ZzCw.mjs} +4 -4
- package/dist/{poll-Dz4tUm2f.mjs → poll-DFZRtTA_.mjs} +2 -2
- package/dist/{preflight-CX6cqB90.mjs → preflight-BPaonBKy.mjs} +3 -3
- package/dist/{process-D0HdqZ3r.mjs → process-B3Di_HtV.mjs} +1 -1
- package/dist/{publish-COatW4Un.mjs → publish-BhgyrJ6c.mjs} +4 -4
- package/dist/{pulse-D1uh8UIU.mjs → pulse-CIza18rO.mjs} +1 -1
- package/dist/query-BKtMP5eH.mjs +13 -0
- package/dist/{query-DmvkyDfo.mjs → query-CsBe-kJn.mjs} +6 -6
- package/dist/{query-BJXTIDhy.mjs → query-DvlGWjgG.mjs} +11 -10
- package/dist/{remapping-CPAvDKHV.mjs → remapping-CCEivr42.mjs} +4 -4
- package/dist/{remove-collection-Bg-sNX3U.mjs → remove-collection-LpgGBYCl.mjs} +3 -3
- package/dist/{render-BSfDD6ip.mjs → render-D5ehBS-7.mjs} +2 -2
- package/dist/{replace-RCHeZLUT.mjs → replace-DeWgkbfZ.mjs} +4 -4
- package/dist/{rescan-values-PeMnpaFY.mjs → rescan-values-CDDVS1tl.mjs} +4 -4
- package/dist/{rescan-values-CpDGYZvf.mjs → rescan-values-aF18XAv6.mjs} +5 -5
- package/dist/{run-DkRkZRgf.mjs → run-Buf4B8QH.mjs} +7 -7
- package/dist/run-DlG3Ykj1.mjs +63 -0
- package/dist/{run-CaQ7kubO.mjs → run-DyGMvbMm.mjs} +3 -3
- package/dist/{runs-BDjoVJ0P.mjs → runs-D2CXgW10.mjs} +5 -5
- package/dist/{runtime-CZ5zh32z.mjs → runtime-X6hVzSMW.mjs} +2 -2
- package/dist/{schema-tables-C2qjLcPq.mjs → schema-tables-FUOIyoUU.mjs} +5 -5
- package/dist/{schemas-D8hfNduk.mjs → schemas-CmfNeqzG.mjs} +4 -4
- package/dist/{search-CnTXKJgx.mjs → search-CLpDqYpY.mjs} +5 -5
- package/dist/{search-BrQQuNmh.mjs → search-Dl7xzF6Q.mjs} +5 -5
- package/dist/{segment-Bi6eqj3e.mjs → segment-Bx28f38v.mjs} +6 -6
- package/dist/{send-CAjgVNlA.mjs → send-CoGV2zkp.mjs} +3 -3
- package/dist/{set-BXTkYWid.mjs → set-CrR9IumN.mjs} +4 -4
- package/dist/{set-active-CBQVCePU.mjs → set-active-CbiJv8Hg.mjs} +3 -3
- package/dist/{set-sensitivity-D39kGTob.mjs → set-sensitivity-CTHVxpnU.mjs} +4 -4
- package/dist/{setting-CPkvkc4H.mjs → setting-CUxdweNJ.mjs} +4 -4
- package/dist/{setup-Be3xDXHi.mjs → setup-4uySIB-t.mjs} +3 -3
- package/dist/{signal-CxWeLszu.mjs → signal-0Yt8JTMn.mjs} +1 -1
- package/dist/{skill-list-CBGq30sI.mjs → skill-list-goCqmfFF.mjs} +2 -2
- package/dist/{skills-DyiLycMY.mjs → skills-86j411Qz.mjs} +3 -3
- package/dist/{skills-CJ9eXouJ.mjs → skills-DeWsLMwC.mjs} +2 -2
- package/dist/snippet-C3gamfFK.mjs +19 -0
- package/dist/{stash-BVN3s5N_.mjs → stash-BNKlbxtD.mjs} +4 -4
- package/dist/{status-CxP6w3aL.mjs → status-B7bwHLkk.mjs} +3 -3
- package/dist/{status-BtbMmIWo.mjs → status-Bul9El-c.mjs} +4 -4
- package/dist/{subscription-Dr-YHARg.mjs → subscription-DPAGevGU.mjs} +6 -6
- package/dist/{subscriptions-8tM8TTeQ.mjs → subscriptions-DIRsHcKP.mjs} +6 -6
- package/dist/{summary-DKx6ptQe.mjs → summary-CeVt80Kb.mjs} +3 -3
- package/dist/{sync-schema-kNriXZjG.mjs → sync-schema-B9fLcZoa.mjs} +6 -6
- package/dist/{sync-schema-B8RY0Ra4.mjs → sync-schema-oDTbhjW1.mjs} +4 -4
- package/dist/{sync-task-CXFoqlpF.mjs → sync-task-BAMOf6_t.mjs} +3 -2
- package/dist/{table-CxvaDiIZ.mjs → table-BFIOH6Pb.mjs} +1 -1
- package/dist/table-C--k-JXA.mjs +26 -0
- package/dist/{table-selector-flags-1bYkAKld.mjs → table-selector-flags-BUR0-n6j.mjs} +2 -2
- package/dist/{text-DaNkPRwt.mjs → text-CdtEI6l6.mjs} +1 -1
- package/dist/timeline-ClMmTycg.mjs +21 -0
- package/dist/{timeline-event-DpNm4dkn.mjs → timeline-event-BY2Hj72e.mjs} +6 -6
- package/dist/transform-BZaNFGeK.mjs +28 -0
- package/dist/{transform-CNBIV7No.mjs → transform-D4z70PIN.mjs} +1 -1
- package/dist/transform-job-QMI2qWin.mjs +22 -0
- package/dist/{transform-tag-nTb0Ivpj.mjs → transform-tag-CzjLKILh.mjs} +5 -5
- package/dist/transform-test-B9le1jKH.mjs +16 -0
- package/dist/transform-test-BjjCQ2xm.mjs +169 -0
- package/dist/transform-test-DHGKeuHa.mjs +32 -0
- package/dist/{transforms-BSsAfwAg.mjs → transforms-0uhBh0H4.mjs} +5 -5
- package/dist/transport-BmNrb0Lz.mjs +313 -0
- package/dist/{tree-lMvw1jnZ.mjs → tree-oBEw8hDj.mjs} +3 -3
- package/dist/{unpublish-CYFDd828.mjs → unpublish-BJ9OKN1N.mjs} +3 -3
- package/dist/{unreferenced-8Xdq76Kw.mjs → unreferenced-D6UyA_Nu.mjs} +6 -6
- package/dist/{update-D9p0N8ky.mjs → update-7zsDGAWa.mjs} +4 -4
- package/dist/{update-CITzAFG8.mjs → update-BK_SpSrG.mjs} +4 -4
- package/dist/{update-B28EJzrx.mjs → update-BZgHTH5P.mjs} +4 -4
- package/dist/update-Bdi40RG0.mjs +52 -0
- package/dist/{update-CLl8tE20.mjs → update-BqrZ-8IK.mjs} +8 -8
- package/dist/{update-D--Fw7-_.mjs → update-CEhub3Wz.mjs} +5 -5
- package/dist/{update-_sYM1GuU.mjs → update-CHA4VWKT.mjs} +7 -7
- package/dist/{update-BDunZa7G.mjs → update-CKJ6Das4.mjs} +4 -4
- package/dist/{update-BwrYeKso.mjs → update-CKe2Bwpv.mjs} +6 -6
- package/dist/update-CXfLvhmK.mjs +41 -0
- package/dist/{update-D_DCOOAB.mjs → update-CYQkWLpZ.mjs} +5 -5
- package/dist/{update-CM5uuhjB.mjs → update-Cv6IMLyu.mjs} +4 -4
- package/dist/{update-C7DEMiu-.mjs → update-D9eLVWFQ.mjs} +5 -5
- package/dist/{update-6P_GYCLT.mjs → update-DGwGjOnH.mjs} +5 -5
- package/dist/{update-BT2yNB_g.mjs → update-DKagaJw0.mjs} +6 -6
- package/dist/{update-BnMUSFYZ.mjs → update-DgmlUn64.mjs} +4 -4
- package/dist/{update-Cs2zv_L2.mjs → update-DneJLQXe.mjs} +7 -7
- package/dist/{update-CQXcsvaa.mjs → update-M7yDPmJ-.mjs} +5 -5
- package/dist/{update-DAzRx0of.mjs → update-bGDXSnBh.mjs} +5 -5
- package/dist/{update-dashcard-VNnIqHDI.mjs → update-dashcard-DNsf-gJ1.mjs} +4 -4
- package/dist/{upgrade-Tj_reACv.mjs → upgrade-BRJH93W0.mjs} +4 -4
- package/dist/{upload-Dg91ldGg.mjs → upload-CGz8u2wG.mjs} +3 -3
- package/dist/{upload-C2fhpKkP.mjs → upload-DJB7DMA1.mjs} +2 -2
- package/dist/upload-T5wS1XtL.mjs +13 -0
- package/dist/{uuid-Blpv_e0S.mjs → uuid-3qmLYgrG.mjs} +2 -2
- package/dist/{validate-D7e110oU.mjs → validate-D_iikPkc.mjs} +1 -1
- package/dist/{validate-query-C7LuKiUT.mjs → validate-query-DIcK8alR.mjs} +7 -3
- package/dist/{values-PonkbYAK.mjs → values-Bn2Wcz4t.mjs} +3 -3
- package/dist/{verify-DixUBbd2.mjs → verify-C2K-zMuQ.mjs} +3 -3
- package/dist/{verify-Dv7ER11c.mjs → verify-CA4PEHlO.mjs} +3 -3
- package/dist/{verify-Mpb65a5v.mjs → verify-CCX2N98Q.mjs} +3 -3
- package/dist/{wait-CaH6XHQV.mjs → wait-DCgCJBqX.mjs} +5 -5
- package/dist/{wait-flags-rUU4NUrv.mjs → wait-flags-aRQHTjwg.mjs} +2 -2
- package/dist/{window-CI_QD04s.mjs → window-2ybHqui2.mjs} +1 -1
- package/package.json +1 -1
- package/skill-data/core/SKILL.md +4 -1
- package/skill-data/data-action/SKILL.md +125 -0
- package/skill-data/native-sql/SKILL.md +1 -1
- package/skill-data/transform/SKILL.md +63 -1
- package/skill-data/transform-test-plan/SKILL.md +82 -0
- package/skill-data/transform-test-plan/references/checklist.md +32 -0
- package/skill-data/transform-test-plan/references/checks.md +156 -0
- package/dist/card-CFd-GUEM.mjs +0 -25
- package/dist/collection-BKNShKcY.mjs +0 -21
- package/dist/dashboard-AWrXqQ7a.mjs +0 -35
- package/dist/dependency-DBUJwXqv.mjs +0 -15
- package/dist/document-BRaba87v.mjs +0 -20
- package/dist/field-BARgq5I9.mjs +0 -21
- package/dist/git-sync-DKcaddkV.mjs +0 -29
- package/dist/glossary-CWIX8Zh6.mjs +0 -14
- package/dist/snippet-QirK70R_.mjs +0 -19
- package/dist/table-CZnT6d9x.mjs +0 -26
- package/dist/timeline-CUzx6uXi.mjs +0 -21
- package/dist/transform-g4-HHzDp.mjs +0 -28
- package/dist/transform-job-DqBtnTrG.mjs +0 -22
- package/dist/upload-BKxOpSz3.mjs +0 -13
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { t as defineCommandGroup } from "./group-D4w87fXL.mjs";
|
|
2
|
+
//#region src/commands/transform/index.ts
|
|
3
|
+
var transform_default = defineCommandGroup({
|
|
4
|
+
name: "transform",
|
|
5
|
+
description: "Manage Metabase transforms",
|
|
6
|
+
skills: [{
|
|
7
|
+
skill: "transform",
|
|
8
|
+
purpose: "body shape, run-with-wait, iterate"
|
|
9
|
+
}, {
|
|
10
|
+
skill: "mbql",
|
|
11
|
+
purpose: "MBQL source.query bodies"
|
|
12
|
+
}],
|
|
13
|
+
subCommands: {
|
|
14
|
+
list: () => import("./list-2EWHwbQs.mjs").then((mod) => mod.default),
|
|
15
|
+
get: () => import("./get-D7HPiBB0.mjs").then((mod) => mod.default),
|
|
16
|
+
dependencies: () => import("./dependencies-DZ-kMsDa.mjs").then((mod) => mod.default),
|
|
17
|
+
create: () => import("./create-XnYN2zoc.mjs").then((mod) => mod.default),
|
|
18
|
+
update: () => import("./update-DneJLQXe.mjs").then((mod) => mod.default),
|
|
19
|
+
delete: () => import("./delete-DOn2uk0u.mjs").then((mod) => mod.default),
|
|
20
|
+
"delete-table": () => import("./delete-table-DFqm6bAq.mjs").then((mod) => mod.default),
|
|
21
|
+
run: () => import("./run-Buf4B8QH.mjs").then((mod) => mod.default),
|
|
22
|
+
cancel: () => import("./cancel-DCOvSQsq.mjs").then((mod) => mod.default),
|
|
23
|
+
"get-run": () => import("./get-run-bU-d--nM.mjs").then((mod) => mod.default),
|
|
24
|
+
runs: () => import("./runs-D2CXgW10.mjs").then((mod) => mod.default)
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
//#endregion
|
|
28
|
+
export { transform_default as default };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { v as MALFORMED_CELL } from "./cli.mjs";
|
|
2
2
|
import { d as TransformTarget, n as TransformCompact, s as TransformRunCompact } from "./transform-DiW7bREn.mjs";
|
|
3
3
|
//#region src/output/views/transform.ts
|
|
4
4
|
function formatTarget(value) {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { t as defineCommandGroup } from "./group-D4w87fXL.mjs";
|
|
2
|
+
//#region src/commands/transform-job/index.ts
|
|
3
|
+
var transform_job_default = defineCommandGroup({
|
|
4
|
+
name: "transform-job",
|
|
5
|
+
description: "Manage Metabase transform jobs",
|
|
6
|
+
skills: [{
|
|
7
|
+
skill: "transform",
|
|
8
|
+
purpose: "tag-driven job schedules"
|
|
9
|
+
}],
|
|
10
|
+
subCommands: {
|
|
11
|
+
list: () => import("./list-CYlPgzD1.mjs").then((mod) => mod.default),
|
|
12
|
+
get: () => import("./get-DpYTiE4D.mjs").then((mod) => mod.default),
|
|
13
|
+
create: () => import("./create-B57D5E-o.mjs").then((mod) => mod.default),
|
|
14
|
+
update: () => import("./update-DgmlUn64.mjs").then((mod) => mod.default),
|
|
15
|
+
delete: () => import("./delete-BztmAfPc.mjs").then((mod) => mod.default),
|
|
16
|
+
run: () => import("./run-DyGMvbMm.mjs").then((mod) => mod.default),
|
|
17
|
+
transforms: () => import("./transforms-0uhBh0H4.mjs").then((mod) => mod.default),
|
|
18
|
+
"set-active": () => import("./set-active-CbiJv8Hg.mjs").then((mod) => mod.default)
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
//#endregion
|
|
22
|
+
export { transform_job_default as default };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as defineCommandGroup } from "./group-
|
|
1
|
+
import { t as defineCommandGroup } from "./group-D4w87fXL.mjs";
|
|
2
2
|
//#region src/commands/transform-tag/index.ts
|
|
3
3
|
var transform_tag_default = defineCommandGroup({
|
|
4
4
|
name: "transform-tag",
|
|
@@ -8,10 +8,10 @@ var transform_tag_default = defineCommandGroup({
|
|
|
8
8
|
purpose: "tags that drive job schedules"
|
|
9
9
|
}],
|
|
10
10
|
subCommands: {
|
|
11
|
-
list: () => import("./list-
|
|
12
|
-
create: () => import("./create-
|
|
13
|
-
update: () => import("./update-
|
|
14
|
-
delete: () => import("./delete-
|
|
11
|
+
list: () => import("./list-DoLqxEjq.mjs").then((mod) => mod.default),
|
|
12
|
+
create: () => import("./create-g4pZa_Xa.mjs").then((mod) => mod.default),
|
|
13
|
+
update: () => import("./update-Cv6IMLyu.mjs").then((mod) => mod.default),
|
|
14
|
+
delete: () => import("./delete-C7QmQlp9.mjs").then((mod) => mod.default)
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
//#endregion
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { t as defineCommandGroup } from "./group-D4w87fXL.mjs";
|
|
2
|
+
//#region src/commands/transform-test/index.ts
|
|
3
|
+
var transform_test_default = defineCommandGroup({
|
|
4
|
+
name: "transform-test",
|
|
5
|
+
description: "Manage transform tests — fixtures and expectations run against temp tables",
|
|
6
|
+
subCommands: {
|
|
7
|
+
list: () => import("./list-CzxrdWB8.mjs").then((mod) => mod.default),
|
|
8
|
+
get: () => import("./get-DSjITPED.mjs").then((mod) => mod.default),
|
|
9
|
+
create: () => import("./create--b64pMVM.mjs").then((mod) => mod.default),
|
|
10
|
+
update: () => import("./update-CXfLvhmK.mjs").then((mod) => mod.default),
|
|
11
|
+
delete: () => import("./delete-DPU-uQxU.mjs").then((mod) => mod.default),
|
|
12
|
+
run: () => import("./run-DlG3Ykj1.mjs").then((mod) => mod.default)
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
//#endregion
|
|
16
|
+
export { transform_test_default as default };
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region ../client/src/domain/transform-test.ts
|
|
3
|
+
const TransformTestTable = z.object({
|
|
4
|
+
schema: z.string().min(1).nullable().optional(),
|
|
5
|
+
name: z.string().min(1)
|
|
6
|
+
}).loose();
|
|
7
|
+
const TransformTestColumn = z.object({
|
|
8
|
+
name: z.string().min(1),
|
|
9
|
+
cast_type: z.string().min(1)
|
|
10
|
+
}).loose();
|
|
11
|
+
const TransformTestCell = z.union([
|
|
12
|
+
z.boolean(),
|
|
13
|
+
z.number(),
|
|
14
|
+
z.string(),
|
|
15
|
+
z.null()
|
|
16
|
+
]);
|
|
17
|
+
const TransformTestRow = z.record(z.string(), TransformTestCell);
|
|
18
|
+
const TransformTestSqlInput = z.object({
|
|
19
|
+
table: TransformTestTable,
|
|
20
|
+
format: z.literal("sql"),
|
|
21
|
+
sql: z.string().min(1)
|
|
22
|
+
}).loose();
|
|
23
|
+
const TransformTestRowsInput = z.object({
|
|
24
|
+
table: TransformTestTable,
|
|
25
|
+
format: z.literal("rows"),
|
|
26
|
+
columns: z.array(TransformTestColumn).min(1),
|
|
27
|
+
rows: z.array(TransformTestRow)
|
|
28
|
+
}).loose();
|
|
29
|
+
const TransformTestInput = z.discriminatedUnion("format", [TransformTestSqlInput, TransformTestRowsInput]);
|
|
30
|
+
const TransformTestEqualsSqlExpectation = z.object({
|
|
31
|
+
type: z.literal("equals"),
|
|
32
|
+
name: z.string().min(1),
|
|
33
|
+
format: z.literal("sql"),
|
|
34
|
+
sql: z.string().min(1)
|
|
35
|
+
}).loose();
|
|
36
|
+
const TransformTestEqualsRowsExpectation = z.object({
|
|
37
|
+
type: z.literal("equals"),
|
|
38
|
+
name: z.string().min(1),
|
|
39
|
+
format: z.literal("rows"),
|
|
40
|
+
columns: z.array(TransformTestColumn).min(1),
|
|
41
|
+
rows: z.array(TransformTestRow)
|
|
42
|
+
}).loose();
|
|
43
|
+
const TransformTestEqualsExpectation = z.discriminatedUnion("format", [TransformTestEqualsSqlExpectation, TransformTestEqualsRowsExpectation]);
|
|
44
|
+
const TransformTestEmptyExpectation = z.object({
|
|
45
|
+
type: z.literal("empty"),
|
|
46
|
+
name: z.string().min(1),
|
|
47
|
+
sql: z.string().min(1)
|
|
48
|
+
}).loose();
|
|
49
|
+
const TransformTestExpectation = z.discriminatedUnion("type", [TransformTestEqualsExpectation, TransformTestEmptyExpectation]);
|
|
50
|
+
const TransformTest = z.object({
|
|
51
|
+
id: z.number().int(),
|
|
52
|
+
entity_id: z.string(),
|
|
53
|
+
transform_id: z.number().int(),
|
|
54
|
+
creator_id: z.number().int(),
|
|
55
|
+
name: z.string(),
|
|
56
|
+
description: z.string().nullable(),
|
|
57
|
+
inputs: z.array(TransformTestInput),
|
|
58
|
+
expectations: z.array(TransformTestExpectation),
|
|
59
|
+
created_at: z.string(),
|
|
60
|
+
updated_at: z.string()
|
|
61
|
+
}).loose();
|
|
62
|
+
const TransformTestCompact = TransformTest.pick({
|
|
63
|
+
id: true,
|
|
64
|
+
transform_id: true,
|
|
65
|
+
name: true,
|
|
66
|
+
description: true
|
|
67
|
+
}).strip();
|
|
68
|
+
/**
|
|
69
|
+
* The server closes this map, so an unrecognized key is a 400 there. Refusing it here names the key
|
|
70
|
+
* instead: a body cloned from `get` has to shed `id`, `entity_id`, `creator_id`, `created_at` and
|
|
71
|
+
* `updated_at` before it can be sent back.
|
|
72
|
+
*/
|
|
73
|
+
const TransformTestCreateInput = z.object({
|
|
74
|
+
transform_id: z.number().int().positive(),
|
|
75
|
+
name: z.string().min(1),
|
|
76
|
+
description: z.string().nullable().optional(),
|
|
77
|
+
inputs: z.array(TransformTestInput),
|
|
78
|
+
expectations: z.array(TransformTestExpectation)
|
|
79
|
+
}).strict();
|
|
80
|
+
/** Closed for the same reason as [[TransformTestCreateInput]]; every field is optional. */
|
|
81
|
+
const TransformTestUpdateInput = z.object({
|
|
82
|
+
transform_id: z.number().int().positive().optional(),
|
|
83
|
+
name: z.string().min(1).optional(),
|
|
84
|
+
description: z.string().nullable().optional(),
|
|
85
|
+
inputs: z.array(TransformTestInput).optional(),
|
|
86
|
+
expectations: z.array(TransformTestExpectation).optional()
|
|
87
|
+
}).strict();
|
|
88
|
+
const TransformTestResultColumn = z.object({
|
|
89
|
+
name: z.string(),
|
|
90
|
+
database_type: z.string()
|
|
91
|
+
}).loose();
|
|
92
|
+
const TransformTestExpectationError = z.object({
|
|
93
|
+
type: z.string(),
|
|
94
|
+
message: z.string()
|
|
95
|
+
}).loose();
|
|
96
|
+
const TransformTestCellMismatch = z.object({
|
|
97
|
+
column: z.string(),
|
|
98
|
+
expected: TransformTestCell,
|
|
99
|
+
actual: TransformTestCell
|
|
100
|
+
}).loose();
|
|
101
|
+
const TransformTestRowCounts = z.object({
|
|
102
|
+
actual: z.number().int(),
|
|
103
|
+
expected: z.number().int()
|
|
104
|
+
}).loose();
|
|
105
|
+
const TransformTestEqualsFindings = z.object({
|
|
106
|
+
name: z.string(),
|
|
107
|
+
type: z.literal("equals"),
|
|
108
|
+
status: z.enum(["passed", "failed"]),
|
|
109
|
+
columns: z.array(TransformTestResultColumn),
|
|
110
|
+
"row-counts": TransformTestRowCounts,
|
|
111
|
+
"extra-rows": z.array(TransformTestRow),
|
|
112
|
+
"missing-rows": z.array(TransformTestRow),
|
|
113
|
+
"cell-mismatches": z.array(TransformTestCellMismatch),
|
|
114
|
+
truncated: z.number().int()
|
|
115
|
+
}).loose();
|
|
116
|
+
const TransformTestEqualsError = z.object({
|
|
117
|
+
name: z.string(),
|
|
118
|
+
type: z.literal("equals"),
|
|
119
|
+
status: z.literal("error"),
|
|
120
|
+
error: TransformTestExpectationError
|
|
121
|
+
}).loose();
|
|
122
|
+
const TransformTestEqualsResult = z.discriminatedUnion("status", [TransformTestEqualsFindings, TransformTestEqualsError]);
|
|
123
|
+
const TransformTestEmptyPassed = z.object({
|
|
124
|
+
name: z.string(),
|
|
125
|
+
type: z.literal("empty"),
|
|
126
|
+
status: z.literal("passed")
|
|
127
|
+
}).loose();
|
|
128
|
+
const TransformTestEmptyFailed = z.object({
|
|
129
|
+
name: z.string(),
|
|
130
|
+
type: z.literal("empty"),
|
|
131
|
+
status: z.literal("failed"),
|
|
132
|
+
columns: z.array(TransformTestResultColumn),
|
|
133
|
+
sample: z.array(TransformTestRow),
|
|
134
|
+
truncated: z.number().int()
|
|
135
|
+
}).loose();
|
|
136
|
+
const TransformTestEmptyError = z.object({
|
|
137
|
+
name: z.string(),
|
|
138
|
+
type: z.literal("empty"),
|
|
139
|
+
status: z.literal("error"),
|
|
140
|
+
error: TransformTestExpectationError
|
|
141
|
+
}).loose();
|
|
142
|
+
const TransformTestEmptyResult = z.discriminatedUnion("status", [
|
|
143
|
+
TransformTestEmptyPassed,
|
|
144
|
+
TransformTestEmptyFailed,
|
|
145
|
+
TransformTestEmptyError
|
|
146
|
+
]);
|
|
147
|
+
const TransformTestExpectationResult = z.discriminatedUnion("type", [TransformTestEqualsResult, TransformTestEmptyResult]);
|
|
148
|
+
const TransformTestRunResult = z.object({
|
|
149
|
+
status: z.enum(["passed", "failed"]),
|
|
150
|
+
expectations: z.array(TransformTestExpectationResult),
|
|
151
|
+
tables: z.record(z.string(), z.string())
|
|
152
|
+
}).loose();
|
|
153
|
+
z.enum([
|
|
154
|
+
"transform-test.unknown-column",
|
|
155
|
+
"transform-test.ambiguous-column",
|
|
156
|
+
"transform-test.missing-inputs",
|
|
157
|
+
"transform-test.unused-inputs",
|
|
158
|
+
"transform-test.duplicate-input-table",
|
|
159
|
+
"transform-test.unparseable-source",
|
|
160
|
+
"transform-test.unremapped-reference",
|
|
161
|
+
"transform-test.unsupported-transform",
|
|
162
|
+
"transform-test.unsupported-driver",
|
|
163
|
+
"transform-test.transform-failed",
|
|
164
|
+
"transform-test.setup-failed",
|
|
165
|
+
"transform-test.expectation-failed",
|
|
166
|
+
"transform-test.unsupported-format"
|
|
167
|
+
]);
|
|
168
|
+
//#endregion
|
|
169
|
+
export { TransformTestUpdateInput as a, TransformTestRunResult as i, TransformTestCompact as n, TransformTestCreateInput as r, TransformTest as t };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { i as TransformTestRunResult, n as TransformTestCompact } from "./transform-test-BjjCQ2xm.mjs";
|
|
2
|
+
//#region src/output/views/transform-test.ts
|
|
3
|
+
const transformTestView = {
|
|
4
|
+
compactPick: TransformTestCompact,
|
|
5
|
+
tableColumns: [
|
|
6
|
+
{
|
|
7
|
+
key: "id",
|
|
8
|
+
label: "ID"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
key: "transform_id",
|
|
12
|
+
label: "Transform"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
key: "name",
|
|
16
|
+
label: "Name"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
key: "description",
|
|
20
|
+
label: "Description"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
};
|
|
24
|
+
const transformTestRunResultView = {
|
|
25
|
+
compactPick: TransformTestRunResult,
|
|
26
|
+
tableColumns: [{
|
|
27
|
+
key: "status",
|
|
28
|
+
label: "Status"
|
|
29
|
+
}]
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
export { transformTestView as n, transformTestRunResultView as t };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { n as windowList } from "./window-
|
|
1
|
+
import { J as outputFlags, K as listFlags, U as connectionFlags, Y as profileFlag, Z as listEnvelopeSchema, d as renderList } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-X6hVzSMW.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-CxHp2akh.mjs";
|
|
4
|
+
import { n as windowList } from "./window-2ybHqui2.mjs";
|
|
5
5
|
import { n as TransformCompact } from "./transform-DiW7bREn.mjs";
|
|
6
|
-
import { n as transformView } from "./transform-
|
|
6
|
+
import { n as transformView } from "./transform-D4z70PIN.mjs";
|
|
7
7
|
//#region src/commands/transform-job/transforms.ts
|
|
8
8
|
const TransformJobTransformsEnvelope = listEnvelopeSchema(TransformCompact);
|
|
9
9
|
var transforms_default = defineMetabaseCommand({
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { dt as ResponseShapeError, ft as TimeoutError, ht as errorMessage, mt as ValidationError, n as methodRequirements, ut as NetworkError } from "./cli.mjs";
|
|
2
|
+
import { $ as CapabilityError, B as assertCredentialHeaderSafe, G as normalizeUrl, H as credentialSecrets, I as isRetryableStatus, J as checkFeatures, L as JSON_CONTENT_TYPE, M as buildNetworkError, N as isConnectionClosed, P as HttpError, Q as probeServer, R as parseJson, V as credentialAuthHeader, X as createServerProfile } from "./runtime-X6hVzSMW.mjs";
|
|
3
|
+
import { n as throwIfAborted, r as untilAborted, t as combineAborts } from "./signal-0Yt8JTMn.mjs";
|
|
4
|
+
import { setTimeout } from "node:timers/promises";
|
|
5
|
+
//#region ../client/src/http/response-shape.ts
|
|
6
|
+
async function parseJsonResponse(text, schema, context) {
|
|
7
|
+
try {
|
|
8
|
+
return parseJson(text, schema, { source: context.url });
|
|
9
|
+
} catch (error) {
|
|
10
|
+
if (error instanceof ValidationError) throw ResponseShapeError.fromZodIssues({
|
|
11
|
+
kind: "zod",
|
|
12
|
+
method: context.method,
|
|
13
|
+
url: context.url,
|
|
14
|
+
status: context.status,
|
|
15
|
+
zodIssues: error.developerDetail.zodIssues,
|
|
16
|
+
serverTag: await context.getServerTag(),
|
|
17
|
+
serverSkew: context.serverSkew
|
|
18
|
+
});
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region ../client/src/http/retry.ts
|
|
24
|
+
const BASE_DELAY_MS = 250;
|
|
25
|
+
const MAX_DELAY_MS = 8e3;
|
|
26
|
+
const MS_PER_SECOND = 1e3;
|
|
27
|
+
function backoffDelay({ attempt, retryAfterHeader }) {
|
|
28
|
+
const fromHeader = parseRetryAfter(retryAfterHeader);
|
|
29
|
+
if (fromHeader !== null) return fromHeader;
|
|
30
|
+
return Math.min(MAX_DELAY_MS, BASE_DELAY_MS * 2 ** attempt);
|
|
31
|
+
}
|
|
32
|
+
function parseRetryAfter(header) {
|
|
33
|
+
if (!header) return null;
|
|
34
|
+
const numeric = Number(header);
|
|
35
|
+
if (Number.isFinite(numeric) && numeric >= 0) return Math.round(numeric * MS_PER_SECOND);
|
|
36
|
+
const dateMs = Date.parse(header);
|
|
37
|
+
if (Number.isFinite(dateMs)) return Math.max(0, dateMs - Date.now());
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
function sleep(ms, signal) {
|
|
41
|
+
return setTimeout(ms, void 0, { signal });
|
|
42
|
+
}
|
|
43
|
+
async function runWithRetries(attempt, signal) {
|
|
44
|
+
let attemptIndex = 0;
|
|
45
|
+
while (true) {
|
|
46
|
+
const outcome = await attempt(attemptIndex);
|
|
47
|
+
if (outcome.kind === "success") return outcome.response;
|
|
48
|
+
await sleep(outcome.delayMs, signal);
|
|
49
|
+
attemptIndex += 1;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
//#region ../client/src/http/transport.ts
|
|
54
|
+
const UNAUTHORIZED_STATUS = 401;
|
|
55
|
+
const DEFAULT_TIMEOUT_MS = 3e4;
|
|
56
|
+
const OCTET_STREAM_CONTENT_TYPE = "application/octet-stream";
|
|
57
|
+
const TEXT_CONTENT_TYPE_PREFIX = "text/";
|
|
58
|
+
const ERROR_BODY_BYTE_CAP = 64 * 1024;
|
|
59
|
+
const IDEMPOTENT_METHODS = /* @__PURE__ */ new Set([
|
|
60
|
+
"GET",
|
|
61
|
+
"HEAD",
|
|
62
|
+
"OPTIONS"
|
|
63
|
+
]);
|
|
64
|
+
function createTransport(config, options) {
|
|
65
|
+
const baseUrl = normalizeUrl(config.url);
|
|
66
|
+
assertCredentialHeaderSafe(config.credential);
|
|
67
|
+
const fetchImpl = options.fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
68
|
+
let settledProfile = options.server ?? null;
|
|
69
|
+
const getServerTag = options.getServerTag ?? (async () => tagOf(settledProfile));
|
|
70
|
+
const serverSkew = () => settledProfile === null ? null : settledProfile.skew;
|
|
71
|
+
const refreshCredential = options.refreshCredential;
|
|
72
|
+
let credential = config.credential;
|
|
73
|
+
const knownSecrets = new Set(credentialSecrets(credential));
|
|
74
|
+
const redactionContext = { knownSecrets };
|
|
75
|
+
let refreshInFlight = null;
|
|
76
|
+
function tryRefreshCredential() {
|
|
77
|
+
const refresh = refreshCredential;
|
|
78
|
+
if (credential.kind !== "oauth" || refresh === void 0) return Promise.resolve(false);
|
|
79
|
+
refreshInFlight ??= refreshOnce(refresh).finally(() => {
|
|
80
|
+
refreshInFlight = null;
|
|
81
|
+
});
|
|
82
|
+
return refreshInFlight;
|
|
83
|
+
}
|
|
84
|
+
async function refreshOnce(refresh) {
|
|
85
|
+
const next = await refresh();
|
|
86
|
+
if (next === null) return false;
|
|
87
|
+
credential = next;
|
|
88
|
+
for (const secret of credentialSecrets(next)) knownSecrets.add(secret);
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
async function attemptOnce(prepared, attempt) {
|
|
92
|
+
const hasRetriesLeft = attempt < prepared.retries;
|
|
93
|
+
const timeoutSignal = AbortSignal.timeout(prepared.timeoutMs);
|
|
94
|
+
const combined = combineAborts(timeoutSignal, prepared.cancelSignal);
|
|
95
|
+
let response;
|
|
96
|
+
try {
|
|
97
|
+
response = await fetchImpl(prepared.url, {
|
|
98
|
+
method: prepared.method,
|
|
99
|
+
headers: prepared.headers,
|
|
100
|
+
body: prepared.body,
|
|
101
|
+
signal: combined
|
|
102
|
+
});
|
|
103
|
+
} catch (error) {
|
|
104
|
+
throwIfAborted(prepared.cancelSignal);
|
|
105
|
+
const isStaleSocketFirstTry = attempt === 0 && isConnectionClosed(error);
|
|
106
|
+
if (prepared.idempotent && (hasRetriesLeft || isStaleSocketFirstTry)) return {
|
|
107
|
+
kind: "retry",
|
|
108
|
+
delayMs: backoffDelay({ attempt })
|
|
109
|
+
};
|
|
110
|
+
if (timeoutSignal.aborted) throw new TimeoutError(`Request timed out after ${prepared.timeoutMs}ms`, {
|
|
111
|
+
kind: "http",
|
|
112
|
+
method: prepared.method,
|
|
113
|
+
url: prepared.url,
|
|
114
|
+
timeoutMs: prepared.timeoutMs
|
|
115
|
+
});
|
|
116
|
+
throw buildNetworkError(error, prepared.method, prepared.url);
|
|
117
|
+
}
|
|
118
|
+
const canRetryStatus = hasRetriesLeft && prepared.idempotent;
|
|
119
|
+
if (!response.ok && isRetryableStatus(response.status) && canRetryStatus) {
|
|
120
|
+
const retryAfter = response.headers.get("Retry-After");
|
|
121
|
+
response.body?.cancel().catch(() => void 0);
|
|
122
|
+
return {
|
|
123
|
+
kind: "retry",
|
|
124
|
+
delayMs: backoffDelay({
|
|
125
|
+
attempt,
|
|
126
|
+
retryAfterHeader: retryAfter
|
|
127
|
+
})
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (!response.ok) {
|
|
131
|
+
const rawBody = await readBodyForError(response);
|
|
132
|
+
const serverTag = await getServerTag();
|
|
133
|
+
throw new HttpError({
|
|
134
|
+
status: response.status,
|
|
135
|
+
statusText: response.statusText,
|
|
136
|
+
method: prepared.method,
|
|
137
|
+
url: prepared.url,
|
|
138
|
+
responseHeaders: response.headers,
|
|
139
|
+
rawBody,
|
|
140
|
+
serverTag,
|
|
141
|
+
redactionContext
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
assertContentType(response, prepared);
|
|
145
|
+
return {
|
|
146
|
+
kind: "success",
|
|
147
|
+
response
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
async function executeRaw(prepared) {
|
|
151
|
+
try {
|
|
152
|
+
return await runWithRetries((attempt) => attemptOnce(prepared, attempt), prepared.cancelSignal);
|
|
153
|
+
} catch (error) {
|
|
154
|
+
throwIfAborted(prepared.cancelSignal);
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async function executeWithAuthRefresh(path, opts) {
|
|
159
|
+
const prepared = prepare(path, opts);
|
|
160
|
+
try {
|
|
161
|
+
return {
|
|
162
|
+
response: await executeRaw(prepared),
|
|
163
|
+
prepared
|
|
164
|
+
};
|
|
165
|
+
} catch (error) {
|
|
166
|
+
if (error instanceof HttpError && error.status === UNAUTHORIZED_STATUS) {
|
|
167
|
+
if (await tryRefreshCredential()) {
|
|
168
|
+
const retried = prepare(path, opts);
|
|
169
|
+
return {
|
|
170
|
+
response: await executeRaw(retried),
|
|
171
|
+
prepared: retried
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
throw error;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function prepare(path, opts = {}) {
|
|
179
|
+
const method = opts.method ?? "GET";
|
|
180
|
+
const expectContentType = opts.expectContentType ?? "json";
|
|
181
|
+
const url = buildUrl(baseUrl, path, opts.query);
|
|
182
|
+
const headers = new Headers();
|
|
183
|
+
const auth = credentialAuthHeader(credential);
|
|
184
|
+
headers.set(auth.name, auth.value);
|
|
185
|
+
headers.set("accept", acceptHeader(expectContentType));
|
|
186
|
+
headers.set("user-agent", options.userAgent);
|
|
187
|
+
let body = null;
|
|
188
|
+
if (opts.body !== void 0 && opts.body !== null) if (typeof opts.body === "string" || opts.body instanceof URLSearchParams) body = opts.body;
|
|
189
|
+
else if (opts.body instanceof FormData || opts.body instanceof ReadableStream) body = opts.body;
|
|
190
|
+
else if (opts.body instanceof Uint8Array) {
|
|
191
|
+
body = opts.body;
|
|
192
|
+
headers.set("content-type", OCTET_STREAM_CONTENT_TYPE);
|
|
193
|
+
} else {
|
|
194
|
+
body = JSON.stringify(opts.body);
|
|
195
|
+
headers.set("content-type", JSON_CONTENT_TYPE);
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
url,
|
|
199
|
+
method,
|
|
200
|
+
headers,
|
|
201
|
+
body,
|
|
202
|
+
expectContentType,
|
|
203
|
+
retries: opts.retries ?? 3,
|
|
204
|
+
idempotent: opts.idempotent ?? IDEMPOTENT_METHODS.has(method),
|
|
205
|
+
timeoutMs: opts.timeoutMs ?? 3e4,
|
|
206
|
+
cancelSignal: combineAborts(opts.signal, options.signal)
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
let serverProfile = options.server === void 0 ? null : Promise.resolve(options.server);
|
|
210
|
+
async function server(wait = {}) {
|
|
211
|
+
throwIfAborted(wait.signal);
|
|
212
|
+
if (serverProfile === null) {
|
|
213
|
+
const probe = probeServer(transport).then((info) => {
|
|
214
|
+
settledProfile = createServerProfile(info);
|
|
215
|
+
return settledProfile;
|
|
216
|
+
});
|
|
217
|
+
probe.catch(() => {
|
|
218
|
+
serverProfile = null;
|
|
219
|
+
});
|
|
220
|
+
serverProfile = probe;
|
|
221
|
+
}
|
|
222
|
+
return untilAborted(serverProfile, wait.signal);
|
|
223
|
+
}
|
|
224
|
+
const enforceRequirements = options.enforceRequirements ?? true;
|
|
225
|
+
async function requireFeatures(features, wait = {}) {
|
|
226
|
+
if (!enforceRequirements || features.length === 0) return;
|
|
227
|
+
const failure = checkFeatures(features, await server(wait));
|
|
228
|
+
if (failure !== null) throw new CapabilityError(failure);
|
|
229
|
+
}
|
|
230
|
+
async function requireMethod(key, wait = {}) {
|
|
231
|
+
return requireFeatures(methodRequirements(key), wait);
|
|
232
|
+
}
|
|
233
|
+
const transport = {
|
|
234
|
+
server,
|
|
235
|
+
require: requireMethod,
|
|
236
|
+
requireFeatures,
|
|
237
|
+
async requestRaw(path, opts) {
|
|
238
|
+
return (await executeWithAuthRefresh(path, opts ?? {})).response;
|
|
239
|
+
},
|
|
240
|
+
async requestParsed(schema, path, opts) {
|
|
241
|
+
const { response, prepared } = await executeWithAuthRefresh(path, {
|
|
242
|
+
...opts,
|
|
243
|
+
expectContentType: "json"
|
|
244
|
+
});
|
|
245
|
+
return parseJsonResponse(await response.text(), schema, {
|
|
246
|
+
method: prepared.method,
|
|
247
|
+
url: prepared.url,
|
|
248
|
+
status: response.status,
|
|
249
|
+
getServerTag,
|
|
250
|
+
serverSkew: serverSkew()
|
|
251
|
+
});
|
|
252
|
+
},
|
|
253
|
+
async requestStream(path, opts) {
|
|
254
|
+
const { response, prepared } = await executeWithAuthRefresh(path, {
|
|
255
|
+
...opts,
|
|
256
|
+
expectContentType: opts?.expectContentType ?? "binary"
|
|
257
|
+
});
|
|
258
|
+
if (!response.body) throw new NetworkError("Response had no body to stream", {
|
|
259
|
+
method: prepared.method,
|
|
260
|
+
url: prepared.url,
|
|
261
|
+
cause: "missing body"
|
|
262
|
+
});
|
|
263
|
+
return response.body;
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
return transport;
|
|
267
|
+
}
|
|
268
|
+
function tagOf(profile) {
|
|
269
|
+
return profile === null ? null : profile.version.tag;
|
|
270
|
+
}
|
|
271
|
+
function buildUrl(baseUrl, path, query) {
|
|
272
|
+
const normalizedPath = path.startsWith("/") ? path : `/${path}`;
|
|
273
|
+
const target = new URL(baseUrl + normalizedPath);
|
|
274
|
+
if (query) for (const [key, value] of Object.entries(query)) {
|
|
275
|
+
if (value === void 0) continue;
|
|
276
|
+
if (Array.isArray(value)) for (const entry of value) target.searchParams.append(key, String(entry));
|
|
277
|
+
else target.searchParams.append(key, String(value));
|
|
278
|
+
}
|
|
279
|
+
return target.toString();
|
|
280
|
+
}
|
|
281
|
+
function acceptHeader(expected) {
|
|
282
|
+
if (expected === "json") return JSON_CONTENT_TYPE;
|
|
283
|
+
if (expected === "text") return "text/*";
|
|
284
|
+
return "*/*";
|
|
285
|
+
}
|
|
286
|
+
function assertContentType(response, prepared) {
|
|
287
|
+
if (prepared.expectContentType === "binary") return;
|
|
288
|
+
const contentType = response.headers.get("content-type");
|
|
289
|
+
if (contentType === null) throwContentTypeMismatch(response, prepared, prepared.expectContentType);
|
|
290
|
+
if (prepared.expectContentType === "json" && !contentType.includes("application/json")) throwContentTypeMismatch(response, prepared, "json");
|
|
291
|
+
if (prepared.expectContentType === "text" && !contentType.startsWith(TEXT_CONTENT_TYPE_PREFIX)) throwContentTypeMismatch(response, prepared, "text");
|
|
292
|
+
}
|
|
293
|
+
function throwContentTypeMismatch(response, prepared, expected) {
|
|
294
|
+
const actual = response.headers.get("content-type") ?? "no content-type";
|
|
295
|
+
throw new HttpError({
|
|
296
|
+
status: response.status,
|
|
297
|
+
statusText: response.statusText,
|
|
298
|
+
method: prepared.method,
|
|
299
|
+
url: prepared.url,
|
|
300
|
+
responseHeaders: response.headers,
|
|
301
|
+
rawBody: null,
|
|
302
|
+
overrideUserMessage: `Expected ${expected} response but got ${actual}`
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
async function readBodyForError(response) {
|
|
306
|
+
try {
|
|
307
|
+
return Buffer.from(await response.arrayBuffer()).subarray(0, ERROR_BODY_BYTE_CAP).toString("utf8");
|
|
308
|
+
} catch (error) {
|
|
309
|
+
return `[body read failed: ${errorMessage(error)}]`;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
//#endregion
|
|
313
|
+
export { createTransport as n, DEFAULT_TIMEOUT_MS as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { m as CollectionTreeNode } from "./collection-
|
|
1
|
+
import { U as connectionFlags, W as formatFlags, Y as profileFlag, g as writeJson, ot as ConfigError } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-X6hVzSMW.mjs";
|
|
3
|
+
import { m as CollectionTreeNode } from "./collection-BgPYl2c5.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
//#region src/commands/collection/tree.ts
|
|
6
6
|
const CollectionTreeResponse = z.array(CollectionTreeNode);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { i as tableSelectorFlags, n as parseTableSelectors } from "./table-selector-flags-
|
|
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 { i as tableSelectorFlags, n as parseTableSelectors } from "./table-selector-flags-BUR0-n6j.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
//#region src/commands/library/unpublish.ts
|
|
6
6
|
const LibraryUnpublishResult = z.object({
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as collectForOutput } from "./window-
|
|
4
|
-
import { d as DependencyNodeCompact } from "./dependency-
|
|
5
|
-
import { i as dependencyNodeView } from "./dependency-
|
|
6
|
-
import { a as readItemFilters, n as itemFilterFlags } from "./filter-flags-
|
|
1
|
+
import { J as outputFlags, K as listFlags, U as connectionFlags, Y as profileFlag, Z as listEnvelopeSchema, d as renderList } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-X6hVzSMW.mjs";
|
|
3
|
+
import { t as collectForOutput } from "./window-2ybHqui2.mjs";
|
|
4
|
+
import { d as DependencyNodeCompact } from "./dependency-B4J1bwFh.mjs";
|
|
5
|
+
import { i as dependencyNodeView } from "./dependency-BHKwKjhO.mjs";
|
|
6
|
+
import { a as readItemFilters, n as itemFilterFlags } from "./filter-flags-yY4RM312.mjs";
|
|
7
7
|
//#region src/commands/dependency/unreferenced.ts
|
|
8
8
|
const DependencyUnreferencedListEnvelope = listEnvelopeSchema(DependencyNodeCompact);
|
|
9
9
|
var unreferenced_default = defineMetabaseCommand({
|