@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.
- package/README.md +972 -57
- package/dist/add-collection-DwxQDXzL.mjs +54 -0
- package/dist/add-collection-SL08iMub.mjs +11 -0
- package/dist/api-key-BktzvPb7.mjs +13 -0
- package/dist/{archive-CsWeHXle.mjs → archive-C1mF-9Kj.mjs} +7 -4
- package/dist/archive-CLWtbvvH.mjs +44 -0
- package/dist/archive-Cq4WKmJt.mjs +44 -0
- package/dist/archive-kYoy5LK5.mjs +39 -0
- package/dist/auth-DfYkakP3.mjs +19 -0
- package/dist/{body-Dv9hQ0Qk.mjs → body-rDrR-C1c.mjs} +3 -2
- package/dist/{branches-BujtceGr.mjs → branches-CH2UcCpX.mjs} +8 -6
- package/dist/cancel-CgLZcItQ.mjs +56 -0
- package/dist/{cancel-task-CT2xUMRg.mjs → cancel-task-DcYrFsM6.mjs} +9 -7
- package/dist/{card-CsXk8T6A.mjs → card-CQxvHeyP.mjs} +34 -15
- package/dist/card-ZCGU2JEh.mjs +20 -0
- package/dist/cards-C4NIaERo.mjs +37 -0
- package/dist/cli.mjs +33 -14
- package/dist/collection-B3sPXRLs.mjs +163 -0
- package/dist/collection-D_uFLIAS.mjs +19 -0
- package/dist/create-BUCLNqiN.mjs +48 -0
- package/dist/create-CB0Yp__0.mjs +66 -0
- package/dist/create-CNvd5T8h.mjs +48 -0
- package/dist/create-Cbh1cGj9.mjs +48 -0
- package/dist/create-CzfNOhOF.mjs +48 -0
- package/dist/create-DU0ZhnZu.mjs +44 -0
- package/dist/create-Dh0p-c2Y.mjs +44 -0
- package/dist/create-DvrVZ2hS.mjs +125 -0
- package/dist/create-QgN369N5.mjs +50 -0
- package/dist/{create-B8ektf-R.mjs → create-bqc_rmix.mjs} +8 -6
- package/dist/{create-branch-goZBTNnr.mjs → create-branch-BJFH9Hda.mjs} +9 -7
- package/dist/credentials-DTP1xuKz.mjs +85 -0
- package/dist/{current-task-DBjRNCFq.mjs → current-task-z_TiJ0kt.mjs} +9 -7
- package/dist/dashboard-CnMD04PQ.mjs +163 -0
- package/dist/dashboard-G1-dGLUR.mjs +20 -0
- package/dist/database-DQkUxTLd.mjs +17 -0
- package/dist/database-vvig8k4x.mjs +51 -0
- package/dist/db-CBaEfumR.mjs +22 -0
- package/dist/{delete-8vGU35r3.mjs → delete-CVYII8mq.mjs} +7 -5
- package/dist/{delete-B27KLF5X.mjs → delete-DeZQ1r9w.mjs} +7 -5
- package/dist/{delete-runtime-Byr60cR3.mjs → delete-runtime-BMzvfj_B.mjs} +4 -4
- package/dist/{delete-table-BNaJ_gA4.mjs → delete-table-ZiR9-ndv.mjs} +7 -5
- package/dist/deprovision-BhD3J-Am.mjs +61 -0
- package/dist/{dirty-aNUuph4I.mjs → dirty-D9agt7Os.mjs} +8 -6
- package/dist/docker-CHpV8PRz.mjs +612 -0
- package/dist/eid-B5wawMmO.mjs +13 -0
- package/dist/{export-QDkuuzSE.mjs → export-Bfk7JAlR.mjs} +30 -23
- package/dist/field-B3gvaqpK.mjs +278 -0
- package/dist/field-BDJ1pEgr.mjs +18 -0
- package/dist/fields-7ByLsxLg.mjs +38 -0
- package/dist/flag-pair-DtR1AiBQ.mjs +17 -0
- package/dist/get-BE6Izpus.mjs +36 -0
- package/dist/get-C3CcAJGg.mjs +49 -0
- package/dist/{get-DI_IJvgk.mjs → get-CQGeF-eP.mjs} +6 -4
- package/dist/get-D2m4jhwT.mjs +53 -0
- package/dist/{get-BGBIzMKY.mjs → get-DKy3DAJX.mjs} +6 -4
- package/dist/{get-COXHplHP.mjs → get-DUSR5i99.mjs} +7 -5
- package/dist/get-DikegGzi.mjs +36 -0
- package/dist/get-StkjKuh0.mjs +40 -0
- package/dist/get-bYc7eGYe.mjs +36 -0
- package/dist/{get-Cl8-IauC.mjs → get-cuHp9-6U.mjs} +7 -4
- package/dist/{get-i6LWOByV.mjs → get-gOT_RarI.mjs} +6 -4
- package/dist/get-run-D59Yqaoh.mjs +36 -0
- package/dist/get-tISo-cmg.mjs +41 -0
- package/dist/git-sync-BiTWfLgY.mjs +28 -0
- package/dist/{has-remote-changes-hjKoQuRy.mjs → has-remote-changes-B1TciDVD.mjs} +8 -6
- package/dist/{import-HJsSKRYx.mjs → import-DnnmmJbp.mjs} +11 -9
- package/dist/{input-Dojr-RTw.mjs → input-ikCiip6x.mjs} +2 -1
- package/dist/is-dirty-DClGFOGV.mjs +10 -0
- package/dist/{is-dirty-1Qy7hiHB.mjs → is-dirty-DlfX7e39.mjs} +5 -4
- package/dist/items-DQFQSpjF.mjs +77 -0
- package/dist/{key-DBxPSFwi.mjs → key-NDEARu2L.mjs} +1 -1
- package/dist/{license-MoWse3ZI.mjs → license-DBh13sc8.mjs} +3 -3
- package/dist/list-4kYCGv01.mjs +32 -0
- package/dist/list-9AOWhxqp.mjs +61 -0
- package/dist/{list-Bk6RsbJl.mjs → list-BwjqQ6pp.mjs} +5 -3
- package/dist/{list-C_PRdL5e.mjs → list-CP5RNjO6.mjs} +7 -5
- package/dist/{list-C8tdLOH5.mjs → list-Cy0VhXQs.mjs} +5 -3
- package/dist/list-D067ZSE5.mjs +47 -0
- package/dist/list-DAZP-IM5.mjs +32 -0
- package/dist/list-DJN-OvTZ.mjs +52 -0
- package/dist/list-DQj-QJAs.mjs +40 -0
- package/dist/list-Di529OJD.mjs +55 -0
- package/dist/{list-C4Ajrw8f.mjs → list-DlKzgnqo.mjs} +6 -3
- package/dist/list-GFfR9SuT.mjs +32 -0
- package/dist/{list-CWt3fqrZ.mjs → list-iFVEdi2J.mjs} +5 -3
- package/dist/{login-C9WTwNn6.mjs → login-DxgkosGx.mjs} +30 -9
- package/dist/{logout-oLszGCOg.mjs → logout-BlVwqBog.mjs} +7 -6
- package/dist/logs-CudNEkT4.mjs +58 -0
- package/dist/{manifest-CAdjQYH8.mjs → manifest-Dv5B9Blc.mjs} +3 -7
- package/dist/measure-BEQfnLdN.mjs +67 -0
- package/dist/measure-C7SbdYQk.mjs +19 -0
- package/dist/metadata-B2Td415K.mjs +38 -0
- package/dist/metadata-BTJAFVvZ.mjs +37 -0
- package/dist/{package-BGfw4ZWJ.mjs → package-DV6Asqim.mjs} +7 -1
- package/dist/paginate-CTSfuYiF.mjs +49 -0
- package/dist/parse-id-B38zTlYs.mjs +12 -0
- package/dist/parse-ref-DGvh4aDn.mjs +17 -0
- package/dist/parse-schemas-Ds-cVE-O.mjs +12 -0
- package/dist/{poll-ILanYysl.mjs → poll-Bh6oAifO.mjs} +2 -1
- package/dist/{poll-task-DbpsiQhl.mjs → poll-task-vPwV31Fs.mjs} +8 -7
- package/dist/predicates-DiIiS3k7.mjs +153 -0
- package/dist/preflight-DxJb-hUV.mjs +91 -0
- package/dist/{prompt-DpT8yAVy.mjs → prompt-Bf3DQ-qE.mjs} +1 -1
- package/dist/provision-B-I0zuDe.mjs +77 -0
- package/dist/ps-BmYQYC7t.mjs +10 -0
- package/dist/ps-CaiOFCv2.mjs +78 -0
- package/dist/query-BtF1yWZZ.mjs +90 -0
- package/dist/{query-PihYi-UZ.mjs → query-jmfqaXRP.mjs} +38 -13
- package/dist/remove-C2iv0g03.mjs +98 -0
- package/dist/remove-collection-DhZghaZy.mjs +38 -0
- package/dist/{remove-B2hVYn1v.mjs → remove-xskleeru.mjs} +6 -5
- package/dist/render-DXv-D6fU.mjs +182 -0
- package/dist/rescan-values-DW6u90ep.mjs +43 -0
- package/dist/revision-message-flag-CWQbKhdl.mjs +11 -0
- package/dist/{run-C2so6Qp6.mjs → run-DxVzhcF3.mjs} +27 -36
- package/dist/runs-BOHk1XnM.mjs +54 -0
- package/dist/{runtime-C9CEZhcn.mjs → runtime-cwBS8wwK.mjs} +428 -442
- package/dist/schema-tables-CcFbY_jN.mjs +45 -0
- package/dist/schemas-DZmv_V62.mjs +47 -0
- package/dist/{search-CopOytXY.mjs → search-CYMuc7Fg.mjs} +6 -19
- package/dist/segment-BMrUBz94.mjs +70 -0
- package/dist/segment-Df4pfjco.mjs +19 -0
- package/dist/{set-BcF7M1GQ.mjs → set-B_rrVwU4.mjs} +6 -4
- package/dist/{set-CbibegpA.mjs → set-CbGfQ7Ye.mjs} +8 -6
- package/dist/{setting-U3NtBMFo.mjs → setting-DqZY9NXP.mjs} +3 -3
- package/dist/setup-DxmcAorA.mjs +71 -0
- package/dist/snippet-CwSHjQyn.mjs +19 -0
- package/dist/snippet-Dw0Sjzkr.mjs +64 -0
- package/dist/start-Cn0epTks.mjs +380 -0
- package/dist/{stash-DOBbYozC.mjs → stash-BFZIl9F4.mjs} +9 -7
- package/dist/{status-Buf1ZbNR.mjs → status-BjCeJNLp.mjs} +10 -8
- package/dist/{status-CUcs8XBH.mjs → status-FDIDmqvM.mjs} +4 -2
- package/dist/{status-D1F5XHae.mjs → status-UALK3OJl.mjs} +4 -2
- package/dist/stop-DUwrDWw8.mjs +81 -0
- package/dist/summary-CS4UGiFJ.mjs +41 -0
- package/dist/sync-schema-IrHdJxmX.mjs +43 -0
- package/dist/{table-Cfk7oSvw.mjs → table-B-PYcgGb.mjs} +22 -9
- package/dist/table-Cdr5bKp1.mjs +19 -0
- package/dist/transform-CeZusR_w.mjs +24 -0
- package/dist/{transform-B5uRpg1G.mjs → transform-IEX4Mx3X.mjs} +56 -2
- package/dist/transform-job-BOn9-CGa.mjs +19 -0
- package/dist/{transform-job-C7QXWTVE.mjs → transform-job-Csr86muI.mjs} +7 -0
- package/dist/translate-B__zbDKm.mjs +111 -0
- package/dist/tree-Mh0uQ_Wy.mjs +32 -0
- package/dist/update-1Di9hbPo.mjs +56 -0
- package/dist/update-B5_pp6Jj.mjs +56 -0
- package/dist/update-B9DBMo30.mjs +52 -0
- package/dist/update-BfBsM_y1.mjs +56 -0
- package/dist/update-Bw0WZix_.mjs +73 -0
- package/dist/update-Cp1789qq.mjs +52 -0
- package/dist/update-D2VI_5cy.mjs +57 -0
- package/dist/update-D8GwQTcL.mjs +59 -0
- package/dist/{update-CL8tRbxr.mjs → update-Masp5WeT.mjs} +9 -7
- package/dist/update-dashcard-CNiQw1MD.mjs +71 -0
- package/dist/update-j9vgemKR.mjs +51 -0
- package/dist/url-GFM76VIK.mjs +54 -0
- package/dist/uuid-Uif0lNk8.mjs +47 -0
- package/dist/validate-DCYx6jdL.mjs +1496 -0
- package/dist/validate-query-B07oGG4K.mjs +37 -0
- package/dist/values-DrwNHUAI.mjs +36 -0
- package/dist/{wait-Bugr9eXD.mjs → wait-BoKk8CJy.mjs} +10 -8
- package/dist/wait-DO7tS7NI.mjs +19 -0
- package/dist/wait-flags-CjX2sEGm.mjs +35 -0
- package/dist/workspace-CyEX40D-.mjs +24 -0
- package/dist/workspace-DVuqKJGG.mjs +72 -0
- package/dist/workspace-credentials-B6BL-X0d.mjs +139 -0
- package/package.json +7 -1
- package/dist/auth-BF7IjZIH.mjs +0 -18
- package/dist/card-_Ta7zdYe.mjs +0 -19
- package/dist/create-CI2Cunq5.mjs +0 -38
- package/dist/create-DdbU3TLX.mjs +0 -42
- package/dist/database-PA9Goi25.mjs +0 -33
- package/dist/db-DMghzgb6.mjs +0 -17
- package/dist/field-C8IVs6rp.mjs +0 -76
- package/dist/field-DaYo_90x.mjs +0 -13
- package/dist/get-Cwpj7lDe.mjs +0 -35
- package/dist/get-Dh_acl8q.mjs +0 -34
- package/dist/is-dirty-DpKn9HJp.mjs +0 -8
- package/dist/list-CBSBHtK-.mjs +0 -38
- package/dist/parse-id-BhmmfyCP.mjs +0 -14
- package/dist/sync-BPyGXfUk.mjs +0 -26
- package/dist/table-D7nJt7JO.mjs +0 -16
- package/dist/transform-UbyewMxY.mjs +0 -21
- package/dist/transform-job-CrYkr-Ma.mjs +0 -19
- package/dist/update-DU2oU2j-.mjs +0 -49
- /package/dist/{body-flags-BUA9XV1u.mjs → body-flags-BK7J6Daz.mjs} +0 -0
- /package/dist/{setting-26ckqHAP.mjs → setting-CTaAeMci.mjs} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Field } from "./field-
|
|
1
|
+
import { Field, FieldCompact } from "./field-B3gvaqpK.mjs";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
|
|
4
4
|
//#region src/domain/table.ts
|
|
@@ -12,14 +12,16 @@ const TableEntityType = z.enum([
|
|
|
12
12
|
"entity/EventTable"
|
|
13
13
|
]);
|
|
14
14
|
const TableVisibilityType = z.enum([
|
|
15
|
-
"details-only",
|
|
16
15
|
"hidden",
|
|
17
|
-
"normal",
|
|
18
|
-
"retired",
|
|
19
|
-
"sensitive",
|
|
20
16
|
"technical",
|
|
21
17
|
"cruft"
|
|
22
18
|
]);
|
|
19
|
+
const TableFieldOrder = z.enum([
|
|
20
|
+
"alphabetical",
|
|
21
|
+
"custom",
|
|
22
|
+
"database",
|
|
23
|
+
"smart"
|
|
24
|
+
]);
|
|
23
25
|
const Table = z.object({
|
|
24
26
|
id: z.number().int(),
|
|
25
27
|
name: z.string(),
|
|
@@ -28,10 +30,11 @@ const Table = z.object({
|
|
|
28
30
|
db_id: z.number().int(),
|
|
29
31
|
schema: z.string().nullable(),
|
|
30
32
|
entity_type: TableEntityType.nullable(),
|
|
31
|
-
visibility_type: TableVisibilityType.nullable(),
|
|
32
|
-
active: z.boolean(),
|
|
33
|
+
visibility_type: TableVisibilityType.nullable().optional(),
|
|
34
|
+
active: z.boolean().optional(),
|
|
33
35
|
fields: z.array(Field).optional()
|
|
34
36
|
}).loose();
|
|
37
|
+
const TableQueryMetadata = Table.extend({ fields: z.array(Field) });
|
|
35
38
|
const TableCompact = Table.pick({
|
|
36
39
|
id: true,
|
|
37
40
|
name: true,
|
|
@@ -40,7 +43,7 @@ const TableCompact = Table.pick({
|
|
|
40
43
|
db_id: true,
|
|
41
44
|
schema: true,
|
|
42
45
|
entity_type: true
|
|
43
|
-
}).strip();
|
|
46
|
+
}).strip().extend({ fields: z.array(FieldCompact).optional() });
|
|
44
47
|
const tableView = {
|
|
45
48
|
compactPick: TableCompact,
|
|
46
49
|
tableColumns: [
|
|
@@ -70,6 +73,16 @@ const tableView = {
|
|
|
70
73
|
}
|
|
71
74
|
]
|
|
72
75
|
};
|
|
76
|
+
const TableUpdateInput = z.object({
|
|
77
|
+
display_name: z.string().min(1).optional(),
|
|
78
|
+
entity_type: TableEntityType.nullable().optional(),
|
|
79
|
+
visibility_type: TableVisibilityType.nullable().optional(),
|
|
80
|
+
description: z.string().nullable().optional(),
|
|
81
|
+
caveats: z.string().nullable().optional(),
|
|
82
|
+
points_of_interest: z.string().nullable().optional(),
|
|
83
|
+
show_in_getting_started: z.boolean().optional(),
|
|
84
|
+
field_order: TableFieldOrder.optional()
|
|
85
|
+
}).loose();
|
|
73
86
|
|
|
74
87
|
//#endregion
|
|
75
|
-
export { Table, TableCompact, tableView };
|
|
88
|
+
export { Table, TableCompact, TableQueryMetadata, TableUpdateInput, tableView };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/table/index.ts
|
|
4
|
+
var table_default = defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "table",
|
|
7
|
+
description: "Inspect Metabase tables"
|
|
8
|
+
},
|
|
9
|
+
subCommands: {
|
|
10
|
+
list: () => import("./list-CP5RNjO6.mjs").then((m) => m.default),
|
|
11
|
+
get: () => import("./get-D2m4jhwT.mjs").then((m) => m.default),
|
|
12
|
+
metadata: () => import("./metadata-BTJAFVvZ.mjs").then((m) => m.default),
|
|
13
|
+
fields: () => import("./fields-7ByLsxLg.mjs").then((m) => m.default),
|
|
14
|
+
update: () => import("./update-Cp1789qq.mjs").then((m) => m.default)
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { table_default as default };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/transform/index.ts
|
|
4
|
+
var transform_default = defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "transform",
|
|
7
|
+
description: "Manage Metabase transforms"
|
|
8
|
+
},
|
|
9
|
+
subCommands: {
|
|
10
|
+
list: () => import("./list-iFVEdi2J.mjs").then((mod) => mod.default),
|
|
11
|
+
get: () => import("./get-gOT_RarI.mjs").then((mod) => mod.default),
|
|
12
|
+
create: () => import("./create-BUCLNqiN.mjs").then((mod) => mod.default),
|
|
13
|
+
update: () => import("./update-B5_pp6Jj.mjs").then((mod) => mod.default),
|
|
14
|
+
delete: () => import("./delete-CVYII8mq.mjs").then((mod) => mod.default),
|
|
15
|
+
"delete-table": () => import("./delete-table-ZiR9-ndv.mjs").then((mod) => mod.default),
|
|
16
|
+
run: () => import("./run-DxVzhcF3.mjs").then((mod) => mod.default),
|
|
17
|
+
cancel: () => import("./cancel-CgLZcItQ.mjs").then((mod) => mod.default),
|
|
18
|
+
"get-run": () => import("./get-run-D59Yqaoh.mjs").then((mod) => mod.default),
|
|
19
|
+
runs: () => import("./runs-BOHk1XnM.mjs").then((mod) => mod.default)
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
//#endregion
|
|
24
|
+
export { transform_default as default };
|
|
@@ -38,6 +38,7 @@ const TransformTableIncrementalTarget = z.object({
|
|
|
38
38
|
name: z.string()
|
|
39
39
|
}).loose();
|
|
40
40
|
const TransformTarget = z.discriminatedUnion("type", [TransformTableTarget, TransformTableIncrementalTarget]);
|
|
41
|
+
const TransformTargetCompact = z.discriminatedUnion("type", [TransformTableTarget.strip(), TransformTableIncrementalTarget.strip()]);
|
|
41
42
|
const TransformLastRun = z.object({
|
|
42
43
|
id: z.number().int(),
|
|
43
44
|
transform_id: z.number().int(),
|
|
@@ -59,6 +60,48 @@ const TransformRun = z.object({
|
|
|
59
60
|
message: z.string().nullable(),
|
|
60
61
|
user_id: z.number().int().nullable()
|
|
61
62
|
}).loose();
|
|
63
|
+
const TransformRunCompact = TransformRun.pick({
|
|
64
|
+
id: true,
|
|
65
|
+
transform_id: true,
|
|
66
|
+
status: true,
|
|
67
|
+
run_method: true,
|
|
68
|
+
start_time: true,
|
|
69
|
+
end_time: true,
|
|
70
|
+
message: true
|
|
71
|
+
}).strip();
|
|
72
|
+
const transformRunView = {
|
|
73
|
+
compactPick: TransformRunCompact,
|
|
74
|
+
tableColumns: [
|
|
75
|
+
{
|
|
76
|
+
key: "id",
|
|
77
|
+
label: "Run ID"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
key: "transform_id",
|
|
81
|
+
label: "Transform"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
key: "status",
|
|
85
|
+
label: "Status"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
key: "run_method",
|
|
89
|
+
label: "Method"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
key: "start_time",
|
|
93
|
+
label: "Started"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
key: "end_time",
|
|
97
|
+
label: "Ended"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
key: "message",
|
|
101
|
+
label: "Message"
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
};
|
|
62
105
|
const Transform = z.object({
|
|
63
106
|
id: z.number().int(),
|
|
64
107
|
name: z.string(),
|
|
@@ -84,7 +127,7 @@ const TransformCompact = Transform.pick({
|
|
|
84
127
|
description: true,
|
|
85
128
|
source_type: true,
|
|
86
129
|
target_db_id: true
|
|
87
|
-
}).strip();
|
|
130
|
+
}).strip().extend({ target: TransformTargetCompact });
|
|
88
131
|
const transformView = {
|
|
89
132
|
compactPick: TransformCompact,
|
|
90
133
|
tableColumns: [
|
|
@@ -100,6 +143,11 @@ const transformView = {
|
|
|
100
143
|
key: "source_type",
|
|
101
144
|
label: "Source"
|
|
102
145
|
},
|
|
146
|
+
{
|
|
147
|
+
key: "target",
|
|
148
|
+
label: "Target",
|
|
149
|
+
format: (value) => formatTarget(value)
|
|
150
|
+
},
|
|
103
151
|
{
|
|
104
152
|
key: "target_db_id",
|
|
105
153
|
label: "Target DB"
|
|
@@ -110,6 +158,12 @@ const transformView = {
|
|
|
110
158
|
}
|
|
111
159
|
]
|
|
112
160
|
};
|
|
161
|
+
function formatTarget(value) {
|
|
162
|
+
const parsed = TransformTarget.safeParse(value);
|
|
163
|
+
if (!parsed.success) return "";
|
|
164
|
+
const { schema, name } = parsed.data;
|
|
165
|
+
return schema ? `${schema}.${name}` : name;
|
|
166
|
+
}
|
|
113
167
|
const TransformCreateInput = z.object({
|
|
114
168
|
name: z.string().min(1),
|
|
115
169
|
description: z.string().nullable().optional(),
|
|
@@ -134,4 +188,4 @@ const TransformUpdateInput = z.object({
|
|
|
134
188
|
}).loose();
|
|
135
189
|
|
|
136
190
|
//#endregion
|
|
137
|
-
export { Transform, TransformCompact, TransformCreateInput, TransformRun, TransformUpdateInput, transformView };
|
|
191
|
+
export { Transform, TransformCompact, TransformCreateInput, TransformRun, TransformRunCompact, TransformUpdateInput, transformRunView, transformView };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/transform-job/index.ts
|
|
4
|
+
var transform_job_default = defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "transform-job",
|
|
7
|
+
description: "Manage Metabase transform jobs"
|
|
8
|
+
},
|
|
9
|
+
subCommands: {
|
|
10
|
+
list: () => import("./list-Cy0VhXQs.mjs").then((mod) => mod.default),
|
|
11
|
+
get: () => import("./get-DKy3DAJX.mjs").then((mod) => mod.default),
|
|
12
|
+
create: () => import("./create-bqc_rmix.mjs").then((mod) => mod.default),
|
|
13
|
+
update: () => import("./update-Masp5WeT.mjs").then((mod) => mod.default),
|
|
14
|
+
delete: () => import("./delete-DeZQ1r9w.mjs").then((mod) => mod.default)
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { transform_job_default as default };
|
|
@@ -27,6 +27,7 @@ const TransformJob = z.object({
|
|
|
27
27
|
description: z.string().nullable(),
|
|
28
28
|
schedule: z.string(),
|
|
29
29
|
ui_display_type: JobUiDisplayType,
|
|
30
|
+
active: z.boolean(),
|
|
30
31
|
entity_id: z.string().nullable(),
|
|
31
32
|
created_at: z.string(),
|
|
32
33
|
updated_at: z.string(),
|
|
@@ -41,6 +42,7 @@ const TransformJobCompact = TransformJob.pick({
|
|
|
41
42
|
description: true,
|
|
42
43
|
schedule: true,
|
|
43
44
|
ui_display_type: true,
|
|
45
|
+
active: true,
|
|
44
46
|
built_in_type: true
|
|
45
47
|
}).strip();
|
|
46
48
|
const transformJobView = {
|
|
@@ -62,6 +64,10 @@ const transformJobView = {
|
|
|
62
64
|
key: "ui_display_type",
|
|
63
65
|
label: "Display"
|
|
64
66
|
},
|
|
67
|
+
{
|
|
68
|
+
key: "active",
|
|
69
|
+
label: "Active"
|
|
70
|
+
},
|
|
65
71
|
{
|
|
66
72
|
key: "built_in_type",
|
|
67
73
|
label: "Built-in"
|
|
@@ -84,6 +90,7 @@ const TransformJobUpdateInput = z.object({
|
|
|
84
90
|
description: z.string().min(1).nullable().optional(),
|
|
85
91
|
schedule: z.string().min(1).optional(),
|
|
86
92
|
ui_display_type: JobUiDisplayType.optional(),
|
|
93
|
+
active: z.boolean().optional(),
|
|
87
94
|
tag_ids: z.array(z.number().int().positive()).optional()
|
|
88
95
|
}).loose();
|
|
89
96
|
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import "./package-DV6Asqim.mjs";
|
|
2
|
+
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
+
import { renderItem } from "./render-DXv-D6fU.mjs";
|
|
4
|
+
import { ConfigError } from "./predicates-DiIiS3k7.mjs";
|
|
5
|
+
import "./input-ikCiip6x.mjs";
|
|
6
|
+
import { connectionFlags, defineMetabaseCommand, outputFlags, parseCsv, profileFlag } from "./runtime-cwBS8wwK.mjs";
|
|
7
|
+
import { readBody } from "./body-rDrR-C1c.mjs";
|
|
8
|
+
import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
|
|
9
|
+
import { requireBothOrNeither } from "./flag-pair-DtR1AiBQ.mjs";
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
|
|
12
|
+
//#region src/domain/eid-translation.ts
|
|
13
|
+
const EID_MODELS = [
|
|
14
|
+
"action",
|
|
15
|
+
"card",
|
|
16
|
+
"collection",
|
|
17
|
+
"dashboard",
|
|
18
|
+
"dashboard-card",
|
|
19
|
+
"dashboard-tab",
|
|
20
|
+
"dataset",
|
|
21
|
+
"dimension",
|
|
22
|
+
"document",
|
|
23
|
+
"measure",
|
|
24
|
+
"metric",
|
|
25
|
+
"permissions-group",
|
|
26
|
+
"pulse",
|
|
27
|
+
"pulse-card",
|
|
28
|
+
"pulse-channel",
|
|
29
|
+
"segment",
|
|
30
|
+
"snippet",
|
|
31
|
+
"timeline",
|
|
32
|
+
"transform",
|
|
33
|
+
"user"
|
|
34
|
+
];
|
|
35
|
+
const EidModel = z.enum(EID_MODELS);
|
|
36
|
+
const EidTranslateInput = z.object({ entity_ids: z.partialRecord(EidModel, z.array(z.string().min(1)).min(1)) }).loose();
|
|
37
|
+
const EidTranslateEntry = z.object({
|
|
38
|
+
status: z.string(),
|
|
39
|
+
type: EidModel,
|
|
40
|
+
id: z.number().int().optional()
|
|
41
|
+
}).loose();
|
|
42
|
+
const EidTranslateResult = z.object({ entity_ids: z.record(z.string(), EidTranslateEntry) }).loose();
|
|
43
|
+
const EidTranslateResultCompact = EidTranslateResult.pick({ entity_ids: true }).strip();
|
|
44
|
+
const eidTranslateView = {
|
|
45
|
+
compactPick: EidTranslateResultCompact,
|
|
46
|
+
tableColumns: [{
|
|
47
|
+
key: "entity_ids",
|
|
48
|
+
label: "Translated"
|
|
49
|
+
}]
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
//#region src/commands/eid/translate.ts
|
|
54
|
+
var translate_default = defineMetabaseCommand({
|
|
55
|
+
meta: {
|
|
56
|
+
name: "translate",
|
|
57
|
+
description: "Translate entity ids (EIDs) to numeric ids"
|
|
58
|
+
},
|
|
59
|
+
args: {
|
|
60
|
+
...outputFlags,
|
|
61
|
+
...profileFlag,
|
|
62
|
+
...connectionFlags,
|
|
63
|
+
...bodyInputFlags,
|
|
64
|
+
model: {
|
|
65
|
+
type: "string",
|
|
66
|
+
description: `Entity model for shortcut form: ${EID_MODELS.join(" | ")}`
|
|
67
|
+
},
|
|
68
|
+
eids: {
|
|
69
|
+
type: "string",
|
|
70
|
+
description: "Comma-separated EIDs (used with --model as a shortcut)"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
outputSchema: EidTranslateResult,
|
|
74
|
+
examples: [
|
|
75
|
+
"metabase eid translate --model card --eids abc123XYZ,def456ABC",
|
|
76
|
+
"metabase eid translate --file translate.json",
|
|
77
|
+
"metabase eid translate --body '{\"entity_ids\":{\"card\":[\"abc123XYZ\"]}}'"
|
|
78
|
+
],
|
|
79
|
+
async run({ args, ctx, getClient }) {
|
|
80
|
+
const pair = requireBothOrNeither({
|
|
81
|
+
name: "--model",
|
|
82
|
+
value: args.model
|
|
83
|
+
}, {
|
|
84
|
+
name: "--eids",
|
|
85
|
+
value: args.eids
|
|
86
|
+
});
|
|
87
|
+
const body = pair ? EidTranslateInput.parse({ entity_ids: { [parseModel(pair.first)]: parseEids(pair.second) } }) : await readBody({
|
|
88
|
+
flag: args.body,
|
|
89
|
+
file: args.file
|
|
90
|
+
}, EidTranslateInput);
|
|
91
|
+
const client = await getClient();
|
|
92
|
+
const result = await client.requestParsed(EidTranslateResult, "/api/eid-translation/translate", {
|
|
93
|
+
method: "POST",
|
|
94
|
+
body
|
|
95
|
+
});
|
|
96
|
+
renderItem(result, eidTranslateView, ctx);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
function parseModel(raw) {
|
|
100
|
+
const result = EidModel.safeParse(raw);
|
|
101
|
+
if (!result.success) throw new ConfigError(`invalid --model: "${raw}" (expected one of: ${EID_MODELS.join(", ")})`);
|
|
102
|
+
return result.data;
|
|
103
|
+
}
|
|
104
|
+
function parseEids(raw) {
|
|
105
|
+
const parts = parseCsv(raw);
|
|
106
|
+
if (parts.length === 0) throw new ConfigError("--eids must contain at least one EID");
|
|
107
|
+
return parts;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
//#endregion
|
|
111
|
+
export { translate_default as default };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import "./package-DV6Asqim.mjs";
|
|
2
|
+
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
+
import { writeJson } from "./render-DXv-D6fU.mjs";
|
|
4
|
+
import { ConfigError } from "./predicates-DiIiS3k7.mjs";
|
|
5
|
+
import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
|
|
6
|
+
import { CollectionTreeNode } from "./collection-B3sPXRLs.mjs";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
|
|
9
|
+
//#region src/commands/collection/tree.ts
|
|
10
|
+
const CollectionTreeResponse = z.array(CollectionTreeNode);
|
|
11
|
+
var tree_default = defineMetabaseCommand({
|
|
12
|
+
meta: {
|
|
13
|
+
name: "tree",
|
|
14
|
+
description: "Fetch the collection hierarchy as a nested tree (JSON only)"
|
|
15
|
+
},
|
|
16
|
+
args: {
|
|
17
|
+
...outputFlags,
|
|
18
|
+
...profileFlag,
|
|
19
|
+
...connectionFlags
|
|
20
|
+
},
|
|
21
|
+
outputSchema: CollectionTreeResponse,
|
|
22
|
+
examples: ["metabase collection tree", "metabase collection tree --json"],
|
|
23
|
+
async run({ ctx, getClient }) {
|
|
24
|
+
if (ctx.format === "text") throw new ConfigError("collection tree output is JSON-only; --format text is not supported");
|
|
25
|
+
const client = await getClient();
|
|
26
|
+
const tree = await client.requestParsed(CollectionTreeResponse, "/api/collection/tree");
|
|
27
|
+
writeJson(tree);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { tree_default as default };
|
|
@@ -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 "./input-ikCiip6x.mjs";
|
|
6
|
+
import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
|
|
7
|
+
import { readBody } from "./body-rDrR-C1c.mjs";
|
|
8
|
+
import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
|
|
9
|
+
import { parseId } from "./parse-id-B38zTlYs.mjs";
|
|
10
|
+
import "./validate-DCYx6jdL.mjs";
|
|
11
|
+
import { MEASURE_DEFINITION_LABELS, preflightMbql5Query, skipValidateFlag } from "./validate-query-B07oGG4K.mjs";
|
|
12
|
+
import { Measure, MeasureUpdateInput, measureView } from "./measure-BEQfnLdN.mjs";
|
|
13
|
+
|
|
14
|
+
//#region src/commands/measure/update.ts
|
|
15
|
+
var update_default = defineMetabaseCommand({
|
|
16
|
+
meta: {
|
|
17
|
+
name: "update",
|
|
18
|
+
description: "Update a measure by id; body must include revision_message (audit-logged with the change). If definition is MBQL 5 (lib/type: mbql/query) it is pre-flight-validated against the same schema as `metabase query` (see `metabase query --print-schema`)"
|
|
19
|
+
},
|
|
20
|
+
args: {
|
|
21
|
+
...outputFlags,
|
|
22
|
+
...profileFlag,
|
|
23
|
+
...connectionFlags,
|
|
24
|
+
...bodyInputFlags,
|
|
25
|
+
...skipValidateFlag,
|
|
26
|
+
id: {
|
|
27
|
+
type: "positional",
|
|
28
|
+
description: "Measure id",
|
|
29
|
+
required: true
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
outputSchema: Measure,
|
|
33
|
+
examples: [
|
|
34
|
+
"cat patch.json | metabase measure update 1",
|
|
35
|
+
"metabase measure update 1 --file patch.json",
|
|
36
|
+
"metabase measure update 1 --body '{\"name\":\"renamed\",\"revision_message\":\"rename\"}'",
|
|
37
|
+
"metabase measure update 1 --file patch.json --skip-validate"
|
|
38
|
+
],
|
|
39
|
+
async run({ args, ctx, getClient }) {
|
|
40
|
+
const id = parseId(args.id);
|
|
41
|
+
const body = await readBody({
|
|
42
|
+
flag: args.body,
|
|
43
|
+
file: args.file
|
|
44
|
+
}, MeasureUpdateInput);
|
|
45
|
+
preflightMbql5Query(body.definition, MEASURE_DEFINITION_LABELS, { skip: args["skip-validate"] === true });
|
|
46
|
+
const client = await getClient();
|
|
47
|
+
const updated = await client.requestParsed(Measure, `/api/measure/${id}`, {
|
|
48
|
+
method: "PUT",
|
|
49
|
+
body
|
|
50
|
+
});
|
|
51
|
+
renderItem(updated, measureView, ctx);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
//#endregion
|
|
56
|
+
export { update_default as default };
|
|
@@ -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 "./input-ikCiip6x.mjs";
|
|
6
|
+
import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
|
|
7
|
+
import { readBody } from "./body-rDrR-C1c.mjs";
|
|
8
|
+
import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
|
|
9
|
+
import { parseId } from "./parse-id-B38zTlYs.mjs";
|
|
10
|
+
import "./validate-DCYx6jdL.mjs";
|
|
11
|
+
import { TRANSFORM_SOURCE_QUERY_LABELS, preflightMbql5Query, skipValidateFlag } from "./validate-query-B07oGG4K.mjs";
|
|
12
|
+
import { Transform, TransformUpdateInput, transformView } from "./transform-IEX4Mx3X.mjs";
|
|
13
|
+
|
|
14
|
+
//#region src/commands/transform/update.ts
|
|
15
|
+
var update_default = defineMetabaseCommand({
|
|
16
|
+
meta: {
|
|
17
|
+
name: "update",
|
|
18
|
+
description: "Update a transform by id; if source is provided with type `query` and source.query is MBQL 5 (lib/type: mbql/query) it is pre-flight-validated against the same schema as `metabase query` (see `metabase query --print-schema`)"
|
|
19
|
+
},
|
|
20
|
+
args: {
|
|
21
|
+
...outputFlags,
|
|
22
|
+
...profileFlag,
|
|
23
|
+
...connectionFlags,
|
|
24
|
+
...bodyInputFlags,
|
|
25
|
+
id: {
|
|
26
|
+
type: "positional",
|
|
27
|
+
description: "Transform id",
|
|
28
|
+
required: true
|
|
29
|
+
},
|
|
30
|
+
...skipValidateFlag
|
|
31
|
+
},
|
|
32
|
+
outputSchema: Transform,
|
|
33
|
+
examples: [
|
|
34
|
+
"cat patch.json | metabase transform update 1",
|
|
35
|
+
"metabase transform update 1 --file patch.json",
|
|
36
|
+
"metabase transform update 1 --body '{\"name\":\"renamed\"}'",
|
|
37
|
+
"metabase transform update 1 --file patch.json --skip-validate"
|
|
38
|
+
],
|
|
39
|
+
async run({ args, ctx, getClient }) {
|
|
40
|
+
const id = parseId(args.id);
|
|
41
|
+
const body = await readBody({
|
|
42
|
+
flag: args.body,
|
|
43
|
+
file: args.file
|
|
44
|
+
}, TransformUpdateInput);
|
|
45
|
+
if (body.source !== void 0 && body.source.type === "query") preflightMbql5Query(body.source.query, TRANSFORM_SOURCE_QUERY_LABELS, { skip: args["skip-validate"] === true });
|
|
46
|
+
const client = await getClient();
|
|
47
|
+
const updated = await client.requestParsed(Transform, `/api/transform/${id}`, {
|
|
48
|
+
method: "PUT",
|
|
49
|
+
body
|
|
50
|
+
});
|
|
51
|
+
renderItem(updated, transformView, ctx);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
//#endregion
|
|
56
|
+
export { update_default as default };
|
|
@@ -0,0 +1,52 @@
|
|
|
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 "./input-ikCiip6x.mjs";
|
|
6
|
+
import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
|
|
7
|
+
import { readBody } from "./body-rDrR-C1c.mjs";
|
|
8
|
+
import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
|
|
9
|
+
import { parseId } from "./parse-id-B38zTlYs.mjs";
|
|
10
|
+
import { Snippet, SnippetUpdateInput, snippetView } from "./snippet-Dw0Sjzkr.mjs";
|
|
11
|
+
|
|
12
|
+
//#region src/commands/snippet/update.ts
|
|
13
|
+
var update_default = defineMetabaseCommand({
|
|
14
|
+
meta: {
|
|
15
|
+
name: "update",
|
|
16
|
+
description: "Update a native query snippet by id"
|
|
17
|
+
},
|
|
18
|
+
args: {
|
|
19
|
+
...outputFlags,
|
|
20
|
+
...profileFlag,
|
|
21
|
+
...connectionFlags,
|
|
22
|
+
...bodyInputFlags,
|
|
23
|
+
id: {
|
|
24
|
+
type: "positional",
|
|
25
|
+
description: "Snippet id",
|
|
26
|
+
required: true
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
outputSchema: Snippet,
|
|
30
|
+
examples: [
|
|
31
|
+
"cat patch.json | metabase snippet update 1",
|
|
32
|
+
"metabase snippet update 1 --file patch.json",
|
|
33
|
+
"metabase snippet update 1 --body '{\"name\":\"renamed\"}'",
|
|
34
|
+
"metabase snippet update 1 --body '{\"archived\":true}'"
|
|
35
|
+
],
|
|
36
|
+
async run({ args, ctx, getClient }) {
|
|
37
|
+
const id = parseId(args.id);
|
|
38
|
+
const body = await readBody({
|
|
39
|
+
flag: args.body,
|
|
40
|
+
file: args.file
|
|
41
|
+
}, SnippetUpdateInput);
|
|
42
|
+
const client = await getClient();
|
|
43
|
+
const updated = await client.requestParsed(Snippet, `/api/native-query-snippet/${id}`, {
|
|
44
|
+
method: "PUT",
|
|
45
|
+
body
|
|
46
|
+
});
|
|
47
|
+
renderItem(updated, snippetView, ctx);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
export { update_default as default };
|
|
@@ -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 "./input-ikCiip6x.mjs";
|
|
6
|
+
import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-cwBS8wwK.mjs";
|
|
7
|
+
import { readBody } from "./body-rDrR-C1c.mjs";
|
|
8
|
+
import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
|
|
9
|
+
import { parseId } from "./parse-id-B38zTlYs.mjs";
|
|
10
|
+
import "./validate-DCYx6jdL.mjs";
|
|
11
|
+
import { SEGMENT_DEFINITION_LABELS, preflightMbql5Query, skipValidateFlag } from "./validate-query-B07oGG4K.mjs";
|
|
12
|
+
import { Segment, SegmentUpdateInput, segmentView } from "./segment-BMrUBz94.mjs";
|
|
13
|
+
|
|
14
|
+
//#region src/commands/segment/update.ts
|
|
15
|
+
var update_default = defineMetabaseCommand({
|
|
16
|
+
meta: {
|
|
17
|
+
name: "update",
|
|
18
|
+
description: "Update a segment by id; body must include revision_message (audit-logged with the change). If definition is MBQL 5 (lib/type: mbql/query) it is pre-flight-validated against the same schema as `metabase query` (see `metabase query --print-schema`)"
|
|
19
|
+
},
|
|
20
|
+
args: {
|
|
21
|
+
...outputFlags,
|
|
22
|
+
...profileFlag,
|
|
23
|
+
...connectionFlags,
|
|
24
|
+
...bodyInputFlags,
|
|
25
|
+
...skipValidateFlag,
|
|
26
|
+
id: {
|
|
27
|
+
type: "positional",
|
|
28
|
+
description: "Segment id",
|
|
29
|
+
required: true
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
outputSchema: Segment,
|
|
33
|
+
examples: [
|
|
34
|
+
"cat patch.json | metabase segment update 1",
|
|
35
|
+
"metabase segment update 1 --file patch.json",
|
|
36
|
+
"metabase segment update 1 --body '{\"name\":\"renamed\",\"revision_message\":\"rename\"}'",
|
|
37
|
+
"metabase segment update 1 --file patch.json --skip-validate"
|
|
38
|
+
],
|
|
39
|
+
async run({ args, ctx, getClient }) {
|
|
40
|
+
const id = parseId(args.id);
|
|
41
|
+
const body = await readBody({
|
|
42
|
+
flag: args.body,
|
|
43
|
+
file: args.file
|
|
44
|
+
}, SegmentUpdateInput);
|
|
45
|
+
preflightMbql5Query(body.definition, SEGMENT_DEFINITION_LABELS, { skip: args["skip-validate"] === true });
|
|
46
|
+
const client = await getClient();
|
|
47
|
+
const updated = await client.requestParsed(Segment, `/api/segment/${id}`, {
|
|
48
|
+
method: "PUT",
|
|
49
|
+
body
|
|
50
|
+
});
|
|
51
|
+
renderItem(updated, segmentView, ctx);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
//#endregion
|
|
56
|
+
export { update_default as default };
|