@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.
- package/README.md +1 -1
- package/core/component/abstract.component.ts +74 -0
- package/{src → core}/component/page.component.ts +3 -61
- package/core/component/widget.component.ts +54 -0
- package/core/pipeline/pipeline.ts +224 -0
- package/{src/renderer/ssr → core/renderer}/html.renderer.ts +19 -45
- package/{src/renderer/ssr → core/renderer}/md.renderer.ts +21 -40
- package/{src/renderer/ssr → core/renderer}/ssr.renderer.ts +42 -53
- package/{src/route → core/router}/route.resolver.ts +1 -10
- package/core/router/route.trie.ts +175 -0
- package/core/runtime/abstract.runtime.ts +47 -0
- package/core/server/emroute.server.ts +346 -0
- package/core/type/component.type.ts +39 -0
- package/core/type/element.type.ts +10 -0
- package/core/type/logger.type.ts +20 -0
- package/core/type/markdown.type.ts +8 -0
- package/core/type/route-tree.type.ts +28 -0
- package/core/type/route.type.ts +75 -0
- package/core/type/widget.type.ts +27 -0
- package/core/util/html.util.ts +50 -0
- package/{src → core}/util/md.util.ts +0 -2
- package/{src/route → core/util}/route-tree.util.ts +0 -2
- package/{src → core}/util/widget-resolve.util.ts +15 -45
- package/{src → core}/widget/widget.parser.ts +0 -21
- package/core/widget/widget.registry.ts +24 -0
- package/dist/core/component/abstract.component.d.ts +48 -0
- package/dist/core/component/abstract.component.js +42 -0
- package/dist/core/component/abstract.component.js.map +1 -0
- package/dist/core/component/page.component.d.ts +23 -0
- package/dist/core/component/page.component.js +49 -0
- package/dist/core/component/page.component.js.map +1 -0
- package/dist/core/component/widget.component.d.ts +17 -0
- package/dist/core/component/widget.component.js +37 -0
- package/dist/core/component/widget.component.js.map +1 -0
- package/dist/core/pipeline/pipeline.d.ts +61 -0
- package/dist/core/pipeline/pipeline.js +189 -0
- package/dist/core/pipeline/pipeline.js.map +1 -0
- package/dist/{src/renderer/ssr → core/renderer}/html.renderer.d.ts +8 -24
- package/dist/{src/renderer/ssr → core/renderer}/html.renderer.js +12 -33
- package/dist/core/renderer/html.renderer.js.map +1 -0
- package/dist/{src/renderer/ssr → core/renderer}/md.renderer.d.ts +6 -21
- package/dist/{src/renderer/ssr → core/renderer}/md.renderer.js +14 -31
- package/dist/core/renderer/md.renderer.js.map +1 -0
- package/dist/{src/renderer/ssr → core/renderer}/ssr.renderer.d.ts +11 -17
- package/dist/{src/renderer/ssr → core/renderer}/ssr.renderer.js +34 -36
- package/dist/core/renderer/ssr.renderer.js.map +1 -0
- package/dist/{src/route → core/router}/route.resolver.d.ts +1 -8
- package/dist/{src/route → core/router}/route.resolver.js +0 -1
- package/dist/core/router/route.resolver.js.map +1 -0
- package/dist/core/router/route.trie.d.ts +32 -0
- package/dist/core/router/route.trie.js +152 -0
- package/dist/core/router/route.trie.js.map +1 -0
- package/dist/core/runtime/abstract.runtime.d.ts +32 -0
- package/dist/core/runtime/abstract.runtime.js +26 -0
- package/dist/core/runtime/abstract.runtime.js.map +1 -0
- package/dist/core/server/emroute.server.d.ts +48 -0
- package/dist/core/server/emroute.server.js +261 -0
- package/dist/core/server/emroute.server.js.map +1 -0
- package/dist/core/server/server.type.d.ts +45 -0
- package/dist/core/server/server.type.js +11 -0
- package/dist/core/server/server.type.js.map +1 -0
- package/dist/core/type/component.type.d.ts +37 -0
- package/dist/core/type/component.type.js +7 -0
- package/dist/core/type/component.type.js.map +1 -0
- package/dist/core/type/element.type.d.ts +9 -0
- package/dist/core/type/element.type.js +5 -0
- package/dist/core/type/element.type.js.map +1 -0
- package/dist/core/type/logger.type.d.ts +14 -0
- package/dist/core/type/logger.type.js +8 -0
- package/dist/core/type/logger.type.js.map +1 -0
- package/dist/core/type/markdown.type.d.ts +7 -0
- package/dist/core/type/markdown.type.js +5 -0
- package/dist/core/type/markdown.type.js.map +1 -0
- package/dist/{src → core}/type/route-tree.type.d.ts +0 -12
- package/dist/{src → core}/type/route-tree.type.js +0 -1
- package/dist/core/type/route-tree.type.js.map +1 -0
- package/dist/core/type/route.type.d.ts +62 -0
- package/dist/core/type/route.type.js +7 -0
- package/dist/core/type/route.type.js.map +1 -0
- package/dist/core/type/widget.type.d.ts +27 -0
- package/dist/core/type/widget.type.js +5 -0
- package/dist/core/type/widget.type.js.map +1 -0
- package/dist/core/util/html.util.d.ts +14 -0
- package/dist/core/util/html.util.js +43 -0
- package/dist/core/util/html.util.js.map +1 -0
- package/dist/{src → core}/util/md.util.d.ts +0 -1
- package/dist/{src → core}/util/md.util.js +0 -2
- package/dist/core/util/md.util.js.map +1 -0
- package/dist/{src/route → core/util}/route-tree.util.js +0 -2
- package/dist/core/util/route-tree.util.js.map +1 -0
- package/dist/core/util/widget-resolve.util.d.ts +32 -0
- package/dist/{src → core}/util/widget-resolve.util.js +11 -41
- package/dist/core/util/widget-resolve.util.js.map +1 -0
- package/dist/{src → core}/widget/widget.parser.d.ts +0 -13
- package/dist/{src → core}/widget/widget.parser.js +0 -21
- package/dist/core/widget/widget.parser.js.map +1 -0
- package/dist/core/widget/widget.registry.d.ts +13 -0
- package/dist/core/widget/widget.registry.js +19 -0
- package/dist/core/widget/widget.registry.js.map +1 -0
- package/dist/emroute.js +1137 -1151
- package/dist/emroute.js.map +36 -5
- package/dist/runtime/abstract.runtime.d.ts +50 -5
- package/dist/runtime/abstract.runtime.js +446 -6
- package/dist/runtime/abstract.runtime.js.map +1 -1
- package/dist/runtime/bun/fs/bun-fs.runtime.d.ts +1 -0
- package/dist/runtime/bun/fs/bun-fs.runtime.js +18 -2
- package/dist/runtime/bun/fs/bun-fs.runtime.js.map +1 -1
- package/dist/runtime/bun/sqlite/bun-sqlite.runtime.d.ts +2 -0
- package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js +11 -1
- package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js.map +1 -1
- package/dist/runtime/fetch.runtime.d.ts +3 -3
- package/dist/runtime/fetch.runtime.js +3 -3
- package/dist/runtime/sitemap.generator.d.ts +1 -1
- package/dist/runtime/sitemap.generator.js +1 -1
- package/dist/runtime/sitemap.generator.js.map +1 -1
- package/dist/runtime/universal/fs/universal-fs.runtime.d.ts +1 -0
- package/dist/runtime/universal/fs/universal-fs.runtime.js +18 -2
- package/dist/runtime/universal/fs/universal-fs.runtime.js.map +1 -1
- package/dist/server/build.util.d.ts +9 -10
- package/dist/server/build.util.js +45 -36
- package/dist/server/build.util.js.map +1 -1
- package/dist/server/codegen.util.d.ts +1 -1
- package/dist/server/emroute.server.d.ts +8 -35
- package/dist/server/emroute.server.js +7 -341
- package/dist/server/emroute.server.js.map +1 -1
- package/dist/server/esbuild-manifest.plugin.js +1 -1
- package/dist/server/esbuild-manifest.plugin.js.map +1 -1
- package/dist/server/server-api.type.d.ts +3 -68
- package/dist/server/server-api.type.js +1 -8
- package/dist/server/server-api.type.js.map +1 -1
- package/dist/src/element/component.element.d.ts +4 -7
- package/dist/src/element/component.element.js +23 -22
- package/dist/src/element/component.element.js.map +1 -1
- package/dist/src/element/markdown.element.d.ts +2 -2
- package/dist/src/element/markdown.element.js +4 -3
- package/dist/src/element/markdown.element.js.map +1 -1
- package/dist/src/index.d.ts +15 -13
- package/dist/src/index.js +8 -8
- package/dist/src/index.js.map +1 -1
- package/dist/src/renderer/spa/emroute.app.d.ts +50 -0
- package/dist/src/renderer/spa/emroute.app.js +246 -0
- package/dist/src/renderer/spa/emroute.app.js.map +1 -0
- package/dist/src/renderer/spa/mod.d.ts +17 -16
- package/dist/src/renderer/spa/mod.js +9 -9
- package/dist/src/renderer/spa/mod.js.map +1 -1
- package/dist/src/renderer/spa/thin-client.d.ts +3 -3
- package/dist/src/renderer/spa/thin-client.js +34 -12
- package/dist/src/renderer/spa/thin-client.js.map +1 -1
- package/dist/src/route/route.core.d.ts +3 -3
- package/dist/src/route/route.core.js +21 -7
- package/dist/src/route/route.core.js.map +1 -1
- package/dist/src/util/html.util.d.ts +5 -22
- package/dist/src/util/html.util.js +8 -56
- package/dist/src/util/html.util.js.map +1 -1
- package/dist/src/widget/breadcrumb.widget.d.ts +2 -2
- package/dist/src/widget/breadcrumb.widget.js +2 -2
- package/dist/src/widget/breadcrumb.widget.js.map +1 -1
- package/dist/src/widget/page-title.widget.d.ts +1 -1
- package/dist/src/widget/page-title.widget.js +1 -1
- package/dist/src/widget/page-title.widget.js.map +1 -1
- package/package.json +8 -8
- package/runtime/abstract.runtime.ts +483 -8
- package/runtime/bun/fs/bun-fs.runtime.ts +17 -1
- package/runtime/bun/sqlite/bun-sqlite.runtime.ts +11 -0
- package/runtime/fetch.runtime.ts +3 -3
- package/runtime/sitemap.generator.ts +2 -2
- package/runtime/universal/fs/universal-fs.runtime.ts +17 -1
- package/server/build.util.ts +53 -47
- package/server/codegen.util.ts +1 -1
- package/server/emroute.server.ts +12 -412
- package/src/element/component.element.ts +24 -31
- package/src/element/markdown.element.ts +5 -4
- package/src/index.ts +22 -18
- package/src/renderer/spa/{thin-client.ts → emroute.app.ts} +46 -22
- package/src/renderer/spa/mod.ts +22 -22
- package/src/util/html.util.ts +16 -61
- package/src/widget/breadcrumb.widget.ts +3 -3
- package/src/widget/page-title.widget.ts +1 -1
- package/dist/src/component/abstract.component.d.ts +0 -199
- package/dist/src/component/abstract.component.js +0 -84
- package/dist/src/component/abstract.component.js.map +0 -1
- package/dist/src/component/page.component.d.ts +0 -74
- package/dist/src/component/page.component.js +0 -107
- package/dist/src/component/page.component.js.map +0 -1
- package/dist/src/component/widget.component.d.ts +0 -47
- package/dist/src/component/widget.component.js +0 -69
- package/dist/src/component/widget.component.js.map +0 -1
- package/dist/src/renderer/ssr/html.renderer.js.map +0 -1
- package/dist/src/renderer/ssr/md.renderer.js.map +0 -1
- package/dist/src/renderer/ssr/ssr.renderer.js.map +0 -1
- package/dist/src/route/route-tree.util.js.map +0 -1
- package/dist/src/route/route.matcher.d.ts +0 -86
- package/dist/src/route/route.matcher.js +0 -214
- package/dist/src/route/route.matcher.js.map +0 -1
- package/dist/src/route/route.resolver.js.map +0 -1
- package/dist/src/route/route.trie.d.ts +0 -38
- package/dist/src/route/route.trie.js +0 -206
- package/dist/src/route/route.trie.js.map +0 -1
- package/dist/src/type/logger.type.d.ts +0 -17
- package/dist/src/type/logger.type.js +0 -9
- package/dist/src/type/logger.type.js.map +0 -1
- package/dist/src/type/markdown.type.d.ts +0 -20
- package/dist/src/type/markdown.type.js +0 -2
- package/dist/src/type/markdown.type.js.map +0 -1
- package/dist/src/type/route-tree.type.js.map +0 -1
- package/dist/src/type/route.type.d.ts +0 -94
- package/dist/src/type/route.type.js +0 -8
- package/dist/src/type/route.type.js.map +0 -1
- package/dist/src/type/widget.type.d.ts +0 -55
- package/dist/src/type/widget.type.js +0 -10
- package/dist/src/type/widget.type.js.map +0 -1
- package/dist/src/util/logger.util.d.ts +0 -26
- package/dist/src/util/logger.util.js +0 -80
- package/dist/src/util/logger.util.js.map +0 -1
- package/dist/src/util/md.util.js.map +0 -1
- package/dist/src/util/widget-resolve.util.d.ts +0 -52
- package/dist/src/util/widget-resolve.util.js.map +0 -1
- package/dist/src/widget/widget.parser.js.map +0 -1
- package/dist/src/widget/widget.registry.d.ts +0 -23
- package/dist/src/widget/widget.registry.js +0 -42
- package/dist/src/widget/widget.registry.js.map +0 -1
- package/runtime/bun/esbuild-runtime-loader.plugin.ts +0 -112
- package/server/esbuild-manifest.plugin.ts +0 -209
- package/server/server-api.type.ts +0 -97
- package/src/component/abstract.component.ts +0 -231
- package/src/component/widget.component.ts +0 -85
- package/src/route/route.core.ts +0 -362
- package/src/route/route.trie.ts +0 -265
- package/src/type/logger.type.ts +0 -24
- package/src/type/markdown.type.ts +0 -21
- package/src/type/route-tree.type.ts +0 -51
- package/src/type/route.type.ts +0 -124
- package/src/type/widget.type.ts +0 -65
- package/src/util/logger.util.ts +0 -83
- package/src/widget/widget.registry.ts +0 -51
- /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 +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"}
|