synstate 6.0.0 → 6.1.0
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/README.md +4 -3
- package/dist/core/class/observable-base-class.mjs.map +1 -1
- package/dist/core/class/propagation-state.mjs.map +1 -1
- package/dist/core/combine/combine.d.mts.map +1 -1
- package/dist/core/combine/combine.mjs +3 -43
- package/dist/core/combine/combine.mjs.map +1 -1
- package/dist/core/combine/derive.d.mts +63 -0
- package/dist/core/combine/derive.d.mts.map +1 -0
- package/dist/core/combine/derive.mjs +124 -0
- package/dist/core/combine/derive.mjs.map +1 -0
- package/dist/core/combine/index.d.mts +1 -0
- package/dist/core/combine/index.d.mts.map +1 -1
- package/dist/core/combine/index.mjs +1 -0
- package/dist/core/combine/index.mjs.map +1 -1
- package/dist/core/types/observable-family.d.mts +3 -0
- package/dist/core/types/observable-family.d.mts.map +1 -1
- package/dist/core/types/observable-family.mjs.map +1 -1
- package/package.json +12 -10
- package/src/core/class/observable-base-class.mts +2 -2
- package/src/core/class/propagation-state.mts +1 -1
- package/src/core/combine/combine.mts +7 -72
- package/src/core/combine/derive.mts +172 -0
- package/src/core/combine/derive.test.mts +190 -0
- package/src/core/combine/index.mts +1 -0
- package/src/core/types/observable-family.mts +18 -0
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
|
-
**SynState** is a lightweight,
|
|
16
|
+
**SynState** is a lightweight, glitch-free, type-safe state management library for TypeScript/JavaScript applications. Perfect for building reactive global state and event-driven systems in React, Vue, and other frameworks.
|
|
17
17
|
|
|
18
18
|
"SynState" is named after "Synchronized + State." It represents a sound synchronized state through a **glitch-free**[^1] Observable implementation.
|
|
19
19
|
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
## Features
|
|
23
23
|
|
|
24
24
|
- 🎯 **Simple State Management**: Easy-to-use `createState` and `createReducer` similar to React useState/useReducer for global state
|
|
25
|
-
- ⚡ **
|
|
25
|
+
- ⚡ **Predictable Performance**: Each update visits the nodes it reaches once each, so its cost grows with the size of the graph, never with the number of paths through it ([benchmark](https://noshiro-pf.github.io/mono/synstate/guides/library-comparison/benchmark/))
|
|
26
26
|
- 🎨 **Type-Safe**: Full TypeScript support with precise type inference
|
|
27
|
-
- 🚀 **Lightweight**: <!-- bundle-size:synstate -->~6.
|
|
27
|
+
- 🚀 **Lightweight**: <!-- bundle-size:synstate -->~6.7 kB min+gzip<!-- /bundle-size:synstate --> with two external runtime dependencies ([ts-data-forge](https://www.npmjs.com/package/ts-data-forge) and [ts-std-forge](https://www.npmjs.com/package/ts-std-forge), and the first depends on the second)
|
|
28
28
|
- 🌐 **Framework Agnostic**: Works with React, Vue, Svelte, or vanilla JavaScript
|
|
29
29
|
- 🔄 **Reactive Updates**: Automatic propagation of state changes to all subscribers
|
|
30
30
|
- 📡 **Event System**: Built-in `createValueEmitter`, `createEventEmitter` for event-driven architecture
|
|
@@ -761,6 +761,7 @@ For complex scenarios, SynState provides observable-based APIs:
|
|
|
761
761
|
#### Combination
|
|
762
762
|
|
|
763
763
|
- `combine(observables)`: Combine latest values from multiple sources (alias: `combineLatest`)
|
|
764
|
+
- `derive(observables, fn)`: Derive one value from the latest values of multiple sources, as one observable
|
|
764
765
|
- `merge(observables)`: Merge multiple streams
|
|
765
766
|
- `zip(observables)`: Pair values by index
|
|
766
767
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-base-class.mjs","sourceRoot":"","sources":["../../../src/core/class/observable-base-class.mts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yDAAyD;AACzD,4EAA4E;AAC5E,2CAA2C;AAC3C,gDAAgD;AAChD,0DAA0D;AAC1D,kEAAkE;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAe3C,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,eAAe,EACf,YAAY,GAEb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,mBAAmB;IAK9B,aAAa,CAAc;IAC3B,gBAAgB,CAAU;IAC1B,gBAAgB,CAAc;IAC9B,aAAa,CAAoC;IACjD,gBAAgB,CAAwC;IACxD,UAAU,CAA6B;IACvC,cAAc,CAA0B;IAC/B,IAAI,CAAO;IACX,KAAK,CAAQ;IAGtB,YAAY,EACV,IAAI,EACJ,KAAK,EACL,YAAY,GAKZ;QACA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAE9B,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC;QAEtC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAEhC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAE/B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAElC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,CACL,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,CACtE,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;oBACnB,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,YAAY,CAAC,WAAwB;QACnC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;IACpC,CAAC;IAED,QAAQ,CAAC,KAAgB;QACvB,yEAAyE;QACzE,4EAA4E;QAC5E,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"observable-base-class.mjs","sourceRoot":"","sources":["../../../src/core/class/observable-base-class.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propagation-state.mjs","sourceRoot":"","sources":["../../../src/core/class/propagation-state.mts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,gDAAgD;AAChD,0DAA0D;AAC1D,kEAAkE;AAClE;;;;;;;;GAQG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAKrC;;;GAGG;AACH,MAAM,eAAe,GAGjB,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AAE5C;;;GAGG;AACH,MAAM,oBAAoB,GAAmB,EAAE,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAY,EAAE,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAC;AAEtE,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAA4B,EAAE,CAChE,eAAe,CAAC,cAAc,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAgB,EAAQ,EAAE;IAC5D,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,IAAI,EAAE,CAAC;IACT,CAAC;AACH,CAAC,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,WAAwB,EAAQ,EAAE;IACjE,IAAI,eAAe,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QAChC,eAAe,CAAC,cAAc,GAAG,WAAW,CAAC;IAC/C,CAAC;IAED,eAAe,CAAC,KAAK,IAAI,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAS,EAAE;IACvC,eAAe,CAAC,KAAK,IAAI,CAAC,CAAC;IAE3B,IAAI,eAAe,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,eAAe,CAAC,cAAc,GAAG,SAAS,CAAC;IAE3C,0EAA0E;IAC1E,2CAA2C;IAC3C,OAAO,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC5C,oBAAoB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,cAAc,GAAe,EAAE,CAAC;AAEtC,sEAAsE;AACtE,MAAM,cAAc,GAAsB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAe,EAAE;IACvD,IAAI,cAAc,CAAC,KAAK,IAAI,gBAAgB,EAAE,CAAC;QAC7C,sEAAsE;QACtE,wEAAwE;QACxE,qEAAqE;QACrE,6BAA6B;QAC7B,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC3B,CAAC;IAED,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC;IAE1B,OAAO,OAAO,CAAC,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,MAAM,CAAC,MAAM,iBAAiB,GAC5B,uBAAuB,gBAAgB,CAAC,QAAQ,EAAE,4PAAqQ,CAAC;AAE1T,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,WAAwB,EAAQ,EAAE;IAC5D,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,WAAwB,EAAQ,EAAE;IAC5D,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;IAE7B,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,QAAgC,EAChC,WAAwB,EAClB,EAAE;IACR,OAAO,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AACjD,CAAC,CAAC;AAaF;;;;;;;;;GASG;AACH,MAAM,WAAW;IACN,KAAK,CAAS;IAEvB,uEAAuE;IACvE,oDAAoD;IAC3C,YAAY,CAAW;IAEhC,SAAS,CAAS;IAElB,WAAW,CAAU;IAErB,sBAAsB,CAAoC;IAE1D,0DAA0D;IAC1D,YAAY,IAAY,EAAE,KAAa;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC;QAExC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAEnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,KAAgB;QACpB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEvC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QAEtC,OAAO,WAAW,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;YACnC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,mCAAmC;QACnC,yDAAyD;QACzD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAE,CAAC;QAEvC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;QAEhD,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAC9B,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,UAAU,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,2EAA2E;IAC3E,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,eAAe,CAAC,QAAgC;QAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;YAE7B,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC/C,kEAAkE;gBAClE,gCAAgC;gBAChC,IAAI,IAAI,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;oBAC9C,IAAI,CAAC,sBAAsB,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"propagation-state.mjs","sourceRoot":"","sources":["../../../src/core/class/propagation-state.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combine.d.mts","sourceRoot":"","sources":["../../../src/core/combine/combine.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"combine.d.mts","sourceRoot":"","sources":["../../../src/core/combine/combine.mts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,KAAK,EAEV,wBAAwB,EAGxB,UAAU,EAEX,MAAM,oBAAoB,CAAC;AAG5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,eAAO,MAAM,OAAO,GAAI,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,WAChE,EAAE,KACV,wBAAwB,CAAC,EAAE,CAOgB,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,aAAa,gBAAU,CAAC"}
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import { Arr, Optional } from 'ts-data-forge';
|
|
8
|
-
import { SyncChildObservableClass } from '../class/index.mjs';
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
import { derive } from './derive.mjs';
|
|
11
5
|
|
|
12
6
|
|
|
13
7
|
|
|
@@ -67,48 +61,14 @@ import { SyncChildObservableClass } from '../class/index.mjs';
|
|
|
67
61
|
|
|
68
62
|
export const combine = (parents) =>
|
|
69
63
|
|
|
70
|
-
new CombineObservableClass(parents);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
export const combineLatest = combine;
|
|
76
|
-
class CombineObservableClass extends SyncChildObservableClass {
|
|
77
|
-
constructor(parents) {
|
|
78
|
-
const parentsValues = Arr.map(parents, (p) => p.getSnapshot());
|
|
79
|
-
|
|
80
|
-
|
|
81
64
|
|
|
82
65
|
|
|
66
|
+
derive(parents, (...values) => values);
|
|
83
67
|
|
|
84
68
|
|
|
85
69
|
|
|
86
70
|
|
|
87
|
-
|
|
88
|
-
? Optional.some(Arr.map(parentsValues, (c) => c.value))
|
|
89
|
-
: Optional.none;
|
|
90
|
-
super({
|
|
91
|
-
parents,
|
|
92
|
-
initialValue,
|
|
93
|
-
});
|
|
94
|
-
this.attach();
|
|
95
|
-
}
|
|
96
|
-
tryUpdate(updateToken) {
|
|
97
|
-
const parents = this.parents;
|
|
98
|
-
if (parents.every((o) => o.updateToken !== updateToken)) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const parentValues = Arr.map(parents, (a) => a.getSnapshot());
|
|
105
|
-
if (!Arr.every(parentValues, Optional.isSome)) {
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
const nextValue = Arr.map(parentValues, (a) => a.value);
|
|
109
|
-
this.setNext(nextValue, updateToken);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
71
|
+
export const combineLatest = combine;
|
|
112
72
|
|
|
113
73
|
|
|
114
74
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combine.mjs","sourceRoot":"","sources":["../../../src/core/combine/combine.mts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"combine.mjs","sourceRoot":"","sources":["../../../src/core/combine/combine.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAS1D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,OAAW,EACmB,EAAE;AAChC,4EAA4E;AAC5E,kEAAkE;AAClE,4DAA4D;AAC5D,MAAM,CACJ,OAAO,EACP,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,MAAM,CACqB,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAErC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;IACrC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;QACrB,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;IAC7B,CAAC,CAAC,CAAC;IAEH,CAAC;QACC,MAAM,EAAE,GAAkB,MAAM,EAAK,CAAC;QAEtC,MAAM,EAAE,GAAkB,MAAM,EAAK,CAAC;QAEtC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAE7B,UAAU,CAAgD,GAAG,CAAC,CAAC;QAE/D,UAAU,CAAyC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,CAAC;QACC,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3E,MAAM,EAAE,GAAkB,MAAM,EAAK,CAAC;QAEtC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAE7B,UAAU,CAAgD,GAAG,CAAC,CAAC;QAE/D,UAAU,CAAyC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,CAAC;QACC,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3E,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3E,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAE7B,oEAAoE;QACpE,UAAU,CAAoD,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAErB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAEvB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAE7B,MAAM,GAAG,GAAG,OAAO,CAAC;QAClB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC5B,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;KAC7B,CAAC,CAAC;IAEH,UAAU,CAA4D,IAAI,CAAC,CAAC;IAE5E,UAAU,CAGR,IAAI,CAAC,CAAC;AACV,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { NonEmptyTuple } from 'ts-type-forge';
|
|
2
|
+
import type { DeriveObservableRefined, Observable, Unwrap } from '../types/index.mjs';
|
|
3
|
+
/**
|
|
4
|
+
* Derives one value from the latest values of several observables: one
|
|
5
|
+
* observable that calls `project` with them, as arguments, and emits the
|
|
6
|
+
* result unless it equals the one already held.
|
|
7
|
+
*
|
|
8
|
+
* It emits once every parent has a value, and then whenever any of them
|
|
9
|
+
* emits, as `combine` does; but where `combine(parents).pipe(map(fn))` is two
|
|
10
|
+
* observables and a tuple per update, `derive` is one, and passes the values
|
|
11
|
+
* as arguments (a rest parameter in `project` collects them into an array
|
|
12
|
+
* again).
|
|
13
|
+
* The comparison is `Object.is` unless `equals` says otherwise.
|
|
14
|
+
*
|
|
15
|
+
* @template OS - Tuple type of the parent observables
|
|
16
|
+
* @template B - The type of the derived value
|
|
17
|
+
* @param parents - The observables to derive from
|
|
18
|
+
* @param project - Computes the value from the parents' values, in order
|
|
19
|
+
* @param options - `equals` compares a result with the one held
|
|
20
|
+
* @returns An observable of the derived value, initialized when every parent is
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* // Timeline:
|
|
25
|
+
* //
|
|
26
|
+
* // price$ 100 120
|
|
27
|
+
* // quantity$ 2 3
|
|
28
|
+
* // total$ 200 240 360
|
|
29
|
+
* //
|
|
30
|
+
* // Explanation:
|
|
31
|
+
* // - derive waits for every parent to have a value
|
|
32
|
+
* // - Then calls the projection with their latest values whenever one emits
|
|
33
|
+
*
|
|
34
|
+
* const price$ = source<number>();
|
|
35
|
+
*
|
|
36
|
+
* const quantity$ = source<number>();
|
|
37
|
+
*
|
|
38
|
+
* const total$ = derive(
|
|
39
|
+
* [price$, quantity$],
|
|
40
|
+
* (price, quantity) => price * quantity,
|
|
41
|
+
* );
|
|
42
|
+
*
|
|
43
|
+
* const totalHistory: number[] = [];
|
|
44
|
+
*
|
|
45
|
+
* total$.subscribe((total) => {
|
|
46
|
+
* totalHistory.push(total);
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* price$.next(100); // nothing yet: quantity$ has no value
|
|
50
|
+
*
|
|
51
|
+
* quantity$.next(2); // 200
|
|
52
|
+
*
|
|
53
|
+
* price$.next(120); // 240
|
|
54
|
+
*
|
|
55
|
+
* quantity$.next(3); // 360
|
|
56
|
+
*
|
|
57
|
+
* assert.deepStrictEqual(totalHistory, [200, 240, 360]);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare const derive: <const OS extends NonEmptyTuple<Observable<unknown>>, B>(parents: OS, project: (...values: Unwrap<OS>) => B, options?: Readonly<{
|
|
61
|
+
equals?: (x: B, y: B) => boolean;
|
|
62
|
+
}>) => DeriveObservableRefined<B, OS>;
|
|
63
|
+
//# sourceMappingURL=derive.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.d.mts","sourceRoot":"","sources":["../../../src/core/combine/derive.mts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAEV,uBAAuB,EAEvB,UAAU,EACV,MAAM,EAGP,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,WAClE,EAAE,WACF,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,YAC3B,QAAQ,CAAC;IAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAA;CAAE,CAAC,KACvD,uBAAuB,CAAC,CAAC,EAAE,EAAE,CASgB,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
import { Arr, Optional } from 'ts-data-forge';
|
|
9
|
+
import { SyncChildObservableClass } from '../class/index.mjs';
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
export const derive = (parents, project, options) =>
|
|
68
|
+
|
|
69
|
+
new DeriveObservableClass(parents,
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
project, options?.equals ?? Object.is);
|
|
74
|
+
class DeriveObservableClass extends SyncChildObservableClass {
|
|
75
|
+
#project;
|
|
76
|
+
#equals;
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
#mut_values;
|
|
84
|
+
constructor(parents, project, equals) {
|
|
85
|
+
const snapshots = Arr.map(parents, (p) => p.getSnapshot());
|
|
86
|
+
const mut_values = Array.from(snapshots, (s) => Optional.isSome(s) ? s.value : undefined);
|
|
87
|
+
super({
|
|
88
|
+
parents,
|
|
89
|
+
initialValue: Arr.every(snapshots, Optional.isSome)
|
|
90
|
+
? Optional.some(project(...mut_values))
|
|
91
|
+
: Optional.none,
|
|
92
|
+
});
|
|
93
|
+
this.#project = project;
|
|
94
|
+
this.#equals = equals;
|
|
95
|
+
this.#mut_values = mut_values;
|
|
96
|
+
this.attach();
|
|
97
|
+
}
|
|
98
|
+
tryUpdate(updateToken) {
|
|
99
|
+
const mut_values = this.#mut_values;
|
|
100
|
+
let mut_updated = false;
|
|
101
|
+
let mut_index = 0;
|
|
102
|
+
for (const parent of this.parents) {
|
|
103
|
+
const snapshot = parent.getSnapshot();
|
|
104
|
+
if (Optional.isNone(snapshot)) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
mut_values[mut_index] = snapshot.value;
|
|
108
|
+
mut_index += 1;
|
|
109
|
+
if (parent.updateToken === updateToken) {
|
|
110
|
+
mut_updated = true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (!mut_updated) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const next = this.#project(...mut_values);
|
|
117
|
+
const held = this.getSnapshot();
|
|
118
|
+
if (Optional.isSome(held) && this.#equals(held.value, next)) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
this.setNext(next, updateToken);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=derive.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.mjs","sourceRoot":"","sources":["../../../src/core/combine/derive.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/core/combine/index.mts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/core/combine/index.mts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/core/combine/index.mts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/core/combine/index.mts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
@@ -35,6 +35,7 @@ declare namespace SynStateInternals {
|
|
|
35
35
|
type InitializedCombineObservableImpl<A extends NonEmptyUnknownList> = InitializedSyncChildObservable<A, A>;
|
|
36
36
|
export type CombineObservableImpl<A extends NonEmptyUnknownList> = SyncChildObservable<A, A>;
|
|
37
37
|
export type CombineObservableRefinedImpl<OS extends NonEmptyTuple<Observable<unknown>>> = EveryInitialized<OS> extends true ? InitializedCombineObservableImpl<Cast<Unwrap<OS>>> : CombineObservableImpl<Unwrap<OS>>;
|
|
38
|
+
export type DeriveObservableRefinedImpl<B, OS extends NonEmptyTuple<Observable<unknown>>> = EveryInitialized<OS> extends true ? InitializedSyncChildObservable<B, Cast<Unwrap<OS>>> : SyncChildObservable<B, Unwrap<OS>>;
|
|
38
39
|
type InitializedZipObservableImpl<A extends NonEmptyUnknownList> = InitializedSyncChildObservable<A, A>;
|
|
39
40
|
export type ZipObservableImpl<A extends NonEmptyUnknownList> = SyncChildObservable<A, A>;
|
|
40
41
|
export type ZipObservableRefinedImpl<OS extends NonEmptyTuple<Observable<unknown>>> = EveryInitialized<OS> extends true ? InitializedZipObservableImpl<Cast<Unwrap<OS>>> : ZipObservableImpl<Unwrap<OS>>;
|
|
@@ -45,6 +46,8 @@ declare namespace SynStateInternals {
|
|
|
45
46
|
}
|
|
46
47
|
export type CombineObservable<A extends NonEmptyUnknownList> = SynStateInternals.CombineObservableImpl<A>;
|
|
47
48
|
export type CombineObservableRefined<OS extends NonEmptyTuple<Observable<unknown>>> = SynStateInternals.CombineObservableRefinedImpl<OS>;
|
|
49
|
+
export type DeriveObservable<B, A extends NonEmptyUnknownList> = SyncChildObservable<B, A>;
|
|
50
|
+
export type DeriveObservableRefined<B, OS extends NonEmptyTuple<Observable<unknown>>> = SynStateInternals.DeriveObservableRefinedImpl<B, OS>;
|
|
48
51
|
export type ZipObservable<A extends NonEmptyUnknownList> = SynStateInternals.ZipObservableImpl<A>;
|
|
49
52
|
export type ZipObservableRefined<OS extends NonEmptyTuple<Observable<unknown>>> = SynStateInternals.ZipObservableRefinedImpl<OS>;
|
|
50
53
|
export type MergeObservable<A extends NonEmptyUnknownList> = SynStateInternals.MergeObservableImpl<A>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-family.d.mts","sourceRoot":"","sources":["../../../src/core/types/observable-family.mts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observable-family.d.mts","sourceRoot":"","sources":["../../../src/core/types/observable-family.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-family.mjs","sourceRoot":"","sources":["../../../src/core/types/observable-family.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"observable-family.mjs","sourceRoot":"","sources":["../../../src/core/types/observable-family.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;AAkJxD,UAAU,CACR,GAAG,CACJ,CAAC;AAEF,UAAU,CAGR,GAAG,CAAC,CAAC;AAEP,UAAU,CAKR,GAAG,CAAC,CAAC;AAEP,UAAU,CAKR,GAAG,CAAC,CAAC;AAEP,UAAU,CACR,GAAG,CACJ,CAAC;AAEF,UAAU,CAGR,GAAG,CAAC,CAAC;AAEP,UAAU,CAKR,GAAG,CAAC,CAAC;AAEP,UAAU,CAKR,GAAG,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "synstate",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"description": "Type-safe State Management Library for TypeScript/JavaScript",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -34,31 +34,33 @@
|
|
|
34
34
|
"ts-type-forge": "^9.2.2"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
+
"@preact/signals-core": "1.14.4",
|
|
37
38
|
"@reduxjs/toolkit": "2.13.0",
|
|
38
|
-
"@sumi-lang/cli": "0.1.
|
|
39
|
+
"@sumi-lang/cli": "0.1.2",
|
|
39
40
|
"@types/react": "19.3.0",
|
|
40
41
|
"@vitest/browser-playwright": "5.0.5",
|
|
41
42
|
"argparse": "3.0.3",
|
|
42
|
-
"eslint-config-typed": "5.
|
|
43
|
-
"eslint-plugin-ts-data-forge": "0.10.
|
|
44
|
-
"eslint-plugin-ts-fortress": "1.3.
|
|
45
|
-
"eslint-plugin-ts-type-forge": "0.8.
|
|
43
|
+
"eslint-config-typed": "5.20.1",
|
|
44
|
+
"eslint-plugin-ts-data-forge": "0.10.4",
|
|
45
|
+
"eslint-plugin-ts-fortress": "1.3.9",
|
|
46
|
+
"eslint-plugin-ts-type-forge": "0.8.14",
|
|
46
47
|
"jotai": "3.0.1",
|
|
47
|
-
"mobx": "7.0
|
|
48
|
+
"mobx": "7.1.0",
|
|
48
49
|
"playwright": "1.64.1",
|
|
49
50
|
"prettier": "3.9.10",
|
|
50
51
|
"prettier-plugin-organize-imports": "4.3.0",
|
|
51
52
|
"prettier-plugin-packagejson": "3.0.2",
|
|
52
53
|
"react": "19.3.1",
|
|
53
54
|
"rxjs": "7.8.2",
|
|
54
|
-
"
|
|
55
|
-
"synstate-react-hooks
|
|
55
|
+
"solid-js": "1.9.17",
|
|
56
|
+
"synstate-react-hooks": "6.1.0",
|
|
57
|
+
"synstate-react-hooks-compat": "6.1.0",
|
|
56
58
|
"ts-repo-utils": "10.7.1",
|
|
57
59
|
"valtio": "2.3.2",
|
|
58
60
|
"zustand": "5.0.15"
|
|
59
61
|
},
|
|
60
62
|
"engines": {
|
|
61
|
-
"node": ">=22.
|
|
63
|
+
"node": ">=22.23.4",
|
|
62
64
|
"pnpm": ">=9.0.0"
|
|
63
65
|
},
|
|
64
66
|
"publishConfig": {
|
|
@@ -146,7 +146,7 @@ export class ObservableBaseClass<
|
|
|
146
146
|
// A set, not an array: a completed child removes itself, and that has to
|
|
147
147
|
// be O(1) for a UI that creates and completes derived nodes on every mount.
|
|
148
148
|
if (this.#mut_children === undefined) {
|
|
149
|
-
this.#mut_children = new Set([child]);
|
|
149
|
+
this.#mut_children = new Set<ChildNode>([child]);
|
|
150
150
|
} else {
|
|
151
151
|
this.#mut_children.add(child);
|
|
152
152
|
}
|
|
@@ -321,7 +321,7 @@ export class ObservableBaseClass<
|
|
|
321
321
|
|
|
322
322
|
const subscriber = toSubscriber(onNext, onComplete);
|
|
323
323
|
|
|
324
|
-
this.#mut_subscribers ??= new Set();
|
|
324
|
+
this.#mut_subscribers ??= new Set<Subscriber<A>>();
|
|
325
325
|
|
|
326
326
|
this.#mut_subscribers.add(subscriber);
|
|
327
327
|
|
|
@@ -251,7 +251,7 @@ class UpdateQueue {
|
|
|
251
251
|
// Another open update has queued `child` and may not have visited
|
|
252
252
|
// it yet: leave its mark alone.
|
|
253
253
|
if (this.#mut_queuedDespiteMark === undefined) {
|
|
254
|
-
this.#mut_queuedDespiteMark = new Set();
|
|
254
|
+
this.#mut_queuedDespiteMark = new Set<ChildNode>();
|
|
255
255
|
} else if (this.#mut_queuedDespiteMark.has(child)) {
|
|
256
256
|
continue;
|
|
257
257
|
}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// so those rules are waived here (D-63).
|
|
4
|
-
// @sumi-expect-error-file classes/no-class
|
|
5
|
-
// @sumi-expect-error-file banned-syntax/no-this
|
|
6
|
-
// @sumi-expect-error-file functions/prefer-arrow-function
|
|
7
|
-
import { Arr, expectType, Optional } from 'ts-data-forge';
|
|
8
|
-
import type { NonEmptyTuple, Tuple } from 'ts-type-forge';
|
|
9
|
-
import { SyncChildObservableClass } from '../class/index.mjs';
|
|
1
|
+
import { expectType } from 'ts-data-forge';
|
|
2
|
+
import type { NonEmptyTuple } from 'ts-type-forge';
|
|
10
3
|
import { source } from '../create/index.mjs';
|
|
11
4
|
import { withInitialValue } from '../operators/index.mjs';
|
|
12
5
|
import type {
|
|
@@ -14,12 +7,10 @@ import type {
|
|
|
14
7
|
CombineObservableRefined,
|
|
15
8
|
InitializedObservable,
|
|
16
9
|
InitializedSyncChildObservable,
|
|
17
|
-
NonEmptyUnknownList,
|
|
18
10
|
Observable,
|
|
19
11
|
SyncChildObservable,
|
|
20
|
-
UpdateToken,
|
|
21
|
-
Wrap,
|
|
22
12
|
} from '../types/index.mjs';
|
|
13
|
+
import { derive } from './derive.mjs';
|
|
23
14
|
|
|
24
15
|
/**
|
|
25
16
|
* Combines multiple observables into a single observable that emits an array of their latest values.
|
|
@@ -81,9 +72,12 @@ import type {
|
|
|
81
72
|
export const combine = <const OS extends NonEmptyTuple<Observable<unknown>>>(
|
|
82
73
|
parents: OS,
|
|
83
74
|
): CombineObservableRefined<OS> =>
|
|
75
|
+
// `derive` collecting the values into a new array on every update, which is
|
|
76
|
+
// never `Object.is` the one before, so every update is passed on.
|
|
84
77
|
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
85
|
-
|
|
78
|
+
derive(
|
|
86
79
|
parents,
|
|
80
|
+
(...values) => values,
|
|
87
81
|
) as unknown as CombineObservableRefined<OS>;
|
|
88
82
|
|
|
89
83
|
/**
|
|
@@ -92,65 +86,6 @@ export const combine = <const OS extends NonEmptyTuple<Observable<unknown>>>(
|
|
|
92
86
|
*/
|
|
93
87
|
export const combineLatest = combine;
|
|
94
88
|
|
|
95
|
-
class CombineObservableClass<const A extends NonEmptyUnknownList>
|
|
96
|
-
extends SyncChildObservableClass<A, A>
|
|
97
|
-
implements CombineObservable<A>
|
|
98
|
-
{
|
|
99
|
-
constructor(parents: Wrap<A>) {
|
|
100
|
-
const parentsValues: Tuple.MapTo<Optional<A[number]>, A> = Arr.map(
|
|
101
|
-
parents,
|
|
102
|
-
(p) => p.getSnapshot(),
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
// The annotation on `initialValue` is what replaces the type assertion.
|
|
106
|
-
// `Arr.map` carries a single result element type, so it reports `A[number]`
|
|
107
|
-
// at every position, and `Tuple.MapTo<A[number], A>` — the uniform mapping
|
|
108
|
-
// — is *not* assignable back to `A`. The positional
|
|
109
|
-
// `Readonly<{ [K in keyof A]: A[K] }>` is, and TypeScript accepts the
|
|
110
|
-
// uniform result into it because the two mapped types share `keyof A`. So
|
|
111
|
-
// it is the annotation, not an assertion, that records the position-wise
|
|
112
|
-
// fact the checker cannot derive on its own.
|
|
113
|
-
const initialValue: Optional<Readonly<{ [K in keyof A]: A[K] }>> =
|
|
114
|
-
Arr.every(parentsValues, Optional.isSome)
|
|
115
|
-
? Optional.some(Arr.map(parentsValues, (c) => c.value))
|
|
116
|
-
: Optional.none;
|
|
117
|
-
|
|
118
|
-
super({
|
|
119
|
-
parents,
|
|
120
|
-
initialValue,
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
this.attach();
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
override tryUpdate(updateToken: UpdateToken): void {
|
|
127
|
-
const parents = this.parents;
|
|
128
|
-
|
|
129
|
-
if (parents.every((o) => o.updateToken !== updateToken)) {
|
|
130
|
-
return; // all parents are skipped
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Same shape-preserving chain as the initial value: `Arr.map` (not the
|
|
134
|
-
// native one, which drops the tuple shape) into the uniform
|
|
135
|
-
// `Tuple.MapTo`, then a positional annotation to get back to `A`.
|
|
136
|
-
const parentValues: Tuple.MapTo<Optional<A[number]>, A> = Arr.map(
|
|
137
|
-
parents,
|
|
138
|
-
(a) => a.getSnapshot(),
|
|
139
|
-
);
|
|
140
|
-
|
|
141
|
-
if (!Arr.every(parentValues, Optional.isSome)) {
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
const nextValue: Readonly<{ [K in keyof A]: A[K] }> = Arr.map(
|
|
146
|
-
parentValues,
|
|
147
|
-
(a) => a.value,
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
this.setNext(nextValue, updateToken);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
89
|
if (import.meta.vitest !== undefined) {
|
|
155
90
|
test('type test', () => {
|
|
156
91
|
expect(1).toBe(1); // dummy
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// Sumi bans classes, `this`, method syntax and writes to `this` outside a
|
|
2
|
+
// `mut_` binding; an observable is a class (`ObservableBaseClass` says why),
|
|
3
|
+
// so those rules are waived here (D-63).
|
|
4
|
+
// @sumi-expect-error-file classes/no-class
|
|
5
|
+
// @sumi-expect-error-file banned-syntax/no-this
|
|
6
|
+
// @sumi-expect-error-file functions/prefer-arrow-function
|
|
7
|
+
// @sumi-expect-error-file mutation/no-mutation-without-mut-prefix
|
|
8
|
+
import { Arr, Optional } from 'ts-data-forge';
|
|
9
|
+
import type { NonEmptyTuple } from 'ts-type-forge';
|
|
10
|
+
import { SyncChildObservableClass } from '../class/index.mjs';
|
|
11
|
+
import type {
|
|
12
|
+
DeriveObservable,
|
|
13
|
+
DeriveObservableRefined,
|
|
14
|
+
NonEmptyUnknownList,
|
|
15
|
+
Observable,
|
|
16
|
+
Unwrap,
|
|
17
|
+
UpdateToken,
|
|
18
|
+
Wrap,
|
|
19
|
+
} from '../types/index.mjs';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Derives one value from the latest values of several observables: one
|
|
23
|
+
* observable that calls `project` with them, as arguments, and emits the
|
|
24
|
+
* result unless it equals the one already held.
|
|
25
|
+
*
|
|
26
|
+
* It emits once every parent has a value, and then whenever any of them
|
|
27
|
+
* emits, as `combine` does; but where `combine(parents).pipe(map(fn))` is two
|
|
28
|
+
* observables and a tuple per update, `derive` is one, and passes the values
|
|
29
|
+
* as arguments (a rest parameter in `project` collects them into an array
|
|
30
|
+
* again).
|
|
31
|
+
* The comparison is `Object.is` unless `equals` says otherwise.
|
|
32
|
+
*
|
|
33
|
+
* @template OS - Tuple type of the parent observables
|
|
34
|
+
* @template B - The type of the derived value
|
|
35
|
+
* @param parents - The observables to derive from
|
|
36
|
+
* @param project - Computes the value from the parents' values, in order
|
|
37
|
+
* @param options - `equals` compares a result with the one held
|
|
38
|
+
* @returns An observable of the derived value, initialized when every parent is
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* // Timeline:
|
|
43
|
+
* //
|
|
44
|
+
* // price$ 100 120
|
|
45
|
+
* // quantity$ 2 3
|
|
46
|
+
* // total$ 200 240 360
|
|
47
|
+
* //
|
|
48
|
+
* // Explanation:
|
|
49
|
+
* // - derive waits for every parent to have a value
|
|
50
|
+
* // - Then calls the projection with their latest values whenever one emits
|
|
51
|
+
*
|
|
52
|
+
* const price$ = source<number>();
|
|
53
|
+
*
|
|
54
|
+
* const quantity$ = source<number>();
|
|
55
|
+
*
|
|
56
|
+
* const total$ = derive(
|
|
57
|
+
* [price$, quantity$],
|
|
58
|
+
* (price, quantity) => price * quantity,
|
|
59
|
+
* );
|
|
60
|
+
*
|
|
61
|
+
* const totalHistory: number[] = [];
|
|
62
|
+
*
|
|
63
|
+
* total$.subscribe((total) => {
|
|
64
|
+
* totalHistory.push(total);
|
|
65
|
+
* });
|
|
66
|
+
*
|
|
67
|
+
* price$.next(100); // nothing yet: quantity$ has no value
|
|
68
|
+
*
|
|
69
|
+
* quantity$.next(2); // 200
|
|
70
|
+
*
|
|
71
|
+
* price$.next(120); // 240
|
|
72
|
+
*
|
|
73
|
+
* quantity$.next(3); // 360
|
|
74
|
+
*
|
|
75
|
+
* assert.deepStrictEqual(totalHistory, [200, 240, 360]);
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export const derive = <const OS extends NonEmptyTuple<Observable<unknown>>, B>(
|
|
79
|
+
parents: OS,
|
|
80
|
+
project: (...values: Unwrap<OS>) => B,
|
|
81
|
+
options?: Readonly<{ equals?: (x: B, y: B) => boolean }>,
|
|
82
|
+
): DeriveObservableRefined<B, OS> =>
|
|
83
|
+
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
84
|
+
new DeriveObservableClass(
|
|
85
|
+
parents,
|
|
86
|
+
// `project` is called with the values of `parents`, position by
|
|
87
|
+
// position, which the checker cannot follow through an index.
|
|
88
|
+
// @sumi-expect-error banned-syntax/no-unsafe-type-assertion
|
|
89
|
+
project as (...values: readonly unknown[]) => B,
|
|
90
|
+
options?.equals ?? Object.is,
|
|
91
|
+
) as unknown as DeriveObservableRefined<B, OS>;
|
|
92
|
+
|
|
93
|
+
class DeriveObservableClass<const A extends NonEmptyUnknownList, B>
|
|
94
|
+
extends SyncChildObservableClass<B, A>
|
|
95
|
+
implements DeriveObservable<B, A>
|
|
96
|
+
{
|
|
97
|
+
readonly #project: (...values: readonly unknown[]) => B;
|
|
98
|
+
readonly #equals: (x: B, y: B) => boolean;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* The parents' values, rewritten by every update. `project` receives them
|
|
102
|
+
* spread, as arguments of its own, so nothing it is given changes later and
|
|
103
|
+
* no array is built per update.
|
|
104
|
+
*/
|
|
105
|
+
// @sumi-expect-error readonly/require-readonly-type
|
|
106
|
+
readonly #mut_values: unknown[];
|
|
107
|
+
|
|
108
|
+
constructor(
|
|
109
|
+
parents: Wrap<A>,
|
|
110
|
+
project: (...values: readonly unknown[]) => B,
|
|
111
|
+
equals: (x: B, y: B) => boolean,
|
|
112
|
+
) {
|
|
113
|
+
const snapshots = Arr.map(parents, (p) => p.getSnapshot());
|
|
114
|
+
|
|
115
|
+
const mut_values = Array.from(snapshots, (s): unknown =>
|
|
116
|
+
Optional.isSome(s) ? s.value : undefined,
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
super({
|
|
120
|
+
parents,
|
|
121
|
+
initialValue: Arr.every(snapshots, Optional.isSome)
|
|
122
|
+
? Optional.some(project(...mut_values))
|
|
123
|
+
: Optional.none,
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
this.#project = project;
|
|
127
|
+
|
|
128
|
+
this.#equals = equals;
|
|
129
|
+
|
|
130
|
+
this.#mut_values = mut_values;
|
|
131
|
+
|
|
132
|
+
this.attach();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
override tryUpdate(updateToken: UpdateToken): void {
|
|
136
|
+
const mut_values = this.#mut_values;
|
|
137
|
+
|
|
138
|
+
let mut_updated = false;
|
|
139
|
+
|
|
140
|
+
let mut_index = 0;
|
|
141
|
+
|
|
142
|
+
for (const parent of this.parents) {
|
|
143
|
+
const snapshot = parent.getSnapshot();
|
|
144
|
+
|
|
145
|
+
if (Optional.isNone(snapshot)) {
|
|
146
|
+
return; // a parent has no value yet
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
mut_values[mut_index] = snapshot.value;
|
|
150
|
+
|
|
151
|
+
mut_index += 1;
|
|
152
|
+
|
|
153
|
+
if (parent.updateToken === updateToken) {
|
|
154
|
+
mut_updated = true;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (!mut_updated) {
|
|
159
|
+
return; // all parents are skipped
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const next = this.#project(...mut_values);
|
|
163
|
+
|
|
164
|
+
const held = this.getSnapshot();
|
|
165
|
+
|
|
166
|
+
if (Optional.isSome(held) && this.#equals(held.value, next)) {
|
|
167
|
+
return; // the result did not change
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
this.setNext(next, updateToken);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { Optional, expectType } from 'ts-data-forge';
|
|
2
|
+
import { source } from '../create/index.mjs';
|
|
3
|
+
import { map, withInitialValue } from '../operators/index.mjs';
|
|
4
|
+
import type {
|
|
5
|
+
InitializedObservable,
|
|
6
|
+
InitializedSyncChildObservable,
|
|
7
|
+
Observable,
|
|
8
|
+
SyncChildObservable,
|
|
9
|
+
} from '../types/index.mjs';
|
|
10
|
+
import { derive } from './derive.mjs';
|
|
11
|
+
|
|
12
|
+
describe(derive, () => {
|
|
13
|
+
test('emits the projection of the latest values, once every parent has one', () => {
|
|
14
|
+
const a$ = source<number>();
|
|
15
|
+
|
|
16
|
+
const b$ = source<string>();
|
|
17
|
+
|
|
18
|
+
const label$ = derive([a$, b$], (a, b) => `${b}${a.toString()}`);
|
|
19
|
+
|
|
20
|
+
const mut_history: string[] = [];
|
|
21
|
+
|
|
22
|
+
label$.subscribe((v) => {
|
|
23
|
+
mut_history.push(v);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
a$.next(1);
|
|
27
|
+
|
|
28
|
+
assert.deepStrictEqual(mut_history, []);
|
|
29
|
+
|
|
30
|
+
b$.next('x');
|
|
31
|
+
|
|
32
|
+
a$.next(2);
|
|
33
|
+
|
|
34
|
+
b$.next('y');
|
|
35
|
+
|
|
36
|
+
assert.deepStrictEqual(mut_history, ['x1', 'x2', 'y2']);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('is one observable: a diamond updates it once per write', () => {
|
|
40
|
+
const counter$ = source<number>(0);
|
|
41
|
+
|
|
42
|
+
const doubled$ = counter$.pipe(map((x) => x * 2));
|
|
43
|
+
|
|
44
|
+
const tripled$ = counter$.pipe(map((x) => x * 3));
|
|
45
|
+
|
|
46
|
+
let mut_calls = 0;
|
|
47
|
+
|
|
48
|
+
const sum$ = derive([doubled$, tripled$], (d, t) => {
|
|
49
|
+
mut_calls += 1;
|
|
50
|
+
|
|
51
|
+
return d + t;
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const mut_history: number[] = [];
|
|
55
|
+
|
|
56
|
+
sum$.subscribe((v) => {
|
|
57
|
+
mut_history.push(v);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
counter$.next(1);
|
|
61
|
+
|
|
62
|
+
counter$.next(2);
|
|
63
|
+
|
|
64
|
+
assert.deepStrictEqual(mut_history, [0, 5, 10]);
|
|
65
|
+
|
|
66
|
+
assert.strictEqual(mut_calls, 3);
|
|
67
|
+
|
|
68
|
+
assert.deepStrictEqual(sum$.parents, [doubled$, tripled$]);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test('computes the initial value when every parent has one', () => {
|
|
72
|
+
const a$ = source<number>(1);
|
|
73
|
+
|
|
74
|
+
const b$ = source<number>(2);
|
|
75
|
+
|
|
76
|
+
const sum$ = derive([a$, b$], (a, b) => a + b);
|
|
77
|
+
|
|
78
|
+
assert.deepStrictEqual(sum$.getSnapshot(), Optional.some(3));
|
|
79
|
+
|
|
80
|
+
const c$ = source<number>();
|
|
81
|
+
|
|
82
|
+
const partial$ = derive([a$, c$], (a, c) => a + c);
|
|
83
|
+
|
|
84
|
+
assert.isTrue(Optional.isNone(partial$.getSnapshot()));
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('a result equal by Object.is to the one held is not emitted', () => {
|
|
88
|
+
const a$ = source<number>(1);
|
|
89
|
+
|
|
90
|
+
const b$ = source<number>(2);
|
|
91
|
+
|
|
92
|
+
const parity$ = derive([a$, b$], (a, b) => (a + b) % 2);
|
|
93
|
+
|
|
94
|
+
const mut_history: number[] = [];
|
|
95
|
+
|
|
96
|
+
parity$.subscribe((v) => {
|
|
97
|
+
mut_history.push(v);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
a$.next(3);
|
|
101
|
+
|
|
102
|
+
b$.next(4);
|
|
103
|
+
|
|
104
|
+
a$.next(4);
|
|
105
|
+
|
|
106
|
+
assert.deepStrictEqual(mut_history, [1, 0]);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
test('`equals` replaces Object.is', () => {
|
|
110
|
+
const a$ = source<number>(1);
|
|
111
|
+
|
|
112
|
+
const b$ = source<number>(2);
|
|
113
|
+
|
|
114
|
+
const pair$ = derive([a$, b$], (a, b) => ({ total: a + b }), {
|
|
115
|
+
equals: (x, y) => x.total === y.total,
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
const mut_history: number[] = [];
|
|
119
|
+
|
|
120
|
+
pair$.subscribe(({ total }) => {
|
|
121
|
+
mut_history.push(total);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
a$.next(2);
|
|
125
|
+
|
|
126
|
+
// A new object with the same total: equal by `equals`, not by Object.is.
|
|
127
|
+
a$.next(2);
|
|
128
|
+
|
|
129
|
+
b$.next(1);
|
|
130
|
+
|
|
131
|
+
b$.next(5);
|
|
132
|
+
|
|
133
|
+
assert.deepStrictEqual(mut_history, [3, 4, 3, 7]);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
test('a write from one parent does not reuse a value another update left', () => {
|
|
137
|
+
const a$ = source<number>(1);
|
|
138
|
+
|
|
139
|
+
const b$ = source<number>(10);
|
|
140
|
+
|
|
141
|
+
const xs$ = derive([a$, b$], (...values) => values);
|
|
142
|
+
|
|
143
|
+
const mut_history: (readonly number[])[] = [];
|
|
144
|
+
|
|
145
|
+
xs$.subscribe((v) => {
|
|
146
|
+
mut_history.push(v);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
a$.next(2);
|
|
150
|
+
|
|
151
|
+
b$.next(20);
|
|
152
|
+
|
|
153
|
+
assert.deepStrictEqual(mut_history, [
|
|
154
|
+
[1, 10],
|
|
155
|
+
[2, 10],
|
|
156
|
+
[2, 20],
|
|
157
|
+
]);
|
|
158
|
+
|
|
159
|
+
// Each emission is its own array, so a held value is never changed by a
|
|
160
|
+
// later update.
|
|
161
|
+
assert.notStrictEqual(mut_history[0], mut_history[1]);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
test('types', () => {
|
|
165
|
+
const s1: Observable<1> = source<1>();
|
|
166
|
+
|
|
167
|
+
const s2: InitializedObservable<2> = source<2>().pipe(withInitialValue(2));
|
|
168
|
+
|
|
169
|
+
const p = derive([s1, s2], (a, b) => {
|
|
170
|
+
expectType<typeof a, 1>('=');
|
|
171
|
+
|
|
172
|
+
expectType<typeof b, 2>('=');
|
|
173
|
+
|
|
174
|
+
return 'x' as const;
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
expectType<typeof p, SyncChildObservable<'x', readonly [1, 2]>>('=');
|
|
178
|
+
|
|
179
|
+
const s3: InitializedObservable<3> = source<3>().pipe(withInitialValue(3));
|
|
180
|
+
|
|
181
|
+
const _q = derive([s2, s3], (a, b) => a + b);
|
|
182
|
+
|
|
183
|
+
expectType<
|
|
184
|
+
typeof _q,
|
|
185
|
+
InitializedSyncChildObservable<number, readonly [2, 3]>
|
|
186
|
+
>('=');
|
|
187
|
+
|
|
188
|
+
expect(p).toBeDefined();
|
|
189
|
+
});
|
|
190
|
+
});
|
|
@@ -109,6 +109,14 @@ namespace SynStateInternals {
|
|
|
109
109
|
? InitializedCombineObservableImpl<Cast<Unwrap<OS>>>
|
|
110
110
|
: CombineObservableImpl<Unwrap<OS>>;
|
|
111
111
|
|
|
112
|
+
export type DeriveObservableRefinedImpl<
|
|
113
|
+
B,
|
|
114
|
+
OS extends NonEmptyTuple<Observable<unknown>>,
|
|
115
|
+
> =
|
|
116
|
+
EveryInitialized<OS> extends true
|
|
117
|
+
? InitializedSyncChildObservable<B, Cast<Unwrap<OS>>>
|
|
118
|
+
: SyncChildObservable<B, Unwrap<OS>>;
|
|
119
|
+
|
|
112
120
|
type InitializedZipObservableImpl<A extends NonEmptyUnknownList> =
|
|
113
121
|
InitializedSyncChildObservable<A, A>;
|
|
114
122
|
|
|
@@ -189,6 +197,16 @@ export type CombineObservableRefined<
|
|
|
189
197
|
OS extends NonEmptyTuple<Observable<unknown>>,
|
|
190
198
|
> = SynStateInternals.CombineObservableRefinedImpl<OS>;
|
|
191
199
|
|
|
200
|
+
export type DeriveObservable<
|
|
201
|
+
B,
|
|
202
|
+
A extends NonEmptyUnknownList,
|
|
203
|
+
> = SyncChildObservable<B, A>;
|
|
204
|
+
|
|
205
|
+
export type DeriveObservableRefined<
|
|
206
|
+
B,
|
|
207
|
+
OS extends NonEmptyTuple<Observable<unknown>>,
|
|
208
|
+
> = SynStateInternals.DeriveObservableRefinedImpl<B, OS>;
|
|
209
|
+
|
|
192
210
|
export type ZipObservable<A extends NonEmptyUnknownList> =
|
|
193
211
|
SynStateInternals.ZipObservableImpl<A>;
|
|
194
212
|
|