rsnext/packages/next/client/normalize-trailing-slash.ts
Javi Velasco daab64c27e
Extract router utils to common functions (#37313)
* Extract `detect-domain-locale` to a util file

* Remove `pathNoQueryHash` in favor of `parsePath`

* Remove `hasPathPrefix` in favor of `pathHasPrefix`

* Remove `addPathPrefix` in favor of an existing util

* Bugfix parsing pathname

* Refactor `addLocale`

* Extract `removeLocale`

* Extract `basePath` utils

* Dynamic imports for `getDomainLocale`
2022-05-30 20:19:37 +02:00

25 lines
792 B
TypeScript

import { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'
import { parsePath } from '../shared/lib/router/utils/parse-path'
/**
* Normalizes the trailing slash of a path according to the `trailingSlash` option
* in `next.config.js`.
*/
export const normalizePathTrailingSlash = (path: string) => {
if (!path.startsWith('/')) {
return path
}
const { pathname, query, hash } = parsePath(path)
if (process.env.__NEXT_TRAILING_SLASH) {
if (/\.[^/]+\/?$/.test(pathname)) {
return `${removeTrailingSlash(pathname)}${query}${hash}`
} else if (pathname.endsWith('/')) {
return `${pathname}${query}${hash}`
} else {
return `${pathname}/${query}${hash}`
}
}
return `${removeTrailingSlash(pathname)}${query}${hash}`
}