Task Summary
Bring the frontend's Monaco / VS Code language-client stack up to monaco-languageclient v10 (was v8.8.3) and the matching @codingame/monaco-vscode-* v25.1.2 ecosystem. v10 reorganised the public API around three composable wrappers (MonacoVscodeApiWrapper + EditorApp + LanguageClientWrapper), so the editor component is rewritten against the new shape, and the build/test pipeline picks up the codingame v25 quirks the new packages introduce.
Why
- v8.8.3 has been EOL'd by upstream; new feature work and security fixes target the v10 line.
- The codingame v25 stack ships pre-built worker entries, native
Worker(new URL(...)) syntax, Constructable Stylesheets-based CSS, and a whenReady() activation handshake — none of which the older builder workarounds anticipated.
- Several adjacent dependencies (R UDF extension, redundant
@codingame declarations, dead vscode resolution) become superfluous once the new API is in place.
Scope
- API rewrite — swap the v8 single-wrapper config for the v10
MonacoVscodeApiWrapper + EditorApp + LanguageClientWrapper triplet, plus a whenReady()/forceTokenization handshake to fix a TextMate first-paint race.
- Worker bundling — three thin trampoline files re-export the codingame worker entries;
new Worker(new URL("./relative", import.meta.url)) is the only shape webpack 5 treats as a worker entry point AND that esbuild can resolve at spec pre-bundle time.
- Build pipeline — patch
license-webpack-plugin to tolerate the codingame submodules' empty descriptionFileRoot, add a oneOf CSS rule with exportType: 'css-style-sheet', alias the codingame asset packages back to the real css-loader / style-loader install.
- Test pipeline — register a Node ESM loader hook (inline as a
data: URL — no sidecar .mjs) that swallows transitive .css imports, plus stubs for Constructable Stylesheets / CSS.escape / matchMedia / requestIdleCallback / WebSocket.
- Dependency cleanup — drop ~6 codingame side-deps that v10 either ships transitively or no longer needs (textmate-service-override, theme-defaults-default-extension, R default extension, the
vscode package alias and resolution, webpack-bundle-analyzer). Retire R UDF editor support entirely (no upstream codingame R extension exists).
Verification plan
Task Type
Task Summary
Bring the frontend's Monaco / VS Code language-client stack up to
monaco-languageclientv10 (was v8.8.3) and the matching@codingame/monaco-vscode-*v25.1.2 ecosystem. v10 reorganised the public API around three composable wrappers (MonacoVscodeApiWrapper+EditorApp+LanguageClientWrapper), so the editor component is rewritten against the new shape, and the build/test pipeline picks up the codingame v25 quirks the new packages introduce.Why
Worker(new URL(...))syntax, Constructable Stylesheets-based CSS, and awhenReady()activation handshake — none of which the older builder workarounds anticipated.@codingamedeclarations, deadvscoderesolution) become superfluous once the new API is in place.Scope
MonacoVscodeApiWrapper+EditorApp+LanguageClientWrappertriplet, plus awhenReady()/forceTokenization handshake to fix a TextMate first-paint race.new Worker(new URL("./relative", import.meta.url))is the only shape webpack 5 treats as a worker entry point AND that esbuild can resolve at spec pre-bundle time.license-webpack-pluginto tolerate the codingame submodules' emptydescriptionFileRoot, add aoneOfCSS rule withexportType: 'css-style-sheet', alias the codingame asset packages back to the realcss-loader/style-loaderinstall.data:URL — no sidecar.mjs) that swallows transitive.cssimports, plus stubs for Constructable Stylesheets /CSS.escape/matchMedia/requestIdleCallback/ WebSocket.vscodepackage alias and resolution,webpack-bundle-analyzer). Retire R UDF editor support entirely (no upstream codingame R extension exists).Verification plan
yarn installresolves the v10 + v25.1.2 graph cleanlyyarn buildexits 0; worker chunks are bundled (~1.3 MB textmate / ~518 KB extension-host / ~220 KB editor)yarn teststays at 63 / 269 spec parityTask Type