@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/eventBus.js CHANGED
@@ -1,85 +1,85 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createEventBus = createEventBus;
4
- const event_1 = require("./event");
5
- const types_1 = require("./lib/types");
1
+ import { createEvent } from "./event.js";
2
+ import isPromiseLike from "./lib/isPromiseLike.js";
3
+ import { normalizeEventOptions } from "./lib/normalizeEventOptions.js";
4
+ import { ProxyType, TriggerReturnType, } from "./lib/types.js";
6
5
  function proxyReturnTypeToTriggerReturnType(proxyType) {
7
6
  switch (proxyType) {
8
- case types_1.ProxyType.TRIGGER:
7
+ case ProxyType.TRIGGER:
9
8
  return { returnType: null, resolve: false };
10
- case types_1.ProxyType.RAW:
11
- return { returnType: types_1.TriggerReturnType.RAW, resolve: false };
12
- case types_1.ProxyType.ALL:
13
- return { returnType: types_1.TriggerReturnType.ALL, resolve: false };
14
- case types_1.ProxyType.CONCAT:
15
- return { returnType: types_1.TriggerReturnType.CONCAT, resolve: false };
16
- case types_1.ProxyType.MERGE:
17
- return { returnType: types_1.TriggerReturnType.MERGE, resolve: false };
18
- case types_1.ProxyType.LAST:
19
- return { returnType: types_1.TriggerReturnType.LAST, resolve: false };
20
- case types_1.ProxyType.PIPE:
21
- return { returnType: types_1.TriggerReturnType.PIPE, resolve: false };
22
- case types_1.ProxyType.FIRST:
23
- return { returnType: types_1.TriggerReturnType.FIRST, resolve: false };
24
- case types_1.ProxyType.UNTIL_TRUE:
25
- return { returnType: types_1.TriggerReturnType.UNTIL_TRUE, resolve: false };
26
- case types_1.ProxyType.UNTIL_FALSE:
9
+ case ProxyType.RAW:
10
+ return { returnType: TriggerReturnType.RAW, resolve: false };
11
+ case ProxyType.ALL:
12
+ return { returnType: TriggerReturnType.ALL, resolve: false };
13
+ case ProxyType.CONCAT:
14
+ return { returnType: TriggerReturnType.CONCAT, resolve: false };
15
+ case ProxyType.MERGE:
16
+ return { returnType: TriggerReturnType.MERGE, resolve: false };
17
+ case ProxyType.LAST:
18
+ return { returnType: TriggerReturnType.LAST, resolve: false };
19
+ case ProxyType.PIPE:
20
+ return { returnType: TriggerReturnType.PIPE, resolve: false };
21
+ case ProxyType.FIRST:
22
+ return { returnType: TriggerReturnType.FIRST, resolve: false };
23
+ case ProxyType.UNTIL_TRUE:
24
+ return { returnType: TriggerReturnType.UNTIL_TRUE, resolve: false };
25
+ case ProxyType.UNTIL_FALSE:
27
26
  return {
28
- returnType: types_1.TriggerReturnType.UNTIL_FALSE,
27
+ returnType: TriggerReturnType.UNTIL_FALSE,
29
28
  resolve: false,
30
29
  };
31
- case types_1.ProxyType.FIRST_NON_EMPTY:
30
+ case ProxyType.FIRST_NON_EMPTY:
32
31
  return {
33
- returnType: types_1.TriggerReturnType.FIRST_NON_EMPTY,
32
+ returnType: TriggerReturnType.FIRST_NON_EMPTY,
34
33
  resolve: false,
35
34
  };
36
- case types_1.ProxyType.RESOLVE_ALL:
35
+ case ProxyType.RESOLVE_ALL:
37
36
  return {
38
- returnType: types_1.TriggerReturnType.ALL,
37
+ returnType: TriggerReturnType.ALL,
39
38
  resolve: true,
40
39
  };
41
- case types_1.ProxyType.RESOLVE_MERGE:
40
+ case ProxyType.RESOLVE_MERGE:
42
41
  return {
43
- returnType: types_1.TriggerReturnType.MERGE,
42
+ returnType: TriggerReturnType.MERGE,
44
43
  resolve: true,
45
44
  };
46
- case types_1.ProxyType.RESOLVE_CONCAT:
45
+ case ProxyType.RESOLVE_CONCAT:
47
46
  return {
48
- returnType: types_1.TriggerReturnType.CONCAT,
47
+ returnType: TriggerReturnType.CONCAT,
49
48
  resolve: true,
50
49
  };
51
- case types_1.ProxyType.RESOLVE_FIRST:
50
+ case ProxyType.RESOLVE_FIRST:
52
51
  return {
53
- returnType: types_1.TriggerReturnType.FIRST,
52
+ returnType: TriggerReturnType.FIRST,
54
53
  resolve: true,
55
54
  };
56
- case types_1.ProxyType.RESOLVE_FIRST_NON_EMPTY:
55
+ case ProxyType.RESOLVE_FIRST_NON_EMPTY:
57
56
  return {
58
- returnType: types_1.TriggerReturnType.FIRST_NON_EMPTY,
57
+ returnType: TriggerReturnType.FIRST_NON_EMPTY,
59
58
  resolve: true,
60
59
  };
61
- case types_1.ProxyType.RESOLVE_LAST:
60
+ case ProxyType.RESOLVE_LAST:
62
61
  return {
63
- returnType: types_1.TriggerReturnType.LAST,
62
+ returnType: TriggerReturnType.LAST,
64
63
  resolve: true,
65
64
  };
66
- case types_1.ProxyType.RESOLVE_PIPE:
65
+ case ProxyType.RESOLVE_PIPE:
67
66
  return {
68
- returnType: types_1.TriggerReturnType.PIPE,
67
+ returnType: TriggerReturnType.PIPE,
69
68
  resolve: true,
70
69
  };
71
70
  default:
72
71
  return { returnType: null, resolve: false };
73
72
  }
74
73
  }
