@alwatr/signal 1.0.1 → 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/CHANGELOG.md +86 -2
- package/core.d.ts.map +1 -1
- package/core.js +25 -37
- package/core.js.map +1 -1
- package/package.json +6 -6
- package/requestable-context-consumer.js +1 -1
- package/requestable-context-consumer.js.map +1 -1
- package/requestable-context-provider.js +1 -1
- package/requestable-context-provider.js.map +1 -1
- package/type.d.ts +5 -5
- package/type.d.ts.map +1 -1
- package/type.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,9 +3,93 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
# 1.1.0 (2023-09-12)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
# 1.0.0 (2023-06-14)
|
|
9
|
+
|
|
10
|
+
# 0.32.0 (2023-05-27)
|
|
11
|
+
|
|
12
|
+
# 0.31.0 (2023-05-08)
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* new logger api ([9d83a7d](https://github.com/AliMD/alwatr/commit/9d83a7dc5c103bc3bb4282dacfd85fa998915300))
|
|
17
|
+
* **signal:** dont receivePrevious when listener is disabled ([68ae207](https://github.com/AliMD/alwatr/commit/68ae207ce9ecf104922b24910d8dfcedb13acde7))
|
|
18
|
+
* **signal:** requestableContextProvider.getValue ([0a7111d](https://github.com/AliMD/alwatr/commit/0a7111da7b8eb004566922dc9b35edfc02a55147))
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* **signal:** new RequestableContext with state ([b8a8e55](https://github.com/AliMD/alwatr/commit/b8a8e550d3952863d85ba9d9d87513a668a9430d))
|
|
23
|
+
|
|
24
|
+
# 0.30.0 (2023-03-06)
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
* **signal:** NextCycle with own detail ([01f3c79](https://github.com/AliMD/alwatr/commit/01f3c79500927f6384a33abcc9b0cb2355794b3e))
|
|
29
|
+
* **signal:** nodejs compatibility ([69d8a60](https://github.com/AliMD/alwatr/commit/69d8a60ad64d44ee7c3ced002e702f13408a5a50))
|
|
30
|
+
* **signal:** requestableContextConsumer bind issue ([66467f6](https://github.com/AliMD/alwatr/commit/66467f6e5681d84d7f2e0b353206d4bb579b26f2))
|
|
31
|
+
* **signal:** requestContext dispatch issue ([e937ebd](https://github.com/AliMD/alwatr/commit/e937ebd3a90fc6a9946f5c35ef4f6f40b6ab4b00))
|
|
32
|
+
|
|
33
|
+
### Features
|
|
34
|
+
|
|
35
|
+
* **signal:** add untilChange for contextProvider ([cb44916](https://github.com/AliMD/alwatr/commit/cb4491698fd5ddfbe055032fc2cb50691de31194))
|
|
36
|
+
* **signal:** defineCommand return ListenerSpec ([21fecac](https://github.com/AliMD/alwatr/commit/21fecacb6aa9423da9e3c177a4bbc59952d94e35))
|
|
37
|
+
* **signal:** dispatch NextCycle option ([b30eb31](https://github.com/AliMD/alwatr/commit/b30eb316d92f594034fc40d195c4033e38e4d2e2))
|
|
38
|
+
|
|
39
|
+
# 0.29.0 (2023-02-10)
|
|
40
|
+
|
|
41
|
+
### Bug Fixes
|
|
42
|
+
|
|
43
|
+
* **signal/core:** _getSignalObject ([1374188](https://github.com/AliMD/alwatr/commit/1374188bdc7e689ded11d04bf4588a1162cc6d86))
|
|
44
|
+
* **signal:** alert [#1455](https://github.com/AliMD/alwatr/issues/1455) ([203307d](https://github.com/AliMD/alwatr/commit/203307df308a12e6c38cb9e0e2301b2015b6ff45))
|
|
45
|
+
* **signal:** clean old interfaces ([b2987ad](https://github.com/AliMD/alwatr/commit/b2987add7bfe0cf609fa355403fb9fb5de3f6b8a))
|
|
46
|
+
* **signal:** export all interfaces ([8704eac](https://github.com/AliMD/alwatr/commit/8704eac6ae7a8a45e77c24ef5e602e36af3fd21e))
|
|
47
|
+
* **signal:** export listeners ([fb05bfb](https://github.com/AliMD/alwatr/commit/fb05bfb9b7eb30427442783677ce1d4da5401160))
|
|
48
|
+
* **signal:** import types ([cc0b88b](https://github.com/AliMD/alwatr/commit/cc0b88be420b1fe057a8640bbffb1af3bf327cef))
|
|
49
|
+
* **signal:** interface bind type ([7b6c820](https://github.com/AliMD/alwatr/commit/7b6c820da2ba216f36e089bf79bdeccf208df3b1))
|
|
50
|
+
* **signal:** reported issues ([75f688f](https://github.com/AliMD/alwatr/commit/75f688faf96a056a256603d05276f5731db86aee))
|
|
51
|
+
* **signal:** TSignal on SignalControllerInterface ([ac42b7c](https://github.com/AliMD/alwatr/commit/ac42b7c7023549e8dd07cd3d9e189f356ffa06ee))
|
|
52
|
+
|
|
53
|
+
### Features
|
|
54
|
+
|
|
55
|
+
* **signal-manager:** enhance provider, docs ([c4583a3](https://github.com/AliMD/alwatr/commit/c4583a3b0fcbf38b5e426aaa2bc6e0f52ccac5fd))
|
|
56
|
+
* **signal:** alias in SignalInterface & BoundSignalInterface ([053030b](https://github.com/AliMD/alwatr/commit/053030b96c09d474794f32327d892f1d3690656c))
|
|
57
|
+
* **signal:** bind signal ([de49a13](https://github.com/AliMD/alwatr/commit/de49a13eaffce31660849dfc63285d97e9098c0c))
|
|
58
|
+
* **signal:** command handler/provider interface ([3d23683](https://github.com/AliMD/alwatr/commit/3d236837e13d8cfdcd44a1570bdc9659f48e7f47))
|
|
59
|
+
* **signal:** command signals ([98c1d90](https://github.com/AliMD/alwatr/commit/98c1d90978329e4c5c584e19edb1aaa365632162))
|
|
60
|
+
* **signal:** command trigger interface ([dda9466](https://github.com/AliMD/alwatr/commit/dda94666d9e8e490fea26038044df0e67c203583))
|
|
61
|
+
* **signal:** commandSignal ([5a0d7e5](https://github.com/AliMD/alwatr/commit/5a0d7e5498087620d28548ea5d90036a7b17483a))
|
|
62
|
+
* **signal:** context prover and consumer ([081a51a](https://github.com/AliMD/alwatr/commit/081a51a1ee88e66ebbcd0c58186c00a6aa9e1032))
|
|
63
|
+
* **signal:** contextProvider.expire ([7d0ce93](https://github.com/AliMD/alwatr/commit/7d0ce937f0eadcd9019e6047fbe07aa1a3b579a7))
|
|
64
|
+
* **signal:** event listener interface ([4ca4079](https://github.com/AliMD/alwatr/commit/4ca407938d444027cdbd435173c875fdd9ce8e28))
|
|
65
|
+
* **signal:** event trigger interface ([9b90597](https://github.com/AliMD/alwatr/commit/9b905979a5065640981433ec7d120ba2494966bb))
|
|
66
|
+
* **signal:** new contextConsumer interface ([9ee4a62](https://github.com/AliMD/alwatr/commit/9ee4a624211adb66d9c3d180470cca44ed7df382))
|
|
67
|
+
* **signal:** new contextProvider interface ([e5d29eb](https://github.com/AliMD/alwatr/commit/e5d29ebaa75d71bb5a87bedddb2be7600e68b210))
|
|
68
|
+
* **signal:** new manager interface ([f028306](https://github.com/AliMD/alwatr/commit/f028306f4d7932df65a1bbeade0d29377a370e2e))
|
|
69
|
+
* **signal:** new requestable context consumer interface ([bf6845f](https://github.com/AliMD/alwatr/commit/bf6845f35a98bb63bcfa42196c2f977d64aea59e))
|
|
70
|
+
* **signal:** new requestable context provider interface ([2c8d576](https://github.com/AliMD/alwatr/commit/2c8d57604dcb07a2831d85d4ef1e262863a5fae8))
|
|
71
|
+
* **signal:** new signal dynamic types ([0f1a38e](https://github.com/AliMD/alwatr/commit/0f1a38e356ab73e4e2e1a8f852585e50e86cff0e))
|
|
72
|
+
* **signal:** new simple api ([eb1e478](https://github.com/AliMD/alwatr/commit/eb1e47892d4478fb6c687f6d15e1a5c204b5666c))
|
|
73
|
+
* **signal:** refactor all generic types with Stringifyable ([bdcef63](https://github.com/AliMD/alwatr/commit/bdcef632c81fa5e7c7ae595a7a77092c53821850))
|
|
74
|
+
* **signal:** separate request command with response ([47a779e](https://github.com/AliMD/alwatr/commit/47a779e9a814d5d6a388f1a3e94c23e7fb977dce))
|
|
75
|
+
* **signal:** signal.request ([d791b3e](https://github.com/AliMD/alwatr/commit/d791b3eef846697020b76bfecfbf25a3e31eb3a5))
|
|
76
|
+
* **signal:** signal.untilNext ([9df78c0](https://github.com/AliMD/alwatr/commit/9df78c03dea243b467504fdf422388ab9d2b5660))
|
|
77
|
+
* **signal:** signals.expire ([3591efd](https://github.com/AliMD/alwatr/commit/3591efd5e42f7a981814fd59d7189b5066735302))
|
|
78
|
+
|
|
79
|
+
# 0.28.0 (2023-01-20)
|
|
80
|
+
|
|
81
|
+
# 0.27.0 (2022-12-29)
|
|
82
|
+
|
|
83
|
+
# 0.26.0 (2022-12-22)
|
|
84
|
+
|
|
85
|
+
### Bug Fixes
|
|
86
|
+
|
|
87
|
+
* set correct path ([d01ce6f](https://github.com/AliMD/alwatr/commit/d01ce6ffa749a5e3e0e11e35b4ed61d75d61fec9))
|
|
88
|
+
* tsconfig ([e96dcd3](https://github.com/AliMD/alwatr/commit/e96dcd30774a9f06f7d051e0504192cbbe019e35))
|
|
89
|
+
|
|
90
|
+
### Features
|
|
91
|
+
|
|
92
|
+
* improve error debugging ([1fba504](https://github.com/AliMD/alwatr/commit/1fba50400a1e8ececc10bbe8ea11cc8dcea2289c))
|
|
9
93
|
|
|
10
94
|
# [1.0.0](https://github.com/AliMD/alwatr/compare/v0.32.0...v1.0.0) (2023-06-14)
|
|
11
95
|
|
package/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAEhB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAEf,YAAY,EACb,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAC,aAAa,EAAE,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAmBrE,eAAO,MAAM,MAAM,uCAAgC,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,gCAAiC,MAAM,oBAWlE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,mEAAkE,IA0B5F,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,sCACV,MAAM,mDAEP,QAAQ,gBAAgB,CAAC,KACjC,YAuDF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,aAAc,YAAY,KAAG,IAOpD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,aAAc,MAAM,KAAG,IAMrD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,sCACT,MAAM,uBAEP,QAAQ,eAAe,CAAC,KAChC,IAoCF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS,sCAAuC,MAAM,kBAElE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,sCAAuC,MAAM,eASlE,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,mFACnB,MAAM,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAEhB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAEf,YAAY,EACb,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAC,aAAa,EAAE,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAmBrE,eAAO,MAAM,MAAM,uCAAgC,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,gCAAiC,MAAM,oBAWlE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,mEAAkE,IA0B5F,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,sCACV,MAAM,mDAEP,QAAQ,gBAAgB,CAAC,KACjC,YAuDF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,aAAc,YAAY,KAAG,IAOpD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,aAAc,MAAM,KAAG,IAMrD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,sCACT,MAAM,uBAEP,QAAQ,eAAe,CAAC,KAChC,IAoCF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS,sCAAuC,MAAM,kBAElE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,sCAAuC,MAAM,eASlE,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,mFACnB,MAAM,wEAGP,QAAQ,eAAe,CAAC,KAChC,IAkBF,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,aAAa,mFACd,MAAM;;uBAEP,QAAQ,KAAK,eAAe,EAAE,UAAU,CAAC,CAAC,KAClD,YAuBF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,8CACd,MAAM,oCAER,QAAQ,eAAe,CAAC,KAChC,IAGF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,qDACd,MAAM,iCAEhB,IAGF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,oFAI1B,MAAM,iDAqBlB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,aAAc,MAAM,KAAG,IAI9C,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,aAAc,MAAM,KAAG,IAMhD,CAAC"}
|
package/core.js
CHANGED
|
@@ -44,8 +44,7 @@ export const getSignalObject = (id) => {
|
|
|
44
44
|
* Used inside dispatch, Don't use it directly.
|
|
45
45
|
*/
|
|
46
46
|
export const _callListeners = (signal, detail) => {
|
|
47
|
-
|
|
48
|
-
(_a = logger.logMethodArgs) === null || _a === void 0 ? void 0 : _a.call(logger, '_callListeners', { signalId: signal.id, signalDetail: detail });
|
|
47
|
+
logger.logMethodArgs?.('_callListeners', { signalId: signal.id, signalDetail: detail });
|
|
49
48
|
const removeList = [];
|
|
50
49
|
for (const listener of signal.listenerList) {
|
|
51
50
|
if (listener.disabled)
|
|
@@ -80,12 +79,11 @@ export const _callListeners = (signal, detail) => {
|
|
|
80
79
|
* ```
|
|
81
80
|
*/
|
|
82
81
|
export const subscribe = (signalId, listenerCallback, options = {}) => {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
(
|
|
88
|
-
(_e = logger.logMethodArgs) === null || _e === void 0 ? void 0 : _e.call(logger, 'subscribe', { signalId, options });
|
|
82
|
+
options.once ?? (options.once = false);
|
|
83
|
+
options.disabled ?? (options.disabled = false);
|
|
84
|
+
options.receivePrevious ?? (options.receivePrevious = 'NextCycle');
|
|
85
|
+
options.priority ?? (options.priority = false);
|
|
86
|
+
logger.logMethodArgs?.('subscribe', { signalId, options });
|
|
89
87
|
const signal = getSignalObject(signalId);
|
|
90
88
|
const listener = {
|
|
91
89
|
id: ++_lastListenerAutoId,
|
|
@@ -141,8 +139,7 @@ export const subscribe = (signalId, listenerCallback, options = {}) => {
|
|
|
141
139
|
* ```
|
|
142
140
|
*/
|
|
143
141
|
export const unsubscribe = (listener) => {
|
|
144
|
-
|
|
145
|
-
(_a = logger.logMethodArgs) === null || _a === void 0 ? void 0 : _a.call(logger, 'unsubscribe', listener);
|
|
142
|
+
logger.logMethodArgs?.('unsubscribe', listener);
|
|
146
143
|
const signal = getSignalObject(listener.signalId);
|
|
147
144
|
const listenerIndex = signal.listenerList.findIndex((_listener) => _listener.id === listener.id);
|
|
148
145
|
if (listenerIndex !== -1) {
|
|
@@ -159,8 +156,7 @@ export const unsubscribe = (listener) => {
|
|
|
159
156
|
* ```
|
|
160
157
|
*/
|
|
161
158
|
export const removeAllListeners = (signalId) => {
|
|
162
|
-
|
|
163
|
-
(_a = logger.logMethodArgs) === null || _a === void 0 ? void 0 : _a.call(logger, 'removeAllListeners', signalId);
|
|
159
|
+
logger.logMethodArgs?.('removeAllListeners', signalId);
|
|
164
160
|
const signal = getSignalObject(signalId);
|
|
165
161
|
if (signal.listenerList.length === 0)
|
|
166
162
|
return;
|
|
@@ -179,9 +175,8 @@ export const removeAllListeners = (signalId) => {
|
|
|
179
175
|
* ```
|
|
180
176
|
*/
|
|
181
177
|
export const dispatch = (signalId, detail, options = {}) => {
|
|
182
|
-
|
|
183
|
-
(
|
|
184
|
-
(_b = logger.logMethodArgs) === null || _b === void 0 ? void 0 : _b.call(logger, 'dispatch', { signalId, detail, options });
|
|
178
|
+
options.debounce ?? (options.debounce = 'AnimationFrame');
|
|
179
|
+
logger.logMethodArgs?.('dispatch', { signalId, detail, options });
|
|
185
180
|
const signal = getSignalObject(signalId);
|
|
186
181
|
// set detail before check signal.debounced for act like throttle (call listeners with last dispatch detail).
|
|
187
182
|
signal.detail = detail;
|
|
@@ -202,8 +197,7 @@ export const dispatch = (signalId, detail, options = {}) => {
|
|
|
202
197
|
// else
|
|
203
198
|
signal.debounced = true;
|
|
204
199
|
const callListeners = () => {
|
|
205
|
-
|
|
206
|
-
_callListeners(signal, (_a = signal.detail) !== null && _a !== void 0 ? _a : detail);
|
|
200
|
+
_callListeners(signal, signal.detail ?? detail);
|
|
207
201
|
signal.debounced = false;
|
|
208
202
|
};
|
|
209
203
|
options.debounce === 'AnimationFrame'
|
|
@@ -238,8 +232,7 @@ export const getDetail = (signalId) => {
|
|
|
238
232
|
*/
|
|
239
233
|
export const untilNext = (signalId) => {
|
|
240
234
|
return new Promise((resolve) => {
|
|
241
|
-
|
|
242
|
-
(_a = logger.logMethodArgs) === null || _a === void 0 ? void 0 : _a.call(logger, 'untilNext', signalId);
|
|
235
|
+
logger.logMethodArgs?.('untilNext', signalId);
|
|
243
236
|
subscribe(signalId, resolve, {
|
|
244
237
|
once: true,
|
|
245
238
|
priority: true,
|
|
@@ -257,11 +250,12 @@ export const untilNext = (signalId) => {
|
|
|
257
250
|
* setContextProvider('content-change', async (requestParam) => await fetchNewContent(requestParam));
|
|
258
251
|
* ```
|
|
259
252
|
*/
|
|
260
|
-
export const setContextProvider = (signalId,
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
253
|
+
export const setContextProvider = (signalId,
|
|
254
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
|
|
255
|
+
signalProvider, options = {}) => {
|
|
256
|
+
options.debounce ?? (options.debounce = 'AnimationFrame');
|
|
257
|
+
options.receivePrevious ?? (options.receivePrevious = 'AnimationFrame');
|
|
258
|
+
logger.logMethodArgs?.('setContextProvider', { signalId, options });
|
|
265
259
|
const requestSignalId = 'request-' + signalId;
|
|
266
260
|
removeAllListeners(requestSignalId);
|
|
267
261
|
subscribe(requestSignalId, async (argumentObject) => {
|
|
@@ -290,9 +284,8 @@ export const setContextProvider = (signalId, signalProvider, options = {}) => {
|
|
|
290
284
|
* ```
|
|
291
285
|
*/
|
|
292
286
|
export const defineCommand = (signalId, signalProvider, options = {}) => {
|
|
293
|
-
|
|
294
|
-
(
|
|
295
|
-
(_b = logger.logMethodArgs) === null || _b === void 0 ? void 0 : _b.call(logger, 'defineCommand', { commandId: signalId, options });
|
|
287
|
+
options.debounce ?? (options.debounce = 'AnimationFrame');
|
|
288
|
+
logger.logMethodArgs?.('defineCommand', { commandId: signalId, options });
|
|
296
289
|
const requestSignalId = 'request-' + signalId;
|
|
297
290
|
removeAllListeners(requestSignalId);
|
|
298
291
|
return subscribe(requestSignalId, async (argumentObject) => {
|
|
@@ -317,8 +310,7 @@ export const defineCommand = (signalId, signalProvider, options = {}) => {
|
|
|
317
310
|
* ```
|
|
318
311
|
*/
|
|
319
312
|
export const requestContext = (contextId, requestParam, options = {}) => {
|
|
320
|
-
|
|
321
|
-
(_a = logger.logMethodArgs) === null || _a === void 0 ? void 0 : _a.call(logger, 'requestContext', { contextId, requestParam });
|
|
313
|
+
logger.logMethodArgs?.('requestContext', { contextId, requestParam });
|
|
322
314
|
return dispatch(`request-${contextId}`, requestParam, options);
|
|
323
315
|
};
|
|
324
316
|
/**
|
|
@@ -331,8 +323,7 @@ export const requestContext = (contextId, requestParam, options = {}) => {
|
|
|
331
323
|
* ```
|
|
332
324
|
*/
|
|
333
325
|
export const requestCommand = (commandId, commandArgument) => {
|
|
334
|
-
|
|
335
|
-
(_a = logger.logMethodArgs) === null || _a === void 0 ? void 0 : _a.call(logger, 'requestCommand', { commandId, commandArgument });
|
|
326
|
+
logger.logMethodArgs?.('requestCommand', { commandId, commandArgument });
|
|
336
327
|
dispatch(`request-${commandId}`, commandArgument, { debounce: 'No' });
|
|
337
328
|
};
|
|
338
329
|
/**
|
|
@@ -347,8 +338,7 @@ export const requestCommand = (commandId, commandArgument) => {
|
|
|
347
338
|
* ```
|
|
348
339
|
*/
|
|
349
340
|
export const requestCommandWithResponse = async (commandId, commandArgument) => {
|
|
350
|
-
|
|
351
|
-
(_a = logger.logMethodArgs) === null || _a === void 0 ? void 0 : _a.call(logger, 'requestCommand', { commandId, commandArgument });
|
|
341
|
+
logger.logMethodArgs?.('requestCommand', { commandId, commandArgument });
|
|
352
342
|
const _requestSignalId = `request-${commandId}`;
|
|
353
343
|
const _callbackSignalId = `callback-${commandId}-${++_lastListenerAutoId}`;
|
|
354
344
|
const untilCallback = untilNext(_callbackSignalId);
|
|
@@ -372,8 +362,7 @@ export const requestCommandWithResponse = async (commandId, commandArgument) =>
|
|
|
372
362
|
* ```
|
|
373
363
|
*/
|
|
374
364
|
export const clearDetail = (signalId) => {
|
|
375
|
-
|
|
376
|
-
(_a = logger.logMethodArgs) === null || _a === void 0 ? void 0 : _a.call(logger, 'expire', signalId);
|
|
365
|
+
logger.logMethodArgs?.('expire', signalId);
|
|
377
366
|
const signal = getSignalObject(signalId);
|
|
378
367
|
delete signal.detail;
|
|
379
368
|
};
|
|
@@ -389,8 +378,7 @@ export const clearDetail = (signalId) => {
|
|
|
389
378
|
* ```
|
|
390
379
|
*/
|
|
391
380
|
export const destroySignal = (signalId) => {
|
|
392
|
-
|
|
393
|
-
(_a = logger.logMethodArgs) === null || _a === void 0 ? void 0 : _a.call(logger, 'destroySignal', signalId);
|
|
381
|
+
logger.logMethodArgs?.('destroySignal', signalId);
|
|
394
382
|
const signal = _signalStorage[signalId];
|
|
395
383
|
if (signal == null)
|
|
396
384
|
return;
|
package/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAC,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAenD,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC;IAC/B,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,gBAAgB;CAC1B,CAAC,CAAC;AAEH;;GAEG;AACH,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAE5B,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;GAEG;AACH,MAAM,cAAc,GAAkB,EAAE,CAAC;AAEzC,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAA0B,EAAU,EAAmB,EAAE;IACtF,IAAI,MAAM,GAAG,cAAc,CAAC,EAAE,CAAgC,CAAC;IAC/D,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,GAAG;YAC5B,EAAE;YACF,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,EAAE;SACjB,CAAC;KACH;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAA0B,MAAuB,EAAE,MAAS,EAAQ,EAAE;;IAClG,MAAA,MAAM,CAAC,aAAa,uDAAG,gBAAgB,EAAE,EAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAC,CAAC,CAAC;IAEtF,MAAM,UAAU,GAA6B,EAAE,CAAC;IAEhD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;QAC1C,IAAI,QAAQ,CAAC,QAAQ;YAAE,SAAS;QAChC,IAAI,QAAQ,CAAC,IAAI;YAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI;YACF,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,GAAG,YAAY,OAAO,EAAE;gBAC1B,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAChB,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,GAAG,EAAE;oBAC1D,QAAQ,EAAE,MAAM,CAAC,EAAE;iBACpB,CAAC,CACH,CAAC;aACH;SACF;QACD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,GAAG,EAAE;gBAC1D,QAAQ,EAAE,MAAM,CAAC,EAAE;aACpB,CAAC,CAAC;SACJ;KACF;IAED,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAgB,EAChB,gBAAqC,EACrC,UAAqC,EAAE,EACzB,EAAE;;IAChB,MAAA,OAAO,CAAC,IAAI,oCAAZ,OAAO,CAAC,IAAI,GAAK,KAAK,EAAC;IACvB,MAAA,OAAO,CAAC,QAAQ,oCAAhB,OAAO,CAAC,QAAQ,GAAK,KAAK,EAAC;IAC3B,MAAA,OAAO,CAAC,eAAe,oCAAvB,OAAO,CAAC,eAAe,GAAK,WAAW,EAAC;IACxC,MAAA,OAAO,CAAC,QAAQ,oCAAhB,OAAO,CAAC,QAAQ,GAAK,KAAK,EAAC;IAE3B,MAAA,MAAM,CAAC,aAAa,uDAAG,WAAW,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,eAAe,CAAI,QAAQ,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAsB;QAClC,EAAE,EAAE,EAAE,mBAAmB;QACzB,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,gBAAgB;KAC3B,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;IAClH,IAAI,YAAY,EAAE;QAChB,uCAAuC;QAEvC,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,IAAI;gBACF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;oBAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aAClE;YACD,OAAO,GAAG,EAAE;gBACV,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,6BAA6B,EAAE,GAAG,EAAE;oBAC5D,QAAQ,EAAE,MAAM,CAAC,EAAE;iBACpB,CAAC,CAAC;aACJ;QACH,CAAC,CAAC;QAEF,IAAI,OAAO,CAAC,eAAe,KAAK,gBAAgB,EAAE;YAChD,qBAAqB,CAAC,QAAQ,CAAC,CAAC;SACjC;aACI;YACH,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;SACrF;KACF;IAED,mGAAmG;IACnG,IAAI,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;QACnC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;YAC7B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACvC;aACI;YACH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpC;KACF;IAED,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAsB,EAAQ,EAAE;;IAC1D,MAAA,MAAM,CAAC,aAAa,uDAAG,aAAa,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjG,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;QACxB,KAAK,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;KACnD;AACH,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAQ,EAAE;;IAC3D,MAAA,MAAM,CAAC,aAAa,uDAAG,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC7C,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,QAAgB,EAChB,MAAS,EACT,UAAoC,EAAE,EAChC,EAAE;;IACR,MAAA,OAAO,CAAC,QAAQ,oCAAhB,OAAO,CAAC,QAAQ,GAAK,gBAAgB,EAAC;IAEtC,MAAA,MAAM,CAAC,aAAa,uDAAG,UAAU,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,eAAe,CAAI,QAAQ,CAAC,CAAC;IAE5C,6GAA6G;IAC7G,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEvB,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,CAAC,sBAAsB;IAEnD,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;QAC7B,OAAO,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACvC;IAED,OAAO;IACP,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW,EAAE;QACpC,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO;KACR;IAED,OAAO;IACP,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE;QAC7B,OAAO,CAAC,6BAA6B;KACtC;IAED,OAAO;IACP,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,MAAM,aAAa,GAAG,GAAS,EAAE;;QAC/B,cAAc,CAAC,MAAM,EAAE,MAAA,MAAM,CAAC,MAAM,mCAAI,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC,CAAC;IACF,OAAO,CAAC,QAAQ,KAAK,gBAAgB;QACnC,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC;QACtC,CAAC,CAAC,UAAU,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAA0B,QAAgB,EAAiB,EAAE;IACpF,OAAO,eAAe,CAAI,QAAQ,CAAC,CAAC,MAAM,CAAC;AAC7C,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAA0B,QAAgB,EAAc,EAAE;IACjF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;;QAC7B,MAAA,MAAM,CAAC,aAAa,uDAAG,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC9C,SAAS,CAAI,QAAQ,EAAE,OAAO,EAAE;YAC9B,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAgB,EAChB,cAA0D,EAC1D,UAAoC,EAAE,EAChC,EAAE;;IACR,MAAA,OAAO,CAAC,QAAQ,oCAAhB,OAAO,CAAC,QAAQ,GAAK,gBAAgB,EAAC;IACtC,MAAA,OAAO,CAAC,eAAe,oCAAvB,OAAO,CAAC,eAAe,GAAK,gBAAgB,EAAC;IAC7C,MAAA,MAAM,CAAC,aAAa,uDAAG,oBAAoB,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC9C,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpC,SAAS,CACL,eAAe,EACf,KAAK,EAAE,cAAc,EAAiB,EAAE;QACtC,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,QAAQ,CAAW,QAAQ,EAAE,YAAY,EAAE,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAC;SAC1E;IACH,CAAC,EACD;QACE,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,QAAgB,EAChB,cAAmF,EACnF,UAAsD,EAAE,EAC1C,EAAE;;IAChB,MAAA,OAAO,CAAC,QAAQ,oCAAhB,OAAO,CAAC,QAAQ,GAAK,gBAAgB,EAAC;IACtC,MAAA,MAAM,CAAC,aAAa,uDAAG,eAAe,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;IACxE,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC9C,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpC,OAAO,SAAS,CACZ,eAAe,EACf,KAAK,EAAE,cAAc,EAAE,EAAE;QACvB,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,mCAAmC;QACjE,IAAI,cAAc,CAAC,iBAAiB,IAAI,IAAI,EAAE;YAC5C,cAAc,CAAC,cAAc,CAAC,CAAC;SAChC;aACI;YACH,kBAAkB;YAClB,QAAQ,CACJ,cAAc,CAAC,iBAAiB,EAChC,MAAM,cAAc,CAAC,cAAc,CAAC,EACpC,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAC/B,CAAC;SACH;IACH,CAAC,EACD,EAAC,eAAe,EAAE,WAAW,EAAC,CACjC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,SAAiB,EACjB,YAAsB,EACtB,UAAoC,EAAE,EAChC,EAAE;;IACR,MAAA,MAAM,CAAC,aAAa,uDAAG,gBAAgB,EAAE,EAAC,SAAS,EAAE,YAAY,EAAC,CAAC,CAAC;IACpE,OAAO,QAAQ,CAAW,WAAW,SAAS,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,SAAiB,EACjB,eAA0B,EACpB,EAAE;;IACR,MAAA,MAAM,CAAC,aAAa,uDAAG,gBAAgB,EAAE,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC,CAAC;IACvE,QAAQ,CAAY,WAAW,SAAS,EAAE,EAAE,eAAe,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAI7C,SAAiB,EACjB,eAA0B,EACR,EAAE;;IACpB,MAAA,MAAM,CAAC,aAAa,uDAAG,gBAAgB,EAAE,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC,CAAC;IAEvE,MAAM,gBAAgB,GAAG,WAAW,SAAS,EAAE,CAAC;IAChD,MAAM,iBAAiB,GAAG,YAAY,SAAS,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC3E,MAAM,aAAa,GAAG,SAAS,CAAU,iBAAiB,CAAC,CAAC;IAE5D,QAAQ,CACJ,gBAAgB,EAChB;QACE,GAAG,eAAe;QAClB,iBAAiB;KAClB,EACD,EAAC,QAAQ,EAAE,WAAW,EAAC,CAC1B,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC;IACrC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAQ,EAAE;;IACpD,MAAA,MAAM,CAAC,aAAa,uDAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAQ,EAAE;;IACtD,MAAA,MAAM,CAAC,aAAa,uDAAG,eAAe,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO;IAC3B,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC,CAAC","sourcesContent":["import {createLogger, globalAlwatr} from '@alwatr/logger';\nimport {requestAnimationFrame} from '@alwatr/util';\n\nimport type {\n DispatchOptions,\n ListenerFunction,\n ListenerObject,\n SubscribeOptions,\n SignalObject,\n ProviderFunction,\n ProviderOptions,\n SignalStorage,\n ListenerSpec,\n} from './type.js';\nimport type {Stringifyable, StringifyableRecord} from '@alwatr/type';\n\nglobalAlwatr.registeredList.push({\n name: '@alwatr/signal',\n version: _ALWATR_VERSION_,\n});\n\n/**\n * Listener `id`\n */\nlet _lastListenerAutoId = 0;\n\nconst debounceTimeout = 5;\n\n/**\n * Signal stack database.\n */\nconst _signalStorage: SignalStorage = {};\n\nexport const logger = createLogger('alwatr/signal');\n\n/**\n * Get signal object by id, If not available, it will create a new signal with default options.\n *\n * Don't use it directly.\n *\n * Example:\n *\n * ```ts\n * const signal = getSignalObject<ContentType>('content-change');\n * signal.disabled = true;\n * ```\n */\nexport const getSignalObject = <T extends Stringifyable>(id: string): SignalObject<T> => {\n let signal = _signalStorage[id] as SignalObject<T> | undefined;\n if (signal == null) {\n signal = _signalStorage[id] = {\n id,\n disabled: false,\n debounced: false,\n listenerList: [],\n };\n }\n return signal;\n};\n\n/**\n * Call all listeners callback of special signal.\n *\n * Used inside dispatch, Don't use it directly.\n */\nexport const _callListeners = <T extends Stringifyable>(signal: SignalObject<T>, detail: T): void => {\n logger.logMethodArgs?.('_callListeners', {signalId: signal.id, signalDetail: detail});\n\n const removeList: Array<ListenerObject<T>> = [];\n\n for (const listener of signal.listenerList) {\n if (listener.disabled) continue;\n if (listener.once) removeList.push(listener);\n try {\n const ret = listener.callback(detail);\n if (ret instanceof Promise) {\n ret.catch((err) =>\n logger.error('_callListeners', 'call_listener_failed', err, {\n signalId: signal.id,\n }),\n );\n }\n }\n catch (err) {\n logger.error('_callListeners', 'call_listener_failed', err, {\n signalId: signal.id,\n });\n }\n }\n\n removeList.forEach((listener) => unsubscribe(listener));\n};\n\n/**\n * Subscribe new signal listener to a signal, work like addEventListener.\n *\n * Example:\n *\n * ```ts\n * const listener = subscribe<ContentType>('content-change', (content) => console.log(content));\n * // ...\n * unsubscribe(listener);\n * ```\n */\nexport const subscribe = <T extends Stringifyable>(\n signalId: string,\n listenerCallback: ListenerFunction<T>,\n options: Partial<SubscribeOptions> = {},\n): ListenerSpec => {\n options.once ??= false;\n options.disabled ??= false;\n options.receivePrevious ??= 'NextCycle';\n options.priority ??= false;\n\n logger.logMethodArgs?.('subscribe', {signalId, options});\n\n const signal = getSignalObject<T>(signalId);\n\n const listener: ListenerObject<T> = {\n id: ++_lastListenerAutoId,\n signalId: signal.id,\n once: options.once,\n disabled: options.disabled,\n callback: listenerCallback,\n };\n\n const execCallback = signal.detail !== undefined && options.receivePrevious !== 'No' && options.disabled !== true;\n if (execCallback) {\n // Run callback for old dispatch signal\n\n const callback = (): void => {\n try {\n if (signal.detail !== undefined) listenerCallback(signal.detail);\n }\n catch (err) {\n logger.error('subscribe', 'call_signal_callback_failed', err, {\n signalId: signal.id,\n });\n }\n };\n\n if (options.receivePrevious === 'AnimationFrame') {\n requestAnimationFrame(callback);\n }\n else {\n setTimeout(callback, options.receivePrevious === 'NextCycle' ? 0 : debounceTimeout);\n }\n }\n\n // if once then must remove listener after fist callback called! then why push it to listenerList?!\n if (!(execCallback && options.once)) {\n if (options.priority === true) {\n signal.listenerList.unshift(listener);\n }\n else {\n signal.listenerList.push(listener);\n }\n }\n\n return {\n id: listener.id,\n signalId: listener.signalId,\n };\n};\n\n/**\n * Unsubscribe listener from signal, work like removeEventListener.\n *\n * Example:\n *\n * ```ts\n * const listener = subscribe<ContentType>('content-change', (content) => console.log(content));\n * // ...\n * unsubscribe(listener);\n * ```\n */\nexport const unsubscribe = (listener: ListenerSpec): void => {\n logger.logMethodArgs?.('unsubscribe', listener);\n const signal = getSignalObject(listener.signalId);\n const listenerIndex = signal.listenerList.findIndex((_listener) => _listener.id === listener.id);\n if (listenerIndex !== -1) {\n void signal.listenerList.splice(listenerIndex, 1);\n }\n};\n\n/**\n * Unsubscribe all listener from a signal, clear all listeners.\n *\n * Example:\n *\n * ```ts\n * removeAllListeners('content-change');\n * ```\n */\nexport const removeAllListeners = (signalId: string): void => {\n logger.logMethodArgs?.('removeAllListeners', signalId);\n const signal = getSignalObject(signalId);\n if (signal.listenerList.length === 0) return;\n signal.listenerList.length = 0;\n signal.listenerList = [];\n};\n\n/**\n * Dispatch (send) signal to all listeners.\n *\n * Signal detail changed immediately without any debounce.\n *\n * Example:\n *\n * ```ts\n * dispatch<ContentType>('content-change', newContent);\n * ```\n */\nexport const dispatch = <T extends Stringifyable>(\n signalId: string,\n detail: T,\n options: Partial<DispatchOptions> = {},\n): void => {\n options.debounce ??= 'AnimationFrame';\n\n logger.logMethodArgs?.('dispatch', {signalId, detail, options});\n\n const signal = getSignalObject<T>(signalId);\n\n // set detail before check signal.debounced for act like throttle (call listeners with last dispatch detail).\n signal.detail = detail;\n\n if (signal.disabled) return; // signal is disabled.\n\n if (options.debounce === 'No') {\n return _callListeners(signal, detail);\n }\n\n // else\n if (options.debounce === 'NextCycle') {\n setTimeout(_callListeners, 0, signal, detail);\n return;\n }\n\n // else\n if (signal.debounced === true) {\n return; // last dispatch in progress.\n }\n\n // else\n signal.debounced = true;\n const callListeners = (): void => {\n _callListeners(signal, signal.detail ?? detail);\n signal.debounced = false;\n };\n options.debounce === 'AnimationFrame'\n ? requestAnimationFrame(callListeners)\n : setTimeout(callListeners, debounceTimeout);\n};\n\n/**\n * Get current signal detail/value.\n *\n * Return undefined if signal not dispatched before or expired.\n *\n * Example:\n *\n * ```ts\n * const currentContent = getDetail<ContentType>('content-change');\n * if (currentContent === undefined) {\n * // signal not dispatched yet\n * }\n * ```\n */\nexport const getDetail = <T extends Stringifyable>(signalId: string): T | undefined => {\n return getSignalObject<T>(signalId).detail;\n};\n\n/**\n * Get the detail/value of the next received signal.\n *\n * Example:\n *\n * ```ts\n * const newContent = await untilNext<ContentType>('content-change');\n * ```\n */\nexport const untilNext = <T extends Stringifyable>(signalId: string): Promise<T> => {\n return new Promise((resolve) => {\n logger.logMethodArgs?.('untilNext', signalId);\n subscribe<T>(signalId, resolve, {\n once: true,\n priority: true,\n receivePrevious: 'No',\n });\n });\n};\n\n/**\n * Defines the provider of the context signal that will be called when the context requested.\n * Subscribe to `request-signalId`.\n *\n * Example:\n *\n * ```ts\n * setContextProvider('content-change', async (requestParam) => await fetchNewContent(requestParam));\n * ```\n */\nexport const setContextProvider = <TContext extends Stringifyable, TRquest extends Stringifyable = null>(\n signalId: string,\n signalProvider: ProviderFunction<TRquest, TContext | void>,\n options: Partial<ProviderOptions> = {},\n): void => {\n options.debounce ??= 'AnimationFrame';\n options.receivePrevious ??= 'AnimationFrame';\n logger.logMethodArgs?.('setContextProvider', {signalId, options});\n const requestSignalId = 'request-' + signalId;\n removeAllListeners(requestSignalId);\n subscribe<TRquest>(\n requestSignalId,\n async (argumentObject): Promise<void> => {\n const signalDetail = await signalProvider(argumentObject);\n if (signalDetail !== undefined) {\n dispatch<TContext>(signalId, signalDetail, {debounce: options.debounce});\n }\n },\n {\n receivePrevious: options.receivePrevious,\n },\n );\n};\n\n/**\n * Defines the command and dispatch returned value.\n *\n * Subscribe commandFunction to request-command-signal and dispatch callback-signal with commandFunction return value.\n *\n * Example:\n *\n * ```ts\n * defineCommand<TArgument, TReturn>(\n * 'show-prompt',\n * async (argumentObject) => {\n * return await showPrompt(argumentObject);\n * },\n * );\n * ```\n */\nexport const defineCommand = <TArgument extends StringifyableRecord, TReturn extends Stringifyable>(\n signalId: string,\n signalProvider: ProviderFunction<TArgument & {_callbackSignalId?: string}, TReturn>,\n options: Partial<Pick<ProviderOptions, 'debounce'>> = {},\n): ListenerSpec => {\n options.debounce ??= 'AnimationFrame';\n logger.logMethodArgs?.('defineCommand', {commandId: signalId, options});\n const requestSignalId = 'request-' + signalId;\n removeAllListeners(requestSignalId);\n return subscribe<TArgument & {_callbackSignalId?: string}>(\n requestSignalId,\n async (argumentObject) => {\n clearDetail(requestSignalId); // clean argumentObject from memory\n if (argumentObject._callbackSignalId == null) {\n signalProvider(argumentObject);\n }\n else {\n // prettier-ignore\n dispatch<TReturn>(\n argumentObject._callbackSignalId,\n await signalProvider(argumentObject),\n {debounce: options.debounce},\n );\n }\n },\n {receivePrevious: 'NextCycle'},\n );\n};\n\n/**\n * Dispatch request context signal with requestParam as detail.\n *\n * Example:\n *\n * ```ts\n * requestContext<RequestParamType>('content-change', {foo: 'bar'});\n * const newContent = await untilNext<ContentType>('content-change');\n * ```\n */\nexport const requestContext = <TRequest extends Stringifyable>(\n contextId: string,\n requestParam: TRequest,\n options: Partial<DispatchOptions> = {},\n): void => {\n logger.logMethodArgs?.('requestContext', {contextId, requestParam});\n return dispatch<TRequest>(`request-${contextId}`, requestParam, options);\n};\n\n/**\n * Dispatch request command signal with commandArgument as detail.\n *\n * Example:\n *\n * ```ts\n * requestCommand<ArgumentType>('show-dialog', {foo: 'bar'});\n * ```\n */\nexport const requestCommand = <TArgument extends StringifyableRecord>(\n commandId: string,\n commandArgument: TArgument,\n): void => {\n logger.logMethodArgs?.('requestCommand', {commandId, commandArgument});\n dispatch<TArgument>(`request-${commandId}`, commandArgument, {debounce: 'No'});\n};\n\n/**\n * Dispatch request command signal with commandArgument as detail and return untilNext of callback signal.\n *\n * Request command and wait for answer.\n *\n * Example:\n *\n * ```ts\n * const response = await requestCommandWithResponse<ArgumentType, ReturnType>('show-dialog', {foo: 'bar'});\n * ```\n */\nexport const requestCommandWithResponse = async <\n TArgument extends StringifyableRecord,\n TReturn extends Stringifyable\n>(\n commandId: string,\n commandArgument: TArgument,\n): Promise<TReturn> => {\n logger.logMethodArgs?.('requestCommand', {commandId, commandArgument});\n\n const _requestSignalId = `request-${commandId}`;\n const _callbackSignalId = `callback-${commandId}-${++_lastListenerAutoId}`;\n const untilCallback = untilNext<TReturn>(_callbackSignalId);\n\n dispatch<TArgument & {_callbackSignalId: string}>(\n _requestSignalId,\n {\n ...commandArgument,\n _callbackSignalId,\n },\n {debounce: 'NextCycle'},\n );\n\n const response = await untilCallback;\n destroySignal(_callbackSignalId);\n return response;\n};\n\n/**\n * Clear current signal detail without dispatch new signal.\n *\n * new subscriber options.receivePrevious not work until new signal\n *\n * Example:\n *\n * ```ts\n * clearDetail('product-list');\n * ```\n */\nexport const clearDetail = (signalId: string): void => {\n logger.logMethodArgs?.('expire', signalId);\n const signal = getSignalObject(signalId);\n delete signal.detail;\n};\n\n/**\n * Delete signal object with detail and listeners and options.\n *\n * new subscriber options.receivePrevious not work until new signal\n *\n * Example:\n *\n * ```ts\n * destroySignal('product-list');\n * ```\n */\nexport const destroySignal = (signalId: string): void => {\n logger.logMethodArgs?.('destroySignal', signalId);\n const signal = _signalStorage[signalId];\n if (signal == null) return;\n signal.listenerList.length = 0;\n delete _signalStorage[signalId];\n};\n"]}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAC,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAenD,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC;IAC/B,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,gBAAgB;CAC1B,CAAC,CAAC;AAEH;;GAEG;AACH,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAE5B,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;GAEG;AACH,MAAM,cAAc,GAAkB,EAAE,CAAC;AAEzC,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAA0B,EAAU,EAAmB,EAAE;IACtF,IAAI,MAAM,GAAG,cAAc,CAAC,EAAE,CAAgC,CAAC;IAC/D,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,GAAG;YAC5B,EAAE;YACF,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,EAAE;SACjB,CAAC;KACH;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAA0B,MAAuB,EAAE,MAAS,EAAQ,EAAE;IAClG,MAAM,CAAC,aAAa,EAAE,CAAC,gBAAgB,EAAE,EAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAC,CAAC,CAAC;IAEtF,MAAM,UAAU,GAAwB,EAAE,CAAC;IAE3C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;QAC1C,IAAI,QAAQ,CAAC,QAAQ;YAAE,SAAS;QAChC,IAAI,QAAQ,CAAC,IAAI;YAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI;YACF,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,GAAG,YAAY,OAAO,EAAE;gBAC1B,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAChB,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,GAAG,EAAE;oBAC1D,QAAQ,EAAE,MAAM,CAAC,EAAE;iBACpB,CAAC,CACH,CAAC;aACH;SACF;QACD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,GAAG,EAAE;gBAC1D,QAAQ,EAAE,MAAM,CAAC,EAAE;aACpB,CAAC,CAAC;SACJ;KACF;IAED,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAgB,EAChB,gBAAqC,EACrC,UAAqC,EAAE,EACzB,EAAE;IAChB,OAAO,CAAC,IAAI,KAAZ,OAAO,CAAC,IAAI,GAAK,KAAK,EAAC;IACvB,OAAO,CAAC,QAAQ,KAAhB,OAAO,CAAC,QAAQ,GAAK,KAAK,EAAC;IAC3B,OAAO,CAAC,eAAe,KAAvB,OAAO,CAAC,eAAe,GAAK,WAAW,EAAC;IACxC,OAAO,CAAC,QAAQ,KAAhB,OAAO,CAAC,QAAQ,GAAK,KAAK,EAAC;IAE3B,MAAM,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,eAAe,CAAI,QAAQ,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAsB;QAClC,EAAE,EAAE,EAAE,mBAAmB;QACzB,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,gBAAgB;KAC3B,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;IAClH,IAAI,YAAY,EAAE;QAChB,uCAAuC;QAEvC,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,IAAI;gBACF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;oBAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aAClE;YACD,OAAO,GAAG,EAAE;gBACV,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,6BAA6B,EAAE,GAAG,EAAE;oBAC5D,QAAQ,EAAE,MAAM,CAAC,EAAE;iBACpB,CAAC,CAAC;aACJ;QACH,CAAC,CAAC;QAEF,IAAI,OAAO,CAAC,eAAe,KAAK,gBAAgB,EAAE;YAChD,qBAAqB,CAAC,QAAQ,CAAC,CAAC;SACjC;aACI;YACH,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;SACrF;KACF;IAED,mGAAmG;IACnG,IAAI,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;QACnC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;YAC7B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACvC;aACI;YACH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpC;KACF;IAED,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAsB,EAAQ,EAAE;IAC1D,MAAM,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjG,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;QACxB,KAAK,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;KACnD;AACH,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAQ,EAAE;IAC3D,MAAM,CAAC,aAAa,EAAE,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC7C,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,QAAgB,EAChB,MAAS,EACT,UAAoC,EAAE,EAChC,EAAE;IACR,OAAO,CAAC,QAAQ,KAAhB,OAAO,CAAC,QAAQ,GAAK,gBAAgB,EAAC;IAEtC,MAAM,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,eAAe,CAAI,QAAQ,CAAC,CAAC;IAE5C,6GAA6G;IAC7G,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEvB,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,CAAC,sBAAsB;IAEnD,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;QAC7B,OAAO,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACvC;IAED,OAAO;IACP,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW,EAAE;QACpC,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO;KACR;IAED,OAAO;IACP,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE;QAC7B,OAAO,CAAC,6BAA6B;KACtC;IAED,OAAO;IACP,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,MAAM,aAAa,GAAG,GAAS,EAAE;QAC/B,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC,CAAC;IACF,OAAO,CAAC,QAAQ,KAAK,gBAAgB;QACnC,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC;QACtC,CAAC,CAAC,UAAU,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAA0B,QAAgB,EAAiB,EAAE;IACpF,OAAO,eAAe,CAAI,QAAQ,CAAC,CAAC,MAAM,CAAC;AAC7C,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAA0B,QAAgB,EAAc,EAAE;IACjF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC9C,SAAS,CAAI,QAAQ,EAAE,OAAO,EAAE;YAC9B,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAgB;AAChB,mEAAmE;AACnE,cAA0D,EAC1D,UAAoC,EAAE,EAChC,EAAE;IACR,OAAO,CAAC,QAAQ,KAAhB,OAAO,CAAC,QAAQ,GAAK,gBAAgB,EAAC;IACtC,OAAO,CAAC,eAAe,KAAvB,OAAO,CAAC,eAAe,GAAK,gBAAgB,EAAC;IAC7C,MAAM,CAAC,aAAa,EAAE,CAAC,oBAAoB,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC9C,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpC,SAAS,CACL,eAAe,EACf,KAAK,EAAE,cAAc,EAAiB,EAAE;QACtC,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,QAAQ,CAAW,QAAQ,EAAE,YAAY,EAAE,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAC;SAC1E;IACH,CAAC,EACD;QACE,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,QAAgB,EAChB,cAAmF,EACnF,UAAsD,EAAE,EAC1C,EAAE;IAChB,OAAO,CAAC,QAAQ,KAAhB,OAAO,CAAC,QAAQ,GAAK,gBAAgB,EAAC;IACtC,MAAM,CAAC,aAAa,EAAE,CAAC,eAAe,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;IACxE,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC9C,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpC,OAAO,SAAS,CACZ,eAAe,EACf,KAAK,EAAE,cAAc,EAAE,EAAE;QACvB,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,mCAAmC;QACjE,IAAI,cAAc,CAAC,iBAAiB,IAAI,IAAI,EAAE;YAC5C,cAAc,CAAC,cAAc,CAAC,CAAC;SAChC;aACI;YACH,kBAAkB;YAClB,QAAQ,CACJ,cAAc,CAAC,iBAAiB,EAChC,MAAM,cAAc,CAAC,cAAc,CAAC,EACpC,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAC/B,CAAC;SACH;IACH,CAAC,EACD,EAAC,eAAe,EAAE,WAAW,EAAC,CACjC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,SAAiB,EACjB,YAAsB,EACtB,UAAoC,EAAE,EAChC,EAAE;IACR,MAAM,CAAC,aAAa,EAAE,CAAC,gBAAgB,EAAE,EAAC,SAAS,EAAE,YAAY,EAAC,CAAC,CAAC;IACpE,OAAO,QAAQ,CAAW,WAAW,SAAS,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,SAAiB,EACjB,eAA0B,EACpB,EAAE;IACR,MAAM,CAAC,aAAa,EAAE,CAAC,gBAAgB,EAAE,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC,CAAC;IACvE,QAAQ,CAAY,WAAW,SAAS,EAAE,EAAE,eAAe,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAI7C,SAAiB,EACjB,eAA0B,EACR,EAAE;IACpB,MAAM,CAAC,aAAa,EAAE,CAAC,gBAAgB,EAAE,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC,CAAC;IAEvE,MAAM,gBAAgB,GAAG,WAAW,SAAS,EAAE,CAAC;IAChD,MAAM,iBAAiB,GAAG,YAAY,SAAS,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC3E,MAAM,aAAa,GAAG,SAAS,CAAU,iBAAiB,CAAC,CAAC;IAE5D,QAAQ,CACJ,gBAAgB,EAChB;QACE,GAAG,eAAe;QAClB,iBAAiB;KAClB,EACD,EAAC,QAAQ,EAAE,WAAW,EAAC,CAC1B,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC;IACrC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAQ,EAAE;IACpD,MAAM,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAQ,EAAE;IACtD,MAAM,CAAC,aAAa,EAAE,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO;IAC3B,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC,CAAC","sourcesContent":["import {createLogger, globalAlwatr} from '@alwatr/logger';\nimport {requestAnimationFrame} from '@alwatr/util';\n\nimport type {\n DispatchOptions,\n ListenerFunction,\n ListenerObject,\n SubscribeOptions,\n SignalObject,\n ProviderFunction,\n ProviderOptions,\n SignalStorage,\n ListenerSpec,\n} from './type.js';\nimport type {Stringifyable, StringifyableRecord} from '@alwatr/type';\n\nglobalAlwatr.registeredList.push({\n name: '@alwatr/signal',\n version: _ALWATR_VERSION_,\n});\n\n/**\n * Listener `id`\n */\nlet _lastListenerAutoId = 0;\n\nconst debounceTimeout = 5;\n\n/**\n * Signal stack database.\n */\nconst _signalStorage: SignalStorage = {};\n\nexport const logger = createLogger('alwatr/signal');\n\n/**\n * Get signal object by id, If not available, it will create a new signal with default options.\n *\n * Don't use it directly.\n *\n * Example:\n *\n * ```ts\n * const signal = getSignalObject<ContentType>('content-change');\n * signal.disabled = true;\n * ```\n */\nexport const getSignalObject = <T extends Stringifyable>(id: string): SignalObject<T> => {\n let signal = _signalStorage[id] as SignalObject<T> | undefined;\n if (signal == null) {\n signal = _signalStorage[id] = {\n id,\n disabled: false,\n debounced: false,\n listenerList: [],\n };\n }\n return signal;\n};\n\n/**\n * Call all listeners callback of special signal.\n *\n * Used inside dispatch, Don't use it directly.\n */\nexport const _callListeners = <T extends Stringifyable>(signal: SignalObject<T>, detail: T): void => {\n logger.logMethodArgs?.('_callListeners', {signalId: signal.id, signalDetail: detail});\n\n const removeList: ListenerObject<T>[] = [];\n\n for (const listener of signal.listenerList) {\n if (listener.disabled) continue;\n if (listener.once) removeList.push(listener);\n try {\n const ret = listener.callback(detail);\n if (ret instanceof Promise) {\n ret.catch((err) =>\n logger.error('_callListeners', 'call_listener_failed', err, {\n signalId: signal.id,\n }),\n );\n }\n }\n catch (err) {\n logger.error('_callListeners', 'call_listener_failed', err, {\n signalId: signal.id,\n });\n }\n }\n\n removeList.forEach((listener) => unsubscribe(listener));\n};\n\n/**\n * Subscribe new signal listener to a signal, work like addEventListener.\n *\n * Example:\n *\n * ```ts\n * const listener = subscribe<ContentType>('content-change', (content) => console.log(content));\n * // ...\n * unsubscribe(listener);\n * ```\n */\nexport const subscribe = <T extends Stringifyable>(\n signalId: string,\n listenerCallback: ListenerFunction<T>,\n options: Partial<SubscribeOptions> = {},\n): ListenerSpec => {\n options.once ??= false;\n options.disabled ??= false;\n options.receivePrevious ??= 'NextCycle';\n options.priority ??= false;\n\n logger.logMethodArgs?.('subscribe', {signalId, options});\n\n const signal = getSignalObject<T>(signalId);\n\n const listener: ListenerObject<T> = {\n id: ++_lastListenerAutoId,\n signalId: signal.id,\n once: options.once,\n disabled: options.disabled,\n callback: listenerCallback,\n };\n\n const execCallback = signal.detail !== undefined && options.receivePrevious !== 'No' && options.disabled !== true;\n if (execCallback) {\n // Run callback for old dispatch signal\n\n const callback = (): void => {\n try {\n if (signal.detail !== undefined) listenerCallback(signal.detail);\n }\n catch (err) {\n logger.error('subscribe', 'call_signal_callback_failed', err, {\n signalId: signal.id,\n });\n }\n };\n\n if (options.receivePrevious === 'AnimationFrame') {\n requestAnimationFrame(callback);\n }\n else {\n setTimeout(callback, options.receivePrevious === 'NextCycle' ? 0 : debounceTimeout);\n }\n }\n\n // if once then must remove listener after fist callback called! then why push it to listenerList?!\n if (!(execCallback && options.once)) {\n if (options.priority === true) {\n signal.listenerList.unshift(listener);\n }\n else {\n signal.listenerList.push(listener);\n }\n }\n\n return {\n id: listener.id,\n signalId: listener.signalId,\n };\n};\n\n/**\n * Unsubscribe listener from signal, work like removeEventListener.\n *\n * Example:\n *\n * ```ts\n * const listener = subscribe<ContentType>('content-change', (content) => console.log(content));\n * // ...\n * unsubscribe(listener);\n * ```\n */\nexport const unsubscribe = (listener: ListenerSpec): void => {\n logger.logMethodArgs?.('unsubscribe', listener);\n const signal = getSignalObject(listener.signalId);\n const listenerIndex = signal.listenerList.findIndex((_listener) => _listener.id === listener.id);\n if (listenerIndex !== -1) {\n void signal.listenerList.splice(listenerIndex, 1);\n }\n};\n\n/**\n * Unsubscribe all listener from a signal, clear all listeners.\n *\n * Example:\n *\n * ```ts\n * removeAllListeners('content-change');\n * ```\n */\nexport const removeAllListeners = (signalId: string): void => {\n logger.logMethodArgs?.('removeAllListeners', signalId);\n const signal = getSignalObject(signalId);\n if (signal.listenerList.length === 0) return;\n signal.listenerList.length = 0;\n signal.listenerList = [];\n};\n\n/**\n * Dispatch (send) signal to all listeners.\n *\n * Signal detail changed immediately without any debounce.\n *\n * Example:\n *\n * ```ts\n * dispatch<ContentType>('content-change', newContent);\n * ```\n */\nexport const dispatch = <T extends Stringifyable>(\n signalId: string,\n detail: T,\n options: Partial<DispatchOptions> = {},\n): void => {\n options.debounce ??= 'AnimationFrame';\n\n logger.logMethodArgs?.('dispatch', {signalId, detail, options});\n\n const signal = getSignalObject<T>(signalId);\n\n // set detail before check signal.debounced for act like throttle (call listeners with last dispatch detail).\n signal.detail = detail;\n\n if (signal.disabled) return; // signal is disabled.\n\n if (options.debounce === 'No') {\n return _callListeners(signal, detail);\n }\n\n // else\n if (options.debounce === 'NextCycle') {\n setTimeout(_callListeners, 0, signal, detail);\n return;\n }\n\n // else\n if (signal.debounced === true) {\n return; // last dispatch in progress.\n }\n\n // else\n signal.debounced = true;\n const callListeners = (): void => {\n _callListeners(signal, signal.detail ?? detail);\n signal.debounced = false;\n };\n options.debounce === 'AnimationFrame'\n ? requestAnimationFrame(callListeners)\n : setTimeout(callListeners, debounceTimeout);\n};\n\n/**\n * Get current signal detail/value.\n *\n * Return undefined if signal not dispatched before or expired.\n *\n * Example:\n *\n * ```ts\n * const currentContent = getDetail<ContentType>('content-change');\n * if (currentContent === undefined) {\n * // signal not dispatched yet\n * }\n * ```\n */\nexport const getDetail = <T extends Stringifyable>(signalId: string): T | undefined => {\n return getSignalObject<T>(signalId).detail;\n};\n\n/**\n * Get the detail/value of the next received signal.\n *\n * Example:\n *\n * ```ts\n * const newContent = await untilNext<ContentType>('content-change');\n * ```\n */\nexport const untilNext = <T extends Stringifyable>(signalId: string): Promise<T> => {\n return new Promise((resolve) => {\n logger.logMethodArgs?.('untilNext', signalId);\n subscribe<T>(signalId, resolve, {\n once: true,\n priority: true,\n receivePrevious: 'No',\n });\n });\n};\n\n/**\n * Defines the provider of the context signal that will be called when the context requested.\n * Subscribe to `request-signalId`.\n *\n * Example:\n *\n * ```ts\n * setContextProvider('content-change', async (requestParam) => await fetchNewContent(requestParam));\n * ```\n */\nexport const setContextProvider = <TContext extends Stringifyable, TRquest extends Stringifyable = null>(\n signalId: string,\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n signalProvider: ProviderFunction<TRquest, TContext | void>,\n options: Partial<ProviderOptions> = {},\n): void => {\n options.debounce ??= 'AnimationFrame';\n options.receivePrevious ??= 'AnimationFrame';\n logger.logMethodArgs?.('setContextProvider', {signalId, options});\n const requestSignalId = 'request-' + signalId;\n removeAllListeners(requestSignalId);\n subscribe<TRquest>(\n requestSignalId,\n async (argumentObject): Promise<void> => {\n const signalDetail = await signalProvider(argumentObject);\n if (signalDetail !== undefined) {\n dispatch<TContext>(signalId, signalDetail, {debounce: options.debounce});\n }\n },\n {\n receivePrevious: options.receivePrevious,\n },\n );\n};\n\n/**\n * Defines the command and dispatch returned value.\n *\n * Subscribe commandFunction to request-command-signal and dispatch callback-signal with commandFunction return value.\n *\n * Example:\n *\n * ```ts\n * defineCommand<TArgument, TReturn>(\n * 'show-prompt',\n * async (argumentObject) => {\n * return await showPrompt(argumentObject);\n * },\n * );\n * ```\n */\nexport const defineCommand = <TArgument extends StringifyableRecord, TReturn extends Stringifyable>(\n signalId: string,\n signalProvider: ProviderFunction<TArgument & {_callbackSignalId?: string}, TReturn>,\n options: Partial<Pick<ProviderOptions, 'debounce'>> = {},\n): ListenerSpec => {\n options.debounce ??= 'AnimationFrame';\n logger.logMethodArgs?.('defineCommand', {commandId: signalId, options});\n const requestSignalId = 'request-' + signalId;\n removeAllListeners(requestSignalId);\n return subscribe<TArgument & {_callbackSignalId?: string}>(\n requestSignalId,\n async (argumentObject) => {\n clearDetail(requestSignalId); // clean argumentObject from memory\n if (argumentObject._callbackSignalId == null) {\n signalProvider(argumentObject);\n }\n else {\n // prettier-ignore\n dispatch<TReturn>(\n argumentObject._callbackSignalId,\n await signalProvider(argumentObject),\n {debounce: options.debounce},\n );\n }\n },\n {receivePrevious: 'NextCycle'},\n );\n};\n\n/**\n * Dispatch request context signal with requestParam as detail.\n *\n * Example:\n *\n * ```ts\n * requestContext<RequestParamType>('content-change', {foo: 'bar'});\n * const newContent = await untilNext<ContentType>('content-change');\n * ```\n */\nexport const requestContext = <TRequest extends Stringifyable>(\n contextId: string,\n requestParam: TRequest,\n options: Partial<DispatchOptions> = {},\n): void => {\n logger.logMethodArgs?.('requestContext', {contextId, requestParam});\n return dispatch<TRequest>(`request-${contextId}`, requestParam, options);\n};\n\n/**\n * Dispatch request command signal with commandArgument as detail.\n *\n * Example:\n *\n * ```ts\n * requestCommand<ArgumentType>('show-dialog', {foo: 'bar'});\n * ```\n */\nexport const requestCommand = <TArgument extends StringifyableRecord>(\n commandId: string,\n commandArgument: TArgument,\n): void => {\n logger.logMethodArgs?.('requestCommand', {commandId, commandArgument});\n dispatch<TArgument>(`request-${commandId}`, commandArgument, {debounce: 'No'});\n};\n\n/**\n * Dispatch request command signal with commandArgument as detail and return untilNext of callback signal.\n *\n * Request command and wait for answer.\n *\n * Example:\n *\n * ```ts\n * const response = await requestCommandWithResponse<ArgumentType, ReturnType>('show-dialog', {foo: 'bar'});\n * ```\n */\nexport const requestCommandWithResponse = async <\n TArgument extends StringifyableRecord,\n TReturn extends Stringifyable\n>(\n commandId: string,\n commandArgument: TArgument,\n): Promise<TReturn> => {\n logger.logMethodArgs?.('requestCommand', {commandId, commandArgument});\n\n const _requestSignalId = `request-${commandId}`;\n const _callbackSignalId = `callback-${commandId}-${++_lastListenerAutoId}`;\n const untilCallback = untilNext<TReturn>(_callbackSignalId);\n\n dispatch<TArgument & {_callbackSignalId: string}>(\n _requestSignalId,\n {\n ...commandArgument,\n _callbackSignalId,\n },\n {debounce: 'NextCycle'},\n );\n\n const response = await untilCallback;\n destroySignal(_callbackSignalId);\n return response;\n};\n\n/**\n * Clear current signal detail without dispatch new signal.\n *\n * new subscriber options.receivePrevious not work until new signal\n *\n * Example:\n *\n * ```ts\n * clearDetail('product-list');\n * ```\n */\nexport const clearDetail = (signalId: string): void => {\n logger.logMethodArgs?.('expire', signalId);\n const signal = getSignalObject(signalId);\n delete signal.detail;\n};\n\n/**\n * Delete signal object with detail and listeners and options.\n *\n * new subscriber options.receivePrevious not work until new signal\n *\n * Example:\n *\n * ```ts\n * destroySignal('product-list');\n * ```\n */\nexport const destroySignal = (signalId: string): void => {\n logger.logMethodArgs?.('destroySignal', signalId);\n const signal = _signalStorage[signalId];\n if (signal == null) return;\n signal.listenerList.length = 0;\n delete _signalStorage[signalId];\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alwatr/signal",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Elegant powerful event system for handle global signals and states written in tiny TypeScript module.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"signal",
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"url": "https://github.com/AliMD/alwatr/issues"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@alwatr/logger": "^1.0
|
|
33
|
-
"@alwatr/type": "^1.0
|
|
34
|
-
"@alwatr/util": "^1.0
|
|
35
|
-
"tslib": "^2.
|
|
32
|
+
"@alwatr/logger": "^1.1.0",
|
|
33
|
+
"@alwatr/type": "^1.1.0",
|
|
34
|
+
"@alwatr/util": "^1.1.0",
|
|
35
|
+
"tslib": "^2.6.2"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "e5c3bcb9d4f391a5a94d1469c5d31cbcd102c90b"
|
|
38
38
|
}
|
|
@@ -37,7 +37,7 @@ export const requestableContextConsumer = {
|
|
|
37
37
|
* TODO: update me
|
|
38
38
|
* ```
|
|
39
39
|
*/
|
|
40
|
-
getValue: () =>
|
|
40
|
+
getValue: () => getDetail(contextId) ?? { state: 'initial' },
|
|
41
41
|
/**
|
|
42
42
|
* Send new context request to the provider.
|
|
43
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestable-context-consumer.js","sourceRoot":"","sources":["src/requestable-context-consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,WAAW,CAAC;AAKpD;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,eAAe;IAElB;;;;;;;;;OASG;IACH,OAAO,EAAE,cAAc;IAEvB;;;;;;;;OAQG;IACH,IAAI,EAAE,CAA8E,SAAiB,EAAE,EAAE,CAAA,CAAC;QACxG,GAAG,eAAe,CAAC,IAAI,CAAsC,SAAS,CAAC;QAEvE;;;;;;;;;WASG;QACH,QAAQ,EAAE,GAAwC,EAAE,
|
|
1
|
+
{"version":3,"file":"requestable-context-consumer.js","sourceRoot":"","sources":["src/requestable-context-consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,WAAW,CAAC;AAKpD;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,eAAe;IAElB;;;;;;;;;OASG;IACH,OAAO,EAAE,cAAc;IAEvB;;;;;;;;OAQG;IACH,IAAI,EAAE,CAA8E,SAAiB,EAAE,EAAE,CAAA,CAAC;QACxG,GAAG,eAAe,CAAC,IAAI,CAAsC,SAAS,CAAC;QAEvE;;;;;;;;;WASG;QACH,QAAQ,EAAE,GAAwC,EAAE,CAClD,SAAS,CAAsC,SAAS,CAAC,IAAI,EAAC,KAAK,EAAE,SAAS,EAAC;QAEjF;;;;;;;;;WASG;QACH,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CACI;KACvC,CAAA;CACH,CAAC","sourcesContent":["import {contextConsumer} from './context-consumer.js';\nimport {getDetail, requestContext} from './core.js';\nimport {RequestableContext} from './type.js';\n\nimport type {Stringifyable, OmitFirstParam} from '@alwatr/type';\n\n/**\n * Requestable context consumer interface.\n */\nexport const requestableContextConsumer = {\n ...contextConsumer,\n\n /**\n * Send new context request to the provider.\n *\n * Example:\n *\n * ```ts\n * requestableContextConsumer.request<RequestParamType>('product-list', {foo: 'bar'});\n * TODO: update me\n * ```\n */\n request: requestContext,\n\n /**\n * Bind this interface to special context.\n *\n * Example:\n *\n * ```ts\n * const productListConsumer = requestableContextConsumer.bind<ProductListType>('product-list');\n * ```\n */\n bind: <TContextContent extends Stringifyable, TRquest extends Stringifyable = null>(contextId: string) =>({\n ...contextConsumer.bind<RequestableContext<TContextContent>>(contextId),\n\n /**\n * Get context value.\n *\n * Example:\n *\n * ```ts\n * const currentProductList = productListConsumer.getValue();\n * TODO: update me\n * ```\n */\n getValue: (): RequestableContext<TContextContent> =>\n getDetail<RequestableContext<TContextContent>>(contextId) ?? {state: 'initial'},\n\n /**\n * Send new context request to the provider.\n *\n * Example:\n *\n * ```ts\n * productListConsumer.request({foo: 'bar'});\n * TODO: update me\n * ```\n */\n request: requestContext.bind(null, contextId) as\n OmitFirstParam<typeof requestContext<TRquest>>,\n } as const),\n} as const;\n"]}
|
|
@@ -43,7 +43,7 @@ export const requestableContextProvider = {
|
|
|
43
43
|
* TODO: update me
|
|
44
44
|
* ```
|
|
45
45
|
*/
|
|
46
|
-
getValue: () =>
|
|
46
|
+
getValue: () => getDetail(contextId) ?? { state: 'initial' },
|
|
47
47
|
/**
|
|
48
48
|
* Defines the provider of the context signal that will be called when the context requested.
|
|
49
49
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestable-context-provider.js","sourceRoot":"","sources":["src/requestable-context-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAC,SAAS,EAAE,kBAAkB,EAAC,MAAM,WAAW,CAAC;AAKxD;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,eAAe;IAElB;;;;;;;;;;;;;;;OAeG;IACH,WAAW,EAAE,kBAAkB;IAE/B;;;;;;;;OAQG;IACH,IAAI,EAAE,CAA8E,SAAiB,EAAE,EAAE,CAAA,CAAC;QACxG,GAAG,eAAe,CAAC,IAAI,CAAsC,SAAS,CAAC;QAEvE;;;;;;;;;WASG;QACH,QAAQ,EAAE,GAAwC,EAAE,
|
|
1
|
+
{"version":3,"file":"requestable-context-provider.js","sourceRoot":"","sources":["src/requestable-context-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAC,SAAS,EAAE,kBAAkB,EAAC,MAAM,WAAW,CAAC;AAKxD;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,eAAe;IAElB;;;;;;;;;;;;;;;OAeG;IACH,WAAW,EAAE,kBAAkB;IAE/B;;;;;;;;OAQG;IACH,IAAI,EAAE,CAA8E,SAAiB,EAAE,EAAE,CAAA,CAAC;QACxG,GAAG,eAAe,CAAC,IAAI,CAAsC,SAAS,CAAC;QAEvE;;;;;;;;;WASG;QACH,QAAQ,EAAE,GAAwC,EAAE,CAClD,SAAS,CAAsC,SAAS,CAAC,IAAI,EAAC,KAAK,EAAE,SAAS,EAAC;QAGjF;;;;;;;;;;;;WAYG;QACH,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CACqC;KAChF,CAAA;CACH,CAAC","sourcesContent":["import {contextProvider} from './context-provider.js';\nimport {getDetail, setContextProvider} from './core.js';\nimport {RequestableContext} from './type.js';\n\nimport type {Stringifyable, OmitFirstParam} from '@alwatr/type';\n\n/**\n * Requestable context provider interface.\n */\nexport const requestableContextProvider = {\n ...contextProvider,\n\n /**\n * Defines the provider of the context signal that will be called when the context requested.\n *\n * subscribe to request context signal.\n *\n * Example:\n *\n * ```ts\n * requestableContextProvider.setProvider<ProductListType, RequestParamType>(\n * 'product-list',\n * async (requestParam) => {\n * return await fetchNewProductList(requestParam)\n * },\n * );\n * ```\n */\n setProvider: setContextProvider,\n\n /**\n * Bind this interface to special context.\n *\n * Example:\n *\n * ```ts\n * const productListProvider = requestableContextProvider.bind<ProductListType>('product-list');\n * ```\n */\n bind: <TContextContent extends Stringifyable, TRquest extends Stringifyable = null>(contextId: string) =>({\n ...contextProvider.bind<RequestableContext<TContextContent>>(contextId),\n\n /**\n * Get context value.\n *\n * Example:\n *\n * ```ts\n * const currentProductList = productListConsumer.getValue();\n * TODO: update me\n * ```\n */\n getValue: (): RequestableContext<TContextContent> =>\n getDetail<RequestableContext<TContextContent>>(contextId) ?? {state: 'initial'},\n\n\n /**\n * Defines the provider of the context signal that will be called when the context requested.\n *\n * subscribe to request context signal.\n *\n * Example:\n *\n * ```ts\n * productListProvider.setProvider(async (requestParam) => {\n * return await fetchNewProductList(requestParam)\n * });\n * ```\n */\n setProvider: setContextProvider.bind(null, contextId) as\n OmitFirstParam<typeof setContextProvider<RequestableContext<TContextContent>, TRquest>>,\n } as const),\n} as const;\n"]}
|
package/type.d.ts
CHANGED
|
@@ -76,7 +76,7 @@ export type ProviderFunction<TArgument, TReturn> = (argumentObject: TArgument) =
|
|
|
76
76
|
/**
|
|
77
77
|
* Listener spec.
|
|
78
78
|
*/
|
|
79
|
-
export
|
|
79
|
+
export interface ListenerSpec {
|
|
80
80
|
/**
|
|
81
81
|
* Unique listener id
|
|
82
82
|
*/
|
|
@@ -85,7 +85,7 @@ export type ListenerSpec = {
|
|
|
85
85
|
* Signal id
|
|
86
86
|
*/
|
|
87
87
|
signalId: string;
|
|
88
|
-
}
|
|
88
|
+
}
|
|
89
89
|
/**
|
|
90
90
|
* Signal listeners object in storage.
|
|
91
91
|
*/
|
|
@@ -103,7 +103,7 @@ export type ListenerObject<T extends Stringifyable> = ListenerSpec & {
|
|
|
103
103
|
/**
|
|
104
104
|
* Signal object in storage.
|
|
105
105
|
*/
|
|
106
|
-
export
|
|
106
|
+
export interface SignalObject<T extends Stringifyable> {
|
|
107
107
|
/**
|
|
108
108
|
* Signal id for direct access.
|
|
109
109
|
*/
|
|
@@ -124,8 +124,8 @@ export type SignalObject<T extends Stringifyable> = {
|
|
|
124
124
|
/**
|
|
125
125
|
* Signal listeners list.
|
|
126
126
|
*/
|
|
127
|
-
listenerList:
|
|
128
|
-
}
|
|
127
|
+
listenerList: ListenerObject<T>[];
|
|
128
|
+
}
|
|
129
129
|
/**
|
|
130
130
|
* Signal stack storage.
|
|
131
131
|
*/
|
package/type.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["src/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,WAAW,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;;;OAKG;IACH,eAAe,EAAE,YAAY,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;OAQG;IACH,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,eAAe,EAAE,YAAY,CAAC;IAE9B;;;;;;;;OAQG;IACH,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5F;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,cAAc,EAAE,SAAS,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC;AAExG;;GAEG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["src/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,WAAW,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;;;OAKG;IACH,eAAe,EAAE,YAAY,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;OAQG;IACH,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,eAAe,EAAE,YAAY,CAAC;IAE9B;;;;;;;;OAQG;IACH,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5F;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,cAAc,EAAE,SAAS,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC;AAExG;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,aAAa,IAAI,YAAY,GAAG;IACnE;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,aAAa;IACnD;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC;IAEX;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,CAAC;AAEpF;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,aAAa,IAClD;IACE,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,GACD;IACE,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,CAAC;CACb,GACD;IACE,KAAK,EAAE,UAAU,GAAG,WAAW,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC;CACZ,CAAC"}
|
package/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["src/type.ts"],"names":[],"mappings":"","sourcesContent":["import type {MaybePromise, Stringifyable} from '@alwatr/type';\n\nexport type DebounceType = 'No' | 'NextCycle' | 'AnimationFrame' | 'Timeout';\n\n/**\n * Subscribe options type.\n */\nexport interface SubscribeOptions {\n /**\n * If true, the listener will be called only once.\n * @default false\n */\n once: boolean;\n\n /**\n * If true, the listener will be called before other.\n * @default false\n */\n priority: boolean;\n\n /**\n * If true, the listener will be defined disabled by default.\n *\n * @default false\n */\n disabled: boolean;\n\n /**\n * Calling this listener (callback) with preview signal value (if dispatched before).\n * If Immediate, the listener will be called immediately without any debounce for preview signal.\n *\n * @default `NextCycle`\n */\n receivePrevious: DebounceType;\n}\n\n/**\n * dispatchSignal options type\n */\nexport interface DispatchOptions {\n /**\n * If 'AnimationFrame' or 'Timeout', the dispatch will be debounced (single dispatch for all changes).\n *\n * If 'No' or 'NextCycle', every signal is matter and count without debounced (every changes dispatched).\n *\n * tips: debounce work like throttle this means listeners call with latest dispatch value.\n *\n * @default `AnimationFrame`\n */\n debounce: DebounceType;\n}\n\n/**\n * setSignalProvider options type.\n */\nexport interface ProviderOptions {\n /**\n * Calling signal provider (request signal callback) with preview signal value (if dispatched before).\n * If Immediate, the listener will be called immediately without any debounce for preview signal.\n *\n * @default `NextCycle`\n */\n receivePrevious: DebounceType;\n\n /**\n * If 'AnimationFrame' or 'Timeout', the dispatch will be debounced (single dispatch for all changes).\n *\n * If 'No' or 'NextCycle', every signal is matter and count without debounced (every changes dispatched).\n *\n * tips: debounce work like throttle this means listeners call with latest dispatch value.\n *\n * @default `AnimationFrame`\n */\n debounce: DebounceType;\n}\n\n/**\n * Subscribe callback function.\n */\nexport type ListenerFunction<T extends Stringifyable> = (detail: T) => void | Promise<void>;\n\n/**\n * Command/Context provider/handler function.\n */\nexport type ProviderFunction<TArgument, TReturn> = (argumentObject: TArgument) => MaybePromise<TReturn>;\n\n/**\n * Listener spec.\n */\nexport
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["src/type.ts"],"names":[],"mappings":"","sourcesContent":["import type {MaybePromise, Stringifyable} from '@alwatr/type';\n\nexport type DebounceType = 'No' | 'NextCycle' | 'AnimationFrame' | 'Timeout';\n\n/**\n * Subscribe options type.\n */\nexport interface SubscribeOptions {\n /**\n * If true, the listener will be called only once.\n * @default false\n */\n once: boolean;\n\n /**\n * If true, the listener will be called before other.\n * @default false\n */\n priority: boolean;\n\n /**\n * If true, the listener will be defined disabled by default.\n *\n * @default false\n */\n disabled: boolean;\n\n /**\n * Calling this listener (callback) with preview signal value (if dispatched before).\n * If Immediate, the listener will be called immediately without any debounce for preview signal.\n *\n * @default `NextCycle`\n */\n receivePrevious: DebounceType;\n}\n\n/**\n * dispatchSignal options type\n */\nexport interface DispatchOptions {\n /**\n * If 'AnimationFrame' or 'Timeout', the dispatch will be debounced (single dispatch for all changes).\n *\n * If 'No' or 'NextCycle', every signal is matter and count without debounced (every changes dispatched).\n *\n * tips: debounce work like throttle this means listeners call with latest dispatch value.\n *\n * @default `AnimationFrame`\n */\n debounce: DebounceType;\n}\n\n/**\n * setSignalProvider options type.\n */\nexport interface ProviderOptions {\n /**\n * Calling signal provider (request signal callback) with preview signal value (if dispatched before).\n * If Immediate, the listener will be called immediately without any debounce for preview signal.\n *\n * @default `NextCycle`\n */\n receivePrevious: DebounceType;\n\n /**\n * If 'AnimationFrame' or 'Timeout', the dispatch will be debounced (single dispatch for all changes).\n *\n * If 'No' or 'NextCycle', every signal is matter and count without debounced (every changes dispatched).\n *\n * tips: debounce work like throttle this means listeners call with latest dispatch value.\n *\n * @default `AnimationFrame`\n */\n debounce: DebounceType;\n}\n\n/**\n * Subscribe callback function.\n */\nexport type ListenerFunction<T extends Stringifyable> = (detail: T) => void | Promise<void>;\n\n/**\n * Command/Context provider/handler function.\n */\nexport type ProviderFunction<TArgument, TReturn> = (argumentObject: TArgument) => MaybePromise<TReturn>;\n\n/**\n * Listener spec.\n */\nexport interface ListenerSpec {\n /**\n * Unique listener id\n */\n id: number;\n\n /**\n * Signal id\n */\n signalId: string;\n}\n\n/**\n * Signal listeners object in storage.\n */\nexport type ListenerObject<T extends Stringifyable> = ListenerSpec & {\n /**\n * If true, the listener will be called only once and removed automatically after first call\n */\n once: boolean;\n\n /**\n * If true, the listener will be disabled.\n */\n disabled: boolean;\n\n callback: ListenerFunction<T>;\n};\n\n/**\n * Signal object in storage.\n */\nexport interface SignalObject<T extends Stringifyable> {\n /**\n * Signal id for direct access.\n */\n id: string;\n\n /**\n * Last dispatched detail.\n */\n detail?: T;\n\n /**\n * If true, the signal is disabled.\n */\n disabled: boolean;\n\n /**\n * Dispatches debounced (delayed).\n * Internal use case for debounce dispatch signal.\n */\n debounced: boolean;\n\n /**\n * Signal listeners list.\n */\n listenerList: ListenerObject<T>[];\n}\n\n/**\n * Signal stack storage.\n */\nexport type SignalStorage = Record<string, SignalObject<Stringifyable> | undefined>;\n\n/**\n * Requestable context value type.\n */\nexport type RequestableContext<T extends Stringifyable> =\n | {\n state: 'initial' | 'pending';\n content?: never;\n }\n | {\n state: 'error';\n content?: T; // last data\n }\n | {\n state: 'complete' | 'reloading';\n content: T;\n };\n"]}
|