UNPKG

1.62 kBJavaScriptView Raw
1'use strict';
2
3var path = require('path');
4var fileRe = require('filename-regex');
5var win32 = process.platform === 'win32';
6var win;
7
8var utils = module.exports;
9
10utils.filename = function filename(fp) {
11 var seg = fp.match(fileRe());
12 return seg && seg[0];
13};
14
15utils.isPath = function isPath(pattern) {
16 return function (fp) {
17 return fp === pattern;
18 };
19};
20
21utils.hasPath = function hasPath(pattern) {
22 return function (fp) {
23 return fp.indexOf(pattern) !== -1;
24 };
25};
26
27utils.matchPath = function matchPath(pattern, opts) {
28 var fn = (opts && opts.contains)
29 ? utils.hasPath(pattern)
30 : utils.isPath(pattern);
31 return fn;
32};
33
34utils.hasFilename = function hasFilename(re) {
35 return function (fp) {
36 var name = utils.filename(fp);
37 return name && re.test(name);
38 };
39};
40
41/**
42 * Coerce `val` to an array
43 *
44 * @param {*} val
45 * @return {Array}
46 */
47
48utils.arrayify = function arrayify(val) {
49 return !Array.isArray(val)
50 ? [val]
51 : val;
52};
53
54/**
55 * Convert a file path to a unix path.
56 */
57
58utils.unixify = function unixify(fp, opts) {
59 if (opts && opts.unixify === true) {
60 win = true;
61 } else if (opts && opts.cache && typeof win === 'undefined') {
62 win = win32 || path.sep === '\\';
63 }
64 if (win) {
65 return fp.replace(/[\\\/]+/g, '/');
66 }
67 return fp;
68};
69
70/**
71 * Escape/unescape utils
72 */
73
74utils.escapePath = function escapePath(fp) {
75 return fp.replace(/[\\.]/g, '\\$&');
76};
77
78utils.unescapeGlob = function unescapeGlob(fp) {
79 return fp.replace(/[\\"']/g, '');
80};
81
82utils.escapeRe = function escapeRe(str) {
83 return str.replace(/[-[\\$*+?.#^\s{}(|)\]]/g, '\\$&');
84};