@metabase/cli 0.1.0-alpha.workspaces-commands.818a8f1

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 (107) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +762 -0
  3. package/dist/api-key-D9XxErQn.mjs +13 -0
  4. package/dist/archive-BPG5c88Y.mjs +38 -0
  5. package/dist/auth--Hpjwlaf.mjs +18 -0
  6. package/dist/body-DwU2s6Pg.mjs +19 -0
  7. package/dist/body-flags-7oqLhu5j.mjs +14 -0
  8. package/dist/branches-BbcoJXfp.mjs +41 -0
  9. package/dist/cancel-task-BDas45YO.mjs +29 -0
  10. package/dist/card-C31pGtBZ.mjs +113 -0
  11. package/dist/card-D4zZSPUb.mjs +19 -0
  12. package/dist/cli.d.mts +1 -0
  13. package/dist/cli.mjs +61 -0
  14. package/dist/command-augment-D9pI9Vbh.mjs +11 -0
  15. package/dist/create-Bd_U1zWU.mjs +124 -0
  16. package/dist/create-CCzsCZMm.mjs +47 -0
  17. package/dist/create-CwVcoq0O.mjs +43 -0
  18. package/dist/create-DpnjQvPw.mjs +43 -0
  19. package/dist/create-_UOeEXAj.mjs +39 -0
  20. package/dist/create-branch-sDttBORB.mjs +54 -0
  21. package/dist/credentials-C0xKke5D.mjs +84 -0
  22. package/dist/current-task-BGt1mqaX.mjs +35 -0
  23. package/dist/database-4V1iiPEx.mjs +17 -0
  24. package/dist/database-BTX5qbSv.mjs +33 -0
  25. package/dist/db-Dm2u2ISJ.mjs +17 -0
  26. package/dist/delete-DRBTgyus.mjs +47 -0
  27. package/dist/delete-DUC_stoL.mjs +47 -0
  28. package/dist/delete-runtime-inOVw3IX.mjs +58 -0
  29. package/dist/delete-table-9Is631O_.mjs +47 -0
  30. package/dist/deprovision-BAMzZc6f.mjs +60 -0
  31. package/dist/dirty-CLjHbz6J.mjs +32 -0
  32. package/dist/docker-QWVMG2gl.mjs +605 -0
  33. package/dist/eid-BNhutC1U.mjs +13 -0
  34. package/dist/export-D2Anfu3p.mjs +97 -0
  35. package/dist/field-Dhs2AND3.mjs +13 -0
  36. package/dist/field-QwBMAWsq.mjs +76 -0
  37. package/dist/flag-pair-CWvvzDJ_.mjs +17 -0
  38. package/dist/get-2po1uv9i.mjs +35 -0
  39. package/dist/get-BHJA78zg.mjs +35 -0
  40. package/dist/get-CAPLfawI.mjs +35 -0
  41. package/dist/get-CAVVmdMX.mjs +49 -0
  42. package/dist/get-DDWpubE8.mjs +36 -0
  43. package/dist/get-DhIoNeOp.mjs +35 -0
  44. package/dist/get-qPOsuTPw.mjs +35 -0
  45. package/dist/has-remote-changes-DAL5jetW.mjs +63 -0
  46. package/dist/import-CUMxUfSF.mjs +92 -0
  47. package/dist/input-BNqSFl38.mjs +33 -0
  48. package/dist/is-dirty-B10S6MG0.mjs +35 -0
  49. package/dist/is-dirty-CUuq-aB6.mjs +9 -0
  50. package/dist/key-CyhOpgWt.mjs +12 -0
  51. package/dist/license-DtsGJi3l.mjs +17 -0
  52. package/dist/list-B8s7Qnzk.mjs +31 -0
  53. package/dist/list-C5MGydGU.mjs +31 -0
  54. package/dist/list-DeFGwhhJ.mjs +60 -0
  55. package/dist/list-OBx5B3gd.mjs +39 -0
  56. package/dist/list-Y7iGsOfE.mjs +31 -0
  57. package/dist/list-evtQS7jl.mjs +39 -0
  58. package/dist/list-qetY9OIN.mjs +31 -0
  59. package/dist/login-Dqw9ZtCx.mjs +172 -0
  60. package/dist/logout-DwYJ5OUi.mjs +74 -0
  61. package/dist/logs-B_lrY7Js.mjs +57 -0
  62. package/dist/manifest-wzEFG0JB.mjs +124 -0
  63. package/dist/package-t8dKf4m_.mjs +73 -0
  64. package/dist/parse-id-C1prc9US.mjs +12 -0
  65. package/dist/poll-D2sXM5rc.mjs +49 -0
  66. package/dist/poll-task-Byiunmaj.mjs +194 -0
  67. package/dist/prompt-fXeNtj0M.mjs +40 -0
  68. package/dist/provision-DC4_HWZD.mjs +80 -0
  69. package/dist/ps-1bZKIwWh.mjs +9 -0
  70. package/dist/ps-BiOrecEe.mjs +78 -0
  71. package/dist/query-BnGVGeM3.mjs +100 -0
  72. package/dist/remove-Bx48o-0S.mjs +62 -0
  73. package/dist/remove-DecoZzNd.mjs +97 -0
  74. package/dist/render-DlBijc5i.mjs +179 -0
  75. package/dist/run-D4NgvaRh.mjs +87 -0
  76. package/dist/runtime-DUgFfYkN.mjs +950 -0
  77. package/dist/search-4wKx5ug2.mjs +171 -0
  78. package/dist/set-BZnCRL4c.mjs +66 -0
  79. package/dist/set-DCjrmTFm.mjs +66 -0
  80. package/dist/setting-C4vQSqer.mjs +18 -0
  81. package/dist/setting-DM7pm7yh.mjs +55 -0
  82. package/dist/setup-Dqh9hN6l.mjs +70 -0
  83. package/dist/start-xXQypG5L.mjs +324 -0
  84. package/dist/stash-ZZkmW_V7.mjs +106 -0
  85. package/dist/status-9KAPIpX8.mjs +31 -0
  86. package/dist/status-DezF-PIM.mjs +63 -0
  87. package/dist/status-JH6BZppo.mjs +55 -0
  88. package/dist/stop-br-ZOnve.mjs +80 -0
  89. package/dist/sync-C7VOWD00.mjs +26 -0
  90. package/dist/table-BvAr2ixC.mjs +75 -0
  91. package/dist/table-D-Mb5Nvw.mjs +16 -0
  92. package/dist/transform-CqxZwhGs.mjs +21 -0
  93. package/dist/transform-DfVkUttP.mjs +137 -0
  94. package/dist/transform-job-DuB_OjhO.mjs +91 -0
  95. package/dist/transform-job-HjbqjEoP.mjs +19 -0
  96. package/dist/translate-DJxDVAE4.mjs +110 -0
  97. package/dist/update-CDtm71m2.mjs +50 -0
  98. package/dist/update-DYVeVjk2.mjs +76 -0
  99. package/dist/update-DxKlQ0hP.mjs +50 -0
  100. package/dist/url-DP88YHNo.mjs +53 -0
  101. package/dist/wait-Cj_8wu4y.mjs +52 -0
  102. package/dist/wait-DwZN3ZwR.mjs +19 -0
  103. package/dist/wait-flags-CjW4ogUJ.mjs +35 -0
  104. package/dist/workspace-CbwR0vX_.mjs +24 -0
  105. package/dist/workspace-Dr9lWU3D.mjs +72 -0
  106. package/dist/workspace-credentials-q5RRFMT8.mjs +139 -0
  107. package/package.json +62 -0
