migrateCloudflareLegacyEntry function
Migrates the legacy Worker entrypoint cloudflare/src/index.ts to
cloudflare/src/edge.ts and rewrites "main" of cloudflare/wrangler.jsonc.
Throws StateError if both files exist. Returns true if the file was migrated.
旧Workerエントリファイルcloudflare/src/index.tsをcloudflare/src/edge.tsに移行し、
cloudflare/wrangler.jsoncの"main"を書き換えます。
両方のファイルが存在する場合はStateErrorを投げます。移行した場合はtrueを返します。
Implementation
Future<bool> migrateCloudflareLegacyEntry() async {
final legacy = File(cloudflareLegacyEntryPath);
final edge = File(cloudflareEdgeEntryPath);
if (!legacy.existsSync()) {
return false;
}
if (edge.existsSync()) {
throw StateError(
"Both `$cloudflareLegacyEntryPath` and `$cloudflareEdgeEntryPath` exist. "
"Merge `$cloudflareLegacyEntryPath` into `$cloudflareEdgeEntryPath` manually, delete it, and run `katana apply` again. "
"`$cloudflareLegacyEntryPath`と`$cloudflareEdgeEntryPath`の両方が存在します。"
"手動で`$cloudflareEdgeEntryPath`へ統合して`$cloudflareLegacyEntryPath`を削除後、再度`katana apply`を実行してください。",
);
}
await legacy.rename(edge.path);
final wrangler = File("cloudflare/wrangler.jsonc");
if (wrangler.existsSync()) {
final source = await wrangler.readAsString();
final updated = source.replaceAll(
RegExp(r'"main"\s*:\s*"src/index\.ts"'),
'"main": "src/edge.ts"',
);
if (updated != source) {
await wrangler.writeAsString(updated);
}
}
label(
"Migrated `$cloudflareLegacyEntryPath` to `$cloudflareEdgeEntryPath` and updated `main` in `cloudflare/wrangler.jsonc`.",
);
return true;
}