@metabase/cli 0.1.0 → 0.1.2

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 (187) hide show
  1. package/README.md +972 -57
  2. package/dist/add-collection-DwxQDXzL.mjs +54 -0
  3. package/dist/add-collection-SL08iMub.mjs +11 -0
  4. package/dist/api-key-BktzvPb7.mjs +13 -0
  5. package/dist/{archive-CsWeHXle.mjs → archive-C1mF-9Kj.mjs} +7 -4
  6. package/dist/archive-CLWtbvvH.mjs +44 -0
  7. package/dist/archive-Cq4WKmJt.mjs +44 -0
  8. package/dist/archive-kYoy5LK5.mjs +39 -0
  9. package/dist/auth-DfYkakP3.mjs +19 -0
  10. package/dist/{body-Dv9hQ0Qk.mjs → body-rDrR-C1c.mjs} +3 -2
  11. package/dist/{branches-BujtceGr.mjs → branches-CH2UcCpX.mjs} +8 -6
  12. package/dist/cancel-CgLZcItQ.mjs +56 -0
  13. package/dist/{cancel-task-CT2xUMRg.mjs → cancel-task-DcYrFsM6.mjs} +9 -7
  14. package/dist/{card-CsXk8T6A.mjs → card-CQxvHeyP.mjs} +34 -15
  15. package/dist/card-ZCGU2JEh.mjs +20 -0
  16. package/dist/cards-C4NIaERo.mjs +37 -0
  17. package/dist/cli.mjs +33 -14
  18. package/dist/collection-B3sPXRLs.mjs +163 -0
  19. package/dist/collection-D_uFLIAS.mjs +19 -0
  20. package/dist/create-BUCLNqiN.mjs +48 -0
  21. package/dist/create-CB0Yp__0.mjs +66 -0
  22. package/dist/create-CNvd5T8h.mjs +48 -0
  23. package/dist/create-Cbh1cGj9.mjs +48 -0
  24. package/dist/create-CzfNOhOF.mjs +48 -0
  25. package/dist/create-DU0ZhnZu.mjs +44 -0
  26. package/dist/create-Dh0p-c2Y.mjs +44 -0
  27. package/dist/create-DvrVZ2hS.mjs +125 -0
  28. package/dist/create-QgN369N5.mjs +50 -0
  29. package/dist/{create-B8ektf-R.mjs → create-bqc_rmix.mjs} +8 -6
  30. package/dist/{create-branch-goZBTNnr.mjs → create-branch-BJFH9Hda.mjs} +9 -7
  31. package/dist/credentials-DTP1xuKz.mjs +85 -0
  32. package/dist/{current-task-DBjRNCFq.mjs → current-task-z_TiJ0kt.mjs} +9 -7
  33. package/dist/dashboard-CnMD04PQ.mjs +163 -0
  34. package/dist/dashboard-G1-dGLUR.mjs +20 -0
  35. package/dist/database-DQkUxTLd.mjs +17 -0
  36. package/dist/database-vvig8k4x.mjs +51 -0
  37. package/dist/db-CBaEfumR.mjs +22 -0
  38. package/dist/{delete-8vGU35r3.mjs → delete-CVYII8mq.mjs} +7 -5
  39. package/dist/{delete-B27KLF5X.mjs → delete-DeZQ1r9w.mjs} +7 -5
  40. package/dist/{delete-runtime-Byr60cR3.mjs → delete-runtime-BMzvfj_B.mjs} +4 -4
  41. package/dist/{delete-table-BNaJ_gA4.mjs → delete-table-ZiR9-ndv.mjs} +7 -5
  42. package/dist/deprovision-BhD3J-Am.mjs +61 -0
  43. package/dist/{dirty-aNUuph4I.mjs → dirty-D9agt7Os.mjs} +8 -6
  44. package/dist/docker-CHpV8PRz.mjs +612 -0
  45. package/dist/eid-B5wawMmO.mjs +13 -0
  46. package/dist/{export-QDkuuzSE.mjs → export-Bfk7JAlR.mjs} +30 -23
  47. package/dist/field-B3gvaqpK.mjs +278 -0
  48. package/dist/field-BDJ1pEgr.mjs +18 -0
  49. package/dist/fields-7ByLsxLg.mjs +38 -0
  50. package/dist/flag-pair-DtR1AiBQ.mjs +17 -0
  51. package/dist/get-BE6Izpus.mjs +36 -0
  52. package/dist/get-C3CcAJGg.mjs +49 -0
  53. package/dist/{get-DI_IJvgk.mjs → get-CQGeF-eP.mjs} +6 -4
  54. package/dist/get-D2m4jhwT.mjs +53 -0
  55. package/dist/{get-BGBIzMKY.mjs → get-DKy3DAJX.mjs} +6 -4
  56. package/dist/{get-COXHplHP.mjs → get-DUSR5i99.mjs} +7 -5
  57. package/dist/get-DikegGzi.mjs +36 -0
  58. package/dist/get-StkjKuh0.mjs +40 -0
  59. package/dist/get-bYc7eGYe.mjs +36 -0
  60. package/dist/{get-Cl8-IauC.mjs → get-cuHp9-6U.mjs} +7 -4
  61. package/dist/{get-i6LWOByV.mjs → get-gOT_RarI.mjs} +6 -4
  62. package/dist/get-run-D59Yqaoh.mjs +36 -0
  63. package/dist/get-tISo-cmg.mjs +41 -0
  64. package/dist/git-sync-BiTWfLgY.mjs +28 -0
  65. package/dist/{has-remote-changes-hjKoQuRy.mjs → has-remote-changes-B1TciDVD.mjs} +8 -6
  66. package/dist/{import-HJsSKRYx.mjs → import-DnnmmJbp.mjs} +11 -9
  67. package/dist/{input-Dojr-RTw.mjs → input-ikCiip6x.mjs} +2 -1
  68. package/dist/is-dirty-DClGFOGV.mjs +10 -0
  69. package/dist/{is-dirty-1Qy7hiHB.mjs → is-dirty-DlfX7e39.mjs} +5 -4
  70. package/dist/items-DQFQSpjF.mjs +77 -0
  71. package/dist/{key-DBxPSFwi.mjs → key-NDEARu2L.mjs} +1 -1
  72. package/dist/{license-MoWse3ZI.mjs → license-DBh13sc8.mjs} +3 -3
  73. package/dist/list-4kYCGv01.mjs +32 -0
  74. package/dist/list-9AOWhxqp.mjs +61 -0
  75. package/dist/{list-Bk6RsbJl.mjs → list-BwjqQ6pp.mjs} +5 -3
  76. package/dist/{list-C_PRdL5e.mjs → list-CP5RNjO6.mjs} +7 -5
  77. package/dist/{list-C8tdLOH5.mjs → list-Cy0VhXQs.mjs} +5 -3
  78. package/dist/list-D067ZSE5.mjs +47 -0
  79. package/dist/list-DAZP-IM5.mjs +32 -0
  80. package/dist/list-DJN-OvTZ.mjs +52 -0
  81. package/dist/list-DQj-QJAs.mjs +40 -0
  82. package/dist/list-Di529OJD.mjs +55 -0
  83. package/dist/{list-C4Ajrw8f.mjs → list-DlKzgnqo.mjs} +6 -3
  84. package/dist/list-GFfR9SuT.mjs +32 -0
  85. package/dist/{list-CWt3fqrZ.mjs → list-iFVEdi2J.mjs} +5 -3
  86. package/dist/{login-C9WTwNn6.mjs → login-DxgkosGx.mjs} +30 -9
  87. package/dist/{logout-oLszGCOg.mjs → logout-BlVwqBog.mjs} +7 -6
  88. package/dist/logs-CudNEkT4.mjs +58 -0
  89. package/dist/{manifest-CAdjQYH8.mjs → manifest-Dv5B9Blc.mjs} +3 -7
  90. package/dist/measure-BEQfnLdN.mjs +67 -0
  91. package/dist/measure-C7SbdYQk.mjs +19 -0
  92. package/dist/metadata-B2Td415K.mjs +38 -0
  93. package/dist/metadata-BTJAFVvZ.mjs +37 -0
  94. package/dist/{package-BGfw4ZWJ.mjs → package-DV6Asqim.mjs} +7 -1
  95. package/dist/paginate-CTSfuYiF.mjs +49 -0
  96. package/dist/parse-id-B38zTlYs.mjs +12 -0
  97. package/dist/parse-ref-DGvh4aDn.mjs +17 -0
  98. package/dist/parse-schemas-Ds-cVE-O.mjs +12 -0
  99. package/dist/{poll-ILanYysl.mjs → poll-Bh6oAifO.mjs} +2 -1
  100. package/dist/{poll-task-DbpsiQhl.mjs → poll-task-vPwV31Fs.mjs} +8 -7
  101. package/dist/predicates-DiIiS3k7.mjs +153 -0
  102. package/dist/preflight-DxJb-hUV.mjs +91 -0
  103. package/dist/{prompt-DpT8yAVy.mjs → prompt-Bf3DQ-qE.mjs} +1 -1
  104. package/dist/provision-B-I0zuDe.mjs +77 -0
  105. package/dist/ps-BmYQYC7t.mjs +10 -0
  106. package/dist/ps-CaiOFCv2.mjs +78 -0
  107. package/dist/query-BtF1yWZZ.mjs +90 -0
  108. package/dist/{query-PihYi-UZ.mjs → query-jmfqaXRP.mjs} +38 -13
  109. package/dist/remove-C2iv0g03.mjs +98 -0
  110. package/dist/remove-collection-DhZghaZy.mjs +38 -0
  111. package/dist/{remove-B2hVYn1v.mjs → remove-xskleeru.mjs} +6 -5
  112. package/dist/render-DXv-D6fU.mjs +182 -0
  113. package/dist/rescan-values-DW6u90ep.mjs +43 -0
  114. package/dist/revision-message-flag-CWQbKhdl.mjs +11 -0
  115. package/dist/{run-C2so6Qp6.mjs → run-DxVzhcF3.mjs} +27 -36
  116. package/dist/runs-BOHk1XnM.mjs +54 -0
  117. package/dist/{runtime-C9CEZhcn.mjs → runtime-cwBS8wwK.mjs} +428 -442
  118. package/dist/schema-tables-CcFbY_jN.mjs +45 -0
  119. package/dist/schemas-DZmv_V62.mjs +47 -0
  120. package/dist/{search-CopOytXY.mjs → search-CYMuc7Fg.mjs} +6 -19
  121. package/dist/segment-BMrUBz94.mjs +70 -0
  122. package/dist/segment-Df4pfjco.mjs +19 -0
  123. package/dist/{set-BcF7M1GQ.mjs → set-B_rrVwU4.mjs} +6 -4
  124. package/dist/{set-CbibegpA.mjs → set-CbGfQ7Ye.mjs} +8 -6
  125. package/dist/{setting-U3NtBMFo.mjs → setting-DqZY9NXP.mjs} +3 -3
  126. package/dist/setup-DxmcAorA.mjs +71 -0
  127. package/dist/snippet-CwSHjQyn.mjs +19 -0
  128. package/dist/snippet-Dw0Sjzkr.mjs +64 -0
  129. package/dist/start-Cn0epTks.mjs +380 -0
  130. package/dist/{stash-DOBbYozC.mjs → stash-BFZIl9F4.mjs} +9 -7
  131. package/dist/{status-Buf1ZbNR.mjs → status-BjCeJNLp.mjs} +10 -8
  132. package/dist/{status-CUcs8XBH.mjs → status-FDIDmqvM.mjs} +4 -2
  133. package/dist/{status-D1F5XHae.mjs → status-UALK3OJl.mjs} +4 -2
  134. package/dist/stop-DUwrDWw8.mjs +81 -0
  135. package/dist/summary-CS4UGiFJ.mjs +41 -0
  136. package/dist/sync-schema-IrHdJxmX.mjs +43 -0
  137. package/dist/{table-Cfk7oSvw.mjs → table-B-PYcgGb.mjs} +22 -9
  138. package/dist/table-Cdr5bKp1.mjs +19 -0
  139. package/dist/transform-CeZusR_w.mjs +24 -0
  140. package/dist/{transform-B5uRpg1G.mjs → transform-IEX4Mx3X.mjs} +56 -2
  141. package/dist/transform-job-BOn9-CGa.mjs +19 -0
  142. package/dist/{transform-job-C7QXWTVE.mjs → transform-job-Csr86muI.mjs} +7 -0
  143. package/dist/translate-B__zbDKm.mjs +111 -0
  144. package/dist/tree-Mh0uQ_Wy.mjs +32 -0
  145. package/dist/update-1Di9hbPo.mjs +56 -0
  146. package/dist/update-B5_pp6Jj.mjs +56 -0
  147. package/dist/update-B9DBMo30.mjs +52 -0
  148. package/dist/update-BfBsM_y1.mjs +56 -0
  149. package/dist/update-Bw0WZix_.mjs +73 -0
  150. package/dist/update-Cp1789qq.mjs +52 -0
  151. package/dist/update-D2VI_5cy.mjs +57 -0
  152. package/dist/update-D8GwQTcL.mjs +59 -0
  153. package/dist/{update-CL8tRbxr.mjs → update-Masp5WeT.mjs} +9 -7
  154. package/dist/update-dashcard-CNiQw1MD.mjs +71 -0
  155. package/dist/update-j9vgemKR.mjs +51 -0
  156. package/dist/url-GFM76VIK.mjs +54 -0
  157. package/dist/uuid-Uif0lNk8.mjs +47 -0
  158. package/dist/validate-DCYx6jdL.mjs +1496 -0
  159. package/dist/validate-query-B07oGG4K.mjs +37 -0
  160. package/dist/values-DrwNHUAI.mjs +36 -0
  161. package/dist/{wait-Bugr9eXD.mjs → wait-BoKk8CJy.mjs} +10 -8
  162. package/dist/wait-DO7tS7NI.mjs +19 -0
  163. package/dist/wait-flags-CjX2sEGm.mjs +35 -0
  164. package/dist/workspace-CyEX40D-.mjs +24 -0
  165. package/dist/workspace-DVuqKJGG.mjs +72 -0
  166. package/dist/workspace-credentials-B6BL-X0d.mjs +139 -0
  167. package/package.json +7 -1
  168. package/dist/auth-BF7IjZIH.mjs +0 -18
  169. package/dist/card-_Ta7zdYe.mjs +0 -19
  170. package/dist/create-CI2Cunq5.mjs +0 -38
  171. package/dist/create-DdbU3TLX.mjs +0 -42
  172. package/dist/database-PA9Goi25.mjs +0 -33
  173. package/dist/db-DMghzgb6.mjs +0 -17
  174. package/dist/field-C8IVs6rp.mjs +0 -76
  175. package/dist/field-DaYo_90x.mjs +0 -13
  176. package/dist/get-Cwpj7lDe.mjs +0 -35
  177. package/dist/get-Dh_acl8q.mjs +0 -34
  178. package/dist/is-dirty-DpKn9HJp.mjs +0 -8
  179. package/dist/list-CBSBHtK-.mjs +0 -38
  180. package/dist/parse-id-BhmmfyCP.mjs +0 -14
  181. package/dist/sync-BPyGXfUk.mjs +0 -26
  182. package/dist/table-D7nJt7JO.mjs +0 -16
  183. package/dist/transform-UbyewMxY.mjs +0 -21
  184. package/dist/transform-job-CrYkr-Ma.mjs +0 -19
  185. package/dist/update-DU2oU2j-.mjs +0 -49
  186. /package/dist/{body-flags-BUA9XV1u.mjs → body-flags-BK7J6Daz.mjs} +0 -0
  187. /package/dist/{setting-26ckqHAP.mjs → setting-CTaAeMci.mjs} +0 -0
