* applied eslint * add locales and lint the project * removed error boundary * updated locales * fix min files * fix locales
45 lines
1 KiB
TypeScript
45 lines
1 KiB
TypeScript
import type { Message } from './message.gen';
|
|
import type { RawMessage } from './raw.gen';
|
|
import { MType } from './raw.gen';
|
|
|
|
interface RawMessageReaderI {
|
|
readMessage(): RawMessage | null;
|
|
}
|
|
|
|
export default class MStreamReader {
|
|
constructor(
|
|
private readonly r: RawMessageReaderI,
|
|
private startTs: number = 0,
|
|
) {}
|
|
|
|
private t: number = 0;
|
|
|
|
private idx: number = 0;
|
|
|
|
currentTab = 'back-compatability';
|
|
|
|
readNext(): (Message & { _index: number; tabId: string }) | null {
|
|
const msg = this.r.readMessage();
|
|
if (msg === null) {
|
|
return null;
|
|
}
|
|
if (msg.tp === MType.Timestamp) {
|
|
this.startTs = this.startTs || msg.timestamp;
|
|
const newT = msg.timestamp - this.startTs;
|
|
if (newT > this.t) {
|
|
this.t = newT;
|
|
}
|
|
return this.readNext();
|
|
}
|
|
if (msg.tp === MType.TabData) {
|
|
this.currentTab = msg.tabId;
|
|
return this.readNext();
|
|
}
|
|
|
|
return Object.assign(msg, {
|
|
time: this.t,
|
|
_index: this.idx++,
|
|
tabId: this.currentTab,
|
|
});
|
|
}
|
|
}
|