async-reactivity 2.0.16 → 2.0.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/lib/listener.js CHANGED
@@ -18,9 +18,11 @@ export default class Listener extends Ref {
18
18
  }
19
19
  removeDependent(dependent) {
20
20
  super.removeDependent(dependent);
21
- if (this.dependents.size === 0) {
22
- this.listening = false;
23
- this.stop();
24
- }
21
+ Promise.resolve().then(() => {
22
+ if (this.dependents.size === 0) {
23
+ this.listening = false;
24
+ this.stop();
25
+ }
26
+ });
25
27
  }
26
28
  }
@@ -1,7 +1,7 @@
1
1
  import 'mocha';
2
2
  import assert from 'assert';
3
3
  import { mock } from 'node:test';
4
- import { Watcher, Listener } from './index.js';
4
+ import { Watcher, Listener, Computed, Ref } from './index.js';
5
5
  describe('listener', function () {
6
6
  it('wait for dependent', function () {
7
7
  assert.doesNotThrow(() => {
@@ -62,4 +62,17 @@ describe('listener', function () {
62
62
  await new Promise((resolve) => setTimeout(resolve, 15));
63
63
  assert.strictEqual(onChange.mock.callCount(), 3);
64
64
  });
65
+ it('keep listening when recomputing', async function () {
66
+ let gate = 0;
67
+ const listener = new Listener(1, () => {
68
+ gate++;
69
+ }, () => { });
70
+ const a = new Ref(5);
71
+ const b = new Computed(value => value(a) + value(listener));
72
+ b.value;
73
+ assert.strictEqual(gate, 1);
74
+ a.value = 6;
75
+ b.value;
76
+ assert.strictEqual(gate, 1);
77
+ });
65
78
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "async-reactivity",
3
- "version": "2.0.16",
3
+ "version": "2.0.17",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "types/index.d.ts",
@@ -1,7 +1,7 @@
1
1
  import 'mocha';
2
2
  import assert from 'assert';
3
3
  import { mock } from 'node:test';
4
- import { Watcher, Listener } from './index.js';
4
+ import { Watcher, Listener, Computed, Ref } from './index.js';
5
5
 
6
6
  describe('listener', function () {
7
7
  it('wait for dependent', function () {
@@ -98,4 +98,26 @@ describe('listener', function () {
98
98
 
99
99
  assert.strictEqual(onChange.mock.callCount(), 3);
100
100
  });
101
+
102
+ it('keep listening when recomputing', async function() {
103
+ let gate = 0;
104
+ const listener = new Listener(
105
+ 1,
106
+ () => {
107
+ gate++;
108
+ },
109
+ () => {}
110
+ );
111
+
112
+ const a = new Ref(5);
113
+
114
+ const b = new Computed(value => value(a) + value(listener));
115
+
116
+ b.value;
117
+ assert.strictEqual(gate, 1);
118
+
119
+ a.value = 6;
120
+ b.value;
121
+ assert.strictEqual(gate, 1);
122
+ });
101
123
  });
package/src/listener.ts CHANGED
@@ -24,9 +24,11 @@ export default class Listener<T extends TBase, TBase = T> extends Ref<T> {
24
24
 
25
25
  public removeDependent(dependent: Dependent): void {
26
26
  super.removeDependent(dependent);
27
- if (this.dependents.size === 0) {
28
- this.listening = false;
29
- this.stop();
30
- }
27
+ Promise.resolve().then(() => {
28
+ if (this.dependents.size === 0) {
29
+ this.listening = false;
30
+ this.stop();
31
+ }
32
+ })
31
33
  }
32
34
  }
@@ -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;gBAEd,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,GAAG,IAAI;CAOrD"}
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;gBAEd,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,GAAG,IAAI;CASrD"}