UNPKG

@pgsql/cli

Version:

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

74 lines (73 loc) 3.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.replaceTextInProtoJS = exports.generateProtoJS = exports.downloadProtoFile = void 0; const https_1 = __importDefault(require("https")); const fs_1 = __importDefault(require("fs")); const child_process_1 = require("child_process"); const mkdirp_1 = require("mkdirp"); const path_1 = require("path"); // Download .proto file if URL const downloadProtoFile = (protoUrl, filePath) => { (0, mkdirp_1.sync)((0, path_1.dirname)(filePath)); return new Promise((resolve, reject) => { https_1.default.get(protoUrl, (response) => { if (response.statusCode !== 200) { console.error(`Failed to download file: Status Code: ${response.statusCode}`); response.resume(); // consume response data to free up memory reject(new Error('Failed to download file')); return; } const fileStream = fs_1.default.createWriteStream(filePath); response.pipe(fileStream); fileStream.on('finish', () => { fileStream.close(); console.log('Downloaded proto file.'); resolve(); }); }).on('error', (err) => { console.error(`Error downloading the file: ${err.message}`); fs_1.default.unlink(filePath, () => { }); // Delete the file async. (No need to check error here) reject(err); }); }); }; exports.downloadProtoFile = downloadProtoFile; // Generate JavaScript from proto file using pbjs const generateProtoJS = (inFile, outFile) => new Promise((resolve, reject) => { const command = `pbjs --keep-case -t static-module -o ${outFile} ${inFile}`; (0, mkdirp_1.sync)((0, path_1.dirname)(outFile)); (0, child_process_1.exec)(command, (error, _stdout, _stderr) => { if (error) { console.error(`Error during code generation: ${error.message}`); reject(error); return; } console.log('Generated proto.js from proto file.'); resolve(); }); }); exports.generateProtoJS = generateProtoJS; // Replace text in generated JS file const replaceTextInProtoJS = (filePath, originalPackage, newPackage) => new Promise((resolve, reject) => { fs_1.default.readFile(filePath, 'utf8', (err, data) => { if (err) { console.error(`Error reading proto.js: ${err.message}`); reject(err); return; } const result = data.replace(new RegExp(originalPackage, 'g'), newPackage); fs_1.default.writeFile(filePath, result, 'utf8', (err) => { if (err) { console.error(`Error writing back to proto.js: ${err.message}`); reject(err); return; } console.log('Replaced text in proto.js successfully.'); resolve(); }); }); }); exports.replaceTextInProtoJS = replaceTextInProtoJS;