Skip to content

Commit 55803a0

Browse files
committed
refactor: use commander.js
1 parent 21b41b8 commit 55803a0

5 files changed

Lines changed: 106 additions & 53 deletions

File tree

index.js

Lines changed: 30 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,46 @@
11
#!/usr/bin/env node
2+
const { Command } = require('commander');
3+
24
const Config = require('./src/config');
35
const Github = require('./src/github');
46
const UI = require('./src/ui');
7+
const Utils = require('./src/utils');
58

6-
UI.printWelcome();
9+
const reposCommand = require('./src/commands/repos');
10+
const codespacesCommand = require('./src/commands/codespaces');
711

8-
main().then((exitCode) => {
9-
process.exit(exitCode);
10-
});
12+
UI.printWelcome();
1113

12-
async function main() {
14+
const main = async () => {
1315
try {
14-
if (!Config.load()) {
15-
const token = await UI.promptAuth();
16-
Config.save(token);
17-
}
18-
19-
if (process.argv[2] == 'codespaces') {
20-
const codespaces = await UI.getCodespaces();
21-
if (!codespaces) {
22-
Config.deleteFile();
23-
return await main();
24-
}
16+
const PACKAGE = Utils.getPackageDetails().package;
2517

26-
let res = await UI.promptSelectCodespaces(codespaces);
18+
const program = new Command();
2719

28-
if (res.codespaces.length === 0) {
29-
UI.printNoCodespaceSelected();
20+
program.name(PACKAGE.name).description(PACKAGE.description).version(PACKAGE.version);
3021

31-
return 0;
32-
}
22+
program.action(reposCommand);
3323

34-
const codespacesToDelete = res.codespaces;
35-
const codespaceCount = codespacesToDelete.length;
36-
res = await UI.promptConfirmDelete(codespaceCount, 'codespaces');
24+
program.addHelpCommand('help');
3725

38-
if (res.confirmDelete === 'Yes') {
39-
await UI.deleteCodespaces(codespacesToDelete);
40-
} else {
41-
UI.printNoReposDeleted();
42-
}
43-
} else {
44-
const repositories = await UI.getRepositories();
45-
if (!repositories) {
46-
Config.deleteFile();
47-
return await main();
48-
}
26+
program
27+
.command('codespaces')
28+
.alias('codespace')
29+
.description('Delete codespaces')
30+
.action(codespacesCommand);
4931

50-
let res = await UI.promptSelectRepositories(repositories);
51-
if (res.repos.length === 0) {
52-
UI.printNoReposSelected();
32+
program
33+
.command('repos')
34+
.alias('repo')
35+
.description('Delete repositories')
36+
.action(reposCommand);
5337

54-
return 0;
55-
}
56-
57-
const reposToDelete = res.repos;
58-
const repoCount = reposToDelete.length;
59-
res = await UI.promptConfirmDelete(repoCount, 'repos');
60-
61-
if (res.confirmDelete === 'Yes') {
62-
await UI.deleteRepositories(reposToDelete);
63-
} else {
64-
UI.printNoReposDeleted();
65-
}
38+
if (!Config.load()) {
39+
const token = await UI.promptAuth();
40+
Config.save(token);
6641
}
42+
43+
program.parseAsync(process.argv);
6744
} catch (error) {
6845
if (error instanceof Github.AuthError || error instanceof Github.ScopesError) {
6946
Config.deleteFile();
@@ -74,4 +51,6 @@ async function main() {
7451
UI.printError(error);
7552
return;
7653
}
77-
}
54+
};
55+
56+
main();

package-lock.json

Lines changed: 16 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"dependencies": {
3535
"@octokit/auth-oauth-device": "^3.1.2",
3636
"clipboardy": "^2.3.0",
37+
"commander": "^9.4.0",
3738
"enquirer": "^2.3.6",
3839
"ora": "^5.4.1"
3940
},

src/commands/codespaces.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
const Config = require('../config');
2+
const UI = require('../ui');
3+
4+
const codespacesCommand = async () => {
5+
const codespaces = await UI.getCodespaces();
6+
if (!codespaces) {
7+
Config.deleteFile();
8+
return await main();
9+
}
10+
11+
let res = await UI.promptSelectCodespaces(codespaces);
12+
13+
if (res.codespaces.length === 0) {
14+
UI.printNoCodespaceSelected();
15+
16+
return 0;
17+
}
18+
19+
const codespacesToDelete = res.codespaces;
20+
const codespaceCount = codespacesToDelete.length;
21+
res = await UI.promptConfirmDelete(codespaceCount, 'codespaces');
22+
23+
if (res.confirmDelete === 'Yes') {
24+
await UI.deleteCodespaces(codespacesToDelete);
25+
} else {
26+
UI.printNoReposDeleted();
27+
}
28+
};
29+
30+
module.exports = codespacesCommand;

src/commands/repos.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
const Config = require('../config');
2+
const UI = require('../ui');
3+
4+
const reposCommand = async () => {
5+
const repositories = await UI.getRepositories();
6+
if (!repositories) {
7+
Config.deleteFile();
8+
return await main();
9+
}
10+
11+
let res = await UI.promptSelectRepositories(repositories);
12+
if (res.repos.length === 0) {
13+
UI.printNoReposSelected();
14+
15+
return 0;
16+
}
17+
18+
const reposToDelete = res.repos;
19+
const repoCount = reposToDelete.length;
20+
res = await UI.promptConfirmDelete(repoCount, 'repos');
21+
22+
if (res.confirmDelete === 'Yes') {
23+
await UI.deleteRepositories(reposToDelete);
24+
} else {
25+
UI.printNoReposDeleted();
26+
}
27+
};
28+
29+
module.exports = reposCommand;

0 commit comments

Comments
 (0)