Path: blob/main/src/vs/editor/standalone/browser/services/standaloneWebWorkerService.ts
5243 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}2324protected override _getWorkerLoadingFailedErrorMessage(descriptor: WebWorkerDescriptor): string | undefined {25const examplePath = '\'...?esm\''; // Broken up to avoid detection by bundler plugin26return `Failed to load worker script for label: ${descriptor.label}.27Ensure your bundler properly bundles modules referenced by "new URL(${examplePath}, import.meta.url)".`;28}2930override getWorkerUrl(descriptor: WebWorkerDescriptor): string {31const monacoEnvironment = getMonacoEnvironment();32if (monacoEnvironment) {33if (typeof monacoEnvironment.getWorkerUrl === 'function') {34const workerUrl = monacoEnvironment.getWorkerUrl('workerMain.js', descriptor.label);35if (workerUrl !== undefined) {36const absoluteUrl = new URL(workerUrl, document.baseURI).toString();37return absoluteUrl;38}39}40}4142if (!descriptor.esmModuleLocationBundler) {43throw new Error(`You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker for the worker label: ${descriptor.label}`);44}4546const url = typeof descriptor.esmModuleLocationBundler === 'function' ? descriptor.esmModuleLocationBundler() : descriptor.esmModuleLocationBundler;47const urlStr = url.toString();48return urlStr;49}50}515253