You can use scan to do this:
from(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u']) .pipe( scan((acc, val) => { acc.push(val); return acc.slice(-3); }, []), ) .subscribe(console.log);
This will print:
[ 'a' ] [ 'a', 'b' ] [ 'a', 'b', 'c' ] [ 'b', 'c', 'd' ] [ 'c', 'd', 'e' ] ... [ 's', 't', 'u' ]
bufferCount will not do what you want. It will emit only when each buffer is exactly === 3 which means that you will not receive any radiation until you send at least 3 messages.
martin
source share