diff options
Diffstat (limited to 'packages/core/src/utils/workspaceContext.ts')
| -rw-r--r-- | packages/core/src/utils/workspaceContext.ts | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/packages/core/src/utils/workspaceContext.ts b/packages/core/src/utils/workspaceContext.ts index 16d1b4c9..efbc8a4c 100644 --- a/packages/core/src/utils/workspaceContext.ts +++ b/packages/core/src/utils/workspaceContext.ts @@ -15,6 +15,8 @@ import * as path from 'path'; export class WorkspaceContext { private directories: Set<string>; + private initialDirectories: Set<string>; + /** * Creates a new WorkspaceContext with the given initial directory and optional additional directories. * @param initialDirectory The initial working directory (usually cwd) @@ -22,11 +24,14 @@ export class WorkspaceContext { */ constructor(initialDirectory: string, additionalDirectories: string[] = []) { this.directories = new Set<string>(); + this.initialDirectories = new Set<string>(); this.addDirectoryInternal(initialDirectory); + this.addInitialDirectoryInternal(initialDirectory); for (const dir of additionalDirectories) { this.addDirectoryInternal(dir); + this.addInitialDirectoryInternal(dir); } } @@ -69,6 +74,33 @@ export class WorkspaceContext { this.directories.add(realPath); } + private addInitialDirectoryInternal( + directory: string, + basePath: string = process.cwd(), + ): void { + const absolutePath = path.isAbsolute(directory) + ? directory + : path.resolve(basePath, directory); + + if (!fs.existsSync(absolutePath)) { + throw new Error(`Directory does not exist: ${absolutePath}`); + } + + const stats = fs.statSync(absolutePath); + if (!stats.isDirectory()) { + throw new Error(`Path is not a directory: ${absolutePath}`); + } + + let realPath: string; + try { + realPath = fs.realpathSync(absolutePath); + } catch (_error) { + throw new Error(`Failed to resolve path: ${absolutePath}`); + } + + this.initialDirectories.add(realPath); + } + /** * Gets a copy of all workspace directories. * @returns Array of absolute directory paths @@ -77,6 +109,17 @@ export class WorkspaceContext { return Array.from(this.directories); } + getInitialDirectories(): readonly string[] { + return Array.from(this.initialDirectories); + } + + setDirectories(directories: readonly string[]): void { + this.directories.clear(); + for (const dir of directories) { + this.addDirectoryInternal(dir); + } + } + /** * Checks if a given path is within any of the workspace directories. * @param pathToCheck The path to validate |
