Files
codeql-action/node_modules/glob-hash/lib/glob-hash.js
2020-12-09 21:28:55 +01:00

71 lines
2.3 KiB
JavaScript

'use strict'
var hashFiles = require('./hash-files');
var jail = require('./jail');
var normalise = require('./normalise');
var q = require('q');
var resolveGlobs = require('./resolve-globs');
var validate = require('./validate');
/**
* Entry point into the module.
* Parses and validates the options,
* then performs the desired operation.
*
* @param {Object} options The desired options.
* @return {Promise} A promise to perform the desired operation.
*/
module.exports = function computeHash(options){
var deferred = q.defer();
var error = validate(options);
if (error) {
deferred.reject(error);
} else {
resolveGlobs(options.include)
.then(function(includes) {
options.include = includes;
return resolveGlobs(options.exclude);
})
.then(function(excludes) {
var files = options.include
// Remove excluded files
.filter(function(item) {
return excludes.indexOf(item) === -1;
})
// Remove duplicate entries
.reduce(function(memo, next){
if (memo.indexOf(next) < 0) {
memo.push(next);
}
return memo;
}, []);
var error = jail(files, options.jail);
if (error) {
deferred.reject(error);
} else if (files.length === 0) {
deferred.reject(
'No files were matched using the provided globs.'
);
} else {
files.sort();
if (options.files) {
if (options.jail) {
options.jail = normalise(options.jail);
files = files.map(function(file) {
return file.substr(options.jail.length + 1);
});
}
deferred.resolve(files);
} else {
deferred.resolve(
hashFiles(files, options)
);
}
}
})
.fail(function(error) {
deferred.reject(error);
});
}
return deferred.promise;
};