mini-semaphore 1.3.13 → 1.3.16
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 +11 -4
- package/cjs/deque.js +2 -1
- package/cjs/flow-restrictor.js +13 -15
- package/cjs/index.js +1 -8
- package/esm/core.mjs +11 -4
- package/esm/deque.mjs +2 -1
- package/esm/flow-restrictor.mjs +13 -15
- package/esm/index.mjs +1 -8
- package/package.json +1 -1
- package/umd/index.js +6 -6
- package/webpack/index.js +5 -5
- package/webpack-esm/index.mjs +4 -4
- package/cjs/extras.js +0 -7
- package/esm/extras.mjs +0 -4
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
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.release = exports.acquire = void 0;
|
|
4
|
-
const extras_1 = require("./extras");
|
|
5
4
|
/**
|
|
6
|
-
* @typedef {import("./index").Deque} Deque
|
|
7
5
|
* @typedef {import("./index").TVoidFunction} TVoidFunction
|
|
6
|
+
* @typedef {import("./index").Deque<TVoidFunction>} Deque
|
|
8
7
|
* @typedef {import("./index").ISimplifiedLock} ISimplifiedLock
|
|
9
8
|
* @typedef {import("./index").TFlowableLock} TFlowableLock
|
|
10
9
|
* @typedef {import("./index").IFlowableLock} IFlowableLock
|
|
11
10
|
*/
|
|
11
|
+
/**
|
|
12
|
+
* Throws an error indicating an inconsistent state in mini-semaphore.
|
|
13
|
+
*/
|
|
14
|
+
const THROW = /* istanbul ignore next */ () => {
|
|
15
|
+
throw new Error("mini-semaphore: Detected an inconsistent state, possibly due to a logic error or unexpected behavior.");
|
|
16
|
+
};
|
|
12
17
|
/**
|
|
13
18
|
*
|
|
14
19
|
* @param {TFlowableLock} z
|
|
@@ -44,8 +49,10 @@ exports.acquire = acquire;
|
|
|
44
49
|
* @returns {void}
|
|
45
50
|
*/
|
|
46
51
|
const release = (dis) => {
|
|
47
|
-
|
|
48
|
-
|
|
52
|
+
/** @type {Deque} */
|
|
53
|
+
let dq;
|
|
54
|
+
if ((dq = dis.q).length) {
|
|
55
|
+
(dq.shift() || /* istanbul ignore next */ THROW)();
|
|
49
56
|
}
|
|
50
57
|
else {
|
|
51
58
|
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
|
@@ -16,25 +16,23 @@ exports.restrictor = void 0;
|
|
|
16
16
|
const c = require("./class");
|
|
17
17
|
/**
|
|
18
18
|
* @typedef {import("./index").IFlowableLock & { last?: number }} TFlowableLockWithTimeStamp
|
|
19
|
-
* @typedef {string | number} TLockRecordKey
|
|
20
19
|
*/
|
|
21
20
|
/**
|
|
22
21
|
* Flow Restriction
|
|
23
22
|
*/
|
|
24
|
-
|
|
25
|
-
(function (restrictor) {
|
|
23
|
+
exports.restrictor = (() => {
|
|
26
24
|
const { MiniSemaphore: MS } = c;
|
|
27
25
|
/**
|
|
28
26
|
* @internal
|
|
29
27
|
*/
|
|
30
28
|
const internalLock = new MS(1);
|
|
31
29
|
/**
|
|
32
|
-
* @type {Record<
|
|
30
|
+
* @type {Record<PropertyKey, TFlowableLockWithTimeStamp>}
|
|
33
31
|
*/
|
|
34
32
|
let locks = Object.create(null);
|
|
35
33
|
/**
|
|
36
34
|
*
|
|
37
|
-
* @param {
|
|
35
|
+
* @param {PropertyKey} key
|
|
38
36
|
* @param {number} restriction
|
|
39
37
|
* @throws when different restriction
|
|
40
38
|
*/
|
|
@@ -46,7 +44,7 @@ var restrictor;
|
|
|
46
44
|
}
|
|
47
45
|
if (lock.limit !== restriction) {
|
|
48
46
|
internalLock.release();
|
|
49
|
-
throw new ReferenceError(`Cannot get object with different restriction: key: '${key}', lock.limit: ${lock.limit} <-> restriction: ${restriction},`);
|
|
47
|
+
throw new ReferenceError(`Cannot get object with different restriction: key: '${String(key)}', lock.limit: ${lock.limit} <-> restriction: ${restriction},`);
|
|
50
48
|
}
|
|
51
49
|
internalLock.release();
|
|
52
50
|
return lock;
|
|
@@ -56,10 +54,10 @@ var restrictor;
|
|
|
56
54
|
*
|
|
57
55
|
* + ⚠️ The object to be retrieved with `key` must already be created with `multi` ore `one`
|
|
58
56
|
*
|
|
59
|
-
* @param {
|
|
57
|
+
* @param {PropertyKey} key
|
|
60
58
|
* @returns `IFlowableLock` instance or `undefined`
|
|
61
59
|
*/
|
|
62
|
-
|
|
60
|
+
const getLockByKey = async (key) => {
|
|
63
61
|
await internalLock.acquire(false);
|
|
64
62
|
const l = locks[key];
|
|
65
63
|
internalLock.release();
|
|
@@ -73,7 +71,7 @@ var restrictor;
|
|
|
73
71
|
* @returns {Promise<number>} eliminated count
|
|
74
72
|
* @date 2020/6/19
|
|
75
73
|
*/
|
|
76
|
-
|
|
74
|
+
const cleanup = async (timeSpan, debug) => {
|
|
77
75
|
await internalLock.acquire(false);
|
|
78
76
|
const currentLocks = locks;
|
|
79
77
|
const newLocks = Object.create(null);
|
|
@@ -84,7 +82,6 @@ var restrictor;
|
|
|
84
82
|
!timeSpan && /* istanbul ignore next */ (timeSpan = 1);
|
|
85
83
|
timeSpan *= 1000;
|
|
86
84
|
if (debug) {
|
|
87
|
-
// @ts-ignore
|
|
88
85
|
eliminatedKeys = [];
|
|
89
86
|
}
|
|
90
87
|
for (let i = 0, end = keys.length; i < end;) {
|
|
@@ -115,7 +112,7 @@ var restrictor;
|
|
|
115
112
|
* Allocate a semaphore for each `key`, and limit the number of shares with the value of `restriction`
|
|
116
113
|
*
|
|
117
114
|
* @template {any} T
|
|
118
|
-
* @param {
|
|
115
|
+
* @param {PropertyKey} key number or string as tag
|
|
119
116
|
* @param {number} restriction number of process restriction
|
|
120
117
|
* @param {() => Promise<T>} pb the process body
|
|
121
118
|
*/
|
|
@@ -125,7 +122,6 @@ var restrictor;
|
|
|
125
122
|
s.last = Date.now();
|
|
126
123
|
return result;
|
|
127
124
|
}
|
|
128
|
-
restrictor.multi = multi;
|
|
129
125
|
/**
|
|
130
126
|
* synonym of `multi(key, 1, pb)`
|
|
131
127
|
*
|
|
@@ -133,11 +129,13 @@ var restrictor;
|
|
|
133
129
|
* * Avoid concurrent requests to the same url
|
|
134
130
|
*
|
|
135
131
|
* @template {any} T
|
|
136
|
-
* @param {
|
|
132
|
+
* @param {PropertyKey} key number or string as tag
|
|
137
133
|
* @param {() => Promise<T>} pb the process body
|
|
138
134
|
*/
|
|
139
135
|
async function one(key, pb) {
|
|
140
136
|
return multi(key, 1, pb);
|
|
141
137
|
}
|
|
142
|
-
|
|
143
|
-
|
|
138
|
+
return {
|
|
139
|
+
getLockByKey, cleanup, multi, one
|
|
140
|
+
};
|
|
141
|
+
})();
|
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.16";
|
package/esm/core.mjs
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { THROW } from "./extras.mjs";
|
|
2
1
|
/**
|
|
3
|
-
* @typedef {import("./index.mjs").Deque} Deque
|
|
4
2
|
* @typedef {import("./index.mjs").TVoidFunction} TVoidFunction
|
|
3
|
+
* @typedef {import("./index.mjs").Deque<TVoidFunction>} Deque
|
|
5
4
|
* @typedef {import("./index.mjs").ISimplifiedLock} ISimplifiedLock
|
|
6
5
|
* @typedef {import("./index.mjs").TFlowableLock} TFlowableLock
|
|
7
6
|
* @typedef {import("./index.mjs").IFlowableLock} IFlowableLock
|
|
8
7
|
*/
|
|
8
|
+
/**
|
|
9
|
+
* Throws an error indicating an inconsistent state in mini-semaphore.
|
|
10
|
+
*/
|
|
11
|
+
const THROW = /* istanbul ignore next */ () => {
|
|
12
|
+
throw new Error("mini-semaphore: Detected an inconsistent state, possibly due to a logic error or unexpected behavior.");
|
|
13
|
+
};
|
|
9
14
|
/**
|
|
10
15
|
*
|
|
11
16
|
* @param {TFlowableLock} z
|
|
@@ -40,8 +45,10 @@ export const acquire = (dis, lazy = true) => {
|
|
|
40
45
|
* @returns {void}
|
|
41
46
|
*/
|
|
42
47
|
export const release = (dis) => {
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
/** @type {Deque} */
|
|
49
|
+
let dq;
|
|
50
|
+
if ((dq = dis.q).length) {
|
|
51
|
+
(dq.shift() || /* istanbul ignore next */ THROW)();
|
|
45
52
|
}
|
|
46
53
|
else {
|
|
47
54
|
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
|
@@ -13,25 +13,23 @@
|
|
|
13
13
|
import * as c from "./class.mjs";
|
|
14
14
|
/**
|
|
15
15
|
* @typedef {import("./index.mjs").IFlowableLock & { last?: number }} TFlowableLockWithTimeStamp
|
|
16
|
-
* @typedef {string | number} TLockRecordKey
|
|
17
16
|
*/
|
|
18
17
|
/**
|
|
19
18
|
* Flow Restriction
|
|
20
19
|
*/
|
|
21
|
-
export
|
|
22
|
-
(function (restrictor) {
|
|
20
|
+
export const restrictor = (() => {
|
|
23
21
|
const { MiniSemaphore: MS } = c;
|
|
24
22
|
/**
|
|
25
23
|
* @internal
|
|
26
24
|
*/
|
|
27
25
|
const internalLock = new MS(1);
|
|
28
26
|
/**
|
|
29
|
-
* @type {Record<
|
|
27
|
+
* @type {Record<PropertyKey, TFlowableLockWithTimeStamp>}
|
|
30
28
|
*/
|
|
31
29
|
let locks = Object.create(null);
|
|
32
30
|
/**
|
|
33
31
|
*
|
|
34
|
-
* @param {
|
|
32
|
+
* @param {PropertyKey} key
|
|
35
33
|
* @param {number} restriction
|
|
36
34
|
* @throws when different restriction
|
|
37
35
|
*/
|
|
@@ -43,7 +41,7 @@ export var restrictor;
|
|
|
43
41
|
}
|
|
44
42
|
if (lock.limit !== restriction) {
|
|
45
43
|
internalLock.release();
|
|
46
|
-
throw new ReferenceError(`Cannot get object with different restriction: key: '${key}', lock.limit: ${lock.limit} <-> restriction: ${restriction},`);
|
|
44
|
+
throw new ReferenceError(`Cannot get object with different restriction: key: '${String(key)}', lock.limit: ${lock.limit} <-> restriction: ${restriction},`);
|
|
47
45
|
}
|
|
48
46
|
internalLock.release();
|
|
49
47
|
return lock;
|
|
@@ -53,10 +51,10 @@ export var restrictor;
|
|
|
53
51
|
*
|
|
54
52
|
* + ⚠️ The object to be retrieved with `key` must already be created with `multi` ore `one`
|
|
55
53
|
*
|
|
56
|
-
* @param {
|
|
54
|
+
* @param {PropertyKey} key
|
|
57
55
|
* @returns `IFlowableLock` instance or `undefined`
|
|
58
56
|
*/
|
|
59
|
-
|
|
57
|
+
const getLockByKey = async (key) => {
|
|
60
58
|
await internalLock.acquire(false);
|
|
61
59
|
const l = locks[key];
|
|
62
60
|
internalLock.release();
|
|
@@ -70,7 +68,7 @@ export var restrictor;
|
|
|
70
68
|
* @returns {Promise<number>} eliminated count
|
|
71
69
|
* @date 2020/6/19
|
|
72
70
|
*/
|
|
73
|
-
|
|
71
|
+
const cleanup = async (timeSpan, debug) => {
|
|
74
72
|
await internalLock.acquire(false);
|
|
75
73
|
const currentLocks = locks;
|
|
76
74
|
const newLocks = Object.create(null);
|
|
@@ -81,7 +79,6 @@ export var restrictor;
|
|
|
81
79
|
!timeSpan && /* istanbul ignore next */ (timeSpan = 1);
|
|
82
80
|
timeSpan *= 1000;
|
|
83
81
|
if (debug) {
|
|
84
|
-
// @ts-ignore
|
|
85
82
|
eliminatedKeys = [];
|
|
86
83
|
}
|
|
87
84
|
for (let i = 0, end = keys.length; i < end;) {
|
|
@@ -112,7 +109,7 @@ export var restrictor;
|
|
|
112
109
|
* Allocate a semaphore for each `key`, and limit the number of shares with the value of `restriction`
|
|
113
110
|
*
|
|
114
111
|
* @template {any} T
|
|
115
|
-
* @param {
|
|
112
|
+
* @param {PropertyKey} key number or string as tag
|
|
116
113
|
* @param {number} restriction number of process restriction
|
|
117
114
|
* @param {() => Promise<T>} pb the process body
|
|
118
115
|
*/
|
|
@@ -122,7 +119,6 @@ export var restrictor;
|
|
|
122
119
|
s.last = Date.now();
|
|
123
120
|
return result;
|
|
124
121
|
}
|
|
125
|
-
restrictor.multi = multi;
|
|
126
122
|
/**
|
|
127
123
|
* synonym of `multi(key, 1, pb)`
|
|
128
124
|
*
|
|
@@ -130,11 +126,13 @@ export var restrictor;
|
|
|
130
126
|
* * Avoid concurrent requests to the same url
|
|
131
127
|
*
|
|
132
128
|
* @template {any} T
|
|
133
|
-
* @param {
|
|
129
|
+
* @param {PropertyKey} key number or string as tag
|
|
134
130
|
* @param {() => Promise<T>} pb the process body
|
|
135
131
|
*/
|
|
136
132
|
async function one(key, pb) {
|
|
137
133
|
return multi(key, 1, pb);
|
|
138
134
|
}
|
|
139
|
-
|
|
140
|
-
|
|
135
|
+
return {
|
|
136
|
+
getLockByKey, cleanup, multi, one
|
|
137
|
+
};
|
|
138
|
+
})();
|
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.16";
|
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
|
-
((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
|
|
3
|
-
;t.acquire=(e,t=!0)=>new Promise((i=>{t?setTimeout((()=>
|
|
4
|
-
;return
|
|
5
|
-
return this.q.length}async flow(e,t){await s(this,t);try{return await e()}finally{o(this)}}}},
|
|
6
|
-
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 o.restrictor}}),e.version="v1.3.
|
|
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
|
+
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
|
+
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})()));
|
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
|
|
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)=>{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
|
+
;(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
|
+
;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})();
|
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
|
|
3
|
-
Object.defineProperty(t,"__esModule",{value:!0}),t.restrictor=void 0;const r=i(518);
|
|
4
|
-
t&&c.push(
|
|
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
|
+
;(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
|
+
;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
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.
|
|
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};
|
package/cjs/extras.js
DELETED
package/esm/extras.mjs
DELETED