feat: 添加trigger在注册时的action重复检查,因为在同步时若出现action重复定义的trigger会导致出错

This commit is contained in:
Pan Qiancheng 2025-12-31 14:25:02 +08:00
parent d32c29da15
commit da2920c8b5
2 changed files with 21 additions and 0 deletions

View File

@ -104,6 +104,17 @@ class TriggerExecutor {
|| trigger.action instanceof Array && !trigger.action.includes('create'), `trigger【${trigger.name}】是create类型但却带有filter`); || trigger.action instanceof Array && !trigger.action.includes('create'), `trigger【${trigger.name}】是create类型但却带有filter`);
(0, assert_1.default)(trigger.when === 'before' || trigger.when === 'commit', `定义了filter的trigger【${trigger.name}】的when只能是before或者commit`); (0, assert_1.default)(trigger.when === 'before' || trigger.when === 'commit', `定义了filter的trigger【${trigger.name}】的when只能是before或者commit`);
} }
if (Array.isArray(trigger.action)) {
const actions = trigger.action;
const seen = new Set();
const duplicate = actions.find(item => {
if (seen.has(item))
return true;
seen.add(item);
return false;
});
(0, assert_1.default)(!duplicate, `注册 trigger 「${trigger.name}」 时发现定义中出现了重复定义的action: 「${duplicate}`);
}
Object.assign(this.triggerNameMap, { Object.assign(this.triggerNameMap, {
[trigger.name]: trigger, [trigger.name]: trigger,
}); });

View File

@ -141,6 +141,16 @@ export class TriggerExecutor<ED extends EntityDict & BaseEntityDict, Cxt extends
|| trigger.action instanceof Array && !(trigger.action as any[]).includes('create'), `trigger【${trigger.name}】是create类型但却带有filter`); || trigger.action instanceof Array && !(trigger.action as any[]).includes('create'), `trigger【${trigger.name}】是create类型但却带有filter`);
assert(trigger.when === 'before' || trigger.when === 'commit', `定义了filter的trigger【${trigger.name}】的when只能是before或者commit`); assert(trigger.when === 'before' || trigger.when === 'commit', `定义了filter的trigger【${trigger.name}】的when只能是before或者commit`);
} }
if (Array.isArray(trigger.action)) {
const actions = trigger.action;
const seen = new Set<string>();
const duplicate = actions.find(item => {
if (seen.has(item)) return true;
seen.add(item);
return false;
});
assert(!duplicate, `注册 trigger 「${trigger.name}」 时发现定义中出现了重复定义的action: 「${duplicate}`);
}
Object.assign(this.triggerNameMap, { Object.assign(this.triggerNameMap, {
[trigger.name]: trigger, [trigger.name]: trigger,
}); });