UNPKG

@yaagoub/decorators

Version:

Angular decorators

138 lines 18.4 kB
import { Injectable } from '@angular/core'; import { ControlLogService } from '../services/ygb-control-log.service'; import { YgbInjector } from '../../global/ygb-injector'; import * as i0 from "@angular/core"; export class Log { /** * Formats the log message with the given parameters. * @param params - The parameters to format the message with. * @returns The formatted message. */ static formatMessage(params) { if (params.length === 0) { return ''; } const message = typeof params[0] === 'string' ? params[0] : ''; const paramsEx = params.slice(1); return paramsEx.reduce((formattedMessage, param) => { if (formattedMessage.includes('%s')) { if (param === null) { return formattedMessage.replace('%s', 'null'); } if (param === undefined) { return formattedMessage.replace('%s', 'undefined'); } if (typeof param === 'object') { if (param instanceof Error) { const errorDetails = { message: param.message, stack: param.stack, name: param.name, }; return formattedMessage.replace('%s', JSON.stringify(errorDetails)); } if (param instanceof ErrorEvent) { const errorEventDetails = { message: param.message, filename: param.filename, lineno: param.lineno, colno: param.colno, error: param.error, }; return formattedMessage.replace('%s', JSON.stringify(errorEventDetails)); } if (param instanceof ProgressEvent) { const progressEventDetails = { lengthComputable: param.lengthComputable, loaded: param.loaded, total: param.total, target: param.target, }; return formattedMessage.replace('%s', JSON.stringify(progressEventDetails)); } if (param instanceof TypeError) { const typeErrorDetails = { message: param.message, name: param.name, stack: param.stack }; return formattedMessage.replace('%s', JSON.stringify(typeErrorDetails)); } if (Array.isArray(param)) { return formattedMessage.replace('%s', JSON.stringify(param)); } if (param instanceof Date) { return formattedMessage.replace('%s', param.toISOString()); } if (param && param.constructor && param.constructor.name) { return formattedMessage.replace('%s', `${param.constructor.name} { ${JSON.stringify(param)} }`); } return formattedMessage.replace('%s', JSON.stringify(param)); } if (typeof param === 'string' || typeof param === 'number' || typeof param === 'boolean') { return formattedMessage.replace('%s', String(param)); } return formattedMessage.replace('%s', String(param)); } return formattedMessage; }, message); } /** * Logs an info message. * @param params - The parameters to log. * @example * Log.info('This is an info message'); * Log.info('User %s logged in', username); */ static info(...params) { this.injectedControlLogService().controlLog('info', undefined, 'none', Log.formatMessage(params)); } /** * Logs a warning message. * @param params - The parameters to log. * @example * Log.warn('This is a warning message'); * Log.warn('Low disk space: %s', diskSpace); */ static warn(...params) { this.injectedControlLogService().controlLog('warn', undefined, 'none', Log.formatMessage(params)); } /** * Logs an error message. * @param params - The parameters to log. * @example * Log.error('This is an error message'); * Log.error('Failed to load resource: %s', resourceName); */ static error(...params) { YgbInjector.inject(ControlLogService).controlLog('error', undefined, 'none', Log.formatMessage(params)); } /** * Logs a debug message. * @param params - The parameters to log. * @example * Log.debug('This is a debug message'); * Log.debug('Debugging value: %s', debugValue); */ static debug(...params) { this.injectedControlLogService().controlLog('debug', undefined, 'none', Log.formatMessage(params)); } /** * Injects the ControlLogService. * @returns The injected ControlLogService. */ static injectedControlLogService() { return YgbInjector.inject(ControlLogService); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Log, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Log, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Log, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWdiLWxvZ3MuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RlY29yYXRvcnMvc3JjL2xvZ2dpbmcvY29udGV4dC1zcGVjaWZpYy95Z2ItbG9ncy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFLeEQsTUFBTSxPQUFPLEdBQUc7SUFDZDs7OztPQUlHO0lBQ0ssTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFpQjtRQUM1QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQVcsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2RSxNQUFNLFFBQVEsR0FBYyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGdCQUF3QixFQUFFLEtBQWMsRUFBRSxFQUFFO1lBQ2xFLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNuQixPQUFPLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2hELENBQUM7Z0JBRUQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3hCLE9BQU8sZ0JBQWdCLENBQUMs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OztPQU1HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQWlCO1FBQy9CLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLFVBQVUsQ0FDekMsT0FBTyxFQUNQLFNBQVMsRUFDVCxNQUFNLEVBQ04sR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMseUJBQXlCO1FBQzlCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBc0IsQ0FBQztJQUNwRSxDQUFDO3VHQWpMVSxHQUFHOzJHQUFILEdBQUcsY0FGRixNQUFNOzsyRkFFUCxHQUFHO2tCQUhmLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbExvZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy95Z2ItY29udHJvbC1sb2cuc2VydmljZSc7XG5pbXBvcnQgeyBZZ2JJbmplY3RvciB9IGZyb20gJy4uLy4uL2dsb2JhbC95Z2ItaW5qZWN0b3InO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9nIHtcbiAgLyoqXG4gICAqIEZvcm1hdHMgdGhlIGxvZyBtZXNzYWdlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBmb3JtYXQgdGhlIG1lc3NhZ2Ugd2l0aC5cbiAgICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBtZXNzYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZm9ybWF0TWVzc2FnZShwYXJhbXM6IHVua25vd25bXSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlOiBzdHJpbmcgPSB0eXBlb2YgcGFyYW1zWzBdID09PSAnc3RyaW5nJyA/IHBhcmFtc1swXSA6ICcnO1xuICAgIGNvbnN0IHBhcmFtc0V4OiB1bmtub3duW10gPSBwYXJhbXMuc2xpY2UoMSk7XG5cbiAgICByZXR1cm4gcGFyYW1zRXgucmVkdWNlKChmb3JtYXR0ZWRNZXNzYWdlOiBzdHJpbmcsIHBhcmFtOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAoZm9ybWF0dGVkTWVzc2FnZS5pbmNsdWRlcygnJXMnKSkge1xuICAgICAgICBpZiAocGFyYW0gPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZS5yZXBsYWNlKCclcycsICdudWxsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlLnJlcGxhY2UoJyVzJywgJ3VuZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAocGFyYW0gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEZXRhaWxzID0ge1xuICAgICAgICAgICAgICBtZXNzYWdlOiBwYXJhbS5tZXNzYWdlLFxuICAgICAgICAgICAgICBzdGFjazogcGFyYW0uc3RhY2ssXG4gICAgICAgICAgICAgIG5hbWU6IHBhcmFtLm5hbWUsXG5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZS5yZXBsYWNlKCclcycsIEpTT04uc3RyaW5naWZ5KGVycm9yRGV0YWlscykpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJhbSBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yRXZlbnREZXRhaWxzID0ge1xuICAgICAgICAgICAgICBtZXNzYWdlOiBwYXJhbS5tZXNzYWdlLFxuICAgICAgICAgICAgICBmaWxlbmFtZTogcGFyYW0uZmlsZW5hbWUsXG4gICAgICAgICAgICAgIGxpbmVubzogcGFyYW0ubGluZW5vLFxuICAgICAgICAgICAgICBjb2xubzogcGFyYW0uY29sbm8sXG4gICAgICAgICAgICAgIGVycm9yOiBwYXJhbS5lcnJvcixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAnJXMnLFxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvckV2ZW50RGV0YWlscylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcmFtIGluc3RhbmNlb2YgUHJvZ3Jlc3NFdmVudCkge1xuICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3NFdmVudERldGFpbHMgPSB7XG4gICAgICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IHBhcmFtLmxlbmd0aENvbXB1dGFibGUsXG4gICAgICAgICAgICAgIGxvYWRlZDogcGFyYW0ubG9hZGVkLFxuICAgICAgICAgICAgICB0b3RhbDogcGFyYW0udG90YWwsXG4gICAgICAgICAgICAgIHRhcmdldDogcGFyYW0udGFyZ2V0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICclcycsXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHByb2dyZXNzRXZlbnREZXRhaWxzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyYW0gaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVFcnJvckRldGFpbHMgPSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHBhcmFtLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIG5hbWU6IHBhcmFtLm5hbWUsXG4gICAgICAgICAgICAgIHN0YWNrOiBwYXJhbS5zdGFja1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICclcycsXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHR5cGVFcnJvckRldGFpbHMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZE1lc3NhZ2UucmVwbGFjZSgnJXMnLCBKU09OLnN0cmluZ2lmeShwYXJhbSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJhbSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlLnJlcGxhY2UoJyVzJywgcGFyYW0udG9JU09TdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcmFtICYmIHBhcmFtLmNvbnN0cnVjdG9yICYmIHBhcmFtLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICclcycsXG4gICAgICAgICAgICAgIGAke3BhcmFtLmNvbnN0cnVjdG9yLm5hbWV9IHsgJHtKU09OLnN0cmluZ2lmeShwYXJhbSl9IH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlLnJlcGxhY2UoJyVzJywgSlNPTi5zdHJpbmdpZnkocGFyYW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgdHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgIHR5cGVvZiBwYXJhbSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlLnJlcGxhY2UoJyVzJywgU3RyaW5nKHBhcmFtKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZS5yZXBsYWNlKCclcycsIFN0cmluZyhwYXJhbSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZTtcbiAgICB9LCBtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIGFuIGluZm8gbWVzc2FnZS5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGxvZy5cbiAgICogQGV4YW1wbGVcbiAgICogTG9nLmluZm8oJ1RoaXMgaXMgYW4gaW5mbyBtZXNzYWdlJyk7XG4gICAqIExvZy5pbmZvKCdVc2VyICVzIGxvZ2dlZCBpbicsIHVzZXJuYW1lKTtcbiAgICovXG4gIHN0YXRpYyBpbmZvKC4uLnBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbmplY3RlZENvbnRyb2xMb2dTZXJ2aWNlKCkuY29udHJvbExvZyhcbiAgICAgICdpbmZvJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgICdub25lJyxcbiAgICAgIExvZy5mb3JtYXRNZXNzYWdlKHBhcmFtcylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBsb2cuXG4gICAqIEBleGFtcGxlXG4gICAqIExvZy53YXJuKCdUaGlzIGlzIGEgd2FybmluZyBtZXNzYWdlJyk7XG4gICAqIExvZy53YXJuKCdMb3cgZGlzayBzcGFjZTogJXMnLCBkaXNrU3BhY2UpO1xuICAgKi9cbiAgc3RhdGljIHdhcm4oLi4ucGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmluamVjdGVkQ29udHJvbExvZ1NlcnZpY2UoKS5jb250cm9sTG9nKFxuICAgICAgJ3dhcm4nLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgJ25vbmUnLFxuICAgICAgTG9nLmZvcm1hdE1lc3NhZ2UocGFyYW1zKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBhbiBlcnJvciBtZXNzYWdlLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gbG9nLlxuICAgKiBAZXhhbXBsZVxuICAgKiBMb2cuZXJyb3IoJ1RoaXMgaXMgYW4gZXJyb3IgbWVzc2FnZScpO1xuICAgKiBMb2cuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlc291cmNlOiAlcycsIHJlc291cmNlTmFtZSk7XG4gICAqL1xuICBzdGF0aWMgZXJyb3IoLi4ucGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAoWWdiSW5qZWN0b3IuaW5qZWN0KENvbnRyb2xMb2dTZXJ2aWNlKSBhcyBDb250cm9sTG9nU2VydmljZSkuY29udHJvbExvZyhcbiAgICAgICdlcnJvcicsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICAnbm9uZScsXG4gICAgICBMb2cuZm9ybWF0TWVzc2FnZShwYXJhbXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIGEgZGVidWcgbWVzc2FnZS5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGxvZy5cbiAgICogQGV4YW1wbGVcbiAgICogTG9nLmRlYnVnKCdUaGlzIGlzIGEgZGVidWcgbWVzc2FnZScpO1xuICAgKiBMb2cuZGVidWcoJ0RlYnVnZ2luZyB2YWx1ZTogJXMnLCBkZWJ1Z1ZhbHVlKTtcbiAgICovXG4gIHN0YXRpYyBkZWJ1ZyguLi5wYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW5qZWN0ZWRDb250cm9sTG9nU2VydmljZSgpLmNvbnRyb2xMb2coXG4gICAgICAnZGVidWcnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgJ25vbmUnLFxuICAgICAgTG9nLmZvcm1hdE1lc3NhZ2UocGFyYW1zKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5qZWN0cyB0aGUgQ29udHJvbExvZ1NlcnZpY2UuXG4gICAqIEByZXR1cm5zIFRoZSBpbmplY3RlZCBDb250cm9sTG9nU2VydmljZS5cbiAgICovXG4gIHN0YXRpYyBpbmplY3RlZENvbnRyb2xMb2dTZXJ2aWNlKCk6IENvbnRyb2xMb2dTZXJ2aWNlIHtcbiAgICByZXR1cm4gWWdiSW5qZWN0b3IuaW5qZWN0KENvbnRyb2xMb2dTZXJ2aWNlKSBhcyBDb250cm9sTG9nU2VydmljZTtcbiAgfVxufVxuIl19