@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
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');
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