@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.
Files changed (40) hide show
  1. package/README.md +1 -1
  2. package/core/component/widget.component.ts +3 -8
  3. package/core/util/html.util.ts +1 -1
  4. package/core/util/js.util.ts +8 -0
  5. package/core/util/widget-resolve.util.ts +4 -2
  6. package/dist/core/component/widget.component.js +3 -7
  7. package/dist/core/component/widget.component.js.map +1 -1
  8. package/dist/core/util/html.util.js +1 -1
  9. package/dist/core/util/html.util.js.map +1 -1
  10. package/dist/core/util/js.util.d.ts +5 -0
  11. package/dist/core/util/js.util.js +8 -0
  12. package/dist/core/util/js.util.js.map +1 -0
  13. package/dist/core/util/widget-resolve.util.js +4 -2
  14. package/dist/core/util/widget-resolve.util.js.map +1 -1
  15. package/dist/emroute.js +110 -27
  16. package/dist/emroute.js.map +10 -9
  17. package/dist/runtime/abstract.runtime.d.ts +13 -1
  18. package/dist/runtime/abstract.runtime.js +34 -22
  19. package/dist/runtime/abstract.runtime.js.map +1 -1
  20. package/dist/runtime/bun/fs/bun-fs.runtime.d.ts +4 -0
  21. package/dist/runtime/bun/fs/bun-fs.runtime.js +29 -2
  22. package/dist/runtime/bun/fs/bun-fs.runtime.js.map +1 -1
  23. package/dist/server/build.util.d.ts +5 -9
  24. package/dist/server/build.util.js +17 -54
  25. package/dist/server/build.util.js.map +1 -1
  26. package/dist/server/dev.server.d.ts +25 -0
  27. package/dist/server/dev.server.js +81 -0
  28. package/dist/server/dev.server.js.map +1 -0
  29. package/dist/src/element/component.element.d.ts +12 -0
  30. package/dist/src/element/component.element.js +55 -3
  31. package/dist/src/element/component.element.js.map +1 -1
  32. package/dist/src/util/html.util.d.ts +5 -0
  33. package/dist/src/util/html.util.js +38 -1
  34. package/dist/src/util/html.util.js.map +1 -1
  35. package/package.json +2 -2
  36. package/runtime/abstract.runtime.ts +38 -23
  37. package/runtime/bun/fs/bun-fs.runtime.ts +31 -2
  38. package/server/build.util.ts +17 -55
  39. package/src/element/component.element.ts +63 -3
  40. 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
- return this._innerHTML;
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;IAGW;IAFpB,UAAU,GAAG,EAAE,CAAC;IAExB,YAA4B,IAAoB;QAApB,SAAI,GAAJ,IAAI,CAAgB;IAAG,CAAC;IAEpD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,SAAS,CAAC,KAAa;QACzB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,QAAkC;QAC5D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,GAAG,MAAyB,IAAS,CAAC;IAE7C,aAAa,CAAC,SAAiB;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;GAEG;AACH,MAAM,cAAc;IACV,UAAU,GAAG,EAAE,CAAC;IAChB,WAAW,GAAyB,IAAI,CAAC;IACzC,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAyB,EAAE;QACpD,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,IAAI;YACf,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;YACxC,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,SAAS,CAAC,KAAa;QACzB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAoC,CAAC;IACnD,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU;QACZ,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAU,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,KAAgC,CAAC;IAC1C,CAAC;IAED,YAAY,CAAC,KAAqB;QAChC,IAAI,CAAC,WAAW,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,WAAoC,CAAC;IACnD,CAAC;IAED,YAAY,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,KAAa;QACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,YAAY,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,GAAG,MAAyB,IAAS,CAAC;IAE7C,WAAW,CAAC,IAAU;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW;IAClD,cAAgD,CAAC"}
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.10.0-beta.4",
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.1.2",
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
- // Collect companion files and inline them
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.transpile(tsSource);
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
- return import(this.root + path);
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> {
@@ -1,16 +1,12 @@
1
1
  /**
2
2
  * Build Utilities
3
3
  *
4
- * Standalone client build step extracted from Runtime so that build is a
5
- * separate concern from storage. Call `buildClientBundles()` before
6
- * `Emroute.create()` to produce emroute.js + app.js.
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
- * Route tree and widget manifest are fetched as JSON at boot time by
9
- * `bootEmrouteApp()` no longer compiled into app.js.
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
- * Read a file from runtime as text. Returns undefined if not found.
166
- */
167
- async function readText(runtime: Runtime, path: string): Promise<string | undefined> {
168
- const abs = path.startsWith('/') ? path : '/' + path;
169
- const response = await runtime.query(abs);
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 source = await readText(runtime, tsPath);
186
- if (!source) throw new Error(`[emroute] Module not found: ${tsPath}`);
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: merged });
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
- const companions: { html?: string; md?: string; css?: string } = {};
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, entry.files);
226
+ entry.modulePath = await transpileAndMerge(runtime, entry.modulePath);
265
227
  delete entry.files;
266
228
  }
267
229
  }