mirror of
https://github.com/MercuryWorkshop/scramjet.git
synced 2025-05-13 06:20:02 -04:00
migrate to $scramjet object from __scramjet
This commit is contained in:
parent
146c202ae2
commit
cf9e5a3418
13 changed files with 77 additions and 67 deletions
|
@ -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;
|
|
@ -12,4 +12,4 @@ function scope(identifier: any) {
|
|||
}
|
||||
|
||||
// shorthand because this can get out of hand reall quickly
|
||||
window.__s = scope;
|
||||
window.$s = scope;
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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": ""
|
||||
}));
|
||||
});
|
||||
|
|
|
@ -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})`;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
43
src/types.d.ts
vendored
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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"))))
|
||||
|
|
|
@ -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&family=Inter+Tight:ital,wght@0,100..900;1,100..900&family=Inter:wght@100..900&display=swap&" 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>
|
|
@ -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>
|
||||
`
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue