statewire 0.21.0 → 0.22.0

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.
Files changed (134) hide show
  1. package/dist/client/changes.d.ts +3 -6
  2. package/dist/client/changes.d.ts.map +1 -1
  3. package/dist/client/changes.js +1 -2
  4. package/dist/client/connection.d.ts +80 -83
  5. package/dist/client/connection.d.ts.map +1 -1
  6. package/dist/client/connection.js +2 -3
  7. package/dist/client/connection.js.map +1 -1
  8. package/dist/client/core.d.ts +39 -41
  9. package/dist/client/core.d.ts.map +1 -1
  10. package/dist/client/core.js +2 -3
  11. package/dist/client/session.d.ts +93 -95
  12. package/dist/client/session.d.ts.map +1 -1
  13. package/dist/client/session.js +6 -7
  14. package/dist/client/session.js.map +1 -1
  15. package/dist/client/sessionStore.d.ts +11 -14
  16. package/dist/client/sessionStore.d.ts.map +1 -1
  17. package/dist/client/sessionStore.js +1 -2
  18. package/dist/client/storageError.d.ts +2 -5
  19. package/dist/client/storageError.d.ts.map +1 -1
  20. package/dist/client/storageError.js +1 -2
  21. package/dist/client/timing.d.ts +11 -14
  22. package/dist/client/timing.d.ts.map +1 -1
  23. package/dist/client/timing.js +1 -2
  24. package/dist/document.d.ts +17 -20
  25. package/dist/document.d.ts.map +1 -1
  26. package/dist/document.js +1 -2
  27. package/dist/host/adapter.d.ts +4 -7
  28. package/dist/host/adapter.d.ts.map +1 -1
  29. package/dist/host/adapter.js +1 -2
  30. package/dist/host/draft.d.ts +13 -16
  31. package/dist/host/draft.d.ts.map +1 -1
  32. package/dist/host/draft.js +1 -2
  33. package/dist/host/engine.d.ts +7 -10
  34. package/dist/host/engine.d.ts.map +1 -1
  35. package/dist/host/engine.js +1 -2
  36. package/dist/host/host.d.ts +42 -45
  37. package/dist/host/host.d.ts.map +1 -1
  38. package/dist/host/host.js +1 -2
  39. package/dist/host/http.d.ts +4 -7
  40. package/dist/host/http.d.ts.map +1 -1
  41. package/dist/host/http.js +2 -3
  42. package/dist/host/socket.d.ts +144 -145
  43. package/dist/host/socket.d.ts.map +1 -1
  44. package/dist/host/socket.js +19 -9
  45. package/dist/host/socket.js.map +1 -1
  46. package/dist/host/synced.d.ts +3 -6
  47. package/dist/host/synced.d.ts.map +1 -1
  48. package/dist/host/synced.js +1 -2
  49. package/dist/host/work.d.ts +2 -5
  50. package/dist/host/work.d.ts.map +1 -1
  51. package/dist/host/work.js +1 -2
  52. package/dist/host-internal.d.ts +99 -93
  53. package/dist/host-internal.d.ts.map +1 -1
  54. package/dist/host.d.ts +90 -91
  55. package/dist/host.d.ts.map +1 -1
  56. package/dist/index.d.ts +11 -8
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +1 -1
  59. package/dist/statewire.d.ts +265 -268
  60. package/dist/statewire.d.ts.map +1 -1
  61. package/dist/statewire.js +1 -2
  62. package/dist/storage.d.ts +23 -26
  63. package/dist/storage.d.ts.map +1 -1
  64. package/dist/storage.js +1 -2
  65. package/dist/transports/fake-sse.d.ts +7 -10
  66. package/dist/transports/fake-sse.d.ts.map +1 -1
  67. package/dist/transports/fake-sse.js +1 -2
  68. package/dist/transports/fixtures.d.ts +19 -25
  69. package/dist/transports/fixtures.d.ts.map +1 -1
  70. package/dist/transports/fixtures.js +1 -2
  71. package/dist/transports/remote.d.ts +8 -11
  72. package/dist/transports/remote.d.ts.map +1 -1
  73. package/dist/transports/remote.js +1 -2
  74. package/dist/transports/sse-parser.d.ts +1 -4
  75. package/dist/transports/sse-parser.d.ts.map +1 -1
  76. package/dist/transports/sse-parser.js +1 -2
  77. package/dist/transports/sse.d.ts +50 -53
  78. package/dist/transports/sse.d.ts.map +1 -1
  79. package/dist/transports/sse.js +2 -3
  80. package/dist/transports/testing.d.ts +31 -34
  81. package/dist/transports/testing.d.ts.map +1 -1
  82. package/dist/transports/testing.js +1 -2
  83. package/dist/transports/ws.d.ts +5 -7
  84. package/dist/transports/ws.d.ts.map +1 -1
  85. package/dist/transports/ws.js +3 -4
  86. package/dist/transports/ws.js.map +1 -1
  87. package/dist/types.d.ts +81 -78
  88. package/dist/types.d.ts.map +1 -1
  89. package/dist/types.js +1 -2
  90. package/dist/util/draftTraps.d.ts +2 -4
  91. package/dist/util/draftTraps.d.ts.map +1 -1
  92. package/dist/util/draftTraps.js +1 -2
  93. package/dist/util/macrotask.d.ts +1 -4
  94. package/dist/util/macrotask.d.ts.map +1 -1
  95. package/dist/util/macrotask.js +1 -2
  96. package/dist/util/methodProxy.d.ts +1 -4
  97. package/dist/util/methodProxy.d.ts.map +1 -1
  98. package/dist/util/methodProxy.js +1 -2
  99. package/dist/util/randomId.d.ts +1 -4
  100. package/dist/util/randomId.d.ts.map +1 -1
  101. package/dist/util/randomId.js +1 -2
  102. package/dist/util/recordMutations.d.ts +5 -7
  103. package/dist/util/recordMutations.d.ts.map +1 -1
  104. package/dist/util/recordMutations.js +1 -2
  105. package/dist/util/statePath.d.ts +9 -12
  106. package/dist/util/statePath.d.ts.map +1 -1
  107. package/dist/util/statePath.js +1 -2
  108. package/dist/wire/context.d.ts +7 -12
  109. package/dist/wire/context.d.ts.map +1 -1
  110. package/dist/wire/context.js +2 -3
  111. package/dist/wire/documents.d.ts +36 -39
  112. package/dist/wire/documents.d.ts.map +1 -1
  113. package/dist/wire/documents.js +2 -3
  114. package/dist/wire/documents.js.map +1 -1
  115. package/dist/wire/limits.d.ts +7 -10
  116. package/dist/wire/limits.d.ts.map +1 -1
  117. package/dist/wire/limits.js +1 -2
  118. package/dist/wire/meta.d.ts +9 -11
  119. package/dist/wire/meta.d.ts.map +1 -1
  120. package/dist/wire/meta.js +1 -2
  121. package/dist/wire/meta.js.map +1 -1
  122. package/dist/wire/ops.d.ts +9 -12
  123. package/dist/wire/ops.d.ts.map +1 -1
  124. package/dist/wire/ops.js +1 -2
  125. package/dist/wire/protocol.d.ts +53 -56
  126. package/dist/wire/protocol.d.ts.map +1 -1
  127. package/dist/wire/protocol.js +1 -2
  128. package/dist/wire/version.d.ts +1 -4
  129. package/dist/wire/version.d.ts.map +1 -1
  130. package/dist/wire/version.js +1 -2
  131. package/package.json +6 -6
  132. package/src/client/connection.ts +13 -15
  133. package/src/host/socket.ts +47 -3
  134. package/src/host-internal.ts +10 -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":";;;;;;;;;AA+BA,MAAMwB,OAAO;AAIb,MAAMC,YAAY,OAChBC,SACAE,aACG;CACH,MAAM,EAAEC,KAAKC,UAAUJ;CACvB,MAAMK,SAAS,IAAIC,gBACjB,OAAOF,UAAU,aAAa,MAAMA,MAAM,IAAIA,KAChD;CACAC,OAAOE,IAAIlB,oBAAoBa,QAAQ;CACvC,MAAMM,WAAW,IAAIC,IAAIN,KAAKO,WAAWC,UAAUC,IAAI;CACvDJ,SAASK,WAAWL,SAASK,SAASC,QAAQ,SAAS,IAAI;CAC3DN,SAASO,WAAW,GAAGP,SAASO,SAASD,QAAQ,OAAO,EAAE,EAAC;CAC3DN,SAASQ,SAASX,OAAOY,SAAS;CAClC,OAAOT,SAASI;AAClB;AAEA,MAAMM,aACJC,GACAC,IACAC,OACAC,UAEA,IAAIE,SAASC,SAASC,WAAW;CAC/B,IAAIC;CACJ,IAAIG;CACJ,IAAIE,WAAW;CACf,IAAIC,UAAiC;CACrC,IAAIC,SAAS;CACb,MAAMC,YAAY;EAChBC,aAAaT,KAAK;EAClBA,QAAQE,iBAAiB;GACvBG,WAAW;GACXZ,GAAGiB,MAAM;EACX,GAAG3D,OAAO4D,kBAAkB;CAC9B;CACAH,IAAI;CACJb,MAAMiB,OAAOC,iBAAiB,eAAepB,GAAGiB,MAAM,CAAC;CACvDjB,GAAGqB,gBAAgB,CAAC;CACpBrB,GAAGsB,eAAe;EAChB,MAAMC,aAAavB,GAAGP,SAAS+B,KAAK;EACpC,IAAID,eAAAA,gBAA+B;GACjCV,UAAUpD,mBAAmBsC,GAAGwB,UAAU;GAC1CvB,GAAGiB,MAAM;GACT;EACF;EACAjB,GAAGyB,KAAKxB,KAAK;EAGbS,OAAOC,kBAAkBX,GAAGyB,KAAK,IAAI,GAAGnE,OAAOoE,cAAc;CAC/D;CACA,MAAMC,cAAcC,QAAQf,OAAO,KAAKC,UAAUZ,MAAMiB,OAAOU;CAC/D,MAAMC,QAAQC,UAAmB;EAC/Bf,aAAaT,KAAK;EAClByB,cAActB,IAAI;EAClBJ,OAAOyB,iBAAiBE,QAAQF,wBAAQ,IAAIE,MAAM,UAAU,CAAC;EAC7DjC,GAAGiB,MAAM;CACX;CACAjB,GAAGkC,aAAaC,UAAU;EACxB,IAAIR,MAAM,GAAG;EACbZ,IAAI;EACJ,IAAIqB;EACJ,IAAI;GACFA,MAAMC,KAAKC,MAAMC,OAAOJ,MAAMK,IAAI,CAAC;EACrC,QAAQ;GACNV,qBAAK,IAAIW,YAAY,qBAAqB,CAAC;GAC3C;EACF;EAEA,IACE,OAAOL,QAAQ,YACfA,QAAQ,QACRM,OAAOC,KAAKP,GAAG,CAAC,CAACQ,WAAW,GAE5B;EAEF,IAAI;GACF,MAAMC,OAAO1F,mBAAmBK,eAAeuC,GAAGqC,GAAG,CAAC;GACtD,IAAIS,MAAM;IACRhC,UAAUgC;IACV7C,GAAGiB,MAAM;GACX;EACF,SAASc,OAAO;GACdD,KAAKC,KAAK;EACZ;CACF;CACA/B,GAAG8C,gBAAgB;EACjBhC,SAAS;EACTE,aAAaT,KAAK;EAClByB,cAActB,IAAI;EAClB,IAAIG,SAASR,QAAQQ,OAAO;OACvBP,uBAAO,IAAI2B,MAAMrB,WAAW,YAAY,SAAS,CAAC;CACzD;AACF,CAAC;AAEH,MAAMmC,gBAAgB,OACpBhD,GACAiD,GACApE,SACAsB,UAC4B;CAC5B,IAAIF,KAAuB;CAC3B,IAAI;EACF,MAAMjB,MAAM,MAAMJ,UAAUC,SAASmB,EAAEkD,IAAInE,QAAQ;EACnD,MAAM,EAAEoE,SAAS,MAAM3F,YAAYwC,GAAGnB,QAAQuE,OAAO;EACrDjD,MAAMiB,OAAOiC,eAAe;EAC5B,MAAM,EAAEC,WAAWC,cAAc1E;EACjC,MAAM2E,KAAKD,aAAahE,WAAWb;EACnC,IAAI,CAAC8E,IAAI,MAAM,IAAItB,MAAM,6BAA6B;EAOtDjC,KAAK,IAAIuD,GAAGxE,KAAK,CAACb,gBAAgB,GALhCmF,cAAcI,KAAAA,IACV,CAAA,IACA,OAAOJ,cAAc,WACnB,CAACA,SAAS,IACVA,SACkC,CAAC;EAC3CL,EAAExE,SAASwB;EACX,OAAO,MAAMF,UAAUC,GAAGC,IAAIkD,MAAMhD,KAAK;CAC3C,UAAU;EACR,IAAI8C,EAAExE,WAAWwB,IAAIgD,EAAExE,SAAS;CAClC;AACF;AAEA,MAAMkF,aACJV,GACA/C,UACmC;CACnC,MAAMD,KAAKgD,EAAExE;CACb,IAAI,CAACwB,MAAMA,GAAG2D,eAAejF,MAC3B,OAAO0B,QAAQE,uBAAO,IAAI2B,MAAM,SAAS,CAAC;CAE5C,IAAI;EACFjC,GAAGyB,KAAKY,KAAKuB,UAAU3D,KAAK,CAAC;CAC/B,QAAQ;EACN,OAAOG,QAAQE,uBAAO,IAAI2B,MAAM,SAAS,CAAC;CAC5C;CACA,OAAO7B,QAAQC,QAAQ,EAAEwD,MAAM,KAAK,CAAC;AACvC;AAEA,MAAMC,aAAYlF,SAAAqE,QAAA;CAAA,MAAAc,IAAAC,EAAA,EAAA;CAIhB,MAAA,CAAAhB,KAAY9F,SAAS+G,KAAmC;CAAE,IAAAC;CAAA,IAAAH,EAAA,OAAAnF,WAAAmF,EAAA,OAAAf,GAAA;EAI3CkB,MAAAnE,GAAAG,UAAc6C,cAAchD,GAAGiD,GAAGpE,SAASsB,KAAK;EAAC6D,EAAA,KAAAnF;EAAAmF,EAAA,KAAAf;EAAAe,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAAA,IAAAI;CAAA,IAAAJ,EAAA,OAAAf,GAAA;EACxDmB,MAAAC,GAAAnE,UAAcyD,UAAUV,GAAG/C,KAAK;EAAC8D,EAAA,KAAAf;EAAAe,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,IAAAM;CAAA,IAAAN,EAAA,OAAAd,OAAAc,EAAA,OAAAnF,WAAAmF,EAAA,OAAAG,MAAAH,EAAA,OAAAI,IAAA;EAJ1BE,KAAA;GAAA,GACVzF;GAAOqE;GAAAqB,aAEGJ;GAAiDzC,MACxD0C;EACR;EAACJ,EAAA,KAAAd;EAAAc,EAAA,KAAAnF;EAAAmF,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,OALMrG,QAAQ2G,EAKd;AAAC;AAGJ,MAAME,yBACJ3F,YACwBZ,mBAAmBY,SAASkF,SAAS;AAE/D,MAAaU,qBAAqBpH,SAASmH,qBAAqB;AAjB9C,SAAAN,QAAA;CAAA,OAIuB,EAAAzF,QAAU,KAAK;AAAC"}
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
- //#region src/types.d.ts
7
- declare namespace Statewire {
8
- type Context = Readonly<Record<string, unknown>>;
9
- type Commands = Record<string, (...args: never[]) => unknown>;
10
- type Command<TCommands extends Commands = Commands> = { [K in keyof TCommands]: {
11
- method: K;
12
- params: Parameters<TCommands[K]>;
13
- }; }[keyof TCommands];
14
- type CommandsProxy<TCommands extends Commands> = { [K in keyof TCommands]: (...args: Parameters<TCommands[K]>) => Promise<Awaited<ReturnType<TCommands[K]>>>; };
15
- type CommandUpdate<TCommands extends Commands = Commands> = { [K in keyof TCommands]: {
16
- readonly protocol?: string;
17
- method: K;
18
- params: Parameters<TCommands[K]>;
19
- seq: number;
20
- status: "queued" | "posted" | "applied" | "settled";
21
- result?: unknown;
22
- failure?: StatewireClient.SendFailure;
23
- }; }[keyof TCommands];
24
- /** Push-based canonical state feed a statewire hands to the client core. */
25
- type StateSource = {
26
- snapshot: () => unknown;
27
- /** Drain the paths changed since the last take (`[]` entry = whole state). */
28
- takeChanged: () => StatewirePath[];
29
- /** Synchronous, per change; the consumer owns coalescing. */
30
- setOnChange: (listener: (() => void) | null) => void;
31
- };
32
- type Op = {
33
- op: "replace";
34
- path: StatewirePath;
35
- value: unknown;
36
- } | {
37
- op: "add";
38
- path: StatewirePath;
39
- value: unknown;
40
- } | {
41
- op: "remove";
42
- path: StatewirePath;
43
- };
44
- type Changes = {
45
- isChangedAt(path: readonly (string | number)[]): boolean;
46
- getChangedKeys(path: readonly (string | number)[]): string[];
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
- state: TState;
51
- documents?: StatewireDocuments.Source;
52
- selection?: StatewireProtocol.Selection | undefined;
53
- setContext?: (protocol: string, value: Statewire.Context) => void;
54
- validateContext?: (protocol: string, value: Statewire.Context, attach: StatewireHost.Attach) => void;
55
- contextChanged?: (protocol: string, value: Statewire.Context, attach: StatewireHost.Attach) => void;
56
- invoke?: (protocol: string, method: string, params: readonly unknown[]) => Promise<unknown>;
57
- commands: Statewire.CommandsProxy<TCommands>;
58
- connection?: StatewireClient.Connection;
59
- source?: Statewire.StateSource;
60
- /** Negation of the server's broadcast idle level; absent means always busy. */
61
- isBusy?: boolean;
62
- work?: {
63
- readonly isIdle: boolean;
64
- };
65
- /** Called by the serving host once an attach is registered, before its hello: documents mounted here ride the hello. */
66
- attaching?: (attach: StatewireHost.Attach) => void;
67
- /** Called by the serving host when an attach ends; its ephemeral documents and includes are gone. */
68
- detached?: (attach: StatewireHost.Attach) => void;
69
- /** The retained failed-send lane; present on transports with a durable session. */
70
- failures?: {
71
- list: () => readonly StatewireClient.FailedCommand[];
72
- retry: (entry: StatewireClient.FailedCommand) => Promise<unknown>;
73
- discard: (entry: StatewireClient.FailedCommand) => void;
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
- readonly failure: StatewireClient.SendFailure;
78
- constructor(failure: StatewireClient.SendFailure);
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
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;;kBAMiB;OACH,UAAU,SAAS;OACnB,WAAW,mBAAmB;OAE9B,QAAQ,kBAAkB,WAAW,eAC9C,WAAW;IAAc,QAAQ;IAAG,QAAQ,WAAW,UAAU;aAC5D;OAEI,cAAc,kBAAkB,eACzC,WAAW,gBACP,MAAM,WAAW,UAAU,QAC3B,QAAQ,QAAQ,WAAW,UAAU;OAGhC,cAAc,kBAAkB,WAAW,eACpD,WAAW;aACD;IACT,QAAQ;IACR,QAAQ,WAAW,UAAU;IAC7B;IACA;IACA;IACA,UAAU,gBAAgB;aAEtB;;OAGI;IACV;;IAEA,mBAAmB;;IAEnB,cAAc;;OAGJ;IACN;IAAe,MAAM;IAAe;;IACpC;IAAW,MAAM;IAAe;;IAChC;IAAc,MAAM;;OAEd;IACV,YAAY;IACZ,eAAe;;;UAIF,UACf,cACA,kBAAkB,UAAU,WAAW,UAAU;EAEjD,OAAO;EACP,YAAY,mBAAmB;EAC/B,YAAY,kBAAkB;EAC9B,cAAc,kBAAkB,OAAO,UAAU;EACjD,mBACE,kBACA,OAAO,UAAU,SACjB,QAAQ,cAAc;EAExB,kBACE,kBACA,OAAO,UAAU,SACjB,QAAQ,cAAc;EAExB,UACE,kBACA,gBACA,+BACG;EACL,UAAU,UAAU,cAAc;EAClC,aAAa,gBAAgB;EAC7B,SAAS,UAAU;;EAEnB;EACA;aAAkB;;;EAElB,aAAa,QAAQ,cAAc;;EAEnC,YAAY,QAAQ,cAAc;;EAElC;IACE,qBAAqB,gBAAgB;IACrC,QAAQ,OAAO,gBAAgB,kBAAkB;IACjD,UAAU,OAAO,gBAAgB;;;cAuBxB,2BAA2B;WAC7B,SAAS,gBAAgB;EAEtB,YAAA,SAAS,gBAAgB"}
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
- //#region src/types.ts
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
- //#endregion
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","names":[],"sources":["../../src/util/draftTraps.ts"],"mappings":";KAAK,cAAc,KACjB;cAQW,mBACX,uBACA,oBACC"}
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"}
@@ -1,4 +1,4 @@
1
- //#region src/util/draftTraps.ts
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
@@ -1,5 +1,2 @@
1
- //#region src/util/macrotask.d.ts
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","names":[],"sources":["../../src/util/macrotask.ts"],"mappings":";cAIa,wBAAyB"}
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"}
@@ -1,4 +1,4 @@
1
- //#region src/util/macrotask.ts
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
- //#region src/util/methodProxy.d.ts
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","names":[],"sources":["../../src/util/methodProxy.ts"],"mappings":";cAAa,oBAAqB,kBAChC,WAAW,gBAAgB,sBAAsB,qBAChD"}
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"}
@@ -1,4 +1,4 @@
1
- //#region src/util/methodProxy.ts
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
@@ -1,5 +1,2 @@
1
- //#region src/util/randomId.d.ts
2
- declare const randomId: () => string;
3
- //#endregion
4
- export { randomId };
1
+ export declare const randomId: () => string;
5
2
  //# sourceMappingURL=randomId.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"randomId.d.ts","names":[],"sources":["../../src/util/randomId.ts"],"mappings":";cAAa"}
1
+ {"version":3,"file":"randomId.d.ts","sourceRoot":"","sources":["../../src/util/randomId.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,QAAO,MAGhB,CAAC"}
@@ -1,6 +1,5 @@
1
- //#region src/util/randomId.ts
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
- state: T;
8
- changedPaths: Path[];
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
- //#endregion
11
- export { applyOptimistic, recordMutations };
9
+ export {};
12
10
  //# sourceMappingURL=recordMutations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recordMutations.d.ts","names":[],"sources":["../../src/util/recordMutations.ts"],"mappings":";KAEK;KACA,gBAAgB;;cAwER,kBAAmB,QAC9B,OAAO,QACP,SAAS,OAAO,oBACf;cAEU,kBAAmB,GAC9B,MAAM,GACN,SAAS,OAAO;EACb,OAAO;EAAG,cAAc"}
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
- //#region src/util/recordMutations.ts
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
@@ -1,14 +1,11 @@
1
- //#region src/util/statePath.d.ts
2
- type StatePath = readonly (string | number)[];
3
- declare const isUnsafeKey: (key: string | number, parent: string | number | undefined) => boolean;
4
- type WalkedPath = {
5
- /** Container of the final key; undefined when the path is empty. */
6
- parent: unknown;
7
- key: string | number;
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","names":[],"sources":["../../src/util/statePath.ts"],"mappings":";KAAY;cAEC,cACX,sBACA;KAGU;;EAEV;EACA;EACA;;cAQW,gBACX,eACA,MAAM,WACN,wCACC;cAoCU,aAAc,eAAe,MAAM"}
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"}
@@ -1,4 +1,4 @@
1
- //#region src/util/statePath.ts
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
@@ -1,14 +1,9 @@
1
- import { StatewireDocument } from "../document.js";
2
- import { Statewire } from "../types.js";
3
- import "../index.js";
4
- //#region src/wire/context.d.ts
5
- declare const contextValue: (encoded: unknown) => Statewire.Context;
6
- declare const encodeContext: (protocol: string, value: Statewire.Context) => {
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","names":[],"sources":["../../src/wire/context.ts"],"mappings":";;;;cAWa,eAAgB,qBAAmB,UAAU;cAa7C,gBAAiB,kBAAkB,OAAO,UAAU;;;;;cAcpD,iBAAkB,OAAO,UAAU,YAAU,UAAU"}
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"}
@@ -1,7 +1,7 @@
1
+ import { protocolToken } from "./protocol.js";
1
2
  import { decodeDocument, encodeDocument } from "../document.js";
2
3
  import "./limits.js";
3
- import { protocolToken } from "./protocol.js";
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
@@ -1,43 +1,40 @@
1
- import { StatewirePath } from "./ops.js";
2
- //#region src/wire/documents.d.ts
3
- declare namespace StatewireDocuments {
4
- type CacheEntry = {
5
- version: string;
6
- value: unknown;
7
- };
8
- type Storage = {
9
- namespace?: string;
10
- load: (identity: readonly string[]) => CacheEntry | undefined;
11
- save: (identity: readonly string[], entry: CacheEntry) => void;
12
- subscribe?: (listener: () => void) => () => void;
13
- };
14
- type Source = {
15
- get: (protocol: string, key?: readonly string[], prefix?: readonly string[]) => unknown;
16
- list: () => ReadonlyMap<number, Document>;
17
- subscribe: (listener: () => void) => () => void;
18
- };
19
- type Document = {
20
- key: readonly string[] | null;
21
- protocol?: string;
22
- main?: boolean;
23
- value: unknown;
24
- };
25
- type State = {
26
- mode: "mounted" | "keyless" | null;
27
- documents: ReadonlyMap<number, Document>;
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
- name: string;
32
- version: string;
29
+ export declare const applyDocumentOps: (previous: StatewireDocuments.State, ops: readonly unknown[], protocols?: readonly {
30
+ name: string;
31
+ version: string;
33
32
  }[], strict?: boolean) => {
34
- mode: "mounted" | "keyless";
35
- documents: Map<number, StatewireDocuments.Document>;
36
- changedPaths: StatewirePath[];
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","names":[],"sources":["../../src/wire/documents.ts"],"mappings":";;kBAKiB;OACH;IAAe;IAAiB;;OAChC;IACV;IACA,OAAO,gCAAgC;IACvC,OAAO,6BAA6B,OAAO;IAC3C,aAAa;;OAEH;IACV,MACE,kBACA,yBACA;IAEF,YAAY,oBAAoB;IAChC,YAAY;;OAEF;IACV;IACA;IACA;IACA;;OAEU;IACV;IACA,WAAW,oBAAoB;;;cAQtB,mBACX,UAAU,mBAAmB,OAC7B,yBACA;EAAuB;EAAc;KACrC;;;;;cAqJW,eACX,OAAO,mBAAmB,OAC1B,qBAAgB,mBAAA;cAML,qBACX,wBACA;cAQW,eACX,OAAO,mBAAmB,OAC1B,kBACA,yBACA,+BAA0B,mBAAA"}
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"}