diff --git a/.tests/test.vercel.ts b/.tests/test.vercel.ts index 74657b6..a97cbc9 100644 --- a/.tests/test.vercel.ts +++ b/.tests/test.vercel.ts @@ -18,7 +18,7 @@ test("dev", async ({ page, $ }) => { const port = await getPort(); const dev = $(`pnpm dev`, { env: { PORT: String(port) } }); - const url = await matchLine(dev.stdout, urlRegex.custom); + const url = await matchLine(dev.stdout, urlRegex.viteDev); await workflow({ page, url }); expect(withoutHmrPortError(dev.buffer.stderr)).toBe(""); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d4fb3e1..b4ce9a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -331,7 +331,7 @@ importers: version: 4.21.1 netlify-cli: specifier: ^17.38.0 - version: 17.38.0(@types/express@5.0.0)(@types/node@22.9.1) + version: 17.38.0(@types/express@5.0.0)(@types/node@22.9.1)(picomatch@4.0.2) postcss: specifier: ^8.4.49 version: 8.4.49 @@ -511,18 +511,9 @@ importers: vercel: dependencies: - '@react-router/express': - specifier: '*' - version: 7.1.1(express@4.21.1)(react-router@7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2) '@react-router/node': - specifier: '*' - version: 7.1.1(react-router@7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2) - '@vercel/node': - specifier: ^3.2.25 - version: 3.2.25 - express: - specifier: ^4.21.1 - version: 4.21.1 + specifier: ^7.1.5 + version: 7.1.5(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2) isbot: specifier: ^5.1.17 version: 5.1.17 @@ -533,18 +524,15 @@ importers: specifier: ^19.0.0 version: 19.0.0(react@19.0.0) react-router: - specifier: '*' - version: 7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: ^7.1.5 + version: 7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) devDependencies: '@react-router/dev': - specifier: '*' - version: 7.1.1(@react-router/serve@7.1.1(react-router@7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2))(@types/node@20.17.6)(babel-plugin-macros@3.1.0)(lightningcss@1.29.1)(react-router@7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.6)(lightningcss@1.29.1))(wrangler@3.88.0(@cloudflare/workers-types@4.20241112.0)) + specifier: ^7.1.5 + version: 7.1.5(@types/node@20.17.6)(babel-plugin-macros@3.1.0)(lightningcss@1.29.1)(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.6)(lightningcss@1.29.1))(wrangler@3.88.0(@cloudflare/workers-types@4.20241112.0)) '@tailwindcss/vite': specifier: ^4.0.0 version: 4.0.0(vite@5.4.11(@types/node@20.17.6)(lightningcss@1.29.1)) - '@types/express': - specifier: ^5.0.0 - version: 5.0.0 '@types/node': specifier: ^20 version: 20.17.6 @@ -554,9 +542,12 @@ importers: '@types/react-dom': specifier: ^19.0.1 version: 19.0.2(@types/react@19.0.1) - cross-env: - specifier: ^7.0.3 - version: 7.0.3 + '@vercel/node': + specifier: ^5.1.2 + version: 5.1.2(rollup@4.27.3) + '@vercel/react-router': + specifier: ^1.0.2 + version: 1.0.2(@react-router/dev@7.1.5(@types/node@20.17.6)(babel-plugin-macros@3.1.0)(lightningcss@1.29.1)(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.6)(lightningcss@1.29.1))(wrangler@3.88.0(@cloudflare/workers-types@4.20241112.0)))(@react-router/node@7.1.5(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2))(isbot@5.1.17)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) tailwindcss: specifier: ^4.0.0 version: 4.0.0 @@ -2039,6 +2030,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jest/types@27.5.1': resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -2072,6 +2067,11 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true + '@mapbox/node-pre-gyp@2.0.0': + resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} + engines: {node: '>=18'} + hasBin: true + '@mjackson/node-fetch-server@0.2.0': resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} @@ -2840,6 +2840,24 @@ packages: wrangler: optional: true + '@react-router/dev@7.1.5': + resolution: {integrity: sha512-3YQAbaKQm4mxcd0jmbItr2Ik0GshEMmPpRAld7XhIymB50MklWSsgd+IJWcqSv8RVlNs1ZMxRC0maS3Hv/V19g==} + engines: {node: '>=20.0.0'} + hasBin: true + peerDependencies: + '@react-router/serve': ^7.1.5 + react-router: ^7.1.5 + typescript: ^5.1.0 + vite: ^5.1.0 || ^6.0.0 + wrangler: ^3.28.2 + peerDependenciesMeta: + '@react-router/serve': + optional: true + typescript: + optional: true + wrangler: + optional: true + '@react-router/express@7.1.1': resolution: {integrity: sha512-oiL2ADor3byuh7piajLTPr6007GmVPZ1Gh4HiN0uuZlz3vQ1rd0xZMSD9LnSrXhsrKEbPFaeCk8E2O67ZoABsg==} engines: {node: '>=20.0.0'} @@ -2861,6 +2879,16 @@ packages: typescript: optional: true + '@react-router/node@7.1.5': + resolution: {integrity: sha512-Ga8xFHxO2yt5TpGwV5xYx4LC3eUDmhT6jYfTbMFb6F7hBA9sLdHxNfYZCe2WEfVZ4/BM7I8989Qzq6BWilV2LA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react-router: 7.1.5 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + '@react-router/serve@7.1.1': resolution: {integrity: sha512-rhV1yp72ZZQn4giQUzUiLVo/7/7dhxD98Z5pdDm6mKOTJPGoQ8TBPccQaKxzJIFNRHcn0sEdehfLOxl5ydnUKw==} engines: {node: '>=20.0.0'} @@ -2872,6 +2900,15 @@ packages: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-android-arm-eabi@4.27.3': resolution: {integrity: sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==} cpu: [arm] @@ -3215,19 +3252,33 @@ packages: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@vercel/build-utils@8.4.12': - resolution: {integrity: sha512-pIH0b965wJhd1otROVPndfZenPKFVoYSaRjtSKVOT/oNBT13ifq86UVjb5ZjoVfqUI2TtSTP+68kBqLPeoq30g==} + '@vercel/build-utils@9.2.1': + resolution: {integrity: sha512-dSem9aFudxQ723BeJ/tTCiOnWn4jH3UMYvnlGvb2ke/OBTqLcyCvqKyxnUNWsq++i0x/YewiI/HLnjAwyo2hnA==} '@vercel/error-utils@2.0.3': resolution: {integrity: sha512-CqC01WZxbLUxoiVdh9B/poPbNpY9U+tO1N9oWHwTl5YAZxcqXmmWJ8KNMFItJCUUWdY3J3xv8LvAuQv2KZ5YdQ==} + '@vercel/nft@0.27.10': + resolution: {integrity: sha512-zbaF9Wp/NsZtKLE4uVmL3FyfFwlpDyuymQM1kPbeT0mVOHKDQQNjnnfslB3REg3oZprmNFJuh3pkHBk2qAaizg==} + engines: {node: '>=16'} + hasBin: true + '@vercel/nft@0.27.3': resolution: {integrity: sha512-oySTdDSzUAFDXpsSLk9Q943o+/Yu/+TCFxnehpFQEf/3khi2stMpTHPVNwFdvZq/Z4Ky93lE+MGHpXCRpMkSCA==} engines: {node: '>=16'} hasBin: true - '@vercel/node@3.2.25': - resolution: {integrity: sha512-Htc7I/nHpxfMtmzoii8Fnm01iFiFeTW99OYw67S8UAJuY+Fc18RnZVPjtw1fTgf4EcRxsFGP6+nG1IkSqty6uA==} + '@vercel/node@5.1.2': + resolution: {integrity: sha512-zoIs8dpx5ScWSgkpxCX2umwt5rPfmqtvdARULXgtBKb8elh3oMKPtQGT9aui6M1d+fr/fewfdTrQJvrDrvdIrQ==} + + '@vercel/react-router@1.0.2': + resolution: {integrity: sha512-DydjsjWCYiFNR18/KzxiDM8uJzt6iJJ4nNpma49+fGN5wo09APm+866wHQ/xuvUPpT+/ET4UzIa9tPBupuWS7Q==} + peerDependencies: + '@react-router/dev': '7' + '@react-router/node': '7' + isbot: '5' + react: '>=18' + react-dom: '>=18' '@vercel/static-config@3.0.0': resolution: {integrity: sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==} @@ -3267,6 +3318,10 @@ packages: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + abbrev@3.0.0: + resolution: {integrity: sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==} + engines: {node: ^18.17.0 || >=20.5.0} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -3710,6 +3765,10 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + ci-info@4.1.0: resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} engines: {node: '>=8'} @@ -5952,6 +6011,10 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} + minizlib@3.0.1: + resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + engines: {node: '>= 18'} + mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} @@ -5964,6 +6027,11 @@ packages: engines: {node: '>=10'} hasBin: true + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + mlly@1.7.3: resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} @@ -6118,6 +6186,11 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + normalize-node-version@12.4.0: resolution: {integrity: sha512-0oLZN5xcyKVrSHMk8/9RuNblEe7HEsXAt5Te2xmMiZD9VX7bqWYe0HMyfqSYFD3xv0949lZuXaEwjTqle1uWWQ==} engines: {node: '>=14.18.0'} @@ -6422,9 +6495,6 @@ packages: path-to-regexp@0.1.10: resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} - path-to-regexp@6.2.1: - resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} - path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -6474,6 +6544,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -6798,6 +6872,16 @@ packages: react-dom: optional: true + react-router@7.1.5: + resolution: {integrity: sha512-8BUF+hZEU4/z/JD201yK6S+UYhsf58bzYIDq2NS1iGpwxSXDu7F+DeGSkIXMFBuHZB21FSiCzEcUb18cQNdRkA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -6961,6 +7045,10 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + rollup-plugin-inject@3.0.2: resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. @@ -7331,6 +7419,10 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + temp-dir@3.0.0: resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} engines: {node: '>=14.16'} @@ -7946,6 +8038,10 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -8018,7 +8114,7 @@ snapshots: '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@9.4.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -8188,7 +8284,7 @@ snapshots: '@babel/parser': 7.26.2 '@babel/template': 7.25.9 '@babel/types': 7.26.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@9.4.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -9000,6 +9096,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@jest/types@27.5.1': dependencies: '@types/istanbul-lib-coverage': 2.0.6 @@ -9047,6 +9147,19 @@ snapshots: - encoding - supports-color + '@mapbox/node-pre-gyp@2.0.0': + dependencies: + consola: 3.2.3 + detect-libc: 2.0.3 + https-proxy-agent: 7.0.5 + node-fetch: 2.6.9 + nopt: 8.1.0 + semver: 7.6.3 + tar: 7.4.3 + transitivePeerDependencies: + - encoding + - supports-color + '@mjackson/node-fetch-server@0.2.0': {} '@mjackson/node-fetch-server@0.3.0': {} @@ -9069,7 +9182,7 @@ snapshots: yaml: 2.6.1 yargs: 17.7.2 - '@netlify/build@29.56.1(@opentelemetry/api@1.8.0)(@types/node@22.9.1)': + '@netlify/build@29.56.1(@opentelemetry/api@1.8.0)(@types/node@22.9.1)(picomatch@4.0.2)': dependencies: '@bugsnag/js': 7.25.0 '@netlify/blobs': 7.4.0 @@ -9089,7 +9202,7 @@ snapshots: chalk: 5.3.0 clean-stack: 4.2.0 execa: 6.1.0 - fdir: 6.4.2 + fdir: 6.4.2(picomatch@4.0.2) figures: 5.0.0 filter-obj: 5.1.0 got: 12.6.1 @@ -10051,6 +10164,55 @@ snapshots: - supports-color - terser + '@react-router/dev@7.1.5(@types/node@20.17.6)(babel-plugin-macros@3.1.0)(lightningcss@1.29.1)(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.6)(lightningcss@1.29.1))(wrangler@3.88.0(@cloudflare/workers-types@4.20241112.0))': + dependencies: + '@babel/core': 7.26.0 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + '@npmcli/package-json': 4.0.1 + '@react-router/node': 7.1.5(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2) + arg: 5.0.2 + babel-dead-code-elimination: 1.0.6 + chokidar: 4.0.1 + dedent: 1.5.3(babel-plugin-macros@3.1.0) + es-module-lexer: 1.5.4 + exit-hook: 2.2.1 + fs-extra: 10.1.0 + gunzip-maybe: 1.4.2 + jsesc: 3.0.2 + lodash: 4.17.21 + pathe: 1.1.2 + picocolors: 1.1.1 + picomatch: 2.3.1 + prettier: 2.8.8 + react-refresh: 0.14.2 + react-router: 7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + semver: 7.6.3 + set-cookie-parser: 2.7.1 + valibot: 0.41.0(typescript@5.7.2) + vite: 5.4.11(@types/node@20.17.6)(lightningcss@1.29.1) + vite-node: 3.0.0-beta.2(@types/node@20.17.6)(lightningcss@1.29.1) + optionalDependencies: + typescript: 5.7.2 + wrangler: 3.88.0(@cloudflare/workers-types@4.20241112.0) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - bluebird + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + '@react-router/express@7.1.1(express@4.21.1)(react-router@7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2)': dependencies: '@react-router/node': 7.1.1(react-router@7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2) @@ -10069,6 +10231,16 @@ snapshots: optionalDependencies: typescript: 5.7.2 + '@react-router/node@7.1.5(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2)': + dependencies: + '@mjackson/node-fetch-server': 0.2.0 + react-router: 7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + source-map-support: 0.5.21 + stream-slice: 0.1.2 + undici: 6.21.0 + optionalDependencies: + typescript: 5.7.2 + '@react-router/serve@7.1.1(react-router@7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2)': dependencies: '@react-router/express': 7.1.1(express@4.21.1)(react-router@7.1.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2) @@ -10088,6 +10260,14 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 + '@rollup/pluginutils@5.1.4(rollup@4.27.3)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.27.3 + '@rollup/rollup-android-arm-eabi@4.27.3': optional: true @@ -10385,7 +10565,7 @@ snapshots: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 @@ -10400,10 +10580,29 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@vercel/build-utils@8.4.12': {} + '@vercel/build-utils@9.2.1': {} '@vercel/error-utils@2.0.3': {} + '@vercel/nft@0.27.10(rollup@4.27.3)': + dependencies: + '@mapbox/node-pre-gyp': 2.0.0 + '@rollup/pluginutils': 5.1.4(rollup@4.27.3) + acorn: 8.14.0 + acorn-import-attributes: 1.9.5(acorn@8.14.0) + async-sema: 3.1.1 + bindings: 1.5.0 + estree-walker: 2.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + node-gyp-build: 4.8.4 + picomatch: 4.0.2 + resolve-from: 5.0.0 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + '@vercel/nft@0.27.3(supports-color@9.4.0)': dependencies: '@mapbox/node-pre-gyp': 1.0.11(supports-color@9.4.0) @@ -10422,15 +10621,15 @@ snapshots: - encoding - supports-color - '@vercel/node@3.2.25': + '@vercel/node@5.1.2(rollup@4.27.3)': dependencies: '@edge-runtime/node-utils': 2.3.0 '@edge-runtime/primitives': 4.1.0 '@edge-runtime/vm': 3.2.0 '@types/node': 16.18.11 - '@vercel/build-utils': 8.4.12 + '@vercel/build-utils': 9.2.1 '@vercel/error-utils': 2.0.3 - '@vercel/nft': 0.27.3(supports-color@9.4.0) + '@vercel/nft': 0.27.10(rollup@4.27.3) '@vercel/static-config': 3.0.0 async-listen: 3.0.0 cjs-module-lexer: 1.2.3 @@ -10439,7 +10638,6 @@ snapshots: esbuild: 0.14.47 etag: 1.8.1 node-fetch: 2.6.9 - path-to-regexp: 6.2.1 ts-morph: 12.0.0 ts-node: 10.9.1(@types/node@16.18.11)(typescript@4.9.5) typescript: 4.9.5 @@ -10448,8 +10646,19 @@ snapshots: - '@swc/core' - '@swc/wasm' - encoding + - rollup - supports-color + '@vercel/react-router@1.0.2(@react-router/dev@7.1.5(@types/node@20.17.6)(babel-plugin-macros@3.1.0)(lightningcss@1.29.1)(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.6)(lightningcss@1.29.1))(wrangler@3.88.0(@cloudflare/workers-types@4.20241112.0)))(@react-router/node@7.1.5(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2))(isbot@5.1.17)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@react-router/dev': 7.1.5(@types/node@20.17.6)(babel-plugin-macros@3.1.0)(lightningcss@1.29.1)(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.6)(lightningcss@1.29.1))(wrangler@3.88.0(@cloudflare/workers-types@4.20241112.0)) + '@react-router/node': 7.1.5(react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.7.2) + '@vercel/static-config': 3.0.0 + isbot: 5.1.17 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + ts-morph: 12.0.0 + '@vercel/static-config@3.0.0': dependencies: ajv: 8.6.3 @@ -10513,6 +10722,8 @@ snapshots: abbrev@2.0.0: {} + abbrev@3.0.0: {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -10536,13 +10747,13 @@ snapshots: agent-base@6.0.2(supports-color@9.4.0): dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) transitivePeerDependencies: - supports-color agent-base@7.1.1: dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -10946,7 +11157,7 @@ snapshots: capnp-ts@0.7.0: dependencies: - debug: 4.4.0 + debug: 4.4.0(supports-color@9.4.0) tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -10988,6 +11199,8 @@ snapshots: chownr@2.0.0: {} + chownr@3.0.0: {} + ci-info@4.1.0: {} citty@0.1.6: @@ -11368,15 +11581,15 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.7(supports-color@9.4.0): + debug@4.3.7: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 9.4.0 - debug@4.4.0: + debug@4.4.0(supports-color@9.4.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 9.4.0 decache@4.6.2: dependencies: @@ -11683,7 +11896,7 @@ snapshots: esbuild-register@3.6.0(esbuild@0.19.12): dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7 esbuild: 0.19.12 transitivePeerDependencies: - supports-color @@ -12086,7 +12299,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -12167,7 +12380,9 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.4.2: {} + fdir@6.4.2(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 fecha@4.2.3: {} @@ -12276,7 +12491,7 @@ snapshots: follow-redirects@1.15.9(debug@4.3.7): optionalDependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7 foreground-child@3.3.0: dependencies: @@ -12633,14 +12848,14 @@ snapshots: https-proxy-agent@5.0.1(supports-color@9.4.0): dependencies: agent-base: 6.0.2(supports-color@9.4.0) - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -13284,6 +13499,11 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 + minizlib@3.0.1: + dependencies: + minipass: 7.1.2 + rimraf: 5.0.10 + mkdirp-classic@0.5.3: {} mkdirp@0.5.6: @@ -13292,6 +13512,8 @@ snapshots: mkdirp@1.0.4: {} + mkdirp@3.0.1: {} + mlly@1.7.3: dependencies: acorn: 8.14.0 @@ -13364,12 +13586,12 @@ snapshots: nested-error-stacks@2.1.1: {} - netlify-cli@17.38.0(@types/express@5.0.0)(@types/node@22.9.1): + netlify-cli@17.38.0(@types/express@5.0.0)(@types/node@22.9.1)(picomatch@4.0.2): dependencies: '@bugsnag/js': 7.25.0 '@fastify/static': 7.0.4 '@netlify/blobs': 8.1.0 - '@netlify/build': 29.56.1(@opentelemetry/api@1.8.0)(@types/node@22.9.1) + '@netlify/build': 29.56.1(@opentelemetry/api@1.8.0)(@types/node@22.9.1)(picomatch@4.0.2) '@netlify/build-info': 7.15.2 '@netlify/config': 20.19.1 '@netlify/edge-bundler': 12.2.3(supports-color@9.4.0) @@ -13396,7 +13618,7 @@ snapshots: content-type: 1.0.5 cookie: 0.7.2 cron-parser: 4.9.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7 decache: 4.6.2 dot-prop: 9.0.0 dotenv: 16.4.5 @@ -13583,6 +13805,10 @@ snapshots: dependencies: abbrev: 2.0.0 + nopt@8.1.0: + dependencies: + abbrev: 3.0.0 + normalize-node-version@12.4.0: dependencies: all-node-versions: 11.3.0 @@ -13872,8 +14098,6 @@ snapshots: path-to-regexp@0.1.10: {} - path-to-regexp@6.2.1: {} - path-to-regexp@6.3.0: {} path-type@4.0.0: {} @@ -13914,6 +14138,8 @@ snapshots: picomatch@2.3.1: {} + picomatch@4.0.2: {} + pify@2.3.0: {} pino-abstract-transport@2.0.0: @@ -14272,6 +14498,16 @@ snapshots: optionalDependencies: react-dom: 19.0.0(react@19.0.0) + react-router@7.1.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + '@types/cookie': 0.6.0 + cookie: 1.0.1 + react: 19.0.0 + set-cookie-parser: 2.7.1 + turbo-stream: 2.4.0 + optionalDependencies: + react-dom: 19.0.0(react@19.0.0) + react-style-singleton@2.2.3(@types/react@19.0.1)(react@19.0.0): dependencies: get-nonce: 1.0.1 @@ -14432,6 +14668,10 @@ snapshots: dependencies: glob: 7.2.3 + rimraf@5.0.10: + dependencies: + glob: 10.4.5 + rollup-plugin-inject@3.0.2: dependencies: estree-walker: 0.6.1 @@ -14803,7 +15043,7 @@ snapshots: tabtab@3.0.2: dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) es6-promisify: 6.1.1 inquirer: 6.5.2 minimist: 1.2.8 @@ -14881,6 +15121,15 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.1 + mkdirp: 3.0.1 + yallist: 5.0.0 + temp-dir@3.0.0: {} tempy@3.1.0: @@ -15245,7 +15494,7 @@ snapshots: vite-node@3.0.0-beta.2(@types/node@20.17.6)(lightningcss@1.29.1): dependencies: cac: 6.7.14 - debug: 4.4.0 + debug: 4.4.0(supports-color@9.4.0) es-module-lexer: 1.5.4 pathe: 1.1.2 vite: 5.4.11(@types/node@20.17.6)(lightningcss@1.29.1) @@ -15263,7 +15512,7 @@ snapshots: vite-node@3.0.0-beta.2(@types/node@22.9.1)(lightningcss@1.29.1): dependencies: cac: 6.7.14 - debug: 4.4.0 + debug: 4.4.0(supports-color@9.4.0) es-module-lexer: 1.5.4 pathe: 1.1.2 vite: 5.4.11(@types/node@22.9.1)(lightningcss@1.29.1) @@ -15280,7 +15529,7 @@ snapshots: vite-tsconfig-paths@5.1.4(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.6)(lightningcss@1.29.1)): dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.1.4(typescript@5.7.2) optionalDependencies: @@ -15291,7 +15540,7 @@ snapshots: vite-tsconfig-paths@5.1.4(typescript@5.7.2)(vite@5.4.11(@types/node@22.9.1)(lightningcss@1.29.1)): dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.1.4(typescript@5.7.2) optionalDependencies: @@ -15302,7 +15551,7 @@ snapshots: vite-tsconfig-paths@5.1.4(typescript@5.7.2)(vite@6.0.11(@types/node@20.17.6)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.2)(yaml@2.6.1)): dependencies: - debug: 4.3.7(supports-color@9.4.0) + debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.1.4(typescript@5.7.2) optionalDependencies: @@ -15348,7 +15597,7 @@ snapshots: dependencies: chalk: 4.1.2 commander: 9.5.0 - debug: 4.3.7(supports-color@9.4.0) + debug: 4.4.0(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -15506,6 +15755,8 @@ snapshots: yallist@4.0.0: {} + yallist@5.0.0: {} + yaml@1.10.2: {} yaml@2.6.1: {} diff --git a/vercel/app/routes/home.tsx b/vercel/app/routes/home.tsx index 9ba2236..173fd2a 100644 --- a/vercel/app/routes/home.tsx +++ b/vercel/app/routes/home.tsx @@ -9,7 +9,7 @@ export function meta({}: Route.MetaArgs) { } export function loader({ context }: Route.LoaderArgs) { - return { message: context.VALUE_FROM_VERCEL }; + return { message: "Hello from Vercel" }; } export default function Home({ loaderData }: Route.ComponentProps) { diff --git a/vercel/dev-server.js b/vercel/dev-server.js deleted file mode 100644 index 7ec8176..0000000 --- a/vercel/dev-server.js +++ /dev/null @@ -1,29 +0,0 @@ -import express from "express"; - -const PORT = Number.parseInt(process.env.PORT || "3000"); - -const app = express(); -app.disable("x-powered-by"); - -console.log("Starting development server"); -const viteDevServer = await import("vite").then((vite) => - vite.createServer({ - server: { middlewareMode: true }, - }) -); -app.use(viteDevServer.middlewares); -app.use(async (req, res, next) => { - try { - const source = await viteDevServer.ssrLoadModule("./server/app.ts"); - return await source.default(req, res, next); - } catch (error) { - if (typeof error === "object" && error instanceof Error) { - viteDevServer.ssrFixStacktrace(error); - } - next(error); - } -}); - -app.listen(PORT, () => { - console.log(`Server is running on http://localhost:${PORT}`); -}); diff --git a/vercel/package.json b/vercel/package.json index ae1473c..6dc02d8 100644 --- a/vercel/package.json +++ b/vercel/package.json @@ -2,28 +2,26 @@ "private": true, "type": "module", "scripts": { - "build": "react-router build && node vercel/prepare.js", - "dev": "cross-env NODE_ENV=development node ./dev-server.js", + "build": "react-router build", + "dev": "react-router dev", + "start": "react-router-serve ./build/server/index.js", "typecheck": "react-router typegen && tsc" }, "dependencies": { - "@react-router/express": "*", - "@react-router/node": "*", - "@vercel/node": "^3.2.25", - "express": "^4.21.1", + "@react-router/node": "^7.1.5", "isbot": "^5.1.17", "react": "^19.0.0", "react-dom": "^19.0.0", - "react-router": "*" + "react-router": "^7.1.5" }, "devDependencies": { - "@react-router/dev": "*", + "@react-router/dev": "^7.1.5", "@tailwindcss/vite": "^4.0.0", - "@types/express": "^5.0.0", "@types/node": "^20", "@types/react": "^19.0.1", "@types/react-dom": "^19.0.1", - "cross-env": "^7.0.3", + "@vercel/node": "^5.1.2", + "@vercel/react-router": "^1.0.2", "tailwindcss": "^4.0.0", "typescript": "^5.7.2", "vite": "^5.4.11", diff --git a/vercel/react-router.config.ts b/vercel/react-router.config.ts index 6ff16f9..cab2d32 100644 --- a/vercel/react-router.config.ts +++ b/vercel/react-router.config.ts @@ -1,7 +1,9 @@ import type { Config } from "@react-router/dev/config"; +import { vercelPreset } from "@vercel/react-router/vite"; export default { // Config options... // Server-side render by default, to enable SPA mode set this to `false` ssr: true, + presets: [vercelPreset()], } satisfies Config; diff --git a/vercel/server/app.ts b/vercel/server/app.ts deleted file mode 100644 index dfadc4f..0000000 --- a/vercel/server/app.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { createRequestHandler } from "@react-router/express"; -import express from "express"; -import "react-router"; - -declare module "react-router" { - export interface AppLoadContext { - VALUE_FROM_VERCEL: string; - } -} - -const app = express(); - -app.use( - createRequestHandler({ - // @ts-expect-error - virtual module provided by React Router at build time - build: () => import("virtual:react-router/server-build"), - getLoadContext() { - return { - VALUE_FROM_VERCEL: "Hello from Vercel", - }; - }, - }) -); - -export default app; diff --git a/vercel/vercel/output/config.json b/vercel/vercel/output/config.json deleted file mode 100644 index bb153ff..0000000 --- a/vercel/vercel/output/config.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": 3, - "routes": [ - { - "src": "/favicon.ico", - "dest": "/favicon.ico" - }, - { - "src": "/assets/(.*)", - "dest": "/assets/$1", - "headers": { - "Cache-Control": "public, max-age=31536000, immutable" - } - }, - { - "src": "/(.*)", - "dest": "/" - } - ] -} diff --git a/vercel/vercel/output/functions/index.func/.vc-config.json b/vercel/vercel/output/functions/index.func/.vc-config.json deleted file mode 100644 index 033eb40..0000000 --- a/vercel/vercel/output/functions/index.func/.vc-config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "runtime": "nodejs20.x", - "handler": "index.js", - "launcherType": "Nodejs", - "shouldAddHelpers": true -} diff --git a/vercel/vercel/output/functions/index.func/package.json b/vercel/vercel/output/functions/index.func/package.json deleted file mode 100644 index 3dbc1ca..0000000 --- a/vercel/vercel/output/functions/index.func/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/vercel/vercel/prepare.js b/vercel/vercel/prepare.js deleted file mode 100644 index 1feee5b..0000000 --- a/vercel/vercel/prepare.js +++ /dev/null @@ -1,10 +0,0 @@ -import * as fsp from "node:fs/promises"; - -await fsp.rm(".vercel", { recursive: true }).catch(() => {}); -await fsp.mkdir(".vercel/output/static", { recursive: true }); - -await fsp.cp("vercel/output/", ".vercel/output", { recursive: true }); -await fsp.cp("build/client/", ".vercel/output/static", { recursive: true }); -await fsp.cp("build/server/", ".vercel/output/functions/index.func", { - recursive: true, -}); diff --git a/vercel/vite.config.ts b/vercel/vite.config.ts index 4c52d20..687cd9e 100644 --- a/vercel/vite.config.ts +++ b/vercel/vite.config.ts @@ -3,14 +3,7 @@ import tailwindcss from "@tailwindcss/vite"; import { defineConfig } from "vite"; import tsconfigPaths from "vite-tsconfig-paths"; -export default defineConfig(({ isSsrBuild, command }) => ({ - build: { - rollupOptions: isSsrBuild - ? { - input: "./server/app.ts", - } - : undefined, - }, +export default defineConfig(({ command }) => ({ ssr: { noExternal: command === "build" ? true : undefined, },