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