function domainBuilder(row) {
  var rule = {
    exception: false,
    source: null,
    parts: null,
  };

  // Only read line up to the first white-space
  var spaceIndex = row.indexOf(' ');
  if (spaceIndex !== -1) {
    row = row.substr(0, spaceIndex);
  }

  row = punycode.toASCII(row);

  // Keep track of initial rule
  rule.source = row;

  // Exception
  if (row[0] === '!') {
    row = row.substr(1);
    rule.exception = true;
  }

  rule.parts = row.split('.').reverse();

  return rule;
}
Returns a rule based on string analysis

@param {string} row
@return {object} a public suffix rule