@adrianbutt/evutils 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +26 -0
- package/dist/cjs/index/index.d.ts +7 -0
- package/dist/cjs/src/BasicEventManager.d.ts +95 -0
- package/dist/cjs/src/index.d.ts +1 -0
- package/dist/cjs/src/mapped/EvForwarder.d.ts +265 -0
- package/dist/cjs/src/mapped/index.d.ts +1 -0
- package/dist/cjs/src/mapped/utils.d.ts +36 -0
- package/dist/mjs/index/index.d.ts +7 -0
- package/dist/mjs/index/index.js +8 -0
- package/dist/mjs/index/index.js.map +1 -0
- package/dist/mjs/package.json +3 -0
- package/dist/mjs/src/BasicEventManager.d.ts +95 -0
- package/dist/mjs/src/BasicEventManager.js +225 -0
- package/dist/mjs/src/BasicEventManager.js.map +1 -0
- package/dist/mjs/src/index.d.ts +1 -0
- package/dist/mjs/src/index.js +2 -0
- package/dist/mjs/src/index.js.map +1 -0
- package/dist/mjs/src/mapped/EvForwarder.d.ts +265 -0
- package/dist/mjs/src/mapped/EvForwarder.js +330 -0
- package/dist/mjs/src/mapped/EvForwarder.js.map +1 -0
- package/dist/mjs/src/mapped/index.d.ts +1 -0
- package/dist/mjs/src/mapped/index.js +2 -0
- package/dist/mjs/src/mapped/index.js.map +1 -0
- package/dist/mjs/src/mapped/utils.d.ts +36 -0
- package/dist/mjs/src/mapped/utils.js +242 -0
- package/dist/mjs/src/mapped/utils.js.map +1 -0
- package/dist/web/evutils.js +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
export class BasicEventManager {
|
|
2
|
+
_safeMode;
|
|
3
|
+
_listeners;
|
|
4
|
+
_argProcessors;
|
|
5
|
+
_logger;
|
|
6
|
+
constructor() {
|
|
7
|
+
this._safeMode = true;
|
|
8
|
+
this._listeners = {};
|
|
9
|
+
this._argProcessors = {};
|
|
10
|
+
}
|
|
11
|
+
trigger(eventName) {
|
|
12
|
+
if (!eventName) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (!this._listeners[eventName]) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
let args;
|
|
19
|
+
// parse the args.
|
|
20
|
+
if (arguments.length < 2) {
|
|
21
|
+
// called like this 'trigger(eventName)'
|
|
22
|
+
args = [];
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
args = arguments[1];
|
|
26
|
+
}
|
|
27
|
+
if (this._argProcessors[eventName]) {
|
|
28
|
+
let processedArgs;
|
|
29
|
+
try {
|
|
30
|
+
processedArgs = this._argProcessors[eventName].processor.apply(this._argProcessors[eventName].context, [eventName, args]);
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
if (!this._safeMode) {
|
|
34
|
+
throw e;
|
|
35
|
+
}
|
|
36
|
+
else if (this._logger) {
|
|
37
|
+
this._logger.error(`Arg processor error for '${eventName}'`, e);
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
if (!processedArgs) {
|
|
42
|
+
// cancel
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
if (processedArgs === true) {
|
|
46
|
+
// use existing args
|
|
47
|
+
}
|
|
48
|
+
else if (!Array.isArray(processedArgs)) {
|
|
49
|
+
if (!this._safeMode) {
|
|
50
|
+
throw `Invalid result '${processedArgs}' from arg processor for '${eventName}'`;
|
|
51
|
+
}
|
|
52
|
+
else if (this._logger) {
|
|
53
|
+
this._logger.error(`Invalid result from arg processor for '${eventName}'`, processedArgs);
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
args = processedArgs;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// get a copy of the array in case someone unregisters
|
|
62
|
+
let handlerArr = this._listeners[eventName].slice(0);
|
|
63
|
+
for (let i = 0; i < handlerArr.length; i++) {
|
|
64
|
+
let curHandlerMap = handlerArr[i];
|
|
65
|
+
// find out if we still have the listener registered
|
|
66
|
+
let stillRegistered = false;
|
|
67
|
+
let numListeners = this._listeners[eventName]
|
|
68
|
+
? this._listeners[eventName].length
|
|
69
|
+
: 0;
|
|
70
|
+
for (let j = 0; j < numListeners; j++) {
|
|
71
|
+
if (curHandlerMap == this._listeners[eventName][j]) {
|
|
72
|
+
stillRegistered = true;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// if we can call the method, do so.
|
|
77
|
+
if (stillRegistered) {
|
|
78
|
+
try {
|
|
79
|
+
curHandlerMap.handler.apply(curHandlerMap.context, args);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (!this._safeMode) {
|
|
83
|
+
throw err;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
on(eventName, handler, context) {
|
|
91
|
+
if (!eventName) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
if (!handler) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
if (!this._listeners[eventName]) {
|
|
98
|
+
this._listeners[eventName] = [];
|
|
99
|
+
}
|
|
100
|
+
this._listeners[eventName].push({
|
|
101
|
+
handler,
|
|
102
|
+
context
|
|
103
|
+
});
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
off(eventName, handler, context) {
|
|
107
|
+
if (!eventName) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
if (!handler) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
const relListeners = this._listeners[eventName];
|
|
114
|
+
if (!relListeners) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
let fndIndex = -1;
|
|
118
|
+
for (let i = 0; i < relListeners.length; i++) {
|
|
119
|
+
if (relListeners[i].handler === handler &&
|
|
120
|
+
relListeners[i].context === context) {
|
|
121
|
+
fndIndex = i;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (fndIndex === -1) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
relListeners.splice(fndIndex, 1);
|
|
129
|
+
if (!relListeners.length) {
|
|
130
|
+
delete this._listeners[eventName];
|
|
131
|
+
}
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
register(toState, eventName, handler, context) {
|
|
135
|
+
if (arguments.length > 3) {
|
|
136
|
+
return this[toState ? "on" : "off"](eventName, handler, context);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
return this[toState ? "on" : "off"](eventName, handler);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
hasCustomArgumentProcessor(eventName) {
|
|
143
|
+
return !!this._argProcessors[eventName];
|
|
144
|
+
}
|
|
145
|
+
setCustomArgumentProcessor(eventName, processor, context) {
|
|
146
|
+
if (!eventName) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
if (!processor) {
|
|
150
|
+
if (this.hasCustomArgumentProcessor(eventName)) {
|
|
151
|
+
delete this._argProcessors[eventName];
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
this._argProcessors[eventName] = {
|
|
157
|
+
processor: processor,
|
|
158
|
+
context: context
|
|
159
|
+
};
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
get ignoreErrors() {
|
|
163
|
+
return this._safeMode;
|
|
164
|
+
}
|
|
165
|
+
set ignoreErrors(v) {
|
|
166
|
+
this._safeMode = !!v;
|
|
167
|
+
}
|
|
168
|
+
get logger() {
|
|
169
|
+
return this._logger ?? null;
|
|
170
|
+
}
|
|
171
|
+
set logger(v) {
|
|
172
|
+
if (v) {
|
|
173
|
+
this._logger = v;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
delete this._logger;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Utility class that allows for simple setup of event registration,
|
|
182
|
+
* whilst keeping triggering hidden.
|
|
183
|
+
*/
|
|
184
|
+
export class BasicEventPublisher {
|
|
185
|
+
_evManager;
|
|
186
|
+
constructor(evManager) {
|
|
187
|
+
this._evManager = evManager ?? new BasicEventManager();
|
|
188
|
+
this.on = this._evManager.on.bind(this._evManager);
|
|
189
|
+
this.off = this._evManager.off.bind(this._evManager);
|
|
190
|
+
this.register = this._evManager.register.bind(this._evManager);
|
|
191
|
+
this._trigger = this._evManager.trigger.bind(this._evManager);
|
|
192
|
+
}
|
|
193
|
+
on;
|
|
194
|
+
off;
|
|
195
|
+
register;
|
|
196
|
+
_trigger;
|
|
197
|
+
}
|
|
198
|
+
export function mixinEventPublisherUsingManager(ontoObject, usingManager) {
|
|
199
|
+
// // example usage:
|
|
200
|
+
// type MyEventMap = {
|
|
201
|
+
// myevent: (eventCode: number, label: string) => void;
|
|
202
|
+
// };
|
|
203
|
+
// interface MyEventPublisher extends IBasicEventPublisher<MyEventMap> {}
|
|
204
|
+
// class MyEventPublisher {
|
|
205
|
+
// private _evManager: BasicEventManager<MyEventMap>;
|
|
206
|
+
// constructor() {
|
|
207
|
+
// this._evManager = new BasicEventManager<MyEventMap>();
|
|
208
|
+
// mixinEventPublisherUsingManager<MyEventMap>(this, this._evManager);
|
|
209
|
+
// }
|
|
210
|
+
// sendMyEvent(eventCode: number, label: string) {
|
|
211
|
+
// this._evManager.trigger("myevent", [eventCode, label]);
|
|
212
|
+
// }
|
|
213
|
+
// }
|
|
214
|
+
let mixinProps = {
|
|
215
|
+
on: usingManager.on.bind(usingManager),
|
|
216
|
+
off: usingManager.off.bind(usingManager),
|
|
217
|
+
register: usingManager.register.bind(usingManager)
|
|
218
|
+
};
|
|
219
|
+
for (let key in mixinProps) {
|
|
220
|
+
ontoObject[key] =
|
|
221
|
+
mixinProps[key];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
export default BasicEventManager;
|
|
225
|
+
//# sourceMappingURL=BasicEventManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasicEventManager.js","sourceRoot":"","sources":["../../../src/BasicEventManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BasicEventManager } from "./BasicEventManager.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import type { IBasicEventPublisher, DefaultEventMap, EventHandlerContext, EventMapDef } from "../../src/BasicEventManager.js";
|
|
2
|
+
/**
|
|
3
|
+
* Event param conditions
|
|
4
|
+
* <br> If a string, will be parsed and converted into an EvParamCondition
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* // would check if the param at index 1 does exist (ie arguments >= 2 in length)
|
|
8
|
+
* '1'
|
|
9
|
+
* // would check if the param at index 1 does not exist (ie arguments < 2 in length)
|
|
10
|
+
* '1!'
|
|
11
|
+
* // would check if the param at index 1 IS 'Monday'
|
|
12
|
+
* '1="Monday"'
|
|
13
|
+
* '1="Monday" i' // (case insensitive)
|
|
14
|
+
* // would check if the param at index 1 is NOT 'Monday'
|
|
15
|
+
* '1!="Monday"'
|
|
16
|
+
* '1!="Monday" i' // (case insensitive)
|
|
17
|
+
* // would check if the param at index 1 starts with 'Mon'
|
|
18
|
+
* '1^="Mon"'
|
|
19
|
+
* '1^="Mon" i' // (case insensitive)
|
|
20
|
+
* // would check if the param at index 1 ends with 'day'
|
|
21
|
+
* '1$="day"'
|
|
22
|
+
* '1$="day" i' // (case insensitive)
|
|
23
|
+
* // would check if the param at index 1 contains the string 'day'
|
|
24
|
+
* '1*="day"'
|
|
25
|
+
* '1*="day" i' // (case insensitive)
|
|
26
|
+
* // would check if the param at index 1 was equal to 'Monday' or 'Tuesday'
|
|
27
|
+
* '1~="Monday Tuesday"'
|
|
28
|
+
* '1~="Monday Tuesday" i' // (case insensitive)
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export type EvParamConditionLike = EvParamCondition | string;
|
|
32
|
+
/**
|
|
33
|
+
* Event parameter forwarding instructions
|
|
34
|
+
* <br> If a string, will be parsed and converted into an EvParamCondition
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* // No parameters should be forwarded
|
|
38
|
+
* '!'
|
|
39
|
+
*
|
|
40
|
+
* '1' // -> { from: 1, to: 1 }
|
|
41
|
+
* '2+' // -> { from: 2, to: Number.POSITIVE_INFINITY }
|
|
42
|
+
* '2-' // -> { from: 2, to: Number.NEGATIVE_INFINITY }
|
|
43
|
+
* '6-7' // -> { from: 6, to: 7 }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export type EvParamForwardInstructionLike = EvParamForwardInstruction | string;
|
|
47
|
+
/**
|
|
48
|
+
* Essentially an {@link EvForwarderMap} with the option to specify strings as param properties
|
|
49
|
+
*/
|
|
50
|
+
export type EvForwarderConstructorEventMap = {
|
|
51
|
+
eventName: string;
|
|
52
|
+
forwardedEventName?: string;
|
|
53
|
+
paramConditions: EvParamConditionLike[];
|
|
54
|
+
paramForwardInstructions: EvParamForwardInstructionLike[];
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Options to create an EvForwarder
|
|
58
|
+
* @property eventReceiver - the original or 'root' event broadcaster
|
|
59
|
+
* @property eventMaps - event forwarding instructions
|
|
60
|
+
* @property autoEnable - whether the forwarder should automatically connect to the eventReceiver
|
|
61
|
+
*/
|
|
62
|
+
export type EvForwarderConstructorOptions = {
|
|
63
|
+
eventReceiver: IBasicEventPublisher;
|
|
64
|
+
eventMaps: EvForwarderConstructorEventMap[];
|
|
65
|
+
autoEnable?: boolean;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Event forwarding instructions
|
|
69
|
+
* @property eventName - original event name
|
|
70
|
+
* @property forwardedEventName - the forwarded event name
|
|
71
|
+
* (if not provided, the original event name will be used)
|
|
72
|
+
* @property paramConditions - parameter conditions that the original event must clear
|
|
73
|
+
* @property paramForwardInstructions - how the original event's parameters should be forwarded.
|
|
74
|
+
* (All will be forwarded if not present)
|
|
75
|
+
*/
|
|
76
|
+
export type EvForwarderMap = {
|
|
77
|
+
eventName: string;
|
|
78
|
+
forwardedEventName?: string;
|
|
79
|
+
paramConditions: EvParamCondition[];
|
|
80
|
+
paramForwardInstructions: EvParamForwardInstruction[];
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Used to verify event params
|
|
84
|
+
* @property index - relevant zero-based parameter index
|
|
85
|
+
* @property operator - condition operator to run
|
|
86
|
+
* @property comparison - strings to compare with
|
|
87
|
+
* @property caseSensitive - whether the comparison should be case sensitive
|
|
88
|
+
*
|
|
89
|
+
*/
|
|
90
|
+
export type EvParamCondition = {
|
|
91
|
+
index: number;
|
|
92
|
+
operator: EvParamOperator;
|
|
93
|
+
comparison: string[];
|
|
94
|
+
caseSensitive: boolean;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Used to define what params should be forwarded in an event.
|
|
98
|
+
* <br><br>If both "from" and "to" are NaN -> no parameters should be forwarded
|
|
99
|
+
* <br><br>If both "from" or "to" are less than 0 -> the index is assumed to be an offset from params length
|
|
100
|
+
* @property from - start index
|
|
101
|
+
* @property to - end index
|
|
102
|
+
*/
|
|
103
|
+
export type EvParamForwardInstruction = {
|
|
104
|
+
from: number;
|
|
105
|
+
to: number;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Operator for param verification.
|
|
109
|
+
* @sortStrategy source-order
|
|
110
|
+
*/
|
|
111
|
+
export declare enum EvParamOperator {
|
|
112
|
+
/**
|
|
113
|
+
* Whether the parameter does not exist.
|
|
114
|
+
* <br> NOTE: No suffix is expected after using EXISTS.
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* // would check if the param at index 1 does exist (ie arguments >= 2 in length)
|
|
118
|
+
* '1_'
|
|
119
|
+
* // is functionally equivalent to having NO operator
|
|
120
|
+
* '1'
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
EXISTS = "_",
|
|
124
|
+
/**
|
|
125
|
+
* Whether the parameter does not exist.
|
|
126
|
+
* <br> NOTE: No suffix is expected after using NOT_EXISTS.
|
|
127
|
+
* @example
|
|
128
|
+
* ```ts
|
|
129
|
+
* // would check if the param at index 1 does not exist (ie arguments < 2 in length)
|
|
130
|
+
* '1!'
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
NOT_EXISTS = "!",
|
|
134
|
+
/**
|
|
135
|
+
* Whether the value is equal to a string
|
|
136
|
+
* @example
|
|
137
|
+
* ```ts
|
|
138
|
+
* // would check if the param at index 1 IS 'monday'
|
|
139
|
+
* '1="monday"'
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
EQUAL = "=",
|
|
143
|
+
/**
|
|
144
|
+
* Whether the value is not equal to a string
|
|
145
|
+
* @example
|
|
146
|
+
* ```ts
|
|
147
|
+
* // would check if the param at index 1 is NOT 'monday'
|
|
148
|
+
* '1!="monday"'
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
NOT_EQUAL = "!=",
|
|
152
|
+
/**
|
|
153
|
+
* Whether the value ends with a string
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* // would check if the param at index 1 starts with 'mon'
|
|
157
|
+
* '1^="mon"'
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
STARTS_WITH = "^=",
|
|
161
|
+
/**
|
|
162
|
+
* Whether the value ends with a string
|
|
163
|
+
* @example
|
|
164
|
+
* ```ts
|
|
165
|
+
* // would check if the param at index 1 ends with 'day'
|
|
166
|
+
* '1$="day"'
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
ENDS_WITH = "$=",
|
|
170
|
+
/**
|
|
171
|
+
* Whether the value contains a string
|
|
172
|
+
* @example
|
|
173
|
+
* ```ts
|
|
174
|
+
* // would check if the param at index 1 contains the string 'day'
|
|
175
|
+
* '1*="day"'
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
CONTAINS = "*=",
|
|
179
|
+
/**
|
|
180
|
+
* Exact match for space separated words
|
|
181
|
+
* @example
|
|
182
|
+
* ```ts
|
|
183
|
+
* // would check if the param at index 1 was equal to 'monday' or 'tuesday'
|
|
184
|
+
* '1~="monday tuesday"'
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
MATCHES_WORD = "~="
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Event forwarder
|
|
191
|
+
*
|
|
192
|
+
* @example
|
|
193
|
+
* ```ts
|
|
194
|
+
* const rootEvMgr = new BasicEventManager();
|
|
195
|
+
* const evFwder = new EvForwarder({
|
|
196
|
+
* eventReceiver: rootEvMgr,
|
|
197
|
+
* eventMaps: [{
|
|
198
|
+
* eventName: "FoodEvent",
|
|
199
|
+
* paramConditions: [],
|
|
200
|
+
* paramForwardInstructions: []
|
|
201
|
+
* }, {
|
|
202
|
+
* eventName: "FoodEvent",
|
|
203
|
+
* forwardedEventName: "AteFood",
|
|
204
|
+
* paramConditions: ['0="Ate"'],
|
|
205
|
+
* paramForwardInstructions: ["2"]
|
|
206
|
+
* }, {
|
|
207
|
+
* eventName: "FoodEvent",
|
|
208
|
+
* forwardedEventName: "AteSnack",
|
|
209
|
+
* paramConditions: ['0="Ate"', '1="Snack"'],
|
|
210
|
+
* paramForwardInstructions: ["2"]
|
|
211
|
+
* }],
|
|
212
|
+
* autoEnable: true
|
|
213
|
+
* });
|
|
214
|
+
*
|
|
215
|
+
* const handleFoodEvent = function () {};
|
|
216
|
+
* const handleAteFood = function () {};
|
|
217
|
+
* const handleAteSnack = function () {};
|
|
218
|
+
* evFwder.on("FoodEvent", handleFoodEvent);
|
|
219
|
+
* evFwder.on("AteFood", handleAteFood);
|
|
220
|
+
* evFwder.on("AteSnack", handleAteSnack);
|
|
221
|
+
*
|
|
222
|
+
* rootEvMgr.trigger("FoodEvent", []);
|
|
223
|
+
* rootEvMgr.trigger("FoodEvent", ["Ate", "Snack", "Chocolate"]);
|
|
224
|
+
* rootEvMgr.trigger("FoodEvent", ["Ate", "Snack", "Biscuit"]);
|
|
225
|
+
* rootEvMgr.trigger("FoodEvent", ["Ate", "Meal", "Sandwich"]);
|
|
226
|
+
* rootEvMgr.trigger("FoodEvent", ["Drank", "Soft", "Lemonade"]);
|
|
227
|
+
* rootEvMgr.trigger("FoodEvent", ["Drank", "Hard", "Vodka"]);
|
|
228
|
+
*
|
|
229
|
+
* // handleFoodEvent invocations:
|
|
230
|
+
* // handleFoodEvent();
|
|
231
|
+
* // handleFoodEvent("Ate", "Snack", "Chocolate");
|
|
232
|
+
* // handleFoodEvent("Ate", "Snack", "Biscuit");
|
|
233
|
+
* // handleFoodEvent("Ate", "Meal", "Sandwich");
|
|
234
|
+
* // handleFoodEvent("Drank", "Soft", "Lemonade");
|
|
235
|
+
* // handleFoodEvent("Drank", "Hard", "Vodka");
|
|
236
|
+
*
|
|
237
|
+
* // handleAteFood invocations:
|
|
238
|
+
* // handleAteFood("Chocolate");
|
|
239
|
+
* // handleAteFood("Biscuit");
|
|
240
|
+
* // handleAteFood("Sandwich");
|
|
241
|
+
*
|
|
242
|
+
* // handleAteSnack invocations:
|
|
243
|
+
* // handleAteSnack("Chocolate");
|
|
244
|
+
* // handleAteSnack("Biscuit");
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
export declare class EvForwarder<TEventMap extends EventMapDef<TEventMap> = DefaultEventMap> implements IBasicEventPublisher<TEventMap> {
|
|
248
|
+
private _evReceiver;
|
|
249
|
+
private _evMgr;
|
|
250
|
+
private _evMaps;
|
|
251
|
+
private _active?;
|
|
252
|
+
constructor(options: EvForwarderConstructorOptions);
|
|
253
|
+
/**
|
|
254
|
+
* Whether the forwarder should forward events or not.
|
|
255
|
+
*/
|
|
256
|
+
get active(): boolean;
|
|
257
|
+
/**
|
|
258
|
+
* Whether the forwarder should forward events or not.
|
|
259
|
+
*/
|
|
260
|
+
set active(to: boolean);
|
|
261
|
+
on<T extends keyof TEventMap & string>(eventName: T, handler: TEventMap[T], context?: EventHandlerContext): boolean;
|
|
262
|
+
off<T extends keyof TEventMap & string>(eventName: T, handler: TEventMap[T], context?: EventHandlerContext): boolean;
|
|
263
|
+
register<T extends keyof TEventMap & string>(toState: boolean, eventName: T, handler: TEventMap[T], context?: EventHandlerContext): boolean;
|
|
264
|
+
private _refreshListeners;
|
|
265
|
+
}
|