@ereo/router 0.1.10 → 0.1.12
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/dist/file-router.d.ts +15 -0
- package/dist/file-router.d.ts.map +1 -1
- package/dist/index.js +71 -5
- package/dist/route-tree.d.ts +20 -0
- package/dist/route-tree.d.ts.map +1 -1
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/file-router.d.ts
CHANGED
|
@@ -81,6 +81,21 @@ export declare class FileRouter {
|
|
|
81
81
|
* Load a route module and parse its configuration.
|
|
82
82
|
*/
|
|
83
83
|
loadModule(route: Route): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Load middleware for a route path.
|
|
86
|
+
* Returns an array of middleware functions from root to the route's segment.
|
|
87
|
+
*/
|
|
88
|
+
loadMiddlewareForRoute(routeId: string): Promise<Array<{
|
|
89
|
+
file: string;
|
|
90
|
+
middleware: Function;
|
|
91
|
+
}>>;
|
|
92
|
+
/**
|
|
93
|
+
* Get middleware chain for a matched route.
|
|
94
|
+
*/
|
|
95
|
+
getMiddlewareChain(routeId: string): Array<{
|
|
96
|
+
file: string;
|
|
97
|
+
module?: any;
|
|
98
|
+
}>;
|
|
84
99
|
/**
|
|
85
100
|
* Find parent route for a given route.
|
|
86
101
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-router.d.ts","sourceRoot":"","sources":["../src/file-router.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAa,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAkB,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAiB,YAAY,EAAE,MAAM,WAAW,CAAC;AAaxD;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAA2D;IAC1E,OAAO,CAAC,aAAa,CAA6B;gBAEtC,OAAO,GAAE,aAAkB;IASvC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAmBxC;;OAEG;YACW,aAAa;IAqC3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,aAAa,CAA8C;IAEnE,OAAO,CAAC,gBAAgB;IAyCxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,YAAY,IAAI,IAAI;IAOpB;;OAEG;IACH,SAAS,IAAI,KAAK,EAAE;IAIpB;;OAEG;IACH,OAAO,IAAI,SAAS,GAAG,IAAI;IAI3B;;OAEG;IACH,UAAU,IAAI,YAAY,GAAG,IAAI;IAIjC;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM;IAItB;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAI1E;;OAEG;IACH,OAAO,CAAC,IAAI;IAUZ;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB7C;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAOpE;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAW7C;;OAEG;IACG,sBAAsB,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAK5F;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAK7C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAmB5C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAYtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CAEpE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAIjF"}
|
|
1
|
+
{"version":3,"file":"file-router.d.ts","sourceRoot":"","sources":["../src/file-router.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAa,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAkB,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAiB,YAAY,EAAE,MAAM,WAAW,CAAC;AAaxD;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAA2D;IAC1E,OAAO,CAAC,aAAa,CAA6B;gBAEtC,OAAO,GAAE,aAAkB;IASvC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAmBxC;;OAEG;YACW,aAAa;IAqC3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,aAAa,CAA8C;IAEnE,OAAO,CAAC,gBAAgB;IAyCxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,YAAY,IAAI,IAAI;IAOpB;;OAEG;IACH,SAAS,IAAI,KAAK,EAAE;IAIpB;;OAEG;IACH,OAAO,IAAI,SAAS,GAAG,IAAI;IAI3B;;OAEG;IACH,UAAU,IAAI,YAAY,GAAG,IAAI;IAIjC;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM;IAItB;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAI1E;;OAEG;IACH,OAAO,CAAC,IAAI;IAUZ;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB7C;;;OAGG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IA4BrG;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAK1E;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAOpE;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAW7C;;OAEG;IACG,sBAAsB,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAK5F;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAK7C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAmB5C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAYtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CAEpE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAIjF"}
|
package/dist/index.js
CHANGED
|
@@ -17,7 +17,8 @@ var SPECIAL_FILES = {
|
|
|
17
17
|
LAYOUT: "_layout",
|
|
18
18
|
ERROR: "_error",
|
|
19
19
|
LOADING: "_loading",
|
|
20
|
-
NOT_FOUND: "_404"
|
|
20
|
+
NOT_FOUND: "_404",
|
|
21
|
+
MIDDLEWARE: "_middleware"
|
|
21
22
|
};
|
|
22
23
|
var ROUTE_GROUP_PATTERN = /^\((.+)\)$/;
|
|
23
24
|
var DYNAMIC_SEGMENT_PATTERN = /^\[([^\]]+)\]$/;
|
|
@@ -397,14 +398,36 @@ class RouteTree {
|
|
|
397
398
|
}
|
|
398
399
|
return layouts;
|
|
399
400
|
}
|
|
401
|
+
middlewareByPath = new Map;
|
|
402
|
+
attachMiddleware(path, middlewareFile) {
|
|
403
|
+
this.middlewareByPath.set(path, { file: middlewareFile });
|
|
404
|
+
}
|
|
405
|
+
getMiddlewareChain(routeId) {
|
|
406
|
+
const node = this.findById(routeId);
|
|
407
|
+
if (!node)
|
|
408
|
+
return [];
|
|
409
|
+
const routePath = node.path;
|
|
410
|
+
const middlewares = [];
|
|
411
|
+
const sortedPaths = Array.from(this.middlewareByPath.keys()).sort((a, b) => a.length - b.length);
|
|
412
|
+
for (const middlewarePath of sortedPaths) {
|
|
413
|
+
if (middlewarePath === "/" || routePath === middlewarePath || routePath.startsWith(middlewarePath + "/")) {
|
|
414
|
+
const mw = this.middlewareByPath.get(middlewarePath);
|
|
415
|
+
if (mw) {
|
|
416
|
+
middlewares.push(mw);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
return middlewares;
|
|
421
|
+
}
|
|
400
422
|
}
|
|
401
423
|
function filePathToUrlPath(filePath, routesDir) {
|
|
402
424
|
let path = filePath.replace(routesDir, "").replace(/\.(tsx?|jsx?)$/, "");
|
|
403
425
|
const fileName = path.split("/").pop() || "";
|
|
404
426
|
const isLayout = fileName === SPECIAL_FILES.LAYOUT;
|
|
427
|
+
const isMiddleware = fileName === SPECIAL_FILES.MIDDLEWARE;
|
|
405
428
|
const isIndex = fileName === "index";
|
|
406
|
-
if (isLayout || isIndex) {
|
|
407
|
-
path = path.replace(/\/?(index|_layout)$/, "");
|
|
429
|
+
if (isLayout || isIndex || isMiddleware) {
|
|
430
|
+
path = path.replace(/\/?(index|_layout|_middleware)$/, "");
|
|
408
431
|
}
|
|
409
432
|
path = path.replace(/\/\([^)]+\)/g, "");
|
|
410
433
|
if (!path.startsWith("/")) {
|
|
@@ -416,12 +439,23 @@ function filePathToUrlPath(filePath, routesDir) {
|
|
|
416
439
|
return {
|
|
417
440
|
path: path || "/",
|
|
418
441
|
index: isIndex,
|
|
419
|
-
layout: isLayout
|
|
442
|
+
layout: isLayout,
|
|
443
|
+
middleware: isMiddleware
|
|
420
444
|
};
|
|
421
445
|
}
|
|
422
446
|
function buildRouteTree(files, routesDir) {
|
|
423
447
|
const tree = new RouteTree;
|
|
424
|
-
const
|
|
448
|
+
const middlewareFiles = [];
|
|
449
|
+
const routeFiles = [];
|
|
450
|
+
for (const file of files) {
|
|
451
|
+
const { path, middleware } = filePathToUrlPath(file.relativePath, routesDir);
|
|
452
|
+
if (middleware) {
|
|
453
|
+
middlewareFiles.push({ ...file, path });
|
|
454
|
+
} else {
|
|
455
|
+
routeFiles.push(file);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
const sortedFiles = [...routeFiles].sort((a, b) => {
|
|
425
459
|
const aIsLayout = a.relativePath.includes(SPECIAL_FILES.LAYOUT);
|
|
426
460
|
const bIsLayout = b.relativePath.includes(SPECIAL_FILES.LAYOUT);
|
|
427
461
|
if (aIsLayout && !bIsLayout)
|
|
@@ -435,6 +469,9 @@ function buildRouteTree(files, routesDir) {
|
|
|
435
469
|
const id = file.relativePath.replace(/\.(tsx?|jsx?)$/, "");
|
|
436
470
|
tree.addRoute(id, path, file.absolutePath, { index, layout });
|
|
437
471
|
}
|
|
472
|
+
for (const mw of middlewareFiles) {
|
|
473
|
+
tree.attachMiddleware(mw.path, mw.absolutePath);
|
|
474
|
+
}
|
|
438
475
|
return tree;
|
|
439
476
|
}
|
|
440
477
|
function createRouteTree() {
|
|
@@ -885,6 +922,35 @@ class FileRouter {
|
|
|
885
922
|
throw error;
|
|
886
923
|
}
|
|
887
924
|
}
|
|
925
|
+
async loadMiddlewareForRoute(routeId) {
|
|
926
|
+
if (!this.tree)
|
|
927
|
+
return [];
|
|
928
|
+
const middlewareChain = this.tree.getMiddlewareChain(routeId);
|
|
929
|
+
const result = [];
|
|
930
|
+
for (const mw of middlewareChain) {
|
|
931
|
+
if (!mw.module) {
|
|
932
|
+
try {
|
|
933
|
+
const mod = await import(mw.file);
|
|
934
|
+
mw.module = mod;
|
|
935
|
+
} catch (error) {
|
|
936
|
+
console.error(`Failed to load middleware: ${mw.file}`, error);
|
|
937
|
+
continue;
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
if (mw.module?.middleware) {
|
|
941
|
+
result.push({
|
|
942
|
+
file: mw.file,
|
|
943
|
+
middleware: mw.module.middleware
|
|
944
|
+
});
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
return result;
|
|
948
|
+
}
|
|
949
|
+
getMiddlewareChain(routeId) {
|
|
950
|
+
if (!this.tree)
|
|
951
|
+
return [];
|
|
952
|
+
return this.tree.getMiddlewareChain(routeId);
|
|
953
|
+
}
|
|
888
954
|
findParentRoute(route) {
|
|
889
955
|
const parentId = route.id.split("/").slice(0, -1).join("/") || "/";
|
|
890
956
|
return this.routes.find((r) => r.id === parentId);
|
package/dist/route-tree.d.ts
CHANGED
|
@@ -63,6 +63,25 @@ export declare class RouteTree {
|
|
|
63
63
|
* Get the layout chain for a route.
|
|
64
64
|
*/
|
|
65
65
|
getLayoutChain(routeId: string): RouteNode[];
|
|
66
|
+
/**
|
|
67
|
+
* Middleware stored by path prefix.
|
|
68
|
+
* Separate from route nodes since middleware can exist without a route at that path.
|
|
69
|
+
*/
|
|
70
|
+
private middlewareByPath;
|
|
71
|
+
/**
|
|
72
|
+
* Attach middleware to a route segment.
|
|
73
|
+
* Middleware applies to all routes in and below this segment.
|
|
74
|
+
*/
|
|
75
|
+
attachMiddleware(path: string, middlewareFile: string): void;
|
|
76
|
+
/**
|
|
77
|
+
* Get the middleware chain for a route (from root to leaf).
|
|
78
|
+
*/
|
|
79
|
+
getMiddlewareChain(routeId: string): Array<{
|
|
80
|
+
file: string;
|
|
81
|
+
module?: {
|
|
82
|
+
middleware?: any;
|
|
83
|
+
};
|
|
84
|
+
}>;
|
|
66
85
|
}
|
|
67
86
|
/**
|
|
68
87
|
* Convert a file path to a URL path.
|
|
@@ -71,6 +90,7 @@ export declare function filePathToUrlPath(filePath: string, routesDir: string):
|
|
|
71
90
|
path: string;
|
|
72
91
|
index: boolean;
|
|
73
92
|
layout: boolean;
|
|
93
|
+
middleware: boolean;
|
|
74
94
|
};
|
|
75
95
|
/**
|
|
76
96
|
* Build a route tree from file paths.
|
package/dist/route-tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-tree.d.ts","sourceRoot":"","sources":["../src/route-tree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,SAAS,CAAC;AAIvD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAY;;IAMxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAClD,SAAS;IAeZ;;OAEG;IACH,OAAO,CAAC,UAAU;IA8BlB;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,KAAK,EAAE;IAInB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAc1C;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IActC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAe/B;;OAEG;IACH,OAAO,IAAI,SAAS,EAAE;IActB;;OAEG;IACH,UAAU,IAAI,SAAS,EAAE;IAIzB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"route-tree.d.ts","sourceRoot":"","sources":["../src/route-tree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,SAAS,CAAC;AAIvD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAY;;IAMxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAClD,SAAS;IAeZ;;OAEG;IACH,OAAO,CAAC,UAAU;IA8BlB;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,KAAK,EAAE;IAInB;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAc1C;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IActC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAe/B;;OAEG;IACH,OAAO,IAAI,SAAS,EAAE;IActB;;OAEG;IACH,UAAU,IAAI,SAAS,EAAE;IAIzB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE;IAiB5C;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAA2E;IAEnG;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAK5D;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,GAAG,CAAA;SAAE,CAAA;KAAE,CAAC;CA8B5F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAwCxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,SAAS,EAAE,MAAM,GAChB,SAAS,CAsCX;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAE3C"}
|
package/dist/types.d.ts
CHANGED
|
@@ -42,6 +42,14 @@ export interface RouteNode {
|
|
|
42
42
|
index: boolean;
|
|
43
43
|
/** Is this a layout? */
|
|
44
44
|
layout: boolean;
|
|
45
|
+
/** Is this a middleware file? */
|
|
46
|
+
middleware?: boolean;
|
|
47
|
+
/** Middleware file path for this segment (if exists) */
|
|
48
|
+
middlewareFile?: string;
|
|
49
|
+
/** Loaded middleware module */
|
|
50
|
+
middlewareModule?: {
|
|
51
|
+
middleware?: MiddlewareFunction;
|
|
52
|
+
};
|
|
45
53
|
/** Child routes */
|
|
46
54
|
children: RouteNode[];
|
|
47
55
|
/** Parent route (for layout resolution) */
|
|
@@ -51,6 +59,10 @@ export interface RouteNode {
|
|
|
51
59
|
/** Score for sorting (more specific routes first) */
|
|
52
60
|
score: number;
|
|
53
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Middleware function type.
|
|
64
|
+
*/
|
|
65
|
+
export type MiddlewareFunction = (request: Request, next: () => Promise<Response>) => Promise<Response> | Response;
|
|
54
66
|
/**
|
|
55
67
|
* Router options.
|
|
56
68
|
*/
|
|
@@ -76,6 +88,13 @@ export interface MatchResult {
|
|
|
76
88
|
pathname: string;
|
|
77
89
|
/** Layouts to render (from root to leaf) */
|
|
78
90
|
layouts: Route[];
|
|
91
|
+
/** Middleware to execute (from root to leaf) */
|
|
92
|
+
middlewares?: Array<{
|
|
93
|
+
file: string;
|
|
94
|
+
module?: {
|
|
95
|
+
middleware?: MiddlewareFunction;
|
|
96
|
+
};
|
|
97
|
+
}>;
|
|
79
98
|
}
|
|
80
99
|
/**
|
|
81
100
|
* Route registry for type-safe routing.
|
|
@@ -120,6 +139,7 @@ export declare const SPECIAL_FILES: {
|
|
|
120
139
|
readonly ERROR: "_error";
|
|
121
140
|
readonly LOADING: "_loading";
|
|
122
141
|
readonly NOT_FOUND: "_404";
|
|
142
|
+
readonly MIDDLEWARE: "_middleware";
|
|
123
143
|
};
|
|
124
144
|
/**
|
|
125
145
|
* Route group pattern (parentheses).
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,sBAAsB;IACtB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IACrD,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB;IACnB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,oBAAoB;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,2BAA2B;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,OAAO,EAAE,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|