@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
JavaScript
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