summaryrefslogtreecommitdiff
path: root/packages/megalodon/src/parser.ts
diff options
context:
space:
mode:
authorMar0xy <marie@kaifa.ch>2023-09-25 01:49:57 +0200
committerMar0xy <marie@kaifa.ch>2023-09-25 01:49:57 +0200
commit3fd2b55406fe4d2b7c7fa40208bbb779a2e8351b (patch)
tree78d106d29c781d17c9dd730cdd23fe91644767d2 /packages/megalodon/src/parser.ts
parenttest: fix lock (diff)
downloadsharkey-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.ts142
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)
+ }
}