diff --git a/packages/angular/cli/src/commands/mcp/host.ts b/packages/angular/cli/src/commands/mcp/host.ts index 40586bdcd8ac..f93a0115f640 100644 --- a/packages/angular/cli/src/commands/mcp/host.ts +++ b/packages/angular/cli/src/commands/mcp/host.ts @@ -71,6 +71,14 @@ export interface Host { options: { cwd: string }, ): AsyncIterable<{ name: string; parentPath: string; isFile(): boolean }>; + /** + * Resolves a module request from a given path. + * @param request The module request to resolve. + * @param from The path from which to resolve the request. + * @returns The resolved module path. + */ + resolveModule(request: string, from: string): string; + /** * Spawns a child process and returns a promise that resolves with the process's * output or rejects with a structured error. @@ -170,6 +178,10 @@ export const LocalWorkspaceHost: Host = { return nodeGlob(pattern, { ...options, withFileTypes: true }); }, + resolveModule(request: string, from: string): string { + return createRequire(from).resolve(request); + }, + runCommand: async ( command: string, args: readonly string[], diff --git a/packages/angular/cli/src/commands/mcp/testing/mock-host.ts b/packages/angular/cli/src/commands/mcp/testing/mock-host.ts index ef818062d559..295590f4b765 100644 --- a/packages/angular/cli/src/commands/mcp/testing/mock-host.ts +++ b/packages/angular/cli/src/commands/mcp/testing/mock-host.ts @@ -18,6 +18,7 @@ export class MockHost implements Host { existsSync = jasmine.createSpy('existsSync'); readFile = jasmine.createSpy('readFile').and.resolveTo(''); glob = jasmine.createSpy('glob').and.returnValue((async function* () {})()); + resolveModule = jasmine.createSpy('resolveRequest').and.returnValue('/dev/null'); spawn = jasmine.createSpy('spawn'); getAvailablePort = jasmine.createSpy('getAvailablePort'); isPortAvailable = jasmine.createSpy('isPortAvailable').and.resolveTo(true);