2022-11-10 10:43:16 +00:00
"use strict" ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
function _defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } }
function _createClass ( Constructor , protoProps , staticProps ) { if ( protoProps ) _defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) _defineProperties ( Constructor , staticProps ) ; return Constructor ; }
2020-08-25 23:57:08 +00:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
// A simple implementation of make-array
2022-11-10 10:43:16 +00:00
function makeArray ( subject ) {
2020-08-25 23:57:08 +00:00
return Array . isArray ( subject ) ? subject : [ subject ] ;
}
2022-11-10 10:43:16 +00:00
var EMPTY = '' ;
var SPACE = ' ' ;
var ESCAPE = '\\' ;
var REGEX _TEST _BLANK _LINE = /^\s+$/ ;
var REGEX _REPLACE _LEADING _EXCAPED _EXCLAMATION = /^\\!/ ;
var REGEX _REPLACE _LEADING _EXCAPED _HASH = /^\\#/ ;
var REGEX _SPLITALL _CRLF = /\r?\n/g ; // /foo,
// ./foo,
// ../foo,
// .
// ..
var REGEX _TEST _INVALID _PATH = /^\.*\/|^\.+$/ ;
2020-08-25 23:57:08 +00:00
var SLASH = '/' ;
2022-11-10 10:43:16 +00:00
var KEY _IGNORE = typeof Symbol !== 'undefined' ? Symbol [ "for" ] ( 'node-ignore' )
2020-08-25 23:57:08 +00:00
/* istanbul ignore next */
: 'node-ignore' ;
var define = function define ( object , key , value ) {
2022-11-10 10:43:16 +00:00
return Object . defineProperty ( object , key , {
value : value
} ) ;
2020-08-25 23:57:08 +00:00
} ;
var REGEX _REGEXP _RANGE = /([0-z])-([0-z])/g ;
2022-11-10 10:43:16 +00:00
var RETURN _FALSE = function RETURN _FALSE ( ) {
return false ;
} ; // Sanitize the range of a regular expression
2020-08-25 23:57:08 +00:00
// The cases are complicated, see test cases for details
2022-11-10 10:43:16 +00:00
2020-08-25 23:57:08 +00:00
var sanitizeRange = function sanitizeRange ( range ) {
return range . replace ( REGEX _REGEXP _RANGE , function ( match , from , to ) {
2022-11-10 10:43:16 +00:00
return from . charCodeAt ( 0 ) <= to . charCodeAt ( 0 ) ? match // Invalid range (out of order) which is ok for gitignore rules but
2020-08-25 23:57:08 +00:00
// fatal for JavaScript regular expression, so eliminate it.
2022-11-10 10:43:16 +00:00
: EMPTY ;
2020-08-25 23:57:08 +00:00
} ) ;
2022-11-10 10:43:16 +00:00
} ; // See fixtures #59
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
var cleanRangeBackSlash = function cleanRangeBackSlash ( slashes ) {
var length = slashes . length ;
return slashes . slice ( 0 , length - length % 2 ) ;
} ; // > If the pattern ends with a slash,
2020-08-25 23:57:08 +00:00
// > it is removed for the purpose of the following description,
// > but it would only find a match with a directory.
// > In other words, foo/ will match a directory foo and paths underneath it,
// > but will not match a regular file or a symbolic link foo
// > (this is consistent with the way how pathspec works in general in Git).
// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'
// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call
// you could use option `mark: true` with `glob`
// '`foo/`' should not continue with the '`..`'
2022-11-10 10:43:16 +00:00
var REPLACERS = [ // > Trailing spaces are ignored unless they are quoted with backslash ("\")
[ // (a\ ) -> (a )
2020-08-25 23:57:08 +00:00
// (a ) -> (a)
// (a \ ) -> (a )
/\\?\s+$/ , function ( match ) {
2022-11-10 10:43:16 +00:00
return match . indexOf ( '\\' ) === 0 ? SPACE : EMPTY ;
} ] , // replace (\ ) with ' '
2020-08-25 23:57:08 +00:00
[ /\\\s/g , function ( ) {
2022-11-10 10:43:16 +00:00
return SPACE ;
} ] , // Escape metacharacters
2020-08-25 23:57:08 +00:00
// which is written down by users but means special for regular expressions.
// > There are 12 characters with special meanings:
// > - the backslash \,
// > - the caret ^,
// > - the dollar sign $,
// > - the period or dot .,
// > - the vertical bar or pipe symbol |,
// > - the question mark ?,
// > - the asterisk or star *,
// > - the plus sign +,
// > - the opening parenthesis (,
// > - the closing parenthesis ),
// > - and the opening square bracket [,
// > - the opening curly brace {,
// > These special characters are often called "metacharacters".
2022-11-10 10:43:16 +00:00
[ /[\\$.|*+(){^]/g , function ( match ) {
return "\\" . concat ( match ) ;
} ] , [ // > a question mark (?) matches a single character
2020-08-25 23:57:08 +00:00
/(?!\\)\?/g , function ( ) {
return '[^/]' ;
2022-11-10 10:43:16 +00:00
} ] , // leading slash
[ // > A leading slash matches the beginning of the pathname.
2020-08-25 23:57:08 +00:00
// > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
// A leading slash matches the beginning of the pathname
/^\// , function ( ) {
return '^' ;
2022-11-10 10:43:16 +00:00
} ] , // replace special metacharacter slash after the leading slash
2020-08-25 23:57:08 +00:00
[ /\//g , function ( ) {
return '\\/' ;
2022-11-10 10:43:16 +00:00
} ] , [ // > A leading "**" followed by a slash means match in all directories.
2020-08-25 23:57:08 +00:00
// > For example, "**/foo" matches file or directory "foo" anywhere,
// > the same as pattern "foo".
// > "**/foo/bar" matches file or directory "bar" anywhere that is directly
// > under directory "foo".
// Notice that the '*'s have been replaced as '\\*'
2022-11-10 10:43:16 +00:00
/^\^*\\\*\\\*\\\// , // '**/foo' <-> 'foo'
2020-08-25 23:57:08 +00:00
function ( ) {
return '^(?:.*\\/)?' ;
2022-11-10 10:43:16 +00:00
} ] , // starting
[ // there will be no leading '/'
2020-08-25 23:57:08 +00:00
// (which has been replaced by section "leading slash")
// If starts with '**', adding a '^' to the regular expression also works
/^(?=[^^])/ , function startingReplacer ( ) {
2022-11-10 10:43:16 +00:00
// If has a slash `/` at the beginning or middle
return ! /\/(?!$)/ . test ( this ) // > Prior to 2.22.1
2020-08-25 23:57:08 +00:00
// > If the pattern does not contain a slash /,
// > Git treats it as a shell glob pattern
// Actually, if there is only a trailing slash,
// git also treats it as a shell glob pattern
2022-11-10 10:43:16 +00:00
// After 2.22.1 (compatible but clearer)
// > If there is a separator at the beginning or middle (or both)
// > of the pattern, then the pattern is relative to the directory
// > level of the particular .gitignore file itself.
// > Otherwise the pattern may also match at any level below
// > the .gitignore level.
? '(?:^|\\/)' // > Otherwise, Git treats the pattern as a shell glob suitable for
2020-08-25 23:57:08 +00:00
// > consumption by fnmatch(3)
: '^' ;
2022-11-10 10:43:16 +00:00
} ] , // two globstars
[ // Use lookahead assertions so that we could match more than one `'/**'`
/\\\/\\\*\\\*(?=\\\/|$)/g , // Zero, one or several directories
2020-08-25 23:57:08 +00:00
// should not use '*', or it will be replaced by the next replacer
// Check if it is not the last `'/**'`
2022-11-10 10:43:16 +00:00
function ( _ , index , str ) {
return index + 6 < str . length // case: /**/
2020-08-25 23:57:08 +00:00
// > A slash followed by two consecutive asterisks then a slash matches
// > zero or more directories.
// > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on.
// '/**/'
2022-11-10 10:43:16 +00:00
? '(?:\\/[^\\/]+)*' // case: /**
2020-08-25 23:57:08 +00:00
// > A trailing `"/**"` matches everything inside.
// #21: everything inside but it should not include the current folder
: '\\/.+' ;
2022-11-10 10:43:16 +00:00
} ] , // intermediate wildcards
[ // Never replace escaped '*'
2020-08-25 23:57:08 +00:00
// ignore rule '\*' will match the path '*'
// 'abc.*/' -> go
// 'abc.*' -> skip this rule
2022-11-10 10:43:16 +00:00
/(^|[^\\]+)\\\*(?=.+)/g , // '*.js' matches '.js'
2020-08-25 23:57:08 +00:00
// '*.js' doesn't match 'abc'
2022-11-10 10:43:16 +00:00
function ( _ , p1 ) {
return "" . concat ( p1 , "[^\\/]*" ) ;
} ] , [ // unescape, revert step 3 except for back slash
// For example, if a user escape a '\\*',
// after step 3, the result will be '\\\\\\*'
/\\\\\\(?=[$.|*+(){^])/g , function ( ) {
return ESCAPE ;
} ] , [ // '\\\\' -> '\\'
/\\\\/g , function ( ) {
return ESCAPE ;
} ] , [ // > The range notation, e.g. [a-zA-Z],
// > can be used to match one of the characters in a range.
// `\` is escaped by step 3
/(\\)?\[([^\]/]*?)(\\*)($|\])/g , function ( match , leadEscape , range , endEscape , close ) {
return leadEscape === ESCAPE // '\\[bar]' -> '\\\\[bar\\]'
? "\\[" . concat ( range ) . concat ( cleanRangeBackSlash ( endEscape ) ) . concat ( close ) : close === ']' ? endEscape . length % 2 === 0 // A normal case, and it is a range notation
// '[bar]'
// '[bar\\\\]'
? "[" . concat ( sanitizeRange ( range ) ) . concat ( endEscape , "]" ) // Invalid range notaton
// '[bar\\]' -> '[bar\\\\]'
: '[]' : '[]' ;
} ] , // ending
[ // 'js' will not match 'js.'
// 'ab' will not match 'abc'
/(?:[^*])$/ , // WTF!
// https://git-scm.com/docs/gitignore
// changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)
// which re-fixes #24, #38
// > If there is a separator at the end of the pattern then the pattern
// > will only match directories, otherwise the pattern can match both
// > files and directories.
// 'js*' will not match 'a.js'
// 'js/' will not match 'a.js'
// 'js' will match 'a.js' and 'a.js/'
function ( match ) {
return /\/$/ . test ( match ) // foo/ will not match 'foo'
? "" . concat ( match , "$" ) // foo matches 'foo' and 'foo/'
: "" . concat ( match , "(?=$|\\/$)" ) ;
} ] , // trailing wildcard
[ /(\^|\\\/)?\\\*$/ , function ( _ , p1 ) {
var prefix = p1 // '\^':
// '/*' does not match EMPTY
2020-08-25 23:57:08 +00:00
// '/*' does not match everything
// '\\\/':
// 'abc/*' does not match 'abc/'
2022-11-10 10:43:16 +00:00
? "" . concat ( p1 , "[^/]+" ) // 'a*' matches 'a'
2020-08-25 23:57:08 +00:00
// 'a*' matches 'aa'
: '[^/]*' ;
2022-11-10 10:43:16 +00:00
return "" . concat ( prefix , "(?=$|\\/$)" ) ;
} ] ] ; // A simple cache, because an ignore rule only has only one certain meaning
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
var regexCache = Object . create ( null ) ; // @param {pattern}
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
var makeRegex = function makeRegex ( pattern , ignoreCase ) {
var source = regexCache [ pattern ] ;
if ( ! source ) {
source = REPLACERS . reduce ( function ( prev , current ) {
return prev . replace ( current [ 0 ] , current [ 1 ] . bind ( pattern ) ) ;
} , pattern ) ;
regexCache [ pattern ] = source ;
2020-08-25 23:57:08 +00:00
}
2022-11-10 10:43:16 +00:00
return ignoreCase ? new RegExp ( source , 'i' ) : new RegExp ( source ) ;
} ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
var isString = function isString ( subject ) {
return typeof subject === 'string' ;
} ; // > A blank line matches no files, so it can serve as a separator for readability.
2020-08-25 23:57:08 +00:00
var checkPattern = function checkPattern ( pattern ) {
2022-11-10 10:43:16 +00:00
return pattern && isString ( pattern ) && ! REGEX _TEST _BLANK _LINE . test ( pattern ) // > A line starting with # serves as a comment.
2020-08-25 23:57:08 +00:00
&& pattern . indexOf ( '#' ) !== 0 ;
} ;
2022-11-10 10:43:16 +00:00
var splitPattern = function splitPattern ( pattern ) {
return pattern . split ( REGEX _SPLITALL _CRLF ) ;
} ;
var IgnoreRule = function IgnoreRule ( origin , pattern , negative , regex ) {
_classCallCheck ( this , IgnoreRule ) ;
this . origin = origin ;
this . pattern = pattern ;
this . negative = negative ;
this . regex = regex ;
} ;
var createRule = function createRule ( pattern , ignoreCase ) {
2020-08-25 23:57:08 +00:00
var origin = pattern ;
2022-11-10 10:43:16 +00:00
var negative = false ; // > An optional prefix "!" which negates the pattern;
2020-08-25 23:57:08 +00:00
if ( pattern . indexOf ( '!' ) === 0 ) {
negative = true ;
pattern = pattern . substr ( 1 ) ;
}
2022-11-10 10:43:16 +00:00
pattern = pattern // > Put a backslash ("\") in front of the first "!" for patterns that
2020-08-25 23:57:08 +00:00
// > begin with a literal "!", for example, `"\!important!.txt"`.
2022-11-10 10:43:16 +00:00
. replace ( REGEX _REPLACE _LEADING _EXCAPED _EXCLAMATION , '!' ) // > Put a backslash ("\") in front of the first hash for patterns that
2020-08-25 23:57:08 +00:00
// > begin with a hash.
2022-11-10 10:43:16 +00:00
. replace ( REGEX _REPLACE _LEADING _EXCAPED _HASH , '#' ) ;
var regex = makeRegex ( pattern , ignoreCase ) ;
return new IgnoreRule ( origin , pattern , negative , regex ) ;
} ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
var throwError = function throwError ( message , Ctor ) {
throw new Ctor ( message ) ;
} ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
var checkPath = function checkPath ( path , originalPath , doThrow ) {
if ( ! isString ( path ) ) {
return doThrow ( "path must be a string, but got `" . concat ( originalPath , "`" ) , TypeError ) ;
} // We don't know if we should ignore EMPTY, so throw
if ( ! path ) {
return doThrow ( "path must not be empty" , TypeError ) ;
} // Check if it is a relative path
if ( checkPath . isNotRelative ( path ) ) {
var r = '`path.relative()`d' ;
return doThrow ( "path should be a " . concat ( r , " string, but got \"" ) . concat ( originalPath , "\"" ) , RangeError ) ;
}
return true ;
2020-08-25 23:57:08 +00:00
} ;
2022-11-10 10:43:16 +00:00
var isNotRelative = function isNotRelative ( path ) {
return REGEX _TEST _INVALID _PATH . test ( path ) ;
} ;
checkPath . isNotRelative = isNotRelative ;
checkPath . convert = function ( p ) {
return p ;
} ;
var Ignore = /*#__PURE__*/ function ( ) {
function Ignore ( ) {
2020-08-25 23:57:08 +00:00
var _ref = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ,
_ref$ignorecase = _ref . ignorecase ,
2022-11-10 10:43:16 +00:00
ignorecase = _ref$ignorecase === void 0 ? true : _ref$ignorecase ,
_ref$ignoreCase = _ref . ignoreCase ,
ignoreCase = _ref$ignoreCase === void 0 ? ignorecase : _ref$ignoreCase ,
_ref$allowRelativePat = _ref . allowRelativePaths ,
allowRelativePaths = _ref$allowRelativePat === void 0 ? false : _ref$allowRelativePat ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
_classCallCheck ( this , Ignore ) ;
2020-08-25 23:57:08 +00:00
define ( this , KEY _IGNORE , true ) ;
2022-11-10 10:43:16 +00:00
this . _rules = [ ] ;
this . _ignoreCase = ignoreCase ;
this . _allowRelativePaths = allowRelativePaths ;
2020-08-25 23:57:08 +00:00
this . _initCache ( ) ;
}
2022-11-10 10:43:16 +00:00
_createClass ( Ignore , [ {
key : "_initCache" ,
2020-08-25 23:57:08 +00:00
value : function _initCache ( ) {
2022-11-10 10:43:16 +00:00
this . _ignoreCache = Object . create ( null ) ;
this . _testCache = Object . create ( null ) ;
2020-08-25 23:57:08 +00:00
}
2022-11-10 10:43:16 +00:00
} , {
key : "_addPattern" ,
value : function _addPattern ( pattern ) {
// #32
if ( pattern && pattern [ KEY _IGNORE ] ) {
this . _rules = this . _rules . concat ( pattern . _rules ) ;
this . _added = true ;
return ;
}
if ( checkPattern ( pattern ) ) {
var rule = createRule ( pattern , this . _ignoreCase ) ;
this . _added = true ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
this . _rules . push ( rule ) ;
}
} // @param {Array<string> | string | Ignore} pattern
2020-08-25 23:57:08 +00:00
} , {
2022-11-10 10:43:16 +00:00
key : "add" ,
2020-08-25 23:57:08 +00:00
value : function add ( pattern ) {
this . _added = false ;
2022-11-10 10:43:16 +00:00
makeArray ( isString ( pattern ) ? splitPattern ( pattern ) : pattern ) . forEach ( this . _addPattern , this ) ; // Some rules have just added to the ignore,
2020-08-25 23:57:08 +00:00
// making the behavior changed.
2022-11-10 10:43:16 +00:00
2020-08-25 23:57:08 +00:00
if ( this . _added ) {
this . _initCache ( ) ;
}
return this ;
2022-11-10 10:43:16 +00:00
} // legacy
2020-08-25 23:57:08 +00:00
} , {
2022-11-10 10:43:16 +00:00
key : "addPattern" ,
2020-08-25 23:57:08 +00:00
value : function addPattern ( pattern ) {
return this . add ( pattern ) ;
2022-11-10 10:43:16 +00:00
} // | ignored : unignored
// negative | 0:0 | 0:1 | 1:0 | 1:1
// -------- | ------- | ------- | ------- | --------
// 0 | TEST | TEST | SKIP | X
// 1 | TESTIF | SKIP | TEST | X
// - SKIP: always skip
// - TEST: always test
// - TESTIF: only test if checkUnignored
// - X: that never happen
// @param {boolean} whether should check if the path is unignored,
// setting `checkUnignored` to `false` could reduce additional
// path matching.
// @returns {TestResult} true if a file is ignored
2020-08-25 23:57:08 +00:00
} , {
2022-11-10 10:43:16 +00:00
key : "_testOne" ,
value : function _testOne ( path , checkUnignored ) {
var ignored = false ;
var unignored = false ;
this . _rules . forEach ( function ( rule ) {
var negative = rule . negative ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
if ( unignored === negative && ignored !== unignored || negative && ! ignored && ! unignored && ! checkUnignored ) {
return ;
}
var matched = rule . regex . test ( path ) ;
if ( matched ) {
ignored = ! negative ;
unignored = negative ;
}
2020-08-25 23:57:08 +00:00
} ) ;
2022-11-10 10:43:16 +00:00
return {
ignored : ignored ,
unignored : unignored
2020-08-25 23:57:08 +00:00
} ;
2022-11-10 10:43:16 +00:00
} // @returns {TestResult}
2020-08-25 23:57:08 +00:00
} , {
2022-11-10 10:43:16 +00:00
key : "_test" ,
value : function _test ( originalPath , cache , checkUnignored , slices ) {
var path = originalPath // Supports nullable path
&& checkPath . convert ( originalPath ) ;
checkPath ( path , originalPath , this . _allowRelativePaths ? RETURN _FALSE : throwError ) ;
return this . _t ( path , cache , checkUnignored , slices ) ;
2020-08-25 23:57:08 +00:00
}
} , {
2022-11-10 10:43:16 +00:00
key : "_t" ,
value : function _t ( path , cache , checkUnignored , slices ) {
if ( path in cache ) {
return cache [ path ] ;
2020-08-25 23:57:08 +00:00
}
if ( ! slices ) {
// path/to/a.js
// ['path', 'to', 'a.js']
slices = path . split ( SLASH ) ;
}
2022-11-10 10:43:16 +00:00
slices . pop ( ) ; // If the path has no parent directory, just test it
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
if ( ! slices . length ) {
return cache [ path ] = this . _testOne ( path , checkUnignored ) ;
}
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
var parent = this . _t ( slices . join ( SLASH ) + SLASH , cache , checkUnignored , slices ) ; // If the path contains a parent directory, check the parent first
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
return cache [ path ] = parent . ignored // > It is not possible to re-include a file if a parent directory of
// > that file is excluded.
? parent : this . _testOne ( path , checkUnignored ) ;
}
2020-08-25 23:57:08 +00:00
} , {
2022-11-10 10:43:16 +00:00
key : "ignores" ,
value : function ignores ( path ) {
return this . _test ( path , this . _ignoreCache , false ) . ignored ;
}
} , {
key : "createFilter" ,
value : function createFilter ( ) {
var _this = this ;
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
return function ( path ) {
return ! _this . ignores ( path ) ;
} ;
}
} , {
key : "filter" ,
value : function filter ( paths ) {
return makeArray ( paths ) . filter ( this . createFilter ( ) ) ;
} // @returns {TestResult}
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
} , {
key : "test" ,
value : function test ( path ) {
return this . _test ( path , this . _testCache , true ) ;
2020-08-25 23:57:08 +00:00
}
} ] ) ;
2022-11-10 10:43:16 +00:00
return Ignore ;
2020-08-25 23:57:08 +00:00
} ( ) ;
2022-11-10 10:43:16 +00:00
var factory = function factory ( options ) {
return new Ignore ( options ) ;
} ;
var isPathValid = function isPathValid ( path ) {
return checkPath ( path && checkPath . convert ( path ) , path , RETURN _FALSE ) ;
} ;
factory . isPathValid = isPathValid ; // Fixes typescript
factory [ "default" ] = factory ;
module . exports = factory ; // Windows
2020-08-25 23:57:08 +00:00
// --------------------------------------------------------------
2022-11-10 10:43:16 +00:00
/* istanbul ignore if */
2020-08-25 23:57:08 +00:00
2022-11-10 10:43:16 +00:00
if ( // Detect `process` so that it can run in browsers.
2020-08-25 23:57:08 +00:00
typeof process !== 'undefined' && ( process . env && process . env . IGNORE _TEST _WIN32 || process . platform === 'win32' ) ) {
/* eslint no-control-regex: "off" */
2022-11-10 10:43:16 +00:00
var makePosix = function makePosix ( str ) {
return /^\\\\\?\\/ . test ( str ) || /[\0-\x1F"<>\|]+/ . test ( str ) ? str : str . replace ( /\\/g , '/' ) ;
2020-08-25 23:57:08 +00:00
} ;
2022-11-10 10:43:16 +00:00
checkPath . convert = makePosix ; // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/'
// 'd:\\foo'
var REGIX _IS _WINDOWS _PATH _ABSOLUTE = /^[a-z]:\//i ;
checkPath . isNotRelative = function ( path ) {
return REGIX _IS _WINDOWS _PATH _ABSOLUTE . test ( path ) || isNotRelative ( path ) ;
2020-08-25 23:57:08 +00:00
} ;
}