Skip to content

Commit b75acfd

Browse files
authored
Merge pull request #370 from jagernet-ops/feature/Generic-on-method
fix: Updated engine on overload to include generic option
2 parents d20bd68 + cff1b67 commit b75acfd

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

types/index.d.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ export class Engine {
5151
removeFact(factOrId: string | Fact): boolean;
5252
getFact<T>(factId: string): Fact<T>;
5353

54-
on(eventName: "success", handler: EventHandler): this;
55-
on(eventName: "failure", handler: EventHandler): this;
56-
on(eventName: string, handler: EventHandler): this;
54+
on<T = Event>(eventName: string, handler: EventHandler<T>): this;
5755

5856
run(facts?: Record<string, any>, runOptions?: RunOptions): Promise<EngineResult>;
5957
stop(): this;
@@ -119,8 +117,8 @@ export interface Event {
119117

120118
export type PathResolver = (value: object, path: string) => any;
121119

122-
export type EventHandler = (
123-
event: Event,
120+
export type EventHandler<T = Event> = (
121+
event: T,
124122
almanac: Almanac,
125123
ruleResult: RuleResult
126124
) => void;

types/index.test-d.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ import rulesEngine, {
44
Almanac,
55
EngineResult,
66
Engine,
7+
Event,
78
Fact,
89
Operator,
910
OperatorEvaluator,
1011
PathResolver,
1112
Rule,
1213
RuleProperties,
14+
RuleResult,
1315
RuleSerializable
1416
} from "../";
1517

@@ -93,6 +95,16 @@ expectType<Engine>(engine.addFact(fact));
9395
expectType<Engine>(engine.addFact(dynamicFact));
9496
expectType<boolean>(engine.removeFact(fact));
9597
expectType<Fact<string>>(engine.getFact<string>("test"));
98+
engine.on('success', (event, almanac, ruleResult) => {
99+
expectType<Event>(event)
100+
expectType<Almanac>(almanac)
101+
expectType<RuleResult>(ruleResult)
102+
})
103+
engine.on<{ foo: Array<string> }>('foo', (event, almanac, ruleResult) => {
104+
expectType<{ foo: Array<string> }>(event)
105+
expectType<Almanac>(almanac)
106+
expectType<RuleResult>(ruleResult)
107+
})
96108

97109
// Run the Engine
98110
expectType<Promise<EngineResult>>(engine.run({ displayMessage: true }));

0 commit comments

Comments
 (0)