[Update] Change download and load plugins structure.(change the plugins' build method vite to webpack. load esm.js )

This commit is contained in:
Sakamoto Shiina
2025-03-11 01:03:18 +09:00
parent 48c6e7d69f
commit 77795192a0
10 changed files with 428 additions and 278 deletions

425
package-lock.json generated
View File

@@ -25,13 +25,14 @@
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"react-i18next": "15.2.0", "react-i18next": "15.2.0",
"react-resizable-layout": "0.7.2" "react-resizable-layout": "0.7.2",
"semver": "^7.7.1"
}, },
"devDependencies": { "devDependencies": {
"@tauri-apps/cli": "1.6.3", "@tauri-apps/cli": "1.6.3",
"npm-run-all": "4.1.5", "npm-run-all": "4.1.5",
"sass": "1.79.4", "sass": "1.79.4",
"vite": "6.0.3", "vite": "^6.2.1",
"vite-plugin-svgr": "4.3.0" "vite-plugin-svgr": "4.3.0"
} }
}, },
@@ -457,9 +458,9 @@
"integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg=="
}, },
"node_modules/@esbuild/aix-ppc64": { "node_modules/@esbuild/aix-ppc64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz",
"integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@@ -472,9 +473,9 @@
} }
}, },
"node_modules/@esbuild/android-arm": { "node_modules/@esbuild/android-arm": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz",
"integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -487,9 +488,9 @@
} }
}, },
"node_modules/@esbuild/android-arm64": { "node_modules/@esbuild/android-arm64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz",
"integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -502,9 +503,9 @@
} }
}, },
"node_modules/@esbuild/android-x64": { "node_modules/@esbuild/android-x64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz",
"integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -517,9 +518,9 @@
} }
}, },
"node_modules/@esbuild/darwin-arm64": { "node_modules/@esbuild/darwin-arm64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz",
"integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -532,9 +533,9 @@
} }
}, },
"node_modules/@esbuild/darwin-x64": { "node_modules/@esbuild/darwin-x64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz",
"integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -547,9 +548,9 @@
} }
}, },
"node_modules/@esbuild/freebsd-arm64": { "node_modules/@esbuild/freebsd-arm64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz",
"integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -562,9 +563,9 @@
} }
}, },
"node_modules/@esbuild/freebsd-x64": { "node_modules/@esbuild/freebsd-x64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz",
"integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -577,9 +578,9 @@
} }
}, },
"node_modules/@esbuild/linux-arm": { "node_modules/@esbuild/linux-arm": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz",
"integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -592,9 +593,9 @@
} }
}, },
"node_modules/@esbuild/linux-arm64": { "node_modules/@esbuild/linux-arm64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz",
"integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -607,9 +608,9 @@
} }
}, },
"node_modules/@esbuild/linux-ia32": { "node_modules/@esbuild/linux-ia32": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz",
"integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@@ -622,9 +623,9 @@
} }
}, },
"node_modules/@esbuild/linux-loong64": { "node_modules/@esbuild/linux-loong64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz",
"integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==",
"cpu": [ "cpu": [
"loong64" "loong64"
], ],
@@ -637,9 +638,9 @@
} }
}, },
"node_modules/@esbuild/linux-mips64el": { "node_modules/@esbuild/linux-mips64el": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz",
"integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==",
"cpu": [ "cpu": [
"mips64el" "mips64el"
], ],
@@ -652,9 +653,9 @@
} }
}, },
"node_modules/@esbuild/linux-ppc64": { "node_modules/@esbuild/linux-ppc64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz",
"integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@@ -667,9 +668,9 @@
} }
}, },
"node_modules/@esbuild/linux-riscv64": { "node_modules/@esbuild/linux-riscv64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz",
"integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@@ -682,9 +683,9 @@
} }
}, },
"node_modules/@esbuild/linux-s390x": { "node_modules/@esbuild/linux-s390x": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz",
"integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@@ -697,9 +698,9 @@
} }
}, },
"node_modules/@esbuild/linux-x64": { "node_modules/@esbuild/linux-x64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz",
"integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -711,10 +712,25 @@
"node": ">=18" "node": ">=18"
} }
}, },
"node_modules/@esbuild/netbsd-arm64": {
"version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz",
"integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=18"
}
},
"node_modules/@esbuild/netbsd-x64": { "node_modules/@esbuild/netbsd-x64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz",
"integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -727,9 +743,9 @@
} }
}, },
"node_modules/@esbuild/openbsd-arm64": { "node_modules/@esbuild/openbsd-arm64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz",
"integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -742,9 +758,9 @@
} }
}, },
"node_modules/@esbuild/openbsd-x64": { "node_modules/@esbuild/openbsd-x64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz",
"integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -757,9 +773,9 @@
} }
}, },
"node_modules/@esbuild/sunos-x64": { "node_modules/@esbuild/sunos-x64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz",
"integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -772,9 +788,9 @@
} }
}, },
"node_modules/@esbuild/win32-arm64": { "node_modules/@esbuild/win32-arm64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz",
"integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -787,9 +803,9 @@
} }
}, },
"node_modules/@esbuild/win32-ia32": { "node_modules/@esbuild/win32-ia32": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz",
"integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@@ -802,9 +818,9 @@
} }
}, },
"node_modules/@esbuild/win32-x64": { "node_modules/@esbuild/win32-x64": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz",
"integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1218,9 +1234,9 @@
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": { "node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz",
"integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -1230,9 +1246,9 @@
] ]
}, },
"node_modules/@rollup/rollup-android-arm64": { "node_modules/@rollup/rollup-android-arm64": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz",
"integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1242,9 +1258,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-arm64": { "node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz",
"integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1254,9 +1270,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-x64": { "node_modules/@rollup/rollup-darwin-x64": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz",
"integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1265,10 +1281,34 @@
"darwin" "darwin"
] ]
}, },
"node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz",
"integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"freebsd"
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz",
"integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"freebsd"
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": { "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz",
"integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -1278,9 +1318,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-musleabihf": { "node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz",
"integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -1290,9 +1330,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-gnu": { "node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz",
"integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1302,9 +1342,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-musl": { "node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz",
"integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1313,10 +1353,22 @@
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
"version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz",
"integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==",
"cpu": [
"loong64"
],
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": { "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz",
"integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@@ -1326,9 +1378,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-riscv64-gnu": { "node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz",
"integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@@ -1338,9 +1390,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-s390x-gnu": { "node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz",
"integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@@ -1350,9 +1402,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-gnu": { "node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz",
"integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1362,9 +1414,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-musl": { "node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz",
"integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1374,9 +1426,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-arm64-msvc": { "node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz",
"integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1386,9 +1438,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-ia32-msvc": { "node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz",
"integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@@ -1398,9 +1450,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-x64-msvc": { "node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz",
"integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -2704,9 +2756,9 @@
} }
}, },
"node_modules/esbuild": { "node_modules/esbuild": {
"version": "0.24.0", "version": "0.25.0",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz",
"integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==",
"hasInstallScript": true, "hasInstallScript": true,
"bin": { "bin": {
"esbuild": "bin/esbuild" "esbuild": "bin/esbuild"
@@ -2715,30 +2767,31 @@
"node": ">=18" "node": ">=18"
}, },
"optionalDependencies": { "optionalDependencies": {
"@esbuild/aix-ppc64": "0.24.0", "@esbuild/aix-ppc64": "0.25.0",
"@esbuild/android-arm": "0.24.0", "@esbuild/android-arm": "0.25.0",
"@esbuild/android-arm64": "0.24.0", "@esbuild/android-arm64": "0.25.0",
"@esbuild/android-x64": "0.24.0", "@esbuild/android-x64": "0.25.0",
"@esbuild/darwin-arm64": "0.24.0", "@esbuild/darwin-arm64": "0.25.0",
"@esbuild/darwin-x64": "0.24.0", "@esbuild/darwin-x64": "0.25.0",
"@esbuild/freebsd-arm64": "0.24.0", "@esbuild/freebsd-arm64": "0.25.0",
"@esbuild/freebsd-x64": "0.24.0", "@esbuild/freebsd-x64": "0.25.0",
"@esbuild/linux-arm": "0.24.0", "@esbuild/linux-arm": "0.25.0",
"@esbuild/linux-arm64": "0.24.0", "@esbuild/linux-arm64": "0.25.0",
"@esbuild/linux-ia32": "0.24.0", "@esbuild/linux-ia32": "0.25.0",
"@esbuild/linux-loong64": "0.24.0", "@esbuild/linux-loong64": "0.25.0",
"@esbuild/linux-mips64el": "0.24.0", "@esbuild/linux-mips64el": "0.25.0",
"@esbuild/linux-ppc64": "0.24.0", "@esbuild/linux-ppc64": "0.25.0",
"@esbuild/linux-riscv64": "0.24.0", "@esbuild/linux-riscv64": "0.25.0",
"@esbuild/linux-s390x": "0.24.0", "@esbuild/linux-s390x": "0.25.0",
"@esbuild/linux-x64": "0.24.0", "@esbuild/linux-x64": "0.25.0",
"@esbuild/netbsd-x64": "0.24.0", "@esbuild/netbsd-arm64": "0.25.0",
"@esbuild/openbsd-arm64": "0.24.0", "@esbuild/netbsd-x64": "0.25.0",
"@esbuild/openbsd-x64": "0.24.0", "@esbuild/openbsd-arm64": "0.25.0",
"@esbuild/sunos-x64": "0.24.0", "@esbuild/openbsd-x64": "0.25.0",
"@esbuild/win32-arm64": "0.24.0", "@esbuild/sunos-x64": "0.25.0",
"@esbuild/win32-ia32": "0.24.0", "@esbuild/win32-arm64": "0.25.0",
"@esbuild/win32-x64": "0.24.0" "@esbuild/win32-ia32": "0.25.0",
"@esbuild/win32-x64": "0.25.0"
} }
}, },
"node_modules/escalade": { "node_modules/escalade": {
@@ -4106,9 +4159,9 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}, },
"node_modules/nanoid": { "node_modules/nanoid": {
"version": "3.3.8", "version": "3.3.9",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz",
"integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==",
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@@ -4520,9 +4573,9 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.49", "version": "8.5.3",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
"integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -4538,7 +4591,7 @@
} }
], ],
"dependencies": { "dependencies": {
"nanoid": "^3.3.7", "nanoid": "^3.3.8",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
"source-map-js": "^1.2.1" "source-map-js": "^1.2.1"
}, },
@@ -4832,9 +4885,9 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "4.24.0", "version": "4.35.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz",
"integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==",
"dependencies": { "dependencies": {
"@types/estree": "1.0.6" "@types/estree": "1.0.6"
}, },
@@ -4846,22 +4899,25 @@
"npm": ">=8.0.0" "npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.24.0", "@rollup/rollup-android-arm-eabi": "4.35.0",
"@rollup/rollup-android-arm64": "4.24.0", "@rollup/rollup-android-arm64": "4.35.0",
"@rollup/rollup-darwin-arm64": "4.24.0", "@rollup/rollup-darwin-arm64": "4.35.0",
"@rollup/rollup-darwin-x64": "4.24.0", "@rollup/rollup-darwin-x64": "4.35.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.24.0", "@rollup/rollup-freebsd-arm64": "4.35.0",
"@rollup/rollup-linux-arm-musleabihf": "4.24.0", "@rollup/rollup-freebsd-x64": "4.35.0",
"@rollup/rollup-linux-arm64-gnu": "4.24.0", "@rollup/rollup-linux-arm-gnueabihf": "4.35.0",
"@rollup/rollup-linux-arm64-musl": "4.24.0", "@rollup/rollup-linux-arm-musleabihf": "4.35.0",
"@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", "@rollup/rollup-linux-arm64-gnu": "4.35.0",
"@rollup/rollup-linux-riscv64-gnu": "4.24.0", "@rollup/rollup-linux-arm64-musl": "4.35.0",
"@rollup/rollup-linux-s390x-gnu": "4.24.0", "@rollup/rollup-linux-loongarch64-gnu": "4.35.0",
"@rollup/rollup-linux-x64-gnu": "4.24.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0",
"@rollup/rollup-linux-x64-musl": "4.24.0", "@rollup/rollup-linux-riscv64-gnu": "4.35.0",
"@rollup/rollup-win32-arm64-msvc": "4.24.0", "@rollup/rollup-linux-s390x-gnu": "4.35.0",
"@rollup/rollup-win32-ia32-msvc": "4.24.0", "@rollup/rollup-linux-x64-gnu": "4.35.0",
"@rollup/rollup-win32-x64-msvc": "4.24.0", "@rollup/rollup-linux-x64-musl": "4.35.0",
"@rollup/rollup-win32-arm64-msvc": "4.35.0",
"@rollup/rollup-win32-ia32-msvc": "4.35.0",
"@rollup/rollup-win32-x64-msvc": "4.35.0",
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
@@ -4951,10 +5007,9 @@
} }
}, },
"node_modules/semver": { "node_modules/semver": {
"version": "7.6.3", "version": "7.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
"dev": true,
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
}, },
@@ -5440,13 +5495,13 @@
} }
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "6.0.3", "version": "6.2.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.0.3.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.1.tgz",
"integrity": "sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==", "integrity": "sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==",
"dependencies": { "dependencies": {
"esbuild": "^0.24.0", "esbuild": "^0.25.0",
"postcss": "^8.4.49", "postcss": "^8.5.3",
"rollup": "^4.23.0" "rollup": "^4.30.1"
}, },
"bin": { "bin": {
"vite": "bin/vite.js" "vite": "bin/vite.js"

View File

@@ -23,7 +23,7 @@
"release-all": "npm run release && npm run release-cuda" "release-all": "npm run release && npm run release-cuda"
}, },
"dependencies": { "dependencies": {
"@babel/standalone": "^7.26.9", "@babel/standalone": "7.26.9",
"@emotion/react": "11.14.0", "@emotion/react": "11.14.0",
"@emotion/styled": "11.14.0", "@emotion/styled": "11.14.0",
"@mui/material": "6.2.0", "@mui/material": "6.2.0",
@@ -36,17 +36,18 @@
"jotai": "2.10.3", "jotai": "2.10.3",
"js-base64": "3.7.7", "js-base64": "3.7.7",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
"jszip": "^3.10.1", "jszip": "3.10.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"react-i18next": "15.2.0", "react-i18next": "15.2.0",
"react-resizable-layout": "0.7.2" "react-resizable-layout": "0.7.2",
"semver": "7.7.1"
}, },
"devDependencies": { "devDependencies": {
"@tauri-apps/cli": "1.6.3", "@tauri-apps/cli": "1.6.3",
"npm-run-all": "4.1.5", "npm-run-all": "4.1.5",
"sass": "1.79.4", "sass": "1.79.4",
"vite": "6.0.3", "vite": "6.2.1",
"vite-plugin-svgr": "4.3.0" "vite-plugin-svgr": "4.3.0"
} }
} }

