mini-semaphore 1.3.16 → 1.3.17

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/cjs/deque.js CHANGED
@@ -23,26 +23,28 @@ const am = (src, si, dst, di, len) => {
23
23
  */
24
24
  const p2l = (n) => {
25
25
  n = n >>> 0;
26
- n = n - 1;
27
- n = n | (n >> 1);
28
- n = n | (n >> 2);
29
- n = n | (n >> 4);
30
- n = n | (n >> 8);
31
- n = n | (n >> 16);
26
+ n--;
27
+ n |= n >> 1;
28
+ n |= n >> 2;
29
+ n |= n >> 4;
30
+ n |= n >> 8;
31
+ n |= n >> 16;
32
32
  return n + 1;
33
33
  };
34
34
  /**
35
35
  * getCapacity
36
- * @param {number=} n
36
+ * @param {number} n
37
37
  */
38
38
  const gc = (n) => {
39
- // @ts-ignore typescript cannot allow (undefined | 0) expression
40
39
  return p2l(Math.min(Math.max(16, n | 0), 1073741824));
41
40
  };
42
41
  /**
43
42
  * ### Implementation restricted to FIFO
44
43
  *
45
- * this class is based on https://github.com/petkaantonov/deque/blob/master/js/deque.js
44
+ * This class uses a ring buffer for efficient FIFO operations.
45
+ * The maximum buffer size is **`1073741824`**.
46
+ *
47
+ * This class is based on https://github.com/petkaantonov/deque/blob/master/js/deque.js
46
48
  * Released under the MIT License: https://github.com/petkaantonov/deque/blob/master/LICENSE
47
49
  *
48
50
  * @template {any} T
@@ -55,19 +57,20 @@ class Deque {
55
57
  constructor(ic) {
56
58
  /**
57
59
  * capacity
58
- * @type {number}
59
60
  */
60
- this._c = gc(ic);
61
+ this._c = gc(ic || 16);
61
62
  /**
62
63
  * current length (size
63
- * @type {number}
64
64
  */
65
65
  this._l = 0;
66
66
  /**
67
67
  * current front position
68
- * @type {number}
69
68
  */
70
69
  this._f = 0;
70
+ /**
71
+ *
72
+ */
73
+ this.length = 0;
71
74
  /**
72
75
  * @type {T[]}
73
76
  */
@@ -83,7 +86,7 @@ class Deque {
83
86
  }
84
87
  const i = (this._f + l) & (this._c - 1);
85
88
  this._a[i] = s;
86
- this._l = l + 1;
89
+ this.length = this._l = l + 1;
87
90
  }
88
91
  shift() {
89
92
  const l = this._l;
@@ -95,12 +98,9 @@ class Deque {
95
98
  const r = this._a[f];
96
99
  this._a[f] = /** @type {T} */ (void 0);
97
100
  this._f = (f + 1) & (this._c - 1);
98
- this._l = l - 1;
101
+ this.length = this._l = l - 1;
99
102
  return r;
100
103
  }
101
- get length() {
102
- return this._l;
103
- }
104
104
  }
105
105
  exports.Deque = Deque;
106
106
  /**
package/cjs/index.d.ts CHANGED
@@ -35,7 +35,7 @@ export declare class Deque<T extends any> {
35
35
  push(s: T): void;
36
36
  shift(): T | undefined;
37
37
  // clear(): void;
38
- get length(): number;
38
+ readonly length: number;
39
39
  }
40
40
 
41
41
  /**
package/cjs/index.js CHANGED
@@ -9,4 +9,4 @@ var deque_1 = require("./deque");
9
9
  Object.defineProperty(exports, "Deque", { enumerable: true, get: function () { return deque_1.Deque; } });
10
10
  var flow_restrictor_1 = require("./flow-restrictor");
11
11
  Object.defineProperty(exports, "restrictor", { enumerable: true, get: function () { return flow_restrictor_1.restrictor; } });
12
- exports.version = "v1.3.16";
12
+ exports.version = "v1.3.17";
package/esm/deque.mjs CHANGED
@@ -20,26 +20,28 @@ const am = (src, si, dst, di, len) => {
20
20
  */
