/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ import { TaskConfiguration, TaskConfigurationGenerator, TaskId } from '../src/engine'; import { FileSystemSchematicContext } from './description'; import { NodeModulesEngineHost } from './node-module-engine-host'; /** * An EngineHost that uses a registry to super seed locations of collection.json files, but * revert back to using node modules resolution. This is done for testing. */ export class NodeModulesTestEngineHost extends NodeModulesEngineHost { #collections = new Map(); #tasks: TaskConfiguration[] = []; get tasks() { return this.#tasks; } clearTasks() { this.#tasks = []; } registerCollection(name: string, path: string) { this.#collections.set(name, path); } override transformContext(context: FileSystemSchematicContext): FileSystemSchematicContext { const oldAddTask = context.addTask.bind(context); context.addTask = (task: TaskConfigurationGenerator, dependencies?: TaskId[]) => { this.#tasks.push(task.toConfiguration()); return oldAddTask(task, dependencies); }; return context; } protected override _resolveCollectionPath(name: string, requester?: string): string { return this.#collections.get(name) ?? super._resolveCollectionPath(name, requester); } }