parseULoCRoutesToJson function
Implementation
Map<String, RouteDeclaration> parseULoCRoutesToJson(String source) {
final routeMap = <String, RouteDeclaration>{};
String cleaned = source
.replaceAll(RegExp(r'[\r\n]+'), '')
.replaceAll(RegExp(r'\s+'), ' ')
.trim();
final routeRegex = RegExp(
r"'(\w+)':\s*ULoCRouteDefine\(\s*"
r"route:\s*'([^']+)',\s*"
r"provider:\s*\(([^)]+)\)\s*=>\s*([^\n]+?),\s*"
r"child:\s*([^\n,]+)",
multiLine: true,
);
for (final match in routeRegex.allMatches(cleaned)) {
final key = match.group(1) ?? ''; // e.g. 'HOME'
final route = match.group(2) ?? ''; // e.g. '/'
final providerArgs = match.group(3) ?? ''; // e.g. context, _
final providerBody = match.group(4)?.trim(); // e.g. HomeController(context)
final child =
match.group(5)?.trim().replaceAll(',', '') ??
'UnknownChild'; // e.g. Home
// Extract provider name (e.g., HomeController from HomeController(context))
final providerNameMatch = RegExp(
r'(\w+)\s*\(',
).firstMatch(providerBody ?? '');
final providerName = providerNameMatch?.group(1) ?? 'UnknownProvider';
final providerFunction = '($providerArgs) => ${providerBody}';
final args = extractArguments(providerFunction);
routeMap[key] = RouteDeclaration(
routeName: key,
route: route,
providerName: providerName,
provider: providerFunction,
arguments: args,
child: child,
);
}
return routeMap;
}