Skip to content

Commit aad7796

Browse files
schaablekanej
authored andcommitted
Add root tasks getter
1 parent 5bf6df9 commit aad7796

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

v-next/core/src/internal/tasks/task-manager.ts

+4
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ export class TaskManagerImplementation implements TaskManager {
4848
}
4949
}
5050

51+
public get rootTasks(): Map<string, Task> {
52+
return this.#rootTasks;
53+
}
54+
5155
public getTask(taskId: string | string[]): Task {
5256
taskId = Array.isArray(taskId) ? taskId : [taskId];
5357
if (taskId.length === 0) {

v-next/core/src/types/tasks.ts

+4
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,10 @@ export interface Task {
379379
* can be used to retrieve tasks and run them.
380380
*/
381381
export interface TaskManager {
382+
/**
383+
* Returns the root tasks of the task manager.
384+
*/
385+
get rootTasks(): Map<string, Task>;
382386
/**
383387
* Returns a task by its id, throwing if it doesn't exist.
384388
*/

v-next/core/test/internal/tasks/task-manager.ts

+21-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ import { TaskDefinitionType } from "../../../src/types/tasks.js";
2525
*/
2626
describe("TaskManagerImplementation", () => {
2727
it("should initialize the task manager with an empty set of tasks if no plugins or tasks are provided", async () => {
28-
await assert.doesNotReject(createHardhatRuntimeEnvironment({}));
28+
const hre = await createHardhatRuntimeEnvironment({});
29+
30+
assert.equal(hre.tasks.rootTasks.size, 0);
2931
});
3032

3133
it("should initialize the task manager with the tasks from the plugins", async () => {
@@ -79,6 +81,12 @@ describe("TaskManagerImplementation", () => {
7981
const task3 = hre.tasks.getTask("task3");
8082
assert.deepEqual(task3.id, ["task3"]);
8183
assert.equal(task3.pluginId, "plugin2");
84+
85+
// task1, task2 and task3 should be root tasks
86+
assert.equal(hre.tasks.rootTasks.size, 3);
87+
assert.deepEqual(hre.tasks.rootTasks.get("task1")?.id, ["task1"]);
88+
assert.deepEqual(hre.tasks.rootTasks.get("task2")?.id, ["task2"]);
89+
assert.deepEqual(hre.tasks.rootTasks.get("task3")?.id, ["task3"]);
8290
});
8391

8492
it("should initialize the task manager with the tasks from the config", async () => {
@@ -114,6 +122,12 @@ describe("TaskManagerImplementation", () => {
114122
const task3 = hre.tasks.getTask("task3");
115123
assert.deepEqual(task3.id, ["task3"]);
116124
assert.equal(task3.pluginId, undefined);
125+
126+
// task1, task2 and task3 should be root tasks
127+
assert.equal(hre.tasks.rootTasks.size, 3);
128+
assert.deepEqual(hre.tasks.rootTasks.get("task1")?.id, ["task1"]);
129+
assert.deepEqual(hre.tasks.rootTasks.get("task2")?.id, ["task2"]);
130+
assert.deepEqual(hre.tasks.rootTasks.get("task3")?.id, ["task3"]);
117131
});
118132

119133
it("should override a task within the same plugin", async () => {
@@ -350,6 +364,12 @@ describe("TaskManagerImplementation", () => {
350364
const subsubtask1 = hre.tasks.getTask(["task1", "subtask1", "subsubtask1"]);
351365
assert.deepEqual(subsubtask1.id, ["task1", "subtask1", "subsubtask1"]);
352366
assert.equal(subsubtask1.pluginId, "plugin2");
367+
368+
// task1 should be a root task, but subtask1 and subsubtask1 should not
369+
assert.equal(hre.tasks.rootTasks.size, 1);
370+
assert.deepEqual(hre.tasks.rootTasks.get("task1")?.id, ["task1"]);
371+
assert.equal(hre.tasks.rootTasks.get("subtask1"), undefined);
372+
assert.equal(hre.tasks.rootTasks.get("subsubtask1"), undefined);
353373
});
354374

355375
/**

0 commit comments

Comments
 (0)