1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- '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;
- };
|