@liteforge/router 0.1.0
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/LICENSE +21 -0
- package/README.md +296 -0
- package/dist/components.d.ts +75 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +475 -0
- package/dist/components.js.map +1 -0
- package/dist/guards.d.ts +103 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +268 -0
- package/dist/guards.js.map +1 -0
- package/dist/history.d.ts +33 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +315 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/lazy.d.ts +197 -0
- package/dist/lazy.d.ts.map +1 -0
- package/dist/lazy.js +458 -0
- package/dist/lazy.js.map +1 -0
- package/dist/middleware.d.ts +69 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +215 -0
- package/dist/middleware.js.map +1 -0
- package/dist/route-matcher.d.ts +80 -0
- package/dist/route-matcher.d.ts.map +1 -0
- package/dist/route-matcher.js +482 -0
- package/dist/route-matcher.js.map +1 -0
- package/dist/router.d.ts +26 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +393 -0
- package/dist/router.js.map +1 -0
- package/dist/types.d.ts +459 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Middleware Definition
|
|
3
|
+
// =============================================================================
|
|
4
|
+
/**
|
|
5
|
+
* Define a named route middleware
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const loggerMiddleware = defineMiddleware('logger', async (ctx, next) => {
|
|
10
|
+
* console.log(`Navigating from ${ctx.from?.path} to ${ctx.to.path}`);
|
|
11
|
+
* await next();
|
|
12
|
+
* console.log(`Navigation complete to ${ctx.to.path}`);
|
|
13
|
+
* });
|
|
14
|
+
*
|
|
15
|
+
* const analyticsMiddleware = defineMiddleware('analytics', async (ctx, next) => {
|
|
16
|
+
* const analytics = ctx.use('analytics');
|
|
17
|
+
* analytics.track('page_view', { path: ctx.to.path });
|
|
18
|
+
* await next();
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function defineMiddleware(name, handler) {
|
|
23
|
+
return { name, handler };
|
|
24
|
+
}
|
|
25
|
+
// =============================================================================
|
|
26
|
+
// Middleware Execution
|
|
27
|
+
// =============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Compose multiple middleware into a single function
|
|
30
|
+
* Uses an onion-style execution model (like Koa)
|
|
31
|
+
*/
|
|
32
|
+
export function composeMiddleware(middleware) {
|
|
33
|
+
return async function composed(context) {
|
|
34
|
+
let index = -1;
|
|
35
|
+
let redirectResult;
|
|
36
|
+
async function dispatch(i) {
|
|
37
|
+
if (i <= index) {
|
|
38
|
+
throw new Error('next() called multiple times in middleware');
|
|
39
|
+
}
|
|
40
|
+
index = i;
|
|
41
|
+
if (i >= middleware.length) {
|
|
42
|
+
// All middleware executed
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const mw = middleware[i];
|
|
46
|
+
try {
|
|
47
|
+
const result = await mw.handler(context, () => dispatch(i + 1));
|
|
48
|
+
// Check if middleware returned a redirect
|
|
49
|
+
if (result !== undefined && result !== null) {
|
|
50
|
+
// Middleware wants to redirect
|
|
51
|
+
redirectResult = result;
|
|
52
|
+
// Don't continue to next middleware
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.error(`Middleware "${mw.name}" threw an error:`, error);
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
await dispatch(0);
|
|
62
|
+
return redirectResult !== undefined ? { redirect: redirectResult } : {};
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Run middleware chain with abort capability
|
|
67
|
+
*/
|
|
68
|
+
export async function runMiddleware(middleware, context) {
|
|
69
|
+
if (middleware.length === 0) {
|
|
70
|
+
return { completed: true };
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const composed = composeMiddleware(middleware);
|
|
74
|
+
const result = await composed(context);
|
|
75
|
+
if (result.redirect) {
|
|
76
|
+
return { completed: false, redirect: result.redirect };
|
|
77
|
+
}
|
|
78
|
+
return { completed: true };
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error('Middleware chain error:', error);
|
|
82
|
+
return { completed: false };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// =============================================================================
|
|
86
|
+
// Built-in Middleware
|
|
87
|
+
// =============================================================================
|
|
88
|
+
/**
|
|
89
|
+
* Create a logger middleware
|
|
90
|
+
*/
|
|
91
|
+
export function createLoggerMiddleware(options = {}) {
|
|
92
|
+
const { prefix = '[Router]', logTiming = false } = options;
|
|
93
|
+
return defineMiddleware('logger', async (ctx, next) => {
|
|
94
|
+
const fromPath = ctx.from?.path ?? '(initial)';
|
|
95
|
+
const toPath = ctx.to.path;
|
|
96
|
+
if (logTiming) {
|
|
97
|
+
const start = performance.now();
|
|
98
|
+
console.log(`${prefix} ${fromPath} → ${toPath}`);
|
|
99
|
+
await next();
|
|
100
|
+
const duration = (performance.now() - start).toFixed(2);
|
|
101
|
+
console.log(`${prefix} Navigation complete (${duration}ms)`);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
console.log(`${prefix} ${fromPath} → ${toPath}`);
|
|
105
|
+
await next();
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/* v8 ignore start - DOM-dependent middlewares, tested with Playwright */
|
|
110
|
+
/**
|
|
111
|
+
* Create a scroll restoration middleware
|
|
112
|
+
*/
|
|
113
|
+
export function createScrollMiddleware(options = {}) {
|
|
114
|
+
const { behavior = 'auto', scrollToHash = true } = options;
|
|
115
|
+
const scrollPositions = new Map();
|
|
116
|
+
return defineMiddleware('scroll', async (ctx, next) => {
|
|
117
|
+
// Save current scroll position before navigation
|
|
118
|
+
if (ctx.from) {
|
|
119
|
+
scrollPositions.set(ctx.from.path, {
|
|
120
|
+
x: window.scrollX,
|
|
121
|
+
y: window.scrollY,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
await next();
|
|
125
|
+
// Scroll to hash if present
|
|
126
|
+
if (scrollToHash && ctx.to.hash) {
|
|
127
|
+
const element = document.getElementById(ctx.to.hash);
|
|
128
|
+
if (element) {
|
|
129
|
+
element.scrollIntoView({ behavior });
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Check for saved position (back/forward navigation)
|
|
134
|
+
const savedPosition = scrollPositions.get(ctx.to.path);
|
|
135
|
+
if (savedPosition) {
|
|
136
|
+
window.scrollTo({
|
|
137
|
+
left: savedPosition.x,
|
|
138
|
+
top: savedPosition.y,
|
|
139
|
+
behavior,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// New navigation - scroll to top
|
|
144
|
+
window.scrollTo({ top: 0, left: 0, behavior });
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Create a page title middleware
|
|
150
|
+
*/
|
|
151
|
+
export function createTitleMiddleware(options = {}) {
|
|
152
|
+
const { suffix = '', separator = ' | ', defaultTitle = 'Page', } = options;
|
|
153
|
+
return defineMiddleware('title', async (ctx, next) => {
|
|
154
|
+
await next();
|
|
155
|
+
// Get title from route meta
|
|
156
|
+
const lastMatch = ctx.matched[ctx.matched.length - 1];
|
|
157
|
+
const meta = lastMatch?.route.meta ?? {};
|
|
158
|
+
const pageTitle = meta.title ?? defaultTitle;
|
|
159
|
+
// Build full title
|
|
160
|
+
let fullTitle = pageTitle;
|
|
161
|
+
if (suffix) {
|
|
162
|
+
fullTitle += separator + suffix;
|
|
163
|
+
}
|
|
164
|
+
document.title = fullTitle;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/* v8 ignore stop */
|
|
168
|
+
/**
|
|
169
|
+
* Create an analytics middleware
|
|
170
|
+
*/
|
|
171
|
+
export function createAnalyticsMiddleware(trackFn) {
|
|
172
|
+
return defineMiddleware('analytics', async (ctx, next) => {
|
|
173
|
+
await next();
|
|
174
|
+
// Track page view after navigation completes
|
|
175
|
+
trackFn('page_view', {
|
|
176
|
+
path: ctx.to.path,
|
|
177
|
+
query: ctx.to.query,
|
|
178
|
+
from: ctx.from?.path,
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Create a loading indicator middleware
|
|
184
|
+
*/
|
|
185
|
+
export function createLoadingMiddleware(options = {}) {
|
|
186
|
+
const { onStart, onEnd, delay = 0 } = options;
|
|
187
|
+
let timeoutId = null;
|
|
188
|
+
return defineMiddleware('loading', async (_ctx, next) => {
|
|
189
|
+
// Clear any existing timeout
|
|
190
|
+
if (timeoutId !== null) {
|
|
191
|
+
clearTimeout(timeoutId);
|
|
192
|
+
}
|
|
193
|
+
// Start loading after delay (to avoid flashing for fast navigations)
|
|
194
|
+
if (delay > 0) {
|
|
195
|
+
timeoutId = setTimeout(() => {
|
|
196
|
+
onStart?.();
|
|
197
|
+
}, delay);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
onStart?.();
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
await next();
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
// Cancel delayed start if navigation was fast
|
|
207
|
+
if (timeoutId !== null) {
|
|
208
|
+
clearTimeout(timeoutId);
|
|
209
|
+
timeoutId = null;
|
|
210
|
+
}
|
|
211
|
+
onEnd?.();
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { RouteDefinition, CompiledRoute, RouteParams, MatchedRoute, RouteMatch, RouteGuard, Location, QueryParams, NavigationTarget, LazyDefaults } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a URL path into its components
|
|
4
|
+
*/
|
|
5
|
+
export declare function parsePath(path: string): {
|
|
6
|
+
path: string;
|
|
7
|
+
search: string;
|
|
8
|
+
hash: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Parse query string into key-value pairs
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseQuery(search: string): QueryParams;
|
|
14
|
+
/**
|
|
15
|
+
* Stringify query params back to a query string
|
|
16
|
+
*/
|
|
17
|
+
export declare function stringifyQuery(query: QueryParams): string;
|
|
18
|
+
/**
|
|
19
|
+
* Create a Location object from various inputs
|
|
20
|
+
*/
|
|
21
|
+
export declare function createLocation(target: NavigationTarget, state?: unknown): Location;
|
|
22
|
+
/**
|
|
23
|
+
* Normalize a path - ensures leading slash, removes trailing slash (except for root)
|
|
24
|
+
*/
|
|
25
|
+
export declare function normalizePath(path: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Join parent and child paths
|
|
28
|
+
*/
|
|
29
|
+
export declare function joinPaths(parent: string, child: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Compile a path pattern into a regex and extract param names
|
|
32
|
+
*/
|
|
33
|
+
export declare function compilePath(path: string): {
|
|
34
|
+
regex: RegExp;
|
|
35
|
+
paramNames: string[];
|
|
36
|
+
isCatchAll: boolean;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Options for route compilation
|
|
40
|
+
*/
|
|
41
|
+
export interface CompileRouteOptions {
|
|
42
|
+
/** Guard registry for resolving named guards */
|
|
43
|
+
guardRegistry: Map<string, RouteGuard>;
|
|
44
|
+
/** Global lazy loading defaults */
|
|
45
|
+
lazyDefaults: LazyDefaults | undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Compile a route definition into a CompiledRoute
|
|
49
|
+
*/
|
|
50
|
+
export declare function compileRoute(definition: RouteDefinition, parent: CompiledRoute | null, options: CompileRouteOptions): CompiledRoute;
|
|
51
|
+
/**
|
|
52
|
+
* Compile all route definitions
|
|
53
|
+
*/
|
|
54
|
+
export declare function compileRoutes(definitions: RouteDefinition[], guardRegistry?: Map<string, RouteGuard>, lazyDefaults?: LazyDefaults): CompiledRoute[];
|
|
55
|
+
/**
|
|
56
|
+
* Match a path against a single compiled route
|
|
57
|
+
*/
|
|
58
|
+
export declare function matchRoute(path: string, route: CompiledRoute): MatchedRoute | null;
|
|
59
|
+
/**
|
|
60
|
+
* Match a path against compiled routes
|
|
61
|
+
* Returns array of matched routes (for nested routes) or null if no match
|
|
62
|
+
*/
|
|
63
|
+
export declare function matchRoutes(path: string, routes: CompiledRoute[]): RouteMatch | null;
|
|
64
|
+
/**
|
|
65
|
+
* Find a route by name in the route tree
|
|
66
|
+
*/
|
|
67
|
+
export declare function findRouteByName(name: string, routes: CompiledRoute[]): CompiledRoute | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Generate a path from a route and params
|
|
70
|
+
*/
|
|
71
|
+
export declare function generatePath(route: CompiledRoute, params?: RouteParams): string;
|
|
72
|
+
/**
|
|
73
|
+
* Check if a path is active (matches current location)
|
|
74
|
+
*/
|
|
75
|
+
export declare function isPathActive(currentPath: string, targetPath: string, exact?: boolean): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Flatten route tree into a list of all routes
|
|
78
|
+
*/
|
|
79
|
+
export declare function flattenRoutes(routes: CompiledRoute[]): CompiledRoute[];
|
|
80
|
+
//# sourceMappingURL=route-matcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-matcher.d.ts","sourceRoot":"","sources":["../src/route-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,YAAY,EACb,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAoBtF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAkBtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAezD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,CA2BlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAelD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAa/D;AAaD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CA6DtG;AAyBD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,mCAAmC;IACnC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;CACxC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,aAAa,GAAG,IAAI,EAC5B,OAAO,EAAE,mBAAmB,GAC3B,aAAa,CAiEf;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,eAAe,EAAE,EAC9B,aAAa,GAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAa,EAClD,YAAY,CAAC,EAAE,YAAY,GAC1B,aAAa,EAAE,CAGjB;AA2DD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,GAAG,IAAI,CAiBlF;AA8DD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,GAAG,IAAI,CAGpF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,GAAG,SAAS,CAShG;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,GAAE,WAAgB,GAAG,MAAM,CAyBnF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,OAAe,GACrB,OAAO,CAiBT;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CActE"}
|