@emkodev/emroute 1.8.0-beta.2 → 1.8.2-beta.1
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/server/emroute.server.ts +50 -20
- 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/server/emroute.server.js +37 -19
- package/dist/core/server/emroute.server.js.map +1 -1
- package/dist/emroute.js +237 -32
- package/dist/emroute.js.map +8 -8
- package/dist/runtime/abstract.runtime.js +7 -3
- package/dist/runtime/abstract.runtime.js.map +1 -1
- package/dist/runtime/fetch.runtime.js +7 -1
- package/dist/runtime/fetch.runtime.js.map +1 -1
- package/dist/server/build.util.d.ts +1 -1
- package/dist/server/build.util.js +10 -28
- package/dist/server/build.util.js.map +1 -1
- package/dist/src/overlay/mod.d.ts +1 -1
- package/dist/src/overlay/overlay.service.js +136 -6
- package/dist/src/overlay/overlay.service.js.map +1 -1
- package/dist/src/overlay/overlay.type.d.ts +28 -4
- package/dist/src/renderer/spa/emroute.app.js +10 -2
- package/dist/src/renderer/spa/emroute.app.js.map +1 -1
- package/package.json +2 -2
- package/runtime/abstract.runtime.ts +11 -5
- package/runtime/fetch.runtime.ts +6 -1
- package/server/build.util.ts +10 -30
- package/src/overlay/mod.ts +1 -1
- package/src/overlay/overlay.service.ts +158 -8
- package/src/overlay/overlay.type.ts +27 -2
- package/src/renderer/spa/emroute.app.ts +8 -2
|
@@ -62,6 +62,118 @@ export abstract class Component<
|
|
|
62
62
|
destroy?(): void;
|
|
63
63
|
validateParams?(params: TParams): string | undefined;
|
|
64
64
|
|
|
65
|
+
/**
|
|
66
|
+
* @experimental
|
|
67
|
+
*
|
|
68
|
+
* Parse a template and return a reusable fill function.
|
|
69
|
+
* Call once, apply many times with different slot values.
|
|
70
|
+
*
|
|
71
|
+
* **String signatures** (SSR + SPA `renderHTML`/`renderMarkdown`):
|
|
72
|
+
* - `experimentalUseTemplate(html, id)` — Extracts `<template id>`, fills `<slot name>`.
|
|
73
|
+
* - `experimentalUseTemplate(md, id)` — Extracts `` ```template:id ``, fills `slot:name`.
|
|
74
|
+
*
|
|
75
|
+
* **DOM signature** (browser `hydrate()`):
|
|
76
|
+
* - `experimentalUseTemplate(id)` — Finds `<template>` in shadow DOM,
|
|
77
|
+
* returns a function that clones and fills slots as `DocumentFragment`.
|
|
78
|
+
*
|
|
79
|
+
* Markdown templates work in both `renderMarkdown()` and `renderHTML()`.
|
|
80
|
+
* For HTML output from a markdown-only companion, wrap the result in `<mark-down>`:
|
|
81
|
+
* ```typescript
|
|
82
|
+
* override renderHTML({ data, context }: this['RenderArgs']): string {
|
|
83
|
+
* const card = this.experimentalUseTemplate(context.files!.md!, 'card');
|
|
84
|
+
* return `<mark-down>${escapeHtml(data.items.map(card).join('\n'))}</mark-down>`;
|
|
85
|
+
* }
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* Throws if the template id is not found in the source.
|
|
89
|
+
*/
|
|
90
|
+
experimentalUseTemplate(source: string, id: string): (slots?: Record<string, string>) => string;
|
|
91
|
+
experimentalUseTemplate(id: string): (slots?: Record<string, string>) => DocumentFragment;
|
|
92
|
+
experimentalUseTemplate(sourceOrId: string, id?: string): (slots?: Record<string, string>) => string | DocumentFragment {
|
|
93
|
+
// DOM path: single arg = template id, find in shadow DOM
|
|
94
|
+
if (id === undefined) {
|
|
95
|
+
const templateId = sourceOrId;
|
|
96
|
+
const shadowRoot = (this.element as HTMLElement | undefined)?.shadowRoot;
|
|
97
|
+
const template = shadowRoot?.querySelector<HTMLTemplateElement>(`template#${templateId}`);
|
|
98
|
+
if (!template) {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`[${this.name}] Template "#${templateId}" not found in shadow DOM. ` +
|
|
101
|
+
'Ensure the <template> element exists in the companion HTML.',
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return (slots) => {
|
|
106
|
+
const clone = template.content.cloneNode(true) as DocumentFragment;
|
|
107
|
+
if (!slots) return clone;
|
|
108
|
+
|
|
109
|
+
for (const [name, content] of Object.entries(slots)) {
|
|
110
|
+
const selector = name === 'default' ? 'slot:not([name])' : `slot[name="${name}"]`;
|
|
111
|
+
const slot = clone.querySelector(selector);
|
|
112
|
+
if (!slot) continue;
|
|
113
|
+
const temp = document.createElement('template');
|
|
114
|
+
temp.innerHTML = content;
|
|
115
|
+
slot.replaceWith(temp.content);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return clone;
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const source = sourceOrId;
|
|
123
|
+
|
|
124
|
+
// Markdown path: ```template:id ... ```
|
|
125
|
+
const mdPattern = new RegExp(
|
|
126
|
+
'```template:' + id + '\\n([\\s\\S]*?)```',
|
|
127
|
+
);
|
|
128
|
+
const mdMatch = source.match(mdPattern);
|
|
129
|
+
if (mdMatch) {
|
|
130
|
+
const skeleton = mdMatch[1]!;
|
|
131
|
+
|
|
132
|
+
return (slots) => {
|
|
133
|
+
if (!slots) return skeleton;
|
|
134
|
+
let result = skeleton;
|
|
135
|
+
for (const [name, content] of Object.entries(slots)) {
|
|
136
|
+
result = result.replaceAll(`slot:${name}`, content);
|
|
137
|
+
}
|
|
138
|
+
return result;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// HTML path: <template id="...">...</template>
|
|
143
|
+
const htmlPattern = new RegExp(
|
|
144
|
+
`<template\\s+id=["']${id}["'][^>]*>([\\s\\S]*?)</template>`,
|
|
145
|
+
);
|
|
146
|
+
const htmlMatch = source.match(htmlPattern);
|
|
147
|
+
if (!htmlMatch) {
|
|
148
|
+
throw new Error(
|
|
149
|
+
`[${this.name}] Template "${id}" not found in source. ` +
|
|
150
|
+
'Expected <template id="' + id + '"> in HTML or ```template:' + id + ' in markdown.',
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const skeleton = htmlMatch[1]!;
|
|
155
|
+
|
|
156
|
+
return (slots) => {
|
|
157
|
+
if (!slots) return skeleton;
|
|
158
|
+
|
|
159
|
+
let result = skeleton;
|
|
160
|
+
|
|
161
|
+
for (const [name, content] of Object.entries(slots)) {
|
|
162
|
+
if (name === 'default') continue;
|
|
163
|
+
result = result.replaceAll(
|
|
164
|
+
new RegExp(`<slot\\s+name=["']${name}["'][^>]*>[\\s\\S]*?</slot>`, 'g'),
|
|
165
|
+
content,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if ('default' in slots) {
|
|
170
|
+
result = result.replaceAll(/<slot\s*>[\s\S]*?<\/slot>/g, slots['default']!);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return result;
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
|
|
65
177
|
renderError(args: { error: unknown; params: TParams }): string {
|
|
66
178
|
const msg = args.error instanceof Error ? args.error.message : String(args.error);
|
|
67
179
|
return `<div data-component="${this.name}">Error: ${escapeHtml(msg)}</div>`;
|
|
@@ -88,14 +88,17 @@ export class Emroute {
|
|
|
88
88
|
|
|
89
89
|
// ── Widgets ───────────────────────────────────────────────────────
|
|
90
90
|
|
|
91
|
-
let widgets: WidgetRegistry | undefined
|
|
91
|
+
let widgets: WidgetRegistry | undefined;
|
|
92
92
|
|
|
93
93
|
const widgetsResponse = await runtime.query(WIDGETS_MANIFEST_PATH);
|
|
94
94
|
if (widgetsResponse.status !== 404) {
|
|
95
95
|
const entries: WidgetManifestEntry[] = await widgetsResponse.json();
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
widgets = await Emroute.importWidgets(entries, runtime);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (config.widgets) {
|
|
100
|
+
if (!widgets) widgets = new WidgetRegistry();
|
|
101
|
+
for (const w of config.widgets) widgets.add(w);
|
|
99
102
|
}
|
|
100
103
|
|
|
101
104
|
// ── Renderers ─────────────────────────────────────────────────────
|
|
@@ -118,11 +121,7 @@ export class Emroute {
|
|
|
118
121
|
|
|
119
122
|
const title = config.title ?? 'emroute';
|
|
120
123
|
const shellBase = (spa === 'root' || spa === 'only') ? appBase : htmlBase;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if ((await runtime.query('/main.css')).status !== 404) {
|
|
124
|
-
shell = shell.replace('</head>', ' <link rel="stylesheet" href="/main.css">\n</head>');
|
|
125
|
-
}
|
|
124
|
+
const shell = await Emroute.resolveShell(runtime, title, shellBase, spa);
|
|
126
125
|
|
|
127
126
|
return new Emroute(
|
|
128
127
|
ssrHtmlRenderer,
|
|
@@ -211,15 +210,18 @@ export class Emroute {
|
|
|
211
210
|
});
|
|
212
211
|
}
|
|
213
212
|
|
|
214
|
-
// Unhandled SSR paths in 'only' mode —
|
|
213
|
+
// Unhandled SSR paths in 'only' mode — redirect to /app/
|
|
215
214
|
if (
|
|
216
215
|
pathname.startsWith(htmlPrefix) || pathname === this.htmlBase ||
|
|
217
216
|
pathname.startsWith(mdPrefix) || pathname === this.mdBase
|
|
218
217
|
) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
218
|
+
const routePath = pathname.startsWith(htmlPrefix) ? pathname.slice(this.htmlBase.length)
|
|
219
|
+
: pathname.startsWith(mdPrefix) ? pathname.slice(this.mdBase.length)
|
|
220
|
+
: '/';
|
|
221
|
+
return Response.redirect(
|
|
222
|
+
new URL(this.appBase + routePath + (url.search || ''), url.origin),
|
|
223
|
+
302,
|
|
224
|
+
);
|
|
223
225
|
}
|
|
224
226
|
|
|
225
227
|
// Static files
|
|
@@ -277,18 +279,45 @@ export class Emroute {
|
|
|
277
279
|
return registry;
|
|
278
280
|
}
|
|
279
281
|
|
|
280
|
-
private static buildHtmlShell(
|
|
281
|
-
|
|
282
|
+
private static async buildHtmlShell(
|
|
283
|
+
runtime: Runtime,
|
|
284
|
+
title: string,
|
|
285
|
+
basePath: string,
|
|
286
|
+
spa: SpaMode,
|
|
287
|
+
): Promise<string> {
|
|
288
|
+
const baseTag = basePath ? `\n <base href="${escapeHtml(basePath)}/">` : '';
|
|
289
|
+
|
|
290
|
+
let cssTag = '';
|
|
291
|
+
if ((await runtime.query('/main.css')).status !== 404) {
|
|
292
|
+
cssTag = '\n <link rel="stylesheet" href="/main.css">';
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
const needsJs = spa !== 'none';
|
|
296
|
+
|
|
297
|
+
let importMapHtml = '';
|
|
298
|
+
if (needsJs) {
|
|
299
|
+
const mapResponse = await runtime.query('/importmap.json');
|
|
300
|
+
if (mapResponse.status !== 404) {
|
|
301
|
+
const importMap = await mapResponse.text();
|
|
302
|
+
importMapHtml = `\n <script type="importmap">\n${importMap}\n </script>`;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
let scriptHtml = '';
|
|
307
|
+
if (needsJs && (await runtime.query('/app.js')).status !== 404) {
|
|
308
|
+
scriptHtml = '\n <script type="module" src="/app.js"></script>';
|
|
309
|
+
}
|
|
310
|
+
|
|
282
311
|
return `<!DOCTYPE html>
|
|
283
312
|
<html>
|
|
284
313
|
<head>${baseTag}
|
|
285
314
|
<meta charset="utf-8">
|
|
286
315
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
287
316
|
<title>${escapeHtml(title)}</title>
|
|
288
|
-
<style>@view-transition { navigation: auto; } router-slot { display: contents; }</style
|
|
317
|
+
<style>@view-transition { navigation: auto; } router-slot { display: contents; }</style>${cssTag}
|
|
289
318
|
</head>
|
|
290
319
|
<body>
|
|
291
|
-
<router-slot></router-slot
|
|
320
|
+
<router-slot></router-slot>${importMapHtml}${scriptHtml}
|
|
292
321
|
</body>
|
|
293
322
|
</html>`;
|
|
294
323
|
}
|
|
@@ -315,10 +344,11 @@ export class Emroute {
|
|
|
315
344
|
private static async resolveShell(
|
|
316
345
|
runtime: Runtime,
|
|
317
346
|
title: string,
|
|
318
|
-
|
|
347
|
+
basePath: string,
|
|
348
|
+
spa: SpaMode,
|
|
319
349
|
): Promise<string> {
|
|
320
350
|
const response = await runtime.query('/index.html');
|
|
321
351
|
if (response.status !== 404) return await response.text();
|
|
322
|
-
return Emroute.buildHtmlShell(title,
|
|
352
|
+
return Emroute.buildHtmlShell(runtime, title, basePath, spa);
|
|
323
353
|
}
|
|
324
354
|
}
|
|
@@ -40,6 +40,33 @@ export declare abstract class Component<TParams = unknown, TData = unknown, TCon
|
|
|
40
40
|
hydrate?(args: this['RenderArgs']): void;
|
|
41
41
|
destroy?(): void;
|
|
42
42
|
validateParams?(params: TParams): string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* @experimental
|
|
45
|
+
*
|
|
46
|
+
* Parse a template and return a reusable fill function.
|
|
47
|
+
* Call once, apply many times with different slot values.
|
|
48
|
+
*
|
|
49
|
+
* **String signatures** (SSR + SPA `renderHTML`/`renderMarkdown`):
|
|
50
|
+
* - `experimentalUseTemplate(html, id)` — Extracts `<template id>`, fills `<slot name>`.
|
|
51
|
+
* - `experimentalUseTemplate(md, id)` — Extracts `` ```template:id ``, fills `slot:name`.
|
|
52
|
+
*
|
|
53
|
+
* **DOM signature** (browser `hydrate()`):
|
|
54
|
+
* - `experimentalUseTemplate(id)` — Finds `<template>` in shadow DOM,
|
|
55
|
+
* returns a function that clones and fills slots as `DocumentFragment`.
|
|
56
|
+
*
|
|
57
|
+
* Markdown templates work in both `renderMarkdown()` and `renderHTML()`.
|
|
58
|
+
* For HTML output from a markdown-only companion, wrap the result in `<mark-down>`:
|
|
59
|
+
* ```typescript
|
|
60
|
+
* override renderHTML({ data, context }: this['RenderArgs']): string {
|
|
61
|
+
* const card = this.experimentalUseTemplate(context.files!.md!, 'card');
|
|
62
|
+
* return `<mark-down>${escapeHtml(data.items.map(card).join('\n'))}</mark-down>`;
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* Throws if the template id is not found in the source.
|
|
67
|
+
*/
|
|
68
|
+
experimentalUseTemplate(source: string, id: string): (slots?: Record<string, string>) => string;
|
|
69
|
+
experimentalUseTemplate(id: string): (slots?: Record<string, string>) => DocumentFragment;
|
|
43
70
|
renderError(args: {
|
|
44
71
|
error: unknown;
|
|
45
72
|
params: TParams;
|
|
@@ -30,6 +30,71 @@ export class Component {
|
|
|
30
30
|
});
|
|
31
31
|
return `<div data-component="${this.name}" data-markdown>${escapeHtml(markdown)}</div>`;
|
|
32
32
|
}
|
|
33
|
+
experimentalUseTemplate(sourceOrId, id) {
|
|
34
|
+
// DOM path: single arg = template id, find in shadow DOM
|
|
35
|
+
if (id === undefined) {
|
|
36
|
+
const templateId = sourceOrId;
|
|
37
|
+
const shadowRoot = this.element?.shadowRoot;
|
|
38
|
+
const template = shadowRoot?.querySelector(`template#${templateId}`);
|
|
39
|
+
if (!template) {
|
|
40
|
+
throw new Error(`[${this.name}] Template "#${templateId}" not found in shadow DOM. ` +
|
|
41
|
+
'Ensure the <template> element exists in the companion HTML.');
|
|
42
|
+
}
|
|
43
|
+
return (slots) => {
|
|
44
|
+
const clone = template.content.cloneNode(true);
|
|
45
|
+
if (!slots)
|
|
46
|
+
return clone;
|
|
47
|
+
for (const [name, content] of Object.entries(slots)) {
|
|
48
|
+
const selector = name === 'default' ? 'slot:not([name])' : `slot[name="${name}"]`;
|
|
49
|
+
const slot = clone.querySelector(selector);
|
|
50
|
+
if (!slot)
|
|
51
|
+
continue;
|
|
52
|
+
const temp = document.createElement('template');
|
|
53
|
+
temp.innerHTML = content;
|
|
54
|
+
slot.replaceWith(temp.content);
|
|
55
|
+
}
|
|
56
|
+
return clone;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const source = sourceOrId;
|
|
60
|
+
// Markdown path: ```template:id ... ```
|
|
61
|
+
const mdPattern = new RegExp('```template:' + id + '\\n([\\s\\S]*?)```');
|
|
62
|
+
const mdMatch = source.match(mdPattern);
|
|
63
|
+
if (mdMatch) {
|
|
64
|
+
const skeleton = mdMatch[1];
|
|
65
|
+
return (slots) => {
|
|
66
|
+
if (!slots)
|
|
67
|
+
return skeleton;
|
|
68
|
+
let result = skeleton;
|
|
69
|
+
for (const [name, content] of Object.entries(slots)) {
|
|
70
|
+
result = result.replaceAll(`slot:${name}`, content);
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// HTML path: <template id="...">...</template>
|
|
76
|
+
const htmlPattern = new RegExp(`<template\\s+id=["']${id}["'][^>]*>([\\s\\S]*?)</template>`);
|
|
77
|
+
const htmlMatch = source.match(htmlPattern);
|
|
78
|
+
if (!htmlMatch) {
|
|
79
|
+
throw new Error(`[${this.name}] Template "${id}" not found in source. ` +
|
|
80
|
+
'Expected <template id="' + id + '"> in HTML or ```template:' + id + ' in markdown.');
|
|
81
|
+
}
|
|
82
|
+
const skeleton = htmlMatch[1];
|
|
83
|
+
return (slots) => {
|
|
84
|
+
if (!slots)
|
|
85
|
+
return skeleton;
|
|
86
|
+
let result = skeleton;
|
|
87
|
+
for (const [name, content] of Object.entries(slots)) {
|
|
88
|
+
if (name === 'default')
|
|
89
|
+
continue;
|
|
90
|
+
result = result.replaceAll(new RegExp(`<slot\\s+name=["']${name}["'][^>]*>[\\s\\S]*?</slot>`, 'g'), content);
|
|
91
|
+
}
|
|
92
|
+
if ('default' in slots) {
|
|
93
|
+
result = result.replaceAll(/<slot\s*>[\s\S]*?<\/slot>/g, slots['default']);
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
33
98
|
renderError(args) {
|
|
34
99
|
const msg = args.error instanceof Error ? args.error.message : String(args.error);
|
|
35
100
|
return `<div data-component="${this.name}">Error: ${escapeHtml(msg)}</div>`;
|
|
@@ -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;IAKjC,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;
|
|
1
|
+
{"version":3,"file":"abstract.component.js","sourceRoot":"","sources":["../../../core/component/abstract.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,13 +54,17 @@ export class Emroute {
|
|
|
54
54
|
...(config.moduleLoaders ? { moduleLoaders: config.moduleLoaders } : {}),
|
|
55
55
|
});
|
|
56
56
|
// ── Widgets ───────────────────────────────────────────────────────
|
|
57
|
-
let widgets
|
|
57
|
+
let widgets;
|
|
58
58
|
const widgetsResponse = await runtime.query(WIDGETS_MANIFEST_PATH);
|
|
59
59
|
if (widgetsResponse.status !== 404) {
|
|
60
60
|
const entries = await widgetsResponse.json();
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
widgets = await Emroute.importWidgets(entries, runtime);
|
|
62
|
+
}
|
|
63
|
+
if (config.widgets) {
|
|
64
|
+
if (!widgets)
|
|
65
|
+
widgets = new WidgetRegistry();
|
|
66
|
+
for (const w of config.widgets)
|
|
67
|
+
widgets.add(w);
|
|
64
68
|
}
|
|
65
69
|
// ── Renderers ─────────────────────────────────────────────────────
|
|
66
70
|
let ssrHtmlRenderer = null;
|
|
@@ -77,10 +81,7 @@ export class Emroute {
|
|
|
77
81
|
// ── HTML shell ────────────────────────────────────────────────────
|
|
78
82
|
const title = config.title ?? 'emroute';
|
|
79
83
|
const shellBase = (spa === 'root' || spa === 'only') ? appBase : htmlBase;
|
|
80
|
-
|
|
81
|
-
if ((await runtime.query('/main.css')).status !== 404) {
|
|
82
|
-
shell = shell.replace('</head>', ' <link rel="stylesheet" href="/main.css">\n</head>');
|
|
83
|
-
}
|
|
84
|
+
const shell = await Emroute.resolveShell(runtime, title, shellBase, spa);
|
|
84
85
|
return new Emroute(ssrHtmlRenderer, ssrMdRenderer, shell, runtime, htmlBase, mdBase, appBase, spa, title);
|
|
85
86
|
}
|
|
86
87
|
// ── handleRequest ─────────────────────────────────────────────────
|
|
@@ -149,13 +150,13 @@ export class Emroute {
|
|
|
149
150
|
headers: { 'Content-Type': 'text/html; charset=utf-8' },
|
|
150
151
|
});
|
|
151
152
|
}
|
|
152
|
-
// Unhandled SSR paths in 'only' mode —
|
|
153
|
+
// Unhandled SSR paths in 'only' mode — redirect to /app/
|
|
153
154
|
if (pathname.startsWith(htmlPrefix) || pathname === this.htmlBase ||
|
|
154
155
|
pathname.startsWith(mdPrefix) || pathname === this.mdBase) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
156
|
+
const routePath = pathname.startsWith(htmlPrefix) ? pathname.slice(this.htmlBase.length)
|
|
157
|
+
: pathname.startsWith(mdPrefix) ? pathname.slice(this.mdBase.length)
|
|
158
|
+
: '/';
|
|
159
|
+
return Response.redirect(new URL(this.appBase + routePath + (url.search || ''), url.origin), 302);
|
|
159
160
|
}
|
|
160
161
|
// Static files
|
|
161
162
|
const lastSegment = pathname.split('/').pop() ?? '';
|
|
@@ -203,18 +204,35 @@ export class Emroute {
|
|
|
203
204
|
}
|
|
204
205
|
return registry;
|
|
205
206
|
}
|
|
206
|
-
static buildHtmlShell(title,
|
|
207
|
-
const baseTag =
|
|
207
|
+
static async buildHtmlShell(runtime, title, basePath, spa) {
|
|
208
|
+
const baseTag = basePath ? `\n <base href="${escapeHtml(basePath)}/">` : '';
|
|
209
|
+
let cssTag = '';
|
|
210
|
+
if ((await runtime.query('/main.css')).status !== 404) {
|
|
211
|
+
cssTag = '\n <link rel="stylesheet" href="/main.css">';
|
|
212
|
+
}
|
|
213
|
+
const needsJs = spa !== 'none';
|
|
214
|
+
let importMapHtml = '';
|
|
215
|
+
if (needsJs) {
|
|
216
|
+
const mapResponse = await runtime.query('/importmap.json');
|
|
217
|
+
if (mapResponse.status !== 404) {
|
|
218
|
+
const importMap = await mapResponse.text();
|
|
219
|
+
importMapHtml = `\n <script type="importmap">\n${importMap}\n </script>`;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
let scriptHtml = '';
|
|
223
|
+
if (needsJs && (await runtime.query('/app.js')).status !== 404) {
|
|
224
|
+
scriptHtml = '\n <script type="module" src="/app.js"></script>';
|
|
225
|
+
}
|
|
208
226
|
return `<!DOCTYPE html>
|
|
209
227
|
<html>
|
|
210
228
|
<head>${baseTag}
|
|
211
229
|
<meta charset="utf-8">
|
|
212
230
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
213
231
|
<title>${escapeHtml(title)}</title>
|
|
214
|
-
<style>@view-transition { navigation: auto; } router-slot { display: contents; }</style
|
|
232
|
+
<style>@view-transition { navigation: auto; } router-slot { display: contents; }</style>${cssTag}
|
|
215
233
|
</head>
|
|
216
234
|
<body>
|
|
217
|
-
<router-slot></router-slot
|
|
235
|
+
<router-slot></router-slot>${importMapHtml}${scriptHtml}
|
|
218
236
|
</body>
|
|
219
237
|
</html>`;
|
|
220
238
|
}
|
|
@@ -229,11 +247,11 @@ export class Emroute {
|
|
|
229
247
|
}
|
|
230
248
|
return html;
|
|
231
249
|
}
|
|
232
|
-
static async resolveShell(runtime, title,
|
|
250
|
+
static async resolveShell(runtime, title, basePath, spa) {
|
|
233
251
|
const response = await runtime.query('/index.html');
|
|
234
252
|
if (response.status !== 404)
|
|
235
253
|
return await response.text();
|
|
236
|
-
return Emroute.buildHtmlShell(title,
|
|
254
|
+
return Emroute.buildHtmlShell(runtime, title, basePath, spa);
|
|
237
255
|
}
|
|
238
256
|
}
|
|
239
257
|
//# sourceMappingURL=emroute.server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emroute.server.js","sourceRoot":"","sources":["../../../core/server/emroute.server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"emroute.server.js","sourceRoot":"","sources":["../../../core/server/emroute.server.ts"],"names":[],"mappings":"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"}
|