Fixes worker sandbox problems (#4975)

This commit is contained in:
Henning Dieterichs 2025-09-05 20:27:56 +02:00 committed by GitHub
parent a4d7907bd4
commit 6f3fbe8c3a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 114 additions and 32 deletions

View file

@ -1,37 +1,58 @@
import * as require_ from 'require';
import * as require from 'require';
self.MonacoEnvironment = {
getWorker: function (_moduleId, label) {
const require = require_;
if (!require) {
label = label; // NOOP
}
if (label === 'json') {
return new Worker(new URL('../../../src/language/json/json.worker.ts', import.meta.url), {
type: 'module'
});
return new Worker(
getWorkerBootstrapUrl(
new URL('../../../src/language/json/json.worker.ts?worker', import.meta.url)
)
);
}
if (label === 'css' || label === 'scss' || label === 'less') {
return new Worker(new URL('../../../src/language/css/css.worker.ts', import.meta.url), {
type: 'module'
});
return new Worker(
getWorkerBootstrapUrl(
new URL('../../../src/language/css/css.worker.ts?worker', import.meta.url)
)
);
}
if (label === 'html' || label === 'handlebars' || label === 'razor') {
return new Worker(new URL('../../../src/language/html/html.worker.ts', import.meta.url), {
type: 'module'
});
return new Worker(
getWorkerBootstrapUrl(
new URL('../../../src/language/html/html.worker.ts?worker', import.meta.url)
)
);
}
if (label === 'typescript' || label === 'javascript') {
return new Worker(new URL('../../../src/language/typescript/ts.worker.ts', import.meta.url), {
type: 'module'
});
return new Worker(
getWorkerBootstrapUrl(
new URL('../../../src/language/typescript/ts.worker.ts?worker', import.meta.url)
)
);
}
return new Worker(new URL('../../../src/editor/editor.worker.ts', import.meta.url), {
type: 'module'
});
return new Worker(
getWorkerBootstrapUrl(new URL('../../../src/editor/editor.worker.ts?worker', import.meta.url))
);
}
};
function getWorkerBootstrapUrl(workerScriptUrl) {
const blob = new Blob(
[
[
`const ttPolicy = globalThis.trustedTypes?.createPolicy('defaultWorkerFactory', { createScriptURL: value => value });`,
`globalThis.workerttPolicy = ttPolicy;`,
`importScripts(ttPolicy?.createScriptURL(${JSON.stringify(
workerScriptUrl
)}) ?? ${JSON.stringify(workerScriptUrl)});`,
`globalThis.postMessage({ type: 'vscode-worker-ready' });`
].join('')
],
{ type: 'application/javascript' }
);
return URL.createObjectURL(blob);
}
import 'vs/nls.messages-loader!';
import '../../../src/basic-languages/monaco.contribution';
import '../../../src/language/css/monaco.contribution';
@ -39,7 +60,7 @@ import '../../../src/language/html/monaco.contribution';
import '../../../src/language/json/monaco.contribution';
import '../../../src/language/typescript/monaco.contribution';
const styleSheetUrl = require_.toUrl('vs/style.css');
const styleSheetUrl = require.toUrl('vs/style.css');
const link = document.createElement('link');
link.rel = 'stylesheet';