vibingbase 0.12.39 → 0.12.41

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
@@ -0,0 +1,2 @@
1
+ onlyBuiltDependencies:
2
+ - esbuild
@@ -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",
@@ -3202,9 +3202,9 @@ dependencies = [
3202
3202
 
3203
3203
  [[package]]
3204
3204
  name = "rustix"
3205
- version = "1.1.2"
3205
+ version = "1.1.3"
3206
3206
  source = "registry+https://github.com/rust-lang/crates.io-index"
3207
- checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
3207
+ checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34"
3208
3208
  dependencies = [
3209
3209
  "bitflags 2.10.0",
3210
3210
  "errno",
@@ -3409,15 +3409,15 @@ dependencies = [
3409
3409
 
3410
3410
  [[package]]
3411
3411
  name = "serde_json"
3412
- version = "1.0.145"
3412
+ version = "1.0.147"
3413
3413
  source = "registry+https://github.com/rust-lang/crates.io-index"
3414
- checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
3414
+ checksum = "6af14725505314343e673e9ecb7cd7e8a36aa9791eb936235a3567cc31447ae4"
3415
3415
  dependencies = [
3416
3416
  "itoa",
3417
3417
  "memchr",
3418
- "ryu",
3419
3418
  "serde",
3420
3419
  "serde_core",
3420
+ "zmij",
3421
3421
  ]
3422
3422
 
3423
3423
  [[package]]
@@ -4165,9 +4165,9 @@ dependencies = [
4165
4165
 
4166
4166
  [[package]]
4167
4167
  name = "tempfile"
4168
- version = "3.23.0"
4168
+ version = "3.24.0"
4169
4169
  source = "registry+https://github.com/rust-lang/crates.io-index"
4170
- checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
4170
+ checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c"
4171
4171
  dependencies = [
4172
4172
  "fastrand",
4173
4173
  "getrandom 0.3.4",
@@ -5673,6 +5673,12 @@ dependencies = [
5673
5673
  "memchr",
5674
5674
  ]
5675
5675
 
5676
+ [[package]]
5677
+ name = "zmij"
5678
+ version = "0.1.7"
5679
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5680
+ checksum = "9e404bcd8afdaf006e529269d3e85a743f9480c3cef60034d77860d02964f3ba"
5681
+
5676
5682
  [[package]]
5677
5683
  name = "zvariant"
5678
5684
  version = "5.8.0"
@@ -21,4 +21,5 @@ out
21
21
  .vercel
22
22
  target
23
23
  gen
24
+ *.zip
24
25
  *.db
@@ -0,0 +1,2 @@
1
+ onlyBuiltDependencies:
2
+ - esbuild
@@ -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",
@@ -3202,9 +3202,9 @@ dependencies = [
3202
3202
 
3203
3203
  [[package]]
3204
3204
  name = "rustix"
3205
- version = "1.1.2"
3205
+ version = "1.1.3"
3206
3206
  source = "registry+https://github.com/rust-lang/crates.io-index"
3207
- checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
3207
+ checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34"
3208
3208
  dependencies = [
3209
3209
  "bitflags 2.10.0",
3210
3210
  "errno",
@@ -3409,15 +3409,15 @@ dependencies = [
3409
3409
 
3410
3410
  [[package]]
3411
3411
  name = "serde_json"
3412
- version = "1.0.145"
3412
+ version = "1.0.147"
3413
3413
  source = "registry+https://github.com/rust-lang/crates.io-index"
3414
- checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
3414
+ checksum = "6af14725505314343e673e9ecb7cd7e8a36aa9791eb936235a3567cc31447ae4"
3415
3415
  dependencies = [
3416
3416
  "itoa",
3417
3417
  "memchr",
3418
- "ryu",
3419
3418
  "serde",
3420
3419
  "serde_core",
3420
+ "zmij",
3421
3421
  ]
3422
3422
 
3423
3423
  [[package]]
@@ -4165,9 +4165,9 @@ dependencies = [
4165
4165
 
4166
4166
  [[package]]
4167
4167
  name = "tempfile"
4168
- version = "3.23.0"
4168
+ version = "3.24.0"
4169
4169
  source = "registry+https://github.com/rust-lang/crates.io-index"
4170
- checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
4170
+ checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c"
4171
4171
  dependencies = [
4172
4172
  "fastrand",
4173
4173
  "getrandom 0.3.4",
@@ -5673,6 +5673,12 @@ dependencies = [
5673
5673
  "memchr",
5674
5674
  ]
5675
5675
 
5676
+ [[package]]
5677
+ name = "zmij"
5678
+ version = "0.1.7"
5679
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5680
+ checksum = "9e404bcd8afdaf006e529269d3e85a743f9480c3cef60034d77860d02964f3ba"
5681
+
5676
5682
  [[package]]
5677
5683
  name = "zvariant"
5678
5684
  version = "5.8.0"
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
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 dr}from"commander";import*as h from"@clack/prompts";import uo from"picocolors";import{createAuthClient as ao}from"better-auth/client";import{adminClient as so,organizationClient as mo}from"better-auth/client/plugins";var N="https://api.vibingbase.com";import{readFile as eo}from"node:fs/promises";import ro from"node:path";import{homedir as to}from"node:os";import oo from"node:path";var W=oo.join(to(),".vibingbase");var z=ro.join(W,"auth.json");import{z as st}from"zod";var gt=st.object({token:st.string().nullish(),activeOrganizationId:st.string().nullish()});async function v(){try{let t=await eo(z,"utf8");return gt.parse(JSON.parse(t))}catch{return{}}}async function P(){return((await v()).activeOrganizationId??"")||void 0}async function dt(){return((await v()).token??"")||void 0}import{mkdir as io,writeFile as no}from"node:fs/promises";async function J(t){await io(W,{recursive:!0}),await no(z,JSON.stringify(t))}async function B(t){let o=await v();await J({...o,token:(t??"")||void 0})}var g=ao({baseURL:N,basePath:"/v1/auth",plugins:[so(),mo()],fetchOptions:{throw:!0,auth:{type:"Bearer",token:dt},onRequest:async t=>{let o=await P();return o&&t.headers.set("x-active-organization-id",o),t},onSuccess:async({response:t})=>{let o=t.headers.get("set-auth-token");o&&await B(o)}}});import*as T from"@clack/prompts";import*as wt from"@clack/prompts";var p="Thanks for using Vibingbase!";function c(){wt.outro(p),process.exit(0)}import*as bt from"@clack/prompts";import{createServer as po}from"node:http";import co from"open";var mt="https://app.vibingbase.com";import*as ht from"@clack/prompts";function D(t){ht.note(`
3
2
  Email: ${t.user.email}
4
3
  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();
4
+ `.trim(),"Account details")}async function fo(t,o){let i=new URL(t.url??"","http://localhost").searchParams.get("token");i&&await B(i);let e=new URL(`${mt}/continue`);e.searchParams.set("event","authorized-cli");let n=await g.getSession();return n||e.searchParams.set("error","Failed to get auth session"),o.writeHead(302,{location:e.toString()}),o.end(),n}async function lo(t){let o=t.address();if(typeof o!="object"||!o)throw new Error("Failed to get auth address");let r=new URL(`${mt}/authorize-cli`);r.searchParams.set("port",o.port.toString());let i=r.toString();return await co(i),i}async function _(t){return t.start("Opening browser for authentication..."),new Promise((o,r)=>{let i=po((e,n)=>{e.method==="GET"?fo(e,n).then(s=>{s&&(o(s),i.close(),t.stop("Signed in!"),D(s))}).catch(s=>{r(s),i.close()}):(n.writeHead(405),n.end())});i.listen(0,"localhost",()=>{lo(i).then(e=>{t.stop("Opened browser for authentication!"),bt.note(`URL: ${e}`,"Authentication details"),t.start("Waiting for authentication...")}).catch(e=>{r(e),i.close()})})})}async function C(t,o){let r=await g.getSession();if(r)return[r,!0];if(!o)return[void 0,!1];T.log.warn("You're currently not signed in!");let i=await T.confirm({message:"Sign in to continue?",initialValue:!0});return(T.isCancel(i)||!i)&&c(),[await _(t),!1]}var q="Change your current Vibingbase workspace";async function pt(t){let o=await v();await J({...o,activeOrganizationId:(t??"")||void 0})}var vt="Active";async function kt(){h.intro(uo.bold(q));let t=h.spinner();await C(t,!0);let[o,r]=await Promise.all([g.organization.list(),P()]);o.length===0&&(r&&await pt(null),h.log.info("You only have access to your personal workspace!"),c());let i=[{value:void 0,label:"Personal workspace",hint:r?void 0:vt},...o.map(n=>({value:n.id,label:n.name,hint:n.id===r?vt:void 0}))],e=await h.select({message:"Select a workspace:",initialValue:r,options:i});h.isCancel(e)&&c(),await pt(e),h.outro(p)}import*as a from"@clack/prompts";import{capitalCase as Vo}from"change-case";import{existsSync as $o}from"node:fs";import{rm as jo}from"node:fs/promises";import R from"node:path";import zo from"picocolors";var G="Create a new Vibingbase app";function yt(){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 go}from"node:child_process";import{promisify as wo}from"node:util";var A=wo(go);import{customAlphabet as ho}from"nanoid";var bo="0123456789abcdefghijklmnopqrstuvwxyz",xt=ho(bo);function vo(t){switch(t){case"install":case"start":return!1;default:return!0}}function Ct(t,o){let r=t==="npm"&&vo(o)?`run ${o}`:o;return`${t} ${r}`}function St(t){switch(t){case"npm":return"npx";case"pnpm":return"pnpm exec";case"yarn":return"yarn";case"bun":return"bunx"}}import ko from"ejs";import{copyFile as yo,mkdir as xo,readdir as Co,readFile as So,writeFile as Io}from"node:fs/promises";import It from"node:path";var Vt=".template";async function ct(t,o,r){await xo(o,{recursive:!0});let i=await Co(t,{withFileTypes:!0});await Promise.all(i.map(async e=>{let n=e.name.endsWith(Vt),s=It.join(t,e.name),f=It.join(o,n?e.name.slice(0,-Vt.length):e.name);if(e.isDirectory())await ct(s,f,r);else if(n){let u=await So(s,"utf8");await Io(f,ko.render(u,r))}else await yo(s,f)}))}function $t(t){if(!t)return"App name is required";if(t.includes(" "))return"No double spaces allowed"}function jt(t){if(!t)return"Directory name is required"}var Y="https://www.vibingbase.com";async function zt(t){a.intro(zo.bold(G));let o="my-app",r=await a.text({message:"Directory name:",placeholder:o,defaultValue:o,initialValue:o,validate:jt});a.isCancel(r)&&c();let i=r.trim(),e=R.isAbsolute(i)?i:R.join(t.cwd,i);if($o(e)){let x=await a.confirm({message:"Overwrite existing directory?",initialValue:!1});(a.isCancel(x)||!x)&&c(),await jo(e,{recursive:!0,force:!0})}let n=Vo(R.basename(i)),s=await a.text({message:"App name:",placeholder:n,defaultValue:n,initialValue:n,validate:$t});a.isCancel(s)&&c();let f=s.trim(),u=await a.confirm({message:"Use Tailwind CSS?",initialValue:!0});a.isCancel(u)&&c();let m=await a.select({message:"Package manager:",initialValue:yt(),options:[{value:"npm",label:"npm"},{value:"pnpm",label:"pnpm"},{value:"yarn",label:"yarn"},{value:"bun",label:"bun"}]});a.isCancel(m)&&c();let l=a.spinner();l.start("Generating project files..."),await ct(R.join(import.meta.dirname,"..","assets",u?"tailwind":"default"),e,{websiteURL:Y,name:f,id:xt(),version:"1.0.0",exec:St(m)}),l.stop("Generated project files!"),l.start(`Installing ${m} dependencies...`),await A(`${m} install`,{cwd:e}),l.stop(`Installed ${m} dependencies!`),l.start("Installing cargo dependencies..."),await A("cargo fetch",{cwd:R.join(e,"src-tauri")}),l.stop("Installed cargo dependencies!"),l.start("Initializing Git..."),await A("git init",{cwd:e}),await A("git add .",{cwd:e}),await A('git commit -m "Initialize repository with Vibingbase CLI"',{cwd:e}),l.stop("Initialized Git!"),a.note(`cd ${i}
5
+ ${Ct(m,"dev")}`,"Next steps"),a.outro(p)}import*as b from"@clack/prompts";import To from"picocolors";import{rm as Po}from"node:fs/promises";async function H(){await Po(z,{force:!0})}var X="Sign in to your Vibingbase account";async function Pt(){b.intro(To.bold(X));let t=await g.getSession();if(t){b.log.warn(`You're already signed in as ${t.user.email}!`);let r=await b.confirm({message:"Sign in with a different account?",initialValue:!1});(b.isCancel(r)||!r)&&c(),await g.signOut(),await H()}let o=b.spinner();await _(o),b.outro(p)}import*as d from"@clack/prompts";import Ao from"picocolors";var Z="Sign out of your Vibingbase account";async function Tt(){d.intro(Ao.bold(Z));let t=d.spinner(),[o]=await C(t,!1);if(!o){d.log.info("You're already signed out!"),d.outro(p);return}let r=await d.confirm({message:`Sign out of ${o.user.email}?`,initialValue:!1});(d.isCancel(r)||!r)&&c(),t.start("Signing out..."),await g.signOut(),await H(),t.stop("Signed out!"),d.outro(p)}import*as F from"@clack/prompts";import Go from"archiver";import{globby as Yo}from"globby";import{createWriteStream as Ho}from"node:fs";import{lstat as Xo,readlink as Zo,stat as Ko}from"node:fs/promises";import ft from"node:path";import Qo from"picocolors";import{readFile as Fo}from"node:fs/promises";async function At(t,o){let r=JSON.parse(await Fo(t,"utf8"));return r.identifier=r.identifier.replace(/-dev$/,""),r.bundle={...r.bundle,active:!0,createUpdaterArtifacts:!0,targets:["app","dmg","nsis"],windows:{signCommand:"trusted-signing-cli -e https://eus.codesigning.azure.net -a phuctm97 -c phuctm97 %1"}},r.plugins??={},r.plugins["deep-link"]={desktop:{schemes:[`app-${o}`]}},r.plugins.updater={pubkey:"dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDkzMEJBRTRGMkZBREIxMTIKUldRU3NhMHZUNjRMazdXcFd4RUxUNXFDK1NBUEJSYjFhZlVXaHI4YVZBOW1QYXRobEt4eTI5QXkK",endpoints:[`${Y}/v1/updater/app-${o}`]},JSON.stringify(r,void 0,2)}var K="Create a publishable ZIP file";import tt from"node:path";import{existsSync as Ro}from"node:fs";import{readFile as Uo}from"node:fs/promises";import{parse as Eo}from"smol-toml";import{z as Q}from"zod";import Lo from"semver";import{z as Oo}from"zod";var S=Oo.string().refine(t=>!!Lo.valid(t),"Expected: valid semver");var Ft=Q.object({package:Q.array(Q.object({name:Q.string(),version:S}))});async function Lt(t){if(!Ro(t))throw new Error("Failed to find src-tauri/Cargo.lock");return Ft.parse(Eo(await Uo(t,"utf8")))}import{existsSync as Mo}from"node:fs";import{readFile as No}from"node:fs/promises";import{parse as Wo}from"smol-toml";import{z as U}from"zod";var Ot=U.object({package:U.object({name:U.string().regex(/^app_(.+)_package$/,"Expected: app_<id>_package"),version:S}),lib:U.object({name:U.string().regex(/^app_(.+)_lib$/,"Expected: app_<id>_lib")})});async function Rt(t){if(!Mo(t))throw new Error("Failed to find src-tauri/Cargo.toml");return Ot.parse(Wo(await No(t,"utf8")))}import{existsSync as Bo}from"node:fs";import{readFile as Do}from"node:fs/promises";import{z as Jo}from"zod";var Ut=Jo.object({version:S});async function Et(t){if(!Bo(t))throw new Error("Failed to find package.json");return Ut.parse(JSON.parse(await Do(t,"utf8")))}import{existsSync as _o}from"node:fs";import{readFile as qo}from"node:fs/promises";import{z as Mt}from"zod";var Nt=Mt.object({identifier:Mt.string().regex(/^com\.vibingbase\.app-[a-z0-9]+-dev$/,"Expected: com.vibingbase.app-<id>-dev"),version:S});async function Wt(t){if(!_o(t))throw new Error("Failed to find src-tauri/tauri.conf.json");return Nt.parse(JSON.parse(await qo(t,"utf8")))}async function ot(t){let[o,r,i,e]=await Promise.all([Et(tt.join(t,"package.json")),Rt(tt.join(t,"src-tauri","Cargo.toml")),Lt(tt.join(t,"src-tauri","Cargo.lock")),Wt(tt.join(t,"src-tauri","tauri.conf.json"))]),n=i.package.find(s=>s.name===r.package.name);if(!n)throw new Error(`Failed to find ${r.package.name} in Cargo.lock`);return{packageJson:o,cargoToml:r,cargoLock:i,tauriConfig:e,packageJsonVersion:o.version,cargoTomlVersion:r.package.version,cargoLockVersion:n.version,tauriConfigVersion:e.version}}async function Jt(t){F.intro(Qo.bold(K));let o=ft.resolve(t.cwd),r=F.spinner(),{cargoToml:i,packageJsonVersion:e,cargoTomlVersion:n,cargoLockVersion:s,tauriConfigVersion:f}=await ot(o),u=[e,n,s,f];if(new Set(u).size!==1)throw new Error(`Version mismatch: package.json (${e}), Cargo.toml (${n}), Cargo.lock (${s}), tauri.conf.json (${f})`);let m=i.package.name.replace(/^app_(.+)_package$/,"$1"),l=ft.join(o,`${m}.zip`);r.start(`Creating ${m}.zip...`);let x=Ho(l),y=Go("zip",{zlib:{level:9}}),Zt=new Promise((V,$)=>{x.on("close",V),y.on("error",$)});y.pipe(x);let Kt=await Yo("**/*",{cwd:o,ignore:["**/.git"],gitignore:!0,dot:!0,onlyFiles:!1,followSymbolicLinks:!1});for(let V of Kt){let $=ft.join(o,V),j=await Xo($);if(j.isSymbolicLink()){let M=await Zo($);y.symlink(V,M,j.mode)}else if(j.isFile()){let M={name:V,stats:j,date:j.mtime,mode:j.mode};if(V==="src-tauri/tauri.conf.json"){let Qt=await At($,m);y.append(Qt,M)}else y.file($,M)}}await y.finalize(),await Zt;let lt=(await Ko(l)).size/1024/1024,ut=lt.toFixed(2);if(lt>100)throw new Error(`Package exceeds 100 MB limit: ${ut} MB`);r.stop(`Created ${m}.zip (${ut} MB)`),F.outro(p)}import*as w from"@clack/prompts";import E from"node:path";import mr from"picocolors";import et from"semver";var rt="Bump version in all config files";import{readFile as tr,writeFile as or}from"node:fs/promises";async function Bt(t,o,r){let i=await tr(t,"utf8");await or(t,i.replace(new RegExp(String.raw`(\[\[package\]\]\s*\nname\s*=\s*"${o}"\s*\nversion\s*=\s*)"[^"]*"`,"m"),`$1"${r}"`))}import{readFile as rr,writeFile as er}from"node:fs/promises";async function Dt(t,o){let r=await rr(t,"utf8");await er(t,r.replace(/^(version\s*=\s*)"[^"]*"/m,`$1"${o}"`))}import{readFile as ir,writeFile as nr}from"node:fs/promises";async function _t(t,o){let r=await ir(t,"utf8");await nr(t,r.replace(/"version"\s*:\s*"[^"]*"/,`"version": "${o}"`))}import{readFile as ar,writeFile as sr}from"node:fs/promises";async function qt(t,o){let r=await ar(t,"utf8");await sr(t,r.replace(/"version"\s*:\s*"[^"]*"/,`"version": "${o}"`))}async function Gt(t){w.intro(mr.bold(rt));let o=E.resolve(t.cwd),{packageJson:r,cargoToml:i}=await ot(o),e=r.version,n=et.inc(e,"patch"),s=et.inc(e,"minor"),f=et.inc(e,"major"),u=await w.select({message:`Current version: ${e}. Select new version:`,options:[{value:n,label:`Patch (${n})`},{value:s,label:`Minor (${s})`},{value:f,label:`Major (${f})`},{value:"custom",label:"Custom"}]});w.isCancel(u)&&c();let m;if(u==="custom"){let x=await w.text({message:"Enter custom version:",validate:y=>{if(!y)return"Custom version is required";if(!et.valid(y))return"Custom version must be a valid semver"}});w.isCancel(x)&&c(),m=x}else u?m=u:c();let l=w.spinner();l.start(`Updating version to ${m}...`),await Promise.all([_t(E.join(o,"package.json"),m),Dt(E.join(o,"src-tauri","Cargo.toml"),m),Bt(E.join(o,"src-tauri","Cargo.lock"),i.package.name,m),qt(E.join(o,"src-tauri","tauri.conf.json"),m)]),l.stop(`Updated version to ${m}`),w.outro(p)}import*as I from"@clack/prompts";import lr from"picocolors";import{createTRPCClient as pr,httpBatchLink as cr}from"@trpc/client";import{SuperJSON as fr}from"superjson";var Yt=pr({links:[cr({url:`${N}/v1/trpc`,transformer:fr,headers:async()=>{let t={},{token:o,activeOrganizationId:r}=await v();return o&&(t.authorization=`Bearer ${o}`),r&&(t["x-active-organization-id"]=r),t}})]});var it="View your current Vibingbase workspace";async function Ht(){I.intro(lr.bold(it));let t=I.spinner();await C(t,!0);let[{aggregatedCredits:o,usedCredits:r},i]=await Promise.all([Yt.workspace.sync.query(),P()]),e="Personal workspace";if(i){let f=(await g.organization.list()).find(u=>u.id===i);f&&(e=f.name)}let n=o-r;I.note(`
6
+ Name: ${e}
7
+ Usage: ${n.toLocaleString("en-US")} remaining credits / ${o.toLocaleString("en-US")} total credits (this month)
8
+ `.trim(),"Workspace details"),I.outro(p)}import*as L from"@clack/prompts";import ur from"picocolors";var nt="Show your current Vibingbase account";async function Xt(){L.intro(ur.bold(nt));let t=L.spinner(),[o,r]=await C(t,!0);r&&D(o),L.outro(p)}var at={name:"vibingbase",version:"0.12.41",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","@trpc/client":"^11.8.1",archiver:"^7.0.1","better-auth":"^1.4.9","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",semver:"^7.7.3","smol-toml":"^1.6.0",superjson:"^2.2.6",zod:"^4.2.1"},devDependencies:{"@types/archiver":"^7.0.0","@types/ejs":"^3.1.5","@types/semver":"^7.7.1","eslint-config-base":"workspace:^","vibingbase-api":"workspace:^"}};var k=new dr;k.name(at.name).version(at.version).description(at.description);k.command("create",{isDefault:!0}).description(G).option("--cwd <path>","Working directory",process.cwd()).action(zt);k.command("version").description(rt).option("--cwd <path>","Working directory",process.cwd()).action(Gt);k.command("pack").description(K).option("--cwd <path>","Working directory",process.cwd()).action(Jt);k.command("login").description(X).action(Pt);k.command("logout").description(Z).action(Tt);k.command("whoami").description(nt).action(Xt);k.command("view-workspace").description(it).action(Ht);k.command("change-workspace").description(q).action(kt);await k.parseAsync();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibingbase",
3
- "version": "0.12.39",
3
+ "version": "0.12.41",
4
4
  "description": "CLI for creating Vibingbase apps",
5
5
  "keywords": [
6
6
  "vibingbase",
@@ -31,13 +31,19 @@
31
31
  "bin": "./bin/index.js",
32
32
  "dependencies": {
33
33
  "@clack/prompts": "^0.11.0",
34
- "better-auth": "^1.4.7",
34
+ "@trpc/client": "^11.8.1",
35
+ "archiver": "^7.0.1",
36
+ "better-auth": "^1.4.9",
35
37
  "change-case": "^5.4.4",
36
38
  "commander": "^14.0.2",
37
39
  "ejs": "^3.1.10",
40
+ "globby": "^16.1.0",
38
41
  "nanoid": "^5.1.6",
39
42
  "open": "^11.0.0",
40
43
  "picocolors": "^1.1.1",
44
+ "semver": "^7.7.3",
45
+ "smol-toml": "^1.6.0",
46
+ "superjson": "^2.2.6",
41
47
  "zod": "^4.2.1"
42
48
  },
43
49
  "files": [