@@ -64,6 +64,7 @@ List<RouteDirectory> _getRouteDirectories({
64
64
required void Function (MiddlewareFile route) onMiddleware,
65
65
required void Function (String endpoint, RouteFile file) onEndpoint,
66
66
required void Function (RouteFile route) onRogueRoute,
67
+ List <MiddlewareFile > middleware = const [],
67
68
}) {
68
69
final directories = < RouteDirectory > [];
69
70
final entities = directory.listSync ().sorted ();
@@ -73,47 +74,54 @@ List<RouteDirectory> _getRouteDirectories({
73
74
? directorySegment
74
75
: '/$directorySegment ' ;
75
76
// Only add nested middleware -- global middleware is added separately.
76
- MiddlewareFile ? middleware ;
77
+ MiddlewareFile ? localMiddleware ;
77
78
if (directory.path != path.join (Directory .current.path, 'routes' )) {
78
79
final middlewareFile = File (path.join (directory.path, '_middleware.dart' ));
79
80
if (middlewareFile.existsSync ()) {
80
81
final middlewarePath = path
81
82
.relative (middlewareFile.path, from: routesDirectory.path)
82
83
.replaceAll (r'\' , '/' );
83
- middleware = MiddlewareFile (
84
+ localMiddleware = MiddlewareFile (
84
85
name: middlewarePath.toAlias (),
85
86
path: path.join ('..' , 'routes' , middlewarePath).replaceAll (r'\' , '/' ),
86
87
);
87
- onMiddleware (middleware );
88
+ onMiddleware (localMiddleware );
88
89
}
89
90
}
90
91
92
+ final updatedMiddleware = [
93
+ ...middleware,
94
+ if (localMiddleware != null ) localMiddleware,
95
+ ];
96
+
91
97
final files = _getRouteFiles (
92
98
directory: directory,
93
99
routesDirectory: routesDirectory,
94
100
onRoute: onRoute,
95
101
onRogueRoute: onRogueRoute,
96
102
);
97
103
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);
103
113
}
104
- if (endpoint.isEmpty) endpoint = '/' ;
105
- onEndpoint (endpoint, file);
106
- }
107
114
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
+ }
117
125
118
126
entities.whereType <Directory >().forEach ((directory) {
119
127
directories.addAll (
@@ -124,6 +132,7 @@ List<RouteDirectory> _getRouteDirectories({
124
132
onMiddleware: onMiddleware,
125
133
onEndpoint: onEndpoint,
126
134
onRogueRoute: onRogueRoute,
135
+ middleware: updatedMiddleware,
127
136
),
128
137
);
129
138
});
@@ -319,8 +328,8 @@ class RouteDirectory {
319
328
/// The dynamic route params associated with the directory.
320
329
final List <String > params;
321
330
322
- /// Optional middleware for the provided router.
323
- final MiddlewareFile ? middleware;
331
+ /// List of middleware for the provided router.
332
+ final List < MiddlewareFile > middleware;
324
333
325
334
/// A list of nested route files within the directory.
326
335
final List <RouteFile > files;
@@ -329,7 +338,7 @@ class RouteDirectory {
329
338
RouteDirectory copyWith ({
330
339
String ? name,
331
340
String ? route,
332
- MiddlewareFile ? middleware,
341
+ List < MiddlewareFile > ? middleware,
333
342
List <RouteFile >? files,
334
343
List <String >? params,
335
344
}) {
@@ -347,7 +356,7 @@ class RouteDirectory {
347
356
return < String , dynamic > {
348
357
'name' : name,
349
358
'route' : route,
350
- 'middleware' : middleware? . toJson () ?? false ,
359
+ 'middleware' : middleware. map ((m) => m. toJson ()). toList () ,
351
360
'files' : files.map ((f) => f.toJson ()).toList (),
352
361
'directory_params' : params,
353
362
};
0 commit comments