marshals/headers.js

var utils = require('../utils')

/**
 * @module marshals/headers
 * @author Nijiko Yonskai
 */

/**
 * Convert headers string into JavaScript object with lowercase header names
 *
 * @param  {String} string Headers string to be marshalled to JavaScript object
 * @return {Object}
 */
exports.marshal = function (string) {
  var lines = string.split(/\r?\n/)
  var fields = {}
  var index
  var line
  var field
  var val

  // Remove Trailing CLRF
  lines.pop()

  for (var i = 0, len = lines.length; i < len; ++i) {
    line = lines[i]
    index = line.indexOf(':')
    field = line.slice(0, index)
    val = utils.trim(line.slice(index + 1))
    fields[field] = val
  }

  return fields
}

/**
 * Convert JavaScript object to headers string, omitting request line
 *
 * @param  {Object} obj Object map containing key value data
 * @return {String}
 */
exports.unmarshal = function (obj) {
  var headers = ""

  for (var key in obj) {
    headers += utils.normalizeHeaderName(key) + ': ' + obj[key] + '\r\n'
  }

  return headers
}