UNPKG

longcelot-sheet-db

Version:

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

48 lines 2.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createDatabaseAdapter = createDatabaseAdapter; const sheetAdapter_1 = require("./sheetAdapter"); const postgresAdapter_1 = require("./sql/postgresAdapter"); const mysqlAdapter_1 = require("./sql/mysqlAdapter"); const SchemaError_1 = require("../errors/SchemaError"); function sheetsConfigFromEnv() { const clientId = process.env.GOOGLE_CLIENT_ID; const clientSecret = process.env.GOOGLE_CLIENT_SECRET; const redirectUri = process.env.GOOGLE_REDIRECT_URI; const adminSheetId = process.env.ADMIN_SHEET_ID; if (!clientId || !clientSecret || !redirectUri || !adminSheetId) { throw new SchemaError_1.SchemaError("createDatabaseAdapter() with driver 'sheets' requires GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, " + 'GOOGLE_REDIRECT_URI, and ADMIN_SHEET_ID env vars (or pass `sheets: {...}` explicitly).'); } let tokens = {}; if (process.env.SHEETS_TOKENS_JSON) { try { tokens = JSON.parse(process.env.SHEETS_TOKENS_JSON); } catch { throw new SchemaError_1.SchemaError('SHEETS_TOKENS_JSON env var is not valid JSON.'); } } return { adminSheetId, credentials: { clientId, clientSecret, redirectUri }, tokens }; } /** * Single top-level factory: pick the storage engine via one config value (or one env var), not a * different import per environment. This is simultaneously Phase 16.2's "single top-level * factory" and Phase 16.7's "env-driven adapter selection" — a dev's `.env` points at * `DB_DRIVER=sheets`, a CI/CD pipeline's env points at `DB_DRIVER=postgres` (+ `$DATABASE_URL`), * with zero application code branching for those two tracks. */ function createDatabaseAdapter(config = {}) { const driver = config.driver ?? process.env.DB_DRIVER ?? 'sheets'; switch (driver) { case 'sheets': return (0, sheetAdapter_1.createSheetAdapter)(config.sheets ?? sheetsConfigFromEnv()); case 'postgres': return (0, postgresAdapter_1.createPostgresAdapter)(config.postgres ?? { connectionString: process.env.DATABASE_URL }); case 'mysql': return (0, mysqlAdapter_1.createMySQLAdapter)(config.mysql ?? { connectionString: process.env.DATABASE_URL }); default: throw new SchemaError_1.SchemaError(`Unknown DB_DRIVER '${String(driver)}'. Expected 'sheets' | 'postgres' | 'mysql'.`); } } //# sourceMappingURL=createDatabaseAdapter.js.map