diff --git a/.editorconfig b/.editorconfig index b9c69ddd1..14039a4e7 100644 --- a/.editorconfig +++ b/.editorconfig @@ -13,3 +13,6 @@ indent_size = 2 [*.md] indent_size = 2 + +[*.yml] +indent_size = 2 diff --git a/package-lock.json b/package-lock.json index 6c6d53ed8..bc6dbb1a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,28 +15,28 @@ "@codingame/esbuild-import-meta-url-plugin": "~1.0.2", "@codingame/monaco-vscode-rollup-vsix-plugin": "~9.0.3", "@testing-library/react": "~16.0.1", - "@types/node": "~20.16.9", - "@types/react": "~18.3.9", + "@types/node": "~20.16.10", + "@types/react": "~18.3.10", "@types/react-dom": "~18.3.0", "@types/vscode": "~1.93.0", "@typescript-eslint/eslint-plugin": "~7.18.0", "@typescript-eslint/parser": "~7.18.0", - "@vitejs/plugin-react": "~4.3.1", - "@vitest/browser": "~2.1.1", + "@vitejs/plugin-react": "~4.3.2", + "@vitest/browser": "~2.1.2", "editorconfig": "~2.0.0", "esbuild": "~0.24.0", - "eslint": "~8.57.0", + "eslint": "~8.57.1", "eslint-plugin-header": "~3.1.1", "eslint-plugin-import": "~2.29.1", "eslint-plugin-unused-imports": "~3.2.0", "http-server": "~14.1.1", "minimatch": "~10.0.1", "playwright": "~1.47.2", - "typescript": "~5.5.4", + "typescript": "~5.6.2", "vite": "~5.4.8", - "vite-node": "~2.1.1", - "vitest": "~2.1.1", - "webdriverio": "~9.1.1" + "vite-node": "~2.1.2", + "vitest": "~2.1.2", + "webdriverio": "~9.1.2" } }, "node_modules/@ampproject/remapping": { @@ -53,12 +53,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" }, "engines": { @@ -66,30 +67,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", - "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", + "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", - "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", + "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.9", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-module-transforms": "^7.24.9", - "@babel/helpers": "^7.24.8", - "@babel/parser": "^7.24.8", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.9", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -114,29 +117,31 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", - "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.9", + "@babel/types": "^7.25.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", - "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -149,71 +154,36 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", - "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -232,77 +202,71 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", - "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.8" + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -316,6 +280,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -328,6 +293,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -342,6 +308,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -350,13 +317,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -366,6 +335,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -375,6 +345,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -383,10 +354,14 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", - "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", + "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.7" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -437,33 +412,32 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", - "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.8", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.8", - "@babel/types": "^7.24.8", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -472,13 +446,14 @@ } }, "node_modules/@babel/types": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", - "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", + "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -569,6 +544,15 @@ "vscode": "npm:@codingame/monaco-vscode-api@9.0.3" } }, + "node_modules/@codingame/monaco-vscode-bulk-edit-service-override": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-bulk-edit-service-override/-/monaco-vscode-bulk-edit-service-override-9.0.3.tgz", + "integrity": "sha512-fLNVfoHWp/W9viMdRtx310P9pPmSU5H3R87208cyew652ZQN1VlpSoM4a5X0lRxj4PZSVL+qNxgCi8bypo4hXw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@9.0.3" + } + }, "node_modules/@codingame/monaco-vscode-configuration-service-override": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-configuration-service-override/-/monaco-vscode-configuration-service-override-9.0.3.tgz", @@ -990,6 +974,70 @@ "vscode": "npm:@codingame/monaco-vscode-api@9.0.3" } }, + "node_modules/@codingame/monaco-vscode-view-banner-service-override": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-view-banner-service-override/-/monaco-vscode-view-banner-service-override-9.0.3.tgz", + "integrity": "sha512-bAzK6mJlJYaXGv5gZrvRR3hxuTCyXzSRv0WiJPv+sP+Gq3KQbI3tyLDrudJ7Zp4+Vh7HMfvV4BwQaE3v1dm3Cw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@9.0.3" + } + }, + "node_modules/@codingame/monaco-vscode-view-common-service-override": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-view-common-service-override/-/monaco-vscode-view-common-service-override-9.0.3.tgz", + "integrity": "sha512-wa6pP3G86SwKo1bGbRt8zOaR06cFTTL3DVo7Ja5AB5K5vcW2hKlFuRZ0Rdl6CQyD71inMS85GOSeeN/Ful0t/A==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-bulk-edit-service-override": "9.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@9.0.3" + } + }, + "node_modules/@codingame/monaco-vscode-view-status-bar-service-override": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-view-status-bar-service-override/-/monaco-vscode-view-status-bar-service-override-9.0.3.tgz", + "integrity": "sha512-MRMtBZHsATlmjsELGIX4ediyH48FpsKxFTDstXecR5rE+6Y2VUJJHTZiAQRbADMD7as9eVH91Yi/+66ZiC0fag==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@9.0.3" + } + }, + "node_modules/@codingame/monaco-vscode-view-title-bar-service-override": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-view-title-bar-service-override/-/monaco-vscode-view-title-bar-service-override-9.0.3.tgz", + "integrity": "sha512-uO5PmEdMFtyGQwj387lbSXYkua8fQqj50WkM2HoVjGmxu4vgKHHMVpgGDSW80wPQl8ya37O3o8I2xrd3Mf65yg==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@9.0.3" + } + }, + "node_modules/@codingame/monaco-vscode-views-service-override": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-views-service-override/-/monaco-vscode-views-service-override-9.0.3.tgz", + "integrity": "sha512-8q+GmdCVSBL9CSER0PspRkFmdBPW3PqgfN8OyZtWxCiFj2ZXSR063mzsYbPqUk4+g0cOmbOjNxShWVfs8lWQdg==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-keybindings-service-override": "9.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "9.0.3", + "@codingame/monaco-vscode-view-common-service-override": "9.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@9.0.3" + } + }, + "node_modules/@codingame/monaco-vscode-workbench-service-override": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-workbench-service-override/-/monaco-vscode-workbench-service-override-9.0.3.tgz", + "integrity": "sha512-LeN6GsE0l1TiUNoAFW37AjQtD59Hr4xPhTw0Ny6yaqmQ6ancb90JbAfML3E4JZEpMuT+mWZvvWNu+VwIblIzgQ==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-keybindings-service-override": "9.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "9.0.3", + "@codingame/monaco-vscode-view-banner-service-override": "9.0.3", + "@codingame/monaco-vscode-view-common-service-override": "9.0.3", + "@codingame/monaco-vscode-view-status-bar-service-override": "9.0.3", + "@codingame/monaco-vscode-view-title-bar-service-override": "9.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@9.0.3" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -1517,22 +1565,24 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -1545,6 +1595,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1555,6 +1606,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1580,36 +1632,36 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@inquirer/confirm": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz", - "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", + "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.0.10", - "@inquirer/type": "^1.5.2" + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" }, "engines": { "node": ">=18" } }, "node_modules/@inquirer/core": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.10.tgz", - "integrity": "sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", + "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.2", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", "@types/mute-stream": "^0.0.4", - "@types/node": "^22.1.0", + "@types/node": "^22.5.5", "@types/wrap-ansi": "^3.0.0", "ansi-escapes": "^4.3.2", - "cli-spinners": "^2.9.2", "cli-width": "^4.1.0", "mute-stream": "^1.0.0", "signal-exit": "^4.1.0", @@ -1621,27 +1673,33 @@ "node": ">=18" } }, - "node_modules/@inquirer/core/node_modules/@types/node": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", - "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "node_modules/@inquirer/core/node_modules/@inquirer/type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", + "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.13.0" + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@inquirer/core/node_modules/undici-types": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", - "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==", + "node_modules/@inquirer/core/node_modules/@types/node": { + "version": "22.7.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", + "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } }, "node_modules/@inquirer/figures": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", - "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.6.tgz", + "integrity": "sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ==", "dev": true, "license": "MIT", "engines": { @@ -1649,9 +1707,9 @@ } }, "node_modules/@inquirer/type": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz", - "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", + "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", "dev": true, "license": "MIT", "dependencies": { @@ -1863,9 +1921,9 @@ } }, "node_modules/@mswjs/interceptors": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", - "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==", + "version": "0.35.9", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.35.9.tgz", + "integrity": "sha512-SSnyl/4ni/2ViHKkiZb8eajA/eN1DNFaHjhGiLUdZvDz6PKF4COSf/17xqSz64nOo2Ia29SA6B2KNCsyCbVmaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1873,7 +1931,7 @@ "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", - "outvariant": "^1.2.1", + "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" }, "engines": { @@ -2479,9 +2537,9 @@ } }, "node_modules/@types/node": { - "version": "20.16.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.9.tgz", - "integrity": "sha512-rkvIVJxsOfBejxK7I0FO5sa2WxFmJCzoDwcd88+fq/CUfynNywTo/1/T6hyFz22CyztsnLS9nVlHOnTI36RH5w==", + "version": "20.16.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz", + "integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==", "dev": true, "license": "MIT", "dependencies": { @@ -2507,9 +2565,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.3.9", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.9.tgz", - "integrity": "sha512-+BpAVyTpJkNWWSSnaLBk6ePpHLOGJKnEQNbINNovPWzvEUyAe3e+/d494QdEh71RekM/qV7lw6jzf1HGrJyAtQ==", + "version": "18.3.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", + "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2826,14 +2884,15 @@ "dev": true }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", - "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.2.tgz", + "integrity": "sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.24.5", - "@babel/plugin-transform-react-jsx-self": "^7.24.5", - "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, @@ -2845,16 +2904,16 @@ } }, "node_modules/@vitest/browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-2.1.1.tgz", - "integrity": "sha512-wLKqohwlZI24xMIEZAPwv9SVliv1avaIBeE0ou471D++BRPhiw2mubKBczFFIDHXuSL7UXb8/JQK9Ui6ttW9bQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-2.1.2.tgz", + "integrity": "sha512-tqpGfz2sfjFFNuZ2iLZ6EGRVnH8z18O93ZIicbLsxDhiLgRNz84UcjSvX4pbheuddW+BJeNbLGdM3BU8vohbEg==", "dev": true, "license": "MIT", "dependencies": { "@testing-library/dom": "^10.4.0", "@testing-library/user-event": "^14.5.2", - "@vitest/mocker": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/mocker": "2.1.2", + "@vitest/utils": "2.1.2", "magic-string": "^0.30.11", "msw": "^2.3.5", "sirv": "^2.0.4", @@ -2866,7 +2925,7 @@ }, "peerDependencies": { "playwright": "*", - "vitest": "2.1.1", + "vitest": "2.1.2", "webdriverio": "*" }, "peerDependenciesMeta": { @@ -2882,14 +2941,14 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", - "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.2.tgz", + "integrity": "sha512-FEgtlN8mIUSEAAnlvn7mP8vzaWhEaAEvhSXCqrsijM7K6QqjB11qoRZYEd4AKSCDz8p0/+yH5LzhZ47qt+EyPg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/spy": "2.1.2", + "@vitest/utils": "2.1.2", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -2898,9 +2957,9 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", - "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.2.tgz", + "integrity": "sha512-ExElkCGMS13JAJy+812fw1aCv2QO/LBK6CyO4WOPAzLTmve50gydOlWhgdBJPx2ztbADUq3JVI0C5U+bShaeEA==", "dev": true, "license": "MIT", "dependencies": { @@ -2912,7 +2971,7 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.1", + "@vitest/spy": "2.1.2", "msw": "^2.3.5", "vite": "^5.0.0" }, @@ -2936,9 +2995,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", - "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.2.tgz", + "integrity": "sha512-FIoglbHrSUlOJPDGIrh2bjX1sNars5HbxlcsFKCtKzu4+5lpsRhOCVcuzp0fEhAGHkPZRIXVNzPcpSlkoZ3LuA==", "dev": true, "license": "MIT", "dependencies": { @@ -2949,13 +3008,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", - "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.2.tgz", + "integrity": "sha512-UCsPtvluHO3u7jdoONGjOSil+uON5SSvU9buQh3lP7GgUXHp78guN1wRmZDX4wGK6J10f9NUtP6pO+SFquoMlw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.1", + "@vitest/utils": "2.1.2", "pathe": "^1.1.2" }, "funding": { @@ -2963,13 +3022,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", - "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.2.tgz", + "integrity": "sha512-xtAeNsZ++aRIYIUsek7VHzry/9AcxeULlegBvsdLncLmNCR6tR8SRjn8BbDP4naxtccvzTqZ+L1ltZlRCfBZFA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.2", "magic-string": "^0.30.11", "pathe": "^1.1.2" }, @@ -2978,9 +3037,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", - "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.2.tgz", + "integrity": "sha512-GSUi5zoy+abNRJwmFhBDC0yRuVUn8WMlQscvnbbXdKLXX9dE59YbfwXxuJ/mth6eeqIzofU8BB5XDo/Ns/qK2A==", "dev": true, "license": "MIT", "dependencies": { @@ -2991,13 +3050,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", - "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.2.tgz", + "integrity": "sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.2", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" }, @@ -3016,15 +3075,15 @@ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==" }, "node_modules/@wdio/config": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.1.0.tgz", - "integrity": "sha512-lxrUJK5ZRilRMrKgamooGbmxpE9qeYFSpF2R3H8HGZXnFDUMUQnWYY2Hn6O5Hw0BA9DxZKqCi1hrBxRws9O2ww==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.1.2.tgz", + "integrity": "sha512-M8jDFgTxOeljv5M75em7oCu2cV16jHWH6HWj5CD3ZNzaMeHf+EkIuHNyREJjt8PCnssehzXD26TF63tGPHdksA==", "dev": true, "license": "MIT", "dependencies": { "@wdio/logger": "9.1.0", - "@wdio/types": "9.1.0", - "@wdio/utils": "9.1.0", + "@wdio/types": "9.1.2", + "@wdio/utils": "9.1.2", "decamelize": "^6.0.0", "deepmerge-ts": "^7.0.3", "glob": "^10.2.2", @@ -3150,9 +3209,9 @@ } }, "node_modules/@wdio/types": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.1.0.tgz", - "integrity": "sha512-bi3DTse8Nlat7FTCnciPnJWYggpRSszLQ70ReCcegAUlaancV+Y8ma4IWZROsBQ6f1hB+JIS9gwc/HGcp+6XSQ==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.1.2.tgz", + "integrity": "sha512-mROY3xSBBNujSH0Opo3Sfi1QUm3l7HbVQ8/bDmPCwHXOeYlx0q14rLyyZI3LrN5uJ0KPpuNrVgE36NFaG8+xxw==", "dev": true, "license": "MIT", "dependencies": { @@ -3163,15 +3222,15 @@ } }, "node_modules/@wdio/utils": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.1.0.tgz", - "integrity": "sha512-iH+P/Dakttc7MRsVaikLLe13SDkm9Z+GAAOi6yu6I3x+ao6563KECjsLqJxLCKtbfOjqAqID19QBAtPQTRBVRA==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.1.2.tgz", + "integrity": "sha512-8APCnvJjHkG/6KwXtrPhEYR29Ph+vs1Gx2mGRnbYXNgbworfPEIZETpienHXhDEbINdqSb7EY5LkapIjP7nKbg==", "dev": true, "license": "MIT", "dependencies": { "@puppeteer/browsers": "^2.2.0", "@wdio/logger": "9.1.0", - "@wdio/types": "9.1.0", + "@wdio/types": "9.1.2", "decamelize": "^6.0.0", "deepmerge-ts": "^7.0.3", "edgedriver": "^5.6.1", @@ -3808,9 +3867,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "funding": [ { @@ -3826,10 +3885,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, "bin": { @@ -3919,9 +3979,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001642", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", - "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", + "version": "1.0.30001666", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001666.tgz", + "integrity": "sha512-gD14ICmoV5ZZM1OdzPWmpx+q4GyefaK06zi8hmfHV5xe4/2nOQX3+Dw5o+fSqOws2xVwL9j+anOPFwHzdEdV4g==", "dev": true, "funding": [ { @@ -3936,7 +3996,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chai": { "version": "5.1.1", @@ -4049,19 +4110,6 @@ "chevrotain": "^11.0.0" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-width": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", @@ -4801,10 +4849,11 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.828", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.828.tgz", - "integrity": "sha512-QOIJiWpQJDHAVO4P58pwb133Cwee0nbvy/MV1CwzZVGpkH1RX33N3vsaWRCpR6bF63AAq366neZrRTu7Qlsbbw==", - "dev": true + "version": "1.5.31", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.31.tgz", + "integrity": "sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -5043,10 +5092,11 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5092,16 +5142,17 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -5992,9 +6043,9 @@ } }, "node_modules/geckodriver": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.4.4.tgz", - "integrity": "sha512-0zaw19tcmWeluqx7+Y559JGBtidu1D0Lb8ElYKiNEQu8r3sCfrLUf5V10xypl8u29ZLbgRV7WflxCJVTCkCMFA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.5.0.tgz", + "integrity": "sha512-EnBCT9kJ5oEoP3DaJKjzxAhm7bbNNK6k2q7oCkCT58OIOOiE6Hsr+nVDHflsNaR68HMGtBKOLSZ+YvCDHecScw==", "dev": true, "hasInstallScript": true, "license": "MPL-2.0", @@ -6220,6 +6271,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7005,15 +7057,16 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -7397,6 +7450,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -7621,9 +7675,9 @@ "dev": true }, "node_modules/msw": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.5.tgz", - "integrity": "sha512-+GUI4gX5YC5Bv33epBrD+BGdmDvBg2XGruiWnI3GbIbRmMMBeZ5gs3mJ51OWSGHgJKztZ8AtZeYMMNMVrje2/Q==", + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.9.tgz", + "integrity": "sha512-1m8xccT6ipN4PTqLinPwmzhxQREuxaEJYdx4nIbggxP8aM7r1e71vE7RtOUSQoAm1LydjGfZKy7370XD/tsuYg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -7632,7 +7686,7 @@ "@bundled-es-modules/statuses": "^1.0.1", "@bundled-es-modules/tough-cookie": "^0.1.6", "@inquirer/confirm": "^3.0.0", - "@mswjs/interceptors": "^0.29.0", + "@mswjs/interceptors": "^0.35.8", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", "@types/statuses": "^2.0.4", @@ -7641,7 +7695,7 @@ "headers-polyfill": "^4.0.2", "is-node-process": "^1.2.0", "outvariant": "^1.4.2", - "path-to-regexp": "^6.2.0", + "path-to-regexp": "^6.3.0", "strict-event-emitter": "^0.5.1", "type-fest": "^4.9.0", "yargs": "^17.7.2" @@ -7656,7 +7710,7 @@ "url": "https://github.com/sponsors/mswjs" }, "peerDependencies": { - "typescript": ">= 4.7.x" + "typescript": ">= 4.8.x" }, "peerDependenciesMeta": { "typescript": { @@ -7757,10 +7811,11 @@ } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -8118,9 +8173,9 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true, "license": "MIT" }, @@ -8158,10 +8213,11 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -8420,9 +8476,9 @@ } }, "node_modules/pyright": { - "version": "1.1.382", - "resolved": "https://registry.npmjs.org/pyright/-/pyright-1.1.382.tgz", - "integrity": "sha512-AsTbuh5OiV12GpWqSrekJHWj+dP4KEdB69rBh8Nr+n4OHeXKr5hFtGDksrlhcIGFW6WouHvZERkwA12FHPwWOg==", + "version": "1.1.383", + "resolved": "https://registry.npmjs.org/pyright/-/pyright-1.1.383.tgz", + "integrity": "sha512-b540vUDWGXFlVwhxREgCrvKYT9bnUUPiDtSv5s7sUGxIokTxc06bPC2vfnGunUqaUu6hgIqlv1GRFdOKIEb09A==", "license": "MIT", "bin": { "pyright": "index.js", @@ -9693,9 +9749,9 @@ } }, "node_modules/type-fest": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", - "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==", + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", + "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9792,9 +9848,9 @@ } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -9904,9 +9960,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -9922,9 +9978,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -10064,9 +10121,9 @@ } }, "node_modules/vite-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", - "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.2.tgz", + "integrity": "sha512-HPcGNN5g/7I2OtPjLqgOtCRu/qhVvBxTUD3qzitmL0SrG1cWFzxzhMDWussxSbrRYWqnKf8P2jiNhPMSN+ymsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10492,19 +10549,19 @@ } }, "node_modules/vitest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", - "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.2.tgz", + "integrity": "sha512-veNjLizOMkRrJ6xxb+pvxN6/QAWg95mzcRjtmkepXdN87FNfxAss9RKe2far/G9cQpipfgP2taqg0KiWsquj8A==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.1", - "@vitest/mocker": "2.1.1", - "@vitest/pretty-format": "^2.1.1", - "@vitest/runner": "2.1.1", - "@vitest/snapshot": "2.1.1", - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/expect": "2.1.2", + "@vitest/mocker": "2.1.2", + "@vitest/pretty-format": "^2.1.2", + "@vitest/runner": "2.1.2", + "@vitest/snapshot": "2.1.2", + "@vitest/spy": "2.1.2", + "@vitest/utils": "2.1.2", "chai": "^5.1.1", "debug": "^4.3.6", "magic-string": "^0.30.11", @@ -10515,7 +10572,7 @@ "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.1", + "vite-node": "2.1.2", "why-is-node-running": "^2.3.0" }, "bin": { @@ -10530,8 +10587,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.1", - "@vitest/ui": "2.1.1", + "@vitest/browser": "2.1.2", + "@vitest/ui": "2.1.2", "happy-dom": "*", "jsdom": "*" }, @@ -10718,19 +10775,19 @@ } }, "node_modules/webdriver": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.1.1.tgz", - "integrity": "sha512-XRZitu+W3xpnuA6gFgiSGBCt2P8m4g2Yzt+zXgPqlKiDGwr27F5m40pP2AnlQBlQO7hw0OJJa68QR1KW2D9cHA==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.1.2.tgz", + "integrity": "sha512-NjeYVTCSMwQrd+EDpSSB8YnSNzYeEPU2IoJhvjaXUwTEhoaIvz6x6fM4UqCbm/ph8lZ1uWux43fqIcfDzFQl5Q==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", - "@wdio/config": "9.1.0", + "@wdio/config": "9.1.2", "@wdio/logger": "9.1.0", "@wdio/protocols": "9.0.8", - "@wdio/types": "9.1.0", - "@wdio/utils": "9.1.0", + "@wdio/types": "9.1.2", + "@wdio/utils": "9.1.2", "deepmerge-ts": "^7.0.3", "ws": "^8.8.0" }, @@ -10739,20 +10796,20 @@ } }, "node_modules/webdriverio": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.1.1.tgz", - "integrity": "sha512-jREz3Vy7ItpNn0HG/vh5oZYAzSv4PGGy8mxht7j4BXkcUjkPCBfHtAAXHRwwJVxu1rWJLzn4QhfjLIaEFe73NA==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.1.2.tgz", + "integrity": "sha512-Yk/OmxUmse6YVBMr+iM5zH3LKiy07cJQsq19qL2Zj29+2I3b8kK8uGxx8+DhqYF/A/MVwHUFxACzQDYsdW6pjw==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "^20.11.30", "@types/sinonjs__fake-timers": "^8.1.5", - "@wdio/config": "9.1.0", + "@wdio/config": "9.1.2", "@wdio/logger": "9.1.0", "@wdio/protocols": "9.0.8", "@wdio/repl": "9.0.8", - "@wdio/types": "9.1.0", - "@wdio/utils": "9.1.0", + "@wdio/types": "9.1.2", + "@wdio/utils": "9.1.2", "archiver": "^7.0.1", "aria-query": "^5.3.0", "cheerio": "^1.0.0-rc.12", @@ -10771,7 +10828,7 @@ "rgb2hex": "0.2.5", "serialize-error": "^11.0.3", "urlpattern-polyfill": "^10.0.0", - "webdriver": "9.1.1" + "webdriver": "9.1.2" }, "engines": { "node": ">=18.20.0" @@ -10971,7 +11028,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { "version": "17.7.2", @@ -11132,7 +11190,7 @@ "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~9.0.3", "monaco-editor-wrapper": "~6.0.0-next.1", "monaco-languageclient": "~9.0.0-next.1", - "pyright": "~1.1.382", + "pyright": "~1.1.383", "react": "~18.3.1", "react-dom": "~18.3.1", "request-light": "~0.8.0", @@ -11188,6 +11246,8 @@ "@codingame/monaco-vscode-textmate-service-override": "~9.0.3", "@codingame/monaco-vscode-theme-defaults-default-extension": "~9.0.3", "@codingame/monaco-vscode-theme-service-override": "~9.0.3", + "@codingame/monaco-vscode-views-service-override": "~9.0.3", + "@codingame/monaco-vscode-workbench-service-override": "~9.0.3", "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~9.0.3", "vscode": "npm:@codingame/monaco-vscode-api@~9.0.3", "vscode-languageclient": "~9.0.1", diff --git a/package.json b/package.json index a5ac18fd7..db1833db4 100644 --- a/package.json +++ b/package.json @@ -5,28 +5,28 @@ "@codingame/esbuild-import-meta-url-plugin": "~1.0.2", "@codingame/monaco-vscode-rollup-vsix-plugin": "~9.0.3", "@testing-library/react": "~16.0.1", - "@types/node": "~20.16.9", - "@types/react": "~18.3.9", + "@types/node": "~20.16.10", + "@types/react": "~18.3.10", "@types/react-dom": "~18.3.0", "@types/vscode": "~1.93.0", "@typescript-eslint/eslint-plugin": "~7.18.0", "@typescript-eslint/parser": "~7.18.0", - "@vitejs/plugin-react": "~4.3.1", - "@vitest/browser": "~2.1.1", + "@vitejs/plugin-react": "~4.3.2", + "@vitest/browser": "~2.1.2", "editorconfig": "~2.0.0", "esbuild": "~0.24.0", - "eslint": "~8.57.0", + "eslint": "~8.57.1", "eslint-plugin-header": "~3.1.1", "eslint-plugin-import": "~2.29.1", "eslint-plugin-unused-imports": "~3.2.0", "http-server": "~14.1.1", "minimatch": "~10.0.1", "playwright": "~1.47.2", - "typescript": "~5.5.4", + "typescript": "~5.6.2", "vite": "~5.4.8", - "vite-node": "~2.1.1", - "vitest": "~2.1.1", - "webdriverio": "~9.1.1" + "vite-node": "~2.1.2", + "vitest": "~2.1.2", + "webdriverio": "~9.1.2" }, "volta": { "node": "20.17.0", @@ -57,7 +57,7 @@ "release:prepare": "npm run reset:repo && npm ci && npm run build && npm run lint && npm run test:run", "reset:repo": "git clean -f -X -d", "test": "npm run test:webdriverio", - "test:run": "npm run test:webdriverio", + "test:run": "npm run test:webdriverio:run", "test:webdriverio": "vitest", "test:webdriverio:run": "vitest --run", "test:playwright": "vitest --config vitest.debug.config.ts", diff --git a/packages/client/src/vscode/services.ts b/packages/client/src/vscode/services.ts index 43a8a2854..03fe8dc81 100644 --- a/packages/client/src/vscode/services.ts +++ b/packages/client/src/vscode/services.ts @@ -5,13 +5,15 @@ import * as monaco from 'monaco-editor'; import 'vscode/localExtensionHost'; -import { ILogService, initialize, IWorkbenchConstructionOptions, StandaloneServices, LogLevel } from 'vscode/services'; +import { initialize, IWorkbenchConstructionOptions } from 'vscode/services'; +import { OpenEditor } from '@codingame/monaco-vscode-editor-service-override'; import type { WorkerConfig } from '@codingame/monaco-vscode-extensions-service-override'; import getExtensionServiceOverride from '@codingame/monaco-vscode-extensions-service-override'; import getLanguagesServiceOverride from '@codingame/monaco-vscode-languages-service-override'; import getModelServiceOverride from '@codingame/monaco-vscode-model-service-override'; import getLogServiceOverride from '@codingame/monaco-vscode-log-service-override'; import type { LocalizationOptions } from '@codingame/monaco-vscode-localization-service-override'; +import { EnvironmentOverride } from 'vscode/workbench'; import { Logger } from 'monaco-languageclient/tools'; import { FakeWorker as Worker } from './fakeWorker.js'; @@ -24,9 +26,16 @@ export interface InitializeServiceConfig { userServices?: monaco.editor.IEditorOverrideServices; enableExtHostWorker?: boolean; workspaceConfig?: IWorkbenchConstructionOptions; + viewsConfig?: { + viewServiceType: 'EditorService' | 'ViewsService' | 'WorkspaceService'; + openEditorFunc?: OpenEditor; + viewsInitFunc?: () => void; + }, + envOptions?: EnvironmentOverride; } export interface InitServicesInstructions extends InitializeServiceConfig { + htmlContainer: HTMLElement; caller?: string; performChecks?: () => boolean; logger?: Logger; @@ -48,6 +57,11 @@ export const initEnhancedMonacoEnvironment = () => { return envEnhanced; }; +export const getMonacoEnvironmentEnhanced = () => { + const monWin = (self as Window); + return monWin.MonacoEnvironment as MonacoEnvironmentEnhanced; +}; + export const supplyRequiredServices = async () => { return { ...getLanguagesServiceOverride(), @@ -79,6 +93,7 @@ export const initServices = async (instructions: InitServicesInstructions) => { instructions.logger?.debug(`Initializing vscode services. Caller: ${instructions.caller ?? 'unknown'}`); await importAllServices(instructions); + instructions.viewsConfig?.viewsInitFunc?.(); instructions.logger?.debug('Initialization of vscode services completed successfully.'); envEnhanced.vscodeApiInitialised = true; @@ -108,8 +123,7 @@ export const importAllServices = async (instructions: InitServicesInstructions) reportServiceLoading(userServices, instructions.logger); if (instructions.performChecks === undefined || (typeof instructions.performChecks === 'function' && instructions.performChecks())) { - await initialize(userServices, undefined, instructions.workspaceConfig); - StandaloneServices.get(ILogService).setLevel(instructions.logger?.getLevel() ?? LogLevel.Off); + await initialize(userServices, instructions.htmlContainer, instructions.workspaceConfig, instructions.envOptions); } }; diff --git a/packages/examples/package.json b/packages/examples/package.json index 6a91ee4d6..32b9984f9 100644 --- a/packages/examples/package.json +++ b/packages/examples/package.json @@ -78,7 +78,7 @@ "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~9.0.3", "monaco-editor-wrapper": "~6.0.0-next.1", "monaco-languageclient": "~9.0.0-next.1", - "pyright": "~1.1.382", + "pyright": "~1.1.383", "react": "~18.3.1", "react-dom": "~18.3.1", "request-light": "~0.8.0", diff --git a/packages/examples/src/bare/client.ts b/packages/examples/src/bare/client.ts index 37c2d5c7d..14b02f00f 100644 --- a/packages/examples/src/bare/client.ts +++ b/packages/examples/src/bare/client.ts @@ -22,12 +22,14 @@ import { updateUserConfiguration } from '@codingame/monaco-vscode-configuration- export const runClient = async () => { const logger = new ConsoleLogger(LogLevel.Debug); + const htmlContainer = document.getElementById('monaco-editor-root')!; await initServices({ userServices: { ...getConfigurationServiceOverride(), ...getThemeServiceOverride(), ...getTextmateServiceOverride(), }, + htmlContainer, logger }); @@ -46,7 +48,7 @@ export const runClient = async () => { configureMonacoWorkers(logger); // create monaco editor - monaco.editor.create(document.getElementById('monaco-editor-root')!, { + monaco.editor.create(htmlContainer, { value: `{ "$schema": "http://json.schemastore.org/coffeelint", "line_endings": "unix" diff --git a/packages/examples/src/browser/main.ts b/packages/examples/src/browser/main.ts index 794f16251..851f01a95 100644 --- a/packages/examples/src/browser/main.ts +++ b/packages/examples/src/browser/main.ts @@ -19,7 +19,7 @@ export const runBrowserEditor = async () => { const protocolConverter = createProtocolConverter(undefined, true, true); let mainVscodeDocument: vscode.TextDocument | undefined; - const htmlElement = document.getElementById('monaco-editor-root'); + const htmlContainer = document.getElementById('monaco-editor-root')!; const languageId = 'json'; const code = `{ "$schema": "http://json.schemastore.org/coffeelint", @@ -52,7 +52,8 @@ export const runBrowserEditor = async () => { 'editor.experimental.asyncTokenization': true }) }, - monacoWorkerFactory: configureMonacoWorkers + monacoWorkerFactory: configureMonacoWorkers, + htmlContainer } }; await wrapper.init(jsonClientUserConfig); @@ -155,7 +156,7 @@ export const runBrowserEditor = async () => { diagnosticCollection.clear(); }; - await wrapper.start(htmlElement); + await wrapper.start(); wrapper.getTextModels()?.text?.onDidChangeContent(() => { validate(); diff --git a/packages/examples/src/eclipse.jdt.ls/client/main.ts b/packages/examples/src/eclipse.jdt.ls/client/main.ts index 46da20fb6..a8fdacf2d 100644 --- a/packages/examples/src/eclipse.jdt.ls/client/main.ts +++ b/packages/examples/src/eclipse.jdt.ls/client/main.ts @@ -44,7 +44,8 @@ export const runEclipseJdtLsClient = () => { 'editor.experimental.asyncTokenization': true }) }, - monacoWorkerFactory: configureMonacoWorkers + monacoWorkerFactory: configureMonacoWorkers, + htmlContainer: document.getElementById('monaco-editor-root')! }, languageClientConfigs: { java: { @@ -68,7 +69,6 @@ export const runEclipseJdtLsClient = () => { }; const wrapper = new MonacoEditorLanguageClientWrapper(); - const htmlElement = document.getElementById('monaco-editor-root'); try { document.querySelector('#button-start')?.addEventListener('click', async () => { @@ -77,7 +77,7 @@ export const runEclipseJdtLsClient = () => { // open files, so the LS can pick it up await vscode.workspace.openTextDocument(helloJavaUri); - await wrapper.start(htmlElement); + await wrapper.start(); }); document.querySelector('#button-dispose')?.addEventListener('click', async () => { await wrapper.dispose(); diff --git a/packages/examples/src/groovy/client/main.ts b/packages/examples/src/groovy/client/main.ts index 7b86068be..10e6d73ac 100644 --- a/packages/examples/src/groovy/client/main.ts +++ b/packages/examples/src/groovy/client/main.ts @@ -40,7 +40,8 @@ const userConfig: WrapperConfig = { 'editor.experimental.asyncTokenization': true }) }, - monacoWorkerFactory: configureMonacoWorkers + monacoWorkerFactory: configureMonacoWorkers, + htmlContainer: document.getElementById('monaco-editor-root')! }, languageClientConfigs: { groovy: { @@ -57,11 +58,10 @@ const userConfig: WrapperConfig = { export const runGroovyClient = () => { const wrapper = new MonacoEditorLanguageClientWrapper(); - const htmlElement = document.getElementById('monaco-editor-root'); try { document.querySelector('#button-start')?.addEventListener('click', async () => { - await wrapper.initAndStart(userConfig, htmlElement); + await wrapper.initAndStart(userConfig); }); document.querySelector('#button-dispose')?.addEventListener('click', async () => { await wrapper.dispose(); diff --git a/packages/examples/src/json/client/wrapperWs.ts b/packages/examples/src/json/client/wrapperWs.ts index e2cacdcb4..9ef361a8a 100644 --- a/packages/examples/src/json/client/wrapperWs.ts +++ b/packages/examples/src/json/client/wrapperWs.ts @@ -40,7 +40,8 @@ export const jsonClientUserConfig: WrapperConfig = { 'editor.experimental.asyncTokenization': true }) }, - monacoWorkerFactory: configureMonacoWorkers + monacoWorkerFactory: configureMonacoWorkers, + htmlContainer: document.getElementById('monaco-editor-root')! }, languageClientConfigs: { json: { @@ -69,11 +70,10 @@ export const jsonClientUserConfig: WrapperConfig = { export const runJsonWrapper = () => { const wrapper = new MonacoEditorLanguageClientWrapper(); - const htmlElement = document.getElementById('monaco-editor-root'); try { document.querySelector('#button-start')?.addEventListener('click', async () => { - await wrapper.initAndStart(jsonClientUserConfig, htmlElement); + await wrapper.initAndStart(jsonClientUserConfig); }); document.querySelector('#button-dispose')?.addEventListener('click', async () => { await wrapper.dispose(); diff --git a/packages/examples/src/langium/langium-dsl/config/classicConfig.ts b/packages/examples/src/langium/langium-dsl/config/classicConfig.ts index 53f16b34c..a5b9ef65f 100644 --- a/packages/examples/src/langium/langium-dsl/config/classicConfig.ts +++ b/packages/examples/src/langium/langium-dsl/config/classicConfig.ts @@ -49,7 +49,8 @@ export const setupLangiumClientClassic = async (): Promise => { useWorkerFactory({ logger }); - } + }, + htmlContainer: document.getElementById('monaco-editor-root')! }, languageClientConfigs: { langium: { diff --git a/packages/examples/src/langium/langium-dsl/config/extendedConfig.ts b/packages/examples/src/langium/langium-dsl/config/extendedConfig.ts index 28c635adb..05fddfcd8 100644 --- a/packages/examples/src/langium/langium-dsl/config/extendedConfig.ts +++ b/packages/examples/src/langium/langium-dsl/config/extendedConfig.ts @@ -76,7 +76,8 @@ export const setupLangiumClientExtended = async (): Promise => { 'editor.experimental.asyncTokenization': true }) }, - monacoWorkerFactory: configureMonacoWorkers + monacoWorkerFactory: configureMonacoWorkers, + htmlContainer: document.getElementById('monaco-editor-root')! }, languageClientConfigs: { langium: { diff --git a/packages/examples/src/langium/langium-dsl/wrapperLangium.ts b/packages/examples/src/langium/langium-dsl/wrapperLangium.ts index 88f7ecbba..1b2cffba0 100644 --- a/packages/examples/src/langium/langium-dsl/wrapperLangium.ts +++ b/packages/examples/src/langium/langium-dsl/wrapperLangium.ts @@ -11,7 +11,6 @@ import { disableButton } from '../../common/client/utils.js'; let wrapper: MonacoEditorLanguageClientWrapper | undefined; let extended = false; -const htmlElement = document.getElementById('monaco-editor-root'); export const runLangiumDslWrapper = async () => { try { @@ -31,7 +30,7 @@ export const startLangiumClientExtended = async () => { disableButton('button-start-extended', true); const config = await setupLangiumClientExtended(); wrapper = new MonacoEditorLanguageClientWrapper(); - wrapper.initAndStart(config, htmlElement); + wrapper.initAndStart(config); } catch (e) { console.log(e); } @@ -44,7 +43,7 @@ export const startLangiumClientClassic = async () => { disableButton('button-start-extended', true); const config = await setupLangiumClientClassic(); wrapper = new MonacoEditorLanguageClientWrapper(); - await wrapper.initAndStart(config, htmlElement!); + await wrapper.initAndStart(config); } catch (e) { console.log(e); } diff --git a/packages/examples/src/langium/statemachine/config/wrapperStatemachineConfig.ts b/packages/examples/src/langium/statemachine/config/wrapperStatemachineConfig.ts index a9234ef54..786f63ad5 100644 --- a/packages/examples/src/langium/statemachine/config/wrapperStatemachineConfig.ts +++ b/packages/examples/src/langium/statemachine/config/wrapperStatemachineConfig.ts @@ -96,7 +96,8 @@ export const createLangiumGlobalConfig = async (params: { 'editor.experimental.asyncTokenization': true }) }, - monacoWorkerFactory: configureMonacoWorkers + monacoWorkerFactory: configureMonacoWorkers, + htmlContainer: document.getElementById('monaco-editor-root')! }, languageClientConfigs }; diff --git a/packages/examples/src/langium/statemachine/main-react.tsx b/packages/examples/src/langium/statemachine/main-react.tsx index 5a9c1f360..17137d59d 100644 --- a/packages/examples/src/langium/statemachine/main-react.tsx +++ b/packages/examples/src/langium/statemachine/main-react.tsx @@ -11,7 +11,7 @@ import { loadStatemachineWorkerRegular } from './main.js'; import text from './content/example.statemachine?raw'; export const runStatemachineReact = async () => { - const langiumGlobalConfig = await createLangiumGlobalConfig({ + const wrapperConfig = await createLangiumGlobalConfig({ languageServerId: 'react', useLanguageClient: true, text, @@ -20,7 +20,6 @@ export const runStatemachineReact = async () => { try { document.querySelector('#button-start')?.addEventListener('click', async () => { - const htmlElement = document.getElementById('monaco-editor-root'); const App = () => { const [ height, setHeight ] = useState('80vh'); @@ -38,15 +37,15 @@ export const runStatemachineReact = async () => {
+ wrapperConfig={wrapperConfig} />
); }; const strictMode = (document.getElementById('checkbox-strictmode')! as HTMLInputElement).checked; if (strictMode) { - ReactDOM.createRoot(htmlElement!).render(); + ReactDOM.createRoot(wrapperConfig.editorAppConfig.htmlContainer).render(); } else { - ReactDOM.createRoot(htmlElement!).render(); + ReactDOM.createRoot(wrapperConfig.editorAppConfig.htmlContainer).render(); } }); document.querySelector('#button-dispose')?.addEventListener('click', () => { diff --git a/packages/examples/src/langium/statemachine/main.ts b/packages/examples/src/langium/statemachine/main.ts index 317971ba6..c261e7755 100644 --- a/packages/examples/src/langium/statemachine/main.ts +++ b/packages/examples/src/langium/statemachine/main.ts @@ -47,7 +47,7 @@ const startEditor = async () => { messagePort: channel.port1, messageTransports: { reader, writer } }); - await wrapper.initAndStart(langiumGlobalConfig, document.getElementById('monaco-editor-root')); + await wrapper.initAndStart(langiumGlobalConfig); // here the modelReference is created manually and given to the updateEditorModels of the wrapper const uri = vscode.Uri.parse('/workspace/statemachine-mod.statemachine'); @@ -63,7 +63,7 @@ const startEditor = async () => { useLanguageClient: false, text: textMod }); - await wrapper2.initAndStart(langiumGlobalConfig2, document.getElementById('monaco-editor-root2')); + await wrapper2.initAndStart(langiumGlobalConfig2); vscode.commands.getCommands().then((x) => { console.log('Currently registered # of vscode commands: ' + x.length); diff --git a/packages/examples/src/multi/twoLanguageClients.ts b/packages/examples/src/multi/twoLanguageClients.ts index 705befed3..af8ac4650 100644 --- a/packages/examples/src/multi/twoLanguageClients.ts +++ b/packages/examples/src/multi/twoLanguageClients.ts @@ -54,7 +54,8 @@ print("Hello Moon!") 'editor.experimental.asyncTokenization': true }) }, - monacoWorkerFactory: configureMonacoWorkers + monacoWorkerFactory: configureMonacoWorkers, + htmlContainer: document.getElementById('monaco-editor-root')! }, languageClientConfigs: { json: { @@ -109,7 +110,6 @@ print("Hello Moon!") } }; - const htmlElement = document.getElementById('monaco-editor-root'); const wrapper = new MonacoEditorLanguageClientWrapper(); try { @@ -119,7 +119,7 @@ print("Hello Moon!") (wrapperConfig.editorAppConfig.codeResources.main as CodePlusFileExt).fileExt = currenFileExt; } - await wrapper.initAndStart(wrapperConfig, htmlElement); + await wrapper.initAndStart(wrapperConfig); disableButton('button-flip', false); }); document.querySelector('#button-dispose')?.addEventListener('click', async () => { diff --git a/packages/examples/src/python/client/config.ts b/packages/examples/src/python/client/config.ts index 2dd5ae6ee..d227c4368 100644 --- a/packages/examples/src/python/client/config.ts +++ b/packages/examples/src/python/client/config.ts @@ -87,7 +87,8 @@ export const createUserConfig = (workspaceRoot: string, code: string, codeUri: s }) }, useDiffEditor: false, - monacoWorkerFactory: configureMonacoWorkers + monacoWorkerFactory: configureMonacoWorkers, + htmlContainer: document.getElementById('monaco-editor-root')! } }; }; diff --git a/packages/examples/src/python/client/main.ts b/packages/examples/src/python/client/main.ts index 36dbec979..b63897b71 100644 --- a/packages/examples/src/python/client/main.ts +++ b/packages/examples/src/python/client/main.ts @@ -22,7 +22,6 @@ export const runPythonWrapper = async () => { registerFileSystemOverlay(1, fileSystemProvider); const userConfig = createUserConfig('/workspace', helloPyCode, '/workspace/hello.py'); - const htmlElement = document.getElementById('monaco-editor-root'); const wrapper = new MonacoEditorLanguageClientWrapper(); try { @@ -36,7 +35,7 @@ export const runPythonWrapper = async () => { await vscode.workspace.openTextDocument(hello2PyUri); await vscode.workspace.openTextDocument(helloPyUri); - await wrapper.start(htmlElement); + await wrapper.start(); } }); document.querySelector('#button-dispose')?.addEventListener('click', async () => { diff --git a/packages/examples/src/python/client/reactPython.tsx b/packages/examples/src/python/client/reactPython.tsx index 13944ae2f..e7279b113 100644 --- a/packages/examples/src/python/client/reactPython.tsx +++ b/packages/examples/src/python/client/reactPython.tsx @@ -22,8 +22,8 @@ export const runPythonReact = async () => { const onTextChanged = (textChanges: TextChanges) => { console.log(`Dirty? ${textChanges.isDirty}\ntext: ${textChanges.text}\ntextOriginal: ${textChanges.textOriginal}`); }; - const htmlElement = document.getElementById('monaco-editor-root'); - const root = ReactDOM.createRoot(htmlElement!); + const wrapperConfig = createUserConfig('/workspace', badPyCode, '/workspace/bad.py'); + const root = ReactDOM.createRoot(wrapperConfig.editorAppConfig.htmlContainer); try { document.querySelector('#button-start')?.addEventListener('click', async () => { @@ -31,7 +31,7 @@ export const runPythonReact = async () => { return (
{ diff --git a/packages/examples/src/ts/wrapperTs.ts b/packages/examples/src/ts/wrapperTs.ts index 537f472e0..9d865da71 100644 --- a/packages/examples/src/ts/wrapperTs.ts +++ b/packages/examples/src/ts/wrapperTs.ts @@ -56,16 +56,16 @@ export const runTsWrapper = async () => { 'editor.experimental.asyncTokenization': true }) }, - monacoWorkerFactory: configureMonacoWorkers + monacoWorkerFactory: configureMonacoWorkers, + htmlContainer: document.getElementById('monaco-editor-root')! } }; const wrapper = new MonacoEditorLanguageClientWrapper(); - const htmlElement = document.getElementById('monaco-editor-root'); try { document.querySelector('#button-start')?.addEventListener('click', async () => { - await wrapper.initAndStart(wrapperConfig, htmlElement); + await wrapper.initAndStart(wrapperConfig); vscode.commands.getCommands().then((x) => { console.log(`Found ${x.length} commands`); @@ -106,7 +106,7 @@ export const runTsWrapper = async () => { // ensure it is boolean value and not undefined const useDiffEditor = wrapperConfig.editorAppConfig.useDiffEditor ?? false; wrapperConfig.editorAppConfig.useDiffEditor = !useDiffEditor; - await wrapper.initAndStart(wrapperConfig, htmlElement); + await wrapper.initAndStart(wrapperConfig); }); document.querySelector('#button-dispose')?.addEventListener('click', async () => { await wrapper.dispose(); diff --git a/packages/vscode-ws-jsonrpc/tsconfig.src.json b/packages/vscode-ws-jsonrpc/tsconfig.src.json index b7c5ac54f..235be2749 100644 --- a/packages/vscode-ws-jsonrpc/tsconfig.src.json +++ b/packages/vscode-ws-jsonrpc/tsconfig.src.json @@ -3,7 +3,8 @@ "compilerOptions": { "rootDir": "src", "outDir": "lib", - "declarationDir": "lib" + "declarationDir": "lib", + "skipLibCheck": true }, "include": [ "src/**/*.ts", diff --git a/packages/wrapper-react/src/index.tsx b/packages/wrapper-react/src/index.tsx index 399806b99..d98b6b64a 100644 --- a/packages/wrapper-react/src/index.tsx +++ b/packages/wrapper-react/src/index.tsx @@ -79,7 +79,8 @@ export const MonacoEditorReactComp: React.FC = (props) => { if (containerRef.current) { containerRef.current.className = className ?? ''; try { - await wrapperRef.current.start(containerRef.current); + wrapperRef.current.getMonacoEditorApp()?.updateHtmlContainer(containerRef.current); + await wrapperRef.current.start(); onLoad?.(wrapperRef.current); handleOnTextChanged(); } catch (e) { @@ -89,6 +90,8 @@ export const MonacoEditorReactComp: React.FC = (props) => { throw e; } } + } else { + throw new Error('No htmlContainer found'); } }, [className, onError, onLoad]); diff --git a/packages/wrapper-react/test/helper.ts b/packages/wrapper-react/test/helper.ts index b399fc065..37ce83921 100644 --- a/packages/wrapper-react/test/helper.ts +++ b/packages/wrapper-react/test/helper.ts @@ -5,6 +5,13 @@ import { EditorAppClassic, EditorAppExtended } from 'monaco-editor-wrapper'; +export const createMonacoEditorDiv = () => { + const div = document.createElement('div'); + div.id = 'monaco-editor-root'; + document.body.insertAdjacentElement('beforeend', div); + return div; +}; + export const updateExtendedAppPrototyp = async () => { EditorAppExtended.prototype.specifyServices = async () => { console.log('Using overriden EditorAppExtended.prototype.specifyServices'); diff --git a/packages/wrapper-react/test/index.test.tsx b/packages/wrapper-react/test/index.test.tsx index 5b74750f3..89da7501f 100644 --- a/packages/wrapper-react/test/index.test.tsx +++ b/packages/wrapper-react/test/index.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { LogLevel } from 'vscode/services'; import { MonacoEditorLanguageClientWrapper, WrapperConfig } from 'monaco-editor-wrapper'; import { MonacoEditorReactComp, TextChanges } from '@typefox/monaco-editor-react'; -import { updateExtendedAppPrototyp } from './helper.js'; +import { createMonacoEditorDiv, updateExtendedAppPrototyp } from './helper.js'; describe('Test MonacoEditorReactComp', () => { test('rerender', async () => { @@ -18,6 +18,7 @@ describe('Test MonacoEditorReactComp', () => { logLevel: LogLevel.Debug, editorAppConfig: { $type: 'extended', + htmlContainer: createMonacoEditorDiv() } }; const { rerender } = render(); @@ -50,7 +51,8 @@ describe('Test MonacoEditorReactComp', () => { text: 'hello world', fileExt: 'js' } - } + }, + htmlContainer: createMonacoEditorDiv() } }; @@ -88,7 +90,8 @@ describe('Test MonacoEditorReactComp', () => { text: 'hello world', fileExt: 'js' } - } + }, + htmlContainer: createMonacoEditorDiv() } }; diff --git a/packages/wrapper/package.json b/packages/wrapper/package.json index ad06fc486..868572c09 100644 --- a/packages/wrapper/package.json +++ b/packages/wrapper/package.json @@ -105,6 +105,8 @@ "@codingame/monaco-vscode-textmate-service-override": "~9.0.3", "@codingame/monaco-vscode-theme-defaults-default-extension": "~9.0.3", "@codingame/monaco-vscode-theme-service-override": "~9.0.3", + "@codingame/monaco-vscode-views-service-override": "~9.0.3", + "@codingame/monaco-vscode-workbench-service-override": "~9.0.3", "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~9.0.3", "vscode": "npm:@codingame/monaco-vscode-api@~9.0.3", "vscode-languageclient": "~9.0.1", diff --git a/packages/wrapper/src/editorAppBase.ts b/packages/wrapper/src/editorAppBase.ts index f252f67a6..9ba735d9e 100644 --- a/packages/wrapper/src/editorAppBase.ts +++ b/packages/wrapper/src/editorAppBase.ts @@ -6,7 +6,6 @@ import * as monaco from 'monaco-editor'; import { createModelReference, ITextFileEditorModel } from 'vscode/monaco'; import { IReference } from '@codingame/monaco-vscode-editor-service-override'; -import { getUserConfiguration } from '@codingame/monaco-vscode-configuration-service-override'; import { Logger } from 'monaco-languageclient/tools'; import { getEditorUri, isModelUpdateRequired, ModelUpdateType } from './utils.js'; @@ -32,6 +31,7 @@ export type EditorAppType = 'extended' | 'classic'; export interface EditorAppConfigBase { $type: EditorAppType; + htmlContainer: HTMLElement; codeResources?: CodeResources; useDiffEditor?: boolean; domReadOnly?: boolean; @@ -83,6 +83,7 @@ export abstract class EditorAppBase { protected buildConfig(userAppConfig: EditorAppConfigBase): EditorAppConfigBase { const config: EditorAppConfigBase = { $type: userAppConfig.$type, + htmlContainer: userAppConfig.htmlContainer, codeResources: userAppConfig.codeResources, useDiffEditor: userAppConfig.useDiffEditor ?? false, readOnly: userAppConfig.readOnly ?? false, @@ -112,11 +113,11 @@ export abstract class EditorAppBase { return this.diffEditor; } - async createEditors(container: HTMLElement): Promise { + async createEditors(): Promise { if (this.getConfig().useDiffEditor ?? false) { - this.diffEditor = monaco.editor.createDiffEditor(container, this.getConfig().diffEditorOptions); + this.diffEditor = monaco.editor.createDiffEditor(this.getConfig().htmlContainer, this.getConfig().diffEditorOptions); } else { - this.editor = monaco.editor.create(container, this.getConfig().editorOptions); + this.editor = monaco.editor.create(this.getConfig().htmlContainer, this.getConfig().editorOptions); } const modelRefs = await this.buildModelRefs(this.getConfig().codeResources); @@ -264,10 +265,7 @@ export abstract class EditorAppBase { this.getEditor()?.updateOptions(options); } - getUserConfiguration(): Promise { - return getUserConfiguration(); - } - + abstract updateHtmlContainer(htmlContainer: HTMLElement): void; abstract loadUserConfiguration(): Promise; abstract init(): Promise; abstract specifyServices(): Promise; diff --git a/packages/wrapper/src/editorAppClassic.ts b/packages/wrapper/src/editorAppClassic.ts index e20b253c3..5723927cd 100644 --- a/packages/wrapper/src/editorAppClassic.ts +++ b/packages/wrapper/src/editorAppClassic.ts @@ -7,6 +7,7 @@ import * as monaco from 'monaco-editor'; import { Logger } from 'monaco-languageclient/tools'; import { EditorAppBase, EditorAppConfigBase } from './editorAppBase.js'; import { ModelUpdateType, isEqual, isModelUpdateRequired } from './utils.js'; +import { getUserConfiguration, updateUserConfiguration } from '@codingame/monaco-vscode-configuration-service-override'; export interface EditorAppConfigClassic extends EditorAppConfigBase { $type: 'classic'; @@ -37,6 +38,10 @@ export class EditorAppClassic extends EditorAppBase { return this.config; } + updateHtmlContainer(htmlContainer: HTMLElement) { + this.config.htmlContainer = htmlContainer; + } + override async specifyServices(): Promise { const getMonarchServiceOverride = (await import('@codingame/monaco-vscode-monarch-service-override')).default; return { @@ -72,6 +77,20 @@ export class EditorAppClassic extends EditorAppBase { monaco.editor.setTheme(languageDef.theme.name); } } + + if (this.config.editorOptions?.['semanticHighlighting.enabled'] !== undefined) { + let userConfig; + try { + userConfig = JSON.parse(await getUserConfiguration()); + } catch (e) { + userConfig = {}; + } + const json = JSON.stringify({ + ...userConfig, + 'editor.semanticHighlighting.enabled': this.config.editorOptions['semanticHighlighting.enabled'] + }); + await updateUserConfiguration(json); + } this.logger?.info('Init of Classic App was completed.'); } diff --git a/packages/wrapper/src/editorAppExtended.ts b/packages/wrapper/src/editorAppExtended.ts index 2c3d34043..629cf4ab8 100644 --- a/packages/wrapper/src/editorAppExtended.ts +++ b/packages/wrapper/src/editorAppExtended.ts @@ -65,6 +65,10 @@ export class EditorAppExtended extends EditorAppBase { return this.config; } + updateHtmlContainer(htmlContainer: HTMLElement) { + this.config.htmlContainer = htmlContainer; + } + getExtensionRegisterResult(extensionName: string) { return this.extensionRegisterResults.get(extensionName); } diff --git a/packages/wrapper/src/vscode/services.ts b/packages/wrapper/src/vscode/services.ts index 6d3c6d278..a399c2012 100644 --- a/packages/wrapper/src/vscode/services.ts +++ b/packages/wrapper/src/vscode/services.ts @@ -32,6 +32,30 @@ export const configureServices = async (config: VscodeServicesConfig): Promise { const div = document.createElement('div'); div.id = 'monaco-editor-root'; document.body.insertAdjacentElement('beforeend', div); + return div; }; export const createWrapperConfigExtendedApp = (): WrapperConfig => { @@ -23,6 +24,7 @@ export const createWrapperConfigExtendedApp = (): WrapperConfig => { } }, useDiffEditor: false, + htmlContainer: createMonacoEditorDiv() } }; }; @@ -38,6 +40,7 @@ export const createWrapperConfigClassicApp = (): WrapperConfig => { } }, useDiffEditor: false, + htmlContainer: createMonacoEditorDiv() } }; }; diff --git a/packages/wrapper/test/vscode/services.test.ts b/packages/wrapper/test/vscode/services.test.ts index 57e75bf9b..889ec6406 100644 --- a/packages/wrapper/test/vscode/services.test.ts +++ b/packages/wrapper/test/vscode/services.test.ts @@ -36,7 +36,7 @@ describe('createUrl', () => { }); test('test configureServices logLevel development mismatch', async () => { - await expect(async () => { + expect(async () => { await configureServices({ serviceConfig: { workspaceConfig: { diff --git a/packages/wrapper/test/wrapper.test.ts b/packages/wrapper/test/wrapper.test.ts index a6943ce8b..8c4fafdde 100644 --- a/packages/wrapper/test/wrapper.test.ts +++ b/packages/wrapper/test/wrapper.test.ts @@ -25,7 +25,7 @@ describe('Test MonacoEditorLanguageClientWrapper', () => { test('Check default values', async () => { createMonacoEditorDiv(); const wrapper = new MonacoEditorLanguageClientWrapper(); - await wrapper.initAndStart(createWrapperConfigClassicApp(), document.getElementById('monaco-editor-root')); + await wrapper.initAndStart(createWrapperConfigClassicApp()); const app = wrapper.getMonacoEditorApp() as EditorAppClassic; expect(app).toBeDefined(); @@ -34,29 +34,21 @@ describe('Test MonacoEditorLanguageClientWrapper', () => { expect(appConfig.overrideAutomaticLayout).toBeTruthy(); }); - test('No HTML in Userconfig', async () => { - createMonacoEditorDiv(); - const wrapper = new MonacoEditorLanguageClientWrapper(); - await expect(async () => { - await wrapper.initAndStart(createWrapperConfigClassicApp(), null); - }).rejects.toThrowError('No HTMLElement provided for monaco-editor.'); - }); - test('Expected throw: Start without init', async () => { createMonacoEditorDiv(); const wrapper = new MonacoEditorLanguageClientWrapper(); - await expect(async () => { - await wrapper.start(document.getElementById('monaco-editor-root')); + expect(async () => { + await wrapper.start(); }).rejects.toThrowError('No init was performed. Please call init() before start()'); }); test('Expected throw: Call normal start with prior init', async () => { createMonacoEditorDiv(); const wrapper = new MonacoEditorLanguageClientWrapper(); - await expect(async () => { + expect(async () => { const config = createWrapperConfigClassicApp(); await wrapper.init(config); - await wrapper.initAndStart(config, document.getElementById('monaco-editor-root')); + await wrapper.initAndStart(config); }).rejects.toThrowError('init was already performed. Please call dispose first if you want to re-start.'); }); @@ -84,7 +76,7 @@ describe('Test MonacoEditorLanguageClientWrapper', () => { createMonacoEditorDiv(); const wrapper = new MonacoEditorLanguageClientWrapper(); const userConfig = createWrapperConfigClassicApp(); - await wrapper.initAndStart(userConfig, document.getElementById('monaco-editor-root')); + await wrapper.initAndStart(userConfig); const app = wrapper.getMonacoEditorApp(); const modelRefs = app?.getModelRefs(); @@ -106,7 +98,7 @@ describe('Test MonacoEditorLanguageClientWrapper', () => { text: 'original', fileExt: 'js' }; - await wrapper.initAndStart(wrapperConfig, document.getElementById('monaco-editor-root')); + await wrapper.initAndStart(wrapperConfig); const app = wrapper.getMonacoEditorApp(); const modelRefs = app?.getModelRefs(); @@ -127,7 +119,7 @@ describe('Test MonacoEditorLanguageClientWrapper', () => { text: 'original', fileExt: 'js' }; - await wrapper.initAndStart(wrapperConfig, document.getElementById('monaco-editor-root')); + await wrapper.initAndStart(wrapperConfig); const app = wrapper.getMonacoEditorApp(); const modelRefs = app?.getModelRefs(); @@ -148,7 +140,7 @@ describe('Test MonacoEditorLanguageClientWrapper', () => { const wrapper = new MonacoEditorLanguageClientWrapper(); const wrapperConfig = createWrapperConfigClassicApp(); wrapperConfig.editorAppConfig.codeResources = {}; - await wrapper.initAndStart(wrapperConfig, document.getElementById('monaco-editor-root')); + await wrapper.initAndStart(wrapperConfig); const app = wrapper.getMonacoEditorApp(); const modelRefs = app?.getModelRefs(); @@ -161,7 +153,7 @@ describe('Test MonacoEditorLanguageClientWrapper', () => { const wrapper = new MonacoEditorLanguageClientWrapper(); const wrapperConfig = createWrapperConfigClassicApp(); wrapperConfig.editorAppConfig.codeResources = {}; - await wrapper.initAndStart(wrapperConfig, document.getElementById('monaco-editor-root')); + await wrapper.initAndStart(wrapperConfig); const app = wrapper.getMonacoEditorApp(); @@ -207,9 +199,9 @@ describe('Test MonacoEditorLanguageClientWrapper', () => { ['/javascript.tmLanguage.json', '{}'] ]), }]; - await wrapper.initAndStart(wrapperConfig, document.getElementById('monaco-editor-root')); + await wrapper.initAndStart(wrapperConfig); await wrapper.dispose(); - await wrapper.initAndStart(wrapperConfig, document.getElementById('monaco-editor-root')); + await wrapper.initAndStart(wrapperConfig); }); test('Early code resources update on wrapper are ok', async () => { @@ -234,7 +226,7 @@ describe('Test MonacoEditorLanguageClientWrapper', () => { expect(modelRefs?.modelRef).toBeDefined(); expect(modelRefs?.modelRefOriginal).toBeUndefined(); - await wrapper.start(document.getElementById('monaco-editor-root')); + await wrapper.start(); }); });