@yaagoub/decorators
Version:
Angular decorators
44 lines • 5.33 kB
JavaScript
/**
* Decorator that logs errors for the decorated method.
*
* @param {LogErrorOptions} [options={}] - Options for logging errors.
* @param {string} [options.message] - Custom message to log.
* @param {YgbLogDestination} [options.destination] - Destination for the log.
* @param {boolean} [options.context] - Whether to include context information in the log.
*
* @returns {MethodDecorator} - The method decorator.
*
* @example
* ```typescript
* class ExampleClass {
* @LogError({ message: 'An error occurred', destination: 'console', context: true })
* exampleMethod() {
* // method implementation
* }
* }
* ```
*/
import { YgbInjector } from '../../global/ygb-injector';
import { ControlLogService } from '../services/ygb-control-log.service';
export function LogError(options = {}) {
return function (target, propertyKey, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args) {
const controlLogService = YgbInjector.inject(ControlLogService);
const targetName = target.constructor.name;
let context;
if (options.context) {
context = {
targetName,
propertyKey,
args,
};
}
controlLogService.controlLog('error', context, options.destination ?? 'none', options.message ?? '');
const result = originalMethod.apply(this, args);
return result;
};
return descriptor;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWdiLWxvZy1lcnJvci5kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RlY29yYXRvcnMvc3JjL2xvZ2dpbmcvYmFzaWMtbG9nZ2luZy95Z2ItbG9nLWVycm9yLmRlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQVV4RSxNQUFNLFVBQVUsUUFBUSxDQUFDLFVBQTJCLEVBQUU7SUFDcEQsT0FBTyxVQUNMLE1BQWMsRUFDZCxXQUFtQixFQUNuQixVQUE4QjtRQUU5QixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLElBQVc7WUFDekMsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFzQixDQUFDO1lBQ3JGLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQzNDLElBQUksT0FBK0IsQ0FBQztZQUNwQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxHQUFHO29CQUNSLFVBQVU7b0JBQ1YsV0FBVztvQkFDWCxJQUFJO2lCQUNMLENBQUM7WUFDSixDQUFDO1lBQ0QsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNyRyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFDRixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWNvcmF0b3IgdGhhdCBsb2dzIGVycm9ycyBmb3IgdGhlIGRlY29yYXRlZCBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtMb2dFcnJvck9wdGlvbnN9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgZm9yIGxvZ2dpbmcgZXJyb3JzLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm1lc3NhZ2VdIC0gQ3VzdG9tIG1lc3NhZ2UgdG8gbG9nLlxuICogQHBhcmFtIHtZZ2JMb2dEZXN0aW5hdGlvbn0gW29wdGlvbnMuZGVzdGluYXRpb25dIC0gRGVzdGluYXRpb24gZm9yIHRoZSBsb2cuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNvbnRleHRdIC0gV2hldGhlciB0byBpbmNsdWRlIGNvbnRleHQgaW5mb3JtYXRpb24gaW4gdGhlIGxvZy5cbiAqXG4gKiBAcmV0dXJucyB7TWV0aG9kRGVjb3JhdG9yfSAtIFRoZSBtZXRob2QgZGVjb3JhdG9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBFeGFtcGxlQ2xhc3Mge1xuICogICBATG9nRXJyb3IoeyBtZXNzYWdlOiAnQW4gZXJyb3Igb2NjdXJyZWQnLCBkZXN0aW5hdGlvbjogJ2NvbnNvbGUnLCBjb250ZXh0OiB0cnVlIH0pXG4gKiAgIGV4YW1wbGVNZXRob2QoKSB7XG4gKiAgICAgLy8gbWV0aG9kIGltcGxlbWVudGF0aW9uXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5pbXBvcnQgeyBZZ2JJbmplY3RvciB9IGZyb20gJy4uLy4uL2dsb2JhbC95Z2ItaW5qZWN0b3InO1xuaW1wb3J0IHsgQ29udHJvbExvZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy95Z2ItY29udHJvbC1sb2cuc2VydmljZSc7XG5pbXBvcnQgeyBZZ2JDb250ZXh0LCBZZ2JMb2dEZXN0aW5hdGlvbiB9IGZyb20gJy4uL3R5cGVzL3lnYi10eXBlcyc7XG5cblxuaW50ZXJmYWNlIExvZ0Vycm9yT3B0aW9ucyB7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIGRlc3RpbmF0aW9uPzogWWdiTG9nRGVzdGluYXRpb247XG4gIGNvbnRleHQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTG9nRXJyb3Iob3B0aW9uczogTG9nRXJyb3JPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChcbiAgICB0YXJnZXQ6IG9iamVjdCxcbiAgICBwcm9wZXJ0eUtleTogc3RyaW5nLFxuICAgIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvclxuICApIHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgY29uc3QgY29udHJvbExvZ1NlcnZpY2UgPSBZZ2JJbmplY3Rvci5pbmplY3QoQ29udHJvbExvZ1NlcnZpY2UpIGFzIENvbnRyb2xMb2dTZXJ2aWNlO1xuICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgbGV0IGNvbnRleHQ6IFlnYkNvbnRleHQgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAob3B0aW9ucy5jb250ZXh0KSB7XG4gICAgICAgIGNvbnRleHQgPSB7XG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBwcm9wZXJ0eUtleSxcbiAgICAgICAgICBhcmdzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29udHJvbExvZ1NlcnZpY2UuY29udHJvbExvZygnZXJyb3InLCBjb250ZXh0LCBvcHRpb25zLmRlc3RpbmF0aW9uID8/ICdub25lJywgb3B0aW9ucy5tZXNzYWdlID8/ICcnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xufVxuIl19