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