@pgsql/cli
Version:
Unified CLI for PostgreSQL AST parsing, deparsing, and code generation
54 lines (53 loc) • 2.07 kB
JavaScript
import { PgProtoParser, getOptionsWithDefaults } from 'pg-proto-parser';
import o from 'nested-obj';
import chalk from 'chalk';
import { showHelp } from '../utils/help';
export async function protoGenCommand(argv) {
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 = 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) {
console.error(chalk.red('Proto generation error:'), error.message || error);
process.exit(1);
}
}