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

qipp-services-semaphore

v1.0.2

Published

Semaphore service for Angular application.

Downloads

3

Readme

qipp-services-semaphore Build Status npm version

General

This service is used in order to deal with race conditions. It provides methods to create named and uuid-based semaphores for manageing resources availability or state.

Installation

npm i qipp-services-semaphore

Angular usage

In the config phase of your application

You can set the default timeout for the service, which will be used by the kill() and waitForUnlock() methods:

semaphoreProvider.defaults.timeout = 60 // in seconds.

Named semaphores

There two different categories of available semaphores, the named ones, which could be created in the scaffold phase of your application, and the generic ones, created later on demand.

Use the init() method in order to create a hash map of unique named semaphores on top of the underlaying pool of uuids:

semaphore.init('myNamedSemaphore')
console.log(semaphore.namesPool)
// Object {myNamedSemaphore: "39b357ec-7931-433a-9a19-85128f964197"}
console.log(semaphore.uuidsPool)
// Object {39b357ec-7931-433a-9a19-85128f964197: [false]}

You can also create multiple semaphores as arguments:

semaphore.init('semaphoreA', 'semaphoreB', 'semaphoreC')

Note that the boolean value is the lock state of the semaphore.

Generic semaphores

Use the create() method to create a generic semaphore:

semaphore.create() // returns the uuid.

Killing semaphores

The kill() method is a promise with .success and .error callbacks. Be aware that this method could be called externally, unlike the unlock(), which means that you don't need to know the secret. This method wait for the semaphore to be unclocked:

semaphore
    .kill('39b357ec-7931-433a-9a19-85128f964197')
    // Semaphore was unlocked, then killed.
    .success(function () {
        // Do something.
    })
    // Semaphore was locked, then not killed.
    .error(function () {
        // Do something else.
    })

Note that the default timeout is used if the semaphore is locked.

Locking semaphores

The lock() method is a promise with .success and .error callbacks. It locks a given semaphore if previously unlocked, then returns a new uuid as secret that must be provided later to the unlock() method:

semaphore
    .lock('39b357ec-7931-433a-9a19-85128f964197')
    .success(function (secret) {
        console.log(secret) // 2290890c-1733-46ec-b392-52bef39f1fa8
    })
    .error(function () {
        // Do something else.
    })

Unlocking semaphores

The unlock() method is a promise with .success and .error callbacks. It must be called with the id of the semaphore and the corresponding secret:

semaphore
    .unlock(
        '39b357ec-7931-433a-9a19-85128f964197', // semaphore
        '2290890c-1733-46ec-b392-52bef39f1fa8'  // uuid
    )
    // Semaphore is now unlocked.
    .success(function () {
        // Do something.
    })
    // Semaphore is still locked.
    .error(function () {
        // Do something else.
    })

Waiting for a semaphore to be unlocked

The waitForUnlock() method is a promise with .success and .error callbacks. This method could be called after an unlock error in order to wait for a given semaphore to be freed:

semaphore
    .waitForUnlock('39b357ec-7931-433a-9a19-85128f964197')
    .success(function () {
        // Do something.
    })
    .error(function () {
        // Do something else.
    })

Note that the default timeout is also used here.

Tools

Linting with StandardJS

Please refer to the JavaScript Standard Style for general rules.

npm run lint

Unit testing with Karma

npm test

Requirements

Angular

Qipp modules

Licence

Released under the MIT license by qipp.