GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - ofershap/tiny-queue: Promise queue with concurrency and priority. Drop-in p-queue replacement. ESM + CJS, zero deps, TypeScript.

BranchesTags
Open more actions menu

Latest commit

 

History

47 Commits
47 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
.husky
.husky
 
 
assets
assets
 
 
src
src
 
 
tests
tests
 
 
.gitignore
.gitignore
 
 
.prettierrc.json
.prettierrc.json
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
eslint.config.js
eslint.config.js
 
 
package-lock.json
package-lock.json
 
 
package.json
package.json
 
 
tsconfig.json
tsconfig.json
 
 
tsup.config.ts
tsup.config.ts
 
 
vitest.config.ts
vitest.config.ts
 
 

Repository files navigation

tiny-queue

npm version npm downloads CI TypeScript License: MIT

Promise queue with concurrency control. Same API as p-queue, but ships both ESM and CJS with zero dependencies.

import { PQueue } from "tiny-pqueue";

const queue = new PQueue({ concurrency: 5 });
await queue.add(() => fetch(url));
await queue.onIdle();

~3.2 KB gzipped. Zero dependencies. Priority support, pause/resume, events, timeouts.

Demo

Demo built with remotion-readme-kit

Install

npm install tiny-pqueue

Usage

import { PQueue } from "tiny-pqueue";

const queue = new PQueue({ concurrency: 3 });

const result = await queue.add(() => fetchUser(1));
const batch = await queue.addAll([
  () => fetchUser(2),
  () => fetchUser(3),
  () => fetchUser(4),
]);

await queue.onIdle();

Priority tasks

const queue = new PQueue({ concurrency: 1 });

queue.add(lowPriorityWork, { priority: 0 });
queue.add(highPriorityWork, { priority: 10 }); // runs first

Pause and resume

queue.pause();
queue.add(() => doWork()); // queued but won't run

queue.start(); // now it runs
await queue.onIdle();

Timeouts

const queue = new PQueue({
  concurrency: 2,
  timeout: 5000,
  throwOnTimeout: true,
});

// throws if task takes longer than 5 seconds
await queue.add(() => slowOperation());

Events

queue.on("active", () => console.log(`Running: ${queue.pending}`));
queue.on("idle", () => console.log("All done"));
queue.on("error", (err) => console.error(err));

Wait for queue state

await queue.onEmpty(); // queue drained (tasks may still run)
await queue.onIdle(); // everything finished
await queue.onSizeLessThan(5); // queue drops below 5

Differences from p-queue

p-queue v8+ is ESM-only. If you require("p-queue") in a CommonJS project, you get ERR_REQUIRE_ESM. tiny-queue works with both import and require().

p-queue tiny-queue
CJS support v6 only (v7+ ESM-only) ESM + CJS
Dependencies eventemitter3, p-timeout 0
TypeScript separate @types native
Export default named

Migrating from p-queue

- import PQueue from "p-queue";
+ import { PQueue } from "tiny-pqueue";

One line. Everything else stays the same.

API

new PQueue(options?)

  • concurrency - max parallel tasks (default: Infinity)
  • autoStart - start processing immediately (default: true)
  • timeout - per-task timeout in ms
  • throwOnTimeout - throw on timeout instead of resolving undefined (default: false)

queue.add(fn, options?)

Add a task. Returns a promise with the result. Options: priority (higher = sooner, default 0), signal (AbortSignal).

queue.addAll(fns, options?)

Add multiple tasks. Returns Promise<T[]>.

queue.pause() / queue.start()

Pause or resume processing.

queue.clear()

Remove all pending tasks.

queue.onIdle() / queue.onEmpty() / queue.onSizeLessThan(n)

Wait for queue state changes.

queue.on(event, listener) / queue.off(event, listener)

Events: active, idle, add, next, completed, error.

queue.size / queue.pending / queue.isPaused / queue.concurrency

Inspect and control the queue at runtime.

The tiny-* family

Drop-in replacements for sindresorhus async utilities. All ship ESM + CJS with zero dependencies.

Package Replaces What it does
tiny-limit p-limit Concurrency limiter
tiny-map p-map Concurrent map with order
tiny-retry p-retry Retry with exponential backoff
tiny-queue p-queue Priority task queue
tiny-ms ms Parse/format durations
tiny-escape escape-string-regexp Escape regex chars

Want all async utilities in one import? Use tiny-pasync.

Author

Made by ofershap

LinkedIn GitHub


If this saved you from ERR_REQUIRE_ESM, star the repo or open an issue if something breaks.


README built with README Builder

License

MIT © Ofer Shapira

About

Promise queue with concurrency and priority. Drop-in p-queue replacement. ESM + CJS, zero deps, TypeScript.

Resources

Readme
MIT license
Activity

Stars

0 stars

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.