@@ -4,6 +4,7 @@ import { NodeJsSyncHost } from '@angular-devkit/core/node';
4
4
import { createWorkspaceHost } from '@angular-devkit/core/src/workspace' ;
5
5
import { readWorkspace as devKitReadWorkspace } from '@angular-devkit/core/src/workspace/core' ;
6
6
import { BadRequestException , Injectable } from '@nestjs/common' ;
7
+ import { isDefined } from 'class-validator' ;
7
8
8
9
import { SessionService } from '../session/session.service' ;
9
10
@@ -12,16 +13,25 @@ import { NOT_VALID_PATH_EXCEPTION } from './entities';
12
13
13
14
@Injectable ( )
14
15
export class WorkspaceManagerService {
16
+ private readonly pathDirectoriesCache = new Map < string , DirectoryDto [ ] > ( ) ;
17
+
15
18
constructor ( private sessionService : SessionService ) { }
16
19
17
20
public async getDirectoriesInPath (
18
21
path : string = this . sessionService . cwd
19
22
) : Promise < DirectoryDto [ ] > {
23
+ const cachedPathDirectories : DirectoryDto [ ] | undefined =
24
+ this . pathDirectoriesCache . get ( path ) ;
25
+
26
+ if ( isDefined ( cachedPathDirectories ) ) {
27
+ return cachedPathDirectories as DirectoryDto [ ] ;
28
+ }
29
+
20
30
try {
21
31
const filesAndDirectories = await fs . readdir ( path , {
22
32
withFileTypes : true ,
23
33
} ) ;
24
- return Promise . all (
34
+ const directories = await Promise . all (
25
35
filesAndDirectories
26
36
. filter ( ( fileOrFolder ) => fileOrFolder . isDirectory ( ) )
27
37
. map (
@@ -32,6 +42,8 @@ export class WorkspaceManagerService {
32
42
)
33
43
)
34
44
) ;
45
+ this . pathDirectoriesCache . set ( path , directories ) ;
46
+ return directories ;
35
47
} catch ( e ) {
36
48
throw new BadRequestException ( `${ NOT_VALID_PATH_EXCEPTION } : ${ path } ` ) ;
37
49
}
0 commit comments