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.
- package/dist/client/changes.d.ts +3 -6
- package/dist/client/changes.d.ts.map +1 -1
- package/dist/client/changes.js +1 -2
- package/dist/client/connection.d.ts +80 -83
- package/dist/client/connection.d.ts.map +1 -1
- package/dist/client/connection.js +2 -3
- package/dist/client/connection.js.map +1 -1
- package/dist/client/core.d.ts +39 -41
- package/dist/client/core.d.ts.map +1 -1
- package/dist/client/core.js +2 -3
- package/dist/client/session.d.ts +93 -95
- package/dist/client/session.d.ts.map +1 -1
- package/dist/client/session.js +6 -7
- package/dist/client/session.js.map +1 -1
- package/dist/client/sessionStore.d.ts +11 -14
- package/dist/client/sessionStore.d.ts.map +1 -1
- package/dist/client/sessionStore.js +1 -2
- package/dist/client/storageError.d.ts +2 -5
- package/dist/client/storageError.d.ts.map +1 -1
- package/dist/client/storageError.js +1 -2
- package/dist/client/timing.d.ts +11 -14
- package/dist/client/timing.d.ts.map +1 -1
- package/dist/client/timing.js +1 -2
- package/dist/document.d.ts +17 -20
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +1 -2
- package/dist/host/adapter.d.ts +4 -7
- package/dist/host/adapter.d.ts.map +1 -1
- package/dist/host/adapter.js +1 -2
- package/dist/host/draft.d.ts +13 -16
- package/dist/host/draft.d.ts.map +1 -1
- package/dist/host/draft.js +1 -2
- package/dist/host/engine.d.ts +7 -10
- package/dist/host/engine.d.ts.map +1 -1
- package/dist/host/engine.js +1 -2
- package/dist/host/host.d.ts +42 -45
- package/dist/host/host.d.ts.map +1 -1
- package/dist/host/host.js +1 -2
- package/dist/host/http.d.ts +4 -7
- package/dist/host/http.d.ts.map +1 -1
- package/dist/host/http.js +2 -3
- package/dist/host/socket.d.ts +144 -145
- package/dist/host/socket.d.ts.map +1 -1
- package/dist/host/socket.js +19 -9
- package/dist/host/socket.js.map +1 -1
- package/dist/host/synced.d.ts +3 -6
- package/dist/host/synced.d.ts.map +1 -1
- package/dist/host/synced.js +1 -2
- package/dist/host/work.d.ts +2 -5
- package/dist/host/work.d.ts.map +1 -1
- package/dist/host/work.js +1 -2
- package/dist/host-internal.d.ts +99 -93
- package/dist/host-internal.d.ts.map +1 -1
- package/dist/host.d.ts +90 -91
- package/dist/host.d.ts.map +1 -1
- package/dist/index.d.ts +11 -8
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/statewire.d.ts +265 -268
- package/dist/statewire.d.ts.map +1 -1
- package/dist/statewire.js +1 -2
- package/dist/storage.d.ts +23 -26
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +1 -2
- package/dist/transports/fake-sse.d.ts +7 -10
- package/dist/transports/fake-sse.d.ts.map +1 -1
- package/dist/transports/fake-sse.js +1 -2
- package/dist/transports/fixtures.d.ts +19 -25
- package/dist/transports/fixtures.d.ts.map +1 -1
- package/dist/transports/fixtures.js +1 -2
- package/dist/transports/remote.d.ts +8 -11
- package/dist/transports/remote.d.ts.map +1 -1
- package/dist/transports/remote.js +1 -2
- package/dist/transports/sse-parser.d.ts +1 -4
- package/dist/transports/sse-parser.d.ts.map +1 -1
- package/dist/transports/sse-parser.js +1 -2
- package/dist/transports/sse.d.ts +50 -53
- package/dist/transports/sse.d.ts.map +1 -1
- package/dist/transports/sse.js +2 -3
- package/dist/transports/testing.d.ts +31 -34
- package/dist/transports/testing.d.ts.map +1 -1
- package/dist/transports/testing.js +1 -2
- package/dist/transports/ws.d.ts +5 -7
- package/dist/transports/ws.d.ts.map +1 -1
- package/dist/transports/ws.js +3 -4
- package/dist/transports/ws.js.map +1 -1
- package/dist/types.d.ts +81 -78
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/dist/util/draftTraps.d.ts +2 -4
- package/dist/util/draftTraps.d.ts.map +1 -1
- package/dist/util/draftTraps.js +1 -2
- package/dist/util/macrotask.d.ts +1 -4
- package/dist/util/macrotask.d.ts.map +1 -1
- package/dist/util/macrotask.js +1 -2
- package/dist/util/methodProxy.d.ts +1 -4
- package/dist/util/methodProxy.d.ts.map +1 -1
- package/dist/util/methodProxy.js +1 -2
- package/dist/util/randomId.d.ts +1 -4
- package/dist/util/randomId.d.ts.map +1 -1
- package/dist/util/randomId.js +1 -2
- package/dist/util/recordMutations.d.ts +5 -7
- package/dist/util/recordMutations.d.ts.map +1 -1
- package/dist/util/recordMutations.js +1 -2
- package/dist/util/statePath.d.ts +9 -12
- package/dist/util/statePath.d.ts.map +1 -1
- package/dist/util/statePath.js +1 -2
- package/dist/wire/context.d.ts +7 -12
- package/dist/wire/context.d.ts.map +1 -1
- package/dist/wire/context.js +2 -3
- package/dist/wire/documents.d.ts +36 -39
- package/dist/wire/documents.d.ts.map +1 -1
- package/dist/wire/documents.js +2 -3
- package/dist/wire/documents.js.map +1 -1
- package/dist/wire/limits.d.ts +7 -10
- package/dist/wire/limits.d.ts.map +1 -1
- package/dist/wire/limits.js +1 -2
- package/dist/wire/meta.d.ts +9 -11
- package/dist/wire/meta.d.ts.map +1 -1
- package/dist/wire/meta.js +1 -2
- package/dist/wire/meta.js.map +1 -1
- package/dist/wire/ops.d.ts +9 -12
- package/dist/wire/ops.d.ts.map +1 -1
- package/dist/wire/ops.js +1 -2
- package/dist/wire/protocol.d.ts +53 -56
- package/dist/wire/protocol.d.ts.map +1 -1
- package/dist/wire/protocol.js +1 -2
- package/dist/wire/version.d.ts +1 -4
- package/dist/wire/version.d.ts.map +1 -1
- package/dist/wire/version.js +1 -2
- package/package.json +6 -6
- package/src/client/connection.ts +13 -15
- package/src/host/socket.ts +47 -3
- package/src/host-internal.ts +10 -0
package/dist/host-internal.d.ts
CHANGED
|
@@ -1,96 +1,102 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
};
|
|
48
|
-
type ClientRecord = {
|
|
49
|
-
id: string;
|
|
50
|
-
touched: number;
|
|
51
|
-
lanes: Readonly<Record<string, {
|
|
52
|
-
lastSeq: number;
|
|
53
|
-
results: readonly {
|
|
1
|
+
import type { StatewireProtocol } from "./wire/protocol.js";
|
|
2
|
+
import type { StatewireHost } from "./host.js";
|
|
3
|
+
export { StatewireSocketHost } from "./host/socket.js";
|
|
4
|
+
export { clientIdFromUrl, textFrameOrClose } from "./host/adapter.js";
|
|
5
|
+
export { WS_SUBPROTOCOL } from "./wire/version.js";
|
|
6
|
+
export declare namespace StatewireHostInternal {
|
|
7
|
+
type Socket = {
|
|
8
|
+
send: (data: string) => void;
|
|
9
|
+
close: (code?: number, reason?: string) => void;
|
|
10
|
+
};
|
|
11
|
+
type SocketConnection = {
|
|
12
|
+
readonly clientId: string;
|
|
13
|
+
message: (data: string) => void;
|
|
14
|
+
close: () => void;
|
|
15
|
+
};
|
|
16
|
+
type SocketConnectOptions = {
|
|
17
|
+
/** Upgrade headers take precedence over initialization headers. */
|
|
18
|
+
headers?: Record<string, string>;
|
|
19
|
+
/** The adapter restored this socket from an already-authorized session. */
|
|
20
|
+
authorized?: boolean;
|
|
21
|
+
authorizedAt?: number;
|
|
22
|
+
selection?: StatewireProtocol.Selection;
|
|
23
|
+
/** The restored session's captured auth value; it must satisfy the client record's principal binding. */
|
|
24
|
+
auth?: unknown;
|
|
25
|
+
/** Persist authorization (and the captured auth value) before the first snapshot is released. */
|
|
26
|
+
onAuthorized?: (auth: unknown, selection: StatewireProtocol.Selection, authorizedAt: number) => void;
|
|
27
|
+
/** Documents the attach had included before the adapter retained its socket; they ride the hello. */
|
|
28
|
+
included?: readonly IncludedDocument[];
|
|
29
|
+
/** Called with the attach's whole include set each time `include` or `exclude` changes it. */
|
|
30
|
+
onIncludedChange?: (included: readonly IncludedDocument[]) => void;
|
|
31
|
+
};
|
|
32
|
+
/** A durable document an attach included: `[protocol, key]`. */
|
|
33
|
+
type IncludedDocument = readonly [
|
|
34
|
+
protocol: string,
|
|
35
|
+
key: readonly string[] | null
|
|
36
|
+
];
|
|
37
|
+
type SocketHost = {
|
|
38
|
+
/** Null means refused: the socket was told (fin and/or close) and is dead. */
|
|
39
|
+
connect: (clientId: string, socket: Socket, options?: SocketConnectOptions) => SocketConnection | null;
|
|
40
|
+
stream: (request: Request) => Promise<Response>;
|
|
41
|
+
frames: (request: Request) => Promise<Response>;
|
|
42
|
+
finish: (fin: StatewireHost.Fin) => void;
|
|
43
|
+
dispose: () => void;
|
|
44
|
+
};
|
|
45
|
+
type Cmd = {
|
|
46
|
+
protocol: string;
|
|
54
47
|
seq: number;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
48
|
+
type?: "applied" | "result" | "rejected" | "failed" | "crashed" | "expired";
|
|
49
|
+
code?: string;
|
|
50
|
+
message?: string;
|
|
51
|
+
payload?: unknown;
|
|
52
|
+
meta?: unknown;
|
|
53
|
+
/** Cumulative per lane: resending through this seq will never be needed. */
|
|
54
|
+
dur?: boolean;
|
|
55
|
+
};
|
|
56
|
+
type ClientRecord = {
|
|
57
|
+
id: string;
|
|
58
|
+
touched: number;
|
|
59
|
+
lanes: Readonly<Record<string, {
|
|
60
|
+
lastSeq: number;
|
|
61
|
+
results: readonly {
|
|
62
|
+
seq: number;
|
|
63
|
+
ts: number;
|
|
64
|
+
cmd: Cmd;
|
|
65
|
+
}[];
|
|
66
|
+
}>>;
|
|
67
|
+
principal: unknown;
|
|
68
|
+
};
|
|
69
|
+
type SocketHostPersistence = {
|
|
70
|
+
clientRecords?: readonly ClientRecord[];
|
|
71
|
+
onClientRecordsChange?: (records: readonly ClientRecord[]) => void;
|
|
72
|
+
};
|
|
73
|
+
type SocketHostOptions<TAuth = unknown> = {
|
|
74
|
+
protocol?: StatewireProtocol.Definition;
|
|
75
|
+
/** Key of the host protocol's main document. */
|
|
76
|
+
key?: readonly string[];
|
|
77
|
+
wireVersion?: StatewireProtocol.Range;
|
|
78
|
+
/** Gates every attach; the awaited return value is the attach's auth, exposed to command handlers as `this.caller.auth`. The first attach binds the client id's record to this value; a later attach whose value is not structurally equal is refused (HTTP 403, socket close 1008). */
|
|
79
|
+
authorize?: (ctx: {
|
|
80
|
+
headers: Record<string, string>;
|
|
81
|
+
}) => TAuth | Promise<TAuth>;
|
|
82
|
+
/** Time allowed to complete WebSocket initialization and authorization. */
|
|
83
|
+
wsInitTimeoutMs?: number;
|
|
84
|
+
heartbeatIntervalMs?: number;
|
|
85
|
+
/** Maximum attach lifetime in milliseconds; defaults to 24 hours, null disables expiry. */
|
|
86
|
+
maxLeaseLifetimeMs?: number | null;
|
|
87
|
+
/** Maximum number of concurrently attached WebSocket and SSE streams. */
|
|
88
|
+
maxSubscribers?: number;
|
|
89
|
+
/** Maximum number of admitted commands still running across all clients. */
|
|
90
|
+
maxInflightCommands?: number;
|
|
91
|
+
/** Maximum number of queued SSE packets before a lagging stream is closed. */
|
|
92
|
+
streamQueueSize?: number;
|
|
93
|
+
/** LRU cap on stored client records; live or in-flight records are exempt. */
|
|
94
|
+
clientRecordLimit?: number;
|
|
95
|
+
/** Hang every attach up with `fin: idle` at the idle flag's rising edge. */
|
|
96
|
+
finOnIdle?: boolean;
|
|
97
|
+
/** Milliseconds to defer admission, or null to admit. */
|
|
98
|
+
pushback?: () => number | null;
|
|
99
|
+
};
|
|
100
|
+
type Fin = StatewireHost.Fin;
|
|
93
101
|
}
|
|
94
|
-
//#endregion
|
|
95
|
-
export { StatewireHostInternal, StatewireSocketHost, WS_SUBPROTOCOL, clientIdFromUrl, textFrameOrClose };
|
|
96
102
|
//# sourceMappingURL=host-internal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-internal.d.ts","
|
|
1
|
+
{"version":3,"file":"host-internal.d.ts","sourceRoot":"","sources":["../src/host-internal.ts"],"names":[],"mappings":"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"}
|
package/dist/host.d.ts
CHANGED
|
@@ -1,93 +1,92 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
1
|
+
import type { Statewire } from "./types.js";
|
|
2
|
+
export { StatewireReject } from "./host/engine.js";
|
|
3
|
+
export { useStatewireWork } from "./host/work.js";
|
|
4
|
+
export { append } from "./host/draft.js";
|
|
5
|
+
export { getStateHost, useStatewireState, useStatewireCommands, } from "./host/host.js";
|
|
6
|
+
export { syncedDocument } from "./host/synced.js";
|
|
7
|
+
export declare namespace StatewireHost {
|
|
8
|
+
type Work = {
|
|
9
|
+
readonly isIdle: boolean;
|
|
10
|
+
track: <T>(task: Promise<T>) => Promise<T>;
|
|
11
|
+
schedule: (callback: () => void) => void;
|
|
12
|
+
};
|
|
13
|
+
type StateCtl<TState = unknown> = {
|
|
14
|
+
/** Apply server-vocabulary ops (root replace = whole-state swap). */
|
|
15
|
+
apply: (ops: readonly Statewire.Op[]) => void;
|
|
16
|
+
/** The committed plain state — immutably replaced per op, so a captured value is a stable snapshot. */
|
|
17
|
+
snapshot: () => TState;
|
|
18
|
+
};
|
|
19
|
+
type Document = {
|
|
20
|
+
protocol: string;
|
|
21
|
+
key: readonly string[] | null;
|
|
22
|
+
main: boolean;
|
|
23
|
+
value: unknown;
|
|
24
|
+
};
|
|
25
|
+
type StateHost = Statewire.StateSource & {
|
|
26
|
+
/** Synchronous, per locally-recorded op; the host owns batching. */
|
|
27
|
+
setOnOp: (listener: ((op: Statewire.Op) => void) | null) => void;
|
|
28
|
+
/** Mount or replace the shared document `(protocol, key)`; keyed documents reach an attach only once it `include`s them. */
|
|
29
|
+
mount: (protocol: string, value: unknown, options?: {
|
|
30
|
+
key?: readonly string[];
|
|
31
|
+
main?: boolean;
|
|
32
|
+
}) => void;
|
|
33
|
+
unmount: (protocol: string, key?: readonly string[]) => void;
|
|
34
|
+
documents: () => ReadonlyMap<string, Document>;
|
|
35
|
+
setOnDocuments: (listener: (() => void) | null) => void;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Per-invocation handle bound as `this` of a command handler: `caller` is
|
|
39
|
+
* the submitting client, `attach` the admitting attach's document view
|
|
40
|
+
* (in-process dispatch has none — reading it throws), `applied()` states the
|
|
41
|
+
* broadcast state now contains the command's effects — the client drops its
|
|
42
|
+
* optimistic overlay — before the handler settles (idempotent, a no-op after
|
|
43
|
+
* settle). The command settles when the handler's returned promise does.
|
|
44
|
+
*/
|
|
45
|
+
type CommandsOptions = {
|
|
46
|
+
context?: () => Statewire.Context;
|
|
47
|
+
};
|
|
48
|
+
type Ctx = {
|
|
49
|
+
readonly caller: Caller;
|
|
50
|
+
readonly context: Statewire.Context;
|
|
51
|
+
readonly attach: Attach;
|
|
52
|
+
readonly signal: AbortSignal;
|
|
53
|
+
readonly applied: () => void;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The submitting client (`this.caller` in a command handler). Holdable
|
|
57
|
+
* across a long run: `clientId` is the client's `Statewire-Client-Id`
|
|
58
|
+
* (in-process dispatch has none — reading it throws), `auth` is the value
|
|
59
|
+
* `authorize` returned for the attach that admitted the command (undefined
|
|
60
|
+
* for a void `authorize` and for in-process dispatch), `isConnected`
|
|
61
|
+
* reports whether the client has an active stream attachment.
|
|
62
|
+
*/
|
|
63
|
+
type Caller = {
|
|
64
|
+
readonly clientId: string;
|
|
65
|
+
readonly auth: unknown;
|
|
66
|
+
readonly isConnected: boolean;
|
|
67
|
+
};
|
|
68
|
+
/** The admitting attach's view: its ephemeral documents plus the shared documents included for it. */
|
|
69
|
+
type Attach = {
|
|
70
|
+
readonly caller: Caller;
|
|
71
|
+
context: (protocol: string) => Statewire.Context;
|
|
72
|
+
document: (protocol: string, key?: readonly string[]) => unknown;
|
|
73
|
+
/** `protocol` must be ephemeral; the encoded value is bounded by `MAX_EPHEMERAL_DOCUMENT_BYTES`. */
|
|
74
|
+
mount: (protocol: string, value: unknown, key?: readonly string[], main?: boolean) => void;
|
|
75
|
+
unmount: (protocol: string, key?: readonly string[]) => void;
|
|
76
|
+
include: (protocol: string, key: readonly string[]) => void;
|
|
77
|
+
exclude: (protocol: string, key: readonly string[]) => void;
|
|
78
|
+
};
|
|
79
|
+
type HandledCommands<THandlers extends Statewire.Commands> = {
|
|
80
|
+
[K in keyof THandlers]: (...args: Parameters<THandlers[K]>) => Awaited<ReturnType<THandlers[K]>>;
|
|
81
|
+
};
|
|
82
|
+
type Fin = {
|
|
83
|
+
reason: "reconnect" | "error" | "protocol-error" | "forbidden" | "unauthorized" | "gone" | "idle" | (string & {});
|
|
84
|
+
message?: string;
|
|
85
|
+
code?: string;
|
|
86
|
+
status?: number;
|
|
87
|
+
retry?: number;
|
|
88
|
+
payload?: unknown;
|
|
89
|
+
meta?: unknown;
|
|
90
|
+
};
|
|
90
91
|
}
|
|
91
|
-
//#endregion
|
|
92
|
-
export { StatewireHost, StatewireReject, append, getStateHost, syncedDocument, useStatewireCommands, useStatewireState, useStatewireWork };
|
|
93
92
|
//# sourceMappingURL=host.d.ts.map
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export
|
|
1
|
+
export type { Statewire } from "./types.js";
|
|
2
|
+
export { encodeDocument, decodeDocument } from "./document.js";
|
|
3
|
+
export type { StatewireDocument } from "./document.js";
|
|
4
|
+
export { StatewireClient, useStatewire, StatewireResource } from "./statewire.js";
|
|
5
|
+
export { StatewireHttp } from "./transports/sse.js";
|
|
6
|
+
export { StatewireWebsocket } from "./transports/ws.js";
|
|
7
|
+
export { StatewireSendError } from "./types.js";
|
|
8
|
+
export type { StatewireProtocol } from "./wire/protocol.js";
|
|
9
|
+
export { DEFAULT_PROTOCOL } from "./wire/protocol.js";
|
|
10
|
+
export type { StatewireDocuments } from "./wire/documents.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,mBAAgB;AACzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,sBAAmB;AAC5D,YAAY,EAAE,iBAAiB,EAAE,sBAAmB;AACpD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,uBAAoB;AAC/E,OAAO,EAAE,aAAa,EAAE,4BAAyB;AACjD,OAAO,EAAE,kBAAkB,EAAE,2BAAwB;AACrD,OAAO,EAAE,kBAAkB,EAAE,mBAAgB;AAE7C,YAAY,EAAE,iBAAiB,EAAE,2BAAwB;AACzD,OAAO,EAAE,gBAAgB,EAAE,2BAAwB;AACnD,YAAY,EAAE,kBAAkB,EAAE,4BAAyB"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { decodeDocument, encodeDocument } from "./document.js";
|
|
2
1
|
import { DEFAULT_PROTOCOL } from "./wire/protocol.js";
|
|
2
|
+
import { decodeDocument, encodeDocument } from "./document.js";
|
|
3
3
|
import { StatewireSendError } from "./types.js";
|
|
4
4
|
import { StatewireClient, StatewireResource, useStatewire } from "./statewire.js";
|
|
5
5
|
import { StatewireHttp } from "./transports/sse.js";
|