diff --git a/package.json b/package.json index b6aeb1aa4e..9d867eb86f 100644 --- a/package.json +++ b/package.json @@ -74,11 +74,11 @@ "rollup-plugin-visualizer": "^6.0.3", "tailwindcss": "^4.3.0", "typescript": "^5.8.3", - "vite": "npm:@voidzero-dev/vite-plus-core@^0.1.11", - "vite-plus": "^0.1.11", + "vite": "https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703", + "vite-plus": "https://pkg.pr.new/voidzero-dev/vite-plus@1703", "vitepress": "^1.6.3", "vitepress-plugin-llms": "^1.11.0", - "vitest": "npm:@voidzero-dev/vite-plus-test@^0.1.11", + "vitest": "https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-test@1703", "vue-tsc": "^3.2.5" }, "engines": { @@ -99,13 +99,5 @@ "prepare": "vp config" }, "type": "module", - "pnpm": { - "overrides": { - "form-data@<2.5.4": ">=2.5.4", - "@rolldown/pluginutils": "1.0.0-rc.9", - "vite": "npm:@voidzero-dev/vite-plus-core@^0.1.11", - "vitest": "npm:@voidzero-dev/vite-plus-test@^0.1.11" - } - }, "packageManager": "pnpm@10.32.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ad37f5bc7..95befcfcff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,9 @@ settings: overrides: form-data@<2.5.4: '>=2.5.4' '@rolldown/pluginutils': 1.0.0-rc.9 - vite: npm:@voidzero-dev/vite-plus-core@^0.1.11 - vitest: npm:@voidzero-dev/vite-plus-test@^0.1.11 + '@voidzero-dev/vite-plus-core': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703 + '@voidzero-dev/vite-plus-test': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-test@1703 + '@voidzero-dev/vite-plus-prompts': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-prompts@1703 importers: @@ -113,7 +114,7 @@ importers: version: 4.3.0 '@tailwindcss/vite': specifier: ^4.3.0 - version: 4.3.0(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)) + version: 4.3.0(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)) '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@8.20.1) @@ -137,7 +138,7 @@ importers: version: 5.5.11 '@vitejs/plugin-vue': specifier: ^6.0.4 - version: 6.0.4(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(vue@3.5.29(typescript@5.8.3)) + version: 6.0.4(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(vue@3.5.29(typescript@5.8.3)) '@vueuse/components': specifier: ^13.4.0 version: 13.4.0(vue@3.5.29(typescript@5.8.3)) @@ -167,7 +168,7 @@ importers: version: 2.1.6(pusher-js@4.4.0)(socket.io-client@4.8.1) laravel-vite-plugin: specifier: ^2.1.0 - version: 2.1.0(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)) + version: 2.1.0(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)) postcss: specifier: ^8.5.10 version: 8.5.10 @@ -190,20 +191,20 @@ importers: specifier: ^5.8.3 version: 5.8.3 vite: - specifier: npm:@voidzero-dev/vite-plus-core@^0.1.11 - version: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' + specifier: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703 + version: '@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' vite-plus: - specifier: ^0.1.11 - version: 0.1.11(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0) + specifier: https://pkg.pr.new/voidzero-dev/vite-plus@1703 + version: https://pkg.pr.new/voidzero-dev/vite-plus@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0) vitepress: specifier: ^1.6.3 - version: 1.6.3(@algolia/client-search@5.29.0)(@types/node@24.0.7)(axios@1.13.5)(esbuild@0.27.3)(fuse.js@7.1.0)(jiti@2.7.0)(nprogress@0.2.0)(postcss@8.5.10)(qrcode@1.5.4)(search-insights@2.17.3)(typescript@5.8.3)(yaml@2.8.0) + version: 1.6.3(@algolia/client-search@5.29.0)(@types/node@24.0.7)(axios@1.13.5)(fuse.js@7.1.0)(lightningcss@1.32.0)(nprogress@0.2.0)(postcss@8.5.10)(qrcode@1.5.4)(search-insights@2.17.3)(typescript@5.8.3) vitepress-plugin-llms: specifier: ^1.11.0 version: 1.11.0 vitest: - specifier: npm:@voidzero-dev/vite-plus-test@^0.1.11 - version: '@voidzero-dev/vite-plus-test@0.1.11(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0)' + specifier: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-test@1703 + version: '@voidzero-dev/vite-plus-test@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-test@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0)' vue-tsc: specifier: ^3.2.5 version: 3.2.5(typescript@5.8.3) @@ -456,102 +457,204 @@ packages: '@emnapi/wasi-threads@1.2.0': resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.3': resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.3': resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.3': resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.3': resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.3': resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.3': resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.3': resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.3': resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.3': resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.3': resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.3': resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.3': resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.3': resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.3': resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.3': resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.3': resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.3': resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} engines: {node: '>=18'} @@ -564,6 +667,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.3': resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} engines: {node: '>=18'} @@ -576,6 +685,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.3': resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} engines: {node: '>=18'} @@ -588,24 +703,48 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.3': resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.3': resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.3': resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.3': resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} engines: {node: '>=18'} @@ -706,287 +845,294 @@ packages: '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} - '@oxc-project/runtime@0.115.0': - resolution: {integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==} + '@oxc-project/runtime@0.133.0': + resolution: {integrity: sha512-PkvjA1Lq5++V5S1E6Patr92ZVcieE6EalDr1VJTqv4BnjZdOUC4W3p8k1wMXSd5/2aFP4b/A6N5sg2Bkzcr9vQ==} engines: {node: ^20.19.0 || >=22.12.0} '@oxc-project/types@0.115.0': resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} - '@oxfmt/binding-android-arm-eabi@0.40.0': - resolution: {integrity: sha512-S6zd5r1w/HmqR8t0CTnGjFTBLDq2QKORPwriCHxo4xFNuhmOTABGjPaNvCJJVnrKBLsohOeiDX3YqQfJPF+FXw==} + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + + '@oxfmt/binding-android-arm-eabi@0.52.0': + resolution: {integrity: sha512-17EMSJnQ9g+upVHrAUYDMfH5lvRKQ9Nvg8WtEoH72oDr1VpWz+7/o3tD97U1EToen2YAQ/68JmtDYkQUi20dfQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.40.0': - resolution: {integrity: sha512-/mbS9UUP/5Vbl2D6osIdcYiP0oie63LKMoTyGj5hyMCK/SFkl3EhtyRAfdjPvuvHC0SXdW6ePaTKkBSq1SNcIw==} + '@oxfmt/binding-android-arm64@0.52.0': + resolution: {integrity: sha512-A2G1IdwGEW2lLJkIxcvuirRH1CzSl/e0NX11zTlW1gvxJThfwbI/BEoaKrTNpm7M2FchvIf6guvIQU7d5iz+OQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.40.0': - resolution: {integrity: sha512-wRt8fRdfLiEhnRMBonlIbKrJWixoEmn6KCjKE9PElnrSDSXETGZfPb8ee+nQNTobXkCVvVLytp2o0obAsxl78Q==} + '@oxfmt/binding-darwin-arm64@0.52.0': + resolution: {integrity: sha512-f9+bLvOYxy7NttCLFTvQ7afmqDOWY4wIP9xdvfj5trQ1qj6f2UFAGwZESlfsMjvJNTyRpXfIlOanCI9FOvoeQA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.40.0': - resolution: {integrity: sha512-fzowhqbOE/NRy+AE5ob0+Y4X243WbWzDb00W+pKwD7d9tOqsAFbtWUwIyqqCoCLxj791m2xXIEeLH/3uz7zCCg==} + '@oxfmt/binding-darwin-x64@0.52.0': + resolution: {integrity: sha512-YSTB9sJ5nnQd/Q0ddHkgof0ZCHPAnWZT1IW2SJ8omz7CP7KluJhO1fNHrpqdxCtpztJwSs4hY1uAee35wKxxaw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.40.0': - resolution: {integrity: sha512-agZ9ITaqdBjcerRRFEHB8s0OyVcQW8F9ZxsszjxzeSthQ4fcN2MuOtQFWec1ed8/lDa50jSLHVE2/xPmTgtCfQ==} + '@oxfmt/binding-freebsd-x64@0.52.0': + resolution: {integrity: sha512-NIrRNTTPCs4UbmVs0bxLSCDlLCtIRMJIXklNKaXa5Oj2/K1UIMBvgE8+uPVo01Io3N9HF0+GAX+aAHjUgZS7vA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.40.0': - resolution: {integrity: sha512-ZM2oQ47p28TP1DVIp7HL1QoMUgqlBFHey0ksHct7tMXoU5BqjNvPWw7888azzMt25lnyPODVuye1wvNbvVUFOA==} + '@oxfmt/binding-linux-arm-gnueabihf@0.52.0': + resolution: {integrity: sha512-JXUCde8mn3GpgQouz2PXUokgy/uT1QrRJBL2s983VWcSQp62wTFYiNXgTKdeo1Jgbr0IgUnKKvzIk/YBlj/nVQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.40.0': - resolution: {integrity: sha512-RBFPAxRAIsMisKM47Oe6Lwdv6agZYLz02CUhVCD1sOv5ajAcRMrnwCFBPWwGXpazToW2mjnZxFos8TuFjTU15A==} + '@oxfmt/binding-linux-arm-musleabihf@0.52.0': + resolution: {integrity: sha512-psbUXaRZ+V8DaXz10Qf7LSHtdtdKAmC8fxXgeU608jjzrmWK4quamZMOpl6sf+dikoFHA85uE93Q0BqxrCdQrQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.40.0': - resolution: {integrity: sha512-Nb2XbQ+wV3W2jSIihXdPj7k83eOxeSgYP3N/SRXvQ6ZYPIk6Q86qEh5Gl/7OitX3bQoQrESqm1yMLvZV8/J7dA==} + '@oxfmt/binding-linux-arm64-gnu@0.52.0': + resolution: {integrity: sha512-Jw7MgWUU9lcLCcy82updISP3EthTlfvAwR6gWNxPzqly7+fLvOi2gHQE9xXQjpqaVLm/8P+gOzlv9ODuoVlaaw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.40.0': - resolution: {integrity: sha512-tGmWhLD/0YMotCdfezlT6tC/MJG/wKpo4vnQ3Cq+4eBk/BwNv7EmkD0VkD5F/dYkT3b8FNU01X2e8vvJuWoM1w==} + '@oxfmt/binding-linux-arm64-musl@0.52.0': + resolution: {integrity: sha512-wZg6bLjDvh2KibyI3QFUYo8GTXneIFsd0JvehtvJiUmQ8WRPERgxd/VM4ctWb86U5FT1FkqgS8/wZKVB+AZScg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.40.0': - resolution: {integrity: sha512-rVbFyM3e7YhkVnp0IVYjaSHfrBWcTRWb60LEcdNAJcE2mbhTpbqKufx0FrhWfoxOrW/+7UJonAOShoFFLigDqQ==} + '@oxfmt/binding-linux-ppc64-gnu@0.52.0': + resolution: {integrity: sha512-IngE8uxhNvxcMrLjZNDo9xNLY7rEK33AKnaMd2B46he1e/mz2CfcW6If/U1wUjdRZddm1QzQaciqZkuMkdh1FA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.40.0': - resolution: {integrity: sha512-3ZqBw14JtWeEoLiioJcXSJz8RQyPE+3jLARnYM1HdPzZG4vk+Ua8CUupt2+d+vSAvMyaQBTN2dZK+kbBS/j5mA==} + '@oxfmt/binding-linux-riscv64-gnu@0.52.0': + resolution: {integrity: sha512-H3+DdFMv/efN3Efmhsv18jDrpiWWqKG7wsfAlQBqAt6z/E2Bx+TwEj2Nowe51CPOWB8/mFBC2dAMSgVFLvvowA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.40.0': - resolution: {integrity: sha512-JJ4PPSdcbGBjPvb+O7xYm2FmAsKCyuEMYhqatBAHMp/6TA6rVlf9Z/sYPa4/3Bommb+8nndm15SPFRHEPU5qFA==} + '@oxfmt/binding-linux-riscv64-musl@0.52.0': + resolution: {integrity: sha512-zji+1kb7lJKohSDjzC1IsS+K/cKRs1hdVf0ZH0VbdbiakmtLvN9twBoXo/k8VdjFax7kfo+DyPxS7vv52br1aw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.40.0': - resolution: {integrity: sha512-Kp0zNJoX9Ik77wUya2tpBY3W9f40VUoMQLWVaob5SgCrblH/t2xr/9B2bWHfs0WCefuGmqXcB+t0Lq77sbBmZw==} + '@oxfmt/binding-linux-s390x-gnu@0.52.0': + resolution: {integrity: sha512-hcLBYedpCy7ToUvvBidWk7+11Yhg1oAZ4+6hKPic/mQI6NaqXJSXMps5nFlwUuX2ewhtLZZDPg63TI042qGKBg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.40.0': - resolution: {integrity: sha512-7YTCNzleWTaQTqNGUNQ66qVjpoV6DjbCOea+RnpMBly2bpzrI/uu7Rr+2zcgRfNxyjXaFTVQKaRKjqVdeUfeVA==} + '@oxfmt/binding-linux-x64-gnu@0.52.0': + resolution: {integrity: sha512-IDO2loXK2OtTOhSPchU9MW25mWL2QCDGdJbjN8MXKZVS80qXe5gMTwQWu/gMJ3juoBHbkuUZNB2N1LHzNT7DoA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.40.0': - resolution: {integrity: sha512-hWnSzJ0oegeOwfOEeejYXfBqmnRGHusgtHfCPzmvJvHTwy1s3Neo59UKc1CmpE3zxvrCzJoVHos0rr97GHMNPw==} + '@oxfmt/binding-linux-x64-musl@0.52.0': + resolution: {integrity: sha512-mAV2Hjn0SatJ+KoAzKUC3eJhdJ8wv+3m1KyuS0dTsbF0c5weq+QrCt/DRZZM+uj/XiKzCDEUKYsBF30e2qkcyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.40.0': - resolution: {integrity: sha512-28sJC1lR4qtBJGzSRRbPnSW3GxU2+4YyQFE6rCmsUYqZ5XYH8jg0/w+CvEzQ8TuAQz5zLkcA25nFQGwoU0PT3Q==} + '@oxfmt/binding-openharmony-arm64@0.52.0': + resolution: {integrity: sha512-vd4npaUIwChxp7XzkqmepBWTT9YMcSe/NBApVGPC30/lLyOVaV3dvma1SKo03t8O73BPRAG7EyJzGlN5cJM5hQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.40.0': - resolution: {integrity: sha512-cDkRnyT0dqwF5oIX1Cv59HKCeZQFbWWdUpXa3uvnHFT2iwYSSZspkhgjXjU6iDp5pFPaAEAe9FIbMoTgkTmKPg==} + '@oxfmt/binding-win32-arm64-msvc@0.52.0': + resolution: {integrity: sha512-k2sz6gWQdMfh5HPpIS+Bw/0UEV/kaK2xuqJRrWL233sEHx9WLlsmvlPFM4HUNThkYbSN0U0vPW7LVKZWDS8hPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.40.0': - resolution: {integrity: sha512-7rPemBJjqm5Gkv6ZRCPvK8lE6AqQ/2z31DRdWazyx2ZvaSgL7QGofHXHNouRpPvNsT9yxRNQJgigsWkc+0qg4w==} + '@oxfmt/binding-win32-ia32-msvc@0.52.0': + resolution: {integrity: sha512-rhke69GTcArodLHpjMTfNnvjTEBryDeZcUCKK/VjXDMtfTULl6QRh0ymX5/hbCUv2WjYm9h/QbW++q2vE15gWQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.40.0': - resolution: {integrity: sha512-/Zmj0yTYSvmha6TG1QnoLqVT7ZMRDqXvFXXBQpIjteEwx9qvUYMBH2xbiOFhDeMUJkGwC3D6fdKsFtaqUvkwNA==} + '@oxfmt/binding-win32-x64-msvc@0.52.0': + resolution: {integrity: sha512-q5xL7oeXkZdEtNZWBdvehJcmt+GRu9l2bK40yJs1jJXlqq+r0Hygb1rTjq+FM2o/2xyt4cufH6KRplHp3Jjsvw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint-tsgolint/darwin-arm64@0.16.0': - resolution: {integrity: sha512-WQt5lGwRPJBw7q2KNR0mSPDAaMmZmVvDlEEti96xLO7ONhyomQc6fBZxxwZ4qTFedjJnrHX94sFelZ4OKzS7UQ==} + '@oxlint-tsgolint/darwin-arm64@0.23.0': + resolution: {integrity: sha512-gOs9PVr2wEg4ox9z0aJo+RKhhImW86YL5N6yav8BK/rgPsIrwN/igSZ+pbRr723NFvUNKde9fgMhRA6JrXAOZw==} cpu: [arm64] os: [darwin] - '@oxlint-tsgolint/darwin-x64@0.16.0': - resolution: {integrity: sha512-VJo29XOzdkalvCTiE2v6FU3qZlgHaM8x8hUEVJGPU2i5W+FlocPpmn00+Ld2n7Q0pqIjyD5EyvZ5UmoIEJMfqg==} + '@oxlint-tsgolint/darwin-x64@0.23.0': + resolution: {integrity: sha512-kjJ8B+7n4tB9VJdxS5A9GdJt6/bYpzbu4lXp2uO1S3sRmCB5gDEABlGoiePNApRWaW+xqL4b4xgiE727jSLhuA==} cpu: [x64] os: [darwin] - '@oxlint-tsgolint/linux-arm64@0.16.0': - resolution: {integrity: sha512-MPfqRt1+XRHv9oHomcBMQ3KpTE+CSkZz14wUxDQoqTNdUlV0HWdzwIE9q65I3D9YyxEnqpM7j4qtDQ3apqVvbQ==} + '@oxlint-tsgolint/linux-arm64@0.23.0': + resolution: {integrity: sha512-6dCZuKNu135seMXilkRk9SpCx6i1XgmiipYGalLij5WVRX6ZYS8c4xI7preN/zv9fCXhsQclTIMDu2Y/cytTjw==} cpu: [arm64] os: [linux] - '@oxlint-tsgolint/linux-x64@0.16.0': - resolution: {integrity: sha512-XQSwVUsnwLokMhe1TD6IjgvW5WMTPzOGGkdFDtXWQmlN2YeTw94s/NN0KgDrn2agM1WIgAenEkvnm0u7NgwEyw==} + '@oxlint-tsgolint/linux-x64@0.23.0': + resolution: {integrity: sha512-3bdilnyA7kmSTjK27rvjIjSxL5SIg3wt7vwNiRkouWB83ytssyKnuGvxSYJxgMEmFpSutzaBzcCUM2jDtPGcgA==} cpu: [x64] os: [linux] - '@oxlint-tsgolint/win32-arm64@0.16.0': - resolution: {integrity: sha512-EWdlspQiiFGsP2AiCYdhg5dTYyAlj6y1nRyNI2dQWq4Q/LITFHiSRVPe+7m7K7lcsZCEz2icN/bCeSkZaORqIg==} + '@oxlint-tsgolint/win32-arm64@0.23.0': + resolution: {integrity: sha512-j+OEp44SVYiQ+ZD+uttsX7u6L9SvmbbQ77SO1pSFCcJlsVMeCk8qZsjhKfGKuT/jIA+ipOJMVs/+pqUfObBWNw==} cpu: [arm64] os: [win32] - '@oxlint-tsgolint/win32-x64@0.16.0': - resolution: {integrity: sha512-1ufk8cgktXJuJZHKF63zCHAkaLMwZrEXnZ89H2y6NO85PtOXqu4zbdNl0VBpPP3fCUuUBu9RvNqMFiv0VsbXWA==} + '@oxlint-tsgolint/win32-x64@0.23.0': + resolution: {integrity: sha512-5MyjFuqf+g8OUPJBSGWHJtmoWnzFJYyOg4To9WMQshZYEWig/vtu7JtJ03VWnzHv9LJkAUeApY0gVCOywFR/iQ==} cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.55.0': - resolution: {integrity: sha512-NhvgAhncTSOhRahQSCnkK/4YIGPjTmhPurQQ2dwt2IvwCMTvZRW5vF2K10UBOxFve4GZDMw6LtXZdC2qeuYIVQ==} + '@oxlint/binding-android-arm-eabi@1.67.0': + resolution: {integrity: sha512-VrSi571rDv1N8HaEDM+DEX8nmT0y9jJo8tzzW13vsOWTx59xQczCIJx68n2zWOXRT5YKZsOZXp4qkHN/10x4mw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.55.0': - resolution: {integrity: sha512-P9iWRh+Ugqhg+D7rkc7boHX8o3H2h7YPcZHQIgvVBgnua5tk4LR2L+IBlreZs58/95cd2x3/004p5VsQM9z4SA==} + '@oxlint/binding-android-arm64@1.67.0': + resolution: {integrity: sha512-l6+NdYxMoRohix5r5bbigW16LPicceCwGcQ6LKKuE1kUdjgFfQolJjrJsQYPFetIs78Gxj/G/f5TEGoTCwj9nQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.55.0': - resolution: {integrity: sha512-esakkJIt7WFAhT30P/Qzn96ehFpzdZ1mNuzpOb8SCW7lI4oB8VsyQnkSHREM671jfpuBb/o2ppzBCx5l0jpgMA==} + '@oxlint/binding-darwin-arm64@1.67.0': + resolution: {integrity: sha512-jOzXxS1AxFxhImLIRbtGIMrEwaXcgMw3gR57WB1cRk8ai+vpr6726kxXqVvlNsrXtJ/FrmOm8RxlC0m8SW24Qg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.55.0': - resolution: {integrity: sha512-xDMFRCCAEK9fOH6As2z8ELsC+VDGSFRHwIKVSilw+xhgLwTDFu37rtmRbmUlx8rRGS6cWKQPTc47AVxAZEVVPQ==} + '@oxlint/binding-darwin-x64@1.67.0': + resolution: {integrity: sha512-3DFAVY94OqjIZHXIPz37yGRSWwOFTAqChQ64/M69GYLawzP0KiwdhDNfqdKKYT0bTR/DNxmMnQsj3ns+8+X/Lg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.55.0': - resolution: {integrity: sha512-mYZqnwUD7ALCRxGenyLd1uuG+rHCL+OTT6S8FcAbVm/ZT2AZMGjvibp3F6k1SKOb2aeqFATmwRykrE41Q0GWVw==} + '@oxlint/binding-freebsd-x64@1.67.0': + resolution: {integrity: sha512-e4dDKZuLu8TR9DEBssWSDahlPgZBwojTTHZUvnjBRJfJJbpxYCjfjKfi0Z1+CSLMiJBwI2yCDtRM1XJQaARjmg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.55.0': - resolution: {integrity: sha512-LcX6RYcF9vL9ESGwJW3yyIZ/d/ouzdOKXxCdey1q0XJOW1asrHsIg5MmyKdEBR4plQx+shvYeQne7AzW5f3T1w==} + '@oxlint/binding-linux-arm-gnueabihf@1.67.0': + resolution: {integrity: sha512-BKytFdcQzbITV3xlnzDUDTEDtbUMCCiC4EaNTDZ4FyT8gdNvBC4gfiLucXp/sQl0XU3p7syTlorUWVVVBZab2g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.55.0': - resolution: {integrity: sha512-C+8GS1rPtK+dI7mJFkqoRBkDuqbrNihnyYQsJPS9ez+8zF9JzfvU19lawqt4l/Y23o5uQswE/DORa8aiXUih3w==} + '@oxlint/binding-linux-arm-musleabihf@1.67.0': + resolution: {integrity: sha512-XYAv0esBDX7BpTzRDjVX2Vdj+zndd8ll2dFQiaeQ6zTZr7A8GRDTN7fH3FP3jU+O0vCDx85oH/EtG7BzPgAXuw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.55.0': - resolution: {integrity: sha512-ErLE4XbmcCopA4/CIDiH6J1IAaDOMnf/KSx/aFObs4/OjAAM3sFKWGZ57pNOMxhhyBdcmcXwYymph9GwcpcqgQ==} + '@oxlint/binding-linux-arm64-gnu@1.67.0': + resolution: {integrity: sha512-zizRMjA0i6u/2B0evgda04iycu+MoNuf1pBy6Eh+1CjC5wMEG7qN5zdDKTCvFc0KSYSDM9QTG3gjZHirgtQuKg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-arm64-musl@1.55.0': - resolution: {integrity: sha512-/kp65avi6zZfqEng56TTuhiy3P/3pgklKIdf38yvYeJ9/PgEeRA2A2AqKAKbZBNAqUzrzHhz9jF6j/PZvhJzTQ==} + '@oxlint/binding-linux-arm64-musl@1.67.0': + resolution: {integrity: sha512-zB/Tf6sUjmmvvbva9Gj3JTJ8rJ9t4I8/U0o6vSRtd0DRIsIuyegBwJAzhSUFQHdMijIRJkW0exs/yBhpw2S20w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxlint/binding-linux-ppc64-gnu@1.55.0': - resolution: {integrity: sha512-A6pTdXwcEEwL/nmz0eUJ6WxmxcoIS+97GbH96gikAyre3s5deC7sts38ZVVowjS2QQFuSWkpA4ZmQC0jZSNvJQ==} + '@oxlint/binding-linux-ppc64-gnu@1.67.0': + resolution: {integrity: sha512-kgU40Gt74CK0TCsF51KZymkIwN9U0BajKsMijB52zPqOeZU9NAHkA/NSQkZDHEaCakx42DxhXkODiAqf2b4Gug==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-gnu@1.55.0': - resolution: {integrity: sha512-clj0lnIN+V52G9tdtZl0LbdTSurnZ1NZj92Je5X4lC7gP5jiCSW+Y/oiDiSauBAD4wrHt2S7nN3pA0zfKYK/6Q==} + '@oxlint/binding-linux-riscv64-gnu@1.67.0': + resolution: {integrity: sha512-tOYhkk/iaG9aD3FvGpBFd1Lrw0x0RaVoJBxjUkfNzS50rC5NS5BteNCwgr8A2zCdADrIIoze6D7u6U5Ic++/iQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-musl@1.55.0': - resolution: {integrity: sha512-NNu08pllN5x/O94/sgR3DA8lbrGBnTHsINZZR0hcav1sj79ksTiKKm1mRzvZvacwQ0hUnGinFo+JO75ok2PxYg==} + '@oxlint/binding-linux-riscv64-musl@1.67.0': + resolution: {integrity: sha512-sEtywrPb+0b+tHYl1SDCrw903fiC4eyKoNqzP3v+f2JT3Xcv4NEYG+P8rj+eEnX7IWhqV/xj8/JmcmVj21CXaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxlint/binding-linux-s390x-gnu@1.55.0': - resolution: {integrity: sha512-BvfQz3PRlWZRoEZ17dZCqgQsMRdpzGZomJkVATwCIGhHVVeHJMQdmdXPSjcT1DCNUrOjXnVyj1RGDj5+/Je2+Q==} + '@oxlint/binding-linux-s390x-gnu@1.67.0': + resolution: {integrity: sha512-BvR8Moa0zCLxroOx4vZaZN9nUfwAUpSTwjZdxZyKy4bv3PrzrXrxKR/ZQ0L9wNSvlPhnMJeZfa3q5w6ZCTuN6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-gnu@1.55.0': - resolution: {integrity: sha512-ngSOoFCSBMKVQd24H8zkbcBNc7EHhjnF1sv3mC9NNXQ/4rRjI/4Dj9+9XoDZeFEkF1SX1COSBXF1b2Pr9rqdEw==} + '@oxlint/binding-linux-x64-gnu@1.67.0': + resolution: {integrity: sha512-mm2cxM6fksOpq6l0uFws8BUGKAR4dNa/cZCn37Npq7PFbhD5HDJqWfnoIvTaeRKMy5XdS2tO0MA0qbHDrnXAAA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-musl@1.55.0': - resolution: {integrity: sha512-BDpP7W8GlaG7BR6QjGZAleYzxoyKc/D24spZIF2mB3XsfALQJJT/OBmP8YpeTb1rveFSBHzl8T7l0aqwkWNdGA==} + '@oxlint/binding-linux-x64-musl@1.67.0': + resolution: {integrity: sha512-WmbMuLapKyDlobMkXAaAL0Y+Uczh4LETfIfQsUpbId4Ip8Ai82/jqeYTOoUCkuuhBFapgqP253+d83tLKOksJg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxlint/binding-openharmony-arm64@1.55.0': - resolution: {integrity: sha512-PS6GFvmde/pc3fCA2Srt51glr8Lcxhpf6WIBFfLphndjRrD34NEcses4TSxQrEcxYo6qVywGfylM0ZhSCF2gGA==} + '@oxlint/binding-openharmony-arm64@1.67.0': + resolution: {integrity: sha512-9g/PqxYJelzzTAOR5Y+RiRqdeydhEuXv2KxNeFcAKQ7UsvnWSY1OP4MsuPMbTO2Pf70tz7mFhl1j13H3fyh+8g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.55.0': - resolution: {integrity: sha512-P6JcLJGs/q1UOvDLzN8otd9JsH4tsuuPDv+p7aHqHM3PrKmYdmUvkNj4K327PTd35AYcznOCN+l4ZOaq76QzSw==} + '@oxlint/binding-win32-arm64-msvc@1.67.0': + resolution: {integrity: sha512-2VhwE6Gatb0vJGnN0TBuQMbKCOiZlSQ/zJvVWYLK4a9d4iDiJOen/yVQkGpmsJ90MuH66fzi0kEKI0jRQMDxGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.55.0': - resolution: {integrity: sha512-gzkk4zE2zsE+WmRxFOiAZHpCpUNDFytEakqNXoNHW+PnYEOTPKDdW6nrzgSeTbGKVPXNAKQnRnMgrh7+n3Xueg==} + '@oxlint/binding-win32-ia32-msvc@1.67.0': + resolution: {integrity: sha512-EQ3VExXfeM1InbE5+JjufhZZTWy+kHUwgt3yZR7gQ47Je/mE0WspQPan0OJznh493L5anM210YNJtH1PXjTSFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.55.0': - resolution: {integrity: sha512-ZFALNow2/og75gvYzNP7qe+rREQ5xunktwA+lgykoozHZ6hw9bqg4fn5j2UvG4gIn1FXqrZHkOAXuPf5+GOYTQ==} + '@oxlint/binding-win32-x64-msvc@1.67.0': + resolution: {integrity: sha512-bw24y+/1MHS4QDkons3YyHkPT9uCMoLHHgQhb+mb8NOjTYwub1CZ+K9Ngr8aO5DMrDrkqHwTzlTwFP2vS8Y/ZQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@oxlint/plugins@1.61.0': + resolution: {integrity: sha512-nkOyZEF1vH527CkdQtOp1HMrVFEM4ResURvI2JFeGoup+h+43J/k/FgdOR9b9Isxg+Yae7qVDa7y3nssE8b3TQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1354,6 +1500,7 @@ packages: '@tailwindcss/vite@4.3.0': resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==} + version: 4.3.0 peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 @@ -1459,32 +1606,35 @@ packages: '@vitejs/plugin-vue@6.0.4': resolution: {integrity: sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==} + version: 6.0.4 engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 vue: ^3.2.25 - '@voidzero-dev/vite-plus-core@0.1.11': - resolution: {integrity: sha512-feyYRSg3u8acYNC1fF4EGfgYZm2efZB8YWTjz4NrU0Ulhlni1C6COMwHSDVpu9F4Jh+WcSsBWL3ZC1WvLa7jCw==} + '@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703': + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703} + version: 0.1.23 engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.21.2 - '@tsdown/exe': 0.21.2 + '@tsdown/css': 0.22.0 + '@tsdown/exe': 0.22.0 '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.0.0-alpha.31 - esbuild: ^0.27.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 - publint: ^0.3.0 + publint: ^0.3.8 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: '>=0.54.8' sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 - typescript: ^5.0.0 + typescript: ^5.0.0 || ^6.0.0 unplugin-unused: ^0.5.0 + unrun: '*' yaml: ^2.4.2 peerDependenciesMeta: '@arethetypeswrong/core': @@ -1521,46 +1671,67 @@ packages: optional: true unplugin-unused: optional: true + unrun: + optional: true yaml: optional: true - '@voidzero-dev/vite-plus-darwin-arm64@0.1.11': - resolution: {integrity: sha512-ENokEkMhDMJ9nM/tUDAXvtah/P3cAnEbkeKCCxJgFvTTGnGM8eBvP2qpJeTrfhy9ndIWihcsfMufszinLsfhUg==} + '@voidzero-dev/vite-plus-darwin-arm64@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-darwin-arm64@d0b407c85b560c2470395176c9f1c838b5ca8af8': + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-darwin-arm64@d0b407c85b560c2470395176c9f1c838b5ca8af8} + version: 0.1.23 engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@voidzero-dev/vite-plus-darwin-x64@0.1.11': - resolution: {integrity: sha512-gOSGYtXq5qigDsiW+oCrefv4K8WUSnZ5vH+kPHDvpsMXlqxR0rY6xrJgkJ2tCkWdCig8YHVDascSV/cj4nGwsw==} + '@voidzero-dev/vite-plus-darwin-x64@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-darwin-x64@d0b407c85b560c2470395176c9f1c838b5ca8af8': + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-darwin-x64@d0b407c85b560c2470395176c9f1c838b5ca8af8} + version: 0.1.23 engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.11': - resolution: {integrity: sha512-aDVe1vvhtXBqZdmCiCSm3DUl5/O+x5CeAcjPPTLSsEX79cSfvkD0UU26lQ8eX+pr3xVDEocJTtTLmOMVImGlyA==} + '@voidzero-dev/vite-plus-linux-arm64-gnu@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-arm64-gnu@d0b407c85b560c2470395176c9f1c838b5ca8af8': + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-arm64-gnu@d0b407c85b560c2470395176c9f1c838b5ca8af8} + version: 0.1.23 engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] - '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.11': - resolution: {integrity: sha512-rkaKCGq/CFML2M7c0ixUOuhE6qi961x84/ZFQhkUy2MJw3RP7R/M1BDyWr2qEq20SgRWLkffcWMni3P2JnmrBw==} + '@voidzero-dev/vite-plus-linux-arm64-musl@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-arm64-musl@d0b407c85b560c2470395176c9f1c838b5ca8af8': + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-arm64-musl@d0b407c85b560c2470395176c9f1c838b5ca8af8} + version: 0.1.23 + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@voidzero-dev/vite-plus-linux-x64-gnu@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-x64-gnu@d0b407c85b560c2470395176c9f1c838b5ca8af8': + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-x64-gnu@d0b407c85b560c2470395176c9f1c838b5ca8af8} + version: 0.1.23 + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@voidzero-dev/vite-plus-linux-x64-musl@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-x64-musl@d0b407c85b560c2470395176c9f1c838b5ca8af8': + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-x64-musl@d0b407c85b560c2470395176c9f1c838b5ca8af8} + version: 0.1.23 engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] - '@voidzero-dev/vite-plus-test@0.1.11': - resolution: {integrity: sha512-3kBfi/LyPOGnLCmvYtgM5GZVAyiJiYjgdm9Fu9WLLl56zcSljj0TBG19eaKY6v/j2VJ+7o80n/A/MPz46lzMFA==} + '@voidzero-dev/vite-plus-test@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-test@1703': + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-test@1703} + version: 0.1.23 engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/ui': 4.1.0 + '@vitest/coverage-istanbul': 4.1.7 + '@vitest/coverage-v8': 4.1.7 + '@vitest/ui': 4.1.7 happy-dom: '*' jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -1568,6 +1739,10 @@ packages: optional: true '@types/node': optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true '@vitest/ui': optional: true happy-dom: @@ -1575,14 +1750,16 @@ packages: jsdom: optional: true - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.11': - resolution: {integrity: sha512-MerozzH8QYY+V5l6ZQq+vrtx75rnPlmc+TauH5hL08oEWx7ScwfrNKyamnv5rg7HWBx/ryuaYaJCjODOu7MjSg==} + '@voidzero-dev/vite-plus-win32-arm64-msvc@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-win32-arm64-msvc@d0b407c85b560c2470395176c9f1c838b5ca8af8': + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-win32-arm64-msvc@d0b407c85b560c2470395176c9f1c838b5ca8af8} + version: 0.1.23 engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.11': - resolution: {integrity: sha512-ubGlfvkfWT4Eivg3O2lxMyA6h7u1XZm4XdW3MUZIXXd9Q/iIRVJdSsEg78C/OZ3e8Qofszsro6P8ZrQo8ROQxg==} + '@voidzero-dev/vite-plus-win32-x64-msvc@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-win32-x64-msvc@d0b407c85b560c2470395176c9f1c838b5ca8af8': + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-win32-x64-msvc@d0b407c85b560c2470395176c9f1c838b5ca8af8} + version: 0.1.23 engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1876,10 +2053,6 @@ packages: butterchurn@2.6.7: resolution: {integrity: sha512-BJiRA8L0L2+84uoG2SSfkp0kclBuN+vQKf217pK7pMlwEO2ZEg3MtO2/o+l8Qpr8Nbejg8tmL1ZHD1jmhiaaqg==} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -2193,6 +2366,11 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.27.3: resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} engines: {node: '>=18'} @@ -2643,6 +2821,7 @@ packages: laravel-vite-plugin@2.1.0: resolution: {integrity: sha512-z+ck2BSV6KWtYcoIzk9Y5+p4NEjqM+Y4i8/H+VZRLq0OgNjW2DqyADquwYu5j8qRvaXwzNmfCWl1KrMlV1zpsg==} + version: 2.1.0 engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3009,24 +3188,37 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - oxfmt@0.40.0: - resolution: {integrity: sha512-g0C3I7xUj4b4DcagevM9kgH6+pUHytikxUcn3/VUkvzTNaaXBeyZqb7IBsHwojeXm4mTBEC/aBjBTMVUkZwWUQ==} + oxfmt@0.52.0: + resolution: {integrity: sha512-nJlYM35F64zTDMecCNhoHNkf+D/eHv7xcjj9XDSj+bFAVtN93m7v8DQMdHd6nDG6Akf/kEYYHmDUBs2Dz27Sug==} + version: 0.52.0 engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + peerDependencies: + svelte: ^5.0.0 + vite-plus: '*' + peerDependenciesMeta: + svelte: + optional: true + vite-plus: + optional: true - oxlint-tsgolint@0.16.0: - resolution: {integrity: sha512-4RuJK2jP08XwqtUu+5yhCbxEauCm6tv2MFHKEMsjbosK2+vy5us82oI3VLuHwbNyZG7ekZA26U2LLHnGR4frIA==} + oxlint-tsgolint@0.23.0: + resolution: {integrity: sha512-3mBv3CoPbh8dFbzfDGIWa2ytZjn2v+3EX4aKRXjIhsoGFzG8GCjfRirz3rwZf1wYbZzsNLTSgpw8VjQuWdp/jA==} hasBin: true - oxlint@1.55.0: - resolution: {integrity: sha512-T+FjepiyWpaZMhekqRpH8Z3I4vNM610p6w+Vjfqgj5TZUxHXl7N8N5IPvmOU8U4XdTRxqtNNTh9Y4hLtr7yvFg==} + oxlint@1.67.0: + resolution: {integrity: sha512-blwwaHPdoH8piQ5/z0KHeoHFR7FZgl12WluKJfu4qFLPkZl6mK04PkLE45Fw1NxfBRSlh40Gu7MkxHUw++ociQ==} + version: 1.67.0 engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - oxlint-tsgolint: '>=0.15.0' + oxlint-tsgolint: '>=0.22.1' + vite-plus: '*' peerDependenciesMeta: oxlint-tsgolint: optional: true + vite-plus: + optional: true p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -3576,11 +3768,43 @@ packages: vite-plugin-full-reload@1.2.0: resolution: {integrity: sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==} - vite-plus@0.1.11: - resolution: {integrity: sha512-mDUbWirSUWtS/diQiq1QkHGsMNQWu90kSH5s7RWqVnV9s1PRxQ1IcH6mIeOG7YzPJlfO1vQbONZRsOfdyj9IKw==} + vite-plus@https://pkg.pr.new/voidzero-dev/vite-plus@1703: + resolution: {tarball: https://pkg.pr.new/voidzero-dev/vite-plus@1703} + version: 0.1.23 engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + vitepress-plugin-llms@1.11.0: resolution: {integrity: sha512-n6fjWzBNKy40p8cij+d2cHiC2asNW1eQKdmc06gX9VAv7vWppIoVLH/f7Ht1bK0vSpGzzW2QimvNfbfv1oCdJw==} @@ -4067,81 +4291,150 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.21.5': + optional: true + '@esbuild/aix-ppc64@0.27.3': optional: true + '@esbuild/android-arm64@0.21.5': + optional: true + '@esbuild/android-arm64@0.27.3': optional: true + '@esbuild/android-arm@0.21.5': + optional: true + '@esbuild/android-arm@0.27.3': optional: true + '@esbuild/android-x64@0.21.5': + optional: true + '@esbuild/android-x64@0.27.3': optional: true + '@esbuild/darwin-arm64@0.21.5': + optional: true + '@esbuild/darwin-arm64@0.27.3': optional: true + '@esbuild/darwin-x64@0.21.5': + optional: true + '@esbuild/darwin-x64@0.27.3': optional: true + '@esbuild/freebsd-arm64@0.21.5': + optional: true + '@esbuild/freebsd-arm64@0.27.3': optional: true + '@esbuild/freebsd-x64@0.21.5': + optional: true + '@esbuild/freebsd-x64@0.27.3': optional: true + '@esbuild/linux-arm64@0.21.5': + optional: true + '@esbuild/linux-arm64@0.27.3': optional: true + '@esbuild/linux-arm@0.21.5': + optional: true + '@esbuild/linux-arm@0.27.3': optional: true + '@esbuild/linux-ia32@0.21.5': + optional: true + '@esbuild/linux-ia32@0.27.3': optional: true + '@esbuild/linux-loong64@0.21.5': + optional: true + '@esbuild/linux-loong64@0.27.3': optional: true + '@esbuild/linux-mips64el@0.21.5': + optional: true + '@esbuild/linux-mips64el@0.27.3': optional: true + '@esbuild/linux-ppc64@0.21.5': + optional: true + '@esbuild/linux-ppc64@0.27.3': optional: true + '@esbuild/linux-riscv64@0.21.5': + optional: true + '@esbuild/linux-riscv64@0.27.3': optional: true + '@esbuild/linux-s390x@0.21.5': + optional: true + '@esbuild/linux-s390x@0.27.3': optional: true + '@esbuild/linux-x64@0.21.5': + optional: true + '@esbuild/linux-x64@0.27.3': optional: true '@esbuild/netbsd-arm64@0.27.3': optional: true + '@esbuild/netbsd-x64@0.21.5': + optional: true + '@esbuild/netbsd-x64@0.27.3': optional: true '@esbuild/openbsd-arm64@0.27.3': optional: true + '@esbuild/openbsd-x64@0.21.5': + optional: true + '@esbuild/openbsd-x64@0.27.3': optional: true '@esbuild/openharmony-arm64@0.27.3': optional: true + '@esbuild/sunos-x64@0.21.5': + optional: true + '@esbuild/sunos-x64@0.27.3': optional: true + '@esbuild/win32-arm64@0.21.5': + optional: true + '@esbuild/win32-arm64@0.27.3': optional: true + '@esbuild/win32-ia32@0.21.5': + optional: true + '@esbuild/win32-ia32@0.27.3': optional: true + '@esbuild/win32-x64@0.21.5': + optional: true + '@esbuild/win32-x64@0.27.3': optional: true @@ -4242,142 +4535,147 @@ snapshots: '@one-ini/wasm@0.1.1': {} - '@oxc-project/runtime@0.115.0': {} + '@oxc-project/runtime@0.133.0': {} + + '@oxc-project/types@0.115.0': + optional: true - '@oxc-project/types@0.115.0': {} + '@oxc-project/types@0.133.0': {} - '@oxfmt/binding-android-arm-eabi@0.40.0': + '@oxfmt/binding-android-arm-eabi@0.52.0': optional: true - '@oxfmt/binding-android-arm64@0.40.0': + '@oxfmt/binding-android-arm64@0.52.0': optional: true - '@oxfmt/binding-darwin-arm64@0.40.0': + '@oxfmt/binding-darwin-arm64@0.52.0': optional: true - '@oxfmt/binding-darwin-x64@0.40.0': + '@oxfmt/binding-darwin-x64@0.52.0': optional: true - '@oxfmt/binding-freebsd-x64@0.40.0': + '@oxfmt/binding-freebsd-x64@0.52.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.40.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.52.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.40.0': + '@oxfmt/binding-linux-arm-musleabihf@0.52.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.40.0': + '@oxfmt/binding-linux-arm64-gnu@0.52.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.40.0': + '@oxfmt/binding-linux-arm64-musl@0.52.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.40.0': + '@oxfmt/binding-linux-ppc64-gnu@0.52.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.40.0': + '@oxfmt/binding-linux-riscv64-gnu@0.52.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.40.0': + '@oxfmt/binding-linux-riscv64-musl@0.52.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.40.0': + '@oxfmt/binding-linux-s390x-gnu@0.52.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.40.0': + '@oxfmt/binding-linux-x64-gnu@0.52.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.40.0': + '@oxfmt/binding-linux-x64-musl@0.52.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.40.0': + '@oxfmt/binding-openharmony-arm64@0.52.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.40.0': + '@oxfmt/binding-win32-arm64-msvc@0.52.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.40.0': + '@oxfmt/binding-win32-ia32-msvc@0.52.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.40.0': + '@oxfmt/binding-win32-x64-msvc@0.52.0': optional: true - '@oxlint-tsgolint/darwin-arm64@0.16.0': + '@oxlint-tsgolint/darwin-arm64@0.23.0': optional: true - '@oxlint-tsgolint/darwin-x64@0.16.0': + '@oxlint-tsgolint/darwin-x64@0.23.0': optional: true - '@oxlint-tsgolint/linux-arm64@0.16.0': + '@oxlint-tsgolint/linux-arm64@0.23.0': optional: true - '@oxlint-tsgolint/linux-x64@0.16.0': + '@oxlint-tsgolint/linux-x64@0.23.0': optional: true - '@oxlint-tsgolint/win32-arm64@0.16.0': + '@oxlint-tsgolint/win32-arm64@0.23.0': optional: true - '@oxlint-tsgolint/win32-x64@0.16.0': + '@oxlint-tsgolint/win32-x64@0.23.0': optional: true - '@oxlint/binding-android-arm-eabi@1.55.0': + '@oxlint/binding-android-arm-eabi@1.67.0': optional: true - '@oxlint/binding-android-arm64@1.55.0': + '@oxlint/binding-android-arm64@1.67.0': optional: true - '@oxlint/binding-darwin-arm64@1.55.0': + '@oxlint/binding-darwin-arm64@1.67.0': optional: true - '@oxlint/binding-darwin-x64@1.55.0': + '@oxlint/binding-darwin-x64@1.67.0': optional: true - '@oxlint/binding-freebsd-x64@1.55.0': + '@oxlint/binding-freebsd-x64@1.67.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.55.0': + '@oxlint/binding-linux-arm-gnueabihf@1.67.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.55.0': + '@oxlint/binding-linux-arm-musleabihf@1.67.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.55.0': + '@oxlint/binding-linux-arm64-gnu@1.67.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.55.0': + '@oxlint/binding-linux-arm64-musl@1.67.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.55.0': + '@oxlint/binding-linux-ppc64-gnu@1.67.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.55.0': + '@oxlint/binding-linux-riscv64-gnu@1.67.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.55.0': + '@oxlint/binding-linux-riscv64-musl@1.67.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.55.0': + '@oxlint/binding-linux-s390x-gnu@1.67.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.55.0': + '@oxlint/binding-linux-x64-gnu@1.67.0': optional: true - '@oxlint/binding-linux-x64-musl@1.55.0': + '@oxlint/binding-linux-x64-musl@1.67.0': optional: true - '@oxlint/binding-openharmony-arm64@1.55.0': + '@oxlint/binding-openharmony-arm64@1.67.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.55.0': + '@oxlint/binding-win32-arm64-msvc@1.67.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.55.0': + '@oxlint/binding-win32-ia32-msvc@1.67.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.55.0': + '@oxlint/binding-win32-x64-msvc@1.67.0': optional: true + '@oxlint/plugins@1.61.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -4623,12 +4921,12 @@ snapshots: postcss: 8.5.10 tailwindcss: 4.3.0 - '@tailwindcss/vite@4.3.0(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))': + '@tailwindcss/vite@4.3.0(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))': dependencies: '@tailwindcss/node': 4.3.0 '@tailwindcss/oxide': 4.3.0 tailwindcss: 4.3.0 - vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' + vite: '@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' '@testing-library/dom@8.20.1': dependencies: @@ -4675,8 +4973,7 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/estree@1.0.8': - optional: true + '@types/estree@1.0.8': {} '@types/hast@3.0.4': dependencies: @@ -4728,21 +5025,21 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue@5.2.4(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(vue@3.5.29(typescript@5.8.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@24.0.7)(lightningcss@1.32.0))(vue@3.5.29(typescript@5.8.3))': dependencies: - vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' + vite: 5.4.21(@types/node@24.0.7)(lightningcss@1.32.0) vue: 3.5.29(typescript@5.8.3) - '@vitejs/plugin-vue@6.0.4(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(vue@3.5.29(typescript@5.8.3))': + '@vitejs/plugin-vue@6.0.4(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(vue@3.5.29(typescript@5.8.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.9 - vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' + vite: '@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' vue: 3.5.29(typescript@5.8.3) - '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)': + '@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)': dependencies: - '@oxc-project/runtime': 0.115.0 - '@oxc-project/types': 0.115.0 + '@oxc-project/runtime': 0.133.0 + '@oxc-project/types': 0.133.0 lightningcss: 1.32.0 postcss: 8.5.10 optionalDependencies: @@ -4753,23 +5050,29 @@ snapshots: typescript: 5.8.3 yaml: 2.8.0 - '@voidzero-dev/vite-plus-darwin-arm64@0.1.11': + '@voidzero-dev/vite-plus-darwin-arm64@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-darwin-arm64@d0b407c85b560c2470395176c9f1c838b5ca8af8': + optional: true + + '@voidzero-dev/vite-plus-darwin-x64@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-darwin-x64@d0b407c85b560c2470395176c9f1c838b5ca8af8': optional: true - '@voidzero-dev/vite-plus-darwin-x64@0.1.11': + '@voidzero-dev/vite-plus-linux-arm64-gnu@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-arm64-gnu@d0b407c85b560c2470395176c9f1c838b5ca8af8': optional: true - '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.11': + '@voidzero-dev/vite-plus-linux-arm64-musl@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-arm64-musl@d0b407c85b560c2470395176c9f1c838b5ca8af8': optional: true - '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.11': + '@voidzero-dev/vite-plus-linux-x64-gnu@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-x64-gnu@d0b407c85b560c2470395176c9f1c838b5ca8af8': optional: true - '@voidzero-dev/vite-plus-test@0.1.11(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0)': + '@voidzero-dev/vite-plus-linux-x64-musl@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-x64-musl@d0b407c85b560c2470395176c9f1c838b5ca8af8': + optional: true + + '@voidzero-dev/vite-plus-test@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-test@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0)': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0) + '@voidzero-dev/vite-plus-core': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0) es-module-lexer: 1.7.0 obug: 2.1.1 pixelmatch: 7.1.0 @@ -4779,7 +5082,7 @@ snapshots: tinybench: 2.9.0 tinyexec: 1.0.2 tinyglobby: 0.2.15 - vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' + vite: '@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' ws: 8.20.1 optionalDependencies: '@types/node': 24.0.7 @@ -4802,13 +5105,14 @@ snapshots: - tsx - typescript - unplugin-unused + - unrun - utf-8-validate - yaml - '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.11': + '@voidzero-dev/vite-plus-win32-arm64-msvc@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-win32-arm64-msvc@d0b407c85b560c2470395176c9f1c838b5ca8af8': optional: true - '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.11': + '@voidzero-dev/vite-plus-win32-x64-msvc@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-win32-x64-msvc@d0b407c85b560c2470395176c9f1c838b5ca8af8': optional: true '@volar/language-core@2.4.28': @@ -5121,8 +5425,6 @@ snapshots: '@babel/runtime': 7.27.6 ecma-proposal-math-extensions: 0.0.2 - cac@6.7.14: {} - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -5435,6 +5737,32 @@ snapshots: hasown: 2.0.3 optional: true + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + esbuild@0.27.3: optionalDependencies: '@esbuild/aix-ppc64': 0.27.3 @@ -5898,10 +6226,10 @@ snapshots: pusher-js: 4.4.0 socket.io-client: 4.8.1 - laravel-vite-plugin@2.1.0(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)): + laravel-vite-plugin@2.1.0(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)): dependencies: picocolors: 1.1.1 - vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' + vite: '@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' vite-plugin-full-reload: 1.2.0 lightningcss-android-arm64@1.32.0: @@ -6320,61 +6648,63 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - oxfmt@0.40.0: + oxfmt@0.52.0(vite-plus@https://pkg.pr.new/voidzero-dev/vite-plus@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0)): dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.40.0 - '@oxfmt/binding-android-arm64': 0.40.0 - '@oxfmt/binding-darwin-arm64': 0.40.0 - '@oxfmt/binding-darwin-x64': 0.40.0 - '@oxfmt/binding-freebsd-x64': 0.40.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.40.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.40.0 - '@oxfmt/binding-linux-arm64-gnu': 0.40.0 - '@oxfmt/binding-linux-arm64-musl': 0.40.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.40.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.40.0 - '@oxfmt/binding-linux-riscv64-musl': 0.40.0 - '@oxfmt/binding-linux-s390x-gnu': 0.40.0 - '@oxfmt/binding-linux-x64-gnu': 0.40.0 - '@oxfmt/binding-linux-x64-musl': 0.40.0 - '@oxfmt/binding-openharmony-arm64': 0.40.0 - '@oxfmt/binding-win32-arm64-msvc': 0.40.0 - '@oxfmt/binding-win32-ia32-msvc': 0.40.0 - '@oxfmt/binding-win32-x64-msvc': 0.40.0 - - oxlint-tsgolint@0.16.0: + '@oxfmt/binding-android-arm-eabi': 0.52.0 + '@oxfmt/binding-android-arm64': 0.52.0 + '@oxfmt/binding-darwin-arm64': 0.52.0 + '@oxfmt/binding-darwin-x64': 0.52.0 + '@oxfmt/binding-freebsd-x64': 0.52.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.52.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.52.0 + '@oxfmt/binding-linux-arm64-gnu': 0.52.0 + '@oxfmt/binding-linux-arm64-musl': 0.52.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.52.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.52.0 + '@oxfmt/binding-linux-riscv64-musl': 0.52.0 + '@oxfmt/binding-linux-s390x-gnu': 0.52.0 + '@oxfmt/binding-linux-x64-gnu': 0.52.0 + '@oxfmt/binding-linux-x64-musl': 0.52.0 + '@oxfmt/binding-openharmony-arm64': 0.52.0 + '@oxfmt/binding-win32-arm64-msvc': 0.52.0 + '@oxfmt/binding-win32-ia32-msvc': 0.52.0 + '@oxfmt/binding-win32-x64-msvc': 0.52.0 + vite-plus: https://pkg.pr.new/voidzero-dev/vite-plus@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0) + + oxlint-tsgolint@0.23.0: optionalDependencies: - '@oxlint-tsgolint/darwin-arm64': 0.16.0 - '@oxlint-tsgolint/darwin-x64': 0.16.0 - '@oxlint-tsgolint/linux-arm64': 0.16.0 - '@oxlint-tsgolint/linux-x64': 0.16.0 - '@oxlint-tsgolint/win32-arm64': 0.16.0 - '@oxlint-tsgolint/win32-x64': 0.16.0 - - oxlint@1.55.0(oxlint-tsgolint@0.16.0): + '@oxlint-tsgolint/darwin-arm64': 0.23.0 + '@oxlint-tsgolint/darwin-x64': 0.23.0 + '@oxlint-tsgolint/linux-arm64': 0.23.0 + '@oxlint-tsgolint/linux-x64': 0.23.0 + '@oxlint-tsgolint/win32-arm64': 0.23.0 + '@oxlint-tsgolint/win32-x64': 0.23.0 + + oxlint@1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@https://pkg.pr.new/voidzero-dev/vite-plus@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0)): optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.55.0 - '@oxlint/binding-android-arm64': 1.55.0 - '@oxlint/binding-darwin-arm64': 1.55.0 - '@oxlint/binding-darwin-x64': 1.55.0 - '@oxlint/binding-freebsd-x64': 1.55.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.55.0 - '@oxlint/binding-linux-arm-musleabihf': 1.55.0 - '@oxlint/binding-linux-arm64-gnu': 1.55.0 - '@oxlint/binding-linux-arm64-musl': 1.55.0 - '@oxlint/binding-linux-ppc64-gnu': 1.55.0 - '@oxlint/binding-linux-riscv64-gnu': 1.55.0 - '@oxlint/binding-linux-riscv64-musl': 1.55.0 - '@oxlint/binding-linux-s390x-gnu': 1.55.0 - '@oxlint/binding-linux-x64-gnu': 1.55.0 - '@oxlint/binding-linux-x64-musl': 1.55.0 - '@oxlint/binding-openharmony-arm64': 1.55.0 - '@oxlint/binding-win32-arm64-msvc': 1.55.0 - '@oxlint/binding-win32-ia32-msvc': 1.55.0 - '@oxlint/binding-win32-x64-msvc': 1.55.0 - oxlint-tsgolint: 0.16.0 + '@oxlint/binding-android-arm-eabi': 1.67.0 + '@oxlint/binding-android-arm64': 1.67.0 + '@oxlint/binding-darwin-arm64': 1.67.0 + '@oxlint/binding-darwin-x64': 1.67.0 + '@oxlint/binding-freebsd-x64': 1.67.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.67.0 + '@oxlint/binding-linux-arm-musleabihf': 1.67.0 + '@oxlint/binding-linux-arm64-gnu': 1.67.0 + '@oxlint/binding-linux-arm64-musl': 1.67.0 + '@oxlint/binding-linux-ppc64-gnu': 1.67.0 + '@oxlint/binding-linux-riscv64-gnu': 1.67.0 + '@oxlint/binding-linux-riscv64-musl': 1.67.0 + '@oxlint/binding-linux-s390x-gnu': 1.67.0 + '@oxlint/binding-linux-x64-gnu': 1.67.0 + '@oxlint/binding-linux-x64-musl': 1.67.0 + '@oxlint/binding-openharmony-arm64': 1.67.0 + '@oxlint/binding-win32-arm64-msvc': 1.67.0 + '@oxlint/binding-win32-ia32-msvc': 1.67.0 + '@oxlint/binding-win32-x64-msvc': 1.67.0 + oxlint-tsgolint: 0.23.0 + vite-plus: https://pkg.pr.new/voidzero-dev/vite-plus@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0) p-limit@2.3.0: dependencies: @@ -6658,7 +6988,6 @@ snapshots: '@rollup/rollup-win32-x64-gnu': 4.59.0 '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 - optional: true rrweb-cssom@0.8.0: {} @@ -6974,24 +7303,24 @@ snapshots: picocolors: 1.1.1 picomatch: 2.3.1 - vite-plus@0.1.11(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0): + vite-plus@https://pkg.pr.new/voidzero-dev/vite-plus@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0): dependencies: - '@oxc-project/types': 0.115.0 - '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0) - '@voidzero-dev/vite-plus-test': 0.1.11(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0) - cac: 6.7.14 - cross-spawn: 7.0.6 - oxfmt: 0.40.0 - oxlint: 1.55.0(oxlint-tsgolint@0.16.0) - oxlint-tsgolint: 0.16.0 - picocolors: 1.1.1 + '@oxc-project/types': 0.133.0 + '@oxlint/plugins': 1.61.0 + '@voidzero-dev/vite-plus-core': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0) + '@voidzero-dev/vite-plus-test': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-test@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0) + oxfmt: 0.52.0(vite-plus@https://pkg.pr.new/voidzero-dev/vite-plus@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0)) + oxlint: 1.67.0(oxlint-tsgolint@0.23.0)(vite-plus@https://pkg.pr.new/voidzero-dev/vite-plus@1703(@types/node@24.0.7)(@voidzero-dev/vite-plus-core@https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(esbuild@0.27.3)(jiti@2.7.0)(jsdom@26.1.0)(typescript@5.8.3)(yaml@2.8.0)) + oxlint-tsgolint: 0.23.0 optionalDependencies: - '@voidzero-dev/vite-plus-darwin-arm64': 0.1.11 - '@voidzero-dev/vite-plus-darwin-x64': 0.1.11 - '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.11 - '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.11 - '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.11 - '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.11 + '@voidzero-dev/vite-plus-darwin-arm64': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-darwin-arm64@d0b407c85b560c2470395176c9f1c838b5ca8af8 + '@voidzero-dev/vite-plus-darwin-x64': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-darwin-x64@d0b407c85b560c2470395176c9f1c838b5ca8af8 + '@voidzero-dev/vite-plus-linux-arm64-gnu': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-arm64-gnu@d0b407c85b560c2470395176c9f1c838b5ca8af8 + '@voidzero-dev/vite-plus-linux-arm64-musl': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-arm64-musl@d0b407c85b560c2470395176c9f1c838b5ca8af8 + '@voidzero-dev/vite-plus-linux-x64-gnu': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-x64-gnu@d0b407c85b560c2470395176c9f1c838b5ca8af8 + '@voidzero-dev/vite-plus-linux-x64-musl': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-linux-x64-musl@d0b407c85b560c2470395176c9f1c838b5ca8af8 + '@voidzero-dev/vite-plus-win32-arm64-msvc': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-win32-arm64-msvc@d0b407c85b560c2470395176c9f1c838b5ca8af8 + '@voidzero-dev/vite-plus-win32-x64-msvc': https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-win32-x64-msvc@d0b407c85b560c2470395176c9f1c838b5ca8af8 transitivePeerDependencies: - '@arethetypeswrong/core' - '@edge-runtime/vm' @@ -7000,6 +7329,8 @@ snapshots: - '@tsdown/exe' - '@types/node' - '@vitejs/devtools' + - '@vitest/coverage-istanbul' + - '@vitest/coverage-v8' - '@vitest/ui' - bufferutil - esbuild @@ -7012,14 +7343,26 @@ snapshots: - sass-embedded - stylus - sugarss + - svelte - terser - tsx - typescript - unplugin-unused + - unrun - utf-8-validate - vite - yaml + vite@5.4.21(@types/node@24.0.7)(lightningcss@1.32.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.10 + rollup: 4.59.0 + optionalDependencies: + '@types/node': 24.0.7 + fsevents: 2.3.3 + lightningcss: 1.32.0 + vitepress-plugin-llms@1.11.0: dependencies: gray-matter: 4.0.3 @@ -7039,7 +7382,7 @@ snapshots: transitivePeerDependencies: - supports-color - vitepress@1.6.3(@algolia/client-search@5.29.0)(@types/node@24.0.7)(axios@1.13.5)(esbuild@0.27.3)(fuse.js@7.1.0)(jiti@2.7.0)(nprogress@0.2.0)(postcss@8.5.10)(qrcode@1.5.4)(search-insights@2.17.3)(typescript@5.8.3)(yaml@2.8.0): + vitepress@1.6.3(@algolia/client-search@5.29.0)(@types/node@24.0.7)(axios@1.13.5)(fuse.js@7.1.0)(lightningcss@1.32.0)(nprogress@0.2.0)(postcss@8.5.10)(qrcode@1.5.4)(search-insights@2.17.3)(typescript@5.8.3): dependencies: '@docsearch/css': 3.8.2 '@docsearch/js': 3.8.2(@algolia/client-search@5.29.0)(search-insights@2.17.3) @@ -7048,7 +7391,7 @@ snapshots: '@shikijs/transformers': 2.5.0 '@shikijs/types': 2.5.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.4(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0))(vue@3.5.29(typescript@5.8.3)) + '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@24.0.7)(lightningcss@1.32.0))(vue@3.5.29(typescript@5.8.3)) '@vue/devtools-api': 7.7.7 '@vue/shared': 3.5.17 '@vueuse/core': 12.8.2(typescript@5.8.3) @@ -7057,30 +7400,24 @@ snapshots: mark.js: 8.11.1 minisearch: 7.1.2 shiki: 2.5.0 - vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.0.7)(esbuild@0.27.3)(jiti@2.7.0)(typescript@5.8.3)(yaml@2.8.0)' + vite: 5.4.21(@types/node@24.0.7)(lightningcss@1.32.0) vue: 3.5.29(typescript@5.8.3) optionalDependencies: postcss: 8.5.10 transitivePeerDependencies: - '@algolia/client-search' - - '@arethetypeswrong/core' - - '@tsdown/css' - - '@tsdown/exe' - '@types/node' - '@types/react' - - '@vitejs/devtools' - async-validator - axios - change-case - drauu - - esbuild - fuse.js - idb-keyval - - jiti - jwt-decode - less + - lightningcss - nprogress - - publint - qrcode - react - react-dom @@ -7091,11 +7428,8 @@ snapshots: - stylus - sugarss - terser - - tsx - typescript - universal-cookie - - unplugin-unused - - yaml vscode-uri@3.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000000..9191417c56 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,18 @@ +blockExoticSubdeps: false + +minimumReleaseAge: 60 +minimumReleaseAgeExclude: + - vite-plus + - "@voidzero-dev/*" + - "@oxc-project/*" + - "@oxlint/*" + - oxlint + - oxfmt + - oxlint-tsgolint + +overrides: + form-data@<2.5.4: ">=2.5.4" + "@rolldown/pluginutils": 1.0.0-rc.9 + "@voidzero-dev/vite-plus-core": "https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-core@1703" + "@voidzero-dev/vite-plus-test": "https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-test@1703" + "@voidzero-dev/vite-plus-prompts": "https://pkg.pr.new/voidzero-dev/vite-plus/@voidzero-dev/vite-plus-prompts@1703" diff --git a/resources/assets/css/app.pcss b/resources/assets/css/app.pcss index 7e5ba4e56a..8bb76a8f67 100644 --- a/resources/assets/css/app.pcss +++ b/resources/assets/css/app.pcss @@ -1,14 +1,14 @@ @layer theme, base, components, utilities; -@import 'tailwindcss'; -@import './partials/vars.pcss'; -@import './partials/hack.pcss' layer(base); -@import './vendor/nprogress.pcss' layer(base); -@import './partials/skeleton.pcss' layer(base); -@import './partials/tooltip.pcss' layer(base); -@import './partials/context-menu.pcss' layer(base); -@import './partials/shared.pcss' layer(base); -@import './partials/scroll-mask.pcss'; +@import "tailwindcss"; +@import "./partials/vars.pcss"; +@import "./partials/hack.pcss" layer(base); +@import "./vendor/nprogress.pcss" layer(base); +@import "./partials/skeleton.pcss" layer(base); +@import "./partials/tooltip.pcss" layer(base); +@import "./partials/context-menu.pcss" layer(base); +@import "./partials/shared.pcss" layer(base); +@import "./partials/scroll-mask.pcss"; @config "../../../tailwind.config.js"; diff --git a/resources/assets/css/partials/scroll-mask.pcss b/resources/assets/css/partials/scroll-mask.pcss index 31054568f3..41be1172f9 100644 --- a/resources/assets/css/partials/scroll-mask.pcss +++ b/resources/assets/css/partials/scroll-mask.pcss @@ -1,23 +1,23 @@ @property --scroll-mask-t-from { - syntax: ''; + syntax: ""; inherits: false; initial-value: 100%; } @property --scroll-mask-b-from { - syntax: ''; + syntax: ""; inherits: false; initial-value: 100%; } @property --scroll-mask-l-from { - syntax: ''; + syntax: ""; inherits: false; initial-value: 100%; } @property --scroll-mask-r-from { - syntax: ''; + syntax: ""; inherits: false; initial-value: 100%; } @@ -57,12 +57,18 @@ } @supports (animation-timeline: scroll()) { - :where([class^='scroll-mask-'], [class*=' scroll-mask-']) { + :where([class^="scroll-mask-"], [class*=" scroll-mask-"]) { --scroll-mask-t: linear-gradient(to top, black, black var(--scroll-mask-t-from), transparent); - --scroll-mask-b: linear-gradient(to bottom, black, black var(--scroll-mask-b-from), transparent); + --scroll-mask-b: linear-gradient( + to bottom, + black, + black var(--scroll-mask-b-from), + transparent + ); --scroll-mask-l: linear-gradient(to left, black, black var(--scroll-mask-l-from), transparent); --scroll-mask-r: linear-gradient(to right, black, black var(--scroll-mask-r-from), transparent); - mask-image: var(--scroll-mask-t), var(--scroll-mask-b), var(--scroll-mask-l), var(--scroll-mask-r); + mask-image: + var(--scroll-mask-t), var(--scroll-mask-b), var(--scroll-mask-l), var(--scroll-mask-r); mask-composite: intersect; -webkit-mask-composite: source-in; animation: diff --git a/resources/assets/css/partials/shared.pcss b/resources/assets/css/partials/shared.pcss index 42f9aa8ded..4e8b3a6326 100644 --- a/resources/assets/css/partials/shared.pcss +++ b/resources/assets/css/partials/shared.pcss @@ -81,7 +81,7 @@ textarea, } button, -[role='button'] { +[role="button"] { @apply touch-manipulation select-none cursor-pointer focus-visible:outline-1 focus-visible:outline-k-highlight; } diff --git a/resources/assets/css/partials/vars.pcss b/resources/assets/css/partials/vars.pcss index 0829e159f9..234d201c3e 100644 --- a/resources/assets/css/partials/vars.pcss +++ b/resources/assets/css/partials/vars.pcss @@ -11,8 +11,8 @@ --bg-size: cover; --font-family: - system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', - sans-serif; + system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, + Cantarell, "Helvetica Neue", sans-serif; --font-size: 13px; --header-height: auto; diff --git a/resources/assets/css/remote.pcss b/resources/assets/css/remote.pcss index 93b6ebf651..160db2dec7 100644 --- a/resources/assets/css/remote.pcss +++ b/resources/assets/css/remote.pcss @@ -1,8 +1,8 @@ @layer theme, base, components, utilities; -@import 'tailwindcss'; -@import './partials/vars.pcss'; -@import './partials/shared.pcss' layer(base); +@import "tailwindcss"; +@import "./partials/vars.pcss"; +@import "./partials/shared.pcss" layer(base); @config "../../../tailwind.config.js"; diff --git a/resources/assets/js/App.vue b/resources/assets/js/App.vue index 6a6a49b401..2d7657c1c2 100644 --- a/resources/assets/js/App.vue +++ b/resources/assets/js/App.vue @@ -33,12 +33,12 @@ diff --git a/resources/assets/js/components/embed/widget/EmbedWidgetTrackItem.spec.ts b/resources/assets/js/components/embed/widget/EmbedWidgetTrackItem.spec.ts index 979c5a93f0..9d5a381b75 100644 --- a/resources/assets/js/components/embed/widget/EmbedWidgetTrackItem.spec.ts +++ b/resources/assets/js/components/embed/widget/EmbedWidgetTrackItem.spec.ts @@ -1,10 +1,10 @@ -import { describe, expect, it } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import { screen } from '@testing-library/vue' -import EmbedWidgetTrackItem from './EmbedWidgetTrackItem.vue' +import { describe, expect, it } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import { screen } from "@testing-library/vue"; +import EmbedWidgetTrackItem from "./EmbedWidgetTrackItem.vue"; -describe('playableEmbedItem.vue', async () => { - const h = createHarness() +describe("playableEmbedItem.vue", async () => { + const h = createHarness(); const renderComponent = (playable: Playable) => { const rendered = h.render(EmbedWidgetTrackItem, { @@ -16,47 +16,47 @@ describe('playableEmbedItem.vue', async () => { }, global: { stubs: { - PlayableThumbnail: h.stub('playable-thumbnail'), + PlayableThumbnail: h.stub("playable-thumbnail"), }, }, - }) + }); return { ...rendered, playable, - } - } + }; + }; - it('renders a song', () => { + it("renders a song", () => { const { html } = renderComponent( - h.factory('song').make({ - title: 'Bohemian Rhapsody', + h.factory("song").make({ + title: "Bohemian Rhapsody", length: 280, - artist_name: 'Queen', - album_name: 'A Night at the Opera', + artist_name: "Queen", + album_name: "A Night at the Opera", track: 9, }), - ) + ); - expect(html()).toMatchSnapshot() - }) + expect(html()).toMatchSnapshot(); + }); - it('renders a podcast episode', () => { + it("renders a podcast episode", () => { const { html } = renderComponent( - h.factory('episode').make({ - title: 'How to tell people to shut up about Queen', + h.factory("episode").make({ + title: "How to tell people to shut up about Queen", length: 280, - podcast_title: 'The Everyday Guide', - podcast_author: 'The Everyday Guy', + podcast_title: "The Everyday Guide", + podcast_author: "The Everyday Guy", }), - ) + ); - expect(html()).toMatchSnapshot() - }) + expect(html()).toMatchSnapshot(); + }); - it('emits the play event on double-click', async () => { - const { playable, emitted } = renderComponent(h.factory('song').make()) - await h.user.dblClick(screen.getByTestId('playable-embed-item')) - expect(emitted().play[0]).toEqual([playable]) - }) -}) + it("emits the play event on double-click", async () => { + const { playable, emitted } = renderComponent(h.factory("song").make()); + await h.user.dblClick(screen.getByTestId("playable-embed-item")); + expect(emitted().play[0]).toEqual([playable]); + }); +}); diff --git a/resources/assets/js/components/embed/widget/EmbedWidgetTrackItem.vue b/resources/assets/js/components/embed/widget/EmbedWidgetTrackItem.vue index e553f7a62a..d80fc26ab1 100644 --- a/resources/assets/js/components/embed/widget/EmbedWidgetTrackItem.vue +++ b/resources/assets/js/components/embed/widget/EmbedWidgetTrackItem.vue @@ -10,7 +10,7 @@ - + @@ -27,29 +27,29 @@ diff --git a/resources/assets/js/components/layout/app-footer/FooterExtraControls.spec.ts b/resources/assets/js/components/layout/app-footer/FooterExtraControls.spec.ts index 446741ff7d..c760d002b0 100644 --- a/resources/assets/js/components/layout/app-footer/FooterExtraControls.spec.ts +++ b/resources/assets/js/components/layout/app-footer/FooterExtraControls.spec.ts @@ -1,35 +1,35 @@ -import { describe, expect, it } from 'vite-plus/test' -import { screen } from '@testing-library/vue' -import { createHarness } from '@/__tests__/TestHarness' -import { eventBus } from '@/utils/eventBus' -import Component from './FooterExtraControls.vue' +import { describe, expect, it } from "vite-plus/test"; +import { screen } from "@testing-library/vue"; +import { createHarness } from "@/__tests__/TestHarness"; +import { eventBus } from "@/utils/eventBus"; +import Component from "./FooterExtraControls.vue"; -describe('footerExtraControls.vue', () => { - const h = createHarness() +describe("footerExtraControls.vue", () => { + const h = createHarness(); const renderComponent = () => { return h.render(Component, { global: { stubs: { - Equalizer: h.stub('Equalizer'), - Volume: h.stub('Volume'), + Equalizer: h.stub("Equalizer"), + Volume: h.stub("Volume"), }, }, - }) - } + }); + }; - it('renders', () => { - h.setReadOnlyProperty(document, 'fullscreenEnabled', undefined) - expect(renderComponent().html()).toMatchSnapshot() - }) + it("renders", () => { + h.setReadOnlyProperty(document, "fullscreenEnabled", undefined); + expect(renderComponent().html()).toMatchSnapshot(); + }); - it('toggles fullscreen mode', async () => { - h.setReadOnlyProperty(document, 'fullscreenEnabled', true) - renderComponent() - const emitMock = h.mock(eventBus, 'emit') + it("toggles fullscreen mode", async () => { + h.setReadOnlyProperty(document, "fullscreenEnabled", true); + renderComponent(); + const emitMock = h.mock(eventBus, "emit"); - await h.user.click(screen.getByTitle('Enter fullscreen mode')) + await h.user.click(screen.getByTitle("Enter fullscreen mode")); - expect(emitMock).toHaveBeenCalledWith('FULLSCREEN_TOGGLE') - }) -}) + expect(emitMock).toHaveBeenCalledWith("FULLSCREEN_TOGGLE"); + }); +}); diff --git a/resources/assets/js/components/layout/app-footer/FooterExtraControls.vue b/resources/assets/js/components/layout/app-footer/FooterExtraControls.vue index 098c97c709..c0a2069109 100644 --- a/resources/assets/js/components/layout/app-footer/FooterExtraControls.vue +++ b/resources/assets/js/components/layout/app-footer/FooterExtraControls.vue @@ -37,36 +37,38 @@ diff --git a/resources/assets/js/components/layout/main-wrapper/sidebar/PlaylistFolderSidebarItem.spec.ts b/resources/assets/js/components/layout/main-wrapper/sidebar/PlaylistFolderSidebarItem.spec.ts index e74d7607b2..117d945dae 100644 --- a/resources/assets/js/components/layout/main-wrapper/sidebar/PlaylistFolderSidebarItem.spec.ts +++ b/resources/assets/js/components/layout/main-wrapper/sidebar/PlaylistFolderSidebarItem.spec.ts @@ -1,18 +1,18 @@ -import { describe, it } from 'vite-plus/test' -import { screen } from '@testing-library/vue' -import { createHarness } from '@/__tests__/TestHarness' -import Component from './PlaylistFolderSidebarItem.vue' +import { describe, it } from "vite-plus/test"; +import { screen } from "@testing-library/vue"; +import { createHarness } from "@/__tests__/TestHarness"; +import Component from "./PlaylistFolderSidebarItem.vue"; -describe('playlistFolderSidebarItem.vue', () => { - const h = createHarness() +describe("playlistFolderSidebarItem.vue", () => { + const h = createHarness(); - it('renders folder name', () => { - const folder = h.factory('playlist-folder').make() + it("renders folder name", () => { + const folder = h.factory("playlist-folder").make(); h.render(Component, { props: { folder }, - }) + }); - screen.getByText(folder.name) - }) -}) + screen.getByText(folder.name); + }); +}); diff --git a/resources/assets/js/components/layout/main-wrapper/sidebar/PlaylistFolderSidebarItem.vue b/resources/assets/js/components/layout/main-wrapper/sidebar/PlaylistFolderSidebarItem.vue index 4640063f22..d2079b33ba 100644 --- a/resources/assets/js/components/layout/main-wrapper/sidebar/PlaylistFolderSidebarItem.vue +++ b/resources/assets/js/components/layout/main-wrapper/sidebar/PlaylistFolderSidebarItem.vue @@ -41,112 +41,114 @@ diff --git a/resources/assets/js/components/meta/SponsorList.spec.ts b/resources/assets/js/components/meta/SponsorList.spec.ts index 6f3baa169b..aeff0e380c 100644 --- a/resources/assets/js/components/meta/SponsorList.spec.ts +++ b/resources/assets/js/components/meta/SponsorList.spec.ts @@ -1,11 +1,11 @@ -import { describe, expect, it } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import Component from './SponsorList.vue' +import { describe, expect, it } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import Component from "./SponsorList.vue"; -describe('sponsorList.vue', () => { - const h = createHarness() +describe("sponsorList.vue", () => { + const h = createHarness(); - it('renders', () => { - expect(h.render(Component).html()).toMatchSnapshot() - }) -}) + it("renders", () => { + expect(h.render(Component).html()).toMatchSnapshot(); + }); +}); diff --git a/resources/assets/js/components/meta/SponsorList.vue b/resources/assets/js/components/meta/SponsorList.vue index 30d3ebc3ff..d668b42ecf 100644 --- a/resources/assets/js/components/meta/SponsorList.vue +++ b/resources/assets/js/components/meta/SponsorList.vue @@ -21,5 +21,5 @@ diff --git a/resources/assets/js/components/meta/SupportKoel.spec.ts b/resources/assets/js/components/meta/SupportKoel.spec.ts index e2aa216d09..fe1f30c2e8 100644 --- a/resources/assets/js/components/meta/SupportKoel.spec.ts +++ b/resources/assets/js/components/meta/SupportKoel.spec.ts @@ -1,55 +1,55 @@ -import { describe, expect, it, vi } from 'vite-plus/test' -import { screen } from '@testing-library/vue' -import { createHarness } from '@/__tests__/TestHarness' -import { preferenceStore } from '@/stores/preferenceStore' -import Component from './SupportKoel.vue' +import { describe, expect, it, vi } from "vite-plus/test"; +import { screen } from "@testing-library/vue"; +import { createHarness } from "@/__tests__/TestHarness"; +import { preferenceStore } from "@/stores/preferenceStore"; +import Component from "./SupportKoel.vue"; -describe('supportKoel.vue', () => { +describe("supportKoel.vue", () => { const h = createHarness({ beforeEach: () => vi.useFakeTimers(), afterEach: () => { - vi.useRealTimers() - preferenceStore.state.support_bar_no_bugging = false + vi.useRealTimers(); + preferenceStore.state.support_bar_no_bugging = false; }, authenticated: false, // we want to trigger preferenceStore.initialized manually - }) + }); const renderComponent = async () => { - preferenceStore.initialized.value = true - const rendered = h.render(Component) + preferenceStore.initialized.value = true; + const rendered = h.render(Component); - vi.advanceTimersByTime(30 * 60 * 1000) - await h.tick() + vi.advanceTimersByTime(30 * 60 * 1000); + await h.tick(); - return rendered - } + return rendered; + }; - it('shows after a delay', async () => expect((await renderComponent()).html()).toMatchSnapshot()) + it("shows after a delay", async () => expect((await renderComponent()).html()).toMatchSnapshot()); - it('does not show if user so demands', async () => { - preferenceStore.state.support_bar_no_bugging = true - preferenceStore.initialized.value = true - expect((await renderComponent()).queryByTestId('support-bar')).toBeNull() - }) + it("does not show if user so demands", async () => { + preferenceStore.state.support_bar_no_bugging = true; + preferenceStore.initialized.value = true; + expect((await renderComponent()).queryByTestId("support-bar")).toBeNull(); + }); - it('does not show for Plus edition', async () => { + it("does not show for Plus edition", async () => { await h.withPlusEdition(async () => { - expect((await renderComponent()).queryByTestId('support-bar')).toBeNull() - }) - }) + expect((await renderComponent()).queryByTestId("support-bar")).toBeNull(); + }); + }); - it('hides', async () => { - await renderComponent() - await h.user.click(screen.getByRole('button', { name: 'Hide' })) + it("hides", async () => { + await renderComponent(); + await h.user.click(screen.getByRole("button", { name: "Hide" })); - expect(screen.queryByTestId('support-bar')).toBeNull() - }) + expect(screen.queryByTestId("support-bar")).toBeNull(); + }); - it('hides and does not bug again', async () => { - await renderComponent() - await h.user.click(screen.getByRole('button', { name: "Don't bug me again" })) + it("hides and does not bug again", async () => { + await renderComponent(); + await h.user.click(screen.getByRole("button", { name: "Don't bug me again" })); - expect(screen.queryByTestId('support-bar')).toBeNull() - expect(preferenceStore.state.support_bar_no_bugging).toBe(true) - }) -}) + expect(screen.queryByTestId("support-bar")).toBeNull(); + expect(preferenceStore.state.support_bar_no_bugging).toBe(true); + }); +}); diff --git a/resources/assets/js/components/meta/SupportKoel.vue b/resources/assets/js/components/meta/SupportKoel.vue index 7ab17b785f..bb1cd6aa82 100644 --- a/resources/assets/js/components/meta/SupportKoel.vue +++ b/resources/assets/js/components/meta/SupportKoel.vue @@ -1,8 +1,14 @@ diff --git a/resources/assets/js/components/screens/NotFoundScreen.spec.ts b/resources/assets/js/components/screens/NotFoundScreen.spec.ts index 0832934437..44cc8bbeb7 100644 --- a/resources/assets/js/components/screens/NotFoundScreen.spec.ts +++ b/resources/assets/js/components/screens/NotFoundScreen.spec.ts @@ -1,13 +1,13 @@ -import { screen } from '@testing-library/vue' -import { describe, it } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import Component from './NotFoundScreen.vue' +import { screen } from "@testing-library/vue"; +import { describe, it } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import Component from "./NotFoundScreen.vue"; -describe('NotFoundScreen', () => { - const h = createHarness() +describe("NotFoundScreen", () => { + const h = createHarness(); - it('renders the not found message', () => { - h.render(Component) - screen.getByText('The requested content cannot be found.') - }) -}) + it("renders the not found message", () => { + h.render(Component); + screen.getByText("The requested content cannot be found."); + }); +}); diff --git a/resources/assets/js/components/screens/NotFoundScreen.vue b/resources/assets/js/components/screens/NotFoundScreen.vue index 80775972b5..e63975fb7f 100644 --- a/resources/assets/js/components/screens/NotFoundScreen.vue +++ b/resources/assets/js/components/screens/NotFoundScreen.vue @@ -15,9 +15,9 @@ diff --git a/resources/assets/js/components/screens/OfflineSongsScreen.spec.ts b/resources/assets/js/components/screens/OfflineSongsScreen.spec.ts index 29af650c07..58841fe717 100644 --- a/resources/assets/js/components/screens/OfflineSongsScreen.spec.ts +++ b/resources/assets/js/components/screens/OfflineSongsScreen.spec.ts @@ -1,12 +1,12 @@ -import { describe, it, vi } from 'vite-plus/test' -import { ref, computed } from 'vue' -import { screen } from '@testing-library/vue' -import { createHarness } from '@/__tests__/TestHarness' -import { playableStore } from '@/stores/playableStore' +import { describe, it, vi } from "vite-plus/test"; +import { ref, computed } from "vue"; +import { screen } from "@testing-library/vue"; +import { createHarness } from "@/__tests__/TestHarness"; +import { playableStore } from "@/stores/playableStore"; -const cachedSongIds = ref(new Set()) +const cachedSongIds = ref(new Set()); -vi.mock('@/composables/useOfflinePlayback', () => ({ +vi.mock("@/composables/useOfflinePlayback", () => ({ useOfflinePlayback: () => ({ swReady: ref(true), cachedSongIds, @@ -23,30 +23,32 @@ vi.mock('@/composables/useOfflinePlayback', () => ({ checkCacheStatus: vi.fn(), refreshStorageEstimate: vi.fn(), }), -})) +})); -import Component from './OfflineSongsScreen.vue' +import Component from "./OfflineSongsScreen.vue"; -describe('offlineSongsScreen', () => { +describe("offlineSongsScreen", () => { const h = createHarness({ beforeEach: () => { - cachedSongIds.value = new Set() + cachedSongIds.value = new Set(); }, - }) + }); - it('shows empty state when no songs are cached', () => { - h.render(Component) - screen.getByText('No songs available offline.') - }) + it("shows empty state when no songs are cached", () => { + h.render(Component); + screen.getByText("No songs available offline."); + }); - it('shows cached songs count in header', () => { - const songs = h.factory('song').make(3) - songs.forEach(s => { - cachedSongIds.value.add(s.id) - }) - h.mock(playableStore, 'byId').mockImplementation((id: string) => songs.find(song => song.id === id)) + it("shows cached songs count in header", () => { + const songs = h.factory("song").make(3); + songs.forEach((s) => { + cachedSongIds.value.add(s.id); + }); + h.mock(playableStore, "byId").mockImplementation((id: string) => + songs.find((song) => song.id === id), + ); - h.render(Component) - screen.getByText('3 songs') - }) -}) + h.render(Component); + screen.getByText("3 songs"); + }); +}); diff --git a/resources/assets/js/components/screens/OfflineSongsScreen.vue b/resources/assets/js/components/screens/OfflineSongsScreen.vue index cd78c88c1f..ccc48ea38f 100644 --- a/resources/assets/js/components/screens/OfflineSongsScreen.vue +++ b/resources/assets/js/components/screens/OfflineSongsScreen.vue @@ -9,7 +9,7 @@ @@ -38,36 +38,38 @@ No songs available offline. - Right-click a song and select "Make Available Offline" to cache it. + + Right-click a song and select "Make Available Offline" to cache it. + diff --git a/resources/assets/js/components/screens/PlaylistScreen.spec.ts b/resources/assets/js/components/screens/PlaylistScreen.spec.ts index 0abd25e35c..452cb3c4da 100644 --- a/resources/assets/js/components/screens/PlaylistScreen.spec.ts +++ b/resources/assets/js/components/screens/PlaylistScreen.spec.ts @@ -1,107 +1,109 @@ -import { screen, waitFor } from '@testing-library/vue' -import type { Mock } from 'vite-plus/test' -import { describe, expect, it, vi } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import { eventBus } from '@/utils/eventBus' -import { playlistStore } from '@/stores/playlistStore' -import { playableStore } from '@/stores/playableStore' -import Router from '@/router' -import type { Events } from '@/config/events' -import { useContextMenu } from '@/composables/useContextMenu' -import { assertOpenContextMenu } from '@/__tests__/assertions' -import PlaylistContextMenu from '@/components/playlist/PlaylistContextMenu.vue' -import Component from './PlaylistScreen.vue' - -vi.mock('@/composables/useContextMenu') - -describe('playlistScreen.vue', () => { - const h = createHarness() +import { screen, waitFor } from "@testing-library/vue"; +import type { Mock } from "vite-plus/test"; +import { describe, expect, it, vi } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import { eventBus } from "@/utils/eventBus"; +import { playlistStore } from "@/stores/playlistStore"; +import { playableStore } from "@/stores/playableStore"; +import Router from "@/router"; +import type { Events } from "@/config/events"; +import { useContextMenu } from "@/composables/useContextMenu"; +import { assertOpenContextMenu } from "@/__tests__/assertions"; +import PlaylistContextMenu from "@/components/playlist/PlaylistContextMenu.vue"; +import Component from "./PlaylistScreen.vue"; + +vi.mock("@/composables/useContextMenu"); + +describe("playlistScreen.vue", () => { + const h = createHarness(); const renderComponent = async (songs: Playable[] = []) => { - const playlist = h.factory('playlist').make() - h.actingAsUser(h.factory('user').state('current').make({ id: playlist.owner_id }) as CurrentUser) + const playlist = h.factory("playlist").make(); + h.actingAsUser( + h.factory("user").state("current").make({ id: playlist.owner_id }) as CurrentUser, + ); - playlistStore.state.playlists = [] - playlistStore.init([playlist]) - playlist.playables = songs + playlistStore.state.playlists = []; + playlistStore.init([playlist]); + playlist.playables = songs; - const fetchSongsMock = h.mock(playableStore, 'fetchForPlaylist').mockResolvedValueOnce(songs) + const fetchSongsMock = h.mock(playableStore, "fetchForPlaylist").mockResolvedValueOnce(songs); const rendered = h.render(Component, { global: { stubs: { - FavoriteButton: h.stub('favorite-button', true), + FavoriteButton: h.stub("favorite-button", true), }, }, - }) + }); - h.visit(`playlists/${playlist.id}`) + h.visit(`playlists/${playlist.id}`); - await waitFor(() => expect(fetchSongsMock).toHaveBeenCalledWith(playlist, false)) + await waitFor(() => expect(fetchSongsMock).toHaveBeenCalledWith(playlist, false)); return { ...rendered, playlist, fetchSongsMock, - } - } + }; + }; - it('renders the playlist', async () => { - await renderComponent(h.factory('song').make(10)) + it("renders the playlist", async () => { + await renderComponent(h.factory("song").make(10)); await waitFor(() => { - screen.getByTestId('song-list') - expect(screen.queryByTestId('screen-empty-state')).toBeNull() - }) - }) + screen.getByTestId("song-list"); + expect(screen.queryByTestId("screen-empty-state")).toBeNull(); + }); + }); - it('displays the empty state if playlist is empty', async () => { - await renderComponent() + it("displays the empty state if playlist is empty", async () => { + await renderComponent(); await waitFor(() => { - screen.getByTestId('screen-empty-state') - expect(screen.queryByTestId('song-list')).toBeNull() - }) - }) + screen.getByTestId("screen-empty-state"); + expect(screen.queryByTestId("song-list")).toBeNull(); + }); + }); - it('refreshes the playlist', async () => { - const { playlist, fetchSongsMock } = await renderComponent() - fetchSongsMock.mockResolvedValue(h.factory('song').make(5)) + it("refreshes the playlist", async () => { + const { playlist, fetchSongsMock } = await renderComponent(); + fetchSongsMock.mockResolvedValue(h.factory("song").make(5)); - await h.user.click(screen.getByRole('button', { name: 'Refresh' })) + await h.user.click(screen.getByRole("button", { name: "Refresh" })); - expect(fetchSongsMock).toHaveBeenCalledWith(playlist, true) - }) + expect(fetchSongsMock).toHaveBeenCalledWith(playlist, true); + }); - it('shows Actions menu', async () => { - const { openContextMenu } = useContextMenu() - const { playlist } = await renderComponent() + it("shows Actions menu", async () => { + const { openContextMenu } = useContextMenu(); + const { playlist } = await renderComponent(); await waitFor(async () => { - await h.user.click(screen.getByRole('button', { name: 'More Actions' })) - await assertOpenContextMenu(openContextMenu as Mock, PlaylistContextMenu, { playlist }) - }) - }) + await h.user.click(screen.getByRole("button", { name: "More Actions" })); + await assertOpenContextMenu(openContextMenu as Mock, PlaylistContextMenu, { playlist }); + }); + }); - it('goes back to home if playlist is deleted', async () => { - const goMock = h.mock(Router, 'go') - const { playlist } = await renderComponent() - eventBus.emit('PLAYLIST_DELETED', playlist) + it("goes back to home if playlist is deleted", async () => { + const goMock = h.mock(Router, "go"); + const { playlist } = await renderComponent(); + eventBus.emit("PLAYLIST_DELETED", playlist); - await h.tick() + await h.tick(); - expect(goMock).toHaveBeenCalledWith('/#/home') - }) + expect(goMock).toHaveBeenCalledWith("/#/home"); + }); - it.each<[keyof Events]>([['PLAYLIST_UPDATED'], ['PLAYLIST_COLLABORATOR_REMOVED']])( - 'refreshes upon %s event trigger', - async eventKey => { - const { playlist, fetchSongsMock } = await renderComponent() - fetchSongsMock.mockResolvedValueOnce(h.factory('song').make(5)) + it.each<[keyof Events]>([["PLAYLIST_UPDATED"], ["PLAYLIST_COLLABORATOR_REMOVED"]])( + "refreshes upon %s event trigger", + async (eventKey) => { + const { playlist, fetchSongsMock } = await renderComponent(); + fetchSongsMock.mockResolvedValueOnce(h.factory("song").make(5)); - eventBus.emit(eventKey, playlist) + eventBus.emit(eventKey, playlist); - expect(fetchSongsMock).toHaveBeenCalledWith(playlist, false) + expect(fetchSongsMock).toHaveBeenCalledWith(playlist, false); }, - ) -}) + ); +}); diff --git a/resources/assets/js/components/screens/PlaylistScreen.vue b/resources/assets/js/components/screens/PlaylistScreen.vue index ddf3bd36fe..93f561b430 100644 --- a/resources/assets/js/components/screens/PlaylistScreen.vue +++ b/resources/assets/js/components/screens/PlaylistScreen.vue @@ -1,7 +1,11 @@ diff --git a/resources/assets/js/components/screens/PodcastListScreen.spec.ts b/resources/assets/js/components/screens/PodcastListScreen.spec.ts index dd68dcd60a..f5bbd33896 100644 --- a/resources/assets/js/components/screens/PodcastListScreen.spec.ts +++ b/resources/assets/js/components/screens/PodcastListScreen.spec.ts @@ -1,74 +1,74 @@ -import { screen, waitFor } from '@testing-library/vue' -import { describe, expect, it } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import { podcastStore } from '@/stores/podcastStore' -import Component from './PodcastListScreen.vue' +import { screen, waitFor } from "@testing-library/vue"; +import { describe, expect, it } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import { podcastStore } from "@/stores/podcastStore"; +import Component from "./PodcastListScreen.vue"; -describe('podcastListScreen.vue', () => { - const h = createHarness() +describe("podcastListScreen.vue", () => { + const h = createHarness(); const renderComponent = async () => { const rendered = h.render(Component, { global: { stubs: { - PodcastItem: h.stub('podcast-item'), + PodcastItem: h.stub("podcast-item"), }, }, - }) + }); - h.visit('/podcasts') - await h.tick() + h.visit("/podcasts"); + await h.tick(); - return rendered - } + return rendered; + }; - it('renders', async () => { - const fetchMock = h.mock(podcastStore, 'fetchAll') - podcastStore.state.podcasts = h.factory('podcast').make(9) + it("renders", async () => { + const fetchMock = h.mock(podcastStore, "fetchAll"); + podcastStore.state.podcasts = h.factory("podcast").make(9); - await renderComponent() + await renderComponent(); - expect(screen.getAllByTestId('podcast-item')).toHaveLength(9) - expect(fetchMock).toHaveBeenCalled() - }) + expect(screen.getAllByTestId("podcast-item")).toHaveLength(9); + expect(fetchMock).toHaveBeenCalled(); + }); - it('shows a message when there are no podcasts', async () => { - h.mock(podcastStore, 'fetchAll') - podcastStore.state.podcasts = [] - await renderComponent() + it("shows a message when there are no podcasts", async () => { + h.mock(podcastStore, "fetchAll"); + podcastStore.state.podcasts = []; + await renderComponent(); - await waitFor(() => screen.getByTestId('screen-empty-state')) - }) + await waitFor(() => screen.getByTestId("screen-empty-state")); + }); - it('shows all or only favorites upon toggling the button', async () => { + it("shows all or only favorites upon toggling the button", async () => { podcastStore.state.podcasts = [ - ...h.factory('podcast').make({ favorite: true }, 3), - ...h.factory('podcast').make({ favorite: false }, 6), - ] + ...h.factory("podcast").make({ favorite: true }, 3), + ...h.factory("podcast").make({ favorite: false }, 6), + ]; - h.mock(podcastStore, 'fetchAll') + h.mock(podcastStore, "fetchAll"); - await renderComponent() - expect(screen.getAllByTestId('podcast-item')).toHaveLength(9) + await renderComponent(); + expect(screen.getAllByTestId("podcast-item")).toHaveLength(9); - await h.user.click(screen.getByRole('button', { name: 'Show favorites only' })) - await waitFor(() => expect(screen.getAllByTestId('podcast-item')).toHaveLength(3)) + await h.user.click(screen.getByRole("button", { name: "Show favorites only" })); + await waitFor(() => expect(screen.getAllByTestId("podcast-item")).toHaveLength(3)); - await h.user.click(screen.getByRole('button', { name: 'Show all' })) - await waitFor(() => expect(screen.getAllByTestId('podcast-item')).toHaveLength(9)) - }) + await h.user.click(screen.getByRole("button", { name: "Show all" })); + await waitFor(() => expect(screen.getAllByTestId("podcast-item")).toHaveLength(9)); + }); - it('shows contextual empty state when no favorite podcasts', async () => { - podcastStore.state.podcasts = h.factory('podcast').make({ favorite: false }, 3) - h.mock(podcastStore, 'fetchAll') + it("shows contextual empty state when no favorite podcasts", async () => { + podcastStore.state.podcasts = h.factory("podcast").make({ favorite: false }, 3); + h.mock(podcastStore, "fetchAll"); - await renderComponent() + await renderComponent(); - await h.user.click(screen.getByRole('button', { name: 'Show favorites only' })) + await h.user.click(screen.getByRole("button", { name: "Show favorites only" })); await waitFor(() => { - const emptyState = screen.getByTestId('screen-empty-state') - expect(emptyState.textContent).toContain('No favorite podcasts') - }) - }) -}) + const emptyState = screen.getByTestId("screen-empty-state"); + expect(emptyState.textContent).toContain("No favorite podcasts"); + }); + }); +}); diff --git a/resources/assets/js/components/screens/PodcastListScreen.vue b/resources/assets/js/components/screens/PodcastListScreen.vue index e3601a1dfa..35b3fb0369 100644 --- a/resources/assets/js/components/screens/PodcastListScreen.vue +++ b/resources/assets/js/components/screens/PodcastListScreen.vue @@ -60,74 +60,76 @@ diff --git a/resources/assets/js/components/screens/PodcastScreen.spec.ts b/resources/assets/js/components/screens/PodcastScreen.spec.ts index 45e9250065..8f92d65dd6 100644 --- a/resources/assets/js/components/screens/PodcastScreen.spec.ts +++ b/resources/assets/js/components/screens/PodcastScreen.spec.ts @@ -1,53 +1,55 @@ -import { screen, waitFor } from '@testing-library/vue' -import type { Mock } from 'vite-plus/test' -import { describe, expect, it, vi } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import { podcastStore } from '@/stores/podcastStore' -import { playableStore as episodeStore } from '@/stores/playableStore' -import { playbackService } from '@/services/QueuePlaybackService' -import { queueStore } from '@/stores/queueStore' -import Router from '@/router' -import { eventBus } from '@/utils/eventBus' -import { useContextMenu } from '@/composables/useContextMenu' -import { assertOpenContextMenu } from '@/__tests__/assertions' -import PodcastContextMenu from '@/components/podcast/PodcastContextMenu.vue' -import Component from './PodcastScreen.vue' - -vi.mock('@/composables/useContextMenu') - -describe('podcastScreen.vue', () => { - const h = createHarness() +import { screen, waitFor } from "@testing-library/vue"; +import type { Mock } from "vite-plus/test"; +import { describe, expect, it, vi } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import { podcastStore } from "@/stores/podcastStore"; +import { playableStore as episodeStore } from "@/stores/playableStore"; +import { playbackService } from "@/services/QueuePlaybackService"; +import { queueStore } from "@/stores/queueStore"; +import Router from "@/router"; +import { eventBus } from "@/utils/eventBus"; +import { useContextMenu } from "@/composables/useContextMenu"; +import { assertOpenContextMenu } from "@/__tests__/assertions"; +import PodcastContextMenu from "@/components/podcast/PodcastContextMenu.vue"; +import Component from "./PodcastScreen.vue"; + +vi.mock("@/composables/useContextMenu"); + +describe("podcastScreen.vue", () => { + const h = createHarness(); const renderComponent = async (podcast?: Podcast, episodes?: Episode[]) => { podcast = podcast || - h.factory('podcast').make({ - title: 'A Brief History of Time', + h.factory("podcast").make({ + title: "A Brief History of Time", favorite: false, - }) + }); - episodes = episodes || h.factory('episode').make({ podcast_id: podcast.id }, 9) + episodes = episodes || h.factory("episode").make({ podcast_id: podcast.id }, 9); - const resolvePodcastMock = h.mock(podcastStore, 'resolve').mockResolvedValue(podcast) - const fetchEpisodesMock = h.mock(episodeStore, 'fetchEpisodesInPodcast').mockResolvedValue(episodes) + const resolvePodcastMock = h.mock(podcastStore, "resolve").mockResolvedValue(podcast); + const fetchEpisodesMock = h + .mock(episodeStore, "fetchEpisodesInPodcast") + .mockResolvedValue(episodes); - h.visit(`podcasts/${podcast.id}`) + h.visit(`podcasts/${podcast.id}`); const rendered = h.render(Component, { global: { stubs: { - PodcastItem: h.stub('podcast-item'), - VirtualScroller: h.stub('virtual-scroller'), + PodcastItem: h.stub("podcast-item"), + VirtualScroller: h.stub("virtual-scroller"), }, }, - }) + }); await waitFor(() => { - expect(resolvePodcastMock).toHaveBeenCalledWith(podcast.id) - expect(fetchEpisodesMock).toHaveBeenCalledWith(podcast.id) - }) + expect(resolvePodcastMock).toHaveBeenCalledWith(podcast.id); + expect(fetchEpisodesMock).toHaveBeenCalledWith(podcast.id); + }); - await h.tick() + await h.tick(); return { rendered, @@ -55,102 +57,104 @@ describe('podcastScreen.vue', () => { episodes, resolvePodcastMock, fetchEpisodesMock, - } - } + }; + }; - it('renders', async () => { - await renderComponent() + it("renders", async () => { + await renderComponent(); await waitFor(() => { - screen.getByTestId('virtual-scroller') - screen.getByText('A Brief History of Time') - }) - }) + screen.getByTestId("virtual-scroller"); + screen.getByText("A Brief History of Time"); + }); + }); - it('starts playing the podcast', async () => { - h.createAudioPlayer() + it("starts playing the podcast", async () => { + h.createAudioPlayer(); - const playMock = h.mock(playbackService, 'playFirstInQueue') - await renderComponent() - await h.tick() - await h.user.click(screen.getByRole('button', { name: 'Start Listening' })) + const playMock = h.mock(playbackService, "playFirstInQueue"); + await renderComponent(); + await h.tick(); + await h.user.click(screen.getByRole("button", { name: "Start Listening" })); - expect(playMock).toHaveBeenCalled() - }) + expect(playMock).toHaveBeenCalled(); + }); - it('resumes playback if currently queue item is part of podcast', async () => { - h.createAudioPlayer() + it("resumes playback if currently queue item is part of podcast", async () => { + h.createAudioPlayer(); - const playMock = h.mock(playbackService, 'resume') + const playMock = h.mock(playbackService, "resume"); - const { episodes } = await renderComponent() - const synced = episodeStore.syncWithVault(episodes) - queueStore.state.playables = synced - synced[0].playback_state = 'Paused' + const { episodes } = await renderComponent(); + const synced = episodeStore.syncWithVault(episodes); + queueStore.state.playables = synced; + synced[0].playback_state = "Paused"; - await h.tick() - await h.user.click(screen.getByRole('button', { name: 'Start Listening' })) + await h.tick(); + await h.user.click(screen.getByRole("button", { name: "Start Listening" })); - expect(playMock).toHaveBeenCalled() - }) + expect(playMock).toHaveBeenCalled(); + }); - it('continues playing the current episode if any', async () => { - h.createAudioPlayer() + it("continues playing the current episode if any", async () => { + h.createAudioPlayer(); - const playMock = h.mock(playbackService, 'play') + const playMock = h.mock(playbackService, "play"); - const podcast = h.factory('podcast').make() - const episodes = h.factory('episode').make({ podcast_id: podcast.id }, 2) - podcast.state.current_episode = episodes[0].id + const podcast = h.factory("podcast").make(); + const episodes = h.factory("episode").make({ podcast_id: podcast.id }, 2); + podcast.state.current_episode = episodes[0].id; podcast.state.progresses = { [episodes[0].id]: 123, [episodes[1].id]: 456, - } + }; - await renderComponent(podcast, episodes) - await h.user.click(screen.getByRole('button', { name: 'Continue' })) + await renderComponent(podcast, episodes); + await h.user.click(screen.getByRole("button", { name: "Continue" })); - expect(playMock).toHaveBeenCalledWith(episodes[0], 123) - }) + expect(playMock).toHaveBeenCalledWith(episodes[0], 123); + }); - it('refreshes podcast', async () => { - const { podcast, fetchEpisodesMock } = await renderComponent() + it("refreshes podcast", async () => { + const { podcast, fetchEpisodesMock } = await renderComponent(); - await h.tick() - await h.user.click(screen.getByRole('button', { name: 'Refresh Podcast' })) + await h.tick(); + await h.user.click(screen.getByRole("button", { name: "Refresh Podcast" })); - expect(fetchEpisodesMock).toHaveBeenNthCalledWith(2, podcast.id, true) - }) + expect(fetchEpisodesMock).toHaveBeenNthCalledWith(2, podcast.id, true); + }); - it('has a Favorite button if podcast is favorite', async () => { - const { podcast } = await renderComponent(h.factory('podcast').make({ favorite: true })) - const toggleFavoriteMock = h.mock(podcastStore, 'toggleFavorite') + it("has a Favorite button if podcast is favorite", async () => { + const { podcast } = await renderComponent(h.factory("podcast").make({ favorite: true })); + const toggleFavoriteMock = h.mock(podcastStore, "toggleFavorite"); - await waitFor(async () => await h.user.click(screen.getByRole('button', { name: 'Undo Favorite' }))) + await waitFor( + async () => await h.user.click(screen.getByRole("button", { name: "Undo Favorite" })), + ); - expect(toggleFavoriteMock).toHaveBeenCalledWith(podcast) - }) + expect(toggleFavoriteMock).toHaveBeenCalledWith(podcast); + }); - it('does not have a Favorite button if podcast is not favorite', async () => { - await renderComponent(h.factory('podcast').make({ favorite: false })) - expect(screen.queryByRole('button', { name: 'Favorite' })).toBeNull() - }) + it("does not have a Favorite button if podcast is not favorite", async () => { + await renderComponent(h.factory("podcast").make({ favorite: false })); + expect(screen.queryByRole("button", { name: "Favorite" })).toBeNull(); + }); - it('requests Actions menu', async () => { - const { openContextMenu } = useContextMenu() - const { podcast } = await renderComponent() + it("requests Actions menu", async () => { + const { openContextMenu } = useContextMenu(); + const { podcast } = await renderComponent(); await waitFor(async () => { - await h.user.click(screen.getByRole('button', { name: 'More Actions' })) - await assertOpenContextMenu(openContextMenu as Mock, PodcastContextMenu, { podcast }) - }) - }) - - it('goes back to podcast list if current one is unsubscribed', async () => { - const goMock = h.mock(Router, 'go') - const { podcast } = await renderComponent() - eventBus.emit('PODCAST_UNSUBSCRIBED', podcast) - - expect(goMock).toHaveBeenCalledWith('/#/podcasts') - }) -}) + await h.user.click(screen.getByRole("button", { name: "More Actions" })); + await assertOpenContextMenu(openContextMenu as Mock, PodcastContextMenu, { podcast }); + }); + }); + + it("goes back to podcast list if current one is unsubscribed", async () => { + const goMock = h.mock(Router, "go"); + const { podcast } = await renderComponent(); + eventBus.emit("PODCAST_UNSUBSCRIBED", podcast); + + expect(goMock).toHaveBeenCalledWith("/#/podcasts"); + }); +}); diff --git a/resources/assets/js/components/screens/PodcastScreen.vue b/resources/assets/js/components/screens/PodcastScreen.vue index 420db6d17e..4bcf725bcd 100644 --- a/resources/assets/js/components/screens/PodcastScreen.vue +++ b/resources/assets/js/components/screens/PodcastScreen.vue @@ -1,12 +1,20 @@ diff --git a/resources/assets/js/components/screens/home/TopArtists.spec.ts b/resources/assets/js/components/screens/home/TopArtists.spec.ts index fbe2286dc6..13b25b8d5b 100644 --- a/resources/assets/js/components/screens/home/TopArtists.spec.ts +++ b/resources/assets/js/components/screens/home/TopArtists.spec.ts @@ -1,23 +1,23 @@ -import { describe, expect, it } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import { overviewStore } from '@/stores/overviewStore' -import TopArtists from './TopArtists.vue' +import { describe, expect, it } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import { overviewStore } from "@/stores/overviewStore"; +import TopArtists from "./TopArtists.vue"; -describe('topArtists.vue', () => { - const h = createHarness() +describe("topArtists.vue", () => { + const h = createHarness(); - it('displays the artists', () => { - overviewStore.state.mostPlayedArtists = h.factory('artist').make(6) + it("displays the artists", () => { + overviewStore.state.mostPlayedArtists = h.factory("artist").make(6); expect( h .render(TopArtists, { global: { stubs: { - ArtistCard: h.stub('artist-card'), + ArtistCard: h.stub("artist-card"), }, }, }) - .getAllByTestId('artist-card'), - ).toHaveLength(6) - }) -}) + .getAllByTestId("artist-card"), + ).toHaveLength(6); + }); +}); diff --git a/resources/assets/js/components/screens/home/TopArtists.vue b/resources/assets/js/components/screens/home/TopArtists.vue index 0ca94e2bfb..1351f4d96b 100644 --- a/resources/assets/js/components/screens/home/TopArtists.vue +++ b/resources/assets/js/components/screens/home/TopArtists.vue @@ -24,15 +24,15 @@ diff --git a/resources/assets/js/components/screens/home/ViewAllRecentlyPlayedPlayablesButton.spec.ts b/resources/assets/js/components/screens/home/ViewAllRecentlyPlayedPlayablesButton.spec.ts index 9ca52e3f89..b324ffe17a 100644 --- a/resources/assets/js/components/screens/home/ViewAllRecentlyPlayedPlayablesButton.spec.ts +++ b/resources/assets/js/components/screens/home/ViewAllRecentlyPlayedPlayablesButton.spec.ts @@ -1,24 +1,24 @@ -import { describe, expect, it, vi } from 'vite-plus/test' -import { screen } from '@testing-library/vue' -import { createHarness } from '@/__tests__/TestHarness' -import Component from './ViewAllRecentlyPlayedPlayablesButton.vue' +import { describe, expect, it, vi } from "vite-plus/test"; +import { screen } from "@testing-library/vue"; +import { createHarness } from "@/__tests__/TestHarness"; +import Component from "./ViewAllRecentlyPlayedPlayablesButton.vue"; -const goMock = vi.fn() +const goMock = vi.fn(); -vi.mock('@/composables/useRouter', () => ({ +vi.mock("@/composables/useRouter", () => ({ useRouter: () => ({ go: goMock, url: (name: string) => `/#/${name}`, }), -})) +})); -describe('viewAllRecentlyPlayedPlayablesButton.vue', () => { - const h = createHarness() +describe("viewAllRecentlyPlayedPlayablesButton.vue", () => { + const h = createHarness(); - it('navigates to recently played screen on click', async () => { - h.render(Component) - await h.user.click(screen.getByText('View All')) + it("navigates to recently played screen on click", async () => { + h.render(Component); + await h.user.click(screen.getByText("View All")); - expect(goMock).toHaveBeenCalledWith('/#/recently-played') - }) -}) + expect(goMock).toHaveBeenCalledWith("/#/recently-played"); + }); +}); diff --git a/resources/assets/js/components/screens/home/ViewAllRecentlyPlayedPlayablesButton.vue b/resources/assets/js/components/screens/home/ViewAllRecentlyPlayedPlayablesButton.vue index 0d90bdcfcb..da3b740f4f 100644 --- a/resources/assets/js/components/screens/home/ViewAllRecentlyPlayedPlayablesButton.vue +++ b/resources/assets/js/components/screens/home/ViewAllRecentlyPlayedPlayablesButton.vue @@ -1,12 +1,14 @@ diff --git a/resources/assets/js/components/screens/search/AlbumExcerptResultsBlock.spec.ts b/resources/assets/js/components/screens/search/AlbumExcerptResultsBlock.spec.ts index 4aeb189907..fcf2f3198d 100644 --- a/resources/assets/js/components/screens/search/AlbumExcerptResultsBlock.spec.ts +++ b/resources/assets/js/components/screens/search/AlbumExcerptResultsBlock.spec.ts @@ -1,26 +1,26 @@ -import { describe, expect, it } from 'vite-plus/test' -import { screen } from '@testing-library/vue' -import { createHarness } from '@/__tests__/TestHarness' -import Component from './AlbumExcerptResultsBlock.vue' +import { describe, expect, it } from "vite-plus/test"; +import { screen } from "@testing-library/vue"; +import { createHarness } from "@/__tests__/TestHarness"; +import Component from "./AlbumExcerptResultsBlock.vue"; -describe('albumExcerptResultsBlock.vue', () => { - const h = createHarness() +describe("albumExcerptResultsBlock.vue", () => { + const h = createHarness(); it('shows "None found." when no albums', () => { h.render(Component, { props: { albums: [], searching: false }, - }) + }); - screen.getByText('None found.') - }) + screen.getByText("None found."); + }); - it('renders album cards when albums are provided', () => { - const albums = h.factory('album').make(3) + it("renders album cards when albums are provided", () => { + const albums = h.factory("album").make(3); h.render(Component, { props: { albums, searching: false }, - }) + }); - expect(screen.queryByText('None found.')).toBeNull() - }) -}) + expect(screen.queryByText("None found.")).toBeNull(); + }); +}); diff --git a/resources/assets/js/components/screens/search/AlbumExcerptResultsBlock.vue b/resources/assets/js/components/screens/search/AlbumExcerptResultsBlock.vue index 4400bc8529..baafe11df3 100644 --- a/resources/assets/js/components/screens/search/AlbumExcerptResultsBlock.vue +++ b/resources/assets/js/components/screens/search/AlbumExcerptResultsBlock.vue @@ -19,18 +19,18 @@ diff --git a/resources/assets/js/components/ui/FooterPlayButton.spec.ts b/resources/assets/js/components/ui/FooterPlayButton.spec.ts index fbe69ecf32..d2221fe65d 100644 --- a/resources/assets/js/components/ui/FooterPlayButton.spec.ts +++ b/resources/assets/js/components/ui/FooterPlayButton.spec.ts @@ -1,17 +1,17 @@ -import { screen, waitFor } from '@testing-library/vue' -import { ref } from 'vue' -import { describe, expect, it } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import { playbackService } from '@/services/QueuePlaybackService' -import { CurrentStreamableKey } from '@/config/symbols' -import { commonStore } from '@/stores/commonStore' -import { playableStore } from '@/stores/playableStore' -import { recentlyPlayedStore } from '@/stores/recentlyPlayedStore' -import Router from '@/router' -import Component from './FooterPlayButton.vue' - -describe('footerPlayButton.vue', () => { - const h = createHarness() +import { screen, waitFor } from "@testing-library/vue"; +import { ref } from "vue"; +import { describe, expect, it } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import { playbackService } from "@/services/QueuePlaybackService"; +import { CurrentStreamableKey } from "@/config/symbols"; +import { commonStore } from "@/stores/commonStore"; +import { playableStore } from "@/stores/playableStore"; +import { recentlyPlayedStore } from "@/stores/recentlyPlayedStore"; +import Router from "@/router"; +import Component from "./FooterPlayButton.vue"; + +describe("footerPlayButton.vue", () => { + const h = createHarness(); const renderComponent = (currentPlayable: Playable | null = null) => { return h.render(Component, { @@ -20,83 +20,87 @@ describe('footerPlayButton.vue', () => { [CurrentStreamableKey]: ref(currentPlayable), }, }, - }) - } + }); + }; - it('toggles the playback of current item', async () => { - h.createAudioPlayer() + it("toggles the playback of current item", async () => { + h.createAudioPlayer(); - const toggleMock = h.mock(playbackService, 'toggle') - renderComponent(h.factory('song').make()) + const toggleMock = h.mock(playbackService, "toggle"); + renderComponent(h.factory("song").make()); - await h.user.click(screen.getByRole('button')) + await h.user.click(screen.getByRole("button")); - expect(toggleMock).toHaveBeenCalled() - }) + expect(toggleMock).toHaveBeenCalled(); + }); - it.each<[string, MethodOf, Album['id']]>([ - ['/albums/01K610ZFJGVTCVGZ0505464ZGR', 'fetchSongsForAlbum', '01K610ZFJGVTCVGZ0505464ZGR'], - ['/artists/01K610ZFJGVTCVGZ0505464ZGR', 'fetchSongsForArtist', '01K610ZFJGVTCVGZ0505464ZGR'], - ['/playlists/73a36cfd-4afd-48ae-b031-ae5488858375', 'fetchForPlaylist', '73a36cfd-4afd-48ae-b031-ae5488858375'], - ])('initiates playback for %s', async (hash, fetchMethod, id) => { - h.createAudioPlayer() + it.each<[string, MethodOf, Album["id"]]>([ + ["/albums/01K610ZFJGVTCVGZ0505464ZGR", "fetchSongsForAlbum", "01K610ZFJGVTCVGZ0505464ZGR"], + ["/artists/01K610ZFJGVTCVGZ0505464ZGR", "fetchSongsForArtist", "01K610ZFJGVTCVGZ0505464ZGR"], + [ + "/playlists/73a36cfd-4afd-48ae-b031-ae5488858375", + "fetchForPlaylist", + "73a36cfd-4afd-48ae-b031-ae5488858375", + ], + ])("initiates playback for %s", async (hash, fetchMethod, id) => { + h.createAudioPlayer(); - commonStore.state.song_count = 10 - const songs = h.factory('song').make(3) - const fetchMock = h.mock(playableStore, fetchMethod).mockResolvedValue(songs) - const playMock = h.mock(playbackService, 'queueAndPlay') - const goMock = h.mock(Router, 'go') + commonStore.state.song_count = 10; + const songs = h.factory("song").make(3); + const fetchMock = h.mock(playableStore, fetchMethod).mockResolvedValue(songs); + const playMock = h.mock(playbackService, "queueAndPlay"); + const goMock = h.mock(Router, "go"); - h.visit(hash) - renderComponent() + h.visit(hash); + renderComponent(); - await h.user.click(screen.getByRole('button')) + await h.user.click(screen.getByRole("button")); await waitFor(() => { - expect(fetchMock).toHaveBeenCalledWith(id) - expect(playMock).toHaveBeenCalledWith(songs) - expect(goMock).toHaveBeenCalledWith('/#/queue') - }) - }) + expect(fetchMock).toHaveBeenCalledWith(id); + expect(playMock).toHaveBeenCalledWith(songs); + expect(goMock).toHaveBeenCalledWith("/#/queue"); + }); + }); // eslint-disable-next-line @typescript-eslint/no-explicit-any -- vitest it.each typing limitation it.each<[string, any, string]>([ - ['/favorites', playableStore, 'fetchFavorites'], - ['/recently-played', recentlyPlayedStore, 'fetch'], - ])('initiates playback for %s', async (hash, store, fetchMethod) => { - h.createAudioPlayer() + ["/favorites", playableStore, "fetchFavorites"], + ["/recently-played", recentlyPlayedStore, "fetch"], + ])("initiates playback for %s", async (hash, store, fetchMethod) => { + h.createAudioPlayer(); - commonStore.state.song_count = 10 - const songs = h.factory('song').make(3) - const fetchMock = h.mock(store, fetchMethod).mockResolvedValue(songs) - const playMock = h.mock(playbackService, 'queueAndPlay') - const goMock = h.mock(Router, 'go') + commonStore.state.song_count = 10; + const songs = h.factory("song").make(3); + const fetchMock = h.mock(store, fetchMethod).mockResolvedValue(songs); + const playMock = h.mock(playbackService, "queueAndPlay"); + const goMock = h.mock(Router, "go"); - h.visit(hash) - renderComponent() + h.visit(hash); + renderComponent(); - await h.user.click(screen.getByRole('button')) + await h.user.click(screen.getByRole("button")); await waitFor(() => { - expect(fetchMock).toHaveBeenCalled() - expect(playMock).toHaveBeenCalledWith(songs) - expect(goMock).toHaveBeenCalledWith('/#/queue') - }) - }) + expect(fetchMock).toHaveBeenCalled(); + expect(playMock).toHaveBeenCalledWith(songs); + expect(goMock).toHaveBeenCalledWith("/#/queue"); + }); + }); - it('does nothing if there are no songs', async () => { - h.createAudioPlayer() + it("does nothing if there are no songs", async () => { + h.createAudioPlayer(); - commonStore.state.song_count = 0 + commonStore.state.song_count = 0; - const playMock = h.mock(playbackService, 'queueAndPlay') - const goMock = h.mock(Router, 'go') + const playMock = h.mock(playbackService, "queueAndPlay"); + const goMock = h.mock(Router, "go"); - h.visit('songs') - renderComponent() + h.visit("songs"); + renderComponent(); - await h.user.click(screen.getByRole('button')) + await h.user.click(screen.getByRole("button")); await waitFor(() => { - expect(playMock).not.toHaveBeenCalled() - expect(goMock).not.toHaveBeenCalled() - }) - }) -}) + expect(playMock).not.toHaveBeenCalled(); + expect(goMock).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/resources/assets/js/components/ui/FooterPlayButton.vue b/resources/assets/js/components/ui/FooterPlayButton.vue index ab5a63d268..aa82ba87c9 100644 --- a/resources/assets/js/components/ui/FooterPlayButton.vue +++ b/resources/assets/js/components/ui/FooterPlayButton.vue @@ -10,80 +10,80 @@ diff --git a/resources/assets/js/components/ui/GridListView.spec.ts b/resources/assets/js/components/ui/GridListView.spec.ts index 5d65da7863..2dc9746e56 100644 --- a/resources/assets/js/components/ui/GridListView.spec.ts +++ b/resources/assets/js/components/ui/GridListView.spec.ts @@ -1,32 +1,32 @@ -import { describe, expect, it } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import Component from './GridListView.vue' +import { describe, expect, it } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import Component from "./GridListView.vue"; -describe('gridListView', () => { - const h = createHarness() +describe("gridListView", () => { + const h = createHarness(); - it('renders with thumbnails mode by default', () => { + it("renders with thumbnails mode by default", () => { const { container } = h.render(Component, { - slots: { default: '
Card
' }, - }) + slots: { default: "
Card
" }, + }); - expect(container.querySelector('.as-thumbnails')).toBeTruthy() - }) + expect(container.querySelector(".as-thumbnails")).toBeTruthy(); + }); - it('renders with list mode', () => { + it("renders with list mode", () => { const { container } = h.render(Component, { - props: { viewMode: 'list' }, - slots: { default: '
Row
' }, - }) + props: { viewMode: "list" }, + slots: { default: "
Row
" }, + }); - expect(container.querySelector('.as-list')).toBeTruthy() - }) + expect(container.querySelector(".as-list")).toBeTruthy(); + }); - it('renders slot content', () => { + it("renders slot content", () => { const { getByText } = h.render(Component, { - slots: { default: '
My Content
' }, - }) + slots: { default: "
My Content
" }, + }); - getByText('My Content') - }) -}) + getByText("My Content"); + }); +}); diff --git a/resources/assets/js/components/ui/GridListView.vue b/resources/assets/js/components/ui/GridListView.vue index 1301517128..eb17f2feea 100644 --- a/resources/assets/js/components/ui/GridListView.vue +++ b/resources/assets/js/components/ui/GridListView.vue @@ -5,28 +5,28 @@ diff --git a/resources/assets/js/components/ui/ScreenControlsToggle.spec.ts b/resources/assets/js/components/ui/ScreenControlsToggle.spec.ts index 61d8f765c7..4eb7b31564 100644 --- a/resources/assets/js/components/ui/ScreenControlsToggle.spec.ts +++ b/resources/assets/js/components/ui/ScreenControlsToggle.spec.ts @@ -1,14 +1,14 @@ -import { describe, expect, it } from 'vite-plus/test' -import { screen } from '@testing-library/vue' -import { createHarness } from '@/__tests__/TestHarness' -import Component from './ScreenControlsToggle.vue' +import { describe, expect, it } from "vite-plus/test"; +import { screen } from "@testing-library/vue"; +import { createHarness } from "@/__tests__/TestHarness"; +import Component from "./ScreenControlsToggle.vue"; -describe('screenControlsToggle.vue', () => { - const h = createHarness() +describe("screenControlsToggle.vue", () => { + const h = createHarness(); - it('renders and emits an event', async () => { - const { emitted } = h.render(Component) - await h.user.click(screen.getByRole('checkbox')) - expect(emitted()['update:modelValue']).toBeTruthy() - }) -}) + it("renders and emits an event", async () => { + const { emitted } = h.render(Component); + await h.user.click(screen.getByRole("checkbox")); + expect(emitted()["update:modelValue"]).toBeTruthy(); + }); +}); diff --git a/resources/assets/js/components/ui/ScreenControlsToggle.vue b/resources/assets/js/components/ui/ScreenControlsToggle.vue index ccb1bcfefa..866a6efe6e 100644 --- a/resources/assets/js/components/ui/ScreenControlsToggle.vue +++ b/resources/assets/js/components/ui/ScreenControlsToggle.vue @@ -7,15 +7,15 @@ diff --git a/resources/assets/js/components/ui/ScreenEmptyState.spec.ts b/resources/assets/js/components/ui/ScreenEmptyState.spec.ts index 2ba0222bcb..55a9d59056 100644 --- a/resources/assets/js/components/ui/ScreenEmptyState.spec.ts +++ b/resources/assets/js/components/ui/ScreenEmptyState.spec.ts @@ -1,20 +1,20 @@ -import { describe, expect, it } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import Component from './ScreenEmptyState.vue' +import { describe, expect, it } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import Component from "./ScreenEmptyState.vue"; -describe('screenEmptyState.vue', () => { - const h = createHarness() +describe("screenEmptyState.vue", () => { + const h = createHarness(); - it('renders', () => { + it("renders", () => { expect( h .render(Component, { slots: { icon: '', - default: 'Nothing here', + default: "Nothing here", }, }) .html(), - ).toMatchSnapshot() - }) -}) + ).toMatchSnapshot(); + }); +}); diff --git a/resources/assets/js/components/ui/ScreenHeader.spec.ts b/resources/assets/js/components/ui/ScreenHeader.spec.ts index e9549e1518..2903064ed8 100644 --- a/resources/assets/js/components/ui/ScreenHeader.spec.ts +++ b/resources/assets/js/components/ui/ScreenHeader.spec.ts @@ -1,77 +1,77 @@ -import { screen } from '@testing-library/vue' -import { describe, expect, it } from 'vite-plus/test' -import { createHarness } from '@/__tests__/TestHarness' -import Component from './ScreenHeader.vue' +import { screen } from "@testing-library/vue"; +import { describe, expect, it } from "vite-plus/test"; +import { createHarness } from "@/__tests__/TestHarness"; +import Component from "./ScreenHeader.vue"; -describe('screenHeader', () => { - const h = createHarness() +describe("screenHeader", () => { + const h = createHarness(); - it('renders the heading from the default slot', () => { + it("renders the heading from the default slot", () => { h.render(Component, { slots: { - default: 'My Album Title', + default: "My Album Title", }, - }) + }); - expect(screen.getByRole('heading', { level: 1 }).textContent).toContain('My Album Title') - }) + expect(screen.getByRole("heading", { level: 1 }).textContent).toContain("My Album Title"); + }); - it('renders the thumbnail slot', () => { + it("renders the thumbnail slot", () => { h.render(Component, { slots: { - default: 'Title', + default: "Title", thumbnail: 'thumb', }, - }) + }); - screen.getByAltText('thumb') - }) + screen.getByAltText("thumb"); + }); - it('renders meta slot when provided', () => { + it("renders meta slot when provided", () => { h.render(Component, { slots: { - default: 'Title', - meta: '3 songs', + default: "Title", + meta: "3 songs", }, - }) + }); - screen.getByText('3 songs') - }) + screen.getByText("3 songs"); + }); - it('renders controls slot', () => { + it("renders controls slot", () => { h.render(Component, { slots: { - default: 'Title', - controls: '', + default: "Title", + controls: "", }, - }) + }); - screen.getByRole('button', { name: 'Play' }) - }) + screen.getByRole("button", { name: "Play" }); + }); - it('applies the disabled state', () => { + it("applies the disabled state", () => { const { container } = h.render(Component, { props: { disabled: true }, - slots: { default: 'Title' }, - }) + slots: { default: "Title" }, + }); - expect(container.querySelector('header')?.classList.contains('disabled')).toBe(true) - }) + expect(container.querySelector("header")?.classList.contains("disabled")).toBe(true); + }); - it('applies the layout prop', () => { + it("applies the layout prop", () => { const { container } = h.render(Component, { - props: { layout: 'collapsed' }, - slots: { default: 'Title' }, - }) + props: { layout: "collapsed" }, + slots: { default: "Title" }, + }); - expect(container.querySelector('header')?.classList.contains('collapsed')).toBe(true) - }) + expect(container.querySelector("header")?.classList.contains("collapsed")).toBe(true); + }); - it('defaults to expanded layout', () => { + it("defaults to expanded layout", () => { const { container } = h.render(Component, { - slots: { default: 'Title' }, - }) + slots: { default: "Title" }, + }); - expect(container.querySelector('header')?.classList.contains('expanded')).toBe(true) - }) -}) + expect(container.querySelector("header")?.classList.contains("expanded")).toBe(true); + }); +}); diff --git a/resources/assets/js/components/ui/ScreenHeader.vue b/resources/assets/js/components/ui/ScreenHeader.vue index 3898853177..9fd54f71f2 100644 --- a/resources/assets/js/components/ui/ScreenHeader.vue +++ b/resources/assets/js/components/ui/ScreenHeader.vue @@ -3,7 +3,10 @@ :class="[layout, disabled ? 'disabled' : '']" class="screen-header gap-4 min-h-0 md:min-h-full flex items-end shrink-0 relative content-stretch leading-normal p-6 border-b border-b-k-fg-5" > -