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
4779 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
override getWorkerUrl(descriptor: WebWorkerDescriptor): string {
26
const monacoEnvironment = getMonacoEnvironment();
27
if (monacoEnvironment) {
28
if (typeof monacoEnvironment.getWorkerUrl === 'function') {
29
const workerUrl = monacoEnvironment.getWorkerUrl('workerMain.js', descriptor.label);
30
if (workerUrl !== undefined) {
31
const absoluteUrl = new URL(workerUrl, document.baseURI).toString();
32
return absoluteUrl;
33
}
34
}
35
}
36
37
if (!descriptor.esmModuleLocationBundler) {
38
throw new Error(`You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker for the worker label: ${descriptor.label}`);
39
}
40
41
const url = typeof descriptor.esmModuleLocationBundler === 'function' ? descriptor.esmModuleLocationBundler() : descriptor.esmModuleLocationBundler;
42
const urlStr = url.toString();
43
return urlStr;
44
}
45
}
46
47