@peerbit/shared-log 9.2.13 → 10.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.
Files changed (104) hide show
  1. package/dist/benchmark/get-samples.js +190 -64
  2. package/dist/benchmark/get-samples.js.map +1 -1
  3. package/dist/benchmark/index.js +16 -38
  4. package/dist/benchmark/index.js.map +1 -1
  5. package/dist/benchmark/memory/child.js.map +1 -1
  6. package/dist/benchmark/partial-sync.d.ts +3 -0
  7. package/dist/benchmark/partial-sync.d.ts.map +1 -0
  8. package/dist/benchmark/partial-sync.js +121 -0
  9. package/dist/benchmark/partial-sync.js.map +1 -0
  10. package/dist/benchmark/replication-prune.js.map +1 -1
  11. package/dist/benchmark/replication.js.map +1 -1
  12. package/dist/benchmark/to-rebalance.d.ts +2 -0
  13. package/dist/benchmark/to-rebalance.d.ts.map +1 -0
  14. package/dist/benchmark/to-rebalance.js +117 -0
  15. package/dist/benchmark/to-rebalance.js.map +1 -0
  16. package/dist/benchmark/utils.d.ts +24 -0
  17. package/dist/benchmark/utils.d.ts.map +1 -0
  18. package/dist/benchmark/utils.js +47 -0
  19. package/dist/benchmark/utils.js.map +1 -0
  20. package/dist/src/debounce.d.ts +2 -2
  21. package/dist/src/debounce.d.ts.map +1 -1
  22. package/dist/src/debounce.js +17 -47
  23. package/dist/src/debounce.js.map +1 -1
  24. package/dist/src/exchange-heads.d.ts +1 -13
  25. package/dist/src/exchange-heads.d.ts.map +1 -1
  26. package/dist/src/exchange-heads.js +0 -32
  27. package/dist/src/exchange-heads.js.map +1 -1
  28. package/dist/src/index.d.ts +119 -60
  29. package/dist/src/index.d.ts.map +1 -1
  30. package/dist/src/index.js +1116 -762
  31. package/dist/src/index.js.map +1 -1
  32. package/dist/src/integers.d.ts +22 -0
  33. package/dist/src/integers.d.ts.map +1 -0
  34. package/dist/src/integers.js +76 -0
  35. package/dist/src/integers.js.map +1 -0
  36. package/dist/src/pid.d.ts.map +1 -1
  37. package/dist/src/pid.js +22 -22
  38. package/dist/src/pid.js.map +1 -1
  39. package/dist/src/ranges.d.ts +168 -38
  40. package/dist/src/ranges.d.ts.map +1 -1
  41. package/dist/src/ranges.js +869 -272
  42. package/dist/src/ranges.js.map +1 -1
  43. package/dist/src/replication-domain-hash.d.ts +2 -3
  44. package/dist/src/replication-domain-hash.d.ts.map +1 -1
  45. package/dist/src/replication-domain-hash.js +40 -15
  46. package/dist/src/replication-domain-hash.js.map +1 -1
  47. package/dist/src/replication-domain-time.d.ts +5 -5
  48. package/dist/src/replication-domain-time.d.ts.map +1 -1
  49. package/dist/src/replication-domain-time.js +2 -0
  50. package/dist/src/replication-domain-time.js.map +1 -1
  51. package/dist/src/replication-domain.d.ts +17 -19
  52. package/dist/src/replication-domain.d.ts.map +1 -1
  53. package/dist/src/replication-domain.js +2 -6
  54. package/dist/src/replication-domain.js.map +1 -1
  55. package/dist/src/replication.d.ts +6 -6
  56. package/dist/src/replication.d.ts.map +1 -1
  57. package/dist/src/replication.js +4 -4
  58. package/dist/src/replication.js.map +1 -1
  59. package/dist/src/role.d.ts +3 -6
  60. package/dist/src/role.d.ts.map +1 -1
  61. package/dist/src/role.js +4 -5
  62. package/dist/src/role.js.map +1 -1
  63. package/dist/src/sync/index.d.ts +40 -0
  64. package/dist/src/sync/index.d.ts.map +1 -0
  65. package/dist/src/sync/index.js +2 -0
  66. package/dist/src/sync/index.js.map +1 -0
  67. package/dist/src/sync/rateless-iblt.d.ts +124 -0
  68. package/dist/src/sync/rateless-iblt.d.ts.map +1 -0
  69. package/dist/src/sync/rateless-iblt.js +495 -0
  70. package/dist/src/sync/rateless-iblt.js.map +1 -0
  71. package/dist/src/sync/simple.d.ts +69 -0
  72. package/dist/src/sync/simple.d.ts.map +1 -0
  73. package/dist/src/sync/simple.js +338 -0
  74. package/dist/src/sync/simple.js.map +1 -0
  75. package/dist/src/sync/wasm-init.browser.d.ts +1 -0
  76. package/dist/src/sync/wasm-init.browser.d.ts.map +1 -0
  77. package/dist/src/sync/wasm-init.browser.js +3 -0
  78. package/dist/src/sync/wasm-init.browser.js.map +1 -0
  79. package/dist/src/sync/wasm-init.d.ts +2 -0
  80. package/dist/src/sync/wasm-init.d.ts.map +1 -0
  81. package/dist/src/sync/wasm-init.js +13 -0
  82. package/dist/src/sync/wasm-init.js.map +1 -0
  83. package/dist/src/utils.d.ts +3 -3
  84. package/dist/src/utils.d.ts.map +1 -1
  85. package/dist/src/utils.js +2 -2
  86. package/dist/src/utils.js.map +1 -1
  87. package/package.json +10 -6
  88. package/src/debounce.ts +16 -51
  89. package/src/exchange-heads.ts +1 -23
  90. package/src/index.ts +1532 -1038
  91. package/src/integers.ts +102 -0
  92. package/src/pid.ts +23 -22
  93. package/src/ranges.ts +1204 -413
  94. package/src/replication-domain-hash.ts +43 -18
  95. package/src/replication-domain-time.ts +9 -9
  96. package/src/replication-domain.ts +21 -31
  97. package/src/replication.ts +10 -9
  98. package/src/role.ts +4 -6
  99. package/src/sync/index.ts +51 -0
  100. package/src/sync/rateless-iblt.ts +617 -0
  101. package/src/sync/simple.ts +403 -0
  102. package/src/sync/wasm-init.browser.ts +1 -0
  103. package/src/sync/wasm-init.ts +14 -0
  104. package/src/utils.ts +10 -4
