@peerbit/react 0.0.31 → 0.0.32

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.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,359 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { describe, it, beforeEach, afterEach, expect } from "vitest";
11
+ import { Peerbit } from "peerbit";
12
+ import { field, variant } from "@dao-xyz/borsh";
13
+ import { Documents } from "@peerbit/document";
14
+ import { Program } from "@peerbit/program";
15
+ import React, { useEffect } from "react";
16
+ import { render, act, waitFor } from "@testing-library/react";
17
+ import { useQuery } from "../useQuery.js";
18
+ import sodium from "libsodium-wrappers";
19
+ // Minimal Post model and Program with Documents for integration-like tests
20
+ let Post = class Post {
21
+ id;
22
+ message;
23
+ constructor(props) {
24
+ if (!props)
25
+ return; // borsh
26
+ this.id = props.id ?? `${Date.now()}-${Math.random()}`;
27
+ this.message = props.message ?? "";
28
+ }
29
+ };
30
+ __decorate([
31
+ field({ type: "string" }),
32
+ __metadata("design:type", String)
33
+ ], Post.prototype, "id", void 0);
34
+ __decorate([
35
+ field({ type: "string" }),
36
+ __metadata("design:type", String)
37
+ ], Post.prototype, "message", void 0);
38
+ Post = __decorate([
39
+ variant(0),
40
+ __metadata("design:paramtypes", [Object])
41
+ ], Post);
42
+ let PostIndexed = class PostIndexed {
43
+ id;
44
+ indexedMessage;
45
+ constructor(props) {
46
+ if (!props)
47
+ return; // borsh
48
+ this.id = props.id ?? `${Date.now()}-${Math.random()}`;
49
+ this.indexedMessage = props.message ?? "";
50
+ }
51
+ };
52
+ __decorate([
53
+ field({ type: "string" }),
54
+ __metadata("design:type", String)
55
+ ], PostIndexed.prototype, "id", void 0);
56
+ __decorate([
57
+ field({ type: "string" }),
58
+ __metadata("design:type", String)
59
+ ], PostIndexed.prototype, "indexedMessage", void 0);
60
+ PostIndexed = __decorate([
61
+ variant(0),
62
+ __metadata("design:paramtypes", [Post])
63
+ ], PostIndexed);
64
+ let PostsDB = class PostsDB extends Program {
65
+ posts;
66
+ constructor() {
67
+ super();
68
+ this.posts = new Documents();
69
+ }
70
+ async open(args) {
71
+ await this.posts.open({
72
+ type: Post,
73
+ index: { type: PostIndexed },
74
+ replicate: args?.replicate ? { factor: 1 } : false,
75
+ });
76
+ }
77
+ };
78
+ __decorate([
79
+ field({ type: Documents }),
80
+ __metadata("design:type", Documents)
81
+ ], PostsDB.prototype, "posts", void 0);
82
+ PostsDB = __decorate([
83
+ variant("posts-db"),
84
+ __metadata("design:paramtypes", [])
85
+ ], PostsDB);
86
+ describe("useQuery (integration with Documents)", () => {
87
+ let peerWriter;
88
+ let peerReader;
89
+ let dbWriter;
90
+ let dbReader;
91
+ let autoUnmount;
92
+ beforeEach(async () => {
93
+ await sodium.ready;
94
+ peerWriter = await Peerbit.create();
95
+ peerReader = await Peerbit.create();
96
+ });
97
+ const setupConnected = async () => {
98
+ await peerWriter.dial(peerReader);
99
+ dbWriter = await peerWriter.open(new PostsDB(), {
100
+ existing: "reuse",
101
+ args: { replicate: true },
102
+ });
103
+ dbReader = await peerReader.open(dbWriter.address, {
104
+ args: { replicate: false },
105
+ });
106
+ // ensure reader knows about writer as replicator for the log
107
+ await dbReader.posts.log.waitForReplicator(peerWriter.identity.publicKey);
108
+ };
109
+ const setupDisconnected = async () => {
110
+ dbWriter = await peerWriter.open(new PostsDB(), {
111
+ existing: "reuse",
112
+ args: { replicate: true },
113
+ });
114
+ dbReader = await peerReader.open(dbWriter.clone(), {
115
+ args: { replicate: false },
116
+ });
117
+ };
118
+ afterEach(async () => {
119
+ // Unmount React trees before tearing down peers
120
+ autoUnmount?.();
121
+ autoUnmount = undefined;
122
+ await peerWriter?.stop();
123
+ await peerReader?.stop();
124
+ });
125
+ function renderUseQuery(db, options) {
126
+ const result = {};
127
+ function HookCmp({ opts, }) {
128
+ const hook = useQuery(db.posts, opts);
129
+ useEffect(() => {
130
+ result.current = hook;
131
+ }, [hook]);
132
+ return null;
133
+ }
134
+ const api = render(React.createElement(HookCmp, { opts: options }));
135
+ const rerender = (opts) => api.rerender(React.createElement(HookCmp, { opts }));
136
+ let hasUnmounted = false;
137
+ const doUnmount = () => {
138
+ if (hasUnmounted)
139
+ return;
140
+ hasUnmounted = true;
141
+ api.unmount();
142
+ if (autoUnmount === doUnmount) {
143
+ // clear outer reference if we still own it
144
+ autoUnmount = undefined;
145
+ }
146
+ };
147
+ // Expose to outer afterEach so tests don't need to remember calling unmount
148
+ autoUnmount = doUnmount;
149
+ return { result, rerender, unmount: doUnmount };
150
+ }
151
+ it("local query", async () => {
152
+ await setupConnected();
153
+ await dbWriter.posts.put(new Post({ message: "hello" }));
154
+ const { result } = renderUseQuery(dbWriter, {
155
+ query: {},
156
+ resolve: true,
157
+ local: true,
158
+ prefetch: true,
159
+ });
160
+ await waitFor(() => expect(result.current?.items?.length ?? 0).toBe(1));
161
+ await act(async () => {
162
+ expect(result.current.items.length).toBe(1);
163
+ expect(result.current.items[0].message).toBe("hello");
164
+ });
165
+ });
166
+ it("does not mutate the options object passed in", async () => {
167
+ await setupConnected();
168
+ const cfg = {
169
+ query: {},
170
+ resolve: true,
171
+ local: true,
172
+ remote: { reach: { eager: true }, wait: { timeout: 10_000 } },
173
+ prefetch: false,
174
+ batchSize: 10,
175
+ };
176
+ const cfgOrg = { ...cfg };
177
+ renderUseQuery(dbReader, cfg);
178
+ // expect that cfg has not been modified
179
+ expect(cfg).to.deep.equal(cfgOrg);
180
+ });
181
+ it("respects remote warmup before iterating", async () => {
182
+ await setupConnected();
183
+ await dbWriter.posts.put(new Post({ message: "hello" }));
184
+ const cfg = {
185
+ query: {},
186
+ resolve: true,
187
+ local: true,
188
+ remote: { reach: { eager: true }, wait: { timeout: 10_000 } },
189
+ prefetch: false,
190
+ batchSize: 10,
191
+ };
192
+ const { result, rerender } = renderUseQuery(dbReader, cfg);
193
+ await waitFor(() => {
194
+ if (!result.current)
195
+ throw new Error("no result yet");
196
+ return true;
197
+ });
198
+ expect(result.current.items.length).toBe(0);
199
+ await act(async () => {
200
+ await result.current.loadMore();
201
+ });
202
+ expect(result.current.items.length).toBe(1);
203
+ expect(result.current.items[0].message).toBe("hello");
204
+ await act(async () => {
205
+ rerender(cfg);
206
+ });
207
+ await act(async () => {
208
+ await result.current.loadMore();
209
+ });
210
+ await waitFor(() => expect(result.current.items.length).toBe(1));
211
+ });
212
+ it("honors remote.wait.timeout by resolving after connection", async () => {
213
+ // create isolated peers not connected yet
214
+ await setupDisconnected();
215
+ const { result } = renderUseQuery(dbReader, {
216
+ query: {},
217
+ resolve: true,
218
+ local: false,
219
+ remote: {
220
+ reach: { eager: true },
221
+ wait: { behavior: "block", timeout: 5_000 },
222
+ },
223
+ prefetch: true,
224
+ });
225
+ await waitFor(() => expect(result.current).toBeDefined());
226
+ // Now connect and write
227
+ await act(async () => {
228
+ await dbReader.node.dial(dbWriter.node.getMultiaddrs());
229
+ await dbWriter.posts.put(new Post({ message: "late" }));
230
+ await dbReader.posts.log.waitForReplicator(dbWriter.node.identity.publicKey);
231
+ });
232
+ await waitFor(() => expect(result.current.items.length).toBe(1));
233
+ expect(result.current.items[0].message).toBe("late");
234
+ });
235
+ describe("merge", () => {
236
+ const checkAsResolvedResults = async (out, resolved) => {
237
+ const { result } = out;
238
+ await waitFor(() => expect(result.current).toBeDefined());
239
+ // Initially empty
240
+ expect(result.current.items.length).toBe(0);
241
+ // Create a post on writer and expect reader hook to merge it automatically
242
+ const id = `${Date.now()}-merge`;
243
+ await act(async () => {
244
+ // the reader actually does the put (a user)
245
+ await dbReader.posts.put(new Post({ id, message: "first" }));
246
+ });
247
+ await waitFor(() => expect(result.current.items.length).toBe(1), {
248
+ timeout: 1e4,
249
+ });
250
+ if (resolved) {
251
+ expect(result.current.items[0].message).toBe("first");
252
+ expect(result.current.items[0]).to.be.instanceOf(Post);
253
+ }
254
+ else {
255
+ expect(result.current.items[0].indexedMessage).toBe("first");
256
+ expect(result.current.items[0]).to.be.instanceOf(PostIndexed);
257
+ }
258
+ };
259
+ it("updates.merge merges new writes into state without manual iteration, as resolved", async () => {
260
+ await setupConnected();
261
+ // resolved undefined means we should resolve
262
+ await checkAsResolvedResults(renderUseQuery(dbReader, {
263
+ query: {},
264
+ local: false,
265
+ remote: { reach: { eager: true } },
266
+ prefetch: false,
267
+ updates: { merge: true },
268
+ }), true);
269
+ // resolved true means we should resolve
270
+ await checkAsResolvedResults(renderUseQuery(dbReader, {
271
+ query: {},
272
+ local: false,
273
+ resolve: true,
274
+ remote: { reach: { eager: true } },
275
+ prefetch: false,
276
+ updates: { merge: true },
277
+ }), true);
278
+ // resolved false means we should NOT resolve
279
+ await checkAsResolvedResults(renderUseQuery(dbReader, {
280
+ query: {},
281
+ local: false,
282
+ resolve: false,
283
+ remote: { reach: { eager: true } },
284
+ prefetch: false,
285
+ updates: { merge: true },
286
+ }), false);
287
+ });
288
+ });
289
+ /* TODO not yet supported
290
+
291
+ it("updates.merge reflects document mutation in hook state", async () => {
292
+ await setupConnected();
293
+
294
+ const id = `${Date.now()}-mut`;
295
+ await dbWriter.posts.put(new Post({ id, message: "v1" }));
296
+
297
+ const { result } = renderUseQuery(dbReader, {
298
+ query: {},
299
+ resolve: true,
300
+ local: false,
301
+ remote: { reach: { eager: true } },
302
+ prefetch: true,
303
+ updates: { merge: true },
304
+ });
305
+
306
+ await waitFor(() => expect(result.current.items.length).toBe(1), {
307
+ timeout: 1e4,
308
+ });
309
+ expect(result.current.items[0].message).toBe("v1");
310
+
311
+ // Mutate by putting a new version with the same id
312
+ await act(async () => {
313
+ // the reader actually does the put (a user)
314
+ await dbReader.posts.put(new Post({ id, message: "v2" }));
315
+ });
316
+
317
+ // Expect the hook state to reflect the updated content
318
+ await waitFor(
319
+ () => {
320
+ const found = result.current.items.find((p) => p.id === id);
321
+ expect(found?.message).toBe("v2");
322
+ },
323
+ { timeout: 1e4 }
324
+ );
325
+ });
326
+ */
327
+ it("clears results when props change (e.g. reverse toggled)", async () => {
328
+ await setupConnected();
329
+ await dbWriter.posts.put(new Post({ message: "one" }));
330
+ await dbWriter.posts.put(new Post({ message: "two" }));
331
+ const { result, rerender } = renderUseQuery(dbReader, {
332
+ query: {},
333
+ resolve: true,
334
+ local: true,
335
+ remote: false,
336
+ prefetch: true,
337
+ reverse: false,
338
+ });
339
+ await waitFor(() => expect(result.current.items.length).toBeGreaterThan(0));
340
+ // Toggle a prop that triggers iterator rebuild
341
+ await act(async () => {
342
+ rerender({
343
+ query: {},
344
+ resolve: true,
345
+ local: true,
346
+ remote: false,
347
+ prefetch: false,
348
+ reverse: true,
349
+ });
350
+ });
351
+ // After reset we expect cleared results until re-fetched
352
+ await waitFor(() => expect(result.current.items.length).toBe(0));
353
+ await act(async () => {
354
+ await result.current.loadMore();
355
+ });
356
+ await waitFor(() => expect(result.current.items.length).toBeGreaterThan(0));
357
+ });
358
+ });
359
+ //# sourceMappingURL=useQuery.dom.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuery.dom.test.js","sourceRoot":"","sources":["../../../src/__tests__/useQuery.dom.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { Documents, DocumentsChange, WithContext } from "@peerbit/document";
1
+ import { AbstractSearchRequest, AbstractSearchResult, Documents, RemoteQueryOptions, WithContext } from "@peerbit/document";
2
2
  import * as indexerTypes from "@peerbit/indexer-interface";
