Path: blob/main/src/vs/editor/standalone/browser/services/standaloneWebWorkerService.ts
4779 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { getMonacoEnvironment } from '../../../../base/browser/browser.js';6import { WebWorkerDescriptor } from '../../../../platform/webWorker/browser/webWorkerDescriptor.js';7import { WebWorkerService } from '../../../../platform/webWorker/browser/webWorkerServiceImpl.js';89export class StandaloneWebWorkerService extends WebWorkerService {10protected override _createWorker(descriptor: WebWorkerDescriptor): Promise<Worker> {11const monacoEnvironment = getMonacoEnvironment();12if (monacoEnvironment) {13if (typeof monacoEnvironment.getWorker === 'function') {14const worker = monacoEnvironment.getWorker('workerMain.js', descriptor.label);15if (worker !== undefined) {16return Promise.resolve(worker);17}18}19}2021return super._createWorker(descriptor);22}2324override getWorkerUrl(descriptor: WebWorkerDescriptor): string {25const monacoEnvironment = getMonacoEnvironment();26if (monacoEnvironment) {27if (typeof monacoEnvironment.getWorkerUrl === 'function') {28const workerUrl = monacoEnvironment.getWorkerUrl('workerMain.js', descriptor.label);29if (workerUrl !== undefined) {30const absoluteUrl = new URL(workerUrl, document.baseURI).toString();31return absoluteUrl;32}33}34}3536if (!descriptor.esmModuleLocationBundler) {37throw new Error(`You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker for the worker label: ${descriptor.label}`);38}3940const url = typeof descriptor.esmModuleLocationBundler === 'function' ? descriptor.esmModuleLocationBundler() : descriptor.esmModuleLocationBundler;41const urlStr = url.toString();42return urlStr;43}44}454647