genereleaselog 0.0.7 → 0.0.9
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/bin/index.js +3 -0
- package/dist/cli.d.mts +1 -0
- package/dist/{cli.js → cli.mjs} +8 -8
- package/dist/cli.mjs.map +1 -0
- package/dist/{github-DmgcZboa.js → github-B322iVKm.mjs} +19 -25
- package/dist/github-B322iVKm.mjs.map +1 -0
- package/dist/{index.d.ts → index.d.mts} +1 -1
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +3 -0
- package/package.json +14 -14
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/github-DmgcZboa.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3
- package/src/bin/index.js +0 -3
package/bin/index.js
ADDED
package/dist/cli.d.mts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
package/dist/{cli.js → cli.mjs}
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { i as generate, r as updateReleaseAssets, t as createRelease } from "./github-B322iVKm.mjs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { convert } from "convert-gitmoji";
|
|
4
|
+
import { rename } from "node:fs/promises";
|
|
2
5
|
import { blue, cyan, dim, red, yellow } from "ansis";
|
|
3
6
|
import cac from "cac";
|
|
4
7
|
import { createReadStream, createWriteStream, existsSync, writeFileSync } from "node:fs";
|
|
5
|
-
import { rename } from "node:fs/promises";
|
|
6
|
-
import * as path from "node:path";
|
|
7
|
-
import { convert } from "convert-gitmoji";
|
|
8
8
|
|
|
9
9
|
//#region src/changelog.ts
|
|
10
10
|
async function writeChangeLog(content, options) {
|
|
@@ -17,12 +17,12 @@ async function writeChangeLog(content, options) {
|
|
|
17
17
|
const tmpFile = `${filePath}.tmp`;
|
|
18
18
|
const ws = createWriteStream(tmpFile, { encoding: "utf-8" });
|
|
19
19
|
ws.write(`${logMD}\n\n`);
|
|
20
|
-
await new Promise((resolve
|
|
20
|
+
await new Promise((resolve, reject) => {
|
|
21
21
|
const rs = createReadStream(filePath);
|
|
22
22
|
rs.pipe(ws, { end: false });
|
|
23
23
|
rs.on("end", () => {
|
|
24
24
|
ws.end();
|
|
25
|
-
resolve
|
|
25
|
+
resolve();
|
|
26
26
|
});
|
|
27
27
|
rs.on("error", reject);
|
|
28
28
|
});
|
|
@@ -31,7 +31,7 @@ async function writeChangeLog(content, options) {
|
|
|
31
31
|
|
|
32
32
|
//#endregion
|
|
33
33
|
//#region package.json
|
|
34
|
-
var version = "0.0.
|
|
34
|
+
var version = "0.0.9";
|
|
35
35
|
|
|
36
36
|
//#endregion
|
|
37
37
|
//#region src/cli.ts
|
|
@@ -69,4 +69,4 @@ cli.parse();
|
|
|
69
69
|
|
|
70
70
|
//#endregion
|
|
71
71
|
export { };
|
|
72
|
-
//# sourceMappingURL=cli.
|
|
72
|
+
//# sourceMappingURL=cli.mjs.map
|
package/dist/cli.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.mjs","names":[],"sources":["../src/changelog.ts","../package.json","../src/cli.ts"],"sourcesContent":["import type { ResolvedChangelogOptions } from '@/src/types.ts'\nimport { createReadStream, createWriteStream, existsSync, writeFileSync } from 'node:fs'\nimport { rename } from 'node:fs/promises'\nimport * as path from 'node:path'\nimport { convert } from 'convert-gitmoji'\n\nexport async function writeChangeLog(content: string, options: ResolvedChangelogOptions) {\n const lines: string[] = []\n\n lines.push(`## ${options.version}\\n`)\n\n lines.push(content)\n\n const logMD = convert(lines.join('\\n').trim(), true)\n\n const filePath = path.resolve(options.cwd, options?.output || 'CHANGELOG.md')\n if (!existsSync(filePath)) {\n writeFileSync(filePath, '')\n }\n const tmpFile = `${filePath}.tmp`\n\n const ws = createWriteStream(tmpFile, { encoding: 'utf-8' })\n ws.write(`${logMD}\\n\\n`)\n\n await new Promise<void>((resolve, reject) => {\n const rs = createReadStream(filePath)\n rs.pipe(ws, { end: false })\n rs.on('end', () => {\n ws.end()\n resolve()\n })\n rs.on('error', reject)\n })\n\n await rename(tmpFile, filePath)\n}\n","","import type { IChangelogOptions } from '@/src/types.ts'\nimport { blue, cyan, dim, red, yellow } from 'ansis'\nimport cac from 'cac'\nimport { writeChangeLog } from '@/src/changelog.ts'\nimport { generate } from '@/src/generate.ts'\nimport { createRelease, updateReleaseAssets } from '@/src/github.ts'\nimport { version } from '../package.json'\n\nconst cli = cac('genereleaselog')\n\ncli.command('')\n .option('--token <token>', 'Github Token', { default: '' })\n .option('--from <ref>', 'From tag', { default: '' })\n .option('--to <ref>', 'To tag', { default: '' })\n .option('--output <output>', 'Output file path', { default: 'CHANGELOG.md' })\n .option('--filter <filter>', 'Filter Conventional Commits Type', { default: '' })\n .option('--assets <assets...>', 'Files to upload as assets to the release. Use quotes to prevent shell glob expansion, e.g., \"--assets \\'dist/*.js\\'\"')\n .option('--description <description>', 'Changelog release placeholder description', { default: '' })\n .action(async (options: IChangelogOptions) => {\n console.log()\n console.log(dim(`genereleaselog `) + dim(`v${version}`))\n console.log()\n\n const { config, rawCommits, markdown } = await generate(options as any)\n const webUrl = `https://${config.baseUrl}/${config.owner}/${config.repo}/releases/new?title=${encodeURIComponent(String(config.version))}&body=${encodeURIComponent(String(markdown))}&tag=${encodeURIComponent(String(config.version))}`\n\n console.log(cyan(config.from) + dim(' -> ') + blue(config.to) + dim(` (${rawCommits.length} commits)`))\n console.log(dim('--------------'))\n console.log()\n console.log(markdown.replace(/ /g, ''))\n console.log()\n console.log(dim('--------------'))\n\n const printWebUrl = () => {\n console.log()\n console.error(yellow('Using the following link to create it manually:'))\n console.error(yellow(webUrl))\n console.log()\n }\n\n if (config.output && config.output !== 'false') {\n await writeChangeLog(markdown, config)\n }\n\n if (!config.token) {\n console.error(red('No GitHub token found, specify it via GITHUB_TOKEN env. Release skipped.'))\n printWebUrl()\n process.exit(1)\n }\n\n const release = await createRelease(config, markdown)\n\n if (config.assets && config) {\n await updateReleaseAssets(config, release)\n }\n })\n\ncli.help()\ncli.version(version)\ncli.parse()\n"],"mappings":";;;;;;;;;AAMA,eAAsB,eAAe,SAAiB,SAAmC;CACrF,MAAM,QAAkB,EAAE;AAE1B,OAAM,KAAK,MAAM,QAAQ,QAAQ,IAAI;AAErC,OAAM,KAAK,QAAQ;CAEnB,MAAM,QAAQ,QAAQ,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,KAAK;CAEpD,MAAM,WAAW,KAAK,QAAQ,QAAQ,KAAK,SAAS,UAAU,eAAe;AAC7E,KAAI,CAAC,WAAW,SAAS,CACrB,eAAc,UAAU,GAAG;CAE/B,MAAM,UAAU,GAAG,SAAS;CAE5B,MAAM,KAAK,kBAAkB,SAAS,EAAE,UAAU,SAAS,CAAC;AAC5D,IAAG,MAAM,GAAG,MAAM,MAAM;AAExB,OAAM,IAAI,SAAe,SAAS,WAAW;EACzC,MAAM,KAAK,iBAAiB,SAAS;AACrC,KAAG,KAAK,IAAI,EAAE,KAAK,OAAO,CAAC;AAC3B,KAAG,GAAG,aAAa;AACf,MAAG,KAAK;AACR,YAAS;IACX;AACF,KAAG,GAAG,SAAS,OAAO;GACxB;AAEF,OAAM,OAAO,SAAS,SAAS;;;;;;;;;AE1BnC,MAAM,MAAM,IAAI,iBAAiB;AAEjC,IAAI,QAAQ,GAAG,CACV,OAAO,mBAAmB,gBAAgB,EAAE,SAAS,IAAI,CAAC,CAC1D,OAAO,gBAAgB,YAAY,EAAE,SAAS,IAAI,CAAC,CACnD,OAAO,cAAc,UAAU,EAAE,SAAS,IAAI,CAAC,CAC/C,OAAO,qBAAqB,oBAAoB,EAAE,SAAS,gBAAgB,CAAC,CAC5E,OAAO,qBAAqB,oCAAoC,EAAE,SAAS,IAAI,CAAC,CAChF,OAAO,wBAAwB,uHAAuH,CACtJ,OAAO,+BAA+B,6CAA6C,EAAE,SAAS,IAAI,CAAC,CACnG,OAAO,OAAO,YAA+B;AAC1C,SAAQ,KAAK;AACb,SAAQ,IAAI,IAAI,kBAAkB,GAAG,IAAI,IAAI,UAAU,CAAC;AACxD,SAAQ,KAAK;CAEb,MAAM,EAAE,QAAQ,YAAY,aAAa,MAAM,SAAS,QAAe;CACvE,MAAM,SAAS,WAAW,OAAO,QAAQ,GAAG,OAAO,MAAM,GAAG,OAAO,KAAK,sBAAsB,mBAAmB,OAAO,OAAO,QAAQ,CAAC,CAAC,QAAQ,mBAAmB,OAAO,SAAS,CAAC,CAAC,OAAO,mBAAmB,OAAO,OAAO,QAAQ,CAAC;AAEvO,SAAQ,IAAI,KAAK,OAAO,KAAK,GAAG,IAAI,OAAO,GAAG,KAAK,OAAO,GAAG,GAAG,IAAI,KAAK,WAAW,OAAO,WAAW,CAAC;AACvG,SAAQ,IAAI,IAAI,iBAAiB,CAAC;AAClC,SAAQ,KAAK;AACb,SAAQ,IAAI,SAAS,QAAQ,WAAW,GAAG,CAAC;AAC5C,SAAQ,KAAK;AACb,SAAQ,IAAI,IAAI,iBAAiB,CAAC;CAElC,MAAM,oBAAoB;AACtB,UAAQ,KAAK;AACb,UAAQ,MAAM,OAAO,kDAAkD,CAAC;AACxE,UAAQ,MAAM,OAAO,OAAO,CAAC;AAC7B,UAAQ,KAAK;;AAGjB,KAAI,OAAO,UAAU,OAAO,WAAW,QACnC,OAAM,eAAe,UAAU,OAAO;AAG1C,KAAI,CAAC,OAAO,OAAO;AACf,UAAQ,MAAM,IAAI,2EAA2E,CAAC;AAC9F,eAAa;AACb,UAAQ,KAAK,EAAE;;CAGnB,MAAM,UAAU,MAAM,cAAc,QAAQ,SAAS;AAErD,KAAI,OAAO,UAAU,OACjB,OAAM,oBAAoB,QAAQ,QAAQ;EAEhD;AAEN,IAAI,MAAM;AACV,IAAI,QAAQ,QAAQ;AACpB,IAAI,OAAO"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { cyan, green, red } from "ansis";
|
|
2
|
-
import { readFile } from "node:fs/promises";
|
|
3
1
|
import { basename, resolve } from "node:path";
|
|
4
|
-
import { convert } from "convert-gitmoji";
|
|
5
2
|
import { findUp } from "find-up";
|
|
6
3
|
import { createJiti } from "jiti";
|
|
7
4
|
import { x } from "tinyexec";
|
|
5
|
+
import { convert } from "convert-gitmoji";
|
|
6
|
+
import { readFile } from "node:fs/promises";
|
|
7
|
+
import { cyan, green, red } from "ansis";
|
|
8
8
|
import { glob } from "glob";
|
|
9
9
|
import { $fetch } from "ofetch";
|
|
10
10
|
|
|
@@ -41,8 +41,7 @@ async function getGithubRepo(baseUrl, cwd) {
|
|
|
41
41
|
"remote.origin.url"
|
|
42
42
|
], cwd);
|
|
43
43
|
const escapedBaseUrl = baseUrl.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
44
|
-
const
|
|
45
|
-
const match = regex.exec(url);
|
|
44
|
+
const match = new RegExp(`${escapedBaseUrl}[\/:]([\\w\\d._-]+?)\\/([\\w\\d._-]+?)(\\.git)?$`, "i").exec(url);
|
|
46
45
|
if (!match) throw new Error(`Can not parse GitHub repo from url ${url}`);
|
|
47
46
|
return {
|
|
48
47
|
owner: match[1],
|
|
@@ -65,15 +64,14 @@ async function getLastTagCommit(cwd) {
|
|
|
65
64
|
* @param cwd
|
|
66
65
|
*/
|
|
67
66
|
async function getMatchingTagsCommit(cwd) {
|
|
68
|
-
|
|
67
|
+
return await getCommitByTag(await execCommand("git", [
|
|
69
68
|
"tag",
|
|
70
69
|
"--sort=-creatordate",
|
|
71
70
|
"|",
|
|
72
71
|
"sed",
|
|
73
72
|
"-n",
|
|
74
73
|
"2p"
|
|
75
|
-
], cwd);
|
|
76
|
-
return await getCommitByTag(tag, cwd) || await getFirstGitCommit(cwd);
|
|
74
|
+
], cwd), cwd) || await getFirstGitCommit(cwd);
|
|
77
75
|
}
|
|
78
76
|
/**
|
|
79
77
|
* Get the latest tag
|
|
@@ -249,15 +247,14 @@ function applyIncludeExclude(types, userConfig) {
|
|
|
249
247
|
async function loadConfigFromFile(cwd) {
|
|
250
248
|
const resolvedPath = await findUp(DEFAULT_CONFIG_FILES.map((filePath) => resolve(cwd, filePath)));
|
|
251
249
|
if (!resolvedPath) return null;
|
|
252
|
-
|
|
250
|
+
return await createJiti(cwd, { extensions: [
|
|
253
251
|
".js",
|
|
254
252
|
".ts",
|
|
255
253
|
".mjs",
|
|
256
254
|
".cjs",
|
|
257
255
|
".mts",
|
|
258
256
|
".cts"
|
|
259
|
-
] });
|
|
260
|
-
return await loader.import(resolvedPath, { default: true });
|
|
257
|
+
] }).import(resolvedPath, { default: true });
|
|
261
258
|
}
|
|
262
259
|
|
|
263
260
|
//#endregion
|
|
@@ -274,7 +271,10 @@ function generateMarkdown(commits, options) {
|
|
|
274
271
|
lines.push(`- ${formatCommits(commit, options)}`);
|
|
275
272
|
if (index === scopeLength - 1) lines.push(` `);
|
|
276
273
|
});
|
|
277
|
-
else {
|
|
274
|
+
else if (scopeLength === 1) {
|
|
275
|
+
lines.push(`- **${scope}**: ${formatCommits(scopeCommit[0], options)}`);
|
|
276
|
+
lines.push(` `);
|
|
277
|
+
} else {
|
|
278
278
|
lines.push(`- **${scope}**`);
|
|
279
279
|
scopeCommit.forEach((commit, index) => {
|
|
280
280
|
lines.push(` - ${formatCommits(commit, options)}`);
|
|
@@ -313,9 +313,7 @@ async function fetchAuthorName(email, fallback) {
|
|
|
313
313
|
if (!email) return fallback;
|
|
314
314
|
if (authorCache.has(email)) return authorCache.get(email);
|
|
315
315
|
try {
|
|
316
|
-
const
|
|
317
|
-
const data = await res.json();
|
|
318
|
-
const authorName = data?.user?.username || fallback;
|
|
316
|
+
const authorName = (await (await fetch(`https://ungh.cc/users/find/${email}`)).json())?.user?.username || fallback;
|
|
319
317
|
authorCache.set(email, authorName);
|
|
320
318
|
return authorName;
|
|
321
319
|
} catch {
|
|
@@ -342,8 +340,7 @@ async function transformCommits(commit) {
|
|
|
342
340
|
}));
|
|
343
341
|
}
|
|
344
342
|
async function parseCommits(commit) {
|
|
345
|
-
|
|
346
|
-
return parsed.map((commit$1) => parseGitCommit(commit$1)).filter(isNotNull);
|
|
343
|
+
return (await transformCommits(commit)).map((commit) => parseGitCommit(commit)).filter(isNotNull);
|
|
347
344
|
}
|
|
348
345
|
const ConventionalCommitRegex = /^(?<breaking>!)?(?<type>[a-z]+)(?:\((?<scope>[^)]+)\))?(?<breaking1>!)?: (?<message>.+?)(?: \((?<pr>#\d+)\))?$/i;
|
|
349
346
|
const IssueRE = /(#\d+)/;
|
|
@@ -396,13 +393,11 @@ function groupByCommits(commits, options) {
|
|
|
396
393
|
async function generate(options) {
|
|
397
394
|
const config = await resolveConfig(options);
|
|
398
395
|
const rawCommits = await getCommitLogs(config.from, config.to, config.cwd);
|
|
399
|
-
const
|
|
400
|
-
const commits = groupByCommits(parsedCommits, config);
|
|
401
|
-
const markdown = generateMarkdown(commits, config);
|
|
396
|
+
const commits = groupByCommits(await parseCommits(rawCommits), config);
|
|
402
397
|
return {
|
|
403
398
|
config,
|
|
404
399
|
commits,
|
|
405
|
-
markdown,
|
|
400
|
+
markdown: generateMarkdown(commits, config),
|
|
406
401
|
rawCommits: transformCommits(rawCommits)
|
|
407
402
|
};
|
|
408
403
|
}
|
|
@@ -411,8 +406,7 @@ async function generate(options) {
|
|
|
411
406
|
//#region src/github.ts
|
|
412
407
|
async function createRelease(options, markdown) {
|
|
413
408
|
const headers = getGithubHeader(options);
|
|
414
|
-
const
|
|
415
|
-
const result = await $fetch(url, {
|
|
409
|
+
const result = await $fetch(`https://${options.baseUrlApi}/repos/${options.owner}/${options.repo}/releases`, {
|
|
416
410
|
method: "post",
|
|
417
411
|
headers,
|
|
418
412
|
body: JSON.stringify({
|
|
@@ -475,5 +469,5 @@ async function updateReleaseAssets(options, release) {
|
|
|
475
469
|
}
|
|
476
470
|
|
|
477
471
|
//#endregion
|
|
478
|
-
export { DEFAULT_CONFIG_FILES,
|
|
479
|
-
//# sourceMappingURL=github-
|
|
472
|
+
export { DEFAULT_CONFIG_FILES as A, getCommitLogs as C, getLatestTag as D, getLastTagCommit as E, getMatchingTagsCommit as O, getCommitByTag as S, getGithubRepo as T, isNotNull as _, groupByCommits as a, pick as b, transformCommits as c, generateMarkdown as d, applyIncludeExclude as f, filterGitCommitsType as g, resolveConfig as h, generate as i, execCommand as k, formatCommits as l, loadConfigFromFile as m, getGithubHeader as n, parseCommits as o, defineConfig as p, updateReleaseAssets as r, parseGitCommit as s, createRelease as t, formatReference as u, mergeConfig as v, getFirstGitCommit as w, getAllTags as x, normalizeArray as y };
|
|
473
|
+
//# sourceMappingURL=github-B322iVKm.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-B322iVKm.mjs","names":[],"sources":["../src/constants.ts","../src/exec.ts","../src/git.ts","../src/utils.ts","../src/config.ts","../src/markdown.ts","../src/parse.ts","../src/generate.ts","../src/github.ts"],"sourcesContent":["export const DEFAULT_CONFIG_FILES = [\n 'genereleaselog.config.js',\n 'genereleaselog.config.mjs',\n 'genereleaselog.config.ts',\n 'genereleaselog.config.cjs',\n 'genereleaselog.config.mts',\n 'genereleaselog.config.cts',\n]\n","import { x } from 'tinyexec'\n\nexport async function execCommand(cmd: string, args: string[], cwd: string): Promise<string> {\n return (await x(cmd, args, {\n nodeOptions: {\n cwd,\n shell: true,\n },\n })).stdout.trim()\n}\n","import { execCommand } from '@/src/exec.ts'\n\n/**\n * Get github repo\n * @param baseUrl\n * @param cwd\n */\nexport async function getGithubRepo(baseUrl: string, cwd: string): Promise<{ owner: string, repo: string }> {\n // git config --get remote.origin.url | sed -E 's#(git@|https://)github.com[:/]([^/]+)/([^/]+)\\.git#{\"owner\":\"\\2\",\"repo\":\"\\3\"}#'\n const url = await execCommand('git', ['config', '--get', 'remote.origin.url'], cwd)\n const escapedBaseUrl = baseUrl.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const regex = new RegExp(`${escapedBaseUrl}[\\/:]([\\\\w\\\\d._-]+?)\\\\/([\\\\w\\\\d._-]+?)(\\\\.git)?$`, 'i')\n const match = regex.exec(url)\n if (!match)\n throw new Error(`Can not parse GitHub repo from url ${url}`)\n\n return {\n owner: match[1] as string,\n repo: match[2] as string,\n }\n}\n\n/**\n * Get the last commit hash\n * @param cwd\n */\nexport async function getLastTagCommit(cwd: string): Promise<string> {\n // git rev-list -1 HEAD\n return await execCommand('git', ['rev-list', '-1', 'HEAD'], cwd)\n}\n\n/**\n * Get the prev tags commit\n * @param cwd\n */\nexport async function getMatchingTagsCommit(cwd: string): Promise<string> {\n // git tag --sort=-creatordate | sed -n 2p\n const tag = await execCommand('git', ['tag', '--sort=-creatordate', '|', 'sed', '-n', '2p'], cwd)\n return await getCommitByTag(tag, cwd) || await getFirstGitCommit(cwd)\n}\n\n/**\n * Get the latest tag\n * @param cwd\n */\nexport async function getLatestTag(cwd: string): Promise<string> {\n // git describe --tags --abbrev=0\n return await execCommand('git', ['describe', '--tags', '--abbrev=0'], cwd)\n}\n\n/**\n * Get all git tags\n * @param cwd\n */\nexport async function getAllTags(cwd: string) {\n // git tag --sort=-creatordate\n return await execCommand('git', ['tag', '--sort=-creatordate'], cwd)\n}\n\n/**\n * Get first git commit\n * @param cwd\n */\nexport async function getFirstGitCommit(cwd: string): Promise<string> {\n // git rev-list --max-parents=0 HEAD\n return await execCommand('git', ['rev-list', '--max-parents=0', 'HEAD'], cwd)\n}\n\n/**\n * Get commit by tag\n * @param tag\n * @param cwd\n */\nexport async function getCommitByTag(tag: string, cwd: string): Promise<string> {\n // git rev-list -n 1 v0.0.4\n return await execCommand('git', ['rev-list', '-n', '1', `${tag}`], cwd)\n}\n\n/**\n * Get commit logs\n * @param from\n * @param to\n * @param cwd\n */\nexport async function getCommitLogs(from: string, to: string, cwd: string): Promise<string> {\n // git --no-pager log <from>>..<to> --pretty=format:\"---%H|%h|%s|%an|%ae|%ad\" --date=format:\"%Y-%m-%d %H:%M:%S\"\n return await execCommand('git', [\n '--no-pager',\n 'log',\n `${from}..${to}`,\n '--pretty=format:\"---%n%H|%h|%s|%an|%ae|%ad\"',\n '--date=format:\"%Y-%m-%d %H:%M:%S\"',\n '--name-status',\n ], cwd)\n}\n","/**\n * Filter git commits type\n * @param obj\n * @param keysToRemove\n */\nexport function filterGitCommitsType<T extends object, K extends keyof T>(\n obj: T,\n keysToRemove: readonly (keyof T | string)[],\n): Omit<T, K> {\n const entries = Object.entries(obj).filter(\n ([key]) => !keysToRemove.includes(key as K),\n )\n return Object.fromEntries(entries) as Omit<T, K>\n}\n\nexport function pick<T, K extends keyof T>(data: T, keys: K | K[]): Pick<T, K> {\n if (Array.isArray(keys)) {\n return keys.reduce((acc, key) => {\n acc[key] = data[key]\n return acc\n }, {} as Pick<T, K>)\n }\n else {\n return { [keys]: data[keys] } as Pick<T, K>\n }\n}\n\ntype DeepMerge<T, U> = {\n [K in keyof T | keyof U]: K extends keyof U\n ? K extends keyof T\n ? T[K] extends object\n ? U[K] extends object\n ? DeepMerge<T[K], U[K]>\n : U[K]\n : U[K]\n : U[K]\n : K extends keyof T\n ? T[K]\n : never;\n}\n\n/**\n * Merge config\n * @param baseConfig\n * @param overrideConfig\n */\nexport function mergeConfig<T extends object, U extends object>(\n baseConfig: T,\n overrideConfig: U,\n): DeepMerge<T, U> {\n const result = { ...baseConfig } as any\n\n for (const key in overrideConfig) {\n const baseValue = (baseConfig as any)[key]\n const overrideValue = (overrideConfig as any)[key]\n\n if (\n isPlainObject(baseValue)\n && isPlainObject(overrideValue)\n ) {\n result[key] = mergeConfig(baseValue, overrideValue)\n }\n else {\n result[key] = overrideValue\n }\n }\n\n return result\n}\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n return (\n value !== null\n && typeof value === 'object'\n && !Array.isArray(value)\n )\n}\n\nexport function normalizeArray(value: string | string[]): string[] {\n if (typeof value === 'string')\n return value.split(',').map(s => s.trim())\n if (Array.isArray(value))\n return value.map(s => s.trim())\n\n return []\n}\n\nexport function isNotNull<T>(value: T | null): value is T {\n return value !== null\n}\n","import type { ConfigTypes, IChangelogOptions, IUserConfig, ResolvedChangelogOptions } from '@/src/types.ts'\nimport { resolve } from 'node:path'\nimport { findUp } from 'find-up'\nimport { createJiti } from 'jiti'\nimport { DEFAULT_CONFIG_FILES } from '@/src/constants.ts'\nimport { getGithubRepo, getLastTagCommit, getLatestTag, getMatchingTagsCommit } from '@/src/git.ts'\nimport { filterGitCommitsType, mergeConfig, normalizeArray, pick } from '@/src/utils.ts'\n\nconst defaultConfig = {\n types: {\n feat: {\n title: '🎉 Features',\n },\n perf: {\n title: '🔥 Performance',\n },\n fix: {\n title: '🐞 Bug Fixes',\n },\n refactor: {\n title: '💅 Refactors',\n },\n docs: {\n title: '📚 Documentation',\n },\n build: {\n title: '📦 Build',\n },\n types: {\n title: '🌊 Types',\n },\n chore: {\n title: '🏡 Chore',\n },\n examples: {\n title: '🏀 Examples',\n },\n test: {\n title: '✅ Tests',\n },\n style: {\n title: '🎨 Styles',\n },\n ci: {\n title: '🤖 CI',\n },\n },\n from: '',\n to: '',\n cwd: '',\n version: '',\n} satisfies IChangelogOptions\n\nexport function defineConfig(config: IUserConfig): IUserConfig {\n return config\n}\n\n/**\n * Resolve config\n * @param options\n */\nexport async function resolveConfig(options: IChangelogOptions) {\n const { loadConfig } = await import('c12')\n const config = await loadConfig<IChangelogOptions>({\n name: 'genereleaselog',\n defaults: defaultConfig,\n overrides: options,\n }).then((r) => {\n return {\n ...r.config || defaultConfig,\n cwd: r.cwd || process.cwd(),\n }\n })\n\n config.baseUrl = config.baseUrl ?? 'github.com'\n config.baseUrlApi = config.baseUrlApi ?? 'api.github.com'\n config.token = config.token || process.env.GITHUB_TOKEN\n config.version = config.version || await getLatestTag(config.cwd)\n config.from = config.from || await getMatchingTagsCommit(config.cwd)\n config.to = config.to || await getLastTagCommit(config.cwd)\n\n const remote = await getGithubRepo(config.baseUrl, config.cwd)\n config.owner = remote.owner\n config.repo = remote.repo\n\n const loaderResult = await loadConfigFromFile(config.cwd)\n\n if (loaderResult) {\n let types = config.types\n\n if (loaderResult.overrideTypes && loaderResult.types) {\n types = mergeConfig(types, loaderResult.types)\n }\n else {\n types = loaderResult.types ?? types\n }\n\n config.types = Object.fromEntries(\n Object.entries(applyIncludeExclude(types, loaderResult)).filter(([_, value]) => value !== undefined),\n )\n\n config.assets = loaderResult.assets\n config.description = loaderResult.description\n }\n else {\n config.types = options.filter && options.filter !== '' ? filterGitCommitsType(config.types, options.filter.split(',')) : config.types\n }\n\n return config as ResolvedChangelogOptions\n}\n\nexport function applyIncludeExclude(types: ConfigTypes, userConfig: IUserConfig): ConfigTypes {\n if (userConfig.include && userConfig.exclude) {\n return filterGitCommitsType(\n pick(types, normalizeArray(userConfig.include)),\n normalizeArray(userConfig.exclude),\n )\n }\n\n if (userConfig.exclude)\n return filterGitCommitsType(types, normalizeArray(userConfig.exclude))\n\n if (userConfig.include)\n return pick(types, normalizeArray(userConfig.include))\n\n return types\n}\n\nexport async function loadConfigFromFile(cwd: string): Promise<IUserConfig | null> {\n const resolvedPath = await findUp(\n DEFAULT_CONFIG_FILES.map((filePath: string) => resolve(cwd, filePath)),\n ) as string | undefined\n\n if (!resolvedPath) {\n return null\n }\n\n const loader = createJiti(cwd, {\n extensions: ['.js', '.ts', '.mjs', '.cjs', '.mts', '.cts'],\n })\n\n return await loader.import(resolvedPath, { default: true })\n}\n","import type { CategoryGitCommit, GitScopeCommit, IParseCommit, ResolvedChangelogOptions } from '@/src/types.ts'\nimport { convert } from 'convert-gitmoji'\n\nexport function generateMarkdown(commits: CategoryGitCommit, options: ResolvedChangelogOptions) {\n const lines: string[] = []\n\n if (options.description) {\n lines.push(`${options.description}`)\n }\n\n for (const [_, raw] of Object.entries(commits)) {\n lines.push(`### ${raw.title}\\n`)\n for (const scope in raw.scopes as GitScopeCommit) {\n const scopeCommit = raw.scopes[scope] as IParseCommit[]\n const scopeLength = scopeCommit.length\n if (scope === 'other') {\n scopeCommit.forEach((commit: IParseCommit, index: number) => {\n lines.push(`- ${formatCommits(commit, options)}`)\n if (index === scopeLength - 1) {\n lines.push(` `)\n }\n })\n }\n else {\n if (scopeLength === 1) {\n lines.push(`- **${scope}**: ${formatCommits(scopeCommit[0], options)}`)\n lines.push(` `)\n }\n else {\n lines.push(`- **${scope}**`)\n scopeCommit.forEach((commit: IParseCommit, index: number) => {\n lines.push(` - ${formatCommits(commit, options)}`)\n if (index === scopeLength - 1) {\n lines.push(` `)\n }\n })\n }\n }\n }\n }\n\n if (!lines.length)\n lines.push('*No significant changes*')\n\n const url = `https://${options.baseUrl}/${options.owner}/${options.repo}/compare/${options.from}...${options.to}`\n\n lines.push('', `##### [View changes on GitHub](${url})`)\n\n return convert(lines.join('\\n').trim(), true)\n}\n\nexport function formatCommits(commit: IParseCommit, options: ResolvedChangelogOptions): string {\n return [\n ' ',\n `${commit.message}`,\n ' - ',\n 'by',\n ' ',\n `**@${commit.raw.author.authorName}**`,\n ' ',\n commit.pr || commit.issue\n ? ` (${\n commit.pr ? `${formatReference('pull', commit.pr, options)}` : ''\n } ${\n commit.issue ? formatReference('issue', commit.issue, options) : ''\n }) `\n : '',\n `[<samp>(${commit.raw.shortHash})</samp>]`,\n `(https://${options.baseUrl}/${options.owner}/${options.repo}/commit/${commit.raw.shortHash})`,\n ].join('')\n}\n\nexport function formatReference(type: string, value: string, options: ResolvedChangelogOptions): string {\n return `[${value}](https://${options.baseUrl}/${options.owner}/${options.repo}/${type}/${value.replace(/^#/, '')})`\n}\n","import type {\n CategoryGitCommit,\n ConfigTypes,\n IParseCommit,\n IRawGitCommit,\n ResolvedChangelogOptions,\n} from '@/src/types.ts'\nimport { isNotNull } from '@/src/utils.ts'\n\nconst authorCache = new Map<string, string>()\nasync function fetchAuthorName(\n email: string,\n fallback: string,\n): Promise<string> {\n if (!email)\n return fallback\n\n if (authorCache.has(email)) {\n return authorCache.get(email)!\n }\n\n try {\n const res = await fetch(`https://ungh.cc/users/find/${email}`)\n const data = await res.json()\n const authorName = data?.user?.username || fallback\n\n authorCache.set(email, authorName)\n return authorName\n }\n catch {\n return fallback\n }\n}\n\nexport async function transformCommits(\n commit: string,\n): Promise<IRawGitCommit[]> {\n const chunks = commit\n .split('---\\n')\n .slice(1)\n\n return Promise.all(\n chunks.map(async (item) => {\n const [firstLine = '', ...bodyLines] = item.split('\\n')\n\n const [\n commits = '',\n shortHash = '',\n message = '',\n authorName = '',\n authorEmail = '',\n date = '',\n ] = firstLine.split('|').map(s => s.trim())\n\n const resolvedAuthorName = await fetchAuthorName(\n authorEmail,\n authorName,\n )\n\n return {\n commits,\n shortHash,\n message,\n date,\n body: bodyLines.join('\\n').trim(),\n author: {\n authorName: resolvedAuthorName,\n authorEmail,\n },\n }\n }),\n )\n}\n\nexport async function parseCommits(commit: string): Promise<IParseCommit[]> {\n const parsed = await transformCommits(commit)\n return parsed.map(commit => parseGitCommit(commit))\n .filter(isNotNull)\n}\n\nconst ConventionalCommitRegex = /^(?<breaking>!)?(?<type>[a-z]+)(?:\\((?<scope>[^)]+)\\))?(?<breaking1>!)?: (?<message>.+?)(?: \\((?<pr>#\\d+)\\))?$/i\n// /^(?<type>\\w+)(?:\\((?<scope>[^)]+)\\))?: (?<message>.+?)(?: \\((?<pr>#\\d+)\\))?$/\n\nconst IssueRE = /(#\\d+)/\n\n/**\n * Parse a conventional commit message\n * @param commit\n */\nexport function parseGitCommit(commit: IRawGitCommit): IParseCommit | null {\n const match = commit.message.match(ConventionalCommitRegex)\n if (!match) {\n return null\n }\n\n const [, breaking = '', type = '', scope = '', breaking1 = '', message = '', pr = ''] = match\n const issue = commit.message.match(IssueRE)\n\n return {\n raw: commit,\n type,\n scope: scope.trim(),\n message: message.trim(),\n pr,\n issue: issue ? pr !== issue[0] ? issue[0] : '' : '',\n breaking: breaking || breaking1,\n }\n}\n\ninterface Category {\n title: string\n scopes: Record<string, IParseCommit[]>\n}\n\nexport function groupByCommits(commits: IParseCommit[], options: ResolvedChangelogOptions): CategoryGitCommit {\n const configTypes: ConfigTypes = options.types\n const BREAKING_KEY = 'breaking'\n\n const categories: Record<string, Category> = {\n [BREAKING_KEY]: { title: 'Breaking Changes', scopes: {} },\n ...Object.fromEntries(\n Object.entries(configTypes).map(([type, config]) => [\n type,\n { title: config.title, scopes: {} },\n ]),\n ),\n }\n\n for (const parsed of commits) {\n const { type, scope, breaking } = parsed\n\n const categoryKey = breaking ? BREAKING_KEY : configTypes[type] ? type : null\n if (!categoryKey)\n continue\n\n const scopeKey = scope || 'other'\n const category = categories[categoryKey]!\n\n if (!category.scopes[scopeKey]) {\n category.scopes[scopeKey] = []\n }\n\n category.scopes[scopeKey].push(parsed)\n }\n\n return Object.fromEntries(\n Object.entries(categories).filter(([_, value]) => Object.keys(value.scopes).length > 0),\n ) as CategoryGitCommit\n}\n","import type { ResolvedChangelogOptions } from '@/src/types.ts'\nimport { resolveConfig } from '@/src/config.ts'\nimport { getCommitLogs } from '@/src/git.ts'\nimport { generateMarkdown } from '@/src/markdown.ts'\nimport { groupByCommits, parseCommits, transformCommits } from '@/src/parse.ts'\n\nexport async function generate(options: ResolvedChangelogOptions): Promise<any> {\n const config = await resolveConfig(options)\n const rawCommits = await getCommitLogs(config.from, config.to, config.cwd)\n const parsedCommits = await parseCommits(rawCommits)\n const commits = groupByCommits(parsedCommits, config)\n const markdown = generateMarkdown(commits, config)\n\n return {\n config,\n commits,\n markdown,\n rawCommits: transformCommits(rawCommits),\n }\n}\n","import type { IReleaseResult, ResolvedChangelogOptions } from '@/src/types.ts'\nimport { readFile } from 'node:fs/promises'\nimport { basename, resolve } from 'node:path'\nimport { cyan, green, red } from 'ansis'\nimport { glob } from 'glob'\nimport { $fetch } from 'ofetch'\n\nexport async function createRelease(options: ResolvedChangelogOptions, markdown: string): Promise<IReleaseResult> {\n const headers = getGithubHeader(options)\n\n const url = `https://${options.baseUrlApi}/repos/${options.owner}/${options.repo}/releases`\n\n const result = await $fetch<IReleaseResult>(url, {\n method: 'post',\n headers,\n body: JSON.stringify({\n owner: options.owner,\n repo: options.repo,\n tag_name: options.version,\n name: options.version,\n body: markdown,\n draft: false,\n prerelease: false,\n }),\n })\n\n console.log(green(`Released on ${result.html_url}`))\n\n return result\n}\n\nexport function getGithubHeader(options: ResolvedChangelogOptions) {\n return {\n accept: 'application/vnd.github.v3+json',\n authorization: `token ${options.token}`,\n }\n}\n\nexport async function updateReleaseAssets(options: ResolvedChangelogOptions, release: IReleaseResult) {\n const headers = getGithubHeader(options)\n\n let assetList: string[] = []\n if (typeof options.assets === 'string') {\n assetList = options.assets.split(',').map(s => resolve(options.cwd, s.trim())).filter(Boolean)\n }\n else if (Array.isArray(options.assets)) {\n assetList = options.assets.flatMap(item =>\n item.split(',').map(s => resolve(options.cwd, s.trim())),\n ).filter(Boolean)\n }\n\n const expandedAssets: string[] = []\n for (const pattern of assetList) {\n try {\n // Use the pattern directly without shell expansion\n // const matches = await glob(pattern)\n const matches = await glob(pattern)\n if (matches.length) {\n expandedAssets.push(...matches)\n }\n else {\n // If no matches found, treat as literal path\n expandedAssets.push(pattern)\n }\n }\n catch (error) {\n console.error(red(`Failed to process glob pattern \"${pattern}\": ${error}`))\n // Keep the original pattern as fallback\n expandedAssets.push(pattern)\n }\n }\n\n for (const asset of expandedAssets) {\n const filePath = resolve(asset)\n try {\n const fileData = await readFile(filePath)\n const fileName = basename(filePath)\n\n const uploadUrl = release.upload_url.replace('{?name,label}', `?name=${encodeURIComponent(fileName)}`)\n console.log(cyan(`Uploading ${fileName}...`))\n try {\n await $fetch(uploadUrl, {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/octet-stream',\n },\n body: fileData,\n })\n console.log(green(`Uploaded ${fileName} successfully.`))\n }\n catch (error) {\n console.error(red(`Failed to upload ${fileName}: ${error}`))\n }\n }\n catch (error) {\n console.error(red(`Failed to read file ${filePath}: ${error}`))\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -193,4 +193,4 @@ declare function normalizeArray(value: string | string[]): string[];
|
|
|
193
193
|
declare function isNotNull<T>(value: T | null): value is T;
|
|
194
194
|
//#endregion
|
|
195
195
|
export { CategoryGitCommit, ConfigTypes, DEFAULT_CONFIG_FILES, GitScopeCommit, ICategoryRawCommit, IChangelogOptions, IGitCommit, IParseCommit, IRawGitCommit, IReleaseResult, IUserConfig, ResolvedChangelogOptions, applyIncludeExclude, createRelease, defineConfig, execCommand, filterGitCommitsType, formatCommits, formatReference, generate, generateMarkdown, getAllTags, getCommitByTag, getCommitLogs, getFirstGitCommit, getGithubHeader, getGithubRepo, getLastTagCommit, getLatestTag, getMatchingTagsCommit, groupByCommits, isNotNull, loadConfigFromFile, mergeConfig, normalizeArray, parseCommits, parseGitCommit, pick, resolveConfig, transformCommits, updateReleaseAssets };
|
|
196
|
-
//# sourceMappingURL=index.d.
|
|
196
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/config.ts","../src/constants.ts","../src/exec.ts","../src/generate.ts","../src/git.ts","../src/github.ts","../src/markdown.ts","../src/parse.ts","../src/utils.ts"],"mappings":"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"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { A as DEFAULT_CONFIG_FILES, C as getCommitLogs, D as getLatestTag, E as getLastTagCommit, O as getMatchingTagsCommit, S as getCommitByTag, T as getGithubRepo, _ as isNotNull, a as groupByCommits, b as pick, c as transformCommits, d as generateMarkdown, f as applyIncludeExclude, g as filterGitCommitsType, h as resolveConfig, i as generate, k as execCommand, l as formatCommits, m as loadConfigFromFile, n as getGithubHeader, o as parseCommits, p as defineConfig, r as updateReleaseAssets, s as parseGitCommit, t as createRelease, u as formatReference, v as mergeConfig, w as getFirstGitCommit, x as getAllTags, y as normalizeArray } from "./github-B322iVKm.mjs";
|
|
2
|
+
|
|
3
|
+
export { DEFAULT_CONFIG_FILES, applyIncludeExclude, createRelease, defineConfig, execCommand, filterGitCommitsType, formatCommits, formatReference, generate, generateMarkdown, getAllTags, getCommitByTag, getCommitLogs, getFirstGitCommit, getGithubHeader, getGithubRepo, getLastTagCommit, getLatestTag, getMatchingTagsCommit, groupByCommits, isNotNull, loadConfigFromFile, mergeConfig, normalizeArray, parseCommits, parseGitCommit, pick, resolveConfig, transformCommits, updateReleaseAssets };
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "genereleaselog",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.9",
|
|
5
|
+
"packageManager": "pnpm@10.15.1",
|
|
5
6
|
"description": "Generate the Release log in accordance with the GitHub Conventional Commits",
|
|
6
7
|
"author": "lonewolfyx <olddrivero.king@qq.com>",
|
|
7
8
|
"license": "MIT",
|
|
@@ -17,11 +18,11 @@
|
|
|
17
18
|
"changelog",
|
|
18
19
|
"log"
|
|
19
20
|
],
|
|
20
|
-
"main": "dist/index.
|
|
21
|
+
"main": "dist/index.mjs",
|
|
21
22
|
"module": "dist/index.mjs",
|
|
22
|
-
"types": "dist/index.d.
|
|
23
|
+
"types": "dist/index.d.mts",
|
|
23
24
|
"bin": {
|
|
24
|
-
"genereleaselog": "
|
|
25
|
+
"genereleaselog": "bin/index.js"
|
|
25
26
|
},
|
|
26
27
|
"files": [
|
|
27
28
|
"dist"
|
|
@@ -33,7 +34,8 @@
|
|
|
33
34
|
"lint:fix": "eslint --fix",
|
|
34
35
|
"release": "npm run build && npm publish",
|
|
35
36
|
"git:release": "tsx src/cli.ts",
|
|
36
|
-
"prepublishOnly": "npm run build"
|
|
37
|
+
"prepublishOnly": "npm run build",
|
|
38
|
+
"prepare": "simple-git-hooks"
|
|
37
39
|
},
|
|
38
40
|
"publishConfig": {
|
|
39
41
|
"registry": "https://registry.npmjs.org",
|
|
@@ -44,22 +46,20 @@
|
|
|
44
46
|
"c12": "^3.2.0",
|
|
45
47
|
"cac": "^6.7.14",
|
|
46
48
|
"convert-gitmoji": "^0.1.5",
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"glob": "^11.0.3",
|
|
49
|
+
"find-up": "^8.0.0",
|
|
50
|
+
"glob": "^13.0.1",
|
|
50
51
|
"jiti": "^2.5.1",
|
|
51
52
|
"ofetch": "^1.4.1",
|
|
52
|
-
"tinyexec": "^1.0.1"
|
|
53
|
-
"yaml-eslint-parser": "^1.3.0"
|
|
53
|
+
"tinyexec": "^1.0.1"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@antfu/eslint-config": "^
|
|
57
|
-
"@lonewolfyx/tsconfig": "^0.0.
|
|
58
|
-
"@types/node": "^
|
|
56
|
+
"@antfu/eslint-config": "^7.2.0",
|
|
57
|
+
"@lonewolfyx/tsconfig": "^0.0.6",
|
|
58
|
+
"@types/node": "^25.2.1",
|
|
59
59
|
"eslint": "^9.33.0",
|
|
60
60
|
"lint-staged": "^16.1.5",
|
|
61
61
|
"simple-git-hooks": "^2.13.1",
|
|
62
|
-
"tsdown": "^0.
|
|
62
|
+
"tsdown": "^0.20.3",
|
|
63
63
|
"tsx": "^4.20.4",
|
|
64
64
|
"typescript": "^5.9.2"
|
|
65
65
|
},
|
package/dist/cli.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","names":["content: string","options: ResolvedChangelogOptions","lines: string[]","resolve","options: IChangelogOptions"],"sources":["../src/changelog.ts","../package.json","../src/cli.ts"],"sourcesContent":["import type { ResolvedChangelogOptions } from '@/src/types.ts'\nimport { createReadStream, createWriteStream, existsSync, writeFileSync } from 'node:fs'\nimport { rename } from 'node:fs/promises'\nimport * as path from 'node:path'\nimport { convert } from 'convert-gitmoji'\n\nexport async function writeChangeLog(content: string, options: ResolvedChangelogOptions) {\n const lines: string[] = []\n\n lines.push(`## ${options.version}\\n`)\n\n lines.push(content)\n\n const logMD = convert(lines.join('\\n').trim(), true)\n\n const filePath = path.resolve(options.cwd, options?.output || 'CHANGELOG.md')\n if (!existsSync(filePath)) {\n writeFileSync(filePath, '')\n }\n const tmpFile = `${filePath}.tmp`\n\n const ws = createWriteStream(tmpFile, { encoding: 'utf-8' })\n ws.write(`${logMD}\\n\\n`)\n\n await new Promise<void>((resolve, reject) => {\n const rs = createReadStream(filePath)\n rs.pipe(ws, { end: false })\n rs.on('end', () => {\n ws.end()\n resolve()\n })\n rs.on('error', reject)\n })\n\n await rename(tmpFile, filePath)\n}\n","{\n \"name\": \"genereleaselog\",\n \"type\": \"module\",\n \"version\": \"0.0.7\",\n \"description\": \"Generate the Release log in accordance with the GitHub Conventional Commits\",\n \"author\": \"lonewolfyx <olddrivero.king@qq.com>\",\n \"license\": \"MIT\",\n \"homepage\": \"https://github.com/ScaffoldCore/genereleaselog\",\n \"bugs\": {\n \"url\": \"https://github.com/ScaffoldCore/genereleaselog/issues\"\n },\n \"keywords\": [\n \"github\",\n \"release\",\n \"releases\",\n \"conventional\",\n \"changelog\",\n \"log\"\n ],\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"genereleaselog\": \"./src/bin/index.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"dev\": \"tsdown --watch\",\n \"build\": \"tsdown\",\n \"lint\": \"eslint\",\n \"lint:fix\": \"eslint --fix\",\n \"release\": \"npm run build && npm publish\",\n \"git:release\": \"tsx src/cli.ts\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"publishConfig\": {\n \"registry\": \"https://registry.npmjs.org\",\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"ansis\": \"^4.1.0\",\n \"c12\": \"^3.2.0\",\n \"cac\": \"^6.7.14\",\n \"convert-gitmoji\": \"^0.1.5\",\n \"eslint-plugin-yml\": \"^1.18.0\",\n \"find-up\": \"^7.0.0\",\n \"glob\": \"^11.0.3\",\n \"jiti\": \"^2.5.1\",\n \"ofetch\": \"^1.4.1\",\n \"tinyexec\": \"^1.0.1\",\n \"yaml-eslint-parser\": \"^1.3.0\"\n },\n \"devDependencies\": {\n \"@antfu/eslint-config\": \"^5.2.1\",\n \"@lonewolfyx/tsconfig\": \"^0.0.5\",\n \"@types/node\": \"^24.2.1\",\n \"eslint\": \"^9.33.0\",\n \"lint-staged\": \"^16.1.5\",\n \"simple-git-hooks\": \"^2.13.1\",\n \"tsdown\": \"^0.14.1\",\n \"tsx\": \"^4.20.4\",\n \"typescript\": \"^5.9.2\"\n },\n \"simple-git-hooks\": {\n \"pre-commit\": \"npx lint-staged\"\n },\n \"lint-staged\": {\n \"*\": \"eslint --fix\"\n }\n}\n","import type { IChangelogOptions } from '@/src/types.ts'\nimport { blue, cyan, dim, red, yellow } from 'ansis'\nimport cac from 'cac'\nimport { writeChangeLog } from '@/src/changelog.ts'\nimport { generate } from '@/src/generate.ts'\nimport { createRelease, updateReleaseAssets } from '@/src/github.ts'\nimport { version } from '../package.json'\n\nconst cli = cac('genereleaselog')\n\ncli.command('')\n .option('--token <token>', 'Github Token', { default: '' })\n .option('--from <ref>', 'From tag', { default: '' })\n .option('--to <ref>', 'To tag', { default: '' })\n .option('--output <output>', 'Output file path', { default: 'CHANGELOG.md' })\n .option('--filter <filter>', 'Filter Conventional Commits Type', { default: '' })\n .option('--assets <assets...>', 'Files to upload as assets to the release. Use quotes to prevent shell glob expansion, e.g., \"--assets \\'dist/*.js\\'\"')\n .option('--description <description>', 'Changelog release placeholder description', { default: '' })\n .action(async (options: IChangelogOptions) => {\n console.log()\n console.log(dim(`genereleaselog `) + dim(`v${version}`))\n console.log()\n\n const { config, rawCommits, markdown } = await generate(options as any)\n const webUrl = `https://${config.baseUrl}/${config.owner}/${config.repo}/releases/new?title=${encodeURIComponent(String(config.version))}&body=${encodeURIComponent(String(markdown))}&tag=${encodeURIComponent(String(config.version))}`\n\n console.log(cyan(config.from) + dim(' -> ') + blue(config.to) + dim(` (${rawCommits.length} commits)`))\n console.log(dim('--------------'))\n console.log()\n console.log(markdown.replace(/ /g, ''))\n console.log()\n console.log(dim('--------------'))\n\n const printWebUrl = () => {\n console.log()\n console.error(yellow('Using the following link to create it manually:'))\n console.error(yellow(webUrl))\n console.log()\n }\n\n if (config.output && config.output !== 'false') {\n await writeChangeLog(markdown, config)\n }\n\n if (!config.token) {\n console.error(red('No GitHub token found, specify it via GITHUB_TOKEN env. Release skipped.'))\n printWebUrl()\n process.exit(1)\n }\n\n const release = await createRelease(config, markdown)\n\n if (config.assets && config) {\n await updateReleaseAssets(config, release)\n }\n })\n\ncli.help()\ncli.version(version)\ncli.parse()\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"github-DmgcZboa.js","names":["cmd: string","args: string[]","cwd: string","baseUrl: string","cwd: string","tag: string","from: string","to: string","obj: T","keysToRemove: readonly (keyof T | string)[]","data: T","keys: K | K[]","baseConfig: T","overrideConfig: U","value: any","value: string | string[]","value: T | null","config: IUserConfig","options: IChangelogOptions","types: ConfigTypes","userConfig: IUserConfig","cwd: string","filePath: string","commits: CategoryGitCommit","options: ResolvedChangelogOptions","lines: string[]","commit: IParseCommit","index: number","type: string","value: string","email: string","fallback: string","commit: string","commit","commit: IRawGitCommit","commits: IParseCommit[]","options: ResolvedChangelogOptions","configTypes: ConfigTypes","categories: Record<string, Category>","options: ResolvedChangelogOptions","options: ResolvedChangelogOptions","markdown: string","release: IReleaseResult","assetList: string[]","expandedAssets: string[]"],"sources":["../src/constants.ts","../src/exec.ts","../src/git.ts","../src/utils.ts","../src/config.ts","../src/markdown.ts","../src/parse.ts","../src/generate.ts","../src/github.ts"],"sourcesContent":["export const DEFAULT_CONFIG_FILES = [\n 'genereleaselog.config.js',\n 'genereleaselog.config.mjs',\n 'genereleaselog.config.ts',\n 'genereleaselog.config.cjs',\n 'genereleaselog.config.mts',\n 'genereleaselog.config.cts',\n]\n","import { x } from 'tinyexec'\n\nexport async function execCommand(cmd: string, args: string[], cwd: string): Promise<string> {\n return (await x(cmd, args, {\n nodeOptions: {\n cwd,\n shell: true,\n },\n })).stdout.trim()\n}\n","import { execCommand } from '@/src/exec.ts'\n\n/**\n * Get github repo\n * @param baseUrl\n * @param cwd\n */\nexport async function getGithubRepo(baseUrl: string, cwd: string): Promise<{ owner: string, repo: string }> {\n // git config --get remote.origin.url | sed -E 's#(git@|https://)github.com[:/]([^/]+)/([^/]+)\\.git#{\"owner\":\"\\2\",\"repo\":\"\\3\"}#'\n const url = await execCommand('git', ['config', '--get', 'remote.origin.url'], cwd)\n const escapedBaseUrl = baseUrl.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const regex = new RegExp(`${escapedBaseUrl}[\\/:]([\\\\w\\\\d._-]+?)\\\\/([\\\\w\\\\d._-]+?)(\\\\.git)?$`, 'i')\n const match = regex.exec(url)\n if (!match)\n throw new Error(`Can not parse GitHub repo from url ${url}`)\n\n return {\n owner: match[1] as string,\n repo: match[2] as string,\n }\n}\n\n/**\n * Get the last commit hash\n * @param cwd\n */\nexport async function getLastTagCommit(cwd: string): Promise<string> {\n // git rev-list -1 HEAD\n return await execCommand('git', ['rev-list', '-1', 'HEAD'], cwd)\n}\n\n/**\n * Get the prev tags commit\n * @param cwd\n */\nexport async function getMatchingTagsCommit(cwd: string): Promise<string> {\n // git tag --sort=-creatordate | sed -n 2p\n const tag = await execCommand('git', ['tag', '--sort=-creatordate', '|', 'sed', '-n', '2p'], cwd)\n return await getCommitByTag(tag, cwd) || await getFirstGitCommit(cwd)\n}\n\n/**\n * Get the latest tag\n * @param cwd\n */\nexport async function getLatestTag(cwd: string): Promise<string> {\n // git describe --tags --abbrev=0\n return await execCommand('git', ['describe', '--tags', '--abbrev=0'], cwd)\n}\n\n/**\n * Get all git tags\n * @param cwd\n */\nexport async function getAllTags(cwd: string) {\n // git tag --sort=-creatordate\n return await execCommand('git', ['tag', '--sort=-creatordate'], cwd)\n}\n\n/**\n * Get first git commit\n * @param cwd\n */\nexport async function getFirstGitCommit(cwd: string): Promise<string> {\n // git rev-list --max-parents=0 HEAD\n return await execCommand('git', ['rev-list', '--max-parents=0', 'HEAD'], cwd)\n}\n\n/**\n * Get commit by tag\n * @param tag\n * @param cwd\n */\nexport async function getCommitByTag(tag: string, cwd: string): Promise<string> {\n // git rev-list -n 1 v0.0.4\n return await execCommand('git', ['rev-list', '-n', '1', `${tag}`], cwd)\n}\n\n/**\n * Get commit logs\n * @param from\n * @param to\n * @param cwd\n */\nexport async function getCommitLogs(from: string, to: string, cwd: string): Promise<string> {\n // git --no-pager log <from>>..<to> --pretty=format:\"---%H|%h|%s|%an|%ae|%ad\" --date=format:\"%Y-%m-%d %H:%M:%S\"\n return await execCommand('git', [\n '--no-pager',\n 'log',\n `${from}..${to}`,\n '--pretty=format:\"---%n%H|%h|%s|%an|%ae|%ad\"',\n '--date=format:\"%Y-%m-%d %H:%M:%S\"',\n '--name-status',\n ], cwd)\n}\n","/**\n * Filter git commits type\n * @param obj\n * @param keysToRemove\n */\nexport function filterGitCommitsType<T extends object, K extends keyof T>(\n obj: T,\n keysToRemove: readonly (keyof T | string)[],\n): Omit<T, K> {\n const entries = Object.entries(obj).filter(\n ([key]) => !keysToRemove.includes(key as K),\n )\n return Object.fromEntries(entries) as Omit<T, K>\n}\n\nexport function pick<T, K extends keyof T>(data: T, keys: K | K[]): Pick<T, K> {\n if (Array.isArray(keys)) {\n return keys.reduce((acc, key) => {\n acc[key] = data[key]\n return acc\n }, {} as Pick<T, K>)\n }\n else {\n return { [keys]: data[keys] } as Pick<T, K>\n }\n}\n\ntype DeepMerge<T, U> = {\n [K in keyof T | keyof U]: K extends keyof U\n ? K extends keyof T\n ? T[K] extends object\n ? U[K] extends object\n ? DeepMerge<T[K], U[K]>\n : U[K]\n : U[K]\n : U[K]\n : K extends keyof T\n ? T[K]\n : never;\n}\n\n/**\n * Merge config\n * @param baseConfig\n * @param overrideConfig\n */\nexport function mergeConfig<T extends object, U extends object>(\n baseConfig: T,\n overrideConfig: U,\n): DeepMerge<T, U> {\n const result = { ...baseConfig } as any\n\n for (const key in overrideConfig) {\n const baseValue = (baseConfig as any)[key]\n const overrideValue = (overrideConfig as any)[key]\n\n if (\n isPlainObject(baseValue)\n && isPlainObject(overrideValue)\n ) {\n result[key] = mergeConfig(baseValue, overrideValue)\n }\n else {\n result[key] = overrideValue\n }\n }\n\n return result\n}\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n return (\n value !== null\n && typeof value === 'object'\n && !Array.isArray(value)\n )\n}\n\nexport function normalizeArray(value: string | string[]): string[] {\n if (typeof value === 'string')\n return value.split(',').map(s => s.trim())\n if (Array.isArray(value))\n return value.map(s => s.trim())\n\n return []\n}\n\nexport function isNotNull<T>(value: T | null): value is T {\n return value !== null\n}\n","import type { ConfigTypes, IChangelogOptions, IUserConfig, ResolvedChangelogOptions } from '@/src/types.ts'\nimport { resolve } from 'node:path'\nimport { findUp } from 'find-up'\nimport { createJiti } from 'jiti'\nimport { DEFAULT_CONFIG_FILES } from '@/src/constants.ts'\nimport { getGithubRepo, getLastTagCommit, getLatestTag, getMatchingTagsCommit } from '@/src/git.ts'\nimport { filterGitCommitsType, mergeConfig, normalizeArray, pick } from '@/src/utils.ts'\n\nconst defaultConfig = {\n types: {\n feat: {\n title: '🎉 Features',\n },\n perf: {\n title: '🔥 Performance',\n },\n fix: {\n title: '🐞 Bug Fixes',\n },\n refactor: {\n title: '💅 Refactors',\n },\n docs: {\n title: '📚 Documentation',\n },\n build: {\n title: '📦 Build',\n },\n types: {\n title: '🌊 Types',\n },\n chore: {\n title: '🏡 Chore',\n },\n examples: {\n title: '🏀 Examples',\n },\n test: {\n title: '✅ Tests',\n },\n style: {\n title: '🎨 Styles',\n },\n ci: {\n title: '🤖 CI',\n },\n },\n from: '',\n to: '',\n cwd: '',\n version: '',\n} satisfies IChangelogOptions\n\nexport function defineConfig(config: IUserConfig): IUserConfig {\n return config\n}\n\n/**\n * Resolve config\n * @param options\n */\nexport async function resolveConfig(options: IChangelogOptions) {\n const { loadConfig } = await import('c12')\n const config = await loadConfig<IChangelogOptions>({\n name: 'genereleaselog',\n defaults: defaultConfig,\n overrides: options,\n }).then((r) => {\n return {\n ...r.config || defaultConfig,\n cwd: r.cwd || process.cwd(),\n }\n })\n\n config.baseUrl = config.baseUrl ?? 'github.com'\n config.baseUrlApi = config.baseUrlApi ?? 'api.github.com'\n config.token = config.token || process.env.GITHUB_TOKEN\n config.version = config.version || await getLatestTag(config.cwd)\n config.from = config.from || await getMatchingTagsCommit(config.cwd)\n config.to = config.to || await getLastTagCommit(config.cwd)\n\n const remote = await getGithubRepo(config.baseUrl, config.cwd)\n config.owner = remote.owner\n config.repo = remote.repo\n\n const loaderResult = await loadConfigFromFile(config.cwd)\n\n if (loaderResult) {\n let types = config.types\n\n if (loaderResult.overrideTypes && loaderResult.types) {\n types = mergeConfig(types, loaderResult.types)\n }\n else {\n types = loaderResult.types ?? types\n }\n\n config.types = Object.fromEntries(\n Object.entries(applyIncludeExclude(types, loaderResult)).filter(([_, value]) => value !== undefined),\n )\n\n config.assets = loaderResult.assets\n config.description = loaderResult.description\n }\n else {\n config.types = options.filter && options.filter !== '' ? filterGitCommitsType(config.types, options.filter.split(',')) : config.types\n }\n\n return config as ResolvedChangelogOptions\n}\n\nexport function applyIncludeExclude(types: ConfigTypes, userConfig: IUserConfig): ConfigTypes {\n if (userConfig.include && userConfig.exclude) {\n return filterGitCommitsType(\n pick(types, normalizeArray(userConfig.include)),\n normalizeArray(userConfig.exclude),\n )\n }\n\n if (userConfig.exclude)\n return filterGitCommitsType(types, normalizeArray(userConfig.exclude))\n\n if (userConfig.include)\n return pick(types, normalizeArray(userConfig.include))\n\n return types\n}\n\nexport async function loadConfigFromFile(cwd: string): Promise<IUserConfig | null> {\n const resolvedPath = await findUp(\n DEFAULT_CONFIG_FILES.map((filePath: string) => resolve(cwd, filePath)),\n ) as string | undefined\n\n if (!resolvedPath) {\n return null\n }\n\n const loader = createJiti(cwd, {\n extensions: ['.js', '.ts', '.mjs', '.cjs', '.mts', '.cts'],\n })\n\n return await loader.import(resolvedPath, { default: true })\n}\n","import type { CategoryGitCommit, GitScopeCommit, IParseCommit, ResolvedChangelogOptions } from '@/src/types.ts'\nimport { convert } from 'convert-gitmoji'\n\nexport function generateMarkdown(commits: CategoryGitCommit, options: ResolvedChangelogOptions) {\n const lines: string[] = []\n\n if (options.description) {\n lines.push(`${options.description}`)\n }\n\n for (const [_, raw] of Object.entries(commits)) {\n lines.push(`### ${raw.title}\\n`)\n for (const scope in raw.scopes as GitScopeCommit) {\n const scopeCommit = raw.scopes[scope] as IParseCommit[]\n const scopeLength = scopeCommit.length\n if (scope === 'other') {\n scopeCommit.forEach((commit: IParseCommit, index: number) => {\n lines.push(`- ${formatCommits(commit, options)}`)\n if (index === scopeLength - 1) {\n lines.push(` `)\n }\n })\n }\n else {\n lines.push(`- **${scope}**`)\n scopeCommit.forEach((commit: IParseCommit, index: number) => {\n lines.push(` - ${formatCommits(commit, options)}`)\n if (index === scopeLength - 1) {\n lines.push(` `)\n }\n })\n }\n }\n }\n\n if (!lines.length)\n lines.push('*No significant changes*')\n\n const url = `https://${options.baseUrl}/${options.owner}/${options.repo}/compare/${options.from}...${options.to}`\n\n lines.push('', `##### [View changes on GitHub](${url})`)\n\n return convert(lines.join('\\n').trim(), true)\n}\n\nexport function formatCommits(commit: IParseCommit, options: ResolvedChangelogOptions): string {\n return [\n ' ',\n `${commit.message}`,\n ' - ',\n 'by',\n ' ',\n `**@${commit.raw.author.authorName}**`,\n ' ',\n commit.pr || commit.issue\n ? ` (${\n commit.pr ? `${formatReference('pull', commit.pr, options)}` : ''\n } ${\n commit.issue ? formatReference('issue', commit.issue, options) : ''\n }) `\n : '',\n `[<samp>(${commit.raw.shortHash})</samp>]`,\n `(https://${options.baseUrl}/${options.owner}/${options.repo}/commit/${commit.raw.shortHash})`,\n ].join('')\n}\n\nexport function formatReference(type: string, value: string, options: ResolvedChangelogOptions): string {\n return `[${value}](https://${options.baseUrl}/${options.owner}/${options.repo}/${type}/${value.replace(/^#/, '')})`\n}\n","import type {\n CategoryGitCommit,\n ConfigTypes,\n IParseCommit,\n IRawGitCommit,\n ResolvedChangelogOptions,\n} from '@/src/types.ts'\nimport { isNotNull } from '@/src/utils.ts'\n\nconst authorCache = new Map<string, string>()\nasync function fetchAuthorName(\n email: string,\n fallback: string,\n): Promise<string> {\n if (!email)\n return fallback\n\n if (authorCache.has(email)) {\n return authorCache.get(email)!\n }\n\n try {\n const res = await fetch(`https://ungh.cc/users/find/${email}`)\n const data = await res.json()\n const authorName = data?.user?.username || fallback\n\n authorCache.set(email, authorName)\n return authorName\n }\n catch {\n return fallback\n }\n}\n\nexport async function transformCommits(\n commit: string,\n): Promise<IRawGitCommit[]> {\n const chunks = commit\n .split('---\\n')\n .slice(1)\n\n return Promise.all(\n chunks.map(async (item) => {\n const [firstLine = '', ...bodyLines] = item.split('\\n')\n\n const [\n commits = '',\n shortHash = '',\n message = '',\n authorName = '',\n authorEmail = '',\n date = '',\n ] = firstLine.split('|').map(s => s.trim())\n\n const resolvedAuthorName = await fetchAuthorName(\n authorEmail,\n authorName,\n )\n\n return {\n commits,\n shortHash,\n message,\n date,\n body: bodyLines.join('\\n').trim(),\n author: {\n authorName: resolvedAuthorName,\n authorEmail,\n },\n }\n }),\n )\n}\n\nexport async function parseCommits(commit: string): Promise<IParseCommit[]> {\n const parsed = await transformCommits(commit)\n return parsed.map(commit => parseGitCommit(commit))\n .filter(isNotNull)\n}\n\nconst ConventionalCommitRegex = /^(?<breaking>!)?(?<type>[a-z]+)(?:\\((?<scope>[^)]+)\\))?(?<breaking1>!)?: (?<message>.+?)(?: \\((?<pr>#\\d+)\\))?$/i\n// /^(?<type>\\w+)(?:\\((?<scope>[^)]+)\\))?: (?<message>.+?)(?: \\((?<pr>#\\d+)\\))?$/\n\nconst IssueRE = /(#\\d+)/\n\n/**\n * Parse a conventional commit message\n * @param commit\n */\nexport function parseGitCommit(commit: IRawGitCommit): IParseCommit | null {\n const match = commit.message.match(ConventionalCommitRegex)\n if (!match) {\n return null\n }\n\n const [, breaking = '', type = '', scope = '', breaking1 = '', message = '', pr = ''] = match\n const issue = commit.message.match(IssueRE)\n\n return {\n raw: commit,\n type,\n scope: scope.trim(),\n message: message.trim(),\n pr,\n issue: issue ? pr !== issue[0] ? issue[0] : '' : '',\n breaking: breaking || breaking1,\n }\n}\n\ninterface Category {\n title: string\n scopes: Record<string, IParseCommit[]>\n}\n\nexport function groupByCommits(commits: IParseCommit[], options: ResolvedChangelogOptions): CategoryGitCommit {\n const configTypes: ConfigTypes = options.types\n const BREAKING_KEY = 'breaking'\n\n const categories: Record<string, Category> = {\n [BREAKING_KEY]: { title: 'Breaking Changes', scopes: {} },\n ...Object.fromEntries(\n Object.entries(configTypes).map(([type, config]) => [\n type,\n { title: config.title, scopes: {} },\n ]),\n ),\n }\n\n for (const parsed of commits) {\n const { type, scope, breaking } = parsed\n\n const categoryKey = breaking ? BREAKING_KEY : configTypes[type] ? type : null\n if (!categoryKey)\n continue\n\n const scopeKey = scope || 'other'\n const category = categories[categoryKey]!\n\n if (!category.scopes[scopeKey]) {\n category.scopes[scopeKey] = []\n }\n\n category.scopes[scopeKey].push(parsed)\n }\n\n return Object.fromEntries(\n Object.entries(categories).filter(([_, value]) => Object.keys(value.scopes).length > 0),\n ) as CategoryGitCommit\n}\n","import type { ResolvedChangelogOptions } from '@/src/types.ts'\nimport { resolveConfig } from '@/src/config.ts'\nimport { getCommitLogs } from '@/src/git.ts'\nimport { generateMarkdown } from '@/src/markdown.ts'\nimport { groupByCommits, parseCommits, transformCommits } from '@/src/parse.ts'\n\nexport async function generate(options: ResolvedChangelogOptions): Promise<any> {\n const config = await resolveConfig(options)\n const rawCommits = await getCommitLogs(config.from, config.to, config.cwd)\n const parsedCommits = await parseCommits(rawCommits)\n const commits = groupByCommits(parsedCommits, config)\n const markdown = generateMarkdown(commits, config)\n\n return {\n config,\n commits,\n markdown,\n rawCommits: transformCommits(rawCommits),\n }\n}\n","import type { IReleaseResult, ResolvedChangelogOptions } from '@/src/types.ts'\nimport { readFile } from 'node:fs/promises'\nimport { basename, resolve } from 'node:path'\nimport { cyan, green, red } from 'ansis'\nimport { glob } from 'glob'\nimport { $fetch } from 'ofetch'\n\nexport async function createRelease(options: ResolvedChangelogOptions, markdown: string): Promise<IReleaseResult> {\n const headers = getGithubHeader(options)\n\n const url = `https://${options.baseUrlApi}/repos/${options.owner}/${options.repo}/releases`\n\n const result = await $fetch<IReleaseResult>(url, {\n method: 'post',\n headers,\n body: JSON.stringify({\n owner: options.owner,\n repo: options.repo,\n tag_name: options.version,\n name: options.version,\n body: markdown,\n draft: false,\n prerelease: false,\n }),\n })\n\n console.log(green(`Released on ${result.html_url}`))\n\n return result\n}\n\nexport function getGithubHeader(options: ResolvedChangelogOptions) {\n return {\n accept: 'application/vnd.github.v3+json',\n authorization: `token ${options.token}`,\n }\n}\n\nexport async function updateReleaseAssets(options: ResolvedChangelogOptions, release: IReleaseResult) {\n const headers = getGithubHeader(options)\n\n let assetList: string[] = []\n if (typeof options.assets === 'string') {\n assetList = options.assets.split(',').map(s => resolve(options.cwd, s.trim())).filter(Boolean)\n }\n else if (Array.isArray(options.assets)) {\n assetList = options.assets.flatMap(item =>\n item.split(',').map(s => resolve(options.cwd, s.trim())),\n ).filter(Boolean)\n }\n\n const expandedAssets: string[] = []\n for (const pattern of assetList) {\n try {\n // Use the pattern directly without shell expansion\n // const matches = await glob(pattern)\n const matches = await glob(pattern)\n if (matches.length) {\n expandedAssets.push(...matches)\n }\n else {\n // If no matches found, treat as literal path\n expandedAssets.push(pattern)\n }\n }\n catch (error) {\n console.error(red(`Failed to process glob pattern \"${pattern}\": ${error}`))\n // Keep the original pattern as fallback\n expandedAssets.push(pattern)\n }\n }\n\n for (const asset of expandedAssets) {\n const filePath = resolve(asset)\n try {\n const fileData = await readFile(filePath)\n const fileName = basename(filePath)\n\n const uploadUrl = release.upload_url.replace('{?name,label}', `?name=${encodeURIComponent(fileName)}`)\n console.log(cyan(`Uploading ${fileName}...`))\n try {\n await $fetch(uploadUrl, {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/octet-stream',\n },\n body: fileData,\n })\n console.log(green(`Uploaded ${fileName} successfully.`))\n }\n catch (error) {\n console.error(red(`Failed to upload ${fileName}: ${error}`))\n }\n }\n catch (error) {\n console.error(red(`Failed to read file ${filePath}: ${error}`))\n }\n }\n}\n"],"mappings":"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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/config.ts","../src/constants.ts","../src/exec.ts","../src/generate.ts","../src/git.ts","../src/github.ts","../src/markdown.ts","../src/parse.ts","../src/utils.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { DEFAULT_CONFIG_FILES, applyIncludeExclude, createRelease, defineConfig, execCommand, filterGitCommitsType, formatCommits, formatReference, generate, generateMarkdown, getAllTags, getCommitByTag, getCommitLogs, getFirstGitCommit, getGithubHeader, getGithubRepo, getLastTagCommit, getLatestTag, getMatchingTagsCommit, groupByCommits, isNotNull, loadConfigFromFile, mergeConfig, normalizeArray, parseCommits, parseGitCommit, pick, resolveConfig, transformCommits, updateReleaseAssets } from "./github-DmgcZboa.js";
|
|
2
|
-
|
|
3
|
-
export { DEFAULT_CONFIG_FILES, applyIncludeExclude, createRelease, defineConfig, execCommand, filterGitCommitsType, formatCommits, formatReference, generate, generateMarkdown, getAllTags, getCommitByTag, getCommitLogs, getFirstGitCommit, getGithubHeader, getGithubRepo, getLastTagCommit, getLatestTag, getMatchingTagsCommit, groupByCommits, isNotNull, loadConfigFromFile, mergeConfig, normalizeArray, parseCommits, parseGitCommit, pick, resolveConfig, transformCommits, updateReleaseAssets };
|
package/src/bin/index.js
DELETED