@zjex/git-workflow 0.2.0 → 0.2.2

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/dist/index.js CHANGED
@@ -1,35 +1,1293 @@
1
- #!/usr/bin/env node --no-warnings
2
- var zt=Object.create;var Ye=Object.defineProperty;var Yt=Object.getOwnPropertyDescriptor;var Jt=Object.getOwnPropertyNames;var Zt=Object.getPrototypeOf,Qt=Object.prototype.hasOwnProperty;var T=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,u)=>(typeof require<"u"?require:t)[u]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Xt=(e,t)=>()=>(e&&(t=e(e=0)),t);var _=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var en=(e,t,u,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Jt(t))!Qt.call(e,o)&&o!==u&&Ye(e,o,{get:()=>t[o],enumerable:!(n=Yt(t,o))||n.enumerable});return e};var oe=(e,t,u)=>(u=e!=null?zt(Zt(e)):{},en(t||!e||!e.__esModule?Ye(u,"default",{value:e,enumerable:!0}):u,e));import _u from"path";import{fileURLToPath as Ru}from"url";var l=Xt(()=>{"use strict"});var Qe=_((no,Ze)=>{"use strict";l();var un=T("tty"),on=un?.WriteStream?.prototype?.hasColors?.()??!1,C=(e,t)=>{if(!on)return o=>o;let u=`\x1B[${e}m`,n=`\x1B[${t}m`;return o=>{let r=o+"",s=r.indexOf(n);if(s===-1)return u+r+n;let i=u,a=0,m=(t===22?n:"")+u;for(;s!==-1;)i+=r.slice(a,s)+m,a=s+n.length,s=r.indexOf(n,a);return i+=r.slice(a)+n,i}},F={};F.reset=C(0,0);F.bold=C(1,22);F.dim=C(2,22);F.italic=C(3,23);F.underline=C(4,24);F.overline=C(53,55);F.inverse=C(7,27);F.hidden=C(8,28);F.strikethrough=C(9,29);F.black=C(30,39);F.red=C(31,39);F.green=C(32,39);F.yellow=C(33,39);F.blue=C(34,39);F.magenta=C(35,39);F.cyan=C(36,39);F.white=C(37,39);F.gray=C(90,39);F.bgBlack=C(40,49);F.bgRed=C(41,49);F.bgGreen=C(42,49);F.bgYellow=C(43,49);F.bgBlue=C(44,49);F.bgMagenta=C(45,49);F.bgCyan=C(46,49);F.bgWhite=C(47,49);F.bgGray=C(100,49);F.redBright=C(91,39);F.greenBright=C(92,39);F.yellowBright=C(93,39);F.blueBright=C(94,39);F.magentaBright=C(95,39);F.cyanBright=C(96,39);F.whiteBright=C(97,39);F.bgRedBright=C(101,49);F.bgGreenBright=C(102,49);F.bgYellowBright=C(103,49);F.bgBlueBright=C(104,49);F.bgMagentaBright=C(105,49);F.bgCyanBright=C(106,49);F.bgWhiteBright=C(107,49);Ze.exports=F});var rt=_((Lo,ot)=>{"use strict";l();ot.exports=mn;function gn(e){let t={defaultWidth:0,output:process.stdout,tty:T("tty")};return e?(Object.keys(t).forEach(function(u){e[u]||(e[u]=t[u])}),e):t}function mn(e){let t=gn(e);if(t.output.getWindowSize)return t.output.getWindowSize()[0]||t.defaultWidth;if(t.tty.getWindowSize)return t.tty.getWindowSize()[1]||t.defaultWidth;if(t.output.columns)return t.output.columns;if(process.env.CLI_WIDTH){let u=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(u)&&u!==0)return u}return t.defaultWidth}});var it=_((jo,st)=>{"use strict";l();st.exports=({onlyFirst:e=!1}={})=>{let t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}});var pe=_((Uo,at)=>{"use strict";l();var pn=it();at.exports=e=>typeof e=="string"?e.replace(pn(),""):e});var lt=_((Io,de)=>{"use strict";l();var Dt=e=>Number.isNaN(e)?!1:e>=4352&&(e<=4447||e===9001||e===9002||11904<=e&&e<=12871&&e!==12351||12880<=e&&e<=19903||19968<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65131||65281<=e&&e<=65376||65504<=e&&e<=65510||110592<=e&&e<=110593||127488<=e&&e<=127569||131072<=e&&e<=262141);de.exports=Dt;de.exports.default=Dt});var ft=_((Oo,ct)=>{"use strict";l();ct.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var gt=_((qo,Fe)=>{"use strict";l();var dn=pe(),Fn=lt(),Cn=ft(),ht=e=>{if(typeof e!="string"||e.length===0||(e=dn(e),e.length===0))return 0;e=e.replace(Cn()," ");let t=0;for(let u=0;u<e.length;u++){let n=e.codePointAt(u);n<=31||n>=127&&n<=159||n>=768&&n<=879||(n>65535&&u++,t+=Fn(n)?2:1)}return t};Fe.exports=ht;Fe.exports.default=ht});var pt=_((Wo,mt)=>{"use strict";l();mt.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Ce=_((Ho,Ft)=>{"use strict";l();var J=pt(),dt={};for(let e of Object.keys(J))dt[J[e]]=e;var c={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};Ft.exports=c;for(let e of Object.keys(c)){if(!("channels"in c[e]))throw new Error("missing channels property: "+e);if(!("labels"in c[e]))throw new Error("missing channel labels property: "+e);if(c[e].labels.length!==c[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:t,labels:u}=c[e];delete c[e].channels,delete c[e].labels,Object.defineProperty(c[e],"channels",{value:t}),Object.defineProperty(c[e],"labels",{value:u})}c.rgb.hsl=function(e){let t=e[0]/255,u=e[1]/255,n=e[2]/255,o=Math.min(t,u,n),r=Math.max(t,u,n),s=r-o,i,a;r===o?i=0:t===r?i=(u-n)/s:u===r?i=2+(n-t)/s:n===r&&(i=4+(t-u)/s),i=Math.min(i*60,360),i<0&&(i+=360);let f=(o+r)/2;return r===o?a=0:f<=.5?a=s/(r+o):a=s/(2-r-o),[i,a*100,f*100]};c.rgb.hsv=function(e){let t,u,n,o,r,s=e[0]/255,i=e[1]/255,a=e[2]/255,f=Math.max(s,i,a),m=f-Math.min(s,i,a),g=function(b){return(f-b)/6/m+1/2};return m===0?(o=0,r=0):(r=m/f,t=g(s),u=g(i),n=g(a),s===f?o=n-u:i===f?o=1/3+t-n:a===f&&(o=2/3+u-t),o<0?o+=1:o>1&&(o-=1)),[o*360,r*100,f*100]};c.rgb.hwb=function(e){let t=e[0],u=e[1],n=e[2],o=c.rgb.hsl(e)[0],r=1/255*Math.min(t,Math.min(u,n));return n=1-1/255*Math.max(t,Math.max(u,n)),[o,r*100,n*100]};c.rgb.cmyk=function(e){let t=e[0]/255,u=e[1]/255,n=e[2]/255,o=Math.min(1-t,1-u,1-n),r=(1-t-o)/(1-o)||0,s=(1-u-o)/(1-o)||0,i=(1-n-o)/(1-o)||0;return[r*100,s*100,i*100,o*100]};function En(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}c.rgb.keyword=function(e){let t=dt[e];if(t)return t;let u=1/0,n;for(let o of Object.keys(J)){let r=J[o],s=En(e,r);s<u&&(u=s,n=o)}return n};c.keyword.rgb=function(e){return J[e]};c.rgb.xyz=function(e){let t=e[0]/255,u=e[1]/255,n=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,u=u>.04045?((u+.055)/1.055)**2.4:u/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;let o=t*.4124+u*.3576+n*.1805,r=t*.2126+u*.7152+n*.0722,s=t*.0193+u*.1192+n*.9505;return[o*100,r*100,s*100]};c.rgb.lab=function(e){let t=c.rgb.xyz(e),u=t[0],n=t[1],o=t[2];u/=95.047,n/=100,o/=108.883,u=u>.008856?u**(1/3):7.787*u+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let r=116*n-16,s=500*(u-n),i=200*(n-o);return[r,s,i]};c.hsl.rgb=function(e){let t=e[0]/360,u=e[1]/100,n=e[2]/100,o,r,s;if(u===0)return s=n*255,[s,s,s];n<.5?o=n*(1+u):o=n+u-n*u;let i=2*n-o,a=[0,0,0];for(let f=0;f<3;f++)r=t+1/3*-(f-1),r<0&&r++,r>1&&r--,6*r<1?s=i+(o-i)*6*r:2*r<1?s=o:3*r<2?s=i+(o-i)*(2/3-r)*6:s=i,a[f]=s*255;return a};c.hsl.hsv=function(e){let t=e[0],u=e[1]/100,n=e[2]/100,o=u,r=Math.max(n,.01);n*=2,u*=n<=1?n:2-n,o*=r<=1?r:2-r;let s=(n+u)/2,i=n===0?2*o/(r+o):2*u/(n+u);return[t,i*100,s*100]};c.hsv.rgb=function(e){let t=e[0]/60,u=e[1]/100,n=e[2]/100,o=Math.floor(t)%6,r=t-Math.floor(t),s=255*n*(1-u),i=255*n*(1-u*r),a=255*n*(1-u*(1-r));switch(n*=255,o){case 0:return[n,a,s];case 1:return[i,n,s];case 2:return[s,n,a];case 3:return[s,i,n];case 4:return[a,s,n];case 5:return[n,s,i]}};c.hsv.hsl=function(e){let t=e[0],u=e[1]/100,n=e[2]/100,o=Math.max(n,.01),r,s;s=(2-u)*n;let i=(2-u)*o;return r=u*o,r/=i<=1?i:2-i,r=r||0,s/=2,[t,r*100,s*100]};c.hwb.rgb=function(e){let t=e[0]/360,u=e[1]/100,n=e[2]/100,o=u+n,r;o>1&&(u/=o,n/=o);let s=Math.floor(6*t),i=1-n;r=6*t-s,(s&1)!==0&&(r=1-r);let a=u+r*(i-u),f,m,g;switch(s){default:case 6:case 0:f=i,m=a,g=u;break;case 1:f=a,m=i,g=u;break;case 2:f=u,m=i,g=a;break;case 3:f=u,m=a,g=i;break;case 4:f=a,m=u,g=i;break;case 5:f=i,m=u,g=a;break}return[f*255,m*255,g*255]};c.cmyk.rgb=function(e){let t=e[0]/100,u=e[1]/100,n=e[2]/100,o=e[3]/100,r=1-Math.min(1,t*(1-o)+o),s=1-Math.min(1,u*(1-o)+o),i=1-Math.min(1,n*(1-o)+o);return[r*255,s*255,i*255]};c.xyz.rgb=function(e){let t=e[0]/100,u=e[1]/100,n=e[2]/100,o,r,s;return o=t*3.2406+u*-1.5372+n*-.4986,r=t*-.9689+u*1.8758+n*.0415,s=t*.0557+u*-.204+n*1.057,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,r=r>.0031308?1.055*r**(1/2.4)-.055:r*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=Math.min(Math.max(0,o),1),r=Math.min(Math.max(0,r),1),s=Math.min(Math.max(0,s),1),[o*255,r*255,s*255]};c.xyz.lab=function(e){let t=e[0],u=e[1],n=e[2];t/=95.047,u/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,u=u>.008856?u**(1/3):7.787*u+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let o=116*u-16,r=500*(t-u),s=200*(u-n);return[o,r,s]};c.lab.xyz=function(e){let t=e[0],u=e[1],n=e[2],o,r,s;r=(t+16)/116,o=u/500+r,s=r-n/200;let i=r**3,a=o**3,f=s**3;return r=i>.008856?i:(r-16/116)/7.787,o=a>.008856?a:(o-16/116)/7.787,s=f>.008856?f:(s-16/116)/7.787,o*=95.047,r*=100,s*=108.883,[o,r,s]};c.lab.lch=function(e){let t=e[0],u=e[1],n=e[2],o;o=Math.atan2(n,u)*360/2/Math.PI,o<0&&(o+=360);let s=Math.sqrt(u*u+n*n);return[t,s,o]};c.lch.lab=function(e){let t=e[0],u=e[1],o=e[2]/360*2*Math.PI,r=u*Math.cos(o),s=u*Math.sin(o);return[t,r,s]};c.rgb.ansi16=function(e,t=null){let[u,n,o]=e,r=t===null?c.rgb.hsv(e)[2]:t;if(r=Math.round(r/50),r===0)return 30;let s=30+(Math.round(o/255)<<2|Math.round(n/255)<<1|Math.round(u/255));return r===2&&(s+=60),s};c.hsv.ansi16=function(e){return c.rgb.ansi16(c.hsv.rgb(e),e[2])};c.rgb.ansi256=function(e){let t=e[0],u=e[1],n=e[2];return t===u&&u===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(u/255*5)+Math.round(n/255*5)};c.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];let u=(~~(e>50)+1)*.5,n=(t&1)*u*255,o=(t>>1&1)*u*255,r=(t>>2&1)*u*255;return[n,o,r]};c.ansi256.rgb=function(e){if(e>=232){let r=(e-232)*10+8;return[r,r,r]}e-=16;let t,u=Math.floor(e/36)/5*255,n=Math.floor((t=e%36)/6)/5*255,o=t%6/5*255;return[u,n,o]};c.rgb.hex=function(e){let u=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(u.length)+u};c.hex.rgb=function(e){let t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let u=t[0];t[0].length===3&&(u=u.split("").map(i=>i+i).join(""));let n=parseInt(u,16),o=n>>16&255,r=n>>8&255,s=n&255;return[o,r,s]};c.rgb.hcg=function(e){let t=e[0]/255,u=e[1]/255,n=e[2]/255,o=Math.max(Math.max(t,u),n),r=Math.min(Math.min(t,u),n),s=o-r,i,a;return s<1?i=r/(1-s):i=0,s<=0?a=0:o===t?a=(u-n)/s%6:o===u?a=2+(n-t)/s:a=4+(t-u)/s,a/=6,a%=1,[a*360,s*100,i*100]};c.hsl.hcg=function(e){let t=e[1]/100,u=e[2]/100,n=u<.5?2*t*u:2*t*(1-u),o=0;return n<1&&(o=(u-.5*n)/(1-n)),[e[0],n*100,o*100]};c.hsv.hcg=function(e){let t=e[1]/100,u=e[2]/100,n=t*u,o=0;return n<1&&(o=(u-n)/(1-n)),[e[0],n*100,o*100]};c.hcg.rgb=function(e){let t=e[0]/360,u=e[1]/100,n=e[2]/100;if(u===0)return[n*255,n*255,n*255];let o=[0,0,0],r=t%1*6,s=r%1,i=1-s,a=0;switch(Math.floor(r)){case 0:o[0]=1,o[1]=s,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=s;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=s,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-u)*n,[(u*o[0]+a)*255,(u*o[1]+a)*255,(u*o[2]+a)*255]};c.hcg.hsv=function(e){let t=e[1]/100,u=e[2]/100,n=t+u*(1-t),o=0;return n>0&&(o=t/n),[e[0],o*100,n*100]};c.hcg.hsl=function(e){let t=e[1]/100,n=e[2]/100*(1-t)+.5*t,o=0;return n>0&&n<.5?o=t/(2*n):n>=.5&&n<1&&(o=t/(2*(1-n))),[e[0],o*100,n*100]};c.hcg.hwb=function(e){let t=e[1]/100,u=e[2]/100,n=t+u*(1-t);return[e[0],(n-t)*100,(1-n)*100]};c.hwb.hcg=function(e){let t=e[1]/100,n=1-e[2]/100,o=n-t,r=0;return o<1&&(r=(n-o)/(1-o)),[e[0],o*100,r*100]};c.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};c.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};c.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};c.gray.hsl=function(e){return[0,0,e[0]]};c.gray.hsv=c.gray.hsl;c.gray.hwb=function(e){return[0,100,e[0]]};c.gray.cmyk=function(e){return[0,0,0,e[0]]};c.gray.lab=function(e){return[e[0],0,0]};c.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(n.length)+n};c.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var Et=_((zo,Ct)=>{"use strict";l();var re=Ce();function bn(){let e={},t=Object.keys(re);for(let u=t.length,n=0;n<u;n++)e[t[n]]={distance:-1,parent:null};return e}function wn(e){let t=bn(),u=[e];for(t[e].distance=0;u.length;){let n=u.pop(),o=Object.keys(re[n]);for(let r=o.length,s=0;s<r;s++){let i=o[s],a=t[i];a.distance===-1&&(a.distance=t[n].distance+1,a.parent=n,u.unshift(i))}}return t}function Bn(e,t){return function(u){return t(e(u))}}function xn(e,t){let u=[t[e].parent,e],n=re[t[e].parent][e],o=t[e].parent;for(;t[o].parent;)u.unshift(t[o].parent),n=Bn(re[t[o].parent][o],n),o=t[o].parent;return n.conversion=u,n}Ct.exports=function(e){let t=wn(e),u={},n=Object.keys(t);for(let o=n.length,r=0;r<o;r++){let s=n[r];t[s].parent!==null&&(u[s]=xn(s,t))}return u}});var wt=_((Jo,bt)=>{"use strict";l();var Ee=Ce(),yn=Et(),q={},$n=Object.keys(Ee);function vn(e){let t=function(...u){let n=u[0];return n==null?n:(n.length>1&&(u=n),e(u))};return"conversion"in e&&(t.conversion=e.conversion),t}function Sn(e){let t=function(...u){let n=u[0];if(n==null)return n;n.length>1&&(u=n);let o=e(u);if(typeof o=="object")for(let r=o.length,s=0;s<r;s++)o[s]=Math.round(o[s]);return o};return"conversion"in e&&(t.conversion=e.conversion),t}$n.forEach(e=>{q[e]={},Object.defineProperty(q[e],"channels",{value:Ee[e].channels}),Object.defineProperty(q[e],"labels",{value:Ee[e].labels});let t=yn(e);Object.keys(t).forEach(n=>{let o=t[n];q[e][n]=Sn(o),q[e][n].raw=vn(o)})});bt.exports=q});var St=_((Qo,vt)=>{"use strict";l();var Bt=(e,t)=>(...u)=>`\x1B[${e(...u)+t}m`,xt=(e,t)=>(...u)=>{let n=e(...u);return`\x1B[${38+t};5;${n}m`},yt=(e,t)=>(...u)=>{let n=e(...u);return`\x1B[${38+t};2;${n[0]};${n[1]};${n[2]}m`},se=e=>e,$t=(e,t,u)=>[e,t,u],G=(e,t,u)=>{Object.defineProperty(e,t,{get:()=>{let n=u();return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0}),n},enumerable:!0,configurable:!0})},be,W=(e,t,u,n)=>{be===void 0&&(be=wt());let o=n?10:0,r={};for(let[s,i]of Object.entries(be)){let a=s==="ansi16"?"ansi":s;s===t?r[a]=e(u,o):typeof i=="object"&&(r[a]=e(i[t],o))}return r};function An(){let e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(let[u,n]of Object.entries(t)){for(let[o,r]of Object.entries(n))t[o]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},n[o]=t[o],e.set(r[0],r[1]);Object.defineProperty(t,u,{value:n,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="\x1B[39m",t.bgColor.close="\x1B[49m",G(t.color,"ansi",()=>W(Bt,"ansi16",se,!1)),G(t.color,"ansi256",()=>W(xt,"ansi256",se,!1)),G(t.color,"ansi16m",()=>W(yt,"rgb",$t,!1)),G(t.bgColor,"ansi",()=>W(Bt,"ansi16",se,!0)),G(t.bgColor,"ansi256",()=>W(xt,"ansi256",se,!0)),G(t.bgColor,"ansi16m",()=>W(yt,"rgb",$t,!0)),t}Object.defineProperty(vt,"exports",{enumerable:!0,get:An})});var _t=_((er,kt)=>{"use strict";l();var Z=gt(),kn=pe(),_n=St(),Be=new Set(["\x1B","\x9B"]),Ln=39,At=e=>`${Be.values().next().value}[${e}m`,Rn=e=>e.split(" ").map(t=>Z(t)),we=(e,t,u)=>{let n=[...t],o=!1,r=Z(kn(e[e.length-1]));for(let[s,i]of n.entries()){let a=Z(i);if(r+a<=u?e[e.length-1]+=i:(e.push(i),r=0),Be.has(i))o=!0;else if(o&&i==="m"){o=!1;continue}o||(r+=a,r===u&&s<n.length-1&&(e.push(""),r=0))}!r&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},jn=e=>{let t=e.split(" "),u=t.length;for(;u>0&&!(Z(t[u-1])>0);)u--;return u===t.length?e:t.slice(0,u).join(" ")+t.slice(u).join("")},Tn=(e,t,u={})=>{if(u.trim!==!1&&e.trim()==="")return"";let n="",o="",r,s=Rn(e),i=[""];for(let[a,f]of e.split(" ").entries()){u.trim!==!1&&(i[i.length-1]=i[i.length-1].trimLeft());let m=Z(i[i.length-1]);if(a!==0&&(m>=t&&(u.wordWrap===!1||u.trim===!1)&&(i.push(""),m=0),(m>0||u.trim===!1)&&(i[i.length-1]+=" ",m++)),u.hard&&s[a]>t){let g=t-m,b=1+Math.floor((s[a]-g-1)/t);Math.floor((s[a]-1)/t)<b&&i.push(""),we(i,f,t);continue}if(m+s[a]>t&&m>0&&s[a]>0){if(u.wordWrap===!1&&m<t){we(i,f,t);continue}i.push("")}if(m+s[a]>t&&u.wordWrap===!1){we(i,f,t);continue}i[i.length-1]+=f}u.trim!==!1&&(i=i.map(jn)),n=i.join(`
3
- `);for(let[a,f]of[...n].entries()){if(o+=f,Be.has(f)){let g=parseFloat(/\d[^m]*/.exec(n.slice(a,a+4)));r=g===Ln?null:g}let m=_n.codes.get(Number(r));r&&m&&(n[a+1]===`
4
- `?o+=At(m):f===`
5
- `&&(o+=At(r)))}return o};kt.exports=(e,t,u)=>String(e).normalize().replace(/\r\n/g,`
6
- `).split(`
7
- `).map(n=>Tn(n,t,u)).join(`
8
- `)});var Rt=_((lr,Lt)=>{"use strict";l();var On=T("stream"),xe=class extends On{#n=null;constructor(t={}){super(t),this.writable=this.readable=!0,this.muted=!1,this.on("pipe",this._onpipe),this.replace=t.replace,this._prompt=t.prompt||null,this._hadControl=!1}#t(t,u){return this._dest?this._dest[t]:this._src?this._src[t]:u}#e(t,...u){typeof this._dest?.[t]=="function"&&this._dest[t](...u),typeof this._src?.[t]=="function"&&this._src[t](...u)}get isTTY(){return this.#n!==null?this.#n:this.#t("isTTY",!1)}set isTTY(t){this.#n=t}get rows(){return this.#t("rows")}get columns(){return this.#t("columns")}mute(){this.muted=!0}unmute(){this.muted=!1}_onpipe(t){this._src=t}pipe(t,u){return this._dest=t,super.pipe(t,u)}pause(){if(this._src)return this._src.pause()}resume(){if(this._src)return this._src.resume()}write(t){if(this.muted){if(!this.replace)return!0;if(t.match(/^\u001b/))return t.indexOf(this._prompt)===0&&(t=t.slice(this._prompt.length),t=t.replace(/./g,this.replace),t=this._prompt+t),this._hadControl=!0,this.emit("data",t);this._prompt&&this._hadControl&&t.indexOf(this._prompt)===0&&(this._hadControl=!1,this.emit("data",this._prompt),t=t.slice(this._prompt.length)),t=t.toString().replace(/./g,this.replace)}this.emit("data",t)}end(t){this.muted&&(t&&this.replace?t=t.toString().replace(/./g,this.replace):t=null),t&&this.emit("data",t),this.emit("end")}destroy(...t){return this.#e("destroy",...t)}destroySoon(...t){return this.#e("destroySoon",...t)}close(...t){return this.#e("close",...t)}};Lt.exports=xe});l();import{cac as $u}from"cac";import{select as vu}from"@inquirer/prompts";l();l();l();var Y=class extends Error{name="ExitPromptError"};l();l();import{AsyncResource as Yu}from"async_hooks";l();import{AsyncLocalStorage as tn,AsyncResource as qu}from"async_hooks";var Wu=new tn;l();l();l();var R=oe(Qe(),1);l();import j from"process";function rn(){return j.platform!=="win32"?j.env.TERM!=="linux":!!j.env.WT_SESSION||!!j.env.TERMINUS_SUBLIME||j.env.ConEmuTask==="{cmd::Cmder}"||j.env.TERM_PROGRAM==="Terminus-Sublime"||j.env.TERM_PROGRAM==="vscode"||j.env.TERM==="xterm-256color"||j.env.TERM==="alacritty"||j.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Xe={circleQuestionMark:"(?)",questionMarkPrefix:"(?)",square:"\u2588",squareDarkShade:"\u2593",squareMediumShade:"\u2592",squareLightShade:"\u2591",squareTop:"\u2580",squareBottom:"\u2584",squareLeft:"\u258C",squareRight:"\u2590",squareCenter:"\u25A0",bullet:"\u25CF",dot:"\u2024",ellipsis:"\u2026",pointerSmall:"\u203A",triangleUp:"\u25B2",triangleUpSmall:"\u25B4",triangleDown:"\u25BC",triangleDownSmall:"\u25BE",triangleLeftSmall:"\u25C2",triangleRightSmall:"\u25B8",home:"\u2302",heart:"\u2665",musicNote:"\u266A",musicNoteBeamed:"\u266B",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",arrowLeftRight:"\u2194",arrowUpDown:"\u2195",almostEqual:"\u2248",notEqual:"\u2260",lessOrEqual:"\u2264",greaterOrEqual:"\u2265",identical:"\u2261",infinity:"\u221E",subscriptZero:"\u2080",subscriptOne:"\u2081",subscriptTwo:"\u2082",subscriptThree:"\u2083",subscriptFour:"\u2084",subscriptFive:"\u2085",subscriptSix:"\u2086",subscriptSeven:"\u2087",subscriptEight:"\u2088",subscriptNine:"\u2089",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneEighth:"\u215B",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E",line:"\u2500",lineBold:"\u2501",lineDouble:"\u2550",lineDashed0:"\u2504",lineDashed1:"\u2505",lineDashed2:"\u2508",lineDashed3:"\u2509",lineDashed4:"\u254C",lineDashed5:"\u254D",lineDashed6:"\u2574",lineDashed7:"\u2576",lineDashed8:"\u2578",lineDashed9:"\u257A",lineDashed10:"\u257C",lineDashed11:"\u257E",lineDashed12:"\u2212",lineDashed13:"\u2013",lineDashed14:"\u2010",lineDashed15:"\u2043",lineVertical:"\u2502",lineVerticalBold:"\u2503",lineVerticalDouble:"\u2551",lineVerticalDashed0:"\u2506",lineVerticalDashed1:"\u2507",lineVerticalDashed2:"\u250A",lineVerticalDashed3:"\u250B",lineVerticalDashed4:"\u254E",lineVerticalDashed5:"\u254F",lineVerticalDashed6:"\u2575",lineVerticalDashed7:"\u2577",lineVerticalDashed8:"\u2579",lineVerticalDashed9:"\u257B",lineVerticalDashed10:"\u257D",lineVerticalDashed11:"\u257F",lineDownLeft:"\u2510",lineDownLeftArc:"\u256E",lineDownBoldLeftBold:"\u2513",lineDownBoldLeft:"\u2512",lineDownLeftBold:"\u2511",lineDownDoubleLeftDouble:"\u2557",lineDownDoubleLeft:"\u2556",lineDownLeftDouble:"\u2555",lineDownRight:"\u250C",lineDownRightArc:"\u256D",lineDownBoldRightBold:"\u250F",lineDownBoldRight:"\u250E",lineDownRightBold:"\u250D",lineDownDoubleRightDouble:"\u2554",lineDownDoubleRight:"\u2553",lineDownRightDouble:"\u2552",lineUpLeft:"\u2518",lineUpLeftArc:"\u256F",lineUpBoldLeftBold:"\u251B",lineUpBoldLeft:"\u251A",lineUpLeftBold:"\u2519",lineUpDoubleLeftDouble:"\u255D",lineUpDoubleLeft:"\u255C",lineUpLeftDouble:"\u255B",lineUpRight:"\u2514",lineUpRightArc:"\u2570",lineUpBoldRightBold:"\u2517",lineUpBoldRight:"\u2516",lineUpRightBold:"\u2515",lineUpDoubleRightDouble:"\u255A",lineUpDoubleRight:"\u2559",lineUpRightDouble:"\u2558",lineUpDownLeft:"\u2524",lineUpBoldDownBoldLeftBold:"\u252B",lineUpBoldDownBoldLeft:"\u2528",lineUpDownLeftBold:"\u2525",lineUpBoldDownLeftBold:"\u2529",lineUpDownBoldLeftBold:"\u252A",lineUpDownBoldLeft:"\u2527",lineUpBoldDownLeft:"\u2526",lineUpDoubleDownDoubleLeftDouble:"\u2563",lineUpDoubleDownDoubleLeft:"\u2562",lineUpDownLeftDouble:"\u2561",lineUpDownRight:"\u251C",lineUpBoldDownBoldRightBold:"\u2523",lineUpBoldDownBoldRight:"\u2520",lineUpDownRightBold:"\u251D",lineUpBoldDownRightBold:"\u2521",lineUpDownBoldRightBold:"\u2522",lineUpDownBoldRight:"\u251F",lineUpBoldDownRight:"\u251E",lineUpDoubleDownDoubleRightDouble:"\u2560",lineUpDoubleDownDoubleRight:"\u255F",lineUpDownRightDouble:"\u255E",lineDownLeftRight:"\u252C",lineDownBoldLeftBoldRightBold:"\u2533",lineDownLeftBoldRightBold:"\u252F",lineDownBoldLeftRight:"\u2530",lineDownBoldLeftBoldRight:"\u2531",lineDownBoldLeftRightBold:"\u2532",lineDownLeftRightBold:"\u252E",lineDownLeftBoldRight:"\u252D",lineDownDoubleLeftDoubleRightDouble:"\u2566",lineDownDoubleLeftRight:"\u2565",lineDownLeftDoubleRightDouble:"\u2564",lineUpLeftRight:"\u2534",lineUpBoldLeftBoldRightBold:"\u253B",lineUpLeftBoldRightBold:"\u2537",lineUpBoldLeftRight:"\u2538",lineUpBoldLeftBoldRight:"\u2539",lineUpBoldLeftRightBold:"\u253A",lineUpLeftRightBold:"\u2536",lineUpLeftBoldRight:"\u2535",lineUpDoubleLeftDoubleRightDouble:"\u2569",lineUpDoubleLeftRight:"\u2568",lineUpLeftDoubleRightDouble:"\u2567",lineUpDownLeftRight:"\u253C",lineUpBoldDownBoldLeftBoldRightBold:"\u254B",lineUpDownBoldLeftBoldRightBold:"\u2548",lineUpBoldDownLeftBoldRightBold:"\u2547",lineUpBoldDownBoldLeftRightBold:"\u254A",lineUpBoldDownBoldLeftBoldRight:"\u2549",lineUpBoldDownLeftRight:"\u2540",lineUpDownBoldLeftRight:"\u2541",lineUpDownLeftBoldRight:"\u253D",lineUpDownLeftRightBold:"\u253E",lineUpBoldDownBoldLeftRight:"\u2542",lineUpDownLeftBoldRightBold:"\u253F",lineUpBoldDownLeftBoldRight:"\u2543",lineUpBoldDownLeftRightBold:"\u2544",lineUpDownBoldLeftBoldRight:"\u2545",lineUpDownBoldLeftRightBold:"\u2546",lineUpDoubleDownDoubleLeftDoubleRightDouble:"\u256C",lineUpDoubleDownDoubleLeftRight:"\u256B",lineUpDownLeftDoubleRightDouble:"\u256A",lineCross:"\u2573",lineBackslash:"\u2572",lineSlash:"\u2571"},et={tick:"\u2714",info:"\u2139",warning:"\u26A0",cross:"\u2718",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",pointer:"\u276F",triangleUpOutline:"\u25B3",triangleLeft:"\u25C0",triangleRight:"\u25B6",lozenge:"\u25C6",lozengeOutline:"\u25C7",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",star:"\u2605",play:"\u25B6",nodejs:"\u2B22",oneSeventh:"\u2150",oneNinth:"\u2151",oneTenth:"\u2152"},sn={tick:"\u221A",info:"i",warning:"\u203C",cross:"\xD7",squareSmall:"\u25A1",squareSmallFilled:"\u25A0",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",pointer:">",triangleUpOutline:"\u2206",triangleLeft:"\u25C4",triangleRight:"\u25BA",lozenge:"\u2666",lozengeOutline:"\u25CA",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",star:"\u2736",play:"\u25BA",nodejs:"\u2666",oneSeventh:"1/7",oneNinth:"1/9",oneTenth:"1/10"},an={...Xe,...et},Dn={...Xe,...sn},ln=rn(),cn=ln?an:Dn,me=cn,ro=Object.entries(et);var fn={prefix:{idle:R.default.blue("?"),done:R.default.green(me.tick)},spinner:{interval:80,frames:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"].map(e=>R.default.yellow(e))},style:{answer:R.default.cyan,message:R.default.bold,error:e=>R.default.red(`> ${e}`),defaultAnswer:e=>R.default.dim(`(${e})`),help:R.default.dim,highlight:R.default.cyan,key:e=>R.default.cyan(R.default.bold(`<${e}>`))}};l();l();l();l();l();var Un=oe(rt(),1),Pn=oe(_t(),1);l();var Vn=oe(Rt(),1);import*as Wn from"readline";import{AsyncResource as Or}from"async_hooks";l();l();var M=[];M.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&M.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&M.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var ie=e=>!!e&&typeof e=="object"&&typeof e.removeListener=="function"&&typeof e.emit=="function"&&typeof e.reallyExit=="function"&&typeof e.listeners=="function"&&typeof e.kill=="function"&&typeof e.pid=="number"&&typeof e.on=="function",ye=Symbol.for("signal-exit emitter"),$e=globalThis,Nn=Object.defineProperty.bind(Object),ve=class{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if($e[ye])return $e[ye];Nn($e,ye,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(t,u){this.listeners[t].push(u)}removeListener(t,u){let n=this.listeners[t],o=n.indexOf(u);o!==-1&&(o===0&&n.length===1?n.length=0:n.splice(o,1))}emit(t,u,n){if(this.emitted[t])return!1;this.emitted[t]=!0;let o=!1;for(let r of this.listeners[t])o=r(u,n)===!0||o;return t==="exit"&&(o=this.emit("afterExit",u,n)||o),o}},ae=class{},qn=e=>({onExit(t,u){return e.onExit(t,u)},load(){return e.load()},unload(){return e.unload()}}),Se=class extends ae{onExit(){return()=>{}}load(){}unload(){}},Ae=class extends ae{#n=ke.platform==="win32"?"SIGINT":"SIGHUP";#t=new ve;#e;#r;#s;#o={};#u=!1;constructor(t){super(),this.#e=t,this.#o={};for(let u of M)this.#o[u]=()=>{let n=this.#e.listeners(u),{count:o}=this.#t,r=t;if(typeof r.__signal_exit_emitter__=="object"&&typeof r.__signal_exit_emitter__.count=="number"&&(o+=r.__signal_exit_emitter__.count),n.length===o){this.unload();let s=this.#t.emit("exit",null,u),i=u==="SIGHUP"?this.#n:u;s||t.kill(t.pid,i)}};this.#s=t.reallyExit,this.#r=t.emit}onExit(t,u){if(!ie(this.#e))return()=>{};this.#u===!1&&this.load();let n=u?.alwaysLast?"afterExit":"exit";return this.#t.on(n,t),()=>{this.#t.removeListener(n,t),this.#t.listeners.exit.length===0&&this.#t.listeners.afterExit.length===0&&this.unload()}}load(){if(!this.#u){this.#u=!0,this.#t.count+=1;for(let t of M)try{let u=this.#o[t];u&&this.#e.on(t,u)}catch{}this.#e.emit=(t,...u)=>this.#a(t,...u),this.#e.reallyExit=t=>this.#i(t)}}unload(){this.#u&&(this.#u=!1,M.forEach(t=>{let u=this.#o[t];if(!u)throw new Error("Listener not defined for signal: "+t);try{this.#e.removeListener(t,u)}catch{}}),this.#e.emit=this.#r,this.#e.reallyExit=this.#s,this.#t.count-=1)}#i(t){return ie(this.#e)?(this.#e.exitCode=t||0,this.#t.emit("exit",this.#e.exitCode,null),this.#s.call(this.#e,this.#e.exitCode)):0}#a(t,...u){let n=this.#r;if(t==="exit"&&ie(this.#e)){typeof u[0]=="number"&&(this.#e.exitCode=u[0]);let o=n.call(this.#e,t,...u);return this.#t.emit("exit",this.#e.exitCode,null),o}else return n.call(this.#e,t,...u)}},ke=globalThis.process,{onExit:Gn,load:mr,unload:pr}=qn(ie(ke)?new Ae(ke):new Se);l();import{stripVTControlCharacters as vr}from"util";l();l();l();l();import{execSync as _e}from"child_process";var D={red:e=>`\x1B[31m${e}\x1B[0m`,green:e=>`\x1B[32m${e}\x1B[0m`,yellow:e=>`\x1B[33m${e}\x1B[0m`,dim:e=>`\x1B[2m${e}\x1B[0m`},V=new Date().toISOString().slice(0,10).replace(/-/g,""),h={helpMode:"always",style:{keysHelpTip:e=>`\x1B[2m${e.map(([u,n])=>`${u} ${n}`).join(" \u2022 ")} \u2022 Ctrl+C quit\x1B[0m`}};function P(e,t=!1){try{return _e(e,{encoding:"utf-8",stdio:t?"pipe":"inherit"})}catch(u){if(t)return"";throw u}}function x(e){try{return _e(e,{encoding:"utf-8"}).trim()}catch{return""}}function k(){try{_e("git rev-parse --is-inside-work-tree",{stdio:"pipe"})}catch{console.log(D.red("\u9519\u8BEF: \u5F53\u524D\u76EE\u5F55\u4E0D\u662F git \u4ED3\u5E93")),process.exit(1)}}function jt(){let e=x("git branch -r").split(`
9
- `).map(t=>t.trim());return e.includes("origin/main")?"origin/main":e.includes("origin/master")?"origin/master":"origin/main"}function w(){console.log(D.dim("\u2500".repeat(40)))}l();import{execSync as Q}from"child_process";import{select as H,input as Ut}from"@inquirer/prompts";import I from"ora";l();import{existsSync as Tt,readFileSync as Hn}from"fs";import{join as Kn}from"path";var Le={featurePrefix:"feature",hotfixPrefix:"hotfix",requireId:!1,featureIdLabel:"Story ID",hotfixIdLabel:"Issue ID",autoStage:!0,useEmoji:!0};function zn(){return x("git rev-parse --show-toplevel")}function Yn(){let e=[".gwrc.json",".gwrc","gw.config.json"];for(let t of e)if(Tt(t))return t;try{let t=zn();if(t)for(let u of e){let n=Kn(t,u);if(Tt(n))return n}}catch{}return null}function Jn(){let e=Yn();if(!e)return Le;try{let t=Hn(e,"utf-8"),u=JSON.parse(t);return{...Le,...u}}catch{return console.warn(`\u914D\u7F6E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${e}`),Le}}var Re=null;function O(){return Re||(Re=Jn()),Re}async function je(e){let t=O(),u=e==="feature"?t.featureIdLabel:t.hotfixIdLabel,n=e==="feature"?t.featurePrefix:t.hotfixPrefix,o=t.requireId?`\u8BF7\u8F93\u5165${u}:`:`\u8BF7\u8F93\u5165${u} (\u53EF\u8DF3\u8FC7):`,r=await Ut({message:o,theme:h});if(t.requireId&&!r)return console.log(D.red(`${u}\u4E0D\u80FD\u4E3A\u7A7A`)),null;let s=await Ut({message:"\u8BF7\u8F93\u5165\u63CF\u8FF0:",theme:h});return s?r?`${n}/${V}-${r}-${s}`:`${n}/${V}-${s}`:(console.log(D.red("\u63CF\u8FF0\u4E0D\u80FD\u4E3A\u7A7A")),null)}async function X(e,t){let u=O(),n=x("git status --porcelain");if(n){if(console.log(D.yellow("\u68C0\u6D4B\u5230\u672A\u63D0\u4EA4\u7684\u66F4\u6539:")),console.log(D.dim(n)),w(),!await H({message:"\u662F\u5426\u6682\u5B58 (stash) \u8FD9\u4E9B\u66F4\u6539\u540E\u7EE7\u7EED?",choices:[{name:"\u662F",value:!0},{name:"\u5426\uFF0C\u53D6\u6D88\u64CD\u4F5C",value:!1}],theme:h})){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}let a=I("\u6B63\u5728\u6682\u5B58\u66F4\u6539...").start();try{P('git stash push -m "auto stash before branch switch"',!0),a.succeed("\u66F4\u6539\u5DF2\u6682\u5B58\uFF0C\u5207\u6362\u5206\u652F\u540E\u53EF\u7528 gw s \u6062\u590D")}catch{a.fail("\u6682\u5B58\u5931\u8D25");return}w()}let o=await je(e);if(!o)return;w();let r;t?r=`origin/${t}`:u.baseBranch?r=`origin/${u.baseBranch}`:r=jt();let s=I(`\u6B63\u5728\u4ECE ${r} \u521B\u5EFA\u5206\u652F...`).start();try{P(`git fetch origin ${r.replace("origin/","")}`,!0),P(`git checkout -b "${o}" ${r}`),s.succeed(`\u5206\u652F\u521B\u5EFA\u6210\u529F: ${o}`),w();let i;if(u.autoPush!==void 0?(i=u.autoPush,i&&console.log(D.dim("(\u81EA\u52A8\u63A8\u9001\u5DF2\u542F\u7528)"))):i=await H({message:"\u662F\u5426\u63A8\u9001\u5230\u8FDC\u7A0B?",choices:[{name:"\u662F",value:!0},{name:"\u5426",value:!1}],theme:h}),i){let a=I("\u6B63\u5728\u63A8\u9001\u5230\u8FDC\u7A0B...").start();try{Q(`git push -u origin "${o}"`,{stdio:"pipe"}),a.succeed(`\u5DF2\u63A8\u9001\u5230\u8FDC\u7A0B: origin/${o}`)}catch{a.warn("\u8FDC\u7A0B\u63A8\u9001\u5931\u8D25\uFF0C\u53EF\u7A0D\u540E\u624B\u52A8\u6267\u884C: git push -u origin "+o)}}}catch{s.fail("\u5206\u652F\u521B\u5EFA\u5931\u8D25")}}async function Te(e){let t=I("\u6B63\u5728\u83B7\u53D6\u5206\u652F\u4FE1\u606F...").start();P("git fetch --all --prune",!0),t.succeed("\u5206\u652F\u4FE1\u606F\u5DF2\u66F4\u65B0"),w();let u=x("git branch --show-current"),n=e;if(n?.startsWith("origin/")&&(n=n.replace("origin/","")),!n){let a=x("git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short)'").split(`
10
- `).filter(g=>g&&g!==u),f=x("git for-each-ref --sort=-committerdate refs/remotes/origin/ --format='%(refname:short)'").split(`
11
- `).map(g=>g.replace("origin/","")).filter(g=>g&&g!=="HEAD"&&g!==u&&!a.includes(g));if(a.length===0&&f.length===0){console.log(D.yellow("\u6CA1\u6709\u53EF\u5220\u9664\u7684\u5206\u652F"));return}let m=[];if(a.forEach(g=>{let b=x(`git branch -r --list "origin/${g}"`);m.push({name:b?`${g} (\u672C\u5730+\u8FDC\u7A0B)`:`${g} (\u4EC5\u672C\u5730)`,value:g})}),f.forEach(g=>{m.push({name:`${g} (\u4EC5\u8FDC\u7A0B)`,value:`__remote__${g}`})}),m.push({name:"\u53D6\u6D88",value:"__cancel__"}),n=await H({message:"\u9009\u62E9\u8981\u5220\u9664\u7684\u5206\u652F (\u6309\u6700\u8FD1\u4F7F\u7528\u6392\u5E8F):",choices:m,theme:h}),n==="__cancel__"){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}if(n.startsWith("__remote__")){let g=n.replace("__remote__","");if(!await H({message:`\u786E\u8BA4\u5220\u9664\u8FDC\u7A0B\u5206\u652F origin/${g}?`,choices:[{name:"\u662F",value:!0},{name:"\u5426",value:!1}],theme:h})){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}let S=I(`\u6B63\u5728\u5220\u9664\u8FDC\u7A0B\u5206\u652F: origin/${g}`).start();try{Q(`git push origin --delete "${g}"`,{stdio:"pipe"}),S.succeed(`\u8FDC\u7A0B\u5206\u652F\u5DF2\u5220\u9664: origin/${g}`)}catch{S.fail("\u8FDC\u7A0B\u5206\u652F\u5220\u9664\u5931\u8D25")}return}}if(n===u){console.log(D.red("\u4E0D\u80FD\u5220\u9664\u5F53\u524D\u6240\u5728\u5206\u652F"));return}let o=x(`git branch --list "${n}"`),r=x(`git branch -r --list "origin/${n}"`);if(!o){if(r){if(console.log(D.yellow(`\u672C\u5730\u5206\u652F\u4E0D\u5B58\u5728\uFF0C\u4F46\u8FDC\u7A0B\u5206\u652F\u5B58\u5728: origin/${n}`)),await H({message:`\u786E\u8BA4\u5220\u9664\u8FDC\u7A0B\u5206\u652F origin/${n}?`,choices:[{name:"\u662F",value:!0},{name:"\u5426",value:!1}],theme:h})){let f=I(`\u6B63\u5728\u5220\u9664\u8FDC\u7A0B\u5206\u652F: origin/${n}`).start();try{Q(`git push origin --delete "${n}"`,{stdio:"pipe"}),f.succeed(`\u8FDC\u7A0B\u5206\u652F\u5DF2\u5220\u9664: origin/${n}`)}catch{f.fail("\u8FDC\u7A0B\u5206\u652F\u5220\u9664\u5931\u8D25")}}}else console.log(D.red(`\u5206\u652F\u4E0D\u5B58\u5728: ${n}`));return}if(!await H({message:`\u786E\u8BA4\u5220\u9664\u5206\u652F ${n}?${r?" (\u672C\u5730+\u8FDC\u7A0B)":" (\u4EC5\u672C\u5730)"}`,choices:[{name:"\u662F",value:!0},{name:"\u5426",value:!1}],theme:h})){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}let i=I(`\u6B63\u5728\u5220\u9664\u672C\u5730\u5206\u652F: ${n}`).start();try{Q(`git branch -D "${n}"`,{stdio:"pipe"}),i.succeed(`\u672C\u5730\u5206\u652F\u5DF2\u5220\u9664: ${n}`)}catch{i.fail("\u672C\u5730\u5206\u652F\u5220\u9664\u5931\u8D25");return}if(r){let a=I(`\u6B63\u5728\u5220\u9664\u8FDC\u7A0B\u5206\u652F: origin/${n}`).start();try{Q(`git push origin --delete "${n}"`,{stdio:"pipe"}),a.succeed(`\u8FDC\u7A0B\u5206\u652F\u5DF2\u5220\u9664: origin/${n}`)}catch{a.fail("\u8FDC\u7A0B\u5206\u652F\u5220\u9664\u5931\u8D25")}}}l();import{execSync as Pt}from"child_process";import{select as ee,input as De}from"@inquirer/prompts";import le from"ora";async function Pe(e){let t=le("\u6B63\u5728\u83B7\u53D6 tags...").start();P("git fetch --tags",!0),t.stop();let u=e?`${e}*`:"",n=x(`git tag -l ${u} --sort=-v:refname`).split(`
12
- `).filter(Boolean);if(n.length===0){console.log(D.yellow(e?`\u6CA1\u6709 '${e}' \u5F00\u5934\u7684 tag`:"\u6CA1\u6709 tag"));return}console.log(D.green(e?`\u4EE5 '${e}' \u5F00\u5934\u7684 tags:`:"\u6240\u6709 tags:")),n.slice(0,20).forEach(o=>console.log(` ${o}`)),n.length>20&&console.log(D.yellow(`
13
- \u5171 ${n.length} \u4E2A\uFF0C\u4EC5\u663E\u793A\u524D 20 \u4E2A`))}function It(e){return x(`git tag -l "${e}*" --sort=-v:refname`).split(`
14
- `).filter(Boolean)[0]||""}async function Ie(e){let t=O(),u=le("\u6B63\u5728\u83B7\u53D6 tags...").start();P("git fetch --tags",!0),u.stop(),w();let n=e;if(!n&&t.defaultTagPrefix&&(n=t.defaultTagPrefix,console.log(D.dim(`(\u4F7F\u7528\u914D\u7F6E\u7684\u9ED8\u8BA4\u524D\u7F00: ${n})`))),!n){let b=x("git tag -l").split(`
15
- `).filter(Boolean);if(b.length===0){if(n=await De({message:"\u5F53\u524D\u4ED3\u5E93\u6CA1\u6709 tag\uFF0C\u8BF7\u8F93\u5165\u524D\u7F00 (\u5982 v):",default:"v",theme:h}),!n){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}let v=await ee({message:"\u9009\u62E9\u521D\u59CB\u7248\u672C\u53F7:",choices:[{name:`${n}0.0.1`,value:"0.0.1"},{name:`${n}0.1.0`,value:"0.1.0"},{name:`${n}1.0.0`,value:"1.0.0"},{name:"\u81EA\u5B9A\u4E49...",value:"__custom__"}],theme:h}),B=v;if(v==="__custom__"&&(B=await De({message:"\u8BF7\u8F93\u5165\u7248\u672C\u53F7 (\u5982 0.0.1):",theme:h}),!B)){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}let y=`${n}${B}`;await ee({message:`\u786E\u8BA4\u521B\u5EFA ${y}?`,choices:[{name:"\u662F",value:!0},{name:"\u5426",value:!1}],theme:h})&&Ue(y);return}let S=[...new Set(b.map(v=>v.replace(/[0-9].*/,"")).filter(Boolean))];if(S.length===0){if(n=await De({message:"\u8BF7\u8F93\u5165 tag \u524D\u7F00 (\u5982 v):",default:"v",theme:h}),!n){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}}else{let v=S.map(y=>{let E=It(y),U=E?x(`git log -1 --format=%ct "${E}" 2>/dev/null`):"0";return{prefix:y,latest:E,date:parseInt(U)||0}});v.sort((y,E)=>E.date-y.date);let B=v.map(({prefix:y,latest:E})=>({name:`${y} (\u6700\u65B0: ${E})`,value:y}));if(B.push({name:"\u8F93\u5165\u65B0\u524D\u7F00...",value:"__new__"}),n=await ee({message:"\u9009\u62E9 tag \u524D\u7F00:",choices:B,theme:h}),n==="__new__"&&(n=await De({message:"\u8BF7\u8F93\u5165\u65B0\u524D\u7F00:",theme:h}),!n)){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}}}let o=It(n);if(!o){let b=`${n}1.0.0`;console.log(D.yellow(`\u672A\u627E\u5230 '${n}' \u5F00\u5934\u7684 tag\uFF0C\u5C06\u521B\u5EFA ${b}`)),await ee({message:`\u786E\u8BA4\u521B\u5EFA ${b}?`,choices:[{name:"\u662F",value:!0},{name:"\u5426",value:!1}],theme:h})&&Ue(b);return}console.log(D.yellow(`\u5F53\u524D\u6700\u65B0 tag: ${o}`)),w();let r=o.slice(n.length),s=r.match(/^(\d+)\.(\d+)\.(\d+)-([a-zA-Z]+)\.(\d+)$/),i=r.match(/^(\d+)\.(\d+)\.(\d+)$/),a=r.match(/^(\d+)\.(\d+)$/),f=r.match(/^(\d+)$/),m=[];if(s){let[,b,S,v,B,y]=s,E=Number(b),U=Number(S),N=Number(v),$=Number(y),A=`${E}.${U}.${N}`;m=[{name:`pre \u2192 ${n}${A}-${B}.${$+1}`,value:`${n}${A}-${B}.${$+1}`},{name:`release\u2192 ${n}${A}`,value:`${n}${A}`},{name:`patch \u2192 ${n}${E}.${U}.${N+1}`,value:`${n}${E}.${U}.${N+1}`},{name:`minor \u2192 ${n}${E}.${U+1}.0`,value:`${n}${E}.${U+1}.0`},{name:`major \u2192 ${n}${E+1}.0.0`,value:`${n}${E+1}.0.0`}]}else if(i){let[,b,S,v]=i,B=Number(b),y=Number(S),E=Number(v);m=[{name:`patch \u2192 ${n}${B}.${y}.${E+1}`,value:`${n}${B}.${y}.${E+1}`},{name:`minor \u2192 ${n}${B}.${y+1}.0`,value:`${n}${B}.${y+1}.0`},{name:`major \u2192 ${n}${B+1}.0.0`,value:`${n}${B+1}.0.0`},{name:`alpha \u2192 ${n}${B}.${y}.${E+1}-alpha.1`,value:`${n}${B}.${y}.${E+1}-alpha.1`},{name:`beta \u2192 ${n}${B}.${y}.${E+1}-beta.1`,value:`${n}${B}.${y}.${E+1}-beta.1`},{name:`rc \u2192 ${n}${B}.${y}.${E+1}-rc.1`,value:`${n}${B}.${y}.${E+1}-rc.1`}]}else if(a){let[,b,S]=a,v=Number(b),B=Number(S);m=[{name:`minor \u2192 ${n}${v}.${B+1}`,value:`${n}${v}.${B+1}`},{name:`major \u2192 ${n}${v+1}.0`,value:`${n}${v+1}.0`}]}else if(f){let b=Number(f[1]);m=[{name:`next \u2192 ${n}${b+1}`,value:`${n}${b+1}`}]}else{console.log(D.red(`\u65E0\u6CD5\u89E3\u6790\u7248\u672C\u53F7: ${r}`));return}m.push({name:"\u53D6\u6D88",value:"__cancel__"});let g=await ee({message:"\u9009\u62E9\u7248\u672C\u7C7B\u578B:",choices:m,theme:h});if(g==="__cancel__"){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}Ue(g)}function Ue(e){w();let t=le(`\u6B63\u5728\u521B\u5EFA tag: ${e}`).start();try{Pt(`git tag -a "${e}" -m "Release ${e}"`,{stdio:"pipe"}),t.succeed(`Tag \u521B\u5EFA\u6210\u529F: ${e}`)}catch{t.fail("tag \u521B\u5EFA\u5931\u8D25");return}let u=le("\u6B63\u5728\u63A8\u9001\u5230\u8FDC\u7A0B...").start();try{Pt(`git push origin "${e}"`,{stdio:"pipe"}),u.succeed(`Tag \u5DF2\u63A8\u9001: ${e}`)}catch{u.warn(`\u8FDC\u7A0B\u63A8\u9001\u5931\u8D25\uFF0C\u53EF\u7A0D\u540E\u624B\u52A8\u6267\u884C: git push origin ${e}`)}}l();import{readFileSync as Mt,writeFileSync as Zn}from"fs";import{select as Qn}from"@inquirer/prompts";function Xn(){return JSON.parse(Mt("package.json","utf-8")).version||"0.0.0"}function eu(e){let t=JSON.parse(Mt("package.json","utf-8"));t.version=e,Zn("package.json",JSON.stringify(t,null," ")+`
16
- `)}function tu(e){let t=e.match(/^(\d+)\.(\d+)\.(\d+)-([a-zA-Z]+)\.(\d+)$/),u=e.match(/^(\d+)\.(\d+)\.(\d+)$/);if(t){let[,n,o,r,s,i]=t,a=Number(n),f=Number(o),m=Number(r),g=Number(i),b=`${a}.${f}.${m}`;return[{name:`pre \u2192 ${b}-${s}.${g+1}`,value:`${b}-${s}.${g+1}`},{name:`release \u2192 ${b}`,value:b},{name:`patch \u2192 ${a}.${f}.${m+1}`,value:`${a}.${f}.${m+1}`},{name:`minor \u2192 ${a}.${f+1}.0`,value:`${a}.${f+1}.0`},{name:`major \u2192 ${a+1}.0.0`,value:`${a+1}.0.0`}]}if(u){let[,n,o,r]=u,s=Number(n),i=Number(o),a=Number(r);return[{name:`patch \u2192 ${s}.${i}.${a+1}`,value:`${s}.${i}.${a+1}`},{name:`minor \u2192 ${s}.${i+1}.0`,value:`${s}.${i+1}.0`},{name:`major \u2192 ${s+1}.0.0`,value:`${s+1}.0.0`},{name:`alpha \u2192 ${s}.${i}.${a+1}-alpha.1`,value:`${s}.${i}.${a+1}-alpha.1`},{name:`beta \u2192 ${s}.${i}.${a+1}-beta.1`,value:`${s}.${i}.${a+1}-beta.1`},{name:`rc \u2192 ${s}.${i}.${a+1}-rc.1`,value:`${s}.${i}.${a+1}-rc.1`}]}return[{name:"patch \u2192 0.0.1",value:"0.0.1"},{name:"minor \u2192 0.1.0",value:"0.1.0"},{name:"major \u2192 1.0.0",value:"1.0.0"}]}async function Me(){let e=Xn();console.log(D.yellow(`\u5F53\u524D\u7248\u672C: ${e}`)),w();let t=tu(e);t.push({name:"\u53D6\u6D88",value:"__cancel__"});let u=await Qn({message:"\u9009\u62E9\u65B0\u7248\u672C:",choices:t,theme:h});if(u==="__cancel__"){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}eu(u),w(),console.log(D.green(`\u2713 \u7248\u672C\u53F7\u5DF2\u66F4\u65B0: ${e} \u2192 ${u}`))}l();import{existsSync as nu,writeFileSync as uu}from"fs";import{select as ou,input as K,confirm as ce}from"@inquirer/prompts";var fe=".gwrc.json",ru={feat:"\u2728",fix:"\u{1F41B}",docs:"\u{1F4DD}",style:"\u{1F484}",refactor:"\u267B\uFE0F",perf:"\u26A1\uFE0F",test:"\u2705",build:"\u{1F4E6}",ci:"\u{1F477}",chore:"\u{1F527}",revert:"\u23EA"};async function Oe(){if(nu(fe)&&!await ce({message:`${fe} \u5DF2\u5B58\u5728\uFF0C\u662F\u5426\u8986\u76D6?`,default:!1,theme:h})){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}console.log(D.dim(`\u914D\u7F6E git-workflow\uFF0C\u76F4\u63A5\u56DE\u8F66\u4F7F\u7528\u9ED8\u8BA4\u503C
17
- `));let e={},t=await K({message:"\u9ED8\u8BA4\u57FA\u7840\u5206\u652F (\u7559\u7A7A\u81EA\u52A8\u68C0\u6D4B main/master):",theme:h});t&&(e.baseBranch=t),w();let u=await K({message:"Feature \u5206\u652F\u524D\u7F00:",default:"feature",theme:h});u!=="feature"&&(e.featurePrefix=u);let n=await K({message:"Hotfix \u5206\u652F\u524D\u7F00:",default:"hotfix",theme:h});n!=="hotfix"&&(e.hotfixPrefix=n),w(),await ce({message:"\u662F\u5426\u8981\u6C42\u5FC5\u586B ID (Story ID / Issue ID)?",default:!1,theme:h})&&(e.requireId=!0);let r=await K({message:"Feature \u5206\u652F ID \u6807\u7B7E:",default:"Story ID",theme:h});r!=="Story ID"&&(e.featureIdLabel=r);let s=await K({message:"Hotfix \u5206\u652F ID \u6807\u7B7E:",default:"Issue ID",theme:h});s!=="Issue ID"&&(e.hotfixIdLabel=s),w();let i=await K({message:"\u9ED8\u8BA4 Tag \u524D\u7F00 (\u7559\u7A7A\u5219\u6BCF\u6B21\u9009\u62E9):",theme:h});i&&(e.defaultTagPrefix=i);let a=await ou({message:"\u521B\u5EFA\u5206\u652F\u540E\u662F\u5426\u81EA\u52A8\u63A8\u9001?",choices:[{name:"\u6BCF\u6B21\u8BE2\u95EE",value:"ask"},{name:"\u81EA\u52A8\u63A8\u9001",value:"yes"},{name:"\u4E0D\u63A8\u9001",value:"no"}],theme:h});a==="yes"&&(e.autoPush=!0),a==="no"&&(e.autoPush=!1),w(),await ce({message:"Commit \u65F6\u662F\u5426\u81EA\u52A8\u6682\u5B58\u6240\u6709\u66F4\u6539?",default:!0,theme:h})||(e.autoStage=!1),await ce({message:"Commit \u65F6\u662F\u5426\u4F7F\u7528 emoji?",default:!0,theme:h})||(e.useEmoji=!1),e.commitEmojis=ru,w();let g=JSON.stringify(e,null,2);uu(fe,g+`
18
- `),console.log(D.green(`\u2713 \u914D\u7F6E\u5DF2\u4FDD\u5B58\u5230 ${fe}`)),console.log(D.dim(`
19
- \u63D0\u793A: \u53EF\u4EE5\u5728\u914D\u7F6E\u6587\u4EF6\u4E2D\u4FEE\u6539 commitEmojis \u6765\u81EA\u5B9A\u4E49\u5404\u7C7B\u578B\u7684 emoji`)),console.log(D.dim(`
20
- `+g))}l();import{execSync as te}from"child_process";import{select as z,input as qt}from"@inquirer/prompts";import he from"ora";function su(){let e=x('git stash list --format="%gd|%s|%ar"');return e?e.split(`
21
- `).filter(Boolean).map(t=>{let[u,n,o]=t.split("|"),r=parseInt(u.match(/stash@\{(\d+)\}/)?.[1]||"0"),i=n.match(/(?:WIP on|On) ([^:]+):/)?.[1]||"unknown",a=n.replace(/(?:WIP on|On) [^:]+:\s*/,"");n.startsWith("WIP")&&(a=a.replace(/^[a-f0-9]+ /,"")),a=a||"(no message)";let f=x(`git stash show stash@{${r}} --name-only 2>/dev/null`),m=f?f.split(`
22
- `).filter(Boolean):[];return{index:r,branch:i,message:a,date:o,files:m}}):[]}function iu(e){let t=e.files.length,u=t>0?D.dim(` (${t} \u6587\u4EF6)`):"";return`${D.yellow(`[${e.index}]`)} ${D.green(e.branch)} ${e.message}${u} ${D.dim(e.date)}`}function au(e){console.log(),console.log(D.yellow(`Stash #${e.index}`)),console.log(`\u5206\u652F: ${D.green(e.branch)}`),console.log(`\u6D88\u606F: ${e.message}`),console.log(`\u65F6\u95F4: ${D.dim(e.date)}`),e.files.length>0&&(console.log(`\u6587\u4EF6 (${e.files.length}):`),e.files.slice(0,10).forEach(t=>console.log(` ${D.dim("\u2022")} ${t}`)),e.files.length>10&&console.log(D.dim(` ... \u8FD8\u6709 ${e.files.length-10} \u4E2A\u6587\u4EF6`)))}async function ne(){let e=su();if(e.length===0){console.log(D.yellow("\u6CA1\u6709 stash \u8BB0\u5F55")),x("git status --porcelain")&&await z({message:"\u68C0\u6D4B\u5230\u672A\u63D0\u4EA4\u7684\u53D8\u66F4\uFF0C\u662F\u5426\u521B\u5EFA stash?",choices:[{name:"\u662F",value:!0},{name:"\u5426",value:!1}],theme:h})&&await Ot();return}console.log(D.green(`\u5171 ${e.length} \u4E2A stash:
23
- `));let t=e.map(o=>({name:iu(o),value:o.index.toString()}));t.push({name:D.dim("+ \u521B\u5EFA\u65B0 stash"),value:"__new__"}),t.push({name:D.dim("\u53D6\u6D88"),value:"__cancel__"});let u=await z({message:"\u9009\u62E9 stash:",choices:t,theme:h});if(u==="__cancel__")return;if(u==="__new__"){await Ot();return}let n=e.find(o=>o.index.toString()===u);await Gt(n)}async function Gt(e){switch(au(e),w(),await z({message:"\u64CD\u4F5C:",choices:[{name:"\u5E94\u7528 (\u4FDD\u7559 stash)",value:"apply"},{name:"\u5F39\u51FA (\u5E94\u7528\u5E76\u5220\u9664)",value:"pop"},{name:"\u521B\u5EFA\u5206\u652F",value:"branch"},{name:"\u67E5\u770B\u5DEE\u5F02",value:"diff"},{name:"\u5220\u9664",value:"drop"},{name:"\u8FD4\u56DE\u5217\u8868",value:"back"},{name:"\u53D6\u6D88",value:"cancel"}],theme:h})){case"apply":Nt(e.index,!1);break;case"pop":Nt(e.index,!0);break;case"branch":await lu(e.index);break;case"diff":await Du(e.index),await Gt(e);break;case"drop":await cu(e.index);break;case"back":await ne();break}}async function Ot(){let e=x("git status --porcelain");if(!e){console.log(D.yellow("\u6CA1\u6709\u9700\u8981 stash \u7684\u53D8\u66F4"));return}let t=e.split(`
24
- `).some(r=>r.startsWith("??")),u=!1;t&&(u=await z({message:"\u68C0\u6D4B\u5230\u672A\u8DDF\u8E2A\u7684\u6587\u4EF6\uFF0C\u662F\u5426\u4E00\u5E76 stash?",choices:[{name:"\u662F (\u5305\u542B\u672A\u8DDF\u8E2A\u6587\u4EF6)",value:!0},{name:"\u5426 (\u4EC5\u5DF2\u8DDF\u8E2A\u6587\u4EF6)",value:!1}],theme:h}));let n=await qt({message:"Stash \u6D88\u606F (\u53EF\u9009):",theme:h}),o=he("\u521B\u5EFA stash...").start();try{let r="git stash push";u&&(r+=" -u"),n&&(r+=` -m "${n.replace(/"/g,'\\"')}"`),te(r,{stdio:"pipe"}),o.succeed("Stash \u521B\u5EFA\u6210\u529F"),await ne()}catch{o.fail("Stash \u521B\u5EFA\u5931\u8D25")}}function Nt(e,t){let u=t?"pop":"apply",n=he(`${t?"\u5F39\u51FA":"\u5E94\u7528"} stash...`).start();try{te(`git stash ${u} stash@{${e}}`,{stdio:"pipe"}),n.succeed(`Stash ${t?"\u5DF2\u5F39\u51FA":"\u5DF2\u5E94\u7528"}`)}catch{n.fail("\u64CD\u4F5C\u5931\u8D25\uFF0C\u53EF\u80FD\u5B58\u5728\u51B2\u7A81");let o=x("git status --porcelain");(o.includes("UU")||o.includes("AA"))&&console.log(D.yellow(`
25
- \u5B58\u5728\u51B2\u7A81\uFF0C\u8BF7\u624B\u52A8\u89E3\u51B3\u540E\u63D0\u4EA4`))}}async function Du(e){try{te(`git stash show -p --color=always stash@{${e}}`,{stdio:"inherit"}),console.log(),await qt({message:D.dim("\u6309 Enter \u8FD4\u56DE\u83DC\u5355..."),theme:h})}catch{console.log(D.red("\u65E0\u6CD5\u663E\u793A\u5DEE\u5F02"))}}async function lu(e){let t=await z({message:"\u9009\u62E9\u5206\u652F\u7C7B\u578B:",choices:[{name:"feature",value:"feature"},{name:"hotfix",value:"hotfix"},{name:"\u53D6\u6D88",value:"__cancel__"}],theme:h});if(t==="__cancel__"){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}let u=await je(t);if(!u)return;let n=he(`\u521B\u5EFA\u5206\u652F ${u}...`).start();try{te(`git stash branch "${u}" stash@{${e}}`,{stdio:"pipe"}),n.succeed(`\u5206\u652F\u5DF2\u521B\u5EFA: ${u} (stash \u5DF2\u81EA\u52A8\u5F39\u51FA)`)}catch{n.fail("\u521B\u5EFA\u5206\u652F\u5931\u8D25")}}async function cu(e){if(!await z({message:`\u786E\u8BA4\u5220\u9664 stash@{${e}}?`,choices:[{name:"\u662F",value:!0},{name:"\u5426",value:!1}],theme:h})){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}let u=he("\u5220\u9664 stash...").start();try{te(`git stash drop stash@{${e}}`,{stdio:"pipe"}),u.succeed("Stash \u5DF2\u5220\u9664")}catch{u.fail("\u5220\u9664\u5931\u8D25")}}l();import{execSync as Ne}from"child_process";import{select as fu,input as ue,confirm as Wt,checkbox as hu}from"@inquirer/prompts";import gu from"ora";var mu=[{type:"feat",emoji:"\u2728",description:"\u65B0\u529F\u80FD"},{type:"fix",emoji:"\u{1F41B}",description:"\u4FEE\u590D Bug"},{type:"docs",emoji:"\u{1F4DD}",description:"\u6587\u6863\u66F4\u65B0"},{type:"style",emoji:"\u{1F484}",description:"\u4EE3\u7801\u683C\u5F0F (\u4E0D\u5F71\u54CD\u529F\u80FD)"},{type:"refactor",emoji:"\u267B\uFE0F",description:"\u91CD\u6784 (\u975E\u65B0\u529F\u80FD/\u4FEE\u590D)"},{type:"perf",emoji:"\u26A1\uFE0F",description:"\u6027\u80FD\u4F18\u5316"},{type:"test",emoji:"\u2705",description:"\u6D4B\u8BD5\u76F8\u5173"},{type:"build",emoji:"\u{1F4E6}",description:"\u6784\u5EFA/\u4F9D\u8D56\u76F8\u5173"},{type:"ci",emoji:"\u{1F477}",description:"CI/CD \u76F8\u5173"},{type:"chore",emoji:"\u{1F527}",description:"\u5176\u4ED6\u6742\u9879"},{type:"revert",emoji:"\u23EA",description:"\u56DE\u9000\u63D0\u4EA4"}];function pu(e){let t=e.commitEmojis||{};return mu.map(u=>({...u,emoji:t[u.type]||u.emoji}))}function qe(){let e=x("git status --porcelain");if(!e)return{staged:[],unstaged:[]};let t=[],u=[];for(let n of e.split(`
26
- `)){if(!n)continue;let o=n[0],r=n[1],s=n.slice(3);if(o!==" "&&o!=="?"&&t.push({status:o,file:s}),r!==" "||o==="?"){let i=o==="?"?"?":r;u.push({status:i,file:s})}}return{staged:t,unstaged:u}}function Ge(e){return{M:D.yellow("M"),A:D.green("A"),D:D.red("D"),R:D.yellow("R"),C:D.yellow("C"),"?":D.green("?")}[e]||e}async function We(){let e=O(),{staged:t,unstaged:u}=qe();if(t.length===0){if(u.length===0){console.log(D.yellow("\u5DE5\u4F5C\u533A\u5E72\u51C0\uFF0C\u6CA1\u6709\u9700\u8981\u63D0\u4EA4\u7684\u66F4\u6539"));return}console.log(D.yellow("\u6CA1\u6709\u6682\u5B58\u7684\u66F4\u6539")),w(),console.log("\u672A\u6682\u5B58\u7684\u6587\u4EF6:");for(let{status:A,file:Ke}of u)console.log(` ${Ge(A)} ${Ke}`);if(w(),e.autoStage??!0)Ne("git add -A",{stdio:"pipe"}),console.log(D.green("\u2714 \u5DF2\u81EA\u52A8\u6682\u5B58\u6240\u6709\u66F4\u6539")),w(),t=qe().staged;else{let A=await hu({message:"\u9009\u62E9\u8981\u6682\u5B58\u7684\u6587\u4EF6:",choices:u.map(({status:ge,file:ze})=>({name:`${Ge(ge)} ${ze}`,value:ze,checked:!0})),theme:h});if(A.length===0){console.log(D.yellow("\u6CA1\u6709\u9009\u62E9\u4EFB\u4F55\u6587\u4EF6\uFF0C\u5DF2\u53D6\u6D88"));return}for(let ge of A)Ne(`git add "${ge}"`,{stdio:"pipe"});console.log(D.green(`\u2714 \u5DF2\u6682\u5B58 ${A.length} \u4E2A\u6587\u4EF6`)),w(),t=qe().staged}}else{console.log("\u5DF2\u6682\u5B58\u7684\u6587\u4EF6:");for(let{status:$,file:A}of t)console.log(` ${Ge($)} ${A}`);w()}let n=pu(e),o=await fu({message:"\u9009\u62E9\u63D0\u4EA4\u7C7B\u578B:",choices:n.map($=>({name:`${$.emoji} ${$.type.padEnd(10)} ${D.dim($.description)}`,value:$})),theme:h}),r=await ue({message:"\u8F93\u5165\u5F71\u54CD\u8303\u56F4 scope (\u53EF\u8DF3\u8FC7):",theme:h}),s=await ue({message:"\u8F93\u5165\u7B80\u77ED\u63CF\u8FF0:",validate:$=>$.trim()?$.length>72?"\u63CF\u8FF0\u4E0D\u80FD\u8D85\u8FC7 72 \u4E2A\u5B57\u7B26":!0:"\u63CF\u8FF0\u4E0D\u80FD\u4E3A\u7A7A",theme:h}),i=await ue({message:"\u8F93\u5165\u8BE6\u7EC6\u63CF\u8FF0 (\u53EF\u8DF3\u8FC7):",theme:h}),a=await Wt({message:"\u662F\u5426\u5305\u542B\u7834\u574F\u6027\u53D8\u66F4 (BREAKING CHANGE)?",default:!1,theme:h}),f="";a&&(f=await ue({message:"\u63CF\u8FF0\u7834\u574F\u6027\u53D8\u66F4:",validate:$=>$.trim()?!0:"\u8BF7\u63CF\u8FF0\u7834\u574F\u6027\u53D8\u66F4",theme:h}));let m=await ue({message:"\u5173\u8054 Issue (\u5982 #123, \u53EF\u8DF3\u8FC7):",theme:h}),{type:g,emoji:b}=o,S=r?`(${r})`:"",v=a?"!":"",E=`${e.useEmoji??!0?`${b} `:""}${g}${S}${v}: ${s}`;if((i||a||m)&&(E+=`
27
- `,i&&(E+=`
28
- ${i}`),a&&(E+=`
29
-
30
- BREAKING CHANGE: ${f}`),m&&(E+=`
31
-
32
- ${m}`)),w(),console.log("\u63D0\u4EA4\u4FE1\u606F\u9884\u89C8:"),console.log(D.green(E)),w(),!await Wt({message:"\u786E\u8BA4\u63D0\u4EA4?",default:!0,theme:h})){console.log(D.yellow("\u5DF2\u53D6\u6D88"));return}let N=gu("\u6B63\u5728\u63D0\u4EA4...").start();try{let $=E.replace(/"/g,'\\"');Ne(`git commit -m "${$}"`,{stdio:"pipe"}),N.succeed("\u63D0\u4EA4\u6210\u529F");let A=x("git rev-parse --short HEAD");console.log(D.dim(`commit: ${A}`))}catch($){N.fail("\u63D0\u4EA4\u5931\u8D25"),$ instanceof Error&&console.log(D.red($.message))}}l();function Ve(){return`
1
+ #!/usr/bin/env node
2
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
3
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
4
+ }) : x)(function(x) {
5
+ if (typeof require !== "undefined") return require.apply(this, arguments);
6
+ throw Error('Dynamic require of "' + x + '" is not supported');
7
+ });
8
+
9
+ // src/index.ts
10
+ import { cac } from "cac";
11
+ import { select as select8 } from "@inquirer/prompts";
12
+ import { ExitPromptError } from "@inquirer/core";
13
+
14
+ // src/utils.ts
15
+ import { execSync } from "child_process";
16
+ var colors = {
17
+ red: (s) => `\x1B[31m${s}\x1B[0m`,
18
+ green: (s) => `\x1B[32m${s}\x1B[0m`,
19
+ yellow: (s) => `\x1B[33m${s}\x1B[0m`,
20
+ cyan: (s) => `\x1B[36m${s}\x1B[0m`,
21
+ dim: (s) => `\x1B[2m${s}\x1B[0m`,
22
+ bold: (s) => `\x1B[1m${s}\x1B[0m`,
23
+ reset: "\x1B[0m"
24
+ };
25
+ var TODAY = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10).replace(/-/g, "");
26
+ var theme = {
27
+ helpMode: "always",
28
+ style: {
29
+ keysHelpTip: (keys) => {
30
+ const tips = keys.map(([key, label]) => `${key} ${label}`).join(" \u2022 ");
31
+ return `\x1B[2m${tips} \u2022 Ctrl+C quit\x1B[0m`;
32
+ }
33
+ }
34
+ };
35
+ function exec(cmd, silent = false) {
36
+ try {
37
+ const options = {
38
+ encoding: "utf-8",
39
+ stdio: silent ? "pipe" : "inherit"
40
+ };
41
+ return execSync(cmd, options);
42
+ } catch (e) {
43
+ if (silent) return "";
44
+ throw e;
45
+ }
46
+ }
47
+ function execOutput(cmd) {
48
+ try {
49
+ return execSync(cmd, { encoding: "utf-8" }).trim();
50
+ } catch {
51
+ return "";
52
+ }
53
+ }
54
+ function checkGitRepo() {
55
+ try {
56
+ execSync("git rev-parse --is-inside-work-tree", { stdio: "pipe" });
57
+ } catch {
58
+ console.log(colors.red("\u9519\u8BEF: \u5F53\u524D\u76EE\u5F55\u4E0D\u662F git \u4ED3\u5E93"));
59
+ process.exit(1);
60
+ }
61
+ }
62
+ function getMainBranch() {
63
+ const branches = execOutput("git branch -r").split("\n").map((b) => b.trim());
64
+ if (branches.includes("origin/main")) {
65
+ return "origin/main";
66
+ }
67
+ if (branches.includes("origin/master")) {
68
+ return "origin/master";
69
+ }
70
+ return "origin/main";
71
+ }
72
+ function divider() {
73
+ console.log(colors.dim("\u2500".repeat(40)));
74
+ }
75
+
76
+ // src/commands/branch.ts
77
+ import { execSync as execSync2 } from "child_process";
78
+ import { select, input } from "@inquirer/prompts";
79
+ import ora from "ora";
80
+
81
+ // src/config.ts
82
+ import { existsSync, readFileSync } from "fs";
83
+ import { join } from "path";
84
+ var defaultConfig = {
85
+ featurePrefix: "feature",
86
+ hotfixPrefix: "hotfix",
87
+ requireId: false,
88
+ featureIdLabel: "Story ID",
89
+ hotfixIdLabel: "Issue ID",
90
+ autoStage: true,
91
+ useEmoji: true
92
+ };
93
+ function getGitRoot() {
94
+ return execOutput("git rev-parse --show-toplevel");
95
+ }
96
+ function findConfigFile() {
97
+ const configNames = [".gwrc.json", ".gwrc", "gw.config.json"];
98
+ for (const name of configNames) {
99
+ if (existsSync(name)) {
100
+ return name;
101
+ }
102
+ }
103
+ try {
104
+ const gitRoot = getGitRoot();
105
+ if (gitRoot) {
106
+ for (const name of configNames) {
107
+ const configPath = join(gitRoot, name);
108
+ if (existsSync(configPath)) {
109
+ return configPath;
110
+ }
111
+ }
112
+ }
113
+ } catch {
114
+ }
115
+ return null;
116
+ }
117
+ function loadConfig() {
118
+ const configPath = findConfigFile();
119
+ if (!configPath) {
120
+ return defaultConfig;
121
+ }
122
+ try {
123
+ const content = readFileSync(configPath, "utf-8");
124
+ const userConfig = JSON.parse(content);
125
+ return { ...defaultConfig, ...userConfig };
126
+ } catch (e) {
127
+ console.warn(`\u914D\u7F6E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${configPath}`);
128
+ return defaultConfig;
129
+ }
130
+ }
131
+ var config = null;
132
+ function getConfig() {
133
+ if (!config) {
134
+ config = loadConfig();
135
+ }
136
+ return config;
137
+ }
138
+
139
+ // src/commands/branch.ts
140
+ async function getBranchName(type) {
141
+ const config2 = getConfig();
142
+ const idLabel = type === "feature" ? config2.featureIdLabel : config2.hotfixIdLabel;
143
+ const branchPrefix = type === "feature" ? config2.featurePrefix : config2.hotfixPrefix;
144
+ const idMessage = config2.requireId ? `\u8BF7\u8F93\u5165${idLabel}:` : `\u8BF7\u8F93\u5165${idLabel} (\u53EF\u8DF3\u8FC7):`;
145
+ const id = await input({ message: idMessage, theme });
146
+ if (config2.requireId && !id) {
147
+ console.log(colors.red(`${idLabel}\u4E0D\u80FD\u4E3A\u7A7A`));
148
+ return null;
149
+ }
150
+ const description = await input({ message: "\u8BF7\u8F93\u5165\u63CF\u8FF0:", theme });
151
+ if (!description) {
152
+ console.log(colors.red("\u63CF\u8FF0\u4E0D\u80FD\u4E3A\u7A7A"));
153
+ return null;
154
+ }
155
+ return id ? `${branchPrefix}/${TODAY}-${id}-${description}` : `${branchPrefix}/${TODAY}-${description}`;
156
+ }
157
+ async function createBranch(type, baseBranchArg) {
158
+ const config2 = getConfig();
159
+ const hasChanges = execOutput("git status --porcelain");
160
+ if (hasChanges) {
161
+ console.log(colors.yellow("\u68C0\u6D4B\u5230\u672A\u63D0\u4EA4\u7684\u66F4\u6539:"));
162
+ console.log(colors.dim(hasChanges));
163
+ divider();
164
+ const shouldStash = await select({
165
+ message: "\u662F\u5426\u6682\u5B58 (stash) \u8FD9\u4E9B\u66F4\u6539\u540E\u7EE7\u7EED?",
166
+ choices: [
167
+ { name: "\u662F", value: true },
168
+ { name: "\u5426\uFF0C\u53D6\u6D88\u64CD\u4F5C", value: false }
169
+ ],
170
+ theme
171
+ });
172
+ if (!shouldStash) {
173
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
174
+ return;
175
+ }
176
+ const stashSpinner = ora("\u6B63\u5728\u6682\u5B58\u66F4\u6539...").start();
177
+ try {
178
+ exec('git stash push -m "auto stash before branch switch"', true);
179
+ stashSpinner.succeed("\u66F4\u6539\u5DF2\u6682\u5B58\uFF0C\u5207\u6362\u5206\u652F\u540E\u53EF\u7528 gw s \u6062\u590D");
180
+ } catch {
181
+ stashSpinner.fail("\u6682\u5B58\u5931\u8D25");
182
+ return;
183
+ }
184
+ divider();
185
+ }
186
+ const branchName = await getBranchName(type);
187
+ if (!branchName) return;
188
+ divider();
189
+ let baseBranch;
190
+ if (baseBranchArg) {
191
+ baseBranch = `origin/${baseBranchArg}`;
192
+ } else if (config2.baseBranch) {
193
+ baseBranch = `origin/${config2.baseBranch}`;
194
+ } else {
195
+ baseBranch = getMainBranch();
196
+ }
197
+ const spinner = ora(`\u6B63\u5728\u4ECE ${baseBranch} \u521B\u5EFA\u5206\u652F...`).start();
198
+ try {
199
+ exec(`git fetch origin ${baseBranch.replace("origin/", "")}`, true);
200
+ exec(`git checkout -b "${branchName}" ${baseBranch}`);
201
+ spinner.succeed(`\u5206\u652F\u521B\u5EFA\u6210\u529F: ${branchName}`);
202
+ divider();
203
+ let shouldPush;
204
+ if (config2.autoPush !== void 0) {
205
+ shouldPush = config2.autoPush;
206
+ if (shouldPush) {
207
+ console.log(colors.dim("(\u81EA\u52A8\u63A8\u9001\u5DF2\u542F\u7528)"));
208
+ }
209
+ } else {
210
+ shouldPush = await select({
211
+ message: "\u662F\u5426\u63A8\u9001\u5230\u8FDC\u7A0B?",
212
+ choices: [
213
+ { name: "\u662F", value: true },
214
+ { name: "\u5426", value: false }
215
+ ],
216
+ theme
217
+ });
218
+ }
219
+ if (shouldPush) {
220
+ const pushSpinner = ora("\u6B63\u5728\u63A8\u9001\u5230\u8FDC\u7A0B...").start();
221
+ try {
222
+ execSync2(`git push -u origin "${branchName}"`, { stdio: "pipe" });
223
+ pushSpinner.succeed(`\u5DF2\u63A8\u9001\u5230\u8FDC\u7A0B: origin/${branchName}`);
224
+ } catch {
225
+ pushSpinner.warn(
226
+ "\u8FDC\u7A0B\u63A8\u9001\u5931\u8D25\uFF0C\u53EF\u7A0D\u540E\u624B\u52A8\u6267\u884C: git push -u origin " + branchName
227
+ );
228
+ }
229
+ }
230
+ } catch {
231
+ spinner.fail("\u5206\u652F\u521B\u5EFA\u5931\u8D25");
232
+ }
233
+ }
234
+ async function deleteBranch(branchArg) {
235
+ const fetchSpinner = ora("\u6B63\u5728\u83B7\u53D6\u5206\u652F\u4FE1\u606F...").start();
236
+ exec("git fetch --all --prune", true);
237
+ fetchSpinner.succeed("\u5206\u652F\u4FE1\u606F\u5DF2\u66F4\u65B0");
238
+ divider();
239
+ const currentBranch = execOutput("git branch --show-current");
240
+ let branch = branchArg;
241
+ if (branch?.startsWith("origin/")) {
242
+ branch = branch.replace("origin/", "");
243
+ }
244
+ if (!branch) {
245
+ const localBranches = execOutput(
246
+ "git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short)'"
247
+ ).split("\n").filter((b) => b && b !== currentBranch);
248
+ const remoteBranches = execOutput(
249
+ "git for-each-ref --sort=-committerdate refs/remotes/origin/ --format='%(refname:short)'"
250
+ ).split("\n").map((b) => b.replace("origin/", "")).filter(
251
+ (b) => b && b !== "HEAD" && b !== currentBranch && !localBranches.includes(b)
252
+ );
253
+ if (localBranches.length === 0 && remoteBranches.length === 0) {
254
+ console.log(colors.yellow("\u6CA1\u6709\u53EF\u5220\u9664\u7684\u5206\u652F"));
255
+ return;
256
+ }
257
+ const choices = [];
258
+ localBranches.forEach((b) => {
259
+ const hasRemote2 = execOutput(`git branch -r --list "origin/${b}"`);
260
+ choices.push({
261
+ name: hasRemote2 ? `${b} (\u672C\u5730+\u8FDC\u7A0B)` : `${b} (\u4EC5\u672C\u5730)`,
262
+ value: b
263
+ });
264
+ });
265
+ remoteBranches.forEach((b) => {
266
+ choices.push({
267
+ name: `${b} (\u4EC5\u8FDC\u7A0B)`,
268
+ value: `__remote__${b}`
269
+ });
270
+ });
271
+ choices.push({ name: "\u53D6\u6D88", value: "__cancel__" });
272
+ branch = await select({
273
+ message: "\u9009\u62E9\u8981\u5220\u9664\u7684\u5206\u652F (\u6309\u6700\u8FD1\u4F7F\u7528\u6392\u5E8F):",
274
+ choices,
275
+ theme
276
+ });
277
+ if (branch === "__cancel__") {
278
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
279
+ return;
280
+ }
281
+ if (branch.startsWith("__remote__")) {
282
+ const remoteBranch = branch.replace("__remote__", "");
283
+ const confirm3 = await select({
284
+ message: `\u786E\u8BA4\u5220\u9664\u8FDC\u7A0B\u5206\u652F origin/${remoteBranch}?`,
285
+ choices: [
286
+ { name: "\u662F", value: true },
287
+ { name: "\u5426", value: false }
288
+ ],
289
+ theme
290
+ });
291
+ if (!confirm3) {
292
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
293
+ return;
294
+ }
295
+ const spinner = ora(`\u6B63\u5728\u5220\u9664\u8FDC\u7A0B\u5206\u652F: origin/${remoteBranch}`).start();
296
+ try {
297
+ execSync2(`git push origin --delete "${remoteBranch}"`, {
298
+ stdio: "pipe"
299
+ });
300
+ spinner.succeed(`\u8FDC\u7A0B\u5206\u652F\u5DF2\u5220\u9664: origin/${remoteBranch}`);
301
+ } catch {
302
+ spinner.fail("\u8FDC\u7A0B\u5206\u652F\u5220\u9664\u5931\u8D25");
303
+ }
304
+ return;
305
+ }
306
+ }
307
+ if (branch === currentBranch) {
308
+ console.log(colors.red("\u4E0D\u80FD\u5220\u9664\u5F53\u524D\u6240\u5728\u5206\u652F"));
309
+ return;
310
+ }
311
+ const localExists = execOutput(`git branch --list "${branch}"`);
312
+ const hasRemote = execOutput(`git branch -r --list "origin/${branch}"`);
313
+ if (!localExists) {
314
+ if (hasRemote) {
315
+ console.log(
316
+ colors.yellow(`\u672C\u5730\u5206\u652F\u4E0D\u5B58\u5728\uFF0C\u4F46\u8FDC\u7A0B\u5206\u652F\u5B58\u5728: origin/${branch}`)
317
+ );
318
+ const deleteRemote = await select({
319
+ message: `\u786E\u8BA4\u5220\u9664\u8FDC\u7A0B\u5206\u652F origin/${branch}?`,
320
+ choices: [
321
+ { name: "\u662F", value: true },
322
+ { name: "\u5426", value: false }
323
+ ],
324
+ theme
325
+ });
326
+ if (deleteRemote) {
327
+ const spinner = ora(`\u6B63\u5728\u5220\u9664\u8FDC\u7A0B\u5206\u652F: origin/${branch}`).start();
328
+ try {
329
+ execSync2(`git push origin --delete "${branch}"`, { stdio: "pipe" });
330
+ spinner.succeed(`\u8FDC\u7A0B\u5206\u652F\u5DF2\u5220\u9664: origin/${branch}`);
331
+ } catch {
332
+ spinner.fail("\u8FDC\u7A0B\u5206\u652F\u5220\u9664\u5931\u8D25");
333
+ }
334
+ }
335
+ } else {
336
+ console.log(colors.red(`\u5206\u652F\u4E0D\u5B58\u5728: ${branch}`));
337
+ }
338
+ return;
339
+ }
340
+ const confirmDelete = await select({
341
+ message: `\u786E\u8BA4\u5220\u9664\u5206\u652F ${branch}?${hasRemote ? " (\u672C\u5730+\u8FDC\u7A0B)" : " (\u4EC5\u672C\u5730)"}`,
342
+ choices: [
343
+ { name: "\u662F", value: true },
344
+ { name: "\u5426", value: false }
345
+ ],
346
+ theme
347
+ });
348
+ if (!confirmDelete) {
349
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
350
+ return;
351
+ }
352
+ const localSpinner = ora(`\u6B63\u5728\u5220\u9664\u672C\u5730\u5206\u652F: ${branch}`).start();
353
+ try {
354
+ execSync2(`git branch -D "${branch}"`, { stdio: "pipe" });
355
+ localSpinner.succeed(`\u672C\u5730\u5206\u652F\u5DF2\u5220\u9664: ${branch}`);
356
+ } catch {
357
+ localSpinner.fail("\u672C\u5730\u5206\u652F\u5220\u9664\u5931\u8D25");
358
+ return;
359
+ }
360
+ if (hasRemote) {
361
+ const remoteSpinner = ora(`\u6B63\u5728\u5220\u9664\u8FDC\u7A0B\u5206\u652F: origin/${branch}`).start();
362
+ try {
363
+ execSync2(`git push origin --delete "${branch}"`, { stdio: "pipe" });
364
+ remoteSpinner.succeed(`\u8FDC\u7A0B\u5206\u652F\u5DF2\u5220\u9664: origin/${branch}`);
365
+ } catch {
366
+ remoteSpinner.fail("\u8FDC\u7A0B\u5206\u652F\u5220\u9664\u5931\u8D25");
367
+ }
368
+ }
369
+ }
370
+
371
+ // src/commands/tag.ts
372
+ import { execSync as execSync3 } from "child_process";
373
+ import { select as select2, input as input2 } from "@inquirer/prompts";
374
+ import ora2 from "ora";
375
+ async function listTags(prefix) {
376
+ const spinner = ora2("\u6B63\u5728\u83B7\u53D6 tags...").start();
377
+ exec("git fetch --tags", true);
378
+ spinner.stop();
379
+ const pattern = prefix ? `${prefix}*` : "";
380
+ const tags = execOutput(`git tag -l ${pattern} --sort=-v:refname`).split("\n").filter(Boolean);
381
+ if (tags.length === 0) {
382
+ console.log(
383
+ colors.yellow(prefix ? `\u6CA1\u6709 '${prefix}' \u5F00\u5934\u7684 tag` : "\u6CA1\u6709 tag")
384
+ );
385
+ return;
386
+ }
387
+ console.log(
388
+ colors.green(prefix ? `\u4EE5 '${prefix}' \u5F00\u5934\u7684 tags:` : "\u6240\u6709 tags:")
389
+ );
390
+ tags.slice(0, 20).forEach((tag) => console.log(` ${tag}`));
391
+ if (tags.length > 20) {
392
+ console.log(colors.yellow(`
393
+ \u5171 ${tags.length} \u4E2A\uFF0C\u4EC5\u663E\u793A\u524D 20 \u4E2A`));
394
+ }
395
+ }
396
+ function getLatestTag(prefix) {
397
+ const tags = execOutput(`git tag -l "${prefix}*" --sort=-v:refname`).split("\n").filter(Boolean);
398
+ return tags[0] || "";
399
+ }
400
+ async function createTag(inputPrefix) {
401
+ const config2 = getConfig();
402
+ const fetchSpinner = ora2("\u6B63\u5728\u83B7\u53D6 tags...").start();
403
+ exec("git fetch --tags", true);
404
+ fetchSpinner.stop();
405
+ divider();
406
+ let prefix = inputPrefix;
407
+ if (!prefix && config2.defaultTagPrefix) {
408
+ prefix = config2.defaultTagPrefix;
409
+ console.log(colors.dim(`(\u4F7F\u7528\u914D\u7F6E\u7684\u9ED8\u8BA4\u524D\u7F00: ${prefix})`));
410
+ }
411
+ if (!prefix) {
412
+ const allTags = execOutput("git tag -l").split("\n").filter(Boolean);
413
+ if (allTags.length === 0) {
414
+ prefix = await input2({
415
+ message: "\u5F53\u524D\u4ED3\u5E93\u6CA1\u6709 tag\uFF0C\u8BF7\u8F93\u5165\u524D\u7F00 (\u5982 v):",
416
+ default: "v",
417
+ theme
418
+ });
419
+ if (!prefix) {
420
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
421
+ return;
422
+ }
423
+ const initialVersion = await select2({
424
+ message: "\u9009\u62E9\u521D\u59CB\u7248\u672C\u53F7:",
425
+ choices: [
426
+ { name: `${prefix}0.0.1`, value: "0.0.1" },
427
+ { name: `${prefix}0.1.0`, value: "0.1.0" },
428
+ { name: `${prefix}1.0.0`, value: "1.0.0" },
429
+ { name: "\u81EA\u5B9A\u4E49...", value: "__custom__" }
430
+ ],
431
+ theme
432
+ });
433
+ let version3 = initialVersion;
434
+ if (initialVersion === "__custom__") {
435
+ version3 = await input2({
436
+ message: "\u8BF7\u8F93\u5165\u7248\u672C\u53F7 (\u5982 0.0.1):",
437
+ theme
438
+ });
439
+ if (!version3) {
440
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
441
+ return;
442
+ }
443
+ }
444
+ const newTag = `${prefix}${version3}`;
445
+ const ok = await select2({
446
+ message: `\u786E\u8BA4\u521B\u5EFA ${newTag}?`,
447
+ choices: [
448
+ { name: "\u662F", value: true },
449
+ { name: "\u5426", value: false }
450
+ ],
451
+ theme
452
+ });
453
+ if (ok) {
454
+ doCreateTag(newTag);
455
+ }
456
+ return;
457
+ }
458
+ const prefixes = [
459
+ ...new Set(allTags.map((t) => t.replace(/[0-9].*/, "")).filter(Boolean))
460
+ ];
461
+ if (prefixes.length === 0) {
462
+ prefix = await input2({
463
+ message: "\u8BF7\u8F93\u5165 tag \u524D\u7F00 (\u5982 v):",
464
+ default: "v",
465
+ theme
466
+ });
467
+ if (!prefix) {
468
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
469
+ return;
470
+ }
471
+ } else {
472
+ const prefixWithDate = prefixes.map((p) => {
473
+ const latest = getLatestTag(p);
474
+ const date = latest ? execOutput(`git log -1 --format=%ct "${latest}" 2>/dev/null`) : "0";
475
+ return { prefix: p, latest, date: parseInt(date) || 0 };
476
+ });
477
+ prefixWithDate.sort((a, b) => b.date - a.date);
478
+ const choices2 = prefixWithDate.map(
479
+ ({ prefix: p, latest }) => {
480
+ return { name: `${p} (\u6700\u65B0: ${latest})`, value: p };
481
+ }
482
+ );
483
+ choices2.push({ name: "\u8F93\u5165\u65B0\u524D\u7F00...", value: "__new__" });
484
+ prefix = await select2({
485
+ message: "\u9009\u62E9 tag \u524D\u7F00:",
486
+ choices: choices2,
487
+ theme
488
+ });
489
+ if (prefix === "__new__") {
490
+ prefix = await input2({ message: "\u8BF7\u8F93\u5165\u65B0\u524D\u7F00:", theme });
491
+ if (!prefix) {
492
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
493
+ return;
494
+ }
495
+ }
496
+ }
497
+ }
498
+ const latestTag = getLatestTag(prefix);
499
+ if (!latestTag) {
500
+ const newTag = `${prefix}1.0.0`;
501
+ console.log(
502
+ colors.yellow(`\u672A\u627E\u5230 '${prefix}' \u5F00\u5934\u7684 tag\uFF0C\u5C06\u521B\u5EFA ${newTag}`)
503
+ );
504
+ const ok = await select2({
505
+ message: `\u786E\u8BA4\u521B\u5EFA ${newTag}?`,
506
+ choices: [
507
+ { name: "\u662F", value: true },
508
+ { name: "\u5426", value: false }
509
+ ],
510
+ theme
511
+ });
512
+ if (ok) {
513
+ doCreateTag(newTag);
514
+ }
515
+ return;
516
+ }
517
+ console.log(colors.yellow(`\u5F53\u524D\u6700\u65B0 tag: ${latestTag}`));
518
+ divider();
519
+ const version2 = latestTag.slice(prefix.length);
520
+ const preReleaseMatch = version2.match(
521
+ /^(\d+)\.(\d+)\.(\d+)-([a-zA-Z]+)\.(\d+)$/
522
+ );
523
+ const match3 = version2.match(/^(\d+)\.(\d+)\.(\d+)$/);
524
+ const match2 = version2.match(/^(\d+)\.(\d+)$/);
525
+ const match1 = version2.match(/^(\d+)$/);
526
+ let choices = [];
527
+ if (preReleaseMatch) {
528
+ const [, majorStr, minorStr, patchStr, preTag, preNumStr] = preReleaseMatch;
529
+ const major = Number(majorStr);
530
+ const minor = Number(minorStr);
531
+ const patch = Number(patchStr);
532
+ const preNum = Number(preNumStr);
533
+ const baseVersion = `${major}.${minor}.${patch}`;
534
+ choices = [
535
+ {
536
+ name: `pre \u2192 ${prefix}${baseVersion}-${preTag}.${preNum + 1}`,
537
+ value: `${prefix}${baseVersion}-${preTag}.${preNum + 1}`
538
+ },
539
+ {
540
+ name: `release\u2192 ${prefix}${baseVersion}`,
541
+ value: `${prefix}${baseVersion}`
542
+ },
543
+ {
544
+ name: `patch \u2192 ${prefix}${major}.${minor}.${patch + 1}`,
545
+ value: `${prefix}${major}.${minor}.${patch + 1}`
546
+ },
547
+ {
548
+ name: `minor \u2192 ${prefix}${major}.${minor + 1}.0`,
549
+ value: `${prefix}${major}.${minor + 1}.0`
550
+ },
551
+ {
552
+ name: `major \u2192 ${prefix}${major + 1}.0.0`,
553
+ value: `${prefix}${major + 1}.0.0`
554
+ }
555
+ ];
556
+ } else if (match3) {
557
+ const [, majorStr, minorStr, patchStr] = match3;
558
+ const major = Number(majorStr);
559
+ const minor = Number(minorStr);
560
+ const patch = Number(patchStr);
561
+ choices = [
562
+ {
563
+ name: `patch \u2192 ${prefix}${major}.${minor}.${patch + 1}`,
564
+ value: `${prefix}${major}.${minor}.${patch + 1}`
565
+ },
566
+ {
567
+ name: `minor \u2192 ${prefix}${major}.${minor + 1}.0`,
568
+ value: `${prefix}${major}.${minor + 1}.0`
569
+ },
570
+ {
571
+ name: `major \u2192 ${prefix}${major + 1}.0.0`,
572
+ value: `${prefix}${major + 1}.0.0`
573
+ },
574
+ {
575
+ name: `alpha \u2192 ${prefix}${major}.${minor}.${patch + 1}-alpha.1`,
576
+ value: `${prefix}${major}.${minor}.${patch + 1}-alpha.1`
577
+ },
578
+ {
579
+ name: `beta \u2192 ${prefix}${major}.${minor}.${patch + 1}-beta.1`,
580
+ value: `${prefix}${major}.${minor}.${patch + 1}-beta.1`
581
+ },
582
+ {
583
+ name: `rc \u2192 ${prefix}${major}.${minor}.${patch + 1}-rc.1`,
584
+ value: `${prefix}${major}.${minor}.${patch + 1}-rc.1`
585
+ }
586
+ ];
587
+ } else if (match2) {
588
+ const [, majorStr, minorStr] = match2;
589
+ const major = Number(majorStr);
590
+ const minor = Number(minorStr);
591
+ choices = [
592
+ {
593
+ name: `minor \u2192 ${prefix}${major}.${minor + 1}`,
594
+ value: `${prefix}${major}.${minor + 1}`
595
+ },
596
+ {
597
+ name: `major \u2192 ${prefix}${major + 1}.0`,
598
+ value: `${prefix}${major + 1}.0`
599
+ }
600
+ ];
601
+ } else if (match1) {
602
+ const num = Number(match1[1]);
603
+ choices = [
604
+ { name: `next \u2192 ${prefix}${num + 1}`, value: `${prefix}${num + 1}` }
605
+ ];
606
+ } else {
607
+ console.log(colors.red(`\u65E0\u6CD5\u89E3\u6790\u7248\u672C\u53F7: ${version2}`));
608
+ return;
609
+ }
610
+ choices.push({ name: "\u53D6\u6D88", value: "__cancel__" });
611
+ const nextTag = await select2({
612
+ message: "\u9009\u62E9\u7248\u672C\u7C7B\u578B:",
613
+ choices,
614
+ theme
615
+ });
616
+ if (nextTag === "__cancel__") {
617
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
618
+ return;
619
+ }
620
+ doCreateTag(nextTag);
621
+ }
622
+ function doCreateTag(tagName) {
623
+ divider();
624
+ const spinner = ora2(`\u6B63\u5728\u521B\u5EFA tag: ${tagName}`).start();
625
+ try {
626
+ execSync3(`git tag -a "${tagName}" -m "Release ${tagName}"`, {
627
+ stdio: "pipe"
628
+ });
629
+ spinner.succeed(`Tag \u521B\u5EFA\u6210\u529F: ${tagName}`);
630
+ } catch {
631
+ spinner.fail("tag \u521B\u5EFA\u5931\u8D25");
632
+ return;
633
+ }
634
+ const pushSpinner = ora2("\u6B63\u5728\u63A8\u9001\u5230\u8FDC\u7A0B...").start();
635
+ try {
636
+ execSync3(`git push origin "${tagName}"`, { stdio: "pipe" });
637
+ pushSpinner.succeed(`Tag \u5DF2\u63A8\u9001: ${tagName}`);
638
+ } catch {
639
+ pushSpinner.warn(
640
+ `\u8FDC\u7A0B\u63A8\u9001\u5931\u8D25\uFF0C\u53EF\u7A0D\u540E\u624B\u52A8\u6267\u884C: git push origin ${tagName}`
641
+ );
642
+ }
643
+ }
644
+
645
+ // src/commands/release.ts
646
+ import { readFileSync as readFileSync2, writeFileSync } from "fs";
647
+ import { select as select3 } from "@inquirer/prompts";
648
+ function getPackageVersion() {
649
+ const pkg = JSON.parse(readFileSync2("package.json", "utf-8"));
650
+ return pkg.version || "0.0.0";
651
+ }
652
+ function setPackageVersion(version2) {
653
+ const pkg = JSON.parse(readFileSync2("package.json", "utf-8"));
654
+ pkg.version = version2;
655
+ writeFileSync("package.json", JSON.stringify(pkg, null, " ") + "\n");
656
+ }
657
+ function generateChoices(current) {
658
+ const preReleaseMatch = current.match(
659
+ /^(\d+)\.(\d+)\.(\d+)-([a-zA-Z]+)\.(\d+)$/
660
+ );
661
+ const match = current.match(/^(\d+)\.(\d+)\.(\d+)$/);
662
+ if (preReleaseMatch) {
663
+ const [, majorStr, minorStr, patchStr, preTag, preNumStr] = preReleaseMatch;
664
+ const major = Number(majorStr);
665
+ const minor = Number(minorStr);
666
+ const patch = Number(patchStr);
667
+ const preNum = Number(preNumStr);
668
+ const baseVersion = `${major}.${minor}.${patch}`;
669
+ return [
670
+ {
671
+ name: `pre \u2192 ${baseVersion}-${preTag}.${preNum + 1}`,
672
+ value: `${baseVersion}-${preTag}.${preNum + 1}`
673
+ },
674
+ { name: `release \u2192 ${baseVersion}`, value: baseVersion },
675
+ {
676
+ name: `patch \u2192 ${major}.${minor}.${patch + 1}`,
677
+ value: `${major}.${minor}.${patch + 1}`
678
+ },
679
+ {
680
+ name: `minor \u2192 ${major}.${minor + 1}.0`,
681
+ value: `${major}.${minor + 1}.0`
682
+ },
683
+ { name: `major \u2192 ${major + 1}.0.0`, value: `${major + 1}.0.0` }
684
+ ];
685
+ }
686
+ if (match) {
687
+ const [, majorStr, minorStr, patchStr] = match;
688
+ const major = Number(majorStr);
689
+ const minor = Number(minorStr);
690
+ const patch = Number(patchStr);
691
+ return [
692
+ {
693
+ name: `patch \u2192 ${major}.${minor}.${patch + 1}`,
694
+ value: `${major}.${minor}.${patch + 1}`
695
+ },
696
+ {
697
+ name: `minor \u2192 ${major}.${minor + 1}.0`,
698
+ value: `${major}.${minor + 1}.0`
699
+ },
700
+ { name: `major \u2192 ${major + 1}.0.0`, value: `${major + 1}.0.0` },
701
+ {
702
+ name: `alpha \u2192 ${major}.${minor}.${patch + 1}-alpha.1`,
703
+ value: `${major}.${minor}.${patch + 1}-alpha.1`
704
+ },
705
+ {
706
+ name: `beta \u2192 ${major}.${minor}.${patch + 1}-beta.1`,
707
+ value: `${major}.${minor}.${patch + 1}-beta.1`
708
+ },
709
+ {
710
+ name: `rc \u2192 ${major}.${minor}.${patch + 1}-rc.1`,
711
+ value: `${major}.${minor}.${patch + 1}-rc.1`
712
+ }
713
+ ];
714
+ }
715
+ return [
716
+ { name: `patch \u2192 0.0.1`, value: "0.0.1" },
717
+ { name: `minor \u2192 0.1.0`, value: "0.1.0" },
718
+ { name: `major \u2192 1.0.0`, value: "1.0.0" }
719
+ ];
720
+ }
721
+ async function release() {
722
+ const currentVersion = getPackageVersion();
723
+ console.log(colors.yellow(`\u5F53\u524D\u7248\u672C: ${currentVersion}`));
724
+ divider();
725
+ const choices = generateChoices(currentVersion);
726
+ choices.push({ name: "\u53D6\u6D88", value: "__cancel__" });
727
+ const nextVersion = await select3({
728
+ message: "\u9009\u62E9\u65B0\u7248\u672C:",
729
+ choices,
730
+ theme
731
+ });
732
+ if (nextVersion === "__cancel__") {
733
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
734
+ return;
735
+ }
736
+ setPackageVersion(nextVersion);
737
+ divider();
738
+ console.log(
739
+ colors.green(`\u2713 \u7248\u672C\u53F7\u5DF2\u66F4\u65B0: ${currentVersion} \u2192 ${nextVersion}`)
740
+ );
741
+ }
742
+
743
+ // src/commands/init.ts
744
+ import { existsSync as existsSync2, writeFileSync as writeFileSync2 } from "fs";
745
+ import { select as select4, input as input3, confirm } from "@inquirer/prompts";
746
+ var CONFIG_FILE = ".gwrc.json";
747
+ var DEFAULT_COMMIT_EMOJIS = {
748
+ feat: "\u2728",
749
+ fix: "\u{1F41B}",
750
+ docs: "\u{1F4DD}",
751
+ style: "\u{1F484}",
752
+ refactor: "\u267B\uFE0F",
753
+ perf: "\u26A1\uFE0F",
754
+ test: "\u2705",
755
+ build: "\u{1F4E6}",
756
+ ci: "\u{1F477}",
757
+ chore: "\u{1F527}",
758
+ revert: "\u23EA"
759
+ };
760
+ async function init() {
761
+ if (existsSync2(CONFIG_FILE)) {
762
+ const overwrite = await confirm({
763
+ message: `${CONFIG_FILE} \u5DF2\u5B58\u5728\uFF0C\u662F\u5426\u8986\u76D6?`,
764
+ default: false,
765
+ theme
766
+ });
767
+ if (!overwrite) {
768
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
769
+ return;
770
+ }
771
+ }
772
+ console.log(colors.dim("\u914D\u7F6E git-workflow\uFF0C\u76F4\u63A5\u56DE\u8F66\u4F7F\u7528\u9ED8\u8BA4\u503C\n"));
773
+ const config2 = {};
774
+ const baseBranch = await input3({
775
+ message: "\u9ED8\u8BA4\u57FA\u7840\u5206\u652F (\u7559\u7A7A\u81EA\u52A8\u68C0\u6D4B main/master):",
776
+ theme
777
+ });
778
+ if (baseBranch) config2.baseBranch = baseBranch;
779
+ divider();
780
+ const featurePrefix = await input3({
781
+ message: "Feature \u5206\u652F\u524D\u7F00:",
782
+ default: "feature",
783
+ theme
784
+ });
785
+ if (featurePrefix !== "feature") config2.featurePrefix = featurePrefix;
786
+ const hotfixPrefix = await input3({
787
+ message: "Hotfix \u5206\u652F\u524D\u7F00:",
788
+ default: "hotfix",
789
+ theme
790
+ });
791
+ if (hotfixPrefix !== "hotfix") config2.hotfixPrefix = hotfixPrefix;
792
+ divider();
793
+ const requireId = await confirm({
794
+ message: "\u662F\u5426\u8981\u6C42\u5FC5\u586B ID (Story ID / Issue ID)?",
795
+ default: false,
796
+ theme
797
+ });
798
+ if (requireId) config2.requireId = true;
799
+ const featureIdLabel = await input3({
800
+ message: "Feature \u5206\u652F ID \u6807\u7B7E:",
801
+ default: "Story ID",
802
+ theme
803
+ });
804
+ if (featureIdLabel !== "Story ID") config2.featureIdLabel = featureIdLabel;
805
+ const hotfixIdLabel = await input3({
806
+ message: "Hotfix \u5206\u652F ID \u6807\u7B7E:",
807
+ default: "Issue ID",
808
+ theme
809
+ });
810
+ if (hotfixIdLabel !== "Issue ID") config2.hotfixIdLabel = hotfixIdLabel;
811
+ divider();
812
+ const defaultTagPrefix = await input3({
813
+ message: "\u9ED8\u8BA4 Tag \u524D\u7F00 (\u7559\u7A7A\u5219\u6BCF\u6B21\u9009\u62E9):",
814
+ theme
815
+ });
816
+ if (defaultTagPrefix) config2.defaultTagPrefix = defaultTagPrefix;
817
+ const autoPushChoice = await select4({
818
+ message: "\u521B\u5EFA\u5206\u652F\u540E\u662F\u5426\u81EA\u52A8\u63A8\u9001?",
819
+ choices: [
820
+ { name: "\u6BCF\u6B21\u8BE2\u95EE", value: "ask" },
821
+ { name: "\u81EA\u52A8\u63A8\u9001", value: "yes" },
822
+ { name: "\u4E0D\u63A8\u9001", value: "no" }
823
+ ],
824
+ theme
825
+ });
826
+ if (autoPushChoice === "yes") config2.autoPush = true;
827
+ if (autoPushChoice === "no") config2.autoPush = false;
828
+ divider();
829
+ const autoStage = await confirm({
830
+ message: "Commit \u65F6\u662F\u5426\u81EA\u52A8\u6682\u5B58\u6240\u6709\u66F4\u6539?",
831
+ default: true,
832
+ theme
833
+ });
834
+ if (!autoStage) config2.autoStage = false;
835
+ const useEmoji = await confirm({
836
+ message: "Commit \u65F6\u662F\u5426\u4F7F\u7528 emoji?",
837
+ default: true,
838
+ theme
839
+ });
840
+ if (!useEmoji) config2.useEmoji = false;
841
+ config2.commitEmojis = DEFAULT_COMMIT_EMOJIS;
842
+ divider();
843
+ const content = JSON.stringify(config2, null, 2);
844
+ writeFileSync2(CONFIG_FILE, content + "\n");
845
+ console.log(colors.green(`\u2713 \u914D\u7F6E\u5DF2\u4FDD\u5B58\u5230 ${CONFIG_FILE}`));
846
+ console.log(
847
+ colors.dim(
848
+ "\n\u63D0\u793A: \u53EF\u4EE5\u5728\u914D\u7F6E\u6587\u4EF6\u4E2D\u4FEE\u6539 commitEmojis \u6765\u81EA\u5B9A\u4E49\u5404\u7C7B\u578B\u7684 emoji"
849
+ )
850
+ );
851
+ console.log(colors.dim("\n" + content));
852
+ }
853
+
854
+ // src/commands/stash.ts
855
+ import { execSync as execSync4 } from "child_process";
856
+ import { select as select5, input as input4 } from "@inquirer/prompts";
857
+ import ora3 from "ora";
858
+ function parseStashList() {
859
+ const raw = execOutput('git stash list --format="%gd|%s|%ar"');
860
+ if (!raw) return [];
861
+ return raw.split("\n").filter(Boolean).map((line) => {
862
+ const [ref, subject, date] = line.split("|");
863
+ const index = parseInt(ref.match(/stash@\{(\d+)\}/)?.[1] || "0");
864
+ const branchMatch = subject.match(/(?:WIP on|On) ([^:]+):/);
865
+ const branch = branchMatch?.[1] || "unknown";
866
+ let message = subject.replace(/(?:WIP on|On) [^:]+:\s*/, "");
867
+ if (subject.startsWith("WIP")) {
868
+ message = message.replace(/^[a-f0-9]+ /, "");
869
+ }
870
+ message = message || "(no message)";
871
+ const filesRaw = execOutput(
872
+ `git stash show stash@{${index}} --name-only 2>/dev/null`
873
+ );
874
+ const files = filesRaw ? filesRaw.split("\n").filter(Boolean) : [];
875
+ return { index, branch, message, date, files };
876
+ });
877
+ }
878
+ function formatStashChoice(entry) {
879
+ const fileCount = entry.files.length;
880
+ const filesInfo = fileCount > 0 ? colors.dim(` (${fileCount} \u6587\u4EF6)`) : "";
881
+ return `${colors.yellow(`[${entry.index}]`)} ${colors.green(entry.branch)} ${entry.message}${filesInfo} ${colors.dim(entry.date)}`;
882
+ }
883
+ function showStashDetail(entry) {
884
+ console.log();
885
+ console.log(colors.yellow(`Stash #${entry.index}`));
886
+ console.log(`\u5206\u652F: ${colors.green(entry.branch)}`);
887
+ console.log(`\u6D88\u606F: ${entry.message}`);
888
+ console.log(`\u65F6\u95F4: ${colors.dim(entry.date)}`);
889
+ if (entry.files.length > 0) {
890
+ console.log(`\u6587\u4EF6 (${entry.files.length}):`);
891
+ entry.files.slice(0, 10).forEach((f) => console.log(` ${colors.dim("\u2022")} ${f}`));
892
+ if (entry.files.length > 10) {
893
+ console.log(colors.dim(` ... \u8FD8\u6709 ${entry.files.length - 10} \u4E2A\u6587\u4EF6`));
894
+ }
895
+ }
896
+ }
897
+ async function stash() {
898
+ const entries = parseStashList();
899
+ if (entries.length === 0) {
900
+ console.log(colors.yellow("\u6CA1\u6709 stash \u8BB0\u5F55"));
901
+ const status = execOutput("git status --porcelain");
902
+ if (status) {
903
+ const doStash = await select5({
904
+ message: "\u68C0\u6D4B\u5230\u672A\u63D0\u4EA4\u7684\u53D8\u66F4\uFF0C\u662F\u5426\u521B\u5EFA stash?",
905
+ choices: [
906
+ { name: "\u662F", value: true },
907
+ { name: "\u5426", value: false }
908
+ ],
909
+ theme
910
+ });
911
+ if (doStash) {
912
+ await createStash();
913
+ }
914
+ }
915
+ return;
916
+ }
917
+ console.log(colors.green(`\u5171 ${entries.length} \u4E2A stash:
918
+ `));
919
+ const choices = entries.map((entry2) => ({
920
+ name: formatStashChoice(entry2),
921
+ value: entry2.index.toString()
922
+ }));
923
+ choices.push({ name: colors.dim("+ \u521B\u5EFA\u65B0 stash"), value: "__new__" });
924
+ choices.push({ name: colors.dim("\u53D6\u6D88"), value: "__cancel__" });
925
+ const selected = await select5({
926
+ message: "\u9009\u62E9 stash:",
927
+ choices,
928
+ theme
929
+ });
930
+ if (selected === "__cancel__") {
931
+ return;
932
+ }
933
+ if (selected === "__new__") {
934
+ await createStash();
935
+ return;
936
+ }
937
+ const entry = entries.find((e) => e.index.toString() === selected);
938
+ await showStashActions(entry);
939
+ }
940
+ async function showStashActions(entry) {
941
+ showStashDetail(entry);
942
+ divider();
943
+ const action = await select5({
944
+ message: "\u64CD\u4F5C:",
945
+ choices: [
946
+ { name: "\u5E94\u7528 (\u4FDD\u7559 stash)", value: "apply" },
947
+ { name: "\u5F39\u51FA (\u5E94\u7528\u5E76\u5220\u9664)", value: "pop" },
948
+ { name: "\u521B\u5EFA\u5206\u652F", value: "branch" },
949
+ { name: "\u67E5\u770B\u5DEE\u5F02", value: "diff" },
950
+ { name: "\u5220\u9664", value: "drop" },
951
+ { name: "\u8FD4\u56DE\u5217\u8868", value: "back" },
952
+ { name: "\u53D6\u6D88", value: "cancel" }
953
+ ],
954
+ theme
955
+ });
956
+ switch (action) {
957
+ case "apply":
958
+ applyStash(entry.index, false);
959
+ break;
960
+ case "pop":
961
+ applyStash(entry.index, true);
962
+ break;
963
+ case "branch":
964
+ await createBranchFromStash(entry.index);
965
+ break;
966
+ case "diff":
967
+ await showDiff(entry.index);
968
+ await showStashActions(entry);
969
+ break;
970
+ case "drop":
971
+ await dropStash(entry.index);
972
+ break;
973
+ case "back":
974
+ await stash();
975
+ break;
976
+ }
977
+ }
978
+ async function createStash() {
979
+ const status = execOutput("git status --porcelain");
980
+ if (!status) {
981
+ console.log(colors.yellow("\u6CA1\u6709\u9700\u8981 stash \u7684\u53D8\u66F4"));
982
+ return;
983
+ }
984
+ const hasUntracked = status.split("\n").some((line) => line.startsWith("??"));
985
+ let includeUntracked = false;
986
+ if (hasUntracked) {
987
+ includeUntracked = await select5({
988
+ message: "\u68C0\u6D4B\u5230\u672A\u8DDF\u8E2A\u7684\u6587\u4EF6\uFF0C\u662F\u5426\u4E00\u5E76 stash?",
989
+ choices: [
990
+ { name: "\u662F (\u5305\u542B\u672A\u8DDF\u8E2A\u6587\u4EF6)", value: true },
991
+ { name: "\u5426 (\u4EC5\u5DF2\u8DDF\u8E2A\u6587\u4EF6)", value: false }
992
+ ],
993
+ theme
994
+ });
995
+ }
996
+ const message = await input4({
997
+ message: "Stash \u6D88\u606F (\u53EF\u9009):",
998
+ theme
999
+ });
1000
+ const spinner = ora3("\u521B\u5EFA stash...").start();
1001
+ try {
1002
+ let cmd = "git stash push";
1003
+ if (includeUntracked) cmd += " -u";
1004
+ if (message) cmd += ` -m "${message.replace(/"/g, '\\"')}"`;
1005
+ execSync4(cmd, { stdio: "pipe" });
1006
+ spinner.succeed("Stash \u521B\u5EFA\u6210\u529F");
1007
+ await stash();
1008
+ } catch {
1009
+ spinner.fail("Stash \u521B\u5EFA\u5931\u8D25");
1010
+ }
1011
+ }
1012
+ function applyStash(index, pop) {
1013
+ const action = pop ? "pop" : "apply";
1014
+ const spinner = ora3(`${pop ? "\u5F39\u51FA" : "\u5E94\u7528"} stash...`).start();
1015
+ try {
1016
+ execSync4(`git stash ${action} stash@{${index}}`, { stdio: "pipe" });
1017
+ spinner.succeed(`Stash ${pop ? "\u5DF2\u5F39\u51FA" : "\u5DF2\u5E94\u7528"}`);
1018
+ } catch {
1019
+ spinner.fail("\u64CD\u4F5C\u5931\u8D25\uFF0C\u53EF\u80FD\u5B58\u5728\u51B2\u7A81");
1020
+ const status = execOutput("git status --porcelain");
1021
+ if (status.includes("UU") || status.includes("AA")) {
1022
+ console.log(colors.yellow("\n\u5B58\u5728\u51B2\u7A81\uFF0C\u8BF7\u624B\u52A8\u89E3\u51B3\u540E\u63D0\u4EA4"));
1023
+ }
1024
+ }
1025
+ }
1026
+ async function showDiff(index) {
1027
+ try {
1028
+ execSync4(`git stash show -p --color=always stash@{${index}}`, {
1029
+ stdio: "inherit"
1030
+ });
1031
+ console.log();
1032
+ await input4({
1033
+ message: colors.dim("\u6309 Enter \u8FD4\u56DE\u83DC\u5355..."),
1034
+ theme
1035
+ });
1036
+ } catch {
1037
+ console.log(colors.red("\u65E0\u6CD5\u663E\u793A\u5DEE\u5F02"));
1038
+ }
1039
+ }
1040
+ async function createBranchFromStash(index) {
1041
+ const type = await select5({
1042
+ message: "\u9009\u62E9\u5206\u652F\u7C7B\u578B:",
1043
+ choices: [
1044
+ { name: "feature", value: "feature" },
1045
+ { name: "hotfix", value: "hotfix" },
1046
+ { name: "\u53D6\u6D88", value: "__cancel__" }
1047
+ ],
1048
+ theme
1049
+ });
1050
+ if (type === "__cancel__") {
1051
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
1052
+ return;
1053
+ }
1054
+ const branchName = await getBranchName(type);
1055
+ if (!branchName) return;
1056
+ const spinner = ora3(`\u521B\u5EFA\u5206\u652F ${branchName}...`).start();
1057
+ try {
1058
+ execSync4(`git stash branch "${branchName}" stash@{${index}}`, {
1059
+ stdio: "pipe"
1060
+ });
1061
+ spinner.succeed(`\u5206\u652F\u5DF2\u521B\u5EFA: ${branchName} (stash \u5DF2\u81EA\u52A8\u5F39\u51FA)`);
1062
+ } catch {
1063
+ spinner.fail("\u521B\u5EFA\u5206\u652F\u5931\u8D25");
1064
+ }
1065
+ }
1066
+ async function dropStash(index) {
1067
+ const confirmed = await select5({
1068
+ message: `\u786E\u8BA4\u5220\u9664 stash@{${index}}?`,
1069
+ choices: [
1070
+ { name: "\u662F", value: true },
1071
+ { name: "\u5426", value: false }
1072
+ ],
1073
+ theme
1074
+ });
1075
+ if (!confirmed) {
1076
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
1077
+ return;
1078
+ }
1079
+ const spinner = ora3("\u5220\u9664 stash...").start();
1080
+ try {
1081
+ execSync4(`git stash drop stash@{${index}}`, { stdio: "pipe" });
1082
+ spinner.succeed("Stash \u5DF2\u5220\u9664");
1083
+ } catch {
1084
+ spinner.fail("\u5220\u9664\u5931\u8D25");
1085
+ }
1086
+ }
1087
+
1088
+ // src/commands/commit.ts
1089
+ import { execSync as execSync5 } from "child_process";
1090
+ import { select as select6, input as input5, confirm as confirm2, checkbox } from "@inquirer/prompts";
1091
+ import ora4 from "ora";
1092
+ var DEFAULT_COMMIT_TYPES = [
1093
+ { type: "feat", emoji: "\u2728", description: "\u65B0\u529F\u80FD" },
1094
+ { type: "fix", emoji: "\u{1F41B}", description: "\u4FEE\u590D Bug" },
1095
+ { type: "docs", emoji: "\u{1F4DD}", description: "\u6587\u6863\u66F4\u65B0" },
1096
+ { type: "style", emoji: "\u{1F484}", description: "\u4EE3\u7801\u683C\u5F0F (\u4E0D\u5F71\u54CD\u529F\u80FD)" },
1097
+ { type: "refactor", emoji: "\u267B\uFE0F", description: "\u91CD\u6784 (\u975E\u65B0\u529F\u80FD/\u4FEE\u590D)" },
1098
+ { type: "perf", emoji: "\u26A1\uFE0F", description: "\u6027\u80FD\u4F18\u5316" },
1099
+ { type: "test", emoji: "\u2705", description: "\u6D4B\u8BD5\u76F8\u5173" },
1100
+ { type: "build", emoji: "\u{1F4E6}", description: "\u6784\u5EFA/\u4F9D\u8D56\u76F8\u5173" },
1101
+ { type: "ci", emoji: "\u{1F477}", description: "CI/CD \u76F8\u5173" },
1102
+ { type: "chore", emoji: "\u{1F527}", description: "\u5176\u4ED6\u6742\u9879" },
1103
+ { type: "revert", emoji: "\u23EA", description: "\u56DE\u9000\u63D0\u4EA4" }
1104
+ ];
1105
+ function getCommitTypes(config2) {
1106
+ const customEmojis = config2.commitEmojis || {};
1107
+ return DEFAULT_COMMIT_TYPES.map((item) => ({
1108
+ ...item,
1109
+ emoji: customEmojis[item.type] || item.emoji
1110
+ }));
1111
+ }
1112
+ function parseGitStatus() {
1113
+ const output = execOutput("git status --porcelain");
1114
+ if (!output) return { staged: [], unstaged: [] };
1115
+ const staged = [];
1116
+ const unstaged = [];
1117
+ for (const line of output.split("\n")) {
1118
+ if (!line) continue;
1119
+ const indexStatus = line[0];
1120
+ const workTreeStatus = line[1];
1121
+ const file = line.slice(3);
1122
+ if (indexStatus !== " " && indexStatus !== "?") {
1123
+ staged.push({ status: indexStatus, file });
1124
+ }
1125
+ if (workTreeStatus !== " " || indexStatus === "?") {
1126
+ const status = indexStatus === "?" ? "?" : workTreeStatus;
1127
+ unstaged.push({ status, file });
1128
+ }
1129
+ }
1130
+ return { staged, unstaged };
1131
+ }
1132
+ function formatFileStatus(status) {
1133
+ const statusMap = {
1134
+ M: colors.yellow("M"),
1135
+ A: colors.green("A"),
1136
+ D: colors.red("D"),
1137
+ R: colors.yellow("R"),
1138
+ C: colors.yellow("C"),
1139
+ "?": colors.green("?")
1140
+ };
1141
+ return statusMap[status] || status;
1142
+ }
1143
+ async function commit() {
1144
+ const config2 = getConfig();
1145
+ let { staged, unstaged } = parseGitStatus();
1146
+ if (staged.length === 0) {
1147
+ if (unstaged.length === 0) {
1148
+ console.log(colors.yellow("\u5DE5\u4F5C\u533A\u5E72\u51C0\uFF0C\u6CA1\u6709\u9700\u8981\u63D0\u4EA4\u7684\u66F4\u6539"));
1149
+ return;
1150
+ }
1151
+ console.log(colors.yellow("\u6CA1\u6709\u6682\u5B58\u7684\u66F4\u6539"));
1152
+ divider();
1153
+ console.log("\u672A\u6682\u5B58\u7684\u6587\u4EF6:");
1154
+ for (const { status, file } of unstaged) {
1155
+ console.log(` ${formatFileStatus(status)} ${file}`);
1156
+ }
1157
+ divider();
1158
+ const autoStage = config2.autoStage ?? true;
1159
+ if (autoStage) {
1160
+ execSync5("git add -A", { stdio: "pipe" });
1161
+ console.log(colors.green("\u2714 \u5DF2\u81EA\u52A8\u6682\u5B58\u6240\u6709\u66F4\u6539"));
1162
+ divider();
1163
+ const newStatus = parseGitStatus();
1164
+ staged = newStatus.staged;
1165
+ } else {
1166
+ const filesToStage = await checkbox({
1167
+ message: "\u9009\u62E9\u8981\u6682\u5B58\u7684\u6587\u4EF6:",
1168
+ choices: unstaged.map(({ status, file }) => ({
1169
+ name: `${formatFileStatus(status)} ${file}`,
1170
+ value: file,
1171
+ checked: true
1172
+ })),
1173
+ theme
1174
+ });
1175
+ if (filesToStage.length === 0) {
1176
+ console.log(colors.yellow("\u6CA1\u6709\u9009\u62E9\u4EFB\u4F55\u6587\u4EF6\uFF0C\u5DF2\u53D6\u6D88"));
1177
+ return;
1178
+ }
1179
+ for (const file of filesToStage) {
1180
+ execSync5(`git add "${file}"`, { stdio: "pipe" });
1181
+ }
1182
+ console.log(colors.green(`\u2714 \u5DF2\u6682\u5B58 ${filesToStage.length} \u4E2A\u6587\u4EF6`));
1183
+ divider();
1184
+ const newStatus = parseGitStatus();
1185
+ staged = newStatus.staged;
1186
+ }
1187
+ } else {
1188
+ console.log("\u5DF2\u6682\u5B58\u7684\u6587\u4EF6:");
1189
+ for (const { status, file } of staged) {
1190
+ console.log(` ${formatFileStatus(status)} ${file}`);
1191
+ }
1192
+ divider();
1193
+ }
1194
+ const commitTypes = getCommitTypes(config2);
1195
+ const typeChoice = await select6({
1196
+ message: "\u9009\u62E9\u63D0\u4EA4\u7C7B\u578B:",
1197
+ choices: commitTypes.map((t) => ({
1198
+ name: `${t.emoji} ${t.type.padEnd(10)} ${colors.dim(t.description)}`,
1199
+ value: t
1200
+ })),
1201
+ theme
1202
+ });
1203
+ const scope = await input5({
1204
+ message: "\u8F93\u5165\u5F71\u54CD\u8303\u56F4 scope (\u53EF\u8DF3\u8FC7):",
1205
+ theme
1206
+ });
1207
+ const subject = await input5({
1208
+ message: "\u8F93\u5165\u7B80\u77ED\u63CF\u8FF0:",
1209
+ validate: (value) => {
1210
+ if (!value.trim()) return "\u63CF\u8FF0\u4E0D\u80FD\u4E3A\u7A7A";
1211
+ if (value.length > 72) return "\u63CF\u8FF0\u4E0D\u80FD\u8D85\u8FC7 72 \u4E2A\u5B57\u7B26";
1212
+ return true;
1213
+ },
1214
+ theme
1215
+ });
1216
+ const body = await input5({
1217
+ message: "\u8F93\u5165\u8BE6\u7EC6\u63CF\u8FF0 (\u53EF\u8DF3\u8FC7):",
1218
+ theme
1219
+ });
1220
+ const hasBreaking = await confirm2({
1221
+ message: "\u662F\u5426\u5305\u542B\u7834\u574F\u6027\u53D8\u66F4 (BREAKING CHANGE)?",
1222
+ default: false,
1223
+ theme
1224
+ });
1225
+ let breakingDesc = "";
1226
+ if (hasBreaking) {
1227
+ breakingDesc = await input5({
1228
+ message: "\u63CF\u8FF0\u7834\u574F\u6027\u53D8\u66F4:",
1229
+ validate: (value) => value.trim() ? true : "\u8BF7\u63CF\u8FF0\u7834\u574F\u6027\u53D8\u66F4",
1230
+ theme
1231
+ });
1232
+ }
1233
+ const issues = await input5({
1234
+ message: "\u5173\u8054 Issue (\u5982 #123, \u53EF\u8DF3\u8FC7):",
1235
+ theme
1236
+ });
1237
+ const { type, emoji } = typeChoice;
1238
+ const scopePart = scope ? `(${scope})` : "";
1239
+ const breakingMark = hasBreaking ? "!" : "";
1240
+ const useEmoji = config2.useEmoji ?? true;
1241
+ const emojiPrefix = useEmoji ? `${emoji} ` : "";
1242
+ let message = `${emojiPrefix}${type}${scopePart}${breakingMark}: ${subject}`;
1243
+ if (body || hasBreaking || issues) {
1244
+ message += "\n";
1245
+ if (body) {
1246
+ message += `
1247
+ ${body}`;
1248
+ }
1249
+ if (hasBreaking) {
1250
+ message += `
1251
+
1252
+ BREAKING CHANGE: ${breakingDesc}`;
1253
+ }
1254
+ if (issues) {
1255
+ message += `
1256
+
1257
+ ${issues}`;
1258
+ }
1259
+ }
1260
+ divider();
1261
+ console.log("\u63D0\u4EA4\u4FE1\u606F\u9884\u89C8:");
1262
+ console.log(colors.green(message));
1263
+ divider();
1264
+ const shouldCommit = await confirm2({
1265
+ message: "\u786E\u8BA4\u63D0\u4EA4?",
1266
+ default: true,
1267
+ theme
1268
+ });
1269
+ if (!shouldCommit) {
1270
+ console.log(colors.yellow("\u5DF2\u53D6\u6D88"));
1271
+ return;
1272
+ }
1273
+ const spinner = ora4("\u6B63\u5728\u63D0\u4EA4...").start();
1274
+ try {
1275
+ const escapedMessage = message.replace(/"/g, '\\"');
1276
+ execSync5(`git commit -m "${escapedMessage}"`, { stdio: "pipe" });
1277
+ spinner.succeed("\u63D0\u4EA4\u6210\u529F");
1278
+ const commitHash = execOutput("git rev-parse --short HEAD");
1279
+ console.log(colors.dim(`commit: ${commitHash}`));
1280
+ } catch (error) {
1281
+ spinner.fail("\u63D0\u4EA4\u5931\u8D25");
1282
+ if (error instanceof Error) {
1283
+ console.log(colors.red(error.message));
1284
+ }
1285
+ }
1286
+ }
1287
+
1288
+ // src/commands/help.ts
1289
+ function showHelp() {
1290
+ return `
33
1291
  \u5206\u652F\u547D\u4EE4:
34
1292
  gw feature [--base <branch>] \u521B\u5EFA feature \u5206\u652F
35
1293
  gw feat [--base <branch>] \u540C\u4E0A (\u522B\u540D)
@@ -80,15 +1338,312 @@ Commit \u547D\u4EE4:
80
1338
  gw c \u4EA4\u4E92\u5F0F\u63D0\u4EA4\u4EE3\u7801
81
1339
 
82
1340
  \u5206\u652F\u547D\u540D\u683C\u5F0F:
83
- feature/${V}-<Story ID>-<\u63CF\u8FF0>
84
- hotfix/${V}-<Issue ID>-<\u63CF\u8FF0>
85
- `}l();import{execSync as Vt}from"child_process";import du from"boxen";import{select as Fu}from"@inquirer/prompts";import Cu from"ora";var Eu=1e3*60*60*24,Ht=".gw-update-check";async function Kt(e,t="@zjex/git-workflow"){try{let u=xu(),n=Date.now();if(u?.lastDismiss&&n-u.lastDismiss<Eu)return;let o=await bu(t);if(o&&o!==e){let r=await wu(e,o,t);r==="update"?await Bu(t):r==="dismiss"&&yu({lastDismiss:n,latestVersion:o})}}catch{}}async function bu(e){try{return Vt(`npm view ${e} version`,{encoding:"utf-8",timeout:3e3,stdio:["pipe","pipe","ignore"]}).trim()}catch{return null}}async function wu(e,t,u){let n=[`${D.bold}\u{1F389} \u53D1\u73B0\u65B0\u7248\u672C\u53EF\u7528\uFF01${D.reset}`,"",`${D.dim}${e}${D.reset} \u2192 ${D.green}${D.bold}${t}${D.reset}`].join(`
86
- `);console.log(""),console.log(du(n,{padding:1,margin:1,borderStyle:"round",borderColor:"yellow",align:"left"}));try{return await Fu({message:"\u4F60\u60F3\u505A\u4EC0\u4E48\uFF1F",choices:[{name:"\u{1F680} \u7ACB\u5373\u66F4\u65B0",value:"update",description:`\u8FD0\u884C npm install -g ${u}`},{name:"\u23ED\uFE0F \u7A0D\u540E\u66F4\u65B0\uFF0C\u7EE7\u7EED\u4F7F\u7528",value:"continue",description:"\u4E0B\u6B21\u542F\u52A8\u65F6\u4F1A\u518D\u6B21\u63D0\u793A"},{name:"\u{1F648} \u8DF3\u8FC7\u6B64\u7248\u672C (24h \u5185\u4E0D\u518D\u63D0\u793A)",value:"dismiss",description:"24 \u5C0F\u65F6\u5185\u4E0D\u4F1A\u518D\u63D0\u793A\u6B64\u7248\u672C"}]})}catch{return console.log(""),"continue"}}async function Bu(e){console.log("");let t=Cu({text:"\u6B63\u5728\u66F4\u65B0...",spinner:"dots"}).start();try{Vt(`npm install -g ${e}`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),t.succeed(D.green+"\u66F4\u65B0\u6210\u529F\uFF01"+D.reset),console.log(""),console.log(D.cyan+" \u63D0\u793A: \u8BF7\u91CD\u65B0\u8FD0\u884C\u547D\u4EE4\u4EE5\u4F7F\u7528\u65B0\u7248\u672C"+D.reset),console.log(""),process.exit(0)}catch{t.fail(D.red+"\u66F4\u65B0\u5931\u8D25"+D.reset),console.log(""),console.log(D.dim+" \u4F60\u53EF\u4EE5\u624B\u52A8\u8FD0\u884C\u4EE5\u4E0B\u547D\u4EE4\u66F4\u65B0:"+D.reset),console.log(D.cyan+` npm install -g ${e}`+D.reset),console.log("")}}function xu(){try{let e=T("fs"),t=T("os"),n=T("path").join(t.homedir(),Ht);if(!e.existsSync(n))return null;let o=e.readFileSync(n,"utf-8");return JSON.parse(o)}catch{return null}}function yu(e){try{let t=T("fs"),u=T("os"),o=T("path").join(u.homedir(),Ht);t.writeFileSync(o,JSON.stringify(e),"utf-8")}catch{}}process.on("uncaughtException",e=>{e instanceof Y&&process.exit(0),console.error(e),process.exit(1)});var He="0.2.0";async function Su(){switch(Kt(He,"@zjex/git-workflow").catch(()=>{}),console.log(D.green(`
1341
+ feature/${TODAY}-<Story ID>-<\u63CF\u8FF0>
1342
+ hotfix/${TODAY}-<Issue ID>-<\u63CF\u8FF0>
1343
+ `;
1344
+ }
1345
+
1346
+ // src/update-notifier.ts
1347
+ import { execSync as execSync6 } from "child_process";
1348
+ import boxen from "boxen";
1349
+ import { select as select7 } from "@inquirer/prompts";
1350
+ import ora5 from "ora";
1351
+ var DISMISS_INTERVAL = 1e3 * 60 * 60 * 24;
1352
+ var CACHE_FILE = ".gw-update-check";
1353
+ async function checkForUpdates(currentVersion, packageName = "@zjex/git-workflow") {
1354
+ try {
1355
+ const cache = readCache();
1356
+ const now = Date.now();
1357
+ if (cache?.lastDismiss && now - cache.lastDismiss < DISMISS_INTERVAL) {
1358
+ return;
1359
+ }
1360
+ const latestVersion = await getLatestVersion(packageName);
1361
+ if (latestVersion && latestVersion !== currentVersion) {
1362
+ const action = await showUpdateMessage(
1363
+ currentVersion,
1364
+ latestVersion,
1365
+ packageName
1366
+ );
1367
+ if (action === "update") {
1368
+ await performUpdate(packageName);
1369
+ } else if (action === "dismiss") {
1370
+ writeCache({ lastDismiss: now, latestVersion });
1371
+ }
1372
+ }
1373
+ } catch (error) {
1374
+ }
1375
+ }
1376
+ async function getLatestVersion(packageName) {
1377
+ try {
1378
+ const result = execSync6(`npm view ${packageName} version`, {
1379
+ encoding: "utf-8",
1380
+ timeout: 3e3,
1381
+ stdio: ["pipe", "pipe", "ignore"]
1382
+ // 忽略 stderr
1383
+ });
1384
+ return result.trim();
1385
+ } catch {
1386
+ return null;
1387
+ }
1388
+ }
1389
+ async function showUpdateMessage(current, latest, packageName) {
1390
+ const message = [
1391
+ colors.bold("\uFFFD \u53D1\u73B0\u65B0\u7248\u65B0\u672C\u53EF\u7528\uFF01"),
1392
+ "",
1393
+ `${colors.dim(current)} \u2192 ${colors.green(colors.bold(latest))}`
1394
+ ].join("\n");
1395
+ console.log("");
1396
+ console.log(
1397
+ boxen(message, {
1398
+ padding: 1,
1399
+ margin: 1,
1400
+ borderStyle: "round",
1401
+ borderColor: "yellow",
1402
+ align: "left"
1403
+ })
1404
+ );
1405
+ try {
1406
+ const action = await select7({
1407
+ message: "\u4F60\u60F3\u505A\u4EC0\u4E48\uFF1F",
1408
+ choices: [
1409
+ {
1410
+ name: "\u{1F680} \u7ACB\u5373\u66F4\u65B0",
1411
+ value: "update",
1412
+ description: `\u8FD0\u884C npm install -g ${packageName}`
1413
+ },
1414
+ {
1415
+ name: "\u23ED\uFE0F \u7A0D\u540E\u66F4\u65B0\uFF0C\u7EE7\u7EED\u4F7F\u7528",
1416
+ value: "continue",
1417
+ description: "\u4E0B\u6B21\u542F\u52A8\u65F6\u4F1A\u518D\u6B21\u63D0\u793A"
1418
+ },
1419
+ {
1420
+ name: "\u{1F648} \u8DF3\u8FC7\u6B64\u7248\u672C (24h \u5185\u4E0D\u518D\u63D0\u793A)",
1421
+ value: "dismiss",
1422
+ description: "24 \u5C0F\u65F6\u5185\u4E0D\u4F1A\u518D\u63D0\u793A\u6B64\u7248\u672C"
1423
+ }
1424
+ ]
1425
+ });
1426
+ return action;
1427
+ } catch (error) {
1428
+ console.log("");
1429
+ return "continue";
1430
+ }
1431
+ }
1432
+ async function performUpdate(packageName) {
1433
+ console.log("");
1434
+ const spinner = ora5({
1435
+ text: "\u6B63\u5728\u66F4\u65B0...",
1436
+ spinner: "dots"
1437
+ }).start();
1438
+ try {
1439
+ try {
1440
+ execSync6("npm uninstall -g git-workflow", {
1441
+ encoding: "utf-8",
1442
+ stdio: ["pipe", "pipe", "pipe"]
1443
+ });
1444
+ spinner.text = "\u5DF2\u5378\u8F7D\u65E7\u7248\u672C\uFF0C\u6B63\u5728\u5B89\u88C5\u65B0\u7248\u672C...";
1445
+ } catch {
1446
+ }
1447
+ execSync6(`npm install -g ${packageName}`, {
1448
+ encoding: "utf-8",
1449
+ stdio: ["pipe", "pipe", "pipe"]
1450
+ });
1451
+ spinner.succeed(colors.green("\u66F4\u65B0\u6210\u529F\uFF01"));
1452
+ console.log("");
1453
+ console.log(colors.cyan(" \u63D0\u793A: \u8BF7\u91CD\u65B0\u8FD0\u884C\u547D\u4EE4\u4EE5\u4F7F\u7528\u65B0\u7248\u672C"));
1454
+ console.log("");
1455
+ process.exit(0);
1456
+ } catch (error) {
1457
+ spinner.fail(colors.red("\u66F4\u65B0\u5931\u8D25"));
1458
+ console.log("");
1459
+ console.log(colors.dim(" \u4F60\u53EF\u4EE5\u624B\u52A8\u8FD0\u884C\u4EE5\u4E0B\u547D\u4EE4\u66F4\u65B0:"));
1460
+ console.log(colors.yellow(" # \u5982\u679C\u4E4B\u524D\u5B89\u88C5\u8FC7\u65E7\u7248\u672C\uFF0C\u5148\u5378\u8F7D:"));
1461
+ console.log(colors.cyan(" npm uninstall -g git-workflow"));
1462
+ console.log("");
1463
+ console.log(colors.yellow(" # \u7136\u540E\u5B89\u88C5\u65B0\u7248\u672C:"));
1464
+ console.log(colors.cyan(` npm install -g ${packageName}`));
1465
+ console.log("");
1466
+ }
1467
+ }
1468
+ function readCache() {
1469
+ try {
1470
+ const fs = __require("fs");
1471
+ const os = __require("os");
1472
+ const path = __require("path");
1473
+ const cacheFile = path.join(os.homedir(), CACHE_FILE);
1474
+ if (!fs.existsSync(cacheFile)) {
1475
+ return null;
1476
+ }
1477
+ const content = fs.readFileSync(cacheFile, "utf-8");
1478
+ return JSON.parse(content);
1479
+ } catch {
1480
+ return null;
1481
+ }
1482
+ }
1483
+ function writeCache(cache) {
1484
+ try {
1485
+ const fs = __require("fs");
1486
+ const os = __require("os");
1487
+ const path = __require("path");
1488
+ const cacheFile = path.join(os.homedir(), CACHE_FILE);
1489
+ fs.writeFileSync(cacheFile, JSON.stringify(cache), "utf-8");
1490
+ } catch {
1491
+ }
1492
+ }
1493
+
1494
+ // src/index.ts
1495
+ process.on("uncaughtException", (err) => {
1496
+ if (err instanceof ExitPromptError) {
1497
+ process.exit(0);
1498
+ }
1499
+ console.error(err);
1500
+ process.exit(1);
1501
+ });
1502
+ var version = true ? "0.2.2" : (await null).default.version;
1503
+ async function mainMenu() {
1504
+ checkForUpdates(version, "@zjex/git-workflow").catch(() => {
1505
+ });
1506
+ console.log(
1507
+ colors.green(`
87
1508
  \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
88
1509
  \u255A\u2550\u2550\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u255A\u2588\u2588\u2557\u2588\u2588\u2554\u255D
89
1510
  \u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u255A\u2588\u2588\u2588\u2554\u255D
90
1511
  \u2588\u2588\u2588\u2554\u255D \u2588\u2588 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2588\u2588\u2557
91
1512
  \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2554\u255D \u2588\u2588\u2557
92
1513
  \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D
93
- `)),console.log(D.dim(` git-workflow v${He}
94
- `)),await vu({message:"\u9009\u62E9\u64CD\u4F5C:",choices:[{name:`[1] \u2728 \u521B\u5EFA feature \u5206\u652F ${D.dim("gw f")}`,value:"feature"},{name:`[2] \u{1F41B} \u521B\u5EFA hotfix \u5206\u652F ${D.dim("gw h")}`,value:"hotfix"},{name:`[3] \u{1F5D1}\uFE0F \u5220\u9664\u5206\u652F ${D.dim("gw d")}`,value:"delete"},{name:`[4] \u{1F4DD} \u63D0\u4EA4\u4EE3\u7801 ${D.dim("gw c")}`,value:"commit"},{name:`[5] \u{1F3F7}\uFE0F \u521B\u5EFA tag ${D.dim("gw t")}`,value:"tag"},{name:`[6] \u{1F4CB} \u5217\u51FA tags ${D.dim("gw ts")}`,value:"tags"},{name:`[7] \u{1F4E6} \u53D1\u5E03\u7248\u672C ${D.dim("gw r")}`,value:"release"},{name:`[8] \u{1F4BE} \u7BA1\u7406 stash ${D.dim("gw s")}`,value:"stash"},{name:`[9] \u2699\uFE0F \u521D\u59CB\u5316\u914D\u7F6E ${D.dim("gw init")}`,value:"init"},{name:"[0] \u2753 \u5E2E\u52A9",value:"help"},{name:"[q] \u9000\u51FA",value:"exit"}],loop:!1,theme:h})){case"feature":k(),await X("feature");break;case"hotfix":k(),await X("hotfix");break;case"delete":k(),await Te();break;case"tag":k(),await Ie();break;case"tags":k(),await Pe();break;case"commit":k(),await We();break;case"release":await Me();break;case"stash":k(),await ne();break;case"init":await Oe();break;case"help":console.log(Ve());break;case"exit":break}}var L=$u("gw");L.command("","\u663E\u793A\u4EA4\u4E92\u5F0F\u83DC\u5355").action(()=>Su());L.command("feature","\u521B\u5EFA feature \u5206\u652F").alias("feat").alias("f").option("--base <branch>","\u6307\u5B9A\u57FA\u7840\u5206\u652F").action(e=>(k(),X("feature",e.base)));L.command("hotfix","\u521B\u5EFA hotfix \u5206\u652F").alias("fix").alias("h").option("--base <branch>","\u6307\u5B9A\u57FA\u7840\u5206\u652F").action(e=>(k(),X("hotfix",e.base)));L.command("delete [branch]","\u5220\u9664\u672C\u5730/\u8FDC\u7A0B\u5206\u652F").alias("del").alias("d").action(e=>(k(),Te(e)));L.command("tags [prefix]","\u5217\u51FA\u6240\u6709 tag\uFF0C\u53EF\u6309\u524D\u7F00\u8FC7\u6EE4").alias("ts").action(e=>(k(),Pe(e)));L.command("tag [prefix]","\u4EA4\u4E92\u5F0F\u9009\u62E9\u7248\u672C\u7C7B\u578B\u5E76\u521B\u5EFA tag").alias("t").action(e=>(k(),Ie(e)));L.command("release","\u4EA4\u4E92\u5F0F\u9009\u62E9\u7248\u672C\u53F7\u5E76\u66F4\u65B0 package.json").alias("r").action(()=>Me());L.command("init","\u521D\u59CB\u5316\u914D\u7F6E\u6587\u4EF6 .gwrc.json").action(()=>Oe());L.command("stash","\u4EA4\u4E92\u5F0F\u7BA1\u7406 stash").alias("s").alias("st").action(()=>(k(),ne()));L.command("commit","\u4EA4\u4E92\u5F0F\u63D0\u4EA4 (Conventional Commits + Gitmoji)").alias("c").alias("cm").action(()=>(k(),We()));L.help(e=>{e.push({body:Ve()})});L.version(He);L.parse();
1514
+ `)
1515
+ );
1516
+ console.log(colors.dim(` git-workflow v${version}
1517
+ `));
1518
+ const action = await select8({
1519
+ message: "\u9009\u62E9\u64CD\u4F5C:",
1520
+ choices: [
1521
+ {
1522
+ name: `[1] \u2728 \u521B\u5EFA feature \u5206\u652F ${colors.dim("gw f")}`,
1523
+ value: "feature"
1524
+ },
1525
+ {
1526
+ name: `[2] \u{1F41B} \u521B\u5EFA hotfix \u5206\u652F ${colors.dim("gw h")}`,
1527
+ value: "hotfix"
1528
+ },
1529
+ {
1530
+ name: `[3] \u{1F5D1}\uFE0F \u5220\u9664\u5206\u652F ${colors.dim("gw d")}`,
1531
+ value: "delete"
1532
+ },
1533
+ {
1534
+ name: `[4] \u{1F4DD} \u63D0\u4EA4\u4EE3\u7801 ${colors.dim("gw c")}`,
1535
+ value: "commit"
1536
+ },
1537
+ {
1538
+ name: `[5] \u{1F3F7}\uFE0F \u521B\u5EFA tag ${colors.dim("gw t")}`,
1539
+ value: "tag"
1540
+ },
1541
+ {
1542
+ name: `[6] \u{1F4CB} \u5217\u51FA tags ${colors.dim("gw ts")}`,
1543
+ value: "tags"
1544
+ },
1545
+ {
1546
+ name: `[7] \u{1F4E6} \u53D1\u5E03\u7248\u672C ${colors.dim("gw r")}`,
1547
+ value: "release"
1548
+ },
1549
+ {
1550
+ name: `[8] \u{1F4BE} \u7BA1\u7406 stash ${colors.dim("gw s")}`,
1551
+ value: "stash"
1552
+ },
1553
+ {
1554
+ name: `[9] \u2699\uFE0F \u521D\u59CB\u5316\u914D\u7F6E ${colors.dim("gw init")}`,
1555
+ value: "init"
1556
+ },
1557
+ { name: "[0] \u2753 \u5E2E\u52A9", value: "help" },
1558
+ { name: "[q] \u9000\u51FA", value: "exit" }
1559
+ ],
1560
+ loop: false,
1561
+ theme
1562
+ });
1563
+ switch (action) {
1564
+ case "feature":
1565
+ checkGitRepo();
1566
+ await createBranch("feature");
1567
+ break;
1568
+ case "hotfix":
1569
+ checkGitRepo();
1570
+ await createBranch("hotfix");
1571
+ break;
1572
+ case "delete":
1573
+ checkGitRepo();
1574
+ await deleteBranch();
1575
+ break;
1576
+ case "tag":
1577
+ checkGitRepo();
1578
+ await createTag();
1579
+ break;
1580
+ case "tags":
1581
+ checkGitRepo();
1582
+ await listTags();
1583
+ break;
1584
+ case "commit":
1585
+ checkGitRepo();
1586
+ await commit();
1587
+ break;
1588
+ case "release":
1589
+ await release();
1590
+ break;
1591
+ case "stash":
1592
+ checkGitRepo();
1593
+ await stash();
1594
+ break;
1595
+ case "init":
1596
+ await init();
1597
+ break;
1598
+ case "help":
1599
+ console.log(showHelp());
1600
+ break;
1601
+ case "exit":
1602
+ break;
1603
+ }
1604
+ }
1605
+ var cli = cac("gw");
1606
+ cli.command("", "\u663E\u793A\u4EA4\u4E92\u5F0F\u83DC\u5355").action(() => {
1607
+ return mainMenu();
1608
+ });
1609
+ cli.command("feature", "\u521B\u5EFA feature \u5206\u652F").alias("feat").alias("f").option("--base <branch>", "\u6307\u5B9A\u57FA\u7840\u5206\u652F").action((options) => {
1610
+ checkGitRepo();
1611
+ return createBranch("feature", options.base);
1612
+ });
1613
+ cli.command("hotfix", "\u521B\u5EFA hotfix \u5206\u652F").alias("fix").alias("h").option("--base <branch>", "\u6307\u5B9A\u57FA\u7840\u5206\u652F").action((options) => {
1614
+ checkGitRepo();
1615
+ return createBranch("hotfix", options.base);
1616
+ });
1617
+ cli.command("delete [branch]", "\u5220\u9664\u672C\u5730/\u8FDC\u7A0B\u5206\u652F").alias("del").alias("d").action((branch) => {
1618
+ checkGitRepo();
1619
+ return deleteBranch(branch);
1620
+ });
1621
+ cli.command("tags [prefix]", "\u5217\u51FA\u6240\u6709 tag\uFF0C\u53EF\u6309\u524D\u7F00\u8FC7\u6EE4").alias("ts").action((prefix) => {
1622
+ checkGitRepo();
1623
+ return listTags(prefix);
1624
+ });
1625
+ cli.command("tag [prefix]", "\u4EA4\u4E92\u5F0F\u9009\u62E9\u7248\u672C\u7C7B\u578B\u5E76\u521B\u5EFA tag").alias("t").action((prefix) => {
1626
+ checkGitRepo();
1627
+ return createTag(prefix);
1628
+ });
1629
+ cli.command("release", "\u4EA4\u4E92\u5F0F\u9009\u62E9\u7248\u672C\u53F7\u5E76\u66F4\u65B0 package.json").alias("r").action(() => {
1630
+ return release();
1631
+ });
1632
+ cli.command("init", "\u521D\u59CB\u5316\u914D\u7F6E\u6587\u4EF6 .gwrc.json").action(() => {
1633
+ return init();
1634
+ });
1635
+ cli.command("stash", "\u4EA4\u4E92\u5F0F\u7BA1\u7406 stash").alias("s").alias("st").action(() => {
1636
+ checkGitRepo();
1637
+ return stash();
1638
+ });
1639
+ cli.command("commit", "\u4EA4\u4E92\u5F0F\u63D0\u4EA4 (Conventional Commits + Gitmoji)").alias("c").alias("cm").action(() => {
1640
+ checkGitRepo();
1641
+ return commit();
1642
+ });
1643
+ cli.help((sections) => {
1644
+ sections.push({
1645
+ body: showHelp()
1646
+ });
1647
+ });
1648
+ cli.version(version);
1649
+ cli.parse();