@metabase/cli 0.1.5 → 0.1.7
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 +128 -115
- package/dist/add-collection-C9BdVBs2.mjs +11 -0
- package/dist/{add-collection-C_iovi9i.mjs → add-collection-DQjTlDNF.mjs} +12 -5
- package/dist/archive-B3qiL-kK.mjs +40 -0
- package/dist/{archive-DdaP94H3.mjs → archive-BXzghEQX.mjs} +10 -9
- package/dist/{archive-WaEW85NB.mjs → archive-CBGKzEAl.mjs} +9 -8
- package/dist/{archive-BKPO8lEO.mjs → archive-CuVk8iwN.mjs} +10 -9
- package/dist/archive-DTN9tLGT.mjs +40 -0
- package/dist/{archive-Dvzrmdbk.mjs → archive-De8jzzq7.mjs} +10 -9
- package/dist/auth-D9eAyVoG.mjs +19 -0
- package/dist/{body-XtR7-uCO.mjs → body-tcURGnGh.mjs} +4 -4
- package/dist/{branches-XUY4JY-X.mjs → branches-CIGkjXIk.mjs} +11 -7
- package/dist/{cancel-BrUVO_ax.mjs → cancel-pPsvgJ0Z.mjs} +9 -8
- package/dist/{cancel-task-oXheTOB6.mjs → cancel-task-BLGE4UlL.mjs} +12 -8
- package/dist/capabilities-7e9MgquN.mjs +29 -0
- package/dist/card-DDDrWcDU.mjs +20 -0
- package/dist/{card-CQxvHeyP.mjs → card-ezYiriML.mjs} +1 -1
- package/dist/{cards-CONTTAG9.mjs → cards-Dq3nx_9n.mjs} +8 -7
- package/dist/cli.mjs +264 -44
- package/dist/collection-DkEvCDar.mjs +20 -0
- package/dist/{predicates-CGO17Q15.mjs → command-augment-BH9qgQ5u.mjs} +66 -14
- package/dist/{create-Cs2xntFG.mjs → create-9DBTkbMq.mjs} +18 -16
- package/dist/{create-kYpjobrq.mjs → create-B1dyuL9Y.mjs} +16 -10
- package/dist/create-BIphz0kO.mjs +52 -0
- package/dist/create-BcgoukG4.mjs +50 -0
- package/dist/create-BdPoSk_7.mjs +50 -0
- package/dist/{create-DZxUeqdf.mjs → create-BrUqxreg.mjs} +11 -10
- package/dist/create-DHscDhRd.mjs +50 -0
- package/dist/{create-Dq25vsMu.mjs → create-aPaUEGdr.mjs} +11 -10
- package/dist/{create-branch-D5u14AxL.mjs → create-branch-DGoc9CUU.mjs} +12 -8
- package/dist/{create-Ca9lIDwP.mjs → create-w3mQg9n4.mjs} +11 -10
- package/dist/{credentials-BIQ1cEzM.mjs → credentials-qryRLUed.mjs} +12 -11
- package/dist/current-task-DZM28rnr.mjs +40 -0
- package/dist/{dashboard-CnMD04PQ.mjs → dashboard-B4bn3z6t.mjs} +2 -1
- package/dist/dashboard-BLf1RZlk.mjs +21 -0
- package/dist/{database-vvig8k4x.mjs → database-BXiue1in.mjs} +1 -1
- package/dist/{database-BSvzYlRe.mjs → database-Ce1gOJF7.mjs} +3 -3
- package/dist/db-CWTFe_FZ.mjs +22 -0
- package/dist/{delete-VTAS9EUt.mjs → delete-BPaFdHZP.mjs} +11 -8
- package/dist/{delete-CUx6RT9e.mjs → delete-BrJOotpW.mjs} +11 -8
- package/dist/{remove-C6bS0Z6w.mjs → delete-FFj1xQWO.mjs} +25 -20
- package/dist/{delete-runtime-DfFMWJJ6.mjs → delete-runtime-uuYbd4k2.mjs} +9 -7
- package/dist/{delete-table-DzUneMKe.mjs → delete-table-CNupWUO0.mjs} +11 -8
- package/dist/{deprovision-CpJfGgCt.mjs → deprovision-BNr9fPDY.mjs} +18 -12
- package/dist/{dirty-nkAOXxgC.mjs → dirty-BCkNOY8c.mjs} +11 -7
- package/dist/{docker-D5FTIoD0.mjs → docker-Ds252Mwc.mjs} +4 -4
- package/dist/{translate-Cqsd0Px5.mjs → eid-CLY5X0Uw.mjs} +43 -23
- package/dist/error-ZsFeevV2.mjs +191 -0
- package/dist/{export-BWvY7X_G.mjs → export-CgHgWW3I.mjs} +20 -18
- package/dist/{field-B3gvaqpK.mjs → field-E0IBy4Uw.mjs} +12 -3
- package/dist/field-LL6W_c-c.mjs +18 -0
- package/dist/{fields-dH16G5UV.mjs → fields-RkRWU-u9.mjs} +9 -8
- package/dist/{get-D96QEU49.mjs → get-42tJ7BNp.mjs} +8 -7
- package/dist/{get-C6SR3A9t.mjs → get-B8l4t4Pz.mjs} +10 -9
- package/dist/{get-BnBRKHr7.mjs → get-B9kwSs6U.mjs} +8 -7
- package/dist/{get-7macOPAI.mjs → get-Bo4Cpd_c.mjs} +7 -7
- package/dist/{get-BcqxMVC1.mjs → get-C9O_aEGo.mjs} +8 -7
- package/dist/{get-CKxlhMy1.mjs → get-CRvbChoX.mjs} +8 -7
- package/dist/{get-B7i_nYJB.mjs → get-CTDqioaj.mjs} +8 -7
- package/dist/{get-D8e_RzZ0.mjs → get-CiZrZJLt.mjs} +10 -9
- package/dist/{get-B08K82JV.mjs → get-CvmqPN30.mjs} +8 -7
- package/dist/{get-CACaBFLt.mjs → get-DmzgSgrl.mjs} +9 -8
- package/dist/{get-R7OaVL_t.mjs → get-DsqGHNHN.mjs} +8 -7
- package/dist/get-run-CBwcRc8E.mjs +38 -0
- package/dist/{get-DNN1X2gN.mjs → get-sMpa-X4E.mjs} +9 -8
- package/dist/{get-DAWofnzK.mjs → get-y17zJMnU.mjs} +8 -7
- package/dist/git-sync-CrWTo3YX.mjs +28 -0
- package/dist/{has-remote-changes-BAnIXQXU.mjs → has-remote-changes-CfRidwXT.mjs} +13 -8
- package/dist/{import-CfdPEMng.mjs → import-BZV0Z2KR.mjs} +21 -18
- package/dist/{input-BQ-BZA8h.mjs → input-cMSEqISy.mjs} +7 -4
- package/dist/is-dirty-CPzOnnH6.mjs +10 -0
- package/dist/{is-dirty-CZWcG0vj.mjs → is-dirty-hKcB4OH9.mjs} +9 -4
- package/dist/{items-DqwahOKf.mjs → items-C94eW2Yd.mjs} +10 -9
- package/dist/key-vkNkH82H.mjs +17 -0
- package/dist/license-B37055sr.mjs +17 -0
- package/dist/{list-L63TpX1t.mjs → list-B0V7FeL2.mjs} +7 -7
- package/dist/{list-Bkd7Nbds.mjs → list-BFlzLGlw.mjs} +7 -6
- package/dist/{list-yxVAE1S7.mjs → list-BJXaGk-z.mjs} +7 -6
- package/dist/{list-BqNMpIXy.mjs → list-BS_Bxejg.mjs} +9 -8
- package/dist/{list-J277Qtki.mjs → list-BmHoYJr7.mjs} +7 -6
- package/dist/list-C-oZe1_p.mjs +173 -0
- package/dist/{list-ViT2KWhv.mjs → list-CF1pMN4S.mjs} +7 -6
- package/dist/{list-BpNU1neq.mjs → list-CU6sOfI-.mjs} +9 -7
- package/dist/{list-oftHLFbE.mjs → list-CqN4gvCk.mjs} +9 -7
- package/dist/{list-DBOYoJtA.mjs → list-DUXdt0XI.mjs} +10 -6
- package/dist/{list-D41gfkKb.mjs → list-DfDZr55C.mjs} +10 -8
- package/dist/{list-vF4EneaE.mjs → list-DrINpVLM.mjs} +7 -6
- package/dist/{list-DJcGwJ4W.mjs → list-DuSoEk_J.mjs} +9 -8
- package/dist/{list-CQkDqphl.mjs → list-HS15y_WN.mjs} +7 -6
- package/dist/login-enh9Yimb.mjs +181 -0
- package/dist/{logout-DD4q5whi.mjs → logout-BWLPLDh8.mjs} +13 -11
- package/dist/{logs-Ci3mJE2z.mjs → logs-Cu3QtvPs.mjs} +9 -8
- package/dist/{manifest-CGM7XNLC.mjs → manifest-BNh0Lw6p.mjs} +15 -15
- package/dist/{measure-BEQfnLdN.mjs → measure-Bt3InQsA.mjs} +2 -2
- package/dist/measure-CDlEPFtB.mjs +19 -0
- package/dist/{metadata-BDat-jN9.mjs → metadata-BTTEBWdS.mjs} +10 -9
- package/dist/{metadata-29_qlqbz.mjs → metadata-D2TxboMm.mjs} +9 -8
- package/dist/parse-enum-CrEWOhuY.mjs +11 -0
- package/dist/{parse-id-CysSaCbf.mjs → parse-id-0_tOPvfI.mjs} +1 -1
- package/dist/{parse-ref-D1yeDOn8.mjs → parse-ref-DKag6a6I.mjs} +1 -1
- package/dist/{parse-schemas-B10n01ez.mjs → parse-schemas-D-qVLl4z.mjs} +2 -2
- package/dist/{path-DLByFMMA.mjs → path-C8GrBdgT.mjs} +7 -7
- package/dist/{poll-p9Y7-JEQ.mjs → poll-4eoh5J0r.mjs} +2 -2
- package/dist/{poll-task-BQe0NvJZ.mjs → poll-task-51WRdugU.mjs} +19 -20
- package/dist/{preflight-CvFu0Cct.mjs → preflight-BhsErYz3.mjs} +4 -4
- package/dist/{process-zJeVJZTM.mjs → process-CM7Uu5q_.mjs} +1 -1
- package/dist/{prompt-DgDNy_Pc.mjs → prompt-CFKoys7k.mjs} +3 -1
- package/dist/provision-Chf86BF0.mjs +83 -0
- package/dist/{ps-BxQdpkr5.mjs → ps-CEYtsKBj.mjs} +5 -3
- package/dist/ps-CIDwaubS.mjs +11 -0
- package/dist/{query-C7zTlFJA.mjs → query-BBCAF-tG.mjs} +17 -14
- package/dist/{query-CFH4nBlK.mjs → query-DYVBnu9d.mjs} +12 -9
- package/dist/query-result-ABPLz6I4.mjs +19 -0
- package/dist/{remove-BuWxx3hY.mjs → remove-2yInufA6.mjs} +14 -12
- package/dist/remove-collection-CBAHz0Dk.mjs +44 -0
- package/dist/{render-DuoDUTVL.mjs → render-0_GsapXa.mjs} +51 -23
- package/dist/render-khznBlla.mjs +32 -0
- package/dist/{rescan-values-DabyRYQ_.mjs → rescan-values-cfTSNQZo.mjs} +12 -11
- package/dist/{run-Cl-9RtC4.mjs → run-qgdEJv-I.mjs} +17 -15
- package/dist/{runs-BH6s1Zao.mjs → runs-BFIIH4GL.mjs} +9 -8
- package/dist/{runtime-CDu6fykq.mjs → runtime-Duawf5lE.mjs} +653 -428
- package/dist/{schema-tables-i58wp_p3.mjs → schema-tables-C2xM3dho.mjs} +9 -8
- package/dist/{schemas-_m8RYRl9.mjs → schemas-BP7xiktH.mjs} +7 -6
- package/dist/{search-DObOsjbP.mjs → search-DYP3lOlq.mjs} +12 -16
- package/dist/segment-B6HnNGDs.mjs +19 -0
- package/dist/{set-CwVWeAsi.mjs → set-DpRQqdo7.mjs} +13 -11
- package/dist/{set-CJA9dpK6.mjs → set-Tt-ioa4L.mjs} +14 -13
- package/dist/setting-DUa96KF3.mjs +17 -0
- package/dist/{setup-DqBOe3HZ.mjs → setup-BPlllnim.mjs} +10 -9
- package/dist/{skills-CHU7uuDU.mjs → skills-BkregMyb.mjs} +2 -2
- package/dist/{skills-C2rTVj0n.mjs → skills-SqbPo0BI.mjs} +3 -3
- package/dist/snippet-dJ68tGsl.mjs +19 -0
- package/dist/{start-CfruN4wF.mjs → start-DJZA67WF.mjs} +70 -38
- package/dist/{stash-CWuXKSZq.mjs → stash-C89zNKxo.mjs} +21 -18
- package/dist/{status-D-RYZB9G.mjs → status-B1EJ_jv0.mjs} +16 -9
- package/dist/status-BNvFPemM.mjs +100 -0
- package/dist/status-D5wSqYV_.mjs +34 -0
- package/dist/{stop-D8Hr4cKX.mjs → stop-5rCLmkCQ.mjs} +16 -11
- package/dist/{summary-Lt2XLBK9.mjs → summary-Cihbx0Qs.mjs} +8 -7
- package/dist/{sync-schema-BDElSynU.mjs → sync-schema-C3odu0ZH.mjs} +12 -11
- package/dist/table-J2f0STnB.mjs +19 -0
- package/dist/{table-B-PYcgGb.mjs → table-qDD2kApF.mjs} +1 -1
- package/dist/{transform-job-BrhOLO4M.mjs → transform-job-DjhoJbiV.mjs} +1 -1
- package/dist/transform-job-OW4SDhsQ.mjs +19 -0
- package/dist/transform-q1LYWQtW.mjs +24 -0
- package/dist/{tree-DfvjDjmk.mjs → tree-mvq9gM9w.mjs} +7 -6
- package/dist/{update-DzgXF082.mjs → update-BoIiuC70.mjs} +16 -14
- package/dist/{update-qnFY5IuC.mjs → update-C0jP0AKT.mjs} +12 -11
- package/dist/{update-zp7pCBZH.mjs → update-CbBnHz42.mjs} +16 -14
- package/dist/{update-B0bjPqKC.mjs → update-CtOo3LsX.mjs} +13 -12
- package/dist/{update-CVxOxmt6.mjs → update-DCrOQ1PW.mjs} +17 -15
- package/dist/{update-BYduslhn.mjs → update-DEZayTb4.mjs} +20 -15
- package/dist/{update-BgcroYkF.mjs → update-DwRxdflw.mjs} +12 -11
- package/dist/{update-D9Z8cL7h.mjs → update-Rr4usmCo.mjs} +12 -11
- package/dist/{update-DuA8-cCq.mjs → update-VvKMnwsM.mjs} +16 -14
- package/dist/{update-dashcard-CQ3kmmss.mjs → update-dashcard-DFvIz8Qj.mjs} +12 -11
- package/dist/{update-CqnDMNtZ.mjs → update-tRparnUs.mjs} +18 -16
- package/dist/{upgrade-CIgTr2CG.mjs → upgrade-D-Rl_fH9.mjs} +16 -29
- package/dist/{url-B5MgZXzg.mjs → url-BB6jeNQj.mjs} +11 -10
- package/dist/{uuid-CJz9TmHI.mjs → uuid-BSVUk8u2.mjs} +8 -6
- package/dist/{validate-CB0bu50i.mjs → validate-dPEOnOf8.mjs} +2 -1
- package/dist/{validate-query-CavIA0Q2.mjs → validate-query-CYvOP8Ld.mjs} +3 -3
- package/dist/values-D1RJE4H6.mjs +45 -0
- package/dist/verify-A7BWfBPZ.mjs +79 -0
- package/dist/{wait-BFqBlg0y.mjs → wait-B17I_pWy.mjs} +2 -2
- package/dist/{wait-tDp9ZOou.mjs → wait-DK5QDZ8n.mjs} +14 -10
- package/dist/{wait-flags-CN-e9zNq.mjs → wait-flags-DlfbIXHw.mjs} +20 -9
- package/dist/{workspace-credentials-4lIxxz4g.mjs → workspace-credentials-8CBMQJFz.mjs} +2 -2
- package/dist/workspace-ri6r3zWo.mjs +25 -0
- package/dist/{yaml-ECiog374.mjs → yaml-Gv6wRFMF.mjs} +1 -1
- package/package.json +2 -1
- package/skill-data/core/SKILL.md +55 -453
- package/skill-data/git-sync/SKILL.md +1 -1
- package/skill-data/mbql/SKILL.md +156 -0
- package/skill-data/mbql/references/operators.md +253 -0
- package/skill-data/transform/SKILL.md +2 -40
- package/skill-data/viz/SKILL.md +137 -0
- package/skill-data/viz/references/settings.md +312 -0
- package/skill-data/workspace/SKILL.md +45 -63
- package/skills/metabase-cli/SKILL.md +5 -26
- package/dist/add-collection-ucsyAMkV.mjs +0 -11
- package/dist/api-key-BENHbTbV.mjs +0 -13
- package/dist/auth-DICRtJDy.mjs +0 -19
- package/dist/card-l-UmrUIo.mjs +0 -20
- package/dist/collection-oV0olVY-.mjs +0 -19
- package/dist/command-augment-D9pI9Vbh.mjs +0 -11
- package/dist/create-CrUq6sib.mjs +0 -125
- package/dist/create-D3Z878yr.mjs +0 -50
- package/dist/create-Le3Bqn7b.mjs +0 -48
- package/dist/create-V-q2rU0T.mjs +0 -48
- package/dist/create-swbIXdo5.mjs +0 -48
- package/dist/current-task-DCq7rk9V.mjs +0 -36
- package/dist/dashboard-hbKDd36X.mjs +0 -20
- package/dist/db-qVK6NsdB.mjs +0 -22
- package/dist/eid-CDFXX_6H.mjs +0 -13
- package/dist/field-C0LE7RQI.mjs +0 -18
- package/dist/flag-pair-Fmcdkrfx.mjs +0 -17
- package/dist/get-run-CwFuR4Uw.mjs +0 -36
- package/dist/git-sync-DV7YjniX.mjs +0 -28
- package/dist/is-dirty-LxVbm2C5.mjs +0 -10
- package/dist/key-CCJdVWKc.mjs +0 -12
- package/dist/license-Cb6ewEJO.mjs +0 -17
- package/dist/list-DV6CONhp.mjs +0 -55
- package/dist/login-D1nZwgKv.mjs +0 -192
- package/dist/measure-XhJuL77y.mjs +0 -19
- package/dist/package-DFUprkSZ.mjs +0 -85
- package/dist/provision-BP-b4Are.mjs +0 -77
- package/dist/ps-Bk6unzaX.mjs +0 -11
- package/dist/remove-collection-Bc4roCq0.mjs +0 -38
- package/dist/segment-DfxZdJmR.mjs +0 -19
- package/dist/setting-Czy4ws6h.mjs +0 -18
- package/dist/snippet-BCY4KHBU.mjs +0 -19
- package/dist/status-1oUnw803.mjs +0 -56
- package/dist/status-J9HIDcA5.mjs +0 -32
- package/dist/table-BwX3Ib5f.mjs +0 -19
- package/dist/transform-iaAi37V0.mjs +0 -24
- package/dist/transform-job-Bemonf82.mjs +0 -19
- package/dist/values-BXN6tx1i.mjs +0 -36
- package/dist/workspace-BBsT0H0g.mjs +0 -24
- /package/dist/{body-flags-BK7J6Daz.mjs → body-flags-D7q87Btw.mjs} +0 -0
- /package/dist/{collection-B3sPXRLs.mjs → collection-Bcy8cWYH.mjs} +0 -0
- /package/dist/{paginate-CTSfuYiF.mjs → paginate-BexjkjbY.mjs} +0 -0
- /package/dist/{revision-message-flag-oyq2xrDU.mjs → revision-message-flag-DY29-cgz.mjs} +0 -0
- /package/dist/{segment-BMrUBz94.mjs → segment-DhBmcr_E.mjs} +0 -0
- /package/dist/{setting-CTaAeMci.mjs → setting-BzCng1Ub.mjs} +0 -0
- /package/dist/{snippet-CSWqkslB.mjs → snippet-bi_0XbNT.mjs} +0 -0
- /package/dist/{transform-DR4ejuPM.mjs → transform-BKahefz_.mjs} +0 -0
- /package/dist/{workspace-DUfqhPm5.mjs → workspace-D8HtUN0y.mjs} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import "./
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import "./
|
|
8
|
-
import {
|
|
1
|
+
import "./command-augment-BH9qgQ5u.mjs";
|
|
2
|
+
import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
|
|
3
|
+
import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
|
|
4
|
+
import "./capabilities-7e9MgquN.mjs";
|
|
5
|
+
import { renderSummary } from "./render-0_GsapXa.mjs";
|
|
6
|
+
import "./field-E0IBy4Uw.mjs";
|
|
7
|
+
import { Card, cardView } from "./card-ezYiriML.mjs";
|
|
8
|
+
import { parseId } from "./parse-id-0_tOPvfI.mjs";
|
|
9
9
|
|
|
10
10
|
//#region src/commands/card/archive.ts
|
|
11
11
|
var archive_default = defineMetabaseCommand({
|
|
@@ -13,6 +13,7 @@ var archive_default = defineMetabaseCommand({
|
|
|
13
13
|
name: "archive",
|
|
14
14
|
description: "Archive (soft-delete) a card by id"
|
|
15
15
|
},
|
|
16
|
+
capabilities: { minVersion: 58 },
|
|
16
17
|
args: {
|
|
17
18
|
...outputFlags,
|
|
18
19
|
...profileFlag,
|
|
@@ -32,7 +33,7 @@ var archive_default = defineMetabaseCommand({
|
|
|
32
33
|
method: "PUT",
|
|
33
34
|
body: { archived: true }
|
|
34
35
|
});
|
|
35
|
-
|
|
36
|
+
renderSummary(updated, cardView, `Archived card ${updated.id} "${updated.name}".`, ctx);
|
|
36
37
|
}
|
|
37
38
|
});
|
|
38
39
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/auth/index.ts
|
|
4
|
+
var auth_default = defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "auth",
|
|
7
|
+
description: "Authenticate against a Metabase instance"
|
|
8
|
+
},
|
|
9
|
+
default: "login",
|
|
10
|
+
subCommands: {
|
|
11
|
+
login: () => import("./login-enh9Yimb.mjs").then((m) => m.default),
|
|
12
|
+
status: () => import("./status-BNvFPemM.mjs").then((m) => m.default),
|
|
13
|
+
list: () => import("./list-C-oZe1_p.mjs").then((m) => m.default),
|
|
14
|
+
logout: () => import("./logout-BWLPLDh8.mjs").then((m) => m.default)
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { auth_default as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ConfigError } from "./
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { ConfigError } from "./command-augment-BH9qgQ5u.mjs";
|
|
2
|
+
import { parseJson } from "./runtime-Duawf5lE.mjs";
|
|
3
|
+
import { DEFAULT_FLAG_NAME, readInput } from "./input-cMSEqISy.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/runtime/body.ts
|
|
6
6
|
async function readBody(sources, schema) {
|
|
@@ -10,7 +10,7 @@ async function readBody(sources, schema) {
|
|
|
10
10
|
}
|
|
11
11
|
function assertSingleSource(sources) {
|
|
12
12
|
const provided = [];
|
|
13
|
-
if (sources.flag !== void 0 && sources.flag !== "") provided.push(
|
|
13
|
+
if (sources.flag !== void 0 && sources.flag !== "") provided.push(DEFAULT_FLAG_NAME);
|
|
14
14
|
if (sources.file !== void 0 && sources.file !== "") provided.push("--file");
|
|
15
15
|
if (sources.positional !== void 0 && sources.positional !== "") provided.push("positional");
|
|
16
16
|
if (provided.length > 1) throw new ConfigError(`multiple body sources given (${provided.join(", ")}); pass exactly one`);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import "./
|
|
5
|
-
import {
|
|
6
|
-
import { REMOTE_SYNC_PATHS } from "./poll-task-
|
|
7
|
-
import "./poll-
|
|
1
|
+
import "./command-augment-BH9qgQ5u.mjs";
|
|
2
|
+
import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
|
|
3
|
+
import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
|
|
4
|
+
import "./capabilities-7e9MgquN.mjs";
|
|
5
|
+
import { renderList } from "./render-0_GsapXa.mjs";
|
|
6
|
+
import { REMOTE_SYNC_PATHS } from "./poll-task-51WRdugU.mjs";
|
|
7
|
+
import "./poll-4eoh5J0r.mjs";
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
|
|
10
10
|
//#region src/commands/git-sync/branches.ts
|
|
@@ -23,6 +23,10 @@ var branches_default = defineMetabaseCommand({
|
|
|
23
23
|
name: "branches",
|
|
24
24
|
description: "List branches on the configured git remote"
|
|
25
25
|
},
|
|
26
|
+
capabilities: {
|
|
27
|
+
minVersion: 60,
|
|
28
|
+
tokenFeature: "remote_sync"
|
|
29
|
+
},
|
|
26
30
|
args: {
|
|
27
31
|
...outputFlags,
|
|
28
32
|
...profileFlag,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import "./
|
|
5
|
-
import {
|
|
6
|
-
import { parseId } from "./parse-id-
|
|
1
|
+
import "./command-augment-BH9qgQ5u.mjs";
|
|
2
|
+
import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
|
|
3
|
+
import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
|
|
4
|
+
import "./capabilities-7e9MgquN.mjs";
|
|
5
|
+
import { renderSummary } from "./render-0_GsapXa.mjs";
|
|
6
|
+
import { parseId } from "./parse-id-0_tOPvfI.mjs";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
|
|
9
9
|
//#region src/commands/transform/cancel.ts
|
|
@@ -26,6 +26,7 @@ var cancel_default = defineMetabaseCommand({
|
|
|
26
26
|
name: "cancel",
|
|
27
27
|
description: "Cancel the current run for a transform"
|
|
28
28
|
},
|
|
29
|
+
capabilities: { minVersion: 59 },
|
|
29
30
|
args: {
|
|
30
31
|
...outputFlags,
|
|
31
32
|
...profileFlag,
|
|
@@ -45,10 +46,10 @@ var cancel_default = defineMetabaseCommand({
|
|
|
45
46
|
method: "POST",
|
|
46
47
|
expectContentType: "binary"
|
|
47
48
|
});
|
|
48
|
-
|
|
49
|
+
renderSummary({
|
|
49
50
|
canceled: true,
|
|
50
51
|
id
|
|
51
|
-
}, transformCancelView, ctx);
|
|
52
|
+
}, transformCancelView, `Canceled the current run for transform ${id}.`, ctx);
|
|
52
53
|
}
|
|
53
54
|
});
|
|
54
55
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import "./
|
|
5
|
-
import {
|
|
6
|
-
import { REMOTE_SYNC_PATHS, SyncTask, syncTaskView } from "./poll-task-
|
|
7
|
-
import "./poll-
|
|
1
|
+
import "./command-augment-BH9qgQ5u.mjs";
|
|
2
|
+
import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
|
|
3
|
+
import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
|
|
4
|
+
import "./capabilities-7e9MgquN.mjs";
|
|
5
|
+
import { renderSummary } from "./render-0_GsapXa.mjs";
|
|
6
|
+
import { REMOTE_SYNC_PATHS, SyncTask, syncTaskView } from "./poll-task-51WRdugU.mjs";
|
|
7
|
+
import "./poll-4eoh5J0r.mjs";
|
|
8
8
|
|
|
9
9
|
//#region src/commands/git-sync/cancel-task.ts
|
|
10
10
|
var cancel_task_default = defineMetabaseCommand({
|
|
@@ -12,6 +12,10 @@ var cancel_task_default = defineMetabaseCommand({
|
|
|
12
12
|
name: "cancel-task",
|
|
13
13
|
description: "Cancel the running git-sync task"
|
|
14
14
|
},
|
|
15
|
+
capabilities: {
|
|
16
|
+
minVersion: 60,
|
|
17
|
+
tokenFeature: "remote_sync"
|
|
18
|
+
},
|
|
15
19
|
args: {
|
|
16
20
|
...outputFlags,
|
|
17
21
|
...profileFlag,
|
|
@@ -22,7 +26,7 @@ var cancel_task_default = defineMetabaseCommand({
|
|
|
22
26
|
async run({ ctx, getClient }) {
|
|
23
27
|
const client = await getClient();
|
|
24
28
|
const task = await client.requestParsed(SyncTask, REMOTE_SYNC_PATHS.cancelTask, { method: "POST" });
|
|
25
|
-
|
|
29
|
+
renderSummary(task, syncTaskView, `Requested cancellation of ${task.sync_task_type} task #${task.id}.`, ctx);
|
|
26
30
|
}
|
|
27
31
|
});
|
|
28
32
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/runtime/predicates.ts
|
|
4
|
+
function isPlainObject(value) {
|
|
5
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
//#region src/output/notice.ts
|
|
10
|
+
function warn(message) {
|
|
11
|
+
process.stderr.write(message + "\n");
|
|
12
|
+
}
|
|
13
|
+
function listTruncationNotice(bytes) {
|
|
14
|
+
return `… cut at ${bytes} bytes; rerun with --max-bytes 0`;
|
|
15
|
+
}
|
|
16
|
+
function itemOversizeMessage(bytes, maxBytes) {
|
|
17
|
+
return `output is ${bytes} bytes, over the ${maxBytes}-byte --max-bytes cap; narrow with --fields, or pass --max-bytes 0 to disable`;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
//#region src/runtime/capabilities.ts
|
|
22
|
+
const Capabilities = z.object({
|
|
23
|
+
minVersion: z.number(),
|
|
24
|
+
tokenFeature: z.string().optional()
|
|
25
|
+
});
|
|
26
|
+
const BASELINE_CAPABILITIES = Object.freeze({ minVersion: 58 });
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
export { BASELINE_CAPABILITIES, Capabilities, isPlainObject, itemOversizeMessage, listTruncationNotice, warn };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/card/index.ts
|
|
4
|
+
var card_default = defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "card",
|
|
7
|
+
description: "Manage Metabase cards (questions, models, metrics)"
|
|
8
|
+
},
|
|
9
|
+
subCommands: {
|
|
10
|
+
list: () => import("./list-DfDZr55C.mjs").then((mod) => mod.default),
|
|
11
|
+
get: () => import("./get-sMpa-X4E.mjs").then((mod) => mod.default),
|
|
12
|
+
query: () => import("./query-DYVBnu9d.mjs").then((mod) => mod.default),
|
|
13
|
+
create: () => import("./create-BIphz0kO.mjs").then((mod) => mod.default),
|
|
14
|
+
update: () => import("./update-DCrOQ1PW.mjs").then((mod) => mod.default),
|
|
15
|
+
archive: () => import("./archive-De8jzzq7.mjs").then((mod) => mod.default)
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { card_default as default };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import "./
|
|
5
|
-
import {
|
|
6
|
-
import { parseId } from "./parse-id-
|
|
7
|
-
import { DashboardDetail, DashcardCompact, dashcardView } from "./dashboard-
|
|
1
|
+
import "./command-augment-BH9qgQ5u.mjs";
|
|
2
|
+
import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
|
|
3
|
+
import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
|
|
4
|
+
import "./capabilities-7e9MgquN.mjs";
|
|
5
|
+
import { renderList } from "./render-0_GsapXa.mjs";
|
|
6
|
+
import { parseId } from "./parse-id-0_tOPvfI.mjs";
|
|
7
|
+
import { DashboardDetail, DashcardCompact, dashcardView } from "./dashboard-B4bn3z6t.mjs";
|
|
8
8
|
|
|
9
9
|
//#region src/commands/dashboard/cards.ts
|
|
10
10
|
const DashcardListEnvelope = listEnvelopeSchema(DashcardCompact);
|
|
@@ -13,6 +13,7 @@ var cards_default = defineMetabaseCommand({
|
|
|
13
13
|
name: "cards",
|
|
14
14
|
description: "List dashcards on a dashboard"
|
|
15
15
|
},
|
|
16
|
+
capabilities: { minVersion: 58 },
|
|
16
17
|
args: {
|
|
17
18
|
...outputFlags,
|
|
18
19
|
...profileFlag,
|
package/dist/cli.mjs
CHANGED
|
@@ -1,8 +1,55 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { ConfigError, flagConsumesValue, getMetabaseAugment, normalizeFlag, resolveCitty, toAliasArray } from "./command-augment-BH9qgQ5u.mjs";
|
|
3
|
+
import { connectionFlags, outputFlags, package_default, profileFlag, reportError } from "./error-ZsFeevV2.mjs";
|
|
4
4
|
import { defineCommand, renderUsage, runMain } from "citty";
|
|
5
5
|
|
|
6
|
+
//#region src/commands/global-flags.ts
|
|
7
|
+
const ARGUMENT_SEPARATOR = "--";
|
|
8
|
+
const NEGATION_PREFIX = "no-";
|
|
9
|
+
const GLOBAL_FLAG_ARGS = {
|
|
10
|
+
...outputFlags,
|
|
11
|
+
...profileFlag,
|
|
12
|
+
...connectionFlags
|
|
13
|
+
};
|
|
14
|
+
const GLOBAL_FLAG_NAMES = buildGlobalFlagNames();
|
|
15
|
+
function buildGlobalFlagNames() {
|
|
16
|
+
const names = new Set();
|
|
17
|
+
for (const [key, def] of Object.entries(GLOBAL_FLAG_ARGS)) {
|
|
18
|
+
names.add(normalizeFlag(key));
|
|
19
|
+
if ("alias" in def) for (const alias of toAliasArray(def.alias)) names.add(normalizeFlag(alias));
|
|
20
|
+
}
|
|
21
|
+
return names;
|
|
22
|
+
}
|
|
23
|
+
function isGlobalFlag(token) {
|
|
24
|
+
if (!token.startsWith("-") || token === ARGUMENT_SEPARATOR) return false;
|
|
25
|
+
const raw = token.includes("=") ? token.slice(0, token.indexOf("=")) : token;
|
|
26
|
+
const name = normalizeFlag(raw);
|
|
27
|
+
if (GLOBAL_FLAG_NAMES.has(name)) return true;
|
|
28
|
+
const bare = raw.replace(/^-+/, "");
|
|
29
|
+
if (bare.startsWith(NEGATION_PREFIX)) return GLOBAL_FLAG_NAMES.has(normalizeFlag(bare.slice(NEGATION_PREFIX.length)));
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
function hoistGlobalFlags(rawArgs) {
|
|
33
|
+
const leading = [];
|
|
34
|
+
let index = 0;
|
|
35
|
+
while (index < rawArgs.length) {
|
|
36
|
+
const token = rawArgs[index];
|
|
37
|
+
if (token === void 0 || !isGlobalFlag(token)) break;
|
|
38
|
+
leading.push(token);
|
|
39
|
+
index += 1;
|
|
40
|
+
if (flagConsumesValue(token, GLOBAL_FLAG_ARGS) && index < rawArgs.length) {
|
|
41
|
+
const value = rawArgs[index];
|
|
42
|
+
if (value !== void 0) {
|
|
43
|
+
leading.push(value);
|
|
44
|
+
index += 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (leading.length === 0) return [...rawArgs];
|
|
49
|
+
return [...rawArgs.slice(index), ...leading];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
6
53
|
//#region src/main.ts
|
|
7
54
|
const main = defineCommand({
|
|
8
55
|
meta: {
|
|
@@ -11,31 +58,29 @@ const main = defineCommand({
|
|
|
11
58
|
description: package_default.description
|
|
12
59
|
},
|
|
13
60
|
subCommands: {
|
|
14
|
-
auth: () => import("./auth-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
transform: () => import("./transform-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
skills: () => import("./skills-C2rTVj0n.mjs").then((mod) => mod.default),
|
|
38
|
-
__manifest: () => import("./manifest-CGM7XNLC.mjs").then((mod) => mod.createManifestCommand(main))
|
|
61
|
+
auth: () => import("./auth-D9eAyVoG.mjs").then((mod) => mod.default),
|
|
62
|
+
db: () => import("./db-CWTFe_FZ.mjs").then((mod) => mod.default),
|
|
63
|
+
table: () => import("./table-J2f0STnB.mjs").then((mod) => mod.default),
|
|
64
|
+
field: () => import("./field-LL6W_c-c.mjs").then((mod) => mod.default),
|
|
65
|
+
card: () => import("./card-DDDrWcDU.mjs").then((mod) => mod.default),
|
|
66
|
+
dashboard: () => import("./dashboard-BLf1RZlk.mjs").then((mod) => mod.default),
|
|
67
|
+
collection: () => import("./collection-DkEvCDar.mjs").then((mod) => mod.default),
|
|
68
|
+
transform: () => import("./transform-q1LYWQtW.mjs").then((mod) => mod.default),
|
|
69
|
+
"transform-job": () => import("./transform-job-OW4SDhsQ.mjs").then((mod) => mod.default),
|
|
70
|
+
setting: () => import("./setting-DUa96KF3.mjs").then((mod) => mod.default),
|
|
71
|
+
search: () => import("./search-DYP3lOlq.mjs").then((mod) => mod.default),
|
|
72
|
+
"git-sync": () => import("./git-sync-CrWTo3YX.mjs").then((mod) => mod.default),
|
|
73
|
+
workspace: () => import("./workspace-ri6r3zWo.mjs").then((mod) => mod.default),
|
|
74
|
+
setup: () => import("./setup-BPlllnim.mjs").then((mod) => mod.default),
|
|
75
|
+
snippet: () => import("./snippet-dJ68tGsl.mjs").then((mod) => mod.default),
|
|
76
|
+
segment: () => import("./segment-B6HnNGDs.mjs").then((mod) => mod.default),
|
|
77
|
+
measure: () => import("./measure-CDlEPFtB.mjs").then((mod) => mod.default),
|
|
78
|
+
eid: () => import("./eid-CLY5X0Uw.mjs").then((mod) => mod.default),
|
|
79
|
+
query: () => import("./query-BBCAF-tG.mjs").then((mod) => mod.default),
|
|
80
|
+
uuid: () => import("./uuid-BSVUk8u2.mjs").then((mod) => mod.default),
|
|
81
|
+
upgrade: () => import("./upgrade-D-Rl_fH9.mjs").then((mod) => mod.default),
|
|
82
|
+
skills: () => import("./skills-SqbPo0BI.mjs").then((mod) => mod.default),
|
|
83
|
+
__manifest: () => import("./manifest-BNh0Lw6p.mjs").then((mod) => mod.createManifestCommand(main))
|
|
39
84
|
}
|
|
40
85
|
});
|
|
41
86
|
var main_default = main;
|
|
@@ -43,38 +88,213 @@ var main_default = main;
|
|
|
43
88
|
//#endregion
|
|
44
89
|
//#region src/output/help.ts
|
|
45
90
|
const ANSI_ESC = String.fromCharCode(27);
|
|
46
|
-
const
|
|
91
|
+
const ANSI_PATTERN = new RegExp(`${ANSI_ESC}\\[[0-9;]*m`, "g");
|
|
92
|
+
const BREADCRUMB_SUFFIX = / \([^()]*\)\s*$/;
|
|
47
93
|
const TRAILING_WHITESPACE = /[ \t]+$/;
|
|
48
|
-
|
|
49
|
-
|
|
94
|
+
const ALIAS_PAIR = /-([a-z0-9]+(?:-[a-z0-9]+)+), --[A-Za-z0-9]+/g;
|
|
95
|
+
const USAGE_PREFIX = "USAGE ";
|
|
96
|
+
const OPTIONS_HEADER = "OPTIONS";
|
|
97
|
+
const LINE_PREFIX = " ";
|
|
98
|
+
const COLUMN_GAP = " ";
|
|
99
|
+
const COMMAND_PLACEHOLDER = "<command> [options]";
|
|
100
|
+
const MANIFEST_COMMAND = "__manifest";
|
|
101
|
+
const CLI_NAME = "mb";
|
|
102
|
+
const HELP_FLAG_SPEC = "-h, --help";
|
|
103
|
+
const HELP_FLAG_DESCRIPTION = "Show help for this command";
|
|
104
|
+
const GETTING_STARTED_HINT = `First time? Run \`${CLI_NAME} auth login\` to connect to a Metabase instance.`;
|
|
105
|
+
async function showUsage(cmd, parent, breadcrumb) {
|
|
106
|
+
const raw = (await renderUsage(cmd, parent)).replace(ANSI_PATTERN, "");
|
|
50
107
|
const lines = raw.split("\n").map((line) => line.replace(TRAILING_WHITESPACE, ""));
|
|
108
|
+
const cmdMeta = await resolveCitty(cmd.meta);
|
|
109
|
+
const parentMeta = parent === void 0 ? void 0 : await resolveCitty(parent.meta);
|
|
110
|
+
const cmdName = cmdMeta?.name ?? "";
|
|
111
|
+
const cittyName = parentMeta?.name ? `${parentMeta.name} ${cmdName}` : cmdName;
|
|
112
|
+
const hasSubCommands = Boolean(cmd.subCommands);
|
|
113
|
+
const isRoot = parent === void 0 && hasSubCommands;
|
|
114
|
+
const isManifest = cmdName === MANIFEST_COMMAND;
|
|
115
|
+
const augment = getMetabaseAugment(cmd);
|
|
116
|
+
const details = augment?.details ?? null;
|
|
117
|
+
const examples = augment?.examples ?? [];
|
|
118
|
+
const transformed = transformBody(lines, {
|
|
119
|
+
cittyName,
|
|
120
|
+
breadcrumb: breadcrumb ?? cittyName,
|
|
121
|
+
hasSubCommands
|
|
122
|
+
});
|
|
123
|
+
const body = withDetails(transformed, details).join("\n").trimEnd();
|
|
124
|
+
const sections = [body];
|
|
125
|
+
if (examples.length > 0) sections.push(renderExamples(examples));
|
|
126
|
+
if (isRoot) sections.push(GETTING_STARTED_HINT);
|
|
127
|
+
if (!isManifest) sections.push(renderSchemaHint());
|
|
128
|
+
process.stdout.write(sections.join("\n\n") + "\n");
|
|
129
|
+
}
|
|
130
|
+
function transformBody(lines, rewrite) {
|
|
131
|
+
const mapped = lines.map((line, index) => {
|
|
132
|
+
if (index === 0) return line.replace(BREADCRUMB_SUFFIX, "");
|
|
133
|
+
if (line.startsWith(USAGE_PREFIX)) return rewriteUsageLine(line, rewrite);
|
|
134
|
+
return fixAliasRow(line);
|
|
135
|
+
});
|
|
136
|
+
return injectHelpOption(mapped);
|
|
137
|
+
}
|
|
138
|
+
function rewriteUsageLine(line, rewrite) {
|
|
139
|
+
if (rewrite.hasSubCommands) return `${USAGE_PREFIX}${rewrite.breadcrumb} ${COMMAND_PLACEHOLDER}`;
|
|
140
|
+
const content = line.slice(USAGE_PREFIX.length);
|
|
141
|
+
if (!content.startsWith(rewrite.cittyName)) return line;
|
|
142
|
+
const rest = content.slice(rewrite.cittyName.length);
|
|
143
|
+
return `${USAGE_PREFIX}${rewrite.breadcrumb}${rest}`;
|
|
144
|
+
}
|
|
145
|
+
function fixAliasRow(line) {
|
|
146
|
+
return line.replace(ALIAS_PAIR, (match, kebab) => `--${kebab}`.padStart(match.length));
|
|
147
|
+
}
|
|
148
|
+
function injectHelpOption(lines) {
|
|
149
|
+
const headerIndex = lines.indexOf(OPTIONS_HEADER);
|
|
150
|
+
if (headerIndex < 0) return lines;
|
|
151
|
+
let firstRowIndex = headerIndex + 1;
|
|
152
|
+
while (firstRowIndex < lines.length && lines[firstRowIndex] === "") firstRowIndex += 1;
|
|
153
|
+
const sample = lines[firstRowIndex];
|
|
154
|
+
if (sample === void 0) return lines;
|
|
155
|
+
const layout = optionLayout(sample);
|
|
156
|
+
if (layout === null) return lines;
|
|
157
|
+
let endIndex = firstRowIndex;
|
|
158
|
+
while (endIndex < lines.length && lines[endIndex] !== "") endIndex += 1;
|
|
159
|
+
const helpRow = HELP_FLAG_SPEC.padStart(layout.flagEnd).padEnd(layout.descStart) + HELP_FLAG_DESCRIPTION;
|
|
160
|
+
return [
|
|
161
|
+
...lines.slice(0, endIndex),
|
|
162
|
+
helpRow,
|
|
163
|
+
...lines.slice(endIndex)
|
|
164
|
+
];
|
|
165
|
+
}
|
|
166
|
+
function optionLayout(row) {
|
|
167
|
+
const firstNonSpace = row.search(/\S/);
|
|
168
|
+
if (firstNonSpace < 0) return null;
|
|
169
|
+
const flagEnd = row.indexOf(COLUMN_GAP, firstNonSpace);
|
|
170
|
+
if (flagEnd < 0) return null;
|
|
171
|
+
const gapRemainder = row.slice(flagEnd).search(/\S/);
|
|
172
|
+
if (gapRemainder < 0) return null;
|
|
173
|
+
return {
|
|
174
|
+
flagEnd,
|
|
175
|
+
descStart: flagEnd + gapRemainder
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function withDetails(lines, details) {
|
|
179
|
+
if (details === null) return lines;
|
|
51
180
|
const [first, ...rest] = lines;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
181
|
+
if (first === void 0) return lines;
|
|
182
|
+
return [
|
|
183
|
+
first,
|
|
184
|
+
"",
|
|
185
|
+
details,
|
|
186
|
+
...rest
|
|
187
|
+
];
|
|
56
188
|
}
|
|
57
189
|
function renderExamples(examples) {
|
|
58
|
-
|
|
59
|
-
const lines = [
|
|
60
|
-
"",
|
|
190
|
+
return [
|
|
61
191
|
"EXAMPLES",
|
|
62
|
-
""
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return lines.join("\n");
|
|
192
|
+
"",
|
|
193
|
+
...examples.map((example) => `${LINE_PREFIX}${example}`)
|
|
194
|
+
].join("\n");
|
|
66
195
|
}
|
|
67
196
|
function renderSchemaHint() {
|
|
68
197
|
return [
|
|
69
|
-
"",
|
|
70
198
|
"SCHEMA",
|
|
71
199
|
"",
|
|
72
|
-
|
|
200
|
+
`${LINE_PREFIX}${CLI_NAME} ${MANIFEST_COMMAND} # machine-readable command manifest (flags, output, examples)`
|
|
73
201
|
].join("\n");
|
|
74
202
|
}
|
|
203
|
+
async function walkCommandPath(root, rawArgs) {
|
|
204
|
+
const rootMeta = await resolveCitty(root.meta);
|
|
205
|
+
const segments = rootMeta?.name === void 0 ? [] : [rootMeta.name];
|
|
206
|
+
let current = root;
|
|
207
|
+
let index = 0;
|
|
208
|
+
while (index < rawArgs.length) {
|
|
209
|
+
const subCommands = await resolveCitty(current.subCommands);
|
|
210
|
+
if (subCommands === void 0) break;
|
|
211
|
+
const argsDef = await resolveCitty(current.args) ?? {};
|
|
212
|
+
index = skipFlags(rawArgs, index, argsDef);
|
|
213
|
+
const token = rawArgs[index];
|
|
214
|
+
if (token === void 0) break;
|
|
215
|
+
const match = await findSubCommand(subCommands, token);
|
|
216
|
+
if (match === null) return {
|
|
217
|
+
segments,
|
|
218
|
+
unknownToken: token
|
|
219
|
+
};
|
|
220
|
+
segments.push(match.name);
|
|
221
|
+
current = match.command;
|
|
222
|
+
index += 1;
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
segments,
|
|
226
|
+
unknownToken: null
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
async function resolveBreadcrumb(root, rawArgs) {
|
|
230
|
+
const { segments } = await walkCommandPath(root, rawArgs);
|
|
231
|
+
return segments.length > 0 ? segments.join(" ") : CLI_NAME;
|
|
232
|
+
}
|
|
233
|
+
async function findUnknownCommand(root, rawArgs) {
|
|
234
|
+
return (await walkCommandPath(root, rawArgs)).unknownToken;
|
|
235
|
+
}
|
|
236
|
+
function skipFlags(rawArgs, start, argsDef) {
|
|
237
|
+
let index = start;
|
|
238
|
+
while (index < rawArgs.length) {
|
|
239
|
+
const token = rawArgs[index];
|
|
240
|
+
if (token === void 0) return index;
|
|
241
|
+
if (token === "--") return rawArgs.length;
|
|
242
|
+
if (!token.startsWith("-")) return index;
|
|
243
|
+
if (flagConsumesValue(token, argsDef)) index += 1;
|
|
244
|
+
index += 1;
|
|
245
|
+
}
|
|
246
|
+
return index;
|
|
247
|
+
}
|
|
248
|
+
async function findSubCommand(subCommands, token) {
|
|
249
|
+
const direct = subCommands[token];
|
|
250
|
+
if (direct !== void 0) {
|
|
251
|
+
const command = await resolveCitty(direct);
|
|
252
|
+
if (command === void 0) return null;
|
|
253
|
+
const meta = await resolveCitty(command.meta);
|
|
254
|
+
return {
|
|
255
|
+
name: meta?.name ?? token,
|
|
256
|
+
command
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
for (const [key, loader] of Object.entries(subCommands)) {
|
|
260
|
+
const command = await resolveCitty(loader);
|
|
261
|
+
if (command === void 0) continue;
|
|
262
|
+
const meta = await resolveCitty(command.meta);
|
|
263
|
+
if (toAliasArray(meta?.alias).includes(token)) return {
|
|
264
|
+
name: meta?.name ?? key,
|
|
265
|
+
command
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
75
270
|
|
|
76
271
|
//#endregion
|
|
77
272
|
//#region src/cli.ts
|
|
78
|
-
|
|
273
|
+
const HELP_FLAGS = new Set(["--help", "-h"]);
|
|
274
|
+
async function run() {
|
|
275
|
+
const rawArgs = hoistGlobalFlags(process.argv.slice(2));
|
|
276
|
+
const showUsageWithBreadcrumb = async (cmd, parent) => {
|
|
277
|
+
const breadcrumb = await resolveBreadcrumb(main_default, rawArgs);
|
|
278
|
+
await showUsage(cmd, parent, breadcrumb);
|
|
279
|
+
};
|
|
280
|
+
if (rawArgs.length === 0) {
|
|
281
|
+
await showUsageWithBreadcrumb(main_default);
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if (!rawArgs.some((arg) => HELP_FLAGS.has(arg))) {
|
|
285
|
+
const unknown = await findUnknownCommand(main_default, rawArgs);
|
|
286
|
+
if (unknown !== null) {
|
|
287
|
+
reportError(new ConfigError(`unknown command: ${unknown}`));
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
await runMain(main_default, {
|
|
292
|
+
showUsage: showUsageWithBreadcrumb,
|
|
293
|
+
rawArgs
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
run().catch((error) => {
|
|
297
|
+
reportError(error);
|
|
298
|
+
});
|
|
79
299
|
|
|
80
300
|
//#endregion
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/collection/index.ts
|
|
4
|
+
var collection_default = defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "collection",
|
|
7
|
+
description: "Manage Metabase collections"
|
|
8
|
+
},
|
|
9
|
+
subCommands: {
|
|
10
|
+
list: () => import("./list-CU6sOfI-.mjs").then((mod) => mod.default),
|
|
11
|
+
get: () => import("./get-CRvbChoX.mjs").then((mod) => mod.default),
|
|
12
|
+
items: () => import("./items-C94eW2Yd.mjs").then((mod) => mod.default),
|
|
13
|
+
tree: () => import("./tree-mvq9gM9w.mjs").then((mod) => mod.default),
|
|
14
|
+
create: () => import("./create-w3mQg9n4.mjs").then((mod) => mod.default),
|
|
15
|
+
archive: () => import("./archive-DTN9tLGT.mjs").then((mod) => mod.default)
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { collection_default as default };
|