findEdgeTidbUsages function
Returns the files that use TiDB from the edge Worker entry.
Follows relative imports of entry recursively within cloudflare/src
and lists files containing @mathrunet/masamune_cloudflare_tidb,
TidbDirectClient or TIDB_HOST.
edge WorkerentryからTiDBを使用しているファイルを返します。
entryの相対importをcloudflare/src内で再帰的に辿り、
@mathrunet/masamune_cloudflare_tidb・TidbDirectClient・TIDB_HOSTを含むファイルを列挙します。
Implementation
List<String> findEdgeTidbUsages({String entry = cloudflareEdgeEntryPath}) {
const root = "cloudflare/src";
const markers = [
"@mathrunet/masamune_cloudflare_tidb",
"TidbDirectClient",
"TIDB_HOST",
];
final importPattern = RegExp(
r"""(?:import|export)\s+(?:[^'";]*?\s+from\s+)?["'](\.{1,2}/[^"']+)["']""",
);
final visited = <String>{};
final usages = <String>[];
final queue = <String>[_normalizeCloudflarePath(entry)];
while (queue.isNotEmpty) {
final path = queue.removeAt(0);
if (!visited.add(path)) {
continue;
}
final file = File(path);
if (!file.existsSync()) {
continue;
}
final source = file.readAsStringSync();
if (markers.any(source.contains)) {
usages.add(path);
}
final directory =
path.contains("/") ? path.substring(0, path.lastIndexOf("/")) : "";
for (final match in importPattern.allMatches(source)) {
final resolved = _resolveCloudflareImport(directory, match.group(1)!);
if (resolved != null &&
resolved.startsWith("$root/") &&
!visited.contains(resolved)) {
queue.add(resolved);
}
}
}
return usages;
}