ahmadnassri/har

View on GitHub
lib/log.js

Summary

Maintainability
B
6 hrs
Test Coverage
'use strict'

var Comment = require('./comment')
var Creator = require('./creator')
var Entry = require('./entry')
var Page = require('./page')
var Version = require('./version')

var Log = function (options) {
  var opts = options || {}

  // internal properties
  Object.defineProperties(this, {
    _pages: {
      enumerable: false,
      configurable: false,
      writable: true,
      value: []
    },

    _entries: {
      enumerable: false,
      configurable: false,
      writable: true,
      value: []
    }
  })

  Comment.call(this, opts.comment)
  Version.call(this, opts.version)

  Object.defineProperty(this, 'creator', {
    enumerable: true,
    value: new Creator(opts.creator)
  })

  Object.defineProperty(this, 'browser', {
    enumerable: true,
    value: opts.browser ? new Creator(opts.browser) : undefined
  })

  Object.defineProperty(this, 'pages', {
    enumerable: true,

    get: function () {
      return this._pages
    },

    set: function (pages) {
      this._pages = []
      pages.forEach(this.addPage, this)
    }
  })

  Object.defineProperty(this, 'entries', {
    enumerable: true,

    get: function () {
      return this._entries
    },

    set: function (entries) {
      this._entries = []
      entries.forEach(this.addEntry, this)
    }
  })

  if (opts.pages) {
    opts.pages.forEach(this.addPage, this)
  }

  if (opts.entries) {
    opts.entries.forEach(this.addEntry, this)
  }
}

Log.prototype.addPage = function (page) {
  this._pages.push(new Page(page))

  return this
}

Log.prototype.addEntry = function (entry, pageref) {
  entry.pageref = pageref || entry.pageref

  this._entries.push(new Entry(entry))

  return this
}

module.exports = Log