@hypen-space/core 0.3.12 → 0.4.1

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 (47) hide show
  1. package/dist/app.js +7 -3
  2. package/dist/app.js.map +3 -3
  3. package/dist/components/builtin.js +7 -3
  4. package/dist/components/builtin.js.map +3 -3
  5. package/dist/discovery.js +8 -7
  6. package/dist/discovery.js.map +4 -4
  7. package/dist/engine.browser.js.map +2 -2
  8. package/dist/engine.js +3 -7
  9. package/dist/engine.js.map +3 -3
  10. package/dist/index.browser.js +242 -371
  11. package/dist/index.browser.js.map +8 -9
  12. package/dist/index.js +546 -656
  13. package/dist/index.js.map +12 -13
  14. package/dist/remote/client.js.map +1 -1
  15. package/dist/remote/index.js +336 -336
  16. package/dist/remote/index.js.map +8 -8
  17. package/dist/remote/server.js +219 -219
  18. package/dist/remote/server.js.map +7 -7
  19. package/dist/renderer.js.map +1 -1
  20. package/dist/resolver.js +31 -4
  21. package/dist/resolver.js.map +3 -3
  22. package/package.json +13 -1
  23. package/src/app.ts +14 -2
  24. package/src/discovery.ts +15 -12
  25. package/src/engine.browser.ts +4 -32
  26. package/src/engine.ts +8 -44
  27. package/src/index.browser.ts +6 -4
  28. package/src/index.ts +22 -30
  29. package/src/managed-router.ts +195 -0
  30. package/src/module-registry.ts +76 -0
  31. package/src/remote/client.ts +1 -1
  32. package/src/remote/index.ts +2 -2
  33. package/src/remote/server.ts +1 -1
  34. package/src/remote/types.ts +1 -1
  35. package/src/renderer.ts +6 -2
  36. package/src/resolver.ts +56 -9
  37. package/src/types.ts +38 -0
  38. package/wasm-browser/README.md +7 -1
  39. package/wasm-browser/hypen_engine.d.ts +1 -0
  40. package/wasm-browser/hypen_engine.js +1 -0
  41. package/wasm-browser/hypen_engine_bg.wasm +0 -0
  42. package/wasm-browser/package.json +1 -1
  43. package/wasm-node/README.md +7 -1
  44. package/wasm-node/hypen_engine.d.ts +1 -0
  45. package/wasm-node/hypen_engine.js +1 -0
  46. package/wasm-node/hypen_engine_bg.wasm +0 -0
  47. package/wasm-node/package.json +1 -1
