aboutsummaryrefslogtreecommitdiffstats
path: root/src/background.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/background.ts')
-rw-r--r--src/background.ts67
1 files changed, 67 insertions, 0 deletions
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);