UNPKG

vibestack

Version:

Easily add instructions, cheat sheets and rules for your favorite tools tailored for your framework.

3 lines 6.3 kB
#!/usr/bin/env node import{Command as A}from"commander";import{Command as F}from"commander";var g=new F().name("init").description("Initialize vibestack in your project").action(()=>{console.log("Work in progress. Coming soon!")});import{Command as v}from"commander";import x from"prompts";import i from"kleur";import k from"ora";var d=[{category:"storage",name:"edgestore",files:[{frameworks:"tanstack-react-start",name:"edgestore-setup.md",url:"https://vibestack.app/r/storage/edgestore/start-setup.md"},{frameworks:"nextjs",name:"edgestore-setup.md",url:"https://vibestack.app/r/storage/edgestore/nextjs-setup.md"},{frameworks:"_all",name:"edgestore-components.md",url:"https://vibestack.app/r/storage/edgestore/components.md"},{frameworks:"_all",name:"edgestore-cheat-sheet.md",url:"https://vibestack.app/r/storage/edgestore/cheat-sheet.md"}]},{category:"auth",name:"better-auth",files:[{frameworks:"nextjs",name:"better-auth-setup.md",url:"https://vibestack.app/r/nextjs/auth/better-auth-setup.md"},{frameworks:"tanstack-react-start",name:"better-auth-setup.md",url:"https://vibestack.app/r/tanstack-react-start/auth/better-auth-setup.md"}]},{category:"database",name:"drizzle",files:[{frameworks:"nextjs",name:"drizzle-setup.md",url:"https://vibestack.app/r/nextjs/database/drizzle-setup.md"},{frameworks:"nextjs",name:"drizzle-cheatsheet.md",url:"https://vibestack.app/r/nextjs/database/drizzle-cheatsheet.md"},{frameworks:"tanstack-react-start",name:"drizzle-setup.md",url:"https://vibestack.app/r/tanstack-react-start/database/drizzle-setup.md"},{frameworks:"tanstack-react-start",name:"drizzle-cheatsheet.md",url:"https://vibestack.app/r/tanstack-react-start/database/drizzle-cheatsheet.md"}]},{category:"payments",name:"stripe",files:[{frameworks:"nextjs",name:"stripe-setup.md",url:"https://vibestack.app/r/nextjs/payments/stripe-setup.md"}]},{category:"ai",name:"ai-sdk-setup",files:[{frameworks:"tanstack-react-start",name:"ai-sdk-setup.md",url:"https://vibestack.app/r/tanstack-react-start/ai/ai-sdk-setup.md"}]}];import f from"fs/promises";import u from"path";import h from"node-fetch";import{z as l}from"zod";var $=l.string().url(),C=l.object({frameworks:l.union([l.string(),l.array(l.string()),l.literal("_all")]),name:l.string(),url:l.string().url()}),z=l.object({category:l.string(),name:l.string(),files:l.array(C)});async function m(t,a){return(await x({type:"select",name:"value",message:t,choices:a})).value||null}async function j(){let a=[...new Set(d.map(e=>e.category))].map(e=>({title:e==="storage"?e:`${e} (coming soon)`,value:e,disabled:e!=="storage"})),r=await m("Choose a category",a);return console.log(r?i.green(`Selected category: ${r}`):i.yellow("No category selected. Exiting...")),r}async function S(t){let a=d.filter(o=>o.category===t);if(a.length===0)return console.log(i.yellow(`No tools found for category: ${t}`)),null;let r=a.map(o=>({title:o.name,value:o})),e=await m("Choose a tool",r);return console.log(e?i.green(`Selected tool: ${e.name}`):i.yellow("No tool selected. Exiting...")),e}async function V(t){if(t.files.length===1)return[t.files[0]];let a=new Set;t.files.forEach(e=>{Array.isArray(e.frameworks)?e.frameworks.forEach(o=>a.add(o)):e.frameworks!=="_all"&&a.add(e.frameworks)});let r=[...a];if(r.length>1){let e=r.map(n=>({title:n,value:n})),o=await m("Choose a framework",e);if(!o)return console.log(i.yellow("No framework selected. Exiting...")),null;console.log(i.green(`Selected framework: ${o}`));let s=t.files.filter(n=>n.frameworks==="_all"?!0:Array.isArray(n.frameworks)?n.frameworks.includes(o):n.frameworks===o);return s.length>0?s:null}return t.files}async function p(t,a){let r=k(`Downloading ${t.name}...`).start();try{let e=await h(t.url);if(!e.ok)return r.fail(`Failed to download file: ${e.statusText} (${t.url})`),!1;let o=await e.text(),s=u.join(a,t.name);return await f.writeFile(s,o),r.succeed(`File downloaded and saved to ${i.cyan(s)}`),!0}catch(e){return r.fail(`Failed to download file: ${e.message}`),!1}}async function E(t){let a=k(`Fetching configuration from ${t}...`).start();try{$.parse(t);let r=await h(t);if(!r.ok)return a.fail(`Failed to fetch configuration: ${r.statusText}`),null;let e=await r.json(),o=z.parse(e);return a.succeed("Configuration fetched successfully"),o}catch(r){return r.name==="ZodError"?a.fail(`Invalid configuration format: ${r.message}`):a.fail(`Failed to fetch configuration: ${r.message}`),null}}async function w(t){if(console.log(i.green(`Processing ${t.name} in category ${t.category}`)),t.files.length===1){let s=[t.files[0]];console.log(i.green(`Selected file: ${s[0].name}`));let n=u.join(process.cwd(),"vibes",t.category,t.name);await f.mkdir(n,{recursive:!0}),await p(s[0],n);return}let a=new Set;t.files.forEach(s=>{Array.isArray(s.frameworks)?s.frameworks.forEach(n=>a.add(n)):s.frameworks!=="_all"&&a.add(s.frameworks)});let r=[...a],e=[];if(r.length>1){let s=r.map(c=>({title:c,value:c})),n=await m("Choose a framework",s);if(!n){console.log(i.yellow("No framework selected. Exiting..."));return}console.log(i.green(`Selected framework: ${n}`)),e=t.files.filter(c=>c.frameworks==="_all"?!0:Array.isArray(c.frameworks)?c.frameworks.includes(n):c.frameworks===n)}else e=t.files;if(e.length===0){console.log(i.yellow("No files found for the selected framework. Exiting..."));return}console.log(i.green(`Selected ${e.length} file(s): ${e.map(s=>s.name).join(", ")}`));let o=u.join(process.cwd(),"vibes",t.category,t.name);await f.mkdir(o,{recursive:!0});for(let s of e)await p(s,o)}var y=new v().name("add").description("Add instructions for a new tool to your project").argument("[url]","URL to fetch VibeDef configuration").action(async t=>{try{if(t){let o=await E(t);o&&await w(o);return}let a=await j();if(!a)return;let r=await S(a);if(!r)return;let e=await V(r);if(!e||e.length===0)return;console.log(i.green(`Selected ${e.length} file(s) for download`)),await w({category:a,name:r.name,files:e})}catch(a){console.error(i.red(`Error: ${a.message}`))}});process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));var b=new A().name("vibestack").description("Easily add instructions, cheat sheets and rules for your favorite tools tailored for your framework.").version("0.1.1");b.addCommand(g).addCommand(y);b.parse(); //# sourceMappingURL=index.js.map