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.
|
|
/*! * is-glob <https://github.com/jonschlinkert/is-glob>
* * Copyright (c) 2014-2017, Jon Schlinkert. * Released under the MIT License. */
var isExtglob = require('is-extglob'); var chars = { '{': '}', '(': ')', '[': ']'}; var strictCheck = function(str) { if (str[0] === '!') { return true; } var index = 0; var pipeIndex = -2; var closeSquareIndex = -2; var closeCurlyIndex = -2; var closeParenIndex = -2; var backSlashIndex = -2; while (index < str.length) { if (str[index] === '*') { return true; }
if (str[index + 1] === '?' && /[\].+)]/.test(str[index])) { return true; }
if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') { if (closeSquareIndex < index) { closeSquareIndex = str.indexOf(']', index); } if (closeSquareIndex > index) { if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { return true; } backSlashIndex = str.indexOf('\\', index); if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { return true; } } }
if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') { closeCurlyIndex = str.indexOf('}', index); if (closeCurlyIndex > index) { backSlashIndex = str.indexOf('\\', index); if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) { return true; } } }
if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') { closeParenIndex = str.indexOf(')', index); if (closeParenIndex > index) { backSlashIndex = str.indexOf('\\', index); if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { return true; } } }
if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') { if (pipeIndex < index) { pipeIndex = str.indexOf('|', index); } if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') { closeParenIndex = str.indexOf(')', pipeIndex); if (closeParenIndex > pipeIndex) { backSlashIndex = str.indexOf('\\', pipeIndex); if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { return true; } } } }
if (str[index] === '\\') { var open = str[index + 1]; index += 2; var close = chars[open];
if (close) { var n = str.indexOf(close, index); if (n !== -1) { index = n + 1; } }
if (str[index] === '!') { return true; } } else { index++; } } return false; };
var relaxedCheck = function(str) { if (str[0] === '!') { return true; } var index = 0; while (index < str.length) { if (/[*?{}()[\]]/.test(str[index])) { return true; }
if (str[index] === '\\') { var open = str[index + 1]; index += 2; var close = chars[open];
if (close) { var n = str.indexOf(close, index); if (n !== -1) { index = n + 1; } }
if (str[index] === '!') { return true; } } else { index++; } } return false; };
module.exports = function isGlob(str, options) { if (typeof str !== 'string' || str === '') { return false; }
if (isExtglob(str)) { return true; }
var check = strictCheck;
// optionally relax check
if (options && options.strict === false) { check = relaxedCheck; }
return check(str); };
|