diff --git a/package-lock.json b/package-lock.json index f6355c8..b04af24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,14 @@ { "name": "code-next", - "version": "1.3.1", + "version": "1.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "code-next", - "version": "1.3.1", + "version": "1.4.0", "dependencies": { + "@codemirror/autocomplete": "^6.20.0", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-python": "^6.2.1", "@vueuse/core": "^14.1.0", @@ -27,7 +28,7 @@ }, "devDependencies": { "@iconify/vue": "^5.0.0", - "@rsbuild/core": "^1.6.15", + "@rsbuild/core": "^1.7.2", "@rsbuild/plugin-vue": "^1.2.2", "@types/file-saver": "^2.0.7", "prettier": "^3.7.4", @@ -81,20 +82,15 @@ } }, "node_modules/@codemirror/autocomplete": { - "version": "6.12.0", - "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.12.0.tgz", - "integrity": "sha512-r4IjdYFthwbCQyvqnSlx0WBHRHi8nBvU+WjJxFUij81qsBfhNudf/XKKmmC2j3m0LaOYUQTf3qiEK1J8lO1sdg==", + "version": "6.20.0", + "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.20.0.tgz", + "integrity": "sha512-bOwvTOIJcG5FVo5gUUupiwYh8MioPLQ4UcqbcRf7UQ98X90tCa9E1kZ3Z7tqwpZxYyOvh1YTYbmZE9RTfTp5hg==", + "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0" - }, - "peerDependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.0.0" } }, "node_modules/@codemirror/commands": { @@ -198,9 +194,9 @@ } }, "node_modules/@emnapi/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", - "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "dev": true, "license": "MIT", "optional": true, @@ -210,9 +206,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", - "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "dev": true, "license": "MIT", "optional": true, @@ -222,7 +218,7 @@ }, "node_modules/@emnapi/wasi-threads": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "resolved": "https://registry.npmmirror.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", "dev": true, "license": "MIT", @@ -356,67 +352,67 @@ } }, "node_modules/@module-federation/error-codes": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.21.6.tgz", - "integrity": "sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/error-codes/-/error-codes-0.22.0.tgz", + "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==", "dev": true, "license": "MIT" }, "node_modules/@module-federation/runtime": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.21.6.tgz", - "integrity": "sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/runtime/-/runtime-0.22.0.tgz", + "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.21.6", - "@module-federation/runtime-core": "0.21.6", - "@module-federation/sdk": "0.21.6" + "@module-federation/error-codes": "0.22.0", + "@module-federation/runtime-core": "0.22.0", + "@module-federation/sdk": "0.22.0" } }, "node_modules/@module-federation/runtime-core": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.21.6.tgz", - "integrity": "sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz", + "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.21.6", - "@module-federation/sdk": "0.21.6" + "@module-federation/error-codes": "0.22.0", + "@module-federation/sdk": "0.22.0" } }, "node_modules/@module-federation/runtime-tools": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.21.6.tgz", - "integrity": "sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz", + "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.21.6", - "@module-federation/webpack-bundler-runtime": "0.21.6" + "@module-federation/runtime": "0.22.0", + "@module-federation/webpack-bundler-runtime": "0.22.0" } }, "node_modules/@module-federation/sdk": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.21.6.tgz", - "integrity": "sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/sdk/-/sdk-0.22.0.tgz", + "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==", "dev": true, "license": "MIT" }, "node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.21.6.tgz", - "integrity": "sha512-7zIp3LrcWbhGuFDTUMLJ2FJvcwjlddqhWGxi/MW3ur1a+HaO8v5tF2nl+vElKmbG1DFLU/52l3PElVcWf/YcsQ==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz", + "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.21.6", - "@module-federation/sdk": "0.21.6" + "@module-federation/runtime": "0.22.0", + "@module-federation/sdk": "0.22.0" } }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", + "resolved": "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", "dev": true, "license": "MIT", @@ -428,16 +424,16 @@ } }, "node_modules/@rsbuild/core": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.6.15.tgz", - "integrity": "sha512-LvoOF53PL6zXgdzEhgnnP51S4FseDFH1bHrobK4EK6zZX/tN8qgf5tdlmN7h4OkMv/Qs1oUfvj0QcLWSstnnvA==", + "version": "1.7.2", + "resolved": "https://registry.npmmirror.com/@rsbuild/core/-/core-1.7.2.tgz", + "integrity": "sha512-VAFO6cM+cyg2ntxNW6g3tB2Jc5J5mpLjLluvm7VtW2uceNzyUlVv41o66Yp1t1ikxd3ljtqegViXem62JqzveA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@rspack/core": "1.6.8", + "@rspack/core": "~1.7.1", "@rspack/lite-tapable": "~1.1.0", - "@swc/helpers": "^0.5.17", + "@swc/helpers": "^0.5.18", "core-js": "~3.47.0", "jiti": "^2.6.1" }, @@ -463,28 +459,28 @@ } }, "node_modules/@rspack/binding": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.6.8.tgz", - "integrity": "sha512-lUeL4mbwGo+nqRKqFDCm9vH2jv9FNMVt1X8jqayWRcOCPlj/2UVMEFgqjR7Pp2vlvnTKq//31KbDBJmDZq31RQ==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding/-/binding-1.7.1.tgz", + "integrity": "sha512-qVTV1/UWpMSZktvK5A8+HolgR1Qf0nYR3Gg4Vax5x3/BcHDpwGZ0fbdFRUirGVWH/XwxZ81zoI6F2SZq7xbX+w==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.6.8", - "@rspack/binding-darwin-x64": "1.6.8", - "@rspack/binding-linux-arm64-gnu": "1.6.8", - "@rspack/binding-linux-arm64-musl": "1.6.8", - "@rspack/binding-linux-x64-gnu": "1.6.8", - "@rspack/binding-linux-x64-musl": "1.6.8", - "@rspack/binding-wasm32-wasi": "1.6.8", - "@rspack/binding-win32-arm64-msvc": "1.6.8", - "@rspack/binding-win32-ia32-msvc": "1.6.8", - "@rspack/binding-win32-x64-msvc": "1.6.8" + "@rspack/binding-darwin-arm64": "1.7.1", + "@rspack/binding-darwin-x64": "1.7.1", + "@rspack/binding-linux-arm64-gnu": "1.7.1", + "@rspack/binding-linux-arm64-musl": "1.7.1", + "@rspack/binding-linux-x64-gnu": "1.7.1", + "@rspack/binding-linux-x64-musl": "1.7.1", + "@rspack/binding-wasm32-wasi": "1.7.1", + "@rspack/binding-win32-arm64-msvc": "1.7.1", + "@rspack/binding-win32-ia32-msvc": "1.7.1", + "@rspack/binding-win32-x64-msvc": "1.7.1" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.6.8.tgz", - "integrity": "sha512-e8CTQtzaeGnf+BIzR7wRMUwKfIg0jd/sxMRc1Vd0bCMHBhSN9EsGoMuJJaKeRrSmy2nwMCNWHIG+TvT1CEKg+A==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.1.tgz", + "integrity": "sha512-3C0w0kfCHfgOH+AP/Dx1bm/b3AR/or5CmU22Abevek0m95ndU3iT902eLcm9JNiMQnDQLBQbolfj5P591t0oPg==", "cpu": [ "arm64" ], @@ -496,9 +492,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.6.8.tgz", - "integrity": "sha512-ku1XpTEPt6Za11zhpFWhfwrTQogcgi9RJrOUVC4FESiPO9aKyd4hJ+JiPgLY0MZOqsptK6vEAgOip+uDVXrCpg==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.1.tgz", + "integrity": "sha512-HTrBpdw2gWwcpJ3c8h4JF8B1YRNvrFT+K620ycttrlu/HvI4/U770BBJ/ej36R/hdh59JvMCGe+w49FyXv6rzg==", "cpu": [ "x64" ], @@ -510,9 +506,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.6.8.tgz", - "integrity": "sha512-fvZX6xZPvBT8qipSpvkKMX5M7yd2BSpZNCZXcefw6gA3uC7LI3gu+er0LrDXY1PtPzVuHTyDx+abwWpagV3PiQ==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.1.tgz", + "integrity": "sha512-BX9yAPCO0WBFyOzKl9bSXT/cH27nnOJp02smIQMxfv7RNfwGkJg5GgakYcuYG+9U1HEFitBSzmwS2+dxDcAxlg==", "cpu": [ "arm64" ], @@ -524,9 +520,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.6.8.tgz", - "integrity": "sha512-++XMKcMNrt59HcFBLnRaJcn70k3X0GwkAegZBVpel8xYIAgvoXT5+L8P1ExId/yTFxqedaz8DbcxQnNmMozviw==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.1.tgz", + "integrity": "sha512-maBX19XyiVkxzh/NA79ALetCobc4zUyoWkWLeCGyW5xKzhPVFatJp+qCiHqHkqUZcgRo+1i5ihoZ2bXmelIeZg==", "cpu": [ "arm64" ], @@ -538,9 +534,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.6.8.tgz", - "integrity": "sha512-tv3BWkTE1TndfX+DsE1rSTg8fBevCxujNZ3MlfZ22Wfy9x1FMXTJlWG8VIOXmaaJ1wUHzv8S7cE2YUUJ2LuiCg==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.1.tgz", + "integrity": "sha512-8KJAeBLiWcN7zEc9aaS7LRJPZVtZuQU8mCsn+fRhdQDSc+a9FcTN8b6Lw29z8cejwbU6Gxr/8wk5XGexMWFaZA==", "cpu": [ "x64" ], @@ -552,9 +548,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.6.8.tgz", - "integrity": "sha512-DCGgZ5/in1O3FjHWqXnDsncRy+48cMhfuUAAUyl0yDj1NpsZu9pP+xfGLvGcQTiYrVl7IH9Aojf1eShP/77WGA==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.1.tgz", + "integrity": "sha512-Gn9x5vhKRELvSoZ3ZjquY8eWtCXur0OsYnZ2/ump8mofM6IDaL7Qqu3Hf4Kud31PDH0tfz0jWf9piX32HHPmgg==", "cpu": [ "x64" ], @@ -566,9 +562,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.6.8.tgz", - "integrity": "sha512-VUwdhl/lI4m6o1OGCZ9JwtMjTV/yLY5VZTQdEPKb40JMTlmZ5MBlr5xk7ByaXXYHr6I+qnqEm73iMKQvg6iknw==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.1.tgz", + "integrity": "sha512-2r9M5iVchmsFkp3sz7A5YnMm2TfpkB71LK3AoaRWKMfvf5oFky0GSGISYd2TCBASO+X2Qskaq+B24Szo8zH5FA==", "cpu": [ "wasm32" ], @@ -580,9 +576,9 @@ } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.6.8.tgz", - "integrity": "sha512-23YX7zlOZlub+nPGDBUzktb4D5D6ETUAluKjXEeHIZ9m7fSlEYBnGL66YE+3t1DHXGd0OqsdwlvrNGcyo6EXDQ==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.1.tgz", + "integrity": "sha512-/WIHp982yqqqAuiz2WLtf1ofo9d1lHDGZJ7flxFllb1iMgnUeSRyX6stxEi11K3Rg6pQa7FdCZGKX/engyj2bw==", "cpu": [ "arm64" ], @@ -594,9 +590,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.6.8.tgz", - "integrity": "sha512-cFgRE3APxrY4AEdooVk2LtipwNNT/9mrnjdC5lVbsIsz+SxvGbZR231bxDJEqP15+RJOaD07FO1sIjINFqXMEg==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.1.tgz", + "integrity": "sha512-Kpela29n+kDGGsss6q/3qTd6n9VW7TOQaiA7t1YLdCCl8qqcdKlz/vWjFMd2MqgcSGC/16PvChE4sgpUvryfCQ==", "cpu": [ "ia32" ], @@ -608,9 +604,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.6.8.tgz", - "integrity": "sha512-cIuhVsZYd3o3Neo1JSAhJYw6BDvlxaBoqvgwRkG1rs0ExFmEmgYyG7ip9pFKnKNWph/tmW3rDYypmEfjs1is7g==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.1.tgz", + "integrity": "sha512-B/y4MWqP2Xeto1/HV0qtZNOMPSLrEVOqi2b7JSIXG/bhlf+3IAkDzEEoHs+ZikLR4C8hMaS0pVJsDGKFmGzC9A==", "cpu": [ "x64" ], @@ -622,14 +618,14 @@ ] }, "node_modules/@rspack/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.6.8.tgz", - "integrity": "sha512-FolcIAH5FW4J2FET+qwjd1kNeFbCkd0VLuIHO0thyolEjaPSxw5qxG67DA7BZGm6PVcoiSgPLks1DL6eZ8c+fA==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/core/-/core-1.7.1.tgz", + "integrity": "sha512-kRxfY8RRa6nU3/viDvAIP6CRpx+0rfXFRonPL0pHBx8u6HhV7m9rLEyaN6MWsLgNIAWkleFGb7tdo4ux2ljRJQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime-tools": "0.21.6", - "@rspack/binding": "1.6.8", + "@module-federation/runtime-tools": "0.22.0", + "@rspack/binding": "1.7.1", "@rspack/lite-tapable": "1.1.0" }, "engines": { @@ -646,15 +642,15 @@ }, "node_modules/@rspack/lite-tapable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", + "resolved": "https://registry.npmmirror.com/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", "dev": true, "license": "MIT" }, "node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "version": "0.5.18", + "resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.18.tgz", + "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -664,7 +660,7 @@ }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "resolved": "https://registry.npmmirror.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "dev": true, "license": "MIT", @@ -2347,7 +2343,7 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" @@ -2593,9 +2589,9 @@ } }, "@codemirror/autocomplete": { - "version": "6.12.0", - "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.12.0.tgz", - "integrity": "sha512-r4IjdYFthwbCQyvqnSlx0WBHRHi8nBvU+WjJxFUij81qsBfhNudf/XKKmmC2j3m0LaOYUQTf3qiEK1J8lO1sdg==", + "version": "6.20.0", + "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.20.0.tgz", + "integrity": "sha512-bOwvTOIJcG5FVo5gUUupiwYh8MioPLQ4UcqbcRf7UQ98X90tCa9E1kZ3Z7tqwpZxYyOvh1YTYbmZE9RTfTp5hg==", "requires": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -2696,9 +2692,9 @@ "requires": {} }, "@emnapi/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", - "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "dev": true, "optional": true, "requires": { @@ -2707,9 +2703,9 @@ } }, "@emnapi/runtime": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", - "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "dev": true, "optional": true, "requires": { @@ -2718,7 +2714,7 @@ }, "@emnapi/wasi-threads": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "resolved": "https://registry.npmmirror.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", "dev": true, "optional": true, @@ -2834,61 +2830,61 @@ } }, "@module-federation/error-codes": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.21.6.tgz", - "integrity": "sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/error-codes/-/error-codes-0.22.0.tgz", + "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==", "dev": true }, "@module-federation/runtime": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.21.6.tgz", - "integrity": "sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/runtime/-/runtime-0.22.0.tgz", + "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==", "dev": true, "requires": { - "@module-federation/error-codes": "0.21.6", - "@module-federation/runtime-core": "0.21.6", - "@module-federation/sdk": "0.21.6" + "@module-federation/error-codes": "0.22.0", + "@module-federation/runtime-core": "0.22.0", + "@module-federation/sdk": "0.22.0" } }, "@module-federation/runtime-core": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.21.6.tgz", - "integrity": "sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz", + "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==", "dev": true, "requires": { - "@module-federation/error-codes": "0.21.6", - "@module-federation/sdk": "0.21.6" + "@module-federation/error-codes": "0.22.0", + "@module-federation/sdk": "0.22.0" } }, "@module-federation/runtime-tools": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.21.6.tgz", - "integrity": "sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz", + "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==", "dev": true, "requires": { - "@module-federation/runtime": "0.21.6", - "@module-federation/webpack-bundler-runtime": "0.21.6" + "@module-federation/runtime": "0.22.0", + "@module-federation/webpack-bundler-runtime": "0.22.0" } }, "@module-federation/sdk": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.21.6.tgz", - "integrity": "sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/sdk/-/sdk-0.22.0.tgz", + "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==", "dev": true }, "@module-federation/webpack-bundler-runtime": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.21.6.tgz", - "integrity": "sha512-7zIp3LrcWbhGuFDTUMLJ2FJvcwjlddqhWGxi/MW3ur1a+HaO8v5tF2nl+vElKmbG1DFLU/52l3PElVcWf/YcsQ==", + "version": "0.22.0", + "resolved": "https://registry.npmmirror.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz", + "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==", "dev": true, "requires": { - "@module-federation/runtime": "0.21.6", - "@module-federation/sdk": "0.21.6" + "@module-federation/runtime": "0.22.0", + "@module-federation/sdk": "0.22.0" } }, "@napi-rs/wasm-runtime": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", + "resolved": "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", "dev": true, "optional": true, @@ -2899,15 +2895,15 @@ } }, "@rsbuild/core": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.6.15.tgz", - "integrity": "sha512-LvoOF53PL6zXgdzEhgnnP51S4FseDFH1bHrobK4EK6zZX/tN8qgf5tdlmN7h4OkMv/Qs1oUfvj0QcLWSstnnvA==", + "version": "1.7.2", + "resolved": "https://registry.npmmirror.com/@rsbuild/core/-/core-1.7.2.tgz", + "integrity": "sha512-VAFO6cM+cyg2ntxNW6g3tB2Jc5J5mpLjLluvm7VtW2uceNzyUlVv41o66Yp1t1ikxd3ljtqegViXem62JqzveA==", "dev": true, "peer": true, "requires": { - "@rspack/core": "1.6.8", + "@rspack/core": "~1.7.1", "@rspack/lite-tapable": "~1.1.0", - "@swc/helpers": "^0.5.17", + "@swc/helpers": "^0.5.18", "core-js": "~3.47.0", "jiti": "^2.6.1" } @@ -2923,69 +2919,69 @@ } }, "@rspack/binding": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.6.8.tgz", - "integrity": "sha512-lUeL4mbwGo+nqRKqFDCm9vH2jv9FNMVt1X8jqayWRcOCPlj/2UVMEFgqjR7Pp2vlvnTKq//31KbDBJmDZq31RQ==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding/-/binding-1.7.1.tgz", + "integrity": "sha512-qVTV1/UWpMSZktvK5A8+HolgR1Qf0nYR3Gg4Vax5x3/BcHDpwGZ0fbdFRUirGVWH/XwxZ81zoI6F2SZq7xbX+w==", "dev": true, "requires": { - "@rspack/binding-darwin-arm64": "1.6.8", - "@rspack/binding-darwin-x64": "1.6.8", - "@rspack/binding-linux-arm64-gnu": "1.6.8", - "@rspack/binding-linux-arm64-musl": "1.6.8", - "@rspack/binding-linux-x64-gnu": "1.6.8", - "@rspack/binding-linux-x64-musl": "1.6.8", - "@rspack/binding-wasm32-wasi": "1.6.8", - "@rspack/binding-win32-arm64-msvc": "1.6.8", - "@rspack/binding-win32-ia32-msvc": "1.6.8", - "@rspack/binding-win32-x64-msvc": "1.6.8" + "@rspack/binding-darwin-arm64": "1.7.1", + "@rspack/binding-darwin-x64": "1.7.1", + "@rspack/binding-linux-arm64-gnu": "1.7.1", + "@rspack/binding-linux-arm64-musl": "1.7.1", + "@rspack/binding-linux-x64-gnu": "1.7.1", + "@rspack/binding-linux-x64-musl": "1.7.1", + "@rspack/binding-wasm32-wasi": "1.7.1", + "@rspack/binding-win32-arm64-msvc": "1.7.1", + "@rspack/binding-win32-ia32-msvc": "1.7.1", + "@rspack/binding-win32-x64-msvc": "1.7.1" } }, "@rspack/binding-darwin-arm64": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.6.8.tgz", - "integrity": "sha512-e8CTQtzaeGnf+BIzR7wRMUwKfIg0jd/sxMRc1Vd0bCMHBhSN9EsGoMuJJaKeRrSmy2nwMCNWHIG+TvT1CEKg+A==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.1.tgz", + "integrity": "sha512-3C0w0kfCHfgOH+AP/Dx1bm/b3AR/or5CmU22Abevek0m95ndU3iT902eLcm9JNiMQnDQLBQbolfj5P591t0oPg==", "dev": true, "optional": true }, "@rspack/binding-darwin-x64": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.6.8.tgz", - "integrity": "sha512-ku1XpTEPt6Za11zhpFWhfwrTQogcgi9RJrOUVC4FESiPO9aKyd4hJ+JiPgLY0MZOqsptK6vEAgOip+uDVXrCpg==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.1.tgz", + "integrity": "sha512-HTrBpdw2gWwcpJ3c8h4JF8B1YRNvrFT+K620ycttrlu/HvI4/U770BBJ/ej36R/hdh59JvMCGe+w49FyXv6rzg==", "dev": true, "optional": true }, "@rspack/binding-linux-arm64-gnu": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.6.8.tgz", - "integrity": "sha512-fvZX6xZPvBT8qipSpvkKMX5M7yd2BSpZNCZXcefw6gA3uC7LI3gu+er0LrDXY1PtPzVuHTyDx+abwWpagV3PiQ==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.1.tgz", + "integrity": "sha512-BX9yAPCO0WBFyOzKl9bSXT/cH27nnOJp02smIQMxfv7RNfwGkJg5GgakYcuYG+9U1HEFitBSzmwS2+dxDcAxlg==", "dev": true, "optional": true }, "@rspack/binding-linux-arm64-musl": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.6.8.tgz", - "integrity": "sha512-++XMKcMNrt59HcFBLnRaJcn70k3X0GwkAegZBVpel8xYIAgvoXT5+L8P1ExId/yTFxqedaz8DbcxQnNmMozviw==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.1.tgz", + "integrity": "sha512-maBX19XyiVkxzh/NA79ALetCobc4zUyoWkWLeCGyW5xKzhPVFatJp+qCiHqHkqUZcgRo+1i5ihoZ2bXmelIeZg==", "dev": true, "optional": true }, "@rspack/binding-linux-x64-gnu": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.6.8.tgz", - "integrity": "sha512-tv3BWkTE1TndfX+DsE1rSTg8fBevCxujNZ3MlfZ22Wfy9x1FMXTJlWG8VIOXmaaJ1wUHzv8S7cE2YUUJ2LuiCg==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.1.tgz", + "integrity": "sha512-8KJAeBLiWcN7zEc9aaS7LRJPZVtZuQU8mCsn+fRhdQDSc+a9FcTN8b6Lw29z8cejwbU6Gxr/8wk5XGexMWFaZA==", "dev": true, "optional": true }, "@rspack/binding-linux-x64-musl": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.6.8.tgz", - "integrity": "sha512-DCGgZ5/in1O3FjHWqXnDsncRy+48cMhfuUAAUyl0yDj1NpsZu9pP+xfGLvGcQTiYrVl7IH9Aojf1eShP/77WGA==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.1.tgz", + "integrity": "sha512-Gn9x5vhKRELvSoZ3ZjquY8eWtCXur0OsYnZ2/ump8mofM6IDaL7Qqu3Hf4Kud31PDH0tfz0jWf9piX32HHPmgg==", "dev": true, "optional": true }, "@rspack/binding-wasm32-wasi": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.6.8.tgz", - "integrity": "sha512-VUwdhl/lI4m6o1OGCZ9JwtMjTV/yLY5VZTQdEPKb40JMTlmZ5MBlr5xk7ByaXXYHr6I+qnqEm73iMKQvg6iknw==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.1.tgz", + "integrity": "sha512-2r9M5iVchmsFkp3sz7A5YnMm2TfpkB71LK3AoaRWKMfvf5oFky0GSGISYd2TCBASO+X2Qskaq+B24Szo8zH5FA==", "dev": true, "optional": true, "requires": { @@ -2993,47 +2989,47 @@ } }, "@rspack/binding-win32-arm64-msvc": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.6.8.tgz", - "integrity": "sha512-23YX7zlOZlub+nPGDBUzktb4D5D6ETUAluKjXEeHIZ9m7fSlEYBnGL66YE+3t1DHXGd0OqsdwlvrNGcyo6EXDQ==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.1.tgz", + "integrity": "sha512-/WIHp982yqqqAuiz2WLtf1ofo9d1lHDGZJ7flxFllb1iMgnUeSRyX6stxEi11K3Rg6pQa7FdCZGKX/engyj2bw==", "dev": true, "optional": true }, "@rspack/binding-win32-ia32-msvc": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.6.8.tgz", - "integrity": "sha512-cFgRE3APxrY4AEdooVk2LtipwNNT/9mrnjdC5lVbsIsz+SxvGbZR231bxDJEqP15+RJOaD07FO1sIjINFqXMEg==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.1.tgz", + "integrity": "sha512-Kpela29n+kDGGsss6q/3qTd6n9VW7TOQaiA7t1YLdCCl8qqcdKlz/vWjFMd2MqgcSGC/16PvChE4sgpUvryfCQ==", "dev": true, "optional": true }, "@rspack/binding-win32-x64-msvc": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.6.8.tgz", - "integrity": "sha512-cIuhVsZYd3o3Neo1JSAhJYw6BDvlxaBoqvgwRkG1rs0ExFmEmgYyG7ip9pFKnKNWph/tmW3rDYypmEfjs1is7g==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.1.tgz", + "integrity": "sha512-B/y4MWqP2Xeto1/HV0qtZNOMPSLrEVOqi2b7JSIXG/bhlf+3IAkDzEEoHs+ZikLR4C8hMaS0pVJsDGKFmGzC9A==", "dev": true, "optional": true }, "@rspack/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.6.8.tgz", - "integrity": "sha512-FolcIAH5FW4J2FET+qwjd1kNeFbCkd0VLuIHO0thyolEjaPSxw5qxG67DA7BZGm6PVcoiSgPLks1DL6eZ8c+fA==", + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/@rspack/core/-/core-1.7.1.tgz", + "integrity": "sha512-kRxfY8RRa6nU3/viDvAIP6CRpx+0rfXFRonPL0pHBx8u6HhV7m9rLEyaN6MWsLgNIAWkleFGb7tdo4ux2ljRJQ==", "dev": true, "requires": { - "@module-federation/runtime-tools": "0.21.6", - "@rspack/binding": "1.6.8", + "@module-federation/runtime-tools": "0.22.0", + "@rspack/binding": "1.7.1", "@rspack/lite-tapable": "1.1.0" } }, "@rspack/lite-tapable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", + "resolved": "https://registry.npmmirror.com/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", "dev": true }, "@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "version": "0.5.18", + "resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.18.tgz", + "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==", "dev": true, "peer": true, "requires": { @@ -3042,7 +3038,7 @@ }, "@tybys/wasm-util": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "resolved": "https://registry.npmmirror.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "dev": true, "optional": true, @@ -4197,7 +4193,7 @@ }, "tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, diff --git a/package.json b/package.json index 6799a1d..038afdd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-next", "private": true, - "version": "1.3.1", + "version": "1.4.0", "type": "module", "scripts": { "start": "rsbuild dev", @@ -10,6 +10,7 @@ "fmt": "prettier --write src" }, "dependencies": { + "@codemirror/autocomplete": "^6.20.0", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-python": "^6.2.1", "@vueuse/core": "^14.1.0", @@ -29,7 +30,7 @@ }, "devDependencies": { "@iconify/vue": "^5.0.0", - "@rsbuild/core": "^1.6.15", + "@rsbuild/core": "^1.7.2", "@rsbuild/plugin-vue": "^1.2.2", "@types/file-saver": "^2.0.7", "prettier": "^3.7.4", diff --git a/src/components/CodeEditor.vue b/src/components/CodeEditor.vue index 37e4476..97f1de1 100644 --- a/src/components/CodeEditor.vue +++ b/src/components/CodeEditor.vue @@ -3,12 +3,14 @@ import { cpp } from "@codemirror/lang-cpp" import { python } from "@codemirror/lang-python" import { EditorState } from "@codemirror/state" import { EditorView } from "@codemirror/view" +import { autocompletion } from "@codemirror/autocomplete" import { Icon } from "@iconify/vue" import { useDark } from "@vueuse/core" import { computed, ref, watch } from "vue" import { Codemirror } from "vue-codemirror" import { oneDark } from "../themes/oneDark" import { smoothy } from "../themes/smoothy" +import { enhanceCompletion } from "../extensions/autocompletion" import { LANGUAGE } from "../types" interface Props { @@ -51,13 +53,18 @@ watch( }, ) -const lang = computed(() => { +const langExtension = computed(() => { if (props.language === "python" || props.language === "turtle") { return python() } return cpp() }) +const enhanceAutoCompletion = computed(() => { + console.log(props.language) + return autocompletion({ override: [enhanceCompletion(props.language)] }) +}) + function onChange(v: string) { emit("update:modelValue", v) } @@ -79,7 +86,12 @@ function onReady(payload: { & { apply?: string | Completion["apply"] } + +// 中文注释提示 +const chineseAnnotations: Record = { + python: [ + { + label: "print", + detail: "打印输出", + type: "function", + info: "内置函数,将对象输出到标准输出,可用 sep 和 end 指定分隔符与结尾字符", + boost: 100, + apply: "print()", + }, + { + label: "input", + detail: "读取输入", + type: "function", + info: "内置函数,读取一行输入并返回字符串,可传入提示信息", + boost: 95, + apply: "input()", + }, + { + label: "len", + detail: "获取长度", + type: "function", + info: "返回对象的长度,常用于列表、字符串、字典等序列或集合类型", + boost: 90, + apply: "len()", + }, + { + label: "range", + detail: "生成整数序列", + type: "function", + info: "返回不可变的整数序列,支持 start、stop、step,常用于 for 循环", + boost: 85, + apply: "range()", + }, + { + label: "enumerate", + detail: "枚举索引与元素", + type: "function", + info: "遍历可迭代对象时同时得到索引和值,可通过 start 指定起始索引", + boost: 82, + apply: "enumerate()", + }, + { + label: "zip", + detail: "并行遍历", + type: "function", + info: "将多个可迭代对象聚合为元组迭代器,长度以最短序列为准", + boost: 80, + apply: "zip()", + }, + { + label: "map", + detail: "映射函数", + type: "function", + info: "对可迭代对象的每个元素应用函数,返回惰性迭代器", + boost: 78, + apply: "map()", + }, + { + label: "filter", + detail: "过滤元素", + type: "function", + info: "保留函数返回真值的元素,返回惰性迭代器", + boost: 76, + apply: "filter()", + }, + { + label: "sorted", + detail: "排序", + type: "function", + info: "返回排序后的新列表,支持 key 与 reverse 参数", + boost: 74, + apply: "sorted()", + }, + { + label: "sum", + detail: "求和", + type: "function", + info: "对可迭代对象元素求和,可指定起始值", + boost: 72, + apply: "sum()", + }, + { + label: "open", + detail: "文件读写", + type: "function", + info: "打开文件并返回文件对象,常与 with 语句搭配确保自动关闭", + boost: 70, + apply: "open()", + }, + { + label: "abs", + detail: "绝对值", + type: "function", + info: "返回数字的绝对值", + boost: 68, + apply: "abs()", + }, + { + label: "round", + detail: "四舍五入", + type: "function", + info: "按指定精度进行四舍五入,默认到整数", + boost: 66, + apply: "round()", + }, + { + label: "isinstance", + detail: "类型检查", + type: "function", + info: "判断对象是否为某个类型或类型元组的实例", + boost: 64, + apply: "isinstance()", + }, + { + label: "type", + detail: "获取类型", + type: "function", + info: "返回对象的类型,或在三个参数形式下动态创建类型", + boost: 62, + apply: "type()", + }, + { + label: "list", + detail: "列表构造", + type: "function", + info: "将可迭代对象转换为列表,或创建空列表", + boost: 60, + apply: "list()", + }, + { + label: "dict", + detail: "字典构造", + type: "function", + info: "根据映射或键值对序列创建字典", + boost: 58, + apply: "dict()", + }, + { + label: "set", + detail: "集合构造", + type: "function", + info: "根据可迭代对象创建集合,自动去重", + boost: 56, + apply: "set()", + }, + { + label: "tuple", + detail: "元组构造", + type: "function", + info: "将可迭代对象转换为元组,或创建空元组", + boost: 54, + apply: "tuple()", + }, + { + label: "int", + detail: "转整数", + type: "function", + info: "将参数转换为整型,支持基数转换", + boost: 74, + apply: "int()", + }, + { + label: "float", + detail: "转浮点数", + type: "function", + info: "将参数转换为浮点数,支持字符串与数字", + boost: 72, + apply: "float()", + }, + { + label: "str", + detail: "转字符串", + type: "function", + info: "将对象转换为字符串表示,常用于输出", + boost: 70, + apply: "str()", + }, + { + label: "bool", + detail: "转布尔值", + type: "function", + info: "根据真值测试转换为 True/False,空对象为 False", + boost: 68, + apply: "bool()", + }, + { + label: "def", + detail: "定义函数", + type: "keyword", + info: "定义可复用的函数块,支持位置参数、关键字参数与默认值", + boost: 52, + }, + { + label: "class", + detail: "定义类", + type: "keyword", + info: "定义自定义类型,支持继承与魔术方法", + boost: 50, + }, + { + label: "with", + detail: "上下文管理", + type: "keyword", + info: "进入上下文管理器,自动处理资源的进入与退出", + boost: 48, + }, + { + label: "try", + detail: "异常捕获", + type: "keyword", + info: "开始异常处理块,与 except/finally/else 结合使用", + boost: 46, + }, + { + label: "except", + detail: "处理异常", + type: "keyword", + info: "捕获特定异常类型并处理,常配合 try 使用", + boost: 44, + }, + { + label: "finally", + detail: "清理收尾", + type: "keyword", + info: "无论是否发生异常都执行的收尾代码块", + boost: 42, + }, + { + label: "import", + detail: "导入模块", + type: "keyword", + info: "导入模块或包中的名称,可与 as 指定别名", + boost: 40, + }, + { + label: "from", + detail: "按需导入", + type: "keyword", + info: "从模块中按名称导入对象,可结合 import 与 as", + boost: 38, + }, + { + label: "return", + detail: "返回值", + type: "keyword", + info: "结束函数并返回值,未指定值时返回 None", + boost: 36, + }, + { + label: "append", + detail: "列表追加", + type: "method", + info: "在列表尾部添加新元素,等价于 list.append(value)", + boost: 48, + apply: "append()", + }, + { + label: "insert", + detail: "列表插入", + type: "method", + info: "在指定位置插入元素,list.insert(index, value)", + boost: 46, + apply: "insert()", + }, + { + label: "remove", + detail: "删除匹配值", + type: "method", + info: "删除列表中第一次出现的指定值,若不存在将抛出异常", + boost: 44, + apply: "remove()", + }, + { + label: "pop", + detail: "弹出元素", + type: "method", + info: "移除并返回列表指定位置(默认尾部)的元素", + boost: 42, + apply: "pop()", + }, + { + label: "count", + detail: "统计次数", + type: "method", + info: "返回某个对象在列表中出现的次数", + boost: 40, + apply: "count()", + }, + { + label: "reverse", + detail: "反转列表", + type: "method", + info: "原地反转列表中元素的顺序", + boost: 38, + apply: "reverse()", + }, + { + label: "sort", + detail: "列表排序", + type: "method", + info: "对列表进行原地排序,可指定 key 与 reverse", + boost: 36, + apply: "sort()", + }, + { + label: "add", + detail: "集合添加", + type: "method", + info: "向集合添加单个元素,若已存在则忽略", + boost: 50, + apply: "add()", + }, + { + label: "clear", + detail: "清空集合", + type: "method", + info: "移除集合中所有元素,变为空集", + boost: 48, + apply: "clear()", + }, + { + label: "keys", + detail: "字典键", + type: "method", + info: "返回字典键的可迭代视图", + boost: 42, + apply: "keys()", + }, + { + label: "values", + detail: "字典值", + type: "method", + info: "返回字典值的可迭代视图", + boost: 40, + apply: "values()", + }, + { + label: "split", + detail: "字符串切割", + type: "method", + info: "按分隔符切分字符串,返回列表,默认按空白字符", + boost: 52, + apply: "split()", + }, + { + label: "replace", + detail: "字符串替换", + type: "method", + info: "将字符串中的子串替换为新内容,可限定次数", + boost: 50, + apply: "replace()", + }, + { + label: "format", + detail: "格式化字符串", + type: "method", + info: "使用占位符或命名参数进行字符串格式化", + boost: 48, + apply: "format()", + }, + { + label: "strip", + detail: "去首尾指定字符", + type: "method", + info: "移除字符串首尾指定字符,默认移除空白", + boost: 46, + apply: "strip()", + }, + { + label: "lower", + detail: "转小写", + type: "method", + info: "将字符串中的字母转换为小写形式", + boost: 44, + apply: "lower()", + }, + { + label: "upper", + detail: "转大写", + type: "method", + info: "将字符串中的字母转换为大写形式", + boost: 42, + apply: "upper()", + }, + { + label: "swapcase", + detail: "大小写互换", + type: "method", + info: "将字符串中的大小写字母互换", + boost: 40, + apply: "swapcase()", + }, + { + label: "find", + detail: "查找子串位置", + type: "method", + info: "返回子串首次出现的索引,未找到返回 -1", + boost: 38, + apply: "find()", + }, + { + label: "index", + detail: "查找子串索引", + type: "method", + info: "返回子串首次出现的索引,未找到抛出异常", + boost: 36, + apply: "index()", + }, + { + label: "startswith", + detail: "前缀判断", + type: "method", + info: "判断字符串是否以指定前缀开头,可指定范围", + boost: 34, + apply: "startswith()", + }, + { + label: "endswith", + detail: "后缀判断", + type: "method", + info: "判断字符串是否以指定后缀结尾,可指定范围", + boost: 32, + apply: "endswith()", + }, + { + label: "isalnum", + detail: "是否字母数字", + type: "method", + info: "检测字符串是否只由字母和数字组成", + boost: 30, + apply: "isalnum()", + }, + { + label: "isalpha", + detail: "是否字母", + type: "method", + info: "检测字符串是否只由字母组成", + boost: 28, + apply: "isalpha()", + }, + { + label: "isdigit", + detail: "是否数字", + type: "method", + info: "检测字符串是否只由数字组成", + boost: 26, + apply: "isdigit()", + }, + { + label: "islower", + detail: "是否全小写", + type: "method", + info: "检测字符串是否全部由小写字母组成且至少有一个字母", + boost: 24, + apply: "islower()", + }, + { + label: "isupper", + detail: "是否全大写", + type: "method", + info: "检测字符串中所有字母是否都为大写且至少有一个字母", + boost: 22, + apply: "isupper()", + }, + ], + turtle: [ + { + label: "forward", + detail: "向前移动", + type: "function", + info: "让海龟沿当前朝向向前移动指定距离", + boost: 90, + apply: "forward()", + }, + { + label: "backward", + detail: "向后移动", + type: "function", + info: "让海龟沿当前朝向向后移动指定距离", + boost: 88, + apply: "backward()", + }, + { + label: "left", + detail: "左转", + type: "function", + info: "让海龟左转给定角度(度数)", + boost: 86, + apply: "left()", + }, + { + label: "right", + detail: "右转", + type: "function", + info: "让海龟右转给定角度(度数)", + boost: 84, + apply: "right()", + }, + { + label: "penup", + detail: "抬笔", + type: "function", + info: "抬起画笔移动,不留下轨迹,也叫 up", + boost: 82, + apply: "penup()", + }, + { + label: "pendown", + detail: "落笔", + type: "function", + info: "放下画笔继续绘制轨迹,也叫 down", + boost: 80, + apply: "pendown()", + }, + { + label: "goto", + detail: "移动到坐标", + type: "function", + info: "移动到指定坐标,若笔落下则绘制路径", + boost: 78, + apply: "goto()", + }, + { + label: "circle", + detail: "画圆/弧", + type: "function", + info: "以当前位置为起点绘制圆或弧", + boost: 76, + apply: "circle()", + }, + { + label: "begin_fill", + detail: "开始填充", + type: "function", + info: "开启填充模式,绘制封闭图形后与 end_fill 搭配使用", + boost: 74, + apply: "begin_fill()", + }, + { + label: "end_fill", + detail: "结束填充", + type: "function", + info: "结束填充模式,自动填充自 begin_fill 以来的闭合轨迹", + boost: 72, + apply: "end_fill()", + }, + { + label: "color", + detail: "设置颜色", + type: "function", + info: "设置画笔与填充颜色,可单独或同时指定", + boost: 70, + apply: "color()", + }, + { + label: "speed", + detail: "设置速度", + type: "function", + info: "设置绘制速度,0 为最快", + boost: 68, + apply: "speed()", + }, + { + label: "setheading", + detail: "设置朝向", + type: "function", + info: "将海龟朝向设置为绝对角度,0 度向东", + boost: 66, + apply: "setheading()", + }, + { + label: "home", + detail: "回到原点", + type: "function", + info: "将海龟移动回原点并面向东,保持笔状态", + boost: 64, + apply: "home()", + }, + { + label: "clear", + detail: "清空画布", + type: "function", + info: "清除轨迹但不移动海龟位置与状态", + boost: 62, + apply: "clear()", + }, + { + label: "reset", + detail: "重置画布", + type: "function", + info: "重置画布并将海龟回到初始位置与方向", + boost: 60, + apply: "reset()", + }, + { + label: "hideturtle", + detail: "隐藏海龟", + type: "function", + info: "隐藏光标形状,仅绘制轨迹", + boost: 58, + apply: "hideturtle()", + }, + { + label: "showturtle", + detail: "显示海龟", + type: "function", + info: "显示光标形状,恢复可见", + boost: 56, + apply: "showturtle()", + }, + { + label: "write", + detail: "写文本", + type: "function", + info: "在当前位置写入文本,可指定对齐和字体", + boost: 54, + apply: "write()", + }, + { + label: "dot", + detail: "画点", + type: "function", + info: "绘制一个指定直径与颜色的圆点", + boost: 52, + apply: "dot()", + }, + { + label: "pensize", + detail: "设置笔粗", + type: "function", + info: "设置或获取画笔粗细", + boost: 50, + apply: "pensize()", + }, + { + label: "pencolor", + detail: "设置笔色", + type: "function", + info: "设置或获取画笔颜色", + boost: 48, + apply: "pencolor()", + }, + { + label: "fillcolor", + detail: "设置填充色", + type: "function", + info: "设置或获取填充颜色", + boost: 46, + apply: "fillcolor()", + }, + { + label: "bgcolor", + detail: "设置背景色", + type: "function", + info: "设置画布背景颜色", + boost: 44, + apply: "bgcolor()", + }, + ], + c: [ + { + label: "printf", + detail: "格式化输出", + type: "function", + info: "标准输出函数,格式化打印字符串,常配合 %d/%s 等占位符", + boost: 90, + apply: "printf();", + }, + { + label: "scanf", + detail: "格式化输入", + type: "function", + info: "标准输入函数,按格式读取数据,使用地址符 & 接收变量", + boost: 88, + apply: "scanf();", + }, + { + label: "puts", + detail: "输出字符串", + type: "function", + info: "输出以 \\0 结尾的字符串并自动换行,比 printf 简洁", + boost: 84, + apply: "puts();", + }, + { + label: "gets", + detail: "读取字符串", + type: "function", + info: "读取一行字符串到缓冲区(不安全,建议使用 fgets)", + boost: 60, + apply: "gets();", + }, + { + label: "fgets", + detail: "安全读行", + type: "function", + info: "从文件流读取一行到缓冲区,限制读取长度,避免溢出", + boost: 82, + apply: "fgets();", + }, + { + label: "memset", + detail: "内存填充", + type: "function", + info: "将一段内存按字节填充为指定值,常用于初始化数组/结构体", + boost: 80, + apply: "memset();", + }, + { + label: "memcpy", + detail: "内存拷贝", + type: "function", + info: "从源地址复制指定字节到目标地址,注意避免重叠", + boost: 78, + apply: "memcpy();", + }, + { + label: "strlen", + detail: "字符串长度", + type: "function", + info: "计算以 \\0 结尾的字符串长度(不含终止符)", + boost: 76, + apply: "strlen();", + }, + { + label: "strcmp", + detail: "字符串比较", + type: "function", + info: "按字典序比较两个字符串,相等返回 0,小于返回负数", + boost: 74, + apply: "strcmp();", + }, + { + label: "strcpy", + detail: "字符串拷贝", + type: "function", + info: "将源字符串复制到目标(包含终止符),目标需有足够空间", + boost: 72, + apply: "strcpy();", + }, + { + label: "int main", + detail: "程序入口", + type: "keyword", + info: "C 程序入口函数,通常返回 0 表示正常退出", + boost: 70, + }, + { + label: "for", + detail: "循环语句", + type: "keyword", + info: "for (init; condition; step) 结构,用于固定次数循环", + boost: 68, + }, + { + label: "while", + detail: "条件循环", + type: "keyword", + info: "while (condition) 循环,条件为真时重复执行", + boost: 66, + }, + { + label: "if", + detail: "条件判断", + type: "keyword", + info: "if (condition) 分支,可搭配 else / else if", + boost: 64, + }, + { + label: "struct", + detail: "结构体定义", + type: "keyword", + info: "定义自定义数据结构,可组合不同类型的成员", + boost: 62, + }, + { + label: "typedef", + detail: "类型别名", + type: "keyword", + info: "为已有类型定义别名,提升可读性", + boost: 60, + }, + { + label: "const", + detail: "只读限定", + type: "keyword", + info: "声明常量或只读指针,防止意外修改", + boost: 58, + }, + { + label: "return", + detail: "返回值", + type: "keyword", + info: "结束函数并返回值,main 返回 0 表示成功", + boost: 56, + }, + ], + cpp: [ + { + label: "#include ", + detail: "常用头文件合集", + type: "keyword", + info: "一次性引入常见 STL 头文件,竞赛常用写法", + boost: 95, + }, + { + label: "#include ", + detail: "标准输入输出", + type: "keyword", + info: "引入 iostream,提供 std::cin / std::cout 等流式 IO", + boost: 93, + }, + { + label: "using namespace std;", + detail: "使用 std 命名空间", + type: "keyword", + info: "简化 std 前缀的引用,头文件引入后常见写法", + boost: 91, + }, + { + label: "std::cout", + detail: "标准输出流", + type: "variable", + info: "搭配 << 输出数据,可用 std::endl 或 '\\n' 换行", + boost: 90, + apply: "std::cout << << std::endl;", + }, + { + label: "std::cin", + detail: "标准输入流", + type: "variable", + info: "搭配 >> 读取输入,常与 std::cout 配合提示", + boost: 88, + apply: "std::cin >> ;", + }, + { + label: "std::vector", + detail: "动态数组", + type: "class", + info: "可变长顺序容器,支持 push_back / size / iter 访问", + boost: 86, + apply: "std::vector v;", + }, + { + label: "std::string", + detail: "字符串类", + type: "class", + info: "可变长字符串,支持拼接、substr、find 等操作", + boost: 84, + apply: "std::string s;", + }, + { + label: "std::sort", + detail: "排序算法", + type: "function", + info: "std::sort(begin, end, cmp):对区间排序,可自定义比较器", + boost: 82, + apply: "std::sort();", + }, + { + label: "std::pair", + detail: "二元组", + type: "class", + info: "存储两个元素的容器,可通过 first/second 访问", + boost: 80, + apply: "std::pair p;", + }, + { + label: "for(auto &x : container)", + detail: "范围 for 循环", + type: "keyword", + info: "现代 C++ 遍历容器写法,可用 const auto& 避免拷贝", + boost: 78, + apply: "for (auto &x : ) {\n \n}", + }, + { + label: "int main", + detail: "程序入口", + type: "keyword", + info: "C++ 程序主函数模板,返回 0 表示正常退出", + boost: 76, + apply: "int main() {\n \n return 0;\n}", + }, + ], +} + +export function enhanceCompletion(language: LANGUAGE): CompletionSource { + return async function ( + context: CompletionContext, + ): Promise { + const word = context.matchBefore(/\w+/) + if (!word) return null + + const completions: Completion[] = ( + chineseAnnotations[language] || [] + ).map((completion) => { + const insertText = + typeof completion.apply === "string" + ? completion.apply + : completion.label + const cursorOffset = insertText.includes("(") + ? insertText.indexOf("(") + 1 + : insertText.length + + if ( + (completion.type === "function" || completion.type === "method") && + insertText.includes(")") + ) { + return { + ...completion, + apply: ( + view: EditorView, + _c: Completion, + from: number, + to: number, + ) => { + view.dispatch({ + changes: { from, to, insert: insertText }, + selection: { anchor: from + cursorOffset }, + }) + }, + } + } + + return completion + }) + + return { + from: word.from, + options: completions, + validFor: /^\w+$/, + } + } +}