From c2a584b587de0b1cb233fe10cf5b1dc9d377f58b Mon Sep 17 00:00:00 2001 From: Ottomated Date: Wed, 5 Aug 2026 18:49:11 -0700 Subject: [PATCH 01/34] chore: update telemetry server --- .gitattributes | 2 - .ottotime | 5 +- package.json | 2 +- pnpm-lock.yaml | 18 +- telemetry-server/package.json | 9 +- telemetry-server/pnpm-lock.yaml | 1049 +++++++++++++++----------- telemetry-server/pnpm-workspace.yaml | 3 + telemetry-server/src/worker.ts | 33 +- telemetry-server/wrangler.jsonc | 2 +- 9 files changed, 661 insertions(+), 462 deletions(-) delete mode 100644 .gitattributes create mode 100644 telemetry-server/pnpm-workspace.yaml diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 984c34e2..00000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Prevents merge conflicts in Ottotime files -.ottotime merge=union diff --git a/.ottotime b/.ottotime index 353acdca..8195967f 100644 --- a/.ottotime +++ b/.ottotime @@ -9,12 +9,12 @@ 1738887917- 4:19 1738956932- 0:34 1738958362- 15:54 -1740554835- 23:27 -1740700468- 2:20 1738958362- 4:31 +1740554835- 23:27 1740603160- 12:56 1740606231- 0:14 1740688246- 0:30 +1740700468- 2:20 1741307017- 14:15 1743012236- 10:23 1743027095- 23:01 @@ -33,3 +33,4 @@ 1753395700- 10:19 1758009073- 3:21 1758009278- 33:49 +1785980576- 6:11 diff --git a/package.json b/package.json index 28f496bb..3c402d7f 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { "devDependencies": { - "@types/node": "^22.15.21" + "@types/node": "^26.1.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3dc6b098..5898d68c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,21 +9,21 @@ importers: .: devDependencies: '@types/node': - specifier: ^22.15.21 - version: 22.15.21 + specifier: ^26.1.2 + version: 26.1.2 packages: - '@types/node@22.15.21': - resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==} + '@types/node@26.1.2': + resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} snapshots: - '@types/node@22.15.21': + '@types/node@26.1.2': dependencies: - undici-types: 6.21.0 + undici-types: 8.3.0 - undici-types@6.21.0: {} + undici-types@8.3.0: {} diff --git a/telemetry-server/package.json b/telemetry-server/package.json index 04691d98..7f99bc4c 100644 --- a/telemetry-server/package.json +++ b/telemetry-server/package.json @@ -9,10 +9,11 @@ "cf-typegen": "wrangler types" }, "devDependencies": { - "typescript": "^5.9.2", - "wrangler": "^4.37.0" + "typescript": "^7.0.2", + "wrangler": "^4.118.0" }, "dependencies": { - "zod": "^4.1.8" - } + "valibot": "^1.4.2" + }, + "packageManager": "pnpm@11.20.0" } diff --git a/telemetry-server/pnpm-lock.yaml b/telemetry-server/pnpm-lock.yaml index e32be7ca..734e3b61 100644 --- a/telemetry-server/pnpm-lock.yaml +++ b/telemetry-server/pnpm-lock.yaml @@ -8,58 +8,58 @@ importers: .: dependencies: - zod: - specifier: ^4.1.8 - version: 4.1.8 + valibot: + specifier: ^1.4.2 + version: 1.4.2(typescript@7.0.2) devDependencies: typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^7.0.2 + version: 7.0.2 wrangler: - specifier: ^4.37.0 - version: 4.37.0 + specifier: ^4.118.0 + version: 4.118.0 packages: - '@cloudflare/kv-asset-handler@0.4.0': - resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} - engines: {node: '>=18.0.0'} + '@cloudflare/kv-asset-handler@0.5.0': + resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} + engines: {node: '>=22.0.0'} - '@cloudflare/unenv-preset@2.7.3': - resolution: {integrity: sha512-tsQQagBKjvpd9baa6nWVIv399ejiqcrUBBW6SZx6Z22+ymm+Odv5+cFimyuCsD/fC1fQTwfRmwXBNpzvHSeGCw==} + '@cloudflare/unenv-preset@2.16.1': + resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==} peerDependencies: - unenv: 2.0.0-rc.21 - workerd: ^1.20250828.1 + unenv: 2.0.0-rc.24 + workerd: '>1.20260305.0 <2.0.0-0' peerDependenciesMeta: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20250906.0': - resolution: {integrity: sha512-E+X/YYH9BmX0ew2j/mAWFif2z05NMNuhCTlNYEGLkqMe99K15UewBqajL9pMcMUKxylnlrEoK3VNxl33DkbnPA==} + '@cloudflare/workerd-darwin-64@1.20260730.1': + resolution: {integrity: sha512-+MBHmPaiTe2KajryW0T24rZvWFxb41hD3d8anNzQqHzft6vSEb18+sp0znSwxgij7ApPhSM1+vhkNg4f3YMguA==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250906.0': - resolution: {integrity: sha512-X5apsZ1SFW4FYTM19ISHf8005FJMPfrcf4U5rO0tdj+TeJgQgXuZ57IG0WeW7SpLVeBo8hM6WC8CovZh41AfnA==} + '@cloudflare/workerd-darwin-arm64@1.20260730.1': + resolution: {integrity: sha512-SBHKntPkKvNPgaCrTe99xC1CAl8ygJDzlYfK0LbuJ1muKadIw35WnhO0wu894fKBtllsVQdNzDLee+cm0ppLSQ==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20250906.0': - resolution: {integrity: sha512-rlKzWgsLnlQ5Nt9W69YBJKcmTmZbOGu0edUsenXPmc6wzULUxoQpi7ZE9k3TfTonJx4WoQsQlzCUamRYFsX+0Q==} + '@cloudflare/workerd-linux-64@1.20260730.1': + resolution: {integrity: sha512-ouyPOSMbiKPeSwUJUvxtMcxGAXs2J4aPE4T5ABIYX5ClcQx5j5bbHTmnqOQEY8sAuLTPjH7dY+iB6UI5ISlwwA==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250906.0': - resolution: {integrity: sha512-DdedhiQ+SeLzpg7BpcLrIPEZ33QKioJQ1wvL4X7nuLzEB9rWzS37NNNahQzc1+44rhG4fyiHbXBPOeox4B9XVA==} + '@cloudflare/workerd-linux-arm64@1.20260730.1': + resolution: {integrity: sha512-YQ+Mi78U3TPdgBPtwq+Sm6rJU+Ihl2y0pjYtuuKkdmUbYzL7oLR6Xqq9wljhasnuCFICssDJaqhMep5WizYoEQ==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20250906.0': - resolution: {integrity: sha512-Q8Qjfs8jGVILnZL6vUpQ90q/8MTCYaGR3d1LGxZMBqte8Vr7xF3KFHPEy7tFs0j0mMjnqCYzlofmPNY+9ZaDRg==} + '@cloudflare/workerd-windows-64@1.20260730.1': + resolution: {integrity: sha512-27fAN+vUECW1oYVc1KOcHYpkL8COM2Uxtxql7TL595kxbjoqS5yckw7NLz7bTf2pALFCZWjqXDjZGJ/xbG4ZKQ==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -68,261 +68,324 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} - '@esbuild/aix-ppc64@0.25.4': - resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.4': - resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.4': - resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.4': - resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.4': - resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.4': - resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.4': - resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.4': - resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.4': - resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.4': - resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.4': - resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.4': - resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.4': - resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.4': - resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.4': - resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.4': - resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.4': - resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.4': - resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.4': - resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.4': - resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.4': - resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.4': - resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.4': - resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.4': - resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.4': - resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.35.2': + resolution: {integrity: sha512-eEieHsMksAW4IiO5NzauESRl2D2qz3J/kwUxUrSfV06A93eEaRfMpHXyUb1mAqrR7i8U9A0GRqE9pjn6u1Jjpg==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-darwin-x64@0.35.2': + resolution: {integrity: sha512-BaktuGPCeHJMARpodR8jK4uKiZrPAy9WrfQW0sdI37clracq8Bp01AYS3SZgi5FS/y5twa9t4+LIuuxQjqRrWw==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + '@img/sharp-freebsd-wasm32@0.35.2': + resolution: {integrity: sha512-YoAxdnd8hPUkvLHd3bWY+YA8nw3xM/RyRopYucNsWHVSan8NLVM3X2volsfoRDcXdUJPg6tXahSd7HXPK7lRnw==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.1': + resolution: {integrity: sha512-4V/M3roRMTYjiwZY9IOVQOE8OyeCxFAkYmyZDrZl51uOKjibm3oeEJ4WAmLxutAfzFbC9jqUiPs2gbnGflH+7g==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + '@img/sharp-libvips-darwin-x64@1.3.1': + resolution: {integrity: sha512-c0/DxItpJv2+dGhgycJBBgotdqruGYDvA79drdh0MD1dFpy7JzJ/PlXwi1H4rFf0eTy8tgbI91aHDnZIceY3jQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + '@img/sharp-libvips-linux-arm64@1.3.1': + resolution: {integrity: sha512-JznefmcK9j1JKPz8AkQDh89kjojubyfOasWBPKfzMIhPwsgDy9evpE/naJTXXXmghS1iFwR8u/kTwh/I2/+GCw==} cpu: [arm64] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + '@img/sharp-libvips-linux-arm@1.3.1': + resolution: {integrity: sha512-aGGy9aWzXgHBG7HNyQPWorZthlp7+x6fDRoPAQbGO3ThcttuTyKIx3NuSHb6zb4gBNq6/yNn9f1cy9nFKS/Vmg==} cpu: [arm] os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.3.1': + resolution: {integrity: sha512-1EkwGNCZk6iWNCMWqrvdJ+r1j0PT1zIz60CNPhYnJlK/zyeWqlsPZIe+ocBVqPF8k/Ssee/NCk+tE9Ryrko6ng==} + cpu: [ppc64] + os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + '@img/sharp-libvips-linux-riscv64@1.3.1': + resolution: {integrity: sha512-Ilays+w2bXdnxzxtQdmXR62u8o8GYa3eL4+Gr+1KiE4xperMZUslRaVPJwwPkzlHEjGfXAfRVAa/7CYCtSqsBw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.3.1': + resolution: {integrity: sha512-VfBwVHQTbRoj4XlpA/KLZ7ltgMpz+4WSejFzQ+GnoImjo1PtEJ59QB2qR1xQEeRPYIkNrPIm2L4cICMvz4C2ew==} cpu: [s390x] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + '@img/sharp-libvips-linux-x64@1.3.1': + resolution: {integrity: sha512-+c8ukgwU62DS54nCAjw7keOfHUkmr0B5QHEdcOqRnodF/MNXJbVI8Eopoj4B/0H8Asr65I+A4Amrn7a85/md6A==} cpu: [x64] os: [linux] + libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + '@img/sharp-libvips-linuxmusl-arm64@1.3.1': + resolution: {integrity: sha512-qlKb/pwbkAi1WMsJrYHk7CuDrd12s27U2QnRhFYUoJNrRCmkosMTttuRFat/DDB3IlDm5qE1TJgZ4JDnHX8Ldw==} cpu: [arm64] os: [linux] + libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + '@img/sharp-libvips-linuxmusl-x64@1.3.1': + resolution: {integrity: sha512-yO21HwoUVLN8Qa+/SBjQLMYwBWAVJjeGPNe+hc0OUeMeifEtJqu5a1c4HayE1nNpDih9y3/KkoltfkDodmKAlg==} cpu: [x64] os: [linux] + libc: [musl] - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-arm64@0.35.2': + resolution: {integrity: sha512-af12Pnd0ZGu2HfP8NayB0kk6eC/lrfbQE6HlR4jD+34wdJ1Vw9TF6TMn6ZvffT+WgqVsl0hRbmNvz2u/23VmwA==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] + libc: [glibc] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-arm@0.35.2': + resolution: {integrity: sha512-SE4kzF2mepn6z+6E7L6lsV8FzuLL6IPQdyX8ZiwROAG/G8td+hP/m7FsFPwidtrF19gvajuC9l6TxAVcsA4S7A==} + engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.35.2': + resolution: {integrity: sha512-hYSBm7zcNtDCozCxQHYZJiu63b/bXsgRZuOxCIBZsStMM9Vap47iFHdbX4kCvQsblPB/k+clhELpdQJHQLSHvg==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] + os: [linux] + libc: [glibc] - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-riscv64@0.35.2': + resolution: {integrity: sha512-qQt0Kc13+Hoan/Awq/qMSQw3L+RI1NCRPgD5cUJ/1WSSmIoysLOc72jlRM3E0OHN9Yr313jgeQ2T+zW+F03QFA==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.35.2': + resolution: {integrity: sha512-E4fLLfRPzDLlEeDaTzI98OFLcv++WL5ChLLMwPoVd0CIoZQqupBSNbOisPL5am9XsbQ9T84+iiMpUvbFtkunbA==} + engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] + libc: [glibc] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-x64@0.35.2': + resolution: {integrity: sha512-gi0zFJJRLswfCZmHtJdikXPOc5u7qamSOS3NHedLqLd4W8Q0NqjdBr6TTRIgsfFjqfTsHFgdfvJ9LwqSgcHiAA==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] + libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linuxmusl-arm64@0.35.2': + resolution: {integrity: sha512-siWbOW1u6HFnFLrp0waKyW7VEf7jYvcDWdrXEFa8AkdAQgEvuu5Fz8/Y70w9EeqAdwDtfU012BhEHHaDqvQNzg==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] + libc: [musl] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linuxmusl-x64@0.35.2': + resolution: {integrity: sha512-YBqMMcjDi4QGYiSn4vNOYBhmlC4z5AXqkOUUqI2e0AFA4urNv4ESgOgwNl3K+4etQhha0twXlzeF20bbULm9Yg==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.35.2': + resolution: {integrity: sha512-Mrv4JQNYVQ94xH+jzZ9r+gowleN8mv2FTgKT+PI6bx5C0G8TdNYndu161pg2i7uoBwxy2ImPMHrJOM2LZef7Bw==} + engines: {node: '>=20.9.0'} - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-webcontainers-wasm32@0.35.2': + resolution: {integrity: sha512-QNV27pxs9wpApEiCfvHM1RDoP1w1+2KrUWWDPEhEwg+latvOrfuhWrHWZKwdSFwU6jh3myjw/yOCRsUIuOft3g==} + engines: {node: '>=20.9.0'} cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-arm64@0.35.2': + resolution: {integrity: sha512-BiVRYc/t6/Vl3e1hBx0hugG4oN9Pydf4fgMSpxTQJmwGUg/YoXTWHiFeRymHfCZzifxu4F4rpk/I67D0LQ20wQ==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.35.2': + resolution: {integrity: sha512-YYEhx9PImCC7T0tI8JDMi4DB9LwLCXCU5OWNYEXAxh5Q1ShKkyC6byxzoBJ3gEFDnH2lQckWuDe70G7mB2XJog==} + engines: {node: ^20.9.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-x64@0.35.2': + resolution: {integrity: sha512-imoOyBcoM/iiUr4J6VPpCNjPnjvP/Gks95898yB8YqoGGYmHYbOyCuNv9FMhFgtaiHFGbHW8bxKqRV6VjtXThQ==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [win32] @@ -336,101 +399,173 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@poppinss/colors@4.1.5': - resolution: {integrity: sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==} + '@poppinss/colors@4.1.6': + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} - '@poppinss/dumper@0.6.4': - resolution: {integrity: sha512-iG0TIdqv8xJ3Lt9O8DrPRxw1MRLjNpoqiSGU03P/wNLP/s0ra0udPJ1J2Tx5M0J3H/cVyEgpbn8xUKRY9j59kQ==} + '@poppinss/dumper@0.6.5': + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} - '@poppinss/exception@1.2.2': - resolution: {integrity: sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==} + '@poppinss/exception@1.2.3': + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} - '@sindresorhus/is@7.1.0': - resolution: {integrity: sha512-7F/yz2IphV39hiS2zB4QYVkivrptHHh0K8qJJd9HhuWSdvf8AN7NpebW3CcDZDBQsUPMoDKWsY2WWgW7bqOcfA==} + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} - '@speed-highlight/core@1.2.7': - resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==} + '@speed-highlight/core@1.2.23': + resolution: {integrity: sha512-iRoq6i6JDJP6Mt2A5JaPvzw0pgYHH6k92ij+yXiTrB7T2y9N789aWE3EHWj/5ztlJBokcCBja3iYLVdu5wgnkg==} - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] - blake3-wasm@2.1.5: - resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} - engines: {node: '>=18'} + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] - detect-libc@2.1.0: - resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==} + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} - esbuild@0.25.4: - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true - exit-hook@2.2.1: - resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} - engines: {node: '>=6'} - - exsolve@1.0.7: - resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - is-arrayish@0.3.4: - resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} - kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - - miniflare@4.20250906.2: - resolution: {integrity: sha512-SXGv8Rdd91b6UXZ5eW3rde/gSJM6WVLItMNFV7u9axUVhACvpT4CB5p80OBfi2OOsGfOuFQ6M6s8tMxJbzioVw==} - engines: {node: '>=18.0.0'} - hasBin: true - - ohash@2.0.11: - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + miniflare@5.20260730.0-alpha: + resolution: {integrity: sha512-8/dspSXDshP6nSkCpjKO7BYc2qZoYSXm7iM+QxY7qJyJpAB3onnQSaiu0cvKJlfuMGwULl55hG69FJCcCMXU1Q==} + engines: {node: '>=22.0.0'} path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -438,21 +573,14 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - simple-swizzle@0.2.4: - resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} - - stoppable@1.1.0: - resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} - engines: {node: '>=4', npm: '>=6'} + sharp@0.35.2: + resolution: {integrity: sha512-FVtFjtBCMiJS6yb5CX7Sop45WFMpeGw6oRKuJnXYgf/f1ms/D7LE/ZUSNxnW7rZ/dbslQWYkoqFHGPaDBtaK4w==} + engines: {node: '>=20.9.0'} supports-color@10.2.2: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} @@ -461,38 +589,43 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} - engines: {node: '>=14.17'} + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} hasBin: true - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - - undici@7.14.0: - resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==} + undici@7.28.0: + resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} engines: {node: '>=20.18.1'} - unenv@2.0.0-rc.21: - resolution: {integrity: sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==} + unenv@2.0.0-rc.24: + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} + + valibot@1.4.2: + resolution: {integrity: sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true - workerd@1.20250906.0: - resolution: {integrity: sha512-ryVyEaqXPPsr/AxccRmYZZmDAkfQVjhfRqrNTlEeN8aftBk6Ca1u7/VqmfOayjCXrA+O547TauebU+J3IpvFXw==} + workerd@1.20260730.1: + resolution: {integrity: sha512-zmfNIjwYSWFY5chGBOjWtH3xAE7p97FTC6vR4Ep98290ho6AeAR/NVcBD274YCLEUYzqm8yxdtZlxMybU8a3jA==} engines: {node: '>=16'} hasBin: true - wrangler@4.37.0: - resolution: {integrity: sha512-W8IbQohQbUHFn4Hz2kh8gi0SdyFV/jyi9Uus+WrTz0F0Dc9W5qKPCjLbxibeE53+YPHyoI25l65O7nSlwX+Z6Q==} - engines: {node: '>=18.0.0'} + wrangler@4.118.0: + resolution: {integrity: sha512-9pkBw/b8zWqGx2S+oLhgHMR1M/4VOE8SynUFABnGWiSFGlcOQ4xiI/B71Xf66RYP2xzngU37IQFPtUruij3lYw==} + engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20250906.0 + '@cloudflare/workers-types': ^5.20260730.1 peerDependenciesMeta: '@cloudflare/workers-types': optional: true - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -509,196 +642,222 @@ packages: youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} - zod@3.22.3: - resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} - - zod@4.1.8: - resolution: {integrity: sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==} - snapshots: - '@cloudflare/kv-asset-handler@0.4.0': - dependencies: - mime: 3.0.0 + '@cloudflare/kv-asset-handler@0.5.0': {} - '@cloudflare/unenv-preset@2.7.3(unenv@2.0.0-rc.21)(workerd@1.20250906.0)': + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260730.1)': dependencies: - unenv: 2.0.0-rc.21 + unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20250906.0 + workerd: 1.20260730.1 - '@cloudflare/workerd-darwin-64@1.20250906.0': + '@cloudflare/workerd-darwin-64@1.20260730.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250906.0': + '@cloudflare/workerd-darwin-arm64@1.20260730.1': optional: true - '@cloudflare/workerd-linux-64@1.20250906.0': + '@cloudflare/workerd-linux-64@1.20260730.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20250906.0': + '@cloudflare/workerd-linux-arm64@1.20260730.1': optional: true - '@cloudflare/workerd-windows-64@1.20250906.0': + '@cloudflare/workerd-windows-64@1.20260730.1': optional: true '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@emnapi/runtime@1.5.0': + '@emnapi/runtime@1.11.3': dependencies: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.4': + '@esbuild/aix-ppc64@0.28.1': + optional: true + + '@esbuild/android-arm64@0.28.1': optional: true - '@esbuild/android-arm64@0.25.4': + '@esbuild/android-arm@0.28.1': optional: true - '@esbuild/android-arm@0.25.4': + '@esbuild/android-x64@0.28.1': optional: true - '@esbuild/android-x64@0.25.4': + '@esbuild/darwin-arm64@0.28.1': optional: true - '@esbuild/darwin-arm64@0.25.4': + '@esbuild/darwin-x64@0.28.1': optional: true - '@esbuild/darwin-x64@0.25.4': + '@esbuild/freebsd-arm64@0.28.1': optional: true - '@esbuild/freebsd-arm64@0.25.4': + '@esbuild/freebsd-x64@0.28.1': optional: true - '@esbuild/freebsd-x64@0.25.4': + '@esbuild/linux-arm64@0.28.1': optional: true - '@esbuild/linux-arm64@0.25.4': + '@esbuild/linux-arm@0.28.1': optional: true - '@esbuild/linux-arm@0.25.4': + '@esbuild/linux-ia32@0.28.1': optional: true - '@esbuild/linux-ia32@0.25.4': + '@esbuild/linux-loong64@0.28.1': optional: true - '@esbuild/linux-loong64@0.25.4': + '@esbuild/linux-mips64el@0.28.1': optional: true - '@esbuild/linux-mips64el@0.25.4': + '@esbuild/linux-ppc64@0.28.1': optional: true - '@esbuild/linux-ppc64@0.25.4': + '@esbuild/linux-riscv64@0.28.1': optional: true - '@esbuild/linux-riscv64@0.25.4': + '@esbuild/linux-s390x@0.28.1': optional: true - '@esbuild/linux-s390x@0.25.4': + '@esbuild/linux-x64@0.28.1': optional: true - '@esbuild/linux-x64@0.25.4': + '@esbuild/netbsd-arm64@0.28.1': optional: true - '@esbuild/netbsd-arm64@0.25.4': + '@esbuild/netbsd-x64@0.28.1': optional: true - '@esbuild/netbsd-x64@0.25.4': + '@esbuild/openbsd-arm64@0.28.1': optional: true - '@esbuild/openbsd-arm64@0.25.4': + '@esbuild/openbsd-x64@0.28.1': optional: true - '@esbuild/openbsd-x64@0.25.4': + '@esbuild/openharmony-arm64@0.28.1': optional: true - '@esbuild/sunos-x64@0.25.4': + '@esbuild/sunos-x64@0.28.1': optional: true - '@esbuild/win32-arm64@0.25.4': + '@esbuild/win32-arm64@0.28.1': optional: true - '@esbuild/win32-ia32@0.25.4': + '@esbuild/win32-ia32@0.28.1': optional: true - '@esbuild/win32-x64@0.25.4': + '@esbuild/win32-x64@0.28.1': optional: true - '@img/sharp-darwin-arm64@0.33.5': + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.35.2': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-arm64': 1.3.1 optional: true - '@img/sharp-darwin-x64@0.33.5': + '@img/sharp-darwin-x64@0.35.2': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.3.1 + optional: true + + '@img/sharp-freebsd-wasm32@0.35.2': + dependencies: + '@img/sharp-wasm32': 0.35.2 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.3.1': + optional: true + + '@img/sharp-libvips-darwin-x64@1.3.1': optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': + '@img/sharp-libvips-linux-arm64@1.3.1': optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': + '@img/sharp-libvips-linux-arm@1.3.1': optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': + '@img/sharp-libvips-linux-ppc64@1.3.1': optional: true - '@img/sharp-libvips-linux-arm@1.0.5': + '@img/sharp-libvips-linux-riscv64@1.3.1': optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': + '@img/sharp-libvips-linux-s390x@1.3.1': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': + '@img/sharp-libvips-linux-x64@1.3.1': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + '@img/sharp-libvips-linuxmusl-arm64@1.3.1': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': + '@img/sharp-libvips-linuxmusl-x64@1.3.1': + optional: true + + '@img/sharp-linux-arm64@0.35.2': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.1 optional: true - '@img/sharp-linux-arm64@0.33.5': + '@img/sharp-linux-arm@0.35.2': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.3.1 optional: true - '@img/sharp-linux-arm@0.33.5': + '@img/sharp-linux-ppc64@0.35.2': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-ppc64': 1.3.1 optional: true - '@img/sharp-linux-s390x@0.33.5': + '@img/sharp-linux-riscv64@0.35.2': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-riscv64': 1.3.1 optional: true - '@img/sharp-linux-x64@0.33.5': + '@img/sharp-linux-s390x@0.35.2': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.3.1 optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': + '@img/sharp-linux-x64@0.35.2': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.3.1 optional: true - '@img/sharp-linuxmusl-x64@0.33.5': + '@img/sharp-linuxmusl-arm64@0.35.2': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.1 + optional: true + + '@img/sharp-linuxmusl-x64@0.35.2': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.1 + optional: true + + '@img/sharp-wasm32@0.35.2': + dependencies: + '@emnapi/runtime': 1.11.3 optional: true - '@img/sharp-wasm32@0.33.5': + '@img/sharp-webcontainers-wasm32@0.35.2': dependencies: - '@emnapi/runtime': 1.5.0 + '@img/sharp-wasm32': 0.35.2 + optional: true + + '@img/sharp-win32-arm64@0.35.2': optional: true - '@img/sharp-win32-ia32@0.33.5': + '@img/sharp-win32-ia32@0.35.2': optional: true - '@img/sharp-win32-x64@0.33.5': + '@img/sharp-win32-x64@0.35.2': optional: true '@jridgewell/resolve-uri@3.1.2': {} @@ -710,211 +869,247 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@poppinss/colors@4.1.5': + '@poppinss/colors@4.1.6': dependencies: kleur: 4.1.5 - '@poppinss/dumper@0.6.4': + '@poppinss/dumper@0.6.5': dependencies: - '@poppinss/colors': 4.1.5 - '@sindresorhus/is': 7.1.0 + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 supports-color: 10.2.2 - '@poppinss/exception@1.2.2': {} + '@poppinss/exception@1.2.3': {} - '@sindresorhus/is@7.1.0': {} + '@sindresorhus/is@7.2.0': {} - '@speed-highlight/core@1.2.7': {} + '@speed-highlight/core@1.2.23': {} - acorn-walk@8.3.2: {} + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true - acorn@8.14.0: {} + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true - blake3-wasm@2.1.5: {} + '@typescript/typescript-darwin-x64@7.0.2': + optional: true - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true - color-name@1.1.4: {} + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.4 + '@typescript/typescript-linux-arm64@7.0.2': + optional: true - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true - cookie@1.0.2: {} + '@typescript/typescript-win32-arm64@7.0.2': + optional: true - defu@6.1.4: {} + '@typescript/typescript-win32-x64@7.0.2': + optional: true - detect-libc@2.1.0: {} + blake3-wasm@2.1.5: {} + + cookie@1.1.1: {} + + detect-libc@2.1.2: {} error-stack-parser-es@1.0.5: {} - esbuild@0.25.4: + esbuild@0.28.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.4 - '@esbuild/android-arm': 0.25.4 - '@esbuild/android-arm64': 0.25.4 - '@esbuild/android-x64': 0.25.4 - '@esbuild/darwin-arm64': 0.25.4 - '@esbuild/darwin-x64': 0.25.4 - '@esbuild/freebsd-arm64': 0.25.4 - '@esbuild/freebsd-x64': 0.25.4 - '@esbuild/linux-arm': 0.25.4 - '@esbuild/linux-arm64': 0.25.4 - '@esbuild/linux-ia32': 0.25.4 - '@esbuild/linux-loong64': 0.25.4 - '@esbuild/linux-mips64el': 0.25.4 - '@esbuild/linux-ppc64': 0.25.4 - '@esbuild/linux-riscv64': 0.25.4 - '@esbuild/linux-s390x': 0.25.4 - '@esbuild/linux-x64': 0.25.4 - '@esbuild/netbsd-arm64': 0.25.4 - '@esbuild/netbsd-x64': 0.25.4 - '@esbuild/openbsd-arm64': 0.25.4 - '@esbuild/openbsd-x64': 0.25.4 - '@esbuild/sunos-x64': 0.25.4 - '@esbuild/win32-arm64': 0.25.4 - '@esbuild/win32-ia32': 0.25.4 - '@esbuild/win32-x64': 0.25.4 - - exit-hook@2.2.1: {} - - exsolve@1.0.7: {} + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 fsevents@2.3.3: optional: true - glob-to-regexp@0.4.1: {} - - is-arrayish@0.3.4: {} - kleur@4.1.5: {} - mime@3.0.0: {} - - miniflare@4.20250906.2: + miniflare@5.20260730.0-alpha: dependencies: '@cspotcode/source-map-support': 0.8.1 - acorn: 8.14.0 - acorn-walk: 8.3.2 - exit-hook: 2.2.1 - glob-to-regexp: 0.4.1 - sharp: 0.33.5 - stoppable: 1.1.0 - undici: 7.14.0 - workerd: 1.20250906.0 - ws: 8.18.0 + sharp: 0.35.2 + undici: 7.28.0 + workerd: 1.20260730.1 + ws: 8.21.0 youch: 4.1.0-beta.10 - zod: 3.22.3 transitivePeerDependencies: - bufferutil - utf-8-validate - ohash@2.0.11: {} - path-to-regexp@6.3.0: {} pathe@2.0.3: {} - semver@7.7.2: {} + semver@7.8.5: {} - sharp@0.33.5: + sharp@0.35.2: dependencies: - color: 4.2.3 - detect-libc: 2.1.0 - semver: 7.7.2 + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - - simple-swizzle@0.2.4: - dependencies: - is-arrayish: 0.3.4 - - stoppable@1.1.0: {} + '@img/sharp-darwin-arm64': 0.35.2 + '@img/sharp-darwin-x64': 0.35.2 + '@img/sharp-freebsd-wasm32': 0.35.2 + '@img/sharp-libvips-darwin-arm64': 1.3.1 + '@img/sharp-libvips-darwin-x64': 1.3.1 + '@img/sharp-libvips-linux-arm': 1.3.1 + '@img/sharp-libvips-linux-arm64': 1.3.1 + '@img/sharp-libvips-linux-ppc64': 1.3.1 + '@img/sharp-libvips-linux-riscv64': 1.3.1 + '@img/sharp-libvips-linux-s390x': 1.3.1 + '@img/sharp-libvips-linux-x64': 1.3.1 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.1 + '@img/sharp-libvips-linuxmusl-x64': 1.3.1 + '@img/sharp-linux-arm': 0.35.2 + '@img/sharp-linux-arm64': 0.35.2 + '@img/sharp-linux-ppc64': 0.35.2 + '@img/sharp-linux-riscv64': 0.35.2 + '@img/sharp-linux-s390x': 0.35.2 + '@img/sharp-linux-x64': 0.35.2 + '@img/sharp-linuxmusl-arm64': 0.35.2 + '@img/sharp-linuxmusl-x64': 0.35.2 + '@img/sharp-webcontainers-wasm32': 0.35.2 + '@img/sharp-win32-arm64': 0.35.2 + '@img/sharp-win32-ia32': 0.35.2 + '@img/sharp-win32-x64': 0.35.2 supports-color@10.2.2: {} tslib@2.8.1: optional: true - typescript@5.9.2: {} - - ufo@1.6.1: {} - - undici@7.14.0: {} - - unenv@2.0.0-rc.21: + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 + + undici@7.28.0: {} + + unenv@2.0.0-rc.24: dependencies: - defu: 6.1.4 - exsolve: 1.0.7 - ohash: 2.0.11 pathe: 2.0.3 - ufo: 1.6.1 - workerd@1.20250906.0: + valibot@1.4.2(typescript@7.0.2): + optionalDependencies: + typescript: 7.0.2 + + workerd@1.20260730.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250906.0 - '@cloudflare/workerd-darwin-arm64': 1.20250906.0 - '@cloudflare/workerd-linux-64': 1.20250906.0 - '@cloudflare/workerd-linux-arm64': 1.20250906.0 - '@cloudflare/workerd-windows-64': 1.20250906.0 + '@cloudflare/workerd-darwin-64': 1.20260730.1 + '@cloudflare/workerd-darwin-arm64': 1.20260730.1 + '@cloudflare/workerd-linux-64': 1.20260730.1 + '@cloudflare/workerd-linux-arm64': 1.20260730.1 + '@cloudflare/workerd-windows-64': 1.20260730.1 - wrangler@4.37.0: + wrangler@4.118.0: dependencies: - '@cloudflare/kv-asset-handler': 0.4.0 - '@cloudflare/unenv-preset': 2.7.3(unenv@2.0.0-rc.21)(workerd@1.20250906.0) + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260730.1) blake3-wasm: 2.1.5 - esbuild: 0.25.4 - miniflare: 4.20250906.2 + esbuild: 0.28.1 + miniflare: 5.20260730.0-alpha path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.21 - workerd: 1.20250906.0 + unenv: 2.0.0-rc.24 + workerd: 1.20260730.1 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: - bufferutil - utf-8-validate - ws@8.18.0: {} + ws@8.21.0: {} youch-core@0.3.3: dependencies: - '@poppinss/exception': 1.2.2 + '@poppinss/exception': 1.2.3 error-stack-parser-es: 1.0.5 youch@4.1.0-beta.10: dependencies: - '@poppinss/colors': 4.1.5 - '@poppinss/dumper': 0.6.4 - '@speed-highlight/core': 1.2.7 - cookie: 1.0.2 + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.6.5 + '@speed-highlight/core': 1.2.23 + cookie: 1.1.1 youch-core: 0.3.3 - - zod@3.22.3: {} - - zod@4.1.8: {} diff --git a/telemetry-server/pnpm-workspace.yaml b/telemetry-server/pnpm-workspace.yaml new file mode 100644 index 00000000..02365ef1 --- /dev/null +++ b/telemetry-server/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +allowBuilds: + esbuild: true + workerd: true diff --git a/telemetry-server/src/worker.ts b/telemetry-server/src/worker.ts index 5bd8ee38..c4014442 100644 --- a/telemetry-server/src/worker.ts +++ b/telemetry-server/src/worker.ts @@ -1,16 +1,17 @@ -import { z } from 'zod'; +import * as v from 'valibot'; -const telemetrySchema = z.object({ - version: z - .string() - // Semver regex from https://semver.org - .regex( +const telemetrySchema = v.object({ + version: v.pipe( + v.string(), + v.regex( /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/, + 'Invalid semver', ), - package_manager: z.enum(['Npm', 'Pnpm', 'Yarn', 'Bun']), - install_deps: z.boolean(), - git_init: z.boolean(), - features: z.array(z.string()), + ), + package_manager: v.picklist(['Npm', 'Pnpm', 'Yarn', 'Bun']), + install_deps: v.boolean(), + git_init: v.boolean(), + features: v.array(v.string()), }); export default { @@ -27,7 +28,7 @@ export default { return new Response('Bad request', { status: 400 }); } - const telemetry = telemetrySchema.safeParse(body); + const telemetry = v.safeParse(telemetrySchema, body); if (!telemetry.success) { return new Response('Bad request', { status: 400 }); @@ -38,11 +39,11 @@ export default { 'INSERT INTO telemetry (version, package_manager, install_deps, git_init, features, created_at) VALUES (?, ?, ?, ?, ?, ?)', ) .bind( - telemetry.data.version, - telemetry.data.package_manager, - telemetry.data.install_deps, - telemetry.data.git_init, - JSON.stringify(telemetry.data.features), + telemetry.output.version, + telemetry.output.package_manager, + telemetry.output.install_deps, + telemetry.output.git_init, + JSON.stringify(telemetry.output.features), new Date().toISOString(), ) .run(), diff --git a/telemetry-server/wrangler.jsonc b/telemetry-server/wrangler.jsonc index b97ebb03..6d3219ed 100644 --- a/telemetry-server/wrangler.jsonc +++ b/telemetry-server/wrangler.jsonc @@ -2,7 +2,7 @@ "$schema": "node_modules/wrangler/config-schema.json", "name": "create-o7-app-telemetry-server", "main": "src/worker.ts", - "compatibility_date": "2025-05-25", + "compatibility_date": "2026-08-04", "routes": [ { "pattern": "o7-telemetry.ottomated.net", From 0cd142f29bd264f04f6c257623428ffae31c050a Mon Sep 17 00:00:00 2001 From: Ottomated Date: Wed, 5 Aug 2026 19:58:17 -0700 Subject: [PATCH 02/34] feat!: remove planetscale --- .ottotime | 4 ++- pkg/package.json | 1 - template_builder/templates/config.json | 4 --- .../prisma/{Planetscale,Auth}schema.prisma | 29 ------------------- .../extras/prisma/{Planetscale}schema.prisma | 17 ----------- ...d.ts => {D1|Sqlite|Turso,Auth}schema.d.ts} | 0 ...hema.d.ts => {D1|Sqlite|Turso}schema.d.ts} | 0 .../extras/src/lib/db/{Planetscale}index.ts | 25 ---------------- ....ts => {Auth,Sqlite|Turso}hooks.server.ts} | 0 ...age.json => {D1|Sqlite|Turso}package.json} | 0 ...ttierignore => {D1|Sqlite}.prettierignore} | 0 .../templates/extras/{Planetscale,Auth}.env | 10 ------- .../templates/extras/{Planetscale}.env | 6 ---- .../extras/{Planetscale}package.json | 9 ------ 14 files changed, 3 insertions(+), 102 deletions(-) delete mode 100644 template_builder/templates/extras/prisma/{Planetscale,Auth}schema.prisma delete mode 100644 template_builder/templates/extras/prisma/{Planetscale}schema.prisma rename template_builder/templates/extras/src/lib/db/{{D1|Planetscale|Sqlite|Turso,Auth}schema.d.ts => {D1|Sqlite|Turso,Auth}schema.d.ts} (100%) rename template_builder/templates/extras/src/lib/db/{{D1|Planetscale|Sqlite|Turso}schema.d.ts => {D1|Sqlite|Turso}schema.d.ts} (100%) delete mode 100644 template_builder/templates/extras/src/lib/db/{Planetscale}index.ts rename template_builder/templates/extras/src/{{Auth,Sqlite|Planetscale|Turso}hooks.server.ts => {Auth,Sqlite|Turso}hooks.server.ts} (100%) rename template_builder/templates/extras/{{D1|Planetscale|Sqlite|Turso}package.json => {D1|Sqlite|Turso}package.json} (100%) rename template_builder/templates/extras/{{D1|Planetscale|Sqlite}.prettierignore => {D1|Sqlite}.prettierignore} (100%) delete mode 100644 template_builder/templates/extras/{Planetscale,Auth}.env delete mode 100644 template_builder/templates/extras/{Planetscale}.env delete mode 100644 template_builder/templates/extras/{Planetscale}package.json diff --git a/.ottotime b/.ottotime index 8195967f..97d686ef 100644 --- a/.ottotime +++ b/.ottotime @@ -33,4 +33,6 @@ 1753395700- 10:19 1758009073- 3:21 1758009278- 33:49 -1785980576- 6:11 +1785980576- 7:05 +1785981379- 3:54 +1785984991- 1:30 diff --git a/pkg/package.json b/pkg/package.json index 2626a62b..8ed50086 100644 --- a/pkg/package.json +++ b/pkg/package.json @@ -15,7 +15,6 @@ "tailwind", "tRPC", "typescript", - "planetscale", "prisma", "kysely", "d1", diff --git a/template_builder/templates/config.json b/template_builder/templates/config.json index 4ac88974..cafcb463 100644 --- a/template_builder/templates/config.json +++ b/template_builder/templates/config.json @@ -42,10 +42,6 @@ "id": "D1", "name": "D1", "hidden_if_not": ["Edge"] - }, - { - "id": "Planetscale", - "name": "Planetscale" } ], "description": "" diff --git a/template_builder/templates/extras/prisma/{Planetscale,Auth}schema.prisma b/template_builder/templates/extras/prisma/{Planetscale,Auth}schema.prisma deleted file mode 100644 index 53a9ff37..00000000 --- a/template_builder/templates/extras/prisma/{Planetscale,Auth}schema.prisma +++ /dev/null @@ -1,29 +0,0 @@ -datasource db { - provider = "mysql" - url = env("DATABASE_URL") - relationMode = "prisma" -} - -generator kysely { - provider = "prisma-kysely" - - output = "../src/lib/db" - fileName = "schema.d.ts" -} - -model User { - id String @id - twitch_id String - username String - - sessions Session[] -} - -model Session { - id String @id - expires_at Int - user_id String - user User @relation(fields: [user_id], references: [id]) - - @@index([user_id]) -} diff --git a/template_builder/templates/extras/prisma/{Planetscale}schema.prisma b/template_builder/templates/extras/prisma/{Planetscale}schema.prisma deleted file mode 100644 index ad301d42..00000000 --- a/template_builder/templates/extras/prisma/{Planetscale}schema.prisma +++ /dev/null @@ -1,17 +0,0 @@ -datasource db { - provider = "mysql" - url = env("DATABASE_URL") - relationMode = "prisma" -} - -generator kysely { - provider = "prisma-kysely" - - output = "../src/lib/db" - fileName = "schema.d.ts" -} - -model Example { - id Int @id @default(autoincrement()) - name String -} diff --git a/template_builder/templates/extras/src/lib/db/{D1|Planetscale|Sqlite|Turso,Auth}schema.d.ts b/template_builder/templates/extras/src/lib/db/{D1|Sqlite|Turso,Auth}schema.d.ts similarity index 100% rename from template_builder/templates/extras/src/lib/db/{D1|Planetscale|Sqlite|Turso,Auth}schema.d.ts rename to template_builder/templates/extras/src/lib/db/{D1|Sqlite|Turso,Auth}schema.d.ts diff --git a/template_builder/templates/extras/src/lib/db/{D1|Planetscale|Sqlite|Turso}schema.d.ts b/template_builder/templates/extras/src/lib/db/{D1|Sqlite|Turso}schema.d.ts similarity index 100% rename from template_builder/templates/extras/src/lib/db/{D1|Planetscale|Sqlite|Turso}schema.d.ts rename to template_builder/templates/extras/src/lib/db/{D1|Sqlite|Turso}schema.d.ts diff --git a/template_builder/templates/extras/src/lib/db/{Planetscale}index.ts b/template_builder/templates/extras/src/lib/db/{Planetscale}index.ts deleted file mode 100644 index 1ff4cddf..00000000 --- a/template_builder/templates/extras/src/lib/db/{Planetscale}index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Kysely, type RawBuilder, sql } from 'kysely'; -import { PlanetScaleDialect, inflateDates } from 'kysely-planetscale'; -import type { DB } from './schema'; -import { - DATABASE_HOST, - DATABASE_USERNAME, - DATABASE_PASSWORD, -} from '$env/static/private'; - -export const db = new Kysely({ - dialect: new PlanetScaleDialect({ - host: DATABASE_HOST, - username: DATABASE_USERNAME, - password: DATABASE_PASSWORD, - cast: (field, value) => { - if (field.type === 'INT8' && value === '1') return true; - if (field.type === 'INT8' && value === '0') return false; - return inflateDates(field, value); - }, - }), -}); - -export function json(obj: T): RawBuilder { - return sql`${JSON.stringify(obj)}`; -} diff --git a/template_builder/templates/extras/src/{Auth,Sqlite|Planetscale|Turso}hooks.server.ts b/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts similarity index 100% rename from template_builder/templates/extras/src/{Auth,Sqlite|Planetscale|Turso}hooks.server.ts rename to template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts diff --git a/template_builder/templates/extras/{D1|Planetscale|Sqlite|Turso}package.json b/template_builder/templates/extras/{D1|Sqlite|Turso}package.json similarity index 100% rename from template_builder/templates/extras/{D1|Planetscale|Sqlite|Turso}package.json rename to template_builder/templates/extras/{D1|Sqlite|Turso}package.json diff --git a/template_builder/templates/extras/{D1|Planetscale|Sqlite}.prettierignore b/template_builder/templates/extras/{D1|Sqlite}.prettierignore similarity index 100% rename from template_builder/templates/extras/{D1|Planetscale|Sqlite}.prettierignore rename to template_builder/templates/extras/{D1|Sqlite}.prettierignore diff --git a/template_builder/templates/extras/{Planetscale,Auth}.env b/template_builder/templates/extras/{Planetscale,Auth}.env deleted file mode 100644 index 9dffe4a8..00000000 --- a/template_builder/templates/extras/{Planetscale,Auth}.env +++ /dev/null @@ -1,10 +0,0 @@ -DATABASE_HOST=aws.connect.psdb.cloud -DATABASE_USERNAME= -DATABASE_PASSWORD= -DATABASE_NAME= - -DATABASE_URL='mysql://${DATABASE_USERNAME}:${DATABASE_PASSWORD}@${DATABASE_HOST}/${DATABASE_NAME}?sslaccept=string' - -# From https://dev.twitch.tv/console -CLIENT_ID= -CLIENT_SECRET= diff --git a/template_builder/templates/extras/{Planetscale}.env b/template_builder/templates/extras/{Planetscale}.env deleted file mode 100644 index 76a60a69..00000000 --- a/template_builder/templates/extras/{Planetscale}.env +++ /dev/null @@ -1,6 +0,0 @@ -DATABASE_HOST=aws.connect.psdb.cloud -DATABASE_USERNAME= -DATABASE_PASSWORD= -DATABASE_NAME= - -DATABASE_URL='mysql://${DATABASE_USERNAME}:${DATABASE_PASSWORD}@${DATABASE_HOST}/${DATABASE_NAME}?sslaccept=string' diff --git a/template_builder/templates/extras/{Planetscale}package.json b/template_builder/templates/extras/{Planetscale}package.json deleted file mode 100644 index ec477f1b..00000000 --- a/template_builder/templates/extras/{Planetscale}package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "scripts": { - "db:push": "prisma db push" - }, - "dependencies": { - "kysely-planetscale": "^1.7.1", - "@planetscale/database": "^1.19.0" - } -} From ca42cb52c35d11a6e2a13ebe0a6486761f205044 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Wed, 5 Aug 2026 20:07:28 -0700 Subject: [PATCH 03/34] feat!: remove yarn --- .ottotime | 2 +- README.md | 2 -- template_builder/src/lib.rs | 1 - .../workflows/{Yarn,Sidecar}deploy-worker.yml | 36 ------------------- ...age.json => {Sidecar,Npm|Bun}package.json} | 0 5 files changed, 1 insertion(+), 40 deletions(-) delete mode 100644 template_builder/templates/extras/.github/workflows/{Yarn,Sidecar}deploy-worker.yml rename template_builder/templates/extras/{{Sidecar,Npm|Yarn|Bun}package.json => {Sidecar,Npm|Bun}package.json} (100%) diff --git a/.ottotime b/.ottotime index 97d686ef..86e7c289 100644 --- a/.ottotime +++ b/.ottotime @@ -35,4 +35,4 @@ 1758009278- 33:49 1785980576- 7:05 1785981379- 3:54 -1785984991- 1:30 +1785984991- 11:47 diff --git a/README.md b/README.md index 8485c468..bc78622f 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,6 @@ pnpm create o7-app bun create o7-app # OR npm create o7-app@latest -# OR -yarn create o7-app ``` Then, open your new app in your favorite IDE and get started! A good place to look first is `src/routes/+page.svelte` for your frontend or `src/lib/server/routes/_app.ts` for tRPC. diff --git a/template_builder/src/lib.rs b/template_builder/src/lib.rs index 8856c595..02569292 100644 --- a/template_builder/src/lib.rs +++ b/template_builder/src/lib.rs @@ -195,7 +195,6 @@ impl Builder { pub enum Feature { Npm, Pnpm, - Yarn, Bun, #(#features),* } diff --git a/template_builder/templates/extras/.github/workflows/{Yarn,Sidecar}deploy-worker.yml b/template_builder/templates/extras/.github/workflows/{Yarn,Sidecar}deploy-worker.yml deleted file mode 100644 index ca6413f9..00000000 --- a/template_builder/templates/extras/.github/workflows/{Yarn,Sidecar}deploy-worker.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Deploy Sidecar Worker - -on: - push: - branches: - - main - paths: - - 'worker/**' - - 'common/**' - - '.github/workflows/deploy-worker.yml' - - 'yarn.lock' - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install yarn - run: yarn set version berry - - - name: Install node - uses: actions/setup-node@v4 - with: - cache: 'yarn' - - - name: Install dependencies - working-directory: worker - run: yarn install --immutable - - - name: Deploy - working-directory: worker - run: yarn run deploy - env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/template_builder/templates/extras/{Sidecar,Npm|Yarn|Bun}package.json b/template_builder/templates/extras/{Sidecar,Npm|Bun}package.json similarity index 100% rename from template_builder/templates/extras/{Sidecar,Npm|Yarn|Bun}package.json rename to template_builder/templates/extras/{Sidecar,Npm|Bun}package.json From 7a063133b58253a43b97529283aeabd486c764c5 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Wed, 5 Aug 2026 20:09:06 -0700 Subject: [PATCH 04/34] chore: update node & tar --- .github/workflows/build.yml | 2 +- .github/workflows/test.yml | 2 +- .ottotime | 2 +- pkg/package.json | 4 ++-- pkg/pnpm-lock.yaml | 38 +++++++++++++++---------------------- 5 files changed, 20 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 56dc5af1..527c20c2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 26 - name: Get version id: get_version run: echo "version=$(grep "version" Cargo.toml | head -n1 | cut -d '"' -f2)" >> $GITHUB_OUTPUT diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d158e27e..6ceb6547 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,7 +48,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 26 - name: Install pnpm run: npm i -g pnpm - name: Test diff --git a/.ottotime b/.ottotime index 86e7c289..5e9123fc 100644 --- a/.ottotime +++ b/.ottotime @@ -35,4 +35,4 @@ 1758009278- 33:49 1785980576- 7:05 1785981379- 3:54 -1785984991- 11:47 +1785984991- 12:17 diff --git a/pkg/package.json b/pkg/package.json index 8ed50086..1555b1ad 100644 --- a/pkg/package.json +++ b/pkg/package.json @@ -31,9 +31,9 @@ "postinstall": "node ./install.js" }, "dependencies": { - "tar": "^7.4.3" + "tar": "^7.5.22" }, "engines": { - "node": ">=18" + "node": ">=24" } } diff --git a/pkg/pnpm-lock.yaml b/pkg/pnpm-lock.yaml index c275d732..b0346699 100644 --- a/pkg/pnpm-lock.yaml +++ b/pkg/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: tar: - specifier: ^7.4.3 - version: 7.4.3 + specifier: ^7.5.22 + version: 7.5.22 packages: @@ -22,21 +22,16 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + tar@7.5.22: + resolution: {integrity: sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==} engines: {node: '>=18'} yallist@5.0.0: @@ -47,25 +42,22 @@ snapshots: '@isaacs/fs-minipass@4.0.1': dependencies: - minipass: 7.1.2 + minipass: 7.1.3 chownr@3.0.0: {} - minipass@7.1.2: {} + minipass@7.1.3: {} - minizlib@3.0.2: + minizlib@3.1.0: dependencies: - minipass: 7.1.2 - - mkdirp@3.0.1: {} + minipass: 7.1.3 - tar@7.4.3: + tar@7.5.22: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.0.2 - mkdirp: 3.0.1 + minipass: 7.1.3 + minizlib: 3.1.0 yallist: 5.0.0 yallist@5.0.0: {} From 9fc47006316fa4f62d70afefeb84bfa4ae24ce0a Mon Sep 17 00:00:00 2001 From: Ottomated Date: Wed, 5 Aug 2026 20:34:32 -0700 Subject: [PATCH 05/34] begin actions update --- .github/workflows/build.yml | 18 ++++++------ .github/workflows/test.yml | 14 +++++----- .github/workflows/update-deps.yml | 28 ++++++++++--------- .github/workflows/update_deps.mjs | 5 ++-- README.md | 4 --- package.json | 3 +- pnpm-lock.yaml | 10 +++++++ .../workflows/{Bun,Sidecar}deploy-worker.yml | 2 +- .../workflows/{Npm,Sidecar}deploy-worker.yml | 4 +-- .../workflows/{Pnpm,Sidecar}deploy-worker.yml | 13 ++++----- 10 files changed, 55 insertions(+), 46 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 527c20c2..743f3830 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,13 +12,15 @@ jobs: id-token: write steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 - - name: Install Node.js - uses: actions/setup-node@v4 + - name: Install pnpm + uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 with: - node-version: 26 + version: ^11.20.0 + runtime: node@lts + install: false - name: Get version id: get_version run: echo "version=$(grep "version" Cargo.toml | head -n1 | cut -d '"' -f2)" >> $GITHUB_OUTPUT @@ -30,8 +32,6 @@ jobs: echo "NPM version is the same as the version in Cargo.toml, exiting" exit 1 fi - - name: Install pnpm - run: npm i -g pnpm - name: Generate changelogs run: | @@ -57,7 +57,7 @@ jobs: - name: Restore cached OSXCross id: restore-osxcross - uses: actions/cache/restore@v4 + uses: actions/cache/restore@caa296126883cff596d87d8935842f9db880ef25 # v5.1.0 with: key: ${{ runner.os }}-osxcross-11.3 path: osxcross @@ -72,7 +72,7 @@ jobs: UNATTENDED=yes OSX_VERSION_MIN=10.7 ./build.sh - name: Cache OSXCross if: always() && steps.restore-osxcross.outputs.cache-hit != 'true' - uses: actions/cache/save@v4 + uses: actions/cache/save@caa296126883cff596d87d8935842f9db880ef25 # v5.1.0 with: key: ${{ runner.os }}-osxcross-11.3 path: osxcross @@ -111,7 +111,7 @@ jobs: git push - name: Release Binaries - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 with: body_path: CHANGELOG-release.md tag_name: ${{ steps.get_version.outputs.version }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6ceb6547..b9f3f6cc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,9 +27,9 @@ jobs: shard-count: ${{ fromJson(needs.create-shards.outputs.shard-count) }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - - uses: actions/cache@v4 + - uses: actions/cache@caa296126883cff596d87d8935842f9db880ef25 # v5.1.0 with: save-always: true path: | @@ -45,12 +45,12 @@ jobs: with: components: rustfmt - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version: 26 - name: Install pnpm - run: npm i -g pnpm + uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 + with: + version: ^11.20.0 + runtime: node@lts + install: false - name: Test run: cargo test env: diff --git a/.github/workflows/update-deps.yml b/.github/workflows/update-deps.yml index 491de4d6..c72f90eb 100644 --- a/.github/workflows/update-deps.yml +++ b/.github/workflows/update-deps.yml @@ -10,7 +10,7 @@ jobs: steps: - name: Detect open PR id: detect_open_pr - uses: actions/github-script@v7 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: result-encoding: string script: | @@ -31,23 +31,25 @@ jobs: return pullRequests[0]?.head?.ref ?? 'main'; - id: create_token - uses: tibdex/github-app-token@v2 + uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2.2.2 with: - app_id: ${{ secrets.APP_ID }} - private_key: ${{ secrets.APP_PRIVATE_KEY }} + client-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + permission-pull-requests: write - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: token: ${{ steps.create_token.outputs.token }} ref: ${{ steps.detect_open_pr.outputs.result }} - - name: Install Node.js - uses: actions/setup-node@v4 + - name: Install pnpm + uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 with: - node-version: 20 - - name: Install Bun - uses: oven-sh/setup-bun@v2 + version: ^11.20.0 + runtime: node@lts + install: false + - name: Install Rust uses: dtolnay/rust-toolchain@stable with: @@ -57,7 +59,7 @@ jobs: run: | { echo 'PR_BODY<> $GITHUB_ENV @@ -66,7 +68,7 @@ jobs: - name: Open PR if: steps.detect_open_pr.outputs.result == 'main' - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1 with: token: ${{ steps.create_token.outputs.token }} commit-message: 'ci: Update dependencies' @@ -91,7 +93,7 @@ jobs: - name: Comment on PR if: steps.detect_open_pr.outputs.result != 'main' - uses: actions/github-script@v7 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ steps.create_token.outputs.token }} script: | diff --git a/.github/workflows/update_deps.mjs b/.github/workflows/update_deps.mjs index fa4aae57..fda76ee4 100644 --- a/.github/workflows/update_deps.mjs +++ b/.github/workflows/update_deps.mjs @@ -1,6 +1,7 @@ import { resolve, basename, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import { readdir, readFile, writeFile } from 'node:fs/promises'; +import * as semver from 'semver'; const isNewPr = process.argv[2] === 'main'; const dryRun = process.argv.includes('--dry-run'); @@ -155,8 +156,8 @@ async function latestVersion(packageName, tag) { if (packageName === 'tailwindcss' && tag === '3') { const v3Versions = Object.keys(data?.versions ?? {}) - .filter((v) => Bun.semver.satisfies(v, '3')) - .sort(Bun.semver.order); + .filter((v) => semver.satisfies(v, '3')) + .sort(semver.compare); const mostRecent = v3Versions[v3Versions.length - 1]; return mostRecent; } diff --git a/README.md b/README.md index bc78622f..5cc14ed3 100644 --- a/README.md +++ b/README.md @@ -34,10 +34,6 @@ First, run the CLI to scaffold your app: ```bash pnpm create o7-app -# OR -bun create o7-app -# OR -npm create o7-app@latest ``` Then, open your new app in your favorite IDE and get started! A good place to look first is `src/routes/+page.svelte` for your frontend or `src/lib/server/routes/_app.ts` for tRPC. diff --git a/package.json b/package.json index 3c402d7f..fbeb7d93 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "devDependencies": { - "@types/node": "^26.1.2" + "@types/node": "^26.1.2", + "semver": "^7.8.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5898d68c..51c6386e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,12 +11,20 @@ importers: '@types/node': specifier: ^26.1.2 version: 26.1.2 + semver: + specifier: ^7.8.5 + version: 7.8.5 packages: '@types/node@26.1.2': resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + undici-types@8.3.0: resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} @@ -26,4 +34,6 @@ snapshots: dependencies: undici-types: 8.3.0 + semver@7.8.5: {} + undici-types@8.3.0: {} diff --git a/template_builder/templates/extras/.github/workflows/{Bun,Sidecar}deploy-worker.yml b/template_builder/templates/extras/.github/workflows/{Bun,Sidecar}deploy-worker.yml index e04f38ef..a9cce85e 100644 --- a/template_builder/templates/extras/.github/workflows/{Bun,Sidecar}deploy-worker.yml +++ b/template_builder/templates/extras/.github/workflows/{Bun,Sidecar}deploy-worker.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Install Bun uses: oven-sh/setup-bun@v2 diff --git a/template_builder/templates/extras/.github/workflows/{Npm,Sidecar}deploy-worker.yml b/template_builder/templates/extras/.github/workflows/{Npm,Sidecar}deploy-worker.yml index 091ee06b..bc1e518a 100644 --- a/template_builder/templates/extras/.github/workflows/{Npm,Sidecar}deploy-worker.yml +++ b/template_builder/templates/extras/.github/workflows/{Npm,Sidecar}deploy-worker.yml @@ -15,10 +15,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Install node - uses: actions/setup-node@v4 + uses: actions/setup-node@v7 with: cache: 'npm' diff --git a/template_builder/templates/extras/.github/workflows/{Pnpm,Sidecar}deploy-worker.yml b/template_builder/templates/extras/.github/workflows/{Pnpm,Sidecar}deploy-worker.yml index e64948da..37b4051f 100644 --- a/template_builder/templates/extras/.github/workflows/{Pnpm,Sidecar}deploy-worker.yml +++ b/template_builder/templates/extras/.github/workflows/{Pnpm,Sidecar}deploy-worker.yml @@ -15,15 +15,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - - uses: pnpm/action-setup@v4 - name: Install pnpm - - - name: Install node - uses: actions/setup-node@v4 + - name: Install pnpm + uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 with: - cache: 'pnpm' + version: ^11.20.0 + runtime: node@lts + install: false - name: Install dependencies working-directory: worker From 124d75d23b4697e59e4e5f684e40514f55e8ee83 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Wed, 5 Aug 2026 20:44:49 -0700 Subject: [PATCH 06/34] chore: harden github actions --- .github/workflows/build.yml | 34 ++++++++++++++++++------------- .github/workflows/test.yml | 10 ++++++--- .github/workflows/update-deps.yml | 16 ++++++++++----- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 743f3830..37bc022b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,6 +15,7 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 + persist-credentials: false - name: Install pnpm uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 with: @@ -27,24 +28,26 @@ jobs: - name: Compare version to NPM run: | NPM_VERSION=$(npm view create-o7-app version) - MY_VERSION=${{ steps.get_version.outputs.version }} + MY_VERSION=${VERSION} if [ "$NPM_VERSION" == "$MY_VERSION" ]; then echo "NPM version is the same as the version in Cargo.toml, exiting" exit 1 fi + env: + VERSION: ${{ steps.get_version.outputs.version }} - name: Generate changelogs run: | # Full changelog - pnpx git-cliff --tag ${{ steps.get_version.outputs.version }} -o CHANGELOG.md + pnpx git-cliff --tag ${VERSION} -o CHANGELOG.md # Changelog for the release - pnpx git-cliff --tag ${{ steps.get_version.outputs.version }} --unreleased --strip header -o CHANGELOG-release.md + pnpx git-cliff --tag ${VERSION} --unreleased --strip header -o CHANGELOG-release.md + env: + VERSION: ${{ steps.get_version.outputs.version }} - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - components: rustfmt - targets: x86_64-unknown-linux-musl,x86_64-pc-windows-gnu,i686-pc-windows-gnu,x86_64-apple-darwin,aarch64-apple-darwin + run: | + rustup toolchain install stable --component rustfmt --target x86_64-unknown-linux-musl --target x86_64-pc-windows-gnu --target i686-pc-windows-gnu --target x86_64-apple-darwin --target aarch64-apple-darwin # - name: Test # run: cargo test - name: Install MinGW @@ -107,20 +110,23 @@ jobs: git add CHANGELOG.md git config --local user.email "create-o7-app@users.noreply.github.com" git config --local user.name "create-o7-app[bot]" - git commit -m "ci: Update changelog for ${{ steps.get_version.outputs.version }}" + git commit -m "ci: Update changelog for ${VERSION}" git push + env: + VERSION: ${{ steps.get_version.outputs.version }} - name: Release Binaries - uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 - with: - body_path: CHANGELOG-release.md - tag_name: ${{ steps.get_version.outputs.version }} - files: compressed/artifacts/* + run: gh release create ${VERSION} compressed/artifacts/* --notes-file CHANGELOG-release.md + env: + VERSION: ${{ steps.get_version.outputs.version }} + - name: Publish NPM Package run: | cd pkg cp ../README.md . - jq '.version = "${{ steps.get_version.outputs.version }}"' package.json > tmp && mv tmp package.json + jq '.version = "${VERSION}"' package.json > tmp && mv tmp package.json npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc npm publish + env: + VERSION: ${{ steps.get_version.outputs.version }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b9f3f6cc..b16d3bb3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,6 +5,7 @@ on: jobs: create-shards: runs-on: ubuntu-latest + permissions: {} outputs: shards: ${{ steps.shards.outputs.shards }} shard-count: ${{ steps.shards.outputs.count }} @@ -20,6 +21,7 @@ jobs: test: runs-on: ubuntu-latest needs: create-shards + permissions: {} strategy: fail-fast: false matrix: @@ -28,6 +30,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false - uses: actions/cache@caa296126883cff596d87d8935842f9db880ef25 # v5.1.0 with: @@ -40,10 +44,10 @@ jobs: target/ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - components: rustfmt + run: | + rustup toolchain install stable --component rustfmt - name: Install pnpm uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 diff --git a/.github/workflows/update-deps.yml b/.github/workflows/update-deps.yml index c72f90eb..d845e64f 100644 --- a/.github/workflows/update-deps.yml +++ b/.github/workflows/update-deps.yml @@ -7,6 +7,7 @@ on: jobs: update: runs-on: ubuntu-latest + permissions: {} steps: - name: Detect open PR id: detect_open_pr @@ -42,6 +43,7 @@ jobs: with: token: ${{ steps.create_token.outputs.token }} ref: ${{ steps.detect_open_pr.outputs.result }} + persist-credentials: false - name: Install pnpm uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 @@ -50,18 +52,20 @@ jobs: runtime: node@lts install: false + - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - components: rustfmt + run: | + rustup toolchain install stable --component rustfmt - name: Do updates run: | { echo 'PR_BODY<> $GITHUB_ENV + env: + PR_BRANCH_NAME: ${{ steps.detect_open_pr.outputs.result }} - name: Cargo update run: cargo update @@ -89,7 +93,9 @@ jobs: git config --local user.name "create-o7-app[bot]" git commit -m "ci: Update dependencies" - git push origin ${{ steps.detect_open_pr.outputs.result }} + git push origin ${PR_BRANCH_NAME} + env: + PR_BRANCH_NAME: ${{ steps.detect_open_pr.outputs.result }} - name: Comment on PR if: steps.detect_open_pr.outputs.result != 'main' From 589e9d46e13438bae9cd90f8ddcaecdb4725b92c Mon Sep 17 00:00:00 2001 From: Ottomated Date: Wed, 5 Aug 2026 20:51:04 -0700 Subject: [PATCH 07/34] fix yarn --- .github/workflows/test.yml | 1 - src/utils.rs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b16d3bb3..c0dc17db 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,7 +44,6 @@ jobs: target/ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Install Rust run: | rustup toolchain install stable --component rustfmt diff --git a/src/utils.rs b/src/utils.rs index 00306e9d..c09007be 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -29,7 +29,7 @@ impl PackageManager { match self { PackageManager::Npm => Feature::Npm, PackageManager::Pnpm => Feature::Pnpm, - PackageManager::Yarn => Feature::Yarn, + PackageManager::Yarn => Feature::Npm, PackageManager::Bun => Feature::Bun, } } From 131dd03e0441f97251ba2db0f11bcad4b15cd44d Mon Sep 17 00:00:00 2001 From: Ottomated Date: Wed, 5 Aug 2026 21:05:21 -0700 Subject: [PATCH 08/34] chore: remove dependency on Bun --- .github/workflows/update_deps.mjs | 99 ++++++++++++++++--------------- package.json | 3 +- pnpm-lock.yaml | 8 +++ 3 files changed, 60 insertions(+), 50 deletions(-) diff --git a/.github/workflows/update_deps.mjs b/.github/workflows/update_deps.mjs index fda76ee4..8dcb5fc8 100644 --- a/.github/workflows/update_deps.mjs +++ b/.github/workflows/update_deps.mjs @@ -2,15 +2,16 @@ import { resolve, basename, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import { readdir, readFile, writeFile } from 'node:fs/promises'; import * as semver from 'semver'; +import JSONC from 'tiny-jsonc'; -const isNewPr = process.argv[2] === 'main'; -const dryRun = process.argv.includes('--dry-run'); +const is_new_pr = process.argv[2] === 'main'; +const dry_run = process.argv.includes('--dry-run'); const IGNORE_DEPS = ['common']; -export async function getUpdates() { - const projectRoot = resolve(fileURLToPath(import.meta.url), '../../..'); - const templateRoot = join(projectRoot, 'template_builder/templates'); +export async function get_updates() { + const project_root = resolve(fileURLToPath(import.meta.url), '../../..'); + const template_root = join(project_root, 'template_builder/templates'); /** * @@ -18,7 +19,7 @@ export async function getUpdates() { * @param {'dependencies' | 'devDependencies'} key * @returns true if any dependencies were updated */ - async function processDependencies(pkg, key) { + async function process_dependencies(pkg, key) { if (!pkg[key]) return []; let dirty = []; for (const [name, currentVersion] of Object.entries(pkg[key])) { @@ -36,7 +37,7 @@ export async function getUpdates() { if (prefix !== '^' && prefix !== '~') { prefix = ''; } - let latest = await latestVersion(name, tag); + let latest = await latest_version(name, tag); if (!latest) continue; latest = prefix + latest; @@ -48,88 +49,88 @@ export async function getUpdates() { return dirty; } - if (isNewPr) { - const cargoTomlPath = join(projectRoot, 'Cargo.toml'); - const cargoToml = await readFile(cargoTomlPath, 'utf8'); - const version = cargoToml.match(/version = "(.*)"/)?.[1]; + if (is_new_pr) { + const cargo_toml_path = join(project_root, 'Cargo.toml'); + const cargo_toml = await readFile(cargo_toml_path, 'utf8'); + const version = cargo_toml.match(/version = "(.*)"/)?.[1]; if (!version) { console.error('Could not find version in Cargo.toml'); process.exit(1); } const [major, minor, patch] = version.split('.'); - const newVersion = `${major}.${minor}.${parseInt(patch) + 1}`; - if (!dryRun) { + const new_version = `${major}.${minor}.${parseInt(patch) + 1}`; + if (!dry_run) { await writeFile( - cargoTomlPath, - cargoToml.replace(/version = "(.*)"/, `version = "${newVersion}"`), + cargo_toml_path, + cargo_toml.replace(/version = "(.*)"/, `version = "${new_version}"`), ); } - console.log(`_Bumped version to ${newVersion}_\n\n`); + console.log(`_Bumped version to ${new_version}_\n\n`); } - for await (const f of getFiles(templateRoot)) { + for await (const f of get_files(template_root)) { const groups = basename(f).match(/^(\{[^{}]*\})?package\.json$/); if (!groups) continue; const pkg = JSON.parse(await readFile(f, 'utf8')); const updates = await Promise.all([ - processDependencies(pkg, 'dependencies'), - processDependencies(pkg, 'devDependencies'), + process_dependencies(pkg, 'dependencies'), + process_dependencies(pkg, 'devDependencies'), ]).then((results) => results.flat()); if (updates.length) { - if (!dryRun) { + if (!dry_run) { await writeFile(f, JSON.stringify(pkg, null, '\t') + '\n'); } - const features = prettifyFeatures(groups[1]); + const features = prettify_features(groups[1]); console.log(`| \`${features}\` | old | new |`); console.log('|-|-|-|'); - for (const [name, currentVersion, latest] of updates) { - console.log(`| ${name} | \`${currentVersion}\` | \`${latest}\` |`); + for (const [name, current_version, latest] of updates) { + console.log(`| ${name} | \`${current_version}\` | \`${latest}\` |`); } console.log('\n\n'); } } - const cloudflareVersion = await latestVersion( + const cloudflare_version = await latest_version( '@cloudflare/workers-types', 'latest', ); - const cloudflareDate = cloudflareVersion.split('.')[1]; - if (!cloudflareDate || !/^[0-9]{8}$/.test(cloudflareDate)) { + const cloudflare_date = cloudflare_version.split('.')[1]; + if (!cloudflare_date || !/^[0-9]{8}$/.test(cloudflare_date)) { console.error( - `Invalid @cloudflare/workers-types version: ${cloudflareVersion}`, + `Invalid @cloudflare/workers-types version: ${cloudflare_version}`, ); process.exit(1); } - const compatibilityDate = `${cloudflareDate.substring( + const compatibility_date = `${cloudflare_date.substring( 0, 4, - )}-${cloudflareDate.substring(4, 6)}-${cloudflareDate.substring(6, 8)}`; + )}-${cloudflare_date.substring(4, 6)}-${cloudflare_date.substring(6, 8)}`; - let changedFiles = []; - for await (const f of getFiles(templateRoot)) { + const changed_files = []; + for await (const f of get_files(template_root)) { const groups = basename(f).match(/^(\{[^{}]*\})?wrangler\.jsonc$/); if (!groups) continue; - const wrangler = await import(f, { assert: { type: 'jsonc' } }); + const wrangler = JSONC.parse(await readFile(f, 'utf8')); - const oldVersion = wrangler.compatibility_date; + const old_version = wrangler.compatibility_date; - if (oldVersion !== compatibilityDate) { - if (!dryRun) { + if (old_version !== compatibility_date) { + if (!dry_run) { const text = (await readFile(f, 'utf8')).replace( - `"${oldVersion}"`, - `"${compatibilityDate}"`, + `"${old_version}"`, + `"${compatibility_date}"`, ); await writeFile(f, text); } - changedFiles.push([prettifyFeatures(groups[1]), oldVersion]); + changed_files.push([prettify_features(groups[1]), old_version]); } } - if (changedFiles.length) { + if (changed_files.length) { console.log(`| \`compatibility_date\` | old | new |`); console.log('|-|-|-|'); - for (const [name, oldVersion] of changedFiles) { - console.log(`| ${name} | \`${oldVersion}\` | \`${compatibilityDate}\` |`); + for (const [name, oldVersion] of changed_files) { + console.log(`| ${name} | \`${oldVersion}\` | \`${compatibility_date}\` |`); } console.log('\n\n'); } @@ -137,13 +138,13 @@ export async function getUpdates() { /** * - * @param {string} packageName + * @param {string} package_name * @param {string} tag * @returns {Promise} */ -async function latestVersion(packageName, tag) { +async function latest_version(package_name, tag) { const url = new URL( - encodeURIComponent(packageName).replace(/^%40/, '@'), + encodeURIComponent(package_name).replace(/^%40/, '@'), 'https://registry.npmjs.org/', ); const res = await fetch(url, { @@ -154,7 +155,7 @@ async function latestVersion(packageName, tag) { }); const data = await res.json(); - if (packageName === 'tailwindcss' && tag === '3') { + if (package_name === 'tailwindcss' && tag === '3') { const v3Versions = Object.keys(data?.versions ?? {}) .filter((v) => semver.satisfies(v, '3')) .sort(semver.compare); @@ -170,12 +171,12 @@ async function latestVersion(packageName, tag) { * @param {string} dir * @returns {AsyncGenerator} */ -async function* getFiles(dir) { +async function* get_files(dir) { const dirents = await readdir(dir, { withFileTypes: true }); for (const dirent of dirents) { const res = resolve(dir, dirent.name); if (dirent.isDirectory()) { - yield* getFiles(res); + yield* get_files(res); } else { yield res; } @@ -184,7 +185,7 @@ async function* getFiles(dir) { /** * @param {string | undefined} features */ -function prettifyFeatures(features) { +function prettify_features(features) { if (features === undefined) return 'base'; return features .substring(1, features.length - 1) // strip {} @@ -192,4 +193,4 @@ function prettifyFeatures(features) { .replace(/\|/g, ' \\| '); // escape and prettify pipes } -getUpdates(); +get_updates(); diff --git a/package.json b/package.json index fbeb7d93..20bdcbdc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "devDependencies": { "@types/node": "^26.1.2", - "semver": "^7.8.5" + "semver": "^7.8.5", + "tiny-jsonc": "^1.0.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 51c6386e..372f1eba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: semver: specifier: ^7.8.5 version: 7.8.5 + tiny-jsonc: + specifier: ^1.0.2 + version: 1.0.2 packages: @@ -25,6 +28,9 @@ packages: engines: {node: '>=10'} hasBin: true + tiny-jsonc@1.0.2: + resolution: {integrity: sha512-f5QDAfLq6zIVSyCZQZhhyl0QS6MvAyTxgz4X4x3+EoCktNWEYJ6PeoEA97fyb98njpBNNi88ybpD7m+BDFXaCw==} + undici-types@8.3.0: resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} @@ -36,4 +42,6 @@ snapshots: semver@7.8.5: {} + tiny-jsonc@1.0.2: {} + undici-types@8.3.0: {} From a656d994809bc550e9157c5bb33c54b57ac3ba17 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Wed, 5 Aug 2026 21:05:54 -0700 Subject: [PATCH 09/34] remove bun --- assets/example.tape | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/example.tape b/assets/example.tape index b1d4f59f..675aa355 100644 --- a/assets/example.tape +++ b/assets/example.tape @@ -16,7 +16,7 @@ Sleep 1s Show Sleep 500ms -Type "bun create o7-app" +Type "pnpm create o7-app" Sleep 500ms Enter From a301c3395061198a150afd7f1e08690e5d7c1a77 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Wed, 5 Aug 2026 21:07:14 -0700 Subject: [PATCH 10/34] add todos --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5cc14ed3..9703da1d 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,11 @@ Then, open your new app in your favorite IDE and get started! A good place to lo ## Upcoming -- [ ] Move the tutorial to a README file -- [ ] Fully remove tRPC and @tanstack/svelte-query when [Remote Functions](https://github.com/sveltejs/kit/pull/13986) land -- [ ] Remove sidecar worker when [environment API support](https://github.com/sveltejs/kit/pull/14008) lands +- [ ] zod -> valibot +- [ ] sveltekit 3 +- [ ] prettier -> oxfmt +- [ ] svelte-check tsgo +- [ ] remote functions auth +- [ ] auth user + pass option? +- [ ] durable object patch +- [ ] prisma 7? From f38cfe4747688e5868cd453b26f2e8e82ff7d74b Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 6 Aug 2026 11:59:44 -0700 Subject: [PATCH 11/34] feat!: remove tRPC --- README.md | 4 +-- pkg/package.json | 1 - src/test.rs | 5 ---- template_builder/templates/config.json | 7 ----- .../src/lib/server/routes/{Trpc,Auth}_app.ts | 9 ------ .../src/lib/server/routes/{Trpc}_app.ts | 5 ---- .../src/lib/server/{Trpc,Auth}context.ts | 10 ------- .../extras/src/lib/server/{Trpc,Auth}trpc.ts | 23 --------------- .../extras/src/lib/server/{Trpc}context.ts | 7 ----- .../extras/src/lib/server/{Trpc}server.ts | 9 ------ .../extras/src/lib/server/{Trpc}trpc.ts | 11 -------- .../templates/extras/src/lib/{Trpc}trpc.ts | 28 ------------------- .../api/trpc/[...trpc]/{Trpc}+server.ts | 4 --- .../extras/src/routes/{Trpc}+layout.server.ts | 8 ------ .../extras/src/routes/{Trpc}+layout.svelte | 10 ------- .../templates/extras/{Trpc}package.json | 10 ------- 16 files changed, 1 insertion(+), 150 deletions(-) delete mode 100644 template_builder/templates/extras/src/lib/server/routes/{Trpc,Auth}_app.ts delete mode 100644 template_builder/templates/extras/src/lib/server/routes/{Trpc}_app.ts delete mode 100644 template_builder/templates/extras/src/lib/server/{Trpc,Auth}context.ts delete mode 100644 template_builder/templates/extras/src/lib/server/{Trpc,Auth}trpc.ts delete mode 100644 template_builder/templates/extras/src/lib/server/{Trpc}context.ts delete mode 100644 template_builder/templates/extras/src/lib/server/{Trpc}server.ts delete mode 100644 template_builder/templates/extras/src/lib/server/{Trpc}trpc.ts delete mode 100644 template_builder/templates/extras/src/lib/{Trpc}trpc.ts delete mode 100644 template_builder/templates/extras/src/routes/api/trpc/[...trpc]/{Trpc}+server.ts delete mode 100644 template_builder/templates/extras/src/routes/{Trpc}+layout.server.ts delete mode 100644 template_builder/templates/extras/src/routes/{Trpc}+layout.svelte delete mode 100644 template_builder/templates/extras/{Trpc}package.json diff --git a/README.md b/README.md index 9703da1d..c58d1822 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,6 @@ - [Typescript](https://www.typescriptlang.org/) - [Prisma](https://www.prisma.io/) - [Kysely](https://github.com/kysely-org/kysely) -- [tRPC](https://trpc.io) -- [Lucia](https://lucia-auth.com/) > **Why both Prisma and Kysely?** `create-o7-app`'s template includes Kysely for **Edge support** and **fast cold starts**, with all the convenience of using Prisma for migrations. @@ -36,7 +34,7 @@ First, run the CLI to scaffold your app: pnpm create o7-app ``` -Then, open your new app in your favorite IDE and get started! A good place to look first is `src/routes/+page.svelte` for your frontend or `src/lib/server/routes/_app.ts` for tRPC. +Then, open your new app in your favorite IDE and get started! ## [Changelog](https://github.com/ottomated/create-o7-app/blob/main/CHANGELOG.md) diff --git a/pkg/package.json b/pkg/package.json index 1555b1ad..a9661a2f 100644 --- a/pkg/package.json +++ b/pkg/package.json @@ -13,7 +13,6 @@ "svelte", "sveltekit", "tailwind", - "tRPC", "typescript", "prisma", "kysely", diff --git a/src/test.rs b/src/test.rs index ead6233b..70f3d070 100644 --- a/src/test.rs +++ b/src/test.rs @@ -130,11 +130,6 @@ fn test() { let combinations = generate_combinations(get_feature_list()); let mut combinations = create_shard(combinations); - // let mut combinations = vec![HashSet::new()]; - // combinations[0].insert(Feature::Edge); - // combinations[0].insert(Feature::D1); - // combinations[0].insert(Feature::Trpc); - let num_threads = min( { let possible = diff --git a/template_builder/templates/config.json b/template_builder/templates/config.json index cafcb463..d1d395e2 100644 --- a/template_builder/templates/config.json +++ b/template_builder/templates/config.json @@ -8,13 +8,6 @@ "description": "(with Lucia)", "default": false }, - { - "id": "Trpc", - "name": "tRPC", - "description": "(Type-safe API)", - "default": true, - "required_if": ["Auth"] - }, { "id": "Edge", "name": "Edge", diff --git a/template_builder/templates/extras/src/lib/server/routes/{Trpc,Auth}_app.ts b/template_builder/templates/extras/src/lib/server/routes/{Trpc,Auth}_app.ts deleted file mode 100644 index 50b31886..00000000 --- a/template_builder/templates/extras/src/lib/server/routes/{Trpc,Auth}_app.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { router, publicProcedure } from '../trpc'; - -export const appRouter = router({ - me: publicProcedure.query(({ ctx }) => { - return ctx.user; - }), -}); - -export type AppRouter = typeof appRouter; diff --git a/template_builder/templates/extras/src/lib/server/routes/{Trpc}_app.ts b/template_builder/templates/extras/src/lib/server/routes/{Trpc}_app.ts deleted file mode 100644 index aa942f6d..00000000 --- a/template_builder/templates/extras/src/lib/server/routes/{Trpc}_app.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { router } from '../trpc'; - -export const appRouter = router({}); - -export type AppRouter = typeof appRouter; diff --git a/template_builder/templates/extras/src/lib/server/{Trpc,Auth}context.ts b/template_builder/templates/extras/src/lib/server/{Trpc,Auth}context.ts deleted file mode 100644 index 0fa32da0..00000000 --- a/template_builder/templates/extras/src/lib/server/{Trpc,Auth}context.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { RequestEvent } from '@sveltejs/kit'; - -export async function createContext(event: RequestEvent) { - return { - user: event.locals.user, - session: event.locals.session, - }; -} - -export type Context = Awaited>; diff --git a/template_builder/templates/extras/src/lib/server/{Trpc,Auth}trpc.ts b/template_builder/templates/extras/src/lib/server/{Trpc,Auth}trpc.ts deleted file mode 100644 index 7f6384c7..00000000 --- a/template_builder/templates/extras/src/lib/server/{Trpc,Auth}trpc.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { TRPCError, initTRPC } from '@trpc/server'; -import type { Context } from './context'; -import { transformer } from '$lib/trpc'; - -const t = initTRPC.context().create({ - transformer, -}); - -export const router = t.router; - -export const publicProcedure = t.procedure; - -export const authedProcedure = publicProcedure.use(({ ctx, next }) => { - if (!ctx.session || !ctx.user) { - throw new TRPCError({ code: 'UNAUTHORIZED' }); - } - return next({ - ctx: { - user: ctx.user, - session: ctx.session, - }, - }); -}); diff --git a/template_builder/templates/extras/src/lib/server/{Trpc}context.ts b/template_builder/templates/extras/src/lib/server/{Trpc}context.ts deleted file mode 100644 index dda2e443..00000000 --- a/template_builder/templates/extras/src/lib/server/{Trpc}context.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { RequestEvent } from '@sveltejs/kit'; - -export async function createContext(_event: RequestEvent) { - return {}; -} - -export type Context = Awaited>; diff --git a/template_builder/templates/extras/src/lib/server/{Trpc}server.ts b/template_builder/templates/extras/src/lib/server/{Trpc}server.ts deleted file mode 100644 index 39e0ec11..00000000 --- a/template_builder/templates/extras/src/lib/server/{Trpc}server.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createTRPCSvelteServer } from 'trpc-svelte-query/server'; -import { appRouter } from './routes/_app'; -import { createContext } from './context'; - -export const trpcServer = createTRPCSvelteServer({ - endpoint: '/api/trpc', - router: appRouter, - createContext, -}); diff --git a/template_builder/templates/extras/src/lib/server/{Trpc}trpc.ts b/template_builder/templates/extras/src/lib/server/{Trpc}trpc.ts deleted file mode 100644 index 4307515f..00000000 --- a/template_builder/templates/extras/src/lib/server/{Trpc}trpc.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { initTRPC } from '@trpc/server'; -import type { Context } from './context'; -import { transformer } from '$lib/trpc'; - -const t = initTRPC.context().create({ - transformer, -}); - -export const router = t.router; - -export const publicProcedure = t.procedure; diff --git a/template_builder/templates/extras/src/lib/{Trpc}trpc.ts b/template_builder/templates/extras/src/lib/{Trpc}trpc.ts deleted file mode 100644 index 18c2ee61..00000000 --- a/template_builder/templates/extras/src/lib/{Trpc}trpc.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { createTRPCSvelte } from 'trpc-svelte-query'; -import { httpBatchLink } from '@trpc/client'; -import type { AppRouter } from '$lib/server/routes/_app'; -import { parse, stringify, uneval } from 'devalue'; -import type { inferRouterOutputs, inferRouterInputs } from '@trpc/server'; - -export const transformer = { - input: { - serialize: (object: unknown) => stringify(object), - deserialize: (object: string) => parse(object), - }, - output: { - serialize: (object: unknown) => uneval(object), - deserialize: (object: string) => (0, eval)(`(${object})`), - }, -}; - -export const trpc = createTRPCSvelte({ - links: [ - httpBatchLink({ - url: '/api/trpc', - transformer, - }), - ], -}); - -export type RouterOutput = inferRouterOutputs; -export type RouterInput = inferRouterInputs; diff --git a/template_builder/templates/extras/src/routes/api/trpc/[...trpc]/{Trpc}+server.ts b/template_builder/templates/extras/src/routes/api/trpc/[...trpc]/{Trpc}+server.ts deleted file mode 100644 index cf267110..00000000 --- a/template_builder/templates/extras/src/routes/api/trpc/[...trpc]/{Trpc}+server.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { trpcServer } from '$lib/server/server'; - -export const GET = trpcServer.handler; -export const POST = trpcServer.handler; diff --git a/template_builder/templates/extras/src/routes/{Trpc}+layout.server.ts b/template_builder/templates/extras/src/routes/{Trpc}+layout.server.ts deleted file mode 100644 index 53f7bc8d..00000000 --- a/template_builder/templates/extras/src/routes/{Trpc}+layout.server.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { trpcServer } from '$lib/server/server'; -import type { LayoutServerLoad } from './$types'; - -export const load: LayoutServerLoad = async (event) => { - return { - trpc: trpcServer.hydrateToClient(event), - }; -}; diff --git a/template_builder/templates/extras/src/routes/{Trpc}+layout.svelte b/template_builder/templates/extras/src/routes/{Trpc}+layout.svelte deleted file mode 100644 index da086ea2..00000000 --- a/template_builder/templates/extras/src/routes/{Trpc}+layout.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -{@render children()} diff --git a/template_builder/templates/extras/{Trpc}package.json b/template_builder/templates/extras/{Trpc}package.json deleted file mode 100644 index 44ae2530..00000000 --- a/template_builder/templates/extras/{Trpc}package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "dependencies": { - "@tanstack/svelte-query": "^6.0.3", - "@trpc/client": "^11.7.1", - "@trpc/server": "^11.7.1", - "devalue": "^5.4.2", - "trpc-svelte-query": "^3.0.3", - "zod": "^4.1.12" - } -} From dc1d078c05c1d3455d85e891e03af5978185875f Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 6 Aug 2026 12:20:51 -0700 Subject: [PATCH 12/34] feat!: remove default --- template_builder/templates/base/src/app.html | 1 - 1 file changed, 1 deletion(-) diff --git a/template_builder/templates/base/src/app.html b/template_builder/templates/base/src/app.html index 94d3cbff..0052a49f 100644 --- a/template_builder/templates/base/src/app.html +++ b/template_builder/templates/base/src/app.html @@ -4,7 +4,6 @@ __o7__name__ - %sveltekit.head% From 34a2dd6aee45d47c7d73ef0e5c431b2b94b6a4a0 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 6 Aug 2026 12:58:42 -0700 Subject: [PATCH 13/34] feat: switch from prettier to oxfmt --- template_builder/templates/base/.oxfmtrc.json | 8 ++++++++ template_builder/templates/base/.prettierrc | 19 ------------------- .../templates/base/eslint.config.js | 8 -------- 3 files changed, 8 insertions(+), 27 deletions(-) create mode 100644 template_builder/templates/base/.oxfmtrc.json delete mode 100644 template_builder/templates/base/.prettierrc diff --git a/template_builder/templates/base/.oxfmtrc.json b/template_builder/templates/base/.oxfmtrc.json new file mode 100644 index 00000000..f4b6d344 --- /dev/null +++ b/template_builder/templates/base/.oxfmtrc.json @@ -0,0 +1,8 @@ +{ + "singleQuote": true, + "tabWidth": 2, + "useTabs": true, + "sortTailwindcss": true, + "svelte": true, + "ignorePatterns": ["worker-configuration.d.ts"] +} diff --git a/template_builder/templates/base/.prettierrc b/template_builder/templates/base/.prettierrc deleted file mode 100644 index 95d76e71..00000000 --- a/template_builder/templates/base/.prettierrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "semi": true, - "singleQuote": true, - "tabWidth": 2, - "useTabs": true, - "trailingComma": "all", - "plugins": [ - "prettier-plugin-svelte", - "prettier-plugin-tailwindcss" - ], - "overrides": [ - { - "files": "*.svelte", - "options": { - "parser": "svelte" - } - } - ] -} diff --git a/template_builder/templates/base/eslint.config.js b/template_builder/templates/base/eslint.config.js index b4318c57..6af13239 100644 --- a/template_builder/templates/base/eslint.config.js +++ b/template_builder/templates/base/eslint.config.js @@ -1,6 +1,5 @@ import globals from 'globals'; import js from '@eslint/js'; -import prettier from 'eslint-plugin-prettier/recommended'; import svelte from 'eslint-plugin-svelte'; import ts from 'typescript-eslint'; import svelteConfig from './svelte.config.js'; @@ -9,8 +8,6 @@ export default ts.config( js.configs.recommended, ...ts.configs.recommended, ...svelte.configs.recommended, - ...svelte.configs.prettier, - prettier, { languageOptions: { globals: { @@ -53,10 +50,5 @@ export default ts.config( ], }, }, - { - rules: { - 'prettier/prettier': 'warn', - }, - }, { ignores: ['**/.svelte-kit', 'build/', 'dist/'] }, ); From 3f5f000f248a1fbae6e5aa9976401eb0c1f716e7 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 6 Aug 2026 13:00:15 -0700 Subject: [PATCH 14/34] feat: upgrade to sveltekit 3, vite 8, and typescript 7 --- .github/workflows/update_deps.mjs | 22 +++++--- template_builder/templates/base/package.json | 48 ++++++++--------- template_builder/templates/base/src/app.d.ts | 6 +-- .../templates/base/svelte.config.js | 12 ----- template_builder/templates/base/tsconfig.json | 17 +----- .../templates/base/vite.config.ts | 12 ++++- .../extras/common/src/{Sidecar}common.ts | 13 ----- .../extras/common/{Sidecar}package.json | 10 ---- .../extras/worker/src/{Sidecar}worker.ts | 53 ------------------- .../extras/worker/{Sidecar,Npm}package.json | 18 ------- .../extras/worker/{Sidecar}.gitignore | 2 - .../extras/worker/{Sidecar}package.json | 18 ------- .../extras/worker/{Sidecar}tsconfig.json | 19 ------- .../extras/worker/{Sidecar}wrangler.jsonc | 23 -------- .../extras/{D1|Sqlite|Turso}package.json | 12 ++--- .../templates/extras/{D1}package.json | 10 +--- .../extras/{Edge,D1,Sidecar}wrangler.jsonc | 31 ----------- .../templates/extras/{Edge,D1}wrangler.jsonc | 2 +- .../extras/{Edge,Sidecar}wrangler.jsonc | 23 -------- .../templates/extras/{Edge}package.json | 12 ++--- .../templates/extras/{Edge}wrangler.jsonc | 2 +- .../extras/{Sidecar,Edge}package.json | 5 -- .../extras/{Sidecar,Npm|Bun}package.json | 3 -- .../extras/{Sidecar,Npm}package.json | 5 -- .../extras/{Sidecar,Pnpm}pnpm-workspace.yaml | 4 -- .../templates/extras/{Sidecar}.npmrc | 1 - .../templates/extras/{Sidecar}.prettierignore | 1 - .../templates/extras/{Sidecar}package.json | 5 -- .../templates/extras/{Sqlite}package.json | 9 +--- .../templates/extras/{Tailwind4}package.json | 4 +- .../templates/extras/{Turso}package.json | 12 ++--- 31 files changed, 67 insertions(+), 347 deletions(-) delete mode 100644 template_builder/templates/base/svelte.config.js delete mode 100644 template_builder/templates/extras/common/src/{Sidecar}common.ts delete mode 100644 template_builder/templates/extras/common/{Sidecar}package.json delete mode 100644 template_builder/templates/extras/worker/src/{Sidecar}worker.ts delete mode 100644 template_builder/templates/extras/worker/{Sidecar,Npm}package.json delete mode 100644 template_builder/templates/extras/worker/{Sidecar}.gitignore delete mode 100644 template_builder/templates/extras/worker/{Sidecar}package.json delete mode 100644 template_builder/templates/extras/worker/{Sidecar}tsconfig.json delete mode 100644 template_builder/templates/extras/worker/{Sidecar}wrangler.jsonc delete mode 100644 template_builder/templates/extras/{Edge,D1,Sidecar}wrangler.jsonc delete mode 100644 template_builder/templates/extras/{Edge,Sidecar}wrangler.jsonc delete mode 100644 template_builder/templates/extras/{Sidecar,Edge}package.json delete mode 100644 template_builder/templates/extras/{Sidecar,Npm|Bun}package.json delete mode 100644 template_builder/templates/extras/{Sidecar,Npm}package.json delete mode 100644 template_builder/templates/extras/{Sidecar,Pnpm}pnpm-workspace.yaml delete mode 100644 template_builder/templates/extras/{Sidecar}.npmrc delete mode 100644 template_builder/templates/extras/{Sidecar}.prettierignore delete mode 100644 template_builder/templates/extras/{Sidecar}package.json diff --git a/.github/workflows/update_deps.mjs b/.github/workflows/update_deps.mjs index 8dcb5fc8..f652aca6 100644 --- a/.github/workflows/update_deps.mjs +++ b/.github/workflows/update_deps.mjs @@ -22,27 +22,33 @@ export async function get_updates() { async function process_dependencies(pkg, key) { if (!pkg[key]) return []; let dirty = []; - for (const [name, currentVersion] of Object.entries(pkg[key])) { - if (currentVersion === null) continue; + for (const [name, current_version] of Object.entries(pkg[key])) { + if (current_version === null) continue; if (IGNORE_DEPS.includes(name)) continue; let tag = 'latest'; - if (currentVersion.includes('-next')) { + if (current_version.includes('-next')) { tag = 'next'; } - if (name === 'tailwindcss' && currentVersion[1] === '3') { + if (name === 'tailwindcss' && current_version[1] === '3') { tag = '3'; } - let prefix = currentVersion[0]; + let prefix = current_version[0]; if (prefix !== '^' && prefix !== '~') { prefix = ''; } - let latest = await latest_version(name, tag); + let package_name = name; + // handle npm:typescript + if (current_version.startsWith('npm:')) { + package_name = current_version.substring(4, current_version.lastIndexOf('@')); + prefix = current_version.substring(0, current_version.lastIndexOf('@') + 2); + } + let latest = await latest_version(package_name, tag); if (!latest) continue; latest = prefix + latest; - if (latest !== currentVersion) { - dirty.push([name, currentVersion, latest]); + if (latest !== current_version) { + dirty.push([name, current_version, latest]); pkg[key][name] = latest; } } diff --git a/template_builder/templates/base/package.json b/template_builder/templates/base/package.json index df55ea5f..ac0f082a 100644 --- a/template_builder/templates/base/package.json +++ b/template_builder/templates/base/package.json @@ -6,35 +6,31 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "lint": "svelte-kit sync && eslint --max-warnings 0 --fix . && svelte-check" + "lint": "svelte-kit sync && eslint --max-warnings 0 --fix .", + "fmt": "oxfmt", + "check": "svelte-kit sync && svelte-check --incremental --tsgo" + }, + "imports": { + "#lib/*": "./src/lib/*" }, "dependencies": {}, "devDependencies": { - "@eslint/js": "^9.38.0", - "@sveltejs/adapter-auto": "^7.0.0", - "@sveltejs/kit": "^2.48.3", - "@sveltejs/vite-plugin-svelte": "^6.2.1", - "autoprefixer": "^10.4.21", - "eslint": "^9.38.0", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "eslint-plugin-svelte": "^3.12.5", - "globals": "^16.4.0", - "postcss": "^8.5.6", + "@eslint/js": "^10.0.1", + "@sveltejs/adapter-auto": "^8.0.0-next.2", + "@sveltejs/kit": "^3.0.0-next.14", + "@typescript/native": "npm:typescript@^7.0.2", + "autoprefixer": "^10.5.4", + "eslint": "^10.8.0", + "eslint-plugin-svelte": "^3.22.0", + "globals": "^17.9.0", + "oxfmt": "^0.62.0", + "postcss": "^8.5.26", "postcss-load-config": "^6.0.1", - "prettier": "^3.6.2", - "prettier-plugin-svelte": "^3.4.0", - "prettier-plugin-tailwindcss": "^0.7.1", - "svelte": "^5.43.0", - "svelte-check": "^4.3.3", - "tailwindcss": "^3.4.18", - "typescript": "~5.9.3", - "typescript-eslint": "^8.46.2", - "vite": "^7.1.12" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "esbuild" - ] + "svelte": "^5.56.8", + "svelte-check": "^4.7.4", + "tailwindcss": "^3.4.19", + "typescript": "npm:@typescript/typescript6@^6.0.2", + "typescript-eslint": "^8.66.0", + "vite": "^8.2.1" } } diff --git a/template_builder/templates/base/src/app.d.ts b/template_builder/templates/base/src/app.d.ts index 7dea72dc..8ea2d3dc 100644 --- a/template_builder/templates/base/src/app.d.ts +++ b/template_builder/templates/base/src/app.d.ts @@ -1,10 +1,6 @@ declare global { namespace App { - interface Platform { - env: Cloudflare.Env; - context: ExecutionContext; - } - + // interface Platform {} // interface Locals {} // interface Error {} // interface PageData {} diff --git a/template_builder/templates/base/svelte.config.js b/template_builder/templates/base/svelte.config.js deleted file mode 100644 index c08b6ced..00000000 --- a/template_builder/templates/base/svelte.config.js +++ /dev/null @@ -1,12 +0,0 @@ -import adapter from '@sveltejs/adapter-auto'; -import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; - -/** @type {import('@sveltejs/kit').Config} */ -const config = { - preprocess: [vitePreprocess()], - kit: { - adapter: adapter(), - }, -}; - -export default config; diff --git a/template_builder/templates/base/tsconfig.json b/template_builder/templates/base/tsconfig.json index ba70898a..00ef9b61 100644 --- a/template_builder/templates/base/tsconfig.json +++ b/template_builder/templates/base/tsconfig.json @@ -1,17 +1,4 @@ { - "extends": "./.svelte-kit/tsconfig.json", - "compilerOptions": { - "module": "esnext", - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "allowSyntheticDefaultImports": true, - "noUncheckedIndexedAccess": true, - "moduleResolution": "bundler" - } + "extends": "$app/tsconfig", + "include": ["src"] } diff --git a/template_builder/templates/base/vite.config.ts b/template_builder/templates/base/vite.config.ts index fce9e870..c217de8e 100644 --- a/template_builder/templates/base/vite.config.ts +++ b/template_builder/templates/base/vite.config.ts @@ -1,6 +1,16 @@ +import adapter from '@sveltejs/adapter-auto'; import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [sveltekit()], + plugins: [sveltekit({ + adapter: adapter(), + experimental: { + remoteFunctions: true, + }, + compilerOptions: { + async: true, + runes: ({ filename }) => filename.split(/[/\\]/).includes('node_modules') ? undefined : true, + }, + })], }); diff --git a/template_builder/templates/extras/common/src/{Sidecar}common.ts b/template_builder/templates/extras/common/src/{Sidecar}common.ts deleted file mode 100644 index d654011d..00000000 --- a/template_builder/templates/extras/common/src/{Sidecar}common.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { z } from 'zod'; - -export const clientToServerSchema = z.object({ - type: z.literal('broadcast'), - payload: z.string(), -}); - -export type ClientToServer = z.infer; - -export type ServerToClient = { - type: 'message'; - payload: string; -}; diff --git a/template_builder/templates/extras/common/{Sidecar}package.json b/template_builder/templates/extras/common/{Sidecar}package.json deleted file mode 100644 index e5930c5f..00000000 --- a/template_builder/templates/extras/common/{Sidecar}package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "common", - "version": "0.0.0", - "private": true, - "types": "./src/common.ts", - "module": "./src/common.ts", - "dependencies": { - "zod": "^4.1.12" - } -} diff --git a/template_builder/templates/extras/worker/src/{Sidecar}worker.ts b/template_builder/templates/extras/worker/src/{Sidecar}worker.ts deleted file mode 100644 index 3a72ef92..00000000 --- a/template_builder/templates/extras/worker/src/{Sidecar}worker.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { DurableObject } from 'cloudflare:workers'; -import { Hono } from 'hono'; -import { type ServerToClient, clientToServerSchema } from 'common'; - -export class SocketObject extends DurableObject { - constructor(ctx: DurableObjectState, env: Env) { - super(ctx, env); - } - - webSocketMessage( - _ws: WebSocket, - message: string | ArrayBuffer, - ): void | Promise { - if (typeof message !== 'string') return; - const parsed = clientToServerSchema.safeParse(JSON.parse(message)); - if (!parsed.success) return; - const { type, payload } = parsed.data; - if (type === 'broadcast') { - const message = JSON.stringify({ - type: 'message', - payload, - } as ServerToClient); - for (const ws of this.ctx.getWebSockets()) { - ws.send(message); - } - } - } - - async fetch(_req: Request): Promise { - const { 0: client, 1: server } = new WebSocketPair(); - - this.ctx.acceptWebSocket(server); - return new Response(null, { - status: 101, - webSocket: client, - }); - } -} - -const app = new Hono<{ Bindings: Env }>(); - -app.get('/ws/:room', (c) => { - const upgrade = c.req.header('Upgrade'); - if (upgrade !== 'websocket') { - c.status(426); - return c.body('WebSocket connection required'); - } - const id = c.env.SOCKET_OBJECT.idFromName(c.req.param('room')); - const socket = c.env.SOCKET_OBJECT.get(id); - return socket.fetch(c.req.raw); -}); - -export default app; diff --git a/template_builder/templates/extras/worker/{Sidecar,Npm}package.json b/template_builder/templates/extras/worker/{Sidecar,Npm}package.json deleted file mode 100644 index 91f89274..00000000 --- a/template_builder/templates/extras/worker/{Sidecar,Npm}package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "worker", - "version": "0.0.0", - "private": true, - "scripts": { - "dev": "wrangler dev", - "deploy": "wrangler deploy", - "typegen": "wrangler types" - }, - "dependencies": { - "common": "^0.0.0", - "hono": "^4.10.4" - }, - "devDependencies": { - "typescript": "^5.9.3", - "wrangler": "^4.45.2" - } -} diff --git a/template_builder/templates/extras/worker/{Sidecar}.gitignore b/template_builder/templates/extras/worker/{Sidecar}.gitignore deleted file mode 100644 index 6bf8e87d..00000000 --- a/template_builder/templates/extras/worker/{Sidecar}.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.dev.vars -.wrangler/ diff --git a/template_builder/templates/extras/worker/{Sidecar}package.json b/template_builder/templates/extras/worker/{Sidecar}package.json deleted file mode 100644 index 0aaa7180..00000000 --- a/template_builder/templates/extras/worker/{Sidecar}package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "worker", - "version": "0.0.0", - "private": true, - "scripts": { - "dev": "wrangler dev", - "deploy": "wrangler deploy", - "typegen": "wrangler types" - }, - "dependencies": { - "common": "workspace:*", - "hono": "^4.10.4" - }, - "devDependencies": { - "typescript": "^5.9.3", - "wrangler": "^4.45.2" - } -} diff --git a/template_builder/templates/extras/worker/{Sidecar}tsconfig.json b/template_builder/templates/extras/worker/{Sidecar}tsconfig.json deleted file mode 100644 index 33b610d1..00000000 --- a/template_builder/templates/extras/worker/{Sidecar}tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "target": "es2021", - "lib": ["es2021"], - "moduleResolution": "node", - "module": "es2022", - "allowJs": true, - "checkJs": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "allowSyntheticDefaultImports": true, - "noUncheckedIndexedAccess": true, - "noEmit": true, - "isolatedModules": true - } -} diff --git a/template_builder/templates/extras/worker/{Sidecar}wrangler.jsonc b/template_builder/templates/extras/worker/{Sidecar}wrangler.jsonc deleted file mode 100644 index b47527c6..00000000 --- a/template_builder/templates/extras/worker/{Sidecar}wrangler.jsonc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "node_modules/wrangler/config-schema.json", - "name": "__o7__name__-worker", - "main": "src/worker.ts", - "compatibility_date": "2025-10-14", - "durable_objects": { - "bindings": [ - { - "name": "SOCKET_OBJECT", - "class_name": "SocketObject" - } - ] - }, - "migrations": [ - { - "tag": "v1", - "new_sqlite_classes": ["SocketObject"] - } - ], - "observability": { - "enabled": true - } -} diff --git a/template_builder/templates/extras/{D1|Sqlite|Turso}package.json b/template_builder/templates/extras/{D1|Sqlite|Turso}package.json index 86ad5750..b43c9983 100644 --- a/template_builder/templates/extras/{D1|Sqlite|Turso}package.json +++ b/template_builder/templates/extras/{D1|Sqlite|Turso}package.json @@ -1,15 +1,9 @@ { "dependencies": { - "kysely": "^0.28.8" + "kysely": "^0.29.4" }, "devDependencies": { - "prisma-kysely": "^2.2.1", - "prisma": "^6.18.0" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "@prisma/engines", - "prisma" - ] + "prisma-kysely": "^3.1.1", + "prisma": "^7.9.1" } } diff --git a/template_builder/templates/extras/{D1}package.json b/template_builder/templates/extras/{D1}package.json index 3fc3bf2c..8ca584ea 100644 --- a/template_builder/templates/extras/{D1}package.json +++ b/template_builder/templates/extras/{D1}package.json @@ -7,13 +7,7 @@ "kysely-d1": "^0.4.0" }, "devDependencies": { - "dotenv": "^17.2.3", - "better-sqlite3": "^12.4.1", - "@types/better-sqlite3": "^7.6.13" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "better-sqlite3" - ] + "better-sqlite3": "^13.0.3", + "@types/better-sqlite3": "^9.6.0" } } diff --git a/template_builder/templates/extras/{Edge,D1,Sidecar}wrangler.jsonc b/template_builder/templates/extras/{Edge,D1,Sidecar}wrangler.jsonc deleted file mode 100644 index 2dc1d21f..00000000 --- a/template_builder/templates/extras/{Edge,D1,Sidecar}wrangler.jsonc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "$schema": "node_modules/wrangler/config-schema.json", - "name": "__o7__name__", - "main": "./.svelte-kit/cloudflare/_worker.js", - "compatibility_date": "2025-10-14", - "compatibility_flags": ["nodejs_als"], - "observability": { - "enabled": true - }, - "assets": { - "binding": "ASSETS", - "directory": ".svelte-kit/cloudflare" - }, - "d1_databases": [ - /* Run `pnpm wrangler d1 create ` before deploying! */ - { - "binding": "DB", - "database_name": "", - "database_id": "" - } - ], - "durable_objects": { - "bindings": [ - { - "script_name": "__o7__name__-worker", - "class_name": "SocketObject", - "name": "SOCKET_OBJECT" - } - ] - } -} diff --git a/template_builder/templates/extras/{Edge,D1}wrangler.jsonc b/template_builder/templates/extras/{Edge,D1}wrangler.jsonc index 5ea33740..84343ace 100644 --- a/template_builder/templates/extras/{Edge,D1}wrangler.jsonc +++ b/template_builder/templates/extras/{Edge,D1}wrangler.jsonc @@ -2,7 +2,7 @@ "$schema": "node_modules/wrangler/config-schema.json", "name": "__o7__name__", "main": "./.svelte-kit/cloudflare/_worker.js", - "compatibility_date": "2025-10-14", + "compatibility_date": "2026-08-04", "compatibility_flags": ["nodejs_als"], "observability": { "enabled": true diff --git a/template_builder/templates/extras/{Edge,Sidecar}wrangler.jsonc b/template_builder/templates/extras/{Edge,Sidecar}wrangler.jsonc deleted file mode 100644 index 578bd5c8..00000000 --- a/template_builder/templates/extras/{Edge,Sidecar}wrangler.jsonc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "node_modules/wrangler/config-schema.json", - "name": "__o7__name__", - "main": "./.svelte-kit/cloudflare/_worker.js", - "compatibility_date": "2025-10-14", - "compatibility_flags": ["nodejs_als"], - "observability": { - "enabled": true - }, - "assets": { - "binding": "ASSETS", - "directory": ".svelte-kit/cloudflare" - }, - "durable_objects": { - "bindings": [ - { - "script_name": "__o7__name__-worker", - "class_name": "SocketObject", - "name": "SOCKET_OBJECT" - } - ] - } -} diff --git a/template_builder/templates/extras/{Edge}package.json b/template_builder/templates/extras/{Edge}package.json index 1abd33b3..ad40c37d 100644 --- a/template_builder/templates/extras/{Edge}package.json +++ b/template_builder/templates/extras/{Edge}package.json @@ -3,15 +3,9 @@ "typegen": "wrangler types src/worker-configuration.d.ts" }, "devDependencies": { - "@sveltejs/adapter-cloudflare": "^7.2.4", - "@types/node": "^24.9.2", - "wrangler": "^4.45.2", + "@sveltejs/adapter-cloudflare": "^8.0.0-next.4", + "@types/node": "^26.1.2", + "wrangler": "^4.119.0", "@sveltejs/adapter-auto": null - }, - "pnpm": { - "onlyBuiltDependencies": [ - "workerd", - "sharp" - ] } } diff --git a/template_builder/templates/extras/{Edge}wrangler.jsonc b/template_builder/templates/extras/{Edge}wrangler.jsonc index 32a2235c..48adf65f 100644 --- a/template_builder/templates/extras/{Edge}wrangler.jsonc +++ b/template_builder/templates/extras/{Edge}wrangler.jsonc @@ -2,7 +2,7 @@ "$schema": "node_modules/wrangler/config-schema.json", "name": "__o7__name__", "main": "./.svelte-kit/cloudflare/_worker.js", - "compatibility_date": "2025-10-14", + "compatibility_date": "2026-08-04", "compatibility_flags": ["nodejs_als"], "observability": { "enabled": true diff --git a/template_builder/templates/extras/{Sidecar,Edge}package.json b/template_builder/templates/extras/{Sidecar,Edge}package.json deleted file mode 100644 index 9654cf34..00000000 --- a/template_builder/templates/extras/{Sidecar,Edge}package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "scripts": { - "typegen": "wrangler types src/worker-configuration.d.ts && wrangler types --cwd worker" - } -} diff --git a/template_builder/templates/extras/{Sidecar,Npm|Bun}package.json b/template_builder/templates/extras/{Sidecar,Npm|Bun}package.json deleted file mode 100644 index 4f983c5e..00000000 --- a/template_builder/templates/extras/{Sidecar,Npm|Bun}package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "workspaces": ["common", "worker", "."] -} diff --git a/template_builder/templates/extras/{Sidecar,Npm}package.json b/template_builder/templates/extras/{Sidecar,Npm}package.json deleted file mode 100644 index a36cdbed..00000000 --- a/template_builder/templates/extras/{Sidecar,Npm}package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "common": "^0.0.0" - } -} diff --git a/template_builder/templates/extras/{Sidecar,Pnpm}pnpm-workspace.yaml b/template_builder/templates/extras/{Sidecar,Pnpm}pnpm-workspace.yaml deleted file mode 100644 index 004af1e8..00000000 --- a/template_builder/templates/extras/{Sidecar,Pnpm}pnpm-workspace.yaml +++ /dev/null @@ -1,4 +0,0 @@ -packages: - - 'common' - - 'worker' - - '.' diff --git a/template_builder/templates/extras/{Sidecar}.npmrc b/template_builder/templates/extras/{Sidecar}.npmrc deleted file mode 100644 index ae90f705..00000000 --- a/template_builder/templates/extras/{Sidecar}.npmrc +++ /dev/null @@ -1 +0,0 @@ -ignore-workspace-root-check=true diff --git a/template_builder/templates/extras/{Sidecar}.prettierignore b/template_builder/templates/extras/{Sidecar}.prettierignore deleted file mode 100644 index 6447d289..00000000 --- a/template_builder/templates/extras/{Sidecar}.prettierignore +++ /dev/null @@ -1 +0,0 @@ -worker/worker-configuration.d.ts diff --git a/template_builder/templates/extras/{Sidecar}package.json b/template_builder/templates/extras/{Sidecar}package.json deleted file mode 100644 index ab1bf77e..00000000 --- a/template_builder/templates/extras/{Sidecar}package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "common": "workspace:*" - } -} diff --git a/template_builder/templates/extras/{Sqlite}package.json b/template_builder/templates/extras/{Sqlite}package.json index eee7d179..b5d54282 100644 --- a/template_builder/templates/extras/{Sqlite}package.json +++ b/template_builder/templates/extras/{Sqlite}package.json @@ -3,14 +3,9 @@ "db:push": "prisma db push" }, "dependencies": { - "better-sqlite3": "^12.4.1" + "better-sqlite3": "^13.0.3" }, "devDependencies": { - "@types/better-sqlite3": "^7.6.13" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "better-sqlite3" - ] + "@types/better-sqlite3": "^9.6.0" } } diff --git a/template_builder/templates/extras/{Tailwind4}package.json b/template_builder/templates/extras/{Tailwind4}package.json index 8b5fb1f8..f7bd1d87 100644 --- a/template_builder/templates/extras/{Tailwind4}package.json +++ b/template_builder/templates/extras/{Tailwind4}package.json @@ -1,9 +1,9 @@ { "devDependencies": { "autoprefixer": null, - "@tailwindcss/vite": "^4.1.16", + "@tailwindcss/vite": "^4.3.3", "postcss": null, "postcss-load-config": null, - "tailwindcss": "^4.1.16" + "tailwindcss": "^4.3.3" } } diff --git a/template_builder/templates/extras/{Turso}package.json b/template_builder/templates/extras/{Turso}package.json index 9be81136..09a0d2b2 100644 --- a/template_builder/templates/extras/{Turso}package.json +++ b/template_builder/templates/extras/{Turso}package.json @@ -4,16 +4,10 @@ }, "dependencies": { "kysely-libsql": "^0.7.1", - "@libsql/client": "^0.15.15" + "@libsql/client": "^0.17.4" }, "devDependencies": { - "dotenv": "^17.2.3", - "better-sqlite3": "^12.4.1", - "@types/better-sqlite3": "^7.6.13" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "better-sqlite3" - ] + "better-sqlite3": "^13.0.3", + "@types/better-sqlite3": "^9.6.0" } } From ef0eeabb3413d6850ab9a9816a29aaddbd73f7a2 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 6 Aug 2026 13:01:54 -0700 Subject: [PATCH 15/34] chore: remove pnpm key from package.json --- README.md | 4 +--- src/utils.rs | 8 -------- template_builder/src/lib.rs | 2 +- template_builder/src/utils.rs | 29 ----------------------------- 4 files changed, 2 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index c58d1822..9304eadb 100644 --- a/README.md +++ b/README.md @@ -41,10 +41,8 @@ Then, open your new app in your favorite IDE and get started! ## Upcoming - [ ] zod -> valibot -- [ ] sveltekit 3 -- [ ] prettier -> oxfmt -- [ ] svelte-check tsgo - [ ] remote functions auth - [ ] auth user + pass option? - [ ] durable object patch - [ ] prisma 7? +- [ ] pnpm-workspace diff --git a/src/utils.rs b/src/utils.rs index c09007be..d373c547 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -86,14 +86,6 @@ pub struct PackageJsonPartial<'a> { #[serde(serialize_with = "sorted_map", skip_serializing_if = "skip_if_empty")] pub dev_dependencies: Option>>, pub package_manager: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub pnpm: Option>, -} - -#[derive(serde::Serialize, Debug)] -#[serde(rename_all = "camelCase")] -pub struct PnpmPackageJson<'a> { - pub only_built_dependencies: Option>, } pub fn skip_if_empty(map: &Option>>) -> bool { diff --git a/template_builder/src/lib.rs b/template_builder/src/lib.rs index 02569292..d491603e 100644 --- a/template_builder/src/lib.rs +++ b/template_builder/src/lib.rs @@ -379,7 +379,7 @@ impl Builder { let (base, extras) = package_jsons; quote! { - use crate::utils::{Feature, PackageJsonPartial, PnpmPackageJson}; + use crate::utils::{Feature, PackageJsonPartial}; use std::collections::{HashSet, HashMap}; #[derive(Debug)] pub struct TemplateFile { diff --git a/template_builder/src/utils.rs b/template_builder/src/utils.rs index 31573f2c..639956b2 100644 --- a/template_builder/src/utils.rs +++ b/template_builder/src/utils.rs @@ -81,41 +81,12 @@ pub struct PackageJsonPartial<'a> { dependencies: Option>>, dev_dependencies: Option>>, workspaces: Option>, - pnpm: Option>, } -#[derive(serde::Deserialize, Debug)] -#[serde(rename_all = "camelCase")] -pub struct PnpmPackageJson<'a> { - #[serde(borrow)] - only_built_dependencies: Option>, -} - -impl ToTokens for PnpmPackageJson<'_> { - fn to_tokens(&self, tokens: &mut TokenStream) { - match &self.only_built_dependencies { - Some(deps) => { - let items: Vec<_> = deps.iter().collect(); - tokens.extend(quote! { PnpmPackageJson { - only_built_dependencies: Some(HashSet::from([#(#items),*])), - } }); - } - None => { - tokens.extend(quote! { PnpmPackageJson { - only_built_dependencies: None, - } }); - } - } - } -} impl ToTokens for PackageJsonPartial<'_> { fn to_tokens(&self, tokens: &mut TokenStream) { let mut pieces = vec![]; pieces.push(quote! { package_manager: None }); - match &self.pnpm { - Some(pnpm) => pieces.push(quote! { pnpm: Some(#pnpm) }), - None => pieces.push(quote! { pnpm: None }), - } match self.name { Some(name) => pieces.push(quote! { name: Some(#name) }), None => pieces.push(quote! { name: None }), From e79d3f0da5711be61f833ebb5d2507cdfbb5dc28 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 6 Aug 2026 14:00:34 -0700 Subject: [PATCH 16/34] vite config, rename config files --- src/create/package_json.rs | 10 +-- src/utils.rs | 21 ----- template_builder/templates/base/.oxfmtrc.json | 8 -- .../templates/base/eslint.config.js | 54 ------------- .../templates/base/eslint.config.ts | 77 +++++++++++++++++++ .../templates/base/oxfmt.config.ts | 16 ++++ template_builder/templates/base/package.json | 6 +- .../{postcss.config.mjs => postcss.config.js} | 0 .../templates/base/vite.config.ts | 23 +++--- .../prisma/{{D1}push.mjs => {D1}push.ts} | 56 +++++++------- .../{{Turso}push.mjs => {Turso}push.ts} | 20 ++--- .../extras/src/lib/auth/{Auth}index.ts | 4 +- .../routes/api/auth/callback/{Auth}+server.ts | 4 +- .../routes/api/auth/login/{Auth}+server.ts | 2 +- .../routes/api/auth/logout/{Auth}+server.ts | 2 +- .../src/{Auth,Sqlite|Turso}hooks.server.ts | 2 +- .../templates/extras/src/{Auth}app.d.ts | 4 +- .../templates/extras/src/{D1}hooks.server.ts | 2 +- .../extras/src/{Edge,Auth,D1,Sidecar}app.d.ts | 6 +- .../extras/src/{Edge,Auth,D1}app.d.ts | 6 +- .../extras/src/{Edge,Auth,Sidecar}app.d.ts | 6 +- .../templates/extras/src/{Edge,Auth}app.d.ts | 6 +- .../extras/src/{Edge,D1,Sidecar}app.d.ts | 2 +- .../templates/extras/src/{Edge,D1}app.d.ts | 2 +- .../extras/src/{Edge,Sidecar}app.d.ts | 2 +- .../templates/extras/src/{Edge}app.d.ts | 2 +- .../extras/{Edge,Tailwind4}vite.config.ts | 21 +++++ .../templates/extras/{Edge}svelte.config.js | 12 --- .../templates/extras/{Edge}vite.config.ts | 19 +++++ ...js => {Tailwind4}DELETE:postcss.config.js} | 0 .../extras/{Tailwind4}vite.config.ts | 16 +++- 31 files changed, 231 insertions(+), 180 deletions(-) delete mode 100644 template_builder/templates/base/.oxfmtrc.json delete mode 100644 template_builder/templates/base/eslint.config.js create mode 100644 template_builder/templates/base/eslint.config.ts create mode 100644 template_builder/templates/base/oxfmt.config.ts rename template_builder/templates/base/{postcss.config.mjs => postcss.config.js} (100%) rename template_builder/templates/extras/prisma/{{D1}push.mjs => {D1}push.ts} (69%) rename template_builder/templates/extras/prisma/{{Turso}push.mjs => {Turso}push.ts} (82%) create mode 100644 template_builder/templates/extras/{Edge,Tailwind4}vite.config.ts delete mode 100644 template_builder/templates/extras/{Edge}svelte.config.js create mode 100644 template_builder/templates/extras/{Edge}vite.config.ts rename template_builder/templates/extras/{{Tailwind4}DELETE:postcss.config.mjs => {Tailwind4}DELETE:postcss.config.js} (100%) diff --git a/src/create/package_json.rs b/src/create/package_json.rs index db27db24..625ef70b 100644 --- a/src/create/package_json.rs +++ b/src/create/package_json.rs @@ -1,5 +1,5 @@ use super::templates; -use crate::{input::UserInput, utils::PackageManager}; +use crate::input::UserInput; use anyhow::{Context, Result}; use serde::Serialize; use serde_json::{ser::PrettyFormatter, Serializer}; @@ -21,14 +21,6 @@ pub fn create_package_json(input: &UserInput) -> Result<()> { package_json.package_manager = input.install_deps.as_ref().and_then(|p| p.version_string()); - if !input - .install_deps - .as_ref() - .is_some_and(|pm| pm.package_manager == PackageManager::Pnpm) - { - package_json.pnpm = None; - } - let target_path = &input.location.path.join("package.json"); let formatter = PrettyFormatter::with_indent(b"\t"); let buf = Vec::new(); diff --git a/src/utils.rs b/src/utils.rs index d373c547..875bad95 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -126,27 +126,6 @@ impl<'a> PackageJsonPartial<'a> { merge_hashmaps(&mut self.scripts, other.scripts); merge_hashmaps(&mut self.dependencies, other.dependencies); merge_hashmaps(&mut self.dev_dependencies, other.dev_dependencies); - - match (&mut self.pnpm, other.pnpm) { - (_, None) => {} - (None, Some(pnpm)) => { - self.pnpm = Some(pnpm); - } - (Some(old), Some(new)) => { - match ( - &mut old.only_built_dependencies, - new.only_built_dependencies, - ) { - (_, None) => {} - (None, Some(new)) => { - old.only_built_dependencies = Some(new); - } - (Some(ref mut old), Some(new)) => { - old.extend(new); - } - } - } - } } } diff --git a/template_builder/templates/base/.oxfmtrc.json b/template_builder/templates/base/.oxfmtrc.json deleted file mode 100644 index f4b6d344..00000000 --- a/template_builder/templates/base/.oxfmtrc.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "singleQuote": true, - "tabWidth": 2, - "useTabs": true, - "sortTailwindcss": true, - "svelte": true, - "ignorePatterns": ["worker-configuration.d.ts"] -} diff --git a/template_builder/templates/base/eslint.config.js b/template_builder/templates/base/eslint.config.js deleted file mode 100644 index 6af13239..00000000 --- a/template_builder/templates/base/eslint.config.js +++ /dev/null @@ -1,54 +0,0 @@ -import globals from 'globals'; -import js from '@eslint/js'; -import svelte from 'eslint-plugin-svelte'; -import ts from 'typescript-eslint'; -import svelteConfig from './svelte.config.js'; - -export default ts.config( - js.configs.recommended, - ...ts.configs.recommended, - ...svelte.configs.recommended, - { - languageOptions: { - globals: { - ...globals.browser, - ...globals.es2017, - }, - }, - linterOptions: { - reportUnusedDisableDirectives: 'off', - }, - }, - { - files: ['**/*.cjs', '**/*.mjs'], - languageOptions: { - globals: { - ...globals.node, - }, - }, - }, - { - files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], - languageOptions: { - parserOptions: { - projectService: true, - extraFileExtensions: ['.svelte'], - parser: ts.parser, - svelteConfig, - }, - }, - }, - { - rules: { - '@typescript-eslint/no-unused-vars': [ - 'warn', - { - argsIgnorePattern: '^_', - caughtErrorsIgnorePattern: '^_', - varsIgnorePattern: '^_', - }, - ], - }, - }, - { ignores: ['**/.svelte-kit', 'build/', 'dist/'] }, -); diff --git a/template_builder/templates/base/eslint.config.ts b/template_builder/templates/base/eslint.config.ts new file mode 100644 index 00000000..1d90c14f --- /dev/null +++ b/template_builder/templates/base/eslint.config.ts @@ -0,0 +1,77 @@ +import globals from 'globals'; +import js from '@eslint/js'; +import svelte from 'eslint-plugin-svelte'; +import { defineConfig } from 'eslint/config'; +import ts from 'typescript-eslint'; + +export default defineConfig( + js.configs.recommended, + ts.configs.recommended, + svelte.configs.recommended, + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.es2017, + }, + }, + }, + { + files: ['./*.{cjs,ts,js}', './prisma/*.ts'], + languageOptions: { + globals: { + ...globals.node, + }, + }, + }, + { + files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], + languageOptions: { + parserOptions: { + projectService: true, + extraFileExtensions: ['.svelte'], + parser: ts.parser, + svelteConfig: { + experimental: { async: true }, + kit: { + experimental: { remoteFunctions: true }, + }, + }, + }, + }, + }, + { + rules: { + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + argsIgnorePattern: '^_', + caughtErrorsIgnorePattern: '^_', + varsIgnorePattern: '^_', + }, + ], + // '@typescript-eslint/naming-convention': [ + // 'error', + // { + // selector: 'variableLike', + // format: ['snake_case'], + // trailingUnderscore: 'allow', + // leadingUnderscore: 'allow', + // }, + // { + // selector: 'variable', + // modifiers: ['destructured'], + // format: null, + // }, + // { + // selector: 'variable', + // modifiers: ['const', 'global'], + // format: ['UPPER_CASE', 'snake_case'], + // trailingUnderscore: 'allow', + // leadingUnderscore: 'allow', + // }, + // ], + }, + }, + { ignores: ['**/.svelte-kit', '.wrangler/', 'build/', 'dist/'] }, +); diff --git a/template_builder/templates/base/oxfmt.config.ts b/template_builder/templates/base/oxfmt.config.ts new file mode 100644 index 00000000..8ad1b370 --- /dev/null +++ b/template_builder/templates/base/oxfmt.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'oxfmt'; + +export default defineConfig({ + singleQuote: true, + tabWidth: 2, + useTabs: true, + sortTailwindcss: true, + svelte: true, + ignorePatterns: ['worker-configuration.d.ts'], + overrides: [ + { + files: ['wrangler.jsonc'], + options: { trailingComma: 'none' }, + }, + ], +}); diff --git a/template_builder/templates/base/package.json b/template_builder/templates/base/package.json index ac0f082a..43d0aaad 100644 --- a/template_builder/templates/base/package.json +++ b/template_builder/templates/base/package.json @@ -6,9 +6,9 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "lint": "svelte-kit sync && eslint --max-warnings 0 --fix .", - "fmt": "oxfmt", - "check": "svelte-kit sync && svelte-check --incremental --tsgo" + "lint": "svelte-kit sync && eslint --max-warnings 0 --flag unstable_native_nodejs_ts_config --fix .", + "check": "svelte-kit sync && svelte-check --incremental --tsgo", + "fmt": "oxfmt ." }, "imports": { "#lib/*": "./src/lib/*" diff --git a/template_builder/templates/base/postcss.config.mjs b/template_builder/templates/base/postcss.config.js similarity index 100% rename from template_builder/templates/base/postcss.config.mjs rename to template_builder/templates/base/postcss.config.js diff --git a/template_builder/templates/base/vite.config.ts b/template_builder/templates/base/vite.config.ts index c217de8e..e40dcb70 100644 --- a/template_builder/templates/base/vite.config.ts +++ b/template_builder/templates/base/vite.config.ts @@ -3,14 +3,17 @@ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [sveltekit({ - adapter: adapter(), - experimental: { - remoteFunctions: true, - }, - compilerOptions: { - async: true, - runes: ({ filename }) => filename.split(/[/\\]/).includes('node_modules') ? undefined : true, - }, - })], + plugins: [ + sveltekit({ + adapter: adapter(), + experimental: { + remoteFunctions: true, + }, + compilerOptions: { + experimental: { async: true }, + runes: ({ filename }) => + filename.split(/[/\\]/).includes('node_modules') ? undefined : true, + }, + }), + ], }); diff --git a/template_builder/templates/extras/prisma/{D1}push.mjs b/template_builder/templates/extras/prisma/{D1}push.ts similarity index 69% rename from template_builder/templates/extras/prisma/{D1}push.mjs rename to template_builder/templates/extras/prisma/{D1}push.ts index d041d91e..0e06d120 100644 --- a/template_builder/templates/extras/prisma/{D1}push.mjs +++ b/template_builder/templates/extras/prisma/{D1}push.ts @@ -1,45 +1,47 @@ import { spawnSync } from 'node:child_process'; import Database from 'better-sqlite3'; import { resolve } from 'node:path'; +import { loadEnvFile } from 'node:process'; import { unlinkSync, writeFileSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; -import 'dotenv/config'; -const isLocal = process.argv.includes('--local'); -const localFlag = isLocal ? '--local' : '--remote'; +loadEnvFile(); -let databaseName; +const is_local = process.argv.includes('--local'); +const local_flag = is_local ? '--local' : '--remote'; -if (isLocal) { - databaseName = 'DB'; +let database_name: string; + +if (is_local) { + database_name = 'DB'; } else { - databaseName = process.env.DATABASE_NAME; - if (!databaseName) { + if (!process.env.DATABASE_NAME) { console.error('DATABASE_NAME not set (must be the name of a D1 database)'); process.exit(1); } + database_name = process.env.DATABASE_NAME; } const dirname = resolve(fileURLToPath(import.meta.url), '..'); -const tempDb = resolve(dirname, './temp.db'); -const migrationFile = resolve(dirname, './temp.sql'); +const temp_db = resolve(dirname, './temp.db'); +const migration_file = resolve(dirname, './temp.sql'); const schema = resolve(dirname, './schema.prisma'); try { - unlinkSync(tempDb); + unlinkSync(temp_db); } catch (_) { /* ignore */ } // 1. Pull current schema -const currentRes = JSON.parse( +const current_res = JSON.parse( spawnSync( 'npx', [ 'wrangler', 'd1', 'execute', - databaseName, - localFlag, + database_name, + local_flag, '--command', "SELECT * FROM sqlite_schema WHERE name != '_cf_KV' AND name != 'sqlite_sequence'", '--json', @@ -47,15 +49,15 @@ const currentRes = JSON.parse( { encoding: 'utf-8' }, ).stdout, ); -if (currentRes.error) { - console.error(currentRes.error); +if (current_res.error) { + console.error(current_res.error); console.error('Have you put your database ID in wrangler.toml?'); process.exit(1); } -const current = currentRes[0].results; +const current = current_res[0].results; // 2. create dummy db with that schema -const db = new Database(tempDb); +const db = new Database(temp_db); for (const item of current) { if (item.sql && item.sql !== 'null') { db.prepare(item.sql).run(); @@ -73,7 +75,7 @@ try { 'migrate', 'diff', '--from-url', - `file:${tempDb}`, + `file:${temp_db}`, '--to-schema-datamodel', schema, '--script', @@ -81,7 +83,7 @@ try { { encoding: 'utf-8' }, ); } finally { - unlinkSync(tempDb); + unlinkSync(temp_db); } if (migration.status !== 0) { console.error('Prisma error:'); @@ -93,13 +95,13 @@ if (migration.stdout.includes('-- This is an empty migration.')) { process.exit(0); } -const migrationSql = migration.stdout +const migration_sql = migration.stdout .replace(/^PRAGMA foreign_keys=OFF;/gm, 'PRAGMA defer_foreign_keys=true;') .replace(/^PRAGMA foreign_keys=ON;/gm, 'PRAGMA defer_foreign_keys=false;') .replace(/^PRAGMA foreign_key_check;/gm, ''); -console.log(migrationSql); +console.log(migration_sql); -writeFileSync(migrationFile, migrationSql); +writeFileSync(migration_file, migration_sql); // 4. apply migration on actual db let res; @@ -110,15 +112,15 @@ try { 'wrangler', 'd1', 'execute', - databaseName, - localFlag, + database_name, + local_flag, '--file', - migrationFile, + migration_file, ], { stdio: 'inherit' }, ); } finally { - unlinkSync(migrationFile); + unlinkSync(migration_file); } if (res.status !== 0) { diff --git a/template_builder/templates/extras/prisma/{Turso}push.mjs b/template_builder/templates/extras/prisma/{Turso}push.ts similarity index 82% rename from template_builder/templates/extras/prisma/{Turso}push.mjs rename to template_builder/templates/extras/prisma/{Turso}push.ts index 5d5c23ed..3e18b24c 100644 --- a/template_builder/templates/extras/prisma/{Turso}push.mjs +++ b/template_builder/templates/extras/prisma/{Turso}push.ts @@ -1,10 +1,12 @@ import { spawnSync } from 'node:child_process'; import Database from 'better-sqlite3'; import { resolve } from 'node:path'; +import { loadEnvFile } from 'node:process'; import { unlinkSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; import { createClient } from '@libsql/client'; -import 'dotenv/config'; + +loadEnvFile(); if (!process.env.TURSO_URL) { throw new Error('TURSO_URL not set'); @@ -17,10 +19,10 @@ const client = createClient({ const dirname = resolve(fileURLToPath(import.meta.url), '..'); -const tempDb = resolve(dirname, './temp.db'); +const temp_db = resolve(dirname, './temp.db'); const schema = resolve(dirname, './schema.prisma'); try { - unlinkSync(tempDb); + unlinkSync(temp_db); } catch (_) { /* ignore */ } @@ -31,7 +33,7 @@ const current = await client.execute( ); // 2. create dummy db with that schema -const db = new Database(tempDb); +const db = new Database(temp_db); for (const item of current.rows) { if (item.sql && item.sql !== 'null') { db.prepare(item.sql).run(); @@ -49,7 +51,7 @@ try { 'migrate', 'diff', '--from-url', - `file:${tempDb}`, + `file:${temp_db}`, '--to-schema-datamodel', schema, '--script', @@ -57,7 +59,7 @@ try { { encoding: 'utf-8' }, ); } finally { - unlinkSync(tempDb); + unlinkSync(temp_db); } if (migration.status !== 0) { console.error('Prisma error:'); @@ -69,13 +71,13 @@ if (migration.stdout.includes('-- This is an empty migration.')) { process.exit(0); } -const migrationSql = migration.stdout; +const migration_sql = migration.stdout; -console.log(migrationSql); +console.log(migration_sql); // 4. apply migration on actual db try { - await client.executeMultiple(migrationSql); + await client.executeMultiple(migration_sql); } catch (e) { console.error('Migration failed', e); process.exit(1); diff --git a/template_builder/templates/extras/src/lib/auth/{Auth}index.ts b/template_builder/templates/extras/src/lib/auth/{Auth}index.ts index b9fafeda..d3040291 100644 --- a/template_builder/templates/extras/src/lib/auth/{Auth}index.ts +++ b/template_builder/templates/extras/src/lib/auth/{Auth}index.ts @@ -6,9 +6,9 @@ import { import { sha256 } from '@oslojs/crypto/sha2'; import { generateRandomString, type RandomReader } from '@oslojs/crypto/random'; import type { Selectable } from 'kysely'; -import { db } from '$lib/db'; +import { db } from '#lib/db'; import { CLIENT_ID, CLIENT_SECRET } from '$env/static/private'; -import type { DB } from '$lib/db/schema'; +import type { DB } from '#lib/db/schema'; const ONE_DAY = 1000 * 60 * 60 * 24; diff --git a/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts b/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts index 642d247b..8c637ded 100644 --- a/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts +++ b/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts @@ -1,5 +1,5 @@ import { OAuth2Tokens } from 'arctic'; -import { db } from '$lib/db'; +import { db } from '#lib/db'; import { CLIENT_ID } from '$env/static/private'; import { error, redirect } from '@sveltejs/kit'; import { resolve } from '$app/paths'; @@ -8,7 +8,7 @@ import { generateId, generateSessionToken, twitch, -} from '$lib/auth'; +} from '#lib/auth'; import { dev } from '$app/environment'; export const GET = async (event) => { diff --git a/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts b/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts index 42258b5a..06cca671 100644 --- a/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts +++ b/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts @@ -1,6 +1,6 @@ import { redirect } from '@sveltejs/kit'; import { generateState } from 'arctic'; -import { twitch } from '$lib/auth'; +import { twitch } from '#lib/auth'; import { dev } from '$app/environment'; export const GET = async (event) => { diff --git a/template_builder/templates/extras/src/routes/api/auth/logout/{Auth}+server.ts b/template_builder/templates/extras/src/routes/api/auth/logout/{Auth}+server.ts index 1f856e73..cf4da4f6 100644 --- a/template_builder/templates/extras/src/routes/api/auth/logout/{Auth}+server.ts +++ b/template_builder/templates/extras/src/routes/api/auth/logout/{Auth}+server.ts @@ -1,4 +1,4 @@ -import { invalidateSession } from '$lib/auth'; +import { invalidateSession } from '#lib/auth'; import { redirect } from '@sveltejs/kit'; import { resolve } from '$app/paths'; diff --git a/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts b/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts index 551bfba1..fa51cf24 100644 --- a/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts +++ b/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts @@ -1,4 +1,4 @@ -import { initAuth, validateSessionToken } from '$lib/auth'; +import { initAuth, validateSessionToken } from '#lib/auth'; import { dev } from '$app/environment'; export async function handle({ event, resolve }) { diff --git a/template_builder/templates/extras/src/{Auth}app.d.ts b/template_builder/templates/extras/src/{Auth}app.d.ts index 059a0372..d574387b 100644 --- a/template_builder/templates/extras/src/{Auth}app.d.ts +++ b/template_builder/templates/extras/src/{Auth}app.d.ts @@ -3,8 +3,8 @@ declare global { // interface Platform {} interface Locals { - user: import('$lib/auth').User | null; - session: import('$lib/auth').Session | null; + user: import('#lib/auth').User | null; + session: import('#lib/auth').Session | null; } // interface Error {} diff --git a/template_builder/templates/extras/src/{D1}hooks.server.ts b/template_builder/templates/extras/src/{D1}hooks.server.ts index 42723e25..4283a90e 100644 --- a/template_builder/templates/extras/src/{D1}hooks.server.ts +++ b/template_builder/templates/extras/src/{D1}hooks.server.ts @@ -1,4 +1,4 @@ -import { initDb } from '$lib/db'; +import { initDb } from '#lib/db'; export async function handle({ event, resolve }) { const db = event.platform!.env.DB; diff --git a/template_builder/templates/extras/src/{Edge,Auth,D1,Sidecar}app.d.ts b/template_builder/templates/extras/src/{Edge,Auth,D1,Sidecar}app.d.ts index 77dcfd41..de849407 100644 --- a/template_builder/templates/extras/src/{Edge,Auth,D1,Sidecar}app.d.ts +++ b/template_builder/templates/extras/src/{Edge,Auth,D1,Sidecar}app.d.ts @@ -6,12 +6,12 @@ declare global { import('../worker/src/worker').SocketObject >; }; - context: ExecutionContext; + ctx: ExecutionContext; } interface Locals { - user: import('$lib/auth').User | null; - session: import('$lib/auth').Session | null; + user: import('#lib/auth').User | null; + session: import('#lib/auth').Session | null; } // interface Error {} diff --git a/template_builder/templates/extras/src/{Edge,Auth,D1}app.d.ts b/template_builder/templates/extras/src/{Edge,Auth,D1}app.d.ts index ed0d88f3..7d15f326 100644 --- a/template_builder/templates/extras/src/{Edge,Auth,D1}app.d.ts +++ b/template_builder/templates/extras/src/{Edge,Auth,D1}app.d.ts @@ -2,12 +2,12 @@ declare global { namespace App { interface Platform { env: Cloudflare.Env; - context: ExecutionContext; + ctx: ExecutionContext; } interface Locals { - user: import('$lib/auth').User | null; - session: import('$lib/auth').Session | null; + user: import('#lib/auth').User | null; + session: import('#lib/auth').Session | null; } // interface Error {} diff --git a/template_builder/templates/extras/src/{Edge,Auth,Sidecar}app.d.ts b/template_builder/templates/extras/src/{Edge,Auth,Sidecar}app.d.ts index 77dcfd41..de849407 100644 --- a/template_builder/templates/extras/src/{Edge,Auth,Sidecar}app.d.ts +++ b/template_builder/templates/extras/src/{Edge,Auth,Sidecar}app.d.ts @@ -6,12 +6,12 @@ declare global { import('../worker/src/worker').SocketObject >; }; - context: ExecutionContext; + ctx: ExecutionContext; } interface Locals { - user: import('$lib/auth').User | null; - session: import('$lib/auth').Session | null; + user: import('#lib/auth').User | null; + session: import('#lib/auth').Session | null; } // interface Error {} diff --git a/template_builder/templates/extras/src/{Edge,Auth}app.d.ts b/template_builder/templates/extras/src/{Edge,Auth}app.d.ts index ed0d88f3..7d15f326 100644 --- a/template_builder/templates/extras/src/{Edge,Auth}app.d.ts +++ b/template_builder/templates/extras/src/{Edge,Auth}app.d.ts @@ -2,12 +2,12 @@ declare global { namespace App { interface Platform { env: Cloudflare.Env; - context: ExecutionContext; + ctx: ExecutionContext; } interface Locals { - user: import('$lib/auth').User | null; - session: import('$lib/auth').Session | null; + user: import('#lib/auth').User | null; + session: import('#lib/auth').Session | null; } // interface Error {} diff --git a/template_builder/templates/extras/src/{Edge,D1,Sidecar}app.d.ts b/template_builder/templates/extras/src/{Edge,D1,Sidecar}app.d.ts index 1b864097..62c7c28e 100644 --- a/template_builder/templates/extras/src/{Edge,D1,Sidecar}app.d.ts +++ b/template_builder/templates/extras/src/{Edge,D1,Sidecar}app.d.ts @@ -6,7 +6,7 @@ declare global { import('../worker/src/worker').SocketObject >; }; - context: ExecutionContext; + ctx: ExecutionContext; } // interface Locals {} diff --git a/template_builder/templates/extras/src/{Edge,D1}app.d.ts b/template_builder/templates/extras/src/{Edge,D1}app.d.ts index 7dea72dc..d5cb300f 100644 --- a/template_builder/templates/extras/src/{Edge,D1}app.d.ts +++ b/template_builder/templates/extras/src/{Edge,D1}app.d.ts @@ -2,7 +2,7 @@ declare global { namespace App { interface Platform { env: Cloudflare.Env; - context: ExecutionContext; + ctx: ExecutionContext; } // interface Locals {} diff --git a/template_builder/templates/extras/src/{Edge,Sidecar}app.d.ts b/template_builder/templates/extras/src/{Edge,Sidecar}app.d.ts index 1b864097..62c7c28e 100644 --- a/template_builder/templates/extras/src/{Edge,Sidecar}app.d.ts +++ b/template_builder/templates/extras/src/{Edge,Sidecar}app.d.ts @@ -6,7 +6,7 @@ declare global { import('../worker/src/worker').SocketObject >; }; - context: ExecutionContext; + ctx: ExecutionContext; } // interface Locals {} diff --git a/template_builder/templates/extras/src/{Edge}app.d.ts b/template_builder/templates/extras/src/{Edge}app.d.ts index 7dea72dc..d5cb300f 100644 --- a/template_builder/templates/extras/src/{Edge}app.d.ts +++ b/template_builder/templates/extras/src/{Edge}app.d.ts @@ -2,7 +2,7 @@ declare global { namespace App { interface Platform { env: Cloudflare.Env; - context: ExecutionContext; + ctx: ExecutionContext; } // interface Locals {} diff --git a/template_builder/templates/extras/{Edge,Tailwind4}vite.config.ts b/template_builder/templates/extras/{Edge,Tailwind4}vite.config.ts new file mode 100644 index 00000000..a57f5559 --- /dev/null +++ b/template_builder/templates/extras/{Edge,Tailwind4}vite.config.ts @@ -0,0 +1,21 @@ +import adapter from '@sveltejs/adapter-cloudflare'; +import { sveltekit } from '@sveltejs/kit/vite'; +import tailwindcss from '@tailwindcss/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [ + sveltekit({ + adapter: adapter(), + experimental: { + remoteFunctions: true, + }, + compilerOptions: { + experimental: { async: true }, + runes: ({ filename }) => + filename.split(/[/\\]/).includes('node_modules') ? undefined : true, + }, + }), + tailwindcss(), + ], +}); diff --git a/template_builder/templates/extras/{Edge}svelte.config.js b/template_builder/templates/extras/{Edge}svelte.config.js deleted file mode 100644 index eb310624..00000000 --- a/template_builder/templates/extras/{Edge}svelte.config.js +++ /dev/null @@ -1,12 +0,0 @@ -import adapter from '@sveltejs/adapter-cloudflare'; -import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; - -/** @type {import('@sveltejs/kit').Config} */ -const config = { - preprocess: [vitePreprocess()], - kit: { - adapter: adapter(), - }, -}; - -export default config; diff --git a/template_builder/templates/extras/{Edge}vite.config.ts b/template_builder/templates/extras/{Edge}vite.config.ts new file mode 100644 index 00000000..7d727161 --- /dev/null +++ b/template_builder/templates/extras/{Edge}vite.config.ts @@ -0,0 +1,19 @@ +import adapter from '@sveltejs/adapter-cloudflare'; +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [ + sveltekit({ + adapter: adapter(), + experimental: { + remoteFunctions: true, + }, + compilerOptions: { + experimental: { async: true }, + runes: ({ filename }) => + filename.split(/[/\\]/).includes('node_modules') ? undefined : true, + }, + }), + ], +}); diff --git a/template_builder/templates/extras/{Tailwind4}DELETE:postcss.config.mjs b/template_builder/templates/extras/{Tailwind4}DELETE:postcss.config.js similarity index 100% rename from template_builder/templates/extras/{Tailwind4}DELETE:postcss.config.mjs rename to template_builder/templates/extras/{Tailwind4}DELETE:postcss.config.js diff --git a/template_builder/templates/extras/{Tailwind4}vite.config.ts b/template_builder/templates/extras/{Tailwind4}vite.config.ts index e79dfe77..adc05def 100644 --- a/template_builder/templates/extras/{Tailwind4}vite.config.ts +++ b/template_builder/templates/extras/{Tailwind4}vite.config.ts @@ -1,7 +1,21 @@ +import adapter from '@sveltejs/adapter-auto'; import { sveltekit } from '@sveltejs/kit/vite'; import tailwindcss from '@tailwindcss/vite'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [sveltekit(), tailwindcss()], + plugins: [ + sveltekit({ + adapter: adapter(), + experimental: { + remoteFunctions: true, + }, + compilerOptions: { + experimental: { async: true }, + runes: ({ filename }) => + filename.split(/[/\\]/).includes('node_modules') ? undefined : true, + }, + }), + tailwindcss(), + ], }); From 67fe059f54ba3da8fd9583282f408c447f8ce009 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 6 Aug 2026 14:52:58 -0700 Subject: [PATCH 17/34] feat: explicit environment variables --- src/test.rs | 7 +++++-- template_builder/templates/base/eslint.config.ts | 11 ++++++++++- template_builder/templates/base/oxfmt.config.ts | 2 +- .../templates/extras/src/lib/auth/{Auth}index.ts | 2 +- .../templates/extras/src/lib/db/{Sqlite}index.ts | 2 +- .../templates/extras/src/lib/db/{Turso}index.ts | 8 ++++---- .../src/routes/api/auth/callback/{Auth}+server.ts | 4 ++-- .../extras/src/routes/api/auth/login/{Auth}+server.ts | 2 +- .../templates/extras/src/{Auth,D1}hooks.server.ts | 2 +- .../extras/src/{Auth,Sqlite|Turso}hooks.server.ts | 2 +- template_builder/templates/extras/src/{D1,Auth}env.ts | 7 +++++++ template_builder/templates/extras/src/{D1}env.ts | 5 +++++ .../templates/extras/src/{Sqlite,Auth}env.ts | 7 +++++++ template_builder/templates/extras/src/{Sqlite}env.ts | 5 +++++ .../templates/extras/src/{Turso,Auth}env.ts | 8 ++++++++ template_builder/templates/extras/src/{Turso}env.ts | 6 ++++++ .../templates/extras/{D1|Sqlite}.prettierignore | 1 - template_builder/templates/extras/{D1}.env | 1 + template_builder/templates/extras/{D1}package.json | 4 ++-- .../extras/{Pnpm,D1|Sqlite|Turso}pnpm-workspace.yaml | 4 ++++ .../{Pnpm,Edge,D1|Sqlite|Turso}pnpm-workspace.yaml | 6 ++++++ .../templates/extras/{Pnpm,Edge}pnpm-workspace.yaml | 3 +++ template_builder/templates/extras/{Turso}package.json | 2 +- 23 files changed, 82 insertions(+), 19 deletions(-) create mode 100644 template_builder/templates/extras/src/{D1,Auth}env.ts create mode 100644 template_builder/templates/extras/src/{D1}env.ts create mode 100644 template_builder/templates/extras/src/{Sqlite,Auth}env.ts create mode 100644 template_builder/templates/extras/src/{Sqlite}env.ts create mode 100644 template_builder/templates/extras/src/{Turso,Auth}env.ts create mode 100644 template_builder/templates/extras/src/{Turso}env.ts delete mode 100644 template_builder/templates/extras/{D1|Sqlite}.prettierignore create mode 100644 template_builder/templates/extras/{Pnpm,D1|Sqlite|Turso}pnpm-workspace.yaml create mode 100644 template_builder/templates/extras/{Pnpm,Edge,D1|Sqlite|Turso}pnpm-workspace.yaml create mode 100644 template_builder/templates/extras/{Pnpm,Edge}pnpm-workspace.yaml diff --git a/src/test.rs b/src/test.rs index 70f3d070..170d5cc7 100644 --- a/src/test.rs +++ b/src/test.rs @@ -20,6 +20,8 @@ use crate::{ fn make_input(features: HashSet) -> UserInput { let tmp = tempfile::tempdir().unwrap(); + let mut features = features.clone(); + features.insert(Feature::Pnpm); UserInput { location: ProjectLocation { name: "o7-test".to_string(), @@ -182,8 +184,9 @@ fn test() { create(input).map_err(|e| format!("{e}"))?; // Build first so sveltekit generates its tsconfig test_pnpm(&dir, &["build"])?; - test_pnpm(&dir, &["eslint", "--max-warnings", "0", "."])?; - test_pnpm(&dir, &["svelte-check"])?; + test_pnpm(&dir, &["eslint", "--flag", "unstable_native_nodejs_ts_config", "--max-warnings", "0", "."])?; + test_pnpm(&dir, &["svelte-check", "--incremental", "--tsgo"])?; + test_pnpm(&dir, &["oxfmt", "--check"])?; Ok(()) })(); diff --git a/template_builder/templates/base/eslint.config.ts b/template_builder/templates/base/eslint.config.ts index 1d90c14f..80423f27 100644 --- a/template_builder/templates/base/eslint.config.ts +++ b/template_builder/templates/base/eslint.config.ts @@ -73,5 +73,14 @@ export default defineConfig( // ], }, }, - { ignores: ['**/.svelte-kit', '.wrangler/', 'build/', 'dist/'] }, + { + ignores: [ + '**/.svelte-kit', + '.wrangler/', + 'build/', + 'dist/', + 'worker-configuration.d.ts', + 'db/schema.d.ts', + ], + }, ); diff --git a/template_builder/templates/base/oxfmt.config.ts b/template_builder/templates/base/oxfmt.config.ts index 8ad1b370..4e66a4e9 100644 --- a/template_builder/templates/base/oxfmt.config.ts +++ b/template_builder/templates/base/oxfmt.config.ts @@ -6,7 +6,7 @@ export default defineConfig({ useTabs: true, sortTailwindcss: true, svelte: true, - ignorePatterns: ['worker-configuration.d.ts'], + ignorePatterns: ['worker-configuration.d.ts', 'db/schema.d.ts'], overrides: [ { files: ['wrangler.jsonc'], diff --git a/template_builder/templates/extras/src/lib/auth/{Auth}index.ts b/template_builder/templates/extras/src/lib/auth/{Auth}index.ts index d3040291..cfa6e245 100644 --- a/template_builder/templates/extras/src/lib/auth/{Auth}index.ts +++ b/template_builder/templates/extras/src/lib/auth/{Auth}index.ts @@ -7,7 +7,7 @@ import { sha256 } from '@oslojs/crypto/sha2'; import { generateRandomString, type RandomReader } from '@oslojs/crypto/random'; import type { Selectable } from 'kysely'; import { db } from '#lib/db'; -import { CLIENT_ID, CLIENT_SECRET } from '$env/static/private'; +import { CLIENT_ID, CLIENT_SECRET } from '$app/env/private'; import type { DB } from '#lib/db/schema'; const ONE_DAY = 1000 * 60 * 60 * 24; diff --git a/template_builder/templates/extras/src/lib/db/{Sqlite}index.ts b/template_builder/templates/extras/src/lib/db/{Sqlite}index.ts index bd439d9f..ff9487a5 100644 --- a/template_builder/templates/extras/src/lib/db/{Sqlite}index.ts +++ b/template_builder/templates/extras/src/lib/db/{Sqlite}index.ts @@ -1,6 +1,6 @@ import { Kysely, type RawBuilder, sql, SqliteDialect } from 'kysely'; import Database from 'better-sqlite3'; -import { DATABASE_URL } from '$env/static/private'; +import { DATABASE_URL } from '$app/env/private'; import type { DB } from './schema'; export const sqlite = new Database(DATABASE_URL); diff --git a/template_builder/templates/extras/src/lib/db/{Turso}index.ts b/template_builder/templates/extras/src/lib/db/{Turso}index.ts index 692d5a47..6f92e0ac 100644 --- a/template_builder/templates/extras/src/lib/db/{Turso}index.ts +++ b/template_builder/templates/extras/src/lib/db/{Turso}index.ts @@ -1,8 +1,8 @@ import { Kysely, type RawBuilder, sql } from 'kysely'; import { LibsqlDialect } from 'kysely-libsql'; import type { DB } from './schema'; -import { dev } from '$app/environment'; -import { TURSO_TOKEN, TURSO_URL } from '$env/static/private'; +import { dev } from '$app/env'; +import { TURSO_TOKEN, TURSO_URL } from '$app/env/private'; import { createClient } from '@libsql/client'; if (!TURSO_URL || !TURSO_TOKEN) { @@ -13,13 +13,13 @@ if (!TURSO_URL || !TURSO_TOKEN) { } } -export const dbClient = createClient({ +export const db_client = createClient({ url: TURSO_URL, authToken: TURSO_TOKEN, }); export const db = new Kysely({ - dialect: new LibsqlDialect({ client: dbClient }), + dialect: new LibsqlDialect({ client: db_client }), }); export function json(obj: T): RawBuilder { diff --git a/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts b/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts index 8c637ded..dc22d23a 100644 --- a/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts +++ b/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts @@ -1,6 +1,6 @@ import { OAuth2Tokens } from 'arctic'; import { db } from '#lib/db'; -import { CLIENT_ID } from '$env/static/private'; +import { CLIENT_ID } from '$app/env/private'; import { error, redirect } from '@sveltejs/kit'; import { resolve } from '$app/paths'; import { @@ -9,7 +9,7 @@ import { generateSessionToken, twitch, } from '#lib/auth'; -import { dev } from '$app/environment'; +import { dev } from '$app/env'; export const GET = async (event) => { const code = event.url.searchParams.get('code'); diff --git a/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts b/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts index 06cca671..eccd9bed 100644 --- a/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts +++ b/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts @@ -1,7 +1,7 @@ import { redirect } from '@sveltejs/kit'; import { generateState } from 'arctic'; import { twitch } from '#lib/auth'; -import { dev } from '$app/environment'; +import { dev } from '$app/env'; export const GET = async (event) => { const state = generateState(); diff --git a/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts b/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts index 685cf876..9195cc07 100644 --- a/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts +++ b/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts @@ -1,6 +1,6 @@ import { initDb } from '$lib/db'; import { initAuth, validateSessionToken } from '$lib/auth'; -import { dev } from '$app/environment'; +import { dev } from '$app/env'; export async function handle({ event, resolve }) { const db = event.platform!.env.DB; diff --git a/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts b/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts index fa51cf24..6d5c502d 100644 --- a/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts +++ b/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts @@ -1,5 +1,5 @@ import { initAuth, validateSessionToken } from '#lib/auth'; -import { dev } from '$app/environment'; +import { dev } from '$app/env'; export async function handle({ event, resolve }) { initAuth(event.url.origin); diff --git a/template_builder/templates/extras/src/{D1,Auth}env.ts b/template_builder/templates/extras/src/{D1,Auth}env.ts new file mode 100644 index 00000000..a6c7f18a --- /dev/null +++ b/template_builder/templates/extras/src/{D1,Auth}env.ts @@ -0,0 +1,7 @@ +import { defineEnvVars } from '@sveltejs/kit/env'; + +export const variables = defineEnvVars({ + DATABASE_NAME: {}, + CLIENT_ID: {}, + CLIENT_SECRET: {}, +}); diff --git a/template_builder/templates/extras/src/{D1}env.ts b/template_builder/templates/extras/src/{D1}env.ts new file mode 100644 index 00000000..e16f9fa6 --- /dev/null +++ b/template_builder/templates/extras/src/{D1}env.ts @@ -0,0 +1,5 @@ +import { defineEnvVars } from '@sveltejs/kit/env'; + +export const variables = defineEnvVars({ + DATABASE_NAME: {}, +}); diff --git a/template_builder/templates/extras/src/{Sqlite,Auth}env.ts b/template_builder/templates/extras/src/{Sqlite,Auth}env.ts new file mode 100644 index 00000000..e4b6dc8d --- /dev/null +++ b/template_builder/templates/extras/src/{Sqlite,Auth}env.ts @@ -0,0 +1,7 @@ +import { defineEnvVars } from '@sveltejs/kit/env'; + +export const variables = defineEnvVars({ + DATABASE_URL: {}, + CLIENT_ID: {}, + CLIENT_SECRET: {}, +}); diff --git a/template_builder/templates/extras/src/{Sqlite}env.ts b/template_builder/templates/extras/src/{Sqlite}env.ts new file mode 100644 index 00000000..81151634 --- /dev/null +++ b/template_builder/templates/extras/src/{Sqlite}env.ts @@ -0,0 +1,5 @@ +import { defineEnvVars } from '@sveltejs/kit/env'; + +export const variables = defineEnvVars({ + DATABASE_URL: {}, +}); diff --git a/template_builder/templates/extras/src/{Turso,Auth}env.ts b/template_builder/templates/extras/src/{Turso,Auth}env.ts new file mode 100644 index 00000000..7f6fa403 --- /dev/null +++ b/template_builder/templates/extras/src/{Turso,Auth}env.ts @@ -0,0 +1,8 @@ +import { defineEnvVars } from '@sveltejs/kit/env'; + +export const variables = defineEnvVars({ + TURSO_URL: {}, + TURSO_TOKEN: {}, + CLIENT_ID: {}, + CLIENT_SECRET: {}, +}); diff --git a/template_builder/templates/extras/src/{Turso}env.ts b/template_builder/templates/extras/src/{Turso}env.ts new file mode 100644 index 00000000..d22efb73 --- /dev/null +++ b/template_builder/templates/extras/src/{Turso}env.ts @@ -0,0 +1,6 @@ +import { defineEnvVars } from '@sveltejs/kit/env'; + +export const variables = defineEnvVars({ + TURSO_URL: {}, + TURSO_TOKEN: {}, +}); diff --git a/template_builder/templates/extras/{D1|Sqlite}.prettierignore b/template_builder/templates/extras/{D1|Sqlite}.prettierignore deleted file mode 100644 index db791e99..00000000 --- a/template_builder/templates/extras/{D1|Sqlite}.prettierignore +++ /dev/null @@ -1 +0,0 @@ -src/lib/db/schema.d.ts diff --git a/template_builder/templates/extras/{D1}.env b/template_builder/templates/extras/{D1}.env index c892c8e4..19e59afe 100644 --- a/template_builder/templates/extras/{D1}.env +++ b/template_builder/templates/extras/{D1}.env @@ -1 +1,2 @@ +# The name of your D1 database DATABASE_NAME= diff --git a/template_builder/templates/extras/{D1}package.json b/template_builder/templates/extras/{D1}package.json index 8ca584ea..20c22892 100644 --- a/template_builder/templates/extras/{D1}package.json +++ b/template_builder/templates/extras/{D1}package.json @@ -1,7 +1,7 @@ { "scripts": { - "db:push": "node ./prisma/push.mjs", - "db:push:local": "node ./prisma/push.mjs --local" + "db:push": "node ./prisma/push.ts", + "db:push:local": "node ./prisma/push.ts --local" }, "dependencies": { "kysely-d1": "^0.4.0" diff --git a/template_builder/templates/extras/{Pnpm,D1|Sqlite|Turso}pnpm-workspace.yaml b/template_builder/templates/extras/{Pnpm,D1|Sqlite|Turso}pnpm-workspace.yaml new file mode 100644 index 00000000..bf1d15ab --- /dev/null +++ b/template_builder/templates/extras/{Pnpm,D1|Sqlite|Turso}pnpm-workspace.yaml @@ -0,0 +1,4 @@ +allowBuilds: + prisma: true + better-sqlite3: true + '@prisma/engines': true diff --git a/template_builder/templates/extras/{Pnpm,Edge,D1|Sqlite|Turso}pnpm-workspace.yaml b/template_builder/templates/extras/{Pnpm,Edge,D1|Sqlite|Turso}pnpm-workspace.yaml new file mode 100644 index 00000000..d61e9fe2 --- /dev/null +++ b/template_builder/templates/extras/{Pnpm,Edge,D1|Sqlite|Turso}pnpm-workspace.yaml @@ -0,0 +1,6 @@ +allowBuilds: + esbuild: true + workerd: true + prisma: true + better-sqlite3: true + '@prisma/engines': true diff --git a/template_builder/templates/extras/{Pnpm,Edge}pnpm-workspace.yaml b/template_builder/templates/extras/{Pnpm,Edge}pnpm-workspace.yaml new file mode 100644 index 00000000..02365ef1 --- /dev/null +++ b/template_builder/templates/extras/{Pnpm,Edge}pnpm-workspace.yaml @@ -0,0 +1,3 @@ +allowBuilds: + esbuild: true + workerd: true diff --git a/template_builder/templates/extras/{Turso}package.json b/template_builder/templates/extras/{Turso}package.json index 09a0d2b2..2464dac2 100644 --- a/template_builder/templates/extras/{Turso}package.json +++ b/template_builder/templates/extras/{Turso}package.json @@ -1,6 +1,6 @@ { "scripts": { - "db:push": "node ./prisma/push.mjs" + "db:push": "node ./prisma/push.ts" }, "dependencies": { "kysely-libsql": "^0.7.1", From 65633da0df003173edca560d8aa6daee2ab88378 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 6 Aug 2026 21:14:58 -0700 Subject: [PATCH 18/34] almost all tests passing --- Cargo.lock | 656 ++++++------------ Cargo.toml | 23 +- src/create/package_json.rs | 5 +- src/test.rs | 3 +- src/utils.rs | 9 +- telemetry-server/package.json | 2 +- telemetry-server/pnpm-lock.yaml | 76 +- template_builder/Cargo.lock | 113 ++- template_builder/Cargo.toml | 14 +- template_builder/src/utils.rs | 8 + .../templates/base/eslint.config.ts | 17 +- template_builder/templates/base/package.json | 7 +- template_builder/templates/base/src/app.html | 24 +- template_builder/templates/base/tsconfig.json | 2 +- .../templates/extras/prisma/{Turso}push.ts | 6 +- .../extras/src/{Auth,D1}hooks.server.ts | 4 +- .../templates/extras/{D1,Turso}tsconfig.json | 4 + 17 files changed, 370 insertions(+), 603 deletions(-) create mode 100644 template_builder/templates/extras/{D1,Turso}tsconfig.json diff --git a/Cargo.lock b/Cargo.lock index a0e1ba30..ec970616 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "anstream" -version = "0.6.21" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -19,44 +19,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys", ] [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "base64" @@ -66,15 +66,15 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "bytes" -version = "1.10.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cfg-if" @@ -84,9 +84,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clap" -version = "4.5.51" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" dependencies = [ "clap_builder", "clap_derive", @@ -94,9 +94,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.51" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" dependencies = [ "anstream", "anstyle", @@ -106,33 +106,33 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "clap_lex" -version = "0.7.6" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "convert_case" -version = "0.7.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" dependencies = [ "unicode-segmentation", ] @@ -150,9 +150,9 @@ dependencies = [ [[package]] name = "cookie_store" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fc4bff745c9b4c7fb1e97b25d13153da2bc7796260141df62378998d070207f" +checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206" dependencies = [ "cookie", "document-features", @@ -177,15 +177,14 @@ dependencies = [ "dunce", "human-repr", "inquire", - "itertools 0.14.0", - "once_cell", + "itertools", "pathdiff", "serde", "serde_json", "tempfile", "template_builder", "ureq", - "which 8.0.0", + "which", ] [[package]] @@ -200,7 +199,7 @@ dependencies = [ "document-features", "mio", "parking_lot", - "rustix 1.1.2", + "rustix", "signal-hook", "signal-hook-mio", "winapi", @@ -217,32 +216,30 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" -dependencies = [ - "powerfmt", -] +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" [[package]] name = "derive_more" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "convert_case", "proc-macro2", "quote", - "syn", + "rustc_version", + "syn 2.0.119", ] [[package]] @@ -263,18 +260,18 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -300,15 +297,9 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "env_home" -version = "0.1.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" [[package]] name = "equivalent" @@ -323,20 +314,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "fnv" -version = "1.0.7" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "form_urlencoded" @@ -358,9 +343,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "libc", @@ -369,21 +354,20 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi", - "wasip2", ] [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heck" @@ -391,23 +375,13 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "home" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "http" -version = "1.3.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -425,12 +399,13 @@ checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" [[package]] name = "icu_collections" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -438,9 +413,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -451,9 +426,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -465,15 +440,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ "icu_collections", "icu_locale_core", @@ -485,15 +460,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", @@ -517,9 +492,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -527,9 +502,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", "hashbrown", @@ -537,9 +512,9 @@ dependencies = [ [[package]] name = "inquire" -version = "0.9.1" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2628910d0114e9139056161d8644a2026be7b117f8498943f9437748b04c9e0a" +checksum = "6654738b8024300cf062d04a1c13c10c8e2cea598ec1c47dc9b6641159429756" dependencies = [ "bitflags", "crossterm", @@ -557,61 +532,45 @@ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" -version = "0.13.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" dependencies = [ - "bitflags", "libc", ] [[package]] name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "litrs" @@ -630,39 +589,39 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mio" -version = "1.1.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "once_cell_polyfill" @@ -713,9 +672,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "potential_utf" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] @@ -728,27 +687,27 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.41" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.3.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "redox_syscall" @@ -765,43 +724,33 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror", ] [[package]] -name = "rustix" -version = "0.38.44" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", + "semver", ] [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys 0.11.0", - "windows-sys 0.61.2", + "linux-raw-sys", + "windows-sys", ] -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - [[package]] name = "same-file" version = "1.0.6" @@ -817,11 +766,17 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -829,35 +784,35 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -883,18 +838,19 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "stable_deref_trait" @@ -910,9 +866,20 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.108" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -927,20 +894,20 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "tempfile" -version = "3.23.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.3", "once_cell", - "rustix 1.1.2", - "windows-sys 0.61.2", + "rustix", + "windows-sys", ] [[package]] @@ -948,70 +915,69 @@ name = "template_builder" version = "0.1.0" dependencies = [ "anyhow", - "itertools 0.13.0", + "itertools", "proc-macro2", "quote", "serde", "serde_json", "walkdir", - "which 6.0.3", + "which", ] [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] [[package]] name = "time" -version = "0.3.44" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -1019,9 +985,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "zerovec", @@ -1029,15 +995,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" @@ -1047,9 +1013,9 @@ checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "ureq" -version = "3.1.2" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ba1025f18a4a3fc3e9b48c868e9beb4f24f4b4b1a325bada26bd4119f46537" +checksum = "dea7109cdcd5864d4eeb1b58a1648dc9bf520360d7af16ec26d0a9354bafcfc0" dependencies = [ "base64", "cookie_store", @@ -1058,14 +1024,14 @@ dependencies = [ "serde", "serde_json", "ureq-proto", - "utf-8", + "utf8-zero", ] [[package]] name = "ureq-proto" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b4531c118335662134346048ddb0e54cc86bd7e81866757873055f0e38f5d2" +checksum = "e994ba84b0bd1b1b0cf92878b7ef898a5c1760108fe7b6010327e274917a808c" dependencies = [ "base64", "http", @@ -1075,9 +1041,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -1086,10 +1052,10 @@ dependencies = [ ] [[package]] -name = "utf-8" -version = "0.7.6" +name = "utf8-zero" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +checksum = "b8c0a043c9540bae7c578c88f91dda8bd82e59ae27c21baca69c8b191aaf5a6e" [[package]] name = "utf8_iter" @@ -1125,36 +1091,13 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasip2" -version = "1.0.1+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" -dependencies = [ - "wit-bindgen", -] - [[package]] name = "which" -version = "6.0.3" +version = "8.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" +checksum = "8f3ef584124b911bcc3875c2f1472e80f24361ceb789bd1c62b3e9a3df9ff43c" dependencies = [ - "either", - "home", - "rustix 0.38.44", - "winsafe", -] - -[[package]] -name = "which" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" -dependencies = [ - "env_home", - "rustix 1.1.2", - "winsafe", + "libc", ] [[package]] @@ -1179,7 +1122,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -1194,24 +1137,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -1221,158 +1146,17 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - -[[package]] -name = "winsafe" -version = "0.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" - -[[package]] -name = "wit-bindgen" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" - [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "yoke" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -1381,42 +1165,42 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] [[package]] name = "zerotrie" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", @@ -1425,9 +1209,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "yoke", "zerofrom", @@ -1436,11 +1220,17 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index d53e6867..ac686f40 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,26 +5,25 @@ version = "0.13.4" edition = "2021" [dependencies] -anyhow = "1.0.86" -clap = { version = "4.5.9", features = ["derive"] } +anyhow = "1.0.104" +clap = { version = "4.6.6", features = ["derive"] } crossterm = "0.29.0" directories = "6.0.0" -dunce = "1.0.4" +dunce = "1.0.5" human-repr = "1.1.0" -inquire = "0.9.1" -once_cell = "1.19.0" -pathdiff = "0.2.1" -serde = { version = "1.0.203", features = ["derive"] } -serde_json = "1.0.117" -ureq = { version = "3.0.4", features = ["json"], default-features = false } -which = "8.0.0" +inquire = "0.9.4" +pathdiff = "0.2.3" +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" +ureq = { version = "3.3.0", features = ["json"], default-features = false } +which = "8.0.5" [build-dependencies] template_builder = { path = "./template_builder" } [dev-dependencies] -tempfile = "3.10.1" -itertools = "0.14.0" +tempfile = "3.27.0" +itertools = "0.15.0" [profile.release] opt-level = 's' # Optimize for size diff --git a/src/create/package_json.rs b/src/create/package_json.rs index 625ef70b..6d7dd9e5 100644 --- a/src/create/package_json.rs +++ b/src/create/package_json.rs @@ -28,8 +28,11 @@ pub fn create_package_json(input: &UserInput) -> Result<()> { package_json .serialize(&mut ser) .context("Failed to serialize package.json")?; + + let mut buf = ser.into_inner(); + buf.push(b'\n'); - fs::write(target_path, ser.into_inner())?; + fs::write(target_path, buf)?; Ok(()) } diff --git a/src/test.rs b/src/test.rs index 170d5cc7..7419ce43 100644 --- a/src/test.rs +++ b/src/test.rs @@ -18,9 +18,8 @@ use crate::{ utils::PackageManager, }; -fn make_input(features: HashSet) -> UserInput { +fn make_input(mut features: HashSet) -> UserInput { let tmp = tempfile::tempdir().unwrap(); - let mut features = features.clone(); features.insert(Feature::Pnpm); UserInput { location: ProjectLocation { diff --git a/src/utils.rs b/src/utils.rs index 875bad95..9852d085 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,9 +1,8 @@ use std::collections::{BTreeMap, HashMap}; use std::env; use std::fmt::Display; -use std::sync::Mutex; +use std::sync::{LazyLock, Mutex}; -use once_cell::sync::Lazy; use serde::{Serialize, Serializer}; include!(concat!(env!("OUT_DIR"), "/config.rs")); @@ -46,8 +45,8 @@ impl Display for PackageManager { } } -pub static PACKAGE_MANAGER_OVERRIDE: Lazy>> = - Lazy::new(|| Mutex::new(None)); +pub static PACKAGE_MANAGER_OVERRIDE: LazyLock>> = + LazyLock::new(|| Mutex::new(None)); pub fn get_package_manager() -> PackageManager { if let Some(package_manager) = PACKAGE_MANAGER_OVERRIDE.lock().unwrap().as_ref() { @@ -78,6 +77,7 @@ pub struct PackageJsonPartial<'a> { pub name: Option<&'a str>, pub version: Option<&'a str>, pub r#type: Option<&'a str>, + pub imports: Option>>, pub scripts: Option>>, #[serde(skip_serializing_if = "Option::is_none")] pub workspaces: Option>, @@ -124,6 +124,7 @@ impl<'a> PackageJsonPartial<'a> { self.package_manager = other.package_manager; } merge_hashmaps(&mut self.scripts, other.scripts); + merge_hashmaps(&mut self.imports, other.imports); merge_hashmaps(&mut self.dependencies, other.dependencies); merge_hashmaps(&mut self.dev_dependencies, other.dev_dependencies); } diff --git a/telemetry-server/package.json b/telemetry-server/package.json index 7f99bc4c..93383c15 100644 --- a/telemetry-server/package.json +++ b/telemetry-server/package.json @@ -10,7 +10,7 @@ }, "devDependencies": { "typescript": "^7.0.2", - "wrangler": "^4.118.0" + "wrangler": "^4.119.0" }, "dependencies": { "valibot": "^1.4.2" diff --git a/telemetry-server/pnpm-lock.yaml b/telemetry-server/pnpm-lock.yaml index 734e3b61..a356282b 100644 --- a/telemetry-server/pnpm-lock.yaml +++ b/telemetry-server/pnpm-lock.yaml @@ -16,8 +16,8 @@ importers: specifier: ^7.0.2 version: 7.0.2 wrangler: - specifier: ^4.118.0 - version: 4.118.0 + specifier: ^4.119.0 + version: 4.119.0 packages: @@ -34,32 +34,32 @@ packages: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20260730.1': - resolution: {integrity: sha512-+MBHmPaiTe2KajryW0T24rZvWFxb41hD3d8anNzQqHzft6vSEb18+sp0znSwxgij7ApPhSM1+vhkNg4f3YMguA==} + '@cloudflare/workerd-darwin-64@1.20260801.1': + resolution: {integrity: sha512-wuJWbXpKvncJi1P0GKS+iYpN5tHdb7JPJJ/+6ZQe8zzovHHVMkLJPNBsgWpqeUhpM3g9qTwEKd2rglNKejuh5A==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260730.1': - resolution: {integrity: sha512-SBHKntPkKvNPgaCrTe99xC1CAl8ygJDzlYfK0LbuJ1muKadIw35WnhO0wu894fKBtllsVQdNzDLee+cm0ppLSQ==} + '@cloudflare/workerd-darwin-arm64@1.20260801.1': + resolution: {integrity: sha512-kwoZiTpnhNrF3+APx84Q/oAqvJ3sU9yefGagwm/ASaH/2W19x0vghkW/r4qCoHCK0WW7EPugZ+aXjgPMRtlq1Q==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20260730.1': - resolution: {integrity: sha512-ouyPOSMbiKPeSwUJUvxtMcxGAXs2J4aPE4T5ABIYX5ClcQx5j5bbHTmnqOQEY8sAuLTPjH7dY+iB6UI5ISlwwA==} + '@cloudflare/workerd-linux-64@1.20260801.1': + resolution: {integrity: sha512-r0vAxCZH+Jih9Unm1yoyiByPNWNgawcKciOHDm5Q37ZVGOkKLsT9AtLe3yLSaul76WrKqtf+JP2n0WW32VBLJg==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260730.1': - resolution: {integrity: sha512-YQ+Mi78U3TPdgBPtwq+Sm6rJU+Ihl2y0pjYtuuKkdmUbYzL7oLR6Xqq9wljhasnuCFICssDJaqhMep5WizYoEQ==} + '@cloudflare/workerd-linux-arm64@1.20260801.1': + resolution: {integrity: sha512-zWgpdZtSozvIgzQNmQiDSF8yEOQJUkRAWNsDXXzAAoy+fCn8YUoSibj3mpFSbZRvbUldeBEaW6SCdC2VEMkhNQ==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20260730.1': - resolution: {integrity: sha512-27fAN+vUECW1oYVc1KOcHYpkL8COM2Uxtxql7TL595kxbjoqS5yckw7NLz7bTf2pALFCZWjqXDjZGJ/xbG4ZKQ==} + '@cloudflare/workerd-windows-64@1.20260801.1': + resolution: {integrity: sha512-2oQz+Ksu4ji6e/+ZoYX+tWQEcxAii2p7l+iR8kx48W1llMalaufAsmVxTlk+3/vrM7D3/2c0iK448e0UQTcIMg==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -563,8 +563,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - miniflare@5.20260730.0-alpha: - resolution: {integrity: sha512-8/dspSXDshP6nSkCpjKO7BYc2qZoYSXm7iM+QxY7qJyJpAB3onnQSaiu0cvKJlfuMGwULl55hG69FJCcCMXU1Q==} + miniflare@5.20260801.0-alpha: + resolution: {integrity: sha512-AfMrnQbJg81ESsGkGhOkHBtwTqCG+mosR+3GE+qDrhF1I/ieIvgg3ICxNyBvgHBZ3iapy6cysBQHNPykkzrfgw==} engines: {node: '>=22.0.0'} path-to-regexp@6.3.0: @@ -609,17 +609,17 @@ packages: typescript: optional: true - workerd@1.20260730.1: - resolution: {integrity: sha512-zmfNIjwYSWFY5chGBOjWtH3xAE7p97FTC6vR4Ep98290ho6AeAR/NVcBD274YCLEUYzqm8yxdtZlxMybU8a3jA==} + workerd@1.20260801.1: + resolution: {integrity: sha512-/g9JGTyqnHtoIscpBHqKD8swE2V4StBs2i69PmLiOhH45OP95jCFICl4F1hKlgN57rqfni5LiCitttoX5OOkVA==} engines: {node: '>=16'} hasBin: true - wrangler@4.118.0: - resolution: {integrity: sha512-9pkBw/b8zWqGx2S+oLhgHMR1M/4VOE8SynUFABnGWiSFGlcOQ4xiI/B71Xf66RYP2xzngU37IQFPtUruij3lYw==} + wrangler@4.119.0: + resolution: {integrity: sha512-ookClf+zly4DTc8pBMNrwGQzZKH8IpIYTXkjDw3XS7ZvBQ5mLYH6eOvfD5BEpk3U63zTbv91WRlo1UeRSKXa0g==} engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^5.20260730.1 + '@cloudflare/workers-types': ^5.20260801.1 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -646,25 +646,25 @@ snapshots: '@cloudflare/kv-asset-handler@0.5.0': {} - '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260730.1)': + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260801.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260730.1 + workerd: 1.20260801.1 - '@cloudflare/workerd-darwin-64@1.20260730.1': + '@cloudflare/workerd-darwin-64@1.20260801.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260730.1': + '@cloudflare/workerd-darwin-arm64@1.20260801.1': optional: true - '@cloudflare/workerd-linux-64@1.20260730.1': + '@cloudflare/workerd-linux-64@1.20260801.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20260730.1': + '@cloudflare/workerd-linux-arm64@1.20260801.1': optional: true - '@cloudflare/workerd-windows-64@1.20260730.1': + '@cloudflare/workerd-windows-64@1.20260801.1': optional: true '@cspotcode/source-map-support@0.8.1': @@ -987,12 +987,12 @@ snapshots: kleur@4.1.5: {} - miniflare@5.20260730.0-alpha: + miniflare@5.20260801.0-alpha: dependencies: '@cspotcode/source-map-support': 0.8.1 sharp: 0.35.2 undici: 7.28.0 - workerd: 1.20260730.1 + workerd: 1.20260801.1 ws: 8.21.0 youch: 4.1.0-beta.10 transitivePeerDependencies: @@ -1075,24 +1075,24 @@ snapshots: optionalDependencies: typescript: 7.0.2 - workerd@1.20260730.1: + workerd@1.20260801.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260730.1 - '@cloudflare/workerd-darwin-arm64': 1.20260730.1 - '@cloudflare/workerd-linux-64': 1.20260730.1 - '@cloudflare/workerd-linux-arm64': 1.20260730.1 - '@cloudflare/workerd-windows-64': 1.20260730.1 + '@cloudflare/workerd-darwin-64': 1.20260801.1 + '@cloudflare/workerd-darwin-arm64': 1.20260801.1 + '@cloudflare/workerd-linux-64': 1.20260801.1 + '@cloudflare/workerd-linux-arm64': 1.20260801.1 + '@cloudflare/workerd-windows-64': 1.20260801.1 - wrangler@4.118.0: + wrangler@4.119.0: dependencies: '@cloudflare/kv-asset-handler': 0.5.0 - '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260730.1) + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260801.1) blake3-wasm: 2.1.5 esbuild: 0.28.1 - miniflare: 5.20260730.0-alpha + miniflare: 5.20260801.0-alpha path-to-regexp: 6.3.0 unenv: 2.0.0-rc.24 - workerd: 1.20260730.1 + workerd: 1.20260801.1 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: diff --git a/template_builder/Cargo.lock b/template_builder/Cargo.lock index 1035b108..dbf01757 100644 --- a/template_builder/Cargo.lock +++ b/template_builder/Cargo.lock @@ -1,18 +1,12 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" - -[[package]] -name = "bitflags" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "either" @@ -20,30 +14,11 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys", -] - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys", -] - [[package]] name = "itertools" -version = "0.13.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" dependencies = [ "either", ] @@ -61,48 +36,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] -name = "linux-raw-sys" -version = "0.4.14" +name = "memchr" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys", -] - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - [[package]] name = "same-file" version = "1.0.6" @@ -114,18 +70,28 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.203" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", @@ -134,20 +100,22 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", - "ryu", + "memchr", "serde", + "serde_core", + "zmij", ] [[package]] name = "syn" -version = "2.0.66" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -186,14 +154,11 @@ dependencies = [ [[package]] name = "which" -version = "6.0.1" +version = "8.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" +checksum = "8f3ef584124b911bcc3875c2f1472e80f24361ceb789bd1c62b3e9a3df9ff43c" dependencies = [ - "either", - "home", - "rustix", - "winsafe", + "libc", ] [[package]] @@ -279,7 +244,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] -name = "winsafe" -version = "0.0.19" +name = "zmij" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/template_builder/Cargo.toml b/template_builder/Cargo.toml index f27713dd..6c9ca75c 100644 --- a/template_builder/Cargo.toml +++ b/template_builder/Cargo.toml @@ -4,11 +4,11 @@ version = "0.1.0" edition = "2021" [dependencies] -proc-macro2 = "1.0.85" -anyhow = "1.0.86" -quote = "1.0.36" -which = "6.0.1" +proc-macro2 = "1.0.107" +anyhow = "1.0.104" +quote = "1.0.47" +which = "8.0.5" walkdir = "2.5.0" -serde = { version = "1.0.203", features = ["derive"] } -serde_json = "1.0.117" -itertools = "0.13.0" +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" +itertools = "0.15.0" diff --git a/template_builder/src/utils.rs b/template_builder/src/utils.rs index 639956b2..73a645e6 100644 --- a/template_builder/src/utils.rs +++ b/template_builder/src/utils.rs @@ -77,6 +77,7 @@ pub struct PackageJsonPartial<'a> { name: Option<&'a str>, version: Option<&'a str>, r#type: Option<&'a str>, + imports: Option>>, scripts: Option>>, dependencies: Option>>, dev_dependencies: Option>>, @@ -99,6 +100,13 @@ impl ToTokens for PackageJsonPartial<'_> { Some(_type) => pieces.push(quote! { r#type: Some(#_type) }), None => pieces.push(quote! { r#type: None }), } + match &self.imports { + Some(imports) => { + let imports = hashmap_to_tokens(imports); + pieces.push(quote! { imports: Some(#imports) }) + } + None => pieces.push(quote! { imports: None }), + } match &self.scripts { Some(scripts) => { let scripts = hashmap_to_tokens(scripts); diff --git a/template_builder/templates/base/eslint.config.ts b/template_builder/templates/base/eslint.config.ts index 80423f27..f767f77d 100644 --- a/template_builder/templates/base/eslint.config.ts +++ b/template_builder/templates/base/eslint.config.ts @@ -1,9 +1,15 @@ import globals from 'globals'; import js from '@eslint/js'; +import { loadConfig } from '@sveltejs/load-config'; import svelte from 'eslint-plugin-svelte'; import { defineConfig } from 'eslint/config'; import ts from 'typescript-eslint'; +const svelte_config = await loadConfig('.'); +if (!svelte_config || !('config' in svelte_config)) { + throw new Error(`Failed to load Svelte config: ${svelte_config?.error}`); +} + export default defineConfig( js.configs.recommended, ts.configs.recommended, @@ -31,12 +37,7 @@ export default defineConfig( projectService: true, extraFileExtensions: ['.svelte'], parser: ts.parser, - svelteConfig: { - experimental: { async: true }, - kit: { - experimental: { remoteFunctions: true }, - }, - }, + svelteConfig: svelte_config.config, }, }, }, @@ -79,8 +80,8 @@ export default defineConfig( '.wrangler/', 'build/', 'dist/', - 'worker-configuration.d.ts', - 'db/schema.d.ts', + '**/worker-configuration.d.ts', + '**/db/schema.d.ts', ], }, ); diff --git a/template_builder/templates/base/package.json b/template_builder/templates/base/package.json index 43d0aaad..f36c61d7 100644 --- a/template_builder/templates/base/package.json +++ b/template_builder/templates/base/package.json @@ -2,6 +2,9 @@ "name": "template", "version": "0.0.0", "type": "module", + "imports": { + "#lib/*": "./src/lib/*" + }, "scripts": { "dev": "vite dev", "build": "vite build", @@ -10,13 +13,11 @@ "check": "svelte-kit sync && svelte-check --incremental --tsgo", "fmt": "oxfmt ." }, - "imports": { - "#lib/*": "./src/lib/*" - }, "dependencies": {}, "devDependencies": { "@eslint/js": "^10.0.1", "@sveltejs/adapter-auto": "^8.0.0-next.2", + "@sveltejs/load-config": "^0.2.1", "@sveltejs/kit": "^3.0.0-next.14", "@typescript/native": "npm:typescript@^7.0.2", "autoprefixer": "^10.5.4", diff --git a/template_builder/templates/base/src/app.html b/template_builder/templates/base/src/app.html index 0052a49f..8833162e 100644 --- a/template_builder/templates/base/src/app.html +++ b/template_builder/templates/base/src/app.html @@ -1,16 +1,14 @@ - + + + + __o7__name__ + + + %sveltekit.head% + - - - __o7__name__ - - - %sveltekit.head% - - - -
%sveltekit.body%
- - + +
%sveltekit.body%
+ diff --git a/template_builder/templates/base/tsconfig.json b/template_builder/templates/base/tsconfig.json index 00ef9b61..fb29be3c 100644 --- a/template_builder/templates/base/tsconfig.json +++ b/template_builder/templates/base/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "$app/tsconfig", - "include": ["src"] + "include": ["src", "*.config.ts"] } diff --git a/template_builder/templates/extras/prisma/{Turso}push.ts b/template_builder/templates/extras/prisma/{Turso}push.ts index 3e18b24c..75394e85 100644 --- a/template_builder/templates/extras/prisma/{Turso}push.ts +++ b/template_builder/templates/extras/prisma/{Turso}push.ts @@ -28,14 +28,12 @@ try { } // 1. Pull current schema -const current = await client.execute( - "SELECT * FROM sqlite_schema WHERE name != 'sqlite_sequence'", -); +const current = await client.execute("SELECT * FROM sqlite_schema WHERE name != 'sqlite_sequence'"); // 2. create dummy db with that schema const db = new Database(temp_db); for (const item of current.rows) { - if (item.sql && item.sql !== 'null') { + if (typeof item.sql === 'string' && item.sql !== 'null') { db.prepare(item.sql).run(); } } diff --git a/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts b/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts index 9195cc07..33dd1f40 100644 --- a/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts +++ b/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts @@ -1,5 +1,5 @@ -import { initDb } from '$lib/db'; -import { initAuth, validateSessionToken } from '$lib/auth'; +import { initDb } from '#lib/db'; +import { initAuth, validateSessionToken } from '#lib/auth'; import { dev } from '$app/env'; export async function handle({ event, resolve }) { diff --git a/template_builder/templates/extras/{D1,Turso}tsconfig.json b/template_builder/templates/extras/{D1,Turso}tsconfig.json new file mode 100644 index 00000000..48afced1 --- /dev/null +++ b/template_builder/templates/extras/{D1,Turso}tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "$app/tsconfig", + "include": ["src", "*.config.ts", "prisma/push.ts"] +} From a70fd87b942c8841f55c4b5bafd1544c4d869743 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 6 Aug 2026 21:25:57 -0700 Subject: [PATCH 19/34] ignore test.log --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 28884dd1..4217ff0e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ target /my-o7-app node_modules +test.log From e9e76e175f386a850cc7d73ea60490c644eaf17f Mon Sep 17 00:00:00 2001 From: Ottomated Date: Fri, 7 Aug 2026 10:00:13 -0700 Subject: [PATCH 20/34] feat: remove better-sqlite3 dependency for D1 and Turso --- template_builder/templates/extras/prisma/{D1}push.ts | 8 ++++---- template_builder/templates/extras/prisma/{Turso}push.ts | 8 ++++---- template_builder/templates/extras/{D1}package.json | 4 ---- .../templates/extras/{Pnpm,D1|Turso}pnpm-workspace.yaml | 3 +++ .../extras/{Pnpm,Edge,D1|Turso}pnpm-workspace.yaml | 5 +++++ ...rkspace.yaml => {Pnpm,Edge,Sqlite}pnpm-workspace.yaml} | 0 ...pm-workspace.yaml => {Pnpm,Sqlite}pnpm-workspace.yaml} | 2 +- template_builder/templates/extras/{Sqlite}package.json | 6 ------ template_builder/templates/extras/{Turso}package.json | 4 ---- 9 files changed, 17 insertions(+), 23 deletions(-) create mode 100644 template_builder/templates/extras/{Pnpm,D1|Turso}pnpm-workspace.yaml create mode 100644 template_builder/templates/extras/{Pnpm,Edge,D1|Turso}pnpm-workspace.yaml rename template_builder/templates/extras/{{Pnpm,Edge,D1|Sqlite|Turso}pnpm-workspace.yaml => {Pnpm,Edge,Sqlite}pnpm-workspace.yaml} (100%) rename template_builder/templates/extras/{{Pnpm,D1|Sqlite|Turso}pnpm-workspace.yaml => {Pnpm,Sqlite}pnpm-workspace.yaml} (100%) diff --git a/template_builder/templates/extras/prisma/{D1}push.ts b/template_builder/templates/extras/prisma/{D1}push.ts index 0e06d120..6a868f52 100644 --- a/template_builder/templates/extras/prisma/{D1}push.ts +++ b/template_builder/templates/extras/prisma/{D1}push.ts @@ -1,8 +1,8 @@ import { spawnSync } from 'node:child_process'; -import Database from 'better-sqlite3'; +import { unlinkSync, writeFileSync } from 'node:fs'; import { resolve } from 'node:path'; import { loadEnvFile } from 'node:process'; -import { unlinkSync, writeFileSync } from 'node:fs'; +import { DatabaseSync } from 'node:sqlite'; import { fileURLToPath } from 'node:url'; loadEnvFile(); @@ -57,10 +57,10 @@ if (current_res.error) { const current = current_res[0].results; // 2. create dummy db with that schema -const db = new Database(temp_db); +const db = new DatabaseSync(temp_db); for (const item of current) { if (item.sql && item.sql !== 'null') { - db.prepare(item.sql).run(); + db.exec(item.sql); } } db.close(); diff --git a/template_builder/templates/extras/prisma/{Turso}push.ts b/template_builder/templates/extras/prisma/{Turso}push.ts index 75394e85..2839047a 100644 --- a/template_builder/templates/extras/prisma/{Turso}push.ts +++ b/template_builder/templates/extras/prisma/{Turso}push.ts @@ -1,8 +1,8 @@ import { spawnSync } from 'node:child_process'; -import Database from 'better-sqlite3'; +import { unlinkSync } from 'node:fs'; import { resolve } from 'node:path'; import { loadEnvFile } from 'node:process'; -import { unlinkSync } from 'node:fs'; +import { DatabaseSync } from 'node:sqlite'; import { fileURLToPath } from 'node:url'; import { createClient } from '@libsql/client'; @@ -31,10 +31,10 @@ try { const current = await client.execute("SELECT * FROM sqlite_schema WHERE name != 'sqlite_sequence'"); // 2. create dummy db with that schema -const db = new Database(temp_db); +const db = new DatabaseSync(temp_db); for (const item of current.rows) { if (typeof item.sql === 'string' && item.sql !== 'null') { - db.prepare(item.sql).run(); + db.exec(item.sql); } } db.close(); diff --git a/template_builder/templates/extras/{D1}package.json b/template_builder/templates/extras/{D1}package.json index 20c22892..be9677fa 100644 --- a/template_builder/templates/extras/{D1}package.json +++ b/template_builder/templates/extras/{D1}package.json @@ -5,9 +5,5 @@ }, "dependencies": { "kysely-d1": "^0.4.0" - }, - "devDependencies": { - "better-sqlite3": "^13.0.3", - "@types/better-sqlite3": "^9.6.0" } } diff --git a/template_builder/templates/extras/{Pnpm,D1|Turso}pnpm-workspace.yaml b/template_builder/templates/extras/{Pnpm,D1|Turso}pnpm-workspace.yaml new file mode 100644 index 00000000..7afba986 --- /dev/null +++ b/template_builder/templates/extras/{Pnpm,D1|Turso}pnpm-workspace.yaml @@ -0,0 +1,3 @@ +allowBuilds: + prisma: true + '@prisma/engines': true diff --git a/template_builder/templates/extras/{Pnpm,Edge,D1|Turso}pnpm-workspace.yaml b/template_builder/templates/extras/{Pnpm,Edge,D1|Turso}pnpm-workspace.yaml new file mode 100644 index 00000000..413190b6 --- /dev/null +++ b/template_builder/templates/extras/{Pnpm,Edge,D1|Turso}pnpm-workspace.yaml @@ -0,0 +1,5 @@ +allowBuilds: + esbuild: true + workerd: true + prisma: true + '@prisma/engines': true diff --git a/template_builder/templates/extras/{Pnpm,Edge,D1|Sqlite|Turso}pnpm-workspace.yaml b/template_builder/templates/extras/{Pnpm,Edge,Sqlite}pnpm-workspace.yaml similarity index 100% rename from template_builder/templates/extras/{Pnpm,Edge,D1|Sqlite|Turso}pnpm-workspace.yaml rename to template_builder/templates/extras/{Pnpm,Edge,Sqlite}pnpm-workspace.yaml diff --git a/template_builder/templates/extras/{Pnpm,D1|Sqlite|Turso}pnpm-workspace.yaml b/template_builder/templates/extras/{Pnpm,Sqlite}pnpm-workspace.yaml similarity index 100% rename from template_builder/templates/extras/{Pnpm,D1|Sqlite|Turso}pnpm-workspace.yaml rename to template_builder/templates/extras/{Pnpm,Sqlite}pnpm-workspace.yaml index bf1d15ab..2053f96c 100644 --- a/template_builder/templates/extras/{Pnpm,D1|Sqlite|Turso}pnpm-workspace.yaml +++ b/template_builder/templates/extras/{Pnpm,Sqlite}pnpm-workspace.yaml @@ -1,4 +1,4 @@ allowBuilds: prisma: true - better-sqlite3: true '@prisma/engines': true + better-sqlite3: true diff --git a/template_builder/templates/extras/{Sqlite}package.json b/template_builder/templates/extras/{Sqlite}package.json index b5d54282..bf8c0089 100644 --- a/template_builder/templates/extras/{Sqlite}package.json +++ b/template_builder/templates/extras/{Sqlite}package.json @@ -1,11 +1,5 @@ { "scripts": { "db:push": "prisma db push" - }, - "dependencies": { - "better-sqlite3": "^13.0.3" - }, - "devDependencies": { - "@types/better-sqlite3": "^9.6.0" } } diff --git a/template_builder/templates/extras/{Turso}package.json b/template_builder/templates/extras/{Turso}package.json index 2464dac2..a124c803 100644 --- a/template_builder/templates/extras/{Turso}package.json +++ b/template_builder/templates/extras/{Turso}package.json @@ -5,9 +5,5 @@ "dependencies": { "kysely-libsql": "^0.7.1", "@libsql/client": "^0.17.4" - }, - "devDependencies": { - "better-sqlite3": "^13.0.3", - "@types/better-sqlite3": "^9.6.0" } } From c5883430b252ab1359f5398e6063e157e3928701 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Fri, 7 Aug 2026 10:01:03 -0700 Subject: [PATCH 21/34] fix --- template_builder/templates/extras/{Sqlite}package.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/template_builder/templates/extras/{Sqlite}package.json b/template_builder/templates/extras/{Sqlite}package.json index bf8c0089..b5d54282 100644 --- a/template_builder/templates/extras/{Sqlite}package.json +++ b/template_builder/templates/extras/{Sqlite}package.json @@ -1,5 +1,11 @@ { "scripts": { "db:push": "prisma db push" + }, + "dependencies": { + "better-sqlite3": "^13.0.3" + }, + "devDependencies": { + "@types/better-sqlite3": "^9.6.0" } } From 9be939742d34800e28b5ce963a9ed5250aea3cd7 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Fri, 7 Aug 2026 12:49:28 -0700 Subject: [PATCH 22/34] feat: revamp auth --- .github/workflows/test.yml | 2 +- README.md | 1 - template_builder/templates/config.json | 8 +- .../workflows/{Bun,Sidecar}deploy-worker.yml | 31 ---- .../workflows/{Npm,Sidecar}deploy-worker.yml | 33 ----- .../workflows/{Pnpm,Sidecar}deploy-worker.yml | 35 ----- .../prisma/{D1|Turso,Auth}schema.prisma | 13 +- .../extras/prisma/{D1|Turso}schema.prisma | 3 +- .../extras/prisma/{Sqlite,Auth}schema.prisma | 13 +- .../extras/prisma/{Sqlite}schema.prisma | 3 +- .../extras/src/lib/auth/{Auth}index.ts | 117 --------------- .../templates/extras/src/lib/db/{D1}index.ts | 18 --- .../db/{D1|Sqlite|Turso,Auth}schema.d.ts | 22 ++- .../db/{D1|Sqlite|Turso}schema.d.ts | 0 .../extras/src/lib/server/db/{D1}index.ts | 25 ++++ .../src/lib/{ => server}/db/{Sqlite}index.ts | 11 ++ .../src/lib/{ => server}/db/{Turso}index.ts | 21 +-- .../extras/src/lib/server/{Auth}auth.ts | 139 ++++++++++++++++++ .../extras/src/{Auth,D1}hooks.server.ts | 34 ----- .../src/{Auth,Sqlite|Turso|D1}hooks.server.ts | 26 ++++ .../src/{Auth,Sqlite|Turso}hooks.server.ts | 31 ---- .../templates/extras/src/{D1}hooks.server.ts | 7 - .../extras/src/{Edge,Auth,D1,Sidecar}app.d.ts | 23 --- .../extras/src/{Edge,Auth,D1}app.d.ts | 19 --- .../extras/src/{Edge,Auth,Sidecar}app.d.ts | 23 --- .../extras/src/{Edge,D1,Sidecar}app.d.ts | 19 --- .../templates/extras/src/{Edge,D1}app.d.ts | 15 -- .../extras/src/{Edge,Sidecar}app.d.ts | 19 --- .../templates/extras/{Auth}package.json | 7 - ...}tsconfig.json => {D1|Turso}tsconfig.json} | 0 30 files changed, 258 insertions(+), 460 deletions(-) delete mode 100644 template_builder/templates/extras/.github/workflows/{Bun,Sidecar}deploy-worker.yml delete mode 100644 template_builder/templates/extras/.github/workflows/{Npm,Sidecar}deploy-worker.yml delete mode 100644 template_builder/templates/extras/.github/workflows/{Pnpm,Sidecar}deploy-worker.yml delete mode 100644 template_builder/templates/extras/src/lib/auth/{Auth}index.ts delete mode 100644 template_builder/templates/extras/src/lib/db/{D1}index.ts rename template_builder/templates/extras/src/lib/{ => server}/db/{D1|Sqlite|Turso,Auth}schema.d.ts (58%) rename template_builder/templates/extras/src/lib/{ => server}/db/{D1|Sqlite|Turso}schema.d.ts (100%) create mode 100644 template_builder/templates/extras/src/lib/server/db/{D1}index.ts rename template_builder/templates/extras/src/lib/{ => server}/db/{Sqlite}index.ts (62%) rename template_builder/templates/extras/src/lib/{ => server}/db/{Turso}index.ts (66%) create mode 100644 template_builder/templates/extras/src/lib/server/{Auth}auth.ts delete mode 100644 template_builder/templates/extras/src/{Auth,D1}hooks.server.ts create mode 100644 template_builder/templates/extras/src/{Auth,Sqlite|Turso|D1}hooks.server.ts delete mode 100644 template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts delete mode 100644 template_builder/templates/extras/src/{D1}hooks.server.ts delete mode 100644 template_builder/templates/extras/src/{Edge,Auth,D1,Sidecar}app.d.ts delete mode 100644 template_builder/templates/extras/src/{Edge,Auth,D1}app.d.ts delete mode 100644 template_builder/templates/extras/src/{Edge,Auth,Sidecar}app.d.ts delete mode 100644 template_builder/templates/extras/src/{Edge,D1,Sidecar}app.d.ts delete mode 100644 template_builder/templates/extras/src/{Edge,D1}app.d.ts delete mode 100644 template_builder/templates/extras/src/{Edge,Sidecar}app.d.ts delete mode 100644 template_builder/templates/extras/{Auth}package.json rename template_builder/templates/extras/{{D1,Turso}tsconfig.json => {D1|Turso}tsconfig.json} (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c0dc17db..57af2fb4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,7 +4,7 @@ on: jobs: create-shards: - runs-on: ubuntu-latest + runs-on: ubuntu-slim permissions: {} outputs: shards: ${{ steps.shards.outputs.shards }} diff --git a/README.md b/README.md index 9304eadb..369ddd2e 100644 --- a/README.md +++ b/README.md @@ -45,4 +45,3 @@ Then, open your new app in your favorite IDE and get started! - [ ] auth user + pass option? - [ ] durable object patch - [ ] prisma 7? -- [ ] pnpm-workspace diff --git a/template_builder/templates/config.json b/template_builder/templates/config.json index d1d395e2..b5298372 100644 --- a/template_builder/templates/config.json +++ b/template_builder/templates/config.json @@ -40,16 +40,16 @@ "description": "" }, { - "id": "Sidecar", - "name": "Sidecar", - "description": "(Additional worker for websockets, etc.)", + "id": "Worker", + "name": "Custom Worker", + "description": "(Custom worker for WebSockets, etc.)", "hidden_if_not": ["Edge"], "default": false }, { "id": "Tailwind4", "name": "Tailwind 4", - "description": "(supported only by VERY modern browsers, not recommended)", + "description": "(supported only by very modern browsers)", "default": false } ] diff --git a/template_builder/templates/extras/.github/workflows/{Bun,Sidecar}deploy-worker.yml b/template_builder/templates/extras/.github/workflows/{Bun,Sidecar}deploy-worker.yml deleted file mode 100644 index a9cce85e..00000000 --- a/template_builder/templates/extras/.github/workflows/{Bun,Sidecar}deploy-worker.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Deploy Sidecar Worker - -on: - push: - branches: - - main - paths: - - 'worker/**' - - 'common/**' - - '.github/workflows/deploy-worker.yml' - - 'bun.lockb' - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v7 - - - name: Install Bun - uses: oven-sh/setup-bun@v2 - - - name: Install dependencies - working-directory: worker - run: bun install --frozen-lockfile - - - name: Deploy - working-directory: worker - run: bun run deploy - env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/template_builder/templates/extras/.github/workflows/{Npm,Sidecar}deploy-worker.yml b/template_builder/templates/extras/.github/workflows/{Npm,Sidecar}deploy-worker.yml deleted file mode 100644 index bc1e518a..00000000 --- a/template_builder/templates/extras/.github/workflows/{Npm,Sidecar}deploy-worker.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Deploy Sidecar Worker - -on: - push: - branches: - - main - paths: - - 'worker/**' - - 'common/**' - - '.github/workflows/deploy-worker.yml' - - 'package-lock.json' - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v7 - - - name: Install node - uses: actions/setup-node@v7 - with: - cache: 'npm' - - - name: Install dependencies - working-directory: worker - run: npm ci - - - name: Deploy - working-directory: worker - run: npm run deploy - env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/template_builder/templates/extras/.github/workflows/{Pnpm,Sidecar}deploy-worker.yml b/template_builder/templates/extras/.github/workflows/{Pnpm,Sidecar}deploy-worker.yml deleted file mode 100644 index 37b4051f..00000000 --- a/template_builder/templates/extras/.github/workflows/{Pnpm,Sidecar}deploy-worker.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Deploy Sidecar Worker - -on: - push: - branches: - - main - paths: - - 'worker/**' - - 'common/**' - - '.github/workflows/deploy-worker.yml' - - 'pnpm-lock.yaml' - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v7 - - - name: Install pnpm - uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 - with: - version: ^11.20.0 - runtime: node@lts - install: false - - - name: Install dependencies - working-directory: worker - run: pnpm install --frozen-lockfile - - - name: Deploy - working-directory: worker - run: pnpm run deploy - env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/template_builder/templates/extras/prisma/{D1|Turso,Auth}schema.prisma b/template_builder/templates/extras/prisma/{D1|Turso,Auth}schema.prisma index 6ac816a7..4e6c2b06 100644 --- a/template_builder/templates/extras/prisma/{D1|Turso,Auth}schema.prisma +++ b/template_builder/templates/extras/prisma/{D1|Turso,Auth}schema.prisma @@ -1,16 +1,17 @@ datasource db { provider = "sqlite" - url = "" } generator kysely { provider = "prisma-kysely" - output = "../src/lib/db" + output = "../src/lib/server/db" fileName = "schema.d.ts" } + model User { + /// @kyselyType(`u_${string}`) id String @id twitch_id String username String @@ -19,8 +20,14 @@ model User { } model Session { + /// @kyselyType(`s_${string}`) id String @id - expires_at Int + /// @kyselyType(`u_${string}`) user_id String + /// @kyselyType(Uint8Array) + hash Bytes + last_verified_at Int + created_at Int + user User @relation(fields: [user_id], references: [id]) } diff --git a/template_builder/templates/extras/prisma/{D1|Turso}schema.prisma b/template_builder/templates/extras/prisma/{D1|Turso}schema.prisma index b2360727..a9ec6d77 100644 --- a/template_builder/templates/extras/prisma/{D1|Turso}schema.prisma +++ b/template_builder/templates/extras/prisma/{D1|Turso}schema.prisma @@ -1,12 +1,11 @@ datasource db { provider = "sqlite" - url = "" } generator kysely { provider = "prisma-kysely" - output = "../src/lib/db" + output = "../src/lib/server/db" fileName = "schema.d.ts" } diff --git a/template_builder/templates/extras/prisma/{Sqlite,Auth}schema.prisma b/template_builder/templates/extras/prisma/{Sqlite,Auth}schema.prisma index bda62b2f..4e6c2b06 100644 --- a/template_builder/templates/extras/prisma/{Sqlite,Auth}schema.prisma +++ b/template_builder/templates/extras/prisma/{Sqlite,Auth}schema.prisma @@ -1,16 +1,17 @@ datasource db { provider = "sqlite" - url = env("DATABASE_URL") } generator kysely { provider = "prisma-kysely" - output = "../src/lib/db" + output = "../src/lib/server/db" fileName = "schema.d.ts" } + model User { + /// @kyselyType(`u_${string}`) id String @id twitch_id String username String @@ -19,8 +20,14 @@ model User { } model Session { + /// @kyselyType(`s_${string}`) id String @id - expires_at Int + /// @kyselyType(`u_${string}`) user_id String + /// @kyselyType(Uint8Array) + hash Bytes + last_verified_at Int + created_at Int + user User @relation(fields: [user_id], references: [id]) } diff --git a/template_builder/templates/extras/prisma/{Sqlite}schema.prisma b/template_builder/templates/extras/prisma/{Sqlite}schema.prisma index b3b21683..a9ec6d77 100644 --- a/template_builder/templates/extras/prisma/{Sqlite}schema.prisma +++ b/template_builder/templates/extras/prisma/{Sqlite}schema.prisma @@ -1,12 +1,11 @@ datasource db { provider = "sqlite" - url = env("DATABASE_URL") } generator kysely { provider = "prisma-kysely" - output = "../src/lib/db" + output = "../src/lib/server/db" fileName = "schema.d.ts" } diff --git a/template_builder/templates/extras/src/lib/auth/{Auth}index.ts b/template_builder/templates/extras/src/lib/auth/{Auth}index.ts deleted file mode 100644 index cfa6e245..00000000 --- a/template_builder/templates/extras/src/lib/auth/{Auth}index.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { Twitch } from 'arctic'; -import { - encodeBase32LowerCaseNoPadding, - encodeHexLowerCase, -} from '@oslojs/encoding'; -import { sha256 } from '@oslojs/crypto/sha2'; -import { generateRandomString, type RandomReader } from '@oslojs/crypto/random'; -import type { Selectable } from 'kysely'; -import { db } from '#lib/db'; -import { CLIENT_ID, CLIENT_SECRET } from '$app/env/private'; -import type { DB } from '#lib/db/schema'; - -const ONE_DAY = 1000 * 60 * 60 * 24; - -const random: RandomReader = { - read(bytes: Uint8Array): void { - crypto.getRandomValues(bytes); - }, -}; - -export function generateId(length = 15): string { - return generateRandomString( - random, - 'abcdefghijklmnopqrstuvwxyz0123456789', - length, - ); -} - -export function generateSessionToken(): string { - const bytes = new Uint8Array(20); - crypto.getRandomValues(bytes); - const token = encodeBase32LowerCaseNoPadding(bytes); - return token; -} - -export async function createSession( - token: string, - userId: string, -): Promise { - const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token))); - const session: Session = { - id: sessionId, - userId, - expiresAt: new Date(Date.now() + ONE_DAY * 7), - }; - await db - .insertInto('Session') - .values({ - id: session.id, - user_id: session.userId, - expires_at: Math.floor(session.expiresAt.getTime() / 1000), - }) - .execute(); - return session; -} - -export async function validateSessionToken( - token: string, -): Promise { - const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token))); - const row = await db - .selectFrom('Session as s') - .innerJoin('User as u', 'u.id', 's.user_id') - .select(['s.id', 's.user_id', 's.expires_at', 'u.twitch_id', 'u.username']) - .where('s.id', '=', sessionId) - .executeTakeFirst(); - if (!row) { - return { session: null, user: null }; - } - const session: Session = { - id: row.id, - userId: row.user_id, - expiresAt: new Date(row.expires_at * 1000), - }; - if (Date.now() >= session.expiresAt.getTime()) { - await db.deleteFrom('Session').where('id', '=', session.id).execute(); - return { session: null, user: null }; - } - const user: User = { - id: row.user_id, - twitch_id: row.twitch_id, - username: row.username, - }; - if (Date.now() >= session.expiresAt.getTime() - ONE_DAY * 15) { - session.expiresAt = new Date(Date.now() + ONE_DAY * 30); - await db - .updateTable('Session') - .set({ - expires_at: Math.floor(session.expiresAt.getTime() / 1000), - }) - .where('id', '=', session.id) - .execute(); - } - return { session, user }; -} - -export async function invalidateSession(sessionId: string): Promise { - await db.deleteFrom('Session').where('id', '=', sessionId).execute(); -} - -export type SessionValidationResult = - | { session: Session; user: User } - | { session: null; user: null }; - -export interface Session { - id: string; - userId: string; - expiresAt: Date; -} - -export type User = Selectable; - -export let twitch: Twitch; -export function initAuth(origin: string) { - if (twitch) return; - twitch = new Twitch(CLIENT_ID, CLIENT_SECRET, origin + '/api/auth/callback'); -} diff --git a/template_builder/templates/extras/src/lib/db/{D1}index.ts b/template_builder/templates/extras/src/lib/db/{D1}index.ts deleted file mode 100644 index ddad5200..00000000 --- a/template_builder/templates/extras/src/lib/db/{D1}index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Kysely, type RawBuilder, sql } from 'kysely'; -import { D1Dialect } from 'kysely-d1'; -import type { DB } from './schema'; - -export let db: Kysely; - -export function initDb(database: D1Database) { - if (db) return; - db = new Kysely({ - dialect: new D1Dialect({ - database, - }), - }); -} - -export function json(obj: T): RawBuilder { - return sql`${JSON.stringify(obj)}`; -} diff --git a/template_builder/templates/extras/src/lib/db/{D1|Sqlite|Turso,Auth}schema.d.ts b/template_builder/templates/extras/src/lib/server/db/{D1|Sqlite|Turso,Auth}schema.d.ts similarity index 58% rename from template_builder/templates/extras/src/lib/db/{D1|Sqlite|Turso,Auth}schema.d.ts rename to template_builder/templates/extras/src/lib/server/db/{D1|Sqlite|Turso,Auth}schema.d.ts index b494d043..feb01f98 100644 --- a/template_builder/templates/extras/src/lib/db/{D1|Sqlite|Turso,Auth}schema.d.ts +++ b/template_builder/templates/extras/src/lib/server/db/{D1|Sqlite|Turso,Auth}schema.d.ts @@ -6,12 +6,26 @@ export type Generated = export type Timestamp = ColumnType; export type Session = { - id: string; - expires_at: number; - user_id: string; + /** + * @kyselyType(`s_${string}`) + */ + id: `s_${string}`; + /** + * @kyselyType(`u_${string}`) + */ + user_id: `u_${string}`; + /** + * @kyselyType(Uint8Array) + */ + hash: Uint8Array; + last_verified_at: number; + created_at: number; }; export type User = { - id: string; + /** + * @kyselyType(`u_${string}`) + */ + id: `u_${string}`; twitch_id: string; username: string; }; diff --git a/template_builder/templates/extras/src/lib/db/{D1|Sqlite|Turso}schema.d.ts b/template_builder/templates/extras/src/lib/server/db/{D1|Sqlite|Turso}schema.d.ts similarity index 100% rename from template_builder/templates/extras/src/lib/db/{D1|Sqlite|Turso}schema.d.ts rename to template_builder/templates/extras/src/lib/server/db/{D1|Sqlite|Turso}schema.d.ts diff --git a/template_builder/templates/extras/src/lib/server/db/{D1}index.ts b/template_builder/templates/extras/src/lib/server/db/{D1}index.ts new file mode 100644 index 00000000..55cabed3 --- /dev/null +++ b/template_builder/templates/extras/src/lib/server/db/{D1}index.ts @@ -0,0 +1,25 @@ +import { Kysely, type RawBuilder, sql } from 'kysely'; +import { D1Dialect } from 'kysely-d1'; +import type { DB } from './schema'; +import * as v from 'valibot'; +import { env } from 'cloudflare:workers'; + +export const db = Kysely({ + dialect: new D1Dialect({ + database: env.DB, + }), +}) + +export function json(obj: T): RawBuilder { + return sql`${JSON.stringify(obj)}`; +} + +export function check_id(prefix: Prefix) { + return v.startsWith(prefix + '_') as v.BaseValidation< + string, + `${Prefix}_${string}`, + v.StartsWithIssue + >; +} + +export type { DB }; diff --git a/template_builder/templates/extras/src/lib/db/{Sqlite}index.ts b/template_builder/templates/extras/src/lib/server/db/{Sqlite}index.ts similarity index 62% rename from template_builder/templates/extras/src/lib/db/{Sqlite}index.ts rename to template_builder/templates/extras/src/lib/server/db/{Sqlite}index.ts index ff9487a5..f8a6c0c6 100644 --- a/template_builder/templates/extras/src/lib/db/{Sqlite}index.ts +++ b/template_builder/templates/extras/src/lib/server/db/{Sqlite}index.ts @@ -2,6 +2,7 @@ import { Kysely, type RawBuilder, sql, SqliteDialect } from 'kysely'; import Database from 'better-sqlite3'; import { DATABASE_URL } from '$app/env/private'; import type { DB } from './schema'; +import * as v from 'valibot'; export const sqlite = new Database(DATABASE_URL); @@ -14,3 +15,13 @@ export const db = new Kysely({ export function json(obj: T): RawBuilder { return sql`${JSON.stringify(obj)}`; } + +export function check_id(prefix: Prefix) { + return v.startsWith(prefix + '_') as v.BaseValidation< + string, + `${Prefix}_${string}`, + v.StartsWithIssue + >; +} + +export type { DB }; diff --git a/template_builder/templates/extras/src/lib/db/{Turso}index.ts b/template_builder/templates/extras/src/lib/server/db/{Turso}index.ts similarity index 66% rename from template_builder/templates/extras/src/lib/db/{Turso}index.ts rename to template_builder/templates/extras/src/lib/server/db/{Turso}index.ts index 6f92e0ac..858be571 100644 --- a/template_builder/templates/extras/src/lib/db/{Turso}index.ts +++ b/template_builder/templates/extras/src/lib/server/db/{Turso}index.ts @@ -1,17 +1,9 @@ import { Kysely, type RawBuilder, sql } from 'kysely'; import { LibsqlDialect } from 'kysely-libsql'; import type { DB } from './schema'; -import { dev } from '$app/env'; import { TURSO_TOKEN, TURSO_URL } from '$app/env/private'; import { createClient } from '@libsql/client'; - -if (!TURSO_URL || !TURSO_TOKEN) { - if (dev) { - throw new Error('TURSO_URL and TURSO_TOKEN must be set'); - } else { - console.warn('TURSO_URL and TURSO_TOKEN must be set'); - } -} +import * as v from 'valibot'; export const db_client = createClient({ url: TURSO_URL, @@ -25,3 +17,14 @@ export const db = new Kysely({ export function json(obj: T): RawBuilder { return sql`${JSON.stringify(obj)}`; } + +export function check_id(prefix: Prefix) { + return v.startsWith(prefix + '_') as v.BaseValidation< + string, + `${Prefix}_${string}`, + v.StartsWithIssue + >; +} + +export type { DB }; + diff --git a/template_builder/templates/extras/src/lib/server/{Auth}auth.ts b/template_builder/templates/extras/src/lib/server/{Auth}auth.ts new file mode 100644 index 00000000..d7983f36 --- /dev/null +++ b/template_builder/templates/extras/src/lib/server/{Auth}auth.ts @@ -0,0 +1,139 @@ +import type { Selectable } from 'kysely'; +import { check_id, db, type DB } from '#lib/server/db'; +import * as v from 'valibot'; +import { nanoid } from 'nanoid'; + +const ONE_DAY = 1000 * 60 * 60 * 24; + +const SESSION_EXPIRES_IN = ONE_DAY * 10; + +export async function createSession( + userId: `u_${string}`, +): Promise<{ session: Session; token: string }> { + const id = `s_${nanoid()}` as const; + + const secret = new Uint8Array(32); + crypto.getRandomValues(secret); + + const secretHash = new Uint8Array(await crypto.subtle.digest('SHA-256', secret)); + + const token = `${id}.${secret.toBase64()}`; + + const now = Date.now(); + const session: Session = { + id, + userId, + expiresAt: new Date(now + SESSION_EXPIRES_IN), + }; + const unixNow = Math.floor(now / 1000); + await db + .insertInto('Session') + .values({ + id: session.id, + user_id: session.userId, + hash: secretHash, + last_verified_at: unixNow, + created_at: unixNow, + }) + .execute(); + return { session, token }; +} + +const sessionTokenSchema = v.pipe( + v.string(), + v.transform((token) => token.split('.')), + v.strictTuple([ + v.pipe(v.string(), v.length(21), check_id('s')), + v.pipe( + v.string(), + v.rawTransform(({ dataset, NEVER }) => { + try { + return Uint8Array.fromBase64(dataset.value); + } catch { + return NEVER; + } + }), + ), + ]), +); +const invalid_session = Object.freeze({ session: null, user: null }); + +export async function validateSessionToken(token: string): Promise { + const tokenResult = v.safeParse(sessionTokenSchema, token); + if (!tokenResult.success) return invalid_session; + + const [sessionId, secret] = tokenResult.output; + + const row = await db + .selectFrom('Session as s') + .innerJoin('User as u', 'u.id', 's.user_id') + .select(['s.id', 's.user_id', 's.hash', 's.last_verified_at', 'u.twitch_id', 'u.username']) + .where('s.id', '=', sessionId) + .executeTakeFirst(); + + if (!row) { + return invalid_session; + } + + const now = Date.now(); + const sinceLastVerified = now - row.last_verified_at * 1000; + if (sinceLastVerified >= SESSION_EXPIRES_IN) { + await invalidateSession(row.id); + return invalid_session; + } + + const secretHash = new Uint8Array(await crypto.subtle.digest('SHA-256', secret)); + const secretCorrect = constantTimeEqual(secretHash, row.hash); + if (!secretCorrect) { + return { session: null, user: null }; + } + + if (sinceLastVerified >= 60 * 60 * 1000) { + row.last_verified_at = Math.floor(now / 1000); + await db + .updateTable('Session') + .set({ + last_verified_at: row.last_verified_at, + }) + .where('id', '=', row.id) + .execute(); + } + + return { + session: { + id: row.id, + userId: row.user_id, + expiresAt: new Date(row.last_verified_at + SESSION_EXPIRES_IN), + }, + user: { + id: row.user_id, + twitch_id: row.twitch_id, + username: row.username, + }, + }; +} + +export async function invalidateSession(sessionId: `s_${string}`): Promise { + await db.deleteFrom('Session').where('id', '=', sessionId).execute(); +} + +function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean { + if (a.byteLength !== b.byteLength) { + return false; + } + let c = 0; + for (let i = 0; i < a.byteLength; i++) { + c |= a[i] ^ b[i]; + } + return c === 0; +} + +export type SessionValidationResult = { session: Session; user: User } | typeof invalid_session; + +export type Session = { + id: `s_${string}`; + userId: `u_${string}`; + expiresAt: Date; +}; + +export type User = Selectable; diff --git a/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts b/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts deleted file mode 100644 index 33dd1f40..00000000 --- a/template_builder/templates/extras/src/{Auth,D1}hooks.server.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { initDb } from '#lib/db'; -import { initAuth, validateSessionToken } from '#lib/auth'; -import { dev } from '$app/env'; - -export async function handle({ event, resolve }) { - const db = event.platform!.env.DB; - initAuth(event.url.origin); - initDb(db); - const sessionToken = event.cookies.get('session'); - if (!sessionToken) { - event.locals.user = null; - event.locals.session = null; - return resolve(event); - } - - const { session, user } = await validateSessionToken(sessionToken); - if (session) { - event.cookies.set('session', sessionToken, { - path: '/', - httpOnly: true, - sameSite: 'lax', - expires: session.expiresAt, - secure: !dev, - }); - } else { - event.cookies.delete('session', { - path: '/', - }); - } - - event.locals.user = user; - event.locals.session = session; - return resolve(event); -} diff --git a/template_builder/templates/extras/src/{Auth,Sqlite|Turso|D1}hooks.server.ts b/template_builder/templates/extras/src/{Auth,Sqlite|Turso|D1}hooks.server.ts new file mode 100644 index 00000000..2054d7fe --- /dev/null +++ b/template_builder/templates/extras/src/{Auth,Sqlite|Turso|D1}hooks.server.ts @@ -0,0 +1,26 @@ +import { validateSessionToken } from '#lib/auth'; +import { dev } from '$app/env'; + +export async function handle({ event, resolve }) { + const sessionToken = event.cookies.get('session'); + if (!sessionToken) { + event.locals.user = null; + event.locals.session = null; + } else { + const { session, user } = await validateSessionToken(sessionToken); + if (session) { + event.cookies.set('session', sessionToken, { + httpOnly: true, + sameSite: 'lax', + expires: session.expiresAt, + secure: !dev, + }); + } else { + event.cookies.delete('session'); + } + event.locals.user = user; + event.locals.session = session; + } + + return resolve(event); +} diff --git a/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts b/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts deleted file mode 100644 index 6d5c502d..00000000 --- a/template_builder/templates/extras/src/{Auth,Sqlite|Turso}hooks.server.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { initAuth, validateSessionToken } from '#lib/auth'; -import { dev } from '$app/env'; - -export async function handle({ event, resolve }) { - initAuth(event.url.origin); - const sessionToken = event.cookies.get('session'); - if (!sessionToken) { - event.locals.user = null; - event.locals.session = null; - return resolve(event); - } - - const { session, user } = await validateSessionToken(sessionToken); - if (session) { - event.cookies.set('session', sessionToken, { - path: '/', - httpOnly: true, - sameSite: 'lax', - expires: session.expiresAt, - secure: !dev, - }); - } else { - event.cookies.delete('session', { - path: '/', - }); - } - - event.locals.user = user; - event.locals.session = session; - return resolve(event); -} diff --git a/template_builder/templates/extras/src/{D1}hooks.server.ts b/template_builder/templates/extras/src/{D1}hooks.server.ts deleted file mode 100644 index 4283a90e..00000000 --- a/template_builder/templates/extras/src/{D1}hooks.server.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { initDb } from '#lib/db'; - -export async function handle({ event, resolve }) { - const db = event.platform!.env.DB; - initDb(db); - return resolve(event); -} diff --git a/template_builder/templates/extras/src/{Edge,Auth,D1,Sidecar}app.d.ts b/template_builder/templates/extras/src/{Edge,Auth,D1,Sidecar}app.d.ts deleted file mode 100644 index de849407..00000000 --- a/template_builder/templates/extras/src/{Edge,Auth,D1,Sidecar}app.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare global { - namespace App { - interface Platform { - env: Cloudflare.Env & { - SOCKET_OBJECT: DurableObjectNamespace< - import('../worker/src/worker').SocketObject - >; - }; - ctx: ExecutionContext; - } - - interface Locals { - user: import('#lib/auth').User | null; - session: import('#lib/auth').Session | null; - } - - // interface Error {} - // interface PageData {} - // interface PageState {} - } -} - -export {}; diff --git a/template_builder/templates/extras/src/{Edge,Auth,D1}app.d.ts b/template_builder/templates/extras/src/{Edge,Auth,D1}app.d.ts deleted file mode 100644 index 7d15f326..00000000 --- a/template_builder/templates/extras/src/{Edge,Auth,D1}app.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -declare global { - namespace App { - interface Platform { - env: Cloudflare.Env; - ctx: ExecutionContext; - } - - interface Locals { - user: import('#lib/auth').User | null; - session: import('#lib/auth').Session | null; - } - - // interface Error {} - // interface PageData {} - // interface PageState {} - } -} - -export {}; diff --git a/template_builder/templates/extras/src/{Edge,Auth,Sidecar}app.d.ts b/template_builder/templates/extras/src/{Edge,Auth,Sidecar}app.d.ts deleted file mode 100644 index de849407..00000000 --- a/template_builder/templates/extras/src/{Edge,Auth,Sidecar}app.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare global { - namespace App { - interface Platform { - env: Cloudflare.Env & { - SOCKET_OBJECT: DurableObjectNamespace< - import('../worker/src/worker').SocketObject - >; - }; - ctx: ExecutionContext; - } - - interface Locals { - user: import('#lib/auth').User | null; - session: import('#lib/auth').Session | null; - } - - // interface Error {} - // interface PageData {} - // interface PageState {} - } -} - -export {}; diff --git a/template_builder/templates/extras/src/{Edge,D1,Sidecar}app.d.ts b/template_builder/templates/extras/src/{Edge,D1,Sidecar}app.d.ts deleted file mode 100644 index 62c7c28e..00000000 --- a/template_builder/templates/extras/src/{Edge,D1,Sidecar}app.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -declare global { - namespace App { - interface Platform { - env: Cloudflare.Env & { - SOCKET_OBJECT: DurableObjectNamespace< - import('../worker/src/worker').SocketObject - >; - }; - ctx: ExecutionContext; - } - - // interface Locals {} - // interface Error {} - // interface PageData {} - // interface PageState {} - } -} - -export {}; diff --git a/template_builder/templates/extras/src/{Edge,D1}app.d.ts b/template_builder/templates/extras/src/{Edge,D1}app.d.ts deleted file mode 100644 index d5cb300f..00000000 --- a/template_builder/templates/extras/src/{Edge,D1}app.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -declare global { - namespace App { - interface Platform { - env: Cloudflare.Env; - ctx: ExecutionContext; - } - - // interface Locals {} - // interface Error {} - // interface PageData {} - // interface PageState {} - } -} - -export {}; diff --git a/template_builder/templates/extras/src/{Edge,Sidecar}app.d.ts b/template_builder/templates/extras/src/{Edge,Sidecar}app.d.ts deleted file mode 100644 index 62c7c28e..00000000 --- a/template_builder/templates/extras/src/{Edge,Sidecar}app.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -declare global { - namespace App { - interface Platform { - env: Cloudflare.Env & { - SOCKET_OBJECT: DurableObjectNamespace< - import('../worker/src/worker').SocketObject - >; - }; - ctx: ExecutionContext; - } - - // interface Locals {} - // interface Error {} - // interface PageData {} - // interface PageState {} - } -} - -export {}; diff --git a/template_builder/templates/extras/{Auth}package.json b/template_builder/templates/extras/{Auth}package.json deleted file mode 100644 index eb939eb7..00000000 --- a/template_builder/templates/extras/{Auth}package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "dependencies": { - "arctic": "^3.7.0", - "@oslojs/crypto": "^1.0.1", - "@oslojs/encoding": "^1.1.0" - } -} diff --git a/template_builder/templates/extras/{D1,Turso}tsconfig.json b/template_builder/templates/extras/{D1|Turso}tsconfig.json similarity index 100% rename from template_builder/templates/extras/{D1,Turso}tsconfig.json rename to template_builder/templates/extras/{D1|Turso}tsconfig.json From cf5622510fc61f974fa5567b2dca63d0bbf39a1d Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 22 Oct 2026 12:54:16 -0700 Subject: [PATCH 23/34] chore: update dependencies --- .ottotime | 11 +++++++ template_builder/templates/base/package.json | 30 +++++++++---------- .../extras/{D1|Sqlite|Turso}package.json | 6 ++-- .../templates/extras/{Edge,D1}wrangler.jsonc | 2 +- .../templates/extras/{Edge}package.json | 6 ++-- .../templates/extras/{Edge}wrangler.jsonc | 2 +- .../templates/extras/{Turso}package.json | 2 +- 7 files changed, 35 insertions(+), 24 deletions(-) diff --git a/.ottotime b/.ottotime index 5e9123fc..15702b48 100644 --- a/.ottotime +++ b/.ottotime @@ -26,6 +26,9 @@ 1747514034- 1:49 1748215040- 58:02 1748218572- 4:53 +1748285002- 2:57 +1748285200- 0:02 +1748285205- 10:56 1748549996- 5:20 1748554743- 0:17 1748554945- 4:14 @@ -36,3 +39,11 @@ 1785980576- 7:05 1785981379- 3:54 1785984991- 12:17 +1786211122- 2:25 +1786211810- 0:07 +1786223154- 4:38 +1787953396- 1:34 +1788301377- 3:15 +1789508580- 3:24 +1792693235- 2:35 +1792698763- 1:30 diff --git a/template_builder/templates/base/package.json b/template_builder/templates/base/package.json index f36c61d7..870fd66e 100644 --- a/template_builder/templates/base/package.json +++ b/template_builder/templates/base/package.json @@ -16,22 +16,22 @@ "dependencies": {}, "devDependencies": { "@eslint/js": "^10.0.1", - "@sveltejs/adapter-auto": "^8.0.0-next.2", - "@sveltejs/load-config": "^0.2.1", - "@sveltejs/kit": "^3.0.0-next.14", - "@typescript/native": "npm:typescript@^7.0.2", - "autoprefixer": "^10.5.4", - "eslint": "^10.8.0", - "eslint-plugin-svelte": "^3.22.0", - "globals": "^17.9.0", - "oxfmt": "^0.62.0", - "postcss": "^8.5.26", + "@sveltejs/adapter-auto": "^8.0.0", + "@sveltejs/load-config": "^0.2.3", + "@sveltejs/kit": "^3.1.0", + "@typescript/native": "npm:typescript@^7.0.2", + "autoprefixer": "^10.6.1", + "eslint": "^10.13.0", + "eslint-plugin-svelte": "^3.23.1", + "globals": "^17.13.0", + "oxfmt": "^0.74.0", + "postcss": "^8.5.31", "postcss-load-config": "^6.0.1", - "svelte": "^5.56.8", - "svelte-check": "^4.7.4", + "svelte": "^5.57.2", + "svelte-check": "^4.7.7", "tailwindcss": "^3.4.19", - "typescript": "npm:@typescript/typescript6@^6.0.2", - "typescript-eslint": "^8.66.0", - "vite": "^8.2.1" + "typescript": "npm:@typescript/typescript6@^6.0.2", + "typescript-eslint": "^8.72.0", + "vite": "^8.3.5" } } diff --git a/template_builder/templates/extras/{D1|Sqlite|Turso}package.json b/template_builder/templates/extras/{D1|Sqlite|Turso}package.json index b43c9983..ec31a7d0 100644 --- a/template_builder/templates/extras/{D1|Sqlite|Turso}package.json +++ b/template_builder/templates/extras/{D1|Sqlite|Turso}package.json @@ -1,9 +1,9 @@ { "dependencies": { - "kysely": "^0.29.4" + "kysely": "^0.29.7" }, "devDependencies": { - "prisma-kysely": "^3.1.1", - "prisma": "^7.9.1" + "prisma-kysely": "^3.2.1", + "prisma": "^8.0.0-rc.26" } } diff --git a/template_builder/templates/extras/{Edge,D1}wrangler.jsonc b/template_builder/templates/extras/{Edge,D1}wrangler.jsonc index 84343ace..b2666ab8 100644 --- a/template_builder/templates/extras/{Edge,D1}wrangler.jsonc +++ b/template_builder/templates/extras/{Edge,D1}wrangler.jsonc @@ -2,7 +2,7 @@ "$schema": "node_modules/wrangler/config-schema.json", "name": "__o7__name__", "main": "./.svelte-kit/cloudflare/_worker.js", - "compatibility_date": "2026-08-04", + "compatibility_date": "2026-10-22", "compatibility_flags": ["nodejs_als"], "observability": { "enabled": true diff --git a/template_builder/templates/extras/{Edge}package.json b/template_builder/templates/extras/{Edge}package.json index ad40c37d..0a1d5311 100644 --- a/template_builder/templates/extras/{Edge}package.json +++ b/template_builder/templates/extras/{Edge}package.json @@ -3,9 +3,9 @@ "typegen": "wrangler types src/worker-configuration.d.ts" }, "devDependencies": { - "@sveltejs/adapter-cloudflare": "^8.0.0-next.4", - "@types/node": "^26.1.2", - "wrangler": "^4.119.0", + "@sveltejs/adapter-cloudflare": "^8.0.1", + "@types/node": "^26.6.5", + "wrangler": "^4.152.0", "@sveltejs/adapter-auto": null } } diff --git a/template_builder/templates/extras/{Edge}wrangler.jsonc b/template_builder/templates/extras/{Edge}wrangler.jsonc index 48adf65f..d3dea8c3 100644 --- a/template_builder/templates/extras/{Edge}wrangler.jsonc +++ b/template_builder/templates/extras/{Edge}wrangler.jsonc @@ -2,7 +2,7 @@ "$schema": "node_modules/wrangler/config-schema.json", "name": "__o7__name__", "main": "./.svelte-kit/cloudflare/_worker.js", - "compatibility_date": "2026-08-04", + "compatibility_date": "2026-10-22", "compatibility_flags": ["nodejs_als"], "observability": { "enabled": true diff --git a/template_builder/templates/extras/{Turso}package.json b/template_builder/templates/extras/{Turso}package.json index a124c803..f7859c38 100644 --- a/template_builder/templates/extras/{Turso}package.json +++ b/template_builder/templates/extras/{Turso}package.json @@ -4,6 +4,6 @@ }, "dependencies": { "kysely-libsql": "^0.7.1", - "@libsql/client": "^0.17.4" + "@libsql/client": "^0.18.0" } } From f95944f6dda336bbd779af7fd839dfbeffbe6529 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 22 Oct 2026 14:03:36 -0700 Subject: [PATCH 24/34] feat: remove arctic dependency --- .ottotime | 5 +- Cargo.lock | 219 +++++++++--------- template_builder/templates/base/package.json | 1 + template_builder/templates/base/src/app.d.ts | 1 - template_builder/templates/base/tsconfig.json | 5 +- .../prisma/{D1|Turso,Auth}schema.prisma | 4 +- .../templates/extras/prisma/{D1}push.ts | 2 +- .../extras/prisma/{Sqlite,Auth}schema.prisma | 4 +- .../db/{D1|Sqlite|Turso,Auth}schema.d.ts | 1 + .../extras/src/lib/server/db/{D1}index.ts | 24 +- .../extras/src/lib/server/db/{Sqlite}index.ts | 27 ++- .../extras/src/lib/server/db/{Turso}index.ts | 35 +-- .../extras/src/lib/server/{Auth}auth.ts | 79 ++++--- .../extras/src/lib/{Auth}auth.remote.ts | 16 ++ .../routes/api/auth/callback/{Auth}+server.ts | 123 +++++----- .../routes/api/auth/login/{Auth}+server.ts | 33 ++- .../routes/api/auth/logout/{Auth}+server.ts | 8 - .../src/{Auth,Sqlite|Turso|D1}hooks.server.ts | 42 ++-- .../templates/extras/src/{Auth}app.d.ts | 6 +- .../templates/extras/src/{D1,Auth}env.ts | 20 +- .../templates/extras/src/{D1}env.ts | 5 - .../templates/extras/src/{Edge,Auth}app.d.ts | 9 +- .../templates/extras/src/{Edge}app.d.ts | 15 -- .../templates/extras/src/{Sqlite,Auth}env.ts | 21 +- .../templates/extras/src/{Sqlite}env.ts | 17 +- .../templates/extras/src/{Turso,Auth}env.ts | 23 +- .../templates/extras/src/{Turso}env.ts | 19 +- 27 files changed, 435 insertions(+), 329 deletions(-) create mode 100644 template_builder/templates/extras/src/lib/{Auth}auth.remote.ts delete mode 100644 template_builder/templates/extras/src/routes/api/auth/logout/{Auth}+server.ts delete mode 100644 template_builder/templates/extras/src/{D1}env.ts delete mode 100644 template_builder/templates/extras/src/{Edge}app.d.ts diff --git a/.ottotime b/.ottotime index 15702b48..2853ca17 100644 --- a/.ottotime +++ b/.ottotime @@ -46,4 +46,7 @@ 1788301377- 3:15 1789508580- 3:24 1792693235- 2:35 -1792698763- 1:30 +1792698763- 9:38 +1792699359- 31:20 +1792701540- 1:19 +1792702448- 9:15 diff --git a/Cargo.lock b/Cargo.lock index ec970616..afd9dd48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -60,15 +60,15 @@ checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "base64" -version = "0.22.1" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" [[package]] name = "bitflags" -version = "2.13.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "bytes" @@ -78,15 +78,15 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "clap" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", "clap_derive", @@ -94,9 +94,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstream", "anstyle", @@ -106,21 +106,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.4" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0" dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.9", ] [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "colorchoice" @@ -139,9 +139,9 @@ dependencies = [ [[package]] name = "cookie" -version = "0.18.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" dependencies = [ "percent-encoding", "time", @@ -216,9 +216,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" [[package]] name = "derive_more" @@ -271,7 +271,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.9", ] [[package]] @@ -297,15 +297,15 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.17.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" +checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be" [[package]] name = "equivalent" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" [[package]] name = "errno" @@ -341,17 +341,6 @@ dependencies = [ "thread_local", ] -[[package]] -name = "getrandom" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - [[package]] name = "getrandom" version = "0.4.3" @@ -399,9 +388,9 @@ checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1" [[package]] name = "icu_collections" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd" dependencies = [ "displaydoc", "potential_utf", @@ -413,9 +402,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0" dependencies = [ "displaydoc", "litemap", @@ -426,9 +415,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -440,16 +429,17 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc" [[package]] name = "icu_properties" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f" dependencies = [ + "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", @@ -460,15 +450,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf" [[package]] name = "icu_provider" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514" dependencies = [ "displaydoc", "icu_locale_core", @@ -502,9 +492,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", "hashbrown", @@ -547,15 +537,15 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "libc" -version = "0.2.189" +version = "0.2.191" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" [[package]] name = "libredox" -version = "0.1.19" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" +checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d" dependencies = [ "libc", ] @@ -568,15 +558,15 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "litrs" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" +checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70" [[package]] name = "lock_api" @@ -589,9 +579,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "memchr" @@ -601,9 +591,9 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mio" -version = "1.2.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +checksum = "1788edb87fdc09c7e26304471e2f5be8cdefb1b6930d6e3985fc02ff53bf86ee" dependencies = [ "libc", "log", @@ -672,18 +662,18 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "potential_utf" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ "zerovec", ] [[package]] name = "powerfmt" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958" [[package]] name = "proc-macro2" @@ -720,11 +710,10 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0" dependencies = [ - "getrandom 0.2.17", "libredox", "thiserror", ] @@ -740,9 +729,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -799,14 +788,14 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.9", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" dependencies = [ "itoa", "memchr", @@ -848,9 +837,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.2" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" [[package]] name = "stable_deref_trait" @@ -877,9 +866,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.3" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" dependencies = [ "proc-macro2", "quote", @@ -888,13 +877,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.9", ] [[package]] @@ -904,7 +893,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom", "once_cell", "rustix", "windows-sys", @@ -926,22 +915,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.19" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.19" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.9", ] [[package]] @@ -985,9 +974,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a" dependencies = [ "displaydoc", "zerovec", @@ -995,9 +984,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" [[package]] name = "unicode-segmentation" @@ -1013,9 +1002,9 @@ checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "ureq" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea7109cdcd5864d4eeb1b58a1648dc9bf520360d7af16ec26d0a9354bafcfc0" +checksum = "cde93ff05758a36a851a398a772b0b79a82fbe3c186a46f2696baaeaf84c966b" dependencies = [ "base64", "cookie_store", @@ -1029,9 +1018,9 @@ dependencies = [ [[package]] name = "ureq-proto" -version = "0.6.0" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e994ba84b0bd1b1b0cf92878b7ef898a5c1760108fe7b6010327e274917a808c" +checksum = "841583fc36089d7d59419568ae157f43a5a03a2e5a81ba87c77d1596ef46e922" dependencies = [ "base64", "http", @@ -1093,9 +1082,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "which" -version = "8.0.5" +version = "8.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3ef584124b911bcc3875c2f1472e80f24361ceb789bd1c62b3e9a3df9ff43c" +checksum = "bae2f2b2b816647a1cab1acc91f5bd20812d53cb344382635ec2181940c8034f" dependencies = [ "libc", ] @@ -1148,15 +1137,15 @@ dependencies = [ [[package]] name = "writeable" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "yoke" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -1165,13 +1154,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.9", "synstructure", ] @@ -1186,21 +1175,21 @@ dependencies = [ [[package]] name = "zerofrom-derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.9", "synstructure", ] [[package]] name = "zerotrie" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", "yoke", @@ -1209,9 +1198,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40" dependencies = [ "yoke", "zerofrom", @@ -1220,13 +1209,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.3" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.9", ] [[package]] diff --git a/template_builder/templates/base/package.json b/template_builder/templates/base/package.json index 870fd66e..e5a82941 100644 --- a/template_builder/templates/base/package.json +++ b/template_builder/templates/base/package.json @@ -32,6 +32,7 @@ "tailwindcss": "^3.4.19", "typescript": "npm:@typescript/typescript6@^6.0.2", "typescript-eslint": "^8.72.0", + "valibot": "^1.5.0", "vite": "^8.3.5" } } diff --git a/template_builder/templates/base/src/app.d.ts b/template_builder/templates/base/src/app.d.ts index 8ea2d3dc..f64dbdf3 100644 --- a/template_builder/templates/base/src/app.d.ts +++ b/template_builder/templates/base/src/app.d.ts @@ -1,6 +1,5 @@ declare global { namespace App { - // interface Platform {} // interface Locals {} // interface Error {} // interface PageData {} diff --git a/template_builder/templates/base/tsconfig.json b/template_builder/templates/base/tsconfig.json index fb29be3c..e89b61c5 100644 --- a/template_builder/templates/base/tsconfig.json +++ b/template_builder/templates/base/tsconfig.json @@ -1,4 +1,7 @@ { "extends": "$app/tsconfig", - "include": ["src", "*.config.ts"] + "include": ["src", "*.config.ts", "prisma/push.ts"], + "compilerOptions": { + "noUncheckedIndexedAccess": true + } } diff --git a/template_builder/templates/extras/prisma/{D1|Turso,Auth}schema.prisma b/template_builder/templates/extras/prisma/{D1|Turso,Auth}schema.prisma index 4e6c2b06..0564d5cb 100644 --- a/template_builder/templates/extras/prisma/{D1|Turso,Auth}schema.prisma +++ b/template_builder/templates/extras/prisma/{D1|Turso,Auth}schema.prisma @@ -13,8 +13,10 @@ generator kysely { model User { /// @kyselyType(`u_${string}`) id String @id - twitch_id String + + twitch_id String @unique username String + profile_image_url String sessions Session[] } diff --git a/template_builder/templates/extras/prisma/{D1}push.ts b/template_builder/templates/extras/prisma/{D1}push.ts index 6a868f52..5dfcf79e 100644 --- a/template_builder/templates/extras/prisma/{D1}push.ts +++ b/template_builder/templates/extras/prisma/{D1}push.ts @@ -107,7 +107,7 @@ writeFileSync(migration_file, migration_sql); let res; try { res = spawnSync( - `npx`, + 'npx', [ 'wrangler', 'd1', diff --git a/template_builder/templates/extras/prisma/{Sqlite,Auth}schema.prisma b/template_builder/templates/extras/prisma/{Sqlite,Auth}schema.prisma index 4e6c2b06..0564d5cb 100644 --- a/template_builder/templates/extras/prisma/{Sqlite,Auth}schema.prisma +++ b/template_builder/templates/extras/prisma/{Sqlite,Auth}schema.prisma @@ -13,8 +13,10 @@ generator kysely { model User { /// @kyselyType(`u_${string}`) id String @id - twitch_id String + + twitch_id String @unique username String + profile_image_url String sessions Session[] } diff --git a/template_builder/templates/extras/src/lib/server/db/{D1|Sqlite|Turso,Auth}schema.d.ts b/template_builder/templates/extras/src/lib/server/db/{D1|Sqlite|Turso,Auth}schema.d.ts index feb01f98..771a8d67 100644 --- a/template_builder/templates/extras/src/lib/server/db/{D1|Sqlite|Turso,Auth}schema.d.ts +++ b/template_builder/templates/extras/src/lib/server/db/{D1|Sqlite|Turso,Auth}schema.d.ts @@ -28,6 +28,7 @@ export type User = { id: `u_${string}`; twitch_id: string; username: string; + profile_image_url: string; }; export type DB = { Session: Session; diff --git a/template_builder/templates/extras/src/lib/server/db/{D1}index.ts b/template_builder/templates/extras/src/lib/server/db/{D1}index.ts index 55cabed3..a51c1844 100644 --- a/template_builder/templates/extras/src/lib/server/db/{D1}index.ts +++ b/template_builder/templates/extras/src/lib/server/db/{D1}index.ts @@ -1,10 +1,12 @@ +import { building } from '$app/env'; import { Kysely, type RawBuilder, sql } from 'kysely'; import { D1Dialect } from 'kysely-d1'; import type { DB } from './schema'; +import { customAlphabet } from 'nanoid'; import * as v from 'valibot'; import { env } from 'cloudflare:workers'; -export const db = Kysely({ +export const db = building ? (undefined as never) : Kysely({ dialect: new D1Dialect({ database: env.DB, }), @@ -14,12 +16,20 @@ export function json(obj: T): RawBuilder { return sql`${JSON.stringify(obj)}`; } -export function check_id(prefix: Prefix) { - return v.startsWith(prefix + '_') as v.BaseValidation< - string, - `${Prefix}_${string}`, - v.StartsWithIssue - >; +export function v_id(prefix: Prefix) { + return v.pipe( + v.string(), + v.startsWith(`${prefix}_`) as v.BaseValidation< + string, + `${Prefix}_${string}`, + v.StartsWithIssue + >, + ); +} + +const nanoid = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'); +export function make_id(prefix: Prefix) { + return `${prefix}_${nanoid()}` as const; } export type { DB }; diff --git a/template_builder/templates/extras/src/lib/server/db/{Sqlite}index.ts b/template_builder/templates/extras/src/lib/server/db/{Sqlite}index.ts index f8a6c0c6..6997f061 100644 --- a/template_builder/templates/extras/src/lib/server/db/{Sqlite}index.ts +++ b/template_builder/templates/extras/src/lib/server/db/{Sqlite}index.ts @@ -1,14 +1,15 @@ +import { building } from '$app/env'; import { Kysely, type RawBuilder, sql, SqliteDialect } from 'kysely'; import Database from 'better-sqlite3'; import { DATABASE_URL } from '$app/env/private'; import type { DB } from './schema'; +import { customAlphabet } from 'nanoid'; import * as v from 'valibot'; -export const sqlite = new Database(DATABASE_URL); -export const db = new Kysely({ +export const db = building ? (undefined as never) : new Kysely({ dialect: new SqliteDialect({ - database: sqlite, + database: new Database(DATABASE_URL), }), }); @@ -16,12 +17,20 @@ export function json(obj: T): RawBuilder { return sql`${JSON.stringify(obj)}`; } -export function check_id(prefix: Prefix) { - return v.startsWith(prefix + '_') as v.BaseValidation< - string, - `${Prefix}_${string}`, - v.StartsWithIssue - >; +export function v_id(prefix: Prefix) { + return v.pipe( + v.string(), + v.startsWith(`${prefix}_`) as v.BaseValidation< + string, + `${Prefix}_${string}`, + v.StartsWithIssue + >, + ); +} + +const nanoid = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'); +export function make_id(prefix: Prefix) { + return `${prefix}_${nanoid()}` as const; } export type { DB }; diff --git a/template_builder/templates/extras/src/lib/server/db/{Turso}index.ts b/template_builder/templates/extras/src/lib/server/db/{Turso}index.ts index 858be571..b6bd30e4 100644 --- a/template_builder/templates/extras/src/lib/server/db/{Turso}index.ts +++ b/template_builder/templates/extras/src/lib/server/db/{Turso}index.ts @@ -1,29 +1,36 @@ +import { building } from '$app/env'; import { Kysely, type RawBuilder, sql } from 'kysely'; import { LibsqlDialect } from 'kysely-libsql'; import type { DB } from './schema'; import { TURSO_TOKEN, TURSO_URL } from '$app/env/private'; -import { createClient } from '@libsql/client'; +import { customAlphabet } from 'nanoid'; import * as v from 'valibot'; -export const db_client = createClient({ - url: TURSO_URL, - authToken: TURSO_TOKEN, -}); - -export const db = new Kysely({ - dialect: new LibsqlDialect({ client: db_client }), +export const db = building ? (undefined as never) : new Kysely({ + dialect: new LibsqlDialect({ + url: TURSO_URL, + authToken: TURSO_TOKEN, + }), }); export function json(obj: T): RawBuilder { return sql`${JSON.stringify(obj)}`; } -export function check_id(prefix: Prefix) { - return v.startsWith(prefix + '_') as v.BaseValidation< - string, - `${Prefix}_${string}`, - v.StartsWithIssue - >; +export function v_id(prefix: Prefix) { + return v.pipe( + v.string(), + v.startsWith(`${prefix}_`) as v.BaseValidation< + string, + `${Prefix}_${string}`, + v.StartsWithIssue + >, + ); +} + +const nanoid = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'); +export function make_id(prefix: Prefix) { + return `${prefix}_${nanoid()}` as const; } export type { DB }; diff --git a/template_builder/templates/extras/src/lib/server/{Auth}auth.ts b/template_builder/templates/extras/src/lib/server/{Auth}auth.ts index d7983f36..73298081 100644 --- a/template_builder/templates/extras/src/lib/server/{Auth}auth.ts +++ b/template_builder/templates/extras/src/lib/server/{Auth}auth.ts @@ -1,56 +1,56 @@ import type { Selectable } from 'kysely'; -import { check_id, db, type DB } from '#lib/server/db'; -import * as v from 'valibot'; import { nanoid } from 'nanoid'; +import * as v from 'valibot'; +import { v_id, db, type DB } from '#lib/server/db/index.ts'; const ONE_DAY = 1000 * 60 * 60 * 24; const SESSION_EXPIRES_IN = ONE_DAY * 10; -export async function createSession( - userId: `u_${string}`, +export async function create_session( + user_id: `u_${string}`, ): Promise<{ session: Session; token: string }> { const id = `s_${nanoid()}` as const; const secret = new Uint8Array(32); crypto.getRandomValues(secret); - const secretHash = new Uint8Array(await crypto.subtle.digest('SHA-256', secret)); + const secret_hash = new Uint8Array(await crypto.subtle.digest('SHA-256', secret)); const token = `${id}.${secret.toBase64()}`; const now = Date.now(); const session: Session = { id, - userId, - expiresAt: new Date(now + SESSION_EXPIRES_IN), + user_id, + expires_at: new Date(now + SESSION_EXPIRES_IN), }; - const unixNow = Math.floor(now / 1000); + const unix_now = Math.floor(now / 1000); await db .insertInto('Session') .values({ id: session.id, - user_id: session.userId, - hash: secretHash, - last_verified_at: unixNow, - created_at: unixNow, + user_id: session.user_id, + hash: secret_hash.buffer, + last_verified_at: unix_now, + created_at: unix_now, }) .execute(); return { session, token }; } -const sessionTokenSchema = v.pipe( +const session_token_schema = v.pipe( v.string(), v.transform((token) => token.split('.')), v.strictTuple([ - v.pipe(v.string(), v.length(21), check_id('s')), + v_id('s'), v.pipe( v.string(), - v.rawTransform(({ dataset, NEVER }) => { + v.rawTransform((ctx) => { try { - return Uint8Array.fromBase64(dataset.value); + return Uint8Array.fromBase64(ctx.dataset.value); } catch { - return NEVER; + return ctx.NEVER; } }), ), @@ -58,17 +58,20 @@ const sessionTokenSchema = v.pipe( ); const invalid_session = Object.freeze({ session: null, user: null }); -export async function validateSessionToken(token: string): Promise { - const tokenResult = v.safeParse(sessionTokenSchema, token); - if (!tokenResult.success) return invalid_session; +export async function validate_session_token( + token: string | undefined, +): Promise { + if (!token) return invalid_session; + const token_result = v.safeParse(session_token_schema, token); + if (!token_result.success) return invalid_session; - const [sessionId, secret] = tokenResult.output; + const [session_id, secret] = token_result.output; const row = await db .selectFrom('Session as s') .innerJoin('User as u', 'u.id', 's.user_id') .select(['s.id', 's.user_id', 's.hash', 's.last_verified_at', 'u.twitch_id', 'u.username']) - .where('s.id', '=', sessionId) + .where('s.id', '=', session_id) .executeTakeFirst(); if (!row) { @@ -76,19 +79,19 @@ export async function validateSessionToken(token: string): Promise= SESSION_EXPIRES_IN) { - await invalidateSession(row.id); + const since_last_verified = now - row.last_verified_at * 1000; + if (since_last_verified >= SESSION_EXPIRES_IN) { + await invalidate_session(row.id); return invalid_session; } - const secretHash = new Uint8Array(await crypto.subtle.digest('SHA-256', secret)); - const secretCorrect = constantTimeEqual(secretHash, row.hash); - if (!secretCorrect) { - return { session: null, user: null }; + const secret_hash = new Uint8Array(await crypto.subtle.digest('SHA-256', secret)); + const secret_correct = constant_time_equal(secret_hash, row.hash); + if (!secret_correct) { + return invalid_session; } - if (sinceLastVerified >= 60 * 60 * 1000) { + if (since_last_verified >= 60 * 60 * 1000) { row.last_verified_at = Math.floor(now / 1000); await db .updateTable('Session') @@ -102,8 +105,8 @@ export async function validateSessionToken(token: string): Promise { - await db.deleteFrom('Session').where('id', '=', sessionId).execute(); +export async function invalidate_session(session_id: `s_${string}`): Promise { + await db.deleteFrom('Session').where('id', '=', session_id).execute(); } -function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean { +function constant_time_equal(a: Uint8Array, b: Uint8Array): boolean { if (a.byteLength !== b.byteLength) { return false; } let c = 0; for (let i = 0; i < a.byteLength; i++) { - c |= a[i] ^ b[i]; + c |= a[i]! ^ b[i]!; } return c === 0; } @@ -132,8 +135,8 @@ export type SessionValidationResult = { session: Session; user: User } | typeof export type Session = { id: `s_${string}`; - userId: `u_${string}`; - expiresAt: Date; + user_id: `u_${string}`; + expires_at: Date; }; export type User = Selectable; diff --git a/template_builder/templates/extras/src/lib/{Auth}auth.remote.ts b/template_builder/templates/extras/src/lib/{Auth}auth.remote.ts new file mode 100644 index 00000000..6d800e55 --- /dev/null +++ b/template_builder/templates/extras/src/lib/{Auth}auth.remote.ts @@ -0,0 +1,16 @@ +import { query, getRequestEvent, form } from '$app/server'; +import { redirect } from '@sveltejs/kit'; + +import { invalidate_session } from '#lib/server/auth.ts'; + +export const get_me = query(() => { + const { locals } = getRequestEvent(); + return locals.user; +}); + +export const log_out = form(async () => { + const { locals } = getRequestEvent(); + if (locals.session) await invalidate_session(locals.session.id); + + redirect(303, '/'); +}); diff --git a/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts b/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts index dc22d23a..d7c3bf6d 100644 --- a/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts +++ b/template_builder/templates/extras/src/routes/api/auth/callback/{Auth}+server.ts @@ -1,88 +1,101 @@ -import { OAuth2Tokens } from 'arctic'; -import { db } from '#lib/db'; -import { CLIENT_ID } from '$app/env/private'; -import { error, redirect } from '@sveltejs/kit'; -import { resolve } from '$app/paths'; -import { - createSession, - generateId, - generateSessionToken, - twitch, -} from '#lib/auth'; import { dev } from '$app/env'; +import { CLIENT_ID, CLIENT_SECRET } from '$app/env/private'; +import { error, redirect } from '@sveltejs/kit'; + +import { create_session } from '#lib/server/auth.js'; +import { db, make_id } from '#lib/server/db/index.js'; export const GET = async (event) => { const code = event.url.searchParams.get('code'); const state = event.url.searchParams.get('state'); - const storedState = event.cookies.get('oauth_state') ?? null; + const stored_state = event.cookies.get('oauth_state') ?? null; - if (!code || !state || !storedState || state !== storedState) { + if (!code || !state || !stored_state || state !== stored_state) { return new Response(null, { status: 400, }); } - let tokens: OAuth2Tokens; + + let tokens: { + access_token: string; + refresh_token: string; + expires_in: number; + scope?: string[]; + }; try { - tokens = await twitch.validateAuthorizationCode(code); + const res = await fetch('https://id.twitch.tv/oauth2/token', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Accept: 'application/json', + }, + body: new URLSearchParams({ + client_id: CLIENT_ID, + client_secret: CLIENT_SECRET, + code, + grant_type: 'authorization_code', + redirect_uri: `${event.url.origin}/api/auth/callback`, + }), + }); + if (res.status !== 200) { + const data = await res.json<{ error: string }>(); + throw new Error(`Failed to get access token: ${data.error}`); + } + tokens = await res.json(); } catch (err) { console.error('Invalid code or client ID', err); return error(400, 'Authentication failed'); } - const twitchUser = await fetch('https://api.twitch.tv/helix/users', { + const twitch_user = await fetch('https://api.twitch.tv/helix/users', { headers: { - Authorization: `Bearer ${tokens.accessToken()}`, + Authorization: `Bearer ${tokens.access_token}`, 'Client-ID': CLIENT_ID, }, }) - .then((r) => r.json() as Promise) + .then((r) => r.json() as Promise) .then((u) => u.data[0]); - let user = await db - .selectFrom('User') - .select('id') - .where('twitch_id', '=', twitchUser.id) - .executeTakeFirst(); + if (!twitch_user) error(400, 'No user found'); - if (!user) { - user = { - id: generateId(15), - }; - await db - .insertInto('User') - .values({ - id: user.id, - twitch_id: twitchUser.id, - username: twitchUser.display_name, - }) - .execute(); - } + await db + .insertInto('User') + .values({ + id: make_id('u'), + twitch_id: twitch_user.id, + username: twitch_user.display_name, + profile_image_url: twitch_user.profile_image_url, + }) + .onConflict((oc) => + oc.column('twitch_id').doUpdateSet((eb) => ({ + username: eb.ref('excluded.username'), + profile_image_url: eb.ref('excluded.profile_image_url'), + })), + ) + .execute(); - const sessionToken = generateSessionToken(); - const session = await createSession(sessionToken, user.id); + const { session, token } = await create_session(twitch_user.id); - event.cookies.set('session', sessionToken, { + event.cookies.set('session', token, { path: '/', httpOnly: true, sameSite: 'lax', - expires: session.expiresAt, + expires: session.expires_at, secure: !dev, }); - redirect(302, resolve('/')); + redirect(303, '/'); }; -interface TwitchUser { - data: [ - { - id: string; - login: string; - display_name: string; - type: 'admin' | 'global_mod' | 'staff' | ''; - broadcaster_type: 'partner' | 'affiliate' | ''; - description: string; - profile_image_url: string; - offline_image_url: string; - created_at: string; - }, - ]; +export interface TwitchUsers { + data: Array<{ + id: string; + login: string; + display_name: string; + type: 'admin' | 'global_mod' | 'staff' | ''; + broadcaster_type: 'partner' | 'affiliate' | ''; + description: string; + profile_image_url: string; + offline_image_url: string; + created_at: string; + }>; } diff --git a/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts b/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts index eccd9bed..3f92c7cd 100644 --- a/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts +++ b/template_builder/templates/extras/src/routes/api/auth/login/{Auth}+server.ts @@ -1,19 +1,36 @@ import { redirect } from '@sveltejs/kit'; -import { generateState } from 'arctic'; -import { twitch } from '#lib/auth'; import { dev } from '$app/env'; +import { CLIENT_ID } from '$app/env/private'; -export const GET = async (event) => { - const state = generateState(); - const url = twitch.createAuthorizationURL(state, []); +export const GET = async ({ url, cookies }) => { + const state = crypto.getRandomValues(new Uint8Array(32)).toHex(); - event.cookies.set('oauth_state', state, { - path: '/', + const params = new URLSearchParams({ + response_type: 'code', + client_id: CLIENT_ID, + state, + redirect_uri: `${url.origin}/api/auth/callback`, + scope: '', + }); + const auth_url = `https://id.twitch.tv/oauth2/authorize?${params}`; + + const to = url.searchParams.get('to'); + if (to) { + cookies.set('to', to, { + path: '/', + secure: !dev, + httpOnly: true, + maxAge: 60 * 10, + sameSite: 'lax', + }); + } + cookies.set('oauth_state', state, { + path: '/api/auth', secure: !dev, httpOnly: true, maxAge: 60 * 10, sameSite: 'lax', }); - redirect(302, url); + redirect(302, auth_url, { external: true }); }; diff --git a/template_builder/templates/extras/src/routes/api/auth/logout/{Auth}+server.ts b/template_builder/templates/extras/src/routes/api/auth/logout/{Auth}+server.ts deleted file mode 100644 index cf4da4f6..00000000 --- a/template_builder/templates/extras/src/routes/api/auth/logout/{Auth}+server.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { invalidateSession } from '#lib/auth'; -import { redirect } from '@sveltejs/kit'; -import { resolve } from '$app/paths'; - -export const GET = async ({ locals }) => { - if (locals.session) await invalidateSession(locals.session.id); - redirect(302, resolve('/')); -}; diff --git a/template_builder/templates/extras/src/{Auth,Sqlite|Turso|D1}hooks.server.ts b/template_builder/templates/extras/src/{Auth,Sqlite|Turso|D1}hooks.server.ts index 2054d7fe..78116a77 100644 --- a/template_builder/templates/extras/src/{Auth,Sqlite|Turso|D1}hooks.server.ts +++ b/template_builder/templates/extras/src/{Auth,Sqlite|Turso|D1}hooks.server.ts @@ -1,26 +1,28 @@ -import { validateSessionToken } from '#lib/auth'; import { dev } from '$app/env'; +import type { Handle } from '@sveltejs/kit/hooks'; -export async function handle({ event, resolve }) { - const sessionToken = event.cookies.get('session'); - if (!sessionToken) { - event.locals.user = null; - event.locals.session = null; +import { validate_session_token } from '#lib/server/auth.js'; + +export const handle: Handle = async ({ event, resolve }) => { + const session_token = event.cookies.get('session'); + const { session, user } = await validate_session_token(session_token); + event.locals.user = user; + event.locals.session = session; + + if (session) { + event.cookies.set('session', session_token!, { + httpOnly: true, + sameSite: 'lax', + expires: session.expires_at, + secure: !dev, + }); } else { - const { session, user } = await validateSessionToken(sessionToken); - if (session) { - event.cookies.set('session', sessionToken, { - httpOnly: true, - sameSite: 'lax', - expires: session.expiresAt, - secure: !dev, - }); - } else { - event.cookies.delete('session'); - } - event.locals.user = user; - event.locals.session = session; + event.cookies.delete('session', { + httpOnly: true, + sameSite: 'lax', + secure: !dev, + }); } return resolve(event); -} +}; diff --git a/template_builder/templates/extras/src/{Auth}app.d.ts b/template_builder/templates/extras/src/{Auth}app.d.ts index d574387b..482b60d4 100644 --- a/template_builder/templates/extras/src/{Auth}app.d.ts +++ b/template_builder/templates/extras/src/{Auth}app.d.ts @@ -1,10 +1,8 @@ declare global { namespace App { - // interface Platform {} - interface Locals { - user: import('#lib/auth').User | null; - session: import('#lib/auth').Session | null; + user: import('#lib/server/auth.ts').User | null; + session: import('#lib/server/auth.ts').Session | null; } // interface Error {} diff --git a/template_builder/templates/extras/src/{D1,Auth}env.ts b/template_builder/templates/extras/src/{D1,Auth}env.ts index a6c7f18a..22333b3b 100644 --- a/template_builder/templates/extras/src/{D1,Auth}env.ts +++ b/template_builder/templates/extras/src/{D1,Auth}env.ts @@ -1,7 +1,19 @@ -import { defineEnvVars } from '@sveltejs/kit/env'; +import { building } from '$app/env'; +import { defineEnvVars, type EnvVarConfig } from '@sveltejs/kit/env'; +import * as v from 'valibot'; + +// Helper to make variables optional while the app is building +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function runtime>(config: T): T { + if (!building) return config; + + return { + ...config, + schema: v.optional(v.string(), ''), + }; +} export const variables = defineEnvVars({ - DATABASE_NAME: {}, - CLIENT_ID: {}, - CLIENT_SECRET: {}, + CLIENT_ID: runtime({}), + CLIENT_SECRET: runtime({}), }); diff --git a/template_builder/templates/extras/src/{D1}env.ts b/template_builder/templates/extras/src/{D1}env.ts deleted file mode 100644 index e16f9fa6..00000000 --- a/template_builder/templates/extras/src/{D1}env.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { defineEnvVars } from '@sveltejs/kit/env'; - -export const variables = defineEnvVars({ - DATABASE_NAME: {}, -}); diff --git a/template_builder/templates/extras/src/{Edge,Auth}app.d.ts b/template_builder/templates/extras/src/{Edge,Auth}app.d.ts index 7d15f326..482b60d4 100644 --- a/template_builder/templates/extras/src/{Edge,Auth}app.d.ts +++ b/template_builder/templates/extras/src/{Edge,Auth}app.d.ts @@ -1,13 +1,8 @@ declare global { namespace App { - interface Platform { - env: Cloudflare.Env; - ctx: ExecutionContext; - } - interface Locals { - user: import('#lib/auth').User | null; - session: import('#lib/auth').Session | null; + user: import('#lib/server/auth.ts').User | null; + session: import('#lib/server/auth.ts').Session | null; } // interface Error {} diff --git a/template_builder/templates/extras/src/{Edge}app.d.ts b/template_builder/templates/extras/src/{Edge}app.d.ts deleted file mode 100644 index d5cb300f..00000000 --- a/template_builder/templates/extras/src/{Edge}app.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -declare global { - namespace App { - interface Platform { - env: Cloudflare.Env; - ctx: ExecutionContext; - } - - // interface Locals {} - // interface Error {} - // interface PageData {} - // interface PageState {} - } -} - -export {}; diff --git a/template_builder/templates/extras/src/{Sqlite,Auth}env.ts b/template_builder/templates/extras/src/{Sqlite,Auth}env.ts index e4b6dc8d..38dde5ce 100644 --- a/template_builder/templates/extras/src/{Sqlite,Auth}env.ts +++ b/template_builder/templates/extras/src/{Sqlite,Auth}env.ts @@ -1,7 +1,20 @@ -import { defineEnvVars } from '@sveltejs/kit/env'; +import { building } from '$app/env'; +import { defineEnvVars, type EnvVarConfig } from '@sveltejs/kit/env'; +import * as v from 'valibot'; + +// Helper to make variables optional while the app is building +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function runtime>(config: T): T { + if (!building) return config; + + return { + ...config, + schema: v.optional(v.string(), ''), + }; +} export const variables = defineEnvVars({ - DATABASE_URL: {}, - CLIENT_ID: {}, - CLIENT_SECRET: {}, + DATABASE_URL: runtime({}), + CLIENT_ID: runtime({}), + CLIENT_SECRET: runtime({}), }); diff --git a/template_builder/templates/extras/src/{Sqlite}env.ts b/template_builder/templates/extras/src/{Sqlite}env.ts index 81151634..809b3bd6 100644 --- a/template_builder/templates/extras/src/{Sqlite}env.ts +++ b/template_builder/templates/extras/src/{Sqlite}env.ts @@ -1,5 +1,18 @@ -import { defineEnvVars } from '@sveltejs/kit/env'; +import { building } from '$app/env'; +import { defineEnvVars, type EnvVarConfig } from '@sveltejs/kit/env'; +import * as v from 'valibot'; + +// Helper to make variables optional while the app is building +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function runtime>(config: T): T { + if (!building) return config; + + return { + ...config, + schema: v.optional(v.string(), ''), + }; +} export const variables = defineEnvVars({ - DATABASE_URL: {}, + DATABASE_URL: runtime({}), }); diff --git a/template_builder/templates/extras/src/{Turso,Auth}env.ts b/template_builder/templates/extras/src/{Turso,Auth}env.ts index 7f6fa403..57d1054a 100644 --- a/template_builder/templates/extras/src/{Turso,Auth}env.ts +++ b/template_builder/templates/extras/src/{Turso,Auth}env.ts @@ -1,8 +1,21 @@ -import { defineEnvVars } from '@sveltejs/kit/env'; +import { building } from '$app/env'; +import { defineEnvVars, type EnvVarConfig } from '@sveltejs/kit/env'; +import * as v from 'valibot'; + +// Helper to make variables optional while the app is building +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function runtime>(config: T): T { + if (!building) return config; + + return { + ...config, + schema: v.optional(v.string(), ''), + }; +} export const variables = defineEnvVars({ - TURSO_URL: {}, - TURSO_TOKEN: {}, - CLIENT_ID: {}, - CLIENT_SECRET: {}, + TURSO_URL: runtime({}), + TURSO_TOKEN: runtime({}), + CLIENT_ID: runtime({}), + CLIENT_SECRET: runtime({}), }); diff --git a/template_builder/templates/extras/src/{Turso}env.ts b/template_builder/templates/extras/src/{Turso}env.ts index d22efb73..5ff7693c 100644 --- a/template_builder/templates/extras/src/{Turso}env.ts +++ b/template_builder/templates/extras/src/{Turso}env.ts @@ -1,6 +1,19 @@ -import { defineEnvVars } from '@sveltejs/kit/env'; +import { building } from '$app/env'; +import { defineEnvVars, type EnvVarConfig } from '@sveltejs/kit/env'; +import * as v from 'valibot'; + +// Helper to make variables optional while the app is building +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function runtime>(config: T): T { + if (!building) return config; + + return { + ...config, + schema: v.optional(v.string(), ''), + }; +} export const variables = defineEnvVars({ - TURSO_URL: {}, - TURSO_TOKEN: {}, + TURSO_URL: runtime({}), + TURSO_TOKEN: runtime({}), }); From b502b136bb37e3c66314fc8aacf207c5b446e6cf Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 22 Oct 2026 15:25:20 -0700 Subject: [PATCH 25/34] feat: add @o7/favicon --- .ottotime | 5 ++++- README.md | 2 -- template_builder/templates/base/package.json | 1 + template_builder/templates/base/src/routes/+layout.svelte | 3 +++ template_builder/templates/base/vite.config.ts | 2 ++ .../templates/extras/{Edge,Tailwind4}vite.config.ts | 2 ++ template_builder/templates/extras/{Edge}vite.config.ts | 2 ++ template_builder/templates/extras/{Tailwind4}vite.config.ts | 2 ++ 8 files changed, 16 insertions(+), 3 deletions(-) diff --git a/.ottotime b/.ottotime index 2853ca17..c45b94d7 100644 --- a/.ottotime +++ b/.ottotime @@ -49,4 +49,7 @@ 1792698763- 9:38 1792699359- 31:20 1792701540- 1:19 -1792702448- 9:15 +1792702448- 22:12 +1792704648- 2:34 +1792705260- 13:41 +1792707730- 3:07 diff --git a/README.md b/README.md index 369ddd2e..ab0627f1 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,6 @@ Then, open your new app in your favorite IDE and get started! ## Upcoming -- [ ] zod -> valibot -- [ ] remote functions auth - [ ] auth user + pass option? - [ ] durable object patch - [ ] prisma 7? diff --git a/template_builder/templates/base/package.json b/template_builder/templates/base/package.json index e5a82941..c679beab 100644 --- a/template_builder/templates/base/package.json +++ b/template_builder/templates/base/package.json @@ -16,6 +16,7 @@ "dependencies": {}, "devDependencies": { "@eslint/js": "^10.0.1", + "@o7/favicon": "^0.0.7", "@sveltejs/adapter-auto": "^8.0.0", "@sveltejs/load-config": "^0.2.3", "@sveltejs/kit": "^3.1.0", diff --git a/template_builder/templates/base/src/routes/+layout.svelte b/template_builder/templates/base/src/routes/+layout.svelte index d6d6d225..815fbe20 100644 --- a/template_builder/templates/base/src/routes/+layout.svelte +++ b/template_builder/templates/base/src/routes/+layout.svelte @@ -1,7 +1,10 @@ + + {@render children()} diff --git a/template_builder/templates/base/vite.config.ts b/template_builder/templates/base/vite.config.ts index e40dcb70..9f547d2d 100644 --- a/template_builder/templates/base/vite.config.ts +++ b/template_builder/templates/base/vite.config.ts @@ -1,9 +1,11 @@ +import { o7Favicon } from '@o7/favicon/vite'; import adapter from '@sveltejs/adapter-auto'; import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ plugins: [ + o7Favicon({ path: './favicon.png' }), sveltekit({ adapter: adapter(), experimental: { diff --git a/template_builder/templates/extras/{Edge,Tailwind4}vite.config.ts b/template_builder/templates/extras/{Edge,Tailwind4}vite.config.ts index a57f5559..3a2b6a7e 100644 --- a/template_builder/templates/extras/{Edge,Tailwind4}vite.config.ts +++ b/template_builder/templates/extras/{Edge,Tailwind4}vite.config.ts @@ -1,3 +1,4 @@ +import { o7Favicon } from '@o7/favicon/vite'; import adapter from '@sveltejs/adapter-cloudflare'; import { sveltekit } from '@sveltejs/kit/vite'; import tailwindcss from '@tailwindcss/vite'; @@ -5,6 +6,7 @@ import { defineConfig } from 'vite'; export default defineConfig({ plugins: [ + o7Favicon({ path: './favicon.png' }), sveltekit({ adapter: adapter(), experimental: { diff --git a/template_builder/templates/extras/{Edge}vite.config.ts b/template_builder/templates/extras/{Edge}vite.config.ts index 7d727161..331c70ee 100644 --- a/template_builder/templates/extras/{Edge}vite.config.ts +++ b/template_builder/templates/extras/{Edge}vite.config.ts @@ -1,9 +1,11 @@ +import { o7Favicon } from '@o7/favicon/vite'; import adapter from '@sveltejs/adapter-cloudflare'; import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ plugins: [ + o7Favicon({ path: './favicon.png' }), sveltekit({ adapter: adapter(), experimental: { diff --git a/template_builder/templates/extras/{Tailwind4}vite.config.ts b/template_builder/templates/extras/{Tailwind4}vite.config.ts index adc05def..66f3ad97 100644 --- a/template_builder/templates/extras/{Tailwind4}vite.config.ts +++ b/template_builder/templates/extras/{Tailwind4}vite.config.ts @@ -1,3 +1,4 @@ +import { o7Favicon } from '@o7/favicon/vite'; import adapter from '@sveltejs/adapter-auto'; import { sveltekit } from '@sveltejs/kit/vite'; import tailwindcss from '@tailwindcss/vite'; @@ -5,6 +6,7 @@ import { defineConfig } from 'vite'; export default defineConfig({ plugins: [ + o7Favicon({ path: './favicon.png' }), sveltekit({ adapter: adapter(), experimental: { From 38f9a253f18e09451031c3864f3a10d251ad39da Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 22 Oct 2026 15:26:27 -0700 Subject: [PATCH 26/34] add nanoid dependency --- .ottotime | 2 +- .../templates/extras/{D1|Sqlite|Turso|Auth}package.json | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 template_builder/templates/extras/{D1|Sqlite|Turso|Auth}package.json diff --git a/.ottotime b/.ottotime index c45b94d7..6dcfb82a 100644 --- a/.ottotime +++ b/.ottotime @@ -52,4 +52,4 @@ 1792702448- 22:12 1792704648- 2:34 1792705260- 13:41 -1792707730- 3:07 +1792707730- 4:07 diff --git a/template_builder/templates/extras/{D1|Sqlite|Turso|Auth}package.json b/template_builder/templates/extras/{D1|Sqlite|Turso|Auth}package.json new file mode 100644 index 00000000..8b7f181c --- /dev/null +++ b/template_builder/templates/extras/{D1|Sqlite|Turso|Auth}package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "nanoid": "^6.0.2" + } +} From 8cffb9df187666f1975250777c78de843c183455 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 22 Oct 2026 16:48:31 -0700 Subject: [PATCH 27/34] move favicon --- .ottotime | 5 +- package.json | 2 +- pnpm-lock.yaml | 3860 ++++++++++++++++- pnpm-workspace.yaml | 5 + telemetry-server/package.json | 4 +- telemetry-server/pnpm-lock.yaml | 575 +-- .../templates/base/{static => }/favicon.png | Bin 7 files changed, 4147 insertions(+), 304 deletions(-) create mode 100644 pnpm-workspace.yaml rename template_builder/templates/base/{static => }/favicon.png (100%) diff --git a/.ottotime b/.ottotime index 6dcfb82a..fe211563 100644 --- a/.ottotime +++ b/.ottotime @@ -52,4 +52,7 @@ 1792702448- 22:12 1792704648- 2:34 1792705260- 13:41 -1792707730- 4:07 +1792707730- 6:27 +1792709535- 0:47 +1792710542- 0:11 +1792712098- 13:11 diff --git a/package.json b/package.json index 20bdcbdc..1abe37cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "devDependencies": { - "@types/node": "^26.1.2", + "@types/node": "^26.6.5", "semver": "^7.8.5", "tiny-jsonc": "^1.0.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 372f1eba..48273632 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@types/node': - specifier: ^26.1.2 - version: 26.1.2 + specifier: ^26.6.5 + version: 26.6.5 semver: specifier: ^7.8.5 version: 7.8.5 @@ -18,30 +18,3858 @@ importers: specifier: ^1.0.2 version: 1.0.2 + pkg: + dependencies: + tar: + specifier: ^7.5.22 + version: 7.5.22 + + telemetry-server: + dependencies: + valibot: + specifier: ^1.4.2 + version: 1.5.0(typescript@7.0.2) + devDependencies: + typescript: + specifier: ^7.0.2 + version: 7.0.2 + wrangler: + specifier: ^4.119.0 + version: 4.151.3(@types/node@26.6.5) + + template_builder/templates/base: + devDependencies: + '@eslint/js': + specifier: ^10.0.1 + version: 10.0.1(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2)) + '@o7/favicon': + specifier: ^0.0.7 + version: 0.0.7(@types/node@26.6.5)(svelte@5.57.2(@typescript-eslint/types@8.72.0)) + '@sveltejs/adapter-auto': + specifier: ^8.0.0 + version: 8.0.0(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)))(@typescript/typescript6@6.0.2)(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7))) + '@sveltejs/kit': + specifier: ^3.1.0 + version: 3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)))(@typescript/typescript6@6.0.2)(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)) + '@sveltejs/load-config': + specifier: ^0.2.3 + version: 0.2.3 + '@typescript/native': + specifier: npm:typescript@^7.0.2 + version: typescript@7.0.2 + autoprefixer: + specifier: ^10.6.1 + version: 10.6.1(postcss@8.5.31) + eslint: + specifier: ^10.13.0 + version: 10.13.0(jiti@1.21.7)(supports-color@10.2.2) + eslint-plugin-svelte: + specifier: ^3.23.1 + version: 3.23.1(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(svelte@5.57.2(@typescript-eslint/types@8.72.0)) + globals: + specifier: ^17.13.0 + version: 17.13.0 + oxfmt: + specifier: ^0.74.0 + version: 0.74.0(svelte@5.57.2(@typescript-eslint/types@8.72.0)) + postcss: + specifier: ^8.5.31 + version: 8.5.31 + postcss-load-config: + specifier: ^6.0.1 + version: 6.0.1(jiti@1.21.7)(postcss@8.5.31) + svelte: + specifier: ^5.57.2 + version: 5.57.2(@typescript-eslint/types@8.72.0) + svelte-check: + specifier: ^4.7.7 + version: 4.7.7(@typescript/typescript6@6.0.2)(picomatch@4.0.7)(svelte@5.57.2(@typescript-eslint/types@8.72.0)) + tailwindcss: + specifier: ^3.4.19 + version: 3.4.19 + typescript: + specifier: npm:@typescript/typescript6@^6.0.2 + version: '@typescript/typescript6@6.0.2' + typescript-eslint: + specifier: ^8.72.0 + version: 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) + valibot: + specifier: ^1.5.0 + version: 1.5.0(@typescript/typescript6@6.0.2) + vite: + specifier: ^8.3.5 + version: 8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7) + packages: - '@types/node@26.1.2': - resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} + '@alloc/quick-lru@5.3.0': + resolution: {integrity: sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==} + engines: {node: '>=10'} + + '@cacheable/memory@2.2.0': + resolution: {integrity: sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==} + + '@cacheable/utils@2.5.0': + resolution: {integrity: sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==} + + '@cloudflare/kv-asset-handler@0.5.0': + resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} + engines: {node: '>=22.0.0'} + + '@cloudflare/unenv-preset@2.16.2': + resolution: {integrity: sha512-JBP1+Z7ZSNG/d4mRP+y8VC5dka3tZVMLEZRvS+rzQ4DGV1EoxRFQckcJTTkXbHSQiTj0DtNI01Zwb/V2fX0mvQ==} + peerDependencies: + unenv: 2.0.0-rc.24 + workerd: '>1.20260305.0 <2.0.0-0' + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/workerd-darwin-64@1.20261019.1': + resolution: {integrity: sha512-5ZILbAta/fBQvhmAYeCE7dKMMYIr7N9wJEX50fEGLKSIwGtvT0HzSfHNIK/O7cBQ4gHQ2WfIiPClvwcye6E0fA==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20261019.1': + resolution: {integrity: sha512-cww2Ab6lVMxpTiEEjKmPI58p5EMo0vYTZSH+3WkqXJdQgc3ES66GuL247+U2B2YWajhhu2tqj7jySrXneU749g==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20261019.1': + resolution: {integrity: sha512-4++VRi9vkQROYqrpZYOixIJuVDmujkwrT4kszsxNFlvcmsX6Mr2GumvxIN3gIixS3vJUh3Umdtkthqj5X0S3Xw==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20261019.1': + resolution: {integrity: sha512-75PVtJOwfjScQ53sbLtQXI7D8yP1c21t+WEUPaYbqkzaz4ZqfR5wAd+zuWs8G5Q7kOj2SQIvEfY5Sn8Y+UVrnA==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20261019.1': + resolution: {integrity: sha512-z49fvKTETMCnG6wnMcQwxx9CpryFceiKz04FRjq26EkhCyzRNJ6c3UXhyZz3r5f1CXnnBZc5DcU8ZouPkUJCqw==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + + '@esbuild/aix-ppc64@0.28.2': + resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.28.2': + resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.28.2': + resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.28.2': + resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.28.2': + resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.2': + resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.28.2': + resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.2': + resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.28.2': + resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.28.2': + resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.28.2': + resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.28.2': + resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.28.2': + resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.28.2': + resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.2': + resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.28.2': + resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.28.2': + resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.28.2': + resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.2': + resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.28.2': + resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.2': + resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.28.2': + resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.28.2': + resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.28.2': + resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.28.2': + resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.28.2': + resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.10.1': + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.7.0': + resolution: {integrity: sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.7.3': + resolution: {integrity: sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.35.5': + resolution: {integrity: sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.35.5': + resolution: {integrity: sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-freebsd-wasm32@0.35.5': + resolution: {integrity: sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.4': + resolution: {integrity: sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.3.4': + resolution: {integrity: sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.3.4': + resolution: {integrity: sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.3.4': + resolution: {integrity: sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.3.4': + resolution: {integrity: sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.3.4': + resolution: {integrity: sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.3.4': + resolution: {integrity: sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.3.4': + resolution: {integrity: sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.3.4': + resolution: {integrity: sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.3.4': + resolution: {integrity: sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.35.5': + resolution: {integrity: sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.35.5': + resolution: {integrity: sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==} + engines: {node: '>=20.9.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.35.5': + resolution: {integrity: sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.35.5': + resolution: {integrity: sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.35.5': + resolution: {integrity: sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==} + engines: {node: '>=20.9.0'} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.35.5': + resolution: {integrity: sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.35.5': + resolution: {integrity: sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.35.5': + resolution: {integrity: sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.35.5': + resolution: {integrity: sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.5': + resolution: {integrity: sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==} + engines: {node: '>=20.9.0'} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.35.5': + resolution: {integrity: sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.35.5': + resolution: {integrity: sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==} + engines: {node: ^20.9.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.35.5': + resolution: {integrity: sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [win32] + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@keyv/bigmap@1.3.1': + resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} + engines: {node: '>= 18'} + peerDependencies: + keyv: ^5.6.0 + + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@o7/favicon@0.0.7': + resolution: {integrity: sha512-EAC7fIY6Wzu6yqoUxL859q+UlYF30I1HKHSM2l+Yepgws1+2qayYjm0KO4YFkrCvgC5fZ5wknNZcBa8dsABAmQ==} + peerDependencies: + svelte: ^5.0.0 + + '@oxc-project/types@0.155.0': + resolution: {integrity: sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==} + + '@oxfmt/binding-android-arm-eabi@0.74.0': + resolution: {integrity: sha512-xxQwrf5EPI5zxvuCTW8r6tzCTjPQ+h6+HqJ0iRKRy2zS1yBllt/xLVjoIyUc+FnR7g0a5g1SZv2yyDYhTItLbA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.74.0': + resolution: {integrity: sha512-FJW3sATVvrWbV64al8xofCPZj4500Z/1W0ad7Tg1rcCUyh0EMbuSrsf3jsZS7CEbwQ5fQ0mRhmkc129GFgofSQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.74.0': + resolution: {integrity: sha512-TfmNKBD30dGyMu9GCLiaw2rt/z7fms9LS+5cKcNOyWst0QgAs8oZs6wPxMbVaaDVE0/PCdCosgWM1vbu6f5NUg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.74.0': + resolution: {integrity: sha512-5Usf8+DfC4Q3o/MD8FkN47GrI6y0KbhQ4KhZ2HGzMZcXjcW1AeldwbUn51aKih+1TVuJFF9qkNm6X1nzm6NYng==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.74.0': + resolution: {integrity: sha512-eL+1O3gykw1XihbZh2MRAciQvU2988LByrnjhyo/dmNG74X4oZ7XzigRoWPRFLfJCp8hzRkp/LbEhwe7uuT2eA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.74.0': + resolution: {integrity: sha512-Xt0QtO2hJ4stnul8IL4LJGVLyp0xnc6ccN9fZ30yuubv8FWSRYxWwd1Za62KsEqAfmPSazoS/cLSUUJpja6npA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.74.0': + resolution: {integrity: sha512-/4wYQ0gZl4vUR0QoBTGaay73FmQ1GAjUa9z9101TR2xbGNrg4a+grazlR0yzEOe3/E+PJr5BGfj66MMzm/54vg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.74.0': + resolution: {integrity: sha512-846bKzF+HJd+JkOFh3rxzmYvSq4Cm+GMT+p+mW7S13ZYo6GAAGv8bL8cAOi/XcdeMqxEJDCIMTVQLVBXHMCdig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-arm64-musl@0.74.0': + resolution: {integrity: sha512-nI5FJwZ4Flo6CBdscpwxymZXxO3m3IErQJX55ZS6h+ObfGXu8FostL85L/RWPFaCLnIVE4/WfLw+2q8XvVEeUA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-ppc64-gnu@0.74.0': + resolution: {integrity: sha512-BoQYKuqUdsKAFAkK6DLBvkdv4+t0hppSm79sB0wIcE2o/eOwNj+6Z3OlKY4q3Eta/tlssP65FaS9vHn8TeF7vQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-gnu@0.74.0': + resolution: {integrity: sha512-FSroRrM12+jCdSQklF9aOxsKpI6wFs4ZCo/1cSYG80RWZS6z4LV+l9tXRMT8lDGu+yohIZBwi9M76FzGPFDE2A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-musl@0.74.0': + resolution: {integrity: sha512-0VLQD0dhGBLY9Ik/w+otMvD81D0YXi4VDwql65macV+O9UzmSWmUr6CKf+dMtysDeC0PnG3y6kBkRO08BJx52g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-s390x-gnu@0.74.0': + resolution: {integrity: sha512-6X7BbZNz34+OHM6Oqjf6TRcUyRn6aRcB4VtIDZAF/uQRyeVhg+G2hv6MlMvmnRekVSyTJ/8rG/u8W2dRFW6glg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-gnu@0.74.0': + resolution: {integrity: sha512-4kYIQK53yJXrxwxSzx8H2bojlf6/KezLGYLRXzV9QCCkoiCsvBTCid9Bg83dUPTLPa3g9K0730f6MKDbck1+OA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-musl@0.74.0': + resolution: {integrity: sha512-MfWz4wDREjp/JQDmuxtKieix4FHGa1z5rBvB3betdcPwZvf5fqeQrlCm1mmoyuUVQOh9Pt3M61HwN94kJCxw7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-openharmony-arm64@0.74.0': + resolution: {integrity: sha512-6rmAApkq5s1kbDjvNI6Nl5A+JqQkLORb2sR941pf5HWsrd01WGKyagK/B4vX9+kh1FfvRkNgEu59FHvVk4H8cQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.74.0': + resolution: {integrity: sha512-+5SpRUnZNGeXTyumHnpHa791tQtt04qZs076WT8eTcGF2OJ631VLnf7S0kQSPuDG+PtJM0phadEB2WAr5n1w9g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.74.0': + resolution: {integrity: sha512-1Fg+wYBO3Dsti1QX+/6EYHjeQzLC84tLOAqPu/r7ah3UJlUs9C/DB703Ay9Vcg+8VMzqZA2P5VGhzJraVUD4OQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.74.0': + resolution: {integrity: sha512-y9jXUgPBm2TZIWbQhMYRRYAQM57+r4fbykgc+j24ICIIZl+pcuoNhnq1CRGm3oFiHnEUnZO00qOtSPGQdJ2ziQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + + '@poppinss/colors@4.1.6': + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} + + '@poppinss/dumper@0.6.5': + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} + + '@poppinss/exception@1.2.3': + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + + '@rolldown/binding-android-arm-eabi@1.2.15': + resolution: {integrity: sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@rolldown/binding-android-arm64@1.2.15': + resolution: {integrity: sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.2.15': + resolution: {integrity: sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.2.15': + resolution: {integrity: sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.2.15': + resolution: {integrity: sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.2.15': + resolution: {integrity: sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.2.15': + resolution: {integrity: sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.2.15': + resolution: {integrity: sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.2.15': + resolution: {integrity: sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.2.15': + resolution: {integrity: sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.2.15': + resolution: {integrity: sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.2.15': + resolution: {integrity: sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.2.15': + resolution: {integrity: sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-win32-arm64-msvc@1.2.15': + resolution: {integrity: sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.2.15': + resolution: {integrity: sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} + engines: {node: '>=18'} + + '@speed-highlight/core@1.2.24': + resolution: {integrity: sha512-qeW2e1l78afw8VhRPfPQ1Gjj+KU5XFQ/OFV5ti6eTa9bruO7mJyZtA4vw0ofqmA3tKCkROE9xLk3VZoeRc98nw==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@sveltejs/acorn-typescript@1.0.13': + resolution: {integrity: sha512-wgKggnhZVL9Bfx1OaKKTrYY9BFRk6C8UAkQNUcIv1+llzYrIqy+RZm5HPKzn0NpEBvTVhTqB4kQyllZywsRBRQ==} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/adapter-auto@8.0.0': + resolution: {integrity: sha512-CKOwUS865xfoZn3CpM868slPfitsQ4vmxAR/yOfTIguAwStgkhjhzV0zEhmkzPalH338LJ9XnQX9vfQeY7220A==} + peerDependencies: + '@sveltejs/kit': ^3.0.0-next.0 + + '@sveltejs/kit@3.1.0': + resolution: {integrity: sha512-JTWlq2HQlkqx6vIoxhC0R6sc4WVqbQoRyEmr5YlqKmiYbzY1U3awtSWTmjMLlS056a49AmkQR6rnNANXIE8B0Q==} + engines: {node: '>=22.17'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@sveltejs/vite-plugin-svelte': ^7.0.0 + svelte: ^5.57.1 + typescript: ^6.0.0 + vite: ^8.0.12 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + typescript: + optional: true + + '@sveltejs/load-config@0.2.3': + resolution: {integrity: sha512-VT3qmUb8pRV2QrZjd8iAmtg8lf4W0TIjZbvXtz5MKei/q96teWZgGJyyidJzOjzZzvdq616eSRVeMYIQChUTAQ==} + engines: {node: '>= 18.0.0'} + + '@sveltejs/vite-plugin-svelte@7.3.1': + resolution: {integrity: sha512-ZPsLN8B1e/En+Ak5s4V7srFDT532oS0qieLsQwu63NGKsS+iAjoO2Js1BochlHlglcU+Pt7WAO3C5Ee+4f6gVA==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + svelte: ^5.46.4 + vite: ^8.0.0-beta.7 || ^8.0.0 + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@26.6.5': + resolution: {integrity: sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==} + + '@types/web-app-manifest@1.0.9': + resolution: {integrity: sha512-aVz1aXTubyL6nvVRyz9W7QR60zHLTiCGAafqYRc/RYUjA1GFc4npUUr7RlfO1+yP6gVvxzFmIVp8ULLYqhBRdA==} + + '@typescript-eslint/eslint-plugin@8.72.0': + resolution: {integrity: sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.72.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.72.0': + resolution: {integrity: sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/project-service@8.72.0': + resolution: {integrity: sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.72.0': + resolution: {integrity: sha512-JewPyJOYcXBSAS7PIgufscHOwZqhTGyBRiQJhhuDln66tMchxvvt7nJ90JKKIoOelmdHA3kAQbm9cEUHc4JSEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.72.0': + resolution: {integrity: sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.72.0': + resolution: {integrity: sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.72.0': + resolution: {integrity: sha512-Adfoy59kxNEjT5E5fnyrp7GpHYuWs8ONbdohu4ez6IU46qDq8LltG90tLmkucZB2uhYL8mqBjtXqGd8yhfjXqQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.72.0': + resolution: {integrity: sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.72.0': + resolution: {integrity: sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.72.0': + resolution: {integrity: sha512-E2mroviasaWecDzTGiGMtuEguuLVOeRggnrIn93CJuxYJzQBHbyymlT08aVQydbBal5538o+JkBKXh2sRuCyIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + + '@typescript/typescript6@6.0.2': + resolution: {integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==} + hasBin: true + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.19.0: + resolution: {integrity: sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + aria-query@5.3.1: + resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} + engines: {node: '>= 0.4'} + + autoprefixer@10.6.1: + resolution: {integrity: sha512-cL1Qz6ADZhcEbny/8HPfe99J6HhNoYtpX2LFLIbhgGE7Q1hlQVkYFdetDN7Id3KiQxhDrHwzlHr/YQCnZ8+xSA==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + baseline-browser-mapping@2.11.30: + resolution: {integrity: sha512-YJs6Pz17RMNv8HoyKREtCY38E3BV1nPkWVmIb+XN1uHC1Vqt3KZCH/uJH9ZKRoiKb/icZ6tvehyee6RZNbFfRA==} + engines: {node: '>=6.0.0'} + hasBin: true + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@5.0.12: + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} + engines: {node: 20 || >=22} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.29.4: + resolution: {integrity: sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + cacheable@2.5.0: + resolution: {integrity: sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + caniuse-lite@1.0.30001818: + resolution: {integrity: sha512-XJbgo4adscw7R4MZU4/qVFkoMyPaNUAWmdNY4o/k9x7fFwmv4frIlndI9lWuaxviW9ObiZel9LuncnQPn6hQ5A==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + cookie@2.0.1: + resolution: {integrity: sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==} + engines: {node: '>=22'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-select@6.0.0: + resolution: {integrity: sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@7.0.0: + resolution: {integrity: sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + devalue@5.9.4: + resolution: {integrity: sha512-sPAT4pztbu6586/hrhOnMKS17IJrvg12mXiSPSS3W5qDeN2RGgvZ0diZCm31dBbnevfVmujNO3IM2wrS4Y2Rhg==} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + electron-to-chromium@1.5.463: + resolution: {integrity: sha512-nVWNU6ltFjopvOdD44J4zoBkgO0M+WZiFKKFV7EjebOH9z0KNphk6bCEjplXtJofL21ARIuuwWOCsFkBVklm6w==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + esbuild@0.28.2: + resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-svelte@3.23.1: + resolution: {integrity: sha512-+w86Jlx4IRUuuvtqD6j4njql+akx+81JnpvbN5de3AV5iq2SexvST/Jr51CiTlKeY0i+vhoKjPO/ywFKIP75sA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.1 || ^9.0.0 || ^10.0.0 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.13.0: + resolution: {integrity: sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrap@2.4.0: + resolution: {integrity: sha512-CQPcneEHw/czj32uwQC52nYnax8H4SXt25FCM+LIwGZ49cMIxpOj3bP8wmzcI+Z0HIy5KkClaPhRLfCySzwHPA==} + peerDependencies: + '@typescript-eslint/types': ^8.2.0 + peerDependenciesMeta: + '@typescript-eslint/types': + optional: true + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.20.3: + resolution: {integrity: sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@11.1.5: + resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@6.1.23: + resolution: {integrity: sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==} + + flatted@3.4.4: + resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} + + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} + + globals@17.13.0: + resolution: {integrity: sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==} + engines: {node: '>=18'} + + hashery@1.5.1: + resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==} + engines: {node: '>=20'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + hookified@1.15.1: + resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} + + hookified@2.2.0: + resolution: {integrity: sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==} + + ico-endec@0.1.6: + resolution: {integrity: sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.13: + resolution: {integrity: sha512-2E8Q6rh+1RRSq/YdaGsNfXsEZy9FVqv6BSSrkmZJP7BnaoPnRfKL+YaofPvP+5rzdk144qSm6i4+hvPgUcbV4Q==} + engines: {node: '>= 4'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.17.0: + resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + known-css-properties@0.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.4: + resolution: {integrity: sha512-zJZyBmQhArDRefuWTypZxwDpFDIYmrj8ypSBvwGD5P13Y95s6DjzKgu4DVdGbeQa5PDEsAOCAPNk4X+QOR006w==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magic-string@1.4.3: + resolution: {integrity: sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + miniflare@5.20261019.1-beta: + resolution: {integrity: sha512-1n7MN2UqZnPniyYAqNuV1YEAaja66ozKGVCc5ZTmYQhTubnoAwGLccwb+ZWYLOajuw3pOaJ70u//bZMuURlRew==} + engines: {node: '>=22.0.0'} + + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.20: + resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.59: + resolution: {integrity: sha512-5qr2okC4ItAI0hG5SaV0HoYMpnM/Y6+Oqr7AmPYy/2uEoGvS+GbSKLeRxSS1uAdu59yz0ouzcuXievSgg///WA==} + engines: {node: '>=18'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + obug@2.2.1: + resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==} + engines: {node: '>=12.20.0'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + oxfmt@0.74.0: + resolution: {integrity: sha512-G4OP7FgwGYZR5ttRpCOOfJdyRsSyvtn34vSXnjDq6Oqed5Dufg5mB44mank+51nAdHOKuTJ0lj0mksY7L+N61A==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@astrojs/compiler-rs': ^0.4.0 || ^0.5.0 + svelte: ^5.0.0 + vite-plus: '*' + peerDependenciesMeta: + '@astrojs/compiler-rs': + optional: true + svelte: + optional: true + vite-plus: + optional: true + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.1.0: + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-safe-parser@7.1.0: + resolution: {integrity: sha512-1WzZxRLaAFwEh6Do+zyGpjWV3nGJNxxhuh7Ubu/q1ICImMgZJnLwhoaEpRbG4pJppp2Y1ncL9ffA2f+LhrefQg==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-parser@6.1.5: + resolution: {integrity: sha512-TEHFzb5KRDKaOgJ4TYE+0jyJtFbjLvkdVOu0fZ2b6MTWzoqZd4Le+61aEppWkvTlYePgOX4ATL1wsAIPMLTw6Q==} + engines: {node: '>=4'} + + postcss-selector-parser@7.1.7: + resolution: {integrity: sha512-wWBro/7hJ40ye6TPiXkUQoXKCw23xSsjriUvqd7Uls9Sso3oLiON1flc18cCdnjgCRXw4fBVqUJJeOdDTh3P3g==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.31: + resolution: {integrity: sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qified@0.10.1: + resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==} + engines: {node: '>=20'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + read-cache@1.0.2: + resolution: {integrity: sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + resolve@1.22.13: + resolution: {integrity: sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==} + engines: {node: '>= 0.4'} + hasBin: true + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rolldown@1.2.15: + resolution: {integrity: sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + sax@1.6.1: + resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} + engines: {node: '>=11.0.0'} + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + sharp@0.35.5: + resolution: {integrity: sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + + source-map-js@1.2.2: + resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} + engines: {node: '>=0.10.0'} + + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svelte-check@4.7.7: + resolution: {integrity: sha512-Ge2IMdeTpbJuzNFGRiiMg0RWgbScysKQu7xwcyFJ22+DU9F5nPX51+Q3gHmGqRxYQMx2knreVWt5oCtfe0vf2g==} + engines: {node: '>= 18.0.0'} + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: ^5.0.0 || ^6.0.0 + + svelte-eslint-parser@1.9.0: + resolution: {integrity: sha512-aKdKQAZP7MobfVcQNyy5Yk0QjlC9m5T1lTS0qA7+0EIsFzFX3WgbGHfb8267QK+4hI8Az9+2f+hk5sp39op8sg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.34.6} + peerDependencies: + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + svelte@5.57.2: + resolution: {integrity: sha512-1YiPCAXT0Ct6g1vOMmSLa0Nsc3QRMvtDF32ihgglGVrugIuIK38RyDiFNXVDhtQ81TJjSO57NdMw6DyYLqSGDQ==} + engines: {node: '>=18'} + + svgo@4.1.0: + resolution: {integrity: sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==} + engines: {node: '>=16'} + hasBin: true + + tailwindcss@3.4.19: + resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar@7.5.22: + resolution: {integrity: sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==} + engines: {node: '>=18'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tiny-jsonc@1.0.2: + resolution: {integrity: sha512-f5QDAfLq6zIVSyCZQZhhyl0QS6MvAyTxgz4X4x3+EoCktNWEYJ6PeoEA97fyb98njpBNNi88ybpD7m+BDFXaCw==} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinypool@2.2.0: + resolution: {integrity: sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ==} + engines: {node: ^20.0.0 || >=22.0.0} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typescript-eslint@8.72.0: + resolution: {integrity: sha512-r26Fkc8As+mZvqp7SLsMmNFyYUup/6CjK7/eHBHmhOw6GH6n6YFxHVFrG0jN1c5CMpDzelLPxvgeCOzx7BjN+A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} + hasBin: true + + undici-types@8.9.0: + resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} + + undici@7.29.1: + resolution: {integrity: sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==} + engines: {node: '>=20.18.1'} + + unenv@2.0.0-rc.24: + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} + + update-browserslist-db@1.3.4: + resolution: {integrity: sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + valibot@1.5.0: + resolution: {integrity: sha512-nil6AkP2TChWL43Z5uJ6GTxX01CUA+g8LWUM+N/rB9NBbkUMaUsi9PUNzlUPgoKASgmx9f7eGOYpJ04/fSa6FQ==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + vite@8.3.5: + resolution: {integrity: sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.7.1 || ^0.8.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.3: + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + vite: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + workerd@1.20261019.1: + resolution: {integrity: sha512-UUYRUq/7DmeCl11YriNbcVbjUZVLtt8uuCXFu+nz77hGFf8d4DEVXoCYtnA+MlBatE4+wxoj47DVqzK3xGBAiw==} + engines: {node: '>=16'} + hasBin: true + + wrangler@4.151.3: + resolution: {integrity: sha512-mzPQLmkAhZUV7CdiAhE+hiIAJlS9xPL6vZe1B8oQFuWxFu7nmQnvHAVjcAcabwSGkXFXH9uspzXwHOFrfbQmqQ==} + engines: {node: '>=22.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^5.20261019.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} + engines: {node: '>= 6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + youch-core@0.3.3: + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} + + youch@4.1.0-beta.10: + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} + + zimmerframe@1.1.5: + resolution: {integrity: sha512-msJxIvYDYcoNL+PJsu+7qmpDWsYmAxTY+2TNYXXF0hzBzBk0BMecOqDOG/EckUoKCuKwObfbugIl8QpqHDXeFA==} + +snapshots: + + '@alloc/quick-lru@5.3.0': {} + + '@cacheable/memory@2.2.0': + dependencies: + '@cacheable/utils': 2.5.0 + '@keyv/bigmap': 1.3.1(keyv@5.6.0) + hookified: 1.15.1 + keyv: 5.6.0 + + '@cacheable/utils@2.5.0': + dependencies: + hashery: 1.5.1 + keyv: 5.6.0 + + '@cloudflare/kv-asset-handler@0.5.0': {} + + '@cloudflare/unenv-preset@2.16.2(unenv@2.0.0-rc.24)(workerd@1.20261019.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20261019.1 + + '@cloudflare/workerd-darwin-64@1.20261019.1': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20261019.1': + optional: true + + '@cloudflare/workerd-linux-64@1.20261019.1': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20261019.1': + optional: true + + '@cloudflare/workerd-windows-64@1.20261019.1': + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.28.2': + optional: true + + '@esbuild/android-arm64@0.28.2': + optional: true + + '@esbuild/android-arm@0.28.2': + optional: true + + '@esbuild/android-x64@0.28.2': + optional: true + + '@esbuild/darwin-arm64@0.28.2': + optional: true + + '@esbuild/darwin-x64@0.28.2': + optional: true + + '@esbuild/freebsd-arm64@0.28.2': + optional: true + + '@esbuild/freebsd-x64@0.28.2': + optional: true + + '@esbuild/linux-arm64@0.28.2': + optional: true + + '@esbuild/linux-arm@0.28.2': + optional: true + + '@esbuild/linux-ia32@0.28.2': + optional: true + + '@esbuild/linux-loong64@0.28.2': + optional: true + + '@esbuild/linux-mips64el@0.28.2': + optional: true + + '@esbuild/linux-ppc64@0.28.2': + optional: true + + '@esbuild/linux-riscv64@0.28.2': + optional: true + + '@esbuild/linux-s390x@0.28.2': + optional: true + + '@esbuild/linux-x64@0.28.2': + optional: true + + '@esbuild/netbsd-arm64@0.28.2': + optional: true + + '@esbuild/netbsd-x64@0.28.2': + optional: true + + '@esbuild/openbsd-arm64@0.28.2': + optional: true + + '@esbuild/openbsd-x64@0.28.2': + optional: true + + '@esbuild/openharmony-arm64@0.28.2': + optional: true + + '@esbuild/sunos-x64@0.28.2': + optional: true + + '@esbuild/win32-arm64@0.28.2': + optional: true + + '@esbuild/win32-ia32@0.28.2': + optional: true + + '@esbuild/win32-x64@0.28.2': + optional: true + + '@eslint-community/eslint-utils@4.10.1(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))': + dependencies: + eslint: 10.13.0(jiti@1.21.7)(supports-color@10.2.2) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.5(supports-color@10.2.2)': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.3(supports-color@10.2.2) + minimatch: 10.2.6 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.7.0': + dependencies: + '@eslint/core': 1.2.1 + + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/js@10.0.1(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))': + optionalDependencies: + eslint: 10.13.0(jiti@1.21.7)(supports-color@10.2.2) + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.3': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.3.4 + optional: true + + '@img/sharp-darwin-x64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.3.4 + optional: true + + '@img/sharp-freebsd-wasm32@0.35.5': + dependencies: + '@img/sharp-wasm32': 0.35.5 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.3.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.3.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.3.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.3.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.3.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.3.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.3.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.3.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.3.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.3.4': + optional: true + + '@img/sharp-linux-arm64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.4 + optional: true + + '@img/sharp-linux-arm@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.3.4 + optional: true + + '@img/sharp-linux-ppc64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.3.4 + optional: true + + '@img/sharp-linux-riscv64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.3.4 + optional: true + + '@img/sharp-linux-s390x@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.3.4 + optional: true + + '@img/sharp-linux-x64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.3.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.35.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.4 + optional: true + + '@img/sharp-wasm32@0.35.5': + dependencies: + '@emnapi/runtime': 1.11.3 + optional: true + + '@img/sharp-webcontainers-wasm32@0.35.5': + dependencies: + '@img/sharp-wasm32': 0.35.5 + optional: true + + '@img/sharp-win32-arm64@0.35.5': + optional: true + + '@img/sharp-win32-ia32@0.35.5': + optional: true + + '@img/sharp-win32-x64@0.35.5': + optional: true + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.3 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.6.0': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.6.0 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.6.0 + + '@keyv/bigmap@1.3.1(keyv@5.6.0)': + dependencies: + hashery: 1.5.1 + hookified: 1.15.1 + keyv: 5.6.0 + + '@keyv/serialize@1.1.1': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.3 + + '@o7/favicon@0.0.7(@types/node@26.6.5)(svelte@5.57.2(@typescript-eslint/types@8.72.0))': + dependencies: + '@types/web-app-manifest': 1.0.9 + ico-endec: 0.1.6 + sharp: 0.35.5(@types/node@26.6.5) + svelte: 5.57.2(@typescript-eslint/types@8.72.0) + svgo: 4.1.0 + transitivePeerDependencies: + - '@types/node' + + '@oxc-project/types@0.155.0': {} + + '@oxfmt/binding-android-arm-eabi@0.74.0': + optional: true + + '@oxfmt/binding-android-arm64@0.74.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.74.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.74.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.74.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.74.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.74.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.74.0': + optional: true + + '@oxfmt/binding-linux-arm64-musl@0.74.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.74.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.74.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.74.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.74.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.74.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.74.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.74.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.74.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.74.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.74.0': + optional: true + + '@polka/url@1.0.0-next.29': {} + + '@poppinss/colors@4.1.6': + dependencies: + kleur: 4.1.5 + + '@poppinss/dumper@0.6.5': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 + + '@poppinss/exception@1.2.3': {} + + '@rolldown/binding-android-arm-eabi@1.2.15': + optional: true + + '@rolldown/binding-android-arm64@1.2.15': + optional: true + + '@rolldown/binding-darwin-arm64@1.2.15': + optional: true + + '@rolldown/binding-darwin-x64@1.2.15': + optional: true + + '@rolldown/binding-freebsd-x64@1.2.15': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.2.15': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.2.15': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.2.15': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.2.15': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.2.15': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.2.15': + optional: true + + '@rolldown/binding-linux-x64-musl@1.2.15': + optional: true + + '@rolldown/binding-openharmony-arm64@1.2.15': + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.2.15': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.2.15': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + + '@sindresorhus/is@7.2.0': {} + + '@speed-highlight/core@1.2.24': {} + + '@standard-schema/spec@1.1.0': {} + + '@sveltejs/acorn-typescript@1.0.13(acorn@8.19.0)': + dependencies: + acorn: 8.19.0 + + '@sveltejs/adapter-auto@8.0.0(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)))(@typescript/typescript6@6.0.2)(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)))': + dependencies: + '@sveltejs/kit': 3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)))(@typescript/typescript6@6.0.2)(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)) + + '@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)))(@typescript/typescript6@6.0.2)(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7))': + dependencies: + '@rolldown/pluginutils': 1.0.1 + '@standard-schema/spec': 1.1.0 + '@sveltejs/vite-plugin-svelte': 7.3.1(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)) + cookie: 2.0.1 + devalue: 5.9.4 + esm-env: 1.2.2 + magic-string: 1.4.3 + mrmime: 2.0.1 + sirv: 3.0.2 + svelte: 5.57.2(@typescript-eslint/types@8.72.0) + vite: 8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7) + optionalDependencies: + typescript: '@typescript/typescript6@6.0.2' + + '@sveltejs/load-config@0.2.3': {} + + '@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.2(@typescript-eslint/types@8.72.0))(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7))': + dependencies: + deepmerge: 4.3.1 + magic-string: 1.4.3 + obug: 2.2.1 + svelte: 5.57.2(@typescript-eslint/types@8.72.0) + vite: 8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7) + vitefu: 1.1.3(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)) + + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.9': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@26.6.5': + dependencies: + undici-types: 8.9.0 + + '@types/web-app-manifest@1.0.9': {} + + '@typescript-eslint/eslint-plugin@8.72.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2))(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/type-utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) + '@typescript-eslint/utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) + '@typescript-eslint/visitor-keys': 8.72.0 + eslint: 10.13.0(jiti@1.21.7)(supports-color@10.2.2) + ignore: 7.0.13 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2) + '@typescript-eslint/visitor-keys': 8.72.0 + debug: 4.4.3(supports-color@10.2.2) + eslint: 10.13.0(jiti@1.21.7)(supports-color@10.2.2) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.72.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.72.0(@typescript/typescript6@6.0.2) + '@typescript-eslint/types': 8.72.0 + debug: 4.4.3(supports-color@10.2.2) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.72.0': + dependencies: + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/visitor-keys': 8.72.0 + + '@typescript-eslint/tsconfig-utils@8.72.0(@typescript/typescript6@6.0.2)': + dependencies: + typescript: '@typescript/typescript6@6.0.2' + + '@typescript-eslint/type-utils@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2) + '@typescript-eslint/utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) + debug: 4.4.3(supports-color@10.2.2) + eslint: 10.13.0(jiti@1.21.7)(supports-color@10.2.2) + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.72.0': {} + + '@typescript-eslint/typescript-estree@8.72.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2)': + dependencies: + '@typescript-eslint/project-service': 8.72.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2) + '@typescript-eslint/tsconfig-utils': 8.72.0(@typescript/typescript6@6.0.2) + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/visitor-keys': 8.72.0 + debug: 4.4.3(supports-color@10.2.2) + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(@typescript/typescript6@6.0.2) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2)': + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2)) + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2) + eslint: 10.13.0(jiti@1.21.7)(supports-color@10.2.2) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.72.0': + dependencies: + '@typescript-eslint/types': 8.72.0 + eslint-visitor-keys: 5.0.1 + + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + + '@typescript/typescript6@6.0.2': + dependencies: + '@typescript/old': typescript@6.0.3 + + acorn-jsx@5.3.2(acorn@8.19.0): + dependencies: + acorn: 8.19.0 + + acorn@8.19.0: {} + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + + arg@5.0.2: {} + + aria-query@5.3.1: {} + + autoprefixer@10.6.1(postcss@8.5.31): + dependencies: + browserslist: 4.29.4 + caniuse-lite: 1.0.30001818 + fraction.js: 5.3.4 + picocolors: 1.1.1 + postcss: 8.5.31 + postcss-value-parser: 4.2.0 + + axobject-query@4.1.0: {} + + balanced-match@4.0.4: {} + + baseline-browser-mapping@2.11.30: {} + + binary-extensions@2.3.0: {} + + blake3-wasm@2.1.5: {} + + boolbase@1.0.0: {} + + brace-expansion@5.0.12: + dependencies: + balanced-match: 4.0.4 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.29.4: + dependencies: + baseline-browser-mapping: 2.11.30 + caniuse-lite: 1.0.30001818 + electron-to-chromium: 1.5.463 + node-releases: 2.0.59 + update-browserslist-db: 1.3.4(browserslist@4.29.4) + + cacheable@2.5.0: + dependencies: + '@cacheable/memory': 2.2.0 + '@cacheable/utils': 2.5.0 + hookified: 1.15.1 + keyv: 5.6.0 + qified: 0.10.1 + + camelcase-css@2.0.1: {} + + caniuse-lite@1.0.30001818: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@3.0.0: {} + + clsx@2.1.1: {} + + commander@11.1.0: {} + + commander@4.1.1: {} + + cookie@1.1.1: {} + + cookie@2.0.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-select@6.0.0: + dependencies: + boolbase: 1.0.0 + css-what: 7.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.2 + + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.2 + + css-what@7.0.0: {} + + cssesc@3.0.0: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + debug@4.4.3(supports-color@10.2.2): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + detect-libc@2.1.2: {} + + devalue@5.9.4: {} + + didyoumean@1.2.2: {} + + dlv@1.1.3: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + electron-to-chromium@1.5.463: {} + + entities@4.5.0: {} + + error-stack-parser-es@1.0.5: {} + + es-errors@1.3.0: {} + + esbuild@0.28.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.2 + '@esbuild/android-arm': 0.28.2 + '@esbuild/android-arm64': 0.28.2 + '@esbuild/android-x64': 0.28.2 + '@esbuild/darwin-arm64': 0.28.2 + '@esbuild/darwin-x64': 0.28.2 + '@esbuild/freebsd-arm64': 0.28.2 + '@esbuild/freebsd-x64': 0.28.2 + '@esbuild/linux-arm': 0.28.2 + '@esbuild/linux-arm64': 0.28.2 + '@esbuild/linux-ia32': 0.28.2 + '@esbuild/linux-loong64': 0.28.2 + '@esbuild/linux-mips64el': 0.28.2 + '@esbuild/linux-ppc64': 0.28.2 + '@esbuild/linux-riscv64': 0.28.2 + '@esbuild/linux-s390x': 0.28.2 + '@esbuild/linux-x64': 0.28.2 + '@esbuild/netbsd-arm64': 0.28.2 + '@esbuild/netbsd-x64': 0.28.2 + '@esbuild/openbsd-arm64': 0.28.2 + '@esbuild/openbsd-x64': 0.28.2 + '@esbuild/openharmony-arm64': 0.28.2 + '@esbuild/sunos-x64': 0.28.2 + '@esbuild/win32-arm64': 0.28.2 + '@esbuild/win32-ia32': 0.28.2 + '@esbuild/win32-x64': 0.28.2 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-svelte@3.23.1(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(svelte@5.57.2(@typescript-eslint/types@8.72.0)): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2)) + '@jridgewell/sourcemap-codec': 1.6.0 + eslint: 10.13.0(jiti@1.21.7)(supports-color@10.2.2) + esutils: 2.0.3 + globals: 16.5.0 + known-css-properties: 0.37.0 + postcss: 8.5.31 + postcss-load-config: 3.1.4(postcss@8.5.31) + postcss-safe-parser: 7.1.0(postcss@8.5.31) + semver: 7.8.5 + svelte-eslint-parser: 1.9.0(svelte@5.57.2(@typescript-eslint/types@8.72.0)) + optionalDependencies: + svelte: 5.57.2(@typescript-eslint/types@8.72.0) + transitivePeerDependencies: + - ts-node + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 - semver@7.8.5: - resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} - engines: {node: '>=10'} - hasBin: true + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 + esrecurse: 4.3.0 + estraverse: 5.3.0 - tiny-jsonc@1.0.2: - resolution: {integrity: sha512-f5QDAfLq6zIVSyCZQZhhyl0QS6MvAyTxgz4X4x3+EoCktNWEYJ6PeoEA97fyb98njpBNNi88ybpD7m+BDFXaCw==} + eslint-visitor-keys@3.4.3: {} - undici-types@8.3.0: - resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} + eslint-visitor-keys@4.2.1: {} -snapshots: + eslint-visitor-keys@5.0.1: {} + + eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5(supports-color@10.2.2) + '@eslint/config-helpers': 0.7.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.3 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@10.2.2) + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 11.1.5 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.6 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + + esm-env@1.2.2: {} + + espree@10.4.0: + dependencies: + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) + eslint-visitor-keys: 4.2.1 + + espree@11.2.0: + dependencies: + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) + eslint-visitor-keys: 5.0.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrap@2.4.0(@typescript-eslint/types@8.72.0): + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + optionalDependencies: + '@typescript-eslint/types': 8.72.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.20.3: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + file-entry-cache@11.1.5: + dependencies: + flat-cache: 6.1.23 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@6.1.23: + dependencies: + cacheable: 2.5.0 + flatted: 3.4.4 + hookified: 1.15.1 + + flatted@3.4.4: {} + + fraction.js@5.3.4: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@16.5.0: {} + + globals@17.13.0: {} + + hashery@1.5.1: + dependencies: + hookified: 1.15.1 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + hookified@1.15.1: {} + + hookified@2.2.0: {} + + ico-endec@0.1.6: {} + + ignore@5.3.2: {} + + ignore@7.0.13: {} + + imurmurhash@0.1.4: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.17.0: + dependencies: + hasown: 2.0.4 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + isexe@2.0.0: {} + + jiti@1.21.7: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@5.6.0: + dependencies: + '@keyv/serialize': 1.1.1 + + kleur@4.1.5: {} + + known-css-properties@0.37.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + + lilconfig@2.1.0: {} + + lilconfig@3.1.4: {} + + lines-and-columns@1.2.4: {} + + locate-character@3.0.0: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + + magic-string@1.4.3: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + + mdn-data@2.0.28: {} + + mdn-data@2.27.1: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + miniflare@5.20261019.1-beta(@types/node@26.6.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.35.5(@types/node@26.6.5) + undici: 7.29.1 + workerd: 1.20261019.1 + ws: 8.21.0 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - utf-8-validate + + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.12 + + minipass@7.1.3: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.3 + + mri@1.2.0: {} + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.20: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.59: {} + + normalize-path@3.0.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} - '@types/node@26.1.2': + obug@2.2.1: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + oxfmt@0.74.0(svelte@5.57.2(@typescript-eslint/types@8.72.0)): + dependencies: + tinypool: 2.2.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.74.0 + '@oxfmt/binding-android-arm64': 0.74.0 + '@oxfmt/binding-darwin-arm64': 0.74.0 + '@oxfmt/binding-darwin-x64': 0.74.0 + '@oxfmt/binding-freebsd-x64': 0.74.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.74.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.74.0 + '@oxfmt/binding-linux-arm64-gnu': 0.74.0 + '@oxfmt/binding-linux-arm64-musl': 0.74.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.74.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.74.0 + '@oxfmt/binding-linux-riscv64-musl': 0.74.0 + '@oxfmt/binding-linux-s390x-gnu': 0.74.0 + '@oxfmt/binding-linux-x64-gnu': 0.74.0 + '@oxfmt/binding-linux-x64-musl': 0.74.0 + '@oxfmt/binding-openharmony-arm64': 0.74.0 + '@oxfmt/binding-win32-arm64-msvc': 0.74.0 + '@oxfmt/binding-win32-ia32-msvc': 0.74.0 + '@oxfmt/binding-win32-x64-msvc': 0.74.0 + svelte: 5.57.2(@typescript-eslint/types@8.72.0) + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-to-regexp@6.3.0: {} + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.7: {} + + pirates@4.0.7: {} + + postcss-import@15.1.0(postcss@8.5.31): + dependencies: + postcss: 8.5.31 + postcss-value-parser: 4.2.0 + read-cache: 1.0.2 + resolve: 1.22.13 + + postcss-js@4.1.0(postcss@8.5.31): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.31 + + postcss-load-config@3.1.4(postcss@8.5.31): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.3 + optionalDependencies: + postcss: 8.5.31 + + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.31): + dependencies: + lilconfig: 3.1.4 + optionalDependencies: + jiti: 1.21.7 + postcss: 8.5.31 + + postcss-nested@6.2.0(postcss@8.5.31): + dependencies: + postcss: 8.5.31 + postcss-selector-parser: 6.1.5 + + postcss-safe-parser@7.1.0(postcss@8.5.31): + dependencies: + postcss: 8.5.31 + + postcss-scss@4.0.9(postcss@8.5.31): + dependencies: + postcss: 8.5.31 + + postcss-selector-parser@6.1.5: dependencies: - undici-types: 8.3.0 + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.7: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.31: + dependencies: + nanoid: 3.3.20 + picocolors: 1.1.1 + source-map-js: 1.2.2 + + prelude-ls@1.2.1: {} + + punycode@2.3.1: {} + + qified@0.10.1: + dependencies: + hookified: 2.2.0 + + queue-microtask@1.2.3: {} + + read-cache@1.0.2: {} + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.2 + + readdirp@4.1.2: {} + + resolve@1.22.13: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.17.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.1.0: {} + + rolldown@1.2.15: + dependencies: + '@oxc-project/types': 0.155.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm-eabi': 1.2.15 + '@rolldown/binding-android-arm64': 1.2.15 + '@rolldown/binding-darwin-arm64': 1.2.15 + '@rolldown/binding-darwin-x64': 1.2.15 + '@rolldown/binding-freebsd-x64': 1.2.15 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.15 + '@rolldown/binding-linux-arm64-gnu': 1.2.15 + '@rolldown/binding-linux-arm64-musl': 1.2.15 + '@rolldown/binding-linux-ppc64-gnu': 1.2.15 + '@rolldown/binding-linux-s390x-gnu': 1.2.15 + '@rolldown/binding-linux-x64-gnu': 1.2.15 + '@rolldown/binding-linux-x64-musl': 1.2.15 + '@rolldown/binding-openharmony-arm64': 1.2.15 + '@rolldown/binding-win32-arm64-msvc': 1.2.15 + '@rolldown/binding-win32-x64-msvc': 1.2.15 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + sax@1.6.1: {} semver@7.8.5: {} + sharp@0.35.5(@types/node@26.6.5): + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.35.5 + '@img/sharp-darwin-x64': 0.35.5 + '@img/sharp-freebsd-wasm32': 0.35.5 + '@img/sharp-libvips-darwin-arm64': 1.3.4 + '@img/sharp-libvips-darwin-x64': 1.3.4 + '@img/sharp-libvips-linux-arm': 1.3.4 + '@img/sharp-libvips-linux-arm64': 1.3.4 + '@img/sharp-libvips-linux-ppc64': 1.3.4 + '@img/sharp-libvips-linux-riscv64': 1.3.4 + '@img/sharp-libvips-linux-s390x': 1.3.4 + '@img/sharp-libvips-linux-x64': 1.3.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 + '@img/sharp-libvips-linuxmusl-x64': 1.3.4 + '@img/sharp-linux-arm': 0.35.5 + '@img/sharp-linux-arm64': 0.35.5 + '@img/sharp-linux-ppc64': 0.35.5 + '@img/sharp-linux-riscv64': 0.35.5 + '@img/sharp-linux-s390x': 0.35.5 + '@img/sharp-linux-x64': 0.35.5 + '@img/sharp-linuxmusl-arm64': 0.35.5 + '@img/sharp-linuxmusl-x64': 0.35.5 + '@img/sharp-webcontainers-wasm32': 0.35.5 + '@img/sharp-win32-arm64': 0.35.5 + '@img/sharp-win32-ia32': 0.35.5 + '@img/sharp-win32-x64': 0.35.5 + '@types/node': 26.6.5 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + + source-map-js@1.2.2: {} + + sucrase@3.35.1: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + tinyglobby: 0.2.17 + ts-interface-checker: 0.1.13 + + supports-color@10.2.2: {} + + supports-preserve-symlinks-flag@1.0.0: {} + + svelte-check@4.7.7(@typescript/typescript6@6.0.2)(picomatch@4.0.7)(svelte@5.57.2(@typescript-eslint/types@8.72.0)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@sveltejs/load-config': 0.2.3 + chokidar: 4.0.3 + fdir: 6.5.0(picomatch@4.0.7) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.57.2(@typescript-eslint/types@8.72.0) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - picomatch + + svelte-eslint-parser@1.9.0(svelte@5.57.2(@typescript-eslint/types@8.72.0)): + dependencies: + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + postcss: 8.5.31 + postcss-scss: 4.0.9(postcss@8.5.31) + postcss-selector-parser: 7.1.7 + semver: 7.8.5 + optionalDependencies: + svelte: 5.57.2(@typescript-eslint/types@8.72.0) + + svelte@5.57.2(@typescript-eslint/types@8.72.0): + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.6.0 + '@sveltejs/acorn-typescript': 1.0.13(acorn@8.19.0) + '@types/estree': 1.0.9 + acorn: 8.19.0 + aria-query: 5.3.1 + axobject-query: 4.1.0 + clsx: 2.1.1 + devalue: 5.9.4 + esm-env: 1.2.2 + esrap: 2.4.0(@typescript-eslint/types@8.72.0) + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.21 + zimmerframe: 1.1.5 + transitivePeerDependencies: + - '@typescript-eslint/types' + + svgo@4.1.0: + dependencies: + commander: 11.1.0 + css-select: 6.0.0 + css-tree: 3.2.1 + css-what: 7.0.0 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.6.1 + + tailwindcss@3.4.19: + dependencies: + '@alloc/quick-lru': 5.3.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.4 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.31 + postcss-import: 15.1.0(postcss@8.5.31) + postcss-js: 4.1.0(postcss@8.5.31) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.31) + postcss-nested: 6.2.0(postcss@8.5.31) + postcss-selector-parser: 6.1.5 + resolve: 1.22.13 + sucrase: 3.35.1 + transitivePeerDependencies: + - tsx + - yaml + + tar@7.5.22: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.3 + minizlib: 3.1.0 + yallist: 5.0.0 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + tiny-jsonc@1.0.2: {} - undici-types@8.3.0: {} + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + + tinypool@2.2.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + totalist@3.0.1: {} + + ts-api-utils@2.5.0(@typescript/typescript6@6.0.2): + dependencies: + typescript: '@typescript/typescript6@6.0.2' + + ts-interface-checker@0.1.13: {} + + tslib@2.8.1: + optional: true + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-eslint@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.72.0(@typescript-eslint/parser@8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2))(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) + '@typescript-eslint/parser': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) + '@typescript-eslint/typescript-estree': 8.72.0(@typescript/typescript6@6.0.2)(supports-color@10.2.2) + '@typescript-eslint/utils': 8.72.0(@typescript/typescript6@6.0.2)(eslint@10.13.0(jiti@1.21.7)(supports-color@10.2.2))(supports-color@10.2.2) + eslint: 10.13.0(jiti@1.21.7)(supports-color@10.2.2) + typescript: '@typescript/typescript6@6.0.2' + transitivePeerDependencies: + - supports-color + + typescript@6.0.3: {} + + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 + + undici-types@8.9.0: {} + + undici@7.29.1: {} + + unenv@2.0.0-rc.24: + dependencies: + pathe: 2.0.3 + + update-browserslist-db@1.3.4(browserslist@4.29.4): + dependencies: + browserslist: 4.29.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + valibot@1.5.0(@typescript/typescript6@6.0.2): + optionalDependencies: + typescript: '@typescript/typescript6@6.0.2' + + valibot@1.5.0(typescript@7.0.2): + optionalDependencies: + typescript: 7.0.2 + + vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.31 + rolldown: 1.2.15 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 26.6.5 + esbuild: 0.28.2 + fsevents: 2.3.3 + jiti: 1.21.7 + + vitefu@1.1.3(vite@8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7)): + optionalDependencies: + vite: 8.3.5(@types/node@26.6.5)(esbuild@0.28.2)(jiti@1.21.7) + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + workerd@1.20261019.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20261019.1 + '@cloudflare/workerd-darwin-arm64': 1.20261019.1 + '@cloudflare/workerd-linux-64': 1.20261019.1 + '@cloudflare/workerd-linux-arm64': 1.20261019.1 + '@cloudflare/workerd-windows-64': 1.20261019.1 + + wrangler@4.151.3(@types/node@26.6.5): + dependencies: + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.2(unenv@2.0.0-rc.24)(workerd@1.20261019.1) + blake3-wasm: 2.1.5 + esbuild: 0.28.2 + miniflare: 5.20261019.1-beta(@types/node@26.6.5) + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.24 + workerd: 1.20261019.1 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - utf-8-validate + + ws@8.21.0: {} + + yallist@5.0.0: {} + + yaml@1.10.3: {} + + yocto-queue@0.1.0: {} + + youch-core@0.3.3: + dependencies: + '@poppinss/exception': 1.2.3 + error-stack-parser-es: 1.0.5 + + youch@4.1.0-beta.10: + dependencies: + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.6.5 + '@speed-highlight/core': 1.2.24 + cookie: 1.1.1 + youch-core: 0.3.3 + + zimmerframe@1.1.5: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000..b4355231 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,5 @@ +allowBuilds: + esbuild: set this to true or false + workerd: set this to true or false +minimumReleaseAgeExclude: + - '@o7/favicon@0.0.7' diff --git a/telemetry-server/package.json b/telemetry-server/package.json index 93383c15..344e8618 100644 --- a/telemetry-server/package.json +++ b/telemetry-server/package.json @@ -10,10 +10,10 @@ }, "devDependencies": { "typescript": "^7.0.2", - "wrangler": "^4.119.0" + "wrangler": "^4.151.3" }, "dependencies": { - "valibot": "^1.4.2" + "valibot": "^1.5.0" }, "packageManager": "pnpm@11.20.0" } diff --git a/telemetry-server/pnpm-lock.yaml b/telemetry-server/pnpm-lock.yaml index a356282b..1b8d3833 100644 --- a/telemetry-server/pnpm-lock.yaml +++ b/telemetry-server/pnpm-lock.yaml @@ -9,15 +9,15 @@ importers: .: dependencies: valibot: - specifier: ^1.4.2 - version: 1.4.2(typescript@7.0.2) + specifier: ^1.5.0 + version: 1.5.0(typescript@7.0.2) devDependencies: typescript: specifier: ^7.0.2 version: 7.0.2 wrangler: - specifier: ^4.119.0 - version: 4.119.0 + specifier: ^4.151.3 + version: 4.151.3 packages: @@ -25,8 +25,8 @@ packages: resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} engines: {node: '>=22.0.0'} - '@cloudflare/unenv-preset@2.16.1': - resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==} + '@cloudflare/unenv-preset@2.16.2': + resolution: {integrity: sha512-JBP1+Z7ZSNG/d4mRP+y8VC5dka3tZVMLEZRvS+rzQ4DGV1EoxRFQckcJTTkXbHSQiTj0DtNI01Zwb/V2fX0mvQ==} peerDependencies: unenv: 2.0.0-rc.24 workerd: '>1.20260305.0 <2.0.0-0' @@ -34,32 +34,32 @@ packages: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20260801.1': - resolution: {integrity: sha512-wuJWbXpKvncJi1P0GKS+iYpN5tHdb7JPJJ/+6ZQe8zzovHHVMkLJPNBsgWpqeUhpM3g9qTwEKd2rglNKejuh5A==} + '@cloudflare/workerd-darwin-64@1.20261019.1': + resolution: {integrity: sha512-5ZILbAta/fBQvhmAYeCE7dKMMYIr7N9wJEX50fEGLKSIwGtvT0HzSfHNIK/O7cBQ4gHQ2WfIiPClvwcye6E0fA==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260801.1': - resolution: {integrity: sha512-kwoZiTpnhNrF3+APx84Q/oAqvJ3sU9yefGagwm/ASaH/2W19x0vghkW/r4qCoHCK0WW7EPugZ+aXjgPMRtlq1Q==} + '@cloudflare/workerd-darwin-arm64@1.20261019.1': + resolution: {integrity: sha512-cww2Ab6lVMxpTiEEjKmPI58p5EMo0vYTZSH+3WkqXJdQgc3ES66GuL247+U2B2YWajhhu2tqj7jySrXneU749g==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20260801.1': - resolution: {integrity: sha512-r0vAxCZH+Jih9Unm1yoyiByPNWNgawcKciOHDm5Q37ZVGOkKLsT9AtLe3yLSaul76WrKqtf+JP2n0WW32VBLJg==} + '@cloudflare/workerd-linux-64@1.20261019.1': + resolution: {integrity: sha512-4++VRi9vkQROYqrpZYOixIJuVDmujkwrT4kszsxNFlvcmsX6Mr2GumvxIN3gIixS3vJUh3Umdtkthqj5X0S3Xw==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260801.1': - resolution: {integrity: sha512-zWgpdZtSozvIgzQNmQiDSF8yEOQJUkRAWNsDXXzAAoy+fCn8YUoSibj3mpFSbZRvbUldeBEaW6SCdC2VEMkhNQ==} + '@cloudflare/workerd-linux-arm64@1.20261019.1': + resolution: {integrity: sha512-75PVtJOwfjScQ53sbLtQXI7D8yP1c21t+WEUPaYbqkzaz4ZqfR5wAd+zuWs8G5Q7kOj2SQIvEfY5Sn8Y+UVrnA==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20260801.1': - resolution: {integrity: sha512-2oQz+Ksu4ji6e/+ZoYX+tWQEcxAii2p7l+iR8kx48W1llMalaufAsmVxTlk+3/vrM7D3/2c0iK448e0UQTcIMg==} + '@cloudflare/workerd-windows-64@1.20261019.1': + resolution: {integrity: sha512-z49fvKTETMCnG6wnMcQwxx9CpryFceiKz04FRjq26EkhCyzRNJ6c3UXhyZz3r5f1CXnnBZc5DcU8ZouPkUJCqw==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -71,158 +71,158 @@ packages: '@emnapi/runtime@1.11.3': resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} - '@esbuild/aix-ppc64@0.28.1': - resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + '@esbuild/aix-ppc64@0.28.2': + resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.28.1': - resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + '@esbuild/android-arm64@0.28.2': + resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.28.1': - resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + '@esbuild/android-arm@0.28.2': + resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.28.1': - resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + '@esbuild/android-x64@0.28.2': + resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.28.1': - resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + '@esbuild/darwin-arm64@0.28.2': + resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.28.1': - resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + '@esbuild/darwin-x64@0.28.2': + resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.28.1': - resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + '@esbuild/freebsd-arm64@0.28.2': + resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.28.1': - resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + '@esbuild/freebsd-x64@0.28.2': + resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.28.1': - resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + '@esbuild/linux-arm64@0.28.2': + resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.28.1': - resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + '@esbuild/linux-arm@0.28.2': + resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.28.1': - resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + '@esbuild/linux-ia32@0.28.2': + resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.28.1': - resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + '@esbuild/linux-loong64@0.28.2': + resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.28.1': - resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + '@esbuild/linux-mips64el@0.28.2': + resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.28.1': - resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + '@esbuild/linux-ppc64@0.28.2': + resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.28.1': - resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + '@esbuild/linux-riscv64@0.28.2': + resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.28.1': - resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + '@esbuild/linux-s390x@0.28.2': + resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.28.1': - resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + '@esbuild/linux-x64@0.28.2': + resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.28.1': - resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + '@esbuild/netbsd-arm64@0.28.2': + resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.28.1': - resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + '@esbuild/netbsd-x64@0.28.2': + resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.28.1': - resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + '@esbuild/openbsd-arm64@0.28.2': + resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.28.1': - resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + '@esbuild/openbsd-x64@0.28.2': + resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.28.1': - resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + '@esbuild/openharmony-arm64@0.28.2': + resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.28.1': - resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + '@esbuild/sunos-x64@0.28.2': + resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.28.1': - resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + '@esbuild/win32-arm64@0.28.2': + resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.28.1': - resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + '@esbuild/win32-ia32@0.28.2': + resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.28.1': - resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + '@esbuild/win32-x64@0.28.2': + resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -231,160 +231,160 @@ packages: resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.35.2': - resolution: {integrity: sha512-eEieHsMksAW4IiO5NzauESRl2D2qz3J/kwUxUrSfV06A93eEaRfMpHXyUb1mAqrR7i8U9A0GRqE9pjn6u1Jjpg==} + '@img/sharp-darwin-arm64@0.35.5': + resolution: {integrity: sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.35.2': - resolution: {integrity: sha512-BaktuGPCeHJMARpodR8jK4uKiZrPAy9WrfQW0sdI37clracq8Bp01AYS3SZgi5FS/y5twa9t4+LIuuxQjqRrWw==} + '@img/sharp-darwin-x64@0.35.5': + resolution: {integrity: sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==} engines: {node: '>=20.9.0'} cpu: [x64] os: [darwin] - '@img/sharp-freebsd-wasm32@0.35.2': - resolution: {integrity: sha512-YoAxdnd8hPUkvLHd3bWY+YA8nw3xM/RyRopYucNsWHVSan8NLVM3X2volsfoRDcXdUJPg6tXahSd7HXPK7lRnw==} + '@img/sharp-freebsd-wasm32@0.35.5': + resolution: {integrity: sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==} engines: {node: '>=20.9.0'} os: [freebsd] - '@img/sharp-libvips-darwin-arm64@1.3.1': - resolution: {integrity: sha512-4V/M3roRMTYjiwZY9IOVQOE8OyeCxFAkYmyZDrZl51uOKjibm3oeEJ4WAmLxutAfzFbC9jqUiPs2gbnGflH+7g==} + '@img/sharp-libvips-darwin-arm64@1.3.4': + resolution: {integrity: sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.3.1': - resolution: {integrity: sha512-c0/DxItpJv2+dGhgycJBBgotdqruGYDvA79drdh0MD1dFpy7JzJ/PlXwi1H4rFf0eTy8tgbI91aHDnZIceY3jQ==} + '@img/sharp-libvips-darwin-x64@1.3.4': + resolution: {integrity: sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.3.1': - resolution: {integrity: sha512-JznefmcK9j1JKPz8AkQDh89kjojubyfOasWBPKfzMIhPwsgDy9evpE/naJTXXXmghS1iFwR8u/kTwh/I2/+GCw==} + '@img/sharp-libvips-linux-arm64@1.3.4': + resolution: {integrity: sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.3.1': - resolution: {integrity: sha512-aGGy9aWzXgHBG7HNyQPWorZthlp7+x6fDRoPAQbGO3ThcttuTyKIx3NuSHb6zb4gBNq6/yNn9f1cy9nFKS/Vmg==} + '@img/sharp-libvips-linux-arm@1.3.4': + resolution: {integrity: sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.3.1': - resolution: {integrity: sha512-1EkwGNCZk6iWNCMWqrvdJ+r1j0PT1zIz60CNPhYnJlK/zyeWqlsPZIe+ocBVqPF8k/Ssee/NCk+tE9Ryrko6ng==} + '@img/sharp-libvips-linux-ppc64@1.3.4': + resolution: {integrity: sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-riscv64@1.3.1': - resolution: {integrity: sha512-Ilays+w2bXdnxzxtQdmXR62u8o8GYa3eL4+Gr+1KiE4xperMZUslRaVPJwwPkzlHEjGfXAfRVAa/7CYCtSqsBw==} + '@img/sharp-libvips-linux-riscv64@1.3.4': + resolution: {integrity: sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.3.1': - resolution: {integrity: sha512-VfBwVHQTbRoj4XlpA/KLZ7ltgMpz+4WSejFzQ+GnoImjo1PtEJ59QB2qR1xQEeRPYIkNrPIm2L4cICMvz4C2ew==} + '@img/sharp-libvips-linux-s390x@1.3.4': + resolution: {integrity: sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.3.1': - resolution: {integrity: sha512-+c8ukgwU62DS54nCAjw7keOfHUkmr0B5QHEdcOqRnodF/MNXJbVI8Eopoj4B/0H8Asr65I+A4Amrn7a85/md6A==} + '@img/sharp-libvips-linux-x64@1.3.4': + resolution: {integrity: sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.3.1': - resolution: {integrity: sha512-qlKb/pwbkAi1WMsJrYHk7CuDrd12s27U2QnRhFYUoJNrRCmkosMTttuRFat/DDB3IlDm5qE1TJgZ4JDnHX8Ldw==} + '@img/sharp-libvips-linuxmusl-arm64@1.3.4': + resolution: {integrity: sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.3.1': - resolution: {integrity: sha512-yO21HwoUVLN8Qa+/SBjQLMYwBWAVJjeGPNe+hc0OUeMeifEtJqu5a1c4HayE1nNpDih9y3/KkoltfkDodmKAlg==} + '@img/sharp-libvips-linuxmusl-x64@1.3.4': + resolution: {integrity: sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-linux-arm64@0.35.2': - resolution: {integrity: sha512-af12Pnd0ZGu2HfP8NayB0kk6eC/lrfbQE6HlR4jD+34wdJ1Vw9TF6TMn6ZvffT+WgqVsl0hRbmNvz2u/23VmwA==} + '@img/sharp-linux-arm64@0.35.5': + resolution: {integrity: sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-linux-arm@0.35.2': - resolution: {integrity: sha512-SE4kzF2mepn6z+6E7L6lsV8FzuLL6IPQdyX8ZiwROAG/G8td+hP/m7FsFPwidtrF19gvajuC9l6TxAVcsA4S7A==} + '@img/sharp-linux-arm@0.35.5': + resolution: {integrity: sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==} engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-linux-ppc64@0.35.2': - resolution: {integrity: sha512-hYSBm7zcNtDCozCxQHYZJiu63b/bXsgRZuOxCIBZsStMM9Vap47iFHdbX4kCvQsblPB/k+clhELpdQJHQLSHvg==} + '@img/sharp-linux-ppc64@0.35.5': + resolution: {integrity: sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==} engines: {node: '>=20.9.0'} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-linux-riscv64@0.35.2': - resolution: {integrity: sha512-qQt0Kc13+Hoan/Awq/qMSQw3L+RI1NCRPgD5cUJ/1WSSmIoysLOc72jlRM3E0OHN9Yr313jgeQ2T+zW+F03QFA==} + '@img/sharp-linux-riscv64@0.35.5': + resolution: {integrity: sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==} engines: {node: '>=20.9.0'} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.35.2': - resolution: {integrity: sha512-E4fLLfRPzDLlEeDaTzI98OFLcv++WL5ChLLMwPoVd0CIoZQqupBSNbOisPL5am9XsbQ9T84+iiMpUvbFtkunbA==} + '@img/sharp-linux-s390x@0.35.5': + resolution: {integrity: sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==} engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.35.2': - resolution: {integrity: sha512-gi0zFJJRLswfCZmHtJdikXPOc5u7qamSOS3NHedLqLd4W8Q0NqjdBr6TTRIgsfFjqfTsHFgdfvJ9LwqSgcHiAA==} + '@img/sharp-linux-x64@0.35.5': + resolution: {integrity: sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.35.2': - resolution: {integrity: sha512-siWbOW1u6HFnFLrp0waKyW7VEf7jYvcDWdrXEFa8AkdAQgEvuu5Fz8/Y70w9EeqAdwDtfU012BhEHHaDqvQNzg==} + '@img/sharp-linuxmusl-arm64@0.35.5': + resolution: {integrity: sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-linuxmusl-x64@0.35.2': - resolution: {integrity: sha512-YBqMMcjDi4QGYiSn4vNOYBhmlC4z5AXqkOUUqI2e0AFA4urNv4ESgOgwNl3K+4etQhha0twXlzeF20bbULm9Yg==} + '@img/sharp-linuxmusl-x64@0.35.5': + resolution: {integrity: sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-wasm32@0.35.2': - resolution: {integrity: sha512-Mrv4JQNYVQ94xH+jzZ9r+gowleN8mv2FTgKT+PI6bx5C0G8TdNYndu161pg2i7uoBwxy2ImPMHrJOM2LZef7Bw==} + '@img/sharp-wasm32@0.35.5': + resolution: {integrity: sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==} engines: {node: '>=20.9.0'} - '@img/sharp-webcontainers-wasm32@0.35.2': - resolution: {integrity: sha512-QNV27pxs9wpApEiCfvHM1RDoP1w1+2KrUWWDPEhEwg+latvOrfuhWrHWZKwdSFwU6jh3myjw/yOCRsUIuOft3g==} + '@img/sharp-webcontainers-wasm32@0.35.5': + resolution: {integrity: sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==} engines: {node: '>=20.9.0'} cpu: [wasm32] - '@img/sharp-win32-arm64@0.35.2': - resolution: {integrity: sha512-BiVRYc/t6/Vl3e1hBx0hugG4oN9Pydf4fgMSpxTQJmwGUg/YoXTWHiFeRymHfCZzifxu4F4rpk/I67D0LQ20wQ==} + '@img/sharp-win32-arm64@0.35.5': + resolution: {integrity: sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.35.2': - resolution: {integrity: sha512-YYEhx9PImCC7T0tI8JDMi4DB9LwLCXCU5OWNYEXAxh5Q1ShKkyC6byxzoBJ3gEFDnH2lQckWuDe70G7mB2XJog==} + '@img/sharp-win32-ia32@0.35.5': + resolution: {integrity: sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==} engines: {node: ^20.9.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.35.2': - resolution: {integrity: sha512-imoOyBcoM/iiUr4J6VPpCNjPnjvP/Gks95898yB8YqoGGYmHYbOyCuNv9FMhFgtaiHFGbHW8bxKqRV6VjtXThQ==} + '@img/sharp-win32-x64@0.35.5': + resolution: {integrity: sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==} engines: {node: '>=20.9.0'} cpu: [x64] os: [win32] @@ -393,8 +393,8 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -412,8 +412,8 @@ packages: resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} - '@speed-highlight/core@1.2.23': - resolution: {integrity: sha512-iRoq6i6JDJP6Mt2A5JaPvzw0pgYHH6k92ij+yXiTrB7T2y9N789aWE3EHWj/5ztlJBokcCBja3iYLVdu5wgnkg==} + '@speed-highlight/core@1.2.24': + resolution: {integrity: sha512-qeW2e1l78afw8VhRPfPQ1Gjj+KU5XFQ/OFV5ti6eTa9bruO7mJyZtA4vw0ofqmA3tKCkROE9xLk3VZoeRc98nw==} '@typescript/typescript-aix-ppc64@7.0.2': resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} @@ -549,8 +549,8 @@ packages: error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} - esbuild@0.28.1: - resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + esbuild@0.28.2: + resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} engines: {node: '>=18'} hasBin: true @@ -563,8 +563,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - miniflare@5.20260801.0-alpha: - resolution: {integrity: sha512-AfMrnQbJg81ESsGkGhOkHBtwTqCG+mosR+3GE+qDrhF1I/ieIvgg3ICxNyBvgHBZ3iapy6cysBQHNPykkzrfgw==} + miniflare@5.20261019.1-beta: + resolution: {integrity: sha512-1n7MN2UqZnPniyYAqNuV1YEAaja66ozKGVCc5ZTmYQhTubnoAwGLccwb+ZWYLOajuw3pOaJ70u//bZMuURlRew==} engines: {node: '>=22.0.0'} path-to-regexp@6.3.0: @@ -578,9 +578,14 @@ packages: engines: {node: '>=10'} hasBin: true - sharp@0.35.2: - resolution: {integrity: sha512-FVtFjtBCMiJS6yb5CX7Sop45WFMpeGw6oRKuJnXYgf/f1ms/D7LE/ZUSNxnW7rZ/dbslQWYkoqFHGPaDBtaK4w==} + sharp@0.35.5: + resolution: {integrity: sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==} engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true supports-color@10.2.2: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} @@ -594,32 +599,32 @@ packages: engines: {node: '>=16.20.0'} hasBin: true - undici@7.28.0: - resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} + undici@7.29.1: + resolution: {integrity: sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==} engines: {node: '>=20.18.1'} unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} - valibot@1.4.2: - resolution: {integrity: sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==} + valibot@1.5.0: + resolution: {integrity: sha512-nil6AkP2TChWL43Z5uJ6GTxX01CUA+g8LWUM+N/rB9NBbkUMaUsi9PUNzlUPgoKASgmx9f7eGOYpJ04/fSa6FQ==} peerDependencies: typescript: '>=5' peerDependenciesMeta: typescript: optional: true - workerd@1.20260801.1: - resolution: {integrity: sha512-/g9JGTyqnHtoIscpBHqKD8swE2V4StBs2i69PmLiOhH45OP95jCFICl4F1hKlgN57rqfni5LiCitttoX5OOkVA==} + workerd@1.20261019.1: + resolution: {integrity: sha512-UUYRUq/7DmeCl11YriNbcVbjUZVLtt8uuCXFu+nz77hGFf8d4DEVXoCYtnA+MlBatE4+wxoj47DVqzK3xGBAiw==} engines: {node: '>=16'} hasBin: true - wrangler@4.119.0: - resolution: {integrity: sha512-ookClf+zly4DTc8pBMNrwGQzZKH8IpIYTXkjDw3XS7ZvBQ5mLYH6eOvfD5BEpk3U63zTbv91WRlo1UeRSKXa0g==} + wrangler@4.151.3: + resolution: {integrity: sha512-mzPQLmkAhZUV7CdiAhE+hiIAJlS9xPL6vZe1B8oQFuWxFu7nmQnvHAVjcAcabwSGkXFXH9uspzXwHOFrfbQmqQ==} engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^5.20260801.1 + '@cloudflare/workers-types': ^5.20261019.1 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -646,25 +651,25 @@ snapshots: '@cloudflare/kv-asset-handler@0.5.0': {} - '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260801.1)': + '@cloudflare/unenv-preset@2.16.2(unenv@2.0.0-rc.24)(workerd@1.20261019.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260801.1 + workerd: 1.20261019.1 - '@cloudflare/workerd-darwin-64@1.20260801.1': + '@cloudflare/workerd-darwin-64@1.20261019.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260801.1': + '@cloudflare/workerd-darwin-arm64@1.20261019.1': optional: true - '@cloudflare/workerd-linux-64@1.20260801.1': + '@cloudflare/workerd-linux-64@1.20261019.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20260801.1': + '@cloudflare/workerd-linux-arm64@1.20261019.1': optional: true - '@cloudflare/workerd-windows-64@1.20260801.1': + '@cloudflare/workerd-windows-64@1.20261019.1': optional: true '@cspotcode/source-map-support@0.8.1': @@ -676,198 +681,198 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.28.1': + '@esbuild/aix-ppc64@0.28.2': optional: true - '@esbuild/android-arm64@0.28.1': + '@esbuild/android-arm64@0.28.2': optional: true - '@esbuild/android-arm@0.28.1': + '@esbuild/android-arm@0.28.2': optional: true - '@esbuild/android-x64@0.28.1': + '@esbuild/android-x64@0.28.2': optional: true - '@esbuild/darwin-arm64@0.28.1': + '@esbuild/darwin-arm64@0.28.2': optional: true - '@esbuild/darwin-x64@0.28.1': + '@esbuild/darwin-x64@0.28.2': optional: true - '@esbuild/freebsd-arm64@0.28.1': + '@esbuild/freebsd-arm64@0.28.2': optional: true - '@esbuild/freebsd-x64@0.28.1': + '@esbuild/freebsd-x64@0.28.2': optional: true - '@esbuild/linux-arm64@0.28.1': + '@esbuild/linux-arm64@0.28.2': optional: true - '@esbuild/linux-arm@0.28.1': + '@esbuild/linux-arm@0.28.2': optional: true - '@esbuild/linux-ia32@0.28.1': + '@esbuild/linux-ia32@0.28.2': optional: true - '@esbuild/linux-loong64@0.28.1': + '@esbuild/linux-loong64@0.28.2': optional: true - '@esbuild/linux-mips64el@0.28.1': + '@esbuild/linux-mips64el@0.28.2': optional: true - '@esbuild/linux-ppc64@0.28.1': + '@esbuild/linux-ppc64@0.28.2': optional: true - '@esbuild/linux-riscv64@0.28.1': + '@esbuild/linux-riscv64@0.28.2': optional: true - '@esbuild/linux-s390x@0.28.1': + '@esbuild/linux-s390x@0.28.2': optional: true - '@esbuild/linux-x64@0.28.1': + '@esbuild/linux-x64@0.28.2': optional: true - '@esbuild/netbsd-arm64@0.28.1': + '@esbuild/netbsd-arm64@0.28.2': optional: true - '@esbuild/netbsd-x64@0.28.1': + '@esbuild/netbsd-x64@0.28.2': optional: true - '@esbuild/openbsd-arm64@0.28.1': + '@esbuild/openbsd-arm64@0.28.2': optional: true - '@esbuild/openbsd-x64@0.28.1': + '@esbuild/openbsd-x64@0.28.2': optional: true - '@esbuild/openharmony-arm64@0.28.1': + '@esbuild/openharmony-arm64@0.28.2': optional: true - '@esbuild/sunos-x64@0.28.1': + '@esbuild/sunos-x64@0.28.2': optional: true - '@esbuild/win32-arm64@0.28.1': + '@esbuild/win32-arm64@0.28.2': optional: true - '@esbuild/win32-ia32@0.28.1': + '@esbuild/win32-ia32@0.28.2': optional: true - '@esbuild/win32-x64@0.28.1': + '@esbuild/win32-x64@0.28.2': optional: true '@img/colour@1.1.0': {} - '@img/sharp-darwin-arm64@0.35.2': + '@img/sharp-darwin-arm64@0.35.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.3.1 + '@img/sharp-libvips-darwin-arm64': 1.3.4 optional: true - '@img/sharp-darwin-x64@0.35.2': + '@img/sharp-darwin-x64@0.35.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.3.1 + '@img/sharp-libvips-darwin-x64': 1.3.4 optional: true - '@img/sharp-freebsd-wasm32@0.35.2': + '@img/sharp-freebsd-wasm32@0.35.5': dependencies: - '@img/sharp-wasm32': 0.35.2 + '@img/sharp-wasm32': 0.35.5 optional: true - '@img/sharp-libvips-darwin-arm64@1.3.1': + '@img/sharp-libvips-darwin-arm64@1.3.4': optional: true - '@img/sharp-libvips-darwin-x64@1.3.1': + '@img/sharp-libvips-darwin-x64@1.3.4': optional: true - '@img/sharp-libvips-linux-arm64@1.3.1': + '@img/sharp-libvips-linux-arm64@1.3.4': optional: true - '@img/sharp-libvips-linux-arm@1.3.1': + '@img/sharp-libvips-linux-arm@1.3.4': optional: true - '@img/sharp-libvips-linux-ppc64@1.3.1': + '@img/sharp-libvips-linux-ppc64@1.3.4': optional: true - '@img/sharp-libvips-linux-riscv64@1.3.1': + '@img/sharp-libvips-linux-riscv64@1.3.4': optional: true - '@img/sharp-libvips-linux-s390x@1.3.1': + '@img/sharp-libvips-linux-s390x@1.3.4': optional: true - '@img/sharp-libvips-linux-x64@1.3.1': + '@img/sharp-libvips-linux-x64@1.3.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.3.1': + '@img/sharp-libvips-linuxmusl-arm64@1.3.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.3.1': + '@img/sharp-libvips-linuxmusl-x64@1.3.4': optional: true - '@img/sharp-linux-arm64@0.35.2': + '@img/sharp-linux-arm64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.3.1 + '@img/sharp-libvips-linux-arm64': 1.3.4 optional: true - '@img/sharp-linux-arm@0.35.2': + '@img/sharp-linux-arm@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.3.1 + '@img/sharp-libvips-linux-arm': 1.3.4 optional: true - '@img/sharp-linux-ppc64@0.35.2': + '@img/sharp-linux-ppc64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.3.1 + '@img/sharp-libvips-linux-ppc64': 1.3.4 optional: true - '@img/sharp-linux-riscv64@0.35.2': + '@img/sharp-linux-riscv64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.3.1 + '@img/sharp-libvips-linux-riscv64': 1.3.4 optional: true - '@img/sharp-linux-s390x@0.35.2': + '@img/sharp-linux-s390x@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.3.1 + '@img/sharp-libvips-linux-s390x': 1.3.4 optional: true - '@img/sharp-linux-x64@0.35.2': + '@img/sharp-linux-x64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.3.1 + '@img/sharp-libvips-linux-x64': 1.3.4 optional: true - '@img/sharp-linuxmusl-arm64@0.35.2': + '@img/sharp-linuxmusl-arm64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.3.1 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 optional: true - '@img/sharp-linuxmusl-x64@0.35.2': + '@img/sharp-linuxmusl-x64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.3.1 + '@img/sharp-libvips-linuxmusl-x64': 1.3.4 optional: true - '@img/sharp-wasm32@0.35.2': + '@img/sharp-wasm32@0.35.5': dependencies: '@emnapi/runtime': 1.11.3 optional: true - '@img/sharp-webcontainers-wasm32@0.35.2': + '@img/sharp-webcontainers-wasm32@0.35.5': dependencies: - '@img/sharp-wasm32': 0.35.2 + '@img/sharp-wasm32': 0.35.5 optional: true - '@img/sharp-win32-arm64@0.35.2': + '@img/sharp-win32-arm64@0.35.5': optional: true - '@img/sharp-win32-ia32@0.35.2': + '@img/sharp-win32-ia32@0.35.5': optional: true - '@img/sharp-win32-x64@0.35.2': + '@img/sharp-win32-x64@0.35.5': optional: true '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/sourcemap-codec@1.6.0': {} '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 '@poppinss/colors@4.1.6': dependencies: @@ -883,7 +888,7 @@ snapshots: '@sindresorhus/is@7.2.0': {} - '@speed-highlight/core@1.2.23': {} + '@speed-highlight/core@1.2.24': {} '@typescript/typescript-aix-ppc64@7.0.2': optional: true @@ -953,49 +958,50 @@ snapshots: error-stack-parser-es@1.0.5: {} - esbuild@0.28.1: + esbuild@0.28.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.28.1 - '@esbuild/android-arm': 0.28.1 - '@esbuild/android-arm64': 0.28.1 - '@esbuild/android-x64': 0.28.1 - '@esbuild/darwin-arm64': 0.28.1 - '@esbuild/darwin-x64': 0.28.1 - '@esbuild/freebsd-arm64': 0.28.1 - '@esbuild/freebsd-x64': 0.28.1 - '@esbuild/linux-arm': 0.28.1 - '@esbuild/linux-arm64': 0.28.1 - '@esbuild/linux-ia32': 0.28.1 - '@esbuild/linux-loong64': 0.28.1 - '@esbuild/linux-mips64el': 0.28.1 - '@esbuild/linux-ppc64': 0.28.1 - '@esbuild/linux-riscv64': 0.28.1 - '@esbuild/linux-s390x': 0.28.1 - '@esbuild/linux-x64': 0.28.1 - '@esbuild/netbsd-arm64': 0.28.1 - '@esbuild/netbsd-x64': 0.28.1 - '@esbuild/openbsd-arm64': 0.28.1 - '@esbuild/openbsd-x64': 0.28.1 - '@esbuild/openharmony-arm64': 0.28.1 - '@esbuild/sunos-x64': 0.28.1 - '@esbuild/win32-arm64': 0.28.1 - '@esbuild/win32-ia32': 0.28.1 - '@esbuild/win32-x64': 0.28.1 + '@esbuild/aix-ppc64': 0.28.2 + '@esbuild/android-arm': 0.28.2 + '@esbuild/android-arm64': 0.28.2 + '@esbuild/android-x64': 0.28.2 + '@esbuild/darwin-arm64': 0.28.2 + '@esbuild/darwin-x64': 0.28.2 + '@esbuild/freebsd-arm64': 0.28.2 + '@esbuild/freebsd-x64': 0.28.2 + '@esbuild/linux-arm': 0.28.2 + '@esbuild/linux-arm64': 0.28.2 + '@esbuild/linux-ia32': 0.28.2 + '@esbuild/linux-loong64': 0.28.2 + '@esbuild/linux-mips64el': 0.28.2 + '@esbuild/linux-ppc64': 0.28.2 + '@esbuild/linux-riscv64': 0.28.2 + '@esbuild/linux-s390x': 0.28.2 + '@esbuild/linux-x64': 0.28.2 + '@esbuild/netbsd-arm64': 0.28.2 + '@esbuild/netbsd-x64': 0.28.2 + '@esbuild/openbsd-arm64': 0.28.2 + '@esbuild/openbsd-x64': 0.28.2 + '@esbuild/openharmony-arm64': 0.28.2 + '@esbuild/sunos-x64': 0.28.2 + '@esbuild/win32-arm64': 0.28.2 + '@esbuild/win32-ia32': 0.28.2 + '@esbuild/win32-x64': 0.28.2 fsevents@2.3.3: optional: true kleur@4.1.5: {} - miniflare@5.20260801.0-alpha: + miniflare@5.20261019.1-beta: dependencies: '@cspotcode/source-map-support': 0.8.1 - sharp: 0.35.2 - undici: 7.28.0 - workerd: 1.20260801.1 + sharp: 0.35.5 + undici: 7.29.1 + workerd: 1.20261019.1 ws: 8.21.0 youch: 4.1.0-beta.10 transitivePeerDependencies: + - '@types/node' - bufferutil - utf-8-validate @@ -1005,37 +1011,37 @@ snapshots: semver@7.8.5: {} - sharp@0.35.2: + sharp@0.35.5: dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 semver: 7.8.5 optionalDependencies: - '@img/sharp-darwin-arm64': 0.35.2 - '@img/sharp-darwin-x64': 0.35.2 - '@img/sharp-freebsd-wasm32': 0.35.2 - '@img/sharp-libvips-darwin-arm64': 1.3.1 - '@img/sharp-libvips-darwin-x64': 1.3.1 - '@img/sharp-libvips-linux-arm': 1.3.1 - '@img/sharp-libvips-linux-arm64': 1.3.1 - '@img/sharp-libvips-linux-ppc64': 1.3.1 - '@img/sharp-libvips-linux-riscv64': 1.3.1 - '@img/sharp-libvips-linux-s390x': 1.3.1 - '@img/sharp-libvips-linux-x64': 1.3.1 - '@img/sharp-libvips-linuxmusl-arm64': 1.3.1 - '@img/sharp-libvips-linuxmusl-x64': 1.3.1 - '@img/sharp-linux-arm': 0.35.2 - '@img/sharp-linux-arm64': 0.35.2 - '@img/sharp-linux-ppc64': 0.35.2 - '@img/sharp-linux-riscv64': 0.35.2 - '@img/sharp-linux-s390x': 0.35.2 - '@img/sharp-linux-x64': 0.35.2 - '@img/sharp-linuxmusl-arm64': 0.35.2 - '@img/sharp-linuxmusl-x64': 0.35.2 - '@img/sharp-webcontainers-wasm32': 0.35.2 - '@img/sharp-win32-arm64': 0.35.2 - '@img/sharp-win32-ia32': 0.35.2 - '@img/sharp-win32-x64': 0.35.2 + '@img/sharp-darwin-arm64': 0.35.5 + '@img/sharp-darwin-x64': 0.35.5 + '@img/sharp-freebsd-wasm32': 0.35.5 + '@img/sharp-libvips-darwin-arm64': 1.3.4 + '@img/sharp-libvips-darwin-x64': 1.3.4 + '@img/sharp-libvips-linux-arm': 1.3.4 + '@img/sharp-libvips-linux-arm64': 1.3.4 + '@img/sharp-libvips-linux-ppc64': 1.3.4 + '@img/sharp-libvips-linux-riscv64': 1.3.4 + '@img/sharp-libvips-linux-s390x': 1.3.4 + '@img/sharp-libvips-linux-x64': 1.3.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 + '@img/sharp-libvips-linuxmusl-x64': 1.3.4 + '@img/sharp-linux-arm': 0.35.5 + '@img/sharp-linux-arm64': 0.35.5 + '@img/sharp-linux-ppc64': 0.35.5 + '@img/sharp-linux-riscv64': 0.35.5 + '@img/sharp-linux-s390x': 0.35.5 + '@img/sharp-linux-x64': 0.35.5 + '@img/sharp-linuxmusl-arm64': 0.35.5 + '@img/sharp-linuxmusl-x64': 0.35.5 + '@img/sharp-webcontainers-wasm32': 0.35.5 + '@img/sharp-win32-arm64': 0.35.5 + '@img/sharp-win32-ia32': 0.35.5 + '@img/sharp-win32-x64': 0.35.5 supports-color@10.2.2: {} @@ -1065,37 +1071,38 @@ snapshots: '@typescript/typescript-win32-arm64': 7.0.2 '@typescript/typescript-win32-x64': 7.0.2 - undici@7.28.0: {} + undici@7.29.1: {} unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 - valibot@1.4.2(typescript@7.0.2): + valibot@1.5.0(typescript@7.0.2): optionalDependencies: typescript: 7.0.2 - workerd@1.20260801.1: + workerd@1.20261019.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260801.1 - '@cloudflare/workerd-darwin-arm64': 1.20260801.1 - '@cloudflare/workerd-linux-64': 1.20260801.1 - '@cloudflare/workerd-linux-arm64': 1.20260801.1 - '@cloudflare/workerd-windows-64': 1.20260801.1 + '@cloudflare/workerd-darwin-64': 1.20261019.1 + '@cloudflare/workerd-darwin-arm64': 1.20261019.1 + '@cloudflare/workerd-linux-64': 1.20261019.1 + '@cloudflare/workerd-linux-arm64': 1.20261019.1 + '@cloudflare/workerd-windows-64': 1.20261019.1 - wrangler@4.119.0: + wrangler@4.151.3: dependencies: '@cloudflare/kv-asset-handler': 0.5.0 - '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260801.1) + '@cloudflare/unenv-preset': 2.16.2(unenv@2.0.0-rc.24)(workerd@1.20261019.1) blake3-wasm: 2.1.5 - esbuild: 0.28.1 - miniflare: 5.20260801.0-alpha + esbuild: 0.28.2 + miniflare: 5.20261019.1-beta path-to-regexp: 6.3.0 unenv: 2.0.0-rc.24 - workerd: 1.20260801.1 + workerd: 1.20261019.1 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: + - '@types/node' - bufferutil - utf-8-validate @@ -1110,6 +1117,6 @@ snapshots: dependencies: '@poppinss/colors': 4.1.6 '@poppinss/dumper': 0.6.5 - '@speed-highlight/core': 1.2.23 + '@speed-highlight/core': 1.2.24 cookie: 1.1.1 youch-core: 0.3.3 diff --git a/template_builder/templates/base/static/favicon.png b/template_builder/templates/base/favicon.png similarity index 100% rename from template_builder/templates/base/static/favicon.png rename to template_builder/templates/base/favicon.png From 6d4b5f4246a9c52656ec3428a98005f9873f61a0 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 22 Oct 2026 16:51:11 -0700 Subject: [PATCH 28/34] update pnpm in actions --- .github/workflows/build.yml | 4 ++-- .github/workflows/test.yml | 4 ++-- .github/workflows/update-deps.yml | 4 ++-- .ottotime | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 37bc022b..2bc252a6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,9 +17,9 @@ jobs: fetch-depth: 0 persist-credentials: false - name: Install pnpm - uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 + uses: pnpm/setup@a0881977cd8ea73b1ed212236c99ca10dcc80cf4 # v3 with: - version: ^11.20.0 + version: ^12.15.0 runtime: node@lts install: false - name: Get version diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 57af2fb4..073a2ecb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -49,9 +49,9 @@ jobs: rustup toolchain install stable --component rustfmt - name: Install pnpm - uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 + uses: pnpm/setup@a0881977cd8ea73b1ed212236c99ca10dcc80cf4 # v3 with: - version: ^11.20.0 + version: ^12.15.0 runtime: node@lts install: false - name: Test diff --git a/.github/workflows/update-deps.yml b/.github/workflows/update-deps.yml index d845e64f..e209cd5b 100644 --- a/.github/workflows/update-deps.yml +++ b/.github/workflows/update-deps.yml @@ -46,9 +46,9 @@ jobs: persist-credentials: false - name: Install pnpm - uses: pnpm/setup@c9883cc79df532ad1a7b81bf9ab944ceb090d65c # v2.0.0 + uses: pnpm/setup@a0881977cd8ea73b1ed212236c99ca10dcc80cf4 # v3 with: - version: ^11.20.0 + version: ^12.15.0 runtime: node@lts install: false diff --git a/.ottotime b/.ottotime index fe211563..d3b670d9 100644 --- a/.ottotime +++ b/.ottotime @@ -55,4 +55,4 @@ 1792707730- 6:27 1792709535- 0:47 1792710542- 0:11 -1792712098- 13:11 +1792712098- 15:51 From a408466c9714db4802094acd12cd144a400e35a4 Mon Sep 17 00:00:00 2001 From: Ottomated Date: Thu, 22 Oct 2026 16:53:19 -0700 Subject: [PATCH 29/34] fix o7-favicon --- .ottotime | 2 +- template_builder/templates/base/src/routes/+layout.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.ottotime b/.ottotime index d3b670d9..a6f3242b 100644 --- a/.ottotime +++ b/.ottotime @@ -55,4 +55,4 @@ 1792707730- 6:27 1792709535- 0:47 1792710542- 0:11 -1792712098- 15:51 +1792712098- 18:02 diff --git a/template_builder/templates/base/src/routes/+layout.svelte b/template_builder/templates/base/src/routes/+layout.svelte index 815fbe20..d25735a4 100644 --- a/template_builder/templates/base/src/routes/+layout.svelte +++ b/template_builder/templates/base/src/routes/+layout.svelte @@ -1,5 +1,5 @@