@elium/mighty
Version:
Context agnostic TS & JS ORM
90 lines • 3.75 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var _ = require("lodash");
var Request = require("request");
var http_response_1 = require("../http.response");
var http_request_1 = require("../http.request");
var Observable_1 = require("rxjs/Observable");
var HttpLayer = (function () {
function HttpLayer() {
}
HttpLayer.prototype.find = function (request) {
var localRequest = new http_request_1.HttpRequest(_.merge(request, { method: "GET", isArray: true }));
return this.query(localRequest);
};
HttpLayer.prototype.findOne = function (request) {
var localRequest = new http_request_1.HttpRequest(_.merge(request, { method: "GET", isArray: false }));
return this.query(localRequest);
};
HttpLayer.prototype.create = function (request) {
var localRequest = new http_request_1.HttpRequest(_.merge(request, { method: "POST" }));
return this.query(localRequest);
};
HttpLayer.prototype.save = function (request) {
var localRequest = new http_request_1.HttpRequest(_.merge(request, { method: "PUT" }));
return this.query(localRequest);
};
HttpLayer.prototype.destroy = function (request) {
var localRequest = new http_request_1.HttpRequest(_.merge(request, { method: "DELETE" }));
return this.query(localRequest);
};
HttpLayer.prototype.query = function (request) {
var options = this._getOptions(request);
return this._request(request, options);
};
HttpLayer.prototype._request = function (request, options) {
var _this = this;
return Observable_1.Observable.create(function (observer) {
Request(options, function (error, response, body) {
var httpResponse = new http_response_1.HttpResponse({
request: request,
status: _.get(response, "statusCode", 400)
});
if (!error && response.statusCode == 200) {
if (request.isArray && !Array.isArray(body)) {
httpResponse.error = new Error("result is not an array, got :" + JSON.stringify(body));
}
else {
httpResponse.data = body;
}
}
else {
httpResponse.error = _this._parseError(error, body);
}
if (httpResponse.error) {
observer.error(httpResponse);
}
else {
observer.next(httpResponse);
}
observer.complete();
});
});
};
HttpLayer.prototype._getOptions = function (request) {
return {
json: true,
url: request.url,
method: (request.method || "").toUpperCase(),
headers: request.headers,
gzip: _.get(request.headers, 'accept-encoding', '').indexOf('gzip') > -1,
body: request.data,
qs: request.params
};
};
HttpLayer.prototype._parseError = function (error, body) {
var validError = error || body;
if (validError) {
if (_.isString(validError)) {
return new Error(validError);
}
else if (_.isObject(validError) && validError.hasOwnProperty("message")) {
return new Error(validError.message);
}
}
return new Error("Unknown error : " + validError);
};
return HttpLayer;
}());
exports.HttpLayer = HttpLayer;
//# sourceMappingURL=http.layer.js.map
;