"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createIgnoreMatcher = createIgnoreMatcher; // eslint-disable-next-line @typescript-eslint/no-require-imports const picomatch = require("picomatch"); /** * Normalizes a pattern to ensure it matches files within directories. * If a pattern doesn't contain glob characters, it's treated as a directory * and `/**` is appended to match all files within it. * * @param pattern - The pattern to normalize * @returns The normalized pattern */ function normalizePattern(pattern) { // If pattern already contains glob characters, use as-is if (pattern.includes('*') || pattern.includes('?') || pattern.includes('[')) { return pattern; } // Otherwise, treat as a directory and match all files within // Remove trailing slash if present, then append /** const normalized = pattern.replace(/\/+$/, ''); return `${normalized}/**`; } /** * Creates a function that returns true if a file should be ignored. * A file is ignored if: * - It matches any exclude pattern, OR * - It does NOT match any include pattern * * This replicates the behavior of chokidar v3's glob pattern support. * * @param options - The include and exclude patterns * @returns A function that takes a file path and returns true if it should be ignored */ function createIgnoreMatcher(options) { const includePatterns = options.include && options.include.length > 0 ? options.include.map(normalizePattern) : ['**']; const excludePatterns = (options.exclude ?? []).map(normalizePattern); const rootDir = options.rootDir ? options.rootDir.replace(/\\/g, '/').replace(/\/+$/, '') : undefined; // Compile patterns into matchers for better performance const picomatchOptions = { dot: true, // Match dotfiles when pattern explicitly includes them }; const includeMatcher = picomatch(includePatterns, picomatchOptions); const excludeMatcher = excludePatterns.length > 0 ? picomatch(excludePatterns, picomatchOptions) : () => false; return (filePath) => { // Normalize path separators for cross-platform compatibility let normalizedPath = filePath.replace(/\\/g, '/'); // If rootDir is provided and the path appears to be absolute, make it relative // This is necessary because chokidar v4 passes absolute paths to the // ignored callback even when a cwd is specified if (rootDir) { if (normalizedPath.startsWith(rootDir + '/')) { normalizedPath = normalizedPath.slice(rootDir.length + 1); } else if (normalizedPath === rootDir) { // The root directory itself - don't ignore it return false; } } // A file is ignored if: // 1. It matches any exclude pattern, OR // 2. It does NOT match any include pattern if (excludeMatcher(normalizedPath)) { return true; // Ignore: matches exclude } if (!includeMatcher(normalizedPath)) { return true; // Ignore: doesn't match include } return false; // Don't ignore: matches include and doesn't match exclude }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYi1tYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2xvYi1tYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeURBLGtEQThDQztBQXZHRCxpRUFBaUU7QUFDakUsdUNBQXdDO0FBMEJ4Qzs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFlO0lBQ3ZDLHlEQUF5RDtJQUN6RCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUUsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELDZEQUE2RDtJQUM3RCxvREFBb0Q7SUFDcEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0MsT0FBTyxHQUFHLFVBQVUsS0FBSyxDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsT0FBMkI7SUFDN0QsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNYLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRXRHLHdEQUF3RDtJQUN4RCxNQUFNLGdCQUFnQixHQUErQjtRQUNuRCxHQUFHLEVBQUUsSUFBSSxFQUFFLHVEQUF1RDtLQUNuRSxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUMvQyxDQUFDLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQztRQUM5QyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBRWhCLE9BQU8sQ0FBQyxRQUFnQixFQUFXLEVBQUU7UUFDbkMsNkRBQTZEO1FBQzdELElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWxELCtFQUErRTtRQUMvRSxxRUFBcUU7UUFDckUsZ0RBQWdEO1FBQ2hELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLGNBQWMsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQztpQkFBTSxJQUFJLGNBQWMsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDdEMsOENBQThDO2dCQUM5QyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLHdDQUF3QztRQUN4QywyQ0FBMkM7UUFDM0MsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxDQUFDLDBCQUEwQjtRQUN6QyxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQy9DLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxDQUFDLDBEQUEwRDtJQUMxRSxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmltcG9ydCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIGdsb2IgbWF0Y2hlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JNYXRjaGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQYXR0ZXJucyBmb3IgZmlsZXMgdG8gaW5jbHVkZSAoZ2xvYiBwYXR0ZXJucylcbiAgICogQGRlZmF1bHQgWycqKiddIC0gbWF0Y2ggYWxsIGZpbGVzXG4gICAqL1xuICBpbmNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdHRlcm5zIGZvciBmaWxlcyB0byBleGNsdWRlIChnbG9iIHBhdHRlcm5zKVxuICAgKi9cbiAgZXhjbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIG1hdGNoaW5nLiBJZiBwcm92aWRlZCwgYWJzb2x1dGUgcGF0aHMgd2lsbCBiZVxuICAgKiBjb252ZXJ0ZWQgdG8gcmVsYXRpdmUgcGF0aHMgYmVmb3JlIG1hdGNoaW5nIGFnYWluc3QgcGF0dGVybnMuXG4gICAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgY2hva2lkYXIgdjQgcGFzc2VzIGFic29sdXRlIHBhdGhzIHRvIHRoZVxuICAgKiBpZ25vcmVkIGNhbGxiYWNrIGV2ZW4gd2hlbiBhIGN3ZCBpcyBzcGVjaWZpZWQuXG4gICAqL1xuICByb290RGlyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwYXR0ZXJuIHRvIGVuc3VyZSBpdCBtYXRjaGVzIGZpbGVzIHdpdGhpbiBkaXJlY3Rvcmllcy5cbiAqIElmIGEgcGF0dGVybiBkb2Vzbid0IGNvbnRhaW4gZ2xvYiBjaGFyYWN0ZXJzLCBpdCdzIHRyZWF0ZWQgYXMgYSBkaXJlY3RvcnlcbiAqIGFuZCBgLyoqYCBpcyBhcHBlbmRlZCB0byBtYXRjaCBhbGwgZmlsZXMgd2l0aGluIGl0LlxuICpcbiAqIEBwYXJhbSBwYXR0ZXJuIC0gVGhlIHBhdHRlcm4gdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXR0ZXJuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gSWYgcGF0dGVybiBhbHJlYWR5IGNvbnRhaW5zIGdsb2IgY2hhcmFjdGVycywgdXNlIGFzLWlzXG4gIGlmIChwYXR0ZXJuLmluY2x1ZGVzKCcqJykgfHwgcGF0dGVybi5pbmNsdWRlcygnPycpIHx8IHBhdHRlcm4uaW5jbHVkZXMoJ1snKSkge1xuICAgIHJldHVybiBwYXR0ZXJuO1xuICB9XG4gIC8vIE90aGVyd2lzZSwgdHJlYXQgYXMgYSBkaXJlY3RvcnkgYW5kIG1hdGNoIGFsbCBmaWxlcyB3aXRoaW5cbiAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIHByZXNlbnQsIHRoZW4gYXBwZW5kIC8qKlxuICBjb25zdCBub3JtYWxpemVkID0gcGF0dGVybi5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgcmV0dXJuIGAke25vcm1hbGl6ZWR9LyoqYDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgYSBmaWxlIHNob3VsZCBiZSBpZ25vcmVkLlxuICogQSBmaWxlIGlzIGlnbm9yZWQgaWY6XG4gKiAtIEl0IG1hdGNoZXMgYW55IGV4Y2x1ZGUgcGF0dGVybiwgT1JcbiAqIC0gSXQgZG9lcyBOT1QgbWF0Y2ggYW55IGluY2x1ZGUgcGF0dGVyblxuICpcbiAqIFRoaXMgcmVwbGljYXRlcyB0aGUgYmVoYXZpb3Igb2YgY2hva2lkYXIgdjMncyBnbG9iIHBhdHRlcm4gc3VwcG9ydC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBpbmNsdWRlIGFuZCBleGNsdWRlIHBhdHRlcm5zXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBmaWxlIHBhdGggYW5kIHJldHVybnMgdHJ1ZSBpZiBpdCBzaG91bGQgYmUgaWdub3JlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSWdub3JlTWF0Y2hlcihvcHRpb25zOiBHbG9iTWF0Y2hlck9wdGlvbnMpOiAoZmlsZVBhdGg6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIGNvbnN0IGluY2x1ZGVQYXR0ZXJucyA9IG9wdGlvbnMuaW5jbHVkZSAmJiBvcHRpb25zLmluY2x1ZGUubGVuZ3RoID4gMFxuICAgID8gb3B0aW9ucy5pbmNsdWRlLm1hcChub3JtYWxpemVQYXR0ZXJuKVxuICAgIDogWycqKiddO1xuICBjb25zdCBleGNsdWRlUGF0dGVybnMgPSAob3B0aW9ucy5leGNsdWRlID8/IFtdKS5tYXAobm9ybWFsaXplUGF0dGVybik7XG4gIGNvbnN0IHJvb3REaXIgPSBvcHRpb25zLnJvb3REaXIgPyBvcHRpb25zLnJvb3REaXIucmVwbGFjZSgvXFxcXC9nLCAnLycpLnJlcGxhY2UoL1xcLyskLywgJycpIDogdW5kZWZpbmVkO1xuXG4gIC8vIENvbXBpbGUgcGF0dGVybnMgaW50byBtYXRjaGVycyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gIGNvbnN0IHBpY29tYXRjaE9wdGlvbnM6IHBpY29tYXRjaC5QaWNvbWF0Y2hPcHRpb25zID0ge1xuICAgIGRvdDogdHJ1ZSwgLy8gTWF0Y2ggZG90ZmlsZXMgd2hlbiBwYXR0ZXJuIGV4cGxpY2l0bHkgaW5jbHVkZXMgdGhlbVxuICB9O1xuXG4gIGNvbnN0IGluY2x1ZGVNYXRjaGVyID0gcGljb21hdGNoKGluY2x1ZGVQYXR0ZXJucywgcGljb21hdGNoT3B0aW9ucyk7XG4gIGNvbnN0IGV4Y2x1ZGVNYXRjaGVyID0gZXhjbHVkZVBhdHRlcm5zLmxlbmd0aCA+IDBcbiAgICA/IHBpY29tYXRjaChleGNsdWRlUGF0dGVybnMsIHBpY29tYXRjaE9wdGlvbnMpXG4gICAgOiAoKSA9PiBmYWxzZTtcblxuICByZXR1cm4gKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAvLyBOb3JtYWxpemUgcGF0aCBzZXBhcmF0b3JzIGZvciBjcm9zcy1wbGF0Zm9ybSBjb21wYXRpYmlsaXR5XG4gICAgbGV0IG5vcm1hbGl6ZWRQYXRoID0gZmlsZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgLy8gSWYgcm9vdERpciBpcyBwcm92aWRlZCBhbmQgdGhlIHBhdGggYXBwZWFycyB0byBiZSBhYnNvbHV0ZSwgbWFrZSBpdCByZWxhdGl2ZVxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgY2hva2lkYXIgdjQgcGFzc2VzIGFic29sdXRlIHBhdGhzIHRvIHRoZVxuICAgIC8vIGlnbm9yZWQgY2FsbGJhY2sgZXZlbiB3aGVuIGEgY3dkIGlzIHNwZWNpZmllZFxuICAgIGlmIChyb290RGlyKSB7XG4gICAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChyb290RGlyICsgJy8nKSkge1xuICAgICAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnNsaWNlKHJvb3REaXIubGVuZ3RoICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRQYXRoID09PSByb290RGlyKSB7XG4gICAgICAgIC8vIFRoZSByb290IGRpcmVjdG9yeSBpdHNlbGYgLSBkb24ndCBpZ25vcmUgaXRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEEgZmlsZSBpcyBpZ25vcmVkIGlmOlxuICAgIC8vIDEuIEl0IG1hdGNoZXMgYW55IGV4Y2x1ZGUgcGF0dGVybiwgT1JcbiAgICAvLyAyLiBJdCBkb2VzIE5PVCBtYXRjaCBhbnkgaW5jbHVkZSBwYXR0ZXJuXG4gICAgaWYgKGV4Y2x1ZGVNYXRjaGVyKG5vcm1hbGl6ZWRQYXRoKSkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIElnbm9yZTogbWF0Y2hlcyBleGNsdWRlXG4gICAgfVxuXG4gICAgaWYgKCFpbmNsdWRlTWF0Y2hlcihub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBJZ25vcmU6IGRvZXNuJ3QgbWF0Y2ggaW5jbHVkZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTsgLy8gRG9uJ3QgaWdub3JlOiBtYXRjaGVzIGluY2x1ZGUgYW5kIGRvZXNuJ3QgbWF0Y2ggZXhjbHVkZVxuICB9O1xufVxuIl19