UNPKG

@cute-dw/core

Version:

This TypeScript library is the main part of a more powerfull package designed for the fast WEB software development. The cornerstone of the library is the **DataStore** class, which might be useful when you need a full control of the data, but do not need

122 lines 14.6 kB
import { Injectable, InjectionToken } from '@angular/core'; import { debounceTime, filter, Subject } from 'rxjs'; import { DateFormat } from '../util/i18n/text/DateFormat'; import { SimpleDateFormat } from '../util/i18n/text/SimpleDateFormat'; import * as i0 from "@angular/core"; export const LOGGER = new InjectionToken("logger"); export var LogLevel; (function (LogLevel) { LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG"; LogLevel[LogLevel["INFO"] = 1] = "INFO"; LogLevel[LogLevel["LOG"] = 2] = "LOG"; LogLevel[LogLevel["WARN"] = 3] = "WARN"; LogLevel[LogLevel["ERROR"] = 4] = "ERROR"; LogLevel[LogLevel["FATAL"] = 5] = "FATAL"; })(LogLevel || (LogLevel = {})); var LoggerEvents; (function (LoggerEvents) { LoggerEvents[LoggerEvents["Flush"] = 1] = "Flush"; })(LoggerEvents || (LoggerEvents = {})); /** * A logging service class that is able to send logs to the browser console and to the server URL address */ export class LogService { constructor() { this.logLevel = LogLevel.INFO; this.serverLogLevel = LogLevel.WARN; this.useServer = false; this._buffer = []; this._flush = new Subject(); this._dateFormat = new SimpleDateFormat(DateFormat.ISODATETIMETZ); this._subscription = this._flush .pipe(debounceTime(5000), filter((event) => event === LoggerEvents.Flush)) .subscribe(() => this.flushBuffer()); } static getLogger(name) { let logger = this._map.get(name); if (!logger) { logger = new LogService(); logger.name = name; this._map.set(name, logger); } return logger; } flushBuffer() { const data = this._buffer.splice(0); if (data.length === 0) { return; } const body = "[" + data .map((entry) => this.buildLogString(entry)) .reduce((json, entry) => (json += entry + ","), '') + "]"; const xobj = new XMLHttpRequest(); xobj.onerror = (err) => console.error(err); xobj.open('POST', this.serverEndPoint, true); xobj.send(body); } buildLogString(entry) { return JSON.stringify(entry); } debug(message) { this.logMessage(LogLevel.DEBUG, message); } log(message) { this.logMessage(LogLevel.LOG, message); } info(message) { this.logMessage(LogLevel.INFO, message); } warn(message) { this.logMessage(LogLevel.WARN, message); } error(message) { this.logMessage(LogLevel.ERROR, message); } fatal(message) { this.logMessage(LogLevel.FATAL, message); } logMessage(level, message) { const timestamp = this._dateFormat.format(Date.now()); if (this.useServer && this.serverEndPoint) { if (level >= this.serverLogLevel) { this._buffer.push({ timestamp, level, message }); this._flush.next(LoggerEvents.Flush); } } else if (level >= this.logLevel) { const msg = `${timestamp} ${this.name} ${LogLevel[level]}: ${message}`; switch (level) { case LogLevel.DEBUG: console.debug(msg); break; case LogLevel.INFO: console.info(msg); break; case LogLevel.WARN: console.warn(msg); break; case LogLevel.ERROR: case LogLevel.FATAL: console.error(msg); break; default: console.log(msg); } } } destroy() { this._subscription.unsubscribe(); } } LogService._map = new Map(); LogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: LogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); LogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: LogService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: LogService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jdXRlLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9sb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFFdEUsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLElBQUksY0FBYyxDQUFhLFFBQVEsQ0FBQyxDQUFDO0FBRS9ELE1BQU0sQ0FBTixJQUFZLFFBT1g7QUFQRCxXQUFZLFFBQVE7SUFDbEIseUNBQUssQ0FBQTtJQUNMLHVDQUFJLENBQUE7SUFDSixxQ0FBRyxDQUFBO0lBQ0gsdUNBQUksQ0FBQTtJQUNKLHlDQUFLLENBQUE7SUFDTCx5Q0FBSyxDQUFBO0FBQ1AsQ0FBQyxFQVBXLFFBQVEsS0FBUixRQUFRLFFBT25CO0FBRUQsSUFBSyxZQUVKO0FBRkQsV0FBSyxZQUFZO0lBQ2YsaURBQVMsQ0FBQTtBQUNYLENBQUMsRUFGSSxZQUFZLEtBQVosWUFBWSxRQUVoQjtBQVNEOztHQUVHO0FBSUgsTUFBTSxPQUFPLFVBQVU7SUFpQnJCO1FBWkEsYUFBUSxHQUFhLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbkMsbUJBQWMsR0FBYSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBSXpDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFbkIsWUFBTyxHQUFlLEVBQUUsQ0FBQztRQUN6QixXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWdCLENBQUM7UUFDckMsZ0JBQVcsR0FBRyxJQUFJLGdCQUFn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YUFDcEI7U0FDRjtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDOztBQTFHYyxlQUFJLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7dUdBRnpDLFVBQVU7MkdBQVYsVUFBVSxjQUZULE1BQU07MkZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdCB9IGZyb20gJy4uL3V0aWwvaTE4bi90ZXh0L0RhdGVGb3JtYXQnO1xuaW1wb3J0IHsgU2ltcGxlRGF0ZUZvcm1hdCB9IGZyb20gJy4uL3V0aWwvaTE4bi90ZXh0L1NpbXBsZURhdGVGb3JtYXQnO1xuXG5leHBvcnQgY29uc3QgTE9HR0VSID0gbmV3IEluamVjdGlvblRva2VuPExvZ1NlcnZpY2U+KFwibG9nZ2VyXCIpO1xuXG5leHBvcnQgZW51bSBMb2dMZXZlbCB7XG4gIERFQlVHLFxuICBJTkZPLFxuICBMT0csXG4gIFdBUk4sXG4gIEVSUk9SLFxuICBGQVRBTFxufVxuXG5lbnVtIExvZ2dlckV2ZW50cyB7XG4gIEZsdXNoID0gMVxufVxuXG5pbnRlcmZhY2UgTG9nRW50cnkge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgbGV2ZWw6IExvZ0xldmVsO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRhdGE/OiBhbnk7XG59XG5cbi8qKlxuICogQSBsb2dnaW5nIHNlcnZpY2UgY2xhc3MgdGhhdCBpcyBhYmxlIHRvIHNlbmQgbG9ncyB0byB0aGUgYnJvd3NlciBjb25zb2xlIGFuZCB0byB0aGUgc2VydmVyIFVSTCBhZGRyZXNzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIExvZ1NlcnZpY2Uge1xuXG4gIHByaXZhdGUgc3RhdGljIF9tYXAgPSBuZXcgTWFwPHN0cmluZywgTG9nU2VydmljZT4oKTtcblxuXG4gIGxvZ0xldmVsOiBMb2dMZXZlbCA9IExvZ0xldmVsLklORk87XG4gIHNlcnZlckxvZ0xldmVsOiBMb2dMZXZlbCA9IExvZ0xldmVsLldBUk47XG4gIHNlcnZlckVuZFBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgbmFtZT86IHN0cmluZztcbiAgdXNlU2VydmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfYnVmZmVyOiBMb2dFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX2ZsdXNoID0gbmV3IFN1YmplY3Q8TG9nZ2VyRXZlbnRzPigpO1xuICBwcml2YXRlIF9kYXRlRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoRGF0ZUZvcm1hdC5JU09EQVRFVElNRVRaKTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5fZmx1c2hcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTAwMCksXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50ID09PSBMb2dnZXJFdmVudHMuRmx1c2gpKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4gdGhpcy5mbHVzaEJ1ZmZlcigpXG4gICAgICApO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihuYW1lOiBzdHJpbmcpOiBMb2dTZXJ2aWNlIHtcbiAgICBsZXQgbG9nZ2VyOiBMb2dTZXJ2aWNlIHwgdW5kZWZpbmVkID0gdGhpcy5fbWFwLmdldChuYW1lKTtcbiAgICBpZiAoIWxvZ2dlcikge1xuICAgICAgbG9nZ2VyID0gbmV3IExvZ1NlcnZpY2UoKTtcbiAgICAgIGxvZ2dlci5uYW1lID0gbmFtZTtcbiAgICAgIHRoaXMuX21hcC5zZXQobmFtZSwgbG9nZ2VyKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2dlcjtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hCdWZmZXIoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2J1ZmZlci5zcGxpY2UoMCk7XG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gXCJbXCJcbiAgICAgICAgICAgICAgICAgICsgZGF0YVxuICAgICAgICAgICAgICAgICAgICAubWFwKChlbnRyeSkgPT4gdGhpcy5idWlsZExvZ1N0cmluZyhlbnRyeSkpXG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGpzb24sIGVudHJ5KSA9PiAoanNvbiArPSBlbnRyeSArIFwiLFwiKSwgJycpXG4gICAgICAgICAgICAgICAgICArIFwiXVwiO1xuXG4gICAgY29uc3QgeG9iaiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhvYmoub25lcnJvciA9IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB4b2JqLm9wZW4oJ1BPU1QnLCB0aGlzLnNlcnZlckVuZFBvaW50ISwgdHJ1ZSk7XG4gICAgeG9iai5zZW5kKGJvZHkpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRMb2dTdHJpbmcoZW50cnk6IExvZ0VudHJ5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZW50cnkpO1xuICB9XG5cbiAgZGVidWcobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2dNZXNzYWdlKExvZ0xldmVsLkRFQlVHLCBtZXNzYWdlKTtcbiAgfVxuXG4gIGxvZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvZ01lc3NhZ2UoTG9nTGV2ZWwuTE9HLCBtZXNzYWdlKTtcbiAgfVxuXG4gIGluZm8obWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2dNZXNzYWdlKExvZ0xldmVsLklORk8sIG1lc3NhZ2UpO1xuICB9XG5cbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvZ01lc3NhZ2UoTG9nTGV2ZWwuV0FSTiwgbWVzc2FnZSk7XG4gIH1cblxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvZ01lc3NhZ2UoTG9nTGV2ZWwuRVJST1IsIG1lc3NhZ2UpO1xuICB9XG5cbiAgZmF0YWwobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2dNZXNzYWdlKExvZ0xldmVsLkZBVEFMLCBtZXNzYWdlKTtcbiAgfVxuXG4gIGxvZ01lc3NhZ2UobGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLl9kYXRlRm9ybWF0LmZvcm1hdChEYXRlLm5vdygpKTtcbiAgICBpZiAodGhpcy51c2VTZXJ2ZXIgJiYgdGhpcy5zZXJ2ZXJFbmRQb2ludCkge1xuICAgICAgaWYgKGxldmVsID49IHRoaXMuc2VydmVyTG9nTGV2ZWwpIHtcbiAgICAgICAgdGhpcy5fYnVmZmVyLnB1c2goeyB0aW1lc3RhbXAsIGxldmVsLCBtZXNzYWdlIH0pO1xuICAgICAgICB0aGlzLl9mbHVzaC5uZXh0KExvZ2dlckV2ZW50cy5GbHVzaCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsZXZlbCA+PSB0aGlzLmxvZ0xldmVsKSB7XG4gICAgICBjb25zdCBtc2cgPSBgJHt0aW1lc3RhbXB9ICR7dGhpcy5uYW1lfSAke0xvZ0xldmVsW2xldmVsXX06ICR7bWVzc2FnZX1gO1xuICAgICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgICBjYXNlIExvZ0xldmVsLkRFQlVHOiAgY29uc29sZS5kZWJ1Zyhtc2cpOyBicmVhaztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5JTkZPOiAgIGNvbnNvbGUuaW5mbyhtc2cpOyAgYnJlYWs7XG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuV0FSTjogICBjb25zb2xlLndhcm4obXNnKTsgIGJyZWFrO1xuICAgICAgICBjYXNlIExvZ0xldmVsLkVSUk9SOlxuICAgICAgICBjYXNlIExvZ0xldmVsLkZBVEFMOiAgY29uc29sZS5lcnJvcihtc2cpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxufVxuIl19