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

@hitorisensei/mutex-decorator

v1.0.1

Published

Mutex and Re-entrant Mutex Decorators for TypeScript

Downloads

8

Readme

Mutex Decorators Library

This library provides two TypeScript decorators, Mutex and ReentrantMutex, for locking methods to ensure mutual exclusion in asynchronous contexts.

Under the hood, the library uses composable-locks to provide the Mutex locking mechanism.

In contrast to composable-locks, the ReentrantMutex decorator doesn't depend on domain symbols use and instead uses AsyncLocalStorage to keep the recursive lock state.


NOTE: This library is intended to be used by TypeScript projects.
Projects must have the experimentalDecorators option enabled in the tsconfig.json file.

{
  "compilerOptions": {
    "experimentalDecorators": true,
  }
}

Installation

Install the library using npm:

npm install composable-locks

Usage

Mutex Decorator

The Mutex decorator ensures that the decorated method is locked with a mutex, allowing only one execution at a time. It queues concurrent calls and executes them sequentially.

Example

import { Mutex } from './mutex';

class ExampleClass {
  @Mutex
  async criticalSection() {
    // Your code here
  }
}

const instance = new ExampleClass();
instance.criticalSection();

ReentrantMutex Decorator

The ReentrantMutex decorator allows reentrant locking in the same asynchronous context. It uses AsyncLocalStorage to check if the lock is already acquired in the current async context.

Because the use of AsyncLocalStorage is used, a minimal performance and/or memory overhead is expected. Thus, it is recommended to use ReentrantMutex only when recursive calls are expected.

Example

import { ReentrantMutex } from './reentrantMutex';

class ExampleClass {
  @ReentrantMutex
  async criticalSection() {
    // Your code here
  }
}

const instance = new ExampleClass();
instance.criticalSection();

Testing

The library includes tests for both decorators using Jest. To run the tests, use the following command:

npm test

License

This project is licensed under the MIT License.