@hypen-space/core 0.4.37 → 0.4.39

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 (85) hide show
  1. package/README.md +13 -14
  2. package/dist/app.js +304 -227
  3. package/dist/app.js.map +5 -5
  4. package/dist/components/builtin.d.ts +17 -0
  5. package/dist/components/builtin.js +336 -256
  6. package/dist/components/builtin.js.map +6 -6
  7. package/dist/context.d.ts +11 -20
  8. package/dist/context.js +69 -101
  9. package/dist/context.js.map +3 -3
  10. package/dist/datasource.js +80 -0
  11. package/dist/datasource.js.map +10 -0
  12. package/dist/disposable.js +60 -63
  13. package/dist/disposable.js.map +2 -2
  14. package/dist/events.js +60 -63
  15. package/dist/events.js.map +2 -2
  16. package/dist/hypen.js +78 -0
  17. package/dist/hypen.js.map +10 -0
  18. package/dist/index.browser.d.ts +2 -1
  19. package/dist/index.browser.js +327 -281
  20. package/dist/index.browser.js.map +7 -8
  21. package/dist/index.d.ts +0 -3
  22. package/dist/index.js +547 -246
  23. package/dist/index.js.map +9 -9
  24. package/dist/logger.js +60 -64
  25. package/dist/logger.js.map +2 -2
  26. package/dist/remote/client.js +258 -158
  27. package/dist/remote/client.js.map +6 -6
  28. package/dist/remote/index.d.ts +6 -5
  29. package/dist/remote/index.js +255 -1985
  30. package/dist/remote/index.js.map +6 -13
  31. package/dist/remote/session.js +151 -0
  32. package/dist/remote/session.js.map +10 -0
  33. package/dist/renderer.js +60 -63
  34. package/dist/renderer.js.map +2 -2
  35. package/dist/result.js +235 -0
  36. package/dist/result.js.map +10 -0
  37. package/dist/retry.js +344 -0
  38. package/dist/retry.js.map +11 -0
  39. package/dist/router.js +62 -70
  40. package/dist/router.js.map +2 -2
  41. package/dist/state.js +3 -8
  42. package/dist/state.js.map +2 -2
  43. package/package.json +11 -56
  44. package/src/components/builtin.ts +78 -56
  45. package/src/context.ts +22 -65
  46. package/src/index.browser.ts +5 -4
  47. package/src/index.ts +10 -23
  48. package/src/remote/index.ts +9 -5
  49. package/src/result.ts +11 -0
  50. package/dist/discovery.d.ts +0 -90
  51. package/dist/discovery.js +0 -1334
  52. package/dist/discovery.js.map +0 -15
  53. package/dist/engine.browser.d.ts +0 -116
  54. package/dist/engine.browser.js +0 -479
  55. package/dist/engine.browser.js.map +0 -12
  56. package/dist/engine.d.ts +0 -107
  57. package/dist/engine.js +0 -543
  58. package/dist/engine.js.map +0 -12
  59. package/dist/loader.d.ts +0 -51
  60. package/dist/loader.js +0 -292
  61. package/dist/loader.js.map +0 -11
  62. package/dist/plugin.d.ts +0 -39
  63. package/dist/plugin.js +0 -685
  64. package/dist/plugin.js.map +0 -12
  65. package/dist/remote/server.d.ts +0 -188
  66. package/dist/remote/server.js +0 -2270
  67. package/dist/remote/server.js.map +0 -19
  68. package/src/discovery.ts +0 -527
  69. package/src/engine.browser.ts +0 -302
  70. package/src/engine.ts +0 -282
  71. package/src/loader.ts +0 -136
  72. package/src/plugin.ts +0 -220
  73. package/src/remote/server.ts +0 -879
  74. package/wasm-browser/README.md +0 -594
  75. package/wasm-browser/hypen_engine.d.ts +0 -389
  76. package/wasm-browser/hypen_engine.js +0 -1070
  77. package/wasm-browser/hypen_engine_bg.wasm +0 -0
  78. package/wasm-browser/hypen_engine_bg.wasm.d.ts +0 -37
  79. package/wasm-browser/package.json +0 -24
  80. package/wasm-node/README.md +0 -594
  81. package/wasm-node/hypen_engine.d.ts +0 -327
  82. package/wasm-node/hypen_engine.js +0 -979
  83. package/wasm-node/hypen_engine_bg.wasm +0 -0
  84. package/wasm-node/hypen_engine_bg.wasm.d.ts +0 -37
  85. package/wasm-node/package.json +0 -22
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * @hypen-space/core - Browser Entry Point
3
3
  *
4
- * This entry point uses the browser-compatible engine with explicit WASM initialization.
4
+ * This entry point exports platform-agnostic runtime APIs for browser use.
5
+ * Engine has moved to @hypen-space/web-engine (browser) and @hypen-space/server (Node.js).
5
6
  */
6
7
 
7
8
  // ============================================================================
@@ -17,9 +18,9 @@ export type {
17
18
  ComponentResolver,
18
19
  } from "./types.js";
19
20
 
20
- // NOTE: Engine (BrowserEngine) is NOT exported from the barrel.
21
- // Import it explicitly from its subpath to avoid pulling in WASM:
22
- // import { Engine } from "@hypen-space/core/engine/browser"
21
+ // NOTE: Engine has moved to dedicated packages:
22
+ // Browser: import { Engine } from "@hypen-space/web-engine/engine"
23
+ // Node.js: import { Engine } from "@hypen-space/server/engine"
23
24
 
24
25
  // ============================================================================
25
26
  // APP / MODULE SYSTEM
package/src/index.ts CHANGED
@@ -54,10 +54,9 @@ export type {
54
54
  ComponentResolver as EngineComponentResolver,
55
55
  } from "./types.js";
56
56
 
57
- // NOTE: Engine and BrowserEngine are NOT exported from the barrel.
58
- // Import them explicitly from their subpaths to avoid pulling in WASM:
59
- // import { Engine } from "@hypen-space/core/engine"
60
- // import { Engine } from "@hypen-space/core/engine/browser"
57
+ // NOTE: Engine has moved to dedicated packages:
58
+ // Browser: import { Engine } from "@hypen-space/web-engine/engine"
59
+ // Node.js: import { Engine } from "@hypen-space/server/engine"
61
60
 
62
61
  // ============================================================================
63
62
  // APP / MODULE SYSTEM
@@ -172,9 +171,8 @@ export type {
172
171
  SessionInfo,
173
172
  } from "./remote/client.js";
174
173
 
175
- // NOTE: RemoteServer and serve are NOT exported from the barrel because they
176
- // import the Node.js WASM engine. Import them from the subpath instead:
177
- // import { RemoteServer, serve } from "@hypen-space/core/remote/server"
174
+ // NOTE: RemoteServer has moved to @hypen-space/server:
175
+ // import { RemoteServer, serve } from "@hypen-space/server/remote"
178
176
 
179
177
  // Session Management
180
178
  export { SessionManager } from "./remote/session.js";
@@ -210,25 +208,14 @@ export type {
210
208
  } from "./resolver.js";
211
209
 
212
210
  // ============================================================================
213
- // NODE-ONLY MODULES (NOT exported from barrel use subpath imports)
211
+ // NODE-ONLY MODULES — Moved to @hypen-space/server
214
212
  // ============================================================================
215
213
  //
216
- // These modules use Node.js APIs (fs.readFileSync) and must NOT be in the
217
- // browser-safe barrel. Import them from their subpaths instead:
214
+ // These modules have moved to the @hypen-space/server package:
215
+ // import { ComponentLoader, componentLoader } from "@hypen-space/server/loader"
216
+ // import { discoverComponents, ... } from "@hypen-space/server/discovery"
217
+ // import { hypenPlugin, ... } from "@hypen-space/server/plugin"
218
218
  //
219
- // import { ComponentLoader, componentLoader } from "@hypen-space/core/loader"
220
- // import { discoverComponents, ... } from "@hypen-space/core/discovery"
221
- // import { hypenPlugin, ... } from "@hypen-space/core/plugin"
222
- //
223
-
224
- // Re-export types only (types are always safe)
225
- export type { ComponentDefinition } from "./loader.js";
226
- export type {
227
- DiscoveredComponent,
228
- DiscoveryOptions,
229
- WatchOptions,
230
- } from "./discovery.js";
231
- export type { HypenPluginOptions } from "./plugin.js";
232
219
 
233
220
  // ============================================================================
234
221
  // BUILT-IN COMPONENTS
@@ -1,8 +1,10 @@
1
1
  /**
2
- * Remote UI streaming for Hypen
2
+ * Remote UI client and session management for Hypen
3
3
  *
4
- * Client-side: Connect to remote Hypen apps
5
- * Server-side: Stream Hypen apps over WebSocket
4
+ * Client-side: Connect to remote Hypen apps via RemoteEngine
5
+ * Session: Manage client sessions with SessionManager
6
+ *
7
+ * Note: RemoteServer has moved to @hypen-space/server
6
8
  */
7
9
 
8
10
  // Client
@@ -14,8 +16,8 @@ export type {
14
16
  SessionInfo,
15
17
  } from "./client.js";
16
18
 
17
- // Server
18
- export { RemoteServer, serve } from "./server.js";
19
+ // NOTE: RemoteServer has moved to @hypen-space/server
20
+ // Import it from: import { RemoteServer } from "@hypen-space/server/remote"
19
21
 
20
22
  // Session Management
21
23
  export { SessionManager } from "./session.js";
@@ -28,6 +30,8 @@ export type {
28
30
  PatchMessage,
29
31
  DispatchActionMessage,
30
32
  StateUpdateMessage,
33
+ UpdateStateMessage,
34
+ SubscribeStateMessage,
31
35
  HelloMessage,
32
36
  SessionAckMessage,
33
37
  SessionExpiredMessage,
package/src/result.ts CHANGED
@@ -292,6 +292,17 @@ export class RenderError extends HypenError {
292
292
  * The engine returns JsValue error strings with known prefixes.
293
293
  */
294
294
  export function classifyEngineError(err: unknown): HypenError {
295
+ // Handle structured WASM errors: { type: string, message: string }
296
+ if (err && typeof err === 'object' && 'message' in err && 'type' in err) {
297
+ const structured = err as { type: string; message: string };
298
+ switch (structured.type) {
299
+ case 'parseError': return new ParseError(structured.message);
300
+ case 'stateError': return new StateError(structured.message);
301
+ case 'renderError': return new RenderError(structured.message);
302
+ case 'actionError': return new HypenError('ACTION_ERROR', structured.message);
303
+ default: return new HypenError('UNKNOWN_ERROR', structured.message);
304
+ }
305
+ }
295
306
  const message = err instanceof Error ? err.message : String(err);
296
307
 
297
308
  if (message.startsWith('Parse error:')) {
@@ -1,90 +0,0 @@
1
- /**
2
- * Component Discovery
3
- *
4
- * Automatically discovers Hypen components from the filesystem.
5
- *
6
- * Supports multiple conventions:
7
- * 1. Single-file: ComponentName.ts with .ui(hypen`...`) inline template
8
- * 2. Folder-based: ComponentName/component.ts + ComponentName/component.hypen
9
- * 3. Sibling files: ComponentName.ts + ComponentName.hypen
10
- * 4. Index-based: ComponentName/index.ts + ComponentName/index.hypen
11
- */
12
- import type { HypenModuleDefinition } from "./app.js";
13
- export interface DiscoveredComponent {
14
- name: string;
15
- /** Path to .hypen file (null for single-file components with inline templates) */
16
- hypenPath: string | null;
17
- /** Path to .ts module file */
18
- modulePath: string | null;
19
- /** The UI template (from .hypen file or inline) */
20
- template: string;
21
- /** Whether this component has a module (state/actions) */
22
- hasModule: boolean;
23
- /** Whether this is a single-file component with inline template */
24
- isSingleFile: boolean;
25
- }
26
- export interface DiscoveryOptions {
27
- /**
28
- * Which naming patterns to look for
29
- * Default: ["single-file", "folder", "sibling", "index"]
30
- *
31
- * - single-file: ComponentName.ts with .ui(hypen`...`) inline template
32
- * - folder: ComponentName/component.ts + ComponentName/component.hypen
33
- * - sibling: ComponentName.ts + ComponentName.hypen
34
- * - index: ComponentName/index.ts + ComponentName/index.hypen
35
- */
36
- patterns?: ("single-file" | "folder" | "sibling" | "index")[];
37
- /**
38
- * Recursively scan subdirectories
39
- * Default: true
40
- */
41
- recursive?: boolean;
42
- /**
43
- * Enable debug logging
44
- * Default: false
45
- */
46
- debug?: boolean;
47
- }
48
- export interface WatchOptions extends DiscoveryOptions {
49
- /**
50
- * Callback when components change
51
- */
52
- onChange?: (components: DiscoveredComponent[]) => void;
53
- /**
54
- * Callback when a component is added
55
- */
56
- onAdd?: (component: DiscoveredComponent) => void;
57
- /**
58
- * Callback when a component is removed
59
- */
60
- onRemove?: (name: string) => void;
61
- /**
62
- * Callback when a component is updated
63
- */
64
- onUpdate?: (component: DiscoveredComponent) => void;
65
- }
66
- /**
67
- * Discover all Hypen components in a directory
68
- */
69
- export declare function discoverComponents(baseDir: string, options?: DiscoveryOptions): Promise<DiscoveredComponent[]>;
70
- /**
71
- * Load discovered components into a map for use with Hypen
72
- */
73
- export declare function loadDiscoveredComponents(components: DiscoveredComponent[]): Promise<Map<string, {
74
- name: string;
75
- module: HypenModuleDefinition<any>;
76
- template: string;
77
- }>>;
78
- /**
79
- * Watch a directory for component changes
80
- */
81
- export declare function watchComponents(baseDir: string, options?: WatchOptions): {
82
- stop: () => void;
83
- };
84
- /**
85
- * Generate a components object from discovered components
86
- * Useful for static imports / code generation
87
- */
88
- export declare function generateComponentsCode(baseDir: string, options?: DiscoveryOptions & {
89
- outputDir?: string;
90
- }): Promise<string>;