@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.
- package/LICENSE +661 -0
- package/README.md +762 -0
- package/dist/api-key-D9XxErQn.mjs +13 -0
- package/dist/archive-BPG5c88Y.mjs +38 -0
- package/dist/auth--Hpjwlaf.mjs +18 -0
- package/dist/body-DwU2s6Pg.mjs +19 -0
- package/dist/body-flags-7oqLhu5j.mjs +14 -0
- package/dist/branches-BbcoJXfp.mjs +41 -0
- package/dist/cancel-task-BDas45YO.mjs +29 -0
- package/dist/card-C31pGtBZ.mjs +113 -0
- package/dist/card-D4zZSPUb.mjs +19 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +61 -0
- package/dist/command-augment-D9pI9Vbh.mjs +11 -0
- package/dist/create-Bd_U1zWU.mjs +124 -0
- package/dist/create-CCzsCZMm.mjs +47 -0
- package/dist/create-CwVcoq0O.mjs +43 -0
- package/dist/create-DpnjQvPw.mjs +43 -0
- package/dist/create-_UOeEXAj.mjs +39 -0
- package/dist/create-branch-sDttBORB.mjs +54 -0
- package/dist/credentials-C0xKke5D.mjs +84 -0
- package/dist/current-task-BGt1mqaX.mjs +35 -0
- package/dist/database-4V1iiPEx.mjs +17 -0
- package/dist/database-BTX5qbSv.mjs +33 -0
- package/dist/db-Dm2u2ISJ.mjs +17 -0
- package/dist/delete-DRBTgyus.mjs +47 -0
- package/dist/delete-DUC_stoL.mjs +47 -0
- package/dist/delete-runtime-inOVw3IX.mjs +58 -0
- package/dist/delete-table-9Is631O_.mjs +47 -0
- package/dist/deprovision-BAMzZc6f.mjs +60 -0
- package/dist/dirty-CLjHbz6J.mjs +32 -0
- package/dist/docker-QWVMG2gl.mjs +605 -0
- package/dist/eid-BNhutC1U.mjs +13 -0
- package/dist/export-D2Anfu3p.mjs +97 -0
- package/dist/field-Dhs2AND3.mjs +13 -0
- package/dist/field-QwBMAWsq.mjs +76 -0
- package/dist/flag-pair-CWvvzDJ_.mjs +17 -0
- package/dist/get-2po1uv9i.mjs +35 -0
- package/dist/get-BHJA78zg.mjs +35 -0
- package/dist/get-CAPLfawI.mjs +35 -0
- package/dist/get-CAVVmdMX.mjs +49 -0
- package/dist/get-DDWpubE8.mjs +36 -0
- package/dist/get-DhIoNeOp.mjs +35 -0
- package/dist/get-qPOsuTPw.mjs +35 -0
- package/dist/has-remote-changes-DAL5jetW.mjs +63 -0
- package/dist/import-CUMxUfSF.mjs +92 -0
- package/dist/input-BNqSFl38.mjs +33 -0
- package/dist/is-dirty-B10S6MG0.mjs +35 -0
- package/dist/is-dirty-CUuq-aB6.mjs +9 -0
- package/dist/key-CyhOpgWt.mjs +12 -0
- package/dist/license-DtsGJi3l.mjs +17 -0
- package/dist/list-B8s7Qnzk.mjs +31 -0
- package/dist/list-C5MGydGU.mjs +31 -0
- package/dist/list-DeFGwhhJ.mjs +60 -0
- package/dist/list-OBx5B3gd.mjs +39 -0
- package/dist/list-Y7iGsOfE.mjs +31 -0
- package/dist/list-evtQS7jl.mjs +39 -0
- package/dist/list-qetY9OIN.mjs +31 -0
- package/dist/login-Dqw9ZtCx.mjs +172 -0
- package/dist/logout-DwYJ5OUi.mjs +74 -0
- package/dist/logs-B_lrY7Js.mjs +57 -0
- package/dist/manifest-wzEFG0JB.mjs +124 -0
- package/dist/package-t8dKf4m_.mjs +73 -0
- package/dist/parse-id-C1prc9US.mjs +12 -0
- package/dist/poll-D2sXM5rc.mjs +49 -0
- package/dist/poll-task-Byiunmaj.mjs +194 -0
- package/dist/prompt-fXeNtj0M.mjs +40 -0
- package/dist/provision-DC4_HWZD.mjs +80 -0
- package/dist/ps-1bZKIwWh.mjs +9 -0
- package/dist/ps-BiOrecEe.mjs +78 -0
- package/dist/query-BnGVGeM3.mjs +100 -0
- package/dist/remove-Bx48o-0S.mjs +62 -0
- package/dist/remove-DecoZzNd.mjs +97 -0
- package/dist/render-DlBijc5i.mjs +179 -0
- package/dist/run-D4NgvaRh.mjs +87 -0
- package/dist/runtime-DUgFfYkN.mjs +950 -0
- package/dist/search-4wKx5ug2.mjs +171 -0
- package/dist/set-BZnCRL4c.mjs +66 -0
- package/dist/set-DCjrmTFm.mjs +66 -0
- package/dist/setting-C4vQSqer.mjs +18 -0
- package/dist/setting-DM7pm7yh.mjs +55 -0
- package/dist/setup-Dqh9hN6l.mjs +70 -0
- package/dist/start-xXQypG5L.mjs +324 -0
- package/dist/stash-ZZkmW_V7.mjs +106 -0
- package/dist/status-9KAPIpX8.mjs +31 -0
- package/dist/status-DezF-PIM.mjs +63 -0
- package/dist/status-JH6BZppo.mjs +55 -0
- package/dist/stop-br-ZOnve.mjs +80 -0
- package/dist/sync-C7VOWD00.mjs +26 -0
- package/dist/table-BvAr2ixC.mjs +75 -0
- package/dist/table-D-Mb5Nvw.mjs +16 -0
- package/dist/transform-CqxZwhGs.mjs +21 -0
- package/dist/transform-DfVkUttP.mjs +137 -0
- package/dist/transform-job-DuB_OjhO.mjs +91 -0
- package/dist/transform-job-HjbqjEoP.mjs +19 -0
- package/dist/translate-DJxDVAE4.mjs +110 -0
- package/dist/update-CDtm71m2.mjs +50 -0
- package/dist/update-DYVeVjk2.mjs +76 -0
- package/dist/update-DxKlQ0hP.mjs +50 -0
- package/dist/url-DP88YHNo.mjs +53 -0
- package/dist/wait-Cj_8wu4y.mjs +52 -0
- package/dist/wait-DwZN3ZwR.mjs +19 -0
- package/dist/wait-flags-CjW4ogUJ.mjs +35 -0
- package/dist/workspace-CbwR0vX_.mjs +24 -0
- package/dist/workspace-Dr9lWU3D.mjs +72 -0
- package/dist/workspace-credentials-q5RRFMT8.mjs +139 -0
- package/package.json +62 -0
|
@@ -0,0 +1,39 @@
|
|
|
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 "./input-BNqSFl38.mjs";
|
|
6
|
+
import { readBody } from "./body-DwU2s6Pg.mjs";
|
|
7
|
+
import { bodyInputFlags } from "./body-flags-7oqLhu5j.mjs";
|
|
8
|
+
import { Transform, TransformCreateInput, transformView } from "./transform-DfVkUttP.mjs";
|
|
9
|
+
|
|
10
|
+
//#region src/commands/transform/create.ts
|
|
11
|
+
var create_default = defineMetabaseCommand({
|
|
12
|
+
meta: {
|
|
13
|
+
name: "create",
|
|
14
|
+
description: "Create a transform"
|
|
15
|
+
},
|
|
16
|
+
args: {
|
|
17
|
+
...outputFlags,
|
|
18
|
+
...profileFlag,
|
|
19
|
+
...connectionFlags,
|
|
20
|
+
...bodyInputFlags
|
|
21
|
+
},
|
|
22
|
+
outputSchema: Transform,
|
|
23
|
+
examples: ["cat transform.json | metabase transform create", "metabase transform create --file transform.json"],
|
|
24
|
+
async run({ args, ctx, getClient }) {
|
|
25
|
+
const body = await readBody({
|
|
26
|
+
flag: args.body,
|
|
27
|
+
file: args.file
|
|
28
|
+
}, TransformCreateInput);
|
|
29
|
+
const client = await getClient();
|
|
30
|
+
const created = await client.requestParsed(Transform, "/api/transform", {
|
|
31
|
+
method: "POST",
|
|
32
|
+
body
|
|
33
|
+
});
|
|
34
|
+
renderItem(created, transformView, ctx);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { create_default as default };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import "./package-t8dKf4m_.mjs";
|
|
2
|
+
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
+
import { renderItem } from "./render-DlBijc5i.mjs";
|
|
4
|
+
import { ConfigError, 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/create-branch.ts
|
|
10
|
+
const CreateBranchResult = z.object({
|
|
11
|
+
status: z.literal("success"),
|
|
12
|
+
message: z.string()
|
|
13
|
+
});
|
|
14
|
+
const createBranchView = {
|
|
15
|
+
compactPick: CreateBranchResult,
|
|
16
|
+
tableColumns: [{
|
|
17
|
+
key: "status",
|
|
18
|
+
label: "Status"
|
|
19
|
+
}, {
|
|
20
|
+
key: "message",
|
|
21
|
+
label: "Message"
|
|
22
|
+
}]
|
|
23
|
+
};
|
|
24
|
+
var create_branch_default = defineMetabaseCommand({
|
|
25
|
+
meta: {
|
|
26
|
+
name: "create-branch",
|
|
27
|
+
description: "Create a new branch on the git remote and switch sync to it"
|
|
28
|
+
},
|
|
29
|
+
args: {
|
|
30
|
+
...outputFlags,
|
|
31
|
+
...profileFlag,
|
|
32
|
+
...connectionFlags,
|
|
33
|
+
name: {
|
|
34
|
+
type: "positional",
|
|
35
|
+
description: "Branch name",
|
|
36
|
+
required: true
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
outputSchema: CreateBranchResult,
|
|
40
|
+
examples: ["metabase sync create-branch feat/dashboards", "metabase sync create-branch feat/x --json"],
|
|
41
|
+
async run({ args, ctx, getClient }) {
|
|
42
|
+
const name = args.name.trim();
|
|
43
|
+
if (name === "") throw new ConfigError("invalid name: branch name must not be blank");
|
|
44
|
+
const client = await getClient();
|
|
45
|
+
const result = await client.requestParsed(CreateBranchResult, REMOTE_SYNC_PATHS.createBranch, {
|
|
46
|
+
method: "POST",
|
|
47
|
+
body: { name }
|
|
48
|
+
});
|
|
49
|
+
renderItem(result, createBranchView, ctx);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
//#endregion
|
|
54
|
+
export { create_branch_default as default };
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import "./package-t8dKf4m_.mjs";
|
|
2
|
+
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
+
import { renderItem } from "./render-DlBijc5i.mjs";
|
|
4
|
+
import { defineMetabaseCommand, localUrl, outputFlags, parseJson } from "./runtime-DUgFfYkN.mjs";
|
|
5
|
+
import { parseId } from "./parse-id-C1prc9US.mjs";
|
|
6
|
+
import "./poll-D2sXM5rc.mjs";
|
|
7
|
+
import { checkDockerReady, readContainerCredentialsFile, requireWorkspaceContainerLocation } from "./docker-QWVMG2gl.mjs";
|
|
8
|
+
import { WorkspaceCredentials } from "./workspace-credentials-q5RRFMT8.mjs";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
|
|
11
|
+
//#region src/commands/workspace/credentials.ts
|
|
12
|
+
const WorkspaceCredentialsResult = z.object({
|
|
13
|
+
workspace_id: z.number().int().positive(),
|
|
14
|
+
url: z.string(),
|
|
15
|
+
email: z.string(),
|
|
16
|
+
password: z.string(),
|
|
17
|
+
api_key_name: z.string(),
|
|
18
|
+
api_key: z.string()
|
|
19
|
+
});
|
|
20
|
+
const credentialsView = {
|
|
21
|
+
compactPick: WorkspaceCredentialsResult,
|
|
22
|
+
tableColumns: [
|
|
23
|
+
{
|
|
24
|
+
key: "workspace_id",
|
|
25
|
+
label: "ID"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
key: "url",
|
|
29
|
+
label: "URL"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
key: "email",
|
|
33
|
+
label: "Email"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
key: "password",
|
|
37
|
+
label: "Password"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
key: "api_key_name",
|
|
41
|
+
label: "API Key Name"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: "api_key",
|
|
45
|
+
label: "API Key"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
};
|
|
49
|
+
const textDecoder = new TextDecoder("utf-8");
|
|
50
|
+
var credentials_default = defineMetabaseCommand({
|
|
51
|
+
meta: {
|
|
52
|
+
name: "credentials",
|
|
53
|
+
description: "Read the workspace child instance's admin credentials (email + password + API key) from the running container"
|
|
54
|
+
},
|
|
55
|
+
args: {
|
|
56
|
+
...outputFlags,
|
|
57
|
+
id: {
|
|
58
|
+
type: "positional",
|
|
59
|
+
description: "Workspace id",
|
|
60
|
+
required: true
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
outputSchema: WorkspaceCredentialsResult,
|
|
64
|
+
examples: ["metabase workspace credentials 1", "metabase workspace credentials 1 --json"],
|
|
65
|
+
async run({ args, ctx }) {
|
|
66
|
+
const workspaceId = parseId(args.id);
|
|
67
|
+
await checkDockerReady();
|
|
68
|
+
const { containerName, hostPort } = await requireWorkspaceContainerLocation(workspaceId);
|
|
69
|
+
const bytes = await readContainerCredentialsFile(workspaceId);
|
|
70
|
+
const credentials = parseJson(textDecoder.decode(bytes), WorkspaceCredentials, { source: `${containerName}:credentials.json` });
|
|
71
|
+
const result = {
|
|
72
|
+
workspace_id: workspaceId,
|
|
73
|
+
url: localUrl(hostPort),
|
|
74
|
+
email: credentials.user.email,
|
|
75
|
+
password: credentials.user.password,
|
|
76
|
+
api_key_name: credentials.api_key.name,
|
|
77
|
+
api_key: credentials.api_key.key
|
|
78
|
+
};
|
|
79
|
+
renderItem(result, credentialsView, ctx);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
//#endregion
|
|
84
|
+
export { credentials_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 { SyncTaskOrIdle, fetchCurrentTask, syncTaskIdleView, syncTaskView } from "./poll-task-Byiunmaj.mjs";
|
|
6
|
+
import "./poll-D2sXM5rc.mjs";
|
|
7
|
+
|
|
8
|
+
//#region src/commands/sync/current-task.ts
|
|
9
|
+
const CurrentTaskResult = SyncTaskOrIdle;
|
|
10
|
+
var current_task_default = defineMetabaseCommand({
|
|
11
|
+
meta: {
|
|
12
|
+
name: "current-task",
|
|
13
|
+
description: "Get the most recent sync task (or idle if none)"
|
|
14
|
+
},
|
|
15
|
+
args: {
|
|
16
|
+
...outputFlags,
|
|
17
|
+
...profileFlag,
|
|
18
|
+
...connectionFlags
|
|
19
|
+
},
|
|
20
|
+
outputSchema: CurrentTaskResult,
|
|
21
|
+
examples: ["metabase sync current-task", "metabase sync current-task --json"],
|
|
22
|
+
async run({ ctx, getClient }) {
|
|
23
|
+
const client = await getClient();
|
|
24
|
+
const task = await fetchCurrentTask(client);
|
|
25
|
+
if (task === null) {
|
|
26
|
+
const idle = { status: "idle" };
|
|
27
|
+
renderItem(idle, syncTaskIdleView, ctx);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
renderItem(task, syncTaskView, ctx);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
//#endregion
|
|
35
|
+
export { current_task_default as default };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/workspace/database/index.ts
|
|
4
|
+
var database_default = defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "database",
|
|
7
|
+
description: "Manage databases provisioned to a workspace"
|
|
8
|
+
},
|
|
9
|
+
subCommands: {
|
|
10
|
+
provision: () => import("./provision-DC4_HWZD.mjs").then((mod) => mod.default),
|
|
11
|
+
update: () => import("./update-DYVeVjk2.mjs").then((mod) => mod.default),
|
|
12
|
+
deprovision: () => import("./deprovision-BAMzZc6f.mjs").then((mod) => mod.default)
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { database_default as default };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/domain/database.ts
|
|
4
|
+
const Database = z.object({
|
|
5
|
+
id: z.number().int(),
|
|
6
|
+
name: z.string(),
|
|
7
|
+
engine: z.string()
|
|
8
|
+
}).loose();
|
|
9
|
+
const DatabaseCompact = Database.pick({
|
|
10
|
+
id: true,
|
|
11
|
+
name: true,
|
|
12
|
+
engine: true
|
|
13
|
+
}).strip();
|
|
14
|
+
const databaseView = {
|
|
15
|
+
compactPick: DatabaseCompact,
|
|
16
|
+
tableColumns: [
|
|
17
|
+
{
|
|
18
|
+
key: "id",
|
|
19
|
+
label: "ID"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
key: "name",
|
|
23
|
+
label: "Name"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
key: "engine",
|
|
27
|
+
label: "Engine"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
export { Database, DatabaseCompact, databaseView };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/db/index.ts
|
|
4
|
+
var db_default = defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "db",
|
|
7
|
+
description: "Inspect Metabase databases",
|
|
8
|
+
alias: "database"
|
|
9
|
+
},
|
|
10
|
+
subCommands: {
|
|
11
|
+
list: () => import("./list-evtQS7jl.mjs").then((m) => m.default),
|
|
12
|
+
get: () => import("./get-2po1uv9i.mjs").then((m) => m.default)
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { db_default as default };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import "./package-t8dKf4m_.mjs";
|
|
2
|
+
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
+
import "./render-DlBijc5i.mjs";
|
|
4
|
+
import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
|
|
5
|
+
import { parseId } from "./parse-id-C1prc9US.mjs";
|
|
6
|
+
import "./prompt-fXeNtj0M.mjs";
|
|
7
|
+
import { DeleteResult, confirmAndDelete } from "./delete-runtime-inOVw3IX.mjs";
|
|
8
|
+
|
|
9
|
+
//#region src/commands/transform/delete.ts
|
|
10
|
+
var delete_default = defineMetabaseCommand({
|
|
11
|
+
meta: {
|
|
12
|
+
name: "delete",
|
|
13
|
+
description: "Delete a transform by id"
|
|
14
|
+
},
|
|
15
|
+
args: {
|
|
16
|
+
...outputFlags,
|
|
17
|
+
...profileFlag,
|
|
18
|
+
...connectionFlags,
|
|
19
|
+
yes: {
|
|
20
|
+
type: "boolean",
|
|
21
|
+
description: "Skip confirmation",
|
|
22
|
+
default: false
|
|
23
|
+
},
|
|
24
|
+
id: {
|
|
25
|
+
type: "positional",
|
|
26
|
+
description: "Transform id",
|
|
27
|
+
required: true
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
outputSchema: DeleteResult,
|
|
31
|
+
examples: ["metabase transform delete 1 --yes", "metabase transform delete 1"],
|
|
32
|
+
async run({ args, ctx, getClient }) {
|
|
33
|
+
const id = parseId(args.id);
|
|
34
|
+
const client = await getClient();
|
|
35
|
+
await confirmAndDelete({
|
|
36
|
+
id,
|
|
37
|
+
path: `/api/transform/${id}`,
|
|
38
|
+
yes: args.yes,
|
|
39
|
+
promptMessage: `Delete transform ${id}?`,
|
|
40
|
+
client,
|
|
41
|
+
ctx
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
export { delete_default as default };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import "./package-t8dKf4m_.mjs";
|
|
2
|
+
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
+
import "./render-DlBijc5i.mjs";
|
|
4
|
+
import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
|
|
5
|
+
import { parseId } from "./parse-id-C1prc9US.mjs";
|
|
6
|
+
import "./prompt-fXeNtj0M.mjs";
|
|
7
|
+
import { DeleteResult, confirmAndDelete } from "./delete-runtime-inOVw3IX.mjs";
|
|
8
|
+
|
|
9
|
+
//#region src/commands/transform-job/delete.ts
|
|
10
|
+
var delete_default = defineMetabaseCommand({
|
|
11
|
+
meta: {
|
|
12
|
+
name: "delete",
|
|
13
|
+
description: "Delete a transform job by id"
|
|
14
|
+
},
|
|
15
|
+
args: {
|
|
16
|
+
...outputFlags,
|
|
17
|
+
...profileFlag,
|
|
18
|
+
...connectionFlags,
|
|
19
|
+
yes: {
|
|
20
|
+
type: "boolean",
|
|
21
|
+
description: "Skip confirmation",
|
|
22
|
+
default: false
|
|
23
|
+
},
|
|
24
|
+
id: {
|
|
25
|
+
type: "positional",
|
|
26
|
+
description: "Transform job id",
|
|
27
|
+
required: true
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
outputSchema: DeleteResult,
|
|
31
|
+
examples: ["metabase transform-job delete 1 --yes", "metabase transform-job delete 1"],
|
|
32
|
+
async run({ args, ctx, getClient }) {
|
|
33
|
+
const id = parseId(args.id);
|
|
34
|
+
const client = await getClient();
|
|
35
|
+
await confirmAndDelete({
|
|
36
|
+
id,
|
|
37
|
+
path: `/api/transform-job/${id}`,
|
|
38
|
+
yes: args.yes,
|
|
39
|
+
promptMessage: `Delete transform job ${id}?`,
|
|
40
|
+
client,
|
|
41
|
+
ctx
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
export { delete_default as default };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { renderItem } from "./render-DlBijc5i.mjs";
|
|
2
|
+
import { ConfigError } from "./runtime-DUgFfYkN.mjs";
|
|
3
|
+
import { promptConfirm } from "./prompt-fXeNtj0M.mjs";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
|
|
6
|
+
//#region src/commands/delete-runtime.ts
|
|
7
|
+
const DeleteResult = z.object({
|
|
8
|
+
deleted: z.boolean(),
|
|
9
|
+
aborted: z.boolean(),
|
|
10
|
+
id: z.number().int()
|
|
11
|
+
});
|
|
12
|
+
const deleteResultView = {
|
|
13
|
+
compactPick: DeleteResult,
|
|
14
|
+
tableColumns: [
|
|
15
|
+
{
|
|
16
|
+
key: "id",
|
|
17
|
+
label: "ID"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
key: "deleted",
|
|
21
|
+
label: "Deleted"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
key: "aborted",
|
|
25
|
+
label: "Aborted"
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
};
|
|
29
|
+
async function confirmAndDelete(args) {
|
|
30
|
+
if (!args.yes) {
|
|
31
|
+
if (!process.stdin.isTTY) throw new ConfigError("--yes required to delete non-interactively");
|
|
32
|
+
const ok = await promptConfirm({
|
|
33
|
+
message: args.promptMessage,
|
|
34
|
+
initialValue: false
|
|
35
|
+
});
|
|
36
|
+
if (!ok) {
|
|
37
|
+
renderItem({
|
|
38
|
+
deleted: false,
|
|
39
|
+
aborted: true,
|
|
40
|
+
id: args.id
|
|
41
|
+
}, deleteResultView, args.ctx);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
await args.client.requestRaw(args.path, {
|
|
46
|
+
method: "DELETE",
|
|
47
|
+
expectContentType: "binary"
|
|
48
|
+
});
|
|
49
|
+
if (args.afterDelete) await args.afterDelete();
|
|
50
|
+
renderItem({
|
|
51
|
+
deleted: true,
|
|
52
|
+
aborted: false,
|
|
53
|
+
id: args.id
|
|
54
|
+
}, deleteResultView, args.ctx);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
export { DeleteResult, confirmAndDelete };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import "./package-t8dKf4m_.mjs";
|
|
2
|
+
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
+
import "./render-DlBijc5i.mjs";
|
|
4
|
+
import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
|
|
5
|
+
import { parseId } from "./parse-id-C1prc9US.mjs";
|
|
6
|
+
import "./prompt-fXeNtj0M.mjs";
|
|
7
|
+
import { DeleteResult, confirmAndDelete } from "./delete-runtime-inOVw3IX.mjs";
|
|
8
|
+
|
|
9
|
+
//#region src/commands/transform/delete-table.ts
|
|
10
|
+
var delete_table_default = defineMetabaseCommand({
|
|
11
|
+
meta: {
|
|
12
|
+
name: "delete-table",
|
|
13
|
+
description: "Drop a transform's materialized output table (keeps the transform definition)"
|
|
14
|
+
},
|
|
15
|
+
args: {
|
|
16
|
+
...outputFlags,
|
|
17
|
+
...profileFlag,
|
|
18
|
+
...connectionFlags,
|
|
19
|
+
yes: {
|
|
20
|
+
type: "boolean",
|
|
21
|
+
description: "Skip confirmation",
|
|
22
|
+
default: false
|
|
23
|
+
},
|
|
24
|
+
id: {
|
|
25
|
+
type: "positional",
|
|
26
|
+
description: "Transform id",
|
|
27
|
+
required: true
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
outputSchema: DeleteResult,
|
|
31
|
+
examples: ["metabase transform delete-table 1 --yes", "metabase transform delete-table 1"],
|
|
32
|
+
async run({ args, ctx, getClient }) {
|
|
33
|
+
const id = parseId(args.id);
|
|
34
|
+
const client = await getClient();
|
|
35
|
+
await confirmAndDelete({
|
|
36
|
+
id,
|
|
37
|
+
path: `/api/transform/${id}/table`,
|
|
38
|
+
yes: args.yes,
|
|
39
|
+
promptMessage: `Drop transform ${id}'s output table?`,
|
|
40
|
+
client,
|
|
41
|
+
ctx
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
export { delete_table_default as default };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import "./package-t8dKf4m_.mjs";
|
|
2
|
+
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
+
import "./render-DlBijc5i.mjs";
|
|
4
|
+
import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DUgFfYkN.mjs";
|
|
5
|
+
import { parseId } from "./parse-id-C1prc9US.mjs";
|
|
6
|
+
import "./prompt-fXeNtj0M.mjs";
|
|
7
|
+
import "./poll-D2sXM5rc.mjs";
|
|
8
|
+
import { DeleteResult, confirmAndDelete } from "./delete-runtime-inOVw3IX.mjs";
|
|
9
|
+
import { parseWaitFlags, waitFlags } from "./wait-flags-CjW4ogUJ.mjs";
|
|
10
|
+
import "./workspace-Dr9lWU3D.mjs";
|
|
11
|
+
import { waitForDatabaseGone } from "./wait-DwZN3ZwR.mjs";
|
|
12
|
+
|
|
13
|
+
//#region src/commands/workspace/database/deprovision.ts
|
|
14
|
+
var deprovision_default = defineMetabaseCommand({
|
|
15
|
+
meta: {
|
|
16
|
+
name: "deprovision",
|
|
17
|
+
description: "Deprovision a database from a workspace"
|
|
18
|
+
},
|
|
19
|
+
args: {
|
|
20
|
+
...outputFlags,
|
|
21
|
+
...profileFlag,
|
|
22
|
+
...connectionFlags,
|
|
23
|
+
...waitFlags,
|
|
24
|
+
yes: {
|
|
25
|
+
type: "boolean",
|
|
26
|
+
description: "Skip confirmation",
|
|
27
|
+
default: false
|
|
28
|
+
},
|
|
29
|
+
id: {
|
|
30
|
+
type: "positional",
|
|
31
|
+
description: "Workspace id",
|
|
32
|
+
required: true
|
|
33
|
+
},
|
|
34
|
+
"db-id": {
|
|
35
|
+
type: "positional",
|
|
36
|
+
description: "Database id",
|
|
37
|
+
required: true
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
outputSchema: DeleteResult,
|
|
41
|
+
examples: ["metabase workspace database deprovision 1 5 --yes", "metabase workspace database deprovision 1 5 --yes --wait"],
|
|
42
|
+
async run({ args, ctx, getClient }) {
|
|
43
|
+
const workspaceId = parseId(args.id);
|
|
44
|
+
const databaseId = parseId(args["db-id"], "db-id");
|
|
45
|
+
const wait = parseWaitFlags(args);
|
|
46
|
+
const client = await getClient();
|
|
47
|
+
await confirmAndDelete({
|
|
48
|
+
id: databaseId,
|
|
49
|
+
path: `/api/ee/workspace-manager/${workspaceId}/database/${databaseId}`,
|
|
50
|
+
yes: args.yes,
|
|
51
|
+
promptMessage: `Deprovision database ${databaseId} from workspace ${workspaceId}?`,
|
|
52
|
+
client,
|
|
53
|
+
ctx,
|
|
54
|
+
...wait.enabled ? { afterDelete: () => waitForDatabaseGone(client, workspaceId, databaseId, wait.schedule) } : {}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
export { deprovision_default as default };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import "./package-t8dKf4m_.mjs";
|
|
2
|
+
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
+
import { renderList } from "./render-DlBijc5i.mjs";
|
|
4
|
+
import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-DUgFfYkN.mjs";
|
|
5
|
+
import { REMOTE_SYNC_PATHS, SyncDirtyItem, SyncDirtyItemCompact, syncDirtyItemView } from "./poll-task-Byiunmaj.mjs";
|
|
6
|
+
import "./poll-D2sXM5rc.mjs";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
|
|
9
|
+
//#region src/commands/sync/dirty.ts
|
|
10
|
+
const SyncDirtyApiResponse = z.object({ dirty: z.array(SyncDirtyItem) });
|
|
11
|
+
const SyncDirtyListEnvelope = listEnvelopeSchema(SyncDirtyItemCompact);
|
|
12
|
+
var dirty_default = defineMetabaseCommand({
|
|
13
|
+
meta: {
|
|
14
|
+
name: "dirty",
|
|
15
|
+
description: "List objects with unsynced local changes"
|
|
16
|
+
},
|
|
17
|
+
args: {
|
|
18
|
+
...outputFlags,
|
|
19
|
+
...profileFlag,
|
|
20
|
+
...connectionFlags
|
|
21
|
+
},
|
|
22
|
+
outputSchema: SyncDirtyListEnvelope,
|
|
23
|
+
examples: ["metabase sync dirty", "metabase sync dirty --json"],
|
|
24
|
+
async run({ ctx, getClient }) {
|
|
25
|
+
const client = await getClient();
|
|
26
|
+
const response = await client.requestParsed(SyncDirtyApiResponse, REMOTE_SYNC_PATHS.dirty);
|
|
27
|
+
renderList(wrapList(response.dirty), syncDirtyItemView, ctx);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { dirty_default as default };
|