@peerbit/program-react 0.2.7 → 0.2.8-e209d2e
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/src/useProgram.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import type { Identity } from "@peerbit/crypto";
|
|
1
2
|
import { PublicSignKey } from "@peerbit/crypto";
|
|
2
|
-
import type { OpenOptions, Program,
|
|
3
|
+
import type { OpenOptions, Program, ProgramEvents } from "@peerbit/program";
|
|
3
4
|
type ExtractArgs<T> = T extends Program<infer Args> ? Args : never;
|
|
4
5
|
type ExtractEvents<T> = T extends Program<any, infer Events> ? Events : never;
|
|
5
|
-
export
|
|
6
|
+
export type ProgramClientLike = {
|
|
7
|
+
identity: Identity<PublicSignKey>;
|
|
8
|
+
open: <P extends Program<any, ProgramEvents>>(addressOrOpen: P | string, options?: OpenOptions<P>) => Promise<P>;
|
|
9
|
+
};
|
|
10
|
+
export declare function useProgram<P extends Program<ExtractArgs<P>, ExtractEvents<P>> & Program<any, ProgramEvents>>(peer: ProgramClientLike | undefined, addressOrOpen?: P | string, options?: OpenOptions<P> & {
|
|
6
11
|
id?: string;
|
|
7
12
|
keepOpenOnUnmount?: boolean;
|
|
8
13
|
}): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProgram.d.ts","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"useProgram.d.ts","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAY5E,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AACnE,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9E,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,EAC3C,aAAa,EAAE,CAAC,GAAG,MAAM,EACzB,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KACpB,OAAO,CAAC,CAAC,CAAC,CAAC;CAChB,CAAC;AAEF,wBAAgB,UAAU,CACzB,CAAC,SAAS,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,GAClD,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,EAE5B,IAAI,EAAE,iBAAiB,GAAG,SAAS,EACnC,aAAa,CAAC,EAAE,CAAC,GAAG,MAAM,EAC1B,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B;;;;;;;EAmID"}
|
package/dist/src/useProgram.js
CHANGED
|
@@ -32,8 +32,26 @@ export function useProgram(peer, addressOrOpen, options) {
|
|
|
32
32
|
existing: "reuse",
|
|
33
33
|
})
|
|
34
34
|
.then((p) => {
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
const subPrograms = (() => {
|
|
36
|
+
try {
|
|
37
|
+
const candidate = p?.allPrograms;
|
|
38
|
+
if (Array.isArray(candidate))
|
|
39
|
+
return candidate;
|
|
40
|
+
if (candidate &&
|
|
41
|
+
typeof candidate === "object" &&
|
|
42
|
+
typeof candidate[Symbol.iterator] === "function") {
|
|
43
|
+
return [...candidate];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch { }
|
|
47
|
+
return [];
|
|
48
|
+
})();
|
|
49
|
+
const hasTopics = [p, ...subPrograms].filter((x) => x?.closed === false &&
|
|
50
|
+
typeof x?.getTopics === "function" &&
|
|
51
|
+
x.getTopics?.().length > 0).length > 0;
|
|
52
|
+
// If program has no topics (or isn't a full Program instance), we can
|
|
53
|
+
// still use it; just default to "self" as the only known peer.
|
|
54
|
+
if (!hasTopics || typeof p?.getReady !== "function") {
|
|
37
55
|
setPeers([peer.identity.publicKey]);
|
|
38
56
|
}
|
|
39
57
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProgram.js","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useProgram.js","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peerbit/program-react",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8-e209d2e",
|
|
4
4
|
"description": "React hooks for Peerbit programs",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"react": "^18.0.0 || ^19.0.0"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@peerbit/crypto": "2.4.1",
|
|
46
|
-
"@peerbit/program": "5.5.
|
|
45
|
+
"@peerbit/crypto": "2.4.1-e209d2e",
|
|
46
|
+
"@peerbit/program": "5.5.2-e209d2e"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/react": "^18.3.11",
|
package/src/useProgram.tsx
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
+
import type { Identity } from "@peerbit/crypto";
|
|
1
2
|
import { PublicSignKey } from "@peerbit/crypto";
|
|
2
|
-
import type {
|
|
3
|
-
OpenOptions,
|
|
4
|
-
Program,
|
|
5
|
-
ProgramClient,
|
|
6
|
-
ProgramEvents,
|
|
7
|
-
} from "@peerbit/program";
|
|
3
|
+
import type { OpenOptions, Program, ProgramEvents } from "@peerbit/program";
|
|
8
4
|
import { useEffect, useReducer, useRef, useState } from "react";
|
|
9
5
|
|
|
10
6
|
const addressOrDefined = <A, B extends ProgramEvents, P extends Program<A, B>>(
|
|
@@ -19,11 +15,19 @@ const addressOrDefined = <A, B extends ProgramEvents, P extends Program<A, B>>(
|
|
|
19
15
|
type ExtractArgs<T> = T extends Program<infer Args> ? Args : never;
|
|
20
16
|
type ExtractEvents<T> = T extends Program<any, infer Events> ? Events : never;
|
|
21
17
|
|
|
18
|
+
export type ProgramClientLike = {
|
|
19
|
+
identity: Identity<PublicSignKey>;
|
|
20
|
+
open: <P extends Program<any, ProgramEvents>>(
|
|
21
|
+
addressOrOpen: P | string,
|
|
22
|
+
options?: OpenOptions<P>,
|
|
23
|
+
) => Promise<P>;
|
|
24
|
+
};
|
|
25
|
+
|
|
22
26
|
export function useProgram<
|
|
23
27
|
P extends Program<ExtractArgs<P>, ExtractEvents<P>> &
|
|
24
28
|
Program<any, ProgramEvents>,
|
|
25
29
|
>(
|
|
26
|
-
peer:
|
|
30
|
+
peer: ProgramClientLike | undefined,
|
|
27
31
|
addressOrOpen?: P | string,
|
|
28
32
|
options?: OpenOptions<P> & {
|
|
29
33
|
id?: string;
|
|
@@ -55,13 +59,32 @@ export function useProgram<
|
|
|
55
59
|
existing: "reuse",
|
|
56
60
|
})
|
|
57
61
|
.then((p: P) => {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
62
|
+
const subPrograms = (() => {
|
|
63
|
+
try {
|
|
64
|
+
const candidate = (p as any)?.allPrograms;
|
|
65
|
+
if (Array.isArray(candidate)) return candidate;
|
|
66
|
+
if (
|
|
67
|
+
candidate &&
|
|
68
|
+
typeof candidate === "object" &&
|
|
69
|
+
typeof (candidate as any)[Symbol.iterator] === "function"
|
|
70
|
+
) {
|
|
71
|
+
return [...candidate];
|
|
72
|
+
}
|
|
73
|
+
} catch {}
|
|
74
|
+
return [];
|
|
75
|
+
})();
|
|
76
|
+
|
|
77
|
+
const hasTopics =
|
|
78
|
+
[p, ...subPrograms].filter(
|
|
61
79
|
(x: any) =>
|
|
62
|
-
x
|
|
63
|
-
|
|
64
|
-
|
|
80
|
+
x?.closed === false &&
|
|
81
|
+
typeof x?.getTopics === "function" &&
|
|
82
|
+
x.getTopics?.().length > 0,
|
|
83
|
+
).length > 0;
|
|
84
|
+
|
|
85
|
+
// If program has no topics (or isn't a full Program instance), we can
|
|
86
|
+
// still use it; just default to "self" as the only known peer.
|
|
87
|
+
if (!hasTopics || typeof (p as any)?.getReady !== "function") {
|
|
65
88
|
setPeers([peer.identity.publicKey]);
|
|
66
89
|
} else {
|
|
67
90
|
changeListener = () => {
|