1.0.0 • Published 11 months ago

sse-stringify v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

sse-stringify

Marshalling Javascript data into Server-Sent Events (sse) text/event-stream format

Installing

npm install sse-stringify

Basic usage

import { sseStringify } from 'sse-stringify';

sseStringify({
  id: '0',
  data: JSON.stringify({}),
  event: 'my-event',
});
// 'id: 0\nevent: my-event\ndata: {}\n\n'

sseStringify({ retry: 1000 });
// 'retry: 1000\n\n'

sseStringify({ comment: 'OK' });
// ': OK\n\n'

Data can be a multiline string

It can be useful to send some lines of csv or ndjson within the same event/message.

const prettyJSON = JSON.stringify({ a: 1, o: { nested: [] } }, null, 2);
sseStringify({ data: prettyJSON });
/*
'data: {\n' +
'data:   "a": 1,\n' +
'data:   "o": {\n' +
'data:     "nested": []\n' +
'data:   }\n' +
'data: }\n' +
'\n'
*/

Using with iterables and streams

We can pass false as the second parameter to disable the newline at the end and thus call the function several times but send only 1 event with the result.

This allows better mapping between the JS data structure and the text/event-stream format or use this function with iterables and streams.

let event = '';

const arr = [
  { event: 'my-event' },
  { data: 'csv or ndjson line' },
  { data: 'csv or ndjson line' },
  { id: '0' },
];

arr.forEach((value, index, array) => {
  if (index === array.length - 1) {
    // last item should have a newline at the end
    event += sseStringify(value);
  } else {
    event += sseStringify(value, false);
  }
});

/* or

arr.forEach((value, index, array) => {
  event += sseStringify(value, false);
});

event += '\n';
*/

console.log(event);
// 'event: my-event\ndata: csv or ndjson line\ndata: csv or ndjson line\nid: 0\n\n'

License

MIT licensed.

1.0.0

11 months ago

0.1.0

11 months ago

0.0.0-alpha.2

11 months ago

0.0.0-alpha.0

11 months ago