parseULoCRoutesToJson function

Map<String, RouteDeclaration> parseULoCRoutesToJson(
  1. String source
)

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;
}