Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/standalone/browser/services/standaloneWebWorkerService.ts
5243 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { getMonacoEnvironment } from '../../../../base/browser/browser.js';
7
import { WebWorkerDescriptor } from '../../../../platform/webWorker/browser/webWorkerDescriptor.js';
8
import { WebWorkerService } from '../../../../platform/webWorker/browser/webWorkerServiceImpl.js';
9
10
export class StandaloneWebWorkerService extends WebWorkerService {
11
protected override _createWorker(descriptor: WebWorkerDescriptor): Promise<Worker> {
12
const monacoEnvironment = getMonacoEnvironment();
13
if (monacoEnvironment) {
14
if (typeof monacoEnvironment.getWorker === 'function') {
15
const worker = monacoEnvironment.getWorker('workerMain.js', descriptor.label);
16
if (worker !== undefined) {
17
return Promise.resolve(worker);
18
}
19
}
20
}
21
22
return super._createWorker(descriptor);
23
}
24
25
protected override _getWorkerLoadingFailedErrorMessage(descriptor: WebWorkerDescriptor): string | undefined {
26
const examplePath = '\'...?esm\''; // Broken up to avoid detection by bundler plugin
27
return `Failed to load worker script for label: ${descriptor.label}.
28
Ensure your bundler properly bundles modules referenced by "new URL(${examplePath}, import.meta.url)".`;
29
}
30
31
override getWorkerUrl(descriptor: WebWorkerDescriptor): string {
32
const monacoEnvironment = getMonacoEnvironment();
33
if (monacoEnvironment) {
34
if (typeof monacoEnvironment.getWorkerUrl === 'function') {
35
const workerUrl = monacoEnvironment.getWorkerUrl('workerMain.js', descriptor.label);
36
if (workerUrl !== undefined) {
37
const absoluteUrl = new URL(workerUrl, document.baseURI).toString();
38
return absoluteUrl;
39
}
40
}
41
}
42
43
if (!descriptor.esmModuleLocationBundler) {
44
throw new Error(`You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker for the worker label: ${descriptor.label}`);
45
}
46
47
const url = typeof descriptor.esmModuleLocationBundler === 'function' ? descriptor.esmModuleLocationBundler() : descriptor.esmModuleLocationBundler;
48
const urlStr = url.toString();
49
return urlStr;
50
}
51
}
52
53