generate method
Generates Dart code for an input Dart library.
May create additional outputs through the buildStep
, but the 'primary'
output is Dart code returned through the Future. If there is nothing to
generate for this library may return null, or a Future that resolves to
null or the empty string.
Implementation
@override
Future<String?> generate(LibraryReader library, BuildStep buildStep) async {
final routers = library.classes.map((class$) {
final routes = RouteHandler.from(class$);
if (routes.isEmpty) return null;
return MapEntry(class$, routes);
}).nonNulls;
if (routers.isEmpty) return null;
final routersCode = routers.map((__) {
final MapEntry(key: class$, value: routes) = __;
final routesCode = routes.map((route) {
return switch (route) {
MountRouteHandler() => switch (route.isRouterMixin) {
false =>
'..mount(${literalString(route.path)}, service.${route.element.requireName}.call)',
true =>
'..mount(${literalString(route.path)}, service.${route.element.requireName}.router.call)',
},
HttpRouteHandler() => _codeAddRoute(route),
};
}).join();
return '''
Router _\$${class$.requireName}Router(${class$.requireName} service) => Router()\n
$routesCode;\n''';
});
return routersCode.join('\n');
}