import clsHooked from "cls-hooked"; import { EntityChange } from "./entity_changes_interface.js"; const namespace = clsHooked.createNamespace("trilium"); type Callback = (...args: any[]) => any; function init(callback: Callback) { return namespace.runAndReturn(callback); } function wrap(callback: Callback) { return () => { try { init(callback); } catch (e: any) { console.log(`Error occurred: ${e.message}: ${e.stack}`); } }; } function get(key: string) { return namespace.get(key); } function set(key: string, value: any) { namespace.set(key, value); } function getHoistedNoteId() { return namespace.get("hoistedNoteId") || "root"; } function getComponentId() { return namespace.get("componentId"); } function getLocalNowDateTime() { return namespace.get("localNowDateTime"); } function disableEntityEvents() { namespace.set("disableEntityEvents", true); } function enableEntityEvents() { namespace.set("disableEntityEvents", false); } function isEntityEventsDisabled() { return !!namespace.get("disableEntityEvents"); } function setMigrationRunning(running: boolean) { namespace.set("migrationRunning", !!running); } function isMigrationRunning() { return !!namespace.get("migrationRunning"); } function disableSlowQueryLogging(disable: boolean) { namespace.set("disableSlowQueryLogging", disable); } function isSlowQueryLoggingDisabled() { return !!namespace.get("disableSlowQueryLogging"); } function getAndClearEntityChangeIds() { const entityChangeIds = namespace.get("entityChangeIds") || []; namespace.set("entityChangeIds", []); return entityChangeIds; } function putEntityChange(entityChange: EntityChange) { if (namespace.get("ignoreEntityChangeIds")) { return; } const entityChangeIds = namespace.get("entityChangeIds") || []; // store only ID since the record can be modified (e.g., in erase) entityChangeIds.push(entityChange.id); namespace.set("entityChangeIds", entityChangeIds); } function reset() { clsHooked.reset(); } function ignoreEntityChangeIds() { namespace.set("ignoreEntityChangeIds", true); } export default { init, wrap, get, set, namespace, getHoistedNoteId, getComponentId, getLocalNowDateTime, disableEntityEvents, enableEntityEvents, isEntityEventsDisabled, reset, getAndClearEntityChangeIds, putEntityChange, ignoreEntityChangeIds, disableSlowQueryLogging, isSlowQueryLoggingDisabled, setMigrationRunning, isMigrationRunning };