UNPKG

@intlayer/chokidar

Version:

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

125 lines (123 loc) 5.64 kB
import { filterInvalidDictionaries } from "../filterInvalidDictionaries.mjs"; import { loadContentDeclarations } from "./loadContentDeclaration.mjs"; import { formatDictionaries } from "../formatDictionary.mjs"; import { loadRemoteDictionaries } from "./loadRemoteDictionaries.mjs"; import { DictionariesLogger } from "./log.mjs"; import { colon, colorize, colorizeKey, getAppLogger } from "@intlayer/config/logger"; import * as ANSIColors from "@intlayer/config/colors"; //#region src/loadDictionaries/loadDictionaries.ts let loadDictionariesStatus = []; const logger$1 = new DictionariesLogger(); const setLoadDictionariesStatus = (statuses) => { const updated = [...loadDictionariesStatus]; for (const incoming of statuses) { const index = updated.findIndex((s) => s.dictionaryKey === incoming.dictionaryKey && s.type === incoming.type); if (index >= 0) updated[index] = incoming; else updated.push(incoming); } loadDictionariesStatus = updated; logger$1.update(statuses); return updated; }; const iconFor = (status) => { switch (status) { case "built": case "imported": case "fetched": return "✔"; case "error": return "✖"; default: return "⏲"; } }; const colorFor = (status) => { switch (status) { case "built": case "imported": case "fetched": return ANSIColors.GREEN; case "error": return ANSIColors.RED; default: return ANSIColors.BLUE; } }; const printSummary = (configuration) => { if (configuration.log.mode !== "verbose") return; const appLogger = getAppLogger(configuration); const byKey = /* @__PURE__ */ new Map(); for (const status of loadDictionariesStatus) { const rec = byKey.get(status.dictionaryKey) ?? {}; if (status.type === "local") rec.local = status.status; if (status.type === "remote") rec.remote = status.status; byKey.set(status.dictionaryKey, rec); } const keys = Array.from(byKey.keys()).sort((a, b) => a.localeCompare(b)); let maxLocalLabelLen = 0; for (const key of keys) { const rec = byKey.get(key); if (rec.local) { const visibleLocal = `[local: ${iconFor(rec.local)} ${rec.local}]`; if (visibleLocal.length > maxLocalLabelLen) maxLocalLabelLen = visibleLocal.length; } } for (const key of keys) { const rec = byKey.get(key); const labels = []; if (rec.local) { const inner = colorize(`${iconFor(rec.local)} ${rec.local}`, colorFor(rec.local)); const coloredLocal = `${ANSIColors.GREY}[` + colorize("local: ", ANSIColors.GREY) + inner + `${ANSIColors.GREY}]${ANSIColors.RESET}`; const visibleLocal = `[local: ${iconFor(rec.local)} ${rec.local}]`; const pad = Math.max(0, maxLocalLabelLen - visibleLocal.length); labels.push(coloredLocal + " ".repeat(pad)); } else labels.push(" ".repeat(maxLocalLabelLen)); if (rec.remote) { const inner = colorize(`${iconFor(rec.remote)} ${rec.remote}`, colorFor(rec.remote)); labels.push(`${ANSIColors.GREY}[` + colorize("distant: ", ANSIColors.GREY) + inner + `${ANSIColors.GREY}]${ANSIColors.RESET}`); } appLogger(` - ${colon(colorizeKey(key), { colSize: keys })} ${labels.join(" ")}`); } }; const loadDictionaries = async (contentDeclarationsPaths, configuration) => { const { plugins } = configuration; const loadDictionariesStartTime = Date.now(); getAppLogger(configuration)("Dictionaries:", { isVerbose: true }); const loadPluginDictionariesPromise = (await Promise.all(plugins ?? [])).filter((plugin) => plugin.loadDictionaries).map(async (plugin) => { try { return await plugin.loadDictionaries?.({ configuration }) ?? []; } catch (error) { logger$1.setPluginError(error); return []; } }); const pluginDictionaries = await Promise.all(loadPluginDictionariesPromise).then((dictionaries) => dictionaries.flat()).then((dictionaries) => filterInvalidDictionaries(dictionaries, configuration)).then((dictionaries) => formatDictionaries(dictionaries)); logger$1.setPluginTotal(pluginDictionaries.length); logger$1.setPluginDone(pluginDictionaries.length); const pluginDictionariesTime = Date.now(); const localDictionaries = await loadContentDeclarations(Array.isArray(contentDeclarationsPaths) ? contentDeclarationsPaths : [contentDeclarationsPaths], configuration, setLoadDictionariesStatus).then((dictionaries) => filterInvalidDictionaries(dictionaries, configuration)).then((dictionaries) => formatDictionaries(dictionaries)); const localDictionariesTime = Date.now(); setLoadDictionariesStatus(localDictionaries.map((dictionary) => ({ dictionaryKey: dictionary.key, type: "local", status: "built" }))); const hasRemoteDictionaries = Boolean(configuration.editor.clientId && configuration.editor.clientSecret); if (hasRemoteDictionaries) logger$1.setExpectRemote(true); let remoteDictionaries = []; if (hasRemoteDictionaries) remoteDictionaries = await loadRemoteDictionaries(configuration, setLoadDictionariesStatus, { onStartRemoteCheck: () => logger$1.startRemoteCheck(), onStopRemoteCheck: () => logger$1.stopRemoteCheck(), onError: (e) => logger$1.setRemoteError(e) }).then((dictionaries) => filterInvalidDictionaries(dictionaries, configuration)).then((dictionaries) => formatDictionaries(dictionaries)); const remoteDictionariesTime = Date.now(); logger$1.finish(); printSummary(configuration); return { localDictionaries, remoteDictionaries, pluginDictionaries, time: { localDictionaries: localDictionariesTime - pluginDictionariesTime, remoteDictionaries: remoteDictionariesTime - localDictionariesTime, pluginDictionaries: pluginDictionariesTime - loadDictionariesStartTime } }; }; //#endregion export { loadDictionaries }; //# sourceMappingURL=loadDictionaries.mjs.map