@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, migrate, seed, doctor, insights, logs, registry, and the rest of the project commands
2 lines (1 loc) • 1.94 kB
JavaScript
import{existsSync as u,readFileSync as d,writeFileSync as g}from"node:fs";import{evaluateSchemaDrift as m,parseSchemaSnapshot as p,SchemaSnapshotParseError as b,serializeSchemaSnapshot as f}from"@lunora/codegen";const S=e=>{if(!u(e))return{status:"absent"};let s;try{s=d(e,"utf8")}catch{return{status:"corrupt"}}try{const a=p(s);return a===void 0?{status:"corrupt"}:{snapshot:a,status:"ok"}}catch(a){if(a instanceof b)return{status:"corrupt"};throw a}},k=(e,s)=>{g(e,f(s),"utf8")},y=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})},w=(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}),v=e=>{const{allowDrift:s,codegen:a,command:h,logger:l,readOnly:t=!1,updateBaseline:i=!1}=e,n=a.schemaSnapshotPath,o=S(n),c={logger:l,readOnly:t,rebless:()=>{k(n,a.schemaSnapshot)},snapshotPath:n,updateBaseline:i};if(o.status==="corrupt")return y(c);const r=m({allowDrift:s,baseline:o.status==="ok"?o.snapshot:void 0,command:h,current:a.schemaSnapshot});return r.blocked?w(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{v as R};