UNPKG

@intlayer/chokidar

Version:

Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.

39 lines (37 loc) 1.47 kB
import { stat } from "node:fs/promises"; import fg from "fast-glob"; import { normalizePath } from "@intlayer/config/utils"; //#region src/listDictionariesPath.ts /** * List all dictionaries absolute paths in the project * @param configuration - The configuration object * @returns An array of dictionary paths */ const listDictionaries = async (configuration) => { const { fileExtensions, contentDir, excludedPath } = configuration.content; const filePromises = fileExtensions.flatMap((ext) => contentDir.map((dir) => `${normalizePath(dir)}/**/*${ext}`.replace("//", "/"))).map(async (pattern) => { const magicIndex = pattern.search(/[*?{}(]/); const basePattern = magicIndex > -1 ? pattern.slice(0, magicIndex) : pattern; return fg(pattern, { ignore: excludedPath.filter((excludePattern) => { const cleanName = excludePattern.replace(/\*\*/g, "").replace(/\//g, ""); if (cleanName && basePattern.includes(`/${cleanName}/`)) return false; return true; }), absolute: true, dot: true }); }); const filesArrays = await Promise.all(filePromises); return Array.from(new Set(filesArrays.flat())); }; const listDictionariesWithStats = async (configuration) => { const files = await listDictionaries(configuration); return Promise.all(files.map(async (file) => ({ path: file, stats: await stat(file) }))); }; //#endregion export { listDictionaries, listDictionariesWithStats }; //# sourceMappingURL=listDictionariesPath.mjs.map