Fix build-api.js with more robust ESM import fixing

cgen-fc3007874e0a4c7da831f44b47542e66
This commit is contained in:
Builder.io 2025-11-16 04:25:42 +00:00
parent d9930643f6
commit 7be977c588

View file

@ -50,6 +50,7 @@ try {
// Step 3: Fix ESM imports by adding .js extensions to relative imports // Step 3: Fix ESM imports by adding .js extensions to relative imports
console.log("Step 3: Fixing ESM module imports..."); console.log("Step 3: Fixing ESM module imports...");
let fixedCount = 0; let fixedCount = 0;
let importFixedCount = 0;
function fixImportsInDir(dir) { function fixImportsInDir(dir) {
const entries = fs.readdirSync(dir, { withFileTypes: true }); const entries = fs.readdirSync(dir, { withFileTypes: true });
@ -61,34 +62,69 @@ function fixImportsInDir(dir) {
fixImportsInDir(fullPath); fixImportsInDir(fullPath);
} else if (entry.name.endsWith(".js")) { } else if (entry.name.endsWith(".js")) {
let content = fs.readFileSync(fullPath, "utf-8"); let content = fs.readFileSync(fullPath, "utf-8");
let originalContent = content;
// Fix relative imports for ESM: "../../_supabase" -> "../../_supabase.js" // Pattern 1: import ... from "..."
let fixedContent = content.replace( content = content.replace(
/from\s+"(\.\.?\/[^"]+)"/g, /from\s+["'](\.[^"']+)["']/g,
(match, importPath) => { (match, importPath) => {
if (importPath.endsWith(".js")) return match; if (
importPath.endsWith(".js") ||
importPath.endsWith(".json") ||
importPath.includes("node_modules")
) {
return match;
}
importFixedCount++;
return `from "${importPath}.js"`; return `from "${importPath}.js"`;
}, },
); );
fixedContent = fixedContent.replace( // Pattern 2: import("...")
/from\s+'(\.\.?\/[^']+)'/g, content = content.replace(
/import\s*\(\s*["'](\.[^"']+)["']\s*\)/g,
(match, importPath) => { (match, importPath) => {
if (importPath.endsWith(".js")) return match; if (
return `from '${importPath}.js'`; importPath.endsWith(".js") ||
importPath.endsWith(".json") ||
importPath.includes("node_modules")
) {
return match;
}
importFixedCount++;
return `import("${importPath}.js")`;
}, },
); );
if (fixedContent !== content) { // Pattern 3: require("...")
fs.writeFileSync(fullPath, fixedContent); content = content.replace(
/require\s*\(\s*["'](\.[^"']+)["']\s*\)/g,
(match, importPath) => {
if (
importPath.endsWith(".js") ||
importPath.endsWith(".json") ||
importPath.includes("node_modules")
) {
return match;
}
importFixedCount++;
return `require("${importPath}.js")`;
},
);
if (content !== originalContent) {
fs.writeFileSync(fullPath, content);
fixedCount++; fixedCount++;
console.log(` Fixed: ${path.relative(destApi, fullPath)}`);
} }
} }
} }
} }
fixImportsInDir(destApi); fixImportsInDir(destApi);
console.log(`✓ Fixed ESM imports in ${fixedCount} files`); console.log(
`✓ Fixed ESM imports in ${fixedCount} files (${importFixedCount} total imports)`,
);
// Step 4: Remove TypeScript files so Vercel doesn't recompile them // Step 4: Remove TypeScript files so Vercel doesn't recompile them
console.log("Step 4: Removing TypeScript source files..."); console.log("Step 4: Removing TypeScript source files...");