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.1 KiB
59 lines
1.1 KiB
'use strict'; |
|
|
|
var path = require('path'); |
|
var findIndex = require('find-index'); |
|
|
|
var flattenGlob = function(arr){ |
|
var out = []; |
|
var flat = true; |
|
for(var i = 0; i < arr.length; i++) { |
|
if (typeof arr[i] !== 'string') { |
|
flat = false; |
|
break; |
|
} |
|
out.push(arr[i]); |
|
} |
|
|
|
// last one is a file or specific dir |
|
// so we pop it off |
|
if (flat) { |
|
out.pop(); |
|
} |
|
return out; |
|
}; |
|
|
|
var flattenExpansion = function(set) { |
|
var first = set[0]; |
|
var toCompare = set.slice(1); |
|
|
|
// find index where the diff is |
|
var idx = findIndex(first, function(v, idx){ |
|
if (typeof v !== 'string') { |
|
return true; |
|
} |
|
|
|
var matched = toCompare.every(function(arr){ |
|
return v === arr[idx]; |
|
}); |
|
|
|
return !matched; |
|
}); |
|
|
|
return first.slice(0, idx); |
|
}; |
|
|
|
var setToBase = function(set) { |
|
// normal something/*.js |
|
if (set.length <= 1) { |
|
return flattenGlob(set[0]); |
|
} |
|
// has expansion |
|
return flattenExpansion(set); |
|
}; |
|
|
|
module.exports = function(glob) { |
|
var set = glob.minimatch.set; |
|
var baseParts = setToBase(set); |
|
var basePath = path.normalize(baseParts.join(path.sep))+path.sep; |
|
return basePath; |
|
};
|
|
|