UNPKG

intern

Version:

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

102 lines 4.03 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", "@dojo/core/request/providers/xhr", "@dojo/core/async/Task", "./Base"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var xhr_1 = require("@dojo/core/request/providers/xhr"); var Task_1 = require("@dojo/core/async/Task"); var Base_1 = require("./Base"); 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 = Task_1.default.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 Task_1.default(function (resolve, reject) { _this._messageBuffer.push({ message: JSON.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 = xhr_1.default(this.url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(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