timoideas
Version:
CLI oficial de Timoideas para automatizar tareas de desarrollo
92 lines (76 loc) • 3.1 kB
JavaScript
const fs = require("fs");
const path = require("path");
const { execSync } = require("child_process");
const os = require("os");
module.exports = function setupSupabaseConnection() {
console.log(
"\n📡 Iniciando configuración de conexión a base de datos (Supabase)..."
);
const projectRoot = process.cwd();
const dbPath = path.join(projectRoot, "src/lib/db");
const envPath = path.join(projectRoot, ".env.local");
// 1. Crear carpeta si no existe
fs.mkdirSync(dbPath, { recursive: true });
// 2. Crear archivo Supabase client
const clientContent = `// 📦 Supabase client para Next.js 15
import { createClient } from "@supabase/supabase-js"
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
if (!supabaseUrl || !supabaseKey) {
console.warn("⚠️ Supabase no está correctamente configurado. Revisa tu archivo .env.local")
}
export const supabase = createClient(supabaseUrl || "", supabaseKey || "")
`;
const clientFile = path.join(dbPath, "supabase.ts");
fs.writeFileSync(clientFile, clientContent);
console.log("✅ Archivo creado: src/lib/db/supabase.ts");
// 3. Añadir variables a .env.local si no existen
if (!fs.existsSync(envPath)) fs.writeFileSync(envPath, "");
const envVars = fs.readFileSync(envPath, "utf-8");
const appendIfMissing = (key) => {
if (!envVars.includes(`${key}=`)) {
fs.appendFileSync(envPath, `\n${key}=`);
console.log(`🔧 Variable añadida: ${key}`);
}
};
appendIfMissing("NEXT_PUBLIC_SUPABASE_URL");
appendIfMissing("NEXT_PUBLIC_SUPABASE_ANON_KEY");
// 4. Instalar @supabase/supabase-js si no está
const pkgPath = path.join(projectRoot, "package.json");
if (fs.existsSync(pkgPath)) {
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
const deps = pkg.dependencies || {};
if (!deps["@supabase/supabase-js"]) {
console.log("📦 Instalando @supabase/supabase-js...");
try {
execSync("npm install @supabase/supabase-js", { stdio: "inherit" });
} catch (err) {
console.error("❌ Error al instalar Supabase:", err.message);
}
} else {
console.log("✅ @supabase/supabase-js ya está instalado.");
}
}
// 5. Abrir Supabase en navegador
const supabaseURL = "https://supabase.com/dashboard/projects";
const openCommand =
os.platform() === "darwin"
? "open"
: os.platform() === "win32"
? "start"
: "xdg-open";
try {
execSync(`${openCommand} ${supabaseURL}`);
console.log("🌐 Supabase abierto en tu navegador.");
} catch {
console.warn("⚠️ No se pudo abrir el navegador automáticamente.");
}
// 6. Abrir archivo .env.local en VS Code
try {
execSync("code .env.local");
console.log("📝 Abriendo .env.local en VS Code...");
} catch {
console.warn("⚠️ No se pudo abrir VS Code automáticamente.");
}
console.log("\n✅ Supabase configurado correctamente.");
};