1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.globToRegex = globToRegex;
- /**
- * 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.
- */
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#escaping
- const escapedChars = new Set(['$', '^', '+', '.', '*', '(', ')', '|', '\\', '?', '{', '}', '[', ']']);
- function globToRegex(glob) {
- const tokens = ['^'];
- let inGroup = false;
- for (let i = 0; i < glob.length; ++i) {
- const c = glob[i];
- if (c === '\\' && i + 1 < glob.length) {
- const char = glob[++i];
- tokens.push(escapedChars.has(char) ? '\\' + char : char);
- 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 '[':
- tokens.push('[');
- break;
- 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(escapedChars.has(c) ? '\\' + c : c);
- }
- }
- tokens.push('$');
- return new RegExp(tokens.join(''));
- }
|