UNPKG

@oclif/core

Version:

base library for oclif CLIs

105 lines (104 loc) 2.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pickBy = pickBy; exports.compact = compact; exports.uniqBy = uniqBy; exports.last = last; exports.sortBy = sortBy; exports.castArray = castArray; exports.isProd = isProd; exports.maxBy = maxBy; exports.sumBy = sumBy; exports.capitalize = capitalize; exports.isTruthy = isTruthy; exports.isNotFalsy = isNotFalsy; exports.uniq = uniq; exports.mapValues = mapValues; exports.mergeNestedObjects = mergeNestedObjects; function pickBy(obj, fn) { return Object.entries(obj).reduce((o, [k, v]) => { if (fn(v)) o[k] = v; return o; }, {}); } function compact(a) { // eslint-disable-next-line unicorn/prefer-native-coercion-functions return a.filter((a) => Boolean(a)); } function uniqBy(arr, fn) { return arr.filter((a, i) => { const aVal = fn(a); return !arr.some((b, j) => j > i && fn(b) === aVal); }); } function last(arr) { if (!arr) return; return arr.at(-1); } 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))); } function castArray(input) { if (input === undefined) return []; return Array.isArray(input) ? input : [input]; } function isProd() { return !['development', 'test'].includes(process.env.NODE_ENV ?? ''); } function maxBy(arr, fn) { if (arr.length === 0) { return undefined; } return arr.reduce((maxItem, i) => { const curr = fn(i); const max = fn(maxItem); return curr > max ? i : maxItem; }); } function sumBy(arr, fn) { return arr.reduce((sum, i) => sum + fn(i), 0); } function capitalize(s) { return s ? s.charAt(0).toUpperCase() + s.slice(1).toLowerCase() : ''; } function isTruthy(input) { return ['1', 'true', 'y', 'yes'].includes(input.toLowerCase()); } function isNotFalsy(input) { return !['0', 'false', 'n', 'no'].includes(input.toLowerCase()); } function uniq(arr) { return [...new Set(arr)].sort(); } function mapValues(obj, fn) { return Object.entries(obj).reduce((o, [k, v]) => { o[k] = fn(v, k); return o; }, {}); } function get(obj, path) { return path.split('.').reduce((o, p) => o?.[p], obj); } function mergeNestedObjects(objs, path) { return Object.fromEntries(objs.flatMap((o) => Object.entries(get(o, path) ?? {})).reverse()); }