11#!/usr/bin/env node
2+ const { Command } = require ( 'commander' ) ;
3+
24const Config = require ( './src/config' ) ;
35const Github = require ( './src/github' ) ;
46const 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 ( ) ;
0 commit comments