@emkodev/emroute 1.10.0-beta.2 → 1.10.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 +1 -1
- package/core/component/page.component.ts +0 -6
- package/core/pipeline/pipeline.ts +10 -3
- package/core/renderer/html.renderer.ts +13 -10
- package/core/renderer/md.renderer.ts +18 -9
- package/core/renderer/ssr.renderer.ts +0 -15
- package/core/util/html.util.ts +3 -0
- package/core/util/widget-resolve.util.ts +9 -16
- package/dist/core/component/abstract.component.d.ts +1 -1
- package/dist/core/component/abstract.component.js +1 -0
- package/dist/core/component/abstract.component.js.map +1 -1
- package/dist/core/component/page.component.d.ts +0 -1
- package/dist/core/component/page.component.js +0 -3
- package/dist/core/component/page.component.js.map +1 -1
- package/dist/core/pipeline/pipeline.d.ts +6 -1
- package/dist/core/pipeline/pipeline.js +10 -3
- package/dist/core/pipeline/pipeline.js.map +1 -1
- package/dist/core/renderer/html.renderer.js +10 -10
- package/dist/core/renderer/html.renderer.js.map +1 -1
- package/dist/core/renderer/md.renderer.js +13 -8
- package/dist/core/renderer/md.renderer.js.map +1 -1
- package/dist/core/renderer/ssr.renderer.d.ts +0 -3
- package/dist/core/renderer/ssr.renderer.js +0 -10
- package/dist/core/renderer/ssr.renderer.js.map +1 -1
- package/dist/core/util/html.util.d.ts +2 -0
- package/dist/core/util/html.util.js +2 -0
- package/dist/core/util/html.util.js.map +1 -1
- package/dist/core/util/widget-resolve.util.d.ts +5 -6
- package/dist/core/util/widget-resolve.util.js +8 -11
- package/dist/core/util/widget-resolve.util.js.map +1 -1
- package/dist/emroute.js +44 -43
- package/dist/emroute.js.map +11 -11
- package/dist/src/element/component.element.js +2 -2
- package/dist/src/element/component.element.js.map +1 -1
- package/package.json +1 -1
- package/src/element/component.element.ts +2 -2
|
@@ -43,7 +43,7 @@ export abstract class Component<
|
|
|
43
43
|
*/
|
|
44
44
|
readonly exposeSsrData?: boolean;
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
getData(_args: this['DataArgs']): Promise<TData | null> { return Promise.resolve(null); }
|
|
47
47
|
abstract renderMarkdown(args: this['RenderArgs']): string;
|
|
48
48
|
|
|
49
49
|
renderHTML(args: this['RenderArgs']): string {
|
|
@@ -21,12 +21,6 @@ export class PageComponent<
|
|
|
21
21
|
override readonly name: string = 'page';
|
|
22
22
|
readonly pattern?: string;
|
|
23
23
|
|
|
24
|
-
override getData(
|
|
25
|
-
_args: this['DataArgs'],
|
|
26
|
-
): Promise<TData | null> {
|
|
27
|
-
return Promise.resolve(null);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
24
|
override renderHTML(
|
|
31
25
|
args: this['RenderArgs'],
|
|
32
26
|
): string {
|
|
@@ -139,12 +139,19 @@ export class Pipeline {
|
|
|
139
139
|
return entries.find((e) => e.name === name)?.modulePath;
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
/** Load a widget by name —
|
|
143
|
-
async
|
|
142
|
+
/** Load a widget module by name — single load yields both component and files. */
|
|
143
|
+
async loadWidgetModule(name: string): Promise<{ component: WidgetComponent; files: FileContents } | undefined> {
|
|
144
144
|
const path = await this.findWidgetModulePath(name);
|
|
145
145
|
if (!path) return undefined;
|
|
146
146
|
const mod = await this.loadModule<Record<string, unknown>>(path);
|
|
147
|
-
|
|
147
|
+
const component = this.extractWidgetComponent(mod);
|
|
148
|
+
if (!component) return undefined;
|
|
149
|
+
return { component, files: this.getModuleFiles(mod) ?? {} };
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Load a widget by name — shorthand when only the component is needed. */
|
|
153
|
+
async loadWidget(name: string): Promise<WidgetComponent | undefined> {
|
|
154
|
+
return (await this.loadWidgetModule(name))?.component;
|
|
148
155
|
}
|
|
149
156
|
|
|
150
157
|
/** Extract a WidgetComponent from a loaded module's exports. */
|
|
@@ -64,20 +64,23 @@ export class SsrHtmlRenderer extends SsrRenderer {
|
|
|
64
64
|
// Attribute bare <router-slot> tags with this route's pattern
|
|
65
65
|
content = this.attributeSlots(content, route.pattern);
|
|
66
66
|
|
|
67
|
-
// Resolve <widget-*> tags
|
|
67
|
+
// Resolve <widget-*> tags (memoized per render pass for streaming compat)
|
|
68
|
+
const widgetCache = new Map<string, ReturnType<typeof this.pipeline.loadWidgetModule>>();
|
|
68
69
|
content = await resolveWidgetTags(
|
|
69
70
|
content,
|
|
70
|
-
(name) =>
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
(name) => {
|
|
72
|
+
if (!widgetCache.has(name)) {
|
|
73
|
+
widgetCache.set(name, this.pipeline.loadWidgetModule(name).catch((e) => {
|
|
74
|
+
this.logger.error(
|
|
75
|
+
`[${this.label}] Failed to load widget "${name}"`,
|
|
76
|
+
e instanceof Error ? e : undefined,
|
|
77
|
+
);
|
|
78
|
+
return undefined;
|
|
79
|
+
}));
|
|
78
80
|
}
|
|
79
|
-
return
|
|
81
|
+
return widgetCache.get(name)!;
|
|
80
82
|
},
|
|
83
|
+
routeInfo,
|
|
81
84
|
this.pipeline.contextProvider,
|
|
82
85
|
this.logger,
|
|
83
86
|
);
|
|
@@ -85,6 +85,20 @@ export class SsrMdRenderer extends SsrRenderer {
|
|
|
85
85
|
content: string,
|
|
86
86
|
routeInfo: RouteInfo,
|
|
87
87
|
): Promise<string> {
|
|
88
|
+
const widgetCache = new Map<string, ReturnType<typeof this.pipeline.loadWidgetModule>>();
|
|
89
|
+
const loadWidget = (name: string) => {
|
|
90
|
+
if (!widgetCache.has(name)) {
|
|
91
|
+
widgetCache.set(name, this.pipeline.loadWidgetModule(name).catch((e) => {
|
|
92
|
+
this.logger.error(
|
|
93
|
+
`[${this.label}] Failed to load widget "${name}"`,
|
|
94
|
+
e instanceof Error ? e : undefined,
|
|
95
|
+
);
|
|
96
|
+
return undefined;
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
return widgetCache.get(name)!;
|
|
100
|
+
};
|
|
101
|
+
|
|
88
102
|
return resolveRecursively(
|
|
89
103
|
content,
|
|
90
104
|
parseWidgetBlocks,
|
|
@@ -93,19 +107,14 @@ export class SsrMdRenderer extends SsrRenderer {
|
|
|
93
107
|
return `> **Error** (\`${block.widgetName}\`): ${block.parseError}`;
|
|
94
108
|
}
|
|
95
109
|
|
|
96
|
-
const
|
|
97
|
-
if (!
|
|
110
|
+
const result = await loadWidget(block.widgetName);
|
|
111
|
+
if (!result) {
|
|
98
112
|
return `> **Error**: Unknown widget \`${block.widgetName}\``;
|
|
99
113
|
}
|
|
100
114
|
|
|
101
|
-
|
|
102
|
-
let files: { html?: string; md?: string } | undefined;
|
|
103
|
-
const modulePath = await this.pipeline.findWidgetModulePath(block.widgetName);
|
|
104
|
-
if (modulePath) {
|
|
105
|
-
const mod = await this.pipeline.loadModule(modulePath);
|
|
106
|
-
files = this.pipeline.getModuleFiles(mod);
|
|
107
|
-
}
|
|
115
|
+
const { component: widget, files } = result;
|
|
108
116
|
|
|
117
|
+
try {
|
|
109
118
|
const baseContext: ComponentContext = {
|
|
110
119
|
...routeInfo,
|
|
111
120
|
pathname: routeInfo.url.pathname,
|
|
@@ -15,8 +15,6 @@ import type { Logger } from '../type/logger.type.ts';
|
|
|
15
15
|
import defaultPageComponent, { type PageComponent } from '../component/page.component.ts';
|
|
16
16
|
import { DEFAULT_ROOT_ROUTE, type Pipeline } from '../pipeline/pipeline.ts';
|
|
17
17
|
import { assertSafeRedirect } from '../util/html.util.ts';
|
|
18
|
-
import type { WidgetComponent } from '../component/widget.component.ts';
|
|
19
|
-
|
|
20
18
|
/** Options for SSR renderers. */
|
|
21
19
|
export interface SsrRendererOptions {
|
|
22
20
|
/** @deprecated Widgets are resolved from the manifest via Runtime. This option is ignored. */
|
|
@@ -37,19 +35,6 @@ export abstract class SsrRenderer {
|
|
|
37
35
|
this.logger = pipeline.logger;
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
/** Resolve a widget by name — queries manifest from Runtime on demand. */
|
|
41
|
-
protected async resolveWidget(name: string): Promise<WidgetComponent | undefined> {
|
|
42
|
-
try {
|
|
43
|
-
return await this.pipeline.loadWidget(name);
|
|
44
|
-
} catch (e) {
|
|
45
|
-
this.logger.error(
|
|
46
|
-
`[${this.label}] Failed to load widget "${name}"`,
|
|
47
|
-
e instanceof Error ? e : undefined,
|
|
48
|
-
);
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
38
|
/**
|
|
54
39
|
* Render a URL to a content string.
|
|
55
40
|
*/
|
package/core/util/html.util.ts
CHANGED
|
@@ -8,6 +8,9 @@ export const SSR_ATTR = 'ssr';
|
|
|
8
8
|
/** HTML attribute name for lazy-loading widgets. */
|
|
9
9
|
export const LAZY_ATTR = 'lazy';
|
|
10
10
|
|
|
11
|
+
/** Attribute names to skip when parsing widget params (not user-supplied data). */
|
|
12
|
+
export const RESERVED_ATTRS = new Set([SSR_ATTR, LAZY_ATTR, 'style', 'class', 'id', 'slot', 'part']);
|
|
13
|
+
|
|
11
14
|
const BLOCKED_PROTOCOLS = /^(javascript|data|vbscript):/i;
|
|
12
15
|
|
|
13
16
|
/** Throw if a redirect URL uses a dangerous protocol. */
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import type { Component } from '../component/abstract.component.ts';
|
|
9
|
-
import type { ComponentContext, ContextProvider } from '../type/component.type.ts';
|
|
9
|
+
import type { ComponentContext, ContextProvider, FileContents } from '../type/component.type.ts';
|
|
10
10
|
import { type Logger, defaultLogger } from '../type/logger.type.ts';
|
|
11
11
|
import type { RouteInfo } from '../type/route.type.ts';
|
|
12
|
-
import {
|
|
12
|
+
import { RESERVED_ATTRS, SSR_ATTR } from './html.util.ts';
|
|
13
13
|
|
|
14
14
|
/** Maximum nesting depth for widgets to prevent infinite loops */
|
|
15
15
|
export const MAX_WIDGET_DEPTH = 10;
|
|
@@ -53,11 +53,8 @@ export async function resolveRecursively<T>(
|
|
|
53
53
|
*/
|
|
54
54
|
export function resolveWidgetTags(
|
|
55
55
|
html: string,
|
|
56
|
-
getWidget: (name: string) => Promise<Component | undefined>,
|
|
56
|
+
getWidget: (name: string) => Promise<{ component: Component; files?: FileContents } | undefined>,
|
|
57
57
|
routeInfo: RouteInfo,
|
|
58
|
-
loadFiles?: (
|
|
59
|
-
widgetName: string,
|
|
60
|
-
) => Promise<{ html?: string; md?: string; css?: string }>,
|
|
61
58
|
contextProvider?: ContextProvider,
|
|
62
59
|
logger: Logger = defaultLogger,
|
|
63
60
|
): Promise<string> {
|
|
@@ -78,17 +75,13 @@ export function resolveWidgetTags(
|
|
|
78
75
|
const resolve = async (match: RegExpExecArray): Promise<string> => {
|
|
79
76
|
const widgetName = match.groups!.name!;
|
|
80
77
|
const attrsString = match.groups!.attrs?.trim() ?? '';
|
|
81
|
-
const widget = await getWidget(widgetName);
|
|
82
|
-
|
|
83
|
-
if (!widget) return match[0];
|
|
84
|
-
|
|
85
|
-
const params = parseAttrsToParams(attrsString);
|
|
86
78
|
|
|
87
79
|
try {
|
|
88
|
-
|
|
89
|
-
if (
|
|
90
|
-
|
|
91
|
-
}
|
|
80
|
+
const result = await getWidget(widgetName);
|
|
81
|
+
if (!result) return match[0];
|
|
82
|
+
|
|
83
|
+
const { component: widget, files } = result;
|
|
84
|
+
const params = parseAttrsToParams(attrsString);
|
|
92
85
|
|
|
93
86
|
const baseContext: ComponentContext = {
|
|
94
87
|
...routeInfo,
|
|
@@ -145,7 +138,7 @@ export function parseAttrsToParams(attrsString: string): Record<string, unknown>
|
|
|
145
138
|
/(?<attr>[a-z][a-z0-9-]*)(?:="(?<dq>[^"]*)"|='(?<sq>[^']*)'|=(?<uq>[^\s>]+))?/gi;
|
|
146
139
|
for (const match of attrsString.matchAll(attrPattern)) {
|
|
147
140
|
const { attr: attrName, dq, sq, uq } = match.groups!;
|
|
148
|
-
if (!attrName || attrName
|
|
141
|
+
if (!attrName || RESERVED_ATTRS.has(attrName)) continue;
|
|
149
142
|
const key = attrName.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
150
143
|
const rawValue = dq ?? sq ?? uq;
|
|
151
144
|
if (rawValue === undefined) {
|
|
@@ -34,7 +34,7 @@ export declare abstract class Component<TParams = unknown, TData = unknown, TCon
|
|
|
34
34
|
* without re-fetching.
|
|
35
35
|
*/
|
|
36
36
|
readonly exposeSsrData?: boolean;
|
|
37
|
-
|
|
37
|
+
getData(_args: this['DataArgs']): Promise<TData | null>;
|
|
38
38
|
abstract renderMarkdown(args: this['RenderArgs']): string;
|
|
39
39
|
renderHTML(args: this['RenderArgs']): string;
|
|
40
40
|
hydrate?(args: this['RenderArgs']): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract.component.js","sourceRoot":"","sources":["../../../core/component/abstract.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,OAAgB,SAAS;IAmB7B,sEAAsE;IACtE,OAAO,CAA2B;IAElC,oEAAoE;IAC3D,KAAK,CAAgD;IAE9D;;;;OAIG;IACM,aAAa,CAAW;
|
|
1
|
+
{"version":3,"file":"abstract.component.js","sourceRoot":"","sources":["../../../core/component/abstract.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,OAAgB,SAAS;IAmB7B,sEAAsE;IACtE,OAAO,CAA2B;IAElC,oEAAoE;IAC3D,KAAK,CAAgD;IAE9D;;;;OAIG;IACM,aAAa,CAAW;IAEjC,OAAO,CAAC,KAAuB,IAA2B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAGzF,UAAU,CAAC,IAAwB;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,wBAAwB,IAAI,CAAC,IAAI,oBAAoB,CAAC;QAC/D,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;YACnC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QACH,OAAO,wBAAwB,IAAI,CAAC,IAAI,mBAAmB,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC1F,CAAC;IAiCD,uBAAuB,CAAC,UAAkB,EAAE,EAAW;QACrD,yDAAyD;QACzD,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,UAAU,CAAC;YAC9B,MAAM,UAAU,GAAI,IAAI,CAAC,OAAmC,EAAE,UAAU,CAAC;YACzE,MAAM,QAAQ,GAAG,UAAU,EAAE,aAAa,CAAsB,YAAY,UAAU,EAAE,CAAC,CAAC;YAC1F,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CACb,IAAI,IAAI,CAAC,IAAI,gBAAgB,UAAU,6BAA6B;oBACpE,6DAA6D,CAC9D,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,KAAK,EAAE,EAAE;gBACf,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAqB,CAAC;gBACnE,IAAI,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;gBAEzB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpD,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC;oBAClF,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAC3C,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBAChD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;oBACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjC,CAAC;gBAED,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC;QAE1B,wCAAwC;QACxC,MAAM,SAAS,GAAG,IAAI,MAAM,CAC1B,cAAc,GAAG,EAAE,GAAG,oBAAoB,CAC3C,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YAE7B,OAAO,CAAC,KAAK,EAAE,EAAE;gBACf,IAAI,CAAC,KAAK;oBAAE,OAAO,QAAQ,CAAC;gBAC5B,IAAI,MAAM,GAAG,QAAQ,CAAC;gBACtB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpD,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACJ,CAAC;QAED,+CAA+C;QAC/C,MAAM,WAAW,GAAG,IAAI,MAAM,CAC5B,uBAAuB,EAAE,mCAAmC,CAC7D,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,IAAI,IAAI,CAAC,IAAI,eAAe,EAAE,yBAAyB;gBACvD,yBAAyB,GAAG,EAAE,GAAG,4BAA4B,GAAG,EAAE,GAAG,eAAe,CACrF,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;QAE/B,OAAO,CAAC,KAAK,EAAE,EAAE;YACf,IAAI,CAAC,KAAK;gBAAE,OAAO,QAAQ,CAAC;YAE5B,IAAI,MAAM,GAAG,QAAQ,CAAC;YAEtB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpD,IAAI,IAAI,KAAK,SAAS;oBAAE,SAAS;gBACjC,MAAM,GAAG,MAAM,CAAC,UAAU,CACxB,IAAI,MAAM,CAAC,qBAAqB,IAAI,6BAA6B,EAAE,GAAG,CAAC,EACvE,OAAO,CACR,CAAC;YACJ,CAAC;YAED,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,4BAA4B,EAAE,KAAK,CAAC,SAAS,CAAE,CAAC,CAAC;YAC9E,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,IAAyC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClF,OAAO,wBAAwB,IAAI,CAAC,IAAI,YAAY,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC9E,CAAC;IAED,mBAAmB,CAAC,KAAc;QAChC,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO,kBAAkB,IAAI,CAAC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -13,7 +13,6 @@ import type { ComponentContext } from '../type/component.type.ts';
|
|
|
13
13
|
export declare class PageComponent<TParams extends Record<string, string> = Record<string, string>, TData = unknown, TContext extends ComponentContext = ComponentContext> extends Component<TParams, TData, TContext> {
|
|
14
14
|
readonly name: string;
|
|
15
15
|
readonly pattern?: string;
|
|
16
|
-
getData(_args: this['DataArgs']): Promise<TData | null>;
|
|
17
16
|
renderHTML(args: this['RenderArgs']): string;
|
|
18
17
|
renderMarkdown(args: this['RenderArgs']): string;
|
|
19
18
|
getTitle(_args: this['RenderArgs']): string | undefined;
|
|
@@ -13,9 +13,6 @@ import { escapeHtml } from "../util/html.util.js";
|
|
|
13
13
|
export class PageComponent extends Component {
|
|
14
14
|
name = 'page';
|
|
15
15
|
pattern;
|
|
16
|
-
getData(_args) {
|
|
17
|
-
return Promise.resolve(null);
|
|
18
|
-
}
|
|
19
16
|
renderHTML(args) {
|
|
20
17
|
const files = args.context.files;
|
|
21
18
|
const style = files?.css ? `<style>${files.css}</style>\n` : '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.component.js","sourceRoot":"","sources":["../../../core/component/page.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,OAAO,aAIX,SAAQ,SAAmC;IACzB,IAAI,GAAW,MAAM,CAAC;IAC/B,OAAO,CAAU;IAEjB,
|
|
1
|
+
{"version":3,"file":"page.component.js","sourceRoot":"","sources":["../../../core/component/page.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,OAAO,aAIX,SAAQ,SAAmC;IACzB,IAAI,GAAW,MAAM,CAAC;IAC/B,OAAO,CAAU;IAEjB,UAAU,CACjB,IAAwB;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhE,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;YAChB,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;YAC9B,IAAI,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;gBACzD,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,yBAAyB,EACzB,cAAc,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CACjD,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,KAAK,EAAE,EAAE,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,+BAA+B,CAAC;YACnF,OAAO,GAAG,KAAK,cAAc,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,IAAI,EAAE,CAAC;QACzE,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,6BAA6B,CAAC;IAClE,CAAC;IAEQ,cAAc,CACrB,IAAwB;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAEjC,IAAI,KAAK,EAAE,EAAE,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAC1D,CAAC;IAED,QAAQ,CACN,KAAyB;QAEzB,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,gFAAgF;AAChF,eAAe,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -48,7 +48,12 @@ export declare class Pipeline {
|
|
|
48
48
|
getErrorHandler(): Promise<RouteConfig | undefined>;
|
|
49
49
|
buildRouteHierarchy(pattern: string): string[];
|
|
50
50
|
findWidgetModulePath(name: string): Promise<string | undefined>;
|
|
51
|
-
/** Load a widget by name —
|
|
51
|
+
/** Load a widget module by name — single load yields both component and files. */
|
|
52
|
+
loadWidgetModule(name: string): Promise<{
|
|
53
|
+
component: WidgetComponent;
|
|
54
|
+
files: FileContents;
|
|
55
|
+
} | undefined>;
|
|
56
|
+
/** Load a widget by name — shorthand when only the component is needed. */
|
|
52
57
|
loadWidget(name: string): Promise<WidgetComponent | undefined>;
|
|
53
58
|
/** Extract a WidgetComponent from a loaded module's exports. */
|
|
54
59
|
private extractWidgetComponent;
|
|
@@ -112,13 +112,20 @@ export class Pipeline {
|
|
|
112
112
|
const entries = await response.json();
|
|
113
113
|
return entries.find((e) => e.name === name)?.modulePath;
|
|
114
114
|
}
|
|
115
|
-
/** Load a widget by name —
|
|
116
|
-
async
|
|
115
|
+
/** Load a widget module by name — single load yields both component and files. */
|
|
116
|
+
async loadWidgetModule(name) {
|
|
117
117
|
const path = await this.findWidgetModulePath(name);
|
|
118
118
|
if (!path)
|
|
119
119
|
return undefined;
|
|
120
120
|
const mod = await this.loadModule(path);
|
|
121
|
-
|
|
121
|
+
const component = this.extractWidgetComponent(mod);
|
|
122
|
+
if (!component)
|
|
123
|
+
return undefined;
|
|
124
|
+
return { component, files: this.getModuleFiles(mod) ?? {} };
|
|
125
|
+
}
|
|
126
|
+
/** Load a widget by name — shorthand when only the component is needed. */
|
|
127
|
+
async loadWidget(name) {
|
|
128
|
+
return (await this.loadWidgetModule(name))?.component;
|
|
122
129
|
}
|
|
123
130
|
/** Extract a WidgetComponent from a loaded module's exports. */
|
|
124
131
|
extractWidgetComponent(mod) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../core/pipeline/pipeline.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../core/pipeline/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,17 +36,17 @@ export class SsrHtmlRenderer extends SsrRenderer {
|
|
|
36
36
|
content = await this.expandMarkdown(content);
|
|
37
37
|
// Attribute bare <router-slot> tags with this route's pattern
|
|
38
38
|
content = this.attributeSlots(content, route.pattern);
|
|
39
|
-
// Resolve <widget-*> tags
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
// Resolve <widget-*> tags (memoized per render pass for streaming compat)
|
|
40
|
+
const widgetCache = new Map();
|
|
41
|
+
content = await resolveWidgetTags(content, (name) => {
|
|
42
|
+
if (!widgetCache.has(name)) {
|
|
43
|
+
widgetCache.set(name, this.pipeline.loadWidgetModule(name).catch((e) => {
|
|
44
|
+
this.logger.error(`[${this.label}] Failed to load widget "${name}"`, e instanceof Error ? e : undefined);
|
|
45
|
+
return undefined;
|
|
46
|
+
}));
|
|
47
47
|
}
|
|
48
|
-
return
|
|
49
|
-
}, this.pipeline.contextProvider, this.logger);
|
|
48
|
+
return widgetCache.get(name);
|
|
49
|
+
}, routeInfo, this.pipeline.contextProvider, this.logger);
|
|
50
50
|
return { content, ...(title !== undefined ? { title } : {}) };
|
|
51
51
|
}
|
|
52
52
|
renderContent(component, args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.renderer.js","sourceRoot":"","sources":["../../../core/renderer/html.renderer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AAOzE,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAClB,KAAK,GAAG,UAAU,CAAC;IACvC,gBAAgB,CAA0B;IAC1C,aAAa,GAAyB,IAAI,CAAC;IAEnD,YAAY,QAAkB,EAAE,UAAkC,EAAE;QAClE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC;QAEzD,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IAEkB,UAAU,CAAC,MAAc,EAAE,KAAa,EAAE,aAAqB;QAChF,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO,MAAM,CAAC,OAAO,CACnB,IAAI,MAAM,CAAC,mCAAmC,OAAO,uBAAuB,CAAC,EAC7E,KAAK,CACN,CAAC;IACJ,CAAC;IAEkB,UAAU,CAAC,MAAc;QAC1C,OAAO,MAAM,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAEkB,KAAK,CAAC,kBAAkB,CACzC,SAAoB,EACpB,KAAkB,EAClB,MAAgB,EAChB,MAAoB;QAEpB,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,UAAU,EAAE,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,yBAAyB,KAAK,CAAC,OAAO,kBAAkB,EAAE,CAAC;QAC/E,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrG,IAAI,OAAO,GAAG,UAAU,CAAC;QAEzB,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE7C,8DAA8D;QAC9D,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAEtD,
|
|
1
|
+
{"version":3,"file":"html.renderer.js","sourceRoot":"","sources":["../../../core/renderer/html.renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,21 +51,26 @@ export class SsrMdRenderer extends SsrRenderer {
|
|
|
51
51
|
return `# Internal Server Error\n\nPath: \`${url.pathname}\``;
|
|
52
52
|
}
|
|
53
53
|
resolveWidgets(content, routeInfo) {
|
|
54
|
+
const widgetCache = new Map();
|
|
55
|
+
const loadWidget = (name) => {
|
|
56
|
+
if (!widgetCache.has(name)) {
|
|
57
|
+
widgetCache.set(name, this.pipeline.loadWidgetModule(name).catch((e) => {
|
|
58
|
+
this.logger.error(`[${this.label}] Failed to load widget "${name}"`, e instanceof Error ? e : undefined);
|
|
59
|
+
return undefined;
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
return widgetCache.get(name);
|
|
63
|
+
};
|
|
54
64
|
return resolveRecursively(content, parseWidgetBlocks, async (block) => {
|
|
55
65
|
if (block.parseError || !block.params) {
|
|
56
66
|
return `> **Error** (\`${block.widgetName}\`): ${block.parseError}`;
|
|
57
67
|
}
|
|
58
|
-
const
|
|
59
|
-
if (!
|
|
68
|
+
const result = await loadWidget(block.widgetName);
|
|
69
|
+
if (!result) {
|
|
60
70
|
return `> **Error**: Unknown widget \`${block.widgetName}\``;
|
|
61
71
|
}
|
|
72
|
+
const { component: widget, files } = result;
|
|
62
73
|
try {
|
|
63
|
-
let files;
|
|
64
|
-
const modulePath = await this.pipeline.findWidgetModulePath(block.widgetName);
|
|
65
|
-
if (modulePath) {
|
|
66
|
-
const mod = await this.pipeline.loadModule(modulePath);
|
|
67
|
-
files = this.pipeline.getModuleFiles(mod);
|
|
68
|
-
}
|
|
69
74
|
const baseContext = {
|
|
70
75
|
...routeInfo,
|
|
71
76
|
pathname: routeInfo.url.pathname,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"md.renderer.js","sourceRoot":"","sources":["../../../core/renderer/md.renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AAEzE,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,SAAS,eAAe,CAAC,OAAe;IACtC,OAAO,kCAAkC,OAAO,YAAY,CAAC;AAC/D,CAAC;AAID,MAAM,OAAO,aAAc,SAAQ,WAAW;IAChB,KAAK,GAAG,QAAQ,CAAC;IAE7C,YAAY,QAAkB,EAAE,UAAgC,EAAE;QAChE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAEkB,UAAU,CAAC,MAAc,EAAE,KAAa,EAAE,aAAqB;QAChF,OAAO,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAEkB,UAAU,CAAC,MAAc;QAC1C,OAAO,MAAM;aACV,OAAO,CAAC,sCAAsC,EAAE,EAAE,CAAC;aACnD,IAAI,EAAE,CAAC;IACZ,CAAC;IAEkB,KAAK,CAAC,kBAAkB,CACzC,SAAoB,EACpB,KAAkB,EAClB,MAAgB,EAChB,MAAoB;QAEpB,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,UAAU,EAAE,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrG,IAAI,OAAO,GAAG,UAAU,CAAC;QAEzB,8DAA8D;QAC9D,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAE9E,+BAA+B;QAC/B,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAExD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChE,CAAC;IAEkB,aAAa,CAC9B,SAAwB,EACxB,IAAiC;QAEjC,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAEkB,cAAc,CAAC,EAAU;QAC1C,OAAO,gBAAgB,EAAE,EAAE,CAAC;IAC9B,CAAC;IAEkB,gBAAgB,CAAC,MAAc,EAAE,GAAQ;QAC1D,OAAO,KAAK,eAAe,CAAC,MAAM,CAAC,IAAI,OAAO,eAAe,GAAG,CAAC,QAAQ,IAAI,CAAC;IAChF,CAAC;IAEkB,eAAe,CAAC,MAAe,EAAE,GAAQ;QAC1D,OAAO,sCAAsC,GAAG,CAAC,QAAQ,IAAI,CAAC;IAChE,CAAC;IAEO,cAAc,CACpB,OAAe,EACf,SAAoB;QAEpB,
|
|
1
|
+
{"version":3,"file":"md.renderer.js","sourceRoot":"","sources":["../../../core/renderer/md.renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AAEzE,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,SAAS,eAAe,CAAC,OAAe;IACtC,OAAO,kCAAkC,OAAO,YAAY,CAAC;AAC/D,CAAC;AAID,MAAM,OAAO,aAAc,SAAQ,WAAW;IAChB,KAAK,GAAG,QAAQ,CAAC;IAE7C,YAAY,QAAkB,EAAE,UAAgC,EAAE;QAChE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAEkB,UAAU,CAAC,MAAc,EAAE,KAAa,EAAE,aAAqB;QAChF,OAAO,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAEkB,UAAU,CAAC,MAAc;QAC1C,OAAO,MAAM;aACV,OAAO,CAAC,sCAAsC,EAAE,EAAE,CAAC;aACnD,IAAI,EAAE,CAAC;IACZ,CAAC;IAEkB,KAAK,CAAC,kBAAkB,CACzC,SAAoB,EACpB,KAAkB,EAClB,MAAgB,EAChB,MAAoB;QAEpB,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB,CAAC,UAAU,EAAE,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrG,IAAI,OAAO,GAAG,UAAU,CAAC;QAEzB,8DAA8D;QAC9D,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAE9E,+BAA+B;QAC/B,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAExD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChE,CAAC;IAEkB,aAAa,CAC9B,SAAwB,EACxB,IAAiC;QAEjC,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAEkB,cAAc,CAAC,EAAU;QAC1C,OAAO,gBAAgB,EAAE,EAAE,CAAC;IAC9B,CAAC;IAEkB,gBAAgB,CAAC,MAAc,EAAE,GAAQ;QAC1D,OAAO,KAAK,eAAe,CAAC,MAAM,CAAC,IAAI,OAAO,eAAe,GAAG,CAAC,QAAQ,IAAI,CAAC;IAChF,CAAC;IAEkB,eAAe,CAAC,MAAe,EAAE,GAAQ;QAC1D,OAAO,sCAAsC,GAAG,CAAC,QAAQ,IAAI,CAAC;IAChE,CAAC;IAEO,cAAc,CACpB,OAAe,EACf,SAAoB;QAEpB,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6D,CAAC;QACzF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACrE,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,IAAI,IAAI,CAAC,KAAK,4BAA4B,IAAI,GAAG,EACjD,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CACnC,CAAC;oBACF,OAAO,SAAS,CAAC;gBACnB,CAAC,CAAC,CAAC,CAAC;YACN,CAAC;YACD,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QAChC,CAAC,CAAC;QAEF,OAAO,kBAAkB,CACvB,OAAO,EACP,iBAAiB,EACjB,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACtC,OAAO,kBAAkB,KAAK,CAAC,UAAU,QAAQ,KAAK,CAAC,UAAU,EAAE,CAAC;YACtE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,iCAAiC,KAAK,CAAC,UAAU,IAAI,CAAC;YAC/D,CAAC;YAED,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;YAE5C,IAAI,CAAC;gBACH,MAAM,WAAW,GAAqB;oBACpC,GAAG,SAAS;oBACZ,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ;oBAChC,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY;oBACxC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5B,CAAC;gBACF,MAAM,OAAO,GAAqB,IAAI,CAAC,QAAQ,CAAC,eAAe;oBAC7D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC;oBAC5C,CAAC,CAAC,WAAW,CAAC;gBAChB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;gBACrE,OAAO,MAAM,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACxE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,EACD,mBAAmB,EACnB,CAAC,EACD,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -9,7 +9,6 @@ import type { ComponentContext } from '../type/component.type.ts';
|
|
|
9
9
|
import type { Logger } from '../type/logger.type.ts';
|
|
10
10
|
import { type PageComponent } from '../component/page.component.ts';
|
|
11
11
|
import { type Pipeline } from '../pipeline/pipeline.ts';
|
|
12
|
-
import type { WidgetComponent } from '../component/widget.component.ts';
|
|
13
12
|
/** Options for SSR renderers. */
|
|
14
13
|
export interface SsrRendererOptions {
|
|
15
14
|
/** @deprecated Widgets are resolved from the manifest via Runtime. This option is ignored. */
|
|
@@ -23,8 +22,6 @@ export declare abstract class SsrRenderer {
|
|
|
23
22
|
protected abstract readonly label: string;
|
|
24
23
|
protected readonly logger: Logger;
|
|
25
24
|
constructor(pipeline: Pipeline, _options?: SsrRendererOptions);
|
|
26
|
-
/** Resolve a widget by name — queries manifest from Runtime on demand. */
|
|
27
|
-
protected resolveWidget(name: string): Promise<WidgetComponent | undefined>;
|
|
28
25
|
/**
|
|
29
26
|
* Render a URL to a content string.
|
|
30
27
|
*/
|
|
@@ -17,16 +17,6 @@ export class SsrRenderer {
|
|
|
17
17
|
this.pipeline = pipeline;
|
|
18
18
|
this.logger = pipeline.logger;
|
|
19
19
|
}
|
|
20
|
-
/** Resolve a widget by name — queries manifest from Runtime on demand. */
|
|
21
|
-
async resolveWidget(name) {
|
|
22
|
-
try {
|
|
23
|
-
return await this.pipeline.loadWidget(name);
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
this.logger.error(`[${this.label}] Failed to load widget "${name}"`, e instanceof Error ? e : undefined);
|
|
27
|
-
return undefined;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
20
|
/**
|
|
31
21
|
* Render a URL to a content string.
|
|
32
22
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssr.renderer.js","sourceRoot":"","sources":["../../../core/renderer/ssr.renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,oBAA4C,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAiB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ssr.renderer.js","sourceRoot":"","sources":["../../../core/renderer/ssr.renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
export declare const SSR_ATTR = "ssr";
|
|
6
6
|
/** HTML attribute name for lazy-loading widgets. */
|
|
7
7
|
export declare const LAZY_ATTR = "lazy";
|
|
8
|
+
/** Attribute names to skip when parsing widget params (not user-supplied data). */
|
|
9
|
+
export declare const RESERVED_ATTRS: Set<string>;
|
|
8
10
|
/** Throw if a redirect URL uses a dangerous protocol. */
|
|
9
11
|
export declare function assertSafeRedirect(url: string): void;
|
|
10
12
|
export declare function escapeHtml(text: string): string;
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
export const SSR_ATTR = 'ssr';
|
|
6
6
|
/** HTML attribute name for lazy-loading widgets. */
|
|
7
7
|
export const LAZY_ATTR = 'lazy';
|
|
8
|
+
/** Attribute names to skip when parsing widget params (not user-supplied data). */
|
|
9
|
+
export const RESERVED_ATTRS = new Set([SSR_ATTR, LAZY_ATTR, 'style', 'class', 'id', 'slot', 'part']);
|
|
8
10
|
const BLOCKED_PROTOCOLS = /^(javascript|data|vbscript):/i;
|
|
9
11
|
/** Throw if a redirect URL uses a dangerous protocol. */
|
|
10
12
|
export function assertSafeRedirect(url) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.util.js","sourceRoot":"","sources":["../../../core/util/html.util.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC;AAE9B,oDAAoD;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEhC,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAE1D,yDAAyD;AACzD,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI;SACR,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;SACxB,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;SACxB,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;SACzB,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;SACvB,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;SACvB,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,UAAkB;IAC5D,OAAO,kBAAkB,UAAU,QAAQ,GAAG,KAAK,CAAC;AACtD,CAAC;AAED,sCAAsC;AACtC,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,uBAAuB;CAC7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"html.util.js","sourceRoot":"","sources":["../../../core/util/html.util.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC;AAE9B,oDAAoD;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEhC,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAErG,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAE1D,yDAAyD;AACzD,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI;SACR,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;SACxB,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;SACxB,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;SACzB,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;SACvB,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;SACvB,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,UAAkB;IAC5D,OAAO,kBAAkB,UAAU,QAAQ,GAAG,KAAK,CAAC;AACtD,CAAC;AAED,sCAAsC;AACtC,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,uBAAuB;CAC7B,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Calls getData() + renderHTML() on widgets and injects SSR hydration data.
|
|
6
6
|
*/
|
|
7
7
|
import type { Component } from '../component/abstract.component.ts';
|
|
8
|
-
import type { ContextProvider } from '../type/component.type.ts';
|
|
8
|
+
import type { ContextProvider, FileContents } from '../type/component.type.ts';
|
|
9
9
|
import { type Logger } from '../type/logger.type.ts';
|
|
10
10
|
import type { RouteInfo } from '../type/route.type.ts';
|
|
11
11
|
/** Maximum nesting depth for widgets to prevent infinite loops */
|
|
@@ -17,10 +17,9 @@ export declare function resolveRecursively<T>(content: string, parse: (content:
|
|
|
17
17
|
/**
|
|
18
18
|
* Resolve <widget-*> tags in HTML by calling getData() + renderHTML().
|
|
19
19
|
*/
|
|
20
|
-
export declare function resolveWidgetTags(html: string, getWidget: (name: string) => Promise<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}>, contextProvider?: ContextProvider, logger?: Logger): Promise<string>;
|
|
20
|
+
export declare function resolveWidgetTags(html: string, getWidget: (name: string) => Promise<{
|
|
21
|
+
component: Component;
|
|
22
|
+
files?: FileContents;
|
|
23
|
+
} | undefined>, routeInfo: RouteInfo, contextProvider?: ContextProvider, logger?: Logger): Promise<string>;
|
|
25
24
|
/** Parse HTML attribute string into params object. */
|
|
26
25
|
export declare function parseAttrsToParams(attrsString: string): Record<string, unknown>;
|