intern
Version:
Intern. A next-generation code testing stack for JavaScript.
102 lines • 4.01 kB
JavaScript
(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