npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

crs_queue

v3.2.1

Published

Coalescing, rate-limited, serializable/deserializable task queue

Downloads

3

Readme

crs_queue

crs_queue is a simple coalescing, rate-limited, serializable/deserializable task queue for Node and Deno which is designed for issuing requests to a rate-limited endpoint from a host program that is transient (as opposed to long-running).

Features

  • Tasks with the same (string) identity are coalesced (using "last writer wins" for task data)
  • Requests are limited according to a user-specified rate
  • The entire queue (including tasks, data, history) can be serialized/deserialized (e.g. to localStorage)
  • Tasks can be delayed/scheduled for the future

Note that this library does not guarantee that requests won't be issued more than once. For example, if the queue is serialized while a request is in flight, that request can later be run a second time if the queue is deserialized and restarted.

API

Task type

Tasks are objects with only primitive/JSON-compatible properties. There is only one required property:

  • id (string): This is the identity of the task; tasks with the same identity are coalesced (with all other data being overwritten by the most recent task)

Example:

{
    id: "update leaderboard",
    value: 5,
}

TaskManager

This section is just a quick summary. Refer to JSDoc comments for more detail.

The task queue is encapsulated in the TaskManager<TTask extends TaskBase, TResult> class. The class constructor takes options object with the following properties:

  • rateLimit ({ count: number, periodMS: number}):
    • count: Maximum number of tasks to process during the period
    • periodMS: Length of the period in milliseconds
  • onRunTask ((task: TTask) => Promise<TResult>): Async callback for processing a task
  • onTaskFailure ((task: TTask) => void | undefined): Optional task failure handler (e.g. to re-enqueue the task)

Here's a brief description of the class's methods:

  • run(task: TTask): Promise<TResult> | null: Enqueues the provided task (coalescing, if applicable); if run immediately, the running task's promise (from onRunTask above) is returned (otherwise null is returned)
  • stop(): void: Halts task processing (note that in-flight tasks will not be canceled/stopped)
  • start(): void: Starts task processing, if it had been previously stopped
  • serialize(): string: Serializes the task queue to a string
  • toParsedJson(): object: Serializes the task queue to a JSON-friendly object (meaning it converts Date objects to strings that can be round-tripped through JSON.stringify() and JSON.parse())

Deserialization is done using:

  • TaskManager.deserialize(json: string, options)
  • TaskManager.fromParsedJson(object, options)