From 9a7867a77033aeafcdab65a6b321487b680ad95f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 14:59:22 +0000 Subject: [PATCH 1/4] fix(deps): update dependency express to v5 --- packages/cloudinary/package.json | 2 +- packages/core/package.json | 4 +- pnpm-lock.yaml | 192 +++++++++++++++++++++++++++++-- 3 files changed, 187 insertions(+), 11 deletions(-) diff --git a/packages/cloudinary/package.json b/packages/cloudinary/package.json index 58f5d097ecb..d9cfab7bd9e 100644 --- a/packages/cloudinary/package.json +++ b/packages/cloudinary/package.json @@ -28,7 +28,7 @@ }, "devDependencies": { "@keystone-6/core": "^6.1.0", - "@types/express": "^4.17.14", + "@types/express": "^5.0.0", "@types/react": "^19.0.0", "graphql": "^16.8.1", "graphql-upload": "^15.0.2" diff --git a/packages/core/package.json b/packages/core/package.json index 44166a8402b..7dd3661790e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -267,7 +267,7 @@ "decimal.js": "^10.4.1", "dumb-passwords": "^0.2.1", "esbuild": "^0.25.0", - "express": "^4.19.2", + "express": "^5.0.0", "fast-deep-equal": "^3.1.3", "fs-extra": "^11.0.0", "graphql": "^16.8.1", @@ -291,7 +291,7 @@ "@types/body-parser": "^1.19.2", "@types/bytes": "^3.1.1", "@types/cors": "^2.8.13", - "@types/express": "^4.17.14", + "@types/express": "^5.0.0", "@types/fs-extra": "^11.0.0", "@types/pluralize": "^0.0.33", "@types/prompts": "^2.0.14", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ecb9314295..fbe7c23e1d2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1788,8 +1788,8 @@ importers: specifier: ^6.1.0 version: link:../core '@types/express': - specifier: ^4.17.14 - version: 4.17.21 + specifier: ^5.0.0 + version: 5.0.1 '@types/react': specifier: ^19.0.0 version: 19.0.12 @@ -1798,7 +1798,7 @@ importers: version: 16.10.0 graphql-upload: specifier: ^15.0.2 - version: 15.0.2(@types/express@4.17.21)(graphql@16.10.0) + version: 15.0.2(@types/express@5.0.1)(graphql@16.10.0) packages/core: dependencies: @@ -1905,8 +1905,8 @@ importers: specifier: ^0.25.0 version: 0.25.1 express: - specifier: ^4.19.2 - version: 4.21.2 + specifier: ^5.0.0 + version: 5.1.0 fast-deep-equal: specifier: ^3.1.3 version: 3.1.3 @@ -1918,7 +1918,7 @@ importers: version: 16.10.0 graphql-upload: specifier: ^15.0.2 - version: 15.0.2(@types/express@4.17.21)(graphql@16.10.0) + version: 15.0.2(@types/express@5.0.1)(graphql@16.10.0) image-size: specifier: ^2.0.0 version: 2.0.2 @@ -1972,8 +1972,8 @@ importers: specifier: ^2.8.13 version: 2.8.17 '@types/express': - specifier: ^4.17.14 - version: 4.17.21 + specifier: ^5.0.0 + version: 5.0.1 '@types/fs-extra': specifier: ^11.0.0 version: 11.0.4 @@ -6114,9 +6114,15 @@ packages: '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/express@5.0.1': + resolution: {integrity: sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==} + '@types/extract-files@13.0.1': resolution: {integrity: sha512-/fRbzc2lAd7jDJSSnxWiUyXWjdUZZ4HbISLJzVgt1AvrdOa7U49YRPcvuCUywkmURZ7uwJOheDjx19itbQ5KvA==} @@ -6546,6 +6552,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} @@ -7248,6 +7258,10 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -7918,6 +7932,10 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + exsolve@1.0.4: resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} @@ -8046,6 +8064,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + find-pkg-json-field-up@1.0.1: resolution: {integrity: sha512-Wh073ogc5cXp3rbU9/qxPpu1s5+yDoCGaJ7nISoHvomQUtrSxulaJdd5klyiVBCBISOMDzJnRKJpTWmyNmSqqg==} @@ -8130,6 +8152,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + fs-capacitor@6.2.0: resolution: {integrity: sha512-nKcE1UduoSKX27NSZlg879LdQc94OtbOsEmKMN2MBNudXREvijRKx2GEBsTMTfws+BrbkJoEuynbGSVRSpauvw==} engines: {node: '>=10'} @@ -8857,6 +8883,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -9588,6 +9617,10 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -9993,6 +10026,10 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neotraverse@0.6.18: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} @@ -10418,6 +10455,10 @@ packages: path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -11109,6 +11150,10 @@ packages: rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + rss@1.2.2: resolution: {integrity: sha512-xUhRTgslHeCBeHAqaWSbOYTydN2f0tAzNXvzh3stjz7QDhQMzdgHf3pfgNIngeytQflrFPfy6axHilTETr6gDg==} @@ -11206,6 +11251,10 @@ packages: resolution: {integrity: sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==} engines: {node: '>= 0.8.0'} + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} @@ -11213,6 +11262,10 @@ packages: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + server-destroy@1.0.1: resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==} @@ -17879,6 +17932,13 @@ snapshots: '@types/range-parser': 1.2.7 '@types/send': 0.17.4 + '@types/express-serve-static-core@5.0.6': + dependencies: + '@types/node': 22.13.11 + '@types/qs': 6.9.18 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.5 @@ -17886,6 +17946,12 @@ snapshots: '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 + '@types/express@5.0.1': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 5.0.6 + '@types/serve-static': 1.15.7 + '@types/extract-files@13.0.1': {} '@types/facepaint@1.2.5': {} @@ -18446,6 +18512,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + acorn-globals@7.0.1: dependencies: acorn: 8.14.1 @@ -19327,6 +19398,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + content-type@1.0.5: {} convert-source-map@1.9.0: {} @@ -20100,6 +20175,38 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.1 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + exsolve@1.0.4: {} extend-shallow@2.0.1: @@ -20255,6 +20362,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.0: + dependencies: + debug: 4.4.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + find-pkg-json-field-up@1.0.1: dependencies: '@babel/core': 7.26.10 @@ -20346,6 +20464,8 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + fs-capacitor@6.2.0: {} fs-constants@1.0.0: {} @@ -20617,6 +20737,19 @@ snapshots: optionalDependencies: '@types/express': 4.17.21 + graphql-upload@15.0.2(@types/express@5.0.1)(graphql@16.10.0): + dependencies: + '@types/busboy': 1.5.4 + '@types/node': 22.13.11 + '@types/object-path': 0.11.4 + busboy: 1.6.0 + fs-capacitor: 6.2.0 + graphql: 16.10.0 + http-errors: 2.0.0 + object-path: 0.11.8 + optionalDependencies: + '@types/express': 5.0.1 + graphql-ws@5.16.2(graphql@16.10.0): dependencies: graphql: 16.10.0 @@ -21158,6 +21291,8 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.6 @@ -22309,6 +22444,8 @@ snapshots: merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -22990,6 +23127,8 @@ snapshots: negotiator@0.6.4: {} + negotiator@1.0.0: {} + neotraverse@0.6.18: {} netmask@2.0.2: {} @@ -23450,6 +23589,8 @@ snapshots: path-to-regexp@0.1.12: {} + path-to-regexp@8.2.0: {} + path-type@4.0.0: {} path-type@6.0.0: {} @@ -24238,6 +24379,16 @@ snapshots: rope-sequence@1.3.4: {} + router@2.2.0: + dependencies: + debug: 4.4.0 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + transitivePeerDependencies: + - supports-color + rss@1.2.2: dependencies: mime-types: 2.1.13 @@ -24370,6 +24521,22 @@ snapshots: transitivePeerDependencies: - supports-color + send@1.2.0: + dependencies: + debug: 4.4.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + sentence-case@3.0.4: dependencies: no-case: 3.0.4 @@ -24385,6 +24552,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + server-destroy@1.0.1: {} server-only@0.0.1: {} From b2d67c575bddacf0290b9450346320679ef58f77 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 15 Jul 2025 13:54:13 +1000 Subject: [PATCH 2/4] upgrade to express5 --- examples/assets-local/package.json | 4 +- examples/custom-session-passport/package.json | 4 +- examples/extend-express-app/package.json | 4 +- packages/core/package.json | 3 +- packages/core/src/lib/createExpressServer.ts | 12 +- pnpm-lock.yaml | 160 ++++++++++-------- tests/admin-ui-tests/package.json | 14 +- tests/api-tests/package.json | 20 +-- tests/cli-tests/package.json | 8 +- 9 files changed, 123 insertions(+), 106 deletions(-) diff --git a/examples/assets-local/package.json b/examples/assets-local/package.json index 7c9c8cbb269..68d04317133 100644 --- a/examples/assets-local/package.json +++ b/examples/assets-local/package.json @@ -12,12 +12,12 @@ "dependencies": { "@keystone-6/core": "^6.5.1", "@prisma/client": "6.5.0", - "@types/express": "^4.17.14", "bytes": "^3.1.1", - "express": "^4.19.2" + "express": "^5.0.0" }, "devDependencies": { "@types/bytes": "^3.1.1", + "@types/express": "^5.0.0", "prisma": "6.5.0", "typescript": "^5.5.0" } diff --git a/examples/custom-session-passport/package.json b/examples/custom-session-passport/package.json index 64e4f272fca..92567da7de1 100644 --- a/examples/custom-session-passport/package.json +++ b/examples/custom-session-passport/package.json @@ -13,12 +13,12 @@ "@keystone-6/core": "^6.5.1", "@prisma/client": "6.5.0", "dotenv": "^16.0.0", - "express": "^4.19.2", + "express": "^5.0.0", "passport": "^0.7.0", "passport-github2": "^0.1.12" }, "devDependencies": { - "@types/express": "^4.17.14", + "@types/express": "^5.0.0", "@types/passport": "^1.0.16", "@types/passport-github2": "^1.2.9", "@types/passport-oauth2": "^1.4.16", diff --git a/examples/extend-express-app/package.json b/examples/extend-express-app/package.json index d3f2d7a7990..f817ef67118 100644 --- a/examples/extend-express-app/package.json +++ b/examples/extend-express-app/package.json @@ -12,10 +12,10 @@ "dependencies": { "@keystone-6/core": "^6.5.1", "@prisma/client": "6.5.0", - "@types/express": "^4.17.14", - "express": "^4.19.2" + "express": "^5.0.0" }, "devDependencies": { + "@types/express": "^5.0.0", "prisma": "6.5.0", "tsx": "^4.0.0", "typescript": "^5.5.0" diff --git a/packages/core/package.json b/packages/core/package.json index 7dd3661790e..7fce41f6073 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -235,7 +235,8 @@ "dependencies": { "@apollo/cache-control-types": "^1.0.3", "@apollo/client": "^3.12.2", - "@apollo/server": "^4.10.0", + "@apollo/server": "^4.12.1", + "@as-integrations/express5": "^1.1.1", "@babel/runtime": "^7.24.7", "@graphql-ts/extend": "^2.0.0", "@graphql-ts/schema": "^1.0.0", diff --git a/packages/core/src/lib/createExpressServer.ts b/packages/core/src/lib/createExpressServer.ts index 3ef65128d16..0a56af8c685 100644 --- a/packages/core/src/lib/createExpressServer.ts +++ b/packages/core/src/lib/createExpressServer.ts @@ -1,15 +1,17 @@ -import { type Server, createServer } from 'http' -import cors from 'cors' import { json } from 'body-parser' -import { expressMiddleware } from '@apollo/server/express4' +import cors from 'cors' import express from 'express' import { GraphQLError, type GraphQLFormattedError } from 'graphql' -import { type ApolloServerOptions, ApolloServer } from '@apollo/server' +import { type Server, createServer } from 'http' + +import { ApolloServer, type ApolloServerOptions } from '@apollo/server' import { ApolloServerPluginLandingPageDisabled } from '@apollo/server/plugin/disabled' import { ApolloServerPluginLandingPageLocalDefault } from '@apollo/server/plugin/landingPage/default' +import { expressMiddleware } from '@as-integrations/express5' + // @ts-expect-error import graphqlUploadExpress from 'graphql-upload/graphqlUploadExpress.js' -import type { KeystoneContext, KeystoneConfig } from '../types' +import type { KeystoneConfig, KeystoneContext } from '../types' /* NOTE: This creates the main Keystone express server, including the diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbe7c23e1d2..3858967dec3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -225,19 +225,19 @@ importers: '@prisma/client': specifier: 6.5.0 version: 6.5.0(prisma@6.5.0(typescript@5.8.2))(typescript@5.8.2) - '@types/express': - specifier: ^4.17.14 - version: 4.17.21 bytes: specifier: ^3.1.1 version: 3.1.2 express: - specifier: ^4.19.2 - version: 4.21.2 + specifier: ^5.0.0 + version: 5.1.0 devDependencies: '@types/bytes': specifier: ^3.1.1 version: 3.1.5 + '@types/express': + specifier: ^5.0.0 + version: 5.0.1 prisma: specifier: 6.5.0 version: 6.5.0(typescript@5.8.2) @@ -649,8 +649,8 @@ importers: specifier: ^16.0.0 version: 16.4.7 express: - specifier: ^4.19.2 - version: 4.21.2 + specifier: ^5.0.0 + version: 5.1.0 passport: specifier: ^0.7.0 version: 0.7.0 @@ -659,8 +659,8 @@ importers: version: 0.1.12 devDependencies: '@types/express': - specifier: ^4.17.14 - version: 4.17.21 + specifier: ^5.0.0 + version: 5.0.1 '@types/passport': specifier: ^1.0.16 version: 1.0.17 @@ -879,13 +879,13 @@ importers: '@prisma/client': specifier: 6.5.0 version: 6.5.0(prisma@6.5.0(typescript@5.8.2))(typescript@5.8.2) - '@types/express': - specifier: ^4.17.14 - version: 4.17.21 express: - specifier: ^4.19.2 - version: 4.21.2 + specifier: ^5.0.0 + version: 5.1.0 devDependencies: + '@types/express': + specifier: ^5.0.0 + version: 5.0.1 prisma: specifier: 6.5.0 version: 6.5.0(typescript@5.8.2) @@ -1809,8 +1809,11 @@ importers: specifier: ^3.12.2 version: 3.13.5(@types/react@19.0.12)(graphql-ws@6.0.4(graphql@16.10.0)(ws@8.18.1))(graphql@16.10.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@apollo/server': - specifier: ^4.10.0 - version: 4.11.3(graphql@16.10.0) + specifier: ^4.12.1 + version: 4.12.2(graphql@16.10.0) + '@as-integrations/express5': + specifier: ^1.1.1 + version: 1.1.1(@apollo/server@4.12.2(graphql@16.10.0))(express@5.1.0) '@babel/runtime': specifier: ^7.24.7 version: 7.26.10 @@ -2156,8 +2159,8 @@ importers: specifier: ^5.1.1 version: 5.1.1 express: - specifier: ^4.19.2 - version: 4.21.2 + specifier: ^5.0.0 + version: 5.1.0 graphql: specifier: ^16.8.1 version: 16.10.0 @@ -2165,35 +2168,13 @@ importers: specifier: ^2.1.3 version: 2.1.3 playwright: - specifier: ^1.17.1 - version: 1.51.1 + specifier: ^1.54.1 + version: 1.54.1 treekill: specifier: ^1.0.0 version: 1.0.0 tests/api-tests: - dependencies: - '@types/body-parser': - specifier: ^1.19.2 - version: 1.19.5 - '@types/fs-extra': - specifier: ^11.0.0 - version: 11.0.4 - '@types/mime': - specifier: ^2.0.3 - version: 2.0.3 - '@types/superagent': - specifier: ^4.1.15 - version: 4.1.24 - '@types/supertest': - specifier: ^2.0.11 - version: 2.0.16 - '@types/uuid': - specifier: ^9.0.0 - version: 9.0.8 - express: - specifier: ^4.19.2 - version: 4.21.2 devDependencies: '@apollo/cache-control-types': specifier: ^1.0.2 @@ -2222,15 +2203,36 @@ importers: '@prisma/internals': specifier: ^6.5.0 version: 6.5.0(typescript@5.8.2) + '@types/body-parser': + specifier: ^1.19.2 + version: 1.19.5 '@types/express': - specifier: ^4.17.14 - version: 4.17.21 + specifier: ^5.0.0 + version: 5.0.1 + '@types/fs-extra': + specifier: ^11.0.0 + version: 11.0.4 + '@types/mime': + specifier: ^2.0.3 + version: 2.0.3 '@types/ms': specifier: ^0.7.34 version: 0.7.34 + '@types/superagent': + specifier: ^4.1.15 + version: 4.1.24 + '@types/supertest': + specifier: ^2.0.11 + version: 2.0.16 + '@types/uuid': + specifier: ^9.0.0 + version: 9.0.8 cookie-signature: specifier: ^1.1.0 version: 1.2.2 + express: + specifier: ^5.0.0 + version: 5.1.0 fs-extra: specifier: ^11.0.0 version: 11.3.0 @@ -2242,7 +2244,7 @@ importers: version: 16.10.0 graphql-upload: specifier: ^15.0.2 - version: 15.0.2(@types/express@4.17.21)(graphql@16.10.0) + version: 15.0.2(@types/express@5.0.1)(graphql@16.10.0) mime: specifier: ^3.0.0 version: 3.0.0 @@ -2275,13 +2277,6 @@ importers: version: 1.0.0-rc.2 tests/cli-tests: - dependencies: - '@types/fs-extra': - specifier: ^11.0.0 - version: 11.0.4 - express: - specifier: ^4.19.2 - version: 4.21.2 devDependencies: '@apollo/cache-control-types': specifier: ^1.0.2 @@ -2307,6 +2302,9 @@ importers: '@prisma/migrate': specifier: ^6.5.0 version: 6.5.0(@prisma/generator-helper@6.5.0)(@prisma/internals@6.5.0(typescript@5.8.2)) + '@types/fs-extra': + specifier: ^11.0.0 + version: 11.0.4 '@types/ms': specifier: ^0.7.34 version: 0.7.34 @@ -2316,6 +2314,9 @@ importers: execa: specifier: ^5.1.1 version: 5.1.1 + express: + specifier: ^5.0.0 + version: 5.1.0 fast-glob: specifier: ^3.2.12 version: 3.3.3 @@ -2506,8 +2507,8 @@ packages: peerDependencies: graphql: 14.x || 15.x || 16.x - '@apollo/server@4.11.3': - resolution: {integrity: sha512-mW8idE2q0/BN14mimfJU5DAnoPHZRrAWgwsVLBEdACds+mxapIYxIbI6AH4AsOpxfrpvHts3PCYDbopy1XPW1g==} + '@apollo/server@4.12.2': + resolution: {integrity: sha512-jKRlf+sBMMdKYrjMoiWKne42Eb6paBfDOr08KJnUaeaiyWFj+/040FjVPQI7YGLfdwnYIsl1NUUqS2UdgezJDg==} engines: {node: '>=14.16.0'} deprecated: Apollo Server v4 is deprecated and will transition to end-of-life on January 26, 2026. As long as you are already using a non-EOL version of Node.js, upgrading to v5 should take only a few minutes. See https://www.apollographql.com/docs/apollo-server/previous-versions for details. peerDependencies: @@ -2582,6 +2583,13 @@ packages: peerDependencies: graphql: '*' + '@as-integrations/express5@1.1.1': + resolution: {integrity: sha512-bOXlKomcbLhezrcuy8zKFhYwe6EItVIomOJExtiwkzPW6tYm4f886zeMx8CI+r548L8QLuyzfQPio8ZFEmHXxQ==} + engines: {node: '>=20'} + peerDependencies: + '@apollo/server': ^4.0.0 || 5.0.0-rc.0 + express: ^5.0.0 + '@astrojs/compiler@2.11.0': resolution: {integrity: sha512-zZOO7i+JhojO8qmlyR/URui6LyfHJY6m+L9nwyX5GiKD78YoRaZ5tzz6X0fkl+5bD3uwlDHayf6Oe8Fu36RKNg==} @@ -10542,11 +10550,21 @@ packages: engines: {node: '>=18'} hasBin: true + playwright-core@1.54.1: + resolution: {integrity: sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==} + engines: {node: '>=18'} + hasBin: true + playwright@1.51.1: resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} engines: {node: '>=18'} hasBin: true + playwright@1.54.1: + resolution: {integrity: sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==} + engines: {node: '>=18'} + hasBin: true + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -12676,7 +12694,7 @@ snapshots: '@apollo/utils.logger': 2.0.1 graphql: 16.10.0 - '@apollo/server@4.11.3(graphql@16.10.0)': + '@apollo/server@4.12.2(graphql@16.10.0)': dependencies: '@apollo/cache-control-types': 1.0.3(graphql@16.10.0) '@apollo/server-gateway-interface': 1.1.1(graphql@16.10.0) @@ -12776,6 +12794,11 @@ snapshots: transitivePeerDependencies: - encoding + '@as-integrations/express5@1.1.1(@apollo/server@4.12.2(graphql@16.10.0))(express@5.1.0)': + dependencies: + '@apollo/server': 4.12.2(graphql@16.10.0) + express: 5.1.0 + '@astrojs/compiler@2.11.0': {} '@astrojs/internal-helpers@0.4.1': {} @@ -18095,19 +18118,19 @@ snapshots: '@types/passport-github2@1.2.9': dependencies: - '@types/express': 4.17.21 + '@types/express': 5.0.1 '@types/passport': 1.0.17 '@types/passport-oauth2': 1.4.17 '@types/passport-oauth2@1.4.17': dependencies: - '@types/express': 4.17.21 + '@types/express': 5.0.1 '@types/oauth': 0.9.6 '@types/passport': 1.0.17 '@types/passport@1.0.17': dependencies: - '@types/express': 4.17.21 + '@types/express': 5.0.1 '@types/pluralize@0.0.33': {} @@ -20724,19 +20747,6 @@ snapshots: graphql: 16.10.0 tslib: 2.8.1 - graphql-upload@15.0.2(@types/express@4.17.21)(graphql@16.10.0): - dependencies: - '@types/busboy': 1.5.4 - '@types/node': 22.13.11 - '@types/object-path': 0.11.4 - busboy: 1.6.0 - fs-capacitor: 6.2.0 - graphql: 16.10.0 - http-errors: 2.0.0 - object-path: 0.11.8 - optionalDependencies: - '@types/express': 4.17.21 - graphql-upload@15.0.2(@types/express@5.0.1)(graphql@16.10.0): dependencies: '@types/busboy': 1.5.4 @@ -23676,12 +23686,20 @@ snapshots: playwright-core@1.51.1: {} + playwright-core@1.54.1: {} + playwright@1.51.1: dependencies: playwright-core: 1.51.1 optionalDependencies: fsevents: 2.3.2 + playwright@1.54.1: + dependencies: + playwright-core: 1.54.1 + optionalDependencies: + fsevents: 2.3.2 + pluralize@8.0.0: {} posix-character-classes@0.1.1: {} diff --git a/tests/admin-ui-tests/package.json b/tests/admin-ui-tests/package.json index 9030aa72398..4aadc8b4da6 100644 --- a/tests/admin-ui-tests/package.json +++ b/tests/admin-ui-tests/package.json @@ -7,6 +7,11 @@ "license": "MIT", "repository": "https://github.com/keystonejs/keystone/tree/main/tests/admin-ui-tests", "homepage": "https://github.com/keystonejs/keystone", + "scripts": { + "dev": "keystone dev", + "start": "keystone start", + "build": "keystone build" + }, "devDependencies": { "@keystone-6/auth": "workspace:^", "@keystone-6/core": "workspace:^", @@ -14,15 +19,10 @@ "@types/ms": "^0.7.34", "dotenv": "^16.0.0", "execa": "^5.1.1", - "express": "^4.19.2", + "express": "^5.0.0", "graphql": "^16.8.1", "ms": "^2.1.3", - "playwright": "^1.17.1", + "playwright": "^1.54.1", "treekill": "^1.0.0" - }, - "scripts": { - "dev": "keystone dev", - "start": "keystone start", - "build": "keystone build" } } diff --git a/tests/api-tests/package.json b/tests/api-tests/package.json index 8352b8a73f8..f1460857bfa 100644 --- a/tests/api-tests/package.json +++ b/tests/api-tests/package.json @@ -17,8 +17,14 @@ "@prisma/client": "6.5.0", "@prisma/engines": "6.5.0", "@prisma/internals": "^6.5.0", - "@types/express": "^4.17.14", + "@types/express": "^5.0.0", "@types/ms": "^0.7.34", + "@types/body-parser": "^1.19.2", + "@types/fs-extra": "^11.0.0", + "@types/mime": "^2.0.3", + "@types/superagent": "^4.1.15", + "@types/supertest": "^2.0.11", + "@types/uuid": "^9.0.0", "cookie-signature": "^1.1.0", "fs-extra": "^11.0.0", "globby": "^11.0.4", @@ -29,15 +35,7 @@ "prisma": "6.5.0", "supertest": "^6.1.6", "testcheck": "^1.0.0-rc.2", - "uuid": "^9.0.0" - }, - "dependencies": { - "@types/body-parser": "^1.19.2", - "@types/fs-extra": "^11.0.0", - "@types/mime": "^2.0.3", - "@types/superagent": "^4.1.15", - "@types/supertest": "^2.0.11", - "@types/uuid": "^9.0.0", - "express": "^4.19.2" + "uuid": "^9.0.0", + "express": "^5.0.0" } } diff --git a/tests/cli-tests/package.json b/tests/cli-tests/package.json index 7fdf4d062a3..70a002f43ca 100644 --- a/tests/cli-tests/package.json +++ b/tests/cli-tests/package.json @@ -16,6 +16,7 @@ "@prisma/client": "6.5.0", "@prisma/internals": "^6.5.0", "@prisma/migrate": "^6.5.0", + "@types/fs-extra": "^11.0.0", "@types/ms": "^0.7.34", "chalk": "^4.1.2", "execa": "^5.1.1", @@ -23,10 +24,7 @@ "fs-extra": "^11.0.0", "mime": "^3.0.0", "ms": "^2.1.3", - "prisma": "6.5.0" - }, - "dependencies": { - "@types/fs-extra": "^11.0.0", - "express": "^4.19.2" + "prisma": "6.5.0", + "express": "^5.0.0" } } From c4772e1da1d9554fe7360e136abd0ae28ef5154e Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 15 Jul 2025 14:38:59 +1000 Subject: [PATCH 3/4] rename createAdminUIMiddlewareWithNextApp to createNextAdminUIMiddleware --- ...ateAdminUIMiddleware.ts => nextjs-admin-middleware.ts} | 8 +++----- packages/core/src/scripts/dev.ts | 6 +++--- packages/core/src/scripts/start.ts | 4 ++-- 3 files changed, 8 insertions(+), 10 deletions(-) rename packages/core/src/lib/{createAdminUIMiddleware.ts => nextjs-admin-middleware.ts} (93%) diff --git a/packages/core/src/lib/createAdminUIMiddleware.ts b/packages/core/src/lib/nextjs-admin-middleware.ts similarity index 93% rename from packages/core/src/lib/createAdminUIMiddleware.ts rename to packages/core/src/lib/nextjs-admin-middleware.ts index a8d4697a178..c69aae52979 100644 --- a/packages/core/src/lib/createAdminUIMiddleware.ts +++ b/packages/core/src/lib/nextjs-admin-middleware.ts @@ -7,7 +7,7 @@ import { pkgDir } from '../pkg-dir' const adminErrorHTMLFilepath = path.join(pkgDir, 'static', 'admin-error.html') -export function createAdminUIMiddlewareWithNextApp( +export function createNextAdminUIMiddleware( config: KeystoneConfig, commonContext: KeystoneContext, nextApp: ReturnType @@ -41,8 +41,7 @@ export function createAdminUIMiddlewareWithNextApp( if (shouldRedirect) { res.header('Cache-Control', 'no-cache, max-age=0') res.header('Location', shouldRedirect.to) - res.status(302) - res.send() + res.status(302).send() return } @@ -51,8 +50,7 @@ export function createAdminUIMiddlewareWithNextApp( handle(req, res) } catch (e) { console.error('An error occurred handling a request for the Admin UI:', e) - res.status(500) - res.format({ + res.status(500).format({ 'text/html': function () { res.sendFile(adminErrorHTMLFilepath) }, diff --git a/packages/core/src/scripts/dev.ts b/packages/core/src/scripts/dev.ts index 65511d11595..49d12c3cfed 100644 --- a/packages/core/src/scripts/dev.ts +++ b/packages/core/src/scripts/dev.ts @@ -17,7 +17,7 @@ import { confirmPrompt } from '../lib/prompts' import { createSystem } from '../lib/createSystem' import { getEsbuildConfig } from './esbuild' import { createExpressServer } from '../lib/createExpressServer' -import { createAdminUIMiddlewareWithNextApp } from '../lib/createAdminUIMiddleware' +import { createNextAdminUIMiddleware } from '../lib/nextjs-admin-middleware' import { runTelemetry } from '../lib/telemetry' import { generateArtifacts, @@ -277,7 +277,7 @@ export async function dev( console.log('✨ Preparing Admin UI') nextApp = next({ dev: true, dir: paths.admin }) await nextApp.prepare() - expressServer.use(createAdminUIMiddlewareWithNextApp(system.config, context, nextApp)) + expressServer.use(createNextAdminUIMiddleware(system.config, context, nextApp)) console.log(`✅ Admin UI ready`) } @@ -349,7 +349,7 @@ export async function dev( const servers = await createExpressServer(newSystem.config, newContext) if (nextApp) { servers.expressServer.use( - createAdminUIMiddlewareWithNextApp(newSystem.config, newContext, nextApp) + createNextAdminUIMiddleware(newSystem.config, newContext, nextApp) ) } expressServer = servers.expressServer diff --git a/packages/core/src/scripts/start.ts b/packages/core/src/scripts/start.ts index 568add4623f..109010bfdf7 100644 --- a/packages/core/src/scripts/start.ts +++ b/packages/core/src/scripts/start.ts @@ -2,7 +2,7 @@ import next from 'next' import { createSystem } from '../lib/createSystem' import { createExpressServer } from '../lib/createExpressServer' -import { createAdminUIMiddlewareWithNextApp } from '../lib/createAdminUIMiddleware' +import { createNextAdminUIMiddleware } from '../lib/nextjs-admin-middleware' import { withMigrate } from '../lib/migrations' import { importBuiltKeystoneConfiguration } from './utils' import { type Flags } from './cli' @@ -43,7 +43,7 @@ export async function start( const nextApp = next({ dev: false, dir: paths.admin }) await nextApp.prepare() expressServer.use( - await createAdminUIMiddlewareWithNextApp(system.config, keystone.context, nextApp) + await createNextAdminUIMiddleware(system.config, keystone.context, nextApp) ) console.log(`✅ Admin UI ready`) } From ed62bcd6e62c0104ce5af152935265cd21bbde21 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 15 Jul 2025 16:57:02 +1000 Subject: [PATCH 4/4] wip --- packages/fields-document/src/structure-validation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fields-document/src/structure-validation.ts b/packages/fields-document/src/structure-validation.ts index 06f6d23bcf2..e1be17e8a4c 100644 --- a/packages/fields-document/src/structure-validation.ts +++ b/packages/fields-document/src/structure-validation.ts @@ -162,6 +162,6 @@ export function isRelationshipData(value: unknown): value is RelationshipData { export function validateDocumentStructure(value: unknown): asserts value is Node[] { const result = zDocument.safeParse(value) if (!result.success) { - throw new Error(`Invalid document structure: ${result.error.message}`) + throw new TypeError(`Invalid document structure: ${result.error.message}`) } }