@hypen-space/core 0.4.2 → 0.4.5

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 (66) hide show
  1. package/README.md +1 -1
  2. package/dist/app.d.ts +379 -0
  3. package/dist/app.js +111 -18
  4. package/dist/app.js.map +4 -4
  5. package/dist/components/builtin.d.ts +50 -0
  6. package/dist/components/builtin.js +114 -21
  7. package/dist/components/builtin.js.map +5 -5
  8. package/dist/context.d.ts +90 -0
  9. package/dist/discovery.d.ts +90 -0
  10. package/dist/discovery.js +121 -23
  11. package/dist/discovery.js.map +5 -5
  12. package/dist/disposable.d.ts +122 -0
  13. package/dist/engine.browser.d.ts +101 -0
  14. package/dist/engine.browser.js +192 -5
  15. package/dist/engine.browser.js.map +5 -4
  16. package/dist/engine.d.ts +85 -0
  17. package/dist/engine.js +192 -5
  18. package/dist/engine.js.map +5 -4
  19. package/dist/events.d.ts +78 -0
  20. package/dist/hypen.d.ts +127 -0
  21. package/dist/index.browser.d.ts +25 -0
  22. package/dist/index.browser.js +116 -19
  23. package/dist/index.browser.js.map +6 -6
  24. package/dist/index.d.ts +76 -0
  25. package/dist/index.js +373 -1235
  26. package/dist/index.js.map +10 -15
  27. package/dist/loader.d.ts +51 -0
  28. package/dist/logger.d.ts +141 -0
  29. package/dist/managed-router.d.ts +59 -0
  30. package/dist/plugin.d.ts +39 -0
  31. package/dist/remote/client.d.ts +154 -0
  32. package/dist/remote/client.js +34 -2
  33. package/dist/remote/client.js.map +3 -3
  34. package/dist/remote/index.d.ts +13 -0
  35. package/dist/remote/index.js +472 -26
  36. package/dist/remote/index.js.map +8 -7
  37. package/dist/remote/server.d.ts +173 -0
  38. package/dist/remote/server.js +472 -26
  39. package/dist/remote/server.js.map +8 -7
  40. package/dist/remote/session.d.ts +115 -0
  41. package/dist/remote/types.d.ts +98 -0
  42. package/dist/renderer.d.ts +54 -0
  43. package/dist/renderer.js +6 -2
  44. package/dist/renderer.js.map +3 -3
  45. package/dist/resolver.d.ts +95 -0
  46. package/dist/result.d.ts +134 -0
  47. package/dist/retry.d.ts +150 -0
  48. package/dist/router.d.ts +94 -0
  49. package/dist/state.d.ts +42 -0
  50. package/dist/types.d.ts +30 -0
  51. package/package.json +2 -1
  52. package/src/app.ts +162 -41
  53. package/src/components/builtin.ts +3 -4
  54. package/src/discovery.ts +2 -2
  55. package/src/engine.browser.ts +27 -4
  56. package/src/engine.ts +27 -4
  57. package/src/index.browser.ts +0 -2
  58. package/src/index.ts +3 -2
  59. package/src/managed-router.ts +5 -6
  60. package/src/remote/server.ts +116 -21
  61. package/src/result.ts +48 -0
  62. package/wasm-browser/hypen_engine_bg.wasm +0 -0
  63. package/wasm-browser/package.json +1 -1
  64. package/wasm-node/hypen_engine_bg.wasm +0 -0
  65. package/wasm-node/package.json +5 -3
  66. package/src/module-registry.ts +0 -76
@@ -0,0 +1,173 @@
1
+ /**
2
+ * RemoteServer - Stream Hypen apps over WebSocket with Session Management
3
+ *
4
+ * Usage with inline UI:
5
+ * ```typescript
6
+ * import { RemoteServer, app } from "@hypen-space/core";
7
+ *
8
+ * const counter = app
9
+ * .defineState({ count: 0 })
10
+ * .onAction("increment", ({ state }) => state.count++)
11
+ * .build();
12
+ *
13
+ * new RemoteServer()
14
+ * .module("Counter", counter)
15
+ * .ui(`Column { Text("Count: \${state.count}") }`)
16
+ * .listen(3000);
17
+ * ```
18
+ *
19
+ * Usage with directory-based discovery (auto-resolves imports):
20
+ * ```typescript
21
+ * import { RemoteServer } from "@hypen-space/core";
22
+ * import chatModule from "./apps/chat/Chat/component.js";
23
+ *
24
+ * await new RemoteServer()
25
+ * .source("./apps/chat")
26
+ * .module("Chat", chatModule)
27
+ * .listen(3001);
28
+ * ```
29
+ */
30
+ import type { HypenModule } from "../app.js";
31
+ import type { RemoteMessage, RemoteClient, RemoteServerConfig, SessionConfig } from "./types.js";
32
+ /**
33
+ * Builder pattern for hosting Hypen apps over WebSocket
34
+ */
35
+ export declare class RemoteServer {
36
+ private _module;
37
+ private _moduleName;
38
+ private _ui;
39
+ private _sourceDir;
40
+ private _discoveredComponents;
41
+ private _config;
42
+ private _sessionConfig;
43
+ private _onConnectionCallbacks;
44
+ private _onDisconnectionCallbacks;
45
+ private clients;
46
+ private nextClientId;
47
+ private server;
48
+ private sessionManager;
49
+ /**
50
+ * Set the module for this app
51
+ */
52
+ module(name: string, module: HypenModule<any>): this;
53
+ /**
54
+ * Set the UI DSL string
55
+ */
56
+ ui(dsl: string): this;
57
+ /**
58
+ * Set a source directory for automatic component discovery.
59
+ *
60
+ * All .hypen and .ts components in the directory (and subdirectories) are
61
+ * discovered automatically. The entry component's template is used as the
62
+ * UI, so calling .ui() is optional when .source() is set.
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * new RemoteServer()
67
+ * .source("./apps/chat")
68
+ * .module("Chat", chatModule)
69
+ * .listen(3001);
70
+ * ```
71
+ */
72
+ source(dir: string): this;
73
+ /**
74
+ * Set server configuration
75
+ */
76
+ config(config: RemoteServerConfig): this;
77
+ /**
78
+ * Configure session management
79
+ */
80
+ session(config: SessionConfig): this;
81
+ /**
82
+ * Register connection callback
83
+ */
84
+ onConnection(callback: (client: RemoteClient) => void): this;
85
+ /**
86
+ * Register disconnection callback
87
+ */
88
+ onDisconnection(callback: (client: RemoteClient) => void): this;
89
+ /**
90
+ * Start the WebSocket server
91
+ */
92
+ listen(port?: number): Promise<this>;
93
+ /**
94
+ * Stop the server
95
+ */
96
+ stop(): void;
97
+ /**
98
+ * Get the server URL
99
+ */
100
+ get url(): string | null;
101
+ /**
102
+ * Discover components from the source directory.
103
+ * Populates _discoveredComponents and sets _ui from the entry component
104
+ * if not already set via .ui().
105
+ */
106
+ private discoverFromSource;
107
+ /**
108
+ * Set up a component resolver on a client engine so that imports
109
+ * and component references in templates are resolved from discovered
110
+ * components.
111
+ */
112
+ private setupComponentResolver;
113
+ /**
114
+ * Handle new WebSocket connection
115
+ * Waits for hello message before fully initializing
116
+ */
117
+ private handleOpen;
118
+ /**
119
+ * Initialize session for a client (new or resumed)
120
+ */
121
+ private initializeSession;
122
+ /**
123
+ * Set up the render callback for streaming patches
124
+ */
125
+ private setupRenderCallback;
126
+ /**
127
+ * Handle concurrent connection based on policy
128
+ * Returns true if connection is allowed, false if rejected
129
+ */
130
+ private handleConcurrentConnection;
131
+ /**
132
+ * Trigger onReconnect hook
133
+ */
134
+ private triggerReconnect;
135
+ /**
136
+ * Handle incoming WebSocket message
137
+ */
138
+ private handleMessage;
139
+ /**
140
+ * Handle WebSocket close - suspend session instead of destroying
141
+ */
142
+ private handleClose;
143
+ /**
144
+ * Get current client count
145
+ */
146
+ getClientCount(): number;
147
+ /**
148
+ * Get session stats
149
+ */
150
+ getSessionStats(): {
151
+ activeSessions: number;
152
+ pendingSessions: number;
153
+ totalConnections: number;
154
+ };
155
+ /**
156
+ * Broadcast a message to all connected clients
157
+ */
158
+ broadcast(message: RemoteMessage): void;
159
+ }
160
+ /**
161
+ * Convenience function to create and start a RemoteServer
162
+ */
163
+ export declare function serve(options: {
164
+ module: HypenModule<any>;
165
+ moduleName?: string;
166
+ ui?: string;
167
+ source?: string;
168
+ port?: number;
169
+ hostname?: string;
170
+ session?: SessionConfig;
171
+ onConnection?: (client: RemoteClient) => void;
172
+ onDisconnection?: (client: RemoteClient) => void;
173
+ }): Promise<RemoteServer>;