@peerbit/react 0.0.18 → 0.0.19
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/index.d.ts +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/usePeer.d.ts +5 -2
- package/lib/esm/usePeer.js +27 -24
- package/lib/esm/usePeer.js.map +1 -1
- package/lib/esm/useQuery.js +26 -15
- package/lib/esm/useQuery.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +1 -0
- package/src/usePeer.tsx +32 -21
- package/src/useQuery.tsx +41 -18
package/lib/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { PeerProvider, PeerContext, usePeer, ClientBusyError, } from "./usePeer.js";
|
|
1
|
+
export { PeerProvider, PeerContext, usePeer, ClientBusyError, type NetworkOption, } from "./usePeer.js";
|
|
2
2
|
export * from "./utils.js";
|
|
3
3
|
export { FastMutex } from "./lockstorage.js";
|
|
4
4
|
export { useProgram } from "./useProgram.js";
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,WAAW,EACX,OAAO,EACP,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,WAAW,EACX,OAAO,EACP,eAAe,GAElB,MAAM,cAAc,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
package/lib/esm/usePeer.d.ts
CHANGED
|
@@ -35,12 +35,15 @@ type IFrameOptions = {
|
|
|
35
35
|
type: "proxy";
|
|
36
36
|
targetOrigin: string;
|
|
37
37
|
};
|
|
38
|
+
export type NetworkOption = {
|
|
39
|
+
type: "local" | "remote";
|
|
40
|
+
bootstrap?: (Multiaddr | string)[];
|
|
41
|
+
};
|
|
38
42
|
type NodeOptions = {
|
|
39
43
|
type?: "node";
|
|
40
|
-
network: "local" | "remote";
|
|
44
|
+
network: "local" | "remote" | NetworkOption;
|
|
41
45
|
waitForConnnected?: boolean;
|
|
42
46
|
keypair?: Ed25519Keypair;
|
|
43
|
-
bootstrap?: (Multiaddr | string)[];
|
|
44
47
|
host?: boolean;
|
|
45
48
|
singleton?: boolean;
|
|
46
49
|
};
|
package/lib/esm/usePeer.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useContext } from "react";
|
|
3
3
|
import { Peerbit } from "peerbit";
|
|
4
|
-
import { DirectSub } from "@peerbit/pubsub";
|
|
5
|
-
import { yamux } from "@chainsafe/libp2p-yamux";
|
|
6
4
|
import { getFreeKeypair, getClientId, inIframe, cookiesWhereClearedJustNow, } from "./utils.js";
|
|
7
5
|
import { noise } from "@chainsafe/libp2p-noise";
|
|
8
6
|
import { v4 as uuid } from "uuid";
|
|
@@ -10,9 +8,7 @@ import { FastMutex } from "./lockstorage.js";
|
|
|
10
8
|
import sodium from "libsodium-wrappers";
|
|
11
9
|
import { useMount } from "./useMount.js";
|
|
12
10
|
import { createClient, createHost } from "@peerbit/proxy-window";
|
|
13
|
-
import { identify } from "@libp2p/identify";
|
|
14
11
|
import { webSockets } from "@libp2p/websockets";
|
|
15
|
-
import { circuitRelayTransport } from "@libp2p/circuit-relay-v2";
|
|
16
12
|
import * as filters from "@libp2p/websockets/filters";
|
|
17
13
|
import { detectIncognito } from "detectincognitojs";
|
|
18
14
|
const isInStandaloneMode = () => window.matchMedia("(display-mode: standalone)").matches ||
|
|
@@ -36,7 +32,7 @@ const subscribeToUnload = (fn) => {
|
|
|
36
32
|
export const PeerProvider = (options) => {
|
|
37
33
|
const [peer, setPeer] = React.useState(undefined);
|
|
38
34
|
const [promise, setPromise] = React.useState(undefined);
|
|
39
|
-
const [persisted, setPersisted] = React.useState(
|
|
35
|
+
const [persisted, setPersisted] = React.useState(false);
|
|
40
36
|
const [loading, setLoading] = React.useState(true);
|
|
41
37
|
const [connectionState, setConnectionState] = React.useState("disconnected");
|
|
42
38
|
const [tabIndex, setTabIndex] = React.useState(-1);
|
|
@@ -151,32 +147,36 @@ export const PeerProvider = (options) => {
|
|
|
151
147
|
console.log("Create client");
|
|
152
148
|
newPeer = await Peerbit.create({
|
|
153
149
|
libp2p: {
|
|
154
|
-
addresses: {
|
|
150
|
+
addresses: {
|
|
151
|
+
listen: [
|
|
152
|
+
/* "/p2p-circuit" */
|
|
153
|
+
],
|
|
154
|
+
},
|
|
155
155
|
connectionEncrypters: [noise()],
|
|
156
156
|
peerId,
|
|
157
157
|
connectionManager: { maxConnections: 100 },
|
|
158
158
|
connectionMonitor: { enabled: false },
|
|
159
|
-
streamMuxers: [yamux()],
|
|
160
159
|
...(nodeOptions.network === "local"
|
|
161
160
|
? {
|
|
162
161
|
connectionGater: {
|
|
163
162
|
denyDialMultiaddr: () => false,
|
|
164
163
|
},
|
|
165
164
|
transports: [
|
|
166
|
-
webSockets({ filter: filters.all }),
|
|
167
|
-
|
|
165
|
+
webSockets({ filter: filters.all }) /* ,
|
|
166
|
+
circuitRelayTransport(), */,
|
|
168
167
|
],
|
|
169
168
|
}
|
|
170
169
|
: {
|
|
171
170
|
transports: [
|
|
172
|
-
webSockets({ filter: filters.wss }),
|
|
173
|
-
|
|
171
|
+
webSockets({ filter: filters.wss }) /* ,
|
|
172
|
+
circuitRelayTransport(), */,
|
|
174
173
|
],
|
|
175
|
-
})
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
174
|
+
}) /*
|
|
175
|
+
services: {
|
|
176
|
+
pubsub: (c) =>
|
|
177
|
+
new DirectSub(c, { canRelayMessage: true }),
|
|
178
|
+
identify: identify(),
|
|
179
|
+
}, */,
|
|
180
180
|
},
|
|
181
181
|
directory,
|
|
182
182
|
});
|
|
@@ -188,18 +188,21 @@ export const PeerProvider = (options) => {
|
|
|
188
188
|
setConnectionState("connecting");
|
|
189
189
|
const connectFn = async () => {
|
|
190
190
|
try {
|
|
191
|
-
|
|
191
|
+
const network = nodeOptions.network;
|
|
192
|
+
if (network === "local" ||
|
|
193
|
+
(network.type === "local" &&
|
|
194
|
+
!network.bootstrap)) {
|
|
192
195
|
await newPeer.dial("/ip4/127.0.0.1/tcp/8002/ws/p2p/" +
|
|
193
196
|
(await (await fetch("http://localhost:8082/peer/id")).text()));
|
|
194
197
|
}
|
|
198
|
+
else if (!network ||
|
|
199
|
+
network === "remote" ||
|
|
200
|
+
(network.type === "remote" && !network.bootstrap)) {
|
|
201
|
+
await newPeer["bootstrap"]?.();
|
|
202
|
+
}
|
|
195
203
|
else {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
await newPeer.dial(addr);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
await newPeer["bootstrap"]?.();
|
|
204
|
+
for (const addr of network.bootstrap) {
|
|
205
|
+
await newPeer.dial(addr);
|
|
203
206
|
}
|
|
204
207
|
}
|
|
205
208
|
setConnectionState("connected");
|
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,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"usePeer.js","sourceRoot":"","sources":["../../src/usePeer.tsx"],"names":[],"mappings":"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"}
|
package/lib/esm/useQuery.js
CHANGED
|
@@ -22,9 +22,15 @@ export const useQuery = (db, options) => {
|
|
|
22
22
|
allRef.current = combined;
|
|
23
23
|
setAll(combined);
|
|
24
24
|
};
|
|
25
|
-
const reset = () => {
|
|
26
|
-
|
|
25
|
+
const reset = (fromRef) => {
|
|
26
|
+
if (iteratorRef.current != null && iteratorRef.current !== fromRef) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
27
29
|
emptyResultsRef.current = false;
|
|
30
|
+
logWithId(options, "reset", {
|
|
31
|
+
id: iteratorRef.current?.id,
|
|
32
|
+
size: allRef.current.length,
|
|
33
|
+
});
|
|
28
34
|
!iteratorRef.current?.iterator.done() &&
|
|
29
35
|
iteratorRef.current?.iterator?.close();
|
|
30
36
|
iteratorRef.current = null;
|
|
@@ -36,16 +42,14 @@ export const useQuery = (db, options) => {
|
|
|
36
42
|
// Initialize the iterator only once or when query changes
|
|
37
43
|
useEffect(() => {
|
|
38
44
|
if (!db || db.closed || options?.query === null) {
|
|
39
|
-
reset();
|
|
45
|
+
reset(null);
|
|
40
46
|
return;
|
|
41
47
|
}
|
|
42
48
|
const initIterator = () => {
|
|
43
49
|
// Don't make this async, it will cause issues with the iterator refs
|
|
44
50
|
try {
|
|
45
51
|
// Initialize the iterator and load initial batch.
|
|
46
|
-
|
|
47
|
-
iteratorRef.current?.iterator.close();
|
|
48
|
-
iteratorRef.current = {
|
|
52
|
+
const ref = {
|
|
49
53
|
id: options?.id,
|
|
50
54
|
iterator: db.index.iterate(options?.query ?? {}, {
|
|
51
55
|
local: options?.local ?? true,
|
|
@@ -53,18 +57,24 @@ export const useQuery = (db, options) => {
|
|
|
53
57
|
resolve: options?.resolve,
|
|
54
58
|
}),
|
|
55
59
|
};
|
|
56
|
-
|
|
60
|
+
iteratorRef.current = ref;
|
|
61
|
+
logWithId(options, "Initializing iterator", {
|
|
62
|
+
id: options?.id,
|
|
63
|
+
options: options,
|
|
64
|
+
});
|
|
57
65
|
loadMore(); // initial load
|
|
66
|
+
return ref;
|
|
58
67
|
}
|
|
59
68
|
catch (error) {
|
|
60
69
|
console.error("Error initializing iterator", error);
|
|
70
|
+
return null;
|
|
61
71
|
}
|
|
62
72
|
};
|
|
63
73
|
// Reset state when the db or query changes.
|
|
64
|
-
reset();
|
|
65
|
-
initIterator();
|
|
74
|
+
reset(iteratorRef.current);
|
|
75
|
+
const newIteratorRef = initIterator();
|
|
66
76
|
let handleChange = undefined;
|
|
67
|
-
if (options?.onChange) {
|
|
77
|
+
if (options?.onChange && options?.onChange?.merge !== false) {
|
|
68
78
|
let mergeFunction = typeof options.onChange.merge === "function"
|
|
69
79
|
? options.onChange.merge
|
|
70
80
|
: (change) => change;
|
|
@@ -84,6 +94,7 @@ export const useQuery = (db, options) => {
|
|
|
84
94
|
}
|
|
85
95
|
else {
|
|
86
96
|
merged = await db.index.updateResults(allRef.current, filteredChange, options?.query || {}, options?.resolve ?? true);
|
|
97
|
+
logWithId(options, "After update", allRef.current, merged);
|
|
87
98
|
const expectedDiff = filteredChange.added.length -
|
|
88
99
|
filteredChange.removed.length;
|
|
89
100
|
if (merged === allRef.current ||
|
|
@@ -107,11 +118,11 @@ export const useQuery = (db, options) => {
|
|
|
107
118
|
return () => {
|
|
108
119
|
handleChange &&
|
|
109
120
|
db.events.removeEventListener("change", handleChange);
|
|
110
|
-
reset();
|
|
121
|
+
reset(newIteratorRef);
|
|
111
122
|
};
|
|
112
123
|
}, [
|
|
113
124
|
db?.closed ? undefined : db?.address,
|
|
114
|
-
options?.id ? options?.id : options?.query,
|
|
125
|
+
options?.id != null ? options?.id : options?.query,
|
|
115
126
|
options?.resolve,
|
|
116
127
|
]);
|
|
117
128
|
// Define the loadMore function
|
|
@@ -134,9 +145,9 @@ export const useQuery = (db, options) => {
|
|
|
134
145
|
try {
|
|
135
146
|
// Fetch next batchSize number of items:
|
|
136
147
|
await db?.log.waitForReplicators({ timeout: 1e4 });
|
|
137
|
-
logWithId(options, "loadMore: loading more items for iterator" +
|
|
138
|
-
iteratorRef.current?.id);
|
|
139
148
|
let newItems = await iterator.iterator.next(batchSize);
|
|
149
|
+
logWithId(options, "loadMore: loading more items for iterator " +
|
|
150
|
+
iteratorRef.current?.id, newItems, "should resolve?: " + options?.resolve, "query local?: " + options?.local, "query remote?: " + options?.remote, "isReplicating: " + (await db?.log.isReplicating()));
|
|
140
151
|
if (options?.transform) {
|
|
141
152
|
newItems = await Promise.all(newItems.map((item) => options.transform(item)));
|
|
142
153
|
}
|
|
@@ -164,7 +175,7 @@ export const useQuery = (db, options) => {
|
|
|
164
175
|
updateAll(combined, null);
|
|
165
176
|
}
|
|
166
177
|
else {
|
|
167
|
-
logWithId(options, "no new items, not updating state for iterator" +
|
|
178
|
+
logWithId(options, "no new items, not updating state for iterator " +
|
|
168
179
|
iteratorRef.current?.id +
|
|
169
180
|
" existing results length", allRef.current.length);
|
|
170
181
|
}
|
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,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EACH,WAAW,GAKd,MAAM,mBAAmB,CAAC;AAS3B,MAAM,SAAS,GAAG,CACd,OAAyD,EACzD,GAAG,IAAW,EAChB,EAAE;IACA,IAAI,CAAC,OAAO,EAAE,KAAK;QAAE,OAAO;IAE5B,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,CAAC;SAAM,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAMpB,EAAoB,EACpB,OA2BgB,EAClB,EAAE;IACA,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAoB,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,MAAM,CAGhB,IAAI,CAAC,CAAC;IAChB,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtC,MAAM,SAAS,GAAG,CACd,QAA2B,EAC3B,UAAwC,EAC1C,EAAE;QACA,SAAS,CACL,OAAO,EACP,yCAAyC,EACzC,QAAQ,CAAC,MAAM,EACf,aAAa,EACb,UAAU,CACb,CAAC;QAEF,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC;QAE1B,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,
|
|
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.19",
|
|
4
4
|
"homepage": "https://dao-xyz.github.io/peerbit-examples",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"last 1 safari version"
|
|
71
71
|
]
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "82376707f691741fbd87a6deff08fff4ce6dd5b2"
|
|
74
74
|
}
|
package/src/index.ts
CHANGED
package/src/usePeer.tsx
CHANGED
|
@@ -2,7 +2,6 @@ import React, { useContext } from "react";
|
|
|
2
2
|
import { Multiaddr } from "@multiformats/multiaddr";
|
|
3
3
|
import { Peerbit } from "peerbit";
|
|
4
4
|
import { DirectSub } from "@peerbit/pubsub";
|
|
5
|
-
import { yamux } from "@chainsafe/libp2p-yamux";
|
|
6
5
|
import {
|
|
7
6
|
getFreeKeypair,
|
|
8
7
|
getClientId,
|
|
@@ -80,12 +79,16 @@ type IFrameOptions = {
|
|
|
80
79
|
targetOrigin: string;
|
|
81
80
|
};
|
|
82
81
|
|
|
82
|
+
export type NetworkOption = {
|
|
83
|
+
type: "local" | "remote";
|
|
84
|
+
bootstrap?: (Multiaddr | string)[];
|
|
85
|
+
};
|
|
86
|
+
|
|
83
87
|
type NodeOptions = {
|
|
84
88
|
type?: "node";
|
|
85
|
-
network: "local" | "remote";
|
|
89
|
+
network: "local" | "remote" | NetworkOption;
|
|
86
90
|
waitForConnnected?: boolean;
|
|
87
91
|
keypair?: Ed25519Keypair;
|
|
88
|
-
bootstrap?: (Multiaddr | string)[];
|
|
89
92
|
host?: boolean;
|
|
90
93
|
singleton?: boolean;
|
|
91
94
|
};
|
|
@@ -112,9 +115,7 @@ export const PeerProvider = (options: PeerOptions) => {
|
|
|
112
115
|
const [promise, setPromise] = React.useState<Promise<void> | undefined>(
|
|
113
116
|
undefined
|
|
114
117
|
);
|
|
115
|
-
const [persisted, setPersisted] = React.useState<boolean
|
|
116
|
-
undefined
|
|
117
|
-
);
|
|
118
|
+
const [persisted, setPersisted] = React.useState<boolean>(false);
|
|
118
119
|
const [loading, setLoading] = React.useState<boolean>(true);
|
|
119
120
|
const [connectionState, setConnectionState] =
|
|
120
121
|
React.useState<ConnectionStatus>("disconnected");
|
|
@@ -246,33 +247,36 @@ export const PeerProvider = (options: PeerOptions) => {
|
|
|
246
247
|
console.log("Create client");
|
|
247
248
|
newPeer = await Peerbit.create({
|
|
248
249
|
libp2p: {
|
|
249
|
-
addresses: {
|
|
250
|
+
addresses: {
|
|
251
|
+
listen: [
|
|
252
|
+
/* "/p2p-circuit" */
|
|
253
|
+
],
|
|
254
|
+
},
|
|
250
255
|
connectionEncrypters: [noise()],
|
|
251
256
|
peerId,
|
|
252
257
|
connectionManager: { maxConnections: 100 },
|
|
253
258
|
connectionMonitor: { enabled: false },
|
|
254
|
-
streamMuxers: [yamux()],
|
|
255
259
|
...(nodeOptions.network === "local"
|
|
256
260
|
? {
|
|
257
261
|
connectionGater: {
|
|
258
262
|
denyDialMultiaddr: () => false,
|
|
259
263
|
},
|
|
260
264
|
transports: [
|
|
261
|
-
webSockets({ filter: filters.all }),
|
|
262
|
-
|
|
265
|
+
webSockets({ filter: filters.all }) /* ,
|
|
266
|
+
circuitRelayTransport(), */,
|
|
263
267
|
],
|
|
264
268
|
}
|
|
265
269
|
: {
|
|
266
270
|
transports: [
|
|
267
|
-
webSockets({ filter: filters.wss }),
|
|
268
|
-
|
|
271
|
+
webSockets({ filter: filters.wss }) /* ,
|
|
272
|
+
circuitRelayTransport(), */,
|
|
269
273
|
],
|
|
270
|
-
})
|
|
274
|
+
}) /*
|
|
271
275
|
services: {
|
|
272
276
|
pubsub: (c) =>
|
|
273
277
|
new DirectSub(c, { canRelayMessage: true }),
|
|
274
278
|
identify: identify(),
|
|
275
|
-
},
|
|
279
|
+
}, */,
|
|
276
280
|
},
|
|
277
281
|
directory,
|
|
278
282
|
});
|
|
@@ -287,7 +291,12 @@ export const PeerProvider = (options: PeerOptions) => {
|
|
|
287
291
|
|
|
288
292
|
const connectFn = async () => {
|
|
289
293
|
try {
|
|
290
|
-
|
|
294
|
+
const network = nodeOptions.network;
|
|
295
|
+
if (
|
|
296
|
+
network === "local" ||
|
|
297
|
+
((network as NetworkOption).type === "local" &&
|
|
298
|
+
!(network as NetworkOption).bootstrap)
|
|
299
|
+
) {
|
|
291
300
|
await newPeer.dial(
|
|
292
301
|
"/ip4/127.0.0.1/tcp/8002/ws/p2p/" +
|
|
293
302
|
(await (
|
|
@@ -296,13 +305,15 @@ export const PeerProvider = (options: PeerOptions) => {
|
|
|
296
305
|
)
|
|
297
306
|
).text())
|
|
298
307
|
);
|
|
308
|
+
} else if (
|
|
309
|
+
!network ||
|
|
310
|
+
network === "remote" ||
|
|
311
|
+
(network.type === "remote" && !network.bootstrap)
|
|
312
|
+
) {
|
|
313
|
+
await newPeer["bootstrap"]?.();
|
|
299
314
|
} else {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
await newPeer.dial(addr);
|
|
303
|
-
}
|
|
304
|
-
} else {
|
|
305
|
-
await newPeer["bootstrap"]?.();
|
|
315
|
+
for (const addr of network.bootstrap!) {
|
|
316
|
+
await newPeer.dial(addr);
|
|
306
317
|
}
|
|
307
318
|
}
|
|
308
319
|
setConnectionState("connected");
|
package/src/useQuery.tsx
CHANGED
|
@@ -90,10 +90,22 @@ export const useQuery = <
|
|
|
90
90
|
setAll(combined);
|
|
91
91
|
};
|
|
92
92
|
|
|
93
|
-
const reset = (
|
|
94
|
-
|
|
93
|
+
const reset = (
|
|
94
|
+
fromRef: {
|
|
95
|
+
id?: string;
|
|
96
|
+
iterator: ResultsIterator<WithContext<RT>>;
|
|
97
|
+
} | null
|
|
98
|
+
) => {
|
|
99
|
+
if (iteratorRef.current != null && iteratorRef.current !== fromRef) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
95
102
|
|
|
96
103
|
emptyResultsRef.current = false;
|
|
104
|
+
logWithId(options, "reset", {
|
|
105
|
+
id: iteratorRef.current?.id,
|
|
106
|
+
size: allRef.current.length,
|
|
107
|
+
});
|
|
108
|
+
|
|
97
109
|
!iteratorRef.current?.iterator.done() &&
|
|
98
110
|
iteratorRef.current?.iterator?.close();
|
|
99
111
|
iteratorRef.current = null;
|
|
@@ -106,7 +118,7 @@ export const useQuery = <
|
|
|
106
118
|
// Initialize the iterator only once or when query changes
|
|
107
119
|
useEffect(() => {
|
|
108
120
|
if (!db || db.closed || options?.query === null) {
|
|
109
|
-
reset();
|
|
121
|
+
reset(null);
|
|
110
122
|
return;
|
|
111
123
|
}
|
|
112
124
|
const initIterator = () => {
|
|
@@ -114,9 +126,7 @@ export const useQuery = <
|
|
|
114
126
|
try {
|
|
115
127
|
// Initialize the iterator and load initial batch.
|
|
116
128
|
|
|
117
|
-
|
|
118
|
-
iteratorRef.current?.iterator.close();
|
|
119
|
-
iteratorRef.current = {
|
|
129
|
+
const ref = {
|
|
120
130
|
id: options?.id,
|
|
121
131
|
iterator: db.index.iterate(options?.query ?? {}, {
|
|
122
132
|
local: options?.local ?? true,
|
|
@@ -124,24 +134,30 @@ export const useQuery = <
|
|
|
124
134
|
resolve: options?.resolve as any,
|
|
125
135
|
}) as any as ResultsIterator<WithContext<RT>>,
|
|
126
136
|
};
|
|
137
|
+
iteratorRef.current = ref;
|
|
127
138
|
|
|
128
|
-
logWithId(options, "Initializing iterator",
|
|
139
|
+
logWithId(options, "Initializing iterator", {
|
|
140
|
+
id: options?.id,
|
|
141
|
+
options: options,
|
|
142
|
+
});
|
|
129
143
|
|
|
130
144
|
loadMore(); // initial load
|
|
145
|
+
return ref;
|
|
131
146
|
} catch (error) {
|
|
132
147
|
console.error("Error initializing iterator", error);
|
|
148
|
+
return null;
|
|
133
149
|
}
|
|
134
150
|
};
|
|
135
151
|
|
|
136
152
|
// Reset state when the db or query changes.
|
|
137
|
-
reset();
|
|
138
|
-
initIterator();
|
|
153
|
+
reset(iteratorRef.current);
|
|
154
|
+
const newIteratorRef = initIterator();
|
|
139
155
|
|
|
140
156
|
let handleChange:
|
|
141
157
|
| undefined
|
|
142
158
|
| ((e: CustomEvent<DocumentsChange<T>>) => void | Promise<void>) =
|
|
143
159
|
undefined;
|
|
144
|
-
if (options?.onChange) {
|
|
160
|
+
if (options?.onChange && options?.onChange?.merge !== false) {
|
|
145
161
|
let mergeFunction =
|
|
146
162
|
typeof options.onChange.merge === "function"
|
|
147
163
|
? options.onChange.merge
|
|
@@ -171,6 +187,7 @@ export const useQuery = <
|
|
|
171
187
|
options?.query || {},
|
|
172
188
|
options?.resolve ?? true
|
|
173
189
|
);
|
|
190
|
+
logWithId(options, "After update", allRef.current, merged);
|
|
174
191
|
const expectedDiff =
|
|
175
192
|
filteredChange.added.length -
|
|
176
193
|
filteredChange.removed.length;
|
|
@@ -204,11 +221,11 @@ export const useQuery = <
|
|
|
204
221
|
return () => {
|
|
205
222
|
handleChange &&
|
|
206
223
|
db.events.removeEventListener("change", handleChange);
|
|
207
|
-
reset();
|
|
224
|
+
reset(newIteratorRef);
|
|
208
225
|
};
|
|
209
226
|
}, [
|
|
210
227
|
db?.closed ? undefined : db?.address,
|
|
211
|
-
options?.id ? options?.id : options?.query,
|
|
228
|
+
options?.id != null ? options?.id : options?.query,
|
|
212
229
|
options?.resolve,
|
|
213
230
|
]);
|
|
214
231
|
|
|
@@ -235,14 +252,20 @@ export const useQuery = <
|
|
|
235
252
|
try {
|
|
236
253
|
// Fetch next batchSize number of items:
|
|
237
254
|
await db?.log.waitForReplicators({ timeout: 1e4 });
|
|
238
|
-
|
|
239
|
-
options,
|
|
240
|
-
"loadMore: loading more items for iterator" +
|
|
241
|
-
iteratorRef.current?.id
|
|
242
|
-
);
|
|
255
|
+
|
|
243
256
|
let newItems: WithContext<RT>[] = await iterator.iterator.next(
|
|
244
257
|
batchSize
|
|
245
258
|
);
|
|
259
|
+
logWithId(
|
|
260
|
+
options,
|
|
261
|
+
"loadMore: loading more items for iterator " +
|
|
262
|
+
iteratorRef.current?.id,
|
|
263
|
+
newItems,
|
|
264
|
+
"should resolve?: " + options?.resolve,
|
|
265
|
+
"query local?: " + options?.local,
|
|
266
|
+
"query remote?: " + options?.remote,
|
|
267
|
+
"isReplicating: " + (await db?.log.isReplicating())
|
|
268
|
+
);
|
|
246
269
|
|
|
247
270
|
if (options?.transform) {
|
|
248
271
|
newItems = await Promise.all(
|
|
@@ -283,7 +306,7 @@ export const useQuery = <
|
|
|
283
306
|
} else {
|
|
284
307
|
logWithId(
|
|
285
308
|
options,
|
|
286
|
-
"no new items, not updating state for iterator" +
|
|
309
|
+
"no new items, not updating state for iterator " +
|
|
287
310
|
iteratorRef.current?.id +
|
|
288
311
|
" existing results length",
|
|
289
312
|
allRef.current.length
|