code: function createContentItem(desc) {
    utils.check(mainFields, desc);
    if (!desc.content && !desc.queued) {
      utils.checkError(desc, 'content OR queued');
    }
    var cItem = { title: desc.title, uri: desc.uri, headers: desc.headers || {}, created: desc.created};
    // save values as arrays
    ['annotations', 'visitors', 'referers'].forEach(function(k) {
      var v = desc[k] || [];
      if (!Array.isArray(v)) {
        v = [v];
      }
      cItem[k] = v;
    });
  
  // transfer properties if present
    ['state', 'queued'].forEach(function(k) {
      if (desc[k]) {
        cItem[k] = desc[k];
      }
    });
  
    // item has content so has been visited
    if (desc.content) {
      cItem.content = desc.content;
    } else {
    // add queing information
      cItem.queued = desc.queued;
    }
  
    cItem._id = encodeURIComponent(desc.uri);
  
    return cItem;
  }
docs: Annotation types:  category - document level category quote - quotes in document ranges value - value assigned to document valueQuote - value assigned to document ranges validates and formats a contentItem