import { getAppLogger } from '@intlayer/config';
import type { IntlayerConfig } from '@intlayer/types';
import { buildDictionary } from './buildIntlayerDictionary/buildIntlayerDictionary';
import { createDictionaryEntryPoint } from './createDictionaryEntryPoint/createDictionaryEntryPoint';
import { createModuleAugmentation, createTypes } from './createType/index';
import { loadLocalDictionaries } from './loadDictionaries/loadLocalDictionaries';
import { formatPath } from './utils/formatter';
export const handleAdditionalContentDeclarationFile = async (
filePath: string,
config: IntlayerConfig
) => {
const appLogger = getAppLogger(config);
// Process the file with the functionToRun
appLogger(`Additional file detected: ${formatPath(filePath)}`, {
isVerbose: true,
});
const localeDictionaries = await loadLocalDictionaries(filePath, config);
const dictionariesOutput = await buildDictionary(localeDictionaries, config);
const dictionariesPaths = Object.values(
dictionariesOutput?.mergedDictionaries ?? {}
).map((dictionary) => dictionary.dictionaryPath);
await createTypes(dictionariesPaths, config);
await createDictionaryEntryPoint(config);
appLogger('Dictionaries built', {
isVerbose: true,
});
createModuleAugmentation(config);
appLogger('Module augmentation built', {
isVerbose: true,
});
// Plugin transformation
// Allow plugins to post-process the final build output (e.g., write back ICU JSON)
for await (const plugin of config.plugins ?? []) {
const { unmergedDictionaries, mergedDictionaries } = dictionariesOutput;
await plugin.afterBuild?.({
dictionaries: {
unmergedDictionaries,
mergedDictionaries,
},
configuration: config,
});
}
};