@peerbit/react 0.0.24 → 0.0.26
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/lib/esm/usePeer.d.ts +1 -1
- package/lib/esm/usePeer.js.map +1 -1
- package/lib/esm/useProgram.d.ts +1 -1
- package/lib/esm/useProgram.js +5 -5
- package/lib/esm/useProgram.js.map +1 -1
- package/lib/esm/useQuery.d.ts +7 -4
- package/lib/esm/useQuery.js +61 -59
- package/lib/esm/useQuery.js.map +1 -1
- package/package.json +8 -8
- package/src/usePeer.tsx +1 -4
- package/src/useProgram.tsx +6 -5
- package/src/useQuery.tsx +90 -74
package/lib/esm/usePeer.d.ts
CHANGED
package/lib/esm/usePeer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePeer.js","sourceRoot":"","sources":["../../src/usePeer.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"usePeer.js","sourceRoot":"","sources":["../../src/usePeer.tsx"],"names":[],"mappings":"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"}
|
package/lib/esm/useProgram.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare const useProgram: <P extends Program<ExtractArgs<P>, ExtractEvent
|
|
|
7
7
|
keepOpenOnUnmount?: boolean;
|
|
8
8
|
}) => {
|
|
9
9
|
program: P | undefined;
|
|
10
|
-
session:
|
|
10
|
+
session: number;
|
|
11
11
|
loading: boolean;
|
|
12
12
|
promise: Promise<P> | undefined;
|
|
13
13
|
peers: PublicSignKey[];
|
package/lib/esm/useProgram.js
CHANGED
|
@@ -14,7 +14,7 @@ export const useProgram = (addressOrOpen, options) => {
|
|
|
14
14
|
const [id, setId] = useState(options?.id);
|
|
15
15
|
let [loading, setLoading] = useState(true);
|
|
16
16
|
const [session, forceUpdate] = useReducer((x) => x + 1, 0);
|
|
17
|
-
let programLoadingRef = useRef();
|
|
17
|
+
let programLoadingRef = useRef(undefined);
|
|
18
18
|
const [peers, setPeers] = useState([]);
|
|
19
19
|
let closingRef = useRef(Promise.resolve());
|
|
20
20
|
/* if (options?.debug) {
|
|
@@ -80,13 +80,13 @@ export const useProgram = (addressOrOpen, options) => {
|
|
|
80
80
|
changeListener &&
|
|
81
81
|
p.events.removeEventListener("leave", changeListener);
|
|
82
82
|
};
|
|
83
|
-
if (options?.keepOpenOnUnmount) {
|
|
84
|
-
unsubscribe();
|
|
85
|
-
}
|
|
86
83
|
if (programLoadingRef.current === startRef) {
|
|
87
84
|
setProgram(undefined);
|
|
88
85
|
programLoadingRef.current = undefined;
|
|
89
|
-
|
|
86
|
+
}
|
|
87
|
+
if (options?.keepOpenOnUnmount) {
|
|
88
|
+
unsubscribe();
|
|
89
|
+
return; // nothing to close
|
|
90
90
|
}
|
|
91
91
|
return p.close().then(unsubscribe);
|
|
92
92
|
}) || Promise.resolve();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProgram.js","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChE,MAAM,gBAAgB,GAAG,CACrB,CAAK,EACP,EAAE;IACA,IAAI,CAAC;QACD,OAAO,CAAC,EAAE,OAAO,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;AACL,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,UAAU,GAAG,CAItB,aAA0B,EAC1B,OAAuE,EACzE,EAAE;IACA,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAiB,CAAC;IACtD,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAqB,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,iBAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"useProgram.js","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"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"}
|
package/lib/esm/useQuery.d.ts
CHANGED
|
@@ -9,8 +9,11 @@ type QueryOptions = {
|
|
|
9
9
|
query: QueryLike;
|
|
10
10
|
id?: string;
|
|
11
11
|
};
|
|
12
|
-
type
|
|
12
|
+
type RemoteQueryOptions = {
|
|
13
13
|
warmup?: number;
|
|
14
|
+
joining?: {
|
|
15
|
+
waitFor?: number;
|
|
16
|
+
};
|
|
14
17
|
eager?: boolean;
|
|
15
18
|
};
|
|
16
19
|
export declare const useQuery: <T extends Record<string, any>, I extends Record<string, any>, R extends boolean | undefined = true, RT = R extends false ? WithContext<I> : WithIndexedContext<T, I>>(db?: Documents<T, I>, options?: {
|
|
@@ -25,13 +28,13 @@ export declare const useQuery: <T extends Record<string, any>, I extends Record<
|
|
|
25
28
|
prefetch?: boolean;
|
|
26
29
|
onChange?: {
|
|
27
30
|
merge?: boolean | ((c: DocumentsChange<T, I>) => DocumentsChange<T, I> | Promise<DocumentsChange<T, I>> | undefined);
|
|
28
|
-
update?: (prev: RT[], change: DocumentsChange<T, I>) => RT[]
|
|
31
|
+
update?: (prev: RT[], change: DocumentsChange<T, I>) => RT[] | Promise<RT[]>;
|
|
29
32
|
};
|
|
30
33
|
local?: boolean;
|
|
31
|
-
remote?: boolean |
|
|
34
|
+
remote?: boolean | RemoteQueryOptions;
|
|
32
35
|
} & QueryOptions) => {
|
|
33
36
|
items: RT[];
|
|
34
|
-
loadMore: () => Promise<boolean | undefined>;
|
|
37
|
+
loadMore: (n?: number, pollEvenIfWasEmpty?: boolean) => Promise<boolean | undefined>;
|
|
35
38
|
isLoading: boolean;
|
|
36
39
|
empty: () => boolean;
|
|
37
40
|
id: string | undefined;
|
package/lib/esm/useQuery.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useState, useEffect, useRef
|
|
1
|
+
import { useState, useEffect, useRef } from "react";
|
|
2
2
|
import { ClosedError, } from "@peerbit/document";
|
|
3
3
|
import { AbortError } from "@peerbit/time";
|
|
4
4
|
import { NoPeersError } from "@peerbit/shared-log";
|
|
@@ -14,9 +14,7 @@ export const useQuery = (db, options) => {
|
|
|
14
14
|
const emptyResultsRef = useRef(false);
|
|
15
15
|
const closeControllerRef = useRef(null);
|
|
16
16
|
const waitedOnceRef = useRef(false);
|
|
17
|
-
const resetResultsOnReset = useRef(true);
|
|
18
17
|
const [id, setId] = useState(undefined);
|
|
19
|
-
const [resetCounter, invokeReset] = useReducer((n) => n + 1, 0);
|
|
20
18
|
const reverseRef = useRef(options?.reverse);
|
|
21
19
|
useEffect(() => {
|
|
22
20
|
reverseRef.current = options?.reverse;
|
|
@@ -44,17 +42,14 @@ export const useQuery = (db, options) => {
|
|
|
44
42
|
closeControllerRef.current = new AbortController();
|
|
45
43
|
emptyResultsRef.current = false;
|
|
46
44
|
toClose?.iterator.close();
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
setAll([]);
|
|
50
|
-
}
|
|
45
|
+
allRef.current = [];
|
|
46
|
+
setAll([]);
|
|
51
47
|
setIsLoading(false);
|
|
52
48
|
loadingMoreRef.current = false;
|
|
53
|
-
log(
|
|
49
|
+
log("Iterator reset", toClose?.id, fromRef?.id);
|
|
54
50
|
setId(undefined);
|
|
55
51
|
};
|
|
56
52
|
useEffect(() => {
|
|
57
|
-
resetResultsOnReset.current = true;
|
|
58
53
|
waitedOnceRef.current = false;
|
|
59
54
|
}, [db, options?.id ?? options?.query, options?.resolve, options?.reverse]);
|
|
60
55
|
/* ────────────── effect: (re)create iterator ────────────── */
|
|
@@ -65,16 +60,30 @@ export const useQuery = (db, options) => {
|
|
|
65
60
|
}
|
|
66
61
|
const initIterator = () => {
|
|
67
62
|
let id = options?.id ?? uuid();
|
|
63
|
+
let remoteQueryOptions = options.remote == null || options.remote === false
|
|
64
|
+
? false
|
|
65
|
+
: {
|
|
66
|
+
...(typeof options.remote === "object"
|
|
67
|
+
? options.remote
|
|
68
|
+
: {}),
|
|
69
|
+
joining: typeof options.remote === "object" &&
|
|
70
|
+
options.remote.joining?.waitFor !== undefined
|
|
71
|
+
? {
|
|
72
|
+
waitFor: options.remote.joining?.waitFor ??
|
|
73
|
+
5e3,
|
|
74
|
+
onMissedResults: ({ amount }) => {
|
|
75
|
+
loadMore(amount, true);
|
|
76
|
+
},
|
|
77
|
+
}
|
|
78
|
+
: undefined,
|
|
79
|
+
};
|
|
68
80
|
const ref = {
|
|
69
81
|
id,
|
|
70
82
|
iterator: db.index.iterate(options.query ?? {}, {
|
|
71
83
|
local: options?.local ?? true,
|
|
72
|
-
remote:
|
|
73
|
-
? false
|
|
74
|
-
: typeof options.remote === "object"
|
|
75
|
-
? options.remote
|
|
76
|
-
: true,
|
|
84
|
+
remote: remoteQueryOptions,
|
|
77
85
|
resolve: options?.resolve,
|
|
86
|
+
signal: closeControllerRef.current?.signal,
|
|
78
87
|
}),
|
|
79
88
|
itemsConsumed: 0,
|
|
80
89
|
};
|
|
@@ -95,7 +104,7 @@ export const useQuery = (db, options) => {
|
|
|
95
104
|
? options.onChange.merge
|
|
96
105
|
: (c) => c;
|
|
97
106
|
handleChange = async (e) => {
|
|
98
|
-
log(
|
|
107
|
+
log("Merge change", e.detail, "iterator", newIteratorRef.id);
|
|
99
108
|
const filtered = await mergeFn(e.detail);
|
|
100
109
|
if (!filtered ||
|
|
101
110
|
(filtered.added.length === 0 &&
|
|
@@ -104,18 +113,23 @@ export const useQuery = (db, options) => {
|
|
|
104
113
|
let merged;
|
|
105
114
|
if (options.onChange?.update) {
|
|
106
115
|
merged = [
|
|
107
|
-
...options.onChange?.update(allRef.current, filtered),
|
|
116
|
+
...(await options.onChange?.update(allRef.current, filtered)),
|
|
108
117
|
];
|
|
109
118
|
}
|
|
110
119
|
else {
|
|
111
120
|
merged = await db.index.updateResults(allRef.current, filtered, options.query || {}, options.resolve ?? true);
|
|
112
|
-
log(
|
|
121
|
+
log("After update", {
|
|
122
|
+
current: allRef.current,
|
|
123
|
+
merged,
|
|
124
|
+
filtered,
|
|
125
|
+
query: options.query,
|
|
126
|
+
});
|
|
113
127
|
const expectedDiff = filtered.added.length - filtered.removed.length;
|
|
114
128
|
if (merged === allRef.current ||
|
|
115
129
|
(expectedDiff !== 0 &&
|
|
116
130
|
merged.length === allRef.current.length)) {
|
|
117
131
|
// no change
|
|
118
|
-
log(
|
|
132
|
+
log("no change after merge");
|
|
119
133
|
return;
|
|
120
134
|
}
|
|
121
135
|
}
|
|
@@ -133,7 +147,6 @@ export const useQuery = (db, options) => {
|
|
|
133
147
|
options?.id ?? options?.query,
|
|
134
148
|
options?.resolve,
|
|
135
149
|
options?.reverse,
|
|
136
|
-
resetCounter,
|
|
137
150
|
]);
|
|
138
151
|
/* ────────────── loadMore (once-wait aware) ────────────── */
|
|
139
152
|
const batchSize = options?.batchSize ?? 10;
|
|
@@ -152,19 +165,13 @@ export const useQuery = (db, options) => {
|
|
|
152
165
|
}
|
|
153
166
|
return true;
|
|
154
167
|
};
|
|
155
|
-
const reloadAfterTime = () => {
|
|
156
|
-
if (typeof options?.remote === "object" && options.remote.eager) {
|
|
157
|
-
return options.remote.warmup ?? db?.log.timeUntilRoleMaturity;
|
|
158
|
-
}
|
|
159
|
-
return undefined;
|
|
160
|
-
};
|
|
161
168
|
const markWaited = () => {
|
|
162
169
|
waitedOnceRef.current = true;
|
|
163
170
|
};
|
|
164
|
-
const loadMore = async () => {
|
|
171
|
+
const loadMore = async (n = batchSize, pollEvenIfWasEmpty = false) => {
|
|
165
172
|
const iterator = iteratorRef.current;
|
|
166
173
|
if (!iterator ||
|
|
167
|
-
emptyResultsRef.current ||
|
|
174
|
+
(emptyResultsRef.current && !pollEvenIfWasEmpty) ||
|
|
168
175
|
iterator.iterator.done() ||
|
|
169
176
|
loadingMoreRef.current) {
|
|
170
177
|
return false;
|
|
@@ -174,49 +181,44 @@ export const useQuery = (db, options) => {
|
|
|
174
181
|
try {
|
|
175
182
|
/* ── optional replicate-wait ── */
|
|
176
183
|
if (shouldWait()) {
|
|
177
|
-
log(
|
|
178
|
-
let
|
|
179
|
-
const
|
|
184
|
+
log("Wait for replicators", iterator.id);
|
|
185
|
+
let t0 = Date.now();
|
|
186
|
+
const warmup = typeof options?.remote === "object" &&
|
|
180
187
|
typeof options?.remote.warmup === "number"
|
|
181
188
|
? options?.remote.warmup
|
|
182
|
-
:
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
invokeReset();
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
if (!shouldResetAfterMaturity) {
|
|
203
|
-
await promise;
|
|
189
|
+
: undefined;
|
|
190
|
+
if (warmup) {
|
|
191
|
+
await db?.log
|
|
192
|
+
.waitForReplicators({
|
|
193
|
+
timeout: warmup,
|
|
194
|
+
signal: closeControllerRef.current?.signal,
|
|
195
|
+
})
|
|
196
|
+
.catch((e) => {
|
|
197
|
+
if (e instanceof AbortError ||
|
|
198
|
+
e instanceof NoPeersError)
|
|
199
|
+
return;
|
|
200
|
+
console.warn("Remote replicators not ready", e);
|
|
201
|
+
})
|
|
202
|
+
.finally(() => {
|
|
203
|
+
log("Wait for replicators done", iterator.id, "time", Date.now() - t0);
|
|
204
|
+
markWaited();
|
|
205
|
+
});
|
|
204
206
|
}
|
|
205
207
|
}
|
|
206
208
|
else {
|
|
207
|
-
log(
|
|
209
|
+
log("Skip wait for replicators", iterator.id);
|
|
208
210
|
}
|
|
209
211
|
/* ── fetch next batch ── */
|
|
210
|
-
log(
|
|
211
|
-
let newItems = await iterator.iterator.next(
|
|
212
|
+
log("Retrieve next batch", iterator.id);
|
|
213
|
+
let newItems = await iterator.iterator.next(n);
|
|
212
214
|
if (options?.transform) {
|
|
213
|
-
log(
|
|
215
|
+
log("Transform start", iterator.id);
|
|
214
216
|
newItems = await Promise.all(newItems.map(options.transform));
|
|
215
|
-
log(
|
|
217
|
+
log("Transform end", iterator.id);
|
|
216
218
|
}
|
|
217
219
|
/* iterator might have been reset while we were async… */
|
|
218
220
|
if (iteratorRef.current !== iterator) {
|
|
219
|
-
log(
|
|
221
|
+
log("Iterator reset while loading more");
|
|
220
222
|
return false;
|
|
221
223
|
}
|
|
222
224
|
iterator.itemsConsumed += newItems.length;
|
|
@@ -234,7 +236,7 @@ export const useQuery = (db, options) => {
|
|
|
234
236
|
updateAll(combined);
|
|
235
237
|
}
|
|
236
238
|
else {
|
|
237
|
-
log(
|
|
239
|
+
log("No new items", iterator.id);
|
|
238
240
|
}
|
|
239
241
|
return !iterator.iterator.done();
|
|
240
242
|
}
|
package/lib/esm/useQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/useQuery.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/useQuery.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peerbit/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.26",
|
|
4
4
|
"homepage": "https://dao-xyz.github.io/peerbit-examples",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -27,15 +27,15 @@
|
|
|
27
27
|
"@libp2p/webrtc": "^5",
|
|
28
28
|
"@peerbit/document": "^9",
|
|
29
29
|
"@peerbit/proxy-window": "^3",
|
|
30
|
-
"@types/react": "^
|
|
31
|
-
"@types/react-dom": "^
|
|
30
|
+
"@types/react": "^19.1.8",
|
|
31
|
+
"@types/react-dom": "^19.1.6",
|
|
32
32
|
"detectincognitojs": "^1.3.0",
|
|
33
33
|
"path-browserify": "^1.0.1",
|
|
34
34
|
"peerbit": "^4",
|
|
35
|
-
"react": "^
|
|
36
|
-
"react-dom": "^
|
|
37
|
-
"react-router": "^7.
|
|
38
|
-
"react-use": "^17.
|
|
35
|
+
"react": "^19.1.0",
|
|
36
|
+
"react-dom": "^19.1.0",
|
|
37
|
+
"react-router": "^7.6.2",
|
|
38
|
+
"react-use": "^17.6.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@babel/plugin-proposal-private-property-in-object": "^7.18.6",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"last 1 safari version"
|
|
71
71
|
]
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "d2ac39e97a21f0607ca0e77fe20affa0dbaaaa67"
|
|
74
74
|
}
|
package/src/usePeer.tsx
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import React, { useContext } from "react";
|
|
1
|
+
import React, { JSX, useContext } from "react";
|
|
2
2
|
import { Multiaddr } from "@multiformats/multiaddr";
|
|
3
3
|
import { Peerbit } from "peerbit";
|
|
4
|
-
import { DirectSub } from "@peerbit/pubsub";
|
|
5
4
|
import {
|
|
6
5
|
getFreeKeypair,
|
|
7
6
|
getClientId,
|
|
@@ -17,9 +16,7 @@ import sodium from "libsodium-wrappers";
|
|
|
17
16
|
import { useMount } from "./useMount.js";
|
|
18
17
|
import { createClient, createHost } from "@peerbit/proxy-window";
|
|
19
18
|
import { ProgramClient } from "@peerbit/program";
|
|
20
|
-
import { identify } from "@libp2p/identify";
|
|
21
19
|
import { webSockets } from "@libp2p/websockets";
|
|
22
|
-
import { circuitRelayTransport } from "@libp2p/circuit-relay-v2";
|
|
23
20
|
import * as filters from "@libp2p/websockets/filters";
|
|
24
21
|
import { detectIncognito } from "detectincognitojs";
|
|
25
22
|
|
package/src/useProgram.tsx
CHANGED
|
@@ -26,7 +26,7 @@ export const useProgram = <
|
|
|
26
26
|
const [id, setId] = useState<string | undefined>(options?.id);
|
|
27
27
|
let [loading, setLoading] = useState(true);
|
|
28
28
|
const [session, forceUpdate] = useReducer((x) => x + 1, 0);
|
|
29
|
-
let programLoadingRef = useRef<Promise<P>>();
|
|
29
|
+
let programLoadingRef = useRef<Promise<P>>(undefined);
|
|
30
30
|
const [peers, setPeers] = useState<PublicSignKey[]>([]);
|
|
31
31
|
|
|
32
32
|
let closingRef = useRef<Promise<any>>(Promise.resolve());
|
|
@@ -107,14 +107,15 @@ export const useProgram = <
|
|
|
107
107
|
changeListener
|
|
108
108
|
);
|
|
109
109
|
};
|
|
110
|
-
if (options?.keepOpenOnUnmount) {
|
|
111
|
-
unsubscribe();
|
|
112
|
-
}
|
|
113
110
|
|
|
114
111
|
if (programLoadingRef.current === startRef) {
|
|
115
112
|
setProgram(undefined);
|
|
116
113
|
programLoadingRef.current = undefined;
|
|
117
|
-
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (options?.keepOpenOnUnmount) {
|
|
117
|
+
unsubscribe();
|
|
118
|
+
return; // nothing to close
|
|
118
119
|
}
|
|
119
120
|
|
|
120
121
|
return p.close().then(unsubscribe);
|
package/src/useQuery.tsx
CHANGED
|
@@ -11,6 +11,7 @@ import { AbortError } from "@peerbit/time";
|
|
|
11
11
|
import { NoPeersError } from "@peerbit/shared-log";
|
|
12
12
|
import { v4 as uuid } from "uuid";
|
|
13
13
|
import { WithIndexedContext } from "@peerbit/document/dist/src/search";
|
|
14
|
+
import { on } from "events";
|
|
14
15
|
/* ────────────── helper types ────────────── */
|
|
15
16
|
type QueryLike = {
|
|
16
17
|
query?: indexerTypes.Query[] | indexerTypes.QueryLike;
|
|
@@ -18,7 +19,11 @@ type QueryLike = {
|
|
|
18
19
|
};
|
|
19
20
|
type QueryOptions = { query: QueryLike; id?: string };
|
|
20
21
|
|
|
21
|
-
type
|
|
22
|
+
type RemoteQueryOptions = {
|
|
23
|
+
warmup?: number;
|
|
24
|
+
joining?: { waitFor?: number };
|
|
25
|
+
eager?: boolean;
|
|
26
|
+
};
|
|
22
27
|
|
|
23
28
|
/* ────────────── main hook ────────────── */
|
|
24
29
|
export const useQuery = <
|
|
@@ -45,10 +50,13 @@ export const useQuery = <
|
|
|
45
50
|
| DocumentsChange<T, I>
|
|
46
51
|
| Promise<DocumentsChange<T, I>>
|
|
47
52
|
| undefined);
|
|
48
|
-
update?: (
|
|
53
|
+
update?: (
|
|
54
|
+
prev: RT[],
|
|
55
|
+
change: DocumentsChange<T, I>
|
|
56
|
+
) => RT[] | Promise<RT[]>;
|
|
49
57
|
};
|
|
50
58
|
local?: boolean;
|
|
51
|
-
remote?: boolean |
|
|
59
|
+
remote?: boolean | RemoteQueryOptions;
|
|
52
60
|
} & QueryOptions
|
|
53
61
|
) => {
|
|
54
62
|
/* ── «Item» is the concrete element type flowing through the hook ── */
|
|
@@ -67,10 +75,8 @@ export const useQuery = <
|
|
|
67
75
|
const emptyResultsRef = useRef(false);
|
|
68
76
|
const closeControllerRef = useRef<AbortController | null>(null);
|
|
69
77
|
const waitedOnceRef = useRef(false);
|
|
70
|
-
const resetResultsOnReset = useRef(true);
|
|
71
78
|
|
|
72
79
|
const [id, setId] = useState<string | undefined>(undefined);
|
|
73
|
-
const [resetCounter, invokeReset] = useReducer((n) => n + 1, 0);
|
|
74
80
|
|
|
75
81
|
const reverseRef = useRef(options?.reverse);
|
|
76
82
|
useEffect(() => {
|
|
@@ -108,19 +114,16 @@ export const useQuery = <
|
|
|
108
114
|
|
|
109
115
|
toClose?.iterator.close();
|
|
110
116
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
setAll([]);
|
|
114
|
-
}
|
|
117
|
+
allRef.current = [];
|
|
118
|
+
setAll([]);
|
|
115
119
|
|
|
116
120
|
setIsLoading(false);
|
|
117
121
|
loadingMoreRef.current = false;
|
|
118
|
-
log(
|
|
122
|
+
log("Iterator reset", toClose?.id, fromRef?.id);
|
|
119
123
|
setId(undefined);
|
|
120
124
|
};
|
|
121
125
|
|
|
122
126
|
useEffect(() => {
|
|
123
|
-
resetResultsOnReset.current = true;
|
|
124
127
|
waitedOnceRef.current = false;
|
|
125
128
|
}, [db, options?.id ?? options?.query, options?.resolve, options?.reverse]);
|
|
126
129
|
|
|
@@ -133,17 +136,33 @@ export const useQuery = <
|
|
|
133
136
|
|
|
134
137
|
const initIterator = () => {
|
|
135
138
|
let id = options?.id ?? uuid();
|
|
139
|
+
let remoteQueryOptions =
|
|
140
|
+
options.remote == null || options.remote === false
|
|
141
|
+
? false
|
|
142
|
+
: {
|
|
143
|
+
...(typeof options.remote === "object"
|
|
144
|
+
? options.remote
|
|
145
|
+
: {}),
|
|
146
|
+
joining:
|
|
147
|
+
typeof options.remote === "object" &&
|
|
148
|
+
options.remote.joining?.waitFor !== undefined
|
|
149
|
+
? {
|
|
150
|
+
waitFor:
|
|
151
|
+
options.remote.joining?.waitFor ??
|
|
152
|
+
5e3,
|
|
153
|
+
onMissedResults: ({ amount }) => {
|
|
154
|
+
loadMore(amount, true);
|
|
155
|
+
},
|
|
156
|
+
}
|
|
157
|
+
: undefined,
|
|
158
|
+
};
|
|
136
159
|
const ref = {
|
|
137
160
|
id,
|
|
138
161
|
iterator: db.index.iterate(options.query ?? {}, {
|
|
139
162
|
local: options?.local ?? true,
|
|
140
|
-
remote:
|
|
141
|
-
options.remote == null || options.remote === false
|
|
142
|
-
? false
|
|
143
|
-
: typeof options.remote === "object"
|
|
144
|
-
? options.remote
|
|
145
|
-
: true,
|
|
163
|
+
remote: remoteQueryOptions,
|
|
146
164
|
resolve: options?.resolve,
|
|
165
|
+
signal: closeControllerRef.current?.signal,
|
|
147
166
|
}) as ResultsIterator<Item>,
|
|
148
167
|
itemsConsumed: 0,
|
|
149
168
|
};
|
|
@@ -172,13 +191,7 @@ export const useQuery = <
|
|
|
172
191
|
: (c: DocumentsChange<T, I>) => c;
|
|
173
192
|
|
|
174
193
|
handleChange = async (e: CustomEvent<DocumentsChange<T, I>>) => {
|
|
175
|
-
log(
|
|
176
|
-
options,
|
|
177
|
-
"Merge change",
|
|
178
|
-
e.detail,
|
|
179
|
-
"iterator",
|
|
180
|
-
newIteratorRef.id
|
|
181
|
-
);
|
|
194
|
+
log("Merge change", e.detail, "iterator", newIteratorRef.id);
|
|
182
195
|
const filtered = await mergeFn(e.detail);
|
|
183
196
|
if (
|
|
184
197
|
!filtered ||
|
|
@@ -190,7 +203,10 @@ export const useQuery = <
|
|
|
190
203
|
let merged: Item[];
|
|
191
204
|
if (options.onChange?.update) {
|
|
192
205
|
merged = [
|
|
193
|
-
...options.onChange?.update(
|
|
206
|
+
...(await options.onChange?.update(
|
|
207
|
+
allRef.current,
|
|
208
|
+
filtered
|
|
209
|
+
)),
|
|
194
210
|
];
|
|
195
211
|
} else {
|
|
196
212
|
merged = await db.index.updateResults(
|
|
@@ -200,7 +216,12 @@ export const useQuery = <
|
|
|
200
216
|
options.resolve ?? true
|
|
201
217
|
);
|
|
202
218
|
|
|
203
|
-
log(
|
|
219
|
+
log("After update", {
|
|
220
|
+
current: allRef.current,
|
|
221
|
+
merged,
|
|
222
|
+
filtered,
|
|
223
|
+
query: options.query,
|
|
224
|
+
});
|
|
204
225
|
const expectedDiff =
|
|
205
226
|
filtered.added.length - filtered.removed.length;
|
|
206
227
|
|
|
@@ -210,7 +231,7 @@ export const useQuery = <
|
|
|
210
231
|
merged.length === allRef.current.length)
|
|
211
232
|
) {
|
|
212
233
|
// no change
|
|
213
|
-
log(
|
|
234
|
+
log("no change after merge");
|
|
214
235
|
return;
|
|
215
236
|
}
|
|
216
237
|
}
|
|
@@ -231,7 +252,6 @@ export const useQuery = <
|
|
|
231
252
|
options?.id ?? options?.query,
|
|
232
253
|
options?.resolve,
|
|
233
254
|
options?.reverse,
|
|
234
|
-
resetCounter,
|
|
235
255
|
]);
|
|
236
256
|
|
|
237
257
|
/* ────────────── loadMore (once-wait aware) ────────────── */
|
|
@@ -250,22 +270,18 @@ export const useQuery = <
|
|
|
250
270
|
return true;
|
|
251
271
|
};
|
|
252
272
|
|
|
253
|
-
const reloadAfterTime = (): number | undefined => {
|
|
254
|
-
if (typeof options?.remote === "object" && options.remote.eager) {
|
|
255
|
-
return options.remote.warmup ?? db?.log.timeUntilRoleMaturity;
|
|
256
|
-
}
|
|
257
|
-
return undefined;
|
|
258
|
-
};
|
|
259
|
-
|
|
260
273
|
const markWaited = () => {
|
|
261
274
|
waitedOnceRef.current = true;
|
|
262
275
|
};
|
|
263
276
|
|
|
264
|
-
const loadMore = async (
|
|
277
|
+
const loadMore = async (
|
|
278
|
+
n: number = batchSize,
|
|
279
|
+
pollEvenIfWasEmpty = false
|
|
280
|
+
) => {
|
|
265
281
|
const iterator = iteratorRef.current;
|
|
266
282
|
if (
|
|
267
283
|
!iterator ||
|
|
268
|
-
emptyResultsRef.current ||
|
|
284
|
+
(emptyResultsRef.current && !pollEvenIfWasEmpty) ||
|
|
269
285
|
iterator.iterator.done() ||
|
|
270
286
|
loadingMoreRef.current
|
|
271
287
|
) {
|
|
@@ -278,59 +294,59 @@ export const useQuery = <
|
|
|
278
294
|
try {
|
|
279
295
|
/* ── optional replicate-wait ── */
|
|
280
296
|
if (shouldWait()) {
|
|
281
|
-
log(
|
|
297
|
+
log("Wait for replicators", iterator.id);
|
|
298
|
+
let t0 = Date.now();
|
|
282
299
|
|
|
283
|
-
|
|
284
|
-
typeof options?.remote === "object" && options.remote.eager;
|
|
285
|
-
const waitTimeout =
|
|
300
|
+
const warmup =
|
|
286
301
|
typeof options?.remote === "object" &&
|
|
287
302
|
typeof options?.remote.warmup === "number"
|
|
288
303
|
? options?.remote.warmup
|
|
289
|
-
:
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
await promise;
|
|
304
|
+
: undefined;
|
|
305
|
+
|
|
306
|
+
if (warmup) {
|
|
307
|
+
await db?.log
|
|
308
|
+
.waitForReplicators({
|
|
309
|
+
timeout: warmup,
|
|
310
|
+
signal: closeControllerRef.current?.signal,
|
|
311
|
+
})
|
|
312
|
+
.catch((e) => {
|
|
313
|
+
if (
|
|
314
|
+
e instanceof AbortError ||
|
|
315
|
+
e instanceof NoPeersError
|
|
316
|
+
)
|
|
317
|
+
return;
|
|
318
|
+
console.warn("Remote replicators not ready", e);
|
|
319
|
+
})
|
|
320
|
+
.finally(() => {
|
|
321
|
+
log(
|
|
322
|
+
"Wait for replicators done",
|
|
323
|
+
iterator.id,
|
|
324
|
+
"time",
|
|
325
|
+
Date.now() - t0
|
|
326
|
+
);
|
|
327
|
+
markWaited();
|
|
328
|
+
});
|
|
315
329
|
}
|
|
316
330
|
} else {
|
|
317
|
-
log(
|
|
331
|
+
log("Skip wait for replicators", iterator.id);
|
|
318
332
|
}
|
|
319
333
|
|
|
320
334
|
/* ── fetch next batch ── */
|
|
321
|
-
log(
|
|
322
|
-
|
|
335
|
+
log("Retrieve next batch", iterator.id);
|
|
336
|
+
|
|
337
|
+
let newItems = await iterator.iterator.next(n);
|
|
338
|
+
|
|
323
339
|
if (options?.transform) {
|
|
324
|
-
log(
|
|
340
|
+
log("Transform start", iterator.id);
|
|
325
341
|
|
|
326
342
|
newItems = await Promise.all(newItems.map(options.transform));
|
|
327
|
-
log(
|
|
343
|
+
log("Transform end", iterator.id);
|
|
328
344
|
}
|
|
329
345
|
|
|
330
346
|
/* iterator might have been reset while we were async… */
|
|
331
347
|
|
|
332
348
|
if (iteratorRef.current !== iterator) {
|
|
333
|
-
log(
|
|
349
|
+
log("Iterator reset while loading more");
|
|
334
350
|
return false;
|
|
335
351
|
}
|
|
336
352
|
|
|
@@ -367,7 +383,7 @@ export const useQuery = <
|
|
|
367
383
|
: [...prev, ...unique];
|
|
368
384
|
updateAll(combined);
|
|
369
385
|
} else {
|
|
370
|
-
log(
|
|
386
|
+
log("No new items", iterator.id);
|
|
371
387
|
}
|
|
372
388
|
return !iterator.iterator.done();
|
|
373
389
|
} catch (e) {
|