@metabase/cli 0.5.0 → 0.5.1

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.
Files changed (297) hide show
  1. package/dist/{add-collection-COtKcy6Y.mjs → add-collection-BnGPc0Vv.mjs} +3 -3
  2. package/dist/{alert-DMlSjPEv.mjs → alert-DQkF8jYR.mjs} +7 -7
  3. package/dist/{alerts-s3al16NZ.mjs → alerts-BncG7w1_.mjs} +6 -6
  4. package/dist/{append-CbGmdeLw.mjs → append-D4ekYCuD.mjs} +4 -4
  5. package/dist/{archive-Ce4eArrs.mjs → archive-BQ4OA-R4.mjs} +3 -3
  6. package/dist/{archive-5EY9UJU_.mjs → archive-BXr9kFNz.mjs} +5 -5
  7. package/dist/{archive-a05W75XH.mjs → archive-BifJXCHF.mjs} +3 -3
  8. package/dist/{archive-DW7x0IFB.mjs → archive-CxNUeWII2.mjs} +4 -4
  9. package/dist/{archive-C_UHeanE.mjs → archive-D2WCz3Oe.mjs} +3 -3
  10. package/dist/{archive-BFmx4B91.mjs → archive-DjHLWUfC.mjs} +5 -5
  11. package/dist/{archive-BZCYIBhQ.mjs → archive-DnCF-Ecm.mjs} +5 -5
  12. package/dist/{archive-DzSdJVqE.mjs → archive-DocyUIME.mjs} +5 -5
  13. package/dist/{archive-DDO2XX0E.mjs → archive-DpCP4yR1.mjs} +4 -4
  14. package/dist/{archive-DvbaSglr.mjs → archive-EhW6blNc.mjs} +3 -3
  15. package/dist/archive-ULXc3xzI.mjs +32 -0
  16. package/dist/{archive-CnDriekB.mjs → archive-v08JESCM.mjs} +5 -5
  17. package/dist/{auth-DOz7KW5E.mjs → auth-BPbsm8yV.mjs} +5 -5
  18. package/dist/{body-Di7940x_.mjs → body-BkkQkGJg.mjs} +2 -2
  19. package/dist/{branch-flag-CfJ8vwgu.mjs → branch-flag-CTDvbaBa.mjs} +1 -1
  20. package/dist/{branches-BC-vlk6i.mjs → branches-lPHtM_xR.mjs} +3 -3
  21. package/dist/{breaking-ByrjsFjq.mjs → breaking-DjMlCD96.mjs} +6 -6
  22. package/dist/{broken-DLSk1T88.mjs → broken-DUX3GWS5.mjs} +8 -8
  23. package/dist/{bulk-discard-values-VKGj8c7z.mjs → bulk-discard-values-Dl8Lzypf.mjs} +5 -5
  24. package/dist/{bulk-edit-CpuleeCQ.mjs → bulk-edit-N2xLVtfG.mjs} +4 -4
  25. package/dist/{bulk-rescan-values-DeGwiqLS.mjs → bulk-rescan-values-BK2rH2Ik.mjs} +4 -4
  26. package/dist/{bulk-sync-schema-BKVhauW1.mjs → bulk-sync-schema-BKJc9Rzq.mjs} +4 -4
  27. package/dist/{cancel-qKj45001.mjs → cancel-DzkRVGIk.mjs} +3 -3
  28. package/dist/{cancel-task-nmBBd1Ky.mjs → cancel-task-BiTlDY7a.mjs} +2 -2
  29. package/dist/card-BTBDBsu-.mjs +25 -0
  30. package/dist/{card-DSrgU7lT.mjs → card-CQNUT9pm.mjs} +1 -1
  31. package/dist/{card-Bv4ZN0oV.mjs → card-P5mBknsl.mjs} +2 -12
  32. package/dist/{cards-Bq73s48q.mjs → cards-CSL8ukS1.mjs} +4 -4
  33. package/dist/cli.mjs +80 -48
  34. package/dist/{client-BmURNkkW.mjs → client-BBwYPXDW.mjs} +100 -591
  35. package/dist/collection-B19phRNU.mjs +21 -0
  36. package/dist/{collection-zrZoJfgR.mjs → collection-B2wRXyTF.mjs} +11 -3
  37. package/dist/{collection-C03LXnCT.mjs → collection-CTnYZ2Jj.mjs} +1 -1
  38. package/dist/{collection-namespace-DaDzK31i.mjs → collection-namespace-B1OkM7p1.mjs} +1 -1
  39. package/dist/{content-translation-BlG41YrA.mjs → content-translation-DoGTQnvH.mjs} +3 -3
  40. package/dist/{copy-DTiYs_a2.mjs → copy-BYukQEtf.mjs} +4 -4
  41. package/dist/{copy-DOKlVa7H.mjs → copy-XlCT3gvG.mjs} +6 -6
  42. package/dist/{copy-flags-BhGWC5kS.mjs → copy-flags-ByB2MicL.mjs} +2 -2
  43. package/dist/{create-1rLk8b5q.mjs → create-3_oY9KHY.mjs} +3 -3
  44. package/dist/{create-BXX_n64u.mjs → create-B3fm5I-l2.mjs} +4 -4
  45. package/dist/{create-BKKNIe93.mjs → create-BP39g5Jk.mjs} +5 -5
  46. package/dist/{create-DraZzrLO.mjs → create-Bl9sS7v7.mjs} +6 -6
  47. package/dist/{create-d0trLAzB.mjs → create-Bnb1abv_.mjs} +4 -4
  48. package/dist/{create-DUytP2Y1.mjs → create-CLZ7w83R.mjs} +4 -4
  49. package/dist/{create-Duj_2YIF.mjs → create-CYoarNrb.mjs} +4 -4
  50. package/dist/{create-C0kz0oYc.mjs → create-CbT4SPHV.mjs} +5 -5
  51. package/dist/{create-B1QDNU1x.mjs → create-Cdt8u1wF.mjs} +6 -6
  52. package/dist/create-CqF7vqXC.mjs +48 -0
  53. package/dist/{create-B5BwdPwT.mjs → create-CrtIqtXN.mjs} +6 -6
  54. package/dist/{create-BpwZJZxb.mjs → create-D5_c5SHo.mjs} +5 -5
  55. package/dist/{create-Cob0gLsA.mjs → create-DBNxy5rN.mjs} +5 -5
  56. package/dist/{create-vOw8gmBU.mjs → create-DZJQp3r7.mjs} +3 -3
  57. package/dist/{create-JaFhqysM.mjs → create-DxMmIHI4.mjs} +5 -5
  58. package/dist/{create-B1bX6ngX.mjs → create-T4PZPVE9.mjs} +4 -4
  59. package/dist/{create-branch-B5jB4tKk.mjs → create-branch-CUNFdKyB.mjs} +2 -2
  60. package/dist/{create-DPggIXfn.mjs → create-jr4xJgSI.mjs} +4 -4
  61. package/dist/create-k1Bo7h7g.mjs +34 -0
  62. package/dist/{csv-DfExp9H_.mjs → csv-CcnhKpuj.mjs} +4 -4
  63. package/dist/{current-task-CbXIH_RA.mjs → current-task-nl2z8sHI.mjs} +3 -3
  64. package/dist/dashboard-BP0p62fp.mjs +35 -0
  65. package/dist/data-action-Cr17CfgE.mjs +24 -0
  66. package/dist/data-action-DZxVB_hD.mjs +85 -0
  67. package/dist/data-action-R9qxJDPA.mjs +40 -0
  68. package/dist/{database-BdKkae1m.mjs → database-2HYCdHqK.mjs} +1 -1
  69. package/dist/{database-DoNoZ8Yc.mjs → database-BewllGR7.mjs} +1 -1
  70. package/dist/{dataset-DZgJm5hP.mjs → dataset-D-x2Ho2i.mjs} +1 -1
  71. package/dist/{db-C82M3Gpg.mjs → db-m5bQcXdn.mjs} +7 -7
  72. package/dist/delete-BOma6qIq.mjs +44 -0
  73. package/dist/{delete-B4BfGfiJ.mjs → delete-BUCh72Bq.mjs} +4 -4
  74. package/dist/{delete-DJ7SNXiH.mjs → delete-BXMc-g3Q.mjs} +4 -4
  75. package/dist/{delete-D0xFMRRq.mjs → delete-BrbmJ3sn.mjs} +4 -4
  76. package/dist/{delete-9xHRd2CG.mjs → delete-DulVnxD_.mjs} +4 -4
  77. package/dist/delete-Oc2GE170.mjs +44 -0
  78. package/dist/{delete-hwPqKXeY.mjs → delete-QHsiWYay.mjs} +4 -4
  79. package/dist/{delete-runtime-DkgYUQ_n.mjs → delete-runtime-CkNvZfFA.mjs} +1 -1
  80. package/dist/{delete-table-DhTMft7u.mjs → delete-table-LgJ17t6j.mjs} +4 -4
  81. package/dist/{delete-hcw_4pBG.mjs → delete-xf2n7SNg.mjs} +4 -4
  82. package/dist/{dependencies-B8H2gA04.mjs → dependencies-BE5QW7Lb.mjs} +5 -5
  83. package/dist/{dependency-Dc33mjgd.mjs → dependency-BACk_cVP.mjs} +2 -2
  84. package/dist/dependency-BlTYysYG.mjs +15 -0
  85. package/dist/{dependency-tQBxYjFX.mjs → dependency-qP1hx2YN.mjs} +2 -2
  86. package/dist/{dependents-B2GcS5kB.mjs → dependents-mbgHQNiv.mjs} +9 -9
  87. package/dist/{dirty-Cz2rUd6S.mjs → dirty-fYlA1N1e.mjs} +3 -3
  88. package/dist/{discard-values-QWuWGaVK.mjs → discard-values-cIRBP5nT.mjs} +5 -5
  89. package/dist/document-BaRQ5fBd.mjs +20 -0
  90. package/dist/{document-wfWbV0B_.mjs → document-DVIu3Vj4.mjs} +1 -1
  91. package/dist/{document-BDobDiap.mjs → document-UMG6me2P.mjs} +1 -1
  92. package/dist/{download-Dw15fUMy.mjs → download-CokVpeK6.mjs} +2 -2
  93. package/dist/{eid-Ex4G-ZlN.mjs → eid-CaumGUFD.mjs} +5 -5
  94. package/dist/{eid-translation-zEHtr5Oc.mjs → eid-translation-Ba92VOHe.mjs} +1 -0
  95. package/dist/{entity-DBKPaMr5.mjs → entity-BHYJtRxp.mjs} +2 -2
  96. package/dist/{entry-flags-DgY3IXFe.mjs → entry-flags-DjICpQkc.mjs} +4 -4
  97. package/dist/{events-BibJ4ya0.mjs → events-jEo9fytL.mjs} +6 -6
  98. package/dist/execute-H09Qus4_.mjs +45 -0
  99. package/dist/{export-U8MdaatW.mjs → export-YtdZo7LZ.mjs} +5 -5
  100. package/dist/{export-flags-BrfeyE8D.mjs → export-flags-DzW0Ktkh.mjs} +3 -3
  101. package/dist/{export-preflight-A28L45au.mjs → export-preflight-Db_TChn5.mjs} +3 -3
  102. package/dist/field-DktidTPB.mjs +21 -0
  103. package/dist/{fields-i1TFa_th.mjs → fields-DUXlosmx.mjs} +4 -4
  104. package/dist/{filter-flags-Bm3vuSM-.mjs → filter-flags-DTDcU7OI.mjs} +5 -4
  105. package/dist/{fks-Dcfn3-73.mjs → fks-Cl2sq-c0.mjs} +5 -5
  106. package/dist/{get-HFQSttF3.mjs → get-B-WT6ess.mjs} +4 -4
  107. package/dist/{get-BKDTRMNU.mjs → get-BilMWiFq.mjs} +5 -5
  108. package/dist/{get-CobILQ_7.mjs → get-Bt_zhviQ.mjs} +5 -5
  109. package/dist/{get-BiPSePQc.mjs → get-CM596pmP.mjs} +3 -3
  110. package/dist/{get-DqYn9mez.mjs → get-CTtzccwr.mjs} +4 -4
  111. package/dist/{get-Dz3dNirC.mjs → get-CVMWhbA82.mjs} +4 -4
  112. package/dist/{get-B4_3DID6.mjs → get-CWyRAHpz.mjs} +5 -5
  113. package/dist/{get-DPZUIPjv.mjs → get-C_rjxpoe.mjs} +3 -3
  114. package/dist/{get-hAoJtVCK.mjs → get-Cg0up9gm.mjs} +3 -3
  115. package/dist/{get-IjoHBExI.mjs → get-CqlNUyFY.mjs} +5 -5
  116. package/dist/{get-CcwRn8Y2.mjs → get-DPiNYmXo.mjs} +5 -5
  117. package/dist/{get-EKBYludD.mjs → get-DTDvlLT3.mjs} +3 -3
  118. package/dist/{get-D0NZ0ZO1.mjs → get-DtcChy9h.mjs} +5 -5
  119. package/dist/{get-C3ojRVJ_.mjs → get-DyK_bvg6.mjs} +4 -4
  120. package/dist/{get-DUwX-RU82.mjs → get-DySyvotk2.mjs} +5 -5
  121. package/dist/{get-CCLWWqTD.mjs → get-FxCF0rxc.mjs} +4 -4
  122. package/dist/{get-CVpIQb8v.mjs → get-GuWW4J24.mjs} +5 -5
  123. package/dist/{get-Cwj1Q-at.mjs → get-XS-6R81E.mjs} +3 -3
  124. package/dist/{get-BCdtCwaG.mjs → get-oQNL6pLY.mjs} +3 -3
  125. package/dist/get-okEsnkvC.mjs +31 -0
  126. package/dist/{get-run-B2SnsZSY.mjs → get-run-CFGxSm_S.mjs} +4 -4
  127. package/dist/get-zPMv3kZE.mjs +32 -0
  128. package/dist/git-sync-BwkWeJAz.mjs +29 -0
  129. package/dist/glossary-BSgRQ2HO.mjs +14 -0
  130. package/dist/{glossary-wnuxoE_I.mjs → glossary-BkGmCI4X.mjs} +1 -1
  131. package/dist/{glossary-6LLpItof.mjs → glossary-QN-hHfOT.mjs} +1 -1
  132. package/dist/{graph-CHlfxVy1.mjs → graph-Wf4e0XIa.mjs} +6 -6
  133. package/dist/{group-B3X3LTcU.mjs → group-81zoQcEP.mjs} +1 -1
  134. package/dist/{has-remote-changes-DCMpqGgE.mjs → has-remote-changes-BsS3XB0P.mjs} +2 -2
  135. package/dist/{import-C7MZhKo6.mjs → import-CXd5HdB0.mjs} +5 -5
  136. package/dist/{input-sRdxNc3T.mjs → input-AXP2LCOV.mjs} +1 -1
  137. package/dist/{is-dirty-DpLyHebS.mjs → is-dirty-TDcfeOde.mjs} +2 -2
  138. package/dist/{items-1ME_eg27.mjs → items-BxvhoxYm.mjs} +6 -6
  139. package/dist/{key-DMtgTOwN.mjs → key-CUPbYxkk.mjs} +1 -1
  140. package/dist/{library-fWEv38OB.mjs → library-BKSFtIV9.mjs} +1 -1
  141. package/dist/{library-CP-9yepy.mjs → library-DuIrR8LS.mjs} +1 -1
  142. package/dist/{library-D2ogEIfI.mjs → library-DzejNMqX.mjs} +5 -5
  143. package/dist/{list-Ud7F0XdU.mjs → list-3Dh5yeq-.mjs} +3 -3
  144. package/dist/{list-dCi6OaIE.mjs → list-6nGX0Rqc.mjs} +4 -4
  145. package/dist/{list-DkCadZ2E.mjs → list-B3Pngm2j.mjs} +5 -5
  146. package/dist/{list-BUwDGyIu.mjs → list-B5kRBn7k.mjs} +5 -5
  147. package/dist/{list-DzP7YXdZ.mjs → list-B8V_OESj.mjs} +3 -3
  148. package/dist/{list-CQi3AgS5.mjs → list-BUjI5G0_.mjs} +4 -4
  149. package/dist/{list-LMlJ4uAY.mjs → list-Ba7u5Ai9.mjs} +6 -6
  150. package/dist/list-CCCy6cBI.mjs +35 -0
  151. package/dist/list-CRXTfEFk.mjs +28 -0
  152. package/dist/{list-BoVeF8QA.mjs → list-CUj04tg3.mjs} +6 -6
  153. package/dist/{list-C9996vbS.mjs → list-Cf6A9Csi.mjs} +3 -3
  154. package/dist/{list-NINy7ybI.mjs → list-Cr5Hoq-E.mjs} +4 -4
  155. package/dist/{list-BXcDPU5d.mjs → list-D1Q8H3jn.mjs} +6 -6
  156. package/dist/{list-CVh8DHOO.mjs → list-D7yH-64Z.mjs} +5 -5
  157. package/dist/{list-C1oEpUZG.mjs → list-DA1Fo6S6.mjs} +3 -3
  158. package/dist/{list-B0h-j1E7.mjs → list-D_fsrh8w.mjs} +5 -5
  159. package/dist/{list-DBAEy3Rx.mjs → list-DjlfBd7W.mjs} +3 -3
  160. package/dist/{list-OXiXtdiM.mjs → list-DlgjWr4r.mjs} +5 -5
  161. package/dist/{list-CJ5FyCnL.mjs → list-Do-Xnz0I.mjs} +4 -4
  162. package/dist/{list-STy8UHs2.mjs → list-DpK3ioES.mjs} +5 -5
  163. package/dist/{list-BUZ91ctZ.mjs → list-DsR58aMq.mjs} +5 -5
  164. package/dist/{login-BMON3Fft.mjs → login-CXbCAcuB.mjs} +6 -6
  165. package/dist/{logout-Cx934GzW.mjs → logout-B6IGzkpG.mjs} +2 -2
  166. package/dist/{measure-CUqJtDNm.mjs → measure-CbMgNhlG.mjs} +6 -6
  167. package/dist/{notification-CCZ9mrOw.mjs → notification-W2SVssyY.mjs} +1 -1
  168. package/dist/{parameter-values-DCrU02Az.mjs → parameter-values-IWi_DNhp.mjs} +3 -3
  169. package/dist/{parse-enum-Do5Cptbv.mjs → parse-enum-B2rGiC6p.mjs} +1 -1
  170. package/dist/{parse-id-oCbmouCn.mjs → parse-id-Cv5eM7sg.mjs} +1 -1
  171. package/dist/{parse-ref-Df8gusl4.mjs → parse-ref-DW7ik6ny.mjs} +1 -1
  172. package/dist/{parse-text-CVrP7GmZ.mjs → parse-text-CUCSWOeR.mjs} +1 -1
  173. package/dist/{path-DTuSDGd6.mjs → path-C9r9urRK.mjs} +4 -4
  174. package/dist/{poll-BKo5dK0l.mjs → poll-CX3jPtXb.mjs} +2 -2
  175. package/dist/{preflight-UeYuGDPr.mjs → preflight-CiTgqNUy.mjs} +2 -2
  176. package/dist/{process-BpmZXbcw.mjs → process-DImdroix.mjs} +1 -1
  177. package/dist/{publish-D3GwLC-K.mjs → publish-xH1n74gd.mjs} +4 -4
  178. package/dist/{pulse-DzVPfb5J.mjs → pulse-CFj1WfIC.mjs} +1 -1
  179. package/dist/query-BKtMP5eH.mjs +13 -0
  180. package/dist/{query-B1Cp9EO6.mjs → query-BOCw0FBK.mjs} +6 -6
  181. package/dist/{query-Ct697cY-.mjs → query-CN3BW5WB.mjs} +11 -10
  182. package/dist/{remapping-RsoPWE7c.mjs → remapping-Dggq2Fv0.mjs} +4 -4
  183. package/dist/{remove-collection-BJo3Wd9K.mjs → remove-collection-cxSSFxza.mjs} +3 -3
  184. package/dist/{render-C_ev6qoW.mjs → render-Cb8Hct67.mjs} +2 -2
  185. package/dist/{replace-BSAGp3cR.mjs → replace-wVi_XDut.mjs} +4 -4
  186. package/dist/{requirement-check-T3bjQ0Mr.mjs → requirement-check-BE3PuGsC.mjs} +2 -2
  187. package/dist/{rescan-values-CE62_2dc.mjs → rescan-values-C7b1Ghy-.mjs} +4 -4
  188. package/dist/{rescan-values-rpro4Kw2.mjs → rescan-values-DAp_avxY.mjs} +5 -5
  189. package/dist/{run-B3BRodEp.mjs → run-CE6ei7s7.mjs} +4 -4
  190. package/dist/{run-BI1QO9Kn.mjs → run-CUGs7mok.mjs} +7 -7
  191. package/dist/run-DywhwjNG.mjs +63 -0
  192. package/dist/{runs-CUseZezf.mjs → runs--14jim_0.mjs} +5 -5
  193. package/dist/{runtime-C5Ha6Ou8.mjs → runtime-Ckns6TKK.mjs} +2 -2
  194. package/dist/{schema-tables-C7YkyRh0.mjs → schema-tables-CeW0kpA5.mjs} +5 -5
  195. package/dist/{schemas-Bj5sJ9uB.mjs → schemas-CHMD0HrY.mjs} +4 -4
  196. package/dist/{search-BAXg-EJw.mjs → search-CXRavT7G.mjs} +1 -0
  197. package/dist/{search-CB1A4HWx.mjs → search-DyC54bGf.mjs} +6 -6
  198. package/dist/{search-BsAwK7Rk.mjs → search-LmBQu1Jg.mjs} +5 -5
  199. package/dist/{segment-BEjaeLc5.mjs → segment-DeT_Yic6.mjs} +6 -6
  200. package/dist/{send-Dfh8d1gG.mjs → send-BWSJMrDL.mjs} +3 -3
  201. package/dist/{set-active-AyjKtBD-.mjs → set-active-C5cLG4_O.mjs} +4 -4
  202. package/dist/{set-DA8dKyzi.mjs → set-r2xiXrT_.mjs} +4 -4
  203. package/dist/{set-sensitivity-D0613dHA.mjs → set-sensitivity-BMLKazua.mjs} +4 -4
  204. package/dist/{setting-B-bxCkC0.mjs → setting-CDRusiqP.mjs} +4 -4
  205. package/dist/{setup-Bvvqlz9d.mjs → setup-BZaJVww3.mjs} +3 -3
  206. package/dist/{signal-Dm4N0Bcc.mjs → signal-4tpCIkqR.mjs} +1 -1
  207. package/dist/{skill-list-DkuCf0k4.mjs → skill-list-D2FhhYS3.mjs} +1 -1
  208. package/dist/{skills-DxrO7HUz.mjs → skills-9ihLaSmM.mjs} +3 -3
  209. package/dist/{skills-DlDCTGVE.mjs → skills-y2iVfW9k.mjs} +2 -2
  210. package/dist/snippet-Ce0o33Rj.mjs +19 -0
  211. package/dist/{stash-j9JPv3ns.mjs → stash-Dj-mnIa4.mjs} +4 -4
  212. package/dist/{status-DcbvbRc5.mjs → status-B2Xj_q8f.mjs} +3 -3
  213. package/dist/{status-DxNcrfnI.mjs → status-BtWz7Pzn.mjs} +4 -4
  214. package/dist/{subscription-CSR2t-xK.mjs → subscription-Dh--agqE.mjs} +6 -6
  215. package/dist/{subscriptions--0YvW40u.mjs → subscriptions-CJ8Jdp9A.mjs} +6 -6
  216. package/dist/{summary-Dslv78-r.mjs → summary-ccbkNDbC.mjs} +3 -3
  217. package/dist/{sync-schema-BSJiokQf.mjs → sync-schema-CewUOkmm.mjs} +6 -6
  218. package/dist/{sync-schema-Dgij5ICd.mjs → sync-schema-HwQectZd.mjs} +4 -4
  219. package/dist/{sync-task-a1zyF1Qb.mjs → sync-task-DEzhiaU9.mjs} +3 -2
  220. package/dist/{table-Uvu1roSx.mjs → table-CFZU-BRg.mjs} +1 -1
  221. package/dist/table-P9ovwcaB.mjs +26 -0
  222. package/dist/{table-selector-flags-B9OiA3Z1.mjs → table-selector-flags-p4jun7-v.mjs} +2 -2
  223. package/dist/{text-821Rn8M9.mjs → text-C2VwKF9D.mjs} +1 -1
  224. package/dist/{timeline-uDCmwGFT.mjs → timeline-BgWz8DYK.mjs} +1 -1
  225. package/dist/timeline-DLaBypse.mjs +21 -0
  226. package/dist/{timeline-CCSU2qOS.mjs → timeline-DcsCXNUt.mjs} +5 -1
  227. package/dist/{timeline-event-CSzx8EDP.mjs → timeline-event-xAAR6b-v.mjs} +6 -6
  228. package/dist/transform-10YE8j5K.mjs +28 -0
  229. package/dist/{transform-BKX6tl3i.mjs → transform-CWGJB8N_.mjs} +1 -1
  230. package/dist/{transform-job-AaMZRxAq.mjs → transform-job-BBZ5L46v.mjs} +1 -1
  231. package/dist/{transform-job-CCguL6LP.mjs → transform-job-ClX8e5iO.mjs} +2 -1
  232. package/dist/transform-job-D97AutnF.mjs +22 -0
  233. package/dist/{transform-tag-DHg7j15d.mjs → transform-tag-BXusFzMX.mjs} +5 -5
  234. package/dist/transform-test-Bexa_K89.mjs +173 -0
  235. package/dist/transform-test-C49ZTK7M.mjs +32 -0
  236. package/dist/transform-test-UsH1udc4.mjs +16 -0
  237. package/dist/{transforms-DwxPfMiG.mjs → transforms-CqV01bMM.mjs} +5 -5
  238. package/dist/transport-0qFZhEuP.mjs +416 -0
  239. package/dist/{tree-COFmA20J.mjs → tree-Td6rgyOa.mjs} +3 -3
  240. package/dist/{unpublish-BQClh4U7.mjs → unpublish-D4XTZsFW.mjs} +3 -3
  241. package/dist/{unreferenced-DKc0zZDl.mjs → unreferenced-cR-l4zXN.mjs} +6 -6
  242. package/dist/{update-myfBF5qV.mjs → update-BJL5975i.mjs} +6 -6
  243. package/dist/{update-BVMgrMy7.mjs → update-BqkqMOVN.mjs} +5 -5
  244. package/dist/{update-Bgy2amR0.mjs → update-C4iu-vQm.mjs} +6 -6
  245. package/dist/{update-C9HK3i8s.mjs → update-C7Wmom6x.mjs} +5 -5
  246. package/dist/{update-CMRWXoZ2.mjs → update-C7dZLbsf.mjs} +4 -4
  247. package/dist/{update-BBLbEPEP.mjs → update-C8xdeYI2.mjs} +4 -4
  248. package/dist/{update-B8jQTspb.mjs → update-CHB4kvz-.mjs} +8 -8
  249. package/dist/{update-BNwjjMk6.mjs → update-CND9At61.mjs} +5 -5
  250. package/dist/{update-Ca8LSZer.mjs → update-CpwWURTp.mjs} +5 -5
  251. package/dist/{update-B-wcIl8T.mjs → update-D-cTgmb0.mjs} +6 -6
  252. package/dist/{update-CPmPnEvm.mjs → update-DFK2iUSP.mjs} +6 -6
  253. package/dist/{update-CFfr1ZdL.mjs → update-DROjGe3Q.mjs} +4 -4
  254. package/dist/update-DZHgr6Gu.mjs +52 -0
  255. package/dist/{update-kM3TDlEp.mjs → update-Dk0E66Va.mjs} +7 -7
  256. package/dist/{update-DJwu8UT2.mjs → update-DqCZsbLh.mjs} +6 -6
  257. package/dist/{update-BVFfoopT.mjs → update-DrVc25R8.mjs} +5 -5
  258. package/dist/{update-MxvqmZ3z.mjs → update-Js0IiqCq.mjs} +5 -5
  259. package/dist/{update-Dwr3n7_n.mjs → update-dQeji6RA.mjs} +7 -7
  260. package/dist/{update-dashcard-C8QN2Qcu.mjs → update-dashcard-BmkfJ7t9.mjs} +4 -4
  261. package/dist/update-nGURR-y6.mjs +41 -0
  262. package/dist/{upgrade-BBOEVIRa.mjs → upgrade-B6V_1cUh.mjs} +4 -4
  263. package/dist/{upload-CxpXpjCf.mjs → upload-B6zBzMPW.mjs} +2 -2
  264. package/dist/{upload-CoBd4qBp.mjs → upload-CfYmBv51.mjs} +3 -3
  265. package/dist/upload-Dvjfz16M.mjs +13 -0
  266. package/dist/{uuid-DW30GY7B.mjs → uuid-B8ynbkqG.mjs} +2 -2
  267. package/dist/{validate-n85yMraN.mjs → validate-C7DGkwb-.mjs} +1 -1
  268. package/dist/{validate-query-BwXvFFYi.mjs → validate-query-CYUvRvVM.mjs} +7 -3
  269. package/dist/{values-B6eFE4K5.mjs → values-36bzf9cK.mjs} +3 -3
  270. package/dist/{verify-Dp8tUbP3.mjs → verify-BdW-GExk.mjs} +3 -3
  271. package/dist/{verify-BSq7x66g.mjs → verify-C4Tml4fD.mjs} +3 -3
  272. package/dist/{verify-DnU-wXIs.mjs → verify-Cs9e28YA.mjs} +3 -3
  273. package/dist/{wait-D6Tw4ZxO.mjs → wait-BV6JOdgi.mjs} +5 -5
  274. package/dist/{wait-flags-BRUzMI6S.mjs → wait-flags-DjyK03cm.mjs} +2 -2
  275. package/dist/{window-BqMFpWMh.mjs → window-CfK_j6m1.mjs} +1 -1
  276. package/package.json +1 -1
  277. package/skill-data/core/SKILL.md +11 -5
  278. package/skill-data/data-action/SKILL.md +125 -0
  279. package/skill-data/native-sql/SKILL.md +1 -1
  280. package/skill-data/transform/SKILL.md +63 -1
  281. package/skill-data/transform-test-plan/SKILL.md +82 -0
  282. package/skill-data/transform-test-plan/references/checklist.md +32 -0
  283. package/skill-data/transform-test-plan/references/checks.md +156 -0
  284. package/dist/card-Buc-X4Mh.mjs +0 -25
  285. package/dist/collection-D-sS0AFw.mjs +0 -21
  286. package/dist/dashboard-DH_soSQp.mjs +0 -35
  287. package/dist/dependency-CLznxtLE.mjs +0 -15
  288. package/dist/document-WhSEyI-3.mjs +0 -20
  289. package/dist/field-qF1KRJYB.mjs +0 -21
  290. package/dist/git-sync-BlgB_-8-.mjs +0 -29
  291. package/dist/glossary-BvVxqjxJ.mjs +0 -14
  292. package/dist/snippet-B7Kau5U8.mjs +0 -19
  293. package/dist/table-qjgz2eek.mjs +0 -26
  294. package/dist/timeline-CNkrY3e3.mjs +0 -21
  295. package/dist/transform-Y86R7_2F.mjs +0 -28
  296. package/dist/transform-job-Cg_1jzWI.mjs +0 -22
  297. package/dist/upload-fcim1xtK.mjs +0 -13
