@formatjs/intl-localematcher 0.6.2 → 0.7.1
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,12 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BestAvailableLocale = BestAvailableLocale;
|
|
4
1
|
/**
|
|
5
2
|
* https://tc39.es/ecma402/#sec-bestavailablelocale
|
|
6
3
|
* @param availableLocales
|
|
7
4
|
* @param locale
|
|
8
5
|
*/
|
|
9
|
-
function BestAvailableLocale(availableLocales, locale) {
|
|
6
|
+
export function BestAvailableLocale(availableLocales, locale) {
|
|
10
7
|
var candidate = locale;
|
|
11
8
|
while (true) {
|
|
12
9
|
if (availableLocales.indexOf(candidate) > -1) {
|
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BestFitMatcher = BestFitMatcher;
|
|
4
|
-
var utils_1 = require("./utils");
|
|
1
|
+
import { UNICODE_EXTENSION_SEQUENCE_REGEX, findBestMatch } from './utils.js';
|
|
5
2
|
/**
|
|
6
3
|
* https://tc39.es/ecma402/#sec-bestfitmatcher
|
|
7
4
|
* @param availableLocales
|
|
8
5
|
* @param requestedLocales
|
|
9
6
|
* @param getDefaultLocale
|
|
10
7
|
*/
|
|
11
|
-
function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {
|
|
8
|
+
export function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {
|
|
12
9
|
var foundLocale;
|
|
13
10
|
var extension;
|
|
14
11
|
var noExtensionLocales = [];
|
|
15
12
|
var noExtensionLocaleMap = requestedLocales.reduce(function (all, l) {
|
|
16
|
-
var noExtensionLocale = l.replace(
|
|
13
|
+
var noExtensionLocale = l.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');
|
|
17
14
|
noExtensionLocales.push(noExtensionLocale);
|
|
18
15
|
all[noExtensionLocale] = l;
|
|
19
16
|
return all;
|
|
20
17
|
}, {});
|
|
21
|
-
var result =
|
|
18
|
+
var result = findBestMatch(noExtensionLocales, availableLocales);
|
|
22
19
|
if (result.matchedSupportedLocale && result.matchedDesiredLocale) {
|
|
23
20
|
foundLocale = result.matchedSupportedLocale;
|
|
24
21
|
extension =
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CanonicalizeLocaleList = CanonicalizeLocaleList;
|
|
4
1
|
/**
|
|
5
2
|
* http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
|
|
6
3
|
* @param locales
|
|
7
4
|
*/
|
|
8
|
-
function CanonicalizeLocaleList(locales) {
|
|
5
|
+
export function CanonicalizeLocaleList(locales) {
|
|
9
6
|
return Intl.getCanonicalLocales(locales);
|
|
10
7
|
}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.CanonicalizeUValue = CanonicalizeUValue;
|
|
4
|
-
var utils_1 = require("./utils");
|
|
5
|
-
function CanonicalizeUValue(ukey, uvalue) {
|
|
1
|
+
import { invariant } from './utils.js';
|
|
2
|
+
export function CanonicalizeUValue(ukey, uvalue) {
|
|
6
3
|
// TODO: Implement algorithm for CanonicalizeUValue per https://tc39.es/ecma402/#sec-canonicalizeuvalue
|
|
7
4
|
var lowerValue = uvalue.toLowerCase();
|
|
8
|
-
|
|
5
|
+
invariant(ukey !== undefined, "ukey must be defined");
|
|
9
6
|
var canonicalized = lowerValue;
|
|
10
7
|
return canonicalized;
|
|
11
8
|
}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CanonicalizeUnicodeLocaleId = CanonicalizeUnicodeLocaleId;
|
|
4
|
-
function CanonicalizeUnicodeLocaleId(locale) {
|
|
1
|
+
export function CanonicalizeUnicodeLocaleId(locale) {
|
|
5
2
|
return Intl.getCanonicalLocales(locale)[0];
|
|
6
3
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Keyword } from './types';
|
|
1
|
+
import { Keyword } from './types.js';
|
|
2
2
|
export declare function InsertUnicodeExtensionAndCanonicalize(locale: string, attributes: string[], keywords: Array<Keyword>): string;
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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');
|
|
1
|
+
import { CanonicalizeUnicodeLocaleId } from './CanonicalizeUnicodeLocaleId.js';
|
|
2
|
+
import { invariant } from './utils.js';
|
|
3
|
+
export function InsertUnicodeExtensionAndCanonicalize(locale, attributes, keywords) {
|
|
4
|
+
invariant(locale.indexOf('-u-') === -1, 'Expected locale to not have a Unicode locale extension');
|
|
8
5
|
var extension = '-u';
|
|
9
6
|
for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {
|
|
10
7
|
var attr = attributes_1[_i];
|
|
@@ -19,7 +16,7 @@ function InsertUnicodeExtensionAndCanonicalize(locale, attributes, keywords) {
|
|
|
19
16
|
}
|
|
20
17
|
}
|
|
21
18
|
if (extension === '-u') {
|
|
22
|
-
return
|
|
19
|
+
return CanonicalizeUnicodeLocaleId(locale);
|
|
23
20
|
}
|
|
24
21
|
var privateIndex = locale.indexOf('-x-');
|
|
25
22
|
var newLocale;
|
|
@@ -31,5 +28,5 @@ function InsertUnicodeExtensionAndCanonicalize(locale, attributes, keywords) {
|
|
|
31
28
|
var postExtension = locale.slice(privateIndex);
|
|
32
29
|
newLocale = preExtension + extension + postExtension;
|
|
33
30
|
}
|
|
34
|
-
return
|
|
31
|
+
return CanonicalizeUnicodeLocaleId(newLocale);
|
|
35
32
|
}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.LookupMatcher = LookupMatcher;
|
|
4
|
-
var BestAvailableLocale_1 = require("./BestAvailableLocale");
|
|
5
|
-
var utils_1 = require("./utils");
|
|
1
|
+
import { BestAvailableLocale } from './BestAvailableLocale.js';
|
|
2
|
+
import { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils.js';
|
|
6
3
|
/**
|
|
7
4
|
* https://tc39.es/ecma402/#sec-lookupmatcher
|
|
8
5
|
* @param availableLocales
|
|
9
6
|
* @param requestedLocales
|
|
10
7
|
* @param getDefaultLocale
|
|
11
8
|
*/
|
|
12
|
-
function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {
|
|
9
|
+
export function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {
|
|
13
10
|
var result = { locale: '' };
|
|
14
11
|
for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {
|
|
15
12
|
var locale = requestedLocales_1[_i];
|
|
16
|
-
var noExtensionLocale = locale.replace(
|
|
17
|
-
var availableLocale =
|
|
13
|
+
var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');
|
|
14
|
+
var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);
|
|
18
15
|
if (availableLocale) {
|
|
19
16
|
result.locale = availableLocale;
|
|
20
17
|
if (locale !== noExtensionLocale) {
|
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.LookupSupportedLocales = LookupSupportedLocales;
|
|
4
|
-
var BestAvailableLocale_1 = require("./BestAvailableLocale");
|
|
5
|
-
var utils_1 = require("./utils");
|
|
1
|
+
import { BestAvailableLocale } from './BestAvailableLocale.js';
|
|
2
|
+
import { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils.js';
|
|
6
3
|
/**
|
|
7
4
|
* https://tc39.es/ecma402/#sec-lookupsupportedlocales
|
|
8
5
|
* @param availableLocales
|
|
9
6
|
* @param requestedLocales
|
|
10
7
|
*/
|
|
11
|
-
function LookupSupportedLocales(availableLocales, requestedLocales) {
|
|
8
|
+
export function LookupSupportedLocales(availableLocales, requestedLocales) {
|
|
12
9
|
var subset = [];
|
|
13
10
|
for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {
|
|
14
11
|
var locale = requestedLocales_1[_i];
|
|
15
|
-
var noExtensionLocale = locale.replace(
|
|
16
|
-
var availableLocale =
|
|
12
|
+
var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');
|
|
13
|
+
var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);
|
|
17
14
|
if (availableLocale) {
|
|
18
15
|
subset.push(availableLocale);
|
|
19
16
|
}
|
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var LookupMatcher_1 = require("./LookupMatcher");
|
|
8
|
-
var UnicodeExtensionComponents_1 = require("./UnicodeExtensionComponents");
|
|
9
|
-
var utils_1 = require("./utils");
|
|
1
|
+
import { BestFitMatcher } from './BestFitMatcher.js';
|
|
2
|
+
import { CanonicalizeUValue } from './CanonicalizeUValue.js';
|
|
3
|
+
import { InsertUnicodeExtensionAndCanonicalize } from './InsertUnicodeExtensionAndCanonicalize.js';
|
|
4
|
+
import { LookupMatcher } from './LookupMatcher.js';
|
|
5
|
+
import { UnicodeExtensionComponents } from './UnicodeExtensionComponents.js';
|
|
6
|
+
import { invariant } from './utils.js';
|
|
10
7
|
/**
|
|
11
8
|
* https://tc39.es/ecma402/#sec-resolvelocale
|
|
12
9
|
*/
|
|
13
|
-
function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {
|
|
10
|
+
export function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {
|
|
14
11
|
var _a;
|
|
15
12
|
var matcher = options.localeMatcher;
|
|
16
13
|
var r;
|
|
17
14
|
if (matcher === 'lookup') {
|
|
18
|
-
r =
|
|
15
|
+
r = LookupMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
|
|
19
16
|
}
|
|
20
17
|
else {
|
|
21
|
-
r =
|
|
18
|
+
r = BestFitMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
|
|
22
19
|
}
|
|
23
20
|
if (r == null) {
|
|
24
21
|
r = {
|
|
@@ -37,7 +34,7 @@ function ResolveLocale(availableLocales, requestedLocales, options, relevantExte
|
|
|
37
34
|
var components;
|
|
38
35
|
var keywords;
|
|
39
36
|
if (r.extension) {
|
|
40
|
-
components =
|
|
37
|
+
components = UnicodeExtensionComponents(r.extension);
|
|
41
38
|
keywords = components.keywords;
|
|
42
39
|
}
|
|
43
40
|
else {
|
|
@@ -47,9 +44,9 @@ function ResolveLocale(availableLocales, requestedLocales, options, relevantExte
|
|
|
47
44
|
var _loop_1 = function (key) {
|
|
48
45
|
// TODO: Shouldn't default to empty array, see TODO above
|
|
49
46
|
var keyLocaleData = (_a = foundLocaleData === null || foundLocaleData === void 0 ? void 0 : foundLocaleData[key]) !== null && _a !== void 0 ? _a : [];
|
|
50
|
-
|
|
47
|
+
invariant(Array.isArray(keyLocaleData), "keyLocaleData for ".concat(key, " must be an array"));
|
|
51
48
|
var value = keyLocaleData[0];
|
|
52
|
-
|
|
49
|
+
invariant(value === undefined || typeof value === 'string', "value must be a string or undefined");
|
|
53
50
|
var supportedKeyword = void 0;
|
|
54
51
|
var entry = keywords.find(function (k) { return k.key === key; });
|
|
55
52
|
if (entry) {
|
|
@@ -72,10 +69,10 @@ function ResolveLocale(availableLocales, requestedLocales, options, relevantExte
|
|
|
72
69
|
}
|
|
73
70
|
}
|
|
74
71
|
var optionsValue = options[key];
|
|
75
|
-
|
|
72
|
+
invariant(optionsValue == null || typeof optionsValue === 'string', "optionsValue must be a string or undefined");
|
|
76
73
|
if (typeof optionsValue === 'string') {
|
|
77
74
|
var ukey = key.toLowerCase();
|
|
78
|
-
optionsValue =
|
|
75
|
+
optionsValue = CanonicalizeUValue(ukey, optionsValue);
|
|
79
76
|
if (optionsValue === '') {
|
|
80
77
|
optionsValue = 'true';
|
|
81
78
|
}
|
|
@@ -96,7 +93,7 @@ function ResolveLocale(availableLocales, requestedLocales, options, relevantExte
|
|
|
96
93
|
var supportedAttributes = [];
|
|
97
94
|
if (supportedKeywords.length > 0) {
|
|
98
95
|
supportedAttributes = [];
|
|
99
|
-
foundLocale =
|
|
96
|
+
foundLocale = InsertUnicodeExtensionAndCanonicalize(foundLocale, supportedAttributes, supportedKeywords);
|
|
100
97
|
}
|
|
101
98
|
result.locale = foundLocale;
|
|
102
99
|
return result;
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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');
|
|
1
|
+
import { invariant } from './utils.js';
|
|
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');
|
|
8
5
|
var attributes = [];
|
|
9
6
|
var keywords = [];
|
|
10
7
|
var keyword;
|
|
@@ -20,7 +17,7 @@ function UnicodeExtensionComponents(extension) {
|
|
|
20
17
|
len = e - k;
|
|
21
18
|
}
|
|
22
19
|
var subtag = extension.slice(k, k + len);
|
|
23
|
-
|
|
20
|
+
invariant(len >= 2, 'Expected a subtag to have at least 2 characters');
|
|
24
21
|
if (keyword === undefined && len != 2) {
|
|
25
22
|
if (attributes.indexOf(subtag) === -1) {
|
|
26
23
|
attributes.push(subtag);
|
|
@@ -36,7 +33,7 @@ function UnicodeExtensionComponents(extension) {
|
|
|
36
33
|
keyword.value = subtag;
|
|
37
34
|
}
|
|
38
35
|
else {
|
|
39
|
-
|
|
36
|
+
invariant(keyword !== undefined, 'Expected keyword to be defined');
|
|
40
37
|
keyword.value += '-' + subtag;
|
|
41
38
|
}
|
|
42
39
|
k += len + 1;
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UnicodeExtensionValue = UnicodeExtensionValue;
|
|
4
|
-
var utils_1 = require("./utils");
|
|
1
|
+
import { invariant } from './utils.js';
|
|
5
2
|
/**
|
|
6
3
|
* https://tc39.es/ecma402/#sec-unicodeextensionvalue
|
|
7
4
|
* @param extension
|
|
8
5
|
* @param key
|
|
9
6
|
*/
|
|
10
|
-
function UnicodeExtensionValue(extension, key) {
|
|
11
|
-
|
|
7
|
+
export function UnicodeExtensionValue(extension, key) {
|
|
8
|
+
invariant(key.length === 2, 'key must have 2 elements');
|
|
12
9
|
var size = extension.length;
|
|
13
10
|
var searchValue = "-".concat(key, "-");
|
|
14
11
|
var pos = extension.indexOf(searchValue);
|
package/abstract/types.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
package/abstract/utils.js
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.findBestMatch = findBestMatch;
|
|
7
|
-
var tslib_1 = require("tslib");
|
|
8
|
-
var languageMatching_1 = require("./languageMatching");
|
|
9
|
-
var regions_generated_1 = require("./regions.generated");
|
|
10
|
-
exports.UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;
|
|
11
|
-
function invariant(condition, message, Err) {
|
|
1
|
+
import { __spreadArray } from "tslib";
|
|
2
|
+
import { data as jsonData } from './languageMatching.js';
|
|
3
|
+
import { regions } from './regions.generated.js';
|
|
4
|
+
export var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;
|
|
5
|
+
export function invariant(condition, message, Err) {
|
|
12
6
|
if (Err === void 0) { Err = Error; }
|
|
13
7
|
if (!condition) {
|
|
14
8
|
throw new Err(message);
|
|
@@ -20,9 +14,9 @@ var PROCESSED_DATA;
|
|
|
20
14
|
function processData() {
|
|
21
15
|
var _a, _b;
|
|
22
16
|
if (!PROCESSED_DATA) {
|
|
23
|
-
var paradigmLocales = (_b = (_a =
|
|
24
|
-
var matchVariables =
|
|
25
|
-
var data =
|
|
17
|
+
var paradigmLocales = (_b = (_a = jsonData.supplemental.languageMatching['written-new'][0]) === null || _a === void 0 ? void 0 : _a.paradigmLocales) === null || _b === void 0 ? void 0 : _b._locales.split(' ');
|
|
18
|
+
var matchVariables = jsonData.supplemental.languageMatching['written-new'].slice(1, 5);
|
|
19
|
+
var data = jsonData.supplemental.languageMatching['written-new'].slice(5);
|
|
26
20
|
var matches = data.map(function (d) {
|
|
27
21
|
var key = Object.keys(d)[0];
|
|
28
22
|
var value = d[key];
|
|
@@ -41,7 +35,7 @@ function processData() {
|
|
|
41
35
|
all[key.slice(1)] = value._value.split('+');
|
|
42
36
|
return all;
|
|
43
37
|
}, {}),
|
|
44
|
-
paradigmLocales:
|
|
38
|
+
paradigmLocales: __spreadArray(__spreadArray([], paradigmLocales, true), paradigmLocales.map(function (l) {
|
|
45
39
|
return new Intl.Locale(l.replace(/_/g, '-')).maximize().toString();
|
|
46
40
|
}), true),
|
|
47
41
|
};
|
|
@@ -57,8 +51,8 @@ function isMatched(locale, languageMatchInfoLocale, matchVariables) {
|
|
|
57
51
|
? matchVariables[region.slice(1)]
|
|
58
52
|
: matchVariables[region.slice(2)];
|
|
59
53
|
var expandedMatchedRegions = matchRegions
|
|
60
|
-
.map(function (r) { return
|
|
61
|
-
.reduce(function (all, list) { return
|
|
54
|
+
.map(function (r) { return regions[r] || [r]; })
|
|
55
|
+
.reduce(function (all, list) { return __spreadArray(__spreadArray([], all, true), list, true); }, []);
|
|
62
56
|
matches && (matches = !(expandedMatchedRegions.indexOf(locale.region || '') > -1 !=
|
|
63
57
|
shouldInclude));
|
|
64
58
|
}
|
|
@@ -97,7 +91,7 @@ function findMatchingDistanceForLSR(desired, supported, data) {
|
|
|
97
91
|
}
|
|
98
92
|
throw new Error('No matching distance found');
|
|
99
93
|
}
|
|
100
|
-
function findMatchingDistance(desired, supported) {
|
|
94
|
+
export function findMatchingDistance(desired, supported) {
|
|
101
95
|
var desiredLocale = new Intl.Locale(desired).maximize();
|
|
102
96
|
var supportedLocale = new Intl.Locale(supported).maximize();
|
|
103
97
|
var desiredLSR = {
|
|
@@ -139,7 +133,7 @@ function findMatchingDistance(desired, supported) {
|
|
|
139
133
|
}
|
|
140
134
|
return matchingDistance;
|
|
141
135
|
}
|
|
142
|
-
function findBestMatch(requestedLocales, supportedLocales, threshold) {
|
|
136
|
+
export function findBestMatch(requestedLocales, supportedLocales, threshold) {
|
|
143
137
|
if (threshold === void 0) { threshold = DEFAULT_MATCHING_THRESHOLD; }
|
|
144
138
|
var lowestDistance = Infinity;
|
|
145
139
|
var result = {
|
package/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ export interface Opts {
|
|
|
2
2
|
algorithm: 'lookup' | 'best fit';
|
|
3
3
|
}
|
|
4
4
|
export declare function match(requestedLocales: readonly string[], availableLocales: readonly string[], defaultLocale: string, opts?: Opts): string;
|
|
5
|
-
export { LookupSupportedLocales } from './abstract/LookupSupportedLocales';
|
|
6
|
-
export { ResolveLocale } from './abstract/ResolveLocale';
|
|
5
|
+
export { LookupSupportedLocales } from './abstract/LookupSupportedLocales.js';
|
|
6
|
+
export { ResolveLocale } from './abstract/ResolveLocale.js';
|
package/index.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var CanonicalizeLocaleList_1 = require("./abstract/CanonicalizeLocaleList");
|
|
6
|
-
var ResolveLocale_1 = require("./abstract/ResolveLocale");
|
|
7
|
-
function match(requestedLocales, availableLocales, defaultLocale, opts) {
|
|
8
|
-
return (0, ResolveLocale_1.ResolveLocale)(availableLocales, (0, CanonicalizeLocaleList_1.CanonicalizeLocaleList)(requestedLocales), {
|
|
1
|
+
import { CanonicalizeLocaleList } from './abstract/CanonicalizeLocaleList.js';
|
|
2
|
+
import { ResolveLocale } from './abstract/ResolveLocale.js';
|
|
3
|
+
export function match(requestedLocales, availableLocales, defaultLocale, opts) {
|
|
4
|
+
return ResolveLocale(availableLocales, CanonicalizeLocaleList(requestedLocales), {
|
|
9
5
|
localeMatcher: (opts === null || opts === void 0 ? void 0 : opts.algorithm) || 'best fit',
|
|
10
6
|
}, [], {}, function () { return defaultLocale; }).locale;
|
|
11
7
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var ResolveLocale_2 = require("./abstract/ResolveLocale");
|
|
15
|
-
Object.defineProperty(exports, "ResolveLocale", { enumerable: true, get: function () { return ResolveLocale_2.ResolveLocale; } });
|
|
8
|
+
export { LookupSupportedLocales } from './abstract/LookupSupportedLocales.js';
|
|
9
|
+
export { ResolveLocale } from './abstract/ResolveLocale.js';
|
package/package.json
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@formatjs/intl-localematcher",
|
|
3
3
|
"description": "Intl.LocaleMatcher ponyfill",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.7.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Long Ho <holevietlong@gmail.com>",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"sideEffects": false,
|
|
7
9
|
"types": "index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./index.js"
|
|
12
|
+
},
|
|
8
13
|
"dependencies": {
|
|
9
14
|
"tslib": "^2.8.0"
|
|
10
15
|
},
|
|
@@ -19,7 +24,5 @@
|
|
|
19
24
|
"react-intl",
|
|
20
25
|
"tc39"
|
|
21
26
|
],
|
|
22
|
-
"main": "index.js",
|
|
23
|
-
"module": "lib/index.js",
|
|
24
27
|
"repository": "formatjs/formatjs.git"
|
|
25
28
|
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* https://tc39.es/ecma402/#sec-bestavailablelocale
|
|
3
|
-
* @param availableLocales
|
|
4
|
-
* @param locale
|
|
5
|
-
*/
|
|
6
|
-
export function BestAvailableLocale(availableLocales, locale) {
|
|
7
|
-
var candidate = locale;
|
|
8
|
-
while (true) {
|
|
9
|
-
if (availableLocales.indexOf(candidate) > -1) {
|
|
10
|
-
return candidate;
|
|
11
|
-
}
|
|
12
|
-
var pos = candidate.lastIndexOf('-');
|
|
13
|
-
if (!~pos) {
|
|
14
|
-
return undefined;
|
|
15
|
-
}
|
|
16
|
-
if (pos >= 2 && candidate[pos - 2] === '-') {
|
|
17
|
-
pos -= 2;
|
|
18
|
-
}
|
|
19
|
-
candidate = candidate.slice(0, pos);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { LookupMatcherResult } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* https://tc39.es/ecma402/#sec-bestfitmatcher
|
|
4
|
-
* @param availableLocales
|
|
5
|
-
* @param requestedLocales
|
|
6
|
-
* @param getDefaultLocale
|
|
7
|
-
*/
|
|
8
|
-
export declare function BestFitMatcher(availableLocales: readonly string[], requestedLocales: readonly string[], getDefaultLocale: () => string): LookupMatcherResult;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { UNICODE_EXTENSION_SEQUENCE_REGEX, findBestMatch } from './utils';
|
|
2
|
-
/**
|
|
3
|
-
* https://tc39.es/ecma402/#sec-bestfitmatcher
|
|
4
|
-
* @param availableLocales
|
|
5
|
-
* @param requestedLocales
|
|
6
|
-
* @param getDefaultLocale
|
|
7
|
-
*/
|
|
8
|
-
export function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {
|
|
9
|
-
var foundLocale;
|
|
10
|
-
var extension;
|
|
11
|
-
var noExtensionLocales = [];
|
|
12
|
-
var noExtensionLocaleMap = requestedLocales.reduce(function (all, l) {
|
|
13
|
-
var noExtensionLocale = l.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');
|
|
14
|
-
noExtensionLocales.push(noExtensionLocale);
|
|
15
|
-
all[noExtensionLocale] = l;
|
|
16
|
-
return all;
|
|
17
|
-
}, {});
|
|
18
|
-
var result = findBestMatch(noExtensionLocales, availableLocales);
|
|
19
|
-
if (result.matchedSupportedLocale && result.matchedDesiredLocale) {
|
|
20
|
-
foundLocale = result.matchedSupportedLocale;
|
|
21
|
-
extension =
|
|
22
|
-
noExtensionLocaleMap[result.matchedDesiredLocale].slice(result.matchedDesiredLocale.length) || undefined;
|
|
23
|
-
}
|
|
24
|
-
if (!foundLocale) {
|
|
25
|
-
return { locale: getDefaultLocale() };
|
|
26
|
-
}
|
|
27
|
-
return {
|
|
28
|
-
locale: foundLocale,
|
|
29
|
-
extension: extension,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function CanonicalizeUValue(ukey: string, uvalue: string): string;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { invariant } from './utils';
|
|
2
|
-
export function CanonicalizeUValue(ukey, uvalue) {
|
|
3
|
-
// TODO: Implement algorithm for CanonicalizeUValue per https://tc39.es/ecma402/#sec-canonicalizeuvalue
|
|
4
|
-
var lowerValue = uvalue.toLowerCase();
|
|
5
|
-
invariant(ukey !== undefined, "ukey must be defined");
|
|
6
|
-
var canonicalized = lowerValue;
|
|
7
|
-
return canonicalized;
|
|
8
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function CanonicalizeUnicodeLocaleId(locale: string): string;
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { CanonicalizeUnicodeLocaleId } from './CanonicalizeUnicodeLocaleId';
|
|
2
|
-
import { invariant } from './utils';
|
|
3
|
-
export function InsertUnicodeExtensionAndCanonicalize(locale, attributes, keywords) {
|
|
4
|
-
invariant(locale.indexOf('-u-') === -1, 'Expected locale to not have a Unicode locale extension');
|
|
5
|
-
var extension = '-u';
|
|
6
|
-
for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {
|
|
7
|
-
var attr = attributes_1[_i];
|
|
8
|
-
extension += "-".concat(attr);
|
|
9
|
-
}
|
|
10
|
-
for (var _a = 0, keywords_1 = keywords; _a < keywords_1.length; _a++) {
|
|
11
|
-
var kw = keywords_1[_a];
|
|
12
|
-
var key = kw.key, value = kw.value;
|
|
13
|
-
extension += "-".concat(key);
|
|
14
|
-
if (value !== '') {
|
|
15
|
-
extension += "-".concat(value);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
if (extension === '-u') {
|
|
19
|
-
return CanonicalizeUnicodeLocaleId(locale);
|
|
20
|
-
}
|
|
21
|
-
var privateIndex = locale.indexOf('-x-');
|
|
22
|
-
var newLocale;
|
|
23
|
-
if (privateIndex === -1) {
|
|
24
|
-
newLocale = locale + extension;
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
var preExtension = locale.slice(0, privateIndex);
|
|
28
|
-
var postExtension = locale.slice(privateIndex);
|
|
29
|
-
newLocale = preExtension + extension + postExtension;
|
|
30
|
-
}
|
|
31
|
-
return CanonicalizeUnicodeLocaleId(newLocale);
|
|
32
|
-
}
|