| "use strict"; | 
|   | 
| var BOMChar = '\uFEFF'; | 
|   | 
| exports.PrependBOM = PrependBOMWrapper | 
| function PrependBOMWrapper(encoder, options) { | 
|     this.encoder = encoder; | 
|     this.addBOM = true; | 
| } | 
|   | 
| PrependBOMWrapper.prototype.write = function(str) { | 
|     if (this.addBOM) { | 
|         str = BOMChar + str; | 
|         this.addBOM = false; | 
|     } | 
|   | 
|     return this.encoder.write(str); | 
| } | 
|   | 
| PrependBOMWrapper.prototype.end = function() { | 
|     return this.encoder.end(); | 
| } | 
|   | 
|   | 
| //------------------------------------------------------------------------------ | 
|   | 
| exports.StripBOM = StripBOMWrapper; | 
| function StripBOMWrapper(decoder, options) { | 
|     this.decoder = decoder; | 
|     this.pass = false; | 
|     this.options = options || {}; | 
| } | 
|   | 
| StripBOMWrapper.prototype.write = function(buf) { | 
|     var res = this.decoder.write(buf); | 
|     if (this.pass || !res) | 
|         return res; | 
|   | 
|     if (res[0] === BOMChar) { | 
|         res = res.slice(1); | 
|         if (typeof this.options.stripBOM === 'function') | 
|             this.options.stripBOM(); | 
|     } | 
|   | 
|     this.pass = true; | 
|     return res; | 
| } | 
|   | 
| StripBOMWrapper.prototype.end = function() { | 
|     return this.decoder.end(); | 
| } |