import { Adaptor, AdaptorPackageData } from '../adaptor.mjs'; import { RemoteCallData } from './type.mjs'; type AdaptorData = AdaptorPackageData; interface ExposeProps { globalName: string; adaptor: Adaptor; /** * ['*'] or ['device_id_1', 'device_id_2'] */ exposeTo: string[]; /** * 你可以在该回调中抛错,以阻止远程调用, * 也可以修改传入的 data */ onRequest?: (e: AdaptorData) => RemoteCallData | Promise; /** * 如果你想要自定义处理函数, * 需要谨慎且完善地处理各种 paths, args, * 以避免远程调用时出现未预期的错误。 * * --- * * 我的默认处理程序谨供参考: * ``` ts * let target = obj * for (let i = 0; i < data.paths.length; i += 1) { * target = target[data.paths[i] as keyof typeof target] as typeof target * } * if (target instanceof Function) { * return target(...data.args) * } * return target * ``` * * @returns 返回值将会被发送给远程调用方,可以是立即数,也可以是 Promise(Promise 会 await 后再返回) */ handler?: (e: AdaptorData) => unknown; } declare function isRemoteValueEvent(eventName: string): boolean; declare function exposeToRemote(obj: T, options: ExposeProps): () => void; export { exposeToRemote, isRemoteValueEvent };