@formatjs/intl-localematcher 0.6.2 → 0.7.0
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/abstract/BestAvailableLocale.js +1 -4
- package/abstract/BestFitMatcher.d.ts +1 -1
- package/abstract/BestFitMatcher.js +4 -7
- package/abstract/CanonicalizeLocaleList.js +1 -4
- package/abstract/CanonicalizeUValue.js +3 -6
- package/abstract/CanonicalizeUnicodeLocaleId.js +1 -4
- package/abstract/InsertUnicodeExtensionAndCanonicalize.d.ts +1 -1
- package/abstract/InsertUnicodeExtensionAndCanonicalize.js +6 -9
- package/abstract/LookupMatcher.d.ts +1 -1
- package/abstract/LookupMatcher.js +5 -8
- package/abstract/LookupSupportedLocales.js +5 -8
- package/abstract/ResolveLocale.js +15 -18
- package/abstract/UnicodeExtensionComponents.d.ts +1 -1
- package/abstract/UnicodeExtensionComponents.js +6 -9
- package/abstract/UnicodeExtensionValue.js +3 -6
- package/abstract/languageMatching.js +1 -4
- package/abstract/regions.generated.js +1 -4
- package/abstract/types.js +1 -2
- package/abstract/utils.js +13 -19
- package/index.d.ts +2 -2
- package/index.js +6 -12
- package/package.json +6 -3
- package/lib/abstract/BestAvailableLocale.d.ts +0 -6
- package/lib/abstract/BestAvailableLocale.js +0 -21
- package/lib/abstract/BestFitMatcher.d.ts +0 -8
- package/lib/abstract/BestFitMatcher.js +0 -31
- package/lib/abstract/CanonicalizeLocaleList.d.ts +0 -5
- package/lib/abstract/CanonicalizeLocaleList.js +0 -7
- package/lib/abstract/CanonicalizeUValue.d.ts +0 -1
- package/lib/abstract/CanonicalizeUValue.js +0 -8
- package/lib/abstract/CanonicalizeUnicodeLocaleId.d.ts +0 -1
- package/lib/abstract/CanonicalizeUnicodeLocaleId.js +0 -3
- package/lib/abstract/InsertUnicodeExtensionAndCanonicalize.d.ts +0 -2
- package/lib/abstract/InsertUnicodeExtensionAndCanonicalize.js +0 -32
- package/lib/abstract/LookupMatcher.d.ts +0 -8
- package/lib/abstract/LookupMatcher.js +0 -25
- package/lib/abstract/LookupSupportedLocales.d.ts +0 -6
- package/lib/abstract/LookupSupportedLocales.js +0 -19
- package/lib/abstract/ResolveLocale.d.ts +0 -14
- package/lib/abstract/ResolveLocale.js +0 -100
- package/lib/abstract/UnicodeExtensionComponents.d.ts +0 -5
- package/lib/abstract/UnicodeExtensionComponents.js +0 -42
- package/lib/abstract/UnicodeExtensionValue.d.ts +0 -6
- package/lib/abstract/UnicodeExtensionValue.js +0 -46
- package/lib/abstract/languageMatching.d.ts +0 -2240
- package/lib/abstract/languageMatching.js +0 -2620
- package/lib/abstract/regions.generated.d.ts +0 -1
- package/lib/abstract/regions.generated.js +0 -1334
- package/lib/abstract/types.d.ts +0 -9
- package/lib/abstract/types.js +0 -1
- package/lib/abstract/utils.d.ts +0 -10
- package/lib/abstract/utils.js +0 -165
- package/lib/index.d.ts +0 -6
- package/lib/index.js +0 -9
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { LookupMatcherResult } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* https://tc39.es/ecma402/#sec-lookupmatcher
|
|
4
|
-
* @param availableLocales
|
|
5
|
-
* @param requestedLocales
|
|
6
|
-
* @param getDefaultLocale
|
|
7
|
-
*/
|
|
8
|
-
export declare function LookupMatcher(availableLocales: readonly string[], requestedLocales: readonly string[], getDefaultLocale: () => string): LookupMatcherResult;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { BestAvailableLocale } from './BestAvailableLocale';
|
|
2
|
-
import { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils';
|
|
3
|
-
/**
|
|
4
|
-
* https://tc39.es/ecma402/#sec-lookupmatcher
|
|
5
|
-
* @param availableLocales
|
|
6
|
-
* @param requestedLocales
|
|
7
|
-
* @param getDefaultLocale
|
|
8
|
-
*/
|
|
9
|
-
export function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {
|
|
10
|
-
var result = { locale: '' };
|
|
11
|
-
for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {
|
|
12
|
-
var locale = requestedLocales_1[_i];
|
|
13
|
-
var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');
|
|
14
|
-
var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);
|
|
15
|
-
if (availableLocale) {
|
|
16
|
-
result.locale = availableLocale;
|
|
17
|
-
if (locale !== noExtensionLocale) {
|
|
18
|
-
result.extension = locale.slice(noExtensionLocale.length, locale.length);
|
|
19
|
-
}
|
|
20
|
-
return result;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
result.locale = getDefaultLocale();
|
|
24
|
-
return result;
|
|
25
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { BestAvailableLocale } from './BestAvailableLocale';
|
|
2
|
-
import { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils';
|
|
3
|
-
/**
|
|
4
|
-
* https://tc39.es/ecma402/#sec-lookupsupportedlocales
|
|
5
|
-
* @param availableLocales
|
|
6
|
-
* @param requestedLocales
|
|
7
|
-
*/
|
|
8
|
-
export function LookupSupportedLocales(availableLocales, requestedLocales) {
|
|
9
|
-
var subset = [];
|
|
10
|
-
for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {
|
|
11
|
-
var locale = requestedLocales_1[_i];
|
|
12
|
-
var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');
|
|
13
|
-
var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);
|
|
14
|
-
if (availableLocale) {
|
|
15
|
-
subset.push(availableLocale);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return subset;
|
|
19
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface ResolveLocaleResult {
|
|
2
|
-
locale: string;
|
|
3
|
-
dataLocale: string;
|
|
4
|
-
[k: string]: any;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* https://tc39.es/ecma402/#sec-resolvelocale
|
|
8
|
-
*/
|
|
9
|
-
export declare function ResolveLocale<K extends string, D extends {
|
|
10
|
-
[k in K]: any;
|
|
11
|
-
}>(availableLocales: Set<string> | readonly string[], requestedLocales: readonly string[], options: {
|
|
12
|
-
localeMatcher: string;
|
|
13
|
-
[k: string]: string;
|
|
14
|
-
}, relevantExtensionKeys: K[], localeData: Record<string, D | undefined>, getDefaultLocale: () => string): ResolveLocaleResult;
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { BestFitMatcher } from './BestFitMatcher';
|
|
2
|
-
import { CanonicalizeUValue } from './CanonicalizeUValue';
|
|
3
|
-
import { InsertUnicodeExtensionAndCanonicalize } from './InsertUnicodeExtensionAndCanonicalize';
|
|
4
|
-
import { LookupMatcher } from './LookupMatcher';
|
|
5
|
-
import { UnicodeExtensionComponents } from './UnicodeExtensionComponents';
|
|
6
|
-
import { invariant } from './utils';
|
|
7
|
-
/**
|
|
8
|
-
* https://tc39.es/ecma402/#sec-resolvelocale
|
|
9
|
-
*/
|
|
10
|
-
export function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {
|
|
11
|
-
var _a;
|
|
12
|
-
var matcher = options.localeMatcher;
|
|
13
|
-
var r;
|
|
14
|
-
if (matcher === 'lookup') {
|
|
15
|
-
r = LookupMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
r = BestFitMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
|
|
19
|
-
}
|
|
20
|
-
if (r == null) {
|
|
21
|
-
r = {
|
|
22
|
-
locale: getDefaultLocale(),
|
|
23
|
-
extension: '',
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
var foundLocale = r.locale;
|
|
27
|
-
var foundLocaleData = localeData[foundLocale];
|
|
28
|
-
// TODO: We can't really guarantee that the locale data is available
|
|
29
|
-
// invariant(
|
|
30
|
-
// foundLocaleData !== undefined,
|
|
31
|
-
// `Missing locale data for ${foundLocale}`
|
|
32
|
-
// )
|
|
33
|
-
var result = { locale: 'en', dataLocale: foundLocale };
|
|
34
|
-
var components;
|
|
35
|
-
var keywords;
|
|
36
|
-
if (r.extension) {
|
|
37
|
-
components = UnicodeExtensionComponents(r.extension);
|
|
38
|
-
keywords = components.keywords;
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
keywords = [];
|
|
42
|
-
}
|
|
43
|
-
var supportedKeywords = [];
|
|
44
|
-
var _loop_1 = function (key) {
|
|
45
|
-
// TODO: Shouldn't default to empty array, see TODO above
|
|
46
|
-
var keyLocaleData = (_a = foundLocaleData === null || foundLocaleData === void 0 ? void 0 : foundLocaleData[key]) !== null && _a !== void 0 ? _a : [];
|
|
47
|
-
invariant(Array.isArray(keyLocaleData), "keyLocaleData for ".concat(key, " must be an array"));
|
|
48
|
-
var value = keyLocaleData[0];
|
|
49
|
-
invariant(value === undefined || typeof value === 'string', "value must be a string or undefined");
|
|
50
|
-
var supportedKeyword = void 0;
|
|
51
|
-
var entry = keywords.find(function (k) { return k.key === key; });
|
|
52
|
-
if (entry) {
|
|
53
|
-
var requestedValue = entry.value;
|
|
54
|
-
if (requestedValue !== '') {
|
|
55
|
-
if (keyLocaleData.indexOf(requestedValue) > -1) {
|
|
56
|
-
value = requestedValue;
|
|
57
|
-
supportedKeyword = {
|
|
58
|
-
key: key,
|
|
59
|
-
value: value,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
else if (keyLocaleData.indexOf('true') > -1) {
|
|
64
|
-
value = 'true';
|
|
65
|
-
supportedKeyword = {
|
|
66
|
-
key: key,
|
|
67
|
-
value: value,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
var optionsValue = options[key];
|
|
72
|
-
invariant(optionsValue == null || typeof optionsValue === 'string', "optionsValue must be a string or undefined");
|
|
73
|
-
if (typeof optionsValue === 'string') {
|
|
74
|
-
var ukey = key.toLowerCase();
|
|
75
|
-
optionsValue = CanonicalizeUValue(ukey, optionsValue);
|
|
76
|
-
if (optionsValue === '') {
|
|
77
|
-
optionsValue = 'true';
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (optionsValue !== value && keyLocaleData.indexOf(optionsValue) > -1) {
|
|
81
|
-
value = optionsValue;
|
|
82
|
-
supportedKeyword = undefined;
|
|
83
|
-
}
|
|
84
|
-
if (supportedKeyword) {
|
|
85
|
-
supportedKeywords.push(supportedKeyword);
|
|
86
|
-
}
|
|
87
|
-
result[key] = value;
|
|
88
|
-
};
|
|
89
|
-
for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {
|
|
90
|
-
var key = relevantExtensionKeys_1[_i];
|
|
91
|
-
_loop_1(key);
|
|
92
|
-
}
|
|
93
|
-
var supportedAttributes = [];
|
|
94
|
-
if (supportedKeywords.length > 0) {
|
|
95
|
-
supportedAttributes = [];
|
|
96
|
-
foundLocale = InsertUnicodeExtensionAndCanonicalize(foundLocale, supportedAttributes, supportedKeywords);
|
|
97
|
-
}
|
|
98
|
-
result.locale = foundLocale;
|
|
99
|
-
return result;
|
|
100
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { invariant } from './utils';
|
|
2
|
-
export function UnicodeExtensionComponents(extension) {
|
|
3
|
-
invariant(extension === extension.toLowerCase(), 'Expected extension to be lowercase');
|
|
4
|
-
invariant(extension.slice(0, 3) === '-u-', 'Expected extension to be a Unicode locale extension');
|
|
5
|
-
var attributes = [];
|
|
6
|
-
var keywords = [];
|
|
7
|
-
var keyword;
|
|
8
|
-
var size = extension.length;
|
|
9
|
-
var k = 3;
|
|
10
|
-
while (k < size) {
|
|
11
|
-
var e = extension.indexOf('-', k);
|
|
12
|
-
var len = void 0;
|
|
13
|
-
if (e === -1) {
|
|
14
|
-
len = size - k;
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
len = e - k;
|
|
18
|
-
}
|
|
19
|
-
var subtag = extension.slice(k, k + len);
|
|
20
|
-
invariant(len >= 2, 'Expected a subtag to have at least 2 characters');
|
|
21
|
-
if (keyword === undefined && len != 2) {
|
|
22
|
-
if (attributes.indexOf(subtag) === -1) {
|
|
23
|
-
attributes.push(subtag);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
else if (len === 2) {
|
|
27
|
-
keyword = { key: subtag, value: '' };
|
|
28
|
-
if (keywords.find(function (k) { return k.key === (keyword === null || keyword === void 0 ? void 0 : keyword.key); }) === undefined) {
|
|
29
|
-
keywords.push(keyword);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
else if ((keyword === null || keyword === void 0 ? void 0 : keyword.value) === '') {
|
|
33
|
-
keyword.value = subtag;
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
invariant(keyword !== undefined, 'Expected keyword to be defined');
|
|
37
|
-
keyword.value += '-' + subtag;
|
|
38
|
-
}
|
|
39
|
-
k += len + 1;
|
|
40
|
-
}
|
|
41
|
-
return { attributes: attributes, keywords: keywords };
|
|
42
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { invariant } from './utils';
|
|
2
|
-
/**
|
|
3
|
-
* https://tc39.es/ecma402/#sec-unicodeextensionvalue
|
|
4
|
-
* @param extension
|
|
5
|
-
* @param key
|
|
6
|
-
*/
|
|
7
|
-
export function UnicodeExtensionValue(extension, key) {
|
|
8
|
-
invariant(key.length === 2, 'key must have 2 elements');
|
|
9
|
-
var size = extension.length;
|
|
10
|
-
var searchValue = "-".concat(key, "-");
|
|
11
|
-
var pos = extension.indexOf(searchValue);
|
|
12
|
-
if (pos !== -1) {
|
|
13
|
-
var start = pos + 4;
|
|
14
|
-
var end = start;
|
|
15
|
-
var k = start;
|
|
16
|
-
var done = false;
|
|
17
|
-
while (!done) {
|
|
18
|
-
var e = extension.indexOf('-', k);
|
|
19
|
-
var len = void 0;
|
|
20
|
-
if (e === -1) {
|
|
21
|
-
len = size - k;
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
len = e - k;
|
|
25
|
-
}
|
|
26
|
-
if (len === 2) {
|
|
27
|
-
done = true;
|
|
28
|
-
}
|
|
29
|
-
else if (e === -1) {
|
|
30
|
-
end = size;
|
|
31
|
-
done = true;
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
end = e;
|
|
35
|
-
k = e + 1;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return extension.slice(start, end);
|
|
39
|
-
}
|
|
40
|
-
searchValue = "-".concat(key);
|
|
41
|
-
pos = extension.indexOf(searchValue);
|
|
42
|
-
if (pos !== -1 && pos + 3 === size) {
|
|
43
|
-
return '';
|
|
44
|
-
}
|
|
45
|
-
return undefined;
|
|
46
|
-
}
|