@peerbit/react 0.0.26 → 0.0.28
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/__tests__/utils.test.js +2 -2
- package/lib/esm/__tests__/utils.test.js.map +1 -1
- package/lib/esm/index.d.ts +0 -1
- package/lib/esm/index.js +0 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/useCount.js +1 -1
- package/lib/esm/useCount.js.map +1 -1
- package/lib/esm/useLocal.js +1 -1
- package/lib/esm/useLocal.js.map +1 -1
- package/lib/esm/useProgram.d.ts +2 -2
- package/lib/esm/useProgram.js +10 -7
- package/lib/esm/useProgram.js.map +1 -1
- package/lib/esm/useQuery.d.ts +33 -15
- package/lib/esm/useQuery.js +156 -192
- package/lib/esm/useQuery.js.map +1 -1
- package/lib/esm/utils.d.ts +1 -1
- package/package.json +3 -2
- package/src/__tests__/utils.test.ts +2 -2
- package/src/index.ts +0 -1
- package/src/useCount.tsx +1 -1
- package/src/useLocal.tsx +1 -1
- package/src/useProgram.tsx +24 -16
- package/src/useQuery.tsx +240 -305
- package/src/utils.ts +1 -1
package/lib/esm/useQuery.js
CHANGED
|
@@ -1,27 +1,46 @@
|
|
|
1
|
-
import { useState, useEffect, useRef } from "react";
|
|
1
|
+
import { useState, useEffect, useRef, useMemo } from "react";
|
|
2
2
|
import { ClosedError, } from "@peerbit/document";
|
|
3
3
|
import { AbortError } from "@peerbit/time";
|
|
4
4
|
import { NoPeersError } from "@peerbit/shared-log";
|
|
5
5
|
import { v4 as uuid } from "uuid";
|
|
6
|
-
/*
|
|
7
|
-
|
|
6
|
+
/* ────────────────────────── Main Hook ────────────────────────── */
|
|
7
|
+
/**
|
|
8
|
+
* `useQuery` – unified hook that accepts **either**
|
|
9
|
+
* 1. a single `Documents` instance
|
|
10
|
+
* 2. an array of `Documents` instances
|
|
11
|
+
* 3. *or* omits the first argument and provides `dbs` inside the `options` object.
|
|
12
|
+
*
|
|
13
|
+
* It supersedes the original single-DB version as well as the experimental
|
|
14
|
+
* `useMultiQuery` so callers never have to choose between two APIs.
|
|
15
|
+
*/
|
|
16
|
+
export const useQuery = (
|
|
17
|
+
/** Single DB or list of DBs. 100 % backward-compatible with the old single param. */
|
|
18
|
+
dbOrDbs, options) => {
|
|
19
|
+
/* ────────────── normalise DBs input ────────────── */
|
|
20
|
+
const dbs = useMemo(() => {
|
|
21
|
+
if (Array.isArray(dbOrDbs))
|
|
22
|
+
return dbOrDbs;
|
|
23
|
+
if (dbOrDbs)
|
|
24
|
+
return [dbOrDbs];
|
|
25
|
+
return [];
|
|
26
|
+
}, [dbOrDbs]);
|
|
8
27
|
/* ────────────── state & refs ────────────── */
|
|
9
28
|
const [all, setAll] = useState([]);
|
|
10
29
|
const allRef = useRef([]);
|
|
11
30
|
const [isLoading, setIsLoading] = useState(false);
|
|
12
|
-
const
|
|
13
|
-
const iteratorRef = useRef(null);
|
|
31
|
+
const iteratorRefs = useRef([]);
|
|
14
32
|
const emptyResultsRef = useRef(false);
|
|
15
33
|
const closeControllerRef = useRef(null);
|
|
16
34
|
const waitedOnceRef = useRef(false);
|
|
17
|
-
|
|
18
|
-
const
|
|
35
|
+
/* keep an id mostly for debugging – mirrors original behaviour */
|
|
36
|
+
const [id, setId] = useState(options.id);
|
|
37
|
+
const reverseRef = useRef(options.reverse);
|
|
19
38
|
useEffect(() => {
|
|
20
|
-
reverseRef.current = options
|
|
21
|
-
}, [options
|
|
22
|
-
/* ──────────────
|
|
39
|
+
reverseRef.current = options.reverse;
|
|
40
|
+
}, [options.reverse]);
|
|
41
|
+
/* ────────────── utilities ────────────── */
|
|
23
42
|
const log = (...a) => {
|
|
24
|
-
if (!options
|
|
43
|
+
if (!options.debug)
|
|
25
44
|
return;
|
|
26
45
|
if (typeof options.debug === "boolean")
|
|
27
46
|
console.log(...a);
|
|
@@ -32,230 +51,175 @@ export const useQuery = (db, options) => {
|
|
|
32
51
|
allRef.current = combined;
|
|
33
52
|
setAll(combined);
|
|
34
53
|
};
|
|
35
|
-
const reset = (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
iteratorRef.current = null;
|
|
54
|
+
const reset = () => {
|
|
55
|
+
iteratorRefs.current.forEach(({ iterator }) => iterator.close());
|
|
56
|
+
iteratorRefs.current = [];
|
|
41
57
|
closeControllerRef.current?.abort();
|
|
42
58
|
closeControllerRef.current = new AbortController();
|
|
43
59
|
emptyResultsRef.current = false;
|
|
44
|
-
|
|
60
|
+
waitedOnceRef.current = false;
|
|
45
61
|
allRef.current = [];
|
|
46
62
|
setAll([]);
|
|
47
63
|
setIsLoading(false);
|
|
48
|
-
|
|
49
|
-
log("Iterator reset", toClose?.id, fromRef?.id);
|
|
50
|
-
setId(undefined);
|
|
64
|
+
log("Iterators reset");
|
|
51
65
|
};
|
|
66
|
+
/* ────────── rebuild iterators when db list / query etc. change ────────── */
|
|
52
67
|
useEffect(() => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
reset(null);
|
|
68
|
+
/* derive canonical list of open DBs */
|
|
69
|
+
const openDbs = dbs.filter((d) => Boolean(d && !d.closed));
|
|
70
|
+
const { query, resolve } = options;
|
|
71
|
+
if (!openDbs.length || query == null) {
|
|
72
|
+
reset();
|
|
59
73
|
return;
|
|
60
74
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
waitFor: options.remote.joining?.waitFor ??
|
|
73
|
-
5e3,
|
|
74
|
-
onMissedResults: ({ amount }) => {
|
|
75
|
-
loadMore(amount, true);
|
|
76
|
-
},
|
|
77
|
-
}
|
|
78
|
-
: undefined,
|
|
79
|
-
};
|
|
80
|
-
const ref = {
|
|
81
|
-
id,
|
|
82
|
-
iterator: db.index.iterate(options.query ?? {}, {
|
|
83
|
-
local: options?.local ?? true,
|
|
84
|
-
remote: remoteQueryOptions,
|
|
85
|
-
resolve: options?.resolve,
|
|
86
|
-
signal: closeControllerRef.current?.signal,
|
|
87
|
-
}),
|
|
88
|
-
itemsConsumed: 0,
|
|
89
|
-
};
|
|
90
|
-
iteratorRef.current = ref;
|
|
91
|
-
if (options?.prefetch) {
|
|
92
|
-
loadMore();
|
|
93
|
-
}
|
|
94
|
-
setId(id);
|
|
95
|
-
log("Iterator initialised", ref.id);
|
|
75
|
+
reset();
|
|
76
|
+
const abortSignal = closeControllerRef.current?.signal;
|
|
77
|
+
iteratorRefs.current = openDbs.map((db) => {
|
|
78
|
+
const iterator = db.index.iterate(query ?? {}, {
|
|
79
|
+
local: options.local ?? true,
|
|
80
|
+
remote: options.remote ?? undefined,
|
|
81
|
+
resolve,
|
|
82
|
+
signal: abortSignal,
|
|
83
|
+
});
|
|
84
|
+
const ref = { id: uuid(), db, iterator, itemsConsumed: 0 };
|
|
85
|
+
log("Iterator init", ref.id, "db", db.address);
|
|
96
86
|
return ref;
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
? options.onChange.merge
|
|
105
|
-
: (c) => c;
|
|
106
|
-
handleChange = async (e) => {
|
|
107
|
-
log("Merge change", e.detail, "iterator", newIteratorRef.id);
|
|
108
|
-
const filtered = await mergeFn(e.detail);
|
|
109
|
-
if (!filtered ||
|
|
110
|
-
(filtered.added.length === 0 &&
|
|
111
|
-
filtered.removed.length === 0))
|
|
112
|
-
return;
|
|
113
|
-
let merged;
|
|
114
|
-
if (options.onChange?.update) {
|
|
115
|
-
merged = [
|
|
116
|
-
...(await options.onChange?.update(allRef.current, filtered)),
|
|
117
|
-
];
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
merged = await db.index.updateResults(allRef.current, filtered, options.query || {}, options.resolve ?? true);
|
|
121
|
-
log("After update", {
|
|
122
|
-
current: allRef.current,
|
|
123
|
-
merged,
|
|
124
|
-
filtered,
|
|
125
|
-
query: options.query,
|
|
126
|
-
});
|
|
127
|
-
const expectedDiff = filtered.added.length - filtered.removed.length;
|
|
128
|
-
if (merged === allRef.current ||
|
|
129
|
-
(expectedDiff !== 0 &&
|
|
130
|
-
merged.length === allRef.current.length)) {
|
|
131
|
-
// no change
|
|
132
|
-
log("no change after merge");
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
updateAll(options?.reverse ? merged.reverse() : merged);
|
|
137
|
-
};
|
|
138
|
-
db.events.addEventListener("change", handleChange);
|
|
139
|
-
}
|
|
140
|
-
return () => {
|
|
141
|
-
handleChange &&
|
|
142
|
-
db.events.removeEventListener("change", handleChange);
|
|
143
|
-
reset(newIteratorRef);
|
|
144
|
-
};
|
|
87
|
+
});
|
|
88
|
+
/* prefetch if requested */
|
|
89
|
+
if (options.prefetch)
|
|
90
|
+
void loadMore();
|
|
91
|
+
/* store a deterministic id (useful for external keys) */
|
|
92
|
+
setId(uuid());
|
|
93
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
145
94
|
}, [
|
|
146
|
-
|
|
147
|
-
options
|
|
148
|
-
options
|
|
149
|
-
options
|
|
95
|
+
dbs.map((d) => d?.address).join("|"),
|
|
96
|
+
options.query,
|
|
97
|
+
options.resolve,
|
|
98
|
+
options.reverse,
|
|
150
99
|
]);
|
|
151
|
-
/* ────────────── loadMore
|
|
152
|
-
const batchSize = options
|
|
100
|
+
/* ────────────── loadMore implementation ────────────── */
|
|
101
|
+
const batchSize = options.batchSize ?? 10;
|
|
153
102
|
const shouldWait = () => {
|
|
154
|
-
if (waitedOnceRef.current)
|
|
103
|
+
if (waitedOnceRef.current)
|
|
155
104
|
return false;
|
|
156
|
-
|
|
157
|
-
if (options?.remote === false)
|
|
105
|
+
if (options.remote === false)
|
|
158
106
|
return false;
|
|
159
|
-
if
|
|
160
|
-
return true;
|
|
161
|
-
if (options?.remote == null)
|
|
162
|
-
return true;
|
|
163
|
-
if (typeof options?.remote === "object") {
|
|
164
|
-
return true;
|
|
165
|
-
}
|
|
166
|
-
return true;
|
|
107
|
+
return true; // mimic original behaviour – wait once if remote allowed
|
|
167
108
|
};
|
|
168
109
|
const markWaited = () => {
|
|
169
110
|
waitedOnceRef.current = true;
|
|
170
111
|
};
|
|
171
|
-
const loadMore = async (n = batchSize
|
|
172
|
-
const
|
|
173
|
-
if (!
|
|
174
|
-
(emptyResultsRef.current && !pollEvenIfWasEmpty) ||
|
|
175
|
-
iterator.iterator.done() ||
|
|
176
|
-
loadingMoreRef.current) {
|
|
112
|
+
const loadMore = async (n = batchSize) => {
|
|
113
|
+
const iterators = iteratorRefs.current;
|
|
114
|
+
if (!iterators.length || emptyResultsRef.current)
|
|
177
115
|
return false;
|
|
178
|
-
}
|
|
179
116
|
setIsLoading(true);
|
|
180
|
-
loadingMoreRef.current = true;
|
|
181
117
|
try {
|
|
182
|
-
/*
|
|
118
|
+
/* one-time replicator warm-up across all DBs */
|
|
183
119
|
if (shouldWait()) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
})
|
|
202
|
-
.finally(() => {
|
|
203
|
-
log("Wait for replicators done", iterator.id, "time", Date.now() - t0);
|
|
204
|
-
markWaited();
|
|
205
|
-
});
|
|
120
|
+
if (typeof options.remote === "object" &&
|
|
121
|
+
options.remote.warmup) {
|
|
122
|
+
await Promise.all(iterators.map(async ({ db }) => {
|
|
123
|
+
try {
|
|
124
|
+
await db.log.waitForReplicators({
|
|
125
|
+
timeout: options.remote
|
|
126
|
+
.warmup,
|
|
127
|
+
signal: closeControllerRef.current?.signal,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (e) {
|
|
131
|
+
if (e instanceof AbortError ||
|
|
132
|
+
e instanceof NoPeersError)
|
|
133
|
+
return;
|
|
134
|
+
console.warn("Remote replicators not ready", e);
|
|
135
|
+
}
|
|
136
|
+
}));
|
|
206
137
|
}
|
|
138
|
+
markWaited();
|
|
207
139
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}
|
|
219
|
-
/* iterator might have been reset while we were async… */
|
|
220
|
-
if (iteratorRef.current !== iterator) {
|
|
221
|
-
log("Iterator reset while loading more");
|
|
222
|
-
return false;
|
|
140
|
+
/* pull items round-robin */
|
|
141
|
+
const newlyFetched = [];
|
|
142
|
+
for (const ref of iterators) {
|
|
143
|
+
if (ref.iterator.done())
|
|
144
|
+
continue;
|
|
145
|
+
const batch = await ref.iterator.next(n); // pull up to <n> at once
|
|
146
|
+
if (batch.length) {
|
|
147
|
+
ref.itemsConsumed += batch.length;
|
|
148
|
+
newlyFetched.push(...batch);
|
|
149
|
+
}
|
|
223
150
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
log("Loaded more items for iterator", iterator.id, "current id", iteratorRef.current?.id, "new items", newItems.length, "previous results", allRef.current.length, "batchSize", batchSize, "items consumed", iterator.itemsConsumed);
|
|
228
|
-
const prev = allRef.current;
|
|
229
|
-
const dedup = new Set(prev.map((x) => x.__context.head));
|
|
230
|
-
const unique = newItems.filter((x) => !dedup.has(x.__context.head));
|
|
231
|
-
if (!unique.length)
|
|
232
|
-
return;
|
|
233
|
-
const combined = reverseRef.current
|
|
234
|
-
? [...unique.reverse(), ...prev]
|
|
235
|
-
: [...prev, ...unique];
|
|
236
|
-
updateAll(combined);
|
|
151
|
+
if (!newlyFetched.length) {
|
|
152
|
+
emptyResultsRef.current = iterators.every((i) => i.iterator.done());
|
|
153
|
+
return !emptyResultsRef.current;
|
|
237
154
|
}
|
|
238
|
-
|
|
239
|
-
|
|
155
|
+
/* optional transform */
|
|
156
|
+
let processed = newlyFetched;
|
|
157
|
+
if (options.transform) {
|
|
158
|
+
processed = await Promise.all(processed.map(options.transform));
|
|
240
159
|
}
|
|
241
|
-
|
|
160
|
+
/* deduplicate & merge */
|
|
161
|
+
const prev = allRef.current;
|
|
162
|
+
const dedupHeads = new Set(prev.map((x) => x.__context.head));
|
|
163
|
+
const unique = processed.filter((x) => !dedupHeads.has(x.__context.head));
|
|
164
|
+
if (!unique.length)
|
|
165
|
+
return !iterators.every((i) => i.iterator.done());
|
|
166
|
+
const combined = reverseRef.current
|
|
167
|
+
? [...unique.reverse(), ...prev]
|
|
168
|
+
: [...prev, ...unique];
|
|
169
|
+
updateAll(combined);
|
|
170
|
+
emptyResultsRef.current = iterators.every((i) => i.iterator.done());
|
|
171
|
+
return !emptyResultsRef.current;
|
|
242
172
|
}
|
|
243
173
|
catch (e) {
|
|
244
174
|
if (!(e instanceof ClosedError))
|
|
245
175
|
throw e;
|
|
176
|
+
return false;
|
|
246
177
|
}
|
|
247
178
|
finally {
|
|
248
179
|
setIsLoading(false);
|
|
249
|
-
loadingMoreRef.current = false;
|
|
250
180
|
}
|
|
251
181
|
};
|
|
252
|
-
/* ──────────────
|
|
182
|
+
/* ────────────── live-merge listeners ────────────── */
|
|
183
|
+
useEffect(() => {
|
|
184
|
+
if (!options.onChange || options.onChange.merge === false)
|
|
185
|
+
return;
|
|
186
|
+
const listeners = iteratorRefs.current.map(({ db, id: itId }) => {
|
|
187
|
+
const mergeFn = typeof options.onChange?.merge === "function"
|
|
188
|
+
? options.onChange.merge
|
|
189
|
+
: (c) => c;
|
|
190
|
+
const handler = async (e) => {
|
|
191
|
+
log("Merge change", e.detail, "it", itId);
|
|
192
|
+
const filtered = await mergeFn(e.detail);
|
|
193
|
+
if (!filtered ||
|
|
194
|
+
(!filtered.added.length && !filtered.removed.length))
|
|
195
|
+
return;
|
|
196
|
+
let merged;
|
|
197
|
+
if (options.onChange?.update) {
|
|
198
|
+
merged = await options.onChange.update(allRef.current, filtered);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
merged = await db.index.updateResults(allRef.current, filtered, options.query || {}, options.resolve ?? true);
|
|
202
|
+
}
|
|
203
|
+
updateAll(options.reverse ? merged.reverse() : merged);
|
|
204
|
+
};
|
|
205
|
+
db.events.addEventListener("change", handler);
|
|
206
|
+
return { db, handler };
|
|
207
|
+
});
|
|
208
|
+
return () => {
|
|
209
|
+
listeners.forEach(({ db, handler }) => db.events.removeEventListener("change", handler));
|
|
210
|
+
};
|
|
211
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
212
|
+
}, [
|
|
213
|
+
iteratorRefs.current.map((r) => r.db.address).join("|"),
|
|
214
|
+
options.onChange,
|
|
215
|
+
]);
|
|
216
|
+
/* ────────────── public API – unchanged from the caller's perspective ────────────── */
|
|
253
217
|
return {
|
|
254
218
|
items: all,
|
|
255
219
|
loadMore,
|
|
256
220
|
isLoading,
|
|
257
221
|
empty: () => emptyResultsRef.current,
|
|
258
|
-
id
|
|
222
|
+
id,
|
|
259
223
|
};
|
|
260
224
|
};
|
|
261
225
|
//# sourceMappingURL=useQuery.js.map
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EACH,WAAW,GAKd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAmDlC,qEAAqE;AACrE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;AAMpB,qFAAqF;AACrF,OAAwD,EACxD,OAA2C,EAC7C,EAAE;IAIA,uDAAuD;IACvD,MAAM,GAAG,GAAG,OAAO,CAAkC,GAAG,EAAE;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;QAC3C,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,gDAAgD;IAChD,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAS,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,CAOzB,EAAE,CAAC,CAAC;IACN,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpC,kEAAkE;IAClE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAqB,OAAO,CAAC,EAAE,CAAC,CAAC;IAE7D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,SAAS,CAAC,GAAG,EAAE;QACX,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACzC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtB,6CAA6C;IAC7C,MAAM,GAAG,GAAG,CAAC,GAAG,CAAQ,EAAE,EAAE;QACxB,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO;QAC3B,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;;YACrD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE;QACnC,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC1B,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QACf,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC;QAE1B,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACpC,kBAAkB,CAAC,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QACnD,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;QAChC,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;QAE9B,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,CAAC;QACX,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,8EAA8E;IAC9E,SAAS,CAAC,GAAG,EAAE;QACX,uCAAuC;QACvC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CACnD,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAC1B,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAEnC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YACnC,KAAK,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QAED,KAAK,EAAE,CAAC;QACR,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC;QAEvD,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACtC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE;gBAC3C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;gBACnC,OAAO;gBACP,MAAM,EAAE,WAAW;aACtB,CAA0B,CAAC;YAE5B,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO,GAAG,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,2BAA2B;QAC3B,IAAI,OAAO,CAAC,QAAQ;YAAE,KAAK,QAAQ,EAAE,CAAC;QACtC,yDAAyD;QACzD,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACd,uDAAuD;IAC3D,CAAC,EAAE;QACC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACpC,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,OAAO;KAClB,CAAC,CAAC;IAEH,2DAA2D;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAE1C,MAAM,UAAU,GAAG,GAAY,EAAE;QAC7B,IAAI,aAAa,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAC3C,OAAO,IAAI,CAAC,CAAC,yDAAyD;IAC1E,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACpB,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,SAAS,EAAoB,EAAE;QAC/D,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,eAAe,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE/D,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC;YACD,gDAAgD;YAChD,IAAI,UAAU,EAAE,EAAE,CAAC;gBACf,IACI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;oBAClC,OAAO,CAAC,MAAM,CAAC,MAAM,EACvB,CAAC;oBACC,MAAM,OAAO,CAAC,GAAG,CACb,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;wBAC3B,IAAI,CAAC;4BACD,MAAM,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC;gCAC5B,OAAO,EAAG,OAAO,CAAC,MAAqB;qCAClC,MAAM;gCACX,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM;6BAC7C,CAAC,CAAC;wBACP,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACT,IACI,CAAC,YAAY,UAAU;gCACvB,CAAC,YAAY,YAAY;gCAEzB,OAAO;4BACX,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;wBACpD,CAAC;oBACL,CAAC,CAAC,CACL,CAAC;gBACN,CAAC;gBACD,UAAU,EAAE,CAAC;YACjB,CAAC;YAED,4BAA4B;YAC5B,MAAM,YAAY,GAAW,EAAE,CAAC;YAChC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC1B,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAClC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;gBACnE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACf,GAAG,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC;oBAClC,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBAChC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBACvB,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CACpB,CAAC;gBACF,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;YACpC,CAAC;YAED,wBAAwB;YACxB,IAAI,SAAS,GAAG,YAAY,CAAC;YAC7B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YACpE,CAAC;YAED,yBAAyB;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,GAAG,CACtB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAC7C,CAAC;YACF,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAE,CAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CACpD,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,MAAM;gBACd,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO;gBAC/B,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;gBAChC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC;YAC3B,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEpB,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC;gBAAE,MAAM,CAAC,CAAC;YACzC,OAAO,KAAK,CAAC;QACjB,CAAC;gBAAS,CAAC;YACP,YAAY,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACL,CAAC,CAAC;IAEF,wDAAwD;IACxD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,KAAK;YAAE,OAAO;QAElE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YAC5D,MAAM,OAAO,GACT,OAAO,OAAO,CAAC,QAAQ,EAAE,KAAK,KAAK,UAAU;gBACzC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBACxB,CAAC,CAAC,CAAC,CAAwB,EAAE,EAAE,CAAC,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,KAAK,EAAE,CAAqC,EAAE,EAAE;gBAC5D,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC1C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACzC,IACI,CAAC,QAAQ;oBACT,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;oBAEpD,OAAO;gBAEX,IAAI,MAAc,CAAC;gBACnB,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;oBAC3B,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAClC,MAAM,CAAC,OAAO,EACd,QAAQ,CACX,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACJ,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CACjC,MAAM,CAAC,OAA4B,EACnC,QAAQ,EACR,OAAO,CAAC,KAAK,IAAI,EAAE,EACnB,OAAO,CAAC,OAAO,IAAI,IAAI,CAC1B,CAAC;gBACN,CAAC;gBACD,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3D,CAAC,CAAC;YACF,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACR,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAClC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CACnD,CAAC;QACN,CAAC,CAAC;QACF,uDAAuD;IAC3D,CAAC,EAAE;QACC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACvD,OAAO,CAAC,QAAQ;KACnB,CAAC,CAAC;IAEH,wFAAwF;IACxF,OAAO;QACH,KAAK,EAAE,GAAG;QACV,QAAQ;QACR,SAAS;QACT,KAAK,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO;QACpC,EAAE;KACL,CAAC;AACN,CAAC,CAAC"}
|
package/lib/esm/utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Ed25519Keypair } from "@peerbit/crypto";
|
|
2
|
-
import { FastMutex } from "./lockstorage";
|
|
2
|
+
import { FastMutex } from "./lockstorage.js";
|
|
3
3
|
export declare const cookiesWhereClearedJustNow: () => boolean;
|
|
4
4
|
export declare const getClientId: (type: "session" | "local") => string;
|
|
5
5
|
export declare const releaseKey: (path: string, lock: FastMutex) => void;
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peerbit/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.28",
|
|
4
4
|
"homepage": "https://dao-xyz.github.io/peerbit-examples",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
7
7
|
"types": "lib/esm/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
+
"types": "./lib/esm/index.d.ts",
|
|
10
11
|
"import": "./lib/esm/index.js"
|
|
11
12
|
},
|
|
12
13
|
"./package.json": "./package.json"
|
|
@@ -70,5 +71,5 @@
|
|
|
70
71
|
"last 1 safari version"
|
|
71
72
|
]
|
|
72
73
|
},
|
|
73
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "85b4ffae6ced0eaf11f1891b6b43b77350429d99"
|
|
74
75
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { getAllKeyPairs, getFreeKeypair, releaseKey } from "../utils";
|
|
1
|
+
import { getAllKeyPairs, getFreeKeypair, releaseKey } from "../utils.js";
|
|
2
2
|
import nodelocalstorage from "node-localstorage";
|
|
3
|
-
import { FastMutex } from "../lockstorage";
|
|
3
|
+
import { FastMutex } from "../lockstorage.js";
|
|
4
4
|
import { delay } from "@peerbit/time";
|
|
5
5
|
import { default as sodium } from "libsodium-wrappers";
|
|
6
6
|
import { v4 as uuid } from "uuid";
|
package/src/index.ts
CHANGED
package/src/useCount.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ClosedError, Documents, WithContext } from "@peerbit/document";
|
|
2
2
|
import { useEffect, useRef, useState } from "react";
|
|
3
3
|
import * as indexerTypes from "@peerbit/indexer-interface";
|
|
4
|
-
import { debounceLeadingTrailing } from "./utils";
|
|
4
|
+
import { debounceLeadingTrailing } from "./utils.js";
|
|
5
5
|
|
|
6
6
|
type QueryOptons = {
|
|
7
7
|
query: indexerTypes.Query[] | indexerTypes.QueryLike;
|
package/src/useLocal.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ClosedError, Documents, WithContext } from "@peerbit/document";
|
|
2
2
|
import { useEffect, useRef, useState } from "react";
|
|
3
3
|
import * as indexerTypes from "@peerbit/indexer-interface";
|
|
4
|
-
import { debounceLeadingTrailing } from "./utils";
|
|
4
|
+
import { debounceLeadingTrailing } from "./utils.js";
|
|
5
5
|
|
|
6
6
|
type QueryLike = {
|
|
7
7
|
query?: indexerTypes.Query[] | indexerTypes.QueryLike;
|