@formatjs/intl-numberformat 9.0.5 → 9.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -6
- package/polyfill.iife.js +180 -29
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@formatjs/intl-numberformat",
|
|
3
3
|
"description": "Ponyfill for ES2020 Intl.NumberFormat",
|
|
4
|
-
"version": "9.0.
|
|
4
|
+
"version": "9.0.7",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"types": "index.d.ts",
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"decimal.js": "^10.4.3",
|
|
17
17
|
"tslib": "^2.8.0",
|
|
18
|
-
"@formatjs/
|
|
19
|
-
"@formatjs/
|
|
18
|
+
"@formatjs/intl-localematcher": "0.7.3",
|
|
19
|
+
"@formatjs/ecma402-abstract": "3.0.5"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@formatjs/intl-
|
|
23
|
-
"@formatjs/intl-
|
|
24
|
-
"@formatjs/intl-
|
|
22
|
+
"@formatjs/intl-getcanonicallocales": "3.0.4",
|
|
23
|
+
"@formatjs/intl-locale": "5.0.6",
|
|
24
|
+
"@formatjs/intl-pluralrules": "6.0.6"
|
|
25
25
|
},
|
|
26
26
|
"bugs": "https://github.com/formatjs/formatjs/issues",
|
|
27
27
|
"contributors": [
|
package/polyfill.iife.js
CHANGED
|
@@ -2899,6 +2899,11 @@
|
|
|
2899
2899
|
return result;
|
|
2900
2900
|
}
|
|
2901
2901
|
|
|
2902
|
+
// node_modules/.aspect_rules_js/@formatjs+ecma402-abstract@0.0.0/node_modules/@formatjs/ecma402-abstract/NumberFormat/decimal-cache.js
|
|
2903
|
+
var getPowerOf10 = memoize(function(exponent) {
|
|
2904
|
+
return Decimal.pow(10, exponent);
|
|
2905
|
+
});
|
|
2906
|
+
|
|
2902
2907
|
// node_modules/.aspect_rules_js/@formatjs+ecma402-abstract@0.0.0/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.js
|
|
2903
2908
|
Decimal.set({
|
|
2904
2909
|
toExpPos: 100
|
|
@@ -2927,7 +2932,7 @@
|
|
|
2927
2932
|
if (!thresholdMap) {
|
|
2928
2933
|
return 0;
|
|
2929
2934
|
}
|
|
2930
|
-
var num =
|
|
2935
|
+
var num = getPowerOf10(magnitude).toString();
|
|
2931
2936
|
var thresholds = Object.keys(thresholdMap);
|
|
2932
2937
|
if (num < thresholds[0]) {
|
|
2933
2938
|
return 0;
|
|
@@ -2984,10 +2989,10 @@
|
|
|
2984
2989
|
toExpPos: 100
|
|
2985
2990
|
});
|
|
2986
2991
|
function ToRawFixedFn(n, f) {
|
|
2987
|
-
return n.times(
|
|
2992
|
+
return n.times(getPowerOf10(-f));
|
|
2988
2993
|
}
|
|
2989
2994
|
function findN1R1(x, f, roundingIncrement) {
|
|
2990
|
-
var nx = x.times(
|
|
2995
|
+
var nx = x.times(getPowerOf10(f)).floor();
|
|
2991
2996
|
var n1 = nx.div(roundingIncrement).floor().times(roundingIncrement);
|
|
2992
2997
|
var r1 = ToRawFixedFn(n1, f);
|
|
2993
2998
|
return {
|
|
@@ -2996,7 +3001,7 @@
|
|
|
2996
3001
|
};
|
|
2997
3002
|
}
|
|
2998
3003
|
function findN2R2(x, f, roundingIncrement) {
|
|
2999
|
-
var nx = x.times(
|
|
3004
|
+
var nx = x.times(getPowerOf10(f)).ceil();
|
|
3000
3005
|
var n2 = nx.div(roundingIncrement).ceil().times(roundingIncrement);
|
|
3001
3006
|
var r2 = ToRawFixedFn(n2, f);
|
|
3002
3007
|
return {
|
|
@@ -3056,14 +3061,34 @@
|
|
|
3056
3061
|
|
|
3057
3062
|
// node_modules/.aspect_rules_js/@formatjs+ecma402-abstract@0.0.0/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.js
|
|
3058
3063
|
function findN1E1R1(x, p) {
|
|
3059
|
-
var maxN1 =
|
|
3060
|
-
var minN1 =
|
|
3064
|
+
var maxN1 = getPowerOf10(p);
|
|
3065
|
+
var minN1 = getPowerOf10(p - 1);
|
|
3066
|
+
var log10x = x.log(10);
|
|
3067
|
+
var e1 = log10x.floor();
|
|
3068
|
+
var divisor = getPowerOf10(e1.minus(p).plus(1));
|
|
3069
|
+
var n1 = x.div(divisor).floor();
|
|
3070
|
+
var r1 = n1.times(divisor);
|
|
3071
|
+
if (n1.greaterThanOrEqualTo(maxN1)) {
|
|
3072
|
+
e1 = e1.plus(1);
|
|
3073
|
+
var newDivisor = getPowerOf10(e1.minus(p).plus(1));
|
|
3074
|
+
n1 = x.div(newDivisor).floor();
|
|
3075
|
+
r1 = n1.times(newDivisor);
|
|
3076
|
+
} else if (n1.lessThan(minN1)) {
|
|
3077
|
+
e1 = e1.minus(1);
|
|
3078
|
+
var newDivisor = getPowerOf10(e1.minus(p).plus(1));
|
|
3079
|
+
n1 = x.div(newDivisor).floor();
|
|
3080
|
+
r1 = n1.times(newDivisor);
|
|
3081
|
+
}
|
|
3082
|
+
if (r1.lessThanOrEqualTo(x) && n1.lessThan(maxN1) && n1.greaterThanOrEqualTo(minN1)) {
|
|
3083
|
+
return { n1, e1, r1 };
|
|
3084
|
+
}
|
|
3061
3085
|
var maxE1 = x.div(minN1).log(10).plus(p).minus(1).ceil();
|
|
3062
3086
|
var currentE1 = maxE1;
|
|
3063
3087
|
while (true) {
|
|
3064
|
-
var
|
|
3088
|
+
var currentDivisor = getPowerOf10(currentE1.minus(p).plus(1));
|
|
3089
|
+
var currentN1 = x.div(currentDivisor).floor();
|
|
3065
3090
|
if (currentN1.lessThan(maxN1) && currentN1.greaterThanOrEqualTo(minN1)) {
|
|
3066
|
-
var currentR1 = currentN1.times(
|
|
3091
|
+
var currentR1 = currentN1.times(currentDivisor);
|
|
3067
3092
|
if (currentR1.lessThanOrEqualTo(x)) {
|
|
3068
3093
|
return {
|
|
3069
3094
|
n1: currentN1,
|
|
@@ -3076,14 +3101,34 @@
|
|
|
3076
3101
|
}
|
|
3077
3102
|
}
|
|
3078
3103
|
function findN2E2R2(x, p) {
|
|
3079
|
-
var maxN2 =
|
|
3080
|
-
var minN2 =
|
|
3104
|
+
var maxN2 = getPowerOf10(p);
|
|
3105
|
+
var minN2 = getPowerOf10(p - 1);
|
|
3106
|
+
var log10x = x.log(10);
|
|
3107
|
+
var e2 = log10x.floor();
|
|
3108
|
+
var divisor = getPowerOf10(e2.minus(p).plus(1));
|
|
3109
|
+
var n2 = x.div(divisor).ceil();
|
|
3110
|
+
var r2 = n2.times(divisor);
|
|
3111
|
+
if (n2.greaterThanOrEqualTo(maxN2)) {
|
|
3112
|
+
e2 = e2.plus(1);
|
|
3113
|
+
var newDivisor = getPowerOf10(e2.minus(p).plus(1));
|
|
3114
|
+
n2 = x.div(newDivisor).ceil();
|
|
3115
|
+
r2 = n2.times(newDivisor);
|
|
3116
|
+
} else if (n2.lessThan(minN2)) {
|
|
3117
|
+
e2 = e2.minus(1);
|
|
3118
|
+
var newDivisor = getPowerOf10(e2.minus(p).plus(1));
|
|
3119
|
+
n2 = x.div(newDivisor).ceil();
|
|
3120
|
+
r2 = n2.times(newDivisor);
|
|
3121
|
+
}
|
|
3122
|
+
if (r2.greaterThanOrEqualTo(x) && n2.lessThan(maxN2) && n2.greaterThanOrEqualTo(minN2)) {
|
|
3123
|
+
return { n2, e2, r2 };
|
|
3124
|
+
}
|
|
3081
3125
|
var minE2 = x.div(maxN2).log(10).plus(p).minus(1).floor();
|
|
3082
3126
|
var currentE2 = minE2;
|
|
3083
3127
|
while (true) {
|
|
3084
|
-
var
|
|
3128
|
+
var currentDivisor = getPowerOf10(currentE2.minus(p).plus(1));
|
|
3129
|
+
var currentN2 = x.div(currentDivisor).ceil();
|
|
3085
3130
|
if (currentN2.lessThan(maxN2) && currentN2.greaterThanOrEqualTo(minN2)) {
|
|
3086
|
-
var currentR2 = currentN2.times(
|
|
3131
|
+
var currentR2 = currentN2.times(currentDivisor);
|
|
3087
3132
|
if (currentR2.greaterThanOrEqualTo(x)) {
|
|
3088
3133
|
return {
|
|
3089
3134
|
n2: currentN2,
|
|
@@ -3229,14 +3274,28 @@
|
|
|
3229
3274
|
if (x.isNegative()) {
|
|
3230
3275
|
x = x.negated();
|
|
3231
3276
|
}
|
|
3232
|
-
var
|
|
3277
|
+
var xNum = x.toNumber();
|
|
3278
|
+
var magnitude;
|
|
3279
|
+
if (Number.isFinite(xNum) && Number.isSafeInteger(xNum) && xNum > 0 && xNum <= 999999) {
|
|
3280
|
+
var magNum = Math.floor(Math.log10(xNum));
|
|
3281
|
+
magnitude = new Decimal(magNum);
|
|
3282
|
+
} else {
|
|
3283
|
+
magnitude = x.log(10).floor();
|
|
3284
|
+
}
|
|
3233
3285
|
var exponent = ComputeExponentForMagnitude(internalSlots, magnitude);
|
|
3234
|
-
x = x.times(
|
|
3286
|
+
x = x.times(getPowerOf10(-exponent));
|
|
3235
3287
|
var formatNumberResult = FormatNumericToString(internalSlots, x);
|
|
3236
3288
|
if (formatNumberResult.roundedNumber.isZero()) {
|
|
3237
3289
|
return [exponent, magnitude.toNumber()];
|
|
3238
3290
|
}
|
|
3239
|
-
var
|
|
3291
|
+
var roundedNum = formatNumberResult.roundedNumber.toNumber();
|
|
3292
|
+
var newMagnitude;
|
|
3293
|
+
if (Number.isFinite(roundedNum) && Number.isSafeInteger(roundedNum) && roundedNum > 0 && roundedNum <= 999999) {
|
|
3294
|
+
var newMagNum = Math.floor(Math.log10(roundedNum));
|
|
3295
|
+
newMagnitude = new Decimal(newMagNum);
|
|
3296
|
+
} else {
|
|
3297
|
+
newMagnitude = formatNumberResult.roundedNumber.log(10).floor();
|
|
3298
|
+
}
|
|
3240
3299
|
if (newMagnitude.eq(magnitude.minus(exponent))) {
|
|
3241
3300
|
return [exponent, magnitude.toNumber()];
|
|
3242
3301
|
}
|
|
@@ -4155,7 +4214,7 @@
|
|
|
4155
4214
|
var unitName = void 0;
|
|
4156
4215
|
var currencyNameData = data2.currencies[options.currency];
|
|
4157
4216
|
if (currencyNameData) {
|
|
4158
|
-
unitName = selectPlural(pl, numberResult.roundedNumber.times(
|
|
4217
|
+
unitName = selectPlural(pl, numberResult.roundedNumber.times(getPowerOf10(exponent)).toNumber(), currencyNameData.displayName);
|
|
4159
4218
|
} else {
|
|
4160
4219
|
unitName = options.currency;
|
|
4161
4220
|
}
|
|
@@ -4187,11 +4246,11 @@
|
|
|
4187
4246
|
var unitData = data2.units.simple[unit];
|
|
4188
4247
|
var unitPattern = void 0;
|
|
4189
4248
|
if (unitData) {
|
|
4190
|
-
unitPattern = selectPlural(pl, numberResult.roundedNumber.times(
|
|
4249
|
+
unitPattern = selectPlural(pl, numberResult.roundedNumber.times(getPowerOf10(exponent)).toNumber(), data2.units.simple[unit][unitDisplay]);
|
|
4191
4250
|
} else {
|
|
4192
4251
|
var _c = unit.split("-per-"), numeratorUnit = _c[0], denominatorUnit = _c[1];
|
|
4193
4252
|
unitData = data2.units.simple[numeratorUnit];
|
|
4194
|
-
var numeratorUnitPattern = selectPlural(pl, numberResult.roundedNumber.times(
|
|
4253
|
+
var numeratorUnitPattern = selectPlural(pl, numberResult.roundedNumber.times(getPowerOf10(exponent)).toNumber(), data2.units.simple[numeratorUnit][unitDisplay]);
|
|
4195
4254
|
var perUnitPattern = data2.units.simple[denominatorUnit].perUnit[unitDisplay];
|
|
4196
4255
|
if (perUnitPattern) {
|
|
4197
4256
|
unitPattern = perUnitPattern.replace("{0}", numeratorUnitPattern);
|
|
@@ -4382,7 +4441,7 @@
|
|
|
4382
4441
|
;
|
|
4383
4442
|
_a = ComputeExponent(internalSlots, x), exponent = _a[0], // IMPL: We need to record the magnitude of the number
|
|
4384
4443
|
magnitude = _a[1];
|
|
4385
|
-
x = x.times(
|
|
4444
|
+
x = x.times(getPowerOf10(-exponent));
|
|
4386
4445
|
}
|
|
4387
4446
|
var formatNumberResult = FormatNumericToString(internalSlots, x);
|
|
4388
4447
|
n = formatNumberResult.formattedString;
|
|
@@ -8557,7 +8616,7 @@
|
|
|
8557
8616
|
}
|
|
8558
8617
|
throw new Error("No matching distance found");
|
|
8559
8618
|
}
|
|
8560
|
-
function
|
|
8619
|
+
function findMatchingDistanceImpl(desired, supported) {
|
|
8561
8620
|
var desiredLocale = new Intl.Locale(desired).maximize();
|
|
8562
8621
|
var supportedLocale = new Intl.Locale(supported).maximize();
|
|
8563
8622
|
var desiredLSR = {
|
|
@@ -8599,7 +8658,26 @@
|
|
|
8599
8658
|
}
|
|
8600
8659
|
return matchingDistance;
|
|
8601
8660
|
}
|
|
8661
|
+
var findMatchingDistance = memoize(findMatchingDistanceImpl, {
|
|
8662
|
+
serializer: function(args) {
|
|
8663
|
+
return "".concat(args[0], "|").concat(args[1]);
|
|
8664
|
+
}
|
|
8665
|
+
});
|
|
8666
|
+
function getFallbackCandidates(locale) {
|
|
8667
|
+
var candidates = [];
|
|
8668
|
+
var current = locale;
|
|
8669
|
+
while (current) {
|
|
8670
|
+
candidates.push(current);
|
|
8671
|
+
var lastDash = current.lastIndexOf("-");
|
|
8672
|
+
if (lastDash === -1)
|
|
8673
|
+
break;
|
|
8674
|
+
current = current.substring(0, lastDash);
|
|
8675
|
+
}
|
|
8676
|
+
return candidates;
|
|
8677
|
+
}
|
|
8678
|
+
var canonicalizedSupportedCache = /* @__PURE__ */ new WeakMap();
|
|
8602
8679
|
function findBestMatch(requestedLocales, supportedLocales2, threshold) {
|
|
8680
|
+
var _a;
|
|
8603
8681
|
if (threshold === void 0) {
|
|
8604
8682
|
threshold = DEFAULT_MATCHING_THRESHOLD;
|
|
8605
8683
|
}
|
|
@@ -8608,17 +8686,84 @@
|
|
|
8608
8686
|
matchedDesiredLocale: "",
|
|
8609
8687
|
distances: {}
|
|
8610
8688
|
};
|
|
8611
|
-
|
|
8612
|
-
|
|
8613
|
-
|
|
8614
|
-
|
|
8615
|
-
|
|
8616
|
-
|
|
8617
|
-
|
|
8689
|
+
var canonicalizedSupportedLocales = canonicalizedSupportedCache.get(supportedLocales2);
|
|
8690
|
+
if (!canonicalizedSupportedLocales) {
|
|
8691
|
+
canonicalizedSupportedLocales = supportedLocales2.map(function(locale) {
|
|
8692
|
+
try {
|
|
8693
|
+
var canonical = Intl.getCanonicalLocales([locale]);
|
|
8694
|
+
return canonical[0] || locale;
|
|
8695
|
+
} catch (_a2) {
|
|
8696
|
+
return locale;
|
|
8697
|
+
}
|
|
8698
|
+
});
|
|
8699
|
+
canonicalizedSupportedCache.set(supportedLocales2, canonicalizedSupportedLocales);
|
|
8700
|
+
}
|
|
8701
|
+
var supportedSet = new Set(canonicalizedSupportedLocales);
|
|
8702
|
+
for (var i = 0; i < requestedLocales.length; i++) {
|
|
8703
|
+
var desired = requestedLocales[i];
|
|
8704
|
+
if (supportedSet.has(desired)) {
|
|
8705
|
+
var distance = 0 + i * 40;
|
|
8706
|
+
result.distances[desired] = (_a = {}, _a[desired] = distance, _a);
|
|
8618
8707
|
if (distance < lowestDistance) {
|
|
8619
8708
|
lowestDistance = distance;
|
|
8620
8709
|
result.matchedDesiredLocale = desired;
|
|
8621
|
-
result.matchedSupportedLocale =
|
|
8710
|
+
result.matchedSupportedLocale = desired;
|
|
8711
|
+
}
|
|
8712
|
+
if (i === 0) {
|
|
8713
|
+
return result;
|
|
8714
|
+
}
|
|
8715
|
+
}
|
|
8716
|
+
}
|
|
8717
|
+
for (var i = 0; i < requestedLocales.length; i++) {
|
|
8718
|
+
var desired = requestedLocales[i];
|
|
8719
|
+
try {
|
|
8720
|
+
var maximized = new Intl.Locale(desired).maximize().toString();
|
|
8721
|
+
if (maximized !== desired) {
|
|
8722
|
+
var maximizedCandidates = getFallbackCandidates(maximized);
|
|
8723
|
+
for (var j = 0; j < maximizedCandidates.length; j++) {
|
|
8724
|
+
var candidate = maximizedCandidates[j];
|
|
8725
|
+
if (candidate === desired)
|
|
8726
|
+
continue;
|
|
8727
|
+
if (supportedSet.has(candidate)) {
|
|
8728
|
+
var distance = void 0;
|
|
8729
|
+
try {
|
|
8730
|
+
var candidateMaximized = new Intl.Locale(candidate).maximize().toString();
|
|
8731
|
+
distance = candidateMaximized === maximized ? 0 + i * 40 : j * 10 + i * 40;
|
|
8732
|
+
} catch (_b) {
|
|
8733
|
+
distance = j * 10 + i * 40;
|
|
8734
|
+
}
|
|
8735
|
+
if (!result.distances[desired]) {
|
|
8736
|
+
result.distances[desired] = {};
|
|
8737
|
+
}
|
|
8738
|
+
result.distances[desired][candidate] = distance;
|
|
8739
|
+
if (distance < lowestDistance) {
|
|
8740
|
+
lowestDistance = distance;
|
|
8741
|
+
result.matchedDesiredLocale = desired;
|
|
8742
|
+
result.matchedSupportedLocale = candidate;
|
|
8743
|
+
}
|
|
8744
|
+
break;
|
|
8745
|
+
}
|
|
8746
|
+
}
|
|
8747
|
+
}
|
|
8748
|
+
} catch (_c) {
|
|
8749
|
+
}
|
|
8750
|
+
}
|
|
8751
|
+
if (result.matchedSupportedLocale && lowestDistance === 0) {
|
|
8752
|
+
return result;
|
|
8753
|
+
}
|
|
8754
|
+
requestedLocales.forEach(function(desired2, i2) {
|
|
8755
|
+
if (!result.distances[desired2]) {
|
|
8756
|
+
result.distances[desired2] = {};
|
|
8757
|
+
}
|
|
8758
|
+
canonicalizedSupportedLocales.forEach(function(canonicalLocale, supportedIndex) {
|
|
8759
|
+
var originalSupported = supportedLocales2[supportedIndex];
|
|
8760
|
+
var distance2 = findMatchingDistance(desired2, canonicalLocale);
|
|
8761
|
+
var finalDistance = distance2 + 0 + i2 * 40;
|
|
8762
|
+
result.distances[desired2][originalSupported] = finalDistance;
|
|
8763
|
+
if (finalDistance < lowestDistance) {
|
|
8764
|
+
lowestDistance = finalDistance;
|
|
8765
|
+
result.matchedDesiredLocale = desired2;
|
|
8766
|
+
result.matchedSupportedLocale = originalSupported;
|
|
8622
8767
|
}
|
|
8623
8768
|
});
|
|
8624
8769
|
});
|
|
@@ -8699,10 +8844,16 @@
|
|
|
8699
8844
|
}
|
|
8700
8845
|
|
|
8701
8846
|
// node_modules/.aspect_rules_js/@formatjs+intl-localematcher@0.0.0/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.js
|
|
8847
|
+
var availableLocalesSetCache = /* @__PURE__ */ new WeakMap();
|
|
8702
8848
|
function BestAvailableLocale(availableLocales, locale) {
|
|
8849
|
+
var availableSet = availableLocalesSetCache.get(availableLocales);
|
|
8850
|
+
if (!availableSet) {
|
|
8851
|
+
availableSet = new Set(availableLocales);
|
|
8852
|
+
availableLocalesSetCache.set(availableLocales, availableSet);
|
|
8853
|
+
}
|
|
8703
8854
|
var candidate = locale;
|
|
8704
8855
|
while (true) {
|
|
8705
|
-
if (
|
|
8856
|
+
if (availableSet.has(candidate)) {
|
|
8706
8857
|
return candidate;
|
|
8707
8858
|
}
|
|
8708
8859
|
var pos = candidate.lastIndexOf("-");
|