@@ -1,39 +1,41 @@
1
- import { At as isNonInterruptFailure, Ct as ResponseShapeError, Dt as errorMessage, Et as ValidationError, G as isRetryableStatus, J as isPlainObject, N as CapabilityError, Ot as formatZodIssue, St as PartialWriteError, U as HttpError, X as parseJson, Y as JSON_CONTENT_TYPE, Z as parseJsonOrPlain, n as isMethodKey, r as methodRequirements, vt as ConfigError, wt as TimeoutError, xt as NetworkError, yt as InternalError } from "./cli.mjs";
1
+ import { At as formatZodIssue, Et as TimeoutError, Mt as isNonInterruptFailure, P as CapabilityError, Q as parseJsonOrPlain, Tt as ResponseShapeError, W as HttpError, Y as isPlainObject, kt as errorMessage, n as isMethodKey, r as methodRequirements, wt as PartialWriteError, xt as InternalError, yt as ConfigError } from "./cli.mjs";
2
2
  import { n as Notification, r as NotificationCardPayload, t as CARD_PAYLOAD_TYPE } from "./notification-DaA4bBHW.mjs";
3
- import { B as credentialAuthHeader, F as probeBudget, J as createServerProfile, L as profileFromProperties, M as buildNetworkError, N as isConnectionClosed, P as PROBE_PATH, R as serverInfoFromProperties, V as credentialSecrets, W as normalizeUrl, Z as SessionProperties, z as assertCredentialHeaderSafe } from "./runtime-C5Ha6Ou8.mjs";
4
- import { n as throwIfAborted, r as untilAborted, t as combineAborts } from "./signal-Dm4N0Bcc.mjs";
5
- import { n as featureFailures, r as supersedingFeature, t as checkFeatures } from "./requirement-check-T3bjQ0Mr.mjs";
3
+ import { L as profileFromProperties, Z as SessionProperties } from "./runtime-Ckns6TKK.mjs";
4
+ import { n as featureFailures, r as supersedingFeature, t as checkFeatures } from "./requirement-check-BE3PuGsC.mjs";
5
+ import { n as createTransport } from "./transport-0qFZhEuP.mjs";
6
6
  import { f as FieldWithDataSensitivity, h as fieldRemappedValueSchema, m as fieldDetailSchema, n as FieldBaseType, o as FieldSearchMatches, s as FieldSemanticType, u as FieldValues } from "./field-5nivEfd6.mjs";
