#!/usr/bin/env node /** * Simple D1 Database CLI * Usage: node scripts/d1.js [args...] */ import { execSync } from 'child_process'; const DB_NAME = 'd1-notso-livedash'; const args = process.argv.slice(2); if (args.length === 0) { console.log(` 🗄️ Simple D1 CLI for ${DB_NAME} Usage: node scripts/d1.js [args...] Commands: list List databases info Show database info tables List all tables schema Show table schema query "" Execute SQL query export [file] Export database Add --remote flag for production database Examples: node scripts/d1.js tables node scripts/d1.js schema User node scripts/d1.js query "SELECT COUNT(*) FROM Company" node scripts/d1.js --remote info `); process.exit(0); } const isRemote = args.includes('--remote'); const filteredArgs = args.filter(arg => !arg.startsWith('--')); const [ command, ...params ] = filteredArgs; const remoteFlag = isRemote ? '--remote' : ''; function run(cmd) { try { console.log(`💫 ${cmd}`); execSync(cmd, { stdio: 'inherit' }); } catch (error) { console.error('❌ Command failed'); process.exit(1); } } switch (command) { case 'list': run('npx wrangler d1 list'); break; case 'info': run(`npx wrangler d1 info ${DB_NAME} ${remoteFlag}`); break; case 'tables': run(`npx wrangler d1 execute ${DB_NAME} ${remoteFlag} --command "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"`); break; case 'schema': if (!params[ 0 ]) { console.error('❌ Please specify table name'); process.exit(1); } run(`npx wrangler d1 execute ${DB_NAME} ${remoteFlag} --command "PRAGMA table_info(${params[ 0 ]})"`); break; case 'query': if (!params[ 0 ]) { console.error('❌ Please specify SQL query'); process.exit(1); } run(`npx wrangler d1 execute ${DB_NAME} ${remoteFlag} --command "${params[ 0 ]}"`); break; case 'export': const filename = params[ 0 ] || `backup_${new Date().toISOString().slice(0, 10)}.sql`; run(`npx wrangler d1 export ${DB_NAME} ${remoteFlag} --output ${filename}`); break; default: console.error(`❌ Unknown command: ${command}`); process.exit(1); }