21
21
  const p2l = (n) => {
22
22
  n = n >>> 0;
23
- n = n - 1;
24
- n = n | (n >> 1);
25
- n = n | (n >> 2);
26
- n = n | (n >> 4);
27
- n = n | (n >> 8);
28
- n = n | (n >> 16);
23
+ n--;
24
+ n |= n >> 1;
25
+ n |= n >> 2;
26
+ n |= n >> 4;
27
+ n |= n >> 8;
28
+ n |= n >> 16;
29
29
  return n + 1;
30
30
  };
31
31
  /**
32
32
  * getCapacity
33
- * @param {number=} n
33
+ * @param {number} n
34
34
  */
35
35
  const gc = (n) => {
36
- // @ts-ignore typescript cannot allow (undefined | 0) expression
37
36
  return p2l(Math.min(Math.max(16, n | 0), 1073741824));
38
37
  };
39
38
  /**
40
39
  * ### Implementation restricted to FIFO
41
40
  *
42
- * this class is based on https://github.com/petkaantonov/deque/blob/master/js/deque.js
41
+ * This class uses a ring buffer for efficient FIFO operations.
42
+ * The maximum buffer size is **`1073741824`**.
43
+ *
44
+ * This class is based on https://github.com/petkaantonov/deque/blob/master/js/deque.js
43
45
  * Released under the MIT License: https://github.com/petkaantonov/deque/blob/master/LICENSE
44
46
  *
45
47
  * @template {any} T
@@ -52,19 +54,20 @@ export class Deque {
52
54
  constructor(ic) {
53
55
  /**
54
56
  * capacity
55
- * @type {number}
56
57
  */
57
- this._c = gc(ic);
58
+ this._c = gc(ic || 16);
58
59
  /**
59
60
  * current length (size
60
- * @type {number}
61
61
  */
62
62
  this._l = 0;
63
63
  /**
64
64
  * current front position
65
- * @type {number}
66
65
  */
67
66
  this._f = 0;
67
+ /**
68
+ *
69
+ */
70
+ this.length = 0;
68
71
  /**
69
72
  * @type {T[]}
70
73
  */
@@ -80,7 +83,7 @@ export class Deque {
80
83
  }
81
84
  const i = (this._f + l) & (this._c - 1);
82
85
  this._a[i] = s;
83
- this._l = l + 1;
86
+ this.length = this._l = l + 1;
84
87
  }
85
88
  shift() {
86
89
  const l = this._l;
@@ -92,12 +95,9 @@ export class Deque {
92
95
  const r = this._a[f];
93
96
  this._a[f] = /** @type {T} */ (void 0);
94
97
  this._f = (f + 1) & (this._c - 1);
95
- this._l = l - 1;
98
+ this.length = this._l = l - 1;
96
99
  return r;
97
100
  }
98
- get length() {
99
- return this._l;
100
- }
101
101
  }
