@event-chat/rpc 0.1.29 → 0.1.31

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.
@@ -15,6 +15,7 @@ declare class RPCAction {
15
15
  destroy(): void;
16
16
  broadcast<T>(options?: Omit<RequestOptions<T>, 'retry'>, fallback?: (error: unknown) => void): MessageItem;
17
17
  config(options: Omit<RPCOptionsType, 'onConnect' | 'onDisconnect'>): void;
18
+ connected(): boolean;
18
19
  on<T extends ActionFunType>(type: PropertyKey, handler: T): void;
19
20
  onBrodcast(listener: BrodcastItem): void;
20
21
  request<T = unknown>(type: PropertyKey, options?: RequestOptions<T>): Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"RPCAction.d.ts","sourceRoot":"","sources":["../../src/core/RPCAction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RPCAction.d.ts","sourceRoot":"","sources":["../../src/core/RPCAction.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,9 @@ class RPCAction {
69
69
  ...options
70
70
  };
71
71
  }
72
+ connected() {
73
+ return this._isConnected;
74
+ }
72
75
  on(type, handler) {
73
76
  this._handlers[type] = handler;
74
77
  }
@@ -1,26 +1,56 @@
1
+ import { RequestOptions } from '../core/RPCAction';
1
2
  import { ActionRecord } from '../core/RPCDecorator';
2
- import { EntryOptions } from '../fields';
3
- export declare function createMessagePortRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: MessagePort, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "destroy" | "on" | "onBrodcast" | "request"> & Pick<import("..").Transport<boolean>, "getType" | "upset"> & {
4
- request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
3
+ import { EntryOptions, MessageItem, Transport } from '../fields';
4
+ export declare function createMessagePortRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: MessagePort, config?: EntryOptions<EVENT, CONSUME>): readonly [Readonly<Omit<import("../core/RPCAction").default, "destroy" | "on" | "onBrodcast" | "request"> & Pick<Transport<boolean>, "getType" | "upset"> & {
5
+ request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<RequestOptions, "payload"> & {
5
6
  payload?: never;
6
7
  } : StructuredSerializeOptions & {
7
8
  targetOrigin?: string;
8
9
  transmit?: () => Promise<readonly WindowClient[]>;
9
- } & Pick<import("..").MessageItem, "requestId" | "sign"> & {
10
+ } & Pick<MessageItem, "requestId" | "sign"> & {
10
11
  payload?: Parameters<CONSUME[K]>[0] | undefined;
11
12
  retry?: number;
12
13
  } & {
13
14
  payload: Parameters<CONSUME[K]>[0];
14
- }) | undefined] : [keyname: K, reqops: Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
15
+ }) | undefined] : [keyname: K, reqops: Parameters<CONSUME[K]> extends [] ? Omit<RequestOptions, "payload"> & {
15
16
  payload?: never;
16
17
  } : StructuredSerializeOptions & {
17
18
  targetOrigin?: string;
18
19
  transmit?: () => Promise<readonly WindowClient[]>;
19
- } & Pick<import("..").MessageItem, "requestId" | "sign"> & {
20
+ } & Pick<MessageItem, "requestId" | "sign"> & {
20
21
  payload?: Parameters<CONSUME[K]>[0] | undefined;
21
22
  retry?: number;
22
23
  } & {
23
24
  payload: Parameters<CONSUME[K]>[0];
24
25
  }]) => Promise<ReturnType<CONSUME[K]> extends infer T ? T extends ReturnType<CONSUME[K]> ? T extends Promise<infer R> ? R : T : never : never>;
25
26
  }>, () => void];
