next.js/packages/next/src/client/normalize-trailing-slash.ts
normalize-trailing-slash.ts27 lines873 B
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) => {
  // 47 is the char code for '/'
  if (path.charCodeAt(0) !== 47 || process.env.__NEXT_MANUAL_TRAILING_SLASH) {
    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}`
}
Quest for Codev2.0.0
/
SIGN IN