@@ -64,6 +64,7 @@ List<RouteDirectory> _getRouteDirectories({
6464 required void Function (MiddlewareFile route) onMiddleware,
6565 required void Function (String endpoint, RouteFile file) onEndpoint,
6666 required void Function (RouteFile route) onRogueRoute,
67+ List <MiddlewareFile > middleware = const [],
6768}) {
6869 final directories = < RouteDirectory > [];
6970 final entities = directory.listSync ().sorted ();
@@ -73,47 +74,54 @@ List<RouteDirectory> _getRouteDirectories({
7374 ? directorySegment
7475 : '/$directorySegment ' ;
7576 // Only add nested middleware -- global middleware is added separately.
76- MiddlewareFile ? middleware ;
77+ MiddlewareFile ? localMiddleware ;
7778 if (directory.path != path.join (Directory .current.path, 'routes' )) {
7879 final middlewareFile = File (path.join (directory.path, '_middleware.dart' ));
7980 if (middlewareFile.existsSync ()) {
8081 final middlewarePath = path
8182 .relative (middlewareFile.path, from: routesDirectory.path)
8283 .replaceAll (r'\' , '/' );
83- middleware = MiddlewareFile (
84+ localMiddleware = MiddlewareFile (
8485 name: middlewarePath.toAlias (),
8586 path: path.join ('..' , 'routes' , middlewarePath).replaceAll (r'\' , '/' ),
8687 );
87- onMiddleware (middleware );
88+ onMiddleware (localMiddleware );
8889 }
8990 }
9091
92+ final updatedMiddleware = [
93+ ...middleware,
94+ if (localMiddleware != null ) localMiddleware,
95+ ];
96+
9197 final files = _getRouteFiles (
9298 directory: directory,
9399 routesDirectory: routesDirectory,
94100 onRoute: onRoute,
95101 onRogueRoute: onRogueRoute,
96102 );
97103
98- final baseRoute = directoryPath.toRoute ();
99- for (final file in files) {
100- var endpoint = (baseRoute + file.route.toRoute ()).replaceAll ('//' , '/' );
101- if (endpoint.endsWith ('/' )) {
102- endpoint = endpoint.substring (0 , endpoint.length - 1 );
104+ if (files.isNotEmpty) {
105+ final baseRoute = directoryPath.toRoute ();
106+ for (final file in files) {
107+ var endpoint = (baseRoute + file.route.toRoute ()).replaceAll ('//' , '/' );
108+ if (endpoint.endsWith ('/' )) {
109+ endpoint = endpoint.substring (0 , endpoint.length - 1 );
110+ }
111+ if (endpoint.isEmpty) endpoint = '/' ;
112+ onEndpoint (endpoint, file);
103113 }
104- if (endpoint.isEmpty) endpoint = '/' ;
105- onEndpoint (endpoint, file);
106- }
107114
108- directories.add (
109- RouteDirectory (
110- name: directoryPath.toAlias (),
111- route: baseRoute,
112- middleware: middleware,
113- files: files,
114- params: directoryPath.toParams (),
115- ),
116- );
115+ directories.add (
116+ RouteDirectory (
117+ name: directoryPath.toAlias (),
118+ route: baseRoute,
119+ middleware: updatedMiddleware,
120+ files: files,
121+ params: directoryPath.toParams (),
122+ ),
123+ );
124+ }
117125
118126 entities.whereType <Directory >().forEach ((directory) {
119127 directories.addAll (
@@ -124,6 +132,7 @@ List<RouteDirectory> _getRouteDirectories({
124132 onMiddleware: onMiddleware,
125133 onEndpoint: onEndpoint,
126134 onRogueRoute: onRogueRoute,
135+ middleware: updatedMiddleware,
127136 ),
128137 );
129138 });
@@ -319,8 +328,8 @@ class RouteDirectory {
319328 /// The dynamic route params associated with the directory.
320329 final List <String > params;
321330
322- /// Optional middleware for the provided router.
323- final MiddlewareFile ? middleware;
331+ /// List of middleware for the provided router.
332+ final List < MiddlewareFile > middleware;
324333
325334 /// A list of nested route files within the directory.
326335 final List <RouteFile > files;
@@ -329,7 +338,7 @@ class RouteDirectory {
329338 RouteDirectory copyWith ({
330339 String ? name,
331340 String ? route,
332- MiddlewareFile ? middleware,
341+ List < MiddlewareFile > ? middleware,
333342 List <RouteFile >? files,
334343 List <String >? params,
335344 }) {
@@ -347,7 +356,7 @@ class RouteDirectory {
347356 return < String , dynamic > {
348357 'name' : name,
349358 'route' : route,
350- 'middleware' : middleware? . toJson () ?? false ,
359+ 'middleware' : middleware. map ((m) => m. toJson ()). toList () ,
351360 'files' : files.map ((f) => f.toJson ()).toList (),
352361 'directory_params' : params,
353362 };
0 commit comments