conventional-commits-parser 5.0.0 → 6.0.0

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.
@@ -0,0 +1,317 @@
1
+ import { getParserRegexes } from './regex.js';
2
+ import { trimNewLines, appendLine, getCommentFilter, gpgFilter, truncateToScissor } from './utils.js';
3
+ import { defaultOptions } from './options.js';
4
+ /**
5
+ * Helper to create commit object.
6
+ * @param initialData - Initial commit data.
7
+ * @returns Commit object with empty data.
8
+ */
9
+ export function createCommitObject(initialData = {}) {
10
+ // @ts-expect-error: You can read properties from `Commit` without problems, but you can't assign object to this type. So here is helper for that.
11
+ return {
12
+ merge: null,
13
+ revert: null,
14
+ header: null,
15
+ body: null,
16
+ footer: null,
17
+ notes: [],
18
+ mentions: [],
19
+ references: [],
20
+ ...initialData
21
+ };
22
+ }
23
+ /**
24
+ * Commit message parser.
25
+ */
26
+ export class CommitParser {
27
+ options;
28
+ regexes;
29
+ lines = [];
30
+ lineIndex = 0;
31
+ commit = createCommitObject();
32
+ constructor(options = {}) {
33
+ this.options = {
34
+ ...defaultOptions,
35
+ ...options
36
+ };
37
+ this.regexes = getParserRegexes(this.options);
38
+ }
39
+ currentLine() {
40
+ return this.lines[this.lineIndex];
41
+ }
42
+ nextLine() {
43
+ return this.lines[this.lineIndex++];
44
+ }
45
+ isLineAvailable() {
46
+ return this.lineIndex < this.lines.length;
47
+ }
48
+ parseReference(input, action) {
49
+ const { regexes } = this;
50
+ const matches = regexes.referenceParts.exec(input);
51
+ if (!matches) {
52
+ return null;
53
+ }
54
+ let [raw, repository = null, prefix, issue] = matches;
55
+ let owner = null;
56
+ if (repository) {
57
+ const slashIndex = repository.indexOf('/');
58
+ if (slashIndex !== -1) {
59
+ owner = repository.slice(0, slashIndex);
60
+ repository = repository.slice(slashIndex + 1);
61
+ }
62
+ }
63
+ return {
64
+ raw,
65
+ action,
66
+ owner,
67
+ repository,
68
+ prefix,
69
+ issue
70
+ };
71
+ }
72
+ parseReferences(input) {
73
+ const { regexes } = this;
74
+ const regex = input.match(regexes.references)
75
+ ? regexes.references
76
+ : /()(.+)/gi;
77
+ const references = [];
78
+ let matches;
79
+ let action;
80
+ let sentence;
81
+ let reference;
82
+ while (true) {
83
+ matches = regex.exec(input);
84
+ if (!matches) {
85
+ break;
86
+ }
87
+ action = matches[1] || null;
88
+ sentence = matches[2] || '';
89
+ while (true) {
90
+ reference = this.parseReference(sentence, action);
91
+ if (!reference) {
92
+ break;
93
+ }
94
+ references.push(reference);
95
+ }
96
+ }
97
+ return references;
98
+ }
99
+ skipEmptyLines() {
100
+ let line = this.currentLine();
101
+ while (line !== undefined && !line.trim()) {
102
+ this.nextLine();
103
+ line = this.currentLine();
104
+ }
105
+ }
106
+ parseMerge() {
107
+ const { commit, options } = this;
108
+ const correspondence = options.mergeCorrespondence || [];
109
+ const merge = this.currentLine();
110
+ const matches = merge && options.mergePattern
111
+ ? merge.match(options.mergePattern)
112
+ : null;
113
+ if (matches) {
114
+ this.nextLine();
115
+ commit.merge = matches[0] || null;
116
+ correspondence.forEach((key, index) => {
117
+ commit[key] = matches[index + 1] || null;
118
+ });
119
+ return true;
120
+ }
121
+ return false;
122
+ }
123
+ parseHeader(isMergeCommit) {
124
+ if (isMergeCommit) {
125
+ this.skipEmptyLines();
126
+ }
127
+ const { commit, options } = this;
128
+ const correspondence = options.headerCorrespondence || [];
129
+ const header = this.nextLine();
130
+ let matches = null;
131
+ if (header) {
132
+ if (options.breakingHeaderPattern) {
133
+ matches = header.match(options.breakingHeaderPattern);
134
+ }
135
+ if (!matches && options.headerPattern) {
136
+ matches = header.match(options.headerPattern);
137
+ }
138
+ }
139
+ if (header) {
140
+ commit.header = header;
141
+ }
142
+ if (matches) {
143
+ correspondence.forEach((key, index) => {
144
+ commit[key] = matches[index + 1] || null;
145
+ });
146
+ }
147
+ }
148
+ parseMeta() {
149
+ const { options, commit } = this;
150
+ if (!options.fieldPattern || !this.isLineAvailable()) {
151
+ return false;
152
+ }
153
+ let matches;
154
+ let field = null;
155
+ let parsed = false;
156
+ while (this.isLineAvailable()) {
157
+ matches = this.currentLine().match(options.fieldPattern);
158
+ if (matches) {
159
+ field = matches[1] || null;
160
+ this.nextLine();
161
+ continue;
162
+ }
163
+ if (field) {
164
+ parsed = true;
165
+ commit[field] = appendLine(commit[field], this.currentLine());
166
+ this.nextLine();
167
+ }
168
+ else {
169
+ break;
170
+ }
171
+ }
172
+ return parsed;
173
+ }
174
+ parseNotes() {
175
+ const { regexes, commit } = this;
176
+ if (!this.isLineAvailable()) {
177
+ return false;
178
+ }
179
+ const matches = this.currentLine().match(regexes.notes);
180
+ let references = [];
181
+ if (matches) {
182
+ const note = {
183
+ title: matches[1],
184
+ text: matches[2]
185
+ };
186
+ commit.notes.push(note);
187
+ commit.footer = appendLine(commit.footer, this.currentLine());
188
+ this.nextLine();
189
+ while (this.isLineAvailable()) {
190
+ if (this.parseMeta()) {
191
+ return true;
192
+ }
193
+ if (this.parseNotes()) {
194
+ return true;
195
+ }
196
+ references = this.parseReferences(this.currentLine());
197
+ if (references.length) {
198
+ commit.references.push(...references);
199
+ }
200
+ else {
201
+ note.text = appendLine(note.text, this.currentLine());
202
+ }
203
+ commit.footer = appendLine(commit.footer, this.currentLine());
204
+ this.nextLine();
205
+ if (references.length) {
206
+ break;
207
+ }
208
+ }
209
+ return true;
210
+ }
211
+ return false;
212
+ }
213
+ parseBodyAndFooter(isBody) {
214
+ const { commit } = this;
215
+ if (!this.isLineAvailable()) {
216
+ return isBody;
217
+ }
218
+ const references = this.parseReferences(this.currentLine());
219
+ const isStillBody = !references.length && isBody;
220
+ if (isStillBody) {
221
+ commit.body = appendLine(commit.body, this.currentLine());
222
+ }
223
+ else {
224
+ commit.references.push(...references);
225
+ commit.footer = appendLine(commit.footer, this.currentLine());
226
+ }
227
+ this.nextLine();
228
+ return isStillBody;
229
+ }
230
+ parseBreakingHeader() {
231
+ const { commit, options } = this;
232
+ if (!options.breakingHeaderPattern || commit.notes.length || !commit.header) {
233
+ return;
234
+ }
235
+ const matches = commit.header.match(options.breakingHeaderPattern);
236
+ if (matches) {
237
+ commit.notes.push({
238
+ title: 'BREAKING CHANGE',
239
+ text: matches[3]
240
+ });
241
+ }
242
+ }
243
+ parseMentions(input) {
244
+ const { commit, regexes } = this;
245
+ let matches;
246
+ for (;;) {
247
+ matches = regexes.mentions.exec(input);
248
+ if (!matches) {
249
+ break;
250
+ }
251
+ commit.mentions.push(matches[1]);
252
+ }
253
+ }
254
+ parseRevert(input) {
255
+ const { commit, options } = this;
256
+ const correspondence = options.revertCorrespondence || [];
257
+ const matches = options.revertPattern
258
+ ? input.match(options.revertPattern)
259
+ : null;
260
+ if (matches) {
261
+ commit.revert = correspondence.reduce((meta, key, index) => {
262
+ meta[key] = matches[index + 1] || null;
263
+ return meta;
264
+ }, {});
265
+ }
266
+ }
267
+ cleanupCommit() {
268
+ const { commit } = this;
269
+ if (commit.body) {
270
+ commit.body = trimNewLines(commit.body);
271
+ }
272
+ if (commit.footer) {
273
+ commit.footer = trimNewLines(commit.footer);
274
+ }
275
+ commit.notes.forEach((note) => {
276
+ note.text = trimNewLines(note.text);
277
+ });
278
+ }
279
+ /**
280
+ * Parse commit message string into an object.
281
+ * @param input - Commit message string.
282
+ * @returns Commit object.
283
+ */
284
+ parse(input) {
285
+ if (!input.trim()) {
286
+ throw new TypeError('Expected a raw commit');
287
+ }
288
+ const commentFilter = getCommentFilter(this.options.commentChar);
289
+ const rawLines = trimNewLines(input).split(/\r?\n/);
290
+ const lines = truncateToScissor(rawLines).filter(line => commentFilter(line) && gpgFilter(line));
291
+ const commit = createCommitObject();
292
+ this.lines = lines;
293
+ this.lineIndex = 0;
294
+ this.commit = commit;
295
+ const isMergeCommit = this.parseMerge();
296
+ this.parseHeader(isMergeCommit);
297
+ if (commit.header) {
298
+ commit.references = this.parseReferences(commit.header);
299
+ }
300
+ let isBody = true;
301
+ while (this.isLineAvailable()) {
302
+ this.parseMeta();
303
+ if (this.parseNotes()) {
304
+ isBody = false;
305
+ }
306
+ if (!this.parseBodyAndFooter(isBody)) {
307
+ isBody = false;
308
+ }
309
+ }
310
+ this.parseBreakingHeader();
311
+ this.parseMentions(input);
312
+ this.parseRevert(input);
313
+ this.cleanupCommit();
314
+ return commit;
315
+ }
316
+ }
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWl0UGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NvbW1pdFBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDN0MsT0FBTyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxZQUFZLENBQUE7QUFDbkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUU3Qzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLGNBQStCLEVBQUU7SUFDbEUsa0pBQWtKO0lBQ2xKLE9BQU87UUFDTCxLQUFLLEVBQUUsSUFBSTtRQUNYLE1BQU0sRUFBRSxJQUFJO1FBQ1osTUFBTSxFQUFFLElBQUk7UUFDWixJQUFJLEVBQUUsSUFBSTtRQUNWLE1BQU0sRUFBRSxJQUFJO1FBQ1osS0FBSyxFQUFFLEVBQUU7UUFDVCxRQUFRLEVBQUUsRUFBRTtRQUNaLFVBQVUsRUFBRSxFQUFFO1FBQ2QsR0FBRyxXQUFXO0tBQ2YsQ0FBQTtBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ04sT0FBTyxDQUFlO0lBQ3RCLE9BQU8sQ0FBZTtJQUMvQixLQUFLLEdBQWEsRUFBRSxDQUFBO0lBQ3BCLFNBQVMsR0FBRyxDQUFDLENBQUE7SUFDYixNQUFNLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQTtJQUVyQyxZQUFZLFVBQXlCLEVBQUU7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLEdBQUcsY0FBYztZQUNqQixHQUFHLE9BQU87U0FDWCxDQUFBO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVPLFdBQVc7UUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxD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
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env node
2
+ import { pipeline } from 'stream/promises';
3
+ import meow from 'meow';
4
+ import { parseCommits } from '../index.js';
5
+ import { parseOptions } from './options.js';
6
+ import { readRawCommitsFromFiles, readRawCommitsFromLine, readRawCommitsFromStdin, stringify } from './utils.js';
7
+ const DEFAULT_SEPARATOR = '\n\n\n';
8
+ const cli = meow(`
9
+ Practice writing commit messages or parse messages from files.
10
+ If used without specifying a text file path, you will enter an interactive shell.
11
+ Otherwise the commit messages in the files are parsed and printed
12
+ By default, commits will be split by three newlines ('\\n\\n\\n') or you can specify a separator.
13
+
14
+ Usage
15
+ conventional-commits-parser [-s <commit-separator>]
16
+ conventional-commits-parser [-s <commit-separator>] <path> [<path> ...]
17
+ cat <path> | conventional-commits-parser [-s <commit-separator>]
18
+
19
+ Example
20
+ conventional-commits-parser
21
+ conventional-commits-parser log.txt
22
+ cat log.txt | conventional-commits-parser
23
+ conventional-commits-parser log2.txt -s '===' >> parsed.txt
24
+
25
+ Options
26
+ -s, --separator Commit separator
27
+ -p, --header-pattern Regex to match header pattern
28
+ -c, --header-correspondence Comma separated parts used to define what capturing group of 'headerPattern' captures what
29
+ -r, --reference-actions Comma separated keywords that used to reference issues
30
+ -i, --issue-prefixes Comma separated prefixes of an issue
31
+ --issue-prefixes-case-sensitive Treat issue prefixes as case sensitive
32
+ -n, --note-keywords Comma separated keywords for important notes
33
+ -f, --field-pattern Regex to match other fields
34
+ --revert-pattern Regex to match revert pattern
35
+ --revert-correspondence Comma separated fields used to define what the commit reverts
36
+ -v, --verbose Verbose output
37
+ `, {
38
+ importMeta: import.meta,
39
+ flags: {
40
+ separator: {
41
+ shortFlag: 's',
42
+ type: 'string',
43
+ default: DEFAULT_SEPARATOR
44
+ },
45
+ headerPattern: {
46
+ shortFlag: 'p',
47
+ type: 'string'
48
+ },
49
+ headerCorrespondence: {
50
+ shortFlag: 'c',
51
+ type: 'string'
52
+ },
53
+ referenceActions: {
54
+ shortFlag: 'r',
55
+ type: 'string'
56
+ },
57
+ issuePrefixes: {
58
+ shortFlag: 'i',
59
+ type: 'string'
60
+ },
61
+ issuePrefixesCaseSensitive: {
62
+ type: 'boolean'
63
+ },
64
+ noteKeywords: {
65
+ shortFlag: 'n',
66
+ type: 'string'
67
+ },
68
+ fieldPattern: {
69
+ shortFlag: 'f',
70
+ type: 'string'
71
+ },
72
+ revertPattern: {
73
+ type: 'string'
74
+ },
75
+ revertCorrespondence: {
76
+ type: 'string'
77
+ },
78
+ verbose: {
79
+ shortFlag: 'v',
80
+ type: 'boolean'
81
+ }
82
+ }
83
+ });
84
+ const { separator } = cli.flags;
85
+ const options = parseOptions(cli.flags);
86
+ let inputStream;
87
+ try {
88
+ if (cli.input.length) {
89
+ inputStream = readRawCommitsFromFiles(cli.input, separator);
90
+ }
91
+ else if (process.stdin.isTTY) {
92
+ inputStream = readRawCommitsFromLine(separator);
93
+ }
94
+ else {
95
+ inputStream = readRawCommitsFromStdin(separator);
96
+ }
97
+ await pipeline(inputStream, parseCommits(options), stringify, process.stdout);
98
+ }
99
+ catch (err) {
100
+ console.error(err);
101
+ process.exit(1);
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsU0FBUyxFQUNWLE1BQU0sWUFBWSxDQUFBO0FBRW5CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFBO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2QmhCLEVBQUU7SUFDRCxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUk7SUFDdkIsS0FBSyxFQUFFO1FBQ0wsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFLEdBQUc7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLE9BQU8sRUFBRSxpQkFBaUI7U0FDM0I7UUFDRCxhQUFhLEVBQUU7WUFDYixTQUFTLEVBQUUsR0FBRztZQUNkLElBQUksRUFBRSxRQUFRO1NBQ2Y7UUFDRCxvQkFBb0IsRUFBRTtZQUNwQixTQUFTLEVBQUUsR0FBRztZQUNkLElBQUksRUFBRSxRQUFRO1NBQ2Y7UUFDRCxnQkFBZ0IsRUFBRTtZQUNoQixTQUFTLEVBQUUsR0FBRztZQUNkLElBQUksRUFBRSxRQUFRO1NBQ2Y7UUFDRCxhQUFhLEVBQUU7WUFDYixTQUFTLEVBQUUsR0FBRztZQUNkLElBQUksRUFBRSxRQUFRO1NBQ2Y7UUFDRCwwQkFBMEIsRUFBRTtZQUMxQixJQUFJLEVBQUUsU0FBUztTQUNoQjtRQUNELFlBQVksRUFBRTtZQUNaLFNBQVMsRUFBRSxHQUFHO1lBQ2QsSUFBSSxFQUFFLFFBQVE7U0FDZjtRQUNELFlBQVksRUFBRTtZQUNaLFNBQVMsRUFBRSxHQUFHO1lBQ2QsSUFBSSxFQUFFLFFBQVE7U0FDZjtRQUNELGFBQWEsRUFBRTtZQUNiLElBQUksRUFBRSxRQUFRO1NBQ2Y7UUFDRCxvQkFBb0IsRUFBRTtZQUNwQixJQUFJLEVBQUUsUUFBUTtTQUNmO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsU0FBUyxFQUFFLEdBQUc7WUFDZCxJQUFJLEVBQUUsU0FBUztTQUNoQjtLQUNGO0NBQ0YsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUE7QUFDL0IsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUN2QyxJQUFJLFdBQWtDLENBQUE7QUFFdEMsSUFBSTtJQUNGLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDcEIsV0FBVyxHQUFHLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUE7S0FDNUQ7U0FDQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtLQUNoRDtTQUFNO1FBQ0wsV0FBVyxHQUFHLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFBO0tBQ2pEO0lBRUgsTUFBTSxRQUFRLENBQ1osV0FBVyxFQUNYLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFDckIsU0FBUyxFQUNULE9BQU8sQ0FBQyxNQUFNLENBQ2YsQ0FBQTtDQUNGO0FBQUMsT0FBTyxHQUFHLEVBQUU7SUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDaEIifQ==
@@ -0,0 +1,3 @@
1
+ import type { ParserStreamOptions } from '../types.js';
2
+ export declare function parseOptions(options: Record<string, unknown>): ParserStreamOptions;
3
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMtD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,mBAAmB,CA4ClF"}
@@ -0,0 +1,40 @@
1
+ function trim(str) {
2
+ return str.trim();
3
+ }
4
+ export function parseOptions(options) {
5
+ if (typeof options.headerPattern === 'string') {
6
+ options.headerPattern = new RegExp(options.headerPattern);
7
+ }
8
+ if (typeof options.headerCorrespondence === 'string') {
9
+ options.headerCorrespondence = options.headerCorrespondence.split(',').map(trim);
10
+ }
11
+ if (typeof options.referenceActions === 'string') {
12
+ options.referenceActions = options.referenceActions.split(',').map(trim);
13
+ }
14
+ if (typeof options.issuePrefixes === 'string') {
15
+ options.issuePrefixes = options.issuePrefixes.split(',').map(trim);
16
+ }
17
+ if (typeof options.noteKeywords === 'string') {
18
+ options.noteKeywords = options.noteKeywords.split(',').map(trim);
19
+ }
20
+ if (typeof options.fieldPattern === 'string') {
21
+ options.fieldPattern = new RegExp(options.fieldPattern);
22
+ }
23
+ if (typeof options.revertPattern === 'string') {
24
+ options.revertPattern = new RegExp(options.revertPattern);
25
+ }
26
+ if (typeof options.revertCorrespondence === 'string') {
27
+ options.revertCorrespondence = options.revertCorrespondence.split(',').map(trim);
28
+ }
29
+ if (typeof options.mergePattern === 'string') {
30
+ options.mergePattern = new RegExp(options.mergePattern);
31
+ }
32
+ if (options.verbose) {
33
+ options.warn = console.warn.bind(console);
34
+ }
35
+ else {
36
+ options.warn = true;
37
+ }
38
+ return options;
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxTQUFTLElBQUksQ0FBQyxHQUFXO0lBQ3ZCLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQWdDO0lBQzNELElBQUksT0FBTyxPQUFPLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRTtRQUM3QyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtLQUMxRDtJQUVELElBQUksT0FBTyxPQUFPLENBQUMsb0JBQW9CLEtBQUssUUFBUSxFQUFFO1FBQ3BELE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUNqRjtJQUVELElBQUksT0FBTyxPQUFPLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxFQUFFO1FBQ2hELE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUN6RTtJQUVELElBQUksT0FBTyxPQUFPLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRTtRQUM3QyxPQUFPLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUNuRTtJQUVELElBQUksT0FBTyxPQUFPLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUM1QyxPQUFPLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUNqRTtJQUVELElBQUksT0FBTyxPQUFPLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUM1QyxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtLQUN4RDtJQUVELElBQUksT0FBTyxPQUFPLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRTtRQUM3QyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtLQUMxRDtJQUVELElBQUksT0FBTyxPQUFPLENBQUMsb0JBQW9CLEtBQUssUUFBUSxFQUFFO1FBQ3BELE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUNqRjtJQUVELElBQUksT0FBTyxPQUFPLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUM1QyxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtLQUN4RDtJQUVELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtRQUNuQixPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzFDO1NBQU07UUFDTCxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtLQUNwQjtJQUVELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMifQ==
@@ -0,0 +1,8 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import type { Readable } from 'stream';
3
+ export declare function splitStream(stream: Readable, separator: string): AsyncGenerator<string, void, undefined>;
4
+ export declare function readRawCommitsFromFiles(files: string[], separator: string): AsyncGenerator<string, void, undefined>;
5
+ export declare function readRawCommitsFromLine(separator: string): AsyncGenerator<string, void, unknown>;
6
+ export declare function readRawCommitsFromStdin(separator: string): AsyncGenerator<string, void, undefined>;
7
+ export declare function stringify(commits: AsyncIterable<Record<string, unknown>>): AsyncGenerator<string, void, unknown>;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cli/utils.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAItC,wBAAuB,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,2CAmBrE;AAED,wBAAuB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,2CAQhF;AAED,wBAAuB,sBAAsB,CAAC,SAAS,EAAE,MAAM,yCAmB9D;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,2CAExD;AAMD,wBAAuB,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,yCAe/E"}
@@ -0,0 +1,64 @@
1
+ import fs from 'fs';
2
+ import readline from 'readline';
3
+ export async function* splitStream(stream, separator) {
4
+ let chunk;
5
+ let payload;
6
+ let buffer = '';
7
+ for await (chunk of stream) {
8
+ buffer += chunk.toString();
9
+ if (buffer.includes(separator)) {
10
+ payload = buffer.split(separator);
11
+ buffer = payload.pop() || '';
12
+ yield* payload;
13
+ }
14
+ }
15
+ if (buffer) {
16
+ yield buffer;
17
+ }
18
+ }
19
+ export async function* readRawCommitsFromFiles(files, separator) {
20
+ for (const file of files) {
21
+ try {
22
+ yield* splitStream(fs.createReadStream(file), separator);
23
+ }
24
+ catch (err) {
25
+ console.warn(`Failed to read file ${file}:\n ${err}`);
26
+ }
27
+ }
28
+ }
29
+ export async function* readRawCommitsFromLine(separator) {
30
+ const rl = readline.createInterface({
31
+ input: process.stdin,
32
+ output: process.stdout,
33
+ terminal: true
34
+ });
35
+ let line = '';
36
+ let commit = '';
37
+ for await (line of rl) {
38
+ commit += `${line}\n`;
39
+ if (!commit.includes(separator)) {
40
+ return;
41
+ }
42
+ yield commit;
43
+ commit = '';
44
+ }
45
+ }
46
+ export function readRawCommitsFromStdin(separator) {
47
+ return splitStream(process.stdin, separator);
48
+ }
49
+ const JSON_STREAM_OPEN = '[\n';
50
+ const JSON_STREAM_SEPARATOR = '\n,\n';
51
+ const JSON_STREAM_CLOSE = '\n]\n';
52
+ export async function* stringify(commits) {
53
+ let jsonStreamOpened = false;
54
+ yield JSON_STREAM_OPEN;
55
+ for await (const commit of commits) {
56
+ if (jsonStreamOpened) {
57
+ yield JSON_STREAM_SEPARATOR;
58
+ }
59
+ yield JSON.stringify(commit);
60
+ jsonStreamOpened = true;
61
+ }
62
+ yield JSON_STREAM_CLOSE;
63
+ }
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQTtBQUNuQixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFFL0IsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQWdCLEVBQUUsU0FBaUI7SUFDcEUsSUFBSSxLQUFhLENBQUE7SUFDakIsSUFBSSxPQUFpQixDQUFBO0lBQ3JCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUVmLElBQUksS0FBSyxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUUxQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDOUIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDakMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUE7WUFFNUIsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFBO1NBQ2Y7S0FDRjtJQUVELElBQUksTUFBTSxFQUFFO1FBQ1YsTUFBTSxNQUFNLENBQUE7S0FDYjtBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFlLEVBQUUsU0FBaUI7SUFDL0UsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7UUFDeEIsSUFBSTtZQUNGLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUE7U0FDekQ7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksUUFBUSxHQUFhLEVBQUUsQ0FBQyxDQUFBO1NBQ2pFO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsc0JBQXNCLENBQUMsU0FBaUI7SUFDN0QsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxDQUFBO0lBQ0YsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ2IsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFBO0lBRWYsSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRTtRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQTtRQUVyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMvQixPQUFNO1NBQ1A7UUFFRCxNQUFNLE1BQU0sQ0FBQTtRQUNaLE1BQU0sR0FBRyxFQUFFLENBQUE7S0FDWjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsU0FBaUI7SUFDdkQsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUM5QyxDQUFDO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7QUFDOUIsTUFBTSxxQkFBcUIsR0FBRyxPQUFPLENBQUE7QUFDckMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUE7QUFFakMsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQStDO0lBQzlFLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO0lBRTVCLE1BQU0sZ0JBQWdCLENBQUE7SUFFdEIsSUFBSSxLQUFLLEVBQUUsTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1FBQ2xDLElBQUksZ0JBQWdCLEVBQUU7WUFDcEIsTUFBTSxxQkFBcUIsQ0FBQTtTQUM1QjtRQUVELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM1QixnQkFBZ0IsR0FBRyxJQUFJLENBQUE7S0FDeEI7SUFFRCxNQUFNLGlCQUFpQixDQUFBO0FBQ3pCLENBQUMifQ==
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './CommitParser.js';
3
+ export * from './stream.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './CommitParser.js';
3
+ export * from './stream.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUE7QUFDMUIsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLGFBQWEsQ0FBQSJ9
@@ -0,0 +1,3 @@
1
+ import type { ParserOptions } from './types.js';
2
+ export declare const defaultOptions: ParserOptions;
3
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,cAAc,EAAE,aAuB5B,CAAA"}
@@ -0,0 +1,25 @@
1
+ export const defaultOptions = {
2
+ noteKeywords: ['BREAKING CHANGE', 'BREAKING-CHANGE'],
3
+ issuePrefixes: ['#'],
4
+ referenceActions: [
5
+ 'close',
6
+ 'closes',
7
+ 'closed',
8
+ 'fix',
9
+ 'fixes',
10
+ 'fixed',
11
+ 'resolve',
12
+ 'resolves',
13
+ 'resolved'
14
+ ],
15
+ headerPattern: /^(\w*)(?:\(([\w$.\-*/ ]*)\))?: (.*)$/,
16
+ headerCorrespondence: [
17
+ 'type',
18
+ 'scope',
19
+ 'subject'
20
+ ],
21
+ revertPattern: /^Revert\s"([\s\S]*)"\s*This reverts commit (\w*)\./,
22
+ revertCorrespondence: ['header', 'hash'],
23
+ fieldPattern: /^-(.*?)-$/
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBa0I7SUFDM0MsWUFBWSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUM7SUFDcEQsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ3BCLGdCQUFnQixFQUFFO1FBQ2hCLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUTtRQUNSLEtBQUs7UUFDTCxPQUFPO1FBQ1AsT0FBTztRQUNQLFNBQVM7UUFDVCxVQUFVO1FBQ1YsVUFBVTtLQUNYO0lBQ0QsYUFBYSxFQUFFLHNDQUFzQztJQUNyRCxvQkFBb0IsRUFBRTtRQUNwQixNQUFNO1FBQ04sT0FBTztRQUNQLFNBQVM7S0FDVjtJQUNELGFBQWEsRUFBRSxvREFBb0Q7SUFDbkUsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ3hDLFlBQVksRUFBRSxXQUFXO0NBQzFCLENBQUEifQ==
@@ -0,0 +1,8 @@
1
+ import type { ParserOptions, ParserRegexes } from './types.js';
2
+ /**
3
+ * Make the regexes used to parse a commit.
4
+ * @param options
5
+ * @returns Regexes.
6
+ */
7
+ export declare function getParserRegexes(options?: Pick<ParserOptions, 'noteKeywords' | 'notesPattern' | 'issuePrefixes' | 'issuePrefixesCaseSensitive' | 'referenceActions'>): ParserRegexes;
8
+ //# sourceMappingURL=regex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../src/regex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACd,MAAM,YAAY,CAAA;AAsDnB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,IAAI,CAAC,aAAa,EAAE,cAAc,GAAG,cAAc,GAAG,eAAe,GAAG,4BAA4B,GAAG,kBAAkB,CAAM,GACvI,aAAa,CAWf"}