123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- '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;
|