add turtle
Some checks failed
Deploy / build-and-deploy (push) Has been cancelled

This commit is contained in:
2025-09-16 17:37:43 +08:00
parent d9bcb81109
commit 4b59d1cf17
9 changed files with 277 additions and 176 deletions

350
package-lock.json generated
View File

@@ -11,21 +11,22 @@
"@codemirror/lang-cpp": "^6.0.3",
"@codemirror/lang-python": "^6.2.1",
"@vueuse/core": "^13.9.0",
"axios": "^1.11.0",
"axios": "^1.12.2",
"client-zip": "1.7.0",
"codemirror": "^6.0.2",
"copy-text-to-clipboard": "^3.2.1",
"fflate": "^0.8.2",
"file-saver": "^2.0.5",
"naive-ui": "^2.42.0",
"naive-ui": "^2.43.1",
"normalize.css": "^8.0.1",
"query-string": "^9.3.0",
"skulpt": "^1.2.0",
"vue": "^3.5.21",
"vue-codemirror": "^6.1.1"
},
"devDependencies": {
"@iconify/vue": "^5.0.0",
"@rsbuild/core": "^1.5.6",
"@rsbuild/core": "^1.5.7",
"@rsbuild/plugin-vue": "^1.1.2",
"@types/file-saver": "^2.0.7",
"prettier": "^3.6.2",
@@ -188,7 +189,7 @@
},
"node_modules/@css-render/vue3-ssr": {
"version": "0.15.14",
"resolved": "https://registry.npmmirror.com/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz",
"resolved": "https://registry.npmjs.org/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz",
"integrity": "sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==",
"license": "MIT",
"peerDependencies": {
@@ -317,7 +318,7 @@
},
"node_modules/@juggle/resize-observer": {
"version": "3.4.0",
"resolved": "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
"resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
"integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==",
"license": "Apache-2.0"
},
@@ -422,26 +423,26 @@
}
},
"node_modules/@napi-rs/wasm-runtime": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.3.tgz",
"integrity": "sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==",
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.5.tgz",
"integrity": "sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/core": "^1.4.5",
"@emnapi/runtime": "^1.4.5",
"@tybys/wasm-util": "^0.10.0"
"@emnapi/core": "^1.5.0",
"@emnapi/runtime": "^1.5.0",
"@tybys/wasm-util": "^0.10.1"
}
},
"node_modules/@rsbuild/core": {
"version": "1.5.6",
"resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.5.6.tgz",
"integrity": "sha512-EbJ9HlkI2Y2C59pAv877rHz3qS+5dy9anXxagOOXEHt4u3/uqSj7pcz3cD+UWkFQ4XOGJ3mMwkPfR7EE24t12A==",
"version": "1.5.7",
"resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.5.7.tgz",
"integrity": "sha512-1/yyJJfZo4hqMsL3WQQmMDYFp0L/znHqjHrYE6NKsiKhkBEwEwSVMk1M5QoRu2EcRL1acW5AJf7WJyKFfPZ//Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@rspack/core": "1.5.3",
"@rspack/core": "1.5.4",
"@rspack/lite-tapable": "~1.0.1",
"@swc/helpers": "^0.5.17",
"core-js": "~3.45.1",
@@ -469,28 +470,28 @@
}
},
"node_modules/@rspack/binding": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.3.tgz",
"integrity": "sha512-bWAKligHxelx3XxOgFmK6k1vR+ANxjBXLXTmgOiZxsJNScHJap3HYViXWJHKj5jvdXEvg9sC8TE7WNctCfa8iQ==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.4.tgz",
"integrity": "sha512-HtLF5uxbf77hDarB/Wl26XgaTyWkhMogDPUOC1mLU+YPke1vYem8p8yr+McUkRtbhYoqtFMcVcT3S8jKJPP3+g==",
"dev": true,
"license": "MIT",
"optionalDependencies": {
"@rspack/binding-darwin-arm64": "1.5.3",
"@rspack/binding-darwin-x64": "1.5.3",
"@rspack/binding-linux-arm64-gnu": "1.5.3",
"@rspack/binding-linux-arm64-musl": "1.5.3",
"@rspack/binding-linux-x64-gnu": "1.5.3",
"@rspack/binding-linux-x64-musl": "1.5.3",
"@rspack/binding-wasm32-wasi": "1.5.3",
"@rspack/binding-win32-arm64-msvc": "1.5.3",
"@rspack/binding-win32-ia32-msvc": "1.5.3",
"@rspack/binding-win32-x64-msvc": "1.5.3"
"@rspack/binding-darwin-arm64": "1.5.4",
"@rspack/binding-darwin-x64": "1.5.4",
"@rspack/binding-linux-arm64-gnu": "1.5.4",
"@rspack/binding-linux-arm64-musl": "1.5.4",
"@rspack/binding-linux-x64-gnu": "1.5.4",
"@rspack/binding-linux-x64-musl": "1.5.4",
"@rspack/binding-wasm32-wasi": "1.5.4",
"@rspack/binding-win32-arm64-msvc": "1.5.4",
"@rspack/binding-win32-ia32-msvc": "1.5.4",
"@rspack/binding-win32-x64-msvc": "1.5.4"
}
},
"node_modules/@rspack/binding-darwin-arm64": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.3.tgz",
"integrity": "sha512-8R1uqr5E2CzRZjsA1QLXkD4xwcsiHmLJTIzCNj9QJ4+lCw6XgtPqpHZuk3zNROLayijEKwotGXJFHJIbgv1clA==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.4.tgz",
"integrity": "sha512-qD+n4D8KOOSoWdngK87iXl6lqbx1J63f6/xZFLPVIstzxIUbNyo9V9tpJYsoT3gYpnLkPVqA+KwQI0ozgYEXvw==",
"cpu": [
"arm64"
],
@@ -502,9 +503,9 @@
]
},
"node_modules/@rspack/binding-darwin-x64": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.3.tgz",
"integrity": "sha512-R4sb+scZbaBasyS+TQ6dRvv+f/2ZaZ0nXgY7t/ehcuGRvUz3S7FTJF/Mr/Ocxj5oVfb06thDAm+zaAVg+hsM9A==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.4.tgz",
"integrity": "sha512-g75qkrLLa28kVp7pkWAjUADwr+0GumEF134VWHuL+TAm7VCw4IXRKnZhquE8K5kcqRpLcLX4guRqZzK9OEu/hg==",
"cpu": [
"x64"
],
@@ -516,9 +517,9 @@
]
},
"node_modules/@rspack/binding-linux-arm64-gnu": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.3.tgz",
"integrity": "sha512-NeDJJRNTLx8wOQT+si90th7cdt04I2F697Mp5w0a3Jf3XHAmsraBMn0phdLGWJoUWrrfVGthjgZDl5lcc1UHEA==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.4.tgz",
"integrity": "sha512-O3zSTz/dy1EJHd7YS8zzmAG2zxewEZJi7QlYiU+YhFuqjP2ab6ZFWLHkglvrSy4aHyC8fx9OkSjioYtHUcCSdQ==",
"cpu": [
"arm64"
],
@@ -530,9 +531,9 @@
]
},
"node_modules/@rspack/binding-linux-arm64-musl": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.3.tgz",
"integrity": "sha512-M9utPq9s7zJkKapUlyfwwYT/rjZ+XM56NHQMUH9MVYgMJIl+66QURgWUXCAbuogxf1XWayUGQaZsgypoOrTG9A==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.4.tgz",
"integrity": "sha512-ki84vbRY1gbf1T3BHiKAdi3m0hQFmqiAIYvFuLGA9Vop1R+W2C3Mzh8Q5YL6TnWOP0eiwizuigztz4/07fPf6Q==",
"cpu": [
"arm64"
],
@@ -544,9 +545,9 @@
]
},
"node_modules/@rspack/binding-linux-x64-gnu": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.3.tgz",
"integrity": "sha512-AsKqU4pIg0yYg1VvSEU0NspIwCexqXD2AYE0wujAAwBo0hOfbt5dl1JCK7idiZdIQvoFg86HbfGwdHIVcFLI0w==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.4.tgz",
"integrity": "sha512-SJVQSgR1JqDEnURI79SRcn/gcdG+yFb2mLUYV/TSPUTxMIlu44p5+fnOY6+6qMtjQhO6J4C2+UyV00U/yjlikA==",
"cpu": [
"x64"
],
@@ -558,9 +559,9 @@
]
},
"node_modules/@rspack/binding-linux-x64-musl": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.3.tgz",
"integrity": "sha512-0aHuvDef92pFZaHhk8Mp8RP9TfTzhQ+Pjqrc2ixRS/FeJA+jVB2CSaYlAPP4QrgXdmW7tewSxEw8hYhF9CNv/A==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.4.tgz",
"integrity": "sha512-UL1xw3yLsFH6UD/ubXXbRaDRNl+qI22QgugKYuqmpDGfOcVlv4fGpf3faPwYJasqPjhDWvcoyd8OqI+ftWKWEA==",
"cpu": [
"x64"
],
@@ -572,9 +573,9 @@
]
},
"node_modules/@rspack/binding-wasm32-wasi": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.3.tgz",
"integrity": "sha512-Y7KN/ZRuWcFdjCzuZE0JsPwTqJAz1aipJsEOI3whBUj9Va2RwbR9r3vbW6OscS0Wm3rTJAfqH0xwx9x3GksnAw==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.4.tgz",
"integrity": "sha512-VPGhik1M87SZQzmX2sRvXrO6KgycSbmJ/bLqVuXHYGjsLkYqw4auKCJrkZcKa1GVsSvpVNC3FlTUk2QxjpmNSA==",
"cpu": [
"wasm32"
],
@@ -586,9 +587,9 @@
}
},
"node_modules/@rspack/binding-win32-arm64-msvc": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.3.tgz",
"integrity": "sha512-I9SqobDwFwcIUNzr+VwvR2lUGqfarOpFDp7mZmA6+qO/V0yJxS0aqBIwNoZB/UFPbUh71OdmFavBzcTYE9vPSg==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.4.tgz",
"integrity": "sha512-YxhK8dTv/6ff//C5Djm87TkiePuvGRoxLgsHgwR7C0rnA8lS5gLNwrNY9FjAY1x6WamnGGirFK97rigaeTDn+g==",
"cpu": [
"arm64"
],
@@ -600,9 +601,9 @@
]
},
"node_modules/@rspack/binding-win32-ia32-msvc": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.3.tgz",
"integrity": "sha512-pPSzSycfK03lLNxzwEkrRUfqETB7y0KEEbO0HcGX63EC9Ne4SILJfkkH55G0PO4aT/dfAosAlkf6V64ATgrHGA==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.4.tgz",
"integrity": "sha512-SU4EyAo1BI1zV/sSDF2cqoN+Qq6iIHLwtq0RJI5WQ4Yjn/mhhRFxNoerPCJUpPiiCxvG/IrpGzGi90MwFnMtNQ==",
"cpu": [
"ia32"
],
@@ -614,9 +615,9 @@
]
},
"node_modules/@rspack/binding-win32-x64-msvc": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.3.tgz",
"integrity": "sha512-He/GrFVrCZ4gBrHSxGd7mnwk9A9BDkAeZZEBnfK4n/HfXxU32WX5jiAGacFoJQYFLDOWTAcmxFad37TSs61zXw==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.4.tgz",
"integrity": "sha512-xEgOCnD2FCUcxRgg3X5etq81vvf8rWwvPASfrG234diSduvU6zRiuiyYFMLTMDwQNEzZEFGHp7wIZNCKHudbng==",
"cpu": [
"x64"
],
@@ -628,14 +629,14 @@
]
},
"node_modules/@rspack/core": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.3.tgz",
"integrity": "sha512-EMNXysJyqsfd2aVys5C7GDZKaLEcoN5qgs7ZFhWOWJGKgBqjdKTljyRTd4RRZV4fV6iAko/WrxnAxmzZNk8mjA==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.4.tgz",
"integrity": "sha512-s/bVG+KRZjIpPP2f4TOQkJ/D+rql7HAV0MFEWoqoyeNnln/p6I28RYbw5zYF+Qg4J0swR8Qk2pbn7qlIdGusLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@module-federation/runtime-tools": "0.18.0",
"@rspack/binding": "1.5.3",
"@rspack/binding": "1.5.4",
"@rspack/lite-tapable": "1.0.1"
},
"engines": {
@@ -671,9 +672,9 @@
}
},
"node_modules/@tybys/wasm-util": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz",
"integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==",
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
"integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -1172,9 +1173,9 @@
"license": "MIT"
},
"node_modules/axios": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz",
"integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz",
"integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -1601,7 +1602,7 @@
},
"node_modules/evtd": {
"version": "0.2.4",
"resolved": "https://registry.npmmirror.com/evtd/-/evtd-0.2.4.tgz",
"resolved": "https://registry.npmjs.org/evtd/-/evtd-0.2.4.tgz",
"integrity": "sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==",
"license": "MIT"
},
@@ -1859,6 +1860,12 @@
"jiti": "lib/jiti-cli.mjs"
}
},
"node_modules/jsbi": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz",
"integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==",
"license": "Apache-2.0"
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -1938,9 +1945,9 @@
}
},
"node_modules/naive-ui": {
"version": "2.42.0",
"resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.42.0.tgz",
"integrity": "sha512-c7cXR2YgOjgtBadXHwiWL4Y0tpGLAI5W5QzzHksOi22iuHXoSGMAzdkVTGVPE/PM0MSGQ/JtUIzCx2Y0hU0vTQ==",
"version": "2.43.1",
"resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.43.1.tgz",
"integrity": "sha512-w52W0mOhdOGt4uucFSZmP0DI44PCsFyuxeLSs9aoUThfIuxms90MYjv46Qrr7xprjyJRw5RU6vYpCx4o9ind3A==",
"license": "MIT",
"dependencies": {
"@css-render/plugin-bem": "^0.15.14",
@@ -1961,7 +1968,7 @@
"treemate": "^0.3.11",
"vdirs": "^0.1.8",
"vooks": "^0.2.12",
"vueuc": "^0.4.63"
"vueuc": "^0.4.65"
},
"peerDependencies": {
"vue": "^3.0.0"
@@ -2138,9 +2145,9 @@
}
},
"node_modules/seemly": {
"version": "0.3.8",
"resolved": "https://registry.npmmirror.com/seemly/-/seemly-0.3.8.tgz",
"integrity": "sha512-MW8Qs6vbzo0pHmDpFSYPna+lwpZ6Zk1ancbajw/7E8TKtHdV+1DfZZD+kKJEhG/cAoB/i+LiT+5msZOqj0DwRA==",
"version": "0.3.10",
"resolved": "https://registry.npmjs.org/seemly/-/seemly-0.3.10.tgz",
"integrity": "sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==",
"license": "MIT"
},
"node_modules/serialize-javascript": {
@@ -2153,6 +2160,18 @@
"randombytes": "^2.1.0"
}
},
"node_modules/skulpt": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/skulpt/-/skulpt-1.2.0.tgz",
"integrity": "sha512-T0cv0sdSOXLlIJTuyXSeYJ3TFdWYSZfX2PcBLpRKrKZ3dTbVQXRMiYudSuko2xzcyMif47DS2ShatCwjCbsSsA==",
"license": "MIT",
"dependencies": {
"jsbi": "^3.1.4"
},
"engines": {
"node": ">=10.4"
}
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
@@ -2337,7 +2356,7 @@
},
"node_modules/vdirs": {
"version": "0.1.8",
"resolved": "https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz",
"resolved": "https://registry.npmjs.org/vdirs/-/vdirs-0.1.8.tgz",
"integrity": "sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==",
"license": "MIT",
"dependencies": {
@@ -2349,7 +2368,7 @@
},
"node_modules/vooks": {
"version": "0.2.12",
"resolved": "https://registry.npmmirror.com/vooks/-/vooks-0.2.12.tgz",
"resolved": "https://registry.npmjs.org/vooks/-/vooks-0.2.12.tgz",
"integrity": "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==",
"license": "MIT",
"dependencies": {
@@ -2419,9 +2438,9 @@
}
},
"node_modules/vueuc": {
"version": "0.4.64",
"resolved": "https://registry.npmmirror.com/vueuc/-/vueuc-0.4.64.tgz",
"integrity": "sha512-wlJQj7fIwKK2pOEoOq4Aro8JdPOGpX8aWQhV8YkTW9OgWD2uj2O8ANzvSsIGjx7LTOc7QbS7sXdxHi6XvRnHPA==",
"version": "0.4.65",
"resolved": "https://registry.npmjs.org/vueuc/-/vueuc-0.4.65.tgz",
"integrity": "sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ==",
"license": "MIT",
"dependencies": {
"@css-render/vue3-ssr": "^0.15.10",
@@ -2649,7 +2668,7 @@
},
"@css-render/vue3-ssr": {
"version": "0.15.14",
"resolved": "https://registry.npmmirror.com/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz",
"resolved": "https://registry.npmjs.org/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz",
"integrity": "sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==",
"requires": {}
},
@@ -2754,7 +2773,7 @@
},
"@juggle/resize-observer": {
"version": "3.4.0",
"resolved": "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
"resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
"integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA=="
},
"@lezer/common": {
@@ -2852,24 +2871,24 @@
}
},
"@napi-rs/wasm-runtime": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.3.tgz",
"integrity": "sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==",
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.5.tgz",
"integrity": "sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==",
"dev": true,
"optional": true,
"requires": {
"@emnapi/core": "^1.4.5",
"@emnapi/runtime": "^1.4.5",
"@tybys/wasm-util": "^0.10.0"
"@emnapi/core": "^1.5.0",
"@emnapi/runtime": "^1.5.0",
"@tybys/wasm-util": "^0.10.1"
}
},
"@rsbuild/core": {
"version": "1.5.6",
"resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.5.6.tgz",
"integrity": "sha512-EbJ9HlkI2Y2C59pAv877rHz3qS+5dy9anXxagOOXEHt4u3/uqSj7pcz3cD+UWkFQ4XOGJ3mMwkPfR7EE24t12A==",
"version": "1.5.7",
"resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.5.7.tgz",
"integrity": "sha512-1/yyJJfZo4hqMsL3WQQmMDYFp0L/znHqjHrYE6NKsiKhkBEwEwSVMk1M5QoRu2EcRL1acW5AJf7WJyKFfPZ//Q==",
"dev": true,
"requires": {
"@rspack/core": "1.5.3",
"@rspack/core": "1.5.4",
"@rspack/lite-tapable": "~1.0.1",
"@swc/helpers": "^0.5.17",
"core-js": "~3.45.1",
@@ -2887,69 +2906,69 @@
}
},
"@rspack/binding": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.3.tgz",
"integrity": "sha512-bWAKligHxelx3XxOgFmK6k1vR+ANxjBXLXTmgOiZxsJNScHJap3HYViXWJHKj5jvdXEvg9sC8TE7WNctCfa8iQ==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.5.4.tgz",
"integrity": "sha512-HtLF5uxbf77hDarB/Wl26XgaTyWkhMogDPUOC1mLU+YPke1vYem8p8yr+McUkRtbhYoqtFMcVcT3S8jKJPP3+g==",
"dev": true,
"requires": {
"@rspack/binding-darwin-arm64": "1.5.3",
"@rspack/binding-darwin-x64": "1.5.3",
"@rspack/binding-linux-arm64-gnu": "1.5.3",
"@rspack/binding-linux-arm64-musl": "1.5.3",
"@rspack/binding-linux-x64-gnu": "1.5.3",
"@rspack/binding-linux-x64-musl": "1.5.3",
"@rspack/binding-wasm32-wasi": "1.5.3",
"@rspack/binding-win32-arm64-msvc": "1.5.3",
"@rspack/binding-win32-ia32-msvc": "1.5.3",
"@rspack/binding-win32-x64-msvc": "1.5.3"
"@rspack/binding-darwin-arm64": "1.5.4",
"@rspack/binding-darwin-x64": "1.5.4",
"@rspack/binding-linux-arm64-gnu": "1.5.4",
"@rspack/binding-linux-arm64-musl": "1.5.4",
"@rspack/binding-linux-x64-gnu": "1.5.4",
"@rspack/binding-linux-x64-musl": "1.5.4",
"@rspack/binding-wasm32-wasi": "1.5.4",
"@rspack/binding-win32-arm64-msvc": "1.5.4",
"@rspack/binding-win32-ia32-msvc": "1.5.4",
"@rspack/binding-win32-x64-msvc": "1.5.4"
}
},
"@rspack/binding-darwin-arm64": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.3.tgz",
"integrity": "sha512-8R1uqr5E2CzRZjsA1QLXkD4xwcsiHmLJTIzCNj9QJ4+lCw6XgtPqpHZuk3zNROLayijEKwotGXJFHJIbgv1clA==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.4.tgz",
"integrity": "sha512-qD+n4D8KOOSoWdngK87iXl6lqbx1J63f6/xZFLPVIstzxIUbNyo9V9tpJYsoT3gYpnLkPVqA+KwQI0ozgYEXvw==",
"dev": true,
"optional": true
},
"@rspack/binding-darwin-x64": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.3.tgz",
"integrity": "sha512-R4sb+scZbaBasyS+TQ6dRvv+f/2ZaZ0nXgY7t/ehcuGRvUz3S7FTJF/Mr/Ocxj5oVfb06thDAm+zaAVg+hsM9A==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.4.tgz",
"integrity": "sha512-g75qkrLLa28kVp7pkWAjUADwr+0GumEF134VWHuL+TAm7VCw4IXRKnZhquE8K5kcqRpLcLX4guRqZzK9OEu/hg==",
"dev": true,
"optional": true
},
"@rspack/binding-linux-arm64-gnu": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.3.tgz",
"integrity": "sha512-NeDJJRNTLx8wOQT+si90th7cdt04I2F697Mp5w0a3Jf3XHAmsraBMn0phdLGWJoUWrrfVGthjgZDl5lcc1UHEA==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.4.tgz",
"integrity": "sha512-O3zSTz/dy1EJHd7YS8zzmAG2zxewEZJi7QlYiU+YhFuqjP2ab6ZFWLHkglvrSy4aHyC8fx9OkSjioYtHUcCSdQ==",
"dev": true,
"optional": true
},
"@rspack/binding-linux-arm64-musl": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.3.tgz",
"integrity": "sha512-M9utPq9s7zJkKapUlyfwwYT/rjZ+XM56NHQMUH9MVYgMJIl+66QURgWUXCAbuogxf1XWayUGQaZsgypoOrTG9A==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.4.tgz",
"integrity": "sha512-ki84vbRY1gbf1T3BHiKAdi3m0hQFmqiAIYvFuLGA9Vop1R+W2C3Mzh8Q5YL6TnWOP0eiwizuigztz4/07fPf6Q==",
"dev": true,
"optional": true
},
"@rspack/binding-linux-x64-gnu": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.3.tgz",
"integrity": "sha512-AsKqU4pIg0yYg1VvSEU0NspIwCexqXD2AYE0wujAAwBo0hOfbt5dl1JCK7idiZdIQvoFg86HbfGwdHIVcFLI0w==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.4.tgz",
"integrity": "sha512-SJVQSgR1JqDEnURI79SRcn/gcdG+yFb2mLUYV/TSPUTxMIlu44p5+fnOY6+6qMtjQhO6J4C2+UyV00U/yjlikA==",
"dev": true,
"optional": true
},
"@rspack/binding-linux-x64-musl": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.3.tgz",
"integrity": "sha512-0aHuvDef92pFZaHhk8Mp8RP9TfTzhQ+Pjqrc2ixRS/FeJA+jVB2CSaYlAPP4QrgXdmW7tewSxEw8hYhF9CNv/A==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.4.tgz",
"integrity": "sha512-UL1xw3yLsFH6UD/ubXXbRaDRNl+qI22QgugKYuqmpDGfOcVlv4fGpf3faPwYJasqPjhDWvcoyd8OqI+ftWKWEA==",
"dev": true,
"optional": true
},
"@rspack/binding-wasm32-wasi": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.3.tgz",
"integrity": "sha512-Y7KN/ZRuWcFdjCzuZE0JsPwTqJAz1aipJsEOI3whBUj9Va2RwbR9r3vbW6OscS0Wm3rTJAfqH0xwx9x3GksnAw==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.4.tgz",
"integrity": "sha512-VPGhik1M87SZQzmX2sRvXrO6KgycSbmJ/bLqVuXHYGjsLkYqw4auKCJrkZcKa1GVsSvpVNC3FlTUk2QxjpmNSA==",
"dev": true,
"optional": true,
"requires": {
@@ -2957,34 +2976,34 @@
}
},
"@rspack/binding-win32-arm64-msvc": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.3.tgz",
"integrity": "sha512-I9SqobDwFwcIUNzr+VwvR2lUGqfarOpFDp7mZmA6+qO/V0yJxS0aqBIwNoZB/UFPbUh71OdmFavBzcTYE9vPSg==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.4.tgz",
"integrity": "sha512-YxhK8dTv/6ff//C5Djm87TkiePuvGRoxLgsHgwR7C0rnA8lS5gLNwrNY9FjAY1x6WamnGGirFK97rigaeTDn+g==",
"dev": true,
"optional": true
},
"@rspack/binding-win32-ia32-msvc": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.3.tgz",
"integrity": "sha512-pPSzSycfK03lLNxzwEkrRUfqETB7y0KEEbO0HcGX63EC9Ne4SILJfkkH55G0PO4aT/dfAosAlkf6V64ATgrHGA==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.4.tgz",
"integrity": "sha512-SU4EyAo1BI1zV/sSDF2cqoN+Qq6iIHLwtq0RJI5WQ4Yjn/mhhRFxNoerPCJUpPiiCxvG/IrpGzGi90MwFnMtNQ==",
"dev": true,
"optional": true
},
"@rspack/binding-win32-x64-msvc": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.3.tgz",
"integrity": "sha512-He/GrFVrCZ4gBrHSxGd7mnwk9A9BDkAeZZEBnfK4n/HfXxU32WX5jiAGacFoJQYFLDOWTAcmxFad37TSs61zXw==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.4.tgz",
"integrity": "sha512-xEgOCnD2FCUcxRgg3X5etq81vvf8rWwvPASfrG234diSduvU6zRiuiyYFMLTMDwQNEzZEFGHp7wIZNCKHudbng==",
"dev": true,
"optional": true
},
"@rspack/core": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.3.tgz",
"integrity": "sha512-EMNXysJyqsfd2aVys5C7GDZKaLEcoN5qgs7ZFhWOWJGKgBqjdKTljyRTd4RRZV4fV6iAko/WrxnAxmzZNk8mjA==",
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.5.4.tgz",
"integrity": "sha512-s/bVG+KRZjIpPP2f4TOQkJ/D+rql7HAV0MFEWoqoyeNnln/p6I28RYbw5zYF+Qg4J0swR8Qk2pbn7qlIdGusLQ==",
"dev": true,
"requires": {
"@module-federation/runtime-tools": "0.18.0",
"@rspack/binding": "1.5.3",
"@rspack/binding": "1.5.4",
"@rspack/lite-tapable": "1.0.1"
}
},
@@ -3004,9 +3023,9 @@
}
},
"@tybys/wasm-util": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz",
"integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==",
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
"integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
"dev": true,
"optional": true,
"requires": {
@@ -3413,9 +3432,9 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"axios": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz",
"integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz",
"integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==",
"requires": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.4",
@@ -3695,7 +3714,7 @@
},
"evtd": {
"version": "0.2.4",
"resolved": "https://registry.npmmirror.com/evtd/-/evtd-0.2.4.tgz",
"resolved": "https://registry.npmjs.org/evtd/-/evtd-0.2.4.tgz",
"integrity": "sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw=="
},
"fast-deep-equal": {
@@ -3856,6 +3875,11 @@
"integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==",
"dev": true
},
"jsbi": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz",
"integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ=="
},
"json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -3917,9 +3941,9 @@
}
},
"naive-ui": {
"version": "2.42.0",
"resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.42.0.tgz",
"integrity": "sha512-c7cXR2YgOjgtBadXHwiWL4Y0tpGLAI5W5QzzHksOi22iuHXoSGMAzdkVTGVPE/PM0MSGQ/JtUIzCx2Y0hU0vTQ==",
"version": "2.43.1",
"resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.43.1.tgz",
"integrity": "sha512-w52W0mOhdOGt4uucFSZmP0DI44PCsFyuxeLSs9aoUThfIuxms90MYjv46Qrr7xprjyJRw5RU6vYpCx4o9ind3A==",
"requires": {
"@css-render/plugin-bem": "^0.15.14",
"@css-render/vue3-ssr": "^0.15.14",
@@ -3939,7 +3963,7 @@
"treemate": "^0.3.11",
"vdirs": "^0.1.8",
"vooks": "^0.2.12",
"vueuc": "^0.4.63"
"vueuc": "^0.4.65"
}
},
"nanoid": {
@@ -4034,9 +4058,9 @@
}
},
"seemly": {
"version": "0.3.8",
"resolved": "https://registry.npmmirror.com/seemly/-/seemly-0.3.8.tgz",
"integrity": "sha512-MW8Qs6vbzo0pHmDpFSYPna+lwpZ6Zk1ancbajw/7E8TKtHdV+1DfZZD+kKJEhG/cAoB/i+LiT+5msZOqj0DwRA=="
"version": "0.3.10",
"resolved": "https://registry.npmjs.org/seemly/-/seemly-0.3.10.tgz",
"integrity": "sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q=="
},
"serialize-javascript": {
"version": "6.0.2",
@@ -4047,6 +4071,14 @@
"randombytes": "^2.1.0"
}
},
"skulpt": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/skulpt/-/skulpt-1.2.0.tgz",
"integrity": "sha512-T0cv0sdSOXLlIJTuyXSeYJ3TFdWYSZfX2PcBLpRKrKZ3dTbVQXRMiYudSuko2xzcyMif47DS2ShatCwjCbsSsA==",
"requires": {
"jsbi": "^3.1.4"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
@@ -4153,7 +4185,7 @@
},
"vdirs": {
"version": "0.1.8",
"resolved": "https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz",
"resolved": "https://registry.npmjs.org/vdirs/-/vdirs-0.1.8.tgz",
"integrity": "sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==",
"requires": {
"evtd": "^0.2.2"
@@ -4161,7 +4193,7 @@
},
"vooks": {
"version": "0.2.12",
"resolved": "https://registry.npmmirror.com/vooks/-/vooks-0.2.12.tgz",
"resolved": "https://registry.npmjs.org/vooks/-/vooks-0.2.12.tgz",
"integrity": "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==",
"requires": {
"evtd": "^0.2.2"
@@ -4202,9 +4234,9 @@
}
},
"vueuc": {
"version": "0.4.64",
"resolved": "https://registry.npmmirror.com/vueuc/-/vueuc-0.4.64.tgz",
"integrity": "sha512-wlJQj7fIwKK2pOEoOq4Aro8JdPOGpX8aWQhV8YkTW9OgWD2uj2O8ANzvSsIGjx7LTOc7QbS7sXdxHi6XvRnHPA==",
"version": "0.4.65",
"resolved": "https://registry.npmjs.org/vueuc/-/vueuc-0.4.65.tgz",
"integrity": "sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ==",
"requires": {
"@css-render/vue3-ssr": "^0.15.10",
"@juggle/resize-observer": "^3.3.1",

View File

@@ -13,21 +13,22 @@
"@codemirror/lang-cpp": "^6.0.3",
"@codemirror/lang-python": "^6.2.1",
"@vueuse/core": "^13.9.0",
"axios": "^1.11.0",
"axios": "^1.12.2",
"client-zip": "1.7.0",
"codemirror": "^6.0.2",
"copy-text-to-clipboard": "^3.2.1",
"fflate": "^0.8.2",
"file-saver": "^2.0.5",
"naive-ui": "^2.42.0",
"naive-ui": "^2.43.1",
"normalize.css": "^8.0.1",
"query-string": "^9.3.0",
"skulpt": "^1.2.0",
"vue": "^3.5.21",
"vue-codemirror": "^6.1.1"
},
"devDependencies": {
"@iconify/vue": "^5.0.0",
"@rsbuild/core": "^1.5.6",
"@rsbuild/core": "^1.5.7",
"@rsbuild/plugin-vue": "^1.1.2",
"@types/file-saver": "^2.0.7",
"prettier": "^3.6.2",

1
public/turtle.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128"><path fill="#bdcf47" d="M112.7 59.21s3.94-2.21 4.93-2.77s4.6-2.82 5.91-.84c.77 1.16-.7 4.44-3.05 7.86c-2.14 3.13-7.12 9.56-7.4 10.83s1.11 6.36 1.53 8.33s1.74 6.71 1.17 8.54s-3.43 6.85-10.75 6.76c-5.82-.07-7.51-1.78-7.7-2.82c-.14-.75-.56-3.24-.56-3.24s-4.79 2.96-7.04 4.08s-8.31 4.22-8.31 4.22s1.17 5.35 1.36 7.51s.86 5.25-.28 7.32c-1.03 1.88-4.25 5.02-11.83 4.97c-5.92-.04-7.41-1.88-8.35-3c-.94-1.13-1.13-6.48-1.13-7.6s-.19-5.07-.19-5.07s-8.02-.4-12.86-.75c-4.38-.32-10.16-.99-10.16-.99s.21 2.33.42 4.01c.19 1.5.23 4.64-1.34 6.17c-2.11 2.06-7.56 2.21-10.56 1.92c-3-.28-7.18-1.83-8.4-4.55s.38-6.29 1.03-8.35c.58-1.81 1.6-4.41 1.22-5.16s-4.04-1.69-9.29-6.95c-5.26-5.26-12.13-23.52 3.28-36.23c15.49-12.76 43.81 1.1 45.31 2.04c1.54.96 53.04 3.76 53.04 3.76"/><path fill="#6e823a" d="M66.25 25.28c-13.93.62-24.38 7.52-29.57 15.06c-3.1 4.5-4.65 7.74-4.65 7.74s4.81.14 9.15 2.46c5 2.67 10.8 5.56 14.61 18.13c2.87 9.5 3.98 18.53 11.44 20.52c8.45 2.25 28.16 1.13 37.59-8.02s11.26-16.05 8.87-25.06s-13.17-25.05-28.16-29.28C79.06 25 72.58 25 66.25 25.28"/><path fill="#484e23" d="M111.93 51.32c-.42-.99-1.3-2.5-1.3-2.5s-.07 2.05-.25 3.13c-.28 1.76-1.25 5.42-1.81 4.88c-1-.97-5.73-6.92-7.98-10.23c-1.71-2.52-7.6-9.11-7.74-11.26c-.07-1.06 1.27-4.65 1.27-4.65s-1.22-.7-2.35-1.34c-.88-.49-2.16-1.03-2.16-1.03s-.77 4.9-1.62 5.82c-.75.81-5.32 2.6-8.87 3.94c-4.29 1.62-8.45 3.73-10 4.01c-1.36.25-9.09-1.41-12-1.97c-3.66-.7-9.18-2.26-10.45-3.17c-1.48-1.06-3.07-3.78-3.07-3.78s-.89.61-1.78 1.31c-.88.69-2.02 2.06-2.02 2.06s2.31 2.32 2.44 3.18c.18 1.2-1.27 2.83-2.46 4.38c-.72.93-2.75 4.85-2.75 4.85s.97.09 2.15.63c1.23.57 2.38 1.16 2.38 1.16s2.97-6.9 4.9-7.53c1.65-.54 6.3.99 9.68 1.69c4.79.99 9.64 1.87 10.66 3.17c1.06 1.34 2.06 6.68 3.03 11.19C70.89 64.2 73.64 77.02 73 78c-.63.99-5.7.63-8.59.28c-2.45-.3-6.41-1.76-6.41-1.76s.58 2.11.77 2.67c.28.81 1.16 3.06 1.16 3.06s5.67 2.5 22.42.95s25.03-12.96 27.38-18.02c3.14-6.78 3.54-10.39 3.54-10.39s-.92-2.48-1.34-3.47M96.65 73.21c-4.24 2.67-15.2 5.49-17.18 4.43c-1.58-.85-3.94-13.94-5.07-19.78c-.72-3.74-2.45-9.42-1.41-11.19c.7-1.2 4.79-2.99 7.81-4.4c2.87-1.33 6.97-3.13 8.17-2.99c1.7.2 5.35 6.12 9.01 11.19s7.67 10.35 7.74 12.18c.09 1.84-4.7 7.82-9.07 10.56"/><path fill="#2a2b28" d="M41.18 65.86c.5 2.83-.95 5.75-4.07 6.02c-2.56.22-4.59-1.57-5.09-4.4s1.14-5.49 3.68-5.94c2.52-.45 4.98 1.48 5.48 4.32m-18.36.25c.07 2.84-2.42 5.69-5.5 5.11c-2.53-.48-3.99-2.73-3.71-5.55c.29-2.82 2.59-4.9 5.15-4.65s3.99 2.13 4.06 5.09m7.95 10.48c1.16-.79 3.1-2.67 4.36-1.06c1.27 1.62-.92 3.1-2.18 4.01c-1.27.92-4.08 3.17-6.12 3.17c-1.9 0-4.79-2.32-6.62-3.87c-1.49-1.26-2.18-2.89-1.34-3.87s2.14-.62 3.24.35c1.27 1.13 3.72 3.38 4.72 3.38c.98.01 2.39-1.05 3.94-2.11"/></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -5,6 +5,7 @@ import { code } from "../composables/code"
const LANGS = [
["python", "Python"],
["turtle", "海龟绘图"],
["c", "C 语言"],
["cpp", "C++"],
]
@@ -35,6 +36,6 @@ const languages: SelectOption[] = LANGS.map((it) => ({
</template>
<style scoped>
.select {
width: 120px;
width: 125px;
}
</style>

View File

@@ -18,6 +18,7 @@ const cache: Cache = {
python: useStorage("code_python", sources["python"]),
c: useStorage("code_c", sources["c"]),
cpp: useStorage("code_cpp", sources["cpp"]),
turtle: useStorage("code_turtle", sources["turtle"]),
},
}
@@ -29,6 +30,7 @@ export const input = ref("")
export const output = ref("")
export const status = ref(Status.NotStarted)
export const loading = ref(false)
export const turtleRunId = ref(0)
export const size = ref(0)
export const debug = ref(false)
@@ -100,15 +102,22 @@ export function reset() {
export async function run() {
loading.value = true
const cleanCode = code.value.trim()
if (!cleanCode) return
output.value = ""
status.value = Status.NotStarted
const result = await submit(
{ value: cleanCode, language: code.language },
input.value.trim(),
)
output.value = result.output || ""
status.value = result.status
if (!cleanCode) {
loading.value = false
return
}
if (code.language === "turtle") {
turtleRunId.value++
} else {
output.value = ""
status.value = Status.NotStarted
const result = await submit(
{ value: cleanCode, language: code.language },
input.value.trim(),
)
output.value = result.output || ""
status.value = result.status
}
loading.value = false
}

View File

@@ -1,7 +1,9 @@
<script lang="ts" setup>
import copyTextToClipboard from "copy-text-to-clipboard"
import { useMessage } from "naive-ui"
import { computed } from "vue"
import { computed, watch, useTemplateRef } from "vue"
// @ts-ignore
import * as Sk from "skulpt"
import CodeEditor from "../components/CodeEditor.vue"
import { analyse, analyzeError, showAnalyse } from "../composables/analyse"
import {
@@ -13,6 +15,7 @@ import {
reset,
size,
status,
turtleRunId,
} from "../composables/code"
import { Status } from "../types"
@@ -26,6 +29,42 @@ function copy() {
function handleDebug() {
debug.value = true
}
const turtleCanvas = useTemplateRef("turtle")
function builtinRead(x: any) {
if (
Sk.builtinFiles === undefined ||
Sk.builtinFiles["files"][x] === undefined
)
throw "文件没有找到:'" + x + "'"
return Sk.builtinFiles["files"][x]
}
function runSkulptTurtle() {
const canvas = turtleCanvas.value
if (!canvas) return
canvas.innerHTML = ""
Sk.configure({
output: console.log,
read: builtinRead,
inputfun: function () {
return input.value
},
__future__: Sk.python3,
})
Sk.TurtleGraphics = {
target: canvas,
}
Sk.misceval
.asyncToPromise(function () {
return Sk.importMainWithBody("<stdin>", false, code.value, true)
})
.catch((err: any) => {
output.value += String(err)
})
}
watch(turtleRunId, () => runSkulptTurtle())
</script>
<template>
@@ -82,6 +121,7 @@ function handleDebug() {
</template>
<template #2>
<CodeEditor
v-if="code.language !== 'turtle'"
icon="streamline-emojis:hibiscus"
label="输出框"
v-model="output"
@@ -115,6 +155,7 @@ function handleDebug() {
</n-popover>
</template>
</CodeEditor>
<div v-else ref="turtle" class="canvas"></div>
</template>
</n-split>
</template>
@@ -126,4 +167,9 @@ function handleDebug() {
.container {
height: calc(100vh - 60px);
}
.canvas {
width: 100%;
height: 100%;
}
</style>

View File

@@ -21,7 +21,7 @@
import qs from "query-string"
import { onMounted, ref, useTemplateRef } from "vue"
import { code, debug } from "../composables/code"
import { useDark } from "@vueuse/core";
import { useDark } from "@vueuse/core"
const src = ref("")
const loading = ref(true)
@@ -29,7 +29,6 @@ const main = useTemplateRef("main")
const isDark = useDark()
onMounted(() => {
// const url = "http://localhost:8000"
const url = import.meta.env.PUBLIC_PYVIZ_URL
const base = url + "/iframe-embed.html"

View File

@@ -6,6 +6,17 @@ const pythonSource = ""
const javaSource =
"public class Main {\r\n public static void main(String[] args) {\r\n \r\n }\r\n}"
const turtleSource = `import turtle
t = turtle.Turtle()
t.speed(1)
for i in range(4):
t.forward(100)
t.left(90)
turtle.done()`
export const languageToId = {
c: 50,
cpp: 54,
@@ -18,4 +29,5 @@ export const sources = {
cpp: cppSource,
java: javaSource,
python: pythonSource,
turtle: turtleSource,
}

View File

@@ -1,6 +1,6 @@
import { RemovableRef } from "@vueuse/core"
export type LANGUAGE = "c" | "python" | "cpp"
export type LANGUAGE = "c" | "python" | "cpp" | "turtle"
export interface Code {
value: string