@metabase/cli 0.1.0 → 0.1.1
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--zwkmE1S.mjs +11 -0
- package/dist/add-collection-B1qe0D1U.mjs +54 -0
- package/dist/api-key-gzCbKDjL.mjs +13 -0
- package/dist/archive-CitmlD1e.mjs +39 -0
- package/dist/{archive-CsWeHXle.mjs → archive-CnhWegtR.mjs} +7 -4
- package/dist/archive-DQjBOXnx.mjs +44 -0
- package/dist/archive-Ni8-lQ1Y.mjs +44 -0
- package/dist/auth-BPjsrFxM.mjs +19 -0
- package/dist/{body-Dv9hQ0Qk.mjs → body-DRBgxS6-.mjs} +3 -2
- package/dist/{branches-BujtceGr.mjs → branches-C5Jcw8wu.mjs} +8 -6
- package/dist/cancel-Ca3r7Y6v.mjs +56 -0
- package/dist/{cancel-task-CT2xUMRg.mjs → cancel-task-C1-8vDKS.mjs} +9 -7
- package/dist/card-BGAy3eIb.mjs +20 -0
- package/dist/{card-CsXk8T6A.mjs → card-CAEZWixN.mjs} +34 -15
- package/dist/cards-CILfMPUP.mjs +37 -0
- package/dist/cli.mjs +33 -14
- package/dist/collection-B3sPXRLs.mjs +163 -0
- package/dist/collection-D8cnCB98.mjs +19 -0
- package/dist/create-3Z6rm-4O.mjs +44 -0
- package/dist/create-BsY5RrVY.mjs +44 -0
- package/dist/create-C4OCclBD.mjs +48 -0
- package/dist/create-COsD7Vzm.mjs +48 -0
- package/dist/create-CP8ou91U.mjs +125 -0
- package/dist/create-CeIi_QLj.mjs +66 -0
- package/dist/create-CqNw6PmR.mjs +50 -0
- package/dist/create-DE_5NrFy.mjs +48 -0
- package/dist/{create-B8ektf-R.mjs → create-MEhhhgMC.mjs} +8 -6
- package/dist/create-QxDmleKJ.mjs +48 -0
- package/dist/{create-branch-goZBTNnr.mjs → create-branch-CKMYaAHk.mjs} +9 -7
- package/dist/credentials-CwRKvdP2.mjs +85 -0
- package/dist/{current-task-DBjRNCFq.mjs → current-task-Dutjys16.mjs} +9 -7
- package/dist/dashboard-B4fVp392.mjs +20 -0
- package/dist/dashboard-CnMD04PQ.mjs +163 -0
- package/dist/database-BMTb0CzV.mjs +17 -0
- package/dist/database-Dvkfy3JM.mjs +51 -0
- package/dist/db-ACuuaEok.mjs +22 -0
- package/dist/{delete-8vGU35r3.mjs → delete-BMQZuVXZ.mjs} +7 -5
- package/dist/{delete-B27KLF5X.mjs → delete-BvcA4jPj.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-DUPjHKk4.mjs} +7 -5
- package/dist/deprovision-Bsc1S15j.mjs +61 -0
- package/dist/{dirty-aNUuph4I.mjs → dirty-CXcdoUhY.mjs} +8 -6
- package/dist/docker-D-ieBsP7.mjs +612 -0
- package/dist/eid-pvOsEMPZ.mjs +13 -0
- package/dist/{export-QDkuuzSE.mjs → export-BjGhLEOi.mjs} +30 -23
- package/dist/field-BI2bt8e9.mjs +18 -0
- package/dist/field-DciLbuv-.mjs +276 -0
- package/dist/fields-Do8HHm_T.mjs +38 -0
- package/dist/flag-pair-DtR1AiBQ.mjs +17 -0
- package/dist/{get-BGBIzMKY.mjs → get-BGFGWkH0.mjs} +6 -4
- package/dist/get-BmE_VHdl.mjs +36 -0
- package/dist/{get-DI_IJvgk.mjs → get-C7sshmqF.mjs} +6 -4
- package/dist/get-CObKBj2J.mjs +36 -0
- package/dist/get-Cq5U_Eep.mjs +40 -0
- package/dist/get-D4GUJBiX.mjs +41 -0
- package/dist/{get-COXHplHP.mjs → get-DFrsi77F.mjs} +7 -5
- package/dist/get-DczxeETg.mjs +53 -0
- package/dist/{get-Cl8-IauC.mjs → get-DeQa3ThJ.mjs} +7 -4
- package/dist/get-DhZ_dGUb.mjs +36 -0
- package/dist/{get-i6LWOByV.mjs → get-DzCVafyO.mjs} +6 -4
- package/dist/get-YCnVqq-z.mjs +49 -0
- package/dist/get-run-CTyW29s3.mjs +36 -0
- package/dist/git-sync-BOmT8HEU.mjs +28 -0
- package/dist/{has-remote-changes-hjKoQuRy.mjs → has-remote-changes-xX8vMVsX.mjs} +8 -6
- package/dist/{import-HJsSKRYx.mjs → import-CaAUNtXz.mjs} +11 -9
- package/dist/{input-Dojr-RTw.mjs → input-ikCiip6x.mjs} +2 -1
- package/dist/is-dirty-CPu-xqkW.mjs +10 -0
- package/dist/{is-dirty-1Qy7hiHB.mjs → is-dirty-mgxEwEk4.mjs} +5 -4
- package/dist/items-Cg67tdto.mjs +77 -0
- package/dist/{key-DBxPSFwi.mjs → key-NDEARu2L.mjs} +1 -1
- package/dist/{license-MoWse3ZI.mjs → license-CwKzVMD0.mjs} +3 -3
- package/dist/list-BqdNQ1nU.mjs +47 -0
- package/dist/list-BwGdD45N.mjs +32 -0
- package/dist/list-CfOVsAZz.mjs +55 -0
- package/dist/list-CpyNn1Zn.mjs +32 -0
- package/dist/list-CwwOoGLK.mjs +40 -0
- package/dist/{list-C_PRdL5e.mjs → list-DD8CQx8l.mjs} +7 -5
- package/dist/{list-Bk6RsbJl.mjs → list-DL-RWpIE.mjs} +5 -3
- package/dist/list-DLlq3FyS.mjs +61 -0
- package/dist/list-DdQ4jmUQ.mjs +52 -0
- package/dist/{list-C4Ajrw8f.mjs → list-DshbLoqR.mjs} +6 -3
- package/dist/{list-C8tdLOH5.mjs → list-DzTMpoBs.mjs} +5 -3
- package/dist/list-JgRtCzz3.mjs +32 -0
- package/dist/{list-CWt3fqrZ.mjs → list-WzgJcwB5.mjs} +5 -3
- package/dist/{login-C9WTwNn6.mjs → login-DJnmR2wX.mjs} +14 -5
- package/dist/{logout-oLszGCOg.mjs → logout-BMe_1Zp8.mjs} +7 -6
- package/dist/logs-CQxKJ3HG.mjs +58 -0
- package/dist/{manifest-CAdjQYH8.mjs → manifest-Dv5B9Blc.mjs} +3 -7
- package/dist/measure-BEQfnLdN.mjs +67 -0
- package/dist/measure-BGyYbtqO.mjs +19 -0
- package/dist/metadata-CLIALntn.mjs +37 -0
- package/dist/metadata-T-fNUWg_.mjs +38 -0
- package/dist/{package-BGfw4ZWJ.mjs → package-DBsS7a5x.mjs} +7 -1
- package/dist/paginate-CTSfuYiF.mjs +49 -0
- package/dist/parse-id-BUOZQqjp.mjs +12 -0
- package/dist/parse-ref-DGvh4aDn.mjs +17 -0
- package/dist/parse-schemas-BnW4T1_I.mjs +12 -0
- package/dist/{poll-ILanYysl.mjs → poll-DMmmZWvi.mjs} +2 -1
- package/dist/{poll-task-DbpsiQhl.mjs → poll-task-2Ckiwp8U.mjs} +8 -7
- package/dist/predicates-DiIiS3k7.mjs +153 -0
- package/dist/preflight-CC_g6EWU.mjs +91 -0
- package/dist/{prompt-DpT8yAVy.mjs → prompt-Bf3DQ-qE.mjs} +1 -1
- package/dist/provision-BUgWJWAV.mjs +77 -0
- package/dist/ps-BUNHygf-.mjs +10 -0
- package/dist/ps-Yv0JjLVN.mjs +78 -0
- package/dist/{query-PihYi-UZ.mjs → query-CzfbuG8a.mjs} +38 -13
- package/dist/query-UIebHmbT.mjs +90 -0
- package/dist/remove-BAUbcwuF.mjs +98 -0
- package/dist/{remove-B2hVYn1v.mjs → remove-CN2PNGTR.mjs} +6 -5
- package/dist/remove-collection-C6NxEh53.mjs +38 -0
- package/dist/render-DXv-D6fU.mjs +182 -0
- package/dist/rescan-values-CcB4F9qa.mjs +43 -0
- package/dist/revision-message-flag-CWQbKhdl.mjs +11 -0
- package/dist/{run-C2so6Qp6.mjs → run-BjXZtu_6.mjs} +27 -36
- package/dist/runs-CXx7l1NY.mjs +54 -0
- package/dist/{runtime-C9CEZhcn.mjs → runtime-D7jihh81.mjs} +425 -442
- package/dist/schema-tables-BCJT2DM_.mjs +45 -0
- package/dist/schemas-DlNpbn4H.mjs +47 -0
- package/dist/{search-CopOytXY.mjs → search-Dt-6mdHZ.mjs} +6 -19
- package/dist/segment-BMrUBz94.mjs +70 -0
- package/dist/segment-C52QNnSs.mjs +19 -0
- package/dist/{set-BcF7M1GQ.mjs → set-DCESWpi3.mjs} +6 -4
- package/dist/{set-CbibegpA.mjs → set-L7cuHjVZ.mjs} +8 -6
- package/dist/{setting-U3NtBMFo.mjs → setting-DysGAuYS.mjs} +3 -3
- package/dist/setup-_ypJDPAY.mjs +71 -0
- package/dist/snippet-Dw0Sjzkr.mjs +64 -0
- package/dist/snippet-vb3G9R8a.mjs +19 -0
- package/dist/start-BokXnb0V.mjs +350 -0
- package/dist/{stash-DOBbYozC.mjs → stash-CaGX6PfX.mjs} +9 -7
- package/dist/{status-Buf1ZbNR.mjs → status-BaX9vedb.mjs} +10 -8
- package/dist/{status-CUcs8XBH.mjs → status-CyecXzN4.mjs} +4 -2
- package/dist/{status-D1F5XHae.mjs → status-RpVyPEty.mjs} +4 -2
- package/dist/stop-BRuF_Cg1.mjs +81 -0
- package/dist/summary-CpEOiOlZ.mjs +41 -0
- package/dist/sync-schema-4Cl4h8Jn.mjs +43 -0
- package/dist/table-BeMWuvzO.mjs +19 -0
- package/dist/{table-Cfk7oSvw.mjs → table-jljEqZ0R.mjs} +22 -9
- package/dist/transform-DwRc-w6y.mjs +24 -0
- package/dist/{transform-B5uRpg1G.mjs → transform-IEX4Mx3X.mjs} +56 -2
- package/dist/transform-job-BigWrctt.mjs +19 -0
- package/dist/{transform-job-C7QXWTVE.mjs → transform-job-Csr86muI.mjs} +7 -0
- package/dist/translate-DqLlXXUx.mjs +111 -0
- package/dist/tree-BT24nkLM.mjs +32 -0
- package/dist/update-BCXKQi2n.mjs +52 -0
- package/dist/{update-CL8tRbxr.mjs → update-BXbLmC2b.mjs} +9 -7
- package/dist/update-C1Frz9GR.mjs +52 -0
- package/dist/update-C5goGhNr.mjs +56 -0
- package/dist/update-CCOyB0iT.mjs +73 -0
- package/dist/update-D04NMueX.mjs +59 -0
- package/dist/update-D6WVtNV1.mjs +57 -0
- package/dist/update-DFR46LsB.mjs +56 -0
- package/dist/update-DyLItrpV.mjs +56 -0
- package/dist/update-dashcard-av0_PYeg.mjs +71 -0
- package/dist/update-mrgvQF4i.mjs +51 -0
- package/dist/url-x4wn_l3k.mjs +54 -0
- package/dist/uuid-BZHbti8B.mjs +47 -0
- package/dist/validate-DCYx6jdL.mjs +1496 -0
- package/dist/validate-query-B07oGG4K.mjs +37 -0
- package/dist/values-Be6i0Fs9.mjs +36 -0
- package/dist/{wait-Bugr9eXD.mjs → wait-BMqQD8k_.mjs} +10 -8
- package/dist/wait-CWizX_sR.mjs +19 -0
- package/dist/wait-flags-DO3ar2tf.mjs +35 -0
- package/dist/workspace-CG1xyJ86.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
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import "./package-DBsS7a5x.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-D7jihh81.mjs";
|
|
6
|
+
import { Collection, CollectionCompact, collectionView } from "./collection-B3sPXRLs.mjs";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
|
|
9
|
+
//#region src/commands/collection/list.ts
|
|
10
|
+
const CollectionApiList = z.array(Collection);
|
|
11
|
+
const CollectionListFilter = z.enum([
|
|
12
|
+
"all",
|
|
13
|
+
"archived",
|
|
14
|
+
"personal"
|
|
15
|
+
]);
|
|
16
|
+
const COLLECTION_LIST_QUERY = {
|
|
17
|
+
all: {},
|
|
18
|
+
archived: { archived: true },
|
|
19
|
+
personal: { "personal-only": true }
|
|
20
|
+
};
|
|
21
|
+
const CollectionListEnvelope = listEnvelopeSchema(CollectionCompact);
|
|
22
|
+
var list_default = defineMetabaseCommand({
|
|
23
|
+
meta: {
|
|
24
|
+
name: "list",
|
|
25
|
+
description: "List collections"
|
|
26
|
+
},
|
|
27
|
+
args: {
|
|
28
|
+
...outputFlags,
|
|
29
|
+
...profileFlag,
|
|
30
|
+
...connectionFlags,
|
|
31
|
+
filter: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: `Filter preset: ${CollectionListFilter.options.join("|")}`,
|
|
34
|
+
default: "all"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
outputSchema: CollectionListEnvelope,
|
|
38
|
+
examples: [
|
|
39
|
+
"metabase collection list",
|
|
40
|
+
"metabase collection list --json",
|
|
41
|
+
"metabase collection list --filter archived --json"
|
|
42
|
+
],
|
|
43
|
+
async run({ args, ctx, getClient }) {
|
|
44
|
+
const filter = CollectionListFilter.parse(args.filter);
|
|
45
|
+
const client = await getClient();
|
|
46
|
+
const items = await client.requestParsed(CollectionApiList, "/api/collection", { query: COLLECTION_LIST_QUERY[filter] });
|
|
47
|
+
renderList(wrapList(items), collectionView, ctx);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
export { list_default as default };
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import "./package-
|
|
1
|
+
import "./package-DBsS7a5x.mjs";
|
|
2
2
|
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
3
|
+
import { renderList } from "./render-DXv-D6fU.mjs";
|
|
4
|
+
import "./predicates-DiIiS3k7.mjs";
|
|
5
|
+
import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-D7jihh81.mjs";
|
|
6
|
+
import "./field-DciLbuv-.mjs";
|
|
7
|
+
import { Card, CardCompact, cardView } from "./card-CAEZWixN.mjs";
|
|
5
8
|
import { z } from "zod";
|
|
6
9
|
|
|
7
10
|
//#region src/commands/card/list.ts
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import "./package-
|
|
1
|
+
import "./package-DBsS7a5x.mjs";
|
|
2
2
|
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
3
|
+
import { renderList } from "./render-DXv-D6fU.mjs";
|
|
4
|
+
import "./predicates-DiIiS3k7.mjs";
|
|
5
|
+
import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-D7jihh81.mjs";
|
|
6
|
+
import { TransformJob, TransformJobCompact, transformJobView } from "./transform-job-Csr86muI.mjs";
|
|
5
7
|
import { z } from "zod";
|
|
6
8
|
|
|
7
9
|
//#region src/commands/transform-job/list.ts
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import "./package-DBsS7a5x.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-D7jihh81.mjs";
|
|
6
|
+
import { Segment, SegmentCompact, segmentView } from "./segment-BMrUBz94.mjs";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
|
|
9
|
+
//#region src/commands/segment/list.ts
|
|
10
|
+
const SegmentApiList = z.array(Segment);
|
|
11
|
+
const SegmentListEnvelope = listEnvelopeSchema(SegmentCompact);
|
|
12
|
+
var list_default = defineMetabaseCommand({
|
|
13
|
+
meta: {
|
|
14
|
+
name: "list",
|
|
15
|
+
description: "List segments"
|
|
16
|
+
},
|
|
17
|
+
args: {
|
|
18
|
+
...outputFlags,
|
|
19
|
+
...profileFlag,
|
|
20
|
+
...connectionFlags
|
|
21
|
+
},
|
|
22
|
+
outputSchema: SegmentListEnvelope,
|
|
23
|
+
examples: ["metabase segment list", "metabase segment list --json"],
|
|
24
|
+
async run({ ctx, getClient }) {
|
|
25
|
+
const client = await getClient();
|
|
26
|
+
const items = await client.requestParsed(SegmentApiList, "/api/segment");
|
|
27
|
+
renderList(wrapList(items), segmentView, ctx);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { list_default as default };
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import "./package-
|
|
1
|
+
import "./package-DBsS7a5x.mjs";
|
|
2
2
|
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
3
|
+
import { renderList } from "./render-DXv-D6fU.mjs";
|
|
4
|
+
import "./predicates-DiIiS3k7.mjs";
|
|
5
|
+
import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-D7jihh81.mjs";
|
|
6
|
+
import { Transform, TransformCompact, transformView } from "./transform-IEX4Mx3X.mjs";
|
|
5
7
|
import { z } from "zod";
|
|
6
8
|
|
|
7
9
|
//#region src/commands/transform/list.ts
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import "./package-
|
|
1
|
+
import "./package-DBsS7a5x.mjs";
|
|
2
2
|
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { readInput } from "./input-
|
|
3
|
+
import { renderItem, warn } from "./render-DXv-D6fU.mjs";
|
|
4
|
+
import { ConfigError, MetabaseError, errorMessage } from "./predicates-DiIiS3k7.mjs";
|
|
5
|
+
import { readInput } from "./input-ikCiip6x.mjs";
|
|
6
|
+
import { HttpError, clearRejection, connectionFlags, createClient, defineMetabaseCommand, normalizeUrl, outputFlags, profileFlag, readEnvCredentials, recordRejection, resolveProfileName, writeProfile } from "./runtime-D7jihh81.mjs";
|
|
7
|
+
import { promptPassword, promptText } from "./prompt-Bf3DQ-qE.mjs";
|
|
6
8
|
import { z } from "zod";
|
|
7
9
|
|
|
8
10
|
//#region src/domain/user.ts
|
|
@@ -112,7 +114,13 @@ var login_default = defineMetabaseCommand({
|
|
|
112
114
|
let authenticated = false;
|
|
113
115
|
if (!args["skip-verify"]) {
|
|
114
116
|
const result = await verifyCredentials(url, apiKey);
|
|
115
|
-
if (!result.ok)
|
|
117
|
+
if (!result.ok) {
|
|
118
|
+
await recordRejection(profileName, {
|
|
119
|
+
reason: result.message,
|
|
120
|
+
url
|
|
121
|
+
});
|
|
122
|
+
throw new ConfigError(`verification failed: ${result.message} — credentials were not saved for profile "${profileName}"`);
|
|
123
|
+
}
|
|
116
124
|
email = result.user.email;
|
|
117
125
|
authenticated = true;
|
|
118
126
|
}
|
|
@@ -120,6 +128,7 @@ var login_default = defineMetabaseCommand({
|
|
|
120
128
|
url,
|
|
121
129
|
apiKey
|
|
122
130
|
}, profileName);
|
|
131
|
+
await clearRejection(profileName);
|
|
123
132
|
if (location.backend === "file") warn(`warning: OS keychain unavailable; credentials stored as plaintext at ${location.path}`);
|
|
124
133
|
renderItem({
|
|
125
134
|
profile: profileName,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import "./package-
|
|
1
|
+
import "./package-DBsS7a5x.mjs";
|
|
2
2
|
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
3
|
+
import { renderItem } from "./render-DXv-D6fU.mjs";
|
|
4
|
+
import "./predicates-DiIiS3k7.mjs";
|
|
5
|
+
import { clearProfile, clearRejection, defineMetabaseCommand, outputFlags, profileFlag, resolveProfileName } from "./runtime-D7jihh81.mjs";
|
|
6
|
+
import { promptConfirm } from "./prompt-Bf3DQ-qE.mjs";
|
|
5
7
|
import { z } from "zod";
|
|
6
8
|
|
|
7
9
|
//#region src/commands/auth/logout.ts
|
|
@@ -45,8 +47,7 @@ var logout_default = defineMetabaseCommand({
|
|
|
45
47
|
examples: ["metabase auth logout --yes", "metabase auth logout --profile staging --yes"],
|
|
46
48
|
async run({ args, ctx }) {
|
|
47
49
|
const profileName = resolveProfileName(args.profile);
|
|
48
|
-
if (!args.yes) {
|
|
49
|
-
if (!process.stdin.isTTY) throw new ConfigError("--yes required to clear credentials non-interactively");
|
|
50
|
+
if (!args.yes && process.stdin.isTTY === true) {
|
|
50
51
|
const ok = await promptConfirm({
|
|
51
52
|
message: `Clear stored credentials for profile "${profileName}"?`,
|
|
52
53
|
initialValue: false
|
|
@@ -60,7 +61,7 @@ var logout_default = defineMetabaseCommand({
|
|
|
60
61
|
return;
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
|
-
const cleared = await clearProfile(profileName);
|
|
64
|
+
const [cleared] = await Promise.all([clearProfile(profileName), clearRejection(profileName)]);
|
|
64
65
|
renderItem({
|
|
65
66
|
profile: profileName,
|
|
66
67
|
cleared,
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import "./package-DBsS7a5x.mjs";
|
|
2
|
+
import "./command-augment-D9pI9Vbh.mjs";
|
|
3
|
+
import { ConfigError } from "./predicates-DiIiS3k7.mjs";
|
|
4
|
+
import { defineMetabaseCommand, outputFlags, parseInteger } from "./runtime-D7jihh81.mjs";
|
|
5
|
+
import { parseId } from "./parse-id-BUOZQqjp.mjs";
|
|
6
|
+
import "./poll-DMmmZWvi.mjs";
|
|
7
|
+
import { checkDockerReady, containerLifecycleStatus, containerNameFor, streamLogs } from "./docker-D-ieBsP7.mjs";
|
|
8
|
+
|
|
9
|
+
//#region src/commands/workspace/logs.ts
|
|
10
|
+
const DEFAULT_TAIL = 200;
|
|
11
|
+
var logs_default = defineMetabaseCommand({
|
|
12
|
+
meta: {
|
|
13
|
+
name: "logs",
|
|
14
|
+
description: "Stream the local container's logs (passthrough to `docker logs`)"
|
|
15
|
+
},
|
|
16
|
+
args: {
|
|
17
|
+
...outputFlags,
|
|
18
|
+
id: {
|
|
19
|
+
type: "positional",
|
|
20
|
+
description: "Workspace id",
|
|
21
|
+
required: true
|
|
22
|
+
},
|
|
23
|
+
follow: {
|
|
24
|
+
type: "boolean",
|
|
25
|
+
alias: "f",
|
|
26
|
+
description: "Follow log output (stream indefinitely; Ctrl-C to exit)",
|
|
27
|
+
default: false
|
|
28
|
+
},
|
|
29
|
+
tail: {
|
|
30
|
+
type: "string",
|
|
31
|
+
description: `Number of lines from the end of the logs (default: ${DEFAULT_TAIL})`,
|
|
32
|
+
default: String(DEFAULT_TAIL)
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
examples: [
|
|
36
|
+
"metabase workspace logs 1",
|
|
37
|
+
"metabase workspace logs 1 --follow",
|
|
38
|
+
"metabase workspace logs 1 --tail 500"
|
|
39
|
+
],
|
|
40
|
+
async run({ args }) {
|
|
41
|
+
const workspaceId = parseId(args.id);
|
|
42
|
+
const containerName = containerNameFor(workspaceId);
|
|
43
|
+
const tail = parseInteger(args.tail ?? String(DEFAULT_TAIL), {
|
|
44
|
+
name: "--tail",
|
|
45
|
+
min: 0
|
|
46
|
+
});
|
|
47
|
+
await checkDockerReady();
|
|
48
|
+
const status = await containerLifecycleStatus(containerName);
|
|
49
|
+
if (status === "missing") throw new ConfigError(`no container for workspace ${workspaceId} — run \`metabase workspace start ${workspaceId}\` first`);
|
|
50
|
+
await streamLogs(containerName, {
|
|
51
|
+
follow: args.follow === true,
|
|
52
|
+
tail
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
export { logs_default as default };
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { getMetabaseAugment } from "./command-augment-D9pI9Vbh.mjs";
|
|
2
|
+
import { writeJson } from "./render-DXv-D6fU.mjs";
|
|
3
|
+
import "./predicates-DiIiS3k7.mjs";
|
|
2
4
|
import { defineCommand } from "citty";
|
|
3
5
|
import { z } from "zod";
|
|
4
6
|
|
|
5
|
-
//#region src/output/manifest.ts
|
|
6
|
-
function writeManifest(manifest) {
|
|
7
|
-
process.stdout.write(JSON.stringify(manifest, null, 2) + "\n");
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
//#endregion
|
|
11
7
|
//#region src/runtime/manifest.ts
|
|
12
8
|
const ManifestArg = z.object({
|
|
13
9
|
name: z.string(),
|
|
@@ -115,7 +111,7 @@ function createManifestCommand(root) {
|
|
|
115
111
|
args: {},
|
|
116
112
|
async run() {
|
|
117
113
|
const manifest = await buildManifest(root);
|
|
118
|
-
|
|
114
|
+
writeJson(manifest);
|
|
119
115
|
}
|
|
120
116
|
});
|
|
121
117
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/domain/measure.ts
|
|
4
|
+
const Measure = z.object({
|
|
5
|
+
id: z.number().int(),
|
|
6
|
+
name: z.string(),
|
|
7
|
+
description: z.string().nullable(),
|
|
8
|
+
archived: z.boolean(),
|
|
9
|
+
table_id: z.number().int(),
|
|
10
|
+
definition: z.unknown(),
|
|
11
|
+
creator_id: z.number().int(),
|
|
12
|
+
entity_id: z.string().nullable(),
|
|
13
|
+
dimensions: z.array(z.unknown()).nullable(),
|
|
14
|
+
dimension_mappings: z.array(z.unknown()).nullable(),
|
|
15
|
+
definition_description: z.string().nullable().optional(),
|
|
16
|
+
result_column_name: z.string().nullable().optional(),
|
|
17
|
+
created_at: z.string(),
|
|
18
|
+
updated_at: z.string()
|
|
19
|
+
}).loose();
|
|
20
|
+
const MeasureCompact = Measure.pick({
|
|
21
|
+
id: true,
|
|
22
|
+
name: true,
|
|
23
|
+
description: true,
|
|
24
|
+
archived: true,
|
|
25
|
+
table_id: true
|
|
26
|
+
}).strip();
|
|
27
|
+
const measureView = {
|
|
28
|
+
compactPick: MeasureCompact,
|
|
29
|
+
tableColumns: [
|
|
30
|
+
{
|
|
31
|
+
key: "id",
|
|
32
|
+
label: "ID"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
key: "name",
|
|
36
|
+
label: "Name"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: "description",
|
|
40
|
+
label: "Description"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
key: "table_id",
|
|
44
|
+
label: "Table"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
key: "archived",
|
|
48
|
+
label: "Archived"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
};
|
|
52
|
+
const MeasureCreateInput = z.object({
|
|
53
|
+
name: z.string().min(1),
|
|
54
|
+
table_id: z.number().int().positive(),
|
|
55
|
+
definition: z.record(z.string(), z.unknown()),
|
|
56
|
+
description: z.string().nullable().optional()
|
|
57
|
+
}).loose();
|
|
58
|
+
const MeasureUpdateInput = z.object({
|
|
59
|
+
name: z.string().min(1).optional(),
|
|
60
|
+
definition: z.record(z.string(), z.unknown()).optional(),
|
|
61
|
+
revision_message: z.string().min(1),
|
|
62
|
+
archived: z.boolean().optional(),
|
|
63
|
+
description: z.string().nullable().optional()
|
|
64
|
+
}).loose();
|
|
65
|
+
|
|
66
|
+
//#endregion
|
|
67
|
+
export { Measure, MeasureCompact, MeasureCreateInput, MeasureUpdateInput, measureView };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/measure/index.ts
|
|
4
|
+
var measure_default = defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "measure",
|
|
7
|
+
description: "Inspect Metabase measures"
|
|
8
|
+
},
|
|
9
|
+
subCommands: {
|
|
10
|
+
list: () => import("./list-BwGdD45N.mjs").then((mod) => mod.default),
|
|
11
|
+
get: () => import("./get-CObKBj2J.mjs").then((mod) => mod.default),
|
|
12
|
+
create: () => import("./create-COsD7Vzm.mjs").then((mod) => mod.default),
|
|
13
|
+
update: () => import("./update-DFR46LsB.mjs").then((mod) => mod.default),
|
|
14
|
+
archive: () => import("./archive-Ni8-lQ1Y.mjs").then((mod) => mod.default)
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { measure_default as default };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import "./package-DBsS7a5x.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-D7jihh81.mjs";
|
|
6
|
+
import { parseId } from "./parse-id-BUOZQqjp.mjs";
|
|
7
|
+
import "./field-DciLbuv-.mjs";
|
|
8
|
+
import { TableQueryMetadata, tableView } from "./table-jljEqZ0R.mjs";
|
|
9
|
+
|
|
10
|
+
//#region src/commands/table/metadata.ts
|
|
11
|
+
var metadata_default = defineMetabaseCommand({
|
|
12
|
+
meta: {
|
|
13
|
+
name: "metadata",
|
|
14
|
+
description: "Get a table with its fields, FKs, and dimensions hydrated"
|
|
15
|
+
},
|
|
16
|
+
args: {
|
|
17
|
+
...outputFlags,
|
|
18
|
+
...profileFlag,
|
|
19
|
+
...connectionFlags,
|
|
20
|
+
id: {
|
|
21
|
+
type: "positional",
|
|
22
|
+
description: "Table id",
|
|
23
|
+
required: true
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
outputSchema: TableQueryMetadata,
|
|
27
|
+
examples: ["metabase table metadata 42", "metabase table metadata 42 --json"],
|
|
28
|
+
async run({ args, ctx, getClient }) {
|
|
29
|
+
const id = parseId(args.id);
|
|
30
|
+
const client = await getClient();
|
|
31
|
+
const table = await client.requestParsed(TableQueryMetadata, `/api/table/${id}/query_metadata`);
|
|
32
|
+
renderItem(table, tableView, ctx);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { metadata_default as default };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import "./package-DBsS7a5x.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-D7jihh81.mjs";
|
|
6
|
+
import { parseId } from "./parse-id-BUOZQqjp.mjs";
|
|
7
|
+
import "./field-DciLbuv-.mjs";
|
|
8
|
+
import "./table-jljEqZ0R.mjs";
|
|
9
|
+
import { Database, databaseView } from "./database-Dvkfy3JM.mjs";
|
|
10
|
+
|
|
11
|
+
//#region src/commands/db/metadata.ts
|
|
12
|
+
var metadata_default = defineMetabaseCommand({
|
|
13
|
+
meta: {
|
|
14
|
+
name: "metadata",
|
|
15
|
+
description: "Get a database with its tables and fields hydrated"
|
|
16
|
+
},
|
|
17
|
+
args: {
|
|
18
|
+
...outputFlags,
|
|
19
|
+
...profileFlag,
|
|
20
|
+
...connectionFlags,
|
|
21
|
+
id: {
|
|
22
|
+
type: "positional",
|
|
23
|
+
description: "Database id",
|
|
24
|
+
required: true
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
outputSchema: Database,
|
|
28
|
+
examples: ["metabase db metadata 1", "metabase db metadata 1 --json"],
|
|
29
|
+
async run({ args, ctx, getClient }) {
|
|
30
|
+
const id = parseId(args.id);
|
|
31
|
+
const client = await getClient();
|
|
32
|
+
const database = await client.requestParsed(Database, `/api/database/${id}/metadata`);
|
|
33
|
+
renderItem(database, databaseView, ctx);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
export { metadata_default as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region package.json
|
|
2
2
|
var name = "@metabase/cli";
|
|
3
|
-
var version = "0.1.
|
|
3
|
+
var version = "0.1.1";
|
|
4
4
|
var description = "Metabase CLI";
|
|
5
5
|
var license = "AGPL-3.0";
|
|
6
6
|
var repository = {
|
|
@@ -31,19 +31,25 @@ var scripts = {
|
|
|
31
31
|
"lint:fix": "oxlint --fix",
|
|
32
32
|
"format": "oxfmt",
|
|
33
33
|
"format:check": "oxfmt --check",
|
|
34
|
+
"sync:representations": "bun run scripts/sync-representations.ts",
|
|
34
35
|
"prepublishOnly": "tsdown && publint"
|
|
35
36
|
};
|
|
36
37
|
var dependencies = {
|
|
37
38
|
"@clack/prompts": "^0.8.2",
|
|
38
39
|
"@napi-rs/keyring": "^1.3.0",
|
|
40
|
+
"ajv": "^8.17.1",
|
|
41
|
+
"ajv-formats": "^3.0.1",
|
|
39
42
|
"citty": "^0.2.2",
|
|
40
43
|
"cli-table3": "^0.6.5",
|
|
44
|
+
"yaml": "^2.8.4",
|
|
41
45
|
"zod": "^4.0.0"
|
|
42
46
|
};
|
|
43
47
|
var devDependencies = {
|
|
48
|
+
"@types/js-yaml": "^4.0.9",
|
|
44
49
|
"@types/node": "^22.10.0",
|
|
45
50
|
"execa": "^9.5.2",
|
|
46
51
|
"fast-check": "^4.7.0",
|
|
52
|
+
"js-yaml": "^4.1.0",
|
|
47
53
|
"oxfmt": "^0.47.0",
|
|
48
54
|
"oxlint": "^1.62.0",
|
|
49
55
|
"publint": "^0.3.0",
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/runtime/paginate.ts
|
|
4
|
+
const DEFAULT_PAGE_SIZE = 50;
|
|
5
|
+
async function* paginate(client, path, itemSchema, opts = {}) {
|
|
6
|
+
const envelopeSchema = paginatedEnvelopeSchema(itemSchema);
|
|
7
|
+
const pageSize = opts.pageSize ?? DEFAULT_PAGE_SIZE;
|
|
8
|
+
const baseQuery = opts.query ?? {};
|
|
9
|
+
const cap = opts.max;
|
|
10
|
+
let offset = 0;
|
|
11
|
+
let yielded = 0;
|
|
12
|
+
while (true) {
|
|
13
|
+
const remaining = cap === void 0 ? Number.POSITIVE_INFINITY : cap - yielded;
|
|
14
|
+
if (remaining <= 0) return;
|
|
15
|
+
const requested = Math.min(pageSize, remaining);
|
|
16
|
+
const envelope = await client.requestParsed(envelopeSchema, path, {
|
|
17
|
+
query: {
|
|
18
|
+
...baseQuery,
|
|
19
|
+
limit: requested,
|
|
20
|
+
offset
|
|
21
|
+
},
|
|
22
|
+
...opts.signal !== void 0 && { signal: opts.signal }
|
|
23
|
+
});
|
|
24
|
+
for (const item of envelope.data) {
|
|
25
|
+
yield item;
|
|
26
|
+
yielded += 1;
|
|
27
|
+
if (cap !== void 0 && yielded >= cap) return;
|
|
28
|
+
}
|
|
29
|
+
if (envelope.data.length < requested) return;
|
|
30
|
+
if (envelope.total !== void 0 && envelope.total !== null && offset + envelope.data.length >= envelope.total) return;
|
|
31
|
+
offset += envelope.data.length;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function collectPaginated(client, path, itemSchema, opts = {}) {
|
|
35
|
+
const items = [];
|
|
36
|
+
for await (const item of paginate(client, path, itemSchema, opts)) items.push(item);
|
|
37
|
+
return items;
|
|
38
|
+
}
|
|
39
|
+
function paginatedEnvelopeSchema(itemSchema) {
|
|
40
|
+
return z.object({
|
|
41
|
+
data: z.array(itemSchema),
|
|
42
|
+
total: z.number().int().nonnegative().nullable().optional(),
|
|
43
|
+
limit: z.number().int().nonnegative().optional(),
|
|
44
|
+
offset: z.number().int().nonnegative().optional()
|
|
45
|
+
}).passthrough();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
export { collectPaginated };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ConfigError } from "./predicates-DiIiS3k7.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/collection/parse-ref.ts
|
|
4
|
+
const SPECIAL_TOKENS = new Set(["root", "trash"]);
|
|
5
|
+
const POSITIVE_INTEGER_PATTERN = /^[1-9]\d*$/;
|
|
6
|
+
const NANO_ID_PATTERN = /^[A-Za-z0-9_-]{21}$/;
|
|
7
|
+
const FORMAT_HINT = "expected integer, \"root\", \"trash\", or 21-char entity id";
|
|
8
|
+
function parseCollectionRef(raw) {
|
|
9
|
+
const trimmed = raw.trim();
|
|
10
|
+
if (trimmed === "") throw new ConfigError(`invalid id: ${JSON.stringify(trimmed)} (${FORMAT_HINT})`);
|
|
11
|
+
if (SPECIAL_TOKENS.has(trimmed)) return trimmed;
|
|
12
|
+
if (POSITIVE_INTEGER_PATTERN.test(trimmed) || NANO_ID_PATTERN.test(trimmed)) return trimmed;
|
|
13
|
+
throw new ConfigError(`invalid id: ${JSON.stringify(raw)} (${FORMAT_HINT})`);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { parseCollectionRef };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ConfigError } from "./predicates-DiIiS3k7.mjs";
|
|
2
|
+
import { parseCsv } from "./runtime-D7jihh81.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/commands/workspace/database/parse-schemas.ts
|
|
5
|
+
function parseSchemasCsv(raw) {
|
|
6
|
+
const parts = parseCsv(raw);
|
|
7
|
+
if (parts.length === 0) throw new ConfigError("--schemas must contain at least one schema name");
|
|
8
|
+
return parts;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
export { parseSchemasCsv };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { TimeoutError
|
|
1
|
+
import { TimeoutError } from "./predicates-DiIiS3k7.mjs";
|
|
2
|
+
import { combineAborts, throwIfAborted } from "./runtime-D7jihh81.mjs";
|
|
2
3
|
import { setTimeout } from "node:timers/promises";
|
|
3
4
|
|
|
4
5
|
//#region src/runtime/poll.ts
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { DEFAULT_INTERVAL_MS, DEFAULT_TIMEOUT_MS, pollUntil } from "./poll-
|
|
1
|
+
import { parseJsonOrPlain } from "./runtime-D7jihh81.mjs";
|
|
2
|
+
import { DEFAULT_INTERVAL_MS, DEFAULT_TIMEOUT_MS, pollUntil } from "./poll-DMmmZWvi.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
5
|
-
//#region src/domain/
|
|
5
|
+
//#region src/domain/git-sync.ts
|
|
6
6
|
const SyncTaskStatus = z.enum([
|
|
7
7
|
"running",
|
|
8
8
|
"successful",
|
|
@@ -109,7 +109,7 @@ const syncDirtyItemView = {
|
|
|
109
109
|
};
|
|
110
110
|
|
|
111
111
|
//#endregion
|
|
112
|
-
//#region src/commands/sync/poll-task.ts
|
|
112
|
+
//#region src/commands/git-sync/poll-task.ts
|
|
113
113
|
const TERMINAL_STATUSES = new Set([
|
|
114
114
|
"successful",
|
|
115
115
|
"errored",
|
|
@@ -132,7 +132,8 @@ const REMOTE_SYNC_PATHS = {
|
|
|
132
132
|
export: "/api/ee/remote-sync/export",
|
|
133
133
|
stash: "/api/ee/remote-sync/stash",
|
|
134
134
|
branches: "/api/ee/remote-sync/branches",
|
|
135
|
-
createBranch: "/api/ee/remote-sync/create-branch"
|
|
135
|
+
createBranch: "/api/ee/remote-sync/create-branch",
|
|
136
|
+
settings: "/api/ee/remote-sync/settings"
|
|
136
137
|
};
|
|
137
138
|
const SyncTaskIdle = z.object({ status: z.literal("idle") });
|
|
138
139
|
const SyncTaskOrIdle = z.union([SyncTask, SyncTaskIdle]);
|
|
@@ -173,7 +174,7 @@ async function fetchOptionalParsed(client, path, schema) {
|
|
|
173
174
|
});
|
|
174
175
|
if (response.status === 204) return null;
|
|
175
176
|
const text = await response.text();
|
|
176
|
-
return
|
|
177
|
+
return parseJsonOrPlain(text, response.headers.get("content-type"), schema, { source: response.url });
|
|
177
178
|
}
|
|
178
179
|
async function fetchCurrentTask(client) {
|
|
179
180
|
return await fetchOptionalParsed(client, REMOTE_SYNC_PATHS.currentTask, SyncTask);
|
|
@@ -187,7 +188,7 @@ async function pollSyncTask(client, opts) {
|
|
|
187
188
|
function throwIfFailedTask(final, verb) {
|
|
188
189
|
if (final === null || !isFailure(final.status)) return;
|
|
189
190
|
const detail = final.error_message ? `: ${final.error_message}` : "";
|
|
190
|
-
throw new Error(`sync ${verb} ${final.status}${detail}`);
|
|
191
|
+
throw new Error(`git-sync ${verb} ${final.status}${detail}`);
|
|
191
192
|
}
|
|
192
193
|
|
|
193
194
|
//#endregion
|