statewire 0.21.0 → 0.22.1
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/client/changes.d.ts +3 -6
- package/dist/client/changes.d.ts.map +1 -1
- package/dist/client/changes.js +1 -2
- package/dist/client/connection.d.ts +80 -83
- package/dist/client/connection.d.ts.map +1 -1
- package/dist/client/connection.js +2 -3
- package/dist/client/connection.js.map +1 -1
- package/dist/client/core.d.ts +39 -41
- package/dist/client/core.d.ts.map +1 -1
- package/dist/client/core.js +2 -3
- package/dist/client/session.d.ts +93 -95
- package/dist/client/session.d.ts.map +1 -1
- package/dist/client/session.js +6 -7
- package/dist/client/session.js.map +1 -1
- package/dist/client/sessionStore.d.ts +11 -14
- package/dist/client/sessionStore.d.ts.map +1 -1
- package/dist/client/sessionStore.js +1 -2
- package/dist/client/storageError.d.ts +2 -5
- package/dist/client/storageError.d.ts.map +1 -1
- package/dist/client/storageError.js +1 -2
- package/dist/client/timing.d.ts +11 -14
- package/dist/client/timing.d.ts.map +1 -1
- package/dist/client/timing.js +1 -2
- package/dist/document.d.ts +17 -20
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +1 -2
- package/dist/host/adapter.d.ts +4 -7
- package/dist/host/adapter.d.ts.map +1 -1
- package/dist/host/adapter.js +1 -2
- package/dist/host/draft.d.ts +13 -16
- package/dist/host/draft.d.ts.map +1 -1
- package/dist/host/draft.js +1 -2
- package/dist/host/engine.d.ts +7 -10
- package/dist/host/engine.d.ts.map +1 -1
- package/dist/host/engine.js +1 -2
- package/dist/host/host.d.ts +42 -45
- package/dist/host/host.d.ts.map +1 -1
- package/dist/host/host.js +1 -2
- package/dist/host/http.d.ts +4 -7
- package/dist/host/http.d.ts.map +1 -1
- package/dist/host/http.js +2 -3
- package/dist/host/socket.d.ts +148 -145
- package/dist/host/socket.d.ts.map +1 -1
- package/dist/host/socket.js +30 -12
- package/dist/host/socket.js.map +1 -1
- package/dist/host/synced.d.ts +3 -6
- package/dist/host/synced.d.ts.map +1 -1
- package/dist/host/synced.js +1 -2
- package/dist/host/work.d.ts +2 -5
- package/dist/host/work.d.ts.map +1 -1
- package/dist/host/work.js +1 -2
- package/dist/host-internal.d.ts +101 -93
- package/dist/host-internal.d.ts.map +1 -1
- package/dist/host.d.ts +90 -91
- package/dist/host.d.ts.map +1 -1
- package/dist/index.d.ts +11 -8
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/statewire.d.ts +265 -268
- package/dist/statewire.d.ts.map +1 -1
- package/dist/statewire.js +1 -2
- package/dist/storage.d.ts +23 -26
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +1 -2
- package/dist/transports/fake-sse.d.ts +7 -10
- package/dist/transports/fake-sse.d.ts.map +1 -1
- package/dist/transports/fake-sse.js +1 -2
- package/dist/transports/fixtures.d.ts +19 -25
- package/dist/transports/fixtures.d.ts.map +1 -1
- package/dist/transports/fixtures.js +1 -2
- package/dist/transports/remote.d.ts +8 -11
- package/dist/transports/remote.d.ts.map +1 -1
- package/dist/transports/remote.js +1 -2
- package/dist/transports/sse-parser.d.ts +1 -4
- package/dist/transports/sse-parser.d.ts.map +1 -1
- package/dist/transports/sse-parser.js +1 -2
- package/dist/transports/sse.d.ts +50 -53
- package/dist/transports/sse.d.ts.map +1 -1
- package/dist/transports/sse.js +2 -3
- package/dist/transports/testing.d.ts +31 -34
- package/dist/transports/testing.d.ts.map +1 -1
- package/dist/transports/testing.js +1 -2
- package/dist/transports/ws.d.ts +5 -7
- package/dist/transports/ws.d.ts.map +1 -1
- package/dist/transports/ws.js +3 -4
- package/dist/transports/ws.js.map +1 -1
- package/dist/types.d.ts +81 -78
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/dist/util/draftTraps.d.ts +2 -4
- package/dist/util/draftTraps.d.ts.map +1 -1
- package/dist/util/draftTraps.js +1 -2
- package/dist/util/macrotask.d.ts +1 -4
- package/dist/util/macrotask.d.ts.map +1 -1
- package/dist/util/macrotask.js +1 -2
- package/dist/util/methodProxy.d.ts +1 -4
- package/dist/util/methodProxy.d.ts.map +1 -1
- package/dist/util/methodProxy.js +1 -2
- package/dist/util/randomId.d.ts +1 -4
- package/dist/util/randomId.d.ts.map +1 -1
- package/dist/util/randomId.js +1 -2
- package/dist/util/recordMutations.d.ts +5 -7
- package/dist/util/recordMutations.d.ts.map +1 -1
- package/dist/util/recordMutations.js +1 -2
- package/dist/util/statePath.d.ts +9 -12
- package/dist/util/statePath.d.ts.map +1 -1
- package/dist/util/statePath.js +1 -2
- package/dist/wire/context.d.ts +7 -12
- package/dist/wire/context.d.ts.map +1 -1
- package/dist/wire/context.js +2 -3
- package/dist/wire/documents.d.ts +36 -39
- package/dist/wire/documents.d.ts.map +1 -1
- package/dist/wire/documents.js +2 -3
- package/dist/wire/documents.js.map +1 -1
- package/dist/wire/limits.d.ts +7 -10
- package/dist/wire/limits.d.ts.map +1 -1
- package/dist/wire/limits.js +1 -2
- package/dist/wire/meta.d.ts +9 -11
- package/dist/wire/meta.d.ts.map +1 -1
- package/dist/wire/meta.js +1 -2
- package/dist/wire/meta.js.map +1 -1
- package/dist/wire/ops.d.ts +9 -12
- package/dist/wire/ops.d.ts.map +1 -1
- package/dist/wire/ops.js +1 -2
- package/dist/wire/protocol.d.ts +53 -56
- package/dist/wire/protocol.d.ts.map +1 -1
- package/dist/wire/protocol.js +1 -2
- package/dist/wire/version.d.ts +1 -4
- package/dist/wire/version.d.ts.map +1 -1
- package/dist/wire/version.js +1 -2
- package/package.json +6 -6
- package/src/client/connection.ts +13 -15
- package/src/host/socket.ts +63 -6
- package/src/host-internal.ts +12 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.js","names":["useState","flushTapSync","resource","ResourceElement","timing","attachFrame","handleEnvelope","unsupportedVersion","useLink","AttemptOutcome","Conn","StatewireEnvelope","Statewire","StatewireClient","useStatewireRemote","CLIENT_QUERY_PARAM","WS_SUBPROTOCOL","RemoteLink","StatewireFrame","StatewireSubmitResult","StatewireRemoteProps","WsChannel","socket","WebSocket","OPEN","socketUrl","options","WebsocketOptions","clientId","url","query","params","URLSearchParams","set","resolved","URL","globalThis","location","href","protocol","replace","pathname","search","toString","runSocket","c","ws","frame","abort","AbortController","Promise","resolve","reject","timer","ReturnType","setTimeout","ping","setInterval","timedOut","outcome","closed","arm","clearTimeout","close","heartbeatTimeoutMs","signal","addEventListener","onerror","onopen","negotiated","trim","send","pingIntervalMs","stale","Boolean","aborted","fail","error","clearInterval","Error","onmessage","event","env","JSON","parse","String","data","SyntaxError","Object","keys","length","done","onclose","attemptSocket","w","ctx","body","headers","throwIfAborted","protocols","webSocket","WS","extra","undefined","sendFrame","readyState","stringify","type","useWsLink","$","_c","_temp","t0","t1","_","t2","attemptOnce","useStatewireWebsocket","StatewireWebsocket","Commands","TState","TCommands"],"sources":["../../src/transports/ws.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { flushTapSync, resource } from \"@assistant-ui/tap\";\nimport type { ResourceElement } from \"@assistant-ui/tap\";\nimport { timing } from \"../client/timing\";\nimport {\n attachFrame,\n handleEnvelope,\n unsupportedVersion,\n useLink,\n} from \"../client/connection\";\nimport type {\n AttemptOutcome,\n Conn,\n StatewireEnvelope,\n} from \"../client/connection\";\nimport type { Statewire } from \"../types\";\nimport type { StatewireClient } from \"../statewire\";\nimport { useStatewireRemote } from \"./remote\";\nimport { CLIENT_QUERY_PARAM } from \"../host/adapter\";\nimport { WS_SUBPROTOCOL } from \"../wire/version\";\nimport type {\n RemoteLink,\n StatewireFrame,\n StatewireSubmitResult,\n StatewireRemoteProps,\n} from \"./sse\";\n\ntype WsChannel = {\n socket: WebSocket | null;\n};\n\nconst OPEN = 1;\n\nexport { WS_SUBPROTOCOL };\n\nconst socketUrl = async (\n options: StatewireClient.WebsocketOptions,\n clientId: string,\n) => {\n const { url, query } = options;\n const params = new URLSearchParams(\n typeof query === \"function\" ? await query() : query,\n );\n params.set(CLIENT_QUERY_PARAM, clientId);\n const resolved = new URL(url, globalThis.location?.href);\n resolved.protocol = resolved.protocol.replace(/^http/, \"ws\");\n resolved.pathname = `${resolved.pathname.replace(/\\/$/, \"\")}/ws`;\n resolved.search = params.toString();\n return resolved.href;\n};\n\nconst runSocket = (\n c: Conn,\n ws: WebSocket,\n frame: string,\n abort: AbortController,\n): Promise<AttemptOutcome> =>\n new Promise((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let ping: ReturnType<typeof setInterval> | undefined;\n let timedOut = false;\n let outcome: AttemptOutcome | null = null;\n let closed = false;\n const arm = () => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n timedOut = true;\n ws.close();\n }, timing.heartbeatTimeoutMs);\n };\n arm();\n abort.signal.addEventListener(\"abort\", () => ws.close());\n ws.onerror = () => {};\n ws.onopen = () => {\n const negotiated = ws.protocol.trim();\n if (negotiated !== WS_SUBPROTOCOL) {\n outcome = unsupportedVersion(c, negotiated);\n ws.close();\n return;\n }\n ws.send(frame);\n // A ping keeps a host that cannot run timers (a hibernating durable\n // object answers it without waking) talking before the silence timeout.\n ping = setInterval(() => ws.send(\"{}\"), timing.pingIntervalMs);\n };\n const stale = () => Boolean(outcome) || closed || abort.signal.aborted;\n const fail = (error: unknown) => {\n clearTimeout(timer);\n clearInterval(ping);\n reject(error instanceof Error ? error : new Error(\"protocol\"));\n ws.close();\n };\n ws.onmessage = (event) => {\n if (stale()) return;\n arm();\n let env: StatewireEnvelope;\n try {\n env = JSON.parse(String(event.data)) as StatewireEnvelope;\n } catch {\n fail(new SyntaxError(\"invalid JSON packet\"));\n return;\n }\n // {} heartbeats live below the packet layer: invisible to handlers.\n if (\n typeof env === \"object\" &&\n env !== null &&\n Object.keys(env).length === 0\n ) {\n return;\n }\n try {\n const done = flushTapSync(() => handleEnvelope(c, env));\n if (done) {\n outcome = done;\n ws.close();\n }\n } catch (error) {\n fail(error);\n }\n };\n ws.onclose = () => {\n closed = true;\n clearTimeout(timer);\n clearInterval(ping);\n if (outcome) resolve(outcome);\n else reject(new Error(timedOut ? \"timeout\" : \"network\"));\n };\n });\n\nconst attemptSocket = async (\n c: Conn,\n w: WsChannel,\n options: StatewireClient.WebsocketOptions,\n abort: AbortController,\n): Promise<AttemptOutcome> => {\n let ws: WebSocket | null = null;\n try {\n const url = await socketUrl(options, c.ctx.clientId);\n const { body } = await attachFrame(c, options.headers);\n abort.signal.throwIfAborted();\n const { protocols, webSocket } = options;\n const WS = webSocket ?? globalThis.WebSocket;\n if (!WS) throw new Error(\"no WebSocket implementation\");\n const extra =\n protocols === undefined\n ? []\n : typeof protocols === \"string\"\n ? [protocols]\n : protocols;\n ws = new WS(url, [WS_SUBPROTOCOL, ...extra]);\n w.socket = ws;\n return await runSocket(c, ws, body, abort);\n } finally {\n if (w.socket === ws) w.socket = null;\n }\n};\n\nconst sendFrame = (\n w: WsChannel,\n frame: StatewireFrame,\n): Promise<StatewireSubmitResult> => {\n const ws = w.socket;\n if (!ws || ws.readyState !== OPEN) {\n return Promise.reject(new Error(\"network\"));\n }\n try {\n ws.send(JSON.stringify(frame));\n } catch {\n return Promise.reject(new Error(\"network\"));\n }\n return Promise.resolve({ type: \"ok\" });\n};\n\nconst useWsLink = (\n options: StatewireClient.WebsocketOptions,\n ctx: StatewireRemoteProps,\n): RemoteLink => {\n const [w] = useState((): WsChannel => ({ socket: null }));\n return useLink({\n ...options,\n ctx,\n attemptOnce: (c, abort) => attemptSocket(c, w, options, abort),\n send: (_, frame) => sendFrame(w, frame),\n });\n};\n\nconst useStatewireWebsocket = (\n options: StatewireClient.WebsocketOptions,\n): Statewire<any, any> => useStatewireRemote(options, useWsLink);\n\nexport const StatewireWebsocket = resource(useStatewireWebsocket) as <\n TState = any,\n TCommands extends Statewire.Commands = Statewire.Commands,\n>(\n options: StatewireClient.WebsocketOptions,\n) => ResourceElement<Statewire<TState | undefined, TCommands>>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ws.js","names":["useState","flushTapSync","resource","ResourceElement","timing","attachFrame","handleEnvelope","unsupportedVersion","useLink","AttemptOutcome","Conn","StatewireEnvelope","Statewire","StatewireClient","useStatewireRemote","CLIENT_QUERY_PARAM","WS_SUBPROTOCOL","RemoteLink","StatewireFrame","StatewireSubmitResult","StatewireRemoteProps","WsChannel","socket","WebSocket","OPEN","socketUrl","options","WebsocketOptions","clientId","url","query","params","URLSearchParams","set","resolved","URL","globalThis","location","href","protocol","replace","pathname","search","toString","runSocket","c","ws","frame","abort","AbortController","Promise","resolve","reject","timer","ReturnType","setTimeout","ping","setInterval","timedOut","outcome","closed","arm","clearTimeout","close","heartbeatTimeoutMs","signal","addEventListener","onerror","onopen","negotiated","trim","send","pingIntervalMs","stale","Boolean","aborted","fail","error","clearInterval","Error","onmessage","event","env","JSON","parse","String","data","SyntaxError","Object","keys","length","done","onclose","attemptSocket","w","ctx","body","headers","throwIfAborted","protocols","webSocket","WS","extra","undefined","sendFrame","readyState","stringify","type","useWsLink","$","_c","_temp","t0","t1","_","t2","attemptOnce","useStatewireWebsocket","StatewireWebsocket","Commands","TState","TCommands","_c"],"sources":["../../src/transports/ws.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { flushTapSync, resource } from \"@assistant-ui/tap\";\nimport type { ResourceElement } from \"@assistant-ui/tap\";\nimport { timing } from \"../client/timing\";\nimport {\n attachFrame,\n handleEnvelope,\n unsupportedVersion,\n useLink,\n} from \"../client/connection\";\nimport type {\n AttemptOutcome,\n Conn,\n StatewireEnvelope,\n} from \"../client/connection\";\nimport type { Statewire } from \"../types\";\nimport type { StatewireClient } from \"../statewire\";\nimport { useStatewireRemote } from \"./remote\";\nimport { CLIENT_QUERY_PARAM } from \"../host/adapter\";\nimport { WS_SUBPROTOCOL } from \"../wire/version\";\nimport type {\n RemoteLink,\n StatewireFrame,\n StatewireSubmitResult,\n StatewireRemoteProps,\n} from \"./sse\";\n\ntype WsChannel = {\n socket: WebSocket | null;\n};\n\nconst OPEN = 1;\n\nexport { WS_SUBPROTOCOL };\n\nconst socketUrl = async (\n options: StatewireClient.WebsocketOptions,\n clientId: string,\n) => {\n const { url, query } = options;\n const params = new URLSearchParams(\n typeof query === \"function\" ? await query() : query,\n );\n params.set(CLIENT_QUERY_PARAM, clientId);\n const resolved = new URL(url, globalThis.location?.href);\n resolved.protocol = resolved.protocol.replace(/^http/, \"ws\");\n resolved.pathname = `${resolved.pathname.replace(/\\/$/, \"\")}/ws`;\n resolved.search = params.toString();\n return resolved.href;\n};\n\nconst runSocket = (\n c: Conn,\n ws: WebSocket,\n frame: string,\n abort: AbortController,\n): Promise<AttemptOutcome> =>\n new Promise((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let ping: ReturnType<typeof setInterval> | undefined;\n let timedOut = false;\n let outcome: AttemptOutcome | null = null;\n let closed = false;\n const arm = () => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n timedOut = true;\n ws.close();\n }, timing.heartbeatTimeoutMs);\n };\n arm();\n abort.signal.addEventListener(\"abort\", () => ws.close());\n ws.onerror = () => {};\n ws.onopen = () => {\n const negotiated = ws.protocol.trim();\n if (negotiated !== WS_SUBPROTOCOL) {\n outcome = unsupportedVersion(c, negotiated);\n ws.close();\n return;\n }\n ws.send(frame);\n // A ping keeps a host that cannot run timers (a hibernating durable\n // object answers it without waking) talking before the silence timeout.\n ping = setInterval(() => ws.send(\"{}\"), timing.pingIntervalMs);\n };\n const stale = () => Boolean(outcome) || closed || abort.signal.aborted;\n const fail = (error: unknown) => {\n clearTimeout(timer);\n clearInterval(ping);\n reject(error instanceof Error ? error : new Error(\"protocol\"));\n ws.close();\n };\n ws.onmessage = (event) => {\n if (stale()) return;\n arm();\n let env: StatewireEnvelope;\n try {\n env = JSON.parse(String(event.data)) as StatewireEnvelope;\n } catch {\n fail(new SyntaxError(\"invalid JSON packet\"));\n return;\n }\n // {} heartbeats live below the packet layer: invisible to handlers.\n if (\n typeof env === \"object\" &&\n env !== null &&\n Object.keys(env).length === 0\n ) {\n return;\n }\n try {\n const done = flushTapSync(() => handleEnvelope(c, env));\n if (done) {\n outcome = done;\n ws.close();\n }\n } catch (error) {\n fail(error);\n }\n };\n ws.onclose = () => {\n closed = true;\n clearTimeout(timer);\n clearInterval(ping);\n if (outcome) resolve(outcome);\n else reject(new Error(timedOut ? \"timeout\" : \"network\"));\n };\n });\n\nconst attemptSocket = async (\n c: Conn,\n w: WsChannel,\n options: StatewireClient.WebsocketOptions,\n abort: AbortController,\n): Promise<AttemptOutcome> => {\n let ws: WebSocket | null = null;\n try {\n const url = await socketUrl(options, c.ctx.clientId);\n const { body } = await attachFrame(c, options.headers);\n abort.signal.throwIfAborted();\n const { protocols, webSocket } = options;\n const WS = webSocket ?? globalThis.WebSocket;\n if (!WS) throw new Error(\"no WebSocket implementation\");\n const extra =\n protocols === undefined\n ? []\n : typeof protocols === \"string\"\n ? [protocols]\n : protocols;\n ws = new WS(url, [WS_SUBPROTOCOL, ...extra]);\n w.socket = ws;\n return await runSocket(c, ws, body, abort);\n } finally {\n if (w.socket === ws) w.socket = null;\n }\n};\n\nconst sendFrame = (\n w: WsChannel,\n frame: StatewireFrame,\n): Promise<StatewireSubmitResult> => {\n const ws = w.socket;\n if (!ws || ws.readyState !== OPEN) {\n return Promise.reject(new Error(\"network\"));\n }\n try {\n ws.send(JSON.stringify(frame));\n } catch {\n return Promise.reject(new Error(\"network\"));\n }\n return Promise.resolve({ type: \"ok\" });\n};\n\nconst useWsLink = (\n options: StatewireClient.WebsocketOptions,\n ctx: StatewireRemoteProps,\n): RemoteLink => {\n const [w] = useState((): WsChannel => ({ socket: null }));\n return useLink({\n ...options,\n ctx,\n attemptOnce: (c, abort) => attemptSocket(c, w, options, abort),\n send: (_, frame) => sendFrame(w, frame),\n });\n};\n\nconst useStatewireWebsocket = (\n options: StatewireClient.WebsocketOptions,\n): Statewire<any, any> => useStatewireRemote(options, useWsLink);\n\nexport const StatewireWebsocket = resource(useStatewireWebsocket) as <\n TState = any,\n TCommands extends Statewire.Commands = Statewire.Commands,\n>(\n options: StatewireClient.WebsocketOptions,\n) => ResourceElement<Statewire<TState | undefined, TCommands>>;\n"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,82 +1,85 @@
|
|
|
1
|
-
import { StatewireDocuments } from "./wire/documents.js";
|
|
2
|
-
import { StatewireHost } from "./host.js";
|
|
3
|
-
import { StatewireProtocol } from "./wire/protocol.js";
|
|
4
|
-
import { StatewireClient } from "./statewire.js";
|
|
5
|
-
import { StatewirePath } from "./wire/ops.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
1
|
+
import type { StatewireDocuments } from "./wire/documents.js";
|
|
2
|
+
import type { StatewireHost } from "./host.js";
|
|
3
|
+
import type { StatewireProtocol } from "./wire/protocol.js";
|
|
4
|
+
import type { StatewireClient } from "./statewire.js";
|
|
5
|
+
import type { StatewirePath } from "./wire/ops.js";
|
|
6
|
+
export declare namespace Statewire {
|
|
7
|
+
type Context = Readonly<Record<string, unknown>>;
|
|
8
|
+
type Commands = Record<string, (...args: never[]) => unknown>;
|
|
9
|
+
type Command<TCommands extends Commands = Commands> = {
|
|
10
|
+
[K in keyof TCommands]: {
|
|
11
|
+
method: K;
|
|
12
|
+
params: Parameters<TCommands[K]>;
|
|
13
|
+
};
|
|
14
|
+
}[keyof TCommands];
|
|
15
|
+
type CommandsProxy<TCommands extends Commands> = {
|
|
16
|
+
[K in keyof TCommands]: (...args: Parameters<TCommands[K]>) => Promise<Awaited<ReturnType<TCommands[K]>>>;
|
|
17
|
+
};
|
|
18
|
+
type CommandUpdate<TCommands extends Commands = Commands> = {
|
|
19
|
+
[K in keyof TCommands]: {
|
|
20
|
+
readonly protocol?: string;
|
|
21
|
+
method: K;
|
|
22
|
+
params: Parameters<TCommands[K]>;
|
|
23
|
+
seq: number;
|
|
24
|
+
status: "queued" | "posted" | "applied" | "settled";
|
|
25
|
+
result?: unknown;
|
|
26
|
+
failure?: StatewireClient.SendFailure;
|
|
27
|
+
};
|
|
28
|
+
}[keyof TCommands];
|
|
29
|
+
/** Push-based canonical state feed a statewire hands to the client core. */
|
|
30
|
+
type StateSource = {
|
|
31
|
+
snapshot: () => unknown;
|
|
32
|
+
/** Drain the paths changed since the last take (`[]` entry = whole state). */
|
|
33
|
+
takeChanged: () => StatewirePath[];
|
|
34
|
+
/** Synchronous, per change; the consumer owns coalescing. */
|
|
35
|
+
setOnChange: (listener: (() => void) | null) => void;
|
|
36
|
+
};
|
|
37
|
+
type Op = {
|
|
38
|
+
op: "replace";
|
|
39
|
+
path: StatewirePath;
|
|
40
|
+
value: unknown;
|
|
41
|
+
} | {
|
|
42
|
+
op: "add";
|
|
43
|
+
path: StatewirePath;
|
|
44
|
+
value: unknown;
|
|
45
|
+
} | {
|
|
46
|
+
op: "remove";
|
|
47
|
+
path: StatewirePath;
|
|
48
|
+
};
|
|
49
|
+
type Changes = {
|
|
50
|
+
isChangedAt(path: readonly (string | number)[]): boolean;
|
|
51
|
+
getChangedKeys(path: readonly (string | number)[]): string[];
|
|
52
|
+
};
|
|
48
53
|
}
|
|
49
|
-
interface Statewire<TState = any, TCommands extends Statewire.Commands = Statewire.Commands> {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
54
|
+
export interface Statewire<TState = any, TCommands extends Statewire.Commands = Statewire.Commands> {
|
|
55
|
+
state: TState;
|
|
56
|
+
documents?: StatewireDocuments.Source;
|
|
57
|
+
selection?: StatewireProtocol.Selection | undefined;
|
|
58
|
+
setContext?: (protocol: string, value: Statewire.Context) => void;
|
|
59
|
+
validateContext?: (protocol: string, value: Statewire.Context, attach: StatewireHost.Attach) => void;
|
|
60
|
+
contextChanged?: (protocol: string, value: Statewire.Context, attach: StatewireHost.Attach) => void;
|
|
61
|
+
invoke?: (protocol: string, method: string, params: readonly unknown[]) => Promise<unknown>;
|
|
62
|
+
commands: Statewire.CommandsProxy<TCommands>;
|
|
63
|
+
connection?: StatewireClient.Connection;
|
|
64
|
+
source?: Statewire.StateSource;
|
|
65
|
+
/** Negation of the server's broadcast idle level; absent means always busy. */
|
|
66
|
+
isBusy?: boolean;
|
|
67
|
+
work?: {
|
|
68
|
+
readonly isIdle: boolean;
|
|
69
|
+
};
|
|
70
|
+
/** Called by the serving host once an attach is registered, before its hello: documents mounted here ride the hello. */
|
|
71
|
+
attaching?: (attach: StatewireHost.Attach) => void;
|
|
72
|
+
/** Called by the serving host when an attach ends; its ephemeral documents and includes are gone. */
|
|
73
|
+
detached?: (attach: StatewireHost.Attach) => void;
|
|
74
|
+
/** The retained failed-send lane; present on transports with a durable session. */
|
|
75
|
+
failures?: {
|
|
76
|
+
list: () => readonly StatewireClient.FailedCommand[];
|
|
77
|
+
retry: (entry: StatewireClient.FailedCommand) => Promise<unknown>;
|
|
78
|
+
discard: (entry: StatewireClient.FailedCommand) => void;
|
|
79
|
+
};
|
|
75
80
|
}
|
|
76
|
-
declare class StatewireSendError extends Error {
|
|
77
|
-
|
|
78
|
-
|
|
81
|
+
export declare class StatewireSendError extends Error {
|
|
82
|
+
readonly failure: StatewireClient.SendFailure;
|
|
83
|
+
constructor(failure: StatewireClient.SendFailure);
|
|
79
84
|
}
|
|
80
|
-
//#endregion
|
|
81
|
-
export { Statewire, StatewireSendError };
|
|
82
85
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/types.ts
|
|
2
2
|
const describe = (failure) => {
|
|
3
3
|
switch (failure.fate) {
|
|
4
4
|
case "rejected": return `statewire: command rejected${failure.code ? ` (${failure.code})` : ""}${failure.message ? `: ${failure.message}` : ""}`;
|
|
@@ -17,7 +17,6 @@ var StatewireSendError = class extends Error {
|
|
|
17
17
|
this.failure = failure;
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
|
-
//#endregion
|
|
21
20
|
export { StatewireSendError };
|
|
22
21
|
|
|
23
22
|
//# sourceMappingURL=types.js.map
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
//#region src/util/draftTraps.d.ts
|
|
2
1
|
type SharedTraps = Pick<ProxyHandler<object>, "defineProperty" | "setPrototypeOf" | "preventExtensions" | "ownKeys" | "getOwnPropertyDescriptor">;
|
|
3
|
-
declare const sharedDraftTraps: (current: () => object, context: string) => SharedTraps;
|
|
4
|
-
|
|
5
|
-
export { sharedDraftTraps };
|
|
2
|
+
export declare const sharedDraftTraps: (current: () => object, context: string) => SharedTraps;
|
|
3
|
+
export {};
|
|
6
4
|
//# sourceMappingURL=draftTraps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draftTraps.d.ts","
|
|
1
|
+
{"version":3,"file":"draftTraps.d.ts","sourceRoot":"","sources":["../../src/util/draftTraps.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG,IAAI,CACrB,YAAY,CAAC,MAAM,CAAC,EAClB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,SAAS,GACT,0BAA0B,CAC7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,MAAM,EACrB,SAAS,MAAM,KACd,WAmBF,CAAC"}
|
package/dist/util/draftTraps.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/util/draftTraps.ts
|
|
2
2
|
const sharedDraftTraps = (current, context) => {
|
|
3
3
|
const unsupported = (op) => {
|
|
4
4
|
throw new Error(`statewire: ${op} is not supported ${context}`);
|
|
@@ -19,7 +19,6 @@ const sharedDraftTraps = (current, context) => {
|
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
|
-
//#endregion
|
|
23
22
|
export { sharedDraftTraps };
|
|
24
23
|
|
|
25
24
|
//# sourceMappingURL=draftTraps.js.map
|
package/dist/util/macrotask.d.ts
CHANGED
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
declare const createMacrotaskPoster: (callback: () => void) => (() => void);
|
|
3
|
-
//#endregion
|
|
4
|
-
export { createMacrotaskPoster };
|
|
1
|
+
export declare const createMacrotaskPoster: (callback: () => void) => (() => void);
|
|
5
2
|
//# sourceMappingURL=macrotask.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"macrotask.d.ts","
|
|
1
|
+
{"version":3,"file":"macrotask.d.ts","sourceRoot":"","sources":["../../src/util/macrotask.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAoBvE,CAAC"}
|
package/dist/util/macrotask.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/util/macrotask.ts
|
|
2
2
|
const createMacrotaskPoster = (callback) => {
|
|
3
3
|
if (typeof MessageChannel !== "undefined") {
|
|
4
4
|
let port1 = null;
|
|
@@ -19,7 +19,6 @@ const createMacrotaskPoster = (callback) => {
|
|
|
19
19
|
}
|
|
20
20
|
return () => setTimeout(callback, 0);
|
|
21
21
|
};
|
|
22
|
-
//#endregion
|
|
23
22
|
export { createMacrotaskPoster };
|
|
24
23
|
|
|
25
24
|
//# sourceMappingURL=macrotask.js.map
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
declare const createMethodProxy: <T extends object>(dispatch: (method: string, params: unknown[]) => Promise<unknown>) => T;
|
|
3
|
-
//#endregion
|
|
4
|
-
export { createMethodProxy };
|
|
1
|
+
export declare const createMethodProxy: <T extends object>(dispatch: (method: string, params: unknown[]) => Promise<unknown>) => T;
|
|
5
2
|
//# sourceMappingURL=methodProxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methodProxy.d.ts","
|
|
1
|
+
{"version":3,"file":"methodProxy.d.ts","sourceRoot":"","sources":["../../src/util/methodProxy.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EAChD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,KAChE,CAaF,CAAC"}
|
package/dist/util/methodProxy.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/util/methodProxy.ts
|
|
2
2
|
const createMethodProxy = (dispatch) => {
|
|
3
3
|
const memo = /* @__PURE__ */ new Map();
|
|
4
4
|
return new Proxy({}, { get: (_target, method) => {
|
|
@@ -11,7 +11,6 @@ const createMethodProxy = (dispatch) => {
|
|
|
11
11
|
return fn;
|
|
12
12
|
} });
|
|
13
13
|
};
|
|
14
|
-
//#endregion
|
|
15
14
|
export { createMethodProxy };
|
|
16
15
|
|
|
17
16
|
//# sourceMappingURL=methodProxy.js.map
|
package/dist/util/randomId.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"randomId.d.ts","
|
|
1
|
+
{"version":3,"file":"randomId.d.ts","sourceRoot":"","sources":["../../src/util/randomId.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,QAAO,MAGhB,CAAC"}
|
package/dist/util/randomId.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
// src/util/randomId.ts
|
|
2
2
|
const randomId = () => Array.from(crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16)), (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
3
|
-
//#endregion
|
|
4
3
|
export { randomId };
|
|
5
4
|
|
|
6
5
|
//# sourceMappingURL=randomId.js.map
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
//#region src/util/recordMutations.d.ts
|
|
2
1
|
type PathKey = string | number;
|
|
3
2
|
type Path = readonly PathKey[];
|
|
4
3
|
/** Run a mutator against a recording draft, as the client does for `optimistic`. */
|
|
5
|
-
declare const applyOptimistic: <TState>(state: TState, mutate: (draft: TState) => void) => TState;
|
|
6
|
-
declare const recordMutations: <T>(base: T, mutate: (draft: T) => void) => {
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
export declare const applyOptimistic: <TState>(state: TState, mutate: (draft: TState) => void) => TState;
|
|
5
|
+
export declare const recordMutations: <T>(base: T, mutate: (draft: T) => void) => {
|
|
6
|
+
state: T;
|
|
7
|
+
changedPaths: Path[];
|
|
9
8
|
};
|
|
10
|
-
|
|
11
|
-
export { applyOptimistic, recordMutations };
|
|
9
|
+
export {};
|
|
12
10
|
//# sourceMappingURL=recordMutations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordMutations.d.ts","
|
|
1
|
+
{"version":3,"file":"recordMutations.d.ts","sourceRoot":"","sources":["../../src/util/recordMutations.ts"],"names":[],"mappings":"AAEA,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAC/B,KAAK,IAAI,GAAG,SAAS,OAAO,EAAE,CAAC;AAuE/B,oFAAoF;AACpF,eAAO,MAAM,eAAe,GAAI,MAAM,EACpC,OAAO,MAAM,EACb,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAC9B,MAA8C,CAAC;AAElD,eAAO,MAAM,eAAe,GAAI,CAAC,EAC/B,MAAM,CAAC,EACP,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,KACzB;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,YAAY,EAAE,IAAI,EAAE,CAAA;CAyElC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sharedDraftTraps } from "./draftTraps.js";
|
|
2
|
-
|
|
2
|
+
// src/util/recordMutations.ts
|
|
3
3
|
const DRAFT = Symbol("statewire.draft");
|
|
4
4
|
const isDraftable = (value) => {
|
|
5
5
|
if (typeof value !== "object" || value === null) return false;
|
|
@@ -105,7 +105,6 @@ const recordMutations = (base, mutate) => {
|
|
|
105
105
|
changedPaths
|
|
106
106
|
};
|
|
107
107
|
};
|
|
108
|
-
//#endregion
|
|
109
108
|
export { applyOptimistic, recordMutations };
|
|
110
109
|
|
|
111
110
|
//# sourceMappingURL=recordMutations.js.map
|
package/dist/util/statePath.d.ts
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
leaf: unknown;
|
|
1
|
+
export type StatePath = readonly (string | number)[];
|
|
2
|
+
export declare const isUnsafeKey: (key: string | number, parent: string | number | undefined) => boolean;
|
|
3
|
+
export type WalkedPath = {
|
|
4
|
+
/** Container of the final key; undefined when the path is empty. */
|
|
5
|
+
parent: unknown;
|
|
6
|
+
key: string | number;
|
|
7
|
+
leaf: unknown;
|
|
9
8
|
};
|
|
10
|
-
declare const walkStatePath: (root: unknown, path: StatePath, mode: "read" | "parent" | "resolve") => WalkedPath | undefined;
|
|
11
|
-
declare const readAtPath: (root: unknown, path: StatePath) => unknown;
|
|
12
|
-
//#endregion
|
|
13
|
-
export { StatePath, WalkedPath, isUnsafeKey, readAtPath, walkStatePath };
|
|
9
|
+
export declare const walkStatePath: (root: unknown, path: StatePath, mode: "read" | "parent" | "resolve") => WalkedPath | undefined;
|
|
10
|
+
export declare const readAtPath: (root: unknown, path: StatePath) => unknown;
|
|
14
11
|
//# sourceMappingURL=statePath.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statePath.d.ts","
|
|
1
|
+
{"version":3,"file":"statePath.d.ts","sourceRoot":"","sources":["../../src/util/statePath.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;AAErD,eAAO,MAAM,WAAW,GACtB,KAAK,MAAM,GAAG,MAAM,EACpB,QAAQ,MAAM,GAAG,MAAM,GAAG,SAAS,YACwC,CAAC;AAE9E,MAAM,MAAM,UAAU,GAAG;IACvB,oEAAoE;IACpE,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAOF,eAAO,MAAM,aAAa,GACxB,MAAM,OAAO,EACb,MAAM,SAAS,EACf,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,KAClC,UAAU,GAAG,SAkCf,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,OAAO,EAAE,MAAM,SAAS,KAAG,OACnB,CAAC"}
|
package/dist/util/statePath.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/util/statePath.ts
|
|
2
2
|
const isUnsafeKey = (key, parent) => key === "__proto__" || key === "prototype" && parent === "constructor";
|
|
3
3
|
const walkStatePath = (root, path, mode) => {
|
|
4
4
|
let parent = void 0;
|
|
@@ -27,7 +27,6 @@ const walkStatePath = (root, path, mode) => {
|
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
29
|
const readAtPath = (root, path) => walkStatePath(root, path, "read").leaf;
|
|
30
|
-
//#endregion
|
|
31
30
|
export { isUnsafeKey, readAtPath, walkStatePath };
|
|
32
31
|
|
|
33
32
|
//# sourceMappingURL=statePath.js.map
|
package/dist/wire/context.d.ts
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
value: StatewireDocument.Value;
|
|
8
|
-
meta?: StatewireDocument.MetaEntry[];
|
|
9
|
-
protocol: string;
|
|
1
|
+
import type { Statewire } from "../types.js";
|
|
2
|
+
export declare const contextValue: (encoded: unknown) => Statewire.Context;
|
|
3
|
+
export declare const encodeContext: (protocol: string, value: Statewire.Context) => {
|
|
4
|
+
value: import("../index.js").StatewireDocument.Value;
|
|
5
|
+
meta?: import("../index.js").StatewireDocument.MetaEntry[];
|
|
6
|
+
protocol: string;
|
|
10
7
|
};
|
|
11
|
-
declare const captureContext: (value: Statewire.Context) => Statewire.Context;
|
|
12
|
-
//#endregion
|
|
13
|
-
export { captureContext, contextValue, encodeContext };
|
|
8
|
+
export declare const captureContext: (value: Statewire.Context) => Statewire.Context;
|
|
14
9
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/wire/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAiB;AAU1C,eAAO,MAAM,YAAY,GAAI,SAAS,OAAO,KAAG,SAAS,CAAC,OAWzD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,EAAE,OAAO,SAAS,CAAC,OAAO;;;;CAYvE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,CAAC,OAAO,KAAG,SAAS,CAAC,OAC/B,CAAC"}
|
package/dist/wire/context.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { protocolToken } from "./protocol.js";
|
|
1
2
|
import { decodeDocument, encodeDocument } from "../document.js";
|
|
2
3
|
import "./limits.js";
|
|
3
|
-
|
|
4
|
-
//#region src/wire/context.ts
|
|
4
|
+
// src/wire/context.ts
|
|
5
5
|
const freeze = (value) => {
|
|
6
6
|
if (typeof value !== "object" || value === null) return;
|
|
7
7
|
for (const child of Object.values(value)) freeze(child);
|
|
@@ -25,7 +25,6 @@ const encodeContext = (protocol, value) => {
|
|
|
25
25
|
return entry;
|
|
26
26
|
};
|
|
27
27
|
const captureContext = (value) => contextValue(encodeDocument(value));
|
|
28
|
-
//#endregion
|
|
29
28
|
export { captureContext, contextValue, encodeContext };
|
|
30
29
|
|
|
31
30
|
//# sourceMappingURL=context.js.map
|
package/dist/wire/documents.d.ts
CHANGED
|
@@ -1,43 +1,40 @@
|
|
|
1
|
-
import { StatewirePath } from "./ops.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
};
|
|
1
|
+
import type { StatewirePath } from "./ops.js";
|
|
2
|
+
export declare namespace StatewireDocuments {
|
|
3
|
+
type CacheEntry = {
|
|
4
|
+
version: string;
|
|
5
|
+
value: unknown;
|
|
6
|
+
};
|
|
7
|
+
type Storage = {
|
|
8
|
+
namespace?: string;
|
|
9
|
+
load: (identity: readonly string[]) => CacheEntry | undefined;
|
|
10
|
+
save: (identity: readonly string[], entry: CacheEntry) => void;
|
|
11
|
+
subscribe?: (listener: () => void) => () => void;
|
|
12
|
+
};
|
|
13
|
+
type Source = {
|
|
14
|
+
get: (protocol: string, key?: readonly string[], prefix?: readonly string[]) => unknown;
|
|
15
|
+
list: () => ReadonlyMap<number, Document>;
|
|
16
|
+
subscribe: (listener: () => void) => () => void;
|
|
17
|
+
};
|
|
18
|
+
type Document = {
|
|
19
|
+
key: readonly string[] | null;
|
|
20
|
+
protocol?: string;
|
|
21
|
+
main?: boolean;
|
|
22
|
+
value: unknown;
|
|
23
|
+
};
|
|
24
|
+
type State = {
|
|
25
|
+
mode: "mounted" | "keyless" | null;
|
|
26
|
+
documents: ReadonlyMap<number, Document>;
|
|
27
|
+
};
|
|
29
28
|
}
|
|
30
|
-
declare const applyDocumentOps: (previous: StatewireDocuments.State, ops: readonly unknown[], protocols?: readonly {
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
export declare const applyDocumentOps: (previous: StatewireDocuments.State, ops: readonly unknown[], protocols?: readonly {
|
|
30
|
+
name: string;
|
|
31
|
+
version: string;
|
|
33
32
|
}[], strict?: boolean) => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
mode: "mounted" | "keyless";
|
|
34
|
+
documents: Map<number, StatewireDocuments.Document>;
|
|
35
|
+
changedPaths: StatewirePath[];
|
|
37
36
|
};
|
|
38
|
-
declare const mainDocument: (state: StatewireDocuments.State, protocol: string) => StatewireDocuments.Document | undefined;
|
|
39
|
-
declare const resolveDocumentKey: (key: readonly string[], prefix?: readonly string[]) => readonly string[] | undefined;
|
|
40
|
-
declare const findDocument: (state: StatewireDocuments.State, protocol: string, key?: readonly string[], prefix?: readonly string[]) => StatewireDocuments.Document | undefined;
|
|
41
|
-
//#endregion
|
|
42
|
-
export { StatewireDocuments, applyDocumentOps, findDocument, mainDocument, resolveDocumentKey };
|
|
37
|
+
export declare const mainDocument: (state: StatewireDocuments.State, protocol: string) => StatewireDocuments.Document | undefined;
|
|
38
|
+
export declare const resolveDocumentKey: (key: readonly string[], prefix?: readonly string[]) => readonly string[] | undefined;
|
|
39
|
+
export declare const findDocument: (state: StatewireDocuments.State, protocol: string, key?: readonly string[], prefix?: readonly string[]) => StatewireDocuments.Document | undefined;
|
|
43
40
|
//# sourceMappingURL=documents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documents.d.ts","
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/wire/documents.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAc;AAE3C,yBAAiB,kBAAkB,CAAC;IAClC,KAAY,UAAU,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7D,KAAY,OAAO,GAAG;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,KAAK,UAAU,GAAG,SAAS,CAAC;QAC9D,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;QAC/D,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;KAClD,CAAC;IACF,KAAY,MAAM,GAAG;QACnB,GAAG,EAAE,CACH,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,KACvB,OAAO,CAAC;QACb,IAAI,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1C,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;KACjD,CAAC;IACF,KAAY,QAAQ,GAAG;QACrB,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,KAAY,KAAK,GAAG;QAClB,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;QACnC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;KAC1C,CAAC;CACH;AAMD,eAAO,MAAM,gBAAgB,GAC3B,UAAU,kBAAkB,CAAC,KAAK,EAClC,KAAK,SAAS,OAAO,EAAE,EACvB,YAAY,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EACxD,gBAAc;;;;CAmJf,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,OAAO,kBAAkB,CAAC,KAAK,EAC/B,UAAU,MAAM,4CAIf,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAC7B,KAAK,SAAS,MAAM,EAAE,EACtB,SAAS,SAAS,MAAM,EAAE,kCAMnB,CAAC;AAEV,eAAO,MAAM,YAAY,GACvB,OAAO,kBAAkB,CAAC,KAAK,EAC/B,UAAU,MAAM,EAChB,MAAM,SAAS,MAAM,EAAE,EACvB,SAAS,SAAS,MAAM,EAAE,4CAa3B,CAAC"}
|