7
7
  import { a as TemporalUnit, r as ParameterValues } from "./parameter-Celg0wZa.mjs";
8
- import { a as CardQueryResult, d as PivotExportFormat, l as DatasetQuery, t as Card } from "./card-Bv4ZN0oV.mjs";
8
+ import { r as PivotExportFormat, t as DatasetQuery } from "./query-BKtMP5eH.mjs";
9
+ import { a as CardQueryResult, t as Card } from "./card-P5mBknsl.mjs";
9
10
  import { b as TableVisibilityType, p as TableQueryMetadata, s as TableDataLayerTier, t as Table, u as TableForeignKey, v as TableSelectors } from "./table-zAdW5_3H.mjs";
10
- import { t as Database } from "./database-BdKkae1m.mjs";
11
+ import { t as Database } from "./database-2HYCdHqK.mjs";
11
12
  import { t as Snippet } from "./snippet-CyKAgIZl.mjs";
12
- import { r as QueryMetadata, t as CompiledQuery } from "./dataset-DZgJm5hP.mjs";
13
- import { c as CollectionItem, m as CollectionTreeNode, r as Collection } from "./collection-zrZoJfgR.mjs";
13
+ import { r as QueryMetadata, t as CompiledQuery } from "./dataset-D-x2Ho2i.mjs";
14
+ import { c as CollectionItem, m as CollectionTreeNode, r as Collection } from "./collection-B2wRXyTF.mjs";
14
15
  import { t as ContentTranslationUploadResult } from "./content-translation-BrHOrmj9.mjs";
15
16
  import { l as Dashcard, o as DashboardDetail, r as DashboardCopy, t as Dashboard } from "./dashboard-Phz3XpRM.mjs";
16
- import { r as pollUntil } from "./poll-BKo5dK0l.mjs";
17
- import { i as DependencyEntity, s as DependencyGraph, t as BreakingSource, u as DependencyNode } from "./dependency-tQBxYjFX.mjs";
18
- import { t as Document } from "./document-BDobDiap.mjs";
19
- import { i as EidTranslateResult } from "./eid-translation-zEHtr5Oc.mjs";
17
+ import { a as DataActionExecuteResult, s as dataActionSchema } from "./data-action-DZxVB_hD.mjs";
18
+ import { r as pollUntil } from "./poll-CX3jPtXb.mjs";
19
+ import { i as DependencyEntity, s as DependencyGraph, t as BreakingSource, u as DependencyNode } from "./dependency-qP1hx2YN.mjs";
20
+ import { t as Document } from "./document-UMG6me2P.mjs";
21
+ import { i as EidTranslateResult } from "./eid-translation-Ba92VOHe.mjs";
20
22
  import { c as SyncRemoteChanges, d as SyncTask, i as SyncExportPreflight, l as SyncSettingsUpdateResult, m as isSyncTaskTerminal, n as SyncDirtyItem, t as SyncBranchCreated } from "./git-sync-COokpYgc.mjs";
21
- import { t as Glossary } from "./glossary-6LLpItof.mjs";
22
- import { a as libraryWireSchema, i as LibraryPublishTablesInput, n as LibraryCollectionInfo, o as toLibrary } from "./library-fWEv38OB.mjs";
23
+ import { t as Glossary } from "./glossary-QN-hHfOT.mjs";
24
+ import { a as libraryWireSchema, i as LibraryPublishTablesInput, n as LibraryCollectionInfo, o as toLibrary } from "./library-BKSFtIV9.mjs";
23
25
  import { t as Measure } from "./measure-CtfjqJFP.mjs";
24
26
  import { r as ModerationReviewCreateInput, t as ModerationReview } from "./moderation-review-BdqEH6N1.mjs";
25
27
  import { t as Pulse } from "./pulse-Dz0ocv0l.mjs";
26
28
  import { a as TransformDagTransform, d as TransformTarget, g as transformRowSchema, h as transformDetailSchema, i as TransformDagRunResult, l as TransformRunSummary, m as isTransformRunTerminal, o as TransformRun, p as isTransformRunFailed, u as TransformSourceTableEntry } from "./transform-DiW7bREn.mjs";
27
- import { r as SearchResult } from "./search-BAXg-EJw.mjs";
29
+ import { r as SearchResult } from "./search-CXRavT7G.mjs";
28
30
  import { t as Segment } from "./segment-OsrbUDzw.mjs";
29
31
  import { t as Setting } from "./setting-DTiLCW8g.mjs";
30
32
  import { n as SetupResult } from "./setup-CO7QV-ao.mjs";
31
- import { i as TimelineEvent, t as Timeline } from "./timeline-CCSU2qOS.mjs";
32
- import { c as transformJobSchema, n as TransformJobActiveResult, s as transformJobRunResultSchema } from "./transform-job-CCguL6LP.mjs";
33
+ import { i as TimelineEvent, t as Timeline } from "./timeline-DcsCXNUt.mjs";
34
+ import { c as transformJobSchema, n as TransformJobActiveResult, s as transformJobRunResultSchema } from "./transform-job-ClX8e5iO.mjs";
33
35
  import { t as TransformTag } from "./transform-tag-CcElGp3C.mjs";
36
+ import { i as TransformTestRunResult, t as TransformTest } from "./transform-test-Bexa_K89.mjs";
34
37
  import { t as UploadResult } from "./upload-DAtxBBms.mjs";
35
38
  import { z } from "zod";
36
- import { setTimeout } from "node:timers/promises";
37
39
  //#region \0rolldown/runtime.js
38
40
  var __defProp = Object.defineProperty;
