```ts
export function drainFrames(chunks: string[], marker: string): { frames: string[]; pending: string } {
  if (marker.length !== 1) throw new Error('Marker must be a single character');

  const frames: string[] = [];
  let frame = '';
  let pending = '';

  for (const chunk of chunks) {
    let i = 0;
    while (i < chunk.length) {
      if (chunk[i] === marker && i + 1 < chunk.length && chunk[i + 1] === marker) {
        frame += marker;
        i += 2;
      } else if (chunk[i] === marker) {
        frames.push(frame);
        frame = '';
        i++;
      } else {
        frame += chunk[i];
        i++;
      }
    }
    pending += frame;
    frame = '';
  }

  if (pending.endsWith(marker)) {
    pending = pending.slice(0, -1);
  }

  return { frames, pending };
}
```