mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	better logging and notifications on script errors for easier debugging
This commit is contained in:
		@@ -1,5 +1,6 @@
 | 
			
		||||
import ScriptContext from "./script_context.js";
 | 
			
		||||
import server from "./server.js";
 | 
			
		||||
import infoService from "./info.js";
 | 
			
		||||
 | 
			
		||||
async function getAndExecuteBundle(noteId, originEntity = null) {
 | 
			
		||||
    const bundle = await server.get('script/bundle/' + noteId);
 | 
			
		||||
@@ -10,9 +11,14 @@ async function getAndExecuteBundle(noteId, originEntity = null) {
 | 
			
		||||
async function executeBundle(bundle, originEntity) {
 | 
			
		||||
    const apiContext = ScriptContext(bundle.note, bundle.allNotes, originEntity);
 | 
			
		||||
 | 
			
		||||
    return await (function () {
 | 
			
		||||
        return eval(`const apiContext = this; (async function() { ${bundle.script}\r\n})()`);
 | 
			
		||||
    }.call(apiContext));
 | 
			
		||||
    try {
 | 
			
		||||
        return await (function () {
 | 
			
		||||
            return eval(`const apiContext = this; (async function() { ${bundle.script}\r\n})()`);
 | 
			
		||||
        }.call(apiContext));
 | 
			
		||||
    }
 | 
			
		||||
    catch (e) {
 | 
			
		||||
        infoService.showAndLogError(`Execution of script "${bundle.note.title}" (${bundle.note.noteId}) failed with error: ${e.message}`);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function executeStartupBundles() {
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,12 @@ function showMessage(message) {
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function showAndLogError(message, delay = 10000) {
 | 
			
		||||
    showError(message, delay);
 | 
			
		||||
 | 
			
		||||
    messagingService.logError(message);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function showError(message, delay = 10000) {
 | 
			
		||||
    console.log(utils.now(), "error: ", message);
 | 
			
		||||
 | 
			
		||||
@@ -36,5 +42,6 @@ function throwError(message) {
 | 
			
		||||
export default {
 | 
			
		||||
    showMessage,
 | 
			
		||||
    showError,
 | 
			
		||||
    showAndLogError,
 | 
			
		||||
    throwError
 | 
			
		||||
}
 | 
			
		||||
@@ -72,7 +72,12 @@ function ScriptApi(startNote, currentNote, originEntity = null) {
 | 
			
		||||
            originEntityId: originEntity ? originEntity.noteId : null
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return ret.executionResult;
 | 
			
		||||
        if (ret.success) {
 | 
			
		||||
            return ret.executionResult;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            throw new Error("server error: " + ret.error);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,10 +5,15 @@ const attributeService = require('../../services/attributes');
 | 
			
		||||
const repository = require('../../services/repository');
 | 
			
		||||
 | 
			
		||||
async function exec(req) {
 | 
			
		||||
    const result = await scriptService.executeScript(req.body.script, req.body.params, req.body.startNoteId,
 | 
			
		||||
        req.body.currentNoteId, req.body.originEntityName, req.body.originEntityId);
 | 
			
		||||
    try {
 | 
			
		||||
        const result = await scriptService.executeScript(req.body.script, req.body.params, req.body.startNoteId,
 | 
			
		||||
            req.body.currentNoteId, req.body.originEntityName, req.body.originEntityId);
 | 
			
		||||
 | 
			
		||||
    return { executionResult: result };
 | 
			
		||||
        return { success: true, executionResult: result };
 | 
			
		||||
    }
 | 
			
		||||
    catch (e) {
 | 
			
		||||
        return { success: false, error: e.message };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function run(req) {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ const ScriptContext = require('./script_context');
 | 
			
		||||
const repository = require('./repository');
 | 
			
		||||
const cls = require('./cls');
 | 
			
		||||
const sourceIdService = require('./source_id');
 | 
			
		||||
const log = require('./log');
 | 
			
		||||
 | 
			
		||||
async function executeNote(note, originEntity) {
 | 
			
		||||
    if (!note.isJavaScript()) {
 | 
			
		||||
@@ -25,11 +26,16 @@ async function executeBundle(bundle, startNote, originEntity = null) {
 | 
			
		||||
 | 
			
		||||
    const ctx = new ScriptContext(startNote, bundle.allNotes, originEntity);
 | 
			
		||||
 | 
			
		||||
    if (await bundle.note.hasLabel('manualTransactionHandling')) {
 | 
			
		||||
        return await execute(ctx, script, '');
 | 
			
		||||
    try {
 | 
			
		||||
        if (await bundle.note.hasLabel('manualTransactionHandling')) {
 | 
			
		||||
            return await execute(ctx, script, '');
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            return await sql.transactional(async () => await execute(ctx, script, ''));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        return await sql.transactional(async () => await execute(ctx, script, ''));
 | 
			
		||||
    catch (e) {
 | 
			
		||||
        log.error(`Execution of script "${bundle.note.title}" (${bundle.note.noteId}) failed with error: ${e.message}`);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user