mini-semaphore 1.4.2 → 1.4.4
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 +63 -0
- package/cjs/core.js +2 -6
- package/cjs/index.d.ts +6 -0
- package/cjs/index.js +1 -1
- package/cjs/object.js +28 -5
- package/esm/core.mjs +2 -6
- package/esm/index.d.mts +6 -0
- package/esm/index.mjs +1 -1
- package/esm/object.mjs +28 -5
- package/index.d.ts +6 -0
- package/package.json +1 -1
- package/umd/index.d.ts +6 -0
- package/umd/index.js +7 -6
- package/webpack/index.d.ts +6 -0
- package/webpack/index.js +6 -6
- package/webpack-esm/index.d.mts +6 -0
- package/webpack-esm/index.mjs +6 -6
package/README.md
CHANGED
|
@@ -163,6 +163,69 @@ async function resolve(id: string | number): Promise<TType> {
|
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
> ## Abortable Semaphore
|
|
169
|
+
|
|
170
|
+
Starting from version **1.4.3**, `mini-semaphore` introduces support for abortable semaphores.
|
|
171
|
+
This feature allows you to cancel pending tasks and notify listeners when an abort event occurs.
|
|
172
|
+
This is particularly useful in scenarios where you need to terminate ongoing operations gracefully.
|
|
173
|
+
|
|
174
|
+
### Key Features
|
|
175
|
+
|
|
176
|
+
- **Abort Method**: Immediately cancels all pending tasks and restores the semaphore's capacity.
|
|
177
|
+
- **Event Emission**: Emits an `abort` event to notify listeners of the cancellation.
|
|
178
|
+
- **Listener Management**: Provides `onAbort` and `offAbort` methods to register and remove event listeners.
|
|
179
|
+
|
|
180
|
+
### Example Usage
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
import { createWithAbort } from "mini-semaphore";
|
|
184
|
+
|
|
185
|
+
// Create an abortable semaphore with a capacity of 3
|
|
186
|
+
const semaphore = createWithAbort(3);
|
|
187
|
+
|
|
188
|
+
// Register an abort event listener
|
|
189
|
+
semaphore.onAbort((reason) => {
|
|
190
|
+
console.log("Abort event received:", reason.message);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
// Simulate tasks
|
|
194
|
+
const task = async (id: number) => {
|
|
195
|
+
try {
|
|
196
|
+
await semaphore.acquire();
|
|
197
|
+
console.log(`Task ${id} started`);
|
|
198
|
+
await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate work
|
|
199
|
+
console.log(`Task ${id} completed`);
|
|
200
|
+
semaphore.release();
|
|
201
|
+
} catch (e) {
|
|
202
|
+
console.log(`Task ${id} aborted:`, e.message);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
// Start tasks
|
|
207
|
+
const tasks = [1, 2, 3, 4, 5].map((id) => task(id));
|
|
208
|
+
|
|
209
|
+
// Abort all pending tasks after 2 seconds
|
|
210
|
+
setTimeout(() => {
|
|
211
|
+
semaphore.abort();
|
|
212
|
+
}, 2000);
|
|
213
|
+
|
|
214
|
+
// Wait for all tasks to settle
|
|
215
|
+
Promise.allSettled(tasks).then(() => {
|
|
216
|
+
console.log("All tasks settled");
|
|
217
|
+
});
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Explanation
|
|
221
|
+
|
|
222
|
+
1. **Creating an Abortable Semaphore**: Use `createWithAbort` to create a semaphore with abort capabilities.
|
|
223
|
+
2. **Registering Listeners**: Use `onAbort` to listen for abort events and handle cleanup or logging.
|
|
224
|
+
3. **Aborting Tasks**: Call `abort` to cancel all pending tasks. Tasks that are already running will not be interrupted but will complete normally.
|
|
225
|
+
4. **Graceful Cleanup**: Use `offAbort` to remove listeners when they are no longer needed.
|
|
226
|
+
|
|
227
|
+
This feature enhances the flexibility of `mini-semaphore`, making it suitable for more complex concurrency control scenarios.
|
|
228
|
+
|
|
166
229
|
> ## Authors
|
|
167
230
|
|
|
168
231
|
+ **jeffy-g** - [jeffy-g](https://github.com/jeffy-g)
|
package/cjs/core.js
CHANGED
|
@@ -91,13 +91,9 @@ const releaseWithAbort = (dis) => {
|
|
|
91
91
|
let dq;
|
|
92
92
|
if ((dq = dis.q).length) {
|
|
93
93
|
const resolver = dq.shift();
|
|
94
|
+
resolver && resolver.resolve() || (
|
|
94
95
|
/* istanbul ignore next */
|
|
95
|
-
|
|
96
|
-
THROW();
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
resolver.resolve();
|
|
100
|
-
}
|
|
96
|
+
THROW());
|
|
101
97
|
}
|
|
102
98
|
else {
|
|
103
99
|
if (dis.capacity < dis.limit) {
|
package/cjs/index.d.ts
CHANGED
|
@@ -100,9 +100,15 @@ export declare type TResolver = {
|
|
|
100
100
|
resolve: () => void;
|
|
101
101
|
reject: (reason: any) => void;
|
|
102
102
|
};
|
|
103
|
+
export declare interface IProcessAbortedError {
|
|
104
|
+
readonly message: "Process Aborted";
|
|
105
|
+
}
|
|
106
|
+
export type TAbortListener = (reason: IProcessAbortedError) => void;
|
|
103
107
|
export declare type TFlowableLockWithAbort = IFlowableLock & {
|
|
104
108
|
readonly q: Deque<TResolver>;
|
|
105
109
|
abort(): void;
|
|
110
|
+
onAbort(listener: TAbortListener): void;
|
|
111
|
+
offAbort(listener: TAbortListener): void;
|
|
106
112
|
};
|
|
107
113
|
|
|
108
114
|
/**
|
package/cjs/index.js
CHANGED
|
@@ -10,4 +10,4 @@ var deque_1 = require("./deque");
|
|
|
10
10
|
Object.defineProperty(exports, "Deque", { enumerable: true, get: function () { return deque_1.Deque; } });
|
|
11
11
|
var flow_restrictor_1 = require("./flow-restrictor");
|
|
12
12
|
Object.defineProperty(exports, "restrictor", { enumerable: true, get: function () { return flow_restrictor_1.restrictor; } });
|
|
13
|
-
exports.version = "v1.4.
|
|
13
|
+
exports.version = "v1.4.4";
|
package/cjs/object.js
CHANGED
|
@@ -95,6 +95,7 @@ exports.create = create;
|
|
|
95
95
|
const createWithAbort = (capacity) => {
|
|
96
96
|
/** @type {core.TFlowableLockWithAbort} */
|
|
97
97
|
const base = createBase(capacity);
|
|
98
|
+
const abortListeners = [];
|
|
98
99
|
return /** @satisfies {core.TFlowableLockWithAbort} */ ({
|
|
99
100
|
...base,
|
|
100
101
|
get pending() {
|
|
@@ -115,27 +116,49 @@ const createWithAbort = (capacity) => {
|
|
|
115
116
|
* @returns {Promise<T>}
|
|
116
117
|
*/
|
|
117
118
|
async flow(process) {
|
|
118
|
-
|
|
119
|
+
let result;
|
|
119
120
|
try {
|
|
120
|
-
|
|
121
|
+
await aa(this);
|
|
122
|
+
result = await process();
|
|
123
|
+
ra(this);
|
|
121
124
|
}
|
|
122
125
|
finally {
|
|
123
|
-
|
|
126
|
+
return result;
|
|
124
127
|
}
|
|
125
128
|
},
|
|
126
129
|
/**
|
|
127
130
|
* @throws {AggregateError} description
|
|
128
131
|
*/
|
|
129
132
|
abort() {
|
|
130
|
-
const dq = this.q;
|
|
131
|
-
let resolver;
|
|
132
133
|
const reason = {
|
|
133
134
|
message: "Process Aborted"
|
|
134
135
|
};
|
|
136
|
+
abortListeners.forEach(listener => listener(reason));
|
|
137
|
+
const dq = this.q;
|
|
138
|
+
let resolver;
|
|
135
139
|
while (resolver = dq.shift()) {
|
|
136
140
|
resolver.reject(reason);
|
|
137
141
|
}
|
|
138
142
|
this.capacity = this.limit;
|
|
143
|
+
},
|
|
144
|
+
/**
|
|
145
|
+
* Registers an event listener for the "abort" event.
|
|
146
|
+
* @param {core.TAbortListener} listener
|
|
147
|
+
*/
|
|
148
|
+
onAbort(listener) {
|
|
149
|
+
if (!abortListeners.includes(listener)) {
|
|
150
|
+
abortListeners.push(listener);
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
/**
|
|
154
|
+
* Removes an event listener for the "abort" event.
|
|
155
|
+
* @param {core.TAbortListener} listener
|
|
156
|
+
*/
|
|
157
|
+
offAbort(listener) {
|
|
158
|
+
const idx = abortListeners.findIndex(ls => listener === ls);
|
|
159
|
+
if (idx !== -1) {
|
|
160
|
+
/*return */ abortListeners.splice(idx, 1);
|
|
161
|
+
}
|
|
139
162
|
}
|
|
140
163
|
});
|
|
141
164
|
};
|
package/esm/core.mjs
CHANGED
|
@@ -85,13 +85,9 @@ export const releaseWithAbort = (dis) => {
|
|
|
85
85
|
let dq;
|
|
86
86
|
if ((dq = dis.q).length) {
|
|
87
87
|
const resolver = dq.shift();
|
|
88
|
+
resolver && resolver.resolve() || (
|
|
88
89
|
/* istanbul ignore next */
|
|
89
|
-
|
|
90
|
-
THROW();
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
resolver.resolve();
|
|
94
|
-
}
|
|
90
|
+
THROW());
|
|
95
91
|
}
|
|
96
92
|
else {
|
|
97
93
|
if (dis.capacity < dis.limit) {
|
package/esm/index.d.mts
CHANGED
|
@@ -100,9 +100,15 @@ export declare type TResolver = {
|
|
|
100
100
|
resolve: () => void;
|
|
101
101
|
reject: (reason: any) => void;
|
|
102
102
|
};
|
|
103
|
+
export declare interface IProcessAbortedError {
|
|
104
|
+
readonly message: "Process Aborted";
|
|
105
|
+
}
|
|
106
|
+
export type TAbortListener = (reason: IProcessAbortedError) => void;
|
|
103
107
|
export declare type TFlowableLockWithAbort = IFlowableLock & {
|
|
104
108
|
readonly q: Deque<TResolver>;
|
|
105
109
|
abort(): void;
|
|
110
|
+
onAbort(listener: TAbortListener): void;
|
|
111
|
+
offAbort(listener: TAbortListener): void;
|
|
106
112
|
};
|
|
107
113
|
|
|
108
114
|
/**
|
package/esm/index.mjs
CHANGED
package/esm/object.mjs
CHANGED
|
@@ -91,6 +91,7 @@ export const create = (capacity) => {
|
|
|
91
91
|
export const createWithAbort = (capacity) => {
|
|
92
92
|
/** @type {core.TFlowableLockWithAbort} */
|
|
93
93
|
const base = createBase(capacity);
|
|
94
|
+
const abortListeners = [];
|
|
94
95
|
return /** @satisfies {core.TFlowableLockWithAbort} */ ({
|
|
95
96
|
...base,
|
|
96
97
|
get pending() {
|
|
@@ -111,27 +112,49 @@ export const createWithAbort = (capacity) => {
|
|
|
111
112
|
* @returns {Promise<T>}
|
|
112
113
|
*/
|
|
113
114
|
async flow(process) {
|
|
114
|
-
|
|
115
|
+
let result;
|
|
115
116
|
try {
|
|
116
|
-
|
|
117
|
+
await aa(this);
|
|
118
|
+
result = await process();
|
|
119
|
+
ra(this);
|
|
117
120
|
}
|
|
118
121
|
finally {
|
|
119
|
-
|
|
122
|
+
return result;
|
|
120
123
|
}
|
|
121
124
|
},
|
|
122
125
|
/**
|
|
123
126
|
* @throws {AggregateError} description
|
|
124
127
|
*/
|
|
125
128
|
abort() {
|
|
126
|
-
const dq = this.q;
|
|
127
|
-
let resolver;
|
|
128
129
|
const reason = {
|
|
129
130
|
message: "Process Aborted"
|
|
130
131
|
};
|
|
132
|
+
abortListeners.forEach(listener => listener(reason));
|
|
133
|
+
const dq = this.q;
|
|
134
|
+
let resolver;
|
|
131
135
|
while (resolver = dq.shift()) {
|
|
132
136
|
resolver.reject(reason);
|
|
133
137
|
}
|
|
134
138
|
this.capacity = this.limit;
|
|
139
|
+
},
|
|
140
|
+
/**
|
|
141
|
+
* Registers an event listener for the "abort" event.
|
|
142
|
+
* @param {core.TAbortListener} listener
|
|
143
|
+
*/
|
|
144
|
+
onAbort(listener) {
|
|
145
|
+
if (!abortListeners.includes(listener)) {
|
|
146
|
+
abortListeners.push(listener);
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
/**
|
|
150
|
+
* Removes an event listener for the "abort" event.
|
|
151
|
+
* @param {core.TAbortListener} listener
|
|
152
|
+
*/
|
|
153
|
+
offAbort(listener) {
|
|
154
|
+
const idx = abortListeners.findIndex(ls => listener === ls);
|
|
155
|
+
if (idx !== -1) {
|
|
156
|
+
/*return */ abortListeners.splice(idx, 1);
|
|
157
|
+
}
|
|
135
158
|
}
|
|
136
159
|
});
|
|
137
160
|
};
|
package/index.d.ts
CHANGED
|
@@ -100,9 +100,15 @@ export declare type TResolver = {
|
|
|
100
100
|
resolve: () => void;
|
|
101
101
|
reject: (reason: any) => void;
|
|
102
102
|
};
|
|
103
|
+
export declare interface IProcessAbortedError {
|
|
104
|
+
readonly message: "Process Aborted";
|
|
105
|
+
}
|
|
106
|
+
export type TAbortListener = (reason: IProcessAbortedError) => void;
|
|
103
107
|
export declare type TFlowableLockWithAbort = IFlowableLock & {
|
|
104
108
|
readonly q: Deque<TResolver>;
|
|
105
109
|
abort(): void;
|
|
110
|
+
onAbort(listener: TAbortListener): void;
|
|
111
|
+
offAbort(listener: TAbortListener): void;
|
|
106
112
|
};
|
|
107
113
|
|
|
108
114
|
/**
|
package/package.json
CHANGED
package/umd/index.d.ts
CHANGED
|
@@ -100,9 +100,15 @@ export declare type TResolver = {
|
|
|
100
100
|
resolve: () => void;
|
|
101
101
|
reject: (reason: any) => void;
|
|
102
102
|
};
|
|
103
|
+
export declare interface IProcessAbortedError {
|
|
104
|
+
readonly message: "Process Aborted";
|
|
105
|
+
}
|
|
106
|
+
export type TAbortListener = (reason: IProcessAbortedError) => void;
|
|
103
107
|
export declare type TFlowableLockWithAbort = IFlowableLock & {
|
|
104
108
|
readonly q: Deque<TResolver>;
|
|
105
109
|
abort(): void;
|
|
110
|
+
onAbort(listener: TAbortListener): void;
|
|
111
|
+
offAbort(listener: TAbortListener): void;
|
|
106
112
|
};
|
|
107
113
|
|
|
108
114
|
/**
|
package/umd/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
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.createWithAbort=t.create=void 0;const r=i(461),n=i(761),s=r.acquire,a=r.release,o=r.acquireWithAbort,c=r.releaseWithAbort,l=e=>({capacity:e,limit:e,q:new n.Deque(e),setRestriction(e){this.limit=this.capacity=e}});t.create=e=>({...l(e),get pending(){return this.q.length},acquire(e){return s(this,e)},release(){a(this)},async flow(e,t){await s(this,t);try{return await e()}finally{a(this)}}});t.createWithAbort=e=>
|
|
3
|
-
c(this)},async flow(e){await o(this)
|
|
4
|
-
e.capacity>0?(e.capacity--,t()):e.q.push({resolve:t,reject:i})}));t.releaseWithAbort=e=>{let t;if((t=e.q).length){const e=t.shift();e
|
|
5
|
-
cleanup:async(e,r)=>{await t.acquire(!1);const n=i,s=Object.create(null),a=Object.keys(n);let o,c=0;!e&&(e=1),e*=1e3,r&&(o=[]);for(let t=0,i=a.length;t<i;){const i=a[t++],l=n[i];l.last&&Date.now()-l.last>=e?(c++,r&&o.push(i)):s[i]=l}return i=s,t.release(),r&&console.log(`eliminated: [\n${o.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
|
|
6
|
-
return await e()}finally{a(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._a=[],this.length=0}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
|
|
7
|
-
;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.createWithAbort=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}}),Object.defineProperty(e,"createWithAbort",{
|
|
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.createWithAbort=t.create=void 0;const r=i(461),n=i(761),s=r.acquire,a=r.release,o=r.acquireWithAbort,c=r.releaseWithAbort,l=e=>({capacity:e,limit:e,q:new n.Deque(e),setRestriction(e){this.limit=this.capacity=e}});t.create=e=>({...l(e),get pending(){return this.q.length},acquire(e){return s(this,e)},release(){a(this)},async flow(e,t){await s(this,t);try{return await e()}finally{a(this)}}});t.createWithAbort=e=>{const t=l(e),i=[];return{...t,get pending(){return this.q.length},acquire(){
|
|
3
|
+
return o(this)},release(){c(this)},async flow(e){let t;try{await o(this),t=await e(),c(this)}finally{return t}},abort(){const e={message:"Process Aborted"};i.forEach((t=>t(e)));const t=this.q;let r;for(;r=t.shift();)r.reject(e);this.capacity=this.limit},onAbort(e){i.includes(e)||i.push(e)},offAbort(e){const t=i.findIndex((t=>e===t));-1!==t&&i.splice(t,1)}}}},461:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.releaseWithAbort=t.acquireWithAbort=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
|
|
4
|
+
;(t=e.q).length?(t.shift()||i)():e.capacity++,e.capacity>e.limit&&(console.warn("inconsistent release!"),e.capacity=e.limit)};t.acquireWithAbort=e=>new Promise(((t,i)=>{e.capacity>0?(e.capacity--,t()):e.q.push({resolve:t,reject:i})}));t.releaseWithAbort=e=>{let t;if((t=e.q).length){const e=t.shift();e&&e.resolve()||i()}else e.capacity<e.limit&&e.capacity++}},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(),
|
|
5
|
+
new ReferenceError(`Cannot get object with different restriction: key: '${String(r)}', lock.limit: ${s.limit} <-> restriction: ${n},`);return t.release(),s})(r,n),o=a.flow(s);return a.last=Date.now(),o}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 o,c=0;!e&&(e=1),e*=1e3,r&&(o=[]);for(let t=0,i=a.length;t<i;){const i=a[t++],l=n[i];l.last&&Date.now()-l.last>=e?(c++,r&&o.push(i)):s[i]=l}return i=s,t.release(),r&&console.log(`eliminated: [\n${o.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
|
|
6
|
+
;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)}}}},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._a=[],this.length=0}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
|
|
7
|
+
;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.createWithAbort=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}}),Object.defineProperty(e,"createWithAbort",{
|
|
8
|
+
enumerable:!0,get:function(){return n.createWithAbort}});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.4.4"})(),r})()));
|
package/webpack/index.d.ts
CHANGED
|
@@ -100,9 +100,15 @@ export declare type TResolver = {
|
|
|
100
100
|
resolve: () => void;
|
|
101
101
|
reject: (reason: any) => void;
|
|
102
102
|
};
|
|
103
|
+
export declare interface IProcessAbortedError {
|
|
104
|
+
readonly message: "Process Aborted";
|
|
105
|
+
}
|
|
106
|
+
export type TAbortListener = (reason: IProcessAbortedError) => void;
|
|
103
107
|
export declare type TFlowableLockWithAbort = IFlowableLock & {
|
|
104
108
|
readonly q: Deque<TResolver>;
|
|
105
109
|
abort(): void;
|
|
110
|
+
onAbort(listener: TAbortListener): void;
|
|
111
|
+
offAbort(listener: TAbortListener): void;
|
|
106
112
|
};
|
|
107
113
|
|
|
108
114
|
/**
|
package/webpack/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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.createWithAbort=t.create=void 0;const r=i(461),n=i(761),s=r.acquire,a=r.release,c=r.acquireWithAbort,o=r.releaseWithAbort,l=e=>({capacity:e,limit:e,q:new n.Deque(e),setRestriction(e){this.limit=this.capacity=e}});t.create=e=>({...l(e),get pending(){return this.q.length},acquire(e){return s(this,e)},release(){a(this)},async flow(e,t){await s(this,t);try{return await e()}finally{a(this)}}});t.createWithAbort=e=>
|
|
3
|
-
Object.defineProperty(t,"__esModule",{value:!0}),t.releaseWithAbort=t.acquireWithAbort=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;(t=e.q).length?(t.shift()||i)():e.capacity++,e.capacity>e.limit&&(console.warn("inconsistent release!"),e.capacity=e.limit)};t.acquireWithAbort=e=>new Promise(((t,i)=>{e.capacity>0?(e.capacity--,t()):e.q.push({resolve:t,
|
|
4
|
-
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)
|
|
5
|
-
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)}}}},
|
|
6
|
-
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._a=[],this.length=0}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:{}}
|
|
7
|
-
e.version=e.restrictor=e.Deque=e.createWithAbort=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}}),Object.defineProperty(e,"createWithAbort",{enumerable:!0,get:function(){return n.createWithAbort}});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.4.
|
|
2
|
+
(()=>{"use strict";var e={139:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createWithAbort=t.create=void 0;const r=i(461),n=i(761),s=r.acquire,a=r.release,c=r.acquireWithAbort,o=r.releaseWithAbort,l=e=>({capacity:e,limit:e,q:new n.Deque(e),setRestriction(e){this.limit=this.capacity=e}});t.create=e=>({...l(e),get pending(){return this.q.length},acquire(e){return s(this,e)},release(){a(this)},async flow(e,t){await s(this,t);try{return await e()}finally{a(this)}}});t.createWithAbort=e=>{const t=l(e),i=[];return{...t,get pending(){return this.q.length},acquire(){return c(this)},release(){o(this)},async flow(e){let t;try{await c(this),t=await e(),o(this)}finally{return t}},abort(){const e={message:"Process Aborted"};i.forEach((t=>t(e)));const t=this.q;let r
|
|
3
|
+
;for(;r=t.shift();)r.reject(e);this.capacity=this.limit},onAbort(e){i.includes(e)||i.push(e)},offAbort(e){const t=i.findIndex((t=>e===t));-1!==t&&i.splice(t,1)}}}},461:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.releaseWithAbort=t.acquireWithAbort=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;(t=e.q).length?(t.shift()||i)():e.capacity++,e.capacity>e.limit&&(console.warn("inconsistent release!"),e.capacity=e.limit)};t.acquireWithAbort=e=>new Promise(((t,i)=>{e.capacity>0?(e.capacity--,t()):e.q.push({resolve:t,
|
|
4
|
+
reject:i})}));t.releaseWithAbort=e=>{let t;if((t=e.q).length){const e=t.shift();e&&e.resolve()||i()}else e.capacity<e.limit&&e.capacity++}},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)
|
|
5
|
+
;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)}}}},
|
|
6
|
+
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._a=[],this.length=0}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:{}}
|
|
7
|
+
;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.createWithAbort=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}}),Object.defineProperty(e,"createWithAbort",{enumerable:!0,get:function(){return n.createWithAbort}});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.4.4"})(),module.exports=r})();
|
package/webpack-esm/index.d.mts
CHANGED
|
@@ -100,9 +100,15 @@ export declare type TResolver = {
|
|
|
100
100
|
resolve: () => void;
|
|
101
101
|
reject: (reason: any) => void;
|
|
102
102
|
};
|
|
103
|
+
export declare interface IProcessAbortedError {
|
|
104
|
+
readonly message: "Process Aborted";
|
|
105
|
+
}
|
|
106
|
+
export type TAbortListener = (reason: IProcessAbortedError) => void;
|
|
103
107
|
export declare type TFlowableLockWithAbort = IFlowableLock & {
|
|
104
108
|
readonly q: Deque<TResolver>;
|
|
105
109
|
abort(): void;
|
|
110
|
+
onAbort(listener: TAbortListener): void;
|
|
111
|
+
offAbort(listener: TAbortListener): void;
|
|
106
112
|
};
|
|
107
113
|
|
|
108
114
|
/**
|
package/webpack-esm/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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.createWithAbort=t.create=void 0;const r=i(461),s=i(761),n=r.acquire,a=r.release,c=r.acquireWithAbort,o=r.releaseWithAbort,l=e=>({capacity:e,limit:e,q:new s.Deque(e),setRestriction(e){this.limit=this.capacity=e}});t.create=e=>({...l(e),get pending(){return this.q.length},acquire(e){return n(this,e)},release(){a(this)},async flow(e,t){await n(this,t);try{return await e()}finally{a(this)}}});t.createWithAbort=e=>
|
|
3
|
-
Object.defineProperty(t,"__esModule",{value:!0}),t.releaseWithAbort=t.acquireWithAbort=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;(t=e.q).length?(t.shift()||i)():e.capacity++,e.capacity>e.limit&&(console.warn("inconsistent release!"),e.capacity=e.limit)};t.acquireWithAbort=e=>new Promise(((t,i)=>{e.capacity>0?(e.capacity--,t()):e.q.push({resolve:t,reject:i})}))
|
|
4
|
-
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 s(r,s,n){const a=await(async(r,s)=>{await t.acquire(!1);let n=i[r];if(n||(i[r]=n=new e(s)),n.limit!==s)throw t.release(),new ReferenceError(`Cannot get object with different restriction: key: '${String(r)}', lock.limit: ${n.limit} <-> restriction: ${s},`);return t.release(),n})(r,s),c=a.flow(n);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)
|
|
5
|
-
r&&c.push(i)):n[i]=l}return i=n,t.release(),r&&console.log(`eliminated: [\n${c.join(",\n")}\n]\nlived: [\n${Object.keys(n).join(",\n")}\n]`),o},multi:s,one:async function(e,t){return s(e,1,t)}}})()},518:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MiniSemaphore=void 0;const r=i(461),s=i(761),n=r.acquire,a=r.release;t.MiniSemaphore=class{constructor(e){this.limit=this.capacity=e,this.q=new s.Deque(e)}acquire(e){return n(this,e)}release(){a(this)}setRestriction(e){this.limit=this.capacity=e}get pending(){return this.q.length}async flow(e,t){await n(this,t);try{return await e()}finally{a(this)}}}},
|
|
6
|
-
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._a=[],this.length=0}push(e){const t=this._l;this._c<t+1&&r(this,i(1.5*this._c+16));const s=this._f+t&this._c-1;this._a[s]=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,s)=>{for(let n=0;n<s;++n)i[n+r]=e[n+t],e[n+t]=void 0})(e._a,0,e._a,i,t)}}}},t={};function i(r){var s=t[r];if(void 0!==s)return s.exports;var n=t[r]={exports:{}}
|
|
7
|
-
;var t=i(518);Object.defineProperty(e,"C",{enumerable:!0,get:function(){return t.MiniSemaphore}});var s=i(139);Object.defineProperty(e,"vt",{enumerable:!0,get:function(){return s.create}}),Object.defineProperty(e,"Xz",{enumerable:!0,get:function(){return s.createWithAbort}});var n=i(761);Object.defineProperty(e,"Jj",{enumerable:!0,get:function(){return n.Deque}});var a=i(464);Object.defineProperty(e,"Ws",{enumerable:!0,get:function(){return a.restrictor}}),e.rE="v1.4.
|
|
2
|
+
var e={139:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createWithAbort=t.create=void 0;const r=i(461),s=i(761),n=r.acquire,a=r.release,c=r.acquireWithAbort,o=r.releaseWithAbort,l=e=>({capacity:e,limit:e,q:new s.Deque(e),setRestriction(e){this.limit=this.capacity=e}});t.create=e=>({...l(e),get pending(){return this.q.length},acquire(e){return n(this,e)},release(){a(this)},async flow(e,t){await n(this,t);try{return await e()}finally{a(this)}}});t.createWithAbort=e=>{const t=l(e),i=[];return{...t,get pending(){return this.q.length},acquire(){return c(this)},release(){o(this)},async flow(e){let t;try{await c(this),t=await e(),o(this)}finally{return t}},abort(){const e={message:"Process Aborted"};i.forEach((t=>t(e)));const t=this.q;let r;for(;r=t.shift();)r.reject(e)
|
|
3
|
+
;this.capacity=this.limit},onAbort(e){i.includes(e)||i.push(e)},offAbort(e){const t=i.findIndex((t=>e===t));-1!==t&&i.splice(t,1)}}}},461:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.releaseWithAbort=t.acquireWithAbort=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;(t=e.q).length?(t.shift()||i)():e.capacity++,e.capacity>e.limit&&(console.warn("inconsistent release!"),e.capacity=e.limit)};t.acquireWithAbort=e=>new Promise(((t,i)=>{e.capacity>0?(e.capacity--,t()):e.q.push({resolve:t,reject:i})}))
|
|
4
|
+
;t.releaseWithAbort=e=>{let t;if((t=e.q).length){const e=t.shift();e&&e.resolve()||i()}else e.capacity<e.limit&&e.capacity++}},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 s(r,s,n){const a=await(async(r,s)=>{await t.acquire(!1);let n=i[r];if(n||(i[r]=n=new e(s)),n.limit!==s)throw t.release(),new ReferenceError(`Cannot get object with different restriction: key: '${String(r)}', lock.limit: ${n.limit} <-> restriction: ${s},`);return t.release(),n})(r,s),c=a.flow(n);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)
|
|
5
|
+
;const s=i,n=Object.create(null),a=Object.keys(s);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=s[i];l.last&&Date.now()-l.last>=e?(o++,r&&c.push(i)):n[i]=l}return i=n,t.release(),r&&console.log(`eliminated: [\n${c.join(",\n")}\n]\nlived: [\n${Object.keys(n).join(",\n")}\n]`),o},multi:s,one:async function(e,t){return s(e,1,t)}}})()},518:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MiniSemaphore=void 0;const r=i(461),s=i(761),n=r.acquire,a=r.release;t.MiniSemaphore=class{constructor(e){this.limit=this.capacity=e,this.q=new s.Deque(e)}acquire(e){return n(this,e)}release(){a(this)}setRestriction(e){this.limit=this.capacity=e}get pending(){return this.q.length}async flow(e,t){await n(this,t);try{return await e()}finally{a(this)}}}},
|
|
6
|
+
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._a=[],this.length=0}push(e){const t=this._l;this._c<t+1&&r(this,i(1.5*this._c+16));const s=this._f+t&this._c-1;this._a[s]=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,s)=>{for(let n=0;n<s;++n)i[n+r]=e[n+t],e[n+t]=void 0})(e._a,0,e._a,i,t)}}}},t={};function i(r){var s=t[r];if(void 0!==s)return s.exports;var n=t[r]={exports:{}}
|
|
7
|
+
;return e[r](n,n.exports,i),n.exports}var r={};(()=>{var e=r;Object.defineProperty(e,"BJ",{value:!0}),e.rE=e.Ws=e.Jj=e.Xz=e.vt=e.C=void 0;var t=i(518);Object.defineProperty(e,"C",{enumerable:!0,get:function(){return t.MiniSemaphore}});var s=i(139);Object.defineProperty(e,"vt",{enumerable:!0,get:function(){return s.create}}),Object.defineProperty(e,"Xz",{enumerable:!0,get:function(){return s.createWithAbort}});var n=i(761);Object.defineProperty(e,"Jj",{enumerable:!0,get:function(){return n.Deque}});var a=i(464);Object.defineProperty(e,"Ws",{enumerable:!0,get:function(){return a.restrictor}}),e.rE="v1.4.4"})();const s=r.Jj,n=r.C,a=r.BJ,c=r.vt,o=r.Xz,l=r.Ws,h=r.rE;export{s as Deque,n as MiniSemaphore,a as __esModule,c as create,o as createWithAbort,l as restrictor,h as version};
|