{"ast":null,"code":"/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n\n return r;\n}\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\n\n\nvar _a;\n/**\r\n * A container for all of the Logger instances\r\n */\n\n\nvar instances = [];\n/**\r\n * The JS SDK supports 5 log levels and also allows a user the ability to\r\n * silence the logs altogether.\r\n *\r\n * The order is a follows:\r\n * DEBUG < VERBOSE < INFO < WARN < ERROR\r\n *\r\n * All of the log types above the current log level will be captured (i.e. if\r\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\r\n * `VERBOSE` logs will not)\r\n */\n\nvar LogLevel;\n\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\n})(LogLevel || (LogLevel = {}));\n\nvar levelStringToEnum = {\n 'debug': LogLevel.DEBUG,\n 'verbose': LogLevel.VERBOSE,\n 'info': LogLevel.INFO,\n 'warn': LogLevel.WARN,\n 'error': LogLevel.ERROR,\n 'silent': LogLevel.SILENT\n};\n/**\r\n * The default log level\r\n */\n\nvar defaultLogLevel = LogLevel.INFO;\n/**\r\n * By default, `console.debug` is not displayed in the developer console (in\r\n * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n * logs to the `console.log` function.\r\n */\n\nvar ConsoleMethod = (_a = {}, _a[LogLevel.DEBUG] = 'log', _a[LogLevel.VERBOSE] = 'log', _a[LogLevel.INFO] = 'info', _a[LogLevel.WARN] = 'warn', _a[LogLevel.ERROR] = 'error', _a);\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\n\nvar defaultLogHandler = function (instance, logType) {\n var args = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n\n if (logType < instance.logLevel) {\n return;\n }\n\n var now = new Date().toISOString();\n var method = ConsoleMethod[logType];\n\n if (method) {\n console[method].apply(console, __spreadArrays([\"[\" + now + \"] \" + instance.name + \":\"], args));\n } else {\n throw new Error(\"Attempted to log a message with an invalid logType (value: \" + logType + \")\");\n }\n};\n\nvar Logger =\n/** @class */\nfunction () {\n /**\r\n * Gives you an instance of a Logger to capture messages according to\r\n * Firebase's logging scheme.\r\n *\r\n * @param name The name that the logs will be associated with\r\n */\n function Logger(name) {\n this.name = name;\n /**\r\n * The log level of the given Logger instance.\r\n */\n\n this._logLevel = defaultLogLevel;\n /**\r\n * The main (internal) log handler for the Logger instance.\r\n * Can be set to a new function in internal package code but not by user.\r\n */\n\n this._logHandler = defaultLogHandler;\n /**\r\n * The optional, additional, user-defined log handler for the Logger instance.\r\n */\n\n this._userLogHandler = null;\n /**\r\n * Capture the current instance for later use\r\n */\n\n instances.push(this);\n }\n\n Object.defineProperty(Logger.prototype, \"logLevel\", {\n get: function () {\n return this._logLevel;\n },\n set: function (val) {\n if (!(val in LogLevel)) {\n throw new TypeError(\"Invalid value \\\"\" + val + \"\\\" assigned to `logLevel`\");\n }\n\n this._logLevel = val;\n },\n enumerable: false,\n configurable: true\n }); // Workaround for setter/getter having to be the same type.\n\n Logger.prototype.setLogLevel = function (val) {\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\n };\n\n Object.defineProperty(Logger.prototype, \"logHandler\", {\n get: function () {\n return this._logHandler;\n },\n set: function (val) {\n if (typeof val !== 'function') {\n throw new TypeError('Value assigned to `logHandler` must be a function');\n }\n\n this._logHandler = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Logger.prototype, \"userLogHandler\", {\n get: function () {\n return this._userLogHandler;\n },\n set: function (val) {\n this._userLogHandler = val;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * The functions below are all based on the `console` interface\r\n */\n\n Logger.prototype.debug = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n this._userLogHandler && this._userLogHandler.apply(this, __spreadArrays([this, LogLevel.DEBUG], args));\n\n this._logHandler.apply(this, __spreadArrays([this, LogLevel.DEBUG], args));\n };\n\n Logger.prototype.log = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n this._userLogHandler && this._userLogHandler.apply(this, __spreadArrays([this, LogLevel.VERBOSE], args));\n\n this._logHandler.apply(this, __spreadArrays([this, LogLevel.VERBOSE], args));\n };\n\n Logger.prototype.info = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n this._userLogHandler && this._userLogHandler.apply(this, __spreadArrays([this, LogLevel.INFO], args));\n\n this._logHandler.apply(this, __spreadArrays([this, LogLevel.INFO], args));\n };\n\n Logger.prototype.warn = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n this._userLogHandler && this._userLogHandler.apply(this, __spreadArrays([this, LogLevel.WARN], args));\n\n this._logHandler.apply(this, __spreadArrays([this, LogLevel.WARN], args));\n };\n\n Logger.prototype.error = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n this._userLogHandler && this._userLogHandler.apply(this, __spreadArrays([this, LogLevel.ERROR], args));\n\n this._logHandler.apply(this, __spreadArrays([this, LogLevel.ERROR], args));\n };\n\n return Logger;\n}();\n\nfunction setLogLevel(level) {\n instances.forEach(function (inst) {\n inst.setLogLevel(level);\n });\n}\n\nfunction setUserLogHandler(logCallback, options) {\n var _loop_1 = function (instance) {\n var customLogLevel = null;\n\n if (options && options.level) {\n customLogLevel = levelStringToEnum[options.level];\n }\n\n if (logCallback === null) {\n instance.userLogHandler = null;\n } else {\n instance.userLogHandler = function (instance, level) {\n var args = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n\n var message = args.map(function (arg) {\n if (arg == null) {\n return null;\n } else if (typeof arg === 'string') {\n return arg;\n } else if (typeof arg === 'number' || typeof arg === 'boolean') {\n return arg.toString();\n } else if (arg instanceof Error) {\n return arg.message;\n } else {\n try {\n return JSON.stringify(arg);\n } catch (ignored) {\n return null;\n }\n }\n }).filter(function (arg) {\n return arg;\n }).join(' ');\n\n if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\n logCallback({\n level: LogLevel[level].toLowerCase(),\n message: message,\n args: args,\n type: instance.name\n });\n }\n };\n }\n };\n\n for (var _i = 0, instances_1 = instances; _i < instances_1.length; _i++) {\n var instance = instances_1[_i];\n\n _loop_1(instance);\n }\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };","map":{"version":3,"sources":["../src/logger.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type LogLevelString =\n | 'debug'\n | 'verbose'\n | 'info'\n | 'warn'\n | 'error'\n | 'silent';\n\nexport interface LogOptions {\n level: LogLevelString;\n}\n\nexport type LogCallback = (callbackParams: LogCallbackParams) => void;\n\nexport interface LogCallbackParams {\n level: LogLevelString;\n message: string;\n args: unknown[];\n type: string;\n}\n\n/**\n * A container for all of the Logger instances\n */\nexport const instances: Logger[] = [];\n\n/**\n * The JS SDK supports 5 log levels and also allows a user the ability to\n * silence the logs altogether.\n *\n * The order is a follows:\n * DEBUG < VERBOSE < INFO < WARN < ERROR\n *\n * All of the log types above the current log level will be captured (i.e. if\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\n * `VERBOSE` logs will not)\n */\nexport enum LogLevel {\n DEBUG,\n VERBOSE,\n INFO,\n WARN,\n ERROR,\n SILENT\n}\n\nconst levelStringToEnum: { [key in LogLevelString]: LogLevel } = {\n 'debug': LogLevel.DEBUG,\n 'verbose': LogLevel.VERBOSE,\n 'info': LogLevel.INFO,\n 'warn': LogLevel.WARN,\n 'error': LogLevel.ERROR,\n 'silent': LogLevel.SILENT\n};\n\n/**\n * The default log level\n */\nconst defaultLogLevel: LogLevel = LogLevel.INFO;\n\n/**\n * We allow users the ability to pass their own log handler. We will pass the\n * type of log, the current log level, and any other arguments passed (i.e. the\n * messages that the user wants to log) to this function.\n */\nexport type LogHandler = (\n loggerInstance: Logger,\n logType: LogLevel,\n ...args: unknown[]\n) => void;\n\n/**\n * By default, `console.debug` is not displayed in the developer console (in\n * chrome). To avoid forcing users to have to opt-in to these logs twice\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\n * logs to the `console.log` function.\n */\nconst ConsoleMethod = {\n [LogLevel.DEBUG]: 'log',\n [LogLevel.VERBOSE]: 'log',\n [LogLevel.INFO]: 'info',\n [LogLevel.WARN]: 'warn',\n [LogLevel.ERROR]: 'error'\n};\n\n/**\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\n * messages on to their corresponding console counterparts (if the log method\n * is supported by the current log level)\n */\nconst defaultLogHandler: LogHandler = (instance, logType, ...args): void => {\n if (logType < instance.logLevel) {\n return;\n }\n const now = new Date().toISOString();\n const method = ConsoleMethod[logType as keyof typeof ConsoleMethod];\n if (method) {\n console[method as 'log' | 'info' | 'warn' | 'error'](\n `[${now}] ${instance.name}:`,\n ...args\n );\n } else {\n throw new Error(\n `Attempted to log a message with an invalid logType (value: ${logType})`\n );\n }\n};\n\nexport class Logger {\n /**\n * Gives you an instance of a Logger to capture messages according to\n * Firebase's logging scheme.\n *\n * @param name The name that the logs will be associated with\n */\n constructor(public name: string) {\n /**\n * Capture the current instance for later use\n */\n instances.push(this);\n }\n\n /**\n * The log level of the given Logger instance.\n */\n private _logLevel = defaultLogLevel;\n\n get logLevel(): LogLevel {\n return this._logLevel;\n }\n\n set logLevel(val: LogLevel) {\n if (!(val in LogLevel)) {\n throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\n }\n this._logLevel = val;\n }\n\n // Workaround for setter/getter having to be the same type.\n setLogLevel(val: LogLevel | LogLevelString): void {\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\n }\n\n /**\n * The main (internal) log handler for the Logger instance.\n * Can be set to a new function in internal package code but not by user.\n */\n private _logHandler: LogHandler = defaultLogHandler;\n get logHandler(): LogHandler {\n return this._logHandler;\n }\n set logHandler(val: LogHandler) {\n if (typeof val !== 'function') {\n throw new TypeError('Value assigned to `logHandler` must be a function');\n }\n this._logHandler = val;\n }\n\n /**\n * The optional, additional, user-defined log handler for the Logger instance.\n */\n private _userLogHandler: LogHandler | null = null;\n get userLogHandler(): LogHandler | null {\n return this._userLogHandler;\n }\n set userLogHandler(val: LogHandler | null) {\n this._userLogHandler = val;\n }\n\n /**\n * The functions below are all based on the `console` interface\n */\n\n debug(...args: unknown[]): void {\n this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\n this._logHandler(this, LogLevel.DEBUG, ...args);\n }\n log(...args: unknown[]): void {\n this._userLogHandler &&\n this._userLogHandler(this, LogLevel.VERBOSE, ...args);\n this._logHandler(this, LogLevel.VERBOSE, ...args);\n }\n info(...args: unknown[]): void {\n this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\n this._logHandler(this, LogLevel.INFO, ...args);\n }\n warn(...args: unknown[]): void {\n this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\n this._logHandler(this, LogLevel.WARN, ...args);\n }\n error(...args: unknown[]): void {\n this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\n this._logHandler(this, LogLevel.ERROR, ...args);\n }\n}\n\nexport function setLogLevel(level: LogLevelString | LogLevel): void {\n instances.forEach(inst => {\n inst.setLogLevel(level);\n });\n}\n\nexport function setUserLogHandler(\n logCallback: LogCallback | null,\n options?: LogOptions\n): void {\n for (const instance of instances) {\n let customLogLevel: LogLevel | null = null;\n if (options && options.level) {\n customLogLevel = levelStringToEnum[options.level];\n }\n if (logCallback === null) {\n instance.userLogHandler = null;\n } else {\n instance.userLogHandler = (\n instance: Logger,\n level: LogLevel,\n ...args: unknown[]\n ) => {\n const message = args\n .map(arg => {\n if (arg == null) {\n return null;\n } else if (typeof arg === 'string') {\n return arg;\n } else if (typeof arg === 'number' || typeof arg === 'boolean') {\n return arg.toString();\n } else if (arg instanceof Error) {\n return arg.message;\n } else {\n try {\n return JSON.stringify(arg);\n } catch (ignored) {\n return null;\n }\n }\n })\n .filter(arg => arg)\n .join(' ');\n if (level >= (customLogLevel ?? instance.logLevel)) {\n logCallback({\n level: LogLevel[level].toLowerCase() as LogLevelString,\n message,\n args,\n type: instance.name\n });\n }\n };\n }\n }\n}\n"]},"metadata":{},"sourceType":"module"}