Some checks failed
test / Run tests (push) Failing after 8s
build / Build (push) Failing after 10s
63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
import { ScriptRunResouce } from "@App/app/repo/scripts";
|
|
import { Message, Server } from "@Packages/message/server";
|
|
import ExecScript from "./exec_script";
|
|
import { addStyle, ScriptFunc } from "./utils";
|
|
|
|
export class InjectRuntime {
|
|
execList: ExecScript[] = [];
|
|
|
|
constructor(
|
|
private server: Server,
|
|
private msg: Message,
|
|
private scripts: ScriptRunResouce[]
|
|
) {}
|
|
|
|
start() {
|
|
this.scripts.forEach((script) => {
|
|
// @ts-ignore
|
|
const scriptFunc = window[script.flag];
|
|
if (scriptFunc) {
|
|
this.execScript(script, scriptFunc);
|
|
} else {
|
|
// 监听脚本加载,和屏蔽读取
|
|
Object.defineProperty(window, script.flag, {
|
|
configurable: true,
|
|
set: (val: ScriptFunc) => {
|
|
this.execScript(script, val);
|
|
},
|
|
});
|
|
}
|
|
});
|
|
this.server.on("runtime/menuClick", (data: { id: number; uuid: string }) => {
|
|
// 转发给脚本
|
|
const exec = this.execList.find((val) => val.scriptRes.uuid === data.uuid);
|
|
if (exec) {
|
|
exec.menuClick(data.id);
|
|
}
|
|
});
|
|
this.server.on("runtime/valueUpdate", (data: { uuid: string; key: string; value: any }) => {
|
|
const exec = this.execList.find((val) => val.scriptRes.uuid === data.uuid);
|
|
if (exec) {
|
|
// exec.valueUpdate(data.key,);
|
|
}
|
|
});
|
|
}
|
|
|
|
execScript(script: ScriptRunResouce, scriptFunc: ScriptFunc) {
|
|
// @ts-ignore
|
|
delete window[script.flag];
|
|
const exec = new ExecScript(script, "content", this.msg, scriptFunc);
|
|
this.execList.push(exec);
|
|
// 注入css
|
|
if (script.metadata["require-css"]) {
|
|
script.metadata["require-css"].forEach((val) => {
|
|
const res = script.resource[val];
|
|
if (res) {
|
|
addStyle(res.content);
|
|
}
|
|
});
|
|
}
|
|
exec.exec();
|
|
}
|
|
}
|