@northscaler/service-support
Version:
Artifacts that assist in writing service layers effectively
70 lines (64 loc) • 6.24 kB
JavaScript
;
const {
AsyncAround
} = require('@northscaler/aspectify');
const servicifyOutcomeOf = require('../service/servicifyOutcomeOf');
const DateFormat = require('../enums/DateFormat');
/**
* Decorator used to execute the decorated method in a `try`/`catch` block.
* Use on service class methods only.
* If the method returns normally, the return value is wrapped in a service response object with the following shape:
*
* ```
* {
* data: <method return value>,
* meta: {
* status: ResponseStatus.SUCCESS,
* elapsedMillis: n
* }
* }
* ```
*
* If the method throws, the `Error` is caught, and formatted as a service response object with the following shape:
* ```
* {
* error: {
* name: ...,
* message: ...,
* code: ...,
* info: ...,
* cause: ...,
* stack: ...,
* },
* meta: {
* status: ResponseStatus.FAILURE,
* elapsedMillis: n
* }
* }
* ```
*
* @param {object} [arg0] The argument to be deconstructed.
* @param {Formatter[]} [arg0.formatters] Formatters to be used when formatting values in returned objects or thrown `Error`s.
* @param {boolean} [arg0.includeErrorStacks=true] Whether to include the `Error` `stack` property if one is thrown or there are `Error`s in the return value.
* Ignored if `formatters` is given.
* @param {boolean} [arg0.includeErrorCauses=true] Whether to include the `Error` `cause` property if one is thrown or there are `Error`s in the return value.
* Ignored if `formatters` is given.
* @param {DateFormat} [arg0.dateFormat=DateFormat.ISO_8601] The date format to use.
* Ignored if `formatters` is given.
*/
const serviceMethod = ({
formatters,
includeErrorStacks = true,
includeErrorCauses = true,
dateFormat = DateFormat.ISO_8601
} = {}) => AsyncAround(async ({
thisJoinPoint
}) => servicifyOutcomeOf({
fn: thisJoinPoint.proceed,
formatters,
includeErrorStacks,
includeErrorCauses,
dateFormat
}));
module.exports = serviceMethod;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYWluL2FzcGVjdHMvc2VydmljZU1ldGhvZC5qcyJdLCJuYW1lcyI6WyJBc3luY0Fyb3VuZCIsInJlcXVpcmUiLCJzZXJ2aWNpZnlPdXRjb21lT2YiLCJEYXRlRm9ybWF0Iiwic2VydmljZU1ldGhvZCIsImZvcm1hdHRlcnMiLCJpbmNsdWRlRXJyb3JTdGFja3MiLCJpbmNsdWRlRXJyb3JDYXVzZXMiLCJkYXRlRm9ybWF0IiwiSVNPXzg2MDEiLCJ0aGlzSm9pblBvaW50IiwiZm4iLCJwcm9jZWVkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQWtCQyxPQUFPLENBQUMsd0JBQUQsQ0FBL0I7O0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUdELE9BQU8sQ0FBQywrQkFBRCxDQUFsQzs7QUFDQSxNQUFNRSxVQUFVLEdBQUdGLE9BQU8sQ0FBQyxxQkFBRCxDQUExQjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsTUFBTUcsYUFBYSxHQUFHLENBQUM7QUFDckJDLEVBQUFBLFVBRHFCO0FBRXJCQyxFQUFBQSxrQkFBa0IsR0FBRyxJQUZBO0FBR3JCQyxFQUFBQSxrQkFBa0IsR0FBRyxJQUhBO0FBSXJCQyxFQUFBQSxVQUFVLEdBQUdMLFVBQVUsQ0FBQ007QUFKSCxJQUtuQixFQUxrQixLQU1wQlQsV0FBVyxDQUFDLE9BQU87QUFBRVUsRUFBQUE7QUFBRixDQUFQLEtBQTZCUixrQkFBa0IsQ0FBQztBQUMxRFMsRUFBQUEsRUFBRSxFQUFFRCxhQUFhLENBQUNFLE9BRHdDO0FBRTFEUCxFQUFBQSxVQUYwRDtBQUcxREMsRUFBQUEsa0JBSDBEO0FBSTFEQyxFQUFBQSxrQkFKMEQ7QUFLMURDLEVBQUFBO0FBTDBELENBQUQsQ0FBaEQsQ0FOYjs7QUFjQUssTUFBTSxDQUFDQyxPQUFQLEdBQWlCVixhQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jQXJvdW5kIH0gPSByZXF1aXJlKCdAbm9ydGhzY2FsZXIvYXNwZWN0aWZ5JylcbmNvbnN0IHNlcnZpY2lmeU91dGNvbWVPZiA9IHJlcXVpcmUoJy4uL3NlcnZpY2Uvc2VydmljaWZ5T3V0Y29tZU9mJylcbmNvbnN0IERhdGVGb3JtYXQgPSByZXF1aXJlKCcuLi9lbnVtcy9EYXRlRm9ybWF0JylcblxuLyoqXG4gKiBEZWNvcmF0b3IgdXNlZCB0byBleGVjdXRlIHRoZSBkZWNvcmF0ZWQgbWV0aG9kIGluIGEgYHRyeWAvYGNhdGNoYCBibG9jay5cbiAqIFVzZSBvbiBzZXJ2aWNlIGNsYXNzIG1ldGhvZHMgb25seS5cbiAqIElmIHRoZSBtZXRob2QgcmV0dXJucyBub3JtYWxseSwgdGhlIHJldHVybiB2YWx1ZSBpcyB3cmFwcGVkIGluIGEgc2VydmljZSByZXNwb25zZSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHNoYXBlOlxuICpcbiAqIGBgYFxuICoge1xuICogICBkYXRhOiA8bWV0aG9kIHJldHVybiB2YWx1ZT4sXG4gKiAgIG1ldGE6IHtcbiAqICAgICBzdGF0dXM6IFJlc3BvbnNlU3RhdHVzLlNVQ0NFU1MsXG4gKiAgICAgZWxhcHNlZE1pbGxpczogblxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJZiB0aGUgbWV0aG9kIHRocm93cywgdGhlIGBFcnJvcmAgaXMgY2F1Z2h0LCBhbmQgZm9ybWF0dGVkIGFzIGEgc2VydmljZSByZXNwb25zZSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHNoYXBlOlxuICogYGBgXG4gKiB7XG4gKiAgIGVycm9yOiB7XG4gKiAgICAgbmFtZTogLi4uLFxuICogICAgIG1lc3NhZ2U6IC4uLixcbiAqICAgICBjb2RlOiAuLi4sXG4gKiAgICAgaW5mbzogLi4uLFxuICogICAgIGNhdXNlOiAuLi4sXG4gKiAgICAgc3RhY2s6IC4uLixcbiAqICAgfSxcbiAqICAgbWV0YToge1xuICogICAgIHN0YXR1czogUmVzcG9uc2VTdGF0dXMuRkFJTFVSRSxcbiAqICAgICBlbGFwc2VkTWlsbGlzOiBuXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnMF0gVGhlIGFyZ3VtZW50IHRvIGJlIGRlY29uc3RydWN0ZWQuXG4gKiBAcGFyYW0ge0Zvcm1hdHRlcltdfSBbYXJnMC5mb3JtYXR0ZXJzXSBGb3JtYXR0ZXJzIHRvIGJlIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHZhbHVlcyBpbiByZXR1cm5lZCBvYmplY3RzIG9yIHRocm93biBgRXJyb3Jgcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZzAuaW5jbHVkZUVycm9yU3RhY2tzPXRydWVdIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgYEVycm9yYCBgc3RhY2tgIHByb3BlcnR5IGlmIG9uZSBpcyB0aHJvd24gb3IgdGhlcmUgYXJlIGBFcnJvcmBzIGluIHRoZSByZXR1cm4gdmFsdWUuXG4gKiBJZ25vcmVkIGlmIGBmb3JtYXR0ZXJzYCBpcyBnaXZlbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZzAuaW5jbHVkZUVycm9yQ2F1c2VzPXRydWVdIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgYEVycm9yYCBgY2F1c2VgIHByb3BlcnR5IGlmIG9uZSBpcyB0aHJvd24gb3IgdGhlcmUgYXJlIGBFcnJvcmBzIGluIHRoZSByZXR1cm4gdmFsdWUuXG4gKiBJZ25vcmVkIGlmIGBmb3JtYXR0ZXJzYCBpcyBnaXZlbi5cbiAqIEBwYXJhbSB7RGF0ZUZvcm1hdH0gW2FyZzAuZGF0ZUZvcm1hdD1EYXRlRm9ybWF0LklTT184NjAxXSBUaGUgZGF0ZSBmb3JtYXQgdG8gdXNlLlxuICogSWdub3JlZCBpZiBgZm9ybWF0dGVyc2AgaXMgZ2l2ZW4uXG4gKi9cbmNvbnN0IHNlcnZpY2VNZXRob2QgPSAoe1xuICBmb3JtYXR0ZXJzLFxuICBpbmNsdWRlRXJyb3JTdGFja3MgPSB0cnVlLFxuICBpbmNsdWRlRXJyb3JDYXVzZXMgPSB0cnVlLFxuICBkYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5JU09fODYwMVxufSA9IHt9KSA9PlxuICBBc3luY0Fyb3VuZChhc3luYyAoeyB0aGlzSm9pblBvaW50IH0pID0+IHNlcnZpY2lmeU91dGNvbWVPZih7XG4gICAgZm46IHRoaXNKb2luUG9pbnQucHJvY2VlZCxcbiAgICBmb3JtYXR0ZXJzLFxuICAgIGluY2x1ZGVFcnJvclN0YWNrcyxcbiAgICBpbmNsdWRlRXJyb3JDYXVzZXMsXG4gICAgZGF0ZUZvcm1hdFxuICB9KSlcblxubW9kdWxlLmV4cG9ydHMgPSBzZXJ2aWNlTWV0aG9kXG4iXX0=