UNPKG

@intlayer/chokidar

Version:

Scans and builds Intlayer declaration files into dictionaries based on Intlayer configuration.

94 lines (92 loc) 4.46 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const require_runtime = require('../_virtual/_rolldown/runtime.cjs'); let node_path = require("node:path"); let fast_glob = require("fast-glob"); fast_glob = require_runtime.__toESM(fast_glob); let _intlayer_config_utils = require("@intlayer/config/utils"); let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues"); //#region src/utils/buildComponentFilesList.ts /** * Normalizes a pattern value to an array */ const normalizeToArray = (value) => Array.isArray(value) ? value : [value]; /** * Remove directories that are subdirectories of others in the list so files * are never scanned twice. * Example: ['/root', '/root/src'] → ['/root'] */ const getDistinctRootDirs = (dirs) => { const uniqueDirs = Array.from(new Set(dirs.map((dir) => (0, node_path.resolve)(dir)))); uniqueDirs.sort((a, b) => a.length - b.length); return uniqueDirs.reduce((acc, dir) => { if (!acc.some((parent) => { const rel = (0, node_path.relative)(parent, dir); return !rel.startsWith("..") && !(0, node_path.isAbsolute)(rel) && rel !== ""; })) acc.push(dir); return acc; }, []); }; /** * Returns true when the resolved path passes through a `node_modules` segment. * Works on both POSIX and Windows paths. */ const isInsideNodeModules = (dir) => (0, node_path.resolve)(dir).split(node_path.sep).includes("node_modules"); /** * Default exclude patterns derived from TRAVERSE_PATTERN. * Extracted once so the function body can reference them without re-computing. */ const DEFAULT_EXCLUDE_PATTERNS = _intlayer_config_defaultValues.TRAVERSE_PATTERN.filter((p) => typeof p === "string" && p.startsWith("!")).map((p) => p.slice(1)); /** * Builds a deduplicated list of absolute file paths matching the given patterns. * * Handles multiple root directories (deduplicates overlapping roots), exclude * patterns, negation patterns embedded in `traversePattern`, and optional * dot-file inclusion. * * Special case: `codeDir` entries that live inside `node_modules` (e.g. a * design-system package installed as a workspace dependency) are scanned as * their own explicit roots. They are NOT collapsed into the project root so * the `*\/node_modules\/**` exclusion does not silently drop them. * * @example * // Single root with excludes * const files = buildComponentFilesList(config); * * @example * // Design-system package inside node_modules is still scanned * // intlayer.config.ts: { content: { codeDir: ['node_modules/my-ds/src'] } } * const files = buildComponentFilesList(config); */ const buildComponentFilesList = (config, excludePattern) => { const traversePattern = config.build.traversePattern; const compilerTransformPattern = config.compiler.transformPattern; const contentDeclarationPattern = config.content.fileExtensions.map((ext) => `/**/*${ext}`); const patterns = [...traversePattern, ...normalizeToArray(compilerTransformPattern)].filter((pattern) => typeof pattern === "string").filter((pattern) => !pattern.startsWith("!")).map(_intlayer_config_utils.normalizePath); const userExcludes = traversePattern.filter((pattern) => typeof pattern === "string" && pattern.startsWith("!")).map((pattern) => pattern.slice(1)); const baseExcludePatterns = Array.from(new Set([ ...DEFAULT_EXCLUDE_PATTERNS, ...userExcludes, ...excludePattern ?? [], ...contentDeclarationPattern ])).filter((pattern) => typeof pattern === "string").map(_intlayer_config_utils.normalizePath); const resolvedCodeDirs = (config.content.codeDir ?? []).map((dir) => (0, node_path.resolve)(dir)); const inNodeModulesCodeDirs = resolvedCodeDirs.filter(isInsideNodeModules); const normalCodeDirs = resolvedCodeDirs.filter((dir) => !isInsideNodeModules(dir)); const normalFiles = getDistinctRootDirs([config.system.baseDir, ...normalCodeDirs]).flatMap((root) => fast_glob.default.sync(patterns, { cwd: root, ignore: baseExcludePatterns, absolute: true, dot: true })); const nodeModulesExcludePatterns = baseExcludePatterns.filter((pattern) => !pattern.includes("node_modules")); const nodeModulesFiles = inNodeModulesCodeDirs.flatMap((dir) => fast_glob.default.sync(patterns, { cwd: dir, ignore: nodeModulesExcludePatterns, absolute: true, dot: false })); return Array.from(new Set([...normalFiles, ...nodeModulesFiles])); }; //#endregion exports.buildComponentFilesList = buildComponentFilesList; //# sourceMappingURL=buildComponentFilesList.cjs.map