{"ast":null,"code":"/* eslint-disable complexity,max-statements */\n\n/**\n * file.js: Transport for outputting to a local log file.\n *\n * (C) 2010 Charlie Robbins\n * MIT LICENCE\n */\n'use strict';\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _createSuper(Derived) {\n  var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n  return function _createSuperInternal() {\n    var Super = _getPrototypeOf(Derived),\n        result;\n\n    if (hasNativeReflectConstruct) {\n      var NewTarget = _getPrototypeOf(this).constructor;\n\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return _possibleConstructorReturn(this, result);\n  };\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nvar fs = require('fs');\n\nvar path = require('path');\n\nvar asyncSeries = require('async/series');\n\nvar zlib = require('zlib');\n\nvar _require = require('triple-beam'),\n    MESSAGE = _require.MESSAGE;\n\nvar _require2 = require('readable-stream'),\n    Stream = _require2.Stream,\n    PassThrough = _require2.PassThrough;\n\nvar TransportStream = require('winston-transport');\n\nvar debug = require('@dabh/diagnostics')('winston:file');\n\nvar os = require('os');\n\nvar tailFile = require('../tail-file');\n/**\n * Transport for outputting to a local log file.\n * @type {File}\n * @extends {TransportStream}\n */\n\n\nmodule.exports = /*#__PURE__*/function (_TransportStream) {\n  _inherits(File, _TransportStream);\n\n  var _super = _createSuper(File);\n  /**\n   * Constructor function for the File transport object responsible for\n   * persisting log messages and metadata to one or more files.\n   * @param {Object} options - Options for this instance.\n   */\n\n\n  function File() {\n    var _this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, File);\n\n    _this = _super.call(this, options); // Expose the name of this Transport on the prototype.\n\n    _this.name = options.name || 'file'; // Helper function which throws an `Error` in the event that any of the\n    // rest of the arguments is present in `options`.\n\n    function throwIf(target) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      args.slice(1).forEach(function (name) {\n        if (options[name]) {\n          throw new Error(\"Cannot set \".concat(name, \" and \").concat(target, \" together\"));\n        }\n      });\n    } // Setup the base stream that always gets piped to to handle buffering.\n\n\n    _this._stream = new PassThrough();\n\n    _this._stream.setMaxListeners(30); // Bind this context for listener methods.\n\n\n    _this._onError = _this._onError.bind(_assertThisInitialized(_this));\n\n    if (options.filename || options.dirname) {\n      throwIf('filename or dirname', 'stream');\n      _this._basename = _this.filename = options.filename ? path.basename(options.filename) : 'winston.log';\n      _this.dirname = options.dirname || path.dirname(options.filename);\n      _this.options = options.options || {\n        flags: 'a'\n      };\n    } else if (options.stream) {\n      // eslint-disable-next-line no-console\n      console.warn('options.stream will be removed in winston@4. Use winston.transports.Stream');\n      throwIf('stream', 'filename', 'maxsize');\n      _this._dest = _this._stream.pipe(_this._setupStream(options.stream));\n      _this.dirname = path.dirname(_this._dest.path); // We need to listen for drain events when write() returns false. This\n      // can make node mad at times.\n    } else {\n      throw new Error('Cannot log to file without filename or stream.');\n    }\n\n    _this.maxsize = options.maxsize || null;\n    _this.rotationFormat = options.rotationFormat || false;\n    _this.zippedArchive = options.zippedArchive || false;\n    _this.maxFiles = options.maxFiles || null;\n    _this.eol = options.eol || os.EOL;\n    _this.tailable = options.tailable || false; // Internal state variables representing the number of files this instance\n    // has created and the current size (in bytes) of the current logfile.\n\n    _this._size = 0;\n    _this._pendingSize = 0;\n    _this._created = 0;\n    _this._drain = false;\n    _this._opening = false;\n    _this._ending = false;\n    if (_this.dirname) _this._createLogDirIfNotExist(_this.dirname);\n\n    _this.open();\n\n    return _this;\n  }\n\n  _createClass(File, [{\n    key: \"finishIfEnding\",\n    value: function finishIfEnding() {\n      var _this2 = this;\n\n      if (this._ending) {\n        if (this._opening) {\n          this.once('open', function () {\n            _this2._stream.once('finish', function () {\n              return _this2.emit('finish');\n            });\n\n            setImmediate(function () {\n              return _this2._stream.end();\n            });\n          });\n        } else {\n          this._stream.once('finish', function () {\n            return _this2.emit('finish');\n          });\n\n          setImmediate(function () {\n            return _this2._stream.end();\n          });\n        }\n      }\n    }\n    /**\n     * Core logging method exposed to Winston. Metadata is optional.\n     * @param {Object} info - TODO: add param description.\n     * @param {Function} callback - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"log\",\n    value: function log(info) {\n      var _this3 = this;\n\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; // Remark: (jcrugzz) What is necessary about this callback(null, true) now\n      // when thinking about 3.x? Should silent be handled in the base\n      // TransportStream _write method?\n\n      if (this.silent) {\n        callback();\n        return true;\n      } // Output stream buffer is full and has asked us to wait for the drain event\n\n\n      if (this._drain) {\n        this._stream.once('drain', function () {\n          _this3._drain = false;\n\n          _this3.log(info, callback);\n        });\n\n        return;\n      }\n\n      if (this._rotate) {\n        this._stream.once('rotate', function () {\n          _this3._rotate = false;\n\n          _this3.log(info, callback);\n        });\n\n        return;\n      } // Grab the raw string and append the expected EOL.\n\n\n      var output = \"\".concat(info[MESSAGE]).concat(this.eol);\n      var bytes = Buffer.byteLength(output); // After we have written to the PassThrough check to see if we need\n      // to rotate to the next file.\n      //\n      // Remark: This gets called too early and does not depict when data\n      // has been actually flushed to disk.\n\n      function logged() {\n        var _this4 = this;\n\n        this._size += bytes;\n        this._pendingSize -= bytes;\n        debug('logged %s %s', this._size, output);\n        this.emit('logged', info); // Do not attempt to rotate files while opening\n\n        if (this._opening) {\n          return;\n        } // Check to see if we need to end the stream and create a new one.\n\n\n        if (!this._needsNewFile()) {\n          return;\n        } // End the current stream, ensure it flushes and create a new one.\n        // This could potentially be optimized to not run a stat call but its\n        // the safest way since we are supporting `maxFiles`.\n\n\n        this._rotate = true;\n\n        this._endStream(function () {\n          return _this4._rotateFile();\n        });\n      } // Keep track of the pending bytes being written while files are opening\n      // in order to properly rotate the PassThrough this._stream when the file\n      // eventually does open.\n\n\n      this._pendingSize += bytes;\n\n      if (this._opening && !this.rotatedWhileOpening && this._needsNewFile(this._size + this._pendingSize)) {\n        this.rotatedWhileOpening = true;\n      }\n\n      var written = this._stream.write(output, logged.bind(this));\n\n      if (!written) {\n        this._drain = true;\n\n        this._stream.once('drain', function () {\n          _this3._drain = false;\n          callback();\n        });\n      } else {\n        callback(); // eslint-disable-line callback-return\n      }\n\n      debug('written', written, this._drain);\n      this.finishIfEnding();\n      return written;\n    }\n    /**\n     * Query the transport. Options object is optional.\n     * @param {Object} options - Loggly-like query options for this instance.\n     * @param {function} callback - Continuation to respond to when complete.\n     * TODO: Refactor me.\n     */\n\n  }, {\n    key: \"query\",\n    value: function query(options, callback) {\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n\n      options = normalizeQuery(options);\n      var file = path.join(this.dirname, this.filename);\n      var buff = '';\n      var results = [];\n      var row = 0;\n      var stream = fs.createReadStream(file, {\n        encoding: 'utf8'\n      });\n      stream.on('error', function (err) {\n        if (stream.readable) {\n          stream.destroy();\n        }\n\n        if (!callback) {\n          return;\n        }\n\n        return err.code !== 'ENOENT' ? callback(err) : callback(null, results);\n      });\n      stream.on('data', function (data) {\n        data = (buff + data).split(/\\n+/);\n        var l = data.length - 1;\n        var i = 0;\n\n        for (; i < l; i++) {\n          if (!options.start || row >= options.start) {\n            add(data[i]);\n          }\n\n          row++;\n        }\n\n        buff = data[l];\n      });\n      stream.on('close', function () {\n        if (buff) {\n          add(buff, true);\n        }\n\n        if (options.order === 'desc') {\n          results = results.reverse();\n        } // eslint-disable-next-line callback-return\n\n\n        if (callback) callback(null, results);\n      });\n\n      function add(buff, attempt) {\n        try {\n          var log = JSON.parse(buff);\n\n          if (check(log)) {\n            push(log);\n          }\n        } catch (e) {\n          if (!attempt) {\n            stream.emit('error', e);\n          }\n        }\n      }\n\n      function push(log) {\n        if (options.rows && results.length >= options.rows && options.order !== 'desc') {\n          if (stream.readable) {\n            stream.destroy();\n          }\n\n          return;\n        }\n\n        if (options.fields) {\n          log = options.fields.reduce(function (obj, key) {\n            obj[key] = log[key];\n            return obj;\n          }, {});\n        }\n\n        if (options.order === 'desc') {\n          if (results.length >= options.rows) {\n            results.shift();\n          }\n        }\n\n        results.push(log);\n      }\n\n      function check(log) {\n        if (!log) {\n          return;\n        }\n\n        if (_typeof(log) !== 'object') {\n          return;\n        }\n\n        var time = new Date(log.timestamp);\n\n        if (options.from && time < options.from || options.until && time > options.until || options.level && options.level !== log.level) {\n          return;\n        }\n\n        return true;\n      }\n\n      function normalizeQuery(options) {\n        options = options || {}; // limit\n\n        options.rows = options.rows || options.limit || 10; // starting row offset\n\n        options.start = options.start || 0; // now\n\n        options.until = options.until || new Date();\n\n        if (_typeof(options.until) !== 'object') {\n          options.until = new Date(options.until);\n        } // now - 24\n\n\n        options.from = options.from || options.until - 24 * 60 * 60 * 1000;\n\n        if (_typeof(options.from) !== 'object') {\n          options.from = new Date(options.from);\n        } // 'asc' or 'desc'\n\n\n        options.order = options.order || 'desc';\n        return options;\n      }\n    }\n    /**\n     * Returns a log stream for this transport. Options object is optional.\n     * @param {Object} options - Stream options for this instance.\n     * @returns {Stream} - TODO: add return description.\n     * TODO: Refactor me.\n     */\n\n  }, {\n    key: \"stream\",\n    value: function stream() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var file = path.join(this.dirname, this.filename);\n      var stream = new Stream();\n      var tail = {\n        file: file,\n        start: options.start\n      };\n      stream.destroy = tailFile(tail, function (err, line) {\n        if (err) {\n          return stream.emit('error', err);\n        }\n\n        try {\n          stream.emit('data', line);\n          line = JSON.parse(line);\n          stream.emit('log', line);\n        } catch (e) {\n          stream.emit('error', e);\n        }\n      });\n      return stream;\n    }\n    /**\n     * Checks to see the filesize of.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"open\",\n    value: function open() {\n      var _this5 = this; // If we do not have a filename then we were passed a stream and\n      // don't need to keep track of size.\n\n\n      if (!this.filename) return;\n      if (this._opening) return;\n      this._opening = true; // Stat the target file to get the size and create the stream.\n\n      this.stat(function (err, size) {\n        if (err) {\n          return _this5.emit('error', err);\n        }\n\n        debug('stat done: %s { size: %s }', _this5.filename, size);\n        _this5._size = size;\n        _this5._dest = _this5._createStream(_this5._stream);\n        _this5._opening = false;\n\n        _this5.once('open', function () {\n          if (_this5._stream.eventNames().includes('rotate')) {\n            _this5._stream.emit('rotate');\n          } else {\n            _this5._rotate = false;\n          }\n        });\n      });\n    }\n    /**\n     * Stat the file and assess information in order to create the proper stream.\n     * @param {function} callback - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"stat\",\n    value: function stat(callback) {\n      var _this6 = this;\n\n      var target = this._getFile();\n\n      var fullpath = path.join(this.dirname, target);\n      fs.stat(fullpath, function (err, stat) {\n        if (err && err.code === 'ENOENT') {\n          debug('ENOENT ok', fullpath); // Update internally tracked filename with the new target name.\n\n          _this6.filename = target;\n          return callback(null, 0);\n        }\n\n        if (err) {\n          debug(\"err \".concat(err.code, \" \").concat(fullpath));\n          return callback(err);\n        }\n\n        if (!stat || _this6._needsNewFile(stat.size)) {\n          // If `stats.size` is greater than the `maxsize` for this\n          // instance then try again.\n          return _this6._incFile(function () {\n            return _this6.stat(callback);\n          });\n        } // Once we have figured out what the filename is, set it\n        // and return the size.\n\n\n        _this6.filename = target;\n        callback(null, stat.size);\n      });\n    }\n    /**\n     * Closes the stream associated with this instance.\n     * @param {function} cb - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"close\",\n    value: function close(cb) {\n      var _this7 = this;\n\n      if (!this._stream) {\n        return;\n      }\n\n      this._stream.end(function () {\n        if (cb) {\n          cb(); // eslint-disable-line callback-return\n        }\n\n        _this7.emit('flush');\n\n        _this7.emit('closed');\n      });\n    }\n    /**\n     * TODO: add method description.\n     * @param {number} size - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"_needsNewFile\",\n    value: function _needsNewFile(size) {\n      size = size || this._size;\n      return this.maxsize && size >= this.maxsize;\n    }\n    /**\n     * TODO: add method description.\n     * @param {Error} err - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"_onError\",\n    value: function _onError(err) {\n      this.emit('error', err);\n    }\n    /**\n     * TODO: add method description.\n     * @param {Stream} stream - TODO: add param description.\n     * @returns {mixed} - TODO: add return description.\n     */\n\n  }, {\n    key: \"_setupStream\",\n    value: function _setupStream(stream) {\n      stream.on('error', this._onError);\n      return stream;\n    }\n    /**\n     * TODO: add method description.\n     * @param {Stream} stream - TODO: add param description.\n     * @returns {mixed} - TODO: add return description.\n     */\n\n  }, {\n    key: \"_cleanupStream\",\n    value: function _cleanupStream(stream) {\n      stream.removeListener('error', this._onError);\n      return stream;\n    }\n    /**\n     * TODO: add method description.\n     */\n\n  }, {\n    key: \"_rotateFile\",\n    value: function _rotateFile() {\n      var _this8 = this;\n\n      this._incFile(function () {\n        return _this8.open();\n      });\n    }\n    /**\n     * Unpipe from the stream that has been marked as full and end it so it\n     * flushes to disk.\n     *\n     * @param {function} callback - Callback for when the current file has closed.\n     * @private\n     */\n\n  }, {\n    key: \"_endStream\",\n    value: function _endStream() {\n      var _this9 = this;\n\n      var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n\n      if (this._dest) {\n        this._stream.unpipe(this._dest);\n\n        this._dest.end(function () {\n          _this9._cleanupStream(_this9._dest);\n\n          callback();\n        });\n      } else {\n        callback(); // eslint-disable-line callback-return\n      }\n    }\n    /**\n     * Returns the WritableStream for the active file on this instance. If we\n     * should gzip the file then a zlib stream is returned.\n     *\n     * @param {ReadableStream} source – PassThrough to pipe to the file when open.\n     * @returns {WritableStream} Stream that writes to disk for the active file.\n     */\n\n  }, {\n    key: \"_createStream\",\n    value: function _createStream(source) {\n      var _this10 = this;\n\n      var fullpath = path.join(this.dirname, this.filename);\n      debug('create stream start', fullpath, this.options);\n      var dest = fs.createWriteStream(fullpath, this.options) // TODO: What should we do with errors here?\n      .on('error', function (err) {\n        return debug(err);\n      }).on('close', function () {\n        return debug('close', dest.path, dest.bytesWritten);\n      }).on('open', function () {\n        debug('file open ok', fullpath);\n\n        _this10.emit('open', fullpath);\n\n        source.pipe(dest); // If rotation occured during the open operation then we immediately\n        // start writing to a new PassThrough, begin opening the next file\n        // and cleanup the previous source and dest once the source has drained.\n\n        if (_this10.rotatedWhileOpening) {\n          _this10._stream = new PassThrough();\n\n          _this10._stream.setMaxListeners(30);\n\n          _this10._rotateFile();\n\n          _this10.rotatedWhileOpening = false;\n\n          _this10._cleanupStream(dest);\n\n          source.end();\n        }\n      });\n      debug('create stream ok', fullpath);\n\n      if (this.zippedArchive) {\n        var gzip = zlib.createGzip();\n        gzip.pipe(dest);\n        return gzip;\n      }\n\n      return dest;\n    }\n    /**\n     * TODO: add method description.\n     * @param {function} callback - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"_incFile\",\n    value: function _incFile(callback) {\n      debug('_incFile', this.filename);\n      var ext = path.extname(this._basename);\n      var basename = path.basename(this._basename, ext);\n\n      if (!this.tailable) {\n        this._created += 1;\n\n        this._checkMaxFilesIncrementing(ext, basename, callback);\n      } else {\n        this._checkMaxFilesTailable(ext, basename, callback);\n      }\n    }\n    /**\n     * Gets the next filename to use for this instance in the case that log\n     * filesizes are being capped.\n     * @returns {string} - TODO: add return description.\n     * @private\n     */\n\n  }, {\n    key: \"_getFile\",\n    value: function _getFile() {\n      var ext = path.extname(this._basename);\n      var basename = path.basename(this._basename, ext);\n      var isRotation = this.rotationFormat ? this.rotationFormat() : this._created; // Caveat emptor (indexzero): rotationFormat() was broken by design When\n      // combined with max files because the set of files to unlink is never\n      // stored.\n\n      var target = !this.tailable && this._created ? \"\".concat(basename).concat(isRotation).concat(ext) : \"\".concat(basename).concat(ext);\n      return this.zippedArchive && !this.tailable ? \"\".concat(target, \".gz\") : target;\n    }\n    /**\n     * Increment the number of files created or checked by this instance.\n     * @param {mixed} ext - TODO: add param description.\n     * @param {mixed} basename - TODO: add param description.\n     * @param {mixed} callback - TODO: add param description.\n     * @returns {undefined}\n     * @private\n     */\n\n  }, {\n    key: \"_checkMaxFilesIncrementing\",\n    value: function _checkMaxFilesIncrementing(ext, basename, callback) {\n      // Check for maxFiles option and delete file.\n      if (!this.maxFiles || this._created < this.maxFiles) {\n        return setImmediate(callback);\n      }\n\n      var oldest = this._created - this.maxFiles;\n      var isOldest = oldest !== 0 ? oldest : '';\n      var isZipped = this.zippedArchive ? '.gz' : '';\n      var filePath = \"\".concat(basename).concat(isOldest).concat(ext).concat(isZipped);\n      var target = path.join(this.dirname, filePath);\n      fs.unlink(target, callback);\n    }\n    /**\n     * Roll files forward based on integer, up to maxFiles. e.g. if base if\n     * file.log and it becomes oversized, roll to file1.log, and allow file.log\n     * to be re-used. If file is oversized again, roll file1.log to file2.log,\n     * roll file.log to file1.log, and so on.\n     * @param {mixed} ext - TODO: add param description.\n     * @param {mixed} basename - TODO: add param description.\n     * @param {mixed} callback - TODO: add param description.\n     * @returns {undefined}\n     * @private\n     */\n\n  }, {\n    key: \"_checkMaxFilesTailable\",\n    value: function _checkMaxFilesTailable(ext, basename, callback) {\n      var _this12 = this;\n\n      var tasks = [];\n\n      if (!this.maxFiles) {\n        return;\n      } // const isZipped = this.zippedArchive ? '.gz' : '';\n\n\n      var isZipped = this.zippedArchive ? '.gz' : '';\n\n      for (var x = this.maxFiles - 1; x > 1; x--) {\n        tasks.push(function (i, cb) {\n          var _this11 = this;\n\n          var fileName = \"\".concat(basename).concat(i - 1).concat(ext).concat(isZipped);\n          var tmppath = path.join(this.dirname, fileName);\n          fs.exists(tmppath, function (exists) {\n            if (!exists) {\n              return cb(null);\n            }\n\n            fileName = \"\".concat(basename).concat(i).concat(ext).concat(isZipped);\n            fs.rename(tmppath, path.join(_this11.dirname, fileName), cb);\n          });\n        }.bind(this, x));\n      }\n\n      asyncSeries(tasks, function () {\n        fs.rename(path.join(_this12.dirname, \"\".concat(basename).concat(ext)), path.join(_this12.dirname, \"\".concat(basename, \"1\").concat(ext).concat(isZipped)), callback);\n      });\n    }\n  }, {\n    key: \"_createLogDirIfNotExist\",\n    value: function _createLogDirIfNotExist(dirPath) {\n      /* eslint-disable no-sync */\n      if (!fs.existsSync(dirPath)) {\n        fs.mkdirSync(dirPath, {\n          recursive: true\n        });\n      }\n      /* eslint-enable no-sync */\n\n    }\n  }]);\n\n  return File;\n}(TransportStream);","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/winston/dist/winston/transports/file.js"],"names":["_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","_inherits","subClass","superClass","create","value","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf","result","NewTarget","Reflect","construct","arguments","apply","_possibleConstructorReturn","self","call","_assertThisInitialized","ReferenceError","sham","Proxy","Date","toString","e","getPrototypeOf","fs","require","path","asyncSeries","zlib","_require","MESSAGE","_require2","Stream","PassThrough","TransportStream","debug","os","tailFile","module","exports","_TransportStream","File","_super","_this","options","undefined","name","throwIf","_len","args","Array","_key","slice","forEach","Error","concat","_stream","setMaxListeners","_onError","bind","filename","dirname","_basename","basename","flags","stream","console","warn","_dest","pipe","_setupStream","maxsize","rotationFormat","zippedArchive","maxFiles","eol","EOL","tailable","_size","_pendingSize","_created","_drain","_opening","_ending","_createLogDirIfNotExist","open","finishIfEnding","_this2","once","emit","setImmediate","end","log","info","_this3","callback","silent","_rotate","output","bytes","Buffer","byteLength","logged","_this4","_needsNewFile","_endStream","_rotateFile","rotatedWhileOpening","written","write","query","normalizeQuery","file","join","buff","results","row","createReadStream","encoding","on","err","readable","destroy","code","data","split","l","start","add","order","reverse","attempt","JSON","parse","check","push","rows","fields","reduce","shift","time","timestamp","from","until","level","limit","tail","line","_this5","stat","size","_createStream","eventNames","includes","_this6","_getFile","fullpath","_incFile","close","cb","_this7","_cleanupStream","removeListener","_this8","_this9","unpipe","source","_this10","dest","createWriteStream","bytesWritten","gzip","createGzip","ext","extname","_checkMaxFilesIncrementing","_checkMaxFilesTailable","isRotation","oldest","isOldest","isZipped","filePath","unlink","_this12","tasks","x","_this11","fileName","tmppath","exists","rename","dirPath","existsSync","mkdirSync","recursive"],"mappings":"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","sourcesContent":["/* eslint-disable complexity,max-statements */\n\n/**\n * file.js: Transport for outputting to a local log file.\n *\n * (C) 2010 Charlie Robbins\n * MIT LICENCE\n */\n'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar fs = require('fs');\n\nvar path = require('path');\n\nvar asyncSeries = require('async/series');\n\nvar zlib = require('zlib');\n\nvar _require = require('triple-beam'),\n    MESSAGE = _require.MESSAGE;\n\nvar _require2 = require('readable-stream'),\n    Stream = _require2.Stream,\n    PassThrough = _require2.PassThrough;\n\nvar TransportStream = require('winston-transport');\n\nvar debug = require('@dabh/diagnostics')('winston:file');\n\nvar os = require('os');\n\nvar tailFile = require('../tail-file');\n/**\n * Transport for outputting to a local log file.\n * @type {File}\n * @extends {TransportStream}\n */\n\n\nmodule.exports = /*#__PURE__*/function (_TransportStream) {\n  _inherits(File, _TransportStream);\n\n  var _super = _createSuper(File);\n\n  /**\n   * Constructor function for the File transport object responsible for\n   * persisting log messages and metadata to one or more files.\n   * @param {Object} options - Options for this instance.\n   */\n  function File() {\n    var _this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, File);\n\n    _this = _super.call(this, options); // Expose the name of this Transport on the prototype.\n\n    _this.name = options.name || 'file'; // Helper function which throws an `Error` in the event that any of the\n    // rest of the arguments is present in `options`.\n\n    function throwIf(target) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      args.slice(1).forEach(function (name) {\n        if (options[name]) {\n          throw new Error(\"Cannot set \".concat(name, \" and \").concat(target, \" together\"));\n        }\n      });\n    } // Setup the base stream that always gets piped to to handle buffering.\n\n\n    _this._stream = new PassThrough();\n\n    _this._stream.setMaxListeners(30); // Bind this context for listener methods.\n\n\n    _this._onError = _this._onError.bind(_assertThisInitialized(_this));\n\n    if (options.filename || options.dirname) {\n      throwIf('filename or dirname', 'stream');\n      _this._basename = _this.filename = options.filename ? path.basename(options.filename) : 'winston.log';\n      _this.dirname = options.dirname || path.dirname(options.filename);\n      _this.options = options.options || {\n        flags: 'a'\n      };\n    } else if (options.stream) {\n      // eslint-disable-next-line no-console\n      console.warn('options.stream will be removed in winston@4. Use winston.transports.Stream');\n      throwIf('stream', 'filename', 'maxsize');\n      _this._dest = _this._stream.pipe(_this._setupStream(options.stream));\n      _this.dirname = path.dirname(_this._dest.path); // We need to listen for drain events when write() returns false. This\n      // can make node mad at times.\n    } else {\n      throw new Error('Cannot log to file without filename or stream.');\n    }\n\n    _this.maxsize = options.maxsize || null;\n    _this.rotationFormat = options.rotationFormat || false;\n    _this.zippedArchive = options.zippedArchive || false;\n    _this.maxFiles = options.maxFiles || null;\n    _this.eol = options.eol || os.EOL;\n    _this.tailable = options.tailable || false; // Internal state variables representing the number of files this instance\n    // has created and the current size (in bytes) of the current logfile.\n\n    _this._size = 0;\n    _this._pendingSize = 0;\n    _this._created = 0;\n    _this._drain = false;\n    _this._opening = false;\n    _this._ending = false;\n    if (_this.dirname) _this._createLogDirIfNotExist(_this.dirname);\n\n    _this.open();\n\n    return _this;\n  }\n\n  _createClass(File, [{\n    key: \"finishIfEnding\",\n    value: function finishIfEnding() {\n      var _this2 = this;\n\n      if (this._ending) {\n        if (this._opening) {\n          this.once('open', function () {\n            _this2._stream.once('finish', function () {\n              return _this2.emit('finish');\n            });\n\n            setImmediate(function () {\n              return _this2._stream.end();\n            });\n          });\n        } else {\n          this._stream.once('finish', function () {\n            return _this2.emit('finish');\n          });\n\n          setImmediate(function () {\n            return _this2._stream.end();\n          });\n        }\n      }\n    }\n    /**\n     * Core logging method exposed to Winston. Metadata is optional.\n     * @param {Object} info - TODO: add param description.\n     * @param {Function} callback - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"log\",\n    value: function log(info) {\n      var _this3 = this;\n\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n      // Remark: (jcrugzz) What is necessary about this callback(null, true) now\n      // when thinking about 3.x? Should silent be handled in the base\n      // TransportStream _write method?\n      if (this.silent) {\n        callback();\n        return true;\n      } // Output stream buffer is full and has asked us to wait for the drain event\n\n\n      if (this._drain) {\n        this._stream.once('drain', function () {\n          _this3._drain = false;\n\n          _this3.log(info, callback);\n        });\n\n        return;\n      }\n\n      if (this._rotate) {\n        this._stream.once('rotate', function () {\n          _this3._rotate = false;\n\n          _this3.log(info, callback);\n        });\n\n        return;\n      } // Grab the raw string and append the expected EOL.\n\n\n      var output = \"\".concat(info[MESSAGE]).concat(this.eol);\n      var bytes = Buffer.byteLength(output); // After we have written to the PassThrough check to see if we need\n      // to rotate to the next file.\n      //\n      // Remark: This gets called too early and does not depict when data\n      // has been actually flushed to disk.\n\n      function logged() {\n        var _this4 = this;\n\n        this._size += bytes;\n        this._pendingSize -= bytes;\n        debug('logged %s %s', this._size, output);\n        this.emit('logged', info); // Do not attempt to rotate files while opening\n\n        if (this._opening) {\n          return;\n        } // Check to see if we need to end the stream and create a new one.\n\n\n        if (!this._needsNewFile()) {\n          return;\n        } // End the current stream, ensure it flushes and create a new one.\n        // This could potentially be optimized to not run a stat call but its\n        // the safest way since we are supporting `maxFiles`.\n\n\n        this._rotate = true;\n\n        this._endStream(function () {\n          return _this4._rotateFile();\n        });\n      } // Keep track of the pending bytes being written while files are opening\n      // in order to properly rotate the PassThrough this._stream when the file\n      // eventually does open.\n\n\n      this._pendingSize += bytes;\n\n      if (this._opening && !this.rotatedWhileOpening && this._needsNewFile(this._size + this._pendingSize)) {\n        this.rotatedWhileOpening = true;\n      }\n\n      var written = this._stream.write(output, logged.bind(this));\n\n      if (!written) {\n        this._drain = true;\n\n        this._stream.once('drain', function () {\n          _this3._drain = false;\n          callback();\n        });\n      } else {\n        callback(); // eslint-disable-line callback-return\n      }\n\n      debug('written', written, this._drain);\n      this.finishIfEnding();\n      return written;\n    }\n    /**\n     * Query the transport. Options object is optional.\n     * @param {Object} options - Loggly-like query options for this instance.\n     * @param {function} callback - Continuation to respond to when complete.\n     * TODO: Refactor me.\n     */\n\n  }, {\n    key: \"query\",\n    value: function query(options, callback) {\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n\n      options = normalizeQuery(options);\n      var file = path.join(this.dirname, this.filename);\n      var buff = '';\n      var results = [];\n      var row = 0;\n      var stream = fs.createReadStream(file, {\n        encoding: 'utf8'\n      });\n      stream.on('error', function (err) {\n        if (stream.readable) {\n          stream.destroy();\n        }\n\n        if (!callback) {\n          return;\n        }\n\n        return err.code !== 'ENOENT' ? callback(err) : callback(null, results);\n      });\n      stream.on('data', function (data) {\n        data = (buff + data).split(/\\n+/);\n        var l = data.length - 1;\n        var i = 0;\n\n        for (; i < l; i++) {\n          if (!options.start || row >= options.start) {\n            add(data[i]);\n          }\n\n          row++;\n        }\n\n        buff = data[l];\n      });\n      stream.on('close', function () {\n        if (buff) {\n          add(buff, true);\n        }\n\n        if (options.order === 'desc') {\n          results = results.reverse();\n        } // eslint-disable-next-line callback-return\n\n\n        if (callback) callback(null, results);\n      });\n\n      function add(buff, attempt) {\n        try {\n          var log = JSON.parse(buff);\n\n          if (check(log)) {\n            push(log);\n          }\n        } catch (e) {\n          if (!attempt) {\n            stream.emit('error', e);\n          }\n        }\n      }\n\n      function push(log) {\n        if (options.rows && results.length >= options.rows && options.order !== 'desc') {\n          if (stream.readable) {\n            stream.destroy();\n          }\n\n          return;\n        }\n\n        if (options.fields) {\n          log = options.fields.reduce(function (obj, key) {\n            obj[key] = log[key];\n            return obj;\n          }, {});\n        }\n\n        if (options.order === 'desc') {\n          if (results.length >= options.rows) {\n            results.shift();\n          }\n        }\n\n        results.push(log);\n      }\n\n      function check(log) {\n        if (!log) {\n          return;\n        }\n\n        if (_typeof(log) !== 'object') {\n          return;\n        }\n\n        var time = new Date(log.timestamp);\n\n        if (options.from && time < options.from || options.until && time > options.until || options.level && options.level !== log.level) {\n          return;\n        }\n\n        return true;\n      }\n\n      function normalizeQuery(options) {\n        options = options || {}; // limit\n\n        options.rows = options.rows || options.limit || 10; // starting row offset\n\n        options.start = options.start || 0; // now\n\n        options.until = options.until || new Date();\n\n        if (_typeof(options.until) !== 'object') {\n          options.until = new Date(options.until);\n        } // now - 24\n\n\n        options.from = options.from || options.until - 24 * 60 * 60 * 1000;\n\n        if (_typeof(options.from) !== 'object') {\n          options.from = new Date(options.from);\n        } // 'asc' or 'desc'\n\n\n        options.order = options.order || 'desc';\n        return options;\n      }\n    }\n    /**\n     * Returns a log stream for this transport. Options object is optional.\n     * @param {Object} options - Stream options for this instance.\n     * @returns {Stream} - TODO: add return description.\n     * TODO: Refactor me.\n     */\n\n  }, {\n    key: \"stream\",\n    value: function stream() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var file = path.join(this.dirname, this.filename);\n      var stream = new Stream();\n      var tail = {\n        file: file,\n        start: options.start\n      };\n      stream.destroy = tailFile(tail, function (err, line) {\n        if (err) {\n          return stream.emit('error', err);\n        }\n\n        try {\n          stream.emit('data', line);\n          line = JSON.parse(line);\n          stream.emit('log', line);\n        } catch (e) {\n          stream.emit('error', e);\n        }\n      });\n      return stream;\n    }\n    /**\n     * Checks to see the filesize of.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"open\",\n    value: function open() {\n      var _this5 = this;\n\n      // If we do not have a filename then we were passed a stream and\n      // don't need to keep track of size.\n      if (!this.filename) return;\n      if (this._opening) return;\n      this._opening = true; // Stat the target file to get the size and create the stream.\n\n      this.stat(function (err, size) {\n        if (err) {\n          return _this5.emit('error', err);\n        }\n\n        debug('stat done: %s { size: %s }', _this5.filename, size);\n        _this5._size = size;\n        _this5._dest = _this5._createStream(_this5._stream);\n        _this5._opening = false;\n\n        _this5.once('open', function () {\n          if (_this5._stream.eventNames().includes('rotate')) {\n            _this5._stream.emit('rotate');\n          } else {\n            _this5._rotate = false;\n          }\n        });\n      });\n    }\n    /**\n     * Stat the file and assess information in order to create the proper stream.\n     * @param {function} callback - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"stat\",\n    value: function stat(callback) {\n      var _this6 = this;\n\n      var target = this._getFile();\n\n      var fullpath = path.join(this.dirname, target);\n      fs.stat(fullpath, function (err, stat) {\n        if (err && err.code === 'ENOENT') {\n          debug('ENOENT ok', fullpath); // Update internally tracked filename with the new target name.\n\n          _this6.filename = target;\n          return callback(null, 0);\n        }\n\n        if (err) {\n          debug(\"err \".concat(err.code, \" \").concat(fullpath));\n          return callback(err);\n        }\n\n        if (!stat || _this6._needsNewFile(stat.size)) {\n          // If `stats.size` is greater than the `maxsize` for this\n          // instance then try again.\n          return _this6._incFile(function () {\n            return _this6.stat(callback);\n          });\n        } // Once we have figured out what the filename is, set it\n        // and return the size.\n\n\n        _this6.filename = target;\n        callback(null, stat.size);\n      });\n    }\n    /**\n     * Closes the stream associated with this instance.\n     * @param {function} cb - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"close\",\n    value: function close(cb) {\n      var _this7 = this;\n\n      if (!this._stream) {\n        return;\n      }\n\n      this._stream.end(function () {\n        if (cb) {\n          cb(); // eslint-disable-line callback-return\n        }\n\n        _this7.emit('flush');\n\n        _this7.emit('closed');\n      });\n    }\n    /**\n     * TODO: add method description.\n     * @param {number} size - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"_needsNewFile\",\n    value: function _needsNewFile(size) {\n      size = size || this._size;\n      return this.maxsize && size >= this.maxsize;\n    }\n    /**\n     * TODO: add method description.\n     * @param {Error} err - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"_onError\",\n    value: function _onError(err) {\n      this.emit('error', err);\n    }\n    /**\n     * TODO: add method description.\n     * @param {Stream} stream - TODO: add param description.\n     * @returns {mixed} - TODO: add return description.\n     */\n\n  }, {\n    key: \"_setupStream\",\n    value: function _setupStream(stream) {\n      stream.on('error', this._onError);\n      return stream;\n    }\n    /**\n     * TODO: add method description.\n     * @param {Stream} stream - TODO: add param description.\n     * @returns {mixed} - TODO: add return description.\n     */\n\n  }, {\n    key: \"_cleanupStream\",\n    value: function _cleanupStream(stream) {\n      stream.removeListener('error', this._onError);\n      return stream;\n    }\n    /**\n     * TODO: add method description.\n     */\n\n  }, {\n    key: \"_rotateFile\",\n    value: function _rotateFile() {\n      var _this8 = this;\n\n      this._incFile(function () {\n        return _this8.open();\n      });\n    }\n    /**\n     * Unpipe from the stream that has been marked as full and end it so it\n     * flushes to disk.\n     *\n     * @param {function} callback - Callback for when the current file has closed.\n     * @private\n     */\n\n  }, {\n    key: \"_endStream\",\n    value: function _endStream() {\n      var _this9 = this;\n\n      var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n\n      if (this._dest) {\n        this._stream.unpipe(this._dest);\n\n        this._dest.end(function () {\n          _this9._cleanupStream(_this9._dest);\n\n          callback();\n        });\n      } else {\n        callback(); // eslint-disable-line callback-return\n      }\n    }\n    /**\n     * Returns the WritableStream for the active file on this instance. If we\n     * should gzip the file then a zlib stream is returned.\n     *\n     * @param {ReadableStream} source – PassThrough to pipe to the file when open.\n     * @returns {WritableStream} Stream that writes to disk for the active file.\n     */\n\n  }, {\n    key: \"_createStream\",\n    value: function _createStream(source) {\n      var _this10 = this;\n\n      var fullpath = path.join(this.dirname, this.filename);\n      debug('create stream start', fullpath, this.options);\n      var dest = fs.createWriteStream(fullpath, this.options) // TODO: What should we do with errors here?\n      .on('error', function (err) {\n        return debug(err);\n      }).on('close', function () {\n        return debug('close', dest.path, dest.bytesWritten);\n      }).on('open', function () {\n        debug('file open ok', fullpath);\n\n        _this10.emit('open', fullpath);\n\n        source.pipe(dest); // If rotation occured during the open operation then we immediately\n        // start writing to a new PassThrough, begin opening the next file\n        // and cleanup the previous source and dest once the source has drained.\n\n        if (_this10.rotatedWhileOpening) {\n          _this10._stream = new PassThrough();\n\n          _this10._stream.setMaxListeners(30);\n\n          _this10._rotateFile();\n\n          _this10.rotatedWhileOpening = false;\n\n          _this10._cleanupStream(dest);\n\n          source.end();\n        }\n      });\n      debug('create stream ok', fullpath);\n\n      if (this.zippedArchive) {\n        var gzip = zlib.createGzip();\n        gzip.pipe(dest);\n        return gzip;\n      }\n\n      return dest;\n    }\n    /**\n     * TODO: add method description.\n     * @param {function} callback - TODO: add param description.\n     * @returns {undefined}\n     */\n\n  }, {\n    key: \"_incFile\",\n    value: function _incFile(callback) {\n      debug('_incFile', this.filename);\n      var ext = path.extname(this._basename);\n      var basename = path.basename(this._basename, ext);\n\n      if (!this.tailable) {\n        this._created += 1;\n\n        this._checkMaxFilesIncrementing(ext, basename, callback);\n      } else {\n        this._checkMaxFilesTailable(ext, basename, callback);\n      }\n    }\n    /**\n     * Gets the next filename to use for this instance in the case that log\n     * filesizes are being capped.\n     * @returns {string} - TODO: add return description.\n     * @private\n     */\n\n  }, {\n    key: \"_getFile\",\n    value: function _getFile() {\n      var ext = path.extname(this._basename);\n      var basename = path.basename(this._basename, ext);\n      var isRotation = this.rotationFormat ? this.rotationFormat() : this._created; // Caveat emptor (indexzero): rotationFormat() was broken by design When\n      // combined with max files because the set of files to unlink is never\n      // stored.\n\n      var target = !this.tailable && this._created ? \"\".concat(basename).concat(isRotation).concat(ext) : \"\".concat(basename).concat(ext);\n      return this.zippedArchive && !this.tailable ? \"\".concat(target, \".gz\") : target;\n    }\n    /**\n     * Increment the number of files created or checked by this instance.\n     * @param {mixed} ext - TODO: add param description.\n     * @param {mixed} basename - TODO: add param description.\n     * @param {mixed} callback - TODO: add param description.\n     * @returns {undefined}\n     * @private\n     */\n\n  }, {\n    key: \"_checkMaxFilesIncrementing\",\n    value: function _checkMaxFilesIncrementing(ext, basename, callback) {\n      // Check for maxFiles option and delete file.\n      if (!this.maxFiles || this._created < this.maxFiles) {\n        return setImmediate(callback);\n      }\n\n      var oldest = this._created - this.maxFiles;\n      var isOldest = oldest !== 0 ? oldest : '';\n      var isZipped = this.zippedArchive ? '.gz' : '';\n      var filePath = \"\".concat(basename).concat(isOldest).concat(ext).concat(isZipped);\n      var target = path.join(this.dirname, filePath);\n      fs.unlink(target, callback);\n    }\n    /**\n     * Roll files forward based on integer, up to maxFiles. e.g. if base if\n     * file.log and it becomes oversized, roll to file1.log, and allow file.log\n     * to be re-used. If file is oversized again, roll file1.log to file2.log,\n     * roll file.log to file1.log, and so on.\n     * @param {mixed} ext - TODO: add param description.\n     * @param {mixed} basename - TODO: add param description.\n     * @param {mixed} callback - TODO: add param description.\n     * @returns {undefined}\n     * @private\n     */\n\n  }, {\n    key: \"_checkMaxFilesTailable\",\n    value: function _checkMaxFilesTailable(ext, basename, callback) {\n      var _this12 = this;\n\n      var tasks = [];\n\n      if (!this.maxFiles) {\n        return;\n      } // const isZipped = this.zippedArchive ? '.gz' : '';\n\n\n      var isZipped = this.zippedArchive ? '.gz' : '';\n\n      for (var x = this.maxFiles - 1; x > 1; x--) {\n        tasks.push(function (i, cb) {\n          var _this11 = this;\n\n          var fileName = \"\".concat(basename).concat(i - 1).concat(ext).concat(isZipped);\n          var tmppath = path.join(this.dirname, fileName);\n          fs.exists(tmppath, function (exists) {\n            if (!exists) {\n              return cb(null);\n            }\n\n            fileName = \"\".concat(basename).concat(i).concat(ext).concat(isZipped);\n            fs.rename(tmppath, path.join(_this11.dirname, fileName), cb);\n          });\n        }.bind(this, x));\n      }\n\n      asyncSeries(tasks, function () {\n        fs.rename(path.join(_this12.dirname, \"\".concat(basename).concat(ext)), path.join(_this12.dirname, \"\".concat(basename, \"1\").concat(ext).concat(isZipped)), callback);\n      });\n    }\n  }, {\n    key: \"_createLogDirIfNotExist\",\n    value: function _createLogDirIfNotExist(dirPath) {\n      /* eslint-disable no-sync */\n      if (!fs.existsSync(dirPath)) {\n        fs.mkdirSync(dirPath, {\n          recursive: true\n        });\n      }\n      /* eslint-enable no-sync */\n\n    }\n  }]);\n\n  return File;\n}(TransportStream);"]},"metadata":{},"sourceType":"script"}