diff options
| author | Mar0xy <marie@kaifa.ch> | 2023-09-25 01:49:57 +0200 |
|---|---|---|
| committer | Mar0xy <marie@kaifa.ch> | 2023-09-25 01:49:57 +0200 |
| commit | 3fd2b55406fe4d2b7c7fa40208bbb779a2e8351b (patch) | |
| tree | 78d106d29c781d17c9dd730cdd23fe91644767d2 /packages/megalodon/src/parser.ts | |
| parent | test: fix lock (diff) | |
| download | sharkey-3fd2b55406fe4d2b7c7fa40208bbb779a2e8351b.tar.gz sharkey-3fd2b55406fe4d2b7c7fa40208bbb779a2e8351b.tar.bz2 sharkey-3fd2b55406fe4d2b7c7fa40208bbb779a2e8351b.zip | |
Revert "test: check old megalodon version"
This reverts commit 89eea5df5286a9fdf2976d41cdbaf0c40dd19b62.
Diffstat (limited to 'packages/megalodon/src/parser.ts')
| -rw-r--r-- | packages/megalodon/src/parser.ts | 142 |
1 files changed, 67 insertions, 75 deletions
diff --git a/packages/megalodon/src/parser.ts b/packages/megalodon/src/parser.ts index 2ddf2ac2e6..67abff797d 100644 --- a/packages/megalodon/src/parser.ts +++ b/packages/megalodon/src/parser.ts @@ -1,94 +1,86 @@ -import { EventEmitter } from "events"; -import Entity from "./entity"; +import { EventEmitter } from 'events' +import Entity from './entity' /** * Parser * Parse response data in streaming. **/ export class Parser extends EventEmitter { - private message: string; + private message: string - constructor() { - super(); - this.message = ""; - } + constructor() { + super() + this.message = '' + } - public parse(chunk: string) { - // skip heartbeats - if (chunk === ":thump\n") { - this.emit("heartbeat", {}); - return; - } + public parse(chunk: string) { + // skip heartbeats + if (chunk === ':thump\n') { + this.emit('heartbeat', {}) + return + } - this.message += chunk; - chunk = this.message; + this.message += chunk + chunk = this.message - const size: number = chunk.length; - let start = 0; - let offset = 0; - let curr: string | undefined; - let next: string | undefined; + const size: number = chunk.length + let start: number = 0 + let offset: number = 0 + let curr: string | undefined + let next: string | undefined - while (offset < size) { - curr = chunk[offset]; - next = chunk[offset + 1]; + while (offset < size) { + curr = chunk[offset] + next = chunk[offset + 1] - if (curr === "\n" && next === "\n") { - const piece: string = chunk.slice(start, offset); + if (curr === '\n' && next === '\n') { + const piece: string = chunk.slice(start, offset) - offset += 2; - start = offset; + offset += 2 + start = offset - if (!piece.length) continue; // empty object + if (!piece.length) continue // empty object - const root: Array<string> = piece.split("\n"); + const root: Array<string> = piece.split('\n') - // should never happen, as long as mastodon doesn't change API messages - if (root.length !== 2) continue; + // should never happen, as long as mastodon doesn't change API messages + if (root.length !== 2) continue - // remove event and data markers - const event: string = root[0].substr(7); - const data: string = root[1].substr(6); + // remove event and data markers + const event: string = root[0].substr(7) + const data: string = root[1].substr(6) - let jsonObj = {}; - try { - jsonObj = JSON.parse(data); - } catch (err) { - // delete event does not have json object - if (event !== "delete") { - this.emit( - "error", - new Error( - `Error parsing API reply: '${piece}', error message: '${err}'`, - ), - ); - continue; - } - } - switch (event) { - case "update": - this.emit("update", jsonObj as Entity.Status); - break; - case "notification": - this.emit("notification", jsonObj as Entity.Notification); - break; - case "conversation": - this.emit("conversation", jsonObj as Entity.Conversation); - break; - case "delete": - // When delete, data is an ID of the deleted status - this.emit("delete", data); - break; - default: - this.emit( - "error", - new Error(`Unknown event has received: ${event}`), - ); - continue; - } - } - offset++; - } - this.message = chunk.slice(start, size); - } + let jsonObj = {} + try { + jsonObj = JSON.parse(data) + } catch (err) { + // delete event does not have json object + if (event !== 'delete') { + this.emit('error', new Error(`Error parsing API reply: '${piece}', error message: '${err}'`)) + continue + } + } + switch (event) { + case 'update': + this.emit('update', jsonObj as Entity.Status) + break + case 'notification': + this.emit('notification', jsonObj as Entity.Notification) + break + case 'conversation': + this.emit('conversation', jsonObj as Entity.Conversation) + break + case 'delete': + // When delete, data is an ID of the deleted status + this.emit('delete', data) + break + default: + this.emit('error', new Error(`Unknown event has received: ${event}`)) + continue + } + } + offset++ + } + this.message = chunk.slice(start, size) + } } |