@kuindji/reactive 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.
Files changed (49) hide show
  1. package/README.md +985 -0
  2. package/dist/action.d.ts +49 -0
  3. package/dist/action.js +77 -0
  4. package/dist/actionBus.d.ts +43 -0
  5. package/dist/actionBus.js +81 -0
  6. package/dist/actionMap.d.ts +23 -0
  7. package/dist/actionMap.js +26 -0
  8. package/dist/event.d.ts +143 -0
  9. package/dist/event.js +538 -0
  10. package/dist/eventBus.d.ts +115 -0
  11. package/dist/eventBus.js +508 -0
  12. package/dist/index.d.ts +5 -0
  13. package/dist/index.js +21 -0
  14. package/dist/lib/asyncCall.d.ts +1 -0
  15. package/dist/lib/asyncCall.js +17 -0
  16. package/dist/lib/listenerSorter.d.ts +5 -0
  17. package/dist/lib/listenerSorter.js +13 -0
  18. package/dist/lib/tagsIntersect.d.ts +1 -0
  19. package/dist/lib/tagsIntersect.js +11 -0
  20. package/dist/lib/types.d.ts +49 -0
  21. package/dist/lib/types.js +37 -0
  22. package/dist/react/ErrorBoundary.d.ts +10 -0
  23. package/dist/react/ErrorBoundary.js +25 -0
  24. package/dist/react/useAction.d.ts +21 -0
  25. package/dist/react/useAction.js +66 -0
  26. package/dist/react/useActionBus.d.ts +38 -0
  27. package/dist/react/useActionBus.js +44 -0
  28. package/dist/react/useActionMap.d.ts +23 -0
  29. package/dist/react/useActionMap.js +25 -0
  30. package/dist/react/useEvent.d.ts +47 -0
  31. package/dist/react/useEvent.js +66 -0
  32. package/dist/react/useEventBus.d.ts +117 -0
  33. package/dist/react/useEventBus.js +66 -0
  34. package/dist/react/useListenToAction.d.ts +3 -0
  35. package/dist/react/useListenToAction.js +38 -0
  36. package/dist/react/useListenToEvent.d.ts +4 -0
  37. package/dist/react/useListenToEvent.js +34 -0
  38. package/dist/react/useListenToEventBus.d.ts +5 -0
  39. package/dist/react/useListenToEventBus.js +37 -0
  40. package/dist/react/useStore.d.ts +51 -0
  41. package/dist/react/useStore.js +30 -0
  42. package/dist/react/useStoreState.d.ts +3 -0
  43. package/dist/react/useStoreState.js +32 -0
  44. package/dist/react.d.ts +10 -0
  45. package/dist/react.js +26 -0
  46. package/dist/store.d.ts +54 -0
  47. package/dist/store.js +193 -0
  48. package/package.json +70 -0
  49. package/src/index.ts +5 -0
