hashsum v0.0.1
hashsum
Calculate the hashsum of various things.
installation
npm install hashsumusage
var hashsum = require('hashsum');hash an arbitrary value
hashsum(value, function (err, hashOrHashes) {
console.log(hashOrHashes);
});hash a file's contents
hashsum.file('/path/to/file', function (err, hash) {
console.log(hash);
});hash the contents of each file in a directory
hashsum.directory('/path/to/dir', function (err, hashes) {
for (var path in hashes) {
console.log(path, hashes[path]);
}
});hash a stream
// Create or obtain a stream of some kind...
var src = fs.createReadStream('/path/to/file');
hashsum.stream(src, function (err, hash) {
console.log(hash);
});api
Callbacks receive two arguments (err, hash), unless otherwise noted.
All methods accept an optional options object with the following properties:
algorithm- hashing algorithm supported bycrypto.createHash. Default:sha1
Directory-related methods accept additional properties:
filterFn- function used to filter files or directories out of the results. Receives the file or directorypathas an argument. Filter functions should returntrueto retain the path, orfalseto skip it. Default:undefinedrecursive- whether to descend into child directories. Default:falserelativePaths- whether to use relative paths in thehashesobject. Default:false
Example filterFn:
// Skip paths containing an underscore.
function filter(path) {
return path.indexOf('_') === -1;
}
var options = { recursive: true, filterFn: filter };
hashsum.directory('/path', options, function (err, hashes) {
console.log(hashes);
});hashsum(src, options, cb)
Calculate the hashsum for the given src. Internally, hashsum will decide the
best hashsum API method to use based on the value of src.
If src is a stream, hashsum.stream will be used.
If src is a string, and it is also a path, and a file or directory exists at
that location, hashsum.file or hashsum.directory will be used.
If it is not a path, or nothing exists at that location, hashsum.string will
be used.
If it is any other type, it will be coerced to string via '' + src and
hashsum.string will be used.
When hashing an object, consider implementing a custom toString method on the
object, or prepare the source data ahead of time and use hashsum.string
directly.
hashsumSync(src, options)
Synchronous version of hashsum. Returns the calculated hash or hashes.
Note: Streams cannot be hashed synchronously. Use hashsum or hashsum.stream
instead.
hashsum.file(path, options, cb)
Calculate the hashsum for the given file.
hashsum.fileSync(path, options)
Synchronous version of hashsum.file. Returns the calculated hash.
hashsum.directory(path, options, cb)
Calculate the hashsum for each file in a given directory.
The callback receives two arguments (err, hashes). Hashes are collected as an
object that maps filename to hashsum.
This example:
hashsum.directory('/path/to/dir', function (err, hashes) {
console.log(hashes);
});Might produce this hashes object:
{
'/path/to/dir/index.html': 'de59a86eea5cc70b3d3c8c27d210eb23d5e34873',
'/path/to/dir/public/css/reset.css': '82bed1345e375f93cadd5494cac046e8ff80ece3',
...
}If the relativePaths option is true, the hashes object might look like the
following (when run from the /path/to/dir directory):
{
'index.html': 'de59a86eea5cc70b3d3c8c27d210eb23d5e34873',
'public/css/reset.css': '82bed1345e375f93cadd5494cac046e8ff80ece3',
...
}hashsum.directorySync(path, options)
Synchonrous version of hashsum.directory. Returns the calculated hashes.
hashsum.string(str, options, cb)
Calculate the hashsum for the given string.
hashsum.stringSync(str, options)
Synchronous version of hashsum.string. Returns the calculated hash.
hashsum.stream(src, options, cb)
Calculate the hashsum for the given stream.
cli
npm install -g hashsumhashsum [options] <src-1> [...<src-N>]
Options:
-a, --algorithm Hashing algorithm to use [default: "sha1"]
-e, --filter RegExp for filtering out unwanted paths
-f, --format Output format: text|json [default: "text"]
-p, --path Treat all inputs as paths first, strings second
-r, --recursive Recurse into sub-directories
-t, --relativePaths Use relative paths in directory output
-h, --help Print this help message
-v, --version Print version informationnotes
On the command line, hashsum's filter option is a bit different than the
filterFn option of the module. The hashsum module's filterFn option takes a
function, whereas the CLI filter option is the pattern of a RegExp. That is,
the string pattern you would pass to new RegExp(pattern).
When specifying --format json, source keys are mapped to hash values. This is
slightly different than --format text, which prints hashes before sources.
examples
$ hashsum foo
0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 foo$ hashsum foo bar baz
0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 foo
62cdb7020ff920e5aa642c3d4066950dd1f01f4d bar
bbe960a25ea311d21d40669e93df2003ba9b90a2 baz$ hashsum /path/to/dir -p
de59a86eea5cc70b3d3c8c27d210eb23d5e34873 /path/to/dir/index.js$ cd /path/to/dir
$ hashsum /path/to/dir -pt
de59a86eea5cc70b3d3c8c27d210eb23d5e34873 index.js$ hashsum /path/to/dir -pr
de59a86eea5cc70b3d3c8c27d210eb23d5e34873 /path/to/dir/index.js
82bed1345e375f93cadd5494cac046e8ff80ece3 /path/to/dir/node_modules/.bin/jshint
...$ hashsum /path/to/dir -pr -e node_modules
de59a86eea5cc70b3d3c8c27d210eb23d5e34873 /path/to/dir/index.js$ cs /path/to/dir
$ hashsum /path/to/dir -prt -f json
{
"index.js": "de59a86eea5cc70b3d3c8c27d210eb23d5e34873",
"node_modules/.bin/jshint": "82bed1345e375f93cadd5494cac046e8ff80ece3",
...
}$ hashsum /path/to/dir -pt -a md5
a1b8790319d43ac420fb25f2b6563887 index.jsstdin
$ echo -n foo | hashsum
0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33$ hashsum < /path/to/dir/index.js
de59a86eea5cc70b3d3c8c27d210eb23d5e3487312 years ago