UNPKG

ts-migrate-server

Version:

A package that contains the main migration runner and spawns a TSServer process

62 lines 2.24 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /** * Modeled after https://github.com/Microsoft/vscode/blob/92f9f50a93ba278f7bb637386ac1ffcdfd38a55e/extensions/typescript-language-features/src/utils/wireProtocol.ts#L83 */ const events_1 = require("events"); const ProtocolBuffer_1 = __importDefault(require("./ProtocolBuffer")); class Reader { constructor(readable) { this.buffer = new ProtocolBuffer_1.default(); this.emitter = new events_1.EventEmitter(); this.nextMessageLength = -1; this.isDisposed = false; this.onReadableData = (data) => { try { this.buffer.append(data); while (true) { if (this.nextMessageLength === -1) { this.nextMessageLength = this.buffer.tryReadContentLength(); if (this.nextMessageLength === -1) { return; } } const msg = this.buffer.tryReadContent(this.nextMessageLength); if (msg === null) { return; } this.nextMessageLength = -1; const json = JSON.parse(msg); this.emitter.emit('data', json); } } catch (e) { this.emitter.emit('error', e); } }; this.readable = readable; this.readable.addListener('data', this.onReadableData); } onData(listener) { if (this.isDisposed) return; this.emitter.addListener('data', listener); } onError(listener) { if (this.isDisposed) return; this.emitter.addListener('error', listener); } dispose() { if (this.isDisposed) return; this.emitter.removeAllListeners(); this.readable.removeListener('data', this.onReadableData); this.isDisposed = true; } } exports.default = Reader; //# sourceMappingURL=Reader.js.map