@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.
- package/README.md +34 -11
- package/dist/action.d.ts +12 -10
- package/dist/action.js +23 -16
- package/dist/actionBus.d.ts +8 -4
- package/dist/actionBus.js +37 -8
- package/dist/actionMap.d.ts +21 -19
- package/dist/actionMap.js +12 -9
- package/dist/event.d.ts +3 -2
- package/dist/event.js +160 -109
- package/dist/eventBus.d.ts +5 -3
- package/dist/eventBus.js +158 -104
- package/dist/index.d.ts +7 -7
- package/dist/index.js +7 -23
- package/dist/lib/actionMapInternal.d.ts +8 -0
- package/dist/lib/actionMapInternal.js +8 -0
- package/dist/lib/asyncCall.js +1 -4
- package/dist/lib/isPromiseLike.d.ts +1 -0
- package/dist/lib/isPromiseLike.js +5 -0
- package/dist/lib/listenerSorter.js +1 -4
- package/dist/lib/normalizeEventOptions.d.ts +13 -0
- package/dist/lib/normalizeEventOptions.js +21 -0
- package/dist/lib/tagsIntersect.js +1 -4
- package/dist/lib/types.js +4 -7
- package/dist/react/ErrorBoundary.d.ts +1 -1
- package/dist/react/ErrorBoundary.js +10 -13
- package/dist/react/listenerOptionsEqual.d.ts +27 -0
- package/dist/react/listenerOptionsEqual.js +121 -0
- package/dist/react/useAction.d.ts +3 -3
- package/dist/react/useAction.js +25 -25
- package/dist/react/useActionBus.d.ts +4 -4
- package/dist/react/useActionBus.js +41 -14
- package/dist/react/useActionMap.d.ts +4 -4
- package/dist/react/useActionMap.js +46 -16
- package/dist/react/useEvent.d.ts +2 -2
- package/dist/react/useEvent.js +30 -17
- package/dist/react/useEventBus.d.ts +2 -2
- package/dist/react/useEventBus.js +27 -26
- package/dist/react/useListenToAction.d.ts +1 -1
- package/dist/react/useListenToAction.js +24 -48
- package/dist/react/useListenToActionBus.d.ts +3 -3
- package/dist/react/useListenToActionBus.js +22 -19
- package/dist/react/useListenToEvent.d.ts +2 -2
- package/dist/react/useListenToEvent.js +13 -14
- package/dist/react/useListenToEventBus.d.ts +3 -3
- package/dist/react/useListenToEventBus.js +14 -15
- package/dist/react/useListenToStoreChanges.d.ts +3 -3
- package/dist/react/useListenToStoreChanges.js +12 -13
- package/dist/react/useReconciledListener.d.ts +33 -0
- package/dist/react/useReconciledListener.js +44 -0
- package/dist/react/useStore.d.ts +2 -2
- package/dist/react/useStore.js +72 -23
- package/dist/react/useStoreState.d.ts +2 -2
- package/dist/react/useStoreState.js +16 -26
- package/dist/react.d.ts +13 -13
- package/dist/react.js +13 -29
- package/dist/store.d.ts +9 -8
- package/dist/store.js +116 -53
- package/package.json +13 -3
package/dist/event.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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) => (
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
? (
|
|
223
|
+
? asyncCall(listener.handler, listener.context, args, isAsync)
|
|
178
224
|
: listener.handler.bind(listener.context)(...args);
|
|
179
|
-
if (
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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 ===
|
|
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 ===
|
|
275
|
+
else if (returnType === TriggerReturnType.UNTIL_TRUE
|
|
227
276
|
&& prevValue === true) {
|
|
228
277
|
return true;
|
|
229
278
|
}
|
|
230
|
-
else if (returnType ===
|
|
279
|
+
else if (returnType === TriggerReturnType.UNTIL_FALSE
|
|
231
280
|
&& prevValue === false) {
|
|
232
281
|
return false;
|
|
233
282
|
}
|
|
234
|
-
else if (returnType ===
|
|
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([
|
|
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 ===
|
|
313
|
+
if (returnType === TriggerReturnType.PIPE) {
|
|
260
314
|
return args.length > 0 ? args[0] : undefined;
|
|
261
315
|
}
|
|
262
|
-
else if (returnType ===
|
|
263
|
-
|| returnType ===
|
|
264
|
-
|| returnType ===
|
|
316
|
+
else if (returnType === TriggerReturnType.ALL
|
|
317
|
+
|| returnType === TriggerReturnType.CONCAT
|
|
318
|
+
|| returnType === TriggerReturnType.RAW) {
|
|
265
319
|
return [];
|
|
266
320
|
}
|
|
267
|
-
else if (returnType ===
|
|
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 ===
|
|
274
|
-
|| returnType ===
|
|
275
|
-
|| returnType ===
|
|
276
|
-
|| returnType ===
|
|
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 || !(
|
|
346
|
+
&& (!listener.tags || !tagsIntersect(tags, listener.tags))) {
|
|
293
347
|
continue;
|
|
294
348
|
}
|
|
295
349
|
if (currentTagsFilter !== null
|
|
296
350
|
&& currentTagsFilter.length > 0
|
|
297
|
-
&& !(
|
|
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
|
|
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 ===
|
|
381
|
+
if (returnType === TriggerReturnType.FIRST) {
|
|
330
382
|
return listenerResult;
|
|
331
383
|
}
|
|
332
384
|
if (isConsequent) {
|
|
333
385
|
switch (returnType) {
|
|
334
|
-
case
|
|
386
|
+
case TriggerReturnType.UNTIL_TRUE: {
|
|
335
387
|
if (listenerResult === true) {
|
|
336
388
|
return true;
|
|
337
389
|
}
|
|
338
390
|
break;
|
|
339
391
|
}
|
|
340
|
-
case
|
|
392
|
+
case TriggerReturnType.UNTIL_FALSE: {
|
|
341
393
|
if (listenerResult === false) {
|
|
342
394
|
return false;
|
|
343
395
|
}
|
|
344
396
|
break;
|
|
345
397
|
}
|
|
346
|
-
case
|
|
398
|
+
case TriggerReturnType.FIRST_NON_EMPTY: {
|
|
347
399
|
if (!hasPromises
|
|
348
|
-
&& !(listenerResult
|
|
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
|
|
409
|
+
if (!hasPromises && isPromiseLike(listenerResult)) {
|
|
358
410
|
hasPromises = true;
|
|
359
411
|
}
|
|
360
412
|
results.push(listenerResult);
|
|
361
413
|
}
|
|
362
414
|
switch (returnType) {
|
|
363
|
-
case
|
|
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
|
|
425
|
+
case TriggerReturnType.ALL: {
|
|
374
426
|
return hasPromises
|
|
375
427
|
? Promise.all(results)
|
|
376
428
|
: results;
|
|
377
429
|
}
|
|
378
|
-
case
|
|
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
|
|
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
|
|
440
|
+
case TriggerReturnType.LAST: {
|
|
389
441
|
return results.pop();
|
|
390
442
|
}
|
|
391
|
-
case
|
|
443
|
+
case TriggerReturnType.UNTIL_TRUE: {
|
|
392
444
|
return;
|
|
393
445
|
}
|
|
394
|
-
case
|
|
446
|
+
case TriggerReturnType.UNTIL_FALSE: {
|
|
395
447
|
return;
|
|
396
448
|
}
|
|
397
|
-
case
|
|
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
|
|
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 =
|
|
469
|
+
currentTagsFilter = prevTagsFilter;
|
|
417
470
|
}
|
|
418
471
|
};
|
|
419
|
-
let cachedPromise = null;
|
|
420
472
|
const promise = (options) => {
|
|
421
|
-
return
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
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,
|
|
482
|
+
return _trigger(args, TriggerReturnType.FIRST);
|
|
433
483
|
};
|
|
434
484
|
const resolveFirst = (...args) => {
|
|
435
|
-
const response = _trigger(args,
|
|
436
|
-
if (response
|
|
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,
|
|
492
|
+
return _trigger(args, TriggerReturnType.ALL);
|
|
443
493
|
};
|
|
444
494
|
const resolveAll = (...args) => {
|
|
445
|
-
const response = _trigger(args,
|
|
446
|
-
if (response
|
|
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,
|
|
502
|
+
return _trigger(args, TriggerReturnType.LAST);
|
|
453
503
|
};
|
|
454
504
|
const resolveLast = (...args) => {
|
|
455
|
-
const response = _trigger(args,
|
|
456
|
-
if (response
|
|
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,
|
|
512
|
+
return _trigger(args, TriggerReturnType.MERGE);
|
|
463
513
|
};
|
|
464
514
|
const resolveMerge = (...args) => {
|
|
465
|
-
const response = _trigger(args,
|
|
466
|
-
if (response
|
|
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,
|
|
522
|
+
return _trigger(args, TriggerReturnType.CONCAT);
|
|
473
523
|
};
|
|
474
524
|
const resolveConcat = (...args) => {
|
|
475
|
-
const response = _trigger(args,
|
|
476
|
-
if (response
|
|
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,
|
|
532
|
+
return _trigger(args, TriggerReturnType.FIRST_NON_EMPTY);
|
|
483
533
|
};
|
|
484
534
|
const resolveFirstNonEmpty = (...args) => {
|
|
485
|
-
const response = _trigger(args,
|
|
486
|
-
if (response
|
|
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,
|
|
542
|
+
_trigger(args, TriggerReturnType.UNTIL_TRUE);
|
|
493
543
|
};
|
|
494
544
|
const untilFalse = (...args) => {
|
|
495
|
-
_trigger(args,
|
|
545
|
+
_trigger(args, TriggerReturnType.UNTIL_FALSE);
|
|
496
546
|
};
|
|
497
547
|
const pipe = (...args) => {
|
|
498
|
-
return _trigger(args,
|
|
548
|
+
return _trigger(args, TriggerReturnType.PIPE);
|
|
499
549
|
};
|
|
500
550
|
const resolvePipe = (...args) => {
|
|
501
|
-
const response = _trigger(args,
|
|
502
|
-
if (response
|
|
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,
|
|
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 */
|
package/dist/eventBus.d.ts
CHANGED
|
@@ -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"]>;
|