UNPKG

longcelot-sheet-db

Version:

Google Sheets-backed staging database adapter for Node.js with schema-first design

117 lines 5.31 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.statusCommand = statusCommand; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const chalk_1 = __importDefault(require("chalk")); const actorConfig_1 = require("../../utils/actorConfig"); const cliFiles_1 = require("../../utils/cliFiles"); async function statusCommand() { console.log(chalk_1.default.blue.bold('📊 LSDB Project Status\n')); require('dotenv').config(); // Load config let config; try { config = require((0, cliFiles_1.resolveConfigPath)()).default; } catch { console.error(chalk_1.default.red('❌ lsdb.config.ts not found. Run: lsdb init')); process.exit(1); } // Project info console.log(chalk_1.default.bold('Project')); console.log(` Name: ${config.projectName || chalk_1.default.gray('(not set)')}`); const actorRoles = (config.actors ?? []).map((a) => (0, actorConfig_1.resolveActorName)(a)); console.log(` Actors: ${actorRoles.join(', ') || chalk_1.default.gray('(none)')}`); console.log(); // Environment console.log(chalk_1.default.bold('Environment')); const baseEnvVars = [ ['GOOGLE_CLIENT_ID', process.env.GOOGLE_CLIENT_ID ? '(set)' : undefined], ['GOOGLE_CLIENT_SECRET', process.env.GOOGLE_CLIENT_SECRET ? '(set)' : undefined], ['GOOGLE_REDIRECT_URI', process.env.GOOGLE_REDIRECT_URI], ]; // Show sheet ID env vars per actor const actorSheetEnvVars = (config.actors ?? []).map((a) => { const envKey = typeof a === 'string' ? (a === 'admin' ? 'ADMIN_SHEET_ID' : `DEV_${a.toUpperCase()}_SHEET_ID`) : (a.sheetIdEnv ?? 'ADMIN_SHEET_ID'); return [envKey, process.env[envKey]]; }); const envVars = [...actorSheetEnvVars, ...baseEnvVars]; for (const [name, value] of envVars) { const display = value ? chalk_1.default.green(value) : chalk_1.default.red('(missing)'); console.log(` ${name}: ${display}`); } console.log(); // OAuth tokens const tokensPath = (0, cliFiles_1.resolveTokensPath)(); console.log(chalk_1.default.bold('OAuth Tokens')); if (fs_1.default.existsSync(tokensPath)) { try { const tokens = JSON.parse(fs_1.default.readFileSync(tokensPath, 'utf-8')); const expired = tokens.expiry_date ? Date.now() > tokens.expiry_date : false; const expiresAt = tokens.expiry_date ? new Date(tokens.expiry_date).toLocaleString() : 'unknown'; console.log(` Status: ${expired ? chalk_1.default.yellow('expired (will auto-refresh)') : chalk_1.default.green('valid')}`); console.log(` Access expires: ${expiresAt}`); console.log(` Refresh token: ${tokens.refresh_token ? chalk_1.default.green('present') : chalk_1.default.red('missing')}`); } catch { console.log(` ${chalk_1.default.red('⚠ Token file could not be parsed')}`); } } else { console.log(` ${chalk_1.default.yellow('No tokens found — run: lsdb sync')}`); } console.log(); // Schemas by actor const schemasDir = path_1.default.join(process.cwd(), 'schemas'); if (!fs_1.default.existsSync(schemasDir)) { console.log(chalk_1.default.yellow('No schemas/ directory found. Run: lsdb init')); return; } const schemasByActor = {}; let totalSchemas = 0; for (const actorEntry of (config.actors || [])) { const actor = (0, actorConfig_1.resolveActorName)(actorEntry); const actorDir = path_1.default.join(schemasDir, actor); schemasByActor[actor] = []; if (!fs_1.default.existsSync(actorDir)) continue; const files = fs_1.default.readdirSync(actorDir).filter((f) => f.endsWith('.ts')); for (const file of files) { try { const schema = require(path_1.default.join(actorDir, file)).default; schemasByActor[actor].push(schema); totalSchemas++; } catch { // Skip unloadable schemas } } } console.log(chalk_1.default.bold(`Tables (${totalSchemas} total)`)); for (const [actor, schemas] of Object.entries(schemasByActor)) { if (schemas.length === 0) { console.log(`\n ${chalk_1.default.cyan(actor)} ${chalk_1.default.gray('(no schemas)')}`); continue; } console.log(`\n ${chalk_1.default.cyan.bold(actor)}`); for (const schema of schemas) { const columnCount = Object.keys(schema.columns).length; const flags = [ schema.timestamps ? 'timestamps' : '', schema.softDelete ? 'softDelete' : '', ].filter(Boolean).join(', '); console.log(` ${chalk_1.default.white(schema.name.padEnd(30))} ${chalk_1.default.gray(`${columnCount} columns`)}` + (flags ? chalk_1.default.gray(` [${flags}]`) : '')); } } console.log(); } //# sourceMappingURL=status.js.map