Skip to main content
Glama
writeRemoteDictionary.ts3.15 kB
import { mkdir } from 'node:fs/promises'; import { resolve } from 'node:path'; import { colorizePath, getConfiguration, x } from '@intlayer/config'; import { orderDictionaries } from '@intlayer/core'; import type { Dictionary } from '@intlayer/types'; import { filterInvalidDictionaries } from '../filterInvalidDictionaries'; import { formatDistantDictionaries } from '../loadDictionaries'; import { parallelize } from '../utils/parallelize'; import { writeJsonIfChanged } from '../writeJsonIfChanged'; import { groupDictionariesByKey, type UnmergedDictionaryResult, } from './writeUnmergedDictionary'; export type RemoteDictionaryResult = { dictionaryPath: string; dictionaries: Dictionary[]; }; export type RemoteDictionaryOutput = Record<string, RemoteDictionaryResult>; /** * 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_dictionaries/home.json * // { key: 'home', content: { ... } }, * ``` */ export const writeRemoteDictionary = async ( remoteDictionaries: Dictionary[], configuration = getConfiguration() ): Promise<RemoteDictionaryOutput> => { const { remoteDictionariesDir } = configuration.content; // Create the dictionaries folder if it doesn't exist await mkdir(resolve(remoteDictionariesDir), { recursive: true }); const filteredDictionaries = filterInvalidDictionaries( remoteDictionaries, configuration ); // Group dictionaries by key and write to unmergedDictionariesDir const groupedDictionaries = groupDictionariesByKey(filteredDictionaries); // Merge dictionaries with the same key and write to dictionariesDir const results = await parallelize( Object.entries(groupedDictionaries), async ([key, dictionaries]) => { if (key === 'undefined') { return undefined as unknown as readonly [ string, UnmergedDictionaryResult, ]; } const formattedDictionaries = formatDistantDictionaries(dictionaries); const orderedDictionaries = orderDictionaries( formattedDictionaries, configuration ); const outputFileName = `${key}.json`; const unmergedFilePath = resolve(remoteDictionariesDir, outputFileName); // Write the grouped dictionaries await writeJsonIfChanged(unmergedFilePath, orderedDictionaries).catch( (err) => { console.error( `${x} Error creating unmerged ${colorizePath(unmergedFilePath)}:`, err ); } ); return [ key, { dictionaryPath: unmergedFilePath, dictionaries, } as UnmergedDictionaryResult, ] as const; } ); return Object.fromEntries( results.filter(Boolean) as Array< readonly [string, UnmergedDictionaryResult] > ); };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aymericzip/intlayer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server