UNPKG

@technobuddha/library

Version:
38 lines (37 loc) 1.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.metricUnits = void 0; var constants_1 = require("../constants"); var formatNumber_1 = require("../formatNumber"); var isNil_1 = __importDefault(require("lodash/isNil")); var round_1 = __importDefault(require("lodash/round")); /** * Abbreviate a number by adding a suffix for metric units (i.e. 1000 => 1K, .0001 = 1m) * * @param input The number to abbreviate * @param __namedParameters {@link MetricUnitOptions} */ function metricUnits(input, _a) { var _b = _a === void 0 ? {} : _a, format = _b.format, pad = _b.pad, _c = _b.macro, macro = _c === void 0 ? ['K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'] : _c, _d = _b.micro, micro = _d === void 0 ? ['m', 'µ', 'n', 'p', 'f', 'a', 'z', 'y'] : _d, _e = _b.unit, unit = _e === void 0 ? 1000 : _e, _f = _b.precision, precision = _f === void 0 ? 2 : _f; var number = Math.abs(input); var suffix = constants_1.empty; var index = 0; if (number < 1) { while ((number + Number.EPSILON) < 1 && index < micro.length) { suffix = micro[index++]; number = number * unit; } } else { while ((number + Number.EPSILON) >= unit && index < macro.length) { suffix = macro[index++]; number = number / unit; } } return (isNil_1.default(format) ? round_1.default(number, precision).toString() : formatNumber_1.formatNumber(round_1.default(number, precision), format)).padStart(pad !== null && pad !== void 0 ? pad : 0) + suffix; } exports.metricUnits = metricUnits; exports.default = metricUnits;