-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Use default export for email templates #2492
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
WalkthroughThis update standardizes the export style of React components in email template files from named exports to default exports. Correspondingly, all import statements throughout the codebase are updated to use default imports for these components. No functional, logic, or control flow changes are introduced, except for a minor formatting tweak in a logging statement and a concise function signature update. Changes
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (8)
✅ Files skipped from review due to trivial changes (1)
🚧 Files skipped from review as they are similar to previous changes (7)
⏰ Context from checks skipped due to timeout of 90000ms (1)
✨ Finishing Touches
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (4)
packages/email/src/templates/reset-password-link.tsx (1)
17-17
: Standardize to default export
Default-exportingResetPasswordLink
aligns with the new convention.packages/email/src/templates/api-key-created.tsx (1)
17-17
: Standardize to default export
Default-exportingAPIKeyCreated
aligns with the new convention.packages/email/src/templates/partner-banned.tsx (1)
17-17
: Standardize to default export
Default-exportingPartnerBanned
aligns with the new convention.packages/email/src/templates/workspace-invite.tsx (1)
17-17
: Standardize to default export
Default-exportingWorkspaceInvite
aligns with the new convention.
🧹 Nitpick comments (2)
packages/email/src/templates/invalid-domain.tsx (1)
17-27
: LGTM! Export style change is consistent.The conversion to default export is correct and maintains the explicit return type annotation.
Consider adding explicit
JSX.Element
return type annotations to the other email template components for consistency:-export default function EmailUpdated({ +export default function EmailUpdated({ oldEmail = "panic@thedis.co", newEmail = "panic@thedis.co", }: { oldEmail: string; newEmail: string; -}) { +}): JSX.Element {This would maintain consistency with the
InvalidDomain
component's typing approach.apps/web/lib/stripe/index.ts (1)
12-12
: Consider adding an explicit return type
ThestripeAppClient
function currently infers its return type. To improve clarity and guard against future API changes, consider annotating it explicitly as: Stripe
.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (74)
apps/web/app/(ee)/api/cron/domains/transfer/utils.ts
(1 hunks)apps/web/app/(ee)/api/cron/domains/verify/utils.ts
(1 hunks)apps/web/app/(ee)/api/cron/import/bitly/utils.ts
(1 hunks)apps/web/app/(ee)/api/cron/import/csv/utils.ts
(1 hunks)apps/web/app/(ee)/api/cron/import/rebrandly/utils.ts
(1 hunks)apps/web/app/(ee)/api/cron/import/short/utils.ts
(1 hunks)apps/web/app/(ee)/api/cron/usage/utils.ts
(1 hunks)apps/web/app/(ee)/api/cron/welcome-user/route.ts
(1 hunks)apps/web/app/(ee)/api/cron/year-in-review/route.ts
(1 hunks)apps/web/app/(ee)/api/paypal/webhook/verify-signature.ts
(1 hunks)apps/web/app/(ee)/api/stripe/webhook/checkout-session-completed.ts
(1 hunks)apps/web/app/(ee)/api/stripe/webhook/invoice-payment-failed.tsx
(1 hunks)apps/web/app/api/auth/reset-password/route.ts
(1 hunks)apps/web/app/api/dub/webhook/lead-created.ts
(1 hunks)apps/web/app/api/tokens/route.ts
(1 hunks)apps/web/app/api/user/password/route.ts
(1 hunks)apps/web/app/api/user/set-password/route.ts
(1 hunks)apps/web/app/api/webhooks/route.ts
(1 hunks)apps/web/app/app.dub.co/(auth)/auth/confirm-email-change/[token]/page.tsx
(1 hunks)apps/web/lib/actions/folders/request-folder-edit-access.ts
(1 hunks)apps/web/lib/actions/partners/approve-partner.ts
(1 hunks)apps/web/lib/actions/partners/ban-partner.ts
(1 hunks)apps/web/lib/actions/partners/create-program.ts
(1 hunks)apps/web/lib/actions/partners/invite-partner.ts
(1 hunks)apps/web/lib/actions/partners/resend-program-invite.ts
(1 hunks)apps/web/lib/actions/request-password-reset.ts
(1 hunks)apps/web/lib/actions/send-invite-referral-email.ts
(1 hunks)apps/web/lib/actions/send-otp.ts
(1 hunks)apps/web/lib/api/domains/claim-dot-link-domain.ts
(1 hunks)apps/web/lib/api/partners/notify-partner-application.ts
(1 hunks)apps/web/lib/api/users.ts
(1 hunks)apps/web/lib/auth/options.ts
(1 hunks)apps/web/lib/cron/send-limit-email.ts
(1 hunks)apps/web/lib/integrations/install.ts
(1 hunks)apps/web/lib/rewardful/import-commissions.ts
(1 hunks)apps/web/lib/stripe/index.ts
(1 hunks)apps/web/scripts/send-emails.tsx
(1 hunks)apps/web/ui/analytics/feedback/action.ts
(1 hunks)packages/email/src/templates/api-key-created.tsx
(1 hunks)packages/email/src/templates/campaign-imported.tsx
(1 hunks)packages/email/src/templates/clicks-exceeded.tsx
(1 hunks)packages/email/src/templates/clicks-summary.tsx
(1 hunks)packages/email/src/templates/confirm-email-change.tsx
(1 hunks)packages/email/src/templates/domain-claimed.tsx
(1 hunks)packages/email/src/templates/domain-deleted.tsx
(1 hunks)packages/email/src/templates/domain-transferred.tsx
(1 hunks)packages/email/src/templates/dub-wrapped.tsx
(1 hunks)packages/email/src/templates/email-updated.tsx
(1 hunks)packages/email/src/templates/failed-payment.tsx
(1 hunks)packages/email/src/templates/feedback-email.tsx
(1 hunks)packages/email/src/templates/folder-edit-access-requested.tsx
(1 hunks)packages/email/src/templates/integration-installed.tsx
(1 hunks)packages/email/src/templates/invalid-domain.tsx
(1 hunks)packages/email/src/templates/links-import-errors.tsx
(1 hunks)packages/email/src/templates/links-imported.tsx
(1 hunks)packages/email/src/templates/links-limit.tsx
(1 hunks)packages/email/src/templates/login-link.tsx
(1 hunks)packages/email/src/templates/new-referral-signup.tsx
(1 hunks)packages/email/src/templates/new-sale-alert-partner.tsx
(1 hunks)packages/email/src/templates/new-sale-alert-program-owner.tsx
(1 hunks)packages/email/src/templates/partner-application-approved.tsx
(1 hunks)packages/email/src/templates/partner-application-received.tsx
(1 hunks)packages/email/src/templates/partner-banned.tsx
(1 hunks)packages/email/src/templates/partner-invite.tsx
(1 hunks)packages/email/src/templates/partner-payout-sent.tsx
(1 hunks)packages/email/src/templates/password-updated.tsx
(1 hunks)packages/email/src/templates/referral-invite.tsx
(1 hunks)packages/email/src/templates/reset-password-link.tsx
(1 hunks)packages/email/src/templates/upgrade-email.tsx
(1 hunks)packages/email/src/templates/verify-email.tsx
(1 hunks)packages/email/src/templates/webhook-added.tsx
(1 hunks)packages/email/src/templates/welcome-email.tsx
(1 hunks)packages/email/src/templates/workspace-invite.tsx
(1 hunks)packages/ui/src/icons/nucleo/plus2.tsx
(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: build
🔇 Additional comments (69)
packages/email/src/templates/new-referral-signup.tsx (1)
19-19
: Default export consolidation is correct.Switching to a single default export on the function reduces boilerplate and aligns with the project’s export conventions. No functional changes detected.
packages/ui/src/icons/nucleo/plus2.tsx (1)
20-20
: Formatting-only change (removed trailing whitespace and added newline); no review needed.packages/email/src/templates/email-updated.tsx (1)
17-17
:✅ Verification successful
LGTM! Export style change is consistent.
The conversion from named export to default export is syntactically correct and aligns with the standardization objective.
Verify that all import statements for this component have been updated throughout the codebase:
🏁 Script executed:
#!/bin/bash # Description: Verify all imports of EmailUpdated have been updated to default imports # Expected: No occurrences of named imports like { EmailUpdated } echo "Checking for any remaining named imports of EmailUpdated..." rg -n "import.*\{.*EmailUpdated.*\}" --type tsx --type ts echo "Checking for correct default imports of EmailUpdated..." rg -n "import.*EmailUpdated.*from.*email-updated" --type tsx --type tsLength of output: 438
🏁 Script executed:
#!/bin/bash # Re-verify EmailUpdated imports using glob patterns instead of --type echo "Checking for any remaining named imports of EmailUpdated..." rg -n "import.*\{.*EmailUpdated.*\}" -g '*.ts' -g '*.tsx' echo echo "Checking for correct default imports of EmailUpdated..." rg -n "import.*EmailUpdated.*from.*email-updated" -g '*.ts' -g '*.tsx'Length of output: 529
LGTM — Default export conversion verified
- No remaining named imports of
EmailUpdated
found.- Confirmed default import in
apps/web/app/app.dub.co/(auth)/auth/confirm-email-change/[token]/page.tsx
.Approving the export change.
packages/email/src/templates/verify-email.tsx (1)
16-16
:✅ Verification successful
LGTM! Export style change is consistent.
The conversion from named export to default export follows the same pattern as other email templates.
Verify that all import statements for this component have been updated:
🏁 Script executed:
#!/bin/bash # Description: Verify all imports of VerifyEmail have been updated to default imports # Expected: No remaining named imports echo "Checking for any remaining named imports of VerifyEmail..." rg -n "import.*\{.*VerifyEmail.*\}" --type tsx --type ts echo "Checking for correct default imports of VerifyEmail..." rg -n "import.*VerifyEmail.*from.*verify-email" --type tsx --type tsLength of output: 431
I’ll re-run the import checks without relying on ripgrep’s built-in types:
This will catch any stray named imports and confirm all usages have been updated to default imports.
🏁 Script executed:
#!/bin/bash # Re-verify imports for VerifyEmail across .ts and .tsx files echo "Checking for any remaining named imports of VerifyEmail..." rg -n "import.*{.*VerifyEmail.*}" -g '*.ts' -g '*.tsx' echo "Checking for correct default imports of VerifyEmail..." rg -n "import VerifyEmail from.*verify-email" -g '*.ts' -g '*.tsx'Length of output: 584
I'll run a simpler, fixed-string search to catch any literal named imports and confirm default imports:
🏁 Script executed:
#!/bin/bash echo "Checking for any remaining named imports of VerifyEmail..." rg -nF 'import { VerifyEmail' -g '*.ts' -g '*.tsx' echo "Checking for correct default imports of VerifyEmail..." rg -nF 'import VerifyEmail from' -g '*.ts' -g '*.tsx'Length of output: 730
LGTM – all imports updated to default and no stray named imports remain.
The change from a named to default export for VerifyEmail is consistent with other email templates, and our searches confirm only default imports (import VerifyEmail from "@dub/email/templates/verify-email"
) exist across the codebase.packages/email/src/templates/partner-invite.tsx (1)
17-17
:✅ Verification successful
LGTM! Export style change is consistent.
The default export conversion maintains functionality while standardizing the export pattern.
Verify that all import statements for this component have been updated:
🏁 Script executed:
#!/bin/bash # Description: Verify all imports of PartnerInvite have been updated to default imports # Expected: No remaining named imports echo "Checking for any remaining named imports of PartnerInvite..." rg -n "import.*\{.*PartnerInvite.*\}" --type tsx --type ts echo "Checking for correct default imports of PartnerInvite..." rg -n "import.*PartnerInvite.*from.*partner-invite" --type tsx --type tsLength of output: 445
🏁 Script executed:
#!/bin/bash # Description: Re-verify that all imports of PartnerInvite use default imports echo "Checking for any remaining named imports of PartnerInvite..." rg -n "import.*\{.*PartnerInvite.*\}" -g '*.ts' -g '*.tsx' echo "Checking for correct default imports of PartnerInvite..." rg -n "import.*PartnerInvite.*from.*partner-invite" -g '*.ts' -g '*.tsx'Length of output: 743
✅ PartnerInvite default import verification successful
No named imports of
PartnerInvite
remain. Verified default imports in:
- apps/web/lib/actions/partners/create-program.ts (line 10)
- apps/web/lib/actions/partners/invite-partner.ts (line 10)
- apps/web/lib/actions/partners/resend-program-invite.ts (line 5)
All import statements have been updated correctly. Great work!
packages/email/src/templates/invalid-domain.tsx (1)
17-17
:✅ Verification successful
Verify comprehensive import updates across all changed email templates.
Run this comprehensive verification to ensure all import statements have been updated consistently:
🏁 Script executed:
#!/bin/bash # Description: Comprehensive verification of import updates for all email template components # Expected: No named imports remaining, all should be default imports echo "=== Checking for any remaining named imports of email templates ===" components=("EmailUpdated" "VerifyEmail" "PartnerInvite" "InvalidDomain") for component in "${components[@]}"; do echo "Checking $component..." named_imports=$(rg -n "import.*\{.*$component.*\}" --type tsx --type ts 2>/dev/null | wc -l) if [ "$named_imports" -gt 0 ]; then echo "❌ Found $named_imports named imports for $component:" rg -n "import.*\{.*$component.*\}" --type tsx --type ts else echo "✅ No named imports found for $component" fi done echo -e "\n=== Checking for correct default imports ===" for component in "${components[@]}"; do echo "Checking default imports for $component..." default_imports=$(rg -n "import $component from" --type tsx --type ts 2>/dev/null | wc -l) echo "Found $default_imports default imports for $component" doneLength of output: 2775
🏁 Script executed:
#!/bin/bash # Search for all import statements of the email template components across all file types components=("EmailUpdated" "VerifyEmail" "PartnerInvite" "InvalidDomain") echo "=== Scanning for import statements of email templates across the repository ===" for comp in "${components[@]}"; do echo echo ">>> Imports for ${comp}:" rg -n "import[[:space:]].*${comp}" --color never || echo "No import statements found for ${comp}" doneLength of output: 1898
All email template imports are correctly using default exports
A repository-wide search confirms:
- No named imports remain for EmailUpdated, VerifyEmail, PartnerInvite, or InvalidDomain.
- Each component is imported as a default export in the following files:
- EmailUpdated:
– apps/web/app/app.dub.co/(auth)/auth/confirm-email-change/[token]/page.tsx- VerifyEmail:
– apps/web/lib/actions/send-otp.ts
(VerifyEmailForm imports are unrelated UI components.)- PartnerInvite:
– apps/web/lib/actions/partners/invite-partner.ts
– apps/web/lib/actions/partners/create-program.ts
– apps/web/lib/actions/partners/resend-program-invite.ts- InvalidDomain:
– apps/web/app/(ee)/api/cron/domains/verify/utils.tsNo further import updates are needed.
apps/web/lib/api/partners/notify-partner-application.ts (1)
3-3
: Consistent default import for email template.Updated to a default import for
PartnerApplicationReceived
to match its new export. Usage at line 48 remains correct.apps/web/lib/integrations/install.ts (1)
2-2
: Consistent default import for email template.Switched to a default import for
IntegrationInstalled
aligning with its updated export. Invocation at line 85 is valid.apps/web/lib/actions/folders/request-folder-edit-access.ts (1)
4-4
: Consistent default import for email template.Changed to a default import for
FolderEditAccessRequested
to align with its new export style. The call at line 75 is correct.apps/web/lib/actions/send-invite-referral-email.ts (1)
4-4
: Consistent default import for email template.Updated
ReferralInvite
to a default import to match its export change. Usage at line 39 remains correct.apps/web/lib/actions/send-otp.ts (1)
5-5
: Consistent default import for email template.Switched
VerifyEmail
to a default import in line with its updated export. Invocation at line 105 is valid.apps/web/app/(ee)/api/cron/import/rebrandly/utils.ts (1)
7-7
: Default import for LinksImported
Switching from a named to a default import here aligns perfectly with the updated export in the email template.apps/web/app/(ee)/api/stripe/webhook/checkout-session-completed.ts (1)
9-9
: Default import for UpgradeEmail
The change from a named to a default import matches the refactored template export. No issues found.apps/web/app/(ee)/api/cron/welcome-user/route.ts (1)
5-5
: Default import for WelcomeEmail
Updating to a default import is consistent with the template changes and requires no further adjustments.apps/web/lib/auth/options.ts (1)
7-7
: Default import for LoginLink
Converting to a default import here aligns with the template refactor. Everything looks correct.apps/web/lib/actions/partners/resend-program-invite.ts (1)
5-5
: Default import for PartnerInvite
This import update follows the new default export pattern in the email templates. No changes needed.apps/web/app/(ee)/api/cron/usage/utils.ts (1)
7-7
: Verify default import of ClicksSummary aligns with template export
Ensure that@dub/email/templates/clicks-summary
now exposesClicksSummary
as its default export and that there are no leftover named exports in the template file.apps/web/scripts/send-emails.tsx (1)
2-2
: Confirm default import for FailedPayment template
Make sure@dub/email/templates/failed-payment
is updated to use a default export forFailedPayment
and remove the prior named export.apps/web/app/api/user/set-password/route.ts (1)
5-5
: Ensure ResetPasswordLink is now a default export
Verify that@dub/email/templates/reset-password-link
has been converted to a default export forResetPasswordLink
and that any redundant named export has been removed.apps/web/app/api/user/password/route.ts (1)
7-7
: Validate default export of PasswordUpdated template
Confirm thepassword-updated
template now exportsPasswordUpdated
as default and drop any previous named export.apps/web/app/api/auth/reset-password/route.ts (1)
6-6
: Check default import for PasswordUpdated in reset-password route
Ensure the@dub/email/templates/password-updated
module providesPasswordUpdated
as its default export, aligning with the updated template file.apps/web/lib/api/users.ts (1)
4-4
:✅ Verification successful
Verify that the email template source file uses default export.
The import change from named to default import is correct. However, ensure that the
@dub/email/templates/workspace-invite
file has been updated to useexport default
instead of named export.
🏁 Script executed:
#!/bin/bash # Verify that WorkspaceInvite template uses default export rg -A 5 "export.*WorkspaceInvite" packages/email/src/templates/workspace-invite*Length of output: 432
Confirmed: WorkspaceInvite uses default export
The file
packages/email/src/templates/workspace-invite.tsx
definesexport default function WorkspaceInvite(…) { … }so importing it as a default is correct. Import change approved.
apps/web/app/(ee)/api/cron/import/csv/utils.ts (1)
2-3
:✅ Verification successful
Verify that the email template source files use default exports.
The import changes from named to default imports are correct. However, ensure that both
@dub/email/templates/links-import-errors
and@dub/email/templates/links-imported
files have been updated to useexport default
instead of named exports.
🏁 Script executed:
#!/bin/bash # Verify that both email templates use default exports echo "Checking LinksImportErrors template:" rg -A 5 "export.*LinksImportErrors" packages/email/src/templates/links-import-errors* echo "Checking LinksImported template:" rg -A 5 "export.*LinksImported" packages/email/src/templates/links-imported*Length of output: 575
Confirmed: Email templates use default exports
Both
links-import-errors.tsx
andlinks-imported.tsx
define their components as default exports, so the updated import statements are correct. Approving these changes.• packages/email/src/templates/links-import-errors.tsx –
export default function LinksImportErrors
• packages/email/src/templates/links-imported.tsx –export default function LinksImported
apps/web/lib/actions/partners/create-program.ts (1)
10-10
:✅ Verification successful
Verify that the email template source file uses default export.
The import change from named to default import is correct. However, ensure that the
@dub/email/templates/partner-invite
file has been updated to useexport default
instead of named export.
🏁 Script executed:
#!/bin/bash # Verify that PartnerInvite template uses default export rg -A 5 "export.*PartnerInvite" packages/email/src/templates/partner-invite*Length of output: 224
Confirmed default export for PartnerInvite
Verified that
packages/email/src/templates/partner-invite.tsx
declaresexport default function PartnerInvite
, so the switch from a named to default import is correct. Approving this change.apps/web/lib/actions/request-password-reset.ts (1)
5-5
:✅ Verification successful
Verify that the email template source file uses default export.
The import change from named to default import is correct. However, ensure that the
@dub/email/templates/reset-password-link
file has been updated to useexport default
instead of named export.
🏁 Script executed:
#!/bin/bash # Verify that ResetPasswordLink template uses default export rg -A 5 "export.*ResetPasswordLink" packages/email/src/templates/reset-password-link*Length of output: 318
Import change validated: ResetPasswordLink uses default export
The
packages/email/src/templates/reset-password-link.tsx
file exportsResetPasswordLink
as a default export, so updating the import inapps/web/lib/actions/request-password-reset.ts
is correct. Approving this change.apps/web/lib/cron/send-limit-email.ts (1)
2-3
: LGTM! Import standardization looks good.The conversion from named imports to default imports for email templates is clean and syntactically correct. The component usage remains unchanged, which is appropriate.
apps/web/app/(ee)/api/cron/import/bitly/utils.ts (1)
4-4
: LGTM! Consistent import standardization.The conversion to default import for
LinksImported
follows the same pattern as other files and is syntactically correct.apps/web/app/app.dub.co/(auth)/auth/confirm-email-change/[token]/page.tsx (1)
7-7
: LGTM! Import standardization maintained.The conversion to default import for
EmailUpdated
is consistent with the codebase-wide standardization effort.apps/web/app/(ee)/api/cron/year-in-review/route.ts (1)
4-4
: LGTM! Completes the import standardization.The conversion to default import for
DubWrapped
maintains consistency with the other email template imports across the codebase.apps/web/lib/actions/partners/approve-partner.ts (1)
14-14
: LGTM! Consistent import standardization.The change from named import to default import is correctly implemented and aligns with the PR objective to standardize email template exports.
apps/web/app/(ee)/api/cron/domains/transfer/utils.ts (1)
2-2
: LGTM! Consistent import standardization.The change from named import to default import is correctly implemented and aligns with the PR objective to standardize email template exports.
apps/web/app/api/webhooks/route.ts (1)
16-16
: LGTM! Consistent import standardization.The change from named import to default import is correctly implemented and aligns with the PR objective to standardize email template exports.
apps/web/app/api/dub/webhook/lead-created.ts (1)
2-2
: LGTM! Consistent import standardization.The change from named import to default import is correctly implemented and aligns with the PR objective to standardize email template exports.
apps/web/lib/actions/partners/invite-partner.ts (1)
10-10
: LGTM! Import change aligns with standardization objective.The change from named import to default import for
PartnerInvite
is consistent with the PR's goal to standardize email template exports. The usage at line 113 is correct for the new import style.apps/web/lib/rewardful/import-commissions.ts (1)
2-2
: LGTM! Import standardization looks good.The conversion from named import to default import for
CampaignImported
is consistent with the codebase-wide standardization effort. The component usage at line 90 is properly updated for the new import style.apps/web/app/(ee)/api/paypal/webhook/verify-signature.ts (1)
37-39
: LGTM! Improved formatting for better readability.The multi-line formatting of the console.error statement improves readability while maintaining the same functionality.
apps/web/app/api/tokens/route.ts (1)
10-10
:✅ Verification successful
LGTM! Import change follows the established pattern.
The change from named import to default import for
APIKeyCreated
aligns with the PR objective. The component is used correctly at line 172 with the new import style.Since this is a codebase-wide change, please verify that the corresponding email template files have been properly converted to default exports:
🏁 Script executed:
#!/bin/bash # Description: Verify that email templates use default exports # Expected: All template files should have default exports, not named exports # Check email template files for export patterns echo "Checking email template export patterns..." fd -e tsx -e ts . packages/email/src/templates/ --exec grep -l "export.*{.*}" {} \; 2>/dev/null || echo "No named exports found" echo -e "\nChecking for default exports..." fd -e tsx -e ts . packages/email/src/templates/ --exec grep -l "export default" {} \;Length of output: 2627
All email templates use default exports—LGTM!
- No named exports detected in packages/email/src/templates/
- Every template (including api-key-created.tsx) has a default export
packages/email/src/templates/feedback-email.tsx (1)
15-15
: LGTM! Export standardization looks good.The change from named export to default export is consistent with the PR objective to standardize email template exports across the codebase.
packages/email/src/templates/webhook-added.tsx (1)
17-17
: LGTM! Consistent export standardization.The conversion to default export is correctly implemented and aligns with the codebase-wide standardization effort.
packages/email/src/templates/partner-application-received.tsx (1)
17-17
: LGTM! Export style successfully standardized.The default export conversion is properly implemented and maintains consistency with the other email template refactors.
apps/web/app/(ee)/api/cron/domains/verify/utils.ts (1)
4-5
: LGTM! Import statements correctly updated to match default exports.The import changes properly reflect the export standardization in the email templates. The function calls at lines 135 and 202 will work correctly with the default imports.
packages/email/src/templates/integration-installed.tsx (1)
17-17
:✅ Verification successful
LGTM! Export standardization improves consistency.
The change from named export to default export aligns with the standardization effort across email templates.
Let me verify that all imports of this component have been updated throughout the codebase:
🏁 Script executed:
#!/bin/bash # Description: Verify all imports of IntegrationInstalled use default import syntax # Expected: All imports should use default import syntax, no named imports should remain echo "Searching for any remaining named imports of IntegrationInstalled..." rg "import.*\{.*IntegrationInstalled.*\}" --type ts --type tsx echo "Verifying correct default imports..." rg "import.*IntegrationInstalled.*from" --type ts --type tsx -A 1 echo "Checking for any other references..." rg "IntegrationInstalled" --type ts --type tsx -A 2 -B 1Length of output: 586
🏁 Script executed:
#!/usr/bin/env bash # Re-verify import patterns for IntegrationInstalled across the codebase echo "Searching for named imports of IntegrationInstalled..." rg "import\s*{\s*IntegrationInstalled\s*}\s*from" -g '*.ts' -g '*.tsx' || echo "→ No named imports found." echo "Searching for default imports of IntegrationInstalled..." rg "import\s+IntegrationInstalled\s+from" -g '*.ts' -g '*.tsx' || echo "→ No default imports found." echo "Listing all references to IntegrationInstalled..." rg "IntegrationInstalled" -g '*.ts' -g '*.tsx' -n -C2 || echo "→ No references found."Length of output: 2062
#!/usr/bin/env bash set -e echo "🔍 Searching for any remaining named imports of IntegrationInstalled..." rg "import { IntegrationInstalled } from" -g '*.ts' -g '*.tsx' -n || echo "→ ✅ No named imports found." echo echo "🔍 Verifying default imports of IntegrationInstalled..." rg "import IntegrationInstalled from" -g '*.ts' -g '*.tsx' -n || echo "→ ⚠️ No default imports found." echo echo "🔍 Checking for any brace-wrapped usages (potential named import remnants)..." rg "{\s*IntegrationInstalled\s*}" -g '*.ts' -g '*.tsx' -n || echo "→ ✅ No brace-wrapped usages found." echo echo "✅ Verification complete."
✅ All imports updated to default export
We’ve confirmed there are no remaining named imports of
IntegrationInstalled
and that it’s correctly imported as a default export (e.g. inapps/web/lib/integrations/install.ts
). No further changes needed.packages/email/src/templates/confirm-email-change.tsx (1)
17-17
: LGTM! Consistent export style applied.The default export standardization matches the pattern applied across other email templates.
packages/email/src/templates/password-updated.tsx (1)
16-16
: LGTM! Export consistency maintained.The change to default export is consistent with the standardization effort.
packages/email/src/templates/upgrade-email.tsx (1)
17-17
:✅ Verification successful
LGTM! Standardized export pattern applied.
The default export change maintains consistency with other email template components.
Let me verify the broad impact of these export changes across all email templates:
🏁 Script executed:
#!/bin/bash # Description: Verify that the export standardization is complete and consistent # Expected: All email templates should use default exports, all imports should be updated echo "Checking for any remaining named exports in email templates..." rg "^export function" packages/email/src/templates/ --type tsx echo "Verifying all templates now use default exports..." rg "^export default function" packages/email/src/templates/ --type tsx echo "Checking for any remaining named imports of email templates..." rg "import.*\{.*\}.*from.*@dub/emails" --type ts --type tsx echo "Sample of correct default imports..." rg "import.*from.*templates/" --type ts --type tsx | head -10Length of output: 839
🏁 Script executed:
#!/bin/bash # List all .ts and .tsx files in the email templates directory echo "Listing .ts/.tsx files in packages/email/src/templates/:" find packages/email/src/templates -type f \( -name '*.ts' -o -name '*.tsx' \) echo # Check for any remaining named exports echo "Checking for any remaining named exports in email templates..." rg '^export function ' packages/email/src/templates/ echo # Verify all templates now use default exports echo "Verifying all templates use default exports..." rg '^export default function ' packages/email/src/templates/ echo # Check for any named imports of templates via destructured imports echo "Checking for any remaining named imports of email templates from '@dub/emails'..." rg "import .*{.*}.*from.*@dub/emails" packages/email/src/templates/ echo # Sample of default imports from templates echo "Sample of correct default imports from templates directory:" rg "import .* from .*/src/templates/" packages/email/src/ | head -10Length of output: 7463
🏁 Script executed:
#!/bin/bash # 1. Determine the package name for email templates pkg_name=$(grep '"name":' packages/email/package.json | sed -E 's/.*"name":[[:space:]]*"([^"]+)".*/\1/') echo "Package name: $pkg_name" echo # 2. Look for any named imports from the package root echo "🔎 Checking for named imports from ${pkg_name}:" rg "import\s*\{\s*[^}]+\s*\}\s*from\s*['\"]${pkg_name}['\"]" -t ts -t tsx || echo "✔️ No named imports found" echo # 3. Look for any named imports directly from the templates folder (excluding the templates dir itself) echo "🔎 Checking for named imports from a 'templates' path outside the templates dir:" rg "import\s*\{\s*[^}]+\s*\}\s*from\s*['\"].*templates" -t ts -t tsx -g '!packages/email/src/templates/*' || echo "✔️ No named imports from templates paths" echo # 4. Sanity‐check: default imports of templates (should be allowed) echo "🔎 Sample default imports of templates (for reference):" rg "import\s+[^ {][^}]*\s+from\s+['\"].*templates" -t ts -t tsx -g '!packages/email/src/templates/*' | head -20 || echo "ℹ️ No imports of templates found outside their own directory"Length of output: 1143
Standardized default exports verified across all email templates
All
packages/email/src/templates/*.tsx
now useexport default function …
with no remaining named exports, and no destructured imports from@dub/email
or template paths were detected. Consistency confirmed—ready to merge.packages/email/src/templates/failed-payment.tsx (1)
18-18
:✅ Verification successful
Consolidate export to default correctly
TheFailedPayment
component now uses a single default export, aligning with the updated pattern. Ensure that all named import occurrences have been switched to default imports to prevent any unresolved module errors.Run:
🏁 Script executed:
#!/bin/bash # Search for leftover named imports of FailedPayment rg "import { *FailedPayment *}" -n .Length of output: 156
🏁 Script executed:
#!/bin/bash # Re-run search for any leftover named imports of FailedPayment using a corrected regex rg -n -e 'import.*\{[^}]*FailedPayment[^}]*\}' .Length of output: 50
No leftover named imports for
FailedPayment
A repository-wide search found no occurrences ofimport { FailedPayment }
; all import sites now use the default export.packages/email/src/templates/domain-deleted.tsx (1)
17-17
:✅ Verification successful
Switch to default export as intended
TheDomainDeleted
component is now exported by default and its redundant separate export was removed. Verify all import sites have been updated to use default imports.Run:
🏁 Script executed:
#!/bin/bash # Search for any remaining named imports of DomainDeleted rg "import { *DomainDeleted *}" -n .Length of output: 156
🏁 Script executed:
#!/bin/bash # Search for any remaining named imports of DomainDeleted rg -n "import \{[^}]*DomainDeleted[^}]*\}" .Length of output: 46
✅ Switch to default export as intended
TheDomainDeleted
component is now the default export, and all import sites have been updated—no named imports remain (verified viarg -n "import \{[^}]*DomainDeleted[^}]*\}"
).packages/email/src/templates/referral-invite.tsx (1)
17-17
:❓ Verification inconclusive
Use default export for ReferralInvite
The component is now a default export and aligns with the codebase convention. Confirm that all consuming modules import it as a default.
🏁 Script executed:
#!/bin/bash # Check for leftover named imports of ReferralInvite rg "import { *ReferralInvite *}" -n .Length of output: 158
Let’s correct the import‐pattern search and rerun:
🏁 Script executed:
#!/bin/bash # Look for any remaining named imports of ReferralInvite rg -E "import\s*{[^}]*ReferralInvite[^}]*}" -n .Length of output: 123
Let’s use ast-grep to reliably catch any named‐import occurrences:
🏁 Script executed:
#!/bin/bash # Search for imports like: import { ReferralInvite } from '…' ast-grep --pattern $'import { ReferralInvite } from $_' -n . # Catch ReferralInvite among other named imports: import { A, ReferralInvite, B } from '…' ast-grep --pattern $'import { $_, ReferralInvite, $$$ } from $_' -n .Length of output: 488
Let’s try a more robust ripgrep search—with PCRE and a POSIX fallback—to catch any named imports of ReferralInvite:
🏁 Script executed:
#!/bin/bash # 1) PCRE-based search for named imports rg -P "import\s*{[^}]*ReferralInvite[^}]*}" -n . || true # 2) Fallback to POSIX character classes if PCRE isn’t enabled rg -E "import[[:space:]]*{[^}]*ReferralInvite[^}]*}" -n . || trueLength of output: 206
Confirm default imports of ReferralInvite
I attempted automated searches for any remaining named imports of ReferralInvite, but the fallback patterns produced errors and no conclusive results. Please manually verify that every consuming module now imports ReferralInvite as a default export.• File: packages/email/src/templates/referral-invite.tsx
• Snippet at line 17:export default function ReferralInvite({packages/email/src/templates/domain-transferred.tsx (1)
18-18
:❓ Verification inconclusive
Apply default export to DomainTransferred
DomainTransferred
now uses a default export only; ensure all previous named imports are updated accordingly.
🏁 Script executed:
#!/bin/bash # Find named import usages of DomainTransferred rg "import { *DomainTransferred *}" -n .Length of output: 164
🏁 Script executed:
#!/bin/bash # Search for any named-import usages of DomainTransferred rg -nE "import\s*{\s*DomainTransferred\s*}\s*from" -g "*.ts*" .Length of output: 144
Ensure DomainTransferred Is Imported as a Default Export
DomainTransferred
has been converted to a default export. Please verify that there are no remaining named-imports (e.g.import { DomainTransferred }
) in the codebase.
You can run a quick search to confirm:rg -n "import.*DomainTransferred" -t ts -t tsx .packages/email/src/templates/login-link.tsx (1)
17-17
:✅ Verification successful
Convert LoginLink to default export
LoginLink
is now exported by default in line with other templates. Make sure no named imports remain in the codebase.
🏁 Script executed:
#!/bin/bash # Search for named imports of LoginLink rg "import { *LoginLink *}" -n .Length of output: 148
🏁 Script executed:
#!/bin/bash # Search for named imports of LoginLink (corrected regex) rg -n -P 'import \{[^}]*LoginLink[^}]*\}' .Length of output: 45
✅
LoginLink
Default Export Implemented; No Named Imports Found
Allimport { LoginLink }
instances have been removed and the component is now a default export, consistent with other templates.
- Verified in
packages/email/src/templates/login-link.tsx
(line 17)- No named‐import references remain in the codebase
packages/email/src/templates/dub-wrapped.tsx (1)
21-21
:✅ Verification successful
Default export alignment
Converted
DubWrapped
to a default export and removed the redundantexport default DubWrapped;
at the bottom, standardizing this template with the rest of the folder.
Ensure there are no remaining named-import usages.To verify:
🏁 Script executed:
#!/bin/bash # Search for any stale named imports of DubWrapped rg -n "import\s*{\s*DubWrapped\s*}" .Length of output: 159
🏁 Script executed:
#!/bin/bash # Search for any stale named imports of DubWrapped (escaped braces) rg -n 'import\s*\{\s*DubWrapped\s*\}' .Length of output: 41
✅ Default export alignment verified
No named imports of
DubWrapped
were found after switching to a default export. This template now matches the rest of the folder’s conventions. Approving these changes.packages/email/src/templates/clicks-summary.tsx (1)
21-21
:✅ Verification successful
Default export alignment
Changed
ClicksSummary
to a default export and removed the separateexport default ClicksSummary;
at the end. This keeps export patterns consistent across all email templates.
Verify no old named imports remain.To verify:
🏁 Script executed:
#!/bin/bash rg -n "import\s*{\s*ClicksSummary\s*}" .Length of output: 165
🏁 Script executed:
#!/bin/bash # Corrected regex: escaped braces to find any named import of ClicksSummary rg -n 'import.*\{.*ClicksSummary.*\}' .Length of output: 41
No named imports of
ClicksSummary
detected
A global search confirmed that all references have been updated to use the default export. The change is consistent and safe to merge.packages/email/src/templates/clicks-exceeded.tsx (1)
18-18
:✅ Verification successful
Default export alignment
Updated
ClicksExceeded
to a default export and removed its redundant bottom export. This aligns the component with the new email-template conventions.
Confirm all imports have been updated.To verify:
🏁 Script executed:
#!/bin/bash rg -n "import\s*{\s*ClicksExceeded\s*}" .Length of output: 167
🏁 Script executed:
#!/bin/bash # Search for any named imports of ClicksExceeded (should be none after the conversion) rg -n "import\s*\{\s*ClicksExceeded\s*\}" .Length of output: 45
Default export alignment verified
All named imports of
ClicksExceeded
have been removed; the component now correctly uses a default export and no leftover named imports remain. Imports across the codebase are up-to-date.packages/email/src/templates/campaign-imported.tsx (1)
17-17
:✅ Verification successful
Default export alignment
Switched
CampaignImported
to a default export and eliminated the duplicate export at file end. This follows the pattern used by other template files.
Ensure no stale named-import statements linger.To verify:
🏁 Script executed:
#!/bin/bash rg -n "import\s*{\s*CampaignImported\s*}" .Length of output: 171
Let’s retry with properly escaped braces:
🏁 Script executed:
#!/bin/bash rg -n 'import\s*\{\s*CampaignImported\s*\}' .Length of output: 47
Default export alignment verified
No lingering named-imports of
CampaignImported
were found across the codebase after switching to a default export. This change aligns with the pattern used by other template files.
Change approved.packages/email/src/templates/links-limit.tsx (1)
18-18
:✅ Verification successful
Default export alignment
Converted
LinksLimitAlert
to a default export, removing its separate default export statement at the bottom. This standardizes exports across the package.
Please verify all consumers now use default imports.To verify:
🏁 Script executed:
#!/bin/bash rg -n "import\s*{\s*LinksLimitAlert\s*}" .Length of output: 169
🏁 Script executed:
#!/bin/bash # Search for named imports of LinksLimitAlert with properly escaped braces rg -n 'import\s*\{\s*LinksLimitAlert\s*\}' . # Fallback: literal grep for any import of LinksLimitAlert grep -R "import { LinksLimitAlert" -n .Length of output: 182
Default export usage confirmed
No occurrences of
import { LinksLimitAlert }
were found across the codebase—every consumer now resolves the new default export correctly.packages/email/src/templates/welcome-email.tsx (1)
17-23
: Switch to default export – consistent with PR objectiveConverted
WelcomeEmail
to a default export and removed the redundant export statement. No functional changes; ensure all import sites now use default import syntax.packages/email/src/templates/folder-edit-access-requested.tsx (1)
17-27
: Switch to default export – consistent with PR objectiveConverted
FolderEditAccessRequested
to a default export and removed the redundant export statement. No logic changes.packages/email/src/templates/new-sale-alert-program-owner.tsx (1)
19-19
: Switch to default export – consistent with PR objectiveConverted
NewSaleAlertProgramOwner
to a default export and removed the redundant export statement. No functional changes.packages/email/src/templates/domain-claimed.tsx (1)
17-17
: Switch to default export – consistent with PR objectiveConverted
DomainClaimed
to a default export and removed the redundant export statement. No logic changes.packages/email/src/templates/links-imported.tsx (1)
20-20
: Switch to default export – consistent with PR objectiveConverted
LinksImported
to a default export and removed the redundant export statement. No functional changes.packages/email/src/templates/links-import-errors.tsx (1)
22-22
:✅ Verification successful
Standardize to default export
Default-exportingLinksImportErrors
cleans up the export pattern; ensure there are no leftover named imports across the codebase.
🏁 Script executed:
#!/bin/bash # Verify no named imports of LinksImportErrors remain rg -n "import {[^}]*LinksImportErrors" .Length of output: 163
🏁 Script executed:
#!/bin/bash # Verify no named imports of LinksImportErrors remain (escaped braces and whitespace) rg -n -t ts -t tsx 'import\s*\{\s*[^}]*\bLinksImportErrors\b[^}]*\}' .Length of output: 100
🏁 Script executed:
#!/bin/bash # Verify no named imports of LinksImportErrors remain in TS/TSX files rg -n --glob '*.ts' --glob '*.tsx' 'import\s*{[^}]*\bLinksImportErrors\b[^}]*}' .Length of output: 218
🏁 Script executed:
#!/bin/bash # Properly escape braces for Rust regex engine in ripgrep rg -n --glob '*.ts' --glob '*.tsx' 'import \{[^\}]*LinksImportErrors[^\}]*\}' .Length of output: 81
All named imports removed—default export consistent
I searched across all.ts
/.tsx
files for anyimport {LinksImportErrors}
occurrences and found none. TheLinksImportErrors
component is now exclusively default-exported and imported consistently.packages/email/src/templates/new-sale-alert-partner.tsx (1)
17-17
: Switch to default export is consistent
ConvertingNewSaleAlertPartner
to a default export and removing the redundant bottom export aligns with the PR objective to standardize export style. Ensure all import sites are updated to use default imports for this component.packages/email/src/templates/partner-payout-sent.tsx (1)
17-17
: Unified default export applied
ChangingPartnerPayoutSent
to a default export and removing the extra export statement at the end correctly enforces the new convention.packages/email/src/templates/partner-application-approved.tsx (1)
19-19
: Default export conversion looks correct
UpdatingPartnerApplicationApproved
to a default export matches the file name and style guide; no implementation changes were introduced.apps/web/app/(ee)/api/stripe/webhook/invoice-payment-failed.tsx (1)
2-2
: Consistent default import for FailedPayment template.
Aligns with the PR goal of switching email templates to default exports; no functional change.apps/web/ui/analytics/feedback/action.ts (1)
4-4
: Switch to default import for FeedbackEmail template.
Matches the new export style for email templates; behavior unchanged.apps/web/app/(ee)/api/cron/import/short/utils.ts (1)
7-7
: Use default import for LinksImported template.
Follows the standardized default-export pattern for email components; no logic updates.apps/web/lib/actions/partners/ban-partner.ts (1)
11-11
: Adopt default import for PartnerBanned template.
Consistent with the updated template exports; no effect on functionality.apps/web/lib/api/domains/claim-dot-link-domain.ts (1)
7-7
: Import DomainClaimed as default export.
Standardizes email template imports to default exports per PR objective; unchanged behavior.
Summary by CodeRabbit
Refactor
Style
No changes to user-facing functionality or workflows.