@zajno/common 2.3.17 → 2.3.18

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/api/call.js CHANGED
@@ -55,7 +55,7 @@ function buildApiCaller(options) {
55
55
  config.headers['Content-Type'] = 'multipart/form-data';
56
56
  }
57
57
  const response = await request(config);
58
- return register_1.PostProcessors.process(api, response.data);
58
+ return register_1.PostProcessors.process(api, response?.data);
59
59
  };
60
60
  }
61
61
  exports.buildApiCaller = buildApiCaller;
package/api/call.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/api/call.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/api/call.ts"],"names":[],"mappings":";;;AAAA,yCAA2D;AAK3D,uCAAoC;AAuCpC,SAAgB,cAAc,CAA8C,OAA8B;IAEtG,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE5C,OAAO,KAAK,UAAU,OAAO,CACzB,GAAM,EACN,IAAyB,EACzB,KAAyB;QAMzB,MAAM,EACF,OAAO,EACP,GAAG,GAAG,KAAK,EACX,QAAQ,EACR,GAAG,SAAS,EACf,GAAG,KAAK,IAAI,EAAE,CAAC;QAEhB,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,EAAS,CAAC;QAC/C,MAAM,UAAU,GAAoC,EAAE,CAAC;QACvD,IAAI,QAAQ,GAAW,EAAE,CAAC;QAE1B,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;QACtC,IAAI,WAAW,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;YAClC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBACzB,UAAU,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBACnC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;QAED,MAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC;QACxC,IAAI,WAAW,IAAI,iBAAiB,EAAE,MAAM,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAc,EAAE,CAAC;YAClC,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;gBAClC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;oBACZ,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACrB,KAAK,GAAG,KAAK,CAAC;gBAClB,CAAC;gBACD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;gBAChD,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,IAAI,cAAc,EAAE,CAAC;YAChC,MAAM,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,WAAW,GAAG,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;YAClE,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;QACnC,MAAM,MAAM,GAAyC;YACjD,MAAM;YACN,GAAG,EAAE,IAAA,iBAAO,EAAC,GAAG,EAAE,UAA0C,CAAC,GAAG,QAAQ;YACxE,IAAI,EAAE,wBAAa,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,SAAS;YAC1D,OAAO,EAAE,OAAoB,IAAI,EAAE;YACnC,IAAI,EAAE,GAAG;YAET,SAAS,EAAE,QAAQ,IAAI,MAAgB,KAAK,KAAK;YACjD,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,SAAmB;SAC9B,CAAC;QAEF,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,qBAAqB,CAAC;QAC3D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAmB,CAAC;QACzD,OAAO,yBAAc,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC;AACN,CAAC;AA/ED,wCA+EC"}
package/lazy/light.d.ts CHANGED
@@ -1,9 +1,3 @@
1
- import type { IDisposable } from '../functions/disposer';
2
- import type { IResetableModel } from '../models/types';
3
- export type ILazy<T> = {
4
- readonly value: T;
5
- readonly hasValue: boolean;
6
- };
7
- export type LazyLight<T> = ILazy<T> & IDisposable & IResetableModel;
8
- export declare function createLazy<T>(factory: () => T): LazyLight<T>;
1
+ import type { ILazy } from './types';
2
+ export declare function createLazy<T>(factory: () => T): ILazy<T>;
9
3
  //# sourceMappingURL=light.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"light.d.ts","sourceRoot":"","sources":["../../src/lazy/light.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,eAAe,CAAC;AAEpE,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,gBAmB7C"}
1
+ {"version":3,"file":"light.d.ts","sourceRoot":"","sources":["../../src/lazy/light.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,YAoB7C"}
package/lazy/light.js CHANGED
@@ -11,6 +11,7 @@ function createLazy(factory) {
11
11
  }
12
12
  return _instance;
13
13
  },
14
+ get currentValue() { return _instance; },
14
15
  get hasValue() { return _instance !== undefined; },
