@t3ams/react 0.1.4
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/react.d.ts +27 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +44 -0
- package/dist/react.js.map +1 -0
- package/package.json +47 -0
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ReactElement, ReactNode } from "react";
|
|
2
|
+
import { GameStateUpdate, T3amsConfig, T3amsJson, T3amsSnapshot, T3amsTurn } from "@t3ams/sdk";
|
|
3
|
+
|
|
4
|
+
//#region src/react.d.ts
|
|
5
|
+
interface T3amsHook<TData extends T3amsJson = T3amsJson> extends T3amsSnapshot {
|
|
6
|
+
setState(status: GameStateUpdate, detail?: string): void;
|
|
7
|
+
setTurn(turn: T3amsTurn | null): void;
|
|
8
|
+
send(data: TData): void;
|
|
9
|
+
reportResult(summary: string): void;
|
|
10
|
+
exit(): void;
|
|
11
|
+
retry(): void;
|
|
12
|
+
}
|
|
13
|
+
/** Reactive view of the t3ams session plus imperative controls. Reads the singleton store; connection is driven by `T3amsProvider`. */
|
|
14
|
+
declare function useT3ams<TData extends T3amsJson = T3amsJson>(): T3amsHook<TData>;
|
|
15
|
+
/** Subscribe to inbound peer messages for the lifetime of the live session. No-op until connected. */
|
|
16
|
+
declare function useT3amsMessages<TData extends T3amsJson = T3amsJson>(handler: (from: string, data: TData) => void): void;
|
|
17
|
+
interface T3amsProviderProps {
|
|
18
|
+
readonly config: T3amsConfig;
|
|
19
|
+
readonly children: ReactNode;
|
|
20
|
+
readonly connecting?: ReactNode;
|
|
21
|
+
readonly error?: (message: string, retry: () => void) => ReactNode;
|
|
22
|
+
}
|
|
23
|
+
/** Entry point: configures and connects the session on mount, then renders children (or the connecting/error fallbacks). Passthrough outside t3ams. */
|
|
24
|
+
declare function T3amsProvider(props: T3amsProviderProps): ReactElement;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { T3amsHook, T3amsProvider, T3amsProviderProps, useT3ams, useT3amsMessages };
|
|
27
|
+
//# sourceMappingURL=react.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","names":[],"sources":["../src/react.ts"],"mappings":";;;;UA2BiB,SAAA,eAAwB,SAAA,GAAY,SAAA,UAAmB,aAAA;EACtE,QAAA,CAAS,MAAA,EAAQ,eAAA,EAAiB,MAAA;EAClC,OAAA,CAAQ,IAAA,EAAM,SAAA;EACd,IAAA,CAAK,IAAA,EAAM,KAAA;EACX,YAAA,CAAa,OAAA;EACb,IAAA;EACA,KAAA;AAAA;;iBAIc,QAAA,eAAuB,SAAA,GAAY,SAAA,CAAA,CAAA,GAAc,SAAA,CAAU,KAAA;;iBAc3D,gBAAA,eAA+B,SAAA,GAAY,SAAA,CAAA,CACzD,OAAA,GAAU,IAAA,UAAc,IAAA,EAAM,KAAA;AAAA,UAcf,kBAAA;EAAA,SACN,MAAA,EAAQ,WAAA;EAAA,SACR,QAAA,EAAU,SAAA;EAAA,SACV,UAAA,GAAa,SAAA;EAAA,SACb,KAAA,IAAS,OAAA,UAAiB,KAAA,iBAAsB,SAAA;AAAA;;iBAI3C,aAAA,CAAc,KAAA,EAAO,kBAAA,GAAqB,YAAA"}
|
package/dist/react.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Fragment, createElement, useEffect, useRef, useSyncExternalStore } from "react";
|
|
2
|
+
import { configureT3ams, ensureT3amsConnection, getT3amsSession, getT3amsSnapshot, retryT3amsConnection, subscribeT3ams, t3amsExit, t3amsReportResult, t3amsSend, t3amsSetState, t3amsSetTurn } from "@t3ams/sdk";
|
|
3
|
+
|
|
4
|
+
//#region src/react.ts
|
|
5
|
+
/** Reactive view of the t3ams session plus imperative controls. Reads the singleton store; connection is driven by `T3amsProvider`. */
|
|
6
|
+
function useT3ams() {
|
|
7
|
+
return {
|
|
8
|
+
...useSyncExternalStore(subscribeT3ams, getT3amsSnapshot, getT3amsSnapshot),
|
|
9
|
+
setState: t3amsSetState,
|
|
10
|
+
setTurn: t3amsSetTurn,
|
|
11
|
+
send: t3amsSend,
|
|
12
|
+
reportResult: t3amsReportResult,
|
|
13
|
+
exit: t3amsExit,
|
|
14
|
+
retry: retryT3amsConnection
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** Subscribe to inbound peer messages for the lifetime of the live session. No-op until connected. */
|
|
18
|
+
function useT3amsMessages(handler) {
|
|
19
|
+
const snapshot = useSyncExternalStore(subscribeT3ams, getT3amsSnapshot, getT3amsSnapshot);
|
|
20
|
+
const handlerRef = useRef(handler);
|
|
21
|
+
handlerRef.current = handler;
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
const session = getT3amsSession();
|
|
24
|
+
if (session === null) return;
|
|
25
|
+
return session.onMessage((from, data) => {
|
|
26
|
+
handlerRef.current(from, data);
|
|
27
|
+
});
|
|
28
|
+
}, [snapshot.session]);
|
|
29
|
+
}
|
|
30
|
+
/** Entry point: configures and connects the session on mount, then renders children (or the connecting/error fallbacks). Passthrough outside t3ams. */
|
|
31
|
+
function T3amsProvider(props) {
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
configureT3ams(props.config);
|
|
34
|
+
ensureT3amsConnection();
|
|
35
|
+
}, []);
|
|
36
|
+
const { status, error } = useT3ams();
|
|
37
|
+
if (status === "connecting") return createElement(Fragment, null, props.connecting ?? null);
|
|
38
|
+
if (status === "error") return createElement(Fragment, null, props.error ? props.error(error ?? "", retryT3amsConnection) : null);
|
|
39
|
+
return createElement(Fragment, null, props.children);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
export { T3amsProvider, useT3ams, useT3amsMessages };
|
|
44
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","names":[],"sources":["../src/react.ts"],"sourcesContent":["import {\n createElement,\n Fragment,\n useEffect,\n useRef,\n useSyncExternalStore,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\nimport type { GameStateUpdate, T3amsJson, T3amsTurn } from \"@t3ams/sdk\";\nimport {\n configureT3ams,\n ensureT3amsConnection,\n getT3amsSession,\n getT3amsSnapshot,\n retryT3amsConnection,\n subscribeT3ams,\n t3amsExit,\n t3amsReportResult,\n t3amsSend,\n t3amsSetState,\n t3amsSetTurn,\n type T3amsConfig,\n type T3amsSnapshot,\n} from \"@t3ams/sdk\";\n\nexport interface T3amsHook<TData extends T3amsJson = T3amsJson> extends T3amsSnapshot {\n setState(status: GameStateUpdate, detail?: string): void;\n setTurn(turn: T3amsTurn | null): void;\n send(data: TData): void;\n reportResult(summary: string): void;\n exit(): void;\n retry(): void;\n}\n\n/** Reactive view of the t3ams session plus imperative controls. Reads the singleton store; connection is driven by `T3amsProvider`. */\nexport function useT3ams<TData extends T3amsJson = T3amsJson>(): T3amsHook<TData> {\n const snapshot = useSyncExternalStore(subscribeT3ams, getT3amsSnapshot, getT3amsSnapshot);\n return {\n ...snapshot,\n setState: t3amsSetState,\n setTurn: t3amsSetTurn,\n send: t3amsSend,\n reportResult: t3amsReportResult,\n exit: t3amsExit,\n retry: retryT3amsConnection,\n };\n}\n\n/** Subscribe to inbound peer messages for the lifetime of the live session. No-op until connected. */\nexport function useT3amsMessages<TData extends T3amsJson = T3amsJson>(\n handler: (from: string, data: TData) => void,\n): void {\n const snapshot = useSyncExternalStore(subscribeT3ams, getT3amsSnapshot, getT3amsSnapshot);\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n useEffect(() => {\n const session = getT3amsSession();\n if (session === null) return;\n return session.onMessage((from, data) => {\n handlerRef.current(from, data as TData);\n });\n }, [snapshot.session]);\n}\n\nexport interface T3amsProviderProps {\n readonly config: T3amsConfig;\n readonly children: ReactNode;\n readonly connecting?: ReactNode;\n readonly error?: (message: string, retry: () => void) => ReactNode;\n}\n\n/** Entry point: configures and connects the session on mount, then renders children (or the connecting/error fallbacks). Passthrough outside t3ams. */\nexport function T3amsProvider(props: T3amsProviderProps): ReactElement {\n useEffect(() => {\n configureT3ams(props.config);\n ensureT3amsConnection();\n }, []);\n const { status, error } = useT3ams();\n if (status === \"connecting\") return createElement(Fragment, null, props.connecting ?? null);\n if (status === \"error\") {\n return createElement(Fragment, null, props.error ? props.error(error ?? \"\", retryT3amsConnection) : null);\n }\n return createElement(Fragment, null, props.children);\n}\n"],"mappings":";;;;;AAqCA,SAAgB,WAAkE;AAEhF,QAAO;EACL,GAFe,qBAAqB,gBAAgB,kBAAkB,iBAAiB;EAGvF,UAAU;EACV,SAAS;EACT,MAAM;EACN,cAAc;EACd,MAAM;EACN,OAAO;EACR;;;AAIH,SAAgB,iBACd,SACM;CACN,MAAM,WAAW,qBAAqB,gBAAgB,kBAAkB,iBAAiB;CACzF,MAAM,aAAa,OAAO,QAAQ;AAClC,YAAW,UAAU;AACrB,iBAAgB;EACd,MAAM,UAAU,iBAAiB;AACjC,MAAI,YAAY,KAAM;AACtB,SAAO,QAAQ,WAAW,MAAM,SAAS;AACvC,cAAW,QAAQ,MAAM,KAAc;IACvC;IACD,CAAC,SAAS,QAAQ,CAAC;;;AAWxB,SAAgB,cAAc,OAAyC;AACrE,iBAAgB;AACd,iBAAe,MAAM,OAAO;AAC5B,yBAAuB;IACtB,EAAE,CAAC;CACN,MAAM,EAAE,QAAQ,UAAU,UAAU;AACpC,KAAI,WAAW,aAAc,QAAO,cAAc,UAAU,MAAM,MAAM,cAAc,KAAK;AAC3F,KAAI,WAAW,QACb,QAAO,cAAc,UAAU,MAAM,MAAM,QAAQ,MAAM,MAAM,SAAS,IAAI,qBAAqB,GAAG,KAAK;AAE3G,QAAO,cAAc,UAAU,MAAM,MAAM,SAAS"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@t3ams/react",
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"types": "./dist/react.d.ts",
|
|
8
|
+
"import": "./dist/react.js"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"main": "./dist/react.js",
|
|
12
|
+
"types": "./dist/react.d.ts",
|
|
13
|
+
"files": [
|
|
14
|
+
"dist"
|
|
15
|
+
],
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "https://github.com/paritytech/t3ams-games-sdk",
|
|
22
|
+
"directory": "packages/typescript/react"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsdown",
|
|
26
|
+
"test": "vitest run",
|
|
27
|
+
"typecheck": "tsc --noEmit"
|
|
28
|
+
},
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"react": ">=18"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@t3ams/sdk": "0.1.4"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@testing-library/dom": "^10.4.0",
|
|
37
|
+
"@testing-library/react": "^16.1.0",
|
|
38
|
+
"@types/react": "^19",
|
|
39
|
+
"@types/react-dom": "^19",
|
|
40
|
+
"jsdom": "^26.1.0",
|
|
41
|
+
"react": "^19.2.0",
|
|
42
|
+
"react-dom": "^19.2.0",
|
|
43
|
+
"tsdown": "^0.20.1",
|
|
44
|
+
"typescript": "^5.9.3",
|
|
45
|
+
"vitest": "^4.0.18"
|
|
46
|
+
}
|
|
47
|
+
}
|