create-enpage
Advanced tools
Comparing version 0.0.29 to 0.0.30
#!/usr/bin/env node | ||
import S from"degit";import{program as u}from"commander";import{resolve as s}from"path";import x from"path";import r from"chalk";import{existsSync as E,mkdirSync as D,lstatSync as $,readdirSync as C,readFileSync as O,writeFileSync as N,rmSync as P}from"fs";import{input as a,select as A}from"@inquirer/prompts";import{execSync as L}from"child_process";u.description("Create a new Enpage template").argument("[directory]","Directory to create the template in",".").action(async o=>{let e=s(process.cwd(),o);E(e)?$(e).isDirectory()?_(e)||(console.log(r.red(`Directory ${e} is not empty. Aborting.`)),process.exit(1)):(console.log(r.red(`${e} exists but is not a directory. Aborting.`)),process.exit(1)):(process.stdout.write(`Creating directory ${e}... `),D(e,{recursive:!0}),console.log(r.cyan("OK"))),process.stdout.write("Cloning template example... "),await S("enpage/enpage/packages/template-example",{cache:!1}).clone(e),P(s(e,"CHANGELOG.md")),console.log(r.cyan("OK")),console.log(""),console.log("Let's set up your new template:");let y=await a({message:"Name your template",validate(n){return n.length>0?!0:"Name cannot be empty"}}),f=await a({message:"Enter a template description",validate(n){return n.length>0?!0:"Description cannot be empty"}}),h=await a({message:"Enter the author's name",validate(n){return n.length>0?!0:"Author name cannot be empty"}}),i=await A({message:"Choose the visibility of the template",choices:[{name:"Private",value:"private",description:"For your eyes only"},{name:"Public",value:"public",description:"To be available on Enpage (paid or free users)"}]});i==="public"&&console.log(` > You will need to publish your template to make it available on Enpage. | ||
`);let v=await a({message:"Enter tags for the template (optional, comma separated)"}),c=await a({message:"Enter a homepage URL (optional)",validate(n){if(n.length===0)return!0;try{return new URL(n),!0}catch{}return"Homepage URL must start with https://"}}),w=v.split(",").map(n=>n.trim()).filter(n=>n.length>0),l=s(e,"package.json"),t=JSON.parse(O(l,"utf-8")),b=t.version.includes("-");for(let n of["dependencies","devDependencies","peerDependencies","optionalDependencies"])if(t[n])for(let[g,m]of Object.entries(t[n]))m.startsWith("workspace:")&&(t[n][g]=b?m:"latest");t.name=`enpage-template-${x.basename(e)}`,t.author=h,t.keywords=[...new Set([...t.keywords,...w])],t.license="UNLICENSED",t.homepage=c.length>0?c:void 0,t.enpage={name:y,description:f},i==="private"&&(t.enpage.private=!0,t.private=!0),delete t.scripts.lint,delete t.scripts["ci:lint"],process.stdout.write("Writing package.json... "),N(l,JSON.stringify(t,null,2)),console.log(r.cyan("OK")),console.log("Installing dependencies... ");let p=d(),k=M(p);L(`${p} install`,{cwd:e,stdio:"inherit"}),console.log(` | ||
${r.cyan("All done!")} | ||
import x from"tiged";import{program as p}from"commander";import{resolve as f}from"path";import E from"path";import i from"chalk";import{existsSync as C,mkdirSync as D,lstatSync as O,readdirSync as N,readFileSync as P,writeFileSync as _}from"fs";import{input as a,select as A}from"@inquirer/prompts";import{execSync as L}from"child_process";p.description("Create a new Enpage template").argument("[directory]","Directory to create the template in",".").option("-t, --template <template>","Template to clone","enpage/enpage/packages/template-example").option("--ref","Specific ref to clone. It can be a branch, tag or commit hash").action(async e=>{let t=p.opts(),o=f(process.cwd(),e);C(o)?O(o).isDirectory()?R(o)||(console.log(i.red(`Directory ${o} is not empty. Aborting.`)),process.exit(1)):(console.log(i.red(`${o} exists but is not a directory. Aborting.`)),process.exit(1)):(process.stdout.write(`Creating directory ${o}... `),D(o,{recursive:!0}),console.log(i.cyan("OK"))),process.stdout.write("Cloning template example... ");let l=U(t.template,t.ref);await x(l,{verbose:!0,mode:"git",disableCache:!0}).clone(o),console.log(i.cyan("OK")),console.log(""),console.log("Let's set up your new template:");let h=await a({message:"Name your template",validate(n){return n.length>0?!0:"Name cannot be empty"}}),g=await a({message:"Enter a template description",validate(n){return n.length>0?!0:"Description cannot be empty"}}),v=await a({message:"Enter the author's name",validate(n){return n.length>0?!0:"Author name cannot be empty"}}),c=await A({message:"Choose the visibility of the template",choices:[{name:"Private",value:"private",description:"For your eyes only"},{name:"Public",value:"public",description:"To be available on Enpage (paid or free users)"}]});c==="public"&&console.log(` > You will need to publish your template to make it available on Enpage. | ||
`);let b=await a({message:"Enter tags for the template (optional, comma separated)"}),m=await a({message:"Enter a homepage URL (optional)",validate(n){if(n.length===0)return!0;try{return new URL(n),!0}catch{}return"Homepage URL must start with https://"}}),w=b.split(",").map(n=>n.trim()).filter(n=>n.length>0),u=f(o,"package.json"),r=JSON.parse(P(u,"utf-8"));if(j(l)){let n=t.ref&&I(t.ref)?`0.0.0-snapshot-${t.ref}`:void 0;for(let s of["dependencies","devDependencies","peerDependencies","optionalDependencies"])if(r[s])for(let[S,$]of Object.entries(r[s]))$.startsWith("workspace:")&&(r[s][S]=n??"latest");delete r.scripts.lint,delete r.scripts["ci:lint"]}Object.assign(r,{name:`enpage-template-${E.basename(o)}`,author:v,description:g,keywords:[...new Set([...r.keywords,...w])],license:"UNLICENSED",homepage:m.length>0?m:void 0,private:c==="private",enpage:{name:h,description:g,private:c==="private"}}),process.stdout.write("Writing package.json... "),_(u,JSON.stringify(r,null,2)),console.log(i.cyan("OK")),console.log("Installing dependencies... ");let d=y(),k=T(d);L(`${d} install`,{cwd:o,stdio:"inherit"}),console.log(` | ||
${i.cyan("All done!")} | ||
`),console.log(`You can now develop your template: | ||
`),console.log(r.cyan(` cd ${o}`)),console.log(r.cyan(` ${k} dev | ||
`)),process.exit(0)});u.parse();function _(o){return C(o).length===0}function d(){let o;if(process.env.npm_config_user_agent){let e=process.env.npm_config_user_agent.split(" ")[0];o=e.slice(0,e.lastIndexOf("/"))}return o||(o="npm"),o}function M(o){let e=o??d();return e==="npm"?`${e} run`:e} | ||
`),console.log(i.cyan(` cd ${e}`)),console.log(i.cyan(` ${k} dev | ||
`)),process.exit(0)});p.parse();function R(e){return N(e).length===0}function y(){let e;if(process.env.npm_config_user_agent){let t=process.env.npm_config_user_agent.split(" ")[0];e=t.slice(0,t.lastIndexOf("/"))}return e||(e="npm"),e}function T(e){let t=e??y();return t==="npm"?`${t} run`:t}function U(e,t){return e.includes("/")===!1&&(e=`enpage/template-${e}`),t?`${e}#${t}`:e}function j(e){return e.startsWith("enpage/")}function I(e){return/^[0-9a-f]{40}$/.test(e)} |
{ | ||
"name": "create-enpage", | ||
"version": "0.0.29", | ||
"version": "0.0.30", | ||
"description": "A CLI for creating Enpage templates.", | ||
@@ -20,3 +20,3 @@ "type": "module", | ||
"commander": "12.1.0", | ||
"degit": "2.8.4" | ||
"tiged": "3.0.0-rc.0" | ||
}, | ||
@@ -30,5 +30,5 @@ "devDependencies": { | ||
"build": "tsup", | ||
"lint": "biome check .", | ||
"ci:lint": "biome check ." | ||
"lint": "biome check --write . && tsc --noEmit", | ||
"ci:lint": "tsc --noEmit" | ||
} | ||
} |
37475
+ Addedtiged@3.0.0-rc.0
+ Added@isaacs/cliui@8.0.2(transitive)
+ Added@isaacs/fs-minipass@4.0.1(transitive)
+ Added@pkgjs/parseargs@0.11.0(transitive)
+ Addedagent-base@7.1.3(transitive)
+ Addedansi-colors@4.1.3(transitive)
+ Addedansi-regex@6.1.0(transitive)
+ Addedansi-styles@6.2.1(transitive)
+ Addedbalanced-match@1.0.2(transitive)
+ Addedbrace-expansion@2.0.1(transitive)
+ Addedchownr@3.0.0(transitive)
+ Addedcolorette@2.0.20(transitive)
+ Addedcross-spawn@7.0.6(transitive)
+ Addeddebug@4.4.0(transitive)
+ Addedeastasianwidth@0.2.0(transitive)
+ Addedemoji-regex@9.2.2(transitive)
+ Addedenquirer@2.4.1(transitive)
+ Addedforeground-child@3.3.0(transitive)
+ Addedfs-extra@11.2.0(transitive)
+ Addedfuzzysearch@1.0.3(transitive)
+ Addedglob@10.4.5(transitive)
+ Addedglobalyzer@0.1.0(transitive)
+ Addedglobrex@0.1.2(transitive)
+ Addedgraceful-fs@4.2.11(transitive)
+ Addedhttps-proxy-agent@7.0.4(transitive)
+ Addedisexe@2.0.0(transitive)
+ Addedjackspeak@3.4.3(transitive)
+ Addedjsonfile@6.1.0(transitive)
+ Addedlru-cache@10.4.3(transitive)
+ Addedminimatch@9.0.5(transitive)
+ Addedminipass@7.1.2(transitive)
+ Addedminizlib@3.0.1(transitive)
+ Addedmkdirp@3.0.1(transitive)
+ Addedmri@1.2.0(transitive)
+ Addedms@2.1.3(transitive)
+ Addedpackage-json-from-dist@1.0.1(transitive)
+ Addedpath-key@3.1.1(transitive)
+ Addedpath-scurry@1.11.1(transitive)
+ Addedrimraf@5.0.7(transitive)
+ Addedshebang-command@2.0.0(transitive)
+ Addedshebang-regex@3.0.0(transitive)
+ Addedstring-width@5.1.2(transitive)
+ Addedstrip-ansi@7.1.0(transitive)
+ Addedtar@7.4.0(transitive)
+ Addedtiged@3.0.0-rc.0(transitive)
+ Addedtiny-glob@0.2.9(transitive)
+ Addeduniversalify@2.0.1(transitive)
+ Addedwhich@2.0.2(transitive)
+ Addedwrap-ansi@7.0.08.1.0(transitive)
+ Addedyallist@5.0.0(transitive)
- Removeddegit@2.8.4
- Removeddegit@2.8.4(transitive)