@peerbit/shared-log 13.1.17 → 13.2.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 (59) hide show
  1. package/dist/benchmark/index.js +91 -29
  2. package/dist/benchmark/index.js.map +1 -1
  3. package/dist/benchmark/native-graph.js +120 -10
  4. package/dist/benchmark/native-graph.js.map +1 -1
  5. package/dist/benchmark/network-preset-e2e.d.ts +2 -0
  6. package/dist/benchmark/network-preset-e2e.d.ts.map +1 -0
  7. package/dist/benchmark/network-preset-e2e.js +497 -0
  8. package/dist/benchmark/network-preset-e2e.js.map +1 -0
  9. package/dist/benchmark/receive-prune.d.ts +2 -0
  10. package/dist/benchmark/receive-prune.d.ts.map +1 -0
  11. package/dist/benchmark/receive-prune.js +816 -0
  12. package/dist/benchmark/receive-prune.js.map +1 -0
  13. package/dist/benchmark/sync-catchup.d.ts +1 -2
  14. package/dist/benchmark/sync-catchup.d.ts.map +1 -1
  15. package/dist/benchmark/sync-catchup.js +175 -7
  16. package/dist/benchmark/sync-catchup.js.map +1 -1
  17. package/dist/src/checked-prune.d.ts +3 -0
  18. package/dist/src/checked-prune.d.ts.map +1 -1
  19. package/dist/src/checked-prune.js +24 -0
  20. package/dist/src/checked-prune.js.map +1 -1
  21. package/dist/src/exchange-heads.d.ts +238 -1
  22. package/dist/src/exchange-heads.d.ts.map +1 -1
  23. package/dist/src/exchange-heads.js +1512 -36
  24. package/dist/src/exchange-heads.js.map +1 -1
  25. package/dist/src/index.d.ts +276 -5
  26. package/dist/src/index.d.ts.map +1 -1
  27. package/dist/src/index.js +7358 -666
  28. package/dist/src/index.js.map +1 -1
  29. package/dist/src/pid.d.ts.map +1 -1
  30. package/dist/src/pid.js +25 -9
  31. package/dist/src/pid.js.map +1 -1
  32. package/dist/src/ranges.d.ts +11 -2
  33. package/dist/src/ranges.d.ts.map +1 -1
  34. package/dist/src/ranges.js +74 -30
  35. package/dist/src/ranges.js.map +1 -1
  36. package/dist/src/sync/index.d.ts +77 -2
  37. package/dist/src/sync/index.d.ts.map +1 -1
  38. package/dist/src/sync/rateless-iblt.d.ts +11 -5
  39. package/dist/src/sync/rateless-iblt.d.ts.map +1 -1
  40. package/dist/src/sync/rateless-iblt.js +123 -60
  41. package/dist/src/sync/rateless-iblt.js.map +1 -1
  42. package/dist/src/sync/simple.d.ts +56 -4
  43. package/dist/src/sync/simple.d.ts.map +1 -1
  44. package/dist/src/sync/simple.js +495 -63
  45. package/dist/src/sync/simple.js.map +1 -1
  46. package/dist/src/utils.d.ts +2 -1
  47. package/dist/src/utils.d.ts.map +1 -1
  48. package/dist/src/utils.js +49 -2
  49. package/dist/src/utils.js.map +1 -1
  50. package/package.json +27 -17
  51. package/src/checked-prune.ts +27 -0
  52. package/src/exchange-heads.ts +2018 -41
  53. package/src/index.ts +13114 -3167
  54. package/src/pid.ts +24 -13
  55. package/src/ranges.ts +90 -40
  56. package/src/sync/index.ts +115 -2
  57. package/src/sync/rateless-iblt.ts +154 -75
  58. package/src/sync/simple.ts +590 -95
  59. package/src/utils.ts +73 -3
package/src/utils.ts CHANGED
@@ -1,7 +1,71 @@
1
1
  import { Entry, ShallowEntry } from "@peerbit/log";
2
- import type { EntryWithRefs } from "./exchange-heads.js";
2
+ import {
3
+ type EntryWithRefs,
4
+ getPreparedRawExchangeHeadGid,
5
+ getPreparedRawExchangeGid,
6
+ } from "./exchange-heads.js";
3
7
  import { type EntryReplicated, isEntryReplicated } from "./ranges.js";
4
8
 
9
+ const getEntryGid = async (entry: Entry<any>): Promise<string> => {
10
+ try {
11
+ return entry.meta.gid;
12
+ } catch {
13
+ return (await entry.getMeta()).gid;
14
+ }
15
+ };
16
+
17
+ const getEntryGidSync = (entry: Entry<any>): string | undefined => {
18
+ try {
19
+ return entry.meta.gid;
20
+ } catch {
21
+ return undefined;
22
+ }
23
+ };
24
+
25
+ const getHeadGidSync = <
26
+ T extends
27
+ | ShallowEntry
28
+ | Entry<any>
29
+ | EntryWithRefs<any>
30
+ | EntryReplicated<any>,
31
+ >(
32
+ head: T,
33
+ ): string | undefined =>
34
+ head instanceof Entry
35
+ ? getPreparedRawExchangeGid(head) ?? getEntryGidSync(head)
36
+ : head instanceof ShallowEntry
37
+ ? head.meta.gid
38
+ : isEntryReplicated(head)
39
+ ? head.gid
40
+ : getPreparedRawExchangeHeadGid(head) ??
41
+ getPreparedRawExchangeGid(head.entry) ??
42
+ getEntryGidSync(head.entry);
43
+
44
+ export const tryGroupByGidSync = <
45
+ T extends
46
+ | ShallowEntry
47
+ | Entry<any>
48
+ | EntryWithRefs<any>
49
+ | EntryReplicated<any>,
50
+ >(
51
+ entries: T[],
52
+ ): Map<string, T[]> | undefined => {
53
+ const groupByGid: Map<string, T[]> = new Map();
54
+ for (const head of entries) {
55
+ const gid = getHeadGidSync(head);
56
+ if (gid == null) {
57
+ return undefined;
58
+ }
59
+ let value = groupByGid.get(gid);
60
+ if (!value) {
61
+ value = [];
62
+ groupByGid.set(gid, value);
63
+ }
64
+ value.push(head);
65
+ }
66
+ return groupByGid;
67
+ };
68
+
5
69
  export const groupByGid = async <
6
70
  T extends
7
71
  | ShallowEntry
@@ -11,16 +75,22 @@ export const groupByGid = async <
11
75
  >(
12
76
  entries: T[],
13
77
  ): Promise<Map<string, T[]>> => {
78
+ const syncGrouped = tryGroupByGidSync(entries);
79
+ if (syncGrouped) {
80
+ return syncGrouped;
81
+ }
82
+
14
83
  const groupByGid: Map<string, T[]> = new Map();
15
84
  for (const head of entries) {
16
85
  const gid =
17
86
  head instanceof Entry
18
- ? (await head.getMeta()).gid
87
+ ? await getEntryGid(head)
19
88
  : head instanceof ShallowEntry
20
89
  ? head.meta.gid
21
90
  : isEntryReplicated(head)
22
91
  ? head.gid
23
- : (await head.entry.getMeta()).gid;
92
+ : getPreparedRawExchangeHeadGid(head) ??
93
+ (await getEntryGid(head.entry));
24
94
  let value = groupByGid.get(gid);
25
95
  if (!value) {
26
96
  value = [];