View File

@@ -11,7 +11,7 @@ edition = "2021"
tauri-build = { version = "1", features = [] } tauri-build = { version = "1", features = [] }
[dependencies] [dependencies]
tauri = { version = "1", features = [ "fs-read-file", "fs-create-dir", "fs-write-file", "fs-exists", "http-request", "fs-read-dir", "window-hide", "window-set-focus", "global-shortcut-all", "window-set-size", "window-set-position", "window-unmaximize", "window-close", "window-maximize", "window-minimize", "window-unminimize", "window-start-dragging", "window-set-decorations", "window-set-always-on-top", "shell-sidecar", "shell-open", "devtools"] } tauri = { version = "1", features = [ "fs-remove-dir", "fs-read-file", "fs-create-dir", "fs-write-file", "fs-exists", "http-request", "fs-read-dir", "window-hide", "window-set-focus", "global-shortcut-all", "window-set-size", "window-set-position", "window-unmaximize", "window-close", "window-maximize", "window-minimize", "window-unminimize", "window-start-dragging", "window-set-decorations", "window-set-always-on-top", "shell-sidecar", "shell-open", "devtools"] }
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }
serde_json = "1" serde_json = "1"
font-kit = "0.14.2" font-kit = "0.14.2"

View File

@@ -1,4 +1,3 @@
import React from "react";
import { initStore } from "./store/store"; import { initStore } from "./store/store";
import { MainContainer } from "./main_container/MainContainer"; import { MainContainer } from "./main_container/MainContainer";

