routesFileMaker function
Implementation
PartFile routesFileMaker(ServerServer server, String Function(Spec) formatter) {
final routes = Method(
(p) => p
..name = 'routes'
..requiredParameters.add(
Parameter(
(p) => p
..name = 'di'
..type = refer((DI).name),
),
)
..returns = TypeReference(
(b) => b
..symbol = 'List'
..types.add(refer((Route).name)),
)
..body = Block.of([
for (final route in server.routes)
if (route.type == InstanceType.singleton)
declareFinal(
'_${route.variableName}',
).assign(createClass(route)).statement,
const Code(''),
literalList([
for (final route in server.routes)
refer(route.handlerName).call([
Method(
(b) => b
..lambda = true
..body = switch (route.type) {
InstanceType.singleton => refer('_${route.variableName}'),
InstanceType.factory => createClass(route),
}.code,
).closure,
refer('di'),
]),
]).returned.statement,
]),
);
final content = formatter(routes);
return PartFile(path: ['definitions', '__routes'], content: content);
}