From 18dfb3c73e8ce09d93621dd7087138213a5a2890 Mon Sep 17 00:00:00 2001 From: Alexander Medvedev Date: Mon, 10 Aug 2026 21:40:43 +0200 Subject: [PATCH] some addtions --- bun.lock | 166 +++++++------- docs/.vitepress/en.ts | 53 +++++ docs/de/about/helping.md | 2 +- docs/en/about/helping.md | 2 +- docs/en/admin/introduction.md | 25 +++ docs/en/admin/migrating-from-bukkit.md | 72 ++++++ docs/en/plugin-dev/c/first-command.md | 90 ++++++++ docs/en/plugin-dev/csharp/first-command.md | 110 +++++++++ docs/en/plugin-dev/go/first-command.md | 103 +++++++++ docs/en/plugin-dev/kotlin/first-command.md | 94 ++++++++ .../migrating-from-bukkit/commands.md | 171 ++++++++++++++ .../migrating-from-bukkit/configuration.md | 69 ++++++ .../migrating-from-bukkit/events.md | 117 ++++++++++ .../plugin-dev/migrating-from-bukkit/index.md | 39 ++++ .../migrating-from-bukkit/inventories.md | 72 ++++++ docs/en/plugin-dev/python/first-command.md | 95 ++++++++ .../plugin-dev/rust/command/first-command.md | 165 ++++++-------- docs/ja_jp/about/helping.md | 2 +- docs/nl/about/helping.md | 2 +- docs/pt/about/helping.md | 2 +- docs/tr_TR/about/helping.md | 2 +- docs/zh_cn/about/helping.md | 2 +- package-lock.json | 212 +++++++++--------- package.json | 2 +- 24 files changed, 1378 insertions(+), 291 deletions(-) create mode 100644 docs/en/admin/introduction.md create mode 100644 docs/en/admin/migrating-from-bukkit.md create mode 100644 docs/en/plugin-dev/c/first-command.md create mode 100644 docs/en/plugin-dev/csharp/first-command.md create mode 100644 docs/en/plugin-dev/go/first-command.md create mode 100644 docs/en/plugin-dev/kotlin/first-command.md create mode 100644 docs/en/plugin-dev/migrating-from-bukkit/commands.md create mode 100644 docs/en/plugin-dev/migrating-from-bukkit/configuration.md create mode 100644 docs/en/plugin-dev/migrating-from-bukkit/events.md create mode 100644 docs/en/plugin-dev/migrating-from-bukkit/index.md create mode 100644 docs/en/plugin-dev/migrating-from-bukkit/inventories.md create mode 100644 docs/en/plugin-dev/python/first-command.md diff --git a/bun.lock b/bun.lock index 8ba7c1e..ce9d7e0 100644 --- a/bun.lock +++ b/bun.lock @@ -9,7 +9,7 @@ "devDependencies": { "@types/bun": "^1.3.14", "vitepress": "^2.0.0-alpha.18", - "vue": "^3.6.0-beta.17", + "vue": "^3.6.0-rc.2", }, }, }, @@ -22,83 +22,71 @@ "@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], - "@docsearch/css": ["@docsearch/css@4.6.3", "", {}, "sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ=="], + "@docsearch/css": ["@docsearch/css@4.7.0", "", {}, "sha512-Sk5xkdRFeE7PeWjG9l4AfTwdvMfr9wHiwNNCpHXT4v4SNyNMKdHGvEILc31BgaVFGDDNbv5u/a73tofRiwbEZw=="], - "@docsearch/js": ["@docsearch/js@4.6.3", "", {}, "sha512-qUIX2b4Apew3tv4F0qhmgShsl/Lfw4m6mqv/5/5dWNxwTcDdLMp2s3YwZ+NMGh3IKCg0pBaXm7Q5VdyU5Rj+cQ=="], + "@docsearch/js": ["@docsearch/js@4.7.0", "", {}, "sha512-x5lCqu1tetgsJFkjQ6VSocbHldsRkGEgwg5N98Vx21sq/V5wcmj4u226PY9k+TEpIgQ772zlYbPLTPicWyGnpA=="], - "@docsearch/sidepanel-js": ["@docsearch/sidepanel-js@4.6.3", "", {}, "sha512-grGSmvXzG0if+mrzdIKykvpIAuEQ9u0sEJ2eLRRCaQfJvsWqh2C2/aY04bIzWvDh7myi5rvl8D+tUNsVrjYQ3A=="], + "@docsearch/sidepanel-js": ["@docsearch/sidepanel-js@4.7.0", "", {}, "sha512-A8r34jCU8kcIk2viECEn2msA28ojUF1BLi/3v5OWWc5G2N3jOuuumBXoeYjfr8dA0UxgFSy5R2bt12dnFJQSyA=="], - "@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="], - - "@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="], - - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="], - - "@iconify-json/simple-icons": ["@iconify-json/simple-icons@1.2.89", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-hRaCY5s2G5oWAIhc4LCGYn6g6RrwLL4zhoLOT+KUO3joVCxVlZKA+839bv/47Nbe9/ZD4UA6dznZ4XPYcI53wA=="], + "@iconify-json/simple-icons": ["@iconify-json/simple-icons@1.2.93", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-/XhANjfGYOuqvSR3TmUnkQkINvQ4GVjVuukvymRbxtVFBvIq/yiXJqCDycKcQPT401OYT9H2vIY6ihAlz1QIAw=="], "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="], + "@oxc-project/types": ["@oxc-project/types@0.143.0", "", {}, "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA=="], - "@oxc-project/types": ["@oxc-project/types@0.139.0", "", {}, "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.3", "", { "os": "android", "cpu": "arm64" }, "sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw=="], - "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.1.5", "", { "os": "android", "cpu": "arm64" }, "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ=="], + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA=="], - "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.1.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw=="], + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA=="], - "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.1.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g=="], + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg=="], - "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.1.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA=="], + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.3", "", { "os": "linux", "cpu": "arm" }, "sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw=="], - "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.1.5", "", { "os": "linux", "cpu": "arm" }, "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw=="], + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw=="], - "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q=="], + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q=="], - "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA=="], + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w=="], - "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.1.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg=="], + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg=="], - "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.1.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA=="], + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w=="], - "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ=="], + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A=="], - "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg=="], + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.3", "", { "os": "none", "cpu": "arm64" }, "sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug=="], - "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.1.5", "", { "os": "none", "cpu": "arm64" }, "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw=="], + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw=="], - "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.1.5", "", { "dependencies": { "@emnapi/core": "1.11.1", "@emnapi/runtime": "1.11.1", "@napi-rs/wasm-runtime": "^1.1.6" }, "cpu": "none" }, "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA=="], - - "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.1.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw=="], - - "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.1.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA=="], + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.3", "", { "os": "win32", "cpu": "x64" }, "sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg=="], "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], - "@shikijs/core": ["@shikijs/core@4.3.1", "", { "dependencies": { "@shikijs/primitive": "4.3.1", "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA=="], + "@shikijs/core": ["@shikijs/core@4.4.3", "", { "dependencies": { "@shikijs/primitive": "4.4.3", "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5", "hast-util-to-html": "^9.0.5" } }, "sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg=="], - "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" } }, "sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ=="], + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" } }, "sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ=="], - "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg=="], + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w=="], - "@shikijs/langs": ["@shikijs/langs@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1" } }, "sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ=="], + "@shikijs/langs": ["@shikijs/langs@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3" } }, "sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A=="], - "@shikijs/primitive": ["@shikijs/primitive@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A=="], + "@shikijs/primitive": ["@shikijs/primitive@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ=="], - "@shikijs/themes": ["@shikijs/themes@4.3.1", "", { "dependencies": { "@shikijs/types": "4.3.1" } }, "sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA=="], + "@shikijs/themes": ["@shikijs/themes@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3" } }, "sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw=="], - "@shikijs/transformers": ["@shikijs/transformers@4.3.1", "", { "dependencies": { "@shikijs/core": "4.3.1", "@shikijs/types": "4.3.1" } }, "sha512-z6ir0bGDgWcF2FduktEfPgIsdOtIlDiLAjFBgBzE42Q9xHbkkIXZtORHzlLVB71iZP9elEcqKg6keajvOUwE2A=="], + "@shikijs/transformers": ["@shikijs/transformers@4.4.3", "", { "dependencies": { "@shikijs/core": "4.4.3", "@shikijs/types": "4.4.3" } }, "sha512-oJSARV6NaWd+rnNJbtnpAdj3Zg0ZVyzsnMgb3vi3HA+35y8lBWUCpOnWsmyiXZIikY+x1BDqrQUgmxfzWh7Jvw=="], - "@shikijs/types": ["@shikijs/types@4.3.1", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g=="], + "@shikijs/types": ["@shikijs/types@4.4.3", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g=="], "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], - "@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], - "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], - "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + "@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], "@types/linkify-it": ["@types/linkify-it@5.0.0", "", {}, "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q=="], @@ -116,7 +104,7 @@ "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], - "@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.7", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vue": "^3.2.25" } }, "sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg=="], + "@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.8", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vue": "^3.2.25" } }, "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew=="], "@vue/compiler-core": ["@vue/compiler-core@3.6.0-rc.2", "", { "dependencies": { "@babel/parser": "^7.29.7", "@vue/shared": "3.6.0-rc.2", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-Xx79h4EpJktQBShelXNKaRuvn9N6YsYL1j+RXdvPKzI+8tohYziBJbxOFGAkdcOKBwKc2SIWV4DOlTAMhE96yQ=="], @@ -128,11 +116,11 @@ "@vue/compiler-vapor": ["@vue/compiler-vapor@3.6.0-rc.2", "", { "dependencies": { "@babel/parser": "^7.29.7", "@vue/compiler-dom": "3.6.0-rc.2", "@vue/shared": "3.6.0-rc.2", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-QbrA01pbj9xemF2McgBopyaOwj3kQGN0W1GW5EdFXORIT4fQQJpmUOj40h99S3bk09gLs5bFTRS4YE+Oyw/F9w=="], - "@vue/devtools-api": ["@vue/devtools-api@8.1.5", "", { "dependencies": { "@vue/devtools-kit": "^8.1.5" } }, "sha512-YJipMVAKe5wT5CWf5kTYCaNV7NMNjFVxJkIkJaJ4W/nCxEBzlZzrOsYKeCymdCrFZmBS/+wTWFoUs3Jf/Q6XSQ=="], + "@vue/devtools-api": ["@vue/devtools-api@8.2.1", "", { "dependencies": { "@vue/devtools-kit": "^8.2.1" } }, "sha512-6u4vXBlIBAC1wMplIZgpyPn7uh/s4Bf6F5bMzvLv+EdJ0aHs/+4B7Ygv864EStQSjRbsRzTko/kUG1A1IejQ3A=="], - "@vue/devtools-kit": ["@vue/devtools-kit@8.1.5", "", { "dependencies": { "@vue/devtools-shared": "^8.1.5", "birpc": "^2.6.1", "hookable": "^5.5.3", "perfect-debounce": "^2.0.0" } }, "sha512-FcSAxsi4eWuXLCB7Rv9lj0aIVHHPNVQ2BazGf4RJTc2JCqb4BQg0hk87ZFhminCfl+mD5OUI0rX2cgyu4kJOGA=="], + "@vue/devtools-kit": ["@vue/devtools-kit@8.2.1", "", { "dependencies": { "@vue/devtools-shared": "^8.2.1", "birpc": "^2.6.1", "hookable": "^5.5.3", "perfect-debounce": "^2.0.0" } }, "sha512-FIGIuq3AWReEpbAHY/cRGeHDfI0qOb8OCQ3YjbEAX04uaxIDbGc9rhkbVcG7rnfHPXE3RsU5KrWOu9V/okd8AQ=="], - "@vue/devtools-shared": ["@vue/devtools-shared@8.1.5", "", {}, "sha512-mhT4zcPFhF+Xk1O4BfhhrbXzpmfqY03fS6xGpcllbQG7lDjhQf8pQHcTIhqQIYx1hfwtHmk/6jM96ele0UxPqQ=="], + "@vue/devtools-shared": ["@vue/devtools-shared@8.2.1", "", {}, "sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g=="], "@vue/reactivity": ["@vue/reactivity@3.6.0-rc.2", "", { "dependencies": { "@vue/shared": "3.6.0-rc.2" } }, "sha512-B01EoSTcaVQiJwZDoSoeKYClVgj60BHN43oHEcxXhPVLdxsXI0SOiQuskUskQDZn2ma08llICKJohL60o+UamA=="], @@ -144,15 +132,15 @@ "@vue/server-renderer": ["@vue/server-renderer@3.6.0-rc.2", "", { "dependencies": { "@vue/compiler-ssr": "3.6.0-rc.2", "@vue/runtime-dom": "3.6.0-rc.2", "@vue/shared": "3.6.0-rc.2" } }, "sha512-TIsqoYljs6b0wfoCDhv4EeU3Du2a8gTadkaTGMjIYLTLlO4p8r4VdDqfNp/ZMAm87bW4ST1naBMRe+bXQBpAeQ=="], - "@vue/shared": ["@vue/shared@3.5.39", "", {}, "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA=="], + "@vue/shared": ["@vue/shared@3.5.41", "", {}, "sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA=="], - "@vueuse/core": ["@vueuse/core@14.3.0", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "14.3.0", "@vueuse/shared": "14.3.0" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw=="], + "@vueuse/core": ["@vueuse/core@14.4.0", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "14.4.0", "@vueuse/shared": "14.4.0" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-X4WHz1HlCzCBoYXesUkifzzWBAcZgXG8Fi5iNPQg/epdzOB3gu8Fawj3hvuwYR1nGcXGnvxwYYcUC/71++svtQ=="], - "@vueuse/integrations": ["@vueuse/integrations@14.3.0", "", { "dependencies": { "@vueuse/core": "14.3.0", "@vueuse/shared": "14.3.0" }, "peerDependencies": { "async-validator": "^4", "axios": "^1", "change-case": "^5", "drauu": "^0.4", "focus-trap": "^7 || ^8", "fuse.js": "^7", "idb-keyval": "^6", "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", "universal-cookie": "^7 || ^8", "vue": "^3.5.0" }, "optionalPeers": ["async-validator", "axios", "change-case", "drauu", "focus-trap", "fuse.js", "idb-keyval", "jwt-decode", "nprogress", "qrcode", "sortablejs", "universal-cookie"] }, "sha512-76I5FT2ESvCmCaSwapI+a/u/CFtNXmzl9f9lNp1hRtx8vKB8hfiokJr8IvQqcQG5ckGXElyXK516b54ozV3MvA=="], + "@vueuse/integrations": ["@vueuse/integrations@14.4.0", "", { "dependencies": { "@vueuse/core": "14.4.0", "@vueuse/shared": "14.4.0" }, "peerDependencies": { "async-validator": "^4", "axios": "^1", "change-case": "^5", "drauu": "^0.4", "focus-trap": "^7 || ^8", "fuse.js": "^7", "idb-keyval": "^6", "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", "universal-cookie": "^7 || ^8", "vue": "^3.5.0" }, "optionalPeers": ["async-validator", "axios", "change-case", "drauu", "focus-trap", "fuse.js", "idb-keyval", "jwt-decode", "nprogress", "qrcode", "sortablejs", "universal-cookie"] }, "sha512-oJz9qTgczvA7L1nXQFRU7h8tQbOCoiceqvMMhT9XYMyOGTqLJ2rEa09PON+nD2t48sZUfeOmg4eaWJXV4sZb/w=="], - "@vueuse/metadata": ["@vueuse/metadata@14.3.0", "", {}, "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw=="], + "@vueuse/metadata": ["@vueuse/metadata@14.4.0", "", {}, "sha512-swx/255R6JyHZFJhx845iz5CRWDZdCfvkZOpACWc5+c5WHcG24mv8gUT1WIdFQaHt6dq79rvILd9QnCWiyVm9g=="], - "@vueuse/shared": ["@vueuse/shared@14.3.0", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg=="], + "@vueuse/shared": ["@vueuse/shared@14.4.0", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-JRgY90Sz8DDtPMsaDflvPMp9xYk69JZAmbuDvAquUVXKr2gEjqtzGNTTthLfckH0BzBqvnu31gb4a8TGLRe79g=="], "birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="], @@ -192,29 +180,29 @@ "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], - "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + "lightningcss": ["lightningcss@1.33.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", "lightningcss-freebsd-x64": "1.33.0", "lightningcss-linux-arm-gnueabihf": "1.33.0", "lightningcss-linux-arm64-gnu": "1.33.0", "lightningcss-linux-arm64-musl": "1.33.0", "lightningcss-linux-x64-gnu": "1.33.0", "lightningcss-linux-x64-musl": "1.33.0", "lightningcss-win32-arm64-msvc": "1.33.0", "lightningcss-win32-x64-msvc": "1.33.0" } }, "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA=="], - "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.33.0", "", { "os": "android", "cpu": "arm64" }, "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg=="], - "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.33.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg=="], - "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.33.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ=="], - "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.33.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg=="], - "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.33.0", "", { "os": "linux", "cpu": "arm" }, "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ=="], - "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg=="], - "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ=="], - "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg=="], - "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw=="], - "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.33.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA=="], - "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.33.0", "", { "os": "win32", "cpu": "x64" }, "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA=="], "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], @@ -234,7 +222,7 @@ "minisearch": ["minisearch@7.2.0", "", {}, "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg=="], - "nanoid": ["nanoid@3.3.15", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA=="], + "nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="], "oniguruma-parser": ["oniguruma-parser@0.12.2", "", {}, "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw=="], @@ -248,7 +236,7 @@ "picomatch": ["picomatch@4.0.5", "", {}, "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="], - "postcss": ["postcss@8.5.16", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg=="], + "postcss": ["postcss@8.5.26", "", { "dependencies": { "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ=="], "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], @@ -258,9 +246,9 @@ "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], - "rolldown": ["rolldown@1.1.5", "", { "dependencies": { "@oxc-project/types": "=0.139.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.1.5", "@rolldown/binding-darwin-arm64": "1.1.5", "@rolldown/binding-darwin-x64": "1.1.5", "@rolldown/binding-freebsd-x64": "1.1.5", "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", "@rolldown/binding-linux-arm64-gnu": "1.1.5", "@rolldown/binding-linux-arm64-musl": "1.1.5", "@rolldown/binding-linux-ppc64-gnu": "1.1.5", "@rolldown/binding-linux-s390x-gnu": "1.1.5", "@rolldown/binding-linux-x64-gnu": "1.1.5", "@rolldown/binding-linux-x64-musl": "1.1.5", "@rolldown/binding-openharmony-arm64": "1.1.5", "@rolldown/binding-wasm32-wasi": "1.1.5", "@rolldown/binding-win32-arm64-msvc": "1.1.5", "@rolldown/binding-win32-x64-msvc": "1.1.5" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA=="], + "rolldown": ["rolldown@1.2.3", "", { "dependencies": { "@oxc-project/types": "=0.143.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.2.3", "@rolldown/binding-darwin-arm64": "1.2.3", "@rolldown/binding-darwin-x64": "1.2.3", "@rolldown/binding-freebsd-x64": "1.2.3", "@rolldown/binding-linux-arm-gnueabihf": "1.2.3", "@rolldown/binding-linux-arm64-gnu": "1.2.3", "@rolldown/binding-linux-arm64-musl": "1.2.3", "@rolldown/binding-linux-ppc64-gnu": "1.2.3", "@rolldown/binding-linux-s390x-gnu": "1.2.3", "@rolldown/binding-linux-x64-gnu": "1.2.3", "@rolldown/binding-linux-x64-musl": "1.2.3", "@rolldown/binding-openharmony-arm64": "1.2.3", "@rolldown/binding-win32-arm64-msvc": "1.2.3", "@rolldown/binding-win32-x64-msvc": "1.2.3" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A=="], - "shiki": ["shiki@4.3.1", "", { "dependencies": { "@shikijs/core": "4.3.1", "@shikijs/engine-javascript": "4.3.1", "@shikijs/engine-oniguruma": "4.3.1", "@shikijs/langs": "4.3.1", "@shikijs/themes": "4.3.1", "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw=="], + "shiki": ["shiki@4.4.3", "", { "dependencies": { "@shikijs/core": "4.4.3", "@shikijs/engine-javascript": "4.4.3", "@shikijs/engine-oniguruma": "4.4.3", "@shikijs/langs": "4.4.3", "@shikijs/themes": "4.4.3", "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -274,8 +262,6 @@ "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], "unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], @@ -292,9 +278,9 @@ "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], - "vite": ["vite@8.1.4", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.5", "postcss": "^8.5.16", "rolldown": "~1.1.4", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.3.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ=="], + "vite": ["vite@8.2.1", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", "postcss": "^8.5.25", "rolldown": "~1.2.1", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.4.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw=="], - "vitepress": ["vitepress@2.0.0-alpha.18", "", { "dependencies": { "@docsearch/css": "^4.6.3", "@docsearch/js": "^4.6.3", "@docsearch/sidepanel-js": "^4.6.3", "@iconify-json/simple-icons": "^1.2.87", "@shikijs/core": "^4.3.0", "@shikijs/transformers": "^4.3.0", "@shikijs/types": "^4.3.0", "@types/markdown-it": "^14.1.2", "@vitejs/plugin-vue": "^6.0.7", "@vue/devtools-api": "^8.1.4", "@vue/shared": "^3.5.39", "@vueuse/core": "^14.3.0", "@vueuse/integrations": "^14.3.0", "focus-trap": "^8.2.2", "mark.js": "8.11.1", "minisearch": "^7.2.0", "shiki": "^4.3.0", "vite": "^8.1.3", "vue": "^3.5.39" }, "peerDependencies": { "markdown-it-mathjax3": "^4", "postcss": "^8" }, "optionalPeers": ["markdown-it-mathjax3", "postcss"], "bin": { "vitepress": "bin/vitepress.js" } }, "sha512-Lk1G2/QqSf+MwNLICl9fmzWOtoCEwjZoWgaQy41QvWTfcGpLE9XwJDbcCyES/9rj6R2g1zFqFvLVkYKLLDALFw=="], + "vitepress": ["vitepress@2.0.0-alpha.19", "", { "dependencies": { "@docsearch/css": "^4.7.0", "@docsearch/js": "^4.7.0", "@docsearch/sidepanel-js": "^4.7.0", "@iconify-json/simple-icons": "^1.2.92", "@shikijs/core": "^4.4.1", "@shikijs/transformers": "^4.4.1", "@shikijs/types": "^4.4.1", "@types/markdown-it": "^14.1.2", "@vitejs/plugin-vue": "^6.0.8", "@vue/devtools-api": "^8.2.1", "@vue/shared": "^3.5.40", "@vueuse/core": "^14.4.0", "@vueuse/integrations": "^14.4.0", "focus-trap": "^8.2.2", "mark.js": "8.11.1", "minisearch": "^7.2.0", "shiki": "^4.4.1", "vite": "^8.2.0", "vue": "^3.5.40" }, "peerDependencies": { "markdown-it-mathjax3": "^4", "postcss": "^8" }, "optionalPeers": ["markdown-it-mathjax3", "postcss"], "bin": { "vitepress": "bin/vitepress.js" } }, "sha512-WnBsb0Bwr43kXKyiis+lld/7ri3hnMbthS8N3hpFtjjwsdLO4IRmiAE08D7aud4q6oMDf9uwRowxzNqRFe/amw=="], "vue": ["vue@3.6.0-rc.2", "", { "dependencies": { "@vue/compiler-dom": "3.6.0-rc.2", "@vue/compiler-sfc": "3.6.0-rc.2", "@vue/runtime-dom": "3.6.0-rc.2", "@vue/runtime-vapor": "3.6.0-rc.2", "@vue/server-renderer": "3.6.0-rc.2", "@vue/shared": "3.6.0-rc.2" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-pBgoISqETcufJ1e92vVW2/D5MEbCm2XHlC/5dq3hWq8s17tx9v5BEdYv4hojJ0yEEDidYxUL7itS+vV32wfZrw=="], @@ -322,30 +308,48 @@ "@vue/server-renderer/@vue/shared": ["@vue/shared@3.6.0-rc.2", "", {}, "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ=="], - "vitepress/vue": ["vue@3.5.39", "", { "dependencies": { "@vue/compiler-dom": "3.5.39", "@vue/compiler-sfc": "3.5.39", "@vue/runtime-dom": "3.5.39", "@vue/server-renderer": "3.5.39", "@vue/shared": "3.5.39" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA=="], + "hast-util-to-html/@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + + "hast-util-whitespace/@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + + "mdast-util-to-hast/@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + + "vitepress/vue": ["vue@3.5.41", "", { "dependencies": { "@vue/compiler-dom": "3.5.41", "@vue/compiler-sfc": "3.5.41", "@vue/runtime-dom": "3.5.41", "@vue/server-renderer": "3.5.41", "@vue/shared": "3.5.41" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg=="], "vue/@vue/shared": ["@vue/shared@3.6.0-rc.2", "", {}, "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ=="], "@vue/compiler-sfc/postcss/nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="], - "vitepress/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.39", "", { "dependencies": { "@vue/compiler-core": "3.5.39", "@vue/shared": "3.5.39" } }, "sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg=="], + "vitepress/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.41", "", { "dependencies": { "@vue/compiler-core": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw=="], - "vitepress/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.39", "", { "dependencies": { "@babel/parser": "^7.29.7", "@vue/compiler-core": "3.5.39", "@vue/compiler-dom": "3.5.39", "@vue/compiler-ssr": "3.5.39", "@vue/shared": "3.5.39", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.15", "source-map-js": "^1.2.1" } }, "sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg=="], + "vitepress/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.41", "", { "dependencies": { "@babel/parser": "^7.29.8", "@vue/compiler-core": "3.5.41", "@vue/compiler-dom": "3.5.41", "@vue/compiler-ssr": "3.5.41", "@vue/shared": "3.5.41", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.19", "source-map-js": "^1.2.1" } }, "sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ=="], - "vitepress/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.39", "", { "dependencies": { "@vue/reactivity": "3.5.39", "@vue/runtime-core": "3.5.39", "@vue/shared": "3.5.39", "csstype": "^3.2.3" } }, "sha512-7Y6aAGboKcXAZ3ECuUy7RrS5yy2r47dhTp2SKaJmYxjopImaVFaNa5Ne66NwGovsrxVAl5S5rwc7m22UG7Lmww=="], + "vitepress/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.41", "", { "dependencies": { "@vue/reactivity": "3.5.41", "@vue/runtime-core": "3.5.41", "@vue/shared": "3.5.41", "csstype": "^3.2.3" } }, "sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw=="], - "vitepress/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.39", "", { "dependencies": { "@vue/compiler-ssr": "3.5.39", "@vue/shared": "3.5.39" }, "peerDependencies": { "vue": "3.5.39" } }, "sha512-yZSakiAGw85rZfG7UM8akMnIF+FmeiNk47uvHf2nVBBSe+dIKUhZuZq9+XgJhbV3nS5Z4ALH23/MpXofW+mbcw=="], + "vitepress/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.41", "", { "dependencies": { "@vue/compiler-ssr": "3.5.41", "@vue/runtime-dom": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ=="], - "vitepress/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.39", "", { "dependencies": { "@babel/parser": "^7.29.7", "@vue/shared": "3.5.39", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw=="], + "vitepress/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.41", "", { "dependencies": { "@babel/parser": "^7.29.8", "@vue/shared": "3.5.41", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg=="], - "vitepress/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.39", "", { "dependencies": { "@babel/parser": "^7.29.7", "@vue/shared": "3.5.39", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw=="], + "vitepress/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": "./bin/babel-parser.js" }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="], - "vitepress/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.39", "", { "dependencies": { "@vue/compiler-dom": "3.5.39", "@vue/shared": "3.5.39" } }, "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw=="], + "vitepress/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.41", "", { "dependencies": { "@babel/parser": "^7.29.8", "@vue/shared": "3.5.41", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg=="], - "vitepress/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.39", "", { "dependencies": { "@vue/shared": "3.5.39" } }, "sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog=="], + "vitepress/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.41", "", { "dependencies": { "@vue/compiler-dom": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A=="], - "vitepress/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.39", "", { "dependencies": { "@vue/reactivity": "3.5.39", "@vue/shared": "3.5.39" } }, "sha512-9GLtNyRvPAUMbX+7ono0RC2j0guo2LXVi8LvcmAooImACUKm0oFf0jjwbX8/H0AE/t1nxhAkn8RSl9PMCzzxZw=="], + "vitepress/vue/@vue/compiler-sfc/postcss": ["postcss@8.5.22", "", { "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ=="], - "vitepress/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.39", "", { "dependencies": { "@vue/compiler-dom": "3.5.39", "@vue/shared": "3.5.39" } }, "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw=="], + "vitepress/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.41", "", { "dependencies": { "@vue/shared": "3.5.41" } }, "sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA=="], + + "vitepress/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.41", "", { "dependencies": { "@vue/reactivity": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg=="], + + "vitepress/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.41", "", { "dependencies": { "@vue/compiler-dom": "3.5.41", "@vue/shared": "3.5.41" } }, "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A=="], + + "vitepress/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": "./bin/babel-parser.js" }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="], + + "vitepress/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="], + + "vitepress/vue/@vue/compiler-sfc/postcss/nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="], + + "vitepress/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="], } } diff --git a/docs/.vitepress/en.ts b/docs/.vitepress/en.ts index d4ea004..5571615 100644 --- a/docs/.vitepress/en.ts +++ b/docs/.vitepress/en.ts @@ -23,6 +23,13 @@ export const en = defineConfig({ { text: "Helping & Donating", link: "/about/helping" }, ], }, + { + text: "Administration", + items: [ + { text: "Overview", link: "/admin/introduction" }, + { text: "Migrating from Bukkit", link: "/admin/migrating-from-bukkit" }, + ], + }, { text: "Configuration", items: [ @@ -70,6 +77,32 @@ export const en = defineConfig({ text: "Introduction", link: "/plugin-dev/introduction", }, + { + text: "Migrating from Bukkit", + collapsed: false, + items: [ + { + text: "Overview", + link: "/plugin-dev/migrating-from-bukkit/", + }, + { + text: "Commands", + link: "/plugin-dev/migrating-from-bukkit/commands", + }, + { + text: "Events", + link: "/plugin-dev/migrating-from-bukkit/events", + }, + { + text: "Inventories & GUIs", + link: "/plugin-dev/migrating-from-bukkit/inventories", + }, + { + text: "Configuration & Data", + link: "/plugin-dev/migrating-from-bukkit/configuration", + }, + ], + }, { text: "Rust", collapsed: false, @@ -113,6 +146,10 @@ export const en = defineConfig({ text: "Basic Logic", link: "/plugin-dev/python/basic-logic", }, + { + text: "First Command", + link: "/plugin-dev/python/first-command", + }, { text: "Events", link: "/plugin-dev/python/events", @@ -127,6 +164,10 @@ export const en = defineConfig({ text: "Quick Start", link: "/plugin-dev/csharp/quick-start", }, + { + text: "First Command", + link: "/plugin-dev/csharp/first-command", + }, ], }, { @@ -137,6 +178,10 @@ export const en = defineConfig({ text: "Quick Start", link: "/plugin-dev/c/quick-start", }, + { + text: "First Command", + link: "/plugin-dev/c/first-command", + }, ], }, { @@ -151,6 +196,10 @@ export const en = defineConfig({ text: "Basic Logic", link: "/plugin-dev/go/basic-logic", }, + { + text: "First Command", + link: "/plugin-dev/go/first-command", + }, ], }, { @@ -161,6 +210,10 @@ export const en = defineConfig({ text: "Quick Start", link: "/plugin-dev/kotlin/quick-start", }, + { + text: "First Command", + link: "/plugin-dev/kotlin/first-command", + }, ], }, ], diff --git a/docs/de/about/helping.md b/docs/de/about/helping.md index 81b4d4a..dc0d25e 100644 --- a/docs/de/about/helping.md +++ b/docs/de/about/helping.md @@ -28,7 +28,7 @@ Für Code-Beiträge lesen Sie bitte unseren [Beitragsleitfaden](/developer/contr ## 3. Finanzielle Unterstützung & Spenden Die Pflege einer hochleistungsfähigen Minecraft-Server-Software erfordert viel Mühe und Ressourcen. -- **Sponsoring & Spenden**: Sehen Sie sich unsere Finanzierungsoptionen auf [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) oder auf unserer offiziellen Website [pumpkinmc.org](https://pumpkinmc.org/) an. +- **Spenden**: Sehen Sie sich unsere Finanzierungsoptionen auf unserer offiziellen Spenden-Website [pumpkinmc.org/donate](https://pumpkinmc.org/donate) an. - **Server-Infrastruktur**: Sie können auch durch die Bereitstellung von Testumgebungen helfen. --- diff --git a/docs/en/about/helping.md b/docs/en/about/helping.md index 48c0092..518f2aa 100644 --- a/docs/en/about/helping.md +++ b/docs/en/about/helping.md @@ -33,7 +33,7 @@ For code contributions, please read our dedicated [Contributing Guide](/develope Maintaining and advancing high-performance Minecraft server software requires dedicated effort and resources. If you would like to financially back the development of Pumpkin: -- **Sponsorship & Donations**: Check out our funding options on [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) or links on our official site [pumpkinmc.org](https://pumpkinmc.org/). +- **Donations**: Check out our funding options on our official donation page [pumpkinmc.org/donate](https://pumpkinmc.org/donate). - **Server Infrastructure**: You can also assist by providing benchmark test environments, hardware hosting, or testing infrastructure. --- diff --git a/docs/en/admin/introduction.md b/docs/en/admin/introduction.md new file mode 100644 index 0000000..69d7414 --- /dev/null +++ b/docs/en/admin/introduction.md @@ -0,0 +1,25 @@ +# Administration Overview + +Welcome to the **Admin Section** for Pumpkin server administrators. Pumpkin is a high-performance, multithreaded Minecraft server written in Rust, engineered to support massive player counts with minimal resource consumption. + +--- + +## Key Features for Server Admins + +- **Extreme Multithreading**: Designed from the ground up for modern multi-core processors. +- **WASM Plugin Architecture**: Secure, sandboxed plugin execution in Rust, Python, Kotlin, C#, Go, or C without JVM overhead. +- **Native Cross-Proxy Support**: Out-of-the-box support for Velocity, BungeeCord, and modern proxy forwarding. +- **TOML-Based Configuration**: Clean, human-readable configuration files located in `pumpkin.toml` and feature-specific TOML configs. + +--- + +## Admin Guides & Topics + +Explore the following administration guides: + +- [Migrating from Bukkit / Paper / Spigot Server](./migrating-from-bukkit) — Key differences in server administration, plugins, world storage, and performance. +- [Server Configuration](../config/introduction) — Detailed breakdown of `pumpkin.toml` settings. +- [Proxy Setup](../config/proxy) — Configuring BungeeCord & Velocity player forwarding. +- [Commands & Permissions](../config/commands) — Managing in-game operator commands and permissions. +- [Authentication](../config/authentication) — Online-mode vs offline-mode and Yggdrasil settings. +- [Troubleshooting & Common Issues](../troubleshooting/common_issues) — Resolving port binding, memory, and plugin loading issues. diff --git a/docs/en/admin/migrating-from-bukkit.md b/docs/en/admin/migrating-from-bukkit.md new file mode 100644 index 0000000..f799566 --- /dev/null +++ b/docs/en/admin/migrating-from-bukkit.md @@ -0,0 +1,72 @@ +# Migrating a Server from Bukkit / Spigot / Paper to Pumpkin + +Switching your server environment from Paper/Spigot to Pumpkin brings massive performance gains, multithreaded tick execution, and reduced RAM usage. However, because Pumpkin is built in Rust rather than running on the Java Virtual Machine, there are fundamental architectural differences that server administrators need to know. + +--- + +## 1. Major Server Differences At-a-Glance + +| Feature / Aspect | Bukkit / Spigot / Paper | Pumpkin | +| :--- | :--- | :--- | +| **Runtime Environment** | Java Virtual Machine (JVM) | Native Binary (Rust) | +| **Main Thread Architecture** | Single-threaded tick loop with asynchronous offloading | Multithreaded tick execution across CPU cores | +| **Plugin Engine** | `.jar` files compiled for Java / Bukkit API | `.wasm` WebAssembly components running in sandboxed WASM runtime | +| **Plugin Languages** | Java / Kotlin / Scala | Rust, Python, Kotlin, C#, Go, C | +| **Configuration Format** | `server.properties` & `paper.yml` / `spigot.yml` | `pumpkin.toml` & structured TOML configuration files | +| **Memory Footprint** | High baseline (JVM garbage collection overhead) | Micro baseline (Native memory management) | + +--- + +## 2. Plugins & Extensions + +- **Java `.jar` Plugins Cannot Run Directly**: Standard Bukkit/Spigot `.jar` plugins are bytecode compiled for the Java JVM and Bukkit API. They cannot be dropped into Pumpkin's `plugins/` directory. +- **WebAssembly Plugins**: Pumpkin uses WebAssembly (`.wasm`) for plugins. This sandboxes plugins for memory safety and security while allowing developers to write plugins in virtually any language. +- **Porting Plugins**: If you maintain custom internal plugins, consult our [Developer Migration Guide](../plugin-dev/migrating-from-bukkit/index) to convert Java logic to Pumpkin plugin bindings. + +--- + +## 3. Configuration & Properties + +Instead of `server.properties` and YAML files, Pumpkin consolidates server configuration into clean TOML files: + +| Paper / Spigot Setting | Pumpkin `pumpkin.toml` Equivalent | +| :--- | :--- | +| `server-port=25565` | `server_address = "0.0.0.0:25565"` | +| `motd=...` | `motd = "A Pumpkin Server"` | +| `max-players=20` | `max_players = 20` | +| `online-mode=true` | `online_mode = true` | +| `view-distance=10` | `view_distance = 10` | +| `simulation-distance=8` | `simulation_distance = 8` | + +--- + +## 4. World & Data Storage + +- **Anvil Format Compatibility**: Pumpkin reads standard Minecraft chunk data format. +- **Dimension Directories**: Make sure `world`, `world_nether`, and `world_the_end` directory structures are mapped appropriately when copying existing worlds from Paper/Spigot server installations. + +--- + +## 5. Performance Tuning & Startup + +Unlike Paper servers which require complex JVM flags (`-XX:+UseG1GC`, `-Xms`, `-Xmx`), Pumpkin runs as a direct native binary: + +```bash +# Starting Pumpkin Server on Linux/macOS +./pumpkin + +# Or running via Docker +docker run -p 25565:25565 -v ./data:/data pumpkinmc/pumpkin:latest +``` + +No garbage collection tuning or JVM heap allocation tuning is needed. + +--- + +## Admin Checklist for Migration + +1. [ ] Back up your existing Paper/Spigot server data and world files. +2. [ ] Map `server.properties` values into Pumpkin's `pumpkin.toml`. +3. [ ] Check if replacement WebAssembly plugins (`.wasm`) are available for your essential server utilities. +4. [ ] Configure Proxy support (`Velocity` / `BungeeCord`) if running behind a server network. +5. [ ] Launch `./pumpkin` and verify player connectivity and performance logs. diff --git a/docs/en/plugin-dev/c/first-command.md b/docs/en/plugin-dev/c/first-command.md new file mode 100644 index 0000000..3ac3ebd --- /dev/null +++ b/docs/en/plugin-dev/c/first-command.md @@ -0,0 +1,90 @@ +# Creating Your First Command + +Writing commands in C for Pumpkin is low-overhead, fast, and uses C WIT bindings. + +--- + +## 1. Quick Example + +Here is a complete C plugin file (`main.c`) that registers a `/hello` command with permission checks and sends a response back to the player. + +```c [main.c] +#include +#include "pumpkin.h" + +void plugin_on_load(pumpkin_context_t ctx) { + // 1. Register permission node + pumpkin_permission_t perm = { + .node = "my_c_plugin:hello", + .description = "Allows executing the /hello command", + .default_access = PERMISSION_DEFAULT_ALLOW + }; + pumpkin_register_permission(ctx, &perm); + + // 2. Build and register command tree + const char* names[] = {"hello", "hi"}; + pumpkin_command_t cmd = pumpkin_command_new(names, 2, "Greets the player"); + + pumpkin_register_command(ctx, cmd, "my_c_plugin:hello"); +} + +int32_t plugin_handle_command(uint32_t command_id, pumpkin_sender_t sender, pumpkin_server_t server) { + pumpkin_sender_send_message(sender, "Hello from C Plugin!"); + return 1; +} + +pumpkin_metadata_t plugin_get_metadata() { + pumpkin_metadata_t meta = { + .name = "my_c_plugin", + .version = "0.1.0", + .description = "My first Pumpkin C plugin" + }; + return meta; +} +``` + +--- + +## 2. In-Game Preview + +Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft: + +In-Game Command Autocompletion Preview + +--- + +## 3. How It Works + +::: details Step-by-Step Breakdown + +### Step 1: Define the Permission Struct +Populate a `pumpkin_permission_t` struct and call `pumpkin_register_permission`: +```c +pumpkin_permission_t perm = { + .node = "my_c_plugin:hello", + .description = "Allows executing the /hello command", + .default_access = PERMISSION_DEFAULT_ALLOW +}; +pumpkin_register_permission(ctx, &perm); +``` + +### Step 2: Build the Command Tree +Create the command tree by passing name array and description: +```c +const char* names[] = {"hello", "hi"}; +pumpkin_command_t cmd = pumpkin_command_new(names, 2, "Greets the player"); +``` + +### Step 3: Register Command & Handle Execution +Pass the command handle to `pumpkin_register_command` and handle responses inside `plugin_handle_command`: +```c +pumpkin_register_command(ctx, cmd, "my_c_plugin:hello"); +``` + +::: + +--- + +## Next Steps + +- Check out the [C Quick Start Guide](./quick-start) to set up your compiler toolchain. diff --git a/docs/en/plugin-dev/csharp/first-command.md b/docs/en/plugin-dev/csharp/first-command.md new file mode 100644 index 0000000..c2a34ca --- /dev/null +++ b/docs/en/plugin-dev/csharp/first-command.md @@ -0,0 +1,110 @@ +# Creating Your First Command + +Registering custom commands in Pumpkin using C# provides a strongly-typed, clean structure. + +--- + +## 1. Quick Example + +Here is a complete C# plugin file (`MyPlugin.cs`) that registers a `/hello` command with permission checks and sends a response back to the player. + +```csharp [MyPlugin.cs] +using PluginWorld; +using PluginWorld.wit.Exports.pumpkin.plugin.v0_1_0; +using PluginWorld.wit.Imports.pumpkin.plugin.v0_1_0; + +namespace MyPumpkinPlugin; + +public class MyPlugin : IPluginWorldExports, IMetadataExports +{ + public static void InitPlugin() { } + + public static void OnLoad(IContextImports.Context context) + { + // 1. Register permission node + var perm = new IPermissionImports.Permission( + "my_csharp_plugin:hello", + "Allows executing the /hello command", + IPermissionImports.PermissionDefault.Allow, + [] + ); + IContextImports.RegisterPermission(context, perm); + + // 2. Build and register command tree + var command = ICommandImports.Command.New(["hello", "hi"], "Greets the player"); + IContextImports.RegisterCommand(context, command, "my_csharp_plugin:hello"); + } + + public static void OnUnload(IContextImports.Context context) { } + + public static IEventImports.Event HandleEvent(uint eventId, IServerImports.Server server, IEventImports.Event @event) + { + return @event; + } + + public static int HandleCommand(uint commandId, ICommandImports.CommandSender sender, IServerImports.Server server, ICommandImports.ConsumedArgs args) + { + ICommandImports.SendMessage(sender, "Hello from C# Plugin!"); + return 1; + } + + public static void HandleTask(uint handlerId, IServerImports.Server server) { } + + public static IMetadataExports.PluginMetadata Metadata() + { + return new IMetadataExports.PluginMetadata( + "my_csharp_plugin", + "0.1.0", + "My first Pumpkin C# plugin", + ["Developer"], + [] + ); + } +} +``` + +--- + +## 2. In-Game Preview + +Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft: + +In-Game Command Autocompletion Preview + +--- + +## 3. How It Works + +::: details Step-by-Step Breakdown + +### Step 1: Define the Permission Node +Construct an `IPermissionImports.Permission` record and register it via `IContextImports.RegisterPermission`: +```csharp +var perm = new IPermissionImports.Permission( + "my_csharp_plugin:hello", + "Allows executing the /hello command", + IPermissionImports.PermissionDefault.Allow, + [] +); +IContextImports.RegisterPermission(context, perm); +``` + +### Step 2: Build the Command Tree +Instantiate your command with primary names and description: +```csharp +var command = ICommandImports.Command.New(["hello", "hi"], "Greets the player"); +``` + +### Step 3: Register and Handle +Register the command with `IContextImports.RegisterCommand` and process incoming executions inside `HandleCommand`: +```csharp +IContextImports.RegisterCommand(context, command, "my_csharp_plugin:hello"); +``` + +::: + +--- + +## Next Steps + +- Follow the [C# Quick Start Guide](./quick-start) to configure `.csproj` and build WebAssembly outputs. diff --git a/docs/en/plugin-dev/go/first-command.md b/docs/en/plugin-dev/go/first-command.md new file mode 100644 index 0000000..f20ffdd --- /dev/null +++ b/docs/en/plugin-dev/go/first-command.md @@ -0,0 +1,103 @@ +# Creating Your First Command + +Registering commands in Go with Pumpkin is built on standard Go idiom using TinyGo WASM compilation. + +--- + +## 1. Quick Example + +Here is a complete Go plugin file (`main.go`) that registers a `/hello` command with permission checks and sends a response back to the player. + +```go [main.go] +package main + +import ( + "github.com/Pumpkin-MC/pumpkin-api-go/api" + "github.com/Pumpkin-MC/pumpkin-api-go/pkg/pumpkin_plugin_command" + "github.com/Pumpkin-MC/pumpkin-api-go/pkg/pumpkin_plugin_context" + "github.com/Pumpkin-MC/pumpkin-api-go/pkg/pumpkin_plugin_permission" + _ "github.com/Pumpkin-MC/pumpkin-api-go/pkg/wit_exports" +) + +type MyPlugin struct { + api.DefaultPlugin +} + +func (p *MyPlugin) Metadata() api.Metadata { + return api.Metadata{ + Name: "my_go_plugin", + Version: "0.1.0", + Authors: []string{"Developer"}, + Description: "My first Pumpkin Go plugin", + } +} + +func (p *MyPlugin) OnLoad(ctx *pumpkin_plugin_context.Context) { + // 1. Register permission node + ctx.RegisterPermission(pumpkin_plugin_permission.Permission{ + Node: "my_go_plugin:hello", + Description: "Allows executing the /hello command", + Default: pumpkin_plugin_permission.PermissionDefaultAllow(), + }) + + // 2. Build and register command tree + cmd := pumpkin_plugin_command.New([]string{"hello", "hi"}, "Greets the player") + ctx.RegisterCommand(cmd, "my_go_plugin:hello") +} + +func (p *MyPlugin) HandleCommand(cmdID uint32, sender pumpkin_plugin_command.CommandSender) int32 { + sender.SendMessage("Hello from Go Plugin!") + return 1 +} + +func init() { + api.RegisterPlugin(&MyPlugin{}) +} + +func main() {} +``` + +--- + +## 2. In-Game Preview + +Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft: + +In-Game Command Autocompletion Preview + +--- + +## 3. How It Works + +::: details Step-by-Step Breakdown + +### Step 1: Register Permission +Call `ctx.RegisterPermission` inside `OnLoad`: +```go +ctx.RegisterPermission(pumpkin_plugin_permission.Permission{ + Node: "my_go_plugin:hello", + Description: "Allows executing the /hello command", + Default: pumpkin_plugin_permission.PermissionDefaultAllow(), +}) +``` + +### Step 2: Build the Command Tree +Instantiate the command tree with `pumpkin_plugin_command.New`: +```go +cmd := pumpkin_plugin_command.New([]string{"hello", "hi"}, "Greets the player") +``` + +### Step 3: Register & Execute +Register the command with `ctx.RegisterCommand` and handle execution in `HandleCommand`: +```go +ctx.RegisterCommand(cmd, "my_go_plugin:hello") +``` + +::: + +--- + +## Next Steps + +- Follow the [Go Quick Start Guide](./quick-start) to set up TinyGo compilation. +- Learn more about [Basic Logic](./basic-logic). diff --git a/docs/en/plugin-dev/kotlin/first-command.md b/docs/en/plugin-dev/kotlin/first-command.md new file mode 100644 index 0000000..12831f5 --- /dev/null +++ b/docs/en/plugin-dev/kotlin/first-command.md @@ -0,0 +1,94 @@ +# Creating Your First Command + +Registering custom commands in Pumpkin using Kotlin is concise, idiomatic, and strongly typed. + +--- + +## 1. Quick Example + +Here is a complete Kotlin plugin (`Plugin.kt`) that registers a `/hello` command with permission checks and sends a response back to the player. + +```kotlin [src/wasmWasiMain/kotlin/plugin/Plugin.kt] +package plugin + +import pumpkin.plugin.context.Context +import pumpkin.plugin.command.Command +import pumpkin.plugin.permission.Permission +import pumpkin.plugin.permission.PermissionDefault + +class MyPlugin { + fun onLoad(ctx: Context) { + // 1. Register permission node + ctx.registerPermission( + Permission( + node = "my_kotlin_plugin:hello", + description = "Allows executing the /hello command", + default = PermissionDefault.ALLOW, + children = emptyList() + ) + ) + + // 2. Build and register command tree + val cmd = Command( + names = listOf("hello", "hi"), + description = "Greets the player" + ) + ctx.registerCommand(cmd, "my_kotlin_plugin:hello") + } + + fun handleCommand(sender: pumpkin.plugin.command.CommandSender): Int { + sender.sendMessage("Hello from Kotlin Plugin!") + return 1 + } +} +``` + +--- + +## 2. In-Game Preview + +Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft: + +In-Game Command Autocompletion Preview + +--- + +## 3. How It Works + +::: details Step-by-Step Breakdown + +### Step 1: Define the Permission Node +Construct a `Permission` object and pass it to `ctx.registerPermission`: +```kotlin +ctx.registerPermission( + Permission( + node = "my_kotlin_plugin:hello", + description = "Allows executing the /hello command", + default = PermissionDefault.ALLOW, + children = emptyList() + ) +) +``` + +### Step 2: Build the Command Tree +Instantiate `Command` with primary names and aliases: +```kotlin +val cmd = Command( + names = listOf("hello", "hi"), + description = "Greets the player" +) +``` + +### Step 3: Register with Context +Register the command with `ctx.registerCommand` and handle calls inside `handleCommand`: +```kotlin +ctx.registerCommand(cmd, "my_kotlin_plugin:hello") +``` + +::: + +--- + +## Next Steps + +- Follow the [Kotlin Quick Start Guide](./quick-start) to configure your `Makefile` and Kotlin/Wasm build tools. diff --git a/docs/en/plugin-dev/migrating-from-bukkit/commands.md b/docs/en/plugin-dev/migrating-from-bukkit/commands.md new file mode 100644 index 0000000..a6d3d51 --- /dev/null +++ b/docs/en/plugin-dev/migrating-from-bukkit/commands.md @@ -0,0 +1,171 @@ +# Migrating Commands from Bukkit + +In Bukkit, commands are defined in `plugin.yml` and handled through `CommandExecutor` classes or the Brigadier library. + +In Pumpkin, commands are built using a **Brigadier-inspired command tree** and registered programmatically via `context.register_command`. No YAML configuration files are used. + +--- + +## Key Differences + +| Feature | Bukkit / Spigot | Pumpkin | +| :--- | :--- | :--- | +| **Declaration** | Declared in `plugin.yml` under `commands:` | Constructed in code using `Command::new(...)` | +| **Permissions** | Linked in `plugin.yml` or checked via `player.hasPermission()` | Explicit permission node bound during `register_command()` | +| **Tab Completion** | Manual string matching in `TabCompleter` | Automatic tree-based client-side tab completion | +| **Subcommands** | Manual `if (args[0].equalsIgnoreCase("..."))` | Nested `Command` tree nodes | + +--- + +## Code Comparison: Simple Command + +Compare registering a `/feed` command in Bukkit vs. Pumpkin: + +### 1. Bukkit Implementation (Java) + +```java [FeedCommand.java] +// 1. Registered in plugin.yml: +// commands: +// feed: +// description: Feeds the player +// permission: myplugin.feed + +public class FeedCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("Only players can execute this command!"); + return true; + } + Player player = (Player) sender; + if (!player.hasPermission("myplugin.feed")) { + player.sendMessage("No permission!"); + return true; + } + player.setFoodLevel(20); + player.sendMessage("Your hunger has been satisfied!"); + return true; + } +} +``` + +### 2. Pumpkin Implementations + +::: code-group + +```rust [Rust] +use pumpkin_plugin_api::{ + command::{CommandHandler, CommandSender, ConsumedArgs, CommandError, Command}, + permission::{Permission, PermissionDefault}, + Context, Plugin, PluginMetadata, Server, +}; + +struct FeedExecutor; + +impl CommandHandler for FeedExecutor { + fn handle(&self, sender: CommandSender, _server: Server, _args: ConsumedArgs) -> Result { + sender.send_message("Your hunger has been satisfied!"); + Ok(1) + } +} + +pub struct MyPlugin; + +impl Plugin for MyPlugin { + fn new() -> Self { MyPlugin } + + fn metadata(&self) -> PluginMetadata { + PluginMetadata { + name: "feed_plugin".into(), + version: "1.0.0".into(), + authors: vec!["Developer".into()], + description: "Feed command plugin".into(), + } + } + + fn on_load(&mut self, context: Context) -> pumpkin_plugin_api::Result<()> { + // 1. Register permission node (Replaces plugin.yml permission) + context.register_permission(&Permission { + node: "feed_plugin:feed".to_string(), + description: "Allows executing /feed".to_string(), + default: PermissionDefault::Allow, + children: Vec::new(), + })?; + + // 2. Build command tree + let command = Command::new(&["feed".to_string(), "eat".to_string()], "Feeds the player") + .execute(FeedExecutor); + + // 3. Register with context + context.register_command(command, "feed_plugin:feed")?; + + Ok(()) + } +} +``` + +```python [Python] +from pumpkin_api import ( + Plugin, PluginMetadata, register_plugin, + permission, command, context, server +) + +class FeedExecutor: + def handle(self, sender: command.CommandSender, srv: server.Server, args: command.ConsumedArgs) -> int: + sender.send_message("Your hunger has been satisfied!") + return 1 + +class FeedPlugin(Plugin): + def metadata(self) -> PluginMetadata: + return PluginMetadata(name="feed_plugin", version="1.0.0", authors=["Dev"], description="Feed command") + + def on_load(self, ctx: context.Context) -> None: + ctx.register_permission(permission.Permission( + node="feed_plugin:feed", + description="Allows executing /feed", + default=permission.PermissionDefault.ALLOW, + children=[] + )) + + cmd = command.Command(["feed", "eat"], "Feeds the player") + cmd.execute(FeedExecutor()) + ctx.register_command(cmd, "feed_plugin:feed") + +register_plugin(FeedPlugin) +``` + +```kotlin [Kotlin] +package plugin + +import pumpkin.plugin.context.Context +import pumpkin.plugin.command.Command +import pumpkin.plugin.command.CommandSender +import pumpkin.plugin.permission.Permission +import pumpkin.plugin.permission.PermissionDefault + +class FeedPlugin { + fun onLoad(ctx: Context) { + ctx.registerPermission( + Permission( + node = "feed_plugin:feed", + description = "Allows executing /feed", + default = PermissionDefault.ALLOW, + children = emptyList() + ) + ) + + val cmd = Command( + names = listOf("feed", "eat"), + description = "Feeds the player" + ) + ctx.registerCommand(cmd, "feed_plugin:feed") + } + + fun handleCommand(sender: CommandSender): Int { + sender.sendMessage("Your hunger has been satisfied!") + return 1 + } +} +``` + +::: diff --git a/docs/en/plugin-dev/migrating-from-bukkit/configuration.md b/docs/en/plugin-dev/migrating-from-bukkit/configuration.md new file mode 100644 index 0000000..82838d0 --- /dev/null +++ b/docs/en/plugin-dev/migrating-from-bukkit/configuration.md @@ -0,0 +1,69 @@ +# Migrating Configuration & Data Storage + +Bukkit plugins heavily rely on `config.yml`, `YamlConfiguration`, and the Bukkit configuration serializing system. + +In Pumpkin, WebAssembly plugins run in a secure sandbox environment where configuration files can be handled natively using standard formats like **TOML**, **JSON**, or **YAML**. + +--- + +## Key Differences + +| Feature | Bukkit / Spigot | Pumpkin | +| :--- | :--- | :--- | +| **Config File Format** | `config.yml` (YAML format) | Flexible: TOML, JSON, or custom files | +| **Default Config Generation** | `saveDefaultConfig()` | Reading config from plugin directory or embedded WASM asset | +| **Data Parsing** | `getConfig().getString(...)` | Native serde / JSON / TOML deserialization | +| **File I/O Sandboxing** | Direct filesystem access anywhere | Sandboxed directory access granted to WASM plugin | + +--- + +## Code Comparison: Loading Configuration + +### 1. Bukkit Implementation (Java) + +```java [ConfigExample.java] +public class ConfigExample extends JavaPlugin { + @Override + public void onEnable() { + saveDefaultConfig(); // Saves config.yml from jar resources + FileConfiguration config = getConfig(); + + String welcomeMsg = config.getString("welcome-message", "Default welcome!"); + int maxItems = config.getInt("max-items", 10); + getLogger().info("Loaded message: " + welcomeMsg); + } +} +``` + +### 2. Pumpkin Implementation (Rust) + +In Pumpkin, you can derive `serde::Deserialize` to parse clean TOML configuration files: + +```rust [config.rs] +use serde::Deserialize; +use std::fs; + +#[derive(Deserialize, Debug)] +pub struct PluginConfig { + pub welcome_message: String, + pub max_items: i32, +} + +impl Default for PluginConfig { + fn default() -> Self { + Self { + welcome_message: "Default welcome!".to_string(), + max_items: 10, + } + } +} + +pub fn load_config() -> PluginConfig { + let config_path = "plugins/my_plugin/config.toml"; + if let Ok(content) = fs::read_to_string(config_path) { + toml::from_str(&content).unwrap_or_default() + } else { + PluginConfig::default() + } +} +``` diff --git a/docs/en/plugin-dev/migrating-from-bukkit/events.md b/docs/en/plugin-dev/migrating-from-bukkit/events.md new file mode 100644 index 0000000..6e15a7a --- /dev/null +++ b/docs/en/plugin-dev/migrating-from-bukkit/events.md @@ -0,0 +1,117 @@ +# Migrating Events from Bukkit + +In Bukkit, events are handled by creating classes that implement `Listener` and annotating methods with `@EventHandler`. + +In Pumpkin, event handlers are structs or objects registered explicitly via `context.register_event_handler(...)`. Pumpkin also differentiates between **Blocking** and **Non-blocking** events to maximize server concurrency. + +--- + +## Key Differences + +| Feature | Bukkit / Spigot | Pumpkin | +| :--- | :--- | :--- | +| **Listener Declaration** | `@EventHandler` annotation on methods | `EventHandler` trait / interface implementation | +| **Registration** | `pm.registerEvents(listener, plugin)` | `context.register_event_handler(handler, priority, is_blocking)` | +| **Execution Model** | Main thread execution (`EventPriority`) | Choice between **Blocking** (sequential/cancellable) and **Non-blocking** (concurrent) | +| **Cancellation** | `event.setCancelled(true)` | `event.cancel()` on blocking events | + +--- + +## Blocking vs. Non-Blocking Events in Pumpkin + +Unlike Bukkit where all event handlers run sequentially on the main server thread, Pumpkin lets you specify whether an event handler is **blocking**: + +```rust +// Registration signature in Rust: +context.register_event_handler(handler, priority, is_blocking)?; +``` + +- **Blocking (`is_blocking = true`)**: Executes in sequential priority order. Can modify event data (e.g. edit join message) or cancel the event. +- **Non-blocking (`is_blocking = false`)**: Executes concurrently across worker threads. Ideal for logging, metrics, or external notifications where cancellation is not needed. + +--- + +## Code Comparison: Player Join Event + +### 1. Bukkit Implementation (Java) + +```java [JoinListener.java] +public class JoinListener implements Listener { + @EventHandler(priority = EventPriority.NORMAL) + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + event.setJoinMessage("Welcome " + player.getName() + " to the server!"); + } +} + +// In JavaPlugin: +// getServer().getPluginManager().registerEvents(new JoinListener(), this); +``` + +### 2. Pumpkin Implementations + +::: code-group + +```rust [Rust] +use pumpkin_plugin_api::{ + Context, Plugin, PluginMetadata, Server, + events::{EventData, EventHandler, EventPriority, PlayerJoinEvent}, + text::TextComponent, +}; + +struct JoinHandler; + +impl EventHandler for JoinHandler { + fn handle<'a>( + &'a self, + _server: Server, + mut event: EventData, + ) -> EventData { + event.join_message = TextComponent::text("Welcome to the Pumpkin server!"); + event + } +} + +pub struct MyPlugin; + +impl Plugin for MyPlugin { + fn new() -> Self { MyPlugin } + + fn metadata(&self) -> PluginMetadata { + PluginMetadata { + name: "join_plugin".into(), + version: "1.0.0".into(), + authors: vec!["Developer".into()], + description: "Join event handler".into(), + } + } + + fn on_load(&mut self, context: Context) -> pumpkin_plugin_api::Result<()> { + // Register blocking event handler with Normal priority + context.register_event_handler(JoinHandler, EventPriority::Normal, true)?; + Ok(()) + } +} +``` + +```python [Python] +from pumpkin_api import ( + Plugin, PluginMetadata, register_plugin, + event, server, context +) + +class MyPlugin(Plugin): + def metadata(self) -> PluginMetadata: + return PluginMetadata(name="join_plugin", version="1.0.0", authors=["Dev"], description="Join event") + + def on_load(self, ctx: context.Context) -> None: + self.register_event(ctx, event.EventType.PLAYER_JOIN_EVENT, self.on_player_join) + + def on_player_join(self, srv: server.Server, evt: event.PlayerJoinEventData) -> event.PlayerJoinEventData: + print(f"Player joined!") + return evt + +register_plugin(MyPlugin) +``` + +::: diff --git a/docs/en/plugin-dev/migrating-from-bukkit/index.md b/docs/en/plugin-dev/migrating-from-bukkit/index.md new file mode 100644 index 0000000..f13b33b --- /dev/null +++ b/docs/en/plugin-dev/migrating-from-bukkit/index.md @@ -0,0 +1,39 @@ +# Migrating Overview & Architecture + +Moving from **Bukkit / Spigot / Paper** plugin development to Pumpkin involves shifting from a Java-centric object-oriented model to a compiled, multi-language **WebAssembly (WASM)** component model. + +--- + +## High-Level Architectural Differences + +```mermaid +flowchart LR + subgraph Bukkit / Paper + A[Java Source] --> B[Java Bytecode .jar] + B --> C[JVM / Main Server Thread] + end + subgraph Pumpkin + D[Rust / Python / C# / Go / C] --> E[WASM Component .wasm] + E --> F[WASM Sandbox / Multithreaded Engine] + end +``` + +| Concept | Bukkit / Spigot / Paper | Pumpkin | +| :--- | :--- | :--- | +| **Language Support** | Java / Kotlin / Scala (JVM) | Rust, Python, Kotlin, C#, Go, C | +| **Binary Output** | `.jar` Java Archive | `.wasm` WebAssembly Component | +| **Plugin Descriptor** | `plugin.yml` file | Programmatic `PluginMetadata` struct | +| **Lifecycle Hooks** | `onEnable()` / `onDisable()` | `on_load(context)` / `on_unload(context)` | +| **Security & Isolation** | Unrestricted JVM Reflection | Sandboxed WASM capability model | +| **Concurrency** | Single-threaded tick loop (`BukkitScheduler`) | Multithreaded native execution with Async runtime | + +--- + +## Detailed Migration Topics + +Explore dedicated guides on migrating each major plugin subsystem: + +- [Migrating Commands](./commands) — Transitioning from `getCommand().setExecutor()` and `plugin.yml` to Brigadier command trees. +- [Migrating Events](./events) — Replacing `@EventHandler` and `Listener` interfaces with Pumpkin's blocking vs. non-blocking event system. +- [Migrating Inventories & GUIs](./inventories) — Moving from `Bukkit.createInventory()` to Pumpkin container and window handlers. +- [Migrating Configuration & Data](./configuration) — Replaces `getConfig()` / `config.yml` with native TOML, JSON, or custom storage. diff --git a/docs/en/plugin-dev/migrating-from-bukkit/inventories.md b/docs/en/plugin-dev/migrating-from-bukkit/inventories.md new file mode 100644 index 0000000..0ba7352 --- /dev/null +++ b/docs/en/plugin-dev/migrating-from-bukkit/inventories.md @@ -0,0 +1,72 @@ +# Migrating Inventories & GUIs from Bukkit + +Creating inventory GUIs (like chest menus, shop interfaces, or custom player windows) is a common task in Minecraft plugin development. + +In Bukkit, custom GUIs are created using `Bukkit.createInventory()` and handled via `InventoryClickEvent`. In Pumpkin, inventory windows are managed through **Window APIs** and container click packets. + +--- + +## Key Differences + +| Feature | Bukkit / Spigot | Pumpkin | +| :--- | :--- | :--- | +| **Inventory Creation** | `Bukkit.createInventory(owner, size, title)` | Window container definitions (`WindowType`) | +| **Opening Windows** | `player.openInventory(inv)` | `player.open_window(window)` | +| **Click Interception** | `InventoryClickEvent` handling | Window click callback handlers | +| **Item Stacking** | `ItemStack` with `ItemMeta` | `ItemStack` with components / NBT | + +--- + +## Code Comparison: Opening a Custom Menu GUI + +### 1. Bukkit Implementation (Java) + +```java [MenuGUI.java] +public class MenuGUI implements Listener { + + public void openMenu(Player player) { + Inventory inv = Bukkit.createInventory(null, 9, Component.text("Custom Menu")); + + ItemStack item = new ItemStack(Material.DIAMOND); + ItemMeta meta = item.getItemMeta(); + meta.displayName(Component.text("Click Me!")); + item.setItemMeta(meta); + + inv.setItem(4, item); + player.openInventory(inv); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + if (event.getView().getTitle().equals("Custom Menu")) { + event.setCancelled(true); + if (event.getSlot() == 4) { + event.getWhoClicked().sendMessage("Diamond clicked!"); + } + } + } +} +``` + +### 2. Pumpkin Implementation (Rust) + +```rust [gui.rs] +use pumpkin_plugin_api::{ + player::Player, + item::ItemStack, + window::{Window, WindowType}, + text::TextComponent, +}; + +pub fn open_custom_menu(player: &Player) { + // 1. Create a 9-slot chest window + let mut window = Window::new(WindowType::Generic9x1, TextComponent::text("Custom Menu")); + + // 2. Set item in slot 4 + let item = ItemStack::new("minecraft:diamond", 1); + window.set_item(4, Some(item)); + + // 3. Open window for player + player.open_window(window); +} +``` diff --git a/docs/en/plugin-dev/python/first-command.md b/docs/en/plugin-dev/python/first-command.md new file mode 100644 index 0000000..00058f4 --- /dev/null +++ b/docs/en/plugin-dev/python/first-command.md @@ -0,0 +1,95 @@ +# Creating Your First Command + +Registering and handling custom commands in Pumpkin with Python is designed to be straightforward and expressive. + +--- + +## 1. Quick Example + +Here is a complete, minimal Python plugin (`main.py`) that registers a `/hello` command with permission checks and sends a response back to the player. + +```python [main.py] +from pumpkin_api import ( + Plugin, PluginMetadata, register_plugin, + permission, command, context, server +) + +class HelloCommand: + def handle(self, sender: command.CommandSender, srv: server.Server, args: command.ConsumedArgs) -> int: + sender.send_message("Hello from Python Plugin!") + return 1 + +class MyPlugin(Plugin): + def metadata(self) -> PluginMetadata: + return PluginMetadata( + name="my_python_plugin", + version="0.1.0", + authors=["Developer"], + description="My first Pumpkin Python plugin" + ) + + def on_load(self, ctx: context.Context) -> None: + # 1. Register permission node + ctx.register_permission(permission.Permission( + node="my_python_plugin:hello", + description="Allows executing the /hello command", + default=permission.PermissionDefault.ALLOW, + children=[] + )) + + # 2. Build the command tree with aliases & executor + cmd = command.Command(["hello", "hi"], "Greets the player") + cmd.execute(HelloCommand()) + + # 3. Register the command + ctx.register_command(cmd, "my_python_plugin:hello") + +register_plugin(MyPlugin) +``` + +--- + +## 2. In-Game Preview + +Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft: + +In-Game Command Autocompletion Preview + +--- + +## 3. How It Works + +::: details Step-by-Step Breakdown + +### Step 1: Define the Permission +Commands in Pumpkin require a permission node. Register it with `permission.PermissionDefault.ALLOW` to allow execution by default: +```python +ctx.register_permission(permission.Permission( + node="my_python_plugin:hello", + description="Allows executing the /hello command", + default=permission.PermissionDefault.ALLOW, + children=[] +)) +``` + +### Step 2: Build the Command Tree +Create a `command.Command` instance with primary names and aliases, then attach your handler with `.execute(...)`: +```python +cmd = command.Command(["hello", "hi"], "Greets the player") +cmd.execute(HelloCommand()) +``` + +### Step 3: Register with Context +Pass the command tree and permission node string to `ctx.register_command`: +```python +ctx.register_command(cmd, "my_python_plugin:hello") +``` + +::: + +--- + +## Next Steps + +- Check out [Events](./events) to handle player actions and server events in Python. +- Learn more about [Basic Logic](./basic-logic). diff --git a/docs/en/plugin-dev/rust/command/first-command.md b/docs/en/plugin-dev/rust/command/first-command.md index cf541b1..9840346 100644 --- a/docs/en/plugin-dev/rust/command/first-command.md +++ b/docs/en/plugin-dev/rust/command/first-command.md @@ -1,42 +1,36 @@ -# Making your first Command +# Creating Your First Command -Before registering your command, you should choose a name. In this example, we define it as a constant array. Using an array allows you to easily add aliases +Registering and handling custom commands in Pumpkin is designed to be developer-friendly, fast, and structured like Mojang's Brigadier system. -```rust -let names = ["test".to_string()]; -// OR with aliases -let names = ["test".to_string(), "testcommand".to_string()]; -``` +--- -You should also define a description, which will be displayed when players use the /help command +## 1. Quick Example -```rust -let description = "My first Command!"; -``` +Here is a complete, minimal Rust plugin that registers a `/hello` command with permission checks and sends a response back to the player. -Pumpkin's Command API is heavily inspired by Mojang's [Brigadier](https://github.com/Mojang/brigadier) This system allows you to easily manage command syntax and provides automatic tab-completion for players +```rust [src/lib.rs] +use pumpkin_plugin_api::{ + command::{CommandHandler, CommandSender, ConsumedArgs, CommandError, Command}, + permission::{Permission, PermissionDefault}, + Context, Plugin, PluginMetadata, Server, +}; -#### Implementing the Command Tree +struct HelloExecutor; -```rust -use pumpkin_plugin_api::command::Command; - -pub fn init_command_tree() -> Command { - let names = ["test".to_string(), "testcommand".to_string()]; - let description = "My first Command!"; - - Command::new(&names, description) +impl CommandHandler for HelloExecutor { + fn handle( + &self, + sender: CommandSender, + _server: Server, + _args: ConsumedArgs, + ) -> Result { + sender.send_message("Hello from Pumpkin!"); + Ok(1) + } } -``` -#### Registration and Permissions +pub struct MyPlugin; -To make the command usable, you must register both the Permission and the Command itself within your plugin context. - -First, register the Permission. In this example, we set `PermissionDefault::Allow` so that everyone can use the command by default - -```rust -struct MyPlugin; impl Plugin for MyPlugin { fn new() -> Self { MyPlugin @@ -44,97 +38,78 @@ impl Plugin for MyPlugin { fn metadata(&self) -> PluginMetadata { PluginMetadata { - name: "plugin_docs_plugin".into(), + name: "my_plugin".into(), version: env!("CARGO_PKG_VERSION").into(), - authors: vec!["Bjorn".into()], - description: "A simple example plugin".into(), + authors: vec!["Developer".into()], + description: "My first Pumpkin plugin".into(), } } fn on_load(&mut self, context: Context) -> pumpkin_plugin_api::Result<()> { - tracing::info!("Hello, Pumpkin!"); - - context.register_permission(&Permission { // [!code ++:7] - // This has to have the same name space as provided in your PluginMetadata - node: "plugin_docs_plugin:test".to_string(), - description: "Important Test Permission".to_string(), - default: PermissionDefault::Allow, - children: Vec::new(), - })?; - - Ok(()) - } -} -``` - -Next, register the command using the permission string created above: - -```rust -struct MyPlugin; -impl Plugin for MyPlugin { - // ... - - fn on_load(&mut self, context: Context) -> pumpkin_plugin_api::Result<()> { - tracing::info!("Hello, Pumpkin!"); - + // 1. Register permission node context.register_permission(&Permission { - // This has to have the same name space as provided in your PluginMetadata - node: "plugin_docs_plugin:test".to_string(), - description: "Important Test Permission".to_string(), + node: "my_plugin:hello".to_string(), + description: "Allows executing the /hello command".to_string(), default: PermissionDefault::Allow, children: Vec::new(), })?; - - context.register_command(init_command_tree(), "plugin_docs_plugin:test"); // [!code ++:1] + + // 2. Build the command tree with aliases & executor + let names = ["hello".to_string(), "hi".to_string()]; + let command = Command::new(&names, "Greets the player").execute(HelloExecutor); + + // 3. Register the command + context.register_command(command, "my_plugin:hello")?; Ok(()) } } ``` -Rebuild your plugin, move the plugins file into the plugins folder, and restart your server +--- -**Congrats!**, The command is now registered and should be highlighted in-game and in console +## 2. In-Game Preview -drawing +Once registered, your command automatically gains client-side autocompletion, syntax validation, and color highlighting in Minecraft: -Executing the command right now likely thrown an Syntax error since no Command Executor has been implemented and the Command just does nothing +In-Game Command Autocompletion Preview -``` -$ test -$ Invalid Syntax. Usage: /test -``` +--- -### Adding an Executor +## 3. How It Works -Lets create a super simple Command Executor without requiring and arguments +::: details Step-by-Step Breakdown +### Step 1: Define the Permission +Commands in Pumpkin require a permission node. Using `PermissionDefault::Allow` allows all players to execute it by default: ```rust -struct MyCommandExecutor; - -impl CommandHandler for MyCommandExecutor { - fn handle( - &self, - sender: pumpkin_plugin_api::command::CommandSender, - server: pumpkin_plugin_api::Server, - args: pumpkin_plugin_api::command::ConsumedArgs, - ) -> pumpkin_plugin_api::Result { - Ok(1) - } -} +context.register_permission(&Permission { + node: "my_plugin:hello".to_string(), + description: "Allows executing the /hello command".to_string(), + default: PermissionDefault::Allow, + children: Vec::new(), +})?; ``` -### Attaching the Executor - -Now in order to attach the executor, all that we need to do now is provide it to the Command. - +### Step 2: Build the Command Tree +Use `Command::new` to define primary names and aliases, then attach your `CommandHandler` struct with `.execute(...)`: ```rust -pub fn init_command_tree() -> Command { - let names = ["test".to_string(), "testcommand".to_string()]; - let description = "My first Command!"; - - Command::new(&names, description).execute(MyCommandExecutor) // [!code ++:1] -} +let names = ["hello".to_string(), "hi".to_string()]; +let command = Command::new(&names, "Greets the player") + .execute(HelloExecutor); ``` -Now you should get no syntax error when running `/test`. +### Step 3: Register with Context +Pass the command tree and the permission node string to `context.register_command`: +```rust +context.register_command(command, "my_plugin:hello")?; +``` + +::: + +--- + +## Next Steps + +- Explore complex subcommands and argument parsing in the [Rock-Paper-Scissors Tutorial](./rock-paper-scissors). +- Learn how to handle inventory and GUI interactions in plugin logic. diff --git a/docs/ja_jp/about/helping.md b/docs/ja_jp/about/helping.md index 8aee0ec..582f324 100644 --- a/docs/ja_jp/about/helping.md +++ b/docs/ja_jp/about/helping.md @@ -28,7 +28,7 @@ Pumpkinの使用中にバグ、クラッシュ、または予期しない動作 ## 3. 財政的支援と寄付 高性能なMinecraftサーバーソフトウェアの維持には多大な労力が必要です。 -- **スポンサーと寄付**: [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC)または[pumpkinmc.org](https://pumpkinmc.org/)の資金提供オプションを確認してください。 +- **寄付**: [pumpkinmc.org/donate](https://pumpkinmc.org/donate) の公式寄付ページで資金提供オプションを確認してください。 - **サーバーインフラ**: テスト環境を提供することでも貢献できます。 --- diff --git a/docs/nl/about/helping.md b/docs/nl/about/helping.md index 8534729..ab6075c 100644 --- a/docs/nl/about/helping.md +++ b/docs/nl/about/helping.md @@ -28,7 +28,7 @@ Lees voor codebijdragen onze [Bijdragegids](/developer/contributing). ## 3. Financiële Ondersteuning & Doneren Het onderhouden van krachtige Minecraft-serversoftware vereist veel inzet. -- **Sponsoring & Donaties**: Bekijk onze financieringsopties op [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) of op [pumpkinmc.org](https://pumpkinmc.org/). +- **Donaties**: Bekijk onze financieringsopties op onze officiële donatiepagina [pumpkinmc.org/donate](https://pumpkinmc.org/donate). - **Serverinfrastructuur**: U kunt ook helpen door testomgevingen beschikbaar te stellen. --- diff --git a/docs/pt/about/helping.md b/docs/pt/about/helping.md index 00430b2..88ef2ae 100644 --- a/docs/pt/about/helping.md +++ b/docs/pt/about/helping.md @@ -28,7 +28,7 @@ Para contribuições de código, leia nosso [Guia de Contribuição](/developer/ ## 3. Suporte Financeiro e Doações Manter um software de servidor Minecraft de alto desempenho requer muito esforço. -- **Patrocínio e Doações**: Confira nossas opções de financiamento no [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) ou [pumpkinmc.org](https://pumpkinmc.org/). +- **Doações**: Confira nossas opções de financiamento em nossa página oficial de doações [pumpkinmc.org/donate](https://pumpkinmc.org/donate). - **Infraestrutura de Servidor**: Você também pode ajudar fornecendo ambientes de teste. --- diff --git a/docs/tr_TR/about/helping.md b/docs/tr_TR/about/helping.md index bce5bce..8dd041b 100644 --- a/docs/tr_TR/about/helping.md +++ b/docs/tr_TR/about/helping.md @@ -28,7 +28,7 @@ Kod katkıları için lütfen [Katkıda Bulunma Kılavuzumuzu](/developer/contri ## 3. Finansal Destek ve Bağış Yüksek performanslı Minecraft sunucu yazılımını sürdürmek büyük çaba gerektirir. -- **Sponsorluk ve Bağışlar**: [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) veya [pumpkinmc.org](https://pumpkinmc.org/) adresindeki finansman seçeneklerimizi inceleyin. +- **Bağışlar**: Resmi bağış sayfamızdaki [pumpkinmc.org/donate](https://pumpkinmc.org/donate) finansman seçeneklerimizi inceleyin. - **Sunucu Altyapısı**: Test ortamları sağlayarak da yardımcı olabilirsiniz. --- diff --git a/docs/zh_cn/about/helping.md b/docs/zh_cn/about/helping.md index be9cabd..ca4f62a 100644 --- a/docs/zh_cn/about/helping.md +++ b/docs/zh_cn/about/helping.md @@ -28,7 +28,7 @@ ## 3. 财务支持与捐赠 维护高性能 Minecraft 服务器软件需要大量精力。 -- **赞助与捐赠**:在 [GitHub Sponsors](https://github.com/sponsors/Pumpkin-MC) 或 [pumpkinmc.org](https://pumpkinmc.org/) 查看我们的资金选项。 +- **捐赠**:在我们的官方捐赠页面 [pumpkinmc.org/donate](https://pumpkinmc.org/donate) 查看我们的资金选项。 - **服务器基础设施**:您也可以通过提供测试环境来提供帮助。 --- diff --git a/package-lock.json b/package-lock.json index 5387e60..c3e852b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "devDependencies": { "@types/bun": "^1.3.14", "vitepress": "^2.0.0-alpha.18", - "vue": "^3.6.0-beta.17" + "vue": "^3.6.0-rc.2" } }, "node_modules/@babel/helper-string-parser": { @@ -672,106 +672,106 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.6.0-beta.17.tgz", - "integrity": "sha512-4xB2W8+00h7bfHbVeHD+zI+bmyF+XgQBKCCWLjFJ/VCJ/1tBjnlzWpX0OqcOE78LktGiCGcKgNk+eZAuav5cqg==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.6.0-rc.2.tgz", + "integrity": "sha512-Xx79h4EpJktQBShelXNKaRuvn9N6YsYL1j+RXdvPKzI+8tohYziBJbxOFGAkdcOKBwKc2SIWV4DOlTAMhE96yQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.7", - "@vue/shared": "3.6.0-beta.17", + "@vue/shared": "3.6.0-rc.2", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-core/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, "node_modules/@vue/compiler-dom": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.6.0-beta.17.tgz", - "integrity": "sha512-viCM7YwHK6HuQ9rY8O27ET1xLi9WeJ+EmMWlwvtggpqb2j+l7DZOATkCRXOivjTOqtt8h5MIGnlB7tQlupQgeA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.6.0-rc.2.tgz", + "integrity": "sha512-dRTdTdi/KXzHYIkHtyjGxepTIxnsZ/hB3v1osnS8c4MeycAyzkSoZW6OZkXXN4oVVVU6NKXds1XtKAEKVVw7nA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.6.0-beta.17", - "@vue/shared": "3.6.0-beta.17" + "@vue/compiler-core": "3.6.0-rc.2", + "@vue/shared": "3.6.0-rc.2" } }, "node_modules/@vue/compiler-dom/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, "node_modules/@vue/compiler-sfc": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.6.0-beta.17.tgz", - "integrity": "sha512-L3KGWeWDCqm1tL03m09IXKRhIEh0Ij2gEIax9W0smDtlCAQt4gc8dmeTbjTOg4+1N2qAFEaAs+0xVu9y1j7Sng==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.6.0-rc.2.tgz", + "integrity": "sha512-EZWTNh0UwdxvrBJkFc6+dqfwuUSdTVHDIohQcGDPCqGaYTHOfUL20b+grEAzlyxB741KrVBUb7qqpes92hAh2w==", "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.7", - "@vue/compiler-core": "3.6.0-beta.17", - "@vue/compiler-dom": "3.6.0-beta.17", - "@vue/compiler-ssr": "3.6.0-beta.17", - "@vue/compiler-vapor": "3.6.0-beta.17", - "@vue/shared": "3.6.0-beta.17", + "@vue/compiler-core": "3.6.0-rc.2", + "@vue/compiler-dom": "3.6.0-rc.2", + "@vue/compiler-ssr": "3.6.0-rc.2", + "@vue/compiler-vapor": "3.6.0-rc.2", + "@vue/shared": "3.6.0-rc.2", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", - "postcss": "^8.5.14", + "postcss": "^8.5.19", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-sfc/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, "node_modules/@vue/compiler-ssr": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.6.0-beta.17.tgz", - "integrity": "sha512-OWBt5fu62UGeGTcl3Ra5ocMZbJ3h8ze862g9GlS72CNsYYZTbh3V9LePoOp6WX73SdsSdbsWLSsZfi5Wgh+ggQ==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.6.0-rc.2.tgz", + "integrity": "sha512-lqHSdQTmlhKX3dNEvR1TcspUzDlTR82T7BYLDzfvTwAqGXxAI2WJfyGJPcNpPjPKYEMI9JRGF32DU8TlHLx1AA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.6.0-beta.17", - "@vue/shared": "3.6.0-beta.17" + "@vue/compiler-dom": "3.6.0-rc.2", + "@vue/shared": "3.6.0-rc.2" } }, "node_modules/@vue/compiler-ssr/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, "node_modules/@vue/compiler-vapor": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-vapor/-/compiler-vapor-3.6.0-beta.17.tgz", - "integrity": "sha512-8qqHnEwQVytCnaF9zSOtcZxnYxz+FJqBNl9zIpSKwKRStl4XqmgcXlHtJYQMCxZS6xa7JfPvutkt5mBneh07Yw==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/compiler-vapor/-/compiler-vapor-3.6.0-rc.2.tgz", + "integrity": "sha512-QbrA01pbj9xemF2McgBopyaOwj3kQGN0W1GW5EdFXORIT4fQQJpmUOj40h99S3bk09gLs5bFTRS4YE+Oyw/F9w==", "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.7", - "@vue/compiler-dom": "3.6.0-beta.17", - "@vue/shared": "3.6.0-beta.17", + "@vue/compiler-dom": "3.6.0-rc.2", + "@vue/shared": "3.6.0-rc.2", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-vapor/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, @@ -806,99 +806,97 @@ "license": "MIT" }, "node_modules/@vue/reactivity": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.6.0-beta.17.tgz", - "integrity": "sha512-oKLiLZRomHyJ++367F286Er49TXazWofj1PbNFUBoRxNNLne8xlDHAypN+C9Yr+JfAIN9cRp8l1PdjwfwMsV8g==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.6.0-rc.2.tgz", + "integrity": "sha512-B01EoSTcaVQiJwZDoSoeKYClVgj60BHN43oHEcxXhPVLdxsXI0SOiQuskUskQDZn2ma08llICKJohL60o+UamA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/shared": "3.6.0-beta.17" + "@vue/shared": "3.6.0-rc.2" } }, "node_modules/@vue/reactivity/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, "node_modules/@vue/runtime-core": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.6.0-beta.17.tgz", - "integrity": "sha512-JDPvmiyLpXtTnpG6I9URF88bOF+7KVgpDvPvZVl9AMboQj+LW4Pp19QOhGzxGoKES6wBts8c4xM1zjtr0xHcQw==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.6.0-rc.2.tgz", + "integrity": "sha512-qFV61Hbg6LyEGxJiVRJYuiIfryxrfO4+cgW1esxtkR1/pvemULwG6KpFImsJDwcC+YxrtvndXGM5PRVwUCGuiA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.6.0-beta.17", - "@vue/shared": "3.6.0-beta.17" + "@vue/reactivity": "3.6.0-rc.2", + "@vue/shared": "3.6.0-rc.2" } }, "node_modules/@vue/runtime-core/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, "node_modules/@vue/runtime-dom": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.6.0-beta.17.tgz", - "integrity": "sha512-7B02MUGEFzuJaMbhxtgNRSMOrbj+AlERBy1EBxrXHplHSwv8xQjJpiBk0Z+5+vQMDVS4zc8VIYgeP7CUyROpUg==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.6.0-rc.2.tgz", + "integrity": "sha512-clIE/xk0b61t30BPKoOXZep253nhWdjyw7iac53yy2KN0nxAupkb6x3ImOI9iljjXqOW5lYdNVHNxNlcx3iA1Q==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.6.0-beta.17", - "@vue/runtime-core": "3.6.0-beta.17", - "@vue/shared": "3.6.0-beta.17", + "@vue/reactivity": "3.6.0-rc.2", + "@vue/runtime-core": "3.6.0-rc.2", + "@vue/shared": "3.6.0-rc.2", "csstype": "^3.2.3" } }, "node_modules/@vue/runtime-dom/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, "node_modules/@vue/runtime-vapor": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/runtime-vapor/-/runtime-vapor-3.6.0-beta.17.tgz", - "integrity": "sha512-nJpdHuMOXMEmVUrRTEo4AEDPreBja9euIXHjvUe4aEk1pmTKs61hQRluAdETRyXZwkyFe6D6+fXxvKf5wPBJBg==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/runtime-vapor/-/runtime-vapor-3.6.0-rc.2.tgz", + "integrity": "sha512-8EpxbNyT629k/52el4D7PxXmZtiYhJRBHPXJR7CZw0OluiADtT9W8J+XB83EVlzHmFUysXcd+mGWmuHwIhuHZA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.6.0-beta.17", - "@vue/shared": "3.6.0-beta.17" + "@vue/reactivity": "3.6.0-rc.2", + "@vue/shared": "3.6.0-rc.2" }, "peerDependencies": { - "@vue/runtime-dom": "3.6.0-beta.17" + "@vue/runtime-dom": "3.6.0-rc.2" } }, "node_modules/@vue/runtime-vapor/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, "node_modules/@vue/server-renderer": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.6.0-beta.17.tgz", - "integrity": "sha512-C7YpoWxewo01cG+S51MouH1v6taXBU5XvmxPjPAI3E9Zn3gpzb49e/ikShA5ov8ijE9R7tyIOUk4QU2xoDiT+Q==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.6.0-rc.2.tgz", + "integrity": "sha512-TIsqoYljs6b0wfoCDhv4EeU3Du2a8gTadkaTGMjIYLTLlO4p8r4VdDqfNp/ZMAm87bW4ST1naBMRe+bXQBpAeQ==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.6.0-beta.17", - "@vue/shared": "3.6.0-beta.17" - }, - "peerDependencies": { - "vue": "3.6.0-beta.17" + "@vue/compiler-ssr": "3.6.0-rc.2", + "@vue/runtime-dom": "3.6.0-rc.2", + "@vue/shared": "3.6.0-rc.2" } }, "node_modules/@vue/server-renderer/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, @@ -1643,9 +1641,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.15", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", - "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "dev": true, "funding": [ { @@ -1716,9 +1714,9 @@ } }, "node_modules/postcss": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", - "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", "dev": true, "funding": [ { @@ -1736,7 +1734,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.12", + "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -2271,18 +2269,18 @@ } }, "node_modules/vue": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.6.0-beta.17.tgz", - "integrity": "sha512-sVvFEriOhBjKIi7Jy+vwnlcBVRKhvxMVG4lh2erX1vrlaNKggURyWttRF+z5Vo+6VYriVsXAUyOgaQZub0W8ug==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.6.0-rc.2.tgz", + "integrity": "sha512-pBgoISqETcufJ1e92vVW2/D5MEbCm2XHlC/5dq3hWq8s17tx9v5BEdYv4hojJ0yEEDidYxUL7itS+vV32wfZrw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.6.0-beta.17", - "@vue/compiler-sfc": "3.6.0-beta.17", - "@vue/runtime-dom": "3.6.0-beta.17", - "@vue/runtime-vapor": "3.6.0-beta.17", - "@vue/server-renderer": "3.6.0-beta.17", - "@vue/shared": "3.6.0-beta.17" + "@vue/compiler-dom": "3.6.0-rc.2", + "@vue/compiler-sfc": "3.6.0-rc.2", + "@vue/runtime-dom": "3.6.0-rc.2", + "@vue/runtime-vapor": "3.6.0-rc.2", + "@vue/server-renderer": "3.6.0-rc.2", + "@vue/shared": "3.6.0-rc.2" }, "peerDependencies": { "typescript": "*" @@ -2294,9 +2292,9 @@ } }, "node_modules/vue/node_modules/@vue/shared": { - "version": "3.6.0-beta.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-beta.17.tgz", - "integrity": "sha512-iuDH2UPBc8nzqgL4dcLiqpAJoJfQe70RcPM34+p+dVk0ThJD9jjpLPjzouP+RoRrXkAPOC7jmMncafdv69BGaA==", + "version": "3.6.0-rc.2", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.6.0-rc.2.tgz", + "integrity": "sha512-Tz44lKLjxhWRu3GJ38768dc2hW4XhDtTB5aUo5fCMis6YDyFzwQYkrD/B9SuQ1v/ailv6UVR3wSHiujNXSjMCQ==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index d504b85..d16a6e4 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "devDependencies": { "@types/bun": "^1.3.14", - "vitepress": "^2.0.0-alpha.18", + "vitepress": "^2.0.0-alpha.19", "vue": "^3.6.0-rc.2" }, "dependencies": {