@intlayer/chokidar
Version:
Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.
83 lines • 3.15 kB
JavaScript
import { getConfiguration } from "@intlayer/config";
import { mkdir, writeFile } from "fs/promises";
import { relative, resolve } from "path";
import { getFilteredLocalesContent } from "../../../getFilteredLocalesContent.mjs";
import { formatDictionaryText } from "./formatDictionaryText.mjs";
const generateDictionaryEntryPoint = (localedDictionariesPathsRecord, format = "esm", configuration = getConfiguration()) => {
const { dynamicDictionariesDir } = configuration.content;
let content = "";
const formattedDictionaryMap = Object.entries(
localedDictionariesPathsRecord
).map(([locale, dictionary]) => {
const relativePath = relative(
dynamicDictionariesDir,
dictionary.dictionaryPath
);
if (format === "esm") {
return ` '${locale}': () => import('./${relativePath}', { assert: { type: 'json' }}).then(mod => mod.default)`;
}
return ` '${locale}': () => Promise.resolve(require('./${relativePath}'))`;
}).join(",\n");
content += `const content = {
${formattedDictionaryMap}
};
`;
if (format === "esm") content += `export default content;
`;
if (format === "cjs") content += `module.exports = content;
`;
return content;
};
const writeDynamicDictionary = async (mergedDictionaries, configuration = getConfiguration(), formats = ["cjs", "esm"]) => {
const { locales, defaultLocale } = configuration.internationalization;
const { dynamicDictionariesDir } = configuration.content;
await mkdir(resolve(dynamicDictionariesDir), { recursive: true });
let resultDictionariesPaths = {};
for await (const [key, dictionaryEntry] of Object.entries(
mergedDictionaries
)) {
if (key === "undefined") continue;
let localedDictionariesPathsRecord = {};
for await (const locale of locales) {
const localizedDictionary = {
...dictionaryEntry.dictionary,
locale,
content: getFilteredLocalesContent(
dictionaryEntry.dictionary.content,
locale,
{ dictionaryKey: key, keyPath: [] },
defaultLocale
)
};
const contentString = formatDictionaryText(localizedDictionary);
const outputFileName = `${key}.${locale}.json`;
const resultFilePath = resolve(dynamicDictionariesDir, outputFileName);
await writeFile(resultFilePath, contentString, "utf8").catch((err) => {
console.error(`Error creating localized ${outputFileName}:`, err);
});
localedDictionariesPathsRecord[locale] = {
dictionaryPath: resultFilePath,
dictionary: localizedDictionary
};
}
resultDictionariesPaths[key] = localedDictionariesPathsRecord;
for await (const format of formats) {
const extension = format === "cjs" ? "cjs" : "mjs";
const content = generateDictionaryEntryPoint(
localedDictionariesPathsRecord,
format,
configuration
);
await writeFile(
resolve(dynamicDictionariesDir, `${key}.${extension}`),
content
);
}
}
return resultDictionariesPaths;
};
export {
generateDictionaryEntryPoint,
writeDynamicDictionary
};
//# sourceMappingURL=writeDynamicDictionary.mjs.map