Skip to content

Commit 0d34138

Browse files
authored
refactor(dart_frog_gen): make buildRouteConfiguration relative to routes (#194)
1 parent 4c26dd8 commit 0d34138

File tree

2 files changed

+76
-114
lines changed

2 files changed

+76
-114
lines changed

packages/dart_frog_gen/lib/src/build_route_configuration.dart

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ RouteConfiguration buildRouteConfiguration(Directory directory) {
1616
);
1717
final globalMiddleware = globalMiddlewareFile.existsSync()
1818
? MiddlewareFile(
19-
name: 'routes_middleware',
19+
name: 'middleware',
2020
path: path
2121
.join('..', path.relative(globalMiddlewareFile.path))
2222
.replaceAll(r'\', '/'),
@@ -28,7 +28,8 @@ RouteConfiguration buildRouteConfiguration(Directory directory) {
2828
];
2929
final routes = <RouteFile>[];
3030
final directories = _getRouteDirectories(
31-
routesDirectory,
31+
directory: routesDirectory,
32+
routesDirectory: routesDirectory,
3233
onRoute: routes.add,
3334
onMiddleware: middleware.add,
3435
);
@@ -42,10 +43,11 @@ RouteConfiguration buildRouteConfiguration(Directory directory) {
4243
);
4344
}
4445

45-
List<RouteDirectory> _getRouteDirectories(
46-
Directory directory, {
47-
void Function(RouteFile route)? onRoute,
48-
void Function(MiddlewareFile route)? onMiddleware,
46+
List<RouteDirectory> _getRouteDirectories({
47+
required Directory directory,
48+
required Directory routesDirectory,
49+
required void Function(RouteFile route) onRoute,
50+
required void Function(MiddlewareFile route) onMiddleware,
4951
}) {
5052
final directories = <RouteDirectory>[];
5153
final entities = directory.listSync().sorted();
@@ -60,19 +62,27 @@ List<RouteDirectory> _getRouteDirectories(
6062
final _middleware = File(path.join(directory.path, '_middleware.dart'));
6163
if (_middleware.existsSync()) {
6264
final middlewarePath = path
63-
.join('..', path.relative(_middleware.path))
65+
.relative(_middleware.path, from: routesDirectory.path)
6466
.replaceAll(r'\', '/');
6567
middleware = MiddlewareFile(
6668
name: middlewarePath.toAlias(),
67-
path: middlewarePath,
69+
path: path.join('..', 'routes', middlewarePath),
6870
);
69-
onMiddleware?.call(middleware);
71+
onMiddleware(middleware);
7072
}
7173
}
7274

7375
final files = [
74-
..._getRouteFiles(directory, onRoute: onRoute),
75-
..._getRouteFilesForDynamicDirectories(directory, onRoute: onRoute),
76+
..._getRouteFiles(
77+
directory: directory,
78+
routesDirectory: routesDirectory,
79+
onRoute: onRoute,
80+
),
81+
..._getRouteFilesForDynamicDirectories(
82+
directory: directory,
83+
routesDirectory: routesDirectory,
84+
onRoute: onRoute,
85+
),
7686
];
7787

7888
directories.add(
@@ -84,11 +94,12 @@ List<RouteDirectory> _getRouteDirectories(
8494
),
8595
);
8696

87-
entities.whereType<Directory>().forEach((entity) {
88-
if (!entity.isDynamicRoute) {
97+
entities.whereType<Directory>().forEach((directory) {
98+
if (!directory.isDynamicRoute) {
8999
directories.addAll(
90100
_getRouteDirectories(
91-
entity,
101+
directory: directory,
102+
routesDirectory: routesDirectory,
92103
onRoute: onRoute,
93104
onMiddleware: onMiddleware,
94105
),
@@ -99,9 +110,10 @@ List<RouteDirectory> _getRouteDirectories(
99110
return directories;
100111
}
101112

102-
List<RouteFile> _getRouteFilesForDynamicDirectories(
103-
Directory directory, {
104-
void Function(RouteFile route)? onRoute,
113+
List<RouteFile> _getRouteFilesForDynamicDirectories({
114+
required Directory directory,
115+
required Directory routesDirectory,
116+
required void Function(RouteFile route) onRoute,
105117
String prefix = '',
106118
}) {
107119
final files = <RouteFile>[];
@@ -113,12 +125,14 @@ List<RouteFile> _getRouteFilesForDynamicDirectories(
113125
.forEach((dynamicDirectory) {
114126
final newPrefix = '$prefix/${path.basename(dynamicDirectory.path)}';
115127
final subset = _getRouteFiles(
116-
dynamicDirectory,
128+
directory: dynamicDirectory,
129+
routesDirectory: routesDirectory,
117130
onRoute: onRoute,
118131
prefix: newPrefix,
119132
);
120133
final dynamicSubset = _getRouteFilesForDynamicDirectories(
121-
dynamicDirectory,
134+
directory: dynamicDirectory,
135+
routesDirectory: routesDirectory,
122136
onRoute: onRoute,
123137
prefix: newPrefix,
124138
);
@@ -127,9 +141,10 @@ List<RouteFile> _getRouteFilesForDynamicDirectories(
127141
return files;
128142
}
129143

130-
List<RouteFile> _getRouteFiles(
131-
Directory directory, {
132-
void Function(RouteFile route)? onRoute,
144+
List<RouteFile> _getRouteFiles({
145+
required Directory directory,
146+
required Directory routesDirectory,
147+
required void Function(RouteFile route) onRoute,
133148
String prefix = '',
134149
}) {
135150
final files = <RouteFile>[];
@@ -140,9 +155,12 @@ List<RouteFile> _getRouteFiles(
140155
: '/$directorySegment';
141156
final entities = directory.listSync().sorted();
142157
entities.where((e) => e.isRoute).cast<File>().forEach((entity) {
143-
final filePath =
144-
path.join('..', path.relative(entity.path)).replaceAll(r'\', '/');
145-
final fileRoutePath = pathToRoute(filePath).split(directoryPath).last;
158+
final filePath = path
159+
.relative(entity.path, from: routesDirectory.path)
160+
.replaceAll(r'\', '/');
161+
final fileRoutePath = pathToRoute(path.join('..', 'routes', filePath))
162+
.split(directoryPath)
163+
.last;
146164
var fileRoute = fileRoutePath.isEmpty ? '/' : fileRoutePath;
147165
fileRoute = prefix + fileRoute;
148166
if (!fileRoute.startsWith('/')) {
@@ -152,12 +170,13 @@ List<RouteFile> _getRouteFiles(
152170
fileRoute = fileRoute.substring(0, fileRoute.length - 1);
153171
}
154172

173+
final relativeFilePath = path.join('..', 'routes', filePath);
155174
final route = RouteFile(
156175
name: filePath.toAlias(),
157-
path: filePath,
176+
path: relativeFilePath,
158177
route: fileRoute.toRoute(),
159178
);
160-
onRoute?.call(route);
179+
onRoute(route);
161180
files.add(route);
162181
});
163182
return files;

packages/dart_frog_gen/test/src/build_route_configuration_test.dart

Lines changed: 30 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,7 @@ void main() {
5656
'route': '/',
5757
'middleware': false,
5858
'files': [
59-
{
60-
'name': '.._test_.fixtures_single_routes_index',
61-
'path': '../test/.fixtures/single/routes/index.dart',
62-
'route': '/routes'
63-
}
59+
{'name': 'index', 'path': '../routes/index.dart', 'route': '/'}
6460
]
6561
}
6662
];
@@ -84,16 +80,8 @@ void main() {
8480
'route': '/',
8581
'middleware': false,
8682
'files': [
87-
{
88-
'name': '.._test_.fixtures_multiple_top_level_routes_index',
89-
'path': '../test/.fixtures/multiple_top_level/routes/index.dart',
90-
'route': '/routes'
91-
},
92-
{
93-
'name': '.._test_.fixtures_multiple_top_level_routes_hello',
94-
'path': '../test/.fixtures/multiple_top_level/routes/hello.dart',
95-
'route': '/hello'
96-
}
83+
{'name': 'index', 'path': '../routes/index.dart', 'route': '/'},
84+
{'name': 'hello', 'path': '../routes/hello.dart', 'route': '/hello'}
9785
]
9886
}
9987
];
@@ -123,11 +111,7 @@ void main() {
123111
'route': '/',
124112
'middleware': false,
125113
'files': [
126-
{
127-
'name': '.._test_.fixtures_nested_routes_index',
128-
'path': '../test/.fixtures/nested/routes/index.dart',
129-
'route': '/routes'
130-
}
114+
{'name': 'index', 'path': '../routes/index.dart', 'route': '/'}
131115
]
132116
},
133117
{
@@ -136,8 +120,8 @@ void main() {
136120
'middleware': false,
137121
'files': [
138122
{
139-
'name': '.._test_.fixtures_nested_routes_echo_message',
140-
'path': '../test/.fixtures/nested/routes/echo/message.dart',
123+
'name': 'echo_message',
124+
'path': '../routes/echo/message.dart',
141125
'route': '/message'
142126
}
143127
]
@@ -174,10 +158,8 @@ void main() {
174158
'middleware': false,
175159
'files': [
176160
{
177-
'name':
178-
'''.._test_.fixtures_nested_directories_routes_echo_message_index''',
179-
'path':
180-
'../test/.fixtures/nested_directories/routes/echo/message/index.dart',
161+
'name': 'echo_message_index',
162+
'path': '../routes/echo/message/index.dart',
181163
'route': '/'
182164
}
183165
]
@@ -212,11 +194,7 @@ void main() {
212194
'route': '/',
213195
'middleware': false,
214196
'files': [
215-
{
216-
'name': '.._test_.fixtures_dynamic_routes_index',
217-
'path': '../test/.fixtures/dynamic/routes/index.dart',
218-
'route': '/routes'
219-
}
197+
{'name': 'index', 'path': '../routes/index.dart', 'route': '/'}
220198
]
221199
},
222200
{
@@ -225,8 +203,8 @@ void main() {
225203
'middleware': false,
226204
'files': [
227205
{
228-
'name': r'.._test_.fixtures_dynamic_routes_echo_$message',
229-
'path': '../test/.fixtures/dynamic/routes/echo/[message].dart',
206+
'name': r'echo_$message',
207+
'path': '../routes/echo/[message].dart',
230208
'route': '/<message>'
231209
}
232210
]
@@ -255,22 +233,15 @@ void main() {
255233
'route': '/',
256234
'middleware': false,
257235
'files': [
236+
{'name': 'index', 'path': '../routes/index.dart', 'route': '/'},
258237
{
259-
'name': '.._test_.fixtures_dynamic_nested_routes_index',
260-
'path': '../test/.fixtures/dynamic_nested/routes/index.dart',
261-
'route': '/routes'
262-
},
263-
{
264-
'name': r'.._test_.fixtures_dynamic_nested_routes_$user_$name',
265-
'path':
266-
'../test/.fixtures/dynamic_nested/routes/[user]/[name].dart',
238+
'name': r'$user_$name',
239+
'path': '../routes/[user]/[name].dart',
267240
'route': '/<user>/<name>'
268241
},
269242
{
270-
'name':
271-
r'.._test_.fixtures_dynamic_nested_routes_$user_$id_index',
272-
'path':
273-
'../test/.fixtures/dynamic_nested/routes/[user]/[id]/index.dart',
243+
'name': r'$user_$id_index',
244+
'path': '../routes/[user]/[id]/index.dart',
274245
'route': '/<user>/<id>'
275246
}
276247
]
@@ -307,17 +278,10 @@ void main() {
307278
'route': '/',
308279
'middleware': false,
309280
'files': [
281+
{'name': 'index', 'path': '../routes/index.dart', 'route': '/'},
310282
{
311-
'name': '.._test_.fixtures_dynamic_static_nesting1_routes_index',
312-
'path':
313-
'../test/.fixtures/dynamic_static_nesting1/routes/index.dart',
314-
'route': '/routes'
315-
},
316-
{
317-
'name':
318-
r'''.._test_.fixtures_dynamic_static_nesting1_routes_$id_api_index''',
319-
'path':
320-
'../test/.fixtures/dynamic_static_nesting1/routes/[id]/api/index.dart',
283+
'name': r'$id_api_index',
284+
'path': '../routes/[id]/api/index.dart',
321285
'route': '/<id>/api'
322286
}
323287
]
@@ -353,17 +317,10 @@ void main() {
353317
'route': '/',
354318
'middleware': false,
355319
'files': [
320+
{'name': 'index', 'path': '../routes/index.dart', 'route': '/'},
356321
{
357-
'name': '.._test_.fixtures_dynamic_static_nesting2_routes_index',
358-
'path':
359-
'../test/.fixtures/dynamic_static_nesting2/routes/index.dart',
360-
'route': '/routes'
361-
},
362-
{
363-
'name':
364-
r'''.._test_.fixtures_dynamic_static_nesting2_routes_$id_api_test''',
365-
'path':
366-
'../test/.fixtures/dynamic_static_nesting2/routes/[id]/api/test.dart',
322+
'name': r'$id_api_test',
323+
'path': '../routes/[id]/api/test.dart',
367324
'route': '/<id>/api/test'
368325
}
369326
]
@@ -399,21 +356,14 @@ void main() {
399356
'route': '/',
400357
'middleware': false,
401358
'files': [
359+
{'name': 'index', 'path': '../routes/index.dart', 'route': '/'},
402360
{
403-
'name': '.._test_.fixtures_dynamic_static_nesting3_routes_index',
404-
'path':
405-
'../test/.fixtures/dynamic_static_nesting3/routes/index.dart',
406-
'route': '/routes'
407-
},
408-
{
409-
'name':
410-
r'''.._test_.fixtures_dynamic_static_nesting3_routes_$id_api_$name_index''',
411-
'path':
412-
'../test/.fixtures/dynamic_static_nesting3/routes/[id]/api/[name]/index.dart',
361+
'name': r'$id_api_$name_index',
362+
'path': '../routes/[id]/api/[name]/index.dart',
413363
'route': '/<id>/api/<name>'
414364
}
415365
]
416-
},
366+
}
417367
];
418368
final directory = Directory(
419369
path.join(
@@ -447,21 +397,14 @@ void main() {
447397
'route': '/',
448398
'middleware': false,
449399
'files': [
400+
{'name': 'index', 'path': '../routes/index.dart', 'route': '/'},
450401
{
451-
'name': '.._test_.fixtures_dynamic_static_nesting4_routes_index',
452-
'path':
453-
'../test/.fixtures/dynamic_static_nesting4/routes/index.dart',
454-
'route': '/routes'
455-
},
456-
{
457-
'name':
458-
r'''.._test_.fixtures_dynamic_static_nesting4_routes_$id_api_$name_test''',
459-
'path':
460-
'../test/.fixtures/dynamic_static_nesting4/routes/[id]/api/[name]/test.dart',
402+
'name': r'$id_api_$name_test',
403+
'path': '../routes/[id]/api/[name]/test.dart',
461404
'route': '/<id>/api/<name>/test'
462405
}
463406
]
464-
},
407+
}
465408
];
466409
final directory = Directory(
467410
path.join(

0 commit comments

Comments
 (0)