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/(4)serialization.mdx b/src/routes/solid-start/v2/(1)advanced/(4)serialization.mdx index 1bca99001..07d59a1df 100644 --- a/src/routes/solid-start/v2/(1)advanced/(4)serialization.mdx +++ b/src/routes/solid-start/v2/(1)advanced/(4)serialization.mdx @@ -1,7 +1,8 @@ --- title: Serialization use_cases: >- - server function payloads, data transfer, csp, security, performance + server function payloads, data transfer, custom types, seroval plugins, csp, + security, performance tags: - serialization - server-functions @@ -40,6 +41,57 @@ export default defineConfig({ If your app enforces a Content Security Policy, keep `json`. +## Custom types + +Use a custom Seroval plugin when a server function needs to accept or return a value that Seroval does not support, such as a database identifier, decimal type, or another custom class. + +Set `serialization.plugins` to a module whose default export is an array of plugins: + +```tsx title="vite.config.ts" +import { defineConfig } from "vite"; +import { solidStart } from "@solidjs/start/config"; + +export default defineConfig({ + plugins: [ + solidStart({ + serialization: { + plugins: "src/seroval-plugins.ts", + }, + }), + ], +}); +``` + +Create plugins with the API exported by `@solidjs/start/serialization`. The entrypoint exports `createPlugin`, `OpaqueReference`, and the related plugin types. Importing from it keeps the plugin on the same Seroval version that SolidStart uses. + +```ts title="src/seroval-plugins.ts" +import { createPlugin } from "@solidjs/start/serialization"; +import { Money } from "./lib/money"; + +const moneyPlugin = createPlugin({ + tag: "app/Money", + test: (value) => value instanceof Money, + parse: { + sync: (value, ctx) => ({ cents: ctx.parse(value.cents) }), + async: async (value, ctx) => ({ + cents: await ctx.parse(value.cents), + }), + stream: (value, ctx) => ({ cents: ctx.parse(value.cents) }), + }, + serialize: (node, ctx) => + `new globalThis.Money(${ctx.serialize(node.cents)})`, + deserialize: (node, ctx) => new Money(ctx.deserialize(node.cents) as number), +}); + +export default [moneyPlugin]; +``` + +SolidStart bundles the plugin module into both the client and server builds, so it must not import server-only code. Built-in SolidStart plugins run before custom plugins. + +Custom plugins apply to server function and action payloads. They do not affect the hydration payload produced by `solid-js/web`. + +With the default `json` mode, `deserialize` rebuilds the value. If you use `js` mode, the code returned by `serialize` can only refer to globals available in the client. In the example above, `Money` must be assigned to `globalThis.Money` before deserialization. + ## Server function payloads SolidStart applies extra handling for certain payload types so file uploads and binary data can flow without being serialized by Seroval. This applies to both server function arguments and return values. SolidStart bypasses Seroval for: 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..14ca5604d 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 @@ -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,26 @@ 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. + +## Development toolbar + +During development, SolidStart adds a toolbar for inspecting application errors and server function calls. The toolbar is not included in production builds. + +To hide it during development, set `devOverlay` to `false`: + +```tsx title="vite.config.ts" +solidStart({ devOverlay: false }); +``` + ## 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 `