varpunycode=require('punycode');varrevEntities=require('./reversed.json');module.exports=encode;functionencode(str,opts){if(typeofstr!=='string'){thrownewTypeError('Expected a String');}if(!opts)opts={};varnumeric=true;if(opts.named)numeric=false;if(opts.numeric!==undefined)numeric=opts.numeric;varspecial=opts.special||{'"':true,"'":true,'<':true,'>':true,'&':true};varcodePoints=punycode.ucs2.decode(str);varchars=[];for(vari=0;i<codePoints.length;i++){varcc=codePoints[i];varc=punycode.ucs2.encode([cc]);vare=revEntities[cc];if(e&&(cc>=127||special[c])&&!numeric){chars.push('&'+(/;$/.test(e)?e:e+';'));}elseif(cc<32||cc>=127||special[c]){chars.push('&#'+cc+';');}else{chars.push(c);}}returnchars.join('');}