Refactor email types for enhanced consistency and type safety

- Replace `EmailTemplate` with `BaseEmailTemplate` for stricter type validation.
- Update `sendEmail` and `sendEmailTask` to utilize refined `BaseEmail` structure.
- Simplify type definitions in `MailingService` and related modules.
This commit is contained in:
2025-09-13 23:00:41 +02:00
parent e91ab7e54e
commit 9520ec5ed1
4 changed files with 18 additions and 28 deletions

View File

@@ -1,6 +1,6 @@
import { Payload } from 'payload'
import { getMailing, renderTemplate, parseAndValidateEmails } from './utils/helpers.js'
import {Email} from "./payload-types.js"
import {Email, EmailTemplate} from "./payload-types.js"
import {BaseEmail} from "./types/index.js"
// Options for sending emails
@@ -36,14 +36,14 @@ export interface SendEmailOptions<T extends BaseEmail = BaseEmail> {
* })
* ```
*/
export const sendEmail = async <T extends BaseEmail = BaseEmail, ID = string | number>(
export const sendEmail = async <TEmail extends Email = Email, TEmailTemplate extends EmailTemplate = EmailTemplate>(
payload: Payload,
options: SendEmailOptions<T>
): Promise<T & {id: ID}> => {
options: SendEmailOptions<BaseEmail<TEmail, TEmailTemplate>>
): Promise<TEmail> => {
const mailing = getMailing(payload)
const collectionSlug = options.collectionSlug || mailing.collections.emails || 'emails'
let emailData: Partial<T> = { ...options.data } as Partial<T>
let emailData: Partial<TEmail> = { ...options.data } as Partial<TEmail>
// If using a template, render it first
if (options.template) {
@@ -59,7 +59,7 @@ export const sendEmail = async <T extends BaseEmail = BaseEmail, ID = string | n
subject,
html,
text,
} as Partial<T>
} as Partial<TEmail>
}
// Validate required fields
@@ -97,7 +97,7 @@ export const sendEmail = async <T extends BaseEmail = BaseEmail, ID = string | n
data: emailData
})
return email as T & {id: ID}
return email as TEmail
}
export default sendEmail