120 lines
2.6 KiB
TypeScript

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
};