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.56 kB
import e from"../../../libs/collection/helpers/prefix-generated-column-name.mjs";import{treeTableMode as t,treeTableSchemaColumns as n}from"../../../libs/collection/custom-fields/storage/tree-table.mjs";import{getFieldDatabaseConfig as r,isStorageMode as i}from"../../../libs/collection/custom-fields/storage/index.mjs";import a from"../../../libs/collection/helpers/build-table-name.mjs";import o from"./process-field-values.mjs";import s from"../../../libs/collection/custom-fields/registered-fields.mjs";import c from"node:crypto";const l=e=>e.brick?.key?e.collection.brickInstances.find(t=>t.key===e.brick?.key)??null:e.collection,u=()=>-Math.abs(Number.parseInt(c.randomBytes(3).toString(`hex`),16)%2147483647),d=e=>r(e)?.mode??`column`,f=e=>{if(typeof e.priority==`number`)return e.priority;switch(e.mode){case`tree-table`:return t.getInsertPriority(e.fieldPath);case`column`:case`ignore`:case`relation-table`:return 0}},p=e=>{switch(e.mode){case`tree-table`:e.row[n.parentId]=e.params.parentId?.get(e.locale)||null,e.row[n.parentIdRef]=e.params.parentIdRef?.get(e.locale),e.params.brickIdByLocale?.has(e.locale)&&(e.row[n.rootId]=e.params.brickIdByLocale.get(e.locale));break;case`column`:case`ignore`:case`relation-table`:break}},m={column:{writeColumns:t=>{if(!t.field.key)return;let n=o(t.field,t.params.localization.locales,t.params.localization.defaultLocale);for(let r of t.params.localization.locales){let i=t.rowsByLocale.get(r);i&&(i[e(t.field.key)]=n.get(r))}}},ignore:{},"tree-table":{buildChildTables:e=>{let t=s[e.field.type].config.database;if(!i(t,`tree-table`)||!e.field.key||!e.field.groups||e.field.groups.length===0)return[];let n=e.params.fieldPath?[...e.params.fieldPath,e.field.key]:[e.field.key];return e.field.groups.flatMap((r,i)=>{if(!r.fields)return[];let a=new Map;for(let t of e.params.localization.locales)a.set(t,u());return[{type:t.tableType,targetFields:r.fields,fieldPath:n,parentId:e.parentTableMode===`tree-table`&&e.params.parentIdRef||null,parentIdRef:a,brickIdByLocale:e.params.type===`brick`||e.params.type===`document-fields`?e.brickIdRefByLocale:e.params.brickIdByLocale,order:r.order===void 0?i:r.order,open:r.open??!1}]})}},"relation-table":{buildChildTables:e=>{let t=s[e.field.type].config.database;if(!i(t,`relation-table`)||!e.field.key)return[];let n=e.parentTableMode===`tree-table`?e.params.parentIdRef:e.params.type===`brick`||e.params.type===`document-fields`?e.brickIdRefByLocale:e.params.brickIdByLocale;if(!n)return[];let r=f({mode:e.parentTableMode,fieldPath:e.params.fieldPath,priority:e.params.priority});return[{type:t.tableType,targetFields:[e.field],fieldPath:[e.field.key],priority:r+1,parentId:n,parentIdRef:n,brickIdByLocale:void 0,order:0,open:!1}]}}},h=e=>{let t=e.targetFields[0];if(!t?.key)return[];let n=l(e);if(!n)return[];let r=n.fields.get(t.key);if(!r)return[];let i=o(t,e.localization.locales,e.localization.defaultLocale),a=[];for(let t of e.localization.locales){let n=e.parentId?.get(t);typeof n==`number`&&r.serializeRelationFieldValue(i.get(t)).forEach((r,i)=>{a.push({collection_key:e.collection.key,document_id:e.documentId,document_version_id:e.versionId,locale:t,position:i,parent_id:n,...r})})}return a},g=e=>{let t=e.brickKey??`pseudo-brick`;return!e.fieldPath||e.fieldPath.length===0?t:`${t}:${e.fieldPath.join(`:`)}`},_=(e,t)=>{let n=d(t.type);if(n===`relation-table`){let r=h(t);if(r.length===0)return;let i=g({brickKey:t.brick?.key,fieldPath:t.fieldPath}),o;if(t.brickKeyTableNameMap.has(i))o=t.brickKeyTableNameMap.get(i);else{let e=a(t.type,{collection:t.collection.key,brick:t.brick?.key,fieldPath:t.fieldPath},t.tableNameByteLimit);if(e.error)return;o=e.data.name,t.brickKeyTableNameMap.set(i,e.data.name)}let s=e.findIndex(e=>e.table===o);if(s===-1){e.push({table:o,data:r,priority:f({mode:n,fieldPath:t.fieldPath,priority:t.priority})});return}e[s]?.data.push(...r);return}let r=g({brickKey:t.brick?.key,fieldPath:t.fieldPath}),i;if(t.brickKeyTableNameMap.has(r))i=t.brickKeyTableNameMap.get(r);else{let e=a(t.type,{collection:t.collection.key,brick:t.brick?.key,fieldPath:t.fieldPath},t.tableNameByteLimit);if(e.error)return;i=e.data.name,t.brickKeyTableNameMap.set(r,e.data.name)}let o=e.findIndex(e=>e.table===i);o===-1&&(e.push({table:i,data:[],priority:f({mode:n,fieldPath:t.fieldPath,priority:t.priority})}),o=e.length-1);let l=c.randomUUID(),v=new Map,y=new Map;for(let e of t.localization.locales){let r={collection_key:t.collection.key,document_id:t.documentId,document_version_id:t.versionId,locale:e,position:t.order};if(r.is_open=t.open,t.type===`brick`&&(r.brick_type=t.brick?.type,r.brick_instance_id=l),t.type===`brick`||t.type===`document-fields`){let t=u();r.brick_id_ref=t,y.set(e,t)}p({mode:n,row:r,locale:e,params:t}),v.set(e,r)}let b=[];for(let e of t.targetFields){let r=s[e.type].config.database.mode,i=m[r];i.writeColumns?.({field:e,params:t,rowsByLocale:v,brickIdRefByLocale:y,parentTableMode:n});let a=i.buildChildTables?.({field:e,params:t,rowsByLocale:v,brickIdRefByLocale:y,parentTableMode:n});a&&b.push(...a)}for(let t of v.values())e[o]?.data.push(t);for(let n of b)_(e,{type:n.type,collection:t.collection,documentId:t.documentId,versionId:t.versionId,targetFields:n.targetFields,fieldPath:n.fieldPath,priority:n.priority,parentId:n.parentId,parentIdRef:n.parentIdRef,brickIdByLocale:n.brickIdByLocale,localization:t.localization,brickKeyTableNameMap:t.brickKeyTableNameMap,brick:t.brick,order:n.order,open:n.open,tableNameByteLimit:t.tableNameByteLimit})};export{_ as default}; //# sourceMappingURL=construct-brick-table.mjs.map