@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.
@@ -0,0 +1,330 @@
1
+ import { BasicEventManager } from "../../src/BasicEventManager.js";
2
+ import { paramCheck, parseEvParamForwardInstructionStr, parseEvParamConditionStr } from "../../src/mapped/utils.js";
3
+ /**
4
+ * Operator for param verification.
5
+ * @sortStrategy source-order
6
+ */
7
+ export var EvParamOperator;
8
+ (function (EvParamOperator) {
9
+ /**
10
+ * Whether the parameter does not exist.
11
+ * <br> NOTE: No suffix is expected after using EXISTS.
12
+ * @example
13
+ * ```ts
14
+ * // would check if the param at index 1 does exist (ie arguments >= 2 in length)
15
+ * '1_'
16
+ * // is functionally equivalent to having NO operator
17
+ * '1'
18
+ * ```
19
+ */
20
+ EvParamOperator["EXISTS"] = "_";
21
+ /**
22
+ * Whether the parameter does not exist.
23
+ * <br> NOTE: No suffix is expected after using NOT_EXISTS.
24
+ * @example
25
+ * ```ts
26
+ * // would check if the param at index 1 does not exist (ie arguments < 2 in length)
27
+ * '1!'
28
+ * ```
29
+ */
30
+ EvParamOperator["NOT_EXISTS"] = "!";
31
+ /**
32
+ * Whether the value is equal to a string
33
+ * @example
34
+ * ```ts
35
+ * // would check if the param at index 1 IS 'monday'
36
+ * '1="monday"'
37
+ * ```
38
+ */
39
+ EvParamOperator["EQUAL"] = "=";
40
+ /**
41
+ * Whether the value is not equal to a string
42
+ * @example
43
+ * ```ts
44
+ * // would check if the param at index 1 is NOT 'monday'
45
+ * '1!="monday"'
46
+ * ```
47
+ */
48
+ EvParamOperator["NOT_EQUAL"] = "!=";
49
+ /**
50
+ * Whether the value ends with a string
51
+ * @example
52
+ * ```ts
53
+ * // would check if the param at index 1 starts with 'mon'
54
+ * '1^="mon"'
55
+ * ```
56
+ */
57
+ EvParamOperator["STARTS_WITH"] = "^=";
58
+ /**
59
+ * Whether the value ends with a string
60
+ * @example
61
+ * ```ts
62
+ * // would check if the param at index 1 ends with 'day'
63
+ * '1$="day"'
64
+ * ```
65
+ */
66
+ EvParamOperator["ENDS_WITH"] = "$=";
67
+ /**
68
+ * Whether the value contains a string
69
+ * @example
70
+ * ```ts
71
+ * // would check if the param at index 1 contains the string 'day'
72
+ * '1*="day"'
73
+ * ```
74
+ */
75
+ EvParamOperator["CONTAINS"] = "*=";
76
+ /**
77
+ * Exact match for space separated words
78
+ * @example
79
+ * ```ts
80
+ * // would check if the param at index 1 was equal to 'monday' or 'tuesday'
81
+ * '1~="monday tuesday"'
82
+ * ```
83
+ */
84
+ EvParamOperator["MATCHES_WORD"] = "~=";
85
+ })(EvParamOperator || (EvParamOperator = {}));
86
+ /**
87
+ * Event forwarder
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * const rootEvMgr = new BasicEventManager();
92
+ * const evFwder = new EvForwarder({
93
+ * eventReceiver: rootEvMgr,
94
+ * eventMaps: [{
95
+ * eventName: "FoodEvent",
96
+ * paramConditions: [],
97
+ * paramForwardInstructions: []
98
+ * }, {
99
+ * eventName: "FoodEvent",
100
+ * forwardedEventName: "AteFood",
101
+ * paramConditions: ['0="Ate"'],
102
+ * paramForwardInstructions: ["2"]
103
+ * }, {
104
+ * eventName: "FoodEvent",
105
+ * forwardedEventName: "AteSnack",
106
+ * paramConditions: ['0="Ate"', '1="Snack"'],
107
+ * paramForwardInstructions: ["2"]
108
+ * }],
109
+ * autoEnable: true
110
+ * });
111
+ *
112
+ * const handleFoodEvent = function () {};
113
+ * const handleAteFood = function () {};
114
+ * const handleAteSnack = function () {};
115
+ * evFwder.on("FoodEvent", handleFoodEvent);
116
+ * evFwder.on("AteFood", handleAteFood);
117
+ * evFwder.on("AteSnack", handleAteSnack);
118
+ *
119
+ * rootEvMgr.trigger("FoodEvent", []);
120
+ * rootEvMgr.trigger("FoodEvent", ["Ate", "Snack", "Chocolate"]);
121
+ * rootEvMgr.trigger("FoodEvent", ["Ate", "Snack", "Biscuit"]);
122
+ * rootEvMgr.trigger("FoodEvent", ["Ate", "Meal", "Sandwich"]);
123
+ * rootEvMgr.trigger("FoodEvent", ["Drank", "Soft", "Lemonade"]);
124
+ * rootEvMgr.trigger("FoodEvent", ["Drank", "Hard", "Vodka"]);
125
+ *
126
+ * // handleFoodEvent invocations:
127
+ * // handleFoodEvent();
128
+ * // handleFoodEvent("Ate", "Snack", "Chocolate");
129
+ * // handleFoodEvent("Ate", "Snack", "Biscuit");
130
+ * // handleFoodEvent("Ate", "Meal", "Sandwich");
131
+ * // handleFoodEvent("Drank", "Soft", "Lemonade");
132
+ * // handleFoodEvent("Drank", "Hard", "Vodka");
133
+ *
134
+ * // handleAteFood invocations:
135
+ * // handleAteFood("Chocolate");
136
+ * // handleAteFood("Biscuit");
137
+ * // handleAteFood("Sandwich");
138
+ *
139
+ * // handleAteSnack invocations:
140
+ * // handleAteSnack("Chocolate");
141
+ * // handleAteSnack("Biscuit");
142
+ * ```
143
+ */
144
+ export class EvForwarder {
145
+ _evReceiver;
146
+ _evMgr;
147
+ _evMaps;
148
+ _active;
149
+ constructor(options) {
150
+ this._evReceiver = options.eventReceiver;
151
+ this._evMgr = new BasicEventManager();
152
+ this._evMaps = (options.eventMaps || []).map(rawMap => new InternalEventMap({
153
+ evMap: rawMap,
154
+ sender: this._evMgr
155
+ }));
156
+ if (options.autoEnable ?? true) {
157
+ this.active = true;
158
+ }
159
+ }
160
+ /**
161
+ * Whether the forwarder should forward events or not.
162
+ */
163
+ get active() {
164
+ return !!this._active;
165
+ }
166
+ /**
167
+ * Whether the forwarder should forward events or not.
168
+ */
169
+ set active(to) {
170
+ delete this._active;
171
+ if (to) {
172
+ this._active = true;
173
+ }
174
+ this._refreshListeners();
175
+ }
176
+ on(eventName, handler, context) {
177
+ return this._evMgr.on.apply(this._evMgr, arguments);
178
+ }
179
+ off(eventName, handler, context) {
180
+ return this._evMgr.off.apply(this._evMgr, arguments);
181
+ }
182
+ register(toState, eventName, handler, context) {
183
+ return this._evMgr.register.apply(this._evMgr, arguments);
184
+ }
185
+ _refreshListeners() {
186
+ let evMaps = this._evMaps;
187
+ let evReceiver = this._evReceiver;
188
+ for (let i = 0; i < evMaps.length; i++) {
189
+ // always deregister
190
+ let curMap = evMaps[i];
191
+ if (!curMap) {
192
+ continue;
193
+ }
194
+ let eventName = curMap.evMap.eventName;
195
+ let handler = curMap.handler;
196
+ evReceiver.off(eventName, handler);
197
+ if (this._active) {
198
+ evReceiver.on(eventName, handler);
199
+ }
200
+ }
201
+ }
202
+ }
203
+ class InternalEventMap {
204
+ evMap;
205
+ handler;
206
+ constructor(options) {
207
+ this.evMap = InternalEventMap.extractMap(options.evMap);
208
+ this.handler = InternalEventMap.generateDefaultHandler(this, options.sender);
209
+ }
210
+ static getforwardedEventName(forEvMap) {
211
+ return forEvMap.forwardedEventName ?? forEvMap.eventName;
212
+ }
213
+ static extractMap(from) {
214
+ let ret = {
215
+ eventName: from.eventName,
216
+ forwardedEventName: from.forwardedEventName,
217
+ paramConditions: (from.paramConditions || []).map(raw => InternalEventMap.extractParamCondition(raw)),
218
+ paramForwardInstructions: (from.paramForwardInstructions || []).map(raw => InternalEventMap.extractParamForwardInstruction(raw))
219
+ };
220
+ return ret;
221
+ }
222
+ static extractParamCondition(from) {
223
+ if (typeof from === "string") {
224
+ return parseEvParamConditionStr(from);
225
+ }
226
+ return from;
227
+ }
228
+ static extractParamForwardInstruction(from) {
229
+ if (typeof from === "string") {
230
+ return parseEvParamForwardInstructionStr(from);
231
+ }
232
+ return from;
233
+ }
234
+ static generateDefaultHandler(forInternalEvMap, sender) {
235
+ const forEvMap = forInternalEvMap.evMap;
236
+ const evNameOut = InternalEventMap.getforwardedEventName(forEvMap);
237
+ const paramConditions = forEvMap.paramConditions;
238
+ const paramForwardInstructions = forEvMap.paramForwardInstructions;
239
+ return function () {
240
+ // TODO: don't even bother if sender cannot actually trigger
241
+ for (let i = 0; i < paramConditions.length; i++) {
242
+ if (!InternalEventMap.runPCCheck(arguments, paramConditions[i])) {
243
+ return false;
244
+ }
245
+ }
246
+ let argsToForward;
247
+ if (paramForwardInstructions.length) {
248
+ argsToForward = InternalEventMap.genForwardedArgs(arguments, paramForwardInstructions);
249
+ }
250
+ else {
251
+ argsToForward = [...arguments];
252
+ }
253
+ sender.trigger(evNameOut, argsToForward);
254
+ };
255
+ }
256
+ static runPCCheck(args, paramCondition) {
257
+ let i = paramCondition.index;
258
+ let operator = paramCondition.operator;
259
+ switch (operator) {
260
+ case EvParamOperator.EXISTS: {
261
+ return i < args.length && i >= 0;
262
+ }
263
+ case EvParamOperator.NOT_EXISTS: {
264
+ return i >= args.length && i >= 0;
265
+ }
266
+ default: {
267
+ const exists = i < args.length && i >= 0;
268
+ if (!exists) {
269
+ return false;
270
+ }
271
+ return paramCheck({
272
+ rawValue: args[i],
273
+ operator,
274
+ comparison: paramCondition.comparison,
275
+ caseSensitive: paramCondition.caseSensitive
276
+ });
277
+ }
278
+ }
279
+ }
280
+ static genForwardedArgs(args, forwardInstructions, intoBuffer) {
281
+ const buffer = intoBuffer ?? [];
282
+ for (let i = 0; i < forwardInstructions.length; i++) {
283
+ let fwdI = forwardInstructions[i];
284
+ let { from, to } = fwdI;
285
+ if (isNaN(from) !== isNaN(to)) {
286
+ // something wrong with this instruction. ignore.
287
+ continue;
288
+ }
289
+ else if (isNaN(from)) {
290
+ // no params should be forwarded. clear and send
291
+ buffer.splice(0, buffer.length);
292
+ return buffer;
293
+ }
294
+ let fromIndex = InternalEventMap.calculateIndex(from, args);
295
+ let toIndex = InternalEventMap.calculateIndex(to, args);
296
+ if (fromIndex < 0 || fromIndex >= args.length) {
297
+ // invalid argument. ignore.
298
+ continue;
299
+ }
300
+ if (toIndex < 0 || toIndex >= args.length) {
301
+ // invalid argument. ignore.
302
+ continue;
303
+ }
304
+ // TODO: improve this algorithm (too tired atm)
305
+ let offset = fromIndex < toIndex ? 1 : -1;
306
+ let curIndex = fromIndex;
307
+ let counter = 0;
308
+ let remainingTimes = Math.abs(fromIndex - toIndex) + 1;
309
+ while (counter < remainingTimes) {
310
+ buffer.push(args[curIndex]);
311
+ curIndex += offset;
312
+ counter += 1;
313
+ }
314
+ }
315
+ return buffer;
316
+ }
317
+ static calculateIndex(forwardIndex, args) {
318
+ if (forwardIndex === Number.NEGATIVE_INFINITY) {
319
+ return 0;
320
+ }
321
+ else if (forwardIndex === Number.POSITIVE_INFINITY) {
322
+ return args.length - 1;
323
+ }
324
+ if (forwardIndex < 0) {
325
+ forwardIndex = args.length + forwardIndex;
326
+ }
327
+ return forwardIndex | 0;
328
+ }
329
+ }
330
+ //# sourceMappingURL=EvForwarder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvForwarder.js","sourceRoot":"","sources":["../../../../src/mapped/EvForwarder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from "./EvForwarder.js";
@@ -0,0 +1,2 @@
1
+ export * from "./EvForwarder.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mapped/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { EvParamCondition, EvParamForwardInstruction, EvParamOperator } from "./EvForwarder.js";
2
+ export declare function parseEvParamConditionStr(str: string): EvParamCondition;
3
+ export declare function parseEvParamForwardInstructionStr(str: string): EvParamForwardInstruction;
4
+ export type ParamCheckOptions = {
5
+ operator: EvParamOperator;
6
+ rawValue: string;
7
+ comparison: string[];
8
+ caseSensitive: boolean;
9
+ };
10
+ export declare function paramCheck(options: ParamCheckOptions): boolean;
11
+ type InternalParamCheckCallbackOptions = Pick<ParamCheckOptions, "rawValue" | "comparison" | "caseSensitive">;
12
+ /**
13
+ * @internal
14
+ */
15
+ export declare function paramCheck_EqualTo({ rawValue, comparison, caseSensitive }: InternalParamCheckCallbackOptions): boolean;
16
+ /**
17
+ * @internal
18
+ */
19
+ export declare function paramCheck_NotEqualTo({ rawValue, comparison, caseSensitive }: InternalParamCheckCallbackOptions): boolean;
20
+ /**
21
+ * @internal
22
+ */
23
+ export declare function paramCheck_StartsWith({ rawValue, comparison, caseSensitive }: InternalParamCheckCallbackOptions): boolean;
24
+ /**
25
+ * @internal
26
+ */
27
+ export declare function paramCheck_EndsWith({ rawValue, comparison, caseSensitive }: InternalParamCheckCallbackOptions): boolean;
28
+ /**
29
+ * @internal
30
+ */
31
+ export declare function paramCheck_Contains({ rawValue, comparison, caseSensitive }: InternalParamCheckCallbackOptions): boolean;
32
+ /**
33
+ * @internal
34
+ */
35
+ export declare function paramCheck_MatchesWord(options: InternalParamCheckCallbackOptions): boolean;
36
+ export {};
@@ -0,0 +1,242 @@
1
+ const CASE_SENSITIVE_BY_DEFAULT = true;
2
+ const EV_PARAM_INFO_NO_SUFFIX_PATTERN = /^\s*(\d+)((?:_)|(?:!))?\s*$/;
3
+ const EV_PARAM_INFO_STANDARD_PATTERN = /^\s*(\d+)\s*((?:=)|(?:!=)|(?:\^=)|(?:\$=)|(?:\*=)|(?:~=))?(.*)$/;
4
+ const STANDARD_SUFFIX_PATTERN = /^\s*\"(.*)\"(\s*([iIsS])\s*)?$/;
5
+ function extractEvParamConditionSuffixInfo(suffixArg) {
6
+ let rawSuffix = suffixArg || "";
7
+ const suffixMatch = rawSuffix.match(STANDARD_SUFFIX_PATTERN);
8
+ if (suffixMatch) {
9
+ let actualSuffixStr = suffixMatch[1];
10
+ let sensitivityFlag = suffixMatch[3];
11
+ sensitivityFlag = sensitivityFlag && sensitivityFlag.toLowerCase();
12
+ return {
13
+ suffix: actualSuffixStr,
14
+ sensitivityFlag: sensitivityFlag || null
15
+ };
16
+ }
17
+ return {
18
+ suffix: rawSuffix,
19
+ sensitivityFlag: null
20
+ };
21
+ }
22
+ export function parseEvParamConditionStr(str) {
23
+ if (!str) {
24
+ throw `Empty string provided`;
25
+ }
26
+ let match = str.match(EV_PARAM_INFO_NO_SUFFIX_PATTERN);
27
+ match = match || str.match(EV_PARAM_INFO_STANDARD_PATTERN);
28
+ if (!match) {
29
+ throw `invalid string '${str}' provided`;
30
+ }
31
+ const indexVal = parseInt(match[1]);
32
+ const operatorArg = match[2];
33
+ let suffixArg = match[3];
34
+ if (!operatorArg || operatorArg === "_" || operatorArg === "!") {
35
+ if (suffixArg) {
36
+ throw `invalid string '${str}' provided - suffix not compatible with operator`;
37
+ }
38
+ return {
39
+ index: indexVal,
40
+ operator: operatorArg || "_",
41
+ caseSensitive: CASE_SENSITIVE_BY_DEFAULT,
42
+ comparison: []
43
+ };
44
+ }
45
+ const suffixInfo = extractEvParamConditionSuffixInfo(suffixArg);
46
+ const rawSuffix = suffixInfo.suffix;
47
+ let comparison;
48
+ if (operatorArg === "~=") {
49
+ comparison = rawSuffix.split(" ").filter(f => !!f);
50
+ }
51
+ else {
52
+ comparison = [rawSuffix];
53
+ }
54
+ let caseSensitive;
55
+ if (suffixInfo.sensitivityFlag) {
56
+ caseSensitive = suffixInfo.sensitivityFlag === "s";
57
+ }
58
+ else {
59
+ caseSensitive = CASE_SENSITIVE_BY_DEFAULT;
60
+ }
61
+ const ret = {
62
+ index: indexVal,
63
+ operator: operatorArg,
64
+ caseSensitive,
65
+ comparison
66
+ };
67
+ return ret;
68
+ }
69
+ const EV_PARAM_FORWARD_INSTRUCTION_STANDARD_PATTERN = /^(-?\d+)(?:(?:-(-?\d+))?|([\-\+])?)$/;
70
+ export function parseEvParamForwardInstructionStr(str) {
71
+ // strip all whitespace
72
+ let strippedStr = (str || "").replace(/\s/g, "");
73
+ if (strippedStr === "!") {
74
+ // do no parameters.
75
+ return {
76
+ from: NaN,
77
+ to: NaN
78
+ };
79
+ }
80
+ let match = strippedStr.match(EV_PARAM_FORWARD_INSTRUCTION_STANDARD_PATTERN);
81
+ if (!match) {
82
+ throw `invalid string '${str}' provided`;
83
+ }
84
+ let paramA = parseInt(match[1]);
85
+ let paramB;
86
+ if (match[2]) {
87
+ paramB = parseInt(match[2]);
88
+ }
89
+ else if (match[3]) {
90
+ // match[3] can only be '+' or '-'
91
+ switch (match[3]) {
92
+ case "-": {
93
+ paramB = Number.NEGATIVE_INFINITY;
94
+ break;
95
+ }
96
+ default: {
97
+ paramB = Number.POSITIVE_INFINITY;
98
+ }
99
+ }
100
+ }
101
+ else {
102
+ // string was only a digit.
103
+ paramB = paramA;
104
+ }
105
+ return {
106
+ from: paramA,
107
+ to: paramB
108
+ };
109
+ }
110
+ export function paramCheck(options) {
111
+ const { operator, ...passThroughOptions } = options;
112
+ const relFunc = PARAM_CHECK_FUNCTION_MAP[operator];
113
+ if (!relFunc) {
114
+ throw `Unable to handle operator: '${operator}'`;
115
+ }
116
+ return relFunc(passThroughOptions);
117
+ }
118
+ const PARAM_CHECK_FUNCTION_MAP = {
119
+ // will always be null (as check doesn't apply to comparison vals)
120
+ _: null,
121
+ // will always be null (as check doesn't apply to comparison vals)
122
+ "!": null,
123
+ "=": paramCheck_EqualTo,
124
+ "!=": paramCheck_NotEqualTo,
125
+ "^=": paramCheck_StartsWith,
126
+ "$=": paramCheck_EndsWith,
127
+ "*=": paramCheck_Contains,
128
+ "~=": paramCheck_MatchesWord
129
+ };
130
+ /**
131
+ * @internal
132
+ */
133
+ export function paramCheck_EqualTo({ rawValue, comparison, caseSensitive }) {
134
+ rawValue = rawValue || "";
135
+ if (comparison && comparison.length) {
136
+ if (!caseSensitive) {
137
+ rawValue = rawValue.toLowerCase();
138
+ }
139
+ for (let i = 0; i < comparison.length; i++) {
140
+ let c = comparison[i];
141
+ if (!caseSensitive && c) {
142
+ c = c.toLowerCase();
143
+ }
144
+ if (c === rawValue) {
145
+ return true;
146
+ }
147
+ }
148
+ }
149
+ return false;
150
+ }
151
+ /**
152
+ * @internal
153
+ */
154
+ export function paramCheck_NotEqualTo({ rawValue, comparison, caseSensitive }) {
155
+ rawValue = rawValue || "";
156
+ if (comparison && comparison.length) {
157
+ if (!caseSensitive) {
158
+ rawValue = rawValue.toLowerCase();
159
+ }
160
+ for (let i = 0; i < comparison.length; i++) {
161
+ let c = comparison[i];
162
+ if (!caseSensitive && c) {
163
+ c = c.toLowerCase();
164
+ }
165
+ if (c === rawValue) {
166
+ return false;
167
+ }
168
+ }
169
+ return true;
170
+ }
171
+ return false;
172
+ }
173
+ /**
174
+ * @internal
175
+ */
176
+ export function paramCheck_StartsWith({ rawValue, comparison, caseSensitive }) {
177
+ rawValue = rawValue || "";
178
+ if (comparison && comparison.length) {
179
+ if (!caseSensitive) {
180
+ rawValue = rawValue.toLowerCase();
181
+ }
182
+ for (let i = 0; i < comparison.length; i++) {
183
+ let c = comparison[i] || "";
184
+ if (!caseSensitive && c) {
185
+ c = c.toLowerCase();
186
+ }
187
+ if (c.startsWith(rawValue)) {
188
+ return true;
189
+ }
190
+ }
191
+ }
192
+ return false;
193
+ }
194
+ /**
195
+ * @internal
196
+ */
197
+ export function paramCheck_EndsWith({ rawValue, comparison, caseSensitive }) {
198
+ rawValue = rawValue || "";
199
+ if (comparison && comparison.length) {
200
+ if (!caseSensitive) {
201
+ rawValue = rawValue.toLowerCase();
202
+ }
203
+ for (let i = 0; i < comparison.length; i++) {
204
+ let c = comparison[i] || "";
205
+ if (!caseSensitive && c) {
206
+ c = c.toLowerCase();
207
+ }
208
+ if (c.endsWith(rawValue)) {
209
+ return true;
210
+ }
211
+ }
212
+ }
213
+ return false;
214
+ }
215
+ /**
216
+ * @internal
217
+ */
218
+ export function paramCheck_Contains({ rawValue, comparison, caseSensitive }) {
219
+ rawValue = rawValue || "";
220
+ if (comparison && comparison.length) {
221
+ if (!caseSensitive) {
222
+ rawValue = rawValue.toLowerCase();
223
+ }
224
+ for (let i = 0; i < comparison.length; i++) {
225
+ let c = comparison[i] || "";
226
+ if (!caseSensitive && c) {
227
+ c = c.toLowerCase();
228
+ }
229
+ if (c.indexOf(rawValue) !== -1) {
230
+ return true;
231
+ }
232
+ }
233
+ }
234
+ return false;
235
+ }
236
+ /**
237
+ * @internal
238
+ */
239
+ export function paramCheck_MatchesWord(options) {
240
+ return paramCheck_EqualTo(options);
241
+ }
242
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/mapped/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e={d:(t,r)=>{for(var s in r)e.o(r,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:r[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.d(t,{default:()=>d});var r={};e.r(r),e.d(r,{EvForwarder:()=>h,EvParamOperator:()=>f});class s{_safeMode;_listeners;_argProcessors;_logger;constructor(){this._safeMode=!0,this._listeners={},this._argProcessors={}}trigger(e){if(!e)return!1;if(!this._listeners[e])return!1;let t;if(t=arguments.length<2?[]:arguments[1],this._argProcessors[e]){let r;try{r=this._argProcessors[e].processor.apply(this._argProcessors[e].context,[e,t])}catch(t){if(!this._safeMode)throw t;return this._logger&&this._logger.error(`Arg processor error for '${e}'`,t),!1}if(!r)return!1;if(!0===r);else{if(!Array.isArray(r)){if(!this._safeMode)throw`Invalid result '${r}' from arg processor for '${e}'`;return this._logger&&this._logger.error(`Invalid result from arg processor for '${e}'`,r),!1}t=r}}let r=this._listeners[e].slice(0);for(let s=0;s<r.length;s++){let n=r[s],i=!1,o=this._listeners[e]?this._listeners[e].length:0;for(let t=0;t<o;t++)if(n==this._listeners[e][t]){i=!0;break}if(i)try{n.handler.apply(n.context,t)}catch(e){if(!this._safeMode)throw e}}return!0}on(e,t,r){return!!e&&!!t&&(this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push({handler:t,context:r}),!0)}off(e,t,r){if(!e)return!1;if(!t)return!1;const s=this._listeners[e];if(!s)return!1;let n=-1;for(let e=0;e<s.length;e++)if(s[e].handler===t&&s[e].context===r){n=e;break}return-1!==n&&(s.splice(n,1),s.length||delete this._listeners[e],!0)}register(e,t,r,s){return arguments.length>3?this[e?"on":"off"](t,r,s):this[e?"on":"off"](t,r)}hasCustomArgumentProcessor(e){return!!this._argProcessors[e]}setCustomArgumentProcessor(e,t,r){return!(!e||(t?(this._argProcessors[e]={processor:t,context:r},0):!this.hasCustomArgumentProcessor(e)||(delete this._argProcessors[e],0)))}get ignoreErrors(){return this._safeMode}set ignoreErrors(e){this._safeMode=!!e}get logger(){return this._logger??null}set logger(e){e?this._logger=e:delete this._logger}}const n=!0,i=/^\s*(\d+)((?:_)|(?:!))?\s*$/,o=/^\s*(\d+)\s*((?:=)|(?:!=)|(?:\^=)|(?:\$=)|(?:\*=)|(?:~=))?(.*)$/,a=/^\s*\"(.*)\"(\s*([iIsS])\s*)?$/;const l=/^(-?\d+)(?:(?:-(-?\d+))?|([\-\+])?)$/,c={_:null,"!":null,"=":u,"!=":function({rawValue:e,comparison:t,caseSensitive:r}){if(e=e||"",t&&t.length){r||(e=e.toLowerCase());for(let s=0;s<t.length;s++){let n=t[s];if(!r&&n&&(n=n.toLowerCase()),n===e)return!1}return!0}return!1},"^=":function({rawValue:e,comparison:t,caseSensitive:r}){if(e=e||"",t&&t.length){r||(e=e.toLowerCase());for(let s=0;s<t.length;s++){let n=t[s]||"";if(!r&&n&&(n=n.toLowerCase()),n.startsWith(e))return!0}}return!1},"$=":function({rawValue:e,comparison:t,caseSensitive:r}){if(e=e||"",t&&t.length){r||(e=e.toLowerCase());for(let s=0;s<t.length;s++){let n=t[s]||"";if(!r&&n&&(n=n.toLowerCase()),n.endsWith(e))return!0}}return!1},"*=":function({rawValue:e,comparison:t,caseSensitive:r}){if(e=e||"",t&&t.length){r||(e=e.toLowerCase());for(let s=0;s<t.length;s++){let n=t[s]||"";if(!r&&n&&(n=n.toLowerCase()),-1!==n.indexOf(e))return!0}}return!1},"~=":function(e){return u(e)}};function u({rawValue:e,comparison:t,caseSensitive:r}){if(e=e||"",t&&t.length){r||(e=e.toLowerCase());for(let s=0;s<t.length;s++){let n=t[s];if(!r&&n&&(n=n.toLowerCase()),n===e)return!0}}return!1}var f;!function(e){e.EXISTS="_",e.NOT_EXISTS="!",e.EQUAL="=",e.NOT_EQUAL="!=",e.STARTS_WITH="^=",e.ENDS_WITH="$=",e.CONTAINS="*=",e.MATCHES_WORD="~="}(f||(f={}));class h{_evReceiver;_evMgr;_evMaps;_active;constructor(e){this._evReceiver=e.eventReceiver,this._evMgr=new s,this._evMaps=(e.eventMaps||[]).map(e=>new g({evMap:e,sender:this._evMgr})),(e.autoEnable??1)&&(this.active=!0)}get active(){return!!this._active}set active(e){delete this._active,e&&(this._active=!0),this._refreshListeners()}on(e,t,r){return this._evMgr.on.apply(this._evMgr,arguments)}off(e,t,r){return this._evMgr.off.apply(this._evMgr,arguments)}register(e,t,r,s){return this._evMgr.register.apply(this._evMgr,arguments)}_refreshListeners(){let e=this._evMaps,t=this._evReceiver;for(let r=0;r<e.length;r++){let s=e[r];if(!s)continue;let n=s.evMap.eventName,i=s.handler;t.off(n,i),this._active&&t.on(n,i)}}}class g{evMap;handler;constructor(e){this.evMap=g.extractMap(e.evMap),this.handler=g.generateDefaultHandler(this,e.sender)}static getforwardedEventName(e){return e.forwardedEventName??e.eventName}static extractMap(e){return{eventName:e.eventName,forwardedEventName:e.forwardedEventName,paramConditions:(e.paramConditions||[]).map(e=>g.extractParamCondition(e)),paramForwardInstructions:(e.paramForwardInstructions||[]).map(e=>g.extractParamForwardInstruction(e))}}static extractParamCondition(e){return"string"==typeof e?function(e){if(!e)throw"Empty string provided";let t=e.match(i);if(t=t||e.match(o),!t)throw`invalid string '${e}' provided`;const r=parseInt(t[1]),s=t[2];let l=t[3];if(!s||"_"===s||"!"===s){if(l)throw`invalid string '${e}' provided - suffix not compatible with operator`;return{index:r,operator:s||"_",caseSensitive:n,comparison:[]}}const c=function(e){let t=e||"";const r=t.match(a);if(r){let e=r[1],t=r[3];return t=t&&t.toLowerCase(),{suffix:e,sensitivityFlag:t||null}}return{suffix:t,sensitivityFlag:null}}(l),u=c.suffix;let f,h;return f="~="===s?u.split(" ").filter(e=>!!e):[u],h=c.sensitivityFlag?"s"===c.sensitivityFlag:n,{index:r,operator:s,caseSensitive:h,comparison:f}}(e):e}static extractParamForwardInstruction(e){return"string"==typeof e?function(e){let t=(e||"").replace(/\s/g,"");if("!"===t)return{from:NaN,to:NaN};let r=t.match(l);if(!r)throw`invalid string '${e}' provided`;let s,n=parseInt(r[1]);return s=r[2]?parseInt(r[2]):r[3]?"-"===r[3]?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY:n,{from:n,to:s}}(e):e}static generateDefaultHandler(e,t){const r=e.evMap,s=g.getforwardedEventName(r),n=r.paramConditions,i=r.paramForwardInstructions;return function(){for(let e=0;e<n.length;e++)if(!g.runPCCheck(arguments,n[e]))return!1;let e;e=i.length?g.genForwardedArgs(arguments,i):[...arguments],t.trigger(s,e)}}static runPCCheck(e,t){let r=t.index,s=t.operator;switch(s){case f.EXISTS:return r<e.length&&r>=0;case f.NOT_EXISTS:return r>=e.length&&r>=0;default:return!!(r<e.length&&r>=0)&&function(e){const{operator:t,...r}=e,s=c[t];if(!s)throw`Unable to handle operator: '${t}'`;return s(r)}({rawValue:e[r],operator:s,comparison:t.comparison,caseSensitive:t.caseSensitive})}}static genForwardedArgs(e,t,r){const s=r??[];for(let r=0;r<t.length;r++){let n=t[r],{from:i,to:o}=n;if(isNaN(i)!==isNaN(o))continue;if(isNaN(i))return s.splice(0,s.length),s;let a=g.calculateIndex(i,e),l=g.calculateIndex(o,e);if(a<0||a>=e.length)continue;if(l<0||l>=e.length)continue;let c=a<l?1:-1,u=a,f=0,h=Math.abs(a-l)+1;for(;f<h;)s.push(e[u]),u+=c,f+=1}return s}static calculateIndex(e,t){return e===Number.NEGATIVE_INFINITY?0:e===Number.POSITIVE_INFINITY?t.length-1:(e<0&&(e=t.length+e),0|e)}}const d={BasicEventManager:s,mapped:r};window.evutils=t.default})();