mirror of
https://github.com/node-red/node-red-nodes.git
synced 2025-03-01 10:37:43 +00:00
55 lines
2.0 KiB
JavaScript
55 lines
2.0 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.EStreamParserEvent = void 0;
|
|
const events_1 = require("events");
|
|
class TweetStreamParser extends events_1.EventEmitter {
|
|
constructor() {
|
|
super(...arguments);
|
|
this.currentMessage = '';
|
|
}
|
|
// Code partially belongs to twitter-stream-api for this
|
|
// https://github.com/trygve-lie/twitter-stream-api/blob/master/lib/parser.js
|
|
push(chunk) {
|
|
this.currentMessage += chunk;
|
|
chunk = this.currentMessage;
|
|
const size = chunk.length;
|
|
let start = 0;
|
|
let offset = 0;
|
|
while (offset < size) {
|
|
// Take [offset, offset+1] inside a new string
|
|
if (chunk.slice(offset, offset + 2) === '\r\n') {
|
|
// If chunk contains \r\n after current offset,
|
|
// parse [start, ..., offset] as a tweet
|
|
const piece = chunk.slice(start, offset);
|
|
start = offset += 2;
|
|
// If empty object
|
|
if (!piece.length) {
|
|
continue;
|
|
}
|
|
try {
|
|
const payload = JSON.parse(piece);
|
|
if (payload) {
|
|
this.emit(EStreamParserEvent.ParsedData, payload);
|
|
continue;
|
|
}
|
|
}
|
|
catch (error) {
|
|
this.emit(EStreamParserEvent.ParseError, error);
|
|
}
|
|
}
|
|
offset++;
|
|
}
|
|
this.currentMessage = chunk.slice(start, size);
|
|
}
|
|
/** Reset the currently stored message (f.e. on connection reset) */
|
|
reset() {
|
|
this.currentMessage = '';
|
|
}
|
|
}
|
|
exports.default = TweetStreamParser;
|
|
var EStreamParserEvent;
|
|
(function (EStreamParserEvent) {
|
|
EStreamParserEvent["ParsedData"] = "parsed data";
|
|
EStreamParserEvent["ParseError"] = "parse error";
|
|
})(EStreamParserEvent = exports.EStreamParserEvent || (exports.EStreamParserEvent = {}));
|