fix(bots): highlight unsupported processor events and show overlap

This commit is contained in:
Hyu
2026-09-15 15:05:34 +08:00
parent 8b7621cb29
commit 11f73ddf12
12 changed files with 280 additions and 53 deletions
+57 -1
View File
@@ -14,7 +14,10 @@ const exports = {};
new Function(
'exports',
ts.transpileModule(source, {
compilerOptions: { module: ts.ModuleKind.CommonJS },
compilerOptions: {
module: ts.ModuleKind.CommonJS,
target: ts.ScriptTarget.ES2022,
},
}).outputText,
)(exports);
@@ -34,3 +37,56 @@ for (const [supported, required, covered] of [
assert.equal(exports.eventPatternCovers(supported, required), covered);
});
}
test('processor events put covered declarations first and report only the intersection', () => {
const result = exports.processorEventCompatibility(
[
'group.member_joined',
'message.received',
'friend.request_received',
'message.received',
],
['message.received', 'message.edited'],
);
assert.deepEqual(result.entries, [
{ pattern: 'message.received', supported: true },
{ pattern: 'group.member_joined', supported: false },
{ pattern: 'friend.request_received', supported: false },
]);
assert.deepEqual(result.matchingEvents, ['message.received']);
});
test('wildcard subscriptions show matching concrete adapter events without claiming full coverage', () => {
const result = exports.processorEventCompatibility(
['group.*'],
['group.member_joined', 'message.received'],
);
assert.deepEqual(result.entries, [{ pattern: 'group.*', supported: false }]);
assert.deepEqual(result.matchingEvents, ['group.member_joined']);
assert.deepEqual(
exports.processorEventCompatibility(['*'], ['message.received'])
.matchingEvents,
['message.received'],
);
});
test('adapter wildcards cover concrete subscriptions without expanding the intersection', () => {
const result = exports.processorEventCompatibility(
['group.member_joined'],
['group.*'],
);
assert.equal(result.entries[0].supported, true);
assert.deepEqual(result.matchingEvents, ['group.member_joined']);
});
test('legacy adapters default to messages and unmatched subscriptions have an empty intersection', () => {
assert.deepEqual(
exports.processorEventCompatibility(['*'], []).matchingEvents,
['message.received'],
);
assert.deepEqual(
exports.processorEventCompatibility(['group.*'], []).matchingEvents,
[],
);
assert.deepEqual(exports.processorEventCompatibility([], []).entries, []);
});