@@ -0,0 +1,338 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { field, variant, vec } from "@dao-xyz/borsh";
11
+ import { Cache } from "@peerbit/cache";
12
+ import { Compare, IntegerCompare, Or, } from "@peerbit/indexer-interface";
13
+ import { Entry, Log } from "@peerbit/log";
14
+ import { SilentDelivery } from "@peerbit/stream-interface";
15
+ import { EntryWithRefs, createExchangeHeadsMessages, } from "../exchange-heads.js";
16
+ import { TransportMessage } from "../message.js";
17
+ let RequestMaybeSync = class RequestMaybeSync extends TransportMessage {
18
+ hashes;
19
+ constructor(props) {
20
+ super();
21
+ this.hashes = props.hashes;
22
+ }
23
+ };
24
+ __decorate([
25
+ field({ type: vec("string") }),
26
+ __metadata("design:type", Array)
27
+ ], RequestMaybeSync.prototype, "hashes", void 0);
28
+ RequestMaybeSync = __decorate([
29
+ variant([0, 1]),
30
+ __metadata("design:paramtypes", [Object])
31
+ ], RequestMaybeSync);
32
+ export { RequestMaybeSync };
33
+ let ResponseMaybeSync = class ResponseMaybeSync extends TransportMessage {
34
+ hashes;
35
+ constructor(props) {
36
+ super();
37
+ this.hashes = props.hashes;
38
+ }
39
+ };
40
+ __decorate([
41
+ field({ type: vec("string") }),
42
+ __metadata("design:type", Array)
43
+ ], ResponseMaybeSync.prototype, "hashes", void 0);
44
+ ResponseMaybeSync = __decorate([
45
+ variant([0, 2]),
46
+ __metadata("design:paramtypes", [Object])
47
+ ], ResponseMaybeSync);
48
+ export { ResponseMaybeSync };
49
+ let RequestMaybeSyncCoordinate = class RequestMaybeSyncCoordinate extends TransportMessage {
50
+ coordinates;
51
+ constructor(props) {
52
+ super();
53
+ this.coordinates = props.coordinates;
54
+ }
55
+ };
56
+ __decorate([
57
+ field({ type: vec("u64") }),
58
+ __metadata("design:type", Array)
59
+ ], RequestMaybeSyncCoordinate.prototype, "coordinates", void 0);
60
+ RequestMaybeSyncCoordinate = __decorate([
61
+ variant([0, 5]),
62
+ __metadata("design:paramtypes", [Object])
63
+ ], RequestMaybeSyncCoordinate);
64
+ export { RequestMaybeSyncCoordinate };
65
+ const getHashesFromSymbols = async (symbols, entryIndex, coordinateToHash) => {
66
+ let queries = [];
67
+ let batchSize = 1; // TODO arg
68
+ let results = new Set();
69
+ const handleBatch = async (end = false) => {
70
+ if (queries.length >= batchSize || (end && queries.length > 0)) {
71
+ const entries = await entryIndex
72
+ .iterate({ query: queries.length > 1 ? new Or(queries) : queries }, { shape: { hash: true, coordinates: true } })
73
+ .all();
74
+ queries = [];
75
+ for (const entry of entries) {
76
+ results.add(entry.value.hash);
77
+ for (const coordinate of entry.value.coordinates) {
78
+ coordinateToHash.add(coordinate, entry.value.hash);
79
+ }
80
+ }
81
+ }
82
+ };
83
+ for (let i = 0; i < symbols.length; i++) {
84
+ const fromCache = coordinateToHash.get(symbols[i]);
85
+ if (fromCache) {
86
+ results.add(fromCache);
87
+ continue;
88
+ }
89
+ const matchQuery = new IntegerCompare({
90
+ key: "coordinates",
91
+ compare: Compare.Equal,
92
+ value: symbols[i],
93
+ });
94
+ queries.push(matchQuery);
95
+ await handleBatch();
96
+ }
97
+ await handleBatch(true);
98
+ return results;
99
+ };
100
+ export class SimpleSyncronizer {
101
+ // map of hash to public keys that we can ask for entries
102
+ syncInFlightQueue;
103
+ syncInFlightQueueInverted;
104
+ // map of hash to public keys that we have asked for entries
105
+ syncInFlight;
106
+ rpc;
107
+ log;
108
+ entryIndex;
109
+ coordinateToHash;
110
+ // Syncing and dedeplucation work
111
+ syncMoreInterval;
112
+ closed;
113
+ constructor(properties) {
114
+ this.syncInFlightQueue = new Map();
115
+ this.syncInFlightQueueInverted = new Map();
116
+ this.syncInFlight = new Map();
117
+ this.rpc = properties.rpc;
118
+ this.log = properties.log;
119
+ this.entryIndex = properties.entryIndex;
120
+ this.coordinateToHash = properties.coordinateToHash;
121
+ }
122
+ onMaybeMissingEntries(properties) {
123
+ return this.rpc.send(new RequestMaybeSync({ hashes: [...properties.entries.keys()] }), {
124
+ priority: 1,
125
+ mode: new SilentDelivery({ to: properties.targets, redundancy: 1 }),
126
+ });
127
+ }
128
+ async onMessage(msg, context) {
129
+ const from = context.from;
130
+ if (msg instanceof RequestMaybeSync) {
131
+ await this.queueSync(msg.hashes, from);
132
+ return true;
133
+ }
134
+ else if (msg instanceof ResponseMaybeSync) {
135
+ // TODO perhaps send less messages to more receivers for performance reasons?
136
+ // TODO wait for previous send to target before trying to send more?
137
+ for await (const message of createExchangeHeadsMessages(this.log, msg.hashes)) {
138
+ await this.rpc.send(message, {
139
+ mode: new SilentDelivery({ to: [context.from], redundancy: 1 }),
140
+ });
141
+ }
142
+ return true;
143
+ }
144
+ else if (msg instanceof RequestMaybeSyncCoordinate) {
145
+ const hashes = await getHashesFromSymbols(msg.coordinates, this.entryIndex, this.coordinateToHash);
146
+ for await (const message of createExchangeHeadsMessages(this.log, hashes)) {
147
+ await this.rpc.send(message, {
148
+ mode: new SilentDelivery({ to: [context.from], redundancy: 1 }),
149
+ priority: 1,
150
+ });
151
+ }
152
+ return true;
153
+ }
154
+ else {
155
+ return false; // no message was consumed
156
+ }
157
+ }
158
+ onReceivedEntries(properties) {
159
+ for (const entry of properties.entries) {
160
+ const set = this.syncInFlight.get(properties.from.hashcode());
161
+ if (set) {
162
+ set.delete(entry.entry.hash);
163
+ if (set?.size === 0) {
164
+ this.syncInFlight.delete(properties.from.hashcode());
165
+ }
166
+ }
167
+ }
168
+ }
169
+ async queueSync(keys, from, options) {
170
+ const requestHashes = [];
171
+ for (const coordinateOrHash of keys) {
172
+ const inFlight = this.syncInFlightQueue.get(coordinateOrHash);
173
+ if (inFlight) {
174
+ if (!inFlight.find((x) => x.hashcode() === from.hashcode())) {
175
+ inFlight.push(from);
176
+ let inverted = this.syncInFlightQueueInverted.get(from.hashcode());
177
+ if (!inverted) {
178
+ inverted = new Set();
179
+ this.syncInFlightQueueInverted.set(from.hashcode(), inverted);
180
+ }
181
+ inverted.add(coordinateOrHash);
182
+ }
183
+ }
184
+ else if (options?.skipCheck ||
185
+ !(await this.checkHasCoordinateOrHash(coordinateOrHash))) {
186
+ this.syncInFlightQueue.set(coordinateOrHash, []);
187
+ requestHashes.push(coordinateOrHash); // request immediately (first time we have seen this hash)
188
+ }
189
+ }
190
+ requestHashes.length > 0 &&
191
+ (await this.requestSync(requestHashes, [
192
+ from.hashcode(),
193
+ ]));
194
+ }
195
+ async requestSync(hashes, to) {
196
+ if (hashes.length === 0) {
197
+ return;
198
+ }
199
+ const now = +new Date();
200
+ for (const node of to) {
201
+ let map = this.syncInFlight.get(node);
202
+ if (!map) {
203
+ map = new Map();
204
+ this.syncInFlight.set(node, map);
205
+ }
206
+ for (const hash of hashes) {
207
+ map.set(hash, { timestamp: now });
208
+ }
209
+ }
210
+ const isBigInt = typeof hashes[0] === "bigint";
211
+ await this.rpc.send(isBigInt
212
+ ? new RequestMaybeSyncCoordinate({ coordinates: hashes })
213
+ : new ResponseMaybeSync({ hashes: hashes }), {
214
+ mode: new SilentDelivery({ to, redundancy: 1 }),
215
+ priority: 1,
216
+ });
217
+ }
218
+ async checkHasCoordinateOrHash(key) {
219
+ return typeof key === "bigint"
220
+ ? (await this.entryIndex.count({ query: { coordinates: key } })) > 0
221
+ : this.log.has(key);
222
+ }
223
+ async open() {
224
+ this.closed = false;
225
+ const requestSyncLoop = async () => {
226
+ /**
227
+ * This method fetches entries that we potentially want.
228
+ * In a case in which we become replicator of a segment,
229
+ * multiple remote peers might want to send us entries
230
+ * This method makes sure that we only request on entry from the remotes at a time
231
+ * so we don't get flooded with the same entry
232
+ */
233
+ const requestHashes = [];
234
+ const from = new Set();
235
+ for (const [key, value] of this.syncInFlightQueue) {
236
+ if (this.closed) {
237
+ return;
238
+ }
239
+ const has = await this.checkHasCoordinateOrHash(key);
240
+ if (!has) {
241
+ // TODO test that this if statement actually does anymeaningfull
242
+ if (value.length > 0) {
243
+ requestHashes.push(key);
244
+ const publicKeyHash = value.shift().hashcode();
245
+ from.add(publicKeyHash);
246
+ const invertedSet = this.syncInFlightQueueInverted.get(publicKeyHash);
247
+ if (invertedSet) {
248
+ if (invertedSet.delete(key)) {
249
+ if (invertedSet.size === 0) {
250
+ this.syncInFlightQueueInverted.delete(publicKeyHash);
251
+ }
252
+ }
253
+ }
254
+ }
255
+ if (value.length === 0) {
256
+ this.syncInFlightQueue.delete(key); // no-one more to ask for this entry
257
+ }
258
+ }
259
+ else {
260
+ this.syncInFlightQueue.delete(key);
261
+ }
262
+ }
263
+ const nowMin10s = +new Date() - 2e4;
264
+ for (const [key, map] of this.syncInFlight) {
265
+ // cleanup "old" missing syncs
266
+ for (const [hash, { timestamp }] of map) {
267
+ if (timestamp < nowMin10s) {
268
+ map.delete(hash);
269
+ }
270
+ }
271
+ if (map.size === 0) {
272
+ this.syncInFlight.delete(key);
273
+ }
274
+ }
275
+ this.requestSync(requestHashes, from).finally(() => {
276
+ if (this.closed) {
277
+ return;
278
+ }
279
+ this.syncMoreInterval = setTimeout(requestSyncLoop, 3e3);
280
+ });
281
+ };
282
+ requestSyncLoop();
283
+ }
284
+ async close() {
285
+ this.closed = true;
286
+ this.syncInFlightQueue.clear();
287
+ this.syncInFlightQueueInverted.clear();
288
+ this.syncInFlight.clear();
289
+ clearTimeout(this.syncMoreInterval);
290
+ }
291
+ onEntryAdded(entry) {
292
+ return this.clearSyncProcess(entry.hash);
293
+ }
294
+ onEntryRemoved(hash) {
295
+ return this.clearSyncProcess(hash);
296
+ }
297
+ clearSyncProcess(hash) {
298
+ const inflight = this.syncInFlightQueue.get(hash);
299
+ if (inflight) {
300
+ for (const key of inflight) {
301
+ const map = this.syncInFlightQueueInverted.get(key.hashcode());
302
+ if (map) {
303
+ map.delete(hash);
304
+ if (map.size === 0) {
305
+ this.syncInFlightQueueInverted.delete(key.hashcode());
306
+ }
307
+ }
308
+ }
309
+ this.syncInFlightQueue.delete(hash);
310
+ }
311
+ }
312
+ onPeerDisconnected(key) {
313
+ return this.clearSyncProcessPublicKey(key);
314
+ }
315
+ clearSyncProcessPublicKey(publicKey) {
316
+ this.syncInFlight.delete(publicKey.hashcode());
317
+ const map = this.syncInFlightQueueInverted.get(publicKey.hashcode());
318
+ if (map) {
319
+ for (const hash of map) {
320
+ const arr = this.syncInFlightQueue.get(hash);
321
+ if (arr) {
322
+ const filtered = arr.filter((x) => !x.equals(publicKey));
323
+ if (filtered.length > 0) {
324
+ this.syncInFlightQueue.set(hash, filtered);
325
+ }
326
+ else {
327
+ this.syncInFlightQueue.delete(hash);
328
+ }
329
+ }
330
+ }
331
+ this.syncInFlightQueueInverted.delete(publicKey.hashcode());
332
+ }
333
+ }
334
+ get pending() {
335
+ return this.syncInFlightQueue.size;
336
+ }
337
+ }
338
+ //# sourceMappingURL=simple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple.js","sourceRoot":"","sources":["../../../src/sync/simple.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=wasm-init.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-init.browser.d.ts","sourceRoot":"","sources":["../../../src/sync/wasm-init.browser.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // nothing to do since 'fetch' works as expected in the browsere
3
+ //# sourceMappingURL=wasm-init.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-init.browser.js","sourceRoot":"","sources":["../../../src/sync/wasm-init.browser.ts"],"names":[],"mappings":";AAAA,gEAAgE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wasm-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-init.d.ts","sourceRoot":"","sources":["../../../src/sync/wasm-init.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ // Override globalThis.fetch to intercept .wasm requests
2
+ import { readFile } from "fs/promises";
3
+ const defaultFetch = globalThis.fetch.bind(globalThis);
4
+ globalThis.fetch = async (url, options) => {
5
+ // If you have multiple wasm files, you might use some logic to handle them.
6
+ // Here, we assume any request ending in `.wasm` is local on disk at the same path.
7
+ if (url.toString().endsWith(".wasm")) {
8
+ // Return a NodeResponse that looks enough like a fetch Response
9
+ return readFile(url);
10
+ }
11
+ return defaultFetch(url, options);
12
+ };
13
+ //# sourceMappingURL=wasm-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-init.js","sourceRoot":"","sources":["../../../src/sync/wasm-init.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtD,UAAU,CAAC,KAAa,GAAG,KAAK,EAAE,GAAQ,EAAE,OAAY,EAAE,EAAE;IAC5D,4EAA4E;IAC5E,mFAAmF;IACnF,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,gEAAgE;QAChE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { Entry, ShallowEntry } from "@peerbit/log";
2
2
  import type { EntryWithRefs } from "./exchange-heads.js";
