diff --git a/packages/message/client.ts b/packages/message/client.ts index bfee9c4..9c8207e 100644 --- a/packages/message/client.ts +++ b/packages/message/client.ts @@ -1,32 +1,24 @@ -export function sendMessage(action: string, data?: any): Promise { - return new Promise((resolve, reject) => { - chrome.runtime.sendMessage({ action, data }, (res) => { - if (res.code) { - console.error(res); - reject(res.message); - } else { - resolve(res.data); - } - }); - }); +import { Message, MessageConnect } from "./server"; + +export function sendMessage(msg: Message, action: string, data?: any): Promise { + return msg.sendMessage({ action, data }); } -export function connect(action: string, data?: any): Promise { - return new Promise((resolve) => { - const port = chrome.runtime.connect(); - port.postMessage({ action, data }); - resolve(port); - }); +export function connect(msg: Message, action: string, data?: any): Promise { + return msg.connect({ action, data }); } export class Client { - constructor(private prefix: string) { + constructor( + private msg: Message, + private prefix: string + ) { if (!this.prefix.endsWith("/")) { this.prefix += "/"; } } do(action: string, params?: any): Promise { - return sendMessage(this.prefix + action, params); + return sendMessage(this.msg, this.prefix + action, params); } } diff --git a/packages/message/server.ts b/packages/message/server.ts index d4d378f..43c7c55 100644 --- a/packages/message/server.ts +++ b/packages/message/server.ts @@ -87,3 +87,28 @@ export class Group { this.server.on(`${this.name}${name}`, func); } } + +// 转发消息 +export function forwardMessage(path: string, from: Server, to: Message) { + from.on(path, (params, fromCon) => { + console.log(params, fromCon); + if (fromCon) { + to.connect({ action: path, data: params }).then((toCon) => { + fromCon.onMessage((data) => { + toCon.sendMessage(data); + }); + toCon.onMessage((data) => { + fromCon.sendMessage(data); + }); + fromCon.onDisconnect(() => { + toCon.disconnect(); + }); + toCon.onDisconnect(() => { + fromCon.disconnect(); + }); + }); + } else { + return to.sendMessage({ action: path, data: params }); + } + }); +} diff --git a/rspack.config.ts b/rspack.config.ts index 36452ef..507f851 100644 --- a/rspack.config.ts +++ b/rspack.config.ts @@ -77,6 +77,7 @@ export default defineConfig({ parser: { syntax: "typescript", tsx: true, + decorators: true, }, transform: { react: { diff --git a/src/app/repo/scripts.ts b/src/app/repo/scripts.ts index 1f6137c..6412aec 100644 --- a/src/app/repo/scripts.ts +++ b/src/app/repo/scripts.ts @@ -1,6 +1,5 @@ import { Repo } from "./repo"; import { Resource } from "./resource"; -import { Value } from "./value"; // 脚本模型 export type SCRIPT_TYPE = 1 | 2 | 3; @@ -71,15 +70,19 @@ export interface ScriptCode { code: string; // 脚本执行代码 } +export type ScriptAndCode = Script & ScriptCode; + // 脚本运行时的资源,包含已经编译好的脚本与脚本需要的资源 export interface ScriptRunResouce extends Script { code: string; - value: { [key: string]: Value }; + value: { [key: string]: any }; flag: string; resource: { [key: string]: Resource }; } export class ScriptDAO extends Repo