diff options
Diffstat (limited to 'src/routes')
-rw-r--r-- | src/routes/+page.svelte | 11 | ||||
-rw-r--r-- | src/routes/Monaco.svelte | 46 | ||||
-rw-r--r-- | src/routes/userland.d.ts | 10 |
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; |