UNPKG

next

Version:

The React Framework

54 lines (53 loc) 1.89 kB
"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