{"version":3,"file":"buildComponentFilesList.mjs","names":[],"sources":["../../../src/utils/buildComponentFilesList.ts"],"sourcesContent":["import { isAbsolute, normalize, relative, resolve } from 'node:path';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport fg from 'fast-glob';\n\n/**\n * Normalizes a pattern value to an array\n */\nconst normalizeToArray = <T>(value: T | T[]): T[] =>\n  Array.isArray(value) ? value : [value];\n\n/**\n * Remove directories that are subdirectories of others in the list so files\n * are never scanned twice.\n * Example: ['/root', '/root/src'] → ['/root']\n */\nconst getDistinctRootDirs = (dirs: string[]): string[] => {\n  const uniqueDirs = Array.from(new Set(dirs.map((dir) => resolve(dir))));\n  uniqueDirs.sort((a, b) => a.length - b.length);\n\n  return uniqueDirs.reduce((acc: string[], dir) => {\n    const isNested = acc.some((parent) => {\n      const rel = relative(parent, dir);\n\n      return !rel.startsWith('..') && !isAbsolute(rel) && rel !== '';\n    });\n    if (!isNested) acc.push(dir);\n\n    return acc;\n  }, []);\n};\n\n/**\n * Builds a deduplicated list of absolute file paths matching the given patterns.\n *\n * Handles multiple root directories (deduplicates overlapping roots), exclude\n * patterns, negation patterns embedded in `transformPattern`, and optional\n * dot-file inclusion.\n *\n * @example\n * // Single root with excludes\n * const files = buildComponentFilesList({\n *   transformPattern: 'src/**\\/*.{ts,tsx}',\n *   excludePattern: ['**\\/node_modules\\/**'],\n *   baseDir: '/path/to/project',\n * });\n *\n * @example\n * // Multiple roots (e.g. baseDir + codeDir), dot files included\n * const files = buildComponentFilesList(config, ['**\\/node_modules\\/**']);\n */\nexport const buildComponentFilesList = (\n  config: IntlayerConfig,\n  excludePattern?: string[]\n): string[] => {\n  const transformPattern = config.build.traversePattern;\n  const compilerTransformPattern = config.compiler.transformPattern;\n  const contentDeclarationPattern = config.content.fileExtensions.map(\n    (ext) => `/**/*${ext}`\n  );\n\n  const patterns = [\n    ...transformPattern,\n    ...normalizeToArray(compilerTransformPattern),\n  ]\n    .filter((pattern) => typeof pattern === 'string')\n    .filter((pattern) => !pattern.startsWith('!'))\n    .map((pattern) => normalize(pattern)); // Ensure it works with Windows\n\n  const excludePatterns = [\n    ...(excludePattern ?? []),\n    ...contentDeclarationPattern,\n    // Treat negation entries in transformPattern as additional excludes\n    ...transformPattern\n      .filter(\n        (pattern) => typeof pattern === 'string' && pattern.startsWith('!')\n      )\n      .map((pattern) => pattern.slice(1)),\n  ]\n    .filter((pattern) => typeof pattern === 'string')\n    .map((pattern) => normalize(pattern)); // Ensure it works with Windows\n\n  const roots = getDistinctRootDirs([\n    config.system.baseDir,\n    ...config.content.codeDir,\n  ]);\n\n  const fileList = roots.flatMap((root) =>\n    fg.sync(patterns, {\n      cwd: root,\n      ignore: excludePatterns,\n      absolute: true,\n      dot: true, // include dot files like .next / .intlayer\n    })\n  );\n\n  return Array.from(new Set(fileList));\n};\n"],"mappings":";;;;;;;AAOA,MAAM,oBAAuB,UAC3B,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;;;;;;AAOvC,MAAM,uBAAuB,SAA6B;CACxD,MAAM,aAAa,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,QAAQ,QAAQ,GAAG,CAAC,CAAC,CAAC;CACtE,WAAW,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM;CAE7C,OAAO,WAAW,QAAQ,KAAe,QAAQ;EAM/C,IAAI,CALa,IAAI,MAAM,WAAW;GACpC,MAAM,MAAM,SAAS,QAAQ,GAAG;GAEhC,OAAO,CAAC,IAAI,WAAW,IAAI,KAAK,CAAC,WAAW,GAAG,KAAK,QAAQ;EAC9D,CACY,GAAG,IAAI,KAAK,GAAG;EAE3B,OAAO;CACT,GAAG,CAAC,CAAC;AACP;;;;;;;;;;;;;;;;;;;;AAqBA,MAAa,2BACX,QACA,mBACa;CACb,MAAM,mBAAmB,OAAO,MAAM;CACtC,MAAM,2BAA2B,OAAO,SAAS;CACjD,MAAM,4BAA4B,OAAO,QAAQ,eAAe,KAC7D,QAAQ,QAAQ,KACnB;CAEA,MAAM,WAAW,CACf,GAAG,kBACH,GAAG,iBAAiB,wBAAwB,CAC9C,EACG,QAAQ,YAAY,OAAO,YAAY,QAAQ,EAC/C,QAAQ,YAAY,CAAC,QAAQ,WAAW,GAAG,CAAC,EAC5C,KAAK,YAAY,UAAU,OAAO,CAAC;CAEtC,MAAM,kBAAkB;EACtB,GAAI,kBAAkB,CAAC;EACvB,GAAG;EAEH,GAAG,iBACA,QACE,YAAY,OAAO,YAAY,YAAY,QAAQ,WAAW,GAAG,CACpE,EACC,KAAK,YAAY,QAAQ,MAAM,CAAC,CAAC;CACtC,EACG,QAAQ,YAAY,OAAO,YAAY,QAAQ,EAC/C,KAAK,YAAY,UAAU,OAAO,CAAC;CAOtC,MAAM,WALQ,oBAAoB,CAChC,OAAO,OAAO,SACd,GAAG,OAAO,QAAQ,OACpB,CAEqB,EAAE,SAAS,SAC9B,GAAG,KAAK,UAAU;EAChB,KAAK;EACL,QAAQ;EACR,UAAU;EACV,KAAK;CACP,CAAC,CACH;CAEA,OAAO,MAAM,KAAK,IAAI,IAAI,QAAQ,CAAC;AACrC"}