UNPKG

@intlayer/chokidar

Version:

Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.

59 lines (57 loc) 3.62 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'); 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"); //#region src/buildIntlayerDictionary/writeFetchDictionary.ts const generateDictionaryEntryPoint = (key, locales, relativePrefix, format = "esm") => { const extension = format === "cjs" ? "cjs" : "mjs"; const localeEntries = locales.sort((a, b) => String(a).localeCompare(String(b))).map((locale) => ` '${locale}': async () => {\n try {\n const res = await fetch(\`\${editor.liveSyncURL}/dictionaries/${key}/${locale}\`);\n return await res.json();\n } catch {\n return dynContent['${locale}']();\n }\n }`).join(",\n"); if (format === "esm") return `import { editor } from 'intlayer';\nimport dynContent from '${relativePrefix}/${key}.${extension}';\n\nconst content = {\n${localeEntries}\n};\n\nexport default content;\n`; return `const { editor } = require('intlayer');\nconst dynContent = require('${relativePrefix}/${key}.${extension}');\n\nmodule.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/fetch_dictionary/home.mjs * // .intlayer/fetch_dictionary/home.cjs * ``` */ const writeFetchDictionary = async (dynamicDictionaries, configuration, formats = _intlayer_config_defaultValues.OUTPUT_FORMAT) => { const { fetchDictionariesDir, dynamicDictionariesDir } = configuration.system; const { locales } = configuration.internationalization; let relativePrefix = (0, _intlayer_config_utils.normalizePath)((0, node_path.relative)(fetchDictionariesDir, dynamicDictionariesDir)); if (!relativePrefix.startsWith(".")) relativePrefix = `./${relativePrefix}`; await (0, node_fs_promises.mkdir)((0, node_path.resolve)(fetchDictionariesDir), { recursive: true }); const resultDictionariesPaths = {}; await require_utils_parallelize.parallelize(Object.entries(dynamicDictionaries), async ([key]) => { if (key === "undefined") return; await require_utils_parallelize.parallelize(formats, async (format) => { const extension = format === "cjs" ? "cjs" : "mjs"; const content = generateDictionaryEntryPoint(key, locales, relativePrefix, format); const fetchEntryPath = (0, node_path.resolve)(fetchDictionariesDir, `${key}.${extension}`); (0, _intlayer_config_utils.assertPathWithin)(fetchEntryPath, fetchDictionariesDir); await require_writeFileIfChanged.writeFileIfChanged(fetchEntryPath, content).catch((err) => { console.error(`Error creating fetch ${(0, _intlayer_config_logger.colorizePath)(fetchEntryPath)}:`, err); }); }); }); return resultDictionariesPaths; }; //#endregion exports.generateDictionaryEntryPoint = generateDictionaryEntryPoint; exports.writeFetchDictionary = writeFetchDictionary; //# sourceMappingURL=writeFetchDictionary.cjs.map