create-vite-lite
Version:
3 lines (2 loc) • 3.32 kB
JavaScript
import n from"node:fs";import s from"node:path";import{fileURLToPath as d}from"node:url";import v from"prompts";import{blue as o,bold as u,red as c,reset as f,yellow as t,magenta as g,cyan as S,lightBlue as i,green as h}from"kolorist";const w=[{name:"vanilla",display:"Vanilla",color:t,flavors:[{name:"template-vanilla-js",display:"JavaScript",color:t},{name:"template-vanilla-ts",display:"TypeScript",color:o}]},{name:"lit",display:"Lit",color:o,flavors:[{name:"template-lit-js",display:"JavaScript",color:t},{name:"template-lit-ts",display:"TypeScript",color:o}]},{name:"preact",display:"Preact",color:g,flavors:[{name:"template-preact-js",display:"JavaScript",color:t},{name:"template-preact-ts",display:"TypeScript",color:o}]},{name:"react",display:"React",color:S,flavors:[{name:"template-react-js",display:"JavaScript",color:t},{name:"template-react-ts",display:"TypeScript",color:o}]},{name:"solid",display:"Solid",color:i,flavors:[{name:"template-solid-js",display:"JavaScript",color:t},{name:"template-solid-ts",display:"TypeScript",color:o}]},{name:"svelte",display:"Svelte",color:c,flavors:[{name:"template-svelte-js",display:"JavaScript",color:t},{name:"template-svelte-jsdoc",display:"JavaScript / JSDOC",color:i},{name:"template-svelte-ts",display:"TypeScript",color:o}]},{name:"vue",display:"Vue",color:h,flavors:[{name:"template-vue-js",display:"JavaScript",color:t},{name:"template-vue-ts",display:"TypeScript",color:o}]}];async function j(){if(console.log(o("Create-Vite-Lite")),console.log(u(o("This package is still in beta. Bugs included at no extra charge!"))),T("."))try{const e=await k();console.log(`${e.framework.display} ${e.flavor.display}`);const l=s.resolve(d(import.meta.url),"../..",e.flavor.name),a=n.readdirSync(l);for(const r of a)L(l,r);b()}catch(e){console.log(e)}else return console.log(`\u274C ${c("You can only use this script within an empty folder")} \u274C`)}async function k(){return await v([{type:"select",name:"framework",message:"Pick a framework",choices:w.map(e=>({title:e.color(e.display),value:e}))},{type:e=>e&&e.flavors?"select":null,name:"flavor",message:f("Select a flavor:"),choices:e=>e.flavors.map(l=>{const a=l.color;return{title:a(l.display),value:{name:l.name,display:l.display}}})}],{onCancel:()=>{console.log("\u274C Cancelled"),process.exit(0)}})}function C(e){return{_gitignore:".gitignore"}[e]??e}function T(e){try{const l=n.readdirSync(e);return l.length===0||l.length===1&&l[0]===".git"}catch(l){return console.log(l),!1}}function J(){const e=process?.env?.npm_config_user_agent||null;if(!e)return null;const l=e.split(" ")[0],[a,r]=l.split("/");return{name:a,version:r}}function L(e,l){const a=C(l);p(s.join(e,l),a)}function p(e,l){n.statSync(e).isDirectory()?$(e,l):n.copyFileSync(e,l)}function $(e,l){n.mkdirSync(l,{recursive:!0});const a=n.readdirSync(e);for(const r of a){const m=s.resolve(e,r),y=s.resolve(l,r);p(m,y)}}function b(){console.log(`${o("All done")} \xB7 ${c("Update package.json accordingly")}`);const e=J();if(e?.name)switch(e?.name.toLowerCase()){case"yarn":console.log(" yarn"),console.log(" yarn dev");break;default:console.log(` ${e?.name.toLowerCase()} install`),console.log(` ${e?.name.toLowerCase()} run dev`);break}else console.log(" install dependencies"),console.log(" run dev script")}j();