@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands
2 lines (1 loc) • 3.25 kB
JavaScript
import{existsSync as g}from"node:fs";import{findWranglerFile as w}from"@lunora/config";import{join as v,basename as f}from"@visulima/path";import{i as y}from"../packem_shared/command-Bjv4VmYA.mjs";import{i as h,r as b,d as k,s as $}from"../packem_shared/output-format-D7cKB-O5.mjs";import{C as S,B as T}from"../packem_shared/tui-prompts-CCt3jm1k.mjs";import{o as j,n as C,i as U,a as c,u as x,d as l,b as B,r as L,c as m,e as W,f as u,g as q,h as F,p as M,l as R,j as A}from"../packem_shared/storage-DOvAKGi4.mjs";import{M as D}from"../packem_shared/commands-BhX2Bo9B.mjs";const H=r=>{const o=r.trim().toLowerCase();return F.find(e=>e.value===o||e.label.toLowerCase()===o||o==="auth0"&&e.value==="auth-auth0"||o==="clerk"&&e.value==="auth-clerk")?.value},J=async r=>{if(r.provider!==void 0&&r.provider!==""){const e=H(r.provider);return e===void 0?(r.logger.warn(`add: unknown --provider "${r.provider}" — using "${u}" (email & password).`),u):e}if(r.yes===!0)return u;const o=r.promptSelect??((e,a,s)=>T(e,a,s));return q(o)},d=r=>r.promptText??((o,e)=>S(o,e)),z=async r=>{const o=f(r.cwd??process.cwd());if(r.bucket!==void 0&&r.bucket!==""){const e=U(r.bucket);if(e!==void 0)return e;const a=c(o);return r.logger.warn(`add: "${r.bucket}" isn't a valid R2 bucket name (lowercase alphanumeric + hyphens, 3–63 chars) — using "${a}".`),a}return r.yes===!0?c(o):x(d(r),o)},E=async r=>{const o=e=>{r.logger.warn(`add: ${e}`)};if(r.mailTo!==void 0&&r.mailTo!=="")return l(r.mailTo,o);if(r.yes!==!0)return l(await d(r)(B,{placeholder:"you@yourdomain.com"}),o)},G=async r=>{const o=f(r.cwd??process.cwd());if(r.db!==void 0&&r.db!==""){const e=L(r.db);if(e!==void 0)return e;const a=m(o);return r.logger.warn(`add: "${r.db}" isn't a usable D1 database name — using "${a}".`),a}return r.yes===!0?m(o):W(d(r),o)},I=async(r,o)=>r.kind==="auth"?[await J(o)]:r.kind==="email"?[C]:[r.item],K=async r=>{const o=r.cwd??process.cwd(),e=r.feature===void 0?void 0:j(r.feature);if(e===void 0)return r.logger.error("add requires a feature or registry item. Usage: lunora add <auth|email|storage|crons|presence|…>"),{code:1,items:[]};if(!g(v(o,"lunora"))||w(o)===void 0)return r.logger.error("add: not a Lunora project here (need a lunora/ directory and a wrangler.jsonc). Run `lunora init` first."),{code:1,items:[]};const a=await I(e,r),s=[];if(a.includes("storage")){const t=await z(r);s.push(i=>M(i,t))}if(a.includes("mail")){const t=await E(r);t!==void 0&&s.push(i=>R(i,t))}if(a.some(t=>t==="auth"||t.startsWith("auth-"))){const t=await G(r);s.push(i=>A(i,t))}const n=s.length>0?t=>{let i=t;for(const p of s)i=p(i);return i}:void 0;return{code:(await D({allowUnsafeSource:r.allowUnsafeSource,cwd:o,from:r.from,logger:r.logger,names:[...a],ref:r.ref,source:r.source,transformManifest:n,yes:!0})).code,items:a}},_=y(async({argument:r,cwd:o,logger:e,options:a})=>{const s=h("add",a.format);if(s!==void 0)return e.error(s),{code:1};const n=$(a.format,e),t=await K({allowUnsafeSource:a.allowUnsafeSource===!0,bucket:a.bucket,cwd:o,db:a.db,feature:r[0],from:a.from,logger:n,mailTo:a.mailTo,provider:a.provider,ref:a.ref,source:a.source,yes:a.yes===!0});return b(a.format)&&k({code:t.code,items:t.items}),{code:t.code}});export{_ as execute,K as runAddFeature};