@lifeart/async-dom 2.0.0-alpha.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.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +623 -0
  3. package/dist/base.d.cts +398 -0
  4. package/dist/base.d.cts.map +1 -0
  5. package/dist/base.d.ts +398 -0
  6. package/dist/base.d.ts.map +1 -0
  7. package/dist/cli.cjs +528 -0
  8. package/dist/cli.cjs.map +1 -0
  9. package/dist/cli.d.cts +1 -0
  10. package/dist/cli.d.ts +1 -0
  11. package/dist/cli.js +493 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/debug.d.cts +145 -0
  14. package/dist/debug.d.cts.map +1 -0
  15. package/dist/debug.d.ts +145 -0
  16. package/dist/debug.d.ts.map +1 -0
  17. package/dist/index.cjs +26 -0
  18. package/dist/index.d.cts +560 -0
  19. package/dist/index.d.cts.map +1 -0
  20. package/dist/index.d.ts +560 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +5 -0
  23. package/dist/index2.d.cts +5 -0
  24. package/dist/index2.d.ts +5 -0
  25. package/dist/index3.d.cts +882 -0
  26. package/dist/index3.d.cts.map +1 -0
  27. package/dist/index3.d.ts +882 -0
  28. package/dist/index3.d.ts.map +1 -0
  29. package/dist/main-thread.cjs +5459 -0
  30. package/dist/main-thread.cjs.map +1 -0
  31. package/dist/main-thread.js +5429 -0
  32. package/dist/main-thread.js.map +1 -0
  33. package/dist/react.cjs +116 -0
  34. package/dist/react.cjs.map +1 -0
  35. package/dist/react.d.cts +91 -0
  36. package/dist/react.d.cts.map +1 -0
  37. package/dist/react.d.ts +91 -0
  38. package/dist/react.d.ts.map +1 -0
  39. package/dist/react.js +113 -0
  40. package/dist/react.js.map +1 -0
  41. package/dist/resolve-debug.cjs +24 -0
  42. package/dist/resolve-debug.cjs.map +1 -0
  43. package/dist/resolve-debug.js +19 -0
  44. package/dist/resolve-debug.js.map +1 -0
  45. package/dist/server.cjs +250 -0
  46. package/dist/server.cjs.map +1 -0
  47. package/dist/server.d.cts +127 -0
  48. package/dist/server.d.cts.map +1 -0
  49. package/dist/server.d.ts +127 -0
  50. package/dist/server.d.ts.map +1 -0
  51. package/dist/server.js +245 -0
  52. package/dist/server.js.map +1 -0
  53. package/dist/svelte.cjs +48 -0
  54. package/dist/svelte.cjs.map +1 -0
  55. package/dist/svelte.d.cts +38 -0
  56. package/dist/svelte.d.cts.map +1 -0
  57. package/dist/svelte.d.ts +38 -0
  58. package/dist/svelte.d.ts.map +1 -0
  59. package/dist/svelte.js +47 -0
  60. package/dist/svelte.js.map +1 -0
  61. package/dist/sync-channel.cjs +532 -0
  62. package/dist/sync-channel.cjs.map +1 -0
  63. package/dist/sync-channel.js +425 -0
  64. package/dist/sync-channel.js.map +1 -0
  65. package/dist/transport.cjs +213 -0
  66. package/dist/transport.cjs.map +1 -0
  67. package/dist/transport.d.cts +79 -0
  68. package/dist/transport.d.cts.map +1 -0
  69. package/dist/transport.d.ts +79 -0
  70. package/dist/transport.d.ts.map +1 -0
  71. package/dist/transport.js +202 -0
  72. package/dist/transport.js.map +1 -0
  73. package/dist/vite-plugin.cjs +112 -0
  74. package/dist/vite-plugin.cjs.map +1 -0
  75. package/dist/vite-plugin.d.cts +39 -0
  76. package/dist/vite-plugin.d.cts.map +1 -0
  77. package/dist/vite-plugin.d.ts +39 -0
  78. package/dist/vite-plugin.d.ts.map +1 -0
  79. package/dist/vite-plugin.js +107 -0
  80. package/dist/vite-plugin.js.map +1 -0
  81. package/dist/vue.cjs +123 -0
  82. package/dist/vue.cjs.map +1 -0
  83. package/dist/vue.d.cts +126 -0
  84. package/dist/vue.d.cts.map +1 -0
  85. package/dist/vue.d.ts +126 -0
  86. package/dist/vue.d.ts.map +1 -0
  87. package/dist/vue.js +120 -0
  88. package/dist/vue.js.map +1 -0
  89. package/dist/worker-thread.cjs +2751 -0
  90. package/dist/worker-thread.cjs.map +1 -0
  91. package/dist/worker-thread.js +2692 -0
  92. package/dist/worker-thread.js.map +1 -0
  93. package/dist/worker-transport.cjs +136 -0
  94. package/dist/worker-transport.cjs.map +1 -0
  95. package/dist/worker-transport.d.cts +162 -0
  96. package/dist/worker-transport.d.cts.map +1 -0
  97. package/dist/worker-transport.d.ts +162 -0
  98. package/dist/worker-transport.d.ts.map +1 -0
  99. package/dist/worker-transport.js +125 -0
  100. package/dist/worker-transport.js.map +1 -0
  101. package/dist/worker.cjs +12 -0
  102. package/dist/worker.d.cts +2 -0
  103. package/dist/worker.d.ts +2 -0
  104. package/dist/worker.js +2 -0
  105. package/dist/ws-server-transport.cjs +147 -0
  106. package/dist/ws-server-transport.cjs.map +1 -0
  107. package/dist/ws-server-transport.d.cts +64 -0
  108. package/dist/ws-server-transport.d.cts.map +1 -0
  109. package/dist/ws-server-transport.d.ts +64 -0
  110. package/dist/ws-server-transport.d.ts.map +1 -0
  111. package/dist/ws-server-transport.js +142 -0
  112. package/dist/ws-server-transport.js.map +1 -0
  113. package/dist/ws-transport.cjs +954 -0
  114. package/dist/ws-transport.cjs.map +1 -0
  115. package/dist/ws-transport.js +913 -0
  116. package/dist/ws-transport.js.map +1 -0
  117. package/package.json +145 -0
package/dist/base.d.ts ADDED
@@ -0,0 +1,398 @@
1
+ //#region src/core/protocol.d.ts
2
+ /**
3
+ * Type-safe message protocol for async-dom communication.
4
+ *
5
+ * All messages between the main thread and worker threads use discriminated
6
+ * unions for compile-time safety and exhaustive switch handling.
7
+ */
8
+ /**
9
+ * Branded numeric type for DOM node identifiers.
10
+ * The brand prevents accidental use of plain numbers as NodeIds.
11
+ */
12
+ type NodeId = number & {
13
+ readonly __brand: "NodeId";
14
+ };
15
+ /** Branded string type identifying an application instance. */
16
+ type AppId = string & {
17
+ readonly __brand: "AppId";
18
+ };
19
+ /** Branded string type identifying a connected client (for multi-client server mode). */
20
+ type ClientId = string & {
21
+ readonly __brand: "ClientId";
22
+ };
23
+ /**
24
+ * Reserved structural node IDs.
25
+ * These correspond to the well-known DOM nodes that always exist.
26
+ * Dynamic node IDs start at 11 to avoid collisions.
27
+ */
28
+ declare const BODY_NODE_ID: NodeId;
29
+ declare const HEAD_NODE_ID: NodeId;
30
+ declare const HTML_NODE_ID: NodeId;
31
+ declare const DOCUMENT_NODE_ID: NodeId;
32
+ /**
33
+ * Create a new unique numeric NodeId (auto-incremented).
34
+ */
35
+ declare function createNodeId(): NodeId;
36
+ /**
37
+ * Reset the node ID counter (for testing only).
38
+ */
39
+
40
+ /** Cast a plain string to a branded AppId. */
41
+ declare function createAppId(id: string): AppId;
42
+ /** Cast a plain string to a branded ClientId. */
43
+ declare function createClientId(id: string): ClientId;
44
+ /** Standard DOM insertAdjacentHTML position values. */
45
+ type InsertPosition = "beforebegin" | "afterbegin" | "beforeend" | "afterend";
46
+ /**
47
+ * Discriminated union of all DOM mutations sent from worker to main thread.
48
+ *
49
+ * Mutation lifecycle:
50
+ * 1. Worker-side VirtualElement/VirtualDocument methods create DomMutation objects
51
+ * 2. Mutations are collected by MutationCollector into batches
52
+ * 3. Batches are wrapped in a MutationMessage and sent via Transport
53
+ * 4. Main-thread FrameScheduler queues and prioritizes mutations
54
+ * 5. DomRenderer.apply() executes each mutation against the real DOM
55
+ *
56
+ * Each variant carries the target node's `id` plus action-specific data.
57
+ * Mutations marked `optional: true` (e.g., style updates) may be dropped
58
+ * by the scheduler under frame budget pressure.
59
+ */
60
+ type DomMutation = {
61
+ action: "createNode";
62
+ id: NodeId;
63
+ tag: string;
64
+ textContent?: string;
65
+ } | {
66
+ action: "createComment";
67
+ id: NodeId;
68
+ textContent: string;
69
+ } | {
70
+ action: "appendChild";
71
+ id: NodeId;
72
+ childId: NodeId;
73
+ } | {
74
+ action: "removeNode";
75
+ id: NodeId;
76
+ } | {
77
+ action: "removeChild";
78
+ id: NodeId;
79
+ childId: NodeId;
80
+ } | {
81
+ action: "insertBefore";
82
+ id: NodeId;
83
+ newId: NodeId;
84
+ refId: NodeId | null;
85
+ } | {
86
+ action: "setAttribute";
87
+ id: NodeId;
88
+ name: string;
89
+ value: string;
90
+ optional?: boolean;
91
+ } | {
92
+ action: "removeAttribute";
93
+ id: NodeId;
94
+ name: string;
95
+ } | {
96
+ action: "setStyle";
97
+ id: NodeId;
98
+ property: string;
99
+ value: string;
100
+ optional?: boolean;
101
+ } | {
102
+ action: "setProperty";
103
+ id: NodeId;
104
+ property: string;
105
+ value: unknown;
106
+ } | {
107
+ action: "setTextContent";
108
+ id: NodeId;
109
+ textContent: string;
110
+ } | {
111
+ action: "setClassName";
112
+ id: NodeId;
113
+ name: string;
114
+ } | {
115
+ action: "setHTML";
116
+ id: NodeId;
117
+ html: string;
118
+ } | {
119
+ action: "addEventListener";
120
+ id: NodeId;
121
+ name: string;
122
+ listenerId: string;
123
+ } | {
124
+ action: "headAppendChild";
125
+ id: NodeId;
126
+ } | {
127
+ action: "bodyAppendChild";
128
+ id: NodeId;
129
+ } | {
130
+ action: "pushState";
131
+ state: unknown;
132
+ title: string;
133
+ url: string;
134
+ } | {
135
+ action: "replaceState";
136
+ state: unknown;
137
+ title: string;
138
+ url: string;
139
+ } | {
140
+ action: "scrollTo";
141
+ x: number;
142
+ y: number;
143
+ } | {
144
+ action: "insertAdjacentHTML";
145
+ id: NodeId;
146
+ position: InsertPosition;
147
+ html: string;
148
+ } | {
149
+ action: "configureEvent";
150
+ id: NodeId;
151
+ name: string;
152
+ preventDefault: boolean;
153
+ passive?: boolean;
154
+ } | {
155
+ action: "removeEventListener";
156
+ id: NodeId;
157
+ listenerId: string;
158
+ } | {
159
+ action: "callMethod";
160
+ id: NodeId;
161
+ method: string;
162
+ args: unknown[];
163
+ };
164
+ /** Convenience union of all possible mutation action string literals. */
165
+ type MutationAction = DomMutation["action"];
166
+ /** Scheduler priority level. High-priority mutations are processed first each frame. */
167
+ type Priority = "high" | "normal" | "low";
168
+ /**
169
+ * Envelope wrapping a batch of mutations with routing and timing metadata.
170
+ * Sent from worker thread to main thread via Transport.
171
+ */
172
+ interface MutationMessage {
173
+ type: "mutation";
174
+ appId: AppId;
175
+ uid: number;
176
+ mutations: DomMutation[];
177
+ priority?: Priority;
178
+ sentAt?: number;
179
+ /** Causal event that triggered this batch (Feature 15: Causality Graph). */
180
+ causalEvent?: {
181
+ eventType: string;
182
+ listenerId: string;
183
+ timestamp: number;
184
+ };
185
+ }
186
+ /**
187
+ * Serialized event data sent from main thread to worker.
188
+ * Contains a flat subset of DOM event properties that can be transferred via postMessage.
189
+ * Target and relatedTarget are serialized as NodeId strings, not DOM references.
190
+ */
191
+ interface SerializedEvent {
192
+ type: string;
193
+ target: string | null;
194
+ currentTarget: string | null;
195
+ clientX?: number;
196
+ clientY?: number;
197
+ pageX?: number;
198
+ pageY?: number;
199
+ screenX?: number;
200
+ screenY?: number;
201
+ offsetX?: number;
202
+ offsetY?: number;
203
+ button?: number;
204
+ buttons?: number;
205
+ key?: string;
206
+ code?: string;
207
+ keyCode?: number;
208
+ altKey?: boolean;
209
+ ctrlKey?: boolean;
210
+ metaKey?: boolean;
211
+ shiftKey?: boolean;
212
+ bubbles?: boolean;
213
+ cancelable?: boolean;
214
+ composed?: boolean;
215
+ detail?: number;
216
+ eventPhase?: number;
217
+ isTrusted?: boolean;
218
+ timeStamp?: number;
219
+ data?: string;
220
+ inputType?: string;
221
+ relatedTarget?: string | null;
222
+ deltaX?: number;
223
+ deltaY?: number;
224
+ deltaZ?: number;
225
+ deltaMode?: number;
226
+ value?: string;
227
+ checked?: boolean;
228
+ selectedIndex?: number;
229
+ currentTime?: number;
230
+ duration?: number;
231
+ paused?: boolean;
232
+ ended?: boolean;
233
+ readyState?: number;
234
+ }
235
+ /** Event message sent from main thread to worker to dispatch a DOM event. */
236
+ interface EventMessage {
237
+ type: "event";
238
+ appId: AppId;
239
+ listenerId: string;
240
+ event: SerializedEvent;
241
+ clientId?: ClientId;
242
+ }
243
+ /** Serialized window.location data sent during app initialization. */
244
+ interface SerializedLocation {
245
+ hash: string;
246
+ href: string;
247
+ port: string;
248
+ host: string;
249
+ origin: string;
250
+ hostname: string;
251
+ pathname: string;
252
+ protocol: string;
253
+ search: string;
254
+ state: unknown;
255
+ }
256
+ /** Serialized error data for cross-thread error reporting, including causal chain via `cause`. */
257
+ interface SerializedError {
258
+ message: string;
259
+ stack?: string;
260
+ name?: string;
261
+ cause?: SerializedError;
262
+ filename?: string;
263
+ lineno?: number;
264
+ colno?: number;
265
+ isUnhandledRejection?: boolean;
266
+ }
267
+ /**
268
+ * System-level control messages exchanged between main thread and worker.
269
+ * Includes lifecycle events (init/ready), sync queries, diagnostics, and multi-client management.
270
+ */
271
+ type SystemMessage = {
272
+ type: "init";
273
+ appId: AppId;
274
+ location: SerializedLocation;
275
+ sharedBuffer?: SharedArrayBuffer;
276
+ } | {
277
+ type: "ready";
278
+ appId: AppId;
279
+ } | {
280
+ type: "error";
281
+ appId: AppId;
282
+ error: SerializedError;
283
+ } | {
284
+ type: "visibility";
285
+ state: "visible" | "hidden" | "prerender";
286
+ } | {
287
+ type: "query";
288
+ appId: AppId;
289
+ uid: number;
290
+ nodeId: NodeId;
291
+ query: "boundingRect" | "computedStyle" | "nodeProperty" | "windowProperty";
292
+ property?: string;
293
+ } | {
294
+ type: "queryResult";
295
+ uid: number;
296
+ result: unknown;
297
+ } | {
298
+ type: "debugQuery";
299
+ query: string;
300
+ } | {
301
+ type: "debugResult";
302
+ query: string;
303
+ result: unknown;
304
+ } | {
305
+ type: "eventTimingResult";
306
+ listenerId: string;
307
+ eventType: string;
308
+ dispatchMs: number;
309
+ mutationCount: number;
310
+ transportMs: number;
311
+ } | {
312
+ type: "perfEntries";
313
+ appId: AppId;
314
+ entries: PerfEntryData[];
315
+ } | {
316
+ type: "ping";
317
+ } | {
318
+ type: "pong";
319
+ } | {
320
+ type: "ack";
321
+ appId: AppId;
322
+ lastUid: number;
323
+ } | {
324
+ type: "clientConnect";
325
+ clientId: ClientId;
326
+ metadata?: Record<string, unknown>;
327
+ } | {
328
+ type: "clientDisconnect";
329
+ clientId: ClientId;
330
+ } | {
331
+ type: "snapshotComplete";
332
+ };
333
+ /** Serialized performance entry sent from worker to main thread (Feature 16). */
334
+ interface PerfEntryData {
335
+ name: string;
336
+ startTime: number;
337
+ duration: number;
338
+ entryType: string;
339
+ }
340
+ /** Top-level discriminated union of all messages in the async-dom protocol. */
341
+ type Message = MutationMessage | EventMessage | SystemMessage;
342
+ /** Type guard: narrows a Message to MutationMessage. */
343
+ //#endregion
344
+ //#region src/transport/base.d.ts
345
+ /**
346
+ * The connection lifecycle state of a transport.
347
+ *
348
+ * - `"connecting"` — Transport is establishing a connection.
349
+ * - `"open"` — Transport is connected and ready to send/receive messages.
350
+ * - `"reconnecting"` — Transport lost connection and is attempting to reconnect.
351
+ * - `"closed"` — Transport is permanently closed and cannot be reused.
352
+ */
353
+ type TransportReadyState = "connecting" | "open" | "reconnecting" | "closed";
354
+ /** Cumulative message statistics collected by a transport. */
355
+ interface TransportStats {
356
+ /** Total number of messages sent. */
357
+ messageCount: number;
358
+ /** Total bytes sent (approximate, based on JSON string length). */
359
+ totalBytes: number;
360
+ /** Size in bytes of the largest single message sent. */
361
+ largestMessageBytes: number;
362
+ /** Size in bytes of the most recently sent message. */
363
+ lastMessageBytes: number;
364
+ }
365
+ /**
366
+ * Bidirectional message transport between the main thread and a worker or remote process.
367
+ *
368
+ * All async-dom communication flows through this interface. Built-in implementations
369
+ * include `WorkerTransport`, `WebSocketTransport`, `BinaryWorkerTransport`, and
370
+ * `WebSocketServerTransport`.
371
+ */
372
+ interface Transport {
373
+ /** Send a message to the other end of the transport. */
374
+ send(message: Message): void;
375
+ /** Register a handler that is called for every incoming message. */
376
+ onMessage(handler: (message: Message) => void): void;
377
+ /** Permanently close the transport, releasing all resources. */
378
+ close(): void;
379
+ /** Current connection state of the transport. */
380
+ readonly readyState: TransportReadyState;
381
+ /** Called when the transport encounters a connection error. */
382
+ onError?: (error: Error) => void;
383
+ /** Called when the transport is closed (locally or remotely). */
384
+ onClose?: () => void;
385
+ /** Return cumulative send statistics. Only populated when stats are enabled. */
386
+ getStats?(): TransportStats;
387
+ /** Enable or disable statistics collection. */
388
+ enableStats?(enabled: boolean): void;
389
+ /** Maximum message size in bytes. Messages exceeding this are dropped. */
390
+ maxMessageSize?: number;
391
+ /** Number of bytes queued for sending but not yet transmitted. */
392
+ bufferedAmount?: number;
393
+ }
394
+ //# sourceMappingURL=base.d.ts.map
395
+
396
+ //#endregion
397
+ export { createClientId as C, createAppId as S, Priority as _, BODY_NODE_ID as a, SerializedLocation as b, DomMutation as c, HTML_NODE_ID as d, InsertPosition as f, NodeId as g, MutationMessage as h, AppId as i, EventMessage as l, MutationAction as m, TransportReadyState as n, ClientId as o, Message as p, TransportStats as r, DOCUMENT_NODE_ID as s, Transport as t, HEAD_NODE_ID as u, SerializedError as v, createNodeId as w, SystemMessage as x, SerializedEvent as y };
398
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","names":[],"sources":["../src/core/protocol.ts","../src/transport/base.ts"],"sourcesContent":[],"mappings":"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"}