mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-06 08:32:51 +08:00
🌱 初步建立pipe&成功调用dll
This commit is contained in:
12
package.json
12
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",
|
||||
|
||||
285
pnpm-lock.yaml
generated
285
pnpm-lock.yaml
generated
@@ -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: {}
|
||||
|
||||
|
||||
47
src-tauri/Cargo.lock
generated
47
src-tauri/Cargo.lock
generated
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
BIN
src-tauri/lib/YaeAchievementLib.dll
Normal file
BIN
src-tauri/lib/YaeAchievementLib.dll
Normal file
Binary file not shown.
43
src-tauri/proto/AchievementInfo.proto
Normal file
43
src-tauri/proto/AchievementInfo.proto
Normal file
@@ -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<uint32, MethodRvaConfig> method_rva = 10;
|
||||
}
|
||||
|
||||
message AchievementInfo {
|
||||
string version = 1;
|
||||
map<uint32, string> group = 2;
|
||||
map<uint32, AchievementItem> items = 3;
|
||||
AchievementProtoFieldInfo pb_info = 4;
|
||||
NativeLibConfig native_config = 5;
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
165
src-tauri/src/yae/inject.rs
Normal file
165
src-tauri/src/yae/inject.rs
Normal file
@@ -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<u16> {
|
||||
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<u16> = 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<u16> = to_wide_string(path);
|
||||
let cwd = std::path::Path::new(path).parent().unwrap().to_str().unwrap();
|
||||
let wide_cwd: Vec<u16> = to_wide_string(cwd);
|
||||
|
||||
unsafe {
|
||||
let mut si: STARTUPINFOW = std::mem::zeroed();
|
||||
si.cb = std::mem::size_of::<STARTUPINFOW>() 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<u16> = 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<usize> {
|
||||
unsafe {
|
||||
let snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
|
||||
let mut me32 =
|
||||
MODULEENTRY32W { dwSize: std::mem::size_of::<MODULEENTRY32W>() 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<u16> = 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(),
|
||||
);
|
||||
}
|
||||
}
|
||||
204
src-tauri/src/yae/mod.rs
Normal file
204
src-tauri/src/yae/mod.rs
Normal file
@@ -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<HashMap<u32, u32>> {
|
||||
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: io::Read>(r: &mut R) -> io::Result<u32> {
|
||||
let mut b = [0u8; 4];
|
||||
r.read_exact(&mut b)?;
|
||||
Ok(u32::from_le_bytes(b))
|
||||
}
|
||||
|
||||
fn read_exact_vec<R: io::Read>(r: &mut R, len: usize) -> io::Result<Vec<u8>> {
|
||||
let mut v = vec![0u8; len];
|
||||
r.read_exact(&mut v)?;
|
||||
Ok(v)
|
||||
}
|
||||
|
||||
/// 从管道中读取完整的 payload
|
||||
/// 协议:命令字节已经读过,这里只负责把剩余数据读完
|
||||
pub fn read_full_payload<R: Read>(reader: &mut R) -> io::Result<Vec<u8>> {
|
||||
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<File>.
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
101
src-tauri/src/yae/proto.rs
Normal file
101
src-tauri/src/yae/proto.rs
Normal file
@@ -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<u32, MethodRvaConfig>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Message)]
|
||||
pub struct AchievementInfo {
|
||||
#[prost(string, tag = "1")]
|
||||
pub version: String,
|
||||
|
||||
#[prost(map = "uint32, string", tag = "2")]
|
||||
pub group: HashMap<u32, String>,
|
||||
|
||||
#[prost(map = "uint32, message", tag = "3")]
|
||||
pub items: HashMap<u32, AchievementItem>,
|
||||
|
||||
#[prost(message, tag = "4")]
|
||||
pub pb_info: Option<AchievementProtoFieldInfo>,
|
||||
|
||||
#[prost(message, tag = "5")]
|
||||
pub native_config: Option<NativeLibConfig>,
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
</div>
|
||||
<div class="btn-list">
|
||||
<v-btn @click="test()" class="test-btn">测试</v-btn>
|
||||
<v-btn @click="test2()" class="test-btn">测试2</v-btn>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -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<void> {
|
||||
}
|
||||
console.log(list);
|
||||
}
|
||||
|
||||
async function test2(): Promise<void> {
|
||||
try {
|
||||
await invoke("call_yae_dll", {
|
||||
gamePath: "D:\\Games\\Genshin Impact bilibili\\games\\Genshin Impact Game\\YuanShen.exe",
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="css" scoped>
|
||||
.test-box {
|
||||
|
||||
Reference in New Issue
Block a user