@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.
Files changed (70) hide show
  1. package/README.md +1 -1
  2. package/abstract/BestAvailableLocale.js +0 -1
  3. package/abstract/BestFitMatcher.js +0 -1
  4. package/abstract/CanonicalizeLocaleList.js +0 -2
  5. package/abstract/CanonicalizeUValue.d.ts +1 -0
  6. package/abstract/CanonicalizeUValue.js +11 -0
  7. package/abstract/CanonicalizeUnicodeLocaleId.d.ts +1 -0
  8. package/abstract/CanonicalizeUnicodeLocaleId.js +6 -0
  9. package/abstract/InsertUnicodeExtensionAndCanonicalize.d.ts +2 -0
  10. package/abstract/InsertUnicodeExtensionAndCanonicalize.js +35 -0
  11. package/abstract/LookupMatcher.js +0 -1
  12. package/abstract/LookupSupportedLocales.js +0 -1
  13. package/abstract/ResolveLocale.js +71 -46
  14. package/abstract/UnicodeExtensionComponents.d.ts +5 -0
  15. package/abstract/UnicodeExtensionComponents.js +45 -0
  16. package/abstract/UnicodeExtensionValue.js +0 -1
  17. package/abstract/languageMatching.d.ts +2234 -7968
  18. package/abstract/languageMatching.js +0 -1
  19. package/abstract/regions.generated.js +0 -1
  20. package/abstract/types.d.ts +4 -0
  21. package/abstract/types.js +0 -1
  22. package/abstract/utils.js +0 -1
  23. package/index.js +0 -1
  24. package/lib/abstract/BestAvailableLocale.js +0 -1
  25. package/lib/abstract/BestFitMatcher.js +0 -1
  26. package/lib/abstract/CanonicalizeLocaleList.js +0 -2
  27. package/lib/abstract/CanonicalizeUValue.d.ts +1 -0
  28. package/lib/abstract/CanonicalizeUValue.js +8 -0
  29. package/lib/abstract/CanonicalizeUnicodeLocaleId.d.ts +1 -0
  30. package/lib/abstract/CanonicalizeUnicodeLocaleId.js +3 -0
  31. package/lib/abstract/InsertUnicodeExtensionAndCanonicalize.d.ts +2 -0
  32. package/lib/abstract/InsertUnicodeExtensionAndCanonicalize.js +32 -0
  33. package/lib/abstract/LookupMatcher.js +0 -1
  34. package/lib/abstract/LookupSupportedLocales.js +0 -1
  35. package/lib/abstract/ResolveLocale.js +71 -46
  36. package/lib/abstract/UnicodeExtensionComponents.d.ts +5 -0
  37. package/lib/abstract/UnicodeExtensionComponents.js +42 -0
  38. package/lib/abstract/UnicodeExtensionValue.js +0 -1
  39. package/lib/abstract/languageMatching.d.ts +2234 -7968
  40. package/lib/abstract/languageMatching.js +0 -1
  41. package/lib/abstract/regions.generated.js +0 -1
  42. package/lib/abstract/types.d.ts +4 -0
  43. package/lib/abstract/types.js +0 -1
  44. package/lib/abstract/utils.js +0 -1
  45. package/lib/index.js +0 -1
  46. package/package.json +1 -1
  47. package/abstract/BestAvailableLocale.js.map +0 -1
  48. package/abstract/BestFitMatcher.js.map +0 -1
  49. package/abstract/CanonicalizeLocaleList.js.map +0 -1
  50. package/abstract/LookupMatcher.js.map +0 -1
  51. package/abstract/LookupSupportedLocales.js.map +0 -1
  52. package/abstract/ResolveLocale.js.map +0 -1
  53. package/abstract/UnicodeExtensionValue.js.map +0 -1
  54. package/abstract/languageMatching.js.map +0 -1
  55. package/abstract/regions.generated.js.map +0 -1
  56. package/abstract/types.js.map +0 -1
  57. package/abstract/utils.js.map +0 -1
  58. package/index.js.map +0 -1
  59. package/lib/abstract/BestAvailableLocale.js.map +0 -1
  60. package/lib/abstract/BestFitMatcher.js.map +0 -1
  61. package/lib/abstract/CanonicalizeLocaleList.js.map +0 -1
  62. package/lib/abstract/LookupMatcher.js.map +0 -1
  63. package/lib/abstract/LookupSupportedLocales.js.map +0 -1
  64. package/lib/abstract/ResolveLocale.js.map +0 -1
  65. package/lib/abstract/UnicodeExtensionValue.js.map +0 -1
  66. package/lib/abstract/languageMatching.js.map +0 -1
  67. package/lib/abstract/regions.generated.js.map +0 -1
  68. package/lib/abstract/types.js.map +0 -1
  69. package/lib/abstract/utils.js.map +0 -1
  70. package/lib/index.js.map +0 -1
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
1
  # Intl LocaleMatcher
2
2
 
3
- We've migrated the docs to https://formatjs.io/docs/polyfills/intl-localematcher.
3
+ We've migrated the docs to https://formatjs.github.io/docs/polyfills/intl-localematcher.
@@ -22,4 +22,3 @@ function BestAvailableLocale(availableLocales, locale) {
22
22
  candidate = candidate.slice(0, pos);
23
23
  }
24
24
  }
25
- //# sourceMappingURL=BestAvailableLocale.js.map
@@ -32,4 +32,3 @@ function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {
32
32
  extension: extension,
33
33
  };
34
34
  }
35
- //# sourceMappingURL=BestFitMatcher.js.map
@@ -6,7 +6,5 @@ exports.CanonicalizeLocaleList = CanonicalizeLocaleList;
6
6
  * @param locales
7
7
  */
8
8
  function CanonicalizeLocaleList(locales) {
9
- // TODO
10
9
  return Intl.getCanonicalLocales(locales);
11
10
  }
12
- //# sourceMappingURL=CanonicalizeLocaleList.js.map
@@ -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,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CanonicalizeUnicodeLocaleId = CanonicalizeUnicodeLocaleId;
4
+ function CanonicalizeUnicodeLocaleId(locale) {
5
+ return Intl.getCanonicalLocales(locale)[0];
6
+ }
@@ -0,0 +1,2 @@
1
+ import { Keyword } from './types';
2
+ export declare function InsertUnicodeExtensionAndCanonicalize(locale: string, attributes: string[], keywords: Array<Keyword>): 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
+ }
@@ -26,4 +26,3 @@ function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {
26
26
  result.locale = getDefaultLocale();
27
27
  return result;
28
28
  }
29
- //# sourceMappingURL=LookupMatcher.js.map
@@ -20,4 +20,3 @@ function LookupSupportedLocales(availableLocales, requestedLocales) {
20
20
  }
21
21
  return subset;
22
22
  }
23
- //# sourceMappingURL=LookupSupportedLocales.js.map
@@ -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 UnicodeExtensionValue_1 = require("./UnicodeExtensionValue");
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 result = { locale: '', dataLocale: foundLocale };
22
- var supportedExtension = '-u';
23
- for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {
24
- var key = relevantExtensionKeys_1[_i];
25
- (0, utils_1.invariant)(foundLocale in localeData, "Missing locale data for ".concat(foundLocale));
26
- var foundLocaleData = localeData[foundLocale];
27
- (0, utils_1.invariant)(typeof foundLocaleData === 'object' && foundLocaleData !== null, "locale data ".concat(key, " must be an object"));
28
- var keyLocaleData = foundLocaleData[key];
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)(typeof value === 'string' || value === null, "value must be string or null but got ".concat(typeof value, " in key ").concat(key));
32
- var supportedExtensionAddition = '';
33
- if (r.extension) {
34
- var requestedValue = (0, UnicodeExtensionValue_1.UnicodeExtensionValue)(r.extension, key);
35
- if (requestedValue !== undefined) {
36
- if (requestedValue !== '') {
37
- if (~keyLocaleData.indexOf(requestedValue)) {
38
- value = requestedValue;
39
- supportedExtensionAddition = "-".concat(key, "-").concat(value);
40
- }
41
- }
42
- else if (~requestedValue.indexOf('true')) {
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
- if (key in options) {
49
- var optionsValue = options[key];
50
- (0, utils_1.invariant)(typeof optionsValue === 'string' ||
51
- typeof optionsValue === 'undefined' ||
52
- optionsValue === null, 'optionsValue must be String, Undefined or Null');
53
- if (~keyLocaleData.indexOf(optionsValue)) {
54
- if (optionsValue !== value) {
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
- result[key] = value;
61
- supportedExtension += supportedExtensionAddition;
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
- else {
69
- var preExtension = foundLocale.slice(0, privateIndex);
70
- var postExtension = foundLocale.slice(privateIndex, foundLocale.length);
71
- foundLocale = preExtension + supportedExtension + postExtension;
87
+ if (supportedKeyword) {
88
+ supportedKeywords.push(supportedKeyword);
72
89
  }
73
- foundLocale = Intl.getCanonicalLocales(foundLocale)[0];
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,5 @@
1
+ import { Keyword } from './types';
2
+ export declare function UnicodeExtensionComponents(extension: string): {
3
+ attributes: string[];
4
+ keywords: Array<Keyword>;
5
+ };
@@ -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
+ }
@@ -47,4 +47,3 @@ function UnicodeExtensionValue(extension, key) {
47
47
  }
48
48
  return undefined;
49
49
  }
50
- //# sourceMappingURL=UnicodeExtensionValue.js.map