@@ -27,205 +27,6 @@ var __export = (target, all) => {
27
27
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
28
28
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
29
29
 
30
- // src/logger.ts
31
- function isProduction() {
32
- if (typeof process !== "undefined" && process.env) {
33
- return false;
34
- }
35
- return false;
36
- }
37
- function setLogLevel(level) {
38
- config.level = level;
39
- }
40
- function getLogLevel() {
41
- return config.level;
42
- }
43
- function configureLogger(options) {
44
- config = { ...config, ...options };
45
- }
46
- function enableLogging() {
47
- config.level = "debug";
48
- }
49
- function disableLogging() {
50
- config.level = "none";
51
- }
52
- function setDebugMode(enabled) {
53
- config.level = enabled ? "debug" : "error";
54
- }
55
- function isDebugMode() {
56
- return config.level === "debug";
57
- }
58
- function shouldLog(level) {
59
- return LOG_LEVEL_ORDER[level] >= LOG_LEVEL_ORDER[config.level];
60
- }
61
- function formatTag(tag, level) {
62
- const timestamp = config.timestamps ? `${new Date().toISOString()} ` : "";
63
- if (config.colors && level !== "none") {
64
- const color = LOG_LEVEL_COLORS[level];
65
- return `${timestamp}${color}[${tag}]${RESET_COLOR}`;
66
- }
67
- return `${timestamp}[${tag}]`;
68
- }
69
-
70
- class Logger {
71
- tag;
72
- constructor(tag) {
73
- this.tag = tag;
74
- }
75
- debug(...args) {
76
- if (!shouldLog("debug"))
77
- return;
78
- if (config.handler) {
79
- config.handler.debug(this.tag, ...args);
80
- } else {
81
- console.log(formatTag(this.tag, "debug"), ...args);
82
- }
83
- }
84
- info(...args) {
85
- if (!shouldLog("info"))
86
- return;
87
- if (config.handler) {
88
- config.handler.info(this.tag, ...args);
89
- } else {
90
- console.info(formatTag(this.tag, "info"), ...args);
91
- }
92
- }
93
- warn(...args) {
94
- if (!shouldLog("warn"))
95
- return;
96
- if (config.handler) {
97
- config.handler.warn(this.tag, ...args);
98
- } else {
99
- console.warn(formatTag(this.tag, "warn"), ...args);
100
- }
101
- }
102
- error(...args) {
103
- if (!shouldLog("error"))
104
- return;
105
- if (config.handler) {
106
- config.handler.error(this.tag, ...args);
107
- } else {
108
- console.error(formatTag(this.tag, "error"), ...args);
109
- }
110
- }
111
- time(label, fn) {
112
- if (!shouldLog("debug")) {
113
- return fn();
114
- }
115
- const start = performance.now();
116
- try {
117
- return fn();
118
- } finally {
119
- const duration = performance.now() - start;
120
- this.debug(`${label}: ${duration.toFixed(2)}ms`);
121
- }
122
- }
123
- async timeAsync(label, fn) {
124
- if (!shouldLog("debug")) {
125
- return fn();
126
- }
127
- const start = performance.now();
128
- try {
129
- return await fn();
130
- } finally {
131
- const duration = performance.now() - start;
132
- this.debug(`${label}: ${duration.toFixed(2)}ms`);
133
- }
134
- }
135
- child(subTag) {
136
- return new Logger(`${this.tag}:${subTag}`);
137
- }
138
- debugIf(condition, ...args) {
139
- if (condition)
140
- this.debug(...args);
141
- }
142
- warnIf(condition, ...args) {
143
- if (condition)
144
- this.warn(...args);
145
- }
146
- errorIf(condition, ...args) {
147
- if (condition)
148
- this.error(...args);
149
- }
150
- loggedOnce = new Set;
151
- warnOnce(key, ...args) {
152
- if (this.loggedOnce.has(key))
153
- return;
154
- this.loggedOnce.add(key);
155
- this.warn(...args);
156
- }
157
- debugOnce(key, ...args) {
158
- if (this.loggedOnce.has(key))
159
- return;
160
- this.loggedOnce.add(key);
161
- this.debug(...args);
162
- }
163
- }
164
- function createLogger(tag) {
165
- return new Logger(tag);
166
- }
167
- var LOG_LEVEL_ORDER, LOG_LEVEL_COLORS, RESET_COLOR = "\x1B[0m", config, logger, log, frameworkLoggers;
168
- var init_logger = __esm(() => {
169
- LOG_LEVEL_ORDER = {
170
- debug: 0,
171
- info: 1,
172
- warn: 2,
173
- error: 3,
174
- none: 4
175
- };
176
- LOG_LEVEL_COLORS = {
177
- debug: "\x1B[36m",
178
- info: "\x1B[32m",
179
- warn: "\x1B[33m",
180
- error: "\x1B[31m"
181
- };
182
- config = {
183
- level: isProduction() ? "error" : "debug",
184
- colors: true,
185
- timestamps: false
186
- };
187
- logger = createLogger("Hypen");
188
- log = {
189
- debug: (tag, ...args) => {
190
- if (!shouldLog("debug"))
191
- return;
192
- console.log(formatTag(tag, "debug"), ...args);
193
- },
194
- info: (tag, ...args) => {
195
- if (!shouldLog("info"))
196
- return;
197
- console.info(formatTag(tag, "info"), ...args);
198
- },
199
- warn: (tag, ...args) => {
200
- if (!shouldLog("warn"))
201
- return;
202
- console.warn(formatTag(tag, "warn"), ...args);
203
- },
204
- error: (tag, ...args) => {
205
- if (!shouldLog("error"))
206
- return;
207
- console.error(formatTag(tag, "error"), ...args);
208
- }
209
- };
210
- frameworkLoggers = {
211
- hypen: createLogger("Hypen"),
212
- engine: createLogger("Engine"),
213
- router: createLogger("Router"),
214
- state: createLogger("State"),
215
- events: createLogger("Events"),
216
- remote: createLogger("Remote"),
217
- renderer: createLogger("Renderer"),
218
- module: createLogger("Module"),
219
- lifecycle: createLogger("Lifecycle"),
220
- loader: createLogger("Loader"),
221
- context: createLogger("Context"),
222
- discovery: createLogger("Discovery"),
223
- plugin: createLogger("Plugin"),
224
- canvas: createLogger("Canvas"),
225
- debug: createLogger("Debug")
226
- };
227
- });
228
-
229
30
  // src/state.ts
230
31
  function deepClone(obj) {
231
32
  if (obj === null || typeof obj !== "object") {
@@ -612,6 +413,205 @@ var init_result = __esm(() => {
612
413
  };
613
414
  });
614
415
 
416
+ // src/logger.ts
417
+ function isProduction() {
418
+ if (typeof process !== "undefined" && process.env) {
419
+ return false;
420
+ }
421
+ return false;
422
+ }
423
+ function setLogLevel(level) {
424
+ config.level = level;
425
+ }
426
+ function getLogLevel() {
427
+ return config.level;
428
+ }
429
+ function configureLogger(options) {
430
+ config = { ...config, ...options };
431
+ }
432
+ function enableLogging() {
433
+ config.level = "debug";
434
+ }
435
+ function disableLogging() {
436
+ config.level = "none";
437
+ }
438
+ function setDebugMode(enabled) {
439
+ config.level = enabled ? "debug" : "error";
440
+ }
441
+ function isDebugMode() {
442
+ return config.level === "debug";
443
+ }
444
+ function shouldLog(level) {
445
+ return LOG_LEVEL_ORDER[level] >= LOG_LEVEL_ORDER[config.level];
446
+ }
447
+ function formatTag(tag, level) {
448
+ const timestamp = config.timestamps ? `${new Date().toISOString()} ` : "";
449
+ if (config.colors && level !== "none") {
450
+ const color = LOG_LEVEL_COLORS[level];
451
+ return `${timestamp}${color}[${tag}]${RESET_COLOR}`;
452
+ }
453
+ return `${timestamp}[${tag}]`;
454
+ }
455
+
456
+ class Logger {
457
+ tag;
458
+ constructor(tag) {
459
+ this.tag = tag;
460
+ }
461
+ debug(...args) {
462
+ if (!shouldLog("debug"))
463
+ return;
464
+ if (config.handler) {
465
+ config.handler.debug(this.tag, ...args);
466
+ } else {
467
+ console.log(formatTag(this.tag, "debug"), ...args);
468
+ }
469
+ }
470
+ info(...args) {
471
+ if (!shouldLog("info"))
472
+ return;
473
+ if (config.handler) {
474
+ config.handler.info(this.tag, ...args);
475
+ } else {
476
+ console.info(formatTag(this.tag, "info"), ...args);
477
+ }
478
+ }
479
+ warn(...args) {
480
+ if (!shouldLog("warn"))
481
+ return;
482
+ if (config.handler) {
483
+ config.handler.warn(this.tag, ...args);
484
+ } else {
485
+ console.warn(formatTag(this.tag, "warn"), ...args);
486
+ }
487
+ }
488
+ error(...args) {
489
+ if (!shouldLog("error"))
490
+ return;
491
+ if (config.handler) {
492
+ config.handler.error(this.tag, ...args);
493
+ } else {
494
+ console.error(formatTag(this.tag, "error"), ...args);
495
+ }
496
+ }
497
+ time(label, fn) {
498
+ if (!shouldLog("debug")) {
499
+ return fn();
500
+ }
501
+ const start = performance.now();
502
+ try {
503
+ return fn();
504
+ } finally {
505
+ const duration = performance.now() - start;
506
+ this.debug(`${label}: ${duration.toFixed(2)}ms`);
507
+ }
508
+ }
509
+ async timeAsync(label, fn) {
510
+ if (!shouldLog("debug")) {
511
+ return fn();
512
+ }
513
+ const start = performance.now();
514
+ try {
515
+ return await fn();
516
+ } finally {
517
+ const duration = performance.now() - start;
518
+ this.debug(`${label}: ${duration.toFixed(2)}ms`);
519
+ }
520
+ }
521
+ child(subTag) {
522
+ return new Logger(`${this.tag}:${subTag}`);
523
+ }
524
+ debugIf(condition, ...args) {
525
+ if (condition)
526
+ this.debug(...args);
527
+ }
528
+ warnIf(condition, ...args) {
529
+ if (condition)
530
+ this.warn(...args);
531
+ }
532
+ errorIf(condition, ...args) {
533
+ if (condition)
534
+ this.error(...args);
535
+ }
536
+ loggedOnce = new Set;
537
+ warnOnce(key, ...args) {
538
+ if (this.loggedOnce.has(key))
539
+ return;
540
+ this.loggedOnce.add(key);
541
+ this.warn(...args);
542
+ }
543
+ debugOnce(key, ...args) {
544
+ if (this.loggedOnce.has(key))
545
+ return;
546
+ this.loggedOnce.add(key);
547
+ this.debug(...args);
548
+ }
549
+ }
550
+ function createLogger(tag) {
551
+ return new Logger(tag);
552
+ }
553
+ var LOG_LEVEL_ORDER, LOG_LEVEL_COLORS, RESET_COLOR = "\x1B[0m", config, logger, log, frameworkLoggers;
554
+ var init_logger = __esm(() => {
555
+ LOG_LEVEL_ORDER = {
556
+ debug: 0,
557
+ info: 1,
558
+ warn: 2,
559
+ error: 3,
560
+ none: 4
561
+ };
562
+ LOG_LEVEL_COLORS = {
563
+ debug: "\x1B[36m",
564
+ info: "\x1B[32m",
565
+ warn: "\x1B[33m",
566
+ error: "\x1B[31m"
567
+ };
568
+ config = {
569
+ level: isProduction() ? "error" : "debug",
570
+ colors: true,
571
+ timestamps: false
572
+ };
573
+ logger = createLogger("Hypen");
574
+ log = {
575
+ debug: (tag, ...args) => {
576
+ if (!shouldLog("debug"))
577
+ return;
578
+ console.log(formatTag(tag, "debug"), ...args);
579
+ },
580
+ info: (tag, ...args) => {
581
+ if (!shouldLog("info"))
582
+ return;
583
+ console.info(formatTag(tag, "info"), ...args);
584
+ },
585
+ warn: (tag, ...args) => {
586
+ if (!shouldLog("warn"))
587
+ return;
588
+ console.warn(formatTag(tag, "warn"), ...args);
589
+ },
590
+ error: (tag, ...args) => {
591
+ if (!shouldLog("error"))
592
+ return;
593
+ console.error(formatTag(tag, "error"), ...args);
594
+ }
595
+ };
596
+ frameworkLoggers = {
597
+ hypen: createLogger("Hypen"),
598
+ engine: createLogger("Engine"),
599
+ router: createLogger("Router"),
600
+ state: createLogger("State"),
601
+ events: createLogger("Events"),
602
+ remote: createLogger("Remote"),
603
+ renderer: createLogger("Renderer"),
604
+ module: createLogger("Module"),
605
+ lifecycle: createLogger("Lifecycle"),
606
+ loader: createLogger("Loader"),
607
+ context: createLogger("Context"),
608
+ discovery: createLogger("Discovery"),
609
+ plugin: createLogger("Plugin"),
610
+ canvas: createLogger("Canvas"),
611
+ debug: createLogger("Debug")
612
+ };
613
+ });
614
+
615
615
  // src/app.ts
616
616
  var exports_app = {};
617
617
  __export(exports_app, {
@@ -710,17 +710,21 @@ class HypenModuleInstance {
710
710
  this.definition = definition;
711
711
  this.routerContext = routerContext;
712
712
  this.globalContext = globalContext;
713
+ const statePrefix = (definition.name || "").toLowerCase();
713
714
  this.state = createObservableState(definition.initialState, {
714
715
  onChange: (change) => {
715
716
  this.engine.notifyStateChange(change.paths, change.newValues);
716
717
  this.stateChangeCallbacks.forEach((cb) => cb());
717
- }
718
+ },
719
+ pathPrefix: statePrefix || undefined
718
720
  });
719
- this.engine.setModule(definition.name || "AnonymousModule", definition.actions, definition.stateKeys, getStateSnapshot(this.state));
721
+ const snapshot = getStateSnapshot(this.state);
722
+ const prefixedState = statePrefix ? { [statePrefix]: snapshot } : snapshot;
723
+ this.engine.setModule(definition.name || "AnonymousModule", definition.actions, definition.stateKeys, prefixedState);
720
724
  for (const [actionName, handler] of definition.handlers.onAction) {
721
- log3.debug(`Registering action handler: ${actionName} for module ${definition.name}`);
725
+ log2.debug(`Registering action handler: ${actionName} for module ${definition.name}`);
722
726
  this.engine.onAction(actionName, async (action) => {
723
- log3.debug(`Action handler fired: ${actionName}`, action);
727
+ log2.debug(`Action handler fired: ${actionName}`, action);
724
728
  const actionCtx = {
725
729
  name: action.name,
726
730
  payload: action.payload,
@@ -742,7 +746,7 @@ class HypenModuleInstance {
742
746
  throw result.error;
743
747
  }
744
748
  } else {
745
- log3.debug(`Action handler completed: ${actionName}`);
749
+ log2.debug(`Action handler completed: ${actionName}`);
746
750
  }
747
751
  });
748
752
  }
@@ -797,7 +801,7 @@ class HypenModuleInstance {
797
801
  }
798
802
  }
799
803
  } catch (handlerError) {
800
- log3.error("Error in onError handler:", handlerError);
804
+ log2.error("Error in onError handler:", handlerError);
801
805
  }
802
806
  }
803
807
  if (this.globalContext) {
@@ -808,7 +812,7 @@ class HypenModuleInstance {
808
812
  context: eventContext
809
813
  });
810
814
  }
811
- log3.error(`${context.actionName ? `Action "${context.actionName}"` : `Lifecycle "${context.lifecycle}"`} error:`, error);
815
+ log2.error(`${context.actionName ? `Action "${context.actionName}"` : `Lifecycle "${context.lifecycle}"`} error:`, error);
812
816
  return false;
813
817
  }
814
818
  async callCreatedHandler() {
@@ -838,150 +842,18 @@ class HypenModuleInstance {
838
842
  Object.assign(this.state, patch);
839
843
  }
840
844
  }
841
- var log3, app;
845
+ var log2, app;
842
846
  var init_app = __esm(() => {
843
847
  init_result();
844
848
  init_state();
845
849
  init_logger();
846
- log3 = createLogger("ModuleInstance");
850
+ log2 = createLogger("ModuleInstance");
847
851
  app = new HypenApp;
848
852
  });
849
853
 
850
- // src/engine.browser.ts
851
- init_logger();
852
- var log2 = frameworkLoggers.engine;
853
- var wasmInit = null;
854
- var WasmEngineClass = null;
855
- function mapToObject(value) {
856
- if (value instanceof Map) {
857
- const obj = {};
858
- for (const [key, val] of value.entries()) {
859
- obj[key] = mapToObject(val);
860
- }
861
- return obj;
862
- } else if (Array.isArray(value)) {
863
- return value.map(mapToObject);
864
- } else if (value && typeof value === "object" && value.constructor === Object) {
865
- const obj = {};
866
- for (const [key, val] of Object.entries(value)) {
867
- obj[key] = mapToObject(val);
868
- }
869
- return obj;
870
- }
871
- return value;
872
- }
873
-
874
- class Engine {
875
- wasmEngine = null;
876
- initialized = false;
877
- async init(options = {}) {
878
- if (this.initialized)
879
- return;
880
- const cdnBase = "https://unpkg.com/@hypen-space/core@latest/wasm-browser";
881
- const jsUrl = options.jsUrl ?? `${cdnBase}/hypen_engine.js`;
882
- const wasmUrl = options.wasmUrl ?? `${cdnBase}/hypen_engine_bg.wasm`;
883
- try {
884
- const wasmModule = await import(jsUrl);
885
- wasmInit = wasmModule.default;
886
- WasmEngineClass = wasmModule.WasmEngine;
887
- await wasmInit(wasmUrl);
888
- this.wasmEngine = new WasmEngineClass;
889
- this.initialized = true;
890
- } catch (error) {
891
- log2.error("Failed to initialize WASM engine:", error);
892
- throw error;
893
- }
894
- }
895
- ensureInitialized() {
896
- if (!this.wasmEngine) {
897
- throw new Error("Engine not initialized. Call init() first.");
898
- }
899
- return this.wasmEngine;
900
- }
901
- setRenderCallback(callback) {
902
- const engine = this.ensureInitialized();
903
- engine.setRenderCallback((patches) => {
904
- callback(patches);
905
- });
906
- }
907
- setComponentResolver(resolver) {
908
- const engine = this.ensureInitialized();
909
- engine.setComponentResolver((componentName, contextPath) => {
910
- const result = resolver(componentName, contextPath);
911
- return result;
912
- });
913
- }
914
- renderSource(source) {
915
- const engine = this.ensureInitialized();
916
- engine.renderSource(source);
917
- }
918
- renderLazyComponent(source) {
919
- const engine = this.ensureInitialized();
920
- engine.renderLazyComponent(source);
921
- }
922
- renderInto(source, parentNodeId, state) {
923
- const engine = this.ensureInitialized();
924
- const safeState = JSON.parse(JSON.stringify(state));
925
- engine.renderInto(source, parentNodeId, safeState);
926
- }
927
- notifyStateChange(paths, values) {
928
- const engine = this.ensureInitialized();
929
- if (paths.length === 0) {
930
- return;
931
- }
932
- const plainValues = JSON.parse(JSON.stringify(values));
933
- engine.updateStateSparse(paths, plainValues);
934
- log2.debug("State changed (sparse):", paths);
935
- }
936
- notifyStateChangeFull(paths, currentState) {
937
- const engine = this.ensureInitialized();
938
- const plainObject = JSON.parse(JSON.stringify(currentState));
939
- engine.updateState(plainObject);
940
- if (paths.length > 0) {
941
- log2.debug("State changed (full):", paths);
942
- }
943
- }
944
- updateState(statePatch) {
945
- const engine = this.ensureInitialized();
946
- const plainObject = JSON.parse(JSON.stringify(statePatch));
947
- engine.updateState(plainObject);
948
- }
949
- dispatchAction(name, payload) {
950
- const engine = this.ensureInitialized();
951
- log2.debug(`Action dispatched: ${name}`);
952
- engine.dispatchAction(name, payload ?? null);
953
- }
954
- onAction(actionName, handler) {
955
- const engine = this.ensureInitialized();
956
- engine.onAction(actionName, (action) => {
957
- const normalizedAction = {
958
- ...action,
959
- payload: action.payload ? mapToObject(action.payload) : action.payload
960
- };
961
- Promise.resolve(handler(normalizedAction)).catch((err) => log2.error("Action handler error:", err));
962
- });
963
- }
964
- setModule(name, actions, stateKeys, initialState) {
965
- const engine = this.ensureInitialized();
966
- engine.setModule(name, actions, stateKeys, initialState);
967
- }
968
- getRevision() {
969
- const engine = this.ensureInitialized();
970
- return engine.getRevision();
971
- }
972
- clearTree() {
973
- const engine = this.ensureInitialized();
974
- engine.clearTree();
975
- }
976
- debugParseComponent(source) {
977
- const engine = this.ensureInitialized();
978
- return engine.debugParseComponent(source);
979
- }
980
- }
981
-
982
854
  // src/renderer.ts
983
855
  init_logger();
984
- var log4 = frameworkLoggers.renderer;
856
+ var log3 = frameworkLoggers.renderer;
985
857
 
986
858
  class BaseRenderer {
987
859
  nodes = new Map;
@@ -1023,14 +895,14 @@ class BaseRenderer {
1023
895
 
1024
896
  class ConsoleRenderer {
1025
897
  applyPatches(patches) {
1026
- log4.debug("Patches:", patches);
898
+ log3.debug("Patches:", patches);
1027
899
  }
1028
900
  }
1029
901
 
1030
902
  // src/router.ts
1031
903
  init_state();
1032
904
  init_logger();
1033
- var log5 = frameworkLoggers.router;
905
+ var log4 = frameworkLoggers.router;
1034
906
 
1035
907
  class HypenRouter {
1036
908
  state;
@@ -1068,7 +940,7 @@ class HypenRouter {
1068
940
  this.updatePath(newPath, false);
1069
941
  });
1070
942
  this.isInitialized = true;
1071
- log5.debug("Router initialized at:", initialPath);
943
+ log4.debug("Router initialized at:", initialPath);
1072
944
  }
1073
945
  getPathFromBrowser() {
1074
946
  if (typeof window === "undefined")
@@ -1089,21 +961,21 @@ class HypenRouter {
1089
961
  return query;
1090
962
  }
1091
963
  push(path) {
1092
- log5.debug("push:", path);
964
+ log4.debug("push:", path);
1093
965
  this.updatePath(path, true);
1094
966
  }
1095
967
  replace(path) {
1096
- log5.debug("replace:", path);
968
+ log4.debug("replace:", path);
1097
969
  this.updatePath(path, true, true);
1098
970
  }
1099
971
  back() {
1100
- log5.debug("back");
972
+ log4.debug("back");
1101
973
  if (typeof window !== "undefined") {
1102
974
  window.history.back();
1103
975
  }
1104
976
  }
1105
977
  forward() {
1106
- log5.debug("forward");
978
+ log4.debug("forward");
1107
979
  if (typeof window !== "undefined") {
1108
980
  window.history.forward();
1109
981
  }
@@ -1199,7 +1071,7 @@ class HypenRouter {
1199
1071
  try {
1200
1072
  callback(this.getState());
1201
1073
  } catch (error) {
1202
- log5.error("Error in route subscriber:", error);
1074
+ log4.error("Error in route subscriber:", error);
1203
1075
  }
1204
1076
  return () => {
1205
1077
  this.subscribers.delete(callback);
@@ -1211,7 +1083,7 @@ class HypenRouter {
1211
1083
  try {
1212
1084
  callback(routeState);
1213
1085
  } catch (error) {
1214
- log5.error("Error in route subscriber:", error);
1086
+ log4.error("Error in route subscriber:", error);
1215
1087
  }
1216
1088
  });
1217
1089
  }
@@ -1229,7 +1101,7 @@ class HypenRouter {
1229
1101
 
1230
1102
  // src/events.ts
1231
1103
  init_logger();
1232
- var log6 = frameworkLoggers.events;
1104
+ var log5 = frameworkLoggers.events;
1233
1105
 
1234
1106
  class TypedEventEmitter {
1235
1107
  eventBus = new Map;
@@ -1242,7 +1114,7 @@ class TypedEventEmitter {
1242
1114
  try {
1243
1115
  handler(payload);
1244
1116
  } catch (error) {
1245
- log6.error(`Error in event handler for "${String(event)}":`, error);
1117
+ log5.error(`Error in event handler for "${String(event)}":`, error);
1246
1118
  }
1247
1119
  });
1248
1120
  }
@@ -1295,7 +1167,7 @@ function createEventEmitter() {
1295
1167
 
1296
1168
  // src/context.ts
1297
1169
  init_logger();
1298
- var log7 = frameworkLoggers.context;
1170
+ var log6 = frameworkLoggers.context;
1299
1171
 
1300
1172
  class HypenGlobalContext {
1301
1173
  modules = new Map;
@@ -1309,14 +1181,14 @@ class HypenGlobalContext {
1309
1181
  }
1310
1182
  registerModule(id, instance) {
1311
1183
  if (this.modules.has(id)) {
1312
- log7.warn(`Module "${id}" is already registered. Overwriting.`);
1184
+ log6.warn(`Module "${id}" is already registered. Overwriting.`);
1313
1185
  }
1314
1186
  this.modules.set(id, instance);
1315
- log7.debug(`Registered module: ${id}`);
1187
+ log6.debug(`Registered module: ${id}`);
1316
1188
  }
1317
1189
  unregisterModule(id) {
1318
1190
  this.modules.delete(id);
1319
- log7.debug(`Unregistered module: ${id}`);
1191
+ log6.debug(`Unregistered module: ${id}`);
1320
1192
  }
1321
1193
  getModule(id) {
1322
1194
  const module = this.modules.get(id);
@@ -1345,14 +1217,14 @@ class HypenGlobalContext {
1345
1217
  emit(event, payload) {
1346
1218
  const handlers = this.legacyEventBus.get(event);
1347
1219
  if (!handlers || handlers.size === 0) {
1348
- log7.debug(`Event "${event}" emitted but no listeners`);
1220
+ log6.debug(`Event "${event}" emitted but no listeners`);
1349
1221
  } else {
1350
- log7.debug(`Emitting event: ${event}`, payload);
1222
+ log6.debug(`Emitting event: ${event}`, payload);
1351
1223
  handlers.forEach((handler) => {
1352
1224
  try {
1353
1225
  handler(payload);
1354
1226
  } catch (error) {
1355
- log7.error(`Error in event handler for "${event}":`, error);
1227
+ log6.error(`Error in event handler for "${event}":`, error);
1356
1228
  }
1357
1229
  });
1358
1230
  }
@@ -1366,7 +1238,7 @@ class HypenGlobalContext {
1366
1238
  }
1367
1239
  const handlers = this.legacyEventBus.get(event);
1368
1240
  handlers.add(handler);
1369
- log7.debug(`Listening to event: ${event}`);
1241
+ log6.debug(`Listening to event: ${event}`);
1370
1242
  return () => {
1371
1243
  handlers.delete(handler);
1372
1244
  if (handlers.size === 0) {
@@ -1401,7 +1273,7 @@ class HypenGlobalContext {
1401
1273
 
1402
1274
  // src/disposable.ts
1403
1275
  init_logger();
1404
- var log8 = frameworkLoggers.lifecycle;
1276
+ var log7 = frameworkLoggers.lifecycle;
1405
1277
  function isDisposable(obj) {
1406
1278
  return obj !== null && typeof obj === "object" && "dispose" in obj && typeof obj.dispose === "function";
1407
1279
  }
@@ -1433,7 +1305,7 @@ class DisposableStack {
1433
1305
  try {
1434
1306
  item.dispose();
1435
1307
  } catch (error) {
1436
- log8.error("Error during dispose:", error);
1308
+ log7.error("Error during dispose:", error);
1437
1309
  }
1438
1310
  }
1439
1311
  }
@@ -1524,7 +1396,7 @@ function compositeDisposable(...disposables) {
1524
1396
  try {
1525
1397
  d.dispose();
1526
1398
  } catch (error) {
1527
- log8.error("Error during dispose:", error);
1399
+ log7.error("Error during dispose:", error);
1528
1400
  }
1529
1401
  }
1530
1402
  }
@@ -1678,7 +1550,7 @@ var RetryPresets = {
1678
1550
 
1679
1551
  // src/remote/client.ts
1680
1552
  init_logger();
1681
- var log9 = frameworkLoggers.remote;
1553
+ var log8 = frameworkLoggers.remote;
1682
1554
 
1683
1555
  class RemoteEngine {
1684
1556
  ws = null;
@@ -1786,7 +1658,7 @@ class RemoteEngine {
1786
1658
  }
1787
1659
  dispatchAction(action, payload) {
1788
1660
  if (this.state !== "connected" || !this.ws) {
1789
- log9.warn("Cannot dispatch action: not connected");
1661
+ log8.warn("Cannot dispatch action: not connected");
1790
1662
  return;
1791
1663
  }
1792
1664
  const message = {
@@ -1859,7 +1731,7 @@ class RemoteEngine {
1859
1731
  break;
1860
1732
  }
1861
1733
  } catch (e) {
1862
- log9.error("Error handling remote message:", e);
1734
+ log8.error("Error handling remote message:", e);
1863
1735
  const error = e instanceof Error ? e : new Error(String(e));
1864
1736
  this.errorCallbacks.forEach((cb) => cb(error));
1865
1737
  }
@@ -1888,7 +1760,7 @@ class RemoteEngine {
1888
1760
  }
1889
1761
  handlePatch(message) {
1890
1762
  if (message.revision <= this.currentRevision) {
1891
- log9.warn(`Out of order patch: expected > ${this.currentRevision}, got ${message.revision}`);
1763
+ log8.warn(`Out of order patch: expected > ${this.currentRevision}, got ${message.revision}`);
1892
1764
  return;
1893
1765
  }
1894
1766
  this.currentRevision = message.revision;
@@ -1914,10 +1786,10 @@ class RemoteEngine {
1914
1786
  maxDelayMs: 30000,
1915
1787
  jitter: 0.1,
1916
1788
  onRetry: (attempt, error) => {
1917
- log9.debug(`Reconnection attempt ${attempt}/${this.options.maxReconnectAttempts} failed: ${error.message}`);
1789
+ log8.debug(`Reconnection attempt ${attempt}/${this.options.maxReconnectAttempts} failed: ${error.message}`);
1918
1790
  }
1919
1791
  }).catch((error) => {
1920
- log9.error("Max reconnection attempts reached:", error.message);
1792
+ log8.error("Max reconnection attempts reached:", error.message);
1921
1793
  this.errorCallbacks.forEach((cb) => cb(new ConnectionError(this.url, error, this.options.maxReconnectAttempts)));
1922
1794
  });
1923
1795
  }, this.options.reconnectInterval);
@@ -1960,10 +1832,9 @@ export {
1960
1832
  HypenGlobalContext,
1961
1833
  HypenAppBuilder,
1962
1834
  HypenApp,
1963
- Engine,
1964
1835
  DisposableStack,
1965
1836
  ConsoleRenderer,
1966
1837
  BaseRenderer
1967
1838
  };
1968
1839
 
1969
- //# debugId=2D575FE288E2201A64756E2164756E21
1840
+ //# debugId=98631CC049082F4164756E2164756E21