@emkodev/emroute 1.7.2 → 1.7.3
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/emroute.js +135 -31
- package/dist/emroute.js.map +2 -2
- package/dist/runtime/abstract.runtime.d.ts +11 -0
- package/dist/runtime/abstract.runtime.js +53 -0
- package/dist/runtime/abstract.runtime.js.map +1 -1
- package/dist/runtime/bun/fs/bun-fs.runtime.js +3 -1
- package/dist/runtime/bun/fs/bun-fs.runtime.js.map +1 -1
- package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js +3 -1
- package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js.map +1 -1
- package/dist/runtime/universal/fs/universal-fs.runtime.js +3 -1
- package/dist/runtime/universal/fs/universal-fs.runtime.js.map +1 -1
- package/dist/server/build.util.js +35 -6
- package/dist/server/build.util.js.map +1 -1
- package/dist/server/emroute.server.js +17 -7
- package/dist/server/emroute.server.js.map +1 -1
- package/dist/server/server-api.type.d.ts +3 -0
- package/dist/src/component/abstract.component.d.ts +1 -1
- package/dist/src/component/abstract.component.js.map +1 -1
- package/dist/src/element/component.element.js +17 -3
- package/dist/src/element/component.element.js.map +1 -1
- package/dist/src/element/markdown.element.js +1 -1
- package/dist/src/element/markdown.element.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/renderer/spa/thin-client.js +28 -6
- package/dist/src/renderer/spa/thin-client.js.map +1 -1
- package/dist/src/renderer/ssr/html.renderer.js +1 -1
- package/dist/src/renderer/ssr/html.renderer.js.map +1 -1
- package/dist/src/renderer/ssr/md.renderer.js +2 -2
- package/dist/src/renderer/ssr/md.renderer.js.map +1 -1
- package/dist/src/renderer/ssr/ssr.renderer.js +6 -6
- package/dist/src/renderer/ssr/ssr.renderer.js.map +1 -1
- package/dist/src/route/route.core.js +21 -7
- package/dist/src/route/route.core.js.map +1 -1
- package/dist/src/type/element.type.d.ts +19 -0
- package/dist/src/type/element.type.js +9 -0
- package/dist/src/type/element.type.js.map +1 -0
- package/dist/src/util/widget-resolve.util.js +1 -1
- package/dist/src/util/widget-resolve.util.js.map +1 -1
- package/dist/src/widget/widget.registry.js +1 -1
- package/dist/src/widget/widget.registry.js.map +1 -1
- package/package.json +1 -1
- package/runtime/abstract.runtime.ts +67 -0
- package/runtime/bun/fs/bun-fs.runtime.ts +2 -0
- package/runtime/bun/sqlite/bun-sqlite.runtime.ts +2 -0
- package/runtime/universal/fs/universal-fs.runtime.ts +2 -0
- package/server/build.util.ts +37 -5
- package/server/emroute.server.ts +20 -6
- package/server/server-api.type.ts +4 -0
- package/src/component/abstract.component.ts +1 -1
- package/src/element/component.element.ts +16 -4
- package/src/element/markdown.element.ts +1 -1
- package/src/index.ts +1 -0
- package/src/renderer/spa/thin-client.ts +30 -5
- package/src/renderer/ssr/html.renderer.ts +1 -1
- package/src/renderer/ssr/md.renderer.ts +5 -4
- package/src/renderer/ssr/ssr.renderer.ts +6 -6
- package/src/route/route.core.ts +17 -8
- package/src/type/element.type.ts +22 -0
- package/src/util/widget-resolve.util.ts +4 -4
- package/src/widget/widget.registry.ts +1 -1
package/src/route/route.core.ts
CHANGED
|
@@ -17,7 +17,7 @@ import type {
|
|
|
17
17
|
RouterEvent,
|
|
18
18
|
RouterEventListener,
|
|
19
19
|
} from '../type/route.type.ts';
|
|
20
|
-
import type { ComponentContext, ContextProvider } from '../component/abstract.component.ts';
|
|
20
|
+
import type { ComponentContext, ContextProvider, FileContents } from '../component/abstract.component.ts';
|
|
21
21
|
import type { RouteResolver, ResolvedRoute } from './route.resolver.ts';
|
|
22
22
|
|
|
23
23
|
/** Base paths for the two SSR rendering endpoints. */
|
|
@@ -56,7 +56,7 @@ function toRouteConfig(resolved: ResolvedRoute): RouteConfig {
|
|
|
56
56
|
pattern: resolved.pattern,
|
|
57
57
|
type: node.redirect ? 'redirect' : 'page',
|
|
58
58
|
modulePath: node.redirect ?? node.files?.ts ?? node.files?.js ?? node.files?.html ?? node.files?.md ?? '',
|
|
59
|
-
files: node.files,
|
|
59
|
+
...(node.files ? { files: node.files } : {}),
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
|
|
@@ -157,7 +157,7 @@ export class RouteCore {
|
|
|
157
157
|
pattern: `/${status}`,
|
|
158
158
|
type: 'page',
|
|
159
159
|
modulePath: node.files?.ts ?? node.files?.js ?? node.files?.html ?? node.files?.md ?? '',
|
|
160
|
-
files: node.files,
|
|
160
|
+
...(node.files ? { files: node.files } : {}),
|
|
161
161
|
};
|
|
162
162
|
}
|
|
163
163
|
|
|
@@ -190,7 +190,7 @@ export class RouteCore {
|
|
|
190
190
|
pattern,
|
|
191
191
|
type: node.redirect ? 'redirect' : 'page',
|
|
192
192
|
modulePath: node.redirect ?? node.files?.ts ?? node.files?.js ?? node.files?.html ?? node.files?.md ?? '',
|
|
193
|
-
files: node.files,
|
|
193
|
+
...(node.files ? { files: node.files } : {}),
|
|
194
194
|
};
|
|
195
195
|
}
|
|
196
196
|
|
|
@@ -287,7 +287,11 @@ export class RouteCore {
|
|
|
287
287
|
widgetFiles.css ? load(widgetFiles.css) : undefined,
|
|
288
288
|
]);
|
|
289
289
|
|
|
290
|
-
|
|
290
|
+
const result: { html?: string; md?: string; css?: string } = {};
|
|
291
|
+
if (html != null) result.html = html;
|
|
292
|
+
if (md != null) result.md = md;
|
|
293
|
+
if (css != null) result.css = css;
|
|
294
|
+
return result;
|
|
291
295
|
}
|
|
292
296
|
|
|
293
297
|
/**
|
|
@@ -349,13 +353,18 @@ export class RouteCore {
|
|
|
349
353
|
]);
|
|
350
354
|
}
|
|
351
355
|
|
|
356
|
+
const files: FileContents = {};
|
|
357
|
+
if (html != null) files.html = html;
|
|
358
|
+
if (md != null) files.md = md;
|
|
359
|
+
if (css != null) files.css = css;
|
|
360
|
+
|
|
352
361
|
const base: ComponentContext = {
|
|
353
362
|
...routeInfo,
|
|
354
363
|
pathname: routeInfo.url.pathname,
|
|
355
364
|
searchParams: routeInfo.url.searchParams,
|
|
356
|
-
files
|
|
357
|
-
signal,
|
|
358
|
-
isLeaf,
|
|
365
|
+
files,
|
|
366
|
+
...(signal ? { signal } : {}),
|
|
367
|
+
...(isLeaf != null ? { isLeaf } : {}),
|
|
359
368
|
};
|
|
360
369
|
return this.contextProvider ? this.contextProvider(base) : base;
|
|
361
370
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Element - Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Custom elements are plain HTMLElement subclasses auto-discovered from
|
|
5
|
+
* `elementsDir/{name}/{name}.element.ts`. They are registered in the
|
|
6
|
+
* browser via `customElements.define()` during `bootEmrouteApp()`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Custom element manifest entry.
|
|
11
|
+
* Discovered from `elementsDir/{name}/{name}.element.ts`.
|
|
12
|
+
*/
|
|
13
|
+
export interface ElementManifestEntry {
|
|
14
|
+
/** Element name in kebab-case (must contain a hyphen per web spec) */
|
|
15
|
+
name: string;
|
|
16
|
+
|
|
17
|
+
/** Path to element module file */
|
|
18
|
+
modulePath: string;
|
|
19
|
+
|
|
20
|
+
/** Custom element tag name (same as name) */
|
|
21
|
+
tagName: string;
|
|
22
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Calls getData() + renderHTML() on widgets and injects SSR hydration data.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { Component, ContextProvider } from '../component/abstract.component.ts';
|
|
8
|
+
import type { Component, ComponentContext, ContextProvider } from '../component/abstract.component.ts';
|
|
9
9
|
import { logger } from '../type/logger.type.ts';
|
|
10
10
|
import type { RouteInfo } from '../type/route.type.ts';
|
|
11
11
|
import { LAZY_ATTR, SSR_ATTR } from './html.util.ts';
|
|
@@ -118,13 +118,13 @@ export function resolveWidgetTags(
|
|
|
118
118
|
files = await loadFiles(widgetName, widget.files);
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
const baseContext = {
|
|
121
|
+
const baseContext: ComponentContext = {
|
|
122
122
|
...routeInfo,
|
|
123
123
|
pathname: routeInfo.url.pathname,
|
|
124
124
|
searchParams: routeInfo.url.searchParams,
|
|
125
|
-
files,
|
|
125
|
+
...(files ? { files } : {}),
|
|
126
126
|
};
|
|
127
|
-
const context = contextProvider ? contextProvider(baseContext) : baseContext;
|
|
127
|
+
const context: ComponentContext = contextProvider ? contextProvider(baseContext) : baseContext;
|
|
128
128
|
|
|
129
129
|
const data = await widget.getData({ params, context });
|
|
130
130
|
const rendered = widget.renderHTML({ data, params, context });
|
|
@@ -40,7 +40,7 @@ export class WidgetRegistry {
|
|
|
40
40
|
name,
|
|
41
41
|
modulePath: name,
|
|
42
42
|
tagName: `widget-${name}`,
|
|
43
|
-
files: widget.files,
|
|
43
|
+
...(widget.files ? { files: widget.files } : {}),
|
|
44
44
|
};
|
|
45
45
|
widgets.push(entry);
|
|
46
46
|
moduleLoaders[name] = () => Promise.resolve({ default: widget.constructor });
|