@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
40 lines (39 loc) • 1.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.icu = exports.default = void 0;
var _intlMessageformat = _interopRequireDefault(require("intl-messageformat"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const ICU_PATTERN = /\{[^}]+,\s*(?:plural|select|selectordinal|number|date|time)\b/;
const MAX_CACHE_SIZE = 1000;
const cache = new Map();
const icu = exports.icu = {
isICU(message) {
return ICU_PATTERN.test(message);
},
format(message, values, locale) {
const cacheKey = `${locale}::${message}`;
let formatter = cache.get(cacheKey);
if (!formatter) {
formatter = new _intlMessageformat.default(message, locale);
if (cache.size >= MAX_CACHE_SIZE) {
cache.delete(cache.keys().next().value);
}
cache.set(cacheKey, formatter);
}
const result = formatter.format(values);
if (typeof result === 'string') {
return result;
}
if (Array.isArray(result)) {
if (result.every(part => typeof part === 'string')) {
return result.join('');
}
return result;
}
return String(result);
}
};
var _default = exports.default = icu;
//# sourceMappingURL=icuFormatMessage.js.map