@emkodev/emroute 1.8.0-beta.1 → 1.8.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/core/component/abstract.component.ts +112 -0
- package/core/renderer/html.renderer.ts +8 -3
- package/core/renderer/md.renderer.ts +4 -3
- package/core/renderer/ssr.renderer.ts +3 -6
- package/core/router/route.trie.ts +4 -4
- package/core/server/emroute.server.ts +5 -27
- package/core/util/md.util.ts +3 -3
- package/core/util/widget-resolve.util.ts +3 -4
- package/core/widget/widget.parser.ts +2 -2
- package/core/widget/widget.registry.ts +17 -5
- package/dist/core/component/abstract.component.d.ts +27 -0
- package/dist/core/component/abstract.component.js +65 -0
- package/dist/core/component/abstract.component.js.map +1 -1
- package/dist/core/renderer/html.renderer.js +9 -3
- package/dist/core/renderer/html.renderer.js.map +1 -1
- package/dist/core/renderer/md.renderer.js +4 -3
- package/dist/core/renderer/md.renderer.js.map +1 -1
- package/dist/core/renderer/ssr.renderer.d.ts +0 -10
- package/dist/core/renderer/ssr.renderer.js +0 -2
- package/dist/core/renderer/ssr.renderer.js.map +1 -1
- package/dist/core/router/route.trie.js +1 -1
- package/dist/core/router/route.trie.js.map +1 -1
- package/dist/core/server/emroute.server.js +4 -26
- package/dist/core/server/emroute.server.js.map +1 -1
- package/dist/core/util/md.util.js.map +1 -1
- package/dist/core/util/widget-resolve.util.d.ts +1 -5
- package/dist/core/util/widget-resolve.util.js +2 -2
- package/dist/core/util/widget-resolve.util.js.map +1 -1
- package/dist/core/widget/widget.parser.js +1 -1
- package/dist/core/widget/widget.parser.js.map +1 -1
- package/dist/core/widget/widget.registry.d.ts +3 -2
- package/dist/core/widget/widget.registry.js +12 -5
- package/dist/core/widget/widget.registry.js.map +1 -1
- package/dist/emroute.js +122 -72
- package/dist/emroute.js.map +14 -14
- package/dist/runtime/abstract.runtime.js +18 -10
- package/dist/runtime/abstract.runtime.js.map +1 -1
- package/dist/src/element/component.element.d.ts +3 -8
- package/dist/src/element/component.element.js +10 -24
- package/dist/src/element/component.element.js.map +1 -1
- package/dist/src/renderer/spa/emroute.app.js +1 -1
- package/dist/src/renderer/spa/emroute.app.js.map +1 -1
- package/package.json +1 -1
- package/runtime/abstract.runtime.ts +33 -25
- package/src/element/component.element.ts +9 -30
- package/src/renderer/spa/emroute.app.ts +1 -1
|
@@ -128,7 +128,6 @@ export class ComponentElement<TParams, TData> extends HTMLElementBase {
|
|
|
128
128
|
*/
|
|
129
129
|
static registerLazy(
|
|
130
130
|
name: string,
|
|
131
|
-
files: WidgetFiles | undefined,
|
|
132
131
|
loader: () => Promise<unknown>,
|
|
133
132
|
): void {
|
|
134
133
|
const tagName = `widget-${name}`;
|
|
@@ -149,7 +148,7 @@ export class ComponentElement<TParams, TData> extends HTMLElementBase {
|
|
|
149
148
|
|
|
150
149
|
const BoundElement = class extends ComponentElement<unknown, unknown> {
|
|
151
150
|
constructor() {
|
|
152
|
-
super(placeholder
|
|
151
|
+
super(placeholder);
|
|
153
152
|
}
|
|
154
153
|
};
|
|
155
154
|
|
|
@@ -175,6 +174,9 @@ export class ComponentElement<TParams, TData> extends HTMLElementBase {
|
|
|
175
174
|
if (lazyLoader) {
|
|
176
175
|
try {
|
|
177
176
|
const mod = await lazyLoader() as Record<string, unknown>;
|
|
177
|
+
if (mod.__files && typeof mod.__files === 'object') {
|
|
178
|
+
this.effectiveFiles = mod.__files as WidgetFiles;
|
|
179
|
+
}
|
|
178
180
|
for (const exp of Object.values(mod)) {
|
|
179
181
|
if (exp && typeof exp === 'object' && 'getData' in exp) {
|
|
180
182
|
const WidgetClass = exp.constructor as new () => Component<TParams, TData>;
|
|
@@ -271,7 +273,8 @@ export class ComponentElement<TParams, TData> extends HTMLElementBase {
|
|
|
271
273
|
|
|
272
274
|
// Lazy: defer loadData until element is visible
|
|
273
275
|
if (this.hasAttribute(LAZY_ATTR)) {
|
|
274
|
-
this.intersectionObserver = new IntersectionObserver((
|
|
276
|
+
this.intersectionObserver = new IntersectionObserver((entries) => {
|
|
277
|
+
const entry = entries[0]!;
|
|
275
278
|
if (entry.isIntersecting) {
|
|
276
279
|
this.intersectionObserver?.disconnect();
|
|
277
280
|
this.intersectionObserver = null;
|
|
@@ -315,35 +318,11 @@ export class ComponentElement<TParams, TData> extends HTMLElementBase {
|
|
|
315
318
|
}
|
|
316
319
|
|
|
317
320
|
/**
|
|
318
|
-
*
|
|
319
|
-
*
|
|
320
|
-
*/
|
|
321
|
-
private static loadFile(path: string): Promise<string | undefined> {
|
|
322
|
-
const url = path.startsWith('http://') || path.startsWith('https://')
|
|
323
|
-
? path
|
|
324
|
-
: (path.startsWith('/') ? path : '/' + path);
|
|
325
|
-
|
|
326
|
-
return fetch(url).then(
|
|
327
|
-
(res) => res.ok ? res.text() : undefined,
|
|
328
|
-
() => undefined,
|
|
329
|
-
);
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* Load all companion files for this widget instance.
|
|
334
|
-
* Uses effectiveFiles (from registration) falling back to component.files.
|
|
321
|
+
* Get companion files for this widget instance.
|
|
322
|
+
* Returns inlined content from __files (set during lazy module load) directly.
|
|
335
323
|
*/
|
|
336
324
|
private async loadFiles(): Promise<{ html?: string; md?: string; css?: string }> {
|
|
337
|
-
|
|
338
|
-
if (!filePaths) return {};
|
|
339
|
-
|
|
340
|
-
const [html, md, css] = await Promise.all([
|
|
341
|
-
filePaths.html ? ComponentElement.loadFile(filePaths.html) : undefined,
|
|
342
|
-
filePaths.md ? ComponentElement.loadFile(filePaths.md) : undefined,
|
|
343
|
-
filePaths.css ? ComponentElement.loadFile(filePaths.css) : undefined,
|
|
344
|
-
]);
|
|
345
|
-
|
|
346
|
-
return filterUndefined({ html, md, css }) ?? {};
|
|
325
|
+
return this.effectiveFiles ?? {};
|
|
347
326
|
}
|
|
348
327
|
|
|
349
328
|
private async loadData(): Promise<void> {
|
|
@@ -219,7 +219,7 @@ export async function bootEmrouteApp(options?: BootOptions): Promise<EmrouteApp>
|
|
|
219
219
|
// Register widgets eagerly (tag defined immediately, module loads on connectedCallback)
|
|
220
220
|
const widgets = new WidgetRegistry();
|
|
221
221
|
for (const entry of widgetEntries) {
|
|
222
|
-
ComponentElement.registerLazy(entry.name,
|
|
222
|
+
ComponentElement.registerLazy(entry.name, moduleLoaders[entry.modulePath]!);
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
// Register custom elements — import all modules, define when loaded
|