From dcb9e20ab52af30c53fc2e8b28ddfe31e3fc8ee8 Mon Sep 17 00:00:00 2001 From: Fayaz Ahmed Date: Wed, 23 Oct 2024 18:12:37 +0530 Subject: [PATCH 1/2] feat: Dynamic imports --- src/index.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/index.ts b/src/index.ts index 2e41ab5..f7eb9b9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,34 +1,30 @@ -import { PlunkService } from "./services/plunk"; -import { PostmarkService } from "./services/postmark"; -import { ResendService } from "./services/resend"; -import { SendGridService } from "./services/sendgrid"; -import { MailgunService } from "./services/mailgun"; import type { EmailProvider } from "./types/email-options"; import type { EmailService } from "./types/email-service"; /** * Factory function to get the email service based on the provider * @param provider - The email provider - * @returns The email service instance + * @returns A Promise that resolves to the email service instance * @throws Error if the provider is not supported */ -export function useEmail(provider: EmailProvider): EmailService { +export async function useEmail(provider: EmailProvider): Promise { switch (provider) { case "resend": { + const { ResendService } = await import("./services/resend"); return new ResendService(); } case "plunk": { + const { PlunkService } = await import("./services/plunk"); return new PlunkService(); } case "sendgrid": { + const { SendGridService } = await import("./services/sendgrid"); return new SendGridService(); } case "postmark": { + const { PostmarkService } = await import("./services/postmark"); return new PostmarkService(); } - case "mailgun": { - return MailgunService(); - } default: { throw new Error(`Unsupported email provider: ${provider}`); } From 5c6e38ae8b49140b02bcc9ba47a22807220378cb Mon Sep 17 00:00:00 2001 From: Fayaz Ahmed Date: Thu, 24 Oct 2024 18:29:04 +0530 Subject: [PATCH 2/2] chore: Unbuild config --- build.config.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 build.config.ts diff --git a/build.config.ts b/build.config.ts new file mode 100644 index 0000000..d07d330 --- /dev/null +++ b/build.config.ts @@ -0,0 +1,19 @@ +import { fileURLToPath } from "node:url"; +import { defineBuildConfig } from "unbuild"; + +export default defineBuildConfig({ + entries: [ + "src/index.ts", + { + builder: "mkdist", + input: "src/services", + outDir: "dist", + }, + ], + clean: false, + declaration: true, + rollup: { + emitCJS: true, + }, + externals: [fileURLToPath(new URL("src/services", import.meta.url))], +});