UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

2 lines 4.38 kB
import{copy as e}from"../../../libs/i18n/copy.mjs";import t from"../../../utils/helpers/format-bytes.mjs";import{getMediaKeyTenantKey as n,resolveMediaKeyTenant as r}from"../../../utils/media/media-key-tenant.mjs";import i from"../adjust-storage-usage.mjs";import a from"../checks/check-can-update-media.mjs";import o from"../checks/check-has-media-strategy.mjs";import s from"../helpers/validate-uploaded-media.mjs";const c=async(c,l)=>{let u=await o(c);if(u.error)return u;let d=r(c.config,l.updatedKey),f=r(c.config,l.targetKey),p=r(c.config,l.previousKey),m=async()=>{await u.data.delete(c,{key:l.updatedKey,tenant:d})},h=async e=>{e!==0&&await i(c,{tenantKey:l.tenantKey,delta:e*-1,min:0})},g=await u.data.getMeta(c,{key:l.updatedKey,tenant:d});if(g.error)return g;let _=await a(c,{size:g.data.size});if(_.error)return await m(),_;let v=await s({context:c,stream:u.data.stream,tenant:d,key:l.updatedKey,fileName:l.fileName,mimeType:g.data.mimeType,allowedType:l.allowedType,expectedType:l.previousType});if(v.error)return await m(),v;let y=g.data.size-l.previousSize,b=c.config.media.limits.storageBytes,x=await i(c,{tenantKey:l.tenantKey,delta:y,max:b===!1?void 0:b,min:0});if(x.error)return await m(),x;if(!x.data.applied)return await m(),b===!1?{error:{type:`basic`,status:500},data:void 0}:{error:{type:`basic`,message:e(`server:core.files.validation.storage.limit.exceeded`,{data:{size:t(b)}}),status:500,errors:{file:{code:`storage`,message:e(`server:core.files.validation.storage.limit.exceeded`,{data:{size:t(b)}})}}},data:void 0};let S=async e=>{let t=await u.data.getMeta(c,{key:l.targetKey,tenant:f});return t.error||!(t.data.size===g.data.size&&t.data.mimeType===v.data.mimeType)||e?.requireChangedEtag&&l.previousEtag&&t.data.etag===l.previousEtag&&t.data.etag!==g.data.etag?null:t.data},C=async e=>(await h(y),{error:{type:`basic`,message:e,status:500,errors:{file:{code:`media_error`,message:e}}},data:void 0}),w=n(l.updatedKey)!==n(l.targetKey);if(l.targetKey===l.previousKey||w){let t=await u.data.stream(c,{key:l.updatedKey,tenant:d});if(t.error)return await m(),await C(t.error.message??e(`server:core.errors.unknown`));let n=await u.data.upload(c,{key:l.targetKey,body:t.data.body instanceof Uint8Array?Buffer.from(t.data.body):t.data.body,mimeType:v.data.mimeType,extension:v.data.extension,size:g.data.size,type:v.data.type,tenant:f}),r=n.error===void 0?await S():await S(l.targetKey===l.previousKey?{requireChangedEtag:!0}:void 0);if(!r)return await m(),await C(n.error?.message??e(`server:core.errors.unknown`));if(l.targetKey!==l.previousKey){let e=await u.data.delete(c,{key:l.previousKey,tenant:p});if(e.error)return await u.data.delete(c,{key:l.targetKey,tenant:f}),await h(y),{error:{type:`basic`,message:e.error.message,status:500,errors:{file:{code:`media_error`,message:e.error.message}}},data:void 0}}let i=!0;return(await u.data.delete(c,{key:l.updatedKey,tenant:d})).error&&(i=!1),{error:void 0,data:{mimeType:r.mimeType??v.data.mimeType,type:v.data.type,extension:v.data.extension,size:r.size,key:l.targetKey,etag:r.etag,sourceDeleted:i}}}let T=await u.data.rename(c,{from:l.updatedKey,to:l.targetKey,tenant:f});if(T.error){let t=await S();if(!t)return await C(T.error.message??e(`server:core.errors.unknown`));let n=(await u.data.delete(c,{key:l.updatedKey,tenant:d})).error===void 0;if(l.targetKey!==l.previousKey){let e=await u.data.delete(c,{key:l.previousKey,tenant:p});if(e.error)return await u.data.delete(c,{key:l.targetKey,tenant:f}),await h(y),{error:{type:`basic`,message:e.error.message,status:500,errors:{file:{code:`media_error`,message:e.error.message}}},data:void 0}}return{error:void 0,data:{mimeType:t.mimeType??v.data.mimeType,type:v.data.type,extension:v.data.extension,size:t.size,key:l.targetKey,etag:t.etag,sourceDeleted:n}}}let E=await S();if(!E)return await C(e(`server:core.errors.unknown`));if(l.targetKey!==l.previousKey){let e=await u.data.delete(c,{key:l.previousKey,tenant:p});if(e.error)return await u.data.delete(c,{key:l.targetKey,tenant:f}),await h(y),{error:{type:`basic`,message:e.error.message,status:500,errors:{file:{code:`media_error`,message:e.error.message}}},data:void 0}}return{error:void 0,data:{mimeType:E.mimeType??v.data.mimeType,type:v.data.type,extension:v.data.extension,size:E.size,key:l.targetKey,etag:E.etag,sourceDeleted:!0}}};export{c as default}; //# sourceMappingURL=update.mjs.map