@metabase/cli 0.5.3 → 0.5.5
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-c1dfnavz.mjs → add-collection-lgBkahhW.mjs} +3 -3
- package/dist/{alert-BkpPdBQ_.mjs → alert-32mfYFy1.mjs} +7 -7
- package/dist/{alerts-TDYiIxjs.mjs → alerts-DWVmtHEJ.mjs} +6 -6
- package/dist/api-key-DJfhPe4x.mjs +13 -0
- package/dist/{append-CoeZRD6u.mjs → append-CdzKyHhn.mjs} +4 -4
- package/dist/{archive-DZDkfhdH.mjs → archive-24zg3Ckb.mjs} +5 -5
- package/dist/{archive-DY76wU2k.mjs → archive-B3_fjvid.mjs} +3 -3
- package/dist/{archive-N3lp1o-k.mjs → archive-B4G4EE9n.mjs} +5 -5
- package/dist/{archive-D-BJwRLc.mjs → archive-BTxrM_x2.mjs} +5 -5
- package/dist/{archive-DQRehboT.mjs → archive-BZxa5zJk.mjs} +5 -5
- package/dist/{archive-CH1h8jz5.mjs → archive-BmutUzPS.mjs} +5 -5
- package/dist/{archive-DxUnaV4x.mjs → archive-CHQOH-nm.mjs} +3 -3
- package/dist/{archive-CAJHrKwd.mjs → archive-DEOq8OqU.mjs} +5 -5
- package/dist/{archive-NfFWXRx5.mjs → archive-DOXrtANg.mjs} +5 -5
- package/dist/{archive-f7wKQ7Uy.mjs → archive-DbaGJh7E.mjs} +3 -3
- package/dist/{archive-9uzfWGuq.mjs → archive-NhewLr23.mjs} +5 -5
- package/dist/{archive-3fdIvMsf.mjs → archive-Uws1E_p8.mjs} +5 -5
- package/dist/{auth-hgkvHPpH.mjs → auth-bVvBp9Tl.mjs} +5 -5
- package/dist/{branch-flag-CPTQ4wXp.mjs → branch-flag-BvIdNB5z.mjs} +1 -1
- package/dist/{branches-B3gHAanU.mjs → branches-CkOAJk1H.mjs} +3 -3
- package/dist/{breaking-DuWIof4T.mjs → breaking-CMpEeieT.mjs} +6 -6
- package/dist/{broken-D2ST8sTx.mjs → broken-DFFLXiYc.mjs} +8 -8
- package/dist/{bulk-discard-values-77khEfpj.mjs → bulk-discard-values-D4eFBtKc.mjs} +5 -5
- package/dist/{bulk-edit-girwcjY6.mjs → bulk-edit-CLJeGY2E.mjs} +7 -7
- package/dist/{bulk-rescan-values-Df8KK8um.mjs → bulk-rescan-values-DsaGKIo_.mjs} +5 -5
- package/dist/{bulk-sync-schema-DEPUZ6MN.mjs → bulk-sync-schema-CN797vy9.mjs} +5 -5
- package/dist/{cancel-Oek5PJnu.mjs → cancel-CRpzqIUu.mjs} +3 -3
- package/dist/{cancel-task-rkqY0qLU.mjs → cancel-task-CpZcj7HB.mjs} +2 -2
- package/dist/{card-QR3zEu6E.mjs → card-BJRZ5D5Q.mjs} +2 -2
- package/dist/{card-3NmUiU5F.mjs → card-VipF12MJ.mjs} +1 -1
- package/dist/card-nOX_QJ9u.mjs +25 -0
- package/dist/{cards-DWJOtZoN.mjs → cards-DJMTrFQg.mjs} +6 -6
- package/dist/cli.mjs +128 -294
- package/dist/{client-BFP2Ssqu.mjs → client-D2ycdMRO.mjs} +299 -189
- package/dist/{collection-D5vt2IJ_.mjs → collection-Bf3lv-zo.mjs} +1 -1
- package/dist/collection-Cs84x7WB.mjs +21 -0
- package/dist/{collection-DNmFKALA.mjs → collection-Cz2qLX2m.mjs} +1 -1
- package/dist/{collection-namespace-Dl8_7xII.mjs → collection-namespace-C0JcSEwN.mjs} +2 -1
- package/dist/{content-translation-B3oARbgD.mjs → content-translation-7qPz-dIU.mjs} +3 -3
- package/dist/{copy-C7Rc4qM7.mjs → copy-BeFjqXXc.mjs} +6 -6
- package/dist/{copy-BzBp5FaY.mjs → copy-D9-xBYYq.mjs} +6 -6
- package/dist/{copy-flags-CTM91pxH.mjs → copy-flags-DZ5Cy-Gk.mjs} +2 -2
- package/dist/{create-YBDXZgyP.mjs → create--eZb0G2P.mjs} +4 -5
- package/dist/{create-f0bBEfDI.mjs → create-B57Sj0om.mjs} +9 -10
- package/dist/{create-Bh3q3eHg.mjs → create-Ba8nYAWL.mjs} +9 -9
- package/dist/{create-CjGEkSFz.mjs → create-BfgTvPvI.mjs} +9 -10
- package/dist/{create-C-2ivjed.mjs → create-BlYxQv6U.mjs} +4 -5
- package/dist/{create-DQJ9h86G.mjs → create-CLQVeQ0w.mjs} +4 -5
- package/dist/{create-CGxxztoE.mjs → create-Cc07ouKB.mjs} +6 -7
- package/dist/{create-C0gmhNnk.mjs → create-CplN1ey8.mjs} +9 -10
- package/dist/{create-myJ8HR4B.mjs → create-D4FT8Xj8.mjs} +6 -7
- package/dist/{create-BKRD11i-.mjs → create-DBCOYtqn.mjs} +4 -4
- package/dist/{create-CfXKNnkK.mjs → create-DBSpDnaA.mjs} +6 -7
- package/dist/{create-ByeGK_BE.mjs → create-DHTl3wVv.mjs} +4 -5
- package/dist/{create-DO4ic4Kx.mjs → create-DIZGUCFE.mjs} +7 -8
- package/dist/{create-CGE1D0Ay.mjs → create-DJ0Xrpod.mjs} +6 -7
- package/dist/{create-Bc4ADRmU.mjs → create-Dj5y7xbA.mjs} +4 -5
- package/dist/{create-vgP9K2eH2.mjs → create-Dr-q5oWx2.mjs} +10 -11
- package/dist/{create-YIC3Q0a-.mjs → create-Dt6gdbAH.mjs} +7 -7
- package/dist/{create-branch-DBCBMDWh.mjs → create-branch-CKQkpU-_.mjs} +3 -2
- package/dist/{create-C3H9ljex.mjs → create-cpxnjNMC.mjs} +4 -5
- package/dist/{create-_rOCx5b8.mjs → create-n5cH8Tq-.mjs} +5 -6
- package/dist/{create-71_DODbc.mjs → create-ypwRxrcj.mjs} +9 -10
- package/dist/{csv-Dtgy7sTg.mjs → csv-CxWsxJIB.mjs} +4 -4
- package/dist/{current-task-AwQisIT9.mjs → current-task-DB7UTh6J.mjs} +3 -3
- package/dist/{dashboard-D5E3fMKh.mjs → dashboard-Bx2sYijR.mjs} +1 -1
- package/dist/{dashboard-Chjy5GKR.mjs → dashboard-Cwsf-e9T.mjs} +23 -6
- package/dist/dashboard-DeSaOt2Z.mjs +35 -0
- package/dist/{data-action-DZxVB_hD.mjs → data-action-CuvI17XF.mjs} +8 -2
- package/dist/{data-action-R9qxJDPA.mjs → data-action-DLj9cgpu.mjs} +1 -1
- package/dist/data-action-Dpt7pfzd.mjs +24 -0
- package/dist/{data-app-BIAvvV2P.mjs → data-app--T695WPM.mjs} +10 -10
- package/dist/{data-app-project-BL4xpu_m.mjs → data-app-project-DjDDWgUF.mjs} +2 -1
- package/dist/{database-CxykzTAA.mjs → database-C5ucihp3.mjs} +2 -2
- package/dist/{database-D8XzgJEz.mjs → database-u_spHEa0.mjs} +1 -1
- package/dist/{dataset-DIQLAp2P.mjs → dataset-LJxNN6p5.mjs} +3 -3
- package/dist/{db-wsSYKqCB.mjs → db-CpK3QluZ.mjs} +8 -8
- package/dist/{delete-E-g5b-HU.mjs → delete-9YIc_L2E.mjs} +4 -4
- package/dist/{delete-WrV9I9uw.mjs → delete-AwOJ1x-D.mjs} +4 -4
- package/dist/{delete-D9FB7qjX.mjs → delete-B9GABYEJ.mjs} +4 -4
- package/dist/{delete-4v4_lDwD.mjs → delete-Bw8CMa_A.mjs} +4 -4
- package/dist/{delete-BSgxmR3y.mjs → delete-CE19WUPi.mjs} +4 -4
- package/dist/{delete-BegkpIGi.mjs → delete-CUzOTiI8.mjs} +4 -4
- package/dist/{delete-BP9-YS-f.mjs → delete-D784J3ur.mjs} +4 -4
- package/dist/{delete-BHX_F8Qu.mjs → delete-DbAOgu73.mjs} +4 -4
- package/dist/{delete-DmM5L0wO.mjs → delete-TcDfZNz2.mjs} +4 -4
- package/dist/{delete-runtime-CJ7gMYA1.mjs → delete-runtime-DOOy3gzH.mjs} +2 -1
- package/dist/{delete-table-CJq8JM5J.mjs → delete-table-a8acciQe.mjs} +4 -4
- package/dist/{delete-wnHUWWjX.mjs → delete-trx8NIoh.mjs} +4 -4
- package/dist/{dependencies-CnW3RSoZ.mjs → dependencies-BcPdAMYB.mjs} +6 -6
- package/dist/{dependency-CaC6XuTY.mjs → dependency-C1DExO6k.mjs} +8 -5
- package/dist/{dependency-Dxvb2Znu.mjs → dependency-DcM96XJ-.mjs} +4 -3
- package/dist/dependency-_SgcW_fL.mjs +15 -0
- package/dist/{dependents-DHXqJ3lo.mjs → dependents-CRZaiOzg.mjs} +9 -9
- package/dist/{dirty-BRPWPUYH.mjs → dirty-1taTj3G6.mjs} +3 -3
- package/dist/{discard-values-DBHfVN8o.mjs → discard-values-DmiWAx4J.mjs} +5 -5
- package/dist/{document-UMG6me2P.mjs → document-BHOQq2T_.mjs} +2 -2
- package/dist/document-DB6YGtqX.mjs +20 -0
- package/dist/{document-DVIu3Vj4.mjs → document-lS1XZEF3.mjs} +1 -1
- package/dist/{download-BFu9xYHX.mjs → download-CEvVDGeC.mjs} +2 -2
- package/dist/{eid-eKmbXRds.mjs → eid-pO_lMTI9.mjs} +5 -5
- package/dist/{entity-DjDkaMkB.mjs → entity-DICgy4Bl.mjs} +2 -2
- package/dist/{entry-flags-Cxn09krz.mjs → entry-flags-CswcY8bG.mjs} +5 -6
- package/dist/{events-CZL9MU64.mjs → events-cGDPEL5_.mjs} +4 -4
- package/dist/{execute-DBJGtHHG.mjs → execute-DHGbJpPr.mjs} +7 -8
- package/dist/{export-xn_-NaBd.mjs → export-B0NUSP6q.mjs} +6 -5
- package/dist/{export-flags-CpukgETM.mjs → export-flags-iXfEILf7.mjs} +3 -2
- package/dist/{export-preflight-SM9zJkBp.mjs → export-preflight-Bbl1bHpI.mjs} +3 -3
- package/dist/field-AkNMIQnx.mjs +21 -0
- package/dist/{field-DoWQUl7V.mjs → field-C2qOViFZ.mjs} +8 -2
- package/dist/{field-BVz4AS3f.mjs → field-CT4r6b92.mjs} +1 -1
- package/dist/{fields-CB06GFBW.mjs → fields-M66PaKdV.mjs} +6 -6
- package/dist/{filter-flags-DhE4olyf.mjs → filter-flags-ezqqsOQL.mjs} +4 -4
- package/dist/{fks-CSoS7xZ6.mjs → fks-BvOGzID5.mjs} +6 -6
- package/dist/{get-BZFyqZXa.mjs → get-0T9zeyCh.mjs} +5 -5
- package/dist/{get-BSPxmP_W.mjs → get-B3Ceh_7N.mjs} +5 -5
- package/dist/{get-BW3jSR3y.mjs → get-BL_9fN-q.mjs} +3 -3
- package/dist/{get-Bt4C-oxh.mjs → get-Bt2Q516N.mjs} +5 -5
- package/dist/{get--1qTpTIQ.mjs → get-BzIQK_mt.mjs} +5 -5
- package/dist/{get-BQ7SAJEz.mjs → get-C3j93ivl.mjs} +3 -3
- package/dist/{get-DIfjxTP8.mjs → get-CCLnfOOE.mjs} +3 -3
- package/dist/{get-CtDZOoWy.mjs → get-CEreA2oN.mjs} +5 -5
- package/dist/{get-jbOgdCQg.mjs → get-CJFg7YM5.mjs} +3 -3
- package/dist/{get-Cl-O6dFs.mjs → get-Cfg52y7X.mjs} +4 -4
- package/dist/{get-eZEHipwA.mjs → get-D-8G7EoL.mjs} +5 -5
- package/dist/{get-BYAzIaGG.mjs → get-D-ElxFlQ.mjs} +5 -5
- package/dist/{get-Bq_9VSTa.mjs → get-D7y_z5K7.mjs} +3 -3
- package/dist/{get-DePbMmjc.mjs → get-DGlZtzfB.mjs} +5 -5
- package/dist/{get-C1rCVUYw.mjs → get-DKZLwN3K.mjs} +6 -5
- package/dist/{get-BIf6eFWZ.mjs → get-HtzPLpy2.mjs} +5 -5
- package/dist/{get-B8xQXMU6.mjs → get-SOCVdBIU.mjs} +5 -5
- package/dist/{get-BZDUOZxI.mjs → get-ZSLfDowg.mjs} +3 -3
- package/dist/{get-B8xrmipw.mjs → get-jzChrvn2.mjs} +5 -5
- package/dist/{get-run-C-CNDbv3.mjs → get-run-BZP_z57v.mjs} +5 -5
- package/dist/{get-CuSwArMS.mjs → get-uB7jROcz.mjs} +5 -5
- package/dist/{get-BfFZCiZR.mjs → get-wPkejadn.mjs} +5 -5
- package/dist/{get-Cc4-e-Q_.mjs → get-zGreQNnG.mjs} +5 -5
- package/dist/git-sync-DaHnqpYi.mjs +29 -0
- package/dist/glossary-Br_mSh3i.mjs +14 -0
- package/dist/{glossary-BkGmCI4X.mjs → glossary-CQRW3Z4d.mjs} +1 -1
- package/dist/{glossary-QN-hHfOT.mjs → glossary-iPIWrEbP.mjs} +1 -1
- package/dist/{graph-CqBe2J4N.mjs → graph-CdKi07zZ.mjs} +6 -6
- package/dist/{group-81zoQcEP.mjs → group--6adAsqG.mjs} +2 -2
- package/dist/{has-remote-changes-CDe1teSb.mjs → has-remote-changes-d_JyzdPX.mjs} +2 -2
- package/dist/{import-B64gjryF.mjs → import-1bK-qrjV.mjs} +6 -5
- package/dist/input-gate-registry-Dh8QjKgW.mjs +14 -0
- package/dist/{is-dirty-DhR3Xqjk.mjs → is-dirty-BXwvuTeD.mjs} +2 -2
- package/dist/{items-CLl2QgS8.mjs → items-Dzh_xylQ.mjs} +7 -6
- package/dist/{key-BYEv4Wgq.mjs → key-DLrpCgdZ.mjs} +1 -1
- package/dist/{library-C3eO2J07.mjs → library-BA1QssFE.mjs} +5 -5
- package/dist/{library-wUiD2jbw.mjs → library-BprxuqZl.mjs} +1 -1
- package/dist/{library-DKIqzyUk.mjs → library-C4g9pdiS.mjs} +8 -3
- package/dist/{list-CdcFNphE.mjs → list-0TtkxraU.mjs} +3 -3
- package/dist/{list-YFwmHXGG.mjs → list-2doqGDIF.mjs} +3 -3
- package/dist/{list-DLLzMaS3.mjs → list-7qcWFDXR.mjs} +5 -5
- package/dist/{list-DyFu5Wx1.mjs → list-B5D3leO9.mjs} +6 -6
- package/dist/{list-CjpZCiks.mjs → list-B70w2ibG.mjs} +3 -3
- package/dist/{list-B7Yvz5vA.mjs → list-B75rzgSi.mjs} +5 -5
- package/dist/{list-BmvitCWZ.mjs → list-BWNw-ppI.mjs} +6 -6
- package/dist/{list-DyQNRVAf.mjs → list-BjpGurur.mjs} +3 -3
- package/dist/{list-DrIcKxXX.mjs → list-CdpEUPL-.mjs} +5 -5
- package/dist/{list-DpfOh8-5.mjs → list-CvQlMhrb.mjs} +4 -4
- package/dist/{list-DDPvxfhe.mjs → list-DDV5PylU.mjs} +6 -6
- package/dist/{list-BIqqh3A-.mjs → list-DHX7-8Ae.mjs} +5 -5
- package/dist/{list-BiSwl56L.mjs → list-DQNbHPNQ.mjs} +5 -5
- package/dist/{list-CFaJA317.mjs → list-DR9dswtK.mjs} +6 -6
- package/dist/{list-eGlqXJno.mjs → list-DSi8mf_F.mjs} +5 -5
- package/dist/{list-D4HNG282.mjs → list-D_SfsO_-.mjs} +5 -5
- package/dist/{list-CA939qkn.mjs → list-Dn5_L-85.mjs} +6 -6
- package/dist/{list-C7TFreS8.mjs → list-DuaFmOCz.mjs} +5 -5
- package/dist/{list-Cu6ET_yD.mjs → list-Dv3s_PIu.mjs} +5 -5
- package/dist/{list-s9_LlXCV.mjs → list-Dz2YVD7m.mjs} +3 -3
- package/dist/{list-DLwby7YA.mjs → list-TzuL_7GA.mjs} +5 -5
- package/dist/{list-C3GBocvB.mjs → list-_jHBfq0E.mjs} +5 -5
- package/dist/{list-D_IT8l9B.mjs → list-iFtmAfVv.mjs} +3 -3
- package/dist/{login-Bg7Z3jDy.mjs → login-LAFw5Xxu.mjs} +6 -5
- package/dist/{logout-CAmp7DcS.mjs → logout-CjYzDvLH.mjs} +3 -2
- package/dist/{measure-CtfjqJFP.mjs → measure-BMWrX1ca.mjs} +3 -1
- package/dist/{measure-C31HLp1C.mjs → measure-DgtOyIoD.mjs} +6 -6
- package/dist/{measure-4P0bOlZ3.mjs → measure-DqZG65of.mjs} +1 -1
- package/dist/{notification-DaA4bBHW.mjs → notification-B5yMuPmo.mjs} +6 -1
- package/dist/{notification-W2SVssyY.mjs → notification-BEJaEZS2.mjs} +2 -2
- package/dist/{parameter-DvRQMKd2.mjs → parameter-Bucz3cLJ.mjs} +1 -1
- package/dist/{parameter-values-3eHpqznI.mjs → parameter-values-CRwVLpRD.mjs} +6 -5
- package/dist/{parse-enum-DAcTzG1q.mjs → parse-enum-CEXPuN9H.mjs} +1 -1
- package/dist/{parse-id-5BZGQ9Vd.mjs → parse-id-EXZan40V.mjs} +1 -1
- package/dist/{parse-ref-ByXc-pls.mjs → parse-ref-D28NvwpR.mjs} +1 -1
- package/dist/{parse-text-FgX60vIg.mjs → parse-text-C4LYzIFa.mjs} +1 -1
- package/dist/{path-XwdHlC23.mjs → path-BA_GGcGN.mjs} +4 -4
- package/dist/{poll-CgtcJopL.mjs → poll-vxN__4cz.mjs} +2 -2
- package/dist/predicates-0C0TsWcJ.mjs +219 -0
- package/dist/{preflight-ChTKhB8Y.mjs → preflight-4iy2qzsh.mjs} +3 -2
- package/dist/{process-aqXm5QgC.mjs → process-BQC3mK2k.mjs} +1 -1
- package/dist/{publish-C2-pK0cf.mjs → publish--I94MMjp.mjs} +13 -6
- package/dist/{pulse-CC81N2_0.mjs → pulse-B2AmIWsO.mjs} +11 -4
- package/dist/{pulse-JPrq6NFP.mjs → pulse-CPSpum5U.mjs} +2 -2
- package/dist/{query-pmw23KkL.mjs → query-C8w04b4F.mjs} +7 -6
- package/dist/{query-DkaUzmMa.mjs → query-O1b4qIr4.mjs} +17 -29
- package/dist/{remapping-C3htTzJn.mjs → remapping-BdX4nj-U.mjs} +5 -5
- package/dist/{remove-collection-p_t9rUUX.mjs → remove-collection-dltKu8LO.mjs} +3 -3
- package/dist/{render-C50k8-jc.mjs → render-DK2j4BwQ.mjs} +3 -2
- package/dist/{replace-BQBuFJ1B.mjs → replace-BfO6UFZN.mjs} +4 -4
- package/dist/{requirement-check-CpiVuL0H.mjs → requirement-check-1fcffJj6.mjs} +2 -2
- package/dist/{rescan-values-DOqXJ3qH.mjs → rescan-values-0-c5Gqtx.mjs} +5 -5
- package/dist/{rescan-values-Ctq8wpkI.mjs → rescan-values-7bbNa7WZ.mjs} +5 -5
- package/dist/{run-CtMbObQI.mjs → run-5b123gPi.mjs} +5 -4
- package/dist/{run-2xgPRuKR.mjs → run-BS_wUAsi.mjs} +6 -5
- package/dist/{run-Dn3e8G4x.mjs → run-Cf1nJahe.mjs} +4 -4
- package/dist/{runs-CgNoQW6M.mjs → runs-BJ4uy05c.mjs} +6 -6
- package/dist/{runtime-Y4VFWmmr.mjs → runtime-D5yfliIq.mjs} +51 -9
- package/dist/{scaffold-BuL0_ptz.mjs → scaffold-aUy3Ik4q.mjs} +4 -4
- package/dist/schema-Ds_j3N1I.mjs +283 -0
- package/dist/{schema-tables-BdXuo_lG.mjs → schema-tables-BuFF9Psy.mjs} +6 -6
- package/dist/{schemas-Dap3KFwY.mjs → schemas-DaDsur6B.mjs} +4 -4
- package/dist/{search-Dxcejw_v.mjs → search-BcJgmPU3.mjs} +6 -5
- package/dist/{search-DUmFK5Sy.mjs → search-CTZzUd_j.mjs} +7 -6
- package/dist/{segment-C_gl5ag6.mjs → segment-CWVASaM1.mjs} +1 -1
- package/dist/{segment-OsrbUDzw.mjs → segment-Cf-DrdjE.mjs} +3 -1
- package/dist/{segment-CebcXn2E.mjs → segment-zy4VVraQ.mjs} +6 -6
- package/dist/{send-DYdwcPTb.mjs → send-D0ikejQU.mjs} +3 -3
- package/dist/{set-xs8Vyvy2.mjs → set-CjAaw2ZL.mjs} +5 -6
- package/dist/{set-active-CVI_DDQi.mjs → set-active-BQjKw1wk.mjs} +4 -4
- package/dist/{set-bundle-DX5HqDji.mjs → set-bundle-6Qknum1I.mjs} +6 -6
- package/dist/{set-data-actions-DAI1XCQ2.mjs → set-data-actions-LcWEP4RO.mjs} +6 -6
- package/dist/{set-enabled-0QI-CHAT.mjs → set-enabled-C8Yww7Yv.mjs} +7 -7
- package/dist/{set-sensitivity-DqGkiLSr.mjs → set-sensitivity-OVcL2PbY.mjs} +6 -6
- package/dist/{setting-Bmry-y_l.mjs → setting-BsIBFvRP.mjs} +4 -4
- package/dist/{setup-CO7QV-ao.mjs → setup-BnczkG96.mjs} +1 -1
- package/dist/{setup-UM8N9Vh3.mjs → setup-BxUd_KYl.mjs} +5 -6
- package/dist/{signal-D8MH3LMN.mjs → signal-BNUlQjpc.mjs} +1 -1
- package/dist/{skill-list-D2FhhYS3.mjs → skill-list-BoJITnw8.mjs} +1 -1
- package/dist/{skills-CcLTm3_2.mjs → skills-BQBerRAk.mjs} +3 -2
- package/dist/{skills-BiSfuDqA.mjs → skills-CQRgUHI3.mjs} +3 -3
- package/dist/{slug-qeARO25o.mjs → slug-COdwq63O.mjs} +1 -1
- package/dist/snippet-CRLI3fYI.mjs +19 -0
- package/dist/{stash-e5cSvnj3.mjs → stash-BGqpcbSW.mjs} +5 -4
- package/dist/{status-BHiO3YBe.mjs → status-CcOJIgfB.mjs} +4 -4
- package/dist/{status-CH7BAWGe.mjs → status-_wPMW1wq.mjs} +3 -3
- package/dist/{subscription-DWleULhN.mjs → subscription-CqUIrnUJ.mjs} +6 -6
- package/dist/{subscriptions-DcCOA2p1.mjs → subscriptions-BP83ctRX.mjs} +6 -6
- package/dist/{summary-CipFA6M6.mjs → summary-Byz6Y1v-.mjs} +5 -5
- package/dist/{sync-schema-D7p-P8F6.mjs → sync-schema-BJ-AtcCq.mjs} +5 -5
- package/dist/{sync-schema-C45WO4db.mjs → sync-schema-DQBHc3bt.mjs} +6 -6
- package/dist/{sync-task-DNKG9Bk4.mjs → sync-task-Gf86CU9l.mjs} +1 -1
- package/dist/{table-BDsqRU7a.mjs → table-BNA9Or05.mjs} +3 -3
- package/dist/{table-CF7zW9cI.mjs → table-hgrX1i-R.mjs} +36 -5
- package/dist/table-nIdBLcz7.mjs +26 -0
- package/dist/{table-selector-flags-CHfrVpYQ.mjs → table-selector-flags-BpFFoSaT.mjs} +4 -3
- package/dist/{text-C2VwKF9D.mjs → text-8nOxfC17.mjs} +1 -1
- package/dist/timeline-Cw581KRT.mjs +21 -0
- package/dist/{timeline-event-BF1dqSnD.mjs → timeline-event-BHfAXJrB.mjs} +6 -6
- package/dist/{transform-DiW7bREn.mjs → transform-B62craFM.mjs} +76 -7
- package/dist/{transform-CWGJB8N_.mjs → transform-DKPtUV54.mjs} +2 -2
- package/dist/{transform-job-ClX8e5iO.mjs → transform-job-CDIb3B9o.mjs} +6 -1
- package/dist/{transform-job-BBZ5L46v.mjs → transform-job-D18XRLBK.mjs} +1 -1
- package/dist/transform-job-sCgr8r-t.mjs +22 -0
- package/dist/transform-l1oC8oUS.mjs +28 -0
- package/dist/{transform-tag-BYoguZfW.mjs → transform-tag-DZEvmwxY.mjs} +5 -5
- package/dist/transform-test-hxkx6M8c.mjs +16 -0
- package/dist/{transforms-C6MFnT4C.mjs → transforms-D1wwWdCY.mjs} +6 -6
- package/dist/{transport-k_fabWdF.mjs → transport-BWixD5Ww.mjs} +5 -4
- package/dist/{tree-C4Igf6xs.mjs → tree-IymKTTCK.mjs} +4 -3
- package/dist/{typed-schema-Bo0Q6C0S.mjs → typed-schema-gaIKntyu.mjs} +4 -4
- package/dist/{unpublish-EStytsEm.mjs → unpublish-BnP0O_S2.mjs} +3 -3
- package/dist/{unreferenced-DtUuyBrr.mjs → unreferenced-DDkcn8EQ.mjs} +6 -6
- package/dist/{update-DAG8m5f4.mjs → update-BAocDvnS.mjs} +7 -8
- package/dist/{update-DECiEVlk.mjs → update-BemK_tZ_.mjs} +10 -11
- package/dist/{update-B0Na11v-.mjs → update-Bfws2FN2.mjs} +7 -8
- package/dist/{update-FfeHReec.mjs → update-BiBazvzY.mjs} +10 -11
- package/dist/{update-DhgfReDD.mjs → update-BsEG1dRm.mjs} +7 -8
- package/dist/{update-BogvN2Mb.mjs → update-C0p1E-hs.mjs} +8 -8
- package/dist/{update-pk0b6vXU.mjs → update-CFkOEnUu.mjs} +5 -6
- package/dist/{update-DT8U29Kk.mjs → update-CKrLtJWZ.mjs} +7 -8
- package/dist/{update-Bba_zPSE.mjs → update-C_VV1SP8.mjs} +10 -11
- package/dist/{update-DkvIK-eL.mjs → update-CgJwzutJ.mjs} +7 -8
- package/dist/{update-BOg1jZ_s.mjs → update-Cga4lrX5.mjs} +11 -12
- package/dist/{update-z8ZGCg1r.mjs → update-CsH0lSpQ2.mjs} +7 -8
- package/dist/{update-HbggUPuy.mjs → update-CyfLXFKR.mjs} +5 -6
- package/dist/{update-CCLpNTPa.mjs → update-D9eA9UOf.mjs} +5 -6
- package/dist/{update-B1UXRPN-.mjs → update-D9fs-PSK.mjs} +8 -9
- package/dist/{update-DIBaY-fy.mjs → update-DL1Iex_M.mjs} +7 -8
- package/dist/{update-BXLY92om.mjs → update-DntKWUl2.mjs} +10 -11
- package/dist/{update-CciLWH_s.mjs → update-K8FwdJEV.mjs} +11 -11
- package/dist/{update-DT2ViMFr.mjs → update-ReSzm23m.mjs} +5 -6
- package/dist/{update-dashcard-m-hkIGUu.mjs → update-dashcard-Bpv45o1_.mjs} +7 -8
- package/dist/{update-VGgvQu7W.mjs → update-gAPjldWw.mjs} +5 -6
- package/dist/{upgrade-iETJ8fH2.mjs → upgrade-D3aDQZwd.mjs} +5 -4
- package/dist/{upload-CoK5LnyA.mjs → upload-B8HbBXb8.mjs} +3 -3
- package/dist/{upload-BF5pdKRN.mjs → upload-BAD_9okY.mjs} +2 -2
- package/dist/upload-BqJLNCb1.mjs +13 -0
- package/dist/{uuid-8Ha-8bDX.mjs → uuid-BIDBDPLI.mjs} +3 -2
- package/dist/{validate-BQ7vI8_x.mjs → validate-moGYlHxB.mjs} +8 -18
- package/dist/validate-query-Bf5FhhMI.mjs +72 -0
- package/dist/{values-BsgA7-6h.mjs → values-BDekphEw.mjs} +5 -5
- package/dist/{verify-cjUPMF_B.mjs → verify-BnZqq9Aw.mjs} +3 -3
- package/dist/{verify-CzBZbP4W.mjs → verify-CMTrDvAW.mjs} +3 -3
- package/dist/{verify-crIrbGZV.mjs → verify-k0WHgc16.mjs} +4 -3
- package/dist/{wait-mFUfpSaj.mjs → wait-C69z8PSw.mjs} +5 -5
- package/dist/{wait-flags-BnZ-dfE2.mjs → wait-flags-C3cu_O0w.mjs} +2 -2
- package/dist/{window-CfK_j6m1.mjs → window-D1w7B0vh.mjs} +1 -1
- package/package.json +1 -1
- package/skill-data/core/SKILL.md +18 -14
- package/skill-data/data-app/SKILL.md +16 -17
- package/skill-data/data-app/template/README.md +1 -1
- package/skill-data/data-app-actions/SKILL.md +3 -0
- package/skill-data/data-app-data/SKILL.md +6 -6
- package/skill-data/data-app-filters/SKILL.md +12 -4
- package/skill-data/data-app-ui/SKILL.md +11 -11
- package/skill-data/data-workflow/references/reusable-definitions.md +2 -2
- package/skill-data/git-sync/SKILL.md +13 -11
- package/skill-data/mbql/SKILL.md +3 -3
- package/skill-data/native-sql/SKILL.md +1 -1
- package/skill-data/native-sql/references/template-tags.md +1 -1
- package/dist/api-key-wGtJ8kYy.mjs +0 -13
- package/dist/body-M5qsJoub.mjs +0 -16
- package/dist/card-BWTjCE93.mjs +0 -25
- package/dist/collection-9_mj8rVX.mjs +0 -21
- package/dist/dashboard-BZV-0Qjp.mjs +0 -35
- package/dist/data-action-B7kRpvCH.mjs +0 -24
- package/dist/dependency-DDRGBlFL.mjs +0 -15
- package/dist/document-BeLf7NqP.mjs +0 -20
- package/dist/field-CQDz-6DK.mjs +0 -21
- package/dist/git-sync-D_T9oNC6.mjs +0 -29
- package/dist/glossary-BVK5DaLV.mjs +0 -14
- package/dist/snippet-DKARah-L.mjs +0 -19
- package/dist/table-BPYHnzyV.mjs +0 -26
- package/dist/timeline-C2m_QHxn.mjs +0 -21
- package/dist/transform-N_elgRuh.mjs +0 -28
- package/dist/transform-job-CTV6KRP2.mjs +0 -22
- package/dist/transform-test-jaBpHOM5.mjs +0 -16
- package/dist/upload-CqSGEZQW.mjs +0 -13
- package/dist/validate-query-YtH3d5BP.mjs +0 -38
|
@@ -1,39 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { _ as formatZodIssue, c as InternalError, d as PartialWriteError, f as ResponseShapeError, g as errorMessage, o as ConfigError, p as TimeoutError, r as isPlainObject, y as isNonInterruptFailure } from "./predicates-0C0TsWcJ.mjs";
|
|
2
|
+
import { F as CapabilityError, K as HttpError, Z as parseJsonOrPlain, i as methodRequirements, r as isMethodKey } from "./cli.mjs";
|
|
3
|
+
import { i as NotificationCardPayload, n as CARD_PAYLOAD_TYPE, r as Notification, t as AnyNotification } from "./notification-B5yMuPmo.mjs";
|
|
4
|
+
import { V as profileFromProperties, tt as SessionProperties } from "./runtime-D5yfliIq.mjs";
|
|
4
5
|
import { i as CreatedApiKey, t as ApiKey } from "./api-key-DbsqHlN6.mjs";
|
|
5
|
-
import { n as featureFailures, r as supersedingFeature, t as checkFeatures } from "./requirement-check-
|
|
6
|
-
import { n as createTransport } from "./transport-
|
|
7
|
-
import { i as CardDetail, o as CardQueryResult, t as Card } from "./card-
|
|
8
|
-
import {
|
|
6
|
+
import { n as featureFailures, r as supersedingFeature, t as checkFeatures } from "./requirement-check-1fcffJj6.mjs";
|
|
7
|
+
import { n as createTransport } from "./transport-BWixD5Ww.mjs";
|
|
8
|
+
import { i as CardDetail, o as CardQueryResult, t as Card } from "./card-BJRZ5D5Q.mjs";
|
|
9
|
+
import { t as gateInput } from "./input-gate-registry-Dh8QjKgW.mjs";
|
|
10
|
+
import { _ as fieldRemappedValueSchema, c as FieldSemanticType, d as FieldValues, g as fieldDetailSchema, p as FieldWithDataSensitivity, r as FieldBaseType, s as FieldSearchMatches, t as DATA_SENSITIVITY_GATE } from "./field-C2qOViFZ.mjs";
|
|
9
11
|
import { r as ModerationReviewCreateInput, t as ModerationReview } from "./moderation-review-Bf9bPNQI.mjs";
|
|
10
|
-
import {
|
|
12
|
+
import { i as ParameterValues, o as TemporalUnit } from "./parameter-Bucz3cLJ.mjs";
|
|
11
13
|
import { r as PivotExportFormat, t as DatasetQuery } from "./query-BKtMP5eH.mjs";
|
|
12
|
-
import {
|
|
13
|
-
import { c as DatabaseWithSettings, t as Database } from "./database-
|
|
14
|
+
import { S as TableSelectors, _ as TableQueryMetadata, a as Table, d as TableDataLayerTier, m as TableForeignKey, n as DATA_LAYER_MEDALLION_GATE, r as DATA_LAYER_TIER_GATE, t as DATA_AUTHORITY_WITHDRAWAL_GATE, w as TableVisibilityType } from "./table-hgrX1i-R.mjs";
|
|
15
|
+
import { c as DatabaseWithSettings, t as Database } from "./database-C5ucihp3.mjs";
|
|
14
16
|
import { t as Snippet } from "./snippet-CyKAgIZl.mjs";
|
|
15
|
-
import { r as QueryMetadata, t as CompiledQuery } from "./dataset-
|
|
16
|
-
import { c as CollectionItem, m as CollectionTreeNode, r as Collection } from "./collection-
|
|
17
|
+
import { r as QueryMetadata, t as CompiledQuery } from "./dataset-LJxNN6p5.mjs";
|
|
18
|
+
import { c as CollectionItem, m as CollectionTreeNode, r as Collection } from "./collection-Cz2qLX2m.mjs";
|
|
17
19
|
import { t as ContentTranslationUploadResult } from "./content-translation-BrHOrmj9.mjs";
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
+
import { a as DashboardCreateInput, f as Dashcard, g as dashboardDetailSchema, r as DashboardCopy, t as Dashboard } from "./dashboard-Cwsf-e9T.mjs";
|
|
21
|
+
import { c as dataActionSchema, o as DataActionExecuteResult, t as DATA_ACTION_COLLECTION_GATE } from "./data-action-CuvI17XF.mjs";
|
|
20
22
|
import { i as DataAppEntry, t as DataApp } from "./data-app-BUW-HlUo.mjs";
|
|
21
|
-
import { r as pollUntil } from "./poll-
|
|
22
|
-
import { i as DependencyEntity, s as DependencyGraph, t as BreakingSource, u as DependencyNode } from "./dependency-
|
|
23
|
-
import { t as Document } from "./document-
|
|
23
|
+
import { r as pollUntil } from "./poll-vxN__4cz.mjs";
|
|
24
|
+
import { i as DependencyEntity, s as DependencyGraph, t as BreakingSource, u as DependencyNode } from "./dependency-C1DExO6k.mjs";
|
|
25
|
+
import { t as Document } from "./document-BHOQq2T_.mjs";
|
|
24
26
|
import { i as EidTranslateResult } from "./eid-translation-Ba92VOHe.mjs";
|
|
25
27
|
import { a as SyncExportPreflight, f as SyncTask, g as isSyncTaskTerminal, l as SyncRemoteChanges, n as SyncBranchCreated, r as SyncDirtyItem, t as RemoteSyncState, u as SyncSettingsUpdateResult } from "./git-sync-DP4wQFzm.mjs";
|
|
26
|
-
import { t as Glossary } from "./glossary-
|
|
27
|
-
import { a as libraryWireSchema, i as LibraryPublishTablesInput, n as LibraryCollectionInfo, o as toLibrary } from "./library-
|
|
28
|
-
import { t as Measure } from "./measure-
|
|
29
|
-
import { t as Pulse } from "./pulse-
|
|
30
|
-
import { a as TransformDagTransform, d as TransformTarget, g as
|
|
28
|
+
import { t as Glossary } from "./glossary-iPIWrEbP.mjs";
|
|
29
|
+
import { a as libraryWireSchema, i as LibraryPublishTablesInput, n as LibraryCollectionInfo, o as toLibrary } from "./library-C4g9pdiS.mjs";
|
|
30
|
+
import { t as Measure } from "./measure-BMWrX1ca.mjs";
|
|
31
|
+
import { o as SUBSCRIPTION_FILTERS_GATE, t as Pulse } from "./pulse-B2AmIWsO.mjs";
|
|
32
|
+
import { _ as transformRowSchema, a as TransformDagTransform, d as TransformTarget, g as transformDetailSchema, h as keyedByAlias, i as TransformDagRunResult, l as TransformRunSummary, m as isTransformRunTerminal, o as TransformRun, p as isTransformRunFailed, u as TransformSourceTableEntryInput, v as transformSourceBody } from "./transform-B62craFM.mjs";
|
|
31
33
|
import { r as SearchResult } from "./search-1et9tv_s.mjs";
|
|
32
|
-
import { t as Segment } from "./segment-
|
|
34
|
+
import { t as Segment } from "./segment-Cf-DrdjE.mjs";
|
|
33
35
|
import { t as Setting } from "./setting-DTiLCW8g.mjs";
|
|
34
|
-
import { n as SetupResult } from "./setup-
|
|
36
|
+
import { n as SetupResult } from "./setup-BnczkG96.mjs";
|
|
35
37
|
import { i as TimelineEvent, t as Timeline } from "./timeline-DcsCXNUt.mjs";
|
|
36
|
-
import { c as transformJobSchema, n as TransformJobActiveResult, s as transformJobRunResultSchema } from "./transform-job-
|
|
38
|
+
import { c as transformJobSchema, n as TransformJobActiveResult, s as transformJobRunResultSchema } from "./transform-job-CDIb3B9o.mjs";
|
|
37
39
|
import { t as TransformTag } from "./transform-tag-CcElGp3C.mjs";
|
|
38
40
|
import { i as TransformTestRunResult, t as TransformTest } from "./transform-test-Bexa_K89.mjs";
|
|
39
41
|
import { t as UploadResult } from "./upload-DAtxBBms.mjs";
|
|
@@ -234,112 +236,6 @@ function paginatedEnvelopeSchema(itemSchema) {
|
|
|
234
236
|
}).loose();
|
|
235
237
|
}
|
|
236
238
|
//#endregion
|
|
237
|
-
//#region ../client/src/resources/collection.ts
|
|
238
|
-
const CollectionApiList = z.array(Collection);
|
|
239
|
-
const CollectionTreeApiList = z.array(CollectionTreeNode);
|
|
240
|
-
const COLLECTION_LIST_QUERY = {
|
|
241
|
-
all: {},
|
|
242
|
-
archived: { archived: true },
|
|
243
|
-
personal: { "personal-only": true }
|
|
244
|
-
};
|
|
245
|
-
const DEFAULT_LIST_FILTER = "all";
|
|
246
|
-
function refPath(ref) {
|
|
247
|
-
return encodeURIComponent(ref);
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* List every collection the caller can read, the Library and its children among them, parsing each
|
|
251
|
-
* through the caller's own projection. `Collection` pins `type`, `namespace` and `authority_level`
|
|
252
|
-
* to closed enums, so a consumer reading a few fields off every collection on the instance narrows
|
|
253
|
-
* here: one collection carrying a server value outside those sets then costs nothing to a caller
|
|
254
|
-
* that never reads the field.
|
|
255
|
-
*/
|
|
256
|
-
async function listCollectionsAs(transport, schema, options = {}) {
|
|
257
|
-
return transport.requestParsed(z.array(schema), "/api/collection", { ...options });
|
|
258
|
-
}
|
|
259
|
-
function collectionResource(transport) {
|
|
260
|
-
/**
|
|
261
|
-
* List collections. `filter` picks a server-side preset: everything, archived, or personal. Every
|
|
262
|
-
* preset includes the Library collections that match it. `namespace` lists that namespace's
|
|
263
|
-
* collections, with its root, instead of the default namespace's.
|
|
264
|
-
*/
|
|
265
|
-
async function list(params = {}, options = {}) {
|
|
266
|
-
return {
|
|
267
|
-
data: await transport.requestParsed(CollectionApiList, "/api/collection", {
|
|
268
|
-
...options,
|
|
269
|
-
query: {
|
|
270
|
-
...COLLECTION_LIST_QUERY[params.filter ?? DEFAULT_LIST_FILTER],
|
|
271
|
-
namespace: params.namespace
|
|
272
|
-
}
|
|
273
|
-
}),
|
|
274
|
-
total: null
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
/** Get one collection by id, entity id, or the `root`/`trash` alias. */
|
|
278
|
-
async function get(ref, options = {}) {
|
|
279
|
-
return transport.requestParsed(Collection, `/api/collection/${refPath(ref)}`, { ...options });
|
|
280
|
-
}
|
|
281
|
-
/** Create a new collection. */
|
|
282
|
-
async function create(params, options = {}) {
|
|
283
|
-
return transport.requestParsed(Collection, "/api/collection", {
|
|
284
|
-
...options,
|
|
285
|
-
method: "POST",
|
|
286
|
-
body: params
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Update a collection, patching the fields the body carries. The server reads an absent
|
|
291
|
-
* `archived` as `false`, so a patch without it restores an archived collection, and a patch that
|
|
292
|
-
* moves a collection into the trash ignores `parent_id`.
|
|
293
|
-
*/
|
|
294
|
-
async function update(ref, params, options = {}) {
|
|
295
|
-
return transport.requestParsed(Collection, `/api/collection/${refPath(ref)}`, {
|
|
296
|
-
...options,
|
|
297
|
-
method: "PUT",
|
|
298
|
-
body: params
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
/** Archive (soft-delete) a collection. Metabase models this as an update, not its own endpoint. */
|
|
302
|
-
async function archive(ref, options = {}) {
|
|
303
|
-
return update(ref, { archived: true }, options);
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Walk the items inside a collection one page at a time. This endpoint pages on the server, so
|
|
307
|
-
* the caller consumes pages rather than a single list and decides how far to pull.
|
|
308
|
-
*/
|
|
309
|
-
async function* itemPages(ref, params = {}, options = {}) {
|
|
310
|
-
yield* paginatePages(transport, `/api/collection/${refPath(ref)}/items`, CollectionItem, {
|
|
311
|
-
query: {
|
|
312
|
-
models: params.models,
|
|
313
|
-
archived: params.archived,
|
|
314
|
-
pinned_state: params.pinned_state
|
|
315
|
-
},
|
|
316
|
-
...options.offset !== void 0 && { offset: options.offset },
|
|
317
|
-
...options.max !== void 0 && { max: options.max },
|
|
318
|
-
...options.pageSize !== void 0 && { pageSize: options.pageSize },
|
|
319
|
-
...options.signal !== void 0 && { signal: options.signal }
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
/** Fetch the collection hierarchy as a forest of nested nodes. */
|
|
323
|
-
async function tree(params = {}, options = {}) {
|
|
324
|
-
return {
|
|
325
|
-
data: await transport.requestParsed(CollectionTreeApiList, "/api/collection/tree", {
|
|
326
|
-
...options,
|
|
327
|
-
query: { "include-library": params["include-library"] }
|
|
328
|
-
}),
|
|
329
|
-
total: null
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
return {
|
|
333
|
-
list,
|
|
334
|
-
get,
|
|
335
|
-
create,
|
|
336
|
-
update,
|
|
337
|
-
archive,
|
|
338
|
-
itemPages,
|
|
339
|
-
tree
|
|
340
|
-
};
|
|
341
|
-
}
|
|
342
|
-
//#endregion
|
|
343
239
|
//#region ../client/src/version/refusal.ts
|
|
344
240
|
const REFUSAL_STATUSES = /* @__PURE__ */ new Set([
|
|
345
241
|
400,
|
|
@@ -462,6 +358,140 @@ function topLevelField(path) {
|
|
|
462
358
|
return end === -1 ? path : path.slice(0, end);
|
|
463
359
|
}
|
|
464
360
|
//#endregion
|
|
361
|
+
//#region ../client/src/resources/collection.ts
|
|
362
|
+
const CollectionApiList = z.array(Collection);
|
|
363
|
+
const CollectionTreeApiList = z.array(CollectionTreeNode);
|
|
364
|
+
const COLLECTION_LIST_QUERY = {
|
|
365
|
+
all: {},
|
|
366
|
+
archived: { archived: true },
|
|
367
|
+
personal: { "personal-only": true }
|
|
368
|
+
};
|
|
369
|
+
const DEFAULT_LIST_FILTER = "all";
|
|
370
|
+
const INCLUDE_LIBRARY = { "include-library": true };
|
|
371
|
+
const TRASH_ALIAS = "trash";
|
|
372
|
+
const MODELS_FIELDS$1 = ["models"];
|
|
373
|
+
const ITEM_MODEL_FEATURES = {
|
|
374
|
+
transform: "transforms",
|
|
375
|
+
measure: "collectionItemMeasures",
|
|
376
|
+
exploration: "explorations"
|
|
377
|
+
};
|
|
378
|
+
function itemModelFeatures(_ref, params = {}) {
|
|
379
|
+
if (params.models === void 0) return [];
|
|
380
|
+
return params.models.flatMap((model) => {
|
|
381
|
+
const feature = ITEM_MODEL_FEATURES[model];
|
|
382
|
+
return feature === void 0 ? [] : [{
|
|
383
|
+
feature,
|
|
384
|
+
fields: MODELS_FIELDS$1
|
|
385
|
+
}];
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
function refPath(ref) {
|
|
389
|
+
return encodeURIComponent(ref);
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* List every collection the caller can read, the Library and its children among them, parsing each
|
|
393
|
+
* through the caller's own projection. `Collection` pins `type`, `namespace` and `authority_level`
|
|
394
|
+
* to closed enums, so a consumer reading a few fields off every collection on the instance narrows
|
|
395
|
+
* here: one collection carrying a server value outside those sets then costs nothing to a caller
|
|
396
|
+
* that never reads the field.
|
|
397
|
+
*/
|
|
398
|
+
async function listCollectionsAs(transport, schema, options = {}) {
|
|
399
|
+
return transport.requestParsed(z.array(schema), "/api/collection", {
|
|
400
|
+
...options,
|
|
401
|
+
query: INCLUDE_LIBRARY
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
function collectionResource(transport) {
|
|
405
|
+
const { explainWalk } = explainer(transport, "collection");
|
|
406
|
+
/**
|
|
407
|
+
* List collections. `filter` picks a server-side preset: everything, archived, or personal. Every
|
|
408
|
+
* preset includes the Library collections that match it. `namespace` lists that namespace's
|
|
409
|
+
* collections, with its root, instead of the default namespace's.
|
|
410
|
+
*/
|
|
411
|
+
async function list(params = {}, options = {}) {
|
|
412
|
+
return {
|
|
413
|
+
data: await transport.requestParsed(CollectionApiList, "/api/collection", {
|
|
414
|
+
...options,
|
|
415
|
+
query: {
|
|
416
|
+
...COLLECTION_LIST_QUERY[params.filter ?? DEFAULT_LIST_FILTER],
|
|
417
|
+
...INCLUDE_LIBRARY,
|
|
418
|
+
namespace: params.namespace
|
|
419
|
+
}
|
|
420
|
+
}),
|
|
421
|
+
total: null
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
/** Get one collection by id, entity id, or the `root`/`trash` alias. */
|
|
425
|
+
async function get(ref, options = {}) {
|
|
426
|
+
return transport.requestParsed(Collection, `/api/collection/${refPath(ref)}`, { ...options });
|
|
427
|
+
}
|
|
428
|
+
/** Create a new collection. */
|
|
429
|
+
async function create(params, options = {}) {
|
|
430
|
+
return transport.requestParsed(Collection, "/api/collection", {
|
|
431
|
+
...options,
|
|
432
|
+
method: "POST",
|
|
433
|
+
body: params
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Update a collection, patching the fields the body carries. The server reads an absent
|
|
438
|
+
* `archived` as `false`, so a patch without it restores an archived collection, and a patch that
|
|
439
|
+
* moves a collection into the trash ignores `parent_id`.
|
|
440
|
+
*/
|
|
441
|
+
async function update(ref, params, options = {}) {
|
|
442
|
+
return transport.requestParsed(Collection, `/api/collection/${refPath(ref)}`, {
|
|
443
|
+
...options,
|
|
444
|
+
method: "PUT",
|
|
445
|
+
body: params
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
/** Archive (soft-delete) a collection. Metabase models this as an update, not its own endpoint. */
|
|
449
|
+
async function archive(ref, options = {}) {
|
|
450
|
+
return update(ref, { archived: true }, options);
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Walk the items inside a collection one page at a time. This endpoint pages on the server, so
|
|
454
|
+
* the caller consumes pages rather than a single list and decides how far to pull. The `trash`
|
|
455
|
+
* alias costs one more request, which reads the trash collection's id. A `models` filter takes
|
|
456
|
+
* `transform` only with `transforms`, `measure` only with `collectionItemMeasures`, and
|
|
457
|
+
* `exploration` only with `explorations`.
|
|
458
|
+
*/
|
|
459
|
+
async function* itemPages(ref, params = {}, options = {}) {
|
|
460
|
+
const withSignal = options.signal !== void 0 && { signal: options.signal };
|
|
461
|
+
yield* paginatePages(transport, `/api/collection/${refPath(ref === TRASH_ALIAS ? (await get(TRASH_ALIAS, { ...withSignal })).id : ref)}/items`, CollectionItem, {
|
|
462
|
+
query: {
|
|
463
|
+
models: params.models,
|
|
464
|
+
archived: params.archived,
|
|
465
|
+
pinned_state: params.pinned_state,
|
|
466
|
+
"pinned-state": params.pinned_state
|
|
467
|
+
},
|
|
468
|
+
...options.offset !== void 0 && { offset: options.offset },
|
|
469
|
+
...options.max !== void 0 && { max: options.max },
|
|
470
|
+
...options.pageSize !== void 0 && { pageSize: options.pageSize },
|
|
471
|
+
...withSignal
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
/** Fetch the collection hierarchy as a forest of nested nodes. */
|
|
475
|
+
async function tree(params = {}, options = {}) {
|
|
476
|
+
return {
|
|
477
|
+
data: await transport.requestParsed(CollectionTreeApiList, "/api/collection/tree", {
|
|
478
|
+
...options,
|
|
479
|
+
query: { "include-library": params["include-library"] }
|
|
480
|
+
}),
|
|
481
|
+
total: null
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
return {
|
|
485
|
+
list,
|
|
486
|
+
get,
|
|
487
|
+
create,
|
|
488
|
+
update,
|
|
489
|
+
archive,
|
|
490
|
+
itemPages: explainWalk("itemPages", itemPages, itemModelFeatures),
|
|
491
|
+
tree
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
//#endregion
|
|
465
495
|
//#region ../client/src/resources/csv-upload.ts
|
|
466
496
|
const CSV_CONTENT_TYPE = "text/csv";
|
|
467
497
|
function buildCsvFormData(file) {
|
|
@@ -493,6 +523,17 @@ function contentTranslationResource(transport) {
|
|
|
493
523
|
};
|
|
494
524
|
}
|
|
495
525
|
//#endregion
|
|
526
|
+
//#region ../client/src/resources/request-body.ts
|
|
527
|
+
/**
|
|
528
|
+
* Parse the body a caller hands a method, refusing one that does not match `schema` before any
|
|
529
|
+
* request. `what` names the body in the refusal.
|
|
530
|
+
*/
|
|
531
|
+
function parseRequestBody(schema, value, what) {
|
|
532
|
+
const parsed = schema.safeParse(value);
|
|
533
|
+
if (!parsed.success) throw new ConfigError(`invalid ${what}: ${parsed.error.issues.map(formatZodIssue).join("; ")}`);
|
|
534
|
+
return parsed.data;
|
|
535
|
+
}
|
|
536
|
+
//#endregion
|
|
496
537
|
//#region ../client/src/resources/dashboard.ts
|
|
497
538
|
const DashboardApiList = z.array(Dashboard);
|
|
498
539
|
const PreflightDashcard = z.looseObject({ card_id: z.number().int().nullable().optional() });
|
|
@@ -510,17 +551,19 @@ function dashboardResource(transport) {
|
|
|
510
551
|
}
|
|
511
552
|
/** Get one dashboard by id, with its dashcards, tabs and parameters. */
|
|
512
553
|
async function get(id, options = {}) {
|
|
513
|
-
return transport.requestParsed(
|
|
554
|
+
return transport.requestParsed(dashboardDetailSchema, `/api/dashboard/${id}`, { ...options });
|
|
514
555
|
}
|
|
515
556
|
/**
|
|
516
557
|
* Create a dashboard. The endpoint accepts no dashcards or tabs — a follow-up `update` is what
|
|
517
|
-
* puts content on a fresh dashboard.
|
|
558
|
+
* puts content on a fresh dashboard. A key `DashboardCreateInput` does not declare is dropped
|
|
559
|
+
* before the request, as the server drops it.
|
|
518
560
|
*/
|
|
519
561
|
async function create(params, options = {}) {
|
|
562
|
+
const body = parseRequestBody(DashboardCreateInput, params, "dashboard");
|
|
520
563
|
return transport.requestParsed(Dashboard, "/api/dashboard", {
|
|
521
564
|
...options,
|
|
522
565
|
method: "POST",
|
|
523
|
-
body
|
|
566
|
+
body
|
|
524
567
|
});
|
|
525
568
|
}
|
|
526
569
|
/**
|
|
@@ -531,7 +574,7 @@ function dashboardResource(transport) {
|
|
|
531
574
|
*/
|
|
532
575
|
async function update(id, params, options = {}) {
|
|
533
576
|
const body = await withCurrentTabs(id, params, options);
|
|
534
|
-
return transport.requestParsed(
|
|
577
|
+
return transport.requestParsed(dashboardDetailSchema, `/api/dashboard/${id}`, {
|
|
535
578
|
...options,
|
|
536
579
|
method: "PUT",
|
|
537
580
|
body
|
|
@@ -704,13 +747,18 @@ function stripEntityId(dashcard) {
|
|
|
704
747
|
};
|
|
705
748
|
}
|
|
706
749
|
//#endregion
|
|
707
|
-
//#region ../client/src/
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
750
|
+
//#region ../client/src/version/input-gates.ts
|
|
751
|
+
/** Whether `value`, as a caller passes it for the gated field, is one the gate applies to. */
|
|
752
|
+
function gateTriggered(gate, value) {
|
|
753
|
+
const { when } = gate;
|
|
754
|
+
switch (when.kind) {
|
|
755
|
+
case "present": return value !== void 0;
|
|
756
|
+
case "values": return when.values.some((gated) => gated === value);
|
|
757
|
+
case "nonEmpty": return Array.isArray(value) && value.length > 0;
|
|
758
|
+
}
|
|
713
759
|
}
|
|
760
|
+
//#endregion
|
|
761
|
+
//#region ../client/src/resources/data-action.ts
|
|
714
762
|
function dataActionResource(transport) {
|
|
715
763
|
const { explain } = explainer(transport, "dataAction");
|
|
716
764
|
async function readSchema(options) {
|
|
@@ -739,8 +787,13 @@ function dataActionResource(transport) {
|
|
|
739
787
|
body: params
|
|
740
788
|
});
|
|
741
789
|
}
|
|
742
|
-
/**
|
|
790
|
+
/**
|
|
791
|
+
* Update a data action by id, patching only the fields the body carries. A server whose data
|
|
792
|
+
* actions have no collection never moves the action, and from 58.31 it strips the undeclared key and
|
|
793
|
+
* answers as if it had. So the field is refused there before the wire.
|
|
794
|
+
*/
|
|
743
795
|
async function update(id, params, options = {}) {
|
|
796
|
+
await transport.requireFeatures(gateTriggered(DATA_ACTION_COLLECTION_GATE, params.collection_id) ? [DATA_ACTION_COLLECTION_GATE.feature] : [], options);
|
|
744
797
|
const schema = await readSchema(options);
|
|
745
798
|
return transport.requestParsed(schema, `/api/action/${id}`, {
|
|
746
799
|
...options,
|
|
@@ -772,7 +825,7 @@ function dataActionResource(transport) {
|
|
|
772
825
|
list,
|
|
773
826
|
get,
|
|
774
827
|
create: explain("create", create),
|
|
775
|
-
update
|
|
828
|
+
update,
|
|
776
829
|
archive,
|
|
777
830
|
delete: remove,
|
|
778
831
|
execute
|
|
@@ -1028,18 +1081,24 @@ function datasetResource(transport) {
|
|
|
1028
1081
|
//#region ../client/src/resources/dependency.ts
|
|
1029
1082
|
const DependencyNodeApiList = z.array(DependencyNode);
|
|
1030
1083
|
const DependencyEntityApiList = z.array(DependencyEntity);
|
|
1031
|
-
function
|
|
1032
|
-
|
|
1084
|
+
function entityTypeFeatures(type) {
|
|
1085
|
+
if (type === "measure") return [{
|
|
1033
1086
|
feature: "measureDependencyGraph",
|
|
1034
1087
|
fields: ["type"]
|
|
1035
|
-
}]
|
|
1088
|
+
}];
|
|
1089
|
+
if (type === "action") return [{
|
|
1090
|
+
feature: "actionDependencyGraph",
|
|
1091
|
+
fields: ["type"]
|
|
1092
|
+
}];
|
|
1093
|
+
return [];
|
|
1036
1094
|
}
|
|
1037
1095
|
function dependencyResource(transport) {
|
|
1038
1096
|
const { explain, explainWalk } = explainer(transport, "dependency");
|
|
1039
1097
|
/**
|
|
1040
1098
|
* The upstream dependency graph of one entity. `nodes` holds the starting entity plus every
|
|
1041
1099
|
* entity it depends on, directly or transitively; each edge runs from the dependent to what it
|
|
1042
|
-
* depends on. A measure starts a graph only on a server with `measureDependencyGraph
|
|
1100
|
+
* depends on. A measure starts a graph only on a server with `measureDependencyGraph`, and an
|
|
1101
|
+
* action only on one with `actionDependencyGraph`.
|
|
1043
1102
|
*/
|
|
1044
1103
|
async function graph(type, id, options = {}) {
|
|
1045
1104
|
return transport.requestParsed(DependencyGraph, "/api/ee/dependencies/graph", {
|
|
@@ -1147,9 +1206,9 @@ function dependencyResource(transport) {
|
|
|
1147
1206
|
});
|
|
1148
1207
|
}
|
|
1149
1208
|
return {
|
|
1150
|
-
graph: explain("graph", graph,
|
|
1151
|
-
dependents: explain("dependents", dependents),
|
|
1152
|
-
broken: explain("broken", broken),
|
|
1209
|
+
graph: explain("graph", graph, entityTypeFeatures),
|
|
1210
|
+
dependents: explain("dependents", dependents, entityTypeFeatures),
|
|
1211
|
+
broken: explain("broken", broken, entityTypeFeatures),
|
|
1153
1212
|
unreferencedPages: explainWalk("unreferencedPages", unreferencedPages),
|
|
1154
1213
|
breakingPages: explainWalk("breakingPages", breakingPages)
|
|
1155
1214
|
};
|
|
@@ -1338,7 +1397,7 @@ function fieldResource(transport) {
|
|
|
1338
1397
|
* the label is refused there before the wire. Answers the field the way `get` does.
|
|
1339
1398
|
*/
|
|
1340
1399
|
async function update(id, params, options = {}) {
|
|
1341
|
-
await transport.requireFeatures(params.data_sensitivity
|
|
1400
|
+
await transport.requireFeatures(gateTriggered(DATA_SENSITIVITY_GATE, params.data_sensitivity) ? [DATA_SENSITIVITY_GATE.feature] : [], options);
|
|
1342
1401
|
const { features } = await transport.server(options);
|
|
1343
1402
|
return transport.requestParsed(fieldDetailSchema(features), `/api/field/${id}`, {
|
|
1344
1403
|
...options,
|
|
@@ -1810,17 +1869,6 @@ function glossaryResource(transport) {
|
|
|
1810
1869
|
};
|
|
1811
1870
|
}
|
|
1812
1871
|
//#endregion
|
|
1813
|
-
//#region ../client/src/resources/request-body.ts
|
|
1814
|
-
/**
|
|
1815
|
-
* Parse the body a caller hands a method, refusing one that does not match `schema` before any
|
|
1816
|
-
* request. `what` names the body in the refusal.
|
|
1817
|
-
*/
|
|
1818
|
-
function parseRequestBody(schema, value, what) {
|
|
1819
|
-
const parsed = schema.safeParse(value);
|
|
1820
|
-
if (!parsed.success) throw new ConfigError(`invalid ${what}: ${parsed.error.issues.map(formatZodIssue).join("; ")}`);
|
|
1821
|
-
return parsed.data;
|
|
1822
|
-
}
|
|
1823
|
-
//#endregion
|
|
1824
1872
|
//#region ../client/src/resources/library.ts
|
|
1825
1873
|
const LIBRARY_ROOT_PATH = "/api/ee/library/";
|
|
1826
1874
|
const PUBLISH_TABLES_PATH = "/api/ee/data-studio/table/publish-tables";
|
|
@@ -2201,7 +2249,7 @@ function notificationResource(transport) {
|
|
|
2201
2249
|
}
|
|
2202
2250
|
/** Get one question alert by id, refusing an id that names a system-event notification. */
|
|
2203
2251
|
async function get(id, options = {}) {
|
|
2204
|
-
return assertCardAlert(await transport.requestParsed(
|
|
2252
|
+
return assertCardAlert(await transport.requestParsed(AnyNotification, `/api/notification/${id}`, { ...options }));
|
|
2205
2253
|
}
|
|
2206
2254
|
/** Create a question alert — its card payload, schedules and handlers — from a full body. */
|
|
2207
2255
|
async function create(params, options = {}) {
|
|
@@ -2370,7 +2418,7 @@ function pulseResource(transport) {
|
|
|
2370
2418
|
return update(id, { archived: true }, options);
|
|
2371
2419
|
}
|
|
2372
2420
|
async function requireSubscriptionFilters(parameters, options) {
|
|
2373
|
-
if (
|
|
2421
|
+
if (gateTriggered(SUBSCRIPTION_FILTERS_GATE, parameters)) await transport.requireFeatures([SUBSCRIPTION_FILTERS_GATE.feature], options);
|
|
2374
2422
|
}
|
|
2375
2423
|
return {
|
|
2376
2424
|
list,
|
|
@@ -2594,8 +2642,34 @@ const RevisionRow = z.object({
|
|
|
2594
2642
|
is_reversion: z.boolean(),
|
|
2595
2643
|
most_recent: z.boolean()
|
|
2596
2644
|
}).loose();
|
|
2645
|
+
const REVISION_ENTITY_GATES = [
|
|
2646
|
+
{
|
|
2647
|
+
feature: "measures",
|
|
2648
|
+
effect: "needs",
|
|
2649
|
+
when: {
|
|
2650
|
+
kind: "values",
|
|
2651
|
+
values: ["measure"]
|
|
2652
|
+
}
|
|
2653
|
+
},
|
|
2654
|
+
{
|
|
2655
|
+
feature: "transforms",
|
|
2656
|
+
effect: "needs",
|
|
2657
|
+
when: {
|
|
2658
|
+
kind: "values",
|
|
2659
|
+
values: ["transform"]
|
|
2660
|
+
}
|
|
2661
|
+
},
|
|
2662
|
+
{
|
|
2663
|
+
feature: "transformTests",
|
|
2664
|
+
effect: "needs",
|
|
2665
|
+
when: {
|
|
2666
|
+
kind: "values",
|
|
2667
|
+
values: ["transform-test"]
|
|
2668
|
+
}
|
|
2669
|
+
}
|
|
2670
|
+
];
|
|
2597
2671
|
z.object({
|
|
2598
|
-
entity: RevisionEntity,
|
|
2672
|
+
entity: gateInput(z.enum(RevisionEntity.options), ...REVISION_ENTITY_GATES),
|
|
2599
2673
|
id: z.number().int().positive(),
|
|
2600
2674
|
revision_id: z.number().int().positive()
|
|
2601
2675
|
}).strict();
|
|
@@ -2618,17 +2692,11 @@ const RevisionApiRevert = z.union([Revision.transform((revision) => ({
|
|
|
2618
2692
|
outcome: "unchanged",
|
|
2619
2693
|
revision
|
|
2620
2694
|
}))]);
|
|
2621
|
-
const ENTITY_FEATURES = {
|
|
2622
|
-
measure: "measures",
|
|
2623
|
-
transform: "transforms",
|
|
2624
|
-
"transform-test": "transformTests"
|
|
2625
|
-
};
|
|
2626
2695
|
function entityFeatures(entity) {
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
feature,
|
|
2696
|
+
return REVISION_ENTITY_GATES.filter((gate) => gateTriggered(gate, entity)).map((gate) => ({
|
|
2697
|
+
feature: gate.feature,
|
|
2630
2698
|
fields: ["entity"]
|
|
2631
|
-
}
|
|
2699
|
+
}));
|
|
2632
2700
|
}
|
|
2633
2701
|
function revisionResource(transport) {
|
|
2634
2702
|
const { explain } = explainer(transport, "revision");
|
|
@@ -2667,6 +2735,25 @@ function verifiedFeatures(params = {}) {
|
|
|
2667
2735
|
fields: ["verified"]
|
|
2668
2736
|
}] : [];
|
|
2669
2737
|
}
|
|
2738
|
+
const MODELS_FIELDS = ["models"];
|
|
2739
|
+
const SEARCH_MODEL_FEATURES = {
|
|
2740
|
+
measure: "measures",
|
|
2741
|
+
transform: "transforms",
|
|
2742
|
+
exploration: "explorations"
|
|
2743
|
+
};
|
|
2744
|
+
function modelFeatures(params) {
|
|
2745
|
+
if (params.models === void 0) return [];
|
|
2746
|
+
return params.models.flatMap((model) => {
|
|
2747
|
+
const feature = SEARCH_MODEL_FEATURES[model];
|
|
2748
|
+
return feature === void 0 ? [] : [{
|
|
2749
|
+
feature,
|
|
2750
|
+
fields: MODELS_FIELDS
|
|
2751
|
+
}];
|
|
2752
|
+
});
|
|
2753
|
+
}
|
|
2754
|
+
function queryFeatures(params = {}) {
|
|
2755
|
+
return [...verifiedFeatures(params), ...modelFeatures(params)];
|
|
2756
|
+
}
|
|
2670
2757
|
function searchResource(transport) {
|
|
2671
2758
|
const { explain } = explainer(transport, "search");
|
|
2672
2759
|
/**
|
|
@@ -2680,7 +2767,9 @@ function searchResource(transport) {
|
|
|
2680
2767
|
* default), and `limit`/`offset` are the window the server applies before ranking hydration.
|
|
2681
2768
|
* `verified` needs the `content_verification` premium feature, and is refused before the wire
|
|
2682
2769
|
* without it: a server granting neither it nor `official_collections` refuses the filter, and one
|
|
2683
|
-
* granting `official_collections` alone takes it without applying it.
|
|
2770
|
+
* granting `official_collections` alone takes it without applying it. `models` takes `measure`
|
|
2771
|
+
* only with `measures`, `transform` with `transforms` or on a Metabase 58 enterprise build, and
|
|
2772
|
+
* `exploration` only with `explorations`.
|
|
2684
2773
|
*/
|
|
2685
2774
|
async function query(params = {}, options = {}) {
|
|
2686
2775
|
await transport.requireFeatures(verifiedFeatures(params).map((requirement) => requirement.feature), options);
|
|
@@ -2706,7 +2795,7 @@ function searchResource(transport) {
|
|
|
2706
2795
|
total: response.total
|
|
2707
2796
|
};
|
|
2708
2797
|
}
|
|
2709
|
-
return { query: explain("query", query,
|
|
2798
|
+
return { query: explain("query", query, queryFeatures) };
|
|
2710
2799
|
}
|
|
2711
2800
|
//#endregion
|
|
2712
2801
|
//#region ../client/src/resources/segment.ts
|
|
@@ -2885,14 +2974,11 @@ function listParamFeatures(params) {
|
|
|
2885
2974
|
return LIST_PARAM_FEATURES.filter(([param]) => params[param] === true).map(([, feature]) => feature);
|
|
2886
2975
|
}
|
|
2887
2976
|
function dataLayerFeatures(value, field) {
|
|
2888
|
-
return
|
|
2889
|
-
feature:
|
|
2977
|
+
return gateTriggered(DATA_LAYER_TIER_GATE, value) ? [{
|
|
2978
|
+
feature: DATA_LAYER_TIER_GATE.feature,
|
|
2890
2979
|
fields: [field]
|
|
2891
2980
|
}] : [];
|
|
2892
2981
|
}
|
|
2893
|
-
function isTierName(value) {
|
|
2894
|
-
return value !== null && value !== void 0 && TableDataLayerTier.safeParse(value).success;
|
|
2895
|
-
}
|
|
2896
2982
|
const UPLOAD_UPDATE_PATHS = {
|
|
2897
2983
|
append: "append-csv",
|
|
2898
2984
|
replace: "replace-csv"
|
|
@@ -2946,10 +3032,11 @@ function tableResource(transport) {
|
|
|
2946
3032
|
return updated;
|
|
2947
3033
|
}
|
|
2948
3034
|
async function refuseRewrittenDataLayer(value, options) {
|
|
2949
|
-
if (
|
|
3035
|
+
if (!gateTriggered(DATA_LAYER_MEDALLION_GATE, value)) return;
|
|
2950
3036
|
const profile = await transport.preflightServer(options);
|
|
2951
3037
|
if (profile === null) return;
|
|
2952
|
-
const
|
|
3038
|
+
const detail = `data_layer "${value}" is a medallion name; this server names a table's layer ${TableDataLayerTier.options.join(", ")} and would map it onto one of those without a word`;
|
|
3039
|
+
const failure = supersedingFeature(DATA_LAYER_MEDALLION_GATE.feature, profile, detail);
|
|
2953
3040
|
if (failure !== null) transport.refuseBeforeSending(new CapabilityError(failure));
|
|
2954
3041
|
}
|
|
2955
3042
|
/** Get a table by id with its fields hydrated — the metadata the query builder runs on. */
|
|
@@ -3025,7 +3112,7 @@ function tableResource(transport) {
|
|
|
3025
3112
|
};
|
|
3026
3113
|
}
|
|
3027
3114
|
async function requireDataAuthorityNull(value, options) {
|
|
3028
|
-
if (value
|
|
3115
|
+
if (gateTriggered(DATA_AUTHORITY_WITHDRAWAL_GATE, value)) await transport.requireFeatures([DATA_AUTHORITY_WITHDRAWAL_GATE.feature], options);
|
|
3029
3116
|
}
|
|
3030
3117
|
async function postSelection(path, selectors, options) {
|
|
3031
3118
|
const body = parseRequestBody(TableSelectors, selectors, "table selectors");
|
|
@@ -3583,10 +3670,22 @@ const TEST_RUN_ROW_LIMIT = {
|
|
|
3583
3670
|
const TestRunRowLimit = z.number().int().min(TEST_RUN_ROW_LIMIT.min).max(TEST_RUN_ROW_LIMIT.max);
|
|
3584
3671
|
z.object({
|
|
3585
3672
|
code: z.string(),
|
|
3586
|
-
source_tables: z.array(
|
|
3673
|
+
source_tables: z.array(TransformSourceTableEntryInput).min(1),
|
|
3587
3674
|
output_row_limit: TestRunRowLimit.optional(),
|
|
3588
3675
|
per_input_row_limit: TestRunRowLimit.optional()
|
|
3589
3676
|
}).strict();
|
|
3677
|
+
function toTestRunTableValue(entry) {
|
|
3678
|
+
const { alias: _alias, ...reference } = entry;
|
|
3679
|
+
return typeof entry.table_id === "number" ? entry.table_id : reference;
|
|
3680
|
+
}
|
|
3681
|
+
/** A test run body as a server with `features` reads it. */
|
|
3682
|
+
function pythonTestRunBody(params, features) {
|
|
3683
|
+
if (features.transformSourceTablesAsList) return params;
|
|
3684
|
+
return {
|
|
3685
|
+
...params,
|
|
3686
|
+
source_tables: keyedByAlias(params.source_tables, toTestRunTableValue)
|
|
3687
|
+
};
|
|
3688
|
+
}
|
|
3590
3689
|
const PythonTestRunOutput = z.object({
|
|
3591
3690
|
cols: z.array(z.object({ name: z.string() }).loose()),
|
|
3592
3691
|
rows: z.array(z.unknown())
|
|
@@ -3643,10 +3742,11 @@ function transformPythonResource(transport) {
|
|
|
3643
3742
|
* sizes are capped at 100 rows.
|
|
3644
3743
|
*/
|
|
3645
3744
|
async function testRun(params, options = {}) {
|
|
3745
|
+
const { features } = await transport.server(options);
|
|
3646
3746
|
return transport.requestParsed(PythonApiTestRun, "/api/ee/transforms-python/test-run", {
|
|
3647
3747
|
...options,
|
|
3648
3748
|
method: "POST",
|
|
3649
|
-
body: params
|
|
3749
|
+
body: pythonTestRunBody(params, features)
|
|
3650
3750
|
});
|
|
3651
3751
|
}
|
|
3652
3752
|
return {
|
|
@@ -3687,20 +3787,30 @@ function transformResource(transport) {
|
|
|
3687
3787
|
const { features } = await transport.server(options);
|
|
3688
3788
|
return transport.requestParsed(transformDetailSchema(features), `/api/transform/${id}`, { ...options });
|
|
3689
3789
|
}
|
|
3790
|
+
async function writeBody(params, options) {
|
|
3791
|
+
if (params.source === void 0) return params;
|
|
3792
|
+
const { features } = await transport.server(options);
|
|
3793
|
+
return {
|
|
3794
|
+
...params,
|
|
3795
|
+
source: transformSourceBody(params.source, features)
|
|
3796
|
+
};
|
|
3797
|
+
}
|
|
3690
3798
|
/** Create a transform — a query plus the warehouse table it writes — from a full body. */
|
|
3691
3799
|
async function create(params, options = {}) {
|
|
3800
|
+
const body = await writeBody(params, options);
|
|
3692
3801
|
return requestTransform("/api/transform", {
|
|
3693
3802
|
...options,
|
|
3694
3803
|
method: "POST",
|
|
3695
|
-
body
|
|
3804
|
+
body
|
|
3696
3805
|
});
|
|
3697
3806
|
}
|
|
3698
3807
|
/** Update a transform by id, patching only the fields the body carries. */
|
|
3699
3808
|
async function update(id, params, options = {}) {
|
|
3809
|
+
const body = await writeBody(params, options);
|
|
3700
3810
|
return requestTransform(`/api/transform/${id}`, {
|
|
3701
3811
|
...options,
|
|
3702
3812
|
method: "PUT",
|
|
3703
|
-
body
|
|
3813
|
+
body
|
|
3704
3814
|
});
|
|
3705
3815
|
}
|
|
3706
3816
|
/** Delete a transform by id, leaving any table it already materialized in place. */
|
|
@@ -4027,7 +4137,7 @@ function parseResponseInteger(value, source) {
|
|
|
4027
4137
|
//#region ../client/src/domain/user.ts
|
|
4028
4138
|
const CurrentUser = z.object({
|
|
4029
4139
|
id: z.number().int(),
|
|
4030
|
-
email: z.
|
|
4140
|
+
email: z.string(),
|
|
4031
4141
|
common_name: z.string(),
|
|
4032
4142
|
is_superuser: z.boolean()
|
|
4033
4143
|
}).loose();
|