migrate to $scramjet object from __scramjet

This commit is contained in:
Percs 2024-07-14 05:34:55 -05:00
parent 146c202ae2
commit cf9e5a3418
13 changed files with 77 additions and 67 deletions

View file

@ -15,8 +15,7 @@ import "./scope.ts";
declare global {
interface Window {
//@ts-ignore scope function cant be typed
__s: any;
$s: any;
}
}
@ -31,4 +30,4 @@ export const {
rewriteWorkers,
isScramjetFile,
BareClient
} = self.__scramjet$bundle;
} = self.$scramjet.bundle;

View file

@ -12,4 +12,4 @@ function scope(identifier: any) {
}
// shorthand because this can get out of hand reall quickly
window.__s = scope;
window.$s = scope;

View file

@ -67,17 +67,10 @@ const base64 = {
}
}
declare global {
interface Window {
__scramjet$codecs: {
none: Codec;
plain: Codec;
base64: Codec;
xor: Codec;
}
}
if (!self.$scramjet) {
//@ts-expect-error really dumb workaround
self.$scramjet = {}
}
self.__scramjet$codecs = {
self.$scramjet.codecs = {
none, plain, base64, xor
}

View file

@ -1,22 +1,10 @@
import { Codec } from "./codecs";
declare global {
interface Window {
__scramjet$config: {
prefix: string;
codec: Codec
config: string;
shared: string;
worker: string;
client: string;
codecs: string;
}
}
if (!self.$scramjet) {
//@ts-expect-error really dumb workaround
self.$scramjet = {}
}
self.__scramjet$config = {
self.$scramjet.config = {
prefix: "/scramjet/",
codec: self.__scramjet$codecs.plain,
codec: self.$scramjet.codecs.plain,
config: "/scram/scramjet.config.js",
shared: "/scram/scramjet.shared.js",
worker: "/scram/scramjet.worker.js",

View file

@ -7,24 +7,11 @@ import { rewriteWorkers } from "./rewriters/worker";
import { isScramjetFile } from "./rewriters/html";
import { BareClient } from "@mercuryworkshop/bare-mux";
declare global {
interface Window {
__scramjet$bundle: {
encodeUrl: typeof encodeUrl;
decodeUrl: typeof decodeUrl;
rewriteCss: typeof rewriteCss;
rewriteHtml: typeof rewriteHtml;
rewriteSrcset: typeof rewriteSrcset;
rewriteJs: typeof rewriteJs;
rewriteHeaders: typeof rewriteHeaders;
rewriteWorkers: typeof rewriteWorkers;
BareClient: typeof BareClient;
isScramjetFile: typeof isScramjetFile
}
}
if (!self.$scramjet) {
//@ts-expect-error really dumb workaround
self.$scramjet = {}
}
self.__scramjet$bundle = {
self.$scramjet.bundle = {
encodeUrl,
decodeUrl,
rewriteCss,

View file

@ -9,7 +9,7 @@ import { rewriteJs } from "./js";
export function isScramjetFile(src: string) {
let bool = false;
["codecs", "client", "shared", "worker", "config"].forEach((file) => {
if (src === self.__scramjet$config[file]) bool = true;
if (src === self.$scramjet.config[file]) bool = true;
});
return bool;
@ -73,7 +73,7 @@ function traverseParsedHtml(node, origin?: URL) {
const scramjetScripts = [];
["codecs", "config", "shared", "client"].forEach((script) => {
scramjetScripts.push(new Element("script", {
src: self.__scramjet$config[script],
src: self.$scramjet.config[script],
"data-scramjet": ""
}));
});

View file

@ -63,7 +63,7 @@ export function rewriteJs(js: string, origin?: URL) {
// js rweriting notrdone
MemberExpression: (node: ESTree.MemberExpression) => {
if (node.object.type === "Identifier" && identifierList.includes(node.object.name)) {
node.object.name = `__s(${node.object.name})`;
node.object.name = `$s(${node.object.name})`;
}
}
});

View file

@ -13,7 +13,7 @@ function canParseUrl(url: string, origin?: URL) {
// something is broken with this but i didn't debug it
export function encodeUrl(url: string, origin?: URL) {
if (!origin) {
origin = new URL(self.__scramjet$config.codec.decode(location.href.slice((location.origin + self.__scramjet$config.prefix).length)));
origin = new URL(self.$scramjet.config.codec.decode(location.href.slice((location.origin + self.$scramjet.config.prefix).length)));
}
if (url.startsWith("javascript:")) {
@ -21,7 +21,7 @@ export function encodeUrl(url: string, origin?: URL) {
} else if (/^(#|mailto|about|data)/.test(url)) {
return url;
} else if (canParseUrl(url, origin)) {
return location.origin + self.__scramjet$config.prefix + self.__scramjet$config.codec.encode(new URL(url, origin).href);
return location.origin + self.$scramjet.config.prefix + self.$scramjet.config.codec.encode(new URL(url, origin).href);
}
}
@ -30,7 +30,7 @@ export function decodeUrl(url: string) {
if (/^(#|about|data|mailto|javascript)/.test(url)) {
return url;
} else if (canParseUrl(url)) {
return self.__scramjet$config.codec.decode(url.slice((location.origin + self.__scramjet$config.prefix).length))
return self.$scramjet.config.codec.decode(url.slice((location.origin + self.$scramjet.config.prefix).length))
} else {
return url;
}

View file

@ -3,7 +3,7 @@ export function rewriteWorkers(js: string, origin?: URL) {
let str = new String().toString()
//@ts-expect-error
["codecs", "config", "shared", "client"].forEach((script) => {
str += `import "${self.__scramjet$config[script]}"\n`
str += `import "${self.$scramjet.config[script]}"\n`
})
str += rewriteJs(js, origin);

43
src/types.d.ts vendored Normal file
View file

@ -0,0 +1,43 @@
import { encodeUrl, decodeUrl } from "./shared/rewriters/url";
import { rewriteCss } from "./shared/rewriters/css";
import { rewriteHtml, rewriteSrcset } from "./shared/rewriters/html";
import { rewriteJs } from "./shared/rewriters/js";
import { rewriteHeaders } from "./shared/rewriters/headers";
import { rewriteWorkers } from "./shared/rewriters/worker";
import { isScramjetFile } from "./shared/rewriters/html";
import type { Codec } from "./codecs"
import { BareClient } from "@mercuryworkshop/bare-mux";
declare global {
interface Window {
$scramjet: {
bundle: {
encodeUrl: typeof encodeUrl,
decodeUrl: typeof decodeUrl,
rewriteCss: typeof rewriteCss,
rewriteHtml: typeof rewriteHtml,
rewriteSrcset: typeof rewriteSrcset,
rewriteJs: typeof rewriteJs,
rewriteHeaders: typeof rewriteHeaders,
rewriteWorkers: typeof rewriteWorkers,
BareClient: typeof BareClient,
isScramjetFile: typeof isScramjetFile,
}
config: {
prefix: string;
codec: Codec
config: string;
shared: string;
worker: string;
client: string;
codecs: string;
},
codecs: {
none: Codec;
plain: Codec;
base64: Codec;
xor: Codec;
}
}
}
}

View file

@ -7,10 +7,10 @@ declare global {
}
self.ScramjetServiceWorker = class ScramjetServiceWorker {
client: typeof self.__scramjet$bundle.BareClient.prototype;
config: typeof self.__scramjet$config;
constructor(config = self.__scramjet$config) {
this.client = new self.__scramjet$bundle.BareClient();
client: typeof self.$scramjet.bundle.BareClient.prototype;
config: typeof self.$scramjet.config;
constructor(config = self.$scramjet.config) {
this.client = new self.$scramjet.bundle.BareClient();
if (!config.prefix) config.prefix = "/scramjet/";
this.config = config;
}
@ -22,7 +22,7 @@ self.ScramjetServiceWorker = class ScramjetServiceWorker {
async fetch({ request }: FetchEvent) {
const urlParam = new URLSearchParams(new URL(request.url).search);
const { encodeUrl, decodeUrl, rewriteHeaders, rewriteHtml, rewriteJs, rewriteCss, rewriteWorkers } = self.__scramjet$bundle;
const { encodeUrl, decodeUrl, rewriteHeaders, rewriteHtml, rewriteJs, rewriteCss, rewriteWorkers } = self.$scramjet.bundle;
if (urlParam.has("url")) {
return Response.redirect(encodeUrl(urlParam.get("url"), new URL(urlParam.get("url"))))