Neah/DEPRECATED_FUNCTIONS.md
2025-04-26 20:44:11 +02:00

6.4 KiB

Deprecated Functions and Files

This document lists functions and files that have been deprecated and should not be used in new code.

Deprecated Files

1. lib/email-formatter.ts (REMOVED)

  • Status: Removed
  • Replacement: Use lib/utils/email-formatter.ts instead
  • Reason: Consolidated email formatting to a single source of truth

2. lib/mail-parser-wrapper.ts (REMOVED)

  • Status: Removed
  • Replacement: Use functions from lib/utils/email-formatter.ts instead
  • Reason: Consolidated email formatting and sanitization to a single source of truth

3. lib/email-parser.ts (REMOVED)

  • Status: Removed
  • Replacement: Use lib/server/email-parser.ts for parsing and lib/utils/email-formatter.ts for sanitization
  • Reason: Consolidated email parsing and formatting to dedicated files

4. lib/compose-mime-decoder.ts (REMOVED)

  • Status: Removed
  • Replacement: Use decodeComposeContent and encodeComposeContent functions from lib/utils/email-formatter.ts
  • Reason: Consolidated MIME handling into the centralized formatter

Deprecated Functions

1. formatEmailForReplyOrForward in lib/services/email-service.ts (REMOVED)

  • Status: Removed
  • Replacement: Use formatEmailForReplyOrForward from lib/utils/email-formatter.ts
  • Reason: Consolidated email formatting to a single source of truth

2. formatSubject in lib/services/email-service.ts (REMOVED)

  • Status: Removed
  • Replacement: None specific, handled by centralized formatter
  • Reason: Internal function of the email formatter

3. createQuoteHeader in lib/services/email-service.ts (REMOVED)

  • Status: Removed
  • Replacement: None specific, handled by centralized formatter
  • Reason: Internal function of the email formatter

Centralized Email Formatting

All email formatting is now handled by the centralized formatter in lib/utils/email-formatter.ts. This file contains:

  1. formatForwardedEmail: Format emails for forwarding
  2. formatReplyEmail: Format emails for replying or replying to all
  3. formatEmailForReplyOrForward: Compatibility function that maps to the above two
  4. sanitizeHtml: Safely sanitize HTML content while preserving direction attributes

Use these functions for all email formatting needs.

Email Parsing and Processing Functions

1. splitEmailHeadersAndBody (REMOVED)

  • Location: Removed
  • Reason: Email parsing has been centralized in lib/server/email-parser.ts and the API endpoint.
  • Replacement: Use the parseEmail function from lib/server/email-parser.ts which provides a comprehensive parsing solution.

2. getReplyBody

  • Location: app/courrier/page.tsx
  • Reason: Should use the ReplyContent component directly.
  • Replacement: Use <ReplyContent email={email} type={type} /> directly.
  • Status: Currently marked with @deprecated comment, no direct usages found.

3. generateEmailPreview

  • Location: app/courrier/page.tsx
  • Reason: Should use the EmailPreview component directly.
  • Replacement: Use <EmailPreview email={email} /> directly.
  • Status: Currently marked with @deprecated comment, no usages found.

4. cleanHtml (REMOVED)

  • Location: Removed from lib/server/email-parser.ts
  • Reason: HTML sanitization has been consolidated in lib/utils/email-formatter.ts.
  • Replacement: Use sanitizeHtml from lib/utils/email-formatter.ts.

5. processHtml (REMOVED)

  • Location: Removed from app/api/parse-email/route.ts
  • Reason: HTML processing has been consolidated in lib/utils/email-formatter.ts.
  • Replacement: Use sanitizeHtml from lib/utils/email-formatter.ts.

Deprecated API Routes

1. app/api/mail/[id]/route.ts

  • Status: Deleted
  • Replacement: Use app/api/courrier/[id]/route.ts instead.

2. app/api/mail/route.ts

  • Status: Deleted
  • Replacement: Use app/api/courrier/route.ts instead.

3. app/api/mail/send/route.ts

  • Status: Deleted
  • Replacement: Use app/api/courrier/send/route.ts instead.

Deprecated Components

ComposeEmail (components/ComposeEmail.tsx)

Status: Deprecated since November 2023
Replacement: Use components/email/ComposeEmail.tsx instead

This component has been deprecated in favor of the more modular and better structured version in the email directory. The newer version has the following improvements:

  • Better separation between user message and quoted content in replies/forwards
  • Improved styling and visual hierarchy
  • Support for RTL/LTR text direction toggling
  • More modern UI using Card components instead of a modal
  • Better state management for email composition

A compatibility layer has been added to the new component to ensure backward compatibility with existing code that uses the old component. This allows for a smooth transition without breaking changes.

Migration Plan:

  1. Update imports in files using the old component to import from @/components/email/ComposeEmail
  2. Test to ensure functionality works with the new component
  3. Delete the old component file once all usages have been migrated

Migration Plan

Phase 1: Deprecation (Completed)

  • Mark all deprecated functions with @deprecated comments
  • Add console warnings to deprecated functions
  • Document alternatives

Phase 2: Removal (Completed)

  • Remove deprecated files: lib/email-parser.ts and lib/mail-parser-wrapper.ts
  • Consolidate all email formatting in lib/utils/email-formatter.ts
  • All email parsing now in lib/server/email-parser.ts
  • Update documentation to point to the centralized utilities

Server-Client Code Separation

Server-side imports in client components

  • Status: Fixed in November 2023
  • Issue: Server-only modules like ImapFlow were being imported directly in client components, causing build errors with messages like "Module not found: Can't resolve 'tls'"
  • Fix:
    1. Added 'use server' directive to server-only modules
    2. Created client-safe interfaces in client components
    3. Added server actions for email operations that need server capabilities
    4. Refactored ComposeEmail component to avoid direct server imports

This architecture ensures a clean separation between server and client code, which is essential for Next.js applications, particularly with the App Router. It prevents Node.js-specific modules from being bundled into client-side JavaScript.