@i18n-micro/path-strategy 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"prefix-except-default-strategy.cjs","sources":["../src/strategies/prefix-except-default.ts"],"sourcesContent":["import { cleanDoubleSlashes, isSamePath, withoutLeadingSlash } from 'ufo'\nimport type { NormalizedRouteInput, ResolvedRouteLike, RouteLike, SwitchLocaleOptions } from '../core/types'\nimport {\n getCleanPath,\n getPathSegments,\n joinUrl,\n lastPathSegment,\n nameKeyFirstSlash,\n nameKeyLastSlash,\n normalizePath,\n normalizePathForCompare,\n parentKeyFromSlashKey,\n transformNameKeyToPath,\n} from '../utils/path'\nimport { isIndexRouteName } from '../utils/route-name'\nimport { BasePathStrategy } from './base-strategy'\n\nexport class PrefixExceptDefaultPathStrategy extends BasePathStrategy {\n /**\n * For this strategy a prefix is required for all non-default locales,\n * unless includeDefaultLocaleRoute is explicitly enabled.\n */\n protected shouldHavePrefix(locale: string): boolean {\n if (this.ctx.includeDefaultLocaleRoute) return true\n if (locale === this.ctx.defaultLocale) return false\n // When locale has baseUrl with baseDefault=true, no prefix needed (uses root on separate domain)\n const localeObj = this.ctx.locales.find((l) => l.code === locale)\n if (localeObj?.baseUrl && localeObj?.baseDefault) return false\n return true\n }\n\n protected buildLocalizedPath(path: string, locale: string, _isCustom: boolean): string {\n if (!this.shouldHavePrefix(locale)) return normalizePath(path)\n return joinUrl(locale, normalizePath(path))\n }\n\n protected buildLocalizedRouteName(baseName: string, locale: string): string {\n if (!this.shouldHavePrefix(locale)) return baseName\n return this.buildLocalizedName(baseName, locale)\n }\n\n override switchLocaleRoute(fromLocale: string, toLocale: string, route: ResolvedRouteLike, options: SwitchLocaleOptions): RouteLike | string {\n const baseName = this.getBaseRouteName(route, fromLocale)\n if (!baseName) return route\n\n // For non-default locale, try route name with locale suffix first (custom paths),\n // then without suffix (standard routes like \"localized-page\")\n let targetName: string\n if (this.shouldHavePrefix(toLocale)) {\n const nameWithSuffix = this.buildLocalizedName(baseName, toLocale)\n const nameWithoutSuffix = `${this.getLocalizedRouteNamePrefix()}${baseName}`\n targetName = this.ctx.router.hasRoute(nameWithSuffix) ? nameWithSuffix : nameWithoutSuffix\n } else {\n targetName = baseName\n }\n\n if (this.ctx.router.hasRoute(targetName)) {\n const i18nParams = options.i18nRouteParams?.[toLocale] || {}\n const newParams: Record<string, unknown> = { ...(route.params || {}), ...i18nParams }\n // Always set locale param for non-default locales because routes may have /:locale(...) in path\n if (this.shouldHavePrefix(toLocale)) {\n newParams.locale = toLocale\n } else {\n delete newParams.locale\n }\n\n // Resolve to get the actual path for applyBaseUrl\n const resolved = this.ctx.router.resolve({ name: targetName, params: newParams })\n const newRoute: RouteLike = {\n name: targetName,\n params: newParams,\n path: resolved?.path,\n fullPath: resolved?.fullPath,\n query: route.query,\n hash: route.hash,\n }\n\n return this.applyBaseUrl(toLocale, newRoute)\n }\n\n // Fallback: build path-based route\n const pathWithoutLocale = route.path?.replace(new RegExp(`^/${fromLocale}`), '') || '/'\n const targetPath = this.buildLocalizedPath(pathWithoutLocale, toLocale, false)\n return this.applyBaseUrl(toLocale, { path: targetPath, query: route.query, hash: route.hash })\n }\n\n protected override resolveLocaleRoute(\n targetLocale: string,\n normalized: NormalizedRouteInput,\n currentRoute?: ResolvedRouteLike,\n ): RouteLike | string {\n if (normalized.kind === 'path') {\n const path = this.resolvePathForLocale(normalized.path, targetLocale)\n if (!this.shouldHavePrefix(targetLocale)) return this.applyBaseUrl(targetLocale, path)\n const newPath = joinUrl(targetLocale, path)\n return this.applyBaseUrl(targetLocale, newPath)\n }\n\n const { inputName, sourceRoute, resolved } = normalized\n if (inputName) {\n const unlocalizedByName = this.getPathForUnlocalizedRouteByName(inputName)\n if (unlocalizedByName !== null) return this.preserveQueryAndHash(unlocalizedByName, sourceRoute)\n const keyLastSlash = nameKeyLastSlash(inputName)\n const syntheticPath = `/${keyLastSlash}`\n const syntheticResolved: ResolvedRouteLike = {\n name: inputName,\n path: syntheticPath,\n fullPath: syntheticPath,\n params: sourceRoute.params ?? {},\n }\n const customBySynthetic = this.getCustomPathSegment(syntheticResolved, targetLocale)\n if (customBySynthetic !== null) {\n const nestedInfo = this.getNestedRouteInfo(inputName)\n let pathNorm: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customBySynthetic.startsWith('/') ? customBySynthetic.slice(1) : customBySynthetic\n pathNorm = parentPath ? joinUrl(parentPath, segment) : normalizePath(customBySynthetic)\n } else {\n pathNorm = normalizePath(customBySynthetic)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, pathNorm), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, pathNorm)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n }\n\n const hasParams = sourceRoute.params && Object.keys(sourceRoute.params ?? {}).length > 0\n if (inputName && hasParams) {\n // For default locale, try resolving base route name first (without localized prefix)\n if (!this.shouldHavePrefix(targetLocale) && this.ctx.router.hasRoute(inputName)) {\n const resolved = this.ctx.router.resolve({\n name: inputName,\n params: sourceRoute.params,\n query: sourceRoute.query,\n hash: sourceRoute.hash,\n })\n if (resolved?.path && resolved.path !== '/') {\n const routeResult: RouteLike = {\n name: inputName,\n path: resolved.path,\n fullPath: resolved.fullPath,\n params: resolved.params,\n query: resolved.query ?? sourceRoute.query,\n hash: resolved.hash ?? sourceRoute.hash,\n }\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeResult), sourceRoute)\n }\n }\n const routeWithParams = this.tryResolveByLocalizedNameWithParams(inputName, targetLocale, sourceRoute.params ?? {}, sourceRoute)\n if (routeWithParams !== null) {\n const applied = this.applyBaseUrl(targetLocale, routeWithParams)\n return this.preserveQueryAndHash(applied, sourceRoute)\n }\n }\n\n if (resolved.name != null) {\n const unlocalizedPath = this.getPathForUnlocalizedRoute(resolved)\n if (unlocalizedPath !== null) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, unlocalizedPath), sourceRoute)\n }\n // When route has custom path for target locale (globalLocaleRoutes), build path string so href is correct\n const customSegment = this.getCustomPathSegment(resolved, targetLocale)\n if (customSegment !== null) {\n const routeName = resolved.name?.toString() ?? inputName ?? ''\n const nestedInfo = routeName ? this.getNestedRouteInfo(routeName) : null\n let path: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customSegment.startsWith('/') ? customSegment.slice(1) : customSegment\n path = joinUrl(parentPath, segment)\n } else {\n path = normalizePath(customSegment)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, path), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, path)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n // Use resolved path when valid. Prefer custom path for target locale; for nested routes build parent path + custom segment.\n if (resolved.path && resolved.path !== '/' && resolved.name) {\n const { pathWithoutLocale, baseRouteName } = this.getPathWithoutLocaleAndBaseName(resolved)\n const customForTarget = this.getCustomPathSegment(resolved, targetLocale)\n const nestedInfo = baseRouteName ? this.getNestedRouteInfo(baseRouteName) : null\n const isNested = !!nestedInfo\n let pathToUse: string | null\n if (customForTarget !== null && isNested && nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customForTarget.startsWith('/') ? customForTarget.slice(1) : customForTarget\n pathToUse = joinUrl(parentPath, segment)\n } else if (isNested && customForTarget === null && pathWithoutLocale && pathWithoutLocale !== '/' && nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = lastPathSegment(pathWithoutLocale)\n pathToUse = parentPath ? joinUrl(parentPath, segment) : pathWithoutLocale !== '/' ? pathWithoutLocale : null\n } else {\n pathToUse =\n customForTarget !== null && !isNested\n ? normalizePath(customForTarget)\n : pathWithoutLocale && pathWithoutLocale !== '/'\n ? pathWithoutLocale\n : null\n }\n if (pathToUse) {\n const fromLocale = this.detectLocaleFromName(resolved.name)\n const baseName = fromLocale ? this.getBaseRouteName(resolved, fromLocale) : resolved.name ? this.getRouteBaseName(resolved) : null\n const targetName = baseName\n ? this.shouldHavePrefix(targetLocale)\n ? this.buildLocalizedName(baseName, targetLocale)\n : baseName.toString()\n : undefined\n const pathForLocale = this.shouldHavePrefix(targetLocale) ? joinUrl(targetLocale, pathToUse) : pathToUse\n const routeWithName: RouteLike = {\n ...(targetName ? { name: targetName } : {}),\n path: pathForLocale,\n fullPath: pathForLocale,\n params: { ...resolved.params, ...sourceRoute.params },\n query: { ...resolved.query, ...sourceRoute.query },\n hash: sourceRoute.hash ?? resolved.hash,\n }\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeWithName), sourceRoute)\n }\n }\n }\n // When resolved failed (e.g. router has only localized names), try getCustomPathSegment by synthetic path from inputName\n if (inputName) {\n const keyLastSlash = nameKeyLastSlash(inputName)\n const syntheticPath = `/${keyLastSlash}`\n const syntheticResolved: ResolvedRouteLike = {\n name: inputName,\n path: syntheticPath,\n fullPath: syntheticPath,\n params: sourceRoute.params ?? {},\n }\n const customBySynthetic = this.getCustomPathSegment(syntheticResolved, targetLocale)\n if (customBySynthetic !== null) {\n const nestedInfo = this.getNestedRouteInfo(inputName)\n let pathNorm: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customBySynthetic.startsWith('/') ? customBySynthetic.slice(1) : customBySynthetic\n pathNorm = joinUrl(parentPath || '/', segment)\n } else {\n pathNorm = normalizePath(customBySynthetic)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, pathNorm), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, pathNorm)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n }\n if (inputName && !hasParams) {\n // For default locale, try base route name first (e.g. 'index' instead of 'localized-index')\n if (!this.shouldHavePrefix(targetLocale)) {\n // Default locale: try to resolve baseName directly\n if (this.ctx.router.hasRoute(inputName)) {\n const resolvedBase = this.ctx.router.resolve({\n name: inputName,\n params: sourceRoute.params,\n query: sourceRoute.query,\n hash: sourceRoute.hash,\n })\n if (resolvedBase?.path) {\n return this.preserveQueryAndHash(\n this.applyBaseUrl(targetLocale, {\n name: inputName,\n path: resolvedBase.path,\n fullPath: resolvedBase.fullPath,\n params: resolvedBase.params,\n query: resolvedBase.query ?? sourceRoute.query,\n hash: resolvedBase.hash ?? sourceRoute.hash,\n }),\n sourceRoute,\n )\n }\n }\n } else {\n const routeByLocalizedName = this.tryResolveByLocalizedName(inputName, targetLocale, sourceRoute)\n if (routeByLocalizedName !== null) return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeByLocalizedName), sourceRoute)\n }\n }\n\n const fromLocale = currentRoute ? this.detectLocaleFromName(currentRoute.name) : this.detectLocaleFromName(resolved.name)\n\n const baseName = fromLocale ? this.getBaseRouteName(resolved, fromLocale) : (resolved.name ?? null)\n\n if (!baseName) return sourceRoute\n\n const targetName = this.shouldHavePrefix(targetLocale) ? this.buildLocalizedName(baseName, targetLocale) : baseName.toString()\n\n const pathWithoutLocale = isIndexRouteName(baseName) ? '/' : joinUrl('/', transformNameKeyToPath(baseName))\n const pathForLocale = this.shouldHavePrefix(targetLocale) ? joinUrl(targetLocale, pathWithoutLocale) : pathWithoutLocale\n const withBase = this.applyBaseUrl(targetLocale, pathForLocale)\n const pathStr = typeof withBase === 'string' ? withBase : ((withBase as RouteLike).path ?? pathForLocale)\n\n const newRoute: RouteLike = {\n name: targetName,\n path: pathStr,\n fullPath: pathStr,\n params: { ...resolved.params, ...sourceRoute.params },\n query: { ...resolved.query, ...sourceRoute.query },\n hash: sourceRoute.hash ?? resolved.hash,\n }\n\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newRoute), sourceRoute)\n }\n\n override getCanonicalPath(route: ResolvedRouteLike, targetLocale: string): string | null {\n const segment = this.getCustomPathSegment(route, targetLocale)\n if (!segment) return null\n const normalized = segment.startsWith('/') ? segment : `/${segment}`\n if (!this.shouldHavePrefix(targetLocale)) {\n return cleanDoubleSlashes(normalized)\n }\n return cleanDoubleSlashes(`/${targetLocale}${normalized}`)\n }\n\n resolveLocaleFromPath(path: string): string | null {\n const { localeFromPath } = this.getPathWithoutLocale(path)\n if (localeFromPath) return localeFromPath\n return this.ctx.defaultLocale\n }\n\n getRedirect(currentPath: string, detectedLocale: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n const needPrefix = this.shouldHavePrefix(detectedLocale)\n\n // Unlocalized routes (globalLocaleRoutes[key] === false): redirect /locale/path to /path\n const gr = this.ctx.globalLocaleRoutes\n if (gr && localeFromPath !== null) {\n const pathKey = pathWithoutLocale === '/' ? '/' : withoutLeadingSlash(pathWithoutLocale)\n if (gr[pathWithoutLocale] === false || gr[pathKey] === false) {\n return normalizePathForCompare(pathWithoutLocale)\n }\n }\n\n if (localeFromPath !== null) {\n if (localeFromPath === this.ctx.defaultLocale) {\n return normalizePathForCompare(pathWithoutLocale)\n }\n if (localeFromPath === detectedLocale) {\n const expected = this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n const currentPathOnly = getCleanPath(currentPath)\n return isSamePath(currentPathOnly, expected) ? null : expected\n }\n return this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n }\n\n if (needPrefix) {\n return this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n }\n const expectedPath = this.resolvePathForLocale(pathWithoutLocale, detectedLocale)\n const normalized = expectedPath.startsWith('/') ? expectedPath : `/${expectedPath}`\n const currentPathOnly = getCleanPath(currentPath)\n return isSamePath(currentPathOnly, normalized) ? null : normalized\n }\n\n override shouldReturn404(currentPath: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n\n // No locale in URL - no 404 from strategy perspective\n if (localeFromPath === null) return null\n\n // Default locale with prefix is 404 for prefix_except_default\n // e.g. /en when defaultLocale is 'en' and path is just the locale\n if (localeFromPath === this.ctx.defaultLocale && pathWithoutLocale === '/') {\n return 'Default locale should not have prefix'\n }\n\n // Delegate to base implementation for other checks\n return super.shouldReturn404(currentPath)\n }\n\n /** True if gr[key] is a locale rules object (Record<locale, path>). */\n private isLocaleRules(key: string): boolean {\n const gr = this.ctx.globalLocaleRoutes\n if (!gr || !key) return false\n const v = gr[key]\n return typeof v === 'object' && v !== null && !Array.isArray(v)\n }\n\n /**\n * For a nested route name (e.g. activity-locale-hiking), returns parent key and slash-key\n * when the route is nested (child or parent in globalLocaleRoutes). Otherwise null.\n */\n private getNestedRouteInfo(baseRouteName: string): { parentKey: string; keyWithSlash: string } | null {\n const gr = this.ctx.globalLocaleRoutes\n if (!gr) return null\n const keyLast = nameKeyLastSlash(baseRouteName)\n const keyFirst = nameKeyFirstSlash(baseRouteName)\n if (keyLast.includes('/') && this.isLocaleRules(keyLast)) {\n return { parentKey: parentKeyFromSlashKey(keyLast), keyWithSlash: keyLast }\n }\n if (keyFirst.includes('/') && this.isLocaleRules(keyFirst)) {\n return { parentKey: parentKeyFromSlashKey(keyFirst), keyWithSlash: keyFirst }\n }\n const parentLast = parentKeyFromSlashKey(keyLast)\n if (keyLast.includes('/') && parentLast && this.isLocaleRules(parentLast)) {\n return { parentKey: parentLast, keyWithSlash: keyLast }\n }\n const parentFirst = parentKeyFromSlashKey(keyFirst)\n if (keyFirst.includes('/') && parentFirst && this.isLocaleRules(parentFirst)) {\n return { parentKey: parentFirst, keyWithSlash: keyFirst }\n }\n return null\n }\n\n /** Parent path for target locale from gr or currentRoute. */\n private getParentPathForTarget(parentKey: string, keyWithSlash: string, targetLocale: string, currentRoute?: ResolvedRouteLike): string {\n const gr = this.ctx.globalLocaleRoutes\n const parentRules =\n parentKey && gr?.[parentKey] && typeof gr[parentKey] === 'object' && !Array.isArray(gr[parentKey])\n ? (gr[parentKey] as Record<string, string>)\n : null\n let parentPath = parentRules?.[targetLocale] ? normalizePath(parentRules[targetLocale]) : ''\n if (!parentPath && currentRoute?.path) {\n const curPathOnly = getCleanPath(currentRoute.path)\n const { pathWithoutLocale: curWithoutLocale } = this.getPathWithoutLocale(curPathOnly)\n parentPath = normalizePath(curWithoutLocale)\n }\n if (!parentPath) {\n const nameSegments = getPathSegments(keyWithSlash).slice(0, -1)\n parentPath = nameSegments.length ? joinUrl('/', ...nameSegments) : ''\n }\n return parentPath\n }\n\n private buildPathWithPrefix(pathWithoutLocale: string, locale: string): string {\n const resolved = this.resolvePathForLocale(pathWithoutLocale, locale)\n if (resolved === '/' || resolved === '') {\n return `/${locale}`\n }\n return joinUrl(`/${locale}`, resolved)\n }\n\n /**\n * Simple locale detector based on route name suffix.\n * Looks for known locale codes at the end of the name.\n */\n protected detectLocaleFromName(name: string | null): string | null {\n if (!name) return null\n for (const locale of this.ctx.locales) {\n if (name.endsWith(`-${locale.code}`)) {\n return locale.code\n }\n }\n return null\n }\n\n /**\n * Formats path for router.resolve.\n * prefix_except_default: add prefix only for non-default locale.\n */\n formatPathForResolve(path: string, fromLocale: string, toLocale: string): string {\n if (toLocale !== this.ctx.defaultLocale) {\n return `/${fromLocale}${path}`\n }\n return path\n }\n\n /**\n * prefix_except_default: redirect based on preferred locale.\n * Uses shouldHavePrefix to determine if locale needs prefix.\n * Also handles custom paths from globalLocaleRoutes.\n */\n getClientRedirect(currentPath: string, preferredLocale: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n\n // Check if route is unlocalized\n const gr = this.ctx.globalLocaleRoutes\n const pathKey = pathWithoutLocale === '/' ? '/' : withoutLeadingSlash(pathWithoutLocale)\n if (gr && (gr[pathWithoutLocale] === false || gr[pathKey] === false)) {\n return null // Unlocalized routes - no redirect\n }\n\n // URL has locale prefix - user explicitly navigated here, don't redirect\n if (localeFromPath !== null) return null\n\n // Resolve custom path for this locale\n const customPath = this.resolvePathForLocale(pathWithoutLocale, preferredLocale)\n const needsPrefix = this.shouldHavePrefix(preferredLocale)\n\n // Build target path\n let targetPath: string\n if (needsPrefix) {\n targetPath = cleanDoubleSlashes(`/${preferredLocale}${customPath.startsWith('/') ? customPath : `/${customPath}`}`)\n } else {\n targetPath = customPath.startsWith('/') ? customPath : `/${customPath}`\n }\n\n // Remove trailing slash (except for root)\n if (targetPath !== '/' && targetPath.endsWith('/')) {\n targetPath = targetPath.slice(0, -1)\n }\n\n // Only redirect if target differs from current\n const currentClean = getCleanPath(currentPath)\n if (isSamePath(currentClean, targetPath)) return null\n\n return targetPath\n }\n}\n\n/** Alias for Nuxt alias consumption. */\nexport { PrefixExceptDefaultPathStrategy as Strategy }\n"],"names":["PrefixExceptDefaultPathStrategy","BasePathStrategy","locale","localeObj","l","path","_isCustom","joinUrl","normalizePath","baseName","fromLocale","toLocale","route","options","targetName","nameWithSuffix","nameWithoutSuffix","i18nParams","newParams","resolved","newRoute","pathWithoutLocale","targetPath","targetLocale","normalized","currentRoute","newPath","inputName","sourceRoute","unlocalizedByName","syntheticPath","nameKeyLastSlash","syntheticResolved","customBySynthetic","nestedInfo","pathNorm","parentPath","segment","hasParams","routeResult","routeWithParams","applied","unlocalizedPath","customSegment","routeName","baseRouteName","customForTarget","isNested","pathToUse","lastPathSegment","pathForLocale","routeWithName","routeByLocalizedName","resolvedBase","isIndexRouteName","transformNameKeyToPath","withBase","pathStr","cleanDoubleSlashes","localeFromPath","currentPath","detectedLocale","needPrefix","gr","pathKey","withoutLeadingSlash","normalizePathForCompare","expected","currentPathOnly","getCleanPath","isSamePath","expectedPath","key","v","keyLast","keyFirst","nameKeyFirstSlash","parentKeyFromSlashKey","parentLast","parentFirst","parentKey","keyWithSlash","parentRules","curPathOnly","curWithoutLocale","nameSegments","getPathSegments","name","preferredLocale","customPath","needsPrefix","currentClean"],"mappings":"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"}
1
+ {"version":3,"file":"prefix-except-default-strategy.cjs","sources":["../src/strategies/prefix-except-default.ts"],"sourcesContent":["import { cleanDoubleSlashes, isSamePath, withoutLeadingSlash } from 'ufo'\nimport type { NormalizedRouteInput, ResolvedRouteLike, RouteLike, SwitchLocaleOptions } from '../core/types'\nimport {\n getCleanPath,\n getPathSegments,\n joinUrl,\n lastPathSegment,\n nameKeyFirstSlash,\n nameKeyLastSlash,\n normalizePath,\n normalizePathForCompare,\n parentKeyFromSlashKey,\n transformNameKeyToPath,\n} from '../utils/path'\nimport { isIndexRouteName } from '../utils/route-name'\nimport { BasePathStrategy } from './base-strategy'\n\nexport class PrefixExceptDefaultPathStrategy extends BasePathStrategy {\n /**\n * For this strategy a prefix is required for all non-default locales.\n */\n protected shouldHavePrefix(locale: string): boolean {\n if (locale === this.ctx.defaultLocale) return false\n // When locale has baseUrl with baseDefault=true, no prefix needed (uses root on separate domain)\n const localeObj = this.ctx.locales.find((l) => l.code === locale)\n if (localeObj?.baseUrl && localeObj?.baseDefault) return false\n return true\n }\n\n protected buildLocalizedPath(path: string, locale: string, _isCustom: boolean): string {\n if (!this.shouldHavePrefix(locale)) return normalizePath(path)\n return joinUrl(locale, normalizePath(path))\n }\n\n protected buildLocalizedRouteName(baseName: string, locale: string): string {\n if (!this.shouldHavePrefix(locale)) return baseName\n return this.buildLocalizedName(baseName, locale)\n }\n\n override switchLocaleRoute(fromLocale: string, toLocale: string, route: ResolvedRouteLike, options: SwitchLocaleOptions): RouteLike | string {\n const baseName = this.getBaseRouteName(route, fromLocale)\n if (!baseName) return route\n\n // For non-default locale, try route name with locale suffix first (custom paths),\n // then without suffix (standard routes like \"localized-page\")\n let targetName: string\n if (this.shouldHavePrefix(toLocale)) {\n const nameWithSuffix = this.buildLocalizedName(baseName, toLocale)\n const nameWithoutSuffix = `${this.getLocalizedRouteNamePrefix()}${baseName}`\n targetName = this.ctx.router.hasRoute(nameWithSuffix) ? nameWithSuffix : nameWithoutSuffix\n } else {\n targetName = baseName\n }\n\n if (this.ctx.router.hasRoute(targetName)) {\n const i18nParams = options.i18nRouteParams?.[toLocale] || {}\n const newParams: Record<string, unknown> = { ...(route.params || {}), ...i18nParams }\n // Always set locale param for non-default locales because routes may have /:locale(...) in path\n if (this.shouldHavePrefix(toLocale)) {\n newParams.locale = toLocale\n } else {\n delete newParams.locale\n }\n\n // Resolve to get the actual path for applyBaseUrl\n const resolved = this.ctx.router.resolve({ name: targetName, params: newParams })\n const newRoute: RouteLike = {\n name: targetName,\n params: newParams,\n path: resolved?.path,\n fullPath: resolved?.fullPath,\n query: route.query,\n hash: route.hash,\n }\n\n return this.applyBaseUrl(toLocale, newRoute)\n }\n\n // Fallback: build path-based route\n const pathWithoutLocale = route.path?.replace(new RegExp(`^/${fromLocale}`), '') || '/'\n const targetPath = this.buildLocalizedPath(pathWithoutLocale, toLocale, false)\n return this.applyBaseUrl(toLocale, { path: targetPath, query: route.query, hash: route.hash })\n }\n\n protected override resolveLocaleRoute(\n targetLocale: string,\n normalized: NormalizedRouteInput,\n currentRoute?: ResolvedRouteLike,\n ): RouteLike | string {\n if (normalized.kind === 'path') {\n const path = this.resolvePathForLocale(normalized.path, targetLocale)\n if (!this.shouldHavePrefix(targetLocale)) return this.applyBaseUrl(targetLocale, path)\n const newPath = joinUrl(targetLocale, path)\n return this.applyBaseUrl(targetLocale, newPath)\n }\n\n const { inputName, sourceRoute, resolved } = normalized\n if (inputName) {\n const unlocalizedByName = this.getPathForUnlocalizedRouteByName(inputName)\n if (unlocalizedByName !== null) return this.preserveQueryAndHash(unlocalizedByName, sourceRoute)\n const keyLastSlash = nameKeyLastSlash(inputName)\n const syntheticPath = `/${keyLastSlash}`\n const syntheticResolved: ResolvedRouteLike = {\n name: inputName,\n path: syntheticPath,\n fullPath: syntheticPath,\n params: sourceRoute.params ?? {},\n }\n const customBySynthetic = this.getCustomPathSegment(syntheticResolved, targetLocale)\n if (customBySynthetic !== null) {\n const nestedInfo = this.getNestedRouteInfo(inputName)\n let pathNorm: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customBySynthetic.startsWith('/') ? customBySynthetic.slice(1) : customBySynthetic\n pathNorm = parentPath ? joinUrl(parentPath, segment) : normalizePath(customBySynthetic)\n } else {\n pathNorm = normalizePath(customBySynthetic)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, pathNorm), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, pathNorm)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n }\n\n const hasParams = sourceRoute.params && Object.keys(sourceRoute.params ?? {}).length > 0\n if (inputName && hasParams) {\n // For default locale, try resolving base route name first (without localized prefix)\n if (!this.shouldHavePrefix(targetLocale) && this.ctx.router.hasRoute(inputName)) {\n const resolved = this.ctx.router.resolve({\n name: inputName,\n params: sourceRoute.params,\n query: sourceRoute.query,\n hash: sourceRoute.hash,\n })\n if (resolved?.path && resolved.path !== '/') {\n const routeResult: RouteLike = {\n name: inputName,\n path: resolved.path,\n fullPath: resolved.fullPath,\n params: resolved.params,\n query: resolved.query ?? sourceRoute.query,\n hash: resolved.hash ?? sourceRoute.hash,\n }\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeResult), sourceRoute)\n }\n }\n const routeWithParams = this.tryResolveByLocalizedNameWithParams(inputName, targetLocale, sourceRoute.params ?? {}, sourceRoute)\n if (routeWithParams !== null) {\n const applied = this.applyBaseUrl(targetLocale, routeWithParams)\n return this.preserveQueryAndHash(applied, sourceRoute)\n }\n }\n\n if (resolved.name != null) {\n const unlocalizedPath = this.getPathForUnlocalizedRoute(resolved)\n if (unlocalizedPath !== null) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, unlocalizedPath), sourceRoute)\n }\n // When route has custom path for target locale (globalLocaleRoutes), build path string so href is correct\n const customSegment = this.getCustomPathSegment(resolved, targetLocale)\n if (customSegment !== null) {\n const routeName = resolved.name?.toString() ?? inputName ?? ''\n const nestedInfo = routeName ? this.getNestedRouteInfo(routeName) : null\n let path: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customSegment.startsWith('/') ? customSegment.slice(1) : customSegment\n path = joinUrl(parentPath, segment)\n } else {\n path = normalizePath(customSegment)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, path), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, path)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n // Use resolved path when valid. Prefer custom path for target locale; for nested routes build parent path + custom segment.\n if (resolved.path && resolved.path !== '/' && resolved.name) {\n const { pathWithoutLocale, baseRouteName } = this.getPathWithoutLocaleAndBaseName(resolved)\n const customForTarget = this.getCustomPathSegment(resolved, targetLocale)\n const nestedInfo = baseRouteName ? this.getNestedRouteInfo(baseRouteName) : null\n const isNested = !!nestedInfo\n let pathToUse: string | null\n if (customForTarget !== null && isNested && nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customForTarget.startsWith('/') ? customForTarget.slice(1) : customForTarget\n pathToUse = joinUrl(parentPath, segment)\n } else if (isNested && customForTarget === null && pathWithoutLocale && pathWithoutLocale !== '/' && nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = lastPathSegment(pathWithoutLocale)\n pathToUse = parentPath ? joinUrl(parentPath, segment) : pathWithoutLocale !== '/' ? pathWithoutLocale : null\n } else {\n pathToUse =\n customForTarget !== null && !isNested\n ? normalizePath(customForTarget)\n : pathWithoutLocale && pathWithoutLocale !== '/'\n ? pathWithoutLocale\n : null\n }\n if (pathToUse) {\n const fromLocale = this.detectLocaleFromName(resolved.name)\n const baseName = fromLocale ? this.getBaseRouteName(resolved, fromLocale) : resolved.name ? this.getRouteBaseName(resolved) : null\n const targetName = baseName\n ? this.shouldHavePrefix(targetLocale)\n ? this.buildLocalizedName(baseName, targetLocale)\n : baseName.toString()\n : undefined\n const pathForLocale = this.shouldHavePrefix(targetLocale) ? joinUrl(targetLocale, pathToUse) : pathToUse\n const routeWithName: RouteLike = {\n ...(targetName ? { name: targetName } : {}),\n path: pathForLocale,\n fullPath: pathForLocale,\n params: { ...resolved.params, ...sourceRoute.params },\n query: { ...resolved.query, ...sourceRoute.query },\n hash: sourceRoute.hash ?? resolved.hash,\n }\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeWithName), sourceRoute)\n }\n }\n }\n // When resolved failed (e.g. router has only localized names), try getCustomPathSegment by synthetic path from inputName\n if (inputName) {\n const keyLastSlash = nameKeyLastSlash(inputName)\n const syntheticPath = `/${keyLastSlash}`\n const syntheticResolved: ResolvedRouteLike = {\n name: inputName,\n path: syntheticPath,\n fullPath: syntheticPath,\n params: sourceRoute.params ?? {},\n }\n const customBySynthetic = this.getCustomPathSegment(syntheticResolved, targetLocale)\n if (customBySynthetic !== null) {\n const nestedInfo = this.getNestedRouteInfo(inputName)\n let pathNorm: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customBySynthetic.startsWith('/') ? customBySynthetic.slice(1) : customBySynthetic\n pathNorm = joinUrl(parentPath || '/', segment)\n } else {\n pathNorm = normalizePath(customBySynthetic)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, pathNorm), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, pathNorm)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n }\n if (inputName && !hasParams) {\n // For default locale, try base route name first (e.g. 'index' instead of 'localized-index')\n if (!this.shouldHavePrefix(targetLocale)) {\n // Default locale: try to resolve baseName directly\n if (this.ctx.router.hasRoute(inputName)) {\n const resolvedBase = this.ctx.router.resolve({\n name: inputName,\n params: sourceRoute.params,\n query: sourceRoute.query,\n hash: sourceRoute.hash,\n })\n if (resolvedBase?.path) {\n return this.preserveQueryAndHash(\n this.applyBaseUrl(targetLocale, {\n name: inputName,\n path: resolvedBase.path,\n fullPath: resolvedBase.fullPath,\n params: resolvedBase.params,\n query: resolvedBase.query ?? sourceRoute.query,\n hash: resolvedBase.hash ?? sourceRoute.hash,\n }),\n sourceRoute,\n )\n }\n }\n } else {\n const routeByLocalizedName = this.tryResolveByLocalizedName(inputName, targetLocale, sourceRoute)\n if (routeByLocalizedName !== null) return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeByLocalizedName), sourceRoute)\n }\n }\n\n const fromLocale = currentRoute ? this.detectLocaleFromName(currentRoute.name) : this.detectLocaleFromName(resolved.name)\n\n const baseName = fromLocale ? this.getBaseRouteName(resolved, fromLocale) : (resolved.name ?? null)\n\n if (!baseName) return sourceRoute\n\n const targetName = this.shouldHavePrefix(targetLocale) ? this.buildLocalizedName(baseName, targetLocale) : baseName.toString()\n\n const pathWithoutLocale = isIndexRouteName(baseName) ? '/' : joinUrl('/', transformNameKeyToPath(baseName))\n const pathForLocale = this.shouldHavePrefix(targetLocale) ? joinUrl(targetLocale, pathWithoutLocale) : pathWithoutLocale\n const withBase = this.applyBaseUrl(targetLocale, pathForLocale)\n const pathStr = typeof withBase === 'string' ? withBase : ((withBase as RouteLike).path ?? pathForLocale)\n\n const newRoute: RouteLike = {\n name: targetName,\n path: pathStr,\n fullPath: pathStr,\n params: { ...resolved.params, ...sourceRoute.params },\n query: { ...resolved.query, ...sourceRoute.query },\n hash: sourceRoute.hash ?? resolved.hash,\n }\n\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newRoute), sourceRoute)\n }\n\n override getCanonicalPath(route: ResolvedRouteLike, targetLocale: string): string | null {\n const segment = this.getCustomPathSegment(route, targetLocale)\n if (!segment) return null\n const normalized = segment.startsWith('/') ? segment : `/${segment}`\n if (!this.shouldHavePrefix(targetLocale)) {\n return cleanDoubleSlashes(normalized)\n }\n return cleanDoubleSlashes(`/${targetLocale}${normalized}`)\n }\n\n resolveLocaleFromPath(path: string): string | null {\n const { localeFromPath } = this.getPathWithoutLocale(path)\n if (localeFromPath) return localeFromPath\n return this.ctx.defaultLocale\n }\n\n getRedirect(currentPath: string, detectedLocale: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n const needPrefix = this.shouldHavePrefix(detectedLocale)\n\n // Unlocalized routes (globalLocaleRoutes[key] === false): redirect /locale/path to /path\n const gr = this.ctx.globalLocaleRoutes\n if (gr && localeFromPath !== null) {\n const pathKey = pathWithoutLocale === '/' ? '/' : withoutLeadingSlash(pathWithoutLocale)\n if (gr[pathWithoutLocale] === false || gr[pathKey] === false) {\n return normalizePathForCompare(pathWithoutLocale)\n }\n }\n\n if (localeFromPath !== null) {\n if (localeFromPath === this.ctx.defaultLocale) {\n return normalizePathForCompare(pathWithoutLocale)\n }\n if (localeFromPath === detectedLocale) {\n const expected = this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n const currentPathOnly = getCleanPath(currentPath)\n return isSamePath(currentPathOnly, expected) ? null : expected\n }\n return this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n }\n\n if (needPrefix) {\n return this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n }\n const expectedPath = this.resolvePathForLocale(pathWithoutLocale, detectedLocale)\n const normalized = expectedPath.startsWith('/') ? expectedPath : `/${expectedPath}`\n const currentPathOnly = getCleanPath(currentPath)\n return isSamePath(currentPathOnly, normalized) ? null : normalized\n }\n\n override shouldReturn404(currentPath: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n\n // No locale in URL - no 404 from strategy perspective\n if (localeFromPath === null) return null\n\n // Default locale with prefix is 404 for prefix_except_default\n // e.g. /en when defaultLocale is 'en' and path is just the locale\n if (localeFromPath === this.ctx.defaultLocale && pathWithoutLocale === '/') {\n return 'Default locale should not have prefix'\n }\n\n // Delegate to base implementation for other checks\n return super.shouldReturn404(currentPath)\n }\n\n /** True if gr[key] is a locale rules object (Record<locale, path>). */\n private isLocaleRules(key: string): boolean {\n const gr = this.ctx.globalLocaleRoutes\n if (!gr || !key) return false\n const v = gr[key]\n return typeof v === 'object' && v !== null && !Array.isArray(v)\n }\n\n /**\n * For a nested route name (e.g. activity-locale-hiking), returns parent key and slash-key\n * when the route is nested (child or parent in globalLocaleRoutes). Otherwise null.\n */\n private getNestedRouteInfo(baseRouteName: string): { parentKey: string; keyWithSlash: string } | null {\n const gr = this.ctx.globalLocaleRoutes\n if (!gr) return null\n const keyLast = nameKeyLastSlash(baseRouteName)\n const keyFirst = nameKeyFirstSlash(baseRouteName)\n if (keyLast.includes('/') && this.isLocaleRules(keyLast)) {\n return { parentKey: parentKeyFromSlashKey(keyLast), keyWithSlash: keyLast }\n }\n if (keyFirst.includes('/') && this.isLocaleRules(keyFirst)) {\n return { parentKey: parentKeyFromSlashKey(keyFirst), keyWithSlash: keyFirst }\n }\n const parentLast = parentKeyFromSlashKey(keyLast)\n if (keyLast.includes('/') && parentLast && this.isLocaleRules(parentLast)) {\n return { parentKey: parentLast, keyWithSlash: keyLast }\n }\n const parentFirst = parentKeyFromSlashKey(keyFirst)\n if (keyFirst.includes('/') && parentFirst && this.isLocaleRules(parentFirst)) {\n return { parentKey: parentFirst, keyWithSlash: keyFirst }\n }\n return null\n }\n\n /** Parent path for target locale from gr or currentRoute. */\n private getParentPathForTarget(parentKey: string, keyWithSlash: string, targetLocale: string, currentRoute?: ResolvedRouteLike): string {\n const gr = this.ctx.globalLocaleRoutes\n const parentRules =\n parentKey && gr?.[parentKey] && typeof gr[parentKey] === 'object' && !Array.isArray(gr[parentKey])\n ? (gr[parentKey] as Record<string, string>)\n : null\n let parentPath = parentRules?.[targetLocale] ? normalizePath(parentRules[targetLocale]) : ''\n if (!parentPath && currentRoute?.path) {\n const curPathOnly = getCleanPath(currentRoute.path)\n const { pathWithoutLocale: curWithoutLocale } = this.getPathWithoutLocale(curPathOnly)\n parentPath = normalizePath(curWithoutLocale)\n }\n if (!parentPath) {\n const nameSegments = getPathSegments(keyWithSlash).slice(0, -1)\n parentPath = nameSegments.length ? joinUrl('/', ...nameSegments) : ''\n }\n return parentPath\n }\n\n private buildPathWithPrefix(pathWithoutLocale: string, locale: string): string {\n const resolved = this.resolvePathForLocale(pathWithoutLocale, locale)\n if (resolved === '/' || resolved === '') {\n return `/${locale}`\n }\n return joinUrl(`/${locale}`, resolved)\n }\n\n /**\n * Simple locale detector based on route name suffix.\n * Looks for known locale codes at the end of the name.\n */\n protected detectLocaleFromName(name: string | null): string | null {\n if (!name) return null\n for (const locale of this.ctx.locales) {\n if (name.endsWith(`-${locale.code}`)) {\n return locale.code\n }\n }\n return null\n }\n\n /**\n * Formats path for router.resolve.\n * prefix_except_default: add prefix only for non-default locale.\n */\n formatPathForResolve(path: string, fromLocale: string, toLocale: string): string {\n if (toLocale !== this.ctx.defaultLocale) {\n return `/${fromLocale}${path}`\n }\n return path\n }\n\n /**\n * prefix_except_default: redirect based on preferred locale.\n * Uses shouldHavePrefix to determine if locale needs prefix.\n * Also handles custom paths from globalLocaleRoutes.\n */\n getClientRedirect(currentPath: string, preferredLocale: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n\n // Check if route is unlocalized\n const gr = this.ctx.globalLocaleRoutes\n const pathKey = pathWithoutLocale === '/' ? '/' : withoutLeadingSlash(pathWithoutLocale)\n if (gr && (gr[pathWithoutLocale] === false || gr[pathKey] === false)) {\n return null // Unlocalized routes - no redirect\n }\n\n // URL has locale prefix - user explicitly navigated here, don't redirect\n if (localeFromPath !== null) return null\n\n // Resolve custom path for this locale\n const customPath = this.resolvePathForLocale(pathWithoutLocale, preferredLocale)\n const needsPrefix = this.shouldHavePrefix(preferredLocale)\n\n // Build target path\n let targetPath: string\n if (needsPrefix) {\n targetPath = cleanDoubleSlashes(`/${preferredLocale}${customPath.startsWith('/') ? customPath : `/${customPath}`}`)\n } else {\n targetPath = customPath.startsWith('/') ? customPath : `/${customPath}`\n }\n\n // Remove trailing slash (except for root)\n if (targetPath !== '/' && targetPath.endsWith('/')) {\n targetPath = targetPath.slice(0, -1)\n }\n\n // Only redirect if target differs from current\n const currentClean = getCleanPath(currentPath)\n if (isSamePath(currentClean, targetPath)) return null\n\n return targetPath\n }\n}\n\n/** Alias for Nuxt alias consumption. */\nexport { PrefixExceptDefaultPathStrategy as Strategy }\n"],"names":["PrefixExceptDefaultPathStrategy","BasePathStrategy","locale","localeObj","l","path","_isCustom","joinUrl","normalizePath","baseName","fromLocale","toLocale","route","options","targetName","nameWithSuffix","nameWithoutSuffix","i18nParams","newParams","resolved","newRoute","pathWithoutLocale","targetPath","targetLocale","normalized","currentRoute","newPath","inputName","sourceRoute","unlocalizedByName","syntheticPath","nameKeyLastSlash","syntheticResolved","customBySynthetic","nestedInfo","pathNorm","parentPath","segment","hasParams","routeResult","routeWithParams","applied","unlocalizedPath","customSegment","routeName","baseRouteName","customForTarget","isNested","pathToUse","lastPathSegment","pathForLocale","routeWithName","routeByLocalizedName","resolvedBase","isIndexRouteName","transformNameKeyToPath","withBase","pathStr","cleanDoubleSlashes","localeFromPath","currentPath","detectedLocale","needPrefix","gr","pathKey","withoutLeadingSlash","normalizePathForCompare","expected","currentPathOnly","getCleanPath","isSamePath","expectedPath","key","v","keyLast","keyFirst","nameKeyFirstSlash","parentKeyFromSlashKey","parentLast","parentFirst","parentKey","keyWithSlash","parentRules","curPathOnly","curWithoutLocale","nameSegments","getPathSegments","name","preferredLocale","customPath","needsPrefix","currentClean"],"mappings":"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"}
@@ -129,7 +129,7 @@ declare abstract class BasePathStrategy implements PathStrategy {
129
129
  getCurrentLocale(route: ResolvedRouteLike, getDefaultLocale?: () => string | null | undefined): string;
130
130
  /**
131
131
  * Returns the route name for plugin translation loading.
132
- * If disablePageLocales is true, returns 'general'.
132
+ * If disablePageLocales is true, returns 'index'.
133
133
  */
134
134
  getPluginRouteName(route: ResolvedRouteLike, locale: string): string;
135
135
  /**
@@ -229,7 +229,7 @@ declare interface PathStrategy {
229
229
  getCurrentLocale(route: ResolvedRouteLike, getDefaultLocale?: () => string | null | undefined): string;
230
230
  /**
231
231
  * Returns the route name for plugin translation loading.
232
- * If disablePageLocales is true, returns 'general'.
232
+ * If disablePageLocales is true, returns 'index'.
233
233
  */
234
234
  getPluginRouteName(route: ResolvedRouteLike, locale: string): string;
235
235
  /**
@@ -260,7 +260,6 @@ declare interface PathStrategyContext {
260
260
  globalLocaleRoutes?: GlobalLocaleRoutes;
261
261
  routeLocales?: Record<string, string[]>;
262
262
  routesLocaleLinks?: Record<string, string>;
263
- includeDefaultLocaleRoute?: boolean;
264
263
  noPrefixRedirect?: boolean;
265
264
  debug?: boolean;
266
265
  router: RouterAdapter;
@@ -272,8 +271,7 @@ declare interface PathStrategyContext {
272
271
 
273
272
  declare class PrefixExceptDefaultPathStrategy extends BasePathStrategy {
274
273
  /**
275
- * For this strategy a prefix is required for all non-default locales,
276
- * unless includeDefaultLocaleRoute is explicitly enabled.
274
+ * For this strategy a prefix is required for all non-default locales.
277
275
  */
278
276
  protected shouldHavePrefix(locale: string): boolean;
279
277
  protected buildLocalizedPath(path: string, locale: string, _isCustom: boolean): string;
@@ -342,7 +340,7 @@ declare class RouteResolver {
342
340
  constructor(ctx: PathStrategyContext);
343
341
  /**
344
342
  * Substitutes params into path template (:key, :key(), [...key]).
345
- * Uses one combined regex per key to avoid creating multiple RegExp in a loop.
343
+ * Uses a single pre-compiled regex for all keys in one pass no per-key RegExp allocation.
346
344
  */
347
345
  resolvePathWithParams(path: string, params?: Record<string, unknown>): string;
348
346
  /**
@@ -1,11 +1,9 @@
1
- import { B as K, n as R, j as m, b as F, l as C, d as I, t as T, c as b, w as z, a as k, g, i as U, e as j, p as B, f as D } from "./base-strategy-Cf39XK8k.js";
1
+ import { B as K, n as R, j as m, b as F, l as C, d as I, t as T, c as b, w as z, a as k, g, i as U, e as j, p as B, f as O } from "./base-strategy-DDkINDnZ.js";
2
2
  class L extends K {
3
3
  /**
4
- * For this strategy a prefix is required for all non-default locales,
5
- * unless includeDefaultLocaleRoute is explicitly enabled.
4
+ * For this strategy a prefix is required for all non-default locales.
6
5
  */
7
6
  shouldHavePrefix(t) {
8
- if (this.ctx.includeDefaultLocaleRoute) return !0;
9
7
  if (t === this.ctx.defaultLocale) return !1;
10
8
  const a = this.ctx.locales.find((e) => e.code === t);
11
9
  return !(a?.baseUrl && a?.baseDefault);
@@ -21,16 +19,16 @@ class L extends K {
21
19
  if (!s) return e;
22
20
  let r;
23
21
  if (this.shouldHavePrefix(a)) {
24
- const i = this.buildLocalizedName(s, a), p = `${this.getLocalizedRouteNamePrefix()}${s}`;
25
- r = this.ctx.router.hasRoute(i) ? i : p;
22
+ const i = this.buildLocalizedName(s, a), f = `${this.getLocalizedRouteNamePrefix()}${s}`;
23
+ r = this.ctx.router.hasRoute(i) ? i : f;
26
24
  } else
27
25
  r = s;
28
26
  if (this.ctx.router.hasRoute(r)) {
29
- const i = h.i18nRouteParams?.[a] || {}, p = { ...e.params || {}, ...i };
30
- this.shouldHavePrefix(a) ? p.locale = a : delete p.locale;
31
- const S = this.ctx.router.resolve({ name: r, params: p }), N = {
27
+ const i = h.i18nRouteParams?.[a] || {}, f = { ...e.params || {}, ...i };
28
+ this.shouldHavePrefix(a) ? f.locale = a : delete f.locale;
29
+ const S = this.ctx.router.resolve({ name: r, params: f }), N = {
32
30
  name: r,
33
- params: p,
31
+ params: f,
34
32
  path: S?.path,
35
33
  fullPath: S?.fullPath,
36
34
  query: e.query,
@@ -59,10 +57,10 @@ class L extends K {
59
57
  params: s.params ?? {}
60
58
  }, n = this.getCustomPathSegment(y, t);
61
59
  if (n !== null) {
62
- const f = this.getNestedRouteInfo(h);
60
+ const p = this.getNestedRouteInfo(h);
63
61
  let d;
64
- if (f) {
65
- const v = this.getParentPathForTarget(f.parentKey, f.keyWithSlash, t, e), W = n.startsWith("/") ? n.slice(1) : n;
62
+ if (p) {
63
+ const v = this.getParentPathForTarget(p.parentKey, p.keyWithSlash, t, e), W = n.startsWith("/") ? n.slice(1) : n;
66
64
  d = v ? m(v, W) : R(n);
67
65
  } else
68
66
  d = R(n);
@@ -114,17 +112,17 @@ class L extends K {
114
112
  n = R(u);
115
113
  if (!this.shouldHavePrefix(t))
116
114
  return this.preserveQueryAndHash(this.applyBaseUrl(t, n), s);
117
- const f = m(t, n);
118
- return this.preserveQueryAndHash(this.applyBaseUrl(t, f), s);
115
+ const p = m(t, n);
116
+ return this.preserveQueryAndHash(this.applyBaseUrl(t, p), s);
119
117
  }
120
118
  if (r.path && r.path !== "/" && r.name) {
121
- const { pathWithoutLocale: c, baseRouteName: y } = this.getPathWithoutLocaleAndBaseName(r), n = this.getCustomPathSegment(r, t), f = y ? this.getNestedRouteInfo(y) : null, d = !!f;
119
+ const { pathWithoutLocale: c, baseRouteName: y } = this.getPathWithoutLocaleAndBaseName(r), n = this.getCustomPathSegment(r, t), p = y ? this.getNestedRouteInfo(y) : null, d = !!p;
122
120
  let x;
123
- if (n !== null && d && f) {
124
- const v = this.getParentPathForTarget(f.parentKey, f.keyWithSlash, t, e), W = n.startsWith("/") ? n.slice(1) : n;
121
+ if (n !== null && d && p) {
122
+ const v = this.getParentPathForTarget(p.parentKey, p.keyWithSlash, t, e), W = n.startsWith("/") ? n.slice(1) : n;
125
123
  x = m(v, W);
126
- } else if (d && n === null && c && c !== "/" && f) {
127
- const v = this.getParentPathForTarget(f.parentKey, f.keyWithSlash, t, e), W = C(c);
124
+ } else if (d && n === null && c && c !== "/" && p) {
125
+ const v = this.getParentPathForTarget(p.parentKey, p.keyWithSlash, t, e), W = C(c);
128
126
  x = v ? m(v, W) : c !== "/" ? c : null;
129
127
  } else
130
128
  x = n !== null && !d ? R(n) : c && c !== "/" ? c : null;
@@ -150,15 +148,15 @@ class L extends K {
150
148
  }, y = this.getCustomPathSegment(c, t);
151
149
  if (y !== null) {
152
150
  const n = this.getNestedRouteInfo(h);
153
- let f;
151
+ let p;
154
152
  if (n) {
155
153
  const x = this.getParentPathForTarget(n.parentKey, n.keyWithSlash, t, e), v = y.startsWith("/") ? y.slice(1) : y;
156
- f = m(x || "/", v);
154
+ p = m(x || "/", v);
157
155
  } else
158
- f = R(y);
156
+ p = R(y);
159
157
  if (!this.shouldHavePrefix(t))
160
- return this.preserveQueryAndHash(this.applyBaseUrl(t, f), s);
161
- const d = m(t, f);
158
+ return this.preserveQueryAndHash(this.applyBaseUrl(t, p), s);
159
+ const d = m(t, p);
162
160
  return this.preserveQueryAndHash(this.applyBaseUrl(t, d), s);
163
161
  }
164
162
  }
@@ -189,8 +187,8 @@ class L extends K {
189
187
  }
190
188
  const P = e ? this.detectLocaleFromName(e.name) : this.detectLocaleFromName(r.name), i = P ? this.getBaseRouteName(r, P) : r.name ?? null;
191
189
  if (!i) return s;
192
- const p = this.shouldHavePrefix(t) ? this.buildLocalizedName(i, t) : i.toString(), S = I(i) ? "/" : m("/", T(i)), N = this.shouldHavePrefix(t) ? m(t, S) : S, H = this.applyBaseUrl(t, N), q = typeof H == "string" ? H : H.path ?? N, Q = {
193
- name: p,
190
+ const f = this.shouldHavePrefix(t) ? this.buildLocalizedName(i, t) : i.toString(), S = I(i) ? "/" : m("/", T(i)), N = this.shouldHavePrefix(t) ? m(t, S) : S, H = this.applyBaseUrl(t, N), q = typeof H == "string" ? H : H.path ?? N, Q = {
191
+ name: f,
194
192
  path: q,
195
193
  fullPath: q,
196
194
  params: { ...r.params, ...s.params },
@@ -212,16 +210,16 @@ class L extends K {
212
210
  getRedirect(t, a) {
213
211
  const { pathWithoutLocale: e, localeFromPath: h } = this.getPathWithoutLocale(t), s = this.shouldHavePrefix(a), r = this.ctx.globalLocaleRoutes;
214
212
  if (r && h !== null) {
215
- const p = e === "/" ? "/" : z(e);
216
- if (r[e] === !1 || r[p] === !1)
213
+ const f = e === "/" ? "/" : z(e);
214
+ if (r[e] === !1 || r[f] === !1)
217
215
  return k(e);
218
216
  }
219
217
  if (h !== null) {
220
218
  if (h === this.ctx.defaultLocale)
221
219
  return k(e);
222
220
  if (h === a) {
223
- const p = this.buildPathWithPrefix(e, a), S = g(t);
224
- return U(S, p) ? null : p;
221
+ const f = this.buildPathWithPrefix(e, a), S = g(t);
222
+ return U(S, f) ? null : f;
225
223
  }
226
224
  return this.buildPathWithPrefix(e, a);
227
225
  }
@@ -267,7 +265,7 @@ class L extends K {
267
265
  o = R(i);
268
266
  }
269
267
  if (!o) {
270
- const P = D(a).slice(0, -1);
268
+ const P = O(a).slice(0, -1);
271
269
  o = P.length ? m("/", ...P) : "";
272
270
  }
273
271
  return o;
@@ -305,8 +303,8 @@ class L extends K {
305
303
  const o = this.resolvePathForLocale(e, a), P = this.shouldHavePrefix(a);
306
304
  let i;
307
305
  P ? i = b(`/${a}${o.startsWith("/") ? o : `/${o}`}`) : i = o.startsWith("/") ? o : `/${o}`, i !== "/" && i.endsWith("/") && (i = i.slice(0, -1));
308
- const p = g(t);
309
- return U(p, i) ? null : i;
306
+ const f = g(t);
307
+ return U(f, i) ? null : i;
310
308
  }
311
309
  }
312
310
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"prefix-except-default-strategy.mjs","sources":["../src/strategies/prefix-except-default.ts"],"sourcesContent":["import { cleanDoubleSlashes, isSamePath, withoutLeadingSlash } from 'ufo'\nimport type { NormalizedRouteInput, ResolvedRouteLike, RouteLike, SwitchLocaleOptions } from '../core/types'\nimport {\n getCleanPath,\n getPathSegments,\n joinUrl,\n lastPathSegment,\n nameKeyFirstSlash,\n nameKeyLastSlash,\n normalizePath,\n normalizePathForCompare,\n parentKeyFromSlashKey,\n transformNameKeyToPath,\n} from '../utils/path'\nimport { isIndexRouteName } from '../utils/route-name'\nimport { BasePathStrategy } from './base-strategy'\n\nexport class PrefixExceptDefaultPathStrategy extends BasePathStrategy {\n /**\n * For this strategy a prefix is required for all non-default locales,\n * unless includeDefaultLocaleRoute is explicitly enabled.\n */\n protected shouldHavePrefix(locale: string): boolean {\n if (this.ctx.includeDefaultLocaleRoute) return true\n if (locale === this.ctx.defaultLocale) return false\n // When locale has baseUrl with baseDefault=true, no prefix needed (uses root on separate domain)\n const localeObj = this.ctx.locales.find((l) => l.code === locale)\n if (localeObj?.baseUrl && localeObj?.baseDefault) return false\n return true\n }\n\n protected buildLocalizedPath(path: string, locale: string, _isCustom: boolean): string {\n if (!this.shouldHavePrefix(locale)) return normalizePath(path)\n return joinUrl(locale, normalizePath(path))\n }\n\n protected buildLocalizedRouteName(baseName: string, locale: string): string {\n if (!this.shouldHavePrefix(locale)) return baseName\n return this.buildLocalizedName(baseName, locale)\n }\n\n override switchLocaleRoute(fromLocale: string, toLocale: string, route: ResolvedRouteLike, options: SwitchLocaleOptions): RouteLike | string {\n const baseName = this.getBaseRouteName(route, fromLocale)\n if (!baseName) return route\n\n // For non-default locale, try route name with locale suffix first (custom paths),\n // then without suffix (standard routes like \"localized-page\")\n let targetName: string\n if (this.shouldHavePrefix(toLocale)) {\n const nameWithSuffix = this.buildLocalizedName(baseName, toLocale)\n const nameWithoutSuffix = `${this.getLocalizedRouteNamePrefix()}${baseName}`\n targetName = this.ctx.router.hasRoute(nameWithSuffix) ? nameWithSuffix : nameWithoutSuffix\n } else {\n targetName = baseName\n }\n\n if (this.ctx.router.hasRoute(targetName)) {\n const i18nParams = options.i18nRouteParams?.[toLocale] || {}\n const newParams: Record<string, unknown> = { ...(route.params || {}), ...i18nParams }\n // Always set locale param for non-default locales because routes may have /:locale(...) in path\n if (this.shouldHavePrefix(toLocale)) {\n newParams.locale = toLocale\n } else {\n delete newParams.locale\n }\n\n // Resolve to get the actual path for applyBaseUrl\n const resolved = this.ctx.router.resolve({ name: targetName, params: newParams })\n const newRoute: RouteLike = {\n name: targetName,\n params: newParams,\n path: resolved?.path,\n fullPath: resolved?.fullPath,\n query: route.query,\n hash: route.hash,\n }\n\n return this.applyBaseUrl(toLocale, newRoute)\n }\n\n // Fallback: build path-based route\n const pathWithoutLocale = route.path?.replace(new RegExp(`^/${fromLocale}`), '') || '/'\n const targetPath = this.buildLocalizedPath(pathWithoutLocale, toLocale, false)\n return this.applyBaseUrl(toLocale, { path: targetPath, query: route.query, hash: route.hash })\n }\n\n protected override resolveLocaleRoute(\n targetLocale: string,\n normalized: NormalizedRouteInput,\n currentRoute?: ResolvedRouteLike,\n ): RouteLike | string {\n if (normalized.kind === 'path') {\n const path = this.resolvePathForLocale(normalized.path, targetLocale)\n if (!this.shouldHavePrefix(targetLocale)) return this.applyBaseUrl(targetLocale, path)\n const newPath = joinUrl(targetLocale, path)\n return this.applyBaseUrl(targetLocale, newPath)\n }\n\n const { inputName, sourceRoute, resolved } = normalized\n if (inputName) {\n const unlocalizedByName = this.getPathForUnlocalizedRouteByName(inputName)\n if (unlocalizedByName !== null) return this.preserveQueryAndHash(unlocalizedByName, sourceRoute)\n const keyLastSlash = nameKeyLastSlash(inputName)\n const syntheticPath = `/${keyLastSlash}`\n const syntheticResolved: ResolvedRouteLike = {\n name: inputName,\n path: syntheticPath,\n fullPath: syntheticPath,\n params: sourceRoute.params ?? {},\n }\n const customBySynthetic = this.getCustomPathSegment(syntheticResolved, targetLocale)\n if (customBySynthetic !== null) {\n const nestedInfo = this.getNestedRouteInfo(inputName)\n let pathNorm: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customBySynthetic.startsWith('/') ? customBySynthetic.slice(1) : customBySynthetic\n pathNorm = parentPath ? joinUrl(parentPath, segment) : normalizePath(customBySynthetic)\n } else {\n pathNorm = normalizePath(customBySynthetic)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, pathNorm), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, pathNorm)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n }\n\n const hasParams = sourceRoute.params && Object.keys(sourceRoute.params ?? {}).length > 0\n if (inputName && hasParams) {\n // For default locale, try resolving base route name first (without localized prefix)\n if (!this.shouldHavePrefix(targetLocale) && this.ctx.router.hasRoute(inputName)) {\n const resolved = this.ctx.router.resolve({\n name: inputName,\n params: sourceRoute.params,\n query: sourceRoute.query,\n hash: sourceRoute.hash,\n })\n if (resolved?.path && resolved.path !== '/') {\n const routeResult: RouteLike = {\n name: inputName,\n path: resolved.path,\n fullPath: resolved.fullPath,\n params: resolved.params,\n query: resolved.query ?? sourceRoute.query,\n hash: resolved.hash ?? sourceRoute.hash,\n }\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeResult), sourceRoute)\n }\n }\n const routeWithParams = this.tryResolveByLocalizedNameWithParams(inputName, targetLocale, sourceRoute.params ?? {}, sourceRoute)\n if (routeWithParams !== null) {\n const applied = this.applyBaseUrl(targetLocale, routeWithParams)\n return this.preserveQueryAndHash(applied, sourceRoute)\n }\n }\n\n if (resolved.name != null) {\n const unlocalizedPath = this.getPathForUnlocalizedRoute(resolved)\n if (unlocalizedPath !== null) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, unlocalizedPath), sourceRoute)\n }\n // When route has custom path for target locale (globalLocaleRoutes), build path string so href is correct\n const customSegment = this.getCustomPathSegment(resolved, targetLocale)\n if (customSegment !== null) {\n const routeName = resolved.name?.toString() ?? inputName ?? ''\n const nestedInfo = routeName ? this.getNestedRouteInfo(routeName) : null\n let path: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customSegment.startsWith('/') ? customSegment.slice(1) : customSegment\n path = joinUrl(parentPath, segment)\n } else {\n path = normalizePath(customSegment)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, path), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, path)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n // Use resolved path when valid. Prefer custom path for target locale; for nested routes build parent path + custom segment.\n if (resolved.path && resolved.path !== '/' && resolved.name) {\n const { pathWithoutLocale, baseRouteName } = this.getPathWithoutLocaleAndBaseName(resolved)\n const customForTarget = this.getCustomPathSegment(resolved, targetLocale)\n const nestedInfo = baseRouteName ? this.getNestedRouteInfo(baseRouteName) : null\n const isNested = !!nestedInfo\n let pathToUse: string | null\n if (customForTarget !== null && isNested && nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customForTarget.startsWith('/') ? customForTarget.slice(1) : customForTarget\n pathToUse = joinUrl(parentPath, segment)\n } else if (isNested && customForTarget === null && pathWithoutLocale && pathWithoutLocale !== '/' && nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = lastPathSegment(pathWithoutLocale)\n pathToUse = parentPath ? joinUrl(parentPath, segment) : pathWithoutLocale !== '/' ? pathWithoutLocale : null\n } else {\n pathToUse =\n customForTarget !== null && !isNested\n ? normalizePath(customForTarget)\n : pathWithoutLocale && pathWithoutLocale !== '/'\n ? pathWithoutLocale\n : null\n }\n if (pathToUse) {\n const fromLocale = this.detectLocaleFromName(resolved.name)\n const baseName = fromLocale ? this.getBaseRouteName(resolved, fromLocale) : resolved.name ? this.getRouteBaseName(resolved) : null\n const targetName = baseName\n ? this.shouldHavePrefix(targetLocale)\n ? this.buildLocalizedName(baseName, targetLocale)\n : baseName.toString()\n : undefined\n const pathForLocale = this.shouldHavePrefix(targetLocale) ? joinUrl(targetLocale, pathToUse) : pathToUse\n const routeWithName: RouteLike = {\n ...(targetName ? { name: targetName } : {}),\n path: pathForLocale,\n fullPath: pathForLocale,\n params: { ...resolved.params, ...sourceRoute.params },\n query: { ...resolved.query, ...sourceRoute.query },\n hash: sourceRoute.hash ?? resolved.hash,\n }\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeWithName), sourceRoute)\n }\n }\n }\n // When resolved failed (e.g. router has only localized names), try getCustomPathSegment by synthetic path from inputName\n if (inputName) {\n const keyLastSlash = nameKeyLastSlash(inputName)\n const syntheticPath = `/${keyLastSlash}`\n const syntheticResolved: ResolvedRouteLike = {\n name: inputName,\n path: syntheticPath,\n fullPath: syntheticPath,\n params: sourceRoute.params ?? {},\n }\n const customBySynthetic = this.getCustomPathSegment(syntheticResolved, targetLocale)\n if (customBySynthetic !== null) {\n const nestedInfo = this.getNestedRouteInfo(inputName)\n let pathNorm: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customBySynthetic.startsWith('/') ? customBySynthetic.slice(1) : customBySynthetic\n pathNorm = joinUrl(parentPath || '/', segment)\n } else {\n pathNorm = normalizePath(customBySynthetic)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, pathNorm), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, pathNorm)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n }\n if (inputName && !hasParams) {\n // For default locale, try base route name first (e.g. 'index' instead of 'localized-index')\n if (!this.shouldHavePrefix(targetLocale)) {\n // Default locale: try to resolve baseName directly\n if (this.ctx.router.hasRoute(inputName)) {\n const resolvedBase = this.ctx.router.resolve({\n name: inputName,\n params: sourceRoute.params,\n query: sourceRoute.query,\n hash: sourceRoute.hash,\n })\n if (resolvedBase?.path) {\n return this.preserveQueryAndHash(\n this.applyBaseUrl(targetLocale, {\n name: inputName,\n path: resolvedBase.path,\n fullPath: resolvedBase.fullPath,\n params: resolvedBase.params,\n query: resolvedBase.query ?? sourceRoute.query,\n hash: resolvedBase.hash ?? sourceRoute.hash,\n }),\n sourceRoute,\n )\n }\n }\n } else {\n const routeByLocalizedName = this.tryResolveByLocalizedName(inputName, targetLocale, sourceRoute)\n if (routeByLocalizedName !== null) return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeByLocalizedName), sourceRoute)\n }\n }\n\n const fromLocale = currentRoute ? this.detectLocaleFromName(currentRoute.name) : this.detectLocaleFromName(resolved.name)\n\n const baseName = fromLocale ? this.getBaseRouteName(resolved, fromLocale) : (resolved.name ?? null)\n\n if (!baseName) return sourceRoute\n\n const targetName = this.shouldHavePrefix(targetLocale) ? this.buildLocalizedName(baseName, targetLocale) : baseName.toString()\n\n const pathWithoutLocale = isIndexRouteName(baseName) ? '/' : joinUrl('/', transformNameKeyToPath(baseName))\n const pathForLocale = this.shouldHavePrefix(targetLocale) ? joinUrl(targetLocale, pathWithoutLocale) : pathWithoutLocale\n const withBase = this.applyBaseUrl(targetLocale, pathForLocale)\n const pathStr = typeof withBase === 'string' ? withBase : ((withBase as RouteLike).path ?? pathForLocale)\n\n const newRoute: RouteLike = {\n name: targetName,\n path: pathStr,\n fullPath: pathStr,\n params: { ...resolved.params, ...sourceRoute.params },\n query: { ...resolved.query, ...sourceRoute.query },\n hash: sourceRoute.hash ?? resolved.hash,\n }\n\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newRoute), sourceRoute)\n }\n\n override getCanonicalPath(route: ResolvedRouteLike, targetLocale: string): string | null {\n const segment = this.getCustomPathSegment(route, targetLocale)\n if (!segment) return null\n const normalized = segment.startsWith('/') ? segment : `/${segment}`\n if (!this.shouldHavePrefix(targetLocale)) {\n return cleanDoubleSlashes(normalized)\n }\n return cleanDoubleSlashes(`/${targetLocale}${normalized}`)\n }\n\n resolveLocaleFromPath(path: string): string | null {\n const { localeFromPath } = this.getPathWithoutLocale(path)\n if (localeFromPath) return localeFromPath\n return this.ctx.defaultLocale\n }\n\n getRedirect(currentPath: string, detectedLocale: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n const needPrefix = this.shouldHavePrefix(detectedLocale)\n\n // Unlocalized routes (globalLocaleRoutes[key] === false): redirect /locale/path to /path\n const gr = this.ctx.globalLocaleRoutes\n if (gr && localeFromPath !== null) {\n const pathKey = pathWithoutLocale === '/' ? '/' : withoutLeadingSlash(pathWithoutLocale)\n if (gr[pathWithoutLocale] === false || gr[pathKey] === false) {\n return normalizePathForCompare(pathWithoutLocale)\n }\n }\n\n if (localeFromPath !== null) {\n if (localeFromPath === this.ctx.defaultLocale) {\n return normalizePathForCompare(pathWithoutLocale)\n }\n if (localeFromPath === detectedLocale) {\n const expected = this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n const currentPathOnly = getCleanPath(currentPath)\n return isSamePath(currentPathOnly, expected) ? null : expected\n }\n return this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n }\n\n if (needPrefix) {\n return this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n }\n const expectedPath = this.resolvePathForLocale(pathWithoutLocale, detectedLocale)\n const normalized = expectedPath.startsWith('/') ? expectedPath : `/${expectedPath}`\n const currentPathOnly = getCleanPath(currentPath)\n return isSamePath(currentPathOnly, normalized) ? null : normalized\n }\n\n override shouldReturn404(currentPath: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n\n // No locale in URL - no 404 from strategy perspective\n if (localeFromPath === null) return null\n\n // Default locale with prefix is 404 for prefix_except_default\n // e.g. /en when defaultLocale is 'en' and path is just the locale\n if (localeFromPath === this.ctx.defaultLocale && pathWithoutLocale === '/') {\n return 'Default locale should not have prefix'\n }\n\n // Delegate to base implementation for other checks\n return super.shouldReturn404(currentPath)\n }\n\n /** True if gr[key] is a locale rules object (Record<locale, path>). */\n private isLocaleRules(key: string): boolean {\n const gr = this.ctx.globalLocaleRoutes\n if (!gr || !key) return false\n const v = gr[key]\n return typeof v === 'object' && v !== null && !Array.isArray(v)\n }\n\n /**\n * For a nested route name (e.g. activity-locale-hiking), returns parent key and slash-key\n * when the route is nested (child or parent in globalLocaleRoutes). Otherwise null.\n */\n private getNestedRouteInfo(baseRouteName: string): { parentKey: string; keyWithSlash: string } | null {\n const gr = this.ctx.globalLocaleRoutes\n if (!gr) return null\n const keyLast = nameKeyLastSlash(baseRouteName)\n const keyFirst = nameKeyFirstSlash(baseRouteName)\n if (keyLast.includes('/') && this.isLocaleRules(keyLast)) {\n return { parentKey: parentKeyFromSlashKey(keyLast), keyWithSlash: keyLast }\n }\n if (keyFirst.includes('/') && this.isLocaleRules(keyFirst)) {\n return { parentKey: parentKeyFromSlashKey(keyFirst), keyWithSlash: keyFirst }\n }\n const parentLast = parentKeyFromSlashKey(keyLast)\n if (keyLast.includes('/') && parentLast && this.isLocaleRules(parentLast)) {\n return { parentKey: parentLast, keyWithSlash: keyLast }\n }\n const parentFirst = parentKeyFromSlashKey(keyFirst)\n if (keyFirst.includes('/') && parentFirst && this.isLocaleRules(parentFirst)) {\n return { parentKey: parentFirst, keyWithSlash: keyFirst }\n }\n return null\n }\n\n /** Parent path for target locale from gr or currentRoute. */\n private getParentPathForTarget(parentKey: string, keyWithSlash: string, targetLocale: string, currentRoute?: ResolvedRouteLike): string {\n const gr = this.ctx.globalLocaleRoutes\n const parentRules =\n parentKey && gr?.[parentKey] && typeof gr[parentKey] === 'object' && !Array.isArray(gr[parentKey])\n ? (gr[parentKey] as Record<string, string>)\n : null\n let parentPath = parentRules?.[targetLocale] ? normalizePath(parentRules[targetLocale]) : ''\n if (!parentPath && currentRoute?.path) {\n const curPathOnly = getCleanPath(currentRoute.path)\n const { pathWithoutLocale: curWithoutLocale } = this.getPathWithoutLocale(curPathOnly)\n parentPath = normalizePath(curWithoutLocale)\n }\n if (!parentPath) {\n const nameSegments = getPathSegments(keyWithSlash).slice(0, -1)\n parentPath = nameSegments.length ? joinUrl('/', ...nameSegments) : ''\n }\n return parentPath\n }\n\n private buildPathWithPrefix(pathWithoutLocale: string, locale: string): string {\n const resolved = this.resolvePathForLocale(pathWithoutLocale, locale)\n if (resolved === '/' || resolved === '') {\n return `/${locale}`\n }\n return joinUrl(`/${locale}`, resolved)\n }\n\n /**\n * Simple locale detector based on route name suffix.\n * Looks for known locale codes at the end of the name.\n */\n protected detectLocaleFromName(name: string | null): string | null {\n if (!name) return null\n for (const locale of this.ctx.locales) {\n if (name.endsWith(`-${locale.code}`)) {\n return locale.code\n }\n }\n return null\n }\n\n /**\n * Formats path for router.resolve.\n * prefix_except_default: add prefix only for non-default locale.\n */\n formatPathForResolve(path: string, fromLocale: string, toLocale: string): string {\n if (toLocale !== this.ctx.defaultLocale) {\n return `/${fromLocale}${path}`\n }\n return path\n }\n\n /**\n * prefix_except_default: redirect based on preferred locale.\n * Uses shouldHavePrefix to determine if locale needs prefix.\n * Also handles custom paths from globalLocaleRoutes.\n */\n getClientRedirect(currentPath: string, preferredLocale: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n\n // Check if route is unlocalized\n const gr = this.ctx.globalLocaleRoutes\n const pathKey = pathWithoutLocale === '/' ? '/' : withoutLeadingSlash(pathWithoutLocale)\n if (gr && (gr[pathWithoutLocale] === false || gr[pathKey] === false)) {\n return null // Unlocalized routes - no redirect\n }\n\n // URL has locale prefix - user explicitly navigated here, don't redirect\n if (localeFromPath !== null) return null\n\n // Resolve custom path for this locale\n const customPath = this.resolvePathForLocale(pathWithoutLocale, preferredLocale)\n const needsPrefix = this.shouldHavePrefix(preferredLocale)\n\n // Build target path\n let targetPath: string\n if (needsPrefix) {\n targetPath = cleanDoubleSlashes(`/${preferredLocale}${customPath.startsWith('/') ? customPath : `/${customPath}`}`)\n } else {\n targetPath = customPath.startsWith('/') ? customPath : `/${customPath}`\n }\n\n // Remove trailing slash (except for root)\n if (targetPath !== '/' && targetPath.endsWith('/')) {\n targetPath = targetPath.slice(0, -1)\n }\n\n // Only redirect if target differs from current\n const currentClean = getCleanPath(currentPath)\n if (isSamePath(currentClean, targetPath)) return null\n\n return targetPath\n }\n}\n\n/** Alias for Nuxt alias consumption. */\nexport { PrefixExceptDefaultPathStrategy as Strategy }\n"],"names":["PrefixExceptDefaultPathStrategy","BasePathStrategy","locale","localeObj","l","path","_isCustom","joinUrl","normalizePath","baseName","fromLocale","toLocale","route","options","targetName","nameWithSuffix","nameWithoutSuffix","i18nParams","newParams","resolved","newRoute","pathWithoutLocale","targetPath","targetLocale","normalized","currentRoute","newPath","inputName","sourceRoute","unlocalizedByName","syntheticPath","nameKeyLastSlash","syntheticResolved","customBySynthetic","nestedInfo","pathNorm","parentPath","segment","hasParams","routeResult","routeWithParams","applied","unlocalizedPath","customSegment","routeName","baseRouteName","customForTarget","isNested","pathToUse","lastPathSegment","pathForLocale","routeWithName","routeByLocalizedName","resolvedBase","isIndexRouteName","transformNameKeyToPath","withBase","pathStr","cleanDoubleSlashes","localeFromPath","currentPath","detectedLocale","needPrefix","gr","pathKey","withoutLeadingSlash","normalizePathForCompare","expected","currentPathOnly","getCleanPath","isSamePath","expectedPath","key","v","keyLast","keyFirst","nameKeyFirstSlash","parentKeyFromSlashKey","parentLast","parentFirst","parentKey","keyWithSlash","parentRules","curPathOnly","curWithoutLocale","nameSegments","getPathSegments","name","preferredLocale","customPath","needsPrefix","currentClean"],"mappings":"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"}
1
+ {"version":3,"file":"prefix-except-default-strategy.mjs","sources":["../src/strategies/prefix-except-default.ts"],"sourcesContent":["import { cleanDoubleSlashes, isSamePath, withoutLeadingSlash } from 'ufo'\nimport type { NormalizedRouteInput, ResolvedRouteLike, RouteLike, SwitchLocaleOptions } from '../core/types'\nimport {\n getCleanPath,\n getPathSegments,\n joinUrl,\n lastPathSegment,\n nameKeyFirstSlash,\n nameKeyLastSlash,\n normalizePath,\n normalizePathForCompare,\n parentKeyFromSlashKey,\n transformNameKeyToPath,\n} from '../utils/path'\nimport { isIndexRouteName } from '../utils/route-name'\nimport { BasePathStrategy } from './base-strategy'\n\nexport class PrefixExceptDefaultPathStrategy extends BasePathStrategy {\n /**\n * For this strategy a prefix is required for all non-default locales.\n */\n protected shouldHavePrefix(locale: string): boolean {\n if (locale === this.ctx.defaultLocale) return false\n // When locale has baseUrl with baseDefault=true, no prefix needed (uses root on separate domain)\n const localeObj = this.ctx.locales.find((l) => l.code === locale)\n if (localeObj?.baseUrl && localeObj?.baseDefault) return false\n return true\n }\n\n protected buildLocalizedPath(path: string, locale: string, _isCustom: boolean): string {\n if (!this.shouldHavePrefix(locale)) return normalizePath(path)\n return joinUrl(locale, normalizePath(path))\n }\n\n protected buildLocalizedRouteName(baseName: string, locale: string): string {\n if (!this.shouldHavePrefix(locale)) return baseName\n return this.buildLocalizedName(baseName, locale)\n }\n\n override switchLocaleRoute(fromLocale: string, toLocale: string, route: ResolvedRouteLike, options: SwitchLocaleOptions): RouteLike | string {\n const baseName = this.getBaseRouteName(route, fromLocale)\n if (!baseName) return route\n\n // For non-default locale, try route name with locale suffix first (custom paths),\n // then without suffix (standard routes like \"localized-page\")\n let targetName: string\n if (this.shouldHavePrefix(toLocale)) {\n const nameWithSuffix = this.buildLocalizedName(baseName, toLocale)\n const nameWithoutSuffix = `${this.getLocalizedRouteNamePrefix()}${baseName}`\n targetName = this.ctx.router.hasRoute(nameWithSuffix) ? nameWithSuffix : nameWithoutSuffix\n } else {\n targetName = baseName\n }\n\n if (this.ctx.router.hasRoute(targetName)) {\n const i18nParams = options.i18nRouteParams?.[toLocale] || {}\n const newParams: Record<string, unknown> = { ...(route.params || {}), ...i18nParams }\n // Always set locale param for non-default locales because routes may have /:locale(...) in path\n if (this.shouldHavePrefix(toLocale)) {\n newParams.locale = toLocale\n } else {\n delete newParams.locale\n }\n\n // Resolve to get the actual path for applyBaseUrl\n const resolved = this.ctx.router.resolve({ name: targetName, params: newParams })\n const newRoute: RouteLike = {\n name: targetName,\n params: newParams,\n path: resolved?.path,\n fullPath: resolved?.fullPath,\n query: route.query,\n hash: route.hash,\n }\n\n return this.applyBaseUrl(toLocale, newRoute)\n }\n\n // Fallback: build path-based route\n const pathWithoutLocale = route.path?.replace(new RegExp(`^/${fromLocale}`), '') || '/'\n const targetPath = this.buildLocalizedPath(pathWithoutLocale, toLocale, false)\n return this.applyBaseUrl(toLocale, { path: targetPath, query: route.query, hash: route.hash })\n }\n\n protected override resolveLocaleRoute(\n targetLocale: string,\n normalized: NormalizedRouteInput,\n currentRoute?: ResolvedRouteLike,\n ): RouteLike | string {\n if (normalized.kind === 'path') {\n const path = this.resolvePathForLocale(normalized.path, targetLocale)\n if (!this.shouldHavePrefix(targetLocale)) return this.applyBaseUrl(targetLocale, path)\n const newPath = joinUrl(targetLocale, path)\n return this.applyBaseUrl(targetLocale, newPath)\n }\n\n const { inputName, sourceRoute, resolved } = normalized\n if (inputName) {\n const unlocalizedByName = this.getPathForUnlocalizedRouteByName(inputName)\n if (unlocalizedByName !== null) return this.preserveQueryAndHash(unlocalizedByName, sourceRoute)\n const keyLastSlash = nameKeyLastSlash(inputName)\n const syntheticPath = `/${keyLastSlash}`\n const syntheticResolved: ResolvedRouteLike = {\n name: inputName,\n path: syntheticPath,\n fullPath: syntheticPath,\n params: sourceRoute.params ?? {},\n }\n const customBySynthetic = this.getCustomPathSegment(syntheticResolved, targetLocale)\n if (customBySynthetic !== null) {\n const nestedInfo = this.getNestedRouteInfo(inputName)\n let pathNorm: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customBySynthetic.startsWith('/') ? customBySynthetic.slice(1) : customBySynthetic\n pathNorm = parentPath ? joinUrl(parentPath, segment) : normalizePath(customBySynthetic)\n } else {\n pathNorm = normalizePath(customBySynthetic)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, pathNorm), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, pathNorm)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n }\n\n const hasParams = sourceRoute.params && Object.keys(sourceRoute.params ?? {}).length > 0\n if (inputName && hasParams) {\n // For default locale, try resolving base route name first (without localized prefix)\n if (!this.shouldHavePrefix(targetLocale) && this.ctx.router.hasRoute(inputName)) {\n const resolved = this.ctx.router.resolve({\n name: inputName,\n params: sourceRoute.params,\n query: sourceRoute.query,\n hash: sourceRoute.hash,\n })\n if (resolved?.path && resolved.path !== '/') {\n const routeResult: RouteLike = {\n name: inputName,\n path: resolved.path,\n fullPath: resolved.fullPath,\n params: resolved.params,\n query: resolved.query ?? sourceRoute.query,\n hash: resolved.hash ?? sourceRoute.hash,\n }\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeResult), sourceRoute)\n }\n }\n const routeWithParams = this.tryResolveByLocalizedNameWithParams(inputName, targetLocale, sourceRoute.params ?? {}, sourceRoute)\n if (routeWithParams !== null) {\n const applied = this.applyBaseUrl(targetLocale, routeWithParams)\n return this.preserveQueryAndHash(applied, sourceRoute)\n }\n }\n\n if (resolved.name != null) {\n const unlocalizedPath = this.getPathForUnlocalizedRoute(resolved)\n if (unlocalizedPath !== null) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, unlocalizedPath), sourceRoute)\n }\n // When route has custom path for target locale (globalLocaleRoutes), build path string so href is correct\n const customSegment = this.getCustomPathSegment(resolved, targetLocale)\n if (customSegment !== null) {\n const routeName = resolved.name?.toString() ?? inputName ?? ''\n const nestedInfo = routeName ? this.getNestedRouteInfo(routeName) : null\n let path: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customSegment.startsWith('/') ? customSegment.slice(1) : customSegment\n path = joinUrl(parentPath, segment)\n } else {\n path = normalizePath(customSegment)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, path), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, path)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n // Use resolved path when valid. Prefer custom path for target locale; for nested routes build parent path + custom segment.\n if (resolved.path && resolved.path !== '/' && resolved.name) {\n const { pathWithoutLocale, baseRouteName } = this.getPathWithoutLocaleAndBaseName(resolved)\n const customForTarget = this.getCustomPathSegment(resolved, targetLocale)\n const nestedInfo = baseRouteName ? this.getNestedRouteInfo(baseRouteName) : null\n const isNested = !!nestedInfo\n let pathToUse: string | null\n if (customForTarget !== null && isNested && nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customForTarget.startsWith('/') ? customForTarget.slice(1) : customForTarget\n pathToUse = joinUrl(parentPath, segment)\n } else if (isNested && customForTarget === null && pathWithoutLocale && pathWithoutLocale !== '/' && nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = lastPathSegment(pathWithoutLocale)\n pathToUse = parentPath ? joinUrl(parentPath, segment) : pathWithoutLocale !== '/' ? pathWithoutLocale : null\n } else {\n pathToUse =\n customForTarget !== null && !isNested\n ? normalizePath(customForTarget)\n : pathWithoutLocale && pathWithoutLocale !== '/'\n ? pathWithoutLocale\n : null\n }\n if (pathToUse) {\n const fromLocale = this.detectLocaleFromName(resolved.name)\n const baseName = fromLocale ? this.getBaseRouteName(resolved, fromLocale) : resolved.name ? this.getRouteBaseName(resolved) : null\n const targetName = baseName\n ? this.shouldHavePrefix(targetLocale)\n ? this.buildLocalizedName(baseName, targetLocale)\n : baseName.toString()\n : undefined\n const pathForLocale = this.shouldHavePrefix(targetLocale) ? joinUrl(targetLocale, pathToUse) : pathToUse\n const routeWithName: RouteLike = {\n ...(targetName ? { name: targetName } : {}),\n path: pathForLocale,\n fullPath: pathForLocale,\n params: { ...resolved.params, ...sourceRoute.params },\n query: { ...resolved.query, ...sourceRoute.query },\n hash: sourceRoute.hash ?? resolved.hash,\n }\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeWithName), sourceRoute)\n }\n }\n }\n // When resolved failed (e.g. router has only localized names), try getCustomPathSegment by synthetic path from inputName\n if (inputName) {\n const keyLastSlash = nameKeyLastSlash(inputName)\n const syntheticPath = `/${keyLastSlash}`\n const syntheticResolved: ResolvedRouteLike = {\n name: inputName,\n path: syntheticPath,\n fullPath: syntheticPath,\n params: sourceRoute.params ?? {},\n }\n const customBySynthetic = this.getCustomPathSegment(syntheticResolved, targetLocale)\n if (customBySynthetic !== null) {\n const nestedInfo = this.getNestedRouteInfo(inputName)\n let pathNorm: string\n if (nestedInfo) {\n const parentPath = this.getParentPathForTarget(nestedInfo.parentKey, nestedInfo.keyWithSlash, targetLocale, currentRoute)\n const segment = customBySynthetic.startsWith('/') ? customBySynthetic.slice(1) : customBySynthetic\n pathNorm = joinUrl(parentPath || '/', segment)\n } else {\n pathNorm = normalizePath(customBySynthetic)\n }\n if (!this.shouldHavePrefix(targetLocale)) {\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, pathNorm), sourceRoute)\n }\n const newPath = joinUrl(targetLocale, pathNorm)\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newPath), sourceRoute)\n }\n }\n if (inputName && !hasParams) {\n // For default locale, try base route name first (e.g. 'index' instead of 'localized-index')\n if (!this.shouldHavePrefix(targetLocale)) {\n // Default locale: try to resolve baseName directly\n if (this.ctx.router.hasRoute(inputName)) {\n const resolvedBase = this.ctx.router.resolve({\n name: inputName,\n params: sourceRoute.params,\n query: sourceRoute.query,\n hash: sourceRoute.hash,\n })\n if (resolvedBase?.path) {\n return this.preserveQueryAndHash(\n this.applyBaseUrl(targetLocale, {\n name: inputName,\n path: resolvedBase.path,\n fullPath: resolvedBase.fullPath,\n params: resolvedBase.params,\n query: resolvedBase.query ?? sourceRoute.query,\n hash: resolvedBase.hash ?? sourceRoute.hash,\n }),\n sourceRoute,\n )\n }\n }\n } else {\n const routeByLocalizedName = this.tryResolveByLocalizedName(inputName, targetLocale, sourceRoute)\n if (routeByLocalizedName !== null) return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, routeByLocalizedName), sourceRoute)\n }\n }\n\n const fromLocale = currentRoute ? this.detectLocaleFromName(currentRoute.name) : this.detectLocaleFromName(resolved.name)\n\n const baseName = fromLocale ? this.getBaseRouteName(resolved, fromLocale) : (resolved.name ?? null)\n\n if (!baseName) return sourceRoute\n\n const targetName = this.shouldHavePrefix(targetLocale) ? this.buildLocalizedName(baseName, targetLocale) : baseName.toString()\n\n const pathWithoutLocale = isIndexRouteName(baseName) ? '/' : joinUrl('/', transformNameKeyToPath(baseName))\n const pathForLocale = this.shouldHavePrefix(targetLocale) ? joinUrl(targetLocale, pathWithoutLocale) : pathWithoutLocale\n const withBase = this.applyBaseUrl(targetLocale, pathForLocale)\n const pathStr = typeof withBase === 'string' ? withBase : ((withBase as RouteLike).path ?? pathForLocale)\n\n const newRoute: RouteLike = {\n name: targetName,\n path: pathStr,\n fullPath: pathStr,\n params: { ...resolved.params, ...sourceRoute.params },\n query: { ...resolved.query, ...sourceRoute.query },\n hash: sourceRoute.hash ?? resolved.hash,\n }\n\n return this.preserveQueryAndHash(this.applyBaseUrl(targetLocale, newRoute), sourceRoute)\n }\n\n override getCanonicalPath(route: ResolvedRouteLike, targetLocale: string): string | null {\n const segment = this.getCustomPathSegment(route, targetLocale)\n if (!segment) return null\n const normalized = segment.startsWith('/') ? segment : `/${segment}`\n if (!this.shouldHavePrefix(targetLocale)) {\n return cleanDoubleSlashes(normalized)\n }\n return cleanDoubleSlashes(`/${targetLocale}${normalized}`)\n }\n\n resolveLocaleFromPath(path: string): string | null {\n const { localeFromPath } = this.getPathWithoutLocale(path)\n if (localeFromPath) return localeFromPath\n return this.ctx.defaultLocale\n }\n\n getRedirect(currentPath: string, detectedLocale: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n const needPrefix = this.shouldHavePrefix(detectedLocale)\n\n // Unlocalized routes (globalLocaleRoutes[key] === false): redirect /locale/path to /path\n const gr = this.ctx.globalLocaleRoutes\n if (gr && localeFromPath !== null) {\n const pathKey = pathWithoutLocale === '/' ? '/' : withoutLeadingSlash(pathWithoutLocale)\n if (gr[pathWithoutLocale] === false || gr[pathKey] === false) {\n return normalizePathForCompare(pathWithoutLocale)\n }\n }\n\n if (localeFromPath !== null) {\n if (localeFromPath === this.ctx.defaultLocale) {\n return normalizePathForCompare(pathWithoutLocale)\n }\n if (localeFromPath === detectedLocale) {\n const expected = this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n const currentPathOnly = getCleanPath(currentPath)\n return isSamePath(currentPathOnly, expected) ? null : expected\n }\n return this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n }\n\n if (needPrefix) {\n return this.buildPathWithPrefix(pathWithoutLocale, detectedLocale)\n }\n const expectedPath = this.resolvePathForLocale(pathWithoutLocale, detectedLocale)\n const normalized = expectedPath.startsWith('/') ? expectedPath : `/${expectedPath}`\n const currentPathOnly = getCleanPath(currentPath)\n return isSamePath(currentPathOnly, normalized) ? null : normalized\n }\n\n override shouldReturn404(currentPath: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n\n // No locale in URL - no 404 from strategy perspective\n if (localeFromPath === null) return null\n\n // Default locale with prefix is 404 for prefix_except_default\n // e.g. /en when defaultLocale is 'en' and path is just the locale\n if (localeFromPath === this.ctx.defaultLocale && pathWithoutLocale === '/') {\n return 'Default locale should not have prefix'\n }\n\n // Delegate to base implementation for other checks\n return super.shouldReturn404(currentPath)\n }\n\n /** True if gr[key] is a locale rules object (Record<locale, path>). */\n private isLocaleRules(key: string): boolean {\n const gr = this.ctx.globalLocaleRoutes\n if (!gr || !key) return false\n const v = gr[key]\n return typeof v === 'object' && v !== null && !Array.isArray(v)\n }\n\n /**\n * For a nested route name (e.g. activity-locale-hiking), returns parent key and slash-key\n * when the route is nested (child or parent in globalLocaleRoutes). Otherwise null.\n */\n private getNestedRouteInfo(baseRouteName: string): { parentKey: string; keyWithSlash: string } | null {\n const gr = this.ctx.globalLocaleRoutes\n if (!gr) return null\n const keyLast = nameKeyLastSlash(baseRouteName)\n const keyFirst = nameKeyFirstSlash(baseRouteName)\n if (keyLast.includes('/') && this.isLocaleRules(keyLast)) {\n return { parentKey: parentKeyFromSlashKey(keyLast), keyWithSlash: keyLast }\n }\n if (keyFirst.includes('/') && this.isLocaleRules(keyFirst)) {\n return { parentKey: parentKeyFromSlashKey(keyFirst), keyWithSlash: keyFirst }\n }\n const parentLast = parentKeyFromSlashKey(keyLast)\n if (keyLast.includes('/') && parentLast && this.isLocaleRules(parentLast)) {\n return { parentKey: parentLast, keyWithSlash: keyLast }\n }\n const parentFirst = parentKeyFromSlashKey(keyFirst)\n if (keyFirst.includes('/') && parentFirst && this.isLocaleRules(parentFirst)) {\n return { parentKey: parentFirst, keyWithSlash: keyFirst }\n }\n return null\n }\n\n /** Parent path for target locale from gr or currentRoute. */\n private getParentPathForTarget(parentKey: string, keyWithSlash: string, targetLocale: string, currentRoute?: ResolvedRouteLike): string {\n const gr = this.ctx.globalLocaleRoutes\n const parentRules =\n parentKey && gr?.[parentKey] && typeof gr[parentKey] === 'object' && !Array.isArray(gr[parentKey])\n ? (gr[parentKey] as Record<string, string>)\n : null\n let parentPath = parentRules?.[targetLocale] ? normalizePath(parentRules[targetLocale]) : ''\n if (!parentPath && currentRoute?.path) {\n const curPathOnly = getCleanPath(currentRoute.path)\n const { pathWithoutLocale: curWithoutLocale } = this.getPathWithoutLocale(curPathOnly)\n parentPath = normalizePath(curWithoutLocale)\n }\n if (!parentPath) {\n const nameSegments = getPathSegments(keyWithSlash).slice(0, -1)\n parentPath = nameSegments.length ? joinUrl('/', ...nameSegments) : ''\n }\n return parentPath\n }\n\n private buildPathWithPrefix(pathWithoutLocale: string, locale: string): string {\n const resolved = this.resolvePathForLocale(pathWithoutLocale, locale)\n if (resolved === '/' || resolved === '') {\n return `/${locale}`\n }\n return joinUrl(`/${locale}`, resolved)\n }\n\n /**\n * Simple locale detector based on route name suffix.\n * Looks for known locale codes at the end of the name.\n */\n protected detectLocaleFromName(name: string | null): string | null {\n if (!name) return null\n for (const locale of this.ctx.locales) {\n if (name.endsWith(`-${locale.code}`)) {\n return locale.code\n }\n }\n return null\n }\n\n /**\n * Formats path for router.resolve.\n * prefix_except_default: add prefix only for non-default locale.\n */\n formatPathForResolve(path: string, fromLocale: string, toLocale: string): string {\n if (toLocale !== this.ctx.defaultLocale) {\n return `/${fromLocale}${path}`\n }\n return path\n }\n\n /**\n * prefix_except_default: redirect based on preferred locale.\n * Uses shouldHavePrefix to determine if locale needs prefix.\n * Also handles custom paths from globalLocaleRoutes.\n */\n getClientRedirect(currentPath: string, preferredLocale: string): string | null {\n const { pathWithoutLocale, localeFromPath } = this.getPathWithoutLocale(currentPath)\n\n // Check if route is unlocalized\n const gr = this.ctx.globalLocaleRoutes\n const pathKey = pathWithoutLocale === '/' ? '/' : withoutLeadingSlash(pathWithoutLocale)\n if (gr && (gr[pathWithoutLocale] === false || gr[pathKey] === false)) {\n return null // Unlocalized routes - no redirect\n }\n\n // URL has locale prefix - user explicitly navigated here, don't redirect\n if (localeFromPath !== null) return null\n\n // Resolve custom path for this locale\n const customPath = this.resolvePathForLocale(pathWithoutLocale, preferredLocale)\n const needsPrefix = this.shouldHavePrefix(preferredLocale)\n\n // Build target path\n let targetPath: string\n if (needsPrefix) {\n targetPath = cleanDoubleSlashes(`/${preferredLocale}${customPath.startsWith('/') ? customPath : `/${customPath}`}`)\n } else {\n targetPath = customPath.startsWith('/') ? customPath : `/${customPath}`\n }\n\n // Remove trailing slash (except for root)\n if (targetPath !== '/' && targetPath.endsWith('/')) {\n targetPath = targetPath.slice(0, -1)\n }\n\n // Only redirect if target differs from current\n const currentClean = getCleanPath(currentPath)\n if (isSamePath(currentClean, targetPath)) return null\n\n return targetPath\n }\n}\n\n/** Alias for Nuxt alias consumption. */\nexport { PrefixExceptDefaultPathStrategy as Strategy }\n"],"names":["PrefixExceptDefaultPathStrategy","BasePathStrategy","locale","localeObj","l","path","_isCustom","joinUrl","normalizePath","baseName","fromLocale","toLocale","route","options","targetName","nameWithSuffix","nameWithoutSuffix","i18nParams","newParams","resolved","newRoute","pathWithoutLocale","targetPath","targetLocale","normalized","currentRoute","newPath","inputName","sourceRoute","unlocalizedByName","syntheticPath","nameKeyLastSlash","syntheticResolved","customBySynthetic","nestedInfo","pathNorm","parentPath","segment","hasParams","routeResult","routeWithParams","applied","unlocalizedPath","customSegment","routeName","baseRouteName","customForTarget","isNested","pathToUse","lastPathSegment","pathForLocale","routeWithName","routeByLocalizedName","resolvedBase","isIndexRouteName","transformNameKeyToPath","withBase","pathStr","cleanDoubleSlashes","localeFromPath","currentPath","detectedLocale","needPrefix","gr","pathKey","withoutLeadingSlash","normalizePathForCompare","expected","currentPathOnly","getCleanPath","isSamePath","expectedPath","key","v","keyLast","keyFirst","nameKeyFirstSlash","parentKeyFromSlashKey","parentLast","parentFirst","parentKey","keyWithSlash","parentRules","curPathOnly","curWithoutLocale","nameSegments","getPathSegments","name","preferredLocale","customPath","needsPrefix","currentClean"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("./base-strategy-BuHeTv1K.cjs");class u extends l.BasePathStrategy{buildLocalizedPath(a,e,t){return l.joinUrl(e,l.normalizePath(a))}buildLocalizedRouteName(a,e){return this.buildLocalizedName(a,e)}getCanonicalPath(a,e){const t=this.getCustomPathSegment(a,e);if(!t)return null;const o=t.startsWith("/")?t:`/${t}`;return l.cleanDoubleSlashes(`/${e}${o}`)}resolveLocaleFromPath(a){const{localeFromPath:e}=this.getPathWithoutLocale(a);return e}getRedirect(a,e){const{pathWithoutLocale:t,localeFromPath:o}=this.getPathWithoutLocale(a),s=this.ctx.globalLocaleRoutes,n=t==="/"?"/":l.withoutLeadingSlash(t),i=s&&(s[t]===!1||s[n]===!1);if(i&&o!==null)return l.normalizePathForCompare(t);if(i&&o===null)return null;const r=this.buildPathWithPrefix(t,e),h=l.getCleanPath(a);return o===e&&l.isSamePath(h,r)?null:r}buildPathWithPrefix(a,e){const t=this.resolvePathForLocale(a,e);if(t==="/"||t==="")return`/${e}`;const o=`/${e}`,s=t.startsWith("/")?t:`/${t}`;return l.cleanDoubleSlashes(o+s)}formatPathForResolve(a,e,t){return`/${e}${a}`}getClientRedirect(a,e){const{pathWithoutLocale:t,localeFromPath:o}=this.getPathWithoutLocale(a),s=this.ctx.globalLocaleRoutes,n=t==="/"?"/":l.withoutLeadingSlash(t);if(s&&(s[t]===!1||s[n]===!1)||o!==null)return null;const i=this.resolvePathForLocale(t,e);let r=l.cleanDoubleSlashes(`/${e}${i.startsWith("/")?i:`/${i}`}`);r!=="/"&&r.endsWith("/")&&(r=r.slice(0,-1));const h=l.getCleanPath(a);return l.isSamePath(h,r)?null:r}}exports.PrefixPathStrategy=u;exports.Strategy=u;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("./base-strategy-iCda2UF-.cjs");class u extends l.BasePathStrategy{buildLocalizedPath(a,e,t){return l.joinUrl(e,l.normalizePath(a))}buildLocalizedRouteName(a,e){return this.buildLocalizedName(a,e)}getCanonicalPath(a,e){const t=this.getCustomPathSegment(a,e);if(!t)return null;const o=t.startsWith("/")?t:`/${t}`;return l.cleanDoubleSlashes(`/${e}${o}`)}resolveLocaleFromPath(a){const{localeFromPath:e}=this.getPathWithoutLocale(a);return e}getRedirect(a,e){const{pathWithoutLocale:t,localeFromPath:o}=this.getPathWithoutLocale(a),s=this.ctx.globalLocaleRoutes,n=t==="/"?"/":l.withoutLeadingSlash(t),i=s&&(s[t]===!1||s[n]===!1);if(i&&o!==null)return l.normalizePathForCompare(t);if(i&&o===null)return null;const r=this.buildPathWithPrefix(t,e),h=l.getCleanPath(a);return o===e&&l.isSamePath(h,r)?null:r}buildPathWithPrefix(a,e){const t=this.resolvePathForLocale(a,e);if(t==="/"||t==="")return`/${e}`;const o=`/${e}`,s=t.startsWith("/")?t:`/${t}`;return l.cleanDoubleSlashes(o+s)}formatPathForResolve(a,e,t){return`/${e}${a}`}getClientRedirect(a,e){const{pathWithoutLocale:t,localeFromPath:o}=this.getPathWithoutLocale(a),s=this.ctx.globalLocaleRoutes,n=t==="/"?"/":l.withoutLeadingSlash(t);if(s&&(s[t]===!1||s[n]===!1)||o!==null)return null;const i=this.resolvePathForLocale(t,e);let r=l.cleanDoubleSlashes(`/${e}${i.startsWith("/")?i:`/${i}`}`);r!=="/"&&r.endsWith("/")&&(r=r.slice(0,-1));const h=l.getCleanPath(a);return l.isSamePath(h,r)?null:r}}exports.PrefixPathStrategy=u;exports.Strategy=u;
2
2
  //# sourceMappingURL=prefix-strategy.cjs.map
@@ -129,7 +129,7 @@ declare abstract class BasePathStrategy implements PathStrategy {
129
129
  getCurrentLocale(route: ResolvedRouteLike, getDefaultLocale?: () => string | null | undefined): string;
130
130
  /**
131
131
  * Returns the route name for plugin translation loading.
132
- * If disablePageLocales is true, returns 'general'.
132
+ * If disablePageLocales is true, returns 'index'.
133
133
  */
134
134
  getPluginRouteName(route: ResolvedRouteLike, locale: string): string;
135
135
  /**
@@ -229,7 +229,7 @@ declare interface PathStrategy {
229
229
  getCurrentLocale(route: ResolvedRouteLike, getDefaultLocale?: () => string | null | undefined): string;
230
230
  /**
231
231
  * Returns the route name for plugin translation loading.
232
- * If disablePageLocales is true, returns 'general'.
232
+ * If disablePageLocales is true, returns 'index'.
233
233
  */
234
234
  getPluginRouteName(route: ResolvedRouteLike, locale: string): string;
235
235
  /**
@@ -260,7 +260,6 @@ declare interface PathStrategyContext {
260
260
  globalLocaleRoutes?: GlobalLocaleRoutes;
261
261
  routeLocales?: Record<string, string[]>;
262
262
  routesLocaleLinks?: Record<string, string>;
263
- includeDefaultLocaleRoute?: boolean;
264
263
  noPrefixRedirect?: boolean;
265
264
  debug?: boolean;
266
265
  router: RouterAdapter;
@@ -320,7 +319,7 @@ declare class RouteResolver {
320
319
  constructor(ctx: PathStrategyContext);
321
320
  /**
322
321
  * Substitutes params into path template (:key, :key(), [...key]).
323
- * Uses one combined regex per key to avoid creating multiple RegExp in a loop.
322
+ * Uses a single pre-compiled regex for all keys in one pass no per-key RegExp allocation.
324
323
  */
325
324
  resolvePathWithParams(path: string, params?: Record<string, unknown>): string;
326
325
  /**
@@ -1,4 +1,4 @@
1
- import { B as g, j as m, n as f, c as h, w as u, a as d, g as c, i as P } from "./base-strategy-Cf39XK8k.js";
1
+ import { B as g, j as m, n as f, c as h, w as u, a as d, g as c, i as P } from "./base-strategy-DDkINDnZ.js";
2
2
  class $ extends g {
3
3
  buildLocalizedPath(a, e, t) {
4
4
  return m(e, f(a));