open-index/open-npm huggingface dataset:
npm package: @ryanhs/mutex-promise
Description: Small JS mutex library
Author: Kirill Konshin
Latest version: 0.2.0

Promise Mutex
=============

A simple JS Mutex library that works both in browser and NodeJS. Library ensures that asynchronous code will wait until
the mutex is unlocked, even if it was locked from another tab.

The usual use-case is when you need to do a server request and you'd like to make sure that only one concurrent request
will be executed, others will wait until the mutex is unlocked, no matter which tab has created the request.

Installation
------------

### Browser

```sh
$ bower install promise-mutex
```

Or download the [raw file](https://github.com/kirill-konshin/mutex-promise/blob/master/index.js).

### NodeJS

```sh
$ npm install mutex-promise
```

API
---

```js
var MutexPromise = require('mutex-promise'); // in NodeJS, in browser this is not needed

var mutex = new MutexPromise('key', {...options}); // key will be used for localStorage, so it should be unique enough
```

Options:

- `timeout` &mdash; mutex will be automatically unlocked after timeout
- `interval` &mdash; how frequently to poll the storage for changes

```
// Lock the mutex
mutex.lock();

// Get a promise that resolves when mutex is unlocked or expired
mutex.promise().then(function(mutex){ ... });

// Unlock the mutex
mutex.unlock();
```

Example
-------

The function ensures that only one concurrent request may be executed.

```js
var mutex = new MutexPromise('some-very-unique-key');

function doStuffExclusively(mutex) {
    return mutex.promise()
        .then(function(mutex){
            mutex.lock();
            return fetch('http://localhost', {method: 'PUT', body: ...});
        })
        .then(function(res){
            mutex.unlock();
            return res;
        })
        .catch(function(e){
            mutex.unlock();
            throw e;
        });
}

doStuffExclusively(mutex);
doStuffExclusively(mutex);
doStuffExclusively(mutex);
```

Dependencies
------------

Library uses Promises, modern browsers these days have native implementation, for old ones you can use any polyfill.

To store data library uses LocalStorage in browser and a simple Storage object in NodeJS. Keep in mind, that library's
built-in NodeJS storage is not persistent, nothing is shared between processes or script runs. If you need to have
persistent mutexes you can inject a persistent Storage implementation via DI. Implementation must have at least
`getValue(key, value)`, `setValue(key)` and `removeValue(key)` methods, which has to be synchronous. 

To inject custom implementations of Promise or Storage:
 
```js
MutexPromise.Promise = ...;
MutexPromise.localStorage = ...;
```
npm package: @ryanide/vue-select
Description: Everything you wish the HTML <select> element could do, wrapped up into a lightweight, extensible Vue component.
Author: Jeff Sagal
Latest version: 3.4.2

# vue-select ![Current Release](https://img.shields.io/github/release/sagalbot/vue-select.svg?style=flat-square) ![Bundle Size](https://flat.badgen.net/bundlephobia/min/vue-select)  ![Monthly Downloads](https://img.shields.io/npm/dm/vue-select.svg?style=flat-square) ![Code Coverage](https://img.shields.io/coveralls/github/sagalbot/vue-select.svg?style=flat-square) ![Maintainability Score](https://img.shields.io/codeclimate/maintainability/sagalbot/vue-select.svg?style=flat-square) ![MIT License](https://img.shields.io/github/license/sagalbot/vue-select.svg?style=flat-square) 

> **Everything you wish the HTML `<select>` element could do, wrapped up into a lightweight, zero 
dependency, extensible Vue component.** 

- Tagging
- Filtering / Searching
- Vuex Support
- AJAX Support
- SSR Support
- ~20kb Total / ~5kb CSS / ~15kb JS
- Select Single/Multiple Options
- Customizable with slots and SCSS variables
- Tested with Bootstrap 3/4, Bulma, Foundation
- +95% Test Coverage
- Zero dependencies

## Documentation

Complete documentation and examples available at https://vue-select.org.

- **[API Documentation](https://vue-select.org)**
- **[Sandbox Demo](https://vue-select.org/sandbox.html)**
- **[CodePen Template](http://codepen.io/sagalbot/pen/NpwrQO)**
- **[GitHub Projects](https://github.com/sagalbot/vue-select/projects)**

## Install

```bash
$ npm install vue-select
```

Register the component

```js
import Vue from 'vue'
import vSelect from 'vue-select'

Vue.component('v-select', vSelect)
```

You may now use the component in your markup

```html
<v-select v-model="selected" :options="['Vue.js','React']"></v-select>
```

You can also include vue-select directly in the browser. Check out the 
[documentation for loading from CDN.](https://vue-select.org/guide/install.html#in-the-browser).

## License

[MIT](https://github.com/sagalbot/vue-select/blob/master/LICENSE.md)