@v4fire/core
Version:
V4Fire core library
118 lines (117 loc) • 4.45 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _extend = _interopRequireDefault(require("../../../../core/prelude/extend"));
var _functools = require("../../../../core/functools");
var _i18n = require("../../../../core/prelude/i18n");
var _const = require("../../../../core/prelude/number/const");
var _helpers = require("../../../../core/prelude/number/helpers");
(0, _extend.default)(Number.prototype, 'pad', function pad(lengthOrOpts = 0, opts) {
opts = {
...(Object.isPlainObject(lengthOrOpts) ? lengthOrOpts : opts)
};
if (opts.length == null) {
opts.length = Object.isNumber(lengthOrOpts) ? lengthOrOpts : 0;
}
const val = Number(this);
let str = Math.abs(val).toString(opts.base ?? 10);
str = (0, _helpers.repeatString)('0', opts.length - str.replace(_const.decPartRgxp, '').length) + str;
if (opts.sign || val < 0) {
str = (val < 0 ? '-' : '+') + str;
}
return str;
});
(0, _extend.default)(Number, 'pad', (value, lengthOrOpts) => {
if (Object.isPlainObject(value)) {
const opts = value;
return value => Number.pad(value, opts);
}
return value.pad(Object.cast(lengthOrOpts));
});
(0, _extend.default)(Number.prototype, 'format', function format(patternOrOpts, locale = _i18n.locale.value) {
if (patternOrOpts === undefined && !_const.globalFormatOpts.init) {
return this.toLocaleString(locale);
}
if (Object.isPlainObject(patternOrOpts)) {
return this.toLocaleString(locale, patternOrOpts);
}
if (Object.isString(patternOrOpts)) {
const pattern = patternOrOpts,
cacheKey = [locale, pattern].join();
let formatter = _const.formatCache[cacheKey];
if (formatter == null) {
const chunks = pattern.split(';'),
opts = {};
for (let i = 0; i < chunks.length; i++) {
const formatChunk = chunks[i].trim();
let [formatKey, formatParams = null] = formatChunk.split(':');
formatKey = formatKey.trim();
if (formatParams != null) {
formatParams = formatParams.trim();
}
const alias = _const.formatAliases[formatKey];
if (alias != null) {
formatKey = alias;
switch (alias) {
case 'currency':
opts.style = 'currency';
opts.currency = formatParams ?? _const.defaultFormats.currency;
break;
case 'currencyDisplay':
opts.currencyDisplay = formatParams ?? _const.defaultFormats.currencyDisplay;
break;
case 'percent':
opts.style = 'percent';
break;
case 'decimal':
opts.style = 'decimal';
break;
default:
throw new TypeError(`Unknown alias "${alias}"`);
}
} else {
if (formatParams == null || formatParams === '') {
formatParams = _const.defaultFormats[formatKey];
}
if (formatParams != null) {
opts[formatKey] = formatParams in _const.boolAliases ? _const.boolAliases[formatParams] : formatParams;
}
}
}
formatter = new Intl.NumberFormat(locale, opts);
_const.formatCache[cacheKey] = formatter;
}
return formatter.format(this);
}
const decimalLength = Number(patternOrOpts);
const val = Number(this),
str = patternOrOpts != null ? val.toFixed(decimalLength) : val.toString();
const [int, dec = ''] = str.split('.');
let res = '';
for (let i = int.length - 1, j = 0; i >= 0; i--) {
if (j === 3) {
j = 0;
res = _const.globalFormatOpts.thousands + res;
}
j++;
res = int[i] + res;
}
if (dec.length > 0) {
return res + _const.globalFormatOpts.decimal + dec;
}
return res;
});
(0, _extend.default)(Number, 'format', (value, patternOrOpts, locale) => {
if (Object.isString(value) || Object.isPlainObject(value)) {
locale = Object.cast(patternOrOpts);
patternOrOpts = value;
return value => Number.format(value, Object.cast(patternOrOpts), locale);
}
return value.format(Object.cast(patternOrOpts), locale);
});
(0, _extend.default)(Number, 'getOption', (0, _functools.deprecate)(function getOption(key) {
return _const.globalFormatOpts[key];
}));
(0, _extend.default)(Number, 'setOption', (0, _functools.deprecate)(function setOption(key, value) {
_const.globalFormatOpts.init = true;
_const.globalFormatOpts[key] = value;
}));