diff --git a/package-lock.json b/package-lock.json index 2a173d30..088b6a6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@next2d/player", - "version": "2.1.1", + "version": "2.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@next2d/player", - "version": "2.1.1", + "version": "2.1.2", "license": "MIT", "workspaces": [ "packages/*" @@ -22,19 +22,19 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.1.2", - "@types/node": "^22.13.13", - "@typescript-eslint/eslint-plugin": "^8.28.0", - "@typescript-eslint/parser": "^8.28.0", - "@vitest/web-worker": "^3.0.9", + "@types/node": "^22.13.15", + "@typescript-eslint/eslint-plugin": "^8.29.0", + "@typescript-eslint/parser": "^8.29.0", + "@vitest/web-worker": "^3.1.1", "eslint": "^9.23.0", "eslint-plugin-unused-imports": "^4.1.4", "globals": "^16.0.0", "jsdom": "^26.0.0", - "rollup": "^4.37.0", + "rollup": "^4.38.0", "tslib": "^2.8.1", "typescript": "^5.8.2", - "vite": "^6.2.3", - "vitest": "^3.0.9", + "vite": "^6.2.4", + "vitest": "^3.1.1", "vitest-webgl-canvas-mock": "^1.1.0" }, "funding": { @@ -188,9 +188,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", - "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", "cpu": [ "ppc64" ], @@ -205,9 +205,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", - "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", "cpu": [ "arm" ], @@ -222,9 +222,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", - "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", "cpu": [ "arm64" ], @@ -239,9 +239,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", - "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", "cpu": [ "x64" ], @@ -256,9 +256,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", - "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", "cpu": [ "arm64" ], @@ -273,9 +273,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", - "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", "cpu": [ "x64" ], @@ -290,9 +290,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", - "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", "cpu": [ "arm64" ], @@ -307,9 +307,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", - "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", "cpu": [ "x64" ], @@ -324,9 +324,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", - "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", "cpu": [ "arm" ], @@ -341,9 +341,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", - "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", "cpu": [ "arm64" ], @@ -358,9 +358,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", - "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", "cpu": [ "ia32" ], @@ -375,9 +375,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", - "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", "cpu": [ "loong64" ], @@ -392,9 +392,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", - "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", "cpu": [ "mips64el" ], @@ -409,9 +409,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", - "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", "cpu": [ "ppc64" ], @@ -426,9 +426,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", - "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", "cpu": [ "riscv64" ], @@ -443,9 +443,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", - "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", "cpu": [ "s390x" ], @@ -460,9 +460,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", - "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", "cpu": [ "x64" ], @@ -477,9 +477,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", - "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", "cpu": [ "arm64" ], @@ -494,9 +494,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", - "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", "cpu": [ "x64" ], @@ -511,9 +511,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", - "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", "cpu": [ "arm64" ], @@ -528,9 +528,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", - "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", "cpu": [ "x64" ], @@ -545,9 +545,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", - "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", "cpu": [ "x64" ], @@ -562,9 +562,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", - "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", "cpu": [ "arm64" ], @@ -579,9 +579,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", - "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", "cpu": [ "ia32" ], @@ -596,9 +596,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", - "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", "cpu": [ "x64" ], @@ -1100,9 +1100,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", - "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.38.0.tgz", + "integrity": "sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg==", "cpu": [ "arm" ], @@ -1114,9 +1114,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", - "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.38.0.tgz", + "integrity": "sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ==", "cpu": [ "arm64" ], @@ -1128,9 +1128,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", - "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.38.0.tgz", + "integrity": "sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==", "cpu": [ "arm64" ], @@ -1142,9 +1142,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", - "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.38.0.tgz", + "integrity": "sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==", "cpu": [ "x64" ], @@ -1156,9 +1156,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", - "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.38.0.tgz", + "integrity": "sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA==", "cpu": [ "arm64" ], @@ -1170,9 +1170,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", - "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.38.0.tgz", + "integrity": "sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg==", "cpu": [ "x64" ], @@ -1184,9 +1184,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", - "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.38.0.tgz", + "integrity": "sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg==", "cpu": [ "arm" ], @@ -1198,9 +1198,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", - "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.38.0.tgz", + "integrity": "sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg==", "cpu": [ "arm" ], @@ -1212,9 +1212,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", - "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.38.0.tgz", + "integrity": "sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA==", "cpu": [ "arm64" ], @@ -1226,9 +1226,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", - "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.38.0.tgz", + "integrity": "sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ==", "cpu": [ "arm64" ], @@ -1240,9 +1240,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", - "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.38.0.tgz", + "integrity": "sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg==", "cpu": [ "loong64" ], @@ -1254,9 +1254,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", - "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.38.0.tgz", + "integrity": "sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw==", "cpu": [ "ppc64" ], @@ -1268,9 +1268,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", - "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.38.0.tgz", + "integrity": "sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg==", "cpu": [ "riscv64" ], @@ -1282,9 +1282,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.37.0.tgz", - "integrity": "sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.38.0.tgz", + "integrity": "sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA==", "cpu": [ "riscv64" ], @@ -1296,9 +1296,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", - "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.38.0.tgz", + "integrity": "sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q==", "cpu": [ "s390x" ], @@ -1310,9 +1310,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", - "integrity": "sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.38.0.tgz", + "integrity": "sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==", "cpu": [ "x64" ], @@ -1324,9 +1324,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.37.0.tgz", - "integrity": "sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.38.0.tgz", + "integrity": "sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g==", "cpu": [ "x64" ], @@ -1338,9 +1338,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", - "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.38.0.tgz", + "integrity": "sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg==", "cpu": [ "arm64" ], @@ -1352,9 +1352,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", - "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.38.0.tgz", + "integrity": "sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA==", "cpu": [ "ia32" ], @@ -1366,9 +1366,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", - "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.38.0.tgz", + "integrity": "sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw==", "cpu": [ "x64" ], @@ -1380,9 +1380,9 @@ ] }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true, "license": "MIT" }, @@ -1394,9 +1394,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.13.tgz", - "integrity": "sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==", + "version": "22.13.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.15.tgz", + "integrity": "sha512-imAbQEEbVni6i6h6Bd5xkCRwLqFc8hihCsi2GbtDoAtUcAFQ6Zs4pFXTZUUbroTkXdImczWM9AI8eZUuybXE3w==", "dev": true, "license": "MIT", "dependencies": { @@ -1411,17 +1411,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.28.0.tgz", - "integrity": "sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", + "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.28.0", - "@typescript-eslint/type-utils": "8.28.0", - "@typescript-eslint/utils": "8.28.0", - "@typescript-eslint/visitor-keys": "8.28.0", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/type-utils": "8.29.0", + "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1441,16 +1441,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.28.0.tgz", - "integrity": "sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", + "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.28.0", - "@typescript-eslint/types": "8.28.0", - "@typescript-eslint/typescript-estree": "8.28.0", - "@typescript-eslint/visitor-keys": "8.28.0", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "debug": "^4.3.4" }, "engines": { @@ -1466,14 +1466,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.28.0.tgz", - "integrity": "sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", + "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.28.0", - "@typescript-eslint/visitor-keys": "8.28.0" + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1484,14 +1484,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.28.0.tgz", - "integrity": "sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", + "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.28.0", - "@typescript-eslint/utils": "8.28.0", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/utils": "8.29.0", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -1508,9 +1508,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.28.0.tgz", - "integrity": "sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", + "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", "dev": true, "license": "MIT", "engines": { @@ -1522,14 +1522,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.28.0.tgz", - "integrity": "sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", + "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.28.0", - "@typescript-eslint/visitor-keys": "8.28.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1575,16 +1575,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.28.0.tgz", - "integrity": "sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", + "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.28.0", - "@typescript-eslint/types": "8.28.0", - "@typescript-eslint/typescript-estree": "8.28.0" + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1599,13 +1599,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.28.0.tgz", - "integrity": "sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", + "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/types": "8.29.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -1630,14 +1630,14 @@ } }, "node_modules/@vitest/expect": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.9.tgz", - "integrity": "sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.1.tgz", + "integrity": "sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.9", - "@vitest/utils": "3.0.9", + "@vitest/spy": "3.1.1", + "@vitest/utils": "3.1.1", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, @@ -1646,13 +1646,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.9.tgz", - "integrity": "sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.1.tgz", + "integrity": "sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.9", + "@vitest/spy": "3.1.1", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -1683,9 +1683,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.9.tgz", - "integrity": "sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", + "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", "dev": true, "license": "MIT", "dependencies": { @@ -1696,13 +1696,13 @@ } }, "node_modules/@vitest/runner": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.9.tgz", - "integrity": "sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.1.tgz", + "integrity": "sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.0.9", + "@vitest/utils": "3.1.1", "pathe": "^2.0.3" }, "funding": { @@ -1710,13 +1710,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.9.tgz", - "integrity": "sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.1.tgz", + "integrity": "sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.9", + "@vitest/pretty-format": "3.1.1", "magic-string": "^0.30.17", "pathe": "^2.0.3" }, @@ -1725,9 +1725,9 @@ } }, "node_modules/@vitest/spy": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.9.tgz", - "integrity": "sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.1.tgz", + "integrity": "sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1738,13 +1738,13 @@ } }, "node_modules/@vitest/utils": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.9.tgz", - "integrity": "sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz", + "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.9", + "@vitest/pretty-format": "3.1.1", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, @@ -1753,9 +1753,9 @@ } }, "node_modules/@vitest/web-worker": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/web-worker/-/web-worker-3.0.9.tgz", - "integrity": "sha512-6ofXRWDelTlFIOaGLVtHPiIEzoTQK/DkH6DMrG7ZurrTF9szaiH86/u3qncA1cXsgp+vN19Kj+YYl4mbL+EDQQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/web-worker/-/web-worker-3.1.1.tgz", + "integrity": "sha512-l9c4YSlD1PN3sX2W5vL3ySzUHtK0N5qX10rgCpeUqRRiEmDhISkpYbw0RKhntFHMG2NRlbqvygs6hK9pr5nANA==", "dev": true, "license": "MIT", "dependencies": { @@ -1765,7 +1765,7 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "3.0.9" + "vitest": "3.1.1" } }, "node_modules/acorn": { @@ -2291,9 +2291,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", - "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -2304,31 +2304,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.1", - "@esbuild/android-arm": "0.25.1", - "@esbuild/android-arm64": "0.25.1", - "@esbuild/android-x64": "0.25.1", - "@esbuild/darwin-arm64": "0.25.1", - "@esbuild/darwin-x64": "0.25.1", - "@esbuild/freebsd-arm64": "0.25.1", - "@esbuild/freebsd-x64": "0.25.1", - "@esbuild/linux-arm": "0.25.1", - "@esbuild/linux-arm64": "0.25.1", - "@esbuild/linux-ia32": "0.25.1", - "@esbuild/linux-loong64": "0.25.1", - "@esbuild/linux-mips64el": "0.25.1", - "@esbuild/linux-ppc64": "0.25.1", - "@esbuild/linux-riscv64": "0.25.1", - "@esbuild/linux-s390x": "0.25.1", - "@esbuild/linux-x64": "0.25.1", - "@esbuild/netbsd-arm64": "0.25.1", - "@esbuild/netbsd-x64": "0.25.1", - "@esbuild/openbsd-arm64": "0.25.1", - "@esbuild/openbsd-x64": "0.25.1", - "@esbuild/sunos-x64": "0.25.1", - "@esbuild/win32-arm64": "0.25.1", - "@esbuild/win32-ia32": "0.25.1", - "@esbuild/win32-x64": "0.25.1" + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" } }, "node_modules/escape-string-regexp": { @@ -2549,9 +2549,9 @@ } }, "node_modules/expect-type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.0.tgz", - "integrity": "sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3335,9 +3335,9 @@ "license": "MIT" }, "node_modules/nwsapi": { - "version": "2.2.19", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.19.tgz", - "integrity": "sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==", + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", "dev": true, "license": "MIT" }, @@ -3633,13 +3633,13 @@ } }, "node_modules/rollup": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.37.0.tgz", - "integrity": "sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.38.0.tgz", + "integrity": "sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.7" }, "bin": { "rollup": "dist/bin/rollup" @@ -3649,26 +3649,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.37.0", - "@rollup/rollup-android-arm64": "4.37.0", - "@rollup/rollup-darwin-arm64": "4.37.0", - "@rollup/rollup-darwin-x64": "4.37.0", - "@rollup/rollup-freebsd-arm64": "4.37.0", - "@rollup/rollup-freebsd-x64": "4.37.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.37.0", - "@rollup/rollup-linux-arm-musleabihf": "4.37.0", - "@rollup/rollup-linux-arm64-gnu": "4.37.0", - "@rollup/rollup-linux-arm64-musl": "4.37.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.37.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.37.0", - "@rollup/rollup-linux-riscv64-gnu": "4.37.0", - "@rollup/rollup-linux-riscv64-musl": "4.37.0", - "@rollup/rollup-linux-s390x-gnu": "4.37.0", - "@rollup/rollup-linux-x64-gnu": "4.37.0", - "@rollup/rollup-linux-x64-musl": "4.37.0", - "@rollup/rollup-win32-arm64-msvc": "4.37.0", - "@rollup/rollup-win32-ia32-msvc": "4.37.0", - "@rollup/rollup-win32-x64-msvc": "4.37.0", + "@rollup/rollup-android-arm-eabi": "4.38.0", + "@rollup/rollup-android-arm64": "4.38.0", + "@rollup/rollup-darwin-arm64": "4.38.0", + "@rollup/rollup-darwin-x64": "4.38.0", + "@rollup/rollup-freebsd-arm64": "4.38.0", + "@rollup/rollup-freebsd-x64": "4.38.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.38.0", + "@rollup/rollup-linux-arm-musleabihf": "4.38.0", + "@rollup/rollup-linux-arm64-gnu": "4.38.0", + "@rollup/rollup-linux-arm64-musl": "4.38.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.38.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.38.0", + "@rollup/rollup-linux-riscv64-gnu": "4.38.0", + "@rollup/rollup-linux-riscv64-musl": "4.38.0", + "@rollup/rollup-linux-s390x-gnu": "4.38.0", + "@rollup/rollup-linux-x64-gnu": "4.38.0", + "@rollup/rollup-linux-x64-musl": "4.38.0", + "@rollup/rollup-win32-arm64-msvc": "4.38.0", + "@rollup/rollup-win32-ia32-msvc": "4.38.0", + "@rollup/rollup-win32-x64-msvc": "4.38.0", "fsevents": "~2.3.2" } }, @@ -4082,9 +4082,9 @@ } }, "node_modules/vite": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.3.tgz", - "integrity": "sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz", + "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==", "dev": true, "license": "MIT", "dependencies": { @@ -4154,9 +4154,9 @@ } }, "node_modules/vite-node": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.9.tgz", - "integrity": "sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.1.tgz", + "integrity": "sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==", "dev": true, "license": "MIT", "dependencies": { @@ -4177,31 +4177,31 @@ } }, "node_modules/vitest": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.9.tgz", - "integrity": "sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.1.tgz", + "integrity": "sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "3.0.9", - "@vitest/mocker": "3.0.9", - "@vitest/pretty-format": "^3.0.9", - "@vitest/runner": "3.0.9", - "@vitest/snapshot": "3.0.9", - "@vitest/spy": "3.0.9", - "@vitest/utils": "3.0.9", + "@vitest/expect": "3.1.1", + "@vitest/mocker": "3.1.1", + "@vitest/pretty-format": "^3.1.1", + "@vitest/runner": "3.1.1", + "@vitest/snapshot": "3.1.1", + "@vitest/spy": "3.1.1", + "@vitest/utils": "3.1.1", "chai": "^5.2.0", "debug": "^4.4.0", - "expect-type": "^1.1.0", + "expect-type": "^1.2.0", "magic-string": "^0.30.17", "pathe": "^2.0.3", - "std-env": "^3.8.0", + "std-env": "^3.8.1", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.0.9", + "vite-node": "3.1.1", "why-is-node-running": "^2.3.0" }, "bin": { @@ -4217,8 +4217,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.0.9", - "@vitest/ui": "3.0.9", + "@vitest/browser": "3.1.1", + "@vitest/ui": "3.1.1", "happy-dom": "*", "jsdom": "*" }, diff --git a/package.json b/package.json index 0f901845..aef47d60 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@next2d/player", - "version": "2.1.1", + "version": "2.1.2", "description": "Experience the fast and beautiful anti-aliased rendering of WebGL. You can create rich, interactive graphics, cross-platform applications and games without worrying about browser or device compatibility.", "author": "Toshiyuki Ienaga (https://github.com/ienaga/)", "license": "MIT", @@ -51,19 +51,19 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.1.2", - "@types/node": "^22.13.13", - "@typescript-eslint/eslint-plugin": "^8.28.0", - "@typescript-eslint/parser": "^8.28.0", - "@vitest/web-worker": "^3.0.9", + "@types/node": "^22.13.15", + "@typescript-eslint/eslint-plugin": "^8.29.0", + "@typescript-eslint/parser": "^8.29.0", + "@vitest/web-worker": "^3.1.1", "eslint": "^9.23.0", "eslint-plugin-unused-imports": "^4.1.4", "globals": "^16.0.0", "jsdom": "^26.0.0", - "rollup": "^4.37.0", + "rollup": "^4.38.0", "tslib": "^2.8.1", "typescript": "^5.8.2", - "vite": "^6.2.3", - "vitest": "^3.0.9", + "vite": "^6.2.4", + "vitest": "^3.1.1", "vitest-webgl-canvas-mock": "^1.1.0" }, "peerDependencies": { diff --git a/packages/display/src/BitmapData/service/BitmapDataCanvasToBufferService.test.ts b/packages/display/src/BitmapData/service/BitmapDataCanvasToBufferService.test.ts new file mode 100644 index 00000000..dd6417fb --- /dev/null +++ b/packages/display/src/BitmapData/service/BitmapDataCanvasToBufferService.test.ts @@ -0,0 +1,13 @@ +import { execute } from "./BitmapDataCanvasToBufferService"; +import { describe, expect, it } from "vitest"; + +describe("BitmapDataCanvasToBufferService.js test", () => +{ + it("execute test", () => + { + const canvas = document.createElement("canvas"); + + const buffer = execute(canvas); + expect(buffer.length).toBe(180000); + }); +}); \ No newline at end of file diff --git a/packages/display/src/BitmapData/service/BitmapDataImageToBufferService.test.ts b/packages/display/src/BitmapData/service/BitmapDataImageToBufferService.test.ts new file mode 100644 index 00000000..bcf88f72 --- /dev/null +++ b/packages/display/src/BitmapData/service/BitmapDataImageToBufferService.test.ts @@ -0,0 +1,12 @@ +import { execute } from "./BitmapDataImageToBufferService"; +import { describe, expect, it } from "vitest"; + +describe("BitmapDataImageToBufferService.js test", () => +{ + it("execute test", () => + { + const iamge = new Image(100, 100); + const buffer = execute(iamge); + expect(buffer.length).toBe(40000); + }); +}); \ No newline at end of file diff --git a/packages/display/src/DisplayObject/service/DisplayObjectBaseBuildService.test.ts b/packages/display/src/DisplayObject/service/DisplayObjectBaseBuildService.test.ts new file mode 100644 index 00000000..3f521720 --- /dev/null +++ b/packages/display/src/DisplayObject/service/DisplayObjectBaseBuildService.test.ts @@ -0,0 +1,56 @@ +import type { IDictionaryTag } from "../../interface/IDictionaryTag"; +import { execute } from "./DisplayObjectBaseBuildService"; +import { DisplayObject } from "../../DisplayObject"; +import { MovieClip } from "../../MovieClip"; +import { LoaderInfo } from "../../LoaderInfo"; +import { describe, expect, it } from "vitest"; +import { + $loaderInfoMap, + $rootMap +} from "../../DisplayObjectUtil"; + +describe("DisplayObjectBaseBuildService.js test", () => +{ + it("execute test case1", () => + { + const displayObject = new DisplayObject(); + const movieClip = new MovieClip(); + + $loaderInfoMap.set(movieClip, new LoaderInfo()); + + const mockTag = { + "characterId": 1, + "clipDepth": 1, + "startFrame": 2, + "endFrame": 10, + "name": "test" + } as IDictionaryTag; + + expect(displayObject.dictionaryId).toBe(-1); + expect(displayObject.characterId).toBe(-1); + expect(displayObject.clipDepth).toBe(0); + expect(displayObject.startFrame).toBe(1); + expect(displayObject.endFrame).toBe(0); + expect(displayObject.name).toBe(""); + expect(displayObject.placeId).toBe(-1); + expect(displayObject.parent).toBe(null); + expect($rootMap.has(displayObject)).toBe(false); + expect($loaderInfoMap.has(displayObject)).toBe(false); + + execute(displayObject, 99, mockTag, movieClip, 22); + + expect(displayObject.dictionaryId).toBe(99); + expect(displayObject.characterId).toBe(mockTag.characterId); + expect(displayObject.clipDepth).toBe(mockTag.clipDepth); + expect(displayObject.startFrame).toBe(mockTag.startFrame); + expect(displayObject.endFrame).toBe(mockTag.endFrame); + expect(displayObject.name).toBe(mockTag.name); + expect(displayObject.placeId).toBe(22); + expect(displayObject.parent).toBe(movieClip); + expect($rootMap.has(displayObject)).toBe(true); + expect($loaderInfoMap.has(displayObject)).toBe(true); + + $rootMap.delete(displayObject); + $loaderInfoMap.delete(movieClip); + }); +}); \ No newline at end of file diff --git a/packages/display/src/DisplayObject/service/DisplayObjectDispatchAddedEventService.test.ts b/packages/display/src/DisplayObject/service/DisplayObjectDispatchAddedEventService.test.ts index 627a1bb2..9f72a589 100644 --- a/packages/display/src/DisplayObject/service/DisplayObjectDispatchAddedEventService.test.ts +++ b/packages/display/src/DisplayObject/service/DisplayObjectDispatchAddedEventService.test.ts @@ -1,14 +1,26 @@ import { execute } from "./DisplayObjectDispatchAddedEventService"; import { DisplayObject } from "../../DisplayObject"; -import { describe, expect, it } from "vitest"; +import { describe, expect, it, vi } from "vitest"; +import { Event } from "@next2d/events"; describe("DisplayObjectDispatchAddedEventService.js test", () => { it("execute test case", () => { const displayObject = new DisplayObject(); + displayObject.willTrigger = vi.fn(() => true); + + let type = ""; + displayObject.dispatchEvent = vi.fn((event): boolean => + { + type = event.type; + return true; + }); + + expect(type).toBe(""); expect(displayObject.$added).toBe(false); execute(displayObject); expect(displayObject.$added).toBe(true); + expect(type).toBe(Event.ADDED); }); }); \ No newline at end of file diff --git a/packages/display/src/DisplayObject/service/DisplayObjectDispatchAddedToStageEventService.test.ts b/packages/display/src/DisplayObject/service/DisplayObjectDispatchAddedToStageEventService.test.ts index a50f6ed6..deb1d5dc 100644 --- a/packages/display/src/DisplayObject/service/DisplayObjectDispatchAddedToStageEventService.test.ts +++ b/packages/display/src/DisplayObject/service/DisplayObjectDispatchAddedToStageEventService.test.ts @@ -1,18 +1,29 @@ import { execute } from "./DisplayObjectDispatchAddedToStageEventService"; import { DisplayObject } from "../../DisplayObject"; import { $stageAssignedMap } from "../../DisplayObjectUtil"; -import { describe, expect, it } from "vitest"; +import { describe, expect, it, vi } from "vitest"; +import { Event } from "@next2d/events"; describe("DisplayObjectDispatchAddedToStageEventService.js test", () => { it("execute test case", () => { const displayObject = new DisplayObject(); + displayObject.willTrigger = vi.fn(() => true); + let type = ""; + displayObject.dispatchEvent = vi.fn((event): boolean => + { + type = event.type; + return true; + }); + $stageAssignedMap.add(displayObject.instanceId); + expect(type).toBe(""); expect(displayObject.$addedToStage).toBe(false); execute(displayObject); + expect(type).toBe(Event.ADDED_TO_STAGE); $stageAssignedMap.delete(displayObject.instanceId); expect(displayObject.$addedToStage).toBe(true); }); diff --git a/packages/display/src/DisplayObject/service/DisplayObjectDispatchRemovedEventService.test.ts b/packages/display/src/DisplayObject/service/DisplayObjectDispatchRemovedEventService.test.ts new file mode 100644 index 00000000..9f179fef --- /dev/null +++ b/packages/display/src/DisplayObject/service/DisplayObjectDispatchRemovedEventService.test.ts @@ -0,0 +1,26 @@ +import { execute } from "./DisplayObjectDispatchRemovedEventService"; +import { DisplayObject } from "../../DisplayObject"; +import { describe, expect, it, vi } from "vitest"; +import { Event } from "@next2d/events"; + +describe("DisplayObjectDispatchRemovedEventService.js test", () => +{ + it("execute test case", () => + { + const displayObject = new DisplayObject(); + displayObject.willTrigger = vi.fn(() => true); + let type = ""; + displayObject.dispatchEvent = vi.fn((event): boolean => + { + type = event.type; + return true; + }); + + displayObject.$added = true; + expect(type).toBe(""); + expect(displayObject.$added).toBe(true); + execute(displayObject); + expect(displayObject.$added).toBe(false); + expect(type).toBe(Event.REMOVED); + }); +}); \ No newline at end of file diff --git a/packages/display/src/DisplayObject/service/DisplayObjectDispatchRemovedToStageEventService.test.ts b/packages/display/src/DisplayObject/service/DisplayObjectDispatchRemovedToStageEventService.test.ts new file mode 100644 index 00000000..ac3cb385 --- /dev/null +++ b/packages/display/src/DisplayObject/service/DisplayObjectDispatchRemovedToStageEventService.test.ts @@ -0,0 +1,33 @@ +import { execute } from "./DisplayObjectDispatchRemovedToStageEventService"; +import { DisplayObject } from "../../DisplayObject"; +import { $stageAssignedMap } from "../../DisplayObjectUtil"; +import { describe, expect, it, vi } from "vitest"; +import { Event } from "@next2d/events"; + +describe("DisplayObjectDispatchRemovedToStageEventService.js test", () => +{ + it("execute test case", () => + { + const displayObject = new DisplayObject(); + displayObject.willTrigger = vi.fn(() => true); + let type = ""; + displayObject.dispatchEvent = vi.fn((event): boolean => + { + type = event.type; + return true; + }); + + $stageAssignedMap.add(displayObject.instanceId); + + displayObject.$addedToStage = true; + expect(type).toBe(""); + expect(displayObject.$addedToStage).toBe(true); + + execute(displayObject); + + expect(type).toBe(Event.REMOVED_FROM_STAGE); + expect(displayObject.$addedToStage).toBe(false); + + $stageAssignedMap.delete(displayObject.instanceId); + }); +}); \ No newline at end of file diff --git a/packages/display/src/DisplayObject/service/DisplayObjectGenerateHashService.test.ts b/packages/display/src/DisplayObject/service/DisplayObjectGenerateHashService.test.ts new file mode 100644 index 00000000..28d3f635 --- /dev/null +++ b/packages/display/src/DisplayObject/service/DisplayObjectGenerateHashService.test.ts @@ -0,0 +1,10 @@ +import { execute } from "./DisplayObjectGenerateHashService"; +import { describe, expect, it } from "vitest"; + +describe("DisplayObjectGenerateHashService.js test", () => +{ + it("execute test", () => + { + expect(execute(new Float32Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))).toBe(9749870); + }); +}); \ No newline at end of file diff --git a/packages/display/src/DisplayObject/service/DisplayObjectRemoveService.test.ts b/packages/display/src/DisplayObject/service/DisplayObjectRemoveService.test.ts new file mode 100644 index 00000000..d0a6d86e --- /dev/null +++ b/packages/display/src/DisplayObject/service/DisplayObjectRemoveService.test.ts @@ -0,0 +1,18 @@ +import { execute } from "./DisplayObjectRemoveService"; +import { DisplayObject } from "../../DisplayObject"; +import { MovieClip } from "../../MovieClip"; +import { describe, expect, it } from "vitest"; + +describe("DisplayObjectRemoveService.js test", () => +{ + it("execute test case1", () => + { + const displayObject = new DisplayObject(); + const movieClip = new MovieClip(); + movieClip.addChild(displayObject); + + expect(movieClip.numChildren).toBe(1); + execute(displayObject); + expect(movieClip.numChildren).toBe(0); + }); +}); \ No newline at end of file diff --git a/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateClipQueueUseCase.test.ts b/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateClipQueueUseCase.test.ts new file mode 100644 index 00000000..48b364d2 --- /dev/null +++ b/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateClipQueueUseCase.test.ts @@ -0,0 +1,28 @@ +import { execute } from "./DisplayObjectContainerGenerateClipQueueUseCase"; +import { describe, expect, it } from "vitest"; +import { renderQueue } from "@next2d/render-queue"; +import { MovieClip } from "../../MovieClip"; +import { $RENDERER_CONTAINER_TYPE } from "../../DisplayObjectUtil"; + +describe("DisplayObjectContainerGenerateClipQueueUseCase.js test", () => +{ + it("execute test", () => + { + const movieClip = new MovieClip(); + const matrix = new Float32Array(6); + + renderQueue.offset = 0; + expect(renderQueue.offset).toBe(0); + renderQueue.buffer.fill(0); + expect(renderQueue.buffer.length).toBe(256); + + execute(movieClip, matrix); + + expect(renderQueue.buffer[0]).toBe($RENDERER_CONTAINER_TYPE); + expect(renderQueue.buffer[1]).toBe(movieClip.children.length); + expect(renderQueue.offset).toBe(2); + + renderQueue.buffer.fill(0); + renderQueue.offset = 0; + }); +}); \ No newline at end of file diff --git a/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateClipQueueUseCase.ts b/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateClipQueueUseCase.ts index 457f9958..95500239 100644 --- a/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateClipQueueUseCase.ts +++ b/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateClipQueueUseCase.ts @@ -10,7 +10,6 @@ import { execute as shapeGenerateClipQueueUseCase } from "../../Shape/usecase/Sh * Generate mask drawing data of DisplayObjectContainer to pass to renderer * * @param {DisplayObjectContainer} display_object_container - * @param {number[]} render_queue * @param {Float32Array} matrix * @return {void} * @method diff --git a/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateRenderQueueUseCase.test.ts b/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateRenderQueueUseCase.test.ts new file mode 100644 index 00000000..5d0d1e3e --- /dev/null +++ b/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateRenderQueueUseCase.test.ts @@ -0,0 +1,39 @@ +import { execute } from "./DisplayObjectContainerGenerateRenderQueueUseCase"; +import { describe, expect, it } from "vitest"; +import { renderQueue } from "@next2d/render-queue"; +import { MovieClip } from "../../MovieClip"; +import { $RENDERER_CONTAINER_TYPE } from "../../DisplayObjectUtil"; + +describe("DisplayObjectContainerGenerateRenderQueueUseCase.js test", () => +{ + it("execute test", () => + { + const movieClip = new MovieClip(); + movieClip.addChild(new MovieClip()); + const matrix = new Float32Array([1, 0, 0, 1, 0, 0]); + const colorTransform = new Float32Array([1, 1, 1, 1, 0, 0, 0, 0]); + + renderQueue.offset = 0; + expect(renderQueue.offset).toBe(0); + + renderQueue.buffer.fill(0); + expect(renderQueue.buffer.length).toBe(256); + + execute( + movieClip, [], matrix, colorTransform, + 0, 0, 0, 0 + ); + + expect(renderQueue.buffer[0]).toBe(1); + expect(renderQueue.buffer[1]).toBe($RENDERER_CONTAINER_TYPE); + expect(renderQueue.buffer[2]).toBe(0); + expect(renderQueue.buffer[3]).toBe(movieClip.children.length); + expect(renderQueue.buffer[4]).toBe(-1); + expect(renderQueue.buffer[5]).toBe(0); + expect(renderQueue.buffer[6]).toBe(0); + expect(renderQueue.offset).toBe(7); + + renderQueue.buffer.fill(0); + renderQueue.offset = 0; + }); +}); \ No newline at end of file diff --git a/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateRenderQueueUseCase.ts b/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateRenderQueueUseCase.ts index ca63bd25..9d97d20d 100644 --- a/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateRenderQueueUseCase.ts +++ b/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerGenerateRenderQueueUseCase.ts @@ -59,7 +59,7 @@ export const execute =

( ? ColorTransform.multiply(color_transform, rawColor) : color_transform; - const alpha: number = $clamp(tColorTransform[3] + tColorTransform[7] / 255, 0, 1, 0); + const alpha = $clamp(tColorTransform[3] + tColorTransform[7] / 255, 0, 1, 0); if (!alpha) { if (tColorTransform !== color_transform) { ColorTransform.release(tColorTransform); diff --git a/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerPrepareUseCase.test.ts b/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerPrepareUseCase.test.ts new file mode 100644 index 00000000..87573032 --- /dev/null +++ b/packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerPrepareUseCase.test.ts @@ -0,0 +1,20 @@ +import { execute } from "./DisplayObjectContainerPrepareUseCase"; +import { describe, expect, it } from "vitest"; +import { MovieClip } from "../../MovieClip"; + +describe("DisplayObjectContainerPrepareUseCase.js test", () => +{ + it("execute test", () => + { + const container = new MovieClip(); + const movieClip = container.addChild(new MovieClip()); + + expect(movieClip.$canSound).toBe(true); + expect(movieClip.$canAction).toBe(true); + + execute(container); + + expect(movieClip.$canSound).toBe(false); + expect(movieClip.$canAction).toBe(false); + }); +}); \ No newline at end of file diff --git a/packages/display/src/Graphics/service/GraphicsCalcLineBoundsService.test.ts b/packages/display/src/Graphics/service/GraphicsCalcLineBoundsService.test.ts new file mode 100644 index 00000000..03196413 --- /dev/null +++ b/packages/display/src/Graphics/service/GraphicsCalcLineBoundsService.test.ts @@ -0,0 +1,23 @@ +import { Graphics } from "../../Graphics"; +import { execute } from "./GraphicsCalcLineBoundsService"; +import { describe, expect, it } from "vitest"; + +describe("GraphicsCalcLineBoundsService.js test", () => +{ + it("execute test", () => + { + const graphics = new Graphics(); + + expect(graphics.xMin).toBe(Number.MAX_VALUE); + expect(graphics.yMin).toBe(Number.MAX_VALUE); + expect(graphics.xMax).toBe(-Number.MAX_VALUE); + expect(graphics.yMax).toBe(-Number.MAX_VALUE); + + execute(graphics, 10, 20, 30, 40, 50, "none"); + + expect(graphics.xMin).toBe(-7.677669529663685); + expect(graphics.yMin).toBe(2.322330470336315); + expect(graphics.xMax).toBe(47.67766952966369); + expect(graphics.yMax).toBe(57.67766952966369); + }); +}); \ No newline at end of file diff --git a/packages/display/src/Graphics/service/GraphicsCalcLineBoundsService.ts b/packages/display/src/Graphics/service/GraphicsCalcLineBoundsService.ts index b848d0a6..9b1a2b2d 100644 --- a/packages/display/src/Graphics/service/GraphicsCalcLineBoundsService.ts +++ b/packages/display/src/Graphics/service/GraphicsCalcLineBoundsService.ts @@ -17,9 +17,12 @@ import type { Graphics } from "../../Graphics"; */ export const execute = ( graphics: Graphics, - x: number = 0, y: number = 0, - position_x: number = 0, position_y: number = 0, - line_width: number = 0, caps: string = "none" + x: number = 0, + y: number = 0, + position_x: number = 0, + position_y: number = 0, + line_width: number = 0, + caps: string = "none" ): void => { graphics.xMin = Math.min(graphics.xMin, Math.min(x, position_x)); diff --git a/packages/display/src/Graphics/service/GraphicsDrawRoundRectService.ts b/packages/display/src/Graphics/service/GraphicsDrawRoundRectService.ts index e2891eaa..8a267a13 100644 --- a/packages/display/src/Graphics/service/GraphicsDrawRoundRectService.ts +++ b/packages/display/src/Graphics/service/GraphicsDrawRoundRectService.ts @@ -17,9 +17,12 @@ import type { Graphics } from "../../Graphics"; */ export const execute = ( graphics: Graphics, - x: number, y: number, - width: number, height: number, - ellipse_width: number, ellipse_height: number = NaN + x: number, + y: number, + width: number, + height: number, + ellipse_width: number, + ellipse_height: number = NaN ): Graphics => { x = +x || 0; diff --git a/packages/display/src/Graphics/service/GraphicsMargePathService.test.ts b/packages/display/src/Graphics/service/GraphicsMargePathService.test.ts new file mode 100644 index 00000000..5760467c --- /dev/null +++ b/packages/display/src/Graphics/service/GraphicsMargePathService.test.ts @@ -0,0 +1,27 @@ +import { Graphics } from "../../Graphics"; +import { execute } from "./GraphicsMargePathService"; +import { describe, expect, it } from "vitest"; + +describe("GraphicsMargePathService.js test", () => +{ + it("execute test case1", () => + { + const graphics = new Graphics(); + + const fill = []; + expect(fill.length).toBe(0); + + const line = []; + expect(line.length).toBe(0); + + execute(graphics, true, true, fill, line, 10, 20); + + expect(fill.length).toBe(2); + expect(fill[0]).toBe(10); + expect(fill[1]).toBe(20); + + expect(line.length).toBe(2); + expect(line[0]).toBe(10); + expect(line[1]).toBe(20); + }); +}); \ No newline at end of file diff --git a/packages/display/src/Graphics/service/GraphicsToNumberArrayService.test.ts b/packages/display/src/Graphics/service/GraphicsToNumberArrayService.test.ts new file mode 100644 index 00000000..c089af4e --- /dev/null +++ b/packages/display/src/Graphics/service/GraphicsToNumberArrayService.test.ts @@ -0,0 +1,90 @@ +import { execute } from "./GraphicsToNumberArrayService"; +import { describe, expect, it } from "vitest"; +import { Graphics } from "../../Graphics"; + +describe("GraphicsToNumberArrayService.js test", () => +{ + it("execute test case1", () => + { + const recodes = [ + Graphics.STROKE_STYLE, + 100, "none", "bevel", 1, 2, 3, 4, 5, + Graphics.STROKE_STYLE, + 200, "round", "miter", 1, 2, 3, 4, 5, + Graphics.STROKE_STYLE, + 300, "square", "round", 1, 2, 3, 4, 5, + ]; + const array = execute(recodes); + + expect(array[0]).toBe(Graphics.STROKE_STYLE); + expect(array[1]).toBe(100); + expect(array[2]).toBe(0); + expect(array[3]).toBe(0); + + expect(array[9]).toBe(Graphics.STROKE_STYLE); + expect(array[10]).toBe(200); + expect(array[11]).toBe(1); + expect(array[12]).toBe(1); + + expect(array[18]).toBe(Graphics.STROKE_STYLE); + expect(array[19]).toBe(300); + expect(array[20]).toBe(2); + expect(array[21]).toBe(2); + }); + + it("execute test case2", () => + { + const object = { + "ratio": 0, + "R": 255, + "G": 100, + "B": 0, + "A": 1 + } + const recodes = [ + Graphics.GRADIENT_FILL, + "linear", [object], new Float32Array([1,2,3,4,5,6]), + "reflect", "linearRGB", 0, + Graphics.GRADIENT_FILL, + "radial", [object], new Float32Array([6,5,4,3,2,1]), + "repeat", "rgb", 0, + ]; + const array = execute(recodes); + + expect(array[0]).toBe(Graphics.GRADIENT_FILL); + expect(array[1]).toBe(0); // linear + expect(array[2]).toBe(1); + expect(array[3]).toBe(object.ratio); + expect(array[4]).toBe(object.R); + expect(array[5]).toBe(object.G); + expect(array[6]).toBe(object.B); + expect(array[7]).toBe(object.A); + expect(array[8]).toBe(1); + expect(array[9]).toBe(2); + expect(array[10]).toBe(3); + expect(array[11]).toBe(4); + expect(array[12]).toBe(5); + expect(array[13]).toBe(6); + expect(array[14]).toBe(0); // reflect + expect(array[15]).toBe(0); // linearRGB + expect(array[16]).toBe(0); // focal + + expect(array[17]).toBe(Graphics.GRADIENT_FILL); + expect(array[18]).toBe(1); // radial + expect(array[19]).toBe(1); + expect(array[20]).toBe(object.ratio); + expect(array[21]).toBe(object.R); + expect(array[22]).toBe(object.G); + expect(array[23]).toBe(object.B); + expect(array[24]).toBe(object.A); + expect(array[25]).toBe(6); + expect(array[26]).toBe(5); + expect(array[27]).toBe(4); + expect(array[28]).toBe(3); + expect(array[29]).toBe(2); + expect(array[30]).toBe(1); + expect(array[31]).toBe(1); // repeat + expect(array[32]).toBe(1); // rgb + expect(array[33]).toBe(0); // focal + }); +}); \ No newline at end of file diff --git a/packages/display/src/Graphics/usecase/GraphicsCalcBoundsUseCase.ts b/packages/display/src/Graphics/usecase/GraphicsCalcBoundsUseCase.ts index 1339aa3c..810fb5fe 100644 --- a/packages/display/src/Graphics/usecase/GraphicsCalcBoundsUseCase.ts +++ b/packages/display/src/Graphics/usecase/GraphicsCalcBoundsUseCase.ts @@ -20,8 +20,10 @@ import { execute as graphicsCalcLineBoundsService } from "../service/GraphicsCal export const execute = ( graphics: Graphics, has_line_enabled: boolean, - position_x: number = 0, position_y: number = 0, - line_width: number = 0, caps: string = "none", + position_x: number = 0, + position_y: number = 0, + line_width: number = 0, + caps: string = "none", ...args: number[] ): void => { diff --git a/packages/display/src/MovieClip/service/MovieClipBuildSoundsService.test.ts b/packages/display/src/MovieClip/service/MovieClipBuildSoundsService.test.ts new file mode 100644 index 00000000..9a4bd2bf --- /dev/null +++ b/packages/display/src/MovieClip/service/MovieClipBuildSoundsService.test.ts @@ -0,0 +1,46 @@ +import { MovieClip } from "../../MovieClip"; +import { execute } from "./MovieClipBuildSoundsService"; +import { describe, expect, it } from "vitest"; +import { $loaderInfoMap } from "../../DisplayObjectUtil"; +import { LoaderInfo } from "../.."; +import { Sound } from "@next2d/media"; +import type { IMovieClipSoundObject } from "../../interface/IMovieClipSoundObject"; + +describe("MovieClipBuildSoundsService.js test", () => +{ + it("execute test", async () => + { + const movieClip = new MovieClip(); + const loaderInfo = new LoaderInfo(); + loaderInfo.data = { + "characters": [ + // @ts-ignore + {}, + { + "buffer": [], + // @ts-ignore + "audioBuffer": new ArrayBuffer(0) + } + ] + }; + $loaderInfoMap.set(movieClip, loaderInfo); + + + const soundMap = new Map(); + const soundObjects: IMovieClipSoundObject[] = [{ + "frame": 1, + "sound": [{ + "characterId": 1, + "volume": 1, + "autoPlay" : true, + "loopCount": 1 + }] + }]; + + expect(soundMap.size).toBe(0); + await execute(movieClip, soundMap, soundObjects); + expect(soundMap.size).toBe(1); + + $loaderInfoMap.delete(movieClip); + }); +}); \ No newline at end of file diff --git a/packages/display/src/MovieClip/service/MovieClipBuildSoundsService.ts b/packages/display/src/MovieClip/service/MovieClipBuildSoundsService.ts index 7fe756df..82bd34ae 100644 --- a/packages/display/src/MovieClip/service/MovieClipBuildSoundsService.ts +++ b/packages/display/src/MovieClip/service/MovieClipBuildSoundsService.ts @@ -14,7 +14,7 @@ import { * @param {MovieClip} movie_clip * @param {Map} sound_map * @param {array} sound_objects - * @return {Promise} + * @return {Promise} * @method * @public */ diff --git a/packages/display/src/Shape/usecase/ShapeGenerateClipQueueUseCase.test.ts b/packages/display/src/Shape/usecase/ShapeGenerateClipQueueUseCase.test.ts new file mode 100644 index 00000000..595fa8f9 --- /dev/null +++ b/packages/display/src/Shape/usecase/ShapeGenerateClipQueueUseCase.test.ts @@ -0,0 +1,50 @@ +import { execute } from "./ShapeGenerateClipQueueUseCase"; +import { Shape } from "../../Shape"; +import { describe, expect, it } from "vitest"; +import { renderQueue } from "@next2d/render-queue"; +import { $RENDERER_SHAPE_TYPE } from "../../DisplayObjectUtil"; + +describe("ShapeGenerateClipQueueUseCase.js test", () => +{ + it("execute test case1", () => + { + const shape = new Shape(); + shape.graphics.buffer = new Float32Array(8); + shape.graphics.buffer[0] = 1; + shape.graphics.buffer[1] = 0; + shape.graphics.buffer[2] = 0; + shape.graphics.buffer[3] = 1; + shape.graphics.buffer[4] = 0; + shape.graphics.buffer[5] = 0; + shape.graphics.buffer[6] = 0; + shape.graphics.buffer[7] = 0; + + const matrix = new Float32Array([1, 0, 0, 1, 0, 0]); + + renderQueue.offset = 0; + renderQueue.buffer.fill(0); + + execute(shape, matrix); + + expect(renderQueue.buffer[0]).toBe($RENDERER_SHAPE_TYPE); + expect(renderQueue.buffer[1]).toBe(1); + expect(renderQueue.buffer[2]).toBe(0); + expect(renderQueue.buffer[3]).toBe(0); + expect(renderQueue.buffer[4]).toBe(1); + expect(renderQueue.buffer[5]).toBe(0); + expect(renderQueue.buffer[6]).toBe(0); + expect(renderQueue.buffer[7]).toBe(0); + expect(renderQueue.buffer[8]).toBe(8); + expect(renderQueue.buffer[9]).toBe(1); + expect(renderQueue.buffer[10]).toBe(0); + expect(renderQueue.buffer[11]).toBe(0); + expect(renderQueue.buffer[12]).toBe(1); + expect(renderQueue.buffer[13]).toBe(0); + expect(renderQueue.buffer[14]).toBe(0); + expect(renderQueue.buffer[15]).toBe(0); + expect(renderQueue.buffer[16]).toBe(0); + + renderQueue.offset = 0; + renderQueue.buffer.fill(0); + }); +}); \ No newline at end of file diff --git a/packages/display/src/Sprite/service/SpriteStartDragService.test.ts b/packages/display/src/Sprite/service/SpriteStartDragService.test.ts new file mode 100644 index 00000000..c0985e04 --- /dev/null +++ b/packages/display/src/Sprite/service/SpriteStartDragService.test.ts @@ -0,0 +1,31 @@ +import { execute } from "./SpriteStartDragService"; +import { Sprite } from "../../Sprite"; +import { describe, expect, it } from "vitest"; +import { + $pointer, + $setDraggingDisplayObject, + $getDraggingDisplayObject +} from "../../DisplayObjectUtil"; + +describe("SpriteStartDragService.js test", () => +{ + it("execute test", () => + { + const sprite = new Sprite(); + + $setDraggingDisplayObject(null); + expect($getDraggingDisplayObject()).toBeNull(); + + $pointer.x = 10; + $pointer.y = 20; + execute(sprite); + + expect(sprite.$lockCenter).toBe(false); + expect(sprite.$offsetX).toBe(-10); + expect(sprite.$offsetY).toBe(-20); + expect($getDraggingDisplayObject()).toBe(sprite); + + $setDraggingDisplayObject(null); + expect($getDraggingDisplayObject()).toBeNull(); + }); +}); \ No newline at end of file diff --git a/packages/display/src/Sprite/service/SpriteStopDragService.test.ts b/packages/display/src/Sprite/service/SpriteStopDragService.test.ts new file mode 100644 index 00000000..6428537a --- /dev/null +++ b/packages/display/src/Sprite/service/SpriteStopDragService.test.ts @@ -0,0 +1,29 @@ +import { execute } from "./SpriteStopDragService"; +import { Sprite } from "../../Sprite"; +import { describe, expect, it } from "vitest"; +import { + $pointer, + $setDraggingDisplayObject, + $getDraggingDisplayObject +} from "../../DisplayObjectUtil"; + +describe("SpriteStopDragService.js test", () => +{ + it("execute test", () => + { + const sprite = new Sprite(); + + $setDraggingDisplayObject(sprite); + expect($getDraggingDisplayObject()).toBe(sprite); + + sprite.$offsetX = 10; + sprite.$offsetY = 20; + + execute(sprite); + + expect(sprite.$lockCenter).toBe(false); + expect(sprite.$offsetX).toBe(0); + expect(sprite.$offsetY).toBe(0); + expect($getDraggingDisplayObject()).toBeNull(); + }); +}); \ No newline at end of file diff --git a/packages/renderer/src/DisplayObject/service/DisplayObjectGetBlendModeService.test.ts b/packages/renderer/src/DisplayObject/service/DisplayObjectGetBlendModeService.test.ts new file mode 100644 index 00000000..92b52c42 --- /dev/null +++ b/packages/renderer/src/DisplayObject/service/DisplayObjectGetBlendModeService.test.ts @@ -0,0 +1,25 @@ +import { execute } from "./DisplayObjectGetBlendModeService"; +import { describe, expect, it } from "vitest"; + +describe("DisplayObjectGetBlendModeService.js test", () => +{ + it("execute test", () => + { + expect(execute(0)).toBe("copy"); + expect(execute(1)).toBe("add"); + expect(execute(2)).toBe("alpha"); + expect(execute(3)).toBe("darken"); + expect(execute(4)).toBe("difference"); + expect(execute(5)).toBe("erase"); + expect(execute(6)).toBe("hardlight"); + expect(execute(7)).toBe("invert"); + expect(execute(8)).toBe("layer"); + expect(execute(9)).toBe("lighten"); + expect(execute(10)).toBe("multiply"); + expect(execute(11)).toBe("normal"); + expect(execute(12)).toBe("overlay"); + expect(execute(13)).toBe("screen"); + expect(execute(14)).toBe("subtract"); + expect(execute(15)).toBe("normal"); + }); +}); \ No newline at end of file diff --git a/packages/webgl/src/Blend/usecase/BlendBootUseCase.test.ts b/packages/webgl/src/Blend/usecase/BlendBootUseCase.test.ts new file mode 100644 index 00000000..06afe020 --- /dev/null +++ b/packages/webgl/src/Blend/usecase/BlendBootUseCase.test.ts @@ -0,0 +1,42 @@ +import { execute } from "./BlendBootUseCase"; +import { describe, expect, it, vi } from "vitest"; +import { + $setFuncCode, + $getFuncCode +} from "../../Blend"; + + + +describe("BlendBootUseCase.js method test", () => +{ + it("test case add", () => + { + vi.mock("../../WebGLUtil.ts", async (importOriginal) => + { + const mod = await importOriginal(); + return { + ...mod, + $gl: { + "enable": vi.fn((cap) => + { + expect(cap).toBe("BLEND") + }), + "blendFunc": vi.fn((src, dst) => + { + expect(src).toBe("ONE"); + expect(dst).toBe("ONE_MINUS_SRC_ALPHA"); + }), + "BLEND": "BLEND", + "ONE": "ONE", + "ONE_MINUS_SRC_ALPHA": "ONE_MINUS_SRC_ALPHA" + } + } + }); + + $setFuncCode(0); + expect($getFuncCode()).toBe(0); + execute(); + + expect($getFuncCode()).toBe(613); + }); +}); \ No newline at end of file diff --git a/packages/webgl/src/Context/service/ContextUpdateAllTransferBoundsService.test.ts b/packages/webgl/src/Context/service/ContextUpdateAllTransferBoundsService.test.ts new file mode 100644 index 00000000..581844c9 --- /dev/null +++ b/packages/webgl/src/Context/service/ContextUpdateAllTransferBoundsService.test.ts @@ -0,0 +1,25 @@ +import { execute } from "./ContextUpdateAllTransferBoundsService"; +import { describe, expect, it } from "vitest"; +import { Node } from "@next2d/texture-packer"; +import { $getActiveAllTransferBounds } from "../../AtlasManager"; + +describe("ContextUpdateAllTransferBoundsService.js method test", () => +{ + it("test case", () => + { + const node = new Node(0, 10, 20, 100, 200); + const bounds = $getActiveAllTransferBounds(node.index); + + expect(bounds[0]).toBe(Infinity); + expect(bounds[1]).toBe(Infinity); + expect(bounds[2]).toBe(-Infinity); + expect(bounds[3]).toBe(-Infinity); + + execute(node); + + expect(bounds[0]).toBe(10); + expect(bounds[1]).toBe(20); + expect(bounds[2]).toBe(110); + expect(bounds[3]).toBe(220); + }); +}); \ No newline at end of file diff --git a/packages/webgl/src/Context/service/ContextUpdateTransferBoundsService.test.ts b/packages/webgl/src/Context/service/ContextUpdateTransferBoundsService.test.ts new file mode 100644 index 00000000..c384df08 --- /dev/null +++ b/packages/webgl/src/Context/service/ContextUpdateTransferBoundsService.test.ts @@ -0,0 +1,25 @@ +import { execute } from "./ContextUpdateTransferBoundsService"; +import { describe, expect, it } from "vitest"; +import { Node } from "@next2d/texture-packer"; +import { $getActiveTransferBounds } from "../../AtlasManager"; + +describe("ContextUpdateTransferBoundsService.js method test", () => +{ + it("test case", () => + { + const node = new Node(0, 10, 20, 100, 200); + const bounds = $getActiveTransferBounds(node.index); + + expect(bounds[0]).toBe(Infinity); + expect(bounds[1]).toBe(Infinity); + expect(bounds[2]).toBe(-Infinity); + expect(bounds[3]).toBe(-Infinity); + + execute(node); + + expect(bounds[0]).toBe(10); + expect(bounds[1]).toBe(20); + expect(bounds[2]).toBe(110); + expect(bounds[3]).toBe(220); + }); +}); \ No newline at end of file diff --git a/packages/webgl/src/Context/service/ContextUseGridService.test.ts b/packages/webgl/src/Context/service/ContextUseGridService.test.ts new file mode 100644 index 00000000..1f28dadc --- /dev/null +++ b/packages/webgl/src/Context/service/ContextUseGridService.test.ts @@ -0,0 +1,17 @@ +import { execute } from "./ContextUseGridService"; +import { describe, expect, it } from "vitest"; +import { $gridDataMap } from "../../Grid"; + +describe("ContextUseGridService.js method test", () => +{ + it("test case", () => + { + $gridDataMap.clear(); + expect($gridDataMap.size).toBe(0); + + execute(new Float32Array([10, 20, 110, 220])); + + expect($gridDataMap.size).toBe(1); + $gridDataMap.clear(); + }); +}); \ No newline at end of file diff --git a/packages/webgl/src/TextureManager/usecase/TextureManagerBind012UseCase.test.ts b/packages/webgl/src/TextureManager/usecase/TextureManagerBind012UseCase.test.ts new file mode 100644 index 00000000..cb078e0c --- /dev/null +++ b/packages/webgl/src/TextureManager/usecase/TextureManagerBind012UseCase.test.ts @@ -0,0 +1,79 @@ +import { execute } from "./TextureManagerBind012UseCase"; +import { describe, expect, it, vi } from "vitest"; +import { + $activeTextureUnit, + $setActiveTextureUnit, + $boundTextures +} from "../../TextureManager"; +import type { ITextureObject } from "../../interface/ITextureObject"; + +describe("TextureManagerBind012UseCase.js method test", () => +{ + it("test case", async () => + { + vi.mock("../../WebGLUtil.ts", async (importOriginal) => + { + const mod = await importOriginal(); + return { + ...mod, + $gl: { + "activeTexture": vi.fn(() => { return "activeTexture" }), + "bindTexture": vi.fn(() => { return "bindTexture" }), + "texParameteri": vi.fn(() => { return "bindTexture" }), + "TEXTURE0": 0, + "TEXTURE1": 1, + "TEXTURE2": 2 + } + } + }); + + const textureObject0 = { + "id": 2, + "resource": {} as WebGLTexture, + "width": 200, + "height": 300, + "area": 200 * 300 + } as ITextureObject; + + const textureObject1 = { + "id": 1, + "resource": {} as WebGLTexture, + "width": 400, + "height": 500, + "area": 400 * 500 + } as ITextureObject; + + const textureObject2 = { + "id": 1, + "resource": {} as WebGLTexture, + "width": 600, + "height": 700, + "area": 600 * 700 + } as ITextureObject; + + // not hit + $setActiveTextureUnit(-1); + expect($activeTextureUnit).toBe(-1); + + const mock = { + "id": 0, + "resource": {} as WebGLTexture, + "width": 100, + "height": 100, + "area": 100 * 100 + } as ITextureObject; + + $boundTextures[0] = mock; + $boundTextures[1] = mock; + $boundTextures[2] = mock; + expect($boundTextures[0]).toBe(mock); + expect($boundTextures[1]).toBe(mock); + expect($boundTextures[2]).toBe(mock); + + execute(textureObject0, textureObject1, textureObject2) + expect($activeTextureUnit).toBe(0); + expect($boundTextures[0]).toBe(textureObject0); + expect($boundTextures[1]).toBe(textureObject1); + expect($boundTextures[2]).toBe(textureObject2); + }); +}); \ No newline at end of file diff --git a/packages/webgl/src/TextureManager/usecase/TextureManagerBind01UseCase.test.ts b/packages/webgl/src/TextureManager/usecase/TextureManagerBind01UseCase.test.ts new file mode 100644 index 00000000..5321dd44 --- /dev/null +++ b/packages/webgl/src/TextureManager/usecase/TextureManagerBind01UseCase.test.ts @@ -0,0 +1,71 @@ +import { execute } from "./TextureManagerBind01UseCase"; +import { describe, expect, it, vi } from "vitest"; +import { + $activeTextureUnit, + $setActiveTextureUnit, + $boundTextures +} from "../../TextureManager"; +import type { ITextureObject } from "../../interface/ITextureObject"; + +describe("TextureManagerBind01UseCase.js method test", () => +{ + it("test case", async () => + { + vi.mock("../../WebGLUtil.ts", async (importOriginal) => + { + const mod = await importOriginal(); + return { + ...mod, + $gl: { + "activeTexture": vi.fn(() => { return "activeTexture" }), + "bindTexture": vi.fn(() => { return "bindTexture" }), + "texParameteri": vi.fn(() => { return "bindTexture" }), + "TEXTURE0": 0, + "TEXTURE1": 1, + "TEXTURE2": 2 + } + } + }); + + const textureObject0 = { + "id": 2, + "resource": {} as WebGLTexture, + "width": 200, + "height": 300, + "area": 200 * 300 + } as ITextureObject; + + const textureObject1 = { + "id": 1, + "resource": {} as WebGLTexture, + "width": 400, + "height": 500, + "area": 400 * 500 + } as ITextureObject; + + // not hit + $setActiveTextureUnit(-1); + expect($activeTextureUnit).toBe(-1); + + const mock = { + "id": 0, + "resource": {} as WebGLTexture, + "width": 100, + "height": 100, + "area": 100 * 100 + } as ITextureObject; + + $boundTextures[0] = mock; + $boundTextures[1] = mock; + $boundTextures[2] = mock; + expect($boundTextures[0]).toBe(mock); + expect($boundTextures[1]).toBe(mock); + expect($boundTextures[2]).toBe(mock); + + execute(textureObject0, textureObject1) + expect($activeTextureUnit).toBe(0); + expect($boundTextures[0]).toBe(textureObject0); + expect($boundTextures[1]).toBe(textureObject1); + expect($boundTextures[2]).toBe(null); + }); +}); \ No newline at end of file diff --git a/packages/webgl/src/TextureManager/usecase/TextureManagerBind02UseCase.test.ts b/packages/webgl/src/TextureManager/usecase/TextureManagerBind02UseCase.test.ts new file mode 100644 index 00000000..7ef5869a --- /dev/null +++ b/packages/webgl/src/TextureManager/usecase/TextureManagerBind02UseCase.test.ts @@ -0,0 +1,71 @@ +import { execute } from "./TextureManagerBind02UseCase"; +import { describe, expect, it, vi } from "vitest"; +import { + $activeTextureUnit, + $setActiveTextureUnit, + $boundTextures +} from "../../TextureManager"; +import type { ITextureObject } from "../../interface/ITextureObject"; + +describe("TextureManagerBind02UseCase.js method test", () => +{ + it("test case", async () => + { + vi.mock("../../WebGLUtil.ts", async (importOriginal) => + { + const mod = await importOriginal(); + return { + ...mod, + $gl: { + "activeTexture": vi.fn(() => { return "activeTexture" }), + "bindTexture": vi.fn(() => { return "bindTexture" }), + "texParameteri": vi.fn(() => { return "bindTexture" }), + "TEXTURE0": 0, + "TEXTURE1": 1, + "TEXTURE2": 2 + } + } + }); + + const textureObject0 = { + "id": 2, + "resource": {} as WebGLTexture, + "width": 200, + "height": 300, + "area": 200 * 300 + } as ITextureObject; + + const textureObject1 = { + "id": 1, + "resource": {} as WebGLTexture, + "width": 400, + "height": 500, + "area": 400 * 500 + } as ITextureObject; + + // not hit + $setActiveTextureUnit(-1); + expect($activeTextureUnit).toBe(-1); + + const mock = { + "id": 0, + "resource": {} as WebGLTexture, + "width": 100, + "height": 100, + "area": 100 * 100 + } as ITextureObject; + + $boundTextures[0] = mock; + $boundTextures[1] = mock; + $boundTextures[2] = mock; + expect($boundTextures[0]).toBe(mock); + expect($boundTextures[1]).toBe(mock); + expect($boundTextures[2]).toBe(mock); + + execute(textureObject0, textureObject1) + expect($activeTextureUnit).toBe(0); + expect($boundTextures[0]).toBe(textureObject0); + expect($boundTextures[1]).toBe(null); + expect($boundTextures[2]).toBe(textureObject1); + }); +}); \ No newline at end of file diff --git a/packages/webgl/src/TextureManager/usecase/TextureManagerBind0UseCase.test.ts b/packages/webgl/src/TextureManager/usecase/TextureManagerBind0UseCase.test.ts index dd58d4b2..96ccaab7 100644 --- a/packages/webgl/src/TextureManager/usecase/TextureManagerBind0UseCase.test.ts +++ b/packages/webgl/src/TextureManager/usecase/TextureManagerBind0UseCase.test.ts @@ -5,6 +5,7 @@ import { $setActiveTextureUnit, $boundTextures } from "../../TextureManager"; +import type { ITextureObject } from "../../interface/ITextureObject"; describe("TextureManagerBind0UseCase.js method test", () => { @@ -27,26 +28,29 @@ describe("TextureManagerBind0UseCase.js method test", () => }); const textureObject = { + "id": 2, "resource": {} as WebGLTexture, "width": 200, "height": 300, "area": 200 * 300 - }; + } as ITextureObject; // not hit $setActiveTextureUnit(-1); expect($activeTextureUnit).toBe(-1); const mock = { + "id": 0, "resource": {} as WebGLTexture, "width": 100, "height": 100, "area": 100 * 100 - }; - $boundTextures[0] = null; + } as ITextureObject; + + $boundTextures[0] = mock; $boundTextures[1] = mock; $boundTextures[2] = mock; - expect($boundTextures[0]).toBe(null); + expect($boundTextures[0]).toBe(mock); expect($boundTextures[1]).toBe(mock); expect($boundTextures[2]).toBe(mock); diff --git a/packages/webgl/src/VertexArrayObject/service/VertexArrayObjectBindService.test.ts b/packages/webgl/src/VertexArrayObject/service/VertexArrayObjectBindService.test.ts index dc2683f7..d37595ad 100644 --- a/packages/webgl/src/VertexArrayObject/service/VertexArrayObjectBindService.test.ts +++ b/packages/webgl/src/VertexArrayObject/service/VertexArrayObjectBindService.test.ts @@ -1,3 +1,4 @@ +import type { IVertexArrayObject } from "../../interface/IVertexArrayObject.ts"; import { execute } from "./VertexArrayObjectBindService"; import { describe, expect, it, vi } from "vitest"; @@ -19,11 +20,11 @@ describe("VertexArrayObjectBindService.js method test", () => }); const vertexArrayObject = { + "id": 1, "resource": "createVertexArray", - "indexRanges": [], "vertexBuffer": "createBuffer", "vertexLength": 0, - }; + } as IVertexArrayObject; execute(vertexArrayObject); }); diff --git a/packages/webgl/src/VertexArrayObject/usecase/VertexArrayObjectCreateGradientVertexArrayObjectUseCase.test.ts b/packages/webgl/src/VertexArrayObject/usecase/VertexArrayObjectCreateGradientVertexArrayObjectUseCase.test.ts new file mode 100644 index 00000000..66671d46 --- /dev/null +++ b/packages/webgl/src/VertexArrayObject/usecase/VertexArrayObjectCreateGradientVertexArrayObjectUseCase.test.ts @@ -0,0 +1,51 @@ +import { execute } from "./VertexArrayObjectCreateGradientVertexArrayObjectUseCase"; +import { describe, expect, it, vi } from "vitest"; +import { $vertexBufferData } from "../../VertexArrayObject"; + +describe("VertexArrayObjectCreateGradientVertexArrayObjectUseCase.js method test", () => +{ + it("test case", () => + { + vi.mock("../../WebGLUtil.ts", async (importOriginal) => + { + const mod = await importOriginal(); + return { + ...mod, + $gl: { + "createVertexArray": vi.fn(() => { return "createVertexArray" }), + "createBuffer": vi.fn(() => { return "createBuffer" }), + "bindVertexArray": vi.fn(() => { return "bindVertexArray" }), + "bindBuffer": vi.fn(() => { return "bindBuffer" }), + "enableVertexAttribArray": vi.fn(() => { return "enableVertexAttribArray" }), + "vertexAttribPointer": vi.fn(() => { return "vertexAttribPointer" }), + "bufferData": vi.fn(() => { return "bufferData" }), + "bufferSubData": vi.fn(() => { return "bufferSubData" }), + }, + $context: { + "$fillStyle": new Float32Array([0, 0, 0, 1]), + "$matrix": new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]), + } + } + }); + + // new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]) + $vertexBufferData[0] = 0; + $vertexBufferData[2] = 0; + $vertexBufferData[4] = 1; + $vertexBufferData[6] = 1; + expect($vertexBufferData[0]).toBe(0); + expect($vertexBufferData[2]).toBe(0); + expect($vertexBufferData[4]).toBe(1); + expect($vertexBufferData[6]).toBe(1); + + const vertexArrayObject = execute(0.2, 0.8); + + expect($vertexBufferData[0]).toBe(0.20000000298023224); + expect($vertexBufferData[2]).toBe(0.20000000298023224); + expect($vertexBufferData[4]).toBe(0.800000011920929); + expect($vertexBufferData[6]).toBe(0.800000011920929); + expect(vertexArrayObject.resource).toBe("createVertexArray"); + expect(vertexArrayObject.vertexBuffer).toBe("createBuffer"); + expect(vertexArrayObject.vertexLength).toBe(0); + }); +}); \ No newline at end of file