@intlayer/chokidar
Version:
Scans and builds Intlayer declaration files into dictionaries based on Intlayer configuration.
54 lines (52 loc) • 2.91 kB
JavaScript
import { getBuiltDictionariesPath } from "./createDictionaryEntryPoint/getBuiltDictionariesPath.mjs";
import { createDictionaryEntryPoint } from "./createDictionaryEntryPoint/createDictionaryEntryPoint.mjs";
import { cleanRemovedContentDeclaration } from "./cleanRemovedContentDeclaration.mjs";
import { formatPath } from "./utils/formatter.mjs";
import { buildDictionary } from "./buildIntlayerDictionary/buildIntlayerDictionary.mjs";
import { createModuleAugmentation } from "./createType/createModuleAugmentation.mjs";
import { createTypes } from "./createType/createType.mjs";
import { loadLocalDictionaries } from "./loadDictionaries/loadLocalDictionaries.mjs";
import { readFile, writeFile } from "node:fs/promises";
import { join } from "node:path";
import { getAppLogger } from "@intlayer/config/logger";
import { existsSync } from "node:fs";
//#region src/handleContentDeclarationFileChange.ts
const handleContentDeclarationFileChange = async (filePath, config) => {
const appLogger = getAppLogger(config);
appLogger(`Change detected: ${formatPath(filePath)}`, { isVerbose: true });
const allDictionariesPaths = await getBuiltDictionariesPath(config);
const localeDictionaries = await loadLocalDictionaries(filePath, config);
const dictionariesOutput = await buildDictionary(localeDictionaries, config);
const updatedDictionaries = Object.values(dictionariesOutput?.mergedDictionaries ?? {});
const updatedDictionariesPaths = updatedDictionaries.map((dictionary) => dictionary.dictionaryPath);
const { excludeKeys, hasRebuilt } = await cleanRemovedContentDeclaration(filePath, localeDictionaries.map((dictionary) => dictionary.key), config);
const hasNewDictionaries = updatedDictionariesPaths.some((updatedDictionaryPath) => !allDictionariesPaths.includes(updatedDictionaryPath));
await createTypes(updatedDictionaries.map((dictionary) => dictionary.dictionary), config);
appLogger("TypeScript types built", { isVerbose: true });
await createModuleAugmentation(config);
appLogger("Module augmentation built", { isVerbose: true });
if (hasRebuilt || hasNewDictionaries) {
if (!hasRebuilt) {
await createDictionaryEntryPoint(config, { excludeKeys });
appLogger("Dictionary list built", { isVerbose: true });
}
}
const { mainDir } = config.system;
for (const extension of config.build.outputFormat) {
const entryPointPath = join(mainDir, `dictionaries.${extension}`);
if (existsSync(entryPointPath)) await writeFile(entryPointPath, await readFile(entryPointPath, "utf-8"));
}
for await (const plugin of config.plugins ?? []) {
const { unmergedDictionaries, mergedDictionaries } = dictionariesOutput;
await plugin.afterBuild?.({
dictionaries: {
unmergedDictionaries,
mergedDictionaries
},
configuration: config
});
}
};
//#endregion
export { handleContentDeclarationFileChange };
//# sourceMappingURL=handleContentDeclarationFileChange.mjs.map