UNPKG

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