@soybeanjs/changelog 0.3.9-beta.0 → 0.3.9-beta.3
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/chunk-DZRUSQMM.js +1062 -0
- package/dist/index.cjs +2554 -28
- package/dist/index.js +616 -0
- package/dist/prompt-N6GOLCU5.js +781 -0
- package/package.json +9 -7
- package/dist/index.d.mts +0 -145
- package/dist/index.mjs +0 -28
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soybeanjs/changelog",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.3.9-beta.
|
|
4
|
+
"version": "0.3.9-beta.3",
|
|
5
5
|
"packageManager": "pnpm@8.14.1",
|
|
6
6
|
"description": "generate changelog form git tags and commits for github",
|
|
7
7
|
"author": {
|
|
@@ -24,16 +24,19 @@
|
|
|
24
24
|
"exports": {
|
|
25
25
|
".": {
|
|
26
26
|
"types": "./dist/index.d.ts",
|
|
27
|
-
"import": "./dist/index.
|
|
27
|
+
"import": "./dist/index.js",
|
|
28
28
|
"require": "./dist/index.cjs"
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"main": "./dist/index.cjs",
|
|
32
|
-
"module": "./dist/index.
|
|
32
|
+
"module": "./dist/index.js",
|
|
33
33
|
"types": "./dist/index.d.ts",
|
|
34
34
|
"files": [
|
|
35
35
|
"dist"
|
|
36
36
|
],
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=14"
|
|
39
|
+
},
|
|
37
40
|
"dependencies": {
|
|
38
41
|
"@soybeanjs/eslint-config": "^1.1.4",
|
|
39
42
|
"cli-progress": "3.12.0",
|
|
@@ -49,9 +52,9 @@
|
|
|
49
52
|
"eslint": "8.56.0",
|
|
50
53
|
"lint-staged": "15.2.0",
|
|
51
54
|
"simple-git-hooks": "2.9.0",
|
|
55
|
+
"tsup": "^8.0.1",
|
|
52
56
|
"tsx": "4.7.0",
|
|
53
|
-
"typescript": "5.3.3"
|
|
54
|
-
"unbuild": "2.0.0"
|
|
57
|
+
"typescript": "5.3.3"
|
|
55
58
|
},
|
|
56
59
|
"simple-git-hooks": {
|
|
57
60
|
"commit-msg": "pnpm soy git-commit-verify",
|
|
@@ -61,14 +64,13 @@
|
|
|
61
64
|
"*": "eslint --fix"
|
|
62
65
|
},
|
|
63
66
|
"scripts": {
|
|
64
|
-
"build": "
|
|
67
|
+
"build": "tsup && pnpm build-pkg",
|
|
65
68
|
"build-pkg": "pnpm -r --filter='./packages/*' run build",
|
|
66
69
|
"cleanup": "soy cleanup",
|
|
67
70
|
"commit": "soy git-commit",
|
|
68
71
|
"lint": "eslint . --fix",
|
|
69
72
|
"publish-pkg": "pnpm -r publish --access public",
|
|
70
73
|
"release": "soy release",
|
|
71
|
-
"stub": "pnpm unbuild --stub",
|
|
72
74
|
"typecheck": "tsc --noEmit --skipLibCheck",
|
|
73
75
|
"update-pkg": "soy ncu"
|
|
74
76
|
}
|
package/dist/index.d.mts
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
/** The commit author */
|
|
2
|
-
interface GitCommitAuthor {
|
|
3
|
-
/** The author name */
|
|
4
|
-
name: string;
|
|
5
|
-
/** The author email */
|
|
6
|
-
email: string;
|
|
7
|
-
}
|
|
8
|
-
/** The raw git commit */
|
|
9
|
-
interface RawGitCommit {
|
|
10
|
-
/** The commit message */
|
|
11
|
-
message: string;
|
|
12
|
-
/** The commit body */
|
|
13
|
-
body: string;
|
|
14
|
-
/** The commit hash */
|
|
15
|
-
shortHash: string;
|
|
16
|
-
/** The commit author */
|
|
17
|
-
author: GitCommitAuthor;
|
|
18
|
-
}
|
|
19
|
-
/** The reference of the commit */
|
|
20
|
-
interface Reference {
|
|
21
|
-
/** The reference type */
|
|
22
|
-
type: 'hash' | 'issue' | 'pull-request';
|
|
23
|
-
/** The reference value */
|
|
24
|
-
value: string;
|
|
25
|
-
}
|
|
26
|
-
/** The resolved github author */
|
|
27
|
-
interface ResolvedAuthor extends GitCommitAuthor {
|
|
28
|
-
/** The git commit of the author */
|
|
29
|
-
commits: string[];
|
|
30
|
-
/** The github logged username of the author */
|
|
31
|
-
login: string;
|
|
32
|
-
}
|
|
33
|
-
/** Git commit config */
|
|
34
|
-
interface GitCommit extends RawGitCommit {
|
|
35
|
-
/** The commit description */
|
|
36
|
-
description: string;
|
|
37
|
-
/** The commit scope type */
|
|
38
|
-
type: string;
|
|
39
|
-
/** The commit scope */
|
|
40
|
-
scope: string;
|
|
41
|
-
/** The commit references */
|
|
42
|
-
references: Reference[];
|
|
43
|
-
/** The commit authors */
|
|
44
|
-
authors: GitCommitAuthor[];
|
|
45
|
-
/** The resolved authors */
|
|
46
|
-
resolvedAuthors: ResolvedAuthor[];
|
|
47
|
-
/** The commit breaking changes */
|
|
48
|
-
isBreaking: boolean;
|
|
49
|
-
}
|
|
50
|
-
/** Github config */
|
|
51
|
-
interface GithubConfig {
|
|
52
|
-
/**
|
|
53
|
-
* The github repository name
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* soybeanjs / changelog;
|
|
57
|
-
*/
|
|
58
|
-
repo: string;
|
|
59
|
-
/** The github token */
|
|
60
|
-
token: string;
|
|
61
|
-
}
|
|
62
|
-
interface ChangelogOption {
|
|
63
|
-
/**
|
|
64
|
-
* The directory of the project
|
|
65
|
-
*
|
|
66
|
-
* @default process.cwd()
|
|
67
|
-
*/
|
|
68
|
-
cwd: string;
|
|
69
|
-
/** The commit scope types */
|
|
70
|
-
types: Record<string, string>;
|
|
71
|
-
/** Github config */
|
|
72
|
-
github: GithubConfig;
|
|
73
|
-
/** The commit hash or tag */
|
|
74
|
-
from: string;
|
|
75
|
-
/** The commit hash or tag */
|
|
76
|
-
to: string;
|
|
77
|
-
/** The whole commit tags */
|
|
78
|
-
tags: string[];
|
|
79
|
-
/** The commit tag and date map */
|
|
80
|
-
tagDateMap: Map<string, string>;
|
|
81
|
-
/** Whether to capitalize the first letter of the commit type */
|
|
82
|
-
capitalize: boolean;
|
|
83
|
-
/**
|
|
84
|
-
* Use emojis in section titles
|
|
85
|
-
*
|
|
86
|
-
* @default true
|
|
87
|
-
*/
|
|
88
|
-
emoji: boolean;
|
|
89
|
-
/** The section titles */
|
|
90
|
-
titles: {
|
|
91
|
-
/** The title of breaking changes section */
|
|
92
|
-
breakingChanges: string;
|
|
93
|
-
};
|
|
94
|
-
/** The output file path of the changelog */
|
|
95
|
-
output: string;
|
|
96
|
-
/**
|
|
97
|
-
* Whether to regenerate the changelog if it already exists
|
|
98
|
-
*
|
|
99
|
-
* @example
|
|
100
|
-
* the changelog already exists the content of v0.0.1, but you want to regenerate it
|
|
101
|
-
*/
|
|
102
|
-
regenerate: boolean;
|
|
103
|
-
/**
|
|
104
|
-
* Version from package.json, with prefix "v"
|
|
105
|
-
*
|
|
106
|
-
* If the options "to" is not specified, the version will be used
|
|
107
|
-
*/
|
|
108
|
-
newVersion: string;
|
|
109
|
-
/** Mark the release as prerelease */
|
|
110
|
-
prerelease?: boolean;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Get the changelog markdown by two git tags
|
|
115
|
-
*
|
|
116
|
-
* @param options The changelog options
|
|
117
|
-
* @param showTitle Whither show the title
|
|
118
|
-
*/
|
|
119
|
-
declare function getChangelogMarkdown(options?: Partial<ChangelogOption>, showTitle?: boolean): Promise<{
|
|
120
|
-
markdown: string;
|
|
121
|
-
commits: GitCommit[];
|
|
122
|
-
options: ChangelogOption;
|
|
123
|
-
}>;
|
|
124
|
-
/**
|
|
125
|
-
* Get the changelog markdown by the total git tags
|
|
126
|
-
*
|
|
127
|
-
* @param options The changelog options
|
|
128
|
-
* @param showProgress Whither show the progress bar
|
|
129
|
-
*/
|
|
130
|
-
declare function getTotalChangelogMarkdown(options?: Partial<ChangelogOption>, showProgress?: boolean): Promise<string>;
|
|
131
|
-
/**
|
|
132
|
-
* Generate the changelog markdown by two git tags
|
|
133
|
-
*
|
|
134
|
-
* @param options The changelog options
|
|
135
|
-
*/
|
|
136
|
-
declare function generateChangelog(options?: Partial<ChangelogOption>): Promise<void>;
|
|
137
|
-
/**
|
|
138
|
-
* Generate the changelog markdown by the total git tags
|
|
139
|
-
*
|
|
140
|
-
* @param options The changelog options
|
|
141
|
-
* @param showProgress Whither show the progress bar
|
|
142
|
-
*/
|
|
143
|
-
declare function generateTotalChangelog(options?: Partial<ChangelogOption>, showProgress?: boolean): Promise<void>;
|
|
144
|
-
|
|
145
|
-
export { type ChangelogOption, generateChangelog, generateTotalChangelog, getChangelogMarkdown, getTotalChangelogMarkdown };
|
package/dist/index.mjs
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import{SingleBar as J,Presets as K}from"cli-progress";import k from"node:process";import{readFile as _,writeFile as E}from"node:fs/promises";import{ofetch as b}from"ofetch";import D from"dayjs";import{existsSync as Q}from"node:fs";import{convert as X}from"convert-gitmoji";const g={silent:Number.NEGATIVE_INFINITY,fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,ready:3,start:3,box:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},T={silent:{level:-1},fatal:{level:g.fatal},error:{level:g.error},warn:{level:g.warn},log:{level:g.log},info:{level:g.info},success:{level:g.success},fail:{level:g.fail},ready:{level:g.info},start:{level:g.info},box:{level:g.info},debug:{level:g.debug},trace:{level:g.trace},verbose:{level:g.verbose}};function v(o){return o!==null&&typeof o=="object"}function $(o,t,e=".",s){if(!v(t))return $(o,{},e,s);const r=Object.assign({},t);for(const n in o){if(n==="__proto__"||n==="constructor")continue;const i=o[n];i!=null&&(s&&s(r,n,i,e)||(Array.isArray(i)&&Array.isArray(r[n])?r[n]=[...i,...r[n]]:v(i)&&v(r[n])?r[n]=$(i,r[n],(e?`${e}.`:"")+n.toString(),s):r[n]=i))}return r}function Z(o){return(...t)=>t.reduce((e,s)=>$(e,s,"",o),{})}const tt=Z();function et(o){return Object.prototype.toString.call(o)==="[object Object]"}function ot(o){return!(!et(o)||!o.message&&!o.args||o.stack)}let F=!1;const M=[];class f{constructor(t={}){const e=t.types||T;this.options=tt({...t,defaults:{...t.defaults},level:C(t.level,e),reporters:[...t.reporters||[]]},{types:T,throttle:1e3,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(const s in e){const r={type:s,...this.options.defaults,...e[s]};this[s]=this._wrapLogFn(r),this[s].raw=this._wrapLogFn(r,!0)}this.options.mockFn&&this.mockTypes(),this._lastLog={}}get level(){return this.options.level}set level(t){this.options.level=C(t,this.options.types,this.options.level)}prompt(t,e){if(!this.options.prompt)throw new Error("prompt is not supported!");return this.options.prompt(t,e)}create(t){const e=new f({...this.options,...t});return this._mockFn&&e.mockTypes(this._mockFn),e}withDefaults(t){return this.create({...this.options,defaults:{...this.options.defaults,...t}})}withTag(t){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+t:t})}addReporter(t){return this.options.reporters.push(t),this}removeReporter(t){if(t){const e=this.options.reporters.indexOf(t);if(e>=0)return this.options.reporters.splice(e,1)}else this.options.reporters.splice(0);return this}setReporters(t){return this.options.reporters=Array.isArray(t)?t:[t],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(const t in this.options.types)console["__"+t]||(console["__"+t]=console[t]),console[t]=this[t].raw}restoreConsole(){for(const t in this.options.types)console["__"+t]&&(console[t]=console["__"+t],delete console["__"+t])}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(t,e){t&&(t.__write||(t.__write=t.write),t.write=s=>{this[e].raw(String(s).trim())})}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(t){t&&t.__write&&(t.write=t.__write,delete t.__write)}pauseLogs(){F=!0}resumeLogs(){F=!1;const t=M.splice(0);for(const e of t)e[0]._logFn(e[1],e[2])}mockTypes(t){const e=t||this.options.mockFn;if(this._mockFn=e,typeof e=="function")for(const s in this.options.types)this[s]=e(s,this.options.types[s])||this[s],this[s].raw=this[s]}_wrapLogFn(t,e){return(...s)=>{if(F){M.push([this,t,s,e]);return}return this._logFn(t,s,e)}}_logFn(t,e,s){if((t.level||0)>this.level)return!1;const r={date:new Date,args:[],...t,level:C(t.level,this.options.types)};!s&&e.length===1&&ot(e[0])?Object.assign(r,e[0]):r.args=[...e],r.message&&(r.args.unshift(r.message),delete r.message),r.additional&&(Array.isArray(r.additional)||(r.additional=r.additional.split(`
|
|
2
|
-
`)),r.args.push(`
|
|
3
|
-
`+r.additional.join(`
|
|
4
|
-
`)),delete r.additional),r.type=typeof r.type=="string"?r.type.toLowerCase():"log",r.tag=typeof r.tag=="string"?r.tag:"";const n=(a=!1)=>{const c=(this._lastLog.count||0)-this.options.throttleMin;if(this._lastLog.object&&c>0){const l=[...this._lastLog.object.args];c>1&&l.push(`(repeated ${c} times)`),this._log({...this._lastLog.object,args:l}),this._lastLog.count=1}a&&(this._lastLog.object=r,this._log(r))};clearTimeout(this._lastLog.timeout);const i=this._lastLog.time&&r.date?r.date.getTime()-this._lastLog.time.getTime():0;if(this._lastLog.time=r.date,i<this.options.throttle)try{const a=JSON.stringify([r.type,r.tag,r.args]),c=this._lastLog.serialized===a;if(this._lastLog.serialized=a,c&&(this._lastLog.count=(this._lastLog.count||0)+1,this._lastLog.count>this.options.throttleMin)){this._lastLog.timeout=setTimeout(n,this.options.throttle);return}}catch{}n(!0)}_log(t){for(const e of this.options.reporters)e.log(t,{options:this.options})}}function C(o,t={},e=3){return o===void 0?e:typeof o=="number"?o:t[o]&&t[o].level!==void 0?t[o].level:e}f.prototype.add=f.prototype.addReporter,f.prototype.remove=f.prototype.removeReporter,f.prototype.clear=f.prototype.removeReporter,f.prototype.withScope=f.prototype.withTag,f.prototype.mock=f.prototype.mockTypes,f.prototype.pause=f.prototype.pauseLogs,f.prototype.resume=f.prototype.resumeLogs;function st(o={}){return new f(o)}class rt{constructor(t){this.options={...t},this.defaultColor="#7f8c8d",this.levelColorMap={0:"#c0392b",1:"#f39c12",3:"#00BCD4"},this.typeColorMap={success:"#2ecc71"}}_getLogFn(t){return t<1?console.__error||console.error:t===1?console.__warn||console.warn:console.__log||console.log}log(t){const e=this._getLogFn(t.level),s=t.type==="log"?"":t.type,r=t.tag||"",i=`
|
|
5
|
-
background: ${this.typeColorMap[t.type]||this.levelColorMap[t.level]||this.defaultColor};
|
|
6
|
-
border-radius: 0.5em;
|
|
7
|
-
color: white;
|
|
8
|
-
font-weight: bold;
|
|
9
|
-
padding: 2px 0.5em;
|
|
10
|
-
`,a=`%c${[r,s].filter(Boolean).join(":")}`;typeof t.args[0]=="string"?e(`${a}%c ${t.args[0]}`,i,"",...t.args.slice(1)):e(a,i,...t.args)}}function nt(o={}){return st({reporters:o.reporters||[new rt({})],prompt(e,s={}){return s.type==="confirm"?Promise.resolve(confirm(e)):Promise.resolve(prompt(e))},...o})}const L=nt();async function w(o,t,e){const{execa:s}=await import("execa");return(await s(o,t,e))?.stdout?.trim()||""}function it(o){return o!=null}function at(o,...t){const e=Array.from({length:t.length+1}).fill(null).map(()=>[]);return o.forEach((s,r,n)=>{let i=0;for(const a of t){if(a(s,r,n)){e[i].push(s);return}i+=1}e[i].push(s)}),e}function S(o,t,e={}){for(const s of o){const r=s[t];e[r]||(e[r]=[]),e[r].push(s)}return e}function ct(o){return o.charAt(0).toUpperCase()+o.slice(1)}function j(o,t=", ",e=" and "){return!o||o.length===0?"":o.length===1?o[0]:o.length===2?o.join(e):`${o.slice(0,-1).join(t)}${e}${o.slice(-1)}`}const N=/v\d+\.\d+\.\d+(-(beta|alpha)\.\d+)?/,lt=/## \[v\d+\.\d+\.\d+(-(beta|alpha)\.\d+)?]/g,ut=/release\sv\d+\.\d+\.\d+(-(beta|alpha)\.\d+)?/;async function x(){return(await w("git",["--no-pager","tag","-l","--sort=creatordate"])).split(`
|
|
11
|
-
`)}async function pt(){const o=await w("git",["--no-pager","log","--tags","--simplify-by-decoration","--pretty=format:%ci %d"]),t="tag: ",e=new Map;return o.split(`
|
|
12
|
-
`).filter(s=>s.includes(t)).forEach(s=>{const[r,n]=s.split(t),i=D(r).format("YYYY-MM-DD"),a=n.match(N)?.[0];a&&i&&e.set(a.trim(),i)}),e}function ht(o){const t=[];return o.forEach((e,s)=>{s<o.length-1&&t.push({from:e,to:o[s+1]})}),t}async function I(o=0){const t=await x();return t[t.length+o-1]}async function ft(){return await w("git",["rev-parse","--abbrev-ref","HEAD"])}async function gt(){const o=await w("git",["tag","--points-at","HEAD"]),t=ft();return o||t}async function mt(){const o=await w("git",["config","--get","remote.origin.url"]),t=o.match(/github\.com[/:]([\w\d._-]+?)\/([\w\d._-]+?)(\.git)?$/i);if(!t)throw new Error(`Can not parse GitHub repo from url ${o}`);return`${t[1]}/${t[2]}`}function dt(o){return!/^[^.]*[\d.]+$/.test(o)}function wt(){return w("git",["rev-list","--max-parents=0","HEAD"])}async function yt(o,t="HEAD"){return(await w("git",["--no-pager","log",`${o?`${o}...`:""}${t}`,'--pretty="----%n%s|%h|%an|%ae%n%b"',"--name-status"])).split(`----
|
|
13
|
-
`).splice(1).map(e=>{const[s,...r]=e.split(`
|
|
14
|
-
`),[n,i,a,c]=s.split("|");return{message:n,shortHash:i,author:{name:a,email:c},body:r.join(`
|
|
15
|
-
`)}})}function _t(o){const t=/(?<type>[a-z]+)(\((?<scope>.+)\))?(?<breaking>!)?: (?<description>.+)/i,e=/co-authored-by:\s*(?<name>.+)(<(?<email>.+)>)/gim,s=/\([a-z]*(#\d+)\s*\)/gm,r=/(#\d+)/gm,n=o.message.match(t);if(!n?.groups)return null;const i=n.groups.type,a=n.groups.scope||"",c=!!n.groups.breaking;let l=n.groups.description;const u=[];for(const h of l.matchAll(s))u.push({type:"pull-request",value:h[1]});for(const h of l.matchAll(r))u.some(d=>d.value===h[1])||u.push({type:"issue",value:h[1]});u.push({value:o.shortHash,type:"hash"}),l=l.replace(s,"").trim();const m=[o.author],p=o.body.matchAll(e);for(const h of p){const{name:d="",email:U=""}=h.groups||{},W={name:d.trim(),email:U.trim()};m.push(W)}return{...o,authors:m,resolvedAuthors:[],description:l,type:i,scope:a,references:u,isBreaking:c}}async function R(o,t="HEAD"){return(await yt(o,t)).map(e=>_t(e)).filter(it)}function G(o){return{accept:"application/vnd.github.v3+json",authorization:`token ${o}`}}async function bt(o,t,e){let s="";try{s=(await b(`https://ungh.cc/users/find/${e}`))?.user?.username||""}catch(i){L.log("e: ",i)}if(s)return s;const{repo:r,token:n}=o;if(!n)return s;if(t.length)try{s=(await b(`https://api.github.com/repos/${r}/commits/${t[0]}`,{headers:G(n)}))?.author?.login||""}catch(i){L.log("e: ",i)}if(s)return s;try{s=(await b(`https://api.github.com/search/users?q=${encodeURIComponent(e)}`,{headers:G(n)})).items[0].login}catch(i){L.log("e: ",i)}return s}async function V(o,t,e){const s=[],r=new Map;for await(const n of o){const i=[];for await(const[c,l]of n.authors.entries()){const{email:u,name:m}=l;if(u&&m){const p=[];c===0&&p.push(n.shortHash);const h={name:m,email:u,commits:p,login:""};if(e?.has(u)){const d=e?.get(u)||"";h.login=d}else{const d=await bt(t,p,u);h.login=d,e?.set(u,d)}i.push(h),r.has(u)||r.set(u,h)}}const a={...n,resolvedAuthors:i};s.push(a)}return{commits:s,contributors:Array.from(r.values())}}function vt(){return{cwd:k.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:k.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 $t(o){let t="";try{const e=await _(`${o}/package.json`,"utf-8");t=JSON.parse(e)?.version||""}catch{}return{newVersion:t}}async function y(o){var t;const e=vt();Object.assign(e,o);const{newVersion:s}=await $t(e.cwd);if((t=e.github).repo||(t.repo=await mt()),e.newVersion||(e.newVersion=`v${s}`),e.from||(e.from=await I()),e.to||(e.to=await gt()),e.to===e.from){const r=await I(-1),n=await wt();e.from=r||n}return e.tags=await x(),e.tagDateMap=await pt(),e.prerelease||(e.prerelease=dt(e.to)),e}function H(o,t,e){const s=o.filter(n=>e==="issues"?n.type==="issue"||n.type==="pull-request":n.type==="hash").map(n=>t?n.type==="pull-request"||n.type==="issue"?`https://github.com/${t}/issues/${n.value.slice(1)}`:`[<samp>(${n.value.slice(0,5)})</samp>](https://github.com/${t}/commit/${n.value})`:n.value),r=j(s).trim();return e==="issues"?r&&`in ${r}`:r}function Ft(o,t){const e=H(o.references,t.github.repo,"issues"),s=H(o.references,t.github.repo,"hash");let r=j([...new Set(o.resolvedAuthors.map(i=>i.login?`@${i.login}`:`**${i.name}**`))]).trim();r&&(r=`by ${r}`);let n=[r,e,s].filter(i=>i?.trim()).join(" ");return n&&(n=` - ${n}`),[t.capitalize?ct(o.description):o.description,n].filter(i=>i?.trim()).join(" ")}function Ct(o,t){const e=/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;let s=o.trim();return t.emoji||(s=o.replace(e,"").trim()),`### ${s}`}function O(o,t,e){if(!o.length)return[];const s=["",Ct(t,e),""],r=S(o,"scope");let n=!0;return Object.entries(r).some(([i,a])=>i&&a.length>1)||(n=!1),Object.keys(r).sort().forEach(i=>{let a="",c="";const l=`**${i}**`;i&&n?(s.push(`- ${l}:`),a=" "):i&&(c=`${l}: `),s.push(...r[i].reverse().map(u=>`${a}- ${c}${Ft(u,e)}`))}),s}function B(o){return`https://github.com/${o}`}function Lt(o){return`${B(o)}.png?size=48`}function At(o){let t="",e="";const s=new Map;return o.forEach(r=>{s.set(r.email,r)}),Array.from(s.values()).forEach((r,n)=>{const{name:i,email:a,login:c}=r;if(c){const l=B(c),u=Lt(c);t+=`[](${l}) `}else{let l=`[${i}](mailto:${a})`;n<o.length-1&&(l+=", "),e+=l}}),`${t}
|
|
16
|
-
${e}`}function z(o){const{options:t,showTitle:e,contributors:s}=o,r=o.commits.filter(p=>p.description.match(ut)===null),n=[],{version:i,isNewVersion:a}=Y(t.to,t.newVersion),c=`https://github.com/${t.github.repo}/compare/${t.from}...${i}`;if(e){const p=a?D().format("YY-MM-DD"):t.tagDateMap.get(t.to);let h=`## [${i}](${c})`;p&&(h+=` (${p})`),n.push(h)}const[l,u]=at(r,p=>p.isBreaking),m=S(u,"type");n.push(...O(l,t.titles.breakingChanges,t));for(const p of Object.keys(t.types)){const h=m[p]||[];n.push(...O(h,t.types[p],t))}if(n.length||n.push("*No significant changes*"),e||n.push("",`##### [View changes on GitHub](${c})`),e){n.push("","### \u2764\uFE0F Contributors","");const p=At(s);n.push(p)}return X(n.join(`
|
|
17
|
-
`).trim(),!0)}async function kt(o,t,e){let s=!1,r="";try{r=await _(e,"utf8")}catch{}if(r){const n=r.match(lt);if(n?.length){const{version:i}=Y(o,t),a=`## [${i}]`;s=n.includes(a)}}return s}function Y(o,t){const e=!N.test(o);return{version:e?t:o,isNewVersion:e}}async function P(o,t,e=!1){let s="";const r="# Changelog";Q(t)||await E(t,`${r}
|
|
18
|
-
|
|
19
|
-
`,"utf8"),e||(s=await _(t,"utf8")),s.startsWith(r)||(s=`${r}
|
|
20
|
-
|
|
21
|
-
${s}`);const n=s.match(/^###?\s+.*$/m);n?s=`${s.slice(0,n.index)+o}
|
|
22
|
-
|
|
23
|
-
${s.slice(n.index)}`:s+=`
|
|
24
|
-
${o}
|
|
25
|
-
|
|
26
|
-
`,await E(t,s)}async function A(o,t=!0){const e=await y(o),s=await R(e.from,e.to),{commits:r,contributors:n}=await V(s,e.github);return{markdown:z({commits:r,options:e,showTitle:t,contributors:n}),commits:r,options:e}}async function q(o,t=!0){const e=await y(o);let s=null;t&&(s=new J({format:"generate total changelog: [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}"},K.shades_classic));const r=ht(e.tags);if(r.length===0){const{markdown:a}=await A(e);return a}s?.start(r.length,0);let n="";const i=new Map;for await(const[a,c]of r.entries()){const{from:l,to:u}=c,m=await R(l,u),{commits:p,contributors:h}=await V(m,e.github,i);n=`${z({commits:p,options:{...e,from:l,to:u},showTitle:!0,contributors:h})}
|
|
27
|
-
|
|
28
|
-
${n}`,s?.update(a+1)}return s?.stop(),n}async function Et(o){const t=await y(o),e=await kt(t.to,t.newVersion,t.output);if(!t.regenerate&&e)return;const{markdown:s}=await A(t);await P(s,t.output,t.regenerate)}async function Dt(o,t=!0){const e=await y(o),s=await q(e,t);await P(s,e.output,!0)}export{Et as generateChangelog,Dt as generateTotalChangelog,A as getChangelogMarkdown,q as getTotalChangelogMarkdown};
|