aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes')
-rw-r--r--src/routes/+page.svelte11
-rw-r--r--src/routes/Monaco.svelte46
-rw-r--r--src/routes/userland.d.ts10
3 files changed, 34 insertions, 33 deletions
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 7320c2a..2ad013f 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -2,8 +2,10 @@
import { onMount } from 'svelte';
import Monaco from './Monaco.svelte';
let content_script = $state('');
- let default_value = $state(`// Do not put untrusted content here!
-// See https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Intercept_HTTP_requests and https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest for a tutorial on how to handle things.
+ let default_value =
+ $state(`// Do not put untrusted content here! See https://en.wikipedia.org/wiki/Self-XSS!
+// The extension authors hold no liability for you stupidly putting things here without knowing any better.
+// See https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions for a tutorial on how to handle things.
// Content saves on every keystroke due to laziness.
// Reload (disable & re-enable) extension or restart browser to apply changes.
`);
@@ -33,10 +35,7 @@
</script>
{#if mounted}
- <Monaco
- defaultValue={default_value}
- bind:value={content_script}
- />
+ <Monaco defaultValue={default_value} bind:value={content_script} />
{:else}
Getting Storage
{/if}
diff --git a/src/routes/Monaco.svelte b/src/routes/Monaco.svelte
index 295b432..8d5d2a2 100644
--- a/src/routes/Monaco.svelte
+++ b/src/routes/Monaco.svelte
@@ -6,11 +6,10 @@
// import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker';
// import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker';
import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker';
- // @ts-ignore
- import wrqTypes from '@types/webextension-polyfill/namespaces/webRequest.d.ts?raw';
- // @ts-ignore
- import evTypes from '@types/webextension-polyfill/namespaces/events.d.ts?raw';
+ import typeFiles from '$lib/webext-polyfill';
import userland from './userland.d.ts?raw';
+ // import tsconf from '$lib/tsconfig.jsonc?raw';
+ // import j5 from 'json5';
let divEl: HTMLDivElement | null = $state(null);
let editor: monaco.editor.IStandaloneCodeEditor = $state(null as any);
@@ -20,8 +19,7 @@
typeDefs = `import type { UserlandBrowser } from './userland';
declare global {
/**
- * The subset of the host extension's browser type available to the extension
- * Note: We don't properly sandbox anything. You can likely easily get access to shit outside of here from the browser global.
+ * The host extension's browser type available to the extension
*/
declare const browser: UserlandBrowser;
}
@@ -85,33 +83,35 @@ declare global {
});
if (!divEl) while (!divEl) await new Promise((rs) => setTimeout(rs, 100));
for (const [_filename, contents] of Object.entries(
- (await import('./filemap.js')).default
+ (await import('./filemap.js')).default,
)) {
Monaco.languages.typescript.typescriptDefaults.addExtraLib(
- contents
+ contents,
// ,_filename
);
}
- Monaco.languages.typescript.typescriptDefaults.addExtraLib(
- evTypes,
- 'node_modules/@types/webextension-polyfill/namespaces/events.d.ts'
- );
- Monaco.languages.typescript.typescriptDefaults.addExtraLib(
- wrqTypes,
- 'node_modules/@types/webextension-polyfill/namespaces/webRequest.d.ts'
- );
- Monaco.languages.typescript.typescriptDefaults.addExtraLib(
- `export * from './namespaces/webRequest';`,
- 'node_modules/@types/webextension-polyfill/index.d.ts'
- );
+ for (const [file, contents] of Object.entries(typeFiles).filter(([name]) =>
+ name.toLowerCase().endsWith('.ts'),
+ ))
+ Monaco.languages.typescript.typescriptDefaults.addExtraLib(
+ contents,
+ file,
+ );
Monaco.languages.typescript.typescriptDefaults.addExtraLib(
userland,
- 'node_modules/@types/redirext/userland.d.ts'
+ 'node_modules/@types/redirext/userland.d.ts',
);
Monaco.languages.typescript.typescriptDefaults.addExtraLib(
typeDefs,
- 'node_modules/@types/redirext/index.d.ts'
+ 'node_modules/@types/redirext/index.d.ts',
);
+ // try {
+ // Monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
+ // ...j5.parse(tsconf).compilerOptions,
+ // moduleResolution: undefined,
+ // allowNonTsExtensions: true,
+ // });
+ // } catch (e) {}
editor = Monaco.editor.create(divEl, {
value: defaultValue,
language: 'typescript',
@@ -124,7 +124,7 @@ declare global {
const el = document.createElement('div');
el.setAttribute(
'style',
- 'display:flex;width:100vw;height:100vh;position:fixed;left:0;top:0;align-items:center;justify-content:center;text-align:center;z-index:9999;background:#23222B;'
+ 'display:flex;width:100vw;height:100vh;position:fixed;left:0;top:0;align-items:center;justify-content:center;text-align:center;z-index:9999;background:#23222B;',
);
el.textContent = 'Popped out';
document.body.appendChild(el);
diff --git a/src/routes/userland.d.ts b/src/routes/userland.d.ts
index 7b659b8..11275ce 100644
--- a/src/routes/userland.d.ts
+++ b/src/routes/userland.d.ts
@@ -1,4 +1,6 @@
-import type { WebRequest } from 'webextension-polyfill';
-export type UserlandBrowser = {
- get webRequest(): WebRequest.Static;
-};
+import type Browser from 'webextension-polyfill';
+// export type UserlandBrowser = {
+// get webRequest(): WebRequest.Static;
+// };
+
+export type UserlandBrowser = Browser.Browser;