29 lines
683 B
JavaScript
29 lines
683 B
JavaScript
'use strict';
|
|
|
|
const crypto = require('crypto');
|
|
const Transform = require('stream').Transform;
|
|
|
|
class StreamHash extends Transform {
|
|
constructor(attachment, algo) {
|
|
super();
|
|
this.attachment = attachment;
|
|
this.algo = (algo || 'md5').toLowerCase();
|
|
this.hash = crypto.createHash(algo);
|
|
this.byteCount = 0;
|
|
}
|
|
|
|
_transform(chunk, encoding, done) {
|
|
this.hash.update(chunk);
|
|
this.byteCount += chunk.length;
|
|
done(null, chunk);
|
|
}
|
|
|
|
_flush(done) {
|
|
this.attachment.checksum = this.hash.digest('hex');
|
|
this.attachment.size = this.byteCount;
|
|
done();
|
|
}
|
|
}
|
|
|
|
module.exports = StreamHash;
|