@@ -4,6 +4,7 @@ import { NodeJsSyncHost } from '@angular-devkit/core/node';
44import { createWorkspaceHost } from '@angular-devkit/core/src/workspace' ;
55import { readWorkspace as devKitReadWorkspace } from '@angular-devkit/core/src/workspace/core' ;
66import { BadRequestException , Injectable } from '@nestjs/common' ;
7+ import { isDefined } from 'class-validator' ;
78
89import { SessionService } from '../session/session.service' ;
910
@@ -12,16 +13,25 @@ import { NOT_VALID_PATH_EXCEPTION } from './entities';
1213
1314@Injectable ( )
1415export class WorkspaceManagerService {
16+ private readonly pathDirectoriesCache = new Map < string , DirectoryDto [ ] > ( ) ;
17+
1518 constructor ( private sessionService : SessionService ) { }
1619
1720 public async getDirectoriesInPath (
1821 path : string = this . sessionService . cwd
1922 ) : Promise < DirectoryDto [ ] > {
23+ const cachedPathDirectories : DirectoryDto [ ] | undefined =
24+ this . pathDirectoriesCache . get ( path ) ;
25+
26+ if ( isDefined ( cachedPathDirectories ) ) {
27+ return cachedPathDirectories as DirectoryDto [ ] ;
28+ }
29+
2030 try {
2131 const filesAndDirectories = await fs . readdir ( path , {
2232 withFileTypes : true ,
2333 } ) ;
24- return Promise . all (
34+ const directories = await Promise . all (
2535 filesAndDirectories
2636 . filter ( ( fileOrFolder ) => fileOrFolder . isDirectory ( ) )
2737 . map (
@@ -32,6 +42,8 @@ export class WorkspaceManagerService {
3242 )
3343 )
3444 ) ;
45+ this . pathDirectoriesCache . set ( path , directories ) ;
46+ return directories ;
3547 } catch ( e ) {
3648 throw new BadRequestException ( `${ NOT_VALID_PATH_EXCEPTION } : ${ path } ` ) ;
3749 }
0 commit comments