You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

59 lines
1.4 KiB

'use strict';
var fs = require('fs');
var path = require('path');
var commondir = require('commondir');
var glob = require('glob');
function notNullOrExclusion(file) {
return file != null && file.charAt(0) !== '!';
}
exports.getCommonPath = function (filePath) {
if (Array.isArray(filePath)) {
filePath = filePath
.filter(notNullOrExclusion)
.map(this.getCommonPath.bind(this));
return commondir(filePath);
}
var globStartIndex = filePath.indexOf('*');
if (globStartIndex !== -1) {
filePath = filePath.substring(0, globStartIndex + 1);
} else if (fs.existsSync(filePath) && fs.statSync(filePath).isDirectory()) {
return filePath;
}
return path.dirname(filePath);
};
exports.globify = function (filePath) {
if (Array.isArray(filePath)) {
return filePath.reduce((memo, pattern) => memo.concat(this.globify(pattern)), []);
}
if (glob.hasMagic(filePath)) {
return filePath;
}
if (!fs.existsSync(filePath)) {
// The target of a pattern who's not a glob and doesn't match an existing
// entity on the disk is ambiguous. As such, match both files and directories.
return [
filePath,
path.join(filePath, '**')
];
}
var fsStats = fs.statSync(filePath);
if (fsStats.isFile()) {
return filePath;
}
if (fsStats.isDirectory()) {
return path.join(filePath, '**');
}
throw new Error('Only file path or directory path are supported.');
};