3
3
  import { WithIndexedContext } from "@peerbit/document";
4
+ import { UpdateOptions } from "@peerbit/document";
4
5
  type QueryOptions = {
5
6
  query: QueryLike;
6
7
  id?: string;
@@ -15,29 +16,17 @@ export type QueryLike = {
15
16
  * All the non-DB-specific options supported by the original single-DB hook.
16
17
  * They stay fully backward-compatible.
17
18
  */
18
- export type UseQuerySharedOptions<T, I, R extends boolean | undefined, RT> = {
19
+ export type UseQuerySharedOptions<T, I, R extends boolean | undefined, RT = R extends false ? WithContext<I> : WithIndexedContext<T, I>> = {
19
20
  resolve?: R;
20
21
  transform?: (r: RT) => Promise<RT>;
21
22
  debounce?: number;
22
- debug?: boolean | {
23
- id: string;
24
- };
23
+ debug?: boolean | string;
25
24
  reverse?: boolean;
26
25
  batchSize?: number;
27
26
  prefetch?: boolean;
28
- ignoreUpdates?: boolean;
29
- onChange?: {
30
- merge?: boolean | ((c: DocumentsChange<T, I>) => DocumentsChange<T, I> | Promise<DocumentsChange<T, I>> | undefined);
31
- update?: (prev: RT[], change: DocumentsChange<T, I>) => RT[] | Promise<RT[]>;
32
- };
27
+ updates?: UpdateOptions<T, I, R>;
33
28
  local?: boolean;
34
- remote?: boolean | {
35
- warmup?: number;
36
- joining?: {
37
- waitFor?: number;
38
- };
39
- eager?: boolean;
40
- };
29
+ remote?: boolean | RemoteQueryOptions<AbstractSearchRequest, AbstractSearchResult, any>;
41
30
  } & QueryOptions;
42
31
  /**
43
32
  * `useQuery` – unified hook that accepts **either**