@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.
- package/dist/app.js +24 -3
- package/dist/app.js.map +3 -3
- package/dist/components/builtin.js +24 -3
- package/dist/components/builtin.js.map +3 -3
- package/dist/context.js +18 -1
- package/dist/context.js.map +2 -2
- package/dist/discovery.js +25 -7
- package/dist/discovery.js.map +4 -4
- package/dist/disposable.js +18 -1
- package/dist/disposable.js.map +2 -2
- package/dist/engine.browser.js +18 -1
- package/dist/engine.browser.js.map +3 -3
- package/dist/engine.js +18 -1
- package/dist/engine.js.map +3 -3
- package/dist/events.js +18 -1
- package/dist/events.js.map +2 -2
- package/dist/index.browser.js +259 -371
- package/dist/index.browser.js.map +8 -9
- package/dist/index.js +558 -647
- package/dist/index.js.map +12 -13
- package/dist/loader.js +18 -1
- package/dist/loader.js.map +2 -2
- package/dist/plugin.js +18 -1
- package/dist/plugin.js.map +2 -2
- package/dist/remote/client.js +18 -1
- package/dist/remote/client.js.map +3 -3
- package/dist/remote/index.js +353 -332
- package/dist/remote/index.js.map +8 -8
- package/dist/remote/server.js +234 -213
- package/dist/remote/server.js.map +7 -7
- package/dist/renderer.js +18 -1
- package/dist/renderer.js.map +3 -3
- package/dist/resolver.js +48 -4
- package/dist/resolver.js.map +3 -3
- package/dist/router.js +18 -1
- package/dist/router.js.map +2 -2
- package/dist/state.js +18 -1
- package/dist/state.js.map +2 -2
- 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 +4 -32
- 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
|
@@ -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
|
-
|
|
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
|
-
|
|
725
|
+
log2.debug(`Registering action handler: ${actionName} for module ${definition.name}`);
|
|
705
726
|
this.engine.onAction(actionName, async (action) => {
|
|
706
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
845
|
+
var log2, app;
|
|
825
846
|
var init_app = __esm(() => {
|
|
826
847
|
init_result();
|
|
827
848
|
init_state();
|
|
828
849
|
init_logger();
|
|
829
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
964
|
+
log4.debug("push:", path);
|
|
1076
965
|
this.updatePath(path, true);
|
|
1077
966
|
}
|
|
1078
967
|
replace(path) {
|
|
1079
|
-
|
|
968
|
+
log4.debug("replace:", path);
|
|
1080
969
|
this.updatePath(path, true, true);
|
|
1081
970
|
}
|
|
1082
971
|
back() {
|
|
1083
|
-
|
|
972
|
+
log4.debug("back");
|
|
1084
973
|
if (typeof window !== "undefined") {
|
|
1085
974
|
window.history.back();
|
|
1086
975
|
}
|
|
1087
976
|
}
|
|
1088
977
|
forward() {
|
|
1089
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
1184
|
+
log6.warn(`Module "${id}" is already registered. Overwriting.`);
|
|
1296
1185
|
}
|
|
1297
1186
|
this.modules.set(id, instance);
|
|
1298
|
-
|
|
1187
|
+
log6.debug(`Registered module: ${id}`);
|
|
1299
1188
|
}
|
|
1300
1189
|
unregisterModule(id) {
|
|
1301
1190
|
this.modules.delete(id);
|
|
1302
|
-
|
|
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
|
-
|
|
1220
|
+
log6.debug(`Event "${event}" emitted but no listeners`);
|
|
1332
1221
|
} else {
|
|
1333
|
-
|
|
1222
|
+
log6.debug(`Emitting event: ${event}`, payload);
|
|
1334
1223
|
handlers.forEach((handler) => {
|
|
1335
1224
|
try {
|
|
1336
1225
|
handler(payload);
|
|
1337
1226
|
} catch (error) {
|
|
1338
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1789
|
+
log8.debug(`Reconnection attempt ${attempt}/${this.options.maxReconnectAttempts} failed: ${error.message}`);
|
|
1901
1790
|
}
|
|
1902
1791
|
}).catch((error) => {
|
|
1903
|
-
|
|
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=
|
|
1840
|
+
//# debugId=98631CC049082F4164756E2164756E21
|