Skip to content

System for managing and executing asynchronous and synchronous tasks with queuing, parallel execution, and progress tracking.

License

Notifications You must be signed in to change notification settings

lilBunnyRabbit/task-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

17 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

npm version npm downloads

A flexible and powerful task management system built with TypeScript. It helps in managing both synchronous and asynchronous tasks with ease, allowing you to queue tasks, execute them sequentially or in parallel, and monitor their progress.

✨ Check out the Landing Page for an Overview, Examples, and Use Cases!

πŸš€ Installation

To install the package, run:

npm i @lilbunnyrabbit/task-manager

🎯 Features

  • Task Orchestration – Manage workflows with sequential or parallel execution.
  • Progress Tracking – Monitor task progress with built-in state handling.
  • Type Safety – Built with TypeScript for safe task handling.
  • Composable Workflows – Reuse task groups for structured execution.
  • Error Recovery – Handle failures and continue execution.
  • Query Interface – Access task results, states, and logs.

For more details, visit the API Documentation.

πŸ”₯ Getting Started

This system revolves around three core components: Task, TaskGroup, and TaskManager.

  • Task: Represents a single unit of work with its own logic, data, execution state, and error handling.
  • TaskGroup: Allows grouping related tasks together, managing dependencies, and structuring workflows.
  • TaskManager: Orchestrates execution, handles progress tracking, and manages error recovery.

Creating a Task

Define a task using createTask:

import { createTask } from "@lilbunnyrabbit/task-manager";

const myTask = createTask<number, string>({
  name: "Example Task",
  async execute(id) {
    return `Task #${id} Completed!`;
  },
});

Grouping Tasks with TaskGroup

A TaskGroup allows structuring workflows by managing multiple tasks:

import { createTaskGroup } from "@lilbunnyrabbit/task-manager";

const exampleGroup = createTaskGroup({
  name: "Example Group",
  tasks(ids: number[]) {
    return ids.map((id) => myTask(id));
  },
});

Managing Execution with TaskManager

A TaskManager runs and tracks task execution:

import { TaskManager } from "@lilbunnyrabbit/task-manager";

const manager = new TaskManager();
manager.addTasks(exampleGroup([1, 2, 3]), myTask(4));
manager.start();

For more examples, visit the Examples Section.

πŸ“‚ Use Cases

Some practical use cases of @lilbunnyrabbit/task-manager include:

See more in the Use Cases Section.

πŸ“š API Overview

This section provides a rough TypeScript definition of the main components.

Task

A Task represents a unit of work with execution logic, progress tracking, and result management.

interface Task<TSpec extends TaskSpec> extends TaskBase<TSpec> {
  readonly id: string;
  readonly name: string;
  readonly data: TSpec["TData"]
  readonly builder: TaskBuilder<TSpec>
  readonly logs: LogEntry[];
  readonly query?: TaskQuery;

  execute(): Promise<Optional<TSpec["TResult"]>>;
  parse(): ParsedTask;
  toString(pretty?: boolean): string;
  clone(): Task<TSpec>;
}

TaskGroup

A TaskGroup manages multiple tasks and defines execution order.

interface TaskGroup<TArgs extends unknown[]> extends TaskGroupBase {
  readonly id: string;
  readonly name: string;
  readonly args: TArgs;
  readonly builder: TaskGroupBuilder<TArgs>;
  readonly mode: ExecutionMode;
  readonly tasks: ExecutableTask[];
  readonly query: TaskQuery;

  execute(): Promise<this>;
  toString(pretty?: boolean): string;
  clone(): TaskGroup<TArgs>;
}

TaskManager

A TaskManager executes tasks, tracks progress, and manages execution settings.

interface TaskManager extends TaskManagerBase {
  readonly tasks: ExecutableTask[];
  readonly query: TaskQuery;

  addTask(task: ExecutableTask): this;
  addTasks(...tasks: ExecutableTask[]): this;
  start(force?: boolean): Promise<void>;
  stop(): void;
  reset(): void;
  clearQueue(): this;
}

For full API documentation, visit the Docs.

πŸ”§ Development

Setup

Clone the repository and install dependencies:

git clone https://github.com/lilBunnyRabbit/task-manager.git
cd task-manager
npm install

Available Scripts

Command Description
npm run build Compiles TypeScript code.
npm test Runs tests with Jest.
npm run clean Clears dist/ and node_modules/.
npm run changeset Manages versioning and changelog updates with Changesets.
npm run release Publishes the package to npm.
npm run generate:docs Generates API documentation.

πŸ“¦ Related Packages

These utilities complement @lilbunnyrabbit/task-manager:

Package Description
@lilbunnyrabbit/event-emitter A lightweight event system for tasks.
@lilbunnyrabbit/optional A TypeScript utility for handling optional values.
@lilbunnyrabbit/utils Collection of helper functions and utilities.

πŸŽ‰ Contribution

Contributions are always welcome! For any enhancements or bug fixes, please open a pull request linked to the relevant issue. If there's no existing issue related to your contribution, feel free to create one.

πŸ’– Support

Your support is greatly appreciated! If this package has been helpful, consider supporting its development. Your contributions help maintain and improve this project.

GitHub Sponsor

πŸ“œ License

MIT © Andraž Mesarič-Sirec