-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
40 lines (32 loc) · 893 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
var fs = require('fs')
var Promise = require('any-promise')
var createHash = require('crypto').createHash
module.exports = function (stream, method, done) {
var promise = new Promise(function (resolve, reject) {
if (typeof stream === 'string')
stream = fs.createReadStream(stream)
var hasher = createHash(method)
.once('error', finish)
.once('readable', onReadable)
stream
.once('error', finish)
.pipe(hasher)
function onReadable() {
finish(null, this.read())
}
function finish(err, hash) {
stream.removeListener('error', finish)
hasher.removeListener('error', finish)
hasher.removeListener('readable', onReadable)
if (err) reject(err)
else resolve(hash)
stream = hasher = null
}
})
if (done) {
promise.then(function (buf) {
done(null, buf)
}, done)
}
return promise
}