@gitlab/ui
Version:
GitLab UI Components
94 lines (82 loc) • 2.41 kB
JavaScript
/**
* Adds two numbers together
* @param {Number} a
* @param {Number} b
*/
var addition = function addition(a, b) {
return a + b;
};
/**
* Returns the sum of all arguments
* @param {...Number} numbers
*/
var sum = function sum() {
for (var _len = arguments.length, numbers = new Array(_len), _key = 0; _key < _len; _key++) {
numbers[_key] = arguments[_key];
}
return numbers.reduce(addition);
};
/**
* Returns the average of all arguments
* @param {...Number} numbers
*/
var average = function average() {
return sum.apply(void 0, arguments) / arguments.length;
};
/**
* Returns a function that checks wether its argument is an integer greater than gt
* @param {Number} gt number to be compared against
*/
var isIntGreaterThan = function isIntGreaterThan(gt) {
return function (number) {
return Number.isInteger(number) && number > gt;
};
};
/**
* Convert number to engineering format, using SI suffix
* @param {Number} num
* @param {Number} precision
* @return {String} number, possibly with a suffix
*/
var engineeringNotation = function engineeringNotation(num) {
var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
var invalidValues = [NaN, Infinity, -Infinity];
if (invalidValues.includes(Number(num)) || invalidValues.includes(Number(precision))) {
return num.toString();
}
var allYourBase = {
'-24': 'y',
'-21': 'z',
'-18': 'a',
'-15': 'f',
'-12': 'p',
'-9': 'n',
'-6': 'μ',
'-3': 'm',
'0': '',
'3': 'k',
'6': 'M',
'9': 'G',
'12': 'T',
'15': 'P',
'18': 'E',
'21': 'Z',
'24': 'Y'
};
var exponentialNotation = num.toExponential(precision);
var power = exponentialNotation.split('e').map(Number)[1] || 0;
if (power < -24 || power > 24) {
return exponentialNotation;
}
var scaledPower = 3 * Math.floor(power / 3);
var scaledMantissa = (exponentialNotation / Math.pow(10, scaledPower)). // strip trailing decimals from floating point rounding errors
toFixed(precision) // strip trailing 0s after a decimal point
.replace(/\.([1-9]*)0+$/, function (_, fractionalDigits) {
if (fractionalDigits) {
return ".".concat(fractionalDigits);
}
return '';
});
return "".concat(scaledMantissa).concat(allYourBase[scaledPower]);
};
export { addition, average, engineeringNotation, isIntGreaterThan, sum };