feat(rpc): rework shared-types + include as mandatory dep

This commit is contained in:
2026-09-28 02:05:40 +01:00
parent 3e3548a9cc
commit 8029f24e9d
9 changed files with 235 additions and 222 deletions
+33 -44
View File
@@ -9,6 +9,12 @@ import {
type RPCStateRaw,
type RPCStateWeb,
} from '../utils/types'
import type {
RPCEventArgs,
RPCEventName,
RPCEventResult,
RPCListener,
} from '../utils/typing'
import { RPCInstanceBase } from './base'
export class RPCInstanceWebview extends RPCInstanceBase {
@@ -64,93 +70,76 @@ export class RPCInstanceWebview extends RPCInstanceBase {
// ===== CLIENT =====
public onClient<
EventName extends keyof s.RPCEvents_ClientWebview,
CallbackArguments extends Parameters<s.RPCEvents_ClientWebview[EventName]>,
CallbackReturn extends ReturnType<s.RPCEvents_ClientWebview[EventName]>,
>(
public onClient<EventName extends RPCEventName<s.RPCEvents_ClientWebview>>(
eventName: EventName,
cb: (
...args: CallbackArguments
) => Awaited<CallbackReturn> | Promise<Awaited<CallbackReturn>>,
cb: RPCListener<s.RPCEvents_ClientWebview, EventName>,
): this {
return this.listen(this._emitterClient, 'onClient', eventName, cb)
}
public offClient<EventName extends keyof s.RPCEvents_ClientWebview>(
public offClient<EventName extends RPCEventName<s.RPCEvents_ClientWebview>>(
eventName: EventName,
): this {
return this.unlisten(this._emitterClient, 'offClient', eventName)
}
public async emitClient<
EventName extends keyof s.RPCEvents_WebviewClient,
Arguments extends Parameters<s.RPCEvents_WebviewClient[EventName]>,
Response extends ReturnType<s.RPCEvents_WebviewClient[EventName]>,
>(eventName: EventName, ...args: Arguments): Promise<Awaited<Response>> {
EventName extends RPCEventName<s.RPCEvents_WebviewClient>,
>(
eventName: EventName,
...args: RPCEventArgs<s.RPCEvents_WebviewClient, EventName>
): Promise<RPCEventResult<s.RPCEvents_WebviewClient, EventName>> {
const payload = this.request(eventName, 'client', args, null)
return this._request<Awaited<Response>>(payload)
return this._request(payload)
}
// ===== SERVER =====
public onServer<
EventName extends keyof s.RPCEvents_ServerWebview,
CallbackArguments extends Parameters<s.RPCEvents_ServerWebview[EventName]>,
CallbackReturn extends ReturnType<s.RPCEvents_ServerWebview[EventName]>,
>(
public onServer<EventName extends RPCEventName<s.RPCEvents_ServerWebview>>(
eventName: EventName,
cb: (
...args: CallbackArguments
) => Awaited<CallbackReturn> | Promise<Awaited<CallbackReturn>>,
cb: RPCListener<s.RPCEvents_ServerWebview, EventName>,
): this {
return this.listen(this._emitterServer, 'onServer', eventName, cb)
}
public offServer<EventName extends keyof s.RPCEvents_ServerWebview>(
public offServer<EventName extends RPCEventName<s.RPCEvents_ServerWebview>>(
eventName: EventName,
): RPCInstanceWebview {
): this {
return this.unlisten(this._emitterServer, 'offServer', eventName)
}
public async emitServer<
EventName extends keyof s.RPCEvents_WebviewServer,
Arguments extends Parameters<s.RPCEvents_WebviewServer[EventName]>,
Response extends ReturnType<s.RPCEvents_WebviewServer[EventName]>,
>(eventName: EventName, ...args: Arguments): Promise<Awaited<Response>> {
EventName extends RPCEventName<s.RPCEvents_WebviewServer>,
>(
eventName: EventName,
...args: RPCEventArgs<s.RPCEvents_WebviewServer, EventName>
): Promise<RPCEventResult<s.RPCEvents_WebviewServer, EventName>> {
const payload = this.request(eventName, 'server', args, null)
return this._request<Awaited<Response>>(payload)
return this._request(payload)
}
// ===== SELF =====
public onSelf<
EventName extends keyof s.RPCEvents_Webview,
CallbackArguments extends Parameters<s.RPCEvents_Webview[EventName]>,
CallbackReturn extends ReturnType<s.RPCEvents_Webview[EventName]>,
>(
public onSelf<EventName extends RPCEventName<s.RPCEvents_Webview>>(
eventName: EventName,
cb: (
...args: CallbackArguments
) => Awaited<CallbackReturn> | Promise<Awaited<CallbackReturn>>,
cb: RPCListener<s.RPCEvents_Webview, EventName>,
): this {
return this.listen(this._emitterLocal, 'onSelf', eventName, cb)
}
public offSelf<EventName extends keyof s.RPCEvents_Webview>(
public offSelf<EventName extends RPCEventName<s.RPCEvents_Webview>>(
eventName: EventName,
): this {
return this.unlisten(this._emitterLocal, 'offSelf', eventName)
}
public async emitSelf<
EventName extends keyof s.RPCEvents_Webview,
Arguments extends Parameters<s.RPCEvents_Webview[EventName]>,
Response extends ReturnType<s.RPCEvents_Webview[EventName]>,
>(eventName: EventName, ...args: Arguments): Promise<Awaited<Response>> {
return this.emitLocal<Awaited<Response>>(eventName, args)
public async emitSelf<EventName extends RPCEventName<s.RPCEvents_Webview>>(
eventName: EventName,
...args: RPCEventArgs<s.RPCEvents_Webview, EventName>
): Promise<RPCEventResult<s.RPCEvents_Webview, EventName>> {
return this.emitLocal(eventName, args)
}
// ===== UTILS =====