@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.
@@ -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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"}
@@ -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"}