Buffering is done by the UART chip and the operating system. JSDB does not do any additional buffering. How the buffer state gets reported to JSDB therefore varies and I'm sorry for the trouble, but I and many others have gotten serial io to work, so don't give up.
If you call s.read(1), you are supposed to get an empty string if there is no input queued. ( note convention: variables start with lower case letters) so you should be able to call s.read(1) until you either read a newline or decide to give up.
Some serial equipment still perversely thinks \r or \0 is a line terminator. JSDB only looks for \n. try s.readInt8() to debug.
eof() is meaningless for a serial port of course, but canRead() used to work on windows and Linux, so feel free to take a look at the source file (rs/io_comm.cpp) and let me know if you see anything suspicious.
Shanti