@pgsql/cli
Version:
Unified CLI for PostgreSQL AST parsing, deparsing, and code generation
49 lines (41 loc) • 1.88 kB
text/typescript
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);
}
}