diff --git a/packages/payload/src/admin/RichText.ts b/packages/payload/src/admin/RichText.ts index 4e90f90cd7..2e76967bbb 100644 --- a/packages/payload/src/admin/RichText.ts +++ b/packages/payload/src/admin/RichText.ts @@ -1,19 +1,13 @@ -import type { GenericLanguages, I18n, I18nClient } from '@payloadcms/translations' +import type { GenericLanguages, I18n } from '@payloadcms/translations' import type { JSONSchema4 } from 'json-schema' -import type { ImportMap } from '../bin/generateImportMap/index.js' import type { SanitizedCollectionConfig, TypeWithID } from '../collections/config/types.js' import type { Config, PayloadComponent, SanitizedConfig } from '../config/types.js' import type { ValidationFieldError } from '../errors/ValidationError.js' -import type { - FieldAffectingData, - RichTextField, - RichTextFieldClient, - Validate, -} from '../fields/config/types.js' +import type { FieldAffectingData, RichTextField, Validate } from '../fields/config/types.js' import type { SanitizedGlobalConfig } from '../globals/config/types.js' import type { RequestContext } from '../index.js' -import type { JsonObject, Payload, PayloadRequest, PopulateType } from '../types/index.js' +import type { JsonObject, PayloadRequest, PopulateType } from '../types/index.js' import type { RichTextFieldClientProps } from './fields/RichText.js' import type { FieldSchemaMap } from './types.js' diff --git a/packages/payload/src/auth/baseFields/apiKey.ts b/packages/payload/src/auth/baseFields/apiKey.ts index 64082f0fb2..196f53441b 100644 --- a/packages/payload/src/auth/baseFields/apiKey.ts +++ b/packages/payload/src/auth/baseFields/apiKey.ts @@ -42,13 +42,13 @@ export const apiKeyFields = [ hooks: { beforeValidate: [ ({ data, req, value }) => { - if (data.apiKey === false || data.apiKey === null) { + if (data?.apiKey === false || data?.apiKey === null) { return null } - if (data.enableAPIKey === false || data.enableAPIKey === null) { + if (data?.enableAPIKey === false || data?.enableAPIKey === null) { return null } - if (data.apiKey) { + if (data?.apiKey) { return crypto .createHmac('sha1', req.payload.secret) .update(data.apiKey as string) diff --git a/packages/payload/src/auth/cookies.ts b/packages/payload/src/auth/cookies.ts index 67e69dfdb1..2276b7fb41 100644 --- a/packages/payload/src/auth/cookies.ts +++ b/packages/payload/src/auth/cookies.ts @@ -22,7 +22,7 @@ type CookieObject = { path?: string sameSite?: 'Lax' | 'None' | 'Strict' secure?: boolean - value: string + value: string | undefined } export const generateCookie = ( @@ -191,13 +191,13 @@ export const parseCookies = (headers: Request['headers']): Map = if (cookie) { cookie.split(';').forEach((cookie) => { const parts = cookie.split('=') - const key = parts.shift().trim() + const key = parts.shift()?.trim() const encodedValue = parts.join('=') try { const decodedValue = decodeURI(encodedValue) cookieMap.set(key, decodedValue) - } catch (e) { + } catch (ignore) { return null } }) diff --git a/packages/payload/src/auth/getAccessResults.ts b/packages/payload/src/auth/getAccessResults.ts index 32d0f5e357..830c0fe108 100644 --- a/packages/payload/src/auth/getAccessResults.ts +++ b/packages/payload/src/auth/getAccessResults.ts @@ -19,7 +19,7 @@ export async function getAccessResults({ ? payload.config.collections.find((collection) => collection.slug === user.collection) : null - if (userCollectionConfig && payload.config.admin.user === user.collection) { + if (userCollectionConfig && payload.config.admin.user === user?.collection) { results.canAccessAdmin = userCollectionConfig.access.admin ? await userCollectionConfig.access.admin({ req }) : isLoggedIn diff --git a/packages/payload/src/auth/getAuthFields.ts b/packages/payload/src/auth/getAuthFields.ts index be8bf085b2..702d12193a 100644 --- a/packages/payload/src/auth/getAuthFields.ts +++ b/packages/payload/src/auth/getAuthFields.ts @@ -42,7 +42,7 @@ export const getBaseAuthFields = (authConfig: IncomingAuthType): Field[] => { authFields.push(...verificationFields) } - if (authConfig.maxLoginAttempts > 0) { + if (authConfig?.maxLoginAttempts && authConfig.maxLoginAttempts > 0) { authFields.push(...accountLockFields) } } diff --git a/packages/payload/src/auth/getFieldsToSign.ts b/packages/payload/src/auth/getFieldsToSign.ts index 1cbef07344..4c8d269c73 100644 --- a/packages/payload/src/auth/getFieldsToSign.ts +++ b/packages/payload/src/auth/getFieldsToSign.ts @@ -109,7 +109,7 @@ export const getFieldsToSign = (args: { const { collectionConfig, email, user } = args const result: Record = { - id: user.id, + id: user?.id, collection: collectionConfig.slug, email, } diff --git a/packages/payload/src/auth/operations/forgotPassword.ts b/packages/payload/src/auth/operations/forgotPassword.ts index 9368907d6c..8b6d1b4792 100644 --- a/packages/payload/src/auth/operations/forgotPassword.ts +++ b/packages/payload/src/auth/operations/forgotPassword.ts @@ -153,7 +153,7 @@ export const forgotPasswordOperation = async ( ${serverURL}${config.routes.admin}${config.admin.routes.reset}/${token} ${req.t('authentication:youDidNotRequestPassword')}` - if (typeof collectionConfig.auth.forgotPassword.generateEmailHTML === 'function') { + if (typeof collectionConfig.auth.forgotPassword?.generateEmailHTML === 'function') { html = await collectionConfig.auth.forgotPassword.generateEmailHTML({ req, token, @@ -163,7 +163,7 @@ export const forgotPasswordOperation = async ( let subject = req.t('authentication:resetYourPassword') - if (typeof collectionConfig.auth.forgotPassword.generateEmailSubject === 'function') { + if (typeof collectionConfig.auth.forgotPassword?.generateEmailSubject === 'function') { subject = await collectionConfig.auth.forgotPassword.generateEmailSubject({ req, token, diff --git a/packages/payload/src/auth/operations/local/forgotPassword.ts b/packages/payload/src/auth/operations/local/forgotPassword.ts index 1bf5cb55db..bfe7a77448 100644 --- a/packages/payload/src/auth/operations/local/forgotPassword.ts +++ b/packages/payload/src/auth/operations/local/forgotPassword.ts @@ -42,4 +42,4 @@ async function localForgotPassword( }) } -export default localForgotPassword +export const forgotPassword = localForgotPassword diff --git a/packages/payload/src/auth/operations/local/index.ts b/packages/payload/src/auth/operations/local/index.ts index 3268bd641b..7b25f2afdf 100644 --- a/packages/payload/src/auth/operations/local/index.ts +++ b/packages/payload/src/auth/operations/local/index.ts @@ -1,15 +1,8 @@ import { auth } from './auth.js' -import forgotPassword from './forgotPassword.js' -import login from './login.js' -import resetPassword from './resetPassword.js' -import unlock from './unlock.js' -import verifyEmail from './verifyEmail.js' +import { forgotPassword } from './forgotPassword.js' +import { login } from './login.js' +import { resetPassword } from './resetPassword.js' +import { unlock } from './unlock.js' +import { verifyEmail } from './verifyEmail.js' -export default { - auth, - forgotPassword, - login, - resetPassword, - unlock, - verifyEmail, -} +export { auth, forgotPassword, login, resetPassword, unlock, verifyEmail } diff --git a/packages/payload/src/auth/operations/local/login.ts b/packages/payload/src/auth/operations/local/login.ts index 5192dfaadc..c3dd186d89 100644 --- a/packages/payload/src/auth/operations/local/login.ts +++ b/packages/payload/src/auth/operations/local/login.ts @@ -24,7 +24,7 @@ export type Options = { showHiddenFields?: boolean } -async function localLogin( +export async function localLogin( payload: Payload, options: Options, ): Promise<{ user: DataFromCollectionSlug } & Result> { @@ -62,4 +62,4 @@ async function localLogin( return result } -export default localLogin +export const login = localLogin diff --git a/packages/payload/src/auth/operations/local/resetPassword.ts b/packages/payload/src/auth/operations/local/resetPassword.ts index 9b624c1581..ec46188b06 100644 --- a/packages/payload/src/auth/operations/local/resetPassword.ts +++ b/packages/payload/src/auth/operations/local/resetPassword.ts @@ -47,4 +47,4 @@ async function localResetPassword( return result } -export default localResetPassword +export const resetPassword = localResetPassword diff --git a/packages/payload/src/auth/operations/local/unlock.ts b/packages/payload/src/auth/operations/local/unlock.ts index bfa3189fc2..9776c20328 100644 --- a/packages/payload/src/auth/operations/local/unlock.ts +++ b/packages/payload/src/auth/operations/local/unlock.ts @@ -40,4 +40,4 @@ async function localUnlock( }) } -export default localUnlock +export const unlock = localUnlock diff --git a/packages/payload/src/auth/operations/local/verifyEmail.ts b/packages/payload/src/auth/operations/local/verifyEmail.ts index 9b8f12b6d5..c12bae6fa8 100644 --- a/packages/payload/src/auth/operations/local/verifyEmail.ts +++ b/packages/payload/src/auth/operations/local/verifyEmail.ts @@ -33,4 +33,4 @@ async function localVerifyEmail( }) } -export default localVerifyEmail +export const verifyEmail = localVerifyEmail diff --git a/packages/payload/src/auth/strategies/jwt.ts b/packages/payload/src/auth/strategies/jwt.ts index 00f4cbc10d..b218374d6c 100644 --- a/packages/payload/src/auth/strategies/jwt.ts +++ b/packages/payload/src/auth/strategies/jwt.ts @@ -34,13 +34,13 @@ async function autoLogin({ or: [], } if (payload.config.admin?.autoLogin.email) { - where.or.push({ + where.or?.push({ email: { equals: payload.config.admin?.autoLogin.email, }, }) } else if (payload.config.admin?.autoLogin.username) { - where.or.push({ + where.or?.push({ username: { equals: payload.config.admin?.autoLogin.username, }, @@ -103,7 +103,7 @@ export const JWTAuthentication: AuthStrategyFunction = async ({ } return { user: null } } - } catch (error) { + } catch (ignore) { if (headers.get('DisableAutologin') !== 'true') { return await autoLogin({ isGraphQL, payload }) } diff --git a/packages/payload/src/auth/strategies/local/register.ts b/packages/payload/src/auth/strategies/local/register.ts index 6b060c7313..fede389d3e 100644 --- a/packages/payload/src/auth/strategies/local/register.ts +++ b/packages/payload/src/auth/strategies/local/register.ts @@ -38,7 +38,7 @@ export const registerLocalStrategy = async ({ } if (doc.email) { - whereConstraint.or.push({ + whereConstraint.or?.push({ email: { equals: doc.email, }, @@ -46,7 +46,7 @@ export const registerLocalStrategy = async ({ } if (doc.username) { - whereConstraint.or.push({ + whereConstraint.or?.push({ username: { equals: doc.username, }, diff --git a/packages/payload/src/collections/config/sanitize.ts b/packages/payload/src/collections/config/sanitize.ts index 2ad6fe00dc..7a5c249c69 100644 --- a/packages/payload/src/collections/config/sanitize.ts +++ b/packages/payload/src/collections/config/sanitize.ts @@ -36,7 +36,7 @@ export const sanitizeCollection = async ( // Sanitize fields // ///////////////////////////////// - const validRelationships = config.collections.reduce( + const validRelationships = (config.collections || []).reduce( (acc, c) => { acc.push(c.slug) return acc @@ -57,8 +57,8 @@ export const sanitizeCollection = async ( if (sanitized.timestamps !== false) { // add default timestamps fields only as needed - let hasUpdatedAt = null - let hasCreatedAt = null + let hasUpdatedAt: boolean | null = null + let hasCreatedAt: boolean | null = null sanitized.fields.some((field) => { if (fieldAffectsData(field)) { if (field.name === 'updatedAt') { @@ -144,7 +144,7 @@ export const sanitizeCollection = async ( sanitized.upload.bulkUpload = sanitized.upload?.bulkUpload ?? true sanitized.upload.staticDir = sanitized.upload.staticDir || sanitized.slug sanitized.admin.useAsTitle = - sanitized.admin.useAsTitle && sanitized.admin.useAsTitle !== 'id' + sanitized.admin?.useAsTitle && sanitized.admin.useAsTitle !== 'id' ? sanitized.admin.useAsTitle : 'filename' diff --git a/packages/payload/src/collections/config/useAsTitle.ts b/packages/payload/src/collections/config/useAsTitle.ts index b25ffc8a84..a57aa32e17 100644 --- a/packages/payload/src/collections/config/useAsTitle.ts +++ b/packages/payload/src/collections/config/useAsTitle.ts @@ -8,7 +8,7 @@ import flattenFields from '../../utilities/flattenTopLevelFields.js' * Validate useAsTitle for collections. */ export const validateUseAsTitle = (config: CollectionConfig) => { - if (config.admin.useAsTitle.includes('.')) { + if (config.admin?.useAsTitle?.includes('.')) { throw new InvalidConfiguration( `"useAsTitle" cannot be a nested field. Please specify a top-level field in the collection "${config.slug}"`, ) diff --git a/packages/payload/src/collections/operations/local/index.ts b/packages/payload/src/collections/operations/local/index.ts index 2ed3258a80..bcb6e909be 100644 --- a/packages/payload/src/collections/operations/local/index.ts +++ b/packages/payload/src/collections/operations/local/index.ts @@ -1,5 +1,5 @@ /* eslint-disable no-restricted-exports */ -import auth from '../../../auth/operations/local/index.js' +import * as auth from '../../../auth/operations/local/index.js' import count from './count.js' import countVersions from './countVersions.js' import create from './create.js' diff --git a/packages/payload/src/versions/saveVersion.ts b/packages/payload/src/versions/saveVersion.ts index 5da82dc102..6e9273ad28 100644 --- a/packages/payload/src/versions/saveVersion.ts +++ b/packages/payload/src/versions/saveVersion.ts @@ -167,16 +167,15 @@ export const saveVersion = async ({ } } } catch (err) { - let errorMessage: string + let errorMessage: string | undefined if (collection) { - errorMessage = `There was an error while saving a version for the ${collection.labels.singular} with ID ${id}.` + errorMessage = `There was an error while saving a version for the ${typeof collection.labels.singular === 'string' ? collection.labels.singular : collection.slug} with ID ${id}.` } if (global) { - errorMessage = `There was an error while saving a version for the global ${global.label}.` + errorMessage = `There was an error while saving a version for the global ${typeof global.label === 'string' ? global.label : global.slug}.` } - payload.logger.error(errorMessage) - payload.logger.error(err) + payload.logger.error({ err, msg: errorMessage }) return }