@evolu/common 7.4.0 → 8.0.0-next.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 -61
- package/dist/src/Array.d.ts +343 -102
- package/dist/src/Array.d.ts.map +1 -1
- package/dist/src/Array.js +181 -85
- package/dist/src/Assert.d.ts +57 -11
- package/dist/src/Assert.d.ts.map +1 -1
- package/dist/src/Assert.js +47 -11
- package/dist/src/BigInt.d.ts +6 -1
- package/dist/src/BigInt.d.ts.map +1 -1
- package/dist/src/BigInt.js +5 -0
- package/dist/src/Brand.d.ts +40 -12
- package/dist/src/Brand.d.ts.map +1 -1
- package/dist/src/Brand.js +5 -0
- package/dist/src/Buffer.d.ts +6 -1
- package/dist/src/Buffer.d.ts.map +1 -1
- package/dist/src/Buffer.js +7 -2
- package/dist/src/Cache.d.ts +10 -2
- package/dist/src/Cache.d.ts.map +1 -1
- package/dist/src/Cache.js +6 -0
- package/dist/src/Callbacks.d.ts +10 -7
- package/dist/src/Callbacks.d.ts.map +1 -1
- package/dist/src/Callbacks.js +23 -13
- package/dist/src/Console.d.ts +361 -69
- package/dist/src/Console.d.ts.map +1 -1
- package/dist/src/Console.js +217 -117
- package/dist/src/Crypto.d.ts +70 -21
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +72 -27
- package/dist/src/Eq.d.ts +22 -2
- package/dist/src/Eq.d.ts.map +1 -1
- package/dist/src/Eq.js +21 -1
- package/dist/src/Error.d.ts +23 -12
- package/dist/src/Error.d.ts.map +1 -1
- package/dist/src/Error.js +27 -11
- package/dist/src/Function.d.ts +128 -56
- package/dist/src/Function.d.ts.map +1 -1
- package/dist/src/Function.js +118 -14
- package/dist/src/Identicon.d.ts +5 -0
- package/dist/src/Identicon.d.ts.map +1 -1
- package/dist/src/Identicon.js +6 -1
- package/dist/src/Lookup.d.ts +160 -0
- package/dist/src/Lookup.d.ts.map +1 -0
- package/dist/src/Lookup.js +192 -0
- package/dist/src/Microtask.d.ts +21 -0
- package/dist/src/Microtask.d.ts.map +1 -0
- package/dist/src/Microtask.js +37 -0
- package/dist/src/Number.d.ts +18 -4
- package/dist/src/Number.d.ts.map +1 -1
- package/dist/src/Number.js +23 -1
- package/dist/src/Object.d.ts +110 -5
- package/dist/src/Object.d.ts.map +1 -1
- package/dist/src/Object.js +108 -5
- package/dist/src/Option.d.ts +58 -0
- package/dist/src/Option.d.ts.map +1 -0
- package/dist/src/Option.js +43 -0
- package/dist/src/Order.d.ts +5 -0
- package/dist/src/Order.d.ts.map +1 -1
- package/dist/src/Order.js +8 -3
- package/dist/src/Platform.d.ts +36 -2
- package/dist/src/Platform.d.ts.map +1 -1
- package/dist/src/Platform.js +10 -6
- package/dist/src/Polyfills.d.ts +27 -0
- package/dist/src/Polyfills.d.ts.map +1 -0
- package/dist/src/Polyfills.js +299 -0
- package/dist/src/Random.d.ts +18 -7
- package/dist/src/Random.d.ts.map +1 -1
- package/dist/src/Random.js +9 -7
- package/dist/src/Redacted.d.ts +7 -4
- package/dist/src/Redacted.d.ts.map +1 -1
- package/dist/src/Redacted.js +5 -0
- package/dist/src/Ref.d.ts +31 -16
- package/dist/src/Ref.d.ts.map +1 -1
- package/dist/src/Ref.js +35 -7
- package/dist/src/RefCount.d.ts +62 -0
- package/dist/src/RefCount.d.ts.map +1 -0
- package/dist/src/RefCount.js +83 -0
- package/dist/src/Relation.d.ts +84 -29
- package/dist/src/Relation.d.ts.map +1 -1
- package/dist/src/Relation.js +83 -105
- package/dist/src/Resource.d.ts +263 -0
- package/dist/src/Resource.d.ts.map +1 -0
- package/dist/src/Resource.js +389 -0
- package/dist/src/Result.d.ts +390 -374
- package/dist/src/Result.d.ts.map +1 -1
- package/dist/src/Result.js +142 -70
- package/dist/src/Schedule.d.ts +953 -0
- package/dist/src/Schedule.d.ts.map +1 -0
- package/dist/src/Schedule.js +1199 -0
- package/dist/src/Set.d.ts +181 -0
- package/dist/src/Set.d.ts.map +1 -0
- package/dist/src/Set.js +137 -0
- package/dist/src/Skiplist.d.ts +6 -1
- package/dist/src/Skiplist.d.ts.map +1 -1
- package/dist/src/Skiplist.js +5 -0
- package/dist/src/Sqlite.d.ts +160 -60
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +290 -190
- package/dist/src/Store.d.ts +36 -28
- package/dist/src/Store.d.ts.map +1 -1
- package/dist/src/Store.js +55 -15
- package/dist/src/String.d.ts +5 -0
- package/dist/src/String.d.ts.map +1 -1
- package/dist/src/String.js +5 -0
- package/dist/src/Task.d.ts +2263 -423
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +1488 -348
- package/dist/src/Test.d.ts +122 -0
- package/dist/src/Test.d.ts.map +1 -0
- package/dist/src/Test.js +66 -0
- package/dist/src/Time.d.ts +201 -48
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +190 -86
- package/dist/src/Tracer.d.ts +48 -0
- package/dist/src/Tracer.d.ts.map +1 -0
- package/dist/src/Tracer.js +6 -0
- package/dist/src/Type.d.ts +582 -209
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +362 -240
- package/dist/src/Types.d.ts +160 -6
- package/dist/src/Types.d.ts.map +1 -1
- package/dist/src/Types.js +22 -2
- package/dist/src/WebSocket.d.ts +113 -58
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/WebSocket.js +210 -118
- package/dist/src/Worker.d.ts +245 -60
- package/dist/src/Worker.d.ts.map +1 -1
- package/dist/src/Worker.js +220 -64
- package/dist/src/index.d.ts +25 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +19 -3
- package/dist/src/local-first/Db.d.ts +24 -213
- package/dist/src/local-first/Db.d.ts.map +1 -1
- package/dist/src/local-first/Db.js +622 -293
- package/dist/src/local-first/Error.d.ts +12 -0
- package/dist/src/local-first/Error.d.ts.map +1 -0
- package/dist/src/local-first/Error.js +6 -0
- package/dist/src/local-first/Evolu.d.ts +330 -285
- package/dist/src/local-first/Evolu.d.ts.map +1 -1
- package/dist/src/local-first/Evolu.js +472 -402
- package/dist/src/local-first/LocalAuth.d.ts +10 -10
- package/dist/src/local-first/LocalAuth.d.ts.map +1 -1
- package/dist/src/local-first/LocalAuth.js +6 -1
- package/dist/src/local-first/Owner.d.ts +70 -27
- package/dist/src/local-first/Owner.d.ts.map +1 -1
- package/dist/src/local-first/Owner.js +27 -14
- package/dist/src/local-first/Protocol.d.ts +58 -50
- package/dist/src/local-first/Protocol.d.ts.map +1 -1
- package/dist/src/local-first/Protocol.js +253 -155
- package/dist/src/local-first/Query.d.ts +133 -43
- package/dist/src/local-first/Query.d.ts.map +1 -1
- package/dist/src/local-first/Query.js +139 -90
- package/dist/src/local-first/Relay.d.ts +18 -38
- package/dist/src/local-first/Relay.d.ts.map +1 -1
- package/dist/src/local-first/Relay.js +59 -171
- package/dist/src/local-first/Schema.d.ts +139 -144
- package/dist/src/local-first/Schema.d.ts.map +1 -1
- package/dist/src/local-first/Schema.js +78 -163
- package/dist/src/local-first/Shared.d.ts +125 -0
- package/dist/src/local-first/Shared.d.ts.map +1 -0
- package/dist/src/local-first/Shared.js +569 -0
- package/dist/src/local-first/Storage.d.ts +50 -53
- package/dist/src/local-first/Storage.d.ts.map +1 -1
- package/dist/src/local-first/Storage.js +121 -173
- package/dist/src/local-first/Timestamp.d.ts +28 -35
- package/dist/src/local-first/Timestamp.d.ts.map +1 -1
- package/dist/src/local-first/Timestamp.js +24 -25
- package/dist/src/local-first/index.d.ts +2 -15
- package/dist/src/local-first/index.d.ts.map +1 -1
- package/dist/src/local-first/index.js +2 -15
- package/package.json +36 -26
- package/src/Array.ts +467 -106
- package/src/Assert.ts +87 -12
- package/src/BigInt.ts +7 -1
- package/src/Brand.ts +41 -12
- package/src/Buffer.ts +10 -4
- package/src/Cache.ts +11 -2
- package/src/Callbacks.ts +33 -23
- package/src/Console.ts +567 -178
- package/src/Crypto.ts +111 -62
- package/src/Eq.ts +30 -3
- package/src/Error.ts +50 -34
- package/src/Function.ts +140 -68
- package/src/Identicon.ts +7 -1
- package/src/Lookup.ts +415 -0
- package/src/Microtask.ts +58 -0
- package/src/Number.ts +40 -7
- package/src/Object.ts +155 -16
- package/src/Option.ts +74 -0
- package/src/Order.ts +11 -3
- package/src/Platform.ts +43 -7
- package/src/Polyfills.ts +465 -0
- package/src/Random.ts +25 -11
- package/src/Redacted.ts +8 -4
- package/src/Ref.ts +72 -21
- package/src/RefCount.ts +170 -0
- package/src/Relation.ts +188 -136
- package/src/Resource.ts +864 -0
- package/src/Result.ts +548 -381
- package/src/Schedule.ts +1471 -0
- package/src/Set.ts +247 -0
- package/src/Skiplist.ts +7 -1
- package/src/Sqlite.ts +409 -304
- package/src/Store.ts +94 -48
- package/src/String.ts +6 -0
- package/src/Task.ts +3685 -740
- package/src/Test.ts +162 -0
- package/src/Time.ts +348 -145
- package/src/Tracer.ts +54 -0
- package/src/Type.ts +1064 -630
- package/src/Types.ts +202 -7
- package/src/WebSocket.ts +311 -178
- package/src/Worker.ts +527 -147
- package/src/index.ts +74 -3
- package/src/local-first/Db.ts +871 -597
- package/src/local-first/Error.ts +17 -0
- package/src/local-first/Evolu.ts +884 -823
- package/src/local-first/LocalAuth.ts +10 -10
- package/src/local-first/Owner.ts +94 -42
- package/src/local-first/Protocol.ts +440 -303
- package/src/local-first/Query.ts +243 -194
- package/src/local-first/Relay.ts +91 -252
- package/src/local-first/Schema.ts +284 -394
- package/src/local-first/Shared.ts +932 -0
- package/src/local-first/Storage.ts +209 -282
- package/src/local-first/Timestamp.ts +38 -45
- package/src/local-first/index.ts +2 -16
- package/LICENSE +0 -21
- package/dist/src/Instances.d.ts +0 -34
- package/dist/src/Instances.d.ts.map +0 -1
- package/dist/src/Instances.js +0 -44
- package/dist/src/Resources.d.ts +0 -118
- package/dist/src/Resources.d.ts.map +0 -1
- package/dist/src/Resources.js +0 -197
- package/dist/src/local-first/Platform.d.ts +0 -25
- package/dist/src/local-first/Platform.d.ts.map +0 -1
- package/dist/src/local-first/Platform.js +0 -1
- package/dist/src/local-first/Public.d.ts +0 -22
- package/dist/src/local-first/Public.d.ts.map +0 -1
- package/dist/src/local-first/Public.js +0 -15
- package/dist/src/local-first/PublicKysely.d.ts +0 -148
- package/dist/src/local-first/PublicKysely.d.ts.map +0 -1
- package/dist/src/local-first/PublicKysely.js +0 -184
- package/dist/src/local-first/Sync.d.ts +0 -112
- package/dist/src/local-first/Sync.d.ts.map +0 -1
- package/dist/src/local-first/Sync.js +0 -529
- package/src/Instances.ts +0 -90
- package/src/Resources.ts +0 -367
- package/src/local-first/Platform.ts +0 -27
- package/src/local-first/Public.ts +0 -42
- package/src/local-first/PublicKysely.ts +0 -239
- package/src/local-first/Sync.ts +0 -960
package/src/Store.ts
CHANGED
|
@@ -1,80 +1,126 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Observable state container with change notifications.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { Eq } from "./Eq.js";
|
|
8
|
+
import { eqStrict } from "./Eq.js";
|
|
9
|
+
import type { Ref } from "./Ref.js";
|
|
10
|
+
import { createRef } from "./Ref.js";
|
|
3
11
|
|
|
4
12
|
/**
|
|
5
|
-
* A store for managing state with change notifications.
|
|
6
|
-
* subscriptions.
|
|
7
|
-
*
|
|
13
|
+
* A store for managing state with change notifications. Like a {@link Ref} with
|
|
14
|
+
* subscriptions.
|
|
15
|
+
*
|
|
16
|
+
* Store is a valid dependency in Evolu's [Dependency
|
|
17
|
+
* Injection](https://evolu.dev/docs/dependency-injection) pattern—use it when
|
|
18
|
+
* functions need shared mutable state with subscriptions.
|
|
8
19
|
*/
|
|
9
|
-
export interface Store<T> extends Ref<T> {
|
|
10
|
-
/**
|
|
11
|
-
* Registers a listener to be called on state changes and returns a function
|
|
12
|
-
* to unsubscribe.
|
|
13
|
-
*/
|
|
14
|
-
readonly subscribe: StoreSubscribe;
|
|
20
|
+
export interface Store<T> extends ReadonlyStore<T>, Ref<T> {}
|
|
15
21
|
|
|
22
|
+
/**
|
|
23
|
+
* A read-only view of a {@link Store} that provides state access and change
|
|
24
|
+
* notifications without allowing modifications.
|
|
25
|
+
*
|
|
26
|
+
* Use {@link ReadonlyStore} in public APIs where consumers should observe state
|
|
27
|
+
* but not modify it directly.
|
|
28
|
+
*/
|
|
29
|
+
export interface ReadonlyStore<T> extends Disposable {
|
|
16
30
|
/** Returns the current state of the store. */
|
|
17
31
|
readonly get: () => T;
|
|
18
32
|
|
|
19
33
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*/
|
|
23
|
-
readonly set: (state: T) => void;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Modifies the store's state by applying a callback function to the current
|
|
27
|
-
* state and notifies listeners if the state changes.
|
|
34
|
+
* Registers a listener to be called on state changes and returns a function
|
|
35
|
+
* to unsubscribe.
|
|
28
36
|
*/
|
|
29
|
-
readonly
|
|
37
|
+
readonly subscribe: (listener: Listener) => Unsubscribe;
|
|
30
38
|
}
|
|
31
39
|
|
|
32
|
-
/**
|
|
33
|
-
export type
|
|
40
|
+
/** Callback used by {@link ReadonlyStore.subscribe} to observe changes. */
|
|
41
|
+
export type Listener = () => void;
|
|
34
42
|
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
export type
|
|
43
|
+
/**
|
|
44
|
+
* Function returned by {@link ReadonlyStore.subscribe} to stop observing
|
|
45
|
+
* changes.
|
|
46
|
+
*/
|
|
47
|
+
export type Unsubscribe = () => void;
|
|
40
48
|
|
|
41
49
|
/**
|
|
42
50
|
* Creates a store with the given initial state. The store encapsulates its
|
|
43
|
-
* state, which can be read with `get` and updated with `set` or `
|
|
51
|
+
* state, which can be read with `get` and updated with `set` or `update`. All
|
|
44
52
|
* changes are broadcast to subscribers.
|
|
45
53
|
*
|
|
46
|
-
* By default, state changes are detected using
|
|
47
|
-
*
|
|
54
|
+
* By default, state changes are detected using strict equality (`===`). You can
|
|
55
|
+
* provide a custom equality function as the second argument.
|
|
48
56
|
*/
|
|
49
|
-
export const createStore = <T>(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
currentState = newState;
|
|
59
|
-
listeners.forEach((listener) => {
|
|
60
|
-
listener();
|
|
61
|
-
});
|
|
57
|
+
export const createStore = <T>(initialState: T, eq?: Eq<T>): Store<T> => {
|
|
58
|
+
const equality = eq ?? eqStrict;
|
|
59
|
+
const ref = createRef(initialState);
|
|
60
|
+
const listeners = new Set<Listener>();
|
|
61
|
+
|
|
62
|
+
const notifyIfChanged = (previousState: T): void => {
|
|
63
|
+
if (!equality(previousState, ref.get())) {
|
|
64
|
+
for (const listener of listeners) listener();
|
|
65
|
+
}
|
|
62
66
|
};
|
|
63
67
|
|
|
64
68
|
return {
|
|
69
|
+
get: ref.get,
|
|
65
70
|
subscribe: (listener) => {
|
|
66
71
|
listeners.add(listener);
|
|
67
72
|
return () => listeners.delete(listener);
|
|
68
73
|
},
|
|
69
74
|
|
|
70
|
-
get: () => currentState,
|
|
71
|
-
|
|
72
75
|
set: (state) => {
|
|
73
|
-
|
|
76
|
+
const previousState = ref.get();
|
|
77
|
+
ref.set(state);
|
|
78
|
+
notifyIfChanged(previousState);
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
getAndSet: (state) => {
|
|
82
|
+
const previousState = ref.getAndSet(state);
|
|
83
|
+
notifyIfChanged(previousState);
|
|
84
|
+
return previousState;
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
setAndGet: (state) => {
|
|
88
|
+
const previousState = ref.get();
|
|
89
|
+
ref.set(state);
|
|
90
|
+
notifyIfChanged(previousState);
|
|
91
|
+
return ref.get();
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
update: (updater) => {
|
|
95
|
+
const previousState = ref.get();
|
|
96
|
+
ref.update(updater);
|
|
97
|
+
notifyIfChanged(previousState);
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
getAndUpdate: (updater) => {
|
|
101
|
+
const previousState = ref.getAndUpdate(updater);
|
|
102
|
+
notifyIfChanged(previousState);
|
|
103
|
+
return previousState;
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
updateAndGet: (updater) => {
|
|
107
|
+
const previousState = ref.get();
|
|
108
|
+
ref.updateAndGet(updater);
|
|
109
|
+
notifyIfChanged(previousState);
|
|
110
|
+
return ref.get();
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
modify: <R>(
|
|
114
|
+
updater: (current: T) => readonly [result: R, nextState: T],
|
|
115
|
+
): R => {
|
|
116
|
+
const previousState = ref.get();
|
|
117
|
+
const result = ref.modify(updater);
|
|
118
|
+
notifyIfChanged(previousState);
|
|
119
|
+
return result;
|
|
74
120
|
},
|
|
75
121
|
|
|
76
|
-
|
|
77
|
-
|
|
122
|
+
[Symbol.dispose]: () => {
|
|
123
|
+
listeners.clear();
|
|
78
124
|
},
|
|
79
125
|
};
|
|
80
126
|
};
|