vibingbase 0.12.41 → 0.12.43

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.
@@ -32,5 +32,5 @@
32
32
  "dev": "tauri dev",
33
33
  "build": "tauri build"
34
34
  },
35
- "packageManager": "pnpm@10.26.1"
35
+ "packageManager": "pnpm@10.26.2"
36
36
  }
@@ -397,9 +397,9 @@ dependencies = [
397
397
 
398
398
  [[package]]
399
399
  name = "cc"
400
- version = "1.2.50"
400
+ version = "1.2.51"
401
401
  source = "registry+https://github.com/rust-lang/crates.io-index"
402
- checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c"
402
+ checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203"
403
403
  dependencies = [
404
404
  "find-msvc-tools",
405
405
  "shlex",
@@ -807,9 +807,9 @@ dependencies = [
807
807
 
808
808
  [[package]]
809
809
  name = "dtoa"
810
- version = "1.0.10"
810
+ version = "1.0.11"
811
811
  source = "registry+https://github.com/rust-lang/crates.io-index"
812
- checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04"
812
+ checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590"
813
813
 
814
814
  [[package]]
815
815
  name = "dtoa-short"
@@ -966,9 +966,9 @@ dependencies = [
966
966
 
967
967
  [[package]]
968
968
  name = "find-msvc-tools"
969
- version = "0.1.5"
969
+ version = "0.1.6"
970
970
  source = "registry+https://github.com/rust-lang/crates.io-index"
971
- checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
971
+ checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff"
972
972
 
973
973
  [[package]]
974
974
  name = "fix-path-env"
@@ -1806,9 +1806,9 @@ dependencies = [
1806
1806
 
1807
1807
  [[package]]
1808
1808
  name = "itoa"
1809
- version = "1.0.16"
1809
+ version = "1.0.17"
1810
1810
  source = "registry+https://github.com/rust-lang/crates.io-index"
1811
- checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010"
1811
+ checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
1812
1812
 
1813
1813
  [[package]]
1814
1814
  name = "javascriptcore-rs"
@@ -1958,13 +1958,13 @@ dependencies = [
1958
1958
 
1959
1959
  [[package]]
1960
1960
  name = "libredox"
1961
- version = "0.1.11"
1961
+ version = "0.1.12"
1962
1962
  source = "registry+https://github.com/rust-lang/crates.io-index"
1963
- checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50"
1963
+ checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616"
1964
1964
  dependencies = [
1965
1965
  "bitflags 2.10.0",
1966
1966
  "libc",
1967
- "redox_syscall 0.6.0",
1967
+ "redox_syscall 0.7.0",
1968
1968
  ]
1969
1969
 
1970
1970
  [[package]]
@@ -2840,9 +2840,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
2840
2840
 
2841
2841
  [[package]]
2842
2842
  name = "proc-macro2"
2843
- version = "1.0.103"
2843
+ version = "1.0.104"
2844
2844
  source = "registry+https://github.com/rust-lang/crates.io-index"
2845
- checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
2845
+ checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0"
2846
2846
  dependencies = [
2847
2847
  "unicode-ident",
2848
2848
  ]
@@ -3053,9 +3053,9 @@ dependencies = [
3053
3053
 
3054
3054
  [[package]]
3055
3055
  name = "redox_syscall"
3056
- version = "0.6.0"
3056
+ version = "0.7.0"
3057
3057
  source = "registry+https://github.com/rust-lang/crates.io-index"
3058
- checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5"
3058
+ checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27"
3059
3059
  dependencies = [
3060
3060
  "bitflags 2.10.0",
3061
3061
  ]
@@ -3256,9 +3256,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
3256
3256
 
3257
3257
  [[package]]
3258
3258
  name = "ryu"
3259
- version = "1.0.21"
3259
+ version = "1.0.22"
3260
3260
  source = "registry+https://github.com/rust-lang/crates.io-index"
3261
- checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea"
3261
+ checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984"
3262
3262
 
3263
3263
  [[package]]
3264
3264
  name = "same-file"
@@ -3298,9 +3298,9 @@ dependencies = [
3298
3298
 
3299
3299
  [[package]]
3300
3300
  name = "schemars"
3301
- version = "1.1.0"
3301
+ version = "1.2.0"
3302
3302
  source = "registry+https://github.com/rust-lang/crates.io-index"
3303
- checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289"
3303
+ checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2"
3304
3304
  dependencies = [
3305
3305
  "dyn-clone",
3306
3306
  "ref-cast",
@@ -3409,9 +3409,9 @@ dependencies = [
3409
3409
 
3410
3410
  [[package]]
3411
3411
  name = "serde_json"
3412
- version = "1.0.147"
3412
+ version = "1.0.148"
3413
3413
  source = "registry+https://github.com/rust-lang/crates.io-index"
3414
- checksum = "6af14725505314343e673e9ecb7cd7e8a36aa9791eb936235a3567cc31447ae4"
3414
+ checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da"
3415
3415
  dependencies = [
3416
3416
  "itoa",
3417
3417
  "memchr",
@@ -3473,7 +3473,7 @@ dependencies = [
3473
3473
  "indexmap 1.9.3",
3474
3474
  "indexmap 2.12.1",
3475
3475
  "schemars 0.9.0",
3476
- "schemars 1.1.0",
3476
+ "schemars 1.2.0",
3477
3477
  "serde_core",
3478
3478
  "serde_json",
3479
3479
  "serde_with_macros",
@@ -3543,10 +3543,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
3543
3543
 
3544
3544
  [[package]]
3545
3545
  name = "signal-hook-registry"
3546
- version = "1.4.7"
3546
+ version = "1.4.8"
3547
3547
  source = "registry+https://github.com/rust-lang/crates.io-index"
3548
- checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad"
3548
+ checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
3549
3549
  dependencies = [
3550
+ "errno",
3550
3551
  "libc",
3551
3552
  ]
3552
3553
 
@@ -5675,9 +5676,9 @@ dependencies = [
5675
5676
 
5676
5677
  [[package]]
5677
5678
  name = "zmij"
5678
- version = "0.1.7"
5679
+ version = "1.0.0"
5679
5680
  source = "registry+https://github.com/rust-lang/crates.io-index"
5680
- checksum = "9e404bcd8afdaf006e529269d3e85a743f9480c3cef60034d77860d02964f3ba"
5681
+ checksum = "e6d6085d62852e35540689d1f97ad663e3971fc19cf5eceab364d62c646ea167"
5681
5682
 
5682
5683
  [[package]]
5683
5684
  name = "zvariant"
@@ -34,5 +34,5 @@
34
34
  "dev": "tauri dev",
35
35
  "build": "tauri build"
36
36
  },
37
- "packageManager": "pnpm@10.26.1"
37
+ "packageManager": "pnpm@10.26.2"
38
38
  }
@@ -397,9 +397,9 @@ dependencies = [
397
397
 
398
398
  [[package]]
399
399
  name = "cc"
400
- version = "1.2.50"
400
+ version = "1.2.51"
401
401
  source = "registry+https://github.com/rust-lang/crates.io-index"
402
- checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c"
402
+ checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203"
403
403
  dependencies = [
404
404
  "find-msvc-tools",
405
405
  "shlex",
@@ -807,9 +807,9 @@ dependencies = [
807
807
 
808
808
  [[package]]
809
809
  name = "dtoa"
810
- version = "1.0.10"
810
+ version = "1.0.11"
811
811
  source = "registry+https://github.com/rust-lang/crates.io-index"
812
- checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04"
812
+ checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590"
813
813
 
814
814
  [[package]]
815
815
  name = "dtoa-short"
@@ -966,9 +966,9 @@ dependencies = [
966
966
 
967
967
  [[package]]
968
968
  name = "find-msvc-tools"
969
- version = "0.1.5"
969
+ version = "0.1.6"
970
970
  source = "registry+https://github.com/rust-lang/crates.io-index"
971
- checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
971
+ checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff"
972
972
 
973
973
  [[package]]
974
974
  name = "fix-path-env"
@@ -1806,9 +1806,9 @@ dependencies = [
1806
1806
 
1807
1807
  [[package]]
1808
1808
  name = "itoa"
1809
- version = "1.0.16"
1809
+ version = "1.0.17"
1810
1810
  source = "registry+https://github.com/rust-lang/crates.io-index"
1811
- checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010"
1811
+ checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
1812
1812
 
1813
1813
  [[package]]
1814
1814
  name = "javascriptcore-rs"
@@ -1958,13 +1958,13 @@ dependencies = [
1958
1958
 
1959
1959
  [[package]]
1960
1960
  name = "libredox"
1961
- version = "0.1.11"
1961
+ version = "0.1.12"
1962
1962
  source = "registry+https://github.com/rust-lang/crates.io-index"
1963
- checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50"
1963
+ checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616"
1964
1964
  dependencies = [
1965
1965
  "bitflags 2.10.0",
1966
1966
  "libc",
1967
- "redox_syscall 0.6.0",
1967
+ "redox_syscall 0.7.0",
1968
1968
  ]
1969
1969
 
1970
1970
  [[package]]
@@ -2840,9 +2840,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
2840
2840
 
2841
2841
  [[package]]
2842
2842
  name = "proc-macro2"
2843
- version = "1.0.103"
2843
+ version = "1.0.104"
2844
2844
  source = "registry+https://github.com/rust-lang/crates.io-index"
2845
- checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
2845
+ checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0"
2846
2846
  dependencies = [
2847
2847
  "unicode-ident",
2848
2848
  ]
@@ -3053,9 +3053,9 @@ dependencies = [
3053
3053
 
3054
3054
  [[package]]
3055
3055
  name = "redox_syscall"
3056
- version = "0.6.0"
3056
+ version = "0.7.0"
3057
3057
  source = "registry+https://github.com/rust-lang/crates.io-index"
3058
- checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5"
3058
+ checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27"
3059
3059
  dependencies = [
3060
3060
  "bitflags 2.10.0",
3061
3061
  ]
@@ -3256,9 +3256,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
3256
3256
 
3257
3257
  [[package]]
3258
3258
  name = "ryu"
3259
- version = "1.0.21"
3259
+ version = "1.0.22"
3260
3260
  source = "registry+https://github.com/rust-lang/crates.io-index"
3261
- checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea"
3261
+ checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984"
3262
3262
 
3263
3263
  [[package]]
3264
3264
  name = "same-file"
@@ -3298,9 +3298,9 @@ dependencies = [
3298
3298
 
3299
3299
  [[package]]
3300
3300
  name = "schemars"
3301
- version = "1.1.0"
3301
+ version = "1.2.0"
3302
3302
  source = "registry+https://github.com/rust-lang/crates.io-index"
3303
- checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289"
3303
+ checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2"
3304
3304
  dependencies = [
3305
3305
  "dyn-clone",
3306
3306
  "ref-cast",
@@ -3409,9 +3409,9 @@ dependencies = [
3409
3409
 
3410
3410
  [[package]]
3411
3411
  name = "serde_json"
3412
- version = "1.0.147"
3412
+ version = "1.0.148"
3413
3413
  source = "registry+https://github.com/rust-lang/crates.io-index"
3414
- checksum = "6af14725505314343e673e9ecb7cd7e8a36aa9791eb936235a3567cc31447ae4"
3414
+ checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da"
3415
3415
  dependencies = [
3416
3416
  "itoa",
3417
3417
  "memchr",
@@ -3473,7 +3473,7 @@ dependencies = [
3473
3473
  "indexmap 1.9.3",
3474
3474
  "indexmap 2.12.1",
3475
3475
  "schemars 0.9.0",
3476
- "schemars 1.1.0",
3476
+ "schemars 1.2.0",
3477
3477
  "serde_core",
3478
3478
  "serde_json",
3479
3479
  "serde_with_macros",
@@ -3543,10 +3543,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
3543
3543
 
3544
3544
  [[package]]
3545
3545
  name = "signal-hook-registry"
3546
- version = "1.4.7"
3546
+ version = "1.4.8"
3547
3547
  source = "registry+https://github.com/rust-lang/crates.io-index"
3548
- checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad"
3548
+ checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
3549
3549
  dependencies = [
3550
+ "errno",
3550
3551
  "libc",
3551
3552
  ]
3552
3553
 
@@ -5675,9 +5676,9 @@ dependencies = [
5675
5676
 
5676
5677
  [[package]]
5677
5678
  name = "zmij"
5678
- version = "0.1.7"
5679
+ version = "1.0.0"
5679
5680
  source = "registry+https://github.com/rust-lang/crates.io-index"
5680
- checksum = "9e404bcd8afdaf006e529269d3e85a743f9480c3cef60034d77860d02964f3ba"
5681
+ checksum = "e6d6085d62852e35540689d1f97ad663e3971fc19cf5eceab364d62c646ea167"
5681
5682
 
5682
5683
  [[package]]
5683
5684
  name = "zvariant"
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
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(`
1
+ import{Command as wr}from"commander";import*as h from"@clack/prompts";import fo from"picocolors";var P="https://app.vibingbase.com";import{createAuthClient as io}from"better-auth/client";import{adminClient as no,organizationClient as ao}from"better-auth/client/plugins";var B="https://api.vibingbase.com";import{readFile as oo}from"node:fs/promises";import to from"node:path";import{homedir as Kt}from"node:os";import Qt from"node:path";var D=Qt.join(Kt(),".vibingbase");var z=to.join(D,"auth.json");import{z as ct}from"zod";var dt=ct.object({token:ct.string().nullish(),activeOrganizationId:ct.string().nullish()});async function k(){try{let t=await oo(z,"utf8");return dt.parse(JSON.parse(t))}catch{return{}}}async function F(){return((await k()).activeOrganizationId??"")||void 0}async function gt(){return((await k()).token??"")||void 0}import{mkdir as ro,writeFile as eo}from"node:fs/promises";async function _(t){await ro(D,{recursive:!0}),await eo(z,JSON.stringify(t))}async function q(t){let o=await k();await _({...o,token:(t??"")||void 0})}var d=io({baseURL:B,basePath:"/v1/auth",plugins:[no(),ao()],fetchOptions:{throw:!0,auth:{type:"Bearer",token:gt},onRequest:async t=>{let o=await F();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 q(o)}}});import*as T from"@clack/prompts";import*as wt from"@clack/prompts";var m="Thanks for using Vibingbase!";function c(){wt.outro(m),process.exit(0)}import*as vt from"@clack/prompts";import{createServer as so}from"node:http";import po from"open";import*as ht from"@clack/prompts";function G(t){ht.note(`
2
2
  Email: ${t.user.email}
3
3
  Name: ${t.user.name}
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();
4
+ `.trim(),"Account")}async function mo(t,o){let i=new URL(t.url??"","http://localhost").searchParams.get("token");i&&await q(i);let e=new URL(`${P}/continue`);e.searchParams.set("event","authorized-cli");let a=await d.getSession();return a||e.searchParams.set("error","Failed to get auth session"),o.writeHead(302,{location:e.toString()}),o.end(),a}async function co(t){let o=t.address();if(typeof o!="object"||!o)throw new Error("Failed to get auth address");let r=new URL(`${P}/authorize-cli`);r.searchParams.set("port",o.port.toString());let i=r.toString();return await po(i),i}async function Y(t){return t.start("Opening browser for authentication..."),new Promise((o,r)=>{let i=so((e,a)=>{e.method==="GET"?mo(e,a).then(n=>{n&&(o(n),i.close(),t.stop("Signed in!"),G(n))}).catch(n=>{r(n),i.close()}):(a.writeHead(405),a.end())});i.listen(0,"localhost",()=>{co(i).then(e=>{t.stop("Opened browser for authentication!"),vt.note(`URL: ${e}`,"Authentication"),t.start("Waiting for authentication...")}).catch(e=>{r(e),i.close()})})})}async function y(t,o){let r=await d.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 Y(t),!1]}var H="Change your current Vibingbase workspace";async function ft(t){let o=await k();await _({...o,activeOrganizationId:(t??"")||void 0})}var bt="Current";async function kt(){h.intro(fo.bold(H));let t=h.spinner();await y(t,!0),t.start("Loading workspaces...");let[o,r]=await Promise.all([d.organization.list(),F()]);t.stop(`Go to ${P} to create and manage your workspaces!`),o.length===0&&(r&&await ft(null),h.log.error("Personal workspace is your only workspace!"),c());let i=[{value:void 0,label:"Personal workspace",hint:r?void 0:bt},...o.map(a=>({value:a.id,label:a.name,hint:a.id===r?bt:void 0}))],e=await h.select({message:"Select a workspace:",initialValue:r,options:i});h.isCancel(e)&&c(),await ft(e),h.outro(m)}import*as p from"@clack/prompts";import{capitalCase as So}from"change-case";import{existsSync as Io}from"node:fs";import{rm as $o}from"node:fs/promises";import U from"node:path";import Po from"picocolors";var X="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 uo}from"node:child_process";import{promisify as lo}from"node:util";var O=lo(uo);import{customAlphabet as go}from"nanoid";var wo="0123456789abcdefghijklmnopqrstuvwxyz",xt=go(wo);function ho(t){switch(t){case"install":case"start":return!1;default:return!0}}function Ct(t,o){let r=t==="npm"&&ho(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 vo from"ejs";import{copyFile as bo,mkdir as ko,readdir as yo,readFile as xo,writeFile as Co}from"node:fs/promises";import It from"node:path";var $t=".template";async function ut(t,o,r){await ko(o,{recursive:!0});let i=await yo(t,{withFileTypes:!0});await Promise.all(i.map(async e=>{let a=e.name.endsWith($t),n=It.join(t,e.name),s=It.join(o,a?e.name.slice(0,-$t.length):e.name);if(e.isDirectory())await ut(n,s,r);else if(a){let f=await xo(n,"utf8");await Co(s,vo.render(f,r))}else await bo(n,s)}))}function Pt(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 Z="https://www.vibingbase.com";async function Vt(t){p.intro(Po.bold(X));let o="my-app",r=await p.text({message:"Directory name:",placeholder:o,defaultValue:o,initialValue:o,validate:jt});p.isCancel(r)&&c();let i=r.trim(),e=U.isAbsolute(i)?i:U.join(t.cwd,i);if(Io(e)){let S=await p.confirm({message:"Overwrite existing directory?",initialValue:!1});(p.isCancel(S)||!S)&&c(),await $o(e,{recursive:!0,force:!0})}let a=So(U.basename(i)),n=await p.text({message:"App name:",placeholder:a,defaultValue:a,initialValue:a,validate:Pt});p.isCancel(n)&&c();let s=n.trim(),f=await p.confirm({message:"Use Tailwind CSS?",initialValue:!0});p.isCancel(f)&&c();let u=await p.select({message:"Package manager:",initialValue:yt(),options:[{value:"npm",label:"npm"},{value:"pnpm",label:"pnpm"},{value:"yarn",label:"yarn"},{value:"bun",label:"bun"}]});p.isCancel(u)&&c();let l=p.spinner();l.start("Generating project files..."),await ut(U.join(import.meta.dirname,"..","assets",f?"tailwind":"default"),e,{websiteURL:Z,name:s,id:xt(),version:"1.0.0",exec:St(u)}),l.stop("Generated project files!"),l.start(`Installing ${u} dependencies...`),await O(`${u} install`,{cwd:e}),l.stop(`Installed ${u} dependencies!`),l.start("Installing cargo dependencies..."),await O("cargo fetch",{cwd:U.join(e,"src-tauri")}),l.stop("Installed cargo dependencies!"),l.start("Initializing Git..."),await O("git init",{cwd:e}),await O("git add .",{cwd:e}),await O('git commit -m "Initialize repository with Vibingbase CLI"',{cwd:e}),l.stop("Initialized Git!"),p.note(`cd ${i}
5
+ ${Ct(u,"dev")}`,"Next steps"),p.outro(m)}import*as v from"@clack/prompts";import Vo from"picocolors";import{rm as jo}from"node:fs/promises";async function K(){await jo(z,{force:!0})}var Q="Sign in to your Vibingbase account";async function zt(){v.intro(Vo.bold(Q));let t=await d.getSession();if(t){v.log.warn(`You're already signed in as ${t.user.email}!`);let r=await v.confirm({message:"Sign in with a different account?",initialValue:!1});(v.isCancel(r)||!r)&&c(),await d.signOut(),await K()}let o=v.spinner();await Y(o),v.outro(m)}import*as g from"@clack/prompts";import zo from"picocolors";var tt="Sign out of your Vibingbase account";async function Ft(){g.intro(zo.bold(tt));let t=g.spinner(),[o]=await y(t,!1);if(!o){g.log.info("You're already signed out!"),g.outro(m);return}let r=await g.confirm({message:`Sign out of ${o.user.email}?`,initialValue:!1});(g.isCancel(r)||!r)&&c(),t.start("Signing out..."),await d.signOut(),await K(),t.stop("Signed out!"),g.outro(m)}import*as R from"@clack/prompts";import _o from"archiver";import{globby as qo}from"globby";import{createWriteStream as Go}from"node:fs";import{lstat as Yo,readlink as Ho,stat as Xo}from"node:fs/promises";import lt from"node:path";import Zo from"picocolors";import{readFile as Fo}from"node:fs/promises";async function Tt(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:[`${Z}/v1/updater/app-${o}`]},JSON.stringify(r,void 0,2)}var ot="Create a publishable ZIP file";import et from"node:path";import{existsSync as Ao}from"node:fs";import{readFile as Ro}from"node:fs/promises";import{parse as Lo}from"smol-toml";import{z as rt}from"zod";import To from"semver";import{z as Oo}from"zod";var I=Oo.string().refine(t=>!!To.valid(t),"Expected: valid semver");var Ot=rt.object({package:rt.array(rt.object({name:rt.string(),version:I}))});async function At(t){if(!Ao(t))throw new Error("Failed to find src-tauri/Cargo.lock");return Ot.parse(Lo(await Ro(t,"utf8")))}import{existsSync as Mo}from"node:fs";import{readFile as Uo}from"node:fs/promises";import{parse as Eo}from"smol-toml";import{z as E}from"zod";var Rt=E.object({package:E.object({name:E.string().regex(/^app_(.+)_package$/,"Expected: app_<id>_package"),version:I}),lib:E.object({name:E.string().regex(/^app_(.+)_lib$/,"Expected: app_<id>_lib")})});async function Lt(t){if(!Mo(t))throw new Error("Failed to find src-tauri/Cargo.toml");return Rt.parse(Eo(await Uo(t,"utf8")))}import{existsSync as Wo}from"node:fs";import{readFile as Jo}from"node:fs/promises";import{z as No}from"zod";var Mt=No.object({version:I});async function Ut(t){if(!Wo(t))throw new Error("Failed to find package.json");return Mt.parse(JSON.parse(await Jo(t,"utf8")))}import{existsSync as Bo}from"node:fs";import{readFile as Do}from"node:fs/promises";import{z as Et}from"zod";var Nt=Et.object({identifier:Et.string().regex(/^com\.vibingbase\.app-[a-z0-9]+-dev$/,"Expected: com.vibingbase.app-<id>-dev"),version:I});async function Wt(t){if(!Bo(t))throw new Error("Failed to find src-tauri/tauri.conf.json");return Nt.parse(JSON.parse(await Do(t,"utf8")))}async function A(t){let{cwd:o,versionsMustMatch:r}=t,[i,e,a,n]=await Promise.all([Ut(et.join(o,"package.json")),Lt(et.join(o,"src-tauri","Cargo.toml")),At(et.join(o,"src-tauri","Cargo.lock")),Wt(et.join(o,"src-tauri","tauri.conf.json"))]),s=a.package.find(f=>f.name===e.package.name);if(!s)throw new Error(`Failed to find ${e.package.name} in src-tauri/Cargo.lock`);if(r){let f=[i.version,e.package.version,s.version,n.version];if(new Set(f).size!==1)throw new Error(`Version mismatch: package.json (${i.version}), Cargo.toml (${e.package.version}), Cargo.lock (${s.version}), tauri.conf.json (${n.version})`)}return{packageJson:i,cargoToml:e,cargoLock:a,tauriConfig:n,appId:e.package.name.replace(/^app_(.+)_package$/,"$1")}}async function Jt(t){R.intro(Zo.bold(ot));let o=lt.resolve(t.cwd),r=R.spinner(),{appId:i}=await A({cwd:o,versionsMustMatch:!0}),e=lt.join(o,`${i}.zip`);r.start(`Creating ${i}.zip...`);let a=Go(e),n=_o("zip",{zlib:{level:9}}),s=new Promise((C,j)=>{a.on("close",C),n.on("error",j)});n.pipe(a);let f=await qo("**/*",{cwd:o,ignore:["**/.git"],gitignore:!0,dot:!0,onlyFiles:!1,followSymbolicLinks:!1});for(let C of f){let j=lt.join(o,C),V=await Yo(j);if(V.isSymbolicLink()){let J=await Ho(j);n.symlink(C,J,V.mode)}else if(V.isFile()){let J={name:C,stats:V,date:V.mtime,mode:V.mode};if(C==="src-tauri/tauri.conf.json"){let Zt=await Tt(j,i);n.append(Zt,J)}else n.file(j,J)}}await n.finalize(),await s;let l=(await Xo(e)).size/1024/1024,S=l.toFixed(2);if(l>100)throw new Error(`Package exceeds 100 MB limit: ${S} MB`);r.stop(`Created ${i}.zip (${S} MB)`),R.outro(m)}import*as w from"@clack/prompts";import N from"node:path";import ar from"picocolors";import nt from"semver";var it="Bump current app version";import{readFile as Ko,writeFile as Qo}from"node:fs/promises";async function Bt(t,o,r){let i=await Ko(t,"utf8");await Qo(t,i.replace(new RegExp(String.raw`(\[\[package\]\]\s*\nname\s*=\s*"${o}"\s*\nversion\s*=\s*)"[^"]*"`,"m"),`$1"${r}"`))}import{readFile as tr,writeFile as or}from"node:fs/promises";async function Dt(t,o){let r=await tr(t,"utf8");await or(t,r.replace(/^(version\s*=\s*)"[^"]*"/m,`$1"${o}"`))}import{readFile as rr,writeFile as er}from"node:fs/promises";async function _t(t,o){let r=await rr(t,"utf8");await er(t,r.replace(/"version"\s*:\s*"[^"]*"/,`"version": "${o}"`))}import{readFile as ir,writeFile as nr}from"node:fs/promises";async function qt(t,o){let r=await ir(t,"utf8");await nr(t,r.replace(/"version"\s*:\s*"[^"]*"/,`"version": "${o}"`))}async function Gt(t){w.intro(ar.bold(it));let o=N.resolve(t.cwd),{packageJson:r,cargoToml:i}=await A({cwd:o}),e=r.version,a=nt.inc(e,"patch"),n=nt.inc(e,"minor"),s=nt.inc(e,"major"),f=await w.select({message:`Current version: ${e}. Select new version:`,options:[{value:a,label:`Patch (${a})`},{value:n,label:`Minor (${n})`},{value:s,label:`Major (${s})`},{value:"custom",label:"Custom"}]});w.isCancel(f)&&c();let u;if(f==="custom"){let S=await w.text({message:"Enter custom version:",validate:C=>{if(!C)return"Custom version is required";if(!nt.valid(C))return"Custom version must be a valid semver"}});w.isCancel(S)&&c(),u=S}else f?u=f:c();let l=w.spinner();l.start(`Updating version to ${u}...`),await Promise.all([_t(N.join(o,"package.json"),u),Dt(N.join(o,"src-tauri","Cargo.toml"),u),Bt(N.join(o,"src-tauri","Cargo.lock"),i.package.name,u),qt(N.join(o,"src-tauri","tauri.conf.json"),u)]),l.stop(`Updated version to ${u}`),w.outro(m)}import*as $ from"@clack/prompts";import{isTRPCClientError as cr}from"@trpc/client";import fr from"node:path";import ur from"picocolors";import{createTRPCClient as sr,httpBatchLink as pr}from"@trpc/client";import{SuperJSON as mr}from"superjson";var W=sr({links:[pr({url:`${B}/v1/trpc`,transformer:mr,headers:async()=>{let t={},{token:o,activeOrganizationId:r}=await k();return o&&(t.authorization=`Bearer ${o}`),r&&(t["x-active-organization-id"]=r),t}})]});var at="View current app details";async function Yt(t){$.intro(ur.bold(at));let o=fr.resolve(t.cwd),{packageJson:r,appId:i}=await A({cwd:o,versionsMustMatch:!0}),e=$.spinner();await y(e,!0);let a=[`ID: ${i}`,`Current version: ${r.version}`];try{let[n,s]=await Promise.all([W.app.shared.getBasicInfo.query(i),W.app.shared.getPublishInfo.query(i)]);a.push(`Name: ${n.name}`,`Status: ${s.isPublishing?"Publishing":s.publishedAt?"Published":"Unpublished"}`),s.publishedVersion&&a.push(`Published version: ${s.publishedVersion}`)}catch(n){if(!cr(n)||n.data?.code!=="NOT_FOUND")throw n}$.note(a.join(`
6
+ `),"App"),$.outro(m)}import*as x from"@clack/prompts";import lr from"picocolors";var st="View your current Vibingbase workspace";async function Ht(){x.intro(lr.bold(st));let t=x.spinner();await y(t,!0);let[{aggregatedCredits:o,usedCredits:r},i]=await Promise.all([W.workspace.sync.query(),F()]),e="Personal workspace";if(i){let s=(await d.organization.list()).find(f=>f.id===i);s&&(e=s.name)}let a=o-r;x.note(`
7
+ Your workspace has ${a.toLocaleString("en-US")} remaining credits / ${o.toLocaleString("en-US")} total credits (this month)
8
+ `.trim(),e),x.log.info(`Go to ${P} to view and manage your workspace!`),x.outro(m)}import*as L from"@clack/prompts";import dr from"picocolors";var pt="Show your current Vibingbase account";async function Xt(){L.intro(dr.bold(pt));let t=L.spinner(),[o,r]=await y(t,!0);r&&G(o),L.outro(m)}var mt={name:"vibingbase",version:"0.12.43",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 b=new wr;b.name(mt.name).version(mt.version).description(mt.description);b.command("create",{isDefault:!0}).description(X).option("--cwd <path>","Working directory",process.cwd()).action(Vt);b.command("view").description(at).option("--cwd <path>","Working directory",process.cwd()).action(Yt);b.command("version").description(it).option("--cwd <path>","Working directory",process.cwd()).action(Gt);b.command("pack").description(ot).option("--cwd <path>","Working directory",process.cwd()).action(Jt);b.command("login").description(Q).action(zt);b.command("logout").description(tt).action(Ft);b.command("whoami").description(pt).action(Xt);b.command("view-workspace").description(st).action(Ht);b.command("change-workspace").description(H).action(kt);await b.parseAsync();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibingbase",
3
- "version": "0.12.41",
3
+ "version": "0.12.43",
4
4
  "description": "CLI for creating Vibingbase apps",
5
5
  "keywords": [
6
6
  "vibingbase",