UNPKG

@northscaler/service-support

Version:

Artifacts that assist in writing service layers effectively

70 lines (64 loc) 6.24 kB
'use strict'; 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=