@@ -0,0 +1,54 @@
1
+ import { renderItem } from "./render-DXv-D6fU.mjs";
2
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
3
+ import { parseId } from "./parse-id-B38zTlYs.mjs";
4
+ import { REMOTE_SYNC_PATHS } from "./poll-task-vPwV31Fs.mjs";
5
+ import { z } from "zod";
6
+
7
+ //#region src/commands/git-sync/add-collection.ts
8
+ const SyncSettingsUpdateResult = z.object({
9
+ success: z.boolean(),
10
+ task_id: z.number().int().positive().optional()
11
+ });
12
+ const syncSettingsUpdateView = {
13
+ compactPick: SyncSettingsUpdateResult,
14
+ tableColumns: [{
15
+ key: "success",
16
+ label: "Success"
17
+ }, {
18
+ key: "task_id",
19
+ label: "Task ID"
20
+ }]
21
+ };
22
+ async function setCollectionRemoteSynced(client, collectionId, synced) {
23
+ return await client.requestParsed(SyncSettingsUpdateResult, REMOTE_SYNC_PATHS.settings, {
24
+ method: "PUT",
25
+ body: { collections: { [collectionId]: synced } }
26
+ });
27
+ }
28
+ var add_collection_default = defineMetabaseCommand({
29
+ meta: {
30
+ name: "add-collection",
31
+ description: "Mark a collection as git-synced; cascades to descendants by location prefix"
32
+ },
33
+ args: {
34
+ ...outputFlags,
35
+ ...profileFlag,
36
+ ...connectionFlags,
37
+ id: {
38
+ type: "positional",
39
+ description: "Collection id (positive integer)",
40
+ required: true
41
+ }
42
+ },
43
+ outputSchema: SyncSettingsUpdateResult,
44
+ examples: ["metabase git-sync add-collection 12", "metabase git-sync add-collection 12 --json --profile prod"],
45
+ async run({ args, ctx, getClient }) {
46
+ const collectionId = parseId(args.id, "id");
47
+ const client = await getClient();
48
+ const result = await setCollectionRemoteSynced(client, collectionId, true);
49
+ renderItem(result, syncSettingsUpdateView, ctx);
50
+ }
51
+ });
52
+
53
+ //#endregion
54
+ export { SyncSettingsUpdateResult, add_collection_default, setCollectionRemoteSynced, syncSettingsUpdateView };
@@ -0,0 +1,11 @@
1
+ import "./package-DV6Asqim.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./runtime-cwBS8wwK.mjs";
6
+ import "./parse-id-B38zTlYs.mjs";
7
+ import "./poll-task-vPwV31Fs.mjs";
8
+ import "./poll-Bh6oAifO.mjs";
9
+ import { SyncSettingsUpdateResult, add_collection_default, setCollectionRemoteSynced, syncSettingsUpdateView } from "./add-collection-DwxQDXzL.mjs";
10
+
11
+ export { add_collection_default as default };
@@ -0,0 +1,13 @@
1
+ import { defineCommand } from "citty";
2
+
3
+ //#region src/commands/api-key/index.ts
4
+ var api_key_default = defineCommand({
5
+ meta: {
6
+ name: "api-key",
7
+ description: "Manage Metabase API keys"
8
+ },
9
+ subCommands: { create: () => import("./create-DvrVZ2hS.mjs").then((mod) => mod.default) }
10
+ });
11
+
12
+ //#endregion
13
+ export { api_key_default as default };
@@ -1,8 +1,11 @@
1
- import "./package-BGfw4ZWJ.mjs";
1
+ import "./package-DV6Asqim.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag, renderItem } from "./runtime-C9CEZhcn.mjs";
4
- import { Card, cardView } from "./card-CsXk8T6A.mjs";
5
- import { parseId } from "./parse-id-BhmmfyCP.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
6
+ import { parseId } from "./parse-id-B38zTlYs.mjs";
7
+ import "./field-B3gvaqpK.mjs";
8
+ import { Card, cardView } from "./card-CQxvHeyP.mjs";
6
9
 
