@formatjs/intl
Version:
Internationalize JS apps. This library provides an API to format dates, numbers, and strings, including pluralization and handling translations.
64 lines (63 loc) • 2.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getFormatter = getFormatter;
exports.formatNumber = formatNumber;
exports.formatNumberToParts = formatNumberToParts;
var error_1 = require("./error");
var utils_1 = require("./utils");
var NUMBER_FORMAT_OPTIONS = [
'style',
'currency',
'unit',
'unitDisplay',
'useGrouping',
'minimumIntegerDigits',
'minimumFractionDigits',
'maximumFractionDigits',
'minimumSignificantDigits',
'maximumSignificantDigits',
// ES2020 NumberFormat
'compactDisplay',
'currencyDisplay',
'currencySign',
'notation',
'signDisplay',
'unit',
'unitDisplay',
'numberingSystem',
// ES2023 NumberFormat
'trailingZeroDisplay',
'roundingPriority',
'roundingIncrement',
'roundingMode',
];
function getFormatter(_a, getNumberFormat, options) {
var locale = _a.locale, formats = _a.formats, onError = _a.onError;
if (options === void 0) { options = {}; }
var format = options.format;
var defaults = ((format &&
(0, utils_1.getNamedFormat)(formats, 'number', format, onError)) ||
{});
var filteredOptions = (0, utils_1.filterProps)(options, NUMBER_FORMAT_OPTIONS, defaults);
return getNumberFormat(locale, filteredOptions);
}
function formatNumber(config, getNumberFormat, value, options) {
if (options === void 0) { options = {}; }
try {
return getFormatter(config, getNumberFormat, options).format(value);
}
catch (e) {
config.onError(new error_1.IntlFormatError('Error formatting number.', config.locale, e));
}
return String(value);
}
function formatNumberToParts(config, getNumberFormat, value, options) {
if (options === void 0) { options = {}; }
try {
return getFormatter(config, getNumberFormat, options).formatToParts(value);
}
catch (e) {
config.onError(new error_1.IntlFormatError('Error formatting number.', config.locale, e));
}
return [];
}