code: function mapDomain(string, fn) {
  	const parts = string.split('@');
  	let result = '';
  	if (parts.length > 1) {
  		// In email addresses, only the domain name should be punycoded. Leave
  		// the local part (i.e. everything up to `@`) intact.
  		result = parts[0] + '@';
  		string = parts[1];
  	}
  	// Avoid `split(regex)` for IE8 compatibility. See #17.
  	string = string.replace(regexSeparators, '\x2E');
  	const labels = string.split('.');
  	const encoded = map(labels, fn).join('.');
  	return result + encoded;
  }
docs: A simple `Array#map`-like wrapper to work with domain name strings or email
  addresses.
  @private
  @param {String} domain The domain name or email address.
  @param {Function} callback The function that gets called for every
  character.
  @returns {Array} A new string of characters returned by the callback
  function.