Skip to content

Commit 7ec472b

Browse files
tomzo42agroupp
authored andcommitted
perf(workspace-manager): added cache to get directory api
1 parent 2c830c8 commit 7ec472b

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

apps/cli-daemon/src/app/workspace-manager/workspace-manager.service.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { NodeJsSyncHost } from '@angular-devkit/core/node';
44
import { createWorkspaceHost } from '@angular-devkit/core/src/workspace';
55
import { readWorkspace as devKitReadWorkspace } from '@angular-devkit/core/src/workspace/core';
66
import { BadRequestException, Injectable } from '@nestjs/common';
7+
import { isDefined } from 'class-validator';
78

89
import { SessionService } from '../session/session.service';
910

@@ -12,16 +13,25 @@ import { NOT_VALID_PATH_EXCEPTION } from './entities';
1213

1314
@Injectable()
1415
export 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

Comments
 (0)