UNPKG

hivessh

Version:

HiveSsh is an innovative library designed to streamline SSH2 connections and simplify task execution on Linux servers.

131 lines 14.7 kB
import { promises as afs } from "fs"; Object.typedKeys = Object.keys; Object.typedValues = Object.values; Object.typedEntries = Object.entries; export const getFileType = async (path) => { try { const stat = await afs.stat(path); if (stat.isFile()) { return "file"; } else if (stat.isDirectory()) { return "dir"; } } catch (err) { } return "none"; }; export function isOdd(value) { return (value % 2) === 1; } export async function pathType(path) { try { const stat = await afs.stat(path); if (stat.isFile()) { return "FILE"; } else if (stat.isDirectory()) { return "DIR"; } else { return "NONE"; } } catch (err) { if (err instanceof Error && err.errno === -2 && err.code === "ENOENT") { return "NONE"; } throw err; } } export function trimAll(value) { if (typeof value != "string") { throw new Error("Value is not a string"); } while (value.startsWith("\n") || value.startsWith("\t") || value.startsWith("'")) { value = value.slice(1); } while (value.endsWith("\n") || value.endsWith("\t") || value.endsWith("'")) { value = value.slice(0, -1); } return value; } export function filterEmpty(arr) { return arr .map(trimAll) .filter((v) => v.length != 0); } /** * * @param base Base reference object for the merge * @param overwrite Overwrite object that overwrites the values in the base object * @returns Merged object of both objects */ export function deepMergeObject(base, overwrite, cloneBase = true) { const ret = cloneObject(base); for (const key of Object.keys(overwrite)) { if (typeof base[key] == "object" && base[key] !== null && !Array.isArray(base[key])) { ret[key] = deepMergeObject(base[key], overwrite[key]); } else { ret[key] = overwrite[key]; } } return ret; } /** * * @param base Base object to clone * @returns Clone of the base object */ export function cloneObject(base) { const ret = {}; for (const key of Object.keys(base)) { if (typeof base[key] == "object" && base[key] !== null) { if (Array.isArray(base[key])) { ret[key] = cloneArray(base[key]); } else { ret[key] = cloneObject(base[key]); } } else { ret[key] = base[key]; } } return ret; } /** * * @param base Base array to clone * @returns Clone of the base array */ export function cloneArray(base) { const ret = []; for (const value of base) { if (typeof value == "object" && value !== null) { if (Array.isArray(value)) { ret.push(cloneArray(value)); } else { ret.push(cloneObject(value)); } } else { ret.push(value); } } return ret; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBMENwQyxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUE7QUFDOUIsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFBO0FBQ2xDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQTtBQUdwQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUM1QixJQUFZLEVBQ0ssRUFBRTtJQUNuQixJQUFJLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNoQixPQUFPLE1BQU0sQ0FBQTtRQUNqQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUM1QixPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxVQUFVLEtBQUssQ0FDakIsS0FBYTtJQUViLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzVCLENBQUM7QUFJRCxNQUFNLENBQUMsS0FBSyxVQUFVLFFBQVEsQ0FDMUIsSUFBWTtJQUVaLElBQUksQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVqQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxD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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvbWlzZXMgYXMgYWZzIH0gZnJvbSBcImZzXCJcblxuZXhwb3J0IHR5cGUgTm9JbmZlcjxUPiA9IFtUXVtUIGV4dGVuZHMgYW55ID8gMCA6IG5ldmVyXVxuXG5leHBvcnQgdHlwZSBCYXNlVHlwZSA9IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJiaWdpbnRcIiB8IFwiYm9vbGVhblwiIHwgXCJzeW1ib2xcIiB8IFwidW5kZWZpbmVkXCIgfCBcIm9iamVjdFwiIHwgXCJmdW5jdGlvblwiXG5cbmV4cG9ydCB0eXBlIEF3YWl0YWJsZTxUPiA9IFQgfCBQcm9taXNlPFQ+XG5cbmV4cG9ydCB0eXBlIEpzb25CYXNlVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkXG5leHBvcnQgdHlwZSBKc29uVHlwZSA9IEpzb25Ib2xkZXIgfCBKc29uQmFzZVR5cGVcbmV4cG9ydCB0eXBlIEpzb25Ib2xkZXIgPSBKc29uT2JqZWN0IHwgSnNvbkFycmF5XG5leHBvcnQgdHlwZSBKc29uQXJyYXkgPSBKc29uVHlwZVtdXG5leHBvcnQgaW50ZXJmYWNlIEpzb25PYmplY3Qge1xuICAgIFtrZXk6IHN0cmluZ106IEpzb25UeXBlXG59XG5cbmV4cG9ydCB0eXBlIE1hcE9iamVjdDxWLCBLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IHtcbiAgICBba2V5IGluIEtdOiBWXG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgT2JqZWN0Q29uc3RydWN0b3Ige1xuICAgICAgICB0eXBlZEtleXM8XG4gICAgICAgICAgICBPIGV4dGVuZHMgb2JqZWN0XG4gICAgICAgID4oXG4gICAgICAgICAgICBvOiBPXG4gICAgICAgICk6IChrZXlvZiBPKVtdXG5cbiAgICAgICAgdHlwZWRWYWx1ZXM8XG4gICAgICAgICAgICBPIGV4dGVuZHMgb2JqZWN0XG4gICAgICAgID4oXG4gICAgICAgICAgICBvOiBPXG4gICAgICAgICk6IE9ba2V5b2YgT11cblxuICAgICAgICB0eXBlZEVudHJpZXM8XG4gICAgICAgICAgICBPIGV4dGVuZHMgb2JqZWN0XG4gICAgICAgID4oXG4gICAgICAgICAgICBvOiBPXG4gICAgICAgICk6IFtrZXlvZiBPLCBPW2tleW9mIE9dXVtdXG4gICAgfVxufVxuXG5PYmplY3QudHlwZWRLZXlzID0gT2JqZWN0LmtleXNcbk9iamVjdC50eXBlZFZhbHVlcyA9IE9iamVjdC52YWx1ZXNcbk9iamVjdC50eXBlZEVudHJpZXMgPSBPYmplY3QuZW50cmllc1xuXG5leHBvcnQgdHlwZSBGaWxlVHlwZSA9IFwiZmlsZVwiIHwgXCJkaXJcIiB8IFwibm9uZVwiXG5leHBvcnQgY29uc3QgZ2V0RmlsZVR5cGUgPSBhc3luYyAoXG4gICAgcGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGFmcy5zdGF0KHBhdGgpXG4gICAgICAgIGlmIChzdGF0LmlzRmlsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJmaWxlXCJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBcImRpclwiXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICB9XG4gICAgcmV0dXJuIFwibm9uZVwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09kZChcbiAgICB2YWx1ZTogbnVtYmVyXG4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHZhbHVlICUgMikgPT09IDFcbn1cblxuZXhwb3J0IHR5cGUgUGF0aFR5cGUgPSBcIkRJUlwiIHwgXCJGSUxFXCIgfCBcIk5PTkVcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGF0aFR5cGUoXG4gICAgcGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTxQYXRoVHlwZT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBhZnMuc3RhdChwYXRoKVxuXG4gICAgICAgIGlmIChzdGF0LmlzRmlsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJGSUxFXCJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkRJUlwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXCJOT05FXCJcbiAgICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyOiBFcnJvciB8IGFueSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgICAgICAgKGVyciBhcyBhbnkpLmVycm5vID09PSAtMiAmJlxuICAgICAgICAgICAgKGVyciBhcyBhbnkpLmNvZGUgPT09IFwiRU5PRU5UXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJOT05FXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVyclxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1BbGwoXG4gICAgdmFsdWU6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmFsdWUgaXMgbm90IGEgc3RyaW5nXCIpXG4gICAgfVxuXG4gICAgd2hpbGUgKFxuICAgICAgICB2YWx1ZS5zdGFydHNXaXRoKFwiXFxuXCIpIHx8XG4gICAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoXCJcXHRcIikgfHxcbiAgICAgICAgdmFsdWUuc3RhcnRzV2l0aChcIidcIilcbiAgICApIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKVxuICAgIH1cblxuICAgIHdoaWxlIChcbiAgICAgICAgdmFsdWUuZW5kc1dpdGgoXCJcXG5cIikgfHxcbiAgICAgICAgdmFsdWUuZW5kc1dpdGgoXCJcXHRcIikgfHxcbiAgICAgICAgdmFsdWUuZW5kc1dpdGgoXCInXCIpXG4gICAgKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgLTEpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRW1wdHkoXG4gICAgYXJyOiBzdHJpbmdbXVxuKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhcnJcbiAgICAgICAgLm1hcCh0cmltQWxsKVxuICAgICAgICAuZmlsdGVyKCh2KSA9PiB2Lmxlbmd0aCAhPSAwKVxufVxuXG5cbi8qKlxuICogXG4gKiBAcGFyYW0gYmFzZSBCYXNlIHJlZmVyZW5jZSBvYmplY3QgZm9yIHRoZSBtZXJnZVxuICogQHBhcmFtIG92ZXJ3cml0ZSBPdmVyd3JpdGUgb2JqZWN0IHRoYXQgb3ZlcndyaXRlcyB0aGUgdmFsdWVzIGluIHRoZSBiYXNlIG9iamVjdFxuICogQHJldHVybnMgTWVyZ2VkIG9iamVjdCBvZiBib3RoIG9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNZXJnZU9iamVjdDxPMSBleHRlbmRzIE1hcE9iamVjdDxhbnk+LCBPMiBleHRlbmRzIE1hcE9iamVjdDxhbnk+PihcbiAgICBiYXNlOiBPMSxcbiAgICBvdmVyd3JpdGU6IE8yLFxuICAgIGNsb25lQmFzZTogYm9vbGVhbiA9IHRydWUsXG4pOiBPMSAmIE8yIHtcbiAgICBjb25zdCByZXQ6IE1hcE9iamVjdDxhbnk+ID0gY2xvbmVPYmplY3QoYmFzZSlcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG92ZXJ3cml0ZSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGJhc2Vba2V5XSA9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBiYXNlW2tleV0gIT09IG51bGwgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGJhc2Vba2V5XSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXRba2V5XSA9IGRlZXBNZXJnZU9iamVjdChcbiAgICAgICAgICAgICAgICBiYXNlW2tleV0sXG4gICAgICAgICAgICAgICAgb3ZlcndyaXRlW2tleV1cbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtrZXldID0gb3ZlcndyaXRlW2tleV1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQgYXMgYW55XG59XG5cbi8qKlxuICogXG4gKiBAcGFyYW0gYmFzZSBCYXNlIG9iamVjdCB0byBjbG9uZVxuICogQHJldHVybnMgQ2xvbmUgb2YgdGhlIGJhc2Ugb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZU9iamVjdDxPIGV4dGVuZHMgTWFwT2JqZWN0PGFueT4+KFxuICAgIGJhc2U6IE8sXG4pOiBPIHtcbiAgICBjb25zdCByZXQ6IE1hcE9iamVjdDxhbnk+ID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGJhc2UpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBiYXNlW2tleV0gPT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgYmFzZVtrZXldICE9PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmFzZVtrZXldKSkge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gY2xvbmVBcnJheShiYXNlW2tleV0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gY2xvbmVPYmplY3QoYmFzZVtrZXldKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0W2tleV0gPSBiYXNlW2tleV1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQgYXMgYW55XG59XG5cbi8qKlxuICogXG4gKiBAcGFyYW0gYmFzZSBCYXNlIGFycmF5IHRvIGNsb25lXG4gKiBAcmV0dXJucyBDbG9uZSBvZiB0aGUgYmFzZSBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVBcnJheTxBIGV4dGVuZHMgYW55W10+KFxuICAgIGJhc2U6IEEsXG4pOiBBIHtcbiAgICBjb25zdCByZXQ6IGFueVtdID0gW11cblxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYmFzZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgdmFsdWUgIT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXQucHVzaChjbG9uZUFycmF5KHZhbHVlKSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0LnB1c2goY2xvbmVPYmplY3QodmFsdWUpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0LnB1c2godmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0IGFzIGFueVxufSJdfQ==