123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.findMaxDepth = exports.findDirectoryPatterns = exports.findCommonRoots = void 0;
- // Glob Optimizations:
- // 1. Find common roots and only iterate on them
- // For example:
- // 1. "node_modules/**/*.ts" only requires us to search in node_modules
- // folder.
- // 2. Similarly, multiple glob patterns can have common deterministic roots
- // The optimizer's job is to find these roots and only crawl them.
- // 3. If any of the glob patterns have a globstar i.e. **/ in them, we
- // should bail out.
- // 2. Find out if glob is requesting only directories
- // 3. Find maximum depth requested
- // 4. If glob contains a root that doesn't exist, bail out
- const braces_1 = require("braces");
- const glob_parent_1 = __importDefault(require("glob-parent"));
- function findCommonRoots(patterns) {
- const allRoots = new Set();
- patterns = patterns.map((p) => (p.includes("{") ? (0, braces_1.expand)(p) : p)).flat();
- for (const pattern of patterns) {
- const parent = (0, glob_parent_1.default)(pattern);
- if (parent === ".")
- return [];
- allRoots.add(parent);
- }
- return Array.from(allRoots.values()).filter((root) => {
- for (const r of allRoots) {
- if (r === root)
- continue;
- if (root.startsWith(r))
- return false;
- }
- return true;
- });
- }
- exports.findCommonRoots = findCommonRoots;
- function findDirectoryPatterns(patterns) {
- return patterns.filter((p) => p.endsWith("/"));
- }
- exports.findDirectoryPatterns = findDirectoryPatterns;
- function findMaxDepth(patterns) {
- const isGlobstar = patterns.some((p) => p.includes("**/") || p.includes("/**") || p === "**");
- if (isGlobstar)
- return false;
- const maxDepth = patterns.reduce((depth, p) => {
- return Math.max(depth, p.split("/").filter(Boolean).length);
- }, 0);
- return maxDepth;
- }
- exports.findMaxDepth = findMaxDepth;
|