owlcub-academy/node_modules/@formatjs/ecma402-abstract/lib/NumberFormat/CollapseNumberRange.js

51 lines
1.9 KiB
JavaScript

var PART_TYPES_TO_COLLAPSE = new Set([
'unit',
'exponentMinusSign',
'minusSign',
'plusSign',
'percentSign',
'exponentSeparator',
'percent',
'percentSign',
'currency',
'literal',
]);
/**
* https://tc39.es/ecma402/#sec-collapsenumberrange
* LDML: https://unicode-org.github.io/cldr/ldml/tr35-numbers.html#collapsing-number-ranges
*/
export function CollapseNumberRange(numberFormat, result, _a) {
var getInternalSlots = _a.getInternalSlots;
var internalSlots = getInternalSlots(numberFormat);
var symbols = internalSlots.dataLocaleData.numbers.symbols[internalSlots.numberingSystem];
var rangeSignRegex = new RegExp("s?[".concat(symbols.rangeSign, "]s?"));
var rangeSignIndex = result.findIndex(function (r) { return r.type === 'literal' && rangeSignRegex.test(r.value); });
var prefixSignParts = [];
for (var i = rangeSignIndex - 1; i >= 0; i--) {
if (!PART_TYPES_TO_COLLAPSE.has(result[i].type)) {
break;
}
prefixSignParts.unshift(result[i]);
}
// Don't collapse if it's a single code point
if (Array.from(prefixSignParts.map(function (p) { return p.value; }).join('')).length > 1) {
var newResult = Array.from(result);
newResult.splice(rangeSignIndex - prefixSignParts.length, prefixSignParts.length);
return newResult;
}
var suffixSignParts = [];
for (var i = rangeSignIndex + 1; i < result.length; i++) {
if (!PART_TYPES_TO_COLLAPSE.has(result[i].type)) {
break;
}
suffixSignParts.push(result[i]);
}
// Don't collapse if it's a single code point
if (Array.from(suffixSignParts.map(function (p) { return p.value; }).join('')).length > 1) {
var newResult = Array.from(result);
newResult.splice(rangeSignIndex + 1, suffixSignParts.length);
return newResult;
}
return result;
}