| 'use strict'; |
| |
| var through = require('through2'); |
| var removeBom = require('remove-bom-buffer'); |
| var SafeBuffer = require('safe-buffer').Buffer; |
| |
| function removeBomStream() { |
| var completed = false; |
| var buffer = SafeBuffer.alloc(0); |
| |
| return through(onChunk, onFlush); |
| |
| function removeAndCleanup(data) { |
| completed = true; |
| |
| buffer = null; |
| |
| return removeBom(data); |
| } |
| |
| function onChunk(data, enc, cb) { |
| if (completed) { |
| return cb(null, data); |
| } |
| |
| if (data.length >= 7) { |
| return cb(null, removeAndCleanup(data)); |
| } |
| |
| var bufferLength = buffer.length; |
| var chunkLength = data.length; |
| var totalLength = bufferLength + chunkLength; |
| |
| buffer = SafeBuffer.concat([buffer, data], totalLength); |
| |
| if (totalLength >= 7) { |
| return cb(null, removeAndCleanup(buffer)); |
| } |
| cb(); |
| } |
| |
| function onFlush(cb) { |
| if (completed || !buffer) { |
| return cb(); |
| } |
| |
| cb(null, removeAndCleanup(buffer)); |
| } |
| } |
| |
| module.exports = removeBomStream; |