cesr
Version:
[](https://www.npmjs.com/package/cesr) [](https://github.com/lenkan/cesr-js/blob/main/LICENSE)
33 lines (32 loc) • 987 B
JavaScript
import { parse } from "./parser.js";
/**
* Parses JSON messages with CESR attachments from an incoming stream of bytes.
*
* @param input Incoming stream of bytes
* @returns An async iterable of messages with attachments
*/
export async function* parseMessages(input, options = {}) {
let group = null;
let message = null;
for await (const frame of parse(input, options)) {
if (frame.type === "message") {
if (message) {
yield message;
}
message = { payload: JSON.parse(frame.text), attachments: {} };
group = null;
}
else if (frame.code.startsWith("-")) {
group = frame.code;
}
else {
message = message ?? { payload: {}, attachments: {} };
if (group) {
message.attachments[group] = [...(message.attachments[group] ?? []), frame.text];
}
}
}
if (message) {
yield message;
}
}