async-reactivity 2.0.5 → 2.0.7

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,4 +1,5 @@
1
1
  import Tracker from "./tracker.js";
2
+ import defaultIsEqual from "./defaultIsEqual.js";
2
3
  var ComputedState;
3
4
  (function (ComputedState) {
4
5
  ComputedState[ComputedState["Invalid"] = 0] = "Invalid";
@@ -11,14 +12,16 @@ class CircularDependencyError extends Error {
11
12
  }
12
13
  export default class Computed extends Tracker {
13
14
  getter;
15
+ isEqual;
14
16
  state = ComputedState.Invalid;
15
17
  dependencies = new Map();
16
18
  computePromise;
17
19
  computePromiseActions;
18
20
  lastComputeAttemptPromise;
19
- constructor(getter) {
21
+ constructor(getter, isEqual = (defaultIsEqual)) {
20
22
  super();
21
23
  this.getter = getter;
24
+ this.isEqual = isEqual;
22
25
  this.prepareComputePromise();
23
26
  }
24
27
  prepareComputePromise() {
@@ -70,7 +73,7 @@ export default class Computed extends Tracker {
70
73
  }
71
74
  else {
72
75
  this.handlePromiseThen(this.lastComputeAttemptPromise, this._value);
73
- if (lastValue === this._value) {
76
+ if (this.isEqual(lastValue, this._value)) {
74
77
  this.validateDependents();
75
78
  }
76
79
  }
@@ -118,6 +121,10 @@ export default class Computed extends Tracker {
118
121
  super.invalidate();
119
122
  }
120
123
  }
124
+ forceInvalidate() {
125
+ this.invalidate();
126
+ this.state = ComputedState.Invalid;
127
+ }
121
128
  validate(dependency) {
122
129
  this.dependencies.set(dependency, false);
123
130
  }
@@ -114,6 +114,22 @@ describe('computed', function () {
114
114
  assert.strictEqual(c.value, 6);
115
115
  assert.strictEqual(gate, 1);
116
116
  });
117
+ it('compute when forced', function () {
118
+ let gate = 0;
119
+ const a = new Ref(5);
120
+ const b = new Computed((value) => {
121
+ return value(a) % 2;
122
+ });
123
+ const c = new Computed((value) => {
124
+ gate++;
125
+ return value(b) + 5;
126
+ });
127
+ assert.strictEqual(c.value, 6);
128
+ assert.strictEqual(gate, 1);
129
+ c.forceInvalidate();
130
+ assert.strictEqual(c.value, 6);
131
+ assert.strictEqual(gate, 2);
132
+ });
117
133
  });
118
134
  describe('async computed', function () {
119
135
  it('getter', async function () {
@@ -0,0 +1 @@
1
+ export default (v1, v2) => v1 === v2;
package/lib/isEqual.js ADDED
@@ -0,0 +1 @@
1
+ export default (v1, v2) => v1 === v2;
package/lib/ref.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import Tracker from "./tracker.js";
2
- const defaultIsEqual = (v1, v2) => v1 === v2;
2
+ import defaultIsEqual from "./defaultIsEqual.js";
3
3
  export default class Ref extends Tracker {
4
4
  isEqual;
5
5
  constructor(_value, isEqual = (defaultIsEqual)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "async-reactivity",
3
- "version": "2.0.5",
3
+ "version": "2.0.7",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "types/index.d.ts",
@@ -133,6 +133,25 @@ describe('computed', function () {
133
133
  assert.strictEqual(c.value, 6);
134
134
  assert.strictEqual(gate, 1);
135
135
  });
136
+
137
+ it('compute when forced', function () {
138
+ let gate = 0;
139
+ const a = new Ref(5);
140
+ const b = new Computed((value) => {
141
+ return value(a) % 2;
142
+ });
143
+ const c = new Computed((value) => {
144
+ gate++;
145
+ return value(b) + 5;
146
+ });
147
+
148
+ assert.strictEqual(c.value, 6);
149
+ assert.strictEqual(gate, 1);
150
+
151
+ c.forceInvalidate();
152
+ assert.strictEqual(c.value, 6);
153
+ assert.strictEqual(gate, 2);
154
+ });
136
155
  });
137
156
 
138
157
  describe('async computed', function () {
package/src/computed.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import Dependency from "./dependency.js";
2
2
  import Dependent from "./dependent.js";
3
- import Ref from "./ref.js";
4
3
  import Tracker from "./tracker.js";
4
+ import defaultIsEqual from "./defaultIsEqual.js";
5
5
 
6
6
  declare type TrackValue = <T>(dependency: Dependency<T>) => T;
7
7
  export declare type ComputeFunc<T> = (value: TrackValue) => T;
@@ -18,15 +18,17 @@ class CircularDependencyError extends Error { }
18
18
 
19
19
  export default class Computed<T> extends Tracker<T> implements Dependent, Dependency<T> {
20
20
  getter: ComputeFunc<T>;
21
+ isEqual: typeof defaultIsEqual<T>;
21
22
  private state = ComputedState.Invalid;
22
23
  private dependencies = new Map<Dependency<any>, boolean>();
23
24
  private computePromise?: T;
24
25
  private computePromiseActions?: { resolve: Function, reject: Function };
25
26
  private lastComputeAttemptPromise?: Promise<void>;
26
27
 
27
- constructor(getter: ComputeFunc<T>) {
28
+ constructor(getter: ComputeFunc<T>, isEqual = defaultIsEqual<T>) {
28
29
  super();
29
30
  this.getter = getter;
31
+ this.isEqual = isEqual;
30
32
  this.prepareComputePromise();
31
33
  }
32
34
 
@@ -82,7 +84,7 @@ export default class Computed<T> extends Tracker<T> implements Dependent, Depend
82
84
  this._value = this.computePromise!;
83
85
  } else {
84
86
  this.handlePromiseThen(this.lastComputeAttemptPromise!, this._value);
85
- if (lastValue === this._value) {
87
+ if (this.isEqual(lastValue, this._value)) {
86
88
  this.validateDependents();
87
89
  }
88
90
  }
@@ -137,6 +139,11 @@ export default class Computed<T> extends Tracker<T> implements Dependent, Depend
137
139
  }
138
140
  }
139
141
 
142
+ public forceInvalidate() {
143
+ this.invalidate();
144
+ this.state = ComputedState.Invalid;
145
+ }
146
+
140
147
  public validate(dependency: Dependency<any>) {
141
148
  this.dependencies.set(dependency, false);
142
149
  }
@@ -0,0 +1 @@
1
+ export default <T>(v1?: T, v2?: T) => v1 === v2;
package/src/ref.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  import Dependency from "./dependency.js";
2
2
  import Tracker from "./tracker.js";
3
-
4
- const defaultIsEqual = <T>(v1?: T, v2?: T) => v1 === v2;
3
+ import defaultIsEqual from "./defaultIsEqual.js";
5
4
 
6
5
  export default class Ref<T> extends Tracker<T> implements Dependency<T> {
7
- private isEqual: (a?: T, b?: T) => boolean;
6
+ private isEqual: typeof defaultIsEqual<T>;
8
7
 
9
8
  constructor(_value: T, isEqual = defaultIsEqual<T>) {
10
9
  super();
@@ -1,17 +1,19 @@
1
1
  import Dependency from "./dependency.js";
2
2
  import Dependent from "./dependent.js";
3
3
  import Tracker from "./tracker.js";
4
+ import defaultIsEqual from "./defaultIsEqual.js";
4
5
  declare type TrackValue = <T>(dependency: Dependency<T>) => T;
5
6
  export declare type ComputeFunc<T> = (value: TrackValue) => T;
6
7
  export declare type ComputeFuncScoped<T1, T2> = (value: TrackValue, scope: T1) => T2;
7
8
  export default class Computed<T> extends Tracker<T> implements Dependent, Dependency<T> {
8
9
  getter: ComputeFunc<T>;
10
+ isEqual: typeof defaultIsEqual<T>;
9
11
  private state;
10
12
  private dependencies;
11
13
  private computePromise?;
12
14
  private computePromiseActions?;
13
15
  private lastComputeAttemptPromise?;
14
- constructor(getter: ComputeFunc<T>);
16
+ constructor(getter: ComputeFunc<T>, isEqual?: (v1?: T | undefined, v2?: T | undefined) => boolean);
15
17
  private prepareComputePromise;
16
18
  get value(): T;
17
19
  private compute;
@@ -22,6 +24,7 @@ export default class Computed<T> extends Tracker<T> implements Dependent, Depend
22
24
  private trackDependency;
23
25
  private finalizeComputing;
24
26
  invalidate(): void;
27
+ forceInvalidate(): void;
25
28
  validate(dependency: Dependency<any>): void;
26
29
  private validateDependents;
27
30
  dispose(): void;
@@ -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;AAEvC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9D,MAAM,CAAC,OAAO,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,CAAC,CAAC;AAC9D,MAAM,CAAC,OAAO,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;AAWrF,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAE,YAAW,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACnF,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,cAAc,CAAC,CAAI;IAC3B,OAAO,CAAC,qBAAqB,CAAC,CAA0C;IACxE,OAAO,CAAC,yBAAyB,CAAC,CAAgB;gBAEtC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAMlC,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,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;AAEjD,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9D,MAAM,CAAC,OAAO,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,CAAC,CAAC;AAC9D,MAAM,CAAC,OAAO,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;AAWrF,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAE,YAAW,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACnF,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,cAAc,CAAC,CAAI;IAC3B,OAAO,CAAC,qBAAqB,CAAC,CAA0C;IACxE,OAAO,CAAC,yBAAyB,CAAC,CAAgB;gBAEtC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,sDAAoB;IAO/D,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"}
@@ -0,0 +1,3 @@
1
+ declare const _default: <T>(v1?: T, v2?: T) => boolean;
2
+ export default _default;
3
+ //# sourceMappingURL=defaultIsEqual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultIsEqual.d.ts","sourceRoot":"","sources":["../src/defaultIsEqual.ts"],"names":[],"mappings":"yBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;AAAjC,wBAAgD"}
@@ -0,0 +1,3 @@
1
+ declare const _default: <T>(v1?: T, v2?: T) => boolean;
2
+ export default _default;
3
+ //# sourceMappingURL=isEqual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isEqual.d.ts","sourceRoot":"","sources":["../src/isEqual.ts"],"names":[],"mappings":"yBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;AAAjC,wBAAgD"}
@@ -1 +1 @@
1
- {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../src/ref.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,OAAO,MAAM,cAAc,CAAC;AAInC,MAAM,CAAC,OAAO,OAAO,GAAG,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,OAAO,CAA4B;gBAE/B,MAAM,EAAE,CAAC,EAAE,OAAO,sDAAoB;IAMlD,IAAW,KAAK,CAAC,MAAM,EAAE,CAAC,EAMzB;IAED,IAAW,KAAK,IAAI,CAAC,CAEpB;CACJ"}
1
+ {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../src/ref.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,OAAO,MAAM,cAAc,CAAC;AAGnC,MAAM,CAAC,OAAO,OAAO,GAAG,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,OAAO,CAA2B;gBAE9B,MAAM,EAAE,CAAC,EAAE,OAAO,sDAAoB;IAMlD,IAAW,KAAK,CAAC,MAAM,EAAE,CAAC,EAMzB;IAED,IAAW,KAAK,IAAI,CAAC,CAEpB;CACJ"}