arshjaved's picture
normal Model Upload (teja)
f9f1a35 verified
"use strict";
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.JsonRpcReader = void 0;
exports.encodeJsonRpc = encodeJsonRpc;
var CR = 13;
var LF = 10;
/**
* JSON RPC reader following the Debug Adapter Protocol message
* format which itself follows Chrome's V8 debugger protocol, originally
* documented at
* https://github.com/buggerjs/bugger-v8-client/blob/master/PROTOCOL.md#v8-debugger-protocol
*/
var JsonRpcReader = /** @class */ (function () {
function JsonRpcReader(callback) {
this.callback = callback;
this.position = 0;
this.allocationSize = 4096;
this.decoder = new TextDecoder();
this.buffer = new Uint8Array(this.allocationSize);
}
JsonRpcReader.prototype.append = function (data) {
// Grow the buffer if necessary to hold the data.
if (data.byteLength > (this.buffer.byteLength - this.position)) {
var requiredSize = this.position + data.byteLength;
var newSize = Math.ceil(requiredSize / this.allocationSize) * this.allocationSize;
var newBuffer = new Uint8Array(newSize);
newBuffer.set(this.buffer, 0);
this.buffer = newBuffer;
}
// Push new data onto end of the buffer.
this.buffer.set(data, this.position);
this.position += data.byteLength;
var parsedMessages = [];
while (true) {
// Parse all messages out of the buffer.
var message = this.tryReadMessage();
if (!message) {
break;
}
parsedMessages.push(message);
this.callback(message);
}
return parsedMessages;
};
JsonRpcReader.prototype.tryReadMessage = function () {
var e_1, _a;
// Loop through looking for \r\n\r\n in the buffer.
for (var i = 0; i < this.position - 4; ++i) {
// First \r\n indicates the end of the headers.
if (this.buffer[i] === CR && this.buffer[i + 1] === LF &&
this.buffer[i + 2] === CR && this.buffer[i + 3] === LF) {
// Parse each of the header lines out of the header block.
var headerLength = i + 4;
var headerBytes = this.buffer.subarray(0, headerLength);
var headerString = this.decoder.decode(headerBytes);
var headerLines = headerString.split('\r\n');
var headers = {};
try {
for (var headerLines_1 = (e_1 = void 0, __values(headerLines)), headerLines_1_1 = headerLines_1.next(); !headerLines_1_1.done; headerLines_1_1 = headerLines_1.next()) {
var line = headerLines_1_1.value;
if (!line.trim()) {
continue;
}
var pair = line.split(':');
if (pair.length !== 2) {
throw new Error("Illegal header value: ".concat(line));
}
headers[pair[0]] = pair[1].trim();
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (headerLines_1_1 && !headerLines_1_1.done && (_a = headerLines_1.return)) _a.call(headerLines_1);
}
finally { if (e_1) throw e_1.error; }
}
var contentLengthString = headers['Content-Length'];
if (!contentLengthString) {
throw new Error('Missing Content-Length header.');
}
var contentLength = Number(contentLengthString);
if (isNaN(contentLength)) {
throw new Error("Header Content-Length not a number: ".concat(contentLengthString, "."));
}
var requiredLength = headerLength + contentLength;
if (requiredLength <= this.position) {
// This is just a view onto the current buffer.
var contentBytes = this.buffer.subarray(headerLength, headerLength + contentLength);
var content = this.decoder.decode(contentBytes);
this.buffer.copyWithin(0, headerLength + contentLength, this.position);
this.position = this.position - (headerLength + contentLength);
return { headers: headers, content: content };
}
}
}
return null;
};
return JsonRpcReader;
}());
exports.JsonRpcReader = JsonRpcReader;
/** Encodes the string content to a JSON RPC message. */
function encodeJsonRpc(content) {
var e_2, _a;
var headers = {
'Content-Length': String(new TextEncoder().encode(content).byteLength),
};
var requestString = '';
try {
for (var _b = __values(Object.keys(headers)), _c = _b.next(); !_c.done; _c = _b.next()) {
var key = _c.value;
requestString += "".concat(key, ": ").concat(headers[key], "\r\n");
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_2) throw e_2.error; }
}
requestString += '\r\n';
requestString += content;
return requestString;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbl9ycGMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2pzb25fcnBjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBcUdBLHNDQVdDO0FBaEhELElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNkLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQVFkOzs7OztHQUtHO0FBQ0g7SUFNRSx1QkFBcUIsUUFBMkM7UUFBM0MsYUFBUSxHQUFSLFFBQVEsQ0FBbUM7UUFKeEQsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNaLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRzNDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCw4QkFBTSxHQUFOLFVBQU8sSUFBZ0I7UUFDckIsaURBQWlEO1FBQ2pELElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQy9ELElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNyRCxJQUFNLE9BQU8sR0FDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN4RSxJQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7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SSxVQUFHLEdBQUcsZUFBSyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQU0sQ0FBQztRQUNqRCxDQUFDOzs7Ozs7Ozs7SUFDRCxhQUFhLElBQUksTUFBTSxDQUFDO0lBQ3hCLGFBQWEsSUFBSSxPQUFPLENBQUM7SUFDekIsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IENSID0gMTM7XG5jb25zdCBMRiA9IDEwO1xuXG4vKiogTWVzc2FnZXMgcmVjZWl2ZWQgdmlhIHRoZSByZWFkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25ScGNNZXNzYWdlIHtcbiAgcmVhZG9ubHkgaGVhZGVyczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBKU09OIFJQQyByZWFkZXIgZm9sbG93aW5nIHRoZSBEZWJ1ZyBBZGFwdGVyIFByb3RvY29sIG1lc3NhZ2VcbiAqIGZvcm1hdCB3aGljaCBpdHNlbGYgZm9sbG93cyBDaHJvbWUncyBWOCBkZWJ1Z2dlciBwcm90b2NvbCwgb3JpZ2luYWxseVxuICogZG9jdW1lbnRlZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2J1Z2dlcmpzL2J1Z2dlci12OC1jbGllbnQvYmxvYi9tYXN0ZXIvUFJPVE9DT0wubWQjdjgtZGVidWdnZXItcHJvdG9jb2xcbiAqL1xuZXhwb3J0IGNsYXNzIEpzb25ScGNSZWFkZXIge1xuICBwcml2YXRlIGJ1ZmZlcjogVWludDhBcnJheTtcbiAgcHJpdmF0ZSBwb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvY2F0aW9uU2l6ZSA9IDQwOTY7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNhbGxiYWNrOiAobWVzc2FnZTogSnNvblJwY01lc3NhZ2UpID0+IHZvaWQpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHRoaXMuYWxsb2NhdGlvblNpemUpO1xuICB9XG5cbiAgYXBwZW5kKGRhdGE6IFVpbnQ4QXJyYXkpOiBKc29uUnBjTWVzc2FnZVtdIHtcbiAgICAvLyBHcm93IHRoZSBidWZmZXIgaWYgbmVjZXNzYXJ5IHRvIGhvbGQgdGhlIGRhdGEuXG4gICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA+ICh0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoIC0gdGhpcy5wb3NpdGlvbikpIHtcbiAgICAgIGNvbnN0IHJlcXVpcmVkU2l6ZSA9IHRoaXMucG9zaXRpb24gKyBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICBjb25zdCBuZXdTaXplID1cbiAgICAgICAgICBNYXRoLmNlaWwocmVxdWlyZWRTaXplIC8gdGhpcy5hbGxvY2F0aW9uU2l6ZSkgKiB0aGlzLmFsbG9jYXRpb25TaXplO1xuICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkobmV3U2l6ZSk7XG4gICAgICBuZXdCdWZmZXIuc2V0KHRoaXMuYnVmZmVyLCAwKTtcbiAgICAgIHRoaXMuYnVmZmVyID0gbmV3QnVmZmVyO1xuICAgIH1cbiAgICAvLyBQdXNoIG5ldyBkYXRhIG9udG8gZW5kIG9mIHRoZSBidWZmZXIuXG4gICAgdGhpcy5idWZmZXIuc2V0KGRhdGEsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gZGF0YS5ieXRlTGVuZ3RoO1xuXG4gICAgY29uc3QgcGFyc2VkTWVzc2FnZXMgPSBbXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gUGFyc2UgYWxsIG1lc3NhZ2VzIG91dCBvZiB0aGUgYnVmZmVyLlxuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJ5UmVhZE1lc3NhZ2UoKTtcbiAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHBhcnNlZE1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICB0aGlzLmNhbGxiYWNrKG1lc3NhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkTWVzc2FnZXM7XG4gIH1cblxuICB0cnlSZWFkTWVzc2FnZSgpOiBKc29uUnBjTWVzc2FnZXxudWxsIHtcbiAgICAvLyBMb29wIHRocm91Z2ggbG9va2luZyBmb3IgXFxyXFxuXFxyXFxuIGluIHRoZSBidWZmZXIuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvc2l0aW9uIC0gNDsgKytpKSB7XG4gICAgICAvLyBGaXJzdCBcXHJcXG4gaW5kaWNhdGVzIHRoZSBlbmQgb2YgdGhlIGhlYWRlcnMuXG4gICAgICBpZiAodGhpcy5idWZmZXJbaV0gPT09IENSICYmIHRoaXMuYnVmZmVyW2kgKyAxXSA9PT0gTEYgJiZcbiAgICAgICAgICB0aGlzLmJ1ZmZlcltpICsgMl0gPT09IENSICYmIHRoaXMuYnVmZmVyW2kgKyAzXSA9PT0gTEYpIHtcbiAgICAgICAgLy8gUGFyc2UgZWFjaCBvZiB0aGUgaGVhZGVyIGxpbmVzIG91dCBvZiB0aGUgaGVhZGVyIGJsb2NrLlxuICAgICAgICBjb25zdCBoZWFkZXJMZW5ndGggPSBpICsgNDtcbiAgICAgICAgY29uc3QgaGVhZGVyQnl0ZXMgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheSgwLCBoZWFkZXJMZW5ndGgpO1xuICAgICAgICBjb25zdCBoZWFkZXJTdHJpbmcgPSB0aGlzLmRlY29kZXIuZGVjb2RlKGhlYWRlckJ5dGVzKTtcbiAgICAgICAgY29uc3QgaGVhZGVyTGluZXMgPSBoZWFkZXJTdHJpbmcuc3BsaXQoJ1xcclxcbicpO1xuICAgICAgICBjb25zdCBoZWFkZXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaGVhZGVyTGluZXMpIHtcbiAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcGFpciA9IGxpbmUuc3BsaXQoJzonKTtcbiAgICAgICAgICBpZiAocGFpci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSWxsZWdhbCBoZWFkZXIgdmFsdWU6ICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaGVhZGVyc1twYWlyWzBdXSA9IHBhaXJbMV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhTdHJpbmcgPSBoZWFkZXJzWydDb250ZW50LUxlbmd0aCddO1xuICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGhTdHJpbmcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQ29udGVudC1MZW5ndGggaGVhZGVyLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBOdW1iZXIoY29udGVudExlbmd0aFN0cmluZyk7XG4gICAgICAgIGlmIChpc05hTihjb250ZW50TGVuZ3RoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYEhlYWRlciBDb250ZW50LUxlbmd0aCBub3QgYSBudW1iZXI6ICR7Y29udGVudExlbmd0aFN0cmluZ30uYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWlyZWRMZW5ndGggPSBoZWFkZXJMZW5ndGggKyBjb250ZW50TGVuZ3RoO1xuICAgICAgICBpZiAocmVxdWlyZWRMZW5ndGggPD0gdGhpcy5wb3NpdGlvbikge1xuICAgICAgICAgIC8vIFRoaXMgaXMganVzdCBhIHZpZXcgb250byB0aGUgY3VycmVudCBidWZmZXIuXG4gICAgICAgICAgY29uc3QgY29udGVudEJ5dGVzID1cbiAgICAgICAgICAgICAgdGhpcy5idWZmZXIuc3ViYXJyYXkoaGVhZGVyTGVuZ3RoLCBoZWFkZXJMZW5ndGggKyBjb250ZW50TGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5kZWNvZGVyLmRlY29kZShjb250ZW50Qnl0ZXMpO1xuICAgICAgICAgIHRoaXMuYnVmZmVyLmNvcHlXaXRoaW4oXG4gICAgICAgICAgICAgIDAsIGhlYWRlckxlbmd0aCArIGNvbnRlbnRMZW5ndGgsIHRoaXMucG9zaXRpb24pO1xuICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uIC0gKGhlYWRlckxlbmd0aCArIGNvbnRlbnRMZW5ndGgpO1xuICAgICAgICAgIHJldHVybiB7aGVhZGVycywgY29udGVudH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqIEVuY29kZXMgdGhlIHN0cmluZyBjb250ZW50IHRvIGEgSlNPTiBSUEMgbWVzc2FnZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVKc29uUnBjKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGhlYWRlcnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICAgICdDb250ZW50LUxlbmd0aCc6IFN0cmluZyhuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoY29udGVudCkuYnl0ZUxlbmd0aCksXG4gIH07XG4gIGxldCByZXF1ZXN0U3RyaW5nID0gJyc7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgcmVxdWVzdFN0cmluZyArPSBgJHtrZXl9OiAke2hlYWRlcnNba2V5XX1cXHJcXG5gO1xuICB9XG4gIHJlcXVlc3RTdHJpbmcgKz0gJ1xcclxcbic7XG4gIHJlcXVlc3RTdHJpbmcgKz0gY29udGVudDtcbiAgcmV0dXJuIHJlcXVlc3RTdHJpbmc7XG59XG4iXX0=