statewire 0.24.1 → 0.24.3
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/connection.d.ts +4 -0
- package/dist/client/connection.d.ts.map +1 -1
- package/dist/client/connection.js +9 -2
- package/dist/client/connection.js.map +1 -1
- package/dist/client/session.d.ts +2 -0
- package/dist/client/session.d.ts.map +1 -1
- package/dist/client/session.js +52 -11
- package/dist/client/session.js.map +1 -1
- package/dist/host/host.d.ts +1 -0
- package/dist/host/host.d.ts.map +1 -1
- package/dist/host/host.js +8 -0
- package/dist/host/host.js.map +1 -1
- package/dist/host/socket.d.ts.map +1 -1
- package/dist/host/socket.js +3 -2
- package/dist/host/socket.js.map +1 -1
- package/dist/host.d.ts +13 -7
- package/dist/host.d.ts.map +1 -1
- package/dist/storage.js +1 -1
- package/dist/transports/sse.d.ts.map +1 -1
- package/dist/transports/sse.js +2 -1
- package/dist/transports/sse.js.map +1 -1
- package/dist/transports/testing.d.ts.map +1 -1
- package/dist/transports/testing.js +6 -2
- package/dist/transports/testing.js.map +1 -1
- package/dist/wire/protocol.d.ts +6 -1
- package/dist/wire/protocol.d.ts.map +1 -1
- package/dist/wire/protocol.js +12 -4
- package/dist/wire/protocol.js.map +1 -1
- package/package.json +1 -1
- package/src/client/connection.ts +11 -0
- package/src/client/session.ts +85 -11
- package/src/host/host.ts +13 -0
- package/src/host/socket.ts +5 -2
- package/src/host.ts +14 -6
- package/src/transports/sse.ts +2 -0
- package/src/transports/testing.ts +15 -2
- package/src/wire/protocol.ts +11 -3
package/dist/host/host.d.ts
CHANGED
package/dist/host/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/host/host.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAiB;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAgB;AAS7C,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,WACjC,CAAC;AAE1C,mHAAmH;AACnH,eAAO,MAAM,YAAY,GACvB,OAAO,MAAM,KACZ,aAAa,CAAC,SAAS,GAAG,SAAkC,CAAC;AAehE,eAAO,MAAM,iBAAiB,GAAI,MAAM,EACtC,MAAM,MAAM,MAAM,KACjB,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CA6FlD,CAAC;AAQF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,uDAAuD;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC7C,iEAAiE;IACjE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC7C,6EAA6E;IAC7E,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9C,kFAAkF;IAClF,QAAQ,EAAE,CACR,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,OAAO,KACd,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAIF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,KAAG,YAAY,GAAG,SACrC,CAAC;AAE9B,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,EAAE,MAAM,YAAY,SAEpE,CAAC;
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/host/host.ts"],"names":[],"mappings":"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"}
|
package/dist/host/host.js
CHANGED
|
@@ -207,9 +207,14 @@ const dispatch = (cell, call) => {
|
|
|
207
207
|
cell.listener?.onStart(inv);
|
|
208
208
|
cell.listener?.onPosted?.(inv);
|
|
209
209
|
const attach = call.origin?.attach;
|
|
210
|
+
const version = call.origin !== void 0 ? call.origin.version : call.version;
|
|
210
211
|
const ctx = {
|
|
211
212
|
caller: call.origin?.caller ?? LOCAL_CALLER,
|
|
212
213
|
context: call.context ?? call.origin?.context ?? Object.freeze({}),
|
|
214
|
+
get version() {
|
|
215
|
+
if (version === void 0) throw new Error("statewire: in-process dispatch has no version");
|
|
216
|
+
return version;
|
|
217
|
+
},
|
|
213
218
|
get attach() {
|
|
214
219
|
if (attach === void 0) throw new Error("statewire: in-process dispatch has no attach");
|
|
215
220
|
return attach;
|
|
@@ -267,6 +272,7 @@ const useStatewireCommands = (commands, options) => {
|
|
|
267
272
|
const [built] = useState(() => {
|
|
268
273
|
const cell = {
|
|
269
274
|
context: void 0,
|
|
275
|
+
version: void 0,
|
|
270
276
|
handlers: null,
|
|
271
277
|
queue: [],
|
|
272
278
|
active: /* @__PURE__ */ new Map(),
|
|
@@ -283,6 +289,7 @@ const useStatewireCommands = (commands, options) => {
|
|
|
283
289
|
}
|
|
284
290
|
cell.queue.push({
|
|
285
291
|
context: captureContext(cell.context?.() ?? {}),
|
|
292
|
+
version: cell.version,
|
|
286
293
|
method,
|
|
287
294
|
params,
|
|
288
295
|
ts: Date.now(),
|
|
@@ -323,6 +330,7 @@ const useStatewireCommands = (commands, options) => {
|
|
|
323
330
|
};
|
|
324
331
|
});
|
|
325
332
|
built.cell.context = options?.context;
|
|
333
|
+
built.cell.version = options?.version;
|
|
326
334
|
useEffect(() => {
|
|
327
335
|
const { cell: cell_0 } = built;
|
|
328
336
|
cell_0.unmounted = false;
|
package/dist/host/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","names":["captureContext","useEffect","useState","applyOps","sanitizeValue","StatewirePath","StatewireReject","createStateDraft","createMethodProxy","StateDraft","StatewireSendError","Statewire","StatewireHost","isDev","process","env","stateHosts","WeakMap","StateHost","documentIdentity","protocol","key","JSON","stringify","getStateHost","state","get","StateCell","current","draft","changed","documents","Map","Document","onOp","op","Op","onChange","onDocuments","ctl","StateCtl","host","bump","useStatewireState","init","TState","setVersion","cell","commit","c","flush","v","apply","ops","result","invalidate","push","changedPaths","snapshot","setOnOp","listener","setOnChange","takeChanged","mount","value","options","main","undefined","id","doc","Error","set","unmount","delete","setOnDocuments","record","changedPath","proxy","const","Settled","type","error","CommandsInvocation","method","params","ts","seq","clientId","held","localMeta","CommandsOutcome","payload","CommandsListener","onStart","inv","onPosted","onApplied","onCovered","onSettle","outcome","durable","CommandsSubmission","caller","Caller","context","Context","attach","Attach","CommandsHost","setListener","submit","call","Promise","methods","abort","commandsHosts","getCommandsHost","commands","bindCommandsHost","QueuedCall","resolve","reject","origin","ActiveInvocation","applied","controller","AbortController","settled","CommandsCell","handlers","Record","args","queue","active","running","unmounted","stallTimer","ReturnType","setTimeout","STALL_WARN_MS","LOCAL_CALLER","Object","freeze","auth","isConnected","toSendError","console","fate","cause","message","code","applyInvocation","settleInvocation","abortInvocations","clear","isThenable","PromiseLike","then","handlerOf","prototype","propertyIsEnumerable","handler","dispatch","ctx","Ctx","signal","this","resolved","pump","watchStall","shift","length","warn","useStatewireCommands","Commands","THandlers","ThisType","CommandsOptions","CommandsProxy","HandledCommands","built","Date","now","keys","filter","clearTimeout","queueMicrotask","queued","startsWith"],"sources":["../../src/host/host.ts"],"sourcesContent":["import { captureContext } from \"../wire/context\";\nimport { useEffect, useState } from \"react\";\nimport { applyOps, sanitizeValue } from \"../wire/ops\";\nimport type { StatewirePath } from \"../wire/ops\";\nimport { StatewireReject } from \"./engine\";\nimport { createStateDraft } from \"./draft\";\nimport { createMethodProxy } from \"../util/methodProxy\";\nimport type { StateDraft } from \"./draft\";\nimport { StatewireSendError } from \"../types\";\nimport type { Statewire } from \"../types\";\nimport type { StatewireHost } from \"../host\";\n\nconst isDev = () =>\n typeof process === \"undefined\" || process.env[\"NODE_ENV\"] !== \"production\";\n\n// ─── state ──────────────────────────────────────────────\n\nconst stateHosts = new WeakMap<object, StatewireHost.StateHost>();\n\nexport const documentIdentity = (protocol: string, key?: readonly string[]) =>\n JSON.stringify([protocol, key ?? null]);\n\n/** Host-side accessor for a `useStatewireState` state object's source (`snapshot()` reads the committed state). */\nexport const getStateHost = (\n state: object,\n): StatewireHost.StateHost | undefined => stateHosts.get(state);\n\ntype StateCell = {\n current: unknown;\n draft: StateDraft<object> | null;\n changed: StatewirePath[];\n documents: Map<string, StatewireHost.Document>;\n onOp: ((op: Statewire.Op) => void) | null;\n onChange: (() => void) | null;\n onDocuments: (() => void) | null;\n ctl: StatewireHost.StateCtl;\n host: StatewireHost.StateHost;\n bump: () => void;\n};\n\nexport const useStatewireState = <TState>(\n init: () => TState,\n): readonly [TState, StatewireHost.StateCtl<TState>] => {\n const [, setVersion] = useState(0);\n const [cell] = useState((): StateCell => {\n const commit = () => {\n if (c.draft) c.current = c.draft.flush();\n return c.current;\n };\n const c: StateCell = {\n current: sanitizeValue(init()),\n draft: null,\n changed: [[]],\n documents: new Map(),\n onOp: null,\n onChange: null,\n onDocuments: null,\n bump: () => setVersion((v) => v + 1),\n ctl: {\n apply: (ops) => {\n const result = applyOps(commit(), ops);\n c.current = result.state;\n c.draft?.invalidate();\n c.changed.push(...result.changedPaths);\n if (c.onOp) for (const op of ops) c.onOp(op);\n c.bump();\n c.onChange?.();\n },\n snapshot: commit,\n },\n host: {\n snapshot: commit,\n setOnOp: (listener) => {\n c.onOp = listener;\n },\n setOnChange: (listener) => {\n c.onChange = listener;\n },\n takeChanged: () => {\n const changed = c.changed;\n c.changed = [];\n return changed;\n },\n mount: (protocol, value, options) => {\n const key = options?.key;\n const main = options?.main ?? key === undefined;\n if (main) {\n for (const [id, doc] of c.documents) {\n if (\n doc.protocol === protocol &&\n doc.main &&\n id !== documentIdentity(protocol, key)\n )\n throw new Error(\n `statewire: ${protocol} already has a main document`,\n );\n }\n }\n c.documents.set(documentIdentity(protocol, key), {\n protocol,\n key: key === undefined ? null : [...key],\n main,\n value: sanitizeValue(value),\n });\n c.onDocuments?.();\n },\n unmount: (protocol, key) => {\n if (!c.documents.delete(documentIdentity(protocol, key)))\n throw new Error(\"statewire: document is not mounted\");\n c.onDocuments?.();\n },\n documents: () => c.documents,\n setOnDocuments: (listener) => {\n c.onDocuments = listener;\n },\n },\n };\n return c;\n });\n\n let value = cell.ctl.snapshot();\n if (typeof value === \"object\" && value !== null) {\n cell.draft ??= createStateDraft<object>({\n snapshot: () => cell.current,\n record: (op, changedPath) => {\n cell.changed.push(changedPath);\n cell.onOp?.(op);\n cell.bump();\n cell.onChange?.();\n },\n });\n stateHosts.set(cell.draft.proxy, cell.host);\n value = cell.draft.proxy;\n }\n return [value as TState, cell.ctl as StatewireHost.StateCtl<TState>] as const;\n};\n\n// ─── commands ───────────────────────────────────────────\n\ntype Settled =\n | { type: \"resolved\"; value: unknown }\n | { type: \"rejected\"; error: unknown };\n\nexport type CommandsInvocation = {\n readonly protocol?: string;\n readonly method: string;\n readonly params: readonly unknown[];\n readonly ts: number;\n /** Absent while the command waits in a client outbox. */\n readonly seq?: number;\n readonly id?: string;\n readonly clientId?: string;\n /** Present while the queued command is held. */\n readonly held?: true;\n /** Client-only data persisted with an outbox entry. */\n readonly localMeta?: unknown;\n};\n\nexport type CommandsOutcome =\n | { type: \"accepted\"; payload?: unknown }\n | { type: \"rejected\"; error: unknown };\n\nexport type CommandsListener = {\n onStart: (inv: CommandsInvocation) => void;\n onPosted?: (inv: CommandsInvocation) => void;\n /** The invocation's seq, hold or local meta changed in place. */\n onChange?: (inv: CommandsInvocation) => void;\n onApplied: (inv: CommandsInvocation) => void;\n /** Canonical state now covers the invocation's effect — drop any overlay. */\n onCovered?: (inv: CommandsInvocation) => void;\n /** `durable`: the session persisted the settled update and delivers it itself. */\n onSettle: (\n inv: CommandsInvocation,\n outcome: CommandsOutcome,\n durable?: boolean,\n ) => void;\n};\n\nexport type CommandsSubmission = {\n method: string;\n params: readonly unknown[];\n clientId?: string;\n caller?: StatewireHost.Caller;\n context?: Statewire.Context;\n attach?: StatewireHost.Attach;\n onApplied?: () => void;\n onSettle?: (outcome: CommandsOutcome) => void;\n};\n\nexport type CommandsHost = {\n setListener: (listener: CommandsListener | null) => void;\n submit?: (call: CommandsSubmission) => Promise<unknown>;\n /** Registered command names, read live. */\n methods?: () => string[];\n abort?: () => void;\n};\n\nconst commandsHosts = new WeakMap<object, CommandsHost>();\n\nexport const getCommandsHost = (commands: object): CommandsHost | undefined =>\n commandsHosts.get(commands);\n\nexport const bindCommandsHost = (commands: object, host: CommandsHost) => {\n commandsHosts.set(commands, host);\n};\n\ntype QueuedCall = {\n context?: Statewire.Context;\n method: string;\n params: readonly unknown[];\n ts: number;\n resolve: (value: unknown) => void;\n reject: (error: unknown) => void;\n origin?: CommandsSubmission;\n};\n\ntype ActiveInvocation = CommandsInvocation & {\n applied: boolean;\n controller: AbortController;\n settled: boolean;\n origin?: CommandsSubmission;\n};\n\ntype CommandsCell = {\n context: (() => Statewire.Context) | undefined;\n handlers: Record<string, (...args: never[]) => unknown> | null;\n queue: QueuedCall[];\n active: Map<ActiveInvocation, QueuedCall>;\n running: boolean;\n listener: CommandsListener | null;\n seq: number;\n unmounted: boolean;\n stallTimer: ReturnType<typeof setTimeout> | null;\n};\n\nconst STALL_WARN_MS = 5000;\n\n// In-process dispatch has no wire client: trivially attached.\nconst LOCAL_CALLER: StatewireHost.Caller = Object.freeze({\n get clientId(): string {\n throw new Error(\"statewire: in-process dispatch has no client id\");\n },\n auth: undefined,\n isConnected: true,\n});\n\nconst toSendError = (error: unknown): StatewireSendError => {\n if (\n !(error instanceof StatewireSendError) &&\n !(error instanceof StatewireReject)\n )\n console.error(\"statewire command failed\", error);\n return error instanceof StatewireSendError\n ? error\n : error instanceof StatewireReject\n ? new StatewireSendError({\n fate: \"rejected\",\n cause: \"server\",\n message: error.message,\n ...(error.code !== undefined && { code: error.code }),\n ...(error.payload !== undefined && { payload: error.payload }),\n })\n : new StatewireSendError({\n fate: \"failed\",\n cause: \"server\",\n message: \"the command failed\",\n });\n};\n\nconst applyInvocation = (cell: CommandsCell, inv: ActiveInvocation) => {\n if (inv.applied) return;\n inv.applied = true;\n cell.listener?.onApplied(inv);\n cell.listener?.onCovered?.(inv);\n inv.origin?.onApplied?.();\n};\n\nconst settleInvocation = (\n cell: CommandsCell,\n inv: ActiveInvocation,\n call: QueuedCall,\n settled: Settled,\n) => {\n if (inv.settled) return;\n inv.settled = true;\n cell.active.delete(inv);\n if (settled.type === \"resolved\") {\n applyInvocation(cell, inv);\n const outcome: CommandsOutcome =\n settled.value === undefined\n ? { type: \"accepted\" }\n : { type: \"accepted\", payload: sanitizeValue(settled.value) };\n cell.listener?.onSettle(inv, outcome);\n inv.origin?.onSettle?.(outcome);\n call.resolve(outcome.payload);\n } else {\n cell.listener?.onCovered?.(inv);\n const error = toSendError(settled.error);\n const outcome: CommandsOutcome = { type: \"rejected\", error };\n cell.listener?.onSettle(inv, outcome);\n inv.origin?.onSettle?.(outcome);\n call.reject(error);\n }\n};\n\nconst abortInvocations = (cell: CommandsCell) => {\n for (const [inv, call] of cell.active) {\n inv.settled = true;\n inv.controller.abort();\n const error = new StatewireSendError({ fate: \"crashed\", cause: \"server\" });\n const outcome: CommandsOutcome = { type: \"rejected\", error };\n cell.listener?.onSettle(inv, outcome);\n inv.origin?.onSettle?.(outcome);\n call.reject(error);\n }\n cell.active.clear();\n};\n\nconst isThenable = (value: unknown): value is PromiseLike<unknown> =>\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\";\n\n// A command is an own, enumerable, function-valued property — exactly what\n// `Object.keys` shows, so dispatch, `statewire/commands`, and the reserved-\n// namespace guard share one view; prototype-chain names are not commands.\nconst handlerOf = (\n handlers: Record<string, (...args: never[]) => unknown>,\n method: string,\n): ((...args: never[]) => unknown) | undefined => {\n if (!Object.prototype.propertyIsEnumerable.call(handlers, method)) {\n return undefined;\n }\n const handler = handlers[method];\n return typeof handler === \"function\" ? handler : undefined;\n};\n\nconst dispatch = (cell: CommandsCell, call: QueuedCall) => {\n const handler = handlerOf(cell.handlers!, call.method);\n if (handler === undefined) {\n const error = new StatewireSendError({\n fate: \"rejected\",\n cause: \"server\",\n code: \"unknown-command\",\n });\n call.origin?.onSettle?.({ type: \"rejected\", error });\n call.reject(error);\n return;\n }\n const inv: ActiveInvocation = {\n method: call.method,\n params: call.params,\n ts: call.ts,\n seq: ++cell.seq,\n applied: false,\n controller: new AbortController(),\n settled: false,\n ...(call.origin !== undefined && { origin: call.origin }),\n ...(call.origin?.clientId !== undefined && {\n clientId: call.origin.clientId,\n }),\n };\n cell.active.set(inv, call);\n cell.listener?.onStart(inv);\n cell.listener?.onPosted?.(inv);\n const attach = call.origin?.attach;\n const ctx: StatewireHost.Ctx = {\n caller: call.origin?.caller ?? LOCAL_CALLER,\n context: call.context ?? call.origin?.context ?? Object.freeze({}),\n get attach() {\n if (attach === undefined)\n throw new Error(\"statewire: in-process dispatch has no attach\");\n return attach;\n },\n signal: inv.controller.signal,\n applied: () => {\n if (!inv.settled) applyInvocation(cell, inv);\n },\n };\n try {\n const value = (\n handler as (\n this: StatewireHost.Ctx,\n ...args: readonly unknown[]\n ) => unknown\n ).call(ctx, ...call.params);\n if (isThenable(value)) {\n value.then(\n (resolved) =>\n settleInvocation(cell, inv, call, {\n type: \"resolved\",\n value: resolved,\n }),\n (error: unknown) =>\n settleInvocation(cell, inv, call, { type: \"rejected\", error }),\n );\n } else {\n settleInvocation(cell, inv, call, { type: \"resolved\", value });\n }\n } catch (error) {\n settleInvocation(cell, inv, call, { type: \"rejected\", error });\n }\n};\n\n// Prefix-only advancement: each handler runs synchronously to its first\n// await, then the pump moves on; settlement rides the returned promise.\nconst pump = (cell: CommandsCell) => {\n if (cell.running || !cell.handlers) {\n watchStall(cell);\n return;\n }\n cell.running = true;\n try {\n while (cell.handlers) {\n const call = cell.queue.shift();\n if (!call) break;\n dispatch(cell, call);\n }\n } finally {\n cell.running = false;\n }\n};\n\nconst watchStall = (cell: CommandsCell) => {\n if (!isDev() || cell.stallTimer !== null || cell.queue.length === 0) return;\n if (cell.handlers) return;\n cell.stallTimer = setTimeout(() => {\n cell.stallTimer = null;\n if (cell.handlers === null && cell.queue.length > 0 && !cell.unmounted) {\n console.warn(\n `statewire: ${cell.queue.length} buffered command(s) waiting over ${STALL_WARN_MS}ms — did the host forget to arm useStatewireCommands?`,\n );\n }\n }, STALL_WARN_MS);\n};\n\nexport const useStatewireCommands = <THandlers extends Statewire.Commands>(\n commands:\n | (THandlers & ThisType<StatewireHost.Ctx>)\n | undefined\n | null\n | false,\n options?: StatewireHost.CommandsOptions,\n): Statewire.CommandsProxy<StatewireHost.HandledCommands<THandlers>> => {\n const [built] = useState(() => {\n const cell: CommandsCell = {\n context: undefined,\n handlers: null,\n queue: [],\n active: new Map(),\n running: false,\n listener: null,\n seq: 0,\n unmounted: false,\n stallTimer: null,\n };\n const proxy = createMethodProxy<\n Statewire.CommandsProxy<StatewireHost.HandledCommands<THandlers>>\n >(\n (method, params) =>\n new Promise((resolve, reject) => {\n if (cell.unmounted) {\n reject(new Error(\"statewire: commands called after unmount\"));\n return;\n }\n cell.queue.push({\n context: captureContext(cell.context?.() ?? {}),\n method,\n params,\n ts: Date.now(),\n resolve,\n reject,\n });\n pump(cell);\n }),\n );\n commandsHosts.set(proxy, {\n abort: () => abortInvocations(cell),\n setListener: (listener) => {\n cell.listener = listener;\n },\n methods: () => {\n const handlers = cell.handlers;\n if (!handlers) return [];\n return Object.keys(handlers).filter(\n (method) => handlerOf(handlers, method) !== undefined,\n );\n },\n submit: (origin) =>\n new Promise((resolve, reject) => {\n if (cell.unmounted) {\n reject(new Error(\"statewire: commands called after unmount\"));\n return;\n }\n cell.queue.push({\n method: origin.method,\n params: origin.params,\n ts: Date.now(),\n resolve,\n reject,\n origin,\n });\n pump(cell);\n }),\n });\n return { cell, proxy };\n });\n\n built.cell.context = options?.context;\n useEffect(() => {\n const { cell } = built;\n cell.unmounted = false;\n return () => {\n cell.unmounted = true;\n cell.handlers = null;\n if (cell.stallTimer !== null) {\n clearTimeout(cell.stallTimer);\n cell.stallTimer = null;\n }\n queueMicrotask(() => {\n if (!cell.unmounted) return;\n abortInvocations(cell);\n const queued = cell.queue;\n cell.queue = [];\n for (const call of queued) {\n call.reject(new Error(\"statewire: unmounted\"));\n }\n });\n };\n }, [built]);\n\n useEffect(() => {\n if (commands) {\n for (const method of Object.keys(commands)) {\n if (method.startsWith(\"statewire/\")) {\n throw new Error(\n `statewire: cannot register \"${method}\": the \"statewire/\" method namespace is reserved`,\n );\n }\n }\n }\n built.cell.handlers = commands || null;\n pump(built.cell);\n });\n\n return built.proxy;\n};\n"],"mappings":";;;;;;;;AAYA,MAAMa,cACJ,OAAOC,YAAY,eAAeA,QAAQC,IAAI,gBAAgB;AAIhE,MAAMC,6BAAa,IAAIC,QAAyC;AAEhE,MAAaE,oBAAoBC,UAAkBC,QACjDC,KAAKC,UAAU,CAACH,UAAUC,OAAO,IAAI,CAAC;;AAGxC,MAAaG,gBACXC,UACwCT,WAAWU,IAAID,KAAK;AAe9D,MAAakB,qBACXC,SACsD;CACtD,MAAM,GAAGE,cAAc5C,SAAS,CAAC;CACjC,MAAM,CAAC6C,QAAQ7C,eAA0B;EACvC,MAAM8C,eAAe;GACnB,IAAIC,EAAEpB,OAAOoB,EAAErB,UAAUqB,EAAEpB,MAAMqB,MAAM;GACvC,OAAOD,EAAErB;EACX;EACA,MAAMqB,IAAe;GACnBrB,SAASxB,cAAcwC,KAAK,CAAC;GAC7Bf,OAAO;GACPC,SAAS,CAAC,CAAA,CAAE;GACZC,2BAAW,IAAIC,IAAI;GACnBE,MAAM;GACNG,UAAU;GACVC,aAAa;GACbI,YAAYI,YAAYK,MAAMA,IAAI,CAAC;GACnCZ,KAAK;IACHa,QAAQC,QAAQ;KACd,MAAMC,SAASnD,SAAS6C,OAAO,GAAGK,GAAG;KACrCJ,EAAErB,UAAU0B,OAAO7B;KACnBwB,EAAEpB,OAAO0B,WAAW;KACpBN,EAAEnB,QAAQ0B,KAAK,GAAGF,OAAOG,YAAY;KACrC,IAAIR,EAAEf,MAAM,KAAK,MAAMC,MAAMkB,KAAKJ,EAAEf,KAAKC,EAAE;KAC3Cc,EAAEP,KAAK;KACPO,EAAEZ,WAAW;IACf;IACAqB,UAAUV;GACZ;GACAP,MAAM;IACJiB,UAAUV;IACVW,UAAUC,aAAa;KACrBX,EAAEf,OAAO0B;IACX;IACAC,cAAcD,eAAa;KACzBX,EAAEZ,WAAWuB;IACf;IACAE,mBAAmB;KACjB,MAAMhC,UAAUmB,EAAEnB;KAClBmB,EAAEnB,UAAU,CAAA;KACZ,OAAOA;IACT;IACAiC,QAAQ3C,UAAU4C,OAAOC,YAAY;KACnC,MAAM5C,MAAM4C,SAAS5C;KACrB,MAAM6C,OAAOD,SAASC,QAAQ7C,QAAQ8C,KAAAA;KACtC,IAAID,MACG;WAAA,MAAM,CAACE,IAAIC,QAAQpB,EAAElB,WACxB,IACEsC,IAAIjD,aAAaA,YACjBiD,IAAIH,QACJE,OAAOjD,iBAAiBC,UAAUC,GAAG,GAErC,MAAM,IAAIiD,MACR,cAAclD,SAAQ,6BACxB;KAAA;KAGN6B,EAAElB,UAAUwC,IAAIpD,iBAAiBC,UAAUC,GAAG,GAAG;MAC/CD;MACAC,KAAKA,QAAQ8C,KAAAA,IAAY,OAAO,CAAC,GAAG9C,GAAG;MACvC6C;MACAF,OAAO5D,cAAc4D,KAAK;KAC5B,CAAC;KACDf,EAAEX,cAAc;IAClB;IACAkC,UAAUpD,YAAUC,UAAQ;KAC1B,IAAI,CAAC4B,EAAElB,UAAU0C,OAAOtD,iBAAiBC,YAAUC,KAAG,CAAC,GACrD,MAAM,IAAIiD,MAAM,oCAAoC;KACtDrB,EAAEX,cAAc;IAClB;IACAP,iBAAiBkB,EAAElB;IACnB2C,iBAAiBd,eAAa;KAC5BX,EAAEX,cAAcsB;IAClB;GACF;EACF;EACA,OAAOX;CACT,CAAC;CAED,IAAIe,UAAQjB,KAAKR,IAAImB,SAAS;CAC9B,IAAI,OAAOM,YAAU,YAAYA,YAAU,MAAM;EAC/CjB,KAAKlB,UAAUtB,iBAAyB;GACtCmD,gBAAgBX,KAAKnB;GACrB+C,SAASxC,IAAIyC,gBAAgB;IAC3B7B,KAAKjB,QAAQ0B,KAAKoB,WAAW;IAC7B7B,KAAKb,OAAOC,EAAE;IACdY,KAAKL,KAAK;IACVK,KAAKV,WAAW;GAClB;EACF,CAAC;EACDrB,WAAWuD,IAAIxB,KAAKlB,MAAMgD,OAAO9B,KAAKN,IAAI;EAC1CuB,UAAQjB,KAAKlB,MAAMgD;CACrB;CACA,OAAO,CAACb,SAAiBjB,KAAKR,GAAqC;AACrE;AA8DA,MAAM4E,gCAAgB,IAAIlG,QAA8B;AAExD,MAAamG,mBAAmBC,aAC9BF,cAAczF,IAAI2F,QAAQ;AAE5B,MAAaC,oBAAoBD,UAAkB5E,SAAuB;CACxE0E,cAAc5C,IAAI8C,UAAU5E,IAAI;AAClC;AA+BA,MAAMkG,gBAAgB;AAGtB,MAAMC,eAAqCC,OAAOC,OAAO;CACvD,IAAIvD,WAAmB;EACrB,MAAM,IAAIjB,MAAM,iDAAiD;CACnE;CACAyE,MAAM5E,KAAAA;CACN6E,aAAa;AACf,CAAC;AAED,MAAMC,eAAehE,UAAuC;CAC1D,IACE,EAAEA,iBAAiBvE,uBACnB,EAAEuE,iBAAiB3E,kBAEnB4I,QAAQjE,MAAM,4BAA4BA,KAAK;CACjD,OAAOA,iBAAiBvE,qBACpBuE,QACAA,iBAAiB3E,kBACf,IAAII,mBAAmB;EACrByI,MAAM;EACNC,OAAO;EACPC,SAASpE,MAAMoE;EACf,GAAIpE,MAAMqE,SAASnF,KAAAA,KAAa,EAAEmF,MAAMrE,MAAMqE,KAAK;EACnD,GAAIrE,MAAMU,YAAYxB,KAAAA,KAAa,EAAEwB,SAASV,MAAMU,QAAQ;CAC9D,CAAC,IACD,IAAIjF,mBAAmB;EACrByI,MAAM;EACNC,OAAO;EACPC,SAAS;CACX,CAAC;AACT;AAEA,MAAME,mBAAmBxG,MAAoB+C,QAA0B;CACrE,IAAIA,IAAI8B,SAAS;CACjB9B,IAAI8B,UAAU;CACd7E,KAAKa,UAAUoC,UAAUF,GAAG;CAC5B/C,KAAKa,UAAUqC,YAAYH,GAAG;CAC9BA,IAAI4B,QAAQ1B,YAAY;AAC1B;AAEA,MAAMwD,oBACJzG,MACA+C,KACAiB,MACAgB,YACG;CACH,IAAIjC,IAAIiC,SAAS;CACjBjC,IAAIiC,UAAU;CACdhF,KAAKsF,OAAO5D,OAAOqB,GAAG;CACtB,IAAIiC,QAAQ/C,SAAS,YAAY;EAC/BuE,gBAAgBxG,MAAM+C,GAAG;EACzB,MAAMK,UACJ4B,QAAQ/D,UAAUG,KAAAA,IACd,EAAEa,MAAM,WAAW,IACnB;GAAEA,MAAM;GAAYW,SAASvF,cAAc2H,QAAQ/D,KAAK;EAAE;EAChEjB,KAAKa,UAAUsC,SAASJ,KAAKK,OAAO;EACpCL,IAAI4B,QAAQxB,WAAWC,OAAO;EAC9BY,KAAKS,QAAQrB,QAAQR,OAAO;CAC9B,OAAO;EACL5C,KAAKa,UAAUqC,YAAYH,GAAG;EAC9B,MAAMb,QAAQgE,YAAYlB,QAAQ9C,KAAK;EACvC,MAAMkB,UAA2B;GAAEnB,MAAM;GAAYC;EAAM;EAC3DlC,KAAKa,UAAUsC,SAASJ,KAAKK,OAAO;EACpCL,IAAI4B,QAAQxB,WAAWC,OAAO;EAC9BY,KAAKU,OAAOxC,KAAK;CACnB;AACF;AAEA,MAAMwE,oBAAoB1G,SAAuB;CAC/C,KAAK,MAAM,CAAC+C,KAAKiB,SAAShE,KAAKsF,QAAQ;EACrCvC,IAAIiC,UAAU;EACdjC,IAAI+B,WAAWX,MAAM;EACrB,MAAMjC,QAAQ,IAAIvE,mBAAmB;GAAEyI,MAAM;GAAWC,OAAO;EAAS,CAAC;EACzE,MAAMjD,UAA2B;GAAEnB,MAAM;GAAYC;EAAM;EAC3DlC,KAAKa,UAAUsC,SAASJ,KAAKK,OAAO;EACpCL,IAAI4B,QAAQxB,WAAWC,OAAO;EAC9BY,KAAKU,OAAOxC,KAAK;CACnB;CACAlC,KAAKsF,OAAOqB,MAAM;AACpB;AAEA,MAAMC,cAAc3F,UAClB,OAAOA,UAAU,YACjBA,UAAU,QACV,OAAQA,MAA6B6F,SAAS;AAKhD,MAAMC,aACJ7B,UACA9C,WACgD;CAChD,IAAI,CAAC0D,OAAOkB,UAAUC,qBAAqBjD,KAAKkB,UAAU9C,MAAM,GAC9D;CAEF,MAAM8E,UAAUhC,SAAS9C;CACzB,OAAO,OAAO8E,YAAY,aAAaA,UAAU9F,KAAAA;AACnD;AAEA,MAAM+F,YAAYnH,MAAoBgE,SAAqB;CACzD,MAAMkD,UAAUH,UAAU/G,KAAKkF,UAAWlB,KAAK5B,MAAM;CACrD,IAAI8E,YAAY9F,KAAAA,GAAW;EACzB,MAAMc,QAAQ,IAAIvE,mBAAmB;GACnCyI,MAAM;GACNC,OAAO;GACPE,MAAM;EACR,CAAC;EACDvC,KAAKW,QAAQxB,WAAW;GAAElB,MAAM;GAAYC;EAAM,CAAC;EACnD8B,KAAKU,OAAOxC,KAAK;EACjB;CACF;CACA,MAAMa,MAAwB;EAC5BX,QAAQ4B,KAAK5B;EACbC,QAAQ2B,KAAK3B;EACbC,IAAI0B,KAAK1B;EACTC,KAAK,EAAEvC,KAAKuC;EACZsC,SAAS;EACTC,YAAY,IAAIC,gBAAgB;EAChCC,SAAS;EACT,GAAIhB,KAAKW,WAAWvD,KAAAA,KAAa,EAAEuD,QAAQX,KAAKW,OAAO;EACvD,GAAIX,KAAKW,QAAQnC,aAAapB,KAAAA,KAAa,EACzCoB,UAAUwB,KAAKW,OAAOnC,SACxB;CACF;CACAxC,KAAKsF,OAAO9D,IAAIuB,KAAKiB,IAAI;CACzBhE,KAAKa,UAAUiC,QAAQC,GAAG;CAC1B/C,KAAKa,UAAUmC,WAAWD,GAAG;CAC7B,MAAMY,SAASK,KAAKW,QAAQhB;CAC5B,MAAMyD,MAAyB;EAC7B7D,QAAQS,KAAKW,QAAQpB,UAAUsC;EAC/BpC,SAASO,KAAKP,WAAWO,KAAKW,QAAQlB,WAAWqC,OAAOC,OAAO,CAAC,CAAC;EACjE,IAAIpC,SAAS;GACX,IAAIA,WAAWvC,KAAAA,GACb,MAAM,IAAIG,MAAM,8CAA8C;GAChE,OAAOoC;EACT;EACA2D,QAAQvE,IAAI+B,WAAWwC;EACvBzC,eAAe;GACb,IAAI,CAAC9B,IAAIiC,SAASwB,gBAAgBxG,MAAM+C,GAAG;EAC7C;CACF;CACA,IAAI;EACF,MAAM9B,QACJiG,QAIAlD,KAAKoD,KAAK,GAAGpD,KAAK3B,MAAM;EAC1B,IAAIuE,WAAW3F,KAAK,GAClBA,MAAM6F,MACHU,aACCf,iBAAiBzG,MAAM+C,KAAKiB,MAAM;GAChC/B,MAAM;GACNhB,OAAOuG;EACT,CAAC,IACFtF,UACCuE,iBAAiBzG,MAAM+C,KAAKiB,MAAM;GAAE/B,MAAM;GAAYC;EAAM,CAAC,CACjE;OAEAuE,iBAAiBzG,MAAM+C,KAAKiB,MAAM;GAAE/B,MAAM;GAAYhB;EAAM,CAAC;CAEjE,SAASiB,OAAO;EACduE,iBAAiBzG,MAAM+C,KAAKiB,MAAM;GAAE/B,MAAM;GAAYC;EAAM,CAAC;CAC/D;AACF;AAIA,MAAMuF,QAAQzH,SAAuB;CACnC,IAAIA,KAAKuF,WAAW,CAACvF,KAAKkF,UAAU;EAClCwC,WAAW1H,IAAI;EACf;CACF;CACAA,KAAKuF,UAAU;CACf,IAAI;EACF,OAAOvF,KAAKkF,UAAU;GACpB,MAAMlB,OAAOhE,KAAKqF,MAAMsC,MAAM;GAC9B,IAAI,CAAC3D,MAAM;GACXmD,SAASnH,MAAMgE,IAAI;EACrB;CACF,UAAU;EACRhE,KAAKuF,UAAU;CACjB;AACF;AAEA,MAAMmC,cAAc1H,SAAuB;CACzC,IAAI,CAAClC,MAAM,KAAKkC,KAAKyF,eAAe,QAAQzF,KAAKqF,MAAMuC,WAAW,GAAG;CACrE,IAAI5H,KAAKkF,UAAU;CACnBlF,KAAKyF,aAAaE,iBAAiB;EACjC3F,KAAKyF,aAAa;EAClB,IAAIzF,KAAKkF,aAAa,QAAQlF,KAAKqF,MAAMuC,SAAS,KAAK,CAAC5H,KAAKwF,WAC3DW,QAAQ0B,KACN,cAAc7H,KAAKqF,MAAMuC,OAAM,oCAAqChC,cAAa,sDACnF;CAEJ,GAAGA,aAAa;AAClB;AAEA,MAAakC,wBACXxD,UAKApD,YACsE;CACtE,MAAM,CAACmH,SAASlL,eAAe;EAC7B,MAAM6C,OAAqB;GACzByD,SAASrC,KAAAA;GACT8D,UAAU;GACVG,OAAO,CAAA;GACPC,wBAAQ,IAAIrG,IAAI;GAChBsG,SAAS;GACT1E,UAAU;GACV0B,KAAK;GACLiD,WAAW;GACXC,YAAY;EACd;EACA,MAAM3D,QAAQrE,mBAGX2E,QAAQC,WACP,IAAI4B,SAASQ,SAASC,WAAW;GAC/B,IAAI1E,KAAKwF,WAAW;IAClBd,uBAAO,IAAInD,MAAM,0CAA0C,CAAC;IAC5D;GACF;GACAvB,KAAKqF,MAAM5E,KAAK;IACdgD,SAASxG,eAAe+C,KAAKyD,UAAU,KAAK,CAAC,CAAC;IAC9CrB;IACAC;IACAC,IAAIgG,KAAKC,IAAI;IACb9D;IACAC;GACF,CAAC;GACD+C,KAAKzH,IAAI;EACX,CAAC,CACL;EACAoE,cAAc5C,IAAIM,OAAO;GACvBqC,aAAauC,iBAAiB1G,IAAI;GAClC8D,cAAcjD,aAAa;IACzBb,KAAKa,WAAWA;GAClB;GACAqD,eAAe;IACb,MAAMgB,WAAWlF,KAAKkF;IACtB,IAAI,CAACA,UAAU,OAAO,CAAA;IACtB,OAAOY,OAAO0C,KAAKtD,QAAQ,CAAC,CAACuD,QAC1BrG,aAAW2E,UAAU7B,UAAU9C,QAAM,MAAMhB,KAAAA,CAC9C;GACF;GACA2C,SAASY,WACP,IAAIV,SAASQ,WAASC,aAAW;IAC/B,IAAI1E,KAAKwF,WAAW;KAClBd,yBAAO,IAAInD,MAAM,0CAA0C,CAAC;KAC5D;IACF;IACAvB,KAAKqF,MAAM5E,KAAK;KACd2B,QAAQuC,OAAOvC;KACfC,QAAQsC,OAAOtC;KACfC,IAAIgG,KAAKC,IAAI;KACb9D,SAAAA;KACAC,QAAAA;KACAC;IACF,CAAC;IACD8C,KAAKzH,IAAI;GACX,CAAC;EACL,CAAC;EACD,OAAO;GAAEA;GAAM8B;EAAM;CACvB,CAAC;CAEDuG,MAAMrI,KAAKyD,UAAUvC,SAASuC;CAC9BvG,gBAAgB;EACd,MAAM,EAAE8C,MAAAA,WAASqI;EACjBrI,OAAKwF,YAAY;EACjB,aAAa;GACXxF,OAAKwF,YAAY;GACjBxF,OAAKkF,WAAW;GAChB,IAAIlF,OAAKyF,eAAe,MAAM;IAC5BiD,aAAa1I,OAAKyF,UAAU;IAC5BzF,OAAKyF,aAAa;GACpB;GACAkD,qBAAqB;IACnB,IAAI,CAAC3I,OAAKwF,WAAW;IACrBkB,iBAAiB1G,MAAI;IACrB,MAAM4I,SAAS5I,OAAKqF;IACpBrF,OAAKqF,QAAQ,CAAA;IACb,KAAK,MAAMrB,QAAQ4E,QACjB5E,KAAKU,uBAAO,IAAInD,MAAM,sBAAsB,CAAC;GAEjD,CAAC;EACH;CACF,GAAG,CAAC8G,KAAK,CAAC;CAEVnL,gBAAgB;EACd,IAAIoH,UACG;QAAA,MAAMlC,YAAU0D,OAAO0C,KAAKlE,QAAQ,GACvC,IAAIlC,SAAOyG,WAAW,YAAY,GAChC,MAAM,IAAItH,MACR,+BAA+Ba,SAAM,iDACvC;EAAA;EAINiG,MAAMrI,KAAKkF,WAAWZ,YAAY;EAClCmD,KAAKY,MAAMrI,IAAI;CACjB,CAAC;CAED,OAAOqI,MAAMvG;AACf"}
|
|
1
|
+
{"version":3,"file":"host.js","names":["captureContext","useEffect","useState","applyOps","sanitizeValue","StatewirePath","StatewireReject","createStateDraft","createMethodProxy","StateDraft","StatewireSendError","Statewire","StatewireHost","isDev","process","env","stateHosts","WeakMap","StateHost","documentIdentity","protocol","key","JSON","stringify","getStateHost","state","get","StateCell","current","draft","changed","documents","Map","Document","onOp","op","Op","onChange","onDocuments","ctl","StateCtl","host","bump","useStatewireState","init","TState","setVersion","cell","commit","c","flush","v","apply","ops","result","invalidate","push","changedPaths","snapshot","setOnOp","listener","setOnChange","takeChanged","mount","value","options","main","undefined","id","doc","Error","set","unmount","delete","setOnDocuments","record","changedPath","proxy","const","Settled","type","error","CommandsInvocation","method","params","ts","seq","clientId","held","localMeta","CommandsOutcome","payload","CommandsListener","onStart","inv","onPosted","onApplied","onCovered","onSettle","outcome","durable","CommandsSubmission","caller","Caller","context","Context","version","attach","Attach","CommandsHost","setListener","submit","call","Promise","methods","abort","commandsHosts","getCommandsHost","commands","bindCommandsHost","QueuedCall","resolve","reject","origin","ActiveInvocation","applied","controller","AbortController","settled","CommandsCell","handlers","Record","args","queue","active","running","unmounted","stallTimer","ReturnType","setTimeout","STALL_WARN_MS","LOCAL_CALLER","Object","freeze","auth","isConnected","toSendError","console","fate","cause","message","code","applyInvocation","settleInvocation","abortInvocations","clear","isThenable","PromiseLike","then","handlerOf","prototype","propertyIsEnumerable","handler","dispatch","ctx","Ctx","signal","this","resolved","pump","watchStall","shift","length","warn","useStatewireCommands","Commands","THandlers","ThisType","CommandsOptions","CommandsProxy","HandledCommands","built","Date","now","keys","filter","clearTimeout","queueMicrotask","queued","startsWith"],"sources":["../../src/host/host.ts"],"sourcesContent":["import { captureContext } from \"../wire/context\";\nimport { useEffect, useState } from \"react\";\nimport { applyOps, sanitizeValue } from \"../wire/ops\";\nimport type { StatewirePath } from \"../wire/ops\";\nimport { StatewireReject } from \"./engine\";\nimport { createStateDraft } from \"./draft\";\nimport { createMethodProxy } from \"../util/methodProxy\";\nimport type { StateDraft } from \"./draft\";\nimport { StatewireSendError } from \"../types\";\nimport type { Statewire } from \"../types\";\nimport type { StatewireHost } from \"../host\";\n\nconst isDev = () =>\n typeof process === \"undefined\" || process.env[\"NODE_ENV\"] !== \"production\";\n\n// ─── state ──────────────────────────────────────────────\n\nconst stateHosts = new WeakMap<object, StatewireHost.StateHost>();\n\nexport const documentIdentity = (protocol: string, key?: readonly string[]) =>\n JSON.stringify([protocol, key ?? null]);\n\n/** Host-side accessor for a `useStatewireState` state object's source (`snapshot()` reads the committed state). */\nexport const getStateHost = (\n state: object,\n): StatewireHost.StateHost | undefined => stateHosts.get(state);\n\ntype StateCell = {\n current: unknown;\n draft: StateDraft<object> | null;\n changed: StatewirePath[];\n documents: Map<string, StatewireHost.Document>;\n onOp: ((op: Statewire.Op) => void) | null;\n onChange: (() => void) | null;\n onDocuments: (() => void) | null;\n ctl: StatewireHost.StateCtl;\n host: StatewireHost.StateHost;\n bump: () => void;\n};\n\nexport const useStatewireState = <TState>(\n init: () => TState,\n): readonly [TState, StatewireHost.StateCtl<TState>] => {\n const [, setVersion] = useState(0);\n const [cell] = useState((): StateCell => {\n const commit = () => {\n if (c.draft) c.current = c.draft.flush();\n return c.current;\n };\n const c: StateCell = {\n current: sanitizeValue(init()),\n draft: null,\n changed: [[]],\n documents: new Map(),\n onOp: null,\n onChange: null,\n onDocuments: null,\n bump: () => setVersion((v) => v + 1),\n ctl: {\n apply: (ops) => {\n const result = applyOps(commit(), ops);\n c.current = result.state;\n c.draft?.invalidate();\n c.changed.push(...result.changedPaths);\n if (c.onOp) for (const op of ops) c.onOp(op);\n c.bump();\n c.onChange?.();\n },\n snapshot: commit,\n },\n host: {\n snapshot: commit,\n setOnOp: (listener) => {\n c.onOp = listener;\n },\n setOnChange: (listener) => {\n c.onChange = listener;\n },\n takeChanged: () => {\n const changed = c.changed;\n c.changed = [];\n return changed;\n },\n mount: (protocol, value, options) => {\n const key = options?.key;\n const main = options?.main ?? key === undefined;\n if (main) {\n for (const [id, doc] of c.documents) {\n if (\n doc.protocol === protocol &&\n doc.main &&\n id !== documentIdentity(protocol, key)\n )\n throw new Error(\n `statewire: ${protocol} already has a main document`,\n );\n }\n }\n c.documents.set(documentIdentity(protocol, key), {\n protocol,\n key: key === undefined ? null : [...key],\n main,\n value: sanitizeValue(value),\n });\n c.onDocuments?.();\n },\n unmount: (protocol, key) => {\n if (!c.documents.delete(documentIdentity(protocol, key)))\n throw new Error(\"statewire: document is not mounted\");\n c.onDocuments?.();\n },\n documents: () => c.documents,\n setOnDocuments: (listener) => {\n c.onDocuments = listener;\n },\n },\n };\n return c;\n });\n\n let value = cell.ctl.snapshot();\n if (typeof value === \"object\" && value !== null) {\n cell.draft ??= createStateDraft<object>({\n snapshot: () => cell.current,\n record: (op, changedPath) => {\n cell.changed.push(changedPath);\n cell.onOp?.(op);\n cell.bump();\n cell.onChange?.();\n },\n });\n stateHosts.set(cell.draft.proxy, cell.host);\n value = cell.draft.proxy;\n }\n return [value as TState, cell.ctl as StatewireHost.StateCtl<TState>] as const;\n};\n\n// ─── commands ───────────────────────────────────────────\n\ntype Settled =\n | { type: \"resolved\"; value: unknown }\n | { type: \"rejected\"; error: unknown };\n\nexport type CommandsInvocation = {\n readonly protocol?: string;\n readonly method: string;\n readonly params: readonly unknown[];\n readonly ts: number;\n /** Absent while the command waits in a client outbox. */\n readonly seq?: number;\n readonly id?: string;\n readonly clientId?: string;\n /** Present while the queued command is held. */\n readonly held?: true;\n /** Client-only data persisted with an outbox entry. */\n readonly localMeta?: unknown;\n};\n\nexport type CommandsOutcome =\n | { type: \"accepted\"; payload?: unknown }\n | { type: \"rejected\"; error: unknown };\n\nexport type CommandsListener = {\n onStart: (inv: CommandsInvocation) => void;\n onPosted?: (inv: CommandsInvocation) => void;\n /** The invocation's seq, hold or local meta changed in place. */\n onChange?: (inv: CommandsInvocation) => void;\n onApplied: (inv: CommandsInvocation) => void;\n /** Canonical state now covers the invocation's effect — drop any overlay. */\n onCovered?: (inv: CommandsInvocation) => void;\n /** `durable`: the session persisted the settled update and delivers it itself. */\n onSettle: (\n inv: CommandsInvocation,\n outcome: CommandsOutcome,\n durable?: boolean,\n ) => void;\n};\n\nexport type CommandsSubmission = {\n method: string;\n params: readonly unknown[];\n clientId?: string;\n caller?: StatewireHost.Caller;\n context?: Statewire.Context;\n version?: string;\n attach?: StatewireHost.Attach;\n onApplied?: () => void;\n onSettle?: (outcome: CommandsOutcome) => void;\n};\n\nexport type CommandsHost = {\n setListener: (listener: CommandsListener | null) => void;\n submit?: (call: CommandsSubmission) => Promise<unknown>;\n /** Registered command names, read live. */\n methods?: () => string[];\n abort?: () => void;\n};\n\nconst commandsHosts = new WeakMap<object, CommandsHost>();\n\nexport const getCommandsHost = (commands: object): CommandsHost | undefined =>\n commandsHosts.get(commands);\n\nexport const bindCommandsHost = (commands: object, host: CommandsHost) => {\n commandsHosts.set(commands, host);\n};\n\ntype QueuedCall = {\n context?: Statewire.Context;\n version?: string | undefined;\n method: string;\n params: readonly unknown[];\n ts: number;\n resolve: (value: unknown) => void;\n reject: (error: unknown) => void;\n origin?: CommandsSubmission;\n};\n\ntype ActiveInvocation = CommandsInvocation & {\n applied: boolean;\n controller: AbortController;\n settled: boolean;\n origin?: CommandsSubmission;\n};\n\ntype CommandsCell = {\n context: (() => Statewire.Context) | undefined;\n version: string | undefined;\n handlers: Record<string, (...args: never[]) => unknown> | null;\n queue: QueuedCall[];\n active: Map<ActiveInvocation, QueuedCall>;\n running: boolean;\n listener: CommandsListener | null;\n seq: number;\n unmounted: boolean;\n stallTimer: ReturnType<typeof setTimeout> | null;\n};\n\nconst STALL_WARN_MS = 5000;\n\n// In-process dispatch has no wire client: trivially attached.\nconst LOCAL_CALLER: StatewireHost.Caller = Object.freeze({\n get clientId(): string {\n throw new Error(\"statewire: in-process dispatch has no client id\");\n },\n auth: undefined,\n isConnected: true,\n});\n\nconst toSendError = (error: unknown): StatewireSendError => {\n if (\n !(error instanceof StatewireSendError) &&\n !(error instanceof StatewireReject)\n )\n console.error(\"statewire command failed\", error);\n return error instanceof StatewireSendError\n ? error\n : error instanceof StatewireReject\n ? new StatewireSendError({\n fate: \"rejected\",\n cause: \"server\",\n message: error.message,\n ...(error.code !== undefined && { code: error.code }),\n ...(error.payload !== undefined && { payload: error.payload }),\n })\n : new StatewireSendError({\n fate: \"failed\",\n cause: \"server\",\n message: \"the command failed\",\n });\n};\n\nconst applyInvocation = (cell: CommandsCell, inv: ActiveInvocation) => {\n if (inv.applied) return;\n inv.applied = true;\n cell.listener?.onApplied(inv);\n cell.listener?.onCovered?.(inv);\n inv.origin?.onApplied?.();\n};\n\nconst settleInvocation = (\n cell: CommandsCell,\n inv: ActiveInvocation,\n call: QueuedCall,\n settled: Settled,\n) => {\n if (inv.settled) return;\n inv.settled = true;\n cell.active.delete(inv);\n if (settled.type === \"resolved\") {\n applyInvocation(cell, inv);\n const outcome: CommandsOutcome =\n settled.value === undefined\n ? { type: \"accepted\" }\n : { type: \"accepted\", payload: sanitizeValue(settled.value) };\n cell.listener?.onSettle(inv, outcome);\n inv.origin?.onSettle?.(outcome);\n call.resolve(outcome.payload);\n } else {\n cell.listener?.onCovered?.(inv);\n const error = toSendError(settled.error);\n const outcome: CommandsOutcome = { type: \"rejected\", error };\n cell.listener?.onSettle(inv, outcome);\n inv.origin?.onSettle?.(outcome);\n call.reject(error);\n }\n};\n\nconst abortInvocations = (cell: CommandsCell) => {\n for (const [inv, call] of cell.active) {\n inv.settled = true;\n inv.controller.abort();\n const error = new StatewireSendError({ fate: \"crashed\", cause: \"server\" });\n const outcome: CommandsOutcome = { type: \"rejected\", error };\n cell.listener?.onSettle(inv, outcome);\n inv.origin?.onSettle?.(outcome);\n call.reject(error);\n }\n cell.active.clear();\n};\n\nconst isThenable = (value: unknown): value is PromiseLike<unknown> =>\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\";\n\n// A command is an own, enumerable, function-valued property — exactly what\n// `Object.keys` shows, so dispatch, `statewire/commands`, and the reserved-\n// namespace guard share one view; prototype-chain names are not commands.\nconst handlerOf = (\n handlers: Record<string, (...args: never[]) => unknown>,\n method: string,\n): ((...args: never[]) => unknown) | undefined => {\n if (!Object.prototype.propertyIsEnumerable.call(handlers, method)) {\n return undefined;\n }\n const handler = handlers[method];\n return typeof handler === \"function\" ? handler : undefined;\n};\n\nconst dispatch = (cell: CommandsCell, call: QueuedCall) => {\n const handler = handlerOf(cell.handlers!, call.method);\n if (handler === undefined) {\n const error = new StatewireSendError({\n fate: \"rejected\",\n cause: \"server\",\n code: \"unknown-command\",\n });\n call.origin?.onSettle?.({ type: \"rejected\", error });\n call.reject(error);\n return;\n }\n const inv: ActiveInvocation = {\n method: call.method,\n params: call.params,\n ts: call.ts,\n seq: ++cell.seq,\n applied: false,\n controller: new AbortController(),\n settled: false,\n ...(call.origin !== undefined && { origin: call.origin }),\n ...(call.origin?.clientId !== undefined && {\n clientId: call.origin.clientId,\n }),\n };\n cell.active.set(inv, call);\n cell.listener?.onStart(inv);\n cell.listener?.onPosted?.(inv);\n const attach = call.origin?.attach;\n const version =\n call.origin !== undefined ? call.origin.version : call.version;\n const ctx: StatewireHost.Ctx = {\n caller: call.origin?.caller ?? LOCAL_CALLER,\n context: call.context ?? call.origin?.context ?? Object.freeze({}),\n get version() {\n if (version === undefined)\n throw new Error(\"statewire: in-process dispatch has no version\");\n return version;\n },\n get attach() {\n if (attach === undefined)\n throw new Error(\"statewire: in-process dispatch has no attach\");\n return attach;\n },\n signal: inv.controller.signal,\n applied: () => {\n if (!inv.settled) applyInvocation(cell, inv);\n },\n };\n try {\n const value = (\n handler as (\n this: StatewireHost.Ctx,\n ...args: readonly unknown[]\n ) => unknown\n ).call(ctx, ...call.params);\n if (isThenable(value)) {\n value.then(\n (resolved) =>\n settleInvocation(cell, inv, call, {\n type: \"resolved\",\n value: resolved,\n }),\n (error: unknown) =>\n settleInvocation(cell, inv, call, { type: \"rejected\", error }),\n );\n } else {\n settleInvocation(cell, inv, call, { type: \"resolved\", value });\n }\n } catch (error) {\n settleInvocation(cell, inv, call, { type: \"rejected\", error });\n }\n};\n\n// Prefix-only advancement: each handler runs synchronously to its first\n// await, then the pump moves on; settlement rides the returned promise.\nconst pump = (cell: CommandsCell) => {\n if (cell.running || !cell.handlers) {\n watchStall(cell);\n return;\n }\n cell.running = true;\n try {\n while (cell.handlers) {\n const call = cell.queue.shift();\n if (!call) break;\n dispatch(cell, call);\n }\n } finally {\n cell.running = false;\n }\n};\n\nconst watchStall = (cell: CommandsCell) => {\n if (!isDev() || cell.stallTimer !== null || cell.queue.length === 0) return;\n if (cell.handlers) return;\n cell.stallTimer = setTimeout(() => {\n cell.stallTimer = null;\n if (cell.handlers === null && cell.queue.length > 0 && !cell.unmounted) {\n console.warn(\n `statewire: ${cell.queue.length} buffered command(s) waiting over ${STALL_WARN_MS}ms — did the host forget to arm useStatewireCommands?`,\n );\n }\n }, STALL_WARN_MS);\n};\n\nexport const useStatewireCommands = <THandlers extends Statewire.Commands>(\n commands:\n | (THandlers & ThisType<StatewireHost.Ctx>)\n | undefined\n | null\n | false,\n options?: StatewireHost.CommandsOptions,\n): Statewire.CommandsProxy<StatewireHost.HandledCommands<THandlers>> => {\n const [built] = useState(() => {\n const cell: CommandsCell = {\n context: undefined,\n version: undefined,\n handlers: null,\n queue: [],\n active: new Map(),\n running: false,\n listener: null,\n seq: 0,\n unmounted: false,\n stallTimer: null,\n };\n const proxy = createMethodProxy<\n Statewire.CommandsProxy<StatewireHost.HandledCommands<THandlers>>\n >(\n (method, params) =>\n new Promise((resolve, reject) => {\n if (cell.unmounted) {\n reject(new Error(\"statewire: commands called after unmount\"));\n return;\n }\n cell.queue.push({\n context: captureContext(cell.context?.() ?? {}),\n version: cell.version,\n method,\n params,\n ts: Date.now(),\n resolve,\n reject,\n });\n pump(cell);\n }),\n );\n commandsHosts.set(proxy, {\n abort: () => abortInvocations(cell),\n setListener: (listener) => {\n cell.listener = listener;\n },\n methods: () => {\n const handlers = cell.handlers;\n if (!handlers) return [];\n return Object.keys(handlers).filter(\n (method) => handlerOf(handlers, method) !== undefined,\n );\n },\n submit: (origin) =>\n new Promise((resolve, reject) => {\n if (cell.unmounted) {\n reject(new Error(\"statewire: commands called after unmount\"));\n return;\n }\n cell.queue.push({\n method: origin.method,\n params: origin.params,\n ts: Date.now(),\n resolve,\n reject,\n origin,\n });\n pump(cell);\n }),\n });\n return { cell, proxy };\n });\n\n built.cell.context = options?.context;\n built.cell.version = options?.version;\n useEffect(() => {\n const { cell } = built;\n cell.unmounted = false;\n return () => {\n cell.unmounted = true;\n cell.handlers = null;\n if (cell.stallTimer !== null) {\n clearTimeout(cell.stallTimer);\n cell.stallTimer = null;\n }\n queueMicrotask(() => {\n if (!cell.unmounted) return;\n abortInvocations(cell);\n const queued = cell.queue;\n cell.queue = [];\n for (const call of queued) {\n call.reject(new Error(\"statewire: unmounted\"));\n }\n });\n };\n }, [built]);\n\n useEffect(() => {\n if (commands) {\n for (const method of Object.keys(commands)) {\n if (method.startsWith(\"statewire/\")) {\n throw new Error(\n `statewire: cannot register \"${method}\": the \"statewire/\" method namespace is reserved`,\n );\n }\n }\n }\n built.cell.handlers = commands || null;\n pump(built.cell);\n });\n\n return built.proxy;\n};\n"],"mappings":";;;;;;;;AAYA,MAAMa,cACJ,OAAOC,YAAY,eAAeA,QAAQC,IAAI,gBAAgB;AAIhE,MAAMC,6BAAa,IAAIC,QAAyC;AAEhE,MAAaE,oBAAoBC,UAAkBC,QACjDC,KAAKC,UAAU,CAACH,UAAUC,OAAO,IAAI,CAAC;;AAGxC,MAAaG,gBACXC,UACwCT,WAAWU,IAAID,KAAK;AAe9D,MAAakB,qBACXC,SACsD;CACtD,MAAM,GAAGE,cAAc5C,SAAS,CAAC;CACjC,MAAM,CAAC6C,QAAQ7C,eAA0B;EACvC,MAAM8C,eAAe;GACnB,IAAIC,EAAEpB,OAAOoB,EAAErB,UAAUqB,EAAEpB,MAAMqB,MAAM;GACvC,OAAOD,EAAErB;EACX;EACA,MAAMqB,IAAe;GACnBrB,SAASxB,cAAcwC,KAAK,CAAC;GAC7Bf,OAAO;GACPC,SAAS,CAAC,CAAA,CAAE;GACZC,2BAAW,IAAIC,IAAI;GACnBE,MAAM;GACNG,UAAU;GACVC,aAAa;GACbI,YAAYI,YAAYK,MAAMA,IAAI,CAAC;GACnCZ,KAAK;IACHa,QAAQC,QAAQ;KACd,MAAMC,SAASnD,SAAS6C,OAAO,GAAGK,GAAG;KACrCJ,EAAErB,UAAU0B,OAAO7B;KACnBwB,EAAEpB,OAAO0B,WAAW;KACpBN,EAAEnB,QAAQ0B,KAAK,GAAGF,OAAOG,YAAY;KACrC,IAAIR,EAAEf,MAAM,KAAK,MAAMC,MAAMkB,KAAKJ,EAAEf,KAAKC,EAAE;KAC3Cc,EAAEP,KAAK;KACPO,EAAEZ,WAAW;IACf;IACAqB,UAAUV;GACZ;GACAP,MAAM;IACJiB,UAAUV;IACVW,UAAUC,aAAa;KACrBX,EAAEf,OAAO0B;IACX;IACAC,cAAcD,eAAa;KACzBX,EAAEZ,WAAWuB;IACf;IACAE,mBAAmB;KACjB,MAAMhC,UAAUmB,EAAEnB;KAClBmB,EAAEnB,UAAU,CAAA;KACZ,OAAOA;IACT;IACAiC,QAAQ3C,UAAU4C,OAAOC,YAAY;KACnC,MAAM5C,MAAM4C,SAAS5C;KACrB,MAAM6C,OAAOD,SAASC,QAAQ7C,QAAQ8C,KAAAA;KACtC,IAAID,MACG;WAAA,MAAM,CAACE,IAAIC,QAAQpB,EAAElB,WACxB,IACEsC,IAAIjD,aAAaA,YACjBiD,IAAIH,QACJE,OAAOjD,iBAAiBC,UAAUC,GAAG,GAErC,MAAM,IAAIiD,MACR,cAAclD,SAAQ,6BACxB;KAAA;KAGN6B,EAAElB,UAAUwC,IAAIpD,iBAAiBC,UAAUC,GAAG,GAAG;MAC/CD;MACAC,KAAKA,QAAQ8C,KAAAA,IAAY,OAAO,CAAC,GAAG9C,GAAG;MACvC6C;MACAF,OAAO5D,cAAc4D,KAAK;KAC5B,CAAC;KACDf,EAAEX,cAAc;IAClB;IACAkC,UAAUpD,YAAUC,UAAQ;KAC1B,IAAI,CAAC4B,EAAElB,UAAU0C,OAAOtD,iBAAiBC,YAAUC,KAAG,CAAC,GACrD,MAAM,IAAIiD,MAAM,oCAAoC;KACtDrB,EAAEX,cAAc;IAClB;IACAP,iBAAiBkB,EAAElB;IACnB2C,iBAAiBd,eAAa;KAC5BX,EAAEX,cAAcsB;IAClB;GACF;EACF;EACA,OAAOX;CACT,CAAC;CAED,IAAIe,UAAQjB,KAAKR,IAAImB,SAAS;CAC9B,IAAI,OAAOM,YAAU,YAAYA,YAAU,MAAM;EAC/CjB,KAAKlB,UAAUtB,iBAAyB;GACtCmD,gBAAgBX,KAAKnB;GACrB+C,SAASxC,IAAIyC,gBAAgB;IAC3B7B,KAAKjB,QAAQ0B,KAAKoB,WAAW;IAC7B7B,KAAKb,OAAOC,EAAE;IACdY,KAAKL,KAAK;IACVK,KAAKV,WAAW;GAClB;EACF,CAAC;EACDrB,WAAWuD,IAAIxB,KAAKlB,MAAMgD,OAAO9B,KAAKN,IAAI;EAC1CuB,UAAQjB,KAAKlB,MAAMgD;CACrB;CACA,OAAO,CAACb,SAAiBjB,KAAKR,GAAqC;AACrE;AA+DA,MAAM6E,gCAAgB,IAAInG,QAA8B;AAExD,MAAaoG,mBAAmBC,aAC9BF,cAAc1F,IAAI4F,QAAQ;AAE5B,MAAaC,oBAAoBD,UAAkB7E,SAAuB;CACxE2E,cAAc7C,IAAI+C,UAAU7E,IAAI;AAClC;AAiCA,MAAMmG,gBAAgB;AAGtB,MAAMC,eAAqCC,OAAOC,OAAO;CACvD,IAAIxD,WAAmB;EACrB,MAAM,IAAIjB,MAAM,iDAAiD;CACnE;CACA0E,MAAM7E,KAAAA;CACN8E,aAAa;AACf,CAAC;AAED,MAAMC,eAAejE,UAAuC;CAC1D,IACE,EAAEA,iBAAiBvE,uBACnB,EAAEuE,iBAAiB3E,kBAEnB6I,QAAQlE,MAAM,4BAA4BA,KAAK;CACjD,OAAOA,iBAAiBvE,qBACpBuE,QACAA,iBAAiB3E,kBACf,IAAII,mBAAmB;EACrB0I,MAAM;EACNC,OAAO;EACPC,SAASrE,MAAMqE;EACf,GAAIrE,MAAMsE,SAASpF,KAAAA,KAAa,EAAEoF,MAAMtE,MAAMsE,KAAK;EACnD,GAAItE,MAAMU,YAAYxB,KAAAA,KAAa,EAAEwB,SAASV,MAAMU,QAAQ;CAC9D,CAAC,IACD,IAAIjF,mBAAmB;EACrB0I,MAAM;EACNC,OAAO;EACPC,SAAS;CACX,CAAC;AACT;AAEA,MAAME,mBAAmBzG,MAAoB+C,QAA0B;CACrE,IAAIA,IAAI+B,SAAS;CACjB/B,IAAI+B,UAAU;CACd9E,KAAKa,UAAUoC,UAAUF,GAAG;CAC5B/C,KAAKa,UAAUqC,YAAYH,GAAG;CAC9BA,IAAI6B,QAAQ3B,YAAY;AAC1B;AAEA,MAAMyD,oBACJ1G,MACA+C,KACAkB,MACAgB,YACG;CACH,IAAIlC,IAAIkC,SAAS;CACjBlC,IAAIkC,UAAU;CACdjF,KAAKuF,OAAO7D,OAAOqB,GAAG;CACtB,IAAIkC,QAAQhD,SAAS,YAAY;EAC/BwE,gBAAgBzG,MAAM+C,GAAG;EACzB,MAAMK,UACJ6B,QAAQhE,UAAUG,KAAAA,IACd,EAAEa,MAAM,WAAW,IACnB;GAAEA,MAAM;GAAYW,SAASvF,cAAc4H,QAAQhE,KAAK;EAAE;EAChEjB,KAAKa,UAAUsC,SAASJ,KAAKK,OAAO;EACpCL,IAAI6B,QAAQzB,WAAWC,OAAO;EAC9Ba,KAAKS,QAAQtB,QAAQR,OAAO;CAC9B,OAAO;EACL5C,KAAKa,UAAUqC,YAAYH,GAAG;EAC9B,MAAMb,QAAQiE,YAAYlB,QAAQ/C,KAAK;EACvC,MAAMkB,UAA2B;GAAEnB,MAAM;GAAYC;EAAM;EAC3DlC,KAAKa,UAAUsC,SAASJ,KAAKK,OAAO;EACpCL,IAAI6B,QAAQzB,WAAWC,OAAO;EAC9Ba,KAAKU,OAAOzC,KAAK;CACnB;AACF;AAEA,MAAMyE,oBAAoB3G,SAAuB;CAC/C,KAAK,MAAM,CAAC+C,KAAKkB,SAASjE,KAAKuF,QAAQ;EACrCxC,IAAIkC,UAAU;EACdlC,IAAIgC,WAAWX,MAAM;EACrB,MAAMlC,QAAQ,IAAIvE,mBAAmB;GAAE0I,MAAM;GAAWC,OAAO;EAAS,CAAC;EACzE,MAAMlD,UAA2B;GAAEnB,MAAM;GAAYC;EAAM;EAC3DlC,KAAKa,UAAUsC,SAASJ,KAAKK,OAAO;EACpCL,IAAI6B,QAAQzB,WAAWC,OAAO;EAC9Ba,KAAKU,OAAOzC,KAAK;CACnB;CACAlC,KAAKuF,OAAOqB,MAAM;AACpB;AAEA,MAAMC,cAAc5F,UAClB,OAAOA,UAAU,YACjBA,UAAU,QACV,OAAQA,MAA6B8F,SAAS;AAKhD,MAAMC,aACJ7B,UACA/C,WACgD;CAChD,IAAI,CAAC2D,OAAOkB,UAAUC,qBAAqBjD,KAAKkB,UAAU/C,MAAM,GAC9D;CAEF,MAAM+E,UAAUhC,SAAS/C;CACzB,OAAO,OAAO+E,YAAY,aAAaA,UAAU/F,KAAAA;AACnD;AAEA,MAAMgG,YAAYpH,MAAoBiE,SAAqB;CACzD,MAAMkD,UAAUH,UAAUhH,KAAKmF,UAAWlB,KAAK7B,MAAM;CACrD,IAAI+E,YAAY/F,KAAAA,GAAW;EACzB,MAAMc,QAAQ,IAAIvE,mBAAmB;GACnC0I,MAAM;GACNC,OAAO;GACPE,MAAM;EACR,CAAC;EACDvC,KAAKW,QAAQzB,WAAW;GAAElB,MAAM;GAAYC;EAAM,CAAC;EACnD+B,KAAKU,OAAOzC,KAAK;EACjB;CACF;CACA,MAAMa,MAAwB;EAC5BX,QAAQ6B,KAAK7B;EACbC,QAAQ4B,KAAK5B;EACbC,IAAI2B,KAAK3B;EACTC,KAAK,EAAEvC,KAAKuC;EACZuC,SAAS;EACTC,YAAY,IAAIC,gBAAgB;EAChCC,SAAS;EACT,GAAIhB,KAAKW,WAAWxD,KAAAA,KAAa,EAAEwD,QAAQX,KAAKW,OAAO;EACvD,GAAIX,KAAKW,QAAQpC,aAAapB,KAAAA,KAAa,EACzCoB,UAAUyB,KAAKW,OAAOpC,SACxB;CACF;CACAxC,KAAKuF,OAAO/D,IAAIuB,KAAKkB,IAAI;CACzBjE,KAAKa,UAAUiC,QAAQC,GAAG;CAC1B/C,KAAKa,UAAUmC,WAAWD,GAAG;CAC7B,MAAMa,SAASK,KAAKW,QAAQhB;CAC5B,MAAMD,UACJM,KAAKW,WAAWxD,KAAAA,IAAY6C,KAAKW,OAAOjB,UAAUM,KAAKN;CACzD,MAAM0D,MAAyB;EAC7B9D,QAAQU,KAAKW,QAAQrB,UAAUuC;EAC/BrC,SAASQ,KAAKR,WAAWQ,KAAKW,QAAQnB,WAAWsC,OAAOC,OAAO,CAAC,CAAC;EACjE,IAAIrC,UAAU;GACZ,IAAIA,YAAYvC,KAAAA,GACd,MAAM,IAAIG,MAAM,+CAA+C;GACjE,OAAOoC;EACT;EACA,IAAIC,SAAS;GACX,IAAIA,WAAWxC,KAAAA,GACb,MAAM,IAAIG,MAAM,8CAA8C;GAChE,OAAOqC;EACT;EACA2D,QAAQxE,IAAIgC,WAAWwC;EACvBzC,eAAe;GACb,IAAI,CAAC/B,IAAIkC,SAASwB,gBAAgBzG,MAAM+C,GAAG;EAC7C;CACF;CACA,IAAI;EACF,MAAM9B,QACJkG,QAIAlD,KAAKoD,KAAK,GAAGpD,KAAK5B,MAAM;EAC1B,IAAIwE,WAAW5F,KAAK,GAClBA,MAAM8F,MACHU,aACCf,iBAAiB1G,MAAM+C,KAAKkB,MAAM;GAChChC,MAAM;GACNhB,OAAOwG;EACT,CAAC,IACFvF,UACCwE,iBAAiB1G,MAAM+C,KAAKkB,MAAM;GAAEhC,MAAM;GAAYC;EAAM,CAAC,CACjE;OAEAwE,iBAAiB1G,MAAM+C,KAAKkB,MAAM;GAAEhC,MAAM;GAAYhB;EAAM,CAAC;CAEjE,SAASiB,OAAO;EACdwE,iBAAiB1G,MAAM+C,KAAKkB,MAAM;GAAEhC,MAAM;GAAYC;EAAM,CAAC;CAC/D;AACF;AAIA,MAAMwF,QAAQ1H,SAAuB;CACnC,IAAIA,KAAKwF,WAAW,CAACxF,KAAKmF,UAAU;EAClCwC,WAAW3H,IAAI;EACf;CACF;CACAA,KAAKwF,UAAU;CACf,IAAI;EACF,OAAOxF,KAAKmF,UAAU;GACpB,MAAMlB,OAAOjE,KAAKsF,MAAMsC,MAAM;GAC9B,IAAI,CAAC3D,MAAM;GACXmD,SAASpH,MAAMiE,IAAI;EACrB;CACF,UAAU;EACRjE,KAAKwF,UAAU;CACjB;AACF;AAEA,MAAMmC,cAAc3H,SAAuB;CACzC,IAAI,CAAClC,MAAM,KAAKkC,KAAK0F,eAAe,QAAQ1F,KAAKsF,MAAMuC,WAAW,GAAG;CACrE,IAAI7H,KAAKmF,UAAU;CACnBnF,KAAK0F,aAAaE,iBAAiB;EACjC5F,KAAK0F,aAAa;EAClB,IAAI1F,KAAKmF,aAAa,QAAQnF,KAAKsF,MAAMuC,SAAS,KAAK,CAAC7H,KAAKyF,WAC3DW,QAAQ0B,KACN,cAAc9H,KAAKsF,MAAMuC,OAAM,oCAAqChC,cAAa,sDACnF;CAEJ,GAAGA,aAAa;AAClB;AAEA,MAAakC,wBACXxD,UAKArD,YACsE;CACtE,MAAM,CAACoH,SAASnL,eAAe;EAC7B,MAAM6C,OAAqB;GACzByD,SAASrC,KAAAA;GACTuC,SAASvC,KAAAA;GACT+D,UAAU;GACVG,OAAO,CAAA;GACPC,wBAAQ,IAAItG,IAAI;GAChBuG,SAAS;GACT3E,UAAU;GACV0B,KAAK;GACLkD,WAAW;GACXC,YAAY;EACd;EACA,MAAM5D,QAAQrE,mBAGX2E,QAAQC,WACP,IAAI6B,SAASQ,SAASC,WAAW;GAC/B,IAAI3E,KAAKyF,WAAW;IAClBd,uBAAO,IAAIpD,MAAM,0CAA0C,CAAC;IAC5D;GACF;GACAvB,KAAKsF,MAAM7E,KAAK;IACdgD,SAASxG,eAAe+C,KAAKyD,UAAU,KAAK,CAAC,CAAC;IAC9CE,SAAS3D,KAAK2D;IACdvB;IACAC;IACAC,IAAIiG,KAAKC,IAAI;IACb9D;IACAC;GACF,CAAC;GACD+C,KAAK1H,IAAI;EACX,CAAC,CACL;EACAqE,cAAc7C,IAAIM,OAAO;GACvBsC,aAAauC,iBAAiB3G,IAAI;GAClC+D,cAAclD,aAAa;IACzBb,KAAKa,WAAWA;GAClB;GACAsD,eAAe;IACb,MAAMgB,WAAWnF,KAAKmF;IACtB,IAAI,CAACA,UAAU,OAAO,CAAA;IACtB,OAAOY,OAAO0C,KAAKtD,QAAQ,CAAC,CAACuD,QAC1BtG,aAAW4E,UAAU7B,UAAU/C,QAAM,MAAMhB,KAAAA,CAC9C;GACF;GACA4C,SAASY,WACP,IAAIV,SAASQ,WAASC,aAAW;IAC/B,IAAI3E,KAAKyF,WAAW;KAClBd,yBAAO,IAAIpD,MAAM,0CAA0C,CAAC;KAC5D;IACF;IACAvB,KAAKsF,MAAM7E,KAAK;KACd2B,QAAQwC,OAAOxC;KACfC,QAAQuC,OAAOvC;KACfC,IAAIiG,KAAKC,IAAI;KACb9D,SAAAA;KACAC,QAAAA;KACAC;IACF,CAAC;IACD8C,KAAK1H,IAAI;GACX,CAAC;EACL,CAAC;EACD,OAAO;GAAEA;GAAM8B;EAAM;CACvB,CAAC;CAEDwG,MAAMtI,KAAKyD,UAAUvC,SAASuC;CAC9B6E,MAAMtI,KAAK2D,UAAUzC,SAASyC;CAC9BzG,gBAAgB;EACd,MAAM,EAAE8C,MAAAA,WAASsI;EACjBtI,OAAKyF,YAAY;EACjB,aAAa;GACXzF,OAAKyF,YAAY;GACjBzF,OAAKmF,WAAW;GAChB,IAAInF,OAAK0F,eAAe,MAAM;IAC5BiD,aAAa3I,OAAK0F,UAAU;IAC5B1F,OAAK0F,aAAa;GACpB;GACAkD,qBAAqB;IACnB,IAAI,CAAC5I,OAAKyF,WAAW;IACrBkB,iBAAiB3G,MAAI;IACrB,MAAM6I,SAAS7I,OAAKsF;IACpBtF,OAAKsF,QAAQ,CAAA;IACb,KAAK,MAAMrB,QAAQ4E,QACjB5E,KAAKU,uBAAO,IAAIpD,MAAM,sBAAsB,CAAC;GAEjD,CAAC;EACH;CACF,GAAG,CAAC+G,KAAK,CAAC;CAEVpL,gBAAgB;EACd,IAAIqH,UACG;QAAA,MAAMnC,YAAU2D,OAAO0C,KAAKlE,QAAQ,GACvC,IAAInC,SAAO0G,WAAW,YAAY,GAChC,MAAM,IAAIvH,MACR,+BAA+Ba,SAAM,iDACvC;EAAA;EAINkG,MAAMtI,KAAKmF,WAAWZ,YAAY;EAClCmD,KAAKY,MAAMtI,IAAI;CACjB,CAAC;CAED,OAAOsI,MAAMxG;AACf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/host/socket.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/host/socket.ts"],"names":[],"mappings":"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"}
|
package/dist/host/socket.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEFAULT_PROTOCOL, DEFAULT_PROTOCOL_VERSION, GAP_FILL_VERSION, MIN_SERVED_WIRE_VERSION,
|
|
1
|
+
import { DEFAULT_PROTOCOL, DEFAULT_PROTOCOL_VERSION, GAP_FILL_VERSION, MIN_SERVED_WIRE_VERSION, negotiateProtocols } from "../wire/protocol.js";
|
|
2
2
|
import { encodeDocument, reviveDocumentValue } from "../document.js";
|
|
3
3
|
import { COMMAND_CAPACITY_RETRY_MS, MAX_INFLIGHT_COMMANDS_PER_HOST } from "../wire/limits.js";
|
|
4
4
|
import { captureContext, contextValue } from "../wire/context.js";
|
|
@@ -36,7 +36,7 @@ const violation = (reason) => {
|
|
|
36
36
|
};
|
|
37
37
|
const violationReason = (error) => error instanceof Error && error.name === "StatewireViolation" ? error.message : null;
|
|
38
38
|
const SERVED_WIRE = {
|
|
39
|
-
version:
|
|
39
|
+
version: GAP_FILL_VERSION,
|
|
40
40
|
minVersion: MIN_SERVED_WIRE_VERSION
|
|
41
41
|
};
|
|
42
42
|
const gapFills = (selection) => selection.version >= GAP_FILL_VERSION;
|
|
@@ -670,6 +670,7 @@ const admitCmd = (h, lane, conn, statement) => {
|
|
|
670
670
|
caller: callerOf(h, rec, conn),
|
|
671
671
|
attach: conn.attach,
|
|
672
672
|
context: captureContext(conn.contexts.get(statement.protocol) ?? {}),
|
|
673
|
+
version: conn.selection.protocols.find((p) => p.name === statement.protocol).version,
|
|
673
674
|
onApplied: () => {
|
|
674
675
|
if (adm.settled || adm.applied) return;
|
|
675
676
|
adm.applied = true;
|