oclif
Version:
oclif: create your own CLI
161 lines (160 loc) • 5.55 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.hash = exports.prettifyPaths = exports.sortVersionsObjectByKeysDesc = void 0;
exports.castArray = castArray;
exports.uniqBy = uniqBy;
exports.compact = compact;
exports.uniq = uniq;
exports.sortBy = sortBy;
exports.checkFor7Zip = checkFor7Zip;
exports.isEmpty = isEmpty;
exports.validateBin = validateBin;
exports.isS3Compatible = isS3Compatible;
exports.getS3ChecksumConfig = getS3ChecksumConfig;
const core_1 = require("@oclif/core");
const node_child_process_1 = require("node:child_process");
const crypto = __importStar(require("node:crypto"));
const node_fs_1 = require("node:fs");
const os = __importStar(require("node:os"));
const node_util_1 = require("node:util");
const log_1 = require("./log");
const exec = (0, node_util_1.promisify)(node_child_process_1.exec);
function castArray(input) {
if (input === undefined)
return [];
return Array.isArray(input) ? input : [input];
}
function uniqBy(arr, fn) {
return arr.filter((a, i) => {
const aVal = fn(a);
return !arr.some((b, j) => j > i && fn(b) === aVal);
});
}
function compact(a) {
// eslint-disable-next-line unicorn/prefer-native-coercion-functions
return a.filter((a) => Boolean(a));
}
function uniq(arr) {
return [...new Set(arr)];
}
function compare(a, b) {
a = a === undefined ? 0 : a;
b = b === undefined ? 0 : b;
if (Array.isArray(a) && Array.isArray(b)) {
if (a.length === 0 && b.length === 0)
return 0;
const diff = compare(a[0], b[0]);
if (diff !== 0)
return diff;
return compare(a.slice(1), b.slice(1));
}
if (a < b)
return -1;
if (a > b)
return 1;
return 0;
}
function sortBy(arr, fn) {
return arr.sort((a, b) => compare(fn(a), fn(b)));
}
const sortVersionsObjectByKeysDesc = (input) => {
const keys = Reflect.ownKeys(input).sort((a, b) => {
const splitA = a.split('.').map((part) => Number.parseInt(part, 10));
const splitB = b.split('.').map((part) => Number.parseInt(part, 10));
// sort by major
if (splitA[0] < splitB[0])
return 1;
if (splitA[0] > splitB[0])
return -1;
// sort by minor
if (splitA[1] < splitB[1])
return 1;
if (splitA[1] > splitB[1])
return -1;
// sort by patch
if (splitA[2] < splitB[2])
return 1;
if (splitA[2] > splitB[2])
return -1;
return 0;
});
const result = {};
for (const key of keys) {
result[key] = input[key];
}
return result;
};
exports.sortVersionsObjectByKeysDesc = sortVersionsObjectByKeysDesc;
const homeRegexp = new RegExp(`\\B${os.homedir().replace('/', String.raw `\/`)}`, 'g');
const curRegexp = new RegExp(`\\B${process.cwd()}`, 'g');
const prettifyPaths = (input) => (input ?? '').toString().replace(curRegexp, '.').replace(homeRegexp, '~');
exports.prettifyPaths = prettifyPaths;
const hash = async (algo, fp) => {
const f = Array.isArray(fp) ? fp.join('') : fp;
(0, log_1.log)('hash', algo, f);
return new Promise((resolve, reject) => {
const hashInProgress = crypto.createHash(algo);
const stream = (0, node_fs_1.createReadStream)(f);
stream.on('error', (err) => reject(err));
stream.on('data', (chunk) => hashInProgress.update(chunk));
stream.on('end', () => resolve(hashInProgress.digest('hex')));
});
};
exports.hash = hash;
async function checkFor7Zip() {
try {
await exec('7z');
}
catch (error) {
const { code } = error;
if (code === 127)
core_1.Errors.error('install 7-zip to package windows tarball');
else
throw error;
}
}
function isEmpty(obj) {
return Object.keys(obj).length === 0;
}
function validateBin(bin) {
return /^[\w-]+$/.test(bin);
}
function isS3Compatible(endpoint) {
return Boolean(endpoint && !endpoint.includes('amazonaws.com'));
}
function getS3ChecksumConfig(endpoint, envValue) {
return envValue || (isS3Compatible(endpoint) ? 'WHEN_REQUIRED' : undefined);
}