UNPKG

@intlayer/chokidar

Version:

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

62 lines (60 loc) 3.54 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const require_runtime = require('../_virtual/_rolldown/runtime.cjs'); const require_utils_sortAlphabetically = require('../utils/sortAlphabetically.cjs'); const require_fetchDistantDictionaries = require('../fetchDistantDictionaries.cjs'); let _intlayer_config_node = require("@intlayer/config/node"); let _intlayer_api = require("@intlayer/api"); let _intlayer_remote_dictionaries_entry = require("@intlayer/remote-dictionaries-entry"); //#region src/loadDictionaries/loadRemoteDictionaries.ts const formatDistantDictionaries = (dictionaries) => dictionaries.map((dict) => ({ ...dict, localId: `${dict.key}::remote::${dict.id}`, location: "remote" })); const loadRemoteDictionaries = async (configuration = (0, _intlayer_config_node.getConfiguration)(), onStatusUpdate, options) => { const { editor } = configuration; const remoteDictionariesRecord = (0, _intlayer_remote_dictionaries_entry.getRemoteDictionaries)(configuration); if (!Boolean(editor.clientId && editor.clientSecret)) return []; try { options?.onStartRemoteCheck?.(); const distantDictionaryUpdateTimeStamp = (await (0, _intlayer_api.getIntlayerAPIProxy)(void 0, configuration).dictionary.getDictionariesUpdateTimestamp()).data; if (!distantDictionaryUpdateTimeStamp) throw new Error("No distant dictionaries found"); const dictionariesIdToFetch = Object.entries(distantDictionaryUpdateTimeStamp).filter(([dictionaryId, data]) => { if (!data.updatedAt) return true; const local = remoteDictionariesRecord[data.key]?.find((dictionary) => dictionary.id === dictionaryId); if (!local) return true; const localUpdatedAtRaw = local?.updatedAt; const localUpdatedAt = typeof localUpdatedAtRaw === "number" ? localUpdatedAtRaw : localUpdatedAtRaw ? new Date(localUpdatedAtRaw).getTime() : void 0; if (typeof localUpdatedAt !== "number") return true; return data.updatedAt > localUpdatedAt; }); const cachedDictionaries = Object.values(remoteDictionariesRecord).flat().filter((dictionary) => { const remoteUpdatedAt = distantDictionaryUpdateTimeStamp[dictionary.id].updatedAt; const localUpdatedAtRaw = dictionary.updatedAt; const localUpdatedAt = typeof localUpdatedAtRaw === "number" ? localUpdatedAtRaw : localUpdatedAtRaw ? new Date(localUpdatedAtRaw).getTime() : void 0; return typeof localUpdatedAt === "number" && typeof remoteUpdatedAt === "number" && localUpdatedAt >= remoteUpdatedAt; }); if (cachedDictionaries.length > 0) onStatusUpdate?.(cachedDictionaries.map((dictionary) => ({ dictionaryKey: dictionary.key, type: "remote", status: "imported" }))); const orderedDistantDictionaryKeys = dictionariesIdToFetch.map(([, data]) => data.key).sort(require_utils_sortAlphabetically.sortAlphabetically); if (orderedDistantDictionaryKeys.length > 0) onStatusUpdate?.(orderedDistantDictionaryKeys.map((key) => ({ dictionaryKey: key, type: "remote", status: "pending" }))); const distantDictionaries = formatDistantDictionaries(await require_fetchDistantDictionaries.fetchDistantDictionaries({ dictionaryKeys: orderedDistantDictionaryKeys }, onStatusUpdate)); return [...cachedDictionaries, ...distantDictionaries]; } catch (error) { options?.onError?.(error); return []; } finally { options?.onStopRemoteCheck?.(); } }; //#endregion exports.formatDistantDictionaries = formatDistantDictionaries; exports.loadRemoteDictionaries = loadRemoteDictionaries; //# sourceMappingURL=loadRemoteDictionaries.cjs.map