next.js/packages/next/src/server/normalizers/request/segment-prefix-rsc.ts
segment-prefix-rsc.ts32 lines864 B
import type { PathnameNormalizer } from './pathname-normalizer'

import {
  RSC_SEGMENT_SUFFIX,
  RSC_SEGMENTS_DIR_SUFFIX,
} from '../../../lib/constants'
import { escapeStringRegexp } from '../../../shared/lib/escape-regexp'

const PATTERN = new RegExp(
  `^(/.*)${escapeStringRegexp(RSC_SEGMENTS_DIR_SUFFIX)}(/.*)${escapeStringRegexp(RSC_SEGMENT_SUFFIX)}$`
)

export class SegmentPrefixRSCPathnameNormalizer implements PathnameNormalizer {
  public match(pathname: string): boolean {
    return PATTERN.test(pathname)
  }

  public extract(pathname: string) {
    const match = pathname.match(PATTERN)
    if (!match) return null

    return { originalPathname: match[1], segmentPath: match[2] }
  }

  public normalize(pathname: string): string {
    const match = this.extract(pathname)
    if (!match) return pathname

    return match.originalPathname
  }
}
Quest for Codev2.0.0
/
SIGN IN