@eggjs/tegg-plugin
Version:
module plugin for egg
55 lines • 4.75 kB
JavaScript
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=