@zajno/common 2.3.15 → 2.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/functions/throttle.d.ts +19 -7
- package/functions/throttle.d.ts.map +1 -1
- package/functions/throttle.js +54 -40
- package/functions/throttle.js.map +1 -1
- package/models/Model.d.ts +2 -2
- package/models/Model.d.ts.map +1 -1
- package/models/Model.js +4 -4
- package/models/Model.js.map +1 -1
- package/package.json +1 -1
- package/structures/promiseCache.d.ts +4 -2
- package/structures/promiseCache.d.ts.map +1 -1
- package/structures/promiseCache.js +20 -8
- package/structures/promiseCache.js.map +1 -1
package/functions/throttle.d.ts
CHANGED
|
@@ -1,27 +1,39 @@
|
|
|
1
|
+
import { ILogger } from '../logger';
|
|
1
2
|
/** Runs a callback after a timeout, ignoring all consecutive calls until the first is processed. */
|
|
2
3
|
export declare class ThrottleAction<T = any> {
|
|
3
4
|
timeout: number;
|
|
4
5
|
private _timeoutRef;
|
|
5
6
|
private _postponedCb;
|
|
6
7
|
private _locked;
|
|
7
|
-
private
|
|
8
|
+
private _logger;
|
|
9
|
+
/**
|
|
10
|
+
* In case previous action has started processing but not finished yet, and the following one is going to start,
|
|
11
|
+
* this flag allows to run the second in parallel.
|
|
12
|
+
*/
|
|
13
|
+
private _allowParallelRuns;
|
|
14
|
+
private _currentRun;
|
|
8
15
|
constructor(timeout?: number);
|
|
16
|
+
useParallelRuns(): this;
|
|
17
|
+
useLogger(logger: ILogger | string | null): this;
|
|
9
18
|
clear(): void;
|
|
10
|
-
tryRun(cb: () => T | Promise<T>, restartTimeout?: boolean):
|
|
19
|
+
tryRun(cb: () => T | Promise<T>, restartTimeout?: boolean): Promise<T | undefined>;
|
|
11
20
|
forceRun: () => Promise<T | undefined>;
|
|
12
|
-
getPromise(): Promise<
|
|
21
|
+
getPromise(): Promise<T | undefined>;
|
|
13
22
|
}
|
|
23
|
+
type ProcessorResult<T> = {
|
|
24
|
+
result: T | undefined;
|
|
25
|
+
index: number;
|
|
26
|
+
};
|
|
14
27
|
export declare class ThrottleProcessor<TSubject, TResult = any> {
|
|
15
28
|
private readonly process;
|
|
16
29
|
private readonly _queue;
|
|
17
30
|
private readonly _action;
|
|
18
31
|
private _promise;
|
|
19
32
|
constructor(process: (objs: TSubject[]) => Promise<TResult>, timeout?: number);
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
index: number;
|
|
23
|
-
}>;
|
|
33
|
+
useLogger(logger: ILogger | string | null): this;
|
|
34
|
+
push(data: TSubject): Promise<ProcessorResult<TResult>>;
|
|
24
35
|
private _process;
|
|
25
36
|
clear(): void;
|
|
26
37
|
}
|
|
38
|
+
export {};
|
|
27
39
|
//# sourceMappingURL=throttle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../src/functions/throttle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../src/functions/throttle.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,OAAO,EAAE,MAAM,WAAW,CAAC;AAMlD,qGAAqG;AACrG,qBAAa,cAAc,CAAC,CAAC,GAAG,GAAG;IAeZ,OAAO;IAb1B,OAAO,CAAC,WAAW,CAA8C;IACjE,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,OAAO,CAAwB;IAEvC;;;QAGI;IACJ,OAAO,CAAC,kBAAkB,CAAS;IAEnC,OAAO,CAAC,WAAW,CAA6C;gBAE7C,OAAO,SAAO;IAE1B,eAAe;IAKf,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAShD,KAAK;IAQL,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,UAAQ,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAsBhF,QAAQ,+BA8BN;IAEF,UAAU;CAGb;AAED,KAAK,eAAe,CAAC,CAAC,IAAI;IAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,qBAAa,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,GAAG;IAOtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAE9D,OAAO,CAAC,QAAQ,CAAuC;gBAE1B,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,SAAO;IASrF,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAK1C,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAW7D,OAAO,CAAC,QAAQ,CASd;IAEF,KAAK;CAKR"}
|
package/functions/throttle.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ThrottleProcessor = exports.ThrottleAction = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
4
|
const misc_1 = require("../async/misc");
|
|
6
|
-
const logger_1 =
|
|
5
|
+
const logger_1 = require("../logger");
|
|
6
|
+
const math_1 = require("../math");
|
|
7
7
|
const safe_1 = require("./safe");
|
|
8
8
|
/** Runs a callback after a timeout, ignoring all consecutive calls until the first is processed. */
|
|
9
9
|
class ThrottleAction {
|
|
@@ -11,10 +11,29 @@ class ThrottleAction {
|
|
|
11
11
|
_timeoutRef = null;
|
|
12
12
|
_postponedCb = null;
|
|
13
13
|
_locked = false;
|
|
14
|
-
|
|
14
|
+
_logger = null;
|
|
15
|
+
/**
|
|
16
|
+
* In case previous action has started processing but not finished yet, and the following one is going to start,
|
|
17
|
+
* this flag allows to run the second in parallel.
|
|
18
|
+
*/
|
|
19
|
+
_allowParallelRuns = false;
|
|
20
|
+
_currentRun = null;
|
|
15
21
|
constructor(timeout = 1000) {
|
|
16
22
|
this.timeout = timeout;
|
|
17
23
|
}
|
|
24
|
+
useParallelRuns() {
|
|
25
|
+
this._allowParallelRuns = true;
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
useLogger(logger) {
|
|
29
|
+
if (typeof logger === 'string') {
|
|
30
|
+
this._logger = (0, logger_1.createLogger)(logger);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this._logger = logger;
|
|
34
|
+
}
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
18
37
|
clear() {
|
|
19
38
|
if (this._timeoutRef) {
|
|
20
39
|
clearTimeout(this._timeoutRef);
|
|
@@ -23,51 +42,55 @@ class ThrottleAction {
|
|
|
23
42
|
this._postponedCb = null;
|
|
24
43
|
}
|
|
25
44
|
tryRun(cb, restartTimeout = false) {
|
|
26
|
-
if (!this._timeoutRef) {
|
|
45
|
+
if (!this._timeoutRef) { // start new timeout
|
|
46
|
+
if (!this._currentRun) {
|
|
47
|
+
this._currentRun = (0, misc_1.createManualPromise)();
|
|
48
|
+
}
|
|
49
|
+
const result = this._currentRun.promise;
|
|
27
50
|
this._postponedCb = cb;
|
|
28
51
|
this._timeoutRef = setTimeout(() => (0, safe_1.catchPromise)(this.forceRun()), this.timeout);
|
|
29
|
-
|
|
52
|
+
return result;
|
|
30
53
|
}
|
|
31
|
-
|
|
54
|
+
if (restartTimeout) {
|
|
32
55
|
this.clear();
|
|
33
|
-
this.tryRun(cb);
|
|
56
|
+
return this.tryRun(cb, false);
|
|
34
57
|
}
|
|
58
|
+
return this.getPromise();
|
|
35
59
|
}
|
|
36
60
|
forceRun = async () => {
|
|
37
61
|
const cb = this._postponedCb;
|
|
62
|
+
const p = this._currentRun;
|
|
63
|
+
this._currentRun = null;
|
|
38
64
|
this.clear();
|
|
39
|
-
if (this._locked) {
|
|
65
|
+
if (!this._allowParallelRuns && this._locked) {
|
|
40
66
|
// This happening when the previous call is still running, while the new one has finished its timeout and is willing to run.
|
|
41
67
|
// This is probably OK since the running call should cover the current one.
|
|
42
68
|
// TODO Maybe just don't start timeout if the lock is set?
|
|
43
69
|
// The reason for not doing that 👆 is there's still a valid case when previous is still working but it's legit to start a new one (e.g. some state has changed already)
|
|
44
|
-
|
|
70
|
+
this._logger?.warn('[ThrottleAction] THROTTLE LOCKED, but another call is forced. Skipping since the behavior is undefined.');
|
|
45
71
|
}
|
|
46
72
|
else if (cb) {
|
|
47
73
|
let result = undefined;
|
|
74
|
+
const lockId = (0, math_1.random)(1, 1_000_000);
|
|
48
75
|
try {
|
|
49
|
-
this._locked =
|
|
76
|
+
this._locked = lockId;
|
|
50
77
|
result = await cb();
|
|
78
|
+
p?.resolve(result);
|
|
51
79
|
return result;
|
|
52
80
|
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
p?.reject(err);
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
53
85
|
finally {
|
|
54
|
-
this._locked
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
// logger.log('getPromise: resolving', resolvers.length);
|
|
58
|
-
resolvers.forEach(r => r(result));
|
|
86
|
+
if (this._locked === lockId) {
|
|
87
|
+
this._locked = false;
|
|
88
|
+
}
|
|
59
89
|
}
|
|
60
90
|
}
|
|
61
91
|
};
|
|
62
92
|
getPromise() {
|
|
63
|
-
|
|
64
|
-
// logger.log('getPromise: nothing to wait for');
|
|
65
|
-
return Promise.resolve();
|
|
66
|
-
}
|
|
67
|
-
return new Promise(resolve => {
|
|
68
|
-
// logger.log('getPromise: adding resolver');
|
|
69
|
-
this._resolvers.push(resolve);
|
|
70
|
-
});
|
|
93
|
+
return this._currentRun?.promise || Promise.resolve(undefined);
|
|
71
94
|
}
|
|
72
95
|
}
|
|
73
96
|
exports.ThrottleAction = ThrottleAction;
|
|
@@ -81,16 +104,16 @@ class ThrottleProcessor {
|
|
|
81
104
|
if (!process) {
|
|
82
105
|
throw new Error('Arg0 expected: process');
|
|
83
106
|
}
|
|
84
|
-
this._action = new ThrottleAction(timeout)
|
|
107
|
+
this._action = new ThrottleAction(timeout)
|
|
108
|
+
.useParallelRuns();
|
|
109
|
+
}
|
|
110
|
+
useLogger(logger) {
|
|
111
|
+
this._action.useLogger(logger);
|
|
112
|
+
return this;
|
|
85
113
|
}
|
|
86
114
|
async push(data) {
|
|
87
115
|
const index = this._queue.push(data) - 1;
|
|
88
|
-
|
|
89
|
-
this._promise = (0, misc_1.createManualPromise)();
|
|
90
|
-
}
|
|
91
|
-
const p = this._promise.promise;
|
|
92
|
-
this._action.tryRun(this._process, true);
|
|
93
|
-
const res = await p;
|
|
116
|
+
const res = await this._action.tryRun(this._process, true);
|
|
94
117
|
return {
|
|
95
118
|
result: res,
|
|
96
119
|
index,
|
|
@@ -102,16 +125,7 @@ class ThrottleProcessor {
|
|
|
102
125
|
}
|
|
103
126
|
const objs = this._queue.slice();
|
|
104
127
|
this._queue.length = 0;
|
|
105
|
-
|
|
106
|
-
const res = await this.process(objs);
|
|
107
|
-
this._promise?.resolve(res);
|
|
108
|
-
}
|
|
109
|
-
catch (err) {
|
|
110
|
-
this._promise?.reject(err);
|
|
111
|
-
}
|
|
112
|
-
finally {
|
|
113
|
-
this._promise = null;
|
|
114
|
-
}
|
|
128
|
+
return this.process(objs);
|
|
115
129
|
};
|
|
116
130
|
clear() {
|
|
117
131
|
this._action.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../src/functions/throttle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../src/functions/throttle.ts"],"names":[],"mappings":"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"}
|
package/models/Model.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare class Model<T> implements IValueModel<Nullable<T>> {
|
|
|
7
7
|
constructor(v?: Getter<Nullable<T>>);
|
|
8
8
|
get value(): T;
|
|
9
9
|
set value(v: T);
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
setValue(value: Getter<Nullable<T>>): void;
|
|
11
|
+
reset(): void;
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=Model.d.ts.map
|
package/models/Model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/models/Model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,qBAAa,KAAK,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;gBAExC,CAAC,GAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAQ;IAKzC,IAAW,KAAK,IACI,CAAC,CADuC;IAC5D,IAAW,KAAK,CAAC,CAAC,EAAE,CAAC,EAEpB;
|
|
1
|
+
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/models/Model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,qBAAa,KAAK,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;gBAExC,CAAC,GAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAQ;IAKzC,IAAW,KAAK,IACI,CAAC,CADuC;IAC5D,IAAW,KAAK,CAAC,CAAC,EAAE,CAAC,EAEpB;IAEM,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAInC,KAAK;CAGf"}
|
package/models/Model.js
CHANGED
|
@@ -13,12 +13,12 @@ class Model {
|
|
|
13
13
|
set value(v) {
|
|
14
14
|
this.setValue(v);
|
|
15
15
|
}
|
|
16
|
-
setValue
|
|
16
|
+
setValue(value) {
|
|
17
17
|
this._value = value;
|
|
18
|
-
}
|
|
19
|
-
reset
|
|
18
|
+
}
|
|
19
|
+
reset() {
|
|
20
20
|
this.setValue(this._defaultValue);
|
|
21
|
-
}
|
|
21
|
+
}
|
|
22
22
|
}
|
|
23
23
|
exports.Model = Model;
|
|
24
24
|
//# sourceMappingURL=Model.js.map
|
package/models/Model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Model.js","sourceRoot":"","sources":["../../src/models/Model.ts"],"names":[],"mappings":";;;AACA,4CAAyC;AAGzC,MAAa,KAAK;IACN,MAAM,CAAsB;IAEnB,aAAa,CAAsB;IAEpD,YAAY,IAAyB,IAAI;QACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,IAAW,KAAK,KAAK,OAAO,eAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC;IAC5D,IAAW,KAAK,CAAC,CAAI;QACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;
|
|
1
|
+
{"version":3,"file":"Model.js","sourceRoot":"","sources":["../../src/models/Model.ts"],"names":[],"mappings":";;;AACA,4CAAyC;AAGzC,MAAa,KAAK;IACN,MAAM,CAAsB;IAEnB,aAAa,CAAsB;IAEpD,YAAY,IAAyB,IAAI;QACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,IAAW,KAAK,KAAK,OAAO,eAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC;IAC5D,IAAW,KAAK,CAAC,CAAI;QACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAEM,QAAQ,CAAC,KAA0B;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;CACJ;AAtBD,sBAsBC"}
|
package/package.json
CHANGED
|
@@ -28,6 +28,7 @@ export declare class PromiseCache<T, K = string> {
|
|
|
28
28
|
private _timestamps;
|
|
29
29
|
private _batch;
|
|
30
30
|
private _invalidationTimeMs;
|
|
31
|
+
private _keepInstanceDuringInvalidation;
|
|
31
32
|
private _logger;
|
|
32
33
|
private _version;
|
|
33
34
|
protected _busyCount: number;
|
|
@@ -42,18 +43,19 @@ export declare class PromiseCache<T, K = string> {
|
|
|
42
43
|
*
|
|
43
44
|
* When provided, effectively replaces the main fetcher; but in case of fail, fallbacks to the main fetcher.
|
|
44
45
|
*/
|
|
45
|
-
useBatching(fetcher: (ids: K[]) => Promise<T[]
|
|
46
|
+
useBatching(fetcher: (ids: K[]) => Promise<T[]>, delay?: number): this;
|
|
46
47
|
/**
|
|
47
48
|
* Enables auto-invalidation of cached items.
|
|
48
49
|
*
|
|
49
50
|
* @param ms Time in milliseconds after which the item will be considered invalid. If null, auto-invalidation is disabled.
|
|
50
51
|
*/
|
|
51
|
-
useInvalidationTime(ms: number | null): this;
|
|
52
|
+
useInvalidationTime(ms: number | null, keepInstance?: boolean): this;
|
|
52
53
|
getDeferred(key: K): DeferredGetter<T>;
|
|
53
54
|
getIsBusy(id: K): boolean | undefined;
|
|
54
55
|
protected _getCurrent(id: K): {
|
|
55
56
|
item: T | null | undefined;
|
|
56
57
|
key: string;
|
|
58
|
+
isInvalid: boolean;
|
|
57
59
|
};
|
|
58
60
|
getCurrent(id: K, initiateFetch?: boolean): T | null | undefined;
|
|
59
61
|
get(id: K): Promise<T | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promiseCache.d.ts","sourceRoot":"","sources":["../../src/structures/promiseCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,OAAO,EAAE,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC5B,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF,yBAAiB,cAAc,CAAC;IAGrB,MAAM,KAAK;;;;KAIc,CAAC;CACpC;AAID;;;;;;EAME;AACF,qBAAa,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"promiseCache.d.ts","sourceRoot":"","sources":["../../src/structures/promiseCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,OAAO,EAAE,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC5B,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF,yBAAiB,cAAc,CAAC;IAGrB,MAAM,KAAK;;;;KAIc,CAAC;CACpC;AAID;;;;;;EAME;AACF,qBAAa,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM;IAiB/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAjB/B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAM;IACjE,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAErD,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,WAAW,CAA6B;IAEhD,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,+BAA+B,CAAS;IAEhD,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAK;IACrB,SAAS,CAAC,UAAU,SAAK;gBAGJ,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9B,UAAU,CAAC,iCAAgC,CAAC,KAAK,MAAM,aAAA,EACvD,SAAS,CAAC,kCAAiC,MAAM,KAAK,CAAC,aAAA;IAK5E,IAAW,SAAS,WAA8B;IAElD,OAAO,CAAC,GAAG;IAgBX,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IASrD;;;;;;MAME;IACF,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,SAAiB;IAKvE;;;;MAIE;IACF,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,UAAQ;IAM3D,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAUtC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,GAAG,SAAS;IAUrC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;;;;;IAe3B,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,aAAa,UAAO,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS;IAU7D,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAwB7B,SAAS,CAAC,aAAa,OAAc,CAAC,OAAO,MAAM,uBA2BjD;IAEF,UAAU,CAAC,EAAE,EAAE,CAAC;IAKhB,mBAAmB,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAK1C,MAAM,CAAC,EAAE,EAAE,CAAC;IAKZ,IAAI;IAIJ,UAAU;IAQV,KAAK;IAUL,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS;IAMlH,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAStC,gBAAgB;IAChB,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAKhD,gBAAgB;IAChB,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAI5D,gBAAgB;IAChB,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAKhD,gBAAgB;IAChB,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM;IAIpC,gBAAgB;IAChB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAIrC,gBAAgB;IAChB,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM;IAMrC,YAAY;cACI,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAsB5D"}
|
|
@@ -30,6 +30,7 @@ class PromiseCache {
|
|
|
30
30
|
_timestamps = new Map();
|
|
31
31
|
_batch = null;
|
|
32
32
|
_invalidationTimeMs = null;
|
|
33
|
+
_keepInstanceDuringInvalidation = false;
|
|
33
34
|
_logger = null;
|
|
34
35
|
_version = 0;
|
|
35
36
|
_busyCount = 0;
|
|
@@ -68,8 +69,8 @@ class PromiseCache {
|
|
|
68
69
|
*
|
|
69
70
|
* When provided, effectively replaces the main fetcher; but in case of fail, fallbacks to the main fetcher.
|
|
70
71
|
*/
|
|
71
|
-
useBatching(fetcher) {
|
|
72
|
-
this._batch = fetcher ? new throttle_1.ThrottleProcessor(fetcher,
|
|
72
|
+
useBatching(fetcher, delay = BATCHING_DELAY) {
|
|
73
|
+
this._batch = fetcher ? new throttle_1.ThrottleProcessor(fetcher, delay) : null;
|
|
73
74
|
return this;
|
|
74
75
|
}
|
|
75
76
|
/**
|
|
@@ -77,8 +78,9 @@ class PromiseCache {
|
|
|
77
78
|
*
|
|
78
79
|
* @param ms Time in milliseconds after which the item will be considered invalid. If null, auto-invalidation is disabled.
|
|
79
80
|
*/
|
|
80
|
-
useInvalidationTime(ms) {
|
|
81
|
+
useInvalidationTime(ms, keepInstance = false) {
|
|
81
82
|
this._invalidationTimeMs = ms;
|
|
83
|
+
this._keepInstanceDuringInvalidation = keepInstance;
|
|
82
84
|
return this;
|
|
83
85
|
}
|
|
84
86
|
getDeferred(key) {
|
|
@@ -93,7 +95,11 @@ class PromiseCache {
|
|
|
93
95
|
getIsBusy(id) {
|
|
94
96
|
const key = this._pk(id);
|
|
95
97
|
const res = this._itemsStatus[key];
|
|
96
|
-
|
|
98
|
+
if (res) {
|
|
99
|
+
return res;
|
|
100
|
+
}
|
|
101
|
+
const isInvalid = this.getIsInvalidated(key);
|
|
102
|
+
return isInvalid ? undefined : res;
|
|
97
103
|
}
|
|
98
104
|
_getCurrent(id) {
|
|
99
105
|
const key = this._pk(id);
|
|
@@ -103,20 +109,26 @@ class PromiseCache {
|
|
|
103
109
|
if (isInvalid) {
|
|
104
110
|
this._logger?.log(key, 'item is invalidated');
|
|
105
111
|
}
|
|
106
|
-
return {
|
|
112
|
+
return {
|
|
113
|
+
item: (isInvalid && !this._keepInstanceDuringInvalidation) ? undefined : item,
|
|
114
|
+
key,
|
|
115
|
+
isInvalid,
|
|
116
|
+
};
|
|
107
117
|
}
|
|
108
118
|
getCurrent(id, initiateFetch = true) {
|
|
109
119
|
const { item, key } = this._getCurrent(id);
|
|
110
120
|
if (initiateFetch) {
|
|
121
|
+
// spin fetch
|
|
111
122
|
this.get(id);
|
|
112
123
|
}
|
|
113
124
|
this._logger?.log(key, 'getCurrent: returns', item);
|
|
114
125
|
return item;
|
|
115
126
|
}
|
|
116
127
|
get(id) {
|
|
117
|
-
const { item, key } = this._getCurrent(id);
|
|
118
|
-
|
|
119
|
-
|
|
128
|
+
const { item, key, isInvalid } = this._getCurrent(id);
|
|
129
|
+
// return cached item if it's not invalidated
|
|
130
|
+
if (item !== undefined && !isInvalid) {
|
|
131
|
+
this._logger?.log(key, 'get: item resolved to', item, isInvalid ? '(invalidated)' : '');
|
|
120
132
|
return Promise.resolve(item);
|
|
121
133
|
}
|
|
122
134
|
let promise = this._fetchCache[key];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promiseCache.js","sourceRoot":"","sources":["../../src/structures/promiseCache.ts"],"names":[],"mappings":";;;AAAA,oDAA0D;AAC1D,sCAAkD;AAQlD,IAAiB,cAAc,CAQ9B;AARD,WAAiB,cAAc;IAC3B,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAO,IAAI,CAAC,CAAC;IAExC,oBAAK,GAAG;QACjB,IAAI,OAAO,KAAW,OAAO,IAAI,CAAC,CAAC,CAAC;QACpC,IAAI,OAAO,KAAoB,OAAO,gBAAgB,CAAC,CAAC,CAAC;QACzD,IAAI,IAAI,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;KACA,CAAC;AACrC,CAAC,EARgB,cAAc,8BAAd,cAAc,QAQ9B;AAED,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B;;;;;;EAME;AACF,MAAa,YAAY;
|
|
1
|
+
{"version":3,"file":"promiseCache.js","sourceRoot":"","sources":["../../src/structures/promiseCache.ts"],"names":[],"mappings":"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"}
|