UNPKG

intern

Version:

Intern. A next-generation code testing stack for JavaScript.

102 lines 4.01 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "tslib", "@theintern/common", "./Base", "../common/util"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var common_1 = require("@theintern/common"); var Base_1 = tslib_1.__importDefault(require("./Base")); var util_1 = require("../common/util"); var HttpChannel = (function (_super) { tslib_1.__extends(HttpChannel, _super); function HttpChannel(options) { var _this = _super.call(this, options) || this; _this._sequence = 1; _this._maxPostSize = options.maxPostSize || 100000; _this._messageBuffer = []; _this._lastRequest = common_1.Task.resolve(); return _this; } HttpChannel.prototype._sendData = function (name, data) { var _this = this; var id = String(this._sequence++); var sessionId = this.sessionId; var message = { id: id, sessionId: sessionId, name: name, data: data }; var task = new common_1.Task(function (resolve, reject) { _this._messageBuffer.push({ message: util_1.stringify(message), resolve: resolve, reject: reject, }); if (_this._activeRequest) { _this._activeRequest.then(function () { return _this._sendMessages(); }); } else { _this._sendMessages(); } }, function () { if (_this._activeRequest) { _this._activeRequest.cancel(); } _this._messageBuffer = []; }); return task; }; HttpChannel.prototype._sendMessages = function () { var _this = this; var messages = this._messageBuffer; if (messages.length === 0) { return; } var block = [messages.shift()]; var size = block[0].message.length; while (messages.length > 0 && size + messages[0].message.length < this._maxPostSize) { size += messages[0].message.length; block.push(messages.shift()); } this._activeRequest = common_1.request(this.url, { method: 'post', headers: { 'Content-Type': 'application/json' }, data: block.map(function (entry) { return entry.message; }), }) .then(function (response) { if (response.status === 200) { return response.json(); } else if (response.status === 204) { return []; } else { throw new Error(response.statusText); } }) .then(function (results) { block.forEach(function (entry, index) { entry.resolve(results[index]); }); }) .catch(function (error) { block.forEach(function (entry) { entry.reject(error); }); }) .finally(function () { _this._activeRequest = undefined; if (messages.length > 0) { return _this._sendMessages(); } }); return this._activeRequest; }; return HttpChannel; }(Base_1.default)); exports.default = HttpChannel; }); //# sourceMappingURL=Http.js.map