UNPKG

@pgsql/cli

Version:

Unified CLI for PostgreSQL AST parsing, deparsing, and code generation

75 lines (60 loc) 2.15 kB
import { PgProtoParser, PgProtoParserOptions, getOptionsWithDefaults } from 'pg-proto-parser'; import { writeFileSync } from 'fs'; import { join } from 'path'; import chalk from 'chalk'; import { showHelp } from '../utils/help'; export async function runtimeSchemaCommand(argv: any) { if (argv.help) { showHelp('runtime-schema'); process.exit(0); } if (!argv.inFile || !argv.outDir) { console.error(chalk.red('Error: --inFile and --outDir are required')); showHelp('runtime-schema'); process.exit(1); } const format = argv.format || 'json'; const filename = argv.filename || 'runtime-schema'; try { console.log(chalk.blue('Parsing protobuf file...')); const options: PgProtoParserOptions = getOptionsWithDefaults({ outDir: argv.outDir }); const parser = new PgProtoParser(argv.inFile, options); // Generate runtime schema console.log(chalk.blue(`Generating runtime schema in ${format} format...`)); console.log(chalk.yellow('Warning: Runtime schema generation is not yet fully implemented')); // Generate placeholder schema based on format let content: string; let fileExt: string; if (format === 'typescript') { // Generate TypeScript runtime schema placeholder content = `// Runtime schema for PostgreSQL AST nodes // Generated from: ${argv.inFile} export interface RuntimeSchema { // TODO: Implement runtime schema generation nodes: Record<string, any>; } export const runtimeSchema: RuntimeSchema = { nodes: {} }; `; fileExt = '.ts'; } else { // Generate JSON runtime schema placeholder content = JSON.stringify({ generated: new Date().toISOString(), source: argv.inFile, nodes: {} }, null, 2); fileExt = '.json'; } // Write file const outputPath = join(argv.outDir, `${filename}${fileExt}`); writeFileSync(outputPath, content); console.log(chalk.green(`✓ Runtime schema generated: ${outputPath}`)); } catch (error: any) { console.error(chalk.red('Runtime schema error:'), error.message || error); process.exit(1); } }