frontend/.pnpm-store/v3/files/54/a39890e3a2403461073d238326e66c7c2dcaa9d3557d41f04b27e9936116ff7c502565984772deaf0f8534f48f56cd852448fb5e4d5eb013183b4cabaf59e7-exec

66 lines
2.5 KiB
Plaintext
Executable File

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BestFitMatcher = void 0;
var BestAvailableLocale_1 = require("./BestAvailableLocale");
var utils_1 = require("./utils");
/**
* https://tc39.es/ecma402/#sec-bestfitmatcher
* @param availableLocales
* @param requestedLocales
* @param getDefaultLocale
*/
function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {
var minimizedAvailableLocaleMap = {};
var availableLocaleMap = {};
var canonicalizedLocaleMap = {};
var minimizedAvailableLocales = new Set();
availableLocales.forEach(function (locale) {
var minimizedLocale = new Intl.Locale(locale)
.minimize()
.toString();
var canonicalizedLocale = Intl.getCanonicalLocales(locale)[0] || locale;
minimizedAvailableLocaleMap[minimizedLocale] = locale;
availableLocaleMap[locale] = locale;
canonicalizedLocaleMap[canonicalizedLocale] = locale;
minimizedAvailableLocales.add(minimizedLocale);
minimizedAvailableLocales.add(locale);
minimizedAvailableLocales.add(canonicalizedLocale);
});
var foundLocale;
for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {
var l = requestedLocales_1[_i];
if (foundLocale) {
break;
}
var noExtensionLocale = l.replace(utils_1.UNICODE_EXTENSION_SEQUENCE_REGEX, '');
if (availableLocales.has(noExtensionLocale)) {
foundLocale = noExtensionLocale;
break;
}
if (minimizedAvailableLocales.has(noExtensionLocale)) {
foundLocale = noExtensionLocale;
break;
}
var locale = new Intl.Locale(noExtensionLocale);
var maximizedRequestedLocale = locale.maximize().toString();
var minimizedRequestedLocale = locale.minimize().toString();
// Check minimized locale
if (minimizedAvailableLocales.has(minimizedRequestedLocale)) {
foundLocale = minimizedRequestedLocale;
break;
}
// Lookup algo on maximized locale
foundLocale = (0, BestAvailableLocale_1.BestAvailableLocale)(minimizedAvailableLocales, maximizedRequestedLocale);
}
if (!foundLocale) {
return { locale: getDefaultLocale() };
}
return {
locale: availableLocaleMap[foundLocale] ||
canonicalizedLocaleMap[foundLocale] ||
minimizedAvailableLocaleMap[foundLocale] ||
foundLocale,
};
}
exports.BestFitMatcher = BestFitMatcher;