UNPKG

@lucidcms/core

Version:

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

2 lines 5.26 kB
import{copy as e}from"../../libs/i18n/copy.mjs";import t from"../../constants/constants.mjs";import n from"../../utils/helpers/get-base-url.mjs";import r from"../../libs/repositories/media.mjs";import i from"../../libs/repositories/media-awaiting-sync.mjs";import a from"../../libs/repositories/media-translations.mjs";import{resolveMediaKeyTenant as o}from"../../utils/media/media-key-tenant.mjs";import s from"../../utils/media/get-key-visibility.mjs";import c from"../../libs/formatters/media.mjs";import l from"../../libs/kv/cache-keys.mjs";import u from"../../libs/hooks/execute-hooks.mjs";import{invalidateHttpCacheTags as d}from"../../libs/kv/http-cache.mjs";import f from"./checks/check-media-key-access.mjs";import p from"./checks/check-awaiting-sync.mjs";import m from"../media-folders/checks/check-folder-access.mjs";import h from"./helpers/check-folder-tenant-compatibility.mjs";import g from"./helpers/prepare-media-translations.mjs";import _ from"./helpers/resolve-ai-generation.mjs";import v from"./helpers/resolve-poster.mjs";import y from"./helpers/sync-owned-visibility.mjs";import b from"./helpers/upsert-crop.mjs";import x from"./strategies/delete.mjs";import S from"./strategies/sync-media.mjs";const C=async(C,w)=>{let T=new r(C.db.client,C.config.db),E=new a(C.db.client,C.config.db),D=new i(C.db.client,C.config.db),O=await m(C,{folderId:w.folderId});if(O.error)return O;let k=C.request.tenantKey??null,A=h({folderId:w.folderId,folderTenantKey:O.data?.tenant_key??null,mediaTenantKey:k});if(A.error)return A;let j=await f(C,{key:w.key});if(j.error)return j;let M=await p(C,{key:w.key});if(M.error)return M;let N=await S(C,{key:w.key,fileName:w.fileName,allowedType:w.allowedType});if(N.error)return N;let P=N.data.key;if(w.focalPoint!==void 0&&N.data.type!==`image`)return await x(C,{key:P,size:N.data.size,processedSize:0,tenantKey:k}),{error:{type:`basic`,status:400,errors:{focalPoint:{code:`media_error`,message:e(`server:core.media.errors.focal.point.image.only`)}}},data:void 0};if(w.crop!==void 0&&N.data.type!==`image`)return await x(C,{key:P,size:N.data.size,processedSize:0,tenantKey:k}),{error:{type:`basic`,status:400,message:e(`server:core.media.errors.image.only`)},data:void 0};let F=s(P)===t.media.visibilityKeys.public;if(w.posterId!=null&&N.data.type!==`video`)return{error:{type:`basic`,status:400,message:e(`server:core.media.poster.video.only`)},data:void 0};if(w.posterId!==void 0&&w.posterId!==null){let e=await v(C,{posterId:w.posterId});if(e.error)return e}let I=await _(C,{origin:w.origin,aiGenerationRequestId:w.aiGenerationRequestId});if(I.error)return I;let L=N.data.type===`image`,[R,z]=await Promise.all([T.createSingle({data:{key:P,parent_media_id:null,relation_type:null,e_tag:N.data.etag??void 0,origin:w.origin,ai_generation_id:I.data,public:F,type:N.data.type,mime_type:N.data.mimeType,file_extension:N.data.extension,file_name:w.fileName,file_size:N.data.size,width:L?w.width??null:null,height:L?w.height??null:null,focal_x:N.data.type===`image`&&w.focalPoint?Math.round(w.focalPoint.x*1e4):null,focal_y:N.data.type===`image`&&w.focalPoint?Math.round(w.focalPoint.y*1e4):null,blur_hash:L?w.blurHash??null:null,average_color:L?w.averageColor??null:null,base64:L?w.base64??null:null,is_dark:L?w.isDark??null:null,is_light:L?w.isLight??null:null,folder_id:w.folderId??null,is_hidden:w.isHidden??!1,tenant_key:k,created_by:w.userId,updated_by:w.userId,updated_at:new Date().toISOString(),created_at:new Date().toISOString()},returning:[`id`]}),D.deleteSingle({where:[{key:`key`,operator:`=`,value:w.key}],returning:[`key`],validation:{enabled:!0}})]);if(R.error)return R;if(z.error)return z;if(R.data===void 0)return C.media&&await C.media.delete(C,{key:P,tenant:o(C.config,P)}),{error:{type:`basic`,status:500},data:void 0};if(w.posterId!==void 0&&w.posterId!==null){let e=await T.updateSingle({where:[{key:`id`,operator:`=`,value:w.posterId}],data:{is_hidden:!0,folder_id:null,parent_media_id:R.data.id,relation_type:`poster`,updated_at:new Date().toISOString(),updated_by:w.userId},validation:{enabled:!0}});if(e.error)return e}if(w.crop){let e=await b(C,{parent:{id:R.data.id,key:P,type:N.data.type,origin:w.origin,public:F,tenant_key:k,relation_type:null},crop:w.crop,userId:w.userId});if(e.error)return e}let B=await y(C,{parentId:R.data.id,public:F,userId:w.userId});if(B.error)return B;let V=g({title:w.title||[],alt:L?w.alt??[]:[],description:N.data.type===`video`||N.data.type===`audio`?w.description??[]:[],summary:N.data.type===`document`?w.summary??[]:[],mediaId:R.data.id});if(V.length>0){let e=await E.upsertMultiple({data:V,returning:[`id`],validation:{enabled:!0}});if(e.error)return C.media&&await C.media.delete(C,{key:P,tenant:o(C.config,P)}),e}await d(C,[l.http.tags.clientMedia]);let H=await T.selectSingleById({id:R.data.id,tenantKey:C.request.tenantKey,validation:{enabled:!0,defaultError:{message:e(`server:core.media.not.found.message`),status:404}}});if(H.error)return H;let U=c.formatSingle({media:H.data,host:n(C)}),W=await u(C,{service:`media`,event:`afterCreate`,config:C.config},{meta:{tenantKey:C.request.tenantKey??null},data:{id:H.data.id,userId:w.userId,media:U}});return W.error?W:{error:void 0,data:U}};export{C as default}; //# sourceMappingURL=create-single.mjs.map