{"version":3,"file":"listDictionariesPath.cjs","names":[],"sources":["../../src/listDictionariesPath.ts"],"sourcesContent":["import { stat } from 'node:fs/promises';\nimport { normalizePath } from '@intlayer/config/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport fg from 'fast-glob';\n\n/**\n * List all dictionaries absolute paths in the project\n * @param configuration - The configuration object\n * @returns An array of dictionary paths\n */\nexport const listDictionaries = async (\n  configuration: IntlayerConfig\n): Promise<string[]> => {\n  const { fileExtensions, contentDir, excludedPath } = configuration.content;\n\n  const watchedFilesPatternWithPath = fileExtensions.flatMap((ext) =>\n    contentDir.map((dir) =>\n      `${normalizePath(dir)}/**/*${ext}`.replace('//', '/')\n    )\n  );\n\n  const filePromises = watchedFilesPatternWithPath.map(async (pattern) => {\n    // Identify the static part of the path (before any wildcards like *)\n    //    e.g. \"/Users/.../design-system/dist/esm/**/*.content.ts\" -> \"/Users/.../design-system/dist/esm/\"\n    const magicIndex = pattern.search(/[*?{}(]/);\n    const basePattern =\n      magicIndex > -1 ? pattern.slice(0, magicIndex) : pattern;\n\n    // Filter the global ignored list for this specific pattern\n    const applicableIgnore = excludedPath.filter((excludePattern) => {\n      // Heuristic: Extract the key directory name from the glob\n      // e.g. \"**/dist/**\" -> \"dist\", \"**/node_modules/**\" -> \"node_modules\"\n      const cleanName = excludePattern.replace(/\\*\\*/g, '').replace(/\\//g, '');\n\n      // If the explicit base path contains the excluded directory (e.g. \".../dist/...\"),\n      // we assume you explicitly want it, so we REMOVE it from the ignore list.\n      // We check for `/${cleanName}/` to ensure we match whole folder names.\n      if (cleanName && basePattern.includes(`/${cleanName}/`)) {\n        return false; // Drop this exclude rule\n      }\n\n      return true; // Keep this exclude rule\n    });\n\n    // Run fast-glob with the customized ignore list\n    return fg(pattern, {\n      ignore: applicableIgnore,\n      absolute: true,\n      dot: true,\n    });\n  });\n\n  const filesArrays = await Promise.all(filePromises);\n\n  // Flatten and deduplicate\n  const uniqueFiles = Array.from(new Set(filesArrays.flat()));\n\n  return uniqueFiles;\n};\n\nexport const listDictionariesWithStats = async (\n  configuration: IntlayerConfig\n) => {\n  const files = await listDictionaries(configuration);\n\n  return Promise.all(\n    files.map(async (file) => ({ path: file, stats: await stat(file) }))\n  );\n};\n"],"mappings":";;;;;;;;;;;;;AAUA,MAAa,mBAAmB,OAC9B,kBACsB;CACtB,MAAM,EAAE,gBAAgB,YAAY,iBAAiB,cAAc;CAQnE,MAAM,eAN8B,eAAe,SAAS,QAC1D,WAAW,KAAK,QACd,6CAAiB,GAAG,EAAE,OAAO,MAAM,QAAQ,MAAM,GAAG,CACtD,CAG6C,EAAE,IAAI,OAAO,YAAY;EAGtE,MAAM,aAAa,QAAQ,OAAO,SAAS;EAC3C,MAAM,cACJ,aAAa,KAAK,QAAQ,MAAM,GAAG,UAAU,IAAI;EAmBnD,8BAAU,SAAS;GACjB,QAjBuB,aAAa,QAAQ,mBAAmB;IAG/D,MAAM,YAAY,eAAe,QAAQ,SAAS,EAAE,EAAE,QAAQ,OAAO,EAAE;IAKvE,IAAI,aAAa,YAAY,SAAS,IAAI,UAAU,EAAE,GACpD,OAAO;IAGT,OAAO;GACT,CAIyB;GACvB,UAAU;GACV,KAAK;EACP,CAAC;CACH,CAAC;CAED,MAAM,cAAc,MAAM,QAAQ,IAAI,YAAY;CAKlD,OAFoB,MAAM,KAAK,IAAI,IAAI,YAAY,KAAK,CAAC,CAExC;AACnB;AAEA,MAAa,4BAA4B,OACvC,kBACG;CACH,MAAM,QAAQ,MAAM,iBAAiB,aAAa;CAElD,OAAO,QAAQ,IACb,MAAM,IAAI,OAAO,UAAU;EAAE,MAAM;EAAM,OAAO,iCAAW,IAAI;CAAE,EAAE,CACrE;AACF"}