@formatjs/intl-localematcher 0.5.7 → 0.5.9
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/README.md +1 -1
- package/abstract/BestAvailableLocale.js +0 -1
- package/abstract/BestFitMatcher.js +0 -1
- package/abstract/CanonicalizeLocaleList.js +0 -2
- package/abstract/CanonicalizeUValue.d.ts +1 -0
- package/abstract/CanonicalizeUValue.js +11 -0
- package/abstract/CanonicalizeUnicodeLocaleId.d.ts +1 -0
- package/abstract/CanonicalizeUnicodeLocaleId.js +6 -0
- package/abstract/InsertUnicodeExtensionAndCanonicalize.d.ts +2 -0
- package/abstract/InsertUnicodeExtensionAndCanonicalize.js +35 -0
- package/abstract/LookupMatcher.js +0 -1
- package/abstract/LookupSupportedLocales.js +0 -1
- package/abstract/ResolveLocale.js +71 -46
- package/abstract/UnicodeExtensionComponents.d.ts +5 -0
- package/abstract/UnicodeExtensionComponents.js +45 -0
- package/abstract/UnicodeExtensionValue.js +0 -1
- package/abstract/languageMatching.d.ts +2234 -7968
- package/abstract/languageMatching.js +0 -1
- package/abstract/regions.generated.js +0 -1
- package/abstract/types.d.ts +4 -0
- package/abstract/types.js +0 -1
- package/abstract/utils.js +0 -1
- package/index.js +0 -1
- package/lib/abstract/BestAvailableLocale.js +0 -1
- package/lib/abstract/BestFitMatcher.js +0 -1
- package/lib/abstract/CanonicalizeLocaleList.js +0 -2
- package/lib/abstract/CanonicalizeUValue.d.ts +1 -0
- package/lib/abstract/CanonicalizeUValue.js +8 -0
- package/lib/abstract/CanonicalizeUnicodeLocaleId.d.ts +1 -0
- package/lib/abstract/CanonicalizeUnicodeLocaleId.js +3 -0
- package/lib/abstract/InsertUnicodeExtensionAndCanonicalize.d.ts +2 -0
- package/lib/abstract/InsertUnicodeExtensionAndCanonicalize.js +32 -0
- package/lib/abstract/LookupMatcher.js +0 -1
- package/lib/abstract/LookupSupportedLocales.js +0 -1
- package/lib/abstract/ResolveLocale.js +71 -46
- package/lib/abstract/UnicodeExtensionComponents.d.ts +5 -0
- package/lib/abstract/UnicodeExtensionComponents.js +42 -0
- package/lib/abstract/UnicodeExtensionValue.js +0 -1
- package/lib/abstract/languageMatching.d.ts +2234 -7968
- package/lib/abstract/languageMatching.js +0 -1
- package/lib/abstract/regions.generated.js +0 -1
- package/lib/abstract/types.d.ts +4 -0
- package/lib/abstract/types.js +0 -1
- package/lib/abstract/utils.js +0 -1
- package/lib/index.js +0 -1
- package/package.json +1 -1
- package/abstract/BestAvailableLocale.js.map +0 -1
- package/abstract/BestFitMatcher.js.map +0 -1
- package/abstract/CanonicalizeLocaleList.js.map +0 -1
- package/abstract/LookupMatcher.js.map +0 -1
- package/abstract/LookupSupportedLocales.js.map +0 -1
- package/abstract/ResolveLocale.js.map +0 -1
- package/abstract/UnicodeExtensionValue.js.map +0 -1
- package/abstract/languageMatching.js.map +0 -1
- package/abstract/regions.generated.js.map +0 -1
- package/abstract/types.js.map +0 -1
- package/abstract/utils.js.map +0 -1
- package/index.js.map +0 -1
- package/lib/abstract/BestAvailableLocale.js.map +0 -1
- package/lib/abstract/BestFitMatcher.js.map +0 -1
- package/lib/abstract/CanonicalizeLocaleList.js.map +0 -1
- package/lib/abstract/LookupMatcher.js.map +0 -1
- package/lib/abstract/LookupSupportedLocales.js.map +0 -1
- package/lib/abstract/ResolveLocale.js.map +0 -1
- package/lib/abstract/UnicodeExtensionValue.js.map +0 -1
- package/lib/abstract/languageMatching.js.map +0 -1
- package/lib/abstract/regions.generated.js.map +0 -1
- package/lib/abstract/types.js.map +0 -1
- package/lib/abstract/utils.js.map +0 -1
- package/lib/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function CanonicalizeUValue(ukey: string, uvalue: string): string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CanonicalizeUValue = CanonicalizeUValue;
|
|
4
|
+
var utils_1 = require("./utils");
|
|
5
|
+
function CanonicalizeUValue(ukey, uvalue) {
|
|
6
|
+
// TODO: Implement algorithm for CanonicalizeUValue per https://tc39.es/ecma402/#sec-canonicalizeuvalue
|
|
7
|
+
var lowerValue = uvalue.toLowerCase();
|
|
8
|
+
(0, utils_1.invariant)(ukey !== undefined, "ukey must be defined");
|
|
9
|
+
var canonicalized = lowerValue;
|
|
10
|
+
return canonicalized;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function CanonicalizeUnicodeLocaleId(locale: string): string;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InsertUnicodeExtensionAndCanonicalize = InsertUnicodeExtensionAndCanonicalize;
|
|
4
|
+
var CanonicalizeUnicodeLocaleId_1 = require("./CanonicalizeUnicodeLocaleId");
|
|
5
|
+
var utils_1 = require("./utils");
|
|
6
|
+
function InsertUnicodeExtensionAndCanonicalize(locale, attributes, keywords) {
|
|
7
|
+
(0, utils_1.invariant)(locale.indexOf('-u-') === -1, 'Expected locale to not have a Unicode locale extension');
|
|
8
|
+
var extension = '-u';
|
|
9
|
+
for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {
|
|
10
|
+
var attr = attributes_1[_i];
|
|
11
|
+
extension += "-".concat(attr);
|
|
12
|
+
}
|
|
13
|
+
for (var _a = 0, keywords_1 = keywords; _a < keywords_1.length; _a++) {
|
|
14
|
+
var kw = keywords_1[_a];
|
|
15
|
+
var key = kw.key, value = kw.value;
|
|
16
|
+
extension += "-".concat(key);
|
|
17
|
+
if (value !== '') {
|
|
18
|
+
extension += "-".concat(value);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (extension === '-u') {
|
|
22
|
+
return (0, CanonicalizeUnicodeLocaleId_1.CanonicalizeUnicodeLocaleId)(locale);
|
|
23
|
+
}
|
|
24
|
+
var privateIndex = locale.indexOf('-x-');
|
|
25
|
+
var newLocale;
|
|
26
|
+
if (privateIndex === -1) {
|
|
27
|
+
newLocale = locale + extension;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
var preExtension = locale.slice(0, privateIndex);
|
|
31
|
+
var postExtension = locale.slice(privateIndex);
|
|
32
|
+
newLocale = preExtension + extension + postExtension;
|
|
33
|
+
}
|
|
34
|
+
return (0, CanonicalizeUnicodeLocaleId_1.CanonicalizeUnicodeLocaleId)(newLocale);
|
|
35
|
+
}
|
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ResolveLocale = ResolveLocale;
|
|
4
4
|
var BestFitMatcher_1 = require("./BestFitMatcher");
|
|
5
|
+
var CanonicalizeUValue_1 = require("./CanonicalizeUValue");
|
|
6
|
+
var InsertUnicodeExtensionAndCanonicalize_1 = require("./InsertUnicodeExtensionAndCanonicalize");
|
|
5
7
|
var LookupMatcher_1 = require("./LookupMatcher");
|
|
6
|
-
var
|
|
8
|
+
var UnicodeExtensionComponents_1 = require("./UnicodeExtensionComponents");
|
|
7
9
|
var utils_1 = require("./utils");
|
|
8
10
|
/**
|
|
9
11
|
* https://tc39.es/ecma402/#sec-resolvelocale
|
|
10
12
|
*/
|
|
11
13
|
function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {
|
|
14
|
+
var _a;
|
|
12
15
|
var matcher = options.localeMatcher;
|
|
13
16
|
var r;
|
|
14
17
|
if (matcher === 'lookup') {
|
|
@@ -17,62 +20,84 @@ function ResolveLocale(availableLocales, requestedLocales, options, relevantExte
|
|
|
17
20
|
else {
|
|
18
21
|
r = (0, BestFitMatcher_1.BestFitMatcher)(Array.from(availableLocales), requestedLocales, getDefaultLocale);
|
|
19
22
|
}
|
|
23
|
+
if (r == null) {
|
|
24
|
+
r = {
|
|
25
|
+
locale: getDefaultLocale(),
|
|
26
|
+
extension: '',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
20
29
|
var foundLocale = r.locale;
|
|
21
|
-
var
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
var foundLocaleData = localeData[foundLocale];
|
|
31
|
+
// TODO: We can't really guarantee that the locale data is available
|
|
32
|
+
// invariant(
|
|
33
|
+
// foundLocaleData !== undefined,
|
|
34
|
+
// `Missing locale data for ${foundLocale}`
|
|
35
|
+
// )
|
|
36
|
+
var result = { locale: 'en', dataLocale: foundLocale };
|
|
37
|
+
var components;
|
|
38
|
+
var keywords;
|
|
39
|
+
if (r.extension) {
|
|
40
|
+
components = (0, UnicodeExtensionComponents_1.UnicodeExtensionComponents)(r.extension);
|
|
41
|
+
keywords = components.keywords;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
keywords = [];
|
|
45
|
+
}
|
|
46
|
+
var supportedKeywords = [];
|
|
47
|
+
var _loop_1 = function (key) {
|
|
48
|
+
// TODO: Shouldn't default to empty array, see TODO above
|
|
49
|
+
var keyLocaleData = (_a = foundLocaleData === null || foundLocaleData === void 0 ? void 0 : foundLocaleData[key]) !== null && _a !== void 0 ? _a : [];
|
|
29
50
|
(0, utils_1.invariant)(Array.isArray(keyLocaleData), "keyLocaleData for ".concat(key, " must be an array"));
|
|
30
51
|
var value = keyLocaleData[0];
|
|
31
|
-
(0, utils_1.invariant)(
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
value = 'true';
|
|
44
|
-
supportedExtensionAddition = "-".concat(key);
|
|
52
|
+
(0, utils_1.invariant)(value === undefined || typeof value === 'string', "value must be a string or undefined");
|
|
53
|
+
var supportedKeyword = void 0;
|
|
54
|
+
var entry = keywords.find(function (k) { return k.key === key; });
|
|
55
|
+
if (entry) {
|
|
56
|
+
var requestedValue = entry.value;
|
|
57
|
+
if (requestedValue !== '') {
|
|
58
|
+
if (keyLocaleData.indexOf(requestedValue) > -1) {
|
|
59
|
+
value = requestedValue;
|
|
60
|
+
supportedKeyword = {
|
|
61
|
+
key: key,
|
|
62
|
+
value: value,
|
|
63
|
+
};
|
|
45
64
|
}
|
|
46
65
|
}
|
|
66
|
+
else if (keyLocaleData.indexOf('true') > -1) {
|
|
67
|
+
value = 'true';
|
|
68
|
+
supportedKeyword = {
|
|
69
|
+
key: key,
|
|
70
|
+
value: value,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
47
73
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (
|
|
54
|
-
|
|
55
|
-
value = optionsValue;
|
|
56
|
-
supportedExtensionAddition = '';
|
|
57
|
-
}
|
|
74
|
+
var optionsValue = options[key];
|
|
75
|
+
(0, utils_1.invariant)(optionsValue == null || typeof optionsValue === 'string', "optionsValue must be a string or undefined");
|
|
76
|
+
if (typeof optionsValue === 'string') {
|
|
77
|
+
var ukey = key.toLowerCase();
|
|
78
|
+
optionsValue = (0, CanonicalizeUValue_1.CanonicalizeUValue)(ukey, optionsValue);
|
|
79
|
+
if (optionsValue === '') {
|
|
80
|
+
optionsValue = 'true';
|
|
58
81
|
}
|
|
59
82
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (supportedExtension.length > 2) {
|
|
64
|
-
var privateIndex = foundLocale.indexOf('-x-');
|
|
65
|
-
if (privateIndex === -1) {
|
|
66
|
-
foundLocale = foundLocale + supportedExtension;
|
|
83
|
+
if (optionsValue !== value && keyLocaleData.indexOf(optionsValue) > -1) {
|
|
84
|
+
value = optionsValue;
|
|
85
|
+
supportedKeyword = undefined;
|
|
67
86
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
var postExtension = foundLocale.slice(privateIndex, foundLocale.length);
|
|
71
|
-
foundLocale = preExtension + supportedExtension + postExtension;
|
|
87
|
+
if (supportedKeyword) {
|
|
88
|
+
supportedKeywords.push(supportedKeyword);
|
|
72
89
|
}
|
|
73
|
-
|
|
90
|
+
result[key] = value;
|
|
91
|
+
};
|
|
92
|
+
for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {
|
|
93
|
+
var key = relevantExtensionKeys_1[_i];
|
|
94
|
+
_loop_1(key);
|
|
95
|
+
}
|
|
96
|
+
var supportedAttributes = [];
|
|
97
|
+
if (supportedKeywords.length > 0) {
|
|
98
|
+
supportedAttributes = [];
|
|
99
|
+
foundLocale = (0, InsertUnicodeExtensionAndCanonicalize_1.InsertUnicodeExtensionAndCanonicalize)(foundLocale, supportedAttributes, supportedKeywords);
|
|
74
100
|
}
|
|
75
101
|
result.locale = foundLocale;
|
|
76
102
|
return result;
|
|
77
103
|
}
|
|
78
|
-
//# sourceMappingURL=ResolveLocale.js.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnicodeExtensionComponents = UnicodeExtensionComponents;
|
|
4
|
+
var utils_1 = require("./utils");
|
|
5
|
+
function UnicodeExtensionComponents(extension) {
|
|
6
|
+
(0, utils_1.invariant)(extension === extension.toLowerCase(), 'Expected extension to be lowercase');
|
|
7
|
+
(0, utils_1.invariant)(extension.slice(0, 3) === '-u-', 'Expected extension to be a Unicode locale extension');
|
|
8
|
+
var attributes = [];
|
|
9
|
+
var keywords = [];
|
|
10
|
+
var keyword;
|
|
11
|
+
var size = extension.length;
|
|
12
|
+
var k = 3;
|
|
13
|
+
while (k < size) {
|
|
14
|
+
var e = extension.indexOf('-', k);
|
|
15
|
+
var len = void 0;
|
|
16
|
+
if (e === -1) {
|
|
17
|
+
len = size - k;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
len = e - k;
|
|
21
|
+
}
|
|
22
|
+
var subtag = extension.slice(k, k + len);
|
|
23
|
+
(0, utils_1.invariant)(len >= 2, 'Expected a subtag to have at least 2 characters');
|
|
24
|
+
if (keyword === undefined && len != 2) {
|
|
25
|
+
if (attributes.indexOf(subtag) === -1) {
|
|
26
|
+
attributes.push(subtag);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else if (len === 2) {
|
|
30
|
+
keyword = { key: subtag, value: '' };
|
|
31
|
+
if (keywords.find(function (k) { return k.key === (keyword === null || keyword === void 0 ? void 0 : keyword.key); }) === undefined) {
|
|
32
|
+
keywords.push(keyword);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if ((keyword === null || keyword === void 0 ? void 0 : keyword.value) === '') {
|
|
36
|
+
keyword.value = subtag;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
(0, utils_1.invariant)(keyword !== undefined, 'Expected keyword to be defined');
|
|
40
|
+
keyword.value += '-' + subtag;
|
|
41
|
+
}
|
|
42
|
+
k += len + 1;
|
|
43
|
+
}
|
|
44
|
+
return { attributes: attributes, keywords: keywords };
|
|
45
|
+
}
|