This commit is contained in:
Percs 2024-07-31 02:08:11 -05:00
parent 5d61913f65
commit 23e5fe2c51
5 changed files with 70 additions and 70 deletions

View file

@ -16,7 +16,7 @@ export default defineConfig({
client: join(__dirname, "src/client/index.ts"), client: join(__dirname, "src/client/index.ts"),
config: join(__dirname, "src/scramjet.config.ts"), config: join(__dirname, "src/scramjet.config.ts"),
codecs: join(__dirname, "src/codecs/index.ts"), codecs: join(__dirname, "src/codecs/index.ts"),
bootstrapper: join(__dirname, "src/bootsrapper/index.ts") bootstrapper: join(__dirname, "src/bootsrapper/index.ts"),
}, },
resolve: { resolve: {
extensions: [".ts", ".js"], extensions: [".ts", ".js"],
@ -47,9 +47,9 @@ export default defineConfig({
], ],
parser: { parser: {
javascript: { javascript: {
dynamicImportMode: "eager" dynamicImportMode: "eager",
} },
} },
}, },
output: { output: {
filename: "scramjet.[name].js", filename: "scramjet.[name].js",

View file

@ -3,68 +3,71 @@ import { ScramjetConfig } from "../types";
import { Codec } from "../codecs"; import { Codec } from "../codecs";
export class ScramjetBootstrapper { export class ScramjetBootstrapper {
config: ScramjetConfig; config: ScramjetConfig;
private store: IDBMap; private store: IDBMap;
codec: Codec; codec: Codec;
constructor(config: ScramjetConfig) { constructor(config: ScramjetConfig) {
const defaultConfig = { const defaultConfig = {
prefix: "/scramjet/", prefix: "/scramjet/",
codec: "plain", codec: "plain",
wrapfn: "$scramjet$wrap", wrapfn: "$scramjet$wrap",
trysetfn: "$scramjet$tryset", trysetfn: "$scramjet$tryset",
importfn: "$scramjet$import", importfn: "$scramjet$import",
rewritefn: "$scramjet$rewrite", rewritefn: "$scramjet$rewrite",
shared: "/scramjet.shared.js", shared: "/scramjet.shared.js",
worker: "/scramjet.worker.js", worker: "/scramjet.worker.js",
thread: "/scramjet.thread.js", thread: "/scramjet.thread.js",
client: "/scramjet.client.js", client: "/scramjet.client.js",
codecs: "/scramjet.codecs.js", codecs: "/scramjet.codecs.js",
} };
this.config = Object.assign({}, defaultConfig, config); this.config = Object.assign({}, defaultConfig, config);
// rspack won't let me use a dynamic import // rspack won't let me use a dynamic import
fetch(config.codecs).then(async (response) => { fetch(config.codecs).then(async (response) => {
eval(await response.text()); eval(await response.text());
self.$scramjet.codec = self.$scramjet.codecs[this.config.codec]; self.$scramjet.codec = self.$scramjet.codecs[this.config.codec];
self.$scramjet.config = this.config; self.$scramjet.config = this.config;
}); });
console.log(this.config); console.log(this.config);
this.store = new IDBMap("config", { this.store = new IDBMap("config", {
prefix: "scramjet" prefix: "scramjet",
}); });
this.saveConfig(); this.saveConfig();
} }
registerSw(serviceWorkerPath: string) { registerSw(serviceWorkerPath: string) {
if ("serviceWorker" in navigator) { if ("serviceWorker" in navigator) {
navigator.serviceWorker navigator.serviceWorker
.register(serviceWorkerPath, { .register(serviceWorkerPath, {
scope: this.config.prefix scope: this.config.prefix,
}) })
.then((registration) => { .then((registration) => {
console.log("ServiceWorker registration successful with scope: ", registration.scope); console.log(
}) "ServiceWorker registration successful with scope: ",
.catch((err) => { registration.scope
console.log("ServiceWorker registration failed: ", err); );
}); })
} .catch((err) => {
} console.log("ServiceWorker registration failed: ", err);
});
}
}
saveConfig() { saveConfig() {
this.store.set("config", this.config).then(() => { this.store.set("config", this.config).then(() => {
console.log("scramjet config saved"); console.log("scramjet config saved");
}); });
} }
modifyConfig(config: ScramjetConfig) { modifyConfig(config: ScramjetConfig) {
this.config = Object.assign({}, this.config, config); this.config = Object.assign({}, this.config, config);
this.saveConfig(); this.saveConfig();
} }
} }
window.ScramjetBootstrapper = ScramjetBootstrapper; window.ScramjetBootstrapper = ScramjetBootstrapper;

View file

@ -102,10 +102,7 @@ async function handleResponse(
} }
break; break;
case "script": case "script":
responseBody = rewriteJs( responseBody = rewriteJs(await response.arrayBuffer(), url);
await response.arrayBuffer(),
url
);
// Disable threading for now, it's causing issues. // Disable threading for now, it's causing issues.
// responseBody = await this.threadpool.rewriteJs(await responseBody.arrayBuffer(), url.toString()); // responseBody = await this.threadpool.rewriteJs(await responseBody.arrayBuffer(), url.toString());
break; break;
@ -165,7 +162,7 @@ async function handleCookies(url: URL, headers: string[]) {
let [key, value] = cookieParsed.shift(); let [key, value] = cookieParsed.shift();
if (!value) continue; if (!value) continue;
value = value.replace("\"", ""); value = value.replace('"', "");
const hostArg = cookieParsed.find((x) => x[0] === "Domain"); const hostArg = cookieParsed.find((x) => x[0] === "Domain");
cookieParsed = cookieParsed.filter((x) => x[0] !== "Domain"); cookieParsed = cookieParsed.filter((x) => x[0] !== "Domain");

View file

@ -48,14 +48,14 @@ export class ScramjetServiceWorker {
loadConfig() { loadConfig() {
const store = new IDBMap("config", { const store = new IDBMap("config", {
prefix: "scramjet" prefix: "scramjet",
}); });
if (store.has("config")) { if (store.has("config")) {
store.get("config").then((config) => { store.get("config").then((config) => {
this.config = config; this.config = config;
self.$scramjet.config = config; self.$scramjet.config = config;
self.$scramjet.codec = self.$scramjet.codecs[config.codec] self.$scramjet.codec = self.$scramjet.codecs[config.codec];
}); });
} }
} }

View file

@ -1,9 +1,9 @@
const bootstrapper = new ScramjetBootstrapper({ const bootstrapper = new ScramjetBootstrapper({
codecs: "/scram/scramjet.codecs.js", codecs: "/scram/scramjet.codecs.js",
worker: "/scram/scramjet.worker.js", worker: "/scram/scramjet.worker.js",
thread: "/scram/scramjet.thread.js", thread: "/scram/scramjet.thread.js",
client: "/scram/scramjet.client.js", client: "/scram/scramjet.client.js",
shared: "/scram/scramjet.shared.js", shared: "/scram/scramjet.shared.js",
}); });
bootstrapper.registerSw("./sw.js"); bootstrapper.registerSw("./sw.js");