mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-05 19:24:39 +00:00
feat: auto sync for cloud and fix some firefox weirdness
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import type { Plugin } from "vite";
|
||||
|
||||
/**
|
||||
* Firefox extension pages forbid eval / `Function` constructor. Some deps still emit:
|
||||
* - `Function(\`return this\`)()` (lodash-style global)
|
||||
* - `try { return Function(\`\`) / new Function("") … }` (feature probes, e.g. PDF.js / ORT)
|
||||
*/
|
||||
export function firefoxStripFunctionProbe(): Plugin {
|
||||
return {
|
||||
name: "firefox-strip-function-probe",
|
||||
apply: "build",
|
||||
enforce: "post",
|
||||
generateBundle(_options, bundle) {
|
||||
if ((process.env.MODE || "chrome").toLowerCase() !== "firefox") return;
|
||||
|
||||
const literalReplacements: [string, string][] = [
|
||||
['try{return new Function(""),!0}catch{return!1}', "return!1"],
|
||||
["try{return new Function(''),!0}catch{return!1}", "return!1"],
|
||||
['try{return new Function(""),true}catch{return false}', "return false"],
|
||||
["try{return new Function(''),true}catch{return false}", "return false"],
|
||||
// Empty template literal probe (minifier output)
|
||||
["try{return Function(``),!0}catch{return!1}", "return!1"],
|
||||
];
|
||||
|
||||
for (const chunk of Object.values(bundle)) {
|
||||
if (chunk.type !== "chunk" || typeof chunk.code !== "string") continue;
|
||||
let { code } = chunk;
|
||||
|
||||
code = code.replace(/Function\(`return this`\)\(\)/g, "(globalThis)");
|
||||
code = code.replace(/Function\("return this"\)\(\)/g, "(globalThis)");
|
||||
code = code.replace(/Function\('return this'\)\(\)/g, "(globalThis)");
|
||||
|
||||
for (const [from, to] of literalReplacements) {
|
||||
if (code.includes(from)) {
|
||||
code = code.split(from).join(to);
|
||||
}
|
||||
}
|
||||
|
||||
chunk.code = code;
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user