Skip to content

Commit f198313

Browse files
authored
Create askForApps extension (#47)
1 parent 6b9e9ff commit f198313

14 files changed

Lines changed: 82 additions & 149 deletions

File tree

src/@types/Gluegun.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1+
import { ApiApp, ApiTeamApps } from "@discloudapp/api-types/v2";
12
import { ApiResponse } from "gluegun";
3+
import { AskForAppsOptions } from ".";
24

35
declare module "gluegun" {
46
interface GluegunPrint {
57
printApiRes<T = any>(apiRes: ApiResponse<T>, spin?: any): number
68
spinApiRes<T = any>(apiRes: ApiResponse<T>, spin: any): number
79
}
10+
11+
interface GluegunPrompt {
12+
askForApps<A extends (ApiApp | ApiTeamApps)[], T = GluegunAskResponse>(
13+
apps: A,
14+
options?: AskForAppsOptions
15+
): Promise<T>
16+
}
817
}

src/@types/index.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,19 @@ export interface RawFile {
2424
export interface ResolveArgsOptions {
2525
name: string
2626
pattern: RegExp
27+
}
28+
29+
export interface AskForAppsOptions {
30+
/**
31+
* @default false
32+
*/
33+
all?: boolean
34+
/**
35+
* @default "."
36+
*/
37+
discloudConfigPath?: string
38+
/**
39+
* @default true
40+
*/
41+
showStatus?: boolean
2742
}

src/commands/app-apt.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,7 @@ export default new class AppApt implements GluegunCommand {
2828

2929
if (apiRes.data)
3030
if ("apps" in apiRes.data) {
31-
const { appId } = await prompt.ask({
32-
name: "appId",
33-
message: "Choose the app",
34-
type: "select",
35-
choices: apiRes.data.apps.map(app => ({
36-
name: app.id,
37-
message: `${app.name} - ${app.id} - ${app.online ?
38-
print.colors.green("online") :
39-
print.colors.red("offline")}`,
40-
value: app.id,
41-
})),
42-
});
31+
const { appId } = await prompt.askForApps(apiRes.data.apps);
4332

4433
parameters.first = appId;
4534
}

src/commands/commit.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { RESTGetApiAppAllResult, RESTPutApiAppCommitResult, Routes } from "@disc
22
import FormData from "form-data";
33
import { GluegunCommand, GluegunToolbox } from "gluegun";
44
import { exit } from "node:process";
5-
import { apidiscloud, config, configToObj, getNotIngnoredFiles, makeZipFromFileList, RateLimit, readDiscloudConfig } from "../util";
5+
import { apidiscloud, config, getNotIngnoredFiles, makeZipFromFileList, RateLimit } from "../util";
66

77
export default new class Commit implements GluegunCommand {
88
name = "commit";
@@ -21,8 +21,6 @@ export default new class Commit implements GluegunCommand {
2121
if (!parameters.first) parameters.first = ".";
2222
parameters.first = parameters.first.replace(/(\\|\/)$/, "");
2323

24-
const dConfig = configToObj(readDiscloudConfig(parameters.first)!);
25-
2624
if (!parameters.second) {
2725
const spin = print.spin({
2826
text: print.colors.cyan("Fetching apps..."),
@@ -34,15 +32,8 @@ export default new class Commit implements GluegunCommand {
3432

3533
if (apiRes.data)
3634
if ("apps" in apiRes.data) {
37-
const { appId } = await prompt.ask({
38-
name: "appId",
39-
message: "Choose the app",
40-
type: "select",
41-
choices: apiRes.data.apps.map(app => ({
42-
name: app.id,
43-
message: `${app.name} - ${app.id} ${app.id === dConfig.ID ? "[discloud.config]" : ""}`,
44-
value: app.id,
45-
})),
35+
const { appId } = await prompt.askForApps(apiRes.data.apps, {
36+
discloudConfigPath: parameters.first,
4637
});
4738

4839
parameters.second = appId;

src/commands/delete.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,7 @@ export default new class Delete implements GluegunCommand {
2828

2929
if (apiRes.data)
3030
if ("apps" in apiRes.data) {
31-
const { appId } = await prompt.ask({
32-
name: "appId",
33-
message: "Choose the app",
34-
type: "select",
35-
choices: [{
36-
name: "all",
37-
message: "All apps",
38-
value: "all",
39-
}].concat(apiRes.data.apps.map(app => ({
40-
name: app.id,
41-
message: `${app.name} - ${app.id} - ${app.online ?
42-
print.colors.green("online") :
43-
print.colors.red("offline")}`,
44-
value: app.id,
45-
}))),
46-
});
31+
const { appId } = await prompt.askForApps(apiRes.data.apps, { all: true });
4732

4833
parameters.first = appId;
4934
}

src/commands/restart.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,7 @@ export default new class Restart implements GluegunCommand {
2727

2828
if (apiRes.data)
2929
if ("apps" in apiRes.data) {
30-
const { appId } = await prompt.ask({
31-
name: "appId",
32-
message: "Choose the app",
33-
type: "select",
34-
choices: [{
35-
name: "all",
36-
message: "All apps",
37-
value: "all",
38-
}].concat(apiRes.data.apps.map(app => ({
39-
name: app.id,
40-
message: `${app.name} - ${app.id} - ${app.online ?
41-
print.colors.green("online") :
42-
print.colors.red("offline")}`,
43-
value: app.id,
44-
}))),
45-
});
30+
const { appId } = await prompt.askForApps(apiRes.data.apps, { all: true });
4631

4732
parameters.first = appId;
4833
}

src/commands/start.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,7 @@ export default new class Start implements GluegunCommand {
2828

2929
if (apiRes.data)
3030
if ("apps" in apiRes.data) {
31-
const { appId } = await prompt.ask({
32-
name: "appId",
33-
message: "Choose the app",
34-
type: "select",
35-
choices: [{
36-
name: "all",
37-
message: "All apps",
38-
value: "all",
39-
}].concat(apiRes.data.apps.map(app => ({
40-
name: app.id,
41-
message: `${app.name} - ${app.id} - ${app.online ?
42-
print.colors.green("online") :
43-
print.colors.red("offline")}`,
44-
value: app.id,
45-
}))),
46-
});
31+
const { appId } = await prompt.askForApps(apiRes.data.apps, { all: true });
4732

4833
parameters.first = appId;
4934
}

src/commands/stop.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,7 @@ export default new class Stop implements GluegunCommand {
2727

2828
if (apiRes.data)
2929
if ("apps" in apiRes.data) {
30-
const { appId } = await prompt.ask({
31-
name: "appId",
32-
message: "Choose the app",
33-
type: "select",
34-
choices: [{
35-
name: "all",
36-
message: "All apps",
37-
value: "all",
38-
}].concat(apiRes.data.apps.map(app => ({
39-
name: app.id,
40-
message: `${app.name} - ${app.id} - ${app.online ?
41-
print.colors.green("online") :
42-
print.colors.red("offline")}`,
43-
value: app.id,
44-
}))),
45-
});
30+
const { appId } = await prompt.askForApps(apiRes.data.apps, { all: true });
4631

4732
parameters.first = appId;
4833
}

src/commands/team-commit.ts

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { RESTGetApiTeamResult, RESTPutApiAppCommitResult, Routes } from "@disclo
22
import FormData from "form-data";
33
import { GluegunCommand, GluegunToolbox } from "gluegun";
44
import { exit } from "node:process";
5-
import { apidiscloud, config, configToObj, getNotIngnoredFiles, makeZipFromFileList, RateLimit, readDiscloudConfig } from "../util";
5+
import { apidiscloud, config, getNotIngnoredFiles, makeZipFromFileList, RateLimit } from "../util";
66

77
export default new class TeamCommit implements GluegunCommand {
88
name = "team:commit";
@@ -21,8 +21,6 @@ export default new class TeamCommit implements GluegunCommand {
2121
if (!parameters.first) parameters.first = ".";
2222
parameters.first = parameters.first.replace(/(\\|\/)$/, "");
2323

24-
const dConfig = configToObj(readDiscloudConfig(parameters.first)!);
25-
2624
if (!parameters.second) {
2725
const spin = print.spin({
2826
text: print.colors.cyan("Fetching apps..."),
@@ -34,16 +32,9 @@ export default new class TeamCommit implements GluegunCommand {
3432

3533
if (apiRes.data)
3634
if ("apps" in apiRes.data) {
37-
const { appId } = await prompt.ask({
38-
name: "appId",
39-
message: "Choose the app",
40-
type: "select",
41-
choices: apiRes.data.apps.map(app => ({
42-
name: app.id,
43-
message: `${app.name} - ${app.id} - [${app.perms.join()}] ${app.id === dConfig.ID ?
44-
"[discloud.config]" : ""}`,
45-
value: app.id,
46-
})),
35+
const { appId } = await prompt.askForApps(apiRes.data.apps, {
36+
all: true,
37+
discloudConfigPath: parameters.first,
4738
});
4839

4940
parameters.second = appId;

src/commands/team-restart.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,7 @@ export default new class TeamRestart implements GluegunCommand {
2727

2828
if (apiRes.data)
2929
if ("apps" in apiRes.data) {
30-
const { appId } = await prompt.ask({
31-
name: "appId",
32-
message: "Choose the app",
33-
type: "select",
34-
choices: [{
35-
name: "all",
36-
message: "All apps",
37-
value: "all",
38-
}].concat(apiRes.data.apps.map(app => ({
39-
name: app.id,
40-
message: `${app.name} - ${app.id} - ${app.online ?
41-
print.colors.green("online") :
42-
print.colors.red("offline")}`,
43-
value: app.id,
44-
}))),
45-
});
30+
const { appId } = await prompt.askForApps(apiRes.data.apps, { all: true });
4631

4732
parameters.first = appId;
4833
}

0 commit comments

Comments
 (0)