@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands
3 lines (2 loc) • 3.88 kB
JavaScript
import{readFileSync as g,existsSync as f}from"node:fs";import{join as d}from"node:path";import{discoverSchema as p}from"@lunora/codegen";import{readLinkedProject as u}from"@lunora/config";import{parse as b}from"jsonc-parser";import{Project as h}from"ts-morph";import{i as y}from"../packem_shared/command-Bjv4VmYA.mjs";const j=e=>{for(const o of["wrangler.jsonc","wrangler.json"]){const r=d(e,o);if(f(r))return r}},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=d(e,"package.json");if(!f(o))return[];let r;try{r=JSON.parse(g(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,m]of Object.entries(t))i.startsWith("@lunora/")&&typeof m=="string"&&!n.has(i)&&n.set(i,m)}return[...n.entries()].toSorted(([a],[t])=>a.localeCompare(t)).map(([a,t])=>({name:a,version:t}))},v=e=>{const o=k(e),r=j(e);let s;if(r)try{s=w(b(g(r,"utf8")))}catch{s=void 0}const n=d(e,"lunora","schema.ts");let a,t;if(f(n))try{const i=new h({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}},z=y(({cwd:e,logger:o,options:r})=>S({cwd:e,json:r.json===!0,logger:o}));export{v as collectInfo,z as execute,S as runInfoCommand};