@@ -32,12 +32,13 @@ RouteConfiguration buildRouteConfiguration(Directory directory) {
3232 onRoute: routes.add,
3333 onMiddleware: middleware.add,
3434 );
35-
35+ final publicDirectory = Directory (path. join (directory.path, 'public' ));
3636 return RouteConfiguration (
3737 globalMiddleware: globalMiddleware,
3838 middleware: middleware,
3939 directories: directories,
4040 routes: routes,
41+ serveStaticFiles: publicDirectory.existsSync (),
4142 );
4243}
4344
@@ -47,7 +48,7 @@ List<RouteDirectory> _getRouteDirectories(
4748 void Function (MiddlewareFile route)? onMiddleware,
4849}) {
4950 final directories = < RouteDirectory > [];
50- final entities = directory.listSync ();
51+ final entities = directory.listSync (). sorted () ;
5152 final directorySegment =
5253 directory.path.split ('routes' ).last.replaceAll (r'\' , '/' );
5354 final directoryPath = directorySegment.startsWith ('/' )
@@ -106,6 +107,7 @@ List<RouteFile> _getRouteFilesForDynamicDirectories(
106107 final files = < RouteFile > [];
107108 directory
108109 .listSync ()
110+ .sorted ()
109111 .whereType <Directory >()
110112 .where ((d) => d.isDynamicRoute)
111113 .forEach ((dynamicDirectory) {
@@ -136,7 +138,7 @@ List<RouteFile> _getRouteFiles(
136138 final directoryPath = directorySegment.startsWith ('/' )
137139 ? directorySegment
138140 : '/$directorySegment ' ;
139- final entities = directory.listSync ();
141+ final entities = directory.listSync (). sorted () ;
140142 entities.where ((e) => e.isRoute).cast <File >().forEach ((entity) {
141143 final filePath =
142144 path.join ('..' , path.relative (entity.path)).replaceAll (r'\' , '/' );
@@ -177,6 +179,12 @@ extension on String {
177179 }
178180}
179181
182+ extension on List <FileSystemEntity > {
183+ List <FileSystemEntity > sorted () {
184+ return this ..sort ((a, b) => b.path.compareTo (a.path));
185+ }
186+ }
187+
180188extension on Directory {
181189 bool get isDynamicRoute {
182190 return RegExp (r'\[(.*)\]' ).hasMatch (path.basename (this .path));
@@ -202,8 +210,12 @@ class RouteConfiguration {
202210 required this .middleware,
203211 required this .directories,
204212 required this .routes,
213+ this .serveStaticFiles = false ,
205214 });
206215
216+ /// Whether to serve static files. Defaults to false.
217+ final bool serveStaticFiles;
218+
207219 /// Optional global middleware.
208220 final MiddlewareFile ? globalMiddleware;
209221
0 commit comments