@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, migrate, seed, doctor, insights, logs, registry, and the rest of the project commands
5 lines (4 loc) • 3.33 kB
JavaScript
import{runCodegen as v}from"@lunora/codegen";import{applyLintIgnores as h,detectLintTools as w,inferLunoraBindings as y,resolveSchemaDirectory as $}from"@lunora/config";import{warnCloudflareCliConfigOnce as A,collectWranglerSecretVariables as S,collectExportGaps as T}from"@lunora/config/cloudflare";import{r as D,a as x,e as C}from"../packem_shared/platform-diagnostics-Cn2g6Jh-.mjs";import{p as k,r as b}from"../packem_shared/deploy-target-DCWwiuAe.mjs";import{d as E}from"../packem_shared/command-CAXl2A1S.mjs";import{EXIT_CODE as I}from"../packem_shared/EXIT_CODE-D_XCixv8.mjs";import{r as L}from"../packem_shared/lint-ignore-report-DKZagpqk.mjs";const u=3,O=r=>{const s=r.cwd??process.cwd(),{logger:i}=r,e=D(r),o=b(s,r.target);if(o.target===void 0)return r.logger.error(o.error??"unknown deploy target"),{advisories:[],code:I.USAGE,cronTriggers:[],error:o.error??"unknown deploy target",failedAdvisories:0,outputDirectory:""};const{target:a}=o,t=v({apiSpec:r.apiSpec,projectRoot:s,target:a,wranglerVariables:S(s)}),l={advisories:t.advisories.map(n=>({detail:n.detail,level:n.level,name:n.name,remediation:n.remediation})),cronTriggers:t.cronTriggers,failedAdvisories:0,outputDirectory:t.outputDirectory};if(i.success(`codegen wrote ${t.writtenFiles.join(", ")} to ${t.outputDirectory}`),t.advisories.length>0){const n=t.advisories.length,f=t.advisories.map(c=>` [${c.level}] ${c.name} — ${c.detail}
↳ ${c.remediation}`);i.warn(`${n.toString()} schema ${n===1?"advisory":"advisories"}:
${f.join(`
`)}`)}const g=x(t.platformDiagnostics,i);g.errors.length>0&&(l.error=g.errors.join("; "));const{errorAdvisories:d,names:p,shouldBlock:m}=C(l.advisories,e);return m&&i.error(`${d.length.toString()} ERROR-level ${d.length===1?"advisory":"advisories"} (${p.join(", ")}). Codegen wrote its output; this exit code is the gate. Pass --no-strict-advisories to downgrade it to a warning.`),t.cronTriggers.length>u&&i.warn(`${t.cronTriggers.length.toString()} distinct cron expressions declared — Cloudflare allows at most ${u.toString()} Cron Triggers per Worker. Consolidate schedules (jobs can share one expression) or move finer-grained work to Durable Object alarms via @lunora/scheduler (runAfter/runAt).`),{...l,failedAdvisories:e?d.length:0}},R=async(r,s)=>{let i;try{i=T(await y({projectRoot:r,schemaDir:$(r)}))}catch(e){s.warn(`could not check whether declared containers/workflows/agents are re-exported by the worker entry: ${e instanceof Error?e.message:String(e)}. Run \`lunora doctor\` to check explicitly.`);return}for(const e of i)s.warn(`${e.kind} "${e.exportName}" is declared but ${e.className} is not exported by the worker entry — add \`export * from "./lunora/_generated/${e.module}"\` so wrangler can provision its binding. Until then it deploys with nothing to run.`)},G=(r,s)=>{try{L(h(r,w(r)),s)}catch{}},F=E(async({cwd:r,format:s,logger:i,options:e})=>{const o=O({apiSpec:k(e.apiSpec),cwd:r,format:s,logger:i,strictAdvisories:e.strictAdvisories,target:e.target});if(o.outputDirectory!==""){const a=i;G(r,a),await R(r,a),A(r,t=>{a.warn(t)})}return{code:o.code??(o.error===void 0&&o.failedAdvisories===0?0:1),data:{advisories:o.advisories,cronTriggers:o.cronTriggers,failedAdvisories:o.failedAdvisories,outputDirectory:o.outputDirectory},error:o.error}});export{F as execute,O as runCodegenCommand};