From 54a41f2431c3d60f5845a15447f13413299e41f2 Mon Sep 17 00:00:00 2001 From: memdmp Date: Mon, 24 Feb 2025 01:09:00 +0100 Subject: feat: da extension --- src/app.css | 9 +++ src/app.d.ts | 17 ++++++ src/app.html | 12 ++++ src/background.ts | 67 +++++++++++++++++++++ src/lib/index.ts | 1 + src/routes/+layout.svelte | 20 +++++++ src/routes/+layout.ts | 2 + src/routes/+page.svelte | 42 ++++++++++++++ src/routes/Monaco.svelte | 144 ++++++++++++++++++++++++++++++++++++++++++++++ src/routes/browser.d.ts | 4 ++ src/routes/userland.d.ts | 4 ++ 11 files changed, 322 insertions(+) create mode 100644 src/app.css create mode 100644 src/app.d.ts create mode 100644 src/app.html create mode 100644 src/background.ts create mode 100644 src/lib/index.ts create mode 100644 src/routes/+layout.svelte create mode 100644 src/routes/+layout.ts create mode 100644 src/routes/+page.svelte create mode 100644 src/routes/Monaco.svelte create mode 100644 src/routes/browser.d.ts create mode 100644 src/routes/userland.d.ts (limited to 'src') diff --git a/src/app.css b/src/app.css new file mode 100644 index 0000000..3e1f888 --- /dev/null +++ b/src/app.css @@ -0,0 +1,9 @@ +@import 'tailwindcss'; +html { + background: var(--bg, #23222b); + color: var(--fg, #dedede); +} +/* html.light { + background: #dedede; + color: #191919; +} */ diff --git a/src/app.d.ts b/src/app.d.ts new file mode 100644 index 0000000..c689736 --- /dev/null +++ b/src/app.d.ts @@ -0,0 +1,17 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces + +import Browser from 'webextension-polyfill'; +declare const browser: typeof Browser; + +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..77a5ff5 --- /dev/null +++ b/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/src/background.ts b/src/background.ts new file mode 100644 index 0000000..65d7187 --- /dev/null +++ b/src/background.ts @@ -0,0 +1,67 @@ +import browser from 'webextension-polyfill'; +import type { UserlandBrowser } from './routes/userland'; + +console.debug('Loading Extension'); +setTimeout(async () => { + const { sc } = await browser.storage.local.get('sc'); + if (typeof sc === 'undefined') { + console.warn('No value set!'); + } else if (typeof sc !== 'string') { + throw new Error('typeof sc is not str nor undefined'); + } else { + console.debug('Found Script (length', sc.length, ':3)'); + console.debug('Loading esbuild-wasm'); + const { initialize, transform } = await import('esbuild-wasm').catch( + (e) => { + console.error('Failed to load esbuild-wasm!'); + throw e; + } + ); + console.debug("Loading esbuild's WASM Module"); + const wasmModule = new WebAssembly.Module( + await fetch('./generated/esbuild.wasm') + .catch((e) => { + console.error('Failed to fetch() the esbuild wasm file.'); + throw e; + }) + .then((v) => v.arrayBuffer()) + ); + console.debug('Attempting to initialize esbuild-wasm'); + try { + await initialize({ + wasmModule, + worker: false, + }); + } catch (error) { + console.error(error); + throw new Error('Failed to initialize esbuild - see above error'); + } + console.debug('Transforming Content'); + const built = await transform(sc, { + loader: 'ts', + }); + console.debug('Got result', built); + const b = browser; + const brow: UserlandBrowser = { + get webRequest() { + return b.webRequest; + }, + }; + const f = new Function( + 'browser', + built.code.includes('await') + ? `return (async()=>{${built.code} +})();` + : built.code + ); + console.debug('Environment Information:', { + func: f, + browser: brow, + realBrowser: b, + }); + (globalThis as any).browser = brow; + console.debug('Evaluating...'); + await f(brow); + console.debug('Function Exited'); + } +}, 0); diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..b0e82a6 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,20 @@ + + +{#if mounted} + {@render children()} +{:else} +

Waiting on Mount

+{/if} diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts new file mode 100644 index 0000000..748cfd9 --- /dev/null +++ b/src/routes/+layout.ts @@ -0,0 +1,2 @@ +export const prerender = true; +export const csr = true; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..7320c2a --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,42 @@ + + +{#if mounted} + +{:else} + Getting Storage +{/if} diff --git a/src/routes/Monaco.svelte b/src/routes/Monaco.svelte new file mode 100644 index 0000000..efdd67a --- /dev/null +++ b/src/routes/Monaco.svelte @@ -0,0 +1,144 @@ + + +
diff --git a/src/routes/browser.d.ts b/src/routes/browser.d.ts new file mode 100644 index 0000000..ed54792 --- /dev/null +++ b/src/routes/browser.d.ts @@ -0,0 +1,4 @@ +import Browser from 'webextension-polyfill'; +declare global { + declare const browser: typeof Browser; +} diff --git a/src/routes/userland.d.ts b/src/routes/userland.d.ts new file mode 100644 index 0000000..7b659b8 --- /dev/null +++ b/src/routes/userland.d.ts @@ -0,0 +1,4 @@ +import type { WebRequest } from 'webextension-polyfill'; +export type UserlandBrowser = { + get webRequest(): WebRequest.Static; +}; -- cgit v1.2.3