From e3f18ea59c8a69770b4c7eba974339eb4981f5df Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sun, 16 Nov 2025 04:34:48 +0000 Subject: [PATCH] Build API with esbuild and fix ESM imports for Node.js cgen-8d543a0c783843b6959a1660d2549f8d --- build-api.js | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/build-api.js b/build-api.js index 736b9b80..cfcb2c43 100644 --- a/build-api.js +++ b/build-api.js @@ -64,7 +64,6 @@ async function buildAll() { sourcemap: false, logLevel: "silent", }); - console.log(`✓ ${relativePath}`); } catch (error) { console.error(`✗ Failed to build ${relativePath}:`, error.message); process.exit(1); @@ -73,4 +72,54 @@ async function buildAll() { } await buildAll(); -console.log(`\n✓ API build complete! ${tsFiles.length} files compiled.`); +console.log(`✓ Built ${tsFiles.length} files`); + +// Step 2: Fix ESM imports by adding .js extensions +console.log("Fixing ESM imports for Node.js..."); +let totalImportsFixed = 0; + +function fixESMImports(dir) { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + + if (entry.isDirectory()) { + fixESMImports(fullPath); + } else if (entry.name.endsWith(".js")) { + let content = fs.readFileSync(fullPath, "utf-8"); + const originalContent = content; + + // Match: import X from "..." or "..." + content = content.replace( + /from\s+["'](\.[^"']+)["']/g, + (match, importPath) => { + // Skip if already has extension or is node_modules + if ( + importPath.endsWith(".js") || + importPath.endsWith(".mjs") || + importPath.endsWith(".json") || + importPath.includes("node_modules") + ) { + return match; + } + totalImportsFixed++; + const newPath = importPath + ".js"; + console.log( + ` Fixed import in ${path.relative(destApi, fullPath)}: ${importPath} → ${newPath}`, + ); + return `from "${newPath}"`; + }, + ); + + if (content !== originalContent) { + fs.writeFileSync(fullPath, content); + } + } + } +} + +fixESMImports(destApi); +console.log(`✓ Fixed ${totalImportsFixed} ESM imports`); + +console.log("\n✓ API build complete! Ready for Vercel deployment.");