@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, migrate, seed, doctor, insights, logs, registry, and the rest of the project commands
3 lines (2 loc) • 3.85 kB
JavaScript
import{readFileSync as f,existsSync as m}from"node:fs";import{join as g}from"node:path";import{discoverSchema as p}from"@lunora/codegen";import{readLinkedProject as u}from"@lunora/config";import{findWranglerFile as b}from"@lunora/config/cloudflare";import{parse as h}from"jsonc-parser";import{Project as y}from"ts-morph";import{i as j}from"../packem_shared/command-0l-ZPhIX.mjs";const l=(e,o)=>{if(e===null||typeof e!="object")return;const r=e[o];return typeof r=="string"&&r.length>0?r:void 0},c=(e,o)=>{if(e===null||typeof e!="object")return[];const r=e[o];return Array.isArray(r)?r:[]},w=e=>{const o=c(e.durable_objects??{},"bindings"),r=c(e,"d1_databases"),s=c(e,"vectorize");return{bindings:{d1:r.map(n=>l(n,"binding")??"<unnamed>"),durableObjects:o.map(n=>l(n,"name")??"<unnamed>"),vectorize:s.map(n=>l(n,"binding")??"<unnamed>")},compatibilityDate:l(e,"compatibility_date"),compatibilityFlags:c(e,"compatibility_flags").filter(n=>typeof n=="string"),main:l(e,"main"),name:l(e,"name")}},$=e=>({tables:e.tables.map(o=>{let r="root";return o.shardMode==="global"?r="global":typeof o.shardMode=="object"&&(r=`shardBy(${o.shardMode.field})`),{indexes:o.indexes.length,name:o.name,shard:r}}),vectorIndexes:e.vectorIndexes.length}),k=e=>{const o=g(e,"package.json");if(!m(o))return[];let r;try{r=JSON.parse(f(o,"utf8"))}catch{return[]}if(r===null||typeof r!="object")return[];const s=["dependencies","devDependencies","peerDependencies","optionalDependencies"],n=new Map;for(const a of s){const t=r[a];if(!(t===null||typeof t!="object"))for(const[i,d]of Object.entries(t))i.startsWith("@lunora/")&&typeof d=="string"&&!n.has(i)&&n.set(i,d)}return[...n.entries()].toSorted(([a],[t])=>a.localeCompare(t)).map(([a,t])=>({name:a,version:t}))},v=e=>{const o=k(e),r=b(e);let s;if(r)try{s=w(h(f(r,"utf8")))}catch{s=void 0}const n=g(e,"lunora","schema.ts");let a,t;if(m(n))try{const i=new y({skipAddingFilesFromTsConfig:!0,useInMemoryFileSystem:!1});a=$(p(i,n))}catch(i){t=i instanceof Error?i.message:String(i)}return{link:u(e),lunoraPackages:o,projectRoot:e,schema:a,schemaError:t,wrangler:s,wranglerPath:r}},x=(e,o)=>{if(o.info(`project: ${e.projectRoot}`),o.info(""),o.info("@lunora/* packages:"),e.lunoraPackages.length===0)o.info(" (none found in package.json)");else for(const r of e.lunoraPackages)o.info(` ${r.name}@${r.version}`);if(o.info(""),e.wrangler?(o.info(`wrangler: ${e.wranglerPath??""}`),o.info(` name: ${e.wrangler.name??"<unset>"}`),o.info(` main: ${e.wrangler.main??"<unset>"}`),o.info(` compatibility_date: ${e.wrangler.compatibilityDate??"<unset>"}`),o.info(` compatibility_flags: ${e.wrangler.compatibilityFlags.join(", ")||"<none>"}`),o.info(` durable objects: ${e.wrangler.bindings.durableObjects.join(", ")||"<none>"}`),o.info(` d1 databases: ${e.wrangler.bindings.d1.join(", ")||"<none>"}`),o.info(` vectorize indexes: ${e.wrangler.bindings.vectorize.join(", ")||"<none>"}`)):o.info("wrangler: (not found)"),o.info(""),e.link?(o.info(`link: ${e.link.workerName??"(unnamed)"} -> ${e.link.workerUrl??"<no url>"}`),e.link.env!==void 0&&o.info(` env: ${e.link.env}`)):o.info("link: (not linked — run `lunora link --url <https://your-worker>`)"),o.info(""),e.schemaError!==void 0)o.warn(`schema: parse error — ${e.schemaError}`);else if(e.schema){o.info(`schema: ${String(e.schema.tables.length)} table(s), ${String(e.schema.vectorIndexes)} vector index(es)`);for(const r of e.schema.tables)o.info(` ${r.name} [${r.shard}, ${String(r.indexes)} index(es)]`)}else o.info("schema: (no lunora/schema.ts)")},S=e=>{const o=e.cwd??process.cwd(),r=v(o);return e.json?process.stdout.write(`${JSON.stringify(r,void 0,2)}
`):x(r,e.logger),{code:0,snapshot:r}},E=j(({cwd:e,logger:o,options:r})=>S({cwd:e,json:r.json===!0,logger:o}));export{v as collectInfo,E as execute,S as runInfoCommand};