```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 = [];
    let frame = "";
    let pending = "";

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

    pending = frame.includes(marker) ? frame : frame + marker;

    return { frames, pending };
}
```