Commit d2e646b 1 parent ae1abe2 commit d2e646b Copy full SHA for d2e646b
File tree 11 files changed +101
-45
lines changed
11 files changed +101
-45
lines changed Original file line number Diff line number Diff line change @@ -65,6 +65,5 @@ export function getConfig(cleanCache = false): Config {
65
65
} ;
66
66
67
67
config = { ...defaultConfig , ...packageConfig , ...argsConfig } ;
68
-
69
68
return config ;
70
69
}
Original file line number Diff line number Diff line change
1
+ export { getRequirements } from './requirements' ;
Original file line number Diff line number Diff line change
1
+ import { exec } from 'child_process' ;
2
+ import { BrowserWindow , IpcMainEvent , IpcMainInvokeEvent } from 'electron' ;
3
+ import { promisify } from 'util' ;
4
+ import {
5
+ Requirement ,
6
+ RequirementsResource ,
7
+ } from '../../shared/types/requirements' ;
8
+
9
+ const requirements = [
10
+ 'node -v' ,
11
+ 'npm -v' ,
12
+ 'mvn --version' ,
13
+ 'java -version' ,
14
+ 'git --version' ,
15
+ ] ;
16
+ const execPromise = promisify ( exec ) ;
17
+
18
+ export default class RequirementsFacade implements RequirementsResource {
19
+ async getRequirements ( ) : Promise < Requirement [ ] > {
20
+ return Promise . all (
21
+ requirements . map ( requirement =>
22
+ execPromise ( requirement ) . then ( ( { stdout, stderr } ) => ( {
23
+ name : requirement ,
24
+ cmd : requirement ,
25
+ state : stdout ? ( 'ok' as const ) : ( 'error' as const ) ,
26
+ message : stdout || stderr ,
27
+ } ) )
28
+ )
29
+ ) ;
30
+ }
31
+ }
32
+
33
+ const cache : {
34
+ [ windowId : string ] : RequirementsFacade ;
35
+ } = { } ;
36
+
37
+ export const getRequirements = (
38
+ e : IpcMainEvent | IpcMainInvokeEvent
39
+ ) : RequirementsFacade => {
40
+ const sourceWindow = BrowserWindow . fromWebContents ( e . sender ) ;
41
+ if ( ! sourceWindow ) {
42
+ throw new Error ( 'Could not resolve current window' ) ;
43
+ }
44
+
45
+ const windowId = sourceWindow . id ;
46
+
47
+ let instance = cache [ windowId ] ;
48
+ if ( ! instance ) {
49
+ instance = new RequirementsFacade ( ) ;
50
+ cache [ windowId ] = instance ;
51
+ }
52
+
53
+ return new RequirementsFacade ( ) ;
54
+ } ;
Original file line number Diff line number Diff line change 1
- import { exec } from 'child_process' ;
2
- import { ipcMain } from 'electron' ;
3
- import { promisify } from 'util' ;
1
+ import { IpcMainInvokeEvent , ipcMain } from 'electron' ;
4
2
import * as events from '../shared/events' ;
5
- import createLogger from './logger ' ;
3
+ import { getRequirements } from './core ' ;
6
4
7
- const logger = createLogger ( 'app' ) ;
8
-
9
- const requirements = [
10
- 'node -v' ,
11
- 'npm -v' ,
12
- 'mvn --version' ,
13
- 'java -version' ,
14
- 'git --version' ,
15
- ] ;
16
- const execPromise = promisify ( exec ) ;
17
-
18
- async function getRequirements ( ) : Promise <
19
- { stdout : string ; stderr : string } [ ]
20
- > {
21
- return Promise . all (
22
- requirements . map ( requirement => {
23
- return execPromise ( requirement ) ;
24
- } )
5
+ function registerRequirementsIPCMainHandlers ( ) {
6
+ ipcMain . handle ( events . TIP_GET_REQUIREMENTS , ( e : IpcMainInvokeEvent ) =>
7
+ getRequirements ( e ) . getRequirements ( )
25
8
) ;
26
9
}
27
10
28
11
export const registerIPCMainHandlers = ( ) : void => {
29
- logger . info ( 'registerIPCMainHandlers' ) ;
30
-
31
- ipcMain . handle ( events . TIP_GET_REQUIREMENTS , getRequirements ) ;
12
+ registerRequirementsIPCMainHandlers ( ) ;
32
13
} ;
Original file line number Diff line number Diff line change 1
1
import { contextBridge , ipcRenderer } from 'electron' ;
2
- import { TipManagerAPI } from '../shared/api' ;
2
+ import { TipManagerResource } from '../shared/api' ;
3
3
import * as events from '../shared/events' ;
4
4
5
- const tipManagerAPI : TipManagerAPI = {
6
- getRequirements : ( ) => ipcRenderer . invoke ( events . TIP_GET_REQUIREMENTS ) ,
5
+ const tipManagerResource : TipManagerResource = {
6
+ requirements : {
7
+ getRequirements : ( ) => ipcRenderer . invoke ( events . TIP_GET_REQUIREMENTS ) ,
8
+ } ,
7
9
} ;
8
10
9
- contextBridge . exposeInMainWorld ( 'tipmanager' , tipManagerAPI ) ;
11
+ contextBridge . exposeInMainWorld ( 'tipmanager' , tipManagerResource ) ;
Original file line number Diff line number Diff line change 1
- export interface TipManagerAPI {
2
- getRequirements ( ) : Promise < { stdout : string ; stderr : string } [ ] > ;
1
+ import { RequirementsResource } from './types/requirements' ;
2
+
3
+ export interface TipManagerResource {
4
+ requirements : RequirementsResource ;
3
5
}
Original file line number Diff line number Diff line change
1
+ export interface Requirement {
2
+ name : string ;
3
+ cmd : string ;
4
+ state : 'ok' | 'error' ;
5
+ message : string ;
6
+ }
7
+
8
+ export interface RequirementsResource {
9
+ getRequirements ( ) : Promise < Requirement [ ] > ;
10
+ }
Load Diff This file was deleted.
Original file line number Diff line number Diff line change 1
1
import Button from '@mui/material/Button' ;
2
2
import { useState } from 'react' ;
3
- import { CommonAPI } from '../../electron- api/common ' ;
3
+ import { RequirementsResourceImpl } from '../../tip-manager- api/requirements ' ;
4
4
5
5
export default function Requirements ( ) {
6
6
const getRequirements = async ( ) => {
7
- const requirements = await new CommonAPI ( ) . getRequirements ( ) ;
8
- setRequirements ( requirements . map ( requirement => requirement . stdout ) ) ;
7
+ const requirements = await new RequirementsResourceImpl ( ) . getRequirements ( ) ;
8
+ setRequirements ( requirements . map ( requirement => requirement . message ) ) ;
9
9
} ;
10
10
11
11
const [ requirements , setRequirements ] = useState < string [ ] > ( [ ] ) ;
Original file line number Diff line number Diff line change 1
- import { TipManagerAPI } from '../../shared/api' ;
1
+ import { TipManagerResource } from '../../shared/api' ;
2
2
3
3
declare global {
4
4
interface Window {
5
- tipmanager : TipManagerAPI ;
5
+ tipmanager : TipManagerResource ;
6
6
}
7
7
}
8
8
9
9
export class BaseAPI {
10
- private _base : TipManagerAPI ;
10
+ private _base : TipManagerResource ;
11
11
12
12
get base ( ) {
13
13
return this . _base ;
Original file line number Diff line number Diff line change
1
+ import type {
2
+ Requirement ,
3
+ RequirementsResource ,
4
+ } from '../../shared/types/requirements' ;
5
+ import { BaseAPI } from './base' ;
6
+
7
+ export class RequirementsResourceImpl
8
+ extends BaseAPI
9
+ implements RequirementsResource
10
+ {
11
+ async getRequirements ( ) : Promise < Requirement [ ] > {
12
+ return this . base . requirements . getRequirements ( ) ;
13
+ }
14
+ }
You can’t perform that action at this time.
0 commit comments