UNPKG

longcelot-sheet-db

Version:

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

123 lines (122 loc) • 4.15 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateCommand = generateCommand; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const inquirer_1 = __importDefault(require("inquirer")); const chalk_1 = __importDefault(require("chalk")); const actorConfig_1 = require("../../utils/actorConfig"); const cliFiles_1 = require("../../utils/cliFiles"); async function generateCommand(tableName) { console.log(chalk_1.default.blue.bold(`šŸ“ Generating table schema: ${tableName}\n`)); 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); } const answers = await inquirer_1.default.prompt([ { type: 'list', name: 'actor', message: 'Which actor owns this table?', choices: config.actors.map((a) => (0, actorConfig_1.resolveActorName)(a)), }, { type: 'confirm', name: 'timestamps', message: 'Add timestamps (_created_at, _updated_at)?', default: true, }, { type: 'confirm', name: 'softDelete', message: 'Enable soft delete (_deleted_at)?', default: false, }, ]); const columns = []; let addMore = true; while (addMore) { const column = await inquirer_1.default.prompt([ { type: 'input', name: 'name', message: 'Column name (or press Enter to finish):', }, ]); if (!column.name) { addMore = false; continue; } const columnDetails = await inquirer_1.default.prompt([ { type: 'list', name: 'type', message: `Type for ${column.name}:`, choices: ['string', 'number', 'boolean', 'date', 'json'], }, { type: 'confirm', name: 'required', message: 'Required?', default: false, }, { type: 'confirm', name: 'unique', message: 'Unique?', default: false, }, { type: 'input', name: 'defaultValue', message: 'Default value (leave empty for none):', }, ]); columns.push({ name: column.name, ...columnDetails, }); } const columnsCode = columns .map((col) => { let line = ` ${col.name}: ${col.type}()`; if (col.required) line += '.required()'; if (col.unique) line += '.unique()'; if (col.defaultValue) { const value = col.type === 'string' ? `"${col.defaultValue}"` : col.defaultValue; line += `.default(${value})`; } line += ','; return line; }) .join('\n'); const schemaContent = `import { defineTable, string, number, boolean, date, json } from 'longcelot-sheet-db'; export default defineTable({ name: '${tableName}', actor: '${answers.actor}', timestamps: ${answers.timestamps}, softDelete: ${answers.softDelete}, columns: { ${columnsCode} }, }); `; const actorDir = path_1.default.join(process.cwd(), 'schemas', answers.actor); if (!fs_1.default.existsSync(actorDir)) { fs_1.default.mkdirSync(actorDir, { recursive: true }); } const filePath = path_1.default.join(actorDir, `${tableName}.ts`); fs_1.default.writeFileSync(filePath, schemaContent); console.log(chalk_1.default.green(`\nāœ… Schema created: ${filePath}`)); console.log(chalk_1.default.cyan('\nNext: Run "lsdb sync" to create the sheet\n')); } //# sourceMappingURL=generate.js.map