@emkodev/emroute 1.12.3 → 1.12.5
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/server/emroute.server.ts +32 -16
- package/dist/core/server/emroute.server.d.ts +14 -1
- package/dist/core/server/emroute.server.js +18 -11
- package/dist/core/server/emroute.server.js.map +1 -1
- package/dist/emroute.js +11 -19
- package/dist/emroute.js.map +5 -5
- package/dist/runtime/abstract.runtime.js +6 -8
- package/dist/runtime/abstract.runtime.js.map +1 -1
- package/dist/runtime/bun/fs/bun-fs.runtime.js +9 -5
- package/dist/runtime/bun/fs/bun-fs.runtime.js.map +1 -1
- package/dist/server/emroute.server.d.ts +1 -1
- package/dist/server/emroute.server.js.map +1 -1
- package/dist/src/renderer/spa/emroute.app.js +1 -0
- package/dist/src/renderer/spa/emroute.app.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +3 -1
- package/runtime/abstract.runtime.ts +6 -10
- package/runtime/bun/fs/bun-fs.runtime.ts +10 -5
- package/server/emroute.server.ts +1 -1
- package/src/renderer/spa/emroute.app.ts +1 -0
|
@@ -23,6 +23,14 @@ import {
|
|
|
23
23
|
export const DEFAULT_BASE_PATH = { html: '/html', md: '/md', app: '/app' };
|
|
24
24
|
export type BasePath = Record<keyof typeof DEFAULT_BASE_PATH, string>;
|
|
25
25
|
|
|
26
|
+
/** Context passed to the `shell` function in `Emroute.create()`. */
|
|
27
|
+
export interface ShellContext {
|
|
28
|
+
runtime: Runtime;
|
|
29
|
+
spa: SpaMode;
|
|
30
|
+
basePath: BasePath;
|
|
31
|
+
title: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
26
34
|
export class Emroute {
|
|
27
35
|
readonly htmlRenderer: SsrHtmlRenderer | null;
|
|
28
36
|
readonly mdRenderer: SsrMdRenderer | null;
|
|
@@ -55,6 +63,7 @@ export class Emroute {
|
|
|
55
63
|
markdownRenderer?: MarkdownRenderer;
|
|
56
64
|
extendContext?: ContextProvider;
|
|
57
65
|
moduleLoaders?: Record<string, () => Promise<unknown>>;
|
|
66
|
+
shell?: (context: ShellContext) => string | Promise<string>;
|
|
58
67
|
},
|
|
59
68
|
runtime: Runtime,
|
|
60
69
|
): Promise<Emroute> {
|
|
@@ -62,19 +71,18 @@ export class Emroute {
|
|
|
62
71
|
const { html: htmlBase, md: mdBase, app: appBase } = config.basePath ?? DEFAULT_BASE_PATH;
|
|
63
72
|
|
|
64
73
|
// ── Verify route manifest exists ──────────────────────────────────
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
});
|
|
74
|
+
// When the caller supplies a routeTree (e.g. SPA boot already fetched
|
|
75
|
+
// the manifest), skip the verify-fetch — it's a redundant round-trip
|
|
76
|
+
// on every cold load.
|
|
77
|
+
|
|
78
|
+
if (!config.routeTree) {
|
|
79
|
+
const manifestResponse = await runtime.query(ROUTES_MANIFEST_PATH);
|
|
80
|
+
if (manifestResponse.status === 404) {
|
|
81
|
+
throw new Error(
|
|
82
|
+
`[emroute] ${ROUTES_MANIFEST_PATH} not found in runtime. ` +
|
|
83
|
+
'Provide routeTree in config or ensure the runtime produces it.',
|
|
84
|
+
);
|
|
85
|
+
}
|
|
78
86
|
}
|
|
79
87
|
|
|
80
88
|
// ── Pipeline ──────────────────────────────────────────────────────
|
|
@@ -101,8 +109,11 @@ export class Emroute {
|
|
|
101
109
|
// ── HTML shell ────────────────────────────────────────────────────
|
|
102
110
|
|
|
103
111
|
const title = config.title ?? 'emroute';
|
|
104
|
-
const
|
|
105
|
-
const shell =
|
|
112
|
+
const fullBasePath = config.basePath ?? DEFAULT_BASE_PATH;
|
|
113
|
+
const shell = config.shell
|
|
114
|
+
? await config.shell({ runtime, spa, basePath: fullBasePath, title })
|
|
115
|
+
: await Emroute.resolveShell(runtime, title,
|
|
116
|
+
(spa === 'root' || spa === 'only') ? appBase : htmlBase, spa);
|
|
106
117
|
|
|
107
118
|
return new Emroute(
|
|
108
119
|
ssrHtmlRenderer,
|
|
@@ -221,7 +232,12 @@ export class Emroute {
|
|
|
221
232
|
|
|
222
233
|
// ── Private static helpers ────────────────────────────────────────
|
|
223
234
|
|
|
224
|
-
|
|
235
|
+
/**
|
|
236
|
+
* Build the default HTML shell by probing the runtime for optional assets
|
|
237
|
+
* (/manifest.json, /main.css, /importmap.json, /app.js).
|
|
238
|
+
* Public so consumers can call it from a custom `shell` function.
|
|
239
|
+
*/
|
|
240
|
+
static async buildHtmlShell(
|
|
225
241
|
runtime: Runtime,
|
|
226
242
|
title: string,
|
|
227
243
|
basePath: string,
|
|
@@ -17,6 +17,13 @@ export declare const DEFAULT_BASE_PATH: {
|
|
|
17
17
|
app: string;
|
|
18
18
|
};
|
|
19
19
|
export type BasePath = Record<keyof typeof DEFAULT_BASE_PATH, string>;
|
|
20
|
+
/** Context passed to the `shell` function in `Emroute.create()`. */
|
|
21
|
+
export interface ShellContext {
|
|
22
|
+
runtime: Runtime;
|
|
23
|
+
spa: SpaMode;
|
|
24
|
+
basePath: BasePath;
|
|
25
|
+
title: string;
|
|
26
|
+
}
|
|
20
27
|
export declare class Emroute {
|
|
21
28
|
private readonly runtime;
|
|
22
29
|
private readonly htmlBase;
|
|
@@ -38,9 +45,15 @@ export declare class Emroute {
|
|
|
38
45
|
markdownRenderer?: MarkdownRenderer;
|
|
39
46
|
extendContext?: ContextProvider;
|
|
40
47
|
moduleLoaders?: Record<string, () => Promise<unknown>>;
|
|
48
|
+
shell?: (context: ShellContext) => string | Promise<string>;
|
|
41
49
|
}, runtime: Runtime): Promise<Emroute>;
|
|
42
50
|
handleRequest(req: Request): Promise<Response | null>;
|
|
43
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Build the default HTML shell by probing the runtime for optional assets
|
|
53
|
+
* (/manifest.json, /main.css, /importmap.json, /app.js).
|
|
54
|
+
* Public so consumers can call it from a custom `shell` function.
|
|
55
|
+
*/
|
|
56
|
+
static buildHtmlShell(runtime: Runtime, title: string, basePath: string, spa: SpaMode): Promise<string>;
|
|
44
57
|
private static injectSsrContent;
|
|
45
58
|
private static resolveShell;
|
|
46
59
|
}
|
|
@@ -36,15 +36,15 @@ export class Emroute {
|
|
|
36
36
|
const { spa = 'root' } = config;
|
|
37
37
|
const { html: htmlBase, md: mdBase, app: appBase } = config.basePath ?? DEFAULT_BASE_PATH;
|
|
38
38
|
// ── Verify route manifest exists ──────────────────────────────────
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
39
|
+
// When the caller supplies a routeTree (e.g. SPA boot already fetched
|
|
40
|
+
// the manifest), skip the verify-fetch — it's a redundant round-trip
|
|
41
|
+
// on every cold load.
|
|
42
|
+
if (!config.routeTree) {
|
|
43
|
+
const manifestResponse = await runtime.query(ROUTES_MANIFEST_PATH);
|
|
44
|
+
if (manifestResponse.status === 404) {
|
|
45
|
+
throw new Error(`[emroute] ${ROUTES_MANIFEST_PATH} not found in runtime. ` +
|
|
46
|
+
'Provide routeTree in config or ensure the runtime produces it.');
|
|
47
|
+
}
|
|
48
48
|
}
|
|
49
49
|
// ── Pipeline ──────────────────────────────────────────────────────
|
|
50
50
|
const pipeline = new Pipeline({
|
|
@@ -63,8 +63,10 @@ export class Emroute {
|
|
|
63
63
|
}
|
|
64
64
|
// ── HTML shell ────────────────────────────────────────────────────
|
|
65
65
|
const title = config.title ?? 'emroute';
|
|
66
|
-
const
|
|
67
|
-
const shell =
|
|
66
|
+
const fullBasePath = config.basePath ?? DEFAULT_BASE_PATH;
|
|
67
|
+
const shell = config.shell
|
|
68
|
+
? await config.shell({ runtime, spa, basePath: fullBasePath, title })
|
|
69
|
+
: await Emroute.resolveShell(runtime, title, (spa === 'root' || spa === 'only') ? appBase : htmlBase, spa);
|
|
68
70
|
return new Emroute(ssrHtmlRenderer, ssrMdRenderer, shell, runtime, htmlBase, mdBase, appBase, spa, title);
|
|
69
71
|
}
|
|
70
72
|
// ── handleRequest ─────────────────────────────────────────────────
|
|
@@ -155,6 +157,11 @@ export class Emroute {
|
|
|
155
157
|
return Response.redirect(new URL(`${base}/${bare}`, url.origin), 302);
|
|
156
158
|
}
|
|
157
159
|
// ── Private static helpers ────────────────────────────────────────
|
|
160
|
+
/**
|
|
161
|
+
* Build the default HTML shell by probing the runtime for optional assets
|
|
162
|
+
* (/manifest.json, /main.css, /importmap.json, /app.js).
|
|
163
|
+
* Public so consumers can call it from a custom `shell` function.
|
|
164
|
+
*/
|
|
158
165
|
static async buildHtmlShell(runtime, title, basePath, spa) {
|
|
159
166
|
const baseTag = basePath ? `\n <base href="${escapeHtml(basePath)}/">` : '';
|
|
160
167
|
let manifestTag = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emroute.server.js","sourceRoot":"","sources":["../../../core/server/emroute.server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,OAAO,EACL,oBAAoB,GAErB,MAAM,gCAAgC,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"emroute.server.js","sourceRoot":"","sources":["../../../core/server/emroute.server.ts"],"names":[],"mappings":"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"}
|
package/dist/emroute.js
CHANGED
|
@@ -1504,14 +1504,11 @@ class Emroute {
|
|
|
1504
1504
|
static async create(config, runtime) {
|
|
1505
1505
|
const { spa = "root" } = config;
|
|
1506
1506
|
const { html: htmlBase, md: mdBase, app: appBase } = config.basePath ?? DEFAULT_BASE_PATH;
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
await runtime.command(ROUTES_MANIFEST_PATH, {
|
|
1513
|
-
body: JSON.stringify(config.routeTree)
|
|
1514
|
-
});
|
|
1507
|
+
if (!config.routeTree) {
|
|
1508
|
+
const manifestResponse = await runtime.query(ROUTES_MANIFEST_PATH);
|
|
1509
|
+
if (manifestResponse.status === 404) {
|
|
1510
|
+
throw new Error(`[emroute] ${ROUTES_MANIFEST_PATH} not found in runtime. ` + "Provide routeTree in config or ensure the runtime produces it.");
|
|
1511
|
+
}
|
|
1515
1512
|
}
|
|
1516
1513
|
const pipeline = new Pipeline({
|
|
1517
1514
|
runtime,
|
|
@@ -1527,8 +1524,8 @@ class Emroute {
|
|
|
1527
1524
|
ssrMdRenderer = new SsrMdRenderer(pipeline);
|
|
1528
1525
|
}
|
|
1529
1526
|
const title = config.title ?? "emroute";
|
|
1530
|
-
const
|
|
1531
|
-
const shell = await Emroute.resolveShell(runtime, title,
|
|
1527
|
+
const fullBasePath = config.basePath ?? DEFAULT_BASE_PATH;
|
|
1528
|
+
const shell = config.shell ? await config.shell({ runtime, spa, basePath: fullBasePath, title }) : await Emroute.resolveShell(runtime, title, spa === "root" || spa === "only" ? appBase : htmlBase, spa);
|
|
1532
1529
|
return new Emroute(ssrHtmlRenderer, ssrMdRenderer, shell, runtime, htmlBase, mdBase, appBase, spa, title);
|
|
1533
1530
|
}
|
|
1534
1531
|
async handleRequest(req) {
|
|
@@ -2133,10 +2130,7 @@ ${entries.join(`,
|
|
|
2133
2130
|
return this.widgetsManifestCache.clone();
|
|
2134
2131
|
const widgetsDir = this.config.widgetsDir ?? DEFAULT_WIDGETS_DIR;
|
|
2135
2132
|
const dirResponse = await this.query(widgetsDir + "/");
|
|
2136
|
-
|
|
2137
|
-
return new Response("Not Found", { status: 404 });
|
|
2138
|
-
}
|
|
2139
|
-
const entries = await this.scanWidgets(widgetsDir, widgetsDir.replace(/^\//, ""));
|
|
2133
|
+
const entries = dirResponse.status === 404 ? [] : await this.scanWidgets(widgetsDir, widgetsDir.replace(/^\//, ""));
|
|
2140
2134
|
this.widgetsManifestCache = Response.json(entries);
|
|
2141
2135
|
return this.widgetsManifestCache.clone();
|
|
2142
2136
|
}
|
|
@@ -2145,10 +2139,7 @@ ${entries.join(`,
|
|
|
2145
2139
|
return this.elementsManifestCache.clone();
|
|
2146
2140
|
const elementsDir = this.config.elementsDir ?? DEFAULT_ELEMENTS_DIR;
|
|
2147
2141
|
const dirResponse = await this.query(elementsDir + "/");
|
|
2148
|
-
|
|
2149
|
-
return new Response("Not Found", { status: 404 });
|
|
2150
|
-
}
|
|
2151
|
-
const entries = await this.scanElements(elementsDir, elementsDir.replace(/^\//, ""));
|
|
2142
|
+
const entries = dirResponse.status === 404 ? [] : await this.scanElements(elementsDir, elementsDir.replace(/^\//, ""));
|
|
2152
2143
|
this.elementsManifestCache = Response.json(entries);
|
|
2153
2144
|
return this.elementsManifestCache.clone();
|
|
2154
2145
|
}
|
|
@@ -2499,6 +2490,7 @@ async function bootEmrouteApp(options) {
|
|
|
2499
2490
|
const server = await Emroute.create({
|
|
2500
2491
|
routeTree,
|
|
2501
2492
|
moduleLoaders,
|
|
2493
|
+
shell: () => document.documentElement.outerHTML,
|
|
2502
2494
|
...mdRenderer ? { markdownRenderer: mdRenderer } : {},
|
|
2503
2495
|
...options?.extendContext ? { extendContext: options.extendContext } : {}
|
|
2504
2496
|
}, runtime);
|
|
@@ -3553,5 +3545,5 @@ export {
|
|
|
3553
3545
|
BreadcrumbWidget
|
|
3554
3546
|
};
|
|
3555
3547
|
|
|
3556
|
-
//# debugId=
|
|
3548
|
+
//# debugId=FEF92BBA44A02CF764756E2164756E21
|
|
3557
3549
|
//# sourceMappingURL=emroute.js.map
|