27
+ export declare function observerMessagePortRPC(): Readonly<{
28
+ brodcastScope: <T>(data: RequestOptions<T>, fallback?: (error: unknown) => void) => void;
29
+ push: <EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: MessagePort, config?: EntryConfig<EVENT, CONSUME>) => readonly [Readonly<Omit<import("../core/RPCAction").default, "destroy" | "on" | "onBrodcast" | "request"> & Pick<Transport<boolean>, "getType" | "upset"> & {
30
+ request: <K extends keyof CONSUME>(...args: Parameters<CONSUME[K]> extends [] ? [keyname: K, reqops?: (Parameters<CONSUME[K]> extends [] ? Omit<RequestOptions, "payload"> & {
31
+ payload?: never;
32
+ } : StructuredSerializeOptions & {
33
+ targetOrigin?: string;
34
+ transmit?: () => Promise<readonly WindowClient[]>;
35
+ } & Pick<MessageItem, "requestId" | "sign"> & {
36
+ payload?: Parameters<CONSUME[K]>[0] | undefined;
37
+ retry?: number;
38
+ } & {
39
+ payload: Parameters<CONSUME[K]>[0];
40
+ }) | undefined] : [keyname: K, reqops: Parameters<CONSUME[K]> extends [] ? Omit<RequestOptions, "payload"> & {
41
+ payload?: never;
42
+ } : StructuredSerializeOptions & {
43
+ targetOrigin?: string;
44
+ transmit?: () => Promise<readonly WindowClient[]>;
45
+ } & Pick<MessageItem, "requestId" | "sign"> & {
46
+ payload?: Parameters<CONSUME[K]>[0] | undefined;
47
+ retry?: number;
48
+ } & {
49
+ payload: Parameters<CONSUME[K]>[0];
50
+ }]) => Promise<ReturnType<CONSUME[K]> extends infer T ? T extends ReturnType<CONSUME[K]> ? T extends Promise<infer R> ? R : T : never : never>;
51
+ }>, () => void];
52
+ }>;
53
+ export type EntryConfig<EVENT extends ActionRecord, CONSUME extends ActionRecord> = EntryOptions<EVENT, CONSUME> & {
54
+ destroy?: boolean;
55
+ };
26
56
  //# sourceMappingURL=messagePort.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messagePort.d.ts","sourceRoot":"","sources":["../../src/entry/messagePort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,oBAAoB,CAAC,KAAK,SAAS,YAAY,EAAE,OAAO,SAAS,YAAY,EAC3F,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;gBAItC"}
1
+ {"version":3,"file":"messagePort.d.ts","sourceRoot":"","sources":["../../src/entry/messagePort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAGhE,wBAAgB,oBAAoB,CAAC,KAAK,SAAS,YAAY,EAAE,OAAO,SAAS,YAAY,EAC3F,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;gBAItC;AAED,wBAAgB,sBAAsB;oBAKb,CAAC,QAAQ,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;WAgBxE,KAAK,SAAS,YAAY,EAAE,OAAO,SAAS,YAAY,UAC5D,WAAW,WACV,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;GA4BvC;AAED,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,YAAY,EAAE,OAAO,SAAS,YAAY,IAAI,YAAY,CAC9F,KAAK,EACL,OAAO,CACR,GAAG;IACF,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA"}
@@ -4,4 +4,45 @@ function createMessagePortRPC(target, config) {
4
4
  const { context, options } = config ?? {};
5
5
  return RPCDecorator(new MessagePortTransport(target, options), context);
6
6
  }
7
- export { createMessagePortRPC };
7
+ function observerMessagePortRPC() {
8
+ const ports = new Set();
9
+ const brodcastScope = (data, fallback)=>{
10
+ let result = {};
11
+ ports.forEach((port)=>{
12
+ if (port.connected()) result = port.broadcast({
13
+ ...data,
14
+ requestId: data.requestId ?? result.requestId,
15
+ sign: data.sign ?? result.sign
16
+ }, fallback);
17
+ });
18
+ };
19
+ const push = (target, config)=>{
20
+ const { context, destroy, ...ops } = config ?? {};
21
+ const RPCIns = createMessagePortRPC(target, {
22
+ ...ops,
23
+ context: {
24
+ ...context,
25
+ config: {
26
+ ...context?.config,
27
+ onConnect: ()=>{
28
+ ports.add(RPCIns[0]);
29
+ context?.config?.onConnect?.();
30
+ },
31
+ onDisconnect: (dest)=>{
32
+ if (destroy) {
33
+ RPCIns[1]();
34
+ ports.delete(RPCIns[0]);
35
+ context?.config?.onDisconnect?.(true);
36
+ } else context?.config?.onDisconnect?.(dest);
37
+ }
38
+ }
39
+ }
40
+ });
41
+ return RPCIns;
42
+ };
43
+ return Object.freeze({
44
+ brodcastScope,
45
+ push
46
+ });
47
+ }
48
+ export { createMessagePortRPC, observerMessagePortRPC };
@@ -1,26 +1,10 @@
1
1
  import { ActionRecord } from '../core/RPCDecorator';
2
- import { EntryOptions } from '../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, "destroy" | "on" | "onBrodcast" | "request"> & Pick<import("..").Transport<boolean>, "getType" | "upset"> & {
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
- payload?: never;
6
- } : StructuredSerializeOptions & {
7
- targetOrigin?: string;
8
- transmit?: () => Promise<readonly WindowClient[]>;
9
- } & Pick<import("..").MessageItem, "requestId" | "sign"> & {
10
- payload?: Parameters<CONSUME[K]>[0] | undefined;
11
- retry?: number;
12
- } & {
13
- payload: Parameters<CONSUME[K]>[0];
14
- }) | undefined] : [keyname: K, reqops: Parameters<CONSUME[K]> extends [] ? Omit<import("../core/RPCAction").RequestOptions, "payload"> & {
15
- payload?: never;
16
- } : StructuredSerializeOptions & {
17
- targetOrigin?: string;
18
- transmit?: () => Promise<readonly WindowClient[]>;
19
- } & Pick<import("..").MessageItem, "requestId" | "sign"> & {
20
- payload?: Parameters<CONSUME[K]>[0] | undefined;
21
- retry?: number;
22
- } & {
23
- payload: Parameters<CONSUME[K]>[0];
24
- }]) => Promise<ReturnType<CONSUME[K]> extends infer T ? T extends ReturnType<CONSUME[K]> ? T extends Promise<infer R> ? R : T : never : never>;
25
- }>, () => void];
2
+ import { EntryConfig, createMessagePortRPC } from './messagePort';
3
+ export declare function obseverShareWorkerGlobalScopeRPC<EVENT extends ActionRecord, CONSUME extends ActionRecord>(target: SharedWorkerGlobalScope, generate?: GenerateCtx<EVENT, CONSUME>): Readonly<{
4
+ brodcastScope: <T>(data: import("../core/RPCAction").RequestOptions<T>, fallback?: (error: unknown) => void) => void;
5
+ }>;
6
+ type GenerateCtx<EVENT extends ActionRecord, CONSUME extends ActionRecord> = () => EntryConfig<EVENT, CONSUME> & {
7
+ provider?: (RPCIns: ReturnType<typeof createMessagePortRPC<EVENT, CONSUME>>) => void;
8
+ };
9
+ export {};
26
10
  //# sourceMappingURL=sharedWorkerGlobalScope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sharedWorkerGlobalScope.d.ts","sourceRoot":"","sources":["../../src/entry/sharedWorkerGlobalScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,gCAAgC,CAC9C,KAAK,SAAS,YAAY,EAC1B,OAAO,SAAS,YAAY,EAC5B,MAAM,EAAE,uBAAuB,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;gBAGvE"}