102
102
  /**
103
103
  * resize to
package/esm/index.d.mts CHANGED
@@ -35,7 +35,7 @@ export declare class Deque<T extends any> {
35
35
  push(s: T): void;
36
36
  shift(): T | undefined;
37
37
  // clear(): void;
38
- get length(): number;
38
+ readonly length: number;
39
39
  }
40
40
 
41
41
  /**
package/esm/index.mjs CHANGED
@@ -2,4 +2,4 @@ export { MiniSemaphore } from "./class.mjs";
2
2
  export { create } from "./object.mjs";
3
3
  export { Deque } from "./deque.mjs";
4
4
  export { restrictor } from "./flow-restrictor.mjs";
5
- export const version = "v1.3.16";
5
+ export const version = "v1.3.17";
package/index.d.ts CHANGED
@@ -35,7 +35,7 @@ export declare class Deque<T extends any> {
35
35
  push(s: T): void;
36
36
  shift(): T | undefined;
37
37
  // clear(): void;
38
- get length(): number;
38
+ readonly length: number;
39
39
  }
40
40
 
41
41
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mini-semaphore",
3
- "version": "1.3.16",
3
+ "version": "1.3.17",
4
4
  "description": "A lightweight version of Semaphore",
5
5
  "private": false,
6
6
  "main": "./cjs/index.js",
package/umd/index.d.ts CHANGED
@@ -35,7 +35,7 @@ export declare class Deque<T extends any> {
35
35
  push(s: T): void;
36
36
  shift(): T | undefined;
37
37
  // clear(): void;
38
- get length(): number;
38
+ readonly length: number;
39
39
  }
40
40
 
41
41
  /**
package/umd/index.js CHANGED
@@ -2,6 +2,6 @@
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)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.release=t.acquire=void 0;const i=()=>{
3
3
  throw new Error("mini-semaphore: Detected an inconsistent state, possibly due to a logic error or unexpected behavior.")},r=(e,t)=>{e.capacity>0?(e.capacity--,t()):e.q.push(t)};t.acquire=(e,t=!0)=>new Promise((i=>{t?setTimeout((()=>r(e,i)),4):r(e,i)}));t.release=e=>{let t;(t=e.q).length?(t.shift()||i)():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(),
4
4
  new ReferenceError(`Cannot get object with different restriction: key: '${String(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];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
5
- ;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){await s(this,t);try{return await e()}finally{o(this)}}}},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]
6
- ;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:{}};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(){
7
- return s.Deque}});var o=i(464);Object.defineProperty(e,"restrictor",{enumerable:!0,get:function(){return o.restrictor}}),e.version="v1.3.16"})(),r})()));
5
+ ;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){await s(this,t);try{return await e()}finally{o(this)}}}},761:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Deque=void 0;const i=e=>(e=>(e>>>=0,e--,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||16),this._l=0,this._f=0,this.length=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.length=this._l=t+1}shift(){const e=this._l;if(0===e)return
6
+ ;const t=this._f,i=this._a[t];return this._a[t]=void 0,this._f=t+1&this._c-1,this.length=this._l=e-1,i}};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:{}};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,
7
+ get:function(){return s.Deque}});var o=i(464);Object.defineProperty(e,"restrictor",{enumerable:!0,get:function(){return o.restrictor}}),e.version="v1.3.17"})(),r})()));
@@ -35,7 +35,7 @@ export declare class Deque<T extends any> {
35
35
  push(s: T): void;
36
36
  shift(): T | undefined;
37
37
  // clear(): void;
38
- get length(): number;
38
+ readonly length: number;
39
39
  }
40
40
 
41
41
  /**
package/webpack/index.js CHANGED
@@ -2,5 +2,5 @@
2
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)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.release=t.acquire=void 0;const i=()=>{throw new Error("mini-semaphore: Detected an inconsistent state, possibly due to a logic error or unexpected behavior.")},r=(e,t)=>{e.capacity>0?(e.capacity--,t()):e.q.push(t)};t.acquire=(e,t=!0)=>new Promise((i=>{t?setTimeout((()=>r(e,i)),4):r(e,i)}));t.release=e=>{let t
3
3
  ;(t=e.q).length?(t.shift()||i)():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 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: '${String(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)
4
4
  ;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++,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)}}}},
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.16"})(),module.exports=r})();
5
+ 761:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Deque=void 0;const i=e=>(e=>(e>>>=0,e--,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||16),this._l=0,this._f=0,this.length=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.length=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.length=this._l=e-1,i}};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.17"})(),module.exports=r})();
@@ -35,7 +35,7 @@ export declare class Deque<T extends any> {
35
35
  push(s: T): void;
36
36
  shift(): T | undefined;
37
37
  // clear(): void;
38
- get length(): number;
38
+ readonly length: number;
39
39
  }
40
40
 
41
41
  /**
@@ -2,5 +2,5 @@
2
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)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.release=t.acquire=void 0;const i=()=>{throw new Error("mini-semaphore: Detected an inconsistent state, possibly due to a logic error or unexpected behavior.")},r=(e,t)=>{e.capacity>0?(e.capacity--,t()):e.q.push(t)};t.acquire=(e,t=!0)=>new Promise((i=>{t?setTimeout((()=>r(e,i)),4):r(e,i)}));t.release=e=>{let t
3
3
  ;(t=e.q).length?(t.shift()||i)():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 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: '${String(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)
4
4
  ;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++,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)}}}},
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,"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.16"})();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};
5
+ 761:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Deque=void 0;const i=e=>(e=>(e>>>=0,e--,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||16),this._l=0,this._f=0,this.length=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.length=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.length=this._l=e-1,i}};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.17"})();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};