@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,86 +0,0 @@
1
- /**
2
- * Route Matcher
3
- *
4
- * URLPattern-based route matching with support for:
5
- * - Static routes (/about)
6
- * - Dynamic segments (/projects/:id)
7
- * - Wildcard/catch-all (future)
8
- *
9
- * Uses native URLPattern API (supported in all major browsers).
10
- */
11
- /** Parse a URL path string into a URL object. Passes through URL objects unchanged. */
12
- export declare function toUrl(url: string | URL): URL;
13
- import type { ErrorBoundary, MatchedRoute, RouteConfig, RoutesManifest } from '../type/route.type.ts';
14
- /**
15
- * Route matcher using native URLPattern API.
16
- *
17
- * Routes are matched in order of specificity:
18
- * 1. Exact static matches first
19
- * 2. Dynamic segment matches
20
- * 3. More specific patterns before less specific
21
- */
22
- export declare class RouteMatcher {
23
- private compiledRoutes;
24
- private errorBoundaries;
25
- private statusPages;
26
- private errorHandler?;
27
- /**
28
- * Initialize matcher with routes manifest.
29
- * Routes should be pre-sorted by specificity in the manifest.
30
- */
31
- constructor(manifest: RoutesManifest);
32
- /**
33
- * Match a URL against registered routes.
34
- * Returns the first matching route or undefined.
35
- */
36
- match(url: URL | string): MatchedRoute | undefined;
37
- /**
38
- * Find error boundary for a given pathname.
39
- * Searches from most specific to least specific.
40
- */
41
- findErrorBoundary(pathname: string): ErrorBoundary | undefined;
42
- /**
43
- * Get status-specific page (404, 401, 403).
44
- */
45
- getStatusPage(status: number): RouteConfig | undefined;
46
- /**
47
- * Get generic error handler.
48
- */
49
- getErrorHandler(): RouteConfig | undefined;
50
- /**
51
- * Find a route by its exact pattern or by matching a pathname.
52
- * Used for building route hierarchy.
53
- */
54
- findRoute(patternOrPath: string): RouteConfig | undefined;
55
- /**
56
- * Extract params from URLPatternResult.
57
- */
58
- private extractParams;
59
- }
60
- /**
61
- * Convert file-based route path to URLPattern.
62
- *
63
- * Examples:
64
- * - index.page.ts → /
65
- * - about.page.ts → /about
66
- * - projects/index.page.ts → /projects/:rest*
67
- * - projects/[id].page.ts → /projects/:id
68
- * - projects/[id]/tasks.page.ts → /projects/:id/tasks
69
- *
70
- * Directory index files (non-root) become wildcard catch-all routes.
71
- * See ADR-0002: Wildcard Routes via Directory Index Convention.
72
- */
73
- export declare function filePathToPattern(filePath: string): string;
74
- /**
75
- * Determine route type from filename.
76
- */
77
- export declare function getRouteType(filename: string): 'page' | 'error' | 'redirect' | null;
78
- /**
79
- * Get the file extension type from a page filename.
80
- */
81
- export declare function getPageFileType(filename: string): 'ts' | 'html' | 'md' | 'css' | null;
82
- /**
83
- * Sort routes by specificity.
84
- * Non-wildcards before wildcards, static before dynamic, longer paths first.
85
- */
86
- export declare function sortRoutesBySpecificity(routes: RouteConfig[]): RouteConfig[];
@@ -1,214 +0,0 @@
1
- /**
2
- * Route Matcher
3
- *
4
- * URLPattern-based route matching with support for:
5
- * - Static routes (/about)
6
- * - Dynamic segments (/projects/:id)
7
- * - Wildcard/catch-all (future)
8
- *
9
- * Uses native URLPattern API (supported in all major browsers).
10
- */
11
- /** Parse a URL path string into a URL object. Passes through URL objects unchanged. */
12
- export function toUrl(url) {
13
- return typeof url === 'string' ? new URL(url, 'http://url-parse') : url;
14
- }
15
- /**
16
- * Route matcher using native URLPattern API.
17
- *
18
- * Routes are matched in order of specificity:
19
- * 1. Exact static matches first
20
- * 2. Dynamic segment matches
21
- * 3. More specific patterns before less specific
22
- */
23
- export class RouteMatcher {
24
- compiledRoutes = [];
25
- errorBoundaries = [];
26
- statusPages = new Map();
27
- errorHandler;
28
- /**
29
- * Initialize matcher with routes manifest.
30
- * Routes should be pre-sorted by specificity in the manifest.
31
- */
32
- constructor(manifest) {
33
- this.errorBoundaries = manifest.errorBoundaries.toSorted((a, b) => b.pattern.length - a.pattern.length);
34
- this.statusPages = manifest.statusPages;
35
- this.errorHandler = manifest.errorHandler;
36
- // Compile URLPatterns for all routes
37
- for (const route of manifest.routes) {
38
- try {
39
- const pattern = new URLPattern({ pathname: route.pattern });
40
- this.compiledRoutes.push({ route, pattern });
41
- }
42
- catch (e) {
43
- console.error(`[Router] Invalid pattern: ${route.pattern}`, e);
44
- }
45
- }
46
- }
47
- /**
48
- * Match a URL against registered routes.
49
- * Returns the first matching route or undefined.
50
- */
51
- match(url) {
52
- const urlObj = toUrl(url);
53
- const searchParams = urlObj.searchParams;
54
- for (const { route, pattern } of this.compiledRoutes) {
55
- const result = pattern.exec(urlObj);
56
- if (result) {
57
- return {
58
- route,
59
- params: this.extractParams(result),
60
- searchParams,
61
- patternResult: result,
62
- };
63
- }
64
- }
65
- return undefined;
66
- }
67
- /**
68
- * Find error boundary for a given pathname.
69
- * Searches from most specific to least specific.
70
- */
71
- findErrorBoundary(pathname) {
72
- for (const boundary of this.errorBoundaries) {
73
- const prefix = boundary.pattern.endsWith('/') ? boundary.pattern : boundary.pattern + '/';
74
- if (pathname === boundary.pattern || pathname.startsWith(prefix)) {
75
- return boundary;
76
- }
77
- }
78
- return undefined;
79
- }
80
- /**
81
- * Get status-specific page (404, 401, 403).
82
- */
83
- getStatusPage(status) {
84
- return this.statusPages.get(status);
85
- }
86
- /**
87
- * Get generic error handler.
88
- */
89
- getErrorHandler() {
90
- return this.errorHandler;
91
- }
92
- /**
93
- * Find a route by its exact pattern or by matching a pathname.
94
- * Used for building route hierarchy.
95
- */
96
- findRoute(patternOrPath) {
97
- // First try exact pattern match
98
- for (const { route } of this.compiledRoutes) {
99
- if (route.pattern === patternOrPath) {
100
- return route;
101
- }
102
- }
103
- // Then try to match as a URL path
104
- const matched = this.match(toUrl(patternOrPath));
105
- return matched?.route;
106
- }
107
- /**
108
- * Extract params from URLPatternResult.
109
- */
110
- extractParams(result) {
111
- const groups = result.pathname.groups;
112
- const params = {};
113
- for (const [key, value] of Object.entries(groups)) {
114
- if (value !== undefined) {
115
- params[key] = value;
116
- }
117
- }
118
- return params;
119
- }
120
- }
121
- /**
122
- * Convert file-based route path to URLPattern.
123
- *
124
- * Examples:
125
- * - index.page.ts → /
126
- * - about.page.ts → /about
127
- * - projects/index.page.ts → /projects/:rest*
128
- * - projects/[id].page.ts → /projects/:id
129
- * - projects/[id]/tasks.page.ts → /projects/:id/tasks
130
- *
131
- * Directory index files (non-root) become wildcard catch-all routes.
132
- * See ADR-0002: Wildcard Routes via Directory Index Convention.
133
- */
134
- export function filePathToPattern(filePath) {
135
- // Remove routes/ prefix and file extension
136
- let pattern = filePath
137
- .replace(/^routes\//, '')
138
- .replace(/\.(page|error|redirect)\.(ts|html|md|css)$/, '');
139
- // Detect non-root directory index before stripping
140
- const isDirectoryIndex = pattern.endsWith('/index') && pattern !== 'index';
141
- // Handle index files
142
- pattern = pattern.replace(/\/index$/, '').replace(/^index$/, '');
143
- // Convert [param] to :param
144
- pattern = pattern.replace(/\[(?<param>[^\]]+)\]/g, ':$<param>');
145
- // Ensure leading slash
146
- pattern = '/' + pattern;
147
- // Non-root directory index becomes wildcard catch-all
148
- if (isDirectoryIndex) {
149
- pattern += '/:rest*';
150
- }
151
- return pattern;
152
- }
153
- /**
154
- * Determine route type from filename.
155
- */
156
- export function getRouteType(filename) {
157
- if (filename.endsWith('.page.ts') ||
158
- filename.endsWith('.page.html') ||
159
- filename.endsWith('.page.md')) {
160
- return 'page';
161
- }
162
- if (filename.endsWith('.error.ts')) {
163
- return 'error';
164
- }
165
- if (filename.endsWith('.redirect.ts')) {
166
- return 'redirect';
167
- }
168
- return null;
169
- }
170
- /**
171
- * Get the file extension type from a page filename.
172
- */
173
- export function getPageFileType(filename) {
174
- if (filename.endsWith('.page.ts'))
175
- return 'ts';
176
- if (filename.endsWith('.page.html'))
177
- return 'html';
178
- if (filename.endsWith('.page.md'))
179
- return 'md';
180
- if (filename.endsWith('.page.css'))
181
- return 'css';
182
- return null;
183
- }
184
- /**
185
- * Sort routes by specificity.
186
- * Non-wildcards before wildcards, static before dynamic, longer paths first.
187
- */
188
- export function sortRoutesBySpecificity(routes) {
189
- return routes.toSorted((a, b) => {
190
- const aSegments = a.pattern.split('/').filter(Boolean);
191
- const bSegments = b.pattern.split('/').filter(Boolean);
192
- // Wildcards always sort last
193
- const aIsWildcard = aSegments.some((s) => s.endsWith('*') || s.endsWith('+'));
194
- const bIsWildcard = bSegments.some((s) => s.endsWith('*') || s.endsWith('+'));
195
- if (aIsWildcard !== bIsWildcard) {
196
- return aIsWildcard ? 1 : -1;
197
- }
198
- // More segments = more specific
199
- if (aSegments.length !== bSegments.length) {
200
- return bSegments.length - aSegments.length;
201
- }
202
- // Compare segment by segment
203
- for (let i = 0; i < aSegments.length; i++) {
204
- const aIsDynamic = aSegments[i].startsWith(':');
205
- const bIsDynamic = bSegments[i].startsWith(':');
206
- // Static segments are more specific than dynamic
207
- if (aIsDynamic !== bIsDynamic) {
208
- return aIsDynamic ? 1 : -1;
209
- }
210
- }
211
- return 0;
212
- });
213
- }
214
- //# sourceMappingURL=route.matcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.matcher.js","sourceRoot":"","sources":["../../../src/route/route.matcher.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.resolver.js","sourceRoot":"","sources":["../../../src/route/route.resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -1,38 +0,0 @@
1
- /**
2
- * Route Trie
3
- *
4
- * Segment-based trie implementing RouteResolver for O(depth) route matching.
5
- *
6
- * Each URL segment maps to a trie node. Nodes are tried in order:
7
- * static → dynamic (:param) → wildcard (:rest*). Backtracking handles
8
- * cases where a dynamic path leads to a dead end but a wildcard at an
9
- * ancestor would match.
10
- *
11
- * Static segment matching is case-sensitive, per RFC 3986.
12
- *
13
- * Accepts a RouteNode tree (the JSON-serializable manifest from Runtime)
14
- * and converts it to an internal trie with Map-based static children for
15
- * O(1) segment lookup.
16
- */
17
- import type { RouteNode } from '../type/route-tree.type.ts';
18
- import type { RouteResolver, ResolvedRoute } from './route.resolver.ts';
19
- /**
20
- * Trie-based route resolver.
21
- *
22
- * Implements RouteResolver with O(depth) matching by walking the trie.
23
- * Constructed from a RouteNode tree (produced by Runtime.scanRoutes).
24
- */
25
- export declare class RouteTrie implements RouteResolver {
26
- private readonly root;
27
- constructor(tree: RouteNode);
28
- match(pathname: string): ResolvedRoute | undefined;
29
- findErrorBoundary(pathname: string): string | undefined;
30
- findRoute(pattern: string): RouteNode | undefined;
31
- private walk;
32
- /**
33
- * Walk for error boundary. Follows the same priority as match
34
- * (static → dynamic → wildcard) without backtracking across branches.
35
- * Returns the deepest error boundary module path found along the path.
36
- */
37
- private walkForBoundary;
38
- }
@@ -1,206 +0,0 @@
1
- /**
2
- * Route Trie
3
- *
4
- * Segment-based trie implementing RouteResolver for O(depth) route matching.
5
- *
6
- * Each URL segment maps to a trie node. Nodes are tried in order:
7
- * static → dynamic (:param) → wildcard (:rest*). Backtracking handles
8
- * cases where a dynamic path leads to a dead end but a wildcard at an
9
- * ancestor would match.
10
- *
11
- * Static segment matching is case-sensitive, per RFC 3986.
12
- *
13
- * Accepts a RouteNode tree (the JSON-serializable manifest from Runtime)
14
- * and converts it to an internal trie with Map-based static children for
15
- * O(1) segment lookup.
16
- */
17
- function createNode() {
18
- return { static: new Map() };
19
- }
20
- /** Try decodeURIComponent, return the original segment on malformed input. */
21
- function safeDecode(segment) {
22
- try {
23
- return decodeURIComponent(segment);
24
- }
25
- catch {
26
- return segment;
27
- }
28
- }
29
- /**
30
- * Split a normalized pathname into segments.
31
- * Assumes leading slash, no trailing slash. Must NOT be called with '/'.
32
- */
33
- function splitSegments(pathname) {
34
- return pathname.substring(1).split('/');
35
- }
36
- /**
37
- * Convert a RouteNode tree into a TrieNode tree.
38
- * Recursively walks the RouteNode, converting Record children to Map
39
- * and reconstructing URL patterns at each node.
40
- */
41
- function convertNode(source, pattern) {
42
- const node = createNode();
43
- // Terminal route (has files or redirect)
44
- if (source.files || source.redirect) {
45
- node.route = source;
46
- node.pattern = pattern;
47
- }
48
- // Error boundary
49
- if (source.errorBoundary) {
50
- node.errorBoundary = source.errorBoundary;
51
- }
52
- // Static children
53
- if (source.children) {
54
- for (const [segment, child] of Object.entries(source.children)) {
55
- const childPattern = pattern === '/' ? `/${segment}` : `${pattern}/${segment}`;
56
- node.static.set(segment, convertNode(child, childPattern));
57
- }
58
- }
59
- // Dynamic child
60
- if (source.dynamic) {
61
- const { param, child } = source.dynamic;
62
- const childPattern = pattern === '/' ? `/:${param}` : `${pattern}/:${param}`;
63
- node.dynamic = { param, node: convertNode(child, childPattern) };
64
- }
65
- // Wildcard child
66
- if (source.wildcard) {
67
- const { param, child } = source.wildcard;
68
- const childPattern = pattern === '/' ? `/:${param}*` : `${pattern}/:${param}*`;
69
- node.wildcard = { param, node: convertNode(child, childPattern) };
70
- }
71
- return node;
72
- }
73
- /**
74
- * Trie-based route resolver.
75
- *
76
- * Implements RouteResolver with O(depth) matching by walking the trie.
77
- * Constructed from a RouteNode tree (produced by Runtime.scanRoutes).
78
- */
79
- export class RouteTrie {
80
- root;
81
- constructor(tree) {
82
- this.root = convertNode(tree, '/');
83
- }
84
- match(pathname) {
85
- // Normalize: strip trailing slash (except bare '/')
86
- if (pathname.length > 1 && pathname.endsWith('/')) {
87
- pathname = pathname.slice(0, -1);
88
- }
89
- if (!pathname.startsWith('/')) {
90
- pathname = '/' + pathname;
91
- }
92
- if (pathname === '/') {
93
- if (this.root.route) {
94
- return { node: this.root.route, pattern: '/', params: {} };
95
- }
96
- return undefined;
97
- }
98
- const segments = splitSegments(pathname);
99
- return this.walk(this.root, segments, 0, {});
100
- }
101
- findErrorBoundary(pathname) {
102
- if (pathname.length > 1 && pathname.endsWith('/')) {
103
- pathname = pathname.slice(0, -1);
104
- }
105
- if (!pathname.startsWith('/')) {
106
- pathname = '/' + pathname;
107
- }
108
- if (pathname === '/')
109
- return this.root.errorBoundary;
110
- const segments = splitSegments(pathname);
111
- return this.walkForBoundary(this.root, segments, 0, this.root.errorBoundary);
112
- }
113
- findRoute(pattern) {
114
- if (pattern === '/') {
115
- return this.root.route;
116
- }
117
- const segments = splitSegments(pattern);
118
- let node = this.root;
119
- for (const segment of segments) {
120
- let child;
121
- if (segment.startsWith(':') && segment.endsWith('*')) {
122
- child = node.wildcard?.node;
123
- }
124
- else if (segment.startsWith(':')) {
125
- child = node.dynamic?.node;
126
- }
127
- else {
128
- child = node.static.get(segment);
129
- }
130
- if (!child)
131
- return undefined;
132
- node = child;
133
- }
134
- return node.route;
135
- }
136
- // ── Private matching ──────────────────────────────────────────────────
137
- walk(node, segments, index, params) {
138
- if (index === segments.length) {
139
- if (node.route) {
140
- return { node: node.route, pattern: node.pattern, params: { ...params } };
141
- }
142
- if (node.wildcard?.node.route) {
143
- return {
144
- node: node.wildcard.node.route,
145
- pattern: node.wildcard.node.pattern,
146
- params: { ...params, [node.wildcard.param]: '' },
147
- };
148
- }
149
- return undefined;
150
- }
151
- const segment = segments[index];
152
- // 1. Try static child
153
- const staticChild = node.static.get(segment);
154
- if (staticChild) {
155
- const result = this.walk(staticChild, segments, index + 1, params);
156
- if (result)
157
- return result;
158
- }
159
- // 2. Try dynamic child (single segment)
160
- if (node.dynamic) {
161
- const { param, node: dynamicNode } = node.dynamic;
162
- params[param] = safeDecode(segment);
163
- const result = this.walk(dynamicNode, segments, index + 1, params);
164
- if (result)
165
- return result;
166
- delete params[param];
167
- }
168
- // 3. Try wildcard (consumes all remaining segments)
169
- if (node.wildcard?.node.route) {
170
- const { param, node: wildcardNode } = node.wildcard;
171
- let rest = safeDecode(segments[index]);
172
- for (let i = index + 1; i < segments.length; i++) {
173
- rest += '/' + safeDecode(segments[i]);
174
- }
175
- return {
176
- node: wildcardNode.route,
177
- pattern: wildcardNode.pattern,
178
- params: { ...params, [param]: rest },
179
- };
180
- }
181
- return undefined;
182
- }
183
- /**
184
- * Walk for error boundary. Follows the same priority as match
185
- * (static → dynamic → wildcard) without backtracking across branches.
186
- * Returns the deepest error boundary module path found along the path.
187
- */
188
- walkForBoundary(node, segments, index, deepest) {
189
- if (index === segments.length) {
190
- return node.errorBoundary ?? deepest;
191
- }
192
- const segment = segments[index];
193
- const staticChild = node.static.get(segment);
194
- if (staticChild) {
195
- return this.walkForBoundary(staticChild, segments, index + 1, staticChild.errorBoundary ?? deepest);
196
- }
197
- if (node.dynamic) {
198
- return this.walkForBoundary(node.dynamic.node, segments, index + 1, node.dynamic.node.errorBoundary ?? deepest);
199
- }
200
- if (node.wildcard) {
201
- return node.wildcard.node.errorBoundary ?? deepest;
202
- }
203
- return deepest;
204
- }
205
- }
206
- //# sourceMappingURL=route.trie.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.trie.js","sourceRoot":"","sources":["../../../src/route/route.trie.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Logger Interface
3
- *
4
- * Minimal pluggable logger for surfacing errors from silent catch blocks.
5
- * Structurally compatible with hardkore's StructuredLogger — any instance
6
- * of that class satisfies this interface without an explicit dependency.
7
- *
8
- * Default: no-op (silent degradation). Call setLogger() at startup to wire in.
9
- */
10
- export interface Logger {
11
- error(msg: string, error?: Error): void;
12
- warn(msg: string): void;
13
- }
14
- /** Module-level logger. Always callable — defaults to no-op. */
15
- export declare const logger: Logger;
16
- /** Replace the logger implementation. Call once at startup. */
17
- export declare function setLogger(impl: Logger): void;
@@ -1,9 +0,0 @@
1
- const noop = () => { };
2
- /** Module-level logger. Always callable — defaults to no-op. */
3
- export const logger = { error: noop, warn: noop };
4
- /** Replace the logger implementation. Call once at startup. */
5
- export function setLogger(impl) {
6
- logger.error = impl.error.bind(impl);
7
- logger.warn = impl.warn.bind(impl);
8
- }
9
- //# sourceMappingURL=logger.type.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.type.js","sourceRoot":"","sources":["../../../src/type/logger.type.ts"],"names":[],"mappings":"AAcA,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAEtB,gEAAgE;AAChE,MAAM,CAAC,MAAM,MAAM,GAAW,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAE1D,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Markdown Renderer Interface
3
- *
4
- * Implement this to provide custom markdown rendering.
5
- * Used by MarkdownElement (browser) and SsrHtmlRouter (server).
6
- */
7
- export interface MarkdownRenderer {
8
- /**
9
- * Initialize the renderer (e.g., load WASM).
10
- * Called once before first render.
11
- */
12
- init?(): Promise<void>;
13
- /**
14
- * Render markdown to HTML.
15
- *
16
- * **Security:** Output is assigned to `innerHTML` — the renderer must
17
- * sanitize dangerous markup. See `doc/08-markdown-renderer.md`.
18
- */
19
- render(markdown: string): string;
20
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=markdown.type.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.type.js","sourceRoot":"","sources":["../../../src/type/markdown.type.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-tree.type.js","sourceRoot":"","sources":["../../../src/type/route-tree.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}