1
+ {"version":3,"file":"sharedWorkerGlobalScope.d.ts","sourceRoot":"","sources":["../../src/entry/sharedWorkerGlobalScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAA0B,MAAM,eAAe,CAAA;AAEzF,wBAAgB,gCAAgC,CAC9C,KAAK,SAAS,YAAY,EAC1B,OAAO,SAAS,YAAY,EAC5B,MAAM,EAAE,uBAAuB,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;;GAQxE;AAED,KAAK,WAAW,CAAC,KAAK,SAAS,YAAY,EAAE,OAAO,SAAS,YAAY,IAAI,MAAM,WAAW,CAC5F,KAAK,EACL,OAAO,CACR,GAAG;IACF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAA;CACrF,CAAA"}
@@ -1,7 +1,13 @@
1
- import RPCDecorator from "../core/RPCDecorator.js";
2
- import SharedWorkerGlobalScopeTransport from "../transports/SharedWorkerGlobalScopeTransport.js";
3
- function createSharedWorkerGlobalScopeRPC(target, config) {
4
- const { context, options } = config ?? {};
5
- return RPCDecorator(new SharedWorkerGlobalScopeTransport(target, options), context);
1
+ import { observerMessagePortRPC } from "./messagePort.js";
2
+ function obseverShareWorkerGlobalScopeRPC(target, generate) {
3
+ const { brodcastScope, push } = observerMessagePortRPC();
4
+ target.addEventListener('connect', (event)=>{
5
+ const { provider, ...config } = generate?.() ?? {};
6
+ const rpcInc = push(event.ports[0], config);
7
+ provider?.(rpcInc);
8
+ });
9
+ return Object.freeze({
10
+ brodcastScope
11
+ });
6
12
  }
7
- export { createSharedWorkerGlobalScopeRPC };
13
+ export { obseverShareWorkerGlobalScopeRPC };
@@ -1,17 +1,15 @@
1
- import { FactoryOptions, IframeSerializeOptions, ListenerType, MessageItem } from '../fields';
1
+ import { IframeSerializeOptions, ListenerType, MessageItem } from '../fields';
2
2
  import BaseTransport from './BaseTransport';
3
3
  declare class ServiceWorkerGlobalScopeTransport extends BaseTransport<ServiceWorkerGlobalScope> {
4
- protected _target: ServiceWorkerGlobalScope;
5
- protected _options: FactoryOptions;
4
+ private _source;
6
5
  private _fetch;
7
6
  private _onconnect;
8
- private _source;
9
- constructor(_target: ServiceWorkerGlobalScope, _options?: FactoryOptions);
10
7
  destroy(): void;
11
8
  observe(): void;
12
9
  onmessage(listener: ListenerType): void;
13
10
  onremove(): void;
14
11
  postMessage(message: MessageItem, options?: IframeSerializeOptions): Promise<void[]> | Promise<void | undefined>;
12
+ private _fetchHandle;
15
13
  }
16
14
  export {};
17
15
  export default ServiceWorkerGlobalScopeTransport;
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceWorkerGlobalScopeTransport.d.ts","sourceRoot":"","sources":["../../src/transports/ServiceWorkerGlobalScopeTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE7F,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAK3C,cAAM,iCAAkC,SAAQ,aAAa,CAAC,wBAAwB,CAAC;IAMnF,SAAS,CAAC,OAAO,EAAE,wBAAwB;IAC3C,SAAS,CAAC,QAAQ,EAAE,cAAc;IANpC,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,UAAU,CAAuD;IACzE,OAAO,CAAC,OAAO,CAA8C;gBAGjD,OAAO,EAAE,wBAAwB,EACjC,QAAQ,GAAE,cAAmB;IAkBzC,OAAO;IAOP,OAAO,IAAI,IAAI;IAIf,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAqBvC,QAAQ,IAAI,IAAI;IAKhB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAwBnE;AAED,OAAO,EAAE,CAAA;AAET,eAAe,iCAAiC,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;AAE7E,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAG3C,cAAM,iCAAkC,SAAQ,aAAa,CAAC,wBAAwB,CAAC;IACrF,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAAuD;IAIzE,OAAO;IAMP,OAAO,IAAI,IAAI;IAIf,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAuBvC,QAAQ,IAAI,IAAI;IAKhB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB;IAyBlE,OAAO,CAAC,YAAY;CAQrB;AAED,OAAO,EAAE,CAAA;AAET,eAAe,iCAAiC,CAAA"}
@@ -1,23 +1,11 @@
1
1
  import { ProxyPromise } from "../utils.js";
2
2
  import BaseTransport from "./BaseTransport.js";
3
3
  class ServiceWorkerGlobalScopeTransport extends BaseTransport {
4
- _target;
5
- _options;
6
- _fetch;
7
- _onconnect;
8
4
  _source;
9
- constructor(_target, _options = {}){
10
- super(_target, _options), this._target = _target, this._options = _options;
11
- this._fetch = (event)=>{
12
- self.clients.get(event.clientId).then((client)=>{
13
- if (client) this._source = client;
14
- }).catch(()=>{});
15
- };
16
- this._target.addEventListener('fetch', this._fetch);
17
- }
5
+ _fetch = this._fetchHandle.bind(this);
6
+ _onconnect;
18
7
  destroy() {
19
- if (this._fetch) this._target.removeEventListener('fetch', this._fetch);
20
- this._fetch = void 0;
8
+ this._target.removeEventListener('fetch', this._fetch);
21
9
  this._onconnect = void 0;
22
10
  }
23
11
  observe() {}
@@ -35,6 +23,7 @@ class ServiceWorkerGlobalScopeTransport extends BaseTransport {
35
23
  });
36
24
  }));
