@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.
- package/README.md +985 -0
- package/dist/action.d.ts +49 -0
- package/dist/action.js +77 -0
- package/dist/actionBus.d.ts +43 -0
- package/dist/actionBus.js +81 -0
- package/dist/actionMap.d.ts +23 -0
- package/dist/actionMap.js +26 -0
- package/dist/event.d.ts +143 -0
- package/dist/event.js +538 -0
- package/dist/eventBus.d.ts +115 -0
- package/dist/eventBus.js +508 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +21 -0
- package/dist/lib/asyncCall.d.ts +1 -0
- package/dist/lib/asyncCall.js +17 -0
- package/dist/lib/listenerSorter.d.ts +5 -0
- package/dist/lib/listenerSorter.js +13 -0
- package/dist/lib/tagsIntersect.d.ts +1 -0
- package/dist/lib/tagsIntersect.js +11 -0
- package/dist/lib/types.d.ts +49 -0
- package/dist/lib/types.js +37 -0
- package/dist/react/ErrorBoundary.d.ts +10 -0
- package/dist/react/ErrorBoundary.js +25 -0
- package/dist/react/useAction.d.ts +21 -0
- package/dist/react/useAction.js +66 -0
- package/dist/react/useActionBus.d.ts +38 -0
- package/dist/react/useActionBus.js +44 -0
- package/dist/react/useActionMap.d.ts +23 -0
- package/dist/react/useActionMap.js +25 -0
- package/dist/react/useEvent.d.ts +47 -0
- package/dist/react/useEvent.js +66 -0
- package/dist/react/useEventBus.d.ts +117 -0
- package/dist/react/useEventBus.js +66 -0
- package/dist/react/useListenToAction.d.ts +3 -0
- package/dist/react/useListenToAction.js +38 -0
- package/dist/react/useListenToEvent.d.ts +4 -0
- package/dist/react/useListenToEvent.js +34 -0
- package/dist/react/useListenToEventBus.d.ts +5 -0
- package/dist/react/useListenToEventBus.js +37 -0
- package/dist/react/useStore.d.ts +51 -0
- package/dist/react/useStore.js +30 -0
- package/dist/react/useStoreState.d.ts +3 -0
- package/dist/react/useStoreState.js +32 -0
- package/dist/react.d.ts +10 -0
- package/dist/react.js +26 -0
- package/dist/store.d.ts +54 -0
- package/dist/store.js +193 -0
- package/package.json +70 -0
- package/src/index.ts +5 -0
package/dist/eventBus.js
ADDED
|
@@ -0,0 +1,508 @@
|
|
|
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");
|
|
6
|
+
function proxyReturnTypeToTriggerReturnType(proxyType) {
|
|
7
|
+
switch (proxyType) {
|
|
8
|
+
case types_1.ProxyType.TRIGGER:
|
|
9
|
+
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:
|
|
27
|
+
return {
|
|
28
|
+
returnType: types_1.TriggerReturnType.UNTIL_FALSE,
|
|
29
|
+
resolve: false,
|
|
30
|
+
};
|
|
31
|
+
case types_1.ProxyType.FIRST_NON_EMPTY:
|
|
32
|
+
return {
|
|
33
|
+
returnType: types_1.TriggerReturnType.FIRST_NON_EMPTY,
|
|
34
|
+
resolve: false,
|
|
35
|
+
};
|
|
36
|
+
case types_1.ProxyType.RESOLVE_ALL:
|
|
37
|
+
return {
|
|
38
|
+
returnType: types_1.TriggerReturnType.ALL,
|
|
39
|
+
resolve: true,
|
|
40
|
+
};
|
|
41
|
+
case types_1.ProxyType.RESOLVE_MERGE:
|
|
42
|
+
return {
|
|
43
|
+
returnType: types_1.TriggerReturnType.MERGE,
|
|
44
|
+
resolve: true,
|
|
45
|
+
};
|
|
46
|
+
case types_1.ProxyType.RESOLVE_CONCAT:
|
|
47
|
+
return {
|
|
48
|
+
returnType: types_1.TriggerReturnType.CONCAT,
|
|
49
|
+
resolve: true,
|
|
50
|
+
};
|
|
51
|
+
case types_1.ProxyType.RESOLVE_FIRST:
|
|
52
|
+
return {
|
|
53
|
+
returnType: types_1.TriggerReturnType.FIRST,
|
|
54
|
+
resolve: true,
|
|
55
|
+
};
|
|
56
|
+
case types_1.ProxyType.RESOLVE_FIRST_NON_EMPTY:
|
|
57
|
+
return {
|
|
58
|
+
returnType: types_1.TriggerReturnType.FIRST_NON_EMPTY,
|
|
59
|
+
resolve: true,
|
|
60
|
+
};
|
|
61
|
+
case types_1.ProxyType.RESOLVE_LAST:
|
|
62
|
+
return {
|
|
63
|
+
returnType: types_1.TriggerReturnType.LAST,
|
|
64
|
+
resolve: true,
|
|
65
|
+
};
|
|
66
|
+
case types_1.ProxyType.RESOLVE_PIPE:
|
|
67
|
+
return {
|
|
68
|
+
returnType: types_1.TriggerReturnType.PIPE,
|
|
69
|
+
resolve: true,
|
|
70
|
+
};
|
|
71
|
+
default:
|
|
72
|
+
return { returnType: null, resolve: false };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function createEventBus(eventBusOptions) {
|
|
76
|
+
const events = new Map();
|
|
77
|
+
let currentTagsFilter = null;
|
|
78
|
+
let interceptor = null;
|
|
79
|
+
const proxyListeners = [];
|
|
80
|
+
const eventSources = [];
|
|
81
|
+
const asterisk = (0, event_1.createEvent)();
|
|
82
|
+
const errorEvent = (0, event_1.createEvent)();
|
|
83
|
+
const _getProxyListener = ({ remoteEventName, localEventName, returnType, resolve, localEventNamePrefix, }) => {
|
|
84
|
+
let listener = proxyListeners.find((listener) => listener.returnType === returnType
|
|
85
|
+
&& listener.resolve === resolve
|
|
86
|
+
&& listener.localEventName === localEventName
|
|
87
|
+
&& listener.remoteEventName === remoteEventName
|
|
88
|
+
&& listener.localEventNamePrefix === localEventNamePrefix);
|
|
89
|
+
if (!listener) {
|
|
90
|
+
listener = {
|
|
91
|
+
localEventName,
|
|
92
|
+
remoteEventName,
|
|
93
|
+
localEventNamePrefix,
|
|
94
|
+
returnType,
|
|
95
|
+
resolve,
|
|
96
|
+
listener: remoteEventName === "*"
|
|
97
|
+
? (eventName, args) => {
|
|
98
|
+
const name = localEventName
|
|
99
|
+
? localEventName
|
|
100
|
+
: localEventNamePrefix
|
|
101
|
+
? `${localEventNamePrefix}${eventName}`
|
|
102
|
+
: eventName;
|
|
103
|
+
return _trigger(name,
|
|
104
|
+
// @ts-expect-error
|
|
105
|
+
args, returnType, resolve);
|
|
106
|
+
}
|
|
107
|
+
: (...args) => {
|
|
108
|
+
const name = localEventName
|
|
109
|
+
? localEventName
|
|
110
|
+
: localEventNamePrefix
|
|
111
|
+
? `${localEventNamePrefix}${remoteEventName}`
|
|
112
|
+
: remoteEventName;
|
|
113
|
+
return _trigger(name,
|
|
114
|
+
// @ts-expect-error
|
|
115
|
+
args, returnType, resolve);
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
proxyListeners.push(listener);
|
|
119
|
+
}
|
|
120
|
+
return listener;
|
|
121
|
+
};
|
|
122
|
+
const add = (name, options) => {
|
|
123
|
+
if (!events.has(name)) {
|
|
124
|
+
events.set(name, (0, event_1.createEvent)(options));
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
const _getOrAddEvent = (name) => {
|
|
128
|
+
var _a;
|
|
129
|
+
if (!events.has(name)) {
|
|
130
|
+
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]));
|
|
131
|
+
}
|
|
132
|
+
return events.get(name);
|
|
133
|
+
};
|
|
134
|
+
const intercept = (fn) => {
|
|
135
|
+
interceptor = fn;
|
|
136
|
+
};
|
|
137
|
+
const stopIntercepting = () => {
|
|
138
|
+
interceptor = null;
|
|
139
|
+
};
|
|
140
|
+
const get = (name) => {
|
|
141
|
+
return _getOrAddEvent(name);
|
|
142
|
+
};
|
|
143
|
+
const on = (name, handler, options) => {
|
|
144
|
+
const e = _getOrAddEvent(name);
|
|
145
|
+
eventSources.forEach((evs) => {
|
|
146
|
+
name;
|
|
147
|
+
if (evs.eventSource.accepts === false
|
|
148
|
+
|| (typeof evs.eventSource.accepts === "function"
|
|
149
|
+
&& !evs.eventSource.accepts(name))) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (evs.subscribed.indexOf(name) === -1) {
|
|
153
|
+
const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(evs.eventSource.proxyType || types_1.ProxyType.TRIGGER);
|
|
154
|
+
const listener = _getProxyListener({
|
|
155
|
+
localEventName: null,
|
|
156
|
+
remoteEventName: name,
|
|
157
|
+
returnType,
|
|
158
|
+
resolve,
|
|
159
|
+
localEventNamePrefix: null,
|
|
160
|
+
});
|
|
161
|
+
evs.eventSource.on(name, listener.listener, evs.eventSource, options);
|
|
162
|
+
evs.subscribed.push(name);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
return e.addListener(handler, options);
|
|
166
|
+
};
|
|
167
|
+
const once = (name, handler, options) => {
|
|
168
|
+
options = options || {};
|
|
169
|
+
options.limit = 1;
|
|
170
|
+
return on(name, handler, options);
|
|
171
|
+
};
|
|
172
|
+
const promise = (name, options) => {
|
|
173
|
+
const e = _getOrAddEvent(name);
|
|
174
|
+
return e.promise(options);
|
|
175
|
+
};
|
|
176
|
+
const un = (name, handler, context, tag) => {
|
|
177
|
+
const e = events.get(name);
|
|
178
|
+
if (e) {
|
|
179
|
+
e.removeListener(handler, context, tag);
|
|
180
|
+
}
|
|
181
|
+
if (eventSources.length > 0) {
|
|
182
|
+
const isEmpty = !e.hasListener();
|
|
183
|
+
eventSources.forEach((evs) => {
|
|
184
|
+
const inx = evs.subscribed.indexOf(name);
|
|
185
|
+
if (inx !== -1) {
|
|
186
|
+
evs.subscribed.splice(inx, 1);
|
|
187
|
+
if (isEmpty) {
|
|
188
|
+
const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(evs.eventSource.proxyType || types_1.ProxyType.TRIGGER);
|
|
189
|
+
const listener = _getProxyListener({
|
|
190
|
+
localEventName: null,
|
|
191
|
+
remoteEventName: name,
|
|
192
|
+
returnType,
|
|
193
|
+
resolve,
|
|
194
|
+
localEventNamePrefix: null,
|
|
195
|
+
});
|
|
196
|
+
evs.eventSource.un(name, listener.listener, evs.eventSource, tag);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
const _trigger = (name, args, returnType, resolve) => {
|
|
203
|
+
if (name === "*") {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (interceptor) {
|
|
207
|
+
const result = interceptor(name, args, currentTagsFilter, returnType || null);
|
|
208
|
+
if (result === false) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const e = _getOrAddEvent(name);
|
|
213
|
+
const runner = () => {
|
|
214
|
+
let result;
|
|
215
|
+
switch (returnType) {
|
|
216
|
+
case types_1.TriggerReturnType.RAW:
|
|
217
|
+
result = e.raw(...args);
|
|
218
|
+
break;
|
|
219
|
+
case types_1.TriggerReturnType.ALL:
|
|
220
|
+
result = resolve ? e.resolveAll(...args) : e.all(...args);
|
|
221
|
+
break;
|
|
222
|
+
case types_1.TriggerReturnType.CONCAT:
|
|
223
|
+
result = resolve
|
|
224
|
+
? e.resolveConcat(...args)
|
|
225
|
+
: e.concat(...args);
|
|
226
|
+
break;
|
|
227
|
+
case types_1.TriggerReturnType.MERGE:
|
|
228
|
+
result = resolve
|
|
229
|
+
? e.resolveMerge(...args)
|
|
230
|
+
: e.merge(...args);
|
|
231
|
+
break;
|
|
232
|
+
case types_1.TriggerReturnType.LAST:
|
|
233
|
+
result = resolve ? e.resolveLast(...args) : e.last(...args);
|
|
234
|
+
break;
|
|
235
|
+
case types_1.TriggerReturnType.PIPE:
|
|
236
|
+
result = resolve ? e.resolvePipe(...args) : e.pipe(...args);
|
|
237
|
+
break;
|
|
238
|
+
case types_1.TriggerReturnType.FIRST:
|
|
239
|
+
result = resolve
|
|
240
|
+
? e.resolveFirst(...args)
|
|
241
|
+
: e.first(...args);
|
|
242
|
+
break;
|
|
243
|
+
case types_1.TriggerReturnType.UNTIL_TRUE:
|
|
244
|
+
result = e.untilTrue(...args);
|
|
245
|
+
break;
|
|
246
|
+
case types_1.TriggerReturnType.UNTIL_FALSE:
|
|
247
|
+
result = e.untilFalse(...args);
|
|
248
|
+
break;
|
|
249
|
+
case types_1.TriggerReturnType.FIRST_NON_EMPTY:
|
|
250
|
+
result = resolve
|
|
251
|
+
? e.resolveFirstNonEmpty(...args)
|
|
252
|
+
: e.firstNonEmpty(...args);
|
|
253
|
+
break;
|
|
254
|
+
default:
|
|
255
|
+
e.trigger(...args);
|
|
256
|
+
}
|
|
257
|
+
return result;
|
|
258
|
+
};
|
|
259
|
+
try {
|
|
260
|
+
let result;
|
|
261
|
+
if (currentTagsFilter) {
|
|
262
|
+
result = e.withTags(currentTagsFilter, runner);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
result = runner();
|
|
266
|
+
}
|
|
267
|
+
asterisk.trigger(name, args, currentTagsFilter);
|
|
268
|
+
return result;
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
errorEvent.trigger({
|
|
272
|
+
name,
|
|
273
|
+
error: error instanceof Error
|
|
274
|
+
? error
|
|
275
|
+
: new Error(String(error)),
|
|
276
|
+
args,
|
|
277
|
+
type: "event",
|
|
278
|
+
});
|
|
279
|
+
if (errorEvent.hasListener()) {
|
|
280
|
+
return undefined;
|
|
281
|
+
}
|
|
282
|
+
throw error;
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
const trigger = (name, ...args) => {
|
|
286
|
+
return _trigger(name, args, null, false);
|
|
287
|
+
};
|
|
288
|
+
const first = (name, ...args) => {
|
|
289
|
+
const e = _getOrAddEvent(name);
|
|
290
|
+
return _trigger(name, args, types_1.TriggerReturnType.FIRST, false);
|
|
291
|
+
};
|
|
292
|
+
const resolveFirst = (name, ...args) => {
|
|
293
|
+
const e = _getOrAddEvent(name);
|
|
294
|
+
return _trigger(name, args, types_1.TriggerReturnType.FIRST, true);
|
|
295
|
+
};
|
|
296
|
+
const all = (name, ...args) => {
|
|
297
|
+
const e = _getOrAddEvent(name);
|
|
298
|
+
return _trigger(name, args, types_1.TriggerReturnType.ALL, false);
|
|
299
|
+
};
|
|
300
|
+
const resolveAll = (name, ...args) => {
|
|
301
|
+
const e = _getOrAddEvent(name);
|
|
302
|
+
return _trigger(name, args, types_1.TriggerReturnType.ALL, true);
|
|
303
|
+
};
|
|
304
|
+
const last = (name, ...args) => {
|
|
305
|
+
const e = _getOrAddEvent(name);
|
|
306
|
+
return _trigger(name, args, types_1.TriggerReturnType.LAST, false);
|
|
307
|
+
};
|
|
308
|
+
const resolveLast = (name, ...args) => {
|
|
309
|
+
const e = _getOrAddEvent(name);
|
|
310
|
+
return _trigger(name, args, types_1.TriggerReturnType.LAST, true);
|
|
311
|
+
};
|
|
312
|
+
const merge = (name, ...args) => {
|
|
313
|
+
const e = _getOrAddEvent(name);
|
|
314
|
+
return _trigger(name, args, types_1.TriggerReturnType.MERGE, false);
|
|
315
|
+
};
|
|
316
|
+
const resolveMerge = (name, ...args) => {
|
|
317
|
+
const e = _getOrAddEvent(name);
|
|
318
|
+
return _trigger(name, args, types_1.TriggerReturnType.MERGE, true);
|
|
319
|
+
};
|
|
320
|
+
const concat = (name, ...args) => {
|
|
321
|
+
const e = _getOrAddEvent(name);
|
|
322
|
+
return _trigger(name, args, types_1.TriggerReturnType.CONCAT, false);
|
|
323
|
+
};
|
|
324
|
+
const resolveConcat = (name, ...args) => {
|
|
325
|
+
const e = _getOrAddEvent(name);
|
|
326
|
+
return _trigger(name, args, types_1.TriggerReturnType.CONCAT, true);
|
|
327
|
+
};
|
|
328
|
+
const firstNonEmpty = (name, ...args) => {
|
|
329
|
+
const e = _getOrAddEvent(name);
|
|
330
|
+
return _trigger(name, args, types_1.TriggerReturnType.FIRST_NON_EMPTY, false);
|
|
331
|
+
};
|
|
332
|
+
const resolveFirstNonEmpty = (name, ...args) => {
|
|
333
|
+
const e = _getOrAddEvent(name);
|
|
334
|
+
return _trigger(name, args, types_1.TriggerReturnType.FIRST_NON_EMPTY, true);
|
|
335
|
+
};
|
|
336
|
+
const untilTrue = (name, ...args) => {
|
|
337
|
+
const e = _getOrAddEvent(name);
|
|
338
|
+
return _trigger(name, args, types_1.TriggerReturnType.UNTIL_TRUE, false);
|
|
339
|
+
};
|
|
340
|
+
const untilFalse = (name, ...args) => {
|
|
341
|
+
const e = _getOrAddEvent(name);
|
|
342
|
+
return _trigger(name, args, types_1.TriggerReturnType.UNTIL_FALSE, false);
|
|
343
|
+
};
|
|
344
|
+
const pipe = (name, ...args) => {
|
|
345
|
+
const e = _getOrAddEvent(name);
|
|
346
|
+
return _trigger(name, args, types_1.TriggerReturnType.PIPE, false);
|
|
347
|
+
};
|
|
348
|
+
const resolvePipe = (name, ...args) => {
|
|
349
|
+
const e = _getOrAddEvent(name);
|
|
350
|
+
return _trigger(name, args, types_1.TriggerReturnType.PIPE, true);
|
|
351
|
+
};
|
|
352
|
+
const raw = (name, ...args) => {
|
|
353
|
+
const e = _getOrAddEvent(name);
|
|
354
|
+
return _trigger(name, args, types_1.TriggerReturnType.RAW, false);
|
|
355
|
+
};
|
|
356
|
+
const withTags = (tags, callback) => {
|
|
357
|
+
currentTagsFilter = tags;
|
|
358
|
+
const result = callback();
|
|
359
|
+
currentTagsFilter = null;
|
|
360
|
+
return result;
|
|
361
|
+
};
|
|
362
|
+
const reset = () => {
|
|
363
|
+
if (eventSources.length > 0) {
|
|
364
|
+
eventSources.forEach((evs) => {
|
|
365
|
+
removeEventSource(evs.eventSource);
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
events.clear();
|
|
369
|
+
interceptor = null;
|
|
370
|
+
currentTagsFilter = null;
|
|
371
|
+
asterisk.reset();
|
|
372
|
+
proxyListeners.length = 0;
|
|
373
|
+
eventSources.length = 0;
|
|
374
|
+
};
|
|
375
|
+
const suspendAll = (withQueue = false) => {
|
|
376
|
+
for (const name in events) {
|
|
377
|
+
events.get(name).suspend(withQueue);
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
const resumeAll = () => {
|
|
381
|
+
for (const name in events) {
|
|
382
|
+
events.get(name).resume();
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
const relay = ({ eventSource, remoteEventName, localEventName, proxyType, localEventNamePrefix, }) => {
|
|
386
|
+
const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(proxyType || types_1.ProxyType.TRIGGER);
|
|
387
|
+
const listener = _getProxyListener({
|
|
388
|
+
localEventName: localEventName || null,
|
|
389
|
+
remoteEventName,
|
|
390
|
+
returnType,
|
|
391
|
+
resolve,
|
|
392
|
+
localEventNamePrefix: localEventNamePrefix || null,
|
|
393
|
+
});
|
|
394
|
+
if (remoteEventName === "*") {
|
|
395
|
+
eventSource.addAllEventsListener(listener.listener);
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
eventSource.on(remoteEventName, listener.listener);
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
const unrelay = ({ eventSource, remoteEventName, localEventName, proxyType, localEventNamePrefix, }) => {
|
|
402
|
+
const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(proxyType || types_1.ProxyType.TRIGGER);
|
|
403
|
+
const listener = _getProxyListener({
|
|
404
|
+
localEventName: localEventName || null,
|
|
405
|
+
remoteEventName,
|
|
406
|
+
returnType,
|
|
407
|
+
resolve,
|
|
408
|
+
localEventNamePrefix: localEventNamePrefix || null,
|
|
409
|
+
});
|
|
410
|
+
if (listener) {
|
|
411
|
+
if (remoteEventName === "*") {
|
|
412
|
+
eventSource.removeAllEventsListener(listener.listener);
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
eventSource.un(remoteEventName, listener.listener);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
const addEventSource = (eventSource) => {
|
|
420
|
+
if (eventSources.find((evs) => evs.eventSource.name === eventSource.name)) {
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
eventSources.push({
|
|
424
|
+
eventSource,
|
|
425
|
+
subscribed: [],
|
|
426
|
+
});
|
|
427
|
+
};
|
|
428
|
+
const removeEventSource = (eventSource) => {
|
|
429
|
+
const inx = eventSources.findIndex((evs) => typeof eventSource === "string"
|
|
430
|
+
|| typeof eventSource === "symbol"
|
|
431
|
+
? evs.eventSource.name === eventSource
|
|
432
|
+
: evs.eventSource.name === eventSource.name);
|
|
433
|
+
if (inx !== -1) {
|
|
434
|
+
const evs = eventSources[inx];
|
|
435
|
+
evs.subscribed.forEach((name) => {
|
|
436
|
+
const { returnType, resolve } = proxyReturnTypeToTriggerReturnType(evs.eventSource.proxyType || types_1.ProxyType.TRIGGER);
|
|
437
|
+
const listener = _getProxyListener({
|
|
438
|
+
localEventName: null,
|
|
439
|
+
remoteEventName: name,
|
|
440
|
+
returnType,
|
|
441
|
+
resolve,
|
|
442
|
+
localEventNamePrefix: null,
|
|
443
|
+
});
|
|
444
|
+
evs.eventSource.un(name, listener.listener, evs.eventSource);
|
|
445
|
+
});
|
|
446
|
+
eventSources.splice(inx, 1);
|
|
447
|
+
}
|
|
448
|
+
};
|
|
449
|
+
const api = {
|
|
450
|
+
addListener: on,
|
|
451
|
+
/** @alias addListener */
|
|
452
|
+
on,
|
|
453
|
+
/** @alias addListener */
|
|
454
|
+
listen: on,
|
|
455
|
+
/** @alias addListener */
|
|
456
|
+
subscribe: on,
|
|
457
|
+
once,
|
|
458
|
+
promise,
|
|
459
|
+
removeListener: un,
|
|
460
|
+
/** @alias removeListener */
|
|
461
|
+
un,
|
|
462
|
+
/** @alias removeListener */
|
|
463
|
+
off: un,
|
|
464
|
+
/** @alias removeListener */
|
|
465
|
+
remove: un,
|
|
466
|
+
/** @alias removeListener */
|
|
467
|
+
unsubscribe: un,
|
|
468
|
+
trigger,
|
|
469
|
+
/** @alias trigger */
|
|
470
|
+
emit: trigger,
|
|
471
|
+
/** @alias trigger */
|
|
472
|
+
dispatch: trigger,
|
|
473
|
+
get,
|
|
474
|
+
add,
|
|
475
|
+
first,
|
|
476
|
+
resolveFirst,
|
|
477
|
+
all,
|
|
478
|
+
resolveAll,
|
|
479
|
+
last,
|
|
480
|
+
resolveLast,
|
|
481
|
+
merge,
|
|
482
|
+
resolveMerge,
|
|
483
|
+
concat,
|
|
484
|
+
resolveConcat,
|
|
485
|
+
firstNonEmpty,
|
|
486
|
+
resolveFirstNonEmpty,
|
|
487
|
+
untilTrue,
|
|
488
|
+
untilFalse,
|
|
489
|
+
pipe,
|
|
490
|
+
resolvePipe,
|
|
491
|
+
raw,
|
|
492
|
+
withTags,
|
|
493
|
+
intercept,
|
|
494
|
+
stopIntercepting,
|
|
495
|
+
reset,
|
|
496
|
+
suspendAll,
|
|
497
|
+
resumeAll,
|
|
498
|
+
relay,
|
|
499
|
+
unrelay,
|
|
500
|
+
addEventSource,
|
|
501
|
+
removeEventSource,
|
|
502
|
+
addAllEventsListener: asterisk.addListener,
|
|
503
|
+
removeAllEventsListener: asterisk.removeListener,
|
|
504
|
+
addErrorListener: errorEvent.addListener,
|
|
505
|
+
removeErrorListener: errorEvent.removeListener,
|
|
506
|
+
};
|
|
507
|
+
return api;
|
|
508
|
+
}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
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("./event"), exports);
|
|
19
|
+
__exportStar(require("./eventBus"), exports);
|
|
20
|
+
__exportStar(require("./lib/types"), exports);
|
|
21
|
+
__exportStar(require("./store"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function asyncCall<P extends readonly any[] = readonly any[], R = any>(fn: (...args: P) => R, context?: object | null, args?: P, timeout?: number): Promise<R>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = asyncCall;
|
|
4
|
+
function asyncCall(fn, context, args, timeout) {
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
const newArgs = [...(args || [])];
|
|
7
|
+
// const newArgs = [ ...(args || []) ];
|
|
8
|
+
setTimeout(() => {
|
|
9
|
+
try {
|
|
10
|
+
resolve(fn.apply(context, newArgs));
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
reject(err);
|
|
14
|
+
}
|
|
15
|
+
}, timeout || 0);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = listenerSorter;
|
|
4
|
+
function listenerSorter(l1, l2) {
|
|
5
|
+
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
|
+
if (f1 === 1 || f2 === 1) {
|
|
7
|
+
return f1 === f2 ? 0 : f1 > f2 ? -1 : 1;
|
|
8
|
+
}
|
|
9
|
+
if (ls1 === 1 || ls2 === 1) {
|
|
10
|
+
return ls1 === ls2 ? 0 : ls1 < ls2 ? -1 : 1;
|
|
11
|
+
}
|
|
12
|
+
return l1.index === l2.index ? 0 : l1.index < l2.index ? -1 : 1;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function tagsIntersect(t1: string[], t2: string[]): boolean;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type MapKey = string;
|
|
2
|
+
export type BaseHandler = (...args: any[]) => any;
|
|
3
|
+
export type Simplify<T> = {
|
|
4
|
+
[KeyType in keyof T]: T[KeyType];
|
|
5
|
+
} & {};
|
|
6
|
+
export type ApiType<TypeDefinition, Api extends object> = Simplify<Api> & {
|
|
7
|
+
__type: TypeDefinition;
|
|
8
|
+
};
|
|
9
|
+
export type KeyOf<T> = MapKey & keyof T;
|
|
10
|
+
export declare enum TriggerReturnType {
|
|
11
|
+
RAW = "raw",
|
|
12
|
+
ALL = "all",
|
|
13
|
+
CONCAT = "concat",
|
|
14
|
+
MERGE = "merge",
|
|
15
|
+
LAST = "last",
|
|
16
|
+
PIPE = "pipe",
|
|
17
|
+
FIRST = "first",
|
|
18
|
+
UNTIL_TRUE = "true",
|
|
19
|
+
UNTIL_FALSE = "false",
|
|
20
|
+
FIRST_NON_EMPTY = "nonempty"
|
|
21
|
+
}
|
|
22
|
+
export declare enum ProxyType {
|
|
23
|
+
TRIGGER = "trigger",
|
|
24
|
+
RAW = "raw",
|
|
25
|
+
ALL = "all",
|
|
26
|
+
CONCAT = "concat",
|
|
27
|
+
MERGE = "merge",
|
|
28
|
+
LAST = "last",
|
|
29
|
+
PIPE = "pipe",
|
|
30
|
+
FIRST = "first",
|
|
31
|
+
UNTIL_TRUE = "untilTrue",
|
|
32
|
+
UNTIL_FALSE = "untilFalse",
|
|
33
|
+
FIRST_NON_EMPTY = "firstNonEmpty",
|
|
34
|
+
RESOLVE_ALL = "resolveAll",
|
|
35
|
+
RESOLVE_MERGE = "resolveMerge",
|
|
36
|
+
RESOLVE_CONCAT = "resolveConcat",
|
|
37
|
+
RESOLVE_FIRST = "resolveFirst",
|
|
38
|
+
RESOLVE_FIRST_NON_EMPTY = "resolveFirstNonEmpty",
|
|
39
|
+
RESOLVE_LAST = "resolveLast",
|
|
40
|
+
RESOLVE_PIPE = "resolvePipe"
|
|
41
|
+
}
|
|
42
|
+
export type ReturnableProxyType = ProxyType.RESOLVE_ALL | ProxyType.RESOLVE_MERGE | ProxyType.RESOLVE_CONCAT | ProxyType.RESOLVE_FIRST | ProxyType.RESOLVE_LAST | ProxyType.RESOLVE_FIRST_NON_EMPTY | ProxyType.RESOLVE_PIPE | ProxyType.ALL | ProxyType.MERGE | ProxyType.FIRST | ProxyType.LAST | ProxyType.CONCAT | ProxyType.PIPE | ProxyType.RAW;
|
|
43
|
+
export type ErrorResponse<Arguments extends any[] = any[]> = {
|
|
44
|
+
error: Error;
|
|
45
|
+
args: Arguments;
|
|
46
|
+
name?: MapKey;
|
|
47
|
+
type: "action" | "event" | "store-change" | "store-pipe" | "store-control";
|
|
48
|
+
};
|
|
49
|
+
export type ErrorListenerSignature<Arguments extends any[] = any[]> = (errorResponse: ErrorResponse<Arguments>) => void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProxyType = exports.TriggerReturnType = void 0;
|
|
4
|
+
var TriggerReturnType;
|
|
5
|
+
(function (TriggerReturnType) {
|
|
6
|
+
TriggerReturnType["RAW"] = "raw";
|
|
7
|
+
TriggerReturnType["ALL"] = "all";
|
|
8
|
+
TriggerReturnType["CONCAT"] = "concat";
|
|
9
|
+
TriggerReturnType["MERGE"] = "merge";
|
|
10
|
+
TriggerReturnType["LAST"] = "last";
|
|
11
|
+
TriggerReturnType["PIPE"] = "pipe";
|
|
12
|
+
TriggerReturnType["FIRST"] = "first";
|
|
13
|
+
TriggerReturnType["UNTIL_TRUE"] = "true";
|
|
14
|
+
TriggerReturnType["UNTIL_FALSE"] = "false";
|
|
15
|
+
TriggerReturnType["FIRST_NON_EMPTY"] = "nonempty";
|
|
16
|
+
})(TriggerReturnType || (exports.TriggerReturnType = TriggerReturnType = {}));
|
|
17
|
+
var ProxyType;
|
|
18
|
+
(function (ProxyType) {
|
|
19
|
+
ProxyType["TRIGGER"] = "trigger";
|
|
20
|
+
ProxyType["RAW"] = "raw";
|
|
21
|
+
ProxyType["ALL"] = "all";
|
|
22
|
+
ProxyType["CONCAT"] = "concat";
|
|
23
|
+
ProxyType["MERGE"] = "merge";
|
|
24
|
+
ProxyType["LAST"] = "last";
|
|
25
|
+
ProxyType["PIPE"] = "pipe";
|
|
26
|
+
ProxyType["FIRST"] = "first";
|
|
27
|
+
ProxyType["UNTIL_TRUE"] = "untilTrue";
|
|
28
|
+
ProxyType["UNTIL_FALSE"] = "untilFalse";
|
|
29
|
+
ProxyType["FIRST_NON_EMPTY"] = "firstNonEmpty";
|
|
30
|
+
ProxyType["RESOLVE_ALL"] = "resolveAll";
|
|
31
|
+
ProxyType["RESOLVE_MERGE"] = "resolveMerge";
|
|
32
|
+
ProxyType["RESOLVE_CONCAT"] = "resolveConcat";
|
|
33
|
+
ProxyType["RESOLVE_FIRST"] = "resolveFirst";
|
|
34
|
+
ProxyType["RESOLVE_FIRST_NON_EMPTY"] = "resolveFirstNonEmpty";
|
|
35
|
+
ProxyType["RESOLVE_LAST"] = "resolveLast";
|
|
36
|
+
ProxyType["RESOLVE_PIPE"] = "resolvePipe";
|
|
37
|
+
})(ProxyType || (exports.ProxyType = ProxyType = {}));
|