@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 2.35 kB
JavaScript
const e={safe:0,warning:1,destructive:2},t=t=>t.reduce((t,n)=>e[n.risk]>e[t]?n.risk:t,`safe`),n=(e,t,n)=>{let r=n.column.nullable===!1||n.column.primary===!0||n.column.unique===!0||n.column.foreignKey!==void 0;return{risk:r?`warning`:`safe`,code:r?`add_constrained_column`:`add_nullable_column`,collectionKey:e.collectionKey,tableName:t.tableName,columnName:n.column.name}},r=(e,t,n)=>{let r=[],i={collectionKey:e.collectionKey,tableName:t.tableName,columnName:n.column.name};return n.changes.type&&r.push({...i,risk:`destructive`,code:`modify_column_type`}),(n.changes.unique||n.changes.foreignKey)&&r.push({...i,risk:`destructive`,code:`modify_column_constraint`}),n.changes.nullable&&r.push({...i,risk:n.changes.nullable.to?`safe`:`warning`,code:n.changes.nullable.to?`relax_column_nullability`:`tighten_column_nullability`}),n.changes.default&&!n.changes.type&&!n.changes.unique&&!n.changes.foreignKey&&r.push({...i,risk:`safe`,code:`change_column_default`}),r},i=(e,t)=>{let i=[],a=new Set(t.columnOperations.filter(e=>e.type===`add`).map(e=>e.column.name)),o=new Set(t.columnOperations.filter(e=>e.type===`remove`).map(e=>e.columnName).filter(e=>a.has(e)));for(let a of t.columnOperations){let s=a.type===`remove`?a.columnName:a.column.name;if(o.has(s)){a.type===`remove`&&i.push({risk:`destructive`,code:`recreate_column`,collectionKey:e.collectionKey,tableName:t.tableName,columnName:s});continue}switch(a.type){case`add`:i.push(n(e,t,a));break;case`modify`:i.push(...r(e,t,a));break;case`remove`:i.push({risk:`destructive`,code:`remove_column`,collectionKey:e.collectionKey,tableName:t.tableName,columnName:a.columnName});break}}return i},a=(e,t)=>t.indexOperations.map(n=>{let r=n.index.unique===!0;return{risk:r?`warning`:`safe`,code:n.type===`add`?r?`add_unique_index`:`add_index`:r?`remove_unique_index`:`remove_index`,collectionKey:e.collectionKey,tableName:t.tableName,indexName:n.index.name}}),o=(e,t)=>t.type===`create`?[{risk:`safe`,code:`create_table`,collectionKey:e.collectionKey,tableName:t.tableName}]:t.type===`remove`?[{risk:`destructive`,code:`remove_table`,collectionKey:e.collectionKey,tableName:t.tableName}]:[...i(e,t),...a(e,t)],s=e=>{let n=e.flatMap(e=>e.tables.flatMap(t=>o(e,t)));return{risk:t(n),reasons:n}},c=t=>e[t];export{s as default,c as getMigrationRiskPriority};
//# sourceMappingURL=assess-migration-plan.mjs.map