@alwatr/signal 0.27.0 → 0.29.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 +44 -0
- package/README.md +0 -221
- package/command-handler.d.ts +25 -0
- package/command-handler.d.ts.map +1 -0
- package/command-handler.js +24 -0
- package/command-handler.js.map +1 -0
- package/command-trigger.d.ts +64 -0
- package/command-trigger.d.ts.map +1 -0
- package/command-trigger.js +64 -0
- package/command-trigger.js.map +1 -0
- package/context-consumer.d.ts +124 -0
- package/context-consumer.d.ts.map +1 -0
- package/context-consumer.js +124 -0
- package/context-consumer.js.map +1 -0
- package/context-provider.d.ts +100 -0
- package/context-provider.d.ts.map +1 -0
- package/context-provider.js +100 -0
- package/context-provider.js.map +1 -0
- package/core.d.ts +145 -29
- package/core.d.ts.map +1 -1
- package/core.js +286 -110
- package/core.js.map +1 -1
- package/event-listener.d.ts +120 -0
- package/event-listener.d.ts.map +1 -0
- package/event-listener.js +120 -0
- package/event-listener.js.map +1 -0
- package/event-trigger.d.ts +76 -0
- package/event-trigger.d.ts.map +1 -0
- package/event-trigger.js +76 -0
- package/event-trigger.js.map +1 -0
- package/index.d.ts +10 -0
- package/index.d.ts.map +1 -0
- package/index.js +17 -0
- package/index.js.map +1 -0
- package/package.json +6 -9
- package/requestable-context-consumer.d.ts +49 -0
- package/requestable-context-consumer.d.ts.map +1 -0
- package/requestable-context-consumer.js +43 -0
- package/requestable-context-consumer.js.map +1 -0
- package/requestable-context-provider.d.ts +56 -0
- package/requestable-context-provider.d.ts.map +1 -0
- package/requestable-context-provider.js +52 -0
- package/requestable-context-provider.js.map +1 -0
- package/type.d.ts +47 -49
- package/type.d.ts.map +1 -1
- package/type.js.map +1 -1
- package/signal.d.ts +0 -191
- package/signal.d.ts.map +0 -1
- package/signal.js +0 -249
- package/signal.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,50 @@
|
|
|
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
|
+
# [0.29.0](https://github.com/AliMD/alwatr/compare/v0.28.0...v0.29.0) (2023-02-10)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **signal/core:** \_getSignalObject ([1374188](https://github.com/AliMD/alwatr/commit/1374188bdc7e689ded11d04bf4588a1162cc6d86))
|
|
11
|
+
- **signal:** alert [#1455](https://github.com/AliMD/alwatr/issues/1455) ([203307d](https://github.com/AliMD/alwatr/commit/203307df308a12e6c38cb9e0e2301b2015b6ff45))
|
|
12
|
+
- **signal:** clean old interfaces ([b2987ad](https://github.com/AliMD/alwatr/commit/b2987add7bfe0cf609fa355403fb9fb5de3f6b8a))
|
|
13
|
+
- **signal:** export all interfaces ([8704eac](https://github.com/AliMD/alwatr/commit/8704eac6ae7a8a45e77c24ef5e602e36af3fd21e))
|
|
14
|
+
- **signal:** export listeners ([fb05bfb](https://github.com/AliMD/alwatr/commit/fb05bfb9b7eb30427442783677ce1d4da5401160))
|
|
15
|
+
- **signal:** import types ([cc0b88b](https://github.com/AliMD/alwatr/commit/cc0b88be420b1fe057a8640bbffb1af3bf327cef))
|
|
16
|
+
- **signal:** interface bind type ([7b6c820](https://github.com/AliMD/alwatr/commit/7b6c820da2ba216f36e089bf79bdeccf208df3b1))
|
|
17
|
+
- **signal:** reported issues ([75f688f](https://github.com/AliMD/alwatr/commit/75f688faf96a056a256603d05276f5731db86aee))
|
|
18
|
+
- **signal:** TSignal on SignalControllerInterface ([ac42b7c](https://github.com/AliMD/alwatr/commit/ac42b7c7023549e8dd07cd3d9e189f356ffa06ee))
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
- **signal-manager:** enhance provider, docs ([c4583a3](https://github.com/AliMD/alwatr/commit/c4583a3b0fcbf38b5e426aaa2bc6e0f52ccac5fd))
|
|
23
|
+
- **signal:** alias in SignalInterface & BoundSignalInterface ([053030b](https://github.com/AliMD/alwatr/commit/053030b96c09d474794f32327d892f1d3690656c))
|
|
24
|
+
- **signal:** bind signal ([de49a13](https://github.com/AliMD/alwatr/commit/de49a13eaffce31660849dfc63285d97e9098c0c))
|
|
25
|
+
- **signal:** command handler/provider interface ([3d23683](https://github.com/AliMD/alwatr/commit/3d236837e13d8cfdcd44a1570bdc9659f48e7f47))
|
|
26
|
+
- **signal:** command signals ([98c1d90](https://github.com/AliMD/alwatr/commit/98c1d90978329e4c5c584e19edb1aaa365632162))
|
|
27
|
+
- **signal:** command trigger interface ([dda9466](https://github.com/AliMD/alwatr/commit/dda94666d9e8e490fea26038044df0e67c203583))
|
|
28
|
+
- **signal:** commandSignal ([5a0d7e5](https://github.com/AliMD/alwatr/commit/5a0d7e5498087620d28548ea5d90036a7b17483a))
|
|
29
|
+
- **signal:** context prover and consumer ([081a51a](https://github.com/AliMD/alwatr/commit/081a51a1ee88e66ebbcd0c58186c00a6aa9e1032))
|
|
30
|
+
- **signal:** contextProvider.expire ([7d0ce93](https://github.com/AliMD/alwatr/commit/7d0ce937f0eadcd9019e6047fbe07aa1a3b579a7))
|
|
31
|
+
- **signal:** event listener interface ([4ca4079](https://github.com/AliMD/alwatr/commit/4ca407938d444027cdbd435173c875fdd9ce8e28))
|
|
32
|
+
- **signal:** event trigger interface ([9b90597](https://github.com/AliMD/alwatr/commit/9b905979a5065640981433ec7d120ba2494966bb))
|
|
33
|
+
- **signal:** new contextConsumer interface ([9ee4a62](https://github.com/AliMD/alwatr/commit/9ee4a624211adb66d9c3d180470cca44ed7df382))
|
|
34
|
+
- **signal:** new contextProvider interface ([e5d29eb](https://github.com/AliMD/alwatr/commit/e5d29ebaa75d71bb5a87bedddb2be7600e68b210))
|
|
35
|
+
- **signal:** new manager interface ([f028306](https://github.com/AliMD/alwatr/commit/f028306f4d7932df65a1bbeade0d29377a370e2e))
|
|
36
|
+
- **signal:** new requestable context consumer interface ([bf6845f](https://github.com/AliMD/alwatr/commit/bf6845f35a98bb63bcfa42196c2f977d64aea59e))
|
|
37
|
+
- **signal:** new requestable context provider interface ([2c8d576](https://github.com/AliMD/alwatr/commit/2c8d57604dcb07a2831d85d4ef1e262863a5fae8))
|
|
38
|
+
- **signal:** new signal dynamic types ([0f1a38e](https://github.com/AliMD/alwatr/commit/0f1a38e356ab73e4e2e1a8f852585e50e86cff0e))
|
|
39
|
+
- **signal:** new simple api ([eb1e478](https://github.com/AliMD/alwatr/commit/eb1e47892d4478fb6c687f6d15e1a5c204b5666c))
|
|
40
|
+
- **signal:** refactor all generic types with Stringifyable ([bdcef63](https://github.com/AliMD/alwatr/commit/bdcef632c81fa5e7c7ae595a7a77092c53821850))
|
|
41
|
+
- **signal:** separate request command with response ([47a779e](https://github.com/AliMD/alwatr/commit/47a779e9a814d5d6a388f1a3e94c23e7fb977dce))
|
|
42
|
+
- **signal:** signal.request ([d791b3e](https://github.com/AliMD/alwatr/commit/d791b3eef846697020b76bfecfbf25a3e31eb3a5))
|
|
43
|
+
- **signal:** signal.untilNext ([9df78c0](https://github.com/AliMD/alwatr/commit/9df78c03dea243b467504fdf422388ab9d2b5660))
|
|
44
|
+
- **signal:** signals.expire ([3591efd](https://github.com/AliMD/alwatr/commit/3591efd5e42f7a981814fd59d7189b5066735302))
|
|
45
|
+
|
|
46
|
+
# [0.28.0](https://github.com/AliMD/alwatr/compare/v0.27.0...v0.28.0) (2023-01-20)
|
|
47
|
+
|
|
48
|
+
**Note:** Version bump only for package @alwatr/signal
|
|
49
|
+
|
|
6
50
|
# [0.27.0](https://github.com/AliMD/alwatr/compare/v0.26.0...v0.27.0) (2022-12-29)
|
|
7
51
|
|
|
8
52
|
**Note:** Version bump only for package @alwatr/signal
|
package/README.md
CHANGED
|
@@ -3,224 +3,3 @@
|
|
|
3
3
|
Elegant powerful event system for handle global signals and states written in tiny TypeScript module.
|
|
4
4
|
|
|
5
5
|
Every signal has own value and can be used as a advance **state management** like redux and recoil without the complexities and unnecessary facilities of those libraries.
|
|
6
|
-
|
|
7
|
-
## Example usage
|
|
8
|
-
|
|
9
|
-
### Add your signal name to global `AlwatrSignals` type helper
|
|
10
|
-
|
|
11
|
-
```ts
|
|
12
|
-
declare global {
|
|
13
|
-
/**
|
|
14
|
-
* Global signals value type registry.
|
|
15
|
-
*/
|
|
16
|
-
interface AlwatrSignals {
|
|
17
|
-
readonly 'content-change': Record<string, number>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Global request signal parameters types.
|
|
22
|
-
*/
|
|
23
|
-
interface AlwatrRequestSignals {
|
|
24
|
-
readonly 'content-change': number;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### Dispatch signal with value
|
|
30
|
-
|
|
31
|
-
```ts
|
|
32
|
-
import {SignalInterface} from 'https://esm.run/@alwatr/signal';
|
|
33
|
-
|
|
34
|
-
const contentChangeSignal1 = new SignalInterface('content-change');
|
|
35
|
-
|
|
36
|
-
contentChangeSignal1.dispatch({a: 1, b: 2});
|
|
37
|
-
|
|
38
|
-
contentChangeSignal1.dispatch({a: 2, b: 3});
|
|
39
|
-
|
|
40
|
-
// Multiple dispatch debounced and last value dispatched after an animation frame.
|
|
41
|
-
contentChangeSignal1.dispatch({a: 3, b: 4});
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Receive the signal value
|
|
45
|
-
|
|
46
|
-
```ts
|
|
47
|
-
import {SignalInterface} from 'https://esm.run/@alwatr/signal';
|
|
48
|
-
|
|
49
|
-
const contentChangeSignal2 = new SignalInterface('content-change'); // Same share signal as contentChangeSignal1
|
|
50
|
-
|
|
51
|
-
contentChangeSignal2.addListener((content) => {
|
|
52
|
-
console.log(content); // {a:3, b:4}
|
|
53
|
-
});
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## API
|
|
57
|
-
|
|
58
|
-
### Prepare
|
|
59
|
-
|
|
60
|
-
#### `new SignalInterface(signal-name)`
|
|
61
|
-
|
|
62
|
-
```ts
|
|
63
|
-
import {SignalInterface} from 'https://esm.run/@alwatr/signal';
|
|
64
|
-
|
|
65
|
-
const contentChangeSignal = new SignalInterface('content-change');
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### `name`
|
|
69
|
-
|
|
70
|
-
Get signal name.
|
|
71
|
-
|
|
72
|
-
Example:
|
|
73
|
-
|
|
74
|
-
```ts
|
|
75
|
-
console.log(contentChangeSignal.name); // 'content-change'
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### `value`
|
|
79
|
-
|
|
80
|
-
Get last dispatched signal value or undefined.
|
|
81
|
-
|
|
82
|
-
Example:
|
|
83
|
-
|
|
84
|
-
```ts
|
|
85
|
-
if (contentChangeSignal.dispatched) {
|
|
86
|
-
const content = contentChangeSignal.value!;
|
|
87
|
-
...
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### `dispatched`
|
|
92
|
-
|
|
93
|
-
Check signal dispatched before or not!
|
|
94
|
-
|
|
95
|
-
Example
|
|
96
|
-
|
|
97
|
-
```ts
|
|
98
|
-
if (contentChangeSignal.dispatched) {
|
|
99
|
-
// contentChangeSignal.value exist.
|
|
100
|
-
}
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
### `disabled`
|
|
104
|
-
|
|
105
|
-
Disable signal, all dispatch's ignored (just value updated) and no more listeners will be called.
|
|
106
|
-
|
|
107
|
-
Example:
|
|
108
|
-
|
|
109
|
-
```ts
|
|
110
|
-
contentChangeSignal.disabled = true;
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### `expire()`
|
|
114
|
-
|
|
115
|
-
Expire the signal by clear last dispatched value.
|
|
116
|
-
|
|
117
|
-
dispatched and receivePrevious etc not work until new signal.
|
|
118
|
-
|
|
119
|
-
Example:
|
|
120
|
-
|
|
121
|
-
```ts
|
|
122
|
-
contentChangeSignal.dispatched; // true
|
|
123
|
-
contentChangeSignal.expire();
|
|
124
|
-
contentChangeSignal.value; // undefined
|
|
125
|
-
contentChangeSignal.dispatched; // false
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### `setProvider(provider)`
|
|
129
|
-
|
|
130
|
-
Defines the provider of the signal that will be called when the signal requested (addRequestSignalListener).
|
|
131
|
-
|
|
132
|
-
Example:
|
|
133
|
-
|
|
134
|
-
```ts
|
|
135
|
-
contentChangeSignal.setProvider(async (requestParam) => {
|
|
136
|
-
const content = await fetchNewContent(requestParam);
|
|
137
|
-
if (content != null) {
|
|
138
|
-
return content; // Dispatch signal 'content-change' with content.
|
|
139
|
-
} else {
|
|
140
|
-
// dispatch new signal: 'content-not-found'
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
### `request(requestParam)`
|
|
146
|
-
|
|
147
|
-
Dispatch request signal and wait for answer (wait for new signal dispatched).
|
|
148
|
-
|
|
149
|
-
Resolved with signal value when new signal received (getNextSignalValue).
|
|
150
|
-
|
|
151
|
-
Example:
|
|
152
|
-
|
|
153
|
-
```ts
|
|
154
|
-
// dispatch request signal and wait for answer (wait for NEW signal).
|
|
155
|
-
const newContent = await contentChangeSignal.request({foo: 'bar'});
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### `getNextSignalValue()`
|
|
159
|
-
|
|
160
|
-
Resolved with signal value when new signal received.
|
|
161
|
-
|
|
162
|
-
Example:
|
|
163
|
-
|
|
164
|
-
```ts
|
|
165
|
-
// Wait for NEW signal received.
|
|
166
|
-
const newContent = await contentChangeSignal.getNextSignalValue();
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
### `getSignalValue()`
|
|
170
|
-
|
|
171
|
-
Resolved with signal value when signal is ready.
|
|
172
|
-
|
|
173
|
-
Get signal value from last dispatched signal (if any) or wait for new signal received.
|
|
174
|
-
|
|
175
|
-
Example:
|
|
176
|
-
|
|
177
|
-
```ts
|
|
178
|
-
// get signal value from last dispatched signal (if any) or wait for a new signal to receive
|
|
179
|
-
const content = await contentChangeSignal.getSignalValue();
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### `dispatch(signalValue)`
|
|
183
|
-
|
|
184
|
-
Dispatch signal to all listeners.
|
|
185
|
-
|
|
186
|
-
Example:
|
|
187
|
-
|
|
188
|
-
```ts
|
|
189
|
-
contentChangeSignal.dispatch(content);
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
### `addListener(listener)`
|
|
193
|
-
|
|
194
|
-
Adds a new listener to the signal.
|
|
195
|
-
|
|
196
|
-
Example:
|
|
197
|
-
|
|
198
|
-
```ts
|
|
199
|
-
const listener = contentChangeSignal.addListener((content) => console.log(content));
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
### Listener API Interface
|
|
203
|
-
|
|
204
|
-
#### `listener.disabled`
|
|
205
|
-
|
|
206
|
-
Disable the listener, not called anymore.
|
|
207
|
-
|
|
208
|
-
Example:
|
|
209
|
-
|
|
210
|
-
```ts
|
|
211
|
-
const listener = contentChangeSignal.addListener((content) => console.log(content));
|
|
212
|
-
...
|
|
213
|
-
listener.disabled = true;
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
#### `listener.remove()`
|
|
217
|
-
|
|
218
|
-
Removes a listener from the signal.
|
|
219
|
-
|
|
220
|
-
Example:
|
|
221
|
-
|
|
222
|
-
```ts
|
|
223
|
-
const listener = contentChangeSignal.addListener((content) => console.log(content));
|
|
224
|
-
...
|
|
225
|
-
listener.remove();
|
|
226
|
-
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command handler/define interface.
|
|
3
|
+
*/
|
|
4
|
+
export declare const commandHandler: {
|
|
5
|
+
/**
|
|
6
|
+
* Defines the command and dispatch returned value.
|
|
7
|
+
*
|
|
8
|
+
* Subscribe commandFunction to request-command-signal and dispatch callback-signal with commandFunction return value.
|
|
9
|
+
*
|
|
10
|
+
* Example:
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* commandHandler.define<TArgument, TReturn>(
|
|
14
|
+
* 'show-prompt',
|
|
15
|
+
* async (argumentObject) => {
|
|
16
|
+
* return await showPrompt(argumentObject);
|
|
17
|
+
* },
|
|
18
|
+
* );
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
readonly define: <TArgument extends import("@alwatr/type").StringifyableRecord, TReturn extends import("@alwatr/type").Stringifyable>(signalId: string, signalProvider: import("./type.js").ProviderFunction<TArgument & {
|
|
22
|
+
_callbackSignalId?: string | undefined;
|
|
23
|
+
}, TReturn>, options?: Partial<Pick<import("./type.js").ProviderOptions, "debounce">>) => void;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=command-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["src/command-handler.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;;;;;;;;;;;;;;OAeG;;;;CAEK,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { defineCommand } from './core.js';
|
|
2
|
+
/**
|
|
3
|
+
* Command handler/define interface.
|
|
4
|
+
*/
|
|
5
|
+
export const commandHandler = {
|
|
6
|
+
/**
|
|
7
|
+
* Defines the command and dispatch returned value.
|
|
8
|
+
*
|
|
9
|
+
* Subscribe commandFunction to request-command-signal and dispatch callback-signal with commandFunction return value.
|
|
10
|
+
*
|
|
11
|
+
* Example:
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* commandHandler.define<TArgument, TReturn>(
|
|
15
|
+
* 'show-prompt',
|
|
16
|
+
* async (argumentObject) => {
|
|
17
|
+
* return await showPrompt(argumentObject);
|
|
18
|
+
* },
|
|
19
|
+
* );
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
define: defineCommand,
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=command-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-handler.js","sourceRoot":"","sources":["src/command-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;;;;;;;;;;;;;;;OAeG;IACH,MAAM,EAAE,aAAa;CACb,CAAC","sourcesContent":["import {defineCommand} from './core.js';\n\n/**\n * Command handler/define interface.\n */\nexport const commandHandler = {\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 * commandHandler.define<TArgument, TReturn>(\n * 'show-prompt',\n * async (argumentObject) => {\n * return await showPrompt(argumentObject);\n * },\n * );\n * ```\n */\n define: defineCommand,\n} as const;\n"]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { Stringifyable, StringifyableRecord } from '@alwatr/type';
|
|
2
|
+
/**
|
|
3
|
+
* Command trigger/request interface.
|
|
4
|
+
*/
|
|
5
|
+
export declare const commandTrigger: {
|
|
6
|
+
/**
|
|
7
|
+
* Dispatch request command signal with commandArgument as detail.
|
|
8
|
+
*
|
|
9
|
+
* Example:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* commandTrigger.request<ArgumentType>('show-dialog', {foo: 'bar'});
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
readonly request: <TArgument extends StringifyableRecord>(commandId: string, commandArgument: TArgument) => void;
|
|
16
|
+
/**
|
|
17
|
+
* Dispatch request command signal with commandArgument as detail and return untilNext of callback signal.
|
|
18
|
+
*
|
|
19
|
+
* Request command and wait for answer.
|
|
20
|
+
*
|
|
21
|
+
* Example:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const response = await commandTrigger.requestWithResponse<ArgumentType, ReturnType>('show-dialog', {foo: 'bar'});
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
readonly requestWithResponse: <TArgument_1 extends StringifyableRecord, TReturn extends Stringifyable>(commandId: string, commandArgument: TArgument_1) => Promise<TReturn>;
|
|
28
|
+
/**
|
|
29
|
+
* Bind define command to special command.
|
|
30
|
+
*
|
|
31
|
+
* Example:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* const showDialog = commandTrigger.bind<ArgumentType, ReturnType>('show-dialog');
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
readonly bind: <TArgument_2 extends StringifyableRecord, TReturn_1 extends Stringifyable>(commandId: string) => {
|
|
38
|
+
/**
|
|
39
|
+
* Command signal Id.
|
|
40
|
+
*/
|
|
41
|
+
id: string;
|
|
42
|
+
/**
|
|
43
|
+
* Dispatch request command signal with commandArgument as detail and return untilNext of callback signal.
|
|
44
|
+
*
|
|
45
|
+
* Example:
|
|
46
|
+
*
|
|
47
|
+
* ```ts
|
|
48
|
+
* showDialog.request({foo: 'bar'});
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
request: (commandArgument: TArgument_2) => void;
|
|
52
|
+
/**
|
|
53
|
+
* Dispatch request command signal with commandArgument as detail and return untilNext of callback signal.
|
|
54
|
+
*
|
|
55
|
+
* Example:
|
|
56
|
+
*
|
|
57
|
+
* ```ts
|
|
58
|
+
* const response = await showDialog.requestWithResponse({foo: 'bar'});
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
requestWithResponse: (commandArgument: TArgument_2) => Promise<TReturn_1>;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=command-trigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-trigger.d.ts","sourceRoot":"","sources":["src/command-trigger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,aAAa,EAAE,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAErF;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;;;;;;;OAQG;;IAGH;;;;;;;;;;OAUG;;IAGH;;;;;;;;OAQG;yGACqF,MAAM;QAC5F;;WAEG;;QAGH;;;;;;;;WAQG;;QAIH;;;;;;;;WAQG;;;CAIG,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { requestCommand, requestCommandWithResponse } from './core.js';
|
|
2
|
+
/**
|
|
3
|
+
* Command trigger/request interface.
|
|
4
|
+
*/
|
|
5
|
+
export const commandTrigger = {
|
|
6
|
+
/**
|
|
7
|
+
* Dispatch request command signal with commandArgument as detail.
|
|
8
|
+
*
|
|
9
|
+
* Example:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* commandTrigger.request<ArgumentType>('show-dialog', {foo: 'bar'});
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
request: requestCommand,
|
|
16
|
+
/**
|
|
17
|
+
* Dispatch request command signal with commandArgument as detail and return untilNext of callback signal.
|
|
18
|
+
*
|
|
19
|
+
* Request command and wait for answer.
|
|
20
|
+
*
|
|
21
|
+
* Example:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const response = await commandTrigger.requestWithResponse<ArgumentType, ReturnType>('show-dialog', {foo: 'bar'});
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
requestWithResponse: requestCommandWithResponse,
|
|
28
|
+
/**
|
|
29
|
+
* Bind define command to special command.
|
|
30
|
+
*
|
|
31
|
+
* Example:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* const showDialog = commandTrigger.bind<ArgumentType, ReturnType>('show-dialog');
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
bind: (commandId) => ({
|
|
38
|
+
/**
|
|
39
|
+
* Command signal Id.
|
|
40
|
+
*/
|
|
41
|
+
id: commandId,
|
|
42
|
+
/**
|
|
43
|
+
* Dispatch request command signal with commandArgument as detail and return untilNext of callback signal.
|
|
44
|
+
*
|
|
45
|
+
* Example:
|
|
46
|
+
*
|
|
47
|
+
* ```ts
|
|
48
|
+
* showDialog.request({foo: 'bar'});
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
request: requestCommand.bind(null, commandId),
|
|
52
|
+
/**
|
|
53
|
+
* Dispatch request command signal with commandArgument as detail and return untilNext of callback signal.
|
|
54
|
+
*
|
|
55
|
+
* Example:
|
|
56
|
+
*
|
|
57
|
+
* ```ts
|
|
58
|
+
* const response = await showDialog.requestWithResponse({foo: 'bar'});
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
requestWithResponse: requestCommandWithResponse.bind(null, commandId),
|
|
62
|
+
}),
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=command-trigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-trigger.js","sourceRoot":"","sources":["src/command-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,0BAA0B,EAAC,MAAM,WAAW,CAAC;AAIrE;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;;;;;;;;OAQG;IACH,OAAO,EAAE,cAAc;IAEvB;;;;;;;;;;OAUG;IACH,mBAAmB,EAAE,0BAA0B;IAE/C;;;;;;;;OAQG;IACH,IAAI,EAAE,CAAuE,SAAiB,EAAE,EAAE,CAAA,CAAC;QACjG;;WAEG;QACH,EAAE,EAAE,SAAS;QAEb;;;;;;;;WAQG;QACH,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CACM;QAElD;;;;;;;;WAQG;QACH,mBAAmB,EAAE,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CACG;KACxE,CAAC;CACM,CAAC","sourcesContent":["import {requestCommand, requestCommandWithResponse} from './core.js';\n\nimport type {OmitFirstParam, Stringifyable, StringifyableRecord} from '@alwatr/type';\n\n/**\n * Command trigger/request interface.\n */\nexport const commandTrigger = {\n /**\n * Dispatch request command signal with commandArgument as detail.\n *\n * Example:\n *\n * ```ts\n * commandTrigger.request<ArgumentType>('show-dialog', {foo: 'bar'});\n * ```\n */\n request: requestCommand,\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 commandTrigger.requestWithResponse<ArgumentType, ReturnType>('show-dialog', {foo: 'bar'});\n * ```\n */\n requestWithResponse: requestCommandWithResponse,\n\n /**\n * Bind define command to special command.\n *\n * Example:\n *\n * ```ts\n * const showDialog = commandTrigger.bind<ArgumentType, ReturnType>('show-dialog');\n * ```\n */\n bind: <TArgument extends StringifyableRecord, TReturn extends Stringifyable>(commandId: string) =>({\n /**\n * Command signal Id.\n */\n id: commandId,\n\n /**\n * Dispatch request command signal with commandArgument as detail and return untilNext of callback signal.\n *\n * Example:\n *\n * ```ts\n * showDialog.request({foo: 'bar'});\n * ```\n */\n request: requestCommand.bind(null, commandId) as unknown as\n OmitFirstParam<typeof requestCommand<TArgument>>,\n\n /**\n * Dispatch request command signal with commandArgument as detail and return untilNext of callback signal.\n *\n * Example:\n *\n * ```ts\n * const response = await showDialog.requestWithResponse({foo: 'bar'});\n * ```\n */\n requestWithResponse: requestCommandWithResponse.bind(null, commandId) as unknown as\n OmitFirstParam<typeof requestCommandWithResponse<TArgument, TReturn>>,\n }),\n} as const;\n"]}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import type { Stringifyable } from '@alwatr/type';
|
|
2
|
+
/**
|
|
3
|
+
* Context consumer interface.
|
|
4
|
+
*/
|
|
5
|
+
export declare const contextConsumer: {
|
|
6
|
+
/**
|
|
7
|
+
* Get context value.
|
|
8
|
+
*
|
|
9
|
+
* Return undefined if context not set before or expired.
|
|
10
|
+
*
|
|
11
|
+
* Example:
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* const currentProductList = contextConsumer.getValue<ProductListType>('product-list');
|
|
15
|
+
* if (currentProductList === undefined) {
|
|
16
|
+
* // productList not set before or expired.
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
readonly getValue: <T extends Stringifyable>(signalId: string) => T | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Waits until the context value changes.
|
|
23
|
+
*
|
|
24
|
+
* Example:
|
|
25
|
+
*
|
|
26
|
+
* ```ts
|
|
27
|
+
* const newProductList = await contextConsumer.untilChange<ProductListType>('product-list');
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
readonly untilChange: <T_1 extends Stringifyable>(signalId: string) => Promise<T_1>;
|
|
31
|
+
/**
|
|
32
|
+
* Subscribe to context changes, work like addEventListener.
|
|
33
|
+
*
|
|
34
|
+
* Example:
|
|
35
|
+
*
|
|
36
|
+
* ```ts
|
|
37
|
+
* const listener = contextConsumer.subscribe<ProductListType>('product-list', (productList) => {
|
|
38
|
+
* console.log(productList);
|
|
39
|
+
* });
|
|
40
|
+
* // ...
|
|
41
|
+
* contextConsumer.unsubscribe(listener);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
readonly subscribe: <T_2 extends Stringifyable>(signalId: string, listenerCallback: import("./type.js").ListenerFunction<T_2>, options?: Partial<import("./type.js").SubscribeOptions>) => import("./type.js").ListenerSpec;
|
|
45
|
+
/**
|
|
46
|
+
* Unsubscribe from context changes, work like removeEventListener.
|
|
47
|
+
*
|
|
48
|
+
* Example:
|
|
49
|
+
*
|
|
50
|
+
* ```ts
|
|
51
|
+
* const listener = contextConsumer.subscribe<ProductListType>('product-list', (productList) => {
|
|
52
|
+
* console.log(productList);
|
|
53
|
+
* });
|
|
54
|
+
* // ...
|
|
55
|
+
* contextConsumer.unsubscribe(listener);
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
readonly unsubscribe: (listener: import("./type.js").ListenerSpec) => void;
|
|
59
|
+
/**
|
|
60
|
+
* Bind this interface to special context.
|
|
61
|
+
*
|
|
62
|
+
* Example:
|
|
63
|
+
*
|
|
64
|
+
* ```ts
|
|
65
|
+
* const productListConsumer = contextConsumer.bind<ProductListType>('product-list');
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
readonly bind: <T_3 extends Stringifyable>(contextId: string) => {
|
|
69
|
+
/**
|
|
70
|
+
* Context signal Id.
|
|
71
|
+
*/
|
|
72
|
+
readonly id: string;
|
|
73
|
+
/**
|
|
74
|
+
* Get context value.
|
|
75
|
+
*
|
|
76
|
+
* Return undefined if context not set before or expired.
|
|
77
|
+
*
|
|
78
|
+
* Example:
|
|
79
|
+
*
|
|
80
|
+
* ```ts
|
|
81
|
+
* const currentProductList = productListConsumer.getValue();
|
|
82
|
+
* if (currentProductList === undefined) {
|
|
83
|
+
* // productList not set before or expired.
|
|
84
|
+
* }
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
readonly getValue: () => T_3 | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Waits until the context value changes.
|
|
90
|
+
*
|
|
91
|
+
* Example:
|
|
92
|
+
*
|
|
93
|
+
* ```ts
|
|
94
|
+
* const newProductList = await productListConsumer.untilChange();
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
readonly untilChange: () => Promise<T_3>;
|
|
98
|
+
/**
|
|
99
|
+
* Subscribe to context changes, work like addEventListener.
|
|
100
|
+
*
|
|
101
|
+
* Example:
|
|
102
|
+
*
|
|
103
|
+
* ```ts
|
|
104
|
+
* const listener = productListConsumer.subscribe((productList) => console.log(productList));
|
|
105
|
+
* // ...
|
|
106
|
+
* productListConsumer.unsubscribe(listener);
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
readonly subscribe: (listenerCallback: import("./type.js").ListenerFunction<T_3>, options?: Partial<import("./type.js").SubscribeOptions> | undefined) => import("./type.js").ListenerSpec;
|
|
110
|
+
/**
|
|
111
|
+
* Unsubscribe from context changes, work like removeEventListener.
|
|
112
|
+
*
|
|
113
|
+
* Example:
|
|
114
|
+
*
|
|
115
|
+
* ```ts
|
|
116
|
+
* const listener = productListConsumer.subscribe((productList) => console.log(productList));
|
|
117
|
+
* // ...
|
|
118
|
+
* productListConsumer.unsubscribe(listener);
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
readonly unsubscribe: (listener: import("./type.js").ListenerSpec) => void;
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=context-consumer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-consumer.d.ts","sourceRoot":"","sources":["src/context-consumer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,aAAa,EAAiB,MAAM,cAAc,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B;;;;;;;;;;;;;OAaG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;;;;;;OAYG;;IAGH;;;;;;;;;;;;OAYG;;IAGH;;;;;;;;OAQG;0DACwC,MAAM;QAC/C;;WAEG;;QAGH;;;;;;;;;;;;;WAaG;;QAGH;;;;;;;;WAQG;;QAGH;;;;;;;;;;WAUG;;QAIH;;;;;;;;;;WAUG;;;CAGG,CAAC"}
|