@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.
- package/dist/benchmark/get-samples.js +2 -3
- package/dist/benchmark/get-samples.js.map +1 -1
- package/dist/benchmark/index.js +4 -6
- package/dist/benchmark/index.js.map +1 -1
- package/dist/benchmark/memory/child.d.ts +2 -0
- package/dist/benchmark/memory/child.d.ts.map +1 -0
- package/dist/benchmark/memory/child.js +149 -0
- package/dist/benchmark/memory/child.js.map +1 -0
- package/dist/benchmark/memory/index.d.ts +2 -0
- package/dist/benchmark/memory/index.d.ts.map +1 -0
- package/dist/benchmark/memory/index.js +81 -0
- package/dist/benchmark/memory/index.js.map +1 -0
- package/dist/benchmark/memory/utils.d.ts +13 -0
- package/dist/benchmark/memory/utils.d.ts.map +1 -0
- package/dist/benchmark/memory/utils.js +2 -0
- package/dist/benchmark/memory/utils.js.map +1 -0
- package/dist/benchmark/replication-prune.js +27 -25
- package/dist/benchmark/replication-prune.js.map +1 -1
- package/dist/benchmark/replication.js +15 -16
- package/dist/benchmark/replication.js.map +1 -1
- package/dist/src/debounce.d.ts +25 -0
- package/dist/src/debounce.d.ts.map +1 -0
- package/dist/src/debounce.js +130 -0
- package/dist/src/debounce.js.map +1 -0
- package/dist/src/index.d.ts +55 -21
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +867 -390
- package/dist/src/index.js.map +1 -1
- package/dist/src/pid.d.ts.map +1 -1
- package/dist/src/pid.js +23 -21
- package/dist/src/pid.js.map +1 -1
- package/dist/src/ranges.d.ts +104 -8
- package/dist/src/ranges.d.ts.map +1 -1
- package/dist/src/ranges.js +518 -76
- package/dist/src/ranges.js.map +1 -1
- package/dist/src/replication-domain-hash.d.ts.map +1 -1
- package/dist/src/replication-domain-hash.js.map +1 -1
- package/dist/src/replication-domain-time.d.ts.map +1 -1
- package/dist/src/replication-domain-time.js.map +1 -1
- package/dist/src/replication-domain.d.ts +22 -2
- package/dist/src/replication-domain.d.ts.map +1 -1
- package/dist/src/replication-domain.js +33 -0
- package/dist/src/replication-domain.js.map +1 -1
- package/dist/src/replication.d.ts +1 -55
- package/dist/src/replication.d.ts.map +1 -1
- package/dist/src/replication.js +5 -215
- package/dist/src/replication.js.map +1 -1
- package/dist/src/role.d.ts +1 -0
- package/dist/src/role.d.ts.map +1 -1
- package/dist/src/role.js +1 -0
- package/dist/src/role.js.map +1 -1
- package/dist/src/utils.d.ts +6 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +39 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +5 -5
- package/src/debounce.ts +172 -0
- package/src/index.ts +1282 -562
- package/src/pid.ts +27 -25
- package/src/ranges.ts +794 -181
- package/src/replication-domain-hash.ts +3 -1
- package/src/replication-domain-time.ts +2 -1
- package/src/replication-domain.ts +68 -5
- package/src/replication.ts +9 -235
- package/src/role.ts +1 -0
- package/src/utils.ts +49 -0
package/dist/src/role.js.map
CHANGED
|
@@ -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.
|
|
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.
|
|
64
|
-
"@peerbit/log": "4.0.
|
|
65
|
-
"@peerbit/rpc": "5.0.
|
|
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
|
|
70
|
+
"@peerbit/test-utils": "^2.1.0"
|
|
71
71
|
}
|
|
72
72
|
}
|
package/src/debounce.ts
ADDED
|
@@ -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
|
+
>;
|