@event-chat/rpc 0.1.18 → 0.1.20
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/dist/core/RPCAction.d.ts +8 -7
- package/dist/core/RPCAction.d.ts.map +1 -1
- package/dist/core/RPCAction.js +66 -32
- package/dist/core/receiptStore.d.ts +10 -0
- package/dist/core/receiptStore.d.ts.map +1 -0
- package/dist/core/receiptStore.js +63 -0
- package/dist/core/registry.d.ts +3 -3
- package/dist/entry/broadcastChannel.d.ts +1 -1
- package/dist/entry/dedicatedWorkerGlobalScope.d.ts +3 -3
- package/dist/entry/serviceWorkerGlobalScope.d.ts +3 -3
- package/dist/entry/serviceWorkerRegistration.d.ts +3 -3
- package/dist/entry/sharedWorker.d.ts +3 -3
- package/dist/entry/sharedWorkerGlobalScope.d.ts +3 -3
- package/dist/entry/webSocket.d.ts +3 -3
- package/dist/entry/window.d.ts +3 -3
- package/dist/entry/worker.d.ts +3 -3
- package/dist/fields.d.ts +15 -2
- package/dist/fields.d.ts.map +1 -1
- package/dist/hooks.d.ts +1 -1
- package/dist/react/RPCProvider.d.ts.map +1 -1
- package/dist/react/RPCProvider.js +6 -1
- package/dist/react/hooks.d.ts +3 -3
- package/dist/transports/BaseTransport.d.ts +2 -2
- package/dist/transports/BaseTransport.d.ts.map +1 -1
- package/dist/transports/BroadcastChannelTransport.d.ts +2 -2
- package/dist/transports/BroadcastChannelTransport.d.ts.map +1 -1
- package/dist/transports/DedicatedWorkerGlobalScopeTransport.d.ts +2 -2
- package/dist/transports/DedicatedWorkerGlobalScopeTransport.d.ts.map +1 -1
- package/dist/transports/ServiceWorkerGlobalScopeTransport.d.ts +3 -2
- package/dist/transports/ServiceWorkerGlobalScopeTransport.d.ts.map +1 -1
- package/dist/transports/ServiceWorkerGlobalScopeTransport.js +10 -2
- package/dist/transports/ServiceWorkerRegistrationTransport.d.ts +4 -5
- package/dist/transports/ServiceWorkerRegistrationTransport.d.ts.map +1 -1
- package/dist/transports/ServiceWorkerRegistrationTransport.js +12 -13
- package/dist/transports/SharedWorkerGlobalScopeTransport.d.ts +2 -2
- package/dist/transports/SharedWorkerGlobalScopeTransport.d.ts.map +1 -1
- package/dist/transports/SharedWorkerTransport.d.ts +2 -2
- package/dist/transports/SharedWorkerTransport.d.ts.map +1 -1
- package/dist/transports/WebSocketTransport.d.ts +2 -2
- package/dist/transports/WebSocketTransport.d.ts.map +1 -1
- package/dist/transports/WebSocketTransport.js +3 -4
- package/dist/transports/WindowTransport.d.ts +2 -2
- package/dist/transports/WindowTransport.d.ts.map +1 -1
- package/dist/transports/WorkerTransport.d.ts +2 -2
- package/dist/transports/WorkerTransport.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/core/RPCAction.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { IframeSerializeOptions, Transport } from '../fields';
|
|
1
|
+
import { IframeSerializeOptions, MessageItem, Transport } from '../fields';
|
|
2
2
|
declare const WINDOW_NAME = "[object Window]";
|
|
3
3
|
declare class RPCAction {
|
|
4
4
|
private _target;
|
|
5
5
|
private _brodcastListeners;
|
|
6
|
+
private _brodcastRecord;
|
|
6
7
|
private _handlers;
|
|
7
8
|
private _heartbeatTimer;
|
|
9
|
+
private _requestId;
|
|
8
10
|
private _isConnected;
|
|
9
11
|
private _lastHeartbeat;
|
|
10
12
|
private _options;
|
|
@@ -12,22 +14,21 @@ declare class RPCAction {
|
|
|
12
14
|
private _boundMessageHandler;
|
|
13
15
|
constructor(_target: Transport<boolean>, options?: RPCOptionsType);
|
|
14
16
|
destroy(): void;
|
|
15
|
-
broadcast<T>(options?: Omit<RequestOptions<T>, 'retry'>):
|
|
17
|
+
broadcast<T>(options?: Omit<RequestOptions<T>, 'retry'>): MessageItem;
|
|
16
18
|
config(options: Omit<RPCOptionsType, 'onConnect' | 'onDisconnect'>): void;
|
|
17
19
|
on<T extends ActionFunType>(type: PropertyKey, handler: T): void;
|
|
18
20
|
onBrodcast(listener: BrodcastItem): void;
|
|
19
21
|
request<T = unknown>(type: PropertyKey, options?: RequestOptions<T>): Promise<unknown>;
|
|
20
22
|
private _abort;
|
|
21
|
-
private
|
|
23
|
+
private _baseMessage;
|
|
22
24
|
private _isOriginAllowed;
|
|
23
25
|
private _messageHandler;
|
|
24
26
|
private _startHeartbeat;
|
|
25
27
|
}
|
|
26
28
|
export { WINDOW_NAME };
|
|
27
29
|
export default RPCAction;
|
|
28
|
-
export type RPCOptionsType = {
|
|
30
|
+
export type RPCOptionsType = Pick<MessageItem, 'channel'> & {
|
|
29
31
|
allowedOrigins?: string[];
|
|
30
|
-
channel?: string;
|
|
31
32
|
heartbeatInterval?: number;
|
|
32
33
|
heartbeatTimeout?: number;
|
|
33
34
|
retryTimeout?: number;
|
|
@@ -36,8 +37,8 @@ export type RPCOptionsType = {
|
|
|
36
37
|
onDisconnect?: (destroy?: boolean) => void;
|
|
37
38
|
};
|
|
38
39
|
export type ActionFunType = (payload?: any, info?: MessageInfo) => any;
|
|
39
|
-
export type BrodcastItem = (value: unknown, info?: MessageInfo) => void;
|
|
40
|
-
export type RequestOptions<T = unknown> = IframeSerializeOptions & {
|
|
40
|
+
export type BrodcastItem = (value: unknown, info?: MessageInfo & Pick<MessageItem, 'requestId' | 'sign'>) => void;
|
|
41
|
+
export type RequestOptions<T = unknown> = IframeSerializeOptions & Pick<MessageItem, 'requestId' | 'sign'> & {
|
|
41
42
|
payload?: T;
|
|
42
43
|
retry?: number;
|
|
43
44
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RPCAction.d.ts","sourceRoot":"","sources":["../../src/core/RPCAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"RPCAction.d.ts","sourceRoot":"","sources":["../../src/core/RPCAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAK1E,QAAA,MAAM,WAAW,oBAAoB,CAAA;AAarC,cAAM,SAAS;IAaX,OAAO,CAAC,OAAO;IAZjB,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,oBAAoB,CAAkC;gBAGpD,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE,cAAc;IAe1B,OAAO;IAkBP,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IAmBvD,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,cAAc,CAAC;IAIlE,EAAE,CAAC,CAAC,SAAS,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IAIzD,UAAU,CAAC,QAAQ,EAAE,YAAY;IAIjC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IA8CnE,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,eAAe;IAoFvB,OAAO,CAAC,eAAe;CAuBxB;AAED,OAAO,EAAE,WAAW,EAAE,CAAA;AAEtB,eAAe,SAAS,CAAA;AAExB,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG;IAC1D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CAC3C,CAAA;AAID,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,GAAG,CAAA;AAGtE,MAAM,MAAM,YAAY,GAAG,CACzB,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,KACzD,IAAI,CAAA;AAET,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,sBAAsB,GAC9D,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,GAAG;IACxC,OAAO,CAAC,EAAE,CAAC,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAIH,KAAK,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAA"}
|
package/dist/core/RPCAction.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isKey } from "../utils.js";
|
|
2
|
+
import { receiptStore } from "./receiptStore.js";
|
|
2
3
|
const RPC_SIGN = 'RPCActionSign';
|
|
3
4
|
const WINDOW_NAME = '[object Window]';
|
|
4
5
|
const defaultOptions = {
|
|
@@ -12,8 +13,10 @@ const getOrigin = (url)=>'string' == typeof self?.location?.origin ? new URL(url
|
|
|
12
13
|
class RPCAction {
|
|
13
14
|
_target;
|
|
14
15
|
_brodcastListeners = [];
|
|
16
|
+
_brodcastRecord = [];
|
|
15
17
|
_handlers = {};
|
|
16
18
|
_heartbeatTimer = null;
|
|
19
|
+
_requestId = '';
|
|
17
20
|
_isConnected = false;
|
|
18
21
|
_lastHeartbeat = Date.now();
|
|
19
22
|
_options = {};
|
|
@@ -21,6 +24,7 @@ class RPCAction {
|
|
|
21
24
|
_boundMessageHandler = this._messageHandler.bind(this);
|
|
22
25
|
constructor(_target, options){
|
|
23
26
|
this._target = _target;
|
|
27
|
+
this._requestId = receiptStore.create();
|
|
24
28
|
this._options = {
|
|
25
29
|
...defaultOptions,
|
|
26
30
|
...options,
|
|
@@ -33,23 +37,33 @@ class RPCAction {
|
|
|
33
37
|
clearInterval(this._heartbeatTimer ?? void 0);
|
|
34
38
|
this._target.onremove(this._boundMessageHandler);
|
|
35
39
|
this._abort(true);
|
|
40
|
+
this._brodcastRecord.forEach((brodkey)=>{
|
|
41
|
+
const [sign, requestId] = brodkey.split(':');
|
|
42
|
+
if (sign === this._requestId) receiptStore.minus(requestId);
|
|
43
|
+
});
|
|
44
|
+
receiptStore.minus(this._requestId);
|
|
36
45
|
this._brodcastListeners = [];
|
|
46
|
+
this._brodcastRecord = [];
|
|
37
47
|
this._handlers = {};
|
|
38
48
|
this._heartbeatTimer = null;
|
|
49
|
+
this._requestId = '';
|
|
39
50
|
}
|
|
40
51
|
broadcast(options) {
|
|
41
|
-
const { payload, ...ops } = options ?? {};
|
|
52
|
+
const { payload, sign, requestId = '', ...ops } = options ?? {};
|
|
42
53
|
const { channel } = this._options;
|
|
43
|
-
this.
|
|
44
|
-
__RPC__: RPC_SIGN,
|
|
54
|
+
const info = this._baseMessage({
|
|
45
55
|
broadcast: true,
|
|
46
56
|
kind: 'request',
|
|
57
|
+
requestId: '' === requestId ? receiptStore.create() : requestId,
|
|
47
58
|
channel,
|
|
48
59
|
payload
|
|
49
|
-
}
|
|
60
|
+
});
|
|
61
|
+
if (sign) info.sign = sign;
|
|
62
|
+
this._target.postMessage(info, {
|
|
50
63
|
...ops,
|
|
51
64
|
targetOrigin: ops.targetOrigin ?? self?.location?.origin
|
|
52
65
|
});
|
|
66
|
+
return info;
|
|
53
67
|
}
|
|
54
68
|
config(options) {
|
|
55
69
|
this._options = {
|
|
@@ -68,9 +82,10 @@ class RPCAction {
|
|
|
68
82
|
const { channel, retryTimeout = defaultOptions.retryTimeout, retryTimes = defaultOptions.retryTimes } = this._options;
|
|
69
83
|
return new Promise((resolve, reject)=>{
|
|
70
84
|
if (!this._isConnected) return void reject(new Error(`[RPC] 连接未建立,无法请求:${type.toString()}`));
|
|
71
|
-
const requestId =
|
|
85
|
+
const requestId = receiptStore.create();
|
|
72
86
|
const timer = setTimeout(()=>{
|
|
73
87
|
this._pending.delete(requestId);
|
|
88
|
+
receiptStore.minus(requestId);
|
|
74
89
|
if (retry < retryTimes) resolve(this.request(type, {
|
|
75
90
|
...options,
|
|
76
91
|
retry: retry + 1
|
|
@@ -89,14 +104,14 @@ class RPCAction {
|
|
|
89
104
|
},
|
|
90
105
|
timer
|
|
91
106
|
});
|
|
92
|
-
this.
|
|
93
|
-
__RPC__: RPC_SIGN,
|
|
107
|
+
const info = this._baseMessage({
|
|
94
108
|
kind: 'request',
|
|
95
109
|
channel,
|
|
96
110
|
payload,
|
|
97
111
|
requestId,
|
|
98
112
|
type
|
|
99
|
-
}
|
|
113
|
+
});
|
|
114
|
+
this._target.postMessage(info, {
|
|
100
115
|
...ops,
|
|
101
116
|
targetOrigin: ops.targetOrigin ?? self?.location?.origin
|
|
102
117
|
});
|
|
@@ -105,25 +120,29 @@ class RPCAction {
|
|
|
105
120
|
_abort(destroy) {
|
|
106
121
|
this._isConnected = false;
|
|
107
122
|
this._options?.onDisconnect?.(destroy);
|
|
108
|
-
this._pending.forEach(({ reject, timer })=>{
|
|
123
|
+
this._pending.forEach(({ reject, timer }, requestId)=>{
|
|
109
124
|
clearTimeout(timer);
|
|
125
|
+
receiptStore.minus(requestId);
|
|
110
126
|
reject(new Error('[RPC] 连接已断开,请求已取消'));
|
|
111
127
|
});
|
|
112
128
|
this._pending.clear();
|
|
113
129
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
130
|
+
_baseMessage(data) {
|
|
131
|
+
return {
|
|
132
|
+
...data,
|
|
133
|
+
__RPC__: RPC_SIGN,
|
|
134
|
+
sign: this._requestId
|
|
135
|
+
};
|
|
117
136
|
}
|
|
118
137
|
_isOriginAllowed(origin) {
|
|
119
138
|
return this._options?.allowedOrigins?.some((item)=>'*' === item || getOrigin(item) === getOrigin(origin)) ?? false;
|
|
120
139
|
}
|
|
121
140
|
_messageHandler(event) {
|
|
122
141
|
const { data, origin, ports, source, wait } = event;
|
|
123
|
-
const { __RPC__, broadcast, channel, error, heartbeat, kind, payload, requestId, type } = data ?? {};
|
|
142
|
+
const { __RPC__, broadcast, channel, error, heartbeat, kind, payload, requestId, sign, type } = data ?? {};
|
|
124
143
|
if (__RPC__ !== RPC_SIGN) return;
|
|
125
144
|
if (this._options?.channel !== channel) return;
|
|
126
|
-
if (!this._target.is(source)) return;
|
|
145
|
+
if (!this._target.is(source, data)) return;
|
|
127
146
|
if (this._target.getType() === WINDOW_NAME && !this._isOriginAllowed(origin)) return;
|
|
128
147
|
if (heartbeat) {
|
|
129
148
|
this._lastHeartbeat = Date.now();
|
|
@@ -138,28 +157,46 @@ class RPCAction {
|
|
|
138
157
|
ports,
|
|
139
158
|
source
|
|
140
159
|
};
|
|
141
|
-
if (broadcast)
|
|
160
|
+
if (broadcast) {
|
|
161
|
+
const brodsign = [
|
|
162
|
+
sign,
|
|
163
|
+
requestId
|
|
164
|
+
].filter(Boolean);
|
|
165
|
+
const brodkey = brodsign.join(':');
|
|
166
|
+
if (2 === brodsign.length && !this._brodcastRecord.includes(brodkey)) {
|
|
167
|
+
this._brodcastRecord.push(brodkey);
|
|
168
|
+
this._brodcastListeners.forEach((listener)=>listener(payload, {
|
|
169
|
+
...info,
|
|
170
|
+
requestId,
|
|
171
|
+
sign
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
142
176
|
const pending = requestId ? this._pending.get(requestId) : void 0;
|
|
143
177
|
if (requestId && pending) {
|
|
144
178
|
const { resolve, reject } = pending;
|
|
145
179
|
this._pending.delete(requestId);
|
|
180
|
+
receiptStore.minus(requestId);
|
|
146
181
|
if (void 0 !== error) reject(new Error(error));
|
|
147
182
|
else resolve(payload);
|
|
148
183
|
return;
|
|
149
184
|
}
|
|
150
185
|
if ('request' !== kind) return;
|
|
151
186
|
const handler = type && isKey(type, this._handlers) ? this._handlers[type] : void 0;
|
|
187
|
+
const base = this._baseMessage({
|
|
188
|
+
kind: 'response',
|
|
189
|
+
channel,
|
|
190
|
+
requestId,
|
|
191
|
+
type
|
|
192
|
+
});
|
|
152
193
|
if (handler) Promise.resolve().then(()=>{
|
|
153
194
|
const result = handler(payload, info);
|
|
154
195
|
return result;
|
|
155
196
|
}).then((result)=>{
|
|
156
197
|
this._target.postMessage({
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
payload: result,
|
|
160
|
-
channel,
|
|
161
|
-
requestId,
|
|
162
|
-
type
|
|
198
|
+
...base,
|
|
199
|
+
payload: result
|
|
163
200
|
}, {
|
|
164
201
|
targetOrigin: origin
|
|
165
202
|
});
|
|
@@ -167,12 +204,9 @@ class RPCAction {
|
|
|
167
204
|
}).catch((err)=>{
|
|
168
205
|
const message = err instanceof Error ? err.message : '[RPC] 处理消息时发生错误';
|
|
169
206
|
this._target.postMessage({
|
|
170
|
-
|
|
207
|
+
...base,
|
|
171
208
|
error: message,
|
|
172
|
-
|
|
173
|
-
payload: '',
|
|
174
|
-
channel,
|
|
175
|
-
requestId
|
|
209
|
+
payload: ''
|
|
176
210
|
}, {
|
|
177
211
|
targetOrigin: origin
|
|
178
212
|
});
|
|
@@ -180,13 +214,13 @@ class RPCAction {
|
|
|
180
214
|
}
|
|
181
215
|
_startHeartbeat() {
|
|
182
216
|
const { channel, heartbeatInterval = defaultOptions.heartbeatInterval, heartbeatTimeout = defaultOptions.heartbeatTimeout } = this._options;
|
|
217
|
+
const info = this._baseMessage({
|
|
218
|
+
heartbeat: true,
|
|
219
|
+
kind: 'request',
|
|
220
|
+
channel
|
|
221
|
+
});
|
|
183
222
|
const intervalLoops = ()=>{
|
|
184
|
-
this._target.postMessage(
|
|
185
|
-
__RPC__: RPC_SIGN,
|
|
186
|
-
heartbeat: true,
|
|
187
|
-
kind: 'request',
|
|
188
|
-
channel
|
|
189
|
-
});
|
|
223
|
+
this._target.postMessage(info);
|
|
190
224
|
if (!this._isConnected) return;
|
|
191
225
|
if (Date.now() - this._lastHeartbeat > heartbeatTimeout) this._abort();
|
|
192
226
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const receiptStore: {
|
|
2
|
+
create(): string;
|
|
3
|
+
getReceipt(id: string): number;
|
|
4
|
+
getSnapshot(): Record<string, number>;
|
|
5
|
+
increasing(id: string): void;
|
|
6
|
+
has(id: string): boolean;
|
|
7
|
+
minus(id: string): void;
|
|
8
|
+
subscribe(listener: () => void): () => void;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=receiptStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receiptStore.d.ts","sourceRoot":"","sources":["../../src/core/receiptStore.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,YAAY;;mBAUR,MAAM;;mBASN,MAAM;YAMb,MAAM;cAGJ,MAAM;wBAYI,MAAM,IAAI;CAM/B,CAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
let record = {};
|
|
2
|
+
let listeners = [];
|
|
3
|
+
function createId() {
|
|
4
|
+
const id = crypto.randomUUID();
|
|
5
|
+
return receiptStore.has(id) ? createId() : id;
|
|
6
|
+
}
|
|
7
|
+
const emitChange = ()=>{
|
|
8
|
+
for (const listener of listeners)listener();
|
|
9
|
+
};
|
|
10
|
+
const receiptStore = {
|
|
11
|
+
create () {
|
|
12
|
+
const id = createId();
|
|
13
|
+
record = {
|
|
14
|
+
...record,
|
|
15
|
+
[id]: 0
|
|
16
|
+
};
|
|
17
|
+
emitChange();
|
|
18
|
+
return id;
|
|
19
|
+
},
|
|
20
|
+
getReceipt (id) {
|
|
21
|
+
return id in record ? record[id] : -1;
|
|
22
|
+
},
|
|
23
|
+
getSnapshot () {
|
|
24
|
+
return record;
|
|
25
|
+
},
|
|
26
|
+
increasing (id) {
|
|
27
|
+
if (id in record) {
|
|
28
|
+
record = {
|
|
29
|
+
...record,
|
|
30
|
+
[id]: record[id] + 1
|
|
31
|
+
};
|
|
32
|
+
emitChange();
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
has (id) {
|
|
36
|
+
return id in record;
|
|
37
|
+
},
|
|
38
|
+
minus (id) {
|
|
39
|
+
const num = receiptStore.getReceipt(id);
|
|
40
|
+
if (num < 0) return;
|
|
41
|
+
if (num <= 1) {
|
|
42
|
+
const newdata = {
|
|
43
|
+
...record
|
|
44
|
+
};
|
|
45
|
+
Reflect.deleteProperty(newdata, id);
|
|
46
|
+
record = newdata;
|
|
47
|
+
} else record = {
|
|
48
|
+
...record,
|
|
49
|
+
[id]: num - 1
|
|
50
|
+
};
|
|
51
|
+
emitChange();
|
|
52
|
+
},
|
|
53
|
+
subscribe (listener) {
|
|
54
|
+
listeners = [
|
|
55
|
+
...listeners,
|
|
56
|
+
listener
|
|
57
|
+
];
|
|
58
|
+
return ()=>{
|
|
59
|
+
listeners = listeners.filter((l)=>l !== listener);
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
export { receiptStore };
|
package/dist/core/registry.d.ts
CHANGED
|
@@ -5,13 +5,13 @@ import { ActionRecord } from './RPCDecorator';
|
|
|
5
5
|
export declare function cacheImport(item?: TransportItem): Promise<{
|
|
6
6
|
default: new (target: any, options?: FactoryOptions) => Transport<boolean>;
|
|
7
7
|
} | undefined>;
|
|
8
|
-
export declare function createRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: unknown, config?: EntryOptions<EVENT, CONSUME>): Promise<readonly [Readonly<Omit<import("./RPCAction").default, "
|
|
8
|
+
export declare function createRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: unknown, config?: EntryOptions<EVENT, CONSUME>): Promise<readonly [Readonly<Omit<import("./RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<Transport<boolean>, "getType" | "upset"> & {
|
|
9
9
|
request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("./RPCAction").RequestOptions, "payload"> & {
|
|
10
10
|
payload?: never;
|
|
11
11
|
} : StructuredSerializeOptions & {
|
|
12
12
|
targetOrigin?: string;
|
|
13
13
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
14
|
-
} & {
|
|
14
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
15
15
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
16
16
|
retry?: number;
|
|
17
17
|
} & {
|
|
@@ -21,7 +21,7 @@ export declare function createRPC<EVENT extends ActionRecord, CONSUME extends Ac
|
|
|
21
21
|
} : StructuredSerializeOptions & {
|
|
22
22
|
targetOrigin?: string;
|
|
23
23
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
24
|
-
} & {
|
|
24
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
25
25
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
26
26
|
retry?: number;
|
|
27
27
|
} & {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ActionRecord } from '../RPCDecorator';
|
|
2
2
|
import { EntryOptions } from '../transports/fields';
|
|
3
|
-
export declare function createBroadcastChannelRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: BroadcastChannel, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "
|
|
3
|
+
export declare function createBroadcastChannelRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: BroadcastChannel, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<import("../fields").Transport<boolean>, "getType" | "upset"> & {
|
|
4
4
|
request: never;
|
|
5
5
|
}>, () => void];
|
|
6
6
|
//# sourceMappingURL=broadcastChannel.d.ts.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ActionRecord } from '../RPCDecorator';
|
|
2
2
|
import { EntryOptions } from '../transports/fields';
|
|
3
|
-
export declare function createDedicatedWorkerGlobalScopeRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: DedicatedWorkerGlobalScope, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "
|
|
3
|
+
export declare function createDedicatedWorkerGlobalScopeRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: DedicatedWorkerGlobalScope, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<import("../fields").Transport<boolean>, "getType" | "upset"> & {
|
|
4
4
|
request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
|
|
5
5
|
payload?: never;
|
|
6
6
|
} : StructuredSerializeOptions & {
|
|
7
7
|
targetOrigin?: string;
|
|
8
8
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
9
|
-
} & {
|
|
9
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
10
10
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
11
11
|
retry?: number;
|
|
12
12
|
} & {
|
|
@@ -16,7 +16,7 @@ export declare function createDedicatedWorkerGlobalScopeRPC<EVENT extends Action
|
|
|
16
16
|
} : StructuredSerializeOptions & {
|
|
17
17
|
targetOrigin?: string;
|
|
18
18
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
19
|
-
} & {
|
|
19
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
20
20
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
21
21
|
retry?: number;
|
|
22
22
|
} & {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ActionRecord } from '../RPCDecorator';
|
|
2
2
|
import { EntryOptions } from '../transports/fields';
|
|
3
|
-
export declare function createServiceWorkerGlobalScopeRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: ServiceWorkerGlobalScope, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "
|
|
3
|
+
export declare function createServiceWorkerGlobalScopeRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: ServiceWorkerGlobalScope, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<import("../fields").Transport<boolean>, "getType" | "upset"> & {
|
|
4
4
|
request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
|
|
5
5
|
payload?: never;
|
|
6
6
|
} : StructuredSerializeOptions & {
|
|
7
7
|
targetOrigin?: string;
|
|
8
8
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
9
|
-
} & {
|
|
9
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
10
10
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
11
11
|
retry?: number;
|
|
12
12
|
} & {
|
|
@@ -16,7 +16,7 @@ export declare function createServiceWorkerGlobalScopeRPC<EVENT extends ActionRe
|
|
|
16
16
|
} : StructuredSerializeOptions & {
|
|
17
17
|
targetOrigin?: string;
|
|
18
18
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
19
|
-
} & {
|
|
19
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
20
20
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
21
21
|
retry?: number;
|
|
22
22
|
} & {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ActionRecord } from '../RPCDecorator';
|
|
2
2
|
import { EntryOptions } from '../transports/fields';
|
|
3
|
-
export declare function createServiceWorkerRegistrationRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: ServiceWorkerRegistration, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "
|
|
3
|
+
export declare function createServiceWorkerRegistrationRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: ServiceWorkerRegistration, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<import("../fields").Transport<boolean>, "getType" | "upset"> & {
|
|
4
4
|
request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
|
|
5
5
|
payload?: never;
|
|
6
6
|
} : StructuredSerializeOptions & {
|
|
7
7
|
targetOrigin?: string;
|
|
8
8
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
9
|
-
} & {
|
|
9
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
10
10
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
11
11
|
retry?: number;
|
|
12
12
|
} & {
|
|
@@ -16,7 +16,7 @@ export declare function createServiceWorkerRegistrationRPC<EVENT extends ActionR
|
|
|
16
16
|
} : StructuredSerializeOptions & {
|
|
17
17
|
targetOrigin?: string;
|
|
18
18
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
19
|
-
} & {
|
|
19
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
20
20
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
21
21
|
retry?: number;
|
|
22
22
|
} & {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ActionRecord } from '../RPCDecorator';
|
|
2
2
|
import { EntryOptions } from '../transports/fields';
|
|
3
|
-
export declare function createSharedWorkerRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: SharedWorker, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "
|
|
3
|
+
export declare function createSharedWorkerRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: SharedWorker, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<import("../fields").Transport<boolean>, "getType" | "upset"> & {
|
|
4
4
|
request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
|
|
5
5
|
payload?: never;
|
|
6
6
|
} : StructuredSerializeOptions & {
|
|
7
7
|
targetOrigin?: string;
|
|
8
8
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
9
|
-
} & {
|
|
9
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
10
10
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
11
11
|
retry?: number;
|
|
12
12
|
} & {
|
|
@@ -16,7 +16,7 @@ export declare function createSharedWorkerRPC<EVENT extends ActionRecord, CONSUM
|
|
|
16
16
|
} : StructuredSerializeOptions & {
|
|
17
17
|
targetOrigin?: string;
|
|
18
18
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
19
|
-
} & {
|
|
19
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
20
20
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
21
21
|
retry?: number;
|
|
22
22
|
} & {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ActionRecord } from '../RPCDecorator';
|
|
2
2
|
import { EntryOptions } from '../transports/fields';
|
|
3
|
-
export declare function createSharedWorkerGlobalScopeRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: SharedWorkerGlobalScope, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "
|
|
3
|
+
export declare function createSharedWorkerGlobalScopeRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: SharedWorkerGlobalScope, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<import("../fields").Transport<boolean>, "getType" | "upset"> & {
|
|
4
4
|
request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
|
|
5
5
|
payload?: never;
|
|
6
6
|
} : StructuredSerializeOptions & {
|
|
7
7
|
targetOrigin?: string;
|
|
8
8
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
9
|
-
} & {
|
|
9
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
10
10
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
11
11
|
retry?: number;
|
|
12
12
|
} & {
|
|
@@ -16,7 +16,7 @@ export declare function createSharedWorkerGlobalScopeRPC<EVENT extends ActionRec
|
|
|
16
16
|
} : StructuredSerializeOptions & {
|
|
17
17
|
targetOrigin?: string;
|
|
18
18
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
19
|
-
} & {
|
|
19
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
20
20
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
21
21
|
retry?: number;
|
|
22
22
|
} & {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ActionRecord } from '../RPCDecorator';
|
|
2
2
|
import { EntryOptions } from '../transports/fields';
|
|
3
|
-
export declare function createWebSocketRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: WebSocket, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "
|
|
3
|
+
export declare function createWebSocketRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: WebSocket, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<import("../fields").Transport<boolean>, "getType" | "upset"> & {
|
|
4
4
|
request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
|
|
5
5
|
payload?: never;
|
|
6
6
|
} : StructuredSerializeOptions & {
|
|
7
7
|
targetOrigin?: string;
|
|
8
8
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
9
|
-
} & {
|
|
9
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
10
10
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
11
11
|
retry?: number;
|
|
12
12
|
} & {
|
|
@@ -16,7 +16,7 @@ export declare function createWebSocketRPC<EVENT extends ActionRecord, CONSUME e
|
|
|
16
16
|
} : StructuredSerializeOptions & {
|
|
17
17
|
targetOrigin?: string;
|
|
18
18
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
19
|
-
} & {
|
|
19
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
20
20
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
21
21
|
retry?: number;
|
|
22
22
|
} & {
|
package/dist/entry/window.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ActionRecord } from '../RPCDecorator';
|
|
2
2
|
import { EntryOptions } from '../transports/fields';
|
|
3
|
-
export declare function createWindowRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: Window | HTMLIFrameElement, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "
|
|
3
|
+
export declare function createWindowRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: Window | HTMLIFrameElement, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<import("../fields").Transport<boolean>, "getType" | "upset"> & {
|
|
4
4
|
request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
|
|
5
5
|
payload?: never;
|
|
6
6
|
} : StructuredSerializeOptions & {
|
|
7
7
|
targetOrigin?: string;
|
|
8
8
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
9
|
-
} & {
|
|
9
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
10
10
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
11
11
|
retry?: number;
|
|
12
12
|
} & {
|
|
@@ -16,7 +16,7 @@ export declare function createWindowRPC<EVENT extends ActionRecord, CONSUME exte
|
|
|
16
16
|
} : StructuredSerializeOptions & {
|
|
17
17
|
targetOrigin?: string;
|
|
18
18
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
19
|
-
} & {
|
|
19
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
20
20
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
21
21
|
retry?: number;
|
|
22
22
|
} & {
|
package/dist/entry/worker.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ActionRecord } from '../RPCDecorator';
|
|
2
2
|
import { EntryOptions } from '../transports/fields';
|
|
3
|
-
export declare function createWorkerRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: Worker, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "
|
|
3
|
+
export declare function createWorkerRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: Worker, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<import("../fields").Transport<boolean>, "getType" | "upset"> & {
|
|
4
4
|
request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
|
|
5
5
|
payload?: never;
|
|
6
6
|
} : StructuredSerializeOptions & {
|
|
7
7
|
targetOrigin?: string;
|
|
8
8
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
9
|
-
} & {
|
|
9
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
10
10
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
11
11
|
retry?: number;
|
|
12
12
|
} & {
|
|
@@ -16,7 +16,7 @@ export declare function createWorkerRPC<EVENT extends ActionRecord, CONSUME exte
|
|
|
16
16
|
} : StructuredSerializeOptions & {
|
|
17
17
|
targetOrigin?: string;
|
|
18
18
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
19
|
-
} & {
|
|
19
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
20
20
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
21
21
|
retry?: number;
|
|
22
22
|
} & {
|
package/dist/fields.d.ts
CHANGED
|
@@ -16,6 +16,19 @@ export declare const TARGET_TYPE_STRINGS: Readonly<{
|
|
|
16
16
|
export interface FactoryOptions {
|
|
17
17
|
message?: boolean | AddEventListenerOptions;
|
|
18
18
|
}
|
|
19
|
+
export type MessageItem = {
|
|
20
|
+
__RPC__?: string;
|
|
21
|
+
broadcast?: boolean;
|
|
22
|
+
channel?: string;
|
|
23
|
+
error?: string;
|
|
24
|
+
heartbeat?: boolean;
|
|
25
|
+
kind?: 'request' | 'response';
|
|
26
|
+
requestId?: string;
|
|
27
|
+
payload?: unknown;
|
|
28
|
+
scope?: string;
|
|
29
|
+
sign?: string;
|
|
30
|
+
type?: PropertyKey;
|
|
31
|
+
};
|
|
19
32
|
export interface RPCInstanceContextIns {
|
|
20
33
|
brodcastScope?: <T>(data: RequestOptions<T>, options?: ScopeProps) => void;
|
|
21
34
|
mount?: (item: RPCItem, name?: string) => void;
|
|
@@ -23,11 +36,11 @@ export interface RPCInstanceContextIns {
|
|
|
23
36
|
export interface Transport<ONLYBD extends boolean = false> {
|
|
24
37
|
destroy: () => void;
|
|
25
38
|
getType: () => string;
|
|
26
|
-
is: (source: MessageEventSource | null) => boolean;
|
|
39
|
+
is: (source: MessageEventSource | null, message?: MessageItem) => boolean;
|
|
27
40
|
observe: (close?: () => void) => void;
|
|
28
41
|
onmessage: (listener: ListenerType) => void;
|
|
29
42
|
onremove: (listener: ListenerType) => void;
|
|
30
|
-
postMessage: (message:
|
|
43
|
+
postMessage: (message: MessageItem, options?: IframeSerializeOptions) => void;
|
|
31
44
|
upset: (options: FactoryOptions) => void;
|
|
32
45
|
onlyBrod?: ONLYBD;
|
|
33
46
|
}
|
package/dist/fields.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,eAAO,MAAM,kBAAkB,gDAA2C,CAAA;AAC1E,eAAO,MAAM,mBAAmB;;;;;;;;;;EAU9B,CAAA;AAEF,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,CAAA;CAC5C;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;IAC1E,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/C;AAED,MAAM,WAAW,SAAS,CAAC,MAAM,SAAS,OAAO,GAAG,KAAK;IACvD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,EAAE,MAAM,MAAM,CAAA;IACrB,EAAE,EAAE,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,KAAK,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,eAAO,MAAM,kBAAkB,gDAA2C,CAAA;AAC1E,eAAO,MAAM,mBAAmB;;;;;;;;;;EAU9B,CAAA;AAEF,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,CAAA;CAC5C;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;IAG7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;IAC1E,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/C;AAED,MAAM,WAAW,SAAS,CAAC,MAAM,SAAS,OAAO,GAAG,KAAK;IACvD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,EAAE,MAAM,MAAM,CAAA;IACrB,EAAE,EAAE,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAA;IACzE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;IAC3C,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;IAC1C,WAAW,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,KAAK,IAAI,CAAA;IAC7E,KAAK,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,GAAG;IAChE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAA;CAClD,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG;IAC/D,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;CAClB,KACE,IAAI,CAAA;AAET,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;AAEhF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAA;IACpD,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAA;IACpD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA"}
|
package/dist/hooks.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ActionRecord, DecoratorContext } from './RPCDecorator';
|
|
2
2
|
declare const useRPC: <EVENT extends ActionRecord, CONSUME extends ActionRecord>({ init, ...ops }: RPCHooksOptions<EVENT, CONSUME>) => Readonly<{
|
|
3
|
-
rpc: Readonly<Omit<Readonly<Omit<import("./RPCAction").default, "
|
|
3
|
+
rpc: Readonly<Omit<Readonly<Omit<import("./RPCAction").default, "request" | "on"> & Pick<import("./RPCFactory").default<import("./RPCFactory").TargetType>, "getType" | "upset"> & {
|
|
4
4
|
request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("./RPCAction").RequestOptions, "payload"> & {
|
|
5
5
|
payload?: never;
|
|
6
6
|
} : StructuredSerializeOptions & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RPCProvider.d.ts","sourceRoot":"","sources":["../../src/react/RPCProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAkC,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"RPCProvider.d.ts","sourceRoot":"","sources":["../../src/react/RPCProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAkC,MAAM,OAAO,CAAA;AAY7E,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,iBAAiB,CAkDtC,CAAA;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -8,8 +8,13 @@ const RPCProvider = ({ children })=>{
|
|
|
8
8
|
const { exclude, include, typein, typeout } = options ?? {};
|
|
9
9
|
if (list.current.size > 0) {
|
|
10
10
|
const scope = objectValues(TARGET_TYPE_STRINGS).filter((item)=>!exclude?.includes(item)).filter((item)=>!include || include.includes(item)).map(String);
|
|
11
|
+
let result = {};
|
|
11
12
|
list.current.forEach((group, item)=>{
|
|
12
|
-
if ('getType' in item && scope.includes(item.getType()) && !typeout?.includes(group) && (!typein || typein.includes(group))) item.broadcast(
|
|
13
|
+
if ('getType' in item && scope.includes(item.getType()) && !typeout?.includes(group) && (!typein || typein.includes(group))) result = item.broadcast({
|
|
14
|
+
...data,
|
|
15
|
+
requestId: data.requestId ?? result.requestId,
|
|
16
|
+
sign: data.sign ?? result.sign
|
|
17
|
+
});
|
|
13
18
|
});
|
|
14
19
|
}
|
|
15
20
|
}, []);
|
package/dist/react/hooks.d.ts
CHANGED
|
@@ -3,13 +3,13 @@ import { Transport } from '../fields';
|
|
|
3
3
|
import { FactoryOptions } from '../transports/BaseTransport';
|
|
4
4
|
import { EntryOptions } from '../transports/fields';
|
|
5
5
|
declare const useRPC: <TARGET extends TargetInit, EVENT extends ActionRecord, CONSUME extends ActionRecord>(ops: RPCHooksOptions<TARGET, EVENT, CONSUME> | RPCDriveOptions<TARGET, EVENT, CONSUME>) => Readonly<{
|
|
6
|
-
rpc: [[TARGET] extends [null] ? null : TARGET extends BroadcastChannel ? Transport<true> : Transport<false>] extends [null] ? Record<never, never> : Readonly<Omit<import("../core/RPCAction").default, "
|
|
6
|
+
rpc: [[TARGET] extends [null] ? null : TARGET extends BroadcastChannel ? Transport<true> : Transport<false>] extends [null] ? Record<never, never> : Readonly<Omit<import("../core/RPCAction").default, "request" | "destroy" | "on" | "onBrodcast"> & Pick<Transport<boolean>, "getType" | "upset"> & {
|
|
7
7
|
request: (([TARGET] extends [null] ? null : TARGET extends BroadcastChannel ? Transport<true> : Transport<false>) extends infer T ? T extends ([TARGET] extends [null] ? null : TARGET extends BroadcastChannel ? Transport<true> : Transport<false>) ? T extends Transport<infer B extends boolean> ? B : never : never : never) extends true ? never : <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
|
|
8
8
|
payload?: never;
|
|
9
9
|
} : StructuredSerializeOptions & {
|
|
10
10
|
targetOrigin?: string;
|
|
11
11
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
12
|
-
} & {
|
|
12
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
13
13
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
14
14
|
retry?: number;
|
|
15
15
|
} & {
|
|
@@ -19,7 +19,7 @@ declare const useRPC: <TARGET extends TargetInit, EVENT extends ActionRecord, CO
|
|
|
19
19
|
} : StructuredSerializeOptions & {
|
|
20
20
|
targetOrigin?: string;
|
|
21
21
|
transmit?: () => Promise<readonly WindowClient[]>;
|
|
22
|
-
} & {
|
|
22
|
+
} & Pick<import("../fields").MessageItem, "requestId" | "sign"> & {
|
|
23
23
|
payload?: Parameters<CONSUME[K]>[0] | undefined;
|
|
24
24
|
retry?: number;
|
|
25
25
|
} & {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IframeSerializeOptions, ListenerType, Transport } from '../fields';
|
|
1
|
+
import { IframeSerializeOptions, ListenerType, MessageItem, Transport } from '../fields';
|
|
2
2
|
declare abstract class BaseTransport<T extends TargetType = TargetType, ONLYBD extends boolean = false> implements Transport<ONLYBD> {
|
|
3
3
|
protected _target: T;
|
|
4
4
|
protected _options: FactoryOptions;
|
|
@@ -11,7 +11,7 @@ declare abstract class BaseTransport<T extends TargetType = TargetType, ONLYBD e
|
|
|
11
11
|
abstract observe(close?: () => void): void;
|
|
12
12
|
abstract onmessage(listener: ListenerType): void;
|
|
13
13
|
abstract onremove(listener: ListenerType): void;
|
|
14
|
-
abstract postMessage(message:
|
|
14
|
+
abstract postMessage(message: MessageItem, options?: IframeSerializeOptions): void;
|
|
15
15
|
}
|
|
16
16
|
export default BaseTransport;
|
|
17
17
|
export interface FactoryOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTransport.d.ts","sourceRoot":"","sources":["../../src/transports/BaseTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"BaseTransport.d.ts","sourceRoot":"","sources":["../../src/transports/BaseTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAExF,uBAAe,aAAa,CAC1B,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,MAAM,SAAS,OAAO,GAAG,KAAK,CAC9B,YAAW,SAAS,CAAC,MAAM,CAAC;IAG1B,SAAS,CAAC,OAAO,EAAE,CAAC;IACpB,SAAS,CAAC,QAAQ,EAAE,cAAc;IAHpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;gBAEd,OAAO,EAAE,CAAC,EACV,QAAQ,GAAE,cAAmB;IAGzC,OAAO;IAKP,EAAE,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAIpC,KAAK,CAAC,OAAO,EAAE,cAAc;IAM7B,QAAQ,CAAC,OAAO,IAAI,IAAI;IAIxB,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAC1C,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAGhD,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAC/C,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI;CACnF;AAED,eAAe,aAAa,CAAA;AAE5B,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,CAAA;IAE3C,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAA;CACzB;AAID,MAAM,MAAM,UAAU,GAClB,gBAAgB,GAChB,SAAS,GACT,MAAM,GAEN,yBAAyB,GACzB,wBAAwB,GACxB,YAAY,GACZ,uBAAuB,GACvB,MAAM,GACN,0BAA0B,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ListenerType } from '../fields';
|
|
1
|
+
import { ListenerType, MessageItem } from '../fields';
|
|
2
2
|
import BaseTransport from './BaseTransport';
|
|
3
3
|
declare class BroadcastChannelTransport extends BaseTransport<BroadcastChannel, true> {
|
|
4
4
|
readonly onlyBrod = true;
|
|
@@ -6,7 +6,7 @@ declare class BroadcastChannelTransport extends BaseTransport<BroadcastChannel,
|
|
|
6
6
|
observe(): void;
|
|
7
7
|
onmessage(listener: ListenerType): void;
|
|
8
8
|
onremove(listener: ListenerType): void;
|
|
9
|
-
postMessage(message:
|
|
9
|
+
postMessage(message: MessageItem): void;
|
|
10
10
|
}
|
|
11
11
|
export default BroadcastChannelTransport;
|
|
12
12
|
//# sourceMappingURL=BroadcastChannelTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BroadcastChannelTransport.d.ts","sourceRoot":"","sources":["../../src/transports/BroadcastChannelTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"BroadcastChannelTransport.d.ts","sourceRoot":"","sources":["../../src/transports/BroadcastChannelTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAG3C,cAAM,yBAA0B,SAAQ,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC;IAC3E,SAAkB,QAAQ,QAAO;IAEjC,OAAO;IAKP,OAAO,IAAI,IAAI;IAEf,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIvC,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAItC,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;CAGxC;AAED,eAAe,yBAAyB,CAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { IframeSerializeOptions, ListenerType } from '../fields';
|
|
1
|
+
import { IframeSerializeOptions, ListenerType, MessageItem } from '../fields';
|
|
2
2
|
import BaseTransport from './BaseTransport';
|
|
3
3
|
declare class DedicatedWorkerGlobalScopeTransport extends BaseTransport<DedicatedWorkerGlobalScope> {
|
|
4
4
|
destroy(): void;
|
|
5
5
|
observe(): void;
|
|
6
6
|
onmessage(listener: ListenerType): void;
|
|
7
7
|
onremove(listener: ListenerType): void;
|
|
8
|
-
postMessage(message:
|
|
8
|
+
postMessage(message: MessageItem, options?: IframeSerializeOptions): void;
|
|
9
9
|
}
|
|
10
10
|
export default DedicatedWorkerGlobalScopeTransport;
|
|
11
11
|
//# sourceMappingURL=DedicatedWorkerGlobalScopeTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DedicatedWorkerGlobalScopeTransport.d.ts","sourceRoot":"","sources":["../../src/transports/DedicatedWorkerGlobalScopeTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"DedicatedWorkerGlobalScopeTransport.d.ts","sourceRoot":"","sources":["../../src/transports/DedicatedWorkerGlobalScopeTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAG3C,cAAM,mCAAoC,SAAQ,aAAa,CAAC,0BAA0B,CAAC;IAEzF,OAAO;IAKP,OAAO,IAAI,IAAI;IAEf,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIvC,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAItC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI;CAI1E;AAED,eAAe,mCAAmC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IframeSerializeOptions, ListenerType } from '../fields';
|
|
1
|
+
import { IframeSerializeOptions, ListenerType, MessageItem } from '../fields';
|
|
2
2
|
import BaseTransport from './BaseTransport';
|
|
3
3
|
declare class ServiceWorkerGlobalScopeTransport extends BaseTransport<ServiceWorkerGlobalScope> {
|
|
4
4
|
private _onconnect;
|
|
@@ -7,7 +7,8 @@ declare class ServiceWorkerGlobalScopeTransport extends BaseTransport<ServiceWor
|
|
|
7
7
|
observe(): void;
|
|
8
8
|
onmessage(listener: ListenerType): void;
|
|
9
9
|
onremove(): void;
|
|
10
|
-
postMessage(message:
|
|
10
|
+
postMessage(message: MessageItem, options?: IframeSerializeOptions): void;
|
|
11
11
|
}
|
|
12
|
+
export {};
|
|
12
13
|
export default ServiceWorkerGlobalScopeTransport;
|
|
13
14
|
//# sourceMappingURL=ServiceWorkerGlobalScopeTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceWorkerGlobalScopeTransport.d.ts","sourceRoot":"","sources":["../../src/transports/ServiceWorkerGlobalScopeTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"ServiceWorkerGlobalScopeTransport.d.ts","sourceRoot":"","sources":["../../src/transports/ServiceWorkerGlobalScopeTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAK3C,cAAM,iCAAkC,SAAQ,aAAa,CAAC,wBAAwB,CAAC;IACrF,OAAO,CAAC,UAAU,CAAuD;IACzE,OAAO,CAAC,OAAO,CAA8C;IAI7D,OAAO;IAKP,OAAO,IAAI,IAAI;IAIf,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAyBvC,QAAQ,IAAI,IAAI;IAKhB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI;CAuB1E;AAED,OAAO,EAAE,CAAA;AAET,eAAe,iCAAiC,CAAA"}
|
|
@@ -26,11 +26,19 @@ class ServiceWorkerGlobalScopeTransport extends BaseTransport {
|
|
|
26
26
|
if (this._onconnect) this._target.removeEventListener('message', this._onconnect, this._options.message);
|
|
27
27
|
}
|
|
28
28
|
postMessage(message, options) {
|
|
29
|
+
const msg = {
|
|
30
|
+
...message,
|
|
31
|
+
scope: self.registration.scope
|
|
32
|
+
};
|
|
29
33
|
const { transmit, transfer } = options ?? {};
|
|
30
|
-
|
|
34
|
+
const transmitHandle = msg.heartbeat ? ()=>self.clients.matchAll({
|
|
35
|
+
type: 'window',
|
|
36
|
+
includeUncontrolled: true
|
|
37
|
+
}) : transmit;
|
|
38
|
+
if (transmitHandle) transmitHandle().then((clients)=>clients.forEach((client)=>client.postMessage(msg, {
|
|
31
39
|
transfer
|
|
32
40
|
}))).catch(()=>{});
|
|
33
|
-
else this._source?.postMessage(
|
|
41
|
+
else this._source?.postMessage(msg, {
|
|
34
42
|
transfer
|
|
35
43
|
});
|
|
36
44
|
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { IframeSerializeOptions, ListenerType } from '../fields';
|
|
1
|
+
import { IframeSerializeOptions, ListenerType, MessageItem } from '../fields';
|
|
2
2
|
import BaseTransport from './BaseTransport';
|
|
3
3
|
declare class ServiceWorkerRegistrationTransport extends BaseTransport<ServiceWorkerRegistration> {
|
|
4
|
-
private _listener;
|
|
5
4
|
destroy(): void;
|
|
6
|
-
is(source: MessageEventSource | null):
|
|
5
|
+
is(source: MessageEventSource | null, message?: MessageItem): boolean;
|
|
7
6
|
observe(): void;
|
|
8
7
|
onmessage(listener: ListenerType): void;
|
|
9
|
-
onremove(): void;
|
|
10
|
-
postMessage(message:
|
|
8
|
+
onremove(listener: ListenerType): void;
|
|
9
|
+
postMessage(message: MessageItem, options?: IframeSerializeOptions): void;
|
|
11
10
|
}
|
|
12
11
|
export default ServiceWorkerRegistrationTransport;
|
|
13
12
|
//# sourceMappingURL=ServiceWorkerRegistrationTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceWorkerRegistrationTransport.d.ts","sourceRoot":"","sources":["../../src/transports/ServiceWorkerRegistrationTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"ServiceWorkerRegistrationTransport.d.ts","sourceRoot":"","sources":["../../src/transports/ServiceWorkerRegistrationTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAI3C,cAAM,kCAAmC,SAAQ,aAAa,CAAC,yBAAyB,CAAC;IACvF,OAAO;IAIP,EAAE,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,WAAW;IAO3D,OAAO,IAAI,IAAI;IAEf,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIvC,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAItC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI;CAmB1E;AAED,eAAe,kCAAkC,CAAA"}
|
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
import BaseTransport from "./BaseTransport.js";
|
|
2
2
|
class ServiceWorkerRegistrationTransport extends BaseTransport {
|
|
3
|
-
_listener = null;
|
|
4
3
|
destroy() {
|
|
5
4
|
this._target.unregister().catch(()=>{});
|
|
6
5
|
}
|
|
7
|
-
is(source) {
|
|
8
|
-
return source instanceof ServiceWorker;
|
|
6
|
+
is(source, message) {
|
|
7
|
+
return source instanceof ServiceWorker && message?.scope === this._target.scope;
|
|
9
8
|
}
|
|
10
9
|
observe() {}
|
|
11
10
|
onmessage(listener) {
|
|
12
|
-
|
|
13
|
-
navigator.serviceWorker.getRegistrations().then((registrations)=>{
|
|
14
|
-
const matched = registrations.find((registration)=>event.source === registration.active || event.source === registration.installing || event.source === registration.waiting);
|
|
15
|
-
if (Object.is(matched, this._target)) listener(event);
|
|
16
|
-
}).catch(()=>{});
|
|
17
|
-
};
|
|
18
|
-
navigator.serviceWorker.addEventListener('message', this._listener, this._options.message);
|
|
11
|
+
navigator.serviceWorker.addEventListener('message', listener, this._options.message);
|
|
19
12
|
}
|
|
20
|
-
onremove() {
|
|
21
|
-
|
|
13
|
+
onremove(listener) {
|
|
14
|
+
navigator.serviceWorker.removeEventListener('message', listener, this._options.message);
|
|
22
15
|
}
|
|
23
16
|
postMessage(message, options) {
|
|
24
17
|
const { transfer } = options ?? {};
|
|
25
|
-
this._target.active?.postMessage(message, {
|
|
18
|
+
if (message.heartbeat) return void this._target.active?.postMessage(message, {
|
|
26
19
|
transfer
|
|
27
20
|
});
|
|
21
|
+
navigator.serviceWorker.getRegistrations().then((registrations)=>{
|
|
22
|
+
const matched = registrations.find((registration)=>registration.scope === this._target.scope && Boolean(registration.active));
|
|
23
|
+
matched?.active?.postMessage(message, {
|
|
24
|
+
transfer
|
|
25
|
+
});
|
|
26
|
+
}).catch(()=>{});
|
|
28
27
|
}
|
|
29
28
|
}
|
|
30
29
|
const transports_ServiceWorkerRegistrationTransport = ServiceWorkerRegistrationTransport;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IframeSerializeOptions, ListenerType } from '../fields';
|
|
1
|
+
import { IframeSerializeOptions, ListenerType, MessageItem } from '../fields';
|
|
2
2
|
import BaseTransport from './BaseTransport';
|
|
3
3
|
declare class SharedWorkerGlobalScopeTransport extends BaseTransport<SharedWorkerGlobalScope> {
|
|
4
4
|
private _onconnect;
|
|
@@ -7,7 +7,7 @@ declare class SharedWorkerGlobalScopeTransport extends BaseTransport<SharedWorke
|
|
|
7
7
|
observe(): void;
|
|
8
8
|
onmessage(listener: ListenerType): void;
|
|
9
9
|
onremove(listener: ListenerType): void;
|
|
10
|
-
postMessage(message:
|
|
10
|
+
postMessage(message: MessageItem, options?: IframeSerializeOptions): void;
|
|
11
11
|
}
|
|
12
12
|
export default SharedWorkerGlobalScopeTransport;
|
|
13
13
|
//# sourceMappingURL=SharedWorkerGlobalScopeTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SharedWorkerGlobalScopeTransport.d.ts","sourceRoot":"","sources":["../../src/transports/SharedWorkerGlobalScopeTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"SharedWorkerGlobalScopeTransport.d.ts","sourceRoot":"","sources":["../../src/transports/SharedWorkerGlobalScopeTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAG3C,cAAM,gCAAiC,SAAQ,aAAa,CAAC,uBAAuB,CAAC;IACnF,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,QAAQ,CAA6C;IAE7D,OAAO;IAOP,OAAO,IAAI,IAAI;IAEf,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAevC,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAQtC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI;CAQ1E;AAED,eAAe,gCAAgC,CAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { IframeSerializeOptions, ListenerType } from '../fields';
|
|
1
|
+
import { IframeSerializeOptions, ListenerType, MessageItem } from '../fields';
|
|
2
2
|
import BaseTransport from './BaseTransport';
|
|
3
3
|
declare class SharedWorkerTransport extends BaseTransport<SharedWorker> {
|
|
4
4
|
destroy(): void;
|
|
5
5
|
observe(): void;
|
|
6
6
|
onmessage(listener: ListenerType): void;
|
|
7
7
|
onremove(listener: ListenerType): void;
|
|
8
|
-
postMessage(message:
|
|
8
|
+
postMessage(message: MessageItem, options?: IframeSerializeOptions): void;
|
|
9
9
|
}
|
|
10
10
|
export default SharedWorkerTransport;
|
|
11
11
|
//# sourceMappingURL=SharedWorkerTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SharedWorkerTransport.d.ts","sourceRoot":"","sources":["../../src/transports/SharedWorkerTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"SharedWorkerTransport.d.ts","sourceRoot":"","sources":["../../src/transports/SharedWorkerTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAG3C,cAAM,qBAAsB,SAAQ,aAAa,CAAC,YAAY,CAAC;IAC7D,OAAO;IAIP,OAAO,IAAI,IAAI;IAEf,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAKvC,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAItC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI;CAI1E;AAED,eAAe,qBAAqB,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FactoryOptions, ListenerType } from '../fields';
|
|
1
|
+
import { FactoryOptions, ListenerType, MessageItem } from '../fields';
|
|
2
2
|
import BaseTransport from './BaseTransport';
|
|
3
3
|
declare class WebSocketTransport extends BaseTransport<WebSocket> {
|
|
4
4
|
protected _target: WebSocket;
|
|
@@ -9,7 +9,7 @@ declare class WebSocketTransport extends BaseTransport<WebSocket> {
|
|
|
9
9
|
observe(close?: () => void): void;
|
|
10
10
|
onmessage(listener: ListenerType): void;
|
|
11
11
|
onremove(): void;
|
|
12
|
-
postMessage(message:
|
|
12
|
+
postMessage(message: MessageItem): void;
|
|
13
13
|
}
|
|
14
14
|
export default WebSocketTransport;
|
|
15
15
|
//# sourceMappingURL=WebSocketTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../../src/transports/WebSocketTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../../src/transports/WebSocketTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACrE,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAS3C,cAAM,kBAAmB,SAAQ,aAAa,CAAC,SAAS,CAAC;IAIrD,SAAS,CAAC,OAAO,EAAE,SAAS;IAC5B,SAAS,CAAC,QAAQ,EAAE,cAAc;IAJpC,OAAO,CAAC,UAAU,CAAyB;gBAG/B,OAAO,EAAE,SAAS,EAClB,QAAQ,GAAE,cAAmB;IAczC,OAAO;IAOP,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAMjC,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIvC,QAAQ,IAAI,IAAI;IAIhB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;CAiBxC;AAED,eAAe,kBAAkB,CAAA"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import BaseTransport from "./BaseTransport.js";
|
|
2
|
-
function isSafeBufferSource(data) {
|
|
3
|
-
return data instanceof ArrayBuffer || ArrayBuffer.isView(data) && data.buffer instanceof ArrayBuffer;
|
|
4
|
-
}
|
|
5
2
|
class WebSocketTransport extends BaseTransport {
|
|
6
3
|
_target;
|
|
7
4
|
_options;
|
|
@@ -36,7 +33,9 @@ class WebSocketTransport extends BaseTransport {
|
|
|
36
33
|
postMessage(message) {
|
|
37
34
|
const target = this._target;
|
|
38
35
|
this._onconnect.then((open)=>{
|
|
39
|
-
if (open)
|
|
36
|
+
if (open) try {
|
|
37
|
+
target.send(JSON.stringify(message));
|
|
38
|
+
} catch {}
|
|
40
39
|
}).catch(()=>{});
|
|
41
40
|
}
|
|
42
41
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IframeSerializeOptions, ListenerType } from '../fields';
|
|
1
|
+
import { IframeSerializeOptions, ListenerType, MessageItem } from '../fields';
|
|
2
2
|
import BaseTransport from './BaseTransport';
|
|
3
3
|
declare class WindowTransport extends BaseTransport<Window> {
|
|
4
4
|
private _errorHandle;
|
|
@@ -6,7 +6,7 @@ declare class WindowTransport extends BaseTransport<Window> {
|
|
|
6
6
|
is(source: MessageEventSource | null): boolean;
|
|
7
7
|
onmessage(listener: ListenerType): void;
|
|
8
8
|
onremove(listener: ListenerType): void;
|
|
9
|
-
postMessage(message:
|
|
9
|
+
postMessage(message: MessageItem, options?: IframeSerializeOptions): void;
|
|
10
10
|
observe(close?: () => void): void;
|
|
11
11
|
}
|
|
12
12
|
export default WindowTransport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WindowTransport.d.ts","sourceRoot":"","sources":["../../src/transports/WindowTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"WindowTransport.d.ts","sourceRoot":"","sources":["../../src/transports/WindowTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAG3C,cAAM,eAAgB,SAAQ,aAAa,CAAC,MAAM,CAAC;IACjD,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO;IAKP,EAAE,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAIpC,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIvC,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAItC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI;IASzE,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI;CAkB3B;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { IframeSerializeOptions, ListenerType } from '../fields';
|
|
1
|
+
import { IframeSerializeOptions, ListenerType, MessageItem } from '../fields';
|
|
2
2
|
import BaseTransport from './BaseTransport';
|
|
3
3
|
declare class WorkerTransport extends BaseTransport<Worker> {
|
|
4
4
|
destroy(): void;
|
|
5
5
|
observe(): void;
|
|
6
6
|
onmessage(listener: ListenerType): void;
|
|
7
7
|
onremove(listener: ListenerType): void;
|
|
8
|
-
postMessage(message:
|
|
8
|
+
postMessage(message: MessageItem, options?: IframeSerializeOptions): void;
|
|
9
9
|
}
|
|
10
10
|
export default WorkerTransport;
|
|
11
11
|
//# sourceMappingURL=WorkerTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerTransport.d.ts","sourceRoot":"","sources":["../../src/transports/WorkerTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"WorkerTransport.d.ts","sourceRoot":"","sources":["../../src/transports/WorkerTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAG3C,cAAM,eAAgB,SAAQ,aAAa,CAAC,MAAM,CAAC;IAEjD,OAAO;IAMP,OAAO,IAAI,IAAI;IAEf,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIvC,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAItC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI;CAI1E;AAED,eAAe,eAAe,CAAA"}
|