@peerbit/shared-log 9.1.2 → 9.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 (66) hide show
  1. package/dist/benchmark/get-samples.js +2 -3
  2. package/dist/benchmark/get-samples.js.map +1 -1
  3. package/dist/benchmark/index.js +4 -6
  4. package/dist/benchmark/index.js.map +1 -1
  5. package/dist/benchmark/memory/child.d.ts +2 -0
  6. package/dist/benchmark/memory/child.d.ts.map +1 -0
  7. package/dist/benchmark/memory/child.js +149 -0
  8. package/dist/benchmark/memory/child.js.map +1 -0
  9. package/dist/benchmark/memory/index.d.ts +2 -0
  10. package/dist/benchmark/memory/index.d.ts.map +1 -0
  11. package/dist/benchmark/memory/index.js +81 -0
  12. package/dist/benchmark/memory/index.js.map +1 -0
  13. package/dist/benchmark/memory/utils.d.ts +13 -0
  14. package/dist/benchmark/memory/utils.d.ts.map +1 -0
  15. package/dist/benchmark/memory/utils.js +2 -0
  16. package/dist/benchmark/memory/utils.js.map +1 -0
  17. package/dist/benchmark/replication-prune.js +27 -25
  18. package/dist/benchmark/replication-prune.js.map +1 -1
  19. package/dist/benchmark/replication.js +15 -16
  20. package/dist/benchmark/replication.js.map +1 -1
  21. package/dist/src/debounce.d.ts +25 -0
  22. package/dist/src/debounce.d.ts.map +1 -0
  23. package/dist/src/debounce.js +130 -0
  24. package/dist/src/debounce.js.map +1 -0
  25. package/dist/src/index.d.ts +55 -21
  26. package/dist/src/index.d.ts.map +1 -1
  27. package/dist/src/index.js +867 -390
  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 +23 -21
  31. package/dist/src/pid.js.map +1 -1
  32. package/dist/src/ranges.d.ts +104 -8
  33. package/dist/src/ranges.d.ts.map +1 -1
  34. package/dist/src/ranges.js +518 -76
  35. package/dist/src/ranges.js.map +1 -1
  36. package/dist/src/replication-domain-hash.d.ts.map +1 -1
  37. package/dist/src/replication-domain-hash.js.map +1 -1
  38. package/dist/src/replication-domain-time.d.ts.map +1 -1
  39. package/dist/src/replication-domain-time.js.map +1 -1
  40. package/dist/src/replication-domain.d.ts +22 -2
  41. package/dist/src/replication-domain.d.ts.map +1 -1
  42. package/dist/src/replication-domain.js +33 -0
  43. package/dist/src/replication-domain.js.map +1 -1
  44. package/dist/src/replication.d.ts +1 -55
  45. package/dist/src/replication.d.ts.map +1 -1
  46. package/dist/src/replication.js +5 -215
  47. package/dist/src/replication.js.map +1 -1
  48. package/dist/src/role.d.ts +1 -0
  49. package/dist/src/role.d.ts.map +1 -1
  50. package/dist/src/role.js +1 -0
  51. package/dist/src/role.js.map +1 -1
  52. package/dist/src/utils.d.ts +6 -0
  53. package/dist/src/utils.d.ts.map +1 -0
  54. package/dist/src/utils.js +39 -0
  55. package/dist/src/utils.js.map +1 -0
  56. package/package.json +5 -5
  57. package/src/debounce.ts +172 -0
  58. package/src/index.ts +1282 -562
  59. package/src/pid.ts +27 -25
  60. package/src/ranges.ts +794 -181
  61. package/src/replication-domain-hash.ts +3 -1
  62. package/src/replication-domain-time.ts +2 -1
  63. package/src/replication-domain.ts +68 -5
  64. package/src/replication.ts +9 -235
  65. package/src/role.ts +1 -0
  66. package/src/utils.ts +49 -0
@@ -1 +1 @@
1
- {"version":3,"file":"role.js","sourceRoot":"","sources":["../../src/role.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"role.js","sourceRoot":"","sources":["../../src/role.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Entry, ShallowEntry } from "@peerbit/log";
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[]>>;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,39 @@
1
+ import { Entry, ShallowEntry } from "@peerbit/log";
2
+ import { EntryReplicated } from "./ranges.js";
3
+ export const groupByGid = async (entries) => {
4
+ const groupByGid = new Map();
5
+ for (const head of entries) {
6
+ const gid = head instanceof Entry
7
+ ? (await head.getMeta()).gid
8
+ : head instanceof ShallowEntry
9
+ ? head.meta.gid
10
+ : head instanceof EntryReplicated
11
+ ? head.gid
12
+ : (await head.entry.getMeta()).gid;
13
+ let value = groupByGid.get(gid);
14
+ if (!value) {
15
+ value = [];
16
+ groupByGid.set(gid, value);
17
+ }
18
+ value.push(head);
19
+ }
20
+ return groupByGid;
21
+ };
22
+ export const groupByGidSync = async (entries) => {
23
+ const groupByGid = new Map();
24
+ for (const head of entries) {
25
+ const gid = head instanceof Entry
26
+ ? (await head.getMeta()).gid
27
+ : head instanceof ShallowEntry
28
+ ? head.meta.gid
29
+ : head.gid;
30
+ let value = groupByGid.get(gid);
31
+ if (!value) {
32
+ value = [];
33
+ groupByGid.set(gid, value);
34
+ }
35
+ value.push(head);
36
+ }
37
+ return groupByGid;
38
+ };
39
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/shared-log",
3
- "version": "9.1.2",
3
+ "version": "9.2.0",
4
4
  "description": "Shared log",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -60,13 +60,13 @@
60
60
  "dependencies": {
61
61
  "@dao-xyz/borsh": "^5.2.3",
62
62
  "@peerbit/logger": "1.0.3",
63
- "@peerbit/program": "5.0.2",
64
- "@peerbit/log": "4.0.10",
65
- "@peerbit/rpc": "5.0.9",
63
+ "@peerbit/program": "5.0.3",
64
+ "@peerbit/log": "4.0.11",
65
+ "@peerbit/rpc": "5.0.10",
66
66
  "@peerbit/time": "2.0.7",
67
67
  "p-debounce": "^4.0.0"
68
68
  },
69
69
  "devDependencies": {
70
- "@peerbit/test-utils": "^2.0.43"
70
+ "@peerbit/test-utils": "^2.1.0"
71
71
  }
72
72
  }
