@jeromefitz/release-notes-generator 2.0.8 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -20,5 +20,5 @@ May move to `remark` once `semantic-release` is ESM.
20
20
  Also add the `changelog-config` customization:
21
21
 
22
22
  ```sh
23
- yarn add @jeromefitz/release-notes-generator @jeromefitz/conventional-gitmoji
23
+ pnpm add @jeromefitz/release-notes-generator @jeromefitz/conventional-gitmoji --save-dev
24
24
  ```
package/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- declare function generateNotes(pluginConfig: any, context: any): Promise<string>;
1
+ declare function generateNotes(pluginConfig: any, context: any): Promise<string | false>;
2
2
 
3
3
  export { generateNotes };
package/index.js CHANGED
@@ -1,22 +1,22 @@
1
- import{URL as Ut,format as jt}from"url";import St from"conventional-commits-filter";import{sync as Bt}from"conventional-commits-parser";import S from"lodash/merge.js";import{readPackageUp as Dt}from"read-package-up";import lt from"conventional-commits-filter";import ut from"lodash/clone.js";import gt from"lodash/forEach.js";import dt from"lodash/map.js";import ht from"lodash/merge.js";import z from"semver";import at from"lodash/forEach.js";import mt from"lodash/groupBy.js";import M from"lodash/orderBy.js";function ct(i,a,e,t){let r=[],n=mt(a,function(m){return m[i]||""});return at(n,function(m,s){s===""&&(s=!1);let o=m;t&&(o=M(o,t));let c=o[0].typeSpec.semver,p=99;["fix","patch"].includes(c)&&(p=20),["feature","minor"].includes(c)&&(p=10),["breaking","major"].includes(c)&&(p=0),r.push({commits:o,order:p,title:s})}),e&&(r=M(r,e)),r}var q=ct;import A from"lodash/forEach.js";function pt(i,a,e){let t=[];return A(i,function(r){let n=r.title,m=!1;A(t,function(s){if(s.title===n)return m=!0,s.notes.push(r),!1}),m||t.push({notes:[r],title:n})}),t}var N=pt;function ft(i,a,e){let t={};return t.commitGroups=q(e.groupBy,i,e.commitGroupsSort,e.commitsSort),t.noteGroups=N(a,e.noteGroupsSort,e.notesSort),t}var H=ft;function yt(i,a,e,t){let r=[],n;return i.ignoreReverted?n=lt(a):n=ut(a),gt(n,function(m){dt(m.notes,function(s){return s.commit=m,s}),r=r.concat(m.notes)}),e=ht({},e,t,H(n,r,i)),t&&t.committerDate&&(e.date=t.committerDate),e.version&&z.valid(e.version)&&(e.isPatch=e.isPatch||z.patch(e.version)!==0),e={commits:a,context:e,filteredCommits:n,keyCommit:t,options:i},e}var J=yt;import{dirname as wt}from"node:path";import{fileURLToPath as bt}from"node:url";import{promisify as xt}from"util";import G from"import-from-esm";import Ct from"lodash/isPlainObject.js";var K=wt(bt(import.meta.url)),Q=async(i,a)=>{let{config:e,parserOpts:t,preset:r,presetConfig:n,writerOpts:m}=i,{cwd:s}=a,o;if(r){let p=`conventional-changelog-${r.toLowerCase()}`;o=await(await G.silent(K,p)||await G(s,p))(n)}else e?o=await(await G.silent(K,e)||await G(s,e))():o={};return o=await(typeof o=="function"?Ct(n)?o(n):xt(o)():o),{parserOpts:{...o.parserOpts,...t},writerOpts:{...o.writerOpts,...m}}};import vt from"lodash/size.js";var T=(i,a,e)=>{let{commit:t,commitGroups:r,linkReferences:n}=i,{repositoryUrl:m}=e,s=`- {scope}{subject}{hash}{references}
2
- `,o="",c=f=>{if(!f)return"";if(n){let l=` ${m}/${t}/${f}`;return` [ \`${f}\` ](${l})`}return` ${f}`},p=f=>{if(!f||vt(f)===0)return"";let l=", closes ",g=[];return f.map(d=>{d.issue&&g.push(`[ #${d.issue} ]`)}),l+=g.join(" "),l};return r.map(f=>{let{commits:l}=f,g=l[0]?.type;o+=`#### ${g}
3
- `,l.map(d=>{let{hash:x,header:$,references:k,scope:w,subject:h}=d,C=s.replace(/\{scope\}/g,w?`**${w}**: `:"").replace(/\{subject\}/g,h||$).replace(/\{hash\}/g,c(x)).replace(/\{references\}/g,p(k));o+=C}),o+=`
4
- `}),o};import{Octokit as _t}from"@octokit/rest";import V from"lodash/findIndex.js";import $t from"lodash/sample.js";import kt from"lodash/uniqBy.js";var Pt=new _t({auth:process.env.GH_TOKEN}),W={email:["noreply@github.com","users.noreply.github.com","semantic-release-bot@martynus.net"],login:["dependabot","dependabot[bot]","kodiakhq","kodiakhq[bot]","renovate","renovate[bot]","semantic-release-bot"]},Gt=["Props to","Kudos to","Thanks to","Brought to you by"],E=async(i,a,e)=>{let t=kt(a.map(o=>({email:o.author.email,name:o.author.name})),"name"),{options:{contributorsProhibitList:r}}=i;await Promise.all(t.map((o,c)=>Pt.request("GET /search/users",{q:o.email}).then(({data:p})=>{let f=p.items[0]?.login;return f?(t[c].login=f,f):""}))),[...W.login,...r.login].map(o=>{let c=V(t,["login",o]);c!==-1&&t.splice(c)}),[...W.email,...r.email].map(o=>{let c=V(t,p=>p.email.includes(o));c!==-1&&t.splice(c)});let s="";if(t.length>0){s+=`#### \u{1F973}\uFE0F Contributors
5
- `;let o=t.map(c=>`@${c.login}`).join(", ");s+=`- ${$t(Gt)} ${o}
6
- `,s+=`
7
- `}return s};var L=(i,a,e)=>{let{noteGroups:t}=i,r=`- {scope}{text}
8
- `,n="";return t.map(m=>{let{notes:s}=m,o=s[0].title;n+=`#### ${o}
9
- `,s.map(c=>{let{scope:p,text:f}=c,l=r.replace(/\{scope\}/g,p?`**${p}**: `:"").replace(/\{text\}/g,f||"");n+=l}),n+=`
10
- `}),n};import{format as Ot}from"date-fns";var U=(i,a,e)=>{let{currentTag:t,date:r,linkCompare:n,previousTag:m,title:s}=i,{repositoryUrl:o}=e,c=`
1
+ import{URL as jt,format as Bt}from"node:url";import{filterRevertedCommitsSync as Dt}from"conventional-commits-filter";import{CommitParser as It}from"conventional-commits-parser";import B from"lodash/merge.js";import{readPackageUp as Mt}from"read-package-up";import{filterRevertedCommitsSync as gt}from"conventional-commits-filter";import dt from"lodash/clone.js";import ht from"lodash/forEach.js";import yt from"lodash/map.js";import wt from"lodash/merge.js";import J from"semver";import ct from"lodash/forEach.js";import pt from"lodash/groupBy.js";import A from"lodash/orderBy.js";function ft(a,m,e,t){let r=[],n=pt(m,function(s){return s[a]||""});return ct(n,function(s,i){i===""&&(i=!1);let o=s;t&&(o=A(o,t));let c=o[0].typeSpec.semver,p=99;["fix","patch"].includes(c)&&(p=20),["feature","minor"].includes(c)&&(p=10),["breaking","major"].includes(c)&&(p=0),r.push({commits:o,order:p,title:i})}),e&&(r=A(r,e)),r}var N=ft;import F from"lodash/forEach.js";function lt(a,m,e){let t=[];return F(a,function(r){let n=r.title,s=!1;F(t,function(i){if(i.title===n)return s=!0,i.notes.push(r),!1}),s||t.push({notes:[r],title:n})}),t}var H=lt;function ut(a,m,e){let t={};return t.commitGroups=N(e.groupBy,a,e.commitGroupsSort,e.commitsSort),t.noteGroups=H(m,e.noteGroupsSort,e.notesSort),t}var z=ut;function bt(a,m,e,t){let r=[],n;if(a.ignoreReverted)for(let s of gt(m))n.push(s);else n=dt(m);return ht(n,function(s){yt(s.notes,function(i){return i.commit=s,i}),r=r.concat(s.notes)}),e=wt({},e,t,z(n,r,a)),t&&t.committerDate&&(e.date=t.committerDate),e.version&&J.valid(e.version)&&(e.isPatch=e.isPatch||J.patch(e.version)!==0),e={commits:m,context:e,filteredCommits:n,keyCommit:t,options:a},e}var K=bt;import{dirname as xt}from"node:path";import{fileURLToPath as Ct}from"node:url";import{promisify as _t}from"util";import R from"import-from-esm";import $t from"lodash/isPlainObject.js";var Q=xt(Ct(import.meta.url)),V=async(a,m)=>{let{config:e,parserOpts:t,preset:r,presetConfig:n,writerOpts:s}=a,{cwd:i}=m,o;if(r){let p=`conventional-changelog-${r.toLowerCase()}`;o=await(await R.silent(Q,p)||await R(i,p))(n)}else e?o=await(await R.silent(Q,e)||await R(i,e))():o={};return o=await(typeof o=="function"?$t(n)?o(n):_t(o)():o),{parserOpts:{...o.parserOpts,...t},writerOpts:{...o.writerOpts,...s}}};import kt from"lodash/size.js";var E=(a,m,e)=>{let{commit:t,commitGroups:r,linkReferences:n}=a,{repositoryUrl:s}=e,i=`- {scope}{subject}{hash}{references}
2
+ `,o="",c=f=>{if(!f)return"";if(n){let l=` ${s}/${t}/${f}`;return` [ \`${f}\` ](${l})`}return` ${f}`},p=f=>{if(!f||kt(f)===0)return"";let l=", closes ",g=[];return f.map(d=>{d.issue&&g.push(`[ #${d.issue} ]`)}),l+=g.join(" "),l};return r.map(f=>{let{commits:l}=f,g=l[0]?.type;o+=`#### ${g}
3
+ `,l.map(d=>{let{hash:b,header:$,references:k,scope:y,subject:h}=d,x=i.replace(/\{scope\}/g,y?`**${y}**: `:"").replace(/\{subject\}/g,h||$).replace(/\{hash\}/g,c(b)).replace(/\{references\}/g,p(k));o+=x}),o+=`
4
+ `}),o};import{Octokit as vt}from"@octokit/rest";import W from"lodash/findIndex.js";import Pt from"lodash/sample.js";import Gt from"lodash/uniqBy.js";var Rt=new vt({auth:process.env.GH_TOKEN}),X={email:["noreply@github.com","users.noreply.github.com","semantic-release-bot@martynus.net"],login:["dependabot","dependabot[bot]","kodiakhq","kodiakhq[bot]","renovate","renovate[bot]","semantic-release-bot"]},Ot=["Props to","Kudos to","Thanks to","Brought to you by"],L=async(a,m,e)=>{let t=Gt(m.map(o=>({email:o.author.email,name:o.author.name})),"name"),{options:{contributorsProhibitList:r}}=a;await Promise.all(t.map((o,c)=>Rt.request("GET /search/users",{q:o.email}).then(({data:p})=>{let f=p.items[0]?.login;return f?(t[c].login=f,f):""}))),[...X.login,...r.login].map(o=>{let c=W(t,["login",o]);c!==-1&&t.splice(c)}),[...X.email,...r.email].map(o=>{let c=W(t,p=>p.email.includes(o));c!==-1&&t.splice(c)});let i="";if(t.length>0){i+=`#### \u{1F973}\uFE0F Contributors
5
+ `;let o=t.map(c=>`@${c.login}`).join(", ");i+=`- ${Pt(Ot)} ${o}
6
+ `,i+=`
7
+ `}return i};var S=(a,m,e)=>{let{noteGroups:t}=a,r=`- {scope}{text}
8
+ `,n="";return t.map(s=>{let{notes:i}=s,o=i[0].title;n+=`#### ${o}
9
+ `,i.map(c=>{let{scope:p,text:f}=c,l=r.replace(/\{scope\}/g,p?`**${p}**: `:"").replace(/\{text\}/g,f||"");n+=l}),n+=`
10
+ `}),n};import{format as Tt}from"date-fns";var U=(a,m,e)=>{let{currentTag:t,date:r,linkCompare:n,previousTag:s,title:i}=a,{repositoryUrl:o}=e,c=`
11
11
  | \u{1F516}\uFE0F | Release Information |
12
12
  | ----------- | --------------- |
13
13
  | Current | **\`${t}\`** |
14
- `;if(n){let p=o+"/compare/"+m+"..."+t;c+=`| Previous | **[\`${m}\`](${p})** |
15
- `}return s&&(c+=`| Title | **\`${s}\`** |
16
- `),r&&(c+=`| Date | **\`${Ot(r,"yyyy-MM-dd")}\`** |
14
+ `;if(n){let p=o+"/compare/"+s+"..."+t;c+=`| Previous | **[\`${s}\`](${p})** |
15
+ `}return i&&(c+=`| Title | **\`${i}\`** |
16
+ `),r&&(c+=`| Date | **\`${Tt(r,"yyyy-MM-dd")}\`** |
17
17
  `),c+=`
18
- `,c};var X=async(i,a)=>{let{commitGroups:e,currentTag:t,date:r,host:n,issue:m,lastRelease:s,linkCompare:o,linkReferences:c,mentions:p,nextRelease:f,noteGroups:l,notes:g,options:d,owner:x,previousTag:$,references:k,repoUrl:w,repository:h,revert:C,version:O}=i,b={commitGroups:e,currentTag:t,date:r,host:n,issue:m,lastRelease:s,linkCompare:o,linkReferences:c,mentions:p,nextRelease:f,noteGroups:l,notes:g,options:d,owner:x,previousTag:$,references:k,repoUrl:w,repository:h,revert:C,version:O},v={repositoryUrl:h?n+"/"+x+"/"+h:w},u="";return u+=U(b,a,v),u+=`
19
- `,u+=T(b,a,v),u+=`
20
- `,u+=await E(b,a,v),u+=`
21
- `,u+=L(b,a,v),u+=`
22
- `,u};import Rt from"lodash/cloneDeep.js";import Tt from"lodash/forEach.js";import Et from"lodash/get.js";import Y from"lodash/isFunction.js";import Lt from"lodash/set.js";function j(i,a,e){let t;try{i=JSON.parse(i)}catch{}return t=Rt(i),Y(a)?(t=a(t,e),t&&(t.raw=i),t):(Tt(a,function(r,n){let m=Et(t,n);Y(r)?m=r(m,n):m=r,Lt(t,n,m)}),t.raw=i,t)}var Ft={commit:"commit",hostname:"github.com",issue:"issues",issuePrefixes:["#","gh-"],referenceActions:["close","closes","closed","fix","fixes","fixed","resolve","resolves","resolved"]};async function qo(i,a){let{parserOpts:e,writerOpts:t}=await Q(i,a),{commits:r,cwd:n,lastRelease:m,nextRelease:s,options:o}=a,{commit:c,issue:p,issuePrefixes:f,referenceActions:l}=Ft,g=m.gitTag||m.gitHead,d=s.gitTag||s.gitHead,{commit:x,host:$,issue:k,linkCompare:w,linkReferences:h}=i,C=o.repositoryUrl.replace(/\.git$/i,""),[O,b,B,v]=/^(?!.+:\/\/)(?:(?<auth>.*)@)?(?<host>.*?):(?<path>.*)$/.exec(C)||[],{hostname:u,pathname:Z,port:R,protocol:P}=new Ut(O?`ssh://${b?`${b}@`:""}${B}/${v}`:C);R=P.includes("ssh")?"":R,P=P&&/http[^s]/.test(P)?"http":"https";let[,tt,ot]=/^\/(?<owner>[^/]+)?\/?(?<repository>.+)?$/.exec(Z)??[],D=S({commit:c,currentTag:d,host:jt({hostname:u,port:R,protocol:P}),issue:p,linkCompare:d&&g,owner:tt,packageData:(await Dt({cwd:n,normalize:!1})||{}).packageJson,previousTag:g,repository:ot,version:s.version},{commit:x,host:$,issue:k,linkCompare:w,linkReferences:h}),et=St(r.filter(({message:y})=>!!y.trim()).map(y=>({...y,...Bt(y.message,{issuePrefixes:f,referenceActions:l,...e})}))),_=[];await et.map(async y=>{let I=await j(y,t.transform,a);_.push(I)}),_=await _.filter(y=>y!==void 0);let rt=S({},D,o,t),F=_[0],nt=j(F,t.transform,a)||F,{context:st}=await J(rt,_,a,nt),it=S({},D,st);return X(it,_)}export{qo as generateNotes};
18
+ `,c};var Y=async(a,m)=>{let{commitGroups:e,currentTag:t,date:r,host:n,issue:s,lastRelease:i,linkCompare:o,linkReferences:c,mentions:p,nextRelease:f,noteGroups:l,notes:g,options:d,owner:b,previousTag:$,references:k,repoUrl:y,repository:h,revert:x,version:O}=a,w={commitGroups:e,currentTag:t,date:r,host:n,issue:s,lastRelease:i,linkCompare:o,linkReferences:c,mentions:p,nextRelease:f,noteGroups:l,notes:g,options:d,owner:b,previousTag:$,references:k,repoUrl:y,repository:h,revert:x,version:O},C={repositoryUrl:h?n+"/"+b+"/"+h:y},u="";return u+=U(w,m,C),u+=`
19
+ `,u+=E(w,m,C),u+=`
20
+ `,u+=await L(w,m,C),u+=`
21
+ `,u+=S(w,m,C),u+=`
22
+ `,u};import Et from"lodash/cloneDeep.js";import Lt from"lodash/forEach.js";import St from"lodash/get.js";import Z from"lodash/isFunction.js";import Ut from"lodash/set.js";function j(a,m,e){let t;try{a=JSON.parse(a)}catch{}return t=Et(a),Z(m)?(t=m(t,e),t&&(t.raw=a),t):(Lt(m,function(r,n){let s=St(t,n);Z(r)?s=r(s,n):s=r,Ut(t,n,s)}),t.raw=a,t)}var qt={commit:"commit",hostname:"github.com",issue:"issues",issuePrefixes:["#","gh-"],referenceActions:["close","closes","closed","fix","fixes","fixed","resolve","resolves","resolved"]};async function Fo(a,m){let{parserOpts:e,writerOpts:t}=await V(a,m),{commits:r,cwd:n,lastRelease:s,nextRelease:i,options:o}=m,{commit:c,issue:p,issuePrefixes:f,referenceActions:l}=qt,g=s.gitTag||s.gitHead,d=i.gitTag||i.gitHead,{commit:b,host:$,issue:k,linkCompare:y,linkReferences:h}=a,x=o.repositoryUrl.replace(/\.git$/i,""),[O,w,D,C]=/^(?!.+:\/\/)(?:(?<auth>.*)@)?(?<host>.*?):(?<path>.*)$/.exec(x)||[],{hostname:u,pathname:tt,port:T,protocol:v}=new jt(O?`ssh://${w?`${w}@`:""}${D}/${C}`:x);T=v.includes("ssh")?"":T,v=v&&/http[^s]/.test(v)?"http":"https";let[,ot,et]=/^\/(?<owner>[^/]+)?\/?(?<repository>.+)?$/.exec(tt)??[],I=B({commit:c,currentTag:d,host:Bt({hostname:u,port:T,protocol:v}),issue:p,linkCompare:d&&g,owner:ot,packageData:(await Mt({cwd:n,normalize:!1})||{}).packageJson,previousTag:g,repository:et,version:i.version},{commit:b,host:$,issue:k,linkCompare:y,linkReferences:h}),M=[],rt=new It({issuePrefixes:f,referenceActions:l,...e});for(let P of Dt(r)){let G=P;if(!G?.message.trim())return!1;let mt={...G,...rt.parse(G?.message)};M.push(mt)}let _=[];await M.map(async P=>{let G=await j(P,t.transform,m);_.push(G)}),_=await _.filter(P=>P!==void 0);let nt=B({},I,o,t),q=_[0],st=j(q,t.transform,m)||q,{context:it}=await K(nt,_,m,st),at=B({},I,it);return Y(at,_)}export{Fo as generateNotes};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jeromefitz/release-notes-generator",
3
- "version": "2.0.8",
3
+ "version": "3.0.0",
4
4
  "type": "module",
5
5
  "description": "Custom Release Note Generator for Semantic Release.",
6
6
  "repository": "jeromefitz/packages.git",
@@ -35,17 +35,16 @@
35
35
  "lodash": "^4.17.21"
36
36
  },
37
37
  "dependencies": {
38
- "@octokit/rest": "20.1.1",
39
- "conventional-commits-filter": "4.0.0",
40
- "conventional-commits-parser": "5.0.0",
38
+ "@octokit/rest": "21.0.0",
39
+ "conventional-commits-filter": "5.0.0",
40
+ "conventional-commits-parser": "6.0.0",
41
41
  "date-fns": "3.6.0",
42
42
  "import-from-esm": "1.3.4",
43
43
  "read-package-up": "11.0.0",
44
44
  "semver": "7.6.2"
45
45
  },
46
46
  "devDependencies": {
47
- "@types/conventional-commits-parser": "5.0.0",
48
- "@types/lodash": "4.17.1",
47
+ "@types/lodash": "4.17.5",
49
48
  "lodash": "4.17.21"
50
49
  },
51
50
  "publishConfig": {