7
10
  //#region src/commands/card/archive.ts
8
11
  var archive_default = defineMetabaseCommand({
@@ -0,0 +1,44 @@
1
+ import "./package-DV6Asqim.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
6
+ import { parseId } from "./parse-id-B38zTlYs.mjs";
7
+ import { revisionMessageFlag } from "./revision-message-flag-CWQbKhdl.mjs";
8
+ import { Segment, segmentView } from "./segment-BMrUBz94.mjs";
9
+
10
+ //#region src/commands/segment/archive.ts
11
+ var archive_default = defineMetabaseCommand({
12
+ meta: {
13
+ name: "archive",
14
+ description: "Archive (soft-delete) a segment by id"
15
+ },
16
+ args: {
17
+ ...outputFlags,
18
+ ...profileFlag,
19
+ ...connectionFlags,
20
+ ...revisionMessageFlag,
21
+ id: {
22
+ type: "positional",
23
+ description: "Segment id",
24
+ required: true
25
+ }
26
+ },
27
+ outputSchema: Segment,
28
+ examples: ["metabase segment archive 1", "metabase segment archive 1 --revision-message \"deprecated\""],
29
+ async run({ args, ctx, getClient }) {
30
+ const id = parseId(args.id);
31
+ const client = await getClient();
32
+ const updated = await client.requestParsed(Segment, `/api/segment/${id}`, {
33
+ method: "PUT",
34
+ body: {
35
+ archived: true,
36
+ revision_message: args.revisionMessage
37
+ }
38
+ });
39
+ renderItem(updated, segmentView, ctx);
40
+ }
41
+ });
42
+
43
+ //#endregion
44
+ export { archive_default as default };
@@ -0,0 +1,44 @@
1
+ import "./package-DV6Asqim.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
6
+ import { parseId } from "./parse-id-B38zTlYs.mjs";
7
+ import { Measure, measureView } from "./measure-BEQfnLdN.mjs";
8
+ import { revisionMessageFlag } from "./revision-message-flag-CWQbKhdl.mjs";
9
+
10
+ //#region src/commands/measure/archive.ts
11
+ var archive_default = defineMetabaseCommand({
12
+ meta: {
13
+ name: "archive",
14
+ description: "Archive (soft-delete) a measure by id"
15
+ },
16
+ args: {
17
+ ...outputFlags,
18
+ ...profileFlag,
19
+ ...connectionFlags,
20
+ ...revisionMessageFlag,
21
+ id: {
22
+ type: "positional",
23
+ description: "Measure id",
24
+ required: true
25
+ }
26
+ },
27
+ outputSchema: Measure,
28
+ examples: ["metabase measure archive 1", "metabase measure archive 1 --revision-message \"deprecated\""],
29
+ async run({ args, ctx, getClient }) {
30
+ const id = parseId(args.id);
31
+ const client = await getClient();
32
+ const updated = await client.requestParsed(Measure, `/api/measure/${id}`, {
33
+ method: "PUT",
34
+ body: {
35
+ archived: true,
36
+ revision_message: args.revisionMessage
37
+ }
38
+ });
39
+ renderItem(updated, measureView, ctx);
40
+ }
41
+ });
42
+
43
+ //#endregion
44
+ export { archive_default as default };
@@ -0,0 +1,39 @@
1
+ import "./package-DV6Asqim.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
6
+ import { parseId } from "./parse-id-B38zTlYs.mjs";
7
+ import { Snippet, snippetView } from "./snippet-Dw0Sjzkr.mjs";
8
+
9
+ //#region src/commands/snippet/archive.ts
10
+ var archive_default = defineMetabaseCommand({
11
+ meta: {
12
+ name: "archive",
13
+ description: "Archive (soft-delete) a native query snippet by id"
14
+ },
15
+ args: {
16
+ ...outputFlags,
17
+ ...profileFlag,
18
+ ...connectionFlags,
19
+ id: {
20
+ type: "positional",
21
+ description: "Snippet id",
22
+ required: true
23
+ }
24
+ },
25
+ outputSchema: Snippet,
26
+ examples: ["metabase snippet archive 1", "metabase snippet archive 1 --json"],
27
+ async run({ args, ctx, getClient }) {
28
+ const id = parseId(args.id);
29
+ const client = await getClient();
30
+ const updated = await client.requestParsed(Snippet, `/api/native-query-snippet/${id}`, {
31
+ method: "PUT",
32
+ body: { archived: true }
33
+ });
34
+ renderItem(updated, snippetView, ctx);
35
+ }
36
+ });
37
+
38
+ //#endregion
39
+ export { archive_default as default };
@@ -0,0 +1,19 @@
1
+ import { defineCommand } from "citty";
2
+
3
+ //#region src/commands/auth/index.ts
4
+ var auth_default = defineCommand({
5
+ meta: {
6
+ name: "auth",
7
+ description: "Authenticate against a Metabase instance"
8
+ },
9
+ default: "login",
10
+ subCommands: {
11
+ login: () => import("./login-DxgkosGx.mjs").then((m) => m.default),
12
+ status: () => import("./status-FDIDmqvM.mjs").then((m) => m.default),
13
+ list: () => import("./list-Di529OJD.mjs").then((m) => m.default),
14
+ logout: () => import("./logout-BlVwqBog.mjs").then((m) => m.default)
15
+ }
16
+ });
17
+
18
+ //#endregion
19
+ export { auth_default as default };
@@ -1,5 +1,6 @@
1
- import { ConfigError, parseJson } from "./runtime-C9CEZhcn.mjs";
2
- import { readInput } from "./input-Dojr-RTw.mjs";
1
+ import { ConfigError } from "./predicates-DiIiS3k7.mjs";
2
+ import { readInput } from "./input-ikCiip6x.mjs";
3
+ import { parseJson } from "./runtime-cwBS8wwK.mjs";
3
4
 
4
5
  //#region src/runtime/body.ts
5
6
  async function readBody(sources, schema) {
@@ -1,11 +1,13 @@
1
- import "./package-BGfw4ZWJ.mjs";
1
+ import "./package-DV6Asqim.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, renderList, wrapList } from "./runtime-C9CEZhcn.mjs";
4
- import { REMOTE_SYNC_PATHS } from "./poll-task-DbpsiQhl.mjs";
5
- import "./poll-ILanYysl.mjs";
3
+ import { renderList } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-cwBS8wwK.mjs";
6
+ import { REMOTE_SYNC_PATHS } from "./poll-task-vPwV31Fs.mjs";
7
+ import "./poll-Bh6oAifO.mjs";
6
8
  import { z } from "zod";
7
9
 
8
- //#region src/commands/sync/branches.ts
10
+ //#region src/commands/git-sync/branches.ts
9
11
  const SyncBranchesApiResponse = z.object({ items: z.array(z.string()) });
10
12
  const BranchRow = z.object({ name: z.string() });
11
13
  const branchView = {
@@ -27,7 +29,7 @@ var branches_default = defineMetabaseCommand({
27
29
  ...connectionFlags
28
30
  },
29
31
  outputSchema: SyncBranchListEnvelope,
30
- examples: ["metabase sync branches", "metabase sync branches --json"],
32
+ examples: ["metabase git-sync branches", "metabase git-sync branches --json"],
31
33
  async run({ ctx, getClient }) {
32
34
  const client = await getClient();
33
35
  const response = await client.requestParsed(SyncBranchesApiResponse, REMOTE_SYNC_PATHS.branches);
@@ -0,0 +1,56 @@
1
+ import "./package-DV6Asqim.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
6
+ import { parseId } from "./parse-id-B38zTlYs.mjs";
7
+ import { z } from "zod";
8
+
9
+ //#region src/commands/transform/cancel.ts
10
+ const TransformCancelResult = z.object({
11
+ canceled: z.boolean(),
12
+ id: z.number().int()
13
+ });
14
+ const transformCancelView = {
15
+ compactPick: TransformCancelResult,
16
+ tableColumns: [{
17
+ key: "id",
18
+ label: "Transform"
19
+ }, {
20
+ key: "canceled",
21
+ label: "Canceled"
22
+ }]
23
+ };
24
+ var cancel_default = defineMetabaseCommand({
25
+ meta: {
26
+ name: "cancel",
27
+ description: "Cancel the current run for a transform"
28
+ },
29
+ args: {
30
+ ...outputFlags,
31
+ ...profileFlag,
32
+ ...connectionFlags,
33
+ id: {
34
+ type: "positional",
35
+ description: "Transform id",
36
+ required: true
37
+ }
38
+ },
39
+ outputSchema: TransformCancelResult,
40
+ examples: ["metabase transform cancel 1", "metabase transform cancel 1 --json"],
41
+ async run({ args, ctx, getClient }) {
42
+ const id = parseId(args.id);
43
+ const client = await getClient();
44
+ await client.requestRaw(`/api/transform/${id}/cancel`, {
45
+ method: "POST",
46
+ expectContentType: "binary"
47
+ });
48
+ renderItem({
49
+ canceled: true,
50
+ id
51
+ }, transformCancelView, ctx);
52
+ }
53
+ });
54
+
55
+ //#endregion
56
+ export { cancel_default as default };
@@ -1,14 +1,16 @@
1
- import "./package-BGfw4ZWJ.mjs";
1
+ import "./package-DV6Asqim.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag, renderItem } from "./runtime-C9CEZhcn.mjs";
4
- import { REMOTE_SYNC_PATHS, SyncTask, syncTaskView } from "./poll-task-DbpsiQhl.mjs";
5
- import "./poll-ILanYysl.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
6
+ import { REMOTE_SYNC_PATHS, SyncTask, syncTaskView } from "./poll-task-vPwV31Fs.mjs";
7
+ import "./poll-Bh6oAifO.mjs";
6
8
 
7
- //#region src/commands/sync/cancel-task.ts
9
+ //#region src/commands/git-sync/cancel-task.ts
8
10
  var cancel_task_default = defineMetabaseCommand({
9
11
  meta: {
10
12
  name: "cancel-task",
11
- description: "Cancel the running sync task"
13
+ description: "Cancel the running git-sync task"
12
14
  },
13
15
  args: {
14
16
  ...outputFlags,
@@ -16,7 +18,7 @@ var cancel_task_default = defineMetabaseCommand({
16
18
  ...connectionFlags
17
19
  },
18
20
  outputSchema: SyncTask,
19
- examples: ["metabase sync cancel-task", "metabase sync cancel-task --json"],
21
+ examples: ["metabase git-sync cancel-task", "metabase git-sync cancel-task --json"],
20
22
  async run({ ctx, getClient }) {
21
23
  const client = await getClient();
22
24
  const task = await client.requestParsed(SyncTask, REMOTE_SYNC_PATHS.cancelTask, { method: "POST" });
@@ -1,3 +1,4 @@
1
+ import { FieldBaseType, FieldSemanticType } from "./field-B3gvaqpK.mjs";
1
2
  import { z } from "zod";
2
3
 
3
4
  //#region src/domain/card.ts
@@ -7,6 +8,7 @@ const CardType = z.enum([
7
8
  "metric"
8
9
  ]);
9
10
  const CardQueryType = z.enum(["native", "query"]);
11
+ const CardDatasetQuery = z.object({}).loose().refine((value) => "lib/type" in value || "type" in value, { message: "dataset_query must include \"lib/type\" (MBQL 5) or \"type\" (legacy MBQL/native); empty `{}` is rejected" });
10
12
  const Card = z.object({
11
13
  id: z.number().int(),
12
14
  name: z.string(),
@@ -70,37 +72,54 @@ const cardView = {
70
72
  const CardCreateInput = z.object({
71
73
  name: z.string().min(1),
72
74
  type: CardType.optional(),
73
- dataset_query: z.unknown(),
75
+ dataset_query: CardDatasetQuery,
74
76
  display: z.string().min(1),
75
- visualization_settings: z.unknown(),
76
- description: z.string().nullable().optional(),
77
+ visualization_settings: z.record(z.string(), z.unknown()),
78
+ description: z.string().min(1).nullable().optional(),
77
79
  collection_id: z.number().int().positive().nullable().optional(),
78
80
  collection_position: z.number().int().positive().nullable().optional(),
79
81
  dashboard_id: z.number().int().positive().nullable().optional(),
80
82
  parameters: z.array(z.unknown()).optional(),
81
83
  parameter_mappings: z.array(z.unknown()).optional()
82
84
  }).loose();
85
+ const CardUpdateInput = z.object({
86
+ name: z.string().min(1).optional(),
87
+ type: CardType.optional(),
88
+ dataset_query: CardDatasetQuery.optional(),
89
+ display: z.string().min(1).optional(),
90
+ visualization_settings: z.record(z.string(), z.unknown()).optional(),
91
+ description: z.string().nullable().optional(),
92
+ archived: z.boolean().optional(),
93
+ enable_embedding: z.boolean().optional(),
94
+ embedding_type: z.string().optional(),
95
+ embedding_params: z.unknown().optional(),
96
+ collection_id: z.number().int().positive().nullable().optional(),
97
+ collection_position: z.number().int().positive().nullable().optional(),
98
+ collection_preview: z.boolean().optional(),
99
+ cache_ttl: z.number().int().positive().nullable().optional(),
100
+ dashboard_id: z.number().int().positive().nullable().optional(),
101
+ dashboard_tab_id: z.number().int().positive().nullable().optional(),
102
+ parameters: z.array(z.unknown()).optional(),
103
+ parameter_mappings: z.array(z.unknown()).optional(),
104
+ result_metadata: z.array(z.unknown()).nullable().optional()
105
+ }).loose();
83
106
  const QueryColumn = z.object({
84
107
  name: z.string(),
85
108
  display_name: z.string().optional(),
86
- base_type: z.string().optional(),
87
- semantic_type: z.string().nullable().optional()
109
+ base_type: FieldBaseType.optional(),
110
+ semantic_type: FieldSemanticType.nullable().optional()
88
111
  }).loose();
89
- const CardQueryDataCompleted = z.object({
112
+ const CardQueryData = z.object({
90
113
  rows: z.array(z.unknown()),
91
114
  cols: z.array(QueryColumn)
92
115
  }).loose();
93
- const CardQueryCompleted = z.object({
94
- status: z.literal("completed"),
95
- row_count: z.number().int().nonnegative(),
96
- data: CardQueryDataCompleted
97
- }).loose();
98
- const CardQueryFailed = z.object({
99
- status: z.literal("failed"),
116
+ const CardQueryResult = z.object({
117
+ status: z.string(),
118
+ row_count: z.number().int().nonnegative().optional(),
119
+ data: CardQueryData.optional(),
100
120
  error: z.string().nullable().optional(),
101
121
  error_type: z.string().nullable().optional()
102
122
  }).loose();
103
- const CardQueryResult = z.discriminatedUnion("status", [CardQueryCompleted, CardQueryFailed]);
104
123
  const cardQueryView = {
105
124
  compactPick: CardQueryResult,
106
125
  tableColumns: [{
@@ -110,4 +129,4 @@ const cardQueryView = {
110
129
  };
111
130
 
112
131
  //#endregion
113
- export { Card, CardCompact, CardCreateInput, CardQueryResult, cardQueryView, cardView };
132
+ export { Card, CardCompact, CardCreateInput, CardQueryResult, CardUpdateInput, cardQueryView, cardView };
@@ -0,0 +1,20 @@
1
+ import { defineCommand } from "citty";
2
+
3
+ //#region src/commands/card/index.ts
4
+ var card_default = defineCommand({
5
+ meta: {
6
+ name: "card",
7
+ description: "Manage Metabase cards (questions, models, metrics)"
8
+ },
9
+ subCommands: {
10
+ list: () => import("./list-DlKzgnqo.mjs").then((mod) => mod.default),
11
+ get: () => import("./get-cuHp9-6U.mjs").then((mod) => mod.default),
12
+ query: () => import("./query-jmfqaXRP.mjs").then((mod) => mod.default),
13
+ create: () => import("./create-QgN369N5.mjs").then((mod) => mod.default),
14
+ update: () => import("./update-D8GwQTcL.mjs").then((mod) => mod.default),
15
+ archive: () => import("./archive-C1mF-9Kj.mjs").then((mod) => mod.default)
16
+ }
17
+ });
18
+
19
+ //#endregion
20
+ export { card_default as default };
@@ -0,0 +1,37 @@
1
+ import "./package-DV6Asqim.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderList } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-cwBS8wwK.mjs";
6
+ import { parseId } from "./parse-id-B38zTlYs.mjs";
7
+ import { DashboardDetail, DashcardCompact, dashcardView } from "./dashboard-CnMD04PQ.mjs";
8
+
9
+ //#region src/commands/dashboard/cards.ts
10
+ const DashcardListEnvelope = listEnvelopeSchema(DashcardCompact);
11
+ var cards_default = defineMetabaseCommand({
12
+ meta: {
13
+ name: "cards",
14
+ description: "List dashcards on a dashboard"
15
+ },
16
+ args: {
17
+ ...outputFlags,
18
+ ...profileFlag,
19
+ ...connectionFlags,
20
+ id: {
21
+ type: "positional",
22
+ description: "Dashboard id",
23
+ required: true
24
+ }
25
+ },
26
+ outputSchema: DashcardListEnvelope,
27
+ examples: ["metabase dashboard cards 1", "metabase dashboard cards 1 --json"],
28
+ async run({ args, ctx, getClient }) {
29
+ const id = parseId(args.id);
30
+ const client = await getClient();
31
+ const dashboard = await client.requestParsed(DashboardDetail, `/api/dashboard/${id}`);
32
+ renderList(wrapList(dashboard.dashcards), dashcardView, ctx);
33
+ }
34
+ });
35
+
36
+ //#endregion
37
+ export { cards_default as default };
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { package_default } from "./package-BGfw4ZWJ.mjs";
2
+ import { package_default } from "./package-DV6Asqim.mjs";
3
3
  import { getMetabaseAugment } from "./command-augment-D9pI9Vbh.mjs";
4
4
  import { defineCommand, renderUsage, runMain } from "citty";
5
5
 
@@ -11,18 +11,29 @@ const main = defineCommand({
11
11
  description: package_default.description
12
12
  },
13
13
  subCommands: {
14
- auth: () => import("./auth-BF7IjZIH.mjs").then((mod) => mod.default),
15
- license: () => import("./license-MoWse3ZI.mjs").then((mod) => mod.default),
16
- db: () => import("./db-DMghzgb6.mjs").then((mod) => mod.default),
17
- table: () => import("./table-D7nJt7JO.mjs").then((mod) => mod.default),
18
- field: () => import("./field-DaYo_90x.mjs").then((mod) => mod.default),
19
- card: () => import("./card-_Ta7zdYe.mjs").then((mod) => mod.default),
20
- transform: () => import("./transform-UbyewMxY.mjs").then((mod) => mod.default),
21
- "transform-job": () => import("./transform-job-CrYkr-Ma.mjs").then((mod) => mod.default),
22
- setting: () => import("./setting-U3NtBMFo.mjs").then((mod) => mod.default),
23
- search: () => import("./search-CopOytXY.mjs").then((mod) => mod.default),
24
- sync: () => import("./sync-BPyGXfUk.mjs").then((mod) => mod.default),
25
- __manifest: () => import("./manifest-CAdjQYH8.mjs").then((mod) => mod.createManifestCommand(main))
14
+ auth: () => import("./auth-DfYkakP3.mjs").then((mod) => mod.default),
15
+ license: () => import("./license-DBh13sc8.mjs").then((mod) => mod.default),
16
+ db: () => import("./db-CBaEfumR.mjs").then((mod) => mod.default),
17
+ table: () => import("./table-Cdr5bKp1.mjs").then((mod) => mod.default),
18
+ field: () => import("./field-BDJ1pEgr.mjs").then((mod) => mod.default),
19
+ card: () => import("./card-ZCGU2JEh.mjs").then((mod) => mod.default),
20
+ dashboard: () => import("./dashboard-G1-dGLUR.mjs").then((mod) => mod.default),
21
+ collection: () => import("./collection-D_uFLIAS.mjs").then((mod) => mod.default),
22
+ transform: () => import("./transform-CeZusR_w.mjs").then((mod) => mod.default),
23
+ "transform-job": () => import("./transform-job-BOn9-CGa.mjs").then((mod) => mod.default),
24
+ setting: () => import("./setting-DqZY9NXP.mjs").then((mod) => mod.default),
25
+ search: () => import("./search-CYMuc7Fg.mjs").then((mod) => mod.default),
26
+ "git-sync": () => import("./git-sync-BiTWfLgY.mjs").then((mod) => mod.default),
27
+ workspace: () => import("./workspace-CyEX40D-.mjs").then((mod) => mod.default),
28
+ setup: () => import("./setup-DxmcAorA.mjs").then((mod) => mod.default),
29
+ "api-key": () => import("./api-key-BktzvPb7.mjs").then((mod) => mod.default),
30
+ snippet: () => import("./snippet-CwSHjQyn.mjs").then((mod) => mod.default),
31
+ segment: () => import("./segment-Df4pfjco.mjs").then((mod) => mod.default),
32
+ measure: () => import("./measure-C7SbdYQk.mjs").then((mod) => mod.default),
33
+ eid: () => import("./eid-B5wawMmO.mjs").then((mod) => mod.default),
34
+ query: () => import("./query-BtF1yWZZ.mjs").then((mod) => mod.default),
35
+ uuid: () => import("./uuid-Uif0lNk8.mjs").then((mod) => mod.default),
36
+ __manifest: () => import("./manifest-Dv5B9Blc.mjs").then((mod) => mod.createManifestCommand(main))
26
37
  }
27
38
  });
28
39
  var main_default = main;
@@ -37,7 +48,7 @@ async function showUsage(cmd, parent) {
37
48
  const stripped = first === void 0 ? "" : first.replace(BREADCRUMB_SUFFIX, "$1");
38
49
  const body = [stripped, ...rest].join("\n");
39
50
  const examples = getMetabaseAugment(cmd)?.examples ?? [];
40
- process.stdout.write(body + renderExamples(examples) + "\n");
51
+ process.stdout.write(body + renderExamples(examples) + renderSchemaHint() + "\n");
41
52
  }
42
53
  function renderExamples(examples) {
43
54
  if (examples.length === 0) return "";
@@ -49,6 +60,14 @@ function renderExamples(examples) {
49
60
  for (const example of examples) lines.push(` ${example}`);
50
61
  return lines.join("\n");
51
62
  }
63
+ function renderSchemaHint() {
64
+ return [
65
+ "",
66
+ "SCHEMA",
67
+ "",
68
+ " metabase __manifest # machine-readable command tree (flags, output, examples)"
69
+ ].join("\n");
70
+ }
52
71
 
53
72
  //#endregion
54
73
  //#region src/cli.ts