@@ -0,0 +1,172 @@
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
+ export const debounceFixedInterval = <
45
+ T extends (...args: any[]) => any | Promise<any>,
46
+ >(
47
+ fn: T,
48
+ delay: number | (() => number),
49
+ options?: { onError?: (error: Error) => void },
50
+ ) => {
51
+ // A debounce function that waits for the delay after the async function finishes
52
+ // before invoking the function again
53
+ let delayFn: () => number = typeof delay === "number" ? () => delay : delay;
54
+ const onError =
55
+ options?.onError ||
56
+ ((error: Error) => {
57
+ throw error;
58
+ });
59
+ let timeout: NodeJS.Timeout | null = null;
60
+ let lastArgs: any[] | null = null;
61
+ let lastThis: any;
62
+ let invokePromise: Promise<any> = Promise.resolve();
63
+ let pendingCall = false;
64
+ let isRunning = false;
65
+
66
+ const invoke = async () => {
67
+ if (!lastArgs) {
68
+ // No pending calls to process
69
+ timeout = null;
70
+ return;
71
+ }
72
+
73
+ const args = lastArgs;
74
+ lastArgs = null; // Reset arguments
75
+ pendingCall = false; // Reset pending call flag
76
+ isRunning = true;
77
+ try {
78
+ const fnCall = fn.apply(lastThis, args);
79
+ invokePromise = Promise.resolve(fnCall ?? {});
80
+
81
+ await invokePromise;
82
+ } catch (error) {
83
+ onError(error as Error);
84
+ } finally {
85
+ isRunning = false;
86
+ timeout = null;
87
+
88
+ // If there are pending calls, schedule the next invocation
89
+ if (pendingCall) {
90
+ timeout = setTimeout(invoke, delayFn());
91
+ }
92
+ }
93
+ };
94
+
95
+ const debounced = (...args: Parameters<T>) => {
96
+ lastArgs = args;
97
+ lastThis = this;
98
+ pendingCall = true;
99
+
100
+ if (isRunning || timeout) {
101
+ // Function is currently running or timeout is set, do nothing
102
+ return;
103
+ }
104
+
105
+ // No function running and no timeout set, so schedule the invocation
106
+ timeout = setTimeout(invoke, delayFn());
107
+ };
108
+
109
+ return debounced as T;
110
+ };
111
+
112
+ export const debounceAcculmulator = <K, T, V>(
113
+ fn: (args: V) => any,
114
+ create: () => {
115
+ delete: (string: K) => void;
116
+ add: (value: T) => void;
117
+ size: () => number;
118
+ value: V;
119
+ },
120
+ delay: number | (() => number),
121
+ ) => {
122
+ let accumulator = create();
123
+
124
+ const invoke = async () => {
125
+ let toSend = accumulator.value;
126
+ accumulator = create();
127
+ await fn(toSend);
128
+ };
129
+
130
+ const debounced = debounceFixedInterval(invoke, delay);
131
+
132
+ return {
133
+ add: (value: T) => {
134
+ accumulator.add(value);
135
+ debounced();
136
+ },
137
+ delete: (key: K) => {
138
+ accumulator.delete(key);
139
+ },
140
+ size: () => accumulator.size,
141
+ invoke,
142
+ };
143
+ };
144
+
145
+ export const debouncedAccumulatorMap = <T>(
146
+ fn: (args: Map<string, T>) => any,
147
+ delay: number,
148
+ ) => {
149
+ return debounceAcculmulator<
150
+ string,
151
+ { key: string; value: T },
152
+ Map<string, T>
153
+ >(
154
+ fn,
155
+ () => {
156
+ const map = new Map();
157
+ return {
158
+ add: (props: { key: string; value: T }) =>
159
+ map.set(props.key, props.value),
160
+ delete: (key: string) => map.delete(key),
161
+ size: () => map.size,
162
+ value: map,
163
+ clear: () => map.clear(),
164
+ };
165
+ },
166
+ delay,
167
+ );
168
+ };
169
+
170
+ export type DebouncedAccumulatorMap<T> = ReturnType<
171
+ typeof debouncedAccumulatorMap<T>
172
+ >;