@formatjs/intl-localematcher 0.5.1 → 0.5.2

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/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 FormatJS
3
+ Copyright (c) 2023 FormatJS
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
6
 
@@ -1,12 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BestAvailableLocale = void 0;
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) {
@@ -22,4 +19,3 @@ function BestAvailableLocale(availableLocales, locale) {
22
19
  candidate = candidate.slice(0, pos);
23
20
  }
24
21
  }
25
- exports.BestAvailableLocale = BestAvailableLocale;
@@ -1,24 +1,21 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BestFitMatcher = void 0;
4
- var utils_1 = require("./utils");
1
+ import { UNICODE_EXTENSION_SEQUENCE_REGEX, findBestMatch } from './utils';
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(utils_1.UNICODE_EXTENSION_SEQUENCE_REGEX, '');
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 = (0, utils_1.findBestMatch)(noExtensionLocales, availableLocales);
18
+ var result = findBestMatch(noExtensionLocales, availableLocales);
22
19
  if (result.matchedSupportedLocale && result.matchedDesiredLocale) {
23
20
  foundLocale = result.matchedSupportedLocale;
24
21
  extension =
@@ -32,4 +29,3 @@ function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {
32
29
  extension: extension,
33
30
  };
34
31
  }
35
- exports.BestFitMatcher = BestFitMatcher;
@@ -1,12 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CanonicalizeLocaleList = void 0;
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
  // TODO
10
7
  return Intl.getCanonicalLocales(locales);
11
8
  }
12
- exports.CanonicalizeLocaleList = CanonicalizeLocaleList;
@@ -1,20 +1,17 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LookupMatcher = void 0;
4
- var BestAvailableLocale_1 = require("./BestAvailableLocale");
5
- var utils_1 = require("./utils");
1
+ import { BestAvailableLocale } from './BestAvailableLocale';
2
+ import { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils';
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(utils_1.UNICODE_EXTENSION_SEQUENCE_REGEX, '');
17
- var availableLocale = (0, BestAvailableLocale_1.BestAvailableLocale)(availableLocales, noExtensionLocale);
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) {
@@ -26,4 +23,3 @@ function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {
26
23
  result.locale = getDefaultLocale();
27
24
  return result;
28
25
  }
29
- exports.LookupMatcher = LookupMatcher;
@@ -1,23 +1,19 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LookupSupportedLocales = void 0;
4
- var BestAvailableLocale_1 = require("./BestAvailableLocale");
5
- var utils_1 = require("./utils");
1
+ import { BestAvailableLocale } from './BestAvailableLocale';
2
+ import { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils';
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(utils_1.UNICODE_EXTENSION_SEQUENCE_REGEX, '');
16
- var availableLocale = (0, BestAvailableLocale_1.BestAvailableLocale)(availableLocales, noExtensionLocale);
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
  }
20
17
  }
21
18
  return subset;
22
19
  }
23
- exports.LookupSupportedLocales = LookupSupportedLocales;
@@ -1,37 +1,34 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResolveLocale = void 0;
4
- var BestFitMatcher_1 = require("./BestFitMatcher");
5
- var LookupMatcher_1 = require("./LookupMatcher");
6
- var UnicodeExtensionValue_1 = require("./UnicodeExtensionValue");
7
- var utils_1 = require("./utils");
1
+ import { BestFitMatcher } from './BestFitMatcher';
2
+ import { LookupMatcher } from './LookupMatcher';
3
+ import { UnicodeExtensionValue } from './UnicodeExtensionValue';
4
+ import { invariant } from './utils';
8
5
  /**
9
6
  * https://tc39.es/ecma402/#sec-resolvelocale
10
7
  */
11
- function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {
8
+ export function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {
12
9
  var matcher = options.localeMatcher;
13
10
  var r;
14
11
  if (matcher === 'lookup') {
15
- r = (0, LookupMatcher_1.LookupMatcher)(Array.from(availableLocales), requestedLocales, getDefaultLocale);
12
+ r = LookupMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
16
13
  }
17
14
  else {
18
- r = (0, BestFitMatcher_1.BestFitMatcher)(Array.from(availableLocales), requestedLocales, getDefaultLocale);
15
+ r = BestFitMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
19
16
  }
20
17
  var foundLocale = r.locale;
21
18
  var result = { locale: '', dataLocale: foundLocale };
22
19
  var supportedExtension = '-u';
23
20
  for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {
24
21
  var key = relevantExtensionKeys_1[_i];
25
- (0, utils_1.invariant)(foundLocale in localeData, "Missing locale data for ".concat(foundLocale));
22
+ invariant(foundLocale in localeData, "Missing locale data for ".concat(foundLocale));
26
23
  var foundLocaleData = localeData[foundLocale];
27
- (0, utils_1.invariant)(typeof foundLocaleData === 'object' && foundLocaleData !== null, "locale data ".concat(key, " must be an object"));
24
+ invariant(typeof foundLocaleData === 'object' && foundLocaleData !== null, "locale data ".concat(key, " must be an object"));
28
25
  var keyLocaleData = foundLocaleData[key];
29
- (0, utils_1.invariant)(Array.isArray(keyLocaleData), "keyLocaleData for ".concat(key, " must be an array"));
26
+ invariant(Array.isArray(keyLocaleData), "keyLocaleData for ".concat(key, " must be an array"));
30
27
  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));
28
+ invariant(typeof value === 'string' || value === null, "value must be string or null but got ".concat(typeof value, " in key ").concat(key));
32
29
  var supportedExtensionAddition = '';
33
30
  if (r.extension) {
34
- var requestedValue = (0, UnicodeExtensionValue_1.UnicodeExtensionValue)(r.extension, key);
31
+ var requestedValue = UnicodeExtensionValue(r.extension, key);
35
32
  if (requestedValue !== undefined) {
36
33
  if (requestedValue !== '') {
37
34
  if (~keyLocaleData.indexOf(requestedValue)) {
@@ -47,7 +44,7 @@ function ResolveLocale(availableLocales, requestedLocales, options, relevantExte
47
44
  }
48
45
  if (key in options) {
49
46
  var optionsValue = options[key];
50
- (0, utils_1.invariant)(typeof optionsValue === 'string' ||
47
+ invariant(typeof optionsValue === 'string' ||
51
48
  typeof optionsValue === 'undefined' ||
52
49
  optionsValue === null, 'optionsValue must be String, Undefined or Null');
53
50
  if (~keyLocaleData.indexOf(optionsValue)) {
@@ -75,4 +72,3 @@ function ResolveLocale(availableLocales, requestedLocales, options, relevantExte
75
72
  result.locale = foundLocale;
76
73
  return result;
77
74
  }
78
- exports.ResolveLocale = ResolveLocale;
@@ -1,14 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UnicodeExtensionValue = void 0;
4
- var utils_1 = require("./utils");
1
+ import { invariant } from './utils';
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
- (0, utils_1.invariant)(key.length === 2, 'key must have 2 elements');
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);
@@ -47,4 +44,3 @@ function UnicodeExtensionValue(extension, key) {
47
44
  }
48
45
  return undefined;
49
46
  }
50
- exports.UnicodeExtensionValue = UnicodeExtensionValue;
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.data = void 0;
4
- exports.data = {
1
+ export var data = {
5
2
  supplemental: {
6
3
  languageMatching: {
7
4
  'written-new': [
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.regions = void 0;
4
1
  // This file is generated from regions-gen.ts
5
- exports.regions = {
2
+ export var regions = {
6
3
  "001": [
7
4
  "001",
8
5
  "001-status-grouping",
@@ -1,2 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
@@ -1,26 +1,22 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findBestMatch = exports.findMatchingDistance = exports.invariant = exports.UNICODE_EXTENSION_SEQUENCE_REGEX = void 0;
4
- var tslib_1 = require("tslib");
5
- var languageMatching_1 = require("./languageMatching");
6
- var regions_generated_1 = require("./regions.generated");
7
- exports.UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;
8
- function invariant(condition, message, Err) {
1
+ import { __spreadArray } from "tslib";
2
+ import { data as jsonData } from './languageMatching';
3
+ import { regions } from './regions.generated';
4
+ export var UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;
5
+ export function invariant(condition, message, Err) {
9
6
  if (Err === void 0) { Err = Error; }
10
7
  if (!condition) {
11
8
  throw new Err(message);
12
9
  }
13
10
  }
14
- exports.invariant = invariant;
15
11
  // This is effectively 2 languages in 2 different regions not even in the same cluster
16
12
  var DEFAULT_MATCHING_THRESHOLD = 840;
17
13
  var PROCESSED_DATA;
18
14
  function processData() {
19
15
  var _a, _b;
20
16
  if (!PROCESSED_DATA) {
21
- var paradigmLocales = (_b = (_a = languageMatching_1.data.supplemental.languageMatching['written-new'][0]) === null || _a === void 0 ? void 0 : _a.paradigmLocales) === null || _b === void 0 ? void 0 : _b._locales.split(' ');
22
- var matchVariables = languageMatching_1.data.supplemental.languageMatching['written-new'].slice(1, 5);
23
- var data = languageMatching_1.data.supplemental.languageMatching['written-new'].slice(5);
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);
24
20
  var matches = data.map(function (d) {
25
21
  var key = Object.keys(d)[0];
26
22
  var value = d[key];
@@ -39,7 +35,7 @@ function processData() {
39
35
  all[key.slice(1)] = value._value.split('+');
40
36
  return all;
41
37
  }, {}),
42
- paradigmLocales: tslib_1.__spreadArray(tslib_1.__spreadArray([], paradigmLocales, true), paradigmLocales.map(function (l) {
38
+ paradigmLocales: __spreadArray(__spreadArray([], paradigmLocales, true), paradigmLocales.map(function (l) {
43
39
  return new Intl.Locale(l.replace(/_/g, '-')).maximize().toString();
44
40
  }), true),
45
41
  };
@@ -55,8 +51,8 @@ function isMatched(locale, languageMatchInfoLocale, matchVariables) {
55
51
  ? matchVariables[region.slice(1)]
56
52
  : matchVariables[region.slice(2)];
57
53
  var expandedMatchedRegions = matchRegions
58
- .map(function (r) { return regions_generated_1.regions[r] || [r]; })
59
- .reduce(function (all, list) { return tslib_1.__spreadArray(tslib_1.__spreadArray([], all, true), list, true); }, []);
54
+ .map(function (r) { return regions[r] || [r]; })
55
+ .reduce(function (all, list) { return __spreadArray(__spreadArray([], all, true), list, true); }, []);
60
56
  matches && (matches = !(expandedMatchedRegions.indexOf(locale.region || '') > 1 !=
61
57
  shouldInclude));
62
58
  }
@@ -95,7 +91,7 @@ function findMatchingDistanceForLSR(desired, supported, data) {
95
91
  }
96
92
  throw new Error('No matching distance found');
97
93
  }
98
- function findMatchingDistance(desired, supported) {
94
+ export function findMatchingDistance(desired, supported) {
99
95
  var desiredLocale = new Intl.Locale(desired).maximize();
100
96
  var supportedLocale = new Intl.Locale(supported).maximize();
101
97
  var desiredLSR = {
@@ -137,8 +133,7 @@ function findMatchingDistance(desired, supported) {
137
133
  }
138
134
  return matchingDistance;
139
135
  }
140
- exports.findMatchingDistance = findMatchingDistance;
141
- function findBestMatch(requestedLocales, supportedLocales, threshold) {
136
+ export function findBestMatch(requestedLocales, supportedLocales, threshold) {
142
137
  if (threshold === void 0) { threshold = DEFAULT_MATCHING_THRESHOLD; }
143
138
  var lowestDistance = Infinity;
144
139
  var result = {
@@ -167,4 +162,3 @@ function findBestMatch(requestedLocales, supportedLocales, threshold) {
167
162
  }
168
163
  return result;
169
164
  }
170
- exports.findBestMatch = findBestMatch;
package/lib/index.js CHANGED
@@ -1,15 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResolveLocale = exports.LookupSupportedLocales = exports.match = void 0;
4
- var CanonicalizeLocaleList_1 = require("./abstract/CanonicalizeLocaleList");
5
- var ResolveLocale_1 = require("./abstract/ResolveLocale");
6
- function match(requestedLocales, availableLocales, defaultLocale, opts) {
7
- return (0, ResolveLocale_1.ResolveLocale)(availableLocales, (0, CanonicalizeLocaleList_1.CanonicalizeLocaleList)(requestedLocales), {
1
+ import { CanonicalizeLocaleList } from './abstract/CanonicalizeLocaleList';
2
+ import { ResolveLocale } from './abstract/ResolveLocale';
3
+ export function match(requestedLocales, availableLocales, defaultLocale, opts) {
4
+ return ResolveLocale(availableLocales, CanonicalizeLocaleList(requestedLocales), {
8
5
  localeMatcher: (opts === null || opts === void 0 ? void 0 : opts.algorithm) || 'best fit',
9
6
  }, [], {}, function () { return defaultLocale; }).locale;
10
7
  }
11
- exports.match = match;
12
- var LookupSupportedLocales_1 = require("./abstract/LookupSupportedLocales");
13
- Object.defineProperty(exports, "LookupSupportedLocales", { enumerable: true, get: function () { return LookupSupportedLocales_1.LookupSupportedLocales; } });
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';
9
+ export { ResolveLocale } from './abstract/ResolveLocale';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@formatjs/intl-localematcher",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "Intl.LocaleMatcher ponyfill",
5
5
  "keywords": [
6
6
  "intl",