@emkodev/emroute 1.10.0-beta.4 → 1.12.0-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/README.md +1 -1
- package/core/component/widget.component.ts +3 -8
- package/core/util/html.util.ts +1 -1
- package/core/util/js.util.ts +8 -0
- package/core/util/widget-resolve.util.ts +4 -2
- package/dist/core/component/widget.component.js +3 -7
- package/dist/core/component/widget.component.js.map +1 -1
- package/dist/core/util/html.util.js +1 -1
- package/dist/core/util/html.util.js.map +1 -1
- package/dist/core/util/js.util.d.ts +5 -0
- package/dist/core/util/js.util.js +8 -0
- package/dist/core/util/js.util.js.map +1 -0
- package/dist/core/util/widget-resolve.util.js +4 -2
- package/dist/core/util/widget-resolve.util.js.map +1 -1
- package/dist/emroute.js +110 -27
- package/dist/emroute.js.map +10 -9
- package/dist/runtime/abstract.runtime.d.ts +13 -1
- package/dist/runtime/abstract.runtime.js +34 -22
- package/dist/runtime/abstract.runtime.js.map +1 -1
- package/dist/runtime/bun/fs/bun-fs.runtime.d.ts +4 -0
- package/dist/runtime/bun/fs/bun-fs.runtime.js +29 -2
- package/dist/runtime/bun/fs/bun-fs.runtime.js.map +1 -1
- package/dist/server/build.util.d.ts +5 -9
- package/dist/server/build.util.js +17 -54
- package/dist/server/build.util.js.map +1 -1
- package/dist/server/dev.server.d.ts +25 -0
- package/dist/server/dev.server.js +81 -0
- package/dist/server/dev.server.js.map +1 -0
- package/dist/src/element/component.element.d.ts +12 -0
- package/dist/src/element/component.element.js +55 -3
- package/dist/src/element/component.element.js.map +1 -1
- package/dist/src/util/html.util.d.ts +5 -0
- package/dist/src/util/html.util.js +38 -1
- package/dist/src/util/html.util.js.map +1 -1
- package/package.json +2 -2
- package/runtime/abstract.runtime.ts +38 -23
- package/runtime/bun/fs/bun-fs.runtime.ts +31 -2
- package/server/build.util.ts +17 -55
- package/src/element/component.element.ts +63 -3
- package/src/util/html.util.ts +46 -1
|
@@ -22,6 +22,8 @@ type WidgetFiles = {
|
|
|
22
22
|
export declare class ComponentElement<TParams, TData> extends HTMLElementBase {
|
|
23
23
|
/** Lazy module loaders keyed by tag name — set by registerLazy(). */
|
|
24
24
|
private static lazyLoaders;
|
|
25
|
+
/** Shared CSSStyleSheet cache — keyed by widget name for cross-instance sharing. */
|
|
26
|
+
private static sheetCache;
|
|
25
27
|
/** App-level context provider set once during router initialization. */
|
|
26
28
|
private static extendContext;
|
|
27
29
|
/**
|
|
@@ -29,6 +31,8 @@ export declare class ComponentElement<TParams, TData> extends HTMLElementBase {
|
|
|
29
31
|
* @deprecated Use `bootEmrouteApp({ extendContext })` instead — it wires both pages and widgets.
|
|
30
32
|
*/
|
|
31
33
|
static setContextProvider(provider: ContextProvider | undefined): void;
|
|
34
|
+
/** Custom state names exposed via ElementInternals for CSS `:state()` matching. */
|
|
35
|
+
private static readonly CUSTOM_STATES;
|
|
32
36
|
private component;
|
|
33
37
|
private effectiveFiles?;
|
|
34
38
|
private params;
|
|
@@ -39,9 +43,12 @@ export declare class ComponentElement<TParams, TData> extends HTMLElementBase {
|
|
|
39
43
|
private deferred;
|
|
40
44
|
private abortController;
|
|
41
45
|
private intersectionObserver;
|
|
46
|
+
private readonly internals;
|
|
42
47
|
/** Promise that resolves with fetched data (available after loadData starts) */
|
|
43
48
|
dataPromise: Promise<TData | null> | null;
|
|
44
49
|
constructor(component: Component<TParams, TData>, files?: WidgetFiles);
|
|
50
|
+
/** Update the CSS-visible custom state via ElementInternals. */
|
|
51
|
+
private setCustomState;
|
|
45
52
|
/**
|
|
46
53
|
* Register a widget as a custom element: `widget-{name}`.
|
|
47
54
|
* Creates a fresh widget instance per DOM element (per-element state).
|
|
@@ -77,6 +84,11 @@ export declare class ComponentElement<TParams, TData> extends HTMLElementBase {
|
|
|
77
84
|
* Returns inlined content from __files (set during lazy module load) directly.
|
|
78
85
|
*/
|
|
79
86
|
private loadFiles;
|
|
87
|
+
/** Base sheet shared by all widgets — host-level defaults. */
|
|
88
|
+
private static baseSheet;
|
|
89
|
+
private static getBaseSheet;
|
|
90
|
+
/** Apply CSS via adoptedStyleSheets with cross-instance sheet sharing. */
|
|
91
|
+
private adoptCss;
|
|
80
92
|
private loadData;
|
|
81
93
|
private setError;
|
|
82
94
|
private signalReady;
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* - Companion file loading (html, md, css)
|
|
9
9
|
* - Loading/error states
|
|
10
10
|
*/
|
|
11
|
-
import { HTMLElementBase } from "../util/html.util.js";
|
|
12
|
-
import { LAZY_ATTR, RESERVED_ATTRS, SSR_ATTR } from "../../core/util/html.util.js";
|
|
11
|
+
import { CSSStyleSheetBase, HTMLElementBase } from "../util/html.util.js";
|
|
12
|
+
import { LAZY_ATTR, RESERVED_ATTRS, SSR_ATTR, scopeWidgetCss } from "../../core/util/html.util.js";
|
|
13
13
|
/** Strip keys with undefined values — returns the filtered object, or undefined if all values are undefined. */
|
|
14
14
|
function filterUndefined(obj) {
|
|
15
15
|
const result = {};
|
|
@@ -29,6 +29,8 @@ function filterUndefined(obj) {
|
|
|
29
29
|
export class ComponentElement extends HTMLElementBase {
|
|
30
30
|
/** Lazy module loaders keyed by tag name — set by registerLazy(). */
|
|
31
31
|
static lazyLoaders = new Map();
|
|
32
|
+
/** Shared CSSStyleSheet cache — keyed by widget name for cross-instance sharing. */
|
|
33
|
+
static sheetCache = new Map();
|
|
32
34
|
/** App-level context provider set once during router initialization. */
|
|
33
35
|
static extendContext;
|
|
34
36
|
/**
|
|
@@ -38,6 +40,8 @@ export class ComponentElement extends HTMLElementBase {
|
|
|
38
40
|
static setContextProvider(provider) {
|
|
39
41
|
ComponentElement.extendContext = provider;
|
|
40
42
|
}
|
|
43
|
+
/** Custom state names exposed via ElementInternals for CSS `:state()` matching. */
|
|
44
|
+
static CUSTOM_STATES = ['lazy', 'loading', 'hydrating', 'ready', 'error'];
|
|
41
45
|
component;
|
|
42
46
|
effectiveFiles;
|
|
43
47
|
params = null;
|
|
@@ -48,18 +52,27 @@ export class ComponentElement extends HTMLElementBase {
|
|
|
48
52
|
deferred = null;
|
|
49
53
|
abortController = null;
|
|
50
54
|
intersectionObserver = null;
|
|
55
|
+
internals;
|
|
51
56
|
/** Promise that resolves with fetched data (available after loadData starts) */
|
|
52
57
|
dataPromise = null;
|
|
53
58
|
constructor(component, files) {
|
|
54
59
|
super();
|
|
55
60
|
this.component = component;
|
|
56
61
|
this.effectiveFiles = files;
|
|
62
|
+
this.internals = this.attachInternals();
|
|
57
63
|
// Attach shadow root if not already present (Declarative Shadow DOM creates it from <template shadowrootmode="open">)
|
|
58
64
|
// This enables progressive enhancement: SSR with DSD works without JS, then hydrates when JS loads
|
|
59
65
|
if (!this.shadowRoot) {
|
|
60
66
|
this.attachShadow({ mode: 'open' });
|
|
61
67
|
}
|
|
62
68
|
}
|
|
69
|
+
/** Update the CSS-visible custom state via ElementInternals. */
|
|
70
|
+
setCustomState(next) {
|
|
71
|
+
for (const s of ComponentElement.CUSTOM_STATES) {
|
|
72
|
+
this.internals.states.delete(s);
|
|
73
|
+
}
|
|
74
|
+
this.internals.states.add(next);
|
|
75
|
+
}
|
|
63
76
|
/**
|
|
64
77
|
* Register a widget as a custom element: `widget-{name}`.
|
|
65
78
|
* Creates a fresh widget instance per DOM element (per-element state).
|
|
@@ -167,7 +180,6 @@ export class ComponentElement extends HTMLElementBase {
|
|
|
167
180
|
}
|
|
168
181
|
}
|
|
169
182
|
this.component.element = this;
|
|
170
|
-
this.style.contentVisibility = 'auto';
|
|
171
183
|
this.abortController = new AbortController();
|
|
172
184
|
const signal = this.abortController.signal;
|
|
173
185
|
// Parse params from element attributes
|
|
@@ -206,9 +218,12 @@ export class ComponentElement extends HTMLElementBase {
|
|
|
206
218
|
...(filteredFiles ? { files: filteredFiles } : {}),
|
|
207
219
|
};
|
|
208
220
|
this.context = ComponentElement.extendContext ? ComponentElement.extendContext(base) : base;
|
|
221
|
+
// Apply CSS via adoptedStyleSheets (shared across instances)
|
|
222
|
+
this.adoptCss();
|
|
209
223
|
// Hydrate from SSR: adopt content from Declarative Shadow DOM
|
|
210
224
|
if (this.hasAttribute(SSR_ATTR)) {
|
|
211
225
|
this.removeAttribute(SSR_ATTR);
|
|
226
|
+
this.setCustomState('hydrating');
|
|
212
227
|
// Read SSR data from light DOM (JSON text placed alongside shadow root)
|
|
213
228
|
const lightText = this.textContent?.trim();
|
|
214
229
|
if (lightText) {
|
|
@@ -227,13 +242,18 @@ export class ComponentElement extends HTMLElementBase {
|
|
|
227
242
|
const args = { data: this.data, params: this.params, context: this.context };
|
|
228
243
|
queueMicrotask(() => {
|
|
229
244
|
this.component.hydrate(args);
|
|
245
|
+
this.setCustomState('ready');
|
|
230
246
|
});
|
|
231
247
|
}
|
|
248
|
+
else {
|
|
249
|
+
this.setCustomState('ready');
|
|
250
|
+
}
|
|
232
251
|
this.signalReady();
|
|
233
252
|
return;
|
|
234
253
|
}
|
|
235
254
|
// Lazy: defer loadData until element is visible
|
|
236
255
|
if (this.hasAttribute(LAZY_ATTR)) {
|
|
256
|
+
this.setCustomState('lazy');
|
|
237
257
|
this.intersectionObserver = new IntersectionObserver((entries) => {
|
|
238
258
|
const entry = entries[0];
|
|
239
259
|
if (entry.isIntersecting) {
|
|
@@ -255,6 +275,9 @@ export class ComponentElement extends HTMLElementBase {
|
|
|
255
275
|
this.abortController?.abort();
|
|
256
276
|
this.abortController = null;
|
|
257
277
|
this.state = 'idle';
|
|
278
|
+
for (const s of ComponentElement.CUSTOM_STATES) {
|
|
279
|
+
this.internals.states.delete(s);
|
|
280
|
+
}
|
|
258
281
|
this.data = null;
|
|
259
282
|
this.context = undefined;
|
|
260
283
|
this.dataPromise = null;
|
|
@@ -280,11 +303,38 @@ export class ComponentElement extends HTMLElementBase {
|
|
|
280
303
|
async loadFiles() {
|
|
281
304
|
return this.effectiveFiles ?? {};
|
|
282
305
|
}
|
|
306
|
+
/** Base sheet shared by all widgets — host-level defaults. */
|
|
307
|
+
static baseSheet = null;
|
|
308
|
+
static getBaseSheet() {
|
|
309
|
+
if (!ComponentElement.baseSheet) {
|
|
310
|
+
ComponentElement.baseSheet = new CSSStyleSheetBase();
|
|
311
|
+
ComponentElement.baseSheet.replaceSync(':host { container-type: inline-size; content-visibility: auto; }');
|
|
312
|
+
}
|
|
313
|
+
return ComponentElement.baseSheet;
|
|
314
|
+
}
|
|
315
|
+
/** Apply CSS via adoptedStyleSheets with cross-instance sheet sharing. */
|
|
316
|
+
adoptCss() {
|
|
317
|
+
const css = this.effectiveFiles?.css;
|
|
318
|
+
const base = ComponentElement.getBaseSheet();
|
|
319
|
+
if (!css) {
|
|
320
|
+
this.shadowRoot.adoptedStyleSheets = [base];
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
const name = this.component.name;
|
|
324
|
+
let sheet = ComponentElement.sheetCache.get(name);
|
|
325
|
+
if (!sheet) {
|
|
326
|
+
sheet = new CSSStyleSheetBase();
|
|
327
|
+
sheet.replaceSync(scopeWidgetCss(css, name));
|
|
328
|
+
ComponentElement.sheetCache.set(name, sheet);
|
|
329
|
+
}
|
|
330
|
+
this.shadowRoot.adoptedStyleSheets = [base, sheet];
|
|
331
|
+
}
|
|
283
332
|
async loadData() {
|
|
284
333
|
if (this.params === null)
|
|
285
334
|
return;
|
|
286
335
|
const signal = this.abortController?.signal;
|
|
287
336
|
this.state = 'loading';
|
|
337
|
+
this.setCustomState('loading');
|
|
288
338
|
this.render();
|
|
289
339
|
try {
|
|
290
340
|
const promise = this.component.getData({
|
|
@@ -298,6 +348,7 @@ export class ComponentElement extends HTMLElementBase {
|
|
|
298
348
|
if (signal?.aborted)
|
|
299
349
|
return;
|
|
300
350
|
this.state = 'ready';
|
|
351
|
+
this.setCustomState('ready');
|
|
301
352
|
}
|
|
302
353
|
catch (e) {
|
|
303
354
|
if (e instanceof DOMException && e.name === 'AbortError')
|
|
@@ -312,6 +363,7 @@ export class ComponentElement extends HTMLElementBase {
|
|
|
312
363
|
}
|
|
313
364
|
setError(message) {
|
|
314
365
|
this.state = 'error';
|
|
366
|
+
this.setCustomState('error');
|
|
315
367
|
this.errorMessage = message;
|
|
316
368
|
this.render();
|
|
317
369
|
this.signalReady(); // Ready even on error (completed loading)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.element.js","sourceRoot":"","sources":["../../../src/element/component.element.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component.element.js","sourceRoot":"","sources":["../../../src/element/component.element.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* SSR-compatible HTMLElement mock.
|
|
6
6
|
*/
|
|
7
7
|
export { SSR_ATTR, LAZY_ATTR, assertSafeRedirect, escapeHtml, unescapeHtml, scopeWidgetCss, STATUS_MESSAGES, } from '../../core/util/html.util.ts';
|
|
8
|
+
/** Server-safe CSSStyleSheet: real in browser, mock on server. */
|
|
9
|
+
export declare const CSSStyleSheetBase: {
|
|
10
|
+
new (options?: CSSStyleSheetInit): CSSStyleSheet;
|
|
11
|
+
prototype: CSSStyleSheet;
|
|
12
|
+
};
|
|
8
13
|
/** Server-safe base class: HTMLElement in browser, SSR mock on server. */
|
|
9
14
|
export declare const HTMLElementBase: {
|
|
10
15
|
new (): HTMLElement;
|
|
@@ -6,17 +6,45 @@
|
|
|
6
6
|
*/
|
|
7
7
|
// Re-export everything from core
|
|
8
8
|
export { SSR_ATTR, LAZY_ATTR, assertSafeRedirect, escapeHtml, unescapeHtml, scopeWidgetCss, STATUS_MESSAGES, } from "../../core/util/html.util.js";
|
|
9
|
+
/**
|
|
10
|
+
* SSR-compatible CSSStyleSheet mock.
|
|
11
|
+
* Stores cssText for serialization into <style> tags during SSR.
|
|
12
|
+
*/
|
|
13
|
+
class SsrCSSStyleSheet {
|
|
14
|
+
cssText = '';
|
|
15
|
+
replaceSync(css) {
|
|
16
|
+
this.cssText = css;
|
|
17
|
+
}
|
|
18
|
+
replace(css) {
|
|
19
|
+
this.cssText = css;
|
|
20
|
+
return Promise.resolve(this);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Server-safe CSSStyleSheet: real in browser, mock on server. */
|
|
24
|
+
export const CSSStyleSheetBase = globalThis.CSSStyleSheet ??
|
|
25
|
+
SsrCSSStyleSheet;
|
|
9
26
|
/**
|
|
10
27
|
* SSR-compatible ShadowRoot mock.
|
|
11
28
|
*/
|
|
12
29
|
class SsrShadowRoot {
|
|
13
30
|
host;
|
|
14
31
|
_innerHTML = '';
|
|
32
|
+
_adoptedStyleSheets = [];
|
|
15
33
|
constructor(host) {
|
|
16
34
|
this.host = host;
|
|
17
35
|
}
|
|
36
|
+
get adoptedStyleSheets() {
|
|
37
|
+
return this._adoptedStyleSheets;
|
|
38
|
+
}
|
|
39
|
+
set adoptedStyleSheets(sheets) {
|
|
40
|
+
this._adoptedStyleSheets = sheets;
|
|
41
|
+
}
|
|
18
42
|
get innerHTML() {
|
|
19
|
-
|
|
43
|
+
const adopted = this._adoptedStyleSheets
|
|
44
|
+
.filter(s => s.cssText)
|
|
45
|
+
.map(s => `<style>${s.cssText}</style>`)
|
|
46
|
+
.join('');
|
|
47
|
+
return adopted + this._innerHTML;
|
|
20
48
|
}
|
|
21
49
|
set innerHTML(value) {
|
|
22
50
|
this._innerHTML = value;
|
|
@@ -38,6 +66,12 @@ class SsrShadowRoot {
|
|
|
38
66
|
return null;
|
|
39
67
|
}
|
|
40
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* SSR-compatible ElementInternals mock.
|
|
71
|
+
*/
|
|
72
|
+
class SsrElementInternals {
|
|
73
|
+
states = new Set();
|
|
74
|
+
}
|
|
41
75
|
/**
|
|
42
76
|
* SSR-compatible HTMLElement mock.
|
|
43
77
|
*/
|
|
@@ -81,6 +115,9 @@ class SsrHTMLElement {
|
|
|
81
115
|
this._shadowRoot = new SsrShadowRoot(this);
|
|
82
116
|
return this._shadowRoot;
|
|
83
117
|
}
|
|
118
|
+
attachInternals() {
|
|
119
|
+
return new SsrElementInternals();
|
|
120
|
+
}
|
|
84
121
|
getAttribute(name) {
|
|
85
122
|
return this._attributes.get(name) ?? null;
|
|
86
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.util.js","sourceRoot":"","sources":["../../../src/util/html.util.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iCAAiC;AACjC,OAAO,EACL,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAEtC;;GAEG;AACH,MAAM,aAAa;
|
|
1
|
+
{"version":3,"file":"html.util.js","sourceRoot":"","sources":["../../../src/util/html.util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@emkodev/emroute",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0-beta.1",
|
|
4
4
|
"description": "File-based (but storage-agnostic) router with triple rendering (SPA, SSR HTML, SSR Markdown). Zero dependencies.",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
6
|
"author": "emko.dev",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
}
|
|
115
115
|
},
|
|
116
116
|
"devDependencies": {
|
|
117
|
-
"@emkodev/emkoma": "^0.
|
|
117
|
+
"@emkodev/emkoma": "^0.3.3",
|
|
118
118
|
"@eslint/js": "^10.0.1",
|
|
119
119
|
"@types/bun": "^1.3.9",
|
|
120
120
|
"eslint": "^10.0.2",
|
|
@@ -2,6 +2,7 @@ import type { RouteNode, RouteFiles } from '../core/type/route-tree.type.ts';
|
|
|
2
2
|
import { resolveTargetNode } from '../core/util/route-tree.util.ts';
|
|
3
3
|
import type { WidgetManifestEntry } from '../core/type/widget.type.ts';
|
|
4
4
|
import type { ElementManifestEntry } from '../core/type/element.type.ts';
|
|
5
|
+
import { escapeTemplateLiteral } from '../core/util/js.util.ts';
|
|
5
6
|
|
|
6
7
|
export const CONTENT_TYPES: Map<string, string> = new Map<string, string>([
|
|
7
8
|
['.html', 'text/html; charset=utf-8'],
|
|
@@ -428,34 +429,14 @@ export abstract class Runtime {
|
|
|
428
429
|
return; // .ts doesn't exist (maybe .js was hand-written)
|
|
429
430
|
}
|
|
430
431
|
|
|
431
|
-
//
|
|
432
|
-
const companionExts = kind === 'element' ? [] : ['html', 'md', 'css'];
|
|
433
|
-
const files: Record<string, string> = {};
|
|
434
|
-
for (const ext of companionExts) {
|
|
435
|
-
const companionPath = tsPath.replace(/\.ts$/, `.${ext}`);
|
|
436
|
-
try {
|
|
437
|
-
files[ext] = await this.query(companionPath, { as: 'text' });
|
|
438
|
-
} catch {
|
|
439
|
-
// companion doesn't exist — skip
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
// Transpile
|
|
432
|
+
// Transpile and inline companions
|
|
444
433
|
let jsCode: string;
|
|
445
434
|
try {
|
|
446
|
-
jsCode = await this.
|
|
435
|
+
jsCode = await this.transpileModule(tsPath, tsSource);
|
|
447
436
|
} catch {
|
|
448
437
|
return; // transpile not implemented — skip silently
|
|
449
438
|
}
|
|
450
439
|
|
|
451
|
-
// Append __files export if there are companions
|
|
452
|
-
if (Object.keys(files).length > 0) {
|
|
453
|
-
const entries = Object.entries(files)
|
|
454
|
-
.map(([k, v]) => `${k}: \`${v.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$/g, '\\$')}\``)
|
|
455
|
-
.join(', ');
|
|
456
|
-
jsCode += `\nexport const __files = { ${entries} };\n`;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
440
|
await this.handle(jsPath, { method: 'PUT', body: jsCode });
|
|
460
441
|
}
|
|
461
442
|
|
|
@@ -469,12 +450,46 @@ export abstract class Runtime {
|
|
|
469
450
|
|
|
470
451
|
/**
|
|
471
452
|
* Transpile TypeScript source to JavaScript.
|
|
472
|
-
* Used by the build step to produce browser-loadable .js modules.
|
|
473
453
|
*/
|
|
474
454
|
transpile(_source: string): Promise<string> {
|
|
475
455
|
throw new Error(`transpile not implemented for ${this.constructor.name}`);
|
|
476
456
|
}
|
|
477
457
|
|
|
458
|
+
/**
|
|
459
|
+
* Transpile a .ts module and inline companion files (.html, .md, .css)
|
|
460
|
+
* as `export const __files = { ... }`.
|
|
461
|
+
*
|
|
462
|
+
* This is the single implementation of the transpile+merge operation.
|
|
463
|
+
* Used by concrete runtimes in their serving path (e.g. BunFsRuntime
|
|
464
|
+
* intercepts .ts in read()) and by retranspileIfNeeded() to keep
|
|
465
|
+
* pre-built .js artifacts in sync after command() writes.
|
|
466
|
+
*
|
|
467
|
+
* @param path Virtual path (e.g. "/widgets/nav.widget.ts")
|
|
468
|
+
* @param source Raw TypeScript source
|
|
469
|
+
*/
|
|
470
|
+
protected async transpileModule(path: string, source: string): Promise<string> {
|
|
471
|
+
let js = await this.transpile(source);
|
|
472
|
+
|
|
473
|
+
const basePath = path.replace(/\.ts$/, '');
|
|
474
|
+
const companions = ['html', 'md', 'css'] as const;
|
|
475
|
+
const entries: string[] = [];
|
|
476
|
+
|
|
477
|
+
for (const ext of companions) {
|
|
478
|
+
try {
|
|
479
|
+
const content = await this.query(basePath + '.' + ext, { as: 'text' });
|
|
480
|
+
entries.push(` ${ext}: \`${escapeTemplateLiteral(content)}\``);
|
|
481
|
+
} catch {
|
|
482
|
+
// companion doesn't exist
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
if (entries.length > 0) {
|
|
487
|
+
js += `\nexport const __files = {\n${entries.join(',\n')}\n};\n`;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
return js;
|
|
491
|
+
}
|
|
492
|
+
|
|
478
493
|
/**
|
|
479
494
|
* Parse a widget file path and merge it into the stored manifest.
|
|
480
495
|
* Reads the current manifest, upserts the entry, writes it back.
|
|
@@ -85,6 +85,11 @@ export class BunFsRuntime extends Runtime {
|
|
|
85
85
|
return this.list(path);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
// Serve .ts as transpiled JavaScript with merged companion files.
|
|
89
|
+
if (path.endsWith('.ts')) {
|
|
90
|
+
return this.serveTranspiled(path);
|
|
91
|
+
}
|
|
92
|
+
|
|
88
93
|
const content = new Uint8Array(await Bun.file(path).arrayBuffer());
|
|
89
94
|
const ext = path.slice(path.lastIndexOf('.')).toLowerCase();
|
|
90
95
|
const headers: HeadersInit = {
|
|
@@ -109,6 +114,20 @@ export class BunFsRuntime extends Runtime {
|
|
|
109
114
|
}
|
|
110
115
|
}
|
|
111
116
|
|
|
117
|
+
/**
|
|
118
|
+
* Serve a .ts file as transpiled JavaScript with companion files inlined.
|
|
119
|
+
*/
|
|
120
|
+
private async serveTranspiled(path: string): Promise<Response> {
|
|
121
|
+
const source = await Bun.file(path).text();
|
|
122
|
+
const virtualPath = path.slice(this.root.length);
|
|
123
|
+
const js = await this.transpileModule(virtualPath, source);
|
|
124
|
+
|
|
125
|
+
return new Response(js, {
|
|
126
|
+
status: 200,
|
|
127
|
+
headers: { 'Content-Type': 'application/javascript; charset=utf-8' },
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
112
131
|
private async list(path: string): Promise<Response> {
|
|
113
132
|
const entries: string[] = [];
|
|
114
133
|
const dirents = await readdir(path, { withFileTypes: true });
|
|
@@ -144,8 +163,18 @@ export class BunFsRuntime extends Runtime {
|
|
|
144
163
|
}
|
|
145
164
|
}
|
|
146
165
|
|
|
147
|
-
override loadModule(path: string): Promise<unknown> {
|
|
148
|
-
|
|
166
|
+
override async loadModule(path: string): Promise<unknown> {
|
|
167
|
+
let source = await Bun.file(this.root + path).text();
|
|
168
|
+
if (path.endsWith('.ts')) {
|
|
169
|
+
source = await this.transpile(source);
|
|
170
|
+
}
|
|
171
|
+
const blob = new Blob([source], { type: 'application/javascript' });
|
|
172
|
+
const url = URL.createObjectURL(blob);
|
|
173
|
+
try {
|
|
174
|
+
return await import(url);
|
|
175
|
+
} finally {
|
|
176
|
+
URL.revokeObjectURL(url);
|
|
177
|
+
}
|
|
149
178
|
}
|
|
150
179
|
|
|
151
180
|
override async transpile(source: string): Promise<string> {
|
package/server/build.util.ts
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build Utilities
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Optional production build step. The runtime serves .ts modules as
|
|
5
|
+
* transpiled JavaScript on the fly — this step pre-computes that output
|
|
6
|
+
* into .js files to avoid per-request transpilation overhead.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* Per-file module merging: each .ts page/widget is transpiled to .js with
|
|
12
|
-
* companion files (.html, .md, .css) inlined as `export const __files`.
|
|
13
|
-
* The browser lazy-loads these individual .js files — no bundler needed.
|
|
8
|
+
* Also produces the SPA shell assets (emroute.js, app.js, importmap.json)
|
|
9
|
+
* required by root/only modes.
|
|
14
10
|
*/
|
|
15
11
|
|
|
16
12
|
import { readFile } from 'node:fs/promises';
|
|
@@ -151,61 +147,31 @@ async function writeImportMap(
|
|
|
151
147
|
|
|
152
148
|
// ── Module merging ───────────────────────────────────────────────────
|
|
153
149
|
|
|
154
|
-
/** Escape backticks and ${} for safe embedding in a JS template literal. */
|
|
155
|
-
function escapeTemplateLiteral(s: string): string {
|
|
156
|
-
return s.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$\{/g, '\\${');
|
|
157
|
-
}
|
|
158
|
-
|
|
159
150
|
/** Convert a .ts path to .js (e.g. "routes/about.page.ts" → "routes/about.page.js"). */
|
|
160
151
|
function tsToJs(path: string): string {
|
|
161
152
|
return path.replace(/\.ts$/, '.js');
|
|
162
153
|
}
|
|
163
154
|
|
|
164
155
|
/**
|
|
165
|
-
*
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if (response.status === 404) return undefined;
|
|
171
|
-
return response.text();
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Transpile a .ts module, inline companion files as `__files` export,
|
|
176
|
-
* and write the resulting .js back to the runtime.
|
|
156
|
+
* Materialize a .ts module as a browser-ready .js file in the runtime.
|
|
157
|
+
*
|
|
158
|
+
* Queries the runtime for the .ts path. The runtime is expected to serve .ts
|
|
159
|
+
* as transpiled JavaScript with companion files inlined — the build step is
|
|
160
|
+
* a pre-computation of what the runtime serves on the fly.
|
|
177
161
|
*
|
|
178
|
-
* Returns the .js output path.
|
|
162
|
+
* Returns the .js output path (same format as the input tsPath).
|
|
179
163
|
*/
|
|
180
164
|
async function transpileAndMerge(
|
|
181
165
|
runtime: Runtime,
|
|
182
166
|
tsPath: string,
|
|
183
|
-
companionPaths?: { html?: string; md?: string; css?: string },
|
|
184
167
|
): Promise<string> {
|
|
185
|
-
const
|
|
186
|
-
|
|
168
|
+
const abs = tsPath.startsWith('/') ? tsPath : '/' + tsPath;
|
|
169
|
+
const response = await runtime.query(abs);
|
|
170
|
+
if (response.status === 404) throw new Error(`[emroute] Module not found: ${tsPath}`);
|
|
187
171
|
|
|
188
|
-
const js = await runtime.transpile(source);
|
|
189
172
|
const jsPath = tsToJs(tsPath);
|
|
190
|
-
|
|
191
|
-
// Read companion files and build __files export
|
|
192
|
-
const entries: string[] = [];
|
|
193
|
-
if (companionPaths) {
|
|
194
|
-
for (const [key, filePath] of Object.entries(companionPaths)) {
|
|
195
|
-
if (!filePath) continue;
|
|
196
|
-
const content = await readText(runtime, filePath);
|
|
197
|
-
if (content !== undefined) {
|
|
198
|
-
entries.push(` ${key}: \`${escapeTemplateLiteral(content)}\``);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
const merged = entries.length > 0
|
|
204
|
-
? `${js}\nexport const __files = {\n${entries.join(',\n')}\n};\n`
|
|
205
|
-
: js;
|
|
206
|
-
|
|
207
173
|
const absJsPath = jsPath.startsWith('/') ? jsPath : '/' + jsPath;
|
|
208
|
-
await runtime.command(absJsPath, { body:
|
|
174
|
+
await runtime.command(absJsPath, { body: await response.text() });
|
|
209
175
|
return jsPath;
|
|
210
176
|
}
|
|
211
177
|
|
|
@@ -228,11 +194,7 @@ async function mergeModules(runtime: Runtime): Promise<void> {
|
|
|
228
194
|
// Merge route modules
|
|
229
195
|
async function walkRoutes(node: RouteNode): Promise<void> {
|
|
230
196
|
if (node.files?.ts) {
|
|
231
|
-
|
|
232
|
-
if (node.files.html) companions.html = node.files.html;
|
|
233
|
-
if (node.files.md) companions.md = node.files.md;
|
|
234
|
-
if (node.files.css) companions.css = node.files.css;
|
|
235
|
-
node.files.js = await transpileAndMerge(runtime, node.files.ts, companions);
|
|
197
|
+
node.files.js = await transpileAndMerge(runtime, node.files.ts);
|
|
236
198
|
delete node.files.ts;
|
|
237
199
|
delete node.files.html;
|
|
238
200
|
delete node.files.md;
|
|
@@ -261,7 +223,7 @@ async function mergeModules(runtime: Runtime): Promise<void> {
|
|
|
261
223
|
// Merge widget modules
|
|
262
224
|
for (const entry of widgetEntries) {
|
|
263
225
|
if (entry.modulePath.endsWith('.ts')) {
|
|
264
|
-
entry.modulePath = await transpileAndMerge(runtime, entry.modulePath
|
|
226
|
+
entry.modulePath = await transpileAndMerge(runtime, entry.modulePath);
|
|
265
227
|
delete entry.files;
|
|
266
228
|
}
|
|
267
229
|
}
|