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.
70 lines
1.7 KiB
70 lines
1.7 KiB
'use strict'; |
|
|
|
var path = require('path'); |
|
var isNegated = require('is-negated-glob'); |
|
var isAbsolute = require('is-absolute'); |
|
|
|
module.exports = function(glob, options) { |
|
// default options |
|
var opts = options || {}; |
|
|
|
// ensure cwd is absolute |
|
var cwd = path.resolve(opts.cwd ? opts.cwd : process.cwd()); |
|
cwd = unixify(cwd); |
|
|
|
var rootDir = opts.root; |
|
// if `options.root` is defined, ensure it's absolute |
|
if (rootDir) { |
|
rootDir = unixify(rootDir); |
|
if (process.platform === 'win32' || !isAbsolute(rootDir)) { |
|
rootDir = unixify(path.resolve(rootDir)); |
|
} |
|
} |
|
|
|
// trim starting ./ from glob patterns |
|
if (glob.slice(0, 2) === './') { |
|
glob = glob.slice(2); |
|
} |
|
|
|
// when the glob pattern is only a . use an empty string |
|
if (glob.length === 1 && glob === '.') { |
|
glob = ''; |
|
} |
|
|
|
// store last character before glob is modified |
|
var suffix = glob.slice(-1); |
|
|
|
// check to see if glob is negated (and not a leading negated-extglob) |
|
var ing = isNegated(glob); |
|
glob = ing.pattern; |
|
|
|
// make glob absolute |
|
if (rootDir && glob.charAt(0) === '/') { |
|
glob = join(rootDir, glob); |
|
} else if (!isAbsolute(glob) || glob.slice(0, 1) === '\\') { |
|
glob = join(cwd, glob); |
|
} |
|
|
|
// if glob had a trailing `/`, re-add it now in case it was removed |
|
if (suffix === '/' && glob.slice(-1) !== '/') { |
|
glob += '/'; |
|
} |
|
|
|
// re-add leading `!` if it was removed |
|
return ing.negated ? '!' + glob : glob; |
|
}; |
|
|
|
function unixify(filepath) { |
|
return filepath.replace(/\\/g, '/'); |
|
} |
|
|
|
function join(dir, glob) { |
|
if (dir.charAt(dir.length - 1) === '/') { |
|
dir = dir.slice(0, -1); |
|
} |
|
if (glob.charAt(0) === '/') { |
|
glob = glob.slice(1); |
|
} |
|
if (!glob) return dir; |
|
return dir + '/' + glob; |
|
}
|
|
|