@yaagoub/decorators
Version:
Angular decorators
138 lines • 18.4 kB
JavaScript
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