@evolu/common 8.0.0-next.5 → 8.0.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/dist/src/Array.d.ts +279 -173
- package/dist/src/Array.d.ts.map +1 -1
- package/dist/src/Array.js +105 -101
- package/dist/src/Assert.d.ts +39 -44
- package/dist/src/Assert.d.ts.map +1 -1
- package/dist/src/Assert.js +38 -31
- package/dist/src/BigInt.d.ts +6 -3
- package/dist/src/BigInt.d.ts.map +1 -1
- package/dist/src/BigInt.js +5 -2
- package/dist/src/Brand.d.ts +27 -40
- package/dist/src/Brand.d.ts.map +1 -1
- package/dist/src/Buffer.d.ts +27 -11
- package/dist/src/Buffer.d.ts.map +1 -1
- package/dist/src/Cache.d.ts +9 -4
- package/dist/src/Cache.d.ts.map +1 -1
- package/dist/src/Cache.js +8 -3
- package/dist/src/Callbacks.d.ts +30 -19
- package/dist/src/Callbacks.d.ts.map +1 -1
- package/dist/src/Console.d.ts +145 -66
- package/dist/src/Console.d.ts.map +1 -1
- package/dist/src/Console.js +91 -43
- package/dist/src/Crypto.d.ts +85 -42
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +44 -20
- package/dist/src/Eq.d.ts +87 -21
- package/dist/src/Eq.d.ts.map +1 -1
- package/dist/src/Eq.js +67 -19
- package/dist/src/Error.d.ts +3 -3
- package/dist/src/Error.d.ts.map +1 -1
- package/dist/src/Function.d.ts +119 -58
- package/dist/src/Function.d.ts.map +1 -1
- package/dist/src/Function.js +86 -43
- package/dist/src/Http.d.ts +394 -0
- package/dist/src/Http.d.ts.map +1 -0
- package/dist/src/Http.js +102 -0
- package/dist/src/Identicon.d.ts +16 -7
- package/dist/src/Identicon.d.ts.map +1 -1
- package/dist/src/Identicon.js +14 -5
- package/dist/src/LeakDetector.d.ts +88 -0
- package/dist/src/LeakDetector.d.ts.map +1 -0
- package/dist/src/LeakDetector.js +86 -0
- package/dist/src/LockManager.d.ts +18 -9
- package/dist/src/LockManager.d.ts.map +1 -1
- package/dist/src/LockManager.js +7 -8
- package/dist/src/Lookup.d.ts +43 -13
- package/dist/src/Lookup.d.ts.map +1 -1
- package/dist/src/Lookup.js +28 -8
- package/dist/src/Microtask.d.ts +1 -1
- package/dist/src/Microtask.d.ts.map +1 -1
- package/dist/src/Microtask.js +3 -7
- package/dist/src/Number.d.ts +49 -13
- package/dist/src/Number.d.ts.map +1 -1
- package/dist/src/Number.js +34 -5
- package/dist/src/Object.d.ts +160 -40
- package/dist/src/Object.d.ts.map +1 -1
- package/dist/src/Object.js +92 -46
- package/dist/src/Option.d.ts +10 -7
- package/dist/src/Option.d.ts.map +1 -1
- package/dist/src/Option.js +9 -6
- package/dist/src/Order.d.ts +21 -21
- package/dist/src/Order.d.ts.map +1 -1
- package/dist/src/Order.js +18 -21
- package/dist/src/Platform.d.ts +31 -0
- package/dist/src/Platform.d.ts.map +1 -1
- package/dist/src/Platform.js +98 -0
- package/dist/src/Random.d.ts +32 -17
- package/dist/src/Random.d.ts.map +1 -1
- package/dist/src/Random.js +12 -8
- package/dist/src/Redacted.d.ts +43 -29
- package/dist/src/Redacted.d.ts.map +1 -1
- package/dist/src/Redacted.js +14 -3
- package/dist/src/Ref.d.ts +11 -3
- package/dist/src/Ref.d.ts.map +1 -1
- package/dist/src/Ref.js +2 -2
- package/dist/src/RefCount.d.ts +2 -6
- package/dist/src/RefCount.d.ts.map +1 -1
- package/dist/src/RefCount.js +33 -90
- package/dist/src/Relation.d.ts +70 -5
- package/dist/src/Relation.d.ts.map +1 -1
- package/dist/src/Relation.js +77 -2
- package/dist/src/Resource.d.ts +590 -155
- package/dist/src/Resource.d.ts.map +1 -1
- package/dist/src/Resource.js +592 -343
- package/dist/src/Result.d.ts +838 -191
- package/dist/src/Result.d.ts.map +1 -1
- package/dist/src/Result.js +163 -102
- package/dist/src/Schedule.d.ts +684 -231
- package/dist/src/Schedule.d.ts.map +1 -1
- package/dist/src/Schedule.js +766 -295
- package/dist/src/Set.d.ts +89 -40
- package/dist/src/Set.d.ts.map +1 -1
- package/dist/src/Set.js +50 -29
- package/dist/src/Sqlite.d.ts +29 -72
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +39 -45
- package/dist/src/StackTrace.d.ts +40 -0
- package/dist/src/StackTrace.d.ts.map +1 -0
- package/dist/src/StackTrace.js +140 -0
- package/dist/src/Store.d.ts +5 -4
- package/dist/src/Store.d.ts.map +1 -1
- package/dist/src/Store.js +5 -4
- package/dist/src/String.d.ts +7 -1
- package/dist/src/String.d.ts.map +1 -1
- package/dist/src/String.js +20 -7
- package/dist/src/Task.d.ts +3428 -1629
- package/dist/src/Task.d.ts.map +1 -1
- package/dist/src/Task.js +1876 -1279
- package/dist/src/Test.d.ts +17 -124
- package/dist/src/Test.d.ts.map +1 -1
- package/dist/src/Test.js +17 -68
- package/dist/src/Time.d.ts +108 -49
- package/dist/src/Time.d.ts.map +1 -1
- package/dist/src/Time.js +172 -73
- package/dist/src/Type.d.ts +3542 -1926
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +3070 -1784
- package/dist/src/Types.d.ts +200 -100
- package/dist/src/Types.d.ts.map +1 -1
- package/dist/src/Types.js +39 -8
- package/dist/src/WebSocket.d.ts +48 -23
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/WebSocket.js +15 -6
- package/dist/src/Worker.d.ts +94 -36
- package/dist/src/Worker.d.ts.map +1 -1
- package/dist/src/Worker.js +58 -24
- package/dist/src/index.d.ts +55 -52
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/intl/cs.d.ts +94 -0
- package/dist/src/intl/cs.d.ts.map +1 -0
- package/dist/src/intl/cs.js +220 -0
- package/dist/src/intl/index.d.ts +7 -0
- package/dist/src/intl/index.d.ts.map +1 -0
- package/dist/src/intl/index.js +6 -0
- package/dist/src/local-first/Db.d.ts +12 -8
- package/dist/src/local-first/Db.d.ts.map +1 -1
- package/dist/src/local-first/Db.js +107 -130
- package/dist/src/local-first/Error.d.ts +4 -4
- package/dist/src/local-first/Evolu.d.ts +338 -92
- package/dist/src/local-first/Evolu.d.ts.map +1 -1
- package/dist/src/local-first/Evolu.js +47 -55
- package/dist/src/local-first/LocalAuth.d.ts +4 -4
- package/dist/src/local-first/LocalAuth.d.ts.map +1 -1
- package/dist/src/local-first/Owner.d.ts +61 -24
- package/dist/src/local-first/Owner.d.ts.map +1 -1
- package/dist/src/local-first/Owner.js +45 -8
- package/dist/src/local-first/Protocol.d.ts +44 -31
- package/dist/src/local-first/Protocol.d.ts.map +1 -1
- package/dist/src/local-first/Protocol.js +36 -13
- package/dist/src/local-first/Query.d.ts +147 -62
- package/dist/src/local-first/Query.d.ts.map +1 -1
- package/dist/src/local-first/Query.js +112 -58
- package/dist/src/local-first/Relay.d.ts +44 -14
- package/dist/src/local-first/Relay.d.ts.map +1 -1
- package/dist/src/local-first/Schema.d.ts +92 -41
- package/dist/src/local-first/Schema.d.ts.map +1 -1
- package/dist/src/local-first/Schema.js +25 -8
- package/dist/src/local-first/Shared.d.ts +23 -21
- package/dist/src/local-first/Shared.d.ts.map +1 -1
- package/dist/src/local-first/Shared.js +85 -42
- package/dist/src/local-first/Storage.d.ts +53 -32
- package/dist/src/local-first/Storage.d.ts.map +1 -1
- package/dist/src/local-first/Storage.js +194 -234
- package/dist/src/local-first/Timestamp.d.ts +21 -21
- package/dist/src/local-first/Timestamp.d.ts.map +1 -1
- package/dist/src/local-first/Timestamp.js +2 -2
- package/dist/src/local-first/index.d.ts +11 -11
- package/package.json +14 -13
- package/src/Array.ts +306 -205
- package/src/Assert.ts +48 -68
- package/src/BigInt.ts +6 -3
- package/src/Brand.ts +27 -40
- package/src/Buffer.ts +28 -12
- package/src/Cache.ts +9 -4
- package/src/Callbacks.ts +30 -19
- package/src/Console.ts +156 -84
- package/src/Crypto.ts +83 -41
- package/src/Eq.ts +95 -22
- package/src/Error.ts +5 -2
- package/src/Function.ts +167 -59
- package/src/Http.ts +549 -0
- package/src/Identicon.ts +16 -7
- package/src/LeakDetector.ts +182 -0
- package/src/LockManager.ts +43 -39
- package/src/Lookup.ts +62 -28
- package/src/Microtask.ts +19 -23
- package/src/Number.ts +64 -12
- package/src/Object.ts +173 -49
- package/src/Option.ts +10 -7
- package/src/Order.ts +23 -21
- package/src/Platform.ts +136 -0
- package/src/Polyfills.ts +6 -12
- package/src/Random.ts +32 -19
- package/src/Redacted.ts +44 -30
- package/src/Ref.ts +14 -6
- package/src/RefCount.ts +38 -80
- package/src/Relation.ts +202 -10
- package/src/Resource.ts +1199 -591
- package/src/Result.ts +930 -271
- package/src/Schedule.ts +859 -343
- package/src/Set.ts +89 -40
- package/src/Sqlite.ts +142 -137
- package/src/StackTrace.ts +230 -0
- package/src/Store.ts +8 -7
- package/src/String.ts +22 -5
- package/src/Task.ts +5109 -2845
- package/src/Test.ts +20 -167
- package/src/Time.ts +293 -90
- package/src/Type.ts +10034 -4117
- package/src/Types.ts +227 -101
- package/src/WebSocket.ts +64 -36
- package/src/Worker.ts +180 -72
- package/src/index.ts +55 -52
- package/src/intl/cs.ts +388 -0
- package/src/intl/index.ts +7 -0
- package/src/local-first/Db.ts +161 -190
- package/src/local-first/Error.ts +4 -4
- package/src/local-first/Evolu.ts +495 -250
- package/src/local-first/LocalAuth.ts +6 -12
- package/src/local-first/Owner.ts +58 -21
- package/src/local-first/Protocol.ts +49 -31
- package/src/local-first/Query.ts +146 -61
- package/src/local-first/Relay.ts +51 -21
- package/src/local-first/Schema.ts +109 -51
- package/src/local-first/Shared.ts +253 -214
- package/src/local-first/Storage.ts +266 -264
- package/src/local-first/Timestamp.ts +25 -18
- package/src/local-first/index.ts +11 -11
- package/dist/src/Skiplist.d.ts +0 -28
- package/dist/src/Skiplist.d.ts.map +0 -1
- package/dist/src/Skiplist.js +0 -64
- package/dist/src/Tracer.d.ts +0 -48
- package/dist/src/Tracer.d.ts.map +0 -1
- package/dist/src/Tracer.js +0 -6
- package/src/Skiplist.ts +0 -108
- package/src/Tracer.ts +0 -54
package/dist/src/Relation.js
CHANGED
|
@@ -7,13 +7,13 @@ import { emptyArray } from "./Array.js";
|
|
|
7
7
|
import { assert } from "./Assert.js";
|
|
8
8
|
import { identity } from "./Function.js";
|
|
9
9
|
import { createLookupMap, createLookupSet, } from "./Lookup.js";
|
|
10
|
+
import { NonNegativeInt, onePositiveInt, PositiveInt, zeroNonNegativeInt, } from "./Type.js";
|
|
10
11
|
export function createRelation({ lookupA = identity, lookupB = identity, } = {}) {
|
|
11
12
|
const bByA = createLookupMap({ lookup: lookupA });
|
|
12
13
|
const aByB = createLookupMap({ lookup: lookupB });
|
|
13
14
|
let sizeInternal = 0;
|
|
14
15
|
const removePair = (a, b) => {
|
|
15
16
|
const relatedB = bByA.get(a);
|
|
16
|
-
// This should only fail if a leaked view was mutated via an unsafe cast.
|
|
17
17
|
assertRelationMappingConsistency(relatedB);
|
|
18
18
|
assertRelationMappingConsistency(relatedB.has(b));
|
|
19
19
|
relatedB.delete(b);
|
|
@@ -21,7 +21,6 @@ export function createRelation({ lookupA = identity, lookupB = identity, } = {})
|
|
|
21
21
|
bByA.delete(a);
|
|
22
22
|
}
|
|
23
23
|
const relatedA = aByB.get(b);
|
|
24
|
-
// This should only fail if a leaked view was mutated via an unsafe cast.
|
|
25
24
|
assertRelationMappingConsistency(relatedA);
|
|
26
25
|
assertRelationMappingConsistency(relatedA.has(a));
|
|
27
26
|
relatedA.delete(a);
|
|
@@ -100,6 +99,82 @@ export function createRelation({ lookupA = identity, lookupB = identity, } = {})
|
|
|
100
99
|
size: () => sizeInternal,
|
|
101
100
|
};
|
|
102
101
|
}
|
|
102
|
+
// This can fail if a lookup function violates its pure and stable contract.
|
|
103
103
|
const assertRelationMappingConsistency = (condition) => {
|
|
104
104
|
assert(condition, "Relation mapping inconsistency");
|
|
105
105
|
};
|
|
106
|
+
export function createRefCountedRelation({ lookupA = identity, lookupB = identity, } = {}) {
|
|
107
|
+
const relatedBsByA = createLookupMap({ lookup: lookupA });
|
|
108
|
+
const relatedAsByB = createLookupMap({ lookup: lookupB });
|
|
109
|
+
return {
|
|
110
|
+
increment: (a, b) => {
|
|
111
|
+
let relatedBs = relatedBsByA.get(a);
|
|
112
|
+
const canonicalA = relatedBs ? relatedBs.a : a;
|
|
113
|
+
const relatedAs = relatedAsByB.get(b);
|
|
114
|
+
const canonicalB = relatedAs ? relatedAs.b : b;
|
|
115
|
+
if (!relatedBs) {
|
|
116
|
+
relatedBs = {
|
|
117
|
+
a: canonicalA,
|
|
118
|
+
countsByB: createLookupMap({ lookup: lookupB }),
|
|
119
|
+
};
|
|
120
|
+
relatedBsByA.set(canonicalA, relatedBs);
|
|
121
|
+
}
|
|
122
|
+
const count = relatedBs.countsByB.get(canonicalB);
|
|
123
|
+
if (count) {
|
|
124
|
+
const nextCount = PositiveInt.orThrow(count + 1);
|
|
125
|
+
relatedBs.countsByB.set(canonicalB, nextCount);
|
|
126
|
+
return { a: canonicalA, b: canonicalB, count: nextCount };
|
|
127
|
+
}
|
|
128
|
+
relatedBs.countsByB.set(canonicalB, onePositiveInt);
|
|
129
|
+
if (relatedAs) {
|
|
130
|
+
relatedAs.as.add(canonicalA);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
relatedAsByB.set(canonicalB, {
|
|
134
|
+
b: canonicalB,
|
|
135
|
+
as: createLookupSet({
|
|
136
|
+
lookup: lookupA,
|
|
137
|
+
values: [canonicalA],
|
|
138
|
+
}),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return { a: canonicalA, b: canonicalB, count: onePositiveInt };
|
|
142
|
+
},
|
|
143
|
+
decrement: (a, b) => {
|
|
144
|
+
const relatedBs = relatedBsByA.get(a);
|
|
145
|
+
const relatedAs = relatedAsByB.get(b);
|
|
146
|
+
const count = relatedBs?.countsByB.get(b);
|
|
147
|
+
assert(relatedBs && relatedAs && count, "RefCountedRelation pair must exist before decrement.");
|
|
148
|
+
const nextCount = NonNegativeInt.orThrow(count - 1);
|
|
149
|
+
if (nextCount > 0) {
|
|
150
|
+
relatedBs.countsByB.set(relatedAs.b, PositiveInt.orThrow(nextCount));
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
relatedBs.countsByB.delete(relatedAs.b);
|
|
154
|
+
if (relatedBs.countsByB.size === 0)
|
|
155
|
+
relatedBsByA.delete(relatedBs.a);
|
|
156
|
+
relatedAs.as.delete(relatedBs.a);
|
|
157
|
+
if (relatedAs.as.size === 0)
|
|
158
|
+
relatedAsByB.delete(relatedAs.b);
|
|
159
|
+
}
|
|
160
|
+
return { a: relatedBs.a, b: relatedAs.b, count: nextCount };
|
|
161
|
+
},
|
|
162
|
+
getCount: (a, b) => relatedBsByA.get(a)?.countsByB.get(b) ?? zeroNonNegativeInt,
|
|
163
|
+
getAs: (b) => [...(relatedAsByB.get(b)?.as ?? emptyArray)],
|
|
164
|
+
getBs: (a) => [...(relatedBsByA.get(a)?.countsByB.keys() ?? emptyArray)],
|
|
165
|
+
hasA: (a) => relatedBsByA.has(a),
|
|
166
|
+
hasB: (b) => relatedAsByB.has(b),
|
|
167
|
+
getEntries: () => {
|
|
168
|
+
const entries = [];
|
|
169
|
+
for (const { a, countsByB } of relatedBsByA.values()) {
|
|
170
|
+
for (const [b, count] of countsByB)
|
|
171
|
+
entries.push([a, b, count]);
|
|
172
|
+
}
|
|
173
|
+
return entries;
|
|
174
|
+
},
|
|
175
|
+
clear: () => {
|
|
176
|
+
relatedBsByA.clear();
|
|
177
|
+
relatedAsByB.clear();
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|