75
- function createEventBus(eventBusOptions) {
74
+ export function createEventBus(eventBusOptions) {
76
75
  const events = new Map();
76
+ let currentEventBusOptions = eventBusOptions;
77
77
  let currentTagsFilter = null;
78
78
  let interceptor = null;
79
79
  const proxyListeners = [];
80
80
  const eventSources = [];
81
- const asterisk = (0, event_1.createEvent)();
82
- const errorEvent = (0, event_1.createEvent)();
81
+ const asterisk = createEvent();
82
+ const errorEvent = createEvent();
83
83
  const _getProxyListener = ({ remoteEventName, localEventName, returnType, resolve, localEventNamePrefix, }) => {
84
84
  let listener = proxyListeners.find((listener) => listener.returnType === returnType
85
85
  && listener.resolve === resolve
@@ -132,16 +132,37 @@ function createEventBus(eventBusOptions) {
132
132
  };
133
133
  const add = (name, options) => {
134
134
  if (!events.has(name)) {
135
- events.set(name, (0, event_1.createEvent)(options));
135
+ events.set(name, createEvent(options));
136
136
  }
137
137
  };
138
138
  const _getOrAddEvent = (name) => {
139
139
  var _a;
140
140
  if (!events.has(name)) {
141
- events.set(name, (0, event_1.createEvent)((_a = eventBusOptions === null || eventBusOptions === void 0 ? void 0 : eventBusOptions.eventOptions) === null || _a === void 0 ? void 0 : _a[name]));
141
+ events.set(name, createEvent((_a = currentEventBusOptions === null || currentEventBusOptions === void 0 ? void 0 : currentEventBusOptions.eventOptions) === null || _a === void 0 ? void 0 : _a[name]));
142
142
  }
143
143
  return events.get(name);
144
144
  };
145
+ // Parameter is intentionally map-independent (like `add`) so that the
146
+ // method type is identical across instantiations and a typed bus stays
147
+ // assignable to BaseEventBus (which the React listener hooks rely on).
148
+ const setOptions = (options) => {
149
+ currentEventBusOptions = options;
150
+ const eventOptions = options === null || options === void 0 ? void 0 : options.eventOptions;
151
+ if (!eventOptions) {
152
+ return;
153
+ }
154
+ // Apply present entries to already-created events. Removed entries are
155
+ // intentionally left as-is (the bus can change an event's options but
156
+ // does not un-set them).
157
+ Object.keys(eventOptions).forEach((name) => {
158
+ const e = events.get(name);
159
+ if (e) {
160
+ // Normalize so fields removed from a present entry reset to
161
+ // their defaults (event.setOptions merges, it does not reset).
162
+ e.setOptions(normalizeEventOptions(eventOptions[name]));
163
+ }
164
+ });
165
+ };
145
166
  const intercept = (fn) => {
146
167
  interceptor = fn;
147
168
  };
@@ -163,7 +184,7 @@ function createEventBus(eventBusOptions) {
163
184
  return;
164
185
  }
165
186
  if (evs.subscribed.indexOf(name) === -1) {
166
- const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(evs.eventSource.proxyType || types_1.ProxyType.TRIGGER);
187
+ const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(evs.eventSource.proxyType || ProxyType.TRIGGER);
167
188
  const listener = _getProxyListener({
168
189
  localEventName: null,
169
190
  remoteEventName: name,
@@ -171,7 +192,7 @@ function createEventBus(eventBusOptions) {
171
192
  resolve,
172
193
  localEventNamePrefix: null,
173
194
  });
174
- evs.eventSource.on(name, listener.listener, evs.eventSource, options);
195
+ evs.eventSource.on(name, listener.listener, evs.eventSource);
175
196
  evs.subscribed.push(name);
176
197
  }
177
198
  });
@@ -195,23 +216,28 @@ function createEventBus(eventBusOptions) {
195
216
  const isEmpty = !e.hasListener();
196
217
  eventSources.forEach((evs) => {
197
218
  const inx = evs.subscribed.indexOf(name);
198
- if (inx !== -1) {
219
+ if (inx !== -1 && isEmpty) {
199
220
  evs.subscribed.splice(inx, 1);
200
- if (isEmpty) {
201
- const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(evs.eventSource.proxyType || types_1.ProxyType.TRIGGER);
202
- const listener = _getProxyListener({
203
- localEventName: null,
204
- remoteEventName: name,
205
- returnType,
206
- resolve,
207
- localEventNamePrefix: null,
208
- });
209
- evs.eventSource.un(name, listener.listener, evs.eventSource, tag);
210
- }
221
+ const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(evs.eventSource.proxyType || ProxyType.TRIGGER);
222
+ const listener = _getProxyListener({
223
+ localEventName: null,
224
+ remoteEventName: name,
225
+ returnType,
226
+ resolve,
227
+ localEventNamePrefix: null,
228
+ });
229
+ evs.eventSource.un(name, listener.listener, evs.eventSource, tag);
211
230
  }
212
231
  });
213
232
  }
214
233
  };
234
+ const updateListenerOptions = (name, handler, context, nextOptions) => {
235
+ const e = events.get(name);
236
+ if (!e) {
237
+ return false;
238
+ }
239
+ return e.updateListenerOptions(handler, context !== null && context !== void 0 ? context : null, nextOptions);
240
+ };
215
241
  const _trigger = (name, args, returnType, resolve) => {
216
242
  if (name === "*") {
217
243
  return;
@@ -223,43 +249,57 @@ function createEventBus(eventBusOptions) {
223
249
  }
224
250
  }
225
251
  const e = _getOrAddEvent(name);
252
+ const handleError = (error) => {
253
+ errorEvent.trigger({
254
+ name,
255
+ error: error instanceof Error
256
+ ? error
257
+ : new Error(String(error)),
258
+ args,
259
+ type: "event",
260
+ });
261
+ if (errorEvent.hasListener()) {
262
+ return undefined;
263
+ }
264
+ throw error;
265
+ };
226
266
  const runner = () => {
227
267
  let result;
228
268
  switch (returnType) {
229
- case types_1.TriggerReturnType.RAW:
269
+ case TriggerReturnType.RAW:
230
270
  result = e.raw(...args);
231
271
  break;
232
- case types_1.TriggerReturnType.ALL:
272
+ case TriggerReturnType.ALL:
233
273
  result = resolve ? e.resolveAll(...args) : e.all(...args);
234
274
  break;
235
- case types_1.TriggerReturnType.CONCAT:
275
+ case TriggerReturnType.CONCAT:
236
276
  result = resolve
237
277
  ? e.resolveConcat(...args)
238
278
  : e.concat(...args);
239
279
  break;
240
- case types_1.TriggerReturnType.MERGE:
280
+ case TriggerReturnType.MERGE:
241
281
  result = resolve
242
282
  ? e.resolveMerge(...args)
243
283
  : e.merge(...args);
244
284
  break;
245
- case types_1.TriggerReturnType.LAST:
285
+ case TriggerReturnType.LAST:
246
286
  result = resolve ? e.resolveLast(...args) : e.last(...args);
247
287
  break;
248
- case types_1.TriggerReturnType.PIPE:
288
+ case TriggerReturnType.PIPE:
249
289
  result = resolve ? e.resolvePipe(...args) : e.pipe(...args);
250
290
  break;
251
- case types_1.TriggerReturnType.FIRST:
291
+ case TriggerReturnType.FIRST:
252
292
  result = resolve
253
293
  ? e.resolveFirst(...args)
254
294
  : e.first(...args);
255
295
  break;
256
- case types_1.TriggerReturnType.UNTIL_TRUE:
296
+ case TriggerReturnType.UNTIL_TRUE:
257
297
  result = e.untilTrue(...args);
258
298
  break;
259
- case types_1.TriggerReturnType.UNTIL_FALSE:
299
+ case TriggerReturnType.UNTIL_FALSE:
260
300
  result = e.untilFalse(...args);
261
301
  break;
262
- case types_1.TriggerReturnType.FIRST_NON_EMPTY:
302
+ case TriggerReturnType.FIRST_NON_EMPTY:
263
303
  result = resolve
264
304
  ? e.resolveFirstNonEmpty(...args)
265
305
  : e.firstNonEmpty(...args);
@@ -279,89 +319,82 @@ function createEventBus(eventBusOptions) {
279
319
  result = runner();
280
320
  }
281
321
  asterisk.trigger(name, args, currentTagsFilter);
322
+ if (isPromiseLike(result)) {
323
+ return Promise.resolve(result).catch(handleError);
324
+ }
282
325
  return result;
283
326
  }
284
327
  catch (error) {
285
- errorEvent.trigger({
286
- name,
287
- error: error instanceof Error
288
- ? error
289
- : new Error(String(error)),
290
- args,
291
- type: "event",
292
- });
293
- if (errorEvent.hasListener()) {
294
- return undefined;
295
- }
296
- throw error;
328
+ return handleError(error);
297
329
  }
298
330
  };
299
331
  const trigger = (name, ...args) => {
300
332
  return _trigger(name, args, null, false);
301
333
  };
302
334
  const first = (name, ...args) => {
303
- return _trigger(name, args, types_1.TriggerReturnType.FIRST, false);
335
+ return _trigger(name, args, TriggerReturnType.FIRST, false);
304
336
  };
305
337
  const resolveFirst = (name, ...args) => {
306
- return _trigger(name, args, types_1.TriggerReturnType.FIRST, true);
338
+ return _trigger(name, args, TriggerReturnType.FIRST, true);
307
339
  };
308
340
  const all = (name, ...args) => {
309
- return _trigger(name, args, types_1.TriggerReturnType.ALL, false);
341
+ return _trigger(name, args, TriggerReturnType.ALL, false);
310
342
  };
311
343
  const resolveAll = (name, ...args) => {
312
- return _trigger(name, args, types_1.TriggerReturnType.ALL, true);
344
+ return _trigger(name, args, TriggerReturnType.ALL, true);
313
345
  };
314
346
  const last = (name, ...args) => {
315
- return _trigger(name, args, types_1.TriggerReturnType.LAST, false);
347
+ return _trigger(name, args, TriggerReturnType.LAST, false);
316
348
  };
317
349
  const resolveLast = (name, ...args) => {
318
- return _trigger(name, args, types_1.TriggerReturnType.LAST, true);
350
+ return _trigger(name, args, TriggerReturnType.LAST, true);
319
351
  };
320
352
  const merge = (name, ...args) => {
321
- return _trigger(name, args, types_1.TriggerReturnType.MERGE, false);
353
+ return _trigger(name, args, TriggerReturnType.MERGE, false);
322
354
  };
323
355
  const resolveMerge = (name, ...args) => {
324
- return _trigger(name, args, types_1.TriggerReturnType.MERGE, true);
356
+ return _trigger(name, args, TriggerReturnType.MERGE, true);
325
357
  };
326
358
  const concat = (name, ...args) => {
327
- return _trigger(name, args, types_1.TriggerReturnType.CONCAT, false);
359
+ return _trigger(name, args, TriggerReturnType.CONCAT, false);
328
360
  };
329
361
  const resolveConcat = (name, ...args) => {
330
- return _trigger(name, args, types_1.TriggerReturnType.CONCAT, true);
362
+ return _trigger(name, args, TriggerReturnType.CONCAT, true);
331
363
  };
332
364
  const firstNonEmpty = (name, ...args) => {
333
- return _trigger(name, args, types_1.TriggerReturnType.FIRST_NON_EMPTY, false);
365
+ return _trigger(name, args, TriggerReturnType.FIRST_NON_EMPTY, false);
334
366
  };
335
367
  const resolveFirstNonEmpty = (name, ...args) => {
336
- return _trigger(name, args, types_1.TriggerReturnType.FIRST_NON_EMPTY, true);
368
+ return _trigger(name, args, TriggerReturnType.FIRST_NON_EMPTY, true);
337
369
  };
338
370
  const untilTrue = (name, ...args) => {
339
- return _trigger(name, args, types_1.TriggerReturnType.UNTIL_TRUE, false);
371
+ return _trigger(name, args, TriggerReturnType.UNTIL_TRUE, false);
340
372
  };
341
373
  const untilFalse = (name, ...args) => {
342
- return _trigger(name, args, types_1.TriggerReturnType.UNTIL_FALSE, false);
374
+ return _trigger(name, args, TriggerReturnType.UNTIL_FALSE, false);
343
375
  };
344
376
  const pipe = (name, ...args) => {
345
- return _trigger(name, args, types_1.TriggerReturnType.PIPE, false);
377
+ return _trigger(name, args, TriggerReturnType.PIPE, false);
346
378
  };
347
379
  const resolvePipe = (name, ...args) => {
348
- return _trigger(name, args, types_1.TriggerReturnType.PIPE, true);
380
+ return _trigger(name, args, TriggerReturnType.PIPE, true);
349
381
  };
350
382
  const raw = (name, ...args) => {
351
- return _trigger(name, args, types_1.TriggerReturnType.RAW, false);
383
+ return _trigger(name, args, TriggerReturnType.RAW, false);
352
384
  };
353
385
  const withTags = (tags, callback) => {
386
+ const prevTagsFilter = currentTagsFilter;
354
387
  currentTagsFilter = tags;
355
388
  try {
356
389
  return callback();
357
390
  }
358
391
  finally {
359
- currentTagsFilter = null;
392
+ currentTagsFilter = prevTagsFilter;
360
393
  }
361
394
  };
362
395
  const reset = () => {
363
396
  if (eventSources.length > 0) {
364
- eventSources.forEach((evs) => {
397
+ eventSources.slice().forEach((evs) => {
365
398
  removeEventSource(evs.eventSource);
366
399
  });
367
400
  }
@@ -383,7 +416,7 @@ function createEventBus(eventBusOptions) {
383
416
  });
384
417
  };
385
418
  const relay = ({ eventSource, remoteEventName, localEventName, proxyType, localEventNamePrefix, }) => {
386
- const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(proxyType || types_1.ProxyType.TRIGGER);
419
+ const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(proxyType || ProxyType.TRIGGER);
387
420
  const listener = _getProxyListener({
388
421
  localEventName: localEventName || null,
389
422
  remoteEventName,
@@ -399,7 +432,7 @@ function createEventBus(eventBusOptions) {
399
432
  }
400
433
  };
401
434
  const unrelay = ({ eventSource, remoteEventName, localEventName, proxyType, localEventNamePrefix, }) => {
402
- const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(proxyType || types_1.ProxyType.TRIGGER);
435
+ const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(proxyType || ProxyType.TRIGGER);
403
436
  const listener = _getProxyListener({
404
437
  localEventName: localEventName || null,
405
438
  remoteEventName,
@@ -420,9 +453,28 @@ function createEventBus(eventBusOptions) {
420
453
  if (eventSources.find((evs) => evs.eventSource.name === eventSource.name)) {
421
454
  return;
422
455
  }
423
- eventSources.push({
456
+ const eventSourceData = {
424
457
  eventSource,
425
458
  subscribed: [],
459
+ };
460
+ eventSources.push(eventSourceData);
461
+ events.forEach((event, name) => {
462
+ if (!event.hasListener()
463
+ || eventSource.accepts === false
464
+ || (typeof eventSource.accepts === "function"
465
+ && !eventSource.accepts(name))) {
466
+ return;
467
+ }
468
+ const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(eventSource.proxyType || ProxyType.TRIGGER);
469
+ const listener = _getProxyListener({
470
+ localEventName: null,
471
+ remoteEventName: name,
472
+ returnType,
473
+ resolve,
474
+ localEventNamePrefix: null,
475
+ });
476
+ eventSource.on(name, listener.listener, eventSource);
477
+ eventSourceData.subscribed.push(name);
426
478
  });
427
479
  };
428
480
  const removeEventSource = (eventSource) => {
@@ -433,7 +485,7 @@ function createEventBus(eventBusOptions) {
433
485
  if (inx !== -1) {
434
486
  const evs = eventSources[inx];
435
487
  evs.subscribed.forEach((subscribedName) => {
436
- const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(evs.eventSource.proxyType || types_1.ProxyType.TRIGGER);
488
+ const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(evs.eventSource.proxyType || ProxyType.TRIGGER);
437
489
  const listener = _getProxyListener({
438
490
  localEventName: null,
439
491
  remoteEventName: subscribedName,
@@ -465,6 +517,7 @@ function createEventBus(eventBusOptions) {
465
517
  remove: un,
466
518
  /** @alias removeListener */
467
519
  unsubscribe: un,
520
+ updateListenerOptions,
468
521
  trigger,
469
522
  /** @alias trigger */
470
523
  emit: trigger,
@@ -472,6 +525,7 @@ function createEventBus(eventBusOptions) {
472
525
  dispatch: trigger,
473
526
  get,
474
527
  add,
528
+ setOptions,
475
529
  first,
476
530
  resolveFirst,
477
531
  all,
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export * from "./action";
2
- export * from "./actionBus";
3
- export * from "./actionMap";
4
- export * from "./event";
5
- export * from "./eventBus";
6
- export * from "./lib/types";
7
- export * from "./store";
1
+ export * from "./action.js";
2
+ export * from "./actionBus.js";
3
+ export * from "./actionMap.js";
4
+ export * from "./event.js";
5
+ export * from "./eventBus.js";
6
+ export * from "./lib/types.js";
7
+ export * from "./store.js";
package/dist/index.js CHANGED
@@ -1,23 +1,7 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./action"), exports);
18
- __exportStar(require("./actionBus"), exports);
19
- __exportStar(require("./actionMap"), exports);
20
- __exportStar(require("./event"), exports);
21
- __exportStar(require("./eventBus"), exports);
22
- __exportStar(require("./lib/types"), exports);
23
- __exportStar(require("./store"), exports);
1
+ export * from "./action.js";
2
+ export * from "./actionBus.js";
3
+ export * from "./actionMap.js";
4
+ export * from "./event.js";
5
+ export * from "./eventBus.js";
6
+ export * from "./lib/types.js";
7
+ export * from "./store.js";
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Internal-only symbol used to expose an in-place setter for an action map's
3
+ * forwarded error listeners. Lives under src/lib (which is not re-exported by
4
+ * the package root in index.ts) so it does not become part of the public API
5
+ * surface. Imported by createActionMap (to attach the setter) and by
6
+ * useActionMap (to call it during reconciliation).
7
+ */
8
+ export declare const ActionMapSetErrorListeners: unique symbol;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Internal-only symbol used to expose an in-place setter for an action map's
3
+ * forwarded error listeners. Lives under src/lib (which is not re-exported by
4
+ * the package root in index.ts) so it does not become part of the public API
5
+ * surface. Imported by createActionMap (to attach the setter) and by
6
+ * useActionMap (to call it during reconciliation).
7
+ */
8
+ export const ActionMapSetErrorListeners = Symbol("actionMapSetErrorListeners");
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = asyncCall;
4
- function asyncCall(fn, context, args, timeout) {
1
+ export default function asyncCall(fn, context, args, timeout) {
5
2
  return new Promise((resolve, reject) => {
6
3
  const newArgs = [...(args || [])];
7
4
  setTimeout(() => {
@@ -0,0 +1 @@
1
+ export default function isPromiseLike<T = unknown>(value: unknown): value is PromiseLike<T>;
@@ -0,0 +1,5 @@
1
+ export default function isPromiseLike(value) {
2
+ return ((typeof value === "object" || typeof value === "function")
3
+ && value !== null
4
+ && typeof value.then === "function");
5
+ }
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = listenerSorter;
4
- function listenerSorter(l1, l2) {
1
+ export default function listenerSorter(l1, l2) {
5
2
  const f1 = l1.alwaysFirst === true ? 1 : 0, f2 = l2.alwaysFirst === true ? 1 : 0, ls1 = l1.alwaysLast === true ? 1 : 0, ls2 = l2.alwaysLast === true ? 1 : 0;
6
3
  if (f1 === 1 || f2 === 1) {
7
4
  return f1 === f2 ? 0 : f1 > f2 ? -1 : 1;
@@ -0,0 +1,13 @@
1
+ import type { EventOptions } from "../event.js";
2
+ import type { BaseHandler } from "./types.js";
3
+ /**
4
+ * Produces a complete {@link EventOptions} object with every field set to the
5
+ * provided value or its createEvent default. Used by the reconciliation paths
6
+ * (useEvent and eventBus.setOptions) so that applying options via the
7
+ * merge-based event.setOptions also resets fields that were removed across
8
+ * renders, instead of leaving stale values from a previous render.
9
+ *
10
+ * Internal-only: this module lives under src/lib (not re-exported by the
11
+ * package root) and is not part of the public API surface.
12
+ */
13
+ export declare function normalizeEventOptions(options?: EventOptions<BaseHandler> | null): EventOptions<BaseHandler>;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Produces a complete {@link EventOptions} object with every field set to the
3
+ * provided value or its createEvent default. Used by the reconciliation paths
4
+ * (useEvent and eventBus.setOptions) so that applying options via the
5
+ * merge-based event.setOptions also resets fields that were removed across
6
+ * renders, instead of leaving stale values from a previous render.
7
+ *
8
+ * Internal-only: this module lives under src/lib (not re-exported by the
9
+ * package root) and is not part of the public API surface.
10
+ */
11
+ export function normalizeEventOptions(options) {
12
+ var _a, _b, _c, _d, _e, _f;
13
+ return {
14
+ async: (_a = options === null || options === void 0 ? void 0 : options.async) !== null && _a !== void 0 ? _a : null,
15
+ limit: (_b = options === null || options === void 0 ? void 0 : options.limit) !== null && _b !== void 0 ? _b : null,
16
+ autoTrigger: (_c = options === null || options === void 0 ? void 0 : options.autoTrigger) !== null && _c !== void 0 ? _c : null,
17
+ filter: (_d = options === null || options === void 0 ? void 0 : options.filter) !== null && _d !== void 0 ? _d : null,
18
+ filterContext: (_e = options === null || options === void 0 ? void 0 : options.filterContext) !== null && _e !== void 0 ? _e : null,
19
+ maxListeners: (_f = options === null || options === void 0 ? void 0 : options.maxListeners) !== null && _f !== void 0 ? _f : 0,
20
+ };
21
+ }
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = tagsIntersect;
4
- function tagsIntersect(t1, t2) {
1
+ export default function tagsIntersect(t1, t2) {
5
2
  for (const tag of t1) {
6
3
  if (t2.indexOf(tag) !== -1) {
7
4
  return true;
package/dist/lib/types.js CHANGED
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProxyType = exports.TriggerReturnType = void 0;
4
- var TriggerReturnType;
1
+ export var TriggerReturnType;
5
2
  (function (TriggerReturnType) {
6
3
  TriggerReturnType["RAW"] = "raw";
7
4
  TriggerReturnType["ALL"] = "all";
@@ -13,8 +10,8 @@ var TriggerReturnType;
13
10
  TriggerReturnType["UNTIL_TRUE"] = "true";
14
11
  TriggerReturnType["UNTIL_FALSE"] = "false";
15
12
  TriggerReturnType["FIRST_NON_EMPTY"] = "nonempty";
16
- })(TriggerReturnType || (exports.TriggerReturnType = TriggerReturnType = {}));
17
- var ProxyType;
13
+ })(TriggerReturnType || (TriggerReturnType = {}));
14
+ export var ProxyType;
18
15
  (function (ProxyType) {
19
16
  ProxyType["TRIGGER"] = "trigger";
20
17
  ProxyType["RAW"] = "raw";
@@ -34,4 +31,4 @@ var ProxyType;
34
31
  ProxyType["RESOLVE_FIRST_NON_EMPTY"] = "resolveFirstNonEmpty";
35
32
  ProxyType["RESOLVE_LAST"] = "resolveLast";
36
33
  ProxyType["RESOLVE_PIPE"] = "resolvePipe";
37
- })(ProxyType || (exports.ProxyType = ProxyType = {}));
34
+ })(ProxyType || (ProxyType = {}));
@@ -1,4 +1,4 @@
1
- import type { ErrorListenerSignature, ErrorResponse } from "../lib/types";
1
+ import type { ErrorListenerSignature, ErrorResponse } from "../lib/types.js";
2
2
  export type ErrorBoundaryProps = {
3
3
  children: React.ReactNode;
4
4
  listener?: ErrorListenerSignature<any>;