@swirls/cli 0.0.16 → 0.0.18

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.
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import{a as o,b as s}from"./chunk-ICDIBMSW.js";import{proposeCompletions as r}from"@stricli/core";var t=process.argv.slice(3);process.env.COMP_LINE?.endsWith(" ")&&t.push("");await r(o,t,s(process));try{for(let{completion:p}of await r(o,t,s(process)))process.stdout.write(`${p}
2
+ import{a as o,b as s}from"./chunk-VHACPEPJ.js";import{proposeCompletions as r}from"@stricli/core";var t=process.argv.slice(3);process.env.COMP_LINE?.endsWith(" ")&&t.push("");await r(o,t,s(process));try{for(let{completion:p}of await r(o,t,s(process)))process.stdout.write(`${p}
3
3
  `)}catch{}
@@ -1 +1 @@
1
- import*as o from"zod";async function l(t,r){await t.fsPromise.stat(r).then(()=>!0).catch(()=>!1)||await t.fsPromise.mkdir(r,{recursive:!0})}function a(t){if(!t.path)throw new Error("No `path` found in context.");if(!t.os)throw new Error("No `os` found in context.");let r=t.os.homedir();return t.path.join(r,".swirls")}var d=o.object({idToken:o.string(),jwt:o.string(),sessionId:o.string()});function c(t){return`${a(t)}/credentials`}async function R(t){let r=c(t);await t.fsPromise.stat(r).then(()=>!0).catch(()=>!1)&&await t.fsPromise.unlink(r)}async function f(t){let r=c(t),n=await t.fsPromise.readFile(r,"utf8");return o.parse(d,JSON.parse(n))}async function U(t,r,n,e){let s=c(t);await l(t,a(t)),await t.fsPromise.writeFile(s,JSON.stringify({idToken:r,jwt:n,sessionId:e}))}import*as i from"zod";var w=i.object({API_URL:i.string(),OAUTH_AUTHORIZE_URL:i.string()}),C={API_URL:"https://api.swirls.ai",OAUTH_AUTHORIZE_URL:"https://clerk.swirls.ai/oauth/authorize"},m=i.parse(w,C);import{withResult as h}from"@byteslice/result";import{createORPCClient as x,onError as y}from"@orpc/client";import{RPCLink as L}from"@orpc/client/fetch";async function I(t){let r=new L({url:`${m.API_URL}/rpc`,headers:async()=>{let e=await h(()=>f(t),u=>new Error("Failed to read credentials file",{cause:u.message}));if(e.failure)return{};let{idToken:s,jwt:p}=e.data;return{Authorization:`Bearer ${p||s}`}},interceptors:[y(e=>{e instanceof Error&&e.name==="AbortError"||console.error(e)})]});return x(r)}export{a,R as b,f as c,U as d,m as e,I as f};
1
+ import*as o from"zod";async function l(t,r){await t.fsPromise.stat(r).then(()=>!0).catch(()=>!1)||await t.fsPromise.mkdir(r,{recursive:!0})}function a(t){if(!t.path)throw new Error("No `path` found in context.");if(!t.os)throw new Error("No `os` found in context.");let r=t.os.homedir();return t.path.join(r,".swirls")}var d=o.object({idToken:o.string(),jwt:o.string(),sessionId:o.string()});function c(t){return`${a(t)}/credentials`}async function R(t){let r=c(t);await t.fsPromise.stat(r).then(()=>!0).catch(()=>!1)&&await t.fsPromise.unlink(r)}async function f(t){let r=c(t),n=await t.fsPromise.readFile(r,"utf8");return o.parse(d,JSON.parse(n))}async function U(t,r,n,e){let s=c(t);await l(t,a(t)),await t.fsPromise.writeFile(s,JSON.stringify({idToken:r,jwt:n,sessionId:e}))}import*as i from"zod";var w=i.object({API_URL:i.string(),OAUTH_AUTHORIZE_URL:i.string()}),C={API_URL:"https://swirls.ai/api",OAUTH_AUTHORIZE_URL:"https://clerk.swirls.ai/oauth/authorize"},m=i.parse(w,C);import{withResult as h}from"@byteslice/result";import{createORPCClient as x,onError as y}from"@orpc/client";import{RPCLink as L}from"@orpc/client/fetch";async function I(t){let r=new L({url:`${m.API_URL}/rpc`,headers:async()=>{let e=await h(()=>f(t),u=>new Error("Failed to read credentials file",{cause:u.message}));if(e.failure)return{};let{idToken:s,jwt:p}=e.data;return{Authorization:`Bearer ${p||s}`}},interceptors:[y(e=>{e instanceof Error&&e.name==="AbortError"||console.error(e)})]});return x(r)}export{a,R as b,f as c,U as d,m as e,I as f};
@@ -1 +1 @@
1
- import{buildInstallCommand as D,buildUninstallCommand as L}from"@stricli/auto-complete";import{buildApplication as I,buildRouteMap as _}from"@stricli/core";import{buildCommand as r,buildRouteMap as m}from"@stricli/core";var f=r({loader:async()=>{let{login:e}=await import("./implementation-26623XVE.js");return e},parameters:{positional:{kind:"tuple",parameters:[]}},docs:{brief:"Log in with an existing account"}}),g=r({loader:async()=>{let{logout:e}=await import("./implementation-26623XVE.js");return e},parameters:{positional:{kind:"tuple",parameters:[]}},docs:{brief:"Log out of an existing account"}}),i=m({routes:{login:f,logout:g},docs:{brief:"Auth commands"}});import{buildCommand as a,buildRouteMap as b}from"@stricli/core";var h=a({loader:async()=>{let{generateCode:e}=await import("./generate-code-OKMZDZXA.js");return e},parameters:{positional:{kind:"tuple",parameters:[]}},docs:{brief:"Generate application code and types"}}),k=a({loader:async()=>{let{initializeConfig:e}=await import("./initialize-config-DKTZP3W4.js");return e},parameters:{positional:{kind:"tuple",parameters:[]}},docs:{brief:"Initialize Swirls configuration file"}}),s=b({routes:{gen:h,init:k},docs:{brief:"Developer commands"}});import{buildCommand as n,buildRouteMap as j}from"@stricli/core";var w=n({loader:async()=>{let{createProject:e}=await import("./create-project-47TMORAD.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Project name",parse:String,placeholder:"name"}]}},docs:{brief:"Create a new project"}}),C=n({loader:async()=>{let{openProject:e}=await import("./open-project-7EVLSYKP.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Project ID",parse:String,placeholder:"project-id"}]}},docs:{brief:"Open project in browser"}}),p=j({routes:{create:w,open:C},docs:{brief:"Project commands"}});import{buildCommand as t,buildRouteMap as S}from"@stricli/core";var y=t({loader:async()=>{let{list:e}=await import("./list-O3YBIAFJ.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Path to list (optional)",parse:String,placeholder:"path",optional:!0}]},flags:{project:{kind:"parsed",brief:"Project ID (uses config if not specified)",parse:String,optional:!0}}},docs:{brief:"List files in storage"}}),x=t({loader:async()=>{let{upload:e}=await import("./upload-L5G6SWZJ.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Local file path to upload",parse:String,placeholder:"file"},{brief:"Destination path in storage (optional)",parse:String,placeholder:"dest",optional:!0}]},flags:{project:{kind:"parsed",brief:"Project ID (uses config if not specified)",parse:String,optional:!0}}},docs:{brief:"Upload a file to storage"}}),P=t({loader:async()=>{let{download:e}=await import("./download-3FOT4FPQ.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Path to file in storage",parse:String,placeholder:"path"},{brief:"Local destination path",parse:String,placeholder:"dest"}]},flags:{project:{kind:"parsed",brief:"Project ID (uses config if not specified)",parse:String,optional:!0}}},docs:{brief:"Download a file from storage"}}),v=t({loader:async()=>{let{deleteFile:e}=await import("./delete-RSC6OYLX.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Path to file in storage",parse:String,placeholder:"path"}]},flags:{project:{kind:"parsed",brief:"Project ID (uses config if not specified)",parse:String,optional:!0}}},docs:{brief:"Delete a file from storage"}}),R=t({loader:async()=>{let{url:e}=await import("./url-LHTDDDUD.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Path to file in storage",parse:String,placeholder:"path"}]},flags:{project:{kind:"parsed",brief:"Project ID (uses config if not specified)",parse:String,optional:!0},expires:{kind:"parsed",brief:"Expiration time in seconds (default: 86400 = 24 hours)",parse:Number,optional:!0}}},docs:{brief:"Get a signed URL for a file"}}),l=S({routes:{list:y,upload:x,download:P,delete:v,url:R},docs:{brief:"Storage commands"}});var c="@swirls/cli",d="0.0.16",u="Swirls command line application";var z=_({routes:{auth:i,dev:s,project:p,storage:l,install:D("cli",{bash:"__cli_bash_complete"}),uninstall:L("cli",{bash:!0})},docs:{brief:u,hideRoute:{install:!0,uninstall:!0}}}),Z=I(z,{name:c,versionInfo:{currentVersion:d}});import M from"fs";import N from"fs/promises";import A from"os";import E from"path";function ae(e){return{fs:M,fsPromise:N,os:A,path:E,process:e}}export{Z as a,ae as b};
1
+ import{buildInstallCommand as D,buildUninstallCommand as L}from"@stricli/auto-complete";import{buildApplication as I,buildRouteMap as _}from"@stricli/core";import{buildCommand as r,buildRouteMap as m}from"@stricli/core";var f=r({loader:async()=>{let{login:e}=await import("./implementation-EXDODHPG.js");return e},parameters:{positional:{kind:"tuple",parameters:[]}},docs:{brief:"Log in with an existing account"}}),g=r({loader:async()=>{let{logout:e}=await import("./implementation-EXDODHPG.js");return e},parameters:{positional:{kind:"tuple",parameters:[]}},docs:{brief:"Log out of an existing account"}}),i=m({routes:{login:f,logout:g},docs:{brief:"Auth commands"}});import{buildCommand as a,buildRouteMap as b}from"@stricli/core";var h=a({loader:async()=>{let{generateCode:e}=await import("./generate-code-L5H45YK4.js");return e},parameters:{positional:{kind:"tuple",parameters:[]}},docs:{brief:"Generate application code and types"}}),k=a({loader:async()=>{let{initializeConfig:e}=await import("./initialize-config-DKTZP3W4.js");return e},parameters:{positional:{kind:"tuple",parameters:[]}},docs:{brief:"Initialize Swirls configuration file"}}),s=b({routes:{gen:h,init:k},docs:{brief:"Developer commands"}});import{buildCommand as n,buildRouteMap as j}from"@stricli/core";var w=n({loader:async()=>{let{createProject:e}=await import("./create-project-4SZY6HDF.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Project name",parse:String,placeholder:"name"}]}},docs:{brief:"Create a new project"}}),C=n({loader:async()=>{let{openProject:e}=await import("./open-project-544S7TXQ.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Project ID",parse:String,placeholder:"project-id"}]}},docs:{brief:"Open project in browser"}}),p=j({routes:{create:w,open:C},docs:{brief:"Project commands"}});import{buildCommand as t,buildRouteMap as S}from"@stricli/core";var y=t({loader:async()=>{let{list:e}=await import("./list-5ZNZIBFA.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Path to list (optional)",parse:String,placeholder:"path",optional:!0}]},flags:{project:{kind:"parsed",brief:"Project ID (uses config if not specified)",parse:String,optional:!0}}},docs:{brief:"List files in storage"}}),x=t({loader:async()=>{let{upload:e}=await import("./upload-NMJWKERQ.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Local file path to upload",parse:String,placeholder:"file"},{brief:"Destination path in storage (optional)",parse:String,placeholder:"dest",optional:!0}]},flags:{project:{kind:"parsed",brief:"Project ID (uses config if not specified)",parse:String,optional:!0}}},docs:{brief:"Upload a file to storage"}}),P=t({loader:async()=>{let{download:e}=await import("./download-IX63ZPH7.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Path to file in storage",parse:String,placeholder:"path"},{brief:"Local destination path",parse:String,placeholder:"dest"}]},flags:{project:{kind:"parsed",brief:"Project ID (uses config if not specified)",parse:String,optional:!0}}},docs:{brief:"Download a file from storage"}}),v=t({loader:async()=>{let{deleteFile:e}=await import("./delete-SDEN2DHA.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Path to file in storage",parse:String,placeholder:"path"}]},flags:{project:{kind:"parsed",brief:"Project ID (uses config if not specified)",parse:String,optional:!0}}},docs:{brief:"Delete a file from storage"}}),R=t({loader:async()=>{let{url:e}=await import("./url-DQSBHBMV.js");return e},parameters:{positional:{kind:"tuple",parameters:[{brief:"Path to file in storage",parse:String,placeholder:"path"}]},flags:{project:{kind:"parsed",brief:"Project ID (uses config if not specified)",parse:String,optional:!0},expires:{kind:"parsed",brief:"Expiration time in seconds (default: 86400 = 24 hours)",parse:Number,optional:!0}}},docs:{brief:"Get a signed URL for a file"}}),l=S({routes:{list:y,upload:x,download:P,delete:v,url:R},docs:{brief:"Storage commands"}});var c="@swirls/cli",d="0.0.18",u="Swirls command line application";var z=_({routes:{auth:i,dev:s,project:p,storage:l,install:D("cli",{bash:"__cli_bash_complete"}),uninstall:L("cli",{bash:!0})},docs:{brief:u,hideRoute:{install:!0,uninstall:!0}}}),Z=I(z,{name:c,versionInfo:{currentVersion:d}});import M from"fs";import N from"fs/promises";import A from"os";import E from"path";function ae(e){return{fs:M,fsPromise:N,os:A,path:E,process:e}}export{Z as a,ae as b};
package/dist/cli.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{a as r,b as o}from"./chunk-ICDIBMSW.js";import{run as i}from"@stricli/core";await i(r,process.argv.slice(2),o(process));
2
+ import{a as r,b as o}from"./chunk-VHACPEPJ.js";import{run as i}from"@stricli/core";await i(r,process.argv.slice(2),o(process));
@@ -1 +1 @@
1
- import{a as u}from"./chunk-KCGRSAKR.js";import{a as f}from"./chunk-RJOLKCKW.js";import{f as c}from"./chunk-R3TGQKBD.js";import{a as p}from"./chunk-OEQFVEK4.js";import{withResult as j}from"@byteslice/result";import{render as b}from"ink";import{Box as i,render as w,Text as x}from"ink";import P from"ink-text-input";import{useState as y}from"react";import{jsx as m,jsxs as a}from"react/jsx-runtime";function C(r){let[o,n]=y(""),e=s=>{let t=s.trim().toLowerCase(),g=t===""||t==="y"||t==="yes";setImmediate(()=>r.onAnswer(g))};return m(i,{flexDirection:"column",children:a(i,{children:[a(x,{children:[r.message," "]}),m(P,{value:o,onChange:n,onSubmit:e})]})})}async function l(r){let{above:o}=r??{};return new Promise(n=>{let e=w(a(i,{flexDirection:"column",children:[o,m(C,{message:"Open project in browser? (Y/n)",onAnswer:s=>{e.unmount(),n(s)}})]}))})}import{jsx as d}from"react/jsx-runtime";async function I(r,o){let n=await c(this),e=await j(()=>n.projects.createProject({name:o}),t=>new Error(`Failed to create project: ${t.message}`,{cause:t}));e.failure&&(b(d(p,{message:e.failure.message})),process.exit(1)),await l({above:d(f,{message:`Success! Created "${o}" project: ${e.data.id}`})})&&await u(e.data)}export{I as createProject};
1
+ import{a as u}from"./chunk-KCGRSAKR.js";import{a as f}from"./chunk-RJOLKCKW.js";import{f as c}from"./chunk-7KXMHQNZ.js";import{a as p}from"./chunk-OEQFVEK4.js";import{withResult as j}from"@byteslice/result";import{render as b}from"ink";import{Box as i,render as w,Text as x}from"ink";import P from"ink-text-input";import{useState as y}from"react";import{jsx as m,jsxs as a}from"react/jsx-runtime";function C(r){let[o,n]=y(""),e=s=>{let t=s.trim().toLowerCase(),g=t===""||t==="y"||t==="yes";setImmediate(()=>r.onAnswer(g))};return m(i,{flexDirection:"column",children:a(i,{children:[a(x,{children:[r.message," "]}),m(P,{value:o,onChange:n,onSubmit:e})]})})}async function l(r){let{above:o}=r??{};return new Promise(n=>{let e=w(a(i,{flexDirection:"column",children:[o,m(C,{message:"Open project in browser? (Y/n)",onAnswer:s=>{e.unmount(),n(s)}})]}))})}import{jsx as d}from"react/jsx-runtime";async function I(r,o){let n=await c(this),e=await j(()=>n.projects.createProject({name:o}),t=>new Error(`Failed to create project: ${t.message}`,{cause:t}));e.failure&&(b(d(p,{message:e.failure.message})),process.exit(1)),await l({above:d(f,{message:`Success! Created "${o}" project: ${e.data.id}`})})&&await u(e.data)}export{I as createProject};
@@ -1 +1 @@
1
- import{a as m}from"./chunk-RJOLKCKW.js";import{a as c}from"./chunk-N2UFNXNM.js";import{f as l}from"./chunk-R3TGQKBD.js";import{a as r}from"./chunk-OEQFVEK4.js";import{withResult as f}from"@byteslice/result";import{render as o}from"ink";import{jsx as s}from"react/jsx-runtime";async function j(n,i){let t=await f(()=>c(n.project),e=>new Error(e.message));t.failure&&(o(s(r,{message:t.failure.message})),process.exit(1));let p=await l(this),a=await f(()=>p.buckets.deleteFile({projectId:t.data,path:i}),e=>new Error(`Failed to delete file: ${e.message}`,{cause:e}));a.failure&&(o(s(r,{message:a.failure.message})),process.exit(1)),o(s(m,{message:`Deleted ${i}`}))}export{j as deleteFile};
1
+ import{a as m}from"./chunk-RJOLKCKW.js";import{a as c}from"./chunk-N2UFNXNM.js";import{f as l}from"./chunk-7KXMHQNZ.js";import{a as r}from"./chunk-OEQFVEK4.js";import{withResult as f}from"@byteslice/result";import{render as o}from"ink";import{jsx as s}from"react/jsx-runtime";async function j(n,i){let t=await f(()=>c(n.project),e=>new Error(e.message));t.failure&&(o(s(r,{message:t.failure.message})),process.exit(1));let p=await l(this),a=await f(()=>p.buckets.deleteFile({projectId:t.data,path:i}),e=>new Error(`Failed to delete file: ${e.message}`,{cause:e}));a.failure&&(o(s(r,{message:a.failure.message})),process.exit(1)),o(s(m,{message:`Deleted ${i}`}))}export{j as deleteFile};
@@ -1 +1 @@
1
- import{a as c}from"./chunk-RJOLKCKW.js";import{a as w}from"./chunk-N2UFNXNM.js";import{f as d}from"./chunk-R3TGQKBD.js";import{a as r}from"./chunk-OEQFVEK4.js";import{writeFile as u}from"fs/promises";import{withResult as a}from"@byteslice/result";import{render as o}from"ink";import{jsx as t}from"react/jsx-runtime";async function D(g,n,f){let s=await a(()=>w(g.project),e=>new Error(e.message));s.failure&&(o(t(r,{message:s.failure.message})),process.exit(1));let p=await d(this),i=await a(()=>p.buckets.createSignedUrl({projectId:s.data,path:n}),e=>new Error(`Failed to get download URL: ${e.message}`,{cause:e}));i.failure&&(o(t(r,{message:i.failure.message})),process.exit(1));let l=await a(async()=>{let e=await fetch(i.data.signedUrl);if(!e.ok)throw new Error(`Download failed: ${e.statusText}`);return e.arrayBuffer()},e=>new Error(`Failed to download file: ${e.message}`,{cause:e}));l.failure&&(o(t(r,{message:l.failure.message})),process.exit(1));let m=await a(()=>u(f,Buffer.from(l.data)),e=>new Error(`Failed to write file: ${e.message}`,{cause:e}));m.failure&&(o(t(r,{message:m.failure.message})),process.exit(1)),o(t(c,{message:`Downloaded ${n} to ${f}`}))}export{D as download};
1
+ import{a as c}from"./chunk-RJOLKCKW.js";import{a as w}from"./chunk-N2UFNXNM.js";import{f as d}from"./chunk-7KXMHQNZ.js";import{a as r}from"./chunk-OEQFVEK4.js";import{writeFile as u}from"fs/promises";import{withResult as a}from"@byteslice/result";import{render as o}from"ink";import{jsx as t}from"react/jsx-runtime";async function D(g,n,f){let s=await a(()=>w(g.project),e=>new Error(e.message));s.failure&&(o(t(r,{message:s.failure.message})),process.exit(1));let p=await d(this),i=await a(()=>p.buckets.createSignedUrl({projectId:s.data,path:n}),e=>new Error(`Failed to get download URL: ${e.message}`,{cause:e}));i.failure&&(o(t(r,{message:i.failure.message})),process.exit(1));let l=await a(async()=>{let e=await fetch(i.data.signedUrl);if(!e.ok)throw new Error(`Download failed: ${e.statusText}`);return e.arrayBuffer()},e=>new Error(`Failed to download file: ${e.message}`,{cause:e}));l.failure&&(o(t(r,{message:l.failure.message})),process.exit(1));let m=await a(()=>u(f,Buffer.from(l.data)),e=>new Error(`Failed to write file: ${e.message}`,{cause:e}));m.failure&&(o(t(r,{message:m.failure.message})),process.exit(1)),o(t(c,{message:`Downloaded ${n} to ${f}`}))}export{D as download};
@@ -1 +1 @@
1
- import{a as g}from"./chunk-Y7H7V3KU.js";import{a as d}from"./chunk-RJOLKCKW.js";import{f as p}from"./chunk-R3TGQKBD.js";import{a as c}from"./chunk-OEQFVEK4.js";import f from"process";import{withResult as l}from"@byteslice/result";import{generateFormsCode as $}from"@swirls/sdk/form/generate";import{render as a}from"ink";import{Box as S,Text as u}from"ink";import L from"ink-spinner";import{jsx as w,jsxs as h}from"react/jsx-runtime";function x(e){return h(S,{children:[w(u,{color:"cyan",children:w(L,{type:"dots"})}),h(u,{children:[" ",e.message]})]})}import{existsSync as E}from"fs";import{resolve as R}from"path";import{configFileName as y,configSchema as T}from"@swirls/sdk/config";import{createJiti as J}from"jiti";async function F(){let e=R(process.cwd(),y);if(!E(e))throw new Error(`Config file not found in project root: ${y}`);let r=await J(import.meta.url).import(e,{default:!0});return T.parse(r)}async function C(e,n){let r=await p(e),{results:i}=await r.forms.listForms({projectId:n});function m(t){return t.schema!=null}return i.filter(m).map(t=>({id:t.id,name:t.name,schema:t.schema}))}import{jsx as s}from"react/jsx-runtime";async function X(){let e=await l(()=>F(),o=>new Error("Failed to load configuration",{cause:o}));e.failure&&(a(s(c,{message:e.failure.message})),f.exit(1));let{projectId:n,genPath:r}=e.data;a(s(x,{message:"Generating form code..."}));let i=await l(async()=>{let o=['// This file was generated by "@swirls/cli dev generate"',"// Do not edit this file manually",""],t=await C(this,n);return $(t,o)},o=>new Error(`Failed to generate form code: ${o.message}`,{cause:o}));i.failure&&(a(s(c,{message:i.failure.message})),f.exit(1));let m=await l(()=>g(r,i.data),o=>new Error("Failed to write code file",{cause:o}));m.failure&&(a(s(c,{message:m.failure.message})),f.exit(1)),a(s(d,{message:`Success! Generated code at ${r}`}))}export{X as generateCode};
1
+ import{a as g}from"./chunk-Y7H7V3KU.js";import{a as d}from"./chunk-RJOLKCKW.js";import{f as p}from"./chunk-7KXMHQNZ.js";import{a as c}from"./chunk-OEQFVEK4.js";import f from"process";import{withResult as l}from"@byteslice/result";import{generateFormsCode as $}from"@swirls/sdk/form/generate";import{render as a}from"ink";import{Box as S,Text as u}from"ink";import L from"ink-spinner";import{jsx as w,jsxs as h}from"react/jsx-runtime";function x(e){return h(S,{children:[w(u,{color:"cyan",children:w(L,{type:"dots"})}),h(u,{children:[" ",e.message]})]})}import{existsSync as E}from"fs";import{resolve as R}from"path";import{configFileName as y,configSchema as T}from"@swirls/sdk/config";import{createJiti as J}from"jiti";async function F(){let e=R(process.cwd(),y);if(!E(e))throw new Error(`Config file not found in project root: ${y}`);let r=await J(import.meta.url).import(e,{default:!0});return T.parse(r)}async function C(e,n){let r=await p(e),{results:i}=await r.forms.listForms({projectId:n});function m(t){return t.schema!=null}return i.filter(m).map(t=>({id:t.id,name:t.name,schema:t.schema}))}import{jsx as s}from"react/jsx-runtime";async function X(){let e=await l(()=>F(),o=>new Error("Failed to load configuration",{cause:o}));e.failure&&(a(s(c,{message:e.failure.message})),f.exit(1));let{projectId:n,genPath:r}=e.data;a(s(x,{message:"Generating form code..."}));let i=await l(async()=>{let o=['// This file was generated by "@swirls/cli dev generate"',"// Do not edit this file manually",""],t=await C(this,n);return $(t,o)},o=>new Error(`Failed to generate form code: ${o.message}`,{cause:o}));i.failure&&(a(s(c,{message:i.failure.message})),f.exit(1));let m=await l(()=>g(r,i.data),o=>new Error("Failed to write code file",{cause:o}));m.failure&&(a(s(c,{message:m.failure.message})),f.exit(1)),a(s(d,{message:`Success! Generated code at ${r}`}))}export{X as generateCode};
@@ -1,4 +1,4 @@
1
- import{a as g}from"./chunk-RJOLKCKW.js";import{a as k,b as v,c as C,d as w,e as b,f as m}from"./chunk-R3TGQKBD.js";import{a as p}from"./chunk-OEQFVEK4.js";import{withResult as s}from"@byteslice/result";import{render as f}from"ink";import R from"http";import{withResult as P}from"@byteslice/result";import*as l from"zod";var A=8765,y=`http://localhost:${A}`,j=l.object({code:l.string(),state:l.string()}),O=`
1
+ import{a as p}from"./chunk-RJOLKCKW.js";import{a as k,b as v,c as C,d as w,e as b,f as g}from"./chunk-7KXMHQNZ.js";import{a as h}from"./chunk-OEQFVEK4.js";import{withResult as n}from"@byteslice/result";import{render as u}from"ink";import R from"http";import{withResult as P}from"@byteslice/result";import*as l from"zod";var A=8765,y=`http://localhost:${A}`,j=l.object({code:l.string(),state:l.string()}),O=`
2
2
  <!DOCTYPE html>
3
3
  <html lang="en">
4
4
  <head>
@@ -37,4 +37,4 @@ import{a as g}from"./chunk-RJOLKCKW.js";import{a as k,b as v,c as C,d as w,e as
37
37
  </div>
38
38
  </body>
39
39
  </html>
40
- `;function Y(e){if(!e.url)throw new Error("No URL found in callback response.");let t=new URL(e.url,y);return l.parse(j,Object.fromEntries(t.searchParams.entries()))}function S(e){e.writeHead(400,{"Content-Type":"text/html"}),e.end(_)}function B(e){e.writeHead(200,{"Content-Type":"text/html"}),e.end(O)}function I(e){return new Promise((t,r)=>{let i=R.createServer(async(a,o)=>{let c=await P(()=>Y(a),d=>d);if(c.failure){S(o),r(c.failure);return}let u=await P(()=>e(c.data),d=>d);if(u.failure){S(o),r(u.failure);return}B(o),i.close(()=>{t()})});i.listen(A)})}import H from"@clerk/clerk-js/headless/index.js";var D=H.Clerk;async function L(e){let t=new D(e);return await t.load({standardBrowser:!1}),t}async function F(e,t){let r=await e.client?.signIn.create({ticket:t,strategy:"ticket"});if(!r||!r.createdSessionId)throw new Error("Failed to sign in.");return{createdSessionId:r.createdSessionId}}import K from"open";function U(e=32){let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",r=new Uint8Array(e);crypto.getRandomValues(r);let i="";for(let a of r)i+=t[a%t.length];return i}function T(e){let t=new URLSearchParams({client_id:e.clientId,redirect_uri:e.redirectUri,response_type:"code",scope:"openid profile email",state:e.state});K(`${e.authorizeUri}?${t}`)}import{Text as M}from"ink";import{jsx as J}from"react/jsx-runtime";function z(e){return J(M,{color:"yellow",children:e.message})}function W(e){return`${k(e)}/project`}async function E(e){let t=W(e);await e.fsPromise.stat(t).then(()=>!0).catch(()=>!1)&&await e.fsPromise.unlink(t)}import{jsx as h}from"react/jsx-runtime";async function $(e,t,r){let i=await s(async()=>await(await m(e)).cli.exchangeToken({code:r.code}),n=>new Error("Failed to exchange callback code for token",{cause:n.message}));if(i.failure)throw i.failure;await w(e,i.data.idToken,"","");let a=await s(async()=>await(await m(e)).cli.createSignInTicket(),n=>new Error("Failed to exchange ID token code for a sign-in ticket",{cause:n.message}));if(a.failure)throw a.failure;let o=await L(t.clerkPublishableKey),c=await s(()=>F(o,a.data.token),n=>new Error("Failed to create a new sign-in for this device",{cause:n.message}));if(c.failure)throw c.failure;let u=await s(async()=>await(await m(e)).cli.createJwt({sessionId:c.data.createdSessionId}),n=>new Error("Failed to create a session JWT",{cause:n.message}));if(u.failure)throw u.failure;let d=await s(()=>w(e,i.data.idToken,u.data,c.data.createdSessionId),n=>new Error("Failed to save your credentials to disk",{cause:n.message}));if(d.failure)throw d.failure}async function ye(){let e=await m(this),t=U(),r=await s(()=>e.cli.getConfig(),a=>a);if(r.failure)throw r.failure;T({authorizeUri:b.OAUTH_AUTHORIZE_URL,clientId:r.data.clientId,redirectUri:y,state:t});let i=await s(()=>I(async a=>{if(a.state!==t)throw new Error("Invalid state.");await $(this,r.data,a)}),a=>a);i.failure&&(f(h(p,{message:i.failure.message})),process.exit(1)),f(h(g,{message:"Success! You are now logged in."}))}async function xe(){let e=await s(()=>C(this),o=>o);e.failure&&(f(h(p,{message:"There was an issue reading your credentials. You are probably already logged out."})),process.exit(1));let t=await m(this),r=await s(()=>t.cli.getConfig(),o=>o);if(r.failure)throw r.failure;(await s(async()=>t.cli.revokeSession({sessionId:e.data.sessionId}),o=>o)).failure&&f(h(z,{message:"There was an issue revoking your session. You are probably already logged out. Purging credentials file..."}));let a=await s(async()=>{await v(this),await E(this)},o=>o);if(a.failure)throw a.failure;f(h(g,{message:"Success! You are now logged out."}))}export{ye as login,xe as logout};
40
+ `;function Y(e){if(!e.url)throw new Error("No URL found in callback response.");let t=new URL(e.url,y);return l.parse(j,Object.fromEntries(t.searchParams.entries()))}function S(e){e.writeHead(400,{"Content-Type":"text/html"}),e.end(_)}function B(e){e.writeHead(200,{"Content-Type":"text/html"}),e.end(O)}function F(e){return new Promise((t,r)=>{let i=R.createServer(async(a,o)=>{let c=await P(()=>Y(a),f=>f);if(c.failure){S(o),r(c.failure);return}let m=await P(()=>e(c.data),f=>f);if(m.failure){S(o),r(m.failure);return}B(o),i.close(()=>{t()})});i.listen(A)})}import H from"@clerk/clerk-js/headless/index.js";var D=H.Clerk;async function I(e){let t=new D(e);return await t.load({standardBrowser:!1}),t}async function L(e,t){let r=await e.client?.signIn.create({ticket:t,strategy:"ticket"});if(!r||!r.createdSessionId)throw new Error("Failed to sign in.");return{createdSessionId:r.createdSessionId}}import K from"open";function U(e=32){let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",r=new Uint8Array(e);crypto.getRandomValues(r);let i="";for(let a of r)i+=t[a%t.length];return i}function T(e){let t=new URLSearchParams({client_id:e.clientId,redirect_uri:e.redirectUri,response_type:"code",scope:"openid profile email",state:e.state});K(`${e.authorizeUri}?${t}`)}import{Text as M}from"ink";import{jsx as J}from"react/jsx-runtime";function E(e){return J(M,{color:"yellow",children:e.message})}function W(e){return`${k(e)}/project`}async function z(e){let t=W(e);await e.fsPromise.stat(t).then(()=>!0).catch(()=>!1)&&await e.fsPromise.unlink(t)}import{jsx as d}from"react/jsx-runtime";async function $(e,t,r){let i=await n(async()=>await(await g(e)).cli.exchangeToken({code:r.code}),s=>new Error("Failed to exchange callback code for token",{cause:s.message}));if(i.failure)throw i.failure;await w(e,i.data.idToken,"","");let a=await n(async()=>await(await g(e)).cli.createSignInTicket(),s=>new Error("Failed to exchange ID token code for a sign-in ticket",{cause:s.message}));if(a.failure)throw a.failure;let o=await I(t.clerkPublishableKey),c=await n(()=>L(o,a.data.token),s=>new Error("Failed to create a new sign-in for this device",{cause:s.message}));if(c.failure)throw c.failure;let m=await n(async()=>await(await g(e)).cli.createJwt({sessionId:c.data.createdSessionId}),s=>new Error("Failed to create a session JWT",{cause:s.message}));if(m.failure)throw m.failure;let f=await n(()=>w(e,i.data.idToken,m.data,c.data.createdSessionId),s=>new Error("Failed to save your credentials to disk",{cause:s.message}));if(f.failure)throw f.failure}async function ye(){let e=await g(this),t=U(),r=await n(()=>e.cli.getConfig(),a=>new Error("Failed to retrieve authentication configuration",{cause:a.message}));r.failure&&(u(d(h,{message:r.failure.message})),process.exit(1)),T({authorizeUri:b.OAUTH_AUTHORIZE_URL,clientId:r.data.clientId,redirectUri:y,state:t});let i=await n(()=>F(async a=>{if(a.state!==t)throw new Error("Invalid state.");await $(this,r.data,a)}),a=>a);i.failure&&(u(d(h,{message:i.failure.message})),process.exit(1)),u(d(p,{message:"Success! You are now logged in."}))}async function xe(){let e=await n(()=>C(this),o=>o);e.failure&&(u(d(h,{message:"There was an issue reading your credentials. You are probably already logged out."})),process.exit(1));let t=await g(this),r=await n(()=>t.cli.getConfig(),o=>new Error("Failed to retrieve authentication configuration",{cause:o.message}));r.failure&&(u(d(h,{message:r.failure.message})),process.exit(1)),(await n(async()=>t.cli.revokeSession({sessionId:e.data.sessionId}),o=>o)).failure&&u(d(E,{message:"There was an issue revoking your session. You are probably already logged out. Purging credentials file..."}));let a=await n(async()=>{await v(this),await z(this)},o=>o);if(a.failure)throw a.failure;u(d(p,{message:"Success! You are now logged out."}))}export{ye as login,xe as logout};
@@ -1 +1 @@
1
- import{a as T}from"./chunk-N2UFNXNM.js";import{f as x}from"./chunk-R3TGQKBD.js";import{a as c}from"./chunk-OEQFVEK4.js";import{withResult as y}from"@byteslice/result";import{render as g}from"ink";import{Box as f,Text as u}from"ink";import{Fragment as B}from"react";import{Fragment as b,jsx as r,jsxs as p}from"react/jsx-runtime";function k(t){return typeof t=="boolean"?t?p(b,{children:[r(u,{color:"green",children:"\u2714"})," yes"]}):"no":String(t)}function C(t,o){return o.map(n=>{let e=n.key in t?k(t[n.key]):null;return{column:n,value:e}})}function D(t,o,n=1){return o.map(e=>{let a=String(e).length,l=t.map(m=>e in m&&(typeof m[e]=="string"||typeof m[e]=="number")?String(m[e]).length:0),s=Math.max(...l,a)+n*2;return{name:String(e),key:e,width:s}})}function d(t){return r(u,{children:Array(t.width).fill("\u2500").join("")})}function w(t){let o=D(t.data,t.keys),n=o.reduce((e,a)=>e+a.width,0);return p(f,{flexDirection:"column",width:n,children:[r(d,{width:n}),r(f,{flexDirection:"row",children:o.map(e=>r(f,{width:e.width,children:r(u,{bold:!0,color:"blue",children:e.name})},e.name))}),r(d,{width:n}),r(f,{flexDirection:"column",children:t.data.map((e,a)=>{let l=C(e,o);return p(B,{children:[r(f,{flexDirection:"row",children:l.map(s=>r(f,{width:s.column.width,children:r(u,{children:s.value})},s.column.name))}),r(d,{width:n})]},`row-${a}`)})})]})}import{jsx as h}from"react/jsx-runtime";async function v(t,o){let n=await y(()=>T(t.project),i=>new Error(i.message));n.failure&&(g(h(c,{message:n.failure.message})),process.exit(1));let e=await x(this),a=await y(()=>e.buckets.listFiles({projectId:n.data,path:o}),i=>new Error(`Failed to list files: ${i.message}`,{cause:i}));a.failure&&(g(h(c,{message:a.failure.message})),process.exit(1));let{files:l,folders:s}=a.data;if(s.length===0&&l.length===0){console.log("No files or folders found.");return}let m=[...s.map(i=>({type:"folder",name:i.name,size:"-"})),...l.map(i=>({type:"file",name:i.name,size:i.size?F(i.size):"-"}))];g(h(w,{keys:["type","name","size"],data:m}))}function F(t){if(t===0)return"0 B";let o=1024,n=["B","KB","MB","GB","TB"],e=Math.floor(Math.log(t)/Math.log(o));return`${parseFloat((t/o**e).toFixed(2))} ${n[e]}`}export{v as list};
1
+ import{a as T}from"./chunk-N2UFNXNM.js";import{f as x}from"./chunk-7KXMHQNZ.js";import{a as c}from"./chunk-OEQFVEK4.js";import{withResult as y}from"@byteslice/result";import{render as g}from"ink";import{Box as f,Text as u}from"ink";import{Fragment as B}from"react";import{Fragment as b,jsx as r,jsxs as p}from"react/jsx-runtime";function k(t){return typeof t=="boolean"?t?p(b,{children:[r(u,{color:"green",children:"\u2714"})," yes"]}):"no":String(t)}function C(t,o){return o.map(n=>{let e=n.key in t?k(t[n.key]):null;return{column:n,value:e}})}function D(t,o,n=1){return o.map(e=>{let a=String(e).length,l=t.map(m=>e in m&&(typeof m[e]=="string"||typeof m[e]=="number")?String(m[e]).length:0),s=Math.max(...l,a)+n*2;return{name:String(e),key:e,width:s}})}function d(t){return r(u,{children:Array(t.width).fill("\u2500").join("")})}function w(t){let o=D(t.data,t.keys),n=o.reduce((e,a)=>e+a.width,0);return p(f,{flexDirection:"column",width:n,children:[r(d,{width:n}),r(f,{flexDirection:"row",children:o.map(e=>r(f,{width:e.width,children:r(u,{bold:!0,color:"blue",children:e.name})},e.name))}),r(d,{width:n}),r(f,{flexDirection:"column",children:t.data.map((e,a)=>{let l=C(e,o);return p(B,{children:[r(f,{flexDirection:"row",children:l.map(s=>r(f,{width:s.column.width,children:r(u,{children:s.value})},s.column.name))}),r(d,{width:n})]},`row-${a}`)})})]})}import{jsx as h}from"react/jsx-runtime";async function v(t,o){let n=await y(()=>T(t.project),i=>new Error(i.message));n.failure&&(g(h(c,{message:n.failure.message})),process.exit(1));let e=await x(this),a=await y(()=>e.buckets.listFiles({projectId:n.data,path:o}),i=>new Error(`Failed to list files: ${i.message}`,{cause:i}));a.failure&&(g(h(c,{message:a.failure.message})),process.exit(1));let{files:l,folders:s}=a.data;if(s.length===0&&l.length===0){console.log("No files or folders found.");return}let m=[...s.map(i=>({type:"folder",name:i.name,size:"-"})),...l.map(i=>({type:"file",name:i.name,size:i.size?F(i.size):"-"}))];g(h(w,{keys:["type","name","size"],data:m}))}function F(t){if(t===0)return"0 B";let o=1024,n=["B","KB","MB","GB","TB"],e=Math.floor(Math.log(t)/Math.log(o));return`${parseFloat((t/o**e).toFixed(2))} ${n[e]}`}export{v as list};
@@ -1 +1 @@
1
- import{a as i}from"./chunk-KCGRSAKR.js";import"./chunk-RJOLKCKW.js";import{f as r}from"./chunk-R3TGQKBD.js";import{a as e}from"./chunk-OEQFVEK4.js";import{withResult as m}from"@byteslice/result";import{render as a}from"ink";import{jsx as n}from"react/jsx-runtime";async function d(p,s){let c=await r(this),t=await m(()=>c.projects.getProject({projectId:s}),o=>new Error(`Failed to get project: ${o.message}`,{cause:o}));t.failure&&(a(n(e,{message:t.failure.message})),process.exit(1)),t.data||(a(n(e,{message:"Project not found."})),process.exit(1)),await i(t.data)}export{d as openProject};
1
+ import{a as i}from"./chunk-KCGRSAKR.js";import"./chunk-RJOLKCKW.js";import{f as r}from"./chunk-7KXMHQNZ.js";import{a as e}from"./chunk-OEQFVEK4.js";import{withResult as m}from"@byteslice/result";import{render as a}from"ink";import{jsx as n}from"react/jsx-runtime";async function d(p,s){let c=await r(this),t=await m(()=>c.projects.getProject({projectId:s}),o=>new Error(`Failed to get project: ${o.message}`,{cause:o}));t.failure&&(a(n(e,{message:t.failure.message})),process.exit(1)),t.data||(a(n(e,{message:"Project not found."})),process.exit(1)),await i(t.data)}export{d as openProject};
@@ -1 +1 @@
1
- import{a as g}from"./chunk-RJOLKCKW.js";import{a as u}from"./chunk-N2UFNXNM.js";import{f}from"./chunk-R3TGQKBD.js";import{a as t}from"./chunk-OEQFVEK4.js";import{readFile as h}from"fs/promises";import{basename as x}from"path";import{withResult as r}from"@byteslice/result";import{render as a}from"ink";import{jsx as o}from"react/jsx-runtime";async function L(w,p,m){let s=await r(()=>u(w.project),e=>new Error(e.message));s.failure&&(a(o(t,{message:s.failure.message})),process.exit(1));let i=await r(()=>h(p),e=>new Error(`Failed to read file: ${e.message}`,{cause:e}));i.failure&&(a(o(t,{message:i.failure.message})),process.exit(1));let l=x(p),d=m?`${m}/${l}`:l,U=await f(this),n=await r(()=>U.buckets.createSignedUploadUrl({projectId:s.data,path:d}),e=>new Error(`Failed to get upload URL: ${e.message}`,{cause:e}));n.failure&&(a(o(t,{message:n.failure.message})),process.exit(1));let c=await r(async()=>{let e=await fetch(n.data.signedUrl,{method:"PUT",headers:{"Content-Type":"application/octet-stream","x-upsert":"true"},body:i.data});if(!e.ok)throw new Error(`Upload failed: ${e.statusText}`);return e},e=>new Error(`Failed to upload file: ${e.message}`,{cause:e}));c.failure&&(a(o(t,{message:c.failure.message})),process.exit(1)),a(o(g,{message:`Uploaded ${l} to ${d}`}))}export{L as upload};
1
+ import{a as g}from"./chunk-RJOLKCKW.js";import{a as u}from"./chunk-N2UFNXNM.js";import{f}from"./chunk-7KXMHQNZ.js";import{a as t}from"./chunk-OEQFVEK4.js";import{readFile as h}from"fs/promises";import{basename as x}from"path";import{withResult as r}from"@byteslice/result";import{render as a}from"ink";import{jsx as o}from"react/jsx-runtime";async function L(w,p,m){let s=await r(()=>u(w.project),e=>new Error(e.message));s.failure&&(a(o(t,{message:s.failure.message})),process.exit(1));let i=await r(()=>h(p),e=>new Error(`Failed to read file: ${e.message}`,{cause:e}));i.failure&&(a(o(t,{message:i.failure.message})),process.exit(1));let l=x(p),d=m?`${m}/${l}`:l,U=await f(this),n=await r(()=>U.buckets.createSignedUploadUrl({projectId:s.data,path:d}),e=>new Error(`Failed to get upload URL: ${e.message}`,{cause:e}));n.failure&&(a(o(t,{message:n.failure.message})),process.exit(1));let c=await r(async()=>{let e=await fetch(n.data.signedUrl,{method:"PUT",headers:{"Content-Type":"application/octet-stream","x-upsert":"true"},body:i.data});if(!e.ok)throw new Error(`Upload failed: ${e.statusText}`);return e},e=>new Error(`Failed to upload file: ${e.message}`,{cause:e}));c.failure&&(a(o(t,{message:c.failure.message})),process.exit(1)),a(o(g,{message:`Uploaded ${l} to ${d}`}))}export{L as upload};
@@ -1 +1 @@
1
- import{a as m}from"./chunk-RJOLKCKW.js";import{a as n}from"./chunk-N2UFNXNM.js";import{f as c}from"./chunk-R3TGQKBD.js";import{a as s}from"./chunk-OEQFVEK4.js";import{withResult as p}from"@byteslice/result";import{render as o}from"ink";import{jsx as i}from"react/jsx-runtime";async function j(a,l){let t=await p(()=>n(a.project),r=>new Error(r.message));t.failure&&(o(i(s,{message:t.failure.message})),process.exit(1));let g=await c(this),e=await p(()=>g.buckets.createSignedUrl({projectId:t.data,path:l,expiresIn:a.expires}),r=>new Error(`Failed to create signed URL: ${r.message}`,{cause:r}));e.failure&&(o(i(s,{message:e.failure.message})),process.exit(1)),console.log(e.data.signedUrl),o(i(m,{message:`URL expires at ${e.data.expiresAt}`}))}export{j as url};
1
+ import{a as m}from"./chunk-RJOLKCKW.js";import{a as n}from"./chunk-N2UFNXNM.js";import{f as c}from"./chunk-7KXMHQNZ.js";import{a as s}from"./chunk-OEQFVEK4.js";import{withResult as p}from"@byteslice/result";import{render as o}from"ink";import{jsx as i}from"react/jsx-runtime";async function j(a,l){let t=await p(()=>n(a.project),r=>new Error(r.message));t.failure&&(o(i(s,{message:t.failure.message})),process.exit(1));let g=await c(this),e=await p(()=>g.buckets.createSignedUrl({projectId:t.data,path:l,expiresIn:a.expires}),r=>new Error(`Failed to create signed URL: ${r.message}`,{cause:r}));e.failure&&(o(i(s,{message:e.failure.message})),process.exit(1)),console.log(e.data.signedUrl),o(i(m,{message:`URL expires at ${e.data.expiresAt}`}))}export{j as url};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swirls/cli",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "description": "Swirls command line application",
5
5
  "author": {
6
6
  "name": "Swirls",
@@ -31,7 +31,7 @@
31
31
  "@orpc/contract": "1.12.2",
32
32
  "@stricli/auto-complete": "1.2.4",
33
33
  "@stricli/core": "1.2.4",
34
- "@swirls/sdk": "0.0.3",
34
+ "@swirls/sdk": "0.0.4",
35
35
  "ink": "6.4.0",
36
36
  "ink-select-input": "6.2.0",
37
37
  "ink-spinner": "5.0.0",