@kuindji/reactive 1.0.23 → 1.1.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 (58) hide show
  1. package/README.md +34 -11
  2. package/dist/action.d.ts +12 -10
  3. package/dist/action.js +23 -16
  4. package/dist/actionBus.d.ts +8 -4
  5. package/dist/actionBus.js +37 -8
  6. package/dist/actionMap.d.ts +21 -19
  7. package/dist/actionMap.js +12 -9
  8. package/dist/event.d.ts +3 -2
  9. package/dist/event.js +160 -109
  10. package/dist/eventBus.d.ts +5 -3
  11. package/dist/eventBus.js +158 -104
  12. package/dist/index.d.ts +7 -7
  13. package/dist/index.js +7 -23
  14. package/dist/lib/actionMapInternal.d.ts +8 -0
  15. package/dist/lib/actionMapInternal.js +8 -0
  16. package/dist/lib/asyncCall.js +1 -4
  17. package/dist/lib/isPromiseLike.d.ts +1 -0
  18. package/dist/lib/isPromiseLike.js +5 -0
  19. package/dist/lib/listenerSorter.js +1 -4
  20. package/dist/lib/normalizeEventOptions.d.ts +13 -0
  21. package/dist/lib/normalizeEventOptions.js +21 -0
  22. package/dist/lib/tagsIntersect.js +1 -4
  23. package/dist/lib/types.js +4 -7
  24. package/dist/react/ErrorBoundary.d.ts +1 -1
  25. package/dist/react/ErrorBoundary.js +10 -13
  26. package/dist/react/listenerOptionsEqual.d.ts +27 -0
  27. package/dist/react/listenerOptionsEqual.js +121 -0
  28. package/dist/react/useAction.d.ts +3 -3
  29. package/dist/react/useAction.js +25 -25
  30. package/dist/react/useActionBus.d.ts +4 -4
  31. package/dist/react/useActionBus.js +41 -14
  32. package/dist/react/useActionMap.d.ts +4 -4
  33. package/dist/react/useActionMap.js +46 -16
  34. package/dist/react/useEvent.d.ts +2 -2
  35. package/dist/react/useEvent.js +30 -17
  36. package/dist/react/useEventBus.d.ts +2 -2
  37. package/dist/react/useEventBus.js +27 -26
  38. package/dist/react/useListenToAction.d.ts +1 -1
  39. package/dist/react/useListenToAction.js +24 -48
  40. package/dist/react/useListenToActionBus.d.ts +3 -3
  41. package/dist/react/useListenToActionBus.js +22 -19
  42. package/dist/react/useListenToEvent.d.ts +2 -2
  43. package/dist/react/useListenToEvent.js +13 -14
  44. package/dist/react/useListenToEventBus.d.ts +3 -3
  45. package/dist/react/useListenToEventBus.js +14 -15
  46. package/dist/react/useListenToStoreChanges.d.ts +3 -3
  47. package/dist/react/useListenToStoreChanges.js +12 -13
  48. package/dist/react/useReconciledListener.d.ts +33 -0
  49. package/dist/react/useReconciledListener.js +44 -0
  50. package/dist/react/useStore.d.ts +2 -2
  51. package/dist/react/useStore.js +72 -23
  52. package/dist/react/useStoreState.d.ts +2 -2
  53. package/dist/react/useStoreState.js +16 -26
  54. package/dist/react.d.ts +13 -13
  55. package/dist/react.js +13 -29
  56. package/dist/store.d.ts +9 -8
  57. package/dist/store.js +116 -53
  58. package/package.json +13 -3
