@peerbit/time 3.0.0-e6ea5c0 → 3.0.1
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.
|
@@ -14,6 +14,7 @@ export declare const debounceAccumulator: <K, T, V>(fn: (args: V) => any, create
|
|
|
14
14
|
has(key: K): boolean;
|
|
15
15
|
}, delay: number | (() => number), options?: {
|
|
16
16
|
leading?: boolean;
|
|
17
|
+
onError?(error: Error): void;
|
|
17
18
|
}) => {
|
|
18
19
|
add(value: T): Promise<void>;
|
|
19
20
|
delete(key: K): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregators.d.ts","sourceRoot":"","sources":["../../src/aggregators.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,GACjC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAEhD,IAAI,CAAC,EACL,OAAO,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAC9B,UAAU;IAAE,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAC3D;IACF,IAAI,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"aggregators.d.ts","sourceRoot":"","sources":["../../src/aggregators.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,GACjC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAEhD,IAAI,CAAC,EACL,OAAO,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAC9B,UAAU;IAAE,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAC3D;IACF,IAAI,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CA8KvB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC1C,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,EACpB,QAAQ,MAAM;IACb,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,IAAI,IAAI,MAAM,CAAC;IACf,KAAK,EAAE,CAAC,CAAC;IACT,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;CACrB,EACD,OAAO,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAC9B,UAAU;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CAAE,KAC3D;IACF,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,IAAI,IAAI,MAAM,CAAC;IACf,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IACrB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAmCvB,CAAC"}
|
package/dist/src/aggregators.js
CHANGED
|
@@ -10,6 +10,7 @@ export const debounceFixedInterval = (fn, delay, options) => {
|
|
|
10
10
|
let lastThis;
|
|
11
11
|
let pendingCall = false;
|
|
12
12
|
let isRunning = false;
|
|
13
|
+
let closed = false;
|
|
13
14
|
let waitingResolvers = [];
|
|
14
15
|
let lastInvokeTime = null;
|
|
15
16
|
let forceNextImmediate = false;
|
|
@@ -39,7 +40,7 @@ export const debounceFixedInterval = (fn, delay, options) => {
|
|
|
39
40
|
});
|
|
40
41
|
const invoke = async () => {
|
|
41
42
|
timeout = null;
|
|
42
|
-
if (!lastArgs) {
|
|
43
|
+
if (closed || !lastArgs) {
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
45
46
|
const args = lastArgs;
|
|
@@ -63,7 +64,7 @@ export const debounceFixedInterval = (fn, delay, options) => {
|
|
|
63
64
|
}
|
|
64
65
|
completedRuns++;
|
|
65
66
|
resolveRunWaiters();
|
|
66
|
-
if (pendingCall) {
|
|
67
|
+
if (!closed && pendingCall) {
|
|
67
68
|
if (forceNextImmediate) {
|
|
68
69
|
forceNextImmediate = false;
|
|
69
70
|
timeout = setTimeout(invoke, 0);
|
|
@@ -77,6 +78,9 @@ export const debounceFixedInterval = (fn, delay, options) => {
|
|
|
77
78
|
}
|
|
78
79
|
};
|
|
79
80
|
function debounced(...args) {
|
|
81
|
+
if (closed) {
|
|
82
|
+
return Promise.resolve();
|
|
83
|
+
}
|
|
80
84
|
lastArgs = args;
|
|
81
85
|
lastThis = this;
|
|
82
86
|
pendingCall = true;
|
|
@@ -101,6 +105,9 @@ export const debounceFixedInterval = (fn, delay, options) => {
|
|
|
101
105
|
return p;
|
|
102
106
|
}
|
|
103
107
|
const flush = () => {
|
|
108
|
+
if (closed) {
|
|
109
|
+
return Promise.resolve();
|
|
110
|
+
}
|
|
104
111
|
if (isRunning) {
|
|
105
112
|
const hadPendingArgs = Boolean(lastArgs);
|
|
106
113
|
if (hadPendingArgs) {
|
|
@@ -122,12 +129,28 @@ export const debounceFixedInterval = (fn, delay, options) => {
|
|
|
122
129
|
return Promise.resolve();
|
|
123
130
|
};
|
|
124
131
|
const close = () => {
|
|
132
|
+
if (closed) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
closed = true;
|
|
125
136
|
if (timeout !== null) {
|
|
126
137
|
clearTimeout(timeout);
|
|
127
138
|
timeout = null;
|
|
128
139
|
}
|
|
129
|
-
|
|
140
|
+
lastArgs = null;
|
|
141
|
+
lastThis = undefined;
|
|
142
|
+
pendingCall = false;
|
|
130
143
|
forceNextImmediate = false;
|
|
144
|
+
const resolvers = waitingResolvers;
|
|
145
|
+
waitingResolvers = [];
|
|
146
|
+
for (const resolve of resolvers) {
|
|
147
|
+
resolve();
|
|
148
|
+
}
|
|
149
|
+
const flushWaiters = runWaiters;
|
|
150
|
+
runWaiters = [];
|
|
151
|
+
for (const waiter of flushWaiters) {
|
|
152
|
+
waiter.resolve();
|
|
153
|
+
}
|
|
131
154
|
};
|
|
132
155
|
return { call: debounced, close, flush };
|
|
133
156
|
};
|
|
@@ -138,7 +161,8 @@ export const debounceAccumulator = (fn, create, delay, options) => {
|
|
|
138
161
|
accumulator = create();
|
|
139
162
|
await fn(toSend);
|
|
140
163
|
};
|
|
141
|
-
const
|
|
164
|
+
const createDebouncer = () => debounceFixedInterval(innerInvoke, delay, options);
|
|
165
|
+
let deb = createDebouncer();
|
|
142
166
|
return {
|
|
143
167
|
add: (value) => {
|
|
144
168
|
accumulator.add(value);
|
|
@@ -151,6 +175,7 @@ export const debounceAccumulator = (fn, create, delay, options) => {
|
|
|
151
175
|
has: (key) => accumulator.has(key),
|
|
152
176
|
invoke: async () => {
|
|
153
177
|
deb.close();
|
|
178
|
+
deb = createDebouncer();
|
|
154
179
|
await innerInvoke();
|
|
155
180
|
},
|
|
156
181
|
close: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregators.js","sourceRoot":"","sources":["../../src/aggregators.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAGpC,EAAK,EACL,KAA8B,EAC9B,OAA6D,EAK5D,EAAE;IACH,MAAM,OAAO,GAAiB,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9E,MAAM,OAAO,GACZ,OAAO,EAAE,OAAO;QAChB,CAAC,CAAC,CAAQ,EAAQ,EAAE;YACnB,MAAM,CAAC,CAAC;QACT,CAAC,CAAC,CAAC;IACJ,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;IAEzC,IAAI,OAAO,GAAyC,IAAI,CAAC;IACzD,IAAI,QAAQ,GAAiB,IAAI,CAAC;IAClC,IAAI,QAAa,CAAC;IAClB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,gBAAgB,GAAsB,EAAE,CAAC;IAC7C,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,IAAI,UAAU,GAAgB,EAAE,CAAC;IAEjC,MAAM,iBAAiB,GAAG,GAAS,EAAE;QACpC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO;QACR,CAAC;QACD,MAAM,SAAS,GAAgB,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC5B,IAAI,aAAa,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC/B,CAAC,CAAC,OAAO,EAAE,CAAC;YACb,CAAC;iBAAM,CAAC;gBACP,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACF,CAAC;QACD,UAAU,GAAG,SAAS,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAiB,EAAE,CACpD,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;YACV,OAAO;QACR,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE;QACxC,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,CAAC,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"aggregators.js","sourceRoot":"","sources":["../../src/aggregators.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peerbit/time",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "Utility functions for time",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -52,12 +52,13 @@
|
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
|
54
54
|
},
|
|
55
|
-
"author": "
|
|
55
|
+
"author": "Peerbit contributors",
|
|
56
56
|
"license": "MIT",
|
|
57
57
|
"scripts": {
|
|
58
58
|
"clean": "aegir clean",
|
|
59
59
|
"build": "aegir build --no-bundle",
|
|
60
60
|
"test": "aegir test",
|
|
61
|
-
"lint": "aegir lint"
|
|
61
|
+
"lint": "aegir lint",
|
|
62
|
+
"test:cov": "aegir test -t node --cov"
|
|
62
63
|
}
|
|
63
64
|
}
|
package/src/aggregators.ts
CHANGED
|
@@ -22,6 +22,7 @@ export const debounceFixedInterval = <
|
|
|
22
22
|
let lastThis: any;
|
|
23
23
|
let pendingCall = false;
|
|
24
24
|
let isRunning = false;
|
|
25
|
+
let closed = false;
|
|
25
26
|
let waitingResolvers: Array<() => void> = [];
|
|
26
27
|
let lastInvokeTime: number | null = null;
|
|
27
28
|
let forceNextImmediate = false;
|
|
@@ -56,7 +57,7 @@ export const debounceFixedInterval = <
|
|
|
56
57
|
|
|
57
58
|
const invoke = async (): Promise<void> => {
|
|
58
59
|
timeout = null;
|
|
59
|
-
if (!lastArgs) {
|
|
60
|
+
if (closed || !lastArgs) {
|
|
60
61
|
return;
|
|
61
62
|
}
|
|
62
63
|
|
|
@@ -83,7 +84,7 @@ export const debounceFixedInterval = <
|
|
|
83
84
|
completedRuns++;
|
|
84
85
|
resolveRunWaiters();
|
|
85
86
|
|
|
86
|
-
if (pendingCall) {
|
|
87
|
+
if (!closed && pendingCall) {
|
|
87
88
|
if (forceNextImmediate) {
|
|
88
89
|
forceNextImmediate = false;
|
|
89
90
|
timeout = setTimeout(invoke, 0);
|
|
@@ -97,6 +98,9 @@ export const debounceFixedInterval = <
|
|
|
97
98
|
};
|
|
98
99
|
|
|
99
100
|
function debounced(this: any, ...args: Parameters<T>): Promise<void> {
|
|
101
|
+
if (closed) {
|
|
102
|
+
return Promise.resolve();
|
|
103
|
+
}
|
|
100
104
|
lastArgs = args;
|
|
101
105
|
lastThis = this;
|
|
102
106
|
pendingCall = true;
|
|
@@ -122,6 +126,9 @@ export const debounceFixedInterval = <
|
|
|
122
126
|
}
|
|
123
127
|
|
|
124
128
|
const flush = (): Promise<void> => {
|
|
129
|
+
if (closed) {
|
|
130
|
+
return Promise.resolve();
|
|
131
|
+
}
|
|
125
132
|
if (isRunning) {
|
|
126
133
|
const hadPendingArgs = Boolean(lastArgs);
|
|
127
134
|
if (hadPendingArgs) {
|
|
@@ -147,12 +154,30 @@ export const debounceFixedInterval = <
|
|
|
147
154
|
};
|
|
148
155
|
|
|
149
156
|
const close = (): void => {
|
|
157
|
+
if (closed) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
closed = true;
|
|
150
161
|
if (timeout !== null) {
|
|
151
162
|
clearTimeout(timeout);
|
|
152
163
|
timeout = null;
|
|
153
164
|
}
|
|
154
|
-
|
|
165
|
+
lastArgs = null;
|
|
166
|
+
lastThis = undefined;
|
|
167
|
+
pendingCall = false;
|
|
155
168
|
forceNextImmediate = false;
|
|
169
|
+
|
|
170
|
+
const resolvers = waitingResolvers;
|
|
171
|
+
waitingResolvers = [];
|
|
172
|
+
for (const resolve of resolvers) {
|
|
173
|
+
resolve();
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const flushWaiters = runWaiters;
|
|
177
|
+
runWaiters = [];
|
|
178
|
+
for (const waiter of flushWaiters) {
|
|
179
|
+
waiter.resolve();
|
|
180
|
+
}
|
|
156
181
|
};
|
|
157
182
|
|
|
158
183
|
return { call: debounced, close, flush };
|
|
@@ -168,7 +193,7 @@ export const debounceAccumulator = <K, T, V>(
|
|
|
168
193
|
has(key: K): boolean;
|
|
169
194
|
},
|
|
170
195
|
delay: number | (() => number),
|
|
171
|
-
options?: { leading?: boolean },
|
|
196
|
+
options?: { leading?: boolean; onError?(error: Error): void },
|
|
172
197
|
): {
|
|
173
198
|
add(value: T): Promise<void>;
|
|
174
199
|
delete(key: K): void;
|
|
@@ -186,7 +211,9 @@ export const debounceAccumulator = <K, T, V>(
|
|
|
186
211
|
await fn(toSend);
|
|
187
212
|
};
|
|
188
213
|
|
|
189
|
-
const
|
|
214
|
+
const createDebouncer = () =>
|
|
215
|
+
debounceFixedInterval(innerInvoke, delay, options);
|
|
216
|
+
let deb = createDebouncer();
|
|
190
217
|
|
|
191
218
|
return {
|
|
192
219
|
add: (value: T): Promise<void> => {
|
|
@@ -200,6 +227,7 @@ export const debounceAccumulator = <K, T, V>(
|
|
|
200
227
|
has: (key: K): boolean => accumulator.has(key),
|
|
201
228
|
invoke: async (): Promise<void> => {
|
|
202
229
|
deb.close();
|
|
230
|
+
deb = createDebouncer();
|
|
203
231
|
await innerInvoke();
|
|
204
232
|
},
|
|
205
233
|
close: (): void => {
|