@soybeanjs/changelog 0.3.3 → 0.3.4
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.cjs +9 -9
- package/dist/index.mjs +4 -4
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
"use strict";const cliProgress=require("cli-progress"),promises=require("fs/promises"),ofetch=require("ofetch"),w$1=require("dayjs"),fs=require("fs"),convertGitmoji=require("convert-gitmoji");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const w__default=_interopDefaultCompat(w$1);async function execCommand(t,n,e){const{execa:o}=await import("execa");return(await o(t,n,e))?.stdout?.trim()||""}function notNullish(t){return t!=null}function partition(t,...n){const e=new Array(n.length+1).fill(null).map(()=>[]);return t.forEach((o,
|
|
1
|
+
"use strict";const cliProgress=require("cli-progress"),promises=require("fs/promises"),ofetch=require("ofetch"),w$1=require("dayjs"),fs=require("fs"),convertGitmoji=require("convert-gitmoji");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const w__default=_interopDefaultCompat(w$1);async function execCommand(t,n,e){const{execa:o}=await import("execa");return(await o(t,n,e))?.stdout?.trim()||""}function notNullish(t){return t!=null}function partition(t,...n){const e=new Array(n.length+1).fill(null).map(()=>[]);return t.forEach((o,r,s)=>{let a=0;for(const i of n){if(i(o,r,s)){e[a].push(o);return}a+=1}e[a].push(o)}),e}function groupBy(t,n,e={}){for(const o of t){const r=o[n];e[r]=e[r]||[],e[r].push(o)}return e}function capitalize(t){return t.charAt(0).toUpperCase()+t.slice(1)}function join(t,n=", ",e=" and "){return!t||t.length===0?"":t.length===1?t[0]:t.length===2?t.join(e):`${t.slice(0,-1).join(n)}${e}${t.slice(-1)}`}const VERSION_REG=/v\d+\.\d+\.\d+(-(beta|alpha)\.\d+)?/,VERSION_REG_OF_MARKDOWN=/## \[v\d+\.\d+\.\d+(-(beta|alpha)\.\d+)?]/g,VERSION_WITH_RELEASE=/release\sv\d+\.\d+\.\d+(-(beta|alpha)\.\d+)?/;async function getTotalGitTags(){return(await execCommand("git",["--no-pager","tag","-l","--sort=creatordate"])).split(`
|
|
2
2
|
`)}async function getTagDateMap(){const t=await execCommand("git",["--no-pager","log","--tags","--simplify-by-decoration","--pretty=format:%ci %d"]),n="tag: ",e=new Map;return t.split(`
|
|
3
|
-
`).filter(o=>o.includes(n)).forEach(o=>{const[
|
|
4
|
-
`).splice(1).map(e=>{const[o,...
|
|
5
|
-
`),[s,
|
|
6
|
-
`)}})}function E(t){const n=/(?<type>[a-z]+)(\((?<scope>.+)\))?(?<breaking>!)?: (?<description>.+)/i,e=/co-authored-by:\s*(?<name>.+)(<(?<email>.+)>)/gim,o=/\([a-z]*(#\d+)\s*\)/gm,
|
|
7
|
-
${e}`}function generateMarkdown(t){const{options:n,showTitle:e,contributors:o}=t,
|
|
8
|
-
`).trim(),!0)}async function isVersionInMarkdown(t,n){let e=!1;const o=await promises.readFile(n,"utf8");if(o){const
|
|
3
|
+
`).filter(o=>o.includes(n)).forEach(o=>{const[r,s]=o.split(n),a=w__default(r).format("YYYY-MM-DD"),i=s.match(VERSION_REG)?.[0];i&&a&&e.set(i.trim(),a)}),e}function getFromToTags(t){const n=[];return t.forEach((e,o)=>{o<t.length-1&&n.push({from:e,to:t[o+1]})}),n}async function getLastGitTag(t=0){const n=await getTotalGitTags();return n[n.length+t-1]}async function b$1(){return await execCommand("git",["rev-parse","--abbrev-ref","HEAD"])}async function getCurrentGitBranch(){const t=await execCommand("git",["tag","--points-at","HEAD"]),n=b$1();return t||n}async function getGitHubRepo(){const t=await execCommand("git",["config","--get","remote.origin.url"]),n=t.match(/github\.com[/:]([\w\d._-]+?)\/([\w\d._-]+?)(\.git)?$/i);if(!n)throw new Error(`Can not parse GitHub repo from url ${t}`);return`${n[1]}/${n[2]}`}function isPrerelease(t){return!/^[^.]*[\d.]+$/.test(t)}function getFirstGitCommit(){return execCommand("git",["rev-list","--max-parents=0","HEAD"])}async function v(t,n="HEAD"){return(await execCommand("git",["--no-pager","log",`${t?`${t}...`:""}${n}`,'--pretty="----%n%s|%h|%an|%ae%n%b"',"--name-status"])).split(`----
|
|
4
|
+
`).splice(1).map(e=>{const[o,...r]=e.split(`
|
|
5
|
+
`),[s,a,i,g]=o.split("|");return{message:s,shortHash:a,author:{name:i,email:g},body:r.join(`
|
|
6
|
+
`)}})}function E(t){const n=/(?<type>[a-z]+)(\((?<scope>.+)\))?(?<breaking>!)?: (?<description>.+)/i,e=/co-authored-by:\s*(?<name>.+)(<(?<email>.+)>)/gim,o=/\([a-z]*(#\d+)\s*\)/gm,r=/(#\d+)/gm,s=t.message.match(n);if(!s?.groups)return null;const a=s.groups.type,i=s.groups.scope||"",g=!!s.groups.breaking;let l=s.groups.description;const c=[];for(const h of l.matchAll(o))c.push({type:"pull-request",value:h[1]});for(const h of l.matchAll(r))c.some(m=>m.value===h[1])||c.push({type:"issue",value:h[1]});c.push({value:t.shortHash,type:"hash"}),l=l.replace(o,"").trim();const f=[t.author],p=t.body.matchAll(e);for(const h of p){const{name:m="",email:$=""}=h.groups||{},F={name:m.trim(),email:$.trim()};f.push(F)}return{...t,authors:f,resolvedAuthors:[],description:l,type:a,scope:i,references:c,isBreaking:g}}async function getGitCommits(t,n="HEAD"){return(await v(t,n)).map(e=>E(e)).filter(notNullish)}function G$1(t){return{accept:"application/vnd.github.v3+json",authorization:`token ${t}`}}async function x$1(t,n,e){let o="";try{o=(await ofetch.ofetch(`https://ungh.cc/users/find/${e}`))?.user?.username||""}catch(a){console.log("e: ",a)}if(o)return o;const{repo:r,token:s}=t;if(!s)return o;if(n.length)try{o=(await ofetch.ofetch(`https://api.github.com/repos/${r}/commits/${n[0]}`,{headers:G$1(s)}))?.author?.login||""}catch(a){console.log("e: ",a)}if(o)return o;try{o=(await ofetch.ofetch(`https://api.github.com/search/users?q=${encodeURIComponent(e)}`,{headers:G$1(s)})).items[0].login}catch(a){console.log("e: ",a)}return o}async function getGitCommitsAndResolvedAuthors(t,n,e){const o=[],r=new Map;for await(const s of t){const a=[];for await(const[g,l]of s.authors.entries()){const{email:c,name:f}=l;if(c&&f){const p=[];g===0&&p.push(s.shortHash);const h={name:f,email:c,commits:p,login:""};if(e?.has(c)){const m=e?.get(c)||"";h.login=m}else{const m=await x$1(n,p,c);h.login=m,e?.set(c,m)}a.push(h),r.has(c)||r.set(c,h)}}const i={...s,resolvedAuthors:a};o.push(i)}return{commits:o,contributors:Array.from(r.values())}}function u(){return{cwd:process.cwd(),types:{feat:"\u{1F680} Features",fix:"\u{1F41E} Bug Fixes",perf:"\u{1F525} Performance",refactor:"\u{1F485} Refactors",docs:"\u{1F4D6} Documentation",build:"\u{1F4E6} Build",types:"\u{1F30A} Types",chore:"\u{1F3E1} Chore",examples:"\u{1F3C0} Examples",test:"\u2705 Tests",style:"\u{1F3A8} Styles",ci:"\u{1F916} CI"},github:{repo:"",token:process.env.GITHUB_TOKEN||""},from:"",to:"",tags:[],tagDateMap:new Map,capitalize:!1,emoji:!0,titles:{breakingChanges:"\u{1F6A8} Breaking Changes"},output:"CHANGELOG.md",regenerate:!1,newVersion:""}}async function w(t){let n="";try{const e=await promises.readFile(`${t}/package.json`,"utf-8");n=JSON.parse(e)?.version||""}catch{}return{newVersion:n}}async function createOptions(t){var n;const e=u();Object.assign(e,t);const{newVersion:o}=await w(e.cwd);if((n=e.github).repo||(n.repo=await getGitHubRepo()),e.newVersion||(e.newVersion=`v${o}`),e.from||(e.from=await getLastGitTag()),e.to||(e.to=await getCurrentGitBranch()),e.to===e.from){const r=await getLastGitTag(-1),s=await getFirstGitCommit();e.from=r||s}return e.tags=await getTotalGitTags(),e.tagDateMap=await getTagDateMap(),e.prerelease=e.prerelease??isPrerelease(e.to),e}function b(t,n,e){const o=t.filter(s=>e==="issues"?s.type==="issue"||s.type==="pull-request":s.type==="hash").map(s=>n?s.type==="pull-request"||s.type==="issue"?`https://github.com/${n}/issues/${s.value.slice(1)}`:`[<samp>(${s.value.slice(0,5)})</samp>](https://github.com/${n}/commit/${s.value})`:s.value),r=join(o).trim();return e==="issues"?r&&`in ${r}`:r}function j(t,n){const e=b(t.references,n.github.repo,"issues"),o=b(t.references,n.github.repo,"hash");let r=join([...new Set(t.resolvedAuthors.map(a=>a.login?`@${a.login}`:`**${a.name}**`))]).trim();r&&(r=`by ${r}`);let s=[r,e,o].filter(a=>a?.trim()).join(" ");return s&&(s=` - ${s}`),[n.capitalize?capitalize(t.description):t.description,s].filter(a=>a?.trim()).join(" ")}function G(t,n){const e=/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;let o=t.trim();return n.emoji||(o=t.replace(e,"").trim()),`### ${o}`}function d(t,n,e){if(!t.length)return[];const o=["",G(n,e),""],r=groupBy(t,"scope");let s=!0;return Object.entries(r).some(([a,i])=>a&&i.length>1)||(s=!1),Object.keys(r).sort().forEach(a=>{let i="",g="";const l=`**${a}**`;a&&s?(o.push(`- ${l}:`),i=" "):a&&(g=`${l}: `),o.push(...r[a].reverse().map(c=>`${i}- ${g}${j(c,e)}`))}),o}function y(t){return`https://github.com/${t}`}function k(t){return`${y(t)}.png?size=48`}function x(t){let n="",e="";const o=new Map;return t.forEach(r=>{o.set(r.email,r)}),Array.from(o.values()).forEach((r,s)=>{const{name:a,email:i,login:g}=r;if(g){const l=y(g),c=k(g);n+=`[](${l}) `}else{let l=`[${a}](mailto:${i})`;s<t.length-1&&(l+=", "),e+=l}}),`${n}
|
|
7
|
+
${e}`}function generateMarkdown(t){const{options:n,showTitle:e,contributors:o}=t,r=t.commits.filter(p=>p.description.match(VERSION_WITH_RELEASE)===null),s=[],a=!VERSION_REG.test(n.to),i=a?n.newVersion:n.to,g=`https://github.com/${n.github.repo}/compare/${n.from}...${i}`;if(e){const p=a?w__default().format("YY-MM-DD"):n.tagDateMap.get(n.to);let h=`## [${i}](${g})`;p&&(h+=` (${p})`),s.push(h)}const[l,c]=partition(r,p=>p.isBreaking),f=groupBy(c,"type");s.push(...d(l,n.titles.breakingChanges,n));for(const p of Object.keys(n.types)){const h=f[p]||[];s.push(...d(h,n.types[p],n))}if(s.length||s.push("*No significant changes*"),e||s.push("",`##### [View changes on GitHub](${g})`),e){s.push("","### \u2764\uFE0F Contributors","");const p=x(o);s.push(p)}return convertGitmoji.convert(s.join(`
|
|
8
|
+
`).trim(),!0)}async function isVersionInMarkdown(t,n){let e=!1;const o=await promises.readFile(n,"utf8");if(o){const r=o.match(VERSION_REG_OF_MARKDOWN);if(r?.length){const s=`## [${t}]`;e=r.includes(s)}}return e}async function writeMarkdown(t,n,e=!1){let o;const r="# Changelog";!e&&fs.existsSync(n)?(o=await promises.readFile(n,"utf8"),o.startsWith(r)||(o=`${r}
|
|
9
9
|
|
|
10
|
-
${o}`)):o=`${
|
|
10
|
+
${o}`)):o=`${r}
|
|
11
11
|
|
|
12
12
|
`;const s=o.match(/^###?\s+.*$/m);s?o=`${o.slice(0,s.index)+t}
|
|
13
13
|
|
|
14
14
|
${o.slice(s.index)}`:o+=`
|
|
15
15
|
${t}
|
|
16
16
|
|
|
17
|
-
`,await promises.writeFile(n,o)}async function getChangelogMarkdown(t,n=!0){const e=await createOptions(t),o=await getGitCommits(e.from,e.to),{commits:
|
|
17
|
+
`,await promises.writeFile(n,o)}async function getChangelogMarkdown(t,n=!0){const e=await createOptions(t),o=await getGitCommits(e.from,e.to),{commits:r,contributors:s}=await getGitCommitsAndResolvedAuthors(o,e.github);return{markdown:generateMarkdown({commits:r,options:e,showTitle:n,contributors:s}),commits:r,options:e}}async function getTotalChangelogMarkdown(t,n=!0){const e=await createOptions(t);let o=null;n&&(o=new cliProgress.SingleBar({format:"generate total changelog: [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}"},cliProgress.Presets.shades_classic));const r=getFromToTags(e.tags);if(r.length===0){const{markdown:i}=await getChangelogMarkdown(e);return i}o?.start(r.length,0);let s="";const a=new Map;for await(const[i,g]of r.entries()){const{from:l,to:c}=g,f=await getGitCommits(l,c),{commits:p,contributors:h}=await getGitCommitsAndResolvedAuthors(f,e.github,a);s=`${generateMarkdown({commits:p,options:{...e,from:l,to:c},showTitle:!0,contributors:h})}
|
|
18
18
|
|
|
19
19
|
${s}`,o?.update(i+1)}return o?.stop(),s}async function generateChangelog(t){const n=await createOptions(t),e=await isVersionInMarkdown(n.to,n.output);if(!n.regenerate&&e)return;const{markdown:o}=await getChangelogMarkdown(n);await writeMarkdown(o,n.output,n.regenerate)}async function generateTotalChangelog(t,n=!0){const e=await createOptions(t),o=await getTotalChangelogMarkdown(e,n);await writeMarkdown(o,e.output,!0)}exports.generateChangelog=generateChangelog,exports.generateTotalChangelog=generateTotalChangelog,exports.getChangelogMarkdown=getChangelogMarkdown,exports.getTotalChangelogMarkdown=getTotalChangelogMarkdown;
|
package/dist/index.mjs
CHANGED
|
@@ -2,9 +2,9 @@ import{SingleBar as B,Presets as _}from"cli-progress";import{readFile as d,write
|
|
|
2
2
|
`)}async function U(){const t=await f("git",["--no-pager","log","--tags","--simplify-by-decoration","--pretty=format:%ci %d"]),n="tag: ",e=new Map;return t.split(`
|
|
3
3
|
`).filter(o=>o.includes(n)).forEach(o=>{const[a,s]=o.split(n),r=y(a).format("YYYY-MM-DD"),i=s.match(v)?.[0];i&&r&&e.set(i.trim(),r)}),e}function W(t){const n=[];return t.forEach((e,o)=>{o<t.length-1&&n.push({from:e,to:t[o+1]})}),n}async function C(t=0){const n=await D();return n[n.length+t-1]}async function K(){return await f("git",["rev-parse","--abbrev-ref","HEAD"])}async function J(){const t=await f("git",["tag","--points-at","HEAD"]),n=K();return t||n}async function Q(){const t=await f("git",["config","--get","remote.origin.url"]),n=t.match(/github\.com[/:]([\w\d._-]+?)\/([\w\d._-]+?)(\.git)?$/i);if(!n)throw new Error(`Can not parse GitHub repo from url ${t}`);return`${n[1]}/${n[2]}`}function X(t){return!/^[^.]*[\d.]+$/.test(t)}function Z(){return f("git",["rev-list","--max-parents=0","HEAD"])}async function tt(t,n="HEAD"){return(await f("git",["--no-pager","log",`${t?`${t}...`:""}${n}`,'--pretty="----%n%s|%h|%an|%ae%n%b"',"--name-status"])).split(`----
|
|
4
4
|
`).splice(1).map(e=>{const[o,...a]=e.split(`
|
|
5
|
-
`),[s,r,i,
|
|
6
|
-
`)}})}function et(t){const n=/(?<type>[a-z]+)(\((?<scope>.+)\))?(?<breaking>!)?: (?<description>.+)/i,e=/co-authored-by:\s*(?<name>.+)(<(?<email>.+)>)/gim,o=/\([a-z]*(#\d+)\s*\)/gm,a=/(#\d+)/gm,s=t.message.match(n);if(!s?.groups)return null;const r=s.groups.type,i=s.groups.scope||"",
|
|
7
|
-
${e}`}function H(t){const{options:n,showTitle:e,contributors:o}=t,a=t.commits.filter(
|
|
5
|
+
`),[s,r,i,l]=o.split("|");return{message:s,shortHash:r,author:{name:i,email:l},body:a.join(`
|
|
6
|
+
`)}})}function et(t){const n=/(?<type>[a-z]+)(\((?<scope>.+)\))?(?<breaking>!)?: (?<description>.+)/i,e=/co-authored-by:\s*(?<name>.+)(<(?<email>.+)>)/gim,o=/\([a-z]*(#\d+)\s*\)/gm,a=/(#\d+)/gm,s=t.message.match(n);if(!s?.groups)return null;const r=s.groups.type,i=s.groups.scope||"",l=!!s.groups.breaking;let u=s.groups.description;const c=[];for(const g of u.matchAll(o))c.push({type:"pull-request",value:g[1]});for(const g of u.matchAll(a))c.some(h=>h.value===g[1])||c.push({type:"issue",value:g[1]});c.push({value:t.shortHash,type:"hash"}),u=u.replace(o,"").trim();const m=[t.author],p=t.body.matchAll(e);for(const g of p){const{name:h="",email:R=""}=g.groups||{},V={name:h.trim(),email:R.trim()};m.push(V)}return{...t,authors:m,resolvedAuthors:[],description:u,type:r,scope:i,references:c,isBreaking:l}}async function A(t,n="HEAD"){return(await tt(t,n)).map(e=>et(e)).filter(z)}function k(t){return{accept:"application/vnd.github.v3+json",authorization:`token ${t}`}}async function nt(t,n,e){let o="";try{o=(await $(`https://ungh.cc/users/find/${e}`))?.user?.username||""}catch(r){console.log("e: ",r)}if(o)return o;const{repo:a,token:s}=t;if(!s)return o;if(n.length)try{o=(await $(`https://api.github.com/repos/${a}/commits/${n[0]}`,{headers:k(s)}))?.author?.login||""}catch(r){console.log("e: ",r)}if(o)return o;try{o=(await $(`https://api.github.com/search/users?q=${encodeURIComponent(e)}`,{headers:k(s)})).items[0].login}catch(r){console.log("e: ",r)}return o}async function M(t,n,e){const o=[],a=new Map;for await(const s of t){const r=[];for await(const[l,u]of s.authors.entries()){const{email:c,name:m}=u;if(c&&m){const p=[];l===0&&p.push(s.shortHash);const g={name:m,email:c,commits:p,login:""};if(e?.has(c)){const h=e?.get(c)||"";g.login=h}else{const h=await nt(n,p,c);g.login=h,e?.set(c,h)}r.push(g),a.has(c)||a.set(c,g)}}const i={...s,resolvedAuthors:r};o.push(i)}return{commits:o,contributors:Array.from(a.values())}}function ot(){return{cwd:process.cwd(),types:{feat:"\u{1F680} Features",fix:"\u{1F41E} Bug Fixes",perf:"\u{1F525} Performance",refactor:"\u{1F485} Refactors",docs:"\u{1F4D6} Documentation",build:"\u{1F4E6} Build",types:"\u{1F30A} Types",chore:"\u{1F3E1} Chore",examples:"\u{1F3C0} Examples",test:"\u2705 Tests",style:"\u{1F3A8} Styles",ci:"\u{1F916} CI"},github:{repo:"",token:process.env.GITHUB_TOKEN||""},from:"",to:"",tags:[],tagDateMap:new Map,capitalize:!1,emoji:!0,titles:{breakingChanges:"\u{1F6A8} Breaking Changes"},output:"CHANGELOG.md",regenerate:!1,newVersion:""}}async function st(t){let n="";try{const e=await d(`${t}/package.json`,"utf-8");n=JSON.parse(e)?.version||""}catch{}return{newVersion:n}}async function w(t){var n;const e=ot();Object.assign(e,t);const{newVersion:o}=await st(e.cwd);if((n=e.github).repo||(n.repo=await Q()),e.newVersion||(e.newVersion=`v${o}`),e.from||(e.from=await C()),e.to||(e.to=await J()),e.to===e.from){const a=await C(-1),s=await Z();e.from=a||s}return e.tags=await D(),e.tagDateMap=await U(),e.prerelease=e.prerelease??X(e.to),e}function T(t,n,e){const o=t.filter(s=>e==="issues"?s.type==="issue"||s.type==="pull-request":s.type==="hash").map(s=>n?s.type==="pull-request"||s.type==="issue"?`https://github.com/${n}/issues/${s.value.slice(1)}`:`[<samp>(${s.value.slice(0,5)})</samp>](https://github.com/${n}/commit/${s.value})`:s.value),a=E(o).trim();return e==="issues"?a&&`in ${a}`:a}function at(t,n){const e=T(t.references,n.github.repo,"issues"),o=T(t.references,n.github.repo,"hash");let a=E([...new Set(t.resolvedAuthors.map(r=>r.login?`@${r.login}`:`**${r.name}**`))]).trim();a&&(a=`by ${a}`);let s=[a,e,o].filter(r=>r?.trim()).join(" ");return s&&(s=` - ${s}`),[n.capitalize?q(t.description):t.description,s].filter(r=>r?.trim()).join(" ")}function rt(t,n){const e=/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;let o=t.trim();return n.emoji||(o=t.replace(e,"").trim()),`### ${o}`}function j(t,n,e){if(!t.length)return[];const o=["",rt(n,e),""],a=F(t,"scope");let s=!0;return Object.entries(a).some(([r,i])=>r&&i.length>1)||(s=!1),Object.keys(a).sort().forEach(r=>{let i="",l="";const u=`**${r}**`;r&&s?(o.push(`- ${u}:`),i=" "):r&&(l=`${u}: `),o.push(...a[r].reverse().map(c=>`${i}- ${l}${at(c,e)}`))}),o}function G(t){return`https://github.com/${t}`}function it(t){return`${G(t)}.png?size=48`}function ct(t){let n="",e="";const o=new Map;return t.forEach(a=>{o.set(a.email,a)}),Array.from(o.values()).forEach((a,s)=>{const{name:r,email:i,login:l}=a;if(l){const u=G(l),c=it(l);n+=`[](${u}) `}else{let u=`[${r}](mailto:${i})`;s<t.length-1&&(u+=", "),e+=u}}),`${n}
|
|
7
|
+
${e}`}function H(t){const{options:n,showTitle:e,contributors:o}=t,a=t.commits.filter(p=>p.description.match(P)===null),s=[],r=!v.test(n.to),i=r?n.newVersion:n.to,l=`https://github.com/${n.github.repo}/compare/${n.from}...${i}`;if(e){const p=r?y().format("YY-MM-DD"):n.tagDateMap.get(n.to);let g=`## [${i}](${l})`;p&&(g+=` (${p})`),s.push(g)}const[u,c]=Y(a,p=>p.isBreaking),m=F(c,"type");s.push(...j(u,n.titles.breakingChanges,n));for(const p of Object.keys(n.types)){const g=m[p]||[];s.push(...j(g,n.types[p],n))}if(s.length||s.push("*No significant changes*"),e||s.push("",`##### [View changes on GitHub](${l})`),e){s.push("","### \u2764\uFE0F Contributors","");const p=ct(o);s.push(p)}return I(s.join(`
|
|
8
8
|
`).trim(),!0)}async function ut(t,n){let e=!1;const o=await d(n,"utf8");if(o){const a=o.match(L);if(a?.length){const s=`## [${t}]`;e=a.includes(s)}}return e}async function x(t,n,e=!1){let o;const a="# Changelog";!e&&S(n)?(o=await d(n,"utf8"),o.startsWith(a)||(o=`${a}
|
|
9
9
|
|
|
10
10
|
${o}`)):o=`${a}
|
|
@@ -14,6 +14,6 @@ ${o}`)):o=`${a}
|
|
|
14
14
|
${o.slice(s.index)}`:o+=`
|
|
15
15
|
${t}
|
|
16
16
|
|
|
17
|
-
`,await N(n,o)}async function b(t,n=!0){const e=await w(t),o=await A(e.from,e.to),{commits:a,contributors:s}=await M(o,e.github);return{markdown:H({commits:a,options:e,showTitle:n,contributors:s}),commits:a,options:e}}async function O(t,n=!0){const e=await w(t);let o=null;n&&(o=new B({format:"generate total changelog: [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}"},_.shades_classic));const a=W(e.tags);if(a.length===0){const{markdown:i}=await b(e);return i}o?.start(a.length,0);let s="";const r=new Map;for await(const[i,
|
|
17
|
+
`,await N(n,o)}async function b(t,n=!0){const e=await w(t),o=await A(e.from,e.to),{commits:a,contributors:s}=await M(o,e.github);return{markdown:H({commits:a,options:e,showTitle:n,contributors:s}),commits:a,options:e}}async function O(t,n=!0){const e=await w(t);let o=null;n&&(o=new B({format:"generate total changelog: [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}"},_.shades_classic));const a=W(e.tags);if(a.length===0){const{markdown:i}=await b(e);return i}o?.start(a.length,0);let s="";const r=new Map;for await(const[i,l]of a.entries()){const{from:u,to:c}=l,m=await A(u,c),{commits:p,contributors:g}=await M(m,e.github,r);s=`${H({commits:p,options:{...e,from:u,to:c},showTitle:!0,contributors:g})}
|
|
18
18
|
|
|
19
19
|
${s}`,o?.update(i+1)}return o?.stop(),s}async function pt(t){const n=await w(t),e=await ut(n.to,n.output);if(!n.regenerate&&e)return;const{markdown:o}=await b(n);await x(o,n.output,n.regenerate)}async function lt(t,n=!0){const e=await w(t),o=await O(e,n);await x(o,e.output,!0)}export{pt as generateChangelog,lt as generateTotalChangelog,b as getChangelogMarkdown,O as getTotalChangelogMarkdown};
|