'use strict';
							 | 
						|
								
							 | 
						|
								var extend = require('extend-shallow');
							 | 
						|
								var regexCache = {};
							 | 
						|
								var all;
							 | 
						|
								
							 | 
						|
								var charSets = {
							 | 
						|
								  default: {
							 | 
						|
								    '"': '"',
							 | 
						|
								    '"': '"',
							 | 
						|
								
							 | 
						|
								    ''': '\'',
							 | 
						|
								    ''': '\'',
							 | 
						|
								
							 | 
						|
								    '&': '&',
							 | 
						|
								    '&': '&',
							 | 
						|
								
							 | 
						|
								    '>': '>',
							 | 
						|
								    '>': '>',
							 | 
						|
								
							 | 
						|
								    '<': '<',
							 | 
						|
								    '<': '<'
							 | 
						|
								  },
							 | 
						|
								  extras: {
							 | 
						|
								    '¢': '¢',
							 | 
						|
								    '¢': '¢',
							 | 
						|
								
							 | 
						|
								    '©': '©',
							 | 
						|
								    '©': '©',
							 | 
						|
								
							 | 
						|
								    '€': '€',
							 | 
						|
								    '€': '€',
							 | 
						|
								
							 | 
						|
								    '£': '£',
							 | 
						|
								    '£': '£',
							 | 
						|
								
							 | 
						|
								    '®': '®',
							 | 
						|
								    '®': '®',
							 | 
						|
								
							 | 
						|
								    '¥': '¥',
							 | 
						|
								    '¥': '¥'
							 | 
						|
								  }
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								// don't merge char sets unless "all" is explicitly called
							 | 
						|
								Object.defineProperty(charSets, 'all', {
							 | 
						|
								  get: function() {
							 | 
						|
								    return all || (all = extend({}, charSets.default, charSets.extras));
							 | 
						|
								  }
							 | 
						|
								});
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Convert HTML entities to HTML characters.
							 | 
						|
								 *
							 | 
						|
								 * @param  {String} `str` String with HTML entities to un-escape.
							 | 
						|
								 * @return {String}
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								function unescape(str, type) {
							 | 
						|
								  if (!isString(str)) return '';
							 | 
						|
								  var chars = charSets[type || 'default'];
							 | 
						|
								  var regex = toRegex(type, chars);
							 | 
						|
								  return str.replace(regex, function(m) {
							 | 
						|
								    return chars[m];
							 | 
						|
								  });
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function toRegex(type, chars) {
							 | 
						|
								  if (regexCache[type]) {
							 | 
						|
								    return regexCache[type];
							 | 
						|
								  }
							 | 
						|
								  var keys = Object.keys(chars).join('|');
							 | 
						|
								  var regex = new RegExp('(?=(' + keys + '))\\1', 'g');
							 | 
						|
								  regexCache[type] = regex;
							 | 
						|
								  return regex;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Returns true if str is a non-empty string
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								function isString(str) {
							 | 
						|
								  return str && typeof str === 'string';
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Expose charSets
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								unescape.chars = charSets.default;
							 | 
						|
								unescape.extras = charSets.extras;
							 | 
						|
								// don't trip the "charSets" getter unless it's explicitly called
							 | 
						|
								Object.defineProperty(unescape, 'all', {
							 | 
						|
								  get: function() {
							 | 
						|
								    return charSets.all;
							 | 
						|
								  }
							 | 
						|
								});
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Expose `unescape`
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								module.exports = unescape;
							 |