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
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.');
|
|
};
|
|
|