@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.01 kB
JavaScript
import{runCodegen as A}from"@lunora/codegen";import{inferLunoraBindings as y}from"@lunora/config";import{collectWranglerSecretVariables as S,collectExportGaps as T}from"@lunora/config/cloudflare";import{r as x,e as b}from"../packem_shared/advisory-gate-Cl8IEFIj.mjs";import{p as D}from"../packem_shared/api-spec-lYyq4vL6.mjs";import{d as R}from"../packem_shared/command-DwC11Cwe.mjs";import{r as C}from"../packem_shared/deploy-target-D9GPy_tq.mjs";import{l as f,v as k,p as E,i as j}from"../packem_shared/output-format-DfogXx0p.mjs";import{r as G}from"../packem_shared/platform-diagnostics-uOXqysk3.mjs";const p=3,O=r=>{const i=r.cwd??process.cwd(),o=j(r.format),e=f(r.format,r.logger),c=k("codegen",r.format);if(c!==void 0)return r.logger.error(c),{advisories:[],cronTriggers:[],error:c,failedAdvisories:0,outputDirectory:""};const g=x(r),a=C(i,r.target);if(a.target===void 0)return r.logger.error(a.error??"unknown deploy target"),{advisories:[],cronTriggers:[],error:a.error??"unknown deploy target",failedAdvisories:0,outputDirectory:""};const{target:v}=a,t=A({apiSpec:r.apiSpec,projectRoot:i,target:v,wranglerVariables:S(i)}),l={advisories:t.advisories.map(s=>({detail:s.detail,level:s.level,name:s.name,remediation:s.remediation})),cronTriggers:t.cronTriggers,failedAdvisories:0,outputDirectory:t.outputDirectory};if(e.success(`codegen wrote dataModel.ts, api.ts, server.ts to ${t.outputDirectory}`),t.advisories.length>0){const s=t.advisories.length,$=t.advisories.map(n=>` [${n.level}] ${n.name} — ${n.detail}
↳ ${n.remediation}`);e.warn(`${s.toString()} schema ${s===1?"advisory":"advisories"}:
${$.join(`
`)}`)}const m=G(t.platformDiagnostics,e);m!==void 0&&(l.error=m);const{errorAdvisories:d,names:h,shouldBlock:w}=b(l.advisories,g);w&&e.error(`${d.length.toString()} ERROR-level ${d.length===1?"advisory":"advisories"} (${h.join(", ")}). Codegen wrote its output; this exit code is the gate. Pass --no-strict-advisories to downgrade it to a warning.`),t.cronTriggers.length>p&&e.warn(`${t.cronTriggers.length.toString()} distinct cron expressions declared — Cloudflare allows at most ${p.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).`);const u={...l,failedAdvisories:g?d.length:0};return o&&E(u),u},F=async(r,i)=>{let o;try{o=T(await y({projectRoot:r}))}catch{return}for(const e of o)i.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.`)},W=R(async({cwd:r,logger:i,options:o})=>{const e=O({apiSpec:D(o.apiSpec),cwd:r,format:o.format,logger:i,strictAdvisories:o.strictAdvisories,target:o.target});return e.outputDirectory!==""&&await F(r,f(o.format,i)),{code:e.error===void 0&&e.failedAdvisories===0?0:1}});export{W as execute,O as runCodegenCommand};