UNPKG

@eggjs/tegg-plugin

Version:

module plugin for egg

55 lines 4.75 kB
import { BackgroundTaskHelper, PrototypeUtil } from '@eggjs/tegg'; import { TEGG_CONTEXT } from '@eggjs/egg-module-common'; import { getCalleeFromStack } from './Utils.js'; export const LONG_STACK_DELIMITER = '\n --------------------\n'; function addLongStackTrace(err, causeError) { const callSiteStack = causeError.stack; if (!callSiteStack || typeof callSiteStack !== 'string') { return; } const index = callSiteStack.indexOf('\n'); if (index !== -1) { err.stack += LONG_STACK_DELIMITER + callSiteStack.substring(index + 1); } } export function hijackRunInBackground(app) { const eggRunInBackground = app.context.runInBackground; app.context.runInBackground = function runInBackground(scope) { if (!this[TEGG_CONTEXT]) { return Reflect.apply(eggRunInBackground, this, [scope]); } const caseError = new Error('cause'); let resolveBackgroundTask; const backgroundTaskPromise = new Promise(resolve => { resolveBackgroundTask = resolve; }); const newScope = async () => { try { await scope(this); } catch (e) { addLongStackTrace(e, caseError); throw e; } finally { resolveBackgroundTask(); } }; const taskName = scope._name || scope.name || getCalleeFromStack(true, 2); scope._name = taskName; Object.defineProperty(newScope, 'name', { value: taskName, enumerable: false, configurable: true, writable: false, }); Reflect.apply(eggRunInBackground, this, [newScope]); const proto = PrototypeUtil.getClazzProto(BackgroundTaskHelper); const eggObject = app.eggContainerFactory.getEggObject(proto); const backgroundTaskHelper = eggObject.obj; backgroundTaskHelper.run(async () => { await backgroundTaskPromise; }); }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuX2luX2JhY2tncm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJydW5faW5fYmFja2dyb3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7QUFFaEUsU0FBUyxpQkFBaUIsQ0FBQyxHQUFVLEVBQUUsVUFBaUI7SUFDdEQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUN2QyxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3hELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxLQUFLLElBQUksb0JBQW9CLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsR0FBZ0I7SUFDcEQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztJQUN2RCxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsR0FBRyxTQUFTLGVBQWUsQ0FBMEIsS0FBcUM7UUFDbkgsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBRSxLQUFLLENBQUUsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJLHFCQUFpQyxDQUFDO1FBQ3RDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxPQUFPLENBQU8sT0FBTyxDQUFDLEVBQUU7WUFDeEQscUJBQXFCLEdBQUcsT0FBTyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDMUIsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLGlCQUFpQixDQUFDLENBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDekMsTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO29CQUFTLENBQUM7Z0JBQ1QscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUksS0FBYSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRixLQUFhLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUNoQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7WUFDdEMsS0FBSyxFQUFFLFFBQVE7WUFDZixVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsSUFBSTtZQUNsQixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFFLFFBQVEsQ0FBRSxDQUFDLENBQUM7UUFFdEQsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsS0FBcUIsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDLEdBQTJCLENBQUM7UUFDbkUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2xDLE1BQU0scUJBQXFCLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDIn0=