{"version":3,"file":"getPrefix.mjs","names":[],"sources":["../../../src/localization/getPrefix.ts"],"sourcesContent":["import configuration from '@intlayer/config/built';\nimport type { Locale, LocalesValues } from '@intlayer/types';\n\nexport type GetPrefixOptions = {\n  defaultLocale?: LocalesValues;\n  mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params';\n};\n\nexport type GetPrefixResult = {\n  /**\n   * The complete base URL path with leading and trailing slashes.\n   *\n   * @example\n   * // https://example.com/fr/about -> '/fr'\n   * // https://example.com/about -> ''\n   */\n  prefix: string;\n  /**\n   * The locale identifier without slashes.\n   *\n   * @example\n   * // https://example.com/fr/about -> 'fr'\n   * // https://example.com/about -> undefined\n   */\n  localePrefix: Locale | undefined;\n};\n\n/**\n * Determines the URL prefix for a given locale based on the routing mode configuration.\n *\n * Example:\n *\n * ```ts\n *  // prefix-no-default mode with default locale\n *  getPrefix('en', { defaultLocale: 'en', mode: 'prefix-no-default' })\n *     // Returns { prefix: '', localePrefix: undefined }\n *\n *  // prefix-no-default mode with non-default locale\n *  getPrefix('fr', { defaultLocale: 'en', mode: 'prefix-no-default' })\n *     // Returns { prefix: '/fr', localePrefix: 'fr' }\n *\n *  // prefix-all mode\n *  getPrefix('en', { defaultLocale: 'en', mode: 'prefix-all' })\n *     // Returns { prefix: '/en', localePrefix: locale }\n *\n *  // search-params mode\n *  getPrefix('en', { defaultLocale: 'en', mode: 'search-params' })\n *     // Returns { prefix: '', localePrefix: undefined }\n *\n *  // no-prefix mode\n *  getPrefix('en', { defaultLocale: 'en', mode: 'no-prefix' })\n *     // Returns { prefix: '', localePrefix: undefined }\n * ```\n *\n * @param locale - The locale to check for prefix. If not provided, uses configured default locale.\n * @param options - Configuration options\n * @param options.defaultLocale - The default locale. Defaults to configured default locale.\n * @param options.mode - URL routing mode for locale handling. Defaults to configured mode.\n * @returns An object containing pathPrefix, prefix, and localePrefix for the given locale.\n */\nexport const getPrefix = (\n  locale: LocalesValues,\n  options: {\n    defaultLocale?: LocalesValues;\n    mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params';\n  } = {}\n): GetPrefixResult => {\n  const {\n    defaultLocale = configuration?.internationalization?.defaultLocale,\n    mode = configuration?.routing?.mode,\n  } = options;\n\n  if (!locale) {\n    return {\n      prefix: '',\n      localePrefix: undefined,\n    };\n  }\n\n  // Handle prefix-based modes (prefix-all or prefix-no-default)\n  const shouldPrefix =\n    mode === 'prefix-all' ||\n    (mode === 'prefix-no-default' && defaultLocale !== locale);\n\n  if (shouldPrefix) {\n    return {\n      prefix: `${locale}/`,\n      localePrefix: locale as Locale,\n    };\n  }\n\n  return {\n    prefix: '',\n    localePrefix: undefined,\n  };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,MAAa,aACX,QACA,UAGI,EAAE,KACc;CACpB,MAAM,EACJ,gBAAgB,eAAe,sBAAsB,eACrD,OAAO,eAAe,SAAS,SAC7B;AAEJ,KAAI,CAAC,OACH,QAAO;EACL,QAAQ;EACR,cAAc;EACf;AAQH,KAHE,SAAS,gBACR,SAAS,uBAAuB,kBAAkB,OAGnD,QAAO;EACL,QAAQ,GAAG,OAAO;EAClB,cAAc;EACf;AAGH,QAAO;EACL,QAAQ;EACR,cAAc;EACf"}