vibingbase 0.12.39 → 0.12.40

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.
@@ -21,4 +21,5 @@ out
21
21
  .vercel
22
22
  target
23
23
  gen
24
+ *.zip
24
25
  *.db
@@ -3122,9 +3122,9 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
3122
3122
 
3123
3123
  [[package]]
3124
3124
  name = "reqwest"
3125
- version = "0.12.26"
3125
+ version = "0.12.28"
3126
3126
  source = "registry+https://github.com/rust-lang/crates.io-index"
3127
- checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f"
3127
+ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
3128
3128
  dependencies = [
3129
3129
  "base64 0.22.1",
3130
3130
  "bytes",
@@ -3409,9 +3409,9 @@ dependencies = [
3409
3409
 
3410
3410
  [[package]]
3411
3411
  name = "serde_json"
3412
- version = "1.0.145"
3412
+ version = "1.0.146"
3413
3413
  source = "registry+https://github.com/rust-lang/crates.io-index"
3414
- checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
3414
+ checksum = "217ca874ae0207aac254aa02c957ded05585a90892cc8d87f9e5fa49669dadd8"
3415
3415
  dependencies = [
3416
3416
  "itoa",
3417
3417
  "memchr",
@@ -21,4 +21,5 @@ out
21
21
  .vercel
22
22
  target
23
23
  gen
24
+ *.zip
24
25
  *.db
@@ -3122,9 +3122,9 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
3122
3122
 
3123
3123
  [[package]]
3124
3124
  name = "reqwest"
3125
- version = "0.12.26"
3125
+ version = "0.12.28"
3126
3126
  source = "registry+https://github.com/rust-lang/crates.io-index"
3127
- checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f"
3127
+ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
3128
3128
  dependencies = [
3129
3129
  "base64 0.22.1",
3130
3130
  "bytes",
@@ -3409,9 +3409,9 @@ dependencies = [
3409
3409
 
3410
3410
  [[package]]
3411
3411
  name = "serde_json"
3412
- version = "1.0.145"
3412
+ version = "1.0.146"
3413
3413
  source = "registry+https://github.com/rust-lang/crates.io-index"
3414
- checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
3414
+ checksum = "217ca874ae0207aac254aa02c957ded05585a90892cc8d87f9e5fa49669dadd8"
3415
3415
  dependencies = [
3416
3416
  "itoa",
3417
3417
  "memchr",
package/dist/index.js CHANGED
@@ -1,7 +1,5 @@
1
- import{Command as Et}from"commander";import*as i from"@clack/prompts";import{capitalCase as ht}from"change-case";import{existsSync as wt}from"node:fs";import{rm as bt}from"node:fs/promises";import S from"node:path";import yt from"picocolors";var k="Create a new Vibingbase app";function M(){let t=process.env.npm_config_user_agent??"";return t.startsWith("pnpm")?"pnpm":t.startsWith("yarn")?"yarn":t.startsWith("bun")?"bun":"npm"}import{exec as nt}from"node:child_process";import{promisify as at}from"node:util";var h=at(nt);import*as L from"@clack/prompts";var u="Thanks for using Vibingbase!";function m(){L.outro(u),process.exit(0)}import{customAlphabet as st}from"nanoid";var mt="0123456789abcdefghijklmnopqrstuvwxyz",R=st(mt);function pt(t){switch(t){case"install":case"start":return!1;default:return!0}}function U(t,o){let e=t==="npm"&&pt(o)?`run ${o}`:o;return`${t} ${e}`}function z(t){switch(t){case"npm":return"npx";case"pnpm":return"pnpm exec";case"yarn":return"yarn";case"bun":return"bunx"}}import ct from"ejs";import{copyFile as ut,mkdir as lt,readdir as ft,readFile as dt,writeFile as gt}from"node:fs/promises";import _ from"node:path";var W=".template";async function D(t,o,e){await lt(o,{recursive:!0});let n=await ft(t,{withFileTypes:!0});await Promise.all(n.map(async r=>{let a=r.name.endsWith(W),f=_.join(t,r.name),c=_.join(o,a?r.name.slice(0,-W.length):r.name);if(r.isDirectory())await D(f,c,e);else if(a){let d=await dt(f,"utf8");await gt(c,ct.render(d,e))}else await ut(f,c)}))}function G(t){if(!t)return"App name is required";if(t.includes(" "))return"No double spaces allowed"}function H(t){if(!t)return"Directory name is required"}var J=process.env.NODE_ENV==="production"?"https://www.vibingbase.com":"http://localhost:59971";async function q(){i.intro(yt.bold(k));let t="my-app",o=await i.text({message:"Directory name:",placeholder:t,defaultValue:t,initialValue:t,validate:H});i.isCancel(o)&&m();let e=o.trim(),n=S.isAbsolute(e)?e:S.join(process.cwd(),e);if(wt(n)){let E=await i.confirm({message:"Overwrite existing directory?",initialValue:!1});(i.isCancel(E)||!E)&&m(),await bt(n,{recursive:!0,force:!0})}let r=ht(S.basename(e)),a=await i.text({message:"App name:",placeholder:r,defaultValue:r,initialValue:r,validate:G});i.isCancel(a)&&m();let f=a.trim(),c=await i.confirm({message:"Use Tailwind CSS?",initialValue:!0});i.isCancel(c)&&m();let d=await i.select({message:"Package manager:",initialValue:M(),options:[{value:"npm",label:"npm"},{value:"pnpm",label:"pnpm"},{value:"yarn",label:"yarn"},{value:"bun",label:"bun"}]});i.isCancel(d)&&m();let g=i.spinner();g.start("Generating project files..."),await D(S.join(import.meta.dirname,"..","assets",c?"tailwind":"default"),n,{websiteURL:J,name:f,id:R(),version:"1.0.0",exec:z(d)}),g.stop("Generated project files!"),g.start(`Installing ${d} dependencies...`),await h(`${d} install`,{cwd:n}),g.stop(`Installed ${d} dependencies!`),g.start("Installing cargo dependencies..."),await h("cargo fetch",{cwd:S.join(n,"src-tauri")}),g.stop("Installed cargo dependencies!"),g.start("Initializing Git..."),await h("git init",{cwd:n}),await h("git add .",{cwd:n}),await h('git commit -m "Initialize repository with Vibingbase CLI"',{cwd:n}),g.stop("Initialized Git!"),i.note(`cd ${e}
2
- ${U(d,"dev")}`,"Next steps"),i.outro(u)}import*as p from"@clack/prompts";import Ot from"picocolors";import{createAuthClient as Pt}from"better-auth/client";import{adminClient as At,organizationClient as Tt}from"better-auth/client/plugins";var B=process.env.NODE_ENV==="production"?"https://api.vibingbase.com":"http://localhost:23588";import{readFile as vt}from"node:fs/promises";import kt from"node:path";import{homedir as xt}from"node:os";import St from"node:path";var v=St.join(xt(),".vibingbase");var w=kt.join(v,"auth.json");import{z as Y}from"zod";var C=Y.object({token:Y.string().nullish()});async function I(){try{let t=await vt(w,"utf8");return C.parse(JSON.parse(t))}catch{return{}}}async function K(){return((await I()).token??"")||void 0}import{mkdir as Ct,writeFile as It}from"node:fs/promises";async function Q(t){await Ct(v,{recursive:!0}),await It(w,JSON.stringify(t))}async function P(t){let o=await I();await Q({...o,token:t})}var l=Pt({baseURL:B,basePath:"/v1/auth",plugins:[At(),Tt()],fetchOptions:{throw:!0,auth:{type:"Bearer",token:K},onSuccess:async({response:t})=>{let o=t.headers.get("set-auth-token");o&&await P(o)}}});import{rm as Nt}from"node:fs/promises";async function A(){await Nt(w,{force:!0})}var T="Sign in to your Vibingbase account";import*as ot from"@clack/prompts";import jt from"open";var X=process.env.NODE_ENV==="production"?"https://app.vibingbase.com":"http://localhost:1420";import*as Z from"@clack/prompts";function N(t){Z.note(`
1
+ import{Command as ao}from"commander";import*as n from"@clack/prompts";import{capitalCase as At}from"change-case";import{existsSync as jt}from"node:fs";import{rm as Lt}from"node:fs/promises";import A from"node:path";import $t from"picocolors";var L="Create a new Vibingbase app";function B(){let t=process.env.npm_config_user_agent??"";return t.startsWith("pnpm")?"pnpm":t.startsWith("yarn")?"yarn":t.startsWith("bun")?"bun":"npm"}import{exec as ht}from"node:child_process";import{promisify as wt}from"node:util";var y=wt(ht);import*as J from"@clack/prompts";var p="Thanks for using Vibingbase!";function c(){J.outro(p),process.exit(0)}import{customAlphabet as bt}from"nanoid";var yt="0123456789abcdefghijklmnopqrstuvwxyz",Y=bt(yt);function xt(t){switch(t){case"install":case"start":return!1;default:return!0}}function H(t,o){let e=t==="npm"&&xt(o)?`run ${o}`:o;return`${t} ${e}`}function Z(t){switch(t){case"npm":return"npx";case"pnpm":return"pnpm exec";case"yarn":return"yarn";case"bun":return"bunx"}}import kt from"ejs";import{copyFile as vt,mkdir as St,readdir as Ct,readFile as Pt,writeFile as It}from"node:fs/promises";import K from"node:path";var Q=".template";async function q(t,o,e){await St(o,{recursive:!0});let i=await Ct(t,{withFileTypes:!0});await Promise.all(i.map(async r=>{let a=r.name.endsWith(Q),s=K.join(t,r.name),g=K.join(o,a?r.name.slice(0,-Q.length):r.name);if(r.isDirectory())await q(s,g,e);else if(a){let u=await Pt(s,"utf8");await It(g,kt.render(u,e))}else await vt(s,g)}))}function X(t){if(!t)return"App name is required";if(t.includes(" "))return"No double spaces allowed"}function tt(t){if(!t)return"Directory name is required"}var ot="https://www.vibingbase.com";async function et(t){n.intro($t.bold(L));let o="my-app",e=await n.text({message:"Directory name:",placeholder:o,defaultValue:o,initialValue:o,validate:tt});n.isCancel(e)&&c();let i=e.trim(),r=A.isAbsolute(i)?i:A.join(t.cwd,i);if(jt(r)){let W=await n.confirm({message:"Overwrite existing directory?",initialValue:!1});(n.isCancel(W)||!W)&&c(),await Lt(r,{recursive:!0,force:!0})}let a=At(A.basename(i)),s=await n.text({message:"App name:",placeholder:a,defaultValue:a,initialValue:a,validate:X});n.isCancel(s)&&c();let g=s.trim(),u=await n.confirm({message:"Use Tailwind CSS?",initialValue:!0});n.isCancel(u)&&c();let h=await n.select({message:"Package manager:",initialValue:B(),options:[{value:"npm",label:"npm"},{value:"pnpm",label:"pnpm"},{value:"yarn",label:"yarn"},{value:"bun",label:"bun"}]});n.isCancel(h)&&c();let f=n.spinner();f.start("Generating project files..."),await q(A.join(import.meta.dirname,"..","assets",u?"tailwind":"default"),r,{websiteURL:ot,name:g,id:Y(),version:"1.0.0",exec:Z(h)}),f.stop("Generated project files!"),f.start(`Installing ${h} dependencies...`),await y(`${h} install`,{cwd:r}),f.stop(`Installed ${h} dependencies!`),f.start("Installing cargo dependencies..."),await y("cargo fetch",{cwd:A.join(r,"src-tauri")}),f.stop("Installed cargo dependencies!"),f.start("Initializing Git..."),await y("git init",{cwd:r}),await y("git add .",{cwd:r}),await y('git commit -m "Initialize repository with Vibingbase CLI"',{cwd:r}),f.stop("Initialized Git!"),n.note(`cd ${i}
2
+ ${H(h,"dev")}`,"Next steps"),n.outro(p)}import*as l from"@clack/prompts";import Gt from"picocolors";import{createAuthClient as Ut}from"better-auth/client";import{adminClient as _t,organizationClient as Nt}from"better-auth/client/plugins";var rt="https://api.vibingbase.com";import{readFile as zt}from"node:fs/promises";import Vt from"node:path";import{homedir as Tt}from"node:os";import Ft from"node:path";var $=Ft.join(Tt(),".vibingbase");var x=Vt.join($,"auth.json");import{z as it}from"zod";var nt=it.object({token:it.string().nullish()});async function T(){try{let t=await zt(x,"utf8");return nt.parse(JSON.parse(t))}catch{return{}}}async function at(){return((await T()).token??"")||void 0}import{mkdir as Mt,writeFile as Rt}from"node:fs/promises";async function st(t){await Mt($,{recursive:!0}),await Rt(x,JSON.stringify(t))}async function F(t){let o=await T();await st({...o,token:t})}var d=Ut({baseURL:rt,basePath:"/v1/auth",plugins:[_t(),Nt()],fetchOptions:{throw:!0,auth:{type:"Bearer",token:at},onSuccess:async({response:t})=>{let o=t.headers.get("set-auth-token");o&&await F(o)}}});import{rm as Ot}from"node:fs/promises";async function V(){await Ot(x,{force:!0})}var z="Sign in to your Vibingbase account";import*as mt from"@clack/prompts";import{createServer as Dt}from"node:http";import Et from"open";var G="https://app.vibingbase.com";import*as pt from"@clack/prompts";function M(t){pt.note(`
3
3
  Email: ${t.user.email}
4
4
  Name: ${t.user.name}
5
- `.trim(),"Account details")}import{createServer as Vt}from"node:http";function tt(){return new Promise(t=>{let o,e=new Promise(r=>{o=r}),n=Vt((r,a)=>{if(r.method==="OPTIONS"){a.writeHead(204,{"access-control-allow-origin":"*","access-control-allow-methods":"POST, OPTIONS","access-control-allow-headers":"content-type"}),a.end();return}if(r.method==="POST"){let f="";r.on("data",c=>{f+=c.toString()}),r.on("end",()=>{try{let{token:c}=C.parse(JSON.parse(f));if(!c)throw new Error("Failed to get auth token");a.writeHead(200,{"access-control-allow-origin":"*"}),a.end("OK"),n.close(),o(c)}catch{a.writeHead(400,{"access-control-allow-origin":"*"}),a.end("Bad Request")}});return}a.writeHead(405,{"access-control-allow-origin":"*"}),a.end("Method Not Allowed")});n.listen(0,"localhost",()=>{let r=n.address();if(typeof r!="object"||!r)throw new Error("Failed to start auth server");t({port:r.port,waitForToken:()=>e})})})}async function V(t){t.start("Opening browser for authentication...");let{port:o,waitForToken:e}=await tt(),n=`${X}/authorize-cli?port=${o}`;await jt(n),t.stop("Opened browser for authentication!"),ot.note(`
6
- URL: ${n}
7
- `.trim(),"Authentication details"),t.start("Waiting for authentication...");let r=await e();await P(r);let a=await l.getSession();if(!a)throw new Error("Failed to sign in");return t.stop("Signed in!"),N(a),a}async function et(){p.intro(Ot.bold(T));let t=await l.getSession();if(t){p.log.warn(`You're already signed in as ${t.user.email}!`);let e=await p.confirm({message:"Sign in with a different account?",initialValue:!1});(p.isCancel(e)||!e)&&m(),await l.signOut(),await A()}let o=p.spinner();await V(o),p.outro(u)}import*as s from"@clack/prompts";import $t from"picocolors";import*as b from"@clack/prompts";async function j(t,o){let e=await l.getSession();if(e)return[e,!0];if(!o)return[void 0,!1];b.log.warn("You're currently not signed in!");let n=await b.confirm({message:"Sign in to continue?",initialValue:!0});return(b.isCancel(n)||!n)&&m(),[await V(t),!1]}var O="Sign out of your Vibingbase account";async function rt(){s.intro($t.bold(O));let t=s.spinner(),[o]=await j(t,!1);if(!o){s.log.info("You're already signed out!"),s.outro(u);return}let e=await s.confirm({message:`Sign out of ${o.user.email}?`,initialValue:!1});(s.isCancel(e)||!e)&&m(),t.start("Signing out..."),await l.signOut(),await A(),t.stop("Signed out!"),s.outro(u)}import*as y from"@clack/prompts";import Ft from"picocolors";var $="Show your current Vibingbase account";async function it(){y.intro(Ft.bold($));let t=y.spinner(),[o,e]=await j(t,!0);e&&N(o),y.outro(u)}var F={name:"vibingbase",version:"0.12.39",description:"CLI for creating Vibingbase apps",keywords:["vibingbase","vibe-coding","ai-coding","low-code","no-code"],homepage:"https://www.vibingbase.com",bugs:{url:"https://github.com/vibingbase/apps/issues",email:"team@vibingbase.com"},license:"MIT",author:{name:"Vibingbase",email:"team@vibingbase.com"},type:"module",imports:{"#./*":"./*"},exports:{".":{development:"./lib/index.ts",import:"./dist/index.js"}},bin:"./bin/index.js",dependencies:{"@clack/prompts":"^0.11.0","better-auth":"^1.4.7","change-case":"^5.4.4",commander:"^14.0.2",ejs:"^3.1.10",nanoid:"^5.1.6",open:"^11.0.0",picocolors:"^1.1.1",zod:"^4.2.1"},devDependencies:{"@types/ejs":"^3.1.5","eslint-config-base":"workspace:^"}};var x=new Et;x.name(F.name).version(F.version).description(F.description);x.command("create",{isDefault:!0}).description(k).action(q);x.command("login").description(T).action(et);x.command("logout").description(O).action(rt);x.command("whoami").description($).action(it);await x.parseAsync();
5
+ `.trim(),"Account details")}async function Wt(t,o){let i=new URL(t.url??"","http://localhost").searchParams.get("token");i&&await F(i);let r=new URL(`${G}/continue`);r.searchParams.set("event","authorized-cli");let a=await d.getSession();return a||r.searchParams.set("error","Failed to get auth session"),o.writeHead(302,{location:r.toString()}),o.end(),a}async function qt(t){let o=t.address();if(typeof o!="object"||!o)throw new Error("Failed to get auth address");let e=new URL(`${G}/authorize-cli`);e.searchParams.set("port",o.port.toString());let i=e.toString();return await Et(i),i}async function R(t){return t.start("Opening browser for authentication..."),new Promise((o,e)=>{let i=Dt((r,a)=>{r.method==="GET"?Wt(r,a).then(s=>{s&&(o(s),i.close(),t.stop("Signed in!"),M(s))}).catch(s=>{e(s),i.close()}):(a.writeHead(405),a.end())});i.listen(0,"localhost",()=>{qt(i).then(r=>{t.stop("Opened browser for authentication!"),mt.note(`URL: ${r}`,"Authentication details"),t.start("Waiting for authentication...")}).catch(r=>{e(r),i.close()})})})}async function ct(){l.intro(Gt.bold(z));let t=await d.getSession();if(t){l.log.warn(`You're already signed in as ${t.user.email}!`);let e=await l.confirm({message:"Sign in with a different account?",initialValue:!1});(l.isCancel(e)||!e)&&c(),await d.signOut(),await V()}let o=l.spinner();await R(o),l.outro(p)}import*as m from"@clack/prompts";import Bt from"picocolors";import*as k from"@clack/prompts";async function U(t,o){let e=await d.getSession();if(e)return[e,!0];if(!o)return[void 0,!1];k.log.warn("You're currently not signed in!");let i=await k.confirm({message:"Sign in to continue?",initialValue:!0});return(k.isCancel(i)||!i)&&c(),[await R(t),!1]}var _="Sign out of your Vibingbase account";async function lt(){m.intro(Bt.bold(_));let t=m.spinner(),[o]=await U(t,!1);if(!o){m.log.info("You're already signed out!"),m.outro(p);return}let e=await m.confirm({message:`Sign out of ${o.user.email}?`,initialValue:!1});(m.isCancel(e)||!e)&&c(),t.start("Signing out..."),await d.signOut(),await V(),t.stop("Signed out!"),m.outro(p)}import*as v from"@clack/prompts";import Jt from"archiver";import{globby as Yt}from"globby";import{createWriteStream as Ht,existsSync as Zt}from"node:fs";import{lstat as Kt,readFile as Qt,readlink as Xt,stat as to}from"node:fs/promises";import O from"node:path";import oo from"picocolors";import{parse as eo}from"smol-toml";import{z as j}from"zod";var N="Create a publishable ZIP file";var ro=j.object({package:j.object({name:j.string().regex(/^app_(.+)_package$/,"Expected: app_<id>_package")}),lib:j.object({name:j.string().regex(/^app_(.+)_lib$/,"Expected: app_<id>_lib")})});async function ut(t){v.intro(oo.bold(N));let o=v.spinner(),e=O.resolve(t.cwd),i=O.join(e,"src-tauri","Cargo.toml");if(!Zt(i))throw new Error("Failed to find src-tauri/Cargo.toml");let a=ro.parse(eo(await Qt(i,"utf8"))).package.name.replace(/^app_(.+)_package$/,"$1"),s=O.join(e,`${a}.zip`);o.start(`Creating ${a}.zip...`);let g=Ht(s),u=Jt("zip",{zlib:{level:9}}),h=new Promise((C,P)=>{g.on("close",C),u.on("error",P)});u.pipe(g);let f=await Yt("**/*",{cwd:e,ignore:["**/.git"],gitignore:!0,dot:!0,onlyFiles:!1,followSymbolicLinks:!1});for(let C of f){let P=O.join(e,C),b=await Kt(P);if(b.isSymbolicLink()){let gt=await Xt(P);u.symlink(C,gt,b.mode)}else b.isFile()&&u.file(P,{name:C,stats:b,date:b.mtime,mode:b.mode})}await u.finalize(),await h;let dt=((await to(s)).size/1024/1024).toFixed(2);o.stop(`Created ${a}.zip (${dt} MB)`),v.outro(p)}import*as S from"@clack/prompts";import io from"picocolors";var D="Show your current Vibingbase account";async function ft(){S.intro(io.bold(D));let t=S.spinner(),[o,e]=await U(t,!0);e&&M(o),S.outro(p)}var E={name:"vibingbase",version:"0.12.40",description:"CLI for creating Vibingbase apps",keywords:["vibingbase","vibe-coding","ai-coding","low-code","no-code"],homepage:"https://www.vibingbase.com",bugs:{url:"https://github.com/vibingbase/apps/issues",email:"team@vibingbase.com"},license:"MIT",author:{name:"Vibingbase",email:"team@vibingbase.com"},type:"module",imports:{"#./*":"./*"},exports:{".":{development:"./lib/index.ts",import:"./dist/index.js"}},bin:"./bin/index.js",dependencies:{"@clack/prompts":"^0.11.0",archiver:"^7.0.1","better-auth":"^1.4.7","change-case":"^5.4.4",commander:"^14.0.2",ejs:"^3.1.10",globby:"^16.1.0",nanoid:"^5.1.6",open:"^11.0.0",picocolors:"^1.1.1","smol-toml":"^1.6.0",zod:"^4.2.1"},devDependencies:{"@types/archiver":"^7.0.0","@types/ejs":"^3.1.5","eslint-config-base":"workspace:^"}};var w=new ao;w.name(E.name).version(E.version).description(E.description);w.command("create",{isDefault:!0}).description(L).option("--cwd <path>","Working directory",process.cwd()).action(et);w.command("pack").description(N).option("--cwd <path>","Working directory",process.cwd()).action(ut);w.command("login").description(z).action(ct);w.command("logout").description(_).action(lt);w.command("whoami").description(D).action(ft);await w.parseAsync();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibingbase",
3
- "version": "0.12.39",
3
+ "version": "0.12.40",
4
4
  "description": "CLI for creating Vibingbase apps",
5
5
  "keywords": [
6
6
  "vibingbase",
@@ -31,13 +31,16 @@
31
31
  "bin": "./bin/index.js",
32
32
  "dependencies": {
33
33
  "@clack/prompts": "^0.11.0",
34
+ "archiver": "^7.0.1",
34
35
  "better-auth": "^1.4.7",
35
36
  "change-case": "^5.4.4",
36
37
  "commander": "^14.0.2",
37
38
  "ejs": "^3.1.10",
39
+ "globby": "^16.1.0",
38
40
  "nanoid": "^5.1.6",
39
41
  "open": "^11.0.0",
40
42
  "picocolors": "^1.1.1",
43
+ "smol-toml": "^1.6.0",
41
44
  "zod": "^4.2.1"
42
45
  },
43
46
  "files": [