revert: downgrade to Next.js 15.5.9 for Payload compatibility

Payload CMS 3.68.4 doesn't officially support Next.js 16 yet.
Reverting to 15.5.9 restores full compatibility.

Changes:
- Revert next: 16.0.10 → 15.5.9
- Revert eslint-config-next: 16.0.10 → 15.5.9
- Revert proxy.ts → middleware.ts (Next.js 15 convention)
- Restore eslint config in next.config.mjs
- Remove turbopack config (not needed for Next.js 15)

Test fixes (TypeScript errors):
- Fix MockPayloadRequest interface (remove PayloadRequest extension)
- Add Where type imports to access control tests
- Fix headers type casting in rate-limiter tests
- Fix localization type guard in i18n tests
- Add type property to post creation in search tests
- Fix nodemailer mock typing in email tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Martin Porwoll 2025-12-15 10:07:39 +00:00
parent 3c03790a67
commit 47d4825f77
13 changed files with 138 additions and 191 deletions

View file

@ -6,24 +6,17 @@ const nextConfig = {
typescript: { typescript: {
ignoreBuildErrors: true, ignoreBuildErrors: true,
}, },
// Note: ESLint config moved to eslint.config.mjs (Next.js 16 requirement) // Skip ESLint during build to save memory
// Run lint separately via: pnpm lint eslint: {
ignoreDuringBuilds: true,
},
// Reduce memory usage during build // Reduce memory usage during build
experimental: { experimental: {
// Use fewer workers for builds on low-memory systems // Use fewer workers for builds on low-memory systems
workerThreads: false, workerThreads: false,
cpus: 1, cpus: 1,
}, },
// Turbopack configuration (Next.js 16 default bundler) // Webpack configuration for TypeScript/ESM compatibility
turbopack: {
resolveAlias: {
// Extension aliases for TypeScript/ESM compatibility
'.cjs': ['.cts', '.cjs'],
'.js': ['.ts', '.tsx', '.js', '.jsx'],
'.mjs': ['.mts', '.mjs'],
},
},
// Webpack fallback configuration (for --webpack flag)
webpack: (webpackConfig) => { webpack: (webpackConfig) => {
webpackConfig.resolve.extensionAlias = { webpackConfig.resolve.extensionAlias = {
'.cjs': ['.cts', '.cjs'], '.cjs': ['.cts', '.cjs'],

View file

@ -5,7 +5,7 @@
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"scripts": { "scripts": {
"build": "cross-env NODE_OPTIONS=\"--no-deprecation --max-old-space-size=2048\" next build --webpack", "build": "cross-env NODE_OPTIONS=\"--no-deprecation --max-old-space-size=2048\" next build",
"dev": "cross-env NODE_OPTIONS=--no-deprecation next dev", "dev": "cross-env NODE_OPTIONS=--no-deprecation next dev",
"devsafe": "rm -rf .next && cross-env NODE_OPTIONS=--no-deprecation next dev", "devsafe": "rm -rf .next && cross-env NODE_OPTIONS=--no-deprecation next dev",
"generate:importmap": "cross-env NODE_OPTIONS=--no-deprecation payload generate:importmap", "generate:importmap": "cross-env NODE_OPTIONS=--no-deprecation payload generate:importmap",
@ -42,7 +42,7 @@
"dotenv": "16.4.7", "dotenv": "16.4.7",
"graphql": "^16.8.1", "graphql": "^16.8.1",
"ioredis": "^5.8.2", "ioredis": "^5.8.2",
"next": "16.0.10", "next": "15.5.9",
"node-cron": "^4.2.1", "node-cron": "^4.2.1",
"nodemailer": "^7.0.11", "nodemailer": "^7.0.11",
"payload": "3.68.4", "payload": "3.68.4",
@ -63,7 +63,7 @@
"@vitejs/plugin-react": "4.5.2", "@vitejs/plugin-react": "4.5.2",
"@vitest/coverage-v8": "4.0.15", "@vitest/coverage-v8": "4.0.15",
"eslint": "^9.39.2", "eslint": "^9.39.2",
"eslint-config-next": "16.0.10", "eslint-config-next": "15.5.9",
"jsdom": "26.1.0", "jsdom": "26.1.0",
"playwright": "1.57.0", "playwright": "1.57.0",
"playwright-core": "1.57.0", "playwright-core": "1.57.0",

View file

@ -13,13 +13,13 @@ importers:
version: 3.68.4(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3)) version: 3.68.4(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))
'@payloadcms/next': '@payloadcms/next':
specifier: 3.68.4 specifier: 3.68.4
version: 3.68.4(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) version: 3.68.4(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
'@payloadcms/plugin-form-builder': '@payloadcms/plugin-form-builder':
specifier: 3.68.4 specifier: 3.68.4
version: 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) version: 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
'@payloadcms/plugin-multi-tenant': '@payloadcms/plugin-multi-tenant':
specifier: 3.68.4 specifier: 3.68.4
version: 3.68.4(@payloadcms/ui@3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3)) version: 3.68.4(@payloadcms/ui@3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))
'@payloadcms/plugin-nested-docs': '@payloadcms/plugin-nested-docs':
specifier: 3.68.4 specifier: 3.68.4
version: 3.68.4(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3)) version: 3.68.4(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))
@ -28,16 +28,16 @@ importers:
version: 3.68.4(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3)) version: 3.68.4(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))
'@payloadcms/plugin-seo': '@payloadcms/plugin-seo':
specifier: 3.68.4 specifier: 3.68.4
version: 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) version: 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
'@payloadcms/richtext-lexical': '@payloadcms/richtext-lexical':
specifier: 3.68.4 specifier: 3.68.4
version: 3.68.4(@faceless-ui/modal@3.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@payloadcms/next@3.68.4(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(yjs@13.6.27) version: 3.68.4(@faceless-ui/modal@3.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@payloadcms/next@3.68.4(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(yjs@13.6.27)
'@payloadcms/translations': '@payloadcms/translations':
specifier: 3.68.4 specifier: 3.68.4
version: 3.68.4 version: 3.68.4
'@payloadcms/ui': '@payloadcms/ui':
specifier: 3.68.4 specifier: 3.68.4
version: 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) version: 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
bullmq: bullmq:
specifier: ^5.65.1 specifier: ^5.65.1
version: 5.65.1 version: 5.65.1
@ -54,8 +54,8 @@ importers:
specifier: ^5.8.2 specifier: ^5.8.2
version: 5.8.2 version: 5.8.2
next: next:
specifier: 16.0.10 specifier: 15.5.9
version: 16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4) version: 15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4)
node-cron: node-cron:
specifier: ^4.2.1 specifier: ^4.2.1
version: 4.2.1 version: 4.2.1
@ -112,8 +112,8 @@ importers:
specifier: ^9.39.2 specifier: ^9.39.2
version: 9.39.2 version: 9.39.2
eslint-config-next: eslint-config-next:
specifier: 16.0.10 specifier: 15.5.9
version: 16.0.10(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) version: 15.5.9(eslint@9.39.2)(typescript@5.9.3)
jsdom: jsdom:
specifier: 26.1.0 specifier: 26.1.0
version: 26.1.0 version: 26.1.0
@ -1148,56 +1148,53 @@ packages:
'@next/env@15.5.9': '@next/env@15.5.9':
resolution: {integrity: sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==} resolution: {integrity: sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==}
'@next/env@16.0.10': '@next/eslint-plugin-next@15.5.9':
resolution: {integrity: sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang==} resolution: {integrity: sha512-kUzXx0iFiXw27cQAViE1yKWnz/nF8JzRmwgMRTMh8qMY90crNsdXJRh2e+R0vBpFR3kk1yvAR7wev7+fCCb79Q==}
'@next/eslint-plugin-next@16.0.10': '@next/swc-darwin-arm64@15.5.7':
resolution: {integrity: sha512-b2NlWN70bbPLmfyoLvvidPKWENBYYIe017ZGUpElvQjDytCWgxPJx7L9juxHt0xHvNVA08ZHJdOyhGzon/KJuw==} resolution: {integrity: sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==}
'@next/swc-darwin-arm64@16.0.10':
resolution: {integrity: sha512-4XgdKtdVsaflErz+B5XeG0T5PeXKDdruDf3CRpnhN+8UebNa5N2H58+3GDgpn/9GBurrQ1uWW768FfscwYkJRg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@next/swc-darwin-x64@16.0.10': '@next/swc-darwin-x64@15.5.7':
resolution: {integrity: sha512-spbEObMvRKkQ3CkYVOME+ocPDFo5UqHb8EMTS78/0mQ+O1nqE8toHJVioZo4TvebATxgA8XMTHHrScPrn68OGw==} resolution: {integrity: sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@next/swc-linux-arm64-gnu@16.0.10': '@next/swc-linux-arm64-gnu@15.5.7':
resolution: {integrity: sha512-uQtWE3X0iGB8apTIskOMi2w/MKONrPOUCi5yLO+v3O8Mb5c7K4Q5KD1jvTpTF5gJKa3VH/ijKjKUq9O9UhwOYw==} resolution: {integrity: sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-arm64-musl@16.0.10': '@next/swc-linux-arm64-musl@15.5.7':
resolution: {integrity: sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw==} resolution: {integrity: sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-x64-gnu@16.0.10': '@next/swc-linux-x64-gnu@15.5.7':
resolution: {integrity: sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA==} resolution: {integrity: sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-linux-x64-musl@16.0.10': '@next/swc-linux-x64-musl@15.5.7':
resolution: {integrity: sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g==} resolution: {integrity: sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-win32-arm64-msvc@16.0.10': '@next/swc-win32-arm64-msvc@15.5.7':
resolution: {integrity: sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg==} resolution: {integrity: sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@next/swc-win32-x64-msvc@16.0.10': '@next/swc-win32-x64-msvc@15.5.7':
resolution: {integrity: sha512-E+njfCoFLb01RAFEnGZn6ERoOqhK1Gl3Lfz1Kjnj0Ulfu7oJbuMyvBKNj/bw8XZnenHDASlygTjZICQW+rYW1Q==} resolution: {integrity: sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -1427,6 +1424,9 @@ packages:
'@rtsao/scc@1.1.0': '@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
'@rushstack/eslint-patch@1.15.0':
resolution: {integrity: sha512-ojSshQPKwVvSMR8yT2L/QtUkV5SXi/IfDiJ4/8d6UbTPjiHVmxZzUAzGD8Tzks1b9+qQkZa0isUOvYObedITaw==}
'@smithy/abort-controller@4.2.5': '@smithy/abort-controller@4.2.5':
resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==} resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
@ -2503,10 +2503,10 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'} engines: {node: '>=10'}
eslint-config-next@16.0.10: eslint-config-next@15.5.9:
resolution: {integrity: sha512-BxouZUm0I45K4yjOOIzj24nTi0H2cGo0y7xUmk+Po/PYtJXFBYVDS1BguE7t28efXjKdcN0tmiLivxQy//SsZg==} resolution: {integrity: sha512-852JYI3NkFNzW8CqsMhI0K2CDRxTObdZ2jQJj5CtpEaOkYHn13107tHpNuD/h0WRpU4FAbCdUaxQsrfBtNK9Kw==}
peerDependencies: peerDependencies:
eslint: '>=9.0.0' eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1' typescript: '>=3.3.1'
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
@ -2565,9 +2565,9 @@ packages:
peerDependencies: peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
eslint-plugin-react-hooks@7.0.1: eslint-plugin-react-hooks@5.2.0:
resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
engines: {node: '>=18'} engines: {node: '>=10'}
peerDependencies: peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
@ -2769,10 +2769,6 @@ packages:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
globals@16.4.0:
resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
engines: {node: '>=18'}
globalthis@1.0.4: globalthis@1.0.4:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -2833,12 +2829,6 @@ packages:
help-me@5.0.0: help-me@5.0.0:
resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
hermes-estree@0.25.1:
resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
hermes-parser@0.25.1:
resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
hoist-non-react-statics@3.3.2: hoist-non-react-statics@3.3.2:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
@ -3366,9 +3356,9 @@ packages:
natural-compare@1.4.0: natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
next@16.0.10: next@15.5.9:
resolution: {integrity: sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA==} resolution: {integrity: sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==}
engines: {node: '>=20.9.0'} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
'@opentelemetry/api': ^1.1.0 '@opentelemetry/api': ^1.1.0
@ -4162,13 +4152,6 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
typescript-eslint@8.49.0:
resolution: {integrity: sha512-zRSVH1WXD0uXczCXw+nsdjGPUdx4dfrs5VQoHnUWmv1U3oNlAKv4FUNdLDhVUg+gYn+a5hUESqch//Rv5wVhrg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
typescript@5.9.3: typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'} engines: {node: '>=14.17'}
@ -4446,15 +4429,6 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
zod-validation-error@4.0.2:
resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
zod: ^3.25.0 || ^4.0.0
zod@4.2.0:
resolution: {integrity: sha512-Bd5fw9wlIhtqCCxotZgdTOMwGm1a0u75wARVEY9HMs1X17trvA/lMi4+MGK5EUfYkXVTbX8UDiDKW4OgzHVUZw==}
zwitch@2.0.4: zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@ -5685,34 +5659,32 @@ snapshots:
'@next/env@15.5.9': {} '@next/env@15.5.9': {}
'@next/env@16.0.10': {} '@next/eslint-plugin-next@15.5.9':
'@next/eslint-plugin-next@16.0.10':
dependencies: dependencies:
fast-glob: 3.3.1 fast-glob: 3.3.1
'@next/swc-darwin-arm64@16.0.10': '@next/swc-darwin-arm64@15.5.7':
optional: true optional: true
'@next/swc-darwin-x64@16.0.10': '@next/swc-darwin-x64@15.5.7':
optional: true optional: true
'@next/swc-linux-arm64-gnu@16.0.10': '@next/swc-linux-arm64-gnu@15.5.7':
optional: true optional: true
'@next/swc-linux-arm64-musl@16.0.10': '@next/swc-linux-arm64-musl@15.5.7':
optional: true optional: true
'@next/swc-linux-x64-gnu@16.0.10': '@next/swc-linux-x64-gnu@15.5.7':
optional: true optional: true
'@next/swc-linux-x64-musl@16.0.10': '@next/swc-linux-x64-musl@15.5.7':
optional: true optional: true
'@next/swc-win32-arm64-msvc@16.0.10': '@next/swc-win32-arm64-msvc@15.5.7':
optional: true optional: true
'@next/swc-win32-x64-msvc@16.0.10': '@next/swc-win32-x64-msvc@15.5.7':
optional: true optional: true
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
@ -5832,12 +5804,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
'@payloadcms/next@3.68.4(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': '@payloadcms/next@3.68.4(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
dependencies: dependencies:
'@dnd-kit/core': 6.0.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@dnd-kit/core': 6.0.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
'@payloadcms/graphql': 3.68.4(graphql@16.12.0)(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(typescript@5.9.3) '@payloadcms/graphql': 3.68.4(graphql@16.12.0)(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(typescript@5.9.3)
'@payloadcms/translations': 3.68.4 '@payloadcms/translations': 3.68.4
'@payloadcms/ui': 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@payloadcms/ui': 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
busboy: 1.6.0 busboy: 1.6.0
dequal: 2.0.3 dequal: 2.0.3
file-type: 19.3.0 file-type: 19.3.0
@ -5845,7 +5817,7 @@ snapshots:
graphql-http: 1.22.4(graphql@16.12.0) graphql-http: 1.22.4(graphql@16.12.0)
graphql-playground-html: 1.6.30 graphql-playground-html: 1.6.30
http-status: 2.1.0 http-status: 2.1.0
next: 16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4) next: 15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4)
path-to-regexp: 6.3.0 path-to-regexp: 6.3.0
payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3) payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3)
qs-esm: 7.0.2 qs-esm: 7.0.2
@ -5859,9 +5831,9 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
'@payloadcms/plugin-form-builder@3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': '@payloadcms/plugin-form-builder@3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
dependencies: dependencies:
'@payloadcms/ui': 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@payloadcms/ui': 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
escape-html: 1.0.3 escape-html: 1.0.3
payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3) payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3)
react: 19.2.3 react: 19.2.3
@ -5873,9 +5845,9 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
'@payloadcms/plugin-multi-tenant@3.68.4(@payloadcms/ui@3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))': '@payloadcms/plugin-multi-tenant@3.68.4(@payloadcms/ui@3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))':
dependencies: dependencies:
'@payloadcms/ui': 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@payloadcms/ui': 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3) payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3)
'@payloadcms/plugin-nested-docs@3.68.4(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))': '@payloadcms/plugin-nested-docs@3.68.4(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))':
@ -5887,10 +5859,10 @@ snapshots:
'@payloadcms/translations': 3.68.4 '@payloadcms/translations': 3.68.4
payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3) payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3)
'@payloadcms/plugin-seo@3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': '@payloadcms/plugin-seo@3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
dependencies: dependencies:
'@payloadcms/translations': 3.68.4 '@payloadcms/translations': 3.68.4
'@payloadcms/ui': 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@payloadcms/ui': 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3) payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3)
react: 19.2.3 react: 19.2.3
react-dom: 19.2.3(react@19.2.3) react-dom: 19.2.3(react@19.2.3)
@ -5901,7 +5873,7 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
'@payloadcms/richtext-lexical@3.68.4(@faceless-ui/modal@3.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@payloadcms/next@3.68.4(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(yjs@13.6.27)': '@payloadcms/richtext-lexical@3.68.4(@faceless-ui/modal@3.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@faceless-ui/scroll-info@2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@payloadcms/next@3.68.4(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)(yjs@13.6.27)':
dependencies: dependencies:
'@faceless-ui/modal': 3.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@faceless-ui/modal': 3.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
'@faceless-ui/scroll-info': 2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@faceless-ui/scroll-info': 2.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@ -5916,9 +5888,9 @@ snapshots:
'@lexical/selection': 0.35.0 '@lexical/selection': 0.35.0
'@lexical/table': 0.35.0 '@lexical/table': 0.35.0
'@lexical/utils': 0.35.0 '@lexical/utils': 0.35.0
'@payloadcms/next': 3.68.4(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@payloadcms/next': 3.68.4(@types/react@19.2.7)(graphql@16.12.0)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
'@payloadcms/translations': 3.68.4 '@payloadcms/translations': 3.68.4
'@payloadcms/ui': 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) '@payloadcms/ui': 3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
'@types/uuid': 10.0.0 '@types/uuid': 10.0.0
acorn: 8.12.1 acorn: 8.12.1
bson-objectid: 2.0.4 bson-objectid: 2.0.4
@ -5949,7 +5921,7 @@ snapshots:
dependencies: dependencies:
date-fns: 4.1.0 date-fns: 4.1.0
'@payloadcms/ui@3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': '@payloadcms/ui@3.68.4(@types/react@19.2.7)(monaco-editor@0.55.1)(next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4))(payload@3.68.4(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
dependencies: dependencies:
'@date-fns/tz': 1.2.0 '@date-fns/tz': 1.2.0
'@dnd-kit/core': 6.0.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@dnd-kit/core': 6.0.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@ -5964,7 +5936,7 @@ snapshots:
date-fns: 4.1.0 date-fns: 4.1.0
dequal: 2.0.3 dequal: 2.0.3
md5: 2.3.0 md5: 2.3.0
next: 16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4) next: 15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4)
object-to-formdata: 4.5.1 object-to-formdata: 4.5.1
payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3) payload: 3.68.4(graphql@16.12.0)(typescript@5.9.3)
qs-esm: 7.0.2 qs-esm: 7.0.2
@ -6060,6 +6032,8 @@ snapshots:
'@rtsao/scc@1.1.0': {} '@rtsao/scc@1.1.0': {}
'@rushstack/eslint-patch@1.15.0': {}
'@smithy/abort-controller@4.2.5': '@smithy/abort-controller@4.2.5':
dependencies: dependencies:
'@smithy/types': 4.9.0 '@smithy/types': 4.9.0
@ -7306,22 +7280,22 @@ snapshots:
escape-string-regexp@4.0.0: {} escape-string-regexp@4.0.0: {}
eslint-config-next@16.0.10(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3): eslint-config-next@15.5.9(eslint@9.39.2)(typescript@5.9.3):
dependencies: dependencies:
'@next/eslint-plugin-next': 16.0.10 '@next/eslint-plugin-next': 15.5.9
'@rushstack/eslint-patch': 1.15.0
'@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)
'@typescript-eslint/parser': 8.49.0(eslint@9.39.2)(typescript@5.9.3)
eslint: 9.39.2 eslint: 9.39.2
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2)
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2))(eslint@9.39.2) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2)
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2)
eslint-plugin-react: 7.37.5(eslint@9.39.2) eslint-plugin-react: 7.37.5(eslint@9.39.2)
eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2)
globals: 16.4.0
typescript-eslint: 8.49.0(eslint@9.39.2)(typescript@5.9.3)
optionalDependencies: optionalDependencies:
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- eslint-plugin-import-x - eslint-plugin-import-x
- supports-color - supports-color
@ -7334,7 +7308,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2): eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2):
dependencies: dependencies:
'@nolyfill/is-core-module': 1.0.39 '@nolyfill/is-core-module': 1.0.39
debug: 4.4.3 debug: 4.4.3
@ -7345,22 +7319,22 @@ snapshots:
tinyglobby: 0.2.15 tinyglobby: 0.2.15
unrs-resolver: 1.11.1 unrs-resolver: 1.11.1
optionalDependencies: optionalDependencies:
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2))(eslint@9.39.2) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2))(eslint@9.39.2): eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.49.0(eslint@9.39.2)(typescript@5.9.3) '@typescript-eslint/parser': 8.49.0(eslint@9.39.2)(typescript@5.9.3)
eslint: 9.39.2 eslint: 9.39.2
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2))(eslint@9.39.2): eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2):
dependencies: dependencies:
'@rtsao/scc': 1.1.0 '@rtsao/scc': 1.1.0
array-includes: 3.1.9 array-includes: 3.1.9
@ -7371,7 +7345,7 @@ snapshots:
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.39.2 eslint: 9.39.2
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2))(eslint@9.39.2) eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2)
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.16.1 is-core-module: 2.16.1
is-glob: 4.0.3 is-glob: 4.0.3
@ -7408,16 +7382,9 @@ snapshots:
safe-regex-test: 1.1.0 safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1 string.prototype.includes: 2.0.1
eslint-plugin-react-hooks@7.0.1(eslint@9.39.2): eslint-plugin-react-hooks@5.2.0(eslint@9.39.2):
dependencies: dependencies:
'@babel/core': 7.28.5
'@babel/parser': 7.28.5
eslint: 9.39.2 eslint: 9.39.2
hermes-parser: 0.25.1
zod: 4.2.0
zod-validation-error: 4.0.2(zod@4.2.0)
transitivePeerDependencies:
- supports-color
eslint-plugin-react@7.37.5(eslint@9.39.2): eslint-plugin-react@7.37.5(eslint@9.39.2):
dependencies: dependencies:
@ -7657,8 +7624,6 @@ snapshots:
globals@14.0.0: {} globals@14.0.0: {}
globals@16.4.0: {}
globalthis@1.0.4: globalthis@1.0.4:
dependencies: dependencies:
define-properties: 1.2.1 define-properties: 1.2.1
@ -7707,12 +7672,6 @@ snapshots:
help-me@5.0.0: {} help-me@5.0.0: {}
hermes-estree@0.25.1: {}
hermes-parser@0.25.1:
dependencies:
hermes-estree: 0.25.1
hoist-non-react-statics@3.3.2: hoist-non-react-statics@3.3.2:
dependencies: dependencies:
react-is: 16.13.1 react-is: 16.13.1
@ -8393,9 +8352,9 @@ snapshots:
natural-compare@1.4.0: {} natural-compare@1.4.0: {}
next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4): next@15.5.9(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.77.4):
dependencies: dependencies:
'@next/env': 16.0.10 '@next/env': 15.5.9
'@swc/helpers': 0.5.15 '@swc/helpers': 0.5.15
caniuse-lite: 1.0.30001760 caniuse-lite: 1.0.30001760
postcss: 8.4.31 postcss: 8.4.31
@ -8403,14 +8362,14 @@ snapshots:
react-dom: 19.2.3(react@19.2.3) react-dom: 19.2.3(react@19.2.3)
styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.3) styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.3)
optionalDependencies: optionalDependencies:
'@next/swc-darwin-arm64': 16.0.10 '@next/swc-darwin-arm64': 15.5.7
'@next/swc-darwin-x64': 16.0.10 '@next/swc-darwin-x64': 15.5.7
'@next/swc-linux-arm64-gnu': 16.0.10 '@next/swc-linux-arm64-gnu': 15.5.7
'@next/swc-linux-arm64-musl': 16.0.10 '@next/swc-linux-arm64-musl': 15.5.7
'@next/swc-linux-x64-gnu': 16.0.10 '@next/swc-linux-x64-gnu': 15.5.7
'@next/swc-linux-x64-musl': 16.0.10 '@next/swc-linux-x64-musl': 15.5.7
'@next/swc-win32-arm64-msvc': 16.0.10 '@next/swc-win32-arm64-msvc': 15.5.7
'@next/swc-win32-x64-msvc': 16.0.10 '@next/swc-win32-x64-msvc': 15.5.7
'@playwright/test': 1.57.0 '@playwright/test': 1.57.0
sass: 1.77.4 sass: 1.77.4
sharp: 0.34.5 sharp: 0.34.5
@ -9325,17 +9284,6 @@ snapshots:
possible-typed-array-names: 1.1.0 possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10 reflect.getprototypeof: 1.0.10
typescript-eslint@8.49.0(eslint@9.39.2)(typescript@5.9.3):
dependencies:
'@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)
'@typescript-eslint/parser': 8.49.0(eslint@9.39.2)(typescript@5.9.3)
'@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
'@typescript-eslint/utils': 8.49.0(eslint@9.39.2)(typescript@5.9.3)
eslint: 9.39.2
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
typescript@5.9.3: {} typescript@5.9.3: {}
uint8array-extras@1.5.0: {} uint8array-extras@1.5.0: {}
@ -9616,10 +9564,4 @@ snapshots:
yocto-queue@0.1.0: {} yocto-queue@0.1.0: {}
zod-validation-error@4.0.2(zod@4.2.0):
dependencies:
zod: 4.2.0
zod@4.2.0: {}
zwitch@2.0.4: {} zwitch@2.0.4: {}

View file

@ -1,5 +1,5 @@
// src/proxy.ts // src/middleware.ts
// Next.js Proxy for locale detection and routing (migrated from middleware.ts for Next.js 16) // Next.js Middleware for locale detection and routing
import { NextRequest, NextResponse } from 'next/server' import { NextRequest, NextResponse } from 'next/server'
import { defaultLocale, isValidLocale, type Locale } from '@/lib/i18n' import { defaultLocale, isValidLocale, type Locale } from '@/lib/i18n'
@ -53,7 +53,7 @@ function getLocaleFromCookie(request: NextRequest): Locale | null {
return null return null
} }
export function proxy(request: NextRequest) { export function middleware(request: NextRequest) {
const { pathname } = request.nextUrl const { pathname } = request.nextUrl
// Skip locale routing for excluded paths and public files // Skip locale routing for excluded paths and public files

View file

@ -26,8 +26,10 @@ export interface MockTenant {
domains?: Array<{ domain: string }> domains?: Array<{ domain: string }>
} }
export interface MockPayloadRequest extends Partial<PayloadRequest> { // Note: Not extending PayloadRequest to allow flexible mock types for testing
export interface MockPayloadRequest {
user?: MockUser | null user?: MockUser | null
// Allow both Headers and plain object for testing different header formats
headers: Headers | Record<string, string | string[] | undefined> headers: Headers | Record<string, string | string[] | undefined>
payload: { payload: {
find: ReturnType<typeof vi.fn> find: ReturnType<typeof vi.fn>
@ -126,10 +128,10 @@ export function createMockPayloadRequest(
tenants?: MockTenant[] tenants?: MockTenant[]
} = {}, } = {},
): MockPayloadRequest { ): MockPayloadRequest {
const headers: Record<string, string | string[] | undefined> = {} const headers = new Headers()
if (options.host) { if (options.host) {
headers['host'] = options.host headers.set('host', options.host)
} }
// Mock payload.find to resolve tenant from host // Mock payload.find to resolve tenant from host
@ -306,9 +308,11 @@ export async function executeAccess(
data?: Record<string, unknown> data?: Record<string, unknown>
} = {}, } = {},
): Promise<AccessResult> { ): Promise<AccessResult> {
// Convert string ID to number if needed (Payload access functions expect number | undefined)
const numericId = typeof options.id === 'string' ? parseInt(options.id, 10) : options.id
const result = await accessFn({ const result = await accessFn({
req: request as unknown as PayloadRequest, req: request as unknown as PayloadRequest,
id: options.id, id: numericId,
data: options.data, data: options.data,
}) })

View file

@ -3,12 +3,13 @@ import type { Payload } from 'payload'
import type { Tenant } from '@/payload-types' import type { Tenant } from '@/payload-types'
const mockSendMail = vi.fn(async () => ({ messageId: 'mocked-id' })) const mockSendMail = vi.fn(async () => ({ messageId: 'mocked-id' }))
const mockCreateTransport = vi.fn(() => ({ sendMail: mockSendMail })) // eslint-disable-next-line @typescript-eslint/no-unused-vars
const mockCreateTransport = vi.fn((_options?: unknown) => ({ sendMail: mockSendMail }))
vi.mock('nodemailer', () => ({ vi.mock('nodemailer', () => ({
__esModule: true, __esModule: true,
default: { default: {
createTransport: (...args: unknown[]) => mockCreateTransport(...args), createTransport: (options: unknown) => mockCreateTransport(options),
}, },
})) }))

View file

@ -75,8 +75,13 @@ describe('Payload Localization Integration', () => {
it('payload config has localization enabled', async () => { it('payload config has localization enabled', async () => {
const payloadConfig = await config const payloadConfig = await config
expect(payloadConfig.localization).toBeDefined() expect(payloadConfig.localization).toBeDefined()
expect(payloadConfig.localization?.locales).toBeDefined() expect(payloadConfig.localization).not.toBe(false)
expect(payloadConfig.localization?.defaultLocale).toBe('de') // Type guard for localization config
const localization = payloadConfig.localization
if (localization && typeof localization === 'object') {
expect(localization.locales).toBeDefined()
expect(localization.defaultLocale).toBe('de')
}
}) })
it('payload config has i18n enabled', async () => { it('payload config has i18n enabled', async () => {

View file

@ -242,10 +242,12 @@ describe('Search API Integration', () => {
try { try {
const post = await payload.create({ const post = await payload.create({
collection: 'posts', collection: 'posts',
draft: false,
data: { data: {
title: 'Searchable Test Post Title', title: 'Searchable Test Post Title',
slug: `searchable-test-post-${Date.now()}`, slug: `searchable-test-post-${Date.now()}`,
excerpt: 'This is a searchable excerpt for testing', excerpt: 'This is a searchable excerpt for testing',
type: 'blog',
status: 'published', status: 'published',
publishedAt: new Date().toISOString(), publishedAt: new Date().toISOString(),
tenant: testTenantId, tenant: testTenantId,

View file

@ -9,7 +9,7 @@
*/ */
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
import type { Access, PayloadRequest } from 'payload' import type { Access, PayloadRequest, Where } from 'payload'
import { import {
createSuperAdmin, createSuperAdmin,
createTenantUser, createTenantUser,
@ -122,7 +122,7 @@ describe('EmailLogs Collection Access', () => {
const result = await executeAccess(emailLogsAccess.read, request) const result = await executeAccess(emailLogsAccess.read, request)
expect(hasFilteredAccess(result)).toBe(true) expect(hasFilteredAccess(result)).toBe(true)
const tenantIds = getTenantIdsFromInFilter(result as Record<string, unknown>) const tenantIds = getTenantIdsFromInFilter(result as Where)
expect(tenantIds).toContain(1) // porwoll tenant ID expect(tenantIds).toContain(1) // porwoll tenant ID
}) })
@ -131,7 +131,7 @@ describe('EmailLogs Collection Access', () => {
const result = await executeAccess(emailLogsAccess.read, request) const result = await executeAccess(emailLogsAccess.read, request)
expect(hasFilteredAccess(result)).toBe(true) expect(hasFilteredAccess(result)).toBe(true)
const tenantIds = getTenantIdsFromInFilter(result as Record<string, unknown>) const tenantIds = getTenantIdsFromInFilter(result as Where)
expect(tenantIds).toEqual(expect.arrayContaining([1, 4, 5])) expect(tenantIds).toEqual(expect.arrayContaining([1, 4, 5]))
}) })
@ -141,7 +141,7 @@ describe('EmailLogs Collection Access', () => {
const result = await executeAccess(emailLogsAccess.read, request) const result = await executeAccess(emailLogsAccess.read, request)
expect(hasFilteredAccess(result)).toBe(true) expect(hasFilteredAccess(result)).toBe(true)
const tenantIds = getTenantIdsFromInFilter(result as Record<string, unknown>) const tenantIds = getTenantIdsFromInFilter(result as Where)
expect(tenantIds).toContain(1) expect(tenantIds).toContain(1)
expect(tenantIds).toContain(4) expect(tenantIds).toContain(4)
}) })
@ -159,7 +159,7 @@ describe('EmailLogs Collection Access', () => {
const result = await executeAccess(emailLogsAccess.read, request) const result = await executeAccess(emailLogsAccess.read, request)
expect(hasFilteredAccess(result)).toBe(true) expect(hasFilteredAccess(result)).toBe(true)
const tenantIds = getTenantIdsFromInFilter(result as Record<string, unknown>) const tenantIds = getTenantIdsFromInFilter(result as Where)
expect(tenantIds).toEqual([]) expect(tenantIds).toEqual([])
}) })
}) })
@ -377,7 +377,7 @@ describe('Access Control Edge Cases', () => {
const result = await executeAccess(emailLogsAccess.read, request) const result = await executeAccess(emailLogsAccess.read, request)
expect(hasFilteredAccess(result)).toBe(true) expect(hasFilteredAccess(result)).toBe(true)
const tenantIds = getTenantIdsFromInFilter(result as Record<string, unknown>) const tenantIds = getTenantIdsFromInFilter(result as Where)
expect(tenantIds).toHaveLength(0) expect(tenantIds).toHaveLength(0)
}) })
@ -428,7 +428,7 @@ describe('Access Control Edge Cases', () => {
const result = await executeAccess(emailLogsAccess.read, request) const result = await executeAccess(emailLogsAccess.read, request)
expect(hasFilteredAccess(result)).toBe(true) expect(hasFilteredAccess(result)).toBe(true)
const tenantIds = getTenantIdsFromInFilter(result as Record<string, unknown>) const tenantIds = getTenantIdsFromInFilter(result as Where)
expect(tenantIds.sort()).toEqual([1, 2, 3]) expect(tenantIds.sort()).toEqual([1, 2, 3])
}) })
}) })

View file

@ -6,7 +6,7 @@
*/ */
import { describe, it, expect, vi, beforeEach } from 'vitest' import { describe, it, expect, vi, beforeEach } from 'vitest'
import type { PayloadRequest } from 'payload' import type { PayloadRequest, Where } from 'payload'
import { import {
createSuperAdmin, createSuperAdmin,
createTenantUser, createTenantUser,
@ -173,7 +173,7 @@ describe('tenantScopedPublicRead', () => {
const result = await executeAccess(tenantScopedPublicRead, request) const result = await executeAccess(tenantScopedPublicRead, request)
expect(hasFilteredAccess(result)).toBe(true) expect(hasFilteredAccess(result)).toBe(true)
expect(getTenantIdFromFilter(result as Record<string, unknown>)).toBe(1) expect(getTenantIdFromFilter(result as Where)).toBe(1)
}) })
it('returns different tenant filter for different domain', async () => { it('returns different tenant filter for different domain', async () => {
@ -181,7 +181,7 @@ describe('tenantScopedPublicRead', () => {
const result = await executeAccess(tenantScopedPublicRead, request) const result = await executeAccess(tenantScopedPublicRead, request)
expect(hasFilteredAccess(result)).toBe(true) expect(hasFilteredAccess(result)).toBe(true)
expect(getTenantIdFromFilter(result as Record<string, unknown>)).toBe(4) expect(getTenantIdFromFilter(result as Where)).toBe(4)
}) })
it('denies access for unknown domain', async () => { it('denies access for unknown domain', async () => {
@ -286,7 +286,7 @@ describe('Access Control Integration Scenarios', () => {
// Should only see porwoll.de posts // Should only see porwoll.de posts
expect(hasFilteredAccess(result)).toBe(true) expect(hasFilteredAccess(result)).toBe(true)
expect(getTenantIdFromFilter(result as Record<string, unknown>)).toBe(1) expect(getTenantIdFromFilter(result as Where)).toBe(1)
}) })
it('admin editing posts from any tenant', async () => { it('admin editing posts from any tenant', async () => {

View file

@ -288,7 +288,7 @@ describe('Data Masking', () => {
it('handles non-Error objects', () => { it('handles non-Error objects', () => {
const notAnError = { message: 'password=secret', code: 500 } const notAnError = { message: 'password=secret', code: 500 }
const masked = maskError(notAnError as Error) const masked = maskError(notAnError as unknown as Error)
expect(masked).toBeDefined() expect(masked).toBeDefined()
}) })

View file

@ -205,7 +205,7 @@ describe('Rate Limiter', () => {
resetIn: 45000, resetIn: 45000,
} }
const headers = rateLimitHeaders(result, 30) const headers = rateLimitHeaders(result, 30) as Record<string, string>
expect(headers['X-RateLimit-Limit']).toBe('30') expect(headers['X-RateLimit-Limit']).toBe('30')
expect(headers['X-RateLimit-Remaining']).toBe('25') expect(headers['X-RateLimit-Remaining']).toBe('25')
@ -220,7 +220,7 @@ describe('Rate Limiter', () => {
retryAfter: 30, retryAfter: 30,
} }
const headers = rateLimitHeaders(result, 10) const headers = rateLimitHeaders(result, 10) as Record<string, string>
expect(headers['Retry-After']).toBe('30') expect(headers['Retry-After']).toBe('30')
expect(headers['X-RateLimit-Remaining']).toBe('0') expect(headers['X-RateLimit-Remaining']).toBe('0')
@ -233,8 +233,8 @@ describe('Rate Limiter', () => {
resetIn: 60000, resetIn: 60000,
} }
const headers = rateLimitHeaders(result, 10) const headers = rateLimitHeaders(result, 10) as Record<string, string>
const resetValue = headers['X-RateLimit-Reset'] as string const resetValue = headers['X-RateLimit-Reset']
// The reset value should be a number (either timestamp or seconds) // The reset value should be a number (either timestamp or seconds)
expect(resetValue).toBeDefined() expect(resetValue).toBeDefined()

View file

@ -15,7 +15,7 @@
"moduleResolution": "bundler", "moduleResolution": "bundler",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,
"jsx": "react-jsx", "jsx": "preserve",
"incremental": true, "incremental": true,
"plugins": [ "plugins": [
{ {