@fababracx/ngx-console-logger
Version:
Logging library for Angular
490 lines (476 loc) • 21.9 kB
JavaScript
import * as i0 from '@angular/core';
import { Component, Input, InjectionToken, APP_INITIALIZER, NgModule } from '@angular/core';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
import { CommonModule } from '@angular/common';
const ngxConsoleLoggerConfigDefaultPrefixMinPad = 5;
const ngxConsoleLoggerConfigDefault = {
debug: 'green',
info: 'blue',
error: 'red',
warn: 'orange',
// NG hooks
ngOnChanges: ['orange', 'ngOnChange'],
ngOnInit: ['orange', 'ngOnInit'],
ngDoCheck: ['orange', 'ngDoCheck'],
ngOnDestroy: ['orange', 'ngOnDestroy'],
// Create
create: ['lightgreen', 'CREATE'],
createComponent: ['lightgreen', 'CREATE - Component'],
createDirective: ['lightgreen', 'CREATE - Directive'],
createService: ['lightgreen', 'CREATE - Service'],
createPipe: ['lightgreen', 'CREATE - Pipe'],
createGuard: ['lightgreen', 'CREATE - Guard'],
createResolver: ['lightgreen', 'CREATE - Resolver'],
// Performance logs
perf: ['darkturquoise', 'PERF'],
perfComponent: ['darkturquoise', 'PERF - Component'],
perfCD: ['darkturquoise', 'PERF - CD'],
perfDom: ['darkturquoise', 'PERF - Dom'],
// Network logs
network: ['blue', 'HTTP'],
networkRequest: ['blue', 'HTTP - Request'],
networkResponse: ['blue', 'HTTP - Response'],
networkError: ['red', 'HTTP - Error'],
networkCreate: ['green', 'HTTP - Create'],
// NG types
resolve: 'brown',
guard: 'sandybrown',
validator: 'plum',
pipe: 'brown',
callback: 'violet',
state: 'blueviolet',
// Specific logs for NGXS, Akita
action: ['#8f72cf', '@ACTION'],
select: ['#84467c', '@SELECT'],
errorState: ['#cf3c04', '@ERROR'],
effect: ['8F72CF', '@EFFECT'],
// Tests
tu: ['green', 'TU'],
ti: ['green', 'TI'],
te2e: ['green', 'E2E'],
// Colors
pink: ['#FF40BD;', '####'],
red: ['red', '####'],
orange: ['orange', '####'],
green: ['springgreen', '####'],
blue: ['cadetblue', '####'],
violet: ['blueviolet', '####']
};
class NgxConsoleLogger {
// eslint-disable-next-line @typescript-eslint/no-empty-function
static fnConsoleLoggerNull(_message, ..._optionalParams) { }
static init(ngxConsoleLoggerConfig = ngxConsoleLoggerConfigDefault, activatePerfsLogs = false, defaultPrefixMinPad = ngxConsoleLoggerConfigDefaultPrefixMinPad) {
NgxConsoleLogger.config = ngxConsoleLoggerConfig;
NgxConsoleLogger.prefixMinPad = defaultPrefixMinPad || NgxConsoleLogger.prefixMinPad;
if (NgxConsoleLogger.config) {
// Init all keys
Object.keys(ngxConsoleLoggerConfig).forEach(key => {
var _a;
const configData = ((_a = NgxConsoleLogger.config) === null || _a === void 0 ? void 0 : _a[key]) || [];
const { logPrefix, logColor } = NgxConsoleLogger.getConsoleData(key, configData) || {};
NgxConsoleLogger[key] = NgxConsoleLogger.initConsole(logPrefix, logColor);
});
// deactivate or activate perfs logs
NgxConsoleLogger.deactivatePerfLogs();
if (activatePerfsLogs) {
NgxConsoleLogger.activatePerfLogs();
}
}
}
static initLog(key, configData) {
if (!!NgxConsoleLogger[key] && (!NgxConsoleLogger.config || !NgxConsoleLogger.config[key])) {
NgxConsoleLogger.config = !NgxConsoleLogger.config ? {} : NgxConsoleLogger.config;
NgxConsoleLogger.config[key] = configData;
const { logPrefix, logColor } = NgxConsoleLogger.getConsoleData(key, configData) || {};
NgxConsoleLogger[key] = NgxConsoleLogger.initConsole(logPrefix, logColor);
}
}
static activateLog(key) {
var _a;
if (!!NgxConsoleLogger.config && Object.keys(NgxConsoleLogger.config).find(k => key === k)) {
const configData = ((_a = NgxConsoleLogger.config) === null || _a === void 0 ? void 0 : _a[key]) || [];
const { logPrefix, logColor } = NgxConsoleLogger.getConsoleData(key, configData) || {};
NgxConsoleLogger[key] = NgxConsoleLogger.initConsole(logPrefix, logColor);
}
}
static activateLogs(...keys) {
keys.forEach(key => NgxConsoleLogger.activateLog(key));
}
static activatePerfLogs() {
NgxConsoleLogger.activateLogs('perf', 'perfCD', 'perfComponent', 'perfDom');
}
static deactivateLog(key) {
if (!!NgxConsoleLogger.config && Object.keys(NgxConsoleLogger.config).find(k => key === k)) {
NgxConsoleLogger[key] = NgxConsoleLogger.fnConsoleLoggerNull;
}
}
static deactivateLogs(...keys) {
keys.forEach(key => NgxConsoleLogger.deactivateLog(key));
}
static deactivatePerfLogs() {
NgxConsoleLogger.deactivateLogs('perf', 'perfCD', 'perfComponent', 'perfDom');
}
static getConsoleData(key, configData) {
let logPrefix = key;
let logColor;
if (configData instanceof Array) {
if (configData.length >= 2) {
logPrefix = configData[1];
logColor = configData[0];
}
else {
console.error(`Bad configuration for key ${logPrefix}`);
}
}
else {
logColor = configData;
}
return { logPrefix, logColor };
}
static initConsole(logPrefix, logColor) {
if (!logPrefix || !logColor) {
return console.log.bind(console);
}
// Capitalize prefix
const logPrefixCapitalized = NgxConsoleLogger.prepareLogPrefix(logPrefix);
const ua = window.navigator.userAgent;
// Check if ie
const msie = ua === null || ua === void 0 ? void 0 : ua.indexOf('MSIE ');
if (msie > 0) {
return console.info.bind(console, `${logPrefixCapitalized}:`);
}
else {
return console.info.bind(console, `%c${logPrefixCapitalized}:`, `color: ${logColor}`);
}
}
static prepareLogPrefix(logPrefix) {
let logPrefixCapitalized = `${logPrefix.charAt(0).toUpperCase()}${logPrefix.slice(1)}`;
// padEnd does not exits in IE11
// <=> logPrefixCapitalized.padEnd(NgxConsoleLogger.prefixLength, ' ')
if (logPrefixCapitalized.length < NgxConsoleLogger.prefixMinPad) {
while (logPrefixCapitalized.length < NgxConsoleLogger.prefixMinPad) {
// Add space
logPrefixCapitalized = `${logPrefixCapitalized} `;
}
}
return logPrefixCapitalized;
}
}
NgxConsoleLogger.prefixMinPad = ngxConsoleLoggerConfigDefaultPrefixMinPad;
NgxConsoleLogger.config = {};
NgxConsoleLogger.debug = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.info = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.warn = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.error = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.ngOnChanges = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.ngOnInit = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.ngDoCheck = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.ngOnDestroy = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.create = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.createComponent = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.createDirective = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.createService = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.createPipe = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.createGuard = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.createResolver = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.perf = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.perfComponent = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.perfCD = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.perfDom = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.network = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.networkRequest = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.networkResponse = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.networkError = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.networkCreate = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.resolve = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.guard = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.validator = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.pipe = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.callback = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.state = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.action = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.select = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.errorState = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.effect = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.tu = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.ti = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.te2e = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.pink = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.red = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.orange = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.green = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.blue = NgxConsoleLogger.fnConsoleLoggerNull;
NgxConsoleLogger.violet = NgxConsoleLogger.fnConsoleLoggerNull;
class PerfRefreshCountComponent {
constructor() {
this.counter = 1;
/**
* Component name
*/
this.name = '';
/**
* Counter label
*/
this.counterLabel = 'Refresh';
}
/**
* Log number of angular component refresh
*/
onRefreshCounter() {
NgxConsoleLogger.perfComponent(`${this.name} ${this.counter++} ${this.counterLabel}`);
}
}
PerfRefreshCountComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: PerfRefreshCountComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
PerfRefreshCountComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: PerfRefreshCountComponent, selector: "ngx-cl-perf-refresh-count", inputs: { name: "name", counterLabel: "counterLabel" }, ngImport: i0, template: ` {{ onRefreshCounter() }} `, isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: PerfRefreshCountComponent, decorators: [{
type: Component,
args: [{
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'ngx-cl-perf-refresh-count',
template: ` {{ onRefreshCounter() }} `
}]
}], propDecorators: { name: [{
type: Input
}], counterLabel: [{
type: Input
}] } });
class RootPerfRefreshCountComponent {
constructor() {
this.counterRefresh = 1;
this.counterDomRefresh = 1;
/**
* Counter label
*/
this.counterLabel = 'Refresh';
}
/**
* Log number of angular do check
*/
ngDoCheck() {
if (NgxConsoleLogger.config) {
// Called at the beginning of every change detection run
NgxConsoleLogger.perfCD(`${this.counterRefresh++} ${this.counterLabel}`);
}
}
/**
* Log number of angular dom refresh
*/
onRefreshDomCounter() {
if (NgxConsoleLogger.config) {
NgxConsoleLogger.perfDom(`${this.counterDomRefresh++} ${this.counterLabel}`);
}
}
}
RootPerfRefreshCountComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: RootPerfRefreshCountComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
RootPerfRefreshCountComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: RootPerfRefreshCountComponent, selector: "ngx-cl-root-perf-refresh-count", inputs: { counterLabel: "counterLabel" }, ngImport: i0, template: ` {{ onRefreshDomCounter() }} `, isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: RootPerfRefreshCountComponent, decorators: [{
type: Component,
args: [{
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'ngx-cl-root-perf-refresh-count',
template: ` {{ onRefreshDomCounter() }} `
}]
}], propDecorators: { counterLabel: [{
type: Input
}] } });
const LifecycleLog = (type = 'debug', LIFECYCLE_HOOKS = ['ngOnInit', 'ngOnChanges', 'ngOnDestroy'], config = ngxConsoleLoggerConfigDefault) => {
NgxConsoleLogger.init(config);
console.log('constructor');
return (target) => {
console.log('target', target);
// if (!environment.production) {
// You can add/remove events for your needs
const component = target.name;
LIFECYCLE_HOOKS.forEach(hook => {
console.log('hook');
const original = target.prototype[hook];
target.prototype[hook] = (...args) => {
if (NgxConsoleLogger === null || NgxConsoleLogger === void 0 ? void 0 : NgxConsoleLogger[hook]) {
NgxConsoleLogger[hook](`${component}`, ...args);
}
else if (type) {
NgxConsoleLogger[type](`${component} - ${hook}`, ...args);
}
else {
console.log(`${component} - ${hook}`, ...args);
}
return original === null || original === void 0 ? void 0 : original.apply(this, args);
};
// target.prototype[hook]();
});
// }
return target;
};
};
const MethodConsoleLogger = (type = 'info', config = ngxConsoleLoggerConfigDefault) => {
NgxConsoleLogger.init(config);
return (target, propertyKey, descriptor) => {
const targetMethod = descriptor.value;
descriptor.value = (...args) => {
if (type) {
NgxConsoleLogger[type].apply(propertyKey, args);
}
else {
console.log(propertyKey, args);
}
return targetMethod.apply(this, args);
};
return descriptor;
};
};
function PropertyConsoleLogger(type = 'info', logSetter = true, logGetter = false, config = ngxConsoleLoggerConfigDefault) {
NgxConsoleLogger.init(config);
// eslint-disable-next-line @typescript-eslint/ban-types
return (target, propertyKey) => {
let propertyValue;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function getter() {
if (logGetter) {
if (type) {
NgxConsoleLogger[type](propertyValue);
}
else {
console.log(propertyValue);
}
}
return propertyValue;
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function setter(value) {
if (value instanceof Observable) {
if (logSetter) {
propertyValue = value.pipe(tap(res => {
const isArrayOfObjects = Array.isArray(res) && typeof res[0] === 'object';
const logType = isArrayOfObjects ? 'table' : 'log';
console.groupCollapsed(propertyKey === null || propertyKey === void 0 ? void 0 : propertyKey.toString());
console[logType](res);
console.groupEnd();
}));
}
}
else {
if (logSetter) {
if (type) {
NgxConsoleLogger[type](value);
}
else {
console.log(value);
}
}
propertyValue = value;
}
}
};
}
const ngxConsoleLoggerConfigProd = {
// only error and warn will output to the console.
error: 'red',
warn: 'orange',
// Performance logs
perf: ['darkturquoise', 'PERF'],
perfComponent: ['darkturquoise', 'PERF - Component'],
perfCD: ['darkturquoise', 'PERF - CD'],
perfDom: ['darkturquoise', 'PERF - Dom']
};
let initialized = false;
function ngxConsoleLoggerFactory(useDefaultConfig, environment, activatePerfsLogs, defaultPrefixLength) {
// https://github.com/ng-packagr/ng-packagr/issues/696
const initConfig = () => {
return new Promise((resolve, _reject) => {
setTimeout(() => {
if (!initialized) {
if (!useDefaultConfig) {
checkEnvironmentConfig(environment);
}
/**
* Check if you have a Specific config defined, if so take it.
*/
const config = environment.production ? ngxConsoleLoggerConfigProd : ngxConsoleLoggerConfigDefault;
let ngxConsoleLoggerConfig = useDefaultConfig ? config : {};
if (environment.ngxConsoleLogger) {
ngxConsoleLoggerConfig = environment.ngxConsoleLogger;
}
NgxConsoleLogger.init(ngxConsoleLoggerConfig, activatePerfsLogs, defaultPrefixLength);
initialized = true;
}
resolve(initialized);
}, 2000);
});
};
return initConfig;
}
/**
* get the Default config for default or prod mode
*/
const checkEnvironmentConfig = (environment) => {
if (!environment.ngxConsoleLogger) {
console.warn('Please initialize NgxConsoleLogger environment configuration');
if (environment.production) {
console.warn('Recommended configuration : node_module/@fababracx/ngx-console-logger/exemple/config/ngx-console-logger-config.prod.ts');
}
else {
console.warn('Recommended configuration : node_module/@fababracx/ngx-console-logger/exemple/config/ngx-console-logger-config.ts');
}
}
};
const USE_DEFAULT_CONFIG = new InjectionToken('USE_DEFAULT_CONFIG');
const ENV_CONFIG = new InjectionToken('LOGGER_CONFIG');
const ACTIVATE_PERF_LOGS = new InjectionToken('ACTIVATE_PERF_LOGS');
const PREFIX_LENGTH = new InjectionToken('PREFIX_LENGTH');
class NgxConsoleLoggerModule {
static forRoot(useDefaultConfig = false, environment, activatePerfLogs = false, defaultPrefixMinPad = ngxConsoleLoggerConfigDefaultPrefixMinPad) {
return {
ngModule: NgxConsoleLoggerModule,
providers: [
{
provide: APP_INITIALIZER,
useFactory: ngxConsoleLoggerFactory,
multi: true,
deps: [USE_DEFAULT_CONFIG, ENV_CONFIG, ACTIVATE_PERF_LOGS, PREFIX_LENGTH]
},
{
provide: USE_DEFAULT_CONFIG,
useValue: useDefaultConfig
},
{
provide: ENV_CONFIG,
useValue: environment
},
{
provide: ACTIVATE_PERF_LOGS,
useValue: activatePerfLogs
},
{
provide: PREFIX_LENGTH,
useValue: defaultPrefixMinPad
}
]
};
}
static forChild() {
return {
ngModule: NgxConsoleLoggerModule,
providers: []
};
}
}
NgxConsoleLoggerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NgxConsoleLoggerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
NgxConsoleLoggerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.3", ngImport: i0, type: NgxConsoleLoggerModule, declarations: [RootPerfRefreshCountComponent, PerfRefreshCountComponent], imports: [CommonModule], exports: [RootPerfRefreshCountComponent, PerfRefreshCountComponent] });
NgxConsoleLoggerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NgxConsoleLoggerModule, imports: [CommonModule] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: NgxConsoleLoggerModule, decorators: [{
type: NgModule,
args: [{
declarations: [RootPerfRefreshCountComponent, PerfRefreshCountComponent],
imports: [CommonModule],
exports: [RootPerfRefreshCountComponent, PerfRefreshCountComponent]
}]
}] });
/*
* Public API Surface of ngx-console-logger
*/
/**
* Generated bundle index. Do not edit.
*/
export { LifecycleLog, MethodConsoleLogger, NgxConsoleLogger, NgxConsoleLoggerModule, PerfRefreshCountComponent, PropertyConsoleLogger, RootPerfRefreshCountComponent };
//# sourceMappingURL=fababracx-ngx-console-logger.mjs.map