text: 'use strict';
  
  Object.defineProperty(exports, '__esModule', { value: true });
  
  /**
   * @license
   * Copyright 2017 Google Inc.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  /**
   * A container for all of the Logger instances
   */
  var instances = [];
  (function (LogLevel) {
      LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
      LogLevel[LogLevel["VERBOSE"] = 1] = "VERBOSE";
      LogLevel[LogLevel["INFO"] = 2] = "INFO";
      LogLevel[LogLevel["WARN"] = 3] = "WARN";
      LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
      LogLevel[LogLevel["SILENT"] = 5] = "SILENT";
  })(exports.LogLevel || (exports.LogLevel = {}));
  /**
   * The default log level
   */
  var defaultLogLevel = exports.LogLevel.INFO;
  /**
   * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR
   * messages on to their corresponding console counterparts (if the log method
   * is supported by the current log level)
   */
  var defaultLogHandler = function (instance, logType) {
      var args = [];
      for (var _i = 2; _i < arguments.length; _i++) {
          args[_i - 2] = arguments[_i];
      }
      if (logType < instance.logLevel)
          return;
      var now = new Date().toISOString();
      switch (logType) {
          /**
           * By default, `console.debug` is not displayed in the developer console (in
           * chrome). To avoid forcing users to have to opt-in to these logs twice
           * (i.e. once for firebase, and once in the console), we are sending `DEBUG`
           * logs to the `console.log` function.
           */
          case exports.LogLevel.DEBUG:
              console.log.apply(console, ["[" + now + "]  " + instance.name + ":"].concat(args));
              break;
          case exports.LogLevel.VERBOSE:
              console.log.apply(console, ["[" + now + "]  " + instance.name + ":"].concat(args));
              break;
          case exports.LogLevel.INFO:
              console.info.apply(console, ["[" + now + "]  " + instance.name + ":"].concat(args));
              break;
          case exports.LogLevel.WARN:
              console.warn.apply(console, ["[" + now + "]  " + instance.name + ":"].concat(args));
              break;
          case exports.LogLevel.ERROR:
              console.error.apply(console, ["[" + now + "]  " + instance.name + ":"].concat(args));
              break;
          default:
              throw new Error("Attempted to log a message with an invalid logType (value: " + logType + ")");
      }
  };
  var Logger = /** @class */ (function () {
      /**
       * Gives you an instance of a Logger to capture messages according to
       * Firebase's logging scheme.
       *
       * @param name The name that the logs will be associated with
       */
      function Logger(name) {
          this.name = name;
          /**
           * The log level of the given Logger instance.
           */
          this._logLevel = defaultLogLevel;
          /**
           * The log handler for the Logger instance.
           */
          this._logHandler = defaultLogHandler;
          /**
           * Capture the current instance for later use
           */
          instances.push(this);
      }
      Object.defineProperty(Logger.prototype, "logLevel", {
          get: function () {
              return this._logLevel;
          },
          set: function (val) {
              if (!(val in exports.LogLevel)) {
                  throw new TypeError('Invalid value assigned to `logLevel`');
              }
              this._logLevel = val;
          },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(Logger.prototype, "logHandler", {
          get: function () {
              return this._logHandler;
          },
          set: function (val) {
              if (typeof val !== 'function') {
                  throw new TypeError('Value assigned to `logHandler` must be a function');
              }
              this._logHandler = val;
          },
          enumerable: true,
          configurable: true
      });
      /**
       * The functions below are all based on the `console` interface
       */
      Logger.prototype.debug = function () {
          var args = [];
          for (var _i = 0; _i < arguments.length; _i++) {
              args[_i] = arguments[_i];
          }
          this._logHandler.apply(this, [this, exports.LogLevel.DEBUG].concat(args));
      };
      Logger.prototype.log = function () {
          var args = [];
          for (var _i = 0; _i < arguments.length; _i++) {
              args[_i] = arguments[_i];
          }
          this._logHandler.apply(this, [this, exports.LogLevel.VERBOSE].concat(args));
      };
      Logger.prototype.info = function () {
          var args = [];
          for (var _i = 0; _i < arguments.length; _i++) {
              args[_i] = arguments[_i];
          }
          this._logHandler.apply(this, [this, exports.LogLevel.INFO].concat(args));
      };
      Logger.prototype.warn = function () {
          var args = [];
          for (var _i = 0; _i < arguments.length; _i++) {
              args[_i] = arguments[_i];
          }
          this._logHandler.apply(this, [this, exports.LogLevel.WARN].concat(args));
      };
      Logger.prototype.error = function () {
          var args = [];
          for (var _i = 0; _i < arguments.length; _i++) {
              args[_i] = arguments[_i];
          }
          this._logHandler.apply(this, [this, exports.LogLevel.ERROR].concat(args));
      };
      return Logger;
  }());
  
  /**
   * @license
   * Copyright 2017 Google Inc.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  function setLogLevel(level) {
      instances.forEach(function (inst) {
          inst.logLevel = level;
      });
  }
  
  exports.setLogLevel = setLogLevel;
  exports.Logger = Logger;
  