async-reactivity 2.0.19 → 2.0.20

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/lib/computed.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import Tracker from "./tracker.js";
2
2
  import defaultIsEqual from "./defaultIsEqual.js";
3
+ import { Deferrer } from "./deferrer.js";
4
+ import { debounce } from 'lodash-es';
3
5
  var ComputedState;
4
6
  (function (ComputedState) {
5
7
  ComputedState[ComputedState["Invalid"] = 0] = "Invalid";
@@ -18,11 +20,19 @@ export default class Computed extends Tracker {
18
20
  computePromise;
19
21
  computePromiseActions;
20
22
  lastComputeAttemptPromise;
21
- constructor(getter, isEqual = (defaultIsEqual)) {
23
+ deferrer;
24
+ constructor(getter, isEqual = (defaultIsEqual), timeToLive) {
22
25
  super();
23
26
  this.getter = getter;
24
27
  this.isEqual = isEqual;
25
28
  this.prepareComputePromise();
29
+ if (timeToLive !== undefined) {
30
+ this.deferrer = new Deferrer(debounce(() => {
31
+ if (this.dependents.size === 0) {
32
+ this.reset();
33
+ }
34
+ }, timeToLive));
35
+ }
26
36
  }
27
37
  prepareComputePromise() {
28
38
  this.computePromise = new Promise((resolve, reject) => {
@@ -61,7 +71,7 @@ export default class Computed extends Tracker {
61
71
  }
62
72
  }
63
73
  this.state = ComputedState.Computing;
64
- this.clearDependencies();
74
+ this.clearDependencies(true);
65
75
  const newValue = this.getter(this.trackDependency, this._value);
66
76
  if (this.isEqual(newValue, this._value)) {
67
77
  this.handlePromiseThen(this.lastComputeAttemptPromise, this._value);
@@ -80,9 +90,9 @@ export default class Computed extends Tracker {
80
90
  }
81
91
  return this._value;
82
92
  }
83
- clearDependencies() {
93
+ clearDependencies(compute) {
84
94
  for (const dependency of this.dependencies.keys()) {
85
- dependency.removeDependent(this, this.computePromise);
95
+ dependency.removeDependent(this, compute ? this.computePromise : undefined);
86
96
  }
87
97
  this.dependencies.clear();
88
98
  }
@@ -134,11 +144,18 @@ export default class Computed extends Tracker {
134
144
  dependent.validate(this);
135
145
  }
136
146
  }
137
- dispose() {
138
- this.clearDependencies();
147
+ removeDependent(dependent, promise = Promise.resolve()) {
148
+ super.removeDependent(dependent);
149
+ this.deferrer?.finally(promise);
150
+ }
151
+ reset() {
152
+ this.clearDependencies(false);
139
153
  this.state = ComputedState.Invalid;
140
154
  this._value = undefined;
141
155
  this.lastComputeAttemptPromise = undefined;
142
156
  this.prepareComputePromise();
143
157
  }
158
+ dispose() {
159
+ this.reset();
160
+ }
144
161
  }
@@ -243,7 +243,7 @@ describe('async computed', function () {
243
243
  });
244
244
  assert.rejects(() => a.value);
245
245
  });
246
- it('dispose computed', async function () {
246
+ it('reset computed', async function () {
247
247
  const a = new Ref(5);
248
248
  let gate = 0;
249
249
  const b = new Computed(value => {
@@ -252,8 +252,17 @@ describe('async computed', function () {
252
252
  });
253
253
  b.value;
254
254
  assert.strictEqual(gate, 1);
255
- b.dispose();
255
+ b.reset();
256
256
  b.value;
257
257
  assert.strictEqual(gate, 2);
258
258
  });
259
+ it('auto reset', async function () {
260
+ const a = new Computed(() => true, undefined, 0);
261
+ const b = new Computed(value => value(a));
262
+ assert.strictEqual(b.value, true);
263
+ b.dispose();
264
+ await new Promise(resolve => setTimeout(resolve, 10));
265
+ // @ts-expect-error
266
+ assert.strictEqual(a._value, undefined);
267
+ });
259
268
  });
@@ -0,0 +1,17 @@
1
+ export class Deferrer {
2
+ callback;
3
+ lastPromise;
4
+ constructor(callback) {
5
+ this.callback = callback;
6
+ }
7
+ finally(promise) {
8
+ const currentPromise = Promise.all([this.lastPromise, promise])
9
+ .finally(() => {
10
+ if (this.lastPromise === currentPromise) {
11
+ this.lastPromise = undefined;
12
+ this.callback();
13
+ }
14
+ });
15
+ this.lastPromise = currentPromise;
16
+ }
17
+ }
package/lib/listener.js CHANGED
@@ -1,14 +1,21 @@
1
1
  import Ref from "./ref.js";
2
2
  import defaultIsEqual from "./defaultIsEqual.js";
3
+ import { Deferrer } from "./deferrer.js";
3
4
  export default class Listener extends Ref {
4
5
  start;
5
6
  stop;
6
7
  listening = false;
7
- lastPromise;
8
+ deferrer;
8
9
  constructor(_value, start, stop, isEqual = (defaultIsEqual)) {
9
10
  super(_value, isEqual);
10
11
  this.start = start;
11
12
  this.stop = stop;
13
+ this.deferrer = new Deferrer(() => {
14
+ if (this.dependents.size === 0) {
15
+ this.listening = false;
16
+ this.stop();
17
+ }
18
+ });
12
19
  }
13
20
  addDependent(dependent) {
14
21
  super.addDependent(dependent);
@@ -19,14 +26,6 @@ export default class Listener extends Ref {
19
26
  }
20
27
  removeDependent(dependent, promise = Promise.resolve()) {
21
28
  super.removeDependent(dependent);
22
- const currentPromise = Promise.all([promise, this.lastPromise]).finally(() => {
23
- if (this.lastPromise === currentPromise) {
24
- if (this.dependents.size === 0) {
25
- this.listening = false;
26
- this.stop();
27
- }
28
- }
29
- });
30
- this.lastPromise = currentPromise;
29
+ this.deferrer.finally(promise);
31
30
  }
32
31
  }
@@ -82,17 +82,17 @@ describe('listener', function () {
82
82
  }, () => { });
83
83
  const a = new Ref(5);
84
84
  const b = new Computed(async (value) => {
85
- await new Promise(resolve => setTimeout(resolve, 50));
85
+ await new Promise(resolve => setTimeout(resolve, 10));
86
86
  return value(a) + value(listener);
87
87
  });
88
88
  const c = new Watcher(listener, () => { });
89
89
  b.value;
90
- await new Promise(resolve => setTimeout(resolve, 100));
90
+ await new Promise(resolve => setTimeout(resolve, 20));
91
91
  assert.strictEqual(gate, 1);
92
92
  a.value = 6;
93
93
  b.value;
94
94
  c.dispose();
95
- await new Promise(resolve => setTimeout(resolve, 100));
95
+ await new Promise(resolve => setTimeout(resolve, 20));
96
96
  assert.strictEqual(gate, 1);
97
97
  });
98
98
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "async-reactivity",
3
- "version": "2.0.19",
3
+ "version": "2.0.20",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "types/index.d.ts",
@@ -22,9 +22,13 @@
22
22
  "author": "Donatas Lučiūnas",
23
23
  "license": "ISC",
24
24
  "devDependencies": {
25
+ "@types/lodash-es": "^4.17.12",
25
26
  "@types/mocha": "^10.0.8",
26
27
  "@types/node": "^22.13.11",
27
28
  "mocha": "^10.7.3",
28
29
  "typescript": "^5.8.2"
30
+ },
31
+ "dependencies": {
32
+ "lodash-es": "^4.17.21"
29
33
  }
30
34
  }
@@ -280,7 +280,7 @@ describe('async computed', function () {
280
280
  assert.rejects(() => a.value);
281
281
  });
282
282
 
283
- it('dispose computed', async function () {
283
+ it('reset computed', async function () {
284
284
  const a = new Ref(5);
285
285
  let gate = 0;
286
286
  const b = new Computed(value => {
@@ -289,8 +289,22 @@ describe('async computed', function () {
289
289
  });
290
290
  b.value;
291
291
  assert.strictEqual(gate, 1);
292
- b.dispose();
292
+ b.reset();
293
293
  b.value;
294
294
  assert.strictEqual(gate, 2);
295
295
  });
296
+
297
+ it('auto reset', async function() {
298
+ const a = new Computed(() => true, undefined, 0);
299
+ const b = new Computed(value => value(a));
300
+
301
+ assert.strictEqual(b.value, true);
302
+
303
+ b.dispose();
304
+
305
+ await new Promise(resolve => setTimeout(resolve, 10));
306
+
307
+ // @ts-expect-error
308
+ assert.strictEqual(a._value, undefined);
309
+ });
296
310
  });
package/src/computed.ts CHANGED
@@ -2,6 +2,8 @@ import Dependency from "./dependency.js";
2
2
  import Dependent from "./dependent.js";
3
3
  import Tracker from "./tracker.js";
4
4
  import defaultIsEqual from "./defaultIsEqual.js";
5
+ import { Deferrer } from "./deferrer.js";
6
+ import { debounce } from 'lodash-es';
5
7
 
6
8
  export declare type TrackValue = <T>(dependency: Dependency<T>) => T;
7
9
  export declare type ComputeFunc<T> = (value: TrackValue, previousValue?: T) => T;
@@ -24,12 +26,21 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
24
26
  private computePromise?: Promise<any>;
25
27
  private computePromiseActions?: { resolve: Function, reject: Function };
26
28
  private lastComputeAttemptPromise?: Promise<void>;
29
+ private deferrer?: Deferrer;
27
30
 
28
- constructor(getter: ComputeFunc<T>, isEqual = defaultIsEqual<TBase>) {
31
+ constructor(getter: ComputeFunc<T>, isEqual = defaultIsEqual<TBase>, timeToLive?: number) {
29
32
  super();
30
33
  this.getter = getter;
31
34
  this.isEqual = isEqual;
32
35
  this.prepareComputePromise();
36
+
37
+ if (timeToLive !== undefined) {
38
+ this.deferrer = new Deferrer(debounce(() => {
39
+ if (this.dependents.size === 0) {
40
+ this.reset();
41
+ }
42
+ }, timeToLive));
43
+ }
33
44
  }
34
45
 
35
46
  private prepareComputePromise() {
@@ -72,7 +83,7 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
72
83
  }
73
84
 
74
85
  this.state = ComputedState.Computing;
75
- this.clearDependencies();
86
+ this.clearDependencies(true);
76
87
 
77
88
  const newValue: T = this.getter(this.trackDependency, this._value);
78
89
  if (this.isEqual(newValue, this._value!)) {
@@ -91,9 +102,9 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
91
102
  return this._value!;
92
103
  }
93
104
 
94
- private clearDependencies() {
105
+ private clearDependencies(compute: boolean) {
95
106
  for (const dependency of this.dependencies.keys()) {
96
- dependency.removeDependent(this, this.computePromise);
107
+ dependency.removeDependent(this, compute ? this.computePromise : undefined);
97
108
  }
98
109
  this.dependencies.clear();
99
110
  }
@@ -154,11 +165,20 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
154
165
  }
155
166
  }
156
167
 
157
- public dispose() {
158
- this.clearDependencies();
168
+ public removeDependent(dependent: Dependent, promise = Promise.resolve()): void {
169
+ super.removeDependent(dependent);
170
+ this.deferrer?.finally(promise);
171
+ }
172
+
173
+ public reset() {
174
+ this.clearDependencies(false);
159
175
  this.state = ComputedState.Invalid;
160
176
  this._value = undefined;
161
177
  this.lastComputeAttemptPromise = undefined;
162
178
  this.prepareComputePromise();
163
179
  }
180
+
181
+ public dispose() {
182
+ this.reset();
183
+ }
164
184
  }
@@ -0,0 +1,16 @@
1
+ export class Deferrer {
2
+ private lastPromise?: Promise<any>;
3
+
4
+ constructor(private readonly callback: Function) { }
5
+
6
+ finally(promise: Promise<any>) {
7
+ const currentPromise = Promise.all([this.lastPromise, promise])
8
+ .finally(() => {
9
+ if (this.lastPromise === currentPromise) {
10
+ this.lastPromise = undefined;
11
+ this.callback();
12
+ }
13
+ });
14
+ this.lastPromise = currentPromise;
15
+ }
16
+ }
@@ -134,20 +134,20 @@ describe('listener', function () {
134
134
  const a = new Ref(5);
135
135
 
136
136
  const b = new Computed(async value => {
137
- await new Promise(resolve => setTimeout(resolve, 50));
137
+ await new Promise(resolve => setTimeout(resolve, 10));
138
138
  return value(a) + value(listener);
139
139
  });
140
140
 
141
141
  const c = new Watcher(listener, () => {});
142
142
 
143
143
  b.value;
144
- await new Promise(resolve => setTimeout(resolve, 100));
144
+ await new Promise(resolve => setTimeout(resolve, 20));
145
145
  assert.strictEqual(gate, 1);
146
146
 
147
147
  a.value = 6;
148
148
  b.value;
149
149
  c.dispose();
150
- await new Promise(resolve => setTimeout(resolve, 100));
150
+ await new Promise(resolve => setTimeout(resolve, 20));
151
151
  assert.strictEqual(gate, 1);
152
152
  });
153
153
  });
package/src/listener.ts CHANGED
@@ -1,18 +1,26 @@
1
1
  import Dependent from "./dependent.js";
2
2
  import Ref from "./ref.js";
3
3
  import defaultIsEqual from "./defaultIsEqual.js";
4
+ import { Deferrer } from "./deferrer.js";
4
5
 
5
6
  export default class Listener<T extends TBase, TBase = T> extends Ref<T> {
6
7
  private start: () => void;
7
8
  private stop: () => void;
8
9
  private listening = false;
9
- private lastPromise: Promise<any> | undefined;
10
+ private deferrer: Deferrer;
10
11
 
11
12
  constructor(_value: T, start: () => void, stop: () => void, isEqual = defaultIsEqual<TBase>) {
12
13
  super(_value, isEqual);
13
14
 
14
15
  this.start = start;
15
16
  this.stop = stop;
17
+
18
+ this.deferrer = new Deferrer(() => {
19
+ if (this.dependents.size === 0) {
20
+ this.listening = false;
21
+ this.stop();
22
+ }
23
+ });
16
24
  }
17
25
 
18
26
  public addDependent(dependent: Dependent): void {
@@ -25,15 +33,6 @@ export default class Listener<T extends TBase, TBase = T> extends Ref<T> {
25
33
 
26
34
  public removeDependent(dependent: Dependent, promise = Promise.resolve()): void {
27
35
  super.removeDependent(dependent);
28
-
29
- const currentPromise = Promise.all([promise, this.lastPromise]).finally(() => {
30
- if (this.lastPromise === currentPromise) {
31
- if (this.dependents.size === 0) {
32
- this.listening = false;
33
- this.stop();
34
- }
35
- }
36
- });
37
- this.lastPromise = currentPromise;
36
+ this.deferrer.finally(promise);
38
37
  }
39
38
  }
@@ -13,7 +13,8 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
13
13
  private computePromise?;
14
14
  private computePromiseActions?;
15
15
  private lastComputeAttemptPromise?;
16
- constructor(getter: ComputeFunc<T>, isEqual?: (v1: TBase, v2: TBase) => boolean);
16
+ private deferrer?;
17
+ constructor(getter: ComputeFunc<T>, isEqual?: (v1: TBase, v2: TBase) => boolean, timeToLive?: number);
17
18
  private prepareComputePromise;
18
19
  get value(): T;
19
20
  private compute;
@@ -27,6 +28,8 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
27
28
  forceInvalidate(): void;
28
29
  validate(dependency: Dependency<any>): void;
29
30
  private validateDependents;
31
+ removeDependent(dependent: Dependent, promise?: Promise<void>): void;
32
+ reset(): void;
30
33
  dispose(): void;
31
34
  }
32
35
  //# sourceMappingURL=computed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../src/computed.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACrE,MAAM,CAAC,OAAO,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACjF,MAAM,CAAC,OAAO,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;AAWzG,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,GAAG,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAE,YAAW,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5G,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,cAAc,CAAC,CAAe;IACtC,OAAO,CAAC,qBAAqB,CAAC,CAA0C;IACxE,OAAO,CAAC,yBAAyB,CAAC,CAAgB;gBAEtC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,oCAAwB;IAOnE,OAAO,CAAC,qBAAqB;IAS7B,IAAW,KAAK,IAAI,CAAC,CAMpB;IAED,OAAO,CAAC,OAAO;IA0Cf,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,eAAe,CAAwC;IAE/D,OAAO,CAAC,iBAAiB;IAMlB,UAAU;IAUV,eAAe;IAKf,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC;IAI3C,OAAO,CAAC,kBAAkB;IAMnB,OAAO;CAOjB"}
1
+ {"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../src/computed.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAIjD,MAAM,CAAC,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACrE,MAAM,CAAC,OAAO,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACjF,MAAM,CAAC,OAAO,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;AAWzG,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,GAAG,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAE,YAAW,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5G,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,cAAc,CAAC,CAAe;IACtC,OAAO,CAAC,qBAAqB,CAAC,CAA0C;IACxE,OAAO,CAAC,yBAAyB,CAAC,CAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAW;gBAEhB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,oCAAwB,EAAE,UAAU,CAAC,EAAE,MAAM;IAexF,OAAO,CAAC,qBAAqB;IAS7B,IAAW,KAAK,IAAI,CAAC,CAMpB;IAED,OAAO,CAAC,OAAO;IA0Cf,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,eAAe,CAAwC;IAE/D,OAAO,CAAC,iBAAiB;IAMlB,UAAU;IAUV,eAAe;IAKf,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC;IAI3C,OAAO,CAAC,kBAAkB;IAMnB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,gBAAoB,GAAG,IAAI;IAKxE,KAAK;IAQL,OAAO;CAGjB"}
@@ -0,0 +1,7 @@
1
+ export declare class Deferrer {
2
+ private readonly callback;
3
+ private lastPromise?;
4
+ constructor(callback: Function);
5
+ finally(promise: Promise<any>): void;
6
+ }
7
+ //# sourceMappingURL=deferrer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferrer.d.ts","sourceRoot":"","sources":["../src/deferrer.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ;IAGL,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,WAAW,CAAC,CAAe;gBAEN,QAAQ,EAAE,QAAQ;IAE/C,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;CAUhC"}
@@ -4,7 +4,7 @@ export default class Listener<T extends TBase, TBase = T> extends Ref<T> {
4
4
  private start;
5
5
  private stop;
6
6
  private listening;
7
- private lastPromise;
7
+ private deferrer;
8
8
  constructor(_value: T, start: () => void, stop: () => void, isEqual?: (v1: TBase, v2: TBase) => boolean);
9
9
  addDependent(dependent: Dependent): void;
10
10
  removeDependent(dependent: Dependent, promise?: Promise<void>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,GAAG,MAAM,UAAU,CAAC;AAG3B,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,GAAG,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAA2B;gBAElC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,OAAO,oCAAwB;IAOpF,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAQxC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,gBAAoB,GAAG,IAAI;CAalF"}
1
+ {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,GAAG,MAAM,UAAU,CAAC;AAI3B,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,GAAG,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAW;gBAEf,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,OAAO,oCAAwB;IAcpF,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAQxC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,gBAAoB,GAAG,IAAI;CAIlF"}
package/lib/isEqual.js DELETED
@@ -1 +0,0 @@
1
- export default (v1, v2) => v1 === v2;
@@ -1,22 +0,0 @@
1
- import Listener from "./listener.js";
2
- export default class AsyncListener extends Listener {
3
- promiseResolve;
4
- constructor(start, stop) {
5
- let promiseResolve;
6
- super(new Promise(resolve => {
7
- promiseResolve = resolve;
8
- }), start, stop);
9
- this.promiseResolve = promiseResolve;
10
- }
11
- set value(_value) {
12
- if (this.promiseResolve) {
13
- _value.then(this.promiseResolve);
14
- this.promiseResolve = undefined;
15
- this._value = _value; // prevent invalidate
16
- }
17
- super.value = _value;
18
- }
19
- get value() {
20
- return super.value;
21
- }
22
- }
@@ -1,2 +0,0 @@
1
- import 'mocha';
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC"}
@@ -1,3 +0,0 @@
1
- declare const _default: <T>(v1?: T, v2?: T) => boolean;
2
- export default _default;
3
- //# sourceMappingURL=isEqual.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isEqual.d.ts","sourceRoot":"","sources":["../src/isEqual.ts"],"names":[],"mappings":"yBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;AAAjC,wBAAgD"}
@@ -1,8 +0,0 @@
1
- import Listener from "./listener.js";
2
- export default class AsyncListener<T> extends Listener<Promise<T>> {
3
- private promiseResolve?;
4
- constructor(start: () => void, stop: () => void);
5
- set value(_value: Promise<T>);
6
- get value(): Promise<T>;
7
- }
8
- //# sourceMappingURL=syncListener.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"syncListener.d.ts","sourceRoot":"","sources":["../src/syncListener.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,aAAa,CAAC,CAAC,CAAE,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,cAAc,CAAC,CAAqB;gBAEhC,KAAK,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI;IAQ/C,IAAW,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAOlC;IAED,IAAW,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAE7B;CACJ"}