diff --git a/package.json b/package.json index 41c827772..ded19c23c 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,10 @@ "@kobalte/solidbase": "catalog:", "@solidjs/meta": "^0.29.4", "@solidjs/router": "^0.16.1", - "@solidjs/start": "https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080", + "@solidjs/start": "2.0.0-rc.1", "@tailwindcss/vite": "^4.3.0", "dotenv": "^17.3.1", - "nitro": "v3.0.260429-beta", + "nitro": "^3.0.260610-beta", "resolve": "1.22.12", "solid-heroicons": "^3.2.4", "solid-js": "1.9.12", @@ -51,7 +51,7 @@ "typescript-eslint": "^8.54.0" }, "overrides": { - "@solidjs/start": "https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080" + "@solidjs/start": "2.0.0-rc.1" }, "engines": { "node": ">=24", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a7f0eca5..2f6171fe0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,7 +21,7 @@ importers: version: 0.13.11(solid-js@1.9.12) "@kobalte/solidbase": specifier: "catalog:" - version: 0.6.4(@solidjs/start@https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080(crossws@0.4.5(srvx@0.11.15))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(solid-js@1.9.12)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 0.6.4(@solidjs/start@2.0.0-rc.1(crossws@0.4.10(srvx@0.11.22))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(solid-js@1.9.12)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) "@solidjs/meta": specifier: ^0.29.4 version: 0.29.4(solid-js@1.9.12) @@ -29,8 +29,8 @@ importers: specifier: ^0.16.1 version: 0.16.1(solid-js@1.9.12) "@solidjs/start": - specifier: https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080 - version: https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080(crossws@0.4.5(srvx@0.11.15))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + specifier: 2.0.0-rc.1 + version: 2.0.0-rc.1(crossws@0.4.10(srvx@0.11.22))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) "@tailwindcss/vite": specifier: ^4.3.0 version: 4.3.1(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) @@ -38,8 +38,8 @@ importers: specifier: ^17.3.1 version: 17.4.2 nitro: - specifier: v3.0.260429-beta - version: 3.0.260429-beta(dotenv@17.4.2)(jiti@2.7.0)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + specifier: ^3.0.260610-beta + version: 3.0.260610-beta(dotenv@17.4.2)(jiti@2.7.0)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) resolve: specifier: 1.22.12 version: 1.22.12 @@ -121,7 +121,7 @@ importers: version: 0.13.11(solid-js@1.9.12) "@kobalte/solidbase": specifier: "catalog:" - version: 0.6.4(@solidjs/start@https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080(crossws@0.4.5(srvx@0.11.15))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(solid-js@1.9.12)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + version: 0.6.4(@solidjs/start@2.0.0-rc.1(crossws@0.4.10(srvx@0.11.22))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(solid-js@1.9.12)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) "@kobalte/tailwindcss": specifier: ^0.9.0 version: 0.9.0(tailwindcss@4.3.1) @@ -335,36 +335,18 @@ packages: integrity: sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==, } - "@emnapi/core@1.10.0": - resolution: - { - integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==, - } - "@emnapi/core@1.11.1": resolution: { integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==, } - "@emnapi/runtime@1.10.0": - resolution: - { - integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==, - } - "@emnapi/runtime@1.11.1": resolution: { integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==, } - "@emnapi/wasi-threads@1.2.1": - resolution: - { - integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==, - } - "@emnapi/wasi-threads@1.2.2": resolution: { @@ -855,7 +837,6 @@ packages: { integrity: sha512-qW7rVdM1OyGF2UrQ1P5TkAW8LNlLsgsJCpf+XiNUVM0tdeVA8OTdBgSdmDx6fJy+URBrK4n28DUPSdJVzXk3jA==, } - version: 0.6.4 engines: { node: ">=22" } peerDependencies: "@solidjs/start": ^2.0.0 @@ -884,15 +865,6 @@ packages: integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==, } - "@napi-rs/wasm-runtime@1.1.4": - resolution: - { - integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==, - } - peerDependencies: - "@emnapi/core": ^1.7.1 - "@emnapi/runtime": ^1.7.1 - "@napi-rs/wasm-runtime@1.1.6": resolution: { @@ -954,287 +926,334 @@ packages: integrity: sha512-yAuSwog+HQBAXgZ60TNKEwu04y81/09mpbYBCmz1RCxnr4ObNY2JnPZI7HmALbjAhLJ8t5p+wc2JHRK93ubO4w==, } - "@oxc-project/types@0.128.0": + "@oxc-parser/binding-android-arm-eabi@0.139.0": resolution: { - integrity: sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==, + integrity: sha512-22EsXTA3Vc7OvrF4bfT48PFln2UbxkVgrp/Tm32qLw76Dv7SmcInfClJe6yPYamnli6HiqasnESZ5ezN+X4ybg==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [android] - "@oxc-project/types@0.137.0": + "@oxc-parser/binding-android-arm64@0.139.0": resolution: { - integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==, + integrity: sha512-uASQkZV+CUQ6xXvoMzDQyfhd8OMusdv2FyCPfAi5ZDYptesapJlw7erhpGi1Lc+U8QjQV2JUrIh7d/3su2LzmQ==, } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [android] - "@rolldown/binding-android-arm64@1.0.0-rc.18": + "@oxc-parser/binding-darwin-arm64@0.139.0": resolution: { - integrity: sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ==, + integrity: sha512-vuQOv2WF5pZCkdSPEExul98o853M3MCR24DpWsGrUoPJu5KcnGE34kLXY2yFwBwZwT+eN1x40Tt4q6ZzlEdNUA==, } engines: { node: ^20.19.0 || >=22.12.0 } cpu: [arm64] - os: [android] + os: [darwin] - "@rolldown/binding-android-arm64@1.1.3": + "@oxc-parser/binding-darwin-x64@0.139.0": resolution: { - integrity: sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==, + integrity: sha512-zxZB8ChS+7XactZhcyxQ292P/DNiiBaPPKYiVUlb3RC0V/hme5bokNubjcmEmbW9uTfmqLTpveAdkbe66H3pGg==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [android] + cpu: [x64] + os: [darwin] - "@rolldown/binding-darwin-arm64@1.0.0-rc.18": + "@oxc-parser/binding-freebsd-x64@0.139.0": resolution: { - integrity: sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ==, + integrity: sha512-iw2MsoCPBQwdJqywRAGsF1jEAcGoZ+DeG2LVzt5pdUvRHqajsMF46BH0rHiWoWtMwcMSia+oQYga7fHo7u7Bcw==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [darwin] + cpu: [x64] + os: [freebsd] - "@rolldown/binding-darwin-arm64@1.1.3": + "@oxc-parser/binding-linux-arm-gnueabihf@0.139.0": resolution: { - integrity: sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==, + integrity: sha512-SwjD/k3Y5bwGJWOH313VyaDrAuaYg1Pe+4AAXCgUKvSO5IHkj+mZ0oFcOWmB5nTuOM3uwdT+leL8h4OnFlI5hw==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [darwin] + cpu: [arm] + os: [linux] - "@rolldown/binding-darwin-x64@1.0.0-rc.18": + "@oxc-parser/binding-linux-arm-musleabihf@0.139.0": resolution: { - integrity: sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g==, + integrity: sha512-qbeygDkcvailKFhphb2YGMMXsaZIynHlPtoOrcx4NZB/tRbUKraCCMbw8dPeFtEKasfS2qWh1VnReY+Lcys1zA==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] - os: [darwin] + cpu: [arm] + os: [linux] - "@rolldown/binding-darwin-x64@1.1.3": + "@oxc-parser/binding-linux-arm64-gnu@0.139.0": resolution: { - integrity: sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==, + integrity: sha512-SrlL02KeImKlvx/9rCeopOLH7qKI3rqKKEguK6KBwVwEGLhV/A47dW4DNigf6/LFhrwoovaiayEQryjYAI86dQ==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] - os: [darwin] + cpu: [arm64] + os: [linux] + libc: [glibc] - "@rolldown/binding-freebsd-x64@1.0.0-rc.18": + "@oxc-parser/binding-linux-arm64-musl@0.139.0": resolution: { - integrity: sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw==, + integrity: sha512-u9e884ChAVRmIZ1jr/m46S96FoDQnruFjISLi4Y0i6Wu/JUUmIiw7+umLyXILJsPfUuqnN5BJLe23t07+Y6+IA==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] - os: [freebsd] + cpu: [arm64] + os: [linux] + libc: [musl] - "@rolldown/binding-freebsd-x64@1.1.3": + "@oxc-parser/binding-linux-ppc64-gnu@0.139.0": resolution: { - integrity: sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==, + integrity: sha512-Z9tU2b3GJfAXOdirQmz4gZQkQkVjy53i77gf91l0733MQKa/qtk73KQQE2GzDtMqim+HyjpzvemmqzBtH2IJUA==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] - os: [freebsd] + cpu: [ppc64] + os: [linux] + libc: [glibc] - "@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18": + "@oxc-parser/binding-linux-riscv64-gnu@0.139.0": resolution: { - integrity: sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg==, + integrity: sha512-RyUbr7hzPK84YDWKs77PRYk9VBwWbsbuYsQzQWiSmLnARXTg2zntLPGfCH/1wpfUYdmGkp/6SsqTXSsYdw9Jgw==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm] + cpu: [riscv64] os: [linux] + libc: [glibc] - "@rolldown/binding-linux-arm-gnueabihf@1.1.3": + "@oxc-parser/binding-linux-riscv64-musl@0.139.0": resolution: { - integrity: sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==, + integrity: sha512-dcQhjtcDvtR8BgkUpt03Yz5SzxdzYvTigenIJOEsiSX6G2t6yybEMxGWjp0dOuYGror0BaqcZfTyXR58amCEig==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm] + cpu: [riscv64] os: [linux] + libc: [musl] - "@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18": + "@oxc-parser/binding-linux-s390x-gnu@0.139.0": resolution: { - integrity: sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ==, + integrity: sha512-iuGrxysV4rGUymdKpn7bgZQ6Vix8Bi/6D/rp71HYIzphq6NKrsBhsGOYsSZte+uBFL43tXh7Xr7TM72sGliJNA==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] + cpu: [s390x] os: [linux] libc: [glibc] - "@rolldown/binding-linux-arm64-gnu@1.1.3": + "@oxc-parser/binding-linux-x64-gnu@0.139.0": resolution: { - integrity: sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==, + integrity: sha512-NxJdZZyaa2JLLvNfH/iJQXfCNfKcPMylwY4ObMpBVmW4Nq+RyUpVVQXrMMelcQ6rwx3nuhF1Iga8n+eoAKGCIA==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] + cpu: [x64] os: [linux] libc: [glibc] - "@rolldown/binding-linux-arm64-musl@1.0.0-rc.18": + "@oxc-parser/binding-linux-x64-musl@0.139.0": resolution: { - integrity: sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug==, + integrity: sha512-ePxBvvtzISmSsJ0RIj8FNikSCn58i1jtccj7XR4U9Li4iSzhkFyYlnJ51cQTUwkairz8WMTD4SpKoot8RyTnQA==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] + cpu: [x64] os: [linux] libc: [musl] - "@rolldown/binding-linux-arm64-musl@1.1.3": + "@oxc-parser/binding-openharmony-arm64@0.139.0": resolution: { - integrity: sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==, + integrity: sha512-b/c2+mPXMOxG5x16n8yf9cjor/ntQQScmYnSmLEWIWJ4rfXd5dokMxx0kliSLA+YAGq6DD3K9BWi+aFXHiiV1w==, } engines: { node: ^20.19.0 || >=22.12.0 } cpu: [arm64] - os: [linux] - libc: [musl] + os: [openharmony] - "@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18": + "@oxc-parser/binding-wasm32-wasi@0.139.0": resolution: { - integrity: sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg==, + integrity: sha512-rNU0pO+/CVPC2qZ+xtX5R2cOje9Q75q3UkfgwUCPlplqxMv6Iffd5tMPGVMCLGnPINxPlmi0WPsW94HltbYvfQ==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [ppc64] - os: [linux] - libc: [glibc] + cpu: [wasm32] - "@rolldown/binding-linux-ppc64-gnu@1.1.3": + "@oxc-parser/binding-win32-arm64-msvc@0.139.0": resolution: { - integrity: sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==, + integrity: sha512-JPEmfncZfqAFiGsAN6UZSMIBqnG8wn8buywRacFOWjP+9dZwcs03SsBp4tmyjM/4l/VoH/IuThrW1Jof3OyQUw==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [ppc64] - os: [linux] - libc: [glibc] + cpu: [arm64] + os: [win32] - "@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18": + "@oxc-parser/binding-win32-ia32-msvc@0.139.0": resolution: { - integrity: sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA==, + integrity: sha512-c06dWBwEnFHof5JN7T9/ts23uATXS9czPEBO60d4xnjH2Am29Bo7OGKdVHRmcWQnw0OBxlTg9fIEXAvtcwOBfw==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [s390x] - os: [linux] - libc: [glibc] + cpu: [ia32] + os: [win32] - "@rolldown/binding-linux-s390x-gnu@1.1.3": + "@oxc-parser/binding-win32-x64-msvc@0.139.0": resolution: { - integrity: sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==, + integrity: sha512-bI3/44urQjW/D495JPXe+c9d+4Q+ONi3DvDNnzwRZYTWHZ3hAlFdmirYK4mzhTfCZiAly02EbMYir7QGU+9O2Q==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [s390x] - os: [linux] - libc: [glibc] + cpu: [x64] + os: [win32] + + "@oxc-project/types@0.137.0": + resolution: + { + integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==, + } + + "@oxc-project/types@0.139.0": + resolution: + { + integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==, + } + + "@rolldown/binding-android-arm64@1.1.3": + resolution: + { + integrity: sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [android] + + "@rolldown/binding-darwin-arm64@1.1.3": + resolution: + { + integrity: sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [darwin] - "@rolldown/binding-linux-x64-gnu@1.0.0-rc.18": + "@rolldown/binding-darwin-x64@1.1.3": resolution: { - integrity: sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw==, + integrity: sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==, } engines: { node: ^20.19.0 || >=22.12.0 } cpu: [x64] - os: [linux] - libc: [glibc] + os: [darwin] - "@rolldown/binding-linux-x64-gnu@1.1.3": + "@rolldown/binding-freebsd-x64@1.1.3": resolution: { - integrity: sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==, + integrity: sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==, } engines: { node: ^20.19.0 || >=22.12.0 } cpu: [x64] + os: [freebsd] + + "@rolldown/binding-linux-arm-gnueabihf@1.1.3": + resolution: + { + integrity: sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] os: [linux] - libc: [glibc] - "@rolldown/binding-linux-x64-musl@1.0.0-rc.18": + "@rolldown/binding-linux-arm64-gnu@1.1.3": resolution: { - integrity: sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA==, + integrity: sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] + cpu: [arm64] os: [linux] - libc: [musl] + libc: [glibc] - "@rolldown/binding-linux-x64-musl@1.1.3": + "@rolldown/binding-linux-arm64-musl@1.1.3": resolution: { - integrity: sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==, + integrity: sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] + cpu: [arm64] os: [linux] libc: [musl] - "@rolldown/binding-openharmony-arm64@1.0.0-rc.18": + "@rolldown/binding-linux-ppc64-gnu@1.1.3": resolution: { - integrity: sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A==, + integrity: sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [openharmony] + cpu: [ppc64] + os: [linux] + libc: [glibc] - "@rolldown/binding-openharmony-arm64@1.1.3": + "@rolldown/binding-linux-s390x-gnu@1.1.3": resolution: { - integrity: sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==, + integrity: sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [openharmony] + cpu: [s390x] + os: [linux] + libc: [glibc] - "@rolldown/binding-wasm32-wasi@1.0.0-rc.18": + "@rolldown/binding-linux-x64-gnu@1.1.3": resolution: { - integrity: sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg==, + integrity: sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [wasm32] + cpu: [x64] + os: [linux] + libc: [glibc] - "@rolldown/binding-wasm32-wasi@1.1.3": + "@rolldown/binding-linux-x64-musl@1.1.3": resolution: { - integrity: sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==, + integrity: sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [wasm32] + cpu: [x64] + os: [linux] + libc: [musl] - "@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18": + "@rolldown/binding-openharmony-arm64@1.1.3": resolution: { - integrity: sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ==, + integrity: sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==, } engines: { node: ^20.19.0 || >=22.12.0 } cpu: [arm64] - os: [win32] + os: [openharmony] - "@rolldown/binding-win32-arm64-msvc@1.1.3": + "@rolldown/binding-wasm32-wasi@1.1.3": resolution: { - integrity: sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==, + integrity: sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [arm64] - os: [win32] + cpu: [wasm32] - "@rolldown/binding-win32-x64-msvc@1.0.0-rc.18": + "@rolldown/binding-win32-arm64-msvc@1.1.3": resolution: { - integrity: sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg==, + integrity: sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==, } engines: { node: ^20.19.0 || >=22.12.0 } - cpu: [x64] + cpu: [arm64] os: [win32] "@rolldown/binding-win32-x64-msvc@1.1.3": @@ -1246,12 +1265,6 @@ packages: cpu: [x64] os: [win32] - "@rolldown/pluginutils@1.0.0-rc.18": - resolution: - { - integrity: sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==, - } - "@rolldown/pluginutils@1.0.1": resolution: { @@ -1519,16 +1532,14 @@ packages: peerDependencies: solid-js: ^1.8.6 - "@solidjs/start@https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080": + "@solidjs/start@2.0.0-rc.1": resolution: { - integrity: sha512-gpqlCmgEBL/FbGoiiaYKUPz03un2YLog7MT7cvM0hRgXH4iG/JEzKpsGVkS0+QyRDtEgBB4qGB9BKJndGcTrWA==, - tarball: https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080, + integrity: sha512-T+rVcD4Si6wyUsgwpxka8pGph8OLrIrxWK7wb4b/JyLDaCrx+q6dxTJ3TxCljCgw58NWY+grmGllEgAcTm783g==, } - version: 2.0.0-alpha.2 - engines: { node: ">=22" } + engines: { node: ">=24" } peerDependencies: - vite: ^7 + vite: ^8 || ^9 "@swc/helpers@0.5.21": resolution: @@ -1683,12 +1694,6 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - "@tybys/wasm-util@0.10.2": - resolution: - { - integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==, - } - "@tybys/wasm-util@0.10.3": resolution: { @@ -2179,10 +2184,10 @@ packages: } engines: { node: ">= 8" } - crossws@0.4.5: + crossws@0.4.10: resolution: { - integrity: sha512-wUR89x/Rw7/8t+vn0CmGDYM9TD6VtARGb0LD5jq2wjtMy1vCP4M+sm6N6TigWeTYvnA8MoW29NqqXD0ep0rfBA==, + integrity: sha512-pz3oubH/dt12KjqsUB0IuXW4nwRDQ583iDsP4555Cpdqx0NoU7pGlWBcayyFI8f/l/idRpgjMEfwuOxSWJYlIA==, } peerDependencies: srvx: ">=0.11.5" @@ -2378,20 +2383,26 @@ packages: } engines: { node: ">=0.12" } - env-runner@0.1.7: + env-runner@0.1.16: resolution: { - integrity: sha512-i7h96jxETJYhXy5grgHNJ9xNzCzWIn9Ck/VkkYgOlE4gOqknsLX3CmlVb5LmwNex8sOoLFVZLz+TIw/+b5rktA==, + integrity: sha512-2LRJM4P2KLX6J83QZZrMqvgCDt/D5ea7wPcI3yYiy5cG/9rX5QwdwZFx0D7ktWnjdRyZxYjttGGorb5nFqb1CA==, } hasBin: true peerDependencies: - "@netlify/runtime": ^4 - miniflare: ^4.20260317.3 + "@netlify/runtime": ^4.1.23 + "@vercel/queue": ">=0.2.0" + miniflare: ^4.20260515.0 + wrangler: ^4.0.0 peerDependenciesMeta: "@netlify/runtime": optional: true + "@vercel/queue": + optional: true miniflare: optional: true + wrangler: + optional: true error-stack-parser@2.1.4: resolution: @@ -2406,12 +2417,6 @@ packages: } engines: { node: ">= 0.4" } - es-module-lexer@2.1.0: - resolution: - { - integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==, - } - esast-util-from-estree@2.0.0: resolution: { @@ -2604,12 +2609,6 @@ packages: integrity: sha512-2wZjC8OQ3TaVEMcBtYY4Va3lo6J+Ai9jf3d4dbhURMJcU4Pbqe6EcHe424MIZI0VHUA1bR6xdpoHYi3yxokWqA==, } - exsolve@1.0.8: - resolution: - { - integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==, - } - exsolve@1.1.0: resolution: { @@ -2780,10 +2779,10 @@ packages: } engines: { node: ">=6.0" } - h3@2.0.1-rc.16: + h3@2.0.1-rc.22: resolution: { - integrity: sha512-h+pjvyujdo9way8qj6FUbhaQcHlR8FEq65EhTX9ViT5pK8aLj68uFl4hBkF+hsTJAH+H1END2Yv6hTIsabGfag==, + integrity: sha512-Esv0DMIuPkCTSWCA0vO73vcTqwzH1wjSrAO1TXNu/K3up1sZHa9EKMapbmxCDYBeymC3fVTk4qxp7ogQWQ+KgA==, } engines: { node: ">=20.11.1" } hasBin: true @@ -2793,15 +2792,15 @@ packages: crossws: optional: true - h3@2.0.1-rc.22: + h3@2.0.1-rc.25: resolution: { - integrity: sha512-Esv0DMIuPkCTSWCA0vO73vcTqwzH1wjSrAO1TXNu/K3up1sZHa9EKMapbmxCDYBeymC3fVTk4qxp7ogQWQ+KgA==, + integrity: sha512-uIK++Up28xDt4n0+bSWfVssRivNXpUmMmA6CCiK6j9+utLcBMcFK97Gn9PlSZwAPW9oLy3CjGJ4ag40CY9YYtQ==, } engines: { node: ">=20.11.1" } hasBin: true peerDependencies: - crossws: ^0.4.1 + crossws: ^0.4.9 peerDependenciesMeta: crossws: optional: true @@ -2940,10 +2939,10 @@ packages: integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==, } - httpxy@0.5.1: + httpxy@0.5.5: resolution: { - integrity: sha512-JPhqYiixe1A1I+MXDewWDZqeudBGU8Q9jCHYN8ML+779RQzLjTi78HBvWz4jMxUD6h2/vUL12g4q/mFM0OUw1A==, + integrity: sha512-uDjmnPyp1q4Sgzf3w+J/Fc6UqcCEj0x4Wjp7OqK5dGhNeDgpyrAmnS6ey8QWrX3SWDon2DMKf9sBa5X9+CVyMA==, } ignore@5.3.2: @@ -3702,25 +3701,25 @@ packages: integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, } - nf3@0.3.16: + nf3@0.3.22: resolution: { - integrity: sha512-Gs0xRPpUm2nDkqbi40NJ9g7qDIcjcJzgExiydnq6LAyqhI2jfno8wG3NKTL+IiJsx799UHOb1CnSd4Wg4SG4Pw==, + integrity: sha512-NOcqlHu22X1rUakd0SrqllP8kb3LWFmSAi1svTxaKxz+yB604xlaOmUfI3oO+RkODvaocKDDy8bgthnZL8hrkw==, } - nitro@3.0.260429-beta: + nitro@3.0.260610-beta: resolution: { - integrity: sha512-KweLVCUN5X9v9g+4yxAyRcz3FcOlnjmt9FyrAIWDxJETJmNT7I0JV0clgsONjo2nI0U5gwedXYA3RaNtF5XWzg==, + integrity: sha512-KPb4L5yaF/Rx/xoGMpgHRJvZhbhGiqbRKOwwPLCH9jKTKTsEUHLjnJas85AeCzaswqa8Wi52eQBtRsODC4PS0Q==, } engines: { node: ^20.19.0 || >=22.12.0 } hasBin: true peerDependencies: - "@vercel/queue": ^0.1.6 + "@vercel/queue": ^0.3.0 dotenv: "*" giget: "*" - jiti: ^2.6.1 - rollup: ^4.60.2 + jiti: ^2.7.0 + rollup: ^4.61.1 vite: ^7 || ^8 xml2js: ^0.6.2 zephyr-agent: ^0.2.0 @@ -3754,10 +3753,10 @@ packages: integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, } - ocache@0.1.4: + ocache@0.1.5: resolution: { - integrity: sha512-e7geNdWjxSnvsSgvLuPvgKgu7ubM10ZmTPOgpr7mz2BXYtvjMKTiLhjFi/gWU8chkuP6hNkZBsa9LzOusyaqkQ==, + integrity: sha512-kNNnkkVQup/QDvmTz8Q84wc2ntiyoVHDxa6eHWKt5qdGAmFRBIxy83rxgCYEjW0x06UJ9E3P6VgM2yY4rOBH4w==, } ofetch@2.0.0-alpha.3: @@ -3797,6 +3796,13 @@ packages: } engines: { node: ">= 0.8.0" } + oxc-parser@0.139.0: + resolution: + { + integrity: sha512-cf1TKZN+zc0lwqigeyXKzKVk5+vNRe99Or2+wVJsXLdlhJgC+gsIniYDfj/ZEBzCJ8Xm21ZG6YtMbR262CcS2w==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + p-limit@3.1.0: resolution: { @@ -4196,14 +4202,6 @@ packages: } engines: { iojs: ">=1.0.0", node: ">=0.10.0" } - rolldown@1.0.0-rc.18: - resolution: - { - integrity: sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg==, - } - engines: { node: ^20.19.0 || >=22.12.0 } - hasBin: true - rolldown@1.1.3: resolution: { @@ -4218,6 +4216,12 @@ packages: integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==, } + rou3@0.9.1: + resolution: + { + integrity: sha512-z/sSmzvtwMDDnxsPVhfWMuG6F6mbmhFDXoVqLmMfbpDD9qfV3GDmSQpf0+W296/ZDIpW2wcMmBfpVFzcnOi/nA==, + } + run-parallel@1.2.0: resolution: { @@ -4398,6 +4402,14 @@ packages: engines: { node: ">=20.16.0" } hasBin: true + srvx@0.11.22: + resolution: + { + integrity: sha512-LqZxxBDMKuMAZzFzJnDCkFOrs9MZQZr0LvHiO/SuSZVdQaXD7xQ5UWTUxheJrQPve1qk9MG2B/yttUvJxw8egQ==, + } + engines: { node: ">=20.16.0" } + hasBin: true + stackframe@1.3.4: resolution: { @@ -5081,33 +5093,17 @@ snapshots: "@docsearch/css@3.9.0": {} - "@emnapi/core@1.10.0": - dependencies: - "@emnapi/wasi-threads": 1.2.1 - tslib: 2.8.1 - optional: true - "@emnapi/core@1.11.1": dependencies: "@emnapi/wasi-threads": 1.2.2 tslib: 2.8.1 optional: true - "@emnapi/runtime@1.10.0": - dependencies: - tslib: 2.8.1 - optional: true - "@emnapi/runtime@1.11.1": dependencies: tslib: 2.8.1 optional: true - "@emnapi/wasi-threads@1.2.1": - dependencies: - tslib: 2.8.1 - optional: true - "@emnapi/wasi-threads@1.2.2": dependencies: tslib: 2.8.1 @@ -5342,7 +5338,7 @@ snapshots: solid-presence: 0.1.8(solid-js@1.9.12) solid-prevent-scroll: 0.1.10(solid-js@1.9.12) - "@kobalte/solidbase@0.6.4(@solidjs/start@https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080(crossws@0.4.5(srvx@0.11.15))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(solid-js@1.9.12)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))": + "@kobalte/solidbase@0.6.4(@solidjs/start@2.0.0-rc.1(crossws@0.4.10(srvx@0.11.22))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)))(solid-js@1.9.12)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))": dependencies: "@alloc/quick-lru": 5.2.0 "@bprogress/core": 1.3.4 @@ -5366,7 +5362,7 @@ snapshots: "@solid-primitives/storage": 4.3.4(solid-js@1.9.12) "@solidjs/meta": 0.29.4(solid-js@1.9.12) "@solidjs/router": 0.16.1(solid-js@1.9.12) - "@solidjs/start": https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080(crossws@0.4.5(srvx@0.11.15))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) + "@solidjs/start": 2.0.0-rc.1(crossws@0.4.10(srvx@0.11.22))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) cross-spawn: 7.0.6 diff: 8.0.4 esast-util-from-js: 2.0.1 @@ -5463,13 +5459,6 @@ snapshots: transitivePeerDependencies: - supports-color - "@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)": - dependencies: - "@emnapi/core": 1.10.0 - "@emnapi/runtime": 1.10.0 - "@tybys/wasm-util": 0.10.2 - optional: true - "@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)": dependencies: "@emnapi/core": 1.11.1 @@ -5507,87 +5496,108 @@ snapshots: "@orama/oramacore-events-parser@0.0.5": {} - "@oxc-project/types@0.128.0": {} + "@oxc-parser/binding-android-arm-eabi@0.139.0": + optional: true - "@oxc-project/types@0.137.0": {} + "@oxc-parser/binding-android-arm64@0.139.0": + optional: true - "@rolldown/binding-android-arm64@1.0.0-rc.18": + "@oxc-parser/binding-darwin-arm64@0.139.0": optional: true - "@rolldown/binding-android-arm64@1.1.3": + "@oxc-parser/binding-darwin-x64@0.139.0": optional: true - "@rolldown/binding-darwin-arm64@1.0.0-rc.18": + "@oxc-parser/binding-freebsd-x64@0.139.0": optional: true - "@rolldown/binding-darwin-arm64@1.1.3": + "@oxc-parser/binding-linux-arm-gnueabihf@0.139.0": optional: true - "@rolldown/binding-darwin-x64@1.0.0-rc.18": + "@oxc-parser/binding-linux-arm-musleabihf@0.139.0": optional: true - "@rolldown/binding-darwin-x64@1.1.3": + "@oxc-parser/binding-linux-arm64-gnu@0.139.0": optional: true - "@rolldown/binding-freebsd-x64@1.0.0-rc.18": + "@oxc-parser/binding-linux-arm64-musl@0.139.0": optional: true - "@rolldown/binding-freebsd-x64@1.1.3": + "@oxc-parser/binding-linux-ppc64-gnu@0.139.0": optional: true - "@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18": + "@oxc-parser/binding-linux-riscv64-gnu@0.139.0": optional: true - "@rolldown/binding-linux-arm-gnueabihf@1.1.3": + "@oxc-parser/binding-linux-riscv64-musl@0.139.0": optional: true - "@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18": + "@oxc-parser/binding-linux-s390x-gnu@0.139.0": optional: true - "@rolldown/binding-linux-arm64-gnu@1.1.3": + "@oxc-parser/binding-linux-x64-gnu@0.139.0": optional: true - "@rolldown/binding-linux-arm64-musl@1.0.0-rc.18": + "@oxc-parser/binding-linux-x64-musl@0.139.0": optional: true - "@rolldown/binding-linux-arm64-musl@1.1.3": + "@oxc-parser/binding-openharmony-arm64@0.139.0": optional: true - "@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18": + "@oxc-parser/binding-wasm32-wasi@0.139.0": + dependencies: + "@emnapi/core": 1.11.1 + "@emnapi/runtime": 1.11.1 + "@napi-rs/wasm-runtime": 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - "@rolldown/binding-linux-ppc64-gnu@1.1.3": + "@oxc-parser/binding-win32-arm64-msvc@0.139.0": optional: true - "@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18": + "@oxc-parser/binding-win32-ia32-msvc@0.139.0": optional: true - "@rolldown/binding-linux-s390x-gnu@1.1.3": + "@oxc-parser/binding-win32-x64-msvc@0.139.0": optional: true - "@rolldown/binding-linux-x64-gnu@1.0.0-rc.18": + "@oxc-project/types@0.137.0": {} + + "@oxc-project/types@0.139.0": {} + + "@rolldown/binding-android-arm64@1.1.3": optional: true - "@rolldown/binding-linux-x64-gnu@1.1.3": + "@rolldown/binding-darwin-arm64@1.1.3": optional: true - "@rolldown/binding-linux-x64-musl@1.0.0-rc.18": + "@rolldown/binding-darwin-x64@1.1.3": optional: true - "@rolldown/binding-linux-x64-musl@1.1.3": + "@rolldown/binding-freebsd-x64@1.1.3": optional: true - "@rolldown/binding-openharmony-arm64@1.0.0-rc.18": + "@rolldown/binding-linux-arm-gnueabihf@1.1.3": optional: true - "@rolldown/binding-openharmony-arm64@1.1.3": + "@rolldown/binding-linux-arm64-gnu@1.1.3": optional: true - "@rolldown/binding-wasm32-wasi@1.0.0-rc.18": - dependencies: - "@emnapi/core": 1.10.0 - "@emnapi/runtime": 1.10.0 - "@napi-rs/wasm-runtime": 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + "@rolldown/binding-linux-arm64-musl@1.1.3": + optional: true + + "@rolldown/binding-linux-ppc64-gnu@1.1.3": + optional: true + + "@rolldown/binding-linux-s390x-gnu@1.1.3": + optional: true + + "@rolldown/binding-linux-x64-gnu@1.1.3": + optional: true + + "@rolldown/binding-linux-x64-musl@1.1.3": + optional: true + + "@rolldown/binding-openharmony-arm64@1.1.3": optional: true "@rolldown/binding-wasm32-wasi@1.1.3": @@ -5597,20 +5607,12 @@ snapshots: "@napi-rs/wasm-runtime": 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - "@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18": - optional: true - "@rolldown/binding-win32-arm64-msvc@1.1.3": optional: true - "@rolldown/binding-win32-x64-msvc@1.0.0-rc.18": - optional: true - "@rolldown/binding-win32-x64-msvc@1.1.3": optional: true - "@rolldown/pluginutils@1.0.0-rc.18": {} - "@rolldown/pluginutils@1.0.1": {} "@shikijs/core@1.29.2": @@ -5790,7 +5792,7 @@ snapshots: dependencies: solid-js: 1.9.12 - "@solidjs/start@https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080(crossws@0.4.5(srvx@0.11.15))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))": + "@solidjs/start@2.0.0-rc.1(crossws@0.4.10(srvx@0.11.22))(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0))": dependencies: "@babel/core": 7.29.0 "@babel/traverse": 7.29.0 @@ -5801,12 +5803,11 @@ snapshots: cookie-es: 2.0.1 defu: 6.1.7 error-stack-parser: 2.1.4 - es-module-lexer: 2.1.0 - esbuild: 0.27.7 fast-glob: 3.3.3 - h3: 2.0.1-rc.16(crossws@0.4.5(srvx@0.11.15)) + h3: 2.0.1-rc.25(crossws@0.4.10(srvx@0.11.22)) html-to-image: 1.11.13 micromatch: 4.0.8 + oxc-parser: 0.139.0 path-to-regexp: 8.4.2 pathe: 2.0.3 radix3: 1.1.2 @@ -5815,7 +5816,7 @@ snapshots: shiki: 1.29.2 solid-js: 1.9.12 source-map-js: 1.2.1 - srvx: 0.11.15 + srvx: 0.11.22 terracotta: 1.1.0(solid-js@1.9.12) vite: 8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) vite-plugin-solid: 2.11.12(solid-js@1.9.12)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)) @@ -5901,11 +5902,6 @@ snapshots: tailwindcss: 4.3.1 vite: 8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0) - "@tybys/wasm-util@0.10.2": - dependencies: - tslib: 2.8.1 - optional: true - "@tybys/wasm-util@0.10.3": dependencies: tslib: 2.8.1 @@ -6237,9 +6233,9 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crossws@0.4.5(srvx@0.11.15): + crossws@0.4.10(srvx@0.11.22): optionalDependencies: - srvx: 0.11.15 + srvx: 0.11.22 css-select@5.2.2: dependencies: @@ -6316,12 +6312,12 @@ snapshots: entities@6.0.1: {} - env-runner@0.1.7: + env-runner@0.1.16: dependencies: - crossws: 0.4.5(srvx@0.11.15) - exsolve: 1.0.8 - httpxy: 0.5.1 - srvx: 0.11.15 + crossws: 0.4.10(srvx@0.11.22) + exsolve: 1.1.0 + httpxy: 0.5.5 + srvx: 0.11.22 error-stack-parser@2.1.4: dependencies: @@ -6329,8 +6325,6 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@2.1.0: {} - esast-util-from-estree@2.0.0: dependencies: "@types/estree-jsx": 1.0.5 @@ -6373,6 +6367,7 @@ snapshots: "@esbuild/win32-arm64": 0.27.7 "@esbuild/win32-ia32": 0.27.7 "@esbuild/win32-x64": 0.27.7 + optional: true escalade@3.2.0: {} @@ -6517,8 +6512,6 @@ snapshots: "@expressive-code/plugin-shiki": 0.41.7 "@expressive-code/plugin-text-markers": 0.41.7 - exsolve@1.0.8: {} - exsolve@1.1.0: {} extend-shallow@2.0.1: @@ -6603,19 +6596,19 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 - h3@2.0.1-rc.16(crossws@0.4.5(srvx@0.11.15)): + h3@2.0.1-rc.22(crossws@0.4.10(srvx@0.11.22)): dependencies: rou3: 0.8.1 srvx: 0.11.15 optionalDependencies: - crossws: 0.4.5(srvx@0.11.15) + crossws: 0.4.10(srvx@0.11.22) - h3@2.0.1-rc.22(crossws@0.4.5(srvx@0.11.15)): + h3@2.0.1-rc.25(crossws@0.4.10(srvx@0.11.22)): dependencies: - rou3: 0.8.1 - srvx: 0.11.15 + rou3: 0.9.1 + srvx: 0.11.22 optionalDependencies: - crossws: 0.4.5(srvx@0.11.15) + crossws: 0.4.10(srvx@0.11.22) hasown@2.0.3: dependencies: @@ -6787,7 +6780,7 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 - httpxy@0.5.1: {} + httpxy@0.5.5: {} ignore@5.3.2: {} @@ -7450,22 +7443,22 @@ snapshots: natural-compare@1.4.0: {} - nf3@0.3.16: {} + nf3@0.3.22: {} - nitro@3.0.260429-beta(dotenv@17.4.2)(jiti@2.7.0)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)): + nitro@3.0.260610-beta(dotenv@17.4.2)(jiti@2.7.0)(vite@8.1.3(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(yaml@2.9.0)): dependencies: consola: 3.4.2 - crossws: 0.4.5(srvx@0.11.15) + crossws: 0.4.10(srvx@0.11.22) db0: 0.3.4 - env-runner: 0.1.7 - h3: 2.0.1-rc.22(crossws@0.4.5(srvx@0.11.15)) + env-runner: 0.1.16 + h3: 2.0.1-rc.22(crossws@0.4.10(srvx@0.11.22)) hookable: 6.1.1 - nf3: 0.3.16 - ocache: 0.1.4 + nf3: 0.3.22 + ocache: 0.1.5 ofetch: 2.0.0-alpha.3 ohash: 2.0.11 - rolldown: 1.0.0-rc.18 - srvx: 0.11.15 + rolldown: 1.1.3 + srvx: 0.11.22 unenv: 2.0.0-rc.24 unstorage: 2.0.0-alpha.7(db0@0.3.4)(ofetch@2.0.0-alpha.3) optionalDependencies: @@ -7502,6 +7495,7 @@ snapshots: - mysql2 - sqlite3 - uploadthing + - wrangler node-releases@2.0.38: {} @@ -7509,7 +7503,7 @@ snapshots: dependencies: boolbase: 1.0.0 - ocache@0.1.4: + ocache@0.1.5: dependencies: ohash: 2.0.11 @@ -7540,6 +7534,31 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + oxc-parser@0.139.0: + dependencies: + "@oxc-project/types": 0.139.0 + optionalDependencies: + "@oxc-parser/binding-android-arm-eabi": 0.139.0 + "@oxc-parser/binding-android-arm64": 0.139.0 + "@oxc-parser/binding-darwin-arm64": 0.139.0 + "@oxc-parser/binding-darwin-x64": 0.139.0 + "@oxc-parser/binding-freebsd-x64": 0.139.0 + "@oxc-parser/binding-linux-arm-gnueabihf": 0.139.0 + "@oxc-parser/binding-linux-arm-musleabihf": 0.139.0 + "@oxc-parser/binding-linux-arm64-gnu": 0.139.0 + "@oxc-parser/binding-linux-arm64-musl": 0.139.0 + "@oxc-parser/binding-linux-ppc64-gnu": 0.139.0 + "@oxc-parser/binding-linux-riscv64-gnu": 0.139.0 + "@oxc-parser/binding-linux-riscv64-musl": 0.139.0 + "@oxc-parser/binding-linux-s390x-gnu": 0.139.0 + "@oxc-parser/binding-linux-x64-gnu": 0.139.0 + "@oxc-parser/binding-linux-x64-musl": 0.139.0 + "@oxc-parser/binding-openharmony-arm64": 0.139.0 + "@oxc-parser/binding-wasm32-wasi": 0.139.0 + "@oxc-parser/binding-win32-arm64-msvc": 0.139.0 + "@oxc-parser/binding-win32-ia32-msvc": 0.139.0 + "@oxc-parser/binding-win32-x64-msvc": 0.139.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -7800,27 +7819,6 @@ snapshots: reusify@1.1.0: {} - rolldown@1.0.0-rc.18: - dependencies: - "@oxc-project/types": 0.128.0 - "@rolldown/pluginutils": 1.0.0-rc.18 - optionalDependencies: - "@rolldown/binding-android-arm64": 1.0.0-rc.18 - "@rolldown/binding-darwin-arm64": 1.0.0-rc.18 - "@rolldown/binding-darwin-x64": 1.0.0-rc.18 - "@rolldown/binding-freebsd-x64": 1.0.0-rc.18 - "@rolldown/binding-linux-arm-gnueabihf": 1.0.0-rc.18 - "@rolldown/binding-linux-arm64-gnu": 1.0.0-rc.18 - "@rolldown/binding-linux-arm64-musl": 1.0.0-rc.18 - "@rolldown/binding-linux-ppc64-gnu": 1.0.0-rc.18 - "@rolldown/binding-linux-s390x-gnu": 1.0.0-rc.18 - "@rolldown/binding-linux-x64-gnu": 1.0.0-rc.18 - "@rolldown/binding-linux-x64-musl": 1.0.0-rc.18 - "@rolldown/binding-openharmony-arm64": 1.0.0-rc.18 - "@rolldown/binding-wasm32-wasi": 1.0.0-rc.18 - "@rolldown/binding-win32-arm64-msvc": 1.0.0-rc.18 - "@rolldown/binding-win32-x64-msvc": 1.0.0-rc.18 - rolldown@1.1.3: dependencies: "@oxc-project/types": 0.137.0 @@ -7844,6 +7842,8 @@ snapshots: rou3@0.8.1: {} + rou3@0.9.1: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -7945,6 +7945,8 @@ snapshots: srvx@0.11.15: {} + srvx@0.11.22: {} + stackframe@1.3.4: {} stringify-entities@4.0.4: diff --git a/src/routes/solid-start/v2/(0)building-your-application/(2)css-and-styling.mdx b/src/routes/solid-start/v2/(0)building-your-application/(2)css-and-styling.mdx index 570e26eef..6afe086de 100644 --- a/src/routes/solid-start/v2/(0)building-your-application/(2)css-and-styling.mdx +++ b/src/routes/solid-start/v2/(0)building-your-application/(2)css-and-styling.mdx @@ -16,7 +16,7 @@ description: >- solutions. Implement scoped styles and design systems. --- -SolidStart 2.0 introduces a completely revamped CSS rendering mechanism: +SolidStart v2 introduces a completely revamped CSS rendering mechanism: - CSS deduplication during server-side rendering works more consistently across the board. - Hot module replacement (HMR) of route CSS is now directly managed by Vite instead of SolidStart. @@ -144,7 +144,7 @@ export default function About() { ## Lazy loading -[Lazy](https://docs.solidjs.com/reference/component-apis/lazy) loading components with CSS is now fully supported in SolidStart 2.0 and no longer results in flashes of unstyled content (FOUC): +[Lazy](https://docs.solidjs.com/reference/component-apis/lazy) loading components with CSS is now fully supported in SolidStart v2 and no longer results in flashes of unstyled content (FOUC): ```tsx title="App.tsx" tab="component" import { lazy } from "solid-js"; diff --git a/src/routes/solid-start/v2/(0)building-your-application/(5)head-and-metadata.mdx b/src/routes/solid-start/v2/(0)building-your-application/(5)head-and-metadata.mdx new file mode 100644 index 000000000..ad2c5d156 --- /dev/null +++ b/src/routes/solid-start/v2/(0)building-your-application/(5)head-and-metadata.mdx @@ -0,0 +1,99 @@ +--- +title: Head and metadata +use_cases: >- + seo optimization, page titles, meta tags, og tags, social sharing, search + engine visibility, dynamic metadata +tags: + - seo + - metadata + - head + - title + - meta + - og-tags +version: "2.0" +description: >- + Manage SEO and metadata in SolidStart with dynamic titles, meta tags, and Open + Graph tags. +--- + +SolidStart does not bundle a metadata API. Use [`@solidjs/meta`](/solid-meta) to manage document titles, metadata, links, styles, and other elements in ``. + +```package-install +@solidjs/meta +``` + +## Add the provider + +Place `MetaProvider` in the router root so route metadata is collected during server rendering and updated during client navigation. + +```tsx title="src/app.tsx" {8,12} +import { MetaProvider } from "@solidjs/meta"; +import { Router } from "@solidjs/router"; +import { FileRoutes } from "@solidjs/start/router"; +import { Suspense } from "solid-js"; + +export default function App() { + return ( + ( + + {props.children} + + )} + > + + + ); +} +``` + +## Set route metadata + +Metadata components can be rendered from any route below `MetaProvider`. They are removed or updated when the route changes. + +```tsx title="src/routes/about.tsx" +import { Meta, Title } from "@solidjs/meta"; + +export default function About() { + return ( + <> + About | My site + + +

About

+ + ); +} +``` + +## Use asynchronous data + +Metadata can read the same query result as the route. Wrap the rendered data in `Suspense` or `Show` when it may not be available immediately. + +```tsx title="src/routes/users/[id].tsx" +import { Title } from "@solidjs/meta"; +import { createAsync, query, type RouteSectionProps } from "@solidjs/router"; +import { Show } from "solid-js"; + +const getUser = query(async (id: string) => { + "use server"; + return { id, name: `User ${id}` }; +}, "user"); + +export default function User(props: RouteSectionProps) { + const user = createAsync(() => getUser(props.params.id)); + + return ( + + {(value) => ( + <> + {value().name} +

{value().name}

+ + )} +
+ ); +} +``` + +See the [`@solidjs/meta` documentation](/solid-meta) for all supported head elements and provider behavior. diff --git a/src/routes/solid-start/v2/(0)building-your-application/(6)route-prerendering.mdx b/src/routes/solid-start/v2/(0)building-your-application/(6)route-prerendering.mdx new file mode 100644 index 000000000..1d4c3e00f --- /dev/null +++ b/src/routes/solid-start/v2/(0)building-your-application/(6)route-prerendering.mdx @@ -0,0 +1,57 @@ +--- +title: Route pre-rendering +use_cases: >- + static site generation, ssg, blog sites, documentation, marketing pages, + performance optimization, seo improvement +tags: + - prerender + - ssg + - static + - performance + - build + - seo +version: "2.0" +description: >- + Pre-render SolidStart routes to static HTML with Nitro v3. +--- + +Route pre-rendering produces static HTML during `vite build`. Nitro writes the generated files to `.output/public`, where a CDN or server can serve them without rendering the route on each request. + +Configure prerendering through Nitro's top-level Vite configuration. + +## Pre-render selected routes + +```tsx title="vite.config.ts" +import { nitro } from "nitro/vite"; +import { defineConfig } from "vite"; +import { solidStart } from "@solidjs/start/config"; + +export default defineConfig({ + plugins: [solidStart(), nitro()], + nitro: { + prerender: { + routes: ["/", "/about"], + }, + }, +}); +``` + +## Crawl links + +Set `crawlLinks` to start at `/` and follow links found in rendered HTML. Add `routes` when the crawler needs additional entry points. + +```tsx title="vite.config.ts" +export default defineConfig({ + plugins: [solidStart(), nitro()], + nitro: { + prerender: { + crawlLinks: true, + failOnError: true, + }, + }, +}); +``` + +Dynamic routes that are not linked from a crawled page must be listed explicitly or discovered from another entry route. + +For retry, concurrency, ignore, and output-path options, see [Nitro's prerender configuration](https://nitro.build/config#prerender). diff --git a/src/routes/solid-start/v2/(0)building-your-application/(7)static-assets.mdx b/src/routes/solid-start/v2/(0)building-your-application/(7)static-assets.mdx new file mode 100644 index 000000000..0f4fa1290 --- /dev/null +++ b/src/routes/solid-start/v2/(0)building-your-application/(7)static-assets.mdx @@ -0,0 +1,93 @@ +--- +title: Static assets +use_cases: >- + images, fonts, documents, favicon, robots.txt, service workers, media files, + public resources +tags: + - assets + - images + - public + - static + - media + - files +version: "2.0" +description: >- + Manage static assets in SolidStart using the public directory or imports. + Serve images, fonts, documents, and media files. +--- + +Within SolidStart there are two ways to import static assets into your project: using the public directory and using imports. + +## Public directory + +Rich web applications use assets to create visuals. +In SolidStart, the `/public` directory can be used to store static assets. +These assets are served at the exact path they are in, relative to the public directory: + +``` +|-- public +| favicon.ico -> /favicon.ico +| |-- images +| | |-- logo.png -> /images/logo.png +| | |-- background.png -> /images/background.png +| |-- models +| | |-- player.gltf -> /models/player.gltf +| |-- documents +| | |-- report.pdf -> /documents/report.pdf +``` + +If you would like to reference an asset in the public directory, you can use the absolute path to the asset: + +```tsx { 5 } +export default function About() { + return ( + <> +

About

+ Solid logo + + ); +} +``` + +This is ideal when you want to have human-readable, stable references to static assets. +This can be useful for assets such as: + +- documents +- service workers +- images, audio, and video +- manifest files +- metadata files (e.g., `robots.txt`, sitemaps) +- favicon + +## Importing assets + +Vite provides a way to import assets directly into your Solid components: + +```tsx +import logo from "./solid.png"; + +export default function About() { + return ( + <> +

About

+ Solid logo + // Renders + Solid logo + + ); +} +``` + +When you use imports, Vite will create a hashed filename. +For example, `solid.png` will become `solid.2d8efhg.png`. + +## Public directory versus imports + +The public directory and imports are both valid ways to include static assets in your project. +The driver to use one over the other is based on your use case. + +For dynamic updates to your assets, using the public directory is the best choice. +It allows you to maintain full control over the asset URL paths, ensuring that the links remain consistent even when the assets are updated. + +When using imports, the filename is hashed and therefore will not be predictable over time. +This can be beneficial for cache busting but detrimental if you want to send someone a link to the asset. diff --git a/src/routes/solid-start/v2/(0)index.mdx b/src/routes/solid-start/v2/(0)index.mdx index 072ddb76d..8b4457880 100644 --- a/src/routes/solid-start/v2/(0)index.mdx +++ b/src/routes/solid-start/v2/(0)index.mdx @@ -16,7 +16,7 @@ description: >- Vite-based configuration. --- -SolidStart 2.0 builds a full-stack app on top of [Solid](/) and [Solid Router](/solid-router), with file-based routing, server functions, and Vite-based configuration. +SolidStart v2 builds a full-stack app on top of [Solid v1](/), [Solid Router](/solid-router), and [Vite 8+](https://vite.dev). It uses Vite's Environment API for client and server builds and works with deployment Vite plugins such as [Nitro v3](https://nitro.build) and the [Cloudflare Vite plugin](https://www.npmjs.com/package/@cloudflare/vite-plugin). The framework is split into a handful of entry points: @@ -26,6 +26,8 @@ The framework is split into a handful of entry points: - `@solidjs/start/http` for request, response, cookie, and session helpers - `@solidjs/start/middleware` for middleware composition +SolidStart v2 requires Node.js 24 or newer and Vite 8 or 9. + ## What v2 keeps The core model carries over from v1: @@ -37,6 +39,6 @@ The core model carries over from v1: ## What changed from v1 -Configuration moved from `app.config.ts` to `vite.config.ts` through `solidStart()`. +Configuration moved from `app.config.ts` to `vite.config.ts`. The `solidStart()` plugin configures the application, while a deployment Vite plugin configures the server runtime and deployment target. If you are upgrading an existing app, start with the [migration guide](/solid-start/v2/migrating-from-v1). diff --git a/src/routes/solid-start/v2/(1)advanced/(0)middleware.mdx b/src/routes/solid-start/v2/(1)advanced/(0)middleware.mdx new file mode 100644 index 000000000..34b475990 --- /dev/null +++ b/src/routes/solid-start/v2/(1)advanced/(0)middleware.mdx @@ -0,0 +1,155 @@ +--- +title: Middleware +use_cases: >- + request interception, header management, global data sharing, request + preprocessing, logging, redirects +tags: + - middleware + - headers + - interceptors + - logging + - preprocessing + - locals +version: "2.0" +description: >- + Compose H3 v2 middleware for authentication, logging, headers, and + request-scoped data in SolidStart. +--- + +Middleware runs around SolidStart's request handler. It is useful for logging, redirects, request preprocessing, response headers, and initializing request-scoped data. + +Do not rely on middleware alone for authorization. Client-side navigation can reuse data and server functions independently of a page request, so authorization must also be enforced close to each protected query, action, or API route. + +## Configure middleware + +Create a middleware module and pass its path to `solidStart()`. + +```ts title="src/middleware/index.ts" +import { createMiddleware } from "@solidjs/start/middleware"; + +export default createMiddleware([ + async (event, next) => { + console.log("Request received:", event.req.url); + const startedAt = Date.now(); + + const response = await next(); + + console.log(`Request took ${Date.now() - startedAt}ms`); + return response; + }, +]); +``` + +```tsx title="vite.config.ts" {7} +import { nitro } from "nitro/vite"; +import { defineConfig } from "vite"; +import { solidStart } from "@solidjs/start/config"; + +export default defineConfig({ + plugins: [solidStart({ middleware: "./src/middleware/index.ts" }), nitro()], +}); +``` + +Each entry is an [H3 middleware](https://h3.dev/guide/basics/middleware). Code before `await next()` runs before the downstream handler. Code after it runs as the response unwinds. + +## Request-scoped locals + +SolidStart decorates configured middleware with its request context. Use `getRequestEvent()` to read or update `event.locals` for later server code. + +```ts title="src/middleware/index.ts" +import { createMiddleware } from "@solidjs/start/middleware"; +import { getRequestEvent } from "solid-js/web"; + +export default createMiddleware([ + async (_event, next) => { + const requestEvent = getRequestEvent(); + if (requestEvent) { + requestEvent.locals.requestId = crypto.randomUUID(); + } + return next(); + }, +]); +``` + +Augment `App.RequestEventLocals` to type custom fields. See [Request events](/solid-start/v2/advanced/request-events#locals). + +## Headers and cookies + +H3 v2 uses Web standard `Request`, `Response`, and `Headers` objects. You can access them through the H3 event or use SolidStart's context-aware HTTP helpers. + +```ts title="src/middleware/index.ts" +import { getCookie, setCookie } from "@solidjs/start/http"; +import { createMiddleware } from "@solidjs/start/middleware"; + +export default createMiddleware([ + async (event, next) => { + const theme = getCookie("theme") ?? "system"; + setCookie("theme", theme, { + httpOnly: true, + secure: true, + sameSite: "lax", + }); + + const response = await next(); + event.res.headers.set("x-theme", theme); + return response; + }, +]); +``` + +`@solidjs/start/http` and `@solidjs/start/middleware` are server-only entrypoints. Importing them from client-reachable code causes a clear development or build error. + +## Short-circuit the request + +Return a `Response` before calling `next()` to stop the chain. + +```ts +import { createMiddleware } from "@solidjs/start/middleware"; + +export default createMiddleware([ + (event, next) => { + if (!event.req.headers.get("authorization")) { + return new Response("Unauthorized", { status: 401 }); + } + return next(); + }, +]); +``` + +Redirect responses from Solid Router work the same way: + +```ts +import { redirect } from "@solidjs/router"; +import { createMiddleware } from "@solidjs/start/middleware"; + +export default createMiddleware([ + (event, next) => { + if (new URL(event.req.url).pathname === "/login") { + return redirect("/auth/login", 301); + } + return next(); + }, +]); +``` + +## Middleware order + +Middleware uses an onion model. Before-`next()` logic runs in declaration order; after-`next()` logic runs in reverse order. + +The v1 object form with `onRequest` and `onBeforeResponse` remains available for migration but is deprecated. In `2.0.0-rc.1`, deprecated `onBeforeResponse` arrays run in their declared order. Remove any manual reversal added as a workaround for earlier prereleases. + +## Custom H3 handlers + +The experimental `decorateHandler` and `decorateMiddleware` exports from `@solidjs/start/server` provide Solid's request context to custom H3 code that runs outside the configured middleware chain. + +```ts +import { decorateHandler } from "@solidjs/start/server"; +import { defineHandler } from "nitro"; + +export default defineHandler( + decorateHandler(() => { + // getRequestEvent() is available here + return { ok: true }; + }) +); +``` diff --git a/src/routes/solid-start/v2/(1)advanced/(1)session.mdx b/src/routes/solid-start/v2/(1)advanced/(1)session.mdx new file mode 100644 index 000000000..a0ce18f57 --- /dev/null +++ b/src/routes/solid-start/v2/(1)advanced/(1)session.mdx @@ -0,0 +1,87 @@ +--- +title: Sessions +use_cases: >- + user sessions, authentication state, preferences storage, stateful + interactions, login persistence +tags: + - sessions + - cookies + - authentication + - state + - storage + - persistence +version: "2.0" +description: >- + Manage encrypted cookie sessions with the SolidStart HTTP helpers. +--- + +Sessions let the server associate state with multiple requests from the same browser. SolidStart exposes H3 v2's encrypted cookie-session helpers through `@solidjs/start/http`. + +Session helpers are server-only. Use them from server functions, API routes, middleware, or other server-only modules. + +## Create a session helper + +`useSession` reads the current session and returns methods for updating or clearing it. + +```ts title="src/lib/session.ts" +import { useSession } from "@solidjs/start/http"; + +type SessionData = { + userId?: string; + theme?: "light" | "dark"; +}; + +export function useAppSession() { + "use server"; + + return useSession({ + name: "app-session", + password: process.env.SESSION_SECRET as string, + cookie: { + httpOnly: true, + secure: process.env.NODE_ENV === "production", + sameSite: "lax", + }, + }); +} +``` + +Use a secret of at least 32 characters and store it in a private environment variable. Generate one with: + +```sh frame="none" +openssl rand -base64 32 +``` + +## Read session data + +```ts +export async function getCurrentUserId() { + "use server"; + const session = await useAppSession(); + return session.data.userId ?? null; +} +``` + +## Update session data + +```ts +export async function setTheme(theme: "light" | "dark") { + "use server"; + const session = await useAppSession(); + await session.update({ theme }); +} +``` + +## Clear a session + +```ts +export async function logout() { + "use server"; + const session = await useAppSession(); + await session.clear(); +} +``` + +In addition to `useSession`, `@solidjs/start/http` exports `getSession`, `updateSession`, `clearSession`, `sealSession`, and `unsealSession` for lower-level workflows. + +Cookie sessions should contain small, non-sensitive identifiers and preferences. For revocation, device management, or larger data, store the session record in a database and keep only its opaque ID in the cookie. diff --git a/src/routes/solid-start/v2/(1)advanced/(2)request-events.mdx b/src/routes/solid-start/v2/(1)advanced/(2)request-events.mdx new file mode 100644 index 000000000..39e9cc755 --- /dev/null +++ b/src/routes/solid-start/v2/(1)advanced/(2)request-events.mdx @@ -0,0 +1,56 @@ +--- +title: Request events +use_cases: >- + server context access, local data storage, request handling, server functions, + event access +tags: + - events + - server + - context + - locals + - requests + - functions +version: "2.0" +description: >- + Access request events, typed locals, and the native H3 v2 event in SolidStart. +--- + +Call [`getRequestEvent`](/reference/server-utilities/get-request-event) from `solid-js/web` to access the current request in server-rendering, API, middleware, query, and action code. + +```tsx +import { getRequestEvent } from "solid-js/web"; + +const event = getRequestEvent(); +const request = event?.request; +``` + +`getRequestEvent()` returns `undefined` outside a request context. + +## Locals + +`event.locals` is request-scoped storage shared by SolidStart middleware and server code. Add your fields to the global `App.RequestEventLocals` interface: + +```tsx title="src/env.d.ts" +declare namespace App { + interface RequestEventLocals { + user?: { id: string }; + requestId: string; + } +} +``` + +The `@solidjs/start/env` type entry provides the base namespace and should be included in `tsconfig.json`. + +```json title="tsconfig.json" +{ + "compilerOptions": { + "types": ["@solidjs/start/env"] + } +} +``` + +## Native event + +`event.nativeEvent` is the underlying H3 v2 event. It exposes Web standard request and response objects as `event.nativeEvent.req` and `event.nativeEvent.res`. + +Most application code does not need the native event. Prefer `event.request`, `event.response`, or a helper from `@solidjs/start/http`. The HTTP entrypoint is server-only, so import it only from server code or inside a function marked with `"use server"`. diff --git a/src/routes/solid-start/v2/(1)advanced/(3)return-responses.mdx b/src/routes/solid-start/v2/(1)advanced/(3)return-responses.mdx new file mode 100644 index 000000000..adaf4b94c --- /dev/null +++ b/src/routes/solid-start/v2/(1)advanced/(3)return-responses.mdx @@ -0,0 +1,62 @@ +--- +title: Returning responses +use_cases: >- + server function responses, error handling, response types, api responses, + typescript typing +tags: + - responses + - server + - functions + - typescript + - errors + - api +version: "2.0" +description: >- + Return typed Response objects from server functions. Handle redirects, + reloads, and JSON responses with proper TypeScript support. +--- + +In SolidStart, it is possible to return a Response object from a server function. +[`solid-router`](/solid-router) knows how to handle certain responses with its [`query`](/solid-router/reference/data-apis/query) and [`action`](/solid-router/reference/data-apis/action) APIs. +For TypeScript, when returning a response using `solid-router`'s `redirect`, `reload`, or `json` helpers, they will not impact the return value of the server function. + +While we suggest depending on the type of the function to handle errors differently, you can always return or throw a response. + +## Examples + +In the following example, the `hello` function will return a value of type `Promise<{ hello: string }>`: + +```tsx +import { json } from "@solidjs/router"; +import { GET } from "@solidjs/start"; + +const hello = GET(async (name: string) => { + "use server"; + return json( + { hello: new Promise((r) => setTimeout(() => r(name), 1000)) }, + { headers: { "cache-control": "max-age=60" } } + ); +}); +``` + +However, in this example, since `redirect` and `reload` return `never` as their type, `getUser` can only return a value of type `Promise`: + +```tsx { 4, 10, 14} +export async function getUser() { + "use server"; + + const session = await getSession(); + const userId = session.data.userId; + if (userId === undefined) return redirect("/login"); + + try { + const user: User = await db.user.findUnique({ where: { id: userId } }); + // throwing can be awkward. + if (!user) return redirect("/login"); + return user; + } catch { + // do stuff + throw redirect("/login"); + } +} +``` diff --git a/src/routes/solid-start/v2/(1)advanced/(5)auth.mdx b/src/routes/solid-start/v2/(1)advanced/(5)auth.mdx new file mode 100644 index 000000000..b711a3ced --- /dev/null +++ b/src/routes/solid-start/v2/(1)advanced/(5)auth.mdx @@ -0,0 +1,61 @@ +--- +title: Auth +use_cases: >- + user authentication, protected routes, authorization checks, secure data + access, login systems +tags: + - authentication + - authorization + - security + - protected + - login + - users +version: "2.0" +description: >- + Implement authentication and protected routes in SolidStart. Secure sensitive + resources and handle user authorization properly. +--- + +Server functions can be used to protect sensitive resources like user data. + +```tsx +"use server"; + +async function getPrivatePosts() { + const user = await getUser(); + if (!user) { + return null; // or throw an error + } + + return db.getPosts({ userId: user.id, private: true }); +} +``` + +The `getUser` function can be [implemented using sessions](/solid-start/v2/advanced/session). + +## Protected Routes + +Routes can be protected by checking the user or session object during data fetching. +This example uses [Solid Router](/solid-router). + +```tsx +const getPrivatePosts = query(async function () { + "use server"; + const user = await getUser(); + if (!user) { + throw redirect("/login"); + } + + return db.getPosts({ userId: user.id, private: true }); +}); + +export default function Page() { + const posts = createAsync(() => getPrivatePosts(), { deferStream: true }); +} +``` + +Once the user hits this route, the router will attempt to fetch `getPrivatePosts` data. +If the user is not signed in, `getPrivatePosts` will throw and the router will redirect to the login page. + +To prevent errors when opening the page directly, set `deferStream: true`. +This would ensure `getPrivatePosts` resolves before the page loads since server-side redirects cannot occur after streaming has started. diff --git a/src/routes/solid-start/v2/(1)advanced/(6)websocket.mdx b/src/routes/solid-start/v2/(1)advanced/(6)websocket.mdx new file mode 100644 index 000000000..bcfebcf15 --- /dev/null +++ b/src/routes/solid-start/v2/(1)advanced/(6)websocket.mdx @@ -0,0 +1,72 @@ +--- +title: WebSocket endpoint +use_cases: >- + real-time updates, chat applications, live notifications, multiplayer games, + collaborative editing, streaming data +tags: + - websocket + - real-time + - streaming + - server + - events +version: "2.0" +description: >- + Add a Nitro v3 WebSocket endpoint to a SolidStart application. +--- + +SolidStart v2 uses Nitro v3's cross-platform WebSocket support. Enable the feature in Nitro's Vite configuration and define the endpoint as a Nitro server route. + +## Enable WebSockets + +```tsx title="vite.config.ts" +import { nitro } from "nitro/vite"; +import { defineConfig } from "vite"; +import { solidStart } from "@solidjs/start/config"; + +export default defineConfig({ + plugins: [solidStart(), nitro()], + nitro: { + serverDir: "./server", + features: { + websocket: true, + }, + }, +}); +``` + +## Create an endpoint + +Files in `server/routes` use Nitro's file-based server routing. This example handles connections at `/ws`. + +```ts title="server/routes/ws.ts" +import { defineWebSocketHandler } from "nitro"; + +export default defineWebSocketHandler({ + open(peer) { + console.log("open", peer.id); + peer.send("Connected"); + }, + message(peer, message) { + console.log("message", peer.id, message.text()); + peer.send(message.text()); + }, + close(peer, details) { + console.log("close", peer.id, details.code, details.reason); + }, + error(peer, error) { + console.error("websocket error", peer.id, error); + }, +}); +``` + +Connect with the browser WebSocket API: + +```ts +const protocol = location.protocol === "https:" ? "wss:" : "ws:"; +const socket = new WebSocket(`${protocol}//${location.host}/ws`); + +socket.addEventListener("open", () => socket.send("Hello")); +socket.addEventListener("message", (event) => console.log(event.data)); +``` + +Nitro also supports upgrade hooks, peer context, topics, namespaces, and pub/sub. See the [Nitro WebSocket guide](https://nitro.build/docs/websocket). diff --git a/src/routes/solid-start/v2/(1)getting-started.mdx b/src/routes/solid-start/v2/(1)getting-started.mdx index a912b49a0..0e6a47238 100644 --- a/src/routes/solid-start/v2/(1)getting-started.mdx +++ b/src/routes/solid-start/v2/(1)getting-started.mdx @@ -16,7 +16,7 @@ description: >- --- The easiest way to start a new SolidStart project is with `create-solid`. -It can scaffold a new app from the SolidStart template or from one of the official examples. +SolidStart v2 requires Node.js 24 or newer. ## Create a project @@ -26,7 +26,7 @@ Create a new app with the Solid scaffolding tool: solid ``` -Follow the interactive prompts and choose the SolidStart template or an official example that matches your use case. +Follow the interactive prompts, choose **SolidStart**, and then choose **v2**. You can skip the version prompt with the `--solidstart --v2` flags. After the project is created, install dependencies: @@ -42,14 +42,15 @@ dev ## Configuration -Configuration lives in `vite.config.ts`, where the `solidStart()` plugin from `@solidjs/start/config` does the work. +Configuration lives in `vite.config.ts`. SolidStart configures the application and Nitro v3 supplies the server and deployment integration. ```tsx title="vite.config.ts" import { defineConfig } from "vite"; +import { nitro } from "nitro/vite"; import { solidStart } from "@solidjs/start/config"; export default defineConfig({ - plugins: [solidStart()], + plugins: [solidStart(), nitro()], }); ``` @@ -57,13 +58,16 @@ If your app already has middleware, `solidStart()` also accepts a `middleware` o ```tsx title="vite.config.ts" import { defineConfig } from "vite"; +import { nitro } from "nitro/vite"; import { solidStart } from "@solidjs/start/config"; export default defineConfig({ - plugins: [solidStart({ middleware: "./src/middleware/index.ts" })], + plugins: [solidStart({ middleware: "./src/middleware/index.ts" }), nitro()], }); ``` +Use the top-level `nitro` property for Nitro options such as deployment presets, prerendering, tasks, and WebSockets. + ## Start adding routes The filesystem router reads files from your routes directory and turns them into UI routes or API routes. diff --git a/src/routes/solid-start/v2/(2)guides/(0)security.mdx b/src/routes/solid-start/v2/(2)guides/(0)security.mdx new file mode 100644 index 000000000..88feed732 --- /dev/null +++ b/src/routes/solid-start/v2/(2)guides/(0)security.mdx @@ -0,0 +1,220 @@ +--- +title: Security +use_cases: >- + production apps, user input handling, authentication, public apis, preventing + attacks, secure deployments, compliance +tags: + - security + - xss + - csrf + - cors + - csp + - middleware + - protection +version: "2.0" +description: >- + Secure your SolidStart apps against XSS, CSRF attacks. Configure CSP headers, + CORS policies, and implement security best practices. +--- + +## XSS (Cross Site Scripting) + +Solid automatically escapes values passed to JSX expressions to reduce the risk of XSS attacks. +However, this protection does not apply when using [`innerHTML`](/reference/jsx-attributes/innerhtml). + +To protect your application from XSS attacks: + +- Set a [Content Security Policy (CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP). +- Validate and sanitize user inputs, especially form inputs on the server and client. +- Avoid using `innerHTML` when possible. + If necessary, make sure to sanitize user-supplied data with libraries such as [DOMPurify](https://github.com/cure53/DOMPurify). +- Sanitize attributes containing user-supplied data within `