Disable the confirmation dialog when deleting files in the VS Code explorer to streamline the development workflow and reduce friction during file management operations.
151 lines
3.5 KiB
JavaScript
151 lines
3.5 KiB
JavaScript
/*!
|
|
* 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);
|
|
};
|