@jeromefitz/release-notes-generator 4.1.0 → 4.1.1-canary.1
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/index.mjs.map +1 -1
- package/package.json +2 -2
package/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["_format","_get","semverValid","semverPatch"],"sources":["../src/utils/getCommitGroups.ts","../src/templates/commit.ts","../src/templates/contributor.ts","../src/templates/footer.ts","../src/templates/header.ts","../src/utils/getMarkdown.ts","../src/utils/getNoteGroups.ts","../src/utils/processCommit.ts","../src/index.ts"],"sourcesContent":["import type { CommitGroup, TransformedCommit } from '../types'\n\nfunction multiKeySort<T>(keys: string[]): (a: T, b: T) => number {\n return (a, b) => {\n const ar = a as Record<string, unknown>\n const br = b as Record<string, unknown>\n for (const key of keys) {\n const av = ar[key] ?? 0\n const bv = br[key] ?? 0\n if (av < bv) return -1\n if (av > bv) return 1\n }\n return 0\n }\n}\n\nfunction semverToOrder(semver: string | null | undefined): number {\n if (semver && ['breaking', 'major'].includes(semver)) return 0\n if (semver && ['feature', 'minor'].includes(semver)) return 10\n if (semver && ['fix', 'patch'].includes(semver)) return 20\n return 99\n}\n\nfunction toCommitGroup(\n title: string,\n groupCommits: TransformedCommit[] | undefined,\n commitsSort: string[],\n): CommitGroup {\n const sorted =\n commitsSort.length > 0\n ? [...(groupCommits ?? [])].sort(multiKeySort<TransformedCommit>(commitsSort))\n : [...(groupCommits ?? [])]\n\n return {\n commits: sorted,\n order: semverToOrder(sorted[0]?.typeSpec?.semver),\n title: title === '' ? false : title,\n }\n}\n\nfunction getCommitGroups(\n groupBy: string,\n commits: TransformedCommit[],\n commitGroupsSort: string[],\n commitsSort: string[],\n): CommitGroup[] {\n const grouped = Object.groupBy(\n commits,\n (commit) => (commit[groupBy] as string | undefined) ?? '',\n )\n\n const commitGroups = Object.entries(grouped).map(([title, group]) =>\n toCommitGroup(title, group, commitsSort),\n )\n\n return commitGroupsSort.length > 0\n ? commitGroups.sort(multiKeySort<CommitGroup>(commitGroupsSort))\n : commitGroups\n}\n\nexport { getCommitGroups }\n","import type { CommitReference } from 'conventional-commits-parser'\n\nimport type { MarkdownContext, RenderMeta, TransformedCommit } from '../types'\n\nconst commit = (\n context: MarkdownContext,\n commits: TransformedCommit[],\n meta: RenderMeta,\n): string => {\n const { commit: commitPath, commitGroups, linkReferences } = context\n const { repositoryUrl } = meta\n\n const commitFormat = `- {scope}{subject}{hash}{references}\\n`\n\n const getHash = (hash: string | undefined): string => {\n if (!hash) return ''\n if (linkReferences) {\n return ` [ \\`${hash}\\` ](${repositoryUrl}/${commitPath}/${hash})`\n }\n return ` ${hash}`\n }\n\n const getReferences = (references: CommitReference[]): string => {\n if (references.length === 0) return ''\n const items = references\n .filter((ref) => ref.issue)\n .map((ref) => `[ #${ref.issue} ]`)\n return items.length > 0 ? `, closes ${items.join(' ')}` : ''\n }\n\n let markdown = ''\n\n for (const commitGroup of commitGroups) {\n const groupType = commitGroup.commits[0]?.typeSpec?.type\n markdown += `#### ${commitGroup.commits[0]?.type}\\n`\n\n for (const c of commits) {\n if (groupType !== c.typeSpec?.type) continue\n const { hash, header, references = [], scope, subject } = c\n markdown += commitFormat\n .replace(/\\{scope\\}/g, scope ? `**${scope}**: ` : '')\n .replace(/\\{subject\\}/g, subject ?? header ?? '')\n .replace(/\\{hash\\}/g, getHash(hash))\n .replace(/\\{references\\}/g, getReferences(references as CommitReference[]))\n }\n\n markdown += '\\n'\n }\n\n return markdown\n}\n\nexport { commit }\n","import type { MarkdownContext, RenderMeta, TransformedCommit } from '../types'\n\nimport { Octokit } from '@octokit/rest'\n\nconst gh = new Octokit({ auth: process.env.GH_TOKEN })\n\ninterface Author {\n email: string\n login?: string\n name: string\n}\n\nconst contributorsProhibitListDefault = {\n email: [\n 'noreply@github.com',\n 'users.noreply.github.com',\n 'semantic-release-bot@martynus.net',\n ],\n login: [\n 'dependabot',\n 'dependabot[bot]',\n 'kodiakhq',\n 'kodiakhq[bot]',\n 'renovate',\n 'renovate[bot]',\n 'semantic-release-bot',\n ],\n}\n\nconst contributorsSubtitle = [\n 'Props to',\n 'Kudos to',\n 'Thanks to',\n 'Brought to you by',\n]\n\nconst sample = <T>(arr: T[]): T => arr[Math.floor(Math.random() * arr.length)]\n\nconst uniqByName = (authors: Author[]): Author[] => {\n const seen = new Map<string, Author>()\n for (const a of authors) {\n if (!seen.has(a.name)) seen.set(a.name, a)\n }\n return [...seen.values()]\n}\n\nconst contributor = async (\n context: MarkdownContext,\n commits: TransformedCommit[],\n _meta: RenderMeta,\n): Promise<string> => {\n const authors = uniqByName(\n commits.map((c) => ({\n email: c.author?.email ?? '',\n name: c.author?.name ?? '',\n })),\n )\n\n await Promise.all(\n authors.map((author, idx) =>\n gh.request('GET /search/users', { q: author.email }).then(({ data }) => {\n const login = data.items[0]?.login\n if (login) authors[idx].login = login\n }),\n ),\n )\n\n const prohibitList = context.options?.contributorsProhibitList ?? {\n email: [],\n login: [],\n }\n\n const prohibitLogins = [\n ...contributorsProhibitListDefault.login,\n ...prohibitList.login,\n ]\n for (const ejectLogin of prohibitLogins) {\n const idx = authors.findIndex((a) => a.login === ejectLogin)\n if (idx !== -1) authors.splice(idx, 1)\n }\n\n const prohibitEmails = [\n ...contributorsProhibitListDefault.email,\n ...prohibitList.email,\n ]\n for (const ejectEmail of prohibitEmails) {\n const idx = authors.findIndex((a) => a.email.includes(ejectEmail))\n if (idx !== -1) authors.splice(idx, 1)\n }\n\n if (authors.length === 0) return ''\n\n const authorsString = authors.map((a) => `@${a.login}`).join(', ')\n let markdown = `#### 🥳️ Contributors\\n`\n markdown += `- ${sample(contributorsSubtitle)} ${authorsString}\\n`\n markdown += '\\n'\n\n return markdown\n}\n\nexport { contributor }\n","import type { MarkdownContext, RenderMeta, TransformedCommit } from '../types'\n\nconst footer = (\n context: MarkdownContext,\n _commits: TransformedCommit[],\n _meta: RenderMeta,\n): string => {\n const { noteGroups } = context\n const noteFormat = `- {scope}{text}\\n`\n\n let markdown = ''\n\n for (const noteGroup of noteGroups) {\n const { notes } = noteGroup\n markdown += `#### ${notes[0].title}\\n`\n for (const note of notes) {\n const { scope, text } = note\n markdown += noteFormat\n .replace(/\\{scope\\}/g, scope ? `**${scope}**: ` : '')\n .replace(/\\{text\\}/g, text ?? '')\n }\n markdown += '\\n'\n }\n\n return markdown\n}\n\nexport { footer }\n","import type { MarkdownContext, RenderMeta, TransformedCommit } from '../types'\n\nimport { format as _format } from 'date-fns'\n\nconst header = (\n context: MarkdownContext,\n _commits: TransformedCommit[],\n meta: RenderMeta,\n): string => {\n const { currentTag, date, linkCompare, previousTag, title } = context\n const { repositoryUrl } = meta\n\n let markdown = `\n| 🔖️ | Release Information |\n| ----------- | --------------- |\n| Current | **\\`${currentTag}\\`** |\\n`\n\n if (linkCompare) {\n const linkCompareUrl = `${repositoryUrl}/compare/${previousTag}...${currentTag}`\n markdown += `| Previous | **[\\`${previousTag}\\`](${linkCompareUrl})** |\\n`\n }\n if (title) {\n markdown += `| Title | **\\`${title}\\`** |\\n`\n }\n if (date) {\n markdown += `| Date | **\\`${_format(date, 'yyyy-MM-dd')}\\`** |\\n`\n }\n\n markdown += '\\n'\n return markdown\n}\n\nexport { header }\n","import type { MarkdownContext, RenderMeta, TransformedCommit } from '../types'\n\nimport { commit, contributor, footer, header } from '../templates/index'\n\nconst getMarkdown = async (\n context: MarkdownContext,\n commits: TransformedCommit[],\n): Promise<string> => {\n const repositoryUrl = context.repository\n ? `${context.host}/${context.owner}/${context.repository}`\n : ''\n\n const meta: RenderMeta = { repositoryUrl }\n\n let markdown = header(context, commits, meta)\n markdown += '\\n'\n markdown += commit(context, commits, meta)\n markdown += '\\n'\n markdown += await contributor(context, commits, meta)\n markdown += '\\n'\n markdown += footer(context, commits, meta)\n markdown += '\\n'\n\n return markdown\n}\n\nexport { getMarkdown }\n","import type { Note, NoteGroup } from '../types'\n\nfunction getNoteGroups(notes: Note[]): NoteGroup[] {\n const groups = new Map<string, NoteGroup>()\n\n for (const note of notes) {\n const existing = groups.get(note.title)\n if (existing) {\n existing.notes.push(note)\n } else {\n groups.set(note.title, { notes: [note], title: note.title })\n }\n }\n\n return [...groups.values()]\n}\n\nexport { getNoteGroups }\n","import type { ParsedCommit, TransformedCommit } from '../types'\n\nimport { get as _get, set as _set } from 'lodash-es'\n\ntype TransformFn = (\n commit: ParsedCommit,\n context: unknown,\n) => Record<string, unknown> | undefined\n\ntype TransformMap = Record<\n string,\n ((value: unknown, path: string) => unknown) | unknown\n>\n\ntype Transform = TransformFn | TransformMap\n\nfunction processCommit(\n chunk: ParsedCommit,\n transform: Transform,\n context: unknown,\n): TransformedCommit | undefined {\n const commit: ParsedCommit | TransformedCommit = structuredClone(chunk)\n\n if (typeof transform === 'function') {\n const result = transform(commit as ParsedCommit, context) as\n | TransformedCommit\n | undefined\n if (result) result.raw = chunk\n return result\n }\n\n for (const [path, el] of Object.entries(transform)) {\n let value = _get(commit, path)\n value = typeof el === 'function' ? el(value, path) : el\n _set(commit, path, value)\n }\n\n ;(commit as TransformedCommit).raw = chunk\n return commit as TransformedCommit\n}\n\nexport type { Transform, TransformFn, TransformMap }\nexport { processCommit }\n","import { format, URL } from 'node:url'\n\nimport type {\n MarkdownContext,\n Note,\n ParsedCommit,\n PluginConfig,\n SRContext,\n TransformedCommit,\n} from './types'\n\nimport { parserOpts, writerOpts } from '@jeromefitz/conventional-gitmoji'\n\nimport { filterRevertedCommitsSync } from 'conventional-commits-filter'\nimport { CommitParser } from 'conventional-commits-parser'\nimport { readPackageUp } from 'read-package-up'\nimport { patch as semverPatch, valid as semverValid } from 'semver'\n\nimport { getCommitGroups } from './utils/getCommitGroups'\nimport { getMarkdown } from './utils/getMarkdown'\nimport { getNoteGroups } from './utils/getNoteGroups'\nimport { processCommit } from './utils/processCommit'\n\nconst commitLinkDefault = 'commit'\nconst issueLinkDefault = 'issues'\n\nfunction parseRepositoryUrl(rawUrl: string): {\n hostname: string\n owner: string\n port: string\n protocol: string\n repository: string\n} {\n const url = rawUrl.replace(/\\.git$/i, '')\n const [match, auth, host, path] =\n /^(?!.+:\\/\\/)(?:(?<auth>.*)@)?(?<host>.*?):(?<path>.*)$/.exec(url) ?? []\n let { hostname, pathname, port, protocol } = new URL(\n match ? `ssh://${auth ? `${auth}@` : ''}${host}/${path}` : url,\n )\n port = protocol.includes('ssh') ? '' : port\n protocol = /http[^s]/.test(protocol) ? 'http' : 'https'\n const [, owner = '', repository = ''] =\n /^\\/(?<owner>[^/]+)?\\/?(?<repository>.+)?$/.exec(pathname) ?? []\n return { hostname, owner, port, protocol, repository }\n}\n\nfunction transformCommits(\n rawCommits: SRContext['commits'],\n parser: CommitParser,\n context: SRContext,\n): TransformedCommit[] {\n const commits: TransformedCommit[] = []\n for (const raw of filterRevertedCommitsSync(rawCommits)) {\n if (!raw.message?.trim()) continue\n const parsed = {\n ...raw,\n ...parser.parse(raw.message),\n message: raw.message,\n } as ParsedCommit\n const transformed = processCommit(parsed, writerOpts.transform, context)\n if (transformed) commits.push(transformed)\n }\n return commits\n}\n\nfunction collectNotes(commits: TransformedCommit[]): Note[] {\n const notes: Note[] = []\n for (const c of commits) {\n for (const note of c.notes) {\n notes.push({ ...note, commit: c })\n }\n }\n return notes\n}\n\nasync function generateNotes(\n pluginConfig: PluginConfig,\n context: SRContext,\n): Promise<string> {\n const { commits: rawCommits, cwd, lastRelease, nextRelease, options } = context\n\n const previousTag = lastRelease.gitTag || lastRelease.gitHead\n const currentTag = nextRelease.gitTag || nextRelease.gitHead\n const { hostname, owner, port, protocol, repository } = parseRepositoryUrl(\n options.repositoryUrl,\n )\n\n const parser = new CommitParser(parserOpts)\n const commits = transformCommits(rawCommits, parser, context)\n const notes = collectNotes(commits)\n\n const version = nextRelease.version\n const packageData = (await readPackageUp({ cwd, normalize: false }))?.packageJson\n\n const markdownContext: MarkdownContext = {\n commit: pluginConfig.commit ?? commitLinkDefault,\n commitGroups: getCommitGroups(\n writerOpts.groupBy,\n commits,\n writerOpts.commitGroupsSort,\n writerOpts.commitsSort,\n ),\n currentTag,\n date: commits[0]?.committerDate,\n host: format({ hostname, port, protocol }),\n isPatch: semverValid(version) ? (semverPatch(version) ?? 0) !== 0 : undefined,\n issue: pluginConfig.issue ?? issueLinkDefault,\n linkCompare: pluginConfig.linkCompare ?? !!(currentTag && previousTag),\n linkReferences: pluginConfig.linkReferences,\n noteGroups: getNoteGroups(notes),\n options,\n owner,\n packageData,\n previousTag,\n repository,\n version,\n }\n\n return getMarkdown(markdownContext, commits)\n}\n\nexport { generateNotes }\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["_format","_get","semverValid","semverPatch"],"sources":["../src/utils/getCommitGroups.ts","../src/templates/commit.ts","../src/templates/contributor.ts","../src/templates/footer.ts","../src/templates/header.ts","../src/utils/getMarkdown.ts","../src/utils/getNoteGroups.ts","../src/utils/processCommit.ts","../src/index.ts"],"sourcesContent":["import type { CommitGroup, TransformedCommit } from '../types'\n\nfunction multiKeySort<T>(keys: string[]): (a: T, b: T) => number {\n return (a, b) => {\n const ar = a as Record<string, unknown>\n const br = b as Record<string, unknown>\n for (const key of keys) {\n const av = ar[key] ?? 0\n const bv = br[key] ?? 0\n if (av < bv) return -1\n if (av > bv) return 1\n }\n return 0\n }\n}\n\nfunction semverToOrder(semver: string | null | undefined): number {\n if (semver && ['breaking', 'major'].includes(semver)) return 0\n if (semver && ['feature', 'minor'].includes(semver)) return 10\n if (semver && ['fix', 'patch'].includes(semver)) return 20\n return 99\n}\n\nfunction toCommitGroup(\n title: string,\n groupCommits: TransformedCommit[] | undefined,\n commitsSort: string[],\n): CommitGroup {\n const sorted =\n commitsSort.length > 0\n ? [...(groupCommits ?? [])].sort(multiKeySort<TransformedCommit>(commitsSort))\n : [...(groupCommits ?? [])]\n\n return {\n commits: sorted,\n order: semverToOrder(sorted[0]?.typeSpec?.semver),\n title: title === '' ? false : title,\n }\n}\n\nfunction getCommitGroups(\n groupBy: string,\n commits: TransformedCommit[],\n commitGroupsSort: string[],\n commitsSort: string[],\n): CommitGroup[] {\n const grouped = Object.groupBy(\n commits,\n (commit) => (commit[groupBy] as string | undefined) ?? '',\n )\n\n const commitGroups = Object.entries(grouped).map(([title, group]) =>\n toCommitGroup(title, group, commitsSort),\n )\n\n return commitGroupsSort.length > 0\n ? commitGroups.sort(multiKeySort<CommitGroup>(commitGroupsSort))\n : commitGroups\n}\n\nexport { getCommitGroups }\n","import type { CommitReference } from 'conventional-commits-parser'\n\nimport type { MarkdownContext, RenderMeta, TransformedCommit } from '../types'\n\nconst commit = (\n context: MarkdownContext,\n commits: TransformedCommit[],\n meta: RenderMeta,\n): string => {\n const { commit: commitPath, commitGroups, linkReferences } = context\n const { repositoryUrl } = meta\n\n const commitFormat = `- {scope}{subject}{hash}{references}\\n`\n\n const getHash = (hash: string | undefined): string => {\n if (!hash) return ''\n if (linkReferences) {\n return ` [ \\`${hash}\\` ](${repositoryUrl}/${commitPath}/${hash})`\n }\n return ` ${hash}`\n }\n\n const getReferences = (references: CommitReference[]): string => {\n if (references.length === 0) return ''\n const items = references\n .filter((ref) => ref.issue)\n .map((ref) => `[ #${ref.issue} ]`)\n return items.length > 0 ? `, closes ${items.join(' ')}` : ''\n }\n\n let markdown = ''\n\n for (const commitGroup of commitGroups) {\n const groupType = commitGroup.commits[0]?.typeSpec?.type\n markdown += `#### ${commitGroup.commits[0]?.type}\\n`\n\n for (const c of commits) {\n if (groupType !== c.typeSpec?.type) continue\n const { hash, header, references = [], scope, subject } = c\n markdown += commitFormat\n .replace(/\\{scope\\}/g, scope ? `**${scope}**: ` : '')\n .replace(/\\{subject\\}/g, subject ?? header ?? '')\n .replace(/\\{hash\\}/g, getHash(hash))\n .replace(/\\{references\\}/g, getReferences(references as CommitReference[]))\n }\n\n markdown += '\\n'\n }\n\n return markdown\n}\n\nexport { commit }\n","import type { MarkdownContext, RenderMeta, TransformedCommit } from '../types'\n\nimport { Octokit } from '@octokit/rest'\n\nconst gh = new Octokit({ auth: process.env.GH_TOKEN })\n\ninterface Author {\n email: string\n login?: string\n name: string\n}\n\nconst contributorsProhibitListDefault = {\n email: [\n 'noreply@github.com',\n 'users.noreply.github.com',\n 'semantic-release-bot@martynus.net',\n ],\n login: [\n 'dependabot',\n 'dependabot[bot]',\n 'kodiakhq',\n 'kodiakhq[bot]',\n 'renovate',\n 'renovate[bot]',\n 'semantic-release-bot',\n ],\n}\n\nconst contributorsSubtitle = [\n 'Props to',\n 'Kudos to',\n 'Thanks to',\n 'Brought to you by',\n]\n\nconst sample = <T>(arr: T[]): T => arr[Math.floor(Math.random() * arr.length)]\n\nconst uniqByName = (authors: Author[]): Author[] => {\n const seen = new Map<string, Author>()\n for (const a of authors) {\n if (!seen.has(a.name)) seen.set(a.name, a)\n }\n return [...seen.values()]\n}\n\nconst contributor = async (\n context: MarkdownContext,\n commits: TransformedCommit[],\n _meta: RenderMeta,\n): Promise<string> => {\n const authors = uniqByName(\n commits.map((c) => ({\n email: c.author?.email ?? '',\n name: c.author?.name ?? '',\n })),\n )\n\n await Promise.all(\n authors.map((author, idx) =>\n gh.request('GET /search/users', { q: author.email }).then(({ data }) => {\n const login = data.items[0]?.login\n if (login) authors[idx].login = login\n }),\n ),\n )\n\n const prohibitList = context.options?.contributorsProhibitList ?? {\n email: [],\n login: [],\n }\n\n const prohibitLogins = [\n ...contributorsProhibitListDefault.login,\n ...prohibitList.login,\n ]\n for (const ejectLogin of prohibitLogins) {\n const idx = authors.findIndex((a) => a.login === ejectLogin)\n if (idx !== -1) authors.splice(idx, 1)\n }\n\n const prohibitEmails = [\n ...contributorsProhibitListDefault.email,\n ...prohibitList.email,\n ]\n for (const ejectEmail of prohibitEmails) {\n const idx = authors.findIndex((a) => a.email.includes(ejectEmail))\n if (idx !== -1) authors.splice(idx, 1)\n }\n\n if (authors.length === 0) return ''\n\n const authorsString = authors.map((a) => `@${a.login}`).join(', ')\n let markdown = `#### 🥳️ Contributors\\n`\n markdown += `- ${sample(contributorsSubtitle)} ${authorsString}\\n`\n markdown += '\\n'\n\n return markdown\n}\n\nexport { contributor }\n","import type { MarkdownContext, RenderMeta, TransformedCommit } from '../types'\n\nconst footer = (\n context: MarkdownContext,\n _commits: TransformedCommit[],\n _meta: RenderMeta,\n): string => {\n const { noteGroups } = context\n const noteFormat = `- {scope}{text}\\n`\n\n let markdown = ''\n\n for (const noteGroup of noteGroups) {\n const { notes } = noteGroup\n markdown += `#### ${notes[0].title}\\n`\n for (const note of notes) {\n const { scope, text } = note\n markdown += noteFormat\n .replace(/\\{scope\\}/g, scope ? `**${scope}**: ` : '')\n .replace(/\\{text\\}/g, text ?? '')\n }\n markdown += '\\n'\n }\n\n return markdown\n}\n\nexport { footer }\n","import type { MarkdownContext, RenderMeta, TransformedCommit } from '../types'\n\nimport { format as _format } from 'date-fns'\n\nconst header = (\n context: MarkdownContext,\n _commits: TransformedCommit[],\n meta: RenderMeta,\n): string => {\n const { currentTag, date, linkCompare, previousTag, title } = context\n const { repositoryUrl } = meta\n\n let markdown = `\n| 🔖️ | Release Information |\n| ----------- | --------------- |\n| Current | **\\`${currentTag}\\`** |\\n`\n\n if (linkCompare) {\n const linkCompareUrl = `${repositoryUrl}/compare/${previousTag}...${currentTag}`\n markdown += `| Previous | **[\\`${previousTag}\\`](${linkCompareUrl})** |\\n`\n }\n if (title) {\n markdown += `| Title | **\\`${title}\\`** |\\n`\n }\n if (date) {\n markdown += `| Date | **\\`${_format(date, 'yyyy-MM-dd')}\\`** |\\n`\n }\n\n markdown += '\\n'\n return markdown\n}\n\nexport { header }\n","import type { MarkdownContext, RenderMeta, TransformedCommit } from '../types'\n\nimport { commit, contributor, footer, header } from '../templates/index'\n\nconst getMarkdown = async (\n context: MarkdownContext,\n commits: TransformedCommit[],\n): Promise<string> => {\n const repositoryUrl = context.repository\n ? `${context.host}/${context.owner}/${context.repository}`\n : ''\n\n const meta: RenderMeta = { repositoryUrl }\n\n let markdown = header(context, commits, meta)\n markdown += '\\n'\n markdown += commit(context, commits, meta)\n markdown += '\\n'\n markdown += await contributor(context, commits, meta)\n markdown += '\\n'\n markdown += footer(context, commits, meta)\n markdown += '\\n'\n\n return markdown\n}\n\nexport { getMarkdown }\n","import type { Note, NoteGroup } from '../types'\n\nfunction getNoteGroups(notes: Note[]): NoteGroup[] {\n const groups = new Map<string, NoteGroup>()\n\n for (const note of notes) {\n const existing = groups.get(note.title)\n if (existing) {\n existing.notes.push(note)\n } else {\n groups.set(note.title, { notes: [note], title: note.title })\n }\n }\n\n return [...groups.values()]\n}\n\nexport { getNoteGroups }\n","import type { ParsedCommit, TransformedCommit } from '../types'\n\nimport { get as _get, set as _set } from 'lodash-es'\n\ntype TransformFn = (\n commit: ParsedCommit,\n context: unknown,\n) => Record<string, unknown> | undefined\n\ntype TransformMap = Record<\n string,\n ((value: unknown, path: string) => unknown) | unknown\n>\n\ntype Transform = TransformFn | TransformMap\n\nfunction processCommit(\n chunk: ParsedCommit,\n transform: Transform,\n context: unknown,\n): TransformedCommit | undefined {\n const commit: ParsedCommit | TransformedCommit = structuredClone(chunk)\n\n if (typeof transform === 'function') {\n const result = transform(commit as ParsedCommit, context) as\n | TransformedCommit\n | undefined\n if (result) result.raw = chunk\n return result\n }\n\n for (const [path, el] of Object.entries(transform)) {\n let value = _get(commit, path)\n value = typeof el === 'function' ? el(value, path) : el\n _set(commit, path, value)\n }\n\n ;(commit as TransformedCommit).raw = chunk\n return commit as TransformedCommit\n}\n\nexport type { Transform, TransformFn, TransformMap }\nexport { processCommit }\n","import { format, URL } from 'node:url'\n\nimport type {\n MarkdownContext,\n Note,\n ParsedCommit,\n PluginConfig,\n SRContext,\n TransformedCommit,\n} from './types'\n\nimport { parserOpts, writerOpts } from '@jeromefitz/conventional-gitmoji'\n\nimport { filterRevertedCommitsSync } from 'conventional-commits-filter'\nimport { CommitParser } from 'conventional-commits-parser'\nimport { readPackageUp } from 'read-package-up'\nimport { patch as semverPatch, valid as semverValid } from 'semver'\n\nimport { getCommitGroups } from './utils/getCommitGroups'\nimport { getMarkdown } from './utils/getMarkdown'\nimport { getNoteGroups } from './utils/getNoteGroups'\nimport { processCommit } from './utils/processCommit'\n\nconst commitLinkDefault = 'commit'\nconst issueLinkDefault = 'issues'\n\nfunction parseRepositoryUrl(rawUrl: string): {\n hostname: string\n owner: string\n port: string\n protocol: string\n repository: string\n} {\n const url = rawUrl.replace(/\\.git$/i, '')\n const [match, auth, host, path] =\n /^(?!.+:\\/\\/)(?:(?<auth>.*)@)?(?<host>.*?):(?<path>.*)$/.exec(url) ?? []\n let { hostname, pathname, port, protocol } = new URL(\n match ? `ssh://${auth ? `${auth}@` : ''}${host}/${path}` : url,\n )\n port = protocol.includes('ssh') ? '' : port\n protocol = /http[^s]/.test(protocol) ? 'http' : 'https'\n const [, owner = '', repository = ''] =\n /^\\/(?<owner>[^/]+)?\\/?(?<repository>.+)?$/.exec(pathname) ?? []\n return { hostname, owner, port, protocol, repository }\n}\n\nfunction transformCommits(\n rawCommits: SRContext['commits'],\n parser: CommitParser,\n context: SRContext,\n): TransformedCommit[] {\n const commits: TransformedCommit[] = []\n for (const raw of filterRevertedCommitsSync(rawCommits)) {\n if (!raw.message?.trim()) continue\n const parsed = {\n ...raw,\n ...parser.parse(raw.message),\n message: raw.message,\n } as ParsedCommit\n const transformed = processCommit(parsed, writerOpts.transform, context)\n if (transformed) commits.push(transformed)\n }\n return commits\n}\n\nfunction collectNotes(commits: TransformedCommit[]): Note[] {\n const notes: Note[] = []\n for (const c of commits) {\n for (const note of c.notes) {\n notes.push({ ...note, commit: c })\n }\n }\n return notes\n}\n\nasync function generateNotes(\n pluginConfig: PluginConfig,\n context: SRContext,\n): Promise<string> {\n const { commits: rawCommits, cwd, lastRelease, nextRelease, options } = context\n\n const previousTag = lastRelease.gitTag || lastRelease.gitHead\n const currentTag = nextRelease.gitTag || nextRelease.gitHead\n const { hostname, owner, port, protocol, repository } = parseRepositoryUrl(\n options.repositoryUrl,\n )\n\n const parser = new CommitParser(parserOpts)\n const commits = transformCommits(rawCommits, parser, context)\n const notes = collectNotes(commits)\n\n const version = nextRelease.version\n const packageData = (await readPackageUp({ cwd, normalize: false }))?.packageJson\n\n const markdownContext: MarkdownContext = {\n commit: pluginConfig.commit ?? commitLinkDefault,\n commitGroups: getCommitGroups(\n writerOpts.groupBy,\n commits,\n writerOpts.commitGroupsSort,\n writerOpts.commitsSort,\n ),\n currentTag,\n date: commits[0]?.committerDate,\n host: format({ hostname, port, protocol }),\n isPatch: semverValid(version) ? (semverPatch(version) ?? 0) !== 0 : undefined,\n issue: pluginConfig.issue ?? issueLinkDefault,\n linkCompare: pluginConfig.linkCompare ?? !!(currentTag && previousTag),\n linkReferences: pluginConfig.linkReferences,\n noteGroups: getNoteGroups(notes),\n options,\n owner,\n packageData,\n previousTag,\n repository,\n version,\n }\n\n return getMarkdown(markdownContext, commits)\n}\n\nexport { generateNotes }\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jeromefitz/release-notes-generator",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.1-canary.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Custom Release Note Generator for Semantic Release.",
|
|
6
6
|
"repository": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@octokit/rest": "22.0.1",
|
|
42
|
-
"conventional-commits-filter": "
|
|
42
|
+
"conventional-commits-filter": "6.0.0",
|
|
43
43
|
"conventional-commits-parser": "6.4.0",
|
|
44
44
|
"date-fns": "4.4.0",
|
|
45
45
|
"read-package-up": "12.0.0",
|