@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 16.7 kB
JavaScript
import{lucid_error_default as e,translations_default as t}from"./errors-RyYO6qM6.js";import{prefix_generated_column_name_default as n}from"./build-table-name-yLR81YJn.js";import r from"slug";import{getMonth as i,getYear as a}from"date-fns";import o from"mime-types";import s from"node:crypto";var c=class{formatMultiple=e=>{if(!e.roles)return{roles:[],permissions:[]};let t=new Set;for(let n of e.roles){if(!n.permissions)continue;for(let e of n.permissions)t.add(e.permission)}return{roles:e.roles.map(({id:e,name:t})=>({id:e,name:t})),permissions:Array.from(t)}}},l=class{formatMultiple=e=>e.users.map(e=>this.formatSingle({user:e}));formatSingle=e=>{let{roles:t,permissions:n}=new c().formatMultiple({roles:e.user.roles||[]});return{id:e.user.id,superAdmin:I.formatBoolean(e.user.super_admin??!1),email:e.user.email,username:e.user.username,firstName:e.user.first_name,lastName:e.user.last_name,roles:t,permissions:n,triggerPasswordReset:I.formatBoolean(e.user.triggered_password_reset),createdAt:I.formatDate(e.user.created_at),updatedAt:I.formatDate(e.user.updated_at)}}},u=class{formatMultiple=e=>e.roles.map(e=>this.formatSingle({role:e}));formatSingle=e=>({id:e.role.id,name:e.role.name,description:e.role.description,permissions:e.role.permissions?.map(e=>({id:e.id,permission:e.permission})),createdAt:I.formatDate(e.role.created_at),updatedAt:I.formatDate(e.role.updated_at)})},d=class{formatSingle=e=>({email:{enabled:e.config.email!==void 0,from:e.config.email?.from??null},media:{enabled:e.config.media?.strategy!==void 0,storage:{total:e.config.media.storageLimit,remaining:e.config.media.storageLimit-e.settings.mediaStorageUsed,used:e.settings.mediaStorageUsed},processed:{stored:e.config.media.storeProcessedImages,imageLimit:e.config.media.processedImageLimit,total:e.settings.processedImageCount}}})},f=class{formatMultiple=e=>Object.values(e.permissions)},p=class{formatSingle=e=>({name:e.option.name,valueText:e.option.value_text,valueInt:e.option.value_int,valueBool:I.formatBoolean(e.option.value_bool)})};const m=e=>{let[t,n]=e.key.split(`.`),r=`processed/${t}`;return e.options.quality&&(r=r.concat(`-${e.options.quality}`)),e.options.width&&(r=r.concat(`-${e.options.width}`)),e.options.height&&(r=r.concat(`-${e.options.height}`)),r=e.options.format?r.concat(`.${e.options.format}`):r.concat(`.${n}`),e.public?`public/${r}`:`private/${r}`};var h=m;const g=(e,t)=>{if(t)return t;if(e){if(e.includes(`image/webp`))return`webp`;if(e.includes(`image/avif`))return`avif`}};var _=g;const v=e=>e.urlStrategy?e.urlStrategy({key:e.key}):`${e.host}/cdn/v1/${e.key}`;var y=v;const b=e=>{let[n,o]=e.name.split(`.`),s=e.extension||o;if(!n||!s)return{error:{type:`basic`,name:t(`media_name_invalid`),message:t(`media_name_invalid`),status:400},data:void 0};let c=r(n,{lower:!0});c.length>254&&(c=c.slice(0,254));let l=Math.random().toString(36).slice(-6),u=new Date,d=i(u),f=d+1>=10?`${d+1}`:`0${d+1}`,p=`${a(u)}/${f}/${l}-${c}.${s}`;return{error:void 0,data:e.public?`public/${p}`:`private/${p}`}};var x=b;const S=e=>{let t=e?.toLowerCase();return t?t.includes(`image`)?`image`:t.includes(`video`)?`video`:t.includes(`audio`)?`audio`:t.includes(`pdf`)||t.startsWith(`application/vnd`)?`document`:t.includes(`zip`)||t.includes(`tar`)?`archive`:`unknown`:`unknown`};var C=S;const w=async e=>{let n=e.mimeType,r=o.extension(n??``)||e.fileName.split(`.`).pop()||``;if(n==null&&(n=o.lookup(r)||null),n==null)return{error:{type:`basic`,name:t(`media_error_getting_metadata`),message:t(`media_error_getting_metadata`),status:500},data:void 0};let i=C(n);return{error:void 0,data:{mimeType:n,type:i,extension:r}}};var T=w,E=class{formatMultiple=e=>e.media.map(t=>this.formatSingle({media:t,host:e.host,urlStrategy:e.urlStrategy}));formatSingle=e=>({id:e.media.id,key:e.media.key,url:y({key:e.media.key,host:e.host,urlStrategy:e.urlStrategy}),title:e.media.title_translations?.map(e=>({value:e.value,localeCode:e.locale_code}))??[],alt:e.media.alt_translations?.map(e=>({value:e.value,localeCode:e.locale_code}))??[],type:e.media.type,meta:{mimeType:e.media.mime_type,extension:e.media.file_extension,fileSize:e.media.file_size,width:e.media.width,height:e.media.height,blurHash:e.media.blur_hash,averageColour:e.media.average_colour,isDark:I.formatBoolean(e.media.is_dark),isLight:I.formatBoolean(e.media.is_light)},createdAt:I.formatDate(e.media.created_at),updatedAt:I.formatDate(e.media.updated_at)})},D=class{formatMultiple=e=>e.locales.map(t=>{let n=e.localisation.locales.find(e=>e.code===t.code);return n?this.formatSingle({locale:t,configLocale:n,defaultLocale:e.localisation.defaultLocale}):null}).filter(e=>e!==null);formatSingle=e=>({code:e.locale.code,name:e.configLocale.label,isDefault:e.locale.code===e.defaultLocale,createdAt:I.formatDate(e.locale.created_at),updatedAt:I.formatDate(e.locale.updated_at)})},O=class{formatMultiple=e=>e.emails.map(e=>this.formatSingle({email:e}));formatSingle=e=>({id:e.email.id,emailHash:e.email.email_hash,type:e.email.type,deliveryStatus:e.email.delivery_status,mailDetails:{from:{address:e.email.from_address,name:e.email.from_name},to:e.email.to_address,subject:e.email.subject,cc:e.email.cc,bcc:e.email.bcc,template:e.email.template},data:e.email.data??null,sentCount:e.email.sent_count||0,errorCount:e.email.error_count||0,errorMessage:e.email.last_error_message,html:e.html??null,strategyIdentifier:e.email.strategy_identifier,strategyData:e.email.strategy_data,lastSuccessAt:I.formatDate(e.email.last_success_at),lastAttemptAt:I.formatDate(e.email.last_attempt_at),createdAt:I.formatDate(e.email.created_at)})},k=class{formatMultiple=e=>e.collections.map(t=>this.formatSingle({collection:t,include:e.include,documents:e.documents}));formatSingle=e=>{let t=e.collection.getData,n=e.collection.key;return{key:n,mode:t.mode,documentId:e.include?.documentId?this.getDocumentId(n,e.documents):void 0,details:{name:t.details.name,singularName:t.details.singularName,summary:t.details.summary},config:{useTranslations:t.config.useTranslations,useDrafts:t.config.useDrafts,useRevisions:t.config.useRevisions,isLocked:t.config.isLocked,displayInListing:e.collection.displayInListing,useAutoSave:t.config.useAutoSave},migrationStatus:e.migrationStatus??null,fixedBricks:e.include?.bricks?e.collection.fixedBricks??[]:[],builderBricks:e.include?.bricks?e.collection.builderBricks??[]:[],fields:e.include?.fields?e.collection.fieldTree??[]:[]}};getDocumentId=(e,t)=>{let n=t?.find(t=>t.collection_key===e);return n?.id??void 0}},A=class{formatMultiple=e=>e.integrations.map(e=>this.formatSingle({integration:e}));formatSingle=e=>({id:e.integration.id,key:e.integration.key,name:e.integration.name,description:e.integration.description,enabled:I.formatBoolean(e.integration.enabled),createdAt:I.formatDate(e.integration.created_at),updatedAt:I.formatDate(e.integration.updated_at)})},j=class{formatMultiple=e=>{let t=e.bricksSchema.filter(e=>e.type===`brick`);if(t.length===0)return[];let n=[];for(let r of t){let t=e.bricksQuery[r.name];if(!t||t.length===0)continue;let i=Map.groupBy(t,e=>e.brick_instance_id);for(let[t,a]of i.entries()){if(t===void 0||!a||a.length===0)continue;let i=a[0];if(!i||!i.brick_type)continue;let o=r.key.brick;if(!o)continue;let c=e.collection.brickInstances.find(e=>e.key===o);if(!c)continue;let l=I.get(`document-fields`);n.push({ref:s.randomUUID(),key:o,order:i.position,open:I.formatBoolean(i.is_open),type:i.brick_type,id:i.id,fields:l.formatMultiple({brickRows:a,bricksQuery:e.bricksQuery,bricksSchema:e.bricksSchema,relationMetaData:e.relationMetaData},{host:e.config.host,builder:c,collection:e.collection,localisation:{locales:e.config.localisation.locales.map(e=>e.code),default:e.config.localisation.defaultLocale},brickKey:o,config:e.config,bricksTableSchema:e.bricksSchema})})}}return n.sort((e,t)=>e.order-t.order)};formatDocumentFields=e=>{let t=e.bricksSchema.find(e=>e.type===`document-fields`);if(!t)return[];let n=e.bricksQuery[t.name];if(!n)return[];let r=Map.groupBy(n,e=>e.position),i=r.get(0);if(!i)return[];let a=I.get(`document-fields`);return a.formatMultiple({brickRows:i,bricksQuery:e.bricksQuery,bricksSchema:e.bricksSchema,relationMetaData:e.relationMetaData},{host:e.config.host,builder:e.collection,collection:e.collection,localisation:{locales:e.config.localisation.locales.map(e=>e.code),default:e.config.localisation.defaultLocale},brickKey:void 0,config:e.config,bricksTableSchema:e.bricksSchema})};static getBrickRepeaterRows=e=>{let t=e.bricksSchema.find(t=>!(t.key.collection!==e.collectionKey||e.brickKey!==void 0&&t.key.brick!==e.brickKey||t.type!==`repeater`||e.brickKey===void 0&&t.key.brick!==void 0||!t.key.repeater||t.key.repeater.length===0||t.key.repeater.length!==e.repeaterLevel+1||t.key.repeater[t.key.repeater.length-1]!==e.repeaterKey));if(t&&t.name in e.bricksQuery){let n=e.bricksQuery[t.name];return n?e.repeaterLevel===0?n.filter(t=>t.brick_id&&e.relationIds.includes(t.brick_id)):n.filter(t=>t.parent_id&&e.relationIds.includes(t.parent_id)):[]}return[]}},M=class{formatMultiple=(e,t)=>this.buildFieldTree(e,{builder:t.builder,fieldConfig:t.builder.fieldTreeNoTab,host:t.host,localisation:t.localisation,collection:t.collection,brickKey:t.brickKey,config:t.config,bricksTableSchema:t.bricksTableSchema});buildFieldTree=(e,t)=>{let r=[];for(let i of t.fieldConfig){if(i.type===`repeater`){r.push({key:i.key,type:i.type,groupRef:t.groupRef,groups:this.buildGroups(e,{builder:t.builder,repeaterConfig:i,host:t.host,localisation:t.localisation,collection:t.collection,brickKey:t.brickKey,repeaterLevel:t.repeaterLevel||0,config:t.config,bricksTableSchema:t.bricksTableSchema})});continue}let a=n(i.key),o=e.brickRows.flatMap(e=>({value:e[a],locale:e.locale})),s=this.buildField({values:o,relationMetaData:e.relationMetaData},{builder:t.builder,fieldConfig:i,host:t.host,localisation:t.localisation,collection:t.collection,brickKey:t.brickKey,config:t.config,groupRef:t.groupRef,bricksTableSchema:t.bricksTableSchema});s&&r.push(s)}return r};buildField=(e,t)=>{let n=t.builder.fields.get(t.fieldConfig.key);if(!n)return null;if(t.fieldConfig.type!==`repeater`&&t.fieldConfig.type!==`tab`&&t.fieldConfig.config.useTranslations===!0&&t.collection.getData.config.useTranslations===!0){let r={},i={};for(let a of t.localisation.locales){let o=e.values.find(e=>e.locale===a);o?(r[a]=n.formatResponseValue(o.value),i[a]=n.formatResponseMeta(this.fetchRelationData(e.relationMetaData,{type:t.fieldConfig.type,value:o.value,fieldConfig:t.fieldConfig}),t)):(r[a]=null,i[a]=null)}return{key:t.fieldConfig.key,type:t.fieldConfig.type,groupRef:t.groupRef,translations:r,meta:i}}let r=e.values.find(e=>e.locale===t.localisation.default);return r?{key:t.fieldConfig.key,type:t.fieldConfig.type,value:n.formatResponseValue(r.value),groupRef:t.groupRef,meta:n.formatResponseMeta(this.fetchRelationData(e.relationMetaData,{type:t.fieldConfig.type,value:r.value,fieldConfig:t.fieldConfig}),t)}:null};buildGroups=(e,t)=>{let n=[],r=t.repeaterConfig.fields;if(!r)return n;let i=j.getBrickRepeaterRows({bricksQuery:e.bricksQuery,bricksSchema:e.bricksSchema,collectionKey:t.collection.key,brickKey:t.brickKey,repeaterKey:t.repeaterConfig.key,repeaterLevel:t.repeaterLevel,relationIds:e.brickRows.flatMap(e=>e.id)}),a=Map.groupBy(i,e=>e.position);return a.forEach((i,a)=>{let o=i[0]?.is_open??!1,c=s.randomUUID();n.push({ref:c,order:a,open:I.formatBoolean(o),fields:this.buildFieldTree({brickRows:i,bricksQuery:e.bricksQuery,bricksSchema:e.bricksSchema,relationMetaData:e.relationMetaData},{builder:t.builder,host:t.host,localisation:t.localisation,collection:t.collection,brickKey:t.brickKey,fieldConfig:r,repeaterLevel:t.repeaterLevel+1,config:t.config,groupRef:c,bricksTableSchema:t.bricksTableSchema})})}),n.sort((e,t)=>e.order-t.order)};objectifyFields=e=>e.reduce((e,t)=>(t&&(e[t.key]={...t,groups:t.groups?.map(e=>({...e,fields:this.objectifyFields(e.fields||[])}))}),e),{});fetchRelationData=(e,t)=>{switch(t.type){case`document`:return e.document?.find(e=>e.collection_key===t.fieldConfig?.collection&&e.document_id===t.value);default:return e[t.type]?.find(e=>e?.id===t.value)}}},N=class{formatMultiple(e){return e.versions.map(t=>this.formatSingle({version:t,bricksSchema:e.bricksSchema}))}formatSingle(e){let t={builder:[],fixed:[]};for(let n of e.bricksSchema){let r=n.name;if(r in e.version&&Array.isArray(e.version[r])){let i=new Map;for(let t of e.version[r])i.set(t.brick_instance_id,t.brick_type);for(let[e,r]of i.entries())t[r].push({brickKey:n.key.brick||null})}}return{id:e.version.id,versionType:e.version.type,promotedFrom:e.version.promoted_from,createdAt:I.formatDate(e.version.created_at),createdBy:e.version.created_by??null,document:{id:e.version.document_id??null,collectionKey:e.version.collection_key,createdBy:e.version.document_created_by??null,createdAt:I.formatDate(e.version.document_created_at),updatedAt:I.formatDate(e.version.document_updated_at),updatedBy:e.version.document_updated_by??null},bricks:t}}},P=class{formatMultiple=e=>{let t=I.get(`document-bricks`);return e.documents.map(n=>{let r=null,i=null;return e.hasFields&&(r=t.formatDocumentFields({bricksQuery:n,bricksSchema:e.bricksTableSchema,relationMetaData:e.relationData||{},collection:e.collection,config:e.config})),e.hasBricks&&(i=t.formatMultiple({bricksQuery:n,bricksSchema:e.bricksTableSchema,relationMetaData:e.relationData||{},collection:e.collection,config:e.config})),this.formatSingle({document:n,collection:e.collection,config:e.config,fields:r,bricks:i||void 0})})};formatSingle=e=>({id:e.document.id,collectionKey:e.document.collection_key,status:e.document.version_type??null,versionId:e.document.version_id??null,version:this.formatVersion({document:e.document}),bricks:e.bricks??null,fields:e.fields??null,createdBy:e.document.cb_user_id?{id:e.document.cb_user_id,email:e.document.cb_user_email??null,firstName:e.document.cb_user_first_name??null,lastName:e.document.cb_user_last_name??null,username:e.document.cb_user_username??null}:null,updatedBy:e.document.ub_user_id?{id:e.document.ub_user_id,email:e.document.ub_user_email??null,firstName:e.document.ub_user_first_name??null,lastName:e.document.ub_user_last_name??null,username:e.document.ub_user_username??null}:null,createdAt:I.formatDate(e.document.created_at),updatedAt:I.formatDate(e.document.updated_at)});formatVersion=e=>{let t=e.document.versions?.find(e=>e.type===`draft`),n=e.document.versions?.find(e=>e.type===`published`);return{draft:t?.id?{id:t.id,promotedFrom:t.promoted_from,createdAt:I.formatDate(t.created_at),createdBy:t.created_by}:null,published:n?.id?{id:n.id,promotedFrom:n.promoted_from,createdAt:I.formatDate(n.created_at),createdBy:n.created_by}:null}};formatClientMultiple=e=>{let t=I.get(`document-bricks`);return e.documents.map(n=>{let r=null,i=null;return e.hasFields&&(r=t.formatDocumentFields({bricksQuery:n,bricksSchema:e.bricksTableSchema,relationMetaData:e.relationData||{},collection:e.collection,config:e.config})),e.hasBricks&&(i=t.formatMultiple({bricksQuery:n,bricksSchema:e.bricksTableSchema,relationMetaData:e.relationData||{},collection:e.collection,config:e.config})),this.formatClientSingle({document:n,collection:e.collection,config:e.config,fields:r,bricks:i||void 0})})};formatClientSingle=e=>{let t=I.get(`document-fields`),n=this.formatSingle({document:e.document,collection:e.collection,bricks:e.bricks,fields:e.fields,config:e.config});return{...n,bricks:n.bricks?n.bricks.map(e=>({...e,fields:t.objectifyFields(e.fields)})):null,fields:n.fields?t.objectifyFields(n.fields):null}}},F=class{static get(n){switch(n){case`users`:return new l;case`user-permissions`:return new c;case`settings`:return new d;case`roles`:return new u;case`permissions`:return new f;case`options`:return new p;case`media`:return new E;case`locales`:return new D;case`emails`:return new O;case`collections`:return new k;case`client-integrations`:return new A;case`document-bricks`:return new j;case`document-fields`:return new M;case`document-versions`:return new N;case`documents`:return new P;default:throw new e({message:t(`cannot_find_formatter`,{name:n})})}}static formatDate=e=>typeof e==`string`?e:e?e.toISOString():null;static parseJSON=e=>{if(typeof e==`object`)return e;if(!e)return null;try{return JSON.parse(e)}catch(e){return null}};static stringifyJSON=e=>{try{return e?JSON.stringify(e):null}catch(e){return null}};static parseCount=e=>typeof e==`number`?e:Number.parseInt(e||`0`)||0;static formatBoolean(e){return e==null?null:typeof e==`boolean`?e:e===1}},I=F;export{_ as choose_accept_header_format_default,y as create_media_url_default,I as formatters_default,x as generate_key_default,h as generate_process_key_default,T as get_file_metadata_default};
//# sourceMappingURL=formatters-CNwZ581Q.js.map