From 9f39c0e6fbe393e4e1c5cb75eb34f6c94dc91ad0 Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Fri, 6 Dec 2024 21:52:29 +0800 Subject: [PATCH] feat: integrate language server (#1) --- .github/workflows/deploy.yml | 11 +- .gitignore | 9 +- lsp/Cargo.lock | 589 ++++++++++++++++++ lsp/Cargo.toml | 20 + lsp/src/lib.rs | 146 +++++ packages/webassembly-playground/package.json | 3 + packages/webassembly-playground/src/index.tsx | 1 + .../webassembly-playground/src/lsp/index.ts | 285 +++++++++ .../webassembly-playground/src/ui/App.tsx | 2 + .../webassembly-playground/src/ui/Editor.tsx | 52 +- packages/webassembly-playground/src/util.ts | 12 + .../webassembly-playground/webpack.config.js | 5 +- pnpm-lock.yaml | 560 +++++++++++++++++ 13 files changed, 1666 insertions(+), 29 deletions(-) create mode 100644 lsp/Cargo.lock create mode 100644 lsp/Cargo.toml create mode 100644 lsp/src/lib.rs create mode 100644 packages/webassembly-playground/src/lsp/index.ts diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 96c2f4c..fe3564b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -16,7 +16,10 @@ jobs: - name: install node uses: actions/setup-node@v4 with: - node-version-file: ".nvmrc" + node-version-file: ".nvmrc" + + - name: install wasm-pack + run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - name: install pnpm run: | @@ -27,7 +30,11 @@ jobs: run: pnpm install - name: build - run: pnpm --filter "webassembly-playground" run build + run: | + cd lsp + wasm-pack build --no-pack --target web + cd .. + pnpm --filter "webassembly-playground" run build - name: deploy to github pages uses: peaceiris/actions-gh-pages@v3 diff --git a/.gitignore b/.gitignore index fd74315..cb935a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ -node_modules/ -dist/ \ No newline at end of file +node_modules/ +dist/ +target/ +**/*.rs.bk +bin/ +pkg/ +wasm-pack.log diff --git a/lsp/Cargo.lock b/lsp/Cargo.lock new file mode 100644 index 0000000..d2020f4 --- /dev/null +++ b/lsp/Cargo.lock @@ -0,0 +1,589 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "countme" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "fluent-uri" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "js-sys" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.167" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" + +[[package]] +name = "line-index" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e27e0ed5a392a7f5ba0b3808a2afccff16c64933312c84b57618b49d1209bd2" +dependencies = [ + "nohash-hasher", + "text-size", +] + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "lsp" +version = "0.0.0" +dependencies = [ + "console_error_panic_hook", + "parking_lot", + "serde", + "serde-wasm-bindgen", + "wasm-bindgen", + "wat_service", +] + +[[package]] +name = "lsp-types" +version = "0.97.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53353550a17c04ac46c585feb189c2db82154fc84b79c7a66c96c2c644f66071" +dependencies = [ + "bitflags", + "fluent-uri", + "serde", + "serde_json", + "serde_repr", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "oorandom" +version = "11.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rowan" +version = "0.15.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a542b0253fa46e632d27a1dc5cf7b930de4df8659dc6e720b647fc72147ae3d" +dependencies = [ + "countme", + "hashbrown 0.14.5", + "rustc-hash 1.1.0", + "text-size", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "salsa" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b84d9f96071f3f3be0dc818eae3327625d8ebc95b58da37d6850724f31d3403" +dependencies = [ + "crossbeam-utils", + "indexmap 1.9.3", + "lock_api", + "log", + "oorandom", + "parking_lot", + "rustc-hash 1.1.0", + "salsa-macros", + "smallvec", +] + +[[package]] +name = "salsa-macros" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3904a4ba0a9d0211816177fd34b04c7095443f8cdacd11175064fe541c8fe2" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "text-size" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233" + +[[package]] +name = "tiny_pretty" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b3f46f0549180b9c6f7f76270903f1a06867c43a03998b99dce81aa1760c3b2" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "wasm-bindgen" +version = "0.2.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.90", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" + +[[package]] +name = "wat_formatter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c09aca95c4f47a9eafe68f8f4ff2314b11bb3ed0d0b1ce83213d30e939d0179" +dependencies = [ + "line-index", + "rowan", + "tiny_pretty", + "wat_syntax", +] + +[[package]] +name = "wat_parser" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52d010134f3eb2ffe5e65164dbf62666fad6362f9f97f2dc47575cc8af998456" +dependencies = [ + "rowan", + "wat_syntax", + "winnow", +] + +[[package]] +name = "wat_service" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa716d383d45db95f43761a45cb6a954e428b0e95abdee1d43c0eda6d5ac97a1" +dependencies = [ + "indexmap 2.7.0", + "line-index", + "lsp-types", + "rowan", + "rustc-hash 2.1.0", + "salsa", + "smallvec", + "wat_formatter", + "wat_parser", + "wat_syntax", +] + +[[package]] +name = "wat_syntax" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68af40e10d7df682e2547ffff9d6d81e5077a48245d0cf86b1d265d9f2c8cea9" +dependencies = [ + "rowan", +] + +[[package]] +name = "web-sys" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] diff --git a/lsp/Cargo.toml b/lsp/Cargo.toml new file mode 100644 index 0000000..8575a07 --- /dev/null +++ b/lsp/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "lsp" +version = "0.0.0" +authors = ["Pig Fang "] +edition = "2021" +publish = false + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +console_error_panic_hook = "0.1" +parking_lot = { version = "0.11.2", features = ["wasm-bindgen"] } +serde = "1.0" +serde-wasm-bindgen = "0.6" +wasm-bindgen = "0.2" +wat_service = "0.1" + +[profile.release] +opt-level = "s" diff --git a/lsp/src/lib.rs b/lsp/src/lib.rs new file mode 100644 index 0000000..8508f72 --- /dev/null +++ b/lsp/src/lib.rs @@ -0,0 +1,146 @@ +use serde_wasm_bindgen::from_value; +use wasm_bindgen::prelude::*; +use wat_service::LanguageService; + +#[wasm_bindgen] +pub struct LanguageServer { + service: LanguageService, +} + +#[wasm_bindgen] +impl LanguageServer { + #[wasm_bindgen(constructor)] + pub fn new() -> Self { + console_error_panic_hook::set_once(); + Self { + service: LanguageService::default(), + } + } + + #[wasm_bindgen] + pub fn initialize(&mut self, params: JsValue) -> Result { + to_value(&self.service.initialize(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen] + pub fn commit(&mut self, uri: JsValue, content: String) -> Result<(), JsValue> { + self.service.commit(from_value(uri)?, content); + Ok(()) + } + + #[wasm_bindgen(js_name = "callHierarchyIncomingCalls")] + pub fn call_hierarchy_incoming_calls(&self, params: JsValue) -> Result { + to_value( + &self + .service + .call_hierarchy_incoming_calls(from_value(params)?), + ) + .map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "callHierarchyOutgoingCalls")] + pub fn call_hierarchy_outgoing_calls(&self, params: JsValue) -> Result { + to_value( + &self + .service + .call_hierarchy_outgoing_calls(from_value(params)?), + ) + .map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "codeAction")] + pub fn code_action(&self, params: JsValue) -> Result { + to_value(&self.service.code_action(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen] + pub fn completion(&self, params: JsValue) -> Result { + to_value(&self.service.completion(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "documentSymbol")] + pub fn document_symbol(&self, params: JsValue) -> Result { + to_value(&self.service.document_symbol(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "findReferences")] + pub fn find_references(&self, params: JsValue) -> Result { + to_value(&self.service.find_references(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "foldingRange")] + pub fn folding_range(&self, params: JsValue) -> Result { + to_value(&self.service.folding_range(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen] + pub fn formatting(&self, params: JsValue) -> Result { + to_value(&self.service.formatting(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "gotoDeclaration")] + pub fn goto_declaration(&self, params: JsValue) -> Result { + to_value(&self.service.goto_declaration(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "gotoDefinition")] + pub fn goto_definition(&self, params: JsValue) -> Result { + to_value(&self.service.goto_definition(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "gotoTypeDefinition")] + pub fn goto_type_definition(&self, params: JsValue) -> Result { + to_value(&self.service.goto_type_definition(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen] + pub fn hover(&self, params: JsValue) -> Result { + to_value(&self.service.hover(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "inlayHint")] + pub fn inlay_hint(&self, params: JsValue) -> Result { + to_value(&self.service.inlay_hint(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "prepareCallHierarchy")] + pub fn prepare_call_hierarchy(&self, params: JsValue) -> Result { + to_value(&self.service.prepare_call_hierarchy(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "prepareRename")] + pub fn prepare_rename(&self, params: JsValue) -> Result { + to_value(&self.service.prepare_rename(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "pullDiagnostics")] + pub fn pull_diagnostics(&self, uri: JsValue) -> Result { + to_value(&self.service.pull_diagnostics(from_value(uri)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "rangeFormatting")] + pub fn range_formatting(&self, params: JsValue) -> Result { + to_value(&self.service.range_formatting(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen] + pub fn rename(&self, params: JsValue) -> Result { + to_value(&self.service.rename(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "semanticTokensFull")] + pub fn semantic_tokens_full(&self, params: JsValue) -> Result { + to_value(&self.service.semantic_tokens_full(from_value(params)?)).map_err(JsValue::from) + } + + #[wasm_bindgen(js_name = "semanticTokensRange")] + pub fn semantic_tokens_range(&self, params: JsValue) -> Result { + to_value(&self.service.semantic_tokens_range(from_value(params)?)).map_err(JsValue::from) + } +} + +pub fn to_value( + value: &T, +) -> Result { + value.serialize(&serde_wasm_bindgen::Serializer::json_compatible()) +} diff --git a/packages/webassembly-playground/package.json b/packages/webassembly-playground/package.json index 7b9aeb9..8b351be 100644 --- a/packages/webassembly-playground/package.json +++ b/packages/webassembly-playground/package.json @@ -39,10 +39,13 @@ "webpack-merge": "^5.10.0" }, "dependencies": { + "@codingame/monaco-languageclient": "^0.17.4", + "@codingame/monaco-vscode-api": "^11.1.1", "clsx": "^2.1.1", "console-feed": "^3.6.0", "jotai": "^2.10.3", "monaco-editor": "^0.52.0", + "monaco-editor-wrapper": "^5.5.3", "react": "^18.3.1", "react-dom": "^18.3.1", "wabt": "1.0.32" diff --git a/packages/webassembly-playground/src/index.tsx b/packages/webassembly-playground/src/index.tsx index 8804715..72e30db 100644 --- a/packages/webassembly-playground/src/index.tsx +++ b/packages/webassembly-playground/src/index.tsx @@ -1,5 +1,6 @@ import { createRoot } from "react-dom/client"; import App from "./ui/App"; +import "./lsp"; if ("serviceWorker" in navigator) { navigator.serviceWorker.register( diff --git a/packages/webassembly-playground/src/lsp/index.ts b/packages/webassembly-playground/src/lsp/index.ts new file mode 100644 index 0000000..f92971a --- /dev/null +++ b/packages/webassembly-playground/src/lsp/index.ts @@ -0,0 +1,285 @@ +import type * as monaco from "monaco-editor"; +import { + MonacoToProtocolConverter, + ProtocolToMonacoConverter, +} from "@codingame/monaco-languageclient"; +import init, { LanguageServer } from "../../../../lsp/pkg/lsp"; + +export type LanguageServerWrapper = monaco.IDisposable & { + commit(uri: string, content: string): void; + pullDiagnostics(model: monaco.editor.ITextModel): any; +}; + +export async function startLanguageServer(): Promise { + const [monaco] = await Promise.all([import("monaco-editor"), init()]); + const languageServer = new LanguageServer(); + + monaco.languages.register({ id: "wat", extensions: [".wat"] }); + monaco.languages.setMonarchTokensProvider("wat", { + brackets: [{ open: "(", close: ")", token: "delimiter.parenthesis" }], + keywords: [ + "module", + "func", + "type", + "param", + "result", + "local", + "end", + "if", + "then", + "else", + "block", + "loop", + "data", + "elem", + "declare", + "export", + "global", + "memory", + "import", + "start", + "table", + "item", + "offset", + "mut", + ], + typeKeywords: ["i32", "i64", "f32", "f64", "v128", "funcref", "externref"], + tokenizer: { + root: [ + [ + /[a-z_$][\w.$]*/, + { + cases: { + "@typeKeywords": "type.identifier", + "@keywords": "keyword", + "@default": "operators", + }, + }, + ], + [/$[\w.$-_]+/, "variable.name"], + { include: "@whitespace" }, + [/[()]/, "@brackets"], + [/\d*\.\d+([eE][\-+]?\d+)?/, "number.float"], + [/0[xX][0-9a-fA-F]+/, "number.hex"], + [/\d+/, "number"], + [/"([^"\\]|\\.)*$/, "string.invalid"], + [/"/, { token: "string.quote", bracket: "@open", next: "@string" }], + ], + comment: [ + [/[^;)]+/, "comment"], + [/;\)/, "comment", "@pop"], + [/[;)]/, "comment"], + ], + string: [ + [/[^\\"]+/, "string"], + [/"/, { token: "string.quote", bracket: "@close", next: "@pop" }], + ], + whitespace: [ + [/[ \t\r\n]+/, "white"], + [/\(;/, "comment", "@comment"], + [/;;.*$/, "comment"], + ], + }, + }); + + const m2p = new MonacoToProtocolConverter(monaco); + const p2m = new ProtocolToMonacoConverter(monaco); + + const createModelListener = monaco.editor.onDidCreateModel(async (model) => { + if (model.getLanguageId() === "wat") { + const languageServer = await languageServerPromise; + languageServer.commit(model.uri.toString(), model.getValue()); + updateDiagnosticMarkers(languageServer, model); + + model.onDidChangeContent(() => { + languageServer.commit(model.uri.toString(), model.getValue()); + updateDiagnosticMarkers(languageServer, model); + }); + } + }); + function updateDiagnosticMarkers( + languageServer: LanguageServerWrapper, + model: monaco.editor.ITextModel, + ) { + const diagnostics = languageServer.pullDiagnostics(model); + monaco.editor.setModelMarkers( + model, + "wat", + p2m.asDiagnostics(diagnostics.items) ?? [], + ); + } + const completionProvider = monaco.languages.registerCompletionItemProvider( + "wat", + { + triggerCharacters: ["$", "("], + provideCompletionItems(model, position, context) { + return p2m.asCompletionResult( + languageServer.completion( + m2p.asCompletionParams(model, position, context), + ), + undefined, + ); + }, + }, + ); + const declarationProvider = monaco.languages.registerDeclarationProvider( + "wat", + { + provideDeclaration(model, position) { + return p2m.asDefinitionResult( + languageServer.gotoDeclaration( + m2p.asTextDocumentPositionParams(model, position), + ), + ); + }, + }, + ); + const definitionProvider = monaco.languages.registerDefinitionProvider( + "wat", + { + provideDefinition(model, position) { + return p2m.asDefinitionResult( + languageServer.gotoDefinition( + m2p.asTextDocumentPositionParams(model, position), + ), + ); + }, + }, + ); + const documentSymbolProvider = + monaco.languages.registerDocumentSymbolProvider("wat", { + provideDocumentSymbols(model) { + return p2m.asDocumentSymbols( + languageServer.documentSymbol(m2p.asDocumentSymbolParams(model)), + ); + }, + }); + const foldingRangeProvider = monaco.languages.registerFoldingRangeProvider( + "wat", + { + provideFoldingRanges(model) { + return p2m.asFoldingRanges( + languageServer.foldingRange({ + textDocument: m2p.asTextDocumentIdentifier(model), + }), + ); + }, + }, + ); + const formattingProvider = + monaco.languages.registerDocumentFormattingEditProvider("wat", { + provideDocumentFormattingEdits(model, options) { + return p2m.asTextEdits( + languageServer.formatting( + m2p.asDocumentFormattingParams(model, options), + ), + ); + }, + }); + const hoverProvider = monaco.languages.registerHoverProvider("wat", { + provideHover(model, position) { + return p2m.asHover( + languageServer.hover(m2p.asTextDocumentPositionParams(model, position)), + ); + }, + }); + const rangeFormattingProvider = + monaco.languages.registerDocumentRangeFormattingEditProvider("wat", { + provideDocumentRangeFormattingEdits(model, range, options) { + return p2m.asTextEdits( + languageServer.rangeFormatting( + m2p.asDocumentRangeFormattingParams(model, range, options), + ), + ); + }, + }); + const referenceProvider = monaco.languages.registerReferenceProvider("wat", { + provideReferences(model, position, context) { + return p2m.asReferences( + languageServer.findReferences( + m2p.asReferenceParams(model, position, context), + ), + ); + }, + }); + const renameProvider = monaco.languages.registerRenameProvider("wat", { + provideRenameEdits(model, position, newName) { + const result = languageServer.rename( + m2p.asRenameParams(model, position, newName), + ); + if (result.Err) { + return { edits: [], rejectReason: result.Err }; + } else { + const { edits }: monaco.languages.WorkspaceEdit = p2m.asWorkspaceEdit( + result.Ok, + ); + edits.forEach((edit) => { + // @ts-expect-error + edit.versionId = model.getVersionId(); + // @ts-expect-error + edit.textEdit = edit.edit; + }); + return { edits }; + } + }, + resolveRenameLocation(model, position) { + const range = p2m.asRange( + languageServer.prepareRename( + m2p.asTextDocumentPositionParams(model, position), + ), + ); + if (range) { + return { range, text: model.getValueInRange(range) }; + } else { + return { + range: new monaco.Range( + position.lineNumber, + position.column, + position.lineNumber, + position.column, + ), + text: "", + rejectReason: "This element can't be renamed.", + }; + } + }, + }); + const typeDefinitionProvider = + monaco.languages.registerTypeDefinitionProvider("wat", { + provideTypeDefinition(model, position) { + return p2m.asDefinitionResult( + languageServer.gotoTypeDefinition( + m2p.asTextDocumentPositionParams(model, position), + ), + ); + }, + }); + + return { + commit(uri, content) { + languageServer.commit(uri, content); + }, + pullDiagnostics(model) { + return languageServer.pullDiagnostics({ + textDocument: m2p.asTextDocumentIdentifier(model), + }); + }, + dispose() { + createModelListener.dispose(); + completionProvider.dispose(); + declarationProvider.dispose(); + definitionProvider.dispose(); + documentSymbolProvider.dispose(); + foldingRangeProvider.dispose(); + formattingProvider.dispose(); + hoverProvider.dispose(); + rangeFormattingProvider.dispose(); + referenceProvider.dispose(); + renameProvider.dispose(); + typeDefinitionProvider.dispose(); + languageServer.free(); + }, + }; +} + +const languageServerPromise = startLanguageServer(); diff --git a/packages/webassembly-playground/src/ui/App.tsx b/packages/webassembly-playground/src/ui/App.tsx index 92abbb2..111876a 100644 --- a/packages/webassembly-playground/src/ui/App.tsx +++ b/packages/webassembly-playground/src/ui/App.tsx @@ -18,6 +18,7 @@ import Features from "./Features"; import Preview from "./Preview"; import UtilPanel from "./UtilPanel"; import "../style.css"; +import { getLanguageByFileName } from "../util"; const GITHUB_REPO_URL = "https://github.com/yfzhe/webassembly-playground"; @@ -91,6 +92,7 @@ function App() {
{filename}
{ if (node) { codeBlocksRef.current.set(filename, node); diff --git a/packages/webassembly-playground/src/ui/Editor.tsx b/packages/webassembly-playground/src/ui/Editor.tsx index f97d825..36e1fb7 100644 --- a/packages/webassembly-playground/src/ui/Editor.tsx +++ b/packages/webassembly-playground/src/ui/Editor.tsx @@ -3,35 +3,39 @@ import * as monaco from "monaco-editor"; export type EditorProps = { initialContent?: string; + language?: string; }; export type EditorRef = { getEditor(): monaco.editor.IStandaloneCodeEditor | null; }; -const Editor = forwardRef(({ initialContent }, ref) => { - const editorRef = useRef(null); - const containerRef = useRef(null); - - useImperativeHandle(ref, () => ({ - getEditor: () => editorRef.current, - })); - - useEffect(() => { - const editor = monaco.editor.create(containerRef.current!, { - value: initialContent, - automaticLayout: true, - tabSize: 2, - minimap: { enabled: false }, - }); - editorRef.current = editor; - - return () => { - editor.dispose(); - }; - }, [initialContent]); - - return
; -}); +const Editor = forwardRef( + ({ initialContent, language }, ref) => { + const editorRef = useRef(null); + const containerRef = useRef(null); + + useImperativeHandle(ref, () => ({ + getEditor: () => editorRef.current, + })); + + useEffect(() => { + const editor = monaco.editor.create(containerRef.current!, { + value: initialContent, + language, + automaticLayout: true, + tabSize: 2, + minimap: { enabled: false }, + }); + editorRef.current = editor; + + return () => { + editor.dispose(); + }; + }, [initialContent]); + + return
; + }, +); export default Editor; diff --git a/packages/webassembly-playground/src/util.ts b/packages/webassembly-playground/src/util.ts index 7baa8fd..4c30153 100644 --- a/packages/webassembly-playground/src/util.ts +++ b/packages/webassembly-playground/src/util.ts @@ -1 +1,13 @@ export function assert(value: unknown): asserts value {} + +export function getLanguageByFileName(filename?: string) { + const ext = filename?.split(".").pop(); + switch (ext) { + case "wat": + return "wat"; + case "js": + return "javascript"; + default: + return "plaintext"; + } +} diff --git a/packages/webassembly-playground/webpack.config.js b/packages/webassembly-playground/webpack.config.js index 140fe73..d56191e 100644 --- a/packages/webassembly-playground/webpack.config.js +++ b/packages/webassembly-playground/webpack.config.js @@ -39,7 +39,7 @@ const baseConfig = { onlyAliases: ["path"], }), new MonacoWebpackPlugin({ - languages: [], + languages: ["typescript", "javascript"], }), new ExamplesPlugin({ source: "src/examples", @@ -77,6 +77,9 @@ const baseConfig = { }, }, }, + experiments: { + asyncWebAssembly: true, + }, }; export default function (env, argv) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e14a0a..4c7eb81 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,6 +26,12 @@ importers: packages/webassembly-playground: dependencies: + '@codingame/monaco-languageclient': + specifier: ^0.17.4 + version: 0.17.4 + '@codingame/monaco-vscode-api': + specifier: ^11.1.1 + version: 11.1.1 clsx: specifier: ^2.1.1 version: 2.1.1 @@ -38,6 +44,9 @@ importers: monaco-editor: specifier: ^0.52.0 version: 0.52.0 + monaco-editor-wrapper: + specifier: ^5.5.3 + version: 5.5.3(monaco-editor@0.52.0)(monaco-languageclient@8.8.3(monaco-editor@0.52.0)) react: specifier: ^18.3.1 version: 18.3.1 @@ -663,6 +672,139 @@ packages: resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} + '@codingame/monaco-languageclient@0.17.4': + resolution: {integrity: sha512-0rz2vFH51q+bLwAMJIwSmX9zcpYCOVzICokzr+ACHc7bZq4RaLfmQ0n7iU8CjPjCB4D+/uykc3duLZakh4ug1w==} + engines: {vscode: ^1.50.0} + + '@codingame/monaco-vscode-api@11.1.1': + resolution: {integrity: sha512-m2hGKexUeQ9CfTcjdI+YLNmSwBqTOJD7m7iOkvSo5l7obDg59lgwdCutQIWl0vEZaZorNyyfDvJvgyupMMn3uw==} + + '@codingame/monaco-vscode-api@8.0.4': + resolution: {integrity: sha512-qZ+HwIijDvzwwWscMA73y9ARu5zUaENOdzi0jQftJP9j2k96cRghsaCV25OgnmpZ/1BemjB4HhHCcr71Gq+GPQ==} + + '@codingame/monaco-vscode-base-service-override@11.1.1': + resolution: {integrity: sha512-qOH9PKUDol9r/TRAFMuy4UrVX4u45t72VqQNOeVMDAz5j28U5KEzyOunINt88Jaay3h5kd/PN4VmpFjvmIlznA==} + + '@codingame/monaco-vscode-base-service-override@8.0.4': + resolution: {integrity: sha512-tTIA68KRYgSPHyanjqTUGQro+t67vShxAGNjM2Iz7dhqMOYZhYA4oIwI4Q0A+QWBC2HKOCNkwFoc5pqconw5YA==} + + '@codingame/monaco-vscode-chat-comments-extensions-interactive-notebook-search-common@11.1.1': + resolution: {integrity: sha512-JRNFSVJbPkwID9SgIvlw/inhIH/w0rSu+Yc04lojcLFzI+hENqby9MaBb/prs0ypojHd92vV3mljeDSFF4ie4Q==} + + '@codingame/monaco-vscode-chat-extensions-interactive-notebook-search-terminal-common@11.1.1': + resolution: {integrity: sha512-/dpN3H+HF2RZOjWh20zf5wX0qoJYQeBzvCJ8sPBuLyubAPg25cCOIXq0gFgbISZJPZ2g03VMFOHnawnP8EMJnQ==} + + '@codingame/monaco-vscode-chat-extensions-notebook-common@11.1.1': + resolution: {integrity: sha512-DwyHIPpW0E3QwKagTvNzzBw6tgNPX/FgsTFD9UA/En//3PgMgrHIuDiZMh1UHiN3825hkF8hZwm9ms685NgN5A==} + + '@codingame/monaco-vscode-comments-extensions-common@11.1.1': + resolution: {integrity: sha512-CAr0G8luD5JEC7A+ReW0bycCN4cLlx9zBKj9T26jTHECzUWjM8pdRmiOih0NjTXCAdy6emJ/3sFIdnyTnozFnw==} + + '@codingame/monaco-vscode-configuration-service-override@8.0.4': + resolution: {integrity: sha512-Fx8wRY3G2s3fpcQWGBMEe7fUmDhPFSkn+b/DwPCTiyo9IX+uKk8w097XjJBwCk0wVHgOcYs4GKPsip5IqJkydw==} + + '@codingame/monaco-vscode-editor-service-override@8.0.4': + resolution: {integrity: sha512-is77poIqjYAcve9AYlUrkMfgtjWlH1D9ebxGjk4Y2UHvmQvsrRFuaGvzEt4YpgNLd+0hSyuH+R0HWSOq3uN2BA==} + + '@codingame/monaco-vscode-environment-service-override@11.1.1': + resolution: {integrity: sha512-lZIWykTUQYbx4NERF8Ha5drfITRmglA2jcRBr6/FT1l+AfDJqcabzNYRVoUCdyOO7keofPSMAJj97X6Fk7d5mw==} + + '@codingame/monaco-vscode-environment-service-override@8.0.4': + resolution: {integrity: sha512-3PBqEag0RaACIYiPdtDqxn4BS48yMq1uNCrNYm9E2P1On7JaCLNPHrQfE9Et6HbJT9qPzdcfbD5IwevQbCym5Q==} + + '@codingame/monaco-vscode-extensions-service-override@11.1.1': + resolution: {integrity: sha512-Lj+3N6VZBJepAgBscfZnSQu6K4FVNip14z9R+xX4K4n5WnazOWNYgO8tHmbtOewN3SsJGDZxZa8ctXeowVJtxQ==} + + '@codingame/monaco-vscode-extensions-service-override@8.0.4': + resolution: {integrity: sha512-uEOpSXGxC6W3uaKwj5p+WXsvkVqD1ONDNOCy8ZEHskpkN6KO/0XE927OvpF75JsqXHjNTmstSxTjU9/GykpruA==} + + '@codingame/monaco-vscode-files-service-override@11.1.1': + resolution: {integrity: sha512-L2cb4Apm8I49M3HIWmWDasPP5LWt/F4EDXSjIeSPRBooq7jVx6IfMMXFWCdH1pRXnTkiqLpiuRQWdBDH0MBETg==} + + '@codingame/monaco-vscode-files-service-override@8.0.4': + resolution: {integrity: sha512-DCvbxgE6wwOoUsKGlinOB7vYx7HoVUviqWY913Fux4K7/wYWpBcNVtK8kmKs7euPJPeAsl06PJFaXaS3Qjfkqg==} + + '@codingame/monaco-vscode-host-service-override@11.1.1': + resolution: {integrity: sha512-owF9veg11ZpV3Xu6V8K2UVumqmoq5bY/jPhEiK/k7hWmVonCq9qY99GS7j4082YIf9yNK0w0m2BwOrMe/q46Ow==} + + '@codingame/monaco-vscode-host-service-override@8.0.4': + resolution: {integrity: sha512-VT8jFmnzMpi6DuSgA8c/F0MVh+fApLH75ledgMqfsKC1vSDOkV0IaPPBHRfPYDPvXCrnOtfdpvP0hFrdg1ytig==} + + '@codingame/monaco-vscode-language-pack-cs@8.0.4': + resolution: {integrity: sha512-ijeMCVxDhNv2M1h92pMCYx8P4nBUTWlAisnAnrDASNJa3V6bFjCo+r0jXKruOjZhjtO0VOYsX0r1s0VUq1Otuw==} + + '@codingame/monaco-vscode-language-pack-de@8.0.4': + resolution: {integrity: sha512-OehZUq8+z8KDnZPBH0xEU+Ph+D9GTssFPcMzdvxLSfY0xyxNDfC+rCemLGAfJydtONVKde5WsOWvozM5PJ+uEQ==} + + '@codingame/monaco-vscode-language-pack-es@8.0.4': + resolution: {integrity: sha512-+mB2aeWnn+Nz4s8zopaEQWqhZLvsUM/SGcsqpjy/liU0D6M8qhc8XyAbOS3dORTFtFVIhxj/MVW7I8E2fhJd1Q==} + + '@codingame/monaco-vscode-language-pack-fr@8.0.4': + resolution: {integrity: sha512-nhWM+uOVSzcnIGYr9GCEX00GJjgUt9xoW+TKLG1axayCpPboDoD8mbafaycNoYkz3aJIwhYytpKIzhl05EmIhg==} + + '@codingame/monaco-vscode-language-pack-it@8.0.4': + resolution: {integrity: sha512-BXXLAakXU8zumxQH9uRX4KIIPy/ZJjdI/7DWriASs0BU2rJwta9cRmGZshpl9IJMVB4HHLmUvEoXv3NXfGIu8A==} + + '@codingame/monaco-vscode-language-pack-ja@8.0.4': + resolution: {integrity: sha512-G4Dv75fCZuRNL6lo0/T71iGVvRaIP039PV4icOZv2sIxatQEIPcnI89Bc4obHRmX8IzKIPKG4OYNixDzRno8dA==} + + '@codingame/monaco-vscode-language-pack-ko@8.0.4': + resolution: {integrity: sha512-+RSYTNci7V8EdaAzHKn5OGo9GH3LE9v1B4/MHo2d1iNvvsB3jJ3p4I69E7w0+g3cr7B+gFGfJYAvDHdQABd5Gg==} + + '@codingame/monaco-vscode-language-pack-pl@8.0.4': + resolution: {integrity: sha512-YlFJEqUQ2j1bSiVBz1o59RZDsFaPVfhbnosMWV4B1iqW0qEXtQwUfdMeU0N8H3fq2v2ov6W79dOu9PlWyOW4Ww==} + + '@codingame/monaco-vscode-language-pack-pt-br@8.0.4': + resolution: {integrity: sha512-kwoVrjIYZhmRwajt3qrYRr6KW0UVxC/YV/c+MOjr2HKMUgy5fqo+BKmj/9lSfduyu5JPddZxKARTBw0oByVghA==} + + '@codingame/monaco-vscode-language-pack-qps-ploc@8.0.4': + resolution: {integrity: sha512-TJK9YuCHf2RHK3NcoiIAgjyna1lv6ndN70t13wf9pN+GyOE7XfYUVJj0YrQDbNCXiSeaTxgJtt0VQZmeN6RHjQ==} + + '@codingame/monaco-vscode-language-pack-ru@8.0.4': + resolution: {integrity: sha512-4rZDZU9VNJCIDM8hwLJQYhUnsQu3qcVONpb1muRFGKYhh9NwAELAwl2XW+ybsTC/B/4Qysk7cB1IxrTt4AhNjg==} + + '@codingame/monaco-vscode-language-pack-tr@8.0.4': + resolution: {integrity: sha512-cqtF5drmuFp/wKmJvm9l6Unc+AF4vn48t0KJBZ1/QRxTZnRlwT5Dm+z0JR880O8WsSUkzJIG93/wBAzpv+6/Bg==} + + '@codingame/monaco-vscode-language-pack-zh-hans@8.0.4': + resolution: {integrity: sha512-a8R+IUggCI/UVv4uDy7XzjOwB3WAt+KX8ElsAqzJB9Y5BbFW5/a1Pxca0UXJ2vQabcls4TcrIi2yR30jnlBgww==} + + '@codingame/monaco-vscode-language-pack-zh-hant@8.0.4': + resolution: {integrity: sha512-g3b/apaTc/bg5isOEvxir38bbYzd/CuBY0MWtXw1NKXc0GPsTo4j5eAuT2R4qT1pJ9XgbMBbYQAMLX3DxSJRxA==} + + '@codingame/monaco-vscode-languages-service-override@8.0.4': + resolution: {integrity: sha512-GXd2fKQa96tNv0gFB3nT/yWUc+4pZM/2L8KcfOOuNRWEOjm9TbOWmNZyWGi2Abf4vAdLNKVtJBX1+SoDkwoQdw==} + + '@codingame/monaco-vscode-layout-service-override@11.1.1': + resolution: {integrity: sha512-oQ2aN0jIudyB1rDcgYUWpEvw7XQFx5NvpyF5u5cePb9hGTiOnMn6fqCMOgPEeLoq96HdKCh7SHztTTidWdFA4Q==} + + '@codingame/monaco-vscode-layout-service-override@8.0.4': + resolution: {integrity: sha512-DrF1vRJG8vPOaqC06fu99yjvtIcuTza5vAQdH19FfDi87vyk3BeFsnj7H7Z0fRK/wQigBcNzXYbUkuE93I95IQ==} + + '@codingame/monaco-vscode-localization-service-override@8.0.4': + resolution: {integrity: sha512-z/MGZXSW69y3pIxbXobRfoGadN82BSSO7tu3jkhJx3c3CpvULaDl5HLUKoXDwtG14/nEA/VCzI/MOHp/bXBKDQ==} + + '@codingame/monaco-vscode-model-service-override@8.0.4': + resolution: {integrity: sha512-oynV9SnSE1MfqtVjqDWy/xcmekmAVNzyoqTh6oH3B+Oy/nhPqI6X9yIA0I47u0ncs/wjj3dDVnXOEv2IqJXxZg==} + + '@codingame/monaco-vscode-monarch-service-override@8.0.4': + resolution: {integrity: sha512-OrlE+ffvGf9C6xfkcO6rEiuy4GJQJQ+dSByxHyfLXA9qCWn/dHpYfjpr83YIlBG0tNoBdAYnx2iLgAo6y5Tzkw==} + + '@codingame/monaco-vscode-quickaccess-service-override@11.1.1': + resolution: {integrity: sha512-gVLQXKufvRVEtA9Pq9s29ep24DMi/fLmIyhylN2MfHmcgeDnFS7yDdgNYl6xLLoR4m1qrD3D8i05elboBCOIvA==} + + '@codingame/monaco-vscode-quickaccess-service-override@8.0.4': + resolution: {integrity: sha512-VXHVKRqtieKf+BTTUwcT++tJEb/k7PI2vLR3Lgsh2t0We7ydPOPLTDA99/Ls3yuM+i6IvKqBXc+WomN8MRS1rw==} + + '@codingame/monaco-vscode-textmate-service-override@8.0.4': + resolution: {integrity: sha512-YDJoXCqnEimotWcqUlzU8bBah3+dqLAcIULJEV07K2DMFkKty78sc6w2CAItIlzmTeJApW2HpTdOgZehYqro3w==} + + '@codingame/monaco-vscode-theme-defaults-default-extension@8.0.4': + resolution: {integrity: sha512-y2M0i2ZUGdQbbZ5/rfGQzDe0McUWOVDu0HrIBKhGCyVMfeR7nII06jipQD0e/XPY1cmphyi/x1U70AX2msJEQQ==} + + '@codingame/monaco-vscode-theme-service-override@8.0.4': + resolution: {integrity: sha512-z2UpL7KQJ/gg1LUP9ya65Qph30bypwiQT+mq9ZM699nQEPpXJ9HGA5AiHE2rf2wlKnbkmis1gdpIXeYQsDLy0g==} + '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} @@ -872,6 +1014,9 @@ packages: '@types/ws@8.5.13': resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} + '@vscode/iconv-lite-umd@0.7.0': + resolution: {integrity: sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==} + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -1059,6 +1204,9 @@ packages: babel-plugin-syntax-jsx@6.18.0: resolution: {integrity: sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -1088,6 +1236,12 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -1219,6 +1373,9 @@ packages: resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} engines: {node: '>= 0.8.0'} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + connect-history-api-fallback@2.0.0: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} @@ -1903,6 +2060,14 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + jschardet@3.1.3: + resolution: {integrity: sha512-Q1PKVMK/uu+yjdlobgWIYkUOCR1SqUmW9m/eUJNNj4zI2N12i25v8fYpVf+zCakQeaTdBdhnZTFbVIAVZIVVOg==} + engines: {node: '>=0.1.90'} + + jschardet@3.1.4: + resolution: {integrity: sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==} + engines: {node: '>=0.1.90'} + jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -1988,6 +2153,11 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + marked@14.0.0: + resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} + engines: {node: '>= 18'} + hasBin: true + md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} @@ -2048,15 +2218,36 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + monaco-editor-webpack-plugin@7.1.0: resolution: {integrity: sha512-ZjnGINHN963JQkFqjjcBtn1XBtUATDZBMgNQhDQwd78w2ukRhFXAPNgWuacaQiDZsUr4h1rWv5Mv6eriKuOSzA==} peerDependencies: monaco-editor: '>= 0.31.0' webpack: ^4.5.0 || 5.x + monaco-editor-wrapper@5.5.3: + resolution: {integrity: sha512-ceC+HnpUw/WehfH9uL7Y5j1m/46hQFcS/Z1VYpiFl+pieNf4/JfOWrzLEDqnxOK/qrPJ2fR6JB78mfZNLtPeQQ==} + peerDependencies: + monaco-editor: npm:@codingame/monaco-vscode-editor-api@~8.0.4 + monaco-languageclient: ~8.8.3 + vscode: npm:@codingame/monaco-vscode-api@~8.0.4 + monaco-editor@0.52.0: resolution: {integrity: sha512-OeWhNpABLCeTqubfqLMXGsqf6OmPU6pHM85kF3dhy6kq5hnhuVS1p3VrEW/XhWHc71P2tHyS5JFySD8mgs1crw==} + monaco-languageclient@8.8.3: + resolution: {integrity: sha512-F/ETX2EuUgFnwxNXCrlPOplrINTPMzNvMJBKdl6ZzHnCucnaoJQt9nmqWZmNG4DU2cyaUwTMrcNODOgqQ+So4w==} + engines: {node: '>=16.11.0', npm: '>=9.0.0'} + peerDependencies: + monaco-editor: npm:@codingame/monaco-vscode-editor-api@~8.0.4 + vscode: npm:@codingame/monaco-vscode-api@~8.0.4 + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -2789,6 +2980,54 @@ packages: vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + vscode-jsonrpc@6.0.0: + resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} + engines: {node: '>=8.0.0 || >=10.0.0'} + + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-jsonrpc@8.2.1: + resolution: {integrity: sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==} + engines: {node: '>=14.0.0'} + + vscode-languageclient@7.0.0: + resolution: {integrity: sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==} + engines: {vscode: ^1.52.0} + + vscode-languageclient@9.0.1: + resolution: {integrity: sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==} + engines: {vscode: ^1.82.0} + + vscode-languageserver-protocol@3.16.0: + resolution: {integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.16.0: + resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + + vscode-textmate@9.0.0: + resolution: {integrity: sha512-Cl65diFGxz7gpwbav10HqiY/eVYTO1sjQpmRmV991Bj7wAoOAjGQ97PpQcXorDE2Uc4hnGWLY17xme+5t6MlSg==} + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + + vscode-ws-jsonrpc@3.3.2: + resolution: {integrity: sha512-jxGHxAuow67sNRkkS2svsW00ZACX+Zrbury9Au2A22px6sg4pe858Nnnwvtg0Pm4D0L/W9Yzn7N7X3R/RIMxsQ==} + engines: {node: '>=16.11.0', npm: '>=8.0.0'} + wabt@1.0.32: resolution: {integrity: sha512-1aHvkKaSrrl7qFtAbQ1RWVHLuJApRh7PtUdYvRtiUEKEhk0MOV0sTuz5cLF6jL5jPLRyifLbZcR65AEga/xBhQ==} hasBin: true @@ -3635,6 +3874,217 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@codingame/monaco-languageclient@0.17.4': + dependencies: + glob-to-regexp: 0.4.1 + vscode-jsonrpc: 6.0.0 + vscode-languageclient: 7.0.0 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + + '@codingame/monaco-vscode-api@11.1.1': + dependencies: + '@codingame/monaco-vscode-base-service-override': 11.1.1 + '@codingame/monaco-vscode-environment-service-override': 11.1.1 + '@codingame/monaco-vscode-extensions-service-override': 11.1.1 + '@codingame/monaco-vscode-files-service-override': 11.1.1 + '@codingame/monaco-vscode-host-service-override': 11.1.1 + '@codingame/monaco-vscode-layout-service-override': 11.1.1 + '@codingame/monaco-vscode-quickaccess-service-override': 11.1.1 + '@vscode/iconv-lite-umd': 0.7.0 + jschardet: 3.1.4 + marked: 14.0.0 + + '@codingame/monaco-vscode-api@8.0.4': + dependencies: + '@codingame/monaco-vscode-base-service-override': 8.0.4 + '@codingame/monaco-vscode-environment-service-override': 8.0.4 + '@codingame/monaco-vscode-extensions-service-override': 8.0.4 + '@codingame/monaco-vscode-files-service-override': 8.0.4 + '@codingame/monaco-vscode-host-service-override': 8.0.4 + '@codingame/monaco-vscode-layout-service-override': 8.0.4 + '@codingame/monaco-vscode-quickaccess-service-override': 8.0.4 + '@vscode/iconv-lite-umd': 0.7.0 + jschardet: 3.1.3 + + '@codingame/monaco-vscode-base-service-override@11.1.1': + dependencies: + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-base-service-override@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-chat-comments-extensions-interactive-notebook-search-common@11.1.1': + dependencies: + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-chat-extensions-interactive-notebook-search-terminal-common@11.1.1': + dependencies: + marked: 14.0.0 + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-chat-extensions-notebook-common@11.1.1': + dependencies: + '@codingame/monaco-vscode-chat-extensions-interactive-notebook-search-terminal-common': 11.1.1 + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-comments-extensions-common@11.1.1': + dependencies: + '@codingame/monaco-vscode-chat-comments-extensions-interactive-notebook-search-common': 11.1.1 + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-configuration-service-override@8.0.4': + dependencies: + '@codingame/monaco-vscode-files-service-override': 8.0.4 + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-editor-service-override@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-environment-service-override@11.1.1': + dependencies: + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-environment-service-override@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-extensions-service-override@11.1.1': + dependencies: + '@codingame/monaco-vscode-chat-extensions-interactive-notebook-search-terminal-common': 11.1.1 + '@codingame/monaco-vscode-chat-extensions-notebook-common': 11.1.1 + '@codingame/monaco-vscode-comments-extensions-common': 11.1.1 + '@codingame/monaco-vscode-files-service-override': 11.1.1 + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-extensions-service-override@8.0.4': + dependencies: + '@codingame/monaco-vscode-files-service-override': 8.0.4 + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-files-service-override@11.1.1': + dependencies: + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-files-service-override@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-host-service-override@11.1.1': + dependencies: + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-host-service-override@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-cs@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-de@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-es@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-fr@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-it@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-ja@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-ko@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-pl@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-pt-br@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-qps-ploc@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-ru@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-tr@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-zh-hans@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-language-pack-zh-hant@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-languages-service-override@8.0.4': + dependencies: + '@codingame/monaco-vscode-files-service-override': 8.0.4 + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-layout-service-override@11.1.1': + dependencies: + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-layout-service-override@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-localization-service-override@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-model-service-override@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-monarch-service-override@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-quickaccess-service-override@11.1.1': + dependencies: + vscode: '@codingame/monaco-vscode-api@11.1.1' + + '@codingame/monaco-vscode-quickaccess-service-override@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-textmate-service-override@8.0.4': + dependencies: + '@codingame/monaco-vscode-files-service-override': 8.0.4 + vscode: '@codingame/monaco-vscode-api@8.0.4' + vscode-oniguruma: 1.7.0 + vscode-textmate: 9.0.0 + + '@codingame/monaco-vscode-theme-defaults-default-extension@8.0.4': + dependencies: + vscode: '@codingame/monaco-vscode-api@8.0.4' + + '@codingame/monaco-vscode-theme-service-override@8.0.4': + dependencies: + '@codingame/monaco-vscode-files-service-override': 8.0.4 + vscode: '@codingame/monaco-vscode-api@8.0.4' + '@discoveryjs/json-ext@0.5.7': {} '@emotion/cache@10.0.29': @@ -3876,6 +4326,8 @@ snapshots: dependencies: '@types/node': 22.10.1 + '@vscode/iconv-lite-umd@0.7.0': {} + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -4104,6 +4556,8 @@ snapshots: babel-plugin-syntax-jsx@6.18.0: {} + balanced-match@1.0.2: {} + base64-js@1.5.1: {} batch@0.6.1: {} @@ -4140,6 +4594,15 @@ snapshots: boolbase@1.0.0: {} + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -4302,6 +4765,8 @@ snapshots: transitivePeerDependencies: - supports-color + concat-map@0.0.1: {} + connect-history-api-fallback@2.0.0: {} console-browserify@1.2.0: {} @@ -4987,6 +5452,10 @@ snapshots: js-tokens@4.0.0: {} + jschardet@3.1.3: {} + + jschardet@3.1.4: {} + jsesc@3.0.2: {} json-parse-even-better-errors@2.3.1: {} @@ -5078,6 +5547,8 @@ snapshots: dependencies: yallist: 3.1.1 + marked@14.0.0: {} + md5.js@1.3.5: dependencies: hash-base: 3.0.5 @@ -5127,14 +5598,59 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + monaco-editor-webpack-plugin@7.1.0(monaco-editor@0.52.0)(webpack@5.97.0): dependencies: loader-utils: 2.0.4 monaco-editor: 0.52.0 webpack: 5.97.0(webpack-cli@5.1.4) + monaco-editor-wrapper@5.5.3(monaco-editor@0.52.0)(monaco-languageclient@8.8.3(monaco-editor@0.52.0)): + dependencies: + '@codingame/monaco-vscode-configuration-service-override': 8.0.4 + '@codingame/monaco-vscode-editor-service-override': 8.0.4 + '@codingame/monaco-vscode-language-pack-cs': 8.0.4 + '@codingame/monaco-vscode-language-pack-de': 8.0.4 + '@codingame/monaco-vscode-language-pack-es': 8.0.4 + '@codingame/monaco-vscode-language-pack-fr': 8.0.4 + '@codingame/monaco-vscode-language-pack-it': 8.0.4 + '@codingame/monaco-vscode-language-pack-ja': 8.0.4 + '@codingame/monaco-vscode-language-pack-ko': 8.0.4 + '@codingame/monaco-vscode-language-pack-pl': 8.0.4 + '@codingame/monaco-vscode-language-pack-pt-br': 8.0.4 + '@codingame/monaco-vscode-language-pack-qps-ploc': 8.0.4 + '@codingame/monaco-vscode-language-pack-ru': 8.0.4 + '@codingame/monaco-vscode-language-pack-tr': 8.0.4 + '@codingame/monaco-vscode-language-pack-zh-hans': 8.0.4 + '@codingame/monaco-vscode-language-pack-zh-hant': 8.0.4 + '@codingame/monaco-vscode-monarch-service-override': 8.0.4 + '@codingame/monaco-vscode-textmate-service-override': 8.0.4 + '@codingame/monaco-vscode-theme-defaults-default-extension': 8.0.4 + '@codingame/monaco-vscode-theme-service-override': 8.0.4 + monaco-editor: 0.52.0 + monaco-languageclient: 8.8.3(monaco-editor@0.52.0) + vscode-languageclient: 9.0.1 + vscode-languageserver-protocol: 3.17.5 + vscode-ws-jsonrpc: 3.3.2 + monaco-editor@0.52.0: {} + monaco-languageclient@8.8.3(monaco-editor@0.52.0): + dependencies: + '@codingame/monaco-vscode-extensions-service-override': 8.0.4 + '@codingame/monaco-vscode-languages-service-override': 8.0.4 + '@codingame/monaco-vscode-localization-service-override': 8.0.4 + '@codingame/monaco-vscode-model-service-override': 8.0.4 + monaco-editor: 0.52.0 + vscode-languageclient: 9.0.1 + ms@2.0.0: {} ms@2.1.3: {} @@ -5888,6 +6404,50 @@ snapshots: vm-browserify@1.1.2: {} + vscode-jsonrpc@6.0.0: {} + + vscode-jsonrpc@8.2.0: {} + + vscode-jsonrpc@8.2.1: {} + + vscode-languageclient@7.0.0: + dependencies: + minimatch: 3.1.2 + semver: 7.6.3 + vscode-languageserver-protocol: 3.16.0 + + vscode-languageclient@9.0.1: + dependencies: + minimatch: 5.1.6 + semver: 7.6.3 + vscode-languageserver-protocol: 3.17.5 + + vscode-languageserver-protocol@3.16.0: + dependencies: + vscode-jsonrpc: 6.0.0 + vscode-languageserver-types: 3.16.0 + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.16.0: {} + + vscode-languageserver-types@3.17.5: {} + + vscode-oniguruma@1.7.0: {} + + vscode-textmate@9.0.0: {} + + vscode-uri@3.0.8: {} + + vscode-ws-jsonrpc@3.3.2: + dependencies: + vscode-jsonrpc: 8.2.1 + wabt@1.0.32: {} watchpack@2.4.2: