Comparing version 3.5.0 to 3.5.1
#!/usr/bin/env node | ||
"use strict";var c=require("ansi-colors"),E=require("commander"),se=require("enquirer"),_=require("child_process"),mt=require("module"),re=require("path"),oe=require("fs"),ne=require("os"),ie=require("lilconfig"),ae=require("yaml");function v(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var ce=v(se),w=v(re),$=v(oe),ue=v(ne),le=v(ae);const k=72,de=e=>e.replace(/"/g,'\\"').replace(/`/g,"\\`"),pe=(e,{disableEmoji:t,breakingChangeEmoji:s})=>e?` | ||
"use strict";var c=require("ansi-colors"),E=require("commander"),se=require("enquirer"),re=require("lilconfig"),oe=require("yaml"),_=require("child_process"),mt=require("module"),ne=require("path"),ie=require("fs"),ae=require("os");function v(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var ce=v(se),ue=v(oe),w=v(ne),$=v(ie),le=v(ae);const de={chore:{description:"Other changes that don't modify src or test files",emoji:"\u{1F916}"},ci:{description:"Changes to CI configuration files and scripts",emoji:"\u{1F477}"},docs:{description:"Add or update documentation",emoji:"\u{1F4DD}"},feat:{description:"A new feature",emoji:"\u2728"},fix:{description:"Fix a bug",emoji:"\u{1F41B}"},perf:{description:"Improve performance",emoji:"\u26A1\uFE0F"},refactor:{description:"Refactor code",emoji:"\u267B\uFE0F"},release:{description:"Deploy stuff",emoji:"\u{1F680}"},revert:{description:"Revert changes",emoji:"\u23EA"},style:{description:"Improve structure / format of the code",emoji:"\u{1F3A8}"},test:{description:"Add or update tests",emoji:"\u2705"}},pe={body:"",breaking:"",issues:"",scope:"",subject:"",type:""},M=["type","scope","subject","body","breaking","issues"],k={breakingChangeEmoji:"\u{1F4A5}",closedIssueEmoji:"\u{1F3C1}",details:de,disableEmoji:!1,headerMaxLength:64,headerMinLength:3,issuesHint:"#123",issuesPrefix:"closes",questions:M,scopes:[],types:["chore","docs","feat","fix","refactor","test","style","ci","perf","revert","release"],useCommitlintConfig:!1},h=e=>`skip "${e}" question and provide your own "${e}" message`,u={description:"interactive conventional commits cli",examples:` | ||
$ gitzy | ||
$ gitzy -p -a | ||
$ gitzy -m "added cool new feature" -t "feat" -s "amazing" | ||
$ gitzy -lD --no-emoji | ||
`,flags:{get body(){return h("body")},get breaking(){return h("breaking")},commitlint:"leverage commitlint's configuration",get dryRun(){return"displays git message but does not commit"},get issues(){return h("issues")},noEmoji:"disable all emojis",passthrough:'subsequent command line args passed through to "git"',retry:"retries previous commit, skips all prompts",get scope(){return h("scope")},skip:"skip questions",get subject(){return h("subject")},get type(){return h("type")}}},me={get skip(){const e=new E.Option("-S, --skip <questions...>",u.flags.skip);return e.variadic=!0,e.choices(M),e}},C=(e,t)=>ue.default.parse(t),R=e=>[`.${e}rc`,`.${e}rc.json`,`.${e}rc.yaml`,`.${e}rc.yml`,`.${e}rc.js`,`.${e}rc.cjs`,`${e}.config.js`,`${e}.config.cjs`],ge=e=>["package.json",...R(e),...R(e).map(t=>`.config/${t}`)],T=async e=>re.lilconfig(e,{searchPlaces:ge(e),loaders:{".yaml":C,".yml":C,noExt:C}}).search(process.cwd()),N=["close","closes","closed","fix","fixes","fixed","resolve","resolves","resolved"],l={breakingChangeEmoji:"breakingChangeEmoji must be a string",closedIssueEmoji:"closedIssueEmoji must be a string",details:'details must look like "{ description: "A new feature", emoji: "\u2728" }"',disableEmoji:"disableEmoji must be a boolean",headerMaxLength:"headerMaxLength must be a number",headerMinLength:"headerMinLength must be a number",issuesHint:"issuesHint must be a string",issuesPrefix:`issuesPrefix must be one of ${N.join(", ")}`,questions:"questions must be an array of strings",scopes:"scopes must be an array of strings",types:"types must be an array of strings",useCommitlintConfig:"useCommitlintConfig must be a boolean"},D=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),m=e=>typeof e=="string",H=e=>typeof e=="boolean",G=e=>typeof e=="number",O=e=>typeof e=="object",P=e=>Array.isArray(e)&&e.every(m),fe=e=>O(e)&&Object.values(e).every(t=>{const s=t;return O(s)&&D(s,"description")&&D(s,"emoji")&&Object.values(s).every(m)}),he=e=>m(e)&&N.includes(e),ye=e=>{const t=Object.keys(k);return Object.keys(e).some(s=>!t.includes(s))},be={breakingChangeEmoji:e=>m(e)||l.breakingChangeEmoji,closedIssueEmoji:e=>m(e)||l.closedIssueEmoji,details:e=>fe(e)||l.details,disableEmoji:e=>H(e)||l.disableEmoji,headerMaxLength:e=>G(e)||l.headerMaxLength,headerMinLength:e=>G(e)||l.headerMinLength,issuesHint:e=>m(e)||l.issuesHint,issuesPrefix:e=>he(e)||l.issuesPrefix,questions:e=>P(e)||l.questions,scopes:e=>P(e)||l.scopes,types:e=>P(e)||l.types,useCommitlintConfig:e=>H(e)||l.useCommitlintConfig},ve=e=>O(e)?e&&ye(e)?"unknown or additional properties detected":Object.entries(e).map(([t,s])=>be[t](s))[0]:"invalid configuration",V=async e=>{const t=await Promise.resolve(ve(e));if(m(t))throw new Error(t);return t},S=72,$e=e=>e.replace(/"/g,'\\"').replace(/`/g,"\\`"),je=(e,{disableEmoji:t,breakingChangeEmoji:s})=>e?` | ||
BREAKING CHANGE: ${t?"":`${s} `}${e}`:"",me=(e,{disableEmoji:t,closedIssueEmoji:s})=>e?` | ||
BREAKING CHANGE: ${t?"":`${s} `}${e}`:"",Ee=(e,{disableEmoji:t,closedIssueEmoji:s})=>e?` | ||
${t?"":`${s} `}Closes: ${e}`:"",ge=e=>e&&e!=="none"?`(${e})`:"",fe=(e,t=k)=>{const s=new RegExp(`(?![^\\n]{1,${t}}$)([^\\n]{1,${t}})\\s`,"g");return e.replace(s,`$1 | ||
`)},he=(e,t,s)=>{const o=!e.disableEmoji&&e.details[t.type].emoji&&s?`${e.details[t.type].emoji} `:"",n=ge(t.scope),a=`${t.type+n}: ${o}${t.subject}`,i=t.body.trim()?` | ||
${t?"":`${s} `}Closes: ${e}`:"",we=e=>e&&e!=="none"?`(${e})`:"",xe=(e,t=S)=>{const s=new RegExp(`(?![^\\n]{1,${t}}$)([^\\n]{1,${t}})\\s`,"g");return e.replace(s,`$1 | ||
`)},_e=(e,t,s)=>{const o=!e.disableEmoji&&e.details[t.type].emoji&&s?`${e.details[t.type].emoji} `:"",n=we(t.scope),a=`${t.type+n}: ${o}${t.subject}`,i=t.body.trim()?` | ||
${t.body}`:"",d=pe(t.breaking,e),b=me(t.issues,e),f=e.headerMaxLength>k?e.headerMaxLength:k;return de(fe(`${a}${i}${d}${b}`,f))},C=e=>c.blue(`\u276F ${e}`),O=e=>c.yellow(`\u276F ${e}`),P=e=>c.red(`\u276F ${e}`),m=e=>{console.log(e)},ye=(e,t=[],s=process.env)=>{_.spawn(e,t,{env:s,shell:!0,stdio:[0,1,2]}).on("close",o=>{o&&process.exit(o)})},be=e=>{m(C("Message...")),m(` | ||
${t.body}`:"",d=je(t.breaking,e),b=Ee(t.issues,e),f=e.headerMaxLength>S?e.headerMaxLength:S;return $e(xe(`${a}${i}${d}${b}`,f))},q=e=>c.blue(`\u276F ${e}`),I=e=>c.yellow(`\u276F ${e}`),L=e=>c.red(`\u276F ${e}`),g=e=>{console.log(e)},ke=(e,t=[],s=process.env)=>{_.spawn(e,t,{env:s,shell:!0,stdio:[0,1,2]}).on("close",o=>{o&&process.exit(o)})},Ce=e=>{g(q("Message...")),g(` | ||
${e} | ||
`)},ve=({config:e,answers:t},{passthrough:s=[],dryRun:r=!1,emoji:o=!0})=>{const n=he(e,t,o);r?be(n):ye("git",["commit","-m",`"${n}"`,...s])},$e=e=>Object.entries(e).reduce((t,[s,r])=>(r==null||(t[s]=r),t),{}),je=()=>new Promise((e,t)=>{_.exec("git --no-pager diff --cached --quiet --exit-code",s=>{s&&e(""),t(new Error(`No files staged | ||
${O('You can use "gitzy -p -a" to replicate git -am')}`))})}),Ee=()=>new Promise((e,t)=>{_.exec("git rev-parse --is-inside-work-tree",s=>{s&&t(new Error(`Not a git repository | ||
${O('You can try running "git init"')}`)),e("")})}),we=(e=[])=>!["--add","-a","--amend"].some(t=>e.includes(t)),M=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),xe=e=>{const t=e.split("").map(M).reduce((s,r)=>`${s}[^${r}]*${M(r)}`);return new RegExp(t)},_e=(e,t)=>xe(t).test(String(e)),ke=(e,t,s)=>e.filter(r=>_e(r[s],t)).sort(r=>r[s]===t?-1:1),R=(e,t,s)=>Promise.resolve(t?ke(e,t,s):e);var Ce=require;const T=()=>Ce(w.default.join(__dirname,"..","package.json")),Oe=e=>{try{return $.default.statSync(e)}catch(t){return null}},Pe=(e,t)=>{if(t.message.includes("null bytes"))throw new Error;if(!(["EEXIST","EISDIR","EPERM"].includes(t.code)&&w.default.dirname(e)!==e))throw new Error},Se=(e,t=!0)=>{const s=Oe(e);if(s){if(t&&!s.isDirectory())throw new Error(`Path exists and is not a directory: "${e}"`);return!0}return!1},qe=e=>{if(!Se(e))try{$.default.mkdirSync(e,{recursive:!0})}catch(t){Pe(e,t)}},Ie=e=>{try{$.default.unlinkSync(e)}catch(t){const s=t;if(s.code!=="ENOENT")throw new Error(s.message)}},Le=()=>`${ue.default.tmpdir}/gitzy/${w.default.basename(process.cwd())}-store.json`,x=Symbol("gitzy");class Ae{constructor(){this.readParseFile=()=>JSON.parse(String($.default.readFileSync(this.path))),this.tryLoad=()=>{try{return this[x]=this.readParseFile()}catch(t){const s=t,r=s.code==="EACCES",o=s.code==="ENOENT"||s.name==="SyntaxError";if(r)throw new Error("gitzy does not have permission to load this file");return o?(this[x]={},{}):{}}},this.json=()=>JSON.stringify(this.data,null,2),this.writeFile=()=>{qe(w.default.dirname(String(this.path))),$.default.writeFileSync(this.path,this.json(),{mode:384})},this.destroy=()=>{Ie(this.path)},this.clear=()=>{this.save({})},this.load=()=>this.data,this.path=Le()}get data(){var t;return(t=this[x])!=null?t:this.tryLoad()}save(t){this[x]=t,this.writeFile()}}const S=(e,t)=>le.default.parse(t),N=e=>[`.${e}rc`,`.${e}rc.json`,`.${e}rc.yaml`,`.${e}rc.yml`,`.${e}rc.js`,`.${e}rc.cjs`,`${e}.config.js`,`${e}.config.cjs`],ze=e=>["package.json",...N(e),...N(e).map(t=>`.config/${t}`)],D=async e=>ie.lilconfig(e,{searchPlaces:ze(e),loaders:{".yaml":S,".yml":S,noExt:S}}).search(process.cwd()),H=["close","closes","closed","fix","fixes","fixed","resolve","resolves","resolved"],l={breakingChangeEmoji:"breakingChangeEmoji must be a string",closedIssueEmoji:"closedIssueEmoji must be a string",details:'details must look like "{ description: "A new feature", emoji: "\u2728" }"',disableEmoji:"disableEmoji must be a boolean",headerMaxLength:"headerMaxLength must be a number",headerMinLength:"headerMinLength must be a number",issuesHint:"issuesHint must be a string",issuesPrefix:`issuesPrefix must be one of ${H.join(", ")}`,questions:"questions must be an array of strings",scopes:"scopes must be an array of strings",types:"types must be an array of strings",useCommitlintConfig:"useCommitlintConfig must be a boolean"},Fe={chore:{description:"Other changes that don't modify src or test files",emoji:"\u{1F916}"},ci:{description:"Changes to CI configuration files and scripts",emoji:"\u{1F477}"},docs:{description:"Add or update documentation",emoji:"\u{1F4DD}"},feat:{description:"A new feature",emoji:"\u2728"},fix:{description:"Fix a bug",emoji:"\u{1F41B}"},perf:{description:"Improve performance",emoji:"\u26A1\uFE0F"},refactor:{description:"Refactor code",emoji:"\u267B\uFE0F"},release:{description:"Deploy stuff",emoji:"\u{1F680}"},revert:{description:"Revert changes",emoji:"\u23EA"},style:{description:"Improve structure / format of the code",emoji:"\u{1F3A8}"},test:{description:"Add or update tests",emoji:"\u2705"}},Me={body:"",breaking:"",issues:"",scope:"",subject:"",type:""},G=["type","scope","subject","body","breaking","issues"],q={breakingChangeEmoji:"\u{1F4A5}",closedIssueEmoji:"\u{1F3C1}",details:Fe,disableEmoji:!1,headerMaxLength:64,headerMinLength:3,issuesHint:"#123",issuesPrefix:"closes",questions:G,scopes:[],types:["chore","docs","feat","fix","refactor","test","style","ci","perf","revert","release"],useCommitlintConfig:!1},V=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),g=e=>typeof e=="string",B=e=>typeof e=="boolean",U=e=>typeof e=="number",I=e=>typeof e=="object",L=e=>Array.isArray(e)&&e.every(g),Re=e=>I(e)&&Object.values(e).every(t=>{const s=t;return I(s)&&V(s,"description")&&V(s,"emoji")&&Object.values(s).every(g)}),Te=e=>g(e)&&H.includes(e),Ne=e=>{const t=Object.keys(q);return Object.keys(e).some(s=>!t.includes(s))},De={breakingChangeEmoji:e=>g(e)||l.breakingChangeEmoji,closedIssueEmoji:e=>g(e)||l.closedIssueEmoji,details:e=>Re(e)||l.details,disableEmoji:e=>B(e)||l.disableEmoji,headerMaxLength:e=>U(e)||l.headerMaxLength,headerMinLength:e=>U(e)||l.headerMinLength,issuesHint:e=>g(e)||l.issuesHint,issuesPrefix:e=>Te(e)||l.issuesPrefix,questions:e=>L(e)||l.questions,scopes:e=>L(e)||l.scopes,types:e=>L(e)||l.types,useCommitlintConfig:e=>B(e)||l.useCommitlintConfig},He=e=>I(e)?e&&Ne(e)?"unknown or additional properties detected":Object.entries(e).map(([t,s])=>De[t](s))[0]:"invalid configuration",K=async e=>{const t=await Promise.resolve(He(e));if(g(t))throw new Error(t);return t},Ge=e=>{var t,s,r,o,n,a,i,d;return $e({headerMaxLength:(s=(t=e.rules)==null?void 0:t["header-max-length"])==null?void 0:s[2],headerMinLength:(o=(r=e.rules)==null?void 0:r["header-min-length"])==null?void 0:o[2],scopes:(a=(n=e.rules)==null?void 0:n["scope-enum"])==null?void 0:a[2],types:(d=(i=e.rules)==null?void 0:i["type-enum"])==null?void 0:d[2]})},Y=async()=>{const e=await D("commitlint");if(e){const t=Ge(e.config);return await K(t)?t:null}return null};var Ve=Object.defineProperty,J=Object.getOwnPropertySymbols,Be=Object.prototype.hasOwnProperty,Ue=Object.prototype.propertyIsEnumerable,Q=(e,t,s)=>t in e?Ve(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,A=(e,t)=>{for(var s in t||(t={}))Be.call(t,s)&&Q(e,s,t[s]);if(J)for(var s of J(t))Ue.call(t,s)&&Q(e,s,t[s]);return e};const Ke=async e=>{const t=await D("gitzy");if(e&&!t)return Y();if(t&&await K(t.config)){if(t.config.useCommitlintConfig||e){const r=await Y();return A(A({},t.config),r)}return A({},t.config)}return null},h=e=>`skip "${e}" question and provide your own "${e}" message`,u={description:"interactive conventional commits cli",examples:` | ||
$ gitzy | ||
$ gitzy -p -a | ||
$ gitzy -m "added cool new feature" -t "feat" -s "amazing" | ||
$ gitzy -lD --no-emoji | ||
`,flags:{get body(){return h("body")},get breaking(){return h("breaking")},commitlint:"leverage commitlint's configuration",get dryRun(){return"displays git message but does not commit"},get issues(){return h("issues")},noEmoji:"disable all emojis",passthrough:'subsequent command line args passed through to "git"',retry:"retries previous commit, skips all prompts",get scope(){return h("scope")},skip:"skip questions",get subject(){return h("subject")},get type(){return h("type")}}},Ye=c.red("BREAKING CHANGE:"),Je=e=>c.reset(`${e}:`),p={body:{hint:"...supports multi line, press enter to go to next line",message:`Add a longer description | ||
`)},Oe=({config:e,answers:t},{passthrough:s=[],dryRun:r=!1,emoji:o=!0})=>{const n=_e(e,t,o);r?Ce(n):ke("git",["commit","-m",`"${n}"`,...s])},Pe=e=>Object.entries(e).reduce((t,[s,r])=>(r==null||(t[s]=r),t),{}),Se=()=>new Promise((e,t)=>{_.exec("git --no-pager diff --cached --quiet --exit-code",s=>{s&&e(""),t(new Error(`No files staged | ||
${I('You can use "gitzy -p -a" to replicate git -am')}`))})}),qe=()=>new Promise((e,t)=>{_.exec("git rev-parse --is-inside-work-tree",s=>{s&&t(new Error(`Not a git repository | ||
${I('You can try running "git init"')}`)),e("")})}),Ie=(e=[])=>!["--add","-a","--amend"].some(t=>e.includes(t)),B=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Le=e=>{const t=e.split("").map(B).reduce((s,r)=>`${s}[^${r}]*${B(r)}`);return new RegExp(t)},Ae=(e,t)=>Le(t).test(String(e)),ze=(e,t,s)=>e.filter(r=>Ae(r[s],t)).sort(r=>r[s]===t?-1:1),U=(e,t,s)=>Promise.resolve(t?ze(e,t,s):e);var Fe=require;const K=()=>Fe(w.default.join(__dirname,"..","package.json")),Me=e=>{try{return $.default.statSync(e)}catch(t){return null}},Re=(e,t)=>{if(t.message.includes("null bytes"))throw new Error;if(!(["EEXIST","EISDIR","EPERM"].includes(t.code)&&w.default.dirname(e)!==e))throw new Error},Te=(e,t=!0)=>{const s=Me(e);if(s){if(t&&!s.isDirectory())throw new Error(`Path exists and is not a directory: "${e}"`);return!0}return!1},Ne=e=>{if(!Te(e))try{$.default.mkdirSync(e,{recursive:!0})}catch(t){Re(e,t)}},De=e=>{try{$.default.unlinkSync(e)}catch(t){const s=t;if(s.code!=="ENOENT")throw new Error(s.message)}},He=()=>`${le.default.tmpdir}/gitzy/${w.default.basename(process.cwd())}-store.json`,x=Symbol("gitzy");class Ge{constructor(){this.readParseFile=()=>JSON.parse(String($.default.readFileSync(this.path))),this.tryLoad=()=>{try{return this[x]=this.readParseFile()}catch(t){const s=t,r=s.code==="EACCES",o=s.code==="ENOENT"||s.name==="SyntaxError";if(r)throw new Error("gitzy does not have permission to load this file");return o?(this[x]={},{}):{}}},this.json=()=>JSON.stringify(this.data,null,2),this.writeFile=()=>{Ne(w.default.dirname(String(this.path))),$.default.writeFileSync(this.path,this.json(),{mode:384})},this.destroy=()=>{De(this.path)},this.clear=()=>{this.save({})},this.load=()=>this.data,this.path=He()}get data(){var t;return(t=this[x])!=null?t:this.tryLoad()}save(t){this[x]=t,this.writeFile()}}const Ve=e=>{var t,s,r,o,n,a,i,d;return Pe({headerMaxLength:(s=(t=e.rules)==null?void 0:t["header-max-length"])==null?void 0:s[2],headerMinLength:(o=(r=e.rules)==null?void 0:r["header-min-length"])==null?void 0:o[2],scopes:(a=(n=e.rules)==null?void 0:n["scope-enum"])==null?void 0:a[2],types:(d=(i=e.rules)==null?void 0:i["type-enum"])==null?void 0:d[2]})},Y=async()=>{const e=await T("commitlint");if(e){const t=Ve(e.config);return await V(t)?t:null}return null};var Be=Object.defineProperty,J=Object.getOwnPropertySymbols,Ue=Object.prototype.hasOwnProperty,Ke=Object.prototype.propertyIsEnumerable,Q=(e,t,s)=>t in e?Be(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,A=(e,t)=>{for(var s in t||(t={}))Ue.call(t,s)&&Q(e,s,t[s]);if(J)for(var s of J(t))Ke.call(t,s)&&Q(e,s,t[s]);return e};const Ye=async e=>{const t=await T("gitzy");if(e&&!t)return Y();if(t&&await V(t.config)){if(t.config.useCommitlintConfig||e){const r=await Y();return A(A({},t.config),r)}return A({},t.config)}return null},Je=c.red("BREAKING CHANGE:"),Qe=e=>c.reset(`${e}:`),p={body:{hint:"...supports multi line, press enter to go to next line",message:`Add a longer description | ||
`},breaking:{hint:c.dim("...skip when none"),message:`${c.bold("Add any breaking changes")} | ||
${Ye}`},scope:{hint:c.dim("...type or use arrow keys"),message:"Choose the scope"},subject:{message:"Add a short description"},type:{hint:c.dim("...type or use arrow keys"),message:"Choose the type"}},Qe=e=>`${c.bold("Add issues this commit closes")} | ||
${Je(e)}`,X={minTitleLength:e=>`The subject must have at least ${e} characters`,maxTitleLength:e=>`The subject must be less than ${e} characters`},Xe=()=>({format:e=>e.trim(),hint:p.body.hint,message:p.body.message,multiline:!0,name:"body",type:"text"}),We=()=>({hint:p.breaking.hint,message:p.breaking.message,name:"breaking",type:"text"}),Ze=({config:{issuesHint:e,issuesPrefix:t}})=>({hint:e,message:Qe(t),name:"issues",type:"text"}),et=({config:{scopes:e}})=>{const t=e.map(s=>({indent:" ",title:s,value:s}));return e.length>0?{choices:t,hint:p.scope.hint,limit:10,message:p.scope.message,name:"scope",suggest:s=>R(t,s,"title"),type:"autocomplete"}:null},W=e=>{const t=e!=null&&e.scope&&e.scope!=="none"?`(${e.scope})`:"";return e!=null&&e.type?`${e.type}${t}: `:""},tt=({config:{headerMinLength:e,headerMaxLength:t,disableEmoji:s}})=>{const r=X.minTitleLength(e),o=X.maxTitleLength(t),{subject:{message:n}}=p,a=s?0:3;return{message:i=>{const d=()=>{const b=W(i==null?void 0:i.answers),f=i?i.input.length:0,z=t-f-b.length-a,F=z/t*100,j=`${z}/${t}`;return f<e?c.red(j):F>25?c.green(j):F<0?c.red(j):c.yellow(j)};return c.bold(`${n}(${d()})`)},name:"subject",type:"input",validate:(i,d)=>{const b=W(d==null?void 0:d.answers),f=i.length+b.length+a>t;return i.length<e?r:f?o:!0}}},st=({details:e,disableEmoji:t},s,r)=>{const{[s]:{description:o,emoji:n}}=e,a=n&&!t&&(r==null?void 0:r.emoji),i=a?`${n} `:"";return{title:`${s==="refactor"&&a?`${i} `:i}${s}:`,hint:o.toLowerCase(),indent:" ",value:s}},rt=({config:e,flags:t})=>{const s=e.types.map(r=>st(e,r,t));return{choices:s,hint:p.type.hint,limit:10,message:p.type.message,name:"type",suggest:r=>R(s,r,"title"),type:"autocomplete"}},ot={body:Xe,breaking:We,issues:Ze,scope:et,subject:tt,type:rt},nt=e=>e!=null,it=({config:e,answers:t},s)=>e.questions.filter(r=>{var o;return q.questions.includes(r)&&!((o=s.skip)!=null&&o.includes(r))}).map(r=>ot[r]({config:e,answers:t,flags:s})).filter(nt),at={get skip(){const e=new E.Option("-S, --skip <questions...>",u.flags.skip);return e.variadic=!0,e.choices(G),e}};var ct=Object.defineProperty,Z=Object.getOwnPropertySymbols,ut=Object.prototype.hasOwnProperty,lt=Object.prototype.propertyIsEnumerable,ee=(e,t,s)=>t in e?ct(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,y=(e,t)=>{for(var s in t||(t={}))ut.call(t,s)&&ee(e,s,t[s]);if(Z)for(var s of Z(t))lt.call(t,s)&&ee(e,s,t[s]);return e};const dt={autofill:!0,cancel:()=>null,styles:{submitted:c.cyan,danger:c.red}},pt=async()=>{const e={config:q,answers:Me},t=new Ae,s=async({passthrough:o,commitlint:n,dryRun:a})=>{const i=await Ke(n);i&&(e.config=y(y({},e.config),i)),we(o)&&!a&&(await Ee(),await je())},r=async o=>{const n=new ce.default(dt,o),a=it(e,o);return n.prompt(a)};E.program.configureOutput({writeErr:o=>process.stdout.write(o.replace("error: ","")),outputError:(o,n)=>{n(` | ||
${P(o)} | ||
`)}}).version(T().version,"-v, --version").description(u.description).option("-d, --body <body>",u.flags.body).option("-b, --breaking <breaking>",u.flags.breaking).option("-D, --dry-run",u.flags.dryRun).option("-i, --issues <body>",u.flags.issues).option("-p, --passthrough <flags...>",u.flags.passthrough).option("-s, --scope <scope>",u.flags.scope).option("-m, --subject <message>",u.flags.subject).option("-t, --type <type>",u.flags.type).option("-l, --commitlint",u.flags.commitlint).option("-r, --retry",u.flags.retry).option("--no-emoji",u.flags.noEmoji).addOption(at.skip).addHelpText("after",` | ||
${Je}`},scope:{hint:c.dim("...type or use arrow keys"),message:"Choose the scope"},subject:{message:"Add a short description"},type:{hint:c.dim("...type or use arrow keys"),message:"Choose the type"}},Xe=e=>`${c.bold("Add issues this commit closes")} | ||
${Qe(e)}`,X={minTitleLength:e=>`The subject must have at least ${e} characters`,maxTitleLength:e=>`The subject must be less than ${e} characters`},We=()=>({format:e=>e.trim(),hint:p.body.hint,message:p.body.message,multiline:!0,name:"body",type:"text"}),Ze=()=>({hint:p.breaking.hint,message:p.breaking.message,name:"breaking",type:"text"}),et=({config:{issuesHint:e,issuesPrefix:t}})=>({hint:e,message:Xe(t),name:"issues",type:"text"}),tt=({config:{scopes:e}})=>{const t=e.map(s=>({indent:" ",title:s,value:s}));return e.length>0?{choices:t,hint:p.scope.hint,limit:10,message:p.scope.message,name:"scope",suggest:s=>U(t,s,"title"),type:"autocomplete"}:null},W=e=>{const t=e!=null&&e.scope&&e.scope!=="none"?`(${e.scope})`:"";return e!=null&&e.type?`${e.type}${t}: `:""},st=({config:{headerMinLength:e,headerMaxLength:t,disableEmoji:s}})=>{const r=X.minTitleLength(e),o=X.maxTitleLength(t),{subject:{message:n}}=p,a=s?0:3;return{message:i=>{const d=()=>{const b=W(i==null?void 0:i.answers),f=i?i.input.length:0,z=t-f-b.length-a,F=z/t*100,j=`${z}/${t}`;return f<e?c.red(j):F>25?c.green(j):F<0?c.red(j):c.yellow(j)};return c.bold(`${n}(${d()})`)},name:"subject",type:"input",validate:(i,d)=>{const b=W(d==null?void 0:d.answers),f=i.length+b.length+a>t;return i.length<e?r:f?o:!0}}},rt=({details:e,disableEmoji:t},s,r)=>{const{[s]:{description:o,emoji:n}}=e,a=n&&!t&&(r==null?void 0:r.emoji),i=a?`${n} `:"";return{title:`${s==="refactor"&&a?`${i} `:i}${s}:`,hint:o.toLowerCase(),indent:" ",value:s}},ot=({config:e,flags:t})=>{const s=e.types.map(r=>rt(e,r,t));return{choices:s,hint:p.type.hint,limit:10,message:p.type.message,name:"type",suggest:r=>U(s,r,"title"),type:"autocomplete"}},nt={body:We,breaking:Ze,issues:et,scope:tt,subject:st,type:ot},it=e=>e!=null,at=({config:e,answers:t},s)=>e.questions.filter(r=>{var o;return k.questions.includes(r)&&!((o=s.skip)!=null&&o.includes(r))}).map(r=>nt[r]({config:e,answers:t,flags:s})).filter(it);var ct=Object.defineProperty,Z=Object.getOwnPropertySymbols,ut=Object.prototype.hasOwnProperty,lt=Object.prototype.propertyIsEnumerable,ee=(e,t,s)=>t in e?ct(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,y=(e,t)=>{for(var s in t||(t={}))ut.call(t,s)&&ee(e,s,t[s]);if(Z)for(var s of Z(t))lt.call(t,s)&&ee(e,s,t[s]);return e};const dt={autofill:!0,cancel:()=>null,styles:{submitted:c.cyan,danger:c.red}},pt=async()=>{const e={config:k,answers:pe},t=new Ge,s=async({passthrough:o,commitlint:n,dryRun:a})=>{const i=await Ye(n);i&&(e.config=y(y({},e.config),i)),Ie(o)&&!a&&(await qe(),await Se())},r=async o=>{const n=new ce.default(dt,o),a=at(e,o);return n.prompt(a)};E.program.configureOutput({writeErr:o=>process.stdout.write(o.replace("error: ","")),outputError:(o,n)=>{n(` | ||
${L(o)} | ||
`)}}).version(K().version,"-v, --version").description(u.description).option("-d, --body <body>",u.flags.body).option("-b, --breaking <breaking>",u.flags.breaking).option("-D, --dry-run",u.flags.dryRun).option("-i, --issues <body>",u.flags.issues).option("-p, --passthrough <flags...>",u.flags.passthrough).option("-s, --scope <scope>",u.flags.scope).option("-m, --subject <message>",u.flags.subject).option("-t, --type <type>",u.flags.type).option("-l, --commitlint",u.flags.commitlint).option("-r, --retry",u.flags.retry).option("--no-emoji",u.flags.noEmoji).addOption(me.skip).addHelpText("after",` | ||
Examples: | ||
${u.examples} | ||
`).name("gitzy").action(async()=>{const o=E.program.opts();o.dryRun&&m(C("running in dry mode..."));try{await s(o);const n=o.retry?t.load():{};o.retry&&!Object.keys(n).length&&m(O("there is no previous gitzy commit to retry..."));const a=await r(y(y({},o),n));t.save(a),e.answers=y(y({},e.answers),a)}catch(n){m(` | ||
${P(n.message)} | ||
`),process.exit(1)}ve(e,o)}),await E.program.parseAsync(process.argv)},te=parseInt(process.versions.node,10);te<10&&(m(` | ||
${P(`node version ${te} is not supported`)}`),m(`${C(`please use ${T().engines.node}`)} | ||
`).name("gitzy").action(async()=>{const o=E.program.opts();o.dryRun&&g(q("running in dry mode..."));try{await s(o);const n=o.retry?t.load():{};o.retry&&!Object.keys(n).length&&g(I("there is no previous gitzy commit to retry..."));const a=await r(y(y({},o),n));t.save(a),e.answers=y(y({},e.answers),a)}catch(n){g(` | ||
${L(n.message)} | ||
`),process.exit(1)}Oe(e,o)}),await E.program.parseAsync(process.argv)},te=parseInt(process.versions.node,10);te<10&&(g(` | ||
${L(`node version ${te} is not supported`)}`),g(`${q(`please use ${K().engines.node}`)} | ||
`),process.exit(1)),pt(); |
{ | ||
"name": "gitzy", | ||
"description": "interactive conventional commits cli", | ||
"version": "3.5.0", | ||
"version": "3.5.1", | ||
"author": "jimmy-guzman @jimmy-guzman", | ||
@@ -26,4 +26,4 @@ "repository": "jimmy-guzman/gitzy", | ||
"lint:fix": "pnpm lint --fix", | ||
"test": "jest -c .config/jest.config.js --coverage", | ||
"test:watch": "jest -c .config/jest.config.js --watch", | ||
"test": "jest --coverage", | ||
"test:watch": "jest --watch", | ||
"e2e": "jest -c e2e/jest.config.js", | ||
@@ -50,19 +50,16 @@ "ts-check": "tsc -b tsconfig.json", | ||
"lilconfig": "^2.0.4", | ||
"yaml": "^2.1.1" | ||
"yaml": "^2.2.2" | ||
}, | ||
"devDependencies": { | ||
"@comparto/prettier-config": "1.2.0", | ||
"@jest/types": "28.1.3", | ||
"@semantic-release/changelog": "6.0.3", | ||
"@semantic-release/git": "10.0.1", | ||
"@types/jest": "28.1.8", | ||
"@types/jest": "29.5.4", | ||
"@types/node": "18.15.11", | ||
"commitlint": "17.1.2", | ||
"eslint": "8.23.0", | ||
"eslint-config-jimmy-guzman": "7.0.0", | ||
"eslint-import-resolver-typescript": "3.5.0", | ||
"eslint-plugin-import": "2.26.0", | ||
"eslint": "8.47.0", | ||
"eslint-config-jimmy-guzman": "9.1.0", | ||
"husky": "8.0.1", | ||
"is-ci": "3.0.1", | ||
"jest": "28.1.3", | ||
"jest": "29.6.3", | ||
"lint-staged": "13.0.3", | ||
@@ -73,3 +70,3 @@ "npm-run-all": "4.1.5", | ||
"semantic-release": "19.0.5", | ||
"ts-jest": "28.0.8", | ||
"ts-jest": "29.1.1", | ||
"typescript": "4.9.5" | ||
@@ -76,0 +73,0 @@ }, |
18
69
24539
Updatedyaml@^2.2.2