15
16
  reset: () => {
16
17
  _instance = undefined;
package/lazy/light.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"light.js","sourceRoot":"","sources":["../../src/lazy/light.ts"],"names":[],"mappings":";;;AAUA,SAAgB,UAAU,CAAI,OAAgB;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC;IACzB,IAAI,SAAS,GAAkB,SAAS,CAAC;IAEzC,MAAM,GAAG,GAAiB;QACtB,IAAI,KAAK;YACL,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC1B,SAAS,GAAG,QAAQ,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC;QAClD,KAAK,EAAE,GAAG,EAAE;YACR,SAAS,GAAG,SAAS,CAAC;QAC1B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;KAC7B,CAAC;IAEF,OAAO,GAAG,CAAC;AACf,CAAC;AAnBD,gCAmBC"}
1
+ {"version":3,"file":"light.js","sourceRoot":"","sources":["../../src/lazy/light.ts"],"names":[],"mappings":";;;AAEA,SAAgB,UAAU,CAAI,OAAgB;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC;IACzB,IAAI,SAAS,GAAkB,SAAS,CAAC;IAEzC,MAAM,GAAG,GAAa;QAClB,IAAI,KAAK;YACL,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC1B,SAAS,GAAG,QAAQ,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,IAAI,YAAY,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;QACxC,IAAI,QAAQ,KAAK,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC;QAClD,KAAK,EAAE,GAAG,EAAE;YACR,SAAS,GAAG,SAAS,CAAC;QAC1B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;KAC7B,CAAC;IAEF,OAAO,GAAG,CAAC;AACf,CAAC;AApBD,gCAoBC"}
package/lazy/promise.d.ts CHANGED
@@ -1,22 +1,22 @@
1
- import type { IDisposable } from '../functions/disposer';
2
- import type { ILazy, LazyLight } from './light';
3
- export type ILazyPromise<T> = ILazy<T> & {
4
- readonly busy: boolean;
5
- readonly promise: Promise<T>;
6
- };
7
- export declare class LazyPromise<T> implements IDisposable, LazyLight<T>, ILazyPromise<T> {
1
+ import type { IExpireTracker } from '../structures/expire';
2
+ import type { ILazyPromise } from './types';
3
+ export declare class LazyPromise<T> implements ILazyPromise<T> {
8
4
  private readonly _factory;
9
5
  private readonly initial;
10
6
  private _instance;
11
7
  private _busy;
12
8
  private _promise;
9
+ private _expireTracker;
13
10
  constructor(_factory: () => Promise<T>, initial?: T | undefined);
14
- get busy(): boolean;
11
+ get busy(): boolean | null;
15
12
  get hasValue(): boolean;
16
13
  get promise(): Promise<T>;
17
14
  get value(): NonNullable<T>;
15
+ /** does not calls factory */
16
+ get currentValue(): T | undefined;
17
+ withExpire: (tracker: IExpireTracker | undefined) => this;
18
18
  protected ensureInstanceLoading(): void;
19
- protected onResolved: (res: T) => T;
19
+ protected onResolved(res: T): T;
20
20
  setInstance: (res: T | undefined) => T | undefined;
21
21
  reset: () => void;
22
22
  dispose: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../src/lazy/promise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAChC,CAAC;AAEF,qBAAa,WAAW,CAAC,CAAC,CAAE,YAAW,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;IAQzE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP5B,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,KAAK,CAAwB;IAErC,OAAO,CAAC,QAAQ,CAA2B;gBAGtB,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC1B,OAAO,GAAE,CAAC,GAAG,SAAqB;IAKvD,IAAI,IAAI,YAAkC;IAC1C,IAAI,QAAQ,YAAmC;IAE/C,IAAI,OAAO,eAGV;IAED,IAAI,KAAK,mBAGR;IAED,SAAS,CAAC,qBAAqB;IAO/B,SAAS,CAAC,UAAU,QAAS,CAAC,OAO5B;IAEK,WAAW,QAAS,CAAC,GAAG,SAAS,mBAWtC;IAEF,KAAK,aAIH;IAEF,OAAO,aAAsB;CAChC"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../src/lazy/promise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,qBAAa,WAAW,CAAC,CAAC,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAS9C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR5B,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,KAAK,CAAwB;IAErC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,cAAc,CAA6B;gBAG9B,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC1B,OAAO,GAAE,CAAC,GAAG,SAAqB;IAKvD,IAAI,IAAI,mBAAyB;IACjC,IAAI,QAAQ,YAAmC;IAE/C,IAAI,OAAO,eAGV;IAED,IAAI,KAAK,mBAGR;IAED,6BAA6B;IAC7B,IAAI,YAAY,kBAEf;IAEM,UAAU,YAAa,cAAc,GAAG,SAAS,UAGtD;IAEF,SAAS,CAAC,qBAAqB;IAY/B,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IASpB,WAAW,QAAS,CAAC,GAAG,SAAS,mBAetC;IAEF,KAAK,aAIH;IAEF,OAAO,aAAsB;CAChC"}
package/lazy/promise.js CHANGED
@@ -6,13 +6,14 @@ class LazyPromise {
6
6
  initial;
7
7
  _instance = undefined;
8
8
  _busy = null;
9
- _promise = null;
9
+ _promise;
10
+ _expireTracker;
10
11
  constructor(_factory, initial = undefined) {
11
12
  this._factory = _factory;
12
13
  this.initial = initial;
13
14
  this._instance = initial;
14
15
  }
15
- get busy() { return this._busy || false; }
16
+ get busy() { return this._busy; }
16
17
  get hasValue() { return this._busy === false; }
17
18
  get promise() {
18
19
  this.ensureInstanceLoading();
@@ -22,20 +23,32 @@ class LazyPromise {
22
23
  this.ensureInstanceLoading();
23
24
  return this._instance;
24
25
  }
26
+ /** does not calls factory */
27
+ get currentValue() {
28
+ return this._instance;
29
+ }
30
+ withExpire = (tracker) => {
31
+ this._expireTracker = tracker;
32
+ return this;
33
+ };
25
34
  ensureInstanceLoading() {
35
+ if (this.busy === false && this._instance !== undefined && this._expireTracker?.isExpired) {
36
+ // do not reset the instance, just make sure it will be reloaded
37
+ this._busy = null;
38
+ }
26
39
  if (this._busy === null) {
27
40
  this._busy = true;
28
- this._promise = this._factory().then(this.onResolved);
41
+ this._promise = this._factory().then(this.onResolved.bind(this));
29
42
  }
30
43
  }
31
- onResolved = (res) => {
44
+ onResolved(res) {
32
45
  // case: during the promise `setInstance` was called
33
46
  if (!this._busy && this._instance !== undefined) {
34
47
  return this._instance;
35
48
  }
36
49
  this.setInstance(res);
37
50
  return res;
38
- };
51
+ }
39
52
  setInstance = (res) => {
40
53
  this._busy = false;
41
54
  // refresh promise so it won't keep old callbacks
@@ -43,12 +56,15 @@ class LazyPromise {
43
56
  // also do this before setting the instance... just in case :)
44
57
  this._promise = Promise.resolve(res);
45
58
  this._instance = res;
59
+ if (this._expireTracker) {
60
+ this._expireTracker.restart();
61
+ }
46
62
  return res;
47
63
  };
48
64
  reset = () => {
49
65
  this._busy = null;
50
66
  this._instance = this.initial;
51
- this._promise = null;
67
+ this._promise = undefined;
52
68
  };
53
69
  dispose = () => this.reset();
54
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/lazy/promise.ts"],"names":[],"mappings":";;;AAQA,MAAa,WAAW;IAQC;IACA;IAPb,SAAS,GAAkB,SAAS,CAAC;IACrC,KAAK,GAAmB,IAAI,CAAC;IAE7B,QAAQ,GAAsB,IAAI,CAAC;IAE3C,YACqB,QAA0B,EAC1B,UAAyB,SAAS;QADlC,aAAQ,GAAR,QAAQ,CAAkB;QAC1B,YAAO,GAAP,OAAO,CAA2B;QAEnD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;IAC1C,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;IAE/C,IAAI,OAAO;QACP,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,QAAS,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACL,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,SAAU,CAAC;IAC3B,CAAC;IAES,qBAAqB;QAC3B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;IAES,UAAU,GAAG,CAAC,GAAM,EAAE,EAAE;QAC9B,oDAAoD;QACpD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;IAEK,WAAW,GAAG,CAAC,GAAkB,EAAE,EAAE;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,iDAAiD;QACjD,oDAAoD;QACpD,8DAA8D;QAC9D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,GAAG,GAAG,EAAE;QACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;CAChC;AA/DD,kCA+DC"}
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/lazy/promise.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IASC;IACA;IARb,SAAS,GAAkB,SAAS,CAAC;IACrC,KAAK,GAAmB,IAAI,CAAC;IAE7B,QAAQ,CAAyB;IACjC,cAAc,CAA6B;IAEnD,YACqB,QAA0B,EAC1B,UAAyB,SAAS;QADlC,aAAQ,GAAR,QAAQ,CAAkB;QAC1B,YAAO,GAAP,OAAO,CAA2B;QAEnD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;IAE/C,IAAI,OAAO;QACP,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,QAAS,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACL,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,SAAU,CAAC;IAC3B,CAAC;IAED,6BAA6B;IAC7B,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAEM,UAAU,GAAG,CAAC,OAAmC,EAAE,EAAE;QACxD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEQ,qBAAqB;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC;YACxF,gEAAgE;YAChE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;IAES,UAAU,CAAC,GAAM;QACvB,oDAAoD;QACpD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,WAAW,GAAG,CAAC,GAAkB,EAAE,EAAE;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,iDAAiD;QACjD,oDAAoD;QACpD,8DAA8D;QAC9D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAClC,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,GAAG,GAAG,EAAE;QACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;CAChC;AAnFD,kCAmFC"}
@@ -1,17 +1,21 @@
1
- import type { IDisposable } from '../functions/disposer';
2
- import type { LazyLight } from './light';
3
- export declare class Lazy<T> implements IDisposable, LazyLight<T> {
1
+ import type { IExpireTracker } from '../structures/expire';
2
+ import type { ILazy } from './types';
3
+ export declare class Lazy<T> implements ILazy<T> {
4
4
  protected readonly _factory: (() => T);
5
- protected readonly _disposer?: ((prev: T) => void) | undefined;
6
- protected _instance: T | null;
7
- constructor(_factory: (() => T), _disposer?: ((prev: T) => void) | undefined);
5
+ protected _instance: T | undefined;
6
+ private _expireTracker;
7
+ private _disposer?;
8
+ constructor(_factory: (() => T));
8
9
  get hasValue(): boolean;
9
10
  get value(): NonNullable<T>;
11
+ get currentValue(): T | undefined;
10
12
  /** Override me: additional way to make sure instance is valid */
11
13
  protected get isValid(): boolean;
14
+ withDisposer: (disposer: (prev: T) => void) => this;
15
+ withExpire: (tracker: IExpireTracker | undefined) => this;
12
16
  private ensureInstance;
13
17
  prewarm(): this;
14
- setInstance: (instance: T | null) => void;
18
+ setInstance(instance: T | undefined): void;
15
19
  reset(): void;
16
20
  dispose(): void;
17
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../src/lazy/singleton.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,qBAAa,IAAI,CAAC,CAAC,CAAE,YAAW,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAKjD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAS,CAAC,KAAK,IAAI;IAJpD,SAAS,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,CAAQ;gBAGd,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EACnB,SAAS,CAAC,UAAS,CAAC,KAAK,IAAI,aAAA;IAKpD,IAAI,QAAQ,YAAsC;IAElD,IAAI,KAAK,mBAGR;IAED,iEAAiE;IACjE,SAAS,KAAK,OAAO,YAA4B;IAEjD,OAAO,CAAC,cAAc;IAWtB,OAAO;IAKP,WAAW,aAAc,CAAC,GAAG,IAAI,UAE/B;IAEF,KAAK;IAOL,OAAO;CACV"}
1
+ {"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../src/lazy/singleton.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,IAAI,CAAC,CAAC,CAAE,YAAW,KAAK,CAAC,CAAC,CAAC;IAMxB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;IAJlD,SAAS,CAAC,SAAS,EAAE,CAAC,GAAG,SAAS,CAAa;IAC/C,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,SAAS,CAAC,CAAoB;gBAEP,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;IAElD,IAAI,QAAQ,YAA2C;IAEvD,IAAI,KAAK,mBAGR;IAED,IAAI,YAAY,kBAEf;IAED,iEAAiE;IACjE,SAAS,KAAK,OAAO,YAapB;IAEM,YAAY,aAAc,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,UAGhD;IAEK,UAAU,YAAa,cAAc,GAAG,SAAS,UAGtD;IAEF,OAAO,CAAC,cAAc;IAWtB,OAAO;IAKP,WAAW,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS;IAQnC,KAAK;IAOL,OAAO;CACV"}
package/lazy/singleton.js CHANGED
@@ -3,19 +3,41 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Lazy = void 0;
4
4
  class Lazy {
5
5
  _factory;
6
+ _instance = undefined;
7
+ _expireTracker;
6
8
  _disposer;
7
- _instance = null;
8
- constructor(_factory, _disposer) {
9
+ constructor(_factory) {
9
10
  this._factory = _factory;
10
- this._disposer = _disposer;
11
11
  }
12
- get hasValue() { return this._instance !== null; }
12
+ get hasValue() { return this._instance !== undefined; }
13
13
  get value() {
14
14
  this.ensureInstance();
15
15
  return this._instance;
16
16
  }
17
+ get currentValue() {
18
+ return this._instance;
19
+ }
17
20
  /** Override me: additional way to make sure instance is valid */
18
- get isValid() { return this.hasValue; }
21
+ get isValid() {
22
+ if (!this.hasValue) {
23
+ return false;
24
+ }
25
+ if (this._expireTracker) {
26
+ if (this._expireTracker.isExpired) {
27
+ this.reset();
28
+ return false;
29
+ }
30
+ }
31
+ return true;
32
+ }
33
+ withDisposer = (disposer) => {
34
+ this._disposer = disposer;
35
+ return this;
36
+ };
37
+ withExpire = (tracker) => {
38
+ this._expireTracker = tracker;
39
+ return this;
40
+ };
19
41
  ensureInstance() {
20
42
  if (this.isValid) {
21
43
  return;
@@ -29,14 +51,17 @@ class Lazy {
29
51
  this.ensureInstance();
30
52
  return this;
31
53
  }
32
- setInstance = (instance) => {
54
+ setInstance(instance) {
33
55
  this._instance = instance;
34
- };
56
+ if (this._instance !== undefined && this._expireTracker) {
57
+ this._expireTracker.restart();
58
+ }
59
+ }
35
60
  reset() {
36
61
  if (this.hasValue && this._instance && this._disposer) {
37
62
  this._disposer(this._instance);
38
63
  }
39
- this.setInstance(null);
64
+ this.setInstance(undefined);
40
65
  }
41
66
  dispose() { this.reset(); }
42
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/lazy/singleton.ts"],"names":[],"mappings":";;;AAGA,MAAa,IAAI;IAKU;IACA;IAJb,SAAS,GAAa,IAAI,CAAC;IAErC,YACuB,QAAmB,EACnB,SAA6B;QAD7B,aAAQ,GAAR,QAAQ,CAAW;QACnB,cAAS,GAAT,SAAS,CAAoB;IAGpD,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;IAElD,IAAI,KAAK;QACL,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,SAAU,CAAC;IAC3B,CAAC;IAED,iEAAiE;IACjE,IAAc,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzC,cAAc;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO;QACX,CAAC;QAED,oEAAoE;QACpE,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO;QACH,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW,GAAG,CAAC,QAAkB,EAAE,EAAE;QACjC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC,CAAC;IAEF,KAAK;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAC9B;AAjDD,oBAiDC"}
1
+ {"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/lazy/singleton.ts"],"names":[],"mappings":";;;AAGA,MAAa,IAAI;IAMkB;IAJrB,SAAS,GAAkB,SAAS,CAAC;IACvC,cAAc,CAA6B;IAC3C,SAAS,CAAqB;IAEtC,YAA+B,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;IAAI,CAAC;IAEvD,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC;IAEvD,IAAI,KAAK;QACL,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,SAAU,CAAC;IAC3B,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,iEAAiE;IACjE,IAAc,OAAO;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,GAAG,CAAC,QAA2B,EAAE,EAAE;QAClD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEK,UAAU,GAAG,CAAC,OAAmC,EAAE,EAAE;QACxD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEM,cAAc;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO;QACX,CAAC;QAED,oEAAoE;QACpE,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO;QACH,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,QAAuB;QAC/B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAE1B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAClC,CAAC;IACL,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAC9B;AA7ED,oBA6EC"}
@@ -0,0 +1,13 @@
1
+ import { IDisposable } from '../functions/disposer';
2
+ import { IResetableModel } from '../models/types';
3
+ export type ILazy<T> = IDisposable & IResetableModel & {
4
+ readonly value: T;
5
+ readonly hasValue: boolean;
6
+ /** should not call the factory or change the value either way */
7
+ readonly currentValue: T | undefined;
8
+ };
9
+ export type ILazyPromise<T> = ILazy<T> & {
10
+ readonly busy: boolean | null;
11
+ readonly promise: Promise<T>;
12
+ };
13
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lazy/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,WAAW,GAAG,eAAe,GAAG;IACnD,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAChC,CAAC"}
package/lazy/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lazy/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "2.3.17",
3
+ "version": "2.3.18",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "private": false,
6
6
  "repository": {
@@ -0,0 +1,14 @@
1
+ export interface IExpireTracker {
2
+ readonly isExpired: boolean;
3
+ restart(): void;
4
+ }
5
+ export declare class ExpireTracker implements IExpireTracker {
6
+ readonly lifetimeMs: number;
7
+ private _expiringAt;
8
+ constructor(lifetimeMs: number);
9
+ get isExpired(): boolean;
10
+ restart(): void;
11
+ get remainingMs(): number;
12
+ expire(): void;
13
+ }
14
+ //# sourceMappingURL=expire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expire.d.ts","sourceRoot":"","sources":["../../src/structures/expire.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,qBAAa,aAAc,YAAW,cAAc;aAGpB,UAAU,EAAE,MAAM;IAF9C,OAAO,CAAC,WAAW,CAAa;gBAEJ,UAAU,EAAE,MAAM;IAE9C,IAAW,SAAS,YAA6C;IAE1D,OAAO;IAId,IAAW,WAAW,WAErB;IAEM,MAAM;CAGhB"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpireTracker = void 0;
4
+ class ExpireTracker {
5
+ lifetimeMs;
6
+ _expiringAt = 0; // already expired
7
+ constructor(lifetimeMs) {
8
+ this.lifetimeMs = lifetimeMs;
9
+ }
10
+ get isExpired() { return Date.now() >= this._expiringAt; }
11
+ restart() {
12
+ this._expiringAt = Date.now() + this.lifetimeMs;
13
+ }
14
+ get remainingMs() {
15
+ return Math.max(0, this._expiringAt - Date.now());
16
+ }
17
+ expire() {
18
+ this._expiringAt = 0;
19
+ }
20
+ }
21
+ exports.ExpireTracker = ExpireTracker;
22
+ //# sourceMappingURL=expire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expire.js","sourceRoot":"","sources":["../../src/structures/expire.ts"],"names":[],"mappings":";;;AAMA,MAAa,aAAa;IAGM;IAFpB,WAAW,GAAW,CAAC,CAAC,CAAC,kBAAkB;IAEnD,YAA4B,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;IAAI,CAAC;IAEnD,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAE1D,OAAO;QACV,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;IACpD,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACzB,CAAC;CACJ;AAlBD,sCAkBC"}
@@ -1,10 +1,30 @@
1
+ import type { ILazy, ILazyPromise } from '../lazy/types';
2
+ import { ExpireTracker } from './expire';
3
+ /**
4
+ * Calls factory fn to fetch and store some value for a limited time.
5
+ *
6
+ * To factory method be called, `current` getter must be accessed.
7
+ */
1
8
  export declare class TempoCache<T> {
2
9
  readonly factory: () => T;
3
- readonly lifetimeMs: number;
4
- private _expiringAt;
5
10
  private _current;
11
+ readonly tracker: ExpireTracker;
6
12
  constructor(factory: () => T, lifetimeMs: number);
7
13
  get isExpired(): boolean;
8
14
  get current(): T | undefined;
9
15
  }
16
+ export declare namespace TempoCache {
17
+ /**
18
+ * Creates a TempoCache instance which caches `ILazy.value` for a specified time.
19
+ *
20
+ * Note a limitation: calling `reset` (or changing the stored value directly in other way) on `lazy` will not affect the value cached by `TempoCache` instance.
21
+ */
22
+ function createFromLazy<T>(lazy: ILazy<T>, lifetimeMs: number): TempoCache<T>;
23
+ /**
24
+ * Creates a TempoCache instance which caches `ILazyPromise.promise` for a specified time.
25
+ *
26
+ * Note a limitation: calling `reset` (or changing the stored value directly in other way) on `lazy` will not affect the value cached by `TempoCache` instance.
27
+ */
28
+ function createFromLazyPromise<T>(lazy: ILazyPromise<T>, lifetimeMs: number): TempoCache<Promise<T>>;
29
+ }
10
30
  //# sourceMappingURL=tempoCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tempoCache.d.ts","sourceRoot":"","sources":["../../src/structures/tempoCache.ts"],"names":[],"mappings":"AACA,qBAAa,UAAU,CAAC,CAAC;IAKT,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM;IAHlE,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAA4B;gBAEvB,OAAO,EAAE,MAAM,CAAC,EAAW,UAAU,EAAE,MAAM;IAElE,IAAW,SAAS,YAA6C;IAEjE,IAAW,OAAO,kBAMjB;CACJ"}
1
+ {"version":3,"file":"tempoCache.d.ts","sourceRoot":"","sources":["../../src/structures/tempoCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;EAIE;AACF,qBAAa,UAAU,CAAC,CAAC;IAMT,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAJrC,OAAO,CAAC,QAAQ,CAA4B;IAE5C,SAAgB,OAAO,EAAE,aAAa,CAAC;gBAElB,OAAO,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM;IAIzD,IAAW,SAAS,YAAqC;IAEzD,IAAW,OAAO,kBAMjB;CACJ;AAGD,yBAAiB,UAAU,CAAC;IAWxB;;;;MAIE;IACF,SAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,iBAGnE;IAED;;;;MAIE;IACF,SAAgB,qBAAqB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,0BAGjF;CACJ"}
@@ -1,23 +1,59 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TempoCache = void 0;
4
+ const expire_1 = require("./expire");
5
+ /**
6
+ * Calls factory fn to fetch and store some value for a limited time.
7
+ *
8
+ * To factory method be called, `current` getter must be accessed.
9
+ */
4
10
  class TempoCache {
5
11
  factory;
6
- lifetimeMs;
7
- _expiringAt = 0; // already expired
8
12
  _current = undefined;
13
+ tracker;
9
14
  constructor(factory, lifetimeMs) {
10
15
  this.factory = factory;
11
- this.lifetimeMs = lifetimeMs;
16
+ this.tracker = new expire_1.ExpireTracker(lifetimeMs);
12
17
  }
13
- get isExpired() { return Date.now() >= this._expiringAt; }
18
+ get isExpired() { return this.tracker.isExpired; }
14
19
  get current() {
15
20
  if (this.isExpired) {
16
21
  this._current = this.factory();
17
- this._expiringAt = Date.now() + this.lifetimeMs;
22
+ this.tracker.restart();
18
23
  }
19
24
  return this._current;
20
25
  }
21
26
  }
22
27
  exports.TempoCache = TempoCache;
28
+ /* istanbul ignore next -- @preserve */
29
+ (function (TempoCache) {
30
+ function createFactory(source, key) {
31
+ return () => {
32
+ // each time factory is called means value is invalidated
33
+ // so we need to reset the lazy
34
+ source.reset();
35
+ return source[key];
36
+ };
37
+ }
38
+ /**
39
+ * Creates a TempoCache instance which caches `ILazy.value` for a specified time.
40
+ *
41
+ * Note a limitation: calling `reset` (or changing the stored value directly in other way) on `lazy` will not affect the value cached by `TempoCache` instance.
42
+ */
43
+ function createFromLazy(lazy, lifetimeMs) {
44
+ const factory = createFactory(lazy, 'value');
45
+ return new TempoCache(factory, lifetimeMs);
46
+ }
47
+ TempoCache.createFromLazy = createFromLazy;
48
+ /**
49
+ * Creates a TempoCache instance which caches `ILazyPromise.promise` for a specified time.
50
+ *
51
+ * Note a limitation: calling `reset` (or changing the stored value directly in other way) on `lazy` will not affect the value cached by `TempoCache` instance.
52
+ */
53
+ function createFromLazyPromise(lazy, lifetimeMs) {
54
+ const factory = createFactory(lazy, 'promise');
55
+ return new TempoCache(factory, lifetimeMs);
56
+ }
57
+ TempoCache.createFromLazyPromise = createFromLazyPromise;
58
+ })(TempoCache || (exports.TempoCache = TempoCache = {}));
23
59
  //# sourceMappingURL=tempoCache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tempoCache.js","sourceRoot":"","sources":["../../src/structures/tempoCache.ts"],"names":[],"mappings":";;;AACA,MAAa,UAAU;IAKE;IAA2B;IAHxC,WAAW,GAAW,CAAC,CAAC,CAAC,kBAAkB;IAC3C,QAAQ,GAAkB,SAAS,CAAC;IAE5C,YAAqB,OAAgB,EAAW,UAAkB;QAA7C,YAAO,GAAP,OAAO,CAAS;QAAW,eAAU,GAAV,UAAU,CAAQ;IAAI,CAAC;IAEvE,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEjE,IAAW,OAAO;QACd,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;CACJ;AAhBD,gCAgBC"}
1
+ {"version":3,"file":"tempoCache.js","sourceRoot":"","sources":["../../src/structures/tempoCache.ts"],"names":[],"mappings":";;;AAEA,qCAAyC;AAEzC;;;;EAIE;AACF,MAAa,UAAU;IAME;IAJb,QAAQ,GAAkB,SAAS,CAAC;IAE5B,OAAO,CAAgB;IAEvC,YAAqB,OAAgB,EAAE,UAAkB;QAApC,YAAO,GAAP,OAAO,CAAS;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,sBAAa,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAEzD,IAAW,OAAO;QACd,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;CACJ;AAnBD,gCAmBC;AAED,uCAAuC;AACvC,WAAiB,UAAU;IAEvB,SAAS,aAAa,CAA+C,MAAS,EAAE,GAAM;QAClF,OAAO,GAAG,EAAE;YACR,yDAAyD;YACzD,+BAA+B;YAC/B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC;IACN,CAAC;IAED;;;;MAIE;IACF,SAAgB,cAAc,CAAI,IAAc,EAAE,UAAkB;QAChE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAHe,yBAAc,iBAG7B,CAAA;IAED;;;;MAIE;IACF,SAAgB,qBAAqB,CAAI,IAAqB,EAAE,UAAkB;QAC9E,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC/C,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAHe,gCAAqB,wBAGpC,CAAA;AACL,CAAC,EA9BgB,UAAU,0BAAV,UAAU,QA8B1B"}
@@ -10,5 +10,6 @@ export type ValidatorsSchema = Record<string, ValidationGenericLike<any>>;
10
10
  export type ValidatorThrowers<T extends ValidatorsSchema> = {
11
11
  [P in (string & keyof T)]: T[P] extends ValidationGenericLike<infer K> ? ValidationThrower<K> : never;
12
12
  };
13
+ export declare function createThrower<T>(schema: ValidationGenericLike<T>): ValidationThrower<T>;
13
14
  export declare function createThrowers<T extends ValidatorsSchema>(validators: T): ValidatorThrowers<T>;
14
15
  //# sourceMappingURL=throwers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"throwers.d.ts","sourceRoot":"","sources":["../../src/validation/throwers.ts"],"names":[],"mappings":"AAEA,0HAA0H;AAC1H,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEtE,yBAAiB,iBAAiB,CAAC;IAC/B,SAAsB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAO5F;CACJ;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1E,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,gBAAgB,IAAI;KACvD,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,qBAAqB,CAAC,MAAM,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,KAAK;CACxG,CAAC;AAEF,wBAAgB,cAAc,CAAC,CAAC,SAAS,gBAAgB,EAAE,UAAU,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAW9F"}
1
+ {"version":3,"file":"throwers.d.ts","sourceRoot":"","sources":["../../src/validation/throwers.ts"],"names":[],"mappings":"AAEA,0HAA0H;AAC1H,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEtE,yBAAiB,iBAAiB,CAAC;IAC/B,SAAsB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAO5F;CACJ;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1E,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,gBAAgB,IAAI;KACvD,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,qBAAqB,CAAC,MAAM,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,KAAK;CACxG,CAAC;AAEF,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAIvF;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,gBAAgB,EAAE,UAAU,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAS9F"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createThrowers = exports.ValidationThrower = void 0;
3
+ exports.createThrowers = exports.createThrower = exports.ValidationThrower = void 0;
4
4
  var ValidationThrower;
5
5
  (function (ValidationThrower) {
6
6
  async function isValid(value, validator) {
@@ -14,13 +14,17 @@ var ValidationThrower;
14
14
  }
15
15
  ValidationThrower.isValid = isValid;
16
16
  })(ValidationThrower || (exports.ValidationThrower = ValidationThrower = {}));
17
+ function createThrower(schema) {
18
+ return async (value) => {
19
+ await schema.validate(value);
20
+ };
21
+ }
22
+ exports.createThrower = createThrower;
17
23
  function createThrowers(validators) {
18
24
  return Object.entries(validators).reduce((acc, [key, validator]) => {
19
25
  const kk = key;
20
26
  if ('validate' in validator) {
21
- acc[kk] = (async (v) => {
22
- await validator.validate(v);
23
- });
27
+ acc[kk] = createThrower(validator);
24
28
  }
25
29
  return acc;
26
30
  }, {});
@@ -1 +1 @@
1
- {"version":3,"file":"throwers.js","sourceRoot":"","sources":["../../src/validation/throwers.ts"],"names":[],"mappings":";;;AAKA,IAAiB,iBAAiB,CASjC;AATD,WAAiB,iBAAiB;IACvB,KAAK,UAAU,OAAO,CAAI,KAAQ,EAAE,SAA+B;QACtE,IAAI,CAAC;YACD,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAPqB,yBAAO,UAO5B,CAAA;AACL,CAAC,EATgB,iBAAiB,iCAAjB,iBAAiB,QASjC;AAYD,SAAgB,cAAc,CAA6B,UAAa;IACpE,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE;QAC/D,MAAM,EAAE,GAAG,GAAyB,CAAC;QACrC,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAM,EAAE,EAAE;gBACxB,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAQ,CAAC;QACd,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,EAA0B,CAAC,CAAC;AACnC,CAAC;AAXD,wCAWC"}
1
+ {"version":3,"file":"throwers.js","sourceRoot":"","sources":["../../src/validation/throwers.ts"],"names":[],"mappings":";;;AAKA,IAAiB,iBAAiB,CASjC;AATD,WAAiB,iBAAiB;IACvB,KAAK,UAAU,OAAO,CAAI,KAAQ,EAAE,SAA+B;QACtE,IAAI,CAAC;YACD,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAPqB,yBAAO,UAO5B,CAAA;AACL,CAAC,EATgB,iBAAiB,iCAAjB,iBAAiB,QASjC;AAYD,SAAgB,aAAa,CAAI,MAAgC;IAC7D,OAAO,KAAK,EAAE,KAAQ,EAAE,EAAE;QACtB,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC;AACN,CAAC;AAJD,sCAIC;AAED,SAAgB,cAAc,CAA6B,UAAa;IACpE,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE;QAC/D,MAAM,EAAE,GAAG,GAAyB,CAAC;QACrC,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,SAAS,CAAoC,CAAC;QAC1E,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,EAA0B,CAAC,CAAC;AACnC,CAAC;AATD,wCASC"}