@@ -0,0 +1,97 @@
1
+ import "./package-t8dKf4m_.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DlBijc5i.mjs";
4
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
5
+ import { parseId } from "./parse-id-C1prc9US.mjs";
6
+ import { REMOTE_SYNC_PATHS, SyncTask, pollFlags, pollSyncTask, throwIfFailedTask } from "./poll-task-Byiunmaj.mjs";
7
+ import "./poll-D2sXM5rc.mjs";
8
+ import { z } from "zod";
9
+
10
+ //#region src/commands/sync/export.ts
11
+ const SyncExportKickoff = z.object({
12
+ message: z.string(),
13
+ task_id: z.number().int().positive()
14
+ });
15
+ const SyncExportResult = z.object({
16
+ message: z.string(),
17
+ task_id: z.number().int().positive(),
18
+ final: SyncTask.nullable().optional()
19
+ });
20
+ const syncExportView = {
21
+ compactPick: SyncExportResult,
22
+ tableColumns: [{
23
+ key: "task_id",
24
+ label: "Task ID"
25
+ }, {
26
+ key: "message",
27
+ label: "Message"
28
+ }]
29
+ };
30
+ var export_default = defineMetabaseCommand({
31
+ meta: {
32
+ name: "export",
33
+ description: "Export Metabase changes back to the configured git remote"
34
+ },
35
+ args: {
36
+ ...outputFlags,
37
+ ...profileFlag,
38
+ ...connectionFlags,
39
+ branch: {
40
+ type: "string",
41
+ description: "Branch to export to (defaults to remote-sync-branch setting)",
42
+ alias: "b"
43
+ },
44
+ message: {
45
+ type: "string",
46
+ description: "Commit message",
47
+ alias: "m"
48
+ },
49
+ force: {
50
+ type: "boolean",
51
+ description: "Force-push / overwrite remote",
52
+ default: false
53
+ },
54
+ ...pollFlags
55
+ },
56
+ outputSchema: SyncExportResult,
57
+ examples: [
58
+ "metabase sync export -m \"update dashboards\"",
59
+ "metabase sync export --branch main --json",
60
+ "metabase sync export --no-wait"
61
+ ],
62
+ async run({ args, ctx, getClient }) {
63
+ const timeoutMs = parseId(args.timeout, "timeout");
64
+ const intervalMs = parseId(args.interval, "interval");
65
+ const body = {};
66
+ if (args.branch !== void 0 && args.branch !== "") body.branch = args.branch;
67
+ if (args.message !== void 0 && args.message !== "") body.message = args.message;
68
+ if (args.force) body.force = true;
69
+ const client = await getClient();
70
+ const kickoff = await client.requestParsed(SyncExportKickoff, REMOTE_SYNC_PATHS.export, {
71
+ method: "POST",
72
+ body
73
+ });
74
+ if (!args.wait) {
75
+ const result$1 = {
76
+ message: kickoff.message,
77
+ task_id: kickoff.task_id
78
+ };
79
+ renderItem(result$1, syncExportView, ctx);
80
+ return;
81
+ }
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");
93
+ }
94
+ });
95
+
96
+ //#endregion
97
+ export { export_default as default };
@@ -0,0 +1,13 @@
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: { get: () => import("./get-BHJA78zg.mjs").then((m) => m.default) }
10
+ });
11
+
12
+ //#endregion
13
+ export { field_default as default };
@@ -0,0 +1,76 @@
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
+ ]);
16
+ const Field = z.object({
17
+ id: z.number().int(),
18
+ table_id: z.number().int(),
19
+ name: z.string(),
20
+ display_name: z.string(),
21
+ description: z.string().nullable(),
22
+ database_type: z.string(),
23
+ base_type: z.string(),
24
+ semantic_type: z.string().nullable(),
25
+ fk_target_field_id: z.number().int().nullable(),
26
+ has_field_values: FieldValuesType,
27
+ visibility_type: FieldVisibilityType,
28
+ active: z.boolean(),
29
+ position: z.number().int()
30
+ }).loose();
31
+ const FieldCompact = Field.pick({
32
+ id: true,
33
+ name: true,
34
+ display_name: true,
35
+ description: true,
36
+ table_id: true,
37
+ base_type: true,
38
+ semantic_type: true,
39
+ fk_target_field_id: true
40
+ }).strip();
41
+ const fieldView = {
42
+ compactPick: FieldCompact,
43
+ tableColumns: [
44
+ {
45
+ key: "id",
46
+ label: "ID"
47
+ },
48
+ {
49
+ key: "name",
50
+ label: "Name"
51
+ },
52
+ {
53
+ key: "display_name",
54
+ label: "Display Name"
55
+ },
56
+ {
57
+ key: "base_type",
58
+ label: "Base Type"
59
+ },
60
+ {
61
+ key: "semantic_type",
62
+ label: "Semantic Type"
63
+ },
64
+ {
65
+ key: "fk_target_field_id",
66
+ label: "FK Target"
67
+ },
68
+ {
69
+ key: "description",
70
+ label: "Description"
71
+ }
72
+ ]
73
+ };
74
+
75
+ //#endregion
76
+ export { Field, fieldView };
@@ -0,0 +1,17 @@
1
+ import { ConfigError } from "./runtime-DUgFfYkN.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,35 @@
1
+ import "./package-t8dKf4m_.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DlBijc5i.mjs";
4
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
5
+ import { parseId } from "./parse-id-C1prc9US.mjs";
6
+ import { Database, databaseView } from "./database-BTX5qbSv.mjs";
7
+
8
+ //#region src/commands/db/get.ts
9
+ var get_default = defineMetabaseCommand({
10
+ meta: {
11
+ name: "get",
12
+ description: "Get a database by id"
13
+ },
14
+ args: {
15
+ ...outputFlags,
16
+ ...profileFlag,
17
+ ...connectionFlags,
18
+ id: {
19
+ type: "positional",
20
+ description: "Database id",
21
+ required: true
22
+ }
23
+ },
24
+ outputSchema: Database,
25
+ examples: ["metabase db get 1", "metabase db get 1 --json"],
26
+ async run({ args, ctx, getClient }) {
27
+ const id = parseId(args.id);
28
+ const client = await getClient();
29
+ const database = await client.requestParsed(Database, `/api/database/${id}`);
30
+ renderItem(database, databaseView, ctx);
31
+ }
32
+ });
33
+
34
+ //#endregion
35
+ export { get_default as default };
@@ -0,0 +1,35 @@
1
+ import "./package-t8dKf4m_.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DlBijc5i.mjs";
4
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
5
+ import { parseId } from "./parse-id-C1prc9US.mjs";
6
+ import { Field, fieldView } from "./field-QwBMAWsq.mjs";
7
+
8
+ //#region src/commands/field/get.ts
9
+ var get_default = defineMetabaseCommand({
10
+ meta: {
11
+ name: "get",
12
+ description: "Get a field by id"
13
+ },
14
+ args: {
15
+ ...outputFlags,
16
+ ...profileFlag,
17
+ ...connectionFlags,
18
+ id: {
19
+ type: "positional",
20
+ description: "Field id",
21
+ required: true
22
+ }
23
+ },
24
+ outputSchema: Field,
25
+ examples: ["metabase field get 100", "metabase field get 100 --json"],
26
+ async run({ args, ctx, getClient }) {
27
+ const id = parseId(args.id);
28
+ const client = await getClient();
29
+ const field = await client.requestParsed(Field, `/api/field/${id}`);
30
+ renderItem(field, fieldView, ctx);
31
+ }
32
+ });
33
+
34
+ //#endregion
35
+ export { get_default as default };
@@ -0,0 +1,35 @@
1
+ import "./package-t8dKf4m_.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DlBijc5i.mjs";
4
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
5
+ import { parseId } from "./parse-id-C1prc9US.mjs";
6
+ import { Card, cardView } from "./card-C31pGtBZ.mjs";
7
+
8
+ //#region src/commands/card/get.ts
9
+ var get_default = defineMetabaseCommand({
10
+ meta: {
11
+ name: "get",
12
+ description: "Get a card by id"
13
+ },
14
+ args: {
15
+ ...outputFlags,
16
+ ...profileFlag,
17
+ ...connectionFlags,
18
+ id: {
19
+ type: "positional",
20
+ description: "Card id",
21
+ required: true
22
+ }
23
+ },
24
+ outputSchema: Card,
25
+ examples: ["metabase card get 1", "metabase card get 1 --json"],
26
+ async run({ args, ctx, getClient }) {
27
+ const id = parseId(args.id);
28
+ const client = await getClient();
29
+ const card = await client.requestParsed(Card, `/api/card/${id}`);
30
+ renderItem(card, cardView, ctx);
31
+ }
32
+ });
33
+
34
+ //#endregion
35
+ export { get_default as default };
@@ -0,0 +1,49 @@
1
+ import "./package-t8dKf4m_.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DlBijc5i.mjs";
4
+ import { connectionFlags, defineMetabaseCommand, outputFlags, parseJson, profileFlag } from "./runtime-DUgFfYkN.mjs";
5
+ import { SettingValue, settingValueView } from "./setting-DM7pm7yh.mjs";
6
+ import { parseSettingKey } from "./key-CyhOpgWt.mjs";
7
+ import { z } from "zod";
8
+
9
+ //#region src/commands/setting/get.ts
10
+ var get_default = defineMetabaseCommand({
11
+ meta: {
12
+ name: "get",
13
+ description: "Get a setting value by key"
14
+ },
15
+ args: {
16
+ ...outputFlags,
17
+ ...profileFlag,
18
+ ...connectionFlags,
19
+ key: {
20
+ type: "positional",
21
+ description: "Setting key",
22
+ required: true
23
+ }
24
+ },
25
+ outputSchema: SettingValue,
26
+ examples: ["metabase setting get remote-sync-branch", "metabase setting get site-name --json"],
27
+ async run({ args, ctx, getClient }) {
28
+ const key = parseSettingKey(args.key);
29
+ const client = await getClient();
30
+ const value = await fetchSettingValue(client, key);
31
+ const item = {
32
+ key,
33
+ value
34
+ };
35
+ renderItem(item, settingValueView, ctx);
36
+ }
37
+ });
38
+ async function fetchSettingValue(client, key) {
39
+ const response = await client.requestRaw(`/api/setting/${encodeURIComponent(key)}`, {
40
+ method: "GET",
41
+ expectContentType: "binary"
42
+ });
43
+ if (response.status === 204) return null;
44
+ const text = await response.text();
45
+ return parseJson(text, z.unknown(), { source: response.url });
46
+ }
47
+
48
+ //#endregion
49
+ export { get_default as default };
@@ -0,0 +1,36 @@
1
+ import "./package-t8dKf4m_.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DlBijc5i.mjs";
4
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
5
+ import { parseId } from "./parse-id-C1prc9US.mjs";
6
+ import "./field-QwBMAWsq.mjs";
7
+ import { Table, tableView } from "./table-BvAr2ixC.mjs";
8
+
9
+ //#region src/commands/table/get.ts
10
+ var get_default = defineMetabaseCommand({
11
+ meta: {
12
+ name: "get",
13
+ description: "Get a table by id, with its fields"
14
+ },
15
+ args: {
16
+ ...outputFlags,
17
+ ...profileFlag,
18
+ ...connectionFlags,
19
+ id: {
20
+ type: "positional",
21
+ description: "Table id",
22
+ required: true
23
+ }
24
+ },
25
+ outputSchema: Table,
26
+ examples: ["metabase table get 42", "metabase table get 42 --json"],
27
+ async run({ args, ctx, getClient }) {
28
+ const id = parseId(args.id);
29
+ const client = await getClient();
30
+ const table = await client.requestParsed(Table, `/api/table/${id}/query_metadata`);
31
+ renderItem(table, tableView, ctx);
32
+ }
33
+ });
34
+
35
+ //#endregion
36
+ export { get_default as default };
@@ -0,0 +1,35 @@
1
+ import "./package-t8dKf4m_.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DlBijc5i.mjs";
4
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
5
+ import { parseId } from "./parse-id-C1prc9US.mjs";
6
+ import { TransformJob, transformJobView } from "./transform-job-DuB_OjhO.mjs";
7
+
8
+ //#region src/commands/transform-job/get.ts
9
+ var get_default = defineMetabaseCommand({
10
+ meta: {
11
+ name: "get",
12
+ description: "Get a transform job by id"
13
+ },
14
+ args: {
15
+ ...outputFlags,
16
+ ...profileFlag,
17
+ ...connectionFlags,
18
+ id: {
19
+ type: "positional",
20
+ description: "Transform job id",
21
+ required: true
22
+ }
23
+ },
24
+ outputSchema: TransformJob,
25
+ examples: ["metabase transform-job get 1", "metabase transform-job get 1 --json"],
26
+ async run({ args, ctx, getClient }) {
27
+ const id = parseId(args.id);
28
+ const client = await getClient();
29
+ const job = await client.requestParsed(TransformJob, `/api/transform-job/${id}`);
30
+ renderItem(job, transformJobView, ctx);
31
+ }
32
+ });
33
+
34
+ //#endregion
35
+ export { get_default as default };
@@ -0,0 +1,35 @@
1
+ import "./package-t8dKf4m_.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DlBijc5i.mjs";
4
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
5
+ import { parseId } from "./parse-id-C1prc9US.mjs";
6
+ import { Transform, transformView } from "./transform-DfVkUttP.mjs";
7
+
8
+ //#region src/commands/transform/get.ts
9
+ var get_default = defineMetabaseCommand({
10
+ meta: {
11
+ name: "get",
12
+ description: "Get a transform by id"
13
+ },
14
+ args: {
15
+ ...outputFlags,
16
+ ...profileFlag,
17
+ ...connectionFlags,
18
+ id: {
19
+ type: "positional",
20
+ description: "Transform id",
21
+ required: true
22
+ }
23
+ },
24
+ outputSchema: Transform,
25
+ examples: ["metabase transform get 1", "metabase transform get 1 --json"],
26
+ async run({ args, ctx, getClient }) {
27
+ const id = parseId(args.id);
28
+ const client = await getClient();
29
+ const transform = await client.requestParsed(Transform, `/api/transform/${id}`);
30
+ renderItem(transform, transformView, ctx);
31
+ }
32
+ });
33
+
34
+ //#endregion
35
+ export { get_default as default };
@@ -0,0 +1,63 @@
1
+ import "./package-t8dKf4m_.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DlBijc5i.mjs";
4
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
5
+ import { REMOTE_SYNC_PATHS } from "./poll-task-Byiunmaj.mjs";
6
+ import "./poll-D2sXM5rc.mjs";
7
+ import { z } from "zod";
8
+
9
+ //#region src/commands/sync/has-remote-changes.ts
10
+ const HasRemoteChangesResult = z.object({
11
+ has_changes: z.boolean(),
12
+ remote_version: z.string().nullable(),
13
+ local_version: z.string().nullable(),
14
+ cached: z.boolean()
15
+ });
16
+ const hasRemoteChangesView = {
17
+ compactPick: HasRemoteChangesResult,
18
+ tableColumns: [
19
+ {
20
+ key: "has_changes",
21
+ label: "Has changes"
22
+ },
23
+ {
24
+ key: "remote_version",
25
+ label: "Remote"
26
+ },
27
+ {
28
+ key: "local_version",
29
+ label: "Local"
30
+ },
31
+ {
32
+ key: "cached",
33
+ label: "Cached"
34
+ }
35
+ ]
36
+ };
37
+ var has_remote_changes_default = defineMetabaseCommand({
38
+ meta: {
39
+ name: "has-remote-changes",
40
+ description: "Check whether the remote branch has unimported changes"
41
+ },
42
+ args: {
43
+ ...outputFlags,
44
+ ...profileFlag,
45
+ ...connectionFlags,
46
+ forceRefresh: {
47
+ type: "boolean",
48
+ description: "Bypass the in-memory cache and re-check the remote",
49
+ default: false,
50
+ alias: "force-refresh"
51
+ }
52
+ },
53
+ outputSchema: HasRemoteChangesResult,
54
+ examples: ["metabase sync has-remote-changes", "metabase sync has-remote-changes --force-refresh --json"],
55
+ async run({ args, ctx, getClient }) {
56
+ const client = await getClient();
57
+ const result = await client.requestParsed(HasRemoteChangesResult, REMOTE_SYNC_PATHS.hasRemoteChanges, { query: { "force-refresh": args.forceRefresh } });
58
+ renderItem(result, hasRemoteChangesView, ctx);
59
+ }
60
+ });
61
+
62
+ //#endregion
63
+ export { has_remote_changes_default as default };
@@ -0,0 +1,92 @@
1
+ import "./package-t8dKf4m_.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import { renderItem } from "./render-DlBijc5i.mjs";
4
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
5
+ import { parseId } from "./parse-id-C1prc9US.mjs";
6
+ import { REMOTE_SYNC_PATHS, SyncTask, pollFlags, pollSyncTask, throwIfFailedTask } from "./poll-task-Byiunmaj.mjs";
7
+ import "./poll-D2sXM5rc.mjs";
8
+ import { z } from "zod";
9
+
10
+ //#region src/commands/sync/import.ts
11
+ const SyncImportKickoff = z.object({
12
+ status: z.literal("success"),
13
+ task_id: z.number().int().positive().nullable(),
14
+ message: z.string().nullable().optional()
15
+ });
16
+ const SyncImportResult = z.object({
17
+ message: z.string().nullable(),
18
+ task_id: z.number().int().positive().nullable(),
19
+ final: SyncTask.nullable().optional()
20
+ });
21
+ const syncImportView = {
22
+ compactPick: SyncImportResult,
23
+ tableColumns: [{
24
+ key: "task_id",
25
+ label: "Task ID"
26
+ }, {
27
+ key: "message",
28
+ label: "Message"
29
+ }]
30
+ };
31
+ var import_default = defineMetabaseCommand({
32
+ meta: {
33
+ name: "import",
34
+ description: "Import content from the configured git remote into Metabase"
35
+ },
36
+ args: {
37
+ ...outputFlags,
38
+ ...profileFlag,
39
+ ...connectionFlags,
40
+ branch: {
41
+ type: "string",
42
+ description: "Branch to import from (defaults to remote-sync-branch setting)",
43
+ alias: "b"
44
+ },
45
+ force: {
46
+ type: "boolean",
47
+ description: "Discard local Metabase-side dirty changes (LOSSY)",
48
+ default: false
49
+ },
50
+ ...pollFlags
51
+ },
52
+ outputSchema: SyncImportResult,
53
+ examples: [
54
+ "metabase sync import",
55
+ "metabase sync import --branch main --json",
56
+ "metabase sync import --force --no-wait"
57
+ ],
58
+ async run({ args, ctx, getClient }) {
59
+ const timeoutMs = parseId(args.timeout, "timeout");
60
+ const intervalMs = parseId(args.interval, "interval");
61
+ const body = {};
62
+ if (args.branch !== void 0 && args.branch !== "") body.branch = args.branch;
63
+ if (args.force) body.force = true;
64
+ const client = await getClient();
65
+ const kickoff = await client.requestParsed(SyncImportKickoff, REMOTE_SYNC_PATHS.import, {
66
+ method: "POST",
67
+ body
68
+ });
69
+ if (!args.wait || kickoff.task_id === null) {
70
+ const result$1 = {
71
+ message: kickoff.message ?? null,
72
+ task_id: kickoff.task_id
73
+ };
74
+ renderItem(result$1, syncImportView, ctx);
75
+ return;
76
+ }
77
+ const final = await pollSyncTask(client, {
78
+ timeoutMs,
79
+ intervalMs
80
+ });
81
+ const result = {
82
+ message: kickoff.message ?? null,
83
+ task_id: kickoff.task_id,
84
+ final
85
+ };
86
+ renderItem(result, syncImportView, ctx);
87
+ throwIfFailedTask(final, "import");
88
+ }
89
+ });
90
+
91
+ //#endregion
92
+ export { import_default as default };
@@ -0,0 +1,33 @@
1
+ import { ConfigError, isNotFoundError } from "./runtime-DUgFfYkN.mjs";
2
+ import { readFile } from "node:fs/promises";
3
+
4
+ //#region src/runtime/input.ts
5
+ const SOURCE_LIST = "flag, --file, stdin, or positional argument";
6
+ async function readInput(sources) {
7
+ if (sources.flag) return sources.flag;
8
+ if (sources.file) return await readFileSource(sources.file);
9
+ if (!process.stdin.isTTY) {
10
+ const piped = await readStdin();
11
+ if (piped) return piped;
12
+ }
13
+ if (sources.positional) return sources.positional;
14
+ const required = sources.required ?? true;
15
+ if (required) throw new ConfigError(`input required: provide one of ${SOURCE_LIST}`);
16
+ return "";
17
+ }
18
+ async function readFileSource(path) {
19
+ try {
20
+ return await readFile(path, "utf8");
21
+ } catch (error) {
22
+ if (isNotFoundError(error)) throw new ConfigError(`--file not found: ${path}`);
23
+ throw error;
24
+ }
25
+ }
26
+ async function readStdin() {
27
+ let data = "";
28
+ for await (const chunk of process.stdin) data += chunk;
29
+ return data;
30
+ }
31
+
32
+ //#endregion
33
+ export { readInput };