@conventional-changelog/git-client
Version:
Simple git client for conventional changelog packages.
113 lines • 5.96 kB
JavaScript
/* eslint-disable @typescript-eslint/no-misused-promises */
import { spawn as spawnChild } from 'child_process';
/**
* Catch process error.
* @param child
* @returns Process error.
*/
function catchProcessError(child) {
return new Promise((resolve) => {
let stderr = '';
let error = null;
child.stderr.on('data', (chunk) => {
stderr += chunk.toString();
});
child.on('error', (err) => {
error = err;
});
child.on('close', () => {
if (stderr) {
error = new Error(stderr);
}
resolve(error);
});
});
}
/**
* Spawn child process and return stdout stream.
* @param cmd
* @param args
* @param options
* @yields Stdout chunks.
*/
export async function* stdoutSpawn(cmd, args, options) {
const child = spawnChild(cmd, args, options);
const errorPromise = catchProcessError(child);
yield* child.stdout;
const error = await errorPromise;
if (error) {
throw error;
}
}
/**
* Spawn child process.
* @param cmd
* @param args
* @param options
* @returns Process output.
*/
export async function spawn(cmd, args, options) {
const stdout = stdoutSpawn(cmd, args, options);
let chunk;
const output = [];
for await (chunk of stdout) {
output.push(chunk);
}
return Buffer.concat(output);
}
/**
* Split stream by separator.
* @param stream
* @param separator
* @yields String chunks.
*/
export async function* splitStream(stream, separator) {
let chunk;
let payload;
let buffer = '';
for await (chunk of stream) {
buffer += chunk.toString();
if (buffer.includes(separator)) {
payload = buffer.split(separator);
buffer = payload.pop() || '';
yield* payload;
}
}
if (buffer) {
yield buffer;
}
}
/**
* Return first element of a stream
* @param stream
* @returns First element or null if empty
*/
export async function getFirstFromStream(stream) {
// eslint-disable-next-line no-unreachable-loop
for await (const tag of stream) {
return tag;
}
return null;
}
/**
* Format arguments.
* @param args
* @returns Formatted arguments.
*/
export function formatArgs(...args) {
return args.reduce((finalArgs, arg) => {
if (arg) {
finalArgs.push(String(arg));
}
return finalArgs;
}, []);
}
/**
* Convert value to array.
* @param value
* @returns Array.
*/
export function toArray(value) {
return Array.isArray(value) ? value : [value];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkRBQTJEO0FBQzNELE9BQU8sRUFHTCxLQUFLLElBQUksVUFBVSxFQUNwQixNQUFNLGVBQWUsQ0FBQTtBQUd0Qjs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxLQUFxQztJQUM5RCxPQUFPLElBQUksT0FBTyxDQUFlLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDM0MsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ2YsSUFBSSxLQUFLLEdBQWlCLElBQUksQ0FBQTtRQUU5QixLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFVLEVBQUUsRUFBRTtZQUMvQixLQUFLLEdBQUcsR0FBRyxDQUFBO1FBQ2IsQ0FBQyxDQUFDLENBQUE7UUFDRixLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDckIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2FBQzFCO1lBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2hCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQVcsRUFBRSxJQUFjLEVBQUUsT0FBa0M7SUFDaEcsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDNUMs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