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

@alius/pool

v1.0.5

Published

Resource pool

Downloads

2

Readme

Resource pool.

Installation

npm install @alius/pool

Usage

import { Pool, ResourceFactory } from "@alius/pool";

// create resource factory class
class MyResourceFactory extends ResourceFactory {
  // used for creating new resource
  async create() {
    // for example database connection
    const res = {};
    return res;
  }

  // used for destroying resource
  async destroy(resource) {
    // for example disconnect from database
  }

  // used for validating existing resource
  async validate(resource) {
    // validate resource
    if (resourceIsNotValid) {
      throw new Error();
    }
  }
}

// create resource factory
const resourceFactory = new MyResourceFactory();

const poolOptions = {
  max: 10,
  min: 3,
  validate: true
};

// create and start pool
const pool = new Pool(resourceFactory, poolOptions);
pool.start();

// acquire and use resource
let resource;
try {
  resource = await pool.acquire();
  // use resource
} catch(err) {
  console.error("got error", err);
} finally {
  if (resource) {
    pool.release(resource);
  }
}

// shut down pool
await pool.shutDown();

API

Constructors

Pool(resourceFactory)

Creates new pool with specified resource factory.

Pool(resourceFactory, poolOptions)

Creates new pool with specified resource factory and options.

Properties

state

  • CREATED - pool is just created
  • STARTED - pool is started
  • DOWN - pool is shutting down
  • STOPPED - pool is stopped

stats

Returns current pool statistics: requests, creators, destroyers, resources(total, idle, inUse, testing)

Methods

acquire()

Acquires new resource from pool. This method creates and queues new request (Promise) for resource. Request (Promise) will be resolved with resource as soon as it becomes available. If pool is not started or is shutting down or request queue is full - returns immediately with rejected request (Promise).

release(resource)

Returns resource to pool.

start()

Starts pool. Pool will start only if it's state is either CREATED or STOPPED. Trying to start already running pool will be siletly discarded.

shutDown()

Shuts down pool. New requests for resource acquisition will be immediately rejected. All outstanding requests are rejected. Returns promise which will be resolved after all acquired resources are released and destroyed.

Events emitted

  • started - pool has been started
  • stopping - pool is stopping
  • stopped - pool has been stopped
  • created - new resource created
  • createFailed - failed to create new resource; error passed as event argument
  • destroyed - resource destroyed
  • destroyFailed - failed to destroy resource; error passed as event argument
  • acquired - resource acquired
  • validationFailed - failed to validate resource; error passed as event argument
  • released - resource released back to pool

Pool options (passed to constructor)

  • createTimeout = 0 number of milliseconds to wait for creating resource; 0 - waits indefinitely.
  • destroyTimeout = 0 number of milliseconds to wait for destroying resource; 0 - waits indefinitely.
  • max = 1 maximum number of resources in this pool
  • min = 0 minimum number of resources in this pool
  • validate = false should resource be tested before releasing it
  • validateTimeout = 0 number of milliseconds to wait for testing resource; 0 - waits indefinitely.
  • acquireTimeout = 0 number of milliseconds to wait for acquiring resource; 0 - waits indefinitely.
  • maxTries = 0 maximum number of failed tries to create resource before rejecting request; 0 - tries indefinitely.
  • maxQueue = 0 maximum number of requests in queue. Incomming requests overflowing max queue wil be immediately rejected; 0 - queue size is not restricted.
  • evictionInterval = 0 how often to run eviction checks; 0 - will not run.
  • evictionAge = 0 minimum number of milliseconds before resource becomes eligible for evition. Resource can be evicted only if pool size greater than minimum number of reources; 0 - no resource will be evicted.