diff --git a/package.json b/package.json index ef4bc309..555f701d 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.8.6", "description": "Game Tool for GenshinImpact player", "private": true, - "packageManager": "pnpm@10.22.0", + "packageManager": "pnpm@10.23.0", "type": "module", "scripts": { "build": "tauri build", @@ -113,7 +113,7 @@ "@types/js-md5": "^0.8.0", "@types/node": "^24.10.1", "@typescript-eslint/parser": "^8.47.0", - "@typescript/native-preview": "7.0.0-dev.20251118.1", + "@typescript/native-preview": "7.0.0-dev.20251121.1", "@vitejs/plugin-vue": "^6.0.2", "app-root-path": "^3.1.0", "concurrently": "^9.2.1", @@ -121,16 +121,16 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsonc": "^2.21.0", "eslint-plugin-prettier": "^5.5.4", - "eslint-plugin-vue": "^10.5.1", + "eslint-plugin-vue": "^10.6.0", "eslint-plugin-yml": "^1.19.0", "fs-extra": "^11.3.2", "globals": "^16.5.0", "husky": "^9.1.7", "jsonc-eslint-parser": "^2.4.1", - "lint-staged": "^16.2.6", + "lint-staged": "^16.2.7", "oxlint": "^1.29.0", "prettier": "3.6.2", - "stylelint": "^16.25.0", + "stylelint": "^16.26.0", "stylelint-config-idiomatic-order": "^10.0.0", "stylelint-config-standard-scss": "^16.0.0", "stylelint-config-standard-vue": "^1.0.0", @@ -142,7 +142,7 @@ "tsx": "^4.20.6", "typescript": "^5.9.3", "typescript-eslint": "^8.47.0", - "vite": "npm:rolldown-vite@^7.2.6", + "vite": "npm:rolldown-vite@^7.2.7", "vite-plugin-vue-devtools": "^8.0.5", "vite-plugin-vuetify": "^2.1.2", "vue-eslint-parser": "^10.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ff15c4ed..5b176902 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -133,11 +133,11 @@ importers: specifier: ^8.47.0 version: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript/native-preview': - specifier: 7.0.0-dev.20251118.1 - version: 7.0.0-dev.20251118.1 + specifier: 7.0.0-dev.20251121.1 + version: 7.0.0-dev.20251121.1 '@vitejs/plugin-vue': specifier: ^6.0.2 - version: 6.0.2(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) + version: 6.0.2(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) app-root-path: specifier: ^3.1.0 version: 3.1.0 @@ -157,8 +157,8 @@ importers: specifier: ^5.5.4 version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2) eslint-plugin-vue: - specifier: ^10.5.1 - version: 10.5.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))) + specifier: ^10.6.0 + version: 10.6.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))) eslint-plugin-yml: specifier: ^1.19.0 version: 1.19.0(eslint@9.39.1(jiti@2.6.1)) @@ -175,8 +175,8 @@ importers: specifier: ^2.4.1 version: 2.4.1 lint-staged: - specifier: ^16.2.6 - version: 16.2.6 + specifier: ^16.2.7 + version: 16.2.7 oxlint: specifier: ^1.29.0 version: 1.29.0 @@ -184,32 +184,32 @@ importers: specifier: 3.6.2 version: 3.6.2 stylelint: - specifier: ^16.25.0 - version: 16.25.0(typescript@5.9.3) + specifier: ^16.26.0 + version: 16.26.0(typescript@5.9.3) stylelint-config-idiomatic-order: specifier: ^10.0.0 - version: 10.0.0(stylelint@16.25.0(typescript@5.9.3)) + version: 10.0.0(stylelint@16.26.0(typescript@5.9.3)) stylelint-config-standard-scss: specifier: ^16.0.0 - version: 16.0.0(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)) + version: 16.0.0(postcss@8.5.6)(stylelint@16.26.0(typescript@5.9.3)) stylelint-config-standard-vue: specifier: ^1.0.0 - version: 1.0.0(postcss-html@1.6.0)(stylelint@16.25.0(typescript@5.9.3)) + version: 1.0.0(postcss-html@1.6.0)(stylelint@16.26.0(typescript@5.9.3)) stylelint-declaration-block-no-ignored-properties: specifier: ^2.8.0 - version: 2.8.0(stylelint@16.25.0(typescript@5.9.3)) + version: 2.8.0(stylelint@16.26.0(typescript@5.9.3)) stylelint-high-performance-animation: specifier: ^1.11.0 - version: 1.11.0(stylelint@16.25.0(typescript@5.9.3)) + version: 1.11.0(stylelint@16.26.0(typescript@5.9.3)) stylelint-order: specifier: ^7.0.0 - version: 7.0.0(stylelint@16.25.0(typescript@5.9.3)) + version: 7.0.0(stylelint@16.26.0(typescript@5.9.3)) stylelint-prettier: specifier: ^5.0.3 - version: 5.0.3(prettier@3.6.2)(stylelint@16.25.0(typescript@5.9.3)) + version: 5.0.3(prettier@3.6.2)(stylelint@16.26.0(typescript@5.9.3)) stylelint-scss: specifier: ^6.12.1 - version: 6.12.1(stylelint@16.25.0(typescript@5.9.3)) + version: 6.12.1(stylelint@16.26.0(typescript@5.9.3)) tsx: specifier: ^4.20.6 version: 4.20.6 @@ -220,14 +220,14 @@ importers: specifier: ^8.47.0 version: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) vite: - specifier: npm:rolldown-vite@^7.2.6 - version: rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: npm:rolldown-vite@^7.2.7 + version: rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-vue-devtools: specifier: ^8.0.5 - version: 8.0.5(@nuxt/kit@3.17.5)(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) + version: 8.0.5(@nuxt/kit@3.17.5)(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) vite-plugin-vuetify: specifier: ^2.1.2 - version: 2.1.2(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))(vuetify@3.10.11) + version: 2.1.2(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))(vuetify@3.10.11) vue-eslint-parser: specifier: ^10.2.0 version: 10.2.0(eslint@9.39.1(jiti@2.6.1)) @@ -1111,43 +1111,43 @@ packages: resolution: {integrity: sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251118.1': - resolution: {integrity: sha512-S3f/19naNfm4pYtDwSL3zVjnGVFsJUUvyYWCMyiSfH/pl3r946oT8EFRX5ZFqhmrRzsro/eOKKCkI6NW8LgKQA==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251121.1': + resolution: {integrity: sha512-EAJ7kC/K+11aRgQ1XpMNvffpwTlLgj+YgCfYB/PbwvhpQaRu39rg2LoOSBhcUjyOqo+n8uwHRzjBJxaLGLghlQ==} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20251118.1': - resolution: {integrity: sha512-CN3womymw0PBkVxsJ0hwANFNfksi47sT76rZUYJihr5Ckp5GIrWfew8wiO2rRc0Fozg4eYhrWHqZFneI0UlWzg==} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20251121.1': + resolution: {integrity: sha512-4J2O1JIv1Ayi6iFrZE3+T443gqKKf7zJ/D0j2iDvVijcc6ZxFsvuWBTKOZjmF4Di7GDt41Yc4LEtzYyAd4vjfQ==} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20251118.1': - resolution: {integrity: sha512-8ekzTFSCci6utz6OXRasREudIihydjPU+G/Mp05cZGkTyF+Jgwge/JSmMnJ3OuC0GOq6At+aHVzj/xzJ2wvA9w==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20251121.1': + resolution: {integrity: sha512-VyPxDx0T8ERHzAfxlS0CKgATRoJ9DJhIjWCbd40AMXPP8ICD5lWEECM5G2c1sNDlTU48h9kzTHjRpjY9S922Lw==} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20251118.1': - resolution: {integrity: sha512-+SpJsGnueItXLmL6PJgvwel3+moqH4Tr9PUQOOYFwXIYYE08b7coYT7SjWqgA5cRh7obOc3L5ajOgFoHittTBg==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20251121.1': + resolution: {integrity: sha512-IwSOUu8oz7mptrrmaHH1lMj/YsnGR+Q9RtueA9n8W56YpI6PuoiEPPQzdbwzXUEPiYnDtLMJ+u8c/DAUBT0hrw==} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20251118.1': - resolution: {integrity: sha512-u+JoZzThEeyZ7aPPgzfAVeFy84Zo9hdRtARxnb1FN+LagpBAQfs11g6BTmcpo2wUNzkKTHQxJi6c7Zekp8O4FQ==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20251121.1': + resolution: {integrity: sha512-r+t9WcYm6YKL18YVNsuC/E6rYK7hLSQzNkljkHcGUtmcmkcwvsTpus+vJJHT7vhUyUAfRlvBxkma47eQ5PCwSg==} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20251118.1': - resolution: {integrity: sha512-At7qHhLxflc3ZUSbuTP/VPvp5s9AHvFbIPxpEX0g+uHBzUkgEuJ32pIvL3szkkfwHGUdlRrMfn8CY5fuZGyWIg==} + '@typescript/native-preview-win32-arm64@7.0.0-dev.20251121.1': + resolution: {integrity: sha512-3W/5Q5ysY68/gzgsbUm4lAPq0l2/mhCGPB+yml6eOgLqSyZ0rknlyH2iGVfohxHHMiHHTBLPpVyw8jKF4DiiGw==} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20251118.1': - resolution: {integrity: sha512-nyhMXoU3g1NkKZ4erZPvHB6JUpnEOIJXHnvFgXfOgrCh/KA0JPqUOk5ityE7n0xscTyleGEMptTW4Xbg8XH/+A==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20251121.1': + resolution: {integrity: sha512-mGGpTd1uZmNyTu0NWI3a/hMFYmIDP5QoWOFXqAFLvsH2pc3khzkOY4b+tuAEmXx3ewXgXxObynakO8LUgfraBQ==} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20251118.1': - resolution: {integrity: sha512-rf6L3/MhHM3xFvmO3kidqdH5Q4N+U8+accIVTewqsyu35Uku7iWHfsv1zwyQEVT74LH/MCfBiShYYCi1Juh03g==} + '@typescript/native-preview@7.0.0-dev.20251121.1': + resolution: {integrity: sha512-FwmJc6WcpkLJjyoUKk/ED0IBR0b/ePj9My76n8epZj/qvibCdf27J/vWWtJJtu2VFWI/3EIJcDW0mxevwa/+Bg==} hasBin: true '@vitejs/plugin-vue@6.0.2': @@ -1351,8 +1351,8 @@ packages: resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} engines: {node: '>= 0.6.0'} - baseline-browser-mapping@2.8.29: - resolution: {integrity: sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==} + baseline-browser-mapping@2.8.30: + resolution: {integrity: sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==} hasBin: true birpc@2.8.0: @@ -1630,8 +1630,8 @@ packages: echarts@6.0.0: resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==} - electron-to-chromium@1.5.256: - resolution: {integrity: sha512-uqYq1IQhpXXLX+HgiXdyOZml7spy4xfy42yPxcCCRjswp0fYM2X+JwCON07lqnpLEGVCj739B7Yr+FngmHBMEQ==} + electron-to-chromium@1.5.259: + resolution: {integrity: sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -1782,8 +1782,8 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-vue@10.5.1: - resolution: {integrity: sha512-SbR9ZBUFKgvWAbq3RrdCtWaW0IKm6wwUiApxf3BVTNfqUIo4IQQmreMg2iHFJJ6C/0wss3LXURBJ1OwS/MhFcQ==} + eslint-plugin-vue@10.6.0: + resolution: {integrity: sha512-TsoFluWxOpsJlE/l2jJygLQLWBPJ3Qdkesv7tBIunICbTcG0dS1/NBw/Ol4tJw5kHWlAVds4lUmC29/vlPUcEQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -1895,8 +1895,8 @@ packages: picomatch: optional: true - file-entry-cache@10.1.4: - resolution: {integrity: sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==} + file-entry-cache@11.1.1: + resolution: {integrity: sha512-TPVFSDE7q91Dlk1xpFLvFllf8r0HyOMOlnWy7Z2HBku5H3KhIeOGInexrIeg2D64DosVB/JXkrrk6N/7Wriq4A==} file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} @@ -2403,8 +2403,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.2.6: - resolution: {integrity: sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==} + lint-staged@16.2.7: + resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} engines: {node: '>=20.17'} hasBin: true @@ -2705,10 +2705,6 @@ packages: peerDependencies: postcss: ^8.4.29 - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - postcss-selector-parser@7.1.0: resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} engines: {node: '>=4'} @@ -2812,8 +2808,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown-vite@7.2.6: - resolution: {integrity: sha512-u+0VLWLPJgwINLTQI18fSQlqfwgu8biRP4SY6HH4HLcEWZUOnDu5ARpwPYPyDahXPuhdSRHmWfS5G2/7CmqpJw==} + rolldown-vite@7.2.7: + resolution: {integrity: sha512-N6a9KgNZ0xgCJ6/Ej2FQ7W8D3fOzDwFw7CLWZ2ubZknVrs9NdNkx25AFEuNbSwQO76VEHp4N7YatsZwp/ST1Gg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3231,8 +3227,8 @@ packages: peerDependencies: stylelint: ^16.0.2 - stylelint@16.25.0: - resolution: {integrity: sha512-Li0avYWV4nfv1zPbdnxLYBGq4z8DVZxbRgx4Kn6V+Uftz1rMoF1qiEI3oL4kgWqyYgCgs7gT5maHNZ82Gk03vQ==} + stylelint@16.26.0: + resolution: {integrity: sha512-Y/3AVBefrkqqapVYH3LBF5TSDZ1kw+0XpdKN2KchfuhMK6lQ85S4XOG4lIZLcrcS4PWBmvcY6eS2kCQFz0jukQ==} engines: {node: '>=18.12.0'} hasBin: true @@ -4424,41 +4420,41 @@ snapshots: '@typescript-eslint/types': 8.47.0 eslint-visitor-keys: 4.2.1 - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251118.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251121.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20251118.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20251121.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20251118.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20251121.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20251118.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20251121.1': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20251118.1': + '@typescript/native-preview-linux-x64@7.0.0-dev.20251121.1': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20251118.1': + '@typescript/native-preview-win32-arm64@7.0.0-dev.20251121.1': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20251118.1': + '@typescript/native-preview-win32-x64@7.0.0-dev.20251121.1': optional: true - '@typescript/native-preview@7.0.0-dev.20251118.1': + '@typescript/native-preview@7.0.0-dev.20251121.1': optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20251118.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20251118.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20251118.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20251118.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20251118.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20251118.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20251118.1 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20251121.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20251121.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20251121.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20251121.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20251121.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20251121.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20251121.1 - '@vitejs/plugin-vue@6.0.2(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.2(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.50 - vite: rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + vite: rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) vue: 3.5.24(typescript@5.9.3) '@volar/language-core@2.4.23': @@ -4538,14 +4534,14 @@ snapshots: dependencies: '@vue/devtools-kit': 7.7.9 - '@vue/devtools-core@8.0.5(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))': + '@vue/devtools-core@8.0.5(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + vite-hot-client: 2.1.0(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) vue: 3.5.24(typescript@5.9.3) transitivePeerDependencies: - vite @@ -4732,7 +4728,7 @@ snapshots: base64-arraybuffer@1.0.2: {} - baseline-browser-mapping@2.8.29: {} + baseline-browser-mapping@2.8.30: {} birpc@2.8.0: {} @@ -4753,9 +4749,9 @@ snapshots: browserslist@4.28.0: dependencies: - baseline-browser-mapping: 2.8.29 + baseline-browser-mapping: 2.8.30 caniuse-lite: 1.0.30001756 - electron-to-chromium: 1.5.256 + electron-to-chromium: 1.5.259 node-releases: 2.0.27 update-browserslist-db: 1.1.4(browserslist@4.28.0) @@ -5023,7 +5019,7 @@ snapshots: tslib: 2.3.0 zrender: 6.0.0 - electron-to-chromium@1.5.256: {} + electron-to-chromium@1.5.259: {} emoji-regex@10.6.0: {} @@ -5250,13 +5246,13 @@ snapshots: '@types/eslint': 9.6.1 eslint-config-prettier: 9.1.0(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-vue@10.5.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))): + eslint-plugin-vue@10.6.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) eslint: 9.39.1(jiti@2.6.1) natural-compare: 1.4.0 nth-check: 2.1.1 - postcss-selector-parser: 6.1.2 + postcss-selector-parser: 7.1.0 semver: 7.7.3 vue-eslint-parser: 10.2.0(eslint@9.39.1(jiti@2.6.1)) xml-name-validator: 4.0.0 @@ -5389,7 +5385,7 @@ snapshots: optionalDependencies: picomatch: 4.0.3 - file-entry-cache@10.1.4: + file-entry-cache@11.1.1: dependencies: flat-cache: 6.1.19 @@ -5863,7 +5859,7 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.2.6: + lint-staged@16.2.7: dependencies: commander: 14.0.2 listr2: 9.0.5 @@ -6161,11 +6157,6 @@ snapshots: dependencies: postcss: 8.5.6 - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - postcss-selector-parser@7.1.0: dependencies: cssesc: 3.0.0 @@ -6264,7 +6255,7 @@ snapshots: rfdc@1.4.1: {} - rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1): + rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@oxc-project/runtime': 0.98.0 fdir: 6.5.0(picomatch@4.0.3) @@ -6598,86 +6589,86 @@ snapshots: js-tokens: 9.0.1 optional: true - stylelint-config-html@1.1.0(postcss-html@1.6.0)(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-html@1.1.0(postcss-html@1.6.0)(stylelint@16.26.0(typescript@5.9.3)): dependencies: postcss-html: 1.6.0 - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.0(typescript@5.9.3) - stylelint-config-idiomatic-order@10.0.0(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-idiomatic-order@10.0.0(stylelint@16.26.0(typescript@5.9.3)): dependencies: - stylelint: 16.25.0(typescript@5.9.3) - stylelint-order: 6.0.4(stylelint@16.25.0(typescript@5.9.3)) + stylelint: 16.26.0(typescript@5.9.3) + stylelint-order: 6.0.4(stylelint@16.26.0(typescript@5.9.3)) - stylelint-config-recommended-scss@16.0.2(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-recommended-scss@16.0.2(postcss@8.5.6)(stylelint@16.26.0(typescript@5.9.3)): dependencies: postcss-scss: 4.0.9(postcss@8.5.6) - stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-recommended: 17.0.0(stylelint@16.25.0(typescript@5.9.3)) - stylelint-scss: 6.12.1(stylelint@16.25.0(typescript@5.9.3)) + stylelint: 16.26.0(typescript@5.9.3) + stylelint-config-recommended: 17.0.0(stylelint@16.26.0(typescript@5.9.3)) + stylelint-scss: 6.12.1(stylelint@16.26.0(typescript@5.9.3)) optionalDependencies: postcss: 8.5.6 - stylelint-config-recommended-vue@1.6.1(postcss-html@1.6.0)(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-recommended-vue@1.6.1(postcss-html@1.6.0)(stylelint@16.26.0(typescript@5.9.3)): dependencies: postcss-html: 1.6.0 semver: 7.7.3 - stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-html: 1.1.0(postcss-html@1.6.0)(stylelint@16.25.0(typescript@5.9.3)) - stylelint-config-recommended: 17.0.0(stylelint@16.25.0(typescript@5.9.3)) + stylelint: 16.26.0(typescript@5.9.3) + stylelint-config-html: 1.1.0(postcss-html@1.6.0)(stylelint@16.26.0(typescript@5.9.3)) + stylelint-config-recommended: 17.0.0(stylelint@16.26.0(typescript@5.9.3)) - stylelint-config-recommended@17.0.0(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-recommended@17.0.0(stylelint@16.26.0(typescript@5.9.3)): dependencies: - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.0(typescript@5.9.3) - stylelint-config-standard-scss@16.0.0(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-standard-scss@16.0.0(postcss@8.5.6)(stylelint@16.26.0(typescript@5.9.3)): dependencies: - stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-recommended-scss: 16.0.2(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)) - stylelint-config-standard: 39.0.1(stylelint@16.25.0(typescript@5.9.3)) + stylelint: 16.26.0(typescript@5.9.3) + stylelint-config-recommended-scss: 16.0.2(postcss@8.5.6)(stylelint@16.26.0(typescript@5.9.3)) + stylelint-config-standard: 39.0.1(stylelint@16.26.0(typescript@5.9.3)) optionalDependencies: postcss: 8.5.6 - stylelint-config-standard-vue@1.0.0(postcss-html@1.6.0)(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-standard-vue@1.0.0(postcss-html@1.6.0)(stylelint@16.26.0(typescript@5.9.3)): dependencies: postcss-html: 1.6.0 - stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-html: 1.1.0(postcss-html@1.6.0)(stylelint@16.25.0(typescript@5.9.3)) - stylelint-config-recommended-vue: 1.6.1(postcss-html@1.6.0)(stylelint@16.25.0(typescript@5.9.3)) - stylelint-config-standard: 39.0.1(stylelint@16.25.0(typescript@5.9.3)) + stylelint: 16.26.0(typescript@5.9.3) + stylelint-config-html: 1.1.0(postcss-html@1.6.0)(stylelint@16.26.0(typescript@5.9.3)) + stylelint-config-recommended-vue: 1.6.1(postcss-html@1.6.0)(stylelint@16.26.0(typescript@5.9.3)) + stylelint-config-standard: 39.0.1(stylelint@16.26.0(typescript@5.9.3)) - stylelint-config-standard@39.0.1(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-standard@39.0.1(stylelint@16.26.0(typescript@5.9.3)): dependencies: - stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-recommended: 17.0.0(stylelint@16.25.0(typescript@5.9.3)) + stylelint: 16.26.0(typescript@5.9.3) + stylelint-config-recommended: 17.0.0(stylelint@16.26.0(typescript@5.9.3)) - stylelint-declaration-block-no-ignored-properties@2.8.0(stylelint@16.25.0(typescript@5.9.3)): + stylelint-declaration-block-no-ignored-properties@2.8.0(stylelint@16.26.0(typescript@5.9.3)): dependencies: - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.0(typescript@5.9.3) - stylelint-high-performance-animation@1.11.0(stylelint@16.25.0(typescript@5.9.3)): + stylelint-high-performance-animation@1.11.0(stylelint@16.26.0(typescript@5.9.3)): dependencies: postcss-value-parser: 4.2.0 - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.0(typescript@5.9.3) - stylelint-order@6.0.4(stylelint@16.25.0(typescript@5.9.3)): + stylelint-order@6.0.4(stylelint@16.26.0(typescript@5.9.3)): dependencies: postcss: 8.5.6 postcss-sorting: 8.0.2(postcss@8.5.6) - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.0(typescript@5.9.3) - stylelint-order@7.0.0(stylelint@16.25.0(typescript@5.9.3)): + stylelint-order@7.0.0(stylelint@16.26.0(typescript@5.9.3)): dependencies: postcss: 8.5.6 postcss-sorting: 9.1.0(postcss@8.5.6) - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.0(typescript@5.9.3) - stylelint-prettier@5.0.3(prettier@3.6.2)(stylelint@16.25.0(typescript@5.9.3)): + stylelint-prettier@5.0.3(prettier@3.6.2)(stylelint@16.26.0(typescript@5.9.3)): dependencies: prettier: 3.6.2 prettier-linter-helpers: 1.0.0 - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.0(typescript@5.9.3) - stylelint-scss@6.12.1(stylelint@16.25.0(typescript@5.9.3)): + stylelint-scss@6.12.1(stylelint@16.26.0(typescript@5.9.3)): dependencies: css-tree: 3.1.0 is-plain-object: 5.0.0 @@ -6687,9 +6678,9 @@ snapshots: postcss-resolve-nested-selector: 0.1.6 postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.0(typescript@5.9.3) - stylelint@16.25.0(typescript@5.9.3): + stylelint@16.26.0(typescript@5.9.3): dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 @@ -6704,7 +6695,7 @@ snapshots: debug: 4.4.3 fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 - file-entry-cache: 10.1.4 + file-entry-cache: 11.1.1 global-modules: 2.0.0 globby: 11.1.0 globjoin: 0.1.4 @@ -6958,17 +6949,17 @@ snapshots: varint@6.0.0: {} - vite-dev-rpc@1.1.0(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-dev-rpc@1.1.0(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: birpc: 2.8.0 - vite: rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - vite-hot-client: 2.1.0(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + vite-hot-client: 2.1.0(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) - vite-hot-client@2.1.0(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-hot-client@2.1.0(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: - vite: rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + vite: rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-inspect@11.3.3(@nuxt/kit@3.17.5)(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-inspect@11.3.3(@nuxt/kit@3.17.5)(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -6978,28 +6969,28 @@ snapshots: perfect-debounce: 2.0.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - vite-dev-rpc: 1.1.0(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + vite-dev-rpc: 1.1.0(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) optionalDependencies: '@nuxt/kit': 3.17.5 transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@8.0.5(@nuxt/kit@3.17.5)(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)): + vite-plugin-vue-devtools@8.0.5(@nuxt/kit@3.17.5)(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)): dependencies: - '@vue/devtools-core': 8.0.5(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) + '@vue/devtools-core': 8.0.5(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 sirv: 3.0.2 - vite: rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-inspect: 11.3.3(@nuxt/kit@3.17.5)(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) - vite-plugin-vue-inspector: 5.3.2(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + vite-plugin-inspect: 11.3.3(@nuxt/kit@3.17.5)(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) + vite-plugin-vue-inspector: 5.3.2(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - '@nuxt/kit' - supports-color - vue - vite-plugin-vue-inspector@5.3.2(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-vue-inspector@5.3.2(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@babel/core': 7.28.5 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.5) @@ -7010,16 +7001,16 @@ snapshots: '@vue/compiler-dom': 3.5.24 kolorist: 1.8.0 magic-string: 0.30.21 - vite: rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + vite: rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - vite-plugin-vuetify@2.1.2(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))(vuetify@3.10.11): + vite-plugin-vuetify@2.1.2(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))(vuetify@3.10.11): dependencies: '@vuetify/loader-shared': 2.1.1(vue@3.5.24(typescript@5.9.3))(vuetify@3.10.11) debug: 4.4.3 upath: 2.0.1 - vite: rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) + vite: rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1) vue: 3.5.24(typescript@5.9.3) vuetify: 3.10.11(typescript@5.9.3)(vite-plugin-vuetify@2.1.2)(vue@3.5.24(typescript@5.9.3)) transitivePeerDependencies: @@ -7074,7 +7065,7 @@ snapshots: vue: 3.5.24(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 - vite-plugin-vuetify: 2.1.2(rolldown-vite@7.2.6(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))(vuetify@3.10.11) + vite-plugin-vuetify: 2.1.2(rolldown-vite@7.2.7(@types/node@24.10.1)(esbuild@0.25.12)(jiti@2.6.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.39.0)(tsx@4.20.6)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3))(vuetify@3.10.11) wcag-color@1.1.1: {} diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index b5d78447..7462d9f4 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -7,7 +7,10 @@ name = "TeyvatGuide" version = "0.8.6" dependencies = [ "chrono", + "libloading 0.8.9", "log", + "prost", + "prost-types", "serde", "serde_json", "tauri", @@ -24,8 +27,10 @@ dependencies = [ "tauri-plugin-single-instance", "tauri-plugin-sql", "tauri-utils", + "tokio", "url", "walkdir", + "windows-sys 0.61.2", ] [[package]] @@ -2215,6 +2220,15 @@ dependencies = [ "once_cell", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.15" @@ -3426,6 +3440,38 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "prost" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "prost-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" +dependencies = [ + "prost", +] + [[package]] name = "psl-types" version = "2.0.11" @@ -5439,6 +5485,7 @@ dependencies = [ "bytes", "libc", "mio", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 728a27fb..81b5c3a2 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -21,14 +21,31 @@ tauri-build = { version = "2.5.2", features = [] } [dependencies] chrono = "0.4.42" +libloading = "0.8" log = "0.4.28" +prost = "0.14.1" +prost-types = "0.14.1" serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.145" tauri = { version = "2.9.3", features = [] } tauri-utils = "2.8.0" +tokio = { version = "1.48.0", features = ["full"] } url = "2.5.7" walkdir = "2.5.0" +[target.'cfg(windows)'.dependencies.windows-sys] +version = "0.61.2" +features = [ + "Win32_System_Diagnostics_ToolHelp", + "Win32_System_WindowsProgramming", + "Win32_System_Pipes", + "Win32_System_Memory", + "Win32_System_Diagnostics", + "Win32_System_Diagnostics_Debug", + "Win32_System_LibraryLoader", + "Win32_System_Threading", +] + # deep link 插件 [dependencies.tauri-plugin-deep-link] git = "ssh://git@github.com/tauri-apps/plugins-workspace.git" diff --git a/src-tauri/lib/YaeAchievementLib.dll b/src-tauri/lib/YaeAchievementLib.dll new file mode 100644 index 00000000..f7973eeb Binary files /dev/null and b/src-tauri/lib/YaeAchievementLib.dll differ diff --git a/src-tauri/proto/AchievementInfo.proto b/src-tauri/proto/AchievementInfo.proto new file mode 100644 index 00000000..380d2587 --- /dev/null +++ b/src-tauri/proto/AchievementInfo.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; + +message AchievementProtoFieldInfo { + uint32 id = 1; + uint32 status = 2; + uint32 total_progress = 3; + uint32 current_progress = 4; + uint32 finish_timestamp = 5; +} + +message AchievementItem { + uint32 pre = 1; + uint32 group = 2; + string name = 3; + string description = 4; +} + +message MethodRvaConfig { + uint32 do_cmd = 1; + uint32 update_normal_prop = 3; + uint32 new_string = 4; + uint32 find_game_object = 5; + uint32 event_system_update = 6; + uint32 simulate_pointer_click = 7; + uint32 to_int32 = 8; + uint32 tcp_state_ptr = 9; + uint32 shared_info_ptr = 10; + uint32 decompress = 11; +} + +message NativeLibConfig { + uint32 store_cmd_id = 1; + uint32 achievement_cmd_id = 2; + map method_rva = 10; +} + +message AchievementInfo { + string version = 1; + map group = 2; + map items = 3; + AchievementProtoFieldInfo pb_info = 4; + NativeLibConfig native_config = 5; +} \ No newline at end of file diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 1fe14b83..ca1a41a7 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,15 +1,16 @@ -//! @file src/lib.rs -//! @desc 主模块,用于启动应用 -//! @since Beta v0.7.2 +//! 主模块,用于启动应用 +//! @since Beta v0.9.0 mod client; mod commands; mod plugins; mod utils; +mod yae; use crate::client::create_mhy_client; use crate::commands::{create_window, execute_js, get_dir_size, init_app}; use crate::plugins::{build_log_plugin, build_si_plugin}; +use crate::yae::call_yae_dll; use tauri::{generate_context, generate_handler, Builder, Manager, Window, WindowEvent}; // 窗口事件处理 @@ -61,7 +62,8 @@ pub fn run() { create_window, execute_js, get_dir_size, - create_mhy_client + create_mhy_client, + call_yae_dll ]) .run(generate_context!()) .expect("error while running tauri application"); diff --git a/src-tauri/src/yae/inject.rs b/src-tauri/src/yae/inject.rs new file mode 100644 index 00000000..675aea8b --- /dev/null +++ b/src-tauri/src/yae/inject.rs @@ -0,0 +1,165 @@ +//! DLL 注入相关功能 +//! @since Beta v0.9.0 + +use std::ffi::{c_void, OsStr}; +use std::iter::once; +use std::os::windows::ffi::OsStrExt; +use std::ptr; +use windows_sys::Win32::Foundation::{HANDLE, INVALID_HANDLE_VALUE}; +use windows_sys::Win32::Storage::FileSystem::PIPE_ACCESS_DUPLEX; +use windows_sys::Win32::System::Diagnostics::Debug::WriteProcessMemory; +use windows_sys::Win32::System::Diagnostics::ToolHelp::{ + CreateToolhelp32Snapshot, Module32FirstW, Module32NextW, MODULEENTRY32W, TH32CS_SNAPMODULE, +}; +use windows_sys::Win32::System::LibraryLoader::{ + GetModuleHandleA, GetProcAddress, LoadLibraryExW, DONT_RESOLVE_DLL_REFERENCES, +}; +use windows_sys::Win32::System::Memory::{VirtualAllocEx, MEM_COMMIT, PAGE_READWRITE}; +use windows_sys::Win32::System::Pipes::{ + CreateNamedPipeW, PIPE_READMODE_MESSAGE, PIPE_TYPE_MESSAGE, PIPE_UNLIMITED_INSTANCES, PIPE_WAIT, +}; +use windows_sys::Win32::System::Threading::{ + CreateProcessW, CreateRemoteThread, WaitForSingleObject, INFINITE, PROCESS_INFORMATION, + STARTUPINFOW, +}; + +/// 转为宽字符串 +pub fn to_wide_string(s: &str) -> Vec { + OsStr::new(s).encode_wide().chain(once(0)).collect() +} + +/// 创建命名管道 +pub fn create_named_pipe(pipe_name: &str) -> HANDLE { + let full_pipe_name = format!(r"\\.\pipe\{}", pipe_name); + let wide: Vec = to_wide_string(&full_pipe_name); + + unsafe { + let handle = CreateNamedPipeW( + wide.as_ptr(), + PIPE_ACCESS_DUPLEX, + PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, + PIPE_UNLIMITED_INSTANCES, + 512, + 512, + 0, + ptr::null_mut(), + ); + if handle == INVALID_HANDLE_VALUE { + panic!("CreateNamedPipeW failed"); + } + handle + } +} + +/// 启动目标进程,附加cwd +pub fn spawn_process(path: &str) -> PROCESS_INFORMATION { + let wide_path: Vec = to_wide_string(path); + let cwd = std::path::Path::new(path).parent().unwrap().to_str().unwrap(); + let wide_cwd: Vec = to_wide_string(cwd); + + unsafe { + let mut si: STARTUPINFOW = std::mem::zeroed(); + si.cb = std::mem::size_of::() as u32; + let mut pi: PROCESS_INFORMATION = std::mem::zeroed(); + + let success = CreateProcessW( + wide_path.as_ptr(), + ptr::null_mut(), + ptr::null_mut(), + ptr::null_mut(), + 0, + 0, + ptr::null_mut(), + wide_cwd.as_ptr(), + &mut si, + &mut pi, + ); + + if success == 0 { + panic!("CreateProcessW failed"); + } + + pi + } +} + +/// 注入 DLL +pub fn inject_dll(pi: &PROCESS_INFORMATION, dll_path: &str) { + let dll_utf16: Vec = to_wide_string(dll_path); + let size = dll_utf16.len() * 2; + + unsafe { + // 在远程进程分配内存并写入 DLL 路径 + let addr = VirtualAllocEx(pi.hProcess, ptr::null_mut(), size, MEM_COMMIT, PAGE_READWRITE); + WriteProcessMemory(pi.hProcess, addr, dll_utf16.as_ptr() as *const _, size, ptr::null_mut()); + + // 获取 kernel32!LoadLibraryW 地址 + let k32 = GetModuleHandleA(b"kernel32.dll\0".as_ptr()); + let loadlib = GetProcAddress(k32, b"LoadLibraryW\0".as_ptr()); + + // 在远程进程里调用 LoadLibraryW + let thread = CreateRemoteThread( + pi.hProcess, + ptr::null_mut(), + 0, + Some(std::mem::transmute(loadlib)), + addr, + 0, + ptr::null_mut(), + ); + WaitForSingleObject(thread, INFINITE); + } +} + +/// 枚举模块,找到 DLL 基址 +pub fn find_module_base(pid: u32, dll_name: &str) -> Option { + unsafe { + let snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid); + let mut me32 = + MODULEENTRY32W { dwSize: std::mem::size_of::() as u32, ..Default::default() }; + + if Module32FirstW(snapshot, &mut me32) != 0 { + loop { + let name = String::from_utf16_lossy(&me32.szModule); + if name.contains(dll_name) { + return Some(me32.modBaseAddr as usize); + } + if Module32NextW(snapshot, &mut me32) == 0 { + break; + } + } + } + } + None +} + +/// 执行 YaeMain +pub fn call_yaemain(pi: &PROCESS_INFORMATION, base: usize, dll_path: &str) { + let dll_path_wide: Vec = to_wide_string(dll_path); + unsafe { + // 本地解析 YaeMain 地址 + let local = + LoadLibraryExW(dll_path_wide.as_ptr(), ptr::null_mut(), DONT_RESOLVE_DLL_REFERENCES); + let proc = GetProcAddress(local, b"YaeMain\0".as_ptr()).expect("无法找到 YaeMain"); + + // 把函数指针转成裸地址 + let proc_addr = proc as *const () as usize; + + // 计算 RVA + let rva = proc_addr - local as usize; + println!("YaeMain RVA: {:#x}", rva); + + let remote_yaemain = (base + rva) as *mut c_void; + + // 在远程进程里调用 YaeMain(hModule) + CreateRemoteThread( + pi.hProcess, + ptr::null_mut(), + 0, + Some(std::mem::transmute(remote_yaemain)), + base as *mut _, // hModule 参数 + 0, + ptr::null_mut(), + ); + } +} diff --git a/src-tauri/src/yae/mod.rs b/src-tauri/src/yae/mod.rs new file mode 100644 index 00000000..89e37b36 --- /dev/null +++ b/src-tauri/src/yae/mod.rs @@ -0,0 +1,204 @@ +//! Yae 相关处理 +//! @since Beta v0.8.7 + +pub mod inject; +pub mod proto; + +use inject::{call_yaemain, create_named_pipe, find_module_base, inject_dll, spawn_process}; +use serde_json::Value; +use std::fs::File; +use std::io; +use std::io::{Read, Write}; +use std::os::windows::io::{FromRawHandle, OwnedHandle, RawHandle}; +use std::sync::Arc; +use tauri::{AppHandle, Manager}; +use windows_sys::Win32::Storage::FileSystem::ReadFile; +use windows_sys::Win32::System::Pipes::ConnectNamedPipe; +fn read_rva(key: &str) -> i32 { + let path = format!("nativeConfig.methodRva.chinese.{}", key); + read_conf(&path) +} + +fn read_conf(path: &str) -> i32 { + // 编译时嵌入 JSON 文件,值都是32位整数 + let data = include_str!("../../lib/conf.json"); + let json: Value = serde_json::from_str(data).expect("Invalid JSON"); + + // 按 '.' 分割 key + let mut current = &json; + for key in path.split('.') { + match current.get(key) { + Some(value) => current = value, + None => return 0, // 如果找不到 key,返回默认值 0 + } + } + current.as_i64().unwrap_or(0) as i32 +} + +use prost::encoding::{decode_key, WireType}; +use std::collections::HashMap; + +pub fn parse_achievement_data(bytes: &[u8]) -> Vec> { + let mut cursor = std::io::Cursor::new(bytes); + let mut data = Vec::new(); + let mut err_times = 0; + + while let Ok((tag, wire_type)) = decode_key(&mut cursor) { + if wire_type == WireType::LengthDelimited { + let len = prost::encoding::decode_varint(&mut cursor).unwrap() as usize; + let mut buf = vec![0u8; len]; + if cursor.read_exact(&mut buf).is_err() { + continue; + } + + let mut inner = std::io::Cursor::new(&buf); + let mut dict = HashMap::new(); + while let Ok((inner_tag, inner_type)) = decode_key(&mut inner) { + if inner_type != WireType::Varint { + dict.clear(); + break; + } + let value = prost::encoding::decode_varint(&mut inner).unwrap() as u32; + dict.insert(inner_tag, value); + } + + if dict.len() >= 3 { + data.push(dict); + } else if err_times == 0 { + err_times += 1; + } else { + break; + } + } + } + + data +} + +use windows_sys::Win32::Foundation::{GetLastError, ERROR_MORE_DATA}; + +fn read_u32_le(r: &mut R) -> io::Result { + let mut b = [0u8; 4]; + r.read_exact(&mut b)?; + Ok(u32::from_le_bytes(b)) +} + +fn read_exact_vec(r: &mut R, len: usize) -> io::Result> { + let mut v = vec![0u8; len]; + r.read_exact(&mut v)?; + Ok(v) +} + +/// 从管道中读取完整的 payload +/// 协议:命令字节已经读过,这里只负责把剩余数据读完 +pub fn read_full_payload(reader: &mut R) -> io::Result> { + let mut buf = Vec::new(); + let mut chunk = [0u8; 4096]; + + loop { + match reader.read(&mut chunk) { + Ok(0) => break, // EOF,读完了 + Ok(n) => buf.extend_from_slice(&chunk[..n]), + Err(ref e) if e.raw_os_error() == Some(234) => { + // Windows ERROR_MORE_DATA → 继续读 + continue; + } + Err(e) => return Err(e), + } + } + + Ok(buf) +} + +/// 调用 dll +#[tauri::command] +pub fn call_yae_dll(app_handle: AppHandle, game_path: String) -> () { + let dll_path = app_handle.path().resource_dir().unwrap().join("resources/YaeAchievementLib.dll"); + dbg!(&dll_path); + // 0. 创建 YaeAchievementPipe 的 命名管道,获取句柄 + dbg!("开始启动 YaeAchievementPipe 命名管道"); + let _pipe_handle = create_named_pipe("YaeAchievementPipe"); + + // 1. 启动游戏进程 + let pi = spawn_process(&game_path); + dbg!("游戏进程启动完成"); + + // 2. 注入 DLL + inject_dll(&pi, dll_path.to_str().unwrap()); + dbg!("DLL 注入完成"); + + // 3. 找到 DLL 基址 + let base = find_module_base(pi.dwProcessId, "YaeAchievementLib.dll").expect("找不到 DLL 基址"); + dbg!("找到 DLL 基址: {:X}", base); + + // 4. 调用 YaeMain + call_yaemain(&pi, base, dll_path.to_str().unwrap()); + dbg!("YaeMain 调用完成"); + + // 根据句柄等待命名管道连接 + let retry_count = 50; + for _ in 0..retry_count { + let result = unsafe { ConnectNamedPipe(_pipe_handle, std::ptr::null_mut()) }; + if result != 0 { + dbg!("命名管道连接成功"); + break; + } else { + std::thread::sleep(std::time::Duration::from_secs(1)); + } + } + // 5. 读取命名管道数据,循环读取,根据接受字节进行通信 + let file = unsafe { File::from_raw_handle(_pipe_handle as RawHandle) }; + let file = Arc::new(file); + + // No raw HANDLE captured in the closure. Only Arc. + std::thread::spawn({ + let file = file.clone(); + move || { + let mut file = file.try_clone().expect("Failed to clone pipe file"); + let mut cmd = [0u8; 1]; + + loop { + match file.read_exact(&mut cmd) { + // 输出命令字节 + Ok(_) => { + println!("收到命令: {}", cmd[0]); + match cmd[0] { + 0x01 => println!("AchievementNotify"), + 0x02 => println!("PlayerStoreNotify"), + 0x03 => println!("PlayerPropNotify"), + 0xFC => { + let _ = file.write_all(&read_conf("nativeConfig.achievementCmdId").to_le_bytes()); + let _ = file.write_all(&read_conf("nativeConfig.storeCmdId").to_le_bytes()); + } + 0xFD => { + for key in [ + "doCmd", + "updateNormalProp", + "newString", + "findGameObject", + "eventSystemUpdate", + "simulatePointerClick", + "toInt32", + "tcpStatePtr", + "sharedInfoPtr", + "decompress", + ] { + let _ = file.write_all(&read_rva(key).to_le_bytes()); + } + } + 0xFF => { + let _ = file.write_all(&[1]); + break; + } + _ => println!("收到未知命令: {}", cmd[0]), + } + } + Err(e) => { + println!("读取失败: {:?}", e); + break; + } + } + } + } + }); +} diff --git a/src-tauri/src/yae/proto.rs b/src-tauri/src/yae/proto.rs new file mode 100644 index 00000000..4e704006 --- /dev/null +++ b/src-tauri/src/yae/proto.rs @@ -0,0 +1,101 @@ +//! Yae 成就信息的 Protobuf 定义 +//! @since Beta v0.9.0 + +use prost::Message; +use std::collections::HashMap; + +#[derive(Clone, PartialEq, Message)] +pub struct AchievementProtoFieldInfo { + #[prost(uint32, tag = "1")] + pub id: u32, + + #[prost(uint32, tag = "2")] + pub status: u32, + + #[prost(uint32, tag = "3")] + pub total_progress: u32, + + #[prost(uint32, tag = "4")] + pub current_progress: u32, + + #[prost(uint32, tag = "5")] + pub finish_timestamp: u32, +} + +#[derive(Clone, PartialEq, Message)] +pub struct AchievementItem { + #[prost(uint32, tag = "1")] + pub pre: u32, + + #[prost(uint32, tag = "2")] + pub group: u32, + + #[prost(string, tag = "3")] + pub name: String, + + #[prost(string, tag = "4")] + pub description: String, +} + +#[derive(Clone, PartialEq, Message)] +pub struct MethodRvaConfig { + #[prost(uint32, tag = "1")] + pub do_cmd: u32, + + #[prost(uint32, tag = "3")] + pub update_normal_prop: u32, + + #[prost(uint32, tag = "4")] + pub new_string: u32, + + #[prost(uint32, tag = "5")] + pub find_game_object: u32, + + #[prost(uint32, tag = "6")] + pub event_system_update: u32, + + #[prost(uint32, tag = "7")] + pub simulate_pointer_click: u32, + + #[prost(uint32, tag = "8")] + pub to_int32: u32, + + #[prost(uint32, tag = "9")] + pub tcp_state_ptr: u32, + + #[prost(uint32, tag = "10")] + pub shared_info_ptr: u32, + + #[prost(uint32, tag = "11")] + pub decompress: u32, +} + +#[derive(Clone, PartialEq, Message)] +pub struct NativeLibConfig { + #[prost(uint32, tag = "1")] + pub store_cmd_id: u32, + + #[prost(uint32, tag = "2")] + pub achievement_cmd_id: u32, + + #[prost(map = "uint32, message", tag = "10")] + pub method_rva: HashMap, +} + +#[derive(Clone, PartialEq, Message)] +pub struct AchievementInfo { + #[prost(string, tag = "1")] + pub version: String, + + #[prost(map = "uint32, string", tag = "2")] + pub group: HashMap, + + #[prost(map = "uint32, message", tag = "3")] + pub items: HashMap, + + #[prost(message, tag = "4")] + pub pb_info: Option, + + #[prost(message, tag = "5")] + pub native_config: Option, +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 3a8ed34e..ea2d24ed 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -30,7 +30,10 @@ ], "targets": ["msi", "app", "dmg"], "windows": { "wix": { "language": "zh-CN" } }, - "macOS": {} + "macOS": {}, + "resources": { + "lib/YaeAchievementLib.dll": "resources/YaeAchievementLib.dll" + } }, "app": { "withGlobalTauri": true, diff --git a/src/pages/common/PageTest.vue b/src/pages/common/PageTest.vue index 2450f947..118ae6da 100644 --- a/src/pages/common/PageTest.vue +++ b/src/pages/common/PageTest.vue @@ -15,6 +15,7 @@
测试 + 测试2
@@ -23,6 +24,7 @@ import showSnackbar from "@comp/func/snackbar.js"; import hk4eReq from "@req/hk4eReq.js"; import takumiReq from "@req/takumiReq.js"; import useUserStore from "@store/user.js"; +import { invoke } from "@tauri-apps/api/core"; import { storeToRefs } from "pinia"; import { ref } from "vue"; @@ -56,6 +58,16 @@ async function test(): Promise { } console.log(list); } + +async function test2(): Promise { + try { + await invoke("call_yae_dll", { + gamePath: "D:\\Games\\Genshin Impact bilibili\\games\\Genshin Impact Game\\YuanShen.exe", + }); + } catch (e) { + console.error(e); + } +}