Skip to content

Instantly share code, notes, and snippets.

@PaulMougel
Forked from chmanie/gist:7441515
Last active December 28, 2015 04:59
Show Gist options
  • Save PaulMougel/7446104 to your computer and use it in GitHub Desktop.
Save PaulMougel/7446104 to your computer and use it in GitHub Desktop.
MIME checking using streams in Node.js
var stream = require('readable-stream');
var mmm = require('mmmagic');
var mimeChecker = new stream.Transform();
mimeChecker.data = [];
mimeChecker.mimeFound = false;
mimeChecker._transform = function (chunk, encoding, done) {
var self = this;
if (self.mimeFound) {
self.push(chunk);
return done();
}
self.data.push(chunk);
if (self.data.length < 10) {
return done();
}
else if (self.data.length === 10) {
var buffered = Buffer.concat(this.data);
new mmm.Magic(mmm.MAGIC_MIME_TYPE).detect(buffered, function(err, result) {
if (err) return self.emit('error', err);
if (result !== 'application/xml') return self.emit('error', new Error('Wrong MIME'));
self.data.map(self.push.bind(self));
self.mimeFound = true;
return done();
});
}
}
process.stdin.pipe(mimeChecker).pipe(process.stdout);
@PaulMougel
Copy link
Author

Usage:

$ node mime.js < input.xml > out.xml
$ diff input.xml out.xml
$ 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment