@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 1.98 kB
JavaScript
import e from"../../../../repositories/document-versions.mjs";import t from"../../../schema/runtime/prime-runtime-schemas.mjs";import{getDocumentFieldsTableSchema as n,getDocumentVersionTableSchema as r}from"../../../schema/runtime/runtime-schema-selectors.mjs";import i from"../../../../../services/collections/get-single-instance.mjs";import a from"../../../helpers/extract-collection-key.mjs";const o=async(o,s)=>{let c=new e(o.db.client,o.config.db),l=new Map;for(let e of s.relations){if(!e.table.startsWith(`lucid_document__`))continue;let t=e.table,n=a(t);if(!n)continue;let r=Array.from(e.values).filter(e=>typeof e==`number`);if(r.length===0)continue;let i=s.resolveVersionType?.({fieldType:`relation`,table:e.table,collectionKey:n})??s.versionType,o=`${t}:${i}`,c=l.get(o);if(c){c.ids=Array.from(new Set([...c.ids,...r]));continue}l.set(o,{table:t,collectionKey:n,ids:Array.from(new Set(r)),versionType:i})}let u=Array.from(l.values());if(u.length===0)return{data:{rows:[],meta:{relation:{fieldsSchemaByCollection:{}}}},error:void 0};let d=await t(o,{collectionKeys:u.map(e=>e.collectionKey).filter((e,t,n)=>n.indexOf(e)===t)});if(d.error)return d;let f=u.map(async e=>{if(i(o,{key:e.collectionKey}).error)return null;let[t,a]=await Promise.all([r(o,e.collectionKey),n(o,e.collectionKey)]);return t.error||!t.data||a.error||!a.data?null:{collectionKey:e.collectionKey,tables:{document:e.table,version:t.data.name,documentFields:a.data.name},documentFieldSchema:a.data,ids:e.ids,versionType:e.versionType}}),p=await Promise.all(f).then(e=>e.filter(e=>e!==null)),m=await c.selectMultipleUnion({unions:p,versionType:s.versionType,tenantKey:o.request.tenantKey,validation:{enabled:!0}});if(m.error)return m;let h=new Map;for(let e of p)h.set(e.collectionKey,e.documentFieldSchema);let g=Object.fromEntries(h.entries());return{error:void 0,data:{rows:m.data||[],meta:{relation:{fieldsSchemaByCollection:g}}}}};export{o as default};
//# sourceMappingURL=fetch-refs.mjs.map