@hypen-space/core 0.3.11 → 0.4.0

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 (64) hide show
  1. package/dist/app.js +24 -3
  2. package/dist/app.js.map +3 -3
  3. package/dist/components/builtin.js +24 -3
  4. package/dist/components/builtin.js.map +3 -3
  5. package/dist/context.js +18 -1
  6. package/dist/context.js.map +2 -2
  7. package/dist/discovery.js +25 -7
  8. package/dist/discovery.js.map +4 -4
  9. package/dist/disposable.js +18 -1
  10. package/dist/disposable.js.map +2 -2
  11. package/dist/engine.browser.js +18 -1
  12. package/dist/engine.browser.js.map +3 -3
  13. package/dist/engine.js +18 -1
  14. package/dist/engine.js.map +3 -3
  15. package/dist/events.js +18 -1
  16. package/dist/events.js.map +2 -2
  17. package/dist/index.browser.js +259 -371
  18. package/dist/index.browser.js.map +8 -9
  19. package/dist/index.js +558 -647
  20. package/dist/index.js.map +12 -13
  21. package/dist/loader.js +18 -1
  22. package/dist/loader.js.map +2 -2
  23. package/dist/plugin.js +18 -1
  24. package/dist/plugin.js.map +2 -2
  25. package/dist/remote/client.js +18 -1
  26. package/dist/remote/client.js.map +3 -3
  27. package/dist/remote/index.js +353 -332
  28. package/dist/remote/index.js.map +8 -8
  29. package/dist/remote/server.js +234 -213
  30. package/dist/remote/server.js.map +7 -7
  31. package/dist/renderer.js +18 -1
  32. package/dist/renderer.js.map +3 -3
  33. package/dist/resolver.js +48 -4
  34. package/dist/resolver.js.map +3 -3
  35. package/dist/router.js +18 -1
  36. package/dist/router.js.map +2 -2
  37. package/dist/state.js +18 -1
  38. package/dist/state.js.map +2 -2
  39. package/package.json +7 -1
  40. package/src/app.ts +14 -2
  41. package/src/discovery.ts +3 -1
  42. package/src/engine.browser.ts +4 -32
  43. package/src/engine.ts +4 -32
  44. package/src/index.browser.ts +6 -4
  45. package/src/index.ts +6 -6
  46. package/src/managed-router.ts +195 -0
  47. package/src/module-registry.ts +76 -0
  48. package/src/remote/client.ts +1 -1
  49. package/src/remote/index.ts +2 -2
  50. package/src/remote/server.ts +1 -1
  51. package/src/remote/types.ts +1 -1
  52. package/src/renderer.ts +1 -1
  53. package/src/resolver.ts +56 -9
  54. package/src/types.ts +38 -0
  55. package/wasm-browser/README.md +7 -1
  56. package/wasm-browser/hypen_engine.d.ts +1 -0
  57. package/wasm-browser/hypen_engine.js +1 -0
  58. package/wasm-browser/hypen_engine_bg.wasm +0 -0
  59. package/wasm-browser/package.json +1 -1
  60. package/wasm-node/README.md +7 -1
  61. package/wasm-node/hypen_engine.d.ts +1 -0
  62. package/wasm-node/hypen_engine.js +1 -0
  63. package/wasm-node/hypen_engine_bg.wasm +0 -0
  64. package/wasm-node/package.json +1 -1
@@ -1,4 +1,20 @@
1
+ import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
1
4
  var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
2
18
  var __export = (target, all) => {
3
19
  for (var name in all)
4
20
  __defProp(target, name, {
@@ -9,205 +25,7 @@ var __export = (target, all) => {
9
25
  });
10
26
  };
11
27
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
12
-
13
- // src/logger.ts
14
- function isProduction() {
15
- if (typeof process !== "undefined" && process.env) {
16
- return false;
17
- }
18
- return false;
19
- }
20
- function setLogLevel(level) {
21
- config.level = level;
22
- }
23
- function getLogLevel() {
24
- return config.level;
25
- }
26
- function configureLogger(options) {
27
- config = { ...config, ...options };
28
- }
29
- function enableLogging() {
30
- config.level = "debug";
31
- }
32
- function disableLogging() {
33
- config.level = "none";
34
- }
35
- function setDebugMode(enabled) {
36
- config.level = enabled ? "debug" : "error";
37
- }
38
- function isDebugMode() {
39
- return config.level === "debug";
40
- }
41
- function shouldLog(level) {
42
- return LOG_LEVEL_ORDER[level] >= LOG_LEVEL_ORDER[config.level];
43
- }
44
- function formatTag(tag, level) {
45
- const timestamp = config.timestamps ? `${new Date().toISOString()} ` : "";
46
- if (config.colors && level !== "none") {
47
- const color = LOG_LEVEL_COLORS[level];
48
- return `${timestamp}${color}[${tag}]${RESET_COLOR}`;
49
- }
50
- return `${timestamp}[${tag}]`;
51
- }
52
-
53
- class Logger {
54
- tag;
55
- constructor(tag) {
56
- this.tag = tag;
57
- }
58
- debug(...args) {
59
- if (!shouldLog("debug"))
60
- return;
61
- if (config.handler) {
62
- config.handler.debug(this.tag, ...args);
63
- } else {
64
- console.log(formatTag(this.tag, "debug"), ...args);
65
- }
66
- }
67
- info(...args) {
68
- if (!shouldLog("info"))
69
- return;
70
- if (config.handler) {
71
- config.handler.info(this.tag, ...args);
72
- } else {
73
- console.info(formatTag(this.tag, "info"), ...args);
74
- }
75
- }
76
- warn(...args) {
77
- if (!shouldLog("warn"))
78
- return;
79
- if (config.handler) {
80
- config.handler.warn(this.tag, ...args);
81
- } else {
82
- console.warn(formatTag(this.tag, "warn"), ...args);
83
- }
84
- }
85
- error(...args) {
86
- if (!shouldLog("error"))
87
- return;
88
- if (config.handler) {
89
- config.handler.error(this.tag, ...args);
90
- } else {
91
- console.error(formatTag(this.tag, "error"), ...args);
92
- }
93
- }
94
- time(label, fn) {
95
- if (!shouldLog("debug")) {
96
- return fn();
97
- }
98
- const start = performance.now();
99
- try {
100
- return fn();
101
- } finally {
102
- const duration = performance.now() - start;
103
- this.debug(`${label}: ${duration.toFixed(2)}ms`);
104
- }
105
- }
106
- async timeAsync(label, fn) {
107
- if (!shouldLog("debug")) {
108
- return fn();
109
- }
110
- const start = performance.now();
111
- try {
112
- return await fn();
113
- } finally {
114
- const duration = performance.now() - start;
115
- this.debug(`${label}: ${duration.toFixed(2)}ms`);
116
- }
117
- }
118
- child(subTag) {
119
- return new Logger(`${this.tag}:${subTag}`);
120
- }
121
- debugIf(condition, ...args) {
122
- if (condition)
123
- this.debug(...args);
124
- }
125
- warnIf(condition, ...args) {
126
- if (condition)
127
- this.warn(...args);
128
- }
129
- errorIf(condition, ...args) {
130
- if (condition)
131
- this.error(...args);
132
- }
133
- loggedOnce = new Set;
134
- warnOnce(key, ...args) {
135
- if (this.loggedOnce.has(key))
136
- return;
137
- this.loggedOnce.add(key);
138
- this.warn(...args);
139
- }
140
- debugOnce(key, ...args) {
141
- if (this.loggedOnce.has(key))
142
- return;
143
- this.loggedOnce.add(key);
144
- this.debug(...args);
145
- }
146
- }
147
- function createLogger(tag) {
148
- return new Logger(tag);
149
- }
150
- var LOG_LEVEL_ORDER, LOG_LEVEL_COLORS, RESET_COLOR = "\x1B[0m", config, logger, log, frameworkLoggers;
151
- var init_logger = __esm(() => {
152
- LOG_LEVEL_ORDER = {
153
- debug: 0,
154
- info: 1,
155
- warn: 2,
156
- error: 3,
157
- none: 4
158
- };
159
- LOG_LEVEL_COLORS = {
160
- debug: "\x1B[36m",
161
- info: "\x1B[32m",
162
- warn: "\x1B[33m",
163
- error: "\x1B[31m"
164
- };
165
- config = {
166
- level: isProduction() ? "error" : "debug",
167
- colors: true,
168
- timestamps: false
169
- };
170
- logger = createLogger("Hypen");
171
- log = {
172
- debug: (tag, ...args) => {
173
- if (!shouldLog("debug"))
174
- return;
175
- console.log(formatTag(tag, "debug"), ...args);
176
- },
177
- info: (tag, ...args) => {
178
- if (!shouldLog("info"))
179
- return;
180
- console.info(formatTag(tag, "info"), ...args);
181
- },
182
- warn: (tag, ...args) => {
183
- if (!shouldLog("warn"))
184
- return;
185
- console.warn(formatTag(tag, "warn"), ...args);
186
- },
187
- error: (tag, ...args) => {
188
- if (!shouldLog("error"))
189
- return;
190
- console.error(formatTag(tag, "error"), ...args);
191
- }
192
- };
193
- frameworkLoggers = {
194
- hypen: createLogger("Hypen"),
195
- engine: createLogger("Engine"),
196
- router: createLogger("Router"),
197
- state: createLogger("State"),
198
- events: createLogger("Events"),
199
- remote: createLogger("Remote"),
200
- renderer: createLogger("Renderer"),
201
- module: createLogger("Module"),
202
- lifecycle: createLogger("Lifecycle"),
203
- loader: createLogger("Loader"),
204
- context: createLogger("Context"),
205
- discovery: createLogger("Discovery"),
206
- plugin: createLogger("Plugin"),
207
- canvas: createLogger("Canvas"),
208
- debug: createLogger("Debug")
209
- };
210
- });
28
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
211
29
 
212
30
  // src/state.ts
213
31
  function deepClone(obj) {
@@ -595,6 +413,205 @@ var init_result = __esm(() => {
595
413
  };
596
414
  });
597
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
+
598
615
  // src/app.ts
599
616
  var exports_app = {};
600
617
  __export(exports_app, {
@@ -693,17 +710,21 @@ class HypenModuleInstance {
693
710
  this.definition = definition;
694
711
  this.routerContext = routerContext;
695
712
  this.globalContext = globalContext;
713
+ const statePrefix = (definition.name || "").toLowerCase();
696
714
  this.state = createObservableState(definition.initialState, {
697
715
  onChange: (change) => {
698
716
  this.engine.notifyStateChange(change.paths, change.newValues);
699
717
  this.stateChangeCallbacks.forEach((cb) => cb());
700
- }
718
+ },
719
+ pathPrefix: statePrefix || undefined
701
720
  });
702
- 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);
703
724
  for (const [actionName, handler] of definition.handlers.onAction) {
704
- log3.debug(`Registering action handler: ${actionName} for module ${definition.name}`);
725
+ log2.debug(`Registering action handler: ${actionName} for module ${definition.name}`);
705
726
  this.engine.onAction(actionName, async (action) => {
706
- log3.debug(`Action handler fired: ${actionName}`, action);
727
+ log2.debug(`Action handler fired: ${actionName}`, action);
707
728
  const actionCtx = {
708
729
  name: action.name,
709
730
  payload: action.payload,
@@ -725,7 +746,7 @@ class HypenModuleInstance {
725
746
  throw result.error;
726
747
  }
727
748
  } else {
728
- log3.debug(`Action handler completed: ${actionName}`);
749
+ log2.debug(`Action handler completed: ${actionName}`);
729
750
  }
730
751
  });
731
752
  }
@@ -780,7 +801,7 @@ class HypenModuleInstance {
780
801
  }
781
802
  }
782
803
  } catch (handlerError) {
783
- log3.error("Error in onError handler:", handlerError);
804
+ log2.error("Error in onError handler:", handlerError);
784
805
  }
785
806
  }
786
807
  if (this.globalContext) {
@@ -791,7 +812,7 @@ class HypenModuleInstance {
791
812
  context: eventContext
792
813
  });
793
814
  }
794
- 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);
795
816
  return false;
796
817
  }
797
818
  async callCreatedHandler() {
@@ -821,150 +842,18 @@ class HypenModuleInstance {
821
842
  Object.assign(this.state, patch);
822
843
  }
823
844
  }
824
- var log3, app;
845
+ var log2, app;
825
846
  var init_app = __esm(() => {
826
847
  init_result();
827
848
  init_state();
828
849
  init_logger();
829
- log3 = createLogger("ModuleInstance");
850
+ log2 = createLogger("ModuleInstance");
830
851
  app = new HypenApp;
831
852
  });
832
853
 
833
- // src/engine.browser.ts
834
- init_logger();
835
- var log2 = frameworkLoggers.engine;
836
- var wasmInit = null;
837
- var WasmEngineClass = null;
838
- function mapToObject(value) {
839
- if (value instanceof Map) {
840
- const obj = {};
841
- for (const [key, val] of value.entries()) {
842
- obj[key] = mapToObject(val);
843
- }
844
- return obj;
845
- } else if (Array.isArray(value)) {
846
- return value.map(mapToObject);
847
- } else if (value && typeof value === "object" && value.constructor === Object) {
848
- const obj = {};
849
- for (const [key, val] of Object.entries(value)) {
850
- obj[key] = mapToObject(val);
851
- }
852
- return obj;
853
- }
854
- return value;
855
- }
856
-
857
- class Engine {
858
- wasmEngine = null;
859
- initialized = false;
860
- async init(options = {}) {
861
- if (this.initialized)
862
- return;
863
- const cdnBase = "https://unpkg.com/@hypen-space/core@latest/wasm-browser";
864
- const jsUrl = options.jsUrl ?? `${cdnBase}/hypen_engine.js`;
865
- const wasmUrl = options.wasmUrl ?? `${cdnBase}/hypen_engine_bg.wasm`;
866
- try {
867
- const wasmModule = await import(jsUrl);
868
- wasmInit = wasmModule.default;
869
- WasmEngineClass = wasmModule.WasmEngine;
870
- await wasmInit(wasmUrl);
871
- this.wasmEngine = new WasmEngineClass;
872
- this.initialized = true;
873
- } catch (error) {
874
- log2.error("Failed to initialize WASM engine:", error);
875
- throw error;
876
- }
877
- }
878
- ensureInitialized() {
879
- if (!this.wasmEngine) {
880
- throw new Error("Engine not initialized. Call init() first.");
881
- }
882
- return this.wasmEngine;
883
- }
884
- setRenderCallback(callback) {
885
- const engine = this.ensureInitialized();
886
- engine.setRenderCallback((patches) => {
887
- callback(patches);
888
- });
889
- }
890
- setComponentResolver(resolver) {
891
- const engine = this.ensureInitialized();
892
- engine.setComponentResolver((componentName, contextPath) => {
893
- const result = resolver(componentName, contextPath);
894
- return result;
895
- });
896
- }
897
- renderSource(source) {
898
- const engine = this.ensureInitialized();
899
- engine.renderSource(source);
900
- }
901
- renderLazyComponent(source) {
902
- const engine = this.ensureInitialized();
903
- engine.renderLazyComponent(source);
904
- }
905
- renderInto(source, parentNodeId, state) {
906
- const engine = this.ensureInitialized();
907
- const safeState = JSON.parse(JSON.stringify(state));
908
- engine.renderInto(source, parentNodeId, safeState);
909
- }
910
- notifyStateChange(paths, values) {
911
- const engine = this.ensureInitialized();
912
- if (paths.length === 0) {
913
- return;
914
- }
915
- const plainValues = JSON.parse(JSON.stringify(values));
916
- engine.updateStateSparse(paths, plainValues);
917
- log2.debug("State changed (sparse):", paths);
918
- }
919
- notifyStateChangeFull(paths, currentState) {
920
- const engine = this.ensureInitialized();
921
- const plainObject = JSON.parse(JSON.stringify(currentState));
922
- engine.updateState(plainObject);
923
- if (paths.length > 0) {
924
- log2.debug("State changed (full):", paths);
925
- }
926
- }
927
- updateState(statePatch) {
928
- const engine = this.ensureInitialized();
929
- const plainObject = JSON.parse(JSON.stringify(statePatch));
930
- engine.updateState(plainObject);
931
- }
932
- dispatchAction(name, payload) {
933
- const engine = this.ensureInitialized();
934
- log2.debug(`Action dispatched: ${name}`);
935
- engine.dispatchAction(name, payload ?? null);
936
- }
937
- onAction(actionName, handler) {
938
- const engine = this.ensureInitialized();
939
- engine.onAction(actionName, (action) => {
940
- const normalizedAction = {
941
- ...action,
942
- payload: action.payload ? mapToObject(action.payload) : action.payload
943
- };
944
- Promise.resolve(handler(normalizedAction)).catch((err) => log2.error("Action handler error:", err));
945
- });
946
- }
947
- setModule(name, actions, stateKeys, initialState) {
948
- const engine = this.ensureInitialized();
949
- engine.setModule(name, actions, stateKeys, initialState);
950
- }
951
- getRevision() {
952
- const engine = this.ensureInitialized();
953
- return engine.getRevision();
954
- }
955
- clearTree() {
956
- const engine = this.ensureInitialized();
957
- engine.clearTree();
958
- }
959
- debugParseComponent(source) {
960
- const engine = this.ensureInitialized();
961
- return engine.debugParseComponent(source);
962
- }
963
- }
964
-
965
854
  // src/renderer.ts
966
855
  init_logger();
967
- var log4 = frameworkLoggers.renderer;
856
+ var log3 = frameworkLoggers.renderer;
968
857
 
969
858
  class BaseRenderer {
970
859
  nodes = new Map;
@@ -1006,14 +895,14 @@ class BaseRenderer {
1006
895
 
1007
896
  class ConsoleRenderer {
1008
897
  applyPatches(patches) {
1009
- log4.debug("Patches:", patches);
898
+ log3.debug("Patches:", patches);
1010
899
  }
1011
900
  }
1012
901
 
1013
902
  // src/router.ts
1014
903
  init_state();
1015
904
  init_logger();
1016
- var log5 = frameworkLoggers.router;
905
+ var log4 = frameworkLoggers.router;
1017
906
 
1018
907
  class HypenRouter {
1019
908
  state;
@@ -1051,7 +940,7 @@ class HypenRouter {
1051
940
  this.updatePath(newPath, false);
1052
941
  });
1053
942
  this.isInitialized = true;
1054
- log5.debug("Router initialized at:", initialPath);
943
+ log4.debug("Router initialized at:", initialPath);
1055
944
  }
1056
945
  getPathFromBrowser() {
1057
946
  if (typeof window === "undefined")
@@ -1072,21 +961,21 @@ class HypenRouter {
1072
961
  return query;
1073
962
  }
1074
963
  push(path) {
1075
- log5.debug("push:", path);
964
+ log4.debug("push:", path);
1076
965
  this.updatePath(path, true);
1077
966
  }
1078
967
  replace(path) {
1079
- log5.debug("replace:", path);
968
+ log4.debug("replace:", path);
1080
969
  this.updatePath(path, true, true);
1081
970
  }
1082
971
  back() {
1083
- log5.debug("back");
972
+ log4.debug("back");
1084
973
  if (typeof window !== "undefined") {
1085
974
  window.history.back();
1086
975
  }
1087
976
  }
1088
977
  forward() {
1089
- log5.debug("forward");
978
+ log4.debug("forward");
1090
979
  if (typeof window !== "undefined") {
1091
980
  window.history.forward();
1092
981
  }
@@ -1182,7 +1071,7 @@ class HypenRouter {
1182
1071
  try {
1183
1072
  callback(this.getState());
1184
1073
  } catch (error) {
1185
- log5.error("Error in route subscriber:", error);
1074
+ log4.error("Error in route subscriber:", error);
1186
1075
  }
1187
1076
  return () => {
1188
1077
  this.subscribers.delete(callback);
@@ -1194,7 +1083,7 @@ class HypenRouter {
1194
1083
  try {
1195
1084
  callback(routeState);
1196
1085
  } catch (error) {
1197
- log5.error("Error in route subscriber:", error);
1086
+ log4.error("Error in route subscriber:", error);
1198
1087
  }
1199
1088
  });
1200
1089
  }
@@ -1212,7 +1101,7 @@ class HypenRouter {
1212
1101
 
1213
1102
  // src/events.ts
1214
1103
  init_logger();
1215
- var log6 = frameworkLoggers.events;
1104
+ var log5 = frameworkLoggers.events;
1216
1105
 
1217
1106
  class TypedEventEmitter {
1218
1107
  eventBus = new Map;
@@ -1225,7 +1114,7 @@ class TypedEventEmitter {
1225
1114
  try {
1226
1115
  handler(payload);
1227
1116
  } catch (error) {
1228
- log6.error(`Error in event handler for "${String(event)}":`, error);
1117
+ log5.error(`Error in event handler for "${String(event)}":`, error);
1229
1118
  }
1230
1119
  });
1231
1120
  }
@@ -1278,7 +1167,7 @@ function createEventEmitter() {
1278
1167
 
1279
1168
  // src/context.ts
1280
1169
  init_logger();
1281
- var log7 = frameworkLoggers.context;
1170
+ var log6 = frameworkLoggers.context;
1282
1171
 
1283
1172
  class HypenGlobalContext {
1284
1173
  modules = new Map;
@@ -1292,14 +1181,14 @@ class HypenGlobalContext {
1292
1181
  }
1293
1182
  registerModule(id, instance) {
1294
1183
  if (this.modules.has(id)) {
1295
- log7.warn(`Module "${id}" is already registered. Overwriting.`);
1184
+ log6.warn(`Module "${id}" is already registered. Overwriting.`);
1296
1185
  }
1297
1186
  this.modules.set(id, instance);
1298
- log7.debug(`Registered module: ${id}`);
1187
+ log6.debug(`Registered module: ${id}`);
1299
1188
  }
1300
1189
  unregisterModule(id) {
1301
1190
  this.modules.delete(id);
1302
- log7.debug(`Unregistered module: ${id}`);
1191
+ log6.debug(`Unregistered module: ${id}`);
1303
1192
  }
1304
1193
  getModule(id) {
1305
1194
  const module = this.modules.get(id);
@@ -1328,14 +1217,14 @@ class HypenGlobalContext {
1328
1217
  emit(event, payload) {
1329
1218
  const handlers = this.legacyEventBus.get(event);
1330
1219
  if (!handlers || handlers.size === 0) {
1331
- log7.debug(`Event "${event}" emitted but no listeners`);
1220
+ log6.debug(`Event "${event}" emitted but no listeners`);
1332
1221
  } else {
1333
- log7.debug(`Emitting event: ${event}`, payload);
1222
+ log6.debug(`Emitting event: ${event}`, payload);
1334
1223
  handlers.forEach((handler) => {
1335
1224
  try {
1336
1225
  handler(payload);
1337
1226
  } catch (error) {
1338
- log7.error(`Error in event handler for "${event}":`, error);
1227
+ log6.error(`Error in event handler for "${event}":`, error);
1339
1228
  }
1340
1229
  });
1341
1230
  }
@@ -1349,7 +1238,7 @@ class HypenGlobalContext {
1349
1238
  }
1350
1239
  const handlers = this.legacyEventBus.get(event);
1351
1240
  handlers.add(handler);
1352
- log7.debug(`Listening to event: ${event}`);
1241
+ log6.debug(`Listening to event: ${event}`);
1353
1242
  return () => {
1354
1243
  handlers.delete(handler);
1355
1244
  if (handlers.size === 0) {
@@ -1384,7 +1273,7 @@ class HypenGlobalContext {
1384
1273
 
1385
1274
  // src/disposable.ts
1386
1275
  init_logger();
1387
- var log8 = frameworkLoggers.lifecycle;
1276
+ var log7 = frameworkLoggers.lifecycle;
1388
1277
  function isDisposable(obj) {
1389
1278
  return obj !== null && typeof obj === "object" && "dispose" in obj && typeof obj.dispose === "function";
1390
1279
  }
@@ -1416,7 +1305,7 @@ class DisposableStack {
1416
1305
  try {
1417
1306
  item.dispose();
1418
1307
  } catch (error) {
1419
- log8.error("Error during dispose:", error);
1308
+ log7.error("Error during dispose:", error);
1420
1309
  }
1421
1310
  }
1422
1311
  }
@@ -1507,7 +1396,7 @@ function compositeDisposable(...disposables) {
1507
1396
  try {
1508
1397
  d.dispose();
1509
1398
  } catch (error) {
1510
- log8.error("Error during dispose:", error);
1399
+ log7.error("Error during dispose:", error);
1511
1400
  }
1512
1401
  }
1513
1402
  }
@@ -1661,7 +1550,7 @@ var RetryPresets = {
1661
1550
 
1662
1551
  // src/remote/client.ts
1663
1552
  init_logger();
1664
- var log9 = frameworkLoggers.remote;
1553
+ var log8 = frameworkLoggers.remote;
1665
1554
 
1666
1555
  class RemoteEngine {
1667
1556
  ws = null;
@@ -1769,7 +1658,7 @@ class RemoteEngine {
1769
1658
  }
1770
1659
  dispatchAction(action, payload) {
1771
1660
  if (this.state !== "connected" || !this.ws) {
1772
- log9.warn("Cannot dispatch action: not connected");
1661
+ log8.warn("Cannot dispatch action: not connected");
1773
1662
  return;
1774
1663
  }
1775
1664
  const message = {
@@ -1842,7 +1731,7 @@ class RemoteEngine {
1842
1731
  break;
1843
1732
  }
1844
1733
  } catch (e) {
1845
- log9.error("Error handling remote message:", e);
1734
+ log8.error("Error handling remote message:", e);
1846
1735
  const error = e instanceof Error ? e : new Error(String(e));
1847
1736
  this.errorCallbacks.forEach((cb) => cb(error));
1848
1737
  }
@@ -1871,7 +1760,7 @@ class RemoteEngine {
1871
1760
  }
1872
1761
  handlePatch(message) {
1873
1762
  if (message.revision <= this.currentRevision) {
1874
- 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}`);
1875
1764
  return;
1876
1765
  }
1877
1766
  this.currentRevision = message.revision;
@@ -1897,10 +1786,10 @@ class RemoteEngine {
1897
1786
  maxDelayMs: 30000,
1898
1787
  jitter: 0.1,
1899
1788
  onRetry: (attempt, error) => {
1900
- log9.debug(`Reconnection attempt ${attempt}/${this.options.maxReconnectAttempts} failed: ${error.message}`);
1789
+ log8.debug(`Reconnection attempt ${attempt}/${this.options.maxReconnectAttempts} failed: ${error.message}`);
1901
1790
  }
1902
1791
  }).catch((error) => {
1903
- log9.error("Max reconnection attempts reached:", error.message);
1792
+ log8.error("Max reconnection attempts reached:", error.message);
1904
1793
  this.errorCallbacks.forEach((cb) => cb(new ConnectionError(this.url, error, this.options.maxReconnectAttempts)));
1905
1794
  });
1906
1795
  }, this.options.reconnectInterval);
@@ -1943,10 +1832,9 @@ export {
1943
1832
  HypenGlobalContext,
1944
1833
  HypenAppBuilder,
1945
1834
  HypenApp,
1946
- Engine,
1947
1835
  DisposableStack,
1948
1836
  ConsoleRenderer,
1949
1837
  BaseRenderer
1950
1838
  };
1951
1839
 
1952
- //# debugId=9618BA73380775CC64756E2164756E21
1840
+ //# debugId=98631CC049082F4164756E2164756E21