@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,482 @@
|
|
|
1
|
+
import { processRouteComponent } from './lazy.js';
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Path Parsing Utilities
|
|
4
|
+
// =============================================================================
|
|
5
|
+
/**
|
|
6
|
+
* Parse a URL path into its components
|
|
7
|
+
*/
|
|
8
|
+
export function parsePath(path) {
|
|
9
|
+
let pathname = path;
|
|
10
|
+
let search = '';
|
|
11
|
+
let hash = '';
|
|
12
|
+
// Extract hash
|
|
13
|
+
const hashIndex = pathname.indexOf('#');
|
|
14
|
+
if (hashIndex >= 0) {
|
|
15
|
+
hash = pathname.slice(hashIndex + 1);
|
|
16
|
+
pathname = pathname.slice(0, hashIndex);
|
|
17
|
+
}
|
|
18
|
+
// Extract search/query
|
|
19
|
+
const searchIndex = pathname.indexOf('?');
|
|
20
|
+
if (searchIndex >= 0) {
|
|
21
|
+
search = pathname.slice(searchIndex + 1);
|
|
22
|
+
pathname = pathname.slice(0, searchIndex);
|
|
23
|
+
}
|
|
24
|
+
return { path: pathname || '/', search, hash };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse query string into key-value pairs
|
|
28
|
+
*/
|
|
29
|
+
export function parseQuery(search) {
|
|
30
|
+
if (!search)
|
|
31
|
+
return {};
|
|
32
|
+
const query = {};
|
|
33
|
+
const params = new URLSearchParams(search);
|
|
34
|
+
for (const [key, value] of params.entries()) {
|
|
35
|
+
const existing = query[key];
|
|
36
|
+
if (existing === undefined) {
|
|
37
|
+
query[key] = value;
|
|
38
|
+
}
|
|
39
|
+
else if (Array.isArray(existing)) {
|
|
40
|
+
existing.push(value);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
query[key] = [existing, value];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return query;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Stringify query params back to a query string
|
|
50
|
+
*/
|
|
51
|
+
export function stringifyQuery(query) {
|
|
52
|
+
const params = new URLSearchParams();
|
|
53
|
+
for (const [key, value] of Object.entries(query)) {
|
|
54
|
+
if (Array.isArray(value)) {
|
|
55
|
+
for (const v of value) {
|
|
56
|
+
params.append(key, v);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
params.append(key, value);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const str = params.toString();
|
|
64
|
+
return str;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create a Location object from various inputs
|
|
68
|
+
*/
|
|
69
|
+
export function createLocation(target, state) {
|
|
70
|
+
if (typeof target === 'string') {
|
|
71
|
+
const { path, search, hash } = parsePath(target);
|
|
72
|
+
return {
|
|
73
|
+
href: target,
|
|
74
|
+
path,
|
|
75
|
+
search,
|
|
76
|
+
query: parseQuery(search),
|
|
77
|
+
hash,
|
|
78
|
+
state: state ?? null,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const search = target.query ? stringifyQuery(target.query) : '';
|
|
82
|
+
const hash = target.hash ?? '';
|
|
83
|
+
let href = target.path;
|
|
84
|
+
if (search)
|
|
85
|
+
href += '?' + search;
|
|
86
|
+
if (hash)
|
|
87
|
+
href += '#' + hash;
|
|
88
|
+
return {
|
|
89
|
+
href,
|
|
90
|
+
path: target.path,
|
|
91
|
+
search,
|
|
92
|
+
query: target.query ?? {},
|
|
93
|
+
hash,
|
|
94
|
+
state: target.state ?? state ?? null,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Normalize a path - ensures leading slash, removes trailing slash (except for root)
|
|
99
|
+
*/
|
|
100
|
+
export function normalizePath(path) {
|
|
101
|
+
// Ensure leading slash
|
|
102
|
+
if (!path.startsWith('/')) {
|
|
103
|
+
path = '/' + path;
|
|
104
|
+
}
|
|
105
|
+
// Remove duplicate slashes first
|
|
106
|
+
path = path.replace(/\/+/g, '/');
|
|
107
|
+
// Remove trailing slash (except for root path)
|
|
108
|
+
if (path !== '/' && path.endsWith('/')) {
|
|
109
|
+
path = path.slice(0, -1);
|
|
110
|
+
}
|
|
111
|
+
return path;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Join parent and child paths
|
|
115
|
+
*/
|
|
116
|
+
export function joinPaths(parent, child) {
|
|
117
|
+
// Handle root child path - it's relative to parent
|
|
118
|
+
if (child === '/' || child === '') {
|
|
119
|
+
return normalizePath(parent);
|
|
120
|
+
}
|
|
121
|
+
// Remove leading slash from child since we're joining
|
|
122
|
+
const childPath = child.startsWith('/') ? child.slice(1) : child;
|
|
123
|
+
// Ensure parent has trailing slash for joining
|
|
124
|
+
const parentPath = parent.endsWith('/') ? parent : parent + '/';
|
|
125
|
+
return normalizePath(parentPath + childPath);
|
|
126
|
+
}
|
|
127
|
+
// =============================================================================
|
|
128
|
+
// Route Compilation
|
|
129
|
+
// =============================================================================
|
|
130
|
+
/**
|
|
131
|
+
* Escape regex special characters
|
|
132
|
+
*/
|
|
133
|
+
function escapeRegex(str) {
|
|
134
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Compile a path pattern into a regex and extract param names
|
|
138
|
+
*/
|
|
139
|
+
export function compilePath(path) {
|
|
140
|
+
const paramNames = [];
|
|
141
|
+
let isCatchAll = false;
|
|
142
|
+
// Handle catch-all route
|
|
143
|
+
if (path === '*' || path === '/*' || path.endsWith('/*') || path.endsWith('*')) {
|
|
144
|
+
isCatchAll = true;
|
|
145
|
+
// Remove trailing * or /* for base path
|
|
146
|
+
const basePath = path.replace(/\/?\*$/, '') || '/';
|
|
147
|
+
const baseRegex = basePath === '/'
|
|
148
|
+
? ''
|
|
149
|
+
: escapeRegex(normalizePath(basePath));
|
|
150
|
+
// Catch-all captures everything after base path
|
|
151
|
+
paramNames.push('*');
|
|
152
|
+
return {
|
|
153
|
+
regex: new RegExp(`^${baseRegex}(?:/(.*))?$`),
|
|
154
|
+
paramNames,
|
|
155
|
+
isCatchAll,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
// Build regex pattern
|
|
159
|
+
let pattern = '';
|
|
160
|
+
const segments = normalizePath(path).split('/').filter(Boolean);
|
|
161
|
+
for (const segment of segments) {
|
|
162
|
+
pattern += '/';
|
|
163
|
+
if (segment.startsWith(':')) {
|
|
164
|
+
// Parameter segment
|
|
165
|
+
const paramName = segment.slice(1);
|
|
166
|
+
// Check for optional parameter (ends with ?)
|
|
167
|
+
if (paramName.endsWith('?')) {
|
|
168
|
+
const name = paramName.slice(0, -1);
|
|
169
|
+
paramNames.push(name);
|
|
170
|
+
// Optional param - group is optional
|
|
171
|
+
pattern = pattern.slice(0, -1); // Remove the leading slash we just added
|
|
172
|
+
pattern += `(?:/([^/]+))?`;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
paramNames.push(paramName);
|
|
176
|
+
pattern += '([^/]+)';
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
// Static segment
|
|
181
|
+
pattern += escapeRegex(segment);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Handle root path
|
|
185
|
+
if (pattern === '') {
|
|
186
|
+
pattern = '/';
|
|
187
|
+
}
|
|
188
|
+
// Exact match ($ at end)
|
|
189
|
+
return {
|
|
190
|
+
regex: new RegExp(`^${pattern}$`),
|
|
191
|
+
paramNames,
|
|
192
|
+
isCatchAll,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Extract inline guard objects from guard specification
|
|
197
|
+
* String guards are resolved at navigation time from the registry
|
|
198
|
+
*/
|
|
199
|
+
function extractInlineGuards(guard) {
|
|
200
|
+
if (!guard)
|
|
201
|
+
return [];
|
|
202
|
+
const guards = [];
|
|
203
|
+
const guardList = Array.isArray(guard) ? guard : [guard];
|
|
204
|
+
for (const g of guardList) {
|
|
205
|
+
if (typeof g !== 'string') {
|
|
206
|
+
// Direct guard object - add to inline guards
|
|
207
|
+
guards.push(g);
|
|
208
|
+
}
|
|
209
|
+
// String guards are resolved at navigation time
|
|
210
|
+
}
|
|
211
|
+
return guards;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Compile a route definition into a CompiledRoute
|
|
215
|
+
*/
|
|
216
|
+
export function compileRoute(definition, parent, options) {
|
|
217
|
+
const { lazyDefaults } = options;
|
|
218
|
+
const normalizedPath = normalizePath(definition.path);
|
|
219
|
+
const fullPath = parent ? joinPaths(parent.fullPath, normalizedPath) : normalizedPath;
|
|
220
|
+
const { regex, paramNames, isCatchAll } = compilePath(fullPath);
|
|
221
|
+
const compiled = {
|
|
222
|
+
path: normalizedPath,
|
|
223
|
+
fullPath,
|
|
224
|
+
regex,
|
|
225
|
+
paramNames,
|
|
226
|
+
guards: extractInlineGuards(definition.guard),
|
|
227
|
+
children: [],
|
|
228
|
+
parent,
|
|
229
|
+
meta: definition.meta ?? {},
|
|
230
|
+
isCatchAll,
|
|
231
|
+
};
|
|
232
|
+
// Store original guard spec for runtime resolution
|
|
233
|
+
if (definition.guard !== undefined) {
|
|
234
|
+
compiled.guardSpec = definition.guard;
|
|
235
|
+
}
|
|
236
|
+
// Process component - handles inline lazy imports, static components, and pre-wrapped lazy
|
|
237
|
+
if (definition.component !== undefined) {
|
|
238
|
+
const processedComponent = processRouteComponent(definition.component, definition.export, // Named export from lazy module
|
|
239
|
+
definition.lazy, // Per-route lazy config
|
|
240
|
+
lazyDefaults // Global lazy defaults
|
|
241
|
+
);
|
|
242
|
+
if (processedComponent !== undefined) {
|
|
243
|
+
compiled.component = processedComponent;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Store lazy loading metadata for router outlet use
|
|
247
|
+
if (definition.export !== undefined) {
|
|
248
|
+
compiled.exportName = definition.export;
|
|
249
|
+
}
|
|
250
|
+
if (definition.loading !== undefined) {
|
|
251
|
+
compiled.loadingComponent = definition.loading;
|
|
252
|
+
}
|
|
253
|
+
if (definition.lazy !== undefined) {
|
|
254
|
+
compiled.lazyConfig = definition.lazy;
|
|
255
|
+
}
|
|
256
|
+
if (definition.redirect !== undefined) {
|
|
257
|
+
compiled.redirect = definition.redirect;
|
|
258
|
+
}
|
|
259
|
+
if (definition.name !== undefined) {
|
|
260
|
+
compiled.name = definition.name;
|
|
261
|
+
}
|
|
262
|
+
if (definition.preload !== undefined) {
|
|
263
|
+
compiled.preload = definition.preload;
|
|
264
|
+
}
|
|
265
|
+
// Compile children recursively
|
|
266
|
+
if (definition.children) {
|
|
267
|
+
compiled.children = definition.children.map((child) => compileRoute(child, compiled, options));
|
|
268
|
+
}
|
|
269
|
+
return compiled;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Compile all route definitions
|
|
273
|
+
*/
|
|
274
|
+
export function compileRoutes(definitions, guardRegistry = new Map(), lazyDefaults) {
|
|
275
|
+
const options = { guardRegistry, lazyDefaults };
|
|
276
|
+
return definitions.map((def) => compileRoute(def, null, options));
|
|
277
|
+
}
|
|
278
|
+
// =============================================================================
|
|
279
|
+
// Route Matching
|
|
280
|
+
// =============================================================================
|
|
281
|
+
/**
|
|
282
|
+
* Extract parameters from a path prefix for a parent route
|
|
283
|
+
* Used when a child route matches and we need to include the parent in the chain
|
|
284
|
+
*/
|
|
285
|
+
function extractPrefixParams(path, route) {
|
|
286
|
+
const params = {};
|
|
287
|
+
// If there are no params in the route, return empty
|
|
288
|
+
if (route.paramNames.length === 0) {
|
|
289
|
+
return params;
|
|
290
|
+
}
|
|
291
|
+
// Build a prefix-matching regex (without $ anchor)
|
|
292
|
+
const normalizedPath = normalizePath(path);
|
|
293
|
+
const segments = normalizePath(route.fullPath).split('/').filter(Boolean);
|
|
294
|
+
let pattern = '';
|
|
295
|
+
const paramIndices = [];
|
|
296
|
+
let paramIndex = 0;
|
|
297
|
+
for (const segment of segments) {
|
|
298
|
+
pattern += '/';
|
|
299
|
+
if (segment.startsWith(':')) {
|
|
300
|
+
const paramName = segment.slice(1);
|
|
301
|
+
if (paramName.endsWith('?')) {
|
|
302
|
+
pattern = pattern.slice(0, -1);
|
|
303
|
+
pattern += `(?:/([^/]+))?`;
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
pattern += '([^/]+)';
|
|
307
|
+
}
|
|
308
|
+
paramIndices.push(paramIndex++);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
pattern += escapeRegex(segment);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
// Use prefix matching (no $ anchor)
|
|
315
|
+
const prefixRegex = new RegExp(`^${pattern}`);
|
|
316
|
+
const match = prefixRegex.exec(normalizedPath);
|
|
317
|
+
if (match) {
|
|
318
|
+
for (let i = 0; i < route.paramNames.length; i++) {
|
|
319
|
+
const paramName = route.paramNames[i];
|
|
320
|
+
const value = match[i + 1];
|
|
321
|
+
if (value !== undefined) {
|
|
322
|
+
params[paramName] = decodeURIComponent(value);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return params;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Match a path against a single compiled route
|
|
330
|
+
*/
|
|
331
|
+
export function matchRoute(path, route) {
|
|
332
|
+
const normalizedPath = normalizePath(path);
|
|
333
|
+
const match = route.regex.exec(normalizedPath);
|
|
334
|
+
if (!match)
|
|
335
|
+
return null;
|
|
336
|
+
// Extract params
|
|
337
|
+
const params = {};
|
|
338
|
+
for (let i = 0; i < route.paramNames.length; i++) {
|
|
339
|
+
const paramName = route.paramNames[i];
|
|
340
|
+
const value = match[i + 1];
|
|
341
|
+
if (value !== undefined) {
|
|
342
|
+
params[paramName] = decodeURIComponent(value);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return { route, params };
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Recursively find matching routes in the tree
|
|
349
|
+
*/
|
|
350
|
+
function findMatchingRoute(path, routes, parentParams = {}) {
|
|
351
|
+
const normalizedPath = normalizePath(path);
|
|
352
|
+
for (const route of routes) {
|
|
353
|
+
// Try to match this route
|
|
354
|
+
const matched = matchRoute(normalizedPath, route);
|
|
355
|
+
if (matched) {
|
|
356
|
+
// Merge with parent params
|
|
357
|
+
const combinedParams = { ...parentParams, ...matched.params };
|
|
358
|
+
const matchedWithParams = {
|
|
359
|
+
route: matched.route,
|
|
360
|
+
params: combinedParams,
|
|
361
|
+
};
|
|
362
|
+
// If this route has children, try to match them first
|
|
363
|
+
// But only if this is not a catch-all route and has a component
|
|
364
|
+
if (route.children.length > 0 && !route.isCatchAll) {
|
|
365
|
+
const childMatch = findMatchingRoute(normalizedPath, route.children, combinedParams);
|
|
366
|
+
if (childMatch) {
|
|
367
|
+
// Prepend this route to the match chain
|
|
368
|
+
return [matchedWithParams, ...childMatch];
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
// Return this match (could be leaf or parent with no matching children)
|
|
372
|
+
return [matchedWithParams];
|
|
373
|
+
}
|
|
374
|
+
// If no direct match, try children anyway for nested paths
|
|
375
|
+
// This handles cases where parent path is a prefix
|
|
376
|
+
if (route.children.length > 0) {
|
|
377
|
+
// Check if this route's path is a prefix of the target path
|
|
378
|
+
const routeBasePath = route.fullPath === '/' ? '' : route.fullPath;
|
|
379
|
+
if (normalizedPath.startsWith(routeBasePath + '/') || normalizedPath === routeBasePath) {
|
|
380
|
+
const childMatch = findMatchingRoute(normalizedPath, route.children, parentParams);
|
|
381
|
+
if (childMatch) {
|
|
382
|
+
// Include the parent in the chain if it has a component (layout route)
|
|
383
|
+
// For nested routes, the parent should be included even if it doesn't "match" the full path
|
|
384
|
+
if (route.component !== undefined) {
|
|
385
|
+
// Extract any params from the parent's path prefix
|
|
386
|
+
const prefixParams = extractPrefixParams(normalizedPath, route);
|
|
387
|
+
return [{ route, params: { ...parentParams, ...prefixParams } }, ...childMatch];
|
|
388
|
+
}
|
|
389
|
+
return childMatch;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Match a path against compiled routes
|
|
398
|
+
* Returns array of matched routes (for nested routes) or null if no match
|
|
399
|
+
*/
|
|
400
|
+
export function matchRoutes(path, routes) {
|
|
401
|
+
const { path: pathname } = parsePath(path);
|
|
402
|
+
return findMatchingRoute(pathname, routes);
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Find a route by name in the route tree
|
|
406
|
+
*/
|
|
407
|
+
export function findRouteByName(name, routes) {
|
|
408
|
+
for (const route of routes) {
|
|
409
|
+
if (route.name === name)
|
|
410
|
+
return route;
|
|
411
|
+
if (route.children.length > 0) {
|
|
412
|
+
const found = findRouteByName(name, route.children);
|
|
413
|
+
if (found)
|
|
414
|
+
return found;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
return undefined;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Generate a path from a route and params
|
|
421
|
+
*/
|
|
422
|
+
export function generatePath(route, params = {}) {
|
|
423
|
+
let path = route.fullPath;
|
|
424
|
+
// Replace params
|
|
425
|
+
for (const [name, value] of Object.entries(params)) {
|
|
426
|
+
if (name === '*') {
|
|
427
|
+
// Handle catch-all - append to base path
|
|
428
|
+
const basePath = path.replace(/\/?\*$/, '') || '';
|
|
429
|
+
path = basePath + '/' + value;
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
// Try optional param first (has ? suffix), then regular param
|
|
433
|
+
// This order matters because :id would match the :id part of :id?
|
|
434
|
+
const optionalReplaced = path.replace(`:${name}?`, encodeURIComponent(value));
|
|
435
|
+
if (optionalReplaced !== path) {
|
|
436
|
+
path = optionalReplaced;
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
path = path.replace(`:${name}`, encodeURIComponent(value));
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
// Remove any remaining optional params that weren't provided
|
|
444
|
+
path = path.replace(/\/:[^/]+\?/g, '');
|
|
445
|
+
return normalizePath(path);
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Check if a path is active (matches current location)
|
|
449
|
+
*/
|
|
450
|
+
export function isPathActive(currentPath, targetPath, exact = false) {
|
|
451
|
+
const normalizedCurrent = normalizePath(currentPath);
|
|
452
|
+
const normalizedTarget = normalizePath(targetPath);
|
|
453
|
+
if (exact) {
|
|
454
|
+
return normalizedCurrent === normalizedTarget;
|
|
455
|
+
}
|
|
456
|
+
// Partial match - target is a prefix of current
|
|
457
|
+
if (normalizedTarget === '/') {
|
|
458
|
+
return true; // Root always matches
|
|
459
|
+
}
|
|
460
|
+
return (normalizedCurrent === normalizedTarget ||
|
|
461
|
+
normalizedCurrent.startsWith(normalizedTarget + '/'));
|
|
462
|
+
}
|
|
463
|
+
// =============================================================================
|
|
464
|
+
// Route Flattening (for debugging/inspection)
|
|
465
|
+
// =============================================================================
|
|
466
|
+
/**
|
|
467
|
+
* Flatten route tree into a list of all routes
|
|
468
|
+
*/
|
|
469
|
+
export function flattenRoutes(routes) {
|
|
470
|
+
const result = [];
|
|
471
|
+
function traverse(routeList) {
|
|
472
|
+
for (const route of routeList) {
|
|
473
|
+
result.push(route);
|
|
474
|
+
if (route.children.length > 0) {
|
|
475
|
+
traverse(route.children);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
traverse(routes);
|
|
480
|
+
return result;
|
|
481
|
+
}
|
|
482
|
+
//# sourceMappingURL=route-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-matcher.js","sourceRoot":"","sources":["../src/route-matcher.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Router, RouterOptions, CompiledRoute, History } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create a router instance
|
|
4
|
+
*/
|
|
5
|
+
export declare function createRouter(options: RouterOptions): Router;
|
|
6
|
+
/**
|
|
7
|
+
* Internal router interface with private methods
|
|
8
|
+
*/
|
|
9
|
+
export interface RouterInternal extends Router {
|
|
10
|
+
_setContextAccessor: (accessor: <T>(key: string) => T) => void;
|
|
11
|
+
_compiledRoutes: CompiledRoute[];
|
|
12
|
+
_history: History;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Set the active router (called by createApp)
|
|
16
|
+
*/
|
|
17
|
+
export declare function setActiveRouter(router: Router | null): void;
|
|
18
|
+
/**
|
|
19
|
+
* Get the active router
|
|
20
|
+
*/
|
|
21
|
+
export declare function getActiveRouter(): Router;
|
|
22
|
+
/**
|
|
23
|
+
* Get the active router or null
|
|
24
|
+
*/
|
|
25
|
+
export declare function getActiveRouterOrNull(): Router | null;
|
|
26
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,aAAa,EAUb,OAAO,EACR,MAAM,YAAY,CAAC;AAepB;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAib3D;AAMD;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC5C,mBAAmB,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC;IAC/D,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;CACnB;AASD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE3D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD"}
|