@lunora/cli 1.0.0-alpha.254 → 1.0.0-alpha.255

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{C as o,V as a,r as n}from"./packem_shared/cli-DOpChqUe.mjs";import{runCodegenCommand as m}from"./packem_chunks/runCodegenCommand.mjs";import{runDeployCommand as p}from"./packem_chunks/runDeployCommand.mjs";import{planDevCommand as C,runDevCommand as f}from"./packem_chunks/planDevCommand.mjs";import{runInitCommand as s}from"./packem_chunks/runInitCommand.mjs";import{runMigrateGenerateCommand as u}from"./packem_shared/runMigrateGenerateCommand-BMS_KnVC.mjs";import{runResetCommand as E}from"./packem_chunks/runResetCommand.mjs";import{runRpcCommand as D}from"./packem_chunks/runRpcCommand.mjs";import{EXIT_CODE as R,exitCodeForCode as S,exitCodeForError as A,exitCodeForStatus as c}from"./packem_shared/EXIT_CODE-08cwt3MK.mjs";import{insertSchemaExtension as _}from"./packem_shared/insertSchemaExtension-DuiV6cba.mjs";import{createLogger as F,pail as b}from"./packem_shared/createLogger-Cl18I8AX.mjs";import{diffSnapshots as h,renderAddColumn as y,renderCreateIndex as L,renderCreateTable as w,renderDropIndex as B,renderDropTable as P,renderMigrationFile as U,validatorKindToSqlType as V}from"./packem_shared/diffSnapshots-DtC5Cs4Z.mjs";import{default as G}from"./packem_shared/schemaIrToSnapshot-irmd5g0Y.mjs";import{createRecordingSpawner as Q,defaultSpawner as j}from"./packem_shared/createRecordingSpawner-sS7LEN7x.mjs";import{default as H}from"./packem_shared/parseManifest-CwPTKdtS.mjs";import{D as X,r as Y}from"./packem_shared/import-D7qdpSmJ.mjs";import{REQUIRED_COMPATIBILITY_DATE as k,REQUIRED_FLAG as z,validateWranglerProject as J,validateWranglerConfig as $}from"@lunora/config/cloudflare";import{b as er}from"./packem_shared/catalog-Cbzph90w.mjs";import{r as ar,a as nr,b as tr}from"./packem_shared/commands-DpKPubLi.mjs";import{runExportCommand as dr}from"./packem_shared/runExportCommand-LEwEr8p0.mjs";export{o as COMMANDS,X as DEFAULT_IMPORT_BATCH_SIZE,R as EXIT_CODE,k as REQUIRED_COMPATIBILITY_DATE,z as REQUIRED_FLAG,a as VERSION,er as buildRegistryIndex,F as createLogger,Q as createRecordingSpawner,j as defaultSpawner,h as diffSnapshots,S as exitCodeForCode,A as exitCodeForError,c as exitCodeForStatus,_ as insertSchemaExtension,b as pail,H as parseManifest,C as planDevCommand,y as renderAddColumn,L as renderCreateIndex,w as renderCreateTable,B as renderDropIndex,P as renderDropTable,U as renderMigrationFile,ar as runAddCommand,nr as runBuildIndexCommand,n as runCli,m as runCodegenCommand,p as runDeployCommand,f as runDevCommand,dr as runExportCommand,Y as runImportCommand,s as runInitCommand,u as runMigrateGenerateCommand,tr as runRegistryViewCommand,E as runResetCommand,D as runRpcCommand,G as schemaIrToSnapshot,J as validateWrangler,$ as validateWranglerConfig,V as validatorKindToSqlType};
1
+ import{C as o,V as a,r as n}from"./packem_shared/cli-DOpChqUe.mjs";import{runCodegenCommand as m}from"./packem_chunks/runCodegenCommand.mjs";import{runDeployCommand as p}from"./packem_chunks/runDeployCommand.mjs";import{planDevCommand as C,runDevCommand as f}from"./packem_chunks/planDevCommand.mjs";import{runInitCommand as s}from"./packem_chunks/runInitCommand.mjs";import{runMigrateGenerateCommand as u}from"./packem_shared/runMigrateGenerateCommand-BMS_KnVC.mjs";import{runResetCommand as E}from"./packem_chunks/runResetCommand.mjs";import{runRpcCommand as D}from"./packem_chunks/runRpcCommand.mjs";import{EXIT_CODE as R,exitCodeForCode as S,exitCodeForError as A,exitCodeForStatus as c}from"./packem_shared/EXIT_CODE-08cwt3MK.mjs";import{insertSchemaExtension as _}from"./packem_shared/insertSchemaExtension-DuiV6cba.mjs";import{createLogger as F,pail as b}from"./packem_shared/createLogger-Cl18I8AX.mjs";import{diffSnapshots as h,renderAddColumn as y,renderCreateIndex as L,renderCreateTable as w,renderDropIndex as B,renderDropTable as P,renderMigrationFile as U,validatorKindToSqlType as V}from"./packem_shared/diffSnapshots-DtC5Cs4Z.mjs";import{default as G}from"./packem_shared/schemaIrToSnapshot-irmd5g0Y.mjs";import{createRecordingSpawner as Q,defaultSpawner as j}from"./packem_shared/createRecordingSpawner-sS7LEN7x.mjs";import{default as H}from"./packem_shared/parseManifest-CwPTKdtS.mjs";import{D as X,r as Y}from"./packem_shared/import-D7qdpSmJ.mjs";import{REQUIRED_COMPATIBILITY_DATE as k,REQUIRED_FLAG as z,validateWranglerProject as J,validateWranglerConfig as $}from"@lunora/config/cloudflare";import{b as er}from"./packem_shared/catalog-Cbzph90w.mjs";import{r as ar,a as nr,b as tr}from"./packem_shared/commands-CdVObzRk.mjs";import{runExportCommand as dr}from"./packem_shared/runExportCommand-LEwEr8p0.mjs";export{o as COMMANDS,X as DEFAULT_IMPORT_BATCH_SIZE,R as EXIT_CODE,k as REQUIRED_COMPATIBILITY_DATE,z as REQUIRED_FLAG,a as VERSION,er as buildRegistryIndex,F as createLogger,Q as createRecordingSpawner,j as defaultSpawner,h as diffSnapshots,S as exitCodeForCode,A as exitCodeForError,c as exitCodeForStatus,_ as insertSchemaExtension,b as pail,H as parseManifest,C as planDevCommand,y as renderAddColumn,L as renderCreateIndex,w as renderCreateTable,B as renderDropIndex,P as renderDropTable,U as renderMigrationFile,ar as runAddCommand,nr as runBuildIndexCommand,n as runCli,m as runCodegenCommand,p as runDeployCommand,f as runDevCommand,dr as runExportCommand,Y as runImportCommand,s as runInitCommand,u as runMigrateGenerateCommand,tr as runRegistryViewCommand,E as runResetCommand,D as runRpcCommand,G as schemaIrToSnapshot,J as validateWrangler,$ as validateWranglerConfig,V as validatorKindToSqlType};
@@ -1 +1 @@
1
- import{existsSync as k,readFileSync as A}from"node:fs";import{applyLintIgnores as I,detectLintTools as N}from"@lunora/config";import{findWranglerFile as U}from"@lunora/config/cloudflare";import{join as w,basename as h}from"@visulima/path";import{d as S}from"../packem_shared/command-Mmxzxyr5.mjs";import{EXIT_CODE as o}from"../packem_shared/EXIT_CODE-08cwt3MK.mjs";import{r as D}from"../packem_shared/lint-ignore-report-DKZagpqk.mjs";import{t as y,a as E}from"../packem_shared/tui-prompts-B3YwUhGw.mjs";import{i as _}from"../packem_shared/resolve-ZDra033Q.mjs";import{r as L}from"../packem_shared/commands-DpKPubLi.mjs";import{n as M,i as O,A as P,E as R,s as j,d as f,p as $,r as g,M as F,a as C,b as v,c as p,D as m,e as x,f as H,g as i,h as z,j as B,w as G,k as W,l as V}from"../packem_shared/storage-BTSlZi8d.mjs";const q=e=>{const r=e.trim().toLowerCase();return B.find(a=>a.value===r||a.label.toLowerCase()===r||r==="auth0"&&a.value==="auth-auth0"||r==="clerk"&&a.value==="auth-clerk")?.value},T=e=>{try{const r=JSON.parse(A(w(e,"package.json"),"utf8"));return{...r.dependencies,...r.devDependencies}}catch{return{}}},J=async e=>{const r=e.cwd??process.cwd(),t=H(T(r));return t!==void 0?t:e.yes===!0?(e.logger.warn(`add: couldn't detect your framework — using "${i}". Pass a specific item (e.g. \`lunora add auth-ui-vue\`) to override.`),i):await(e.promptSelect??((c,n,d)=>y(c,n,d)))("Which framework is your app?",z,{default:i})??i},X=async e=>{if(e.provider!==void 0&&e.provider!==""){const t=q(e.provider);return t===void 0?(e.logger.warn(`add: unknown --provider "${e.provider}" — using "${m}" (email & password).`),m):t}if(e.yes===!0)return m;const r=e.promptSelect??((t,a,c)=>y(t,a,c));return x(r)},l=e=>e.promptText??((r,t)=>E(r,t)),K=async e=>{const r=h(e.cwd??process.cwd());if(e.bucket!==void 0&&e.bucket!==""){const t=j(e.bucket);if(t!==void 0)return t;const a=f(r);return e.logger.warn(`add: "${e.bucket}" isn't a valid R2 bucket name (lowercase alphanumeric + hyphens, 3–63 chars) — using "${a}".`),a}return e.yes===!0?f(r):$(l(e),r)},Q=async e=>{const r=t=>{e.logger.warn(`add: ${t}`)};if(e.mailTo!==void 0&&e.mailTo!=="")return g(e.mailTo,r);if(e.yes!==!0)return g(await l(e)(F,{placeholder:"you@yourdomain.com"}),r)},Y=async e=>{const r=h(e.cwd??process.cwd());if(e.db!==void 0&&e.db!==""){const t=C(e.db);if(t!==void 0)return t;const a=v(r);return e.logger.warn(`add: "${e.db}" isn't a usable D1 database name — using "${a}".`),a}return e.yes===!0?v(r):p(l(e),r)},Z=async(e,r)=>e.kind==="auth"?[await X(r)]:e.kind==="auth-ui"?[await J(r)]:e.kind==="email"?[R]:[e.item],ee=(e,r)=>{D(I(e,N(e)),r)},re=e=>!_(e)||e.yes===!0,ae=async e=>{const r=e.cwd??process.cwd(),t=e.feature===void 0?void 0:M(e.feature);if(t===void 0)return e.logger.error("add requires a feature or registry item. Usage: lunora add <auth|email|storage|crons|presence|…>"),{code:o.USAGE,items:[]};if(!k(w(r,"lunora"))||U(r)===void 0)return e.logger.error("add: not a Lunora project here (need a lunora/ directory and a wrangler.jsonc). Run `lunora init` first."),{code:o.USAGE,items:[]};if(t.kind==="auth-ui"&&O(T(r)))return e.logger.error(`add: ${P}`),{code:o.USAGE,items:[]};const a=await Z(t,e),c=[];if(a.includes("storage")){const s=await K(e);c.push(u=>G(u,s))}if(a.includes("mail")){const s=await Q(e);s!==void 0&&c.push(u=>W(u,s))}if(a.some(s=>s==="auth"||s.startsWith("auth-"))){const s=await Y(e);c.push(u=>V(u,s))}const n=c.length>0?s=>{let u=s;for(const b of c)u=b(u);return u}:void 0,d=await L({allowUnsafeSource:e.allowUnsafeSource,confirm:e.confirm,cwd:r,from:e.from,logger:e.logger,names:[...a],ref:e.ref,source:e.source,transformManifest:n,yes:re(e)});return d.code===0&&ee(r,e.logger),{code:d.code,items:a}},ge=S(async({argument:e,cwd:r,logger:t,options:a})=>{const c=await ae({allowUnsafeSource:a.allowUnsafeSource===!0,bucket:a.bucket,cwd:r,db:a.db,feature:e[0],from:a.from,logger:t,mailTo:a.mailTo,provider:a.provider,ref:a.ref,source:a.source,yes:a.yes===!0});return{code:c.code,data:{items:c.items},...c.error===void 0?{}:{error:c.error}}});export{ge as execute,ae as runAddFeature};
1
+ import{existsSync as k,readFileSync as A}from"node:fs";import{applyLintIgnores as I,detectLintTools as N}from"@lunora/config";import{findWranglerFile as U}from"@lunora/config/cloudflare";import{join as w,basename as h}from"@visulima/path";import{d as S}from"../packem_shared/command-Mmxzxyr5.mjs";import{EXIT_CODE as o}from"../packem_shared/EXIT_CODE-08cwt3MK.mjs";import{r as D}from"../packem_shared/lint-ignore-report-DKZagpqk.mjs";import{t as y,a as E}from"../packem_shared/tui-prompts-B3YwUhGw.mjs";import{i as _}from"../packem_shared/resolve-DUCSc7jQ.mjs";import{r as L}from"../packem_shared/commands-CdVObzRk.mjs";import{n as M,i as O,A as P,E as R,s as j,d as f,p as $,r as g,M as F,a as C,b as v,c as p,D as m,e as x,f as H,g as i,h as z,j as B,w as G,k as W,l as V}from"../packem_shared/storage-2MQBGhKZ.mjs";const q=e=>{const r=e.trim().toLowerCase();return B.find(a=>a.value===r||a.label.toLowerCase()===r||r==="auth0"&&a.value==="auth-auth0"||r==="clerk"&&a.value==="auth-clerk")?.value},T=e=>{try{const r=JSON.parse(A(w(e,"package.json"),"utf8"));return{...r.dependencies,...r.devDependencies}}catch{return{}}},J=async e=>{const r=e.cwd??process.cwd(),t=H(T(r));return t!==void 0?t:e.yes===!0?(e.logger.warn(`add: couldn't detect your framework — using "${i}". Pass a specific item (e.g. \`lunora add auth-ui-vue\`) to override.`),i):await(e.promptSelect??((c,n,d)=>y(c,n,d)))("Which framework is your app?",z,{default:i})??i},X=async e=>{if(e.provider!==void 0&&e.provider!==""){const t=q(e.provider);return t===void 0?(e.logger.warn(`add: unknown --provider "${e.provider}" — using "${m}" (email & password).`),m):t}if(e.yes===!0)return m;const r=e.promptSelect??((t,a,c)=>y(t,a,c));return x(r)},l=e=>e.promptText??((r,t)=>E(r,t)),K=async e=>{const r=h(e.cwd??process.cwd());if(e.bucket!==void 0&&e.bucket!==""){const t=j(e.bucket);if(t!==void 0)return t;const a=f(r);return e.logger.warn(`add: "${e.bucket}" isn't a valid R2 bucket name (lowercase alphanumeric + hyphens, 3–63 chars) — using "${a}".`),a}return e.yes===!0?f(r):$(l(e),r)},Q=async e=>{const r=t=>{e.logger.warn(`add: ${t}`)};if(e.mailTo!==void 0&&e.mailTo!=="")return g(e.mailTo,r);if(e.yes!==!0)return g(await l(e)(F,{placeholder:"you@yourdomain.com"}),r)},Y=async e=>{const r=h(e.cwd??process.cwd());if(e.db!==void 0&&e.db!==""){const t=C(e.db);if(t!==void 0)return t;const a=v(r);return e.logger.warn(`add: "${e.db}" isn't a usable D1 database name — using "${a}".`),a}return e.yes===!0?v(r):p(l(e),r)},Z=async(e,r)=>e.kind==="auth"?[await X(r)]:e.kind==="auth-ui"?[await J(r)]:e.kind==="email"?[R]:[e.item],ee=(e,r)=>{D(I(e,N(e)),r)},re=e=>!_(e)||e.yes===!0,ae=async e=>{const r=e.cwd??process.cwd(),t=e.feature===void 0?void 0:M(e.feature);if(t===void 0)return e.logger.error("add requires a feature or registry item. Usage: lunora add <auth|email|storage|crons|presence|…>"),{code:o.USAGE,items:[]};if(!k(w(r,"lunora"))||U(r)===void 0)return e.logger.error("add: not a Lunora project here (need a lunora/ directory and a wrangler.jsonc). Run `lunora init` first."),{code:o.USAGE,items:[]};if(t.kind==="auth-ui"&&O(T(r)))return e.logger.error(`add: ${P}`),{code:o.USAGE,items:[]};const a=await Z(t,e),c=[];if(a.includes("storage")){const s=await K(e);c.push(u=>G(u,s))}if(a.includes("mail")){const s=await Q(e);s!==void 0&&c.push(u=>W(u,s))}if(a.some(s=>s==="auth"||s.startsWith("auth-"))){const s=await Y(e);c.push(u=>V(u,s))}const n=c.length>0?s=>{let u=s;for(const b of c)u=b(u);return u}:void 0,d=await L({allowUnsafeSource:e.allowUnsafeSource,confirm:e.confirm,cwd:r,from:e.from,logger:e.logger,names:[...a],ref:e.ref,source:e.source,transformManifest:n,yes:re(e)});return d.code===0&&ee(r,e.logger),{code:d.code,items:a}},ge=S(async({argument:e,cwd:r,logger:t,options:a})=>{const c=await ae({allowUnsafeSource:a.allowUnsafeSource===!0,bucket:a.bucket,cwd:r,db:a.db,feature:e[0],from:a.from,logger:t,mailTo:a.mailTo,provider:a.provider,ref:a.ref,source:a.source,yes:a.yes===!0});return{code:c.code,data:{items:c.items},...c.error===void 0?{}:{error:c.error}}});export{ge as execute,ae as runAddFeature};
@@ -1 +1 @@
1
- import{d as l}from"../packem_shared/command-Mmxzxyr5.mjs";import{EXIT_CODE as n}from"../packem_shared/EXIT_CODE-08cwt3MK.mjs";import{r as s,b as t,a as o}from"../packem_shared/commands-DpKPubLi.mjs";const y=l(({argument:a,cwd:u,format:m,logger:e,options:r})=>{const f=a[0],c=a.slice(1);if(f==="add")return s({allowUnsafeSource:r.allowUnsafeSource===!0,cwd:u,diff:r.diff===!0,dryRun:r.dryRun===!0,format:m,from:r.from,logger:e,names:c,overwrite:r.overwrite===!0,ref:r.ref,source:r.source,yes:r.yes===!0});if(f==="list")return s({allowUnsafeSource:r.allowUnsafeSource===!0,cwd:u,format:m,from:r.from,list:!0,logger:e,names:[],ref:r.ref,source:r.source});if(f==="view")return t({allowUnsafeSource:r.allowUnsafeSource===!0,cwd:u,from:r.from,logger:e,names:c,ref:r.ref,source:r.source});if(f==="build")return o({check:r.check===!0,cwd:u,from:r.from,logger:e,names:[],out:r.out});const d="registry: unknown subcommand. Usage: lunora registry <add|list|view|build> [names…]";return e.error(d),{code:n.USAGE,error:d}});export{y as execute};
1
+ import{d as l}from"../packem_shared/command-Mmxzxyr5.mjs";import{EXIT_CODE as n}from"../packem_shared/EXIT_CODE-08cwt3MK.mjs";import{r as s,b as t,a as o}from"../packem_shared/commands-CdVObzRk.mjs";const y=l(({argument:a,cwd:u,format:m,logger:e,options:r})=>{const f=a[0],c=a.slice(1);if(f==="add")return s({allowUnsafeSource:r.allowUnsafeSource===!0,cwd:u,diff:r.diff===!0,dryRun:r.dryRun===!0,format:m,from:r.from,logger:e,names:c,overwrite:r.overwrite===!0,ref:r.ref,source:r.source,yes:r.yes===!0});if(f==="list")return s({allowUnsafeSource:r.allowUnsafeSource===!0,cwd:u,format:m,from:r.from,list:!0,logger:e,names:[],ref:r.ref,source:r.source});if(f==="view")return t({allowUnsafeSource:r.allowUnsafeSource===!0,cwd:u,from:r.from,logger:e,names:c,ref:r.ref,source:r.source});if(f==="build")return o({check:r.check===!0,cwd:u,from:r.from,logger:e,names:[],out:r.out});const d="registry: unknown subcommand. Usage: lunora registry <add|list|view|build> [names…]";return e.error(d),{code:n.USAGE,error:d}});export{y as execute};
@@ -1,3 +1,3 @@
1
- import{writeFileSync as E,existsSync as w,cpSync as j,statSync as b,lstatSync as I,readdirSync as N,mkdirSync as D,readFileSync as M}from"node:fs";import{join as u,sep as x,relative as B,resolve as O,dirname as K}from"node:path";import{SDK_TARGETS as V,SDK_LANGUAGES as G,generateSdk as P,isTypedSchema as Q}from"@lunora/codegen";import{LunoraError as d}from"@lunora/errors";import{d as J}from"../packem_shared/command-Mmxzxyr5.mjs";import{r as _,a as U,b as q,c as H,s as W}from"../packem_shared/resolve-ZDra033Q.mjs";const $="gh:anolilab/lunora/sdks",v="lunora-transport.json",X=/_test\.|Tests?\./u,k=t=>t.startsWith("test_")||X.test(t),A=(t,n="")=>N(t).toSorted((e,r)=>e.localeCompare(r)).flatMap(e=>{const r=u(t,e),a=n.length>0?`${n}/${e}`:e;return b(r).isDirectory()?A(r,a):[a]}),C=(t,n)=>{const e=I(n);if(e.isSymbolicLink())throw new d("INTERNAL",`refusing to vendor "${B(t,n)}" — it is a symlink, not a regular file`);if(e.isDirectory())for(const r of N(n))k(r)||C(t,u(n,r))},F=(t,n,e,r)=>{const a=u(t,e);if(!w(a))throw new d("NOT_FOUND",`transport is missing ${e}`);C(t,a);const s=u(n,r);return j(a,s,{filter:o=>!k(o.slice(o.lastIndexOf(x)+1)),force:!0,recursive:!0}),b(s).isDirectory()?A(s).map(o=>`${r}/${o}`):[r]},R=(t,n)=>n.vendor.every(e=>w(u(t,e.from))),z=async(t,n)=>{const{language:e,logger:r,outputDirectory:a,registryOptions:s,target:o}=n,{cleanup:f,directory:h}=await H(e,{...s,ref:t},$);try{if(!R(h,o)){r.warn(`${$}/${e} does not exist at ${t}.`);return}return{files:o.vendor.flatMap(c=>F(h,a,c.from,c.to)).toSorted((c,l)=>c.localeCompare(l)),ref:t,source:`${$}/${e}`,versionMatched:t===_()}}finally{f()}},Y=(t,n)=>{const{language:e,outputDirectory:r,target:a}=n,s=u(t,e);if(!w(s))throw new d("NOT_FOUND",`no transport at ${s} — --from must point at a directory of per-language transports (the repo's \`sdks/\`)`);if(!R(s,a)){const o=a.vendor.map(f=>f.from).join(", ");throw new d("NOT_FOUND",`${s} is not a ${e} transport — expected it to contain ${o}`)}return{files:a.vendor.flatMap(o=>F(s,r,o.from,o.to)).toSorted((o,f)=>o.localeCompare(f)),ref:"local",source:s,versionMatched:!1}},Z=async t=>{const{allowUnsafeSource:n,from:e,language:r,logger:a,outputDirectory:s,ref:o,source:f,target:h}=t;if(e!==void 0)return Y(e,{language:r,outputDirectory:s,target:h});const c={allowUnsafeSource:n,logger:a,names:[],source:f},l=async i=>z(await q(i,a),{language:r,logger:a,outputDirectory:s,registryOptions:c,target:h});if(o!==void 0&&o.length>0){const i=await l(o);if(i===void 0)throw new d("NOT_FOUND",`--ref ${o} carries no ${r} transport — pick a ref that does, or pass --from <dir> to copy a local one`);return i}const m=_(),g=await l(m).catch(i=>{const y=i instanceof Error?i.message.split(`
1
+ import{writeFileSync as E,existsSync as w,cpSync as j,statSync as b,lstatSync as I,readdirSync as N,mkdirSync as D,readFileSync as M}from"node:fs";import{join as u,sep as x,relative as B,resolve as O,dirname as K}from"node:path";import{SDK_TARGETS as V,SDK_LANGUAGES as G,generateSdk as P,isTypedSchema as Q}from"@lunora/codegen";import{LunoraError as d}from"@lunora/errors";import{d as J}from"../packem_shared/command-Mmxzxyr5.mjs";import{r as _,a as U,b as q,c as H,s as W}from"../packem_shared/resolve-DUCSc7jQ.mjs";const $="gh:anolilab/lunora/sdks",v="lunora-transport.json",X=/_test\.|Tests?\./u,k=t=>t.startsWith("test_")||X.test(t),A=(t,n="")=>N(t).toSorted((e,r)=>e.localeCompare(r)).flatMap(e=>{const r=u(t,e),a=n.length>0?`${n}/${e}`:e;return b(r).isDirectory()?A(r,a):[a]}),C=(t,n)=>{const e=I(n);if(e.isSymbolicLink())throw new d("INTERNAL",`refusing to vendor "${B(t,n)}" — it is a symlink, not a regular file`);if(e.isDirectory())for(const r of N(n))k(r)||C(t,u(n,r))},F=(t,n,e,r)=>{const a=u(t,e);if(!w(a))throw new d("NOT_FOUND",`transport is missing ${e}`);C(t,a);const s=u(n,r);return j(a,s,{filter:o=>!k(o.slice(o.lastIndexOf(x)+1)),force:!0,recursive:!0}),b(s).isDirectory()?A(s).map(o=>`${r}/${o}`):[r]},R=(t,n)=>n.vendor.every(e=>w(u(t,e.from))),z=async(t,n)=>{const{language:e,logger:r,outputDirectory:a,registryOptions:s,target:o}=n,{cleanup:f,directory:h}=await H(e,{...s,ref:t},$);try{if(!R(h,o)){r.warn(`${$}/${e} does not exist at ${t}.`);return}return{files:o.vendor.flatMap(c=>F(h,a,c.from,c.to)).toSorted((c,l)=>c.localeCompare(l)),ref:t,source:`${$}/${e}`,versionMatched:t===_()}}finally{f()}},Y=(t,n)=>{const{language:e,outputDirectory:r,target:a}=n,s=u(t,e);if(!w(s))throw new d("NOT_FOUND",`no transport at ${s} — --from must point at a directory of per-language transports (the repo's \`sdks/\`)`);if(!R(s,a)){const o=a.vendor.map(f=>f.from).join(", ");throw new d("NOT_FOUND",`${s} is not a ${e} transport — expected it to contain ${o}`)}return{files:a.vendor.flatMap(o=>F(s,r,o.from,o.to)).toSorted((o,f)=>o.localeCompare(f)),ref:"local",source:s,versionMatched:!1}},Z=async t=>{const{allowUnsafeSource:n,from:e,language:r,logger:a,outputDirectory:s,ref:o,source:f,target:h}=t;if(e!==void 0)return Y(e,{language:r,outputDirectory:s,target:h});const c={allowUnsafeSource:n,logger:a,names:[],source:f},l=async i=>z(await q(i,a),{language:r,logger:a,outputDirectory:s,registryOptions:c,target:h});if(o!==void 0&&o.length>0){const i=await l(o);if(i===void 0)throw new d("NOT_FOUND",`--ref ${o} carries no ${r} transport — pick a ref that does, or pass --from <dir> to copy a local one`);return i}const m=_(),g=await l(m).catch(i=>{const y=i instanceof Error?i.message.split(`
2
2
  `)[0]??i.message:String(i);a.warn(`could not fetch the transport at ${m} (${y}).`)});if(g!==void 0)return g;const p=await l(void 0);if(p===void 0)throw new d("NOT_FOUND",`no ${r} transport at ${m} or on the release branch. This language may not be released yet — pass --from <dir> to copy one from a checkout, or --ref <tag> to name a ref that has it.`);return a.warn(`FALLBACK: the transport is NOT version-matched to this CLI (${U()}). Wanted ${m}, used ${p.ref}. The vendored wire protocol may not be the one this surface was generated against; ${v} records what was actually copied.`),p},ee=(t,n,e)=>{const r={cliVersion:U(),files:e.files,language:n,note:e.versionMatched?"Vendored by `lunora sdk generate` at the ref matching the CLI that generated the surface beside it. Regenerate with a newer CLI to upgrade.":"Vendored by `lunora sdk generate` from a ref that is NOT this CLI's release tag, so the transport and the generated surface may be different protocol vintages.",ref:e.ref,source:e.source,versionMatched:e.versionMatched};E(u(t,v),`${JSON.stringify(r,void 0,4)}
3
3
  `,"utf8")},te=u("lunora","_generated","openrpc.json"),re=t=>{if(!w(t))throw new d("NOT_FOUND",`no OpenRPC document at ${t} — run \`lunora codegen --api-spec openrpc\` (or \`--api-spec both\`) first, or pass --spec`);let n;try{n=JSON.parse(M(t,"utf8"))}catch(e){throw new d("BAD_REQUEST",`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}if(n===null||typeof n!="object"||!Array.isArray(n.methods))throw new d("BAD_REQUEST",`${t} is not an OpenRPC document (no \`methods\` array)`);return n},de=J(async({argument:t,cwd:n,logger:e,options:r})=>{const a=t[0]??"generate";if(a!=="generate")throw new d("BAD_REQUEST",`unknown subcommand "${a}" — the only one is \`lunora sdk generate\``);const s=r.lang??"python",o=V[s];if(o===void 0)throw new d("BAD_REQUEST",`unsupported --lang "${s}" — expected one of: ${G.join(" | ")}`);const f=W("sdk generate",{allowUnsafeSource:r.allowUnsafeSource,logger:e,names:[],source:r.source});if(f!==void 0)throw new d("BAD_REQUEST",f);const h=O(n,r.spec??te),c=O(n,r.out??u("sdk",s)),l=re(h);l.methods.length===0&&e.warn(`${h} declares no methods — writing an empty SDK.`);const{files:m,undeclared:g,unrepresentable:p}=await P(l,o);D(c,{recursive:!0});const i=await Z({allowUnsafeSource:r.allowUnsafeSource,from:r.from,language:s,logger:e,outputDirectory:c,ref:r.ref,source:r.source,target:o});ee(c,s,i);for(const[S,L]of Object.entries(m)){const T=u(c,S);D(K(T),{recursive:!0}),E(T,L,"utf8")}const y=l.methods.filter(S=>!Q(S.result?.schema)).length;return e.success(`Generated ${s} SDK for ${String(l.methods.length)} function(s) → ${c}`),e.info(`Vendored the ${s} transport (${String(i.files.length)} file(s)) from ${i.source} @ ${i.ref}${i.versionMatched?" — version-matched to this CLI":""}; see ${v}.`),e.info(o.requires.length>0?`Install in the consuming project: ${o.requires.join(", ")}.`:"Nothing to install — the transport is vendored and needs only the standard library."),g.length>0&&e.warn(`${String(g.length)} schema(s) are not expressible as a named ${s} model, so those arguments or returns stay untyped: ${g.join(", ")}`),p.length>0&&e.warn(`${String(p.length)} function(s) take or return a \`v.bigint()\`/\`v.bytes()\`, which no generated model can carry — their parameters stay untyped, so pass wire values directly: ${p.join(", ")}`),y>0&&e.warn(`${String(y)} of ${String(l.methods.length)} function(s) return an untyped result — declare \`.output()\` on them for typed returns.`),{code:0}});export{de as execute};
@@ -1,4 +1,4 @@
1
- import{runCodegen as f}from"@lunora/codegen";import{applyLintIgnores as h,detectLintTools as w,inferLunoraBindings as y}from"@lunora/config";import{collectWranglerSecretVariables as $,collectExportGaps as A}from"@lunora/config/cloudflare";import{r as T,a as S,e as x}from"../packem_shared/platform-diagnostics-Cn2g6Jh-.mjs";import{p as k,r as D}from"../packem_shared/deploy-target-DCWwiuAe.mjs";import{d as b}from"../packem_shared/command-Mmxzxyr5.mjs";import{EXIT_CODE as C}from"../packem_shared/EXIT_CODE-08cwt3MK.mjs";import{r as E}from"../packem_shared/lint-ignore-report-DKZagpqk.mjs";const p=3,R=r=>{const i=r.cwd??process.cwd(),{logger:t}=r,e=T(r),o=D(i,r.target);if(o.target===void 0)return r.logger.error(o.error??"unknown deploy target"),{advisories:[],code:C.USAGE,cronTriggers:[],error:o.error??"unknown deploy target",failedAdvisories:0,outputDirectory:""};const{target:a}=o,s=f({apiSpec:r.apiSpec,projectRoot:i,target:a,wranglerVariables:$(i)}),d={advisories:s.advisories.map(n=>({detail:n.detail,level:n.level,name:n.name,remediation:n.remediation})),cronTriggers:s.cronTriggers,failedAdvisories:0,outputDirectory:s.outputDirectory};if(t.success(`codegen wrote dataModel.ts, api.ts, server.ts to ${s.outputDirectory}`),s.advisories.length>0){const n=s.advisories.length,v=s.advisories.map(c=>` [${c.level}] ${c.name} — ${c.detail}
1
+ import{runCodegen as v}from"@lunora/codegen";import{applyLintIgnores as h,detectLintTools as w,inferLunoraBindings as $}from"@lunora/config";import{collectWranglerSecretVariables as y,collectExportGaps as A}from"@lunora/config/cloudflare";import{r as T,a as S,e as x}from"../packem_shared/platform-diagnostics-Cn2g6Jh-.mjs";import{p as k,r as D}from"../packem_shared/deploy-target-DCWwiuAe.mjs";import{d as b}from"../packem_shared/command-Mmxzxyr5.mjs";import{EXIT_CODE as C}from"../packem_shared/EXIT_CODE-08cwt3MK.mjs";import{r as E}from"../packem_shared/lint-ignore-report-DKZagpqk.mjs";const u=3,R=r=>{const s=r.cwd??process.cwd(),{logger:t}=r,e=T(r),o=D(s,r.target);if(o.target===void 0)return r.logger.error(o.error??"unknown deploy target"),{advisories:[],code:C.USAGE,cronTriggers:[],error:o.error??"unknown deploy target",failedAdvisories:0,outputDirectory:""};const{target:a}=o,i=v({apiSpec:r.apiSpec,projectRoot:s,target:a,wranglerVariables:y(s)}),d={advisories:i.advisories.map(n=>({detail:n.detail,level:n.level,name:n.name,remediation:n.remediation})),cronTriggers:i.cronTriggers,failedAdvisories:0,outputDirectory:i.outputDirectory};if(t.success(`codegen wrote ${i.writtenFiles.join(", ")} to ${i.outputDirectory}`),i.advisories.length>0){const n=i.advisories.length,f=i.advisories.map(c=>` [${c.level}] ${c.name} — ${c.detail}
2
2
  ↳ ${c.remediation}`);t.warn(`${n.toString()} schema ${n===1?"advisory":"advisories"}:
3
- ${v.join(`
4
- `)}`)}const g=S(s.platformDiagnostics,t);g.errors.length>0&&(d.error=g.errors.join("; "));const{errorAdvisories:l,names:u,shouldBlock:m}=x(d.advisories,e);return m&&t.error(`${l.length.toString()} ERROR-level ${l.length===1?"advisory":"advisories"} (${u.join(", ")}). Codegen wrote its output; this exit code is the gate. Pass --no-strict-advisories to downgrade it to a warning.`),s.cronTriggers.length>p&&t.warn(`${s.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).`),{...d,failedAdvisories:e?l.length:0}},I=async(r,i)=>{let t;try{t=A(await y({projectRoot:r}))}catch(e){i.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 t)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.`)},L=(r,i)=>{try{E(h(r,w(r)),i)}catch{}},U=b(async({cwd:r,format:i,logger:t,options:e})=>{const o=R({apiSpec:k(e.apiSpec),cwd:r,format:i,logger:t,strictAdvisories:e.strictAdvisories,target:e.target});if(o.outputDirectory!==""){const a=t;L(r,a),await I(r,a)}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{U as execute,R as runCodegenCommand};
3
+ ${f.join(`
4
+ `)}`)}const g=S(i.platformDiagnostics,t);g.errors.length>0&&(d.error=g.errors.join("; "));const{errorAdvisories:l,names:p,shouldBlock:m}=x(d.advisories,e);return m&&t.error(`${l.length.toString()} ERROR-level ${l.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.`),i.cronTriggers.length>u&&t.warn(`${i.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).`),{...d,failedAdvisories:e?l.length:0}},I=async(r,s)=>{let t;try{t=A(await $({projectRoot: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 t)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.`)},L=(r,s)=>{try{E(h(r,w(r)),s)}catch{}},V=b(async({cwd:r,format:s,logger:t,options:e})=>{const o=R({apiSpec:k(e.apiSpec),cwd:r,format:s,logger:t,strictAdvisories:e.strictAdvisories,target:e.target});if(o.outputDirectory!==""){const a=t;L(r,a),await I(r,a)}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{V as execute,R as runCodegenCommand};
@@ -1,4 +1,4 @@
1
- import{existsSync as m,mkdirSync as M,writeFileSync as w,readFileSync as k,readdirSync as ce,rmSync as O,lstatSync as de,mkdtempSync as ue,copyFileSync as Ge,renameSync as Ye}from"node:fs";import{tmpdir as pe}from"node:os";import{installArgsFor as he,execArgsFor as Je,detectFramework as Xe,isInteractive as y,LUNA_ART as Qe,LUNA_NAME as Ze,LUNA_SIGNOFF as et,BADGES as v,paintAnswer as tt,detectPackageManager as P,detectInstalledManagers as rt,runScriptCommand as at,detectLintTools as ot,addArgsFor as nt,applyLintIgnores as st}from"@lunora/config";import{walkSync as it}from"@visulima/fs";import{join as p,dirname as A,basename as _,resolve as me,relative as fe}from"@visulima/path";import{downloadTemplate as ge}from"giget";import{modify as lt,applyEdits as ct}from"jsonc-parser";import{join as K,dirname as dt}from"node:path";import{d as ut}from"../packem_shared/command-Mmxzxyr5.mjs";import{EXIT_CODE as f}from"../packem_shared/EXIT_CODE-08cwt3MK.mjs";import pt from"magic-string";import{Project as ht,SyntaxKind as g}from"ts-morph";import{P as q}from"../packem_shared/prompt-cancelled-BvsNxg_Q.mjs";import{l as ve,m as mt,n as we,o as ye,b as ft}from"../packem_shared/resolve-ZDra033Q.mjs";import{defaultSpawner as be}from"../packem_shared/createRecordingSpawner-sS7LEN7x.mjs";import{d as gt,e as vt,f as wt,a as xe,t as G,g as ke,h as yt,b as Ce,i as Se,w as bt,j as xt,k as Le,l as kt}from"../packem_shared/tui-prompts-B3YwUhGw.mjs";import{A as Me,E as Ae,p as Ct,w as St,M as Lt,r as Mt,k as At,e as Et,c as Ee,l as Ne,i as Nt,f as _t}from"../packem_shared/storage-BTSlZi8d.mjs";import{r as It}from"../packem_shared/commands-DpKPubLi.mjs";import{logStep as Q}from"../packem_shared/createLogger-Cl18I8AX.mjs";import{r as $t}from"../packem_shared/lint-ignore-report-DKZagpqk.mjs";import Rt from"node:dns/promises";const Y={bun:{githubCacheKey:void 0,githubSetupStep:` - uses: oven-sh/setup-bun@v2
1
+ import{existsSync as m,mkdirSync as M,writeFileSync as w,readFileSync as k,readdirSync as ce,rmSync as O,lstatSync as de,mkdtempSync as ue,copyFileSync as Ge,renameSync as Ye}from"node:fs";import{tmpdir as pe}from"node:os";import{installArgsFor as he,execArgsFor as Je,detectFramework as Xe,isInteractive as y,LUNA_ART as Qe,LUNA_NAME as Ze,LUNA_SIGNOFF as et,BADGES as v,paintAnswer as tt,detectPackageManager as P,detectInstalledManagers as rt,runScriptCommand as at,detectLintTools as ot,addArgsFor as nt,applyLintIgnores as st}from"@lunora/config";import{walkSync as it}from"@visulima/fs";import{join as p,dirname as A,basename as _,resolve as me,relative as fe}from"@visulima/path";import{downloadTemplate as ge}from"giget";import{modify as lt,applyEdits as ct}from"jsonc-parser";import{join as K,dirname as dt}from"node:path";import{d as ut}from"../packem_shared/command-Mmxzxyr5.mjs";import{EXIT_CODE as f}from"../packem_shared/EXIT_CODE-08cwt3MK.mjs";import pt from"magic-string";import{Project as ht,SyntaxKind as g}from"ts-morph";import{P as q}from"../packem_shared/prompt-cancelled-BvsNxg_Q.mjs";import{m as ve,n as mt,o as we,q as ye,b as ft}from"../packem_shared/resolve-DUCSc7jQ.mjs";import{defaultSpawner as be}from"../packem_shared/createRecordingSpawner-sS7LEN7x.mjs";import{d as gt,e as vt,f as wt,a as xe,t as G,g as ke,h as yt,b as Ce,i as Se,w as bt,j as xt,k as Le,l as kt}from"../packem_shared/tui-prompts-B3YwUhGw.mjs";import{A as Me,E as Ae,p as Ct,w as St,M as Lt,r as Mt,k as At,e as Et,c as Ee,l as Ne,i as Nt,f as _t}from"../packem_shared/storage-2MQBGhKZ.mjs";import{r as It}from"../packem_shared/commands-CdVObzRk.mjs";import{logStep as Q}from"../packem_shared/createLogger-Cl18I8AX.mjs";import{r as $t}from"../packem_shared/lint-ignore-report-DKZagpqk.mjs";import Rt from"node:dns/promises";const Y={bun:{githubCacheKey:void 0,githubSetupStep:` - uses: oven-sh/setup-bun@v2
2
2
  `,gitlabImage:"oven/bun:1",gitlabProvisionScript:[],installCmd:"bun install --frozen-lockfile",lockfile:"bun.lockb"},npm:{githubCacheKey:"npm",githubSetupStep:"",gitlabImage:"node:22",gitlabProvisionScript:[],installCmd:"npm ci",lockfile:"package-lock.json"},pnpm:{githubCacheKey:"pnpm",githubSetupStep:` - uses: pnpm/action-setup@v4
3
3
  with:
4
4
  version: latest
@@ -1260,4 +1260,4 @@ export const send = mutation
1260
1260
  `),Be=e=>{const t=p(e,De);m(t)||w(t,aa(),"utf8")},V=e=>{const t=[];for(const r of it(e,{includeDirs:!1,includeFiles:!0}))de(r.path).isSymbolicLink()||t.push(r.path);return t},se="vitejs/vite",ie=(e,t)=>{for(const r of V(e)){const a=p(t,fe(e,r));M(A(a),{recursive:!0}),Ge(r,a)}},je=async(e,t,r)=>{const a=V(e),o=[],n=we(),s=await Zr(a,n);for(const i of a){const l=fe(e,i),c=p(t,l);M(A(c),{recursive:!0});const u=k(i);let h=qr(i)?Qr(u.toString("utf8"),r):void 0;h!==void 0&&_(i)==="package.json"&&(h=ea(h,n,s)),h===void 0?w(c,u):w(c,h,"utf8"),o.push(c)}return o},H=(e,t,r)=>t!==void 0&&t.length>0?t:`${Kr}/${e}#${ye(r)}`,oa=e=>e.includes("..")?!1:e.startsWith("gh:")||e.startsWith("github:")||e.startsWith("https://"),E=(e,t)=>{e.info(`[dry-run] would ${t}`)},Ue=(e,t,r)=>(e.error(`init: the template at ${r} contains no files — nothing was scaffolded. Check the template name, \`--source\` layout and \`--ref\`.`),{code:f.NOT_FOUND,files:[],target:t}),Ve="Template files copied.",J=(e,t,r)=>{y()&&process.stdout.write(`
1261
1261
  `),e.success(`scaffolded ${String(t.length)} files into ${r}`)},na=(e,t)=>{const{args:r,command:a}=nt(e,t);return`${a} ${r.join(" ")}`},Fe=(e,t)=>{let r=me(e);for(;;){if(t(r))return!0;const a=A(r);if(a===r)return!1;r=a}},sa=e=>{if(m(p(e,De)))return!0;const t=p(e,"package.json");if(!m(t))return!1;try{return JSON.parse(k(t,"utf8")).workspaces!==void 0}catch{return!1}},X=e=>Fe(e,sa),ia=e=>Fe(e,t=>m(p(t,".git"))),la=async(e,t)=>{if(e.yes===!0||!y()||ia(A(t)))return;if(!await Ce(x.git,{badge:v.git,defaultYes:!1})){await Se("Sounds good! You can always run git init manually.");return}if(e.dryRun===!0){E(e.logger,"initialize a git repository");return}const r=e.spawner??be;(await bt("Initializing a git repository…",()=>r({args:["init"],command:"git",cwd:t}))).code===0?await T("git","Initialized an empty git repository."):e.logger.warn("`git init` failed — initialize it yourself later with `git init`.")},ca=async(e,t,r,a)=>{const o=[{code:`cd ./${e}`,lead:"Enter your project directory using"}];t===void 0&&o.push({code:`${r} install`,lead:"Install dependencies with",tail:a?" from the workspace root":void 0}),o.push({code:at(r,"dev"),lead:"Run",tail:" to start the dev server."},{code:"lunora add",lead:"Add features like auth or storage using"});const n=[{code:"https://lunora.sh/docs",lead:"Read the docs at"},{code:"https://lunora.sh/chat",lead:"Stuck? Join the chat at"}];if(y()){await xt(v.next,x.nextHeader,o,n);return}const s=o.map(i=>`${i.lead} ${i.code}${i.tail??""}`);s.push("",...n.map(i=>`${i.lead} ${i.code}${i.tail??""}`)),await T("next",x.nextHeader,s.join(`
1262
1262
  `))},da=e=>e.yes!==!0&&(e.installPrompt!==void 0||y()),ua=async(e,t)=>{if(!da(e)||X(A(t)))return;const r=rt(e.packageManagerProbe),[a]=r;if(a===void 0)return;if(!await(e.installPrompt?.confirmInstall??(async()=>Ce(x.install,{badge:v.deps,defaultYes:!0})))()){await Se("No problem! Remember to install dependencies after setup.");return}let n=a;if(r.length>1&&(n=e.installPrompt?await e.installPrompt.selectManager(r):await G(x.packageManager,r.map(u=>({label:u,value:u})),{badge:v.deps,default:a})??a),e.dryRun===!0){E(e.logger,`install dependencies with ${n}`);return}n==="pnpm"&&Be(t);const s=e.spawner??be,{args:i,command:l}=he(n);await T("deps",`Installing dependencies with ${n}…`);const c=await s({args:i,command:l,cwd:t});if(c.code!==0){e.logger.warn(`\`${l} install\` exited with code ${String(c.code)} — run it yourself in ${_(t)}/.`);return}return await T("deps",`Dependencies installed with ${n}.`),n},pa=async(e,t,r,a,o,n)=>{const s=p(e,t);if(!m(s))return o.error(`template not found in local source: ${s}`),{code:f.NOT_FOUND,files:[],target:r};const i=await je(s,r,a);return i.length===0?Ue(o,r,s):(n(),J(o,i,r),{code:0,files:i,target:r})},ha=async e=>{const{logger:t,markComplete:r,name:a,ref:o,source:n,target:s,templateType:i}=e,l=ue(p(pe(),"lunora-init-fetch-")),c=p(l,"template");try{const u=n!==void 0&&n.length>0?o:await ft(o,t),h=H(i,n,u);let d,b=[];if(await Le([{label:`${i} template fetched`,run:async()=>{d=await ge(h,{cwd:l,dir:c,force:!0,install:!1,silent:!0})}},{label:`files copied into ${a}/`,run:async()=>{b=await je(c,s,a)}}],{end:Ve,start:"Project initializing…"}),b.length===0)return Ue(t,s,d?.source??h);r();const $=V(c);return y()&&process.stdout.write(`
1263
- `),t.info(d?.commit?`template: ${d.source} @ ${d.commit} (${String($.length)} files)`:`template: ${d?.source??h} (${String($.length)} files)`),J(t,b,s),{code:0,files:b,target:s}}catch(u){if(u instanceof q)throw u;const{hints:h,message:d}=Zt(u,{ref:ye(o),remote:H(i,n,o),templateType:i});t.error(d);for(const b of h)t.warn(b);return{code:1,files:[],target:s}}finally{O(l,{force:!0,recursive:!0})}},ma=e=>{for(const t of["_gitignore","_npmrc","_gitattributes"]){const r=p(e,t);m(r)&&Ye(r,p(e,`.${t.slice(1)}`))}},fa=async e=>{const{framework:t,logger:r,markComplete:a,name:o,overlayBaseFrom:n,target:s}=e,i=B[t],l=ue(p(pe(),"lunora-vite-base-"));try{let c;if(n!==void 0&&(c=p(n,`template-${i.createViteTemplate}`),!m(c)))return r.error(`create-vite base not found on disk: ${c}`),{code:f.NOT_FOUND,files:[],target:s};const u=async()=>{if(c!==void 0){ie(c,s);return}const d=p(l,"base"),b=await mt(se,"main",r),$=`github:${se}/packages/create-vite/template-${i.createViteTemplate}#${b}`;await ge($,{cwd:l,dir:d,force:!0,install:!1,silent:!0}),ma(d),ie(d,s)};let h=[];return await Le([{label:`create-vite (${i.label}) base ready`,run:u},{label:`Lunora overlay applied (${i.label})`,run:async()=>{h=await Tr({adapter:i,distTag:we(),logger:r,name:o,target:s})}}],{end:Ve,start:"Project initializing…"}),a(),J(r,h,s),{code:0,files:[...V(s)],target:s}}catch(c){if(c instanceof q)throw c;const u=c instanceof Error?c.message:String(c);return r.error(`failed to scaffold the ${i.label} base: ${u}`),{code:1,files:[],target:s}}finally{O(l,{force:!0,recursive:!0})}},z=(e,t,r,a,o)=>(o.error(`init --in-place: could not ${e} ${t}: ${r instanceof Error?r.message:String(r)}`),{code:1,files:[],target:a}),ga=(e,t)=>{const r=p(e,"vite.config.ts");try{w(r,Wr,"utf8")}catch(a){return z("write",r,a,e,t)}return t.success(`created ${r} with lunora() plugin`),{code:0,files:[r],target:e}},va=(e,t,r)=>{let a;try{a=k(e,"utf8")}catch(n){return z("read",e,n,t,r)}const o=Ie(a);if(!o.changed)return r.info(`${e}: ${o.reason??"no changes needed"}`),{code:0,files:[],target:t};try{w(e,o.code,"utf8")}catch(n){return z("write",e,n,t,r)}return r.success(`patched ${e} — added lunora() plugin`),{code:0,files:[e],target:t}},wa=(e,t)=>{const r=p(e,"lunora"),a=p(r,"schema.ts");if(m(a))return t.info(`lunora/ already present — left ${a} untouched`),[];const o=[];try{M(r,{recursive:!0}),w(a,Hr,"utf8"),o.push(a);const n=p(r,"messages.ts");m(n)||(w(n,zr,"utf8"),o.push(n)),t.success(`scaffolded lunora/ (${String(o.length)} file(s))`)}catch(n){const s=n instanceof Error?n.message:String(n);t.error(`init --here: could not scaffold lunora/: ${s}`)}return o},We=e=>e==="sveltekit"||e==="nuxt"||e==="astro",ya=(e,t,r)=>{const{adapter:a,class:o,framework:n}=e;r.info(""),r.info(`detected framework: ${n} (class ${o})`),r.info("next steps:");const s=[a,"@lunora/client","@lunora/runtime","@lunora/server"];We(n)||s.push("@lunora/vite"),r.info(` 1. install the adapter: ${na(t,s)}`),r.info(" 2. run codegen: lunora codegen"),o==="A"?(r.info(" 3. compose one worker: wrap your worker entry with"),r.info(" createWorker({ httpRouter: <your framework SSR handler>, shardDO: ShardDO, ... })"),r.info(` 4. add the provider: mount the ${a} provider in your root layout/route`),r.info(" 5. make a loader live: preloadQuery() in a loader, usePreloadedQuery() in the component"),r.info(" see https://lunora.sh/docs/frameworks/reactive-loaders")):o==="B"?(r.info(" 3. inject Lunora: mount Lunora realtime under /_lunora/* in your server hook"),r.info(` (${n} owns its Cloudflare adapter — Lunora composes into its server entry)`),r.info(` 4. add the provider: mount the ${a} provider in your root layout`),r.info(" 5. read the guide: https://lunora.sh/docs/frameworks/deploy")):(r.info(" 3. add the provider: wrap your app with the LunoraProvider from @lunora/react"),r.info(" 4. read the guide: https://lunora.sh/docs/frameworks/bring-your-framework")),r.info("")},ba=(e,t,r)=>{if(We(t))return r.info(`${t} wires Lunora through its server entry, not a lunora() Vite plugin — leaving the Vite config alone (see next steps)`),{code:0,files:[],target:e};const a=Oe(e);return a===void 0?ga(e,r):va(a,e,r)},xa=(e,t)=>{const r=Vt(e),a=ba(e,r.framework,t);if(a.code!==0)return a;const o=wa(e,t);return ya(r,P(e),t),{code:0,files:[...a.files,...o],target:e}},ka=e=>e.yes!==!0&&(e.prompt!==void 0||(e.interactive??y())),le=async(e,t,r)=>{r.dryRun!==!0&&await ur({apply:a=>st(e,a),detected:ot(e),interactive:t,logger:r.logger,multiSelect:r.lintPrompt??((a,o,n)=>ke(a,o,{...n,badge:v.add}))})},Ca=async(e,t)=>{const r=ka(e),a=e.add===void 0?[]:rr(e.add,s=>{e.logger.warn(s)}),n={applyAll:async s=>{if(s.length===0)return!0;if(e.dryRun===!0)return E(e.logger,`add ${s.map(d=>d.label).join(", ")}`),!0;const i=[],l=y()?{error:d=>{i.push({level:"error",message:d})},info:()=>{},success:()=>{},warn:d=>{i.push({level:"warn",message:d})}}:e.logger,c=s.map(d=>({running:`adding ${d.label}…`,task:()=>It({allowUnsafeSource:e.allowUnsafeSource,cwd:t,from:e.registryFrom,logger:l,names:[...d.names],ref:e.ref,source:e.registrySource,transformManifest:d.transformManifest,yes:!0})})),u=`added ${s.map(d=>d.label).join(", ")}`,h=await kt(v.add,c,u);for(const{level:d,message:b}of i)e.logger[d](b);return h.every(d=>d.code===0)},interactive:r,logger:e.logger,multiSelect:e.prompt?.multiSelect??((s,i,l)=>ke(s,i,{...l,badge:v.add})),preselected:a.length>0?a:void 0,projectName:_(t),resolveAuthUiItem:()=>{let s;try{const i=JSON.parse(k(p(t,"package.json"),"utf8"));s={...i.dependencies,...i.devDependencies}}catch{return"auth-ui-react"}if(!Nt(s))return _t(s)??"auth-ui-react"},select:e.prompt?.select??((s,i,l)=>G(s,i,{...l,badge:v.add})),text:e.prompt?.text??((s,i)=>xe(s,{...i,badge:v.add}))};if(a.length>0){const s=await re(n);return await le(t,r,e),s}return y()&&await yt(x.extras),await re(n),await le(t,r,e),!0},F="react",He=[{description:"React SPA — official create-vite base + the Lunora layer (the default)",label:"React",value:"react"},{description:"Vue SPA — create-vite base + Lunora",label:"Vue",value:"vue"},{description:"Solid SPA — create-vite base + Lunora",label:"Solid",value:"solid"},{description:"Solid 2.0 SPA — the Solid 2 line (@solidjs/web, vite-plugin-solid 3)",label:"Solid 2",value:"solid-v2"},{description:"Svelte SPA — create-vite base + Lunora",label:"Svelte",value:"svelte"},{description:"Next.js (App Router) — OpenNext on Cloudflare + a standalone Lunora worker",label:"Next.js",value:"next"},{description:"TanStack Start (React) — SSR with live-loader routes",label:"TanStack Start · React",value:"tanstack-start-react"},{description:"TanStack Start (Solid)",label:"TanStack Start · Solid",value:"tanstack-start-solid"},{description:"Next.js App Router on Vite (vinext) — composed into the Lunora worker (experimental)",label:"vinext · App Router",value:"vinext"},{description:"Next.js Pages Router on Vite (vinext) — composed into one worker (experimental)",label:"vinext · Pages Router",value:"vinext-pages"},{description:"React Router (v7, framework mode) — SSR composed into the Lunora worker",label:"React Router",value:"react-router"},{description:"Astro (islands) — single-worker, Lunora composed into the adapter worker",label:"Astro",value:"astro"},{description:"AnalogJS (Angular) — single-worker, Lunora mounted in Nitro",label:"Analog",value:"analog"},{description:"Nuxt (Vue) — single-worker, Lunora mounted in Nitro",label:"Nuxt",value:"nuxt"},{description:"SvelteKit — single-worker, Lunora composed into the adapter worker",label:"SvelteKit",value:"sveltekit"},{description:"React Native (Expo) — an iOS/Android/web app + a Lunora worker backend",label:"React Native · Expo",value:"expo"},{description:"Worker only — no frontend",label:"Standalone",value:"standalone"}],ze=Object.keys(B).join("|"),Ke=He.filter(e=>!j(e.value)).map(e=>e.value),qe=Ke.join("|"),Sa=e=>j(e)?{framework:e,kind:"overlay"}:{kind:"template",templateType:e},La=async e=>e.vite!==void 0?{framework:e.vite,kind:"overlay"}:e.templateType!==void 0?{kind:"template",templateType:e.templateType}:!y()||e.yes===!0?{framework:F,kind:"overlay"}:Sa(await G(x.framework,He,{badge:v.tmpl,default:F})??F),Ma=e=>{if(y()||e.yes===!0)return;const t=[];if(e.name===void 0&&t.push("a project name (`lunora init <name>`)"),e.templateType===void 0&&e.vite===void 0&&t.push(`a framework — \`--vite <${ze}>\` for an SPA, or \`-t <${qe}>\` for a bespoke template`),t.length!==0)return`lunora init can't prompt in a non-interactive terminal — provide ${t.join(" and ")}, or pass --yes to accept the defaults.`},Aa=async(e,t,r,a,o)=>j(t)?await Pe({isLocal:e.overlayBaseFrom!==void 0,logger:e.logger})?(M(a,{recursive:!0}),fa({framework:t,logger:e.logger,markComplete:o,name:r,overlayBaseFrom:e.overlayBaseFrom,target:a})):{code:1,files:[],target:a}:(e.logger.error(`init: unknown framework "${t}". Supported overlays: ${Object.keys(B).join(", ")}.`),{code:f.USAGE,files:[],target:a}),Ea=async(e,t,r,a,o)=>e.from!==void 0?await pa(e.from,t,a,r,e.logger,o):e.source!==void 0&&e.source.length>0&&!e.allowUnsafeSource&&!oa(e.source)?(e.logger.error(`init: refusing --source ${e.source} — only gh:, github:, or https:// sources are allowed (and may not contain ".."). Re-run with --allow-unsafe-source if you really want this.`),{code:f.USAGE,files:[],target:a}):await Pe({isLocal:!1,logger:e.logger,source:H(t,e.source,e.ref)})?ha({logger:e.logger,markComplete:o,name:r,ref:e.ref,source:e.source,target:a,templateType:t}):{code:1,files:[],target:a},Na=(e,t)=>{if(X(t))return;let r;try{r=P(e)}catch{return}r==="pnpm"&&Be(e)},_a=async(e,t,r)=>{await wt("realtime backend on Cloudflare Workers + Durable Objects");const a=Ma(e);if(a!==void 0)return e.logger.error(a),{code:f.USAGE,files:[],target:""};const o=Br(),n=e.name??await xe(x.name,{badge:v.dir,default:o,placeholder:o}),s=await La(e),i=n.trim();if(i.length===0)return e.logger.error("init: refusing an empty project name — pass a directory name (e.g. `lunora init my-app`)."),{code:f.USAGE,files:[],target:""};if(i.includes("/")||i.includes("\\")||i===".."||i===".")return e.logger.error(`init: refusing project name "${i}" — must not contain path separators or be "." / "..".`),{code:f.USAGE,files:[],target:""};if(!Gr.test(i))return e.logger.error(`init: refusing project name "${i}" — a Cloudflare Worker name must be lowercase letters, digits, "-" or "_" (starting with a letter, digit or "_"), and wrangler rejects anything else. Try \`${Xr(i)}\`.`),{code:f.USAGE,files:[],target:""};const l=me(t,i),c=de(l,{throwIfNoEntry:!1});if(c?.isSymbolicLink()===!0)return e.logger.error(`init: refusing to scaffold into "${l}" — it is a symlink. Remove it, or scaffold into a different directory name.`),{code:f.CONFLICT,files:[],target:l};const u=c!==void 0;if(u&&ce(l).length>0)return e.logger.error(`target directory not empty: ${l}`),{code:f.CONFLICT,files:[],target:l};if(e.dryRun===!0){const d=s.kind==="overlay"?`the ${s.framework} create-vite overlay`:`the ${s.templateType} template`;return E(e.logger,`scaffold ${d} into ${l}`),{code:0,files:[],target:l}}r.record(l,u);const h=s.kind==="overlay"?await Aa(e,s.framework,i,l,r.complete):await Ea(e,s.templateType,i,l,r.complete);return h.code===0&&Na(l,t),h},W=(e,t)=>{const{target:r,targetPreExisted:a}=e;if(!(r===void 0||!m(r))){if(a===!0)for(const o of ce(r))O(p(r,o),{force:!0,recursive:!0});else O(r,{force:!0,recursive:!0});t.info(`removed the partially-created project at ${r}`)}},Ia=async(e,t,r)=>e.inPlace!==!0?_a(e,t,r):e.dryRun===!0?(E(e.logger,`configure Lunora into ${t}`),{code:0,files:[],target:t}):xa(t,e.logger),$a=async(e,t,r)=>{const a=await Ca(e,t.target),o=e.inPlace===!0?void 0:await ua(e,t.target);if(e.inPlace!==!0){await la(e,t.target);const n=o??P(t.target);await ca(_(t.target),o,n,X(r)),await er(e.logger)}return a},Ra=(e,t,r)=>{if(t.code!==0||e.ci===void 0)return;if(e.dryRun===!0){E(e.logger,`scaffold a ${e.ci} CI deploy pipeline`);return}const a=e.inPlace===!0?r:t.target;try{const o=P(a);jt(a,e.ci,o,e.logger)}catch{e.logger.warn(`--ci ${e.ci}: could not detect a package manager for this project — skipped the CI pipeline.`)}},Oa=async e=>{const t=e.cwd??process.cwd(),r={};let a;try{a=await Ia(e,t,{complete:()=>{r.target=void 0},record:(o,n)=>{r.target=o,r.targetPreExisted=n}}),a.code===0&&a.target!==""?(r.target=void 0,await $a(e,a,t)||(a={...a,code:1})):a.code!==0&&W(r,e.logger)}catch(o){if(o instanceof q)return W(r,e.logger),process.stdout.write("\n ✖ Setup cancelled — run `lunora init` again whenever you're ready. 🌙\n"),{code:130,files:[],target:""};throw W(r,e.logger),o}return Ra(e,a,t),a},Ta=e=>typeof e=="string"&&Ke.includes(e),Pa=(e,t)=>{if(e!==void 0){if(Dt(e))return e;t.warn(`init: unknown --ci "${e}" — expected github | gitlab; skipping CI scaffold.`)}},Da=e=>e===void 0?{}:Ta(e)?{templateType:e}:j(e)?{vite:e}:{error:`init: unknown --template "${e}" — expected a bespoke template (${qe}) or an overlay framework (${ze}).`},no=ut(({argument:e,cwd:t,logger:r,options:a})=>{const o=Da(a.template);return"error"in o?(r.error(o.error),{code:f.USAGE}):Oa({add:a.add,allowUnsafeSource:a.allowUnsafeSource===!0,cwd:t,ci:Pa(a.ci,r),dryRun:a.dryRun===!0,from:a.from,inPlace:a.here===!0,interactive:a.interactive===!0?!0:void 0,logger:r,name:e[0],ref:a.ref,source:a.source,templateType:o.templateType,vite:a.vite??o.vite,yes:a.yes===!0})});export{no as execute,Ta as isTemplate,Da as resolveTemplateFlag,H as resolveTemplateSource,Oa as runInitCommand};
1263
+ `),t.info(d?.commit?`template: ${d.source} @ ${d.commit} (${String($.length)} files)`:`template: ${d?.source??h} (${String($.length)} files)`),J(t,b,s),{code:0,files:b,target:s}}catch(u){if(u instanceof q)throw u;const{hints:h,message:d}=Zt(u,{ref:ye(o),remote:H(i,n,o),templateType:i});t.error(d);for(const b of h)t.warn(b);return{code:1,files:[],target:s}}finally{O(l,{force:!0,recursive:!0})}},ma=e=>{for(const t of["_gitignore","_npmrc","_gitattributes"]){const r=p(e,t);m(r)&&Ye(r,p(e,`.${t.slice(1)}`))}},fa=async e=>{const{framework:t,logger:r,markComplete:a,name:o,overlayBaseFrom:n,target:s}=e,i=B[t],l=ue(p(pe(),"lunora-vite-base-"));try{let c;if(n!==void 0&&(c=p(n,`template-${i.createViteTemplate}`),!m(c)))return r.error(`create-vite base not found on disk: ${c}`),{code:f.NOT_FOUND,files:[],target:s};const u=async()=>{if(c!==void 0){ie(c,s);return}const d=p(l,"base"),b=await mt(se,"main",r),$=`github:${se}/packages/create-vite/template-${i.createViteTemplate}#${b}`;await ge($,{cwd:l,dir:d,force:!0,install:!1,silent:!0}),ma(d),ie(d,s)};let h=[];return await Le([{label:`create-vite (${i.label}) base ready`,run:u},{label:`Lunora overlay applied (${i.label})`,run:async()=>{h=await Tr({adapter:i,distTag:we(),logger:r,name:o,target:s})}}],{end:Ve,start:"Project initializing…"}),a(),J(r,h,s),{code:0,files:[...V(s)],target:s}}catch(c){if(c instanceof q)throw c;const u=c instanceof Error?c.message:String(c);return r.error(`failed to scaffold the ${i.label} base: ${u}`),{code:1,files:[],target:s}}finally{O(l,{force:!0,recursive:!0})}},z=(e,t,r,a,o)=>(o.error(`init --in-place: could not ${e} ${t}: ${r instanceof Error?r.message:String(r)}`),{code:1,files:[],target:a}),ga=(e,t)=>{const r=p(e,"vite.config.ts");try{w(r,Wr,"utf8")}catch(a){return z("write",r,a,e,t)}return t.success(`created ${r} with lunora() plugin`),{code:0,files:[r],target:e}},va=(e,t,r)=>{let a;try{a=k(e,"utf8")}catch(n){return z("read",e,n,t,r)}const o=Ie(a);if(!o.changed)return r.info(`${e}: ${o.reason??"no changes needed"}`),{code:0,files:[],target:t};try{w(e,o.code,"utf8")}catch(n){return z("write",e,n,t,r)}return r.success(`patched ${e} — added lunora() plugin`),{code:0,files:[e],target:t}},wa=(e,t)=>{const r=p(e,"lunora"),a=p(r,"schema.ts");if(m(a))return t.info(`lunora/ already present — left ${a} untouched`),[];const o=[];try{M(r,{recursive:!0}),w(a,Hr,"utf8"),o.push(a);const n=p(r,"messages.ts");m(n)||(w(n,zr,"utf8"),o.push(n)),t.success(`scaffolded lunora/ (${String(o.length)} file(s))`)}catch(n){const s=n instanceof Error?n.message:String(n);t.error(`init --here: could not scaffold lunora/: ${s}`)}return o},We=e=>e==="sveltekit"||e==="nuxt"||e==="astro",ya=(e,t,r)=>{const{adapter:a,class:o,framework:n}=e;r.info(""),r.info(`detected framework: ${n} (class ${o})`),r.info("next steps:");const s=[a,"@lunora/client","@lunora/runtime","@lunora/server"];We(n)||s.push("@lunora/vite"),r.info(` 1. install the adapter: ${na(t,s)}`),r.info(" 2. run codegen: lunora codegen"),o==="A"?(r.info(" 3. compose one worker: wrap your worker entry with"),r.info(" createWorker({ httpRouter: <your framework SSR handler>, shardDO: ShardDO, ... })"),r.info(` 4. add the provider: mount the ${a} provider in your root layout/route`),r.info(" 5. make a loader live: preloadQuery() in a loader, usePreloadedQuery() in the component"),r.info(" see https://lunora.sh/docs/frameworks/reactive-loaders")):o==="B"?(r.info(" 3. inject Lunora: mount Lunora realtime under /_lunora/* in your server hook"),r.info(` (${n} owns its Cloudflare adapter — Lunora composes into its server entry)`),r.info(` 4. add the provider: mount the ${a} provider in your root layout`),r.info(" 5. read the guide: https://lunora.sh/docs/frameworks/deploy")):(r.info(" 3. add the provider: wrap your app with the LunoraProvider from @lunora/react"),r.info(" 4. read the guide: https://lunora.sh/docs/frameworks/bring-your-framework")),r.info("")},ba=(e,t,r)=>{if(We(t))return r.info(`${t} wires Lunora through its server entry, not a lunora() Vite plugin — leaving the Vite config alone (see next steps)`),{code:0,files:[],target:e};const a=Oe(e);return a===void 0?ga(e,r):va(a,e,r)},xa=(e,t)=>{const r=Vt(e),a=ba(e,r.framework,t);if(a.code!==0)return a;const o=wa(e,t);return ya(r,P(e),t),{code:0,files:[...a.files,...o],target:e}},ka=e=>e.yes!==!0&&(e.prompt!==void 0||(e.interactive??y())),le=async(e,t,r)=>{r.dryRun!==!0&&await ur({apply:a=>st(e,a),detected:ot(e),interactive:t,logger:r.logger,multiSelect:r.lintPrompt??((a,o,n)=>ke(a,o,{...n,badge:v.add}))})},Ca=async(e,t)=>{const r=ka(e),a=e.add===void 0?[]:rr(e.add,s=>{e.logger.warn(s)}),n={applyAll:async s=>{if(s.length===0)return!0;if(e.dryRun===!0)return E(e.logger,`add ${s.map(d=>d.label).join(", ")}`),!0;const i=[],l=y()?{error:d=>{i.push({level:"error",message:d})},info:()=>{},success:()=>{},warn:d=>{i.push({level:"warn",message:d})}}:e.logger,c=s.map(d=>({running:`adding ${d.label}…`,task:()=>It({allowUnsafeSource:e.allowUnsafeSource,cwd:t,from:e.registryFrom,logger:l,names:[...d.names],ref:e.ref,source:e.registrySource,transformManifest:d.transformManifest,yes:!0})})),u=`added ${s.map(d=>d.label).join(", ")}`,h=await kt(v.add,c,u);for(const{level:d,message:b}of i)e.logger[d](b);return h.every(d=>d.code===0)},interactive:r,logger:e.logger,multiSelect:e.prompt?.multiSelect??((s,i,l)=>ke(s,i,{...l,badge:v.add})),preselected:a.length>0?a:void 0,projectName:_(t),resolveAuthUiItem:()=>{let s;try{const i=JSON.parse(k(p(t,"package.json"),"utf8"));s={...i.dependencies,...i.devDependencies}}catch{return"auth-ui-react"}if(!Nt(s))return _t(s)??"auth-ui-react"},select:e.prompt?.select??((s,i,l)=>G(s,i,{...l,badge:v.add})),text:e.prompt?.text??((s,i)=>xe(s,{...i,badge:v.add}))};if(a.length>0){const s=await re(n);return await le(t,r,e),s}return y()&&await yt(x.extras),await re(n),await le(t,r,e),!0},F="react",He=[{description:"React SPA — official create-vite base + the Lunora layer (the default)",label:"React",value:"react"},{description:"Vue SPA — create-vite base + Lunora",label:"Vue",value:"vue"},{description:"Solid SPA — create-vite base + Lunora",label:"Solid",value:"solid"},{description:"Solid 2.0 SPA — the Solid 2 line (@solidjs/web, vite-plugin-solid 3)",label:"Solid 2",value:"solid-v2"},{description:"Svelte SPA — create-vite base + Lunora",label:"Svelte",value:"svelte"},{description:"Next.js (App Router) — OpenNext on Cloudflare + a standalone Lunora worker",label:"Next.js",value:"next"},{description:"TanStack Start (React) — SSR with live-loader routes",label:"TanStack Start · React",value:"tanstack-start-react"},{description:"TanStack Start (Solid)",label:"TanStack Start · Solid",value:"tanstack-start-solid"},{description:"Next.js App Router on Vite (vinext) — composed into the Lunora worker (experimental)",label:"vinext · App Router",value:"vinext"},{description:"Next.js Pages Router on Vite (vinext) — composed into one worker (experimental)",label:"vinext · Pages Router",value:"vinext-pages"},{description:"React Router (v7, framework mode) — SSR composed into the Lunora worker",label:"React Router",value:"react-router"},{description:"Astro (islands) — single-worker, Lunora composed into the adapter worker",label:"Astro",value:"astro"},{description:"AnalogJS (Angular) — single-worker, Lunora mounted in Nitro",label:"Analog",value:"analog"},{description:"Nuxt (Vue) — single-worker, Lunora mounted in Nitro",label:"Nuxt",value:"nuxt"},{description:"SvelteKit — single-worker, Lunora composed into the adapter worker",label:"SvelteKit",value:"sveltekit"},{description:"React Native (Expo) — an iOS/Android/web app + a Lunora worker backend",label:"React Native · Expo",value:"expo"},{description:"Worker only — no frontend",label:"Standalone",value:"standalone"}],ze=Object.keys(B).join("|"),Ke=He.filter(e=>!j(e.value)).map(e=>e.value),qe=Ke.join("|"),Sa=e=>j(e)?{framework:e,kind:"overlay"}:{kind:"template",templateType:e},La=async e=>e.vite!==void 0?{framework:e.vite,kind:"overlay"}:e.templateType!==void 0?{kind:"template",templateType:e.templateType}:!y()||e.yes===!0?{framework:F,kind:"overlay"}:Sa(await G(x.framework,He,{badge:v.tmpl,default:F})??F),Ma=e=>{if(y()||e.yes===!0)return;const t=[];if(e.name===void 0&&t.push("a project name (`lunora init <name>`)"),e.templateType===void 0&&e.vite===void 0&&t.push(`a framework — \`--vite <${ze}>\` for an SPA, or \`-t <${qe}>\` for a bespoke template`),t.length!==0)return`lunora init can't prompt in a non-interactive terminal — provide ${t.join(" and ")}, or pass --yes to accept the defaults.`},Aa=async(e,t,r,a,o)=>j(t)?await Pe({isLocal:e.overlayBaseFrom!==void 0,logger:e.logger})?(M(a,{recursive:!0}),fa({framework:t,logger:e.logger,markComplete:o,name:r,overlayBaseFrom:e.overlayBaseFrom,target:a})):{code:1,files:[],target:a}:(e.logger.error(`init: unknown framework "${t}". Supported overlays: ${Object.keys(B).join(", ")}.`),{code:f.USAGE,files:[],target:a}),Ea=async(e,t,r,a,o)=>e.from!==void 0?await pa(e.from,t,a,r,e.logger,o):e.source!==void 0&&e.source.length>0&&!e.allowUnsafeSource&&!oa(e.source)?(e.logger.error(`init: refusing --source ${e.source} — only gh:, github:, or https:// sources are allowed (and may not contain ".."). Re-run with --allow-unsafe-source if you really want this.`),{code:f.USAGE,files:[],target:a}):await Pe({isLocal:!1,logger:e.logger,source:H(t,e.source,e.ref)})?ha({logger:e.logger,markComplete:o,name:r,ref:e.ref,source:e.source,target:a,templateType:t}):{code:1,files:[],target:a},Na=(e,t)=>{if(X(t))return;let r;try{r=P(e)}catch{return}r==="pnpm"&&Be(e)},_a=async(e,t,r)=>{await wt("realtime backend on Cloudflare Workers + Durable Objects");const a=Ma(e);if(a!==void 0)return e.logger.error(a),{code:f.USAGE,files:[],target:""};const o=Br(),n=e.name??await xe(x.name,{badge:v.dir,default:o,placeholder:o}),s=await La(e),i=n.trim();if(i.length===0)return e.logger.error("init: refusing an empty project name — pass a directory name (e.g. `lunora init my-app`)."),{code:f.USAGE,files:[],target:""};if(i.includes("/")||i.includes("\\")||i===".."||i===".")return e.logger.error(`init: refusing project name "${i}" — must not contain path separators or be "." / "..".`),{code:f.USAGE,files:[],target:""};if(!Gr.test(i))return e.logger.error(`init: refusing project name "${i}" — a Cloudflare Worker name must be lowercase letters, digits, "-" or "_" (starting with a letter, digit or "_"), and wrangler rejects anything else. Try \`${Xr(i)}\`.`),{code:f.USAGE,files:[],target:""};const l=me(t,i),c=de(l,{throwIfNoEntry:!1});if(c?.isSymbolicLink()===!0)return e.logger.error(`init: refusing to scaffold into "${l}" — it is a symlink. Remove it, or scaffold into a different directory name.`),{code:f.CONFLICT,files:[],target:l};const u=c!==void 0;if(u&&ce(l).length>0)return e.logger.error(`target directory not empty: ${l}`),{code:f.CONFLICT,files:[],target:l};if(e.dryRun===!0){const d=s.kind==="overlay"?`the ${s.framework} create-vite overlay`:`the ${s.templateType} template`;return E(e.logger,`scaffold ${d} into ${l}`),{code:0,files:[],target:l}}r.record(l,u);const h=s.kind==="overlay"?await Aa(e,s.framework,i,l,r.complete):await Ea(e,s.templateType,i,l,r.complete);return h.code===0&&Na(l,t),h},W=(e,t)=>{const{target:r,targetPreExisted:a}=e;if(!(r===void 0||!m(r))){if(a===!0)for(const o of ce(r))O(p(r,o),{force:!0,recursive:!0});else O(r,{force:!0,recursive:!0});t.info(`removed the partially-created project at ${r}`)}},Ia=async(e,t,r)=>e.inPlace!==!0?_a(e,t,r):e.dryRun===!0?(E(e.logger,`configure Lunora into ${t}`),{code:0,files:[],target:t}):xa(t,e.logger),$a=async(e,t,r)=>{const a=await Ca(e,t.target),o=e.inPlace===!0?void 0:await ua(e,t.target);if(e.inPlace!==!0){await la(e,t.target);const n=o??P(t.target);await ca(_(t.target),o,n,X(r)),await er(e.logger)}return a},Ra=(e,t,r)=>{if(t.code!==0||e.ci===void 0)return;if(e.dryRun===!0){E(e.logger,`scaffold a ${e.ci} CI deploy pipeline`);return}const a=e.inPlace===!0?r:t.target;try{const o=P(a);jt(a,e.ci,o,e.logger)}catch{e.logger.warn(`--ci ${e.ci}: could not detect a package manager for this project — skipped the CI pipeline.`)}},Oa=async e=>{const t=e.cwd??process.cwd(),r={};let a;try{a=await Ia(e,t,{complete:()=>{r.target=void 0},record:(o,n)=>{r.target=o,r.targetPreExisted=n}}),a.code===0&&a.target!==""?(r.target=void 0,await $a(e,a,t)||(a={...a,code:1})):a.code!==0&&W(r,e.logger)}catch(o){if(o instanceof q)return W(r,e.logger),process.stdout.write("\n ✖ Setup cancelled — run `lunora init` again whenever you're ready. 🌙\n"),{code:130,files:[],target:""};throw W(r,e.logger),o}return Ra(e,a,t),a},Ta=e=>typeof e=="string"&&Ke.includes(e),Pa=(e,t)=>{if(e!==void 0){if(Dt(e))return e;t.warn(`init: unknown --ci "${e}" — expected github | gitlab; skipping CI scaffold.`)}},Da=e=>e===void 0?{}:Ta(e)?{templateType:e}:j(e)?{vite:e}:{error:`init: unknown --template "${e}" — expected a bespoke template (${qe}) or an overlay framework (${ze}).`},no=ut(({argument:e,cwd:t,logger:r,options:a})=>{const o=Da(a.template);return"error"in o?(r.error(o.error),{code:f.USAGE}):Oa({add:a.add,allowUnsafeSource:a.allowUnsafeSource===!0,cwd:t,ci:Pa(a.ci,r),dryRun:a.dryRun===!0,from:a.from,inPlace:a.here===!0,interactive:a.interactive===!0?!0:void 0,logger:r,name:e[0],ref:a.ref,source:a.source,templateType:o.templateType,vite:a.vite??o.vite,yes:a.yes===!0})});export{He as FRAMEWORK_CHOICES,no as execute,Ta as isTemplate,Da as resolveTemplateFlag,H as resolveTemplateSource,Oa as runInitCommand};
@@ -0,0 +1,13 @@
1
+ import{existsSync as $,readFileSync as k,writeFileSync as y,mkdirSync as R,lstatSync as _}from"node:fs";import{join as g,relative as T,dirname as b}from"@visulima/path";import{EXIT_CODE as m}from"./EXIT_CODE-08cwt3MK.mjs";import{p as V,d as M,e as q,s as j,f as B,g as J,h as H,j as X,k as P,c as Y,l as z}from"./resolve-DUCSc7jQ.mjs";import{s as u,c as Q,b as Z}from"./catalog-Cbzph90w.mjs";import{findWranglerFile as K,readWranglerJsonc as ee}from"@lunora/config/cloudflare";import{LunoraError as N}from"@lunora/errors";import{insertSchemaExtension as re}from"./insertSchemaExtension-DuiV6cba.mjs";import{createHash as te}from"node:crypto";import{installArgsFor as ne,detectPackageManager as se}from"@lunora/config";const A=1,oe=".lunora-registry.json",G=e=>g(e,"lunora",oe),ie=e=>typeof e!="object"||e===null||!("items"in e)?!1:typeof e.items=="object"&&e.items!==null,x=e=>te("sha256").update(e).digest("hex"),ae=e=>{const t=G(e);if(!$(t))return{items:{},version:A};try{const n=JSON.parse(k(t,"utf8"));if(ie(n))return{items:n.items,version:A}}catch{}return{items:{},version:A}},ce=(e,t)=>{y(G(e),`${JSON.stringify(t,void 0,2)}
2
+ `,"utf8")},C=(e,t,n,o)=>{const r=e.items[t]??{files:{}};e.items[t]=r,r.files[n]=x(o)},de=(e,t,n)=>e.items[t]?.files[n],F=3,I=e=>e===""?[]:e.split(`
3
+ `),ue=(e,t)=>{const n=I(e),o=I(t);let r=0;for(;r<n.length&&r<o.length&&n[r]===o[r];)r+=1;let s=n.length,i=o.length;for(;s>r&&i>r&&n[s-1]===o[i-1];)s-=1,i-=1;if(r===s&&r===i)return[];const a=[];for(let c=Math.max(0,r-F);c<r;c+=1)a.push(` ${n[c]??""}`);for(let c=r;c<s;c+=1)a.push(`- ${n[c]??""}`);for(let c=r;c<i;c+=1)a.push(`+ ${o[c]??""}`);for(let c=i;c<Math.min(o.length,i+F);c+=1)a.push(` ${o[c]??""}`);return a},fe=/\.[cm]?[jt]sx?$/u,L=(e,t,n,o)=>{const r=g(e,t.from);if(_(r).isSymbolicLink())throw new N("INTERNAL",`registry item "${o}": refusing to read "${t.from}" — it is a symlink, not a regular file`);const s=k(r,"utf8");return n&&fe.test(t.to)?q(s):s},le=e=>`import { defineSchema } from "${e?"lunorash/server":"@lunora/server"}";
4
+
5
+ export default defineSchema({});
6
+ `,me=(e,t,n,o,r,s,i)=>{const a=g(o,"lunora","schema.ts");if(s)return r.info(`~ would merge .extend(${t}.extension) into lunora/schema.ts (and create ${e.to} if absent)`),{kind:"skipped",path:a};const c=g(o,e.to);$(c)||(R(b(c),{recursive:!0}),y(c,L(n,e,i,t),"utf8"));const d=$(a)?k(a,"utf8"):le(i),f=re(d,t);if(f.ok)return R(b(a),{recursive:!0}),y(a,f.text,"utf8"),r.success(`merged .extend(${t}.extension) into lunora/schema.ts`),{kind:"written",path:a};if(f.reason==="already-applied")return r.warn(`lunora/schema.ts already extends "${t}" — skipping`),{kind:"skipped",path:a};throw f.reason==="invalid-identifier"?new N("INTERNAL",`schema-extension item "${t}" is not a valid JS identifier — it is spliced into lunora/schema.ts as \`import { ${t} }\` / \`.extend(${t}.extension)\`. Rename the item to a valid identifier (no leading digit, no "-").`):new N("INTERNAL",`schema-extension merge failed for "${t}": ${f.reason}`)},pe=(e,t,n,o,r)=>{const s=ue(t,n);if(s.length===0){r.info(`= ${e.to} (unchanged)`);return}r.info(`${o?"~":"+"} ${e.to}`);for(const i of s)r.info(` ${i}`)},he=(e,t,n,o,r,s,i,a)=>{const c=g(o,e.to),d=L(n,e,a,t),f=$(c),l=f?k(c,"utf8"):"",p=S=>(R(b(c),{recursive:!0}),y(c,d,"utf8"),C(s,t,e.to,d),r.success(`${S}: ${e.to}`),{kind:"written",path:c});if(i.diff)return pe(e,l,d,f,r),{kind:"skipped",path:c};if(!f)return p("write");const v=x(l);if(v===x(d))return C(s,t,e.to,d),r.warn(`skip (exists): ${e.to}`),{kind:"skipped",path:c};if(i.overwrite)return p("overwrite");const h=de(s,t,e.to);return h===void 0?(r.warn(`skip (exists, untracked): ${e.to} — refusing to overwrite a file lunora didn't add (use --overwrite to force)`),{kind:"skipped",path:c}):h===v?p("update"):h===x(d)?(r.warn(`skip (locally edited): ${e.to}`),{kind:"skipped",path:c}):(y(`${c}.new`,d,"utf8"),r.warn(`conflict: ${e.to} has local edits and an upstream update — wrote ${e.to}.new (use --overwrite to take theirs)`),{kind:"skipped",path:c})},ge=(e,t,n,o,r,s,i={},a=!1)=>e.merge==="schema-extension"?me(e,t,n,o,r,i.diff===!0,a):he(e,t,n,o,r,s,i,a),U=["src/server.ts","src/server/index.ts","src/server/index.tsx","src/index.ts","src/worker.ts"],$e=e=>{const t=K(e);if(t===void 0)return;const{parsed:n}=ee(t);return typeof n?.main=="string"?n.main:void 0},ye=e=>{const t=$e(e),n=t===void 0?U:[t,...U];for(const o of n){const r=g(e,o);if(!$(r))continue;const s=k(r,"utf8");if(!s.includes("createShardDO(")){if(o===t)break;continue}return{entryPath:r,main:o,source:s}}},ve=(e,t,n)=>{const o=T(b(e),g(t,"lunora",n)).replaceAll("\\","/");return o.startsWith(".")?o:`./${o}`},we=(e,t)=>{for(const n of e){const r=`Add \`export * from "${`./lunora/${n.module}.js`}"\` to your worker entry`,s=n.comment?` (${n.comment})`:"";t.warn(`${r}${s}`)}return 0},ke=(e,t,n,o)=>{const r=[];for(const s of e){const i=ve(t,n,s.module),a=i.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`);new RegExp(String.raw`export\s+\*\s+from\s+["']${a}\.js["']`,"u").test(o)||(s.comment&&r.push(`
7
+ // ${s.comment}`),r.push(`export * from "${i}.js";`))}return r},Se=(e,t,n,o)=>{if(e.length===0)return 0;const r=ye(t);if(r===void 0)return we(e,n);const s=ke(e,r.entryPath,t,r.source);if(s.length===0)return 0;if(o){for(const a of s)a!==""&&n.info(`~ entrypoint: ${a}`);return s.length}const i=r.source.endsWith(`
8
+ `)?"":`
9
+ `;return y(r.entryPath,`${r.source}${i}${s.join(`
10
+ `)}
11
+ `,"utf8"),n.success(`wrote ${String(s.length)} entrypoint re-export(s) to ${T(t,r.entryPath)}`),s.length},D=(e,t,n,o={})=>{const r=[],s=[],i=[],a=[],c=ae(t),d=V(t);try{for(const{directory:f,manifest:l}of e){for(const v of l.files){const h=ge(v,l.name,f,t,n,c,o,d);(h.kind==="written"?r:s).push(h.path)}if(l.entrypointReexports!==void 0&&Se(l.entrypointReexports,t,n,o.diff===!0),o.diff)continue;const p=M(l,t,n,d,o.pinnedVersions);i.push(...p.deps),a.push(...p.bindings)}}finally{!o.diff&&Object.keys(c.items).length>0&&ce(t,c)}return{bindings:a,deps:i,skipped:s,written:r}},E=()=>({bindings:[],code:0,deps:[],skipped:[],written:[]}),De=(e,t,n,o,r)=>e.bindings?{...e,bindings:e.bindings.map(s=>{if(s.path[0]!==t||!Array.isArray(s.value))return s;const i=s.value;return{...s,value:i.map(a=>typeof a=="object"&&a!==null&&a[n.key]===n.value?{...a,[o]:r}:a)}})}:e,W=(e,t,n)=>{const o=t.title??t.description;e.info(`plan: ${u(t.name)}${o?` — ${u(o)}`:""}`);for(const r of t.files)e.info(` file ${u(r.to)} (${u(r.merge)})`);for(const[r,s]of Object.entries(t.deps??{}))e.info(` dep ${u(r)}@${u(P(s,n,r))}`);for(const[r,s]of Object.entries(t.devDependencies??{}))e.info(` dev ${u(r)}@${u(P(s,n,r))}`);for(const r of t.bindings??[])e.info(` bind ${u(r.path.join("."))} = ${u(JSON.stringify(r.value))}`);for(const r of t.envVars??[]){const s=r.secret?" (secret)":` = ${u(JSON.stringify(r.value??""))}`;e.info(` env ${u(r.name)}${s}`)}for(const r of t.entrypointReexports??[]){const s=`./lunora/${u(r.module)}`,i=r.comment?` // ${u(r.comment)}`:"";e.info(` entry ${s}${i}`)}},xe=e=>e.map(({manifest:t})=>({bindings:(t.bindings??[]).map(n=>({path:n.path.join("."),value:n.value})),deps:Object.keys(t.deps??{}),devDependencies:Object.keys(t.devDependencies??{}),entrypointReexports:(t.entrypointReexports??[]).map(n=>({module:n.module,...n.comment?{comment:n.comment}:{}})),envVars:(t.envVars??[]).map(n=>({name:n.name,...n.secret?{secret:!0}:{value:n.value??""}})),files:t.files.map(n=>({merge:n.merge,to:n.to})),name:t.name,requires:t.requires??[],title:t.title})),be=e=>{try{const{args:t,command:n}=ne(se(e));return`${n} ${t.join(" ")}`}catch{return"<your-package-manager> install"}},Ee=(e,t,n,o,r,s)=>{r.success(`add complete: ${String(n)} written, ${String(o)} skipped`),r.info("next steps:"),r.info(" lunora codegen # regenerate _generated/ so the new tables/functions appear"),t.length>0&&r.info(` ${be(s)} # install newly-added dependencies`);for(const{manifest:i}of e)i.docs&&r.info(`${u(i.name)}: ${u(i.docs)}`)},Ae=async e=>{const t=E(),n=j("list",e);if(n)return e.logger.error(n),{...t,code:m.USAGE,error:n};const{logger:o}=e;let r=()=>{};try{const s=await X(e);r=s.cleanup;const i=Q(s.root);if(e.format==="json")return{...t,data:{items:i}};o.info(`available registry items (${String(i.length)}):`);for(const a of i)o.info(` ${a.name}${a.description?` — ${a.description}`:""}`);return t}catch(s){const i=u(`list failed: ${s instanceof Error?s.message:String(s)}`);return o.error(i),{...t,code:1,error:i}}finally{r()}},Te=async e=>{const t=e.cwd??process.cwd(),n=E();if(e.list)return Ae(e);const{logger:o}=e;if(e.names.length===0){const i="add requires at least one item name. Usage: lunora registry add <name> [...names]";return o.error(i),{...n,code:m.USAGE,error:i}}const r=j("add",e);if(r)return o.error(r),{...n,code:m.USAGE,error:r};let s=[];try{const{cleanups:i,items:a}=await B(e.names,e);s=i;const{transformManifest:c}=e,d=c?a.map(w=>({...w,manifest:c(w.manifest)})):a,f=await J(d.map(w=>w.manifest));for(const{manifest:w}of d)W(o,w,f);const l={items:xe(d)};if(e.dryRun)return o.info("dry-run: stopping before any files are written"),{...n,data:l};if(e.diff)return D(d,t,o,{diff:!0}),o.info("diff: preview only — re-run without --diff to apply"),{...n,data:l};const p=await H(d,e);if(!p.ok)return p.reason==="declined"?{...n,code:m.CANCELLED,data:l,error:"registry add: the package.json change was declined"}:{...n,code:m.USAGE,data:l,error:"registry add: stdin is not a TTY — re-run with --yes to confirm"};const{bindings:v,deps:h,skipped:S,written:O}=D(d,t,o,{overwrite:e.overwrite,pinnedVersions:f});return Ee(d,h,O.length,S.length,o,t),{bindings:v,code:0,data:l,deps:h,skipped:S,written:O}}catch(i){const a=u(`add failed: ${i instanceof Error?i.message:String(i)}`);return o.error(a),{...n,code:1,error:a}}finally{for(const i of s)i()}},Je=async e=>{const t=E();if(e.names.length===0){const r="view requires an item name. Usage: lunora registry view <name>";return e.logger.error(r),{...t,code:m.USAGE,error:r}}const n=j("view",e);if(n)return e.logger.error(n),{...t,code:m.USAGE,error:n};const o=[];try{for(const r of e.names){const{cleanup:s,directory:i}=await Y(r,e);o.push(s);const a=z(i,r);W(e.logger,a,await J([a]));for(const c of a.files){e.logger.info(`--- ${u(c.to)} (${u(c.merge)}) ---`);const d=L(i,c,!1,r);for(const f of d.split(`
12
+ `))e.logger.info(u(f))}}return t}catch(r){return e.logger.error(u(`view failed: ${r instanceof Error?r.message:String(r)}`)),{...t,code:1}}finally{for(const r of o)r()}},Ge=async e=>{const t=E(),n=e.from;if(n===void 0){const s="registry build requires --from <registry root>";return e.logger.error(s),{...t,code:m.USAGE,error:s}}if(!$(n)){const s=`registry root not found: ${n}`;return e.logger.error(s),{...t,code:m.NOT_FOUND,error:s}}const o=Z(n),r=e.out??g(n,"index.json");if(e.check){const s=$(r)?JSON.parse(k(r,"utf8")):{items:[]};if(JSON.stringify(s.items??[])!==JSON.stringify(o.items)){const a=`registry: ${r} is stale — run \`lunora registry build\` to regenerate it`;return e.logger.error(a),{...t,code:m.USAGE,error:a}}return e.logger.success(`registry: ${r} is up to date (${String(o.items.length)} items)`),t}return y(r,`${JSON.stringify({$schema:"./schema/registry.schema.json",...o},void 0,4)}
13
+ `,"utf8"),e.logger.success(`registry: wrote ${r} (${String(o.items.length)} items)`),t};export{Ge as a,Je as b,Te as r,De as s};
@@ -0,0 +1,5 @@
1
+ import{existsSync as p,readFileSync as h,writeFileSync as j,mkdtempSync as G,rmSync as w}from"node:fs";import{tmpdir as W}from"node:os";import{LunoraError as g}from"@lunora/errors";import{dirname as S,join as f}from"@visulima/path";import{downloadTemplate as J}from"giget";import{fileURLToPath as z}from"node:url";import{DEV_VARS_FILE as H,parseDevVariableEntries as K,writeDevVariablesFileAtomically as q}from"@lunora/config";import{modify as N,applyEdits as O,parse as Y}from"jsonc-parser";import{b as Z}from"./tui-prompts-B3YwUhGw.mjs";import X from"./parseManifest-CwPTKdtS.mjs";const Q="alpha",T="main",ee=new Set(["alpha","beta","next"]),te=/^[\w./@-]+$/,ne=e=>!e.includes("..")&&te.test(e),v=()=>{try{let e=S(z(import.meta.url));for(let t=0;t<6;t+=1){const n=f(e,"package.json");if(p(n)){const r=JSON.parse(h(n,"utf8"));if(r.name==="@lunora/cli"&&typeof r.version=="string")return r.version}const s=S(e);if(s===e)break;e=s}}catch{}return"0.0.0"},D=e=>{if(e==="0.0.0")return Q;const t=e.split("+")[0]??e,n=t.indexOf("-");if(n!==-1){const[s]=t.slice(n+1).split(".");if(s!==void 0&&ee.has(s))return s}return T},I=e=>{if(e!==void 0&&e.length>0){if(!ne(e))throw new g("INTERNAL",`invalid --ref "${e}" — a ref may contain letters, digits, ".", "_", "-", "/", "@" and must not contain "..".`);return e}return D(v())},L="anolilab/lunora",B=/^[0-9a-f]{40}$/iu,P=String.raw`\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)+)?(?:\+[0-9A-Za-z.-]+)?`,se=new RegExp(String.raw`^v?${P}$`,"u"),re=new RegExp(String.raw`^(?:@[\w.-]+\/)?[\w.-]+@${P}$`,"u"),oe=e=>B.test(e)||se.test(e)||re.test(e),ie=()=>{const e=process.env.GITHUB_TOKEN??process.env.GH_TOKEN;return e!==void 0&&e.length>0?{authorization:`Bearer ${e}`}:{}},ae=async(e,t=L)=>{try{const n=await fetch(`https://api.github.com/repos/${t}/commits/${encodeURIComponent(e)}`,{headers:{accept:"application/vnd.github+json","user-agent":"lunora-cli",...ie()},signal:AbortSignal.timeout(1e4)});if(!n.ok)return;const s=await n.json();return typeof s.sha=="string"&&B.test(s.sha)?s.sha:void 0}catch{return}},ce=async(e,t,n)=>{if(oe(t))return t;const s=await ae(t,e);return s===void 0?(n.warn(`could not pin ${e}#${t} to a commit — fetching the UNPINNED branch (set GITHUB_TOKEN if rate-limited).`),t):(n.info(`pinned ${e}#${t} → ${s}`),s)},de=async(e,t)=>ce(L,I(e),t),Fe=(e=v())=>`@lunora/cli@${e}`,ue="latest",V=(e=v())=>{const t=D(e);return t===T?ue:t},fe="https://registry.npmjs.org",le=()=>{const e=process.env.npm_config_registry,t=e!==void 0&&e.length>0?e:fe;return t.endsWith("/")?t.slice(0,-1):t},pe=async(e,t)=>{try{const n=await fetch(`${le()}/${e.replaceAll("/","%2F")}`,{headers:{accept:"application/vnd.npm.install-v1+json"},signal:AbortSignal.timeout(1e4)});return n.ok?(await n.json())["dist-tags"]?.[t]:void 0}catch{return}},he=async(e,t)=>{const n=new Map;return await Promise.all([...new Set(e)].map(async s=>{const r=await pe(s,t);r!==void 0&&n.set(s,r)})),n},ge=e=>{if(!e.startsWith("workspace:"))return!1;const t=e.slice(10);return t===""||t==="*"||t==="^"||t==="~"},me=(e,t,n)=>{if(!e.startsWith("workspace:"))return e;const s=e.slice(10);return s===""||s==="*"||s==="^"||s==="~"?(n===void 0?void 0:t?.get(n))??V():s},Ge=async e=>{const t=new Set;for(const n of e)for(const s of[n.deps,n.devDependencies])for(const[r,o]of Object.entries(s??{}))ge(o)&&t.add(r);return t.size===0?new Map:he([...t],V())},ve=new Set(["@lunora/client","@lunora/do","@lunora/ratelimit","@lunora/runtime","@lunora/server","@lunora/values"]),ye=/(['"])@lunora\/(client|do|ratelimit|runtime|server|values)(\/[^'"]*)?\1/gu,We=e=>{const t=f(e,"package.json");if(!p(t))return!1;try{const n=JSON.parse(h(t,"utf8"));return n.dependencies?.lunorash!==void 0||n.devDependencies?.lunorash!==void 0}catch{return!1}},Je=e=>e.replaceAll(ye,(t,n,s,r)=>`${n}lunorash/${s}${r??""}${n}`),$=(e,t,n,s="dependencies",r=!1,o)=>{const a=Object.entries(e);if(a.length===0)return[];const i=f(t,"package.json");if(!p(i))return n.warn(`package.json not found at ${i} — skipping dependency updates`),[];let d=h(i,"utf8");const c=JSON.parse(d),l=[];for(const[u,M]of a){if(r&&ve.has(u)){n.info(`dep provided by the lunorash umbrella, skipping: ${u}`);continue}if(c.dependencies?.[u]!==void 0||c.devDependencies?.[u]!==void 0){n.info(`dep already present: ${u}`);continue}const F=N(d,[s,u],me(M,o,u),{formattingOptions:{insertSpaces:!0,tabSize:4}});d=O(d,F),l.push(u)}return l.length>0&&(j(i,d,"utf8"),n.success(`added ${String(l.length)} ${s==="devDependencies"?"devDependency(ies)":"dependency(ies)"} to package.json: ${l.join(", ")}`)),l},we=(e,t,n)=>{if(e.length===0)return[];const s=f(t,H),r=p(s)?h(s,"utf8"):"",o=new Set(K(r).map(c=>c.key)),a=[],i=[],d=[];for(const c of e)c.secret&&i.push(c.name),!o.has(c.name)&&(c.description&&d.push(`# ${c.description}`),d.push(`${c.name}=${c.secret?"":c.value??""}`),a.push(c.name));if(a.length>0){const c=r===""||r.endsWith(`
2
+ `)?r:`${r}
3
+ `;q(s,`${c}${d.join(`
4
+ `)}
5
+ `),n.success(`scaffolded ${String(a.length)} env var(s) into .dev.vars: ${a.join(", ")}`)}return i.length>0&&n.info(`set secret value(s) locally in .dev.vars, then for production: ${i.map(c=>`wrangler secret put ${c}`).join("; ")}`),a},E=new Set(["ai","analytics_engine_datasets","browser","d1_databases","durable_objects","hyperdrive","kv_namespaces","mtls_certificates","queues","r2_buckets","send_email","services","vars","vectorize","version_metadata","workflows"]),Se=["binding","name","queue","pattern"],b=e=>{if(!(typeof e!="object"||e===null))for(const t of Se){const n=e[t];if(typeof n=="string"&&n.length>0)return`${t}:${n}`}},$e=(e,t,n,s)=>{const r=new Set(e.map(i=>JSON.stringify(i))),o=new Set(e.map(i=>b(i)).filter(i=>i!==void 0)),a=[];for(const i of t){if(r.has(JSON.stringify(i)))continue;const d=b(i);if(d!==void 0&&o.has(d)){s.warn(`${d.replace(":"," ")} already exists in ${n} — keeping the project's entry and skipping the registry item's. Reconcile by hand if the item needs different settings.`);continue}d!==void 0&&o.add(d),a.push(i)}return a},R=e=>Array.isArray(e),_=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Ee=(e,t,n,s)=>{const r={};for(const[o,a]of Object.entries(t)){if(!Object.hasOwn(e,o)){r[o]=a;continue}JSON.stringify(e[o])!==JSON.stringify(a)&&s.warn(`${o} already exists in ${n} — keeping the project's value and skipping the registry item's. Reconcile by hand if the item needs different settings.`)}return r},be=(e,t)=>{let n=Y(e);for(const s of t){if(typeof n!="object"||n===null)return;n=n[s]}return n},Re=(e,t)=>{const n=e[0];return n!==void 0&&E.has(n)?!0:(t.warn(`skipping binding "${e.join(".")}" — only resource bindings (${[...E].join(", ")}) may be written, not exec/entrypoint keys`),!1)},m=Symbol("skip-binding"),_e=(e,t,n)=>{const{value:s}=t,r=t.path.join("."),o=be(e,t.path);if(R(s)){if(!R(o))return s;const a=$e(o,s,r,n);return a.length===0?m:[...o,...a]}if(_(s)){if(!_(o))return s;const a=Ee(o,s,r,n);return Object.keys(a).length===0?m:{...o,...a}}return s},Ae=(e,t,n)=>{if(e.length===0)return[];const r=["wrangler.jsonc","wrangler.json"].map(i=>f(t,i)).find(i=>p(i));if(!r)return n.warn("wrangler.jsonc not found — skipping binding updates"),[];let o=h(r,"utf8");const a=[];for(const i of e){if(!Re(i.path,n))continue;const d=_e(o,i,n);if(d===m)continue;const c=N(o,[...i.path],d,{formattingOptions:{insertSpaces:!0,tabSize:4}});c.length!==0&&(o=O(o,c),a.push(i.path.join(".")))}return a.length>0&&(j(r,o,"utf8"),n.success(`applied ${String(a.length)} binding(s) to ${r}: ${a.join(", ")}`)),a},ze=(e,t,n,s=!1,r)=>{const o=[],a=[];return e.deps&&o.push(...$(e.deps,t,n,"dependencies",s,r)),e.devDependencies&&o.push(...$(e.devDependencies,t,n,"devDependencies",s,r)),e.bindings&&a.push(...Ae(e.bindings,t,n)),e.envVars&&we(e.envVars,t,n),{bindings:a,deps:o}},y=e=>e.source!==void 0&&e.source.length>0||e.from!==void 0&&e.from.length>0,He=async(e,t)=>{const n=e.some(({manifest:c})=>Object.keys(c.deps??{}).length>0||Object.keys(c.devDependencies??{}).length>0),s=e.some(({manifest:c})=>(c.bindings??[]).length>0),r=y(t);if(!n&&!s&&!r||t.yes)return{ok:!0};const o=[];n&&o.push("add dependencies to package.json"),s&&o.push("write wrangler.jsonc bindings"),r&&o.push(`come from a custom registry source (${String(t.from??t.source)})`);const a=o.join(", ");return!process.stdin.isTTY&&t.confirm===void 0?(t.logger.error(`add: stdin is not a TTY and the requested items ${a} — re-run with --yes to confirm`),{ok:!1,reason:"non-interactive"}):await(t.confirm??Z)(`The requested items ${a}. Continue?`)?{ok:!0}:(t.logger.info("add: aborted"),{ok:!1,reason:"declined"})},U="gh:anolilab/lunora/registry",A=/^[A-Za-z0-9][\w-]*$/u,ke=e=>{if(!A.test(e))throw new g("INTERNAL",`invalid registry item name "${e}" — names must match ${A.source} (letters, digits, "-", "_"; no path separators or "..")`)},je=e=>e.includes("..")?!1:e.startsWith("gh:")||e.startsWith("github:")||e.startsWith("https://"),Ne=e=>y(e)&&e.from===void 0&&!e.allowUnsafeSource&&!je(e.source??""),Ke=(e,t)=>Ne(t)?`${e}: refusing --source ${String(t.source)} — only gh:, github:, or https:// sources are allowed (and may not contain ".."). Re-run with --allow-unsafe-source if you really want this.`:void 0,C=async(e,t,n)=>{const s=G(f(W(),`lunora-${t}-fetch-`)),r=f(s,t);n.info(`fetching ${e}`);try{const o=await J(e,{cwd:s,dir:r,force:!0,install:!1,silent:!0});return n.info(o.commit?`resolved ${o.source} @ ${o.commit}`:`resolved ${o.source}`),{cleanup:()=>{w(s,{force:!0,recursive:!0})},directory:r}}catch(o){throw w(s,{force:!0,recursive:!0}),o}},k=new WeakMap,x=async e=>{const t=k.get(e);if(t!==void 0)return t;const n=y(e)?Promise.resolve(I(e.ref)):de(e.ref,e.logger);return k.set(e,n),n},Oe=async(e,t,n=U)=>{if(ke(e),t.from!==void 0){const r=f(t.from,e);if(!p(r))throw new g("INTERNAL",`registry item not found in local source: ${r}`);return{cleanup:()=>{},directory:r}}const s=t.source??n;return C(`${s}/${e}#${await x(t)}`,"item",t.logger)},qe=async e=>{if(e.from!==void 0){if(!p(e.from))throw new g("INTERNAL",`registry root not found: ${e.from}`);return{cleanup:()=>{},root:e.from}}const t=e.source??U,{cleanup:n,directory:s}=await C(`${t}#${await x(e)}`,"registry",e.logger);return{cleanup:n,root:s}},Te=(e,t)=>{const n=JSON.parse(h(f(e,"registry.json"),"utf8"));return X(n,t)},Ye=async(e,t)=>{const n=[],s=[],r=new Set,o=new Set,a=async i=>{if(r.has(i))return;if(o.has(i))throw new g("INTERNAL",`cyclic registry dependency detected at "${i}"`);o.add(i);const{cleanup:d,directory:c}=await Oe(i,t);s.push(d);const l=Te(c,i);for(const u of l.requires??[])await a(u);o.delete(i),r.add(i),n.push({directory:c,manifest:l})};try{for(const i of e)await a(i)}catch(i){for(const d of s)d();throw i}return{cleanups:s,items:n}};export{v as a,de as b,Oe as c,ze as d,Je as e,Ye as f,Ge as g,He as h,y as i,qe as j,me as k,Te as l,he as m,ce as n,V as o,We as p,I as q,Fe as r,Ke as s};
@@ -0,0 +1 @@
1
+ import"./EXIT_CODE-08cwt3MK.mjs";import"./resolve-DUCSc7jQ.mjs";import"./catalog-Cbzph90w.mjs";import{r as n,a as i,b as t}from"./commands-CdVObzRk.mjs";export{n as runAddCommand,i as runBuildIndexCommand,t as runRegistryViewCommand};
@@ -1 +1 @@
1
- import{s as Ye}from"./commands-DpKPubLi.mjs";var B={exports:{}},se,rr;function X(){if(rr)return se;rr=1;const r="2.0.0",i=256,t=Number.MAX_SAFE_INTEGER||9007199254740991,s=16,a=i-6;return se={MAX_LENGTH:i,MAX_SAFE_COMPONENT_LENGTH:s,MAX_SAFE_BUILD_LENGTH:a,MAX_SAFE_INTEGER:t,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:r,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},se}var ne,tr;function H(){return tr||(tr=1,ne=process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...i)=>console.error("SEMVER",...i):()=>{}),ne}var sr;function M(){return sr||(sr=1,(function(r,i){const{MAX_SAFE_COMPONENT_LENGTH:t,MAX_SAFE_BUILD_LENGTH:s,MAX_LENGTH:a}=X(),h=H();i=r.exports={};const u=i.re=[],f=i.safeRe=[],n=i.src=[],R=i.safeSrc=[],e=i.t={};let o=0;const c="[a-zA-Z0-9-]",m=[["\\s",1],["\\d",a],[c,s]],L=O=>{for(const[P,D]of m)O=O.split(`${P}*`).join(`${P}{0,${D}}`).split(`${P}+`).join(`${P}{1,${D}}`);return O},E=(O,P,D)=>{const G=L(P),y=o++;h(O,y,P),e[O]=y,n[y]=P,R[y]=G,u[y]=new RegExp(P,D?"g":void 0),f[y]=new RegExp(G,D?"g":void 0)};E("NUMERICIDENTIFIER","0|[1-9]\\d*"),E("NUMERICIDENTIFIERLOOSE","\\d+"),E("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${c}*`),E("MAINVERSION",`(${n[e.NUMERICIDENTIFIER]})\\.(${n[e.NUMERICIDENTIFIER]})\\.(${n[e.NUMERICIDENTIFIER]})`),E("MAINVERSIONLOOSE",`(${n[e.NUMERICIDENTIFIERLOOSE]})\\.(${n[e.NUMERICIDENTIFIERLOOSE]})\\.(${n[e.NUMERICIDENTIFIERLOOSE]})`),E("PRERELEASEIDENTIFIER",`(?:${n[e.NONNUMERICIDENTIFIER]}|${n[e.NUMERICIDENTIFIER]})`),E("PRERELEASEIDENTIFIERLOOSE",`(?:${n[e.NONNUMERICIDENTIFIER]}|${n[e.NUMERICIDENTIFIERLOOSE]})`),E("PRERELEASE",`(?:-(${n[e.PRERELEASEIDENTIFIER]}(?:\\.${n[e.PRERELEASEIDENTIFIER]})*))`),E("PRERELEASELOOSE",`(?:-?(${n[e.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${n[e.PRERELEASEIDENTIFIERLOOSE]})*))`),E("BUILDIDENTIFIER",`${c}+`),E("BUILD",`(?:\\+(${n[e.BUILDIDENTIFIER]}(?:\\.${n[e.BUILDIDENTIFIER]})*))`),E("FULLPLAIN",`v?${n[e.MAINVERSION]}${n[e.PRERELEASE]}?${n[e.BUILD]}?`),E("FULL",`^${n[e.FULLPLAIN]}$`),E("LOOSEPLAIN",`[v=\\s]*${n[e.MAINVERSIONLOOSE]}${n[e.PRERELEASELOOSE]}?${n[e.BUILD]}?`),E("LOOSE",`^${n[e.LOOSEPLAIN]}$`),E("GTLT","((?:<|>)?=?)"),E("XRANGEIDENTIFIERLOOSE",`${n[e.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),E("XRANGEIDENTIFIER",`${n[e.NUMERICIDENTIFIER]}|x|X|\\*`),E("XRANGEPLAIN",`[v=\\s]*(${n[e.XRANGEIDENTIFIER]})(?:\\.(${n[e.XRANGEIDENTIFIER]})(?:\\.(${n[e.XRANGEIDENTIFIER]})(?:${n[e.PRERELEASE]})?${n[e.BUILD]}?)?)?`),E("XRANGEPLAINLOOSE",`[v=\\s]*(${n[e.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[e.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[e.XRANGEIDENTIFIERLOOSE]})(?:${n[e.PRERELEASELOOSE]})?${n[e.BUILD]}?)?)?`),E("XRANGE",`^${n[e.GTLT]}\\s*${n[e.XRANGEPLAIN]}$`),E("XRANGELOOSE",`^${n[e.GTLT]}\\s*${n[e.XRANGEPLAINLOOSE]}$`),E("COERCEPLAIN",`(^|[^\\d])(\\d{1,${t}})(?:\\.(\\d{1,${t}}))?(?:\\.(\\d{1,${t}}))?`),E("COERCE",`${n[e.COERCEPLAIN]}(?:$|[^\\d])`),E("COERCEFULL",n[e.COERCEPLAIN]+`(?:${n[e.PRERELEASE]})?(?:${n[e.BUILD]})?(?:$|[^\\d])`),E("COERCERTL",n[e.COERCE],!0),E("COERCERTLFULL",n[e.COERCEFULL],!0),E("LONETILDE","(?:~>?)"),E("TILDETRIM",`(\\s*)${n[e.LONETILDE]}\\s+`,!0),i.tildeTrimReplace="$1~",E("TILDE",`^${n[e.LONETILDE]}${n[e.XRANGEPLAIN]}$`),E("TILDELOOSE",`^${n[e.LONETILDE]}${n[e.XRANGEPLAINLOOSE]}$`),E("LONECARET","(?:\\^)"),E("CARETTRIM",`(\\s*)${n[e.LONECARET]}\\s+`,!0),i.caretTrimReplace="$1^",E("CARET",`^${n[e.LONECARET]}${n[e.XRANGEPLAIN]}$`),E("CARETLOOSE",`^${n[e.LONECARET]}${n[e.XRANGEPLAINLOOSE]}$`),E("COMPARATORLOOSE",`^${n[e.GTLT]}\\s*(${n[e.LOOSEPLAIN]})$|^$`),E("COMPARATOR",`^${n[e.GTLT]}\\s*(${n[e.FULLPLAIN]})$|^$`),E("COMPARATORTRIM",`(\\s*)${n[e.GTLT]}\\s*(${n[e.LOOSEPLAIN]}|${n[e.XRANGEPLAIN]})`,!0),i.comparatorTrimReplace="$1$2$3",E("HYPHENRANGE",`^\\s*(${n[e.XRANGEPLAIN]})\\s+-\\s+(${n[e.XRANGEPLAIN]})\\s*$`),E("HYPHENRANGELOOSE",`^\\s*(${n[e.XRANGEPLAINLOOSE]})\\s+-\\s+(${n[e.XRANGEPLAINLOOSE]})\\s*$`),E("STAR","(<|>)?=?\\s*\\*"),E("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),E("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(B,B.exports)),B.exports}var ie,nr;function ze(){if(nr)return ie;nr=1;const r=Object.freeze({loose:!0}),i=Object.freeze({});return ie=s=>s?typeof s!="object"?r:s:i,ie}var ae,ir;function zr(){if(ir)return ae;ir=1;const r=/^[0-9]+$/,i=(s,a)=>{if(typeof s=="number"&&typeof a=="number")return s===a?0:s<a?-1:1;const h=r.test(s),u=r.test(a);return h&&u&&(s=+s,a=+a),s===a?0:h&&!u?-1:u&&!h?1:s<a?-1:1};return ae={compareIdentifiers:i,rcompareIdentifiers:(s,a)=>i(a,s)},ae}var oe,ar;function j(){if(ar)return oe;ar=1;const r=H(),{MAX_LENGTH:i,MAX_SAFE_INTEGER:t}=X(),{safeRe:s,t:a}=M(),h=ze(),{compareIdentifiers:u}=zr(),f=(R,e)=>{const o=e.split(".");if(o.length>R.length)return!1;for(let c=0;c<o.length;c++)if(u(R[c],o[c])!==0)return!1;return!0};class n{constructor(e,o){if(o=h(o),e instanceof n){if(e.loose===!!o.loose&&e.includePrerelease===!!o.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>i)throw new TypeError(`version is longer than ${i} characters`);r("SemVer",e,o),this.options=o,this.loose=!!o.loose,this.includePrerelease=!!o.includePrerelease;const c=e.trim().match(o.loose?s[a.LOOSE]:s[a.FULL]);if(!c)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+c[1],this.minor=+c[2],this.patch=+c[3],this.major>t||this.major<0)throw new TypeError("Invalid major version");if(this.minor>t||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>t||this.patch<0)throw new TypeError("Invalid patch version");c[4]?this.prerelease=c[4].split(".").map(m=>{if(/^[0-9]+$/.test(m)){const L=+m;if(L>=0&&L<t)return L}return m}):this.prerelease=[],this.build=c[5]?c[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(r("SemVer.compare",this.version,this.options,e),!(e instanceof n)){if(typeof e=="string"&&e===this.version)return 0;e=new n(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof n||(e=new n(e,this.options)),this.major<e.major?-1:this.major>e.major?1:this.minor<e.minor?-1:this.minor>e.minor?1:this.patch<e.patch?-1:this.patch>e.patch?1:0}comparePre(e){if(e instanceof n||(e=new n(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let o=0;do{const c=this.prerelease[o],m=e.prerelease[o];if(r("prerelease compare",o,c,m),c===void 0&&m===void 0)return 0;if(m===void 0)return 1;if(c===void 0)return-1;if(c===m)continue;return u(c,m)}while(++o)}compareBuild(e){e instanceof n||(e=new n(e,this.options));let o=0;do{const c=this.build[o],m=e.build[o];if(r("build compare",o,c,m),c===void 0&&m===void 0)return 0;if(m===void 0)return 1;if(c===void 0)return-1;if(c===m)continue;return u(c,m)}while(++o)}inc(e,o,c){if(e.startsWith("pre")){if(!o&&c===!1)throw new Error("invalid increment argument: identifier is empty");if(o){const m=`-${o}`.match(this.options.loose?s[a.PRERELEASELOOSE]:s[a.PRERELEASE]);if(!m||m[1]!==o)throw new Error(`invalid identifier: ${o}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",o,c);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",o,c);break;case"prepatch":this.prerelease.length=0,this.inc("patch",o,c),this.inc("pre",o,c);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",o,c),this.inc("pre",o,c);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{const m=Number(c)?1:0;if(this.prerelease.length===0)this.prerelease=[m];else{let L=this.prerelease.length;for(;--L>=0;)typeof this.prerelease[L]=="number"&&(this.prerelease[L]++,L=-2);if(L===-1){if(o===this.prerelease.join(".")&&c===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(m)}}if(o){let L=[o,m];if(c===!1&&(L=[o]),f(this.prerelease,o)){const E=this.prerelease[o.split(".").length];isNaN(E)&&(this.prerelease=L)}else this.prerelease=L}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}return oe=n,oe}var ue,or;function V(){if(or)return ue;or=1;const r=j();return ue=(t,s,a=!1)=>{if(t instanceof r)return t;try{return new r(t,s)}catch(h){if(!a)return null;throw h}},ue}var ce,ur;function tt(){if(ur)return ce;ur=1;const r=V();return ce=(t,s)=>{const a=r(t,s);return a?a.version:null},ce}var le,cr;function st(){if(cr)return le;cr=1;const r=V();return le=(t,s)=>{const a=r(t.trim().replace(/^[=v]+/,""),s);return a?a.version:null},le}var fe,lr;function nt(){if(lr)return fe;lr=1;const r=j();return fe=(t,s,a,h,u)=>{typeof a=="string"&&(u=h,h=a,a=void 0);try{return new r(t instanceof r?t.version:t,a).inc(s,h,u).version}catch{return null}},fe}var he,fr;function it(){if(fr)return he;fr=1;const r=V();return he=(t,s)=>{const a=r(t,null,!0),h=r(s,null,!0),u=a.compare(h);if(u===0)return null;const f=u>0,n=f?a:h,R=f?h:a,e=!!n.prerelease.length;if(!!R.prerelease.length&&!e){if(!R.patch&&!R.minor)return"major";if(R.compareMain(n)===0)return R.minor&&!R.patch?"minor":"patch"}const c=e?"pre":"";return a.major!==h.major?c+"major":a.minor!==h.minor?c+"minor":a.patch!==h.patch?c+"patch":"prerelease"},he}var Ee,hr;function at(){if(hr)return Ee;hr=1;const r=j();return Ee=(t,s)=>new r(t,s).major,Ee}var pe,Er;function ot(){if(Er)return pe;Er=1;const r=j();return pe=(t,s)=>new r(t,s).minor,pe}var me,pr;function ut(){if(pr)return me;pr=1;const r=j();return me=(t,s)=>new r(t,s).patch,me}var Re,mr;function ct(){if(mr)return Re;mr=1;const r=V();return Re=(t,s)=>{const a=r(t,s);return a&&a.prerelease.length?a.prerelease:null},Re}var de,Rr;function U(){if(Rr)return de;Rr=1;const r=j();return de=(t,s,a)=>new r(t,a).compare(new r(s,a)),de}var ve,dr;function lt(){if(dr)return ve;dr=1;const r=U();return ve=(t,s,a)=>r(s,t,a),ve}var Ie,vr;function ft(){if(vr)return Ie;vr=1;const r=U();return Ie=(t,s)=>r(t,s,!0),Ie}var $e,Ir;function Ke(){if(Ir)return $e;Ir=1;const r=j();return $e=(t,s,a)=>{const h=new r(t,a),u=new r(s,a);return h.compare(u)||h.compareBuild(u)},$e}var Le,$r;function ht(){if($r)return Le;$r=1;const r=Ke();return Le=(t,s)=>t.sort((a,h)=>r(a,h,s)),Le}var Ne,Lr;function Et(){if(Lr)return Ne;Lr=1;const r=Ke();return Ne=(t,s)=>t.sort((a,h)=>r(h,a,s)),Ne}var Se,Nr;function W(){if(Nr)return Se;Nr=1;const r=U();return Se=(t,s,a)=>r(t,s,a)>0,Se}var Oe,Sr;function Ze(){if(Sr)return Oe;Sr=1;const r=U();return Oe=(t,s,a)=>r(t,s,a)<0,Oe}var Ae,Or;function Kr(){if(Or)return Ae;Or=1;const r=U();return Ae=(t,s,a)=>r(t,s,a)===0,Ae}var Te,Ar;function Zr(){if(Ar)return Te;Ar=1;const r=U();return Te=(t,s,a)=>r(t,s,a)!==0,Te}var ge,Tr;function Je(){if(Tr)return ge;Tr=1;const r=U();return ge=(t,s,a)=>r(t,s,a)>=0,ge}var we,gr;function Qe(){if(gr)return we;gr=1;const r=U();return we=(t,s,a)=>r(t,s,a)<=0,we}var Pe,wr;function Jr(){if(wr)return Pe;wr=1;const r=Kr(),i=Zr(),t=W(),s=Je(),a=Ze(),h=Qe();return Pe=(f,n,R,e)=>{switch(n){case"===":return typeof f=="object"&&(f=f.version),typeof R=="object"&&(R=R.version),f===R;case"!==":return typeof f=="object"&&(f=f.version),typeof R=="object"&&(R=R.version),f!==R;case"":case"=":case"==":return r(f,R,e);case"!=":return i(f,R,e);case">":return t(f,R,e);case">=":return s(f,R,e);case"<":return a(f,R,e);case"<=":return h(f,R,e);default:throw new TypeError(`Invalid operator: ${n}`)}},Pe}var Ce,Pr;function pt(){if(Pr)return Ce;Pr=1;const r=j(),i=V(),{safeRe:t,t:s}=M();return Ce=(h,u)=>{if(h instanceof r)return h;if(typeof h=="number"&&(h=String(h)),typeof h!="string")return null;u=u||{};let f=null;if(!u.rtl)f=h.match(u.includePrerelease?t[s.COERCEFULL]:t[s.COERCE]);else{const m=u.includePrerelease?t[s.COERCERTLFULL]:t[s.COERCERTL];let L;for(;(L=m.exec(h))&&(!f||f.index+f[0].length!==h.length);)(!f||L.index+L[0].length!==f.index+f[0].length)&&(f=L),m.lastIndex=L.index+L[1].length+L[2].length;m.lastIndex=-1}if(f===null)return null;const n=f[2],R=f[3]||"0",e=f[4]||"0",o=u.includePrerelease&&f[5]?`-${f[5]}`:"",c=u.includePrerelease&&f[6]?`+${f[6]}`:"";return i(`${n}.${R}.${e}${o}${c}`,u)},Ce}var qe,Cr;function mt(){if(Cr)return qe;Cr=1;const r=V(),i=X(),t=j(),s=(f,n,R)=>{if(!i.RELEASE_TYPES.includes(n))return null;const e=a(f,R);return e&&h(e,n)},a=(f,n)=>{const R=f instanceof t?f.version:f;return r(R,n)},h=(f,n)=>{if(u(n))return f.version;switch(f.prerelease=[],n){case"major":f.minor=0,f.patch=0;break;case"minor":f.patch=0;break}return f.format()},u=f=>f.startsWith("pre");return qe=s,qe}var _e,qr;function Rt(){if(qr)return _e;qr=1;class r{constructor(){this.max=1e3,this.map=new Map}get(t){const s=this.map.get(t);if(s!==void 0)return this.map.delete(t),this.map.set(t,s),s}delete(t){return this.map.delete(t)}set(t,s){if(!this.delete(t)&&s!==void 0){if(this.map.size>=this.max){const h=this.map.keys().next().value;this.delete(h)}this.map.set(t,s)}return this}}return _e=r,_e}var De,_r;function F(){if(_r)return De;_r=1;const r=/\s+/g;class i{constructor(l,I){if(I=a(I),l instanceof i)return l.loose===!!I.loose&&l.includePrerelease===!!I.includePrerelease?l:new i(l.raw,I);if(l instanceof h)return this.raw=l.value,this.set=[[l]],this.formatted=void 0,this;if(this.options=I,this.loose=!!I.loose,this.includePrerelease=!!I.includePrerelease,this.raw=l.trim().replace(r," "),this.set=this.raw.split("||").map(v=>this.parseRange(v.trim())).filter(v=>v.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const v=this.set[0];if(this.set=this.set.filter(S=>!P(S[0])),this.set.length===0)this.set=[v];else if(this.set.length>1){for(const S of this.set)if(S.length===1&&D(S[0])){this.set=[S];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let l=0;l<this.set.length;l++){l>0&&(this.formatted+="||");const I=this.set[l];for(let v=0;v<I.length;v++)v>0&&(this.formatted+=" "),this.formatted+=I[v].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(l){l=l.replace(O,"");const v=((this.options.includePrerelease&&L)|(this.options.loose&&E))+":"+l,S=s.get(v);if(S)return S;const d=this.options.loose,$=d?n[e.HYPHENRANGELOOSE]:n[e.HYPHENRANGE];l=l.replace($,re(this.options.includePrerelease)),u("hyphen replace",l),l=l.replace(n[e.COMPARATORTRIM],o),u("comparator trim",l),l=l.replace(n[e.TILDETRIM],c),u("tilde trim",l),l=l.replace(n[e.CARETTRIM],m),u("caret trim",l);let g=l.split(" ").map(q=>y(q,this.options)).join(" ").split(/\s+/).map(q=>ee(q,this.options));d&&(g=g.filter(q=>(u("loose invalid filter",q,this.options),!!q.match(n[e.COMPARATORLOOSE])))),u("range list",g);const A=new Map,w=g.map(q=>new h(q,this.options));for(const q of w){if(P(q))return[q];A.set(q.value,q)}A.size>1&&A.has("")&&A.delete("");const b=[...A.values()];return s.set(v,b),b}intersects(l,I){if(!(l instanceof i))throw new TypeError("a Range is required");return this.set.some(v=>G(v,I)&&l.set.some(S=>G(S,I)&&v.every(d=>S.every($=>d.intersects($,I)))))}test(l){if(!l)return!1;if(typeof l=="string")try{l=new f(l,this.options)}catch{return!1}for(let I=0;I<this.set.length;I++)if(te(this.set[I],l,this.options))return!0;return!1}}De=i;const t=Rt(),s=new t,a=ze(),h=Y(),u=H(),f=j(),{safeRe:n,src:R,t:e,comparatorTrimReplace:o,tildeTrimReplace:c,caretTrimReplace:m}=M(),{FLAG_INCLUDE_PRERELEASE:L,FLAG_LOOSE:E}=X(),O=new RegExp(R[e.BUILD],"g"),P=p=>p.value==="<0.0.0-0",D=p=>p.value==="",G=(p,l)=>{let I=!0;const v=p.slice();let S=v.pop();for(;I&&v.length;)I=v.every(d=>S.intersects(d,l)),S=v.pop();return I},y=(p,l)=>(p=p.replace(n[e.BUILD],""),u("comp",p,l),p=x(p,l),u("caret",p),p=_(p,l),u("tildes",p),p=Z(p,l),u("xrange",p),p=Q(p,l),u("stars",p),p),T=p=>!p||p.toLowerCase()==="x"||p==="*",C=(p,l,I)=>T(p)&&!T(l)||T(l)&&I&&!T(I),_=(p,l)=>p.trim().split(/\s+/).map(I=>N(I,l)).join(" "),N=(p,l)=>{const I=l.loose?n[e.TILDELOOSE]:n[e.TILDE],v=l.includePrerelease?"-0":"";return p.replace(I,(S,d,$,g,A)=>{u("tilde",p,S,d,$,g,A);let w;return T(d)?w="":T($)?w=`>=${d}.0.0${v} <${+d+1}.0.0-0`:T(g)?w=`>=${d}.${$}.0${v} <${d}.${+$+1}.0-0`:A?(u("replaceTilde pr",A),w=`>=${d}.${$}.${g}-${A} <${d}.${+$+1}.0-0`):w=`>=${d}.${$}.${g} <${d}.${+$+1}.0-0`,u("tilde return",w),w})},x=(p,l)=>p.trim().split(/\s+/).map(I=>K(I,l)).join(" "),K=(p,l)=>{u("caret",p,l);const I=l.loose?n[e.CARETLOOSE]:n[e.CARET],v=l.includePrerelease?"-0":"";return p.replace(I,(S,d,$,g,A)=>{u("caret",p,S,d,$,g,A);let w;return T(d)?w="":T($)?w=`>=${d}.0.0${v} <${+d+1}.0.0-0`:T(g)?d==="0"?w=`>=${d}.${$}.0${v} <${d}.${+$+1}.0-0`:w=`>=${d}.${$}.0${v} <${+d+1}.0.0-0`:A?(u("replaceCaret pr",A),d==="0"?$==="0"?w=`>=${d}.${$}.${g}-${A} <${d}.${$}.${+g+1}-0`:w=`>=${d}.${$}.${g}-${A} <${d}.${+$+1}.0-0`:w=`>=${d}.${$}.${g}-${A} <${+d+1}.0.0-0`):(u("no pr"),d==="0"?$==="0"?w=`>=${d}.${$}.${g} <${d}.${$}.${+g+1}-0`:w=`>=${d}.${$}.${g} <${d}.${+$+1}.0-0`:w=`>=${d}.${$}.${g} <${+d+1}.0.0-0`),u("caret return",w),w})},Z=(p,l)=>(u("replaceXRanges",p,l),p.split(/\s+/).map(I=>J(I,l)).join(" ")),J=(p,l)=>{p=p.trim();const I=l.loose?n[e.XRANGELOOSE]:n[e.XRANGE];return p.replace(I,(v,S,d,$,g,A)=>{if(u("xRange",p,v,S,d,$,g,A),C(d,$,g))return p;const w=T(d),b=w||T($),q=b||T(g),k=q;return S==="="&&k&&(S=""),A=l.includePrerelease?"-0":"",w?S===">"||S==="<"?v="<0.0.0-0":v="*":S&&k?(b&&($=0),g=0,S===">"?(S=">=",b?(d=+d+1,$=0,g=0):($=+$+1,g=0)):S==="<="&&(S="<",b?d=+d+1:$=+$+1),S==="<"&&(A="-0"),v=`${S+d}.${$}.${g}${A}`):b?v=`>=${d}.0.0${A} <${+d+1}.0.0-0`:q&&(v=`>=${d}.${$}.0${A} <${d}.${+$+1}.0-0`),u("xRange return",v),v})},Q=(p,l)=>(u("replaceStars",p,l),p.trim().replace(n[e.STAR],"")),ee=(p,l)=>(u("replaceGTE0",p,l),p.trim().replace(n[l.includePrerelease?e.GTE0PRE:e.GTE0],"")),re=p=>(l,I,v,S,d,$,g,A,w,b,q,k)=>(T(v)?I="":T(S)?I=`>=${v}.0.0${p?"-0":""}`:T(d)?I=`>=${v}.${S}.0${p?"-0":""}`:$?I=`>=${I}`:I=`>=${I}${p?"-0":""}`,T(w)?A="":T(b)?A=`<${+w+1}.0.0-0`:T(q)?A=`<${w}.${+b+1}.0-0`:k?A=`<=${w}.${b}.${q}-${k}`:p?A=`<${w}.${b}.${+q+1}-0`:A=`<=${A}`,`${I} ${A}`.trim()),te=(p,l,I)=>{for(let v=0;v<p.length;v++)if(!p[v].test(l))return!1;if(l.prerelease.length&&!I.includePrerelease){for(let v=0;v<p.length;v++)if(u(p[v].semver),p[v].semver!==h.ANY&&p[v].semver.prerelease.length>0){const S=p[v].semver;if(S.major===l.major&&S.minor===l.minor&&S.patch===l.patch)return!0}return!1}return!0};return De}var ye,Dr;function Y(){if(Dr)return ye;Dr=1;const r=Symbol("SemVer ANY");class i{static get ANY(){return r}constructor(e,o){if(o=t(o),e instanceof i){if(e.loose===!!o.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),u("comparator",e,o),this.options=o,this.loose=!!o.loose,this.parse(e),this.semver===r?this.value="":this.value=this.operator+this.semver.version,u("comp",this)}parse(e){const o=this.options.loose?s[a.COMPARATORLOOSE]:s[a.COMPARATOR],c=e.match(o);if(!c)throw new TypeError(`Invalid comparator: ${e}`);this.operator=c[1]!==void 0?c[1]:"",this.operator==="="&&(this.operator=""),c[2]?this.semver=new f(c[2],this.options.loose):this.semver=r}toString(){return this.value}test(e){if(u("Comparator.test",e,this.options.loose),this.semver===r||e===r)return!0;if(typeof e=="string")try{e=new f(e,this.options)}catch{return!1}return h(e,this.operator,this.semver,this.options)}intersects(e,o){if(!(e instanceof i))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new n(e.value,o).test(this.value):e.operator===""?e.value===""?!0:new n(this.value,o).test(e.semver):(o=t(o),o.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!o.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||h(this.semver,"<",e.semver,o)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||h(this.semver,">",e.semver,o)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}}ye=i;const t=ze(),{safeRe:s,t:a}=M(),h=Jr(),u=H(),f=j(),n=F();return ye}var je,yr;function z(){if(yr)return je;yr=1;const r=F();return je=(t,s,a)=>{try{s=new r(s,a)}catch{return!1}return s.test(t)},je}var Ge,jr;function dt(){if(jr)return Ge;jr=1;const r=F();return Ge=(t,s)=>new r(t,s).set.map(a=>a.map(h=>h.value).join(" ").trim().split(" ")),Ge}var be,Gr;function vt(){if(Gr)return be;Gr=1;const r=j(),i=F();return be=(s,a,h)=>{let u=null,f=null,n=null;try{n=new i(a,h)}catch{return null}return s.forEach(R=>{n.test(R)&&(!u||f.compare(R)===-1)&&(u=R,f=new r(u,h))}),u},be}var Ue,br;function It(){if(br)return Ue;br=1;const r=j(),i=F();return Ue=(s,a,h)=>{let u=null,f=null,n=null;try{n=new i(a,h)}catch{return null}return s.forEach(R=>{n.test(R)&&(!u||f.compare(R)===1)&&(u=R,f=new r(u,h))}),u},Ue}var Fe,Ur;function $t(){if(Ur)return Fe;Ur=1;const r=j(),i=F(),t=W();return Fe=(a,h)=>{a=new i(a,h);let u=new r("0.0.0");if(a.test(u)||(u=new r("0.0.0-0"),a.test(u)))return u;u=null;for(let f=0;f<a.set.length;++f){const n=a.set[f];let R=null;n.forEach(e=>{const o=new r(e.semver.version);switch(e.operator){case">":o.prerelease.length===0?o.patch++:o.prerelease.push(0),o.raw=o.format();case"":case">=":(!R||t(o,R))&&(R=o);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${e.operator}`)}}),R&&(!u||t(u,R))&&(u=R)}return u&&a.test(u)?u:null},Fe}var Ve,Fr;function Lt(){if(Fr)return Ve;Fr=1;const r=F();return Ve=(t,s)=>{try{return new r(t,s).range||"*"}catch{return null}},Ve}var xe,Vr;function er(){if(Vr)return xe;Vr=1;const r=j(),i=Y(),{ANY:t}=i,s=F(),a=z(),h=W(),u=Ze(),f=Qe(),n=Je();return xe=(e,o,c,m)=>{e=new r(e,m),o=new s(o,m);let L,E,O,P,D;switch(c){case">":L=h,E=f,O=u,P=">",D=">=";break;case"<":L=u,E=n,O=h,P="<",D="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(a(e,o,m))return!1;for(let G=0;G<o.set.length;++G){const y=o.set[G];let T=null,C=null;if(y.forEach(_=>{_.semver===t&&(_=new i(">=0.0.0")),T=T||_,C=C||_,L(_.semver,T.semver,m)?T=_:O(_.semver,C.semver,m)&&(C=_)}),T.operator===P||T.operator===D||(!C.operator||C.operator===P)&&E(e,C.semver))return!1;if(C.operator===D&&O(e,C.semver))return!1}return!0},xe}var ke,xr;function Nt(){if(xr)return ke;xr=1;const r=er();return ke=(t,s,a)=>r(t,s,">",a),ke}var Xe,kr;function St(){if(kr)return Xe;kr=1;const r=er();return Xe=(t,s,a)=>r(t,s,"<",a),Xe}var Me,Xr;function Ot(){if(Xr)return Me;Xr=1;const r=F();return Me=(t,s,a)=>(t=new r(t,a),s=new r(s,a),t.intersects(s,a)),Me}var Be,Mr;function At(){if(Mr)return Be;Mr=1;const r=z(),i=U();return Be=(t,s,a)=>{const h=[];let u=null,f=null;const n=t.sort((c,m)=>i(c,m,a));for(const c of n)r(c,s,a)?(f=c,u||(u=c)):(f&&h.push([u,f]),f=null,u=null);u&&h.push([u,null]);const R=[];for(const[c,m]of h)c===m?R.push(c):!m&&c===n[0]?R.push("*"):m?c===n[0]?R.push(`<=${m}`):R.push(`${c} - ${m}`):R.push(`>=${c}`);const e=R.join(" || "),o=typeof s.raw=="string"?s.raw:String(s);return e.length<o.length?e:s},Be}var He,Br;function Tt(){if(Br)return He;Br=1;const r=F(),i=Y(),{ANY:t}=i,s=z(),a=U(),h=(o,c,m={})=>{if(o===c)return!0;o=new r(o,m),c=new r(c,m);let L=!1;e:for(const E of o.set){for(const O of c.set){const P=n(E,O,m);if(L=L||P!==null,P)continue e}if(L)return!1}return!0},u=[new i(">=0.0.0-0")],f=[new i(">=0.0.0")],n=(o,c,m)=>{if(o===c)return!0;if(o.length===1&&o[0].semver===t){if(c.length===1&&c[0].semver===t)return!0;m.includePrerelease?o=u:o=f}if(c.length===1&&c[0].semver===t){if(m.includePrerelease)return!0;c=f}const L=new Set;let E,O;for(const N of o)N.operator===">"||N.operator===">="?E=R(E,N,m):N.operator==="<"||N.operator==="<="?O=e(O,N,m):L.add(N.semver);if(L.size>1)return null;let P;if(E&&O){if(P=a(E.semver,O.semver,m),P>0)return null;if(P===0&&(E.operator!==">="||O.operator!=="<="))return null}for(const N of L){if(E&&!s(N,String(E),m)||O&&!s(N,String(O),m))return null;for(const x of c)if(!s(N,String(x),m))return!1;return!0}let D,G,y,T,C=O&&!m.includePrerelease&&O.semver.prerelease.length?O.semver:!1,_=E&&!m.includePrerelease&&E.semver.prerelease.length?E.semver:!1;C&&C.prerelease.length===1&&O.operator==="<"&&C.prerelease[0]===0&&(C=!1);for(const N of c){if(T=T||N.operator===">"||N.operator===">=",y=y||N.operator==="<"||N.operator==="<=",E){if(_&&N.semver.prerelease&&N.semver.prerelease.length&&N.semver.major===_.major&&N.semver.minor===_.minor&&N.semver.patch===_.patch&&(_=!1),N.operator===">"||N.operator===">="){if(D=R(E,N,m),D===N&&D!==E)return!1}else if(E.operator===">="&&!N.test(E.semver))return!1}if(O){if(C&&N.semver.prerelease&&N.semver.prerelease.length&&N.semver.major===C.major&&N.semver.minor===C.minor&&N.semver.patch===C.patch&&(C=!1),N.operator==="<"||N.operator==="<="){if(G=e(O,N,m),G===N&&G!==O)return!1}else if(O.operator==="<="&&!N.test(O.semver))return!1}if(!N.operator&&(O||E)&&P!==0)return!1}return!(E&&y&&!O&&P!==0||O&&T&&!E&&P!==0||_||C)},R=(o,c,m)=>{if(!o)return c;const L=a(o.semver,c.semver,m);return L>0?o:L<0||c.operator===">"&&o.operator===">="?c:o},e=(o,c,m)=>{if(!o)return c;const L=a(o.semver,c.semver,m);return L<0?o:L>0||c.operator==="<"&&o.operator==="<="?c:o};return He=h,He}var We,Hr;function gt(){if(Hr)return We;Hr=1;const r=M(),i=X(),t=j(),s=zr(),a=V(),h=tt(),u=st(),f=nt(),n=it(),R=at(),e=ot(),o=ut(),c=ct(),m=U(),L=lt(),E=ft(),O=Ke(),P=ht(),D=Et(),G=W(),y=Ze(),T=Kr(),C=Zr(),_=Je(),N=Qe(),x=Jr(),K=pt(),Z=mt(),J=Y(),Q=F(),ee=z(),re=dt(),te=vt(),p=It(),l=$t(),I=Lt(),v=er(),S=Nt(),d=St(),$=Ot(),g=At(),A=Tt();return We={parse:a,valid:h,clean:u,inc:f,diff:n,major:R,minor:e,patch:o,prerelease:c,compare:m,rcompare:L,compareLoose:E,compareBuild:O,sort:P,rsort:D,gt:G,lt:y,eq:T,neq:C,gte:_,lte:N,cmp:x,coerce:K,truncate:Z,Comparator:J,Range:Q,satisfies:ee,toComparators:re,maxSatisfying:te,minSatisfying:p,minVersion:l,validRange:I,outside:v,gtr:S,ltr:d,intersects:$,simplifyRange:g,subset:A,SemVer:t,re:r.re,src:r.src,tokens:r.t,SEMVER_SPEC_VERSION:i.SEMVER_SPEC_VERSION,RELEASE_TYPES:i.RELEASE_TYPES,compareIdentifiers:s.compareIdentifiers,rcompareIdentifiers:s.rcompareIdentifiers},We}var Wr=gt();const wt=[{description:"Email + password on better-auth (default)",label:"Email & password",value:"auth"},{description:"Clerk-hosted auth",label:"Clerk",value:"auth-clerk"},{description:"Auth0 (OIDC)",label:"Auth0",value:"auth-auth0"}],Yr="auth",Mt=async r=>await r("Which auth provider?",wt,{default:Yr})??Yr,Bt="mail",Ht=[{description:"Next, react-router, TanStack Start, Astro islands",label:"React",value:"auth-ui-react"},{description:"Nuxt, Vue + Vite",label:"Vue",value:"auth-ui-vue"},{description:"SvelteKit, Svelte + Vite",label:"Svelte",value:"auth-ui-svelte"},{description:"TanStack Start Solid, Solid 1.x + Vite",label:"Solid",value:"auth-ui-solid"},{description:"Solid 2.0 + Vite (@solidjs/web)",label:"Solid 2",value:"auth-ui-solid-v2"},{description:"Analog",label:"Angular",value:"auth-ui-angular"}],Wt="auth-ui-react",Pt=r=>Object.hasOwn(r,"react-native")||Object.hasOwn(r,"@lunora/react-native")||Object.hasOwn(r,"expo"),Yt="auth-ui has no React Native port — the screens render DOM elements and a stylesheet, which Metro has nothing to mount. Build the screens with React Native primitives against the same better-auth client (`@lunora/react-native/auth`); `lunora add auth` still installs the server half.",Ct=r=>{if(!(r===void 0||Wr.validRange(r)===null))return Wr.minVersion(r)?.major},qt=r=>Object.hasOwn(r,"@solidjs/web")||(Ct(r["solid-js"])??0)>=2,zt=r=>{const i=t=>Object.hasOwn(r,t);if(!Pt(r)){if(qt(r))return"auth-ui-solid-v2";if(i("@lunora/react"))return"auth-ui-react";if(i("@lunora/vue"))return"auth-ui-vue";if(i("@lunora/svelte"))return"auth-ui-svelte";if(i("@lunora/solid"))return"auth-ui-solid";if(i("@lunora/angular"))return"auth-ui-angular";if(i("react")||i("next"))return"auth-ui-react";if(i("vue")||i("nuxt"))return"auth-ui-vue";if(i("svelte")||i("@sveltejs/kit"))return"auth-ui-svelte";if(i("solid-js"))return"auth-ui-solid";if(i("@angular/core"))return"auth-ui-angular"}},Kt=r=>{const i=r.trim();if(i==="")return;const t=i.toLowerCase();return t==="auth-ui"||t==="auth-ui-"?{kind:"auth-ui"}:t==="auth"?{kind:"auth"}:t==="email"||t==="mail"?{kind:"email"}:{item:t,kind:"item"}},_t=/[^a-z0-9]+/u,Qr=(r,i,t)=>{let s=r.toLowerCase().split(_t).filter(Boolean).join("-").slice(0,t);return s.endsWith("-")&&(s=s.slice(0,-1)),s.length>=i?s:void 0},Dt="DB",yt="Name your D1 database (run `wrangler d1 create` to get its id, then put it in wrangler.jsonc)",et=r=>Qr(r,1,64),jt="lunora-db",Gt=r=>et(`${r}-db`)??jt,Zt=async(r,i)=>{const t=Gt(i);return et(await r(yt,{default:t,placeholder:t}))??t},Jt=(r,i)=>Ye(r,"d1_databases",{key:"binding",value:Dt},"database_name",i),bt="SEND_EMAIL",Qt="Verified destination email for production delivery (blank = set it later in wrangler.jsonc)",Ut=r=>{const i=r.trim();if(i.length===0||i.includes(" "))return!1;const t=i.indexOf("@");if(t<=0||t!==i.lastIndexOf("@"))return!1;const s=i.slice(t+1);return s.length>=3&&s.includes(".")&&!s.startsWith(".")&&!s.endsWith(".")},es=(r,i)=>{const t=r.trim();if(t!==""){if(!Ut(t)){i(`"${t}" doesn't look like an email — leaving the placeholder; set destination_address in wrangler.jsonc.`);return}return t}},rs=(r,i)=>Ye(r,"send_email",{key:"name",value:bt},"destination_address",i),Ft="UPLOADS",Vt="Name your R2 bucket (you can rename it in wrangler.jsonc later)",rt=r=>Qr(r,3,63),xt="lunora-uploads",kt=r=>rt(`${r}-uploads`)??xt,ts=async(r,i)=>{const t=kt(i);return rt(await r(Vt,{default:t,placeholder:t}))??t},ss=(r,i)=>Ye(r,"r2_buckets",{key:"binding",value:Ft},"bucket_name",i);export{Yt as A,Yr as D,Bt as E,Qt as M,et as a,Gt as b,Zt as c,kt as d,Mt as e,zt as f,Wt as g,Ht as h,Pt as i,wt as j,rs as k,Jt as l,Kt as n,ts as p,es as r,rt as s,ss as w};
1
+ import{s as Ye}from"./commands-CdVObzRk.mjs";var B={exports:{}},se,rr;function X(){if(rr)return se;rr=1;const r="2.0.0",i=256,t=Number.MAX_SAFE_INTEGER||9007199254740991,s=16,a=i-6;return se={MAX_LENGTH:i,MAX_SAFE_COMPONENT_LENGTH:s,MAX_SAFE_BUILD_LENGTH:a,MAX_SAFE_INTEGER:t,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:r,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},se}var ne,tr;function H(){return tr||(tr=1,ne=process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...i)=>console.error("SEMVER",...i):()=>{}),ne}var sr;function M(){return sr||(sr=1,(function(r,i){const{MAX_SAFE_COMPONENT_LENGTH:t,MAX_SAFE_BUILD_LENGTH:s,MAX_LENGTH:a}=X(),h=H();i=r.exports={};const u=i.re=[],f=i.safeRe=[],n=i.src=[],R=i.safeSrc=[],e=i.t={};let o=0;const c="[a-zA-Z0-9-]",m=[["\\s",1],["\\d",a],[c,s]],L=O=>{for(const[P,D]of m)O=O.split(`${P}*`).join(`${P}{0,${D}}`).split(`${P}+`).join(`${P}{1,${D}}`);return O},E=(O,P,D)=>{const G=L(P),y=o++;h(O,y,P),e[O]=y,n[y]=P,R[y]=G,u[y]=new RegExp(P,D?"g":void 0),f[y]=new RegExp(G,D?"g":void 0)};E("NUMERICIDENTIFIER","0|[1-9]\\d*"),E("NUMERICIDENTIFIERLOOSE","\\d+"),E("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${c}*`),E("MAINVERSION",`(${n[e.NUMERICIDENTIFIER]})\\.(${n[e.NUMERICIDENTIFIER]})\\.(${n[e.NUMERICIDENTIFIER]})`),E("MAINVERSIONLOOSE",`(${n[e.NUMERICIDENTIFIERLOOSE]})\\.(${n[e.NUMERICIDENTIFIERLOOSE]})\\.(${n[e.NUMERICIDENTIFIERLOOSE]})`),E("PRERELEASEIDENTIFIER",`(?:${n[e.NONNUMERICIDENTIFIER]}|${n[e.NUMERICIDENTIFIER]})`),E("PRERELEASEIDENTIFIERLOOSE",`(?:${n[e.NONNUMERICIDENTIFIER]}|${n[e.NUMERICIDENTIFIERLOOSE]})`),E("PRERELEASE",`(?:-(${n[e.PRERELEASEIDENTIFIER]}(?:\\.${n[e.PRERELEASEIDENTIFIER]})*))`),E("PRERELEASELOOSE",`(?:-?(${n[e.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${n[e.PRERELEASEIDENTIFIERLOOSE]})*))`),E("BUILDIDENTIFIER",`${c}+`),E("BUILD",`(?:\\+(${n[e.BUILDIDENTIFIER]}(?:\\.${n[e.BUILDIDENTIFIER]})*))`),E("FULLPLAIN",`v?${n[e.MAINVERSION]}${n[e.PRERELEASE]}?${n[e.BUILD]}?`),E("FULL",`^${n[e.FULLPLAIN]}$`),E("LOOSEPLAIN",`[v=\\s]*${n[e.MAINVERSIONLOOSE]}${n[e.PRERELEASELOOSE]}?${n[e.BUILD]}?`),E("LOOSE",`^${n[e.LOOSEPLAIN]}$`),E("GTLT","((?:<|>)?=?)"),E("XRANGEIDENTIFIERLOOSE",`${n[e.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),E("XRANGEIDENTIFIER",`${n[e.NUMERICIDENTIFIER]}|x|X|\\*`),E("XRANGEPLAIN",`[v=\\s]*(${n[e.XRANGEIDENTIFIER]})(?:\\.(${n[e.XRANGEIDENTIFIER]})(?:\\.(${n[e.XRANGEIDENTIFIER]})(?:${n[e.PRERELEASE]})?${n[e.BUILD]}?)?)?`),E("XRANGEPLAINLOOSE",`[v=\\s]*(${n[e.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[e.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[e.XRANGEIDENTIFIERLOOSE]})(?:${n[e.PRERELEASELOOSE]})?${n[e.BUILD]}?)?)?`),E("XRANGE",`^${n[e.GTLT]}\\s*${n[e.XRANGEPLAIN]}$`),E("XRANGELOOSE",`^${n[e.GTLT]}\\s*${n[e.XRANGEPLAINLOOSE]}$`),E("COERCEPLAIN",`(^|[^\\d])(\\d{1,${t}})(?:\\.(\\d{1,${t}}))?(?:\\.(\\d{1,${t}}))?`),E("COERCE",`${n[e.COERCEPLAIN]}(?:$|[^\\d])`),E("COERCEFULL",n[e.COERCEPLAIN]+`(?:${n[e.PRERELEASE]})?(?:${n[e.BUILD]})?(?:$|[^\\d])`),E("COERCERTL",n[e.COERCE],!0),E("COERCERTLFULL",n[e.COERCEFULL],!0),E("LONETILDE","(?:~>?)"),E("TILDETRIM",`(\\s*)${n[e.LONETILDE]}\\s+`,!0),i.tildeTrimReplace="$1~",E("TILDE",`^${n[e.LONETILDE]}${n[e.XRANGEPLAIN]}$`),E("TILDELOOSE",`^${n[e.LONETILDE]}${n[e.XRANGEPLAINLOOSE]}$`),E("LONECARET","(?:\\^)"),E("CARETTRIM",`(\\s*)${n[e.LONECARET]}\\s+`,!0),i.caretTrimReplace="$1^",E("CARET",`^${n[e.LONECARET]}${n[e.XRANGEPLAIN]}$`),E("CARETLOOSE",`^${n[e.LONECARET]}${n[e.XRANGEPLAINLOOSE]}$`),E("COMPARATORLOOSE",`^${n[e.GTLT]}\\s*(${n[e.LOOSEPLAIN]})$|^$`),E("COMPARATOR",`^${n[e.GTLT]}\\s*(${n[e.FULLPLAIN]})$|^$`),E("COMPARATORTRIM",`(\\s*)${n[e.GTLT]}\\s*(${n[e.LOOSEPLAIN]}|${n[e.XRANGEPLAIN]})`,!0),i.comparatorTrimReplace="$1$2$3",E("HYPHENRANGE",`^\\s*(${n[e.XRANGEPLAIN]})\\s+-\\s+(${n[e.XRANGEPLAIN]})\\s*$`),E("HYPHENRANGELOOSE",`^\\s*(${n[e.XRANGEPLAINLOOSE]})\\s+-\\s+(${n[e.XRANGEPLAINLOOSE]})\\s*$`),E("STAR","(<|>)?=?\\s*\\*"),E("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),E("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(B,B.exports)),B.exports}var ie,nr;function ze(){if(nr)return ie;nr=1;const r=Object.freeze({loose:!0}),i=Object.freeze({});return ie=s=>s?typeof s!="object"?r:s:i,ie}var ae,ir;function zr(){if(ir)return ae;ir=1;const r=/^[0-9]+$/,i=(s,a)=>{if(typeof s=="number"&&typeof a=="number")return s===a?0:s<a?-1:1;const h=r.test(s),u=r.test(a);return h&&u&&(s=+s,a=+a),s===a?0:h&&!u?-1:u&&!h?1:s<a?-1:1};return ae={compareIdentifiers:i,rcompareIdentifiers:(s,a)=>i(a,s)},ae}var oe,ar;function j(){if(ar)return oe;ar=1;const r=H(),{MAX_LENGTH:i,MAX_SAFE_INTEGER:t}=X(),{safeRe:s,t:a}=M(),h=ze(),{compareIdentifiers:u}=zr(),f=(R,e)=>{const o=e.split(".");if(o.length>R.length)return!1;for(let c=0;c<o.length;c++)if(u(R[c],o[c])!==0)return!1;return!0};class n{constructor(e,o){if(o=h(o),e instanceof n){if(e.loose===!!o.loose&&e.includePrerelease===!!o.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>i)throw new TypeError(`version is longer than ${i} characters`);r("SemVer",e,o),this.options=o,this.loose=!!o.loose,this.includePrerelease=!!o.includePrerelease;const c=e.trim().match(o.loose?s[a.LOOSE]:s[a.FULL]);if(!c)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+c[1],this.minor=+c[2],this.patch=+c[3],this.major>t||this.major<0)throw new TypeError("Invalid major version");if(this.minor>t||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>t||this.patch<0)throw new TypeError("Invalid patch version");c[4]?this.prerelease=c[4].split(".").map(m=>{if(/^[0-9]+$/.test(m)){const L=+m;if(L>=0&&L<t)return L}return m}):this.prerelease=[],this.build=c[5]?c[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(r("SemVer.compare",this.version,this.options,e),!(e instanceof n)){if(typeof e=="string"&&e===this.version)return 0;e=new n(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof n||(e=new n(e,this.options)),this.major<e.major?-1:this.major>e.major?1:this.minor<e.minor?-1:this.minor>e.minor?1:this.patch<e.patch?-1:this.patch>e.patch?1:0}comparePre(e){if(e instanceof n||(e=new n(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let o=0;do{const c=this.prerelease[o],m=e.prerelease[o];if(r("prerelease compare",o,c,m),c===void 0&&m===void 0)return 0;if(m===void 0)return 1;if(c===void 0)return-1;if(c===m)continue;return u(c,m)}while(++o)}compareBuild(e){e instanceof n||(e=new n(e,this.options));let o=0;do{const c=this.build[o],m=e.build[o];if(r("build compare",o,c,m),c===void 0&&m===void 0)return 0;if(m===void 0)return 1;if(c===void 0)return-1;if(c===m)continue;return u(c,m)}while(++o)}inc(e,o,c){if(e.startsWith("pre")){if(!o&&c===!1)throw new Error("invalid increment argument: identifier is empty");if(o){const m=`-${o}`.match(this.options.loose?s[a.PRERELEASELOOSE]:s[a.PRERELEASE]);if(!m||m[1]!==o)throw new Error(`invalid identifier: ${o}`)}}switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",o,c);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",o,c);break;case"prepatch":this.prerelease.length=0,this.inc("patch",o,c),this.inc("pre",o,c);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",o,c),this.inc("pre",o,c);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{const m=Number(c)?1:0;if(this.prerelease.length===0)this.prerelease=[m];else{let L=this.prerelease.length;for(;--L>=0;)typeof this.prerelease[L]=="number"&&(this.prerelease[L]++,L=-2);if(L===-1){if(o===this.prerelease.join(".")&&c===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(m)}}if(o){let L=[o,m];if(c===!1&&(L=[o]),f(this.prerelease,o)){const E=this.prerelease[o.split(".").length];isNaN(E)&&(this.prerelease=L)}else this.prerelease=L}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}return oe=n,oe}var ue,or;function V(){if(or)return ue;or=1;const r=j();return ue=(t,s,a=!1)=>{if(t instanceof r)return t;try{return new r(t,s)}catch(h){if(!a)return null;throw h}},ue}var ce,ur;function tt(){if(ur)return ce;ur=1;const r=V();return ce=(t,s)=>{const a=r(t,s);return a?a.version:null},ce}var le,cr;function st(){if(cr)return le;cr=1;const r=V();return le=(t,s)=>{const a=r(t.trim().replace(/^[=v]+/,""),s);return a?a.version:null},le}var fe,lr;function nt(){if(lr)return fe;lr=1;const r=j();return fe=(t,s,a,h,u)=>{typeof a=="string"&&(u=h,h=a,a=void 0);try{return new r(t instanceof r?t.version:t,a).inc(s,h,u).version}catch{return null}},fe}var he,fr;function it(){if(fr)return he;fr=1;const r=V();return he=(t,s)=>{const a=r(t,null,!0),h=r(s,null,!0),u=a.compare(h);if(u===0)return null;const f=u>0,n=f?a:h,R=f?h:a,e=!!n.prerelease.length;if(!!R.prerelease.length&&!e){if(!R.patch&&!R.minor)return"major";if(R.compareMain(n)===0)return R.minor&&!R.patch?"minor":"patch"}const c=e?"pre":"";return a.major!==h.major?c+"major":a.minor!==h.minor?c+"minor":a.patch!==h.patch?c+"patch":"prerelease"},he}var Ee,hr;function at(){if(hr)return Ee;hr=1;const r=j();return Ee=(t,s)=>new r(t,s).major,Ee}var pe,Er;function ot(){if(Er)return pe;Er=1;const r=j();return pe=(t,s)=>new r(t,s).minor,pe}var me,pr;function ut(){if(pr)return me;pr=1;const r=j();return me=(t,s)=>new r(t,s).patch,me}var Re,mr;function ct(){if(mr)return Re;mr=1;const r=V();return Re=(t,s)=>{const a=r(t,s);return a&&a.prerelease.length?a.prerelease:null},Re}var de,Rr;function U(){if(Rr)return de;Rr=1;const r=j();return de=(t,s,a)=>new r(t,a).compare(new r(s,a)),de}var ve,dr;function lt(){if(dr)return ve;dr=1;const r=U();return ve=(t,s,a)=>r(s,t,a),ve}var Ie,vr;function ft(){if(vr)return Ie;vr=1;const r=U();return Ie=(t,s)=>r(t,s,!0),Ie}var $e,Ir;function Ke(){if(Ir)return $e;Ir=1;const r=j();return $e=(t,s,a)=>{const h=new r(t,a),u=new r(s,a);return h.compare(u)||h.compareBuild(u)},$e}var Le,$r;function ht(){if($r)return Le;$r=1;const r=Ke();return Le=(t,s)=>t.sort((a,h)=>r(a,h,s)),Le}var Ne,Lr;function Et(){if(Lr)return Ne;Lr=1;const r=Ke();return Ne=(t,s)=>t.sort((a,h)=>r(h,a,s)),Ne}var Se,Nr;function W(){if(Nr)return Se;Nr=1;const r=U();return Se=(t,s,a)=>r(t,s,a)>0,Se}var Oe,Sr;function Ze(){if(Sr)return Oe;Sr=1;const r=U();return Oe=(t,s,a)=>r(t,s,a)<0,Oe}var Ae,Or;function Kr(){if(Or)return Ae;Or=1;const r=U();return Ae=(t,s,a)=>r(t,s,a)===0,Ae}var Te,Ar;function Zr(){if(Ar)return Te;Ar=1;const r=U();return Te=(t,s,a)=>r(t,s,a)!==0,Te}var ge,Tr;function Je(){if(Tr)return ge;Tr=1;const r=U();return ge=(t,s,a)=>r(t,s,a)>=0,ge}var we,gr;function Qe(){if(gr)return we;gr=1;const r=U();return we=(t,s,a)=>r(t,s,a)<=0,we}var Pe,wr;function Jr(){if(wr)return Pe;wr=1;const r=Kr(),i=Zr(),t=W(),s=Je(),a=Ze(),h=Qe();return Pe=(f,n,R,e)=>{switch(n){case"===":return typeof f=="object"&&(f=f.version),typeof R=="object"&&(R=R.version),f===R;case"!==":return typeof f=="object"&&(f=f.version),typeof R=="object"&&(R=R.version),f!==R;case"":case"=":case"==":return r(f,R,e);case"!=":return i(f,R,e);case">":return t(f,R,e);case">=":return s(f,R,e);case"<":return a(f,R,e);case"<=":return h(f,R,e);default:throw new TypeError(`Invalid operator: ${n}`)}},Pe}var Ce,Pr;function pt(){if(Pr)return Ce;Pr=1;const r=j(),i=V(),{safeRe:t,t:s}=M();return Ce=(h,u)=>{if(h instanceof r)return h;if(typeof h=="number"&&(h=String(h)),typeof h!="string")return null;u=u||{};let f=null;if(!u.rtl)f=h.match(u.includePrerelease?t[s.COERCEFULL]:t[s.COERCE]);else{const m=u.includePrerelease?t[s.COERCERTLFULL]:t[s.COERCERTL];let L;for(;(L=m.exec(h))&&(!f||f.index+f[0].length!==h.length);)(!f||L.index+L[0].length!==f.index+f[0].length)&&(f=L),m.lastIndex=L.index+L[1].length+L[2].length;m.lastIndex=-1}if(f===null)return null;const n=f[2],R=f[3]||"0",e=f[4]||"0",o=u.includePrerelease&&f[5]?`-${f[5]}`:"",c=u.includePrerelease&&f[6]?`+${f[6]}`:"";return i(`${n}.${R}.${e}${o}${c}`,u)},Ce}var qe,Cr;function mt(){if(Cr)return qe;Cr=1;const r=V(),i=X(),t=j(),s=(f,n,R)=>{if(!i.RELEASE_TYPES.includes(n))return null;const e=a(f,R);return e&&h(e,n)},a=(f,n)=>{const R=f instanceof t?f.version:f;return r(R,n)},h=(f,n)=>{if(u(n))return f.version;switch(f.prerelease=[],n){case"major":f.minor=0,f.patch=0;break;case"minor":f.patch=0;break}return f.format()},u=f=>f.startsWith("pre");return qe=s,qe}var _e,qr;function Rt(){if(qr)return _e;qr=1;class r{constructor(){this.max=1e3,this.map=new Map}get(t){const s=this.map.get(t);if(s!==void 0)return this.map.delete(t),this.map.set(t,s),s}delete(t){return this.map.delete(t)}set(t,s){if(!this.delete(t)&&s!==void 0){if(this.map.size>=this.max){const h=this.map.keys().next().value;this.delete(h)}this.map.set(t,s)}return this}}return _e=r,_e}var De,_r;function F(){if(_r)return De;_r=1;const r=/\s+/g;class i{constructor(l,I){if(I=a(I),l instanceof i)return l.loose===!!I.loose&&l.includePrerelease===!!I.includePrerelease?l:new i(l.raw,I);if(l instanceof h)return this.raw=l.value,this.set=[[l]],this.formatted=void 0,this;if(this.options=I,this.loose=!!I.loose,this.includePrerelease=!!I.includePrerelease,this.raw=l.trim().replace(r," "),this.set=this.raw.split("||").map(v=>this.parseRange(v.trim())).filter(v=>v.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const v=this.set[0];if(this.set=this.set.filter(S=>!P(S[0])),this.set.length===0)this.set=[v];else if(this.set.length>1){for(const S of this.set)if(S.length===1&&D(S[0])){this.set=[S];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let l=0;l<this.set.length;l++){l>0&&(this.formatted+="||");const I=this.set[l];for(let v=0;v<I.length;v++)v>0&&(this.formatted+=" "),this.formatted+=I[v].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(l){l=l.replace(O,"");const v=((this.options.includePrerelease&&L)|(this.options.loose&&E))+":"+l,S=s.get(v);if(S)return S;const d=this.options.loose,$=d?n[e.HYPHENRANGELOOSE]:n[e.HYPHENRANGE];l=l.replace($,re(this.options.includePrerelease)),u("hyphen replace",l),l=l.replace(n[e.COMPARATORTRIM],o),u("comparator trim",l),l=l.replace(n[e.TILDETRIM],c),u("tilde trim",l),l=l.replace(n[e.CARETTRIM],m),u("caret trim",l);let g=l.split(" ").map(q=>y(q,this.options)).join(" ").split(/\s+/).map(q=>ee(q,this.options));d&&(g=g.filter(q=>(u("loose invalid filter",q,this.options),!!q.match(n[e.COMPARATORLOOSE])))),u("range list",g);const A=new Map,w=g.map(q=>new h(q,this.options));for(const q of w){if(P(q))return[q];A.set(q.value,q)}A.size>1&&A.has("")&&A.delete("");const b=[...A.values()];return s.set(v,b),b}intersects(l,I){if(!(l instanceof i))throw new TypeError("a Range is required");return this.set.some(v=>G(v,I)&&l.set.some(S=>G(S,I)&&v.every(d=>S.every($=>d.intersects($,I)))))}test(l){if(!l)return!1;if(typeof l=="string")try{l=new f(l,this.options)}catch{return!1}for(let I=0;I<this.set.length;I++)if(te(this.set[I],l,this.options))return!0;return!1}}De=i;const t=Rt(),s=new t,a=ze(),h=Y(),u=H(),f=j(),{safeRe:n,src:R,t:e,comparatorTrimReplace:o,tildeTrimReplace:c,caretTrimReplace:m}=M(),{FLAG_INCLUDE_PRERELEASE:L,FLAG_LOOSE:E}=X(),O=new RegExp(R[e.BUILD],"g"),P=p=>p.value==="<0.0.0-0",D=p=>p.value==="",G=(p,l)=>{let I=!0;const v=p.slice();let S=v.pop();for(;I&&v.length;)I=v.every(d=>S.intersects(d,l)),S=v.pop();return I},y=(p,l)=>(p=p.replace(n[e.BUILD],""),u("comp",p,l),p=x(p,l),u("caret",p),p=_(p,l),u("tildes",p),p=Z(p,l),u("xrange",p),p=Q(p,l),u("stars",p),p),T=p=>!p||p.toLowerCase()==="x"||p==="*",C=(p,l,I)=>T(p)&&!T(l)||T(l)&&I&&!T(I),_=(p,l)=>p.trim().split(/\s+/).map(I=>N(I,l)).join(" "),N=(p,l)=>{const I=l.loose?n[e.TILDELOOSE]:n[e.TILDE],v=l.includePrerelease?"-0":"";return p.replace(I,(S,d,$,g,A)=>{u("tilde",p,S,d,$,g,A);let w;return T(d)?w="":T($)?w=`>=${d}.0.0${v} <${+d+1}.0.0-0`:T(g)?w=`>=${d}.${$}.0${v} <${d}.${+$+1}.0-0`:A?(u("replaceTilde pr",A),w=`>=${d}.${$}.${g}-${A} <${d}.${+$+1}.0-0`):w=`>=${d}.${$}.${g} <${d}.${+$+1}.0-0`,u("tilde return",w),w})},x=(p,l)=>p.trim().split(/\s+/).map(I=>K(I,l)).join(" "),K=(p,l)=>{u("caret",p,l);const I=l.loose?n[e.CARETLOOSE]:n[e.CARET],v=l.includePrerelease?"-0":"";return p.replace(I,(S,d,$,g,A)=>{u("caret",p,S,d,$,g,A);let w;return T(d)?w="":T($)?w=`>=${d}.0.0${v} <${+d+1}.0.0-0`:T(g)?d==="0"?w=`>=${d}.${$}.0${v} <${d}.${+$+1}.0-0`:w=`>=${d}.${$}.0${v} <${+d+1}.0.0-0`:A?(u("replaceCaret pr",A),d==="0"?$==="0"?w=`>=${d}.${$}.${g}-${A} <${d}.${$}.${+g+1}-0`:w=`>=${d}.${$}.${g}-${A} <${d}.${+$+1}.0-0`:w=`>=${d}.${$}.${g}-${A} <${+d+1}.0.0-0`):(u("no pr"),d==="0"?$==="0"?w=`>=${d}.${$}.${g} <${d}.${$}.${+g+1}-0`:w=`>=${d}.${$}.${g} <${d}.${+$+1}.0-0`:w=`>=${d}.${$}.${g} <${+d+1}.0.0-0`),u("caret return",w),w})},Z=(p,l)=>(u("replaceXRanges",p,l),p.split(/\s+/).map(I=>J(I,l)).join(" ")),J=(p,l)=>{p=p.trim();const I=l.loose?n[e.XRANGELOOSE]:n[e.XRANGE];return p.replace(I,(v,S,d,$,g,A)=>{if(u("xRange",p,v,S,d,$,g,A),C(d,$,g))return p;const w=T(d),b=w||T($),q=b||T(g),k=q;return S==="="&&k&&(S=""),A=l.includePrerelease?"-0":"",w?S===">"||S==="<"?v="<0.0.0-0":v="*":S&&k?(b&&($=0),g=0,S===">"?(S=">=",b?(d=+d+1,$=0,g=0):($=+$+1,g=0)):S==="<="&&(S="<",b?d=+d+1:$=+$+1),S==="<"&&(A="-0"),v=`${S+d}.${$}.${g}${A}`):b?v=`>=${d}.0.0${A} <${+d+1}.0.0-0`:q&&(v=`>=${d}.${$}.0${A} <${d}.${+$+1}.0-0`),u("xRange return",v),v})},Q=(p,l)=>(u("replaceStars",p,l),p.trim().replace(n[e.STAR],"")),ee=(p,l)=>(u("replaceGTE0",p,l),p.trim().replace(n[l.includePrerelease?e.GTE0PRE:e.GTE0],"")),re=p=>(l,I,v,S,d,$,g,A,w,b,q,k)=>(T(v)?I="":T(S)?I=`>=${v}.0.0${p?"-0":""}`:T(d)?I=`>=${v}.${S}.0${p?"-0":""}`:$?I=`>=${I}`:I=`>=${I}${p?"-0":""}`,T(w)?A="":T(b)?A=`<${+w+1}.0.0-0`:T(q)?A=`<${w}.${+b+1}.0-0`:k?A=`<=${w}.${b}.${q}-${k}`:p?A=`<${w}.${b}.${+q+1}-0`:A=`<=${A}`,`${I} ${A}`.trim()),te=(p,l,I)=>{for(let v=0;v<p.length;v++)if(!p[v].test(l))return!1;if(l.prerelease.length&&!I.includePrerelease){for(let v=0;v<p.length;v++)if(u(p[v].semver),p[v].semver!==h.ANY&&p[v].semver.prerelease.length>0){const S=p[v].semver;if(S.major===l.major&&S.minor===l.minor&&S.patch===l.patch)return!0}return!1}return!0};return De}var ye,Dr;function Y(){if(Dr)return ye;Dr=1;const r=Symbol("SemVer ANY");class i{static get ANY(){return r}constructor(e,o){if(o=t(o),e instanceof i){if(e.loose===!!o.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),u("comparator",e,o),this.options=o,this.loose=!!o.loose,this.parse(e),this.semver===r?this.value="":this.value=this.operator+this.semver.version,u("comp",this)}parse(e){const o=this.options.loose?s[a.COMPARATORLOOSE]:s[a.COMPARATOR],c=e.match(o);if(!c)throw new TypeError(`Invalid comparator: ${e}`);this.operator=c[1]!==void 0?c[1]:"",this.operator==="="&&(this.operator=""),c[2]?this.semver=new f(c[2],this.options.loose):this.semver=r}toString(){return this.value}test(e){if(u("Comparator.test",e,this.options.loose),this.semver===r||e===r)return!0;if(typeof e=="string")try{e=new f(e,this.options)}catch{return!1}return h(e,this.operator,this.semver,this.options)}intersects(e,o){if(!(e instanceof i))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new n(e.value,o).test(this.value):e.operator===""?e.value===""?!0:new n(this.value,o).test(e.semver):(o=t(o),o.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!o.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||h(this.semver,"<",e.semver,o)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||h(this.semver,">",e.semver,o)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}}ye=i;const t=ze(),{safeRe:s,t:a}=M(),h=Jr(),u=H(),f=j(),n=F();return ye}var je,yr;function z(){if(yr)return je;yr=1;const r=F();return je=(t,s,a)=>{try{s=new r(s,a)}catch{return!1}return s.test(t)},je}var Ge,jr;function dt(){if(jr)return Ge;jr=1;const r=F();return Ge=(t,s)=>new r(t,s).set.map(a=>a.map(h=>h.value).join(" ").trim().split(" ")),Ge}var be,Gr;function vt(){if(Gr)return be;Gr=1;const r=j(),i=F();return be=(s,a,h)=>{let u=null,f=null,n=null;try{n=new i(a,h)}catch{return null}return s.forEach(R=>{n.test(R)&&(!u||f.compare(R)===-1)&&(u=R,f=new r(u,h))}),u},be}var Ue,br;function It(){if(br)return Ue;br=1;const r=j(),i=F();return Ue=(s,a,h)=>{let u=null,f=null,n=null;try{n=new i(a,h)}catch{return null}return s.forEach(R=>{n.test(R)&&(!u||f.compare(R)===1)&&(u=R,f=new r(u,h))}),u},Ue}var Fe,Ur;function $t(){if(Ur)return Fe;Ur=1;const r=j(),i=F(),t=W();return Fe=(a,h)=>{a=new i(a,h);let u=new r("0.0.0");if(a.test(u)||(u=new r("0.0.0-0"),a.test(u)))return u;u=null;for(let f=0;f<a.set.length;++f){const n=a.set[f];let R=null;n.forEach(e=>{const o=new r(e.semver.version);switch(e.operator){case">":o.prerelease.length===0?o.patch++:o.prerelease.push(0),o.raw=o.format();case"":case">=":(!R||t(o,R))&&(R=o);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${e.operator}`)}}),R&&(!u||t(u,R))&&(u=R)}return u&&a.test(u)?u:null},Fe}var Ve,Fr;function Lt(){if(Fr)return Ve;Fr=1;const r=F();return Ve=(t,s)=>{try{return new r(t,s).range||"*"}catch{return null}},Ve}var xe,Vr;function er(){if(Vr)return xe;Vr=1;const r=j(),i=Y(),{ANY:t}=i,s=F(),a=z(),h=W(),u=Ze(),f=Qe(),n=Je();return xe=(e,o,c,m)=>{e=new r(e,m),o=new s(o,m);let L,E,O,P,D;switch(c){case">":L=h,E=f,O=u,P=">",D=">=";break;case"<":L=u,E=n,O=h,P="<",D="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(a(e,o,m))return!1;for(let G=0;G<o.set.length;++G){const y=o.set[G];let T=null,C=null;if(y.forEach(_=>{_.semver===t&&(_=new i(">=0.0.0")),T=T||_,C=C||_,L(_.semver,T.semver,m)?T=_:O(_.semver,C.semver,m)&&(C=_)}),T.operator===P||T.operator===D||(!C.operator||C.operator===P)&&E(e,C.semver))return!1;if(C.operator===D&&O(e,C.semver))return!1}return!0},xe}var ke,xr;function Nt(){if(xr)return ke;xr=1;const r=er();return ke=(t,s,a)=>r(t,s,">",a),ke}var Xe,kr;function St(){if(kr)return Xe;kr=1;const r=er();return Xe=(t,s,a)=>r(t,s,"<",a),Xe}var Me,Xr;function Ot(){if(Xr)return Me;Xr=1;const r=F();return Me=(t,s,a)=>(t=new r(t,a),s=new r(s,a),t.intersects(s,a)),Me}var Be,Mr;function At(){if(Mr)return Be;Mr=1;const r=z(),i=U();return Be=(t,s,a)=>{const h=[];let u=null,f=null;const n=t.sort((c,m)=>i(c,m,a));for(const c of n)r(c,s,a)?(f=c,u||(u=c)):(f&&h.push([u,f]),f=null,u=null);u&&h.push([u,null]);const R=[];for(const[c,m]of h)c===m?R.push(c):!m&&c===n[0]?R.push("*"):m?c===n[0]?R.push(`<=${m}`):R.push(`${c} - ${m}`):R.push(`>=${c}`);const e=R.join(" || "),o=typeof s.raw=="string"?s.raw:String(s);return e.length<o.length?e:s},Be}var He,Br;function Tt(){if(Br)return He;Br=1;const r=F(),i=Y(),{ANY:t}=i,s=z(),a=U(),h=(o,c,m={})=>{if(o===c)return!0;o=new r(o,m),c=new r(c,m);let L=!1;e:for(const E of o.set){for(const O of c.set){const P=n(E,O,m);if(L=L||P!==null,P)continue e}if(L)return!1}return!0},u=[new i(">=0.0.0-0")],f=[new i(">=0.0.0")],n=(o,c,m)=>{if(o===c)return!0;if(o.length===1&&o[0].semver===t){if(c.length===1&&c[0].semver===t)return!0;m.includePrerelease?o=u:o=f}if(c.length===1&&c[0].semver===t){if(m.includePrerelease)return!0;c=f}const L=new Set;let E,O;for(const N of o)N.operator===">"||N.operator===">="?E=R(E,N,m):N.operator==="<"||N.operator==="<="?O=e(O,N,m):L.add(N.semver);if(L.size>1)return null;let P;if(E&&O){if(P=a(E.semver,O.semver,m),P>0)return null;if(P===0&&(E.operator!==">="||O.operator!=="<="))return null}for(const N of L){if(E&&!s(N,String(E),m)||O&&!s(N,String(O),m))return null;for(const x of c)if(!s(N,String(x),m))return!1;return!0}let D,G,y,T,C=O&&!m.includePrerelease&&O.semver.prerelease.length?O.semver:!1,_=E&&!m.includePrerelease&&E.semver.prerelease.length?E.semver:!1;C&&C.prerelease.length===1&&O.operator==="<"&&C.prerelease[0]===0&&(C=!1);for(const N of c){if(T=T||N.operator===">"||N.operator===">=",y=y||N.operator==="<"||N.operator==="<=",E){if(_&&N.semver.prerelease&&N.semver.prerelease.length&&N.semver.major===_.major&&N.semver.minor===_.minor&&N.semver.patch===_.patch&&(_=!1),N.operator===">"||N.operator===">="){if(D=R(E,N,m),D===N&&D!==E)return!1}else if(E.operator===">="&&!N.test(E.semver))return!1}if(O){if(C&&N.semver.prerelease&&N.semver.prerelease.length&&N.semver.major===C.major&&N.semver.minor===C.minor&&N.semver.patch===C.patch&&(C=!1),N.operator==="<"||N.operator==="<="){if(G=e(O,N,m),G===N&&G!==O)return!1}else if(O.operator==="<="&&!N.test(O.semver))return!1}if(!N.operator&&(O||E)&&P!==0)return!1}return!(E&&y&&!O&&P!==0||O&&T&&!E&&P!==0||_||C)},R=(o,c,m)=>{if(!o)return c;const L=a(o.semver,c.semver,m);return L>0?o:L<0||c.operator===">"&&o.operator===">="?c:o},e=(o,c,m)=>{if(!o)return c;const L=a(o.semver,c.semver,m);return L<0?o:L>0||c.operator==="<"&&o.operator==="<="?c:o};return He=h,He}var We,Hr;function gt(){if(Hr)return We;Hr=1;const r=M(),i=X(),t=j(),s=zr(),a=V(),h=tt(),u=st(),f=nt(),n=it(),R=at(),e=ot(),o=ut(),c=ct(),m=U(),L=lt(),E=ft(),O=Ke(),P=ht(),D=Et(),G=W(),y=Ze(),T=Kr(),C=Zr(),_=Je(),N=Qe(),x=Jr(),K=pt(),Z=mt(),J=Y(),Q=F(),ee=z(),re=dt(),te=vt(),p=It(),l=$t(),I=Lt(),v=er(),S=Nt(),d=St(),$=Ot(),g=At(),A=Tt();return We={parse:a,valid:h,clean:u,inc:f,diff:n,major:R,minor:e,patch:o,prerelease:c,compare:m,rcompare:L,compareLoose:E,compareBuild:O,sort:P,rsort:D,gt:G,lt:y,eq:T,neq:C,gte:_,lte:N,cmp:x,coerce:K,truncate:Z,Comparator:J,Range:Q,satisfies:ee,toComparators:re,maxSatisfying:te,minSatisfying:p,minVersion:l,validRange:I,outside:v,gtr:S,ltr:d,intersects:$,simplifyRange:g,subset:A,SemVer:t,re:r.re,src:r.src,tokens:r.t,SEMVER_SPEC_VERSION:i.SEMVER_SPEC_VERSION,RELEASE_TYPES:i.RELEASE_TYPES,compareIdentifiers:s.compareIdentifiers,rcompareIdentifiers:s.rcompareIdentifiers},We}var Wr=gt();const wt=[{description:"Email + password on better-auth (default)",label:"Email & password",value:"auth"},{description:"Clerk-hosted auth",label:"Clerk",value:"auth-clerk"},{description:"Auth0 (OIDC)",label:"Auth0",value:"auth-auth0"}],Yr="auth",Mt=async r=>await r("Which auth provider?",wt,{default:Yr})??Yr,Bt="mail",Ht=[{description:"Next, react-router, TanStack Start, Astro islands",label:"React",value:"auth-ui-react"},{description:"Nuxt, Vue + Vite",label:"Vue",value:"auth-ui-vue"},{description:"SvelteKit, Svelte + Vite",label:"Svelte",value:"auth-ui-svelte"},{description:"TanStack Start Solid, Solid 1.x + Vite",label:"Solid",value:"auth-ui-solid"},{description:"Solid 2.0 + Vite (@solidjs/web)",label:"Solid 2",value:"auth-ui-solid-v2"},{description:"Analog",label:"Angular",value:"auth-ui-angular"}],Wt="auth-ui-react",Pt=r=>Object.hasOwn(r,"react-native")||Object.hasOwn(r,"@lunora/react-native")||Object.hasOwn(r,"expo"),Yt="auth-ui has no React Native port — the screens render DOM elements and a stylesheet, which Metro has nothing to mount. Build the screens with React Native primitives against the same better-auth client (`@lunora/react-native/auth`); `lunora add auth` still installs the server half.",Ct=r=>{if(!(r===void 0||Wr.validRange(r)===null))return Wr.minVersion(r)?.major},qt=r=>Object.hasOwn(r,"@solidjs/web")||(Ct(r["solid-js"])??0)>=2,zt=r=>{const i=t=>Object.hasOwn(r,t);if(!Pt(r)){if(qt(r))return"auth-ui-solid-v2";if(i("@lunora/react"))return"auth-ui-react";if(i("@lunora/vue"))return"auth-ui-vue";if(i("@lunora/svelte"))return"auth-ui-svelte";if(i("@lunora/solid"))return"auth-ui-solid";if(i("@lunora/angular"))return"auth-ui-angular";if(i("react")||i("next"))return"auth-ui-react";if(i("vue")||i("nuxt"))return"auth-ui-vue";if(i("svelte")||i("@sveltejs/kit"))return"auth-ui-svelte";if(i("solid-js"))return"auth-ui-solid";if(i("@angular/core"))return"auth-ui-angular"}},Kt=r=>{const i=r.trim();if(i==="")return;const t=i.toLowerCase();return t==="auth-ui"||t==="auth-ui-"?{kind:"auth-ui"}:t==="auth"?{kind:"auth"}:t==="email"||t==="mail"?{kind:"email"}:{item:t,kind:"item"}},_t=/[^a-z0-9]+/u,Qr=(r,i,t)=>{let s=r.toLowerCase().split(_t).filter(Boolean).join("-").slice(0,t);return s.endsWith("-")&&(s=s.slice(0,-1)),s.length>=i?s:void 0},Dt="DB",yt="Name your D1 database (run `wrangler d1 create` to get its id, then put it in wrangler.jsonc)",et=r=>Qr(r,1,64),jt="lunora-db",Gt=r=>et(`${r}-db`)??jt,Zt=async(r,i)=>{const t=Gt(i);return et(await r(yt,{default:t,placeholder:t}))??t},Jt=(r,i)=>Ye(r,"d1_databases",{key:"binding",value:Dt},"database_name",i),bt="SEND_EMAIL",Qt="Verified destination email for production delivery (blank = set it later in wrangler.jsonc)",Ut=r=>{const i=r.trim();if(i.length===0||i.includes(" "))return!1;const t=i.indexOf("@");if(t<=0||t!==i.lastIndexOf("@"))return!1;const s=i.slice(t+1);return s.length>=3&&s.includes(".")&&!s.startsWith(".")&&!s.endsWith(".")},es=(r,i)=>{const t=r.trim();if(t!==""){if(!Ut(t)){i(`"${t}" doesn't look like an email — leaving the placeholder; set destination_address in wrangler.jsonc.`);return}return t}},rs=(r,i)=>Ye(r,"send_email",{key:"name",value:bt},"destination_address",i),Ft="UPLOADS",Vt="Name your R2 bucket (you can rename it in wrangler.jsonc later)",rt=r=>Qr(r,3,63),xt="lunora-uploads",kt=r=>rt(`${r}-uploads`)??xt,ts=async(r,i)=>{const t=kt(i);return rt(await r(Vt,{default:t,placeholder:t}))??t},ss=(r,i)=>Ye(r,"r2_buckets",{key:"binding",value:Ft},"bucket_name",i);export{Yt as A,Yr as D,Bt as E,Qt as M,et as a,Gt as b,Zt as c,kt as d,Mt as e,zt as f,Wt as g,Ht as h,Pt as i,wt as j,rs as k,Jt as l,Kt as n,ts as p,es as r,rt as s,ss as w};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/cli",
3
- "version": "1.0.0-alpha.254",
3
+ "version": "1.0.0-alpha.255",
4
4
  "description": "The Lunora CLI: init, dev, deploy, codegen, migrate, seed, doctor, insights, logs, registry, and the rest of the project commands",
5
5
  "keywords": [
6
6
  "agent-skills",
@@ -52,16 +52,16 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "@bomb.sh/tab": "0.0.22",
55
- "@lunora/advisor": "1.0.0-alpha.136",
56
- "@lunora/bindings": "1.0.0-alpha.61",
57
- "@lunora/codegen": "1.0.0-alpha.186",
58
- "@lunora/config": "1.0.0-alpha.221",
59
- "@lunora/container": "1.0.0-alpha.50",
60
- "@lunora/d1": "1.0.0-alpha.119",
61
- "@lunora/errors": "1.0.0-alpha.37",
62
- "@lunora/mcp": "1.0.0-alpha.142",
63
- "@lunora/runtime": "1.0.0-alpha.122",
64
- "@lunora/seed": "1.0.0-alpha.131",
55
+ "@lunora/advisor": "1.0.0-alpha.137",
56
+ "@lunora/bindings": "1.0.0-alpha.62",
57
+ "@lunora/codegen": "1.0.0-alpha.187",
58
+ "@lunora/config": "1.0.0-alpha.222",
59
+ "@lunora/container": "1.0.0-alpha.51",
60
+ "@lunora/d1": "1.0.0-alpha.120",
61
+ "@lunora/errors": "1.0.0-alpha.38",
62
+ "@lunora/mcp": "1.0.0-alpha.143",
63
+ "@lunora/runtime": "1.0.0-alpha.123",
64
+ "@lunora/seed": "1.0.0-alpha.132",
65
65
  "@visulima/cerebro": "3.1.1",
66
66
  "@visulima/error": "6.1.0",
67
67
  "@visulima/fs": "6.0.7",
@@ -1,13 +0,0 @@
1
- import{existsSync as y,readFileSync as w,writeFileSync as v,mkdirSync as R,lstatSync as J}from"node:fs";import{join as g,relative as U,dirname as b}from"@visulima/path";import{EXIT_CODE as m}from"./EXIT_CODE-08cwt3MK.mjs";import{p as G,d as W,e as _,s as j,f as M,g as q,h as V,j as B,c as H,k as X}from"./resolve-ZDra033Q.mjs";import{s as d,c as Y,b as z}from"./catalog-Cbzph90w.mjs";import{findWranglerFile as Q,readWranglerJsonc as Z}from"@lunora/config/cloudflare";import{LunoraError as N}from"@lunora/errors";import{insertSchemaExtension as K}from"./insertSchemaExtension-DuiV6cba.mjs";import{createHash as ee}from"node:crypto";import{installArgsFor as re,detectPackageManager as te}from"@lunora/config";const A=1,ne=".lunora-registry.json",D=e=>g(e,"lunora",ne),se=e=>typeof e!="object"||e===null||!("items"in e)?!1:typeof e.items=="object"&&e.items!==null,x=e=>ee("sha256").update(e).digest("hex"),oe=e=>{const r=D(e);if(!y(r))return{items:{},version:A};try{const n=JSON.parse(w(r,"utf8"));if(se(n))return{items:n.items,version:A}}catch{}return{items:{},version:A}},ie=(e,r)=>{v(D(e),`${JSON.stringify(r,void 0,2)}
2
- `,"utf8")},O=(e,r,n,o)=>{const t=e.items[r]??{files:{}};e.items[r]=t,t.files[n]=x(o)},ae=(e,r,n)=>e.items[r]?.files[n],C=3,F=e=>e===""?[]:e.split(`
3
- `),ce=(e,r)=>{const n=F(e),o=F(r);let t=0;for(;t<n.length&&t<o.length&&n[t]===o[t];)t+=1;let s=n.length,i=o.length;for(;s>t&&i>t&&n[s-1]===o[i-1];)s-=1,i-=1;if(t===s&&t===i)return[];const a=[];for(let c=Math.max(0,t-C);c<t;c+=1)a.push(` ${n[c]??""}`);for(let c=t;c<s;c+=1)a.push(`- ${n[c]??""}`);for(let c=t;c<i;c+=1)a.push(`+ ${o[c]??""}`);for(let c=i;c<Math.min(o.length,i+C);c+=1)a.push(` ${o[c]??""}`);return a},de=/\.[cm]?[jt]sx?$/u,L=(e,r,n,o)=>{const t=g(e,r.from);if(J(t).isSymbolicLink())throw new N("INTERNAL",`registry item "${o}": refusing to read "${r.from}" — it is a symlink, not a regular file`);const s=w(t,"utf8");return n&&de.test(r.to)?_(s):s},ue=e=>`import { defineSchema } from "${e?"lunorash/server":"@lunora/server"}";
4
-
5
- export default defineSchema({});
6
- `,fe=(e,r,n,o,t,s,i)=>{const a=g(o,"lunora","schema.ts");if(s)return t.info(`~ would merge .extend(${r}.extension) into lunora/schema.ts (and create ${e.to} if absent)`),{kind:"skipped",path:a};const c=g(o,e.to);y(c)||(R(b(c),{recursive:!0}),v(c,L(n,e,i,r),"utf8"));const u=y(a)?w(a,"utf8"):ue(i),f=K(u,r);if(f.ok)return R(b(a),{recursive:!0}),v(a,f.text,"utf8"),t.success(`merged .extend(${r}.extension) into lunora/schema.ts`),{kind:"written",path:a};if(f.reason==="already-applied")return t.warn(`lunora/schema.ts already extends "${r}" — skipping`),{kind:"skipped",path:a};throw f.reason==="invalid-identifier"?new N("INTERNAL",`schema-extension item "${r}" is not a valid JS identifier — it is spliced into lunora/schema.ts as \`import { ${r} }\` / \`.extend(${r}.extension)\`. Rename the item to a valid identifier (no leading digit, no "-").`):new N("INTERNAL",`schema-extension merge failed for "${r}": ${f.reason}`)},le=(e,r,n,o,t)=>{const s=ce(r,n);if(s.length===0){t.info(`= ${e.to} (unchanged)`);return}t.info(`${o?"~":"+"} ${e.to}`);for(const i of s)t.info(` ${i}`)},me=(e,r,n,o,t,s,i,a)=>{const c=g(o,e.to),u=L(n,e,a,r),f=y(c),l=f?w(c,"utf8"):"",h=k=>(R(b(c),{recursive:!0}),v(c,u,"utf8"),O(s,r,e.to,u),t.success(`${k}: ${e.to}`),{kind:"written",path:c});if(i.diff)return le(e,l,u,f,t),{kind:"skipped",path:c};if(!f)return h("write");const $=x(l);if($===x(u))return O(s,r,e.to,u),t.warn(`skip (exists): ${e.to}`),{kind:"skipped",path:c};if(i.overwrite)return h("overwrite");const p=ae(s,r,e.to);return p===void 0?(t.warn(`skip (exists, untracked): ${e.to} — refusing to overwrite a file lunora didn't add (use --overwrite to force)`),{kind:"skipped",path:c}):p===$?h("update"):p===x(u)?(t.warn(`skip (locally edited): ${e.to}`),{kind:"skipped",path:c}):(v(`${c}.new`,u,"utf8"),t.warn(`conflict: ${e.to} has local edits and an upstream update — wrote ${e.to}.new (use --overwrite to take theirs)`),{kind:"skipped",path:c})},pe=(e,r,n,o,t,s,i={},a=!1)=>e.merge==="schema-extension"?fe(e,r,n,o,t,i.diff===!0,a):me(e,r,n,o,t,s,i,a),P=["src/server.ts","src/server/index.ts","src/server/index.tsx","src/index.ts","src/worker.ts"],he=e=>{const r=Q(e);if(r===void 0)return;const{parsed:n}=Z(r);return typeof n?.main=="string"?n.main:void 0},ge=e=>{const r=he(e),n=r===void 0?P:[r,...P];for(const o of n){const t=g(e,o);if(!y(t))continue;const s=w(t,"utf8");if(!s.includes("createShardDO(")){if(o===r)break;continue}return{entryPath:t,main:o,source:s}}},$e=(e,r,n)=>{const o=U(b(e),g(r,"lunora",n)).replaceAll("\\","/");return o.startsWith(".")?o:`./${o}`},ye=(e,r)=>{for(const n of e){const t=`Add \`export * from "${`./lunora/${n.module}.js`}"\` to your worker entry`,s=n.comment?` (${n.comment})`:"";r.warn(`${t}${s}`)}return 0},ve=(e,r,n,o)=>{const t=[];for(const s of e){const i=$e(r,n,s.module),a=i.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`);new RegExp(String.raw`export\s+\*\s+from\s+["']${a}\.js["']`,"u").test(o)||(s.comment&&t.push(`
7
- // ${s.comment}`),t.push(`export * from "${i}.js";`))}return t},we=(e,r,n,o)=>{if(e.length===0)return 0;const t=ge(r);if(t===void 0)return ye(e,n);const s=ve(e,t.entryPath,r,t.source);if(s.length===0)return 0;if(o){for(const a of s)a!==""&&n.info(`~ entrypoint: ${a}`);return s.length}const i=t.source.endsWith(`
8
- `)?"":`
9
- `;return v(t.entryPath,`${t.source}${i}${s.join(`
10
- `)}
11
- `,"utf8"),n.success(`wrote ${String(s.length)} entrypoint re-export(s) to ${U(r,t.entryPath)}`),s.length},I=(e,r,n,o={})=>{const t=[],s=[],i=[],a=[],c=oe(r),u=G(r);try{for(const{directory:f,manifest:l}of e){for(const $ of l.files){const p=pe($,l.name,f,r,n,c,o,u);(p.kind==="written"?t:s).push(p.path)}if(l.entrypointReexports!==void 0&&we(l.entrypointReexports,r,n,o.diff===!0),o.diff)continue;const h=W(l,r,n,u);i.push(...h.deps),a.push(...h.bindings)}}finally{!o.diff&&Object.keys(c.items).length>0&&ie(r,c)}return{bindings:a,deps:i,skipped:s,written:t}},E=()=>({bindings:[],code:0,deps:[],skipped:[],written:[]}),Ie=(e,r,n,o,t)=>e.bindings?{...e,bindings:e.bindings.map(s=>{if(s.path[0]!==r||!Array.isArray(s.value))return s;const i=s.value;return{...s,value:i.map(a=>typeof a=="object"&&a!==null&&a[n.key]===n.value?{...a,[o]:t}:a)}})}:e,T=(e,r)=>{const n=r.title??r.description;e.info(`plan: ${d(r.name)}${n?` — ${d(n)}`:""}`);for(const s of r.files)e.info(` file ${d(s.to)} (${d(s.merge)})`);const o=new Map,t=s=>{const i=o.get(s);if(i!==void 0)return i;const a=B(s);return o.set(s,a),a};for(const[s,i]of Object.entries(r.deps??{}))e.info(` dep ${d(s)}@${d(t(i))}`);for(const[s,i]of Object.entries(r.devDependencies??{}))e.info(` dev ${d(s)}@${d(t(i))}`);for(const s of r.bindings??[])e.info(` bind ${d(s.path.join("."))} = ${d(JSON.stringify(s.value))}`);for(const s of r.envVars??[]){const i=s.secret?" (secret)":` = ${d(JSON.stringify(s.value??""))}`;e.info(` env ${d(s.name)}${i}`)}for(const s of r.entrypointReexports??[]){const i=`./lunora/${d(s.module)}`,a=s.comment?` // ${d(s.comment)}`:"";e.info(` entry ${i}${a}`)}},ke=e=>e.map(({manifest:r})=>({bindings:(r.bindings??[]).map(n=>({path:n.path.join("."),value:n.value})),deps:Object.keys(r.deps??{}),devDependencies:Object.keys(r.devDependencies??{}),entrypointReexports:(r.entrypointReexports??[]).map(n=>({module:n.module,...n.comment?{comment:n.comment}:{}})),envVars:(r.envVars??[]).map(n=>({name:n.name,...n.secret?{secret:!0}:{value:n.value??""}})),files:r.files.map(n=>({merge:n.merge,to:n.to})),name:r.name,requires:r.requires??[],title:r.title})),Se=e=>{try{const{args:r,command:n}=re(te(e));return`${n} ${r.join(" ")}`}catch{return"<your-package-manager> install"}},xe=(e,r,n,o,t,s)=>{t.success(`add complete: ${String(n)} written, ${String(o)} skipped`),t.info("next steps:"),t.info(" lunora codegen # regenerate _generated/ so the new tables/functions appear"),r.length>0&&t.info(` ${Se(s)} # install newly-added dependencies`);for(const{manifest:i}of e)i.docs&&t.info(`${d(i.name)}: ${d(i.docs)}`)},be=async e=>{const r=E(),n=j("list",e);if(n)return e.logger.error(n),{...r,code:m.USAGE,error:n};const{logger:o}=e;let t=()=>{};try{const s=await V(e);t=s.cleanup;const i=Y(s.root);if(e.format==="json")return{...r,data:{items:i}};o.info(`available registry items (${String(i.length)}):`);for(const a of i)o.info(` ${a.name}${a.description?` — ${a.description}`:""}`);return r}catch(s){const i=d(`list failed: ${s instanceof Error?s.message:String(s)}`);return o.error(i),{...r,code:1,error:i}}finally{t()}},Ue=async e=>{const r=e.cwd??process.cwd(),n=E();if(e.list)return be(e);const{logger:o}=e;if(e.names.length===0){const i="add requires at least one item name. Usage: lunora registry add <name> [...names]";return o.error(i),{...n,code:m.USAGE,error:i}}const t=j("add",e);if(t)return o.error(t),{...n,code:m.USAGE,error:t};let s=[];try{const{cleanups:i,items:a}=await M(e.names,e);s=i;const{transformManifest:c}=e,u=c?a.map(S=>({...S,manifest:c(S.manifest)})):a;for(const{manifest:S}of u)T(o,S);const f={items:ke(u)};if(e.dryRun)return o.info("dry-run: stopping before any files are written"),{...n,data:f};if(e.diff)return I(u,r,o,{diff:!0}),o.info("diff: preview only — re-run without --diff to apply"),{...n,data:f};const l=await q(u,e);if(!l.ok)return l.reason==="declined"?{...n,code:m.CANCELLED,data:f,error:"registry add: the package.json change was declined"}:{...n,code:m.USAGE,data:f,error:"registry add: stdin is not a TTY — re-run with --yes to confirm"};const{bindings:h,deps:$,skipped:p,written:k}=I(u,r,o,{overwrite:e.overwrite});return xe(u,$,k.length,p.length,o,r),{bindings:h,code:0,data:f,deps:$,skipped:p,written:k}}catch(i){const a=d(`add failed: ${i instanceof Error?i.message:String(i)}`);return o.error(a),{...n,code:1,error:a}}finally{for(const i of s)i()}},De=async e=>{const r=E();if(e.names.length===0){const t="view requires an item name. Usage: lunora registry view <name>";return e.logger.error(t),{...r,code:m.USAGE,error:t}}const n=j("view",e);if(n)return e.logger.error(n),{...r,code:m.USAGE,error:n};const o=[];try{for(const t of e.names){const{cleanup:s,directory:i}=await H(t,e);o.push(s);const a=X(i,t);T(e.logger,a);for(const c of a.files){e.logger.info(`--- ${d(c.to)} (${d(c.merge)}) ---`);const u=L(i,c,!1,t);for(const f of u.split(`
12
- `))e.logger.info(d(f))}}return r}catch(t){return e.logger.error(d(`view failed: ${t instanceof Error?t.message:String(t)}`)),{...r,code:1}}finally{for(const t of o)t()}},Te=async e=>{const r=E(),n=e.from;if(n===void 0){const s="registry build requires --from <registry root>";return e.logger.error(s),{...r,code:m.USAGE,error:s}}if(!y(n)){const s=`registry root not found: ${n}`;return e.logger.error(s),{...r,code:m.NOT_FOUND,error:s}}const o=z(n),t=e.out??g(n,"index.json");if(e.check){const s=y(t)?JSON.parse(w(t,"utf8")):{items:[]};if(JSON.stringify(s.items??[])!==JSON.stringify(o.items)){const a=`registry: ${t} is stale — run \`lunora registry build\` to regenerate it`;return e.logger.error(a),{...r,code:m.USAGE,error:a}}return e.logger.success(`registry: ${t} is up to date (${String(o.items.length)} items)`),r}return v(t,`${JSON.stringify({$schema:"./schema/registry.schema.json",...o},void 0,4)}
13
- `,"utf8"),e.logger.success(`registry: wrote ${t} (${String(o.items.length)} items)`),r};export{Te as a,De as b,Ue as r,Ie as s};
@@ -1,5 +0,0 @@
1
- import{existsSync as l,readFileSync as p,writeFileSync as k,mkdtempSync as F,rmSync as w}from"node:fs";import{tmpdir as G}from"node:os";import{LunoraError as h}from"@lunora/errors";import{dirname as S,join as f}from"@visulima/path";import{downloadTemplate as M}from"giget";import{fileURLToPath as J}from"node:url";import{DEV_VARS_FILE as W,parseDevVariableEntries as z,writeDevVariablesFileAtomically as H}from"@lunora/config";import{modify as N,applyEdits as T,parse as K}from"jsonc-parser";import{b as q}from"./tui-prompts-B3YwUhGw.mjs";import Y from"./parseManifest-CwPTKdtS.mjs";const Z="alpha",O="main",X=new Set(["alpha","beta","next"]),Q=/^[\w./@-]+$/,ee=e=>!e.includes("..")&&Q.test(e),y=()=>{try{let e=S(J(import.meta.url));for(let t=0;t<6;t+=1){const n=f(e,"package.json");if(l(n)){const r=JSON.parse(p(n,"utf8"));if(r.name==="@lunora/cli"&&typeof r.version=="string")return r.version}const s=S(e);if(s===e)break;e=s}}catch{}return"0.0.0"},D=e=>{if(e==="0.0.0")return Z;const t=e.split("+")[0]??e,n=t.indexOf("-");if(n!==-1){const[s]=t.slice(n+1).split(".");if(s!==void 0&&X.has(s))return s}return O},I=e=>{if(e!==void 0&&e.length>0){if(!ee(e))throw new h("INTERNAL",`invalid --ref "${e}" — a ref may contain letters, digits, ".", "_", "-", "/", "@" and must not contain "..".`);return e}return D(y())},L="anolilab/lunora",B=/^[0-9a-f]{40}$/iu,P=String.raw`\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)+)?(?:\+[0-9A-Za-z.-]+)?`,te=new RegExp(String.raw`^v?${P}$`,"u"),ne=new RegExp(String.raw`^(?:@[\w.-]+\/)?[\w.-]+@${P}$`,"u"),se=e=>B.test(e)||te.test(e)||ne.test(e),re=()=>{const e=process.env.GITHUB_TOKEN??process.env.GH_TOKEN;return e!==void 0&&e.length>0?{authorization:`Bearer ${e}`}:{}},oe=async(e,t=L)=>{try{const n=await fetch(`https://api.github.com/repos/${t}/commits/${encodeURIComponent(e)}`,{headers:{accept:"application/vnd.github+json","user-agent":"lunora-cli",...re()},signal:AbortSignal.timeout(1e4)});if(!n.ok)return;const s=await n.json();return typeof s.sha=="string"&&B.test(s.sha)?s.sha:void 0}catch{return}},ie=async(e,t,n)=>{if(se(t))return t;const s=await oe(t,e);return s===void 0?(n.warn(`could not pin ${e}#${t} to a commit — fetching the UNPINNED branch (set GITHUB_TOKEN if rate-limited).`),t):(n.info(`pinned ${e}#${t} → ${s}`),s)},ae=async(e,t)=>ie(L,I(e),t),Ce=(e=y())=>`@lunora/cli@${e}`,ce="latest",ue=(e=y())=>{const t=D(e);return t===O?ce:t},de="https://registry.npmjs.org",fe=()=>{const e=process.env.npm_config_registry,t=e!==void 0&&e.length>0?e:de;return t.endsWith("/")?t.slice(0,-1):t},le=async(e,t)=>{try{const n=await fetch(`${fe()}/${e.replaceAll("/","%2F")}`,{headers:{accept:"application/vnd.npm.install-v1+json"},signal:AbortSignal.timeout(1e4)});return n.ok?(await n.json())["dist-tags"]?.[t]:void 0}catch{return}},xe=async(e,t)=>{const n=new Map;return await Promise.all([...new Set(e)].map(async s=>{const r=await le(s,t);r!==void 0&&n.set(s,r)})),n},pe=e=>{if(!e.startsWith("workspace:"))return e;const t=e.slice(10);return t===""||t==="*"||t==="^"||t==="~"?ue():t},he=new Set(["@lunora/client","@lunora/do","@lunora/ratelimit","@lunora/runtime","@lunora/server","@lunora/values"]),me=/(['"])@lunora\/(client|do|ratelimit|runtime|server|values)(\/[^'"]*)?\1/gu,Fe=e=>{const t=f(e,"package.json");if(!l(t))return!1;try{const n=JSON.parse(p(t,"utf8"));return n.dependencies?.lunorash!==void 0||n.devDependencies?.lunorash!==void 0}catch{return!1}},Ge=e=>e.replaceAll(me,(t,n,s,r)=>`${n}lunorash/${s}${r??""}${n}`),$=(e,t,n,s="dependencies",r=!1)=>{const o=Object.entries(e);if(o.length===0)return[];const a=f(t,"package.json");if(!l(a))return n.warn(`package.json not found at ${a} — skipping dependency updates`),[];let i=p(a,"utf8");const u=JSON.parse(i),c=[];for(const[d,m]of o){if(r&&he.has(d)){n.info(`dep provided by the lunorash umbrella, skipping: ${d}`);continue}if(u.dependencies?.[d]!==void 0||u.devDependencies?.[d]!==void 0){n.info(`dep already present: ${d}`);continue}const x=N(i,[s,d],pe(m),{formattingOptions:{insertSpaces:!0,tabSize:4}});i=T(i,x),c.push(d)}return c.length>0&&(k(a,i,"utf8"),n.success(`added ${String(c.length)} ${s==="devDependencies"?"devDependency(ies)":"dependency(ies)"} to package.json: ${c.join(", ")}`)),c},ge=(e,t,n)=>{if(e.length===0)return[];const s=f(t,W),r=l(s)?p(s,"utf8"):"",o=new Set(z(r).map(c=>c.key)),a=[],i=[],u=[];for(const c of e)c.secret&&i.push(c.name),!o.has(c.name)&&(c.description&&u.push(`# ${c.description}`),u.push(`${c.name}=${c.secret?"":c.value??""}`),a.push(c.name));if(a.length>0){const c=r===""||r.endsWith(`
2
- `)?r:`${r}
3
- `;H(s,`${c}${u.join(`
4
- `)}
5
- `),n.success(`scaffolded ${String(a.length)} env var(s) into .dev.vars: ${a.join(", ")}`)}return i.length>0&&n.info(`set secret value(s) locally in .dev.vars, then for production: ${i.map(c=>`wrangler secret put ${c}`).join("; ")}`),a},E=new Set(["ai","analytics_engine_datasets","browser","d1_databases","durable_objects","hyperdrive","kv_namespaces","mtls_certificates","queues","r2_buckets","send_email","services","vars","vectorize","version_metadata","workflows"]),ye=["binding","name","queue","pattern"],b=e=>{if(!(typeof e!="object"||e===null))for(const t of ye){const n=e[t];if(typeof n=="string"&&n.length>0)return`${t}:${n}`}},ve=(e,t,n,s)=>{const r=new Set(e.map(i=>JSON.stringify(i))),o=new Set(e.map(i=>b(i)).filter(i=>i!==void 0)),a=[];for(const i of t){if(r.has(JSON.stringify(i)))continue;const u=b(i);if(u!==void 0&&o.has(u)){s.warn(`${u.replace(":"," ")} already exists in ${n} — keeping the project's entry and skipping the registry item's. Reconcile by hand if the item needs different settings.`);continue}u!==void 0&&o.add(u),a.push(i)}return a},R=e=>Array.isArray(e),_=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),we=(e,t,n,s)=>{const r={};for(const[o,a]of Object.entries(t)){if(!Object.hasOwn(e,o)){r[o]=a;continue}JSON.stringify(e[o])!==JSON.stringify(a)&&s.warn(`${o} already exists in ${n} — keeping the project's value and skipping the registry item's. Reconcile by hand if the item needs different settings.`)}return r},Se=(e,t)=>{let n=K(e);for(const s of t){if(typeof n!="object"||n===null)return;n=n[s]}return n},$e=(e,t)=>{const n=e[0];return n!==void 0&&E.has(n)?!0:(t.warn(`skipping binding "${e.join(".")}" — only resource bindings (${[...E].join(", ")}) may be written, not exec/entrypoint keys`),!1)},g=Symbol("skip-binding"),Ee=(e,t,n)=>{const{value:s}=t,r=t.path.join("."),o=Se(e,t.path);if(R(s)){if(!R(o))return s;const a=ve(o,s,r,n);return a.length===0?g:[...o,...a]}if(_(s)){if(!_(o))return s;const a=we(o,s,r,n);return Object.keys(a).length===0?g:{...o,...a}}return s},be=(e,t,n)=>{if(e.length===0)return[];const r=["wrangler.jsonc","wrangler.json"].map(i=>f(t,i)).find(i=>l(i));if(!r)return n.warn("wrangler.jsonc not found — skipping binding updates"),[];let o=p(r,"utf8");const a=[];for(const i of e){if(!$e(i.path,n))continue;const u=Ee(o,i,n);if(u===g)continue;const c=N(o,[...i.path],u,{formattingOptions:{insertSpaces:!0,tabSize:4}});c.length!==0&&(o=T(o,c),a.push(i.path.join(".")))}return a.length>0&&(k(r,o,"utf8"),n.success(`applied ${String(a.length)} binding(s) to ${r}: ${a.join(", ")}`)),a},Me=(e,t,n,s=!1)=>{const r=[],o=[];return e.deps&&r.push(...$(e.deps,t,n,"dependencies",s)),e.devDependencies&&r.push(...$(e.devDependencies,t,n,"devDependencies",s)),e.bindings&&o.push(...be(e.bindings,t,n)),e.envVars&&ge(e.envVars,t,n),{bindings:o,deps:r}},v=e=>e.source!==void 0&&e.source.length>0||e.from!==void 0&&e.from.length>0,Je=async(e,t)=>{const n=e.some(({manifest:c})=>Object.keys(c.deps??{}).length>0||Object.keys(c.devDependencies??{}).length>0),s=e.some(({manifest:c})=>(c.bindings??[]).length>0),r=v(t);if(!n&&!s&&!r||t.yes)return{ok:!0};const o=[];n&&o.push("add dependencies to package.json"),s&&o.push("write wrangler.jsonc bindings"),r&&o.push(`come from a custom registry source (${String(t.from??t.source)})`);const a=o.join(", ");return!process.stdin.isTTY&&t.confirm===void 0?(t.logger.error(`add: stdin is not a TTY and the requested items ${a} — re-run with --yes to confirm`),{ok:!1,reason:"non-interactive"}):await(t.confirm??q)(`The requested items ${a}. Continue?`)?{ok:!0}:(t.logger.info("add: aborted"),{ok:!1,reason:"declined"})},U="gh:anolilab/lunora/registry",A=/^[A-Za-z0-9][\w-]*$/u,Re=e=>{if(!A.test(e))throw new h("INTERNAL",`invalid registry item name "${e}" — names must match ${A.source} (letters, digits, "-", "_"; no path separators or "..")`)},_e=e=>e.includes("..")?!1:e.startsWith("gh:")||e.startsWith("github:")||e.startsWith("https://"),Ae=e=>v(e)&&e.from===void 0&&!e.allowUnsafeSource&&!_e(e.source??""),We=(e,t)=>Ae(t)?`${e}: refusing --source ${String(t.source)} — only gh:, github:, or https:// sources are allowed (and may not contain ".."). Re-run with --allow-unsafe-source if you really want this.`:void 0,V=async(e,t,n)=>{const s=F(f(G(),`lunora-${t}-fetch-`)),r=f(s,t);n.info(`fetching ${e}`);try{const o=await M(e,{cwd:s,dir:r,force:!0,install:!1,silent:!0});return n.info(o.commit?`resolved ${o.source} @ ${o.commit}`:`resolved ${o.source}`),{cleanup:()=>{w(s,{force:!0,recursive:!0})},directory:r}}catch(o){throw w(s,{force:!0,recursive:!0}),o}},j=new WeakMap,C=async e=>{const t=j.get(e);if(t!==void 0)return t;const n=v(e)?Promise.resolve(I(e.ref)):ae(e.ref,e.logger);return j.set(e,n),n},je=async(e,t,n=U)=>{if(Re(e),t.from!==void 0){const r=f(t.from,e);if(!l(r))throw new h("INTERNAL",`registry item not found in local source: ${r}`);return{cleanup:()=>{},directory:r}}const s=t.source??n;return V(`${s}/${e}#${await C(t)}`,"item",t.logger)},ze=async e=>{if(e.from!==void 0){if(!l(e.from))throw new h("INTERNAL",`registry root not found: ${e.from}`);return{cleanup:()=>{},root:e.from}}const t=e.source??U,{cleanup:n,directory:s}=await V(`${t}#${await C(e)}`,"registry",e.logger);return{cleanup:n,root:s}},ke=(e,t)=>{const n=JSON.parse(p(f(e,"registry.json"),"utf8"));return Y(n,t)},He=async(e,t)=>{const n=[],s=[],r=new Set,o=new Set,a=async i=>{if(r.has(i))return;if(o.has(i))throw new h("INTERNAL",`cyclic registry dependency detected at "${i}"`);o.add(i);const{cleanup:u,directory:c}=await je(i,t);s.push(u);const d=ke(c,i);for(const m of d.requires??[])await a(m);o.delete(i),r.add(i),n.push({directory:c,manifest:d})};try{for(const i of e)await a(i)}catch(i){for(const u of s)u();throw i}return{cleanups:s,items:n}};export{y as a,ae as b,je as c,Me as d,Ge as e,He as f,Je as g,ze as h,v as i,pe as j,ke as k,xe as l,ie as m,ue as n,I as o,Fe as p,Ce as r,We as s};
@@ -1 +0,0 @@
1
- import"./EXIT_CODE-08cwt3MK.mjs";import"./resolve-ZDra033Q.mjs";import"./catalog-Cbzph90w.mjs";import{r as n,a as i,b as t}from"./commands-DpKPubLi.mjs";export{n as runAddCommand,i as runBuildIndexCommand,t as runRegistryViewCommand};