ng2-logger
Version:
isomorphic logger for browser/server in typescript
1 lines • 29.6 kB
Source Map (JSON)
{"version":3,"file":"ng2-logger.mjs","sources":["../../../tmp-libs-for-dist/ng2-logger/projects/ng2-logger/src/lib/level.ts","../../../tmp-libs-for-dist/ng2-logger/projects/ng2-logger/src/lib/display.ts","../../../tmp-libs-for-dist/ng2-logger/projects/ng2-logger/src/lib/logger.ts","../../../tmp-libs-for-dist/ng2-logger/projects/ng2-logger/src/lib/log.ts","../../../tmp-libs-for-dist/ng2-logger/projects/ng2-logger/src/ng2-logger.ts"],"sourcesContent":["export enum Level {\n DATA,\n INFO,\n WARN,\n ERROR ,\n SUCCESS,\n TASK_STARTED,\n TASK_DONE,\n __NOTHING ,\n}\n\nexport const LevelKey = {\n [Level.DATA] : 'log',\n [Level.INFO] : 'info',\n [Level.WARN] : 'warn',\n [Level.ERROR] : 'error',\n [Level.SUCCESS] : 'success',\n [Level.TASK_STARTED] : 'taskstarted',\n [Level.TASK_DONE] : 'taskdone',\n [Level.__NOTHING] : '',\n}\n\nexport const LevelOrder = [\n LevelKey[Level.DATA],\n LevelKey[Level.TASK_STARTED],\n LevelKey[Level.TASK_DONE],\n LevelKey[Level.INFO],\n LevelKey[Level.SUCCESS],\n LevelKey[Level.WARN],\n LevelKey[Level.ERROR],\n];\n","/* */\n/* */\n \nimport { Level } from './level';\nimport { Helpers } from 'tnp-core/browser';\nimport { consoleLog, displayParams } from './backend-logging';\n\n/* */\n/* */\n \n\nexport class Display {\n\n static msg(\n message: string | any,\n params: any[],\n moduleName: string,\n moduleColor: string,\n level: Level,\n moduleWidth: number | undefined,\n isProductionMode: boolean\n ) {\n if (isProductionMode) {\n return;\n };\n let color = 'gray';\n if (level === Level.INFO) { color = 'deepskyblue'; }\n if (level === Level.ERROR) { color = 'red'; }\n if (level === Level.WARN) { color = 'orange'; }\n\n if (moduleWidth) {\n const diff = moduleWidth - moduleName.length;\n if (diff > 0) {\n for (let i = 0; i < diff; i++) {\n moduleName += ' ';\n }\n }\n }\n\n //#region @browser\n if (Helpers.isBrowser\n/* */\n/* */\n \n ) {\n\n\n // @ts-ignore\n const isEdgeOrIe8orAbove = (document['documentMode'] || /Edge/.test(navigator.userAgent));\n\n if (isEdgeOrIe8orAbove) {\n if (typeof message === 'string') {\n let a1 = '[[ ' + moduleName + ' ]] ' + message + ' ';\n params.unshift(a1);\n } else {\n let a1 = '[[ ' + moduleName + ']] ';\n params.push(message);\n params.unshift(a1);\n }\n if (level === Level.INFO) {\n console.info.apply(console, params);\n } else if (level === Level.ERROR) {\n console.error.apply(console, params);\n } else if (level === Level.WARN) {\n console.warn.apply(console, params);\n } else {\n console.log.apply(console, params);\n }\n } else {\n if (typeof message === 'string') {\n let a1 = '%c ' + moduleName + ' %c ' + message + ' ';\n let a2 = 'background: ' + moduleColor + ';color:white; border: 1px solid ' + moduleColor + '; ';\n let a3 = 'border: 1px solid ' + color + '; ';\n params.unshift(a3);\n params.unshift(a2);\n params.unshift(a1);\n } else {\n let a1 = '%c ' + moduleName + ' ';\n let a2 = 'background: ' + moduleColor + ';color:white; border: 1px solid ' + color + '; ';\n params.push(message);\n params.unshift(a2);\n params.unshift(a1);\n }\n console.log.apply(console, params);\n }\n\n }\n //#endregion\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n\n }\n\n}\n","import { Level } from './level';\nimport { Display } from './display';\nimport { Helpers } from 'tnp-core/browser';\n\nexport class Logger {\n\n private _level: Level;\n public setLevel(l: Level) {\n this._level = l;\n return this;\n }\n\n public get isProductionMode() {\n return !this.developmentMode;\n }\n\n public setProductionMode(productionMode: boolean) {\n this.developmentMode = !productionMode;\n return this;\n }\n\n public mute() {\n this.isMuted = true;\n return this;\n }\n\n constructor(\n private name: string,\n public color: string,\n private developmentMode: boolean,\n private allowed: Level[],\n private isMuted: boolean,\n public fixedWidth: number | undefined\n ) { }\n\n onlyWhen(expression: (() => boolean) | boolean) {\n if (typeof expression === 'function') {\n this.isMuted = !expression()\n } else if (typeof expression === 'boolean') {\n this.isMuted = !expression;\n }\n }\n\n private _data(name: string, ...data: any[]) {\n if (this.isMuted) return this;\n if (this.allowed.length >= 1 && Helpers.contain(this.allowed, Level.__NOTHING)\n && !Helpers.contain(this.allowed, Level.DATA)) return this;\n\n if (this.allowed.length === 0 || Helpers.contain(this.allowed, Level.DATA)) {\n // @ts-ignore\n Display.msg.apply(void 0, [\n name,\n ...data,\n this.name,\n this.color,\n Level.DATA,\n this.fixedWidth,\n this.isProductionMode,\n ]);\n }\n return this;\n }\n\n\n private _error(name: string, ...data: any[]) {\n if (this.isMuted) return this;\n if (this.allowed.length >= 1 && Helpers.contain(this.allowed, Level.__NOTHING)\n && !Helpers.contain(this.allowed, Level.ERROR)) return this;\n\n if (this.allowed.length === 0 || Helpers.contain(this.allowed, Level.ERROR)) {\n // @ts-ignore\n Display.msg.apply(void 0, [\n name,\n ...data,\n this.name,\n this.color,\n Level.ERROR,\n this.fixedWidth,\n this.isProductionMode,\n ]);\n }\n return this;\n }\n\n private _info(name: string, ...data: any[]) {\n if (this.isMuted) return this;\n if (this.allowed.length >= 1 && Helpers.contain(this.allowed, Level.__NOTHING)\n && !Helpers.contain(this.allowed, Level.INFO)) return this;\n\n if (this.allowed.length === 0 || Helpers.contain(this.allowed, Level.INFO)) {\n // @ts-ignore\n Display.msg.apply(void 0, [\n name,\n ...data,\n this.name,\n this.color,\n Level.INFO,\n this.fixedWidth,\n this.isProductionMode,\n ]);\n }\n return this;\n }\n\n private _success(name: string, ...data: any[]) {\n if (this.isMuted) return this;\n if (this.allowed.length >= 1 && Helpers.contain(this.allowed, Level.__NOTHING)\n && !Helpers.contain(this.allowed, Level.SUCCESS)) return this;\n\n if (this.allowed.length === 0 || Helpers.contain(this.allowed, Level.SUCCESS)) {\n // @ts-ignore\n Display.msg.apply(void 0, [\n name,\n ...data,\n this.name,\n this.color,\n Level.SUCCESS,\n this.fixedWidth,\n this.isProductionMode,\n ]);\n }\n return this;\n }\n\n private _taskStarted(name: string, ...data: any[]) {\n if (this.isMuted) return this;\n if (this.allowed.length >= 1 && Helpers.contain(this.allowed, Level.__NOTHING)\n && !Helpers.contain(this.allowed, Level.TASK_STARTED)) return this;\n\n if (this.allowed.length === 0 || Helpers.contain(this.allowed, Level.TASK_STARTED)) {\n // @ts-ignore\n Display.msg.apply(void 0, [\n name,\n ...data,\n this.name,\n this.color,\n Level.TASK_STARTED,\n this.fixedWidth,\n this.isProductionMode,\n ]);\n }\n return this;\n }\n\n private _taskDone(name: string, ...data: any[]) {\n if (this.isMuted) return this;\n if (this.allowed.length >= 1 && Helpers.contain(this.allowed, Level.__NOTHING)\n && !Helpers.contain(this.allowed, Level.TASK_DONE)) return this;\n\n if (this.allowed.length === 0 || Helpers.contain(this.allowed, Level.TASK_DONE)) {\n // @ts-ignore\n Display.msg.apply(void 0, [\n name,\n ...data,\n this.name,\n this.color,\n Level.TASK_DONE,\n this.fixedWidth,\n this.isProductionMode,\n ]);\n }\n return this;\n }\n\n private _warn(name: string, ...data: any[]) {\n if (this.isMuted) return this;\n if (this.allowed.length >= 1 && Helpers.contain(this.allowed, Level.__NOTHING)\n && !Helpers.contain(this.allowed, Level.WARN)) return this;\n\n if (this.allowed.length === 0 || Helpers.contain(this.allowed, Level.WARN)) {\n // @ts-ignore\n Display.msg.apply(void 0, [\n name,\n ...data,\n this.name,\n this.color,\n Level.WARN,\n this.fixedWidth,\n this.isProductionMode,\n ])\n }\n return this;\n }\n\n\n /**\n * @see data\n */\n d = (name: string | any, ...data: any[]) => this._data(name, data);\n\n /**\n * @see error\n */\n\n er = (name: string | any, ...data: any[]) => this._error(name, data);\n\n /**\n * @see info\n */\n i = (name: string | any, ...data: any[]) => this._info(name, data);\n\n /**\n * @see warn\n */\n w = (name: string | any, ...data: any[]) => this._warn(name, data);\n\n /**\n * Logs message and data with the level=data\n * @param message The message\n * @param otherParams Additional parameters\n */\n data = (message: string, ...otherParams: any[]) => { return this._data(message, otherParams); };\n\n /**\n * Logs message and data with the level=error\n * @param message The message\n * @param otherParams Additional parameters\n */\n error = (message: string, ...otherParams: any[]) => this._error(message, otherParams);\n\n /**\n * Logs message and data with the level=info\n * @param message The message\n * @param otherParams Additional parameters\n */\n info = (message: string, ...otherParams: any[]) => this._info(message, otherParams);\n\n /**\n * Logs message and data with the level=success\n * @param message The message\n * @param otherParams Additional parameters\n */\n success = (message: string, ...otherParams: any[]) => this._success(message, otherParams);\n\n\n /**\n * Logs message and data with the level=taskStarted\n * @param message The message\n * @param otherParams Additional parameters\n */\n taskStarted = (message: string, ...otherParams: any[]) => this._taskStarted(message, otherParams);\n\n /**\n * Logs message and data with the level=taskDone\n * @param message The message\n * @param otherParams Additional parameters\n */\n taskDone = (message?: string, ...otherParams: any[]) => this._taskDone(message, otherParams);\n\n /**\n * Logs message and data with the level=warn\n * @param message The message\n * @param otherParams Additional parameters\n */\n warn = (message: string, ...otherParams: any[]) => this._warn(message, otherParams);\n\n}\n","import { Logger } from './logger';\nimport { Level, LevelOrder, LevelKey } from './level';\nimport { Helpers } from 'tnp-core/browser';\n/* */\n/* */\n/* */\n \n\n\n/* */\n/* */\n \n\n\nexport class Log {\n //#region singleton\n private constructor() { }\n // @ts-ignore\n private static get instance(): any {\n // @ts-ignore\n if (!Log['_instance']) {\n // @ts-ignore\n Log['_instance'] = new Log();\n }\n // @ts-ignore\n return Log['_instance'];\n }\n //#endregion\n\n static Logger: (typeof Logger) = Logger;\n static create(name: string, ...level: Level[]): Logger {\n return Log.instance.create(name, ...level);\n }\n\n private static readonly consolelogfn = {};\n static disableLogs(level = Level.__NOTHING) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n LevelOrder.reverse().find(a => {\n // @ts-ignore\n if (!this.consolelogfn[a]) {\n // @ts-ignore\n this.consolelogfn[a] = console[a];\n }\n // @ts-ignore\n console[a] = () => { };\n if (a === LevelKey[level]) {\n return true;\n }\n return false;\n });\n }\n\n static enableLogs() {\n/* */\n/* */\n/* */\n/* */\n \n LevelOrder.forEach(a => {\n // @ts-ignore\n console[a] = this.consolelogfn[a]\n });\n }\n\n private _logOnly = false;\n private _logModules = false;\n private isDevelopmentMode = true;\n private modeIsSet: boolean = false;\n private fixedWidth = 0;\n private instances: { [moduleName: string]: Logger } = {};\n private levels: Level[] = [];\n private modules: (string | RegExp)[] = [];\n\n //#region public api\n public setProductionMode() {\n if (this.modeIsSet) {\n this.modeIsSet = false\n throw '[ng2-logger] Production mode is already set';\n } else {\n this.modeIsSet = true;\n setTimeout(() => {\n\n if (this.modeIsSet && console !== void 0 && console.clear !== void 0) {\n\n console.clear();\n console.log = () => { };\n console.error = () => { };\n console.warn = () => { };\n console.info = () => { };\n }\n });\n\n this.isDevelopmentMode = false;\n }\n }\n\n public onlyModules(...modules: (string | RegExp)[]) {\n if (this._logModules) {\n throw '[ng2-logger] You should use funcion onlyModules only once';\n }\n if (!this._logModules) {\n this._logModules = true;\n }\n if (modules.length === 0) return;\n this.modules = modules;\n // console.log('only log this', Log.modules)\n this.muteAllOtherModules();\n }\n\n\n public onlyLevel(...level: Level[]) {\n if (this._logOnly) {\n throw '[ng2-logger] You should use funcion onlyLevel only once';\n }\n if (!this._logOnly) {\n this._logOnly = true;\n }\n\n this.levels = Array.isArray(level) ? level : [level];\n\n\n for (const logName in this.instances) {\n if (this.instances.hasOwnProperty(logName)) {\n const element = this.instances[logName];\n element['allowed'] = this.levels;\n }\n }\n }\n\n //#endregion\n\n private create(name: string, ...level: Level[]): Logger {\n let i: Logger;\n if (Array.isArray(this.levels) && this.levels.length > 0) {\n level = this.levels;\n }\n if (this.instances[name] === void 0) {\n i = new (Log.Logger)(\n name,\n getRandomColor(),\n this.isDevelopmentMode,\n level,\n this.isMutedModule(name),\n this.levels.length > 0 ? this.fixedWidth : void 0,\n // Log.levels.length > 0 ? Log.display : undefined,\n );\n this.instances[name] = i;\n } else {\n i = this.instances[name];\n }\n return i;\n }\n\n private isMutedModule(moduleName: string): boolean {\n if (this.modules.length == 0) return false;\n if (!Helpers.contain(this.modules, moduleName)) return true;\n return false;\n }\n private muteAllOtherModules() {\n for (var moduleName in this.instances) {\n if (!Helpers.contain(this.modules, moduleName))\n this.instances[moduleName].mute()\n }\n }\n\n}\n\n\nfunction getRandomColor(): string {\n/* */\n/* */\n/* */\n/* */\n \n\n let letters = '012345'.split('');\n let color = '#';\n color += letters[Math.round(Math.random() * 5)];\n letters = '0123456789ABCDEF'.split('');\n for (let i = 0; i < 5; i++) {\n color += letters[Math.round(Math.random() * 15)];\n }\n if (color === void 0) {\n return getRandomColor()\n };\n return color;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}