@teclone/r-server
Version:
A lightweight, extensible web-server with inbuilt routing-engine, static file server, file upload handler, request body parser, middleware support and lots more
188 lines (177 loc) • 7.55 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _createClass = require('@babel/runtime/helpers/createClass');
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
var _inherits = require('@babel/runtime/helpers/inherits');
var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstructorReturn');
var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
var http = require('http');
var http2 = require('http2');
var utils = require('@teclone/utils');
var Utils = require('./Utils');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_possibleConstructorReturn);
var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var createResponseClass = function createResponseClass(BaseResponseClass) {
var ResponseClass = BaseResponseClass;
var parentEnd = BaseResponseClass.prototype.end;
var parentSetHeader = BaseResponseClass.prototype.setHeader;
var parentRemoveHeader = BaseResponseClass.prototype.removeHeader;
// end
ResponseClass.prototype.end = function (data, encoding, cb) {
var _this = this;
var resolvedData = '';
var resolvedEncoding;
var resolvedCb = null;
// first implementation
if (utils.isCallable(data)) {
resolvedCb = data;
} else {
resolvedData = data;
}
if (typeof encoding === 'string') {
resolvedEncoding = encoding;
} else if (utils.isCallable(encoding)) {
resolvedCb = encoding;
}
if (utils.isCallable(cb)) {
resolvedCb = cb;
}
if (resolvedData && !Buffer.isBuffer(resolvedData) && !utils.isString(resolvedData)) {
resolvedData = JSON.stringify(resolvedData);
}
return new Promise(function (resolve) {
var resolvePromise = function resolvePromise() {
resolve(true);
if (resolvedCb) {
resolvedCb();
}
};
if (encoding) {
parentEnd.call(_this, resolvedData, resolvedEncoding, resolvePromise);
} else {
parentEnd.call(_this, resolvedData, resolvePromise);
}
});
};
ResponseClass.prototype.setHeader = function (name, value) {
parentSetHeader.call(this, name, value);
return this;
};
ResponseClass.prototype.setHeaders = function (headers) {
var _this2 = this;
Object.keys(headers || {}).forEach(function (key) {
_this2.setHeader(key, headers[key]);
});
return this;
};
ResponseClass.prototype.removeHeader = function (name) {
parentRemoveHeader.call(this, name);
return this;
};
ResponseClass.prototype.removeHeaders = function () {
var _this3 = this;
for (var _len = arguments.length, names = new Array(_len), _key = 0; _key < _len; _key++) {
names[_key] = arguments[_key];
}
names.forEach(function (name) {
_this3.removeHeader(name);
});
return this;
};
ResponseClass.prototype.status = function (code, message) {
this.statusCode = code;
if (message) {
this.statusMessage = message;
}
return this;
};
ResponseClass.prototype.redirect = function (path) {
var status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 302;
return this.status(status).setHeader('Location', path).end();
};
ResponseClass.prototype.download = function (filePath, filename) {
return this.fileServer.serveDownload(filePath, this, filename);
};
ResponseClass.prototype.json = function (data) {
var resolvedData = typeof data === 'string' ? data : JSON.stringify(data || '');
return this.setHeader('Content-Type', 'application/json').end(resolvedData);
};
ResponseClass.prototype.jsonError = function (response) {
var _ref = response || {},
headers = _ref.headers,
message = _ref.message,
_ref$errors = _ref.errors,
errors = _ref$errors === void 0 ? null : _ref$errors,
statusCode = _ref.statusCode;
return this.status(statusCode || 400, message).setHeaders(headers).json(errors);
};
ResponseClass.prototype.jsonSuccess = function (response) {
var _ref2 = response || {},
_ref2$statusCode = _ref2.statusCode,
statusCode = _ref2$statusCode === void 0 ? 200 : _ref2$statusCode,
headers = _ref2.headers,
message = _ref2.message,
_ref2$data = _ref2.data,
data = _ref2$data === void 0 ? null : _ref2$data,
errors = _ref2.errors;
if (statusCode >= 300 || errors) {
return this.jsonError(response);
}
return this.status(statusCode, message).setHeaders(headers).json(data);
};
ResponseClass.prototype.wait = function (time) {
var _this4 = this;
return new Promise(function (resolve) {
setTimeout(function () {
resolve(_this4);
}, time);
});
};
ResponseClass.prototype.processRouteResponse = function (responsePromise) {
var _this5 = this;
return responsePromise.then(function (response) {
return _this5.jsonSuccess(response);
})["catch"](function (err) {
if (err instanceof Error) {
return Utils.handleError(err, _this5);
}
return _this5.jsonError(err);
});
};
return ResponseClass;
};
// HTTP1 Response
var HTTP1BaseResponse = /*#__PURE__*/function (_Http1ServerResponse) {
_inherits__default["default"](HTTP1BaseResponse, _Http1ServerResponse);
var _super = _createSuper(HTTP1BaseResponse);
function HTTP1BaseResponse(req) {
var _this6;
_classCallCheck__default["default"](this, HTTP1BaseResponse);
_this6 = _super.call(this, req);
// @ts-ignore
_this6.req = req;
return _this6;
}
return _createClass__default["default"](HTTP1BaseResponse);
}(http.ServerResponse);
var Http1Response = createResponseClass(HTTP1BaseResponse);
// HTTP2 Response
var HTTP2BaseResponse = /*#__PURE__*/function (_Http2ServerResponse) {
_inherits__default["default"](HTTP2BaseResponse, _Http2ServerResponse);
var _super2 = _createSuper(HTTP2BaseResponse);
function HTTP2BaseResponse() {
_classCallCheck__default["default"](this, HTTP2BaseResponse);
return _super2.apply(this, arguments);
}
return _createClass__default["default"](HTTP2BaseResponse);
}(http2.Http2ServerResponse);
var Http2Response = createResponseClass(HTTP2BaseResponse);
exports.Http1Response = Http1Response;
exports.Http2Response = Http2Response;
//# sourceMappingURL=Response.js.map