package/dist/event.js CHANGED
@@ -1,11 +1,9 @@
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 = {}) {
1
+ import asyncCall from "./lib/asyncCall.js";
2
+ import isPromiseLike from "./lib/isPromiseLike.js";
3
+ import listenerSorter from "./lib/listenerSorter.js";
4
+ import tagsIntersect from "./lib/tagsIntersect.js";
5
+ import { TriggerReturnType } from "./lib/types.js";
6
+ export function createEvent(eventOptions = {}) {
9
7
  let listeners = [];
10
8
  const errorListeners = [];
11
9
  let queue = [];
@@ -17,10 +15,12 @@ function createEvent(eventOptions = {}) {
17
15
  let currentTagsFilter = null;
18
16
  const options = Object.assign({ async: null, limit: null, autoTrigger: null, filter: null, filterContext: null, maxListeners: 0 }, eventOptions);
19
17
  const addListener = (handler, listenerOptions = {}) => {
18
+ var _a;
20
19
  if (!handler) {
21
20
  return;
22
21
  }
23
- if (listeners.find((l) => l.handler === handler && l.context === listenerOptions.context)) {
22
+ const listenerContext = (_a = listenerOptions.context) !== null && _a !== void 0 ? _a : null;
23
+ if (listeners.find((l) => l.handler === handler && l.context === listenerContext)) {
24
24
  return;
25
25
  }
26
26
  if (options.maxListeners && listeners.length >= options.maxListeners) {
@@ -41,7 +41,7 @@ function createEvent(eventOptions = {}) {
41
41
  listeners.forEach((l, inx) => {
42
42
  l.index = inx;
43
43
  });
44
- listeners.sort((l1, l2) => (0, listenerSorter_1.default)(l1, l2));
44
+ listeners.sort((l1, l2) => listenerSorter(l1, l2));
45
45
  }
46
46
  if ((listenerOptions === null || listenerOptions === void 0 ? void 0 : listenerOptions.alwaysFirst) === true
47
47
  || (listenerOptions === null || listenerOptions === void 0 ? void 0 : listenerOptions.alwaysLast) === true) {
@@ -57,8 +57,12 @@ function createEvent(eventOptions = {}) {
57
57
  }
58
58
  return false;
59
59
  };
60
- _trigger(lastTrigger);
61
- options.filter = prevFilter;
60
+ try {
61
+ _trigger(lastTrigger);
62
+ }
63
+ finally {
64
+ options.filter = prevFilter;
65
+ }
62
66
  }
63
67
  };
64
68
  const removeListener = (handler, context, tag) => {
@@ -83,6 +87,49 @@ function createEvent(eventOptions = {}) {
83
87
  listeners.splice(inx, 1);
84
88
  return true;
85
89
  };
90
+ const updateListenerOptions = (handler, context = null, nextOptions = {}) => {
91
+ var _a, _b, _c, _d, _e, _f, _g;
92
+ const listenerContext = context !== null && context !== void 0 ? context : null;
93
+ const listener = listeners.find((l) => l.handler === handler && l.context === listenerContext);
94
+ if (!listener) {
95
+ return false;
96
+ }
97
+ const prevAlwaysFirst = listener.alwaysFirst;
98
+ const prevAlwaysLast = listener.alwaysLast;
99
+ // Soft fields, applying the same defaults as addListener so that a
100
+ // removed field resets to its default rather than lingering.
101
+ listener.limit = (_a = nextOptions.limit) !== null && _a !== void 0 ? _a : 0;
102
+ listener.start = (_b = nextOptions.start) !== null && _b !== void 0 ? _b : 1;
103
+ listener.tags = (_c = nextOptions.tags) !== null && _c !== void 0 ? _c : [];
104
+ listener.extraData = (_d = nextOptions.extraData) !== null && _d !== void 0 ? _d : null;
105
+ listener.alwaysFirst = (_e = nextOptions.alwaysFirst) !== null && _e !== void 0 ? _e : false;
106
+ listener.alwaysLast = (_f = nextOptions.alwaysLast) !== null && _f !== void 0 ? _f : false;
107
+ let nextAsync = (_g = nextOptions.async) !== null && _g !== void 0 ? _g : null;
108
+ if (nextAsync === true) {
109
+ nextAsync = 1;
110
+ }
111
+ listener.async = nextAsync;
112
+ // Re-sort if ordering hints changed. Unlike addListener we do NOT
113
+ // rewrite each listener's index here: the existing indices hold the
114
+ // original insertion order, and preserving them lets sorting restore
115
+ // that order when alwaysFirst/alwaysLast is cleared.
116
+ if (listener.alwaysFirst !== prevAlwaysFirst
117
+ || listener.alwaysLast !== prevAlwaysLast) {
118
+ if (listener.alwaysFirst === true || listener.alwaysLast === true) {
119
+ sortListeners = true;
120
+ }
121
+ if (sortListeners) {
122
+ listeners.sort((l1, l2) => listenerSorter(l1, l2));
123
+ }
124
+ }
125
+ // The core auto-remove check is a strict `called === limit`, so a
126
+ // listener whose `called` already exceeds the new limit would never
127
+ // auto-remove. Remove it immediately in that case.
128
+ if (listener.limit !== 0 && listener.called >= listener.limit) {
129
+ removeListener(listener.handler, listener.context);
130
+ }
131
+ return true;
132
+ };
86
133
  const hasListener = (handler, context, tag) => {
87
134
  if (handler) {
88
135
  return (listeners.findIndex((l) => {
@@ -140,7 +187,7 @@ function createEvent(eventOptions = {}) {
140
187
  queued = false;
141
188
  if (queue.length > 0) {
142
189
  for (let i = 0, l = queue.length; i < l; i++) {
143
- _trigger(queue[i][0], queue[i][1]);
190
+ _trigger(queue[i][0], queue[i][1], queue[i][2]);
144
191
  }
145
192
  queue = [];
146
193
  }
@@ -159,7 +206,6 @@ function createEvent(eventOptions = {}) {
159
206
  triggered = 0;
160
207
  lastTrigger = null;
161
208
  sortListeners = false;
162
- cachedPromise = null;
163
209
  };
164
210
  const _listenerCall = (listener, args, resolve = null) => {
165
211
  let isAsync = listener.async;
@@ -174,28 +220,31 @@ function createEvent(eventOptions = {}) {
174
220
  }
175
221
  try {
176
222
  const result = isAsync !== false
177
- ? (0, asyncCall_1.default)(listener.handler, listener.context, args, isAsync)
223
+ ? asyncCall(listener.handler, listener.context, args, isAsync)
178
224
  : listener.handler.bind(listener.context)(...args);
179
- if (resolve !== null) {
180
- if (result instanceof Promise) {
181
- void result.then(resolve).catch((error) => {
182
- for (const errorListener of errorListeners) {
183
- errorListener.handler({
184
- error: error instanceof Error
185
- ? error
186
- : new Error(error),
187
- args: args,
188
- type: "event",
189
- });
190
- }
191
- if (errorListeners.length === 0) {
192
- throw error;
193
- }
194
- });
195
- }
196
- else {
197
- resolve(result);
225
+ if (isPromiseLike(result)) {
226
+ const handledResult = Promise.resolve(result).catch((error) => {
227
+ for (const errorListener of errorListeners) {
228
+ errorListener.handler({
229
+ error: error instanceof Error
230
+ ? error
231
+ : new Error(error),
232
+ args: args,
233
+ type: "event",
234
+ });
235
+ }
236
+ if (errorListeners.length === 0) {
237
+ throw error;
238
+ }
239
+ return undefined;
240
+ });
241
+ if (resolve !== null) {
242
+ void handledResult.then(resolve);
198
243
  }
244
+ return handledResult;
245
+ }
246
+ if (resolve !== null) {
247
+ resolve(result);
199
248
  }
200
249
  return result;
201
250
  }
@@ -216,22 +265,22 @@ function createEvent(eventOptions = {}) {
216
265
  }
217
266
  };
218
267
  const _listenerCallWPrev = (listener, args, prevValue, returnType) => {
219
- if (returnType === types_1.TriggerReturnType.PIPE) {
268
+ if (returnType === TriggerReturnType.PIPE) {
220
269
  args[0] = prevValue;
221
270
  // since we don't user listener's arg transformer,
222
271
  // we don't need to prepare args
223
272
  // args = _prepareListenerArgs(args);
224
273
  return _listenerCall(listener, args);
225
274
  }
226
- else if (returnType === types_1.TriggerReturnType.UNTIL_TRUE
275
+ else if (returnType === TriggerReturnType.UNTIL_TRUE
227
276
  && prevValue === true) {
228
277
  return true;
229
278
  }
230
- else if (returnType === types_1.TriggerReturnType.UNTIL_FALSE
279
+ else if (returnType === TriggerReturnType.UNTIL_FALSE
231
280
  && prevValue === false) {
232
281
  return false;
233
282
  }
234
- else if (returnType === types_1.TriggerReturnType.FIRST_NON_EMPTY
283
+ else if (returnType === TriggerReturnType.FIRST_NON_EMPTY
235
284
  && prevValue !== null
236
285
  && prevValue !== undefined) {
237
286
  return prevValue;
@@ -239,8 +288,13 @@ function createEvent(eventOptions = {}) {
239
288
  return _listenerCall(listener, args);
240
289
  };
241
290
  const _trigger = (args, returnType = null, tags) => {
291
+ var _a, _b;
242
292
  if (queued) {
243
- queue.push([args, returnType]);
293
+ queue.push([
294
+ args,
295
+ returnType,
296
+ (_b = (_a = (tags || currentTagsFilter)) === null || _a === void 0 ? void 0 : _a.slice()) !== null && _b !== void 0 ? _b : null,
297
+ ]);
244
298
  return;
245
299
  }
246
300
  if (suspended) {
@@ -256,24 +310,24 @@ function createEvent(eventOptions = {}) {
256
310
  // in pipe mode if there is no listeners,
257
311
  // we just return piped value
258
312
  if (listeners.length === 0) {
259
- if (returnType === types_1.TriggerReturnType.PIPE) {
313
+ if (returnType === TriggerReturnType.PIPE) {
260
314
  return args.length > 0 ? args[0] : undefined;
261
315
  }
262
- else if (returnType === types_1.TriggerReturnType.ALL
263
- || returnType === types_1.TriggerReturnType.CONCAT
264
- || returnType === types_1.TriggerReturnType.RAW) {
316
+ else if (returnType === TriggerReturnType.ALL
317
+ || returnType === TriggerReturnType.CONCAT
318
+ || returnType === TriggerReturnType.RAW) {
265
319
  return [];
266
320
  }
267
- else if (returnType === types_1.TriggerReturnType.MERGE) {
321
+ else if (returnType === TriggerReturnType.MERGE) {
268
322
  return {};
269
323
  }
270
324
  return;
271
325
  }
272
326
  const listenersQueue = listeners.slice();
273
- const isConsequent = returnType === types_1.TriggerReturnType.PIPE
274
- || returnType === types_1.TriggerReturnType.UNTIL_TRUE
275
- || returnType === types_1.TriggerReturnType.UNTIL_FALSE
276
- || returnType === types_1.TriggerReturnType.FIRST_NON_EMPTY;
327
+ const isConsequent = returnType === TriggerReturnType.PIPE
328
+ || returnType === TriggerReturnType.UNTIL_TRUE
329
+ || returnType === TriggerReturnType.UNTIL_FALSE
330
+ || returnType === TriggerReturnType.FIRST_NON_EMPTY;
277
331
  let listener;
278
332
  let listenerResult;
279
333
  const results = [];
@@ -289,12 +343,12 @@ function createEvent(eventOptions = {}) {
289
343
  }
290
344
  if (tags
291
345
  && tags.length > 0
292
- && (!listener.tags || !(0, tagsIntersect_1.default)(tags, listener.tags))) {
346
+ && (!listener.tags || !tagsIntersect(tags, listener.tags))) {
293
347
  continue;
294
348
  }
295
349
  if (currentTagsFilter !== null
296
350
  && currentTagsFilter.length > 0
297
- && !(0, tagsIntersect_1.default)(currentTagsFilter, listener.tags)) {
351
+ && !tagsIntersect(currentTagsFilter, listener.tags)) {
298
352
  continue;
299
353
  }
300
354
  listener.count++;
@@ -306,9 +360,7 @@ function createEvent(eventOptions = {}) {
306
360
  if (isConsequent && results.length > 0) {
307
361
  const prev = results[results.length - 1];
308
362
  if (hasPromises) {
309
- const prevPromise = prev instanceof Promise
310
- ? prev
311
- : Promise.resolve(prev);
363
+ const prevPromise = Promise.resolve(prev);
312
364
  listenerResult = prevPromise.then(((listener, args, returnType) => (value) => {
313
365
  return _listenerCallWPrev(listener, args, value, returnType);
314
366
  })(listener, args, returnType));
@@ -326,26 +378,26 @@ function createEvent(eventOptions = {}) {
326
378
  if (listener.called === listener.limit) {
327
379
  removeListener(listener.handler, listener.context);
328
380
  }
329
- if (returnType === types_1.TriggerReturnType.FIRST) {
381
+ if (returnType === TriggerReturnType.FIRST) {
330
382
  return listenerResult;
331
383
  }
332
384
  if (isConsequent) {
333
385
  switch (returnType) {
334
- case types_1.TriggerReturnType.UNTIL_TRUE: {
386
+ case TriggerReturnType.UNTIL_TRUE: {
335
387
  if (listenerResult === true) {
336
388
  return true;
337
389
  }
338
390
  break;
339
391
  }
340
- case types_1.TriggerReturnType.UNTIL_FALSE: {
392
+ case TriggerReturnType.UNTIL_FALSE: {
341
393
  if (listenerResult === false) {
342
394
  return false;
343
395
  }
344
396
  break;
345
397
  }
346
- case types_1.TriggerReturnType.FIRST_NON_EMPTY: {
398
+ case TriggerReturnType.FIRST_NON_EMPTY: {
347
399
  if (!hasPromises
348
- && !(listenerResult instanceof Promise)
400
+ && !isPromiseLike(listenerResult)
349
401
  && listenerResult !== null
350
402
  && listenerResult !== undefined) {
351
403
  return listenerResult;
@@ -354,13 +406,13 @@ function createEvent(eventOptions = {}) {
354
406
  }
355
407
  }
356
408
  }
357
- if (!hasPromises && listenerResult instanceof Promise) {
409
+ if (!hasPromises && isPromiseLike(listenerResult)) {
358
410
  hasPromises = true;
359
411
  }
360
412
  results.push(listenerResult);
361
413
  }
362
414
  switch (returnType) {
363
- case types_1.TriggerReturnType.RAW: {
415
+ case TriggerReturnType.RAW: {
364
416
  return results;
365
417
  }
366
418
  case undefined:
@@ -370,36 +422,36 @@ function createEvent(eventOptions = {}) {
370
422
  }
371
423
  return;
372
424
  }
373
- case types_1.TriggerReturnType.ALL: {
425
+ case TriggerReturnType.ALL: {
374
426
  return hasPromises
375
427
  ? Promise.all(results)
376
428
  : results;
377
429
  }
378
- case types_1.TriggerReturnType.CONCAT: {
430
+ case TriggerReturnType.CONCAT: {
379
431
  return hasPromises
380
432
  ? Promise.all(results).then((r) => r.flat())
381
433
  : results.flat();
382
434
  }
383
- case types_1.TriggerReturnType.MERGE: {
435
+ case TriggerReturnType.MERGE: {
384
436
  return hasPromises
385
437
  ? Promise.all(results).then((r) => Object.assign({}, ...r))
386
438
  : Object.assign({}, ...results);
387
439
  }
388
- case types_1.TriggerReturnType.LAST: {
440
+ case TriggerReturnType.LAST: {
389
441
  return results.pop();
390
442
  }
391
- case types_1.TriggerReturnType.UNTIL_TRUE: {
443
+ case TriggerReturnType.UNTIL_TRUE: {
392
444
  return;
393
445
  }
394
- case types_1.TriggerReturnType.UNTIL_FALSE: {
446
+ case TriggerReturnType.UNTIL_FALSE: {
395
447
  return;
396
448
  }
397
- case types_1.TriggerReturnType.FIRST_NON_EMPTY: {
449
+ case TriggerReturnType.FIRST_NON_EMPTY: {
398
450
  return hasPromises
399
451
  ? Promise.all(results).then((r) => r.find((item) => item !== undefined && item !== null))
400
452
  : results.find((item) => item !== undefined && item !== null);
401
453
  }
402
- case types_1.TriggerReturnType.PIPE: {
454
+ case TriggerReturnType.PIPE: {
403
455
  return results[results.length - 1];
404
456
  }
405
457
  }
@@ -408,104 +460,102 @@ function createEvent(eventOptions = {}) {
408
460
  _trigger(args);
409
461
  };
410
462
  const withTags = (tags, callback) => {
463
+ const prevTagsFilter = currentTagsFilter;
411
464
  currentTagsFilter = tags;
412
465
  try {
413
466
  return callback();
414
467
  }
415
468
  finally {
416
- currentTagsFilter = null;
469
+ currentTagsFilter = prevTagsFilter;
417
470
  }
418
471
  };
419
- let cachedPromise = null;
420
472
  const promise = (options) => {
421
- return cachedPromise = cachedPromise
422
- || new Promise((resolve) => {
423
- options = Object.assign(Object.assign({}, (options || {})), { limit: 1 });
424
- const l = ((...args) => {
425
- resolve(args);
426
- cachedPromise = null;
427
- });
428
- addListener(l, options);
473
+ return new Promise((resolve) => {
474
+ options = Object.assign(Object.assign({}, (options || {})), { limit: 1 });
475
+ const l = ((...args) => {
476
+ resolve(args);
429
477
  });
478
+ addListener(l, options);
479
+ });
430
480
  };
431
481
  const first = (...args) => {
432
- return _trigger(args, types_1.TriggerReturnType.FIRST);
482
+ return _trigger(args, TriggerReturnType.FIRST);
433
483
  };
434
484
  const resolveFirst = (...args) => {
435
- const response = _trigger(args, types_1.TriggerReturnType.FIRST);
436
- if (response instanceof Promise) {
437
- return response;
485
+ const response = _trigger(args, TriggerReturnType.FIRST);
486
+ if (isPromiseLike(response)) {
487
+ return Promise.resolve(response);
438
488
  }
439
489
  return Promise.resolve(response);
440
490
  };
441
491
  const all = (...args) => {
442
- return _trigger(args, types_1.TriggerReturnType.ALL);
492
+ return _trigger(args, TriggerReturnType.ALL);
443
493
  };
444
494
  const resolveAll = (...args) => {
445
- const response = _trigger(args, types_1.TriggerReturnType.ALL);
446
- if (response instanceof Promise) {
447
- return response;
495
+ const response = _trigger(args, TriggerReturnType.ALL);
496
+ if (isPromiseLike(response)) {
497
+ return Promise.resolve(response);
448
498
  }
449
499
  return Promise.resolve(response);
450
500
  };
451
501
  const last = (...args) => {
452
- return _trigger(args, types_1.TriggerReturnType.LAST);
502
+ return _trigger(args, TriggerReturnType.LAST);
453
503
  };
454
504
  const resolveLast = (...args) => {
455
- const response = _trigger(args, types_1.TriggerReturnType.LAST);
456
- if (response instanceof Promise) {
457
- return response;
505
+ const response = _trigger(args, TriggerReturnType.LAST);
506
+ if (isPromiseLike(response)) {
507
+ return Promise.resolve(response);
458
508
  }
459
509
  return Promise.resolve(response);
460
510
  };
461
511
  const merge = (...args) => {
462
- return _trigger(args, types_1.TriggerReturnType.MERGE);
512
+ return _trigger(args, TriggerReturnType.MERGE);
463
513
  };
464
514
  const resolveMerge = (...args) => {
465
- const response = _trigger(args, types_1.TriggerReturnType.MERGE);
466
- if (response instanceof Promise) {
467
- return response;
515
+ const response = _trigger(args, TriggerReturnType.MERGE);
516
+ if (isPromiseLike(response)) {
517
+ return Promise.resolve(response);
468
518
  }
469
519
  return Promise.resolve(response);
470
520
  };
471
521
  const concat = (...args) => {
472
- return _trigger(args, types_1.TriggerReturnType.CONCAT);
522
+ return _trigger(args, TriggerReturnType.CONCAT);
473
523
  };
474
524
  const resolveConcat = (...args) => {
475
- const response = _trigger(args, types_1.TriggerReturnType.CONCAT);
476
- if (response instanceof Promise) {
477
- return response;
525
+ const response = _trigger(args, TriggerReturnType.CONCAT);
526
+ if (isPromiseLike(response)) {
527
+ return Promise.resolve(response);
478
528
  }
479
529
  return Promise.resolve(response);
480
530
  };
481
531
  const firstNonEmpty = (...args) => {
482
- return _trigger(args, types_1.TriggerReturnType.FIRST_NON_EMPTY);
532
+ return _trigger(args, TriggerReturnType.FIRST_NON_EMPTY);
483
533
  };
484
534
  const resolveFirstNonEmpty = (...args) => {
485
- const response = _trigger(args, types_1.TriggerReturnType.FIRST_NON_EMPTY);
486
- if (response instanceof Promise) {
487
- return response;
535
+ const response = _trigger(args, TriggerReturnType.FIRST_NON_EMPTY);
536
+ if (isPromiseLike(response)) {
537
+ return Promise.resolve(response);
488
538
  }
489
539
  return Promise.resolve(response);
490
540
  };
491
541
  const untilTrue = (...args) => {
492
- _trigger(args, types_1.TriggerReturnType.UNTIL_TRUE);
542
+ _trigger(args, TriggerReturnType.UNTIL_TRUE);
493
543
  };
494
544
  const untilFalse = (...args) => {
495
- _trigger(args, types_1.TriggerReturnType.UNTIL_FALSE);
545
+ _trigger(args, TriggerReturnType.UNTIL_FALSE);
496
546
  };
497
547
  const pipe = (...args) => {
498
- return _trigger(args, types_1.TriggerReturnType.PIPE);
548
+ return _trigger(args, TriggerReturnType.PIPE);
499
549
  };
500
550
  const resolvePipe = (...args) => {
501
- const response = _trigger(args, types_1.TriggerReturnType.PIPE);
502
- if (response instanceof Promise) {
503
- return response;
551
+ const response = _trigger(args, TriggerReturnType.PIPE);
552
+ if (isPromiseLike(response)) {
553
+ return Promise.resolve(response);
504
554
  }
505
555
  return Promise.resolve(response);
506
556
  };
507
557
  const raw = (...args) => {
508
- return _trigger(args, types_1.TriggerReturnType.RAW);
558
+ return _trigger(args, TriggerReturnType.RAW);
509
559
  };
510
560
  const api = {
511
561
  addListener,
@@ -516,6 +566,7 @@ function createEvent(eventOptions = {}) {
516
566
  /** @alias addListener */
517
567
  subscribe: addListener,
518
568
  removeListener,
569
+ updateListenerOptions,
519
570
  /** @alias removeListener */
520
571
  un: removeListener,
521
572
  /** @alias removeListener */
@@ -1,6 +1,6 @@
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";
1
+ import { createEvent } from "./event.js";
2
+ import type { EventDefinitionHelper, EventOptions, ListenerOptions } from "./event.js";
3
+ import { ApiType, BaseHandler, ErrorListenerSignature, KeyOf, MapKey, ProxyType, TriggerReturnType } from "./lib/types.js";
4
4
  type InterceptorFunction = (name: MapKey, args: any[], tags: string[] | null, returnType: TriggerReturnType | null) => boolean;
5
5
  type RelaySource = {
6
6
  on: (name: any, fn: (...args: any[]) => any, options?: ListenerOptions) => void;
@@ -59,6 +59,7 @@ export declare function createEventBus<EventsMap extends BaseEventMap = DefaultE
59
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
60
  /** @alias removeListener */
61
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 updateListenerOptions: <K extends KeyOf<GetEventsMap<EventsMap>>, H extends GetEventsMap<EventsMap>[K]["signature"]>(name: K, handler: H, context?: object | null, nextOptions?: ListenerOptions) => boolean;
62
63
  readonly trigger: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => void;
63
64
  /** @alias trigger */
64
65
  readonly emit: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => void;
@@ -66,6 +67,7 @@ export declare function createEventBus<EventsMap extends BaseEventMap = DefaultE
66
67
  readonly dispatch: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => void;
67
68
  readonly get: <K extends KeyOf<GetEventsMap<EventsMap>>>(name: K) => GetEventTypesMap<EventsMap>[K];
68
69
  readonly add: (name: MapKey, options?: EventOptions<BaseHandler>) => void;
70
+ readonly setOptions: (options?: EventBusOptions<BaseEventMap>) => void;
69
71
  readonly first: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<GetEventTypesMap<EventsMap>[K]["first"]>;
70
72
  readonly resolveFirst: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<GetEventTypesMap<EventsMap>[K]["resolveFirst"]>;
71
73
  readonly all: <K extends KeyOf<GetEventsMap<EventsMap>>, A extends GetEventsMap<EventsMap>[K]["arguments"]>(name: K, ...args: A) => ReturnType<GetEventTypesMap<EventsMap>[K]["all"]>;