UNPKG

@lunora/cli

Version:

The Lunora CLI: init, dev, deploy, codegen, migrate, seed, doctor, insights, logs, registry, and the rest of the project commands

9 lines (8 loc) 1.15 kB
import{Project as p,SyntaxKind as i,Node as a}from"ts-morph";const x=/^[A-Za-z_$][\w$]*$/u,o=t=>`// lunora:add:${t}:start`,c=t=>`// lunora:add:${t}:end`,m=t=>`./${t}/schema`,g=t=>{for(const e of t)if(e.getExpression().getText()==="defineSchema")return e},E=t=>{let e=t;for(let n=e.getParent();n!==void 0;n=e.getParent())if(a.isPropertyAccessExpression(n)&&n.getExpression()===e)e=n;else if(a.isCallExpression(n)&&n.getExpression()===e)e=n;else break;return e},S=(t,e)=>{if(!x.test(e))return{ok:!1,reason:"invalid-identifier"};if(t.includes(o(e)))return{ok:!1,reason:"already-applied"};const r=new p({compilerOptions:{allowJs:!0},useInMemoryFileSystem:!0}).createSourceFile("schema.ts",t,{overwrite:!0}),l=r.getDescendantsOfKind(i.CallExpression),s=g(l);if(!s)return{ok:!1,reason:"no-define-schema"};if(s.getArguments()[0]?.getKind()!==i.ObjectLiteralExpression)return{ok:!1,reason:"non-object-argument"};const d=E(s).getEnd(),f=` ${o(e)} .extend(${e}.extension) ${c(e)} `;r.insertText(d,f);const u=`${o(e)} import { ${e} } from "${m(e)}"; ${c(e)} `;return r.insertText(0,u),{ok:!0,text:r.getFullText()}};export{S as insertSchemaExtension};