{"version":3,"sources":["src/common.browser/ConsoleLoggingListener.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrE,qBAAa,sBAAuB,YAAW,cAAc,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,kBAAkB,CAAW;IACrC,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,uBAAuB,CAAiB;IAEzC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;gBAErB,cAAc,GAAE,QAAwB;IAI3D,IAAW,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAGnC;IAED,IAAW,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAEnD;IAEM,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAqC1C,OAAO,CAAC,QAAQ;CA8BnB","file":"ConsoleLoggingListener.d.ts","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport * as fs from \"fs\";\r\nimport { LogLevel } from \"../sdk/LogLevel.js\";\r\nimport { IEventListener, PlatformEvent } from \"../common/Exports.js\";\r\nimport { Contracts } from \"../sdk/Contracts.js\";\r\n\r\nexport class ConsoleLoggingListener implements IEventListener<PlatformEvent> {\r\n    private privLogLevelFilter: LogLevel;\r\n    private privLogPath: fs.PathLike = undefined;\r\n    private privEnableConsoleOutput: boolean = true;\r\n\r\n    public logCallback: (s: string) => void;\r\n\r\n    public constructor(logLevelFilter: LogLevel = LogLevel.None) { // Console output disabled by default\r\n        this.privLogLevelFilter = logLevelFilter;\r\n    }\r\n\r\n    public set logPath(path: fs.PathLike) {\r\n        Contracts.throwIfNullOrUndefined(fs.openSync, \"\\nFile System access not available\");\r\n        this.privLogPath = path;\r\n    }\r\n\r\n    public set enableConsoleOutput(enableOutput: boolean) {\r\n        this.privEnableConsoleOutput = enableOutput;\r\n    }\r\n\r\n    public onEvent(event: PlatformEvent): void {\r\n        if (event.eventType >= this.privLogLevelFilter) {\r\n            const log = this.toString(event);\r\n            if (!!this.logCallback) {\r\n                this.logCallback(log);\r\n            }\r\n            if (!!this.privLogPath) {\r\n                fs.writeFileSync(this.privLogPath, log + \"\\n\", { flag: \"a+\" });\r\n            }\r\n\r\n            if (this.privEnableConsoleOutput) {\r\n                switch (event.eventType) {\r\n                    case LogLevel.Debug:\r\n                        // eslint-disable-next-line no-console\r\n                        console.debug(log);\r\n                        break;\r\n                    case LogLevel.Info:\r\n                        // eslint-disable-next-line no-console\r\n                        console.info(log);\r\n                        break;\r\n                    case LogLevel.Warning:\r\n                        // eslint-disable-next-line no-console\r\n                        console.warn(log);\r\n                        break;\r\n                    case LogLevel.Error:\r\n                        // eslint-disable-next-line no-console\r\n                        console.error(log);\r\n                        break;\r\n                    default:\r\n                        // eslint-disable-next-line no-console\r\n                        console.log(log);\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private toString(event: PlatformEvent): string {\r\n        const logFragments = [\r\n            `${event.eventTime}`,\r\n            `${event.name}`,\r\n        ];\r\n\r\n        const e: any = event as any;\r\n        for (const prop in e) {\r\n            if (prop && event.hasOwnProperty(prop) &&\r\n                prop !== \"eventTime\" && prop !== \"eventType\" &&\r\n                prop !== \"eventId\" && prop !== \"name\" &&\r\n                prop !== \"constructor\") {\r\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\r\n                const value = e[prop];\r\n                let valueToLog = \"<NULL>\";\r\n                if (value !== undefined && value !== null) {\r\n                    if (typeof (value) === \"number\" || typeof (value) === \"string\") {\r\n                        valueToLog = value.toString();\r\n                    } else {\r\n                        valueToLog = JSON.stringify(value);\r\n                    }\r\n                }\r\n\r\n                logFragments.push(`${prop}: ${valueToLog}`);\r\n            }\r\n\r\n        }\r\n\r\n        return logFragments.join(\" | \");\r\n    }\r\n}\r\n"]}