@metabase/cli 0.1.17 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +61 -35
  2. package/dist/{add-collection-C-t9SQBk.mjs → add-collection-BTSGp4f9.mjs} +4 -5
  3. package/dist/add-collection-DlAwt2Z3.mjs +9 -0
  4. package/dist/append-DY1-O789.mjs +42 -0
  5. package/dist/{archive-wNXwIiF0.mjs → archive-BOEEMrYL.mjs} +6 -8
  6. package/dist/{archive-CaoUUTIb.mjs → archive-CJ9rElKn.mjs} +6 -8
  7. package/dist/{archive-DS-KEB4a.mjs → archive-CWtUzlHO.mjs} +5 -7
  8. package/dist/{archive-LG8u7ec5.mjs → archive-DCPw3df6.mjs} +5 -7
  9. package/dist/{archive-D1FX-sbU.mjs → archive-DOa1u1aJ.mjs} +5 -7
  10. package/dist/{archive-C7dnyzVY.mjs → archive-pHsa4dL0.mjs} +8 -9
  11. package/dist/{archive-qSOcACQo.mjs → archive-w6TX-zEk.mjs} +7 -8
  12. package/dist/auth-BrQtY0pO.mjs +22 -0
  13. package/dist/{body-IcJ5kFtk.mjs → body-C1_AaTS4.mjs} +3 -3
  14. package/dist/{branches-BlNCTmFB.mjs → branches-BsBzaGIf.mjs} +5 -7
  15. package/dist/{cancel-BnveTPNw.mjs → cancel-BNM0yyx-.mjs} +4 -6
  16. package/dist/{cancel-task-CSVI8Zgl.mjs → cancel-task-Bggzn4JL.mjs} +5 -7
  17. package/dist/capabilities-DrDJo_ng.mjs +684 -0
  18. package/dist/{card-DEmcRlNO.mjs → card-B8G5jQQT.mjs} +24 -18
  19. package/dist/card-DHCcmpgr.mjs +26 -0
  20. package/dist/{cards-CMgGA8OZ.mjs → cards-D0hvA13L.mjs} +7 -8
  21. package/dist/cli.mjs +175 -29
  22. package/dist/{collection-DrLpA1SO.mjs → collection-CFoLPrY5.mjs} +1 -1
  23. package/dist/collection-D0O9gp3S.mjs +23 -0
  24. package/dist/{collection-namespace-CsaxEqOb.mjs → collection-namespace-DqPNrCdQ.mjs} +2 -2
  25. package/dist/{create-I5Cv-MBa.mjs → create-05rX4oL-.mjs} +11 -12
  26. package/dist/{create-B6LQutd0.mjs → create-BR7x66KW.mjs} +12 -13
  27. package/dist/{create-B79M8YpX.mjs → create-C17Fh1_X.mjs} +9 -10
  28. package/dist/{create-FZOrCw5k.mjs → create-C8ndg3g4.mjs} +28 -21
  29. package/dist/{create-C7u3umLj.mjs → create-CZ9KFnbi.mjs} +8 -9
  30. package/dist/{create-B1xfaZJB.mjs → create-Cii_utzV.mjs} +5 -7
  31. package/dist/{create-SHKlj0z3.mjs → create-Cyv7vHV_.mjs} +8 -9
  32. package/dist/{create-Bg_uMu0p.mjs → create-DKuixGJ2.mjs} +8 -9
  33. package/dist/{create-AeWNv0v-.mjs → create-E6L3WMqV.mjs} +8 -9
  34. package/dist/{create-LHqwcVbS.mjs → create-a3s1S2Dw.mjs} +11 -12
  35. package/dist/{create-branch-CGyT99Ny.mjs → create-branch-Dxn6UnV_.mjs} +5 -7
  36. package/dist/{create-BpkWlgoR.mjs → create-oLb0E-ZP.mjs} +17 -14
  37. package/dist/csv-T6_vlLJS.mjs +58 -0
  38. package/dist/{current-task-C-0hw2Ae.mjs → current-task-DxWbw-bU.mjs} +5 -7
  39. package/dist/{dashboard-DOplbKyQ.mjs → dashboard-B-MTpfeS.mjs} +35 -15
  40. package/dist/dashboard-BpSPoeAn.mjs +35 -0
  41. package/dist/{database-D9fftP-i.mjs → database-CIbVSfua.mjs} +2 -2
  42. package/dist/db-DBRijnh4.mjs +27 -0
  43. package/dist/{delete-tCVrYjKD.mjs → delete--P1xFX37.mjs} +6 -8
  44. package/dist/{delete-Do3nn9sl.mjs → delete-BBOIUl0D.mjs} +6 -8
  45. package/dist/{delete--NYYN6wv.mjs → delete-Ce2EBQYA.mjs} +6 -8
  46. package/dist/{delete-runtime-B0ha5QR4.mjs → delete-runtime-B-8I9V1g.mjs} +2 -3
  47. package/dist/{delete-table-CWSGPw0i.mjs → delete-table-Bj32NsXn.mjs} +6 -8
  48. package/dist/{dependencies-CyFocD8I.mjs → dependencies-ixzjVjUz.mjs} +5 -7
  49. package/dist/{dirty-BXM0YJ_a.mjs → dirty-CH70h5m5.mjs} +5 -7
  50. package/dist/{document-1W7NRaO_.mjs → document-CL4ML5FN.mjs} +20 -4
  51. package/dist/document-dZpuFu3I.mjs +22 -0
  52. package/dist/{eid-p-zn_1RJ.mjs → eid-XjkBbyb_.mjs} +10 -11
  53. package/dist/embedding-CKdw8q7p.mjs +11 -0
  54. package/dist/{export-B_8wghyo.mjs → export-CChMg-mL.mjs} +7 -9
  55. package/dist/field-B1heFeCz.mjs +21 -0
  56. package/dist/{field-CMY_LWUe.mjs → field-DsXTeqBy.mjs} +6 -4
  57. package/dist/{fields-BsufL9kv.mjs → fields-C7h2QwUp.mjs} +6 -8
  58. package/dist/{get-Cl5Ak73C.mjs → get-AvGH_oph.mjs} +8 -9
  59. package/dist/{get-DurjkUKJ.mjs → get-B6ZJCJ8H.mjs} +5 -7
  60. package/dist/{get-68P-L4ja.mjs → get-BWHJDa0B.mjs} +5 -7
  61. package/dist/{get-B67pe00Z.mjs → get-BsyccuCH.mjs} +5 -7
  62. package/dist/{get-C7mq17-2.mjs → get-C98IFgFi.mjs} +5 -7
  63. package/dist/{get-BTKeO4vE.mjs → get-Cj90oyxG.mjs} +5 -7
  64. package/dist/{get-BJoZkATD.mjs → get-D9r2znrn.mjs} +5 -7
  65. package/dist/{get-D3k2JUsa.mjs → get-DRZENkCj.mjs} +5 -7
  66. package/dist/{get-4lufgahL.mjs → get-DWWmpQ87.mjs} +5 -7
  67. package/dist/{get-CPw0ROO4.mjs → get-Dg1J0wxb.mjs} +5 -7
  68. package/dist/{get-B45uYMAs.mjs → get-DrWYvefc.mjs} +7 -8
  69. package/dist/{get-DTqBuIf3.mjs → get-KVN9ANVh.mjs} +4 -6
  70. package/dist/get-RlP_xiUd.mjs +67 -0
  71. package/dist/{get-Df_3LCVC.mjs → get-cyR67Lmq.mjs} +5 -7
  72. package/dist/{get-DeLnNVQE.mjs → get-kqY2lwhO.mjs} +16 -9
  73. package/dist/{get-run-Dq4qfGfD.mjs → get-run-C4C_QQqO.mjs} +5 -7
  74. package/dist/git-sync-JHa7bIyY.mjs +31 -0
  75. package/dist/{group-BNE_RiH5.mjs → group-CILtQqCL.mjs} +2 -1
  76. package/dist/{has-remote-changes-E-4N_O_t.mjs → has-remote-changes-dLUGr0MD.mjs} +5 -7
  77. package/dist/{import-Dg0j3HCP.mjs → import-Byull6jF.mjs} +7 -9
  78. package/dist/{input-7Sj85_K7.mjs → input-m9ctfLxZ.mjs} +6 -3
  79. package/dist/is-dirty-Bb2dfEYs.mjs +8 -0
  80. package/dist/{is-dirty-DWw1yBeR.mjs → is-dirty-CU3ovgdG.mjs} +3 -4
  81. package/dist/{items-CQtt9X4M.mjs → items-CEGDYWuF.mjs} +7 -9
  82. package/dist/{key-bltP32Pm.mjs → key-Ge4VwWvS.mjs} +1 -1
  83. package/dist/{library-B5AvpACG.mjs → library-DHWWa4Tt.mjs} +6 -6
  84. package/dist/{list-BFVuPodI.mjs → list-3z1ZChTG.mjs} +4 -6
  85. package/dist/{list-D3TSAqwl.mjs → list-B9TyELob.mjs} +4 -6
  86. package/dist/{list-BAOTQHst.mjs → list-BFm4iEBt.mjs} +4 -6
  87. package/dist/{list-BKUvhAs4.mjs → list-BliCJAjt.mjs} +4 -6
  88. package/dist/{list-BgUWqZa2.mjs → list-Bpv06V24.mjs} +6 -8
  89. package/dist/{list-DG0FIhTK.mjs → list-Br48kL09.mjs} +4 -6
  90. package/dist/{list-BHAWYZ1z.mjs → list-BtcpNl4-.mjs} +4 -6
  91. package/dist/{list-B1uVWy6A.mjs → list-BuyRG3GB.mjs} +7 -8
  92. package/dist/{list-CvhVYOVl.mjs → list-CMb03cv3.mjs} +5 -7
  93. package/dist/{list-CfqpDTna.mjs → list-CmCJwaGT.mjs} +4 -6
  94. package/dist/{list-C4bALfCs.mjs → list-Cur_72xZ.mjs} +5 -7
  95. package/dist/{list-BF-W4jOZ.mjs → list-D9FY30xH.mjs} +8 -9
  96. package/dist/{list-D5Gdz8hi.mjs → list-DEkPxVZu.mjs} +4 -6
  97. package/dist/{list-C9O2RY5u.mjs → list-O2w5xd1q.mjs} +4 -6
  98. package/dist/{list-KxQNqp4T.mjs → list-th_Ym6Cv.mjs} +6 -8
  99. package/dist/{login-Bt6j6yBM.mjs → login-hKlYsAa1.mjs} +8 -10
  100. package/dist/{logout-ANkL02p0.mjs → logout-DO8GVC6b.mjs} +4 -6
  101. package/dist/measure-R3T20wnB.mjs +25 -0
  102. package/dist/{measure-DoJvtCaA.mjs → measure-S9WszHre.mjs} +5 -4
  103. package/dist/{parameter-values-D4J8Ctu0.mjs → parameter-values-BJb2GuLz.mjs} +7 -9
  104. package/dist/{parse-enum-BL9i_brN.mjs → parse-enum-Cfne2suT.mjs} +1 -1
  105. package/dist/{parse-id-D4LeTUsP.mjs → parse-id-DfY0Lugw.mjs} +1 -1
  106. package/dist/{parse-ref-CB_KvF9h.mjs → parse-ref-C_MsXYI6.mjs} +1 -1
  107. package/dist/{path-5nQgdvrs.mjs → path-DzhQVCH8.mjs} +4 -6
  108. package/dist/{poll-BpAJpvb-.mjs → poll-D1Yg78c3.mjs} +2 -2
  109. package/dist/{poll-task-TilgciQn.mjs → poll-task-DLUZaglY.mjs} +2 -2
  110. package/dist/{preflight-OfHU3Toi.mjs → preflight-Cy2jUSca.mjs} +4 -5
  111. package/dist/{process-j8UHMHc2.mjs → process-D5HN1wpT.mjs} +1 -1
  112. package/dist/{prompt-C85xd9HR.mjs → prompt-ZG9Drin_.mjs} +1 -1
  113. package/dist/{publish-DKiqyDwo.mjs → publish-3hmHoaX-.mjs} +7 -9
  114. package/dist/{query-CQ3xXa9P.mjs → query-DTASj9Zu.mjs} +9 -10
  115. package/dist/{query-BWJ5h1g3.mjs → query-DkZViD_3.mjs} +15 -15
  116. package/dist/{query-result-D6mfoVfQ.mjs → query-result-CbTFdlSf.mjs} +1 -1
  117. package/dist/{remove-collection-CO-aMzTO.mjs → remove-collection-D3wH9H6R.mjs} +7 -9
  118. package/dist/replace-CFzqkZXs.mjs +42 -0
  119. package/dist/requests-KBiY9UYy.mjs +96 -0
  120. package/dist/{rescan-values-DpL6LGAK.mjs → rescan-values-B1WycObS.mjs} +7 -9
  121. package/dist/{resolve-Dj2MTBkn.mjs → resolve-Ct084wx3.mjs} +1 -1
  122. package/dist/{run-DUcdaZs3.mjs → run-B8qEEdC8.mjs} +4 -6
  123. package/dist/{run-QYJ-mAaG.mjs → run-cw0qTEQ7.mjs} +7 -9
  124. package/dist/{runs-DgasTnGd.mjs → runs-BOA4kK_X.mjs} +6 -8
  125. package/dist/{runtime-BJtuxWM8.mjs → runtime-B-c-Fc2i.mjs} +3 -4
  126. package/dist/{schema-tables-ooYjimrV.mjs → schema-tables-DRYzSVcW.mjs} +6 -8
  127. package/dist/{schemas-HjFPzsd-.mjs → schemas-BiMjD25L.mjs} +4 -6
  128. package/dist/{search-vaT5EwhG.mjs → search-DjKxRXO5.mjs} +4 -6
  129. package/dist/{segment-TXktTCfU.mjs → segment-BPb1H6DW.mjs} +6 -5
  130. package/dist/segment-CZkk0g79.mjs +25 -0
  131. package/dist/{selectors-DlmZpo2L.mjs → selectors-B7MJUn3I.mjs} +3 -3
  132. package/dist/{set-active-oZOUe9V7.mjs → set-active-CF868qdW.mjs} +4 -6
  133. package/dist/{set-CLHJauzG.mjs → set-kyoORFG3.mjs} +10 -10
  134. package/dist/setting-BZgjURQ_.mjs +20 -0
  135. package/dist/{setup-D1de5Sbc.mjs → setup-D9joJYPb.mjs} +11 -12
  136. package/dist/{skills-B6gfH0iR.mjs → skills-BqI05u72.mjs} +1 -1
  137. package/dist/{skills-NhgVypJ7.mjs → skills-D8NrJxjp.mjs} +3 -3
  138. package/dist/{snippet-CtA2Pkoa.mjs → snippet-DWiXNy4T.mjs} +7 -4
  139. package/dist/snippet-y_FzKxaQ.mjs +22 -0
  140. package/dist/{stash-DoRwelwY.mjs → stash-BVMerTaF.mjs} +7 -9
  141. package/dist/{status-CmRgHTrV.mjs → status-C-0jFjFn.mjs} +4 -6
  142. package/dist/{status-BpMOlfsA.mjs → status-x8bDOa1i.mjs} +6 -8
  143. package/dist/{summary-BEu7pmpq.mjs → summary-B-R9SdMF.mjs} +5 -7
  144. package/dist/{sync-schema-DTUXubMg.mjs → sync-schema-wne2KXIW.mjs} +9 -11
  145. package/dist/{table-DE3i82T_.mjs → table-C3RIKiYM.mjs} +16 -4
  146. package/dist/table-CS2-2INi.mjs +21 -0
  147. package/dist/transform-6hqM1DXA.mjs +31 -0
  148. package/dist/{transform-DEF38FWe.mjs → transform-JQel7e5H.mjs} +31 -5
  149. package/dist/transform-job-DuERhLaj.mjs +25 -0
  150. package/dist/transform-tag-DaNKreDj.mjs +21 -0
  151. package/dist/{transforms-CWvMpLc9.mjs → transforms-DB2WNP2R.mjs} +5 -7
  152. package/dist/{tree-D18vYSe4.mjs → tree-BIOphGVs.mjs} +4 -6
  153. package/dist/{unpublish-CJbL4ZsC.mjs → unpublish-BWM36ZTg.mjs} +5 -7
  154. package/dist/{update-mr9todHq.mjs → update-6umfSz5t.mjs} +9 -10
  155. package/dist/{update-BjjZIe2W.mjs → update-7Ts7KrB8.mjs} +9 -10
  156. package/dist/{update-Doia9MP_.mjs → update-BCbv880u.mjs} +12 -13
  157. package/dist/{update-CSxwZ2us.mjs → update-BchtHlbH.mjs} +10 -11
  158. package/dist/{update-BvsvyBw9.mjs → update-BiUeEGU-.mjs} +12 -13
  159. package/dist/{update-DhOfrW1j.mjs → update-BlzcZwRQ.mjs} +18 -15
  160. package/dist/{update-Bos8nnv0.mjs → update-CTZg2Lia.mjs} +13 -14
  161. package/dist/{update-DV7IY7IQ.mjs → update-DJDuIhYG.mjs} +9 -10
  162. package/dist/{update-Dxa_6H2A.mjs → update-HxYcvpSq.mjs} +15 -15
  163. package/dist/{update-Ck0Kxv8u.mjs → update-Sz0QRGWB.mjs} +9 -10
  164. package/dist/{update-dashcard-CZUWZhal.mjs → update-dashcard-CfDpy7Lz.mjs} +11 -11
  165. package/dist/{update-7DacwIvi.mjs → update-zfLbmC-H.mjs} +9 -10
  166. package/dist/{upgrade-CBW8V9qZ.mjs → upgrade-BWl0VjMK.mjs} +5 -7
  167. package/dist/upload-CPzOhGeX.mjs +16 -0
  168. package/dist/{uuid-D6JVJ-R1.mjs → uuid-D_YeqDui.mjs} +3 -5
  169. package/dist/{validate-BqNW4Sk1.mjs → validate-clAWO3X-.mjs} +1 -2
  170. package/dist/{validate-query-CcZVKYPV.mjs → validate-query-CsK2_2_u.mjs} +2 -3
  171. package/dist/{values-DBvuGnnA.mjs → values-DSk8ZJ3B.mjs} +5 -7
  172. package/dist/{verify-LIShMNZ2.mjs → verify-DkQdLjf3.mjs} +2 -2
  173. package/dist/{wait-DUHze3_B.mjs → wait-DvSsMjea.mjs} +6 -8
  174. package/dist/{wait-flags-Ybpt98PK.mjs → wait-flags-dXGThljd.mjs} +2 -2
  175. package/package.json +1 -1
  176. package/skill-data/core/SKILL.md +31 -22
  177. package/skill-data/dashboard/SKILL.md +130 -0
  178. package/skill-data/data-workflow/SKILL.md +17 -15
  179. package/skill-data/data-workflow/references/building-clean-tables.md +1 -1
  180. package/skill-data/document/SKILL.md +3 -3
  181. package/skill-data/git-sync/SKILL.md +5 -5
  182. package/skill-data/mbql/SKILL.md +17 -17
  183. package/skill-data/mbql/references/operators.md +4 -3
  184. package/skill-data/metadata/SKILL.md +78 -0
  185. package/skill-data/metadata/references/semantic-types.md +83 -0
  186. package/skill-data/native-sql/SKILL.md +118 -0
  187. package/skill-data/native-sql/references/template-tags.md +178 -0
  188. package/skill-data/transform/SKILL.md +6 -6
  189. package/skill-data/visualization/SKILL.md +3 -3
  190. package/skill-data/visualization/references/settings.md +2 -0
  191. package/dist/add-collection-Dek6kiRI.mjs +0 -11
  192. package/dist/auth-Kv2MRkRk.mjs +0 -22
  193. package/dist/capabilities-N0jo5U7S.mjs +0 -239
  194. package/dist/card-Bp58WEUF.mjs +0 -26
  195. package/dist/collection-D8TI20Ir.mjs +0 -23
  196. package/dist/dashboard-C9pQCnX6.mjs +0 -28
  197. package/dist/db-DWykmBOh.mjs +0 -28
  198. package/dist/document-DNDm8_Py.mjs +0 -22
  199. package/dist/error-5H_tcfL8.mjs +0 -227
  200. package/dist/field-CFt1-KDR.mjs +0 -21
  201. package/dist/get-CDLa6LiC.mjs +0 -50
  202. package/dist/git-sync-ByvjqSiy.mjs +0 -31
  203. package/dist/is-dirty-D7UMN0mt.mjs +0 -10
  204. package/dist/manifest-BVf8P4bl.mjs +0 -126
  205. package/dist/measure-CgFwtL1r.mjs +0 -25
  206. package/dist/metadata-ClehtgZj.mjs +0 -39
  207. package/dist/metadata-DplshwI3.mjs +0 -38
  208. package/dist/notice-DyVl5aYB.mjs +0 -206
  209. package/dist/segment-BPC725mo.mjs +0 -25
  210. package/dist/setting-DHYO-W5g.mjs +0 -20
  211. package/dist/snippet-DtLmHr2J.mjs +0 -22
  212. package/dist/table-B1iBqmNu.mjs +0 -22
  213. package/dist/transform-BuIooRQh.mjs +0 -31
  214. package/dist/transform-job-C3yz0krA.mjs +0 -25
  215. package/dist/transform-tag-CJD6mJUe.mjs +0 -21
  216. /package/dist/{body-flags-DWTTxJpP.mjs → body-flags-CgHgJBRC.mjs} +0 -0
  217. /package/dist/{command-augment-DdZIfx1V.mjs → command-augment-D9pI9Vbh.mjs} +0 -0
  218. /package/dist/{paginate-FVZUxL4J.mjs → paginate-CMqbqhMC.mjs} +0 -0
  219. /package/dist/{parameter-CiJ4CwWE.mjs → parameter-BZ6y-Gfs.mjs} +0 -0
  220. /package/dist/{render-BTKnWL0d.mjs → render-CkuFkWlQ.mjs} +0 -0
  221. /package/dist/{revision-message-flag-CHrJgFFx.mjs → revision-message-flag-CHzX0cqV.mjs} +0 -0
  222. /package/dist/{setting-m46MUtW5.mjs → setting-Cko6bE_w.mjs} +0 -0
  223. /package/dist/{transform-job-CtixL4An.mjs → transform-job-CtVziW85.mjs} +0 -0
  224. /package/dist/{transform-tag-rsIrckCM.mjs → transform-tag-wFiWmiyO.mjs} +0 -0
