Move monaco to an external dependency - #50463
Move monaco to an external dependency#50463Noraa Junker (noraa-junker) wants to merge 7 commits into
Conversation
…om/microsoft/PowerToys into dev/noraa-junker/monaco-dependency
There was a problem hiding this comment.
🟡 Changes recommended
The current build-time download approach has path/evaluation-order issues that can result in Monaco assets not being included on clean builds.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Moves the Monaco Editor payload from a vendored-in src/Monaco/monacoSRC/min/... tree to an externally fetched asset, downloaded from the NPM registry as part of the build, and updates docs/ignore rules accordingly.
Changes:
- Removes checked-in Monaco
minlanguage bundles undersrc/Monaco/monacoSRC/min/vs/basic-languages/*. - Adds a pre-build download step (
downloadMonaco.ps1) invoked byFilePreviewCommon.csproj. - Updates Registry Preview to build
FilePreviewCommonfirst and adjusts developer docs and.gitignore.
File summaries
| File | Description |
|---|---|
| src/Monaco/monacoSRC/min/vs/basic-languages/yaml/yaml.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/xml/xml.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/vb/vb.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/typespec/typespec.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/typescript/typescript.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/twig/twig.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/tcl/tcl.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/swift/swift.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/sparql/sparql.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/sophia/sophia.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/shell/shell.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/scheme/scheme.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/sb/sb.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/rust/rust.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/restructuredtext/restructuredtext.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/redis/redis.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/r/r.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/qsharp/qsharp.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/python/python.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/pug/pug.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/powershell/powershell.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/pla/pla.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/pascaligo/pascaligo.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/pascal/pascal.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/objective-c/objective-c.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/msdax/msdax.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/mips/mips.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/mdx/mdx.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/markdown/markdown.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/m3/m3.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/lua/lua.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/liquid/liquid.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/lexon/lexon.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/less/less.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/kotlin/kotlin.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/java/java.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/ini/ini.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/html/html.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/hcl/hcl.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/graphql/graphql.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/go/go.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/fsharp/fsharp.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/flow9/flow9.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/ecl/ecl.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/dockerfile/dockerfile.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/dart/dart.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/cypher/cypher.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/css/css.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/csp/csp.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/csharp/csharp.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/cpp/cpp.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/coffee/coffee.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/cameligo/cameligo.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/bicep/bicep.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/bat/bat.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/azcli/azcli.js | Removes vendored Monaco language bundle. |
| src/Monaco/monacoSRC/min/vs/basic-languages/apex/apex.js | Removes vendored Monaco language bundle. |
| src/common/FilePreviewCommon/FilePreviewCommon.csproj | Adds an MSBuild target to download Monaco prior to build. |
| src/common/FilePreviewCommon/downloadMonaco.ps1 | New script to fetch and extract Monaco from the NPM registry. |
| src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewUILib.csproj | Adds build-time dependency on FilePreviewCommon for Monaco availability. |
| doc/devdocs/common/monaco-editor.md | Updates Monaco documentation to reflect external download flow. |
| doc/devdocs/common/FilePreviewCommon.md | Updates Monaco update instructions to point to the script version pin. |
| .gitignore | Ignores generated Monaco source folder. |
Review details
Suppressed comments (1)
src/common/FilePreviewCommon/downloadMonaco.ps1:23
- The destination path is set to "src\monaco\MonacoSRC", but the repo’s Monaco assets are under "src\Monaco\monacoSRC" (see src/Monaco.props). With the current path/casing, the download will write to a new directory that none of the build/link logic consumes.
- Files reviewed: 91/109 changed files
- Comments generated: 4
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| <!-- Download Monaco Editor with the help of the script downloadMonaco.ps1 before the build --> | ||
| <Target Name="DownloadMonacoEditor" BeforeTargets="Build"> | ||
| <Exec Command="powershell -ExecutionPolicy Bypass -File "$(ProjectDir)downloadMonaco.ps1"" /> | ||
| </Target> |
| <!-- Ensures FilePreviewCommon is built before this project, so that Monaco is available --> | ||
| <ItemGroup> | ||
| <ProjectReference Include="..\..\..\common\FilePreviewCommon\FilePreviewCommon.csproj" /> |
| @@ -0,0 +1,29 @@ | |||
| $CurrentDir = Get-Location | |||
| $repoRoot = (Get-Item -Path $PSScriptRoot).Parent.Parent.Parent.FullName | |||
| $tempRoot = Join-Path $env:TEMP "monaco-editor" | |||
|
|
||
| Monaco is embedded into PowerToys' WinUI 3 applications using WebView2. This integration allows PowerToys to leverage Monaco's web-based capabilities within desktop applications. | ||
|
|
||
| The [`FilePreviewCommon`](/src/common/FilePreviewCommon/FilePreviewCommon.csproj) project downloads the monaco editor source code and adds it to [`/src/Monaco/MonacoSRC`] before the build step. |
|
Copilot Apply your suggested fixes. Move the generation to monaco.props and only make it download if MonacoSRC does not exist yet |
Co-authored-by: noraa-junker <58633848+noraa-junker@users.noreply.github.com>
Implemented in d5958c5. Monaco generation now runs from |
Summary of the Pull Request
Moves Monaco from an inline dependency to an extern one through downloading Monaco from NPM as a build step.
PR Checklist
Detailed Description of the Pull Request / Additional comments
Validation Steps Performed