View File

@@ -1,4 +1,5 @@
import { useStore } from "../store/store"; import { useStore } from "../store/store";
import { useEffect } from "react";
export const MainContainer = () => { export const MainContainer = () => {
const { updateCountPluginState, currentCountPluginState } = useStore("useStore_CountPluginState"); const { updateCountPluginState, currentCountPluginState } = useStore("useStore_CountPluginState");
@@ -9,6 +10,9 @@ export const MainContainer = () => {
})); }));
}; };
useEffect(() => {
}, [])
return ( return (
<div> <div>
<p>1 Zipped Dev Plugin Count: {currentCountPluginState?.data?.count}</p> <p>1 Zipped Dev Plugin Count: {currentCountPluginState?.data?.count}</p>

View File

@@ -36,11 +36,12 @@
"exists": true, "exists": true,
"writeFile": true, "writeFile": true,
"createDir": true, "createDir": true,
"removeDir": true,
"scope": ["$RESOURCE/**", "**/src-tauri/target/debug/plugins/**"] "scope": ["$RESOURCE/**", "**/src-tauri/target/debug/plugins/**"]
}, },
"http": { "http": {
"request": true, "request": true,
"scope": ["https://api.github.com/repos/**", "https://github.com/**"] "scope": ["https://api.github.com/repos/**", "https://github.com/**", "https://raw.githubusercontent.com/ShiinaSakamoto/vrct_plugins_list/main/vrct_plugins_list.json"]
}, },
"shell": { "shell": {
"all": false, "all": false,

View File

@@ -1,10 +1,9 @@
import { useEffect } from "react";
import { usePlugins } from "@logics_configs"; import { usePlugins } from "@logics_configs";
// ホスト側でReactやjotaiをグローバル変数として提供
import ReactModule from "react"; import React, { useEffect } from "react";
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
window.React = ReactModule; window.React = React;
} }
export const PluginsController = () => { export const PluginsController = () => {

View File

@@ -1,6 +1,12 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import semver from "semver";
import { usePlugins } from "@logics_configs"; import { usePlugins } from "@logics_configs";
import styles from "./Plugins.module.scss"; import styles from "./Plugins.module.scss";
import { fetch as tauriFetch, ResponseType } from "@tauri-apps/api/http";
const MAIN_VRCT_VERSION = "3.0.5";
// PLUGIN_LIST_URL は中央リポジトリにある、各プラグインの plugin_info.json への URL の配列を保持する JSON の URL
const PLUGIN_LIST_URL = "https://raw.githubusercontent.com/ShiinaSakamoto/vrct_plugins_list/main/vrct_plugins_list.json";
export const Plugins = () => { export const Plugins = () => {
return ( return (
@@ -13,26 +19,45 @@ export const Plugins = () => {
const PluginDownloadContainer = () => { const PluginDownloadContainer = () => {
const [plugin_list, set_plugin_list] = useState([]); const [plugin_list, set_plugin_list] = useState([]);
const [download_progress, set_download_progress] = useState({}); const [download_progress, set_download_progress] = useState({});
const { downloadAndExtractPlugin } = usePlugins(); const { downloadAndExtractPlugin } = usePlugins();
useEffect(() => { useEffect(() => {
// GitHub上のJSONファイルからプラグインリストを取得 async function asyncFetchPluginInfoList() {
const fetchPluginList = async () => {
try { try {
const response = await fetch( // tauriFetch を使用して vrct_plugins_list.json を取得CORS 対策)
"https://raw.githubusercontent.com/ShiinaSakamoto/vrct_plugins_list/main/vrct_plugins_list.json" const response = await tauriFetch(PLUGIN_LIST_URL, {
); method: "GET",
if (!response.ok) { responseType: ResponseType.Json,
throw new Error("Failed to fetch plugin list"); headers: { "Cache-Control": "no-cache" }
});
if (response.status !== 200) {
throw new Error("Failed to fetch plugin list, status: " + response.status);
} }
const data = await response.json(); // 取得される plugin_list.json は各プラグインの plugin_info.json への raw URL の配列とする
set_plugin_list(data); const plugins_data = response.data;
const updated_list = await Promise.all(
plugins_data.map(async (plugin_data) => {
try {
const plugin_manifest = await asyncFetchPluginManifest(plugin_data.url);
return { ...plugin_manifest };
} catch (error) {
console.error("Error fetching manifest for URL:", plugin_data.url, error);
// エラー発生時は、plugin_data.title とエラーメッセージを返す
return {
title: plugin_data.title,
plugin_id: plugin_data.plugin_id || plugin_data.title,
error: error.message,
url: plugin_data.url
};
}
})
);
set_plugin_list(updated_list);
} catch (error) { } catch (error) {
console.error("Error fetching plugin list:", error); console.error("Error fetching plugin info list:", error);
} }
}; }
fetchPluginList(); asyncFetchPluginInfoList();
}, []); }, []);
const handleDownload = async (plugin) => { const handleDownload = async (plugin) => {
@@ -44,14 +69,24 @@ const PluginDownloadContainer = () => {
{plugin_list.map((plugin) => ( {plugin_list.map((plugin) => (
<div key={plugin.plugin_id}> <div key={plugin.plugin_id}>
<h3>{plugin.title}</h3> <h3>{plugin.title}</h3>
<h3>{plugin.plugin_id}</h3> <h4>{plugin.plugin_id}</h4>
<button onClick={() => handleDownload(plugin)}> {plugin.error ? (
Download and Load Plugin <p style={{ color: "red" }}>Error: {plugin.error}</p>
</button> ) : (
{download_progress[plugin.plugin_id] !== undefined && ( <>
<div> <p>Version: {plugin.plugin_version}</p>
Download Progress: {download_progress[plugin.plugin_id].toFixed(0)}% <p>
</div> Compatible: {plugin.min_compatible_version} ~ {plugin.max_compatible_version}
</p>
<button onClick={() => handleDownload(plugin)}>
Download and Load Plugin
</button>
{download_progress[plugin.plugin_id] !== undefined && (
<div>
Download Progress: {download_progress[plugin.plugin_id].toFixed(0)}%
</div>
)}
</>
)} )}
</div> </div>
))} ))}
@@ -59,3 +94,69 @@ const PluginDownloadContainer = () => {
); );
}; };
// GitHub Releases の latest 情報から plugin_info.json を取得するtauriFetch を使用)
async function asyncFetchPluginManifest(manifest_url) {
// リリース情報を取得
const release_response = await tauriFetch(manifest_url, {
method: "GET",
responseType: ResponseType.Json,
headers: {
"Accept": "application/vnd.github+json",
"User-Agent": "VRCTPluginApp"
}
});
if (release_response.status !== 200) {
throw new Error(`Failed to fetch release info from ${manifest_url}`);
}
const release_data = release_response.data;
// assets 内に plugin_info.json があるかチェック
const manifest_asset = release_data.assets.find(asset => asset.name === "plugin_info.json");
if (!manifest_asset) {
throw new Error("plugin_info.json not found in release assets");
}
// plugin_info.json の内容を取得
const manifest_response = await tauriFetch(manifest_asset.browser_download_url, {
method: "GET",
responseType: ResponseType.Json,
headers: {
"Accept": "application/json",
"User-Agent": "VRCTPluginApp",
"Cache-Control": "no-cache"
}
});
if (manifest_response.status !== 200) {
throw new Error(`Failed to fetch plugin_info.json from ${manifest_asset.browser_download_url}`);
}
const plugin_manifest = manifest_response.data;
return {
title: plugin_manifest.title,
plugin_id: plugin_manifest.plugin_id,
plugin_version: plugin_manifest.plugin_version,
min_compatible_version: plugin_manifest.min_compatible_version,
max_compatible_version: plugin_manifest.max_compatible_version,
asset_name: plugin_manifest.asset_name,
url: manifest_url
};
}
export { PluginDownloadContainer };
// // プラグインのマニフェストplugin.json から取得した情報の例)
// const plugin_manifest = {
// compatible_lower_version: "3.0.4",
// compatible_upper_version: "3.0.6",
// // 他の情報...
// };
// const isPluginCompatible = (main_version, lower_version, upper_version) => {
// // lower_version 以上かつ upper_version 以下なら互換性ありと判定
// return semver.gte(main_version, lower_version) && semver.lte(main_version, upper_version);
// };
// if (isPluginCompatible(currentSoftwareVersion.data, plugin_manifest.compatible_lower_version, plugin_manifest.compatible_upper_version)) {
// console.log("プラグインは互換性があります。");
// } else {
// console.error("プラグインは現在の VRCT バージョンと互換性がありません。");
// }

View File

@@ -1,50 +1,41 @@
import { invoke } from '@tauri-apps/api/tauri'; import { invoke } from '@tauri-apps/api/tauri';
import { createAtomWithHook, useStore_LoadedPluginsList } from "@store"; import { createAtomWithHook, useStore_LoadedPluginsList } from "@store";
import { useSoftwareVersion } from "@logics_configs";
import { transform } from "@babel/standalone"; import { transform } from "@babel/standalone";
import { writeFile, createDir, exists, readDir, BaseDirectory, readTextFile } from "@tauri-apps/api/fs"; import { writeFile, createDir, exists, removeDir, readDir, BaseDirectory, readTextFile } from "@tauri-apps/api/fs";
const dev_plugin_mapping = import.meta.glob("/src-tauri/plugins/**/index.jsx", { eager: true }); const dev_plugin_mapping = import.meta.glob("/src-tauri/plugins/**/index.jsx", { eager: true });
import JSZip from "jszip"; import JSZip from "jszip";
import { fetch as tauriFetch, ResponseType } from "@tauri-apps/api/http"; import { fetch as tauriFetch, ResponseType } from "@tauri-apps/api/http";
import React from "react";
// import ReactDOM from "react-dom/client";
// グローバルに公開
window.React = React;
// window.ReactDOM = ReactDOM;
window.React$1 = React;
window.we = React;
export const usePlugins = () => { export const usePlugins = () => {
const { updateLoadedPluginsList } = useStore_LoadedPluginsList(); const { updateLoadedPluginsList } = useStore_LoadedPluginsList();
const { currentSoftwareVersion } = useSoftwareVersion();
const plugin_context = { const plugin_context = {
registerComponent: ({ plugin_id, location, component }) => { registerComponent: ({ plugin_id, location, component }) => {
if (!plugin_id || !location || !component) { if (!plugin_id || !location || !component) {
return console.error("An invalid plugin was detected.", plugin_id, location, component); return console.error("An invalid plugin was detected.", plugin_id, location, component);
} }
updateLoadedPluginsList((prev) => { updateLoadedPluginsList((prev) => {
const filtered = prev.data.filter(item => item.plugin_id !== plugin_id); const filtered = prev.data.filter(item => item.plugin_id !== plugin_id);
return [...filtered, { plugin_id, location, component }]; return [...filtered, { plugin_id, location, component }];
}); });
}, },
createAtomWithHook: (...args) => createAtomWithHook(...args) createAtomWithHook: (...args) => createAtomWithHook(...args)
}; };
const asyncLoadPlugin = async (plugin_relative_path) => { const asyncLoadPlugin = async (plugin_relative_path) => {
plugin_relative_path = "plugins/" + plugin_relative_path; plugin_relative_path = "plugins/" + plugin_relative_path;
try { try {
const plugin_code = await readTextFile(plugin_relative_path, { dir: BaseDirectory.Resource, recursive: true }); const plugin_code = await readTextFile(plugin_relative_path, { dir: BaseDirectory.Resource, recursive: true });
const cleanedCode = removeImportStatements(plugin_code); const cleaned_code = removeImportStatements(plugin_code);
const transpiled_code = transform(cleanedCode, { const transpiled_code = transform(cleaned_code, {
presets: [ presets: [
["env", { modules: false }], ["env", { modules: false }],
"react", "react",
], ],
sourceType: "module" sourceType: "module"
}).code; }).code;
const blob = new Blob([transpiled_code], { type: "text/javascript" }); const blob = new Blob([transpiled_code], { type: "text/javascript" });
const blob_url = URL.createObjectURL(blob); const blob_url = URL.createObjectURL(blob);
const plugin_module = await import(/* @vite-ignore */ blob_url); const plugin_module = await import(/* @vite-ignore */ blob_url);
@@ -60,7 +51,7 @@ export const usePlugins = () => {
const loadAllPlugins = async () => { const loadAllPlugins = async () => {
if (import.meta.env.DEV) { if (import.meta.env.DEV) {
// ホットリロード対応 src-tauri以下にあるpluginsディレクトリから直接読み込み(開発用) // 開発時: ホットリロード対応src-tauri以下pluginsから直接読み込み
Object.entries(dev_plugin_mapping).forEach(([key, plugin_module]) => { Object.entries(dev_plugin_mapping).forEach(([key, plugin_module]) => {
if (plugin_module && plugin_module.init) { if (plugin_module && plugin_module.init) {
plugin_module.init(plugin_context); plugin_module.init(plugin_context);
@@ -70,7 +61,7 @@ export const usePlugins = () => {
try { try {
const plugin_files = await readDir("plugins", { dir: BaseDirectory.Resource, recursive: true }); const plugin_files = await readDir("plugins", { dir: BaseDirectory.Resource, recursive: true });
for (const target_dir of plugin_files) { for (const target_dir of plugin_files) {
const target_path = target_dir.name + "/index.es.js"; const target_path = target_dir.name + "/index.esm.js";
await asyncLoadPlugin(target_path, plugin_context); await asyncLoadPlugin(target_path, plugin_context);
} }
} catch (error) { } catch (error) {
@@ -82,68 +73,63 @@ export const usePlugins = () => {
const downloadAndExtractPlugin = async (plugin) => { const downloadAndExtractPlugin = async (plugin) => {
try { try {
const plugin_zip_url = await fetchLatestPluginZipUrl(plugin); const plugin_zip_url = await fetchLatestPluginZipUrl(plugin);
// Rust コマンド経由で zip をダウンロード // Rust コマンド経由で ZIP をダウンロード
const base64Zip = await invoke("download_zip_asset", { url: plugin_zip_url }); const base64_zip = await invoke("download_zip_asset", { url: plugin_zip_url });
// base64Zip は文字列なので、デコードして Uint8Array に変換 // base64_zip デコードして Uint8Array に変換
const binaryString = atob(base64Zip); const binary_string = atob(base64_zip);
const len = binaryString.length; const len = binary_string.length;
const bytes = new Uint8Array(len); const bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) { for (let i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i); bytes[i] = binary_string.charCodeAt(i);
} }
// JSZip で zip を解凍 // JSZip で ZIP を解凍
const zip = await JSZip.loadAsync(bytes); const zip = await JSZip.loadAsync(bytes);
// const plugin_dir_exists = await exists("plugins", { dir: BaseDirectory.Resource, recursive: true }); // 展開先ディレクトリのパス(例:"plugins/<plugin_id>" とする)
await createDir("plugins/" + plugin.asset_name.replace(".zip", ""), { dir: BaseDirectory.Resource, recursive: true });
// if (!plugin_dir_exists) {
// }
const target_plugin_path = "plugins/" + plugin.asset_name.replace(".zip", ""); const target_plugin_path = "plugins/" + plugin.asset_name.replace(".zip", "");
// 既に存在する場合は削除してから新規作成
if (await exists(target_plugin_path, { dir: BaseDirectory.Resource, recursive: true })) {
await removeDir(target_plugin_path, { dir: BaseDirectory.Resource, recursive: true });
}
await createDir(target_plugin_path, { dir: BaseDirectory.Resource, recursive: true });
const file_promises = [];
const filePromises = []; zip.forEach((relative_path, zip_entry) => {
zip.forEach((relativePath, zipEntry) => {
// .git 以下のファイルはスキップ // .git 以下のファイルはスキップ
if (relativePath.startsWith(".git") || relativePath.includes("/.git/")) { if (relative_path.startsWith(".git") || relative_path.includes("/.git/")) {
return; return;
} }
const file_path = target_plugin_path + "/" + relative_path;
const filePath = target_plugin_path + "/" + relativePath; if (zip_entry.dir) {
file_promises.push(
if (zipEntry.dir) { createDir(file_path, { dir: BaseDirectory.Resource, recursive: true }).catch((err) => {
// フォルダの場合、ディレクトリを作成
filePromises.push(
createDir(filePath, { dir: BaseDirectory.Resource, recursive: true }).catch((err) => {
if (!err.message?.includes("already exists")) { if (!err.message?.includes("already exists")) {
console.error("Failed to create directory:", filePath, err); console.error("Failed to create directory:", file_path, err);
} }
}) })
); );
} else { } else {
// ファイルの場合、ディレクトリを作成してから書き込む const dir_path = file_path.substring(0, file_path.lastIndexOf("/"));
const dirPath = filePath.substring(0, filePath.lastIndexOf("/")); // 親ディレクトリのパス const promise = createDir(dir_path, { dir: BaseDirectory.Resource, recursive: true })
const promise = createDir(dirPath, { dir: BaseDirectory.Resource, recursive: true })
.catch((err) => { .catch((err) => {
if (!err.message?.includes("already exists")) { if (!err.message?.includes("already exists")) {
console.error("Failed to create parent directory:", dirPath, err); console.error("Failed to create parent directory:", dir_path, err);
} }
}) })
.then(() => zipEntry.async("text")) .then(() => zip_entry.async("text"))
.then(async (fileData) => { .then(async (file_data) => {
await writeFile(filePath, fileData, { dir: BaseDirectory.Resource, recursive: true }); await writeFile(file_path, file_data, { dir: BaseDirectory.Resource, recursive: true });
}); });
file_promises.push(promise);
filePromises.push(promise);
} }
}); });
await Promise.all(filePromises); await Promise.all(file_promises);
console.log("Plugin downloaded successfully."); console.log("Plugin downloaded successfully.");
const index_file_relative_path = plugin.asset_name.replace(".zip", "") + "/" + "index.es.js" const index_file_relative_path = plugin.asset_name.replace(".zip", "") + "/index.esm.js";
await asyncLoadPlugin(index_file_relative_path); await asyncLoadPlugin(index_file_relative_path, plugin_context);
console.log("Plugin loaded successfully."); console.log("Plugin loaded successfully.");
} catch (error) { } catch (error) {
@@ -151,8 +137,7 @@ export const usePlugins = () => {
} }
}; };
// JSON内のURLから GitHub API を使って最新リリース情報を取得し、 // GitHub API を使用して、最新リリース情報から asset_name に一致するアセットのブラウザダウンロード URL を返す
// assets 配列から plugin.asset_name に一致するアセットの browser_download_url を返す
const fetchLatestPluginZipUrl = async (plugin) => { const fetchLatestPluginZipUrl = async (plugin) => {
const api_url = plugin.url; const api_url = plugin.url;
const response = await tauriFetch(api_url, { const response = await tauriFetch(api_url, {

View File

@@ -33,6 +33,11 @@ export default defineConfig(async () => ({
resolve: { resolve: {
alias: { alias: {
"react": path.resolve(__dirname, "node_modules/react"),
"react-dom": path.resolve(__dirname, "node_modules/react-dom"),
"@root": path.resolve(__dirname), "@root": path.resolve(__dirname),
"@test_data": path.resolve(__dirname, "./test_data.js"), "@test_data": path.resolve(__dirname, "./test_data.js"),