@@ -1,239 +0,0 @@
1
- import { ConfigError, itemOversizeMessage, listTruncationNotice, warn } from "./notice-DyVl5aYB.mjs";
2
- import { z } from "zod";
3
- import Table from "cli-table3";
4
-
5
- //#region src/runtime/predicates.ts
6
- function isPlainObject(value) {
7
- return typeof value === "object" && value !== null && !Array.isArray(value);
8
- }
9
-
10
- //#endregion
11
- //#region src/output/cap.ts
12
- function capListEnvelope(envelope, maxBytes) {
13
- if (maxBytes <= 0) return envelope;
14
- const fullBytes = jsonByteLength(envelope);
15
- if (fullBytes <= maxBytes) return envelope;
16
- let lo = 0;
17
- let hi = envelope.data.length;
18
- while (lo < hi) {
19
- const mid = Math.ceil((lo + hi) / 2);
20
- if (jsonByteLength(truncate(envelope, mid, fullBytes)) <= maxBytes) lo = mid;
21
- else hi = mid - 1;
22
- }
23
- return truncate(envelope, lo, fullBytes);
24
- }
25
- function truncate(envelope, count, originalBytes) {
26
- return {
27
- ...envelope,
28
- data: envelope.data.slice(0, count),
29
- returned: count,
30
- truncated: {
31
- reason: "max_bytes",
32
- bytes: originalBytes
33
- }
34
- };
35
- }
36
- function jsonByteLength(value) {
37
- return Buffer.byteLength(JSON.stringify(value), "utf8");
38
- }
39
-
40
- //#endregion
41
- //#region src/output/projection.ts
42
- function applyProjection(value, view, full, fields) {
43
- if (fields !== void 0) {
44
- if (fields.length === 0) throw new ConfigError("--fields requires at least one path");
45
- return projectFields(value, fields);
46
- }
47
- if (full) return value;
48
- const parsed = view.compactPick.safeParse(value);
49
- if (parsed.success) return parsed.data;
50
- throw new ConfigError(`compact projection failed: ${parsed.error.message}`);
51
- }
52
- function projectFields(value, fields) {
53
- const out = {};
54
- for (const path of fields) {
55
- if (path.length === 0) throw new ConfigError(`empty field path`);
56
- const parts = path.split(".");
57
- if (parts.some((part) => part.length === 0)) throw new ConfigError(`invalid field path: "${path}"`);
58
- setPath(out, parts, pickPath(value, parts));
59
- }
60
- return out;
61
- }
62
- function pickPath(value, parts) {
63
- let cursor = value;
64
- for (const part of parts) {
65
- if (!isPlainObject(cursor) || !Object.hasOwn(cursor, part)) throw new ConfigError(`unknown field path: "${parts.join(".")}"`);
66
- cursor = Reflect.get(cursor, part);
67
- }
68
- return cursor;
69
- }
70
- function setPath(target, parts, value) {
71
- let cursor = target;
72
- const lastIndex = parts.length - 1;
73
- for (const [index, part] of parts.entries()) {
74
- if (index === lastIndex) {
75
- cursor[part] = value;
76
- return;
77
- }
78
- const existing = cursor[part];
79
- if (isPlainObject(existing)) cursor = existing;
80
- else {
81
- const next = {};
82
- cursor[part] = next;
83
- cursor = next;
84
- }
85
- }
86
- }
87
-
88
- //#endregion
89
- //#region src/output/table.ts
90
- const PLAIN_TABLE_STYLE = {
91
- head: [],
92
- border: []
93
- };
94
- function renderTable(rows, columns) {
95
- const head = columns.map((column) => column.label ?? column.key);
96
- const widths = columns.map((column) => column.width ?? null);
97
- const hasWidth = widths.some((width) => width !== null);
98
- const table = new Table(hasWidth ? {
99
- head,
100
- colWidths: widths,
101
- style: PLAIN_TABLE_STYLE
102
- } : {
103
- head,
104
- style: PLAIN_TABLE_STYLE
105
- });
106
- for (const row of rows) table.push(columns.map((column) => formatCell(row, column)));
107
- return table.toString();
108
- }
109
- function renderRows(head, rows) {
110
- const table = new Table({
111
- head: [...head],
112
- style: PLAIN_TABLE_STYLE
113
- });
114
- for (const row of rows) table.push([...row]);
115
- return table.toString();
116
- }
117
- function formatCell(row, column) {
118
- const value = row[column.key];
119
- if (column.format !== void 0) return column.format(value);
120
- return formatScalar(value);
121
- }
122
- function formatScalar(value) {
123
- if (value === null || value === void 0) return "";
124
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return String(value);
125
- return JSON.stringify(value);
126
- }
127
-
128
- //#endregion
129
- //#region src/output/render.ts
130
- function writeJson(value) {
131
- process.stdout.write(JSON.stringify(value, null, 2) + "\n");
132
- }
133
- function writeText(text) {
134
- process.stdout.write(text + "\n");
135
- }
136
- function renderItem(item, view, opts) {
137
- const projected = applyProjection(item, view, opts.full, opts.fields);
138
- const body = renderItemBody(item, view, projected, opts) + "\n";
139
- assertItemWithinMaxBytes(body, opts.maxBytes);
140
- process.stdout.write(body);
141
- }
142
- function renderSummary(item, view, summaryText, opts) {
143
- if (opts.format === "json" || opts.fields !== void 0 || opts.full) {
144
- renderItem(item, view, opts);
145
- return;
146
- }
147
- const body = (typeof summaryText === "function" ? summaryText() : summaryText) + "\n";
148
- assertItemWithinMaxBytes(body, opts.maxBytes);
149
- process.stdout.write(body);
150
- }
151
- function renderList(envelope, view, opts) {
152
- if (opts.format === "json") {
153
- renderJsonEnvelope(envelope, view, opts);
154
- return;
155
- }
156
- if (envelope.data.length === 0) {
157
- process.stdout.write("(no results)\n");
158
- return;
159
- }
160
- if (opts.fields !== void 0) {
161
- renderProjectedTable(envelope, view, opts.fields, opts.maxBytes);
162
- return;
163
- }
164
- const capped = capListEnvelope(envelope, opts.maxBytes);
165
- process.stdout.write(renderTable(capped.data, view.tableColumns) + "\n");
166
- if (capped.truncated !== void 0) warn(listTruncationNotice(capped.truncated.bytes));
167
- }
168
- function renderProjectedTable(envelope, view, fields, maxBytes) {
169
- const projectedItems = projectListItems(envelope.data, view, false, fields);
170
- const capped = capListEnvelope({
171
- ...envelope,
172
- data: projectedItems
173
- }, maxBytes);
174
- const rows = capped.data.map((item) => fields.map((path) => formatScalar(pickPath(item, path.split(".")))));
175
- process.stdout.write(renderRows(fields, rows) + "\n");
176
- if (capped.truncated !== void 0) warn(listTruncationNotice(capped.truncated.bytes));
177
- }
178
- function projectListItems(items, view, full, fields) {
179
- try {
180
- return items.map((item) => applyProjection(item, view, full, fields));
181
- } catch (error) {
182
- throw enrichListFieldPathError(error, fields);
183
- }
184
- }
185
- function enrichListFieldPathError(error, fields) {
186
- if (fields === void 0 || !(error instanceof ConfigError) || !error.message.startsWith("unknown field path")) return error;
187
- const prefix = "data.";
188
- const culprit = fields.find((field) => field === "data" || field.startsWith(prefix));
189
- if (culprit === void 0) return error;
190
- const suggestion = culprit.startsWith(prefix) ? culprit.slice(prefix.length) : "<field>";
191
- return new ConfigError(`${error.message} — on list commands --fields paths are relative to each item in \`data\`, not the envelope. Drop the \`data.\` prefix (e.g. use \`${suggestion}\` instead of \`${culprit}\`).`);
192
- }
193
- function renderJsonEnvelope(envelope, view, opts) {
194
- const projectedItems = projectListItems(envelope.data, view, opts.full, opts.fields);
195
- const projectedEnvelope = {
196
- ...envelope,
197
- data: projectedItems
198
- };
199
- const capped = capListEnvelope(projectedEnvelope, opts.maxBytes);
200
- process.stdout.write(JSON.stringify(capped, null, 2) + "\n");
201
- if (capped.truncated !== void 0) warn(listTruncationNotice(capped.truncated.bytes));
202
- }
203
- function renderItemBody(item, view, projected, opts) {
204
- if (opts.format === "json") return JSON.stringify(projected, null, 2);
205
- if (opts.fields !== void 0 || opts.full) return renderKeyValueLines(objectPairs(projected));
206
- return renderKeyValueLines(columnPairs(item, view.tableColumns));
207
- }
208
- function columnPairs(item, columns) {
209
- return columns.map((column) => [column.label ?? column.key, formatCell(item, column)]);
210
- }
211
- function objectPairs(value) {
212
- if (!isPlainObject(value)) {
213
- const scalar = formatScalar(value);
214
- return scalar === "" ? [] : [["", scalar]];
215
- }
216
- return Object.entries(value).map(([key, raw]) => [key, formatScalar(raw)]);
217
- }
218
- function renderKeyValueLines(pairs) {
219
- if (pairs.length === 0) return "";
220
- const padding = Math.max(...pairs.map(([label]) => label.length));
221
- return pairs.map(([label, value]) => `${label.padEnd(padding)} ${value}`).join("\n");
222
- }
223
- function assertItemWithinMaxBytes(body, maxBytes) {
224
- if (maxBytes <= 0) return;
225
- const bytes = Buffer.byteLength(body, "utf8");
226
- if (bytes <= maxBytes) return;
227
- throw new ConfigError(itemOversizeMessage(bytes, maxBytes));
228
- }
229
-
230
- //#endregion
231
- //#region src/runtime/capabilities.ts
232
- const Capabilities = z.object({
233
- minVersion: z.number(),
234
- tokenFeature: z.string().optional()
235
- });
236
- const BASELINE_CAPABILITIES = Object.freeze({ minVersion: 58 });
237
-
238
- //#endregion
239
- export { BASELINE_CAPABILITIES, Capabilities, formatScalar, isPlainObject, renderItem, renderList, renderRows, renderSummary, writeJson, writeText };
@@ -1,26 +0,0 @@
1
- import "./command-augment-DdZIfx1V.mjs";
2
- import { defineCommandGroup } from "./group-BNE_RiH5.mjs";
3
-
4
- //#region src/commands/card/index.ts
5
- var card_default = defineCommandGroup({
6
- name: "card",
7
- description: "Manage Metabase cards (questions, models, metrics)",
8
- skills: [{
9
- skill: "mbql",
10
- purpose: "author the dataset_query"
11
- }, {
12
- skill: "visualization",
13
- purpose: "choose display and visualization_settings"
14
- }],
15
- subCommands: {
16
- list: () => import("./list-BF-W4jOZ.mjs").then((mod) => mod.default),
17
- get: () => import("./get-Cl5Ak73C.mjs").then((mod) => mod.default),
18
- query: () => import("./query-CQ3xXa9P.mjs").then((mod) => mod.default),
19
- create: () => import("./create-FZOrCw5k.mjs").then((mod) => mod.default),
20
- update: () => import("./update-Dxa_6H2A.mjs").then((mod) => mod.default),
21
- archive: () => import("./archive-C7dnyzVY.mjs").then((mod) => mod.default)
22
- }
23
- });
24
-
25
- //#endregion
26
- export { card_default as default };
@@ -1,23 +0,0 @@
1
- import "./command-augment-DdZIfx1V.mjs";
2
- import { defineCommandGroup } from "./group-BNE_RiH5.mjs";
3
-
4
- //#region src/commands/collection/index.ts
5
- var collection_default = defineCommandGroup({
6
- name: "collection",
7
- description: "Manage Metabase collections",
8
- skills: [{
9
- skill: "core",
10
- purpose: "collection ref forms and the transforms namespace"
11
- }],
12
- subCommands: {
13
- list: () => import("./list-C4bALfCs.mjs").then((mod) => mod.default),
14
- get: () => import("./get-4lufgahL.mjs").then((mod) => mod.default),
15
- items: () => import("./items-CQtt9X4M.mjs").then((mod) => mod.default),
16
- tree: () => import("./tree-D18vYSe4.mjs").then((mod) => mod.default),
17
- create: () => import("./create-B79M8YpX.mjs").then((mod) => mod.default),
18
- archive: () => import("./archive-DS-KEB4a.mjs").then((mod) => mod.default)
19
- }
20
- });
21
-
22
- //#endregion
23
- export { collection_default as default };
@@ -1,28 +0,0 @@
1
- import "./command-augment-DdZIfx1V.mjs";
2
- import { defineCommandGroup } from "./group-BNE_RiH5.mjs";
3
-
4
- //#region src/commands/dashboard/index.ts
5
- var dashboard_default = defineCommandGroup({
6
- name: "dashboard",
7
- description: "Manage Metabase dashboards",
8
- skills: [{
9
- skill: "visualization",
10
- purpose: "dashcard display and visualization_settings"
11
- }, {
12
- skill: "core",
13
- purpose: "the 24-column dashcard grid layout"
14
- }],
15
- subCommands: {
16
- list: () => import("./list-B1uVWy6A.mjs").then((mod) => mod.default),
17
- get: () => import("./get-B45uYMAs.mjs").then((mod) => mod.default),
18
- cards: () => import("./cards-CMgGA8OZ.mjs").then((mod) => mod.default),
19
- "parameter-values": () => import("./parameter-values-D4J8Ctu0.mjs").then((mod) => mod.default),
20
- create: () => import("./create-BpkWlgoR.mjs").then((mod) => mod.default),
21
- update: () => import("./update-DhOfrW1j.mjs").then((mod) => mod.default),
22
- "update-dashcard": () => import("./update-dashcard-CZUWZhal.mjs").then((mod) => mod.default),
23
- archive: () => import("./archive-qSOcACQo.mjs").then((mod) => mod.default)
24
- }
25
- });
26
-
27
- //#endregion
28
- export { dashboard_default as default };
@@ -1,28 +0,0 @@
1
- import "./command-augment-DdZIfx1V.mjs";
2
- import { defineCommandGroup } from "./group-BNE_RiH5.mjs";
3
-
4
- //#region src/commands/db/index.ts
5
- var db_default = defineCommandGroup({
6
- name: "db",
7
- description: "Inspect and sync Metabase databases",
8
- alias: "database",
9
- skills: [{
10
- skill: "core",
11
- purpose: "the database traversal ladder and schema sync"
12
- }, {
13
- skill: "data-workflow",
14
- purpose: "model a raw database into clean tables"
15
- }],
16
- subCommands: {
17
- list: () => import("./list-BgUWqZa2.mjs").then((m) => m.default),
18
- get: () => import("./get-CDLa6LiC.mjs").then((m) => m.default),
19
- metadata: () => import("./metadata-ClehtgZj.mjs").then((m) => m.default),
20
- schemas: () => import("./schemas-HjFPzsd-.mjs").then((m) => m.default),
21
- "schema-tables": () => import("./schema-tables-ooYjimrV.mjs").then((m) => m.default),
22
- "sync-schema": () => import("./sync-schema-DTUXubMg.mjs").then((m) => m.default),
23
- "rescan-values": () => import("./rescan-values-DpL6LGAK.mjs").then((m) => m.default)
24
- }
25
- });
26
-
27
- //#endregion
28
- export { db_default as default };
@@ -1,22 +0,0 @@
1
- import "./command-augment-DdZIfx1V.mjs";
2
- import { defineCommandGroup } from "./group-BNE_RiH5.mjs";
3
-
4
- //#region src/commands/document/index.ts
5
- var document_default = defineCommandGroup({
6
- name: "document",
7
- description: "Manage Metabase documents",
8
- skills: [{
9
- skill: "document",
10
- purpose: "author the ProseMirror document body"
11
- }],
12
- subCommands: {
13
- list: () => import("./list-DG0FIhTK.mjs").then((mod) => mod.default),
14
- get: () => import("./get-DurjkUKJ.mjs").then((mod) => mod.default),
15
- create: () => import("./create-C7u3umLj.mjs").then((mod) => mod.default),
16
- update: () => import("./update-BjjZIe2W.mjs").then((mod) => mod.default),
17
- archive: () => import("./archive-LG8u7ec5.mjs").then((mod) => mod.default)
18
- }
19
- });
20
-
21
- //#endregion
22
- export { document_default as default };
@@ -1,227 +0,0 @@
1
- import { toMetabaseError, warn } from "./notice-DyVl5aYB.mjs";
2
- import { z } from "zod";
3
-
4
- //#region src/output/types.ts
5
- const DEFAULT_MAX_BYTES = 65536;
6
- function listEnvelopeSchema(item) {
7
- return z.object({
8
- data: z.array(item),
9
- returned: z.number().int().nonnegative(),
10
- total: z.number().int().nonnegative().nullable().optional(),
11
- limit: z.number().int().nonnegative().optional(),
12
- truncated: z.object({
13
- reason: z.literal("max_bytes"),
14
- bytes: z.number().int().nonnegative()
15
- }).optional()
16
- });
17
- }
18
- function wrapList(items) {
19
- return {
20
- data: items,
21
- returned: items.length,
22
- total: items.length
23
- };
24
- }
25
-
26
- //#endregion
27
- //#region src/commands/flags.ts
28
- const outputFlags = {
29
- format: {
30
- type: "string",
31
- description: "auto | json | text",
32
- default: "auto"
33
- },
34
- json: {
35
- type: "boolean",
36
- description: "Shorthand for --format json"
37
- },
38
- full: {
39
- type: "boolean",
40
- description: "Return the full object (default: compact)"
41
- },
42
- fields: {
43
- type: "string",
44
- description: "Dot-paths, comma separated (mutually exclusive with --full)"
45
- },
46
- maxBytes: {
47
- type: "string",
48
- description: "Output size cap; 0 disables",
49
- default: String(DEFAULT_MAX_BYTES),
50
- alias: "max-bytes"
51
- }
52
- };
53
- const profileFlag = { profile: {
54
- type: "string",
55
- description: "Named profile (default: 'default')",
56
- alias: "p"
57
- } };
58
- const connectionFlags = {
59
- url: {
60
- type: "string",
61
- description: "Metabase URL"
62
- },
63
- apiKey: {
64
- type: "string",
65
- description: "API key",
66
- alias: "api-key"
67
- },
68
- skipPreflight: {
69
- type: "boolean",
70
- description: "Skip the server version capability check for this command",
71
- alias: "skip-preflight"
72
- }
73
- };
74
-
75
- //#endregion
76
- //#region package.json
77
- var name = "@metabase/cli";
78
- var version = "0.1.17";
79
- var description = "Metabase CLI";
80
- var license = "AGPL-3.0";
81
- var repository = {
82
- "type": "git",
83
- "url": "git+https://github.com/metabase/mb-cli.git"
84
- };
85
- var bin = { "mb": "./dist/cli.mjs" };
86
- var files = [
87
- "dist",
88
- "skills",
89
- "skill-data",
90
- ".claude-plugin"
91
- ];
92
- var type = "module";
93
- var publishConfig = {
94
- "access": "public",
95
- "registry": "https://registry.npmjs.org/"
96
- };
97
- var scripts = {
98
- "build": "tsdown",
99
- "dev": "tsdown --watch",
100
- "start": "node dist/cli.mjs",
101
- "test": "vitest run --project unit",
102
- "test:watch": "vitest --project unit",
103
- "test:e2e": "vitest run --project e2e",
104
- "test:e2e:watch": "vitest --project e2e",
105
- "e2e:up": "docker compose -f tests/e2e/docker-compose.yml up -d --wait",
106
- "e2e:down": "docker compose -f tests/e2e/docker-compose.yml down -v",
107
- "e2e:bootstrap": "bun tests/e2e/setup/bootstrap.ts",
108
- "e2e:matrix": "bun scripts/e2e-matrix.ts",
109
- "e2e:logs": "docker compose -f tests/e2e/docker-compose.yml logs -f metabase",
110
- "typecheck": "tsc --noEmit",
111
- "lint": "oxlint",
112
- "lint:fix": "oxlint --fix",
113
- "lint:skills": "uvx skillsaw lint skill-data/ --strict",
114
- "format": "oxfmt",
115
- "format:check": "oxfmt --check",
116
- "sync:representations": "bun run scripts/sync-representations.ts",
117
- "prepublishOnly": "tsdown && publint"
118
- };
119
- var dependencies = {
120
- "@clack/prompts": "^0.8.2",
121
- "@napi-rs/keyring": "^1.3.0",
122
- "ajv": "^8.17.1",
123
- "ajv-formats": "^3.0.1",
124
- "citty": "^0.2.2",
125
- "cli-table3": "^0.6.5",
126
- "semver": "^7.8.0",
127
- "yaml": "^2.8.4",
128
- "zod": "^4.0.0"
129
- };
130
- var devDependencies = {
131
- "@types/js-yaml": "^4.0.9",
132
- "@types/node": "^22.10.0",
133
- "@types/semver": "^7.7.1",
134
- "execa": "^9.5.2",
135
- "fast-check": "^4.7.0",
136
- "js-yaml": "^4.1.0",
137
- "oxfmt": "^0.47.0",
138
- "oxlint": "^1.62.0",
139
- "publint": "^0.3.0",
140
- "tsdown": "^0.9.0",
141
- "typescript": "^5.7.2",
142
- "vitest": "^2.1.8"
143
- };
144
- var engines = { "node": ">=20.6" };
145
- var package_default = {
146
- name,
147
- version,
148
- description,
149
- license,
150
- repository,
151
- bin,
152
- files,
153
- type,
154
- publishConfig,
155
- scripts,
156
- dependencies,
157
- devDependencies,
158
- engines
159
- };
160
-
161
- //#endregion
162
- //#region src/core/env.ts
163
- const CANONICAL_PREFIX = "MB_";
164
- const LEGACY_PREFIX = "METABASE_";
165
- const ENV_URL = "MB_URL";
166
- const ENV_API_KEY = "MB_API_KEY";
167
- const ENV_PROFILE = "MB_PROFILE";
168
- const ENV_VERBOSE = "MB_VERBOSE";
169
- const ENV_SKIP_PREFLIGHT = "MB_CLI_SKIP_PREFLIGHT";
170
- const ENV_DISABLE_KEYRING = "MB_CLI_DISABLE_KEYRING";
171
- function legacyNameFor(canonical) {
172
- return LEGACY_PREFIX + canonical.slice(CANONICAL_PREFIX.length);
173
- }
174
- const legacyVarsUsed = new Set();
175
- function readEnv(canonical) {
176
- const direct = process.env[canonical];
177
- if (direct !== void 0) return direct;
178
- const legacyValue = process.env[legacyNameFor(canonical)];
179
- if (legacyValue !== void 0) {
180
- legacyVarsUsed.add(canonical);
181
- return legacyValue;
182
- }
183
- return void 0;
184
- }
185
- function consumeLegacyEnvWarnings() {
186
- if (legacyVarsUsed.size === 0) return [];
187
- const messages = [...legacyVarsUsed].map(legacyEnvWarning);
188
- legacyVarsUsed.clear();
189
- return messages;
190
- }
191
- function legacyEnvWarning(canonical) {
192
- return `warning: ${legacyNameFor(canonical)} is deprecated; set ${canonical} instead`;
193
- }
194
-
195
- //#endregion
196
- //#region src/output/error.ts
197
- const VERBOSE_BREADCRUMB = "(rerun with MB_VERBOSE=1 for details)";
198
- function reportError(error, format) {
199
- const handled = toMetabaseError(error);
200
- const verbose = readEnv(ENV_VERBOSE) === "1";
201
- if (format === "json") writeJsonError(handled, verbose);
202
- else writeTextError(handled, verbose);
203
- for (const message of consumeLegacyEnvWarnings()) warn(message);
204
- process.exitCode = handled.exitCode;
205
- }
206
- function writeTextError(handled, verbose) {
207
- process.stderr.write(handled.userMessage + "\n");
208
- if (handled.developerDetail === null) return;
209
- if (verbose) process.stderr.write(JSON.stringify(handled.developerDetail, null, 2) + "\n");
210
- else process.stderr.write(VERBOSE_BREADCRUMB + "\n");
211
- }
212
- function writeJsonError(handled, verbose) {
213
- const payload = {
214
- category: handled.category,
215
- message: handled.userMessage,
216
- exitCode: handled.exitCode
217
- };
218
- if (verbose && handled.developerDetail !== null) payload.detail = handled.developerDetail;
219
- const envelope = {
220
- ok: false,
221
- error: payload
222
- };
223
- process.stderr.write(JSON.stringify(envelope, null, 2) + "\n");
224
- }
225
-
226
- //#endregion
227
- export { DEFAULT_MAX_BYTES, ENV_API_KEY, ENV_DISABLE_KEYRING, ENV_PROFILE, ENV_SKIP_PREFLIGHT, ENV_URL, connectionFlags, consumeLegacyEnvWarnings, listEnvelopeSchema, outputFlags, package_default, profileFlag, readEnv, reportError, wrapList };
@@ -1,21 +0,0 @@
1
- import "./command-augment-DdZIfx1V.mjs";
2
- import { defineCommandGroup } from "./group-BNE_RiH5.mjs";
3
-
4
- //#region src/commands/field/index.ts
5
- var field_default = defineCommandGroup({
6
- name: "field",
7
- description: "Manage Metabase fields",
8
- skills: [{
9
- skill: "core",
10
- purpose: "field metadata — semantic types, FK targets, cached values"
11
- }],
12
- subCommands: {
13
- get: () => import("./get-C7mq17-2.mjs").then((m) => m.default),
14
- values: () => import("./values-DBvuGnnA.mjs").then((m) => m.default),
15
- summary: () => import("./summary-BEu7pmpq.mjs").then((m) => m.default),
16
- update: () => import("./update-mr9todHq.mjs").then((m) => m.default)
17
- }
18
- });
19
-
20
- //#endregion
21
- export { field_default as default };
@@ -1,50 +0,0 @@
1
- import "./notice-DyVl5aYB.mjs";
2
- import { connectionFlags, outputFlags, profileFlag } from "./error-5H_tcfL8.mjs";
3
- import "./command-augment-DdZIfx1V.mjs";
4
- import { defineMetabaseCommand, parseEnum } from "./runtime-BJtuxWM8.mjs";
5
- import { renderItem } from "./capabilities-N0jo5U7S.mjs";
6
- import "./field-CMY_LWUe.mjs";
7
- import { parseId } from "./parse-id-D4LeTUsP.mjs";
8
- import "./table-DE3i82T_.mjs";
9
- import { Database, databaseView } from "./database-D9fftP-i.mjs";
10
- import { z } from "zod";
11
-
12
- //#region src/commands/db/get.ts
13
- const DatabaseGetInclude = z.enum(["tables", "tables.fields"]);
14
- var get_default = defineMetabaseCommand({
15
- meta: {
16
- name: "get",
17
- description: "Get a database by id"
18
- },
19
- capabilities: { minVersion: 58 },
20
- args: {
21
- ...outputFlags,
22
- ...profileFlag,
23
- ...connectionFlags,
24
- include: {
25
- type: "string",
26
- description: `Hydrate related entities: ${DatabaseGetInclude.options.join("|")}`
27
- },
28
- id: {
29
- type: "positional",
30
- description: "Database id",
31
- required: true
32
- }
33
- },
34
- outputSchema: Database,
35
- examples: [
36
- "mb db get 1",
37
- "mb db get 1 --json",
38
- "mb db get 1 --include tables.fields --json"
39
- ],
40
- async run({ args, ctx, getClient }) {
41
- const id = parseId(args.id);
42
- const include = parseEnum(args.include, DatabaseGetInclude, "--include");
43
- const client = await getClient();
44
- const database = await client.requestParsed(Database, `/api/database/${id}`, { query: { include } });
45
- renderItem(database, databaseView, ctx);
46
- }
47
- });
48
-
49
- //#endregion
50
- export { get_default as default };