@sqrzro/server 4.0.0-alpha.54 → 4.0.0-alpha.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/forms/index.js +1 -1
- package/dist/forms/index.js.map +1 -1
- package/dist/mail/index.js +2 -2
- package/dist/mail/index.js.map +1 -1
- package/package.json +1 -1
package/dist/forms/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$1}from'../chunk-UCMLSO7F.js';import {b,a as a$2}from'../chunk-2ZLU4AUD.js';export{b as ValidationError,a as createRule,c as getExistsTransformer}from'../chunk-2ZLU4AUD.js';import {a as a$3}from'../chunk-6GDOIHTS.js';import'../chunk-BA3BC4CD.js';import {redirect}from'next/navigation';import x,{z as z$1}from'zod';import {put}from'@vercel/blob';import {joinURL}from'@sqrzro/utility';function w(e){let[,,t]=e.split(";");redirect(`${t.startsWith("/")?"":"/"}${t}`);}var l=w;function f(e){let t={};for(let r in e)typeof e[r]=="string"?t[r]=e[r].trim()===""?null:e[r].trim():typeof e[r]=="object"&&e[r]!==null&&!(e[r]instanceof Date)&&!(e[r]instanceof File)?t[r]=f(e[r]):t[r]=e[r];return t}var p=f;function I(e){return e.issues.reduce((t,r)=>({...t,[r.path.join(".")]:r.message.replace(/"/gu,"")}),{})}var c=I;function D(e){return typeof e.input>"u"&&(e.code==="invalid_type"||e.code==="invalid_value")||!e.input&&(e.code==="invalid_format"||e.code==="too_small")}function v(e){return D(e)?{message:"REQUIRED"}:e.message?{message:e.message}:null}var d=v;async function P(e,t){try{return await t.parseAsync(p(e),{error:o=>d(o)})}catch(r){throw r instanceof z$1.ZodError?new b(c(r)):r}}var a=P;async function T(e){let t={data:null,error:null,validation:null};try{let r=await a(e.formData,e.schema),o=await e.fn(r);return await e.onSuccess?.(o),{...t,data:o}}catch(r){return r instanceof b?(e.onValidationError?.(r),{...t,validation:r.messages}):r instanceof Error?(r.message==="NEXT_REDIRECT"&&"digest"in r&&l(String(r.digest)),{...t,error:r.message}):{...t,error:"submitForm encountered an unknown error"}}}var i=T;function z(e){let t=process.env.APP_URL??"_default_",r=new URL(t),o=e.name.split(".").pop()??"";return joinURL(`${r.hostname.replace("www.","").replace(/\./g,"-")}${r.port?`-${r.port}`:""}`,`${a$3(null,32)}.${o}`)}var g=z;async function Z(e){return (await put(g(e),e,{access:"public"})).url}var R=Z;var A=x.object({file:x.instanceof(File)});async function _(e){return i({fn:async t=>R(t.file),formData:{file:e},schema:A})}var j=_;function N(e,t){return [async function(r){let o=await t(r[e]);return o?o.id===r.id:true},{message:"ALREADY_EXISTS",path:[e]}]}var k=N;var U=x.string().transform(a$1);function B(){return a$2({validator:U})}var C=B;function O(e){return typeof e=="string"?e.replace(/[\s-]/g,""):e}function X({max:e=20,min:t=4,optional:r=false}={}){let o=x.string().regex(/^\d+$/).max(e).min(t),h=r?o.nullable():o.nonempty(),E=x.preprocess(O,h);return a$2({validator:E})}var Y=X;function q(e){return [async t=>!!await e(t),{message:"NOT_FOUND"}]}var Q=q;function W(e){return [async t=>!await e(t),{message:"ALREADY_EXISTS"}]}var G=W;export{C as getCSVRule,Q as getExistsValidator,k as getNotExistsRefiner,G as getNotExistsValidator,Y as getPhoneRule,i as submitForm,j as uploadFile,a as validateSchema};//# sourceMappingURL=index.js.map
|
|
1
|
+
import {a as a$1}from'../chunk-UCMLSO7F.js';import {b,a as a$2}from'../chunk-2ZLU4AUD.js';export{b as ValidationError,a as createRule,c as getExistsTransformer}from'../chunk-2ZLU4AUD.js';import {a as a$3}from'../chunk-6GDOIHTS.js';import'../chunk-BA3BC4CD.js';import {redirect}from'next/navigation';import x,{z as z$1}from'zod';import {put}from'@vercel/blob';import {joinURL}from'@sqrzro/utility';function w(e){let[,,t]=e.split(";");redirect(`${t.startsWith("/")?"":"/"}${t}`);}var l=w;function f(e){let t={};for(let r in e)typeof e[r]=="string"?t[r]=e[r].trim()===""?null:e[r].trim():typeof e[r]=="object"&&e[r]!==null&&!(e[r]instanceof Date)&&!(e[r]instanceof File)?t[r]=f(e[r]):t[r]=e[r];return t}var p=f;function I(e){return e.issues.reduce((t,r)=>({...t,[r.path.join(".")]:r.message.replace(/"/gu,"")}),{})}var c=I;function D(e){return typeof e.input>"u"&&(e.code==="invalid_type"||e.code==="invalid_value")||!e.input&&(e.code==="invalid_format"||e.code==="too_small")}function v(e){return D(e)?{message:"REQUIRED"}:e.message?{message:e.message}:null}var d=v;async function P(e,t){try{return await t.parseAsync(p(e),{error:o=>d(o)})}catch(r){throw r instanceof z$1.ZodError?new b(c(r)):r}}var a=P;async function T(e){let t={data:null,error:null,validation:null};try{let r=await a(e.formData,e.schema),o=await e.fn(r);return await e.onSuccess?.(o),{...t,data:o}}catch(r){return r instanceof b?(e.onValidationError?.(r),{...t,validation:r.messages}):r instanceof Error?(r.message==="NEXT_REDIRECT"&&"digest"in r&&l(String(r.digest)),console.error(r),{...t,error:r.message}):{...t,error:"submitForm encountered an unknown error"}}}var i=T;function z(e){let t=process.env.APP_URL??"_default_",r=new URL(t),o=e.name.split(".").pop()??"";return joinURL(`${r.hostname.replace("www.","").replace(/\./g,"-")}${r.port?`-${r.port}`:""}`,`${a$3(null,32)}.${o}`)}var g=z;async function Z(e){return (await put(g(e),e,{access:"public"})).url}var R=Z;var A=x.object({file:x.instanceof(File)});async function _(e){return i({fn:async t=>R(t.file),formData:{file:e},schema:A})}var j=_;function N(e,t){return [async function(r){let o=await t(r[e]);return o?o.id===r.id:true},{message:"ALREADY_EXISTS",path:[e]}]}var k=N;var U=x.string().transform(a$1);function B(){return a$2({validator:U})}var C=B;function O(e){return typeof e=="string"?e.replace(/[\s-]/g,""):e}function X({max:e=20,min:t=4,optional:r=false}={}){let o=x.string().regex(/^\d+$/).max(e).min(t),h=r?o.nullable():o.nonempty(),E=x.preprocess(O,h);return a$2({validator:E})}var Y=X;function q(e){return [async t=>!!await e(t),{message:"NOT_FOUND"}]}var Q=q;function W(e){return [async t=>!await e(t),{message:"ALREADY_EXISTS"}]}var G=W;export{C as getCSVRule,Q as getExistsValidator,k as getNotExistsRefiner,G as getNotExistsValidator,Y as getPhoneRule,i as submitForm,j as uploadFile,a as validateSchema};//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/forms/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/forms/utility/handle-redirect.ts","../../src/forms/utility/clean-data.ts","../../src/forms/utility/transform-errors.ts","../../src/forms/utility/transform-issue.ts","../../src/forms/validate-schema.ts","../../src/forms/submit-form.ts","../../src/forms/utility/transform-file-path.ts","../../src/forms/files/put-file.ts","../../src/forms/files/upload-file.ts","../../src/forms/refiner/get-not-exists-refiner.ts","../../src/forms/rules/get-csv-rule.ts","../../src/forms/rules/get-phone-rule.ts","../../src/forms/validators/get-exists-validator.ts","../../src/forms/validators/get-not-exists-validator.ts"],"names":["handleRedirect","digest","path","redirect","handle_redirect_default","cleanData","data","cleanedData","key","clean_data_default","transformErrors","error","acc","cur","transform_errors_default","isRequired","issue","transformIssue","transform_issue_default","validateSchema","schema","z","ValidationError_default","validate_schema_default","submitForm","args","response","model","submit_form_default","transformFilePath","file","url","obj","extension","joinURL","generate_id_default","transform_file_path_default","putFile","put","put_file_default","uploadFile","upload_file_default","getNotExistsRefiner","field","fn","result","get_not_exists_refiner_default","validator","parse_csv_default","getCSVRule","create_rule_default","get_csv_rule_default","preprocess","value","getPhoneRule","max","min","optional","baseRule","rule","get_phone_rule_default","getExistsValidator","get_exists_validator_default","getNotExistsValidator","get_not_exists_validator_default"],"mappings":"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","file":"index.js","sourcesContent":["import { redirect } from 'next/navigation';\n\nfunction handleRedirect(digest: string): void {\n const [, , path] = digest.split(';');\n redirect(`${path.startsWith('/') ? '' : '/'}${path}`);\n}\n\nexport default handleRedirect;\n","function cleanData(data: object): object {\n const cleanedData: Record<string, unknown> = {};\n\n for (const key in data) {\n if (typeof data[key] === 'string') {\n cleanedData[key] = data[key].trim() === '' ? null : data[key].trim();\n } else if (\n typeof data[key] === 'object' &&\n data[key] !== null &&\n !(data[key] instanceof Date) &&\n !(data[key] instanceof File)\n ) {\n cleanedData[key] = cleanData(data[key] as object);\n } else {\n cleanedData[key] = data[key];\n }\n }\n\n return cleanedData;\n}\n\nexport default cleanData;\n","import { z } from 'zod';\n\nfunction transformErrors(error: z.ZodError): Record<string, string> {\n return error.issues.reduce(\n (acc, cur) => ({\n ...acc,\n [cur.path.join('.')]: cur.message.replace(/\"/gu, ''),\n }),\n {}\n );\n}\n\nexport default transformErrors;\n","import type { $ZodIssue, $ZodIssueBase, $ZodRawIssue } from 'zod/v4/core';\n\nfunction isRequired<T extends $ZodIssueBase = $ZodIssue>(issue: $ZodRawIssue<T>): boolean {\n if (\n typeof issue.input === 'undefined' &&\n (issue.code === 'invalid_type' || issue.code === 'invalid_value')\n ) {\n return true;\n }\n\n if (!issue.input && (issue.code === 'invalid_format' || issue.code === 'too_small')) {\n return true;\n }\n\n return false;\n}\n\nfunction transformIssue<T extends $ZodIssueBase = $ZodIssue>(\n issue: $ZodRawIssue<T>\n): { message: string } | null {\n if (isRequired(issue)) {\n return { message: 'REQUIRED' };\n }\n\n return issue.message ? { message: issue.message } : null;\n}\n\nexport default transformIssue;\n","import { z } from 'zod';\n\nimport cleanData from './utility/clean-data';\nimport transformErrors from './utility/transform-errors';\nimport transformIssue from './utility/transform-issue';\n\nimport ValidationError from './ValidationError';\n\nasync function validateSchema<T extends z.ZodTypeAny>(\n data: object,\n schema: T\n): Promise<z.infer<T>> {\n try {\n const result = await schema.parseAsync(cleanData(data), {\n error: (issue) => transformIssue(issue),\n });\n return result;\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new ValidationError(transformErrors(error));\n }\n throw error;\n }\n}\n\nexport default validateSchema;\n","import { z } from 'zod';\n\nimport handleRedirect from './utility/handle-redirect';\nimport type { AwaitedFormResponse, FormResponse } from './utility/interfaces';\n\nimport ValidationError from './ValidationError';\nimport validateSchema from './validate-schema';\n\ninterface SubmitFormArgs<Schema extends z.ZodTypeAny, Response> {\n fn: (data: z.infer<Schema>) => Promise<Response>;\n formData: object;\n onSuccess?: (model: Response) => Promise<void> | void;\n onValidationError?: (error: ValidationError) => void;\n schema: Schema;\n}\n\n/**\n * Submit a form and handle validation and submission errors.\n *\n * @param args The arguments for submitting the form.\n * @returns A promise that resolves to either the submitted model or an error.\n */\nasync function submitForm<Schema extends z.ZodTypeAny, Response>(\n args: SubmitFormArgs<Schema, Response>\n): FormResponse<Response> {\n let response: AwaitedFormResponse<Response> = { data: null, error: null, validation: null };\n\n try {\n const data = await validateSchema(args.formData, args.schema);\n const model = await args.fn(data);\n\n await args.onSuccess?.(model);\n\n return { ...response, data: model };\n } catch (error) {\n if (error instanceof ValidationError) {\n args.onValidationError?.(error);\n return { ...response, validation: error.messages };\n }\n if (error instanceof Error) {\n if (error.message === 'NEXT_REDIRECT' && 'digest' in error) {\n handleRedirect(String(error.digest));\n }\n // throw error;\n return { ...response, error: error.message };\n }\n return { ...response, error: 'submitForm encountered an unknown error' };\n }\n}\n\nexport default submitForm;\n","import { joinURL } from '@sqrzro/utility';\n\nimport { generateID } from '../../utility';\n\nfunction transformFilePath(file: File): string {\n const url = process.env.APP_URL ?? '_default_';\n const obj = new URL(url);\n\n const extension = file.name.split('.').pop() ?? '';\n\n return joinURL(\n `${obj.hostname.replace('www.', '').replace(/\\./g, '-')}${obj.port ? `-${obj.port}` : ''}`,\n `${generateID(null, 32)}.${extension}`\n );\n}\n\nexport default transformFilePath;\n","import { put } from '@vercel/blob';\n\nimport transformFilePath from '../utility/transform-file-path';\n\nasync function putFile(file: File): Promise<string> {\n const result = await put(transformFilePath(file), file, {\n access: 'public',\n });\n\n return result.url;\n}\n\nexport default putFile;\n","import z from 'zod';\n\nimport submitForm from '../submit-form';\nimport type { FormResponse } from '../utility/interfaces';\n\nimport putFile from './put-file';\n\nconst schema = z.object({\n file: z.instanceof(File),\n});\n\nasync function uploadFile(file: File): FormResponse<string> {\n return submitForm({\n fn: async (data: z.infer<typeof schema>): Promise<string> => putFile(data.file),\n formData: { file },\n schema,\n });\n}\n\nexport default uploadFile;\n","function getNotExistsRefiner(\n field: string,\n fn: (value: any) => Promise<any>\n): [\n (data: any) => Promise<boolean>,\n {\n message: string;\n path: string[];\n },\n] {\n return [\n async function (data: any) {\n const result = await fn(data[field]);\n\n if (!result) {\n return true;\n }\n\n return result.id === data.id;\n },\n { message: 'ALREADY_EXISTS', path: [field] },\n ];\n}\n\nexport default getNotExistsRefiner;\n","import z from 'zod';\n\nimport parseCSV from '../../csv/parse-csv';\n\nimport createRule from '../create-rule';\n\nconst validator = z.string().transform(parseCSV);\n\nfunction getCSVRule() {\n return createRule({ validator });\n}\n\nexport default getCSVRule;\n","import z from 'zod';\n\nimport createRule from '../create-rule';\n\ninterface PhoneRuleOptions {\n max?: number;\n min?: number;\n optional?: boolean;\n}\n\nfunction preprocess(value: unknown): unknown {\n if (typeof value === 'string') {\n return value.replace(/[\\s-]/g, '');\n }\n return value;\n}\n\nfunction getPhoneRule({ max = 20, min = 4, optional = false }: PhoneRuleOptions = {}) {\n const baseRule = z.string().regex(/^\\d+$/).max(max).min(min);\n const rule = optional ? baseRule.nullable() : baseRule.nonempty();\n\n const validator = z.preprocess(preprocess, rule);\n return createRule({ validator });\n}\n\nexport default getPhoneRule;\n","function getExistsValidator<T, ID>(\n fn: (value: ID) => Promise<T>\n): [(value: ID) => Promise<boolean>, { message: string }] {\n return [\n async (value: ID) => {\n const result = await fn(value);\n return Boolean(result);\n },\n { message: 'NOT_FOUND' },\n ];\n}\n\nexport default getExistsValidator;\n","function getNotExistsValidator<ID>(\n fn: (value: ID) => Promise<any>\n): [(value: ID) => Promise<boolean>, { message: string }] {\n return [\n async (value: ID) => {\n const result = await fn(value);\n return !result;\n },\n { message: 'ALREADY_EXISTS' },\n ];\n}\n\nexport default getNotExistsValidator;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/forms/utility/handle-redirect.ts","../../src/forms/utility/clean-data.ts","../../src/forms/utility/transform-errors.ts","../../src/forms/utility/transform-issue.ts","../../src/forms/validate-schema.ts","../../src/forms/submit-form.ts","../../src/forms/utility/transform-file-path.ts","../../src/forms/files/put-file.ts","../../src/forms/files/upload-file.ts","../../src/forms/refiner/get-not-exists-refiner.ts","../../src/forms/rules/get-csv-rule.ts","../../src/forms/rules/get-phone-rule.ts","../../src/forms/validators/get-exists-validator.ts","../../src/forms/validators/get-not-exists-validator.ts"],"names":["handleRedirect","digest","path","redirect","handle_redirect_default","cleanData","data","cleanedData","key","clean_data_default","transformErrors","error","acc","cur","transform_errors_default","isRequired","issue","transformIssue","transform_issue_default","validateSchema","schema","z","ValidationError_default","validate_schema_default","submitForm","args","response","model","submit_form_default","transformFilePath","file","url","obj","extension","joinURL","generate_id_default","transform_file_path_default","putFile","put","put_file_default","uploadFile","upload_file_default","getNotExistsRefiner","field","fn","result","get_not_exists_refiner_default","validator","parse_csv_default","getCSVRule","create_rule_default","get_csv_rule_default","preprocess","value","getPhoneRule","max","min","optional","baseRule","rule","get_phone_rule_default","getExistsValidator","get_exists_validator_default","getNotExistsValidator","get_not_exists_validator_default"],"mappings":"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","file":"index.js","sourcesContent":["import { redirect } from 'next/navigation';\n\nfunction handleRedirect(digest: string): void {\n const [, , path] = digest.split(';');\n redirect(`${path.startsWith('/') ? '' : '/'}${path}`);\n}\n\nexport default handleRedirect;\n","function cleanData(data: object): object {\n const cleanedData: Record<string, unknown> = {};\n\n for (const key in data) {\n if (typeof data[key] === 'string') {\n cleanedData[key] = data[key].trim() === '' ? null : data[key].trim();\n } else if (\n typeof data[key] === 'object' &&\n data[key] !== null &&\n !(data[key] instanceof Date) &&\n !(data[key] instanceof File)\n ) {\n cleanedData[key] = cleanData(data[key] as object);\n } else {\n cleanedData[key] = data[key];\n }\n }\n\n return cleanedData;\n}\n\nexport default cleanData;\n","import { z } from 'zod';\n\nfunction transformErrors(error: z.ZodError): Record<string, string> {\n return error.issues.reduce(\n (acc, cur) => ({\n ...acc,\n [cur.path.join('.')]: cur.message.replace(/\"/gu, ''),\n }),\n {}\n );\n}\n\nexport default transformErrors;\n","import type { $ZodIssue, $ZodIssueBase, $ZodRawIssue } from 'zod/v4/core';\n\nfunction isRequired<T extends $ZodIssueBase = $ZodIssue>(issue: $ZodRawIssue<T>): boolean {\n if (\n typeof issue.input === 'undefined' &&\n (issue.code === 'invalid_type' || issue.code === 'invalid_value')\n ) {\n return true;\n }\n\n if (!issue.input && (issue.code === 'invalid_format' || issue.code === 'too_small')) {\n return true;\n }\n\n return false;\n}\n\nfunction transformIssue<T extends $ZodIssueBase = $ZodIssue>(\n issue: $ZodRawIssue<T>\n): { message: string } | null {\n if (isRequired(issue)) {\n return { message: 'REQUIRED' };\n }\n\n return issue.message ? { message: issue.message } : null;\n}\n\nexport default transformIssue;\n","import { z } from 'zod';\n\nimport cleanData from './utility/clean-data';\nimport transformErrors from './utility/transform-errors';\nimport transformIssue from './utility/transform-issue';\n\nimport ValidationError from './ValidationError';\n\nasync function validateSchema<T extends z.ZodTypeAny>(\n data: object,\n schema: T\n): Promise<z.infer<T>> {\n try {\n const result = await schema.parseAsync(cleanData(data), {\n error: (issue) => transformIssue(issue),\n });\n return result;\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new ValidationError(transformErrors(error));\n }\n throw error;\n }\n}\n\nexport default validateSchema;\n","import { z } from 'zod';\n\nimport handleRedirect from './utility/handle-redirect';\nimport type { AwaitedFormResponse, FormResponse } from './utility/interfaces';\n\nimport ValidationError from './ValidationError';\nimport validateSchema from './validate-schema';\n\ninterface SubmitFormArgs<Schema extends z.ZodTypeAny, Response> {\n fn: (data: z.infer<Schema>) => Promise<Response>;\n formData: object;\n onSuccess?: (model: Response) => Promise<void> | void;\n onValidationError?: (error: ValidationError) => void;\n schema: Schema;\n}\n\n/**\n * Submit a form and handle validation and submission errors.\n *\n * @param args The arguments for submitting the form.\n * @returns A promise that resolves to either the submitted model or an error.\n */\nasync function submitForm<Schema extends z.ZodTypeAny, Response>(\n args: SubmitFormArgs<Schema, Response>\n): FormResponse<Response> {\n let response: AwaitedFormResponse<Response> = { data: null, error: null, validation: null };\n\n try {\n const data = await validateSchema(args.formData, args.schema);\n const model = await args.fn(data);\n\n await args.onSuccess?.(model);\n\n return { ...response, data: model };\n } catch (error) {\n if (error instanceof ValidationError) {\n args.onValidationError?.(error);\n return { ...response, validation: error.messages };\n }\n if (error instanceof Error) {\n if (error.message === 'NEXT_REDIRECT' && 'digest' in error) {\n handleRedirect(String(error.digest));\n }\n console.error(error);\n return { ...response, error: error.message };\n }\n return { ...response, error: 'submitForm encountered an unknown error' };\n }\n}\n\nexport default submitForm;\n","import { joinURL } from '@sqrzro/utility';\n\nimport { generateID } from '../../utility';\n\nfunction transformFilePath(file: File): string {\n const url = process.env.APP_URL ?? '_default_';\n const obj = new URL(url);\n\n const extension = file.name.split('.').pop() ?? '';\n\n return joinURL(\n `${obj.hostname.replace('www.', '').replace(/\\./g, '-')}${obj.port ? `-${obj.port}` : ''}`,\n `${generateID(null, 32)}.${extension}`\n );\n}\n\nexport default transformFilePath;\n","import { put } from '@vercel/blob';\n\nimport transformFilePath from '../utility/transform-file-path';\n\nasync function putFile(file: File): Promise<string> {\n const result = await put(transformFilePath(file), file, {\n access: 'public',\n });\n\n return result.url;\n}\n\nexport default putFile;\n","import z from 'zod';\n\nimport submitForm from '../submit-form';\nimport type { FormResponse } from '../utility/interfaces';\n\nimport putFile from './put-file';\n\nconst schema = z.object({\n file: z.instanceof(File),\n});\n\nasync function uploadFile(file: File): FormResponse<string> {\n return submitForm({\n fn: async (data: z.infer<typeof schema>): Promise<string> => putFile(data.file),\n formData: { file },\n schema,\n });\n}\n\nexport default uploadFile;\n","function getNotExistsRefiner(\n field: string,\n fn: (value: any) => Promise<any>\n): [\n (data: any) => Promise<boolean>,\n {\n message: string;\n path: string[];\n },\n] {\n return [\n async function (data: any) {\n const result = await fn(data[field]);\n\n if (!result) {\n return true;\n }\n\n return result.id === data.id;\n },\n { message: 'ALREADY_EXISTS', path: [field] },\n ];\n}\n\nexport default getNotExistsRefiner;\n","import z from 'zod';\n\nimport parseCSV from '../../csv/parse-csv';\n\nimport createRule from '../create-rule';\n\nconst validator = z.string().transform(parseCSV);\n\nfunction getCSVRule() {\n return createRule({ validator });\n}\n\nexport default getCSVRule;\n","import z from 'zod';\n\nimport createRule from '../create-rule';\n\ninterface PhoneRuleOptions {\n max?: number;\n min?: number;\n optional?: boolean;\n}\n\nfunction preprocess(value: unknown): unknown {\n if (typeof value === 'string') {\n return value.replace(/[\\s-]/g, '');\n }\n return value;\n}\n\nfunction getPhoneRule({ max = 20, min = 4, optional = false }: PhoneRuleOptions = {}) {\n const baseRule = z.string().regex(/^\\d+$/).max(max).min(min);\n const rule = optional ? baseRule.nullable() : baseRule.nonempty();\n\n const validator = z.preprocess(preprocess, rule);\n return createRule({ validator });\n}\n\nexport default getPhoneRule;\n","function getExistsValidator<T, ID>(\n fn: (value: ID) => Promise<T>\n): [(value: ID) => Promise<boolean>, { message: string }] {\n return [\n async (value: ID) => {\n const result = await fn(value);\n return Boolean(result);\n },\n { message: 'NOT_FOUND' },\n ];\n}\n\nexport default getExistsValidator;\n","function getNotExistsValidator<ID>(\n fn: (value: ID) => Promise<any>\n): [(value: ID) => Promise<boolean>, { message: string }] {\n return [\n async (value: ID) => {\n const result = await fn(value);\n return !result;\n },\n { message: 'ALREADY_EXISTS' },\n ];\n}\n\nexport default getNotExistsValidator;\n"]}
|
package/dist/mail/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import _ from'stream';import x from'form-data';import N from'mailgun.js';import R from'@sendgrid/mail';function P(t,e){return {subject:t,template:e}}var S=P;async function D(t){let e=(await import('react-dom/server')).default;return new Promise(r=>{let n=new _.Writable,i="";function o(m,M,p){i+=m.toString(),p();}n._write=o;let{pipe:s}=e.renderToPipeableStream(t,{onShellReady:()=>{s(n),r(i);}});})}var g=D;async function L(t,e){let{subject:r,template:n}=t,i=typeof r=="function"?await r(e):r,o=await n(e);return {html:await g(o),subject:i}}var f=L;function T(t){return t.split("@")[1]}var A=T;var O=new N(x);async function j(t){if(!process.env.MAIL_API_KEY)throw new Error("Could not send mail via Mailgun. Mail API key has not been set.");return (await O.client({key:process.env.MAIL_API_KEY,url:"https://api.eu.mailgun.net/",username:"api"}).messages.create(A(t.from.email),{bcc:t.bcc,cc:t.cc,from:t.from.raw,html:t.html,subject:t.subject,to:t.to})).status===200}var y=j;function C(t){return t?Array.isArray(t)?t.map(e=>({email:e})):[{email:t}]:[]}var l=C;async function U(t){if(!process.env.MAIL_API_KEY)throw new Error("Could not send mail via Mailtrap. Mail API key has not been set.");let[e,r]=process.env.MAIL_API_KEY.split("."),i=await(await fetch(`https://sandbox.api.mailtrap.io/api/send/${e}`,{method:"POST",headers:{"Api-Token":r,"Content-Type":"application/json"},body:JSON.stringify({attachments:t.attachments,bcc:l(t.bcc),cc:l(t.cc),from:t.from,html:t.html,subject:t.subject,to:l(t.to)})})).json();if(i.errors)throw new Error(`Could not send mail via Mailtrap. ${i.errors[0]}.`);return true}var b=U;function u(t,e){return Array.isArray(t)?t.map(r=>({email:r,type:e})):[{email:t,type:e}]}function K(t,e,r){return [...u(t,"to"),...u(e||[],"cc"),...u(r||[],"bcc")]}var I=K;async function
|
|
2
|
-
export{S as createMail,f as getMail,
|
|
1
|
+
import _ from'stream';import x from'form-data';import N from'mailgun.js';import {pick}from'@sqrzro/utility';import R from'@sendgrid/mail';function P(t,e){return {subject:t,template:e}}var S=P;async function D(t){let e=(await import('react-dom/server')).default;return new Promise(r=>{let n=new _.Writable,i="";function o(m,M,p){i+=m.toString(),p();}n._write=o;let{pipe:s}=e.renderToPipeableStream(t,{onShellReady:()=>{s(n),r(i);}});})}var g=D;async function L(t,e){let{subject:r,template:n}=t,i=typeof r=="function"?await r(e):r,o=await n(e);return {html:await g(o),subject:i}}var f=L;function T(t){return t.split("@")[1]}var A=T;var O=new N(x);async function j(t){if(!process.env.MAIL_API_KEY)throw new Error("Could not send mail via Mailgun. Mail API key has not been set.");return (await O.client({key:process.env.MAIL_API_KEY,url:"https://api.eu.mailgun.net/",username:"api"}).messages.create(A(t.from.email),{bcc:t.bcc,cc:t.cc,from:t.from.raw,html:t.html,subject:t.subject,to:t.to})).status===200}var y=j;function C(t){return t?Array.isArray(t)?t.map(e=>({email:e})):[{email:t}]:[]}var l=C;async function U(t){if(!process.env.MAIL_API_KEY)throw new Error("Could not send mail via Mailtrap. Mail API key has not been set.");let[e,r]=process.env.MAIL_API_KEY.split("."),i=await(await fetch(`https://sandbox.api.mailtrap.io/api/send/${e}`,{method:"POST",headers:{"Api-Token":r,"Content-Type":"application/json"},body:JSON.stringify({attachments:t.attachments,bcc:l(t.bcc),cc:l(t.cc),from:pick(t.from,["email","name"]),html:t.html,subject:t.subject,to:l(t.to)})})).json();if(i.errors)throw new Error(`Could not send mail via Mailtrap. ${i.errors[0]}.`);return true}var b=U;function u(t,e){return Array.isArray(t)?t.map(r=>({email:r,type:e})):[{email:t,type:e}]}function K(t,e,r){return [...u(t,"to"),...u(e||[],"cc"),...u(r||[],"bcc")]}var I=K;async function V(t){if(!process.env.MAIL_API_KEY)throw new Error("Could not send mail via Mandrill. Mail API key has not been set.");let r={attachments:t.attachments?.map(o=>({content:o.content,name:o.filename,type:o.type})),from_email:t.from.email,from_name:t.from.name,html:t.html,subject:t.subject,preserve_recipients:true,to:I(t.to,t.cc,t.bcc)},i=await(await fetch("https://mandrillapp.com/api/1.0/messages/send",{method:"POST",body:JSON.stringify({key:process.env.MAIL_API_KEY,message:r})})).json();return Array.isArray(i)?i.every(o=>o.status==="sent"):i.status==="sent"}var h=V;function Y(t){return t?Array.isArray(t)?t.map(e=>({email:e})):[{email:t}]:[]}var c=Y;async function G(t){if(!process.env.MAIL_API_KEY)throw new Error("Could not send mail via Sendgrid. Mail API key has not been set.");R.setApiKey(process.env.MAIL_API_KEY);let e=await R.send({attachments:t.attachments,bcc:c(t.bcc),cc:c(t.cc),from:pick(t.from,["email","name"]),html:t.html,to:c(t.to),subject:t.subject});if(!e[0].statusCode.toString().startsWith("2"))throw new Error(`Could not send mail via Sendgrid. ${JSON.stringify(e)}`);return true}var E=G;function B(t){if(!t&&!process.env.MAIL_FROM)throw new Error("Mail from address has not been set as an environment variable, or provided in options.");let e=/^(?<name>[^<]+)<(?<email>[^>]+)>$/u.exec(t||process.env.MAIL_FROM||"");if(!e?.groups?.name||!e?.groups?.email)throw new Error('Mail from address is not the correct format. It should be "Name <email>".');return {email:e.groups.email.trim(),name:e.groups.name.trim(),raw:`${e.groups.name.trim()} <${e.groups.email.trim()}>`}}var v=B;var F=["MAILTRAP"],J=["MAILGUN","MAILTRAP","MANDRILL","SENDGRID"],W="MAILTRAP",q="SENDGRID",w={MAILGUN:y,MAILTRAP:b,MANDRILL:h,SENDGRID:E};async function z(t,e,r,n){let i=v(n?.from),{subject:o,html:s}=await f(e,r||{}),m={attachments:n?.attachments,bcc:n?.bcc,cc:n?.cc,from:i,html:s,subject:o,to:t},M=process.env.MAIL_ENABLE_PRODUCTION==="true"?J:F,p=process.env.MAIL_ENABLE_PRODUCTION==="true"?q:W,a=process.env.MAIL_DRIVER?process.env.MAIL_DRIVER.toUpperCase():p;if(!M.includes(a)||!w[a])throw new Error(`Mail driver ${a} is not supported. If you're in a production environment, you might need to set the MAIL_ENABLE_PRODUCTION environment variable to access this driver.`);let d=w[a];if(!d)throw new Error(`Mail driver ${a} is not supported.`);return d(m)}var H=z;
|
|
2
|
+
export{S as createMail,f as getMail,H as sendMail};//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/mail/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mail/create-mail.ts","../../src/mail/utility/render-mail.ts","../../src/mail/get-mail.ts","../../src/mail/drivers/mailgun/transform-mailgun-domain.ts","../../src/mail/drivers/mailgun/index.ts","../../src/mail/drivers/mailtrap/transform-mailtrap-recipients.ts","../../src/mail/drivers/mailtrap/index.ts","../../src/mail/drivers/mandrill/transform-mandrill-recipients.ts","../../src/mail/drivers/mandrill/index.ts","../../src/mail/drivers/sendgrid/transform-sendgrid-recipients.ts","../../src/mail/drivers/sendgrid/index.ts","../../src/mail/utility/get-sender-details.ts","../../src/mail/send-mail.ts"],"names":["createMail","subject","template","create_mail_default","renderMail","element","ReactDOMServer","resolve","ws","stream","content","write","chunk","enc","next","pipe","render_mail_default","getMail","mail","data","subjectText","get_mail_default","transformMailgunDomain","email","transform_mailgun_domain_default","mg","Mailgun","formData","sendMailgunMail","sendObject","mailgun_default","transformMailtrapRecipients","emails","transform_mailtrap_recipients_default","sendMailtrapMail","id","key","json","mailtrap_default","transformMandrillRecipientGroup","group","type","transformMandrillRecipients","to","cc","bcc","transform_mandrill_recipients_default","sendMandrillMail","message","attachment","item","mandrill_default","transformSendgridRecipients","transform_sendgrid_recipients_default","sendSendgridMail","sgMail","response","sendgrid_default","getSenderDetails","from","matches","get_sender_details_default","DEVELOPMENT_DRIVERS","PRODUCTION_DRIVERS","DEFAULT_DEVELOPMENT_DRIVER","DEFAULT_PRODUCTION_DRIVER","driverMap","sendMail","options","html","allowedDriverAliases","defaultDriverAlias","driverAlias","driver","send_mail_default"],"mappings":"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","file":"index.js","sourcesContent":["import type { MailObject } from './utility/interfaces';\n\nfunction createMail<T extends object>(\n subject: string | ((data: T) => Promise<string> | string),\n template: (data: T) => Promise<React.ReactElement> | React.ReactElement\n): MailObject<T> {\n return { subject, template };\n}\n\nexport default createMail;\n","import stream from 'node:stream';\n\nasync function renderMail(element: React.ReactElement): Promise<string> {\n const ReactDOMServer = (await import('react-dom/server')).default;\n\n return new Promise((resolve) => {\n const ws = new stream.Writable();\n let content = '';\n\n function write<T extends { toString: () => string }>(\n chunk: T,\n enc: BufferEncoding,\n next: (error?: Error | null) => void\n ): void {\n content += chunk.toString();\n next();\n }\n\n ws._write = write; // eslint-disable-line no-underscore-dangle\n\n const { pipe } = ReactDOMServer.renderToPipeableStream(element, {\n onShellReady: () => {\n pipe(ws);\n resolve(content);\n },\n });\n });\n}\n\nexport default renderMail;\n","import renderMail from './utility/render-mail';\nimport type { MailObject } from './utility/interfaces';\n\nasync function getMail<T extends object>(\n mail: MailObject<T>,\n data: T\n): Promise<{ subject: string; html: string }> {\n const { subject, template } = mail;\n\n const subjectText = typeof subject === 'function' ? await subject(data) : subject;\n\n const element = await template(data);\n const html = await renderMail(element);\n\n return {\n html,\n subject: subjectText,\n };\n}\n\nexport default getMail;\n","function transformMailgunDomain(email: string): string {\n return email.split('@')[1];\n}\n\nexport default transformMailgunDomain;\n","import formData from 'form-data';\nimport Mailgun from 'mailgun.js';\n\nimport type { SendableMailObject } from '../../utility/interfaces';\n\nimport transformMailgunDomain from './transform-mailgun-domain';\n\nconst mg = new Mailgun(formData);\n\nasync function sendMailgunMail(sendObject: SendableMailObject): Promise<boolean> {\n if (!process.env.MAIL_API_KEY) {\n throw new Error('Could not send mail via Mailgun. Mail API key has not been set.');\n }\n\n const client = mg.client({\n key: process.env.MAIL_API_KEY,\n url: 'https://api.eu.mailgun.net/',\n username: 'api',\n });\n\n const response = await client.messages.create(transformMailgunDomain(sendObject.from.email), {\n bcc: sendObject.bcc,\n cc: sendObject.cc,\n from: sendObject.from.raw,\n html: sendObject.html,\n subject: sendObject.subject,\n to: sendObject.to,\n });\n\n return response.status === 200;\n}\n\nexport default sendMailgunMail;\n","function transformMailtrapRecipients(emails?: string[] | string): { email: string }[] {\n if (!emails) {\n return [];\n }\n return Array.isArray(emails) ? emails.map((email) => ({ email })) : [{ email: emails }];\n}\n\nexport default transformMailtrapRecipients;\n","import type { SendableMailObject } from '../../utility/interfaces';\n\nimport transformMailtrapRecipients from './transform-mailtrap-recipients';\n\nasync function sendMailtrapMail(sendObject: SendableMailObject): Promise<boolean> {\n if (!process.env.MAIL_API_KEY) {\n throw new Error('Could not send mail via Mailtrap. Mail API key has not been set.');\n }\n\n /*\n * The account id and api key are both in the MAIL_API_KEY variable, separated by a `.`. We need\n * to split them.\n */\n\n const [id, key] = process.env.MAIL_API_KEY.split('.');\n\n const response = await fetch(`https://sandbox.api.mailtrap.io/api/send/${id}`, {\n method: 'POST',\n headers: { 'Api-Token': key, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n attachments: sendObject.attachments,\n bcc: transformMailtrapRecipients(sendObject.bcc),\n cc: transformMailtrapRecipients(sendObject.cc),\n from: sendObject.from,\n html: sendObject.html,\n subject: sendObject.subject,\n to: transformMailtrapRecipients(sendObject.to),\n }),\n });\n\n const json = (await response.json()) as { errors?: string[] };\n\n if (json.errors) {\n throw new Error(`Could not send mail via Mailtrap. ${json.errors[0]}.`);\n }\n\n return true;\n}\n\nexport default sendMailtrapMail;\n","function transformMandrillRecipientGroup(\n group: string[] | string,\n type: 'bcc' | 'cc' | 'to'\n): { email: string; type: 'bcc' | 'cc' | 'to' }[] {\n if (Array.isArray(group)) {\n return group.map((email) => ({ email, type }));\n }\n return [{ email: group, type }];\n}\n\nfunction transformMandrillRecipients(\n to: string[] | string,\n cc?: string[] | string,\n bcc?: string[] | string\n): { email: string; type: 'bcc' | 'cc' | 'to' }[] {\n return [\n ...transformMandrillRecipientGroup(to, 'to'),\n ...transformMandrillRecipientGroup(cc || [], 'cc'),\n ...transformMandrillRecipientGroup(bcc || [], 'bcc'),\n ];\n}\n\nexport default transformMandrillRecipients;\n","import type { SendableMailObject } from '../../utility/interfaces';\n\nimport transformMandrillRecipients from './transform-mandrill-recipients';\n\ninterface MandrillResponse {\n status: string;\n}\n\nasync function sendMandrillMail(sendObject: SendableMailObject): Promise<boolean> {\n if (!process.env.MAIL_API_KEY) {\n throw new Error('Could not send mail via Mandrill. Mail API key has not been set.');\n }\n\n const attachments = sendObject.attachments?.map((attachment) => ({\n content: attachment.content,\n name: attachment.filename,\n type: attachment.type,\n }));\n\n /* eslint-disable camelcase */\n const message = {\n attachments,\n from_email: sendObject.from.email,\n from_name: sendObject.from.name,\n html: sendObject.html,\n subject: sendObject.subject,\n preserve_recipients: true,\n to: transformMandrillRecipients(sendObject.to, sendObject.cc, sendObject.bcc),\n };\n /* eslint-enable camelcase */\n\n const response = await fetch('https://mandrillapp.com/api/1.0/messages/send', {\n method: 'POST',\n body: JSON.stringify({\n key: process.env.MAIL_API_KEY,\n message,\n }),\n });\n\n const json = (await response.json()) as MandrillResponse | [MandrillResponse];\n\n return Array.isArray(json)\n ? json.every((item) => item.status === 'sent')\n : json.status === 'sent';\n}\n\nexport default sendMandrillMail;\n","function transformSendgridRecipients(emails?: string[] | string): { email: string }[] {\n if (!emails) {\n return [];\n }\n return Array.isArray(emails) ? emails.map((email) => ({ email })) : [{ email: emails }];\n}\n\nexport default transformSendgridRecipients;\n","import sgMail from '@sendgrid/mail';\n\nimport type { SendableMailObject } from '../../utility/interfaces';\n\nimport transformSendgridRecipients from './transform-sendgrid-recipients';\n\nasync function sendSendgridMail(sendObject: SendableMailObject): Promise<boolean> {\n if (!process.env.MAIL_API_KEY) {\n throw new Error('Could not send mail via Sendgrid. Mail API key has not been set.');\n }\n\n sgMail.setApiKey(process.env.MAIL_API_KEY);\n\n const response = await sgMail.send({\n attachments: sendObject.attachments,\n bcc: transformSendgridRecipients(sendObject.bcc),\n cc: transformSendgridRecipients(sendObject.cc),\n from: sendObject.from,\n html: sendObject.html,\n to: transformSendgridRecipients(sendObject.to),\n subject: sendObject.subject,\n });\n\n if (!response[0].statusCode.toString().startsWith('2')) {\n throw new Error(`Could not send mail via Sendgrid. ${JSON.stringify(response)}`);\n }\n\n return true;\n}\n\nexport default sendSendgridMail;\n","import type { SenderObject } from './interfaces';\n\nfunction getSenderDetails(from?: string | null): SenderObject {\n if (!from && !process.env.MAIL_FROM) {\n throw new Error(\n 'Mail from address has not been set as an environment variable, or provided in options.'\n );\n }\n\n const matches = /^(?<name>[^<]+)<(?<email>[^>]+)>$/u.exec(from || process.env.MAIL_FROM || '');\n\n if (!matches?.groups?.name || !matches?.groups?.email) {\n throw new Error(\n 'Mail from address is not the correct format. It should be \"Name <email>\".'\n );\n }\n\n return {\n email: matches.groups.email.trim(),\n name: matches.groups.name.trim(),\n raw: `${matches.groups.name.trim()} <${matches.groups.email.trim()}>`,\n };\n}\n\nexport default getSenderDetails;\n","import sendMailgunMail from './drivers/mailgun';\nimport sendMailtrapMail from './drivers/mailtrap';\nimport sendMandrillMail from './drivers/mandrill';\nimport sendSendgridMail from './drivers/sendgrid';\n\nimport getMail from './get-mail';\n\nimport getSenderDetails from './utility/get-sender-details';\nimport type { MailDriver, MailObject, MailOptions, SendableMailObject } from './utility/interfaces';\n\nconst DEVELOPMENT_DRIVERS = ['MAILTRAP'];\nconst PRODUCTION_DRIVERS = ['MAILGUN', 'MAILTRAP', 'MANDRILL', 'SENDGRID'];\n\nconst DEFAULT_DEVELOPMENT_DRIVER = 'MAILTRAP';\nconst DEFAULT_PRODUCTION_DRIVER = 'SENDGRID';\n\nconst driverMap: Record<string, MailDriver> = {\n MAILGUN: sendMailgunMail,\n MAILTRAP: sendMailtrapMail,\n MANDRILL: sendMandrillMail,\n SENDGRID: sendSendgridMail,\n};\n\nasync function sendMail<T extends object>(\n to: string[] | string,\n mail: MailObject<T>,\n data?: T,\n options?: MailOptions\n): Promise<boolean> {\n const from = getSenderDetails(options?.from);\n const { subject, html } = await getMail(mail, data || ({} as T));\n\n const sendObject: SendableMailObject = {\n attachments: options?.attachments,\n bcc: options?.bcc,\n cc: options?.cc,\n from,\n html,\n subject,\n to,\n };\n\n const allowedDriverAliases =\n process.env.MAIL_ENABLE_PRODUCTION === 'true' ? PRODUCTION_DRIVERS : DEVELOPMENT_DRIVERS;\n\n const defaultDriverAlias =\n process.env.MAIL_ENABLE_PRODUCTION === 'true'\n ? DEFAULT_PRODUCTION_DRIVER\n : DEFAULT_DEVELOPMENT_DRIVER;\n\n const driverAlias = process.env.MAIL_DRIVER\n ? process.env.MAIL_DRIVER.toUpperCase()\n : defaultDriverAlias;\n\n if (!allowedDriverAliases.includes(driverAlias) || !driverMap[driverAlias]) {\n throw new Error(\n `Mail driver ${driverAlias} is not supported. If you're in a production environment, you might need to set the MAIL_ENABLE_PRODUCTION environment variable to access this driver.`\n );\n }\n\n const driver = driverMap[driverAlias];\n\n if (!driver) {\n throw new Error(`Mail driver ${driverAlias} is not supported.`);\n }\n\n return driver(sendObject);\n}\n\nexport default sendMail;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/mail/create-mail.ts","../../src/mail/utility/render-mail.ts","../../src/mail/get-mail.ts","../../src/mail/drivers/mailgun/transform-mailgun-domain.ts","../../src/mail/drivers/mailgun/index.ts","../../src/mail/drivers/mailtrap/transform-mailtrap-recipients.ts","../../src/mail/drivers/mailtrap/index.ts","../../src/mail/drivers/mandrill/transform-mandrill-recipients.ts","../../src/mail/drivers/mandrill/index.ts","../../src/mail/drivers/sendgrid/transform-sendgrid-recipients.ts","../../src/mail/drivers/sendgrid/index.ts","../../src/mail/utility/get-sender-details.ts","../../src/mail/send-mail.ts"],"names":["createMail","subject","template","create_mail_default","renderMail","element","ReactDOMServer","resolve","ws","stream","content","write","chunk","enc","next","pipe","render_mail_default","getMail","mail","data","subjectText","get_mail_default","transformMailgunDomain","email","transform_mailgun_domain_default","mg","Mailgun","formData","sendMailgunMail","sendObject","mailgun_default","transformMailtrapRecipients","emails","transform_mailtrap_recipients_default","sendMailtrapMail","id","key","json","pick","mailtrap_default","transformMandrillRecipientGroup","group","type","transformMandrillRecipients","to","cc","bcc","transform_mandrill_recipients_default","sendMandrillMail","message","attachment","item","mandrill_default","transformSendgridRecipients","transform_sendgrid_recipients_default","sendSendgridMail","sgMail","response","sendgrid_default","getSenderDetails","from","matches","get_sender_details_default","DEVELOPMENT_DRIVERS","PRODUCTION_DRIVERS","DEFAULT_DEVELOPMENT_DRIVER","DEFAULT_PRODUCTION_DRIVER","driverMap","sendMail","options","html","allowedDriverAliases","defaultDriverAlias","driverAlias","driver","send_mail_default"],"mappings":"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","file":"index.js","sourcesContent":["import type { MailObject } from './utility/interfaces';\n\nfunction createMail<T extends object>(\n subject: string | ((data: T) => Promise<string> | string),\n template: (data: T) => Promise<React.ReactElement> | React.ReactElement\n): MailObject<T> {\n return { subject, template };\n}\n\nexport default createMail;\n","import stream from 'node:stream';\n\nasync function renderMail(element: React.ReactElement): Promise<string> {\n const ReactDOMServer = (await import('react-dom/server')).default;\n\n return new Promise((resolve) => {\n const ws = new stream.Writable();\n let content = '';\n\n function write<T extends { toString: () => string }>(\n chunk: T,\n enc: BufferEncoding,\n next: (error?: Error | null) => void\n ): void {\n content += chunk.toString();\n next();\n }\n\n ws._write = write; // eslint-disable-line no-underscore-dangle\n\n const { pipe } = ReactDOMServer.renderToPipeableStream(element, {\n onShellReady: () => {\n pipe(ws);\n resolve(content);\n },\n });\n });\n}\n\nexport default renderMail;\n","import renderMail from './utility/render-mail';\nimport type { MailObject } from './utility/interfaces';\n\nasync function getMail<T extends object>(\n mail: MailObject<T>,\n data: T\n): Promise<{ subject: string; html: string }> {\n const { subject, template } = mail;\n\n const subjectText = typeof subject === 'function' ? await subject(data) : subject;\n\n const element = await template(data);\n const html = await renderMail(element);\n\n return {\n html,\n subject: subjectText,\n };\n}\n\nexport default getMail;\n","function transformMailgunDomain(email: string): string {\n return email.split('@')[1];\n}\n\nexport default transformMailgunDomain;\n","import formData from 'form-data';\nimport Mailgun from 'mailgun.js';\n\nimport type { SendableMailObject } from '../../utility/interfaces';\n\nimport transformMailgunDomain from './transform-mailgun-domain';\n\nconst mg = new Mailgun(formData);\n\nasync function sendMailgunMail(sendObject: SendableMailObject): Promise<boolean> {\n if (!process.env.MAIL_API_KEY) {\n throw new Error('Could not send mail via Mailgun. Mail API key has not been set.');\n }\n\n const client = mg.client({\n key: process.env.MAIL_API_KEY,\n url: 'https://api.eu.mailgun.net/',\n username: 'api',\n });\n\n const response = await client.messages.create(transformMailgunDomain(sendObject.from.email), {\n bcc: sendObject.bcc,\n cc: sendObject.cc,\n from: sendObject.from.raw,\n html: sendObject.html,\n subject: sendObject.subject,\n to: sendObject.to,\n });\n\n return response.status === 200;\n}\n\nexport default sendMailgunMail;\n","function transformMailtrapRecipients(emails?: string[] | string): { email: string }[] {\n if (!emails) {\n return [];\n }\n return Array.isArray(emails) ? emails.map((email) => ({ email })) : [{ email: emails }];\n}\n\nexport default transformMailtrapRecipients;\n","import { pick } from '@sqrzro/utility';\n\nimport type { SendableMailObject } from '../../utility/interfaces';\n\nimport transformMailtrapRecipients from './transform-mailtrap-recipients';\n\nasync function sendMailtrapMail(sendObject: SendableMailObject): Promise<boolean> {\n if (!process.env.MAIL_API_KEY) {\n throw new Error('Could not send mail via Mailtrap. Mail API key has not been set.');\n }\n\n /*\n * The account id and api key are both in the MAIL_API_KEY variable, separated by a `.`. We need\n * to split them.\n */\n\n const [id, key] = process.env.MAIL_API_KEY.split('.');\n\n const response = await fetch(`https://sandbox.api.mailtrap.io/api/send/${id}`, {\n method: 'POST',\n headers: { 'Api-Token': key, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n attachments: sendObject.attachments,\n bcc: transformMailtrapRecipients(sendObject.bcc),\n cc: transformMailtrapRecipients(sendObject.cc),\n from: pick(sendObject.from, ['email', 'name']),\n html: sendObject.html,\n subject: sendObject.subject,\n to: transformMailtrapRecipients(sendObject.to),\n }),\n });\n\n const json = (await response.json()) as { errors?: string[] };\n\n if (json.errors) {\n throw new Error(`Could not send mail via Mailtrap. ${json.errors[0]}.`);\n }\n\n return true;\n}\n\nexport default sendMailtrapMail;\n","function transformMandrillRecipientGroup(\n group: string[] | string,\n type: 'bcc' | 'cc' | 'to'\n): { email: string; type: 'bcc' | 'cc' | 'to' }[] {\n if (Array.isArray(group)) {\n return group.map((email) => ({ email, type }));\n }\n return [{ email: group, type }];\n}\n\nfunction transformMandrillRecipients(\n to: string[] | string,\n cc?: string[] | string,\n bcc?: string[] | string\n): { email: string; type: 'bcc' | 'cc' | 'to' }[] {\n return [\n ...transformMandrillRecipientGroup(to, 'to'),\n ...transformMandrillRecipientGroup(cc || [], 'cc'),\n ...transformMandrillRecipientGroup(bcc || [], 'bcc'),\n ];\n}\n\nexport default transformMandrillRecipients;\n","import type { SendableMailObject } from '../../utility/interfaces';\n\nimport transformMandrillRecipients from './transform-mandrill-recipients';\n\ninterface MandrillResponse {\n status: string;\n}\n\nasync function sendMandrillMail(sendObject: SendableMailObject): Promise<boolean> {\n if (!process.env.MAIL_API_KEY) {\n throw new Error('Could not send mail via Mandrill. Mail API key has not been set.');\n }\n\n const attachments = sendObject.attachments?.map((attachment) => ({\n content: attachment.content,\n name: attachment.filename,\n type: attachment.type,\n }));\n\n /* eslint-disable camelcase */\n const message = {\n attachments,\n from_email: sendObject.from.email,\n from_name: sendObject.from.name,\n html: sendObject.html,\n subject: sendObject.subject,\n preserve_recipients: true,\n to: transformMandrillRecipients(sendObject.to, sendObject.cc, sendObject.bcc),\n };\n /* eslint-enable camelcase */\n\n const response = await fetch('https://mandrillapp.com/api/1.0/messages/send', {\n method: 'POST',\n body: JSON.stringify({\n key: process.env.MAIL_API_KEY,\n message,\n }),\n });\n\n const json = (await response.json()) as MandrillResponse | [MandrillResponse];\n\n return Array.isArray(json)\n ? json.every((item) => item.status === 'sent')\n : json.status === 'sent';\n}\n\nexport default sendMandrillMail;\n","function transformSendgridRecipients(emails?: string[] | string): { email: string }[] {\n if (!emails) {\n return [];\n }\n return Array.isArray(emails) ? emails.map((email) => ({ email })) : [{ email: emails }];\n}\n\nexport default transformSendgridRecipients;\n","import sgMail from '@sendgrid/mail';\nimport { pick } from '@sqrzro/utility';\n\nimport type { SendableMailObject } from '../../utility/interfaces';\n\nimport transformSendgridRecipients from './transform-sendgrid-recipients';\n\nasync function sendSendgridMail(sendObject: SendableMailObject): Promise<boolean> {\n if (!process.env.MAIL_API_KEY) {\n throw new Error('Could not send mail via Sendgrid. Mail API key has not been set.');\n }\n\n sgMail.setApiKey(process.env.MAIL_API_KEY);\n\n const response = await sgMail.send({\n attachments: sendObject.attachments,\n bcc: transformSendgridRecipients(sendObject.bcc),\n cc: transformSendgridRecipients(sendObject.cc),\n from: pick(sendObject.from, ['email', 'name']),\n html: sendObject.html,\n to: transformSendgridRecipients(sendObject.to),\n subject: sendObject.subject,\n });\n\n if (!response[0].statusCode.toString().startsWith('2')) {\n throw new Error(`Could not send mail via Sendgrid. ${JSON.stringify(response)}`);\n }\n\n return true;\n}\n\nexport default sendSendgridMail;\n","import type { SenderObject } from './interfaces';\n\nfunction getSenderDetails(from?: string | null): SenderObject {\n if (!from && !process.env.MAIL_FROM) {\n throw new Error(\n 'Mail from address has not been set as an environment variable, or provided in options.'\n );\n }\n\n const matches = /^(?<name>[^<]+)<(?<email>[^>]+)>$/u.exec(from || process.env.MAIL_FROM || '');\n\n if (!matches?.groups?.name || !matches?.groups?.email) {\n throw new Error(\n 'Mail from address is not the correct format. It should be \"Name <email>\".'\n );\n }\n\n return {\n email: matches.groups.email.trim(),\n name: matches.groups.name.trim(),\n raw: `${matches.groups.name.trim()} <${matches.groups.email.trim()}>`,\n };\n}\n\nexport default getSenderDetails;\n","import sendMailgunMail from './drivers/mailgun';\nimport sendMailtrapMail from './drivers/mailtrap';\nimport sendMandrillMail from './drivers/mandrill';\nimport sendSendgridMail from './drivers/sendgrid';\n\nimport getMail from './get-mail';\n\nimport getSenderDetails from './utility/get-sender-details';\nimport type { MailDriver, MailObject, MailOptions, SendableMailObject } from './utility/interfaces';\n\nconst DEVELOPMENT_DRIVERS = ['MAILTRAP'];\nconst PRODUCTION_DRIVERS = ['MAILGUN', 'MAILTRAP', 'MANDRILL', 'SENDGRID'];\n\nconst DEFAULT_DEVELOPMENT_DRIVER = 'MAILTRAP';\nconst DEFAULT_PRODUCTION_DRIVER = 'SENDGRID';\n\nconst driverMap: Record<string, MailDriver> = {\n MAILGUN: sendMailgunMail,\n MAILTRAP: sendMailtrapMail,\n MANDRILL: sendMandrillMail,\n SENDGRID: sendSendgridMail,\n};\n\nasync function sendMail<T extends object>(\n to: string[] | string,\n mail: MailObject<T>,\n data?: T,\n options?: MailOptions\n): Promise<boolean> {\n const from = getSenderDetails(options?.from);\n const { subject, html } = await getMail(mail, data || ({} as T));\n\n const sendObject: SendableMailObject = {\n attachments: options?.attachments,\n bcc: options?.bcc,\n cc: options?.cc,\n from,\n html,\n subject,\n to,\n };\n\n const allowedDriverAliases =\n process.env.MAIL_ENABLE_PRODUCTION === 'true' ? PRODUCTION_DRIVERS : DEVELOPMENT_DRIVERS;\n\n const defaultDriverAlias =\n process.env.MAIL_ENABLE_PRODUCTION === 'true'\n ? DEFAULT_PRODUCTION_DRIVER\n : DEFAULT_DEVELOPMENT_DRIVER;\n\n const driverAlias = process.env.MAIL_DRIVER\n ? process.env.MAIL_DRIVER.toUpperCase()\n : defaultDriverAlias;\n\n if (!allowedDriverAliases.includes(driverAlias) || !driverMap[driverAlias]) {\n throw new Error(\n `Mail driver ${driverAlias} is not supported. If you're in a production environment, you might need to set the MAIL_ENABLE_PRODUCTION environment variable to access this driver.`\n );\n }\n\n const driver = driverMap[driverAlias];\n\n if (!driver) {\n throw new Error(`Mail driver ${driverAlias} is not supported.`);\n }\n\n return driver(sendObject);\n}\n\nexport default sendMail;\n"]}
|