UNPKG

@pgsql/cli

Version:

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

49 lines (41 loc) 1.88 kB
import { PgProtoParser, PgProtoParserOptions, getOptionsWithDefaults } from 'pg-proto-parser'; import o from 'nested-obj'; import chalk from 'chalk'; import { showHelp } from '../utils/help'; export async function protoGenCommand(argv: any) { if (argv.help) { showHelp('proto-gen'); process.exit(0); } if (!argv.inFile || !argv.outDir) { console.error(chalk.red('Error: --inFile and --outDir are required')); showHelp('proto-gen'); process.exit(1); } try { const options: PgProtoParserOptions = getOptionsWithDefaults({ outDir: argv.outDir }); // Set options based on flags if (argv.enums) o.set(options, 'enums.enabled', true); if (argv['enums-json']) o.set(options, 'enums.json.enabled', true); if (argv.types) o.set(options, 'types.enabled', true); if (argv.utils) o.set(options, 'utils.enums.enabled', true); if (argv['ast-helpers']) o.set(options, 'utils.astHelpers.enabled', true); if (argv['wrapped-helpers']) o.set(options, 'utils.wrappedAstHelpers.enabled', true); if (argv.optional) o.set(options, 'types.optionalFields', true); if (argv['keep-case']) o.set(options, 'parser.keepCase', true); if (argv['remove-undefined']) o.set(options, 'enums.removeUndefinedAt0', true); // Additional options that might be useful if (argv['type-union']) o.set(options, 'enums.enumsAsTypeUnion', true); if (argv.header) o.set(options, 'includeHeader', true); console.log(chalk.blue('Parsing protobuf file...')); const parser = new PgProtoParser(argv.inFile, options); console.log(chalk.blue('Generating TypeScript files...')); await parser.write(); console.log(chalk.green(`✓ Files generated in ${argv.outDir}`)); } catch (error: any) { console.error(chalk.red('Proto generation error:'), error.message || error); process.exit(1); } }