UNPKG

@lucidcms/core

Version:

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

2 lines 6.23 kB
import{copy as e}from"../../../i18n/copy.mjs";import t from"../../helpers/build-schema-index.mjs";import n from"../../helpers/prefix-generated-column-name.mjs";import{relationTableMode as r}from"../../custom-fields/storage/relation-table.mjs";import{treeTableMode as i}from"../../custom-fields/storage/tree-table.mjs";import{getFieldDatabaseConfig as a,isCustomFieldTableType as o,isStorageMode as s,normalizeFieldDatabaseMode as c}from"../../custom-fields/storage/index.mjs";import l from"../../helpers/build-table-name.mjs";import u from"../../custom-fields/registered-fields.mjs";const d=(e,t)=>{let n=`index`in t&&t.index===!0,r=e.listing.includes(t.key);return n||r},f=(e,t)=>e.some(e=>e.name===t&&e.source===`core`),p=e=>{let n=[];return f(e.columns,`document_version_id`)&&n.push(t({db:e.db,tableName:e.tableName,columns:[`document_version_id`],source:`core`})),f(e.columns,`document_id`)&&f(e.columns,`document_version_id`)&&n.push(t({db:e.db,tableName:e.tableName,columns:[`document_id`,`document_version_id`],source:`core`})),f(e.columns,`parent_id`)&&n.push(t({db:e.db,tableName:e.tableName,columns:[`parent_id`],source:`core`})),n},m=t=>{let f=l(t.type,{collection:t.collection.key,brick:t.brick?.key,fieldPath:t.fieldPath},t.db.config.tableNameByteLimit);if(f.error)return f;let h=!0;if(o(t.type)){let e=a(t.type);e&&s(e,`relation-table`)&&(h=!1)}let g=[],_=[],v=[{name:`id`,source:`core`,type:t.db.getDataType(`primary`),nullable:!1,primary:!0},{name:`collection_key`,source:`core`,type:t.db.getDataType(`text`),nullable:!1,foreignKey:{table:`lucid_collections`,column:`key`,onDelete:`cascade`}},{name:`document_id`,source:`core`,type:t.db.getDataType(`integer`),nullable:!1,foreignKey:{table:t.documentTable,column:`id`,onDelete:`cascade`}},{name:`document_version_id`,source:`core`,type:t.db.getDataType(`integer`),nullable:!1,foreignKey:{table:t.versionTable,column:`id`,onDelete:`cascade`}},{name:`locale`,source:`core`,type:t.db.getDataType(`text`),nullable:!1,foreignKey:{table:`lucid_locales`,column:`code`,onDelete:`cascade`}},{name:`position`,source:`core`,type:t.db.getDataType(`integer`),nullable:!1,default:0}];h&&v.push({name:`is_open`,source:`core`,type:t.db.getDataType(`boolean`),nullable:!1,default:t.db.getDefault(`boolean`,`false`)}),t.type===`brick`&&(v.push({name:`brick_type`,source:`core`,type:t.db.getDataType(`text`),nullable:!1}),v.push({name:`brick_instance_id`,source:`core`,type:t.db.getDataType(`text`),nullable:!1})),(t.type===`brick`||t.type===`document-fields`)&&v.push({name:`brick_id_ref`,source:`core`,type:t.db.getDataType(`integer`),nullable:!1}),t.additionalCoreColumns&&v.push(...t.additionalCoreColumns);for(let a of t.fields){let o=u[a.type].config.database;switch(c(o.mode)){case`ignore`:break;case`tree-table`:{if(!(`tableType`in o))return{data:void 0,error:{message:e(`server:core.collections.schema.table.name.format.insufficient.parts`)}};let n=i.getChildFieldConfigs(a);if(!n)return{data:void 0,error:{message:e(`server:core.collections.schema.table.name.format.insufficient.parts`)}};let r=(t.fieldPath||[]).concat(a.key),s=t.rootTable??f.data.name,c=i.getSchemaDefinition({db:t.db,table:{type:o.tableType,parent:f.data.name,root:s,depth:r.length}}).columns.map(e=>({name:e.name,source:`core`,type:e.type,nullable:e.nullable,foreignKey:e.foreignKey,default:e.default})),l=m({collection:t.collection,fields:n,db:t.db,type:o.tableType,documentTable:t.documentTable,versionTable:t.versionTable,brick:t.brick,fieldPath:r,rootTable:s,additionalCoreColumns:c});if(l.error)return l;g.push(l.data.schema),g.push(...l.data.childTables);break}case`column`:{let r=(t.brick||t.collection).fields.get(a.key);if(!r)return{data:void 0,error:{message:e(`server:core.fields.lookup.not.found.with.key.in.collection.brick`,{data:{key:a.key,type:t.brick?`brick`:`collection`,typeKey:t.brick?t.brick.key:t.collection.key}})}};let i=r.getSchemaDefinition({db:t.db,tables:{document:t.documentTable,version:t.versionTable}});if(i.error)return i;let o=i.data.columns.map(e=>({name:n(e.name),source:`field`,canAutoRemove:!1,type:e.type,nullable:e.nullable,foreignKey:e.foreignKey,customField:{type:a.type},default:t.db.supports(`alterColumn`)?e.default:null}));v.push(...o),_.push(...r.getIndexDefinitions({db:t.db,table:{name:f.data.name},columns:[...v.filter(e=>e.name===`document_id`),...o],shouldIndex:d(t.collection,a)}));break}case`relation-table`:{if(!(`tableType`in o))return{data:void 0,error:{message:e(`server:core.collections.schema.table.name.format.insufficient.parts`)}};let i=(t.brick||t.collection).fields.get(a.key);if(!i)return{data:void 0,error:{message:e(`server:core.fields.lookup.not.found.with.key.in.collection.brick`,{data:{key:a.key,type:t.brick?`brick`:`collection`,typeKey:t.brick?t.brick.key:t.collection.key}})}};let s=i.getSchemaDefinition({db:t.db,tables:{document:t.documentTable,version:t.versionTable}});if(s.error)return s;let c=r.getTableFieldPath({fieldKey:a.key,fieldPath:t.fieldPath}),l=r.getSchemaDefinition({db:t.db,table:{type:o.tableType,parent:f.data.name}}).columns.map(e=>({name:e.name,source:`core`,type:e.type,nullable:e.nullable,foreignKey:e.foreignKey,default:e.default})),u=m({collection:t.collection,fields:[],db:t.db,type:o.tableType,documentTable:t.documentTable,versionTable:t.versionTable,brick:t.brick,fieldPath:c,additionalCoreColumns:l});if(u.error)return u;let p=s.data.columns.map(e=>({name:n(e.name),source:`field`,canAutoRemove:!1,type:e.type,nullable:e.nullable,foreignKey:e.foreignKey,customField:{type:a.type},default:t.db.supports(`alterColumn`)?e.default:null}));u.data.schema.columns.push(...p),u.data.schema.indexes=[...u.data.schema.indexes??[],...i.getIndexDefinitions({db:t.db,table:{name:u.data.schema.name},columns:[...u.data.schema.columns.filter(e=>e.name===`document_id`),...p],shouldIndex:d(t.collection,a)})],g.push(u.data.schema),g.push(...u.data.childTables);break}}}let y=[...p({db:t.db,tableName:f.data.name,columns:v}),..._];return{data:{schema:{name:f.data.name,rawName:f.data.rawName,type:t.type,key:{collection:t.collection.key,brick:t.brick?.key,fieldPath:t.fieldPath},columns:v,indexes:y.length>0?y:void 0},childTables:g},error:void 0}};export{m as default}; //# sourceMappingURL=fields-table.mjs.map