wenay-common 1.0.201 → 1.0.203
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.
|
@@ -82,6 +82,7 @@ export type typeNoVoid2<T> = {
|
|
|
82
82
|
};
|
|
83
83
|
export type UnAwaited<T extends Promise<any>> = T extends Promise<infer R> ? R : never;
|
|
84
84
|
export type UnAwaitedArr<T extends Promise<any>[]> = T extends Promise<infer R>[] ? R[] : never;
|
|
85
|
+
export type ReturnTypePromise<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R extends Promise<any> ? UnAwaited<R> : R : any;
|
|
85
86
|
export type UnObject<T extends object> = T extends {
|
|
86
87
|
[k: string]: infer R;
|
|
87
88
|
} ? R : never;
|
package/lib/Common/waitRun.d.ts
CHANGED
|
@@ -2,11 +2,16 @@ export declare function enhancedWaitRun(): {
|
|
|
2
2
|
throttleAsync: (ms: number, func: () => any | Promise<any>) => void;
|
|
3
3
|
debounceAsync: (ms: number, func: () => any | Promise<any>) => Promise<void>;
|
|
4
4
|
};
|
|
5
|
+
export declare function createAsyncQueue(concurrency?: number): {
|
|
6
|
+
enqueue: <T>(task: () => Promise<T>) => Promise<T>;
|
|
7
|
+
onIdle: () => Promise<void>;
|
|
8
|
+
getQueueSize: () => number;
|
|
9
|
+
};
|
|
5
10
|
export declare function enhancedQueueRun(maxParallelTasks?: number): {
|
|
6
11
|
readonly queueSize: number;
|
|
7
12
|
enqueue(task: () => Promise<any>): void;
|
|
8
13
|
enqueueAndRun(task: () => Promise<any>): void;
|
|
9
|
-
runAll(): Promise<
|
|
14
|
+
runAll(): Promise<void>;
|
|
10
15
|
};
|
|
11
16
|
export declare function waitRun(): {
|
|
12
17
|
refreshAsync: (ms: number, func: () => any | Promise<any>) => void;
|
|
@@ -16,5 +21,5 @@ export declare function queueRun(n?: number): {
|
|
|
16
21
|
readonly size: number;
|
|
17
22
|
next: () => Promise<any>;
|
|
18
23
|
nextRun: () => Promise<any>;
|
|
19
|
-
run: () => Promise<
|
|
24
|
+
run: () => Promise<void>;
|
|
20
25
|
};
|
package/lib/Common/waitRun.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.enhancedWaitRun = enhancedWaitRun;
|
|
4
|
+
exports.createAsyncQueue = createAsyncQueue;
|
|
4
5
|
exports.enhancedQueueRun = enhancedQueueRun;
|
|
5
6
|
exports.waitRun = waitRun;
|
|
6
7
|
exports.queueRun = queueRun;
|
|
@@ -52,40 +53,77 @@ function enhancedWaitRun() {
|
|
|
52
53
|
},
|
|
53
54
|
};
|
|
54
55
|
}
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
56
|
+
function createAsyncQueue(concurrency = 1) {
|
|
57
|
+
let queue = [];
|
|
58
|
+
let activeCount = 0;
|
|
59
|
+
let resolveIdle = null;
|
|
60
|
+
let idlePromise = null;
|
|
61
|
+
const runNext = () => {
|
|
62
|
+
if (activeCount >= concurrency || queue.length === 0) {
|
|
63
|
+
if (activeCount === 0 && queue.length === 0 && resolveIdle) {
|
|
64
|
+
resolveIdle();
|
|
65
|
+
resolveIdle = null;
|
|
66
|
+
idlePromise = null;
|
|
67
|
+
}
|
|
68
|
+
return;
|
|
66
69
|
}
|
|
70
|
+
const task = queue.shift();
|
|
71
|
+
if (!task)
|
|
72
|
+
return;
|
|
73
|
+
activeCount++;
|
|
74
|
+
task().finally(() => {
|
|
75
|
+
activeCount--;
|
|
76
|
+
runNext();
|
|
77
|
+
});
|
|
78
|
+
runNext();
|
|
67
79
|
};
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
80
|
+
const enqueue = (task) => {
|
|
81
|
+
return new Promise((resolve, reject) => {
|
|
82
|
+
queue.push(async () => {
|
|
83
|
+
try {
|
|
84
|
+
resolve(await task());
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
reject(err);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
runNext();
|
|
73
91
|
});
|
|
74
92
|
};
|
|
93
|
+
const onIdle = () => {
|
|
94
|
+
if (!idlePromise) {
|
|
95
|
+
idlePromise = new Promise((resolve) => {
|
|
96
|
+
if (activeCount === 0 && queue.length === 0) {
|
|
97
|
+
resolve();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
resolveIdle = resolve;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return idlePromise;
|
|
105
|
+
};
|
|
106
|
+
const getQueueSize = () => queue.length;
|
|
107
|
+
return {
|
|
108
|
+
enqueue,
|
|
109
|
+
onIdle,
|
|
110
|
+
getQueueSize,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function enhancedQueueRun(maxParallelTasks = 5) {
|
|
114
|
+
const tr = createAsyncQueue(maxParallelTasks);
|
|
75
115
|
return {
|
|
76
116
|
get queueSize() {
|
|
77
|
-
return
|
|
117
|
+
return tr.getQueueSize();
|
|
78
118
|
},
|
|
79
119
|
enqueue(task) {
|
|
80
|
-
|
|
120
|
+
tr.enqueue(task);
|
|
81
121
|
},
|
|
82
122
|
enqueueAndRun(task) {
|
|
83
|
-
|
|
84
|
-
checkAndRun();
|
|
123
|
+
tr.enqueue(task);
|
|
85
124
|
},
|
|
86
125
|
runAll() {
|
|
87
|
-
|
|
88
|
-
return Promise.allSettled(workers);
|
|
126
|
+
return tr.onIdle();
|
|
89
127
|
},
|
|
90
128
|
};
|
|
91
129
|
}
|