Skip to content

Commit 8775813

Browse files
Jochum van der Ploegrenancaraujo
andauthored
feat(dart_frog_gen): detect custom init method (#564)
Co-authored-by: Renan <[email protected]>
1 parent 62ea0c9 commit 8775813

File tree

2 files changed

+84
-1
lines changed

2 files changed

+84
-1
lines changed

packages/dart_frog_gen/lib/src/build_route_configuration.dart

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,16 @@ RouteConfiguration buildRouteConfiguration(Directory directory) {
4545
);
4646
final publicDirectory = Directory(path.join(directory.path, 'public'));
4747
final mainDartFile = File(path.join(directory.path, 'main.dart'));
48+
49+
final customInitRegex = RegExp(
50+
r'^Future(?:Or)?<void>\s*init\(InternetAddress .*?,\s*int .*?\)\s*(?:async)?\s*{',
51+
multiLine: true,
52+
);
53+
54+
final mainDartFileExists = mainDartFile.existsSync();
55+
final hasCustomInit = mainDartFileExists &&
56+
customInitRegex.hasMatch(mainDartFile.readAsStringSync());
57+
4858
return RouteConfiguration(
4959
globalMiddleware: globalMiddleware,
5060
middleware: middleware,
@@ -53,7 +63,8 @@ RouteConfiguration buildRouteConfiguration(Directory directory) {
5363
rogueRoutes: rogueRoutes,
5464
endpoints: endpoints,
5565
serveStaticFiles: publicDirectory.existsSync(),
56-
invokeCustomEntrypoint: mainDartFile.existsSync(),
66+
invokeCustomEntrypoint: mainDartFileExists,
67+
invokeCustomInit: hasCustomInit,
5768
);
5869
}
5970

@@ -252,11 +263,15 @@ class RouteConfiguration {
252263
this.globalMiddleware,
253264
this.serveStaticFiles = false,
254265
this.invokeCustomEntrypoint = false,
266+
this.invokeCustomInit = false,
255267
});
256268

257269
/// Whether to invoke a custom entrypoint script (`main.dart`).
258270
final bool invokeCustomEntrypoint;
259271

272+
/// Whether to invoke a custom init method (`init` in `main.dart`).
273+
final bool invokeCustomInit;
274+
260275
/// Whether to serve static files. Defaults to false.
261276
final bool serveStaticFiles;
262277

packages/dart_frog_gen/test/src/build_route_configuration_test.dart

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,74 @@ void main() {
5050
expect(configuration.invokeCustomEntrypoint, isFalse);
5151
});
5252

53+
test('invokeCustomInit is true when init exists in main.dart', () {
54+
final tempDirectory = createTempDir(
55+
directories: ['routes'],
56+
files: ['main.dart'],
57+
);
58+
59+
File(path.join(tempDirectory.path, 'main.dart')).writeAsStringSync('''
60+
Future<void> init(InternetAddress ip, int port) async {}
61+
''');
62+
63+
final configuration = buildRouteConfiguration(tempDirectory);
64+
expect(configuration.invokeCustomEntrypoint, isTrue);
65+
});
66+
67+
test('invokeCustomInit is true when init with FutureOr exists in main.dart',
68+
() {
69+
final tempDirectory = createTempDir(
70+
directories: ['routes'],
71+
files: ['main.dart'],
72+
);
73+
74+
File(path.join(tempDirectory.path, 'main.dart')).writeAsStringSync('''
75+
FutureOr<void> init(InternetAddress ip, int port) async {}
76+
''');
77+
78+
final configuration = buildRouteConfiguration(tempDirectory);
79+
expect(configuration.invokeCustomEntrypoint, isTrue);
80+
});
81+
82+
test(
83+
'''invokeCustomInit is true when init with different parameter names exists in main.dart''',
84+
() {
85+
final tempDirectory = createTempDir(
86+
directories: ['routes'],
87+
files: ['main.dart'],
88+
);
89+
90+
File(path.join(tempDirectory.path, 'main.dart')).writeAsStringSync('''
91+
Future<void> init(InternetAddress hello, int world) async {}
92+
''');
93+
94+
final configuration = buildRouteConfiguration(tempDirectory);
95+
expect(configuration.invokeCustomEntrypoint, isTrue);
96+
});
97+
98+
test(
99+
'''invokeCustomInit is true when init with bad spacing exists in main.dart''',
100+
() {
101+
final tempDirectory = createTempDir(
102+
directories: ['routes'],
103+
files: ['main.dart'],
104+
);
105+
106+
File(path.join(tempDirectory.path, 'main.dart')).writeAsStringSync('''
107+
Future<void>init(InternetAddress ip,int port)async{}
108+
''');
109+
110+
final configuration = buildRouteConfiguration(tempDirectory);
111+
expect(configuration.invokeCustomEntrypoint, isTrue);
112+
});
113+
114+
test('invokeCustomEntrypoint is false when main.dart does not exist', () {
115+
final configuration = buildRouteConfiguration(
116+
createTempDir(directories: ['routes']),
117+
);
118+
expect(configuration.invokeCustomInit, isFalse);
119+
});
120+
53121
test('includes global middleware when it exists', () {
54122
final configuration = buildRouteConfiguration(
55123
createTempDir(files: ['routes/_middleware.dart']),

0 commit comments

Comments
 (0)