async-reactivity 2.2.1 → 2.2.2

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
@@ -29,23 +29,27 @@ export default class Computed extends Effect {
29
29
  if (this.state === EffectState.Initial || this.state === EffectState.Scheduled) {
30
30
  this.oldValue = this._value;
31
31
  const newValue = this.run();
32
- if (newValue === InSyncSymbol) {
33
- this.validateDependents();
32
+ if (newValue instanceof Promise) {
33
+ // @ts-expect-error
34
+ this._value = Promise.all([newValue, this.oldValue])
35
+ .then(([newValue, oldValue]) => {
36
+ if (newValue === InSyncSymbol) {
37
+ this.validateDependents();
38
+ return oldValue;
39
+ }
40
+ if (this.dependents.size > 0 && this.isEqual(newValue, oldValue)) {
41
+ this.validateDependents();
42
+ }
43
+ return newValue;
44
+ }).finally(() => {
45
+ if (this.state === EffectState.Waiting) {
46
+ this.oldValue = undefined;
47
+ }
48
+ });
34
49
  }
35
50
  else {
36
- if (newValue instanceof Promise) {
37
- // @ts-expect-error
38
- this._value = Promise.all([newValue, this.oldValue])
39
- .then(([newValue, oldValue]) => {
40
- if (newValue === InSyncSymbol) {
41
- this.validateDependents();
42
- return oldValue;
43
- }
44
- if (this.dependents.size > 0 && this.isEqual(newValue, oldValue)) {
45
- this.validateDependents();
46
- }
47
- return newValue;
48
- });
51
+ if (newValue === InSyncSymbol) {
52
+ this.validateDependents();
49
53
  }
50
54
  else {
51
55
  this._value = newValue;
@@ -53,6 +57,7 @@ export default class Computed extends Effect {
53
57
  this.validateDependents();
54
58
  }
55
59
  }
60
+ this.oldValue = undefined;
56
61
  }
57
62
  }
58
63
  return this._value;
package/lib/tracker.js ADDED
@@ -0,0 +1,18 @@
1
+ export default class Tracker {
2
+ dependents = new Set();
3
+ _value;
4
+ addDependent(dependent) {
5
+ this.dependents.add(dependent);
6
+ }
7
+ removeDependent(dependent) {
8
+ this.dependents.delete(dependent);
9
+ }
10
+ invalidate() {
11
+ for (const dependent of [...this.dependents.keys()]) {
12
+ dependent.invalidate(this);
13
+ }
14
+ }
15
+ get value() {
16
+ return this._value;
17
+ }
18
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "async-reactivity",
3
- "version": "2.2.1",
3
+ "version": "2.2.2",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "types/index.d.ts",
package/src/computed.ts CHANGED
@@ -41,28 +41,33 @@ export default class Computed<T> extends Effect implements Dependent, Dependency
41
41
  if (this.state === EffectState.Initial || this.state === EffectState.Scheduled) {
42
42
  this.oldValue = this._value!;
43
43
  const newValue = this.run() as T;
44
- if (newValue === InSyncSymbol) {
45
- this.validateDependents();
44
+ if (newValue instanceof Promise) {
45
+ // @ts-expect-error
46
+ this._value = Promise.all([newValue, this.oldValue])
47
+ .then(([newValue, oldValue]) => {
48
+ if (newValue === InSyncSymbol) {
49
+ this.validateDependents();
50
+ return oldValue;
51
+ }
52
+ if (this.dependents.size > 0 && this.isEqual(newValue, oldValue)) {
53
+ this.validateDependents();
54
+ }
55
+ return newValue;
56
+ }).finally(() => {
57
+ if (this.state === EffectState.Waiting) {
58
+ this.oldValue = undefined;
59
+ }
60
+ });
46
61
  } else {
47
- if (newValue instanceof Promise) {
48
- // @ts-expect-error
49
- this._value = Promise.all([newValue, this.oldValue])
50
- .then(([newValue, oldValue]) => {
51
- if (newValue === InSyncSymbol) {
52
- this.validateDependents();
53
- return oldValue;
54
- }
55
- if (this.dependents.size > 0 && this.isEqual(newValue, oldValue)) {
56
- this.validateDependents();
57
- }
58
- return newValue;
59
- });
62
+ if (newValue === InSyncSymbol) {
63
+ this.validateDependents();
60
64
  } else {
61
65
  this._value = newValue;
62
66
  if (this.dependents.size > 0 && this.isEqual(newValue, this.oldValue)) {
63
67
  this.validateDependents();
64
68
  }
65
69
  }
70
+ this.oldValue = undefined;
66
71
  }
67
72
  }
68
73
 
@@ -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,cAAc,MAAM,qBAAqB,CAAC;AAGjD,OAAO,MAAqC,MAAM,aAAa,CAAC;AAEhE,MAAM,CAAC,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;AACvI,MAAM,CAAC,OAAO,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,GAAG,SAAS,EAAE,WAAW,EAAE,WAAW,KAAK,CAAC,CAAC;AACtH,MAAM,CAAC,OAAO,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,WAAW,KAAK,EAAE,CAAC;AAI9I,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,CAAE,SAAQ,MAAO,YAAW,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,QAAQ,CAAC,CAAI;IACrB,OAAO,CAAC,MAAM,CAAC,CAAI;IACnB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAW;gBAEhB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,4BAAoB,EAAE,UAAU,CAAC,EAAE,MAAM;IAkBpF,IAAW,KAAK,IAAI,CAAC,CA8BpB;IAED,OAAO,CAAC,kBAAkB;IAMnB,YAAY,CAAC,SAAS,EAAE,SAAS;IAOjC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,gBAAoB,GAAG,IAAI;IAKxE,UAAU,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC;IAW3C,eAAe;IAaf,KAAK;IAKL,OAAO;CAGjB"}
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,cAAc,MAAM,qBAAqB,CAAC;AAGjD,OAAO,MAAqC,MAAM,aAAa,CAAC;AAEhE,MAAM,CAAC,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;AACvI,MAAM,CAAC,OAAO,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,GAAG,SAAS,EAAE,WAAW,EAAE,WAAW,KAAK,CAAC,CAAC;AACtH,MAAM,CAAC,OAAO,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,WAAW,KAAK,EAAE,CAAC;AAI9I,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,CAAE,SAAQ,MAAO,YAAW,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,QAAQ,CAAC,CAAI;IACrB,OAAO,CAAC,MAAM,CAAC,CAAI;IACnB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAW;gBAEhB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,4BAAoB,EAAE,UAAU,CAAC,EAAE,MAAM;IAkBpF,IAAW,KAAK,IAAI,CAAC,CAmCpB;IAED,OAAO,CAAC,kBAAkB;IAMnB,YAAY,CAAC,SAAS,EAAE,SAAS;IAOjC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,gBAAoB,GAAG,IAAI;IAKxE,UAAU,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC;IAW3C,eAAe;IAaf,KAAK;IAKL,OAAO;CAGjB"}
@@ -0,0 +1,10 @@
1
+ import Dependent from "./dependent.js";
2
+ export default class Tracker<T> {
3
+ protected dependents: Set<Dependent>;
4
+ protected _value?: T;
5
+ addDependent(dependent: Dependent): void;
6
+ removeDependent(dependent: Dependent): void;
7
+ invalidate(): void;
8
+ get value(): T | undefined;
9
+ }
10
+ //# sourceMappingURL=tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,OAAO,CAAC,CAAC;IAC1B,SAAS,CAAC,UAAU,iBAAwB;IAC5C,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEd,YAAY,CAAC,SAAS,EAAE,SAAS;IAIjC,eAAe,CAAC,SAAS,EAAE,SAAS;IAIpC,UAAU,IAAI,IAAI;IAMzB,IAAW,KAAK,kBAEf;CACJ"}