ts-migrate-server
Version:
A package that contains the main migration runner and spawns a TSServer process
62 lines • 2.24 kB
JavaScript
"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