diff options
Diffstat (limited to 'node_modules/glob2base/index.js')
-rw-r--r-- | node_modules/glob2base/index.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/node_modules/glob2base/index.js b/node_modules/glob2base/index.js new file mode 100644 index 000000000..307e3f27c --- /dev/null +++ b/node_modules/glob2base/index.js @@ -0,0 +1,59 @@ +'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; +}; |