@intlayer/chokidar
Version:
Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.
79 lines (77 loc) • 4.4 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
const require_utils_parallelize = require('../utils/parallelize.cjs');
const require_writeFileIfChanged = require('../writeFileIfChanged.cjs');
const require_writeJsonIfChanged = require('../writeJsonIfChanged.cjs');
let node_fs_promises = require("node:fs/promises");
let node_path = require("node:path");
let _intlayer_config_logger = require("@intlayer/config/logger");
let _intlayer_config_utils = require("@intlayer/config/utils");
let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
let _intlayer_core_plugins = require("@intlayer/core/plugins");
//#region src/buildIntlayerDictionary/writeDynamicDictionary.ts
const DICTIONARIES_SUBDIR = "json";
/**
* Generates the content of a dictionary entry point file.
*/
const generateDictionaryEntryPoint = (key, locales, format = "esm") => {
const localeEntries = [...locales].sort((a, b) => String(a).localeCompare(String(b))).map((locale) => format === "esm" ? ` '${locale}': () => import('./${DICTIONARIES_SUBDIR}/${key}/${locale}.json').then(m => m.default)` : ` '${locale}': () => Promise.resolve(require('./${DICTIONARIES_SUBDIR}/${key}/${locale}.json'))`).join(",\n");
if (format === "esm") return `const content = {\n${localeEntries}\n};\n\nexport default content;\n`;
return `module.exports = {\n${localeEntries}\n};\n`;
};
/**
* Write the localized dictionaries to the dictionariesDir
* @param mergedDictionaries - The merged dictionaries
* @param configuration - The configuration
* @returns The final dictionaries
*
* @example
* ```ts
* const unmergedDictionaries = await writeUnmergedDictionaries(dictionaries);
* const finalDictionaries = await writeFinalDictionaries(unmergedDictionaries);
* console.log(finalDictionaries);
*
* // .intlayer/dynamic_dictionary/dictionaries/en_home.json
* // .intlayer/dynamic_dictionary/dictionaries/fr_home.json
* ```
*/
const writeDynamicDictionary = async (mergedDictionaries, configuration, formats = _intlayer_config_defaultValues.OUTPUT_FORMAT) => {
const { locales, defaultLocale } = configuration.internationalization;
const { dynamicDictionariesDir } = configuration.system;
const dictDir = (0, node_path.resolve)(dynamicDictionariesDir, DICTIONARIES_SUBDIR);
await (0, node_fs_promises.mkdir)(dictDir, { recursive: true });
const resultDictionariesPaths = {};
await require_utils_parallelize.parallelize(Object.entries(mergedDictionaries).sort(([a], [b]) => String(a).localeCompare(String(b))), async ([key, dictionaryEntry]) => {
if (key === "undefined") return;
const localizedDictionariesPathsRecord = {};
const keyDir = (0, node_path.resolve)(dictDir, key);
(0, _intlayer_config_utils.assertPathWithin)(keyDir, dictDir);
await (0, node_fs_promises.mkdir)(keyDir, { recursive: true });
await require_utils_parallelize.parallelize(locales, async (locale) => {
const localizedDictionary = (0, _intlayer_core_plugins.getPerLocaleDictionary)(dictionaryEntry.dictionary, locale, defaultLocale);
const resultFilePath = (0, node_path.resolve)(keyDir, `${locale}.json`);
await require_writeJsonIfChanged.writeJsonIfChanged(resultFilePath, localizedDictionary).catch((err) => {
console.error(`Error creating localized ${key}/${locale}.json:`, err);
});
localizedDictionariesPathsRecord[locale] = {
dictionaryPath: resultFilePath,
dictionary: localizedDictionary
};
});
resultDictionariesPaths[key] = localizedDictionariesPathsRecord;
await require_utils_parallelize.parallelize(formats, async (format) => {
const extension = format === "cjs" ? "cjs" : "mjs";
const content = generateDictionaryEntryPoint(key, locales, format);
const dynEntryPath = (0, node_path.resolve)(dynamicDictionariesDir, `${key}.${extension}`);
(0, _intlayer_config_utils.assertPathWithin)(dynEntryPath, dynamicDictionariesDir);
await require_writeFileIfChanged.writeFileIfChanged(dynEntryPath, content).catch((err) => {
console.error(`Error creating dynamic ${(0, _intlayer_config_logger.colorizePath)(dynEntryPath)}:`, err);
});
});
});
return resultDictionariesPaths;
};
//#endregion
exports.generateDictionaryEntryPoint = generateDictionaryEntryPoint;
exports.writeDynamicDictionary = writeDynamicDictionary;
//# sourceMappingURL=writeDynamicDictionary.cjs.map