create-svelte-template
Version:
Create Svelte Template
3 lines (2 loc) • 2.73 kB
JavaScript
import{blue as l,bold as u,red as s,yellow as r,reset as f}from"kolorist";import a from"node:fs";import c from"node:path";import{fileURLToPath as d}from"node:url";import g from"prompts";const y=[{name:"svelte",display:"Svelte",color:s,flavors:[{name:"template-svelte-js",display:"JavaScript",color:r},{name:"template-svelte-js-page",display:"JavaScript + Page (Routing)",color:r},{name:"template-svelte-ts",display:"TypeScript",color:l},{name:"template-svelte-ts-page",display:"TypeScript + Page (Routing)",color:l}]},{name:"sveltekit",display:"SvelteKit",color:s,flavors:[{name:"template-sveltekit-js",display:"JavaScript",color:r},{name:"template-sveltekit-ts",display:"TypeScript",color:l}]}];async function v(){const e=process.argv.slice(2).includes("--force");if(console.log(l("Create-Svelte-Template")),console.log(u(l("This package is still in beta. Bugs included at no extra charge!"))),!h(".")&&!e)return console.log(`\u274C ${s("You can only use this script within an empty folder")} \u274C`),console.log(`\u274C ${r(`add ${l("--force")} if you want to overwrite existing files`)} \u274C`);try{const o=await S();console.log(`${o.framework.display} ${o.flavor.display}`);const t=c.resolve(d(import.meta.url),"../..",o.flavor.name),n=a.readdirSync(t);for(const i of n)C(t,i);T()}catch(o){console.log(o)}}async function S(){return await g([{type:"select",name:"framework",message:"Pick a framework",choices:y.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(o=>{const t=o.color;return{title:t(o.display),value:{name:o.name,display:o.display}}})}],{onCancel:()=>{console.log("\u274C Cancelled"),process.exit(0)}})}function w(e){return{_gitignore:".gitignore"}[e]??e}function h(e){try{const o=a.readdirSync(e);return o.length===0||o.length===1&&o[0]===".git"}catch(o){return console.log(o),!1}}function k(){const e=process?.env?.npm_config_user_agent||null;if(!e)return null;const o=e.split(" ")[0],[t,n]=o.split("/");return{name:t,version:n}}function C(e,o){const t=w(o);p(c.join(e,o),t)}function p(e,o){a.statSync(e).isDirectory()?$(e,o):a.copyFileSync(e,o)}function $(e,o){a.mkdirSync(o,{recursive:!0});const t=a.readdirSync(e);for(const n of t){const i=c.resolve(e,n),m=c.resolve(o,n);p(i,m)}}function T(){console.log(`${l("All done")} \xB7 ${s("Update package.json accordingly")}`);const e=k();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")}v();