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