39
41
  var __exportAll = (all, no_symbols) => {
@@ -46,416 +48,6 @@ var __exportAll = (all, no_symbols) => {
46
48
  return target;
47
49
  };
48
50
  //#endregion
49
- //#region ../client/src/http/response-shape.ts
50
- async function parseJsonResponse(text, schema, context) {
51
- try {
52
- return parseJson(text, schema, { source: context.url });
53
- } catch (error) {
54
- if (error instanceof ValidationError) throw ResponseShapeError.fromZodIssues({
55
- kind: "zod",
56
- method: context.method,
57
- url: context.url,
58
- status: context.status,
59
- zodIssues: error.developerDetail.zodIssues,
60
- serverTag: await context.getServerTag(),
61
- serverSkew: context.serverSkew
62
- });
63
- throw error;
64
- }
65
- }
66
- //#endregion
67
- //#region ../client/src/http/retry.ts
68
- const BASE_DELAY_MS = 250;
69
- const MAX_DELAY_MS = 8e3;
70
- const MS_PER_SECOND = 1e3;
71
- function backoffDelay({ attempt, retryAfterHeader }) {
72
- const fromHeader = parseRetryAfter(retryAfterHeader);
73
- if (fromHeader !== null) return fromHeader;
74
- return Math.min(MAX_DELAY_MS, BASE_DELAY_MS * 2 ** attempt);
75
- }
76
- function parseRetryAfter(header) {
77
- if (!header) return null;
78
- const numeric = Number(header);
79
- if (Number.isFinite(numeric) && numeric >= 0) return Math.round(numeric * MS_PER_SECOND);
80
- const dateMs = Date.parse(header);
81
- if (Number.isFinite(dateMs)) return Math.max(0, dateMs - Date.now());
82
- return null;
83
- }
84
- function sleep(ms, signal) {
85
- return setTimeout(ms, void 0, { signal });
86
- }
87
- async function runWithRetries(attempt, signal) {
88
- let attemptIndex = 0;
89
- while (true) {
90
- const outcome = await attempt(attemptIndex);
91
- if (outcome.kind === "success") return outcome.response;
92
- await sleep(outcome.delayMs, signal);
93
- attemptIndex += 1;
94
- }
95
- }
96
- const DEFAULT_TIMEOUT_MS = 3e4;
97
- const OCTET_STREAM_CONTENT_TYPE = "application/octet-stream";
98
- const TEXT_CONTENT_TYPE_PREFIX = "text/";
99
- const ERROR_BODY_BYTE_CAP = 64 * 1024;
100
- const IDEMPOTENT_METHODS = /* @__PURE__ */ new Set([
101
- "GET",
102
- "HEAD",
103
- "OPTIONS"
104
- ]);
105
- function createTransport(config, options) {
106
- const baseUrl = normalizeUrl(config.url);
107
- assertCredentialHeaderSafe(config.credential);
108
- const fetchImpl = options.fetchImpl ?? globalThis.fetch.bind(globalThis);
109
- let inForce = options.server ?? null;
110
- let newest = null;
111
- let probesStarted = 0;
112
- let applied = null;
113
- const inFlight = /* @__PURE__ */ new Set();
114
- const getServerTag = options.getServerTag ?? (async () => tagOf(inForce));
115
- const refreshCredential = options.refreshCredential;
116
- let credential = config.credential;
117
- const knownSecrets = new Set(credentialSecrets(credential));
118
- const redactionContext = { knownSecrets };
119
- let refreshInFlight = null;
120
- function tryRefreshCredential() {
121
- const refresh = refreshCredential;
122
- if (credential.kind !== "oauth" || refresh === void 0) return Promise.resolve(false);
123
- refreshInFlight ??= refreshOnce(refresh).finally(() => {
124
- refreshInFlight = null;
125
- });
126
- return refreshInFlight;
127
- }
128
- async function refreshOnce(refresh) {
129
- const next = await refresh();
130
- if (next === null) return false;
131
- credential = next;
132
- for (const secret of credentialSecrets(next)) knownSecrets.add(secret);
133
- return true;
134
- }
135
- async function attemptOnce(prepared, attempt) {
136
- const hasRetriesLeft = attempt < prepared.retries;
137
- const timeoutSignal = AbortSignal.timeout(prepared.timeoutMs);
138
- const combined = combineAborts(timeoutSignal, prepared.cancelSignal);
139
- let response;
140
- try {
141
- response = await fetchImpl(prepared.url, {
142
- method: prepared.method,
143
- headers: prepared.headers,
144
- body: prepared.body,
145
- signal: combined
146
- });
147
- } catch (error) {
148
- throwIfAborted(prepared.cancelSignal);
149
- const isStaleSocketFirstTry = attempt === 0 && isConnectionClosed(error);
150
- if (prepared.idempotent && (hasRetriesLeft || isStaleSocketFirstTry)) return {
151
- kind: "retry",
152
- delayMs: backoffDelay({ attempt })
153
- };
154
- if (timeoutSignal.aborted) throw new TimeoutError(`Request timed out after ${prepared.timeoutMs}ms`, {
155
- kind: "http",
156
- method: prepared.method,
157
- url: prepared.url,
158
- timeoutMs: prepared.timeoutMs
159
- });
160
- throw buildNetworkError(error, prepared.method, prepared.url);
161
- }
162
- const canRetryStatus = hasRetriesLeft && prepared.idempotent;
163
- if (!response.ok && isRetryableStatus(response.status) && canRetryStatus) {
164
- const retryAfter = response.headers.get("Retry-After");
165
- response.body?.cancel().catch(() => void 0);
166
- return {
167
- kind: "retry",
168
- delayMs: backoffDelay({
169
- attempt,
170
- retryAfterHeader: retryAfter
171
- })
172
- };
173
- }
174
- if (!response.ok) {
175
- const rawBody = await readBodyForError(response);
176
- const serverTag = await getServerTag();
177
- throw new HttpError({
178
- status: response.status,
179
- statusText: response.statusText,
180
- method: prepared.method,
181
- url: prepared.url,
182
- responseHeaders: response.headers,
183
- rawBody,
184
- serverTag,
185
- redactionContext
186
- });
187
- }
188
- assertContentType(response, prepared);
189
- return {
190
- kind: "success",
191
- response
192
- };
193
- }
194
- async function executeRaw(prepared) {
195
- try {
196
- return await runWithRetries((attempt) => attemptOnce(prepared, attempt), prepared.cancelSignal);
197
- } catch (error) {
198
- throwIfAborted(prepared.cancelSignal);
199
- throw error;
200
- }
201
- }
202
- async function executeWithAuthRefresh(path, opts) {
203
- const prepared = prepare(path, opts);
204
- try {
205
- return {
206
- response: await executeRaw(prepared),
207
- prepared
208
- };
209
- } catch (error) {
210
- if (error instanceof HttpError && error.status === 401) {
211
- if (await tryRefreshCredential()) {
212
- const retried = prepare(path, opts);
213
- return {
214
- response: await executeRaw(retried),
215
- prepared: retried
216
- };
217
- }
218
- }
219
- throw error;
220
- }
221
- }
222
- function prepare(path, opts = {}) {
223
- const method = opts.method ?? "GET";
224
- const expectContentType = opts.expectContentType ?? "json";
225
- const url = buildUrl(baseUrl, path, opts.query);
226
- const headers = new Headers();
227
- const auth = credentialAuthHeader(credential);
228
- headers.set(auth.name, auth.value);
229
- headers.set("accept", acceptHeader(expectContentType));
230
- headers.set("user-agent", options.userAgent);
231
- let body = null;
232
- if (opts.body !== void 0 && opts.body !== null) if (typeof opts.body === "string" || opts.body instanceof URLSearchParams) body = opts.body;
233
- else if (opts.body instanceof FormData || opts.body instanceof ReadableStream) body = opts.body;
234
- else if (opts.body instanceof Uint8Array) {
235
- body = opts.body;
236
- headers.set("content-type", OCTET_STREAM_CONTENT_TYPE);
237
- } else {
238
- body = JSON.stringify(opts.body);
239
- headers.set("content-type", JSON_CONTENT_TYPE);
240
- }
241
- return {
242
- url,
243
- method,
244
- headers,
245
- body,
246
- expectContentType,
247
- retries: opts.retries ?? 3,
248
- idempotent: opts.idempotent ?? IDEMPOTENT_METHODS.has(method),
249
- timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS,
250
- cancelSignal: combineAborts(opts.signal, options.signal)
251
- };
252
- }
253
- async function readJson(path, opts = {}) {
254
- const chosenFor = inForce;
255
- const { response, prepared } = await executeWithAuthRefresh(path, {
256
- ...opts,
257
- expectContentType: "json"
258
- });
259
- return {
260
- text: await response.text(),
261
- context: {
262
- method: prepared.method,
263
- url: prepared.url,
264
- status: response.status,
265
- ...namingOf(chosenFor)
266
- }
267
- };
268
- }
269
- function namingOf(profile) {
270
- if (profile === null) return {
271
- getServerTag,
272
- serverSkew: null
273
- };
274
- return {
275
- getServerTag: async () => profile.version.tag,
276
- serverSkew: profile.skew
277
- };
278
- }
279
- async function runProbe(order, budget) {
280
- const read = await readJson(PROBE_PATH, probeBudget(budget));
281
- const properties = await parseJsonResponse(read.text, SessionProperties, read.context);
282
- const info = serverInfoFromProperties(properties);
283
- const profile = createServerProfile(info);
284
- if (applied === null || applied.order < order) {
285
- options.onServerProbed?.(info, profile);
286
- applied = {
287
- order,
288
- profile
289
- };
290
- inForce = profile;
291
- }
292
- return {
293
- properties,
294
- profile,
295
- read
296
- };
297
- }
298
- function startProbe(budget) {
299
- probesStarted += 1;
300
- const probed = runProbe(probesStarted, budget);
301
- newest = probed;
302
- inFlight.add(probed);
303
- probed.then(() => {
304
- inFlight.delete(probed);
305
- }, () => {
306
- inFlight.delete(probed);
307
- if (newest === probed) newest = null;
308
- });
309
- return probed;
310
- }
311
- function appliedProfile() {
312
- return applied === null ? null : applied.profile;
313
- }
314
- function verifying() {
315
- const settled = appliedProfile();
316
- if (newest === null && settled !== null) return Promise.resolve(settled);
317
- return (newest ?? startProbe({})).then((probed) => probed.profile, fallBackTo(appliedProfile));
318
- }
319
- function profileInForce() {
320
- const current = inForce;
321
- if (current === null) return verifying();
322
- if (newest === null) return Promise.resolve(current);
323
- return newest.then((probed) => probed.profile, fallBackTo(() => inForce));
324
- }
325
- async function server(wait = {}) {
326
- throwIfAborted(wait.signal);
327
- return untilAborted(profileInForce(), wait.signal);
328
- }
329
- async function verifiedServer(wait = {}) {
330
- throwIfAborted(wait.signal);
331
- return untilAborted(verifying(), wait.signal);
332
- }
333
- async function probe(reader, read = {}) {
334
- const { signal, ...budget } = read;
335
- throwIfAborted(signal);
336
- const probed = await untilAborted(startProbe(budget), signal);
337
- const context = {
338
- ...probed.read.context,
339
- ...namingOf(probed.profile)
340
- };
341
- return parseJsonResponse(probed.read.text, reader, context);
342
- }
343
- async function probesSettled() {
344
- while (inFlight.size > 0) await Promise.allSettled(inFlight);
345
- }
346
- async function requireFeatures(features, wait = {}) {
347
- if (features.length === 0) return;
348
- const profile = await preflightServer(wait);
349
- if (profile === null) return;
350
- for (const failure of featureFailures(features, profile)) refuseBeforeSending(new CapabilityError(failure));
351
- }
352
- async function preflightServer(wait = {}) {
353
- try {
354
- return await verifiedServer(wait);
355
- } catch (error) {
356
- if (!isNonInterruptFailure(error)) throw error;
357
- skipOrThrow({
358
- kind: "unverified",
359
- failure: error
360
- });
361
- return null;
362
- }
363
- }
364
- function refuseBeforeSending(refusal) {
365
- skipOrThrow({
366
- kind: "refused",
367
- refusal
368
- });
369
- }
370
- function skipOrThrow(skipped) {
371
- const hook = options.onPreflightSkipped;
372
- if (hook === void 0) throw skippedError(skipped);
373
- hook(skipped);
374
- }
375
- return {
376
- server,
377
- verifiedServer,
378
- probe,
379
- requireFeatures,
380
- preflightServer,
381
- refuseBeforeSending,
382
- probesSettled,
383
- async requestRaw(path, opts) {
384
- return (await executeWithAuthRefresh(path, opts ?? {})).response;
385
- },
386
- async requestParsed(schema, path, opts) {
387
- const read = await readJson(path, opts);
388
- return parseJsonResponse(read.text, schema, read.context);
389
- },
390
- async requestStream(path, opts) {
391
- const { response, prepared } = await executeWithAuthRefresh(path, {
392
- ...opts,
393
- expectContentType: opts?.expectContentType ?? "binary"
394
- });
395
- if (!response.body) throw new NetworkError("Response had no body to stream", {
396
- method: prepared.method,
397
- url: prepared.url,
398
- cause: "missing body"
399
- });
400
- return response.body;
401
- }
402
- };
403
- }
404
- function skippedError(skipped) {
405
- return skipped.kind === "refused" ? skipped.refusal : skipped.failure;
406
- }
407
- function fallBackTo(fallback) {
408
- return (error) => {
409
- const profile = fallback();
410
- if (profile !== null && isNonInterruptFailure(error)) return profile;
411
- throw error;
412
- };
413
- }
414
- function tagOf(profile) {
415
- return profile === null ? null : profile.version.tag;
416
- }
417
- function buildUrl(baseUrl, path, query) {
418
- const normalizedPath = path.startsWith("/") ? path : `/${path}`;
419
- const target = new URL(baseUrl + normalizedPath);
420
- if (query) for (const [key, value] of Object.entries(query)) {
421
- if (value === void 0) continue;
422
- if (Array.isArray(value)) for (const entry of value) target.searchParams.append(key, String(entry));
423
- else target.searchParams.append(key, String(value));
424
- }
425
- return target.toString();
426
- }
427
- function acceptHeader(expected) {
428
- if (expected === "json") return JSON_CONTENT_TYPE;
429
- if (expected === "text") return "text/*";
430
- return "*/*";
431
- }
432
- function assertContentType(response, prepared) {
433
- if (prepared.expectContentType === "binary") return;
434
- const contentType = response.headers.get("content-type");
435
- if (contentType === null) throwContentTypeMismatch(response, prepared, prepared.expectContentType);
436
- if (prepared.expectContentType === "json" && !contentType.includes("application/json")) throwContentTypeMismatch(response, prepared, "json");
437
- if (prepared.expectContentType === "text" && !contentType.startsWith(TEXT_CONTENT_TYPE_PREFIX)) throwContentTypeMismatch(response, prepared, "text");
438
- }
439
- function throwContentTypeMismatch(response, prepared, expected) {
440
- const actual = response.headers.get("content-type") ?? "no content-type";
441
- throw new HttpError({
442
- status: response.status,
443
- statusText: response.statusText,
444
- method: prepared.method,
445
- url: prepared.url,
446
- responseHeaders: response.headers,
447
- rawBody: null,
448
- overrideUserMessage: `Expected ${expected} response but got ${actual}`
449
- });
450
- }
451
- async function readBodyForError(response) {
452
- try {
453
- return Buffer.from(await response.arrayBuffer()).subarray(0, ERROR_BODY_BYTE_CAP).toString("utf8");
454
- } catch (error) {
455
- return `[body read failed: ${errorMessage(error)}]`;
456
- }
457
- }
458
- //#endregion
459
51
  //#region ../client/src/resources/pivot-export.ts
460
52
  const PivotedExportsProperty = SessionProperties.extend({ "enable-pivoted-exports": z.boolean() });
461
53
  /**
@@ -1037,6 +629,81 @@ function stripEntityId(dashcard) {
1037
629
  };
1038
630
  }
1039
631
  //#endregion
632
+ //#region ../client/src/resources/data-action.ts
633
+ function collectionFeatures(params) {
634
+ return params.collection_id === void 0 ? [] : [{
635
+ feature: "dataActionCollections",
636
+ fields: ["collection_id"]
637
+ }];
638
+ }
639
+ function dataActionResource(transport) {
640
+ const { explain } = explainer(transport, "dataAction");
641
+ async function readSchema(options) {
642
+ const { features } = await transport.server(options);
643
+ return dataActionSchema(features);
644
+ }
645
+ /** List the unarchived data actions the caller can see. `GET /api/action` answers a bare array. */
646
+ async function list(options = {}) {
647
+ const schema = await readSchema(options);
648
+ return {
649
+ data: await transport.requestParsed(z.array(schema), "/api/action", { ...options }),
650
+ total: null
651
+ };
652
+ }
653
+ /** Get one unarchived data action by id. */
654
+ async function get(id, options = {}) {
655
+ const schema = await readSchema(options);
656
+ return transport.requestParsed(schema, `/api/action/${id}`, { ...options });
657
+ }
658
+ /** Create a data action — a parameterized native query that writes to a database — in a collection. */
659
+ async function create(params, options = {}) {
660
+ const schema = await readSchema(options);
661
+ return transport.requestParsed(schema, "/api/action", {
662
+ ...options,
663
+ method: "POST",
664
+ body: params
665
+ });
666
+ }
667
+ /** Update a data action by id, patching only the fields the body carries. */
668
+ async function update(id, params, options = {}) {
669
+ const schema = await readSchema(options);
670
+ return transport.requestParsed(schema, `/api/action/${id}`, {
671
+ ...options,
672
+ method: "PUT",
673
+ body: params
674
+ });
675
+ }
676
+ /** Archive (soft-delete) a data action by id. Metabase models this as an update, not its own endpoint. */
677
+ async function archive(id, options = {}) {
678
+ return update(id, { archived: true }, options);
679
+ }
680
+ /** Delete a data action by id, removing it and the dashboard buttons that run it. */
681
+ async function remove(id, options = {}) {
682
+ await transport.requestRaw(`/api/action/${id}`, {
683
+ ...options,
684
+ method: "DELETE",
685
+ expectContentType: "binary"
686
+ });
687
+ }
688
+ /** Execute a data action by id with parameter values keyed by parameter id. */
689
+ async function execute(id, params, options = {}) {
690
+ return transport.requestParsed(DataActionExecuteResult, `/api/action/${id}/execute`, {
691
+ ...options,
692
+ method: "POST",
693
+ body: params
694
+ });
695
+ }
696
+ return {
697
+ list,
698
+ get,
699
+ create: explain("create", create),
700
+ update: explain("update", update, (_id, params) => collectionFeatures(params)),
701
+ archive,
702
+ delete: remove,
703
+ execute
704
+ };
705
+ }
706
+ //#endregion
1040
707
  //#region ../client/src/resources/database.ts
1041
708
  const DatabaseApiList = z.object({
1042
709
  data: z.array(Database),
@@ -2708,7 +2375,8 @@ const RevisionEntity = z.enum([
2708
2375
  "document",
2709
2376
  "measure",
2710
2377
  "segment",
2711
- "transform"
2378
+ "transform",
2379
+ "transform-test"
2712
2380
  ]);
2713
2381
  const RevisionUser = z.object({
2714
2382
  id: z.number().int(),
@@ -2772,7 +2440,8 @@ const RevisionApiRevert = z.union([Revision.transform((revision) => ({
2772
2440
  }))]);
2773
2441
  const ENTITY_FEATURES = {
2774
2442
  measure: "measures",
2775
- transform: "transforms"
2443
+ transform: "transforms",
2444
+ "transform-test": "transformTests"
2776
2445
  };
2777
2446
  function entityFeatures(entity) {
2778
2447
  const feature = ENTITY_FEATURES[entity];
@@ -4060,167 +3729,6 @@ function transformTagResource(transport) {
4060
3729
  };
4061
3730
  }
4062
3731
  //#endregion
4063
- //#region ../client/src/domain/transform-test.ts
4064
- const TransformTestTable = z.object({
4065
- schema: z.string().min(1).nullable().optional(),
4066
- name: z.string().min(1)
4067
- }).loose();
4068
- const TransformTestColumn = z.object({
4069
- name: z.string().min(1),
4070
- cast_type: z.string().min(1)
4071
- }).loose();
4072
- const TransformTestCell = z.union([
4073
- z.boolean(),
4074
- z.number(),
4075
- z.string(),
4076
- z.null()
4077
- ]);
4078
- const TransformTestRow = z.record(z.string(), TransformTestCell);
4079
- const TransformTestSqlInput = z.object({
4080
- table: TransformTestTable,
4081
- format: z.literal("sql"),
4082
- sql: z.string().min(1)
4083
- }).loose();
4084
- const TransformTestRowsInput = z.object({
4085
- table: TransformTestTable,
4086
- format: z.literal("rows"),
4087
- columns: z.array(TransformTestColumn).min(1),
4088
- rows: z.array(TransformTestRow)
4089
- }).loose();
4090
- const TransformTestInput = z.discriminatedUnion("format", [TransformTestSqlInput, TransformTestRowsInput]);
4091
- const TransformTestEqualsSqlExpectation = z.object({
4092
- type: z.literal("equals"),
4093
- name: z.string().min(1),
4094
- format: z.literal("sql"),
4095
- sql: z.string().min(1)
4096
- }).loose();
4097
- const TransformTestEqualsRowsExpectation = z.object({
4098
- type: z.literal("equals"),
4099
- name: z.string().min(1),
4100
- format: z.literal("rows"),
4101
- columns: z.array(TransformTestColumn).min(1),
4102
- rows: z.array(TransformTestRow)
4103
- }).loose();
4104
- const TransformTestEqualsExpectation = z.discriminatedUnion("format", [TransformTestEqualsSqlExpectation, TransformTestEqualsRowsExpectation]);
4105
- const TransformTestEmptyExpectation = z.object({
4106
- type: z.literal("empty"),
4107
- name: z.string().min(1),
4108
- sql: z.string().min(1)
4109
- }).loose();
4110
- const TransformTestExpectation = z.discriminatedUnion("type", [TransformTestEqualsExpectation, TransformTestEmptyExpectation]);
4111
- const TransformTest = z.object({
4112
- id: z.number().int(),
4113
- entity_id: z.string(),
4114
- transform_id: z.number().int(),
4115
- creator_id: z.number().int(),
4116
- name: z.string(),
4117
- description: z.string().nullable(),
4118
- inputs: z.array(TransformTestInput),
4119
- expectations: z.array(TransformTestExpectation),
4120
- created_at: z.string(),
4121
- updated_at: z.string()
4122
- }).loose();
4123
- TransformTest.pick({
4124
- id: true,
4125
- transform_id: true,
4126
- name: true,
4127
- description: true
4128
- }).strip();
4129
- z.object({
4130
- transform_id: z.number().int().positive(),
4131
- name: z.string().min(1),
4132
- description: z.string().nullable().optional(),
4133
- inputs: z.array(TransformTestInput),
4134
- expectations: z.array(TransformTestExpectation)
4135
- }).loose();
4136
- z.object({
4137
- transform_id: z.number().int().positive().optional(),
4138
- name: z.string().min(1).optional(),
4139
- description: z.string().nullable().optional(),
4140
- inputs: z.array(TransformTestInput).optional(),
4141
- expectations: z.array(TransformTestExpectation).optional()
4142
- }).loose();
4143
- const TransformTestResultColumn = z.object({
4144
- name: z.string(),
4145
- database_type: z.string()
4146
- }).loose();
4147
- const TransformTestExpectationError = z.object({
4148
- type: z.string(),
4149
- message: z.string()
4150
- }).loose();
4151
- const TransformTestCellMismatch = z.object({
4152
- column: z.string(),
4153
- expected: TransformTestCell,
4154
- actual: TransformTestCell
4155
- }).loose();
4156
- const TransformTestRowCounts = z.object({
4157
- actual: z.number().int(),
4158
- expected: z.number().int()
4159
- }).loose();
4160
- const TransformTestEqualsFindings = z.object({
4161
- name: z.string(),
4162
- type: z.literal("equals"),
4163
- status: z.enum(["passed", "failed"]),
4164
- columns: z.array(TransformTestResultColumn),
4165
- "row-counts": TransformTestRowCounts,
4166
- "extra-rows": z.array(TransformTestRow),
4167
- "missing-rows": z.array(TransformTestRow),
4168
- "cell-mismatches": z.array(TransformTestCellMismatch),
4169
- truncated: z.number().int()
4170
- }).loose();
4171
- const TransformTestEqualsError = z.object({
4172
- name: z.string(),
4173
- type: z.literal("equals"),
4174
- status: z.literal("error"),
4175
- error: TransformTestExpectationError
4176
- }).loose();
4177
- const TransformTestEqualsResult = z.discriminatedUnion("status", [TransformTestEqualsFindings, TransformTestEqualsError]);
4178
- const TransformTestEmptyPassed = z.object({
4179
- name: z.string(),
4180
- type: z.literal("empty"),
4181
- status: z.literal("passed")
4182
- }).loose();
4183
- const TransformTestEmptyFailed = z.object({
4184
- name: z.string(),
4185
- type: z.literal("empty"),
4186
- status: z.literal("failed"),
4187
- columns: z.array(TransformTestResultColumn),
4188
- sample: z.array(TransformTestRow),
4189
- truncated: z.number().int()
4190
- }).loose();
4191
- const TransformTestEmptyError = z.object({
4192
- name: z.string(),
4193
- type: z.literal("empty"),
4194
- status: z.literal("error"),
4195
- error: TransformTestExpectationError
4196
- }).loose();
4197
- const TransformTestEmptyResult = z.discriminatedUnion("status", [
4198
- TransformTestEmptyPassed,
4199
- TransformTestEmptyFailed,
4200
- TransformTestEmptyError
4201
- ]);
4202
- const TransformTestExpectationResult = z.discriminatedUnion("type", [TransformTestEqualsResult, TransformTestEmptyResult]);
4203
- const TransformTestRunResult = z.object({
4204
- status: z.enum(["passed", "failed"]),
4205
- expectations: z.array(TransformTestExpectationResult),
4206
- tables: z.record(z.string(), z.string())
4207
- }).loose();
4208
- z.enum([
4209
- "transform-test.unknown-column",
4210
- "transform-test.ambiguous-column",
4211
- "transform-test.missing-inputs",
4212
- "transform-test.unused-inputs",
4213
- "transform-test.duplicate-input-table",
4214
- "transform-test.unparseable-source",
4215
- "transform-test.unremapped-reference",
4216
- "transform-test.unsupported-transform",
4217
- "transform-test.unsupported-driver",
4218
- "transform-test.transform-failed",
4219
- "transform-test.setup-failed",
4220
- "transform-test.expectation-failed",
4221
- "transform-test.unsupported-format"
4222
- ]);
4223
- //#endregion
4224
3732
  //#region ../client/src/resources/transform-test.ts
4225
3733
  const TransformTestApiList = z.array(TransformTest);
4226
3734
  function transformTestResource(transport) {
@@ -4368,6 +3876,7 @@ function createClient(config, options) {
4368
3876
  collection: collectionResource(transport),
4369
3877
  contentTranslation: contentTranslationResource(transport),
4370
3878
  dashboard: dashboardResource(transport),
3879
+ dataAction: dataActionResource(transport),
4371
3880
  database: databaseResource(transport),
4372
3881
  dataset: datasetResource(transport),
4373
3882
  dependency: dependencyResource(transport),