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

@sandfox/camlock

v1.1.0

Published

a basic in-process lock

Downloads

4

Readme

camlock

a basic in-process lock for nodejs V5+ (and maybe also v4)

I wrote this primarily for mucking about and trying a few things so it's usefulness to you may vary but feel free to use it however you want to.

It's primarily designed for creating locks when you want to prevent concurrent execution of blocks of code, most likely during/around asychronous calls such as network/disk i/o. If code incorrectly tries to get/release a lock this module will throw, so this is probably useful when you just want to guard against incorrect behaviour in fairly bang sort of way.

Installation

This is a scoped packaged so you need to be using a recent-ish version of npm (probably v2 at minimum)

npm install [--save] @sandfox/camlock

Usage

A simple example:

const Camlock = require('@sandfox/camlock')

const myLockManager = new Camlock()

const myLockToken = myLockManager.get('update-xy')

// Do things etc
myLockManager.release('update-xy', myLockToken)

Acquire a lock

const Camlock = require('@sandfox/camlock')
const myLockManager = new Camlock()
const myLockToken = myLockManager.get('some-key')

Camlock#get takes anything as first argument to be used as the lock key. The underlying storage system is a Map so keep that in mind wit regards to equality comparision. The function returns an opaque token represented by an object, don't interefer with it, you'll need this exact token later to release the lock.

Release a lock

const Camlock = require('@sandfox/camlock')
const myLockManager = new Camlock()
const myLockToken = myLockManager.get('db-write')
myLockManager.release('db-write', myLockToken)

Camlock#release takes whatever value was used to get the lock (or anything equal to that as far as Map thinks) as the first arguement, and the token returned when getting the lock. Trying to release a lock on a key that has no lock will throw, as will not supplying the token, or supplying an incorrect token / expired.

See if a lock exists

const Camlock = require('@sandfox/camlock')
const myLockManager = new Camlock()
myLockManager.has('db-write') // returns false
const myLockToken = myLockManager.get('db-write')
myLockManager.has('db-write') // returns true
myLockManager.release('db-write', myLockToken)
myLockManager.has('db-write') // returns false

Camlock#has takes the lockname as the first argument. returns boolean.

See if a lock token is valid

const Camlock = require('@sandfox/camlock')
const myLockManager = new Camlock()
const myLockToken = myLockManager.get('db-write')
myLockManager.validate('db-write') // returns false
myLockManager.validate('db-write', {}) // returns false
myLockManager.validate('db-write', myLockToken) // returns true
myLockManager.release('db-write', myLockToken)
myLockManager.validate('db-write', myLockToken) // returns false

Camlock#validate takes the lockname as the first argument, token as the second and validates that the token is valid for the lockname. returns boolean.

License

See the 'LICENSE' file