@ot06/be-utils
Advanced tools
Comparing version 0.0.21 to 0.0.22
@@ -8,6 +8,8 @@ 'use strict'; | ||
var _expressHttpContext = _interopRequireDefault(require("express-http-context")); | ||
var _lodash = _interopRequireDefault(require("lodash")); | ||
var _nanoid = require("nanoid"); | ||
var _expressHttpContext = _interopRequireDefault(require("express-http-context")); | ||
var _classes = _interopRequireDefault(require("../classes")); | ||
@@ -19,8 +21,2 @@ | ||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
var { | ||
@@ -32,8 +28,13 @@ ResponseBody | ||
} = _constants.HEADERS; | ||
var DEFAULT_CONFIG = {}; | ||
var DEFAULT_CONFIG = { | ||
asyncWrapper: { | ||
isPreHandler: false, | ||
isDataHandler: false, | ||
isErrorHandler: false | ||
} | ||
}; | ||
class RequestHandler { | ||
constructor(masterConfig, inputConfig) { | ||
this.masterConfig = masterConfig || _objectSpread({}, DEFAULT_CONFIG); | ||
this.inputConfig = inputConfig || _objectSpread({}, DEFAULT_CONFIG); | ||
constructor(config) { | ||
this.requestConfig = _lodash.default.merge(DEFAULT_CONFIG, config); | ||
this.asyncWrapper = this.asyncWrapper.bind(this); | ||
@@ -48,27 +49,43 @@ this.extractHeaders = this.extractHeaders.bind(this); | ||
asyncWrapper(middleware) { | ||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
return (request, response, next) => { | ||
if (!request.isMatch) { | ||
var { | ||
requestConfig = {} | ||
} = this; | ||
var { | ||
asyncWrapper = {} | ||
} = requestConfig; | ||
var asyncWrapperConfig = _lodash.default.merge(asyncWrapper, options); | ||
var { | ||
isPreHandler, | ||
isDataHandler, | ||
isErrorHandler | ||
} = asyncWrapperConfig; | ||
if (!isPreHandler && !request.isMatch) { | ||
return process.nextTick(next); | ||
} | ||
if (response.body || response.error) { | ||
if (!isDataHandler && response.body) { | ||
return process.nextTick(next); | ||
} | ||
return Promise.resolve(middleware(request, response, next)).catch(error => { | ||
var responseBody; | ||
if (!isErrorHandler && response.error) { | ||
return process.nextTick(next); | ||
} | ||
if (error.constructor.name === ResponseBody.name) { | ||
responseBody = error; | ||
} else if (error.getResponseBody && typeof error.getResponseBody === 'function') { | ||
responseBody = error.getResponseBody(); | ||
return Promise.resolve(middleware(request, response, next)).catch(middlewareError => { | ||
var error; | ||
if (middlewareError.constructor.name === ResponseBody.name) { | ||
error = middlewareError; | ||
} else if (middlewareError.getResponseBody && typeof middlewareError.getResponseBody === 'function') { | ||
error = middlewareError.getResponseBody(); | ||
} else { | ||
var { | ||
statusCode = 500, | ||
message = 'Unhandled Error' | ||
} = error; | ||
responseBody = new ResponseBody(statusCode, message, undefined, error); | ||
error = middlewareError; | ||
} | ||
response.error = responseBody; | ||
response.error = error; | ||
next(); | ||
@@ -75,0 +92,0 @@ }); |
@@ -8,2 +8,4 @@ 'use strict'; | ||
var _lodash = _interopRequireDefault(require("lodash")); | ||
var _expressHttpContext = _interopRequireDefault(require("express-http-context")); | ||
@@ -17,8 +19,2 @@ | ||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
var { | ||
@@ -34,5 +30,4 @@ ResponseBody | ||
class ResponseHandler { | ||
constructor(masterConfig, inputConfig) { | ||
this.masterConfig = masterConfig || _objectSpread({}, DEFAULT_CONFIG); | ||
this.inputConfig = inputConfig || _objectSpread({}, DEFAULT_CONFIG); | ||
constructor(config) { | ||
this.responseConfig = _lodash.default.merge(DEFAULT_CONFIG, config); | ||
this.handleResponse = this.handleResponse.bind(this); | ||
@@ -48,33 +43,15 @@ this.handleError = this.handleError.bind(this); | ||
handleResponse(request, response, next) { | ||
// Handle Route Match | ||
if (!request.isMatch) { | ||
var { | ||
method, | ||
originalUrl | ||
} = request; | ||
var message = "Cannot ".concat(method, " ").concat(originalUrl); | ||
var responseHandler; // Handle Response for No Route | ||
var _error = new ResponseBody(404, message); | ||
var { | ||
isMatch | ||
} = request; | ||
responseHandler = !isMatch && _handleNoRouteResponse; // Handle Response for EncryptedBody / Error / PlaintextBody | ||
response.body = _error; | ||
return _sendResponse(request, response, next); | ||
} // Handle Response Error | ||
var { | ||
encryptedBody, | ||
error | ||
} = response; | ||
if (error && error.constructor.name === ResponseBody.name) { | ||
response.body = error; | ||
return _sendResponse(request, response, next); | ||
} // Handle Response Body | ||
var resBody = response.encryptedBody || response.body || {}; | ||
var { | ||
statusCode | ||
} = resBody; | ||
var handler = [301, 302].indexOf(statusCode) > -1 ? _redirectResponse : _sendResponse; | ||
handler(request, response, next); | ||
responseHandler = responseHandler || encryptedBody ? _handleDataResponse : error ? _handleErrorResponse : _handleDataResponse; | ||
responseHandler(request, response, next); | ||
} | ||
@@ -104,2 +81,40 @@ | ||
function _handleNoRouteResponse(request, response, next) { | ||
var { | ||
method, | ||
originalUrl | ||
} = request; | ||
var message = "Cannot ".concat(method, " ").concat(originalUrl); | ||
var error = new ResponseBody(404, message); | ||
response.body = error; | ||
return _sendResponse(request, response, next); | ||
} | ||
function _handleErrorResponse(request, response, next) { | ||
var { | ||
error | ||
} = response; | ||
if (error.constructor.name === ResponseBody.name) { | ||
response.body = error; | ||
} else { | ||
var { | ||
statusCode = 500, | ||
message = 'Unhandled Error' | ||
} = error; | ||
response.body = new ResponseBody(statusCode, message, undefined, error); | ||
} | ||
return _sendResponse(request, response, next); | ||
} | ||
function _handleDataResponse(request, response, next) { | ||
var resBody = response.encryptedBody || response.body || {}; | ||
var { | ||
statusCode | ||
} = resBody; | ||
var handler = [301, 302].indexOf(statusCode) > -1 ? _redirectResponse : _sendResponse; | ||
handler(request, response, next); | ||
} | ||
function _sendResponse(request, response, next) { | ||
@@ -106,0 +121,0 @@ var resBody = response.encryptedBody || response.body || {}; |
@@ -12,8 +12,2 @@ 'use strict'; | ||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
var DEFAULT_CONFIG = { | ||
@@ -24,6 +18,4 @@ routes: {} | ||
class RouteHandler { | ||
constructor(masterConfig, inputConfig) { | ||
this.masterConfig = masterConfig || _objectSpread({}, DEFAULT_CONFIG); | ||
this.inputConfig = inputConfig || _objectSpread({}, DEFAULT_CONFIG); | ||
this.routesConfig = _lodash.default.merge(this.masterConfig, this.inputConfig); | ||
constructor(config) { | ||
this.routesConfig = _lodash.default.merge(DEFAULT_CONFIG, config); | ||
this.enableRoute = this.enableRoute.bind(this); | ||
@@ -30,0 +22,0 @@ } |
{ | ||
"name": "@ot06/be-utils", | ||
"version": "0.0.21", | ||
"version": "0.0.22", | ||
"description": "Backend Utilities Module", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
460
17331