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 🙏

© 2026 – Pkg Stats / Ryan Hefner

ee-resource-pool

v0.1.9

Published

resource pool with queueing and rate limiting

Readme

ee-resource-pool

resource pool for managing shared resources

installation

npm install ee-resource-pool

build status

Build Status

usage

example of a pool of connections, there may never be more than 50 connections open.

var ResourcePool = require( "ee-resource-pool" );


var pool = new ResourcePool( {
	  max: 50 					// max 50 connections
	, maxWaitingRequests: 1000 	// fail requests for a connection when there are already more then 1'000 requests waiting
	, timeout: 5000 			// fail requests for a connection after waiting 5 seconds
	, idle: 600000 				// close conenctions if they weren't used in the last 10 minutes
	, prefetch: 10 				// create always 10% more connections currently used, so we neevr have to wait for aconnection to be created
} );


// the pool can request more resources, but if you don't need 
// special resources you dont listen for the event and the pool 
// will create its own resource representation 
// -> this is entirely optional
pool.on( "resourceRequest", function( callback ){
	callback( new Connection() );
} );


// if the pool gets a free resource which isn't used by the queue it emits the «resource» event
pool.on( "resource", function(){
	pool.get( function( err, resource ){
		// you should get that exact resource which triggered the event

	} );
} );


// this code is placed where you request the connections
pool.get( function( err, connection ){
	if ( err ){
		if ( err.name === "CapacityOverloadException" ) {
			console.log( "the resource pool is over capacity ...", err );
		}
		else if ( err.name === "RequestTimeoutException" ){
			console.log( "timeout while waiting for a free connection ...", err );
		}
	}
	else {
		// use the connection
		// IMPORTANT: if you are finished using ti you have to call the «freeResource» or «closeResource» method 

		connection.query( "whatever", function( err, data ){
			if ( err ){
				console.log( "crap, my query failed" );
				connection.closeResource();
				connection.close();
			}
			else {
				console.log( "got some data :)" );
				connection.freeResource();
			}
		} );
	}
} );

example of an image uploader which never should upload more than 5 images at the same time

var ResourcePool = require( "ee-resource-pool" );


var pool = new ResourcePool( {
	  timeout: 3600000 			// fail if we cannot upload an image within the next hour
	, ratelLimit: 5 			// max 5 uploads / second
} );


// the pool can request more resources
pool.on( "resourceRequest", function( callback ){
	callback( new Uploader() );
} );


// this code is placed where you uploader your imges, it will rate liimit your request...
pool.get( function( err, uploader ){
	if ( err ){
		if ( err.name === "RequestTimeoutException" ){
			console.log( "timeout while waiting for a free uploader ...", err );
		}
	}
	else {
		// use the uploader
		// IMPORTANT: if you are finished using ti you have to call the «freeResource» or «closeResource» method 

		uploader.upload.query( data, function( err ){
			if ( err ){
				console.log( "crap, the upload failed" );
				uploader.closeResource();
			}
			else {
				console.log( "upload finished :)" );
				uploader.freeResource();
			}
		} );
	}
} );