UNPKG

@conventional-changelog/git-client

Version:
113 lines 5.96 kB
/* 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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