@emkodev/emroute 1.7.2 → 1.8.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 (236) hide show
  1. package/README.md +1 -1
  2. package/core/component/abstract.component.ts +74 -0
  3. package/{src → core}/component/page.component.ts +3 -61
  4. package/core/component/widget.component.ts +54 -0
  5. package/core/pipeline/pipeline.ts +224 -0
  6. package/{src/renderer/ssr → core/renderer}/html.renderer.ts +19 -45
  7. package/{src/renderer/ssr → core/renderer}/md.renderer.ts +21 -40
  8. package/{src/renderer/ssr → core/renderer}/ssr.renderer.ts +42 -53
  9. package/{src/route → core/router}/route.resolver.ts +1 -10
  10. package/core/router/route.trie.ts +175 -0
  11. package/core/runtime/abstract.runtime.ts +47 -0
  12. package/core/server/emroute.server.ts +346 -0
  13. package/core/type/component.type.ts +39 -0
  14. package/core/type/element.type.ts +10 -0
  15. package/core/type/logger.type.ts +20 -0
  16. package/core/type/markdown.type.ts +8 -0
  17. package/core/type/route-tree.type.ts +28 -0
  18. package/core/type/route.type.ts +75 -0
  19. package/core/type/widget.type.ts +27 -0
  20. package/core/util/html.util.ts +50 -0
  21. package/{src → core}/util/md.util.ts +0 -2
  22. package/{src/route → core/util}/route-tree.util.ts +0 -2
  23. package/{src → core}/util/widget-resolve.util.ts +15 -45
  24. package/{src → core}/widget/widget.parser.ts +0 -21
  25. package/core/widget/widget.registry.ts +24 -0
  26. package/dist/core/component/abstract.component.d.ts +48 -0
  27. package/dist/core/component/abstract.component.js +42 -0
  28. package/dist/core/component/abstract.component.js.map +1 -0
  29. package/dist/core/component/page.component.d.ts +23 -0
  30. package/dist/core/component/page.component.js +49 -0
  31. package/dist/core/component/page.component.js.map +1 -0
  32. package/dist/core/component/widget.component.d.ts +17 -0
  33. package/dist/core/component/widget.component.js +37 -0
  34. package/dist/core/component/widget.component.js.map +1 -0
  35. package/dist/core/pipeline/pipeline.d.ts +61 -0
  36. package/dist/core/pipeline/pipeline.js +189 -0
  37. package/dist/core/pipeline/pipeline.js.map +1 -0
  38. package/dist/{src/renderer/ssr → core/renderer}/html.renderer.d.ts +8 -24
  39. package/dist/{src/renderer/ssr → core/renderer}/html.renderer.js +12 -33
  40. package/dist/core/renderer/html.renderer.js.map +1 -0
  41. package/dist/{src/renderer/ssr → core/renderer}/md.renderer.d.ts +6 -21
  42. package/dist/{src/renderer/ssr → core/renderer}/md.renderer.js +14 -31
  43. package/dist/core/renderer/md.renderer.js.map +1 -0
  44. package/dist/{src/renderer/ssr → core/renderer}/ssr.renderer.d.ts +11 -17
  45. package/dist/{src/renderer/ssr → core/renderer}/ssr.renderer.js +34 -36
  46. package/dist/core/renderer/ssr.renderer.js.map +1 -0
  47. package/dist/{src/route → core/router}/route.resolver.d.ts +1 -8
  48. package/dist/{src/route → core/router}/route.resolver.js +0 -1
  49. package/dist/core/router/route.resolver.js.map +1 -0
  50. package/dist/core/router/route.trie.d.ts +32 -0
  51. package/dist/core/router/route.trie.js +152 -0
  52. package/dist/core/router/route.trie.js.map +1 -0
  53. package/dist/core/runtime/abstract.runtime.d.ts +32 -0
  54. package/dist/core/runtime/abstract.runtime.js +26 -0
  55. package/dist/core/runtime/abstract.runtime.js.map +1 -0
  56. package/dist/core/server/emroute.server.d.ts +48 -0
  57. package/dist/core/server/emroute.server.js +261 -0
  58. package/dist/core/server/emroute.server.js.map +1 -0
  59. package/dist/core/server/server.type.d.ts +45 -0
  60. package/dist/core/server/server.type.js +11 -0
  61. package/dist/core/server/server.type.js.map +1 -0
  62. package/dist/core/type/component.type.d.ts +37 -0
  63. package/dist/core/type/component.type.js +7 -0
  64. package/dist/core/type/component.type.js.map +1 -0
  65. package/dist/core/type/element.type.d.ts +9 -0
  66. package/dist/core/type/element.type.js +5 -0
  67. package/dist/core/type/element.type.js.map +1 -0
  68. package/dist/core/type/logger.type.d.ts +14 -0
  69. package/dist/core/type/logger.type.js +8 -0
  70. package/dist/core/type/logger.type.js.map +1 -0
  71. package/dist/core/type/markdown.type.d.ts +7 -0
  72. package/dist/core/type/markdown.type.js +5 -0
  73. package/dist/core/type/markdown.type.js.map +1 -0
  74. package/dist/{src → core}/type/route-tree.type.d.ts +0 -12
  75. package/dist/{src → core}/type/route-tree.type.js +0 -1
  76. package/dist/core/type/route-tree.type.js.map +1 -0
  77. package/dist/core/type/route.type.d.ts +62 -0
  78. package/dist/core/type/route.type.js +7 -0
  79. package/dist/core/type/route.type.js.map +1 -0
  80. package/dist/core/type/widget.type.d.ts +27 -0
  81. package/dist/core/type/widget.type.js +5 -0
  82. package/dist/core/type/widget.type.js.map +1 -0
  83. package/dist/core/util/html.util.d.ts +14 -0
  84. package/dist/core/util/html.util.js +43 -0
  85. package/dist/core/util/html.util.js.map +1 -0
  86. package/dist/{src → core}/util/md.util.d.ts +0 -1
  87. package/dist/{src → core}/util/md.util.js +0 -2
  88. package/dist/core/util/md.util.js.map +1 -0
  89. package/dist/{src/route → core/util}/route-tree.util.js +0 -2
  90. package/dist/core/util/route-tree.util.js.map +1 -0
  91. package/dist/core/util/widget-resolve.util.d.ts +32 -0
  92. package/dist/{src → core}/util/widget-resolve.util.js +11 -41
  93. package/dist/core/util/widget-resolve.util.js.map +1 -0
  94. package/dist/{src → core}/widget/widget.parser.d.ts +0 -13
  95. package/dist/{src → core}/widget/widget.parser.js +0 -21
  96. package/dist/core/widget/widget.parser.js.map +1 -0
  97. package/dist/core/widget/widget.registry.d.ts +13 -0
  98. package/dist/core/widget/widget.registry.js +19 -0
  99. package/dist/core/widget/widget.registry.js.map +1 -0
  100. package/dist/emroute.js +1137 -1151
  101. package/dist/emroute.js.map +36 -5
  102. package/dist/runtime/abstract.runtime.d.ts +50 -5
  103. package/dist/runtime/abstract.runtime.js +446 -6
  104. package/dist/runtime/abstract.runtime.js.map +1 -1
  105. package/dist/runtime/bun/fs/bun-fs.runtime.d.ts +1 -0
  106. package/dist/runtime/bun/fs/bun-fs.runtime.js +18 -2
  107. package/dist/runtime/bun/fs/bun-fs.runtime.js.map +1 -1
  108. package/dist/runtime/bun/sqlite/bun-sqlite.runtime.d.ts +2 -0
  109. package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js +11 -1
  110. package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js.map +1 -1
  111. package/dist/runtime/fetch.runtime.d.ts +3 -3
  112. package/dist/runtime/fetch.runtime.js +3 -3
  113. package/dist/runtime/sitemap.generator.d.ts +1 -1
  114. package/dist/runtime/sitemap.generator.js +1 -1
  115. package/dist/runtime/sitemap.generator.js.map +1 -1
  116. package/dist/runtime/universal/fs/universal-fs.runtime.d.ts +1 -0
  117. package/dist/runtime/universal/fs/universal-fs.runtime.js +18 -2
  118. package/dist/runtime/universal/fs/universal-fs.runtime.js.map +1 -1
  119. package/dist/server/build.util.d.ts +9 -10
  120. package/dist/server/build.util.js +45 -36
  121. package/dist/server/build.util.js.map +1 -1
  122. package/dist/server/codegen.util.d.ts +1 -1
  123. package/dist/server/emroute.server.d.ts +8 -35
  124. package/dist/server/emroute.server.js +7 -341
  125. package/dist/server/emroute.server.js.map +1 -1
  126. package/dist/server/esbuild-manifest.plugin.js +1 -1
  127. package/dist/server/esbuild-manifest.plugin.js.map +1 -1
  128. package/dist/server/server-api.type.d.ts +3 -68
  129. package/dist/server/server-api.type.js +1 -8
  130. package/dist/server/server-api.type.js.map +1 -1
  131. package/dist/src/element/component.element.d.ts +4 -7
  132. package/dist/src/element/component.element.js +23 -22
  133. package/dist/src/element/component.element.js.map +1 -1
  134. package/dist/src/element/markdown.element.d.ts +2 -2
  135. package/dist/src/element/markdown.element.js +4 -3
  136. package/dist/src/element/markdown.element.js.map +1 -1
  137. package/dist/src/index.d.ts +15 -13
  138. package/dist/src/index.js +8 -8
  139. package/dist/src/index.js.map +1 -1
  140. package/dist/src/renderer/spa/emroute.app.d.ts +50 -0
  141. package/dist/src/renderer/spa/emroute.app.js +246 -0
  142. package/dist/src/renderer/spa/emroute.app.js.map +1 -0
  143. package/dist/src/renderer/spa/mod.d.ts +17 -16
  144. package/dist/src/renderer/spa/mod.js +9 -9
  145. package/dist/src/renderer/spa/mod.js.map +1 -1
  146. package/dist/src/renderer/spa/thin-client.d.ts +3 -3
  147. package/dist/src/renderer/spa/thin-client.js +34 -12
  148. package/dist/src/renderer/spa/thin-client.js.map +1 -1
  149. package/dist/src/route/route.core.d.ts +3 -3
  150. package/dist/src/route/route.core.js +21 -7
  151. package/dist/src/route/route.core.js.map +1 -1
  152. package/dist/src/util/html.util.d.ts +5 -22
  153. package/dist/src/util/html.util.js +8 -56
  154. package/dist/src/util/html.util.js.map +1 -1
  155. package/dist/src/widget/breadcrumb.widget.d.ts +2 -2
  156. package/dist/src/widget/breadcrumb.widget.js +2 -2
  157. package/dist/src/widget/breadcrumb.widget.js.map +1 -1
  158. package/dist/src/widget/page-title.widget.d.ts +1 -1
  159. package/dist/src/widget/page-title.widget.js +1 -1
  160. package/dist/src/widget/page-title.widget.js.map +1 -1
  161. package/package.json +8 -8
  162. package/runtime/abstract.runtime.ts +483 -8
  163. package/runtime/bun/fs/bun-fs.runtime.ts +17 -1
  164. package/runtime/bun/sqlite/bun-sqlite.runtime.ts +11 -0
  165. package/runtime/fetch.runtime.ts +3 -3
  166. package/runtime/sitemap.generator.ts +2 -2
  167. package/runtime/universal/fs/universal-fs.runtime.ts +17 -1
  168. package/server/build.util.ts +53 -47
  169. package/server/codegen.util.ts +1 -1
  170. package/server/emroute.server.ts +12 -412
  171. package/src/element/component.element.ts +24 -31
  172. package/src/element/markdown.element.ts +5 -4
  173. package/src/index.ts +22 -18
  174. package/src/renderer/spa/{thin-client.ts → emroute.app.ts} +46 -22
  175. package/src/renderer/spa/mod.ts +22 -22
  176. package/src/util/html.util.ts +16 -61
  177. package/src/widget/breadcrumb.widget.ts +3 -3
  178. package/src/widget/page-title.widget.ts +1 -1
  179. package/dist/src/component/abstract.component.d.ts +0 -199
  180. package/dist/src/component/abstract.component.js +0 -84
  181. package/dist/src/component/abstract.component.js.map +0 -1
  182. package/dist/src/component/page.component.d.ts +0 -74
  183. package/dist/src/component/page.component.js +0 -107
  184. package/dist/src/component/page.component.js.map +0 -1
  185. package/dist/src/component/widget.component.d.ts +0 -47
  186. package/dist/src/component/widget.component.js +0 -69
  187. package/dist/src/component/widget.component.js.map +0 -1
  188. package/dist/src/renderer/ssr/html.renderer.js.map +0 -1
  189. package/dist/src/renderer/ssr/md.renderer.js.map +0 -1
  190. package/dist/src/renderer/ssr/ssr.renderer.js.map +0 -1
  191. package/dist/src/route/route-tree.util.js.map +0 -1
  192. package/dist/src/route/route.matcher.d.ts +0 -86
  193. package/dist/src/route/route.matcher.js +0 -214
  194. package/dist/src/route/route.matcher.js.map +0 -1
  195. package/dist/src/route/route.resolver.js.map +0 -1
  196. package/dist/src/route/route.trie.d.ts +0 -38
  197. package/dist/src/route/route.trie.js +0 -206
  198. package/dist/src/route/route.trie.js.map +0 -1
  199. package/dist/src/type/logger.type.d.ts +0 -17
  200. package/dist/src/type/logger.type.js +0 -9
  201. package/dist/src/type/logger.type.js.map +0 -1
  202. package/dist/src/type/markdown.type.d.ts +0 -20
  203. package/dist/src/type/markdown.type.js +0 -2
  204. package/dist/src/type/markdown.type.js.map +0 -1
  205. package/dist/src/type/route-tree.type.js.map +0 -1
  206. package/dist/src/type/route.type.d.ts +0 -94
  207. package/dist/src/type/route.type.js +0 -8
  208. package/dist/src/type/route.type.js.map +0 -1
  209. package/dist/src/type/widget.type.d.ts +0 -55
  210. package/dist/src/type/widget.type.js +0 -10
  211. package/dist/src/type/widget.type.js.map +0 -1
  212. package/dist/src/util/logger.util.d.ts +0 -26
  213. package/dist/src/util/logger.util.js +0 -80
  214. package/dist/src/util/logger.util.js.map +0 -1
  215. package/dist/src/util/md.util.js.map +0 -1
  216. package/dist/src/util/widget-resolve.util.d.ts +0 -52
  217. package/dist/src/util/widget-resolve.util.js.map +0 -1
  218. package/dist/src/widget/widget.parser.js.map +0 -1
  219. package/dist/src/widget/widget.registry.d.ts +0 -23
  220. package/dist/src/widget/widget.registry.js +0 -42
  221. package/dist/src/widget/widget.registry.js.map +0 -1
  222. package/runtime/bun/esbuild-runtime-loader.plugin.ts +0 -112
  223. package/server/esbuild-manifest.plugin.ts +0 -209
  224. package/server/server-api.type.ts +0 -97
  225. package/src/component/abstract.component.ts +0 -231
  226. package/src/component/widget.component.ts +0 -85
  227. package/src/route/route.core.ts +0 -362
  228. package/src/route/route.trie.ts +0 -265
  229. package/src/type/logger.type.ts +0 -24
  230. package/src/type/markdown.type.ts +0 -21
  231. package/src/type/route-tree.type.ts +0 -51
  232. package/src/type/route.type.ts +0 -124
  233. package/src/type/widget.type.ts +0 -65
  234. package/src/util/logger.util.ts +0 -83
  235. package/src/widget/widget.registry.ts +0 -51
  236. /package/dist/{src/route → core/util}/route-tree.util.d.ts +0 -0
