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