@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands
2 lines (1 loc) • 3.01 kB
JavaScript
import{existsSync as p}from"node:fs";import{join as d}from"node:path";import{runCodegen as g}from"@lunora/codegen";import{r as m}from"../packem_shared/api-spec-BENwiyUa.mjs";import{c as w}from"../packem_shared/codegen-error-DJN6pTH5.mjs";import{i as u}from"../packem_shared/command-Bjv4VmYA.mjs";import{M as y,P as v}from"../packem_shared/detect-package-manager-B2eIuAiP.mjs";import{i as S,r as $,d as j,s as P}from"../packem_shared/output-format-D7cKB-O5.mjs";import{k}from"../packem_shared/schema-drift-gate-CpqG-xP4.mjs";import{defaultSpawner as U}from"../packem_shared/createRecordingSpawner-C8_7nffs.mjs";import{validateWranglerProject as x}from"@lunora/config";const b=async(r,o)=>{if(!p(d(r,"tsconfig.json")))return{warning:"no tsconfig.json found — skipping TypeScript type-check"};const e=y(v(r),"tsc",["--noEmit","-p","tsconfig.json"]),t=await o({args:e.args,command:e.command,cwd:r});return t.code===0?{}:{error:`type errors: tsc --noEmit exited ${String(t.code)}`}},D="/_lunora/health",h=r=>(r.endsWith("/")?r.slice(0,-1):r)+D,E=async(r,o)=>{const e=h(r);let t;try{t=await o(e)}catch(a){const n=a instanceof Error?a.message:String(a);return{error:`health probe failed: could not reach ${e} (${n})`}}return t.ok?{}:{error:`health probe failed: ${e} returned HTTP ${String(t.status)}`}},R=async(r,o)=>{if(r.healthUrl===void 0||r.healthUrl==="")return;const e=await E(r.healthUrl,r.healthFetch??(t=>fetch(t)));if(e.error===void 0){o.success(`verify: health probe ok (${h(r.healthUrl)})`);return}return e.error},T=(r,o,e,t)=>{if(o.length===0&&e.length===0)return r.success("verify: project is valid"),{code:0,errors:[],warnings:[],wranglerPath:t};if(e.length>0){r.warn("verify: warnings:");for(const a of e)r.warn(` - ${a}`)}if(o.length>0){r.error("verify: errors:");for(const a of o){r.error(` - ${a}`);const n=w(a);n!==void 0&&r.error(n)}return{code:1,errors:o,warnings:e,wranglerPath:t}}return r.success("verify: project is valid (with warnings)"),{code:0,errors:[],warnings:e,wranglerPath:t}},C=async r=>{const o=r.cwd??process.cwd(),e=P(r.format,r.logger),t=S("verify",r.format);if(t!==void 0)return r.logger.error(t),{code:1,error:t,errors:[],warnings:[],wranglerPath:void 0};const a=x({projectRoot:o}),n=[...a.report.errors],c=[...a.report.warnings];try{const i=g({apiSpec:r.apiSpec,dryRun:!0,projectRoot:o}),s=k({allowDrift:r.allowSchemaDrift===!0,codegen:i,logger:e,readOnly:!0});s.blocked&&n.push(s.reason)}catch(i){const s=i instanceof Error?i.message:String(i);n.push(`codegen failed: ${s}`)}if(r.typecheck!==!1){const i=await b(o,r.spawner??U);i.error!==void 0&&n.push(i.error),i.warning!==void 0&&c.push(i.warning)}const l=await R(r,e);l!==void 0&&n.push(l);const f=T(e,n,c,a.wranglerPath);return $(r.format)&&j(f),f},G=u(async({cwd:r,logger:o,options:e})=>({code:(await C({allowSchemaDrift:e.allowSchemaDrift===!0,apiSpec:m(e.apiSpec),cwd:r,format:e.format,healthUrl:e.healthUrl,logger:o,typecheck:e.typecheck===!1?!1:void 0})).code}));export{G as execute,C as runVerifyCommand};