Skip to content

Commit 294196e

Browse files
authored
fix(dart_frog_gen): windows route generation (#48)
1 parent 673591e commit 294196e

File tree

3 files changed

+22
-17
lines changed

3 files changed

+22
-17
lines changed

packages/dart_frog_gen/lib/src/build_route_configuration.dart

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,9 @@ RouteConfiguration buildRouteConfiguration(Directory directory) {
1717
final globalMiddleware = globalMiddlewareFile.existsSync()
1818
? MiddlewareFile(
1919
name: 'routes_middleware',
20-
path: path.join(
21-
'..',
22-
path.relative(globalMiddlewareFile.path).replaceAll(r'\', '/'),
23-
),
20+
path: path
21+
.join('..', path.relative(globalMiddlewareFile.path))
22+
.replaceAll(r'\', '/'),
2423
)
2524
: null;
2625

@@ -49,7 +48,8 @@ List<RouteDirectory> _getRouteDirectories(
4948
}) {
5049
final directories = <RouteDirectory>[];
5150
final entities = directory.listSync();
52-
final directorySegment = directory.path.split('routes').last;
51+
final directorySegment =
52+
directory.path.split('routes').last.replaceAll(r'\', '/');
5353
final directoryPath = directorySegment.startsWith('/')
5454
? directorySegment
5555
: '/$directorySegment';
@@ -58,10 +58,9 @@ List<RouteDirectory> _getRouteDirectories(
5858
if (directory.path != path.join(Directory.current.path, 'routes')) {
5959
final _middleware = File(path.join(directory.path, '_middleware.dart'));
6060
if (_middleware.existsSync()) {
61-
final middlewarePath = path.join(
62-
'..',
63-
path.relative(_middleware.path).replaceAll(r'\', '/'),
64-
);
61+
final middlewarePath = path
62+
.join('..', path.relative(_middleware.path))
63+
.replaceAll(r'\', '/');
6564
middleware = MiddlewareFile(
6665
name: middlewarePath.toAlias(),
6766
path: middlewarePath,
@@ -132,16 +131,15 @@ List<RouteFile> _getRouteFiles(
132131
String prefix = '',
133132
}) {
134133
final files = <RouteFile>[];
135-
final directorySegment = directory.path.split('routes').last;
134+
final directorySegment =
135+
directory.path.split('routes').last.replaceAll(r'\', '/');
136136
final directoryPath = directorySegment.startsWith('/')
137137
? directorySegment
138138
: '/$directorySegment';
139139
final entities = directory.listSync();
140140
entities.where((e) => e.isRoute).cast<File>().forEach((entity) {
141-
final filePath = path.join(
142-
'..',
143-
path.relative(entity.path).replaceAll(r'\', '/'),
144-
);
141+
final filePath =
142+
path.join('..', path.relative(entity.path)).replaceAll(r'\', '/');
145143
final fileRoutePath = pathToRoute(filePath).split(directoryPath).last;
146144
var fileRoute = fileRoutePath.isEmpty ? '/' : fileRoutePath;
147145
fileRoute = prefix + fileRoute;
@@ -175,7 +173,7 @@ extension on String {
175173
}
176174

177175
String toRoute() {
178-
return replaceAll('[', '<').replaceAll(']', '>');
176+
return replaceAll('[', '<').replaceAll(']', '>').replaceAll(r'\', '/');
179177
}
180178
}
181179

packages/dart_frog_gen/lib/src/path_to_route.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import 'package:path/path.dart' as p;
99
/// "../routes/hello/<name>.dart" -> "/hello/<name>"
1010
/// ```
1111
String pathToRoute(String path) {
12-
final relativePath = p.relative(path, from: '../routes');
12+
final normalizedPath = path.replaceAll(r'\', '/');
13+
final relativePath =
14+
p.relative(normalizedPath, from: '../routes').replaceAll(r'\', '/');
1315
final route = '/${relativePath.split('.dart').first.replaceAll('index', '')}';
1416

1517
if (route.length > 1 && route.endsWith('/')) {

packages/dart_frog_gen/test/src/path_to_route_test.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@ void main() {
77
'../routes/index.dart': '/',
88
'../routes/hello.dart': '/hello',
99
'../routes/hello/world.dart': '/hello/world',
10-
'../routes/hello/<name>.dart': '/hello/<name>',
10+
'../routes/hello/[name].dart': '/hello/[name]',
1111
'../routes/api/v1/index.dart': '/api/v1',
12+
r'..\routes\index.dart': '/',
13+
r'..\routes\hello.dart': '/hello',
14+
r'..\routes\hello\world.dart': '/hello/world',
15+
r'..\routes\hello\[name].dart': '/hello/[name]',
16+
r'..\routes\api\v1\index.dart': '/api/v1',
1217
};
1318

1419
for (final entry in expectedPathToRouteMappings.entries) {

0 commit comments

Comments
 (0)