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"))))

View file

@ -4,8 +4,8 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="prefetch" href="/scram/scramjet.worker.js" type="module">
<link rel="prefetch" href="/scram/scramjet.shared.js" type="module">
<link rel="prefetch" href="/scram/scramjet.worker.js">
<link rel="prefetch" href="/scram/scramjet.shared.js">
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&amp;family=Inter+Tight:ital,wght@0,100..900;1,100..900&amp;family=Inter:wght@100..900&amp;display=swap&amp;" rel="stylesheet">
<style>
body, html, #app {
@ -22,8 +22,8 @@
<body>
<script src="https://unpkg.com/dreamland"></script>
<script src="/baremux/index.js" defer></script>
<script src="/scram/scramjet.codecs.js"></script>
<script src="/scram/scramjet.config.js"></script>
<script src="/scram/scramjet.codecs.js" defer></script>
<script src="/scram/scramjet.config.js" defer></script>
<script src="ui.js" defer></script>
</body>
</html>

View file

@ -1,5 +1,5 @@
navigator.serviceWorker.register("./sw.js", {
scope: __scramjet$config.prefix
scope: $scramjet.config.prefix
})
const connection = new BareMux.BareMuxConnection("/baremux/worker.js")
const flex = css`display: flex;`;
@ -88,7 +88,7 @@ function App() {
<button on:click=${() => window.open(this.urlencoded)}>open in fullscreen</button>
</div>
</div>
<input class="bar" bind:value=${use(store.url)} on:input=${(e) => (store.url = e.target.value)} on:keyup=${(e) => e.keyCode == 13 && console.log(this.urlencoded = __scramjet$config.prefix + __scramjet$config.codec.encode(e.target.value))}></input>
<input class="bar" bind:value=${use(store.url)} on:input=${(e) => (store.url = e.target.value)} on:keyup=${(e) => e.keyCode == 13 && console.log(this.urlencoded = $scramjet.config.prefix + $scramjet.config.codec.encode(e.target.value))}></input>
<iframe src=${use(this.urlencoded)}></iframe>
</div>
`