@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
@@ -1,12 +1,14 @@
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 { parseId } from "./parse-id-BhmmfyCP.mjs";
5
- import { REMOTE_SYNC_PATHS, SyncTask, pollFlags, pollSyncTask, throwIfFailedTask } from "./poll-task-DbpsiQhl.mjs";
6
- import "./poll-ILanYysl.mjs";
3
+ import { renderItem, warn } 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 { REMOTE_SYNC_PATHS, SyncTask, pollFlags, pollSyncTask, throwIfFailedTask } from "./poll-task-vPwV31Fs.mjs";
8
+ import "./poll-Bh6oAifO.mjs";
7
9
  import { z } from "zod";
8
10
 
9
- //#region src/commands/sync/export.ts
11
+ //#region src/commands/git-sync/export.ts
10
12
  const SyncExportKickoff = z.object({
11
13
  message: z.string(),
12
14
  task_id: z.number().int().positive()
@@ -54,9 +56,9 @@ var export_default = defineMetabaseCommand({
54
56
  },
55
57
  outputSchema: SyncExportResult,
56
58
  examples: [
57
- "metabase sync export -m \"update dashboards\"",
58
- "metabase sync export --branch main --json",
59
- "metabase sync export --no-wait"
59
+ "metabase git-sync export -m \"update dashboards\"",
60
+ "metabase git-sync export --branch main --json",
61
+ "metabase git-sync export --no-wait"
60
62
  ],
61
63
  async run({ args, ctx, getClient }) {
62
64
  const timeoutMs = parseId(args.timeout, "timeout");
@@ -71,26 +73,31 @@ var export_default = defineMetabaseCommand({
71
73
  body
72
74
  });
73
75
  if (!args.wait) {
74
- const result$1 = {
76
+ const result = {
75
77
  message: kickoff.message,
76
78
  task_id: kickoff.task_id
77
79
  };
78
- renderItem(result$1, syncExportView, ctx);
79
- return;
80
+ renderItem(result, syncExportView, ctx);
81
+ } else {
82
+ const final = await pollSyncTask(client, {
83
+ timeoutMs,
84
+ intervalMs
85
+ });
86
+ const result = {
87
+ message: kickoff.message,
88
+ task_id: kickoff.task_id,
89
+ final
90
+ };
91
+ renderItem(result, syncExportView, ctx);
92
+ throwIfFailedTask(final, "export");
80
93
  }
81
- const final = await pollSyncTask(client, {
82
- timeoutMs,
83
- intervalMs
84
- });
85
- const result = {
86
- message: kickoff.message,
87
- task_id: kickoff.task_id,
88
- final
89
- };
90
- renderItem(result, syncExportView, ctx);
91
- throwIfFailedTask(final, "export");
94
+ emitRealignHint(ctx);
92
95
  }
93
96
  });
97
+ function emitRealignHint(ctx) {
98
+ if (ctx.format !== "text") return;
99
+ warn("\nNote: if exporting to a host-bound repo, realign the host working tree with:\n git -C <repo-path> restore --staged --worktree .");
100
+ }
94
101
 
95
102
  //#endregion
96
103
  export { export_default as default };
@@ -0,0 +1,278 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/domain/field.ts
4
+ const FieldVisibilityType = z.enum([
5
+ "details-only",
6
+ "hidden",
7
+ "normal",
8
+ "retired",
9
+ "sensitive"
10
+ ]);
11
+ const FieldValuesType = z.enum([
12
+ "list",
13
+ "search",
14
+ "none",
15
+ "auto-list"
16
+ ]);
17
+ const FieldBaseType = z.enum([
18
+ "type/*",
19
+ "type/field-values-unsupported",
20
+ "type/fingerprint-unsupported",
21
+ "type/Large",
22
+ "type/Number",
23
+ "type/Integer",
24
+ "type/BigInteger",
25
+ "type/Float",
26
+ "type/Decimal",
27
+ "type/Text",
28
+ "type/UUID",
29
+ "type/OracleCLOB",
30
+ "type/Temporal",
31
+ "type/HasDate",
32
+ "type/HasTime",
33
+ "type/Date",
34
+ "type/Time",
35
+ "type/TimeWithTZ",
36
+ "type/TimeWithLocalTZ",
37
+ "type/TimeWithZoneOffset",
38
+ "type/DateTime",
39
+ "type/DateTimeWithTZ",
40
+ "type/DateTimeWithLocalTZ",
41
+ "type/DateTimeWithZoneOffset",
42
+ "type/DateTimeWithZoneID",
43
+ "type/Instant",
44
+ "type/Interval",
45
+ "type/Boolean",
46
+ "type/DruidHyperUnique",
47
+ "type/SnowflakeVariant",
48
+ "type/TextLike",
49
+ "type/MongoBSONID",
50
+ "type/MongoBinData",
51
+ "type/MySQLEnum",
52
+ "type/PostgresEnum",
53
+ "type/PostgresBitString",
54
+ "type/IPAddress",
55
+ "type/Collection",
56
+ "type/Dictionary",
57
+ "type/Array",
58
+ "type/Structured",
59
+ "type/JSON",
60
+ "type/DruidJSON",
61
+ "type/XML"
62
+ ]);
63
+ const FieldSemanticType = z.enum([
64
+ "type/Quantity",
65
+ "type/Share",
66
+ "type/Percentage",
67
+ "type/Currency",
68
+ "type/Income",
69
+ "type/Discount",
70
+ "type/Price",
71
+ "type/GrossMargin",
72
+ "type/Cost",
73
+ "type/Score",
74
+ "type/Duration",
75
+ "type/Location",
76
+ "type/Coordinate",
77
+ "type/Latitude",
78
+ "type/Longitude",
79
+ "type/Address",
80
+ "type/City",
81
+ "type/State",
82
+ "type/Country",
83
+ "type/ZipCode",
84
+ "type/URL",
85
+ "type/ImageURL",
86
+ "type/AvatarURL",
87
+ "type/Email",
88
+ "type/Description",
89
+ "type/Comment",
90
+ "type/IPAddress",
91
+ "type/Category",
92
+ "type/Enum",
93
+ "type/Name",
94
+ "type/Title",
95
+ "type/Product",
96
+ "type/Company",
97
+ "type/Subscription",
98
+ "type/Source",
99
+ "type/CreationTemporal",
100
+ "type/CreationTimestamp",
101
+ "type/CreationTime",
102
+ "type/CreationDate",
103
+ "type/JoinTemporal",
104
+ "type/JoinTimestamp",
105
+ "type/JoinTime",
106
+ "type/JoinDate",
107
+ "type/CancelationTemporal",
108
+ "type/CancelationTimestamp",
109
+ "type/CancelationTime",
110
+ "type/CancelationDate",
111
+ "type/DeletionTemporal",
112
+ "type/DeletionTimestamp",
113
+ "type/DeletionTime",
114
+ "type/DeletionDate",
115
+ "type/UpdatedTemporal",
116
+ "type/UpdatedTimestamp",
117
+ "type/UpdatedTime",
118
+ "type/UpdatedDate",
119
+ "type/Birthdate",
120
+ "type/Structured",
121
+ "type/SerializedJSON",
122
+ "type/XML",
123
+ "type/User",
124
+ "type/Author",
125
+ "type/Owner",
126
+ "type/FK",
127
+ "type/PK"
128
+ ]);
129
+ const FieldCoercionStrategy = z.enum([
130
+ "Coercion/String->Temporal",
131
+ "Coercion/ISO8601->Temporal",
132
+ "Coercion/ISO8601->DateTime",
133
+ "Coercion/ISO8601->Time",
134
+ "Coercion/ISO8601->Date",
135
+ "Coercion/YYYYMMDDHHMMSSString->Temporal",
136
+ "Coercion/Bytes->Temporal",
137
+ "Coercion/YYYYMMDDHHMMSSBytes->Temporal",
138
+ "Coercion/ISO8601Bytes->Temporal",
139
+ "Coercion/Number->Temporal",
140
+ "Coercion/UNIXTime->Temporal",
141
+ "Coercion/UNIXSeconds->DateTime",
142
+ "Coercion/UNIXMilliSeconds->DateTime",
143
+ "Coercion/UNIXMicroSeconds->DateTime",
144
+ "Coercion/UNIXNanoSeconds->DateTime",
145
+ "Coercion/Temporal->Temporal",
146
+ "Coercion/DateTime->Date",
147
+ "Coercion/String->Number",
148
+ "Coercion/String->Float",
149
+ "Coercion/String->Integer",
150
+ "Coercion/Float->Integer"
151
+ ]);
152
+ const Field = z.object({
153
+ id: z.number().int(),
154
+ table_id: z.number().int(),
155
+ name: z.string(),
156
+ display_name: z.string(),
157
+ description: z.string().nullable(),
158
+ database_type: z.string().nullable().optional(),
159
+ base_type: FieldBaseType,
160
+ semantic_type: FieldSemanticType.nullable(),
161
+ fk_target_field_id: z.number().int().nullable(),
162
+ has_field_values: FieldValuesType.nullable().optional(),
163
+ visibility_type: FieldVisibilityType.nullable().optional(),
164
+ active: z.boolean().optional(),
165
+ position: z.number().int().optional()
166
+ }).loose();
167
+ const FieldCompact = Field.pick({
168
+ id: true,
169
+ name: true,
170
+ display_name: true,
171
+ description: true,
172
+ table_id: true,
173
+ base_type: true,
174
+ semantic_type: true,
175
+ fk_target_field_id: true
176
+ }).strip();
177
+ const fieldView = {
178
+ compactPick: FieldCompact,
179
+ tableColumns: [
180
+ {
181
+ key: "id",
182
+ label: "ID"
183
+ },
184
+ {
185
+ key: "name",
186
+ label: "Name"
187
+ },
188
+ {
189
+ key: "display_name",
190
+ label: "Display Name"
191
+ },
192
+ {
193
+ key: "base_type",
194
+ label: "Base Type"
195
+ },
196
+ {
197
+ key: "semantic_type",
198
+ label: "Semantic Type"
199
+ },
200
+ {
201
+ key: "fk_target_field_id",
202
+ label: "FK Target"
203
+ },
204
+ {
205
+ key: "description",
206
+ label: "Description"
207
+ }
208
+ ]
209
+ };
210
+ const NonBlankNullable = z.string().min(1).nullable();
211
+ const FieldUpdateInput = z.object({
212
+ display_name: z.string().min(1).optional(),
213
+ description: NonBlankNullable.optional(),
214
+ caveats: NonBlankNullable.optional(),
215
+ points_of_interest: NonBlankNullable.optional(),
216
+ semantic_type: FieldSemanticType.nullable().optional(),
217
+ coercion_strategy: FieldCoercionStrategy.nullable().optional(),
218
+ fk_target_field_id: z.number().int().positive().nullable().optional(),
219
+ visibility_type: FieldVisibilityType.optional(),
220
+ has_field_values: FieldValuesType.optional(),
221
+ settings: z.record(z.string(), z.unknown()).nullable().optional(),
222
+ nfc_path: z.array(z.string()).nullable().optional(),
223
+ json_unfolding: z.boolean().nullable().optional()
224
+ }).loose();
225
+ const FieldValues = z.object({
226
+ values: z.array(z.array(z.unknown())),
227
+ field_id: z.number().int().optional(),
228
+ has_more_values: z.boolean().optional(),
229
+ has_field_values: FieldValuesType.optional()
230
+ }).loose();
231
+ const FieldValuesCompact = FieldValues.pick({
232
+ values: true,
233
+ field_id: true,
234
+ has_more_values: true
235
+ }).strip();
236
+ const fieldValuesView = {
237
+ compactPick: FieldValuesCompact,
238
+ tableColumns: [
239
+ {
240
+ key: "field_id",
241
+ label: "Field"
242
+ },
243
+ {
244
+ key: "has_more_values",
245
+ label: "Has More"
246
+ },
247
+ {
248
+ key: "values",
249
+ label: "Values"
250
+ }
251
+ ]
252
+ };
253
+ const FieldSummaryRaw = z.tuple([z.tuple([z.literal("count"), z.number().int()]), z.tuple([z.literal("distincts"), z.number().int()])]);
254
+ const FieldSummary = z.object({
255
+ field_id: z.number().int(),
256
+ count: z.number().int(),
257
+ distincts: z.number().int()
258
+ });
259
+ const fieldSummaryView = {
260
+ compactPick: FieldSummary,
261
+ tableColumns: [
262
+ {
263
+ key: "field_id",
264
+ label: "Field"
265
+ },
266
+ {
267
+ key: "count",
268
+ label: "Count"
269
+ },
270
+ {
271
+ key: "distincts",
272
+ label: "Distinct"
273
+ }
274
+ ]
275
+ };
276
+
277
+ //#endregion
278
+ export { Field, FieldBaseType, FieldCompact, FieldSemanticType, FieldSummary, FieldSummaryRaw, FieldUpdateInput, FieldValues, fieldSummaryView, fieldValuesView, fieldView };
@@ -0,0 +1,18 @@
1
+ import { defineCommand } from "citty";
2
+
3
+ //#region src/commands/field/index.ts
4
+ var field_default = defineCommand({
5
+ meta: {
6
+ name: "field",
7
+ description: "Inspect Metabase fields"
8
+ },
9
+ subCommands: {
10
+ get: () => import("./get-CQGeF-eP.mjs").then((m) => m.default),
11
+ values: () => import("./values-DrwNHUAI.mjs").then((m) => m.default),
12
+ summary: () => import("./summary-CS4UGiFJ.mjs").then((m) => m.default),
13
+ update: () => import("./update-j9vgemKR.mjs").then((m) => m.default)
14
+ }
15
+ });
16
+
17
+ //#endregion
18
+ export { field_default as default };
@@ -0,0 +1,38 @@
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 { FieldCompact, fieldView } from "./field-B3gvaqpK.mjs";
8
+ import { TableQueryMetadata } from "./table-B-PYcgGb.mjs";
9
+
10
+ //#region src/commands/table/fields.ts
11
+ const FieldListEnvelope = listEnvelopeSchema(FieldCompact);
12
+ var fields_default = defineMetabaseCommand({
13
+ meta: {
14
+ name: "fields",
15
+ description: "List fields on a table (projection over query_metadata.fields)"
16
+ },
17
+ args: {
18
+ ...outputFlags,
19
+ ...profileFlag,
20
+ ...connectionFlags,
21
+ id: {
22
+ type: "positional",
23
+ description: "Table id",
24
+ required: true
25
+ }
26
+ },
27
+ outputSchema: FieldListEnvelope,
28
+ examples: ["metabase table fields 42", "metabase table fields 42 --json"],
29
+ async run({ args, ctx, getClient }) {
30
+ const id = parseId(args.id);
31
+ const client = await getClient();
32
+ const table = await client.requestParsed(TableQueryMetadata, `/api/table/${id}/query_metadata`);
33
+ renderList(wrapList(table.fields), fieldView, ctx);
34
+ }
35
+ });
36
+
37
+ //#endregion
38
+ export { fields_default as default };
@@ -0,0 +1,17 @@
1
+ import { ConfigError } from "./predicates-DiIiS3k7.mjs";
2
+
3
+ //#region src/commands/flag-pair.ts
4
+ function requireBothOrNeither(first, second) {
5
+ const firstSet = first.value !== void 0 && first.value !== "";
6
+ const secondSet = second.value !== void 0 && second.value !== "";
7
+ if (!firstSet && !secondSet) return null;
8
+ if (!firstSet) throw new ConfigError(`${first.name} is required when using ${second.name}`);
9
+ if (!secondSet) throw new ConfigError(`${second.name} is required when using ${first.name}`);
10
+ return {
11
+ first: first.value,
12
+ second: second.value
13
+ };
14
+ }
15
+
16
+ //#endregion
17
+ export { requireBothOrNeither };
@@ -0,0 +1,36 @@
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/get.ts
10
+ var get_default = defineMetabaseCommand({
11
+ meta: {
12
+ name: "get",
13
+ description: "Get 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 get 1", "metabase snippet get 1 --json"],
27
+ async run({ args, ctx, getClient }) {
28
+ const id = parseId(args.id);
29
+ const client = await getClient();
30
+ const snippet = await client.requestParsed(Snippet, `/api/native-query-snippet/${id}`);
31
+ renderItem(snippet, snippetView, ctx);
32
+ }
33
+ });
34
+
35
+ //#endregion
36
+ export { get_default as default };
@@ -0,0 +1,49 @@
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, parseEnum, profileFlag } from "./runtime-cwBS8wwK.mjs";
6
+ import { parseId } from "./parse-id-B38zTlYs.mjs";
7
+ import "./field-B3gvaqpK.mjs";
8
+ import "./table-B-PYcgGb.mjs";
9
+ import { Database, databaseView } from "./database-vvig8k4x.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
+ args: {
20
+ ...outputFlags,
21
+ ...profileFlag,
22
+ ...connectionFlags,
23
+ include: {
24
+ type: "string",
25
+ description: `Hydrate related entities: ${DatabaseGetInclude.options.join("|")}`
26
+ },
27
+ id: {
28
+ type: "positional",
29
+ description: "Database id",
30
+ required: true
31
+ }
32
+ },
33
+ outputSchema: Database,
34
+ examples: [
35
+ "metabase db get 1",
36
+ "metabase db get 1 --json",
37
+ "metabase db get 1 --include tables.fields --json"
38
+ ],
39
+ async run({ args, ctx, getClient }) {
40
+ const id = parseId(args.id);
41
+ const include = parseEnum(args.include, DatabaseGetInclude, "--include");
42
+ const client = await getClient();
43
+ const database = await client.requestParsed(Database, `/api/database/${id}`, { query: { include } });
44
+ renderItem(database, databaseView, ctx);
45
+ }
46
+ });
47
+
48
+ //#endregion
49
+ export { get_default as default };
@@ -1,8 +1,10 @@
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 { parseId } from "./parse-id-BhmmfyCP.mjs";
5
- import { Field, fieldView } from "./field-C8IVs6rp.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, fieldView } from "./field-B3gvaqpK.mjs";
6
8
 
7
9
  //#region src/commands/field/get.ts
8
10
  var get_default = defineMetabaseCommand({
@@ -0,0 +1,53 @@
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, parseEnum, profileFlag } from "./runtime-cwBS8wwK.mjs";
6
+ import { parseId } from "./parse-id-B38zTlYs.mjs";
7
+ import "./field-B3gvaqpK.mjs";
8
+ import { Table, TableQueryMetadata, tableView } from "./table-B-PYcgGb.mjs";
9
+ import { z } from "zod";
10
+
11
+ //#region src/commands/table/get.ts
12
+ const TableGetInclude = z.enum(["fields"]);
13
+ var get_default = defineMetabaseCommand({
14
+ meta: {
15
+ name: "get",
16
+ description: "Get a table by id; pass --include fields to bundle hydrated fields"
17
+ },
18
+ args: {
19
+ ...outputFlags,
20
+ ...profileFlag,
21
+ ...connectionFlags,
22
+ include: {
23
+ type: "string",
24
+ description: `Hydrate related entities: ${TableGetInclude.options.join("|")}`
25
+ },
26
+ id: {
27
+ type: "positional",
28
+ description: "Table id",
29
+ required: true
30
+ }
31
+ },
32
+ outputSchema: Table,
33
+ examples: [
34
+ "metabase table get 42",
35
+ "metabase table get 42 --json",
36
+ "metabase table get 42 --include fields --json"
37
+ ],
38
+ async run({ args, ctx, getClient }) {
39
+ const id = parseId(args.id);
40
+ const include = parseEnum(args.include, TableGetInclude, "--include");
41
+ const client = await getClient();
42
+ if (include === "fields") {
43
+ const table$1 = await client.requestParsed(TableQueryMetadata, `/api/table/${id}/query_metadata`);
44
+ renderItem(table$1, tableView, ctx);
45
+ return;
46
+ }
47
+ const table = await client.requestParsed(Table, `/api/table/${id}`);
48
+ renderItem(table, tableView, ctx);
49
+ }
50
+ });
51
+
52
+ //#endregion
53
+ export { get_default as default };
@@ -1,8 +1,10 @@
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 { parseId } from "./parse-id-BhmmfyCP.mjs";
5
- import { TransformJob, transformJobView } from "./transform-job-C7QXWTVE.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 { TransformJob, transformJobView } from "./transform-job-Csr86muI.mjs";
6
8
 
7
9
  //#region src/commands/transform-job/get.ts
8
10
  var get_default = defineMetabaseCommand({
@@ -1,8 +1,10 @@
1
- import "./package-BGfw4ZWJ.mjs";
1
+ import "./package-DV6Asqim.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { connectionFlags, defineMetabaseCommand, outputFlags, parseJson, profileFlag, renderItem } from "./runtime-C9CEZhcn.mjs";
4
- import { SettingValue, settingValueView } from "./setting-26ckqHAP.mjs";
5
- import { parseSettingKey } from "./key-DBxPSFwi.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, parseJsonOrPlain, profileFlag } from "./runtime-cwBS8wwK.mjs";
6
+ import { SettingValue, settingValueView } from "./setting-CTaAeMci.mjs";
7
+ import { parseSettingKey } from "./key-NDEARu2L.mjs";
6
8
  import { z } from "zod";
7
9
 
8
10
  //#region src/commands/setting/get.ts
@@ -41,7 +43,7 @@ async function fetchSettingValue(client, key) {
41
43
  });
42
44
  if (response.status === 204) return null;
43
45
  const text = await response.text();
44
- return parseJson(text, z.unknown(), { source: response.url });
46
+ return parseJsonOrPlain(text, response.headers.get("content-type"), z.unknown(), { source: response.url });
45
47
  }
46
48
 
47
49
  //#endregion
@@ -0,0 +1,36 @@
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 { Segment, segmentView } from "./segment-BMrUBz94.mjs";
8
+
9
+ //#region src/commands/segment/get.ts
10
+ var get_default = defineMetabaseCommand({
11
+ meta: {
12
+ name: "get",
13
+ description: "Get a segment by id"
14
+ },
15
+ args: {
16
+ ...outputFlags,
17
+ ...profileFlag,
18
+ ...connectionFlags,
19
+ id: {
20
+ type: "positional",
21
+ description: "Segment id",
22
+ required: true
23
+ }
24
+ },
25
+ outputSchema: Segment,
26
+ examples: ["metabase segment get 1", "metabase segment get 1 --json"],
27
+ async run({ args, ctx, getClient }) {
28
+ const id = parseId(args.id);
29
+ const client = await getClient();
30
+ const segment = await client.requestParsed(Segment, `/api/segment/${id}`);
31
+ renderItem(segment, segmentView, ctx);
32
+ }
33
+ });
34
+
35
+ //#endregion
36
+ export { get_default as default };