@formatjs/intl-pluralrules 6.0.4 → 6.0.6
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 +5 -5
- package/polyfill.iife.js +158 -21
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@formatjs/intl-pluralrules",
|
|
3
3
|
"description": "Polyfill for Intl.PluralRules",
|
|
4
|
-
"version": "6.0.
|
|
4
|
+
"version": "6.0.6",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Long Ho <holevietlong@gmail.com>",
|
|
7
7
|
"type": "module",
|
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"decimal.js": "^10.4.3",
|
|
18
18
|
"tslib": "^2.8.0",
|
|
19
|
-
"@formatjs/
|
|
20
|
-
"@formatjs/
|
|
19
|
+
"@formatjs/ecma402-abstract": "3.0.5",
|
|
20
|
+
"@formatjs/intl-localematcher": "0.7.3"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@formatjs/intl-locale": "5.0.
|
|
24
|
-
"@formatjs/intl-getcanonicallocales": "3.0.
|
|
23
|
+
"@formatjs/intl-locale": "5.0.6",
|
|
24
|
+
"@formatjs/intl-getcanonicallocales": "3.0.4"
|
|
25
25
|
},
|
|
26
26
|
"bugs": "https://github.com/formatjs/formatjs/issues",
|
|
27
27
|
"gitHead": "a7842673d8ad205171ad7c8cb8bb2f318b427c0c",
|
package/polyfill.iife.js
CHANGED
|
@@ -2808,6 +2808,11 @@
|
|
|
2808
2808
|
return r2;
|
|
2809
2809
|
}
|
|
2810
2810
|
|
|
2811
|
+
// node_modules/.aspect_rules_js/@formatjs+ecma402-abstract@0.0.0/node_modules/@formatjs/ecma402-abstract/NumberFormat/decimal-cache.js
|
|
2812
|
+
var getPowerOf10 = memoize(function(exponent) {
|
|
2813
|
+
return Decimal.pow(10, exponent);
|
|
2814
|
+
});
|
|
2815
|
+
|
|
2811
2816
|
// node_modules/.aspect_rules_js/@formatjs+ecma402-abstract@0.0.0/node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.js
|
|
2812
2817
|
Decimal.set({
|
|
2813
2818
|
toExpPos: 100
|
|
@@ -2848,10 +2853,10 @@
|
|
|
2848
2853
|
toExpPos: 100
|
|
2849
2854
|
});
|
|
2850
2855
|
function ToRawFixedFn(n, f) {
|
|
2851
|
-
return n.times(
|
|
2856
|
+
return n.times(getPowerOf10(-f));
|
|
2852
2857
|
}
|
|
2853
2858
|
function findN1R1(x, f, roundingIncrement) {
|
|
2854
|
-
var nx = x.times(
|
|
2859
|
+
var nx = x.times(getPowerOf10(f)).floor();
|
|
2855
2860
|
var n1 = nx.div(roundingIncrement).floor().times(roundingIncrement);
|
|
2856
2861
|
var r1 = ToRawFixedFn(n1, f);
|
|
2857
2862
|
return {
|
|
@@ -2860,7 +2865,7 @@
|
|
|
2860
2865
|
};
|
|
2861
2866
|
}
|
|
2862
2867
|
function findN2R2(x, f, roundingIncrement) {
|
|
2863
|
-
var nx = x.times(
|
|
2868
|
+
var nx = x.times(getPowerOf10(f)).ceil();
|
|
2864
2869
|
var n2 = nx.div(roundingIncrement).ceil().times(roundingIncrement);
|
|
2865
2870
|
var r2 = ToRawFixedFn(n2, f);
|
|
2866
2871
|
return {
|
|
@@ -2920,14 +2925,34 @@
|
|
|
2920
2925
|
|
|
2921
2926
|
// node_modules/.aspect_rules_js/@formatjs+ecma402-abstract@0.0.0/node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.js
|
|
2922
2927
|
function findN1E1R1(x, p) {
|
|
2923
|
-
var maxN1 =
|
|
2924
|
-
var minN1 =
|
|
2928
|
+
var maxN1 = getPowerOf10(p);
|
|
2929
|
+
var minN1 = getPowerOf10(p - 1);
|
|
2930
|
+
var log10x = x.log(10);
|
|
2931
|
+
var e1 = log10x.floor();
|
|
2932
|
+
var divisor = getPowerOf10(e1.minus(p).plus(1));
|
|
2933
|
+
var n1 = x.div(divisor).floor();
|
|
2934
|
+
var r1 = n1.times(divisor);
|
|
2935
|
+
if (n1.greaterThanOrEqualTo(maxN1)) {
|
|
2936
|
+
e1 = e1.plus(1);
|
|
2937
|
+
var newDivisor = getPowerOf10(e1.minus(p).plus(1));
|
|
2938
|
+
n1 = x.div(newDivisor).floor();
|
|
2939
|
+
r1 = n1.times(newDivisor);
|
|
2940
|
+
} else if (n1.lessThan(minN1)) {
|
|
2941
|
+
e1 = e1.minus(1);
|
|
2942
|
+
var newDivisor = getPowerOf10(e1.minus(p).plus(1));
|
|
2943
|
+
n1 = x.div(newDivisor).floor();
|
|
2944
|
+
r1 = n1.times(newDivisor);
|
|
2945
|
+
}
|
|
2946
|
+
if (r1.lessThanOrEqualTo(x) && n1.lessThan(maxN1) && n1.greaterThanOrEqualTo(minN1)) {
|
|
2947
|
+
return { n1, e1, r1 };
|
|
2948
|
+
}
|
|
2925
2949
|
var maxE1 = x.div(minN1).log(10).plus(p).minus(1).ceil();
|
|
2926
2950
|
var currentE1 = maxE1;
|
|
2927
2951
|
while (true) {
|
|
2928
|
-
var
|
|
2952
|
+
var currentDivisor = getPowerOf10(currentE1.minus(p).plus(1));
|
|
2953
|
+
var currentN1 = x.div(currentDivisor).floor();
|
|
2929
2954
|
if (currentN1.lessThan(maxN1) && currentN1.greaterThanOrEqualTo(minN1)) {
|
|
2930
|
-
var currentR1 = currentN1.times(
|
|
2955
|
+
var currentR1 = currentN1.times(currentDivisor);
|
|
2931
2956
|
if (currentR1.lessThanOrEqualTo(x)) {
|
|
2932
2957
|
return {
|
|
2933
2958
|
n1: currentN1,
|
|
@@ -2940,14 +2965,34 @@
|
|
|
2940
2965
|
}
|
|
2941
2966
|
}
|
|
2942
2967
|
function findN2E2R2(x, p) {
|
|
2943
|
-
var maxN2 =
|
|
2944
|
-
var minN2 =
|
|
2968
|
+
var maxN2 = getPowerOf10(p);
|
|
2969
|
+
var minN2 = getPowerOf10(p - 1);
|
|
2970
|
+
var log10x = x.log(10);
|
|
2971
|
+
var e2 = log10x.floor();
|
|
2972
|
+
var divisor = getPowerOf10(e2.minus(p).plus(1));
|
|
2973
|
+
var n2 = x.div(divisor).ceil();
|
|
2974
|
+
var r2 = n2.times(divisor);
|
|
2975
|
+
if (n2.greaterThanOrEqualTo(maxN2)) {
|
|
2976
|
+
e2 = e2.plus(1);
|
|
2977
|
+
var newDivisor = getPowerOf10(e2.minus(p).plus(1));
|
|
2978
|
+
n2 = x.div(newDivisor).ceil();
|
|
2979
|
+
r2 = n2.times(newDivisor);
|
|
2980
|
+
} else if (n2.lessThan(minN2)) {
|
|
2981
|
+
e2 = e2.minus(1);
|
|
2982
|
+
var newDivisor = getPowerOf10(e2.minus(p).plus(1));
|
|
2983
|
+
n2 = x.div(newDivisor).ceil();
|
|
2984
|
+
r2 = n2.times(newDivisor);
|
|
2985
|
+
}
|
|
2986
|
+
if (r2.greaterThanOrEqualTo(x) && n2.lessThan(maxN2) && n2.greaterThanOrEqualTo(minN2)) {
|
|
2987
|
+
return { n2, e2, r2 };
|
|
2988
|
+
}
|
|
2945
2989
|
var minE2 = x.div(maxN2).log(10).plus(p).minus(1).floor();
|
|
2946
2990
|
var currentE2 = minE2;
|
|
2947
2991
|
while (true) {
|
|
2948
|
-
var
|
|
2992
|
+
var currentDivisor = getPowerOf10(currentE2.minus(p).plus(1));
|
|
2993
|
+
var currentN2 = x.div(currentDivisor).ceil();
|
|
2949
2994
|
if (currentN2.lessThan(maxN2) && currentN2.greaterThanOrEqualTo(minN2)) {
|
|
2950
|
-
var currentR2 = currentN2.times(
|
|
2995
|
+
var currentR2 = currentN2.times(currentDivisor);
|
|
2951
2996
|
if (currentR2.greaterThanOrEqualTo(x)) {
|
|
2952
2997
|
return {
|
|
2953
2998
|
n2: currentN2,
|
|
@@ -7136,7 +7181,7 @@
|
|
|
7136
7181
|
}
|
|
7137
7182
|
throw new Error("No matching distance found");
|
|
7138
7183
|
}
|
|
7139
|
-
function
|
|
7184
|
+
function findMatchingDistanceImpl(desired, supported) {
|
|
7140
7185
|
var desiredLocale = new Intl.Locale(desired).maximize();
|
|
7141
7186
|
var supportedLocale = new Intl.Locale(supported).maximize();
|
|
7142
7187
|
var desiredLSR = {
|
|
@@ -7178,7 +7223,26 @@
|
|
|
7178
7223
|
}
|
|
7179
7224
|
return matchingDistance;
|
|
7180
7225
|
}
|
|
7226
|
+
var findMatchingDistance = memoize(findMatchingDistanceImpl, {
|
|
7227
|
+
serializer: function(args) {
|
|
7228
|
+
return "".concat(args[0], "|").concat(args[1]);
|
|
7229
|
+
}
|
|
7230
|
+
});
|
|
7231
|
+
function getFallbackCandidates(locale) {
|
|
7232
|
+
var candidates = [];
|
|
7233
|
+
var current = locale;
|
|
7234
|
+
while (current) {
|
|
7235
|
+
candidates.push(current);
|
|
7236
|
+
var lastDash = current.lastIndexOf("-");
|
|
7237
|
+
if (lastDash === -1)
|
|
7238
|
+
break;
|
|
7239
|
+
current = current.substring(0, lastDash);
|
|
7240
|
+
}
|
|
7241
|
+
return candidates;
|
|
7242
|
+
}
|
|
7243
|
+
var canonicalizedSupportedCache = /* @__PURE__ */ new WeakMap();
|
|
7181
7244
|
function findBestMatch(requestedLocales, supportedLocales2, threshold) {
|
|
7245
|
+
var _a;
|
|
7182
7246
|
if (threshold === void 0) {
|
|
7183
7247
|
threshold = DEFAULT_MATCHING_THRESHOLD;
|
|
7184
7248
|
}
|
|
@@ -7187,17 +7251,84 @@
|
|
|
7187
7251
|
matchedDesiredLocale: "",
|
|
7188
7252
|
distances: {}
|
|
7189
7253
|
};
|
|
7190
|
-
|
|
7191
|
-
|
|
7192
|
-
|
|
7193
|
-
|
|
7194
|
-
|
|
7195
|
-
|
|
7196
|
-
|
|
7254
|
+
var canonicalizedSupportedLocales = canonicalizedSupportedCache.get(supportedLocales2);
|
|
7255
|
+
if (!canonicalizedSupportedLocales) {
|
|
7256
|
+
canonicalizedSupportedLocales = supportedLocales2.map(function(locale) {
|
|
7257
|
+
try {
|
|
7258
|
+
var canonical = Intl.getCanonicalLocales([locale]);
|
|
7259
|
+
return canonical[0] || locale;
|
|
7260
|
+
} catch (_a2) {
|
|
7261
|
+
return locale;
|
|
7262
|
+
}
|
|
7263
|
+
});
|
|
7264
|
+
canonicalizedSupportedCache.set(supportedLocales2, canonicalizedSupportedLocales);
|
|
7265
|
+
}
|
|
7266
|
+
var supportedSet = new Set(canonicalizedSupportedLocales);
|
|
7267
|
+
for (var i = 0; i < requestedLocales.length; i++) {
|
|
7268
|
+
var desired = requestedLocales[i];
|
|
7269
|
+
if (supportedSet.has(desired)) {
|
|
7270
|
+
var distance = 0 + i * 40;
|
|
7271
|
+
result.distances[desired] = (_a = {}, _a[desired] = distance, _a);
|
|
7197
7272
|
if (distance < lowestDistance) {
|
|
7198
7273
|
lowestDistance = distance;
|
|
7199
7274
|
result.matchedDesiredLocale = desired;
|
|
7200
|
-
result.matchedSupportedLocale =
|
|
7275
|
+
result.matchedSupportedLocale = desired;
|
|
7276
|
+
}
|
|
7277
|
+
if (i === 0) {
|
|
7278
|
+
return result;
|
|
7279
|
+
}
|
|
7280
|
+
}
|
|
7281
|
+
}
|
|
7282
|
+
for (var i = 0; i < requestedLocales.length; i++) {
|
|
7283
|
+
var desired = requestedLocales[i];
|
|
7284
|
+
try {
|
|
7285
|
+
var maximized = new Intl.Locale(desired).maximize().toString();
|
|
7286
|
+
if (maximized !== desired) {
|
|
7287
|
+
var maximizedCandidates = getFallbackCandidates(maximized);
|
|
7288
|
+
for (var j = 0; j < maximizedCandidates.length; j++) {
|
|
7289
|
+
var candidate = maximizedCandidates[j];
|
|
7290
|
+
if (candidate === desired)
|
|
7291
|
+
continue;
|
|
7292
|
+
if (supportedSet.has(candidate)) {
|
|
7293
|
+
var distance = void 0;
|
|
7294
|
+
try {
|
|
7295
|
+
var candidateMaximized = new Intl.Locale(candidate).maximize().toString();
|
|
7296
|
+
distance = candidateMaximized === maximized ? 0 + i * 40 : j * 10 + i * 40;
|
|
7297
|
+
} catch (_b) {
|
|
7298
|
+
distance = j * 10 + i * 40;
|
|
7299
|
+
}
|
|
7300
|
+
if (!result.distances[desired]) {
|
|
7301
|
+
result.distances[desired] = {};
|
|
7302
|
+
}
|
|
7303
|
+
result.distances[desired][candidate] = distance;
|
|
7304
|
+
if (distance < lowestDistance) {
|
|
7305
|
+
lowestDistance = distance;
|
|
7306
|
+
result.matchedDesiredLocale = desired;
|
|
7307
|
+
result.matchedSupportedLocale = candidate;
|
|
7308
|
+
}
|
|
7309
|
+
break;
|
|
7310
|
+
}
|
|
7311
|
+
}
|
|
7312
|
+
}
|
|
7313
|
+
} catch (_c) {
|
|
7314
|
+
}
|
|
7315
|
+
}
|
|
7316
|
+
if (result.matchedSupportedLocale && lowestDistance === 0) {
|
|
7317
|
+
return result;
|
|
7318
|
+
}
|
|
7319
|
+
requestedLocales.forEach(function(desired2, i2) {
|
|
7320
|
+
if (!result.distances[desired2]) {
|
|
7321
|
+
result.distances[desired2] = {};
|
|
7322
|
+
}
|
|
7323
|
+
canonicalizedSupportedLocales.forEach(function(canonicalLocale, supportedIndex) {
|
|
7324
|
+
var originalSupported = supportedLocales2[supportedIndex];
|
|
7325
|
+
var distance2 = findMatchingDistance(desired2, canonicalLocale);
|
|
7326
|
+
var finalDistance = distance2 + 0 + i2 * 40;
|
|
7327
|
+
result.distances[desired2][originalSupported] = finalDistance;
|
|
7328
|
+
if (finalDistance < lowestDistance) {
|
|
7329
|
+
lowestDistance = finalDistance;
|
|
7330
|
+
result.matchedDesiredLocale = desired2;
|
|
7331
|
+
result.matchedSupportedLocale = originalSupported;
|
|
7201
7332
|
}
|
|
7202
7333
|
});
|
|
7203
7334
|
});
|
|
@@ -7278,10 +7409,16 @@
|
|
|
7278
7409
|
}
|
|
7279
7410
|
|
|
7280
7411
|
// node_modules/.aspect_rules_js/@formatjs+intl-localematcher@0.0.0/node_modules/@formatjs/intl-localematcher/abstract/BestAvailableLocale.js
|
|
7412
|
+
var availableLocalesSetCache = /* @__PURE__ */ new WeakMap();
|
|
7281
7413
|
function BestAvailableLocale(availableLocales, locale) {
|
|
7414
|
+
var availableSet = availableLocalesSetCache.get(availableLocales);
|
|
7415
|
+
if (!availableSet) {
|
|
7416
|
+
availableSet = new Set(availableLocales);
|
|
7417
|
+
availableLocalesSetCache.set(availableLocales, availableSet);
|
|
7418
|
+
}
|
|
7282
7419
|
var candidate = locale;
|
|
7283
7420
|
while (true) {
|
|
7284
|
-
if (
|
|
7421
|
+
if (availableSet.has(candidate)) {
|
|
7285
7422
|
return candidate;
|
|
7286
7423
|
}
|
|
7287
7424
|
var pos = candidate.lastIndexOf("-");
|