37
25
  };
26
+ this._target.addEventListener('fetch', this._fetch);
38
27
  this._target.addEventListener('message', this._onconnect, this._options.message);
39
28
  }
40
29
  onremove() {
@@ -57,6 +46,11 @@ class ServiceWorkerGlobalScopeTransport extends BaseTransport {
57
46
  transfer
58
47
  }));
59
48
  }
49
+ _fetchHandle(event) {
50
+ self.clients.get(event.clientId).then((client)=>{
51
+ if (client) this._source = client;
52
+ }).catch(()=>{});
53
+ }
60
54
  }
61
55
  const transports_ServiceWorkerGlobalScopeTransport = ServiceWorkerGlobalScopeTransport;
62
56
  export { transports_ServiceWorkerGlobalScopeTransport as default };
@@ -1,10 +1,9 @@
1
- import { FactoryOptions, ListenerType, MessageItem } from '../fields';
1
+ import { ListenerType, MessageItem } from '../fields';
2
2
  import BaseTransport from './BaseTransport';
3
3
  declare class WebSocketTransport extends BaseTransport<WebSocket> {
4
- protected _target: WebSocket;
5
- protected _options: FactoryOptions;
6
4
  private _onconnect;
7
- constructor(_target: WebSocket, _options?: FactoryOptions);
5
+ private _closeHandle;
6
+ private _messageHandle;
8
7
  destroy(): void;
9
8
  observe(close?: () => void): void;
10
9
  onmessage(listener: ListenerType): void;
@@ -1 +1 @@
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;AAErE,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;CAajC;AAED,eAAe,kBAAkB,CAAA"}
1
+ {"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../../src/transports/WebSocketTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAErD,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAG3C,cAAM,kBAAmB,SAAQ,aAAa,CAAC,SAAS,CAAC;IACvD,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,cAAc,CAA6C;IAEnE,OAAO;IAKP,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAOjC,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IA8BvC,QAAQ,IAAI,IAAI;IAOhB,WAAW,CAAC,OAAO,EAAE,WAAW;CAQjC;AAED,eAAe,kBAAkB,CAAA"}
@@ -1,35 +1,52 @@
1
1
  import { ProxyPromise } from "../utils.js";
2
2
  import BaseTransport from "./BaseTransport.js";
3
3
  class WebSocketTransport extends BaseTransport {
4
- _target;
5
- _options;
6
4
  _onconnect = Promise.resolve(false);
7
- constructor(_target, _options = {}){
8
- super(_target, _options), this._target = _target, this._options = _options;
9
- this._onconnect = new Promise((resolve)=>{
10
- this._target.onopen = ()=>{
11
- resolve(true);
12
- };
13
- this._target.onclose = ()=>{
14
- resolve(false);
15
- };
16
- });
17
- }
5
+ _closeHandle;
6
+ _messageHandle;
18
7
  destroy() {
19
- this._target.onclose = null;
20
- this._target.onopen = null;
8
+ this._closeHandle = void 0;
21
9
  if (this._target.readyState === WebSocket.OPEN) this._target.close();
22
10
  }
23
11
  observe(close) {
24
- this._target.onclose = ()=>{
25
- close?.();
26
- };
12
+ if (close) {
13
+ this._closeHandle = close;
14
+ this._target.addEventListener('close', this._closeHandle, {
15
+ once: true
16
+ });
17
+ }
27
18
  }
28
19
  onmessage(listener) {
29
- this._target.onmessage = listener;
20
+ this._onconnect = new Promise((resolve)=>{
21
+ const handleConnect = (event)=>{
22
+ this._target.removeEventListener('open', handleConnect);
23
+ this._target.removeEventListener('close', handleConnect);
24
+ resolve('open' === event.type);
25
+ };
26
+ this._target.addEventListener('open', handleConnect, {
27
+ once: true
28
+ });
29
+ this._target.addEventListener('close', handleConnect, {
30
+ once: true
31
+ });
32
+ });
33
+ this._messageHandle = (event)=>{
34
+ try {
35
+ if ('string' == typeof event.data) listener({
36
+ data: JSON.parse(event.data),
37
+ origin: event.origin,
38
+ ports: event.ports,
39
+ source: event.source
40
+ });
41
+ } catch {}
42
+ };
43
+ this._target.addEventListener('message', this._messageHandle, this._options.message);
30
44
  }
31
45
  onremove() {
32
- this._target.onmessage = null;
46
+ if (this._messageHandle) {
47
+ this._target.removeEventListener('message', this._messageHandle, this._options.message);
48
+ this._messageHandle = void 0;
49
+ }
33
50
  }
34
51
  postMessage(message) {
35
52
  const target = this._target;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-chat/rpc",
3
- "version": "0.1.29",
3
+ "version": "0.1.31",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "exports": {