export function createRoutePath()

in packages/route-manifest/src/index.ts [258:322]


export function createRoutePath(routeId: string): string | undefined {
  let result = '';
  let rawSegmentBuffer = '';

  let inEscapeSequence = 0;
  let skipSegment = false;

  const partialRouteId = removeLastLayoutStrFromId(routeId);

  for (let i = 0; i < partialRouteId.length; i++) {
    const char = partialRouteId.charAt(i);
    const lastChar = i > 0 ? partialRouteId.charAt(i - 1) : undefined;
    const nextChar = i < partialRouteId.length - 1 ? partialRouteId.charAt(i + 1) : undefined;

    const isNewEscapeSequence = !inEscapeSequence && char === escapeStart && lastChar !== escapeStart;
    const isCloseEscapeSequence = inEscapeSequence && char === escapeEnd && nextChar !== escapeEnd;

    if (skipSegment) {
      if (char === '/' || char === '.' || char === path.win32.sep) {
        skipSegment = false;
      }
      continue;
    }
    // We try to get the string in the escape sequence. For example, try to get the `index` string in `[index]`.
    if (isNewEscapeSequence) {
      inEscapeSequence++;
      continue;
    }

    if (isCloseEscapeSequence) {
      inEscapeSequence--;
      continue;
    }

    if (inEscapeSequence) {
      result += char;
      continue;
    }

    if (char === '/' || char === path.win32.sep || char === '.') {
      if (rawSegmentBuffer === 'index' && result.endsWith('index')) {
        result = result.replace(/\/?index$/, '');
      } else {
        result += '/';
      }
      rawSegmentBuffer = '';
      continue;
    }

    rawSegmentBuffer += char;

    if (char === '$') {
      result += typeof nextChar === 'undefined' ? '*' : ':';
      continue;
    }

    result += char;
  }

  if (rawSegmentBuffer === 'index' && result.endsWith('index')) {
    result = result.replace(/\/?index$/, '');
  }

  return result || undefined;
}