@@ -1,94 +0,0 @@
1
- /**
2
- * Router Types
3
- *
4
- * Native browser APIs only - no external dependencies.
5
- * Follows islands architecture: pages = HTML, widgets = web components.
6
- */
7
- /** Parameters extracted from URL patterns */
8
- export type RouteParams = Readonly<Record<string, string>>;
9
- /** Immutable route context built once per navigation, shared across the render pipeline. */
10
- export interface RouteInfo {
11
- /** The URL being rendered. Components read pathname, searchParams, hash from this. */
12
- readonly url: URL;
13
- /** URL parameters extracted by the trie match. */
14
- readonly params: RouteParams;
15
- }
16
- /** Supported file patterns in file-based routing */
17
- export type RouteFileType = 'page' | 'error' | 'redirect';
18
- /** Redirect configuration */
19
- export interface RedirectConfig {
20
- to: string;
21
- status: 301 | 302;
22
- }
23
- /** Available files for a route */
24
- export interface RouteFiles {
25
- /** TypeScript module path (.page.ts) */
26
- ts?: string;
27
- /** JavaScript module — merged module with inlined companions (.page.js) */
28
- js?: string;
29
- /** HTML template path (.page.html) */
30
- html?: string;
31
- /** Markdown content path (.page.md) */
32
- md?: string;
33
- /** CSS stylesheet path (.page.css) */
34
- css?: string;
35
- }
36
- /** Route configuration for a single route */
37
- export interface RouteConfig {
38
- /** URLPattern pathname pattern (e.g., '/projects/:id') */
39
- pattern: string;
40
- /** Type of route file */
41
- type: RouteFileType;
42
- /** Module path for dynamic import (primary file based on precedence) */
43
- modulePath: string;
44
- /** Available files for this route */
45
- files?: RouteFiles;
46
- /** Parent route pattern for nested routes */
47
- parent?: string;
48
- /** HTTP status code (for status-specific pages like 404, 401, 403) */
49
- statusCode?: number;
50
- }
51
- /** Result of matching a URL against routes */
52
- export interface MatchedRoute {
53
- /** The matched route configuration */
54
- readonly route: RouteConfig;
55
- /** Extracted URL parameters */
56
- readonly params: RouteParams;
57
- }
58
- /** Error boundary configuration */
59
- export interface ErrorBoundary {
60
- /** Pattern prefix this error boundary handles */
61
- pattern: string;
62
- /** Module path for the error handler */
63
- modulePath: string;
64
- }
65
- export type { RouteNode } from './route-tree.type.ts';
66
- /** Router state for history management */
67
- export interface RouterState {
68
- /** Current URL pathname */
69
- pathname: string;
70
- /** Extracted route parameters */
71
- params: RouteParams;
72
- /** Scroll position to restore */
73
- scrollY?: number;
74
- }
75
- /** Navigation options */
76
- export interface NavigateOptions {
77
- /** Replace current history entry instead of pushing */
78
- replace?: boolean;
79
- /** State to store in history */
80
- state?: RouterState;
81
- /** Hash to scroll to after navigation */
82
- hash?: string;
83
- }
84
- /** Router event types */
85
- export type RouterEventType = 'navigate' | 'error' | 'load';
86
- /** Router event payload */
87
- export interface RouterEvent {
88
- type: RouterEventType;
89
- pathname: string;
90
- params: RouteParams;
91
- error?: Error;
92
- }
93
- /** Router event listener */
94
- export type RouterEventListener = (event: RouterEvent) => void;
@@ -1,8 +0,0 @@
1
- /**
2
- * Router Types
3
- *
4
- * Native browser APIs only - no external dependencies.
5
- * Follows islands architecture: pages = HTML, widgets = web components.
6
- */
7
- export {};
8
- //# sourceMappingURL=route.type.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.type.js","sourceRoot":"","sources":["../../../src/type/route.type.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,55 +0,0 @@
1
- /**
2
- * Widget System - Type Definitions
3
- *
4
- * Widgets are data-fetching components that work across three contexts:
5
- * 1. /md/ (LLMs) - Returns markdown with JSON data
6
- * 2. SSR/HTML - Pre-fetched data embedded in custom element
7
- * 3. SPA/Browser - Custom element fetches and hydrates
8
- */
9
- /**
10
- * Parsed widget block from markdown.
11
- * Represents a fenced code block with widget syntax.
12
- */
13
- export interface ParsedWidgetBlock {
14
- /** Full matched string including fences */
15
- fullMatch: string;
16
- /** Widget name extracted from widget:{name} */
17
- widgetName: string;
18
- /** Parsed JSON params, or null if empty/invalid */
19
- params: Record<string, unknown> | null;
20
- /** Parse error message if params JSON was invalid */
21
- parseError?: string;
22
- /** Start index in original markdown */
23
- startIndex: number;
24
- /** End index in original markdown */
25
- endIndex: number;
26
- }
27
- /** Custom element tag name for widgets: `widget-{name}` */
28
- export type WidgetTagName = `widget-${string}`;
29
- /** SPA rendering mode. */
30
- export type SpaMode = 'none' | 'leaf' | 'root' | 'only';
31
- /**
32
- * Widget manifest entry for code generation.
33
- */
34
- export interface WidgetManifestEntry {
35
- /** Widget name in kebab-case */
36
- name: string;
37
- /** Path to widget module file */
38
- modulePath: string;
39
- /** Custom element tag name (widget-{name}) */
40
- tagName: WidgetTagName;
41
- /** Discovered/declared companion file paths (html, md, css) */
42
- files?: {
43
- html?: string;
44
- md?: string;
45
- css?: string;
46
- };
47
- }
48
- /**
49
- * Generated widgets manifest structure.
50
- */
51
- export interface WidgetsManifest {
52
- widgets: WidgetManifestEntry[];
53
- /** Pre-bundled module loaders keyed by module path (for SPA bundles) */
54
- moduleLoaders?: Record<string, () => Promise<unknown>>;
55
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Widget System - Type Definitions
3
- *
4
- * Widgets are data-fetching components that work across three contexts:
5
- * 1. /md/ (LLMs) - Returns markdown with JSON data
6
- * 2. SSR/HTML - Pre-fetched data embedded in custom element
7
- * 3. SPA/Browser - Custom element fetches and hydrates
8
- */
9
- export {};
10
- //# sourceMappingURL=widget.type.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget.type.js","sourceRoot":"","sources":["../../../src/type/widget.type.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Logger Utility
3
- *
4
- * Provides structured logging for emroute internals.
5
- * Enable via localStorage: localStorage.setItem('emroute:debug', 'true')
6
- */
7
- export declare const logger: {
8
- /** Enable debug logging (persists in localStorage) */
9
- enable(): void;
10
- /** Disable debug logging */
11
- disable(): void;
12
- /** Log general information */
13
- info(category: string, message: string, data?: unknown): void;
14
- /** Log navigation events */
15
- nav(action: string, from: string, to: string, data?: Record<string, unknown>): void;
16
- /** Log rendering events */
17
- render(component: string, route: string, mode?: string): void;
18
- /** Log link interception */
19
- link(action: "intercept" | "passthrough", href: string, reason?: string): void;
20
- /** Log widget lifecycle */
21
- widget(event: string, name: string, data?: unknown): void;
22
- /** Log warnings (always shown, not gated by debug flag) */
23
- warn(message: string): void;
24
- /** Log SSR adoption */
25
- ssr(action: string, route: string): void;
26
- };
@@ -1,80 +0,0 @@
1
- /**
2
- * Logger Utility
3
- *
4
- * Provides structured logging for emroute internals.
5
- * Enable via localStorage: localStorage.setItem('emroute:debug', 'true')
6
- */
7
- const STORAGE_KEY = 'emroute:debug';
8
- const PREFIX = '[emroute]';
9
- function isEnabled() {
10
- if (typeof globalThis.localStorage === 'undefined')
11
- return false;
12
- return globalThis.localStorage.getItem(STORAGE_KEY) === 'true';
13
- }
14
- export const logger = {
15
- /** Enable debug logging (persists in localStorage) */
16
- enable() {
17
- if (typeof globalThis.localStorage !== 'undefined') {
18
- globalThis.localStorage.setItem(STORAGE_KEY, 'true');
19
- console.log(`${PREFIX} Debug logging enabled`);
20
- }
21
- },
22
- /** Disable debug logging */
23
- disable() {
24
- if (typeof globalThis.localStorage !== 'undefined') {
25
- globalThis.localStorage.removeItem(STORAGE_KEY);
26
- console.log(`${PREFIX} Debug logging disabled`);
27
- }
28
- },
29
- /** Log general information */
30
- info(category, message, data) {
31
- if (!isEnabled())
32
- return;
33
- const prefix = `${PREFIX} [${category}]`;
34
- if (data !== undefined) {
35
- console.log(prefix, message, data);
36
- }
37
- else {
38
- console.log(prefix, message);
39
- }
40
- },
41
- /** Log navigation events */
42
- nav(action, from, to, data) {
43
- if (!isEnabled())
44
- return;
45
- console.log(`${PREFIX} [nav] ${action}:`, { from, to, ...(data ?? {}) });
46
- },
47
- /** Log rendering events */
48
- render(component, route, mode) {
49
- if (!isEnabled())
50
- return;
51
- const modeStr = mode ? ` [mode=${mode}]` : '';
52
- console.log(`${PREFIX} [render]${modeStr} ${component} → ${route}`);
53
- },
54
- /** Log link interception */
55
- link(action, href, reason) {
56
- if (!isEnabled())
57
- return;
58
- const reasonStr = reason ? ` (${reason})` : '';
59
- console.log(`${PREFIX} [link] ${action}: ${href}${reasonStr}`);
60
- },
61
- /** Log widget lifecycle */
62
- widget(event, name, data) {
63
- if (!isEnabled())
64
- return;
65
- console.log(`${PREFIX} [widget] ${event}: ${name}`, data ?? '');
66
- },
67
- /** Log warnings (always shown, not gated by debug flag) */
68
- warn(message) {
69
- console.warn(`${PREFIX}`, message);
70
- },
71
- /** Log SSR adoption */
72
- ssr(action, route) {
73
- if (!isEnabled())
74
- return;
75
- console.log(`${PREFIX} [ssr] ${action}: ${route}`);
76
- },
77
- };
78
- // Expose globally for console access
79
- globalThis.__emroute_logger = logger;
80
- //# sourceMappingURL=logger.util.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.util.js","sourceRoot":"","sources":["../../../src/util/logger.util.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,GAAG,eAAe,CAAC;AACpC,MAAM,MAAM,GAAG,WAAW,CAAC;AAE3B,SAAS,SAAS;IAChB,IAAI,OAAO,UAAU,CAAC,YAAY,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,sDAAsD;IACtD,MAAM;QACJ,IAAI,OAAO,UAAU,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;YACnD,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,wBAAwB,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,OAAO;QACL,IAAI,OAAO,UAAU,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;YACnD,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,yBAAyB,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,QAAgB,EAAE,OAAe,EAAE,IAAc;QACpD,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,MAAM,MAAM,GAAG,GAAG,MAAM,KAAK,QAAQ,GAAG,CAAC;QACzC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,EAAU,EAAE,IAA8B;QAC1E,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,UAAU,MAAM,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,2BAA2B;IAC3B,MAAM,CAAC,SAAiB,EAAE,KAAa,EAAE,IAAa;QACpD,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,YAAY,OAAO,IAAI,SAAS,MAAM,KAAK,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,MAAmC,EAAE,IAAY,EAAE,MAAe;QACrE,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,WAAW,MAAM,KAAK,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,2BAA2B;IAC3B,MAAM,CAAC,KAAa,EAAE,IAAY,EAAE,IAAc;QAChD,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,aAAa,KAAK,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,2DAA2D;IAC3D,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,uBAAuB;IACvB,GAAG,CAAC,MAAc,EAAE,KAAa;QAC/B,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO;QACzB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,UAAU,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;CACF,CAAC;AAEF,qCAAqC;AACpC,UAAsC,CAAC,gBAAgB,GAAG,MAAM,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"md.util.js","sourceRoot":"","sources":["../../../src/util/md.util.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAY,EAAE,YAAsB;IACnF,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;IAC1B,iEAAiE;IACjE,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,eAAe,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,8BAA8B,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IAErE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,WAAW,GAAG,CAAC,WAAW,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,IAAI,WAAW;YAAE,SAAS;QAE1B,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC;QACxD,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,52 +0,0 @@
1
- /**
2
- * Widget Resolve Utilities
3
- *
4
- * Server-side resolution of <widget-*> tags in HTML.
5
- * Calls getData() + renderHTML() on widgets and injects SSR hydration data.
6
- */
7
- import type { Component, ContextProvider } from '../component/abstract.component.ts';
8
- import type { RouteInfo } from '../type/route.type.ts';
9
- /** Maximum nesting depth for widgets to prevent infinite loops */
10
- export declare const MAX_WIDGET_DEPTH = 10;
11
- /**
12
- * Recursively resolve widgets in content with depth limit.
13
- *
14
- * Generic utility used by both HTML and Markdown widget resolution.
15
- * Each depth level processes all widgets concurrently, then recurses
16
- * into each rendered result to resolve nested widgets.
17
- *
18
- * @param content - Content containing widgets
19
- * @param parse - Find widgets in content
20
- * @param resolve - Resolve a single widget to rendered output
21
- * @param replace - Replace widgets with resolved content
22
- * @param depth - Current recursion depth (internal)
23
- * @returns Content with all widgets recursively resolved
24
- */
25
- export declare function resolveRecursively<T>(content: string, parse: (content: string) => T[], resolve: (widget: T) => Promise<string>, replace: (content: string, replacements: Map<T, string>) => string, depth?: number): Promise<string>;
26
- /**
27
- * Resolve <widget-*> tags in HTML by calling getData() + renderHTML()
28
- * via the widget registry. Injects rendered content and boolean ssr attribute.
29
- *
30
- * Supports nested widgets: if a widget's renderHTML() returns HTML containing
31
- * other <widget-*> tags, those will be resolved recursively up to MAX_WIDGET_DEPTH.
32
- *
33
- * Before: <widget-crypto-price coin="bitcoin"></widget-crypto-price>
34
- * After: <widget-crypto-price coin="bitcoin" ssr><template shadowrootmode="open"><span>$42,000</span></template></widget-crypto-price>
35
- *
36
- * When a widget has `exposeSsrData = true`, the getData() result is serialized
37
- * as JSON text in the light DOM (alongside the shadow root template):
38
- * After: <widget-crypto-price coin="bitcoin" ssr><template shadowrootmode="open"><span>$42,000</span></template>{"price":42000}</widget-crypto-price>
39
- */
40
- export declare function resolveWidgetTags(html: string, registry: {
41
- get(name: string): Component | undefined;
42
- }, routeInfo: RouteInfo, loadFiles?: (widgetName: string, declaredFiles?: {
43
- html?: string;
44
- md?: string;
45
- css?: string;
46
- }) => Promise<{
47
- html?: string;
48
- md?: string;
49
- css?: string;
50
- }>, contextProvider?: ContextProvider): Promise<string>;
51
- /** Parse HTML attribute string into params object (kebab→camelCase, JSON.parse with string fallback). */
52
- export declare function parseAttrsToParams(attrsString: string): Record<string, unknown>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget-resolve.util.js","sourceRoot":"","sources":["../../../src/util/widget-resolve.util.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget.parser.js","sourceRoot":"","sources":["../../../src/widget/widget.parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;GAGG;AACH,MAAM,cAAc,GAAG,yDAAyD,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,MAAO,CAAC;QAC9D,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QAE/B,MAAM,KAAK,GAAsB;YAC/B,SAAS;YACT,UAAU;YACV,MAAM,EAAE,IAAI;YACZ,UAAU;YACV,QAAQ,EAAE,UAAU,GAAG,SAAS,CAAC,MAAM;SACxC,CAAC;QAEF,+BAA+B;QAC/B,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5E,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,UAAU,GAAG,8BAA8B,CAAC;gBACpD,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,KAAK,CAAC,UAAU,GAAG,iBAAiB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,2CAA2C;YAC3C,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,YAA4C;IAE5C,+DAA+D;IAC/D,4CAA4C;IAC5C,MAAM,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACnD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAC1C,CAAC;IAEF,IAAI,MAAM,GAAG,QAAQ,CAAC;IACtB,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,YAAY,EAAE,CAAC;QAChD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Widget Registry
3
- *
4
- * Canonical registry where all widgets live. Used by all renderers:
5
- * - SSR HTML: resolves widgets by name, calls getData() + renderHTML()
6
- * - SSR Markdown: resolves widgets by name, calls getData() + renderMarkdown()
7
- * - SPA: registers custom elements for each widget
8
- *
9
- * Pages are NOT in this registry — they live in the routes manifest.
10
- */
11
- import type { WidgetComponent } from '../component/widget.component.ts';
12
- import type { WidgetsManifest } from '../type/widget.type.ts';
13
- export declare class WidgetRegistry {
14
- private widgets;
15
- /** Register a widget by its name. */
16
- add(widget: WidgetComponent): void;
17
- /** Look up a widget by name. */
18
- get(name: string): WidgetComponent | undefined;
19
- /** Iterate all registered widgets. */
20
- [Symbol.iterator](): IterableIterator<WidgetComponent>;
21
- /** Emit a WidgetsManifest from registered widgets. */
22
- toManifest(): WidgetsManifest;
23
- }
@@ -1,42 +0,0 @@
1
- /**
2
- * Widget Registry
3
- *
4
- * Canonical registry where all widgets live. Used by all renderers:
5
- * - SSR HTML: resolves widgets by name, calls getData() + renderHTML()
6
- * - SSR Markdown: resolves widgets by name, calls getData() + renderMarkdown()
7
- * - SPA: registers custom elements for each widget
8
- *
9
- * Pages are NOT in this registry — they live in the routes manifest.
10
- */
11
- export class WidgetRegistry {
12
- widgets = new Map();
13
- /** Register a widget by its name. */
14
- add(widget) {
15
- this.widgets.set(widget.name, widget);
16
- }
17
- /** Look up a widget by name. */
18
- get(name) {
19
- return this.widgets.get(name);
20
- }
21
- /** Iterate all registered widgets. */
22
- [Symbol.iterator]() {
23
- return this.widgets.values();
24
- }
25
- /** Emit a WidgetsManifest from registered widgets. */
26
- toManifest() {
27
- const widgets = [];
28
- const moduleLoaders = {};
29
- for (const [name, widget] of this.widgets) {
30
- const entry = {
31
- name,
32
- modulePath: name,
33
- tagName: `widget-${name}`,
34
- files: widget.files,
35
- };
36
- widgets.push(entry);
37
- moduleLoaders[name] = () => Promise.resolve({ default: widget.constructor });
38
- }
39
- return { widgets, moduleLoaders };
40
- }
41
- }
42
- //# sourceMappingURL=widget.registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget.registry.js","sourceRoot":"","sources":["../../../src/widget/widget.registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,OAAO,cAAc;IACjB,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IAErD,qCAAqC;IACrC,GAAG,CAAC,MAAuB;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,gCAAgC;IAChC,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,sCAAsC;IACtC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,sDAAsD;IACtD,UAAU;QACR,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,MAAM,aAAa,GAA2C,EAAE,CAAC;QAEjE,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAwB;gBACjC,IAAI;gBACJ,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,UAAU,IAAI,EAAE;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IACpC,CAAC;CACF"}
@@ -1,112 +0,0 @@
1
- /**
2
- * esbuild Runtime Loader Plugin
3
- *
4
- * Intercepts file resolution so esbuild reads source files through the
5
- * runtime's `query()` method instead of the filesystem. This allows
6
- * bundling to work with any Runtime implementation (filesystem, SQLite,
7
- * in-memory, etc.).
8
- *
9
- * The plugin intercepts `.ts` and `.js` imports that resolve under the
10
- * virtual root and loads their contents from the runtime.
11
- */
12
-
13
- import type { Runtime } from '../../runtime/abstract.runtime.ts';
14
- import { EMROUTE_VIRTUAL_NS } from '../../server/build.util.ts';
15
-
16
- /** Synthetic prefix for runtimes without a filesystem root (e.g. SQLite). */
17
- export const VIRTUAL_ROOT = '/@emroute-virtual';
18
-
19
- interface RuntimeLoaderOptions {
20
- runtime: Runtime;
21
- /**
22
- * The filesystem root that esbuild would normally resolve paths against.
23
- * Paths starting with this prefix are stripped to produce runtime paths
24
- * (e.g. `/app/root/routes/index.page.ts` → `/routes/index.page.ts`).
25
- *
26
- * For runtimes without a filesystem root, use {@link VIRTUAL_ROOT} and
27
- * prefix entry points accordingly.
28
- */
29
- root: string;
30
- }
31
-
32
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
- type EsbuildPlugin = any;
34
-
35
- export function createRuntimeLoaderPlugin(options: RuntimeLoaderOptions): EsbuildPlugin {
36
- const { runtime, root } = options;
37
-
38
- return {
39
- name: 'emroute-runtime-loader',
40
-
41
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
- setup(build: any) {
43
- // Bare imports from the runtime namespace (e.g. '@emkodev/emkoma/render')
44
- // need a real resolveDir so esbuild can find node_modules on disk.
45
- build.onResolve(
46
- { filter: /.*/, namespace: 'runtime' },
47
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- async (args: any) => {
49
- if (args.path.startsWith('.') || args.path.startsWith('/')) return undefined;
50
- if (args.path.startsWith(EMROUTE_VIRTUAL_NS + ':')) return { path: args.path, namespace: EMROUTE_VIRTUAL_NS };
51
- return build.resolve(args.path, { resolveDir: process.cwd(), kind: args.kind });
52
- },
53
- );
54
-
55
- // Intercept .ts and .js file resolution — redirect to 'runtime' namespace
56
- // Only intercepts files that resolve under the runtime root.
57
- build.onResolve(
58
- { filter: /\.[tj]s$/ },
59
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
- (args: any) => {
61
- // Skip bare specifiers (node_modules, packages)
62
- if (!args.path.startsWith('.') && !args.path.startsWith('/')) return undefined;
63
- // Skip if already in a custom namespace (except 'runtime' for nested imports)
64
- // Entry points have namespace '' (empty string)
65
- if (args.namespace !== 'file' && args.namespace !== 'runtime' && args.namespace !== '') return undefined;
66
-
67
- let absPath: string;
68
- if (args.path.startsWith('/')) {
69
- absPath = args.path;
70
- } else if (args.resolveDir) {
71
- absPath = args.resolveDir + '/' + args.path;
72
- } else {
73
- return undefined;
74
- }
75
-
76
- // Normalize ../ and ./ segments
77
- const parts = absPath.split('/');
78
- const normalized: string[] = [];
79
- for (const part of parts) {
80
- if (part === '..') normalized.pop();
81
- else if (part !== '.' && part !== '') normalized.push(part);
82
- }
83
- absPath = '/' + normalized.join('/');
84
-
85
- // Only intercept files under the runtime root
86
- if (!absPath.startsWith(root + '/')) return undefined;
87
-
88
- return { path: absPath, namespace: 'runtime' };
89
- },
90
- );
91
-
92
- // Load file contents from the runtime
93
- build.onLoad(
94
- { filter: /.*/, namespace: 'runtime' },
95
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
- async (args: any) => {
97
- // Strip root prefix to get runtime path (e.g. /app/root/routes/x.ts → /routes/x.ts)
98
- const runtimePath = root && args.path.startsWith(root)
99
- ? args.path.slice(root.length)
100
- : args.path;
101
-
102
- const contents = await runtime.query(runtimePath, { as: 'text' });
103
- const ext = args.path.slice(args.path.lastIndexOf('.') + 1);
104
- const loader = ext === 'ts' ? 'ts' : 'js';
105
- const resolveDir = args.path.slice(0, args.path.lastIndexOf('/')) || root;
106
-
107
- return { contents, loader, resolveDir };
108
- },
109
- );
110
- },
111
- };
112
- }