From 8809db6aff26ea0335cb5c633c9038d7eb9b8efc Mon Sep 17 00:00:00 2001 From: Bas van den Aakster Date: Sat, 13 Sep 2025 23:27:53 +0200 Subject: [PATCH] Add null value support to BaseEmailDocument interface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update BaseEmailDocument to support `| null` for optional fields (cc, bcc, from, replyTo, text, etc.) - Update BaseEmailTemplateDocument to support `| null` for optional fields - Add explicit null checks in sendEmail processing to handle null values properly - Update CUSTOM-TYPES.md documentation to reflect null value compatibility Fixes type constraint error where customer Email types had `cc?: string[] | null` but BaseEmailDocument only supported `cc?: string[]`. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- CUSTOM-TYPES.md | 44 +++++++++++++++++++++++--------------------- src/sendEmail.ts | 4 ++-- src/types/index.ts | 38 +++++++++++++++++++------------------- 3 files changed, 44 insertions(+), 42 deletions(-) diff --git a/CUSTOM-TYPES.md b/CUSTOM-TYPES.md index 7595440..5dafa06 100644 --- a/CUSTOM-TYPES.md +++ b/CUSTOM-TYPES.md @@ -38,13 +38,15 @@ const customEmail = await sendEmail(payload, { }) ``` -## ID Type Compatibility +## Compatibility -The plugin works with both: +The plugin works with: - **String IDs**: `id: string` - **Number IDs**: `id: number` +- **Nullable fields**: Fields can be `null`, `undefined`, or have values +- **Generated types**: Works with `payload generate:types` output -Your Payload configuration determines which type is used. The plugin automatically adapts to your setup. +Your Payload configuration determines which types are used. The plugin automatically adapts to your setup. ## Type Definitions @@ -55,33 +57,33 @@ interface BaseEmailDocument { id: string | number template?: any to: string[] - cc?: string[] - bcc?: string[] - from?: string - replyTo?: string + cc?: string[] | null + bcc?: string[] | null + from?: string | null + replyTo?: string | null subject: string html: string - text?: string - variables?: Record - scheduledAt?: string - sentAt?: string - status?: 'pending' | 'processing' | 'sent' | 'failed' - attempts?: number - lastAttemptAt?: string - error?: string - priority?: number - createdAt?: string - updatedAt?: string + text?: string | null + variables?: Record | null + scheduledAt?: string | null + sentAt?: string | null + status?: 'pending' | 'processing' | 'sent' | 'failed' | null + attempts?: number | null + lastAttemptAt?: string | null + error?: string | null + priority?: number | null + createdAt?: string | null + updatedAt?: string | null } interface BaseEmailTemplateDocument { id: string | number name: string slug: string - subject?: string + subject?: string | null content?: any - createdAt?: string - updatedAt?: string + createdAt?: string | null + updatedAt?: string | null } ``` diff --git a/src/sendEmail.ts b/src/sendEmail.ts index 63452b4..9a8136c 100644 --- a/src/sendEmail.ts +++ b/src/sendEmail.ts @@ -83,10 +83,10 @@ export const sendEmail = async - scheduledAt?: string - sentAt?: string - status?: 'pending' | 'processing' | 'sent' | 'failed' - attempts?: number - lastAttemptAt?: string - error?: string - priority?: number - createdAt?: string - updatedAt?: string + text?: string | null + variables?: Record | null + scheduledAt?: string | null + sentAt?: string | null + status?: 'pending' | 'processing' | 'sent' | 'failed' | null + attempts?: number | null + lastAttemptAt?: string | null + error?: string | null + priority?: number | null + createdAt?: string | null + updatedAt?: string | null } export interface BaseEmailTemplateDocument { id: string | number name: string slug: string - subject?: string + subject?: string | null content?: any - createdAt?: string - updatedAt?: string + createdAt?: string | null + updatedAt?: string | null } export type BaseEmail = Omit & {template: Omit | TEmailTemplate['id'] | undefined | null}