@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
@@ -21,7 +21,250 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
21
21
  throw Error('Dynamic require of "' + x + '" is not supported');
22
22
  });
23
23
 
24
+ // src/result.ts
25
+ function Ok(value) {
26
+ return { ok: true, value };
27
+ }
28
+ function Err(error) {
29
+ return { ok: false, error };
30
+ }
31
+ function isOk(result) {
32
+ return result.ok;
33
+ }
34
+ function isErr(result) {
35
+ return !result.ok;
36
+ }
37
+ async function fromPromise(promise, mapError) {
38
+ try {
39
+ const value = await promise;
40
+ return Ok(value);
41
+ } catch (e) {
42
+ if (mapError) {
43
+ return Err(mapError(e));
44
+ }
45
+ return Err(e);
46
+ }
47
+ }
48
+ function fromTry(fn, mapError) {
49
+ try {
50
+ return Ok(fn());
51
+ } catch (e) {
52
+ if (mapError) {
53
+ return Err(mapError(e));
54
+ }
55
+ return Err(e);
56
+ }
57
+ }
58
+ function map(result, fn) {
59
+ if (result.ok) {
60
+ return Ok(fn(result.value));
61
+ }
62
+ return result;
63
+ }
64
+ function mapErr(result, fn) {
65
+ if (!result.ok) {
66
+ return Err(fn(result.error));
67
+ }
68
+ return result;
69
+ }
70
+ function flatMap(result, fn) {
71
+ if (result.ok) {
72
+ return fn(result.value);
73
+ }
74
+ return result;
75
+ }
76
+ function unwrap(result) {
77
+ if (result.ok) {
78
+ return result.value;
79
+ }
80
+ throw result.error;
81
+ }
82
+ function unwrapOr(result, defaultValue) {
83
+ if (result.ok) {
84
+ return result.value;
85
+ }
86
+ return defaultValue;
87
+ }
88
+ function unwrapOrElse(result, fn) {
89
+ if (result.ok) {
90
+ return result.value;
91
+ }
92
+ return fn(result.error);
93
+ }
94
+ function match(result, handlers) {
95
+ if (result.ok) {
96
+ return handlers.ok(result.value);
97
+ }
98
+ return handlers.err(result.error);
99
+ }
100
+ function all(results) {
101
+ const values = [];
102
+ for (const result of results) {
103
+ if (!result.ok) {
104
+ return result;
105
+ }
106
+ values.push(result.value);
107
+ }
108
+ return Ok(values);
109
+ }
110
+
111
+ class HypenError extends Error {
112
+ code;
113
+ context;
114
+ cause;
115
+ constructor(code, message, options) {
116
+ super(message);
117
+ this.name = "HypenError";
118
+ this.code = code;
119
+ this.context = options?.context;
120
+ this.cause = options?.cause;
121
+ Object.setPrototypeOf(this, new.target.prototype);
122
+ }
123
+ }
124
+
125
+ class ActionError extends HypenError {
126
+ actionName;
127
+ constructor(actionName, cause) {
128
+ super("ACTION_ERROR", `Action handler "${actionName}" failed: ${cause instanceof Error ? cause.message : String(cause)}`, {
129
+ context: { actionName },
130
+ cause: cause instanceof Error ? cause : undefined
131
+ });
132
+ this.name = "ActionError";
133
+ this.actionName = actionName;
134
+ }
135
+ }
136
+
137
+ class ConnectionError extends HypenError {
138
+ url;
139
+ attempt;
140
+ constructor(url, cause, attempt) {
141
+ super("CONNECTION_ERROR", `Connection to "${url}" failed${attempt ? ` (attempt ${attempt})` : ""}: ${cause instanceof Error ? cause.message : String(cause)}`, {
142
+ context: { url, attempt },
143
+ cause: cause instanceof Error ? cause : undefined
144
+ });
145
+ this.name = "ConnectionError";
146
+ this.url = url;
147
+ this.attempt = attempt;
148
+ }
149
+ }
150
+
151
+ class StateError extends HypenError {
152
+ path;
153
+ constructor(message, path, cause) {
154
+ super("STATE_ERROR", message, {
155
+ context: { path },
156
+ cause: cause instanceof Error ? cause : undefined
157
+ });
158
+ this.name = "StateError";
159
+ this.path = path;
160
+ }
161
+ }
162
+
163
+ class ParseError extends HypenError {
164
+ source;
165
+ constructor(message, source, cause) {
166
+ super("PARSE_ERROR", message, {
167
+ context: { source },
168
+ cause: cause instanceof Error ? cause : undefined
169
+ });
170
+ this.name = "ParseError";
171
+ this.source = source;
172
+ }
173
+ }
174
+
175
+ class RenderError extends HypenError {
176
+ constructor(message, cause) {
177
+ super("RENDER_ERROR", message, {
178
+ cause: cause instanceof Error ? cause : undefined
179
+ });
180
+ this.name = "RenderError";
181
+ }
182
+ }
183
+ function classifyEngineError(err) {
184
+ if (err && typeof err === "object" && "message" in err && "type" in err) {
185
+ const structured = err;
186
+ switch (structured.type) {
187
+ case "parseError":
188
+ return new ParseError(structured.message);
189
+ case "stateError":
190
+ return new StateError(structured.message);
191
+ case "renderError":
192
+ return new RenderError(structured.message);
193
+ case "actionError":
194
+ return new HypenError("ACTION_ERROR", structured.message);
195
+ default:
196
+ return new HypenError("UNKNOWN_ERROR", structured.message);
197
+ }
198
+ }
199
+ const message = err instanceof Error ? err.message : String(err);
200
+ if (message.startsWith("Parse error:")) {
201
+ return new ParseError(message);
202
+ }
203
+ if (message.startsWith("Invalid state:") || message.startsWith("Invalid state patch:")) {
204
+ return new StateError(message);
205
+ }
206
+ if (message.startsWith("Parent node not found:")) {
207
+ return new RenderError(message);
208
+ }
209
+ return new RenderError(message);
210
+ }
211
+
212
+ // src/datasource.ts
213
+ class DataSourceManager {
214
+ plugins = new Map;
215
+ configs = new Map;
216
+ state = new Map;
217
+ engine;
218
+ constructor(engine) {
219
+ this.engine = engine;
220
+ }
221
+ async use(plugin, config) {
222
+ const { name } = plugin;
223
+ this.state.set(name, {});
224
+ this.plugins.set(name, plugin);
225
+ this.configs.set(name, config);
226
+ await plugin.connect(config, (change) => {
227
+ const current = this.state.get(name) ?? {};
228
+ for (const path of change.paths) {
229
+ if (path in change.values) {
230
+ current[path] = change.values[path];
231
+ }
232
+ }
233
+ this.state.set(name, current);
234
+ this.engine.setContext(name, current);
235
+ });
236
+ }
237
+ get(name) {
238
+ return this.plugins.get(name);
239
+ }
240
+ has(name) {
241
+ return this.plugins.has(name);
242
+ }
243
+ getNames() {
244
+ return Array.from(this.plugins.keys());
245
+ }
246
+ getStatus(name) {
247
+ return this.plugins.get(name)?.status;
248
+ }
249
+ async remove(name) {
250
+ const plugin = this.plugins.get(name);
251
+ if (plugin) {
252
+ await plugin.disconnect();
253
+ this.plugins.delete(name);
254
+ this.configs.delete(name);
255
+ this.state.delete(name);
256
+ this.engine.removeContext(name);
257
+ }
258
+ }
259
+ async disconnectAll() {
260
+ const names = Array.from(this.plugins.keys());
261
+ await Promise.all(names.map((name) => this.remove(name)));
262
+ }
263
+ }
264
+
24
265
  // src/state.ts
266
+ var IS_PROXY = Symbol.for("hypen.isProxy");
267
+ var RAW_TARGET = Symbol.for("hypen.rawTarget");
25
268
  function deepClone(obj) {
26
269
  if (obj === null || typeof obj !== "object") {
27
270
  return obj;
@@ -266,19 +509,33 @@ function unwrapProxy(value) {
266
509
  }
267
510
  return value;
268
511
  }
269
- var IS_PROXY, RAW_TARGET;
270
- var init_state = __esm(() => {
271
- IS_PROXY = Symbol.for("hypen.isProxy");
272
- RAW_TARGET = Symbol.for("hypen.rawTarget");
273
- });
274
512
 
275
513
  // src/logger.ts
514
+ var LOG_LEVEL_ORDER = {
515
+ debug: 0,
516
+ info: 1,
517
+ warn: 2,
518
+ error: 3,
519
+ none: 4
520
+ };
521
+ var LOG_LEVEL_COLORS = {
522
+ debug: "\x1B[36m",
523
+ info: "\x1B[32m",
524
+ warn: "\x1B[33m",
525
+ error: "\x1B[31m"
526
+ };
527
+ var RESET_COLOR = "\x1B[0m";
276
528
  function isProduction() {
277
529
  if (typeof process !== "undefined" && process.env) {
278
530
  return false;
279
531
  }
280
532
  return false;
281
533
  }
534
+ var config = {
535
+ level: isProduction() ? "error" : "info",
536
+ colors: true,
537
+ timestamps: false
538
+ };
282
539
  function setLogLevel(level) {
283
540
  config.level = level;
284
541
  }
@@ -409,220 +666,49 @@ class Logger {
409
666
  function createLogger(tag) {
410
667
  return new Logger(tag);
411
668
  }
412
- var LOG_LEVEL_ORDER, LOG_LEVEL_COLORS, RESET_COLOR = "\x1B[0m", config, logger, log, frameworkLoggers;
413
- var init_logger = __esm(() => {
414
- LOG_LEVEL_ORDER = {
415
- debug: 0,
416
- info: 1,
417
- warn: 2,
418
- error: 3,
419
- none: 4
420
- };
421
- LOG_LEVEL_COLORS = {
422
- debug: "\x1B[36m",
423
- info: "\x1B[32m",
424
- warn: "\x1B[33m",
425
- error: "\x1B[31m"
426
- };
427
- config = {
428
- level: isProduction() ? "error" : "info",
429
- colors: true,
430
- timestamps: false
431
- };
432
- logger = createLogger("Hypen");
433
- log = {
434
- debug: (tag, ...args) => {
435
- if (!shouldLog("debug"))
436
- return;
437
- console.log(formatTag(tag, "debug"), ...args);
438
- },
439
- info: (tag, ...args) => {
440
- if (!shouldLog("info"))
441
- return;
442
- console.info(formatTag(tag, "info"), ...args);
443
- },
444
- warn: (tag, ...args) => {
445
- if (!shouldLog("warn"))
446
- return;
447
- console.warn(formatTag(tag, "warn"), ...args);
448
- },
449
- error: (tag, ...args) => {
450
- if (!shouldLog("error"))
451
- return;
452
- console.error(formatTag(tag, "error"), ...args);
453
- }
454
- };
455
- frameworkLoggers = {
456
- hypen: createLogger("Hypen"),
457
- engine: createLogger("Engine"),
458
- router: createLogger("Router"),
459
- state: createLogger("State"),
460
- events: createLogger("Events"),
461
- remote: createLogger("Remote"),
462
- renderer: createLogger("Renderer"),
463
- module: createLogger("Module"),
464
- lifecycle: createLogger("Lifecycle"),
465
- loader: createLogger("Loader"),
466
- context: createLogger("Context"),
467
- discovery: createLogger("Discovery"),
468
- plugin: createLogger("Plugin"),
469
- canvas: createLogger("Canvas"),
470
- debug: createLogger("Debug")
471
- };
472
- });
473
-
474
- // src/result.ts
475
- function Ok(value) {
476
- return { ok: true, value };
477
- }
478
- function Err(error) {
479
- return { ok: false, error };
480
- }
481
- function classifyEngineError(err) {
482
- const message = err instanceof Error ? err.message : String(err);
483
- if (message.startsWith("Parse error:")) {
484
- return new ParseError(message);
485
- }
486
- if (message.startsWith("Invalid state:") || message.startsWith("Invalid state patch:")) {
487
- return new StateError(message);
488
- }
489
- if (message.startsWith("Parent node not found:")) {
490
- return new RenderError(message);
491
- }
492
- return new RenderError(message);
493
- }
494
- var HypenError, ActionError, ConnectionError, StateError, ParseError, RenderError;
495
- var init_result = __esm(() => {
496
- HypenError = class HypenError extends Error {
497
- code;
498
- context;
499
- cause;
500
- constructor(code, message, options) {
501
- super(message);
502
- this.name = "HypenError";
503
- this.code = code;
504
- this.context = options?.context;
505
- this.cause = options?.cause;
506
- Object.setPrototypeOf(this, new.target.prototype);
507
- }
508
- };
509
- ActionError = class ActionError extends HypenError {
510
- actionName;
511
- constructor(actionName, cause) {
512
- super("ACTION_ERROR", `Action handler "${actionName}" failed: ${cause instanceof Error ? cause.message : String(cause)}`, {
513
- context: { actionName },
514
- cause: cause instanceof Error ? cause : undefined
515
- });
516
- this.name = "ActionError";
517
- this.actionName = actionName;
518
- }
519
- };
520
- ConnectionError = class ConnectionError extends HypenError {
521
- url;
522
- attempt;
523
- constructor(url, cause, attempt) {
524
- super("CONNECTION_ERROR", `Connection to "${url}" failed${attempt ? ` (attempt ${attempt})` : ""}: ${cause instanceof Error ? cause.message : String(cause)}`, {
525
- context: { url, attempt },
526
- cause: cause instanceof Error ? cause : undefined
527
- });
528
- this.name = "ConnectionError";
529
- this.url = url;
530
- this.attempt = attempt;
531
- }
532
- };
533
- StateError = class StateError extends HypenError {
534
- path;
535
- constructor(message, path, cause) {
536
- super("STATE_ERROR", message, {
537
- context: { path },
538
- cause: cause instanceof Error ? cause : undefined
539
- });
540
- this.name = "StateError";
541
- this.path = path;
542
- }
543
- };
544
- ParseError = class ParseError extends HypenError {
545
- source;
546
- constructor(message, source, cause) {
547
- super("PARSE_ERROR", message, {
548
- context: { source },
549
- cause: cause instanceof Error ? cause : undefined
550
- });
551
- this.name = "ParseError";
552
- this.source = source;
553
- }
554
- };
555
- RenderError = class RenderError extends HypenError {
556
- constructor(message, cause) {
557
- super("RENDER_ERROR", message, {
558
- cause: cause instanceof Error ? cause : undefined
559
- });
560
- this.name = "RenderError";
561
- }
562
- };
563
- });
564
-
565
- // src/datasource.ts
566
- class DataSourceManager {
567
- plugins = new Map;
568
- configs = new Map;
569
- state = new Map;
570
- engine;
571
- constructor(engine) {
572
- this.engine = engine;
573
- }
574
- async use(plugin, config2) {
575
- const { name } = plugin;
576
- this.state.set(name, {});
577
- this.plugins.set(name, plugin);
578
- this.configs.set(name, config2);
579
- await plugin.connect(config2, (change) => {
580
- const current = this.state.get(name) ?? {};
581
- for (const path of change.paths) {
582
- if (path in change.values) {
583
- current[path] = change.values[path];
584
- }
585
- }
586
- this.state.set(name, current);
587
- this.engine.setContext(name, current);
588
- });
589
- }
590
- get(name) {
591
- return this.plugins.get(name);
592
- }
593
- has(name) {
594
- return this.plugins.has(name);
595
- }
596
- getNames() {
597
- return Array.from(this.plugins.keys());
598
- }
599
- getStatus(name) {
600
- return this.plugins.get(name)?.status;
601
- }
602
- async remove(name) {
603
- const plugin = this.plugins.get(name);
604
- if (plugin) {
605
- await plugin.disconnect();
606
- this.plugins.delete(name);
607
- this.configs.delete(name);
608
- this.state.delete(name);
609
- this.engine.removeContext(name);
610
- }
611
- }
612
- async disconnectAll() {
613
- const names = Array.from(this.plugins.keys());
614
- await Promise.all(names.map((name) => this.remove(name)));
669
+ var logger = createLogger("Hypen");
670
+ var log = {
671
+ debug: (tag, ...args) => {
672
+ if (!shouldLog("debug"))
673
+ return;
674
+ console.log(formatTag(tag, "debug"), ...args);
675
+ },
676
+ info: (tag, ...args) => {
677
+ if (!shouldLog("info"))
678
+ return;
679
+ console.info(formatTag(tag, "info"), ...args);
680
+ },
681
+ warn: (tag, ...args) => {
682
+ if (!shouldLog("warn"))
683
+ return;
684
+ console.warn(formatTag(tag, "warn"), ...args);
685
+ },
686
+ error: (tag, ...args) => {
687
+ if (!shouldLog("error"))
688
+ return;
689
+ console.error(formatTag(tag, "error"), ...args);
615
690
  }
616
- }
691
+ };
692
+ var frameworkLoggers = {
693
+ hypen: createLogger("Hypen"),
694
+ engine: createLogger("Engine"),
695
+ router: createLogger("Router"),
696
+ state: createLogger("State"),
697
+ events: createLogger("Events"),
698
+ remote: createLogger("Remote"),
699
+ renderer: createLogger("Renderer"),
700
+ module: createLogger("Module"),
701
+ lifecycle: createLogger("Lifecycle"),
702
+ loader: createLogger("Loader"),
703
+ context: createLogger("Context"),
704
+ discovery: createLogger("Discovery"),
705
+ plugin: createLogger("Plugin"),
706
+ canvas: createLogger("Canvas"),
707
+ debug: createLogger("Debug")
708
+ };
617
709
 
618
710
  // src/app.ts
619
- var exports_app = {};
620
- __export(exports_app, {
621
- app: () => app,
622
- HypenModuleInstance: () => HypenModuleInstance,
623
- HypenAppBuilder: () => HypenAppBuilder,
624
- HypenApp: () => HypenApp
625
- });
711
+ var log2 = createLogger("ModuleInstance");
626
712
 
627
713
  class HypenAppBuilder {
628
714
  initialState;
@@ -746,6 +832,7 @@ class HypenApp {
746
832
  this._registry.clear();
747
833
  }
748
834
  }
835
+ var app = new HypenApp;
749
836
 
750
837
  class HypenModuleInstance {
751
838
  engine;
@@ -949,17 +1036,8 @@ class HypenModuleInstance {
949
1036
  Object.assign(this.state, patch);
950
1037
  }
951
1038
  }
952
- var log2, app;
953
- var init_app = __esm(() => {
954
- init_result();
955
- init_state();
956
- init_logger();
957
- log2 = createLogger("ModuleInstance");
958
- app = new HypenApp;
959
- });
960
1039
 
961
1040
  // src/renderer.ts
962
- init_logger();
963
1041
  var log3 = frameworkLoggers.renderer;
964
1042
 
965
1043
  class BaseRenderer {
@@ -1011,7 +1089,6 @@ class ConsoleRenderer {
1011
1089
  }
1012
1090
 
1013
1091
  // src/disposable.ts
1014
- init_logger();
1015
1092
  var log4 = frameworkLoggers.lifecycle;
1016
1093
  function isDisposable(obj) {
1017
1094
  return obj !== null && typeof obj === "object" && "dispose" in obj && typeof obj.dispose === "function";
@@ -1159,8 +1236,6 @@ function usingSync(resource, fn) {
1159
1236
  }
1160
1237
 
1161
1238
  // src/router.ts
1162
- init_state();
1163
- init_logger();
1164
1239
  var log5 = frameworkLoggers.router;
1165
1240
 
1166
1241
  class HypenRouter {
@@ -1310,12 +1385,12 @@ class HypenRouter {
1310
1385
  return "([^/]+)";
1311
1386
  }).replace(/\*/g, ".*");
1312
1387
  const regex = new RegExp(`^${regexPattern}$`);
1313
- const match = path.match(regex);
1314
- if (!match)
1388
+ const match2 = path.match(regex);
1389
+ if (!match2)
1315
1390
  return null;
1316
1391
  const params = {};
1317
1392
  paramNames.forEach((name, i) => {
1318
- const value = match[i + 1];
1393
+ const value = match2[i + 1];
1319
1394
  if (value !== undefined) {
1320
1395
  params[name] = decodeURIComponent(value);
1321
1396
  }
@@ -1372,7 +1447,6 @@ class HypenRouter {
1372
1447
  }
1373
1448
 
1374
1449
  // src/events.ts
1375
- init_logger();
1376
1450
  var log6 = frameworkLoggers.events;
1377
1451
 
1378
1452
  class TypedEventEmitter {
@@ -1438,13 +1512,11 @@ function createEventEmitter() {
1438
1512
  }
1439
1513
 
1440
1514
  // src/context.ts
1441
- init_logger();
1442
1515
  var log7 = frameworkLoggers.context;
1443
1516
 
1444
1517
  class HypenGlobalContext {
1445
1518
  modules = new Map;
1446
1519
  typedEvents;
1447
- legacyEventBus = new Map;
1448
1520
  constructor() {
1449
1521
  this.typedEvents = new TypedEventEmitter;
1450
1522
  }
@@ -1487,67 +1559,36 @@ class HypenGlobalContext {
1487
1559
  return state;
1488
1560
  }
1489
1561
  emit(event, payload) {
1490
- const handlers = this.legacyEventBus.get(event);
1491
- if (!handlers || handlers.size === 0) {
1562
+ if (this.typedEvents.listenerCount(event) === 0) {
1492
1563
  log7.debug(`Event "${event}" emitted but no listeners`);
1493
- } else {
1494
- log7.debug(`Emitting event: ${event}`, payload);
1495
- handlers.forEach((handler) => {
1496
- try {
1497
- handler(payload);
1498
- } catch (error) {
1499
- log7.error(`Error in event handler for "${event}":`, error);
1500
- }
1501
- });
1502
- }
1503
- if (this.typedEvents.listenerCount(event) > 0) {
1504
- this.typedEvents.emit(event, payload);
1564
+ return;
1505
1565
  }
1566
+ log7.debug(`Emitting event: ${event}`, payload);
1567
+ this.typedEvents.emit(event, payload);
1506
1568
  }
1507
1569
  on(event, handler) {
1508
- if (!this.legacyEventBus.has(event)) {
1509
- this.legacyEventBus.set(event, new Set);
1510
- }
1511
- const handlers = this.legacyEventBus.get(event);
1512
- handlers.add(handler);
1513
1570
  log7.debug(`Listening to event: ${event}`);
1514
- return () => {
1515
- handlers.delete(handler);
1516
- if (handlers.size === 0) {
1517
- this.legacyEventBus.delete(event);
1518
- }
1519
- };
1571
+ return this.typedEvents.on(event, handler);
1520
1572
  }
1521
1573
  off(event, handler) {
1522
- const handlers = this.legacyEventBus.get(event);
1523
- if (handlers) {
1524
- handlers.delete(handler);
1525
- if (handlers.size === 0) {
1526
- this.legacyEventBus.delete(event);
1527
- }
1528
- }
1574
+ this.typedEvents.off(event, handler);
1529
1575
  }
1530
1576
  clearEvent(event) {
1531
- this.legacyEventBus.delete(event);
1577
+ this.typedEvents.removeAllListeners(event);
1532
1578
  }
1533
1579
  clearAllEvents() {
1534
- this.legacyEventBus.clear();
1580
+ this.typedEvents.clearAll();
1535
1581
  }
1536
1582
  debug() {
1537
1583
  return {
1538
1584
  modules: this.getModuleIds(),
1539
- events: Array.from(this.legacyEventBus.keys()),
1540
- typedEvents: this.typedEvents.eventNames(),
1585
+ events: this.typedEvents.eventNames(),
1541
1586
  state: this.getGlobalState()
1542
1587
  };
1543
1588
  }
1544
1589
  }
1545
1590
 
1546
- // src/remote/client.ts
1547
- init_result();
1548
-
1549
1591
  // src/retry.ts
1550
- init_result();
1551
1592
  var DEFAULT_OPTIONS = {
1552
1593
  maxAttempts: 3,
1553
1594
  delayMs: 1000,
@@ -1611,6 +1652,17 @@ async function retry(fn, options = {}) {
1611
1652
  }
1612
1653
  throw lastError;
1613
1654
  }
1655
+ async function retryResult(fn, options = {}) {
1656
+ try {
1657
+ const value = await retry(fn, options);
1658
+ return Ok(value);
1659
+ } catch (e) {
1660
+ return Err(e instanceof Error ? e : new Error(String(e)));
1661
+ }
1662
+ }
1663
+ function withRetry(fn, options = {}) {
1664
+ return (...args) => retry(() => fn(...args), options);
1665
+ }
1614
1666
  var RetryConditions = {
1615
1667
  networkErrors: (error) => {
1616
1668
  const message = error.message.toLowerCase();
@@ -1662,7 +1714,6 @@ var RetryPresets = {
1662
1714
  };
1663
1715
 
1664
1716
  // src/remote/client.ts
1665
- init_logger();
1666
1717
  var log8 = frameworkLoggers.remote;
1667
1718
 
1668
1719
  class RemoteEngine {
@@ -1928,11 +1979,6 @@ class RemoteEngine {
1928
1979
  }, this.options.reconnectInterval);
1929
1980
  }
1930
1981
  }
1931
-
1932
- // src/index.browser.ts
1933
- init_app();
1934
- init_state();
1935
- init_logger();
1936
1982
  export {
1937
1983
  setLogLevel,
1938
1984
  setDebugMode,
@@ -1970,4 +2016,4 @@ export {
1970
2016
  BaseRenderer
1971
2017
  };
1972
2018
 
1973
- //# debugId=36DBB2A8D0751B8C64756E2164756E21
2019
+ //# debugId=CACC8D4DBEFB403264756E2164756E21