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