Skip to content

Commit 41922fe

Browse files
authored
apphosting:backend get, list, and delete commands should print table in similar format (#6813)
Co-authored-by: Mathusan Selvarajah <[email protected]>
1 parent 629f97f commit 41922fe

File tree

3 files changed

+33
-91
lines changed

3 files changed

+33
-91
lines changed

src/commands/apphosting-backends-delete.ts

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,10 @@ import { Options } from "../options";
33
import { needProjectId } from "../projectUtils";
44
import { FirebaseError } from "../error";
55
import { promptOnce } from "../prompt";
6-
import { logger } from "../logger";
76
import { DEFAULT_REGION } from "../init/features/apphosting/constants";
87
import * as utils from "../utils";
98
import * as apphosting from "../gcp/apphosting";
10-
11-
const Table = require("cli-table");
12-
13-
const COLUMN_LENGTH = 20;
14-
const TABLE_HEAD = [
15-
"Backend Id",
16-
"Repository Name",
17-
"Location",
18-
"URL",
19-
"Created Date",
20-
"Updated Date",
21-
];
9+
import { printBackendsTable } from "./apphosting-backends-list";
2210

2311
export const command = new Command("apphosting:backends:delete <backend>")
2412
.description("delete a backend from a Firebase project")
@@ -45,24 +33,18 @@ export const command = new Command("apphosting:backends:delete <backend>")
4533
});
4634
}
4735

48-
const table = new Table({
49-
head: TABLE_HEAD,
50-
style: { head: ["green"] },
51-
});
52-
table.colWidths = COLUMN_LENGTH;
53-
54-
let backend;
36+
let backend: apphosting.Backend;
5537
try {
5638
backend = await apphosting.getBackend(projectId, location, backendId);
57-
populateTable(backend, table);
5839
} catch (err: any) {
5940
throw new FirebaseError(`No backends found with given parameters. Command aborted.`, {
6041
original: err,
6142
});
6243
}
6344

6445
utils.logWarning("You are about to permanently delete the backend:");
65-
logger.info(table.toString());
46+
const backends: apphosting.Backend[] = [backend];
47+
printBackendsTable(backends);
6648

6749
const confirmDeletion = await promptOnce(
6850
{
@@ -89,24 +71,3 @@ export const command = new Command("apphosting:backends:delete <backend>")
8971

9072
return backend;
9173
});
92-
93-
function populateTable(backend: apphosting.Backend, table: any) {
94-
const [location, , backendId] = backend.name.split("/").slice(3, 6);
95-
const entry = [
96-
backendId,
97-
backend.codebase.repository?.split("/").pop(),
98-
location,
99-
backend.uri,
100-
backend.createTime,
101-
backend.updateTime,
102-
];
103-
const newRow = entry.map((name) => {
104-
const maxCellWidth = COLUMN_LENGTH - 2;
105-
const chunks = [];
106-
for (let i = 0; name && i < name.length; i += maxCellWidth) {
107-
chunks.push(name.substring(i, i + maxCellWidth));
108-
}
109-
return chunks.join("\n");
110-
});
111-
table.push(newRow);
112-
}

src/commands/apphosting-backends-get.ts

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@ import { Command } from "../command";
22
import { Options } from "../options";
33
import { needProjectId } from "../projectUtils";
44
import { FirebaseError } from "../error";
5-
import { logger } from "../logger";
65
import { logWarning } from "../utils";
76
import * as apphosting from "../gcp/apphosting";
7+
import { printBackendsTable } from "./apphosting-backends-list";
88

9-
const Table = require("cli-table");
10-
const COLUMN_LENGTH = 20;
11-
const TABLE_HEAD = ["Backend Id", "Repository", "Location", "URL", "Created Date", "Updated Date"];
129
export const command = new Command("apphosting:backends:get <backendId>")
1310
.description("get backend details of a Firebase project")
1411
.option("-l, --location <location>", "app backend location", "-")
@@ -18,21 +15,14 @@ export const command = new Command("apphosting:backends:get <backendId>")
1815
const location = options.location as string;
1916

2017
let backendsList: apphosting.Backend[] = [];
21-
const table = new Table({
22-
head: TABLE_HEAD,
23-
style: { head: ["green"] },
24-
});
25-
table.colWidths = COLUMN_LENGTH;
2618
try {
2719
if (location !== "-") {
2820
const backendInRegion = await apphosting.getBackend(projectId, location, backendId);
2921
backendsList.push(backendInRegion);
30-
populateTable(backendInRegion, table);
3122
} else {
3223
const resp = await apphosting.listBackends(projectId, "-");
3324
const allBackends = resp.backends || [];
3425
backendsList = allBackends.filter((bkd) => bkd.name.split("/").pop() === backendId);
35-
backendsList.forEach((bkd) => populateTable(bkd, table));
3626
}
3727
} catch (err: any) {
3828
throw new FirebaseError(
@@ -44,27 +34,6 @@ export const command = new Command("apphosting:backends:get <backendId>")
4434
logWarning(`Found no backend with id: ${backendId}`);
4535
return;
4636
}
47-
logger.info(table.toString());
37+
printBackendsTable(backendsList);
4838
return backendsList[0];
4939
});
50-
51-
function populateTable(backend: apphosting.Backend, table: any) {
52-
const [location, , backendId] = backend.name.split("/").slice(3, 6);
53-
const entry = [
54-
backendId,
55-
backend.codebase.repository?.split("/").pop(),
56-
location,
57-
backend.uri,
58-
backend.createTime,
59-
backend.updateTime,
60-
];
61-
const newRow = entry.map((name) => {
62-
const maxCellWidth = COLUMN_LENGTH - 2;
63-
const chunks = [];
64-
for (let i = 0; name && i < name.length; i += maxCellWidth) {
65-
chunks.push(name.substring(i, i + maxCellWidth));
66-
}
67-
return chunks.join("\n");
68-
});
69-
table.push(newRow);
70-
}
Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
const Table = require("cli-table");
2-
31
import { Command } from "../command";
42
import { datetimeString } from "../utils";
53
import { FirebaseError } from "../error";
@@ -8,6 +6,7 @@ import { needProjectId } from "../projectUtils";
86
import { Options } from "../options";
97
import * as apphosting from "../gcp/apphosting";
108

9+
const Table = require("cli-table");
1110
const TABLE_HEAD = ["Backend ID", "Repository", "Location", "URL", "Created Date", "Updated Date"];
1211

1312
export const command = new Command("apphosting:backends:list")
@@ -17,7 +16,6 @@ export const command = new Command("apphosting:backends:list")
1716
.action(async (options: Options) => {
1817
const projectId = needProjectId(options);
1918
const location = options.location as string;
20-
const table = new Table({ head: TABLE_HEAD, style: { head: ["green"] } });
2119
let backendRes: apphosting.ListBackendsResponse;
2220
try {
2321
backendRes = await apphosting.listBackends(projectId, location);
@@ -29,18 +27,32 @@ export const command = new Command("apphosting:backends:list")
2927
}
3028

3129
const backends = backendRes.backends ?? [];
32-
for (const backend of backends) {
33-
const [backendLocation, , backendId] = backend.name.split("/").slice(3, 6);
34-
table.push([
35-
backendId,
36-
backend.codebase?.repository?.split("/").pop() ?? "",
37-
backendLocation,
38-
backend.uri.startsWith("https:") ? backend.uri : "https://" + backend.uri,
39-
datetimeString(new Date(backend.createTime)),
40-
datetimeString(new Date(backend.updateTime)),
41-
]);
42-
}
43-
logger.info(table.toString());
30+
printBackendsTable(backends);
4431

4532
return backends;
4633
});
34+
35+
/**
36+
* Prints a table given a list of backends
37+
*/
38+
export function printBackendsTable(backends: apphosting.Backend[]): void {
39+
const table = new Table({
40+
head: TABLE_HEAD,
41+
style: { head: ["green"] },
42+
});
43+
44+
for (const backend of backends) {
45+
// sample backend.name value: "projects/<project-name>/locations/us-central1/backends/<backend-id>"
46+
const [backendLocation, , backendId] = backend.name.split("/").slice(3, 6);
47+
table.push([
48+
backendId,
49+
// sample repository value: "projects/<project-name>/locations/us-central1/connections/<connection-id>/repositories/<repository-name>"
50+
backend.codebase?.repository?.split("/").pop() ?? "",
51+
backendLocation,
52+
backend.uri.startsWith("https:") ? backend.uri : "https://" + backend.uri,
53+
datetimeString(new Date(backend.createTime)),
54+
datetimeString(new Date(backend.updateTime)),
55+
]);
56+
}
57+
logger.info(table.toString());
58+
}

0 commit comments

Comments
 (0)