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.
149 lines
3.1 KiB
149 lines
3.1 KiB
'use strict'; |
|
|
|
var win32 = process && process.platform === 'win32'; |
|
var path = require('path'); |
|
var fileRe = require('filename-regex'); |
|
var utils = module.exports; |
|
|
|
/** |
|
* Module dependencies |
|
*/ |
|
|
|
utils.diff = require('arr-diff'); |
|
utils.unique = require('array-unique'); |
|
utils.braces = require('braces'); |
|
utils.brackets = require('expand-brackets'); |
|
utils.extglob = require('extglob'); |
|
utils.isExtglob = require('is-extglob'); |
|
utils.isGlob = require('is-glob'); |
|
utils.typeOf = require('kind-of'); |
|
utils.normalize = require('normalize-path'); |
|
utils.omit = require('object.omit'); |
|
utils.parseGlob = require('parse-glob'); |
|
utils.cache = require('regex-cache'); |
|
|
|
/** |
|
* Get the filename of a filepath |
|
* |
|
* @param {String} `string` |
|
* @return {String} |
|
*/ |
|
|
|
utils.filename = function filename(fp) { |
|
var seg = fp.match(fileRe()); |
|
return seg && seg[0]; |
|
}; |
|
|
|
/** |
|
* Returns a function that returns true if the given |
|
* pattern is the same as a given `filepath` |
|
* |
|
* @param {String} `pattern` |
|
* @return {Function} |
|
*/ |
|
|
|
utils.isPath = function isPath(pattern, opts) { |
|
opts = opts || {}; |
|
return function(fp) { |
|
var unixified = utils.unixify(fp, opts); |
|
if(opts.nocase){ |
|
return pattern.toLowerCase() === unixified.toLowerCase(); |
|
} |
|
return pattern === unixified; |
|
}; |
|
}; |
|
|
|
/** |
|
* Returns a function that returns true if the given |
|
* pattern contains a `filepath` |
|
* |
|
* @param {String} `pattern` |
|
* @return {Function} |
|
*/ |
|
|
|
utils.hasPath = function hasPath(pattern, opts) { |
|
return function(fp) { |
|
return utils.unixify(pattern, opts).indexOf(fp) !== -1; |
|
}; |
|
}; |
|
|
|
/** |
|
* Returns a function that returns true if the given |
|
* pattern matches or contains a `filepath` |
|
* |
|
* @param {String} `pattern` |
|
* @return {Function} |
|
*/ |
|
|
|
utils.matchPath = function matchPath(pattern, opts) { |
|
var fn = (opts && opts.contains) |
|
? utils.hasPath(pattern, opts) |
|
: utils.isPath(pattern, opts); |
|
return fn; |
|
}; |
|
|
|
/** |
|
* Returns a function that returns true if the given |
|
* regex matches the `filename` of a file path. |
|
* |
|
* @param {RegExp} `re` |
|
* @return {Boolean} |
|
*/ |
|
|
|
utils.hasFilename = function hasFilename(re) { |
|
return function(fp) { |
|
var name = utils.filename(fp); |
|
return name && re.test(name); |
|
}; |
|
}; |
|
|
|
/** |
|
* Coerce `val` to an array |
|
* |
|
* @param {*} val |
|
* @return {Array} |
|
*/ |
|
|
|
utils.arrayify = function arrayify(val) { |
|
return !Array.isArray(val) |
|
? [val] |
|
: val; |
|
}; |
|
|
|
/** |
|
* Normalize all slashes in a file path or glob pattern to |
|
* forward slashes. |
|
*/ |
|
|
|
utils.unixify = function unixify(fp, opts) { |
|
if (opts && opts.unixify === false) return fp; |
|
if (opts && opts.unixify === true || win32 || path.sep === '\\') { |
|
return utils.normalize(fp, false); |
|
} |
|
if (opts && opts.unescape === true) { |
|
return fp ? fp.toString().replace(/\\(\w)/g, '$1') : ''; |
|
} |
|
return fp; |
|
}; |
|
|
|
/** |
|
* Escape/unescape utils |
|
*/ |
|
|
|
utils.escapePath = function escapePath(fp) { |
|
return fp.replace(/[\\.]/g, '\\$&'); |
|
}; |
|
|
|
utils.unescapeGlob = function unescapeGlob(fp) { |
|
return fp.replace(/[\\"']/g, ''); |
|
}; |
|
|
|
utils.escapeRe = function escapeRe(str) { |
|
return str.replace(/[-[\\$*+?.#^\s{}(|)\]]/g, '\\$&'); |
|
}; |
|
|
|
/** |
|
* Expose `utils` |
|
*/ |
|
|
|
module.exports = utils;
|
|
|