mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
74 lines
1.9 KiB
TypeScript
74 lines
1.9 KiB
TypeScript
![]() |
/**
|
||
|
* Copyright (c) Microsoft Corporation.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
const escapeGlobChars = new Set(['/', '$', '^', '+', '.', '(', ')', '=', '!', '|']);
|
||
|
|
||
|
export function globToRegex(glob: string): RegExp {
|
||
|
const tokens = ['^'];
|
||
|
let inGroup;
|
||
|
for (let i = 0; i < glob.length; ++i) {
|
||
|
const c = glob[i];
|
||
|
if (escapeGlobChars.has(c)) {
|
||
|
tokens.push('\\' + c);
|
||
|
continue;
|
||
|
}
|
||
|
if (c === '*') {
|
||
|
const beforeDeep = glob[i - 1];
|
||
|
let starCount = 1;
|
||
|
while (glob[i + 1] === '*') {
|
||
|
starCount++;
|
||
|
i++;
|
||
|
}
|
||
|
const afterDeep = glob[i + 1];
|
||
|
const isDeep = starCount > 1 &&
|
||
|
(beforeDeep === '/' || beforeDeep === undefined) &&
|
||
|
(afterDeep === '/' || afterDeep === undefined);
|
||
|
if (isDeep) {
|
||
|
tokens.push('((?:[^/]*(?:\/|$))*)');
|
||
|
i++;
|
||
|
} else {
|
||
|
tokens.push('([^/]*)');
|
||
|
}
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
switch (c) {
|
||
|
case '?':
|
||
|
tokens.push('.');
|
||
|
break;
|
||
|
case '{':
|
||
|
inGroup = true;
|
||
|
tokens.push('(');
|
||
|
break;
|
||
|
case '}':
|
||
|
inGroup = false;
|
||
|
tokens.push(')');
|
||
|
break;
|
||
|
case ',':
|
||
|
if (inGroup) {
|
||
|
tokens.push('|');
|
||
|
break;
|
||
|
}
|
||
|
tokens.push('\\' + c);
|
||
|
break;
|
||
|
default:
|
||
|
tokens.push(c);
|
||
|
}
|
||
|
}
|
||
|
tokens.push('$');
|
||
|
return new RegExp(tokens.join(''));
|
||
|
}
|