3
- import { EntryReplicated } from "./ranges.js";
4
- export declare const groupByGid: <T extends ShallowEntry | Entry<any> | EntryWithRefs<any> | EntryReplicated>(entries: T[]) => Promise<Map<string, T[]>>;
5
- export declare const groupByGidSync: <T extends ShallowEntry | EntryReplicated>(entries: T[]) => Promise<Map<string, T[]>>;
3
+ import { type EntryReplicated } from "./ranges.js";
4
+ export declare const groupByGid: <T extends ShallowEntry | Entry<any> | EntryWithRefs<any> | EntryReplicated<any>>(entries: T[]) => Promise<Map<string, T[]>>;
5
+ export declare const groupByGidSync: <T extends ShallowEntry | EntryReplicated<any>>(entries: T[]) => Promise<Map<string, T[]>>;
6
6
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,UAAU,GACtB,CAAC,SAAS,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,eAAe,WAEjE,CAAC,EAAE,KACV,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAmB1B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,YAAY,GAAG,eAAe,WACnE,CAAC,EAAE,KACV,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAiB1B,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,aAAa,CAAC;AAEtE,eAAO,MAAM,UAAU,GACtB,CAAC,SACE,YAAY,GACZ,KAAK,CAAC,GAAG,CAAC,GACV,aAAa,CAAC,GAAG,CAAC,GAClB,eAAe,CAAC,GAAG,CAAC,WAEd,CAAC,EAAE,KACV,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAmB1B,CAAC;AAEF,eAAO,MAAM,cAAc,GAC1B,CAAC,SAAS,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,WAEpC,CAAC,EAAE,KACV,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAiB1B,CAAC"}
package/dist/src/utils.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Entry, ShallowEntry } from "@peerbit/log";
2
- import { EntryReplicated } from "./ranges.js";
2
+ import { isEntryReplicated } from "./ranges.js";
3
3
  export const groupByGid = async (entries) => {
4
4
  const groupByGid = new Map();
5
5
  for (const head of entries) {
@@ -7,7 +7,7 @@ export const groupByGid = async (entries) => {
7
7
  ? (await head.getMeta()).gid
8
8
  : head instanceof ShallowEntry
9
9
  ? head.meta.gid
10
- : head instanceof EntryReplicated
10
+ : isEntryReplicated(head)
11
11
  ? head.gid
12
12
  : (await head.entry.getMeta()).gid;
13
13
  let value = groupByGid.get(gid);
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAG9B,OAAY,EACgB,EAAE;IAC9B,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GACR,IAAI,YAAY,KAAK;YACpB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG;YAC5B,CAAC,CAAC,IAAI,YAAY,YAAY;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACf,CAAC,CAAC,IAAI,YAAY,eAAe;oBAChC,CAAC,CAAC,IAAI,CAAC,GAAG;oBACV,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC;QACvC,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,EAAE,CAAC;YACX,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAClC,OAAY,EACgB,EAAE;IAC9B,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GACR,IAAI,YAAY,KAAK;YACpB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG;YAC5B,CAAC,CAAC,IAAI,YAAY,YAAY;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACf,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACd,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,EAAE,CAAC;YACX,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAwB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAO9B,OAAY,EACgB,EAAE;IAC9B,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GACR,IAAI,YAAY,KAAK;YACpB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG;YAC5B,CAAC,CAAC,IAAI,YAAY,YAAY;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACf,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBACxB,CAAC,CAAC,IAAI,CAAC,GAAG;oBACV,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC;QACvC,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,EAAE,CAAC;YACX,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAGlC,OAAY,EACgB,EAAE;IAC9B,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GACR,IAAI,YAAY,KAAK;YACpB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG;YAC5B,CAAC,CAAC,IAAI,YAAY,YAAY;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACf,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACd,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,EAAE,CAAC;YACX,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/shared-log",
3
- "version": "9.2.13",
3
+ "version": "10.0.0",
4
4
  "description": "Shared log",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -28,6 +28,9 @@
28
28
  "!dist/test",
29
29
  "!**/*.tsbuildinfo"
30
30
  ],
31
+ "browser": {
32
+ "./dist/src/sync/wasm-init.js": "./dist/src/sync/wasm-init.browser.js"
33
+ },
31
34
  "exports": {
32
35
  ".": {
33
36
  "types": "./dist/src/index.d.ts",
@@ -60,12 +63,13 @@
60
63
  "dependencies": {
61
64
  "@dao-xyz/borsh": "^5.2.3",
62
65
  "@peerbit/logger": "1.0.3",
63
- "@peerbit/program": "5.0.8",
64
- "@peerbit/log": "4.0.21",
65
- "@peerbit/rpc": "5.0.19",
66
- "@peerbit/time": "2.0.7"
66
+ "@peerbit/program": "5.1.0",
67
+ "@peerbit/log": "4.0.22",
68
+ "@peerbit/rpc": "5.0.20",
69
+ "@peerbit/time": "2.0.7",
70
+ "@peerbit/riblt": "1.0.0"
67
71
  },
68
72
  "devDependencies": {
69
- "@peerbit/test-utils": "^2.1.9"
73
+ "@peerbit/test-utils": "^2.1.10"
70
74
  }
71
75
  }
package/src/debounce.ts CHANGED
@@ -1,46 +1,3 @@
1
- /* export const debounceFixedInterval = <
2
- T extends (...args: any[]) => any | Promise<any>,
3
- >(
4
- fn: T,
5
- delay: number,
6
- options?: { debug?: boolean, onError?: (error: Error) => void },
7
- ) => {
8
- // a debounce function that will always wait for the delay to pass before invoking the function
9
- // though if delay time has passed it will call the function immediately instead of resetting the timer
10
-
11
- let onError = options?.onError || ((error: Error) => console.error(error));
12
- let timeout: NodeJS.Timeout | null = null;
13
- let lastArgs: any[] = [];
14
- let lastThis: any;
15
- let invokePromise = Promise.resolve();
16
- const invoke = async () => {
17
- const fnCall = fn.apply(lastThis, lastArgs);
18
- invokePromise = Promise.resolve(fnCall ?? {});
19
- await invokePromise.then((res) => {
20
-
21
- timeout = null;
22
- return res;
23
- }).catch(onError);
24
- };
25
-
26
- const debounced = (...args: Parameters<T>) => {
27
- lastArgs = args;
28
- lastThis = this;
29
- if (timeout) {
30
- return;
31
- }
32
- invokePromise.then(() => {
33
- timeout && clearTimeout(timeout);
34
- timeout = setTimeout(invoke, delay);
35
- if (options?.debug) {
36
- console.log("debounceFixedInterval: timeout set", timeout);
37
- }
38
- });
39
- };
40
-
41
- return debounced as T;
42
- };
43
- */
44
1
  export const debounceFixedInterval = <
45
2
  T extends (...args: any[]) => any | Promise<any>,
46
3
  >(
@@ -109,7 +66,7 @@ export const debounceFixedInterval = <
109
66
  return debounced as T;
110
67
  };
111
68
 
112
- export const debounceAcculmulator = <K, T, V>(
69
+ export const debounceAccumulator = <K, T, V>(
113
70
  fn: (args: V) => any,
114
71
  create: () => {
115
72
  delete: (string: K) => void;
@@ -145,18 +102,26 @@ export const debounceAcculmulator = <K, T, V>(
145
102
  export const debouncedAccumulatorMap = <T>(
146
103
  fn: (args: Map<string, T>) => any,
147
104
  delay: number,
105
+ merge?: (into: T, from: T) => void,
148
106
  ) => {
149
- return debounceAcculmulator<
150
- string,
151
- { key: string; value: T },
152
- Map<string, T>
153
- >(
107
+ return debounceAccumulator<string, { key: string; value: T }, Map<string, T>>(
154
108
  fn,
155
109
  () => {
156
110
  const map = new Map();
111
+ let add = merge
112
+ ? (props: { key: string; value: T }) => {
113
+ let prev = map.get(props.key);
114
+ if (prev != null) {
115
+ merge(prev, props.value);
116
+ } else {
117
+ map.set(props.key, props.value);
118
+ }
119
+ }
120
+ : (props: { key: string; value: T }) => {
121
+ map.set(props.key, props.value);
122
+ };
157
123
  return {
158
- add: (props: { key: string; value: T }) =>
159
- map.set(props.key, props.value),
124
+ add,
160
125
  delete: (key: string) => map.delete(key),
161
126
  size: () => map.size,
162
127
  value: map,
@@ -39,28 +39,6 @@ export class ExchangeHeadsMessage<T> extends TransportMessage {
39
39
  }
40
40
  }
41
41
 
42
- @variant([0, 1])
43
- export class RequestMaybeSync extends TransportMessage {
44
- @field({ type: vec("string") })
45
- hashes: string[];
46
-
47
- constructor(props: { hashes: string[] }) {
48
- super();
49
- this.hashes = props.hashes;
50
- }
51
- }
52
-
53
- @variant([0, 2])
54
- export class ResponseMaybeSync extends TransportMessage {
55
- @field({ type: vec("string") })
56
- hashes: string[];
57
-
58
- constructor(props: { hashes: string[] }) {
59
- super();
60
- this.hashes = props.hashes;
61
- }
62
- }
63
-
64
42
  @variant([0, 3])
65
43
  export class RequestIPrune extends TransportMessage {
66
44
  // Hashes which I want to prune
@@ -89,7 +67,7 @@ const MAX_EXCHANGE_MESSAGE_SIZE = 1e5; // 100kb. Too large size might not be fas
89
67
 
90
68
  export const createExchangeHeadsMessages = async function* (
91
69
  log: Log<any>,
92
- heads: Entry<any>[] | string[],
70
+ heads: Entry<any>[] | string[] | Set<string>,
93
71
  ): AsyncGenerator<ExchangeHeadsMessage<any>, void, void> {
94
72
  let size = 0;
95
73
  let current: EntryWithRefs<any>[] = [];