@ereo/router 0.1.9 → 0.1.11
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 +87 -5
- package/dist/route-tree.d.ts +15 -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,52 @@ class RouteTree {
|
|
|
397
398
|
}
|
|
398
399
|
return layouts;
|
|
399
400
|
}
|
|
401
|
+
attachMiddleware(path, middlewareFile) {
|
|
402
|
+
const node = this.findByPath(path);
|
|
403
|
+
if (node) {
|
|
404
|
+
node.middlewareFile = middlewareFile;
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
if (path === "/") {
|
|
408
|
+
this.root.middlewareFile = middlewareFile;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
getMiddlewareChain(routeId) {
|
|
412
|
+
const node = this.findById(routeId);
|
|
413
|
+
if (!node)
|
|
414
|
+
return [];
|
|
415
|
+
const middlewares = [];
|
|
416
|
+
const collectMiddleware = (current) => {
|
|
417
|
+
if (!current)
|
|
418
|
+
return;
|
|
419
|
+
if (current.parent) {
|
|
420
|
+
collectMiddleware(current.parent);
|
|
421
|
+
}
|
|
422
|
+
if (current.middlewareFile) {
|
|
423
|
+
middlewares.push({
|
|
424
|
+
file: current.middlewareFile,
|
|
425
|
+
module: current.middlewareModule
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
collectMiddleware(node);
|
|
430
|
+
if (this.root.middlewareFile && !middlewares.find((m) => m.file === this.root.middlewareFile)) {
|
|
431
|
+
middlewares.unshift({
|
|
432
|
+
file: this.root.middlewareFile,
|
|
433
|
+
module: this.root.middlewareModule
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
return middlewares;
|
|
437
|
+
}
|
|
400
438
|
}
|
|
401
439
|
function filePathToUrlPath(filePath, routesDir) {
|
|
402
440
|
let path = filePath.replace(routesDir, "").replace(/\.(tsx?|jsx?)$/, "");
|
|
403
441
|
const fileName = path.split("/").pop() || "";
|
|
404
442
|
const isLayout = fileName === SPECIAL_FILES.LAYOUT;
|
|
443
|
+
const isMiddleware = fileName === SPECIAL_FILES.MIDDLEWARE;
|
|
405
444
|
const isIndex = fileName === "index";
|
|
406
|
-
if (isLayout || isIndex) {
|
|
407
|
-
path = path.replace(/\/?(index|_layout)$/, "");
|
|
445
|
+
if (isLayout || isIndex || isMiddleware) {
|
|
446
|
+
path = path.replace(/\/?(index|_layout|_middleware)$/, "");
|
|
408
447
|
}
|
|
409
448
|
path = path.replace(/\/\([^)]+\)/g, "");
|
|
410
449
|
if (!path.startsWith("/")) {
|
|
@@ -416,12 +455,23 @@ function filePathToUrlPath(filePath, routesDir) {
|
|
|
416
455
|
return {
|
|
417
456
|
path: path || "/",
|
|
418
457
|
index: isIndex,
|
|
419
|
-
layout: isLayout
|
|
458
|
+
layout: isLayout,
|
|
459
|
+
middleware: isMiddleware
|
|
420
460
|
};
|
|
421
461
|
}
|
|
422
462
|
function buildRouteTree(files, routesDir) {
|
|
423
463
|
const tree = new RouteTree;
|
|
424
|
-
const
|
|
464
|
+
const middlewareFiles = [];
|
|
465
|
+
const routeFiles = [];
|
|
466
|
+
for (const file of files) {
|
|
467
|
+
const { path, middleware } = filePathToUrlPath(file.relativePath, routesDir);
|
|
468
|
+
if (middleware) {
|
|
469
|
+
middlewareFiles.push({ ...file, path });
|
|
470
|
+
} else {
|
|
471
|
+
routeFiles.push(file);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
const sortedFiles = [...routeFiles].sort((a, b) => {
|
|
425
475
|
const aIsLayout = a.relativePath.includes(SPECIAL_FILES.LAYOUT);
|
|
426
476
|
const bIsLayout = b.relativePath.includes(SPECIAL_FILES.LAYOUT);
|
|
427
477
|
if (aIsLayout && !bIsLayout)
|
|
@@ -435,6 +485,9 @@ function buildRouteTree(files, routesDir) {
|
|
|
435
485
|
const id = file.relativePath.replace(/\.(tsx?|jsx?)$/, "");
|
|
436
486
|
tree.addRoute(id, path, file.absolutePath, { index, layout });
|
|
437
487
|
}
|
|
488
|
+
for (const mw of middlewareFiles) {
|
|
489
|
+
tree.attachMiddleware(mw.path, mw.absolutePath);
|
|
490
|
+
}
|
|
438
491
|
return tree;
|
|
439
492
|
}
|
|
440
493
|
function createRouteTree() {
|
|
@@ -885,6 +938,35 @@ class FileRouter {
|
|
|
885
938
|
throw error;
|
|
886
939
|
}
|
|
887
940
|
}
|
|
941
|
+
async loadMiddlewareForRoute(routeId) {
|
|
942
|
+
if (!this.tree)
|
|
943
|
+
return [];
|
|
944
|
+
const middlewareChain = this.tree.getMiddlewareChain(routeId);
|
|
945
|
+
const result = [];
|
|
946
|
+
for (const mw of middlewareChain) {
|
|
947
|
+
if (!mw.module) {
|
|
948
|
+
try {
|
|
949
|
+
const mod = await import(mw.file);
|
|
950
|
+
mw.module = mod;
|
|
951
|
+
} catch (error) {
|
|
952
|
+
console.error(`Failed to load middleware: ${mw.file}`, error);
|
|
953
|
+
continue;
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
if (mw.module?.middleware) {
|
|
957
|
+
result.push({
|
|
958
|
+
file: mw.file,
|
|
959
|
+
middleware: mw.module.middleware
|
|
960
|
+
});
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
return result;
|
|
964
|
+
}
|
|
965
|
+
getMiddlewareChain(routeId) {
|
|
966
|
+
if (!this.tree)
|
|
967
|
+
return [];
|
|
968
|
+
return this.tree.getMiddlewareChain(routeId);
|
|
969
|
+
}
|
|
888
970
|
findParentRoute(route) {
|
|
889
971
|
const parentId = route.id.split("/").slice(0, -1).join("/") || "/";
|
|
890
972
|
return this.routes.find((r) => r.id === parentId);
|
package/dist/route-tree.d.ts
CHANGED
|
@@ -63,6 +63,20 @@ export declare class RouteTree {
|
|
|
63
63
|
* Get the layout chain for a route.
|
|
64
64
|
*/
|
|
65
65
|
getLayoutChain(routeId: string): RouteNode[];
|
|
66
|
+
/**
|
|
67
|
+
* Attach middleware to a route segment.
|
|
68
|
+
* Middleware applies to all routes in and below this segment.
|
|
69
|
+
*/
|
|
70
|
+
attachMiddleware(path: string, middlewareFile: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Get the middleware chain for a route (from root to leaf).
|
|
73
|
+
*/
|
|
74
|
+
getMiddlewareChain(routeId: string): Array<{
|
|
75
|
+
file: string;
|
|
76
|
+
module?: {
|
|
77
|
+
middleware?: any;
|
|
78
|
+
};
|
|
79
|
+
}>;
|
|
66
80
|
}
|
|
67
81
|
/**
|
|
68
82
|
* Convert a file path to a URL path.
|
|
@@ -71,6 +85,7 @@ export declare function filePathToUrlPath(filePath: string, routesDir: string):
|
|
|
71
85
|
path: string;
|
|
72
86
|
index: boolean;
|
|
73
87
|
layout: boolean;
|
|
88
|
+
middleware: boolean;
|
|
74
89
|
};
|
|
75
90
|
/**
|
|
76
91
|
* 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,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAc5D;;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;CAoC5F;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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"}
|