@w5s/conventional-changelog 2.0.20 → 2.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,340 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var emojiRegexp = require('emoji-regex');
6
+ var gitmojis = require('gitmojis');
7
+ var fs = require('fs');
8
+ var path = require('path');
9
+ var url = require('url');
10
+
11
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
12
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
+
14
+ var emojiRegexp__default = /*#__PURE__*/_interopDefault(emojiRegexp);
15
+
16
+ // src/git-raw-commit-opts.ts
17
+ var gitRawCommitOpts = {
18
+ format: "%B%n-hash-%n%H%n-gitTags-%n%d%n-committerDate-%n%ci%n-authorName-%n%an%n-authorEmail-%n%ae"
19
+ };
20
+
21
+ // src/parser-opts.ts
22
+ var parserOpts = {
23
+ headerPattern: new RegExp(
24
+ // Type
25
+ `^(?<type>\\S*)? (?:\\((?<scope>.*)\\):? )?(?<subject>.*)$`,
26
+ "u"
27
+ ),
28
+ headerCorrespondence: ["type", "scope", "subject"],
29
+ revertPattern: /^(?:revert|revert:)\s"?([\S\s]+?)"?\s*this reverts commit (\w*)\./i,
30
+ noteKeywords: ["BREAKING CHANGE", "BREAKING CHANGES"],
31
+ // revertPattern: /revert:\s([\S\s]*?)\s*this reverts commit (\w*)\./i,
32
+ revertCorrespondence: [`header`, `hash`]
33
+ };
34
+
35
+ // src/data.ts
36
+ var CommitConventionalType = (() => {
37
+ const enumObject = Object.freeze({
38
+ Build: "build",
39
+ CI: "ci",
40
+ Docs: "docs",
41
+ Feat: "feat",
42
+ Fix: "fix",
43
+ Perf: "perf",
44
+ Refactor: "refactor",
45
+ Revert: "revert",
46
+ Style: "style",
47
+ Test: "test",
48
+ WIP: "wip",
49
+ Chore: "chore"
50
+ });
51
+ const enumValues = Object.freeze(Object.values(enumObject).sort());
52
+ const enumValuesSet = new Set(enumValues);
53
+ const typeData = {
54
+ feat: {
55
+ emoji: "\u2728",
56
+ "en-US": "Features",
57
+ changelog: true
58
+ },
59
+ fix: {
60
+ emoji: "\u{1F41B}",
61
+ "en-US": "Bug Fixes",
62
+ changelog: true
63
+ },
64
+ build: {
65
+ emoji: "\u{1F477}",
66
+ "en-US": "Build System",
67
+ changelog: false
68
+ },
69
+ chore: {
70
+ emoji: "\u{1F3AB}",
71
+ "en-US": "Chores",
72
+ changelog: false
73
+ },
74
+ ci: {
75
+ emoji: "\u{1F527}",
76
+ "en-US": "Continuous Integration",
77
+ changelog: false
78
+ },
79
+ docs: {
80
+ emoji: "\u{1F4DD}",
81
+ "en-US": "Documentation",
82
+ changelog: false
83
+ },
84
+ test: {
85
+ emoji: "\u2705",
86
+ "en-US": "Tests",
87
+ changelog: false
88
+ },
89
+ perf: {
90
+ emoji: "\u26A1",
91
+ "en-US": "Performance Improvements",
92
+ changelog: true
93
+ },
94
+ refactor: {
95
+ emoji: "\u267B",
96
+ "en-US": "Code Refactoring",
97
+ changelog: false
98
+ },
99
+ revert: {
100
+ emoji: "\u23EA",
101
+ "en-US": "Reverts",
102
+ changelog: true
103
+ },
104
+ style: {
105
+ emoji: "\u{1F484}",
106
+ "en-US": "Styles",
107
+ changelog: false
108
+ },
109
+ wip: {
110
+ emoji: "\u{1F6A7}",
111
+ "en-US": "Work in progress",
112
+ changelog: false
113
+ }
114
+ };
115
+ function hasInstance(anyValue) {
116
+ return typeof anyValue === "string" && enumValuesSet.has(anyValue);
117
+ }
118
+ function getData(commitType) {
119
+ return typeData[commitType];
120
+ }
121
+ function parse(anyValue) {
122
+ return hasInstance(anyValue) ? anyValue : void 0;
123
+ }
124
+ function values() {
125
+ return enumValues;
126
+ }
127
+ function findWhere(predicate) {
128
+ return enumValues.filter((enumValue) => predicate(getData(enumValue)));
129
+ }
130
+ return { ...enumObject, hasInstance, getData, values, parse, findWhere };
131
+ })();
132
+ exports.Emoji = void 0;
133
+ ((Emoji2) => {
134
+ Emoji2.reEmojiUnicode = emojiRegexp__default.default();
135
+ Emoji2.reEmojiText = /:\w*:/;
136
+ const reMatchOnly = (input) => new RegExp(`^${input.source}$`, "");
137
+ const _reEmojiUnicode = reMatchOnly(Emoji2.reEmojiUnicode);
138
+ const _reEmojiText = reMatchOnly(Emoji2.reEmojiText);
139
+ function isUnicode(anyValue) {
140
+ return _reEmojiUnicode.test(anyValue);
141
+ }
142
+ Emoji2.isUnicode = isUnicode;
143
+ function isText(anyValue) {
144
+ return _reEmojiText.test(anyValue);
145
+ }
146
+ Emoji2.isText = isText;
147
+ function hasInstance(anyValue) {
148
+ return isText(anyValue) || isUnicode(anyValue);
149
+ }
150
+ Emoji2.hasInstance = hasInstance;
151
+ })(exports.Emoji || (exports.Emoji = {}));
152
+ exports.GitmojiCode = void 0;
153
+ ((GitmojiCode2) => {
154
+ const allGitmojiCodes = new Set(
155
+ gitmojis.gitmojis.map((gitmoji) => gitmoji.code).concat(gitmojis.gitmojis.map((gitmoji) => gitmoji.emoji))
156
+ );
157
+ const index = {
158
+ // code: createIndex(gitmojis, 'code'),
159
+ emoji: createIndex(gitmojis.gitmojis, "emoji")
160
+ };
161
+ function createIndex(list, key) {
162
+ return new Map(list.map((gitmoji) => [gitmoji[key], gitmoji]));
163
+ }
164
+ function isValid(anyValue) {
165
+ return allGitmojiCodes.has(anyValue);
166
+ }
167
+ GitmojiCode2.isValid = isValid;
168
+ const defaultType = "chore";
169
+ const conversionMap = (() => {
170
+ const data = {
171
+ feat: ["\u2728", "\u267F\uFE0F", "\u{1F6B8}"],
172
+ fix: ["\u{1F41B}"],
173
+ docs: ["\u{1F4DD}"],
174
+ style: ["\u{1F3A8}", "\u{1F6A8}"],
175
+ refactor: ["\u267B\uFE0F", "\u{1F3D7}\uFE0F"],
176
+ test: ["\u2705", "\u{1F9EA}"],
177
+ perf: ["\u26A1\uFE0F"],
178
+ revert: ["\u23EA\uFE0F"],
179
+ ci: ["\u{1F477}", "\u{1F49A}"],
180
+ wip: ["\u{1F6A7}"],
181
+ build: [],
182
+ chore: ["\u{1F527}"]
183
+ };
184
+ const entries = Array.from(
185
+ // @ts-ignore entries are not well typed
186
+ Object.entries(data)
187
+ );
188
+ return new Map(
189
+ entries.reduce(
190
+ (acc, [commitType, gitmojiUnicodeArray]) => acc.concat(gitmojiUnicodeArray.map((gitmojiUnicode) => [gitmojiUnicode, commitType])).concat(
191
+ gitmojiUnicodeArray.map((gitmojiUnicode) => [
192
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
193
+ index.emoji.get(gitmojiUnicode)?.code,
194
+ commitType
195
+ ])
196
+ ),
197
+ []
198
+ )
199
+ );
200
+ })();
201
+ function toConventionalCommitType2(gitmoji) {
202
+ return conversionMap.get(gitmoji) ?? defaultType;
203
+ }
204
+ GitmojiCode2.toConventionalCommitType = toConventionalCommitType2;
205
+ })(exports.GitmojiCode || (exports.GitmojiCode = {}));
206
+
207
+ // src/recommended-bump-opts.ts
208
+ function toConventionalCommitType(text) {
209
+ return exports.GitmojiCode.isValid(text) ? exports.GitmojiCode.toConventionalCommitType(text) : CommitConventionalType.hasInstance(text) ? text : void 0;
210
+ }
211
+ var recommendedBumpOpts = {
212
+ parserOpts,
213
+ whatBump: (commits) => {
214
+ let level = 2;
215
+ let breakings = 0;
216
+ let features = 0;
217
+ for (const { type, notes } of commits) {
218
+ const conventionalType = type == null ? type : toConventionalCommitType(type);
219
+ if (notes.length > 0) {
220
+ breakings += notes.length;
221
+ level = 0;
222
+ } else if (conventionalType === CommitConventionalType.Feat) {
223
+ features += 1;
224
+ if (level === 2) {
225
+ level = 1;
226
+ }
227
+ }
228
+ }
229
+ return {
230
+ level,
231
+ reason: breakings === 1 ? `There is ${breakings} BREAKING CHANGE and ${features} features` : `There are ${breakings} BREAKING CHANGES and ${features} features`
232
+ };
233
+ }
234
+ };
235
+
236
+ // src/transform.ts
237
+ function displayScope(scope, scopeDisplayNameMap) {
238
+ return scope == null || scope.length === 0 ? scopeDisplayNameMap["*"] : scopeDisplayNameMap[scope] == null ? scope : scopeDisplayNameMap[scope];
239
+ }
240
+ function displayType(type, options = {}) {
241
+ const { withEmoji = true, language = "en-US" } = options;
242
+ if (CommitConventionalType.hasInstance(type)) {
243
+ const { emoji, [language]: title } = CommitConventionalType.getData(type);
244
+ return `${withEmoji ? `${emoji} ` : ""}${title}`;
245
+ }
246
+ return type;
247
+ }
248
+ function createTransform(config) {
249
+ const displayTypes = new Set(config.displayTypes == null ? CommitConventionalType.values() : config.displayTypes);
250
+ const ignoreType = (type) => type == null || !displayTypes.has(type);
251
+ const ignoreScope = (scope) => config.displayScopes == null ? false : scope != null && !config.displayScopes.includes(scope);
252
+ const transform = (commit, { repository, host, owner, repoUrl }) => {
253
+ const discard = commit.notes.length === 0;
254
+ const issues = /* @__PURE__ */ new Set();
255
+ const notes = commit.notes.map((note) => ({
256
+ ...note,
257
+ title: `${config.withEmoji === false ? "" : "\u{1F4A5} "}BREAKING CHANGES`
258
+ }));
259
+ const conventionalType = commit.type == null ? void 0 : CommitConventionalType.parse(commit.type) ?? (exports.GitmojiCode.isValid(commit.type) ? exports.GitmojiCode.toConventionalCommitType(commit.type) : void 0);
260
+ if (ignoreType(conventionalType) && discard) return false;
261
+ const type = conventionalType == null ? conventionalType : displayType(conventionalType, {
262
+ withEmoji: config.withEmoji
263
+ });
264
+ if (ignoreScope(commit.scope)) return false;
265
+ const scopeIntermediate = commit.scope === "*" ? "" : commit.scope;
266
+ const scope = config.scopeDisplayName == null ? scopeIntermediate : displayScope(scopeIntermediate, config.scopeDisplayName);
267
+ const hash = typeof commit.hash === "string" ? commit.hash.slice(0, 7) : commit.hash;
268
+ const subject = typeof commit.subject === "string" ? (() => {
269
+ let returnValue = commit.subject;
270
+ const url = repository == null ? repoUrl : [host, owner, repository].filter(Boolean).join("/");
271
+ if (url != null) {
272
+ const issueURL = `${url}/issues/`;
273
+ returnValue = returnValue.replace(/#(\d+)/g, (_, issue) => {
274
+ issues.add(issue);
275
+ return `[#${issue}](${issueURL}${issue})`;
276
+ });
277
+ }
278
+ if (host != null) {
279
+ returnValue = returnValue.replace(
280
+ /\B@([\da-z](?:-?[\d/a-z]){0,38})/g,
281
+ (_, username) => username.includes("/") ? `@${username}` : `[@${username}](${host}/${username})`
282
+ );
283
+ }
284
+ return returnValue;
285
+ })() : commit.subject;
286
+ const references = commit.references.filter((reference) => !issues.has(reference.issue));
287
+ return {
288
+ ...commit,
289
+ type,
290
+ hash,
291
+ scope,
292
+ subject,
293
+ references,
294
+ header: commit.header,
295
+ body: commit.body,
296
+ footer: commit.footer,
297
+ merge: commit.merge,
298
+ revert: commit.revert,
299
+ notes,
300
+ mentions: commit.mentions
301
+ };
302
+ };
303
+ return transform;
304
+ }
305
+
306
+ // src/writer-opts.ts
307
+ var _dirname = typeof __dirname === "undefined" ? path.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))) : __dirname;
308
+ var basePath = path.resolve(path.dirname(_dirname), "./template");
309
+ var mainTemplate = fs.readFileSync(`${basePath}/template.hbs`, "utf8");
310
+ var headerPartial = fs.readFileSync(`${basePath}/header.hbs`, "utf8");
311
+ var commitPartial = fs.readFileSync(`${basePath}/commit.hbs`, "utf8");
312
+ var footerPartial = fs.readFileSync(`${basePath}/footer.hbs`, "utf8");
313
+ var author = fs.readFileSync(`${basePath}/author.hbs`, "utf8");
314
+ var defaultDisplayTypes = CommitConventionalType.findWhere((_) => _.changelog);
315
+ var writerOpts = {
316
+ transform: createTransform({
317
+ displayTypes: defaultDisplayTypes
318
+ }),
319
+ groupBy: "type",
320
+ commitGroupsSort: "title",
321
+ commitsSort: ["scope", "subject"],
322
+ noteGroupsSort: "title",
323
+ mainTemplate,
324
+ headerPartial,
325
+ // eslint-disable-next-line unicorn/prefer-string-replace-all
326
+ commitPartial: commitPartial.replace(/{{gitUserInfo}}/g, author),
327
+ footerPartial
328
+ };
329
+
330
+ // src/index.ts
331
+ var src_default = {
332
+ parserOpts,
333
+ writerOpts,
334
+ recommendedBumpOpts,
335
+ gitRawCommitOpts
336
+ };
337
+
338
+ exports.default = src_default;
339
+ //# sourceMappingURL=index.cjs.map
340
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/git-raw-commit-opts.ts","../src/parser-opts.ts","../src/data.ts","../src/gitmoji.ts","../src/recommended-bump-opts.ts","../src/transform.ts","../src/writer-opts.ts","../src/index.ts"],"names":["Emoji","emojiRegexp","GitmojiCode","gitmojis","toConventionalCommitType","dirname","fileURLToPath","resolve","readFileSync"],"mappings":"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","file":"index.cjs","sourcesContent":["export const gitRawCommitOpts = {\n format: '%B%n-hash-%n%H%n-gitTags-%n%d%n-committerDate-%n%ci%n-authorName-%n%an%n-authorEmail-%n%ae',\n};\n","import type { Options } from 'conventional-commits-parser';\n\nexport interface ParserOptions extends Options {}\n\nexport const parserOpts: ParserOptions = {\n headerPattern: new RegExp(\n // Type\n `^(?<type>\\\\S*)? ` +\n // Scope\n `(?:\\\\((?<scope>.*)\\\\):? )?` +\n // Subject\n `(?<subject>.*)$`,\n 'u'\n ),\n headerCorrespondence: ['type', 'scope', 'subject'],\n revertPattern: /^(?:revert|revert:)\\s\"?([\\S\\s]+?)\"?\\s*this reverts commit (\\w*)\\./i,\n noteKeywords: ['BREAKING CHANGE', 'BREAKING CHANGES'],\n // revertPattern: /revert:\\s([\\S\\s]*?)\\s*this reverts commit (\\w*)\\./i,\n revertCorrespondence: [`header`, `hash`],\n};\n","import type { Commit as CommitDefault } from 'conventional-commits-parser';\n\nexport type Commit = CommitDefault<never> & {\n hash?: string;\n};\n\nexport type CommitConventionalType =\n | 'build'\n | 'ci'\n | 'docs'\n | 'feat'\n | 'fix'\n | 'perf'\n | 'refactor'\n | 'revert'\n | 'style'\n | 'test'\n | 'wip'\n | 'chore';\n\nexport const CommitConventionalType = (() => {\n const enumObject = Object.freeze({\n Build: 'build',\n CI: 'ci',\n Docs: 'docs',\n Feat: 'feat',\n Fix: 'fix',\n Perf: 'perf',\n Refactor: 'refactor',\n Revert: 'revert',\n Style: 'style',\n Test: 'test',\n WIP: 'wip',\n Chore: 'chore',\n });\n const enumValues: readonly CommitConventionalType[] = Object.freeze(Object.values(enumObject).sort());\n const enumValuesSet = new Set(enumValues);\n\n const typeData: Record<CommitConventionalType, CommitConventionalTypeData> = {\n feat: {\n emoji: '✨',\n 'en-US': 'Features',\n changelog: true,\n },\n fix: {\n emoji: '🐛',\n 'en-US': 'Bug Fixes',\n changelog: true,\n },\n build: {\n emoji: '👷',\n 'en-US': 'Build System',\n changelog: false,\n },\n chore: {\n emoji: '🎫',\n 'en-US': 'Chores',\n changelog: false,\n },\n ci: {\n emoji: '🔧',\n 'en-US': 'Continuous Integration',\n changelog: false,\n },\n docs: {\n emoji: '📝',\n 'en-US': 'Documentation',\n changelog: false,\n },\n test: {\n emoji: '✅',\n 'en-US': 'Tests',\n changelog: false,\n },\n perf: {\n emoji: '⚡',\n 'en-US': 'Performance Improvements',\n changelog: true,\n },\n refactor: {\n emoji: '♻',\n 'en-US': 'Code Refactoring',\n changelog: false,\n },\n revert: {\n emoji: '⏪',\n 'en-US': 'Reverts',\n changelog: true,\n },\n style: {\n emoji: '💄',\n 'en-US': 'Styles',\n changelog: false,\n },\n wip: {\n emoji: '🚧',\n 'en-US': 'Work in progress',\n changelog: false,\n },\n };\n\n function hasInstance(anyValue: unknown): anyValue is CommitConventionalType {\n return typeof anyValue === 'string' && enumValuesSet.has(anyValue as unknown as CommitConventionalType);\n }\n\n function getData(commitType: CommitConventionalType): CommitConventionalTypeData {\n return typeData[commitType];\n }\n\n function parse(anyValue: string): CommitConventionalType | undefined {\n return hasInstance(anyValue) ? anyValue : undefined;\n }\n\n function values() {\n return enumValues;\n }\n\n function findWhere(predicate: (data: CommitConventionalTypeData) => boolean): CommitConventionalType[] {\n return enumValues.filter((enumValue) => predicate(getData(enumValue)));\n }\n\n return { ...enumObject, hasInstance, getData, values, parse, findWhere };\n})();\n\nexport interface CommitConventionalTypeData {\n emoji: string;\n 'en-US': string;\n changelog: boolean;\n}\n","import emojiRegexp from 'emoji-regex';\nimport { type Gitmoji, gitmojis } from 'gitmojis';\nimport type { CommitConventionalType } from './data.js';\n\nexport type Emoji = Emoji.Unicode | Emoji.Text;\nexport namespace Emoji {\n export const reEmojiUnicode = emojiRegexp();\n\n export const reEmojiText = /:\\w*:/;\n\n const reMatchOnly = (input: RegExp) => new RegExp(`^${input.source}$`, '');\n const _reEmojiUnicode = reMatchOnly(reEmojiUnicode);\n const _reEmojiText = reMatchOnly(reEmojiText);\n\n export type Unicode = string & { '@@EmojiStyle': 'unicode' };\n export type Text = string & { '@@EmojiStyle': 'text' };\n\n export function isUnicode(anyValue: string): anyValue is Unicode {\n return _reEmojiUnicode.test(anyValue);\n }\n\n export function isText(anyValue: string): anyValue is Text {\n return _reEmojiText.test(anyValue);\n }\n\n export function hasInstance(anyValue: string): anyValue is Emoji {\n return isText(anyValue) || isUnicode(anyValue);\n }\n}\n\nexport type GitmojiCode = Emoji & { '@@Gitmoji': true };\nexport namespace GitmojiCode {\n export type Unicode = Emoji.Unicode & { '@@Gitmoji': true };\n export type Emoji = Emoji.Text & { '@@Gitmoji': true };\n\n // export const reEmoji = emojiRegexp();\n\n const allGitmojiCodes = new Set(\n gitmojis\n .map((gitmoji) => gitmoji.code as GitmojiCode)\n .concat(gitmojis.map((gitmoji) => gitmoji.emoji as GitmojiCode))\n );\n const index = {\n // code: createIndex(gitmojis, 'code'),\n emoji: createIndex(gitmojis, 'emoji'),\n };\n\n function createIndex<K extends keyof Gitmoji>(list: readonly Gitmoji[], key: K): ReadonlyMap<Gitmoji[K], Gitmoji> {\n return new Map(list.map((gitmoji) => [gitmoji[key], gitmoji]));\n }\n\n export function isValid(anyValue: string): anyValue is GitmojiCode {\n return allGitmojiCodes.has(anyValue as GitmojiCode);\n }\n\n const defaultType = 'chore';\n const conversionMap: ReadonlyMap<GitmojiCode, CommitConventionalType> = (() => {\n const data: Record<CommitConventionalType, GitmojiCode.Unicode[]> = {\n feat: ['✨', '♿️', '🚸'] as GitmojiCode.Unicode[],\n fix: ['🐛'] as GitmojiCode.Unicode[],\n docs: ['📝'] as GitmojiCode.Unicode[],\n style: ['🎨', '🚨'] as GitmojiCode.Unicode[],\n refactor: ['♻️', '🏗️'] as GitmojiCode.Unicode[],\n test: ['✅', '🧪'] as GitmojiCode.Unicode[],\n perf: ['⚡️'] as GitmojiCode.Unicode[],\n revert: ['⏪️'] as GitmojiCode.Unicode[],\n ci: ['👷', '💚'] as GitmojiCode.Unicode[],\n wip: ['🚧'] as GitmojiCode.Unicode[],\n build: [] as GitmojiCode.Unicode[],\n chore: ['🔧'] as GitmojiCode.Unicode[],\n };\n\n const entries = Array.from<[CommitConventionalType, GitmojiCode.Unicode[]]>(\n // @ts-ignore entries are not well typed\n Object.entries(data)\n );\n return new Map(\n entries.reduce<Array<[GitmojiCode, CommitConventionalType]>>(\n (acc, [commitType, gitmojiUnicodeArray]) =>\n acc\n .concat(gitmojiUnicodeArray.map((gitmojiUnicode) => [gitmojiUnicode, commitType]))\n\n .concat(\n gitmojiUnicodeArray.map((gitmojiUnicode) => [\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain\n index.emoji.get(gitmojiUnicode)?.code! as GitmojiCode,\n commitType,\n ])\n ),\n []\n )\n );\n })();\n\n export function toConventionalCommitType(gitmoji: GitmojiCode): CommitConventionalType {\n return conversionMap.get(gitmoji) ?? defaultType;\n }\n}\n","import type { Commit as CommitBase } from 'conventional-commits-parser';\nimport { parserOpts } from './parser-opts.js';\nimport { CommitConventionalType } from './data.js';\nimport { GitmojiCode } from './gitmoji.js';\n\nfunction toConventionalCommitType(text: string) {\n return GitmojiCode.isValid(text)\n ? GitmojiCode.toConventionalCommitType(text)\n : CommitConventionalType.hasInstance(text)\n ? text\n : undefined;\n}\n\nexport type Commit = CommitBase;\n\nexport const recommendedBumpOpts = {\n parserOpts,\n whatBump: (commits: ReadonlyArray<Commit>) => {\n let level = 2;\n let breakings = 0;\n let features = 0;\n\n for (const { type, notes } of commits) {\n const conventionalType = type == null ? type : toConventionalCommitType(type);\n if (notes.length > 0) {\n breakings += notes.length;\n level = 0;\n } else if (conventionalType === CommitConventionalType.Feat) {\n features += 1;\n if (level === 2) {\n level = 1;\n }\n }\n }\n\n return {\n level,\n reason:\n breakings === 1\n ? `There is ${breakings} BREAKING CHANGE and ${features} features`\n : `There are ${breakings} BREAKING CHANGES and ${features} features`,\n };\n },\n};\n","import type { Context, Options as WriterOptions } from 'conventional-changelog-writer';\nimport { CommitConventionalType, Commit } from './data.js';\nimport { GitmojiCode } from './gitmoji.js';\n\nexport type Language = 'en-US';\n\nexport interface TransformConfig {\n scopeDisplayName?: Record<string, string>;\n displayTypes?: CommitConventionalType[];\n displayScopes?: string[];\n showAuthor?: boolean;\n withEmoji?: boolean;\n language?: Language;\n}\n\nexport function displayScope(scope: string | null | undefined, scopeDisplayNameMap: Record<string, string>) {\n return scope == null || scope.length === 0\n ? scopeDisplayNameMap['*']\n : scopeDisplayNameMap[scope] == null\n ? scope\n : scopeDisplayNameMap[scope];\n}\n\nexport function displayType(type: string, options: displayType.Options = {}): string {\n const { withEmoji = true, language = 'en-US' } = options;\n\n if (CommitConventionalType.hasInstance(type)) {\n const { emoji, [language]: title } = CommitConventionalType.getData(type);\n return `${withEmoji ? `${emoji} ` : ''}${title}`;\n }\n\n return type;\n}\nexport namespace displayType {\n export interface Options {\n readonly withEmoji?: boolean;\n readonly language?: Language;\n }\n}\n\nexport function createTransform(config: TransformConfig): WriterOptions.Transform.Function {\n const displayTypes = new Set(config.displayTypes == null ? CommitConventionalType.values() : config.displayTypes);\n const ignoreType = (type: string | undefined) => type == null || !displayTypes.has(type as CommitConventionalType);\n const ignoreScope = (scope: string | undefined | null) =>\n config.displayScopes == null ? false : scope != null && !config.displayScopes.includes(scope);\n\n const transform = (commit: Commit, { repository, host, owner, repoUrl }: Context): Commit | false => {\n const discard = commit.notes.length === 0;\n const issues = new Set<string>();\n const notes = commit.notes.map((note) => ({\n ...note,\n title: `${config.withEmoji === false ? '' : '💥 '}BREAKING CHANGES`,\n }));\n const conventionalType =\n commit.type == null\n ? undefined\n : (CommitConventionalType.parse(commit.type) ??\n (GitmojiCode.isValid(commit.type) ? GitmojiCode.toConventionalCommitType(commit.type) : undefined));\n\n if (ignoreType(conventionalType) && discard) return false;\n\n const type =\n conventionalType == null\n ? conventionalType\n : displayType(conventionalType, {\n withEmoji: config.withEmoji,\n });\n\n if (ignoreScope(commit.scope)) return false;\n\n const scopeIntermediate = commit.scope === '*' ? '' : commit.scope;\n const scope =\n config.scopeDisplayName == null ? scopeIntermediate : displayScope(scopeIntermediate, config.scopeDisplayName);\n const hash = typeof commit.hash === 'string' ? commit.hash.slice(0, 7) : commit.hash;\n\n const subject =\n typeof commit.subject === 'string'\n ? (() => {\n let returnValue = commit.subject;\n const url = repository == null ? repoUrl : [host, owner, repository].filter(Boolean).join('/');\n if (url != null) {\n const issueURL = `${url}/issues/`;\n // Issue URLs.\n // eslint-disable-next-line unicorn/prefer-string-replace-all\n returnValue = returnValue.replace(/#(\\d+)/g, (_, issue: string) => {\n issues.add(issue);\n\n return `[#${issue}](${issueURL}${issue})`;\n });\n }\n if (host != null) {\n // User URLs.\n // eslint-disable-next-line unicorn/prefer-string-replace-all\n returnValue = returnValue.replace(/\\B@([\\da-z](?:-?[\\d/a-z]){0,38})/g, (_, username: string) =>\n username.includes('/') ? `@${username}` : `[@${username}](${host}/${username})`\n );\n }\n return returnValue;\n })()\n : commit.subject;\n\n // Remove references that already appear in the subject\n const references = commit.references.filter((reference) => !issues.has(reference.issue));\n\n return {\n ...commit,\n type,\n hash,\n scope,\n subject,\n references,\n header: commit.header,\n body: commit.body,\n footer: commit.footer,\n merge: commit.merge,\n revert: commit.revert,\n notes,\n mentions: commit.mentions,\n };\n };\n\n return transform as unknown as WriterOptions.Transform.Function;\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport type { Options } from 'conventional-changelog-writer';\nimport { fileURLToPath } from 'node:url';\nimport { createTransform } from './transform.js';\nimport { CommitConventionalType } from './data.js';\n\nexport interface WriterOptions extends Options {}\n\nconst _dirname = typeof __dirname === 'undefined' ? dirname(fileURLToPath(import.meta.url)) : __dirname;\nconst basePath = resolve(dirname(_dirname), './template');\n\nconst mainTemplate = readFileSync(`${basePath}/template.hbs`, 'utf8');\nconst headerPartial = readFileSync(`${basePath}/header.hbs`, 'utf8');\nconst commitPartial = readFileSync(`${basePath}/commit.hbs`, 'utf8');\nconst footerPartial = readFileSync(`${basePath}/footer.hbs`, 'utf8');\nconst author = readFileSync(`${basePath}/author.hbs`, 'utf8');\n\nexport const defaultDisplayTypes = CommitConventionalType.findWhere((_) => _.changelog);\n\nexport const writerOpts: WriterOptions = {\n transform: createTransform({\n displayTypes: defaultDisplayTypes,\n }),\n groupBy: 'type',\n commitGroupsSort: 'title',\n commitsSort: ['scope', 'subject'],\n noteGroupsSort: 'title',\n mainTemplate,\n headerPartial,\n // eslint-disable-next-line unicorn/prefer-string-replace-all\n commitPartial: commitPartial.replace(/{{gitUserInfo}}/g, author),\n footerPartial,\n};\n","import { gitRawCommitOpts } from './git-raw-commit-opts.js';\nimport { parserOpts } from './parser-opts.js';\nimport { recommendedBumpOpts } from './recommended-bump-opts.js';\nimport { writerOpts } from './writer-opts.js';\n\nexport * from './gitmoji.js';\n\nexport default {\n parserOpts,\n writerOpts,\n recommendedBumpOpts,\n gitRawCommitOpts,\n};\n"]}
@@ -0,0 +1,81 @@
1
+ import { Options, Commit as Commit$1 } from 'conventional-commits-parser';
2
+ import { Options as Options$1 } from 'conventional-changelog-writer';
3
+
4
+ interface ParserOptions extends Options {
5
+ }
6
+
7
+ type Commit = Commit$1;
8
+
9
+ type CommitConventionalType = 'build' | 'ci' | 'docs' | 'feat' | 'fix' | 'perf' | 'refactor' | 'revert' | 'style' | 'test' | 'wip' | 'chore';
10
+ declare const CommitConventionalType: {
11
+ hasInstance: (anyValue: unknown) => anyValue is CommitConventionalType;
12
+ getData: (commitType: CommitConventionalType) => CommitConventionalTypeData;
13
+ values: () => readonly CommitConventionalType[];
14
+ parse: (anyValue: string) => CommitConventionalType | undefined;
15
+ findWhere: (predicate: (data: CommitConventionalTypeData) => boolean) => CommitConventionalType[];
16
+ Build: "build";
17
+ CI: "ci";
18
+ Docs: "docs";
19
+ Feat: "feat";
20
+ Fix: "fix";
21
+ Perf: "perf";
22
+ Refactor: "refactor";
23
+ Revert: "revert";
24
+ Style: "style";
25
+ Test: "test";
26
+ WIP: "wip";
27
+ Chore: "chore";
28
+ };
29
+ interface CommitConventionalTypeData {
30
+ emoji: string;
31
+ 'en-US': string;
32
+ changelog: boolean;
33
+ }
34
+
35
+ interface WriterOptions extends Options$1 {
36
+ }
37
+
38
+ type Emoji = Emoji.Unicode | Emoji.Text;
39
+ declare namespace Emoji {
40
+ const reEmojiUnicode: RegExp;
41
+ const reEmojiText: RegExp;
42
+ type Unicode = string & {
43
+ '@@EmojiStyle': 'unicode';
44
+ };
45
+ type Text = string & {
46
+ '@@EmojiStyle': 'text';
47
+ };
48
+ function isUnicode(anyValue: string): anyValue is Unicode;
49
+ function isText(anyValue: string): anyValue is Text;
50
+ function hasInstance(anyValue: string): anyValue is Emoji;
51
+ }
52
+ type GitmojiCode = Emoji & {
53
+ '@@Gitmoji': true;
54
+ };
55
+ declare namespace GitmojiCode {
56
+ type Unicode = Emoji.Unicode & {
57
+ '@@Gitmoji': true;
58
+ };
59
+ type Emoji = Emoji.Text & {
60
+ '@@Gitmoji': true;
61
+ };
62
+ function isValid(anyValue: string): anyValue is GitmojiCode;
63
+ function toConventionalCommitType(gitmoji: GitmojiCode): CommitConventionalType;
64
+ }
65
+
66
+ declare const _default: {
67
+ parserOpts: ParserOptions;
68
+ writerOpts: WriterOptions;
69
+ recommendedBumpOpts: {
70
+ parserOpts: ParserOptions;
71
+ whatBump: (commits: ReadonlyArray<Commit>) => {
72
+ level: number;
73
+ reason: string;
74
+ };
75
+ };
76
+ gitRawCommitOpts: {
77
+ format: string;
78
+ };
79
+ };
80
+
81
+ export { Emoji, GitmojiCode, _default as default };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,74 @@
1
+ import { Options, Commit as Commit$1 } from 'conventional-commits-parser';
2
+ import { Options as Options$1 } from 'conventional-changelog-writer';
3
+
4
+ interface ParserOptions extends Options {
5
+ }
6
+
7
+ type Commit = Commit$1;
8
+
9
+ type CommitConventionalType = 'build' | 'ci' | 'docs' | 'feat' | 'fix' | 'perf' | 'refactor' | 'revert' | 'style' | 'test' | 'wip' | 'chore';
10
+ declare const CommitConventionalType: {
11
+ hasInstance: (anyValue: unknown) => anyValue is CommitConventionalType;
12
+ getData: (commitType: CommitConventionalType) => CommitConventionalTypeData;
13
+ values: () => readonly CommitConventionalType[];
14
+ parse: (anyValue: string) => CommitConventionalType | undefined;
15
+ findWhere: (predicate: (data: CommitConventionalTypeData) => boolean) => CommitConventionalType[];
16
+ Build: "build";
17
+ CI: "ci";
18
+ Docs: "docs";
19
+ Feat: "feat";
20
+ Fix: "fix";
21
+ Perf: "perf";
22
+ Refactor: "refactor";
23
+ Revert: "revert";
24
+ Style: "style";
25
+ Test: "test";
26
+ WIP: "wip";
27
+ Chore: "chore";
28
+ };
29
+ interface CommitConventionalTypeData {
30
+ emoji: string;
31
+ 'en-US': string;
32
+ changelog: boolean;
33
+ }
34
+
35
+ interface WriterOptions extends Options$1 {
36
+ }
37
+
38
+ type Emoji = Emoji.Unicode | Emoji.Text;
39
+ declare namespace Emoji {
40
+ const reEmojiUnicode: RegExp;
41
+ const reEmojiText: RegExp;
42
+ type Unicode = string & {
43
+ '@@EmojiStyle': 'unicode';
44
+ };
45
+ type Text = string & {
46
+ '@@EmojiStyle': 'text';
47
+ };
48
+ function isUnicode(anyValue: string): anyValue is Unicode;
49
+ function isText(anyValue: string): anyValue is Text;
50
+ function hasInstance(anyValue: string): anyValue is Emoji;
51
+ }
52
+ type GitmojiCode = Emoji & {
53
+ '@@Gitmoji': true;
54
+ };
55
+ declare namespace GitmojiCode {
56
+ type Unicode = Emoji.Unicode & {
57
+ '@@Gitmoji': true;
58
+ };
59
+ type Emoji = Emoji.Text & {
60
+ '@@Gitmoji': true;
61
+ };
62
+ function isValid(anyValue: string): anyValue is GitmojiCode;
63
+ function toConventionalCommitType(gitmoji: GitmojiCode): CommitConventionalType;
64
+ }
65
+
1
66
  declare const _default: {
2
- parserOpts: import("./parser-opts.js").ParserOptions;
3
- writerOpts: import("./writer-opts.js").WriterOptions;
67
+ parserOpts: ParserOptions;
68
+ writerOpts: WriterOptions;
4
69
  recommendedBumpOpts: {
5
- parserOpts: import("./parser-opts.js").ParserOptions;
6
- whatBump: (commits: ReadonlyArray<import("./recommended-bump-opts.js").Commit>) => {
70
+ parserOpts: ParserOptions;
71
+ whatBump: (commits: ReadonlyArray<Commit>) => {
7
72
  level: number;
8
73
  reason: string;
9
74
  };
@@ -12,4 +77,5 @@ declare const _default: {
12
77
  format: string;
13
78
  };
14
79
  };
15
- export default _default;
80
+
81
+ export { Emoji, GitmojiCode, _default as default };