@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 1.76 kB
JavaScript
import{copy as e}from"../i18n/copy.mjs";import{translate as t}from"../i18n/translate.mjs";import n from"zod";const r=/^[A-Za-z0-9!#$&^_.+-]+\/[A-Za-z0-9!#$&^_.+-]+$/,i=e=>{try{return[`http:`,`https:`].includes(new URL(e).protocol)}catch{return!1}},a=e=>e.length<1||e.length>127||/\s/.test(e)?!1:[...e].every(e=>{let t=e.charCodeAt(0);return t>31&&t!==127}),o=n.object({type:n.literal(`url`),url:n.url().refine(e=>i(e),{message:t(`server:core.email.attachment.url.must.use.http`)}),filename:n.string().trim().refine(e=>e.length<1||e.length>255||e===`.`||e===`..`||/[\\/]/.test(e)?!1:[...e].every(e=>{let t=e.charCodeAt(0);return t>31&&t!==127}),t(`server:core.email.attachment.filename.invalid`)),contentType:n.string().trim().regex(r,t(`server:core.email.attachment.content.type.invalid`)).optional()}),s=n.union([o.extend({disposition:n.literal(`attachment`).optional().default(`attachment`),contentId:n.never().optional()}),o.extend({disposition:n.literal(`inline`),contentId:n.string().trim().refine(a,t(`server:core.email.attachment.content.id.invalid`))})]),c=n.array(s).max(10,t(`server:core.email.attachment.max.attachments`,{data:{max:10}})).superRefine((e,n)=>{let r=new Set;for(let[i,a]of e.entries())a.disposition===`inline`&&(r.has(a.contentId)&&n.addIssue({code:`custom`,path:[i,`contentId`],message:t(`server:core.email.attachment.content.id.must.be.unique`)}),r.add(a.contentId))}),l=t=>{if(!t||t.length===0)return{error:void 0,data:[]};let n=c.safeParse(t);return n.success?{error:void 0,data:n.data}:{error:{type:`validation`,name:e(`server:core.errors.validation.name`),message:e(`server:core.errors.validation.message`),status:400,zod:n.error},data:void 0}};export{l as normalizeEmailAttachments};
//# sourceMappingURL=attachments.mjs.map