@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands
2 lines (1 loc) • 1.92 kB
JavaScript
import{existsSync as i,readFileSync as u,writeFileSync as d}from"node:fs";import{evaluateSchemaDrift as g,parseSchemaSnapshot as b,SchemaSnapshotParseError as p,serializeSchemaSnapshot as m}from"@lunora/codegen";const f=e=>{if(!i(e))return{status:"absent"};let s;try{s=u(e,"utf8")}catch{return{status:"corrupt"}}try{const a=b(s);return a===void 0?{status:"corrupt"}:{snapshot:a,status:"ok"}}catch(a){if(a instanceof p)return{status:"corrupt"};throw a}},S=(e,s)=>{d(e,m(s),"utf8")},k=e=>{const s=`schema-drift gate: the committed baseline ${e.snapshotPath} is unreadable or malformed, so schema drift cannot be checked. Fix it (e.g. resolve a merge conflict in lunora/.lunora-schema.json), or pass --update-schema-baseline to regenerate it from the current schema.`;return e.updateBaseline&&!e.readOnly?(e.logger.warn(`schema baseline was unreadable; regenerating from the current schema on success (--update-schema-baseline): ${e.snapshotPath}`),{blocked:!1,changes:[],reason:s,rebless:e.rebless}):(e.readOnly||e.logger.error(s),{blocked:!0,changes:[],reason:s})},y=(e,s)=>(s.readOnly||s.logger.error(e.reason),s.updateBaseline&&!s.readOnly?(s.logger.warn(`schema baseline will be re-blessed despite breaking drift on success (--update-schema-baseline): ${s.snapshotPath}`),{blocked:!1,changes:e.changes,reason:e.reason,rebless:s.rebless}):{blocked:!0,changes:e.changes,reason:e.reason}),P=e=>{const{allowDrift:s,codegen:a,logger:l,readOnly:t=!1,updateBaseline:h=!1}=e,n=a.schemaSnapshotPath,o=f(n),c={logger:l,readOnly:t,rebless:()=>{S(n,a.schemaSnapshot)},snapshotPath:n,updateBaseline:h};if(o.status==="corrupt")return k(c);const r=g({allowDrift:s,baseline:o.status==="ok"?o.snapshot:void 0,current:a.schemaSnapshot});return r.blocked?y(r,c):r.changes.length>0?(t||l.info(r.reason),{blocked:!1,changes:r.changes,reason:r.reason,rebless:t?void 0:c.rebless}):{blocked:!1,changes:r.changes,reason:r.reason}};export{P as k};