simplify worker loading logic

This commit is contained in:
Ruben Fiszel
2025-01-17 11:27:56 +01:00
parent 5144fc9baa
commit b7763cff8a
3 changed files with 66 additions and 48 deletions
@@ -1,4 +1,4 @@
import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory'
import { initEnhancedMonacoEnvironment } from 'monaco-languageclient/vscode/services'
// import cssWorker from 'monaco-editor-wrapper/workers/module/css?worker&url'
// import htmlWorker from 'monaco-editor-wrapper/workers/module/html?worker&url'
@@ -6,50 +6,56 @@ import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory'
// import editorWorker from 'monaco-editor-wrapper/workers/module/editor?worker&url'
export function buildWorkerDefinition() {
useWorkerFactory({
workerOverrides: {
ignoreMapping: true,
workerLoaders: {
editorWorkerService: () => {
return new Worker(
new URL('monaco-editor-wrapper/workers/module/editor', import.meta.url),
{
type: 'module'
}
)
},
javascript: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/ts', import.meta.url), {
type: 'module'
})
},
typescript: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/ts', import.meta.url), {
type: 'module'
})
},
json: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/json', import.meta.url), {
type: 'module'
})
},
html: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/html', import.meta.url), {
type: 'module'
})
},
css: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/css', import.meta.url), {
type: 'module'
})
},
graphql: () => {
console.log('Creating graphql worker')
return new Worker(new URL(`./graphql.worker.bundle.js`, import.meta.url), {
name: 'graphql'
})
}
const envEnhanced = initEnhancedMonacoEnvironment()
const getWorker = (moduleId: string, label: string) => {
console.log(`getWorker: moduleId: ${moduleId} label: ${label}`)
let selector = label
let workerLoaders = {
editorWorkerService: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/editor', import.meta.url), {
type: 'module'
})
},
javascript: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/ts', import.meta.url), {
type: 'module'
})
},
typescript: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/ts', import.meta.url), {
type: 'module'
})
},
json: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/json', import.meta.url), {
type: 'module'
})
},
html: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/html', import.meta.url), {
type: 'module'
})
},
css: () => {
return new Worker(new URL('monaco-editor-wrapper/workers/module/css', import.meta.url), {
type: 'module'
})
},
graphql: () => {
console.log('Creating graphql worker')
return new Worker(new URL(`./graphql.worker.bundle.js`, import.meta.url), {
name: 'graphql'
})
}
}
})
const workerFunc = workerLoaders[selector]
if (workerFunc !== undefined) {
return workerFunc()
} else {
throw new Error(`Unimplemented worker ${label} (${moduleId})`)
}
}
envEnhanced.getWorker = getWorker
}
+12 -3
View File
@@ -2,7 +2,8 @@
// import EditableSchemaWrapper from '$lib/components/schema/EditableSchemaWrapper.svelte'
// import FlowBuilder from '$lib/components/FlowBuilder.svelte'
import ScriptBuilder from '$lib/components/ScriptBuilder.svelte'
// import ScriptBuilder from '$lib/components/ScriptBuilder.svelte'
import ScriptEditor from '$lib/components/ScriptEditor.svelte'
// import type { OpenFlow } from '$lib/gen'
// import { writable, type Writable } from 'svelte/store'
@@ -50,7 +51,7 @@
}}
/> -->
<ScriptBuilder
<!-- <ScriptBuilder
script={{
summary: 'foo',
path: 'u/admin/foo',
@@ -58,4 +59,12 @@
language: 'python3',
content: 'print("foo")'
}}
/>
/> -->
<!-- path: "/path/to/script",
code: "console.log('Hello, world!');",
lang: "bun",
tag: "", -->
<div class="h-screen">
<ScriptEditor path="/path/to/script" code="console.log('Hello, world!');" lang="bun" tag="" />
</div>
+3
View File
@@ -57,6 +57,9 @@ const config = {
},
dedupe: ['vscode', 'monaco-editor']
},
worker: {
format: 'es'
},
assetsInclude: ['**/*.wasm']
}