{"version":3,"sources":["../../../src/localization/getLocaleFromPath.ts"],"sourcesContent":["import configuration from '@intlayer/config/built';\nimport type { Locales } from '@intlayer/config/client';\nimport { checkIsURLAbsolute } from '../utils/checkIsURLAbsolute';\n\n/**\n * Extracts the locale segment from the given URL or pathname if present.\n * If no locale is present, returns the default locale (en).\n *\n * Example:\n *\n * ```ts\n * getLocaleFromPath('/en/dashboard') // Returns 'en'\n * getLocaleFromPath('/fr/dashboard') // Returns 'fr'\n * getLocaleFromPath('/dashboard') // Returns 'en'\n * getLocaleFromPath('dashboard') // Returns 'en'\n * getLocaleFromPath('https://example.com/es/dashboard') // Returns 'es'\n * getLocaleFromPath('https://example.com/fr/dashboard') // Returns 'fr'\n * getLocaleFromPath('https://example.com/dashboard') // Returns 'en'\n * ```\n *\n * @param inputUrl - The complete URL string or pathname to process.\n * @returns The detected locale or default (en) if no locale is found\n */\nexport const getLocaleFromPath = (inputUrl: string): Locales => {\n  // Define supported locales array\n  const { defaultLocale, locales } = configuration.internationalization;\n\n  // Determine if the original URL is absolute (includes protocol)\n  const isAbsoluteUrl = checkIsURLAbsolute(inputUrl);\n\n  let fixedInputUrl = inputUrl;\n\n  if (inputUrl.endsWith('/')) {\n    fixedInputUrl = inputUrl.slice(0, -1);\n  }\n\n  // Initialize a URL object if the URL is absolute\n  // For relative URLs, use a dummy base to leverage the URL API\n  const url = isAbsoluteUrl\n    ? new URL(fixedInputUrl)\n    : new URL(fixedInputUrl, 'http://example.com');\n\n  const pathname = url.pathname;\n\n  // Ensure the pathname starts with '/'\n  if (!pathname.startsWith('/')) {\n    // If not, return the default locale\n    return defaultLocale;\n  }\n\n  // Split the pathname to extract the first segment\n  const pathSegments = pathname.split('/');\n  const firstSegment = pathSegments[1]; // The segment after the first '/'\n\n  // Check if the first segment is a supported locale\n  if (firstSegment && locales.includes(firstSegment as Locales)) {\n    // Return the detected locale\n    return firstSegment as Locales;\n  }\n\n  // Return the default locale if no locale is found in the path\n  return defaultLocale;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0B;AAE1B,gCAAmC;AAqB5B,MAAM,oBAAoB,CAAC,aAA8B;AAE9D,QAAM,EAAE,eAAe,QAAQ,IAAI,aAAAA,QAAc;AAGjD,QAAM,oBAAgB,8CAAmB,QAAQ;AAEjD,MAAI,gBAAgB;AAEpB,MAAI,SAAS,SAAS,GAAG,GAAG;AAC1B,oBAAgB,SAAS,MAAM,GAAG,EAAE;AAAA,EACtC;AAIA,QAAM,MAAM,gBACR,IAAI,IAAI,aAAa,IACrB,IAAI,IAAI,eAAe,oBAAoB;AAE/C,QAAM,WAAW,IAAI;AAGrB,MAAI,CAAC,SAAS,WAAW,GAAG,GAAG;AAE7B,WAAO;AAAA,EACT;AAGA,QAAM,eAAe,SAAS,MAAM,GAAG;AACvC,QAAM,eAAe,aAAa,CAAC;AAGnC,MAAI,gBAAgB,QAAQ,SAAS,YAAuB,GAAG;AAE7D,WAAO;AAAA,EACT;AAGA,SAAO;AACT;","names":["configuration"]}