54 lines
1.8 KiB
JavaScript
54 lines
1.8 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "normalizeLocalePath", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return normalizeLocalePath;
|
|
}
|
|
});
|
|
/**
|
|
* A cache of lowercased locales for each list of locales. This is stored as a
|
|
* WeakMap so if the locales are garbage collected, the cache entry will be
|
|
* removed as well.
|
|
*/ const cache = new WeakMap();
|
|
function normalizeLocalePath(pathname, locales) {
|
|
// If locales is undefined, return the pathname as is.
|
|
if (!locales) return {
|
|
pathname
|
|
};
|
|
// Get the cached lowercased locales or create a new cache entry.
|
|
let lowercasedLocales = cache.get(locales);
|
|
if (!lowercasedLocales) {
|
|
lowercasedLocales = locales.map((locale)=>locale.toLowerCase());
|
|
cache.set(locales, lowercasedLocales);
|
|
}
|
|
let detectedLocale;
|
|
// The first segment will be empty, because it has a leading `/`. If
|
|
// there is no further segment, there is no locale (or it's the default).
|
|
const segments = pathname.split('/', 2);
|
|
// If there's no second segment (ie, the pathname is just `/`), there's no
|
|
// locale.
|
|
if (!segments[1]) return {
|
|
pathname
|
|
};
|
|
// The second segment will contain the locale part if any.
|
|
const segment = segments[1].toLowerCase();
|
|
// See if the segment matches one of the locales. If it doesn't, there is
|
|
// no locale (or it's the default).
|
|
const index = lowercasedLocales.indexOf(segment);
|
|
if (index < 0) return {
|
|
pathname
|
|
};
|
|
// Return the case-sensitive locale.
|
|
detectedLocale = locales[index];
|
|
// Remove the `/${locale}` part of the pathname.
|
|
pathname = pathname.slice(detectedLocale.length + 1) || '/';
|
|
return {
|
|
pathname,
|
|
detectedLocale
|
|
};
|
|
}
|
|
|
|
//# sourceMappingURL=normalize-locale-path.js.map
|