@hypen-space/core 0.3.12 → 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.
- package/dist/app.js +7 -3
- package/dist/app.js.map +3 -3
- package/dist/components/builtin.js +7 -3
- package/dist/components/builtin.js.map +3 -3
- package/dist/discovery.js +8 -7
- package/dist/discovery.js.map +4 -4
- package/dist/engine.browser.js.map +2 -2
- package/dist/engine.js +3 -7
- package/dist/engine.js.map +3 -3
- package/dist/index.browser.js +242 -371
- package/dist/index.browser.js.map +8 -9
- package/dist/index.js +546 -656
- package/dist/index.js.map +12 -13
- package/dist/remote/client.js.map +1 -1
- package/dist/remote/index.js +336 -336
- package/dist/remote/index.js.map +8 -8
- package/dist/remote/server.js +219 -219
- package/dist/remote/server.js.map +7 -7
- package/dist/renderer.js.map +1 -1
- package/dist/resolver.js +31 -4
- package/dist/resolver.js.map +3 -3
- package/package.json +7 -1
- package/src/app.ts +14 -2
- package/src/discovery.ts +3 -1
- package/src/engine.browser.ts +4 -32
- package/src/engine.ts +8 -44
- package/src/index.browser.ts +6 -4
- package/src/index.ts +6 -6
- package/src/managed-router.ts +195 -0
- package/src/module-registry.ts +76 -0
- package/src/remote/client.ts +1 -1
- package/src/remote/index.ts +2 -2
- package/src/remote/server.ts +1 -1
- package/src/remote/types.ts +1 -1
- package/src/renderer.ts +1 -1
- package/src/resolver.ts +56 -9
- package/src/types.ts +38 -0
- package/wasm-browser/README.md +7 -1
- package/wasm-browser/hypen_engine.d.ts +1 -0
- package/wasm-browser/hypen_engine.js +1 -0
- package/wasm-browser/hypen_engine_bg.wasm +0 -0
- package/wasm-browser/package.json +1 -1
- package/wasm-node/README.md +7 -1
- package/wasm-node/hypen_engine.d.ts +1 -0
- package/wasm-node/hypen_engine.js +1 -0
- package/wasm-node/hypen_engine_bg.wasm +0 -0
- package/wasm-node/package.json +1 -1
package/dist/index.browser.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
725
|
+
log2.debug(`Registering action handler: ${actionName} for module ${definition.name}`);
|
|
722
726
|
this.engine.onAction(actionName, async (action) => {
|
|
723
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
845
|
+
var log2, app;
|
|
842
846
|
var init_app = __esm(() => {
|
|
843
847
|
init_result();
|
|
844
848
|
init_state();
|
|
845
849
|
init_logger();
|
|
846
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
964
|
+
log4.debug("push:", path);
|
|
1093
965
|
this.updatePath(path, true);
|
|
1094
966
|
}
|
|
1095
967
|
replace(path) {
|
|
1096
|
-
|
|
968
|
+
log4.debug("replace:", path);
|
|
1097
969
|
this.updatePath(path, true, true);
|
|
1098
970
|
}
|
|
1099
971
|
back() {
|
|
1100
|
-
|
|
972
|
+
log4.debug("back");
|
|
1101
973
|
if (typeof window !== "undefined") {
|
|
1102
974
|
window.history.back();
|
|
1103
975
|
}
|
|
1104
976
|
}
|
|
1105
977
|
forward() {
|
|
1106
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
1184
|
+
log6.warn(`Module "${id}" is already registered. Overwriting.`);
|
|
1313
1185
|
}
|
|
1314
1186
|
this.modules.set(id, instance);
|
|
1315
|
-
|
|
1187
|
+
log6.debug(`Registered module: ${id}`);
|
|
1316
1188
|
}
|
|
1317
1189
|
unregisterModule(id) {
|
|
1318
1190
|
this.modules.delete(id);
|
|
1319
|
-
|
|
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
|
-
|
|
1220
|
+
log6.debug(`Event "${event}" emitted but no listeners`);
|
|
1349
1221
|
} else {
|
|
1350
|
-
|
|
1222
|
+
log6.debug(`Emitting event: ${event}`, payload);
|
|
1351
1223
|
handlers.forEach((handler) => {
|
|
1352
1224
|
try {
|
|
1353
1225
|
handler(payload);
|
|
1354
1226
|
} catch (error) {
|
|
1355
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1789
|
+
log8.debug(`Reconnection attempt ${attempt}/${this.options.maxReconnectAttempts} failed: ${error.message}`);
|
|
1918
1790
|
}
|
|
1919
1791
|
}).catch((error) => {
|
|
1920
|
-
|
|
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=
|
|
1840
|
+
//# debugId=98631CC049082F4164756E2164756E21
|