1"use strict"; 2 3var BOMChar = '\uFEFF'; 4 5exports.PrependBOM = PrependBOMWrapper 6function PrependBOMWrapper(encoder, options) { 7 this.encoder = encoder; 8 this.addBOM = true; 9} 10 11PrependBOMWrapper.prototype.write = function(str) { 12 if (this.addBOM) { 13 str = BOMChar + str; 14 this.addBOM = false; 15 } 16 17 return this.encoder.write(str); 18} 19 20PrependBOMWrapper.prototype.end = function() { 21 return this.encoder.end(); 22} 23 24 25//------------------------------------------------------------------------------ 26 27exports.StripBOM = StripBOMWrapper; 28function StripBOMWrapper(decoder, options) { 29 this.decoder = decoder; 30 this.pass = false; 31 this.options = options || {}; 32} 33 34StripBOMWrapper.prototype.write = function(buf) { 35 var res = this.decoder.write(buf); 36 if (this.pass || !res) 37 return res; 38 39 if (res[0] === BOMChar) { 40 res = res.slice(1); 41 if (typeof this.options.stripBOM === 'function') 42 this.options.stripBOM(); 43 } 44 45 this.pass = true; 46 return res; 47} 48 49StripBOMWrapper.prototype.end = function() { 50 return this.decoder.end(); 51} 52 53