next.js/packages/next/src/server/normalizers/request/prefix.ts
prefix.ts32 lines880 B
import type { Normalizer } from '../normalizer'

export class PrefixPathnameNormalizer implements Normalizer {
  constructor(private readonly prefix: string) {
    if (prefix.endsWith('/')) {
      throw new Error(
        `PrefixPathnameNormalizer: prefix "${prefix}" should not end with a slash`
      )
    }
  }

  public match(pathname: string) {
    // If the pathname doesn't start with the prefix, we don't match.
    if (pathname !== this.prefix && !pathname.startsWith(this.prefix + '/')) {
      return false
    }

    return true
  }

  public normalize(pathname: string, matched?: boolean): string {
    // If we're not matched and we don't match, we don't need to normalize.
    if (!matched && !this.match(pathname)) return pathname

    if (pathname.length === this.prefix.length) {
      return '/'
    }

    return pathname.substring(this.prefix.length)
  }
}
Quest for Codev2.0.0
/
SIGN IN