- Remove last runtimeEnv import from processMessage.ts - Add env: Env param to all functions with 'Cannot find name env' errors - Convert initRedisV2 to lazy initialization (ensureRedisV2 + Proxy) - Add Bindings: Env to StripeWebhookHonoEnv - Fix 12+ files across external/, internal/, queue/ modules - Scanning test passes: 1/1 (runtime-env-imports.test.ts)
73 lines
2.4 KiB
TypeScript
73 lines
2.4 KiB
TypeScript
#!/usr/bin/env bun
|
|
/**
|
|
* Bulk migration: runtimeEnv → env, global logger → createLogger(env)
|
|
*/
|
|
import { readFileSync, writeFileSync } from "node:fs";
|
|
import { globSync } from "bun:fs";
|
|
|
|
const SRC = "/Volumes/sker/autumn/server/src";
|
|
|
|
const files = globSync(`${SRC}/**/*.ts`).filter(
|
|
(f) => !f.includes("node_modules") && !f.includes(".test."),
|
|
);
|
|
|
|
let changed = 0;
|
|
|
|
for (const f of files) {
|
|
let content = readFileSync(f, "utf-8");
|
|
const original = content;
|
|
let modified = false;
|
|
|
|
// ── Remove runtimeEnv imports ──
|
|
if (content.match(/import\s+\{[^}]*runtimeEnv[^}]*\}\s+from\s+["'][^"']*envUtils[^"']*["'];?/)) {
|
|
content = content.replace(
|
|
/^import\s+\{[^}]*runtimeEnv[^}]*\}\s+from\s+["'][^"']*envUtils[^"']*["'];?\s*\n/gm,
|
|
"",
|
|
);
|
|
modified = true;
|
|
}
|
|
|
|
// ── Replace runtimeEnv.XXX → env.XXX ──
|
|
if (content.includes("runtimeEnv.")) {
|
|
content = content.replace(/runtimeEnv\./g, "env.");
|
|
modified = true;
|
|
}
|
|
|
|
// ── Replace import { logger } with import { createLogger } ──
|
|
if (content.match(/import\s+\{[^}]*\blogger\b[^}]*\}\s+from\s+["'][^"']*logtailUtils[^"']*["'];?/)) {
|
|
// Add createLogger to the existing import, or create new import
|
|
if (content.includes("import { createLogger }")) {
|
|
// Already has createLogger, just remove logger
|
|
content = content.replace(
|
|
/import\s+\{([^}]*)logger([^}]*)\}\s+from\s+["'][^"']*logtailUtils[^"']*["'];?/g,
|
|
(_, p1, p2) => {
|
|
const parts = [p1.trim(), p2.trim()].filter(Boolean).join(", ");
|
|
return parts
|
|
? `import { ${parts} } from "@/external/logtail/logtailUtils.js";`
|
|
: 'import { createLogger } from "@/external/logtail/logtailUtils.js";';
|
|
},
|
|
);
|
|
} else {
|
|
content = content.replace(
|
|
/import\s+\{([^}]*)logger\b([^}]*)\}\s+from\s+["'][^"']*logtailUtils[^"']*["'];?/g,
|
|
(_, p1, p2) => {
|
|
const hasOther = (p1 + p2).replace(/\s+/g, "").length > 0;
|
|
if (hasOther) {
|
|
return `import { createLogger, ${[p1, p2].map(s => s.trim()).filter(Boolean).join(", ")} } from "@/external/logtail/logtailUtils.js";`;
|
|
}
|
|
return 'import { createLogger } from "@/external/logtail/logtailUtils.js";';
|
|
},
|
|
);
|
|
}
|
|
modified = true;
|
|
}
|
|
|
|
if (modified) {
|
|
writeFileSync(f, content);
|
|
changed++;
|
|
console.log(`✓ ${f.replace(SRC, "")}`);
|
|
}
|
|
}
|
|
|
|
console.log(`\nChanged ${changed} files.`);
|