package/dist/event.js ADDED
@@ -0,0 +1,538 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createEvent = createEvent;
4
+ const asyncCall_1 = require("./lib/asyncCall");
5
+ const listenerSorter_1 = require("./lib/listenerSorter");
6
+ const tagsIntersect_1 = require("./lib/tagsIntersect");
7
+ const types_1 = require("./lib/types");
8
+ function createEvent(eventOptions = {}) {
9
+ let listeners = [];
10
+ let errorListeners = [];
11
+ let queue = [];
12
+ let suspended = false;
13
+ let queued = false;
14
+ let triggered = 0;
15
+ let lastTrigger = null;
16
+ let sortListeners = false;
17
+ let currentTagsFilter = null;
18
+ const options = Object.assign({ async: null, limit: null, autoTrigger: null, filter: null, filterContext: null, maxListeners: 1000 }, eventOptions);
19
+ const addListener = (handler, listenerOptions = {}) => {
20
+ if (!handler) {
21
+ return;
22
+ }
23
+ if (listeners.find((l) => l.handler === handler && l.context === listenerOptions.context)) {
24
+ return;
25
+ }
26
+ if (listeners.length >= options.maxListeners) {
27
+ throw new Error(`Max listeners (${options.maxListeners}) reached`);
28
+ }
29
+ const listener = Object.assign({ handler, called: 0, count: 0, index: listeners.length, start: 1, context: null, tags: [], extraData: null, first: false, alwaysFirst: false, alwaysLast: false, limit: 0, async: null }, listenerOptions);
30
+ if (listener.async === true) {
31
+ listener.async = 1;
32
+ }
33
+ if (listenerOptions.first === true
34
+ || listenerOptions.alwaysFirst === true) {
35
+ listeners.unshift(listener);
36
+ }
37
+ else {
38
+ listeners.push(listener);
39
+ }
40
+ if (sortListeners) {
41
+ listeners.forEach((l, inx) => {
42
+ l.index = inx;
43
+ });
44
+ listeners.sort((l1, l2) => (0, listenerSorter_1.default)(l1, l2));
45
+ }
46
+ if ((listenerOptions === null || listenerOptions === void 0 ? void 0 : listenerOptions.alwaysFirst) === true
47
+ || (listenerOptions === null || listenerOptions === void 0 ? void 0 : listenerOptions.alwaysLast) === true) {
48
+ sortListeners = true;
49
+ }
50
+ if (options.autoTrigger
51
+ && lastTrigger !== null
52
+ && !suspended) {
53
+ const prevFilter = options.filter;
54
+ options.filter = (args, l) => {
55
+ if (l && l.handler === handler) {
56
+ return prevFilter ? prevFilter(args, l) !== false : true;
57
+ }
58
+ return false;
59
+ };
60
+ _trigger(lastTrigger);
61
+ options.filter = prevFilter;
62
+ }
63
+ };
64
+ const removeListener = (handler, context, tag) => {
65
+ const inx = listeners.findIndex((l) => {
66
+ if (l.handler !== handler) {
67
+ return false;
68
+ }
69
+ if (!!l.context !== !!context) {
70
+ return false;
71
+ }
72
+ if (!!context && l.context !== context) {
73
+ return false;
74
+ }
75
+ if (!!tag && (!l.tags || l.tags.indexOf(tag) === -1)) {
76
+ return false;
77
+ }
78
+ return true;
79
+ });
80
+ if (inx === -1) {
81
+ return false;
82
+ }
83
+ listeners.splice(inx, 1);
84
+ return true;
85
+ };
86
+ const hasListener = (handler, context, tag) => {
87
+ if (handler) {
88
+ return (listeners.findIndex((l) => {
89
+ if (l.handler !== handler) {
90
+ return false;
91
+ }
92
+ if (context && l.context !== context) {
93
+ return false;
94
+ }
95
+ if (tag && (!l.tags || l.tags.indexOf(tag) === -1)) {
96
+ return false;
97
+ }
98
+ return true;
99
+ }) !== -1);
100
+ }
101
+ if (tag) {
102
+ return (listeners.findIndex((l) => l.tags && l.tags.indexOf(tag) !== -1) !== -1);
103
+ }
104
+ else {
105
+ return listeners.length > 0;
106
+ }
107
+ };
108
+ const removeAllListeners = (tag) => {
109
+ if (tag) {
110
+ listeners = listeners.filter((l) => {
111
+ return !l.tags || l.tags.indexOf(tag) === -1;
112
+ });
113
+ }
114
+ else {
115
+ listeners = [];
116
+ }
117
+ };
118
+ const addErrorListener = (handler, context) => {
119
+ if (listeners.find((l) => l.handler === handler && l.context === context)) {
120
+ return;
121
+ }
122
+ errorListeners.push({ handler, context });
123
+ };
124
+ const removeErrorListener = (handler, context) => {
125
+ const inx = errorListeners.findIndex((l) => l.handler === handler && l.context === context);
126
+ if (inx === -1) {
127
+ return false;
128
+ }
129
+ errorListeners.splice(inx, 1);
130
+ return true;
131
+ };
132
+ const suspend = (withQueue = false) => {
133
+ suspended = true;
134
+ if (withQueue) {
135
+ queued = true;
136
+ }
137
+ };
138
+ const resume = () => {
139
+ suspended = false;
140
+ queued = false;
141
+ if (queue.length > 0) {
142
+ for (let i = 0, l = queue.length; i < l; i++) {
143
+ _trigger(queue[i][0], queue[i][1]);
144
+ }
145
+ queue = [];
146
+ }
147
+ };
148
+ const setOptions = (eventOptions) => {
149
+ Object.assign(options, eventOptions);
150
+ };
151
+ const isSuspended = () => suspended;
152
+ const isQueued = () => queued;
153
+ const reset = () => {
154
+ listeners.length = 0;
155
+ queue.length = 0;
156
+ suspended = false;
157
+ queued = false;
158
+ triggered = 0;
159
+ };
160
+ const _listenerCall = (listener, args, resolve = null) => {
161
+ let isAsync = listener.async;
162
+ if (isAsync === null || isAsync === undefined) {
163
+ isAsync = options.async;
164
+ }
165
+ if (isAsync === true) {
166
+ isAsync = 1;
167
+ }
168
+ if (isAsync === null || isAsync === undefined) {
169
+ isAsync = false;
170
+ }
171
+ try {
172
+ const result = isAsync !== false
173
+ ? (0, asyncCall_1.default)(listener.handler, listener.context, args, isAsync)
174
+ : listener.handler.bind(listener.context)(...args);
175
+ if (resolve !== null) {
176
+ if (result instanceof Promise) {
177
+ result.then(resolve);
178
+ }
179
+ else {
180
+ resolve(result);
181
+ }
182
+ }
183
+ return result;
184
+ }
185
+ catch (error) {
186
+ for (const errorListener of errorListeners) {
187
+ errorListener.handler({
188
+ error: error instanceof Error
189
+ ? error
190
+ : new Error(error),
191
+ args: args,
192
+ type: "event",
193
+ });
194
+ }
195
+ if (errorListeners.length === 0) {
196
+ throw error;
197
+ }
198
+ return undefined;
199
+ }
200
+ };
201
+ const _listenerCallWPrev = (listener, args, prevValue, returnType) => {
202
+ if (returnType === types_1.TriggerReturnType.PIPE) {
203
+ args[0] = prevValue;
204
+ // since we don't user listener's arg transformer,
205
+ // we don't need to prepare args
206
+ // args = _prepareListenerArgs(args);
207
+ return _listenerCall(listener, args);
208
+ }
209
+ else if (returnType === types_1.TriggerReturnType.UNTIL_TRUE
210
+ && prevValue === true) {
211
+ return true;
212
+ }
213
+ else if (returnType === types_1.TriggerReturnType.UNTIL_FALSE
214
+ && prevValue === false) {
215
+ return false;
216
+ }
217
+ else if (returnType === types_1.TriggerReturnType.FIRST_NON_EMPTY
218
+ && prevValue !== null
219
+ && prevValue !== undefined) {
220
+ return prevValue;
221
+ }
222
+ return _listenerCall(listener, args);
223
+ };
224
+ const _trigger = (args, returnType = null, tags) => {
225
+ if (queued) {
226
+ queue.push([args, returnType]);
227
+ return;
228
+ }
229
+ if (suspended) {
230
+ return;
231
+ }
232
+ if (options.limit && triggered >= options.limit) {
233
+ return;
234
+ }
235
+ triggered++;
236
+ if (options.autoTrigger) {
237
+ lastTrigger = args.slice();
238
+ }
239
+ // in pipe mode if there is no listeners,
240
+ // we just return piped value
241
+ if (listeners.length === 0) {
242
+ if (returnType === types_1.TriggerReturnType.PIPE) {
243
+ return args.length > 0 ? args[0] : undefined;
244
+ }
245
+ else if (returnType === types_1.TriggerReturnType.ALL
246
+ || returnType === types_1.TriggerReturnType.CONCAT
247
+ || returnType === types_1.TriggerReturnType.RAW) {
248
+ return [];
249
+ }
250
+ else if (returnType === types_1.TriggerReturnType.MERGE) {
251
+ return {};
252
+ }
253
+ return;
254
+ }
255
+ const listenersQueue = listeners.slice();
256
+ const isConsequent = returnType === types_1.TriggerReturnType.PIPE
257
+ || returnType === types_1.TriggerReturnType.UNTIL_TRUE
258
+ || returnType === types_1.TriggerReturnType.UNTIL_FALSE
259
+ || returnType === types_1.TriggerReturnType.FIRST_NON_EMPTY;
260
+ let listener;
261
+ let listenerResult;
262
+ const results = [];
263
+ let hasPromises = false;
264
+ while ((listener = listenersQueue.shift())) {
265
+ if (!listener) {
266
+ continue;
267
+ }
268
+ if (options.filter
269
+ && options.filter.call(options.filterContext, args, listener)
270
+ === false) {
271
+ continue;
272
+ }
273
+ if (tags
274
+ && tags.length > 0
275
+ && (!listener.tags || !(0, tagsIntersect_1.default)(tags, listener.tags))) {
276
+ continue;
277
+ }
278
+ if (currentTagsFilter !== null
279
+ && currentTagsFilter.length > 0
280
+ && !(0, tagsIntersect_1.default)(currentTagsFilter, listener.tags)) {
281
+ continue;
282
+ }
283
+ listener.count++;
284
+ if (listener.start !== undefined
285
+ && listener.start !== null
286
+ && listener.count < listener.start) {
287
+ continue;
288
+ }
289
+ if (isConsequent && results.length > 0) {
290
+ let prev = results[results.length - 1];
291
+ if (hasPromises) {
292
+ const prevPromise = prev instanceof Promise
293
+ ? prev
294
+ : Promise.resolve(prev);
295
+ listenerResult = prevPromise.then(((listener, args, returnType) => (value) => {
296
+ return _listenerCallWPrev(listener, args, value, returnType);
297
+ })(listener, args, returnType));
298
+ }
299
+ else {
300
+ listenerResult = _listenerCallWPrev(listener, args,
301
+ // no promises here
302
+ prev, returnType);
303
+ }
304
+ }
305
+ else {
306
+ listenerResult = _listenerCall(listener, args);
307
+ }
308
+ listener.called++;
309
+ if (listener.called === listener.limit) {
310
+ removeListener(listener.handler, listener.context);
311
+ }
312
+ if (returnType === types_1.TriggerReturnType.FIRST) {
313
+ return listenerResult;
314
+ }
315
+ if (isConsequent) {
316
+ switch (returnType) {
317
+ case types_1.TriggerReturnType.UNTIL_TRUE: {
318
+ if (listenerResult === true) {
319
+ return true;
320
+ }
321
+ break;
322
+ }
323
+ case types_1.TriggerReturnType.UNTIL_FALSE: {
324
+ if (listenerResult === false) {
325
+ return false;
326
+ }
327
+ break;
328
+ }
329
+ case types_1.TriggerReturnType.FIRST_NON_EMPTY: {
330
+ if (!hasPromises
331
+ && !(listenerResult instanceof Promise)
332
+ && listenerResult !== null
333
+ && listenerResult !== undefined) {
334
+ return listenerResult;
335
+ }
336
+ break;
337
+ }
338
+ }
339
+ }
340
+ if (!hasPromises && listenerResult instanceof Promise) {
341
+ hasPromises = true;
342
+ }
343
+ results.push(listenerResult);
344
+ }
345
+ switch (returnType) {
346
+ case types_1.TriggerReturnType.RAW: {
347
+ return results;
348
+ }
349
+ case undefined:
350
+ case null: {
351
+ if (hasPromises) {
352
+ return Promise.all(results).then(() => undefined);
353
+ }
354
+ return;
355
+ }
356
+ case types_1.TriggerReturnType.ALL: {
357
+ return hasPromises
358
+ ? Promise.all(results)
359
+ : results;
360
+ }
361
+ case types_1.TriggerReturnType.CONCAT: {
362
+ return hasPromises
363
+ ? Promise.all(results).then((results) => results.flat())
364
+ : results.flat();
365
+ }
366
+ case types_1.TriggerReturnType.MERGE: {
367
+ return hasPromises
368
+ ? Promise.all(results).then((results) => Object.assign.apply(null, [{}, ...results]))
369
+ : Object.assign.apply(null, [{}, ...results]);
370
+ }
371
+ case types_1.TriggerReturnType.LAST: {
372
+ return results.pop();
373
+ }
374
+ case types_1.TriggerReturnType.UNTIL_TRUE: {
375
+ return;
376
+ }
377
+ case types_1.TriggerReturnType.UNTIL_FALSE: {
378
+ return;
379
+ }
380
+ case types_1.TriggerReturnType.FIRST_NON_EMPTY: {
381
+ return Promise.all(results).then((results) => results.find((r) => r !== undefined && r !== null));
382
+ }
383
+ case types_1.TriggerReturnType.PIPE: {
384
+ return results[results.length - 1];
385
+ }
386
+ }
387
+ };
388
+ const trigger = (...args) => {
389
+ _trigger(args);
390
+ };
391
+ const withTags = (tags, callback) => {
392
+ currentTagsFilter = tags;
393
+ const result = callback();
394
+ currentTagsFilter = null;
395
+ return result;
396
+ };
397
+ const promise = (options) => {
398
+ return new Promise((resolve) => {
399
+ options = Object.assign(Object.assign({}, (options || {})), { limit: 1 });
400
+ const l = ((...args) => resolve(args));
401
+ addListener(l, options);
402
+ });
403
+ };
404
+ const first = (...args) => {
405
+ return _trigger(args, types_1.TriggerReturnType.FIRST);
406
+ };
407
+ const resolveFirst = (...args) => {
408
+ const response = _trigger(args, types_1.TriggerReturnType.FIRST);
409
+ if (response instanceof Promise) {
410
+ return response;
411
+ }
412
+ return Promise.resolve(response);
413
+ };
414
+ const all = (...args) => {
415
+ return _trigger(args, types_1.TriggerReturnType.ALL);
416
+ };
417
+ const resolveAll = (...args) => {
418
+ const response = _trigger(args, types_1.TriggerReturnType.ALL);
419
+ if (response instanceof Promise) {
420
+ return response;
421
+ }
422
+ return Promise.resolve(response);
423
+ };
424
+ const last = (...args) => {
425
+ return _trigger(args, types_1.TriggerReturnType.LAST);
426
+ };
427
+ const resolveLast = (...args) => {
428
+ const response = _trigger(args, types_1.TriggerReturnType.LAST);
429
+ if (response instanceof Promise) {
430
+ return response;
431
+ }
432
+ return Promise.resolve(response);
433
+ };
434
+ const merge = (...args) => {
435
+ return _trigger(args, types_1.TriggerReturnType.MERGE);
436
+ };
437
+ const resolveMerge = (...args) => {
438
+ const response = _trigger(args, types_1.TriggerReturnType.MERGE);
439
+ if (response instanceof Promise) {
440
+ return response;
441
+ }
442
+ return Promise.resolve(response);
443
+ };
444
+ const concat = (...args) => {
445
+ return _trigger(args, types_1.TriggerReturnType.CONCAT);
446
+ };
447
+ const resolveConcat = (...args) => {
448
+ const response = _trigger(args, types_1.TriggerReturnType.CONCAT);
449
+ if (response instanceof Promise) {
450
+ return response;
451
+ }
452
+ return Promise.resolve(response);
453
+ };
454
+ const firstNonEmpty = (...args) => {
455
+ return _trigger(args, types_1.TriggerReturnType.FIRST_NON_EMPTY);
456
+ };
457
+ const resolveFirstNonEmpty = (...args) => {
458
+ const response = _trigger(args, types_1.TriggerReturnType.FIRST_NON_EMPTY);
459
+ if (response instanceof Promise) {
460
+ return response;
461
+ }
462
+ return Promise.resolve(response);
463
+ };
464
+ const untilTrue = (...args) => {
465
+ _trigger(args, types_1.TriggerReturnType.UNTIL_TRUE);
466
+ };
467
+ const untilFalse = (...args) => {
468
+ _trigger(args, types_1.TriggerReturnType.UNTIL_FALSE);
469
+ };
470
+ const pipe = (...args) => {
471
+ return _trigger(args, types_1.TriggerReturnType.PIPE);
472
+ };
473
+ const resolvePipe = (...args) => {
474
+ const response = _trigger(args, types_1.TriggerReturnType.PIPE);
475
+ if (response instanceof Promise) {
476
+ return response;
477
+ }
478
+ return Promise.resolve(response);
479
+ };
480
+ const raw = (...args) => {
481
+ return _trigger(args, types_1.TriggerReturnType.RAW);
482
+ };
483
+ const api = {
484
+ addListener,
485
+ /** @alias addListener */
486
+ on: addListener,
487
+ /** @alias addListener */
488
+ listen: addListener,
489
+ /** @alias addListener */
490
+ subscribe: addListener,
491
+ removeListener,
492
+ /** @alias removeListener */
493
+ un: removeListener,
494
+ /** @alias removeListener */
495
+ off: removeListener,
496
+ /** @alias removeListener */
497
+ remove: removeListener,
498
+ /** @alias removeListener */
499
+ unsubscribe: removeListener,
500
+ trigger,
501
+ /** @alias trigger */
502
+ emit: trigger,
503
+ /** @alias trigger */
504
+ dispatch: trigger,
505
+ hasListener,
506
+ /** @alias hasListener */
507
+ has: hasListener,
508
+ removeAllListeners,
509
+ addErrorListener,
510
+ removeErrorListener,
511
+ suspend,
512
+ resume,
513
+ setOptions,
514
+ reset,
515
+ isSuspended,
516
+ isQueued,
517
+ withTags,
518
+ promise,
519
+ first,
520
+ resolveFirst,
521
+ all,
522
+ resolveAll,
523
+ last,
524
+ resolveLast,
525
+ merge,
526
+ resolveMerge,
527
+ concat,
528
+ resolveConcat,
529
+ firstNonEmpty,
530
+ resolveFirstNonEmpty,
531
+ untilTrue,
532
+ untilFalse,
533
+ pipe,
534
+ resolvePipe,
535
+ raw,
536
+ };
537
+ return api;
538
+ }
@@ -0,0 +1,115 @@
1
+ import { createEvent } from "./event";
2
+ import type { EventDefinitionHelper, EventOptions, ListenerOptions } from "./event";
3
+ import { ApiType, BaseHandler, ErrorListenerSignature, KeyOf, MapKey, ProxyType, TriggerReturnType } from "./lib/types";
4
+ type InterceptorFunction = (name: MapKey, args: any[], tags: string[] | null, returnType: TriggerReturnType | null) => boolean;
5
+ type RelaySource = {
6
+ on: (name: any, fn: (...args: any[]) => any, options?: ListenerOptions) => void;
7
+ addAllEventsListener: (fn: (name: any, args: any[]) => any, options?: ListenerOptions) => void;
8
+ un: (name: any, fn: (...args: any[]) => any, context?: object | null, tag?: string | null) => void;
9
+ removeAllEventsListener: (fn: (name: any, args: any[]) => any, context?: object | null, tag?: string | null) => void;
10
+ };
11
+ export type EventSourceSubscriber = (name: MapKey, fn: BaseHandler, eventSource: EventSource, options?: ListenerOptions) => void;
12
+ export type EventSourceUnsubscriber = (name: MapKey, fn: BaseHandler, eventSource: EventSource, tag?: string | null) => void;
13
+ export type EventSource<On extends BaseHandler = EventSourceSubscriber, Un extends BaseHandler = EventSourceUnsubscriber> = {
14
+ name: MapKey;
15
+ on: On;
16
+ un: Un;
17
+ accepts: ((name: MapKey) => boolean) | boolean;
18
+ proxyType?: ProxyType;
19
+ [key: string]: any;
20
+ };
21
+ export interface BaseEventMap {
22
+ [key: MapKey]: BaseHandler;
23
+ }
24
+ export type DefaultEventMap = {
25
+ [key: MapKey]: (...args: any[]) => void;
26
+ };
27
+ export interface EventBusOptions<EventsMap extends BaseEventMap> {
28
+ eventOptions?: {
29
+ [key in KeyOf<EventsMap>]: EventOptions<EventsMap[key]>;
30
+ };
31
+ }
32
+ export type GetEventsMap<EventDefinitionsMap extends BaseEventMap> = {
33
+ [key in KeyOf<EventDefinitionsMap>]: EventDefinitionHelper<EventDefinitionsMap[key]>;
34
+ };
35
+ type GetEventTypesMap<EventDefinitionsMap extends BaseEventMap> = {
36
+ [key in KeyOf<EventDefinitionsMap>]: ReturnType<typeof createEvent<EventDefinitionsMap[key]>>;
37
+ };
38
+ export type EventBusDefinitionHelper<EventsMap extends BaseEventMap = BaseEventMap> = {
39
+ eventSignatures: EventsMap;
40
+ events: GetEventsMap<EventsMap>;
41
+ eventTypes: GetEventTypesMap<EventsMap>;
42
+ };
43
+ export declare function createEventBus<EventsMap extends BaseEventMap = DefaultEventMap>(eventBusOptions?: EventBusOptions<EventsMap>): ApiType<EventBusDefinitionHelper<EventsMap>, {
44
+ readonly addListener: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, options?: ListenerOptions) => void;
45
+ /** @alias addListener */
46
+ readonly on: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, options?: ListenerOptions) => void;
47
+ /** @alias addListener */
48
+ readonly listen: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, options?: ListenerOptions) => void;
49
+ /** @alias addListener */
50
+ readonly subscribe: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, options?: ListenerOptions) => void;
51
+ readonly once: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, options?: ListenerOptions) => void;
52
+ readonly promise: <K extends KeyOf<GetEventsMap<EventsMap>>>(name: K, options?: ListenerOptions) => Promise<Parameters<EventsMap[K]>>;
53
+ readonly removeListener: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, context?: object | null, tag?: string | null) => void;
54
+ /** @alias removeListener */
55
+ readonly un: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, context?: object | null, tag?: string | null) => void;
56
+ /** @alias removeListener */
57
+ readonly off: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, context?: object | null, tag?: string | null) => void;
58
+ /** @alias removeListener */
59
+ readonly remove: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, context?: object | null, tag?: string | null) => void;
60
+ /** @alias removeListener */
61
+ readonly unsubscribe: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, context?: object | null, tag?: string | null) => void;
62
+ readonly trigger: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => void;
63
+ /** @alias trigger */
64
+ readonly emit: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => void;
65
+ /** @alias trigger */
66
+ readonly dispatch: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => void;
67
+ readonly get: <K extends KeyOf<GetEventsMap<EventsMap>>>(name: K) => GetEventTypesMap<EventsMap>[K];
68
+ readonly add: (name: MapKey, options?: EventOptions<BaseHandler>) => void;
69
+ readonly first: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => ReturnType<EventsMap[K]> | undefined>;
70
+ readonly resolveFirst: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => Promise<Awaited<ReturnType<EventsMap[K]>> | undefined>>;
71
+ readonly all: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => ReturnType<EventsMap[K]>[]>;
72
+ readonly resolveAll: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => Promise<Awaited<ReturnType<EventsMap[K]>>[]>>;
73
+ readonly last: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => ReturnType<EventsMap[K]> | undefined>;
74
+ readonly resolveLast: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => Promise<Awaited<ReturnType<EventsMap[K]>> | undefined>>;
75
+ readonly merge: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => ReturnType<EventsMap[K]> | undefined>;
76
+ readonly resolveMerge: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => Promise<Awaited<ReturnType<EventsMap[K]>> | undefined>>;
77
+ readonly concat: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => (ReturnType<EventsMap[K]> extends infer T ? T extends ReturnType<EventsMap[K]> ? T extends (infer U)[] ? U : T : never : never)[]>;
78
+ readonly resolveConcat: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => Promise<(Awaited<ReturnType<EventsMap[K]>> extends infer T ? T extends Awaited<ReturnType<EventsMap[K]>> ? T extends (infer U)[] ? U : T : never : never)[]>>;
79
+ readonly firstNonEmpty: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => ReturnType<EventsMap[K]> | undefined>;
80
+ readonly resolveFirstNonEmpty: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => Promise<Awaited<ReturnType<EventsMap[K]>> | undefined>>;
81
+ readonly untilTrue: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => void>;
82
+ readonly untilFalse: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => void>;
83
+ readonly pipe: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => ReturnType<EventsMap[K]> | undefined>;
84
+ readonly resolvePipe: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => Promise<Awaited<ReturnType<EventsMap[K]>> | undefined>>;
85
+ readonly raw: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<(...args: Parameters<EventsMap[K]>) => (ReturnType<EventsMap[K]> extends infer T ? T extends ReturnType<EventsMap[K]> ? T extends (infer U)[] ? U : T : never : never)[]>;
86
+ readonly withTags: <T extends (...args: any[]) => any>(tags: string[], callback: T) => ReturnType<T>;
87
+ readonly intercept: (fn: InterceptorFunction) => void;
88
+ readonly stopIntercepting: () => void;
89
+ readonly reset: () => void;
90
+ readonly suspendAll: (withQueue?: boolean) => void;
91
+ readonly resumeAll: () => void;
92
+ readonly relay: ({ eventSource, remoteEventName, localEventName, proxyType, localEventNamePrefix, }: {
93
+ eventSource: RelaySource;
94
+ remoteEventName: MapKey;
95
+ localEventName?: any;
96
+ proxyType?: ProxyType;
97
+ localEventNamePrefix?: string | null;
98
+ }) => void;
99
+ readonly unrelay: ({ eventSource, remoteEventName, localEventName, proxyType, localEventNamePrefix, }: {
100
+ eventSource: RelaySource;
101
+ remoteEventName: MapKey;
102
+ localEventName?: any;
103
+ proxyType?: ProxyType;
104
+ localEventNamePrefix?: string | null;
105
+ }) => void;
106
+ readonly addEventSource: (eventSource: EventSource) => void;
107
+ readonly removeEventSource: (eventSource: EventSource | MapKey) => void;
108
+ readonly addAllEventsListener: (handler: (name: MapKey, args: any[], tags: string[] | null) => void, listenerOptions?: ListenerOptions) => void;
109
+ readonly removeAllEventsListener: (handler: (name: MapKey, args: any[], tags: string[] | null) => void, context?: object | null, tag?: string | null) => boolean;
110
+ readonly addErrorListener: (handler: ErrorListenerSignature<any[]>, listenerOptions?: ListenerOptions) => void;
111
+ readonly removeErrorListener: (handler: ErrorListenerSignature<any[]>, context?: object | null, tag?: string | null) => boolean;
112
+ }>;
113
+ export type BaseEventBusDefinition = EventBusDefinitionHelper<BaseEventMap>;
114
+ export type BaseEventBus = ReturnType<typeof createEventBus<BaseEventMap>>;
115
+ export {};