@huberyyang/create-todo-vue 1.5.1 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -54,7 +54,7 @@ npm create @huberyyang/todo-vue .foo --overwrite -t vue-ts --no-immediate --pack
54
54
  - `-i, --immediate` 创建后立即安装依赖,装完会打印启动命令
55
55
  - `--no-immediate` 创建后不安装依赖,只打印后续步骤(不加这两个 flag 时会询问)
56
56
  - `--overwrite` 目标已存在时直接覆盖,不再询问:目录会被清空(`.git` 保留),同名文件会被删除
57
- - `--package-name` 指定 `package.json` 的 `name`;不传则取目录名,目录名不是合法包名时会询问
57
+ - `--package-name` 指定包名,同时写进 `package.json` 的 `name` 和 `index.html` 的 `<title>`;不传则取目录名,目录名不是合法包名时会询问
58
58
 
59
59
  传入未声明的参数会直接报错退出,并列出拼错的那个。`--package-name` 的值不合法时同样直接报错,**不会**替你静默改成一个合法的。
60
60
 
@@ -66,12 +66,14 @@ npm create @huberyyang/todo-vue .foo --overwrite -t vue-ts --no-immediate --pack
66
66
  | --- | --- |
67
67
  | `0` | 创建成功;`-h` / `-v` 同样返回 0 |
68
68
  | `1` | 操作被取消、参数有误,或创建过程中出错 |
69
+ | 其它 | 用了 `-i` 且**依赖没装上**时,原样透传包管理器自己的退出码 |
69
70
 
70
71
  几点值得单独说明:
71
72
 
72
73
  - **取消操作返回 1。**(`v1.2.0` 起)既包括交互式按 <kbd>Ctrl</kbd>+<kbd>C</kbd>,也包括在非交互环境(CI、脚本)下走到了需要输入的提示。后者以前返回 `0`,调用方会把「什么都没创建」误判成创建成功。
73
74
  - **拼错的参数会被指出来。**(`v1.2.0` 起)以前拼错的 flag 会被静默忽略,而且它还会把紧跟其后的目录名当成自己的值吃掉——`--overwirte my-app` 连项目名都会丢,CLI 转而追问项目名称,用户看不出哪里写错了。
74
75
  - **非交互环境下会说清楚卡在哪。** 在 CI、脚本或 `< /dev/null` 之类拿不到输入的环境里走到提示时,会打印当前卡在哪一步、以及该改用哪个参数,然后返回 `1`。此前这里只会留下一个画到一半的选择器,没有任何解释。
76
+ - **依赖装不上时,项目仍然是好的。** 用 `-i` 而依赖安装失败时,**已经生成的项目不会被回滚**——会告诉你项目在哪、以及手动补装的命令,并把包管理器的退出码原样带出来(所以这时退出码不一定是 `1`)。
75
77
 
76
78
  #### 🟢 当前可用模板
77
79
 
@@ -90,7 +92,7 @@ npm create @huberyyang/todo-vue .foo --overwrite -t vue-ts --no-immediate --pack
90
92
  - `custom-vitesse-lite` → `degit antfu-collective/vitesse-lite`(Vitesse Lite)
91
93
 
92
94
  > 转交上游的模板由对方的脚手架直接生成,因此**不会**像内置模板那样把 `package.json` 的 `name`
93
- > 和 `index.html` 的 `<title>` 改写成你的项目名——需要的话生成后自己改一下。这几个还需要联网。
95
+ > 和 `index.html` 的 `<title>` 改写成包名——需要的话生成后自己改一下。这几个还需要联网。
94
96
 
95
97
  ### 📜 许可证 (License)
96
98
 
package/dist/index.js CHANGED
@@ -52,7 +52,9 @@ ${a}${e}
52
52
  `}case`submit`:{let e=a?` ${s(`dim`,a)}`:``;return`${n}${t?s(`gray`,V):``}${e}`}case`cancel`:{let e=a?` ${s([`strikethrough`,`dim`],a)}`:``,r=t?s(`gray`,V):``;return`${n}${r}${e}${a.trim()?`
53
53
  ${r}`:``}`}default:return`${n}${t?`${s(`cyan`,V)} `:``}${i}
54
54
  ${t?s(`cyan`,H):``}
55
- `}}}).prompt();var Je=_(((e,t)=>{t.exports=a,a.sync=o;var n=b(`fs`);function r(e,t){var n=t.pathExt===void 0?process.env.PATHEXT:t.pathExt;if(!n||(n=n.split(`;`),n.indexOf(``)!==-1))return!0;for(var r=0;r<n.length;r++){var i=n[r].toLowerCase();if(i&&e.substr(-i.length).toLowerCase()===i)return!0}return!1}function i(e,t,n){return!e.isSymbolicLink()&&!e.isFile()?!1:r(t,n)}function a(e,t,r){n.stat(e,function(n,a){r(n,!n&&i(a,e,t))})}function o(e,t){return i(n.statSync(e),e,t)}})),Ye=_(((e,t)=>{t.exports=r,r.sync=i;var n=b(`fs`);function r(e,t,r){n.stat(e,function(e,n){r(e,!e&&a(n,t))})}function i(e,t){return a(n.statSync(e),t)}function a(e,t){return e.isFile()&&o(e,t)}function o(e,t){var n=e.mode,r=e.uid,i=e.gid,a=t.uid===void 0?process.getuid&&process.getuid():t.uid,o=t.gid===void 0?process.getgid&&process.getgid():t.gid,s=64,c=8,l=1,u=s|c;return n&l||n&c&&i===o||n&s&&r===a||n&u&&a===0}})),Xe=_(((e,t)=>{b(`fs`);var n=process.platform===`win32`||global.TESTING_WINDOWS?Je():Ye();t.exports=r,r.sync=i;function r(e,t,i){if(typeof t==`function`&&(i=t,t={}),!i){if(typeof Promise!=`function`)throw TypeError(`callback not provided`);return new Promise(function(n,i){r(e,t||{},function(e,t){e?i(e):n(t)})})}n(e,t||{},function(e,n){e&&(e.code===`EACCES`||t&&t.ignoreErrors)&&(e=null,n=!1),i(e,n)})}function i(e,t){try{return n.sync(e,t||{})}catch(e){if(t&&t.ignoreErrors||e.code===`EACCES`)return!1;throw e}}})),Ze=_(((e,t)=>{let n=process.platform===`win32`||process.env.OSTYPE===`cygwin`||process.env.OSTYPE===`msys`,r=b(`path`),i=n?`;`:`:`,a=Xe(),o=e=>Object.assign(Error(`not found: ${e}`),{code:`ENOENT`}),s=(e,t)=>{let r=t.colon||i,a=e.match(/\//)||n&&e.match(/\\/)?[``]:[...n?[process.cwd()]:[],...(t.path||process.env.PATH||``).split(r)],o=n?t.pathExt||process.env.PATHEXT||`.EXE;.CMD;.BAT;.COM`:``,s=n?o.split(r):[``];return n&&e.indexOf(`.`)!==-1&&s[0]!==``&&s.unshift(``),{pathEnv:a,pathExt:s,pathExtExe:o}},c=(e,t,n)=>{typeof t==`function`&&(n=t,t={}),t||={};let{pathEnv:i,pathExt:c,pathExtExe:l}=s(e,t),u=[],d=n=>new Promise((a,s)=>{if(n===i.length)return t.all&&u.length?a(u):s(o(e));let c=i[n],l=/^".*"$/.test(c)?c.slice(1,-1):c,d=r.join(l,e),p=!l&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d;a(f(p,n,0))}),f=(e,n,r)=>new Promise((i,o)=>{if(r===c.length)return i(d(n+1));let s=c[r];a(e+s,{pathExt:l},(a,o)=>{if(!a&&o){if(t.all)u.push(e+s);else return i(e+s)}return i(f(e,n,r+1))})});return n?d(0).then(e=>n(null,e),n):d(0)};t.exports=c,c.sync=(e,t)=>{t||={};let{pathEnv:n,pathExt:i,pathExtExe:c}=s(e,t),l=[];for(let o=0;o<n.length;o++){let s=n[o],u=/^".*"$/.test(s)?s.slice(1,-1):s,d=r.join(u,e),f=!u&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d;for(let e=0;e<i.length;e++){let n=f+i[e];try{if(a.sync(n,{pathExt:c})){if(t.all)l.push(n);else return n}}catch{}}}if(t.all&&l.length)return l;if(t.nothrow)return null;throw o(e)}})),Qe=_(((e,t)=>{let n=(e={})=>{let t=e.env||process.env;return(e.platform||process.platform)===`win32`?Object.keys(t).reverse().find(e=>e.toUpperCase()===`PATH`)||`Path`:`PATH`};t.exports=n,t.exports.default=n})),$e=_(((e,t)=>{let n=b(`path`),r=Ze(),i=Qe();function a(e,t){let a=e.options.env||process.env,o=process.cwd(),s=e.options.cwd!=null,c=s&&process.chdir!==void 0&&!process.chdir.disabled;if(c)try{process.chdir(e.options.cwd)}catch{}let l;try{l=r.sync(e.command,{path:a[i({env:a})],pathExt:t?n.delimiter:void 0})}catch{}finally{c&&process.chdir(o)}return l&&=n.resolve(s?e.options.cwd:``,l),l}function o(e){return a(e)||a(e,!0)}t.exports=o})),et=_(((e,t)=>{let n=/([()\][%!^"`<>&|;, *?])/g;function r(e){return e=e.replace(n,`^$1`),e}function i(e,t){return e=`${e}`,e=e.replace(/(?=(\\+?)?)\1"/g,`$1$1\\"`),e=e.replace(/(?=(\\+?)?)\1$/,`$1$1`),e=`"${e}"`,e=e.replace(n,`^$1`),t&&(e=e.replace(n,`^$1`)),e}t.exports.command=r,t.exports.argument=i})),tt=_(((e,t)=>{t.exports=/^#!(.*)/})),nt=_(((e,t)=>{let n=tt();t.exports=(e=``)=>{let t=e.match(n);if(!t)return null;let[r,i]=t[0].replace(/#! ?/,``).split(` `),a=r.split(`/`).pop();return a===`env`?i:i?`${a} ${i}`:a}})),rt=_(((e,t)=>{let n=b(`fs`),r=nt();function i(e){let t=Buffer.alloc(150),i;try{i=n.openSync(e,`r`),n.readSync(i,t,0,150,0),n.closeSync(i)}catch{}return r(t.toString())}t.exports=i})),it=_(((e,t)=>{let n=b(`path`),r=$e(),i=et(),a=rt(),o=process.platform===`win32`,s=/\.(?:com|exe)$/i,c=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function l(e){e.file=r(e);let t=e.file&&a(e.file);return t?(e.args.unshift(e.file),e.command=t,r(e)):e.file}function u(e){if(!o)return e;let t=l(e),r=!s.test(t);if(e.options.forceShell||r){let r=c.test(t);e.command=n.normalize(e.command),e.command=i.command(e.command),e.args=e.args.map(e=>i.argument(e,r)),e.args=[`/d`,`/s`,`/c`,`"${[e.command].concat(e.args).join(` `)}"`],e.command=process.env.comspec||`cmd.exe`,e.options.windowsVerbatimArguments=!0}return e}function d(e,t,n){t&&!Array.isArray(t)&&(n=t,t=null),t=t?t.slice(0):[],n=Object.assign({},n);let r={command:e,args:t,options:n,file:void 0,original:{command:e,args:t}};return n.shell?r:u(r)}t.exports=d})),at=_(((e,t)=>{let n=process.platform===`win32`;function r(e,t){return Object.assign(Error(`${t} ${e.command} ENOENT`),{code:`ENOENT`,errno:`ENOENT`,syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function i(e,t){if(!n)return;let r=e.emit;e.emit=function(n,i){if(n===`exit`){let n=a(i,t);if(n)return r.call(e,`error`,n)}return r.apply(e,arguments)}}function a(e,t){return n&&e===1&&!t.file?r(t.original,`spawn`):null}function o(e,t){return n&&e===1&&!t.file?r(t.original,`spawnSync`):null}t.exports={hookChildProcess:i,verifyENOENT:a,verifyENOENTSync:o,notFoundError:r}})),ot=_(((e,t)=>{let n=b(`child_process`),r=it(),i=at();function a(e,t,a){let o=r(e,t,a),s=n.spawn(o.command,o.args,o.options);return i.hookChildProcess(s,o),s}function o(e,t,a){let o=r(e,t,a),s=n.spawnSync(o.command,o.args,o.options);return s.error=s.error||i.verifyENOENTSync(s.status,o),s}t.exports=a,t.exports.spawn=a,t.exports.sync=o,t.exports._parse=r,t.exports._enoent=i})),st=_(((e,t)=>{function n(e){return e==null?[]:Array.isArray(e)?e:[e]}function r(e,t,n,r){var i,a=e[t],o=~r.string.indexOf(t)?n==null||n===!0?``:String(n):typeof n==`boolean`?n:~r.boolean.indexOf(t)?n===`false`?!1:n===`true`||(e._.push((i=+n,i*0==0?i:n)),!!n):(i=+n,i*0==0?i:n);e[t]=a==null?o:Array.isArray(a)?a.concat(o):[a,o]}t.exports=function(e,t){e||=[],t||={};var i,a,o,s,c,l={_:[]},u=0,d=0,f=0,p=e.length;let m=t.alias!==void 0,h=t.unknown!==void 0,g=t.default!==void 0;if(t.alias=t.alias||{},t.string=n(t.string),t.boolean=n(t.boolean),m)for(i in t.alias)for(a=t.alias[i]=n(t.alias[i]),u=0;u<a.length;u++)(t.alias[a[u]]=a.concat(i)).splice(u,1);for(u=t.boolean.length;u-->0;)for(a=t.alias[t.boolean[u]]||[],d=a.length;d-->0;)t.boolean.push(a[d]);for(u=t.string.length;u-->0;)for(a=t.alias[t.string[u]]||[],d=a.length;d-->0;)t.string.push(a[d]);if(g){for(i in t.default)if(s=typeof t.default[i],a=t.alias[i]=t.alias[i]||[],t[s]!==void 0)for(t[s].push(i),u=0;u<a.length;u++)t[s].push(a[u])}let _=h?Object.keys(t.alias):[];for(u=0;u<p;u++){if(o=e[u],o===`--`){l._=l._.concat(e.slice(++u));break}for(d=0;d<o.length&&o.charCodeAt(d)===45;d++);if(d===0)l._.push(o);else if(o.substring(d,d+3)===`no-`){if(s=o.substring(d+3),h&&!~_.indexOf(s))return t.unknown(o);l[s]=!1}else{for(f=d+1;f<o.length&&o.charCodeAt(f)!==61;f++);for(s=o.substring(d,f),c=o.substring(++f)||u+1===p||(``+e[u+1]).charCodeAt(0)===45||e[++u],a=d===2?[s]:s,f=0;f<a.length;f++){if(s=a[f],h&&!~_.indexOf(s))return t.unknown(`-`.repeat(d)+s);r(l,s,f+1<a.length||c,t)}}}if(g)for(i in t.default)l[i]===void 0&&(l[i]=t.default[i]);if(m)for(i in l)for(a=t.alias[i]||[];a.length>0;)l[a.shift()]=l[i];return l}})),ct=_(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c})),lt=y(ot(),1),ut=y(st(),1),dt=y(ct(),1);const{green:J,yellow:Y,blue:ft,redBright:pt,greenBright:X}=dt.default,mt=`\
55
+ `}}}).prompt();var Je=_(((e,t)=>{t.exports=a,a.sync=o;var n=b(`fs`);function r(e,t){var n=t.pathExt===void 0?process.env.PATHEXT:t.pathExt;if(!n||(n=n.split(`;`),n.indexOf(``)!==-1))return!0;for(var r=0;r<n.length;r++){var i=n[r].toLowerCase();if(i&&e.substr(-i.length).toLowerCase()===i)return!0}return!1}function i(e,t,n){return!e.isSymbolicLink()&&!e.isFile()?!1:r(t,n)}function a(e,t,r){n.stat(e,function(n,a){r(n,!n&&i(a,e,t))})}function o(e,t){return i(n.statSync(e),e,t)}})),Ye=_(((e,t)=>{t.exports=r,r.sync=i;var n=b(`fs`);function r(e,t,r){n.stat(e,function(e,n){r(e,!e&&a(n,t))})}function i(e,t){return a(n.statSync(e),t)}function a(e,t){return e.isFile()&&o(e,t)}function o(e,t){var n=e.mode,r=e.uid,i=e.gid,a=t.uid===void 0?process.getuid&&process.getuid():t.uid,o=t.gid===void 0?process.getgid&&process.getgid():t.gid,s=64,c=8,l=1,u=s|c;return n&l||n&c&&i===o||n&s&&r===a||n&u&&a===0}})),Xe=_(((e,t)=>{b(`fs`);var n=process.platform===`win32`||global.TESTING_WINDOWS?Je():Ye();t.exports=r,r.sync=i;function r(e,t,i){if(typeof t==`function`&&(i=t,t={}),!i){if(typeof Promise!=`function`)throw TypeError(`callback not provided`);return new Promise(function(n,i){r(e,t||{},function(e,t){e?i(e):n(t)})})}n(e,t||{},function(e,n){e&&(e.code===`EACCES`||t&&t.ignoreErrors)&&(e=null,n=!1),i(e,n)})}function i(e,t){try{return n.sync(e,t||{})}catch(e){if(t&&t.ignoreErrors||e.code===`EACCES`)return!1;throw e}}})),Ze=_(((e,t)=>{let n=process.platform===`win32`||process.env.OSTYPE===`cygwin`||process.env.OSTYPE===`msys`,r=b(`path`),i=n?`;`:`:`,a=Xe(),o=e=>Object.assign(Error(`not found: ${e}`),{code:`ENOENT`}),s=(e,t)=>{let r=t.colon||i,a=e.match(/\//)||n&&e.match(/\\/)?[``]:[...n?[process.cwd()]:[],...(t.path||process.env.PATH||``).split(r)],o=n?t.pathExt||process.env.PATHEXT||`.EXE;.CMD;.BAT;.COM`:``,s=n?o.split(r):[``];return n&&e.indexOf(`.`)!==-1&&s[0]!==``&&s.unshift(``),{pathEnv:a,pathExt:s,pathExtExe:o}},c=(e,t,n)=>{typeof t==`function`&&(n=t,t={}),t||={};let{pathEnv:i,pathExt:c,pathExtExe:l}=s(e,t),u=[],d=n=>new Promise((a,s)=>{if(n===i.length)return t.all&&u.length?a(u):s(o(e));let c=i[n],l=/^".*"$/.test(c)?c.slice(1,-1):c,d=r.join(l,e),p=!l&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d;a(f(p,n,0))}),f=(e,n,r)=>new Promise((i,o)=>{if(r===c.length)return i(d(n+1));let s=c[r];a(e+s,{pathExt:l},(a,o)=>{if(!a&&o){if(t.all)u.push(e+s);else return i(e+s)}return i(f(e,n,r+1))})});return n?d(0).then(e=>n(null,e),n):d(0)};t.exports=c,c.sync=(e,t)=>{t||={};let{pathEnv:n,pathExt:i,pathExtExe:c}=s(e,t),l=[];for(let o=0;o<n.length;o++){let s=n[o],u=/^".*"$/.test(s)?s.slice(1,-1):s,d=r.join(u,e),f=!u&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d;for(let e=0;e<i.length;e++){let n=f+i[e];try{if(a.sync(n,{pathExt:c})){if(t.all)l.push(n);else return n}}catch{}}}if(t.all&&l.length)return l;if(t.nothrow)return null;throw o(e)}})),Qe=_(((e,t)=>{let n=(e={})=>{let t=e.env||process.env;return(e.platform||process.platform)===`win32`?Object.keys(t).reverse().find(e=>e.toUpperCase()===`PATH`)||`Path`:`PATH`};t.exports=n,t.exports.default=n})),$e=_(((e,t)=>{let n=b(`path`),r=Ze(),i=Qe();function a(e,t){let a=e.options.env||process.env,o=process.cwd(),s=e.options.cwd!=null,c=s&&process.chdir!==void 0&&!process.chdir.disabled;if(c)try{process.chdir(e.options.cwd)}catch{}let l;try{l=r.sync(e.command,{path:a[i({env:a})],pathExt:t?n.delimiter:void 0})}catch{}finally{c&&process.chdir(o)}return l&&=n.resolve(s?e.options.cwd:``,l),l}function o(e){return a(e)||a(e,!0)}t.exports=o})),et=_(((e,t)=>{let n=/([()\][%!^"`<>&|;, *?])/g;function r(e){return e=e.replace(n,`^$1`),e}function i(e,t){return e=`${e}`,e=e.replace(/(?=(\\+?)?)\1"/g,`$1$1\\"`),e=e.replace(/(?=(\\+?)?)\1$/,`$1$1`),e=`"${e}"`,e=e.replace(n,`^$1`),t&&(e=e.replace(n,`^$1`)),e}t.exports.command=r,t.exports.argument=i})),tt=_(((e,t)=>{t.exports=/^#!(.*)/})),nt=_(((e,t)=>{let n=tt();t.exports=(e=``)=>{let t=e.match(n);if(!t)return null;let[r,i]=t[0].replace(/#! ?/,``).split(` `),a=r.split(`/`).pop();return a===`env`?i:i?`${a} ${i}`:a}})),rt=_(((e,t)=>{let n=b(`fs`),r=nt();function i(e){let t=Buffer.alloc(150),i;try{i=n.openSync(e,`r`),n.readSync(i,t,0,150,0),n.closeSync(i)}catch{}return r(t.toString())}t.exports=i})),it=_(((e,t)=>{let n=b(`path`),r=$e(),i=et(),a=rt(),o=process.platform===`win32`,s=/\.(?:com|exe)$/i,c=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function l(e){e.file=r(e);let t=e.file&&a(e.file);return t?(e.args.unshift(e.file),e.command=t,r(e)):e.file}function u(e){if(!o)return e;let t=l(e),r=!s.test(t);if(e.options.forceShell||r){let r=c.test(t);e.command=n.normalize(e.command),e.command=i.command(e.command),e.args=e.args.map(e=>i.argument(e,r)),e.args=[`/d`,`/s`,`/c`,`"${[e.command].concat(e.args).join(` `)}"`],e.command=process.env.comspec||`cmd.exe`,e.options.windowsVerbatimArguments=!0}return e}function d(e,t,n){t&&!Array.isArray(t)&&(n=t,t=null),t=t?t.slice(0):[],n=Object.assign({},n);let r={command:e,args:t,options:n,file:void 0,original:{command:e,args:t}};return n.shell?r:u(r)}t.exports=d})),at=_(((e,t)=>{let n=process.platform===`win32`;function r(e,t){return Object.assign(Error(`${t} ${e.command} ENOENT`),{code:`ENOENT`,errno:`ENOENT`,syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function i(e,t){if(!n)return;let r=e.emit;e.emit=function(n,i){if(n===`exit`){let n=a(i,t);if(n)return r.call(e,`error`,n)}return r.apply(e,arguments)}}function a(e,t){return n&&e===1&&!t.file?r(t.original,`spawn`):null}function o(e,t){return n&&e===1&&!t.file?r(t.original,`spawnSync`):null}t.exports={hookChildProcess:i,verifyENOENT:a,verifyENOENTSync:o,notFoundError:r}})),ot=_(((e,t)=>{let n=b(`child_process`),r=it(),i=at();function a(e,t,a){let o=r(e,t,a),s=n.spawn(o.command,o.args,o.options);return i.hookChildProcess(s,o),s}function o(e,t,a){let o=r(e,t,a),s=n.spawnSync(o.command,o.args,o.options);return s.error=s.error||i.verifyENOENTSync(s.status,o),s}t.exports=a,t.exports.spawn=a,t.exports.sync=o,t.exports._parse=r,t.exports._enoent=i})),st=_(((e,t)=>{function n(e){return e==null?[]:Array.isArray(e)?e:[e]}function r(e,t,n,r){var i,a=e[t],o=~r.string.indexOf(t)?n==null||n===!0?``:String(n):typeof n==`boolean`?n:~r.boolean.indexOf(t)?n===`false`?!1:n===`true`||(e._.push((i=+n,i*0==0?i:n)),!!n):(i=+n,i*0==0?i:n);e[t]=a==null?o:Array.isArray(a)?a.concat(o):[a,o]}t.exports=function(e,t){e||=[],t||={};var i,a,o,s,c,l={_:[]},u=0,d=0,f=0,p=e.length;let m=t.alias!==void 0,h=t.unknown!==void 0,g=t.default!==void 0;if(t.alias=t.alias||{},t.string=n(t.string),t.boolean=n(t.boolean),m)for(i in t.alias)for(a=t.alias[i]=n(t.alias[i]),u=0;u<a.length;u++)(t.alias[a[u]]=a.concat(i)).splice(u,1);for(u=t.boolean.length;u-->0;)for(a=t.alias[t.boolean[u]]||[],d=a.length;d-->0;)t.boolean.push(a[d]);for(u=t.string.length;u-->0;)for(a=t.alias[t.string[u]]||[],d=a.length;d-->0;)t.string.push(a[d]);if(g){for(i in t.default)if(s=typeof t.default[i],a=t.alias[i]=t.alias[i]||[],t[s]!==void 0)for(t[s].push(i),u=0;u<a.length;u++)t[s].push(a[u])}let _=h?Object.keys(t.alias):[];for(u=0;u<p;u++){if(o=e[u],o===`--`){l._=l._.concat(e.slice(++u));break}for(d=0;d<o.length&&o.charCodeAt(d)===45;d++);if(d===0)l._.push(o);else if(o.substring(d,d+3)===`no-`){if(s=o.substring(d+3),h&&!~_.indexOf(s))return t.unknown(o);l[s]=!1}else{for(f=d+1;f<o.length&&o.charCodeAt(f)!==61;f++);for(s=o.substring(d,f),c=o.substring(++f)||u+1===p||(``+e[u+1]).charCodeAt(0)===45||e[++u],a=d===2?[s]:s,f=0;f<a.length;f++){if(s=a[f],h&&!~_.indexOf(s))return t.unknown(`-`.repeat(d)+s);r(l,s,f+1<a.length||c,t)}}}if(g)for(i in t.default)l[i]===void 0&&(l[i]=t.default[i]);if(m)for(i in l)for(a=t.alias[i]||[];a.length>0;)l[a.shift()]=l[i];return l}})),ct=_(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c})),lt=y(ot(),1),ut=y(st(),1),dt=y(ct(),1);function ft(e,t=80){let n=e=>e.variants?.length?e.variants.map(e=>e.name):[e.name],r=Math.max(0,...e.flatMap(n).map(e=>e.length))+2,i=Math.max(1,Math.floor(t/r));return e.map(e=>{let t=n(e),a=[];for(let e=0;e<t.length;e+=i)a.push(t.slice(e,e+i).map(e=>e.padEnd(r)).join(``).trimEnd());return a.map(t=>e.color(t)).join(`
56
+ `)}).join(`
57
+ `)}const{green:pt,yellow:J,blue:mt,redBright:ht,greenBright:Y}=dt.default,gt=`vue-project`,_t={boolean:[`help`,`version`,`overwrite`,`immediate`],alias:{h:`help`,v:`version`,t:`template`,i:`immediate`},string:[`template`,`package-name`]},X=[{name:`vanilla`,display:`Vanilla`,color:J,variants:[{name:`vanilla-ts`,display:`TypeScript`,color:mt},{name:`vanilla`,display:`JavaScript`,color:J}]},{name:`vue`,display:`Vue`,color:pt,variants:[{name:`vue-ts`,display:`TypeScript`,color:mt},{name:`vue`,display:`JavaScript`,color:J},{name:`custom-create-vue`,display:`Official Vue Starter ↗`,color:pt,customCommand:`npm create vue@latest TARGET_DIR`},{name:`custom-nuxt`,display:`Nuxt ↗`,link:`https://nuxt.com`,color:Y,customCommand:`npm exec nuxi init TARGET_DIR`},{name:`custom-vike-vue`,display:`Vike ↗`,link:`https://vike.dev`,color:Y,customCommand:`npm create -- vike@latest --vue TARGET_DIR`},{name:`custom-vitesse`,display:`Vitesse ↗`,link:`https://github.com/antfu-collective/vitesse`,color:Y,customCommand:`npm exec degit antfu-collective/vitesse TARGET_DIR`},{name:`custom-vitesse-lite`,display:`Vitesse Lite ↗`,link:`https://github.com/antfu-collective/vitesse-lite`,color:Y,customCommand:`npm exec degit antfu-collective/vitesse-lite TARGET_DIR`}]},{name:`lit`,display:`Lit`,color:ht,variants:[{name:`lit-ts`,display:`TypeScript`,color:mt},{name:`lit`,display:`JavaScript`,color:J}]}],vt=`\
56
58
  用法: @huberyyang/create-todo-vue [参数]... [目录]
57
59
 
58
60
  快速创建vue模板
@@ -66,8 +68,4 @@ ${t?s(`cyan`,H):``}
66
68
  --package-name 指定 package.json 的 name
67
69
 
68
70
  可用模板:
69
- ${Y(`vanilla-ts vanilla`)}
70
- ${J(`vue-ts vue`)}
71
- ${J(`custom-create-vue custom-nuxt custom-vike-vue`)}
72
- ${J(`custom-vitesse custom-vitesse-lite`)}
73
- ${pt(`lit-ts lit`)}`,ht=`vue-project`,gt={boolean:[`help`,`version`,`overwrite`,`immediate`],alias:{h:`help`,v:`version`,t:`template`,i:`immediate`},string:[`template`,`package-name`]},_t=[{name:`vanilla`,display:`Vanilla`,color:Y,variants:[{name:`vanilla-ts`,display:`TypeScript`,color:ft},{name:`vanilla`,display:`JavaScript`,color:Y}]},{name:`vue`,display:`Vue`,color:J,variants:[{name:`vue-ts`,display:`TypeScript`,color:ft},{name:`vue`,display:`JavaScript`,color:Y},{name:`custom-create-vue`,display:`Official Vue Starter ↗`,color:J,customCommand:`npm create vue@latest TARGET_DIR`},{name:`custom-nuxt`,display:`Nuxt ↗`,link:`https://nuxt.com`,color:X,customCommand:`npm exec nuxi init TARGET_DIR`},{name:`custom-vike-vue`,display:`Vike ↗`,link:`https://vike.dev`,color:X,customCommand:`npm create -- vike@latest --vue TARGET_DIR`},{name:`custom-vitesse`,display:`Vitesse ↗`,link:`https://github.com/antfu-collective/vitesse`,color:X,customCommand:`npm exec degit antfu-collective/vitesse TARGET_DIR`},{name:`custom-vitesse-lite`,display:`Vitesse Lite ↗`,link:`https://github.com/antfu-collective/vitesse-lite`,color:X,customCommand:`npm exec degit antfu-collective/vitesse-lite TARGET_DIR`}]},{name:`lit`,display:`Lit`,color:pt,variants:[{name:`lit-ts`,display:`TypeScript`,color:ft},{name:`lit`,display:`JavaScript`,color:Y}]}],vt=_t.flatMap(e=>e.variants?.length?e.variants.map(e=>e.name):e.name),yt={_gitignore:`.gitignore`},bt=Symbol(`stdin-eof`);var xt=class extends Error{step;hint;constructor(e,t){super(`需要交互才能继续:${e}`),this.step=e,this.hint=t,this.name=`NonInteractiveError`}};async function Z(e,t,n,i=r.stdin){let a=()=>{},o=new Promise(e=>{if(a=()=>e(bt),i.readableEnded){e(bt);return}i.once(`end`,a),i.once(`close`,a)});try{let r=await Promise.race([e,o]);if(r===bt)throw new xt(t,n);return r}finally{i.off(`end`,a),i.off(`close`,a)}}function St(e){let r=n.resolve(e);for(;;){let e=n.join(r,`package.json`);if(t.existsSync(e))return e;let i=n.dirname(r);if(i===r)return;r=i}}function Ct(e){let n=St(e);if(!n)return`unknown`;try{return JSON.parse(t.readFileSync(n,`utf-8`)).version??`unknown`}catch{return`unknown`}}function wt(e){return e.trim().replace(/\/+$/g,``)}function Tt(e){if(!e)return;let t=e.split(` `)[0].split(`/`);return{name:t[0],version:t[1]}}function Et(){return Ve(`操作已取消`)}function Dt(e){return t.existsSync(e)?t.statSync(e).isDirectory()?`dir`:`file`:`missing`}function Ot(e){let n=t.readdirSync(e);return n.length===0||n.length===1&&n[0]===`.git`}function kt(e){if(!t.existsSync(e))return!1;for(let r of t.readdirSync(e))r!==`.git`&&t.rmSync(n.resolve(e,r),{recursive:!0,force:!0})}function At(e){return/^(?:@[a-z\d\-*~][a-z\d\-*._~]*\/)?[a-z\d\-~][a-z\d\-._~]*$/.test(e)}function jt(e){return e.trim().toLowerCase().replace(/\s+/g,`-`).replace(/^[._]/,``).replace(/[^a-z\d\-~]+/g,`-`)}function Mt(e,t){let n=t?.name||`npm`,r=n===`yarn`&&t?.version?.startsWith(`1.`);return e.replace(/^npm create (?:-- )?/,()=>n===`bun`?`bun x create-`:n===`deno`?`deno run -A npm:create-`:n===`pnpm`?`pnpm create `:e.startsWith(`npm create -- `)?`${n} create -- `:`${n} create `).replace(`@latest`,r?``:`@latest`).replace(/^npm exec /,()=>n===`pnpm`?`pnpm dlx `:n===`yarn`&&!r?`yarn dlx `:n===`bun`?`bun x `:n===`deno`?`deno run -A npm:`:`npm exec `)}function Nt(e){let{display:t,name:n,color:r,link:i}=e,a=r(t||n);return i&&(a+=` ${(0,dt.underline)(i)}`),a}function Pt(e,r){t.mkdirSync(r,{recursive:!0});for(let i of t.readdirSync(e))Ft(n.resolve(e,i),n.resolve(r,i))}function Ft(e,n){t.statSync(e).isDirectory()?Pt(e,n):t.copyFileSync(e,n)}function It(e){return e===`yarn`?[e]:[e,`install`]}function Lt(e,t){return e===`yarn`?[e,t]:[e,`run`,t]}function Rt([e,...t],n){let{status:i,error:a}=lt.default.sync(e,t,n);i!=null&&i>0&&r.exit(i),a&&(console.error(`\n${e} ${t.join(` `)} 报错!`),console.error(a),r.exit(1))}function zt(e,t){G.step(`使用 ${t} 安装依赖...`),Rt(It(t),{stdio:`inherit`,cwd:e})}function Bt(e,t){return e&&!t.includes(e)?{template:void 0,invalid:!0}:{template:e,invalid:!1}}function Vt(e,t){let r=n.basename(n.resolve(t,e));return{name:r,needsPrompt:!At(r)}}function Ht(e){return e===void 0||At(e)}function Ut(e,t,n){return e===void 0?Vt(t,n):{name:e,needsPrompt:!1}}function Wt(e,t){let{customCommand:n}=e.flatMap(e=>e.variants?.length?e.variants:e).find(e=>e.name===t)??{};return n}function Gt(e,t){let[n,...r]=e.split(` `);return{command:n,args:r.map(e=>e.replace(`TARGET_DIR`,t))}}function Kt(e,t){let n=e=>t[e]??e,r=e.filter(e=>e!==`package.json`).map(e=>({kind:e===`index.html`?`index-html`:`copy`,from:e,to:n(e)}));return r.push({kind:`package-json`,from:`package.json`,to:n(`package.json`)}),r}function qt(e,t){return e.replace(/<title>.*?<\/title>/,`<title>${t}</title>`)}function Jt(e,t){let n=JSON.parse(e);return n.name=t,`${JSON.stringify(n,null,2)}\n`}function Yt(e,t,r,i=!1){let a=n.relative(e,t),o=i?`依赖安装完成,请执行:`:`创建完成,请执行:`;e!==t&&(o+=`\n cd ${a.includes(` `)?`"${a}"`:a}`);let s=i?Lt(r,`dev`):It(r);return o+=`\n ${s.join(` `)}`,o}function Xt(e){let t=e.alias??{};return[...new Set([...e.boolean??[],...e.string??[],...Object.values(t),...Object.keys(t)])]}function Zt(e,t){let n=new Set(t);return Object.keys(e).filter(e=>e!==`_`&&!n.has(e))}function Qt({templateDir:e,root:r,packageName:i,renameFiles:a}){t.mkdirSync(r,{recursive:!0});let o=Kt(t.readdirSync(e),a);for(let a of o){let o=n.join(e,a.from),s=n.join(r,a.to);switch(a.kind){case`index-html`:t.writeFileSync(s,qt(t.readFileSync(o,`utf-8`),i));break;case`package-json`:t.writeFileSync(s,Jt(t.readFileSync(o,`utf-8`),i));break;case`copy`:Ft(o,s)}}}const $t={intro:e=>He(e),outro:e=>Ue(e),write:e=>void r.stdout.write(e)};function en(e=$t){let t=!1,n=!1;return{open(r){e.intro(r),t=!0,n=!0},close(n=``){t&&(t=!1,e.outro(n))},markClosed(){t=!1},isOpen(){return t},restoreCursor(){n&&e.write(`\x1B[?25h`)}}}const tn=o(import.meta.url),nn=n.dirname(tn),rn=n.resolve(tn,`../..`),an=Ge(),Q=en();function $(){return Et(),Q.markClosed(),1}async function on(e=r.argv.slice(2)){let i=r.cwd(),a=(0,ut.default)(e,structuredClone(gt)),o=a._[0]?wt(String(a._[0])):void 0,s=a.overwrite,c=a.template,l=a.immediate,u=a[`package-name`];if(a.help)return console.log(mt),0;if(a.version)return console.log(Ct(nn)),0;let d=Zt(a,Xt(gt));if(d.length)return console.error(`未知参数:${d.map(e=>`--${e}`).join(`, `)}`),console.error(`运行 create-todo-vue --help 查看可用参数`),1;if(!Ht(u))return console.error(`无效的 package.json name:${u}`),console.error(`包名规则见 https://docs.npmjs.com/cli/configuring-npm/package-json#name`),1;Q.open(`create-todo-vue`);let f=Tt(r.env.npm_config_user_agent),p=o;if(!p){let e=await Z(qe({message:`项目名称:`,defaultValue:ht,placeholder:ht,validate(e){return!e||wt(e).length>0?void 0:`项目名称无效`}}),`项目名称`,`把项目名作为位置参数传入,如 create-todo-vue my-app`);if(P(e))return $();p=wt(e)}let m=Ut(u,p,i),h=n.resolve(i,p),g=Dt(h);if(g===`file`){let e=!!s;if(!e){let t=await Z(q({message:`${p} 已存在且是一个文件,请选择如何继续`,options:[{label:`取消操作`,value:`no`},{label:`删除该文件并继续`,value:`yes`}]}),`${p} 已存在且是一个文件`,`--overwrite(会删除该文件)`);if(P(t))return $();e=t===`yes`}if(!e)return $();t.rmSync(h,{force:!0})}else if(g===`dir`&&!Ot(h)){let e=s?`yes`:void 0;if(!e){let t=await Z(q({message:`${p===`.`?`当前目录`:`目标目录${p}`} 不为空,请选择如何继续`,options:[{label:`取消操作`,value:`no`},{label:`删除现有文件并继续`,value:`yes`},{label:`忽略文件并继续`,value:`ignore`}]}),`${p===`.`?`当前目录`:`目标目录${p}`} 不为空`,`--overwrite(会清空该目录,.git 保留)`);if(P(t))return $();e=t}switch(e){case`yes`:kt(h);break;case`no`:return $()}}let _=m.name;if(m.needsPrompt){let e=await Z(qe({message:`请输入package.json name`,defaultValue:jt(_),placeholder:jt(_),validate(e){if(e&&!At(e))return`无效的package.json name`}}),`package.json name`,`--package-name <name>`);if(P(e))return $();_=e}let{template:v,invalid:y}=Bt(c,vt),b=v;if(!b){let e=await Z(q({message:y?`${c}不是有效的模板名,请从以下选取:`:`选择模板`,options:_t.map(e=>{let{color:t,name:n,display:r}=e;return{label:t(r||n),value:e}})}),`选择模板`,`-t <模板名>,可用模板见 --help`);if(P(e))return $();if(b=e.name,e.variants?.length){let t=await Z(q({message:`选择预设`,options:e.variants.map(e=>{let{name:t,customCommand:n}=e,r=n?Mt(n,f).replace(/ TARGET_DIR$/,``):void 0;return{label:Nt(e),value:t,hint:r}})}),`选择预设`,`-t <模板名>,可用模板见 --help`);if(P(t))return $();b=t}}let x=f?.name||`npm`,S=Wt(_t,b);if(S){let{command:e,args:t}=Gt(Mt(S,f),p);Q.close(`转交给 ${e}`);let{status:n}=lt.default.sync(e,t,{stdio:`inherit`});return n??0}an.start(`正在${h}中创建模板`),Qt({templateDir:n.resolve(rn,`template-${b}`),root:h,packageName:_,renameFiles:yt}),an.stop(`模板创建成功`);let C=l;if(C===void 0){let e=await Z(Be({message:`是否立即使用${x}安装依赖?`}),`是否立即安装依赖`,`-i(装)或 --no-immediate(不装)`);if(P(e))return $();C=e}return C&&zt(h,x),G.info(Yt(i,h,x,C)),Q.close(`程序结束`),0}async function sn(){r.exitCode=1;try{r.exitCode=await on()}catch(e){if(e instanceof xt){G.error(`需要交互才能继续,但输入已结束(非 TTY,或输入已读完)\n这一步在问:${e.step}\n非交互环境请改用:${e.hint}`),Et(),Q.markClosed();return}an.error(`创建失败`),G.error(e instanceof Error?e.message:String(e)),Q.close(`已中止`),e instanceof Error&&e.stack&&console.error(e.stack),r.exitCode=1}finally{Q.close(),Q.restoreCursor()}}export{on as main,sn as runCli};
71
+ ${ft(X)}`,yt=X.flatMap(e=>e.variants?.length?e.variants.map(e=>e.name):e.name),bt={_gitignore:`.gitignore`},xt=Symbol(`stdin-eof`);var St=class extends Error{step;hint;constructor(e,t){super(`需要交互才能继续:${e}`),this.step=e,this.hint=t,this.name=`NonInteractiveError`}};async function Z(e,t,n,i=r.stdin){let a=()=>{},o=new Promise(e=>{if(a=()=>e(xt),i.readableEnded){e(xt);return}i.once(`end`,a),i.once(`close`,a)});try{let r=await Promise.race([e,o]);if(r===xt)throw new St(t,n);return r}finally{i.off(`end`,a),i.off(`close`,a)}}function Ct(e){let r=n.resolve(e);for(;;){let e=n.join(r,`package.json`);if(t.existsSync(e))return e;let i=n.dirname(r);if(i===r)return;r=i}}function wt(e){let n=Ct(e);if(!n)return`unknown`;try{return JSON.parse(t.readFileSync(n,`utf-8`)).version??`unknown`}catch{return`unknown`}}function Tt(e){return e.trim().replace(/\/+$/g,``)}function Et(e){if(!e)return;let t=e.split(` `)[0].split(`/`);return{name:t[0],version:t[1]}}function Dt(){return Ve(`操作已取消`)}function Ot(e){return t.existsSync(e)?t.statSync(e).isDirectory()?`dir`:`file`:`missing`}function kt(e){let n=t.readdirSync(e);return n.length===0||n.length===1&&n[0]===`.git`}function At(e){if(!t.existsSync(e))return!1;for(let r of t.readdirSync(e))r!==`.git`&&t.rmSync(n.resolve(e,r),{recursive:!0,force:!0})}function jt(e){return/^(?:@[a-z\d\-*~][a-z\d\-*._~]*\/)?[a-z\d\-~][a-z\d\-._~]*$/.test(e)}function Mt(e){return e.trim().toLowerCase().replace(/\s+/g,`-`).replace(/^[._]/,``).replace(/[^a-z\d\-~]+/g,`-`)}function Nt(e,t){let n=t?.name||`npm`,r=n===`yarn`&&t?.version?.startsWith(`1.`);return e.replace(/^npm create (?:-- )?/,()=>n===`bun`?`bun x create-`:n===`deno`?`deno run -A npm:create-`:n===`pnpm`?`pnpm create `:e.startsWith(`npm create -- `)?`${n} create -- `:`${n} create `).replace(`@latest`,r?``:`@latest`).replace(/^npm exec /,()=>n===`pnpm`?`pnpm dlx `:n===`yarn`&&!r?`yarn dlx `:n===`bun`?`bun x `:n===`deno`?`deno run -A npm:`:`npm exec `)}function Pt(e){let{display:t,name:n,color:r,link:i}=e,a=r(t||n);return i&&(a+=` ${(0,dt.underline)(i)}`),a}function Ft(e,r){t.mkdirSync(r,{recursive:!0});for(let i of t.readdirSync(e))It(n.resolve(e,i),n.resolve(r,i))}function It(e,n){t.statSync(e).isDirectory()?Ft(e,n):t.copyFileSync(e,n)}function Lt(e){return e===`yarn`?[e]:[e,`install`]}function Rt(e,t){return e===`yarn`?[e,t]:[e,`run`,t]}function zt([e,...t],n){let{status:r,error:i}=lt.default.sync(e,t,n);return i?(console.error(`\n${e} ${t.join(` `)} 跑不起来:${i.message}`),1):r??1}function Bt(e,t){return G.step(`使用 ${t} 安装依赖...`),zt(Lt(t),{stdio:`inherit`,cwd:e})}function Vt(e,t){return e&&!t.includes(e)?{template:void 0,invalid:!0}:{template:e,invalid:!1}}function Ht(e,t){let r=n.basename(n.resolve(t,e));return{name:r,needsPrompt:!jt(r)}}function Ut(e){return e===void 0||jt(e)}function Wt(e,t,n){return e===void 0?Ht(t,n):{name:e,needsPrompt:!1}}function Gt(e,t){let{customCommand:n}=e.flatMap(e=>e.variants?.length?e.variants:e).find(e=>e.name===t)??{};return n}function Kt(e,t){let[n,...r]=e.split(` `);return{command:n,args:r.map(e=>e.replace(`TARGET_DIR`,t))}}function qt(e,t){let n=e=>t[e]??e,r=e.filter(e=>e!==`package.json`).map(e=>({kind:e===`index.html`?`index-html`:`copy`,from:e,to:n(e)}));return r.push({kind:`package-json`,from:`package.json`,to:n(`package.json`)}),r}function Jt(e,t){return e.replace(/<title>.*?<\/title>/,`<title>${t}</title>`)}function Yt(e,t){let n=JSON.parse(e);return n.name=t,`${JSON.stringify(n,null,2)}\n`}function Xt(e,t,r,i=!1){let a=n.relative(e,t),o=i?`依赖安装完成,请执行:`:`创建完成,请执行:`;e!==t&&(o+=`\n cd ${a.includes(` `)?`"${a}"`:a}`);let s=i?Rt(r,`dev`):Lt(r);return o+=`\n ${s.join(` `)}`,o}function Zt(e){let t=e.alias??{};return[...new Set([...e.boolean??[],...e.string??[],...Object.values(t),...Object.keys(t)])]}function Qt(e,t){let n=new Set(t);return Object.keys(e).filter(e=>e!==`_`&&!n.has(e))}function $t({templateDir:e,root:r,packageName:i,renameFiles:a}){t.mkdirSync(r,{recursive:!0});let o=qt(t.readdirSync(e),a);for(let a of o){let o=n.join(e,a.from),s=n.join(r,a.to);switch(a.kind){case`index-html`:t.writeFileSync(s,Jt(t.readFileSync(o,`utf-8`),i));break;case`package-json`:t.writeFileSync(s,Yt(t.readFileSync(o,`utf-8`),i));break;case`copy`:It(o,s)}}}const en={intro:e=>He(e),outro:e=>Ue(e),write:e=>void r.stdout.write(e)};function tn(e=en){let t=!1,n=!1;return{open(r){e.intro(r),t=!0,n=!0},close(n=``){t&&(t=!1,e.outro(n))},markClosed(){t=!1},isOpen(){return t},restoreCursor(){n&&e.write(`\x1B[?25h`)}}}const nn=o(import.meta.url),rn=n.dirname(nn),an=n.resolve(nn,`../..`),on=Ge(),Q=tn();function $(){return Dt(),Q.markClosed(),1}async function sn(e=r.argv.slice(2)){let i=r.cwd(),a=(0,ut.default)(e,structuredClone(_t)),o=a._[0]?Tt(String(a._[0])):void 0,s=a.overwrite,c=a.template,l=a.immediate,u=a[`package-name`];if(a.help)return console.log(vt),0;if(a.version)return console.log(wt(rn)),0;let d=Qt(a,Zt(_t));if(d.length)return console.error(`未知参数:${d.map(e=>`--${e}`).join(`, `)}`),console.error(`运行 create-todo-vue --help 查看可用参数`),1;if(!Ut(u))return console.error(`无效的 package.json name:${u}`),console.error(`包名规则见 https://docs.npmjs.com/cli/configuring-npm/package-json#name`),1;Q.open(`create-todo-vue`);let f=Et(r.env.npm_config_user_agent),p=o;if(!p){let e=await Z(qe({message:`项目名称:`,defaultValue:gt,placeholder:gt,validate(e){return!e||Tt(e).length>0?void 0:`项目名称无效`}}),`项目名称`,`把项目名作为位置参数传入,如 create-todo-vue my-app`);if(P(e))return $();p=Tt(e)}let m=Wt(u,p,i),h=n.resolve(i,p),g=Ot(h);if(g===`file`){let e=!!s;if(!e){let t=await Z(q({message:`${p} 已存在且是一个文件,请选择如何继续`,options:[{label:`取消操作`,value:`no`},{label:`删除该文件并继续`,value:`yes`}]}),`${p} 已存在且是一个文件`,`--overwrite(会删除该文件)`);if(P(t))return $();e=t===`yes`}if(!e)return $();t.rmSync(h,{force:!0})}else if(g===`dir`&&!kt(h)){let e=s?`yes`:void 0;if(!e){let t=await Z(q({message:`${p===`.`?`当前目录`:`目标目录${p}`} 不为空,请选择如何继续`,options:[{label:`取消操作`,value:`no`},{label:`删除现有文件并继续`,value:`yes`},{label:`忽略文件并继续`,value:`ignore`}]}),`${p===`.`?`当前目录`:`目标目录${p}`} 不为空`,`--overwrite(会清空该目录,.git 保留)`);if(P(t))return $();e=t}switch(e){case`yes`:At(h);break;case`no`:return $()}}let _=m.name;if(m.needsPrompt){let e=await Z(qe({message:`请输入package.json name`,defaultValue:Mt(_),placeholder:Mt(_),validate(e){if(e&&!jt(e))return`无效的package.json name`}}),`package.json name`,`--package-name <name>`);if(P(e))return $();_=e}let{template:v,invalid:y}=Vt(c,yt),b=v;if(!b){let e=await Z(q({message:y?`${c}不是有效的模板名,请从以下选取:`:`选择模板`,options:X.map(e=>{let{color:t,name:n,display:r}=e;return{label:t(r||n),value:e}})}),`选择模板`,`-t <模板名>,可用模板见 --help`);if(P(e))return $();if(b=e.name,e.variants?.length){let t=await Z(q({message:`选择预设`,options:e.variants.map(e=>{let{name:t,customCommand:n}=e,r=n?Nt(n,f).replace(/ TARGET_DIR$/,``):void 0;return{label:Pt(e),value:t,hint:r}})}),`选择预设`,`-t <模板名>,可用模板见 --help`);if(P(t))return $();b=t}}let x=f?.name||`npm`,S=Gt(X,b);if(S){let{command:e,args:t}=Kt(Nt(S,f),p);Q.close(`转交给 ${e}`);let{status:n}=lt.default.sync(e,t,{stdio:`inherit`});return n??0}on.start(`正在${h}中创建模板`),$t({templateDir:n.resolve(an,`template-${b}`),root:h,packageName:_,renameFiles:bt}),on.stop(`模板创建成功`);let C=l;if(C===void 0){let e=await Z(Be({message:`是否立即使用${x}安装依赖?`}),`是否立即安装依赖`,`-i(装)或 --no-immediate(不装)`);if(P(e))return $();C=e}if(C){let e=Bt(h,x);if(e!==0)return G.warn(`项目已创建,但依赖没装上。${x} 退出码 ${e}`),G.info(Xt(i,h,x)),Q.close(`依赖安装失败`),e}return G.info(Xt(i,h,x,C)),Q.close(`程序结束`),0}async function cn(){r.exitCode=1;try{r.exitCode=await sn()}catch(e){if(e instanceof St){G.error(`需要交互才能继续,但输入已结束(非 TTY,或输入已读完)\n这一步在问:${e.step}\n非交互环境请改用:${e.hint}`),Dt(),Q.markClosed();return}on.error(`创建失败`),G.error(e instanceof Error?e.message:String(e)),Q.close(`已中止`),e instanceof Error&&e.stack&&console.error(e.stack),r.exitCode=1}finally{Q.close(),Q.restoreCursor()}}export{sn as main,cn as runCli};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@huberyyang/create-todo-vue",
3
3
  "type": "module",
4
- "version": "1.5.1",
4
+ "version": "1.6.1",
5
5
  "packageManager": "pnpm@11.25.0",
6
6
  "description": "💡 create vue projects with awesome templates",
7
7
  "author": "HuberyYang",
@@ -29,12 +29,7 @@
29
29
  "files": [
30
30
  "bin",
31
31
  "dist",
32
- "template-lit",
33
- "template-lit-ts",
34
- "template-vanilla",
35
- "template-vanilla-ts",
36
- "template-vue",
37
- "template-vue-ts"
32
+ "template-*/**"
38
33
  ],
39
34
  "engines": {
40
35
  "node": "^20.19.0 || >=22.12.0"