mini-semaphore 1.3.13 → 1.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/cjs/core.js +5 -3
- package/cjs/deque.js +2 -1
- package/cjs/flow-restrictor.js +7 -8
- package/cjs/index.js +1 -8
- package/esm/core.mjs +5 -3
- package/esm/deque.mjs +2 -1
- package/esm/flow-restrictor.mjs +7 -8
- package/esm/index.mjs +1 -8
- package/package.json +1 -1
- package/umd/index.js +5 -5
- package/webpack/index.js +5 -5
- package/webpack-esm/index.mjs +5 -5
package/README.md
CHANGED
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
A lightweight version of `Semaphore` that limits the number of process that can simultaneously access a resource or pool of resources.
|
|
14
14
|
This implementation can only work within one javascript runtime thead and realized by `Promise`
|
|
15
15
|
|
|
16
|
+
> ## API
|
|
17
|
+
|
|
18
|
+
+ [mini-semaphore API](./mini-semaphore-api.md)
|
|
19
|
+
|
|
16
20
|
> ## Usage
|
|
17
21
|
|
|
18
22
|
+ how to imports
|
package/cjs/core.js
CHANGED
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.release = exports.acquire = void 0;
|
|
4
4
|
const extras_1 = require("./extras");
|
|
5
5
|
/**
|
|
6
|
-
* @typedef {import("./index").Deque} Deque
|
|
7
6
|
* @typedef {import("./index").TVoidFunction} TVoidFunction
|
|
7
|
+
* @typedef {import("./index").Deque<TVoidFunction>} Deque
|
|
8
8
|
* @typedef {import("./index").ISimplifiedLock} ISimplifiedLock
|
|
9
9
|
* @typedef {import("./index").TFlowableLock} TFlowableLock
|
|
10
10
|
* @typedef {import("./index").IFlowableLock} IFlowableLock
|
|
@@ -44,8 +44,10 @@ exports.acquire = acquire;
|
|
|
44
44
|
* @returns {void}
|
|
45
45
|
*/
|
|
46
46
|
const release = (dis) => {
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
/** @type {Deque} */
|
|
48
|
+
let dq;
|
|
49
|
+
if ((dq = dis.q).length) {
|
|
50
|
+
(dq.shift() || /* istanbul ignore next */ extras_1.THROW)();
|
|
49
51
|
}
|
|
50
52
|
else {
|
|
51
53
|
dis.capacity++;
|
package/cjs/deque.js
CHANGED
|
@@ -10,7 +10,8 @@ exports.Deque = void 0;
|
|
|
10
10
|
* @param {number} di dest index
|
|
11
11
|
* @param {number} len move count
|
|
12
12
|
*/
|
|
13
|
-
|
|
13
|
+
/* istanbul ignore next */
|
|
14
|
+
const am = (src, si, dst, di, len) => {
|
|
14
15
|
for (let j = 0; j < len; ++j) {
|
|
15
16
|
dst[j + di] = src[j + si];
|
|
16
17
|
src[j + si] = void 0;
|
package/cjs/flow-restrictor.js
CHANGED
|
@@ -21,8 +21,7 @@ const c = require("./class");
|
|
|
21
21
|
/**
|
|
22
22
|
* Flow Restriction
|
|
23
23
|
*/
|
|
24
|
-
|
|
25
|
-
(function (restrictor) {
|
|
24
|
+
exports.restrictor = (() => {
|
|
26
25
|
const { MiniSemaphore: MS } = c;
|
|
27
26
|
/**
|
|
28
27
|
* @internal
|
|
@@ -59,7 +58,7 @@ var restrictor;
|
|
|
59
58
|
* @param {TLockRecordKey} key
|
|
60
59
|
* @returns `IFlowableLock` instance or `undefined`
|
|
61
60
|
*/
|
|
62
|
-
|
|
61
|
+
const getLockByKey = async (key) => {
|
|
63
62
|
await internalLock.acquire(false);
|
|
64
63
|
const l = locks[key];
|
|
65
64
|
internalLock.release();
|
|
@@ -73,7 +72,7 @@ var restrictor;
|
|
|
73
72
|
* @returns {Promise<number>} eliminated count
|
|
74
73
|
* @date 2020/6/19
|
|
75
74
|
*/
|
|
76
|
-
|
|
75
|
+
const cleanup = async (timeSpan, debug) => {
|
|
77
76
|
await internalLock.acquire(false);
|
|
78
77
|
const currentLocks = locks;
|
|
79
78
|
const newLocks = Object.create(null);
|
|
@@ -84,7 +83,6 @@ var restrictor;
|
|
|
84
83
|
!timeSpan && /* istanbul ignore next */ (timeSpan = 1);
|
|
85
84
|
timeSpan *= 1000;
|
|
86
85
|
if (debug) {
|
|
87
|
-
// @ts-ignore
|
|
88
86
|
eliminatedKeys = [];
|
|
89
87
|
}
|
|
90
88
|
for (let i = 0, end = keys.length; i < end;) {
|
|
@@ -125,7 +123,6 @@ var restrictor;
|
|
|
125
123
|
s.last = Date.now();
|
|
126
124
|
return result;
|
|
127
125
|
}
|
|
128
|
-
restrictor.multi = multi;
|
|
129
126
|
/**
|
|
130
127
|
* synonym of `multi(key, 1, pb)`
|
|
131
128
|
*
|
|
@@ -139,5 +136,7 @@ var restrictor;
|
|
|
139
136
|
async function one(key, pb) {
|
|
140
137
|
return multi(key, 1, pb);
|
|
141
138
|
}
|
|
142
|
-
|
|
143
|
-
|
|
139
|
+
return {
|
|
140
|
+
getLockByKey, cleanup, multi, one
|
|
141
|
+
};
|
|
142
|
+
})();
|
package/cjs/index.js
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
4
|
-
Copyright (C) 2020 jeffy-g <hirotom1107@gmail.com>
|
|
5
|
-
Released under the MIT license
|
|
6
|
-
https://opensource.org/licenses/mit-license.php
|
|
7
|
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
8
|
-
*/
|
|
9
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
3
|
exports.version = exports.restrictor = exports.Deque = exports.create = exports.MiniSemaphore = void 0;
|
|
11
4
|
var class_1 = require("./class");
|
|
@@ -16,4 +9,4 @@ var deque_1 = require("./deque");
|
|
|
16
9
|
Object.defineProperty(exports, "Deque", { enumerable: true, get: function () { return deque_1.Deque; } });
|
|
17
10
|
var flow_restrictor_1 = require("./flow-restrictor");
|
|
18
11
|
Object.defineProperty(exports, "restrictor", { enumerable: true, get: function () { return flow_restrictor_1.restrictor; } });
|
|
19
|
-
exports.version = "v1.3.
|
|
12
|
+
exports.version = "v1.3.15";
|
package/esm/core.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { THROW } from "./extras.mjs";
|
|
2
2
|
/**
|
|
3
|
-
* @typedef {import("./index.mjs").Deque} Deque
|
|
4
3
|
* @typedef {import("./index.mjs").TVoidFunction} TVoidFunction
|
|
4
|
+
* @typedef {import("./index.mjs").Deque<TVoidFunction>} Deque
|
|
5
5
|
* @typedef {import("./index.mjs").ISimplifiedLock} ISimplifiedLock
|
|
6
6
|
* @typedef {import("./index.mjs").TFlowableLock} TFlowableLock
|
|
7
7
|
* @typedef {import("./index.mjs").IFlowableLock} IFlowableLock
|
|
@@ -40,8 +40,10 @@ export const acquire = (dis, lazy = true) => {
|
|
|
40
40
|
* @returns {void}
|
|
41
41
|
*/
|
|
42
42
|
export const release = (dis) => {
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
/** @type {Deque} */
|
|
44
|
+
let dq;
|
|
45
|
+
if ((dq = dis.q).length) {
|
|
46
|
+
(dq.shift() || /* istanbul ignore next */ THROW)();
|
|
45
47
|
}
|
|
46
48
|
else {
|
|
47
49
|
dis.capacity++;
|
package/esm/deque.mjs
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* @param {number} di dest index
|
|
8
8
|
* @param {number} len move count
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
/* istanbul ignore next */
|
|
11
|
+
const am = (src, si, dst, di, len) => {
|
|
11
12
|
for (let j = 0; j < len; ++j) {
|
|
12
13
|
dst[j + di] = src[j + si];
|
|
13
14
|
src[j + si] = void 0;
|
package/esm/flow-restrictor.mjs
CHANGED
|
@@ -18,8 +18,7 @@ import * as c from "./class.mjs";
|
|
|
18
18
|
/**
|
|
19
19
|
* Flow Restriction
|
|
20
20
|
*/
|
|
21
|
-
export
|
|
22
|
-
(function (restrictor) {
|
|
21
|
+
export const restrictor = (() => {
|
|
23
22
|
const { MiniSemaphore: MS } = c;
|
|
24
23
|
/**
|
|
25
24
|
* @internal
|
|
@@ -56,7 +55,7 @@ export var restrictor;
|
|
|
56
55
|
* @param {TLockRecordKey} key
|
|
57
56
|
* @returns `IFlowableLock` instance or `undefined`
|
|
58
57
|
*/
|
|
59
|
-
|
|
58
|
+
const getLockByKey = async (key) => {
|
|
60
59
|
await internalLock.acquire(false);
|
|
61
60
|
const l = locks[key];
|
|
62
61
|
internalLock.release();
|
|
@@ -70,7 +69,7 @@ export var restrictor;
|
|
|
70
69
|
* @returns {Promise<number>} eliminated count
|
|
71
70
|
* @date 2020/6/19
|
|
72
71
|
*/
|
|
73
|
-
|
|
72
|
+
const cleanup = async (timeSpan, debug) => {
|
|
74
73
|
await internalLock.acquire(false);
|
|
75
74
|
const currentLocks = locks;
|
|
76
75
|
const newLocks = Object.create(null);
|
|
@@ -81,7 +80,6 @@ export var restrictor;
|
|
|
81
80
|
!timeSpan && /* istanbul ignore next */ (timeSpan = 1);
|
|
82
81
|
timeSpan *= 1000;
|
|
83
82
|
if (debug) {
|
|
84
|
-
// @ts-ignore
|
|
85
83
|
eliminatedKeys = [];
|
|
86
84
|
}
|
|
87
85
|
for (let i = 0, end = keys.length; i < end;) {
|
|
@@ -122,7 +120,6 @@ export var restrictor;
|
|
|
122
120
|
s.last = Date.now();
|
|
123
121
|
return result;
|
|
124
122
|
}
|
|
125
|
-
restrictor.multi = multi;
|
|
126
123
|
/**
|
|
127
124
|
* synonym of `multi(key, 1, pb)`
|
|
128
125
|
*
|
|
@@ -136,5 +133,7 @@ export var restrictor;
|
|
|
136
133
|
async function one(key, pb) {
|
|
137
134
|
return multi(key, 1, pb);
|
|
138
135
|
}
|
|
139
|
-
|
|
140
|
-
|
|
136
|
+
return {
|
|
137
|
+
getLockByKey, cleanup, multi, one
|
|
138
|
+
};
|
|
139
|
+
})();
|
package/esm/index.mjs
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
3
|
-
Copyright (C) 2020 jeffy-g <hirotom1107@gmail.com>
|
|
4
|
-
Released under the MIT license
|
|
5
|
-
https://opensource.org/licenses/mit-license.php
|
|
6
|
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
7
|
-
*/
|
|
8
1
|
export { MiniSemaphore } from "./class.mjs";
|
|
9
2
|
export { create } from "./object.mjs";
|
|
10
3
|
export { Deque } from "./deque.mjs";
|
|
11
4
|
export { restrictor } from "./flow-restrictor.mjs";
|
|
12
|
-
export const version = "v1.3.
|
|
5
|
+
export const version = "v1.3.15";
|
package/package.json
CHANGED
package/umd/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*! For license information please see index.js.LICENSE.txt */
|
|
2
2
|
((e,t)=>{'object'==typeof exports&&'object'==typeof module?module.exports=t():'function'==typeof define&&define.amd?define([],t):'object'==typeof exports?exports.MiniSema=t():e.MiniSema=t()})(globalThis,(()=>(()=>{"use strict";var e={139:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.create=void 0;const r=i(461),n=i(761),s=r.acquire,o=r.release;t.create=e=>({capacity:e,limit:e,q:new n.Deque(e),acquire(e){return s(this,e)},release(){o(this)},setRestriction(e){this.limit=this.capacity=e},get pending(){return this.q.length},async flow(e,t){await s(this,t);try{return await e()}finally{o(this)}}})},461:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.release=t.acquire=void 0;const r=i(669),n=(e,t)=>{e.capacity>0?(e.capacity--,t()):e.q.push(t)}
|
|
3
|
-
;t.acquire=(e,t=!0)=>new Promise((i=>{t?setTimeout((()=>n(e,i)),4):n(e,i)}));t.release=e=>{e.q.length?(
|
|
4
|
-
;return
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
;t.acquire=(e,t=!0)=>new Promise((i=>{t?setTimeout((()=>n(e,i)),4):n(e,i)}));t.release=e=>{let t;(t=e.q).length?(t.shift()||r.THROW)():e.capacity++,e.capacity>e.limit&&(console.warn("inconsistent release!"),e.capacity=e.limit)}},464:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.restrictor=void 0;const r=i(518);t.restrictor=(()=>{const{MiniSemaphore:e}=r,t=new e(1);let i=Object.create(null);async function n(r,n,s){const o=await(async(r,n)=>{await t.acquire(!1);let s=i[r];if(s||(i[r]=s=new e(n)),s.limit!==n)throw t.release(),new ReferenceError(`Cannot get object with different restriction: key: '${r}', lock.limit: ${s.limit} <-> restriction: ${n},`);return t.release(),s})(r,n),a=o.flow(s);return o.last=Date.now(),a}return{getLockByKey:async e=>{await t.acquire(!1);const r=i[e]
|
|
4
|
+
;return t.release(),r},cleanup:async(e,r)=>{await t.acquire(!1);const n=i,s=Object.create(null),o=Object.keys(n);let a,c=0;!e&&(e=1),e*=1e3,r&&(a=[]);for(let t=0,i=o.length;t<i;){const i=o[t++],l=n[i];l.last&&Date.now()-l.last>=e?(c++,r&&a.push(i)):s[i]=l}return i=s,t.release(),r&&console.log(`eliminated: [\n${a.join(",\n")}\n]\nlived: [\n${Object.keys(s).join(",\n")}\n]`),c},multi:n,one:async function(e,t){return n(e,1,t)}}})()},518:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MiniSemaphore=void 0;const r=i(461),n=i(761),s=r.acquire,o=r.release;t.MiniSemaphore=class{constructor(e){this.limit=this.capacity=e,this.q=new n.Deque(e)}acquire(e){return s(this,e)}release(){o(this)}setRestriction(e){this.limit=this.capacity=e}get pending(){return this.q.length}async flow(e,t){
|
|
5
|
+
await s(this,t);try{return await e()}finally{o(this)}}}},669:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.THROW=void 0;t.THROW=()=>{throw new Error("mini-semaphore: inconsistent occurred")}},761:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Deque=void 0;const i=e=>(e=>(e>>>=0,e-=1,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,1+(e|=e>>16)))(Math.min(Math.max(16,0|e),1073741824));t.Deque=class{constructor(e){this._c=i(e),this._l=0,this._f=0,this._a=[]}push(e){const t=this._l;this._c<t+1&&r(this,i(1.5*this._c+16));const n=this._f+t&this._c-1;this._a[n]=e,this._l=t+1}shift(){const e=this._l;if(0===e)return;const t=this._f,i=this._a[t];return this._a[t]=void 0,this._f=t+1&this._c-1,this._l=e-1,i}get length(){return this._l}};const r=(e,t)=>{const i=e._c;e._c=t;const r=e._f+e._l
|
|
6
|
+
;if(r>i){const t=r&i-1;((e,t,i,r,n)=>{for(let s=0;s<n;++s)i[s+r]=e[s+t],e[s+t]=void 0})(e._a,0,e._a,i,t)}}}},t={};function i(r){var n=t[r];if(void 0!==n)return n.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,i),s.exports}var r={};return(()=>{var e=r;Object.defineProperty(e,"__esModule",{value:!0}),e.version=e.restrictor=e.Deque=e.create=e.MiniSemaphore=void 0;var t=i(518);Object.defineProperty(e,"MiniSemaphore",{enumerable:!0,get:function(){return t.MiniSemaphore}});var n=i(139);Object.defineProperty(e,"create",{enumerable:!0,get:function(){return n.create}});var s=i(761);Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return s.Deque}});var o=i(464);Object.defineProperty(e,"restrictor",{enumerable:!0,get:function(){return o.restrictor}}),e.version="v1.3.15"})(),r
|
|
7
|
+
})()));
|
package/webpack/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! For license information please see index.js.LICENSE.txt */
|
|
2
|
-
(()=>{"use strict";var e={139:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.create=void 0;const r=i(461),n=i(761),s=r.acquire,a=r.release;t.create=e=>({capacity:e,limit:e,q:new n.Deque(e),acquire(e){return s(this,e)},release(){a(this)},setRestriction(e){this.limit=this.capacity=e},get pending(){return this.q.length},async flow(e,t){await s(this,t);try{return await e()}finally{a(this)}}})},461:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.release=t.acquire=void 0;const r=i(669),n=(e,t)=>{e.capacity>0?(e.capacity--,t()):e.q.push(t)};t.acquire=(e,t=!0)=>new Promise((i=>{t?setTimeout((()=>n(e,i)),4):n(e,i)}));t.release=e=>{e.q.length?(
|
|
3
|
-
464:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.restrictor=void 0;const r=i(518);
|
|
4
|
-
;l.last&&Date.now()-l.last>=e?(o++,
|
|
5
|
-
|
|
6
|
-
;
|
|
2
|
+
(()=>{"use strict";var e={139:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.create=void 0;const r=i(461),n=i(761),s=r.acquire,a=r.release;t.create=e=>({capacity:e,limit:e,q:new n.Deque(e),acquire(e){return s(this,e)},release(){a(this)},setRestriction(e){this.limit=this.capacity=e},get pending(){return this.q.length},async flow(e,t){await s(this,t);try{return await e()}finally{a(this)}}})},461:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.release=t.acquire=void 0;const r=i(669),n=(e,t)=>{e.capacity>0?(e.capacity--,t()):e.q.push(t)};t.acquire=(e,t=!0)=>new Promise((i=>{t?setTimeout((()=>n(e,i)),4):n(e,i)}));t.release=e=>{let t;(t=e.q).length?(t.shift()||r.THROW)():e.capacity++,e.capacity>e.limit&&(console.warn("inconsistent release!"),e.capacity=e.limit)}},
|
|
3
|
+
464:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.restrictor=void 0;const r=i(518);t.restrictor=(()=>{const{MiniSemaphore:e}=r,t=new e(1);let i=Object.create(null);async function n(r,n,s){const a=await(async(r,n)=>{await t.acquire(!1);let s=i[r];if(s||(i[r]=s=new e(n)),s.limit!==n)throw t.release(),new ReferenceError(`Cannot get object with different restriction: key: '${r}', lock.limit: ${s.limit} <-> restriction: ${n},`);return t.release(),s})(r,n),c=a.flow(s);return a.last=Date.now(),c}return{getLockByKey:async e=>{await t.acquire(!1);const r=i[e];return t.release(),r},cleanup:async(e,r)=>{await t.acquire(!1);const n=i,s=Object.create(null),a=Object.keys(n);let c,o=0;!e&&(e=1),e*=1e3,r&&(c=[]);for(let t=0,i=a.length;t<i;){const i=a[t++],l=n[i]
|
|
4
|
+
;l.last&&Date.now()-l.last>=e?(o++,r&&c.push(i)):s[i]=l}return i=s,t.release(),r&&console.log(`eliminated: [\n${c.join(",\n")}\n]\nlived: [\n${Object.keys(s).join(",\n")}\n]`),o},multi:n,one:async function(e,t){return n(e,1,t)}}})()},518:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MiniSemaphore=void 0;const r=i(461),n=i(761),s=r.acquire,a=r.release;t.MiniSemaphore=class{constructor(e){this.limit=this.capacity=e,this.q=new n.Deque(e)}acquire(e){return s(this,e)}release(){a(this)}setRestriction(e){this.limit=this.capacity=e}get pending(){return this.q.length}async flow(e,t){await s(this,t);try{return await e()}finally{a(this)}}}},669:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.THROW=void 0;t.THROW=()=>{throw new Error("mini-semaphore: inconsistent occurred")}
|
|
5
|
+
},761:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Deque=void 0;const i=e=>(e=>(e>>>=0,e-=1,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,1+(e|=e>>16)))(Math.min(Math.max(16,0|e),1073741824));t.Deque=class{constructor(e){this._c=i(e),this._l=0,this._f=0,this._a=[]}push(e){const t=this._l;this._c<t+1&&r(this,i(1.5*this._c+16));const n=this._f+t&this._c-1;this._a[n]=e,this._l=t+1}shift(){const e=this._l;if(0===e)return;const t=this._f,i=this._a[t];return this._a[t]=void 0,this._f=t+1&this._c-1,this._l=e-1,i}get length(){return this._l}};const r=(e,t)=>{const i=e._c;e._c=t;const r=e._f+e._l;if(r>i){const t=r&i-1;((e,t,i,r,n)=>{for(let s=0;s<n;++s)i[s+r]=e[s+t],e[s+t]=void 0})(e._a,0,e._a,i,t)}}}},t={};function i(r){var n=t[r];if(void 0!==n)return n.exports;var s=t[r]={exports:{}}
|
|
6
|
+
;return e[r](s,s.exports,i),s.exports}var r={};(()=>{var e=r;Object.defineProperty(e,"__esModule",{value:!0}),e.version=e.restrictor=e.Deque=e.create=e.MiniSemaphore=void 0;var t=i(518);Object.defineProperty(e,"MiniSemaphore",{enumerable:!0,get:function(){return t.MiniSemaphore}});var n=i(139);Object.defineProperty(e,"create",{enumerable:!0,get:function(){return n.create}});var s=i(761);Object.defineProperty(e,"Deque",{enumerable:!0,get:function(){return s.Deque}});var a=i(464);Object.defineProperty(e,"restrictor",{enumerable:!0,get:function(){return a.restrictor}}),e.version="v1.3.15"})(),module.exports=r})();
|
package/webpack-esm/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! For license information please see index.js.LICENSE.txt */
|
|
2
|
-
var e={139:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.create=void 0;const r=i(461),n=i(761),s=r.acquire,a=r.release;t.create=e=>({capacity:e,limit:e,q:new n.Deque(e),acquire(e){return s(this,e)},release(){a(this)},setRestriction(e){this.limit=this.capacity=e},get pending(){return this.q.length},async flow(e,t){await s(this,t);try{return await e()}finally{a(this)}}})},461:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.release=t.acquire=void 0;const r=i(669),n=(e,t)=>{e.capacity>0?(e.capacity--,t()):e.q.push(t)};t.acquire=(e,t=!0)=>new Promise((i=>{t?setTimeout((()=>n(e,i)),4):n(e,i)}));t.release=e=>{e.q.length?(
|
|
3
|
-
Object.defineProperty(t,"__esModule",{value:!0}),t.restrictor=void 0;const r=i(518);
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
;return e[r](s,s.exports,i),s.exports}var r={};(()=>{var e=r;Object.defineProperty(e,"BJ",{value:!0}),e.rE=e.Ws=e.Jj=e.vt=e.C=void 0;var t=i(518);Object.defineProperty(e,"C",{enumerable:!0,get:function(){return t.MiniSemaphore}});var n=i(139);Object.defineProperty(e,"vt",{enumerable:!0,get:function(){return n.create}});var s=i(761);Object.defineProperty(e,"Jj",{enumerable:!0,get:function(){return s.Deque}});var a=i(464);Object.defineProperty(e,"Ws",{enumerable:!0,get:function(){return a.restrictor}}),e.rE="v1.3.
|
|
2
|
+
var e={139:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.create=void 0;const r=i(461),n=i(761),s=r.acquire,a=r.release;t.create=e=>({capacity:e,limit:e,q:new n.Deque(e),acquire(e){return s(this,e)},release(){a(this)},setRestriction(e){this.limit=this.capacity=e},get pending(){return this.q.length},async flow(e,t){await s(this,t);try{return await e()}finally{a(this)}}})},461:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.release=t.acquire=void 0;const r=i(669),n=(e,t)=>{e.capacity>0?(e.capacity--,t()):e.q.push(t)};t.acquire=(e,t=!0)=>new Promise((i=>{t?setTimeout((()=>n(e,i)),4):n(e,i)}));t.release=e=>{let t;(t=e.q).length?(t.shift()||r.THROW)():e.capacity++,e.capacity>e.limit&&(console.warn("inconsistent release!"),e.capacity=e.limit)}},464:(e,t,i)=>{
|
|
3
|
+
Object.defineProperty(t,"__esModule",{value:!0}),t.restrictor=void 0;const r=i(518);t.restrictor=(()=>{const{MiniSemaphore:e}=r,t=new e(1);let i=Object.create(null);async function n(r,n,s){const a=await(async(r,n)=>{await t.acquire(!1);let s=i[r];if(s||(i[r]=s=new e(n)),s.limit!==n)throw t.release(),new ReferenceError(`Cannot get object with different restriction: key: '${r}', lock.limit: ${s.limit} <-> restriction: ${n},`);return t.release(),s})(r,n),c=a.flow(s);return a.last=Date.now(),c}return{getLockByKey:async e=>{await t.acquire(!1);const r=i[e];return t.release(),r},cleanup:async(e,r)=>{await t.acquire(!1);const n=i,s=Object.create(null),a=Object.keys(n);let c,o=0;!e&&(e=1),e*=1e3,r&&(c=[]);for(let t=0,i=a.length;t<i;){const i=a[t++],l=n[i];l.last&&Date.now()-l.last>=e?(o++,
|
|
4
|
+
r&&c.push(i)):s[i]=l}return i=s,t.release(),r&&console.log(`eliminated: [\n${c.join(",\n")}\n]\nlived: [\n${Object.keys(s).join(",\n")}\n]`),o},multi:n,one:async function(e,t){return n(e,1,t)}}})()},518:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MiniSemaphore=void 0;const r=i(461),n=i(761),s=r.acquire,a=r.release;t.MiniSemaphore=class{constructor(e){this.limit=this.capacity=e,this.q=new n.Deque(e)}acquire(e){return s(this,e)}release(){a(this)}setRestriction(e){this.limit=this.capacity=e}get pending(){return this.q.length}async flow(e,t){await s(this,t);try{return await e()}finally{a(this)}}}},669:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.THROW=void 0;t.THROW=()=>{throw new Error("mini-semaphore: inconsistent occurred")}},761:(e,t)=>{
|
|
5
|
+
Object.defineProperty(t,"__esModule",{value:!0}),t.Deque=void 0;const i=e=>(e=>(e>>>=0,e-=1,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,1+(e|=e>>16)))(Math.min(Math.max(16,0|e),1073741824));t.Deque=class{constructor(e){this._c=i(e),this._l=0,this._f=0,this._a=[]}push(e){const t=this._l;this._c<t+1&&r(this,i(1.5*this._c+16));const n=this._f+t&this._c-1;this._a[n]=e,this._l=t+1}shift(){const e=this._l;if(0===e)return;const t=this._f,i=this._a[t];return this._a[t]=void 0,this._f=t+1&this._c-1,this._l=e-1,i}get length(){return this._l}};const r=(e,t)=>{const i=e._c;e._c=t;const r=e._f+e._l;if(r>i){const t=r&i-1;((e,t,i,r,n)=>{for(let s=0;s<n;++s)i[s+r]=e[s+t],e[s+t]=void 0})(e._a,0,e._a,i,t)}}}},t={};function i(r){var n=t[r];if(void 0!==n)return n.exports;var s=t[r]={exports:{}}
|
|
6
|
+
;return e[r](s,s.exports,i),s.exports}var r={};(()=>{var e=r;Object.defineProperty(e,"BJ",{value:!0}),e.rE=e.Ws=e.Jj=e.vt=e.C=void 0;var t=i(518);Object.defineProperty(e,"C",{enumerable:!0,get:function(){return t.MiniSemaphore}});var n=i(139);Object.defineProperty(e,"vt",{enumerable:!0,get:function(){return n.create}});var s=i(761);Object.defineProperty(e,"Jj",{enumerable:!0,get:function(){return s.Deque}});var a=i(464);Object.defineProperty(e,"Ws",{enumerable:!0,get:function(){return a.restrictor}}),e.rE="v1.3.15"})();const n=r.Jj,s=r.C,a=r.BJ,c=r.vt,o=r.Ws,l=r.rE;export{n as Deque,s as MiniSemaphore,a as __esModule,c as create,o as restrictor,l as version};
|