@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 2.66 kB
JavaScript
import e from"../../../constants/constants.mjs";import t from"../../logger/index.mjs";import n from"../helpers/indexes-match.mjs";import r from"./determine-column-mods.mjs";import i from"../helpers/column-mod-type.mjs";import a from"../helpers/get-table-priority.mjs";import o from"../helpers/normalise-column.mjs";const s=(t,r)=>{let i=[],a=r??[],o=t??[];for(let t of o){let r=a.find(e=>e.name===t.name);if(!r){i.push({type:`add`,index:t});continue}n(t,r)||(r.name.startsWith(e.db.generatedIndexPrefix)&&i.push({type:`remove`,index:{name:r.name,columns:r.columns,unique:r.unique}}),i.push({type:`add`,index:t}))}for(let t of a)o.some(e=>e.name===t.name)||t.name.startsWith(e.db.generatedIndexPrefix)&&i.push({type:`remove`,index:{name:t.name,columns:t.columns,unique:t.unique}});return i},c=n=>{let c={collectionKey:n.schemas.current.key,tables:[]};if(n.schemas.existing.length===0)return c.tables=n.schemas.current.tables.map(e=>{let t=a(`collection-inferred`,e);return t.error?null:{type:`create`,tableName:e.name,tableType:e.type,key:e.key,priority:t.data,columnOperations:e.columns.map(e=>({type:`add`,column:o(e,e.source)})),indexOperations:(e.indexes??[]).map(e=>({type:`add`,index:e}))}}).filter(e=>e!==null),t.debug({message:`Generated a full migration plan for collection "${n.schemas.current.key}"`,scope:e.logScopes.migrations}),{data:c,error:void 0};for(let t of n.schemas.current.tables){let l=n.schemas.existing.find(e=>e.name===t.name);if(!l){let e=a(`collection-inferred`,t);if(e.error)return e;c.tables.push({type:`create`,tableName:t.name,priority:e.data,tableType:t.type,key:t.key,columnOperations:t.columns.map(e=>({type:`add`,column:o(e,e.source)})),indexOperations:(t.indexes??[]).map(e=>({type:`add`,index:e}))});continue}let u=[],d=s(t.indexes,l.indexes);for(let e of t.columns){let t=l.columns.find(t=>t.name===e.name);if(!t)u.push({type:`add`,column:e});else{let a=r(o(e,e.source),o(t,e.source));a&&(i(a,n.db)===`drop-and-add`?(u.push({type:`remove`,columnName:a.column.name}),u.push({type:`add`,column:a.column})):u.push(a))}}for(let n of l.columns)t.columns.some(e=>e.name===n.name)||n.name.startsWith(e.db.generatedColumnPrefix)||u.push({type:`remove`,columnName:n.name});if(u.length||d.length){let e=a(`collection-inferred`,t);if(e.error)return e;c.tables.push({type:`modify`,tableName:t.name,priority:e.data,tableType:t.type,key:t.key,columnOperations:u,indexOperations:d})}}return c.tables.length>0&&t.debug({message:`Generated a partial migration plan for collection "${n.schemas.current.key}"`,scope:e.logScopes.migrations}),{data:c,error:void 0}};export{c as default};
//# sourceMappingURL=generate-migration-plan.mjs.map