@@ -11,8 +11,13 @@ const isClient = process.argv.includes('--client');
11
11
const configPath = path . resolve ( process . cwd ( ) , `config.${ isClient ? 'client' : 'server' } .yaml` ) ;
12
12
fs . ensureDirSync ( path . resolve ( process . cwd ( ) , 'data' ) ) ;
13
13
14
+ // eslint-disable-next-line import/no-mutable-exports
15
+ export let exit : Promise < void > | null = null ;
16
+
14
17
if ( ! fs . existsSync ( configPath ) ) {
15
- const serverConfigDefault = `\
18
+ // eslint-disable-next-line no-promise-executor-return
19
+ exit = new Promise ( ( resolve ) => ( async ( ) => {
20
+ const serverConfigDefault = `\
16
21
type:
17
22
viewPass: ${ String . random ( 8 ) }
18
23
server:
@@ -23,18 +28,19 @@ secretRoute: ${String.random(12)}
23
28
seatFile: /home/icpc/Desktop/seat.txt
24
29
` ;
25
30
26
- const clientConfigDefault = yaml . dump ( {
27
- server : '' ,
28
- balloon : '' ,
29
- printers : ( await getPrinters ( ) ) . map ( ( p ) => p . printer ) ,
30
- token : '' ,
31
- } ) ;
32
- fs . writeFileSync ( configPath , isClient ? clientConfigDefault : serverConfigDefault ) ;
33
- logger . error ( 'Config file generated, please fill in the config.yaml' ) ;
34
- process . exit ( 1 ) ;
31
+ const clientConfigDefault = yaml . dump ( {
32
+ server : '' ,
33
+ balloon : '' ,
34
+ printers : await getPrinters ( ) . then ( ( r ) => r . map ( ( p ) => p . printer ) ) . catch ( ( ) => [ ] ) ,
35
+ token : '' ,
36
+ } ) ;
37
+ fs . writeFileSync ( configPath , isClient ? clientConfigDefault : serverConfigDefault ) ;
38
+ logger . error ( 'Config file generated, please fill in the config.yaml' ) ;
39
+ resolve ( ) ;
40
+ } ) ( ) ) ;
41
+ throw new Error ( ) ;
35
42
}
36
43
37
- const data = yaml . load ( fs . readFileSync ( configPath , 'utf8' ) . toString ( ) ) ;
38
44
const serverSchema = Schema . object ( {
39
45
viewPass : Schema . string ( ) . default ( String . random ( 8 ) ) ,
40
46
server : Schema . string ( ) . role ( 'url' ) . required ( ) ,
@@ -52,12 +58,12 @@ const clientSchema = Schema.object({
52
58
token : Schema . string ( ) . required ( ) . description ( 'Token generated on server' ) ,
53
59
fonts : Schema . array ( Schema . string ( ) ) . default ( [ ] ) ,
54
60
} ) ;
55
- export const config = ( isClient ? clientSchema : serverSchema ) ( data as any ) ;
56
61
62
+ export const config = ( isClient ? clientSchema : serverSchema ) ( yaml . load ( fs . readFileSync ( configPath , 'utf8' ) ) as any ) ;
57
63
export const saveConfig = ( ) => {
58
64
fs . writeFileSync ( configPath , yaml . dump ( config ) ) ;
59
65
} ;
60
66
61
67
logger . info ( `Config loaded from ${ configPath } ` ) ;
62
68
logger . info ( `xcpc-tools version: ${ version } ` ) ;
63
- if ( ! isClient ) logger . info ( `Server View User Info: admin/${ config . viewPassword } ` ) ;
69
+ if ( ! isClient && ! exit ) logger . info ( `Server View User Info: admin/${ config . viewPassword } ` ) ;
0 commit comments