@mnaoumov/typescript-dev-toolkit 6.1.0 → 6.3.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.
Files changed (36) hide show
  1. package/README.md +18 -0
  2. package/bin/rewrite-changelog.mjs +8 -0
  3. package/dist/lib/cjs/changelog-grouping.cjs +153 -0
  4. package/dist/lib/cjs/changelog-grouping.d.cts +70 -0
  5. package/dist/lib/cjs/changelog-rewrite-cli.cjs +177 -0
  6. package/dist/lib/cjs/changelog-rewrite-cli.d.cts +105 -0
  7. package/dist/lib/cjs/changelog-rewrite.cjs +143 -0
  8. package/dist/lib/cjs/changelog-rewrite.d.cts +108 -0
  9. package/dist/lib/cjs/index.cjs +10 -1
  10. package/dist/lib/cjs/index.d.cts +3 -0
  11. package/dist/lib/cjs/linters/eslint-config.cjs +4 -1
  12. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +3 -1
  13. package/dist/lib/cjs/linters/eslint-rules/index.cjs +4 -1
  14. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +1 -0
  15. package/dist/lib/cjs/linters/eslint-rules/prefer-spread.cjs +114 -0
  16. package/dist/lib/cjs/linters/eslint-rules/prefer-spread.d.cts +12 -0
  17. package/dist/lib/cjs/version.cjs +57 -22
  18. package/dist/lib/cjs/version.d.cts +29 -0
  19. package/dist/lib/esm/changelog-grouping.d.mts +70 -0
  20. package/dist/lib/esm/changelog-grouping.mjs +126 -0
  21. package/dist/lib/esm/changelog-rewrite-cli.d.mts +105 -0
  22. package/dist/lib/esm/changelog-rewrite-cli.mjs +147 -0
  23. package/dist/lib/esm/changelog-rewrite.d.mts +108 -0
  24. package/dist/lib/esm/changelog-rewrite.mjs +118 -0
  25. package/dist/lib/esm/index.d.mts +3 -0
  26. package/dist/lib/esm/index.mjs +7 -1
  27. package/dist/lib/esm/linters/eslint-config.mjs +4 -1
  28. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +3 -1
  29. package/dist/lib/esm/linters/eslint-rules/index.d.mts +1 -0
  30. package/dist/lib/esm/linters/eslint-rules/index.mjs +3 -1
  31. package/dist/lib/esm/linters/eslint-rules/prefer-spread.d.mts +12 -0
  32. package/dist/lib/esm/linters/eslint-rules/prefer-spread.mjs +80 -0
  33. package/dist/lib/esm/version.d.mts +29 -0
  34. package/dist/lib/esm/version.mjs +59 -22
  35. package/linters/eslint-rules/prefer-spread/package.json +6 -0
  36. package/package.json +2 -1
@@ -0,0 +1,143 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ "use strict";
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var changelog_rewrite_exports = {};
25
+ __export(changelog_rewrite_exports, {
26
+ rewriteChangelog: () => rewriteChangelog,
27
+ rewriteReleaseNotes: () => rewriteReleaseNotes
28
+ });
29
+ module.exports = __toCommonJS(changelog_rewrite_exports);
30
+ var import_changelog_grouping = require('./changelog-grouping.cjs');
31
+ var import_version = require('./version.cjs');
32
+ const BULLET_PREFIX = "- ";
33
+ const FULL_CHANGELOG_PREFIX = "**Full Changelog**:";
34
+ const SECTION_HEADING_PREFIX = "## ";
35
+ async function rewriteChangelog(changelog, source) {
36
+ const lines = changelog.replaceAll("\r\n", "\n").split("\n");
37
+ const firstHeadingIndex = lines.findIndex((line) => line.startsWith(SECTION_HEADING_PREFIX));
38
+ const headerLines = firstHeadingIndex === -1 ? lines : lines.slice(0, firstHeadingIndex);
39
+ const sections = firstHeadingIndex === -1 ? [] : splitSections(lines.slice(firstHeadingIndex));
40
+ const tags = new Set(source.tags);
41
+ const kept = [];
42
+ const rewritten = [];
43
+ const outputBlocks = [trimTrailingBlankLines(headerLines).join("\n")];
44
+ for (const [index, section] of sections.entries()) {
45
+ const keptReason = getKeptReason(section);
46
+ if (keptReason) {
47
+ kept.push({ reason: keptReason, version: section.version });
48
+ outputBlocks.push(trimTrailingBlankLines(section.rawLines).join("\n"));
49
+ continue;
50
+ }
51
+ const tag = toTag(section.version, tags);
52
+ const previousSection = sections[index + 1];
53
+ const previousTag = previousSection ? toTag(previousSection.version, tags) : void 0;
54
+ const isRangeKnown = tag !== void 0 && (previousSection === void 0 || previousTag !== void 0);
55
+ const commitMessages = isRangeKnown ? await source.getCommitMessages(previousTag, tag) : [];
56
+ const { entries, matchedCount } = matchBullets(section.bodyLines, commitMessages);
57
+ const oldBody = section.bodyLines.join("\n");
58
+ const newBody = (0, import_changelog_grouping.renderGroupedChangelogSection)(entries);
59
+ rewritten.push({ matchedCount, newBody, oldBody, tag, version: section.version });
60
+ outputBlocks.push(`${section.heading}
61
+
62
+ ${newBody}`);
63
+ }
64
+ return {
65
+ content: `${outputBlocks.filter((block) => block !== "").join("\n\n")}
66
+ `,
67
+ kept,
68
+ rewritten
69
+ };
70
+ }
71
+ function rewriteReleaseNotes(releaseBody, section, shouldOverwriteEdited = false) {
72
+ const lines = releaseBody.replaceAll("\r\n", "\n").trim().split("\n");
73
+ const linkIndex = findLastIndex(lines, (line) => line.startsWith(FULL_CHANGELOG_PREFIX));
74
+ const noteLines = linkIndex === -1 ? lines : lines.slice(0, linkIndex);
75
+ if (!shouldOverwriteEdited && toComparable(noteLines.join("\n")) !== toComparable(section.oldBody)) {
76
+ return null;
77
+ }
78
+ return linkIndex === -1 ? section.newBody : `${section.newBody}
79
+
80
+ ${lines.slice(linkIndex).join("\n")}`;
81
+ }
82
+ function findLastIndex(lines, isMatch) {
83
+ return lines.map((line) => isMatch(line)).lastIndexOf(true);
84
+ }
85
+ function findMatchingEntryIndex(entries, bullet) {
86
+ const comparable = toComparable(bullet);
87
+ const renderedIndex = entries.findIndex((entry) => toComparable(toRenderedLine(entry)) === comparable);
88
+ return renderedIndex === -1 ? entries.findIndex((entry) => toComparable(entry.entry) === comparable) : renderedIndex;
89
+ }
90
+ function getKeptReason(section) {
91
+ if (section.bodyLines.length === 0) {
92
+ return "the section is empty";
93
+ }
94
+ if (section.bodyLines.some((line) => !line.startsWith(BULLET_PREFIX))) {
95
+ return "the section is not a plain bullet list, so a person wrote or edited it";
96
+ }
97
+ return void 0;
98
+ }
99
+ function matchBullets(bodyLines, commitMessages) {
100
+ const unused = commitMessages.map((commitMessage) => (0, import_version.toChangelogCommitEntry)(commitMessage));
101
+ const entries = [];
102
+ let matchedCount = 0;
103
+ for (const line of bodyLines) {
104
+ const bullet = line.slice(BULLET_PREFIX.length).trim();
105
+ const index = findMatchingEntryIndex(unused, bullet);
106
+ if (index === -1) {
107
+ entries.push({ detailLines: [], entry: bullet, hasBreakingFooter: false, references: [] });
108
+ continue;
109
+ }
110
+ matchedCount++;
111
+ entries.push(...unused.splice(index, 1));
112
+ }
113
+ return { entries, matchedCount };
114
+ }
115
+ function splitSections(lines) {
116
+ const headingIndices = lines.map((line, index) => line.startsWith(SECTION_HEADING_PREFIX) ? index : -1).filter((index) => index !== -1);
117
+ return headingIndices.map((headingIndex, position) => toSection(lines.slice(headingIndex, headingIndices[position + 1] ?? lines.length)));
118
+ }
119
+ function toComparable(text) {
120
+ return text.replaceAll(/[`\\]/g, "").replaceAll(/\s+/g, " ").trim();
121
+ }
122
+ function toRenderedLine(entry) {
123
+ return entry.references.length === 0 ? entry.entry : `${entry.entry} (${entry.references.join(", ")})`;
124
+ }
125
+ function toSection(rawLines) {
126
+ const heading = rawLines.slice(0, 1).join("");
127
+ const bodyLines = rawLines.slice(1).filter((line) => line.trim() !== "");
128
+ const version = heading.slice(SECTION_HEADING_PREFIX.length).trim().split(/\s+/, 1).join("");
129
+ return { bodyLines, heading, rawLines, version };
130
+ }
131
+ function toTag(version, tags) {
132
+ return [version, `v${version}`].find((candidate) => tags.has(candidate));
133
+ }
134
+ function trimTrailingBlankLines(lines) {
135
+ const lastIndex = findLastIndex(lines, (line) => line.trim() !== "");
136
+ return lines.slice(0, lastIndex + 1);
137
+ }
138
+ // Annotate the CommonJS export names for ESM import in node:
139
+ 0 && (module.exports = {
140
+ rewriteChangelog,
141
+ rewriteReleaseNotes
142
+ });
143
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NoYW5nZWxvZy1yZXdyaXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmV3cml0ZXMgdGhlIGFscmVhZHktcHVibGlzaGVkIHNlY3Rpb25zIG9mIGEgYENIQU5HRUxPRy5tZGAgaW50byB0aGUgYGdyb3VwZWRgIGxheW91dCBhIHJlbGVhc2Ugbm93IHdyaXRlcywgc28gYVxuICogcHJvamVjdCdzIGhpc3RvcnkgcmVhZHMgdGhlIHNhbWUgd2F5IGFzIGl0cyBuZXh0IHJlbGVhc2UuXG4gKlxuICogT25seSBhIHNlY3Rpb24gdGhhdCBpcyBzdGlsbCB0aGUgZmxhdCBsaXN0IG9mIGNvbW1pdCBzdWJqZWN0cyBhIHJlbGVhc2UgdXNlZCB0byB3cml0ZSBpcyByZXdyaXR0ZW4uIEl0cyBidWxsZXRzIGFyZVxuICogbWF0Y2hlZCBiYWNrIHRvIHRoZSBmaXJzdC1wYXJlbnQgY29tbWl0cyBvZiB0aGUgc2VjdGlvbidzIHRhZyByYW5nZSwgd2hpY2ggYnJpbmdzIGJhY2sgd2hhdCB0aGUgYnVsbGV0IGFsb25lIGxvc3Q6XG4gKiB0aGUgaXNzdWUgdGl0bGUgYW4gaXNzdWUtY2xvc2luZyBgcmUgIzxuPmAgbWVyZ2UgY2FycmllcyBpbiBpdHMgYm9keSwgYW5kIHRoZSBgQlJFQUtJTkcgQ0hBTkdFOmAgZm9vdGVyLiBBIGJ1bGxldCBub1xuICogY29tbWl0IG1hdGNoZXMgKHRoZSBoaXN0b3J5IHdhcyByZXdyaXR0ZW4sIG9yIHRoZSBidWxsZXQgd2FzIGVkaXRlZCBieSBoYW5kKSBpcyBncm91cGVkIGZyb20gaXRzIG93biB0ZXh0LiBBIHNlY3Rpb25cbiAqIHRoYXQgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGJ1bGxldCBsaXN0IHdhcyB3cml0dGVuIG9yIGVkaXRlZCBieSBhIHBlcnNvbiwgc28gaXQgaXMga2VwdCBhcyBpdCBpcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoYW5nZWxvZ0NvbW1pdEVudHJ5IH0gZnJvbSAnLi9jaGFuZ2Vsb2ctZ3JvdXBpbmcudHMnO1xuXG5pbXBvcnQgeyByZW5kZXJHcm91cGVkQ2hhbmdlbG9nU2VjdGlvbiB9IGZyb20gJy4vY2hhbmdlbG9nLWdyb3VwaW5nLnRzJztcbmltcG9ydCB7IHRvQ2hhbmdlbG9nQ29tbWl0RW50cnkgfSBmcm9tICcuL3ZlcnNpb24udHMnO1xuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIHtAbGluayByZXdyaXRlQ2hhbmdlbG9nfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2Vsb2dSZXdyaXRlUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBuZXcgYENIQU5HRUxPRy5tZGAgY29udGVudCwgd2l0aCBMRiBsaW5lIGVuZGluZ3MuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9ucyBrZXB0IGFzIHRoZXkgd2VyZSwgd2l0aCB0aGUgcmVhc29uLCBuZXdlc3QgZmlyc3QuXG4gICAqL1xuICByZWFkb25seSBrZXB0OiByZWFkb25seSBLZXB0Q2hhbmdlbG9nU2VjdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbnMgcmV3cml0dGVuLCBuZXdlc3QgZmlyc3QuXG4gICAqL1xuICByZWFkb25seSByZXdyaXR0ZW46IHJlYWRvbmx5IFJld3JpdHRlbkNoYW5nZWxvZ1NlY3Rpb25bXTtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayByZXdyaXRlQ2hhbmdlbG9nfSBuZWVkcyBmcm9tIHRoZSByZXBvc2l0b3J5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZWxvZ1Jld3JpdGVTb3VyY2Uge1xuICAvKipcbiAgICogUmVhZHMgdGhlIGZ1bGwgbWVzc2FnZXMgb2YgdGhlIGZpcnN0LXBhcmVudCBjb21taXRzIGluIGEgcmFuZ2UsIGluIGBnaXQgbG9nYCBvcmRlci5cbiAgICpcbiAgICogQHBhcmFtIGZyb21UYWcgLSBUaGUgdGFnIHRoZSByYW5nZSBzdGFydHMgYWZ0ZXIsIG9yIGB1bmRlZmluZWRgIGZvciB0aGUgd2hvbGUgaGlzdG9yeSB1cCB0byB7QGxpbmsgdG9UYWd9LlxuICAgKiBAcGFyYW0gdG9UYWcgLSBUaGUgdGFnIHRoZSByYW5nZSBlbmRzIGF0LlxuICAgKiBAcmV0dXJucyBUaGUgZnVsbCBjb21taXQgbWVzc2FnZXMuXG4gICAqL1xuICByZWFkb25seSBnZXRDb21taXRNZXNzYWdlczogKGZyb21UYWc6IHN0cmluZyB8IHVuZGVmaW5lZCwgdG9UYWc6IHN0cmluZykgPT4gUHJvbWlzZTxyZWFkb25seSBzdHJpbmdbXT47XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5J3MgdGFncy5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgc2VjdGlvbiB7QGxpbmsgcmV3cml0ZUNoYW5nZWxvZ30ga2VwdCBhcyBpdCB3YXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2VwdENoYW5nZWxvZ1NlY3Rpb24ge1xuICAvKipcbiAgICogV2h5IGl0IHdhcyBrZXB0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIGl0cyBoZWFkaW5nIG5hbWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2VjdGlvbiB7QGxpbmsgcmV3cml0ZUNoYW5nZWxvZ30gcmV3cm90ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXdyaXR0ZW5DaGFuZ2Vsb2dTZWN0aW9uIHtcbiAgLyoqXG4gICAqIEhvdyBtYW55IG9mIGl0cyBidWxsZXRzIHdlcmUgbWF0Y2hlZCB0byBhIGNvbW1pdCBvZiBpdHMgdGFnIHJhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hlZENvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBncm91cGVkIHNlY3Rpb24gYm9keSwgd2l0aG91dCBpdHMgaGVhZGluZy5cbiAgICovXG4gIHJlYWRvbmx5IG5ld0JvZHk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gYm9keSBhcyBpdCB3YXMsIHdpdGhvdXQgaXRzIGhlYWRpbmcuXG4gICAqL1xuICByZWFkb25seSBvbGRCb2R5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWcgdGhlIHZlcnNpb24gd2FzIHJlbGVhc2VkIHVuZGVyLCB3aGVuIHRoZSByZXBvc2l0b3J5IGhhcyBvbmUuXG4gICAqL1xuICByZWFkb25seSB0YWc6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gaXRzIGhlYWRpbmcgbmFtZXMuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDaGFuZ2Vsb2dTZWN0aW9uIHtcbiAgcmVhZG9ubHkgYm9keUxpbmVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgaGVhZGluZzogc3RyaW5nO1xuICByZWFkb25seSByYXdMaW5lczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIE1hdGNoZWRCdWxsZXRzIHtcbiAgcmVhZG9ubHkgZW50cmllczogcmVhZG9ubHkgQ2hhbmdlbG9nQ29tbWl0RW50cnlbXTtcbiAgcmVhZG9ubHkgbWF0Y2hlZENvdW50OiBudW1iZXI7XG59XG5cbmNvbnN0IEJVTExFVF9QUkVGSVggPSAnLSAnO1xuY29uc3QgRlVMTF9DSEFOR0VMT0dfUFJFRklYID0gJyoqRnVsbCBDaGFuZ2Vsb2cqKjonO1xuY29uc3QgU0VDVElPTl9IRUFESU5HX1BSRUZJWCA9ICcjIyAnO1xuXG4vKipcbiAqIFJld3JpdGVzIGV2ZXJ5IHJlbGVhc2VkIHNlY3Rpb24gb2YgYSBgQ0hBTkdFTE9HLm1kYCB0aGF0IGlzIHN0aWxsIGEgZmxhdCBsaXN0IG9mIGNvbW1pdCBzdWJqZWN0cyBpbnRvIHRoZSBgZ3JvdXBlZGBcbiAqIGxheW91dCwga2VlcGluZyBlYWNoIGhlYWRpbmcgYXMgaXQgaXMuXG4gKlxuICogQHBhcmFtIGNoYW5nZWxvZyAtIFRoZSBjdXJyZW50IGBDSEFOR0VMT0cubWRgIGNvbnRlbnQuXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHJlcG9zaXRvcnkncyB0YWdzIGFuZCBjb21taXRzLlxuICogQHJldHVybnMgVGhlIG5ldyBjb250ZW50IGFuZCB3aGF0IGhhcHBlbmVkIHRvIGVhY2ggc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJld3JpdGVDaGFuZ2Vsb2coY2hhbmdlbG9nOiBzdHJpbmcsIHNvdXJjZTogQ2hhbmdlbG9nUmV3cml0ZVNvdXJjZSk6IFByb21pc2U8Q2hhbmdlbG9nUmV3cml0ZVJlc3VsdD4ge1xuICBjb25zdCBsaW5lcyA9IGNoYW5nZWxvZy5yZXBsYWNlQWxsKCdcXHJcXG4nLCAnXFxuJykuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBmaXJzdEhlYWRpbmdJbmRleCA9IGxpbmVzLmZpbmRJbmRleCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKFNFQ1RJT05fSEVBRElOR19QUkVGSVgpKTtcbiAgY29uc3QgaGVhZGVyTGluZXMgPSBmaXJzdEhlYWRpbmdJbmRleCA9PT0gLTEgPyBsaW5lcyA6IGxpbmVzLnNsaWNlKDAsIGZpcnN0SGVhZGluZ0luZGV4KTtcbiAgY29uc3Qgc2VjdGlvbnMgPSBmaXJzdEhlYWRpbmdJbmRleCA9PT0gLTEgPyBbXSA6IHNwbGl0U2VjdGlvbnMobGluZXMuc2xpY2UoZmlyc3RIZWFkaW5nSW5kZXgpKTtcbiAgY29uc3QgdGFncyA9IG5ldyBTZXQoc291cmNlLnRhZ3MpO1xuXG4gIGNvbnN0IGtlcHQ6IEtlcHRDaGFuZ2Vsb2dTZWN0aW9uW10gPSBbXTtcbiAgY29uc3QgcmV3cml0dGVuOiBSZXdyaXR0ZW5DaGFuZ2Vsb2dTZWN0aW9uW10gPSBbXTtcbiAgY29uc3Qgb3V0cHV0QmxvY2tzID0gW3RyaW1UcmFpbGluZ0JsYW5rTGluZXMoaGVhZGVyTGluZXMpLmpvaW4oJ1xcbicpXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgc2VjdGlvbl0gb2Ygc2VjdGlvbnMuZW50cmllcygpKSB7XG4gICAgY29uc3Qga2VwdFJlYXNvbiA9IGdldEtlcHRSZWFzb24oc2VjdGlvbik7XG4gICAgaWYgKGtlcHRSZWFzb24pIHtcbiAgICAgIGtlcHQucHVzaCh7IHJlYXNvbjoga2VwdFJlYXNvbiwgdmVyc2lvbjogc2VjdGlvbi52ZXJzaW9uIH0pO1xuICAgICAgb3V0cHV0QmxvY2tzLnB1c2godHJpbVRyYWlsaW5nQmxhbmtMaW5lcyhzZWN0aW9uLnJhd0xpbmVzKS5qb2luKCdcXG4nKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWcgPSB0b1RhZyhzZWN0aW9uLnZlcnNpb24sIHRhZ3MpO1xuICAgIGNvbnN0IHByZXZpb3VzU2VjdGlvbiA9IHNlY3Rpb25zW2luZGV4ICsgMV07XG4gICAgY29uc3QgcHJldmlvdXNUYWcgPSBwcmV2aW91c1NlY3Rpb24gPyB0b1RhZyhwcmV2aW91c1NlY3Rpb24udmVyc2lvbiwgdGFncykgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNSYW5nZUtub3duID0gdGFnICE9PSB1bmRlZmluZWQgJiYgKHByZXZpb3VzU2VjdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzVGFnICE9PSB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGNvbW1pdE1lc3NhZ2VzID0gaXNSYW5nZUtub3duID8gYXdhaXQgc291cmNlLmdldENvbW1pdE1lc3NhZ2VzKHByZXZpb3VzVGFnLCB0YWcpIDogW107XG4gICAgY29uc3QgeyBlbnRyaWVzLCBtYXRjaGVkQ291bnQgfSA9IG1hdGNoQnVsbGV0cyhzZWN0aW9uLmJvZHlMaW5lcywgY29tbWl0TWVzc2FnZXMpO1xuICAgIGNvbnN0IG9sZEJvZHkgPSBzZWN0aW9uLmJvZHlMaW5lcy5qb2luKCdcXG4nKTtcbiAgICBjb25zdCBuZXdCb2R5ID0gcmVuZGVyR3JvdXBlZENoYW5nZWxvZ1NlY3Rpb24oZW50cmllcyk7XG4gICAgcmV3cml0dGVuLnB1c2goeyBtYXRjaGVkQ291bnQsIG5ld0JvZHksIG9sZEJvZHksIHRhZywgdmVyc2lvbjogc2VjdGlvbi52ZXJzaW9uIH0pO1xuICAgIG91dHB1dEJsb2Nrcy5wdXNoKGAke3NlY3Rpb24uaGVhZGluZ31cXG5cXG4ke25ld0JvZHl9YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbnRlbnQ6IGAke291dHB1dEJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiBibG9jayAhPT0gJycpLmpvaW4oJ1xcblxcbicpfVxcbmAsXG4gICAga2VwdCxcbiAgICByZXdyaXR0ZW5cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXdyaXRlcyB0aGUgcmVsZWFzZSBub3RlcyBvZiBhIEdpdEh1YiByZWxlYXNlIHdob3NlIGNoYW5nZWxvZyBzZWN0aW9uIHtAbGluayByZXdyaXRlQ2hhbmdlbG9nfSByZXdyb3RlLlxuICpcbiAqIEEgcmVsZWFzZSBib2R5IGEgcmVsZWFzZSB3cm90ZSBpcyBpdHMgY2hhbmdlbG9nIHNlY3Rpb24sIGEgYmxhbmsgbGluZSwgYW5kIGEgYCoqRnVsbCBDaGFuZ2Vsb2cqKmAgY29tcGFyZSBsaW5rLiBUaGVcbiAqIGJvZHkgaXMgcmV3cml0dGVuIG9ubHkgd2hlbiBpdHMgcGFydCBhYm92ZSB0aGF0IGxpbmsgaXMgc3RpbGwgdGhlIHNlY3Rpb24gYXMgaXQgd2FzLCBzbyBhIHJlbGVhc2UgZWRpdGVkIGJ5IGhhbmRcbiAqIGFmdGVyIHB1Ymxpc2hpbmcgaXMgbm90IG92ZXJ3cml0dGVuIHVubGVzcyBhc2tlZC4gVGhlIGNvbXBhcmUgbGluayBpcyBrZXB0IGFzIGl0IGlzLlxuICpcbiAqIEBwYXJhbSByZWxlYXNlQm9keSAtIFRoZSByZWxlYXNlJ3MgY3VycmVudCBub3Rlcy5cbiAqIEBwYXJhbSBzZWN0aW9uIC0gVGhlIHJld3JpdHRlbiBzZWN0aW9uLlxuICogQHBhcmFtIHNob3VsZE92ZXJ3cml0ZUVkaXRlZCAtIFdoZXRoZXIgbm90ZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHRoZSBzZWN0aW9uIGFzIGl0IHdhcyBhcmUgcmV3cml0dGVuIGFueXdheS4gVGhhdCBpc1xuICogICByaWdodCB3aGVyZSB0aGUgY2hhbmdlbG9nIHdhcyBjb3JyZWN0ZWQgYWZ0ZXIgdGhlIHJlbGVhc2UsIGZvciBleGFtcGxlIHRvIHJlbW92ZSB0ZXh0IHRoYXQgbXVzdCBub3QgYmUgcHVibGljLlxuICogQHJldHVybnMgVGhlIG5ldyBub3Rlcywgb3IgYG51bGxgIHdoZW4gdGhlIHJlbGVhc2Ugd2FzIGVkaXRlZCBhbmQgaGFzIHRvIGJlIGxlZnQgYWxvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlUmVsZWFzZU5vdGVzKHJlbGVhc2VCb2R5OiBzdHJpbmcsIHNlY3Rpb246IFJld3JpdHRlbkNoYW5nZWxvZ1NlY3Rpb24sIHNob3VsZE92ZXJ3cml0ZUVkaXRlZCA9IGZhbHNlKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gcmVsZWFzZUJvZHkucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpLnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IGxpbmtJbmRleCA9IGZpbmRMYXN0SW5kZXgobGluZXMsIChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoRlVMTF9DSEFOR0VMT0dfUFJFRklYKSk7XG4gIGNvbnN0IG5vdGVMaW5lcyA9IGxpbmtJbmRleCA9PT0gLTEgPyBsaW5lcyA6IGxpbmVzLnNsaWNlKDAsIGxpbmtJbmRleCk7XG4gIGlmICghc2hvdWxkT3ZlcndyaXRlRWRpdGVkICYmIHRvQ29tcGFyYWJsZShub3RlTGluZXMuam9pbignXFxuJykpICE9PSB0b0NvbXBhcmFibGUoc2VjdGlvbi5vbGRCb2R5KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGxpbmtJbmRleCA9PT0gLTEgPyBzZWN0aW9uLm5ld0JvZHkgOiBgJHtzZWN0aW9uLm5ld0JvZHl9XFxuXFxuJHtsaW5lcy5zbGljZShsaW5rSW5kZXgpLmpvaW4oJ1xcbicpfWA7XG59XG5cbi8vIEFycmF5LnByb3RvdHlwZS5maW5kTGFzdEluZGV4IGlzIEVTMjAyMywgYWJvdmUgdGhpcyBwYWNrYWdlJ3MgbGliLlxuZnVuY3Rpb24gZmluZExhc3RJbmRleChsaW5lczogcmVhZG9ubHkgc3RyaW5nW10sIGlzTWF0Y2g6IChsaW5lOiBzdHJpbmcpID0+IGJvb2xlYW4pOiBudW1iZXIge1xuICByZXR1cm4gbGluZXMubWFwKChsaW5lKSA9PiBpc01hdGNoKGxpbmUpKS5sYXN0SW5kZXhPZih0cnVlKTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nRW50cnlJbmRleChlbnRyaWVzOiByZWFkb25seSBDaGFuZ2Vsb2dDb21taXRFbnRyeVtdLCBidWxsZXQ6IHN0cmluZyk6IG51bWJlciB7XG4gIC8vIFRoZSBsaW5lIGEgY29tbWl0IHJlbmRlcnMgdG8gdG9kYXksIHRoZW4gaXRzIGJhcmUgZW50cnk6IGEgYnVsbGV0IGFuIG9sZGVyIHRvb2xraXQgd3JvdGUgbWF5IGxhY2sgdGhlIHJlZmVyZW5jZXMuXG4gIGNvbnN0IGNvbXBhcmFibGUgPSB0b0NvbXBhcmFibGUoYnVsbGV0KTtcbiAgY29uc3QgcmVuZGVyZWRJbmRleCA9IGVudHJpZXMuZmluZEluZGV4KChlbnRyeSkgPT4gdG9Db21wYXJhYmxlKHRvUmVuZGVyZWRMaW5lKGVudHJ5KSkgPT09IGNvbXBhcmFibGUpO1xuICByZXR1cm4gcmVuZGVyZWRJbmRleCA9PT0gLTEgPyBlbnRyaWVzLmZpbmRJbmRleCgoZW50cnkpID0+IHRvQ29tcGFyYWJsZShlbnRyeS5lbnRyeSkgPT09IGNvbXBhcmFibGUpIDogcmVuZGVyZWRJbmRleDtcbn1cblxuZnVuY3Rpb24gZ2V0S2VwdFJlYXNvbihzZWN0aW9uOiBDaGFuZ2Vsb2dTZWN0aW9uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHNlY3Rpb24uYm9keUxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAndGhlIHNlY3Rpb24gaXMgZW1wdHknO1xuICB9XG5cbiAgaWYgKHNlY3Rpb24uYm9keUxpbmVzLnNvbWUoKGxpbmUpID0+ICFsaW5lLnN0YXJ0c1dpdGgoQlVMTEVUX1BSRUZJWCkpKSB7XG4gICAgcmV0dXJuICd0aGUgc2VjdGlvbiBpcyBub3QgYSBwbGFpbiBidWxsZXQgbGlzdCwgc28gYSBwZXJzb24gd3JvdGUgb3IgZWRpdGVkIGl0JztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG1hdGNoQnVsbGV0cyhib2R5TGluZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBjb21taXRNZXNzYWdlczogcmVhZG9ubHkgc3RyaW5nW10pOiBNYXRjaGVkQnVsbGV0cyB7XG4gIGNvbnN0IHVudXNlZCA9IGNvbW1pdE1lc3NhZ2VzLm1hcCgoY29tbWl0TWVzc2FnZSkgPT4gdG9DaGFuZ2Vsb2dDb21taXRFbnRyeShjb21taXRNZXNzYWdlKSk7XG4gIGNvbnN0IGVudHJpZXM6IENoYW5nZWxvZ0NvbW1pdEVudHJ5W10gPSBbXTtcbiAgbGV0IG1hdGNoZWRDb3VudCA9IDA7XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIGJvZHlMaW5lcykge1xuICAgIGNvbnN0IGJ1bGxldCA9IGxpbmUuc2xpY2UoQlVMTEVUX1BSRUZJWC5sZW5ndGgpLnRyaW0oKTtcbiAgICBjb25zdCBpbmRleCA9IGZpbmRNYXRjaGluZ0VudHJ5SW5kZXgodW51c2VkLCBidWxsZXQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIGVudHJpZXMucHVzaCh7IGRldGFpbExpbmVzOiBbXSwgZW50cnk6IGJ1bGxldCwgaGFzQnJlYWtpbmdGb290ZXI6IGZhbHNlLCByZWZlcmVuY2VzOiBbXSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG1hdGNoZWRDb3VudCsrO1xuICAgIGVudHJpZXMucHVzaCguLi51bnVzZWQuc3BsaWNlKGluZGV4LCAxKSk7XG4gIH1cblxuICByZXR1cm4geyBlbnRyaWVzLCBtYXRjaGVkQ291bnQgfTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgdGhlIGxpbmVzIGZyb20gdGhlIGZpcnN0IHNlY3Rpb24gaGVhZGluZyBvbiBpbnRvIHNlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBsaW5lcywgdGhlIGZpcnN0IG9mIHdoaWNoIGlzIGEgc2VjdGlvbiBoZWFkaW5nLlxuICogQHJldHVybnMgVGhlIHNlY3Rpb25zLCBpbiBmaWxlIG9yZGVyLlxuICovXG5mdW5jdGlvbiBzcGxpdFNlY3Rpb25zKGxpbmVzOiByZWFkb25seSBzdHJpbmdbXSk6IENoYW5nZWxvZ1NlY3Rpb25bXSB7XG4gIGNvbnN0IGhlYWRpbmdJbmRpY2VzID0gbGluZXMubWFwKChsaW5lLCBpbmRleCkgPT4gbGluZS5zdGFydHNXaXRoKFNFQ1RJT05fSEVBRElOR19QUkVGSVgpID8gaW5kZXggOiAtMSkuZmlsdGVyKChpbmRleCkgPT4gaW5kZXggIT09IC0xKTtcbiAgcmV0dXJuIGhlYWRpbmdJbmRpY2VzLm1hcCgoaGVhZGluZ0luZGV4LCBwb3NpdGlvbikgPT4gdG9TZWN0aW9uKGxpbmVzLnNsaWNlKGhlYWRpbmdJbmRleCwgaGVhZGluZ0luZGljZXNbcG9zaXRpb24gKyAxXSA/PyBsaW5lcy5sZW5ndGgpKSk7XG59XG5cbi8qKlxuICogUmVkdWNlcyBhIGxpbmUgdG8gd2hhdCBzdXJ2aXZlcyBgbGludDptZDpmaXhgOiBhIHB1Ymxpc2hlZCBzZWN0aW9uIHdhcyBmaXhlZCBhZnRlciBpdCB3YXMgZ2VuZXJhdGVkLCB3aGljaCB3cmFwc1xuICogbmFtZXMgaW4gYmFja3RpY2tzIGFuZCBlc2NhcGVzIGJyYWNrZXRzLCBhbmQgYSBHaXRIdWIgcmVsZWFzZSBrZXB0IHRoZSB0ZXh0IGZyb20gYmVmb3JlIHRoZSBmaXguXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dC5cbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGhvdXQgYmFja3RpY2tzLCBiYWNrc2xhc2hlcyBhbmQgcmVwZWF0ZWQgd2hpdGVzcGFjZS5cbiAqL1xuZnVuY3Rpb24gdG9Db21wYXJhYmxlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoL1tgXFxcXF0vZywgJycpLnJlcGxhY2VBbGwoL1xccysvZywgJyAnKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHRvUmVuZGVyZWRMaW5lKGVudHJ5OiBDaGFuZ2Vsb2dDb21taXRFbnRyeSk6IHN0cmluZyB7XG4gIHJldHVybiBlbnRyeS5yZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCA/IGVudHJ5LmVudHJ5IDogYCR7ZW50cnkuZW50cnl9ICgke2VudHJ5LnJlZmVyZW5jZXMuam9pbignLCAnKX0pYDtcbn1cblxuZnVuY3Rpb24gdG9TZWN0aW9uKHJhd0xpbmVzOiByZWFkb25seSBzdHJpbmdbXSk6IENoYW5nZWxvZ1NlY3Rpb24ge1xuICBjb25zdCBoZWFkaW5nID0gcmF3TGluZXMuc2xpY2UoMCwgMSkuam9pbignJyk7XG4gIGNvbnN0IGJvZHlMaW5lcyA9IHJhd0xpbmVzLnNsaWNlKDEpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkgIT09ICcnKTtcbiAgY29uc3QgdmVyc2lvbiA9IGhlYWRpbmcuc2xpY2UoU0VDVElPTl9IRUFESU5HX1BSRUZJWC5sZW5ndGgpLnRyaW0oKS5zcGxpdCgvXFxzKy8sIDEpLmpvaW4oJycpO1xuICByZXR1cm4geyBib2R5TGluZXMsIGhlYWRpbmcsIHJhd0xpbmVzLCB2ZXJzaW9uIH07XG59XG5cbmZ1bmN0aW9uIHRvVGFnKHZlcnNpb246IHN0cmluZywgdGFnczogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBbdmVyc2lvbiwgYHYke3ZlcnNpb259YF0uZmluZCgoY2FuZGlkYXRlKSA9PiB0YWdzLmhhcyhjYW5kaWRhdGUpKTtcbn1cblxuZnVuY3Rpb24gdHJpbVRyYWlsaW5nQmxhbmtMaW5lcyhsaW5lczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IGxhc3RJbmRleCA9IGZpbmRMYXN0SW5kZXgobGluZXMsIChsaW5lKSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoMCwgbGFzdEluZGV4ICsgMSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBLGdDQUE4QztBQUM5QyxxQkFBdUM7QUFrR3ZDLE1BQU0sZ0JBQWdCO0FBQ3RCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0seUJBQXlCO0FBVS9CLGVBQXNCLGlCQUFpQixXQUFtQixRQUFpRTtBQUN6SCxRQUFNLFFBQVEsVUFBVSxXQUFXLFFBQVEsSUFBSSxFQUFFLE1BQU0sSUFBSTtBQUMzRCxRQUFNLG9CQUFvQixNQUFNLFVBQVUsQ0FBQyxTQUFTLEtBQUssV0FBVyxzQkFBc0IsQ0FBQztBQUMzRixRQUFNLGNBQWMsc0JBQXNCLEtBQUssUUFBUSxNQUFNLE1BQU0sR0FBRyxpQkFBaUI7QUFDdkYsUUFBTSxXQUFXLHNCQUFzQixLQUFLLENBQUMsSUFBSSxjQUFjLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUM3RixRQUFNLE9BQU8sSUFBSSxJQUFJLE9BQU8sSUFBSTtBQUVoQyxRQUFNLE9BQStCLENBQUM7QUFDdEMsUUFBTSxZQUF5QyxDQUFDO0FBQ2hELFFBQU0sZUFBZSxDQUFDLHVCQUF1QixXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFFcEUsYUFBVyxDQUFDLE9BQU8sT0FBTyxLQUFLLFNBQVMsUUFBUSxHQUFHO0FBQ2pELFVBQU0sYUFBYSxjQUFjLE9BQU87QUFDeEMsUUFBSSxZQUFZO0FBQ2QsV0FBSyxLQUFLLEVBQUUsUUFBUSxZQUFZLFNBQVMsUUFBUSxRQUFRLENBQUM7QUFDMUQsbUJBQWEsS0FBSyx1QkFBdUIsUUFBUSxRQUFRLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFDckU7QUFBQSxJQUNGO0FB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
@@ -0,0 +1,108 @@
1
+ /// <reference path="./library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Rewrites the already-published sections of a `CHANGELOG.md` into the `grouped` layout a release now writes, so a
6
+ * project's history reads the same way as its next release.
7
+ *
8
+ * Only a section that is still the flat list of commit subjects a release used to write is rewritten. Its bullets are
9
+ * matched back to the first-parent commits of the section's tag range, which brings back what the bullet alone lost:
10
+ * the issue title an issue-closing `re #<n>` merge carries in its body, and the `BREAKING CHANGE:` footer. A bullet no
11
+ * commit matches (the history was rewritten, or the bullet was edited by hand) is grouped from its own text. A section
12
+ * that is anything other than a bullet list was written or edited by a person, so it is kept as it is.
13
+ */
14
+ /**
15
+ * The outcome of {@link rewriteChangelog}.
16
+ */
17
+ export interface ChangelogRewriteResult {
18
+ /**
19
+ * The new `CHANGELOG.md` content, with LF line endings.
20
+ */
21
+ readonly content: string;
22
+ /**
23
+ * The sections kept as they were, with the reason, newest first.
24
+ */
25
+ readonly kept: readonly KeptChangelogSection[];
26
+ /**
27
+ * The sections rewritten, newest first.
28
+ */
29
+ readonly rewritten: readonly RewrittenChangelogSection[];
30
+ }
31
+ /**
32
+ * What {@link rewriteChangelog} needs from the repository.
33
+ */
34
+ export interface ChangelogRewriteSource {
35
+ /**
36
+ * Reads the full messages of the first-parent commits in a range, in `git log` order.
37
+ *
38
+ * @param fromTag - The tag the range starts after, or `undefined` for the whole history up to {@link toTag}.
39
+ * @param toTag - The tag the range ends at.
40
+ * @returns The full commit messages.
41
+ */
42
+ readonly getCommitMessages: (fromTag: string | undefined, toTag: string) => Promise<readonly string[]>;
43
+ /**
44
+ * The repository's tags.
45
+ */
46
+ readonly tags: readonly string[];
47
+ }
48
+ /**
49
+ * A section {@link rewriteChangelog} kept as it was.
50
+ */
51
+ export interface KeptChangelogSection {
52
+ /**
53
+ * Why it was kept.
54
+ */
55
+ readonly reason: string;
56
+ /**
57
+ * The version its heading names.
58
+ */
59
+ readonly version: string;
60
+ }
61
+ /**
62
+ * A section {@link rewriteChangelog} rewrote.
63
+ */
64
+ export interface RewrittenChangelogSection {
65
+ /**
66
+ * How many of its bullets were matched to a commit of its tag range.
67
+ */
68
+ readonly matchedCount: number;
69
+ /**
70
+ * The grouped section body, without its heading.
71
+ */
72
+ readonly newBody: string;
73
+ /**
74
+ * The section body as it was, without its heading.
75
+ */
76
+ readonly oldBody: string;
77
+ /**
78
+ * The tag the version was released under, when the repository has one.
79
+ */
80
+ readonly tag: string | undefined;
81
+ /**
82
+ * The version its heading names.
83
+ */
84
+ readonly version: string;
85
+ }
86
+ /**
87
+ * Rewrites every released section of a `CHANGELOG.md` that is still a flat list of commit subjects into the `grouped`
88
+ * layout, keeping each heading as it is.
89
+ *
90
+ * @param changelog - The current `CHANGELOG.md` content.
91
+ * @param source - The repository's tags and commits.
92
+ * @returns The new content and what happened to each section.
93
+ */
94
+ export declare function rewriteChangelog(changelog: string, source: ChangelogRewriteSource): Promise<ChangelogRewriteResult>;
95
+ /**
96
+ * Rewrites the release notes of a GitHub release whose changelog section {@link rewriteChangelog} rewrote.
97
+ *
98
+ * A release body a release wrote is its changelog section, a blank line, and a `**Full Changelog**` compare link. The
99
+ * body is rewritten only when its part above that link is still the section as it was, so a release edited by hand
100
+ * after publishing is not overwritten unless asked. The compare link is kept as it is.
101
+ *
102
+ * @param releaseBody - The release's current notes.
103
+ * @param section - The rewritten section.
104
+ * @param shouldOverwriteEdited - Whether notes that are no longer the section as it was are rewritten anyway. That is
105
+ * right where the changelog was corrected after the release, for example to remove text that must not be public.
106
+ * @returns The new notes, or `null` when the release was edited and has to be left alone.
107
+ */
108
+ export declare function rewriteReleaseNotes(releaseBody: string, section: RewrittenChangelogSection, shouldOverwriteEdited?: boolean): null | string;
@@ -36,6 +36,9 @@ __export(index_exports, {
36
36
  build: () => build,
37
37
  "bulk-concurrency": () => bulk_concurrency,
38
38
  bundlers: () => bundlers,
39
+ "changelog-grouping": () => changelog_grouping,
40
+ "changelog-rewrite": () => changelog_rewrite,
41
+ "changelog-rewrite-cli": () => changelog_rewrite_cli,
39
42
  "check-project-types": () => check_project_types,
40
43
  "cli-utils": () => cli_utils,
41
44
  "code-generator": () => code_generator,
@@ -76,6 +79,9 @@ module.exports = __toCommonJS(index_exports);
76
79
  var build = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./build.cjs')), 1);
77
80
  var bulk_concurrency = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./bulk-concurrency.cjs')), 1);
78
81
  var bundlers = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./bundlers/index.cjs')), 1);
82
+ var changelog_grouping = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./changelog-grouping.cjs')), 1);
83
+ var changelog_rewrite_cli = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./changelog-rewrite-cli.cjs')), 1);
84
+ var changelog_rewrite = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./changelog-rewrite.cjs')), 1);
79
85
  var check_project_types = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./check-project-types.cjs')), 1);
80
86
  var cli_utils = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./cli-utils.cjs')), 1);
81
87
  var code_generator = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./code-generator.cjs')), 1);
@@ -116,6 +122,9 @@ var version = __toESM(((module) => module && module.__esModule && 'default' in m
116
122
  build,
117
123
  "bulk-concurrency": null,
118
124
  bundlers,
125
+ "changelog-grouping": null,
126
+ "changelog-rewrite": null,
127
+ "changelog-rewrite-cli": null,
119
128
  "check-project-types": null,
120
129
  "cli-utils": null,
121
130
  "code-generator": null,
@@ -152,4 +161,4 @@ var version = __toESM(((module) => module && module.__esModule && 'default' in m
152
161
  "validate-dependencies": null,
153
162
  version
154
163
  });
155
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2J1aWxkJyBmcm9tICcuL2J1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdidWxrLWNvbmN1cnJlbmN5JyBmcm9tICcuL2J1bGstY29uY3VycmVuY3kudHMnO1xuZXhwb3J0ICogYXMgJ2J1bmRsZXJzJyBmcm9tICcuL2J1bmRsZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjaGVjay1wcm9qZWN0LXR5cGVzJyBmcm9tICcuL2NoZWNrLXByb2plY3QtdHlwZXMudHMnO1xuZXhwb3J0ICogYXMgJ2NsaS11dGlscycgZnJvbSAnLi9jbGktdXRpbHMudHMnO1xuZXhwb3J0ICogYXMgJ2NvZGUtZ2VuZXJhdG9yJyBmcm9tICcuL2NvZGUtZ2VuZXJhdG9yLnRzJztcbmV4cG9ydCAqIGFzICdjb21taXRsaW50LWNvbmZpZycgZnJvbSAnLi9jb21taXRsaW50LWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1mb3JiaWRkZW4tcGF0dGVybnMnIGZyb20gJy4vY29tbWl0bGludC1mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtbGludC1tZC1oZWFkZXInIGZyb20gJy4vY29tbWl0bGludC1saW50LW1kLWhlYWRlci50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlcicgZnJvbSAnLi9jb21taXRsaW50LXNwZWxsY2hlY2staGVhZGVyLnRzJztcbmV4cG9ydCAqIGFzICdkb2NzLXNpdGUnIGZyb20gJy4vZG9jcy1zaXRlL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdlbnYtdG9nZ2xlJyBmcm9tICcuL2Vudi10b2dnbGUudHMnO1xuZXhwb3J0ICogYXMgJ2V4ZWMnIGZyb20gJy4vZXhlYy50cyc7XG5leHBvcnQgKiBhcyAnZm9yYmlkZGVuLXBhdHRlcm5zJyBmcm9tICcuL2ZvcmJpZGRlbi1wYXR0ZXJucy50cyc7XG5leHBvcnQgKiBhcyAnZm9ybWF0dGVycycgZnJvbSAnLi9mb3JtYXR0ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdmcycgZnJvbSAnLi9mcy50cyc7XG5leHBvcnQgKiBhcyAnZ2F0ZScgZnJvbSAnLi9nYXRlLnRzJztcbmV4cG9ydCAqIGFzICdnaXQnIGZyb20gJy4vZ2l0LnRzJztcbmV4cG9ydCAqIGFzICdqc29uJyBmcm9tICcuL2pzb24udHMnO1xuZXhwb3J0ICogYXMgJ2xpYnJhcnktYnVpbGQnIGZyb20gJy4vbGlicmFyeS1idWlsZC50cyc7XG5leHBvcnQgKiBhcyAnbGluay1jaGVjay1za2lwJyBmcm9tICcuL2xpbmstY2hlY2stc2tpcC50cyc7XG5leHBvcnQgKiBhcyAnbGludGVycycgZnJvbSAnLi9saW50ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICduYW5vLXN0YWdlZC1jb25maWcnIGZyb20gJy4vbmFuby1zdGFnZWQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICducG0tcHVibGlzaCcgZnJvbSAnLi9ucG0tcHVibGlzaC50cyc7XG5leHBvcnQgKiBhcyAnbnBtLXJ1bicgZnJvbSAnLi9ucG0tcnVuLnRzJztcbmV4cG9ydCAqIGFzICducG0nIGZyb20gJy4vbnBtLnRzJztcbmV4cG9ydCAqIGFzICdwYWNrYWdlLWxvY2staW50ZWdyaXR5JyBmcm9tICcuL3BhY2thZ2UtbG9jay1pbnRlZ3JpdHkudHMnO1xuZXhwb3J0ICogYXMgJ3BhY2thZ2UtbWFuYWdlcicgZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuZXhwb3J0ICogYXMgJ3JlbGVhc2VkLWlzc3VlcycgZnJvbSAnLi9yZWxlYXNlZC1pc3N1ZXMudHMnO1xuZXhwb3J0ICogYXMgJ3JlcG8tcGF0aHMnIGZyb20gJy4vcmVwby1wYXRocy50cyc7XG5leHBvcnQgKiBhcyAncm9vdCcgZnJvbSAnLi9yb290LnRzJztcbmV4cG9ydCAqIGFzICdzaGFyZWQtY29uZmlnLWZpbGVzJyBmcm9tICcuL3NoYXJlZC1jb25maWctZmlsZXMudHMnO1xuZXhwb3J0ICogYXMgJ3Rlc3QtcnVubmVycycgZnJvbSAnLi90ZXN0LXJ1bm5lcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3Vwc3RyZWFtLXN5bmMtY2xpJyBmcm9tICcuL3Vwc3RyZWFtLXN5bmMtY2xpLnRzJztcbmV4cG9ydCAqIGFzICd1cHN0cmVhbS1zeW5jJyBmcm9tICcuL3Vwc3RyZWFtLXN5bmMudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlY2xhcmF0aW9ucycgZnJvbSAnLi92YWxpZGF0ZS1kZWNsYXJhdGlvbnMudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlcGVuZGVuY2llcycgZnJvbSAnLi92YWxpZGF0ZS1kZXBlbmRlbmNpZXMudHMnO1xuZXhwb3J0ICogYXMgJ3ZlcnNpb24nIGZyb20gJy4vdmVyc2lvbi50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQSw0QkFBQUE7QUFBQSxFQUFBO0FBQUEsK0JBQUFDO0FBQUEsRUFBQSxtQkFBQUM7QUFBQSxFQUFBLHdCQUFBQztBQUFBLEVBQUEsMkJBQUFDO0FBQUEsRUFBQSx1Q0FBQUM7QUFBQSxFQUFBLG1DQUFBQztBQUFBLEVBQUEsc0NBQUFDO0FBQUEsRUFBQSxtQkFBQUM7QUFBQSxFQUFBLG9CQUFBQztBQUFBLEVBQUE7QUFBQSw4QkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx5QkFBQUM7QUFBQSxFQUFBLHlCQUFBQztBQUFBLEVBQUE7QUFBQSw4QkFBQUM7QUFBQSxFQUFBO0FBQUEsdUJBQUFDO0FBQUEsRUFBQSxpQkFBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBLEVBQUEseUJBQUFDO0FBQUEsRUFBQSx5QkFBQUM7QUFBQSxFQUFBLG9CQUFBQztBQUFBLEVBQUE7QUFBQSwrQkFBQUM7QUFBQSxFQUFBLHNCQUFBQztBQUFBLEVBQUEsdUJBQUFDO0FBQUEsRUFBQSwyQkFBQUM7QUFBQSxFQUFBLCtCQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUEsRUFBQTtBQUFBO0FBQUE7QUFFQSxZQUF5QjtBQUN6QixJQUFBekIsbUJBQW9DO0FBQ3BDLGVBQTRCO0FBQzVCLElBQUFDLHNCQUF1QztBQUN2QyxJQUFBQyxZQUE2QjtBQUM3QixJQUFBQyxpQkFBa0M7QUFDbEMsSUFBQUMsb0JBQXFDO0FBQ3JDLElBQUFDLGdDQUFpRDtBQUNqRCxJQUFBQyw0QkFBNkM7QUFDN0MsSUFBQUMsK0JBQWdEO0FBQ2hELElBQUFDLFlBQTZCO0FBQzdCLElBQUFDLGFBQThCO0FBQzlCLFdBQXdCO0FBQ3hCLElBQUFDLHFCQUFzQztBQUN0QyxpQkFBOEI7QUFDOUIsU0FBc0I7QUFDdEIsV0FBd0I7QUFDeEIsVUFBdUI7QUFDdkIsV0FBd0I7QUFDeEIsSUFBQUMsZ0JBQWlDO0FBQ2pDLElBQUFDLGtCQUFtQztBQUNuQyxjQUEyQjtBQUMzQixJQUFBQyxxQkFBc0M7QUFDdEMsSUFBQUMsY0FBK0I7QUFDL0IsSUFBQUMsVUFBMkI7QUFDM0IsVUFBdUI7QUFDdkIsSUFBQUMseUJBQTBDO0FBQzFDLElBQUFDLGtCQUFtQztBQUNuQyxJQUFBQyxrQkFBbUM7QUFDbkMsSUFBQUMsYUFBOEI7QUFDOUIsV0FBd0I7QUFDeEIsSUFBQUMsc0JBQXVDO0FBQ3ZDLElBQUFDLGVBQWdDO0FBQ2hDLElBQUFFLG9CQUFxQztBQUNyQyxJQUFBRCxnQkFBaUM7QUFDakMsSUFBQUUsd0JBQXlDO0FBQ3pDLElBQUFDLHdCQUF5QztBQUN6QyxjQUEyQjsiLAogICJuYW1lcyI6IFsiYnVsay1jb25jdXJyZW5jeSIsICJjaGVjay1wcm9qZWN0LXR5cGVzIiwgImNsaS11dGlscyIsICJjb2RlLWdlbmVyYXRvciIsICJjb21taXRsaW50LWNvbmZpZyIsICJjb21taXRsaW50LWZvcmJpZGRlbi1wYXR0ZXJucyIsICJjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyIiwgImNvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXIiLCAiZG9jcy1zaXRlIiwgImVudi10b2dnbGUiLCAiZm9yYmlkZGVuLXBhdHRlcm5zIiwgImxpYnJhcnktYnVpbGQiLCAibGluay1jaGVjay1za2lwIiwgIm5hbm8tc3RhZ2VkLWNvbmZpZyIsICJucG0tcHVibGlzaCIsICJucG0tcnVuIiwgInBhY2thZ2UtbG9jay1pbnRlZ3JpdHkiLCAicGFja2FnZS1tYW5hZ2VyIiwgInJlbGVhc2VkLWlzc3VlcyIsICJyZXBvLXBhdGhzIiwgInNoYXJlZC1jb25maWctZmlsZXMiLCAidGVzdC1ydW5uZXJzIiwgInVwc3RyZWFtLXN5bmMiLCAidXBzdHJlYW0tc3luYy1jbGkiLCAidmFsaWRhdGUtZGVjbGFyYXRpb25zIiwgInZhbGlkYXRlLWRlcGVuZGVuY2llcyJdCn0K
164
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2J1aWxkJyBmcm9tICcuL2J1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdidWxrLWNvbmN1cnJlbmN5JyBmcm9tICcuL2J1bGstY29uY3VycmVuY3kudHMnO1xuZXhwb3J0ICogYXMgJ2J1bmRsZXJzJyBmcm9tICcuL2J1bmRsZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjaGFuZ2Vsb2ctZ3JvdXBpbmcnIGZyb20gJy4vY2hhbmdlbG9nLWdyb3VwaW5nLnRzJztcbmV4cG9ydCAqIGFzICdjaGFuZ2Vsb2ctcmV3cml0ZS1jbGknIGZyb20gJy4vY2hhbmdlbG9nLXJld3JpdGUtY2xpLnRzJztcbmV4cG9ydCAqIGFzICdjaGFuZ2Vsb2ctcmV3cml0ZScgZnJvbSAnLi9jaGFuZ2Vsb2ctcmV3cml0ZS50cyc7XG5leHBvcnQgKiBhcyAnY2hlY2stcHJvamVjdC10eXBlcycgZnJvbSAnLi9jaGVjay1wcm9qZWN0LXR5cGVzLnRzJztcbmV4cG9ydCAqIGFzICdjbGktdXRpbHMnIGZyb20gJy4vY2xpLXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdjb2RlLWdlbmVyYXRvcicgZnJvbSAnLi9jb2RlLWdlbmVyYXRvci50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1jb25maWcnIGZyb20gJy4vY29tbWl0bGludC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zJyBmcm9tICcuL2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zLnRzJztcbmV4cG9ydCAqIGFzICdjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyJyBmcm9tICcuL2NvbW1pdGxpbnQtbGludC1tZC1oZWFkZXIudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXInIGZyb20gJy4vY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlci50cyc7XG5leHBvcnQgKiBhcyAnZG9jcy1zaXRlJyBmcm9tICcuL2RvY3Mtc2l0ZS9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZW52LXRvZ2dsZScgZnJvbSAnLi9lbnYtdG9nZ2xlLnRzJztcbmV4cG9ydCAqIGFzICdleGVjJyBmcm9tICcuL2V4ZWMudHMnO1xuZXhwb3J0ICogYXMgJ2ZvcmJpZGRlbi1wYXR0ZXJucycgZnJvbSAnLi9mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuZXhwb3J0ICogYXMgJ2Zvcm1hdHRlcnMnIGZyb20gJy4vZm9ybWF0dGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZnMnIGZyb20gJy4vZnMudHMnO1xuZXhwb3J0ICogYXMgJ2dhdGUnIGZyb20gJy4vZ2F0ZS50cyc7XG5leHBvcnQgKiBhcyAnZ2l0JyBmcm9tICcuL2dpdC50cyc7XG5leHBvcnQgKiBhcyAnanNvbicgZnJvbSAnLi9qc29uLnRzJztcbmV4cG9ydCAqIGFzICdsaWJyYXJ5LWJ1aWxkJyBmcm9tICcuL2xpYnJhcnktYnVpbGQudHMnO1xuZXhwb3J0ICogYXMgJ2xpbmstY2hlY2stc2tpcCcgZnJvbSAnLi9saW5rLWNoZWNrLXNraXAudHMnO1xuZXhwb3J0ICogYXMgJ2xpbnRlcnMnIGZyb20gJy4vbGludGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnbmFuby1zdGFnZWQtY29uZmlnJyBmcm9tICcuL25hbm8tc3RhZ2VkLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnbnBtLXB1Ymxpc2gnIGZyb20gJy4vbnBtLXB1Ymxpc2gudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1ydW4nIGZyb20gJy4vbnBtLXJ1bi50cyc7XG5leHBvcnQgKiBhcyAnbnBtJyBmcm9tICcuL25wbS50cyc7XG5leHBvcnQgKiBhcyAncGFja2FnZS1sb2NrLWludGVncml0eScgZnJvbSAnLi9wYWNrYWdlLWxvY2staW50ZWdyaXR5LnRzJztcbmV4cG9ydCAqIGFzICdwYWNrYWdlLW1hbmFnZXInIGZyb20gJy4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmV4cG9ydCAqIGFzICdyZWxlYXNlZC1pc3N1ZXMnIGZyb20gJy4vcmVsZWFzZWQtaXNzdWVzLnRzJztcbmV4cG9ydCAqIGFzICdyZXBvLXBhdGhzJyBmcm9tICcuL3JlcG8tcGF0aHMudHMnO1xuZXhwb3J0ICogYXMgJ3Jvb3QnIGZyb20gJy4vcm9vdC50cyc7XG5leHBvcnQgKiBhcyAnc2hhcmVkLWNvbmZpZy1maWxlcycgZnJvbSAnLi9zaGFyZWQtY29uZmlnLWZpbGVzLnRzJztcbmV4cG9ydCAqIGFzICd0ZXN0LXJ1bm5lcnMnIGZyb20gJy4vdGVzdC1ydW5uZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICd1cHN0cmVhbS1zeW5jLWNsaScgZnJvbSAnLi91cHN0cmVhbS1zeW5jLWNsaS50cyc7XG5leHBvcnQgKiBhcyAndXBzdHJlYW0tc3luYycgZnJvbSAnLi91cHN0cmVhbS1zeW5jLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnIGZyb20gJy4vdmFsaWRhdGUtZGVjbGFyYXRpb25zLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZXBlbmRlbmNpZXMnIGZyb20gJy4vdmFsaWRhdGUtZGVwZW5kZW5jaWVzLnRzJztcbmV4cG9ydCAqIGFzICd2ZXJzaW9uJyBmcm9tICcuL3ZlcnNpb24udHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsNEJBQUFBO0FBQUEsRUFBQTtBQUFBLDhCQUFBQztBQUFBLEVBQUEsMkJBQUFDO0FBQUEsRUFBQSwrQkFBQUM7QUFBQSxFQUFBLDZCQUFBQztBQUFBLEVBQUEsbUJBQUFDO0FBQUEsRUFBQSx3QkFBQUM7QUFBQSxFQUFBLDJCQUFBQztBQUFBLEVBQUEsdUNBQUFDO0FBQUEsRUFBQSxtQ0FBQUM7QUFBQSxFQUFBLHNDQUFBQztBQUFBLEVBQUEsbUJBQUFDO0FBQUEsRUFBQSxvQkFBQUM7QUFBQSxFQUFBO0FBQUEsOEJBQUFDO0FBQUEsRUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEseUJBQUFDO0FBQUEsRUFBQSx5QkFBQUM7QUFBQSxFQUFBO0FBQUEsOEJBQUFDO0FBQUEsRUFBQTtBQUFBLHVCQUFBQztBQUFBLEVBQUEsaUJBQUFDO0FBQUEsRUFBQSxnQ0FBQUM7QUFBQSxFQUFBLHlCQUFBQztBQUFBLEVBQUEseUJBQUFDO0FBQUEsRUFBQSxvQkFBQUM7QUFBQSxFQUFBO0FBQUEsK0JBQUFDO0FBQUEsRUFBQSxzQkFBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBLEVBQUEsMkJBQUFDO0FBQUEsRUFBQSwrQkFBQUM7QUFBQSxFQUFBLCtCQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBRUEsWUFBeUI7QUFDekIsSUFBQTVCLG1CQUFvQztBQUNwQyxlQUE0QjtBQUM1QixJQUFBQyxxQkFBc0M7QUFDdEMsSUFBQUUsd0JBQXlDO0FBQ3pDLElBQUFELG9CQUFxQztBQUNyQyxJQUFBRSxzQkFBdUM7QUFDdkMsSUFBQUMsWUFBNkI7QUFDN0IsSUFBQUMsaUJBQWtDO0FBQ2xDLElBQUFDLG9CQUFxQztBQUNyQyxJQUFBQyxnQ0FBaUQ7QUFDakQsSUFBQUMsNEJBQTZDO0FBQzdDLElBQUFDLCtCQUFnRDtBQUNoRCxJQUFBQyxZQUE2QjtBQUM3QixJQUFBQyxhQUE4QjtBQUM5QixXQUF3QjtBQUN4QixJQUFBQyxxQkFBc0M7QUFDdEMsaUJBQThCO0FBQzlCLFNBQXNCO0FBQ3RCLFdBQXdCO0FBQ3hCLFVBQXVCO0FBQ3ZCLFdBQXdCO0FBQ3hCLElBQUFDLGdCQUFpQztBQUNqQyxJQUFBQyxrQkFBbUM7QUFDbkMsY0FBMkI7QUFDM0IsSUFBQUMscUJBQXNDO0FBQ3RDLElBQUFDLGNBQStCO0FBQy9CLElBQUFDLFVBQTJCO0FBQzNCLFVBQXVCO0FBQ3ZCLElBQUFDLHlCQUEwQztBQUMxQyxJQUFBQyxrQkFBbUM7QUFDbkMsSUFBQUMsa0JBQW1DO0FBQ25DLElBQUFDLGFBQThCO0FBQzlCLFdBQXdCO0FBQ3hCLElBQUFDLHNCQUF1QztBQUN2QyxJQUFBQyxlQUFnQztBQUNoQyxJQUFBRSxvQkFBcUM7QUFDckMsSUFBQUQsZ0JBQWlDO0FBQ2pDLElBQUFFLHdCQUF5QztBQUN6QyxJQUFBQyx3QkFBeUM7QUFDekMsY0FBMkI7IiwKICAibmFtZXMiOiBbImJ1bGstY29uY3VycmVuY3kiLCAiY2hhbmdlbG9nLWdyb3VwaW5nIiwgImNoYW5nZWxvZy1yZXdyaXRlIiwgImNoYW5nZWxvZy1yZXdyaXRlLWNsaSIsICJjaGVjay1wcm9qZWN0LXR5cGVzIiwgImNsaS11dGlscyIsICJjb2RlLWdlbmVyYXRvciIsICJjb21taXRsaW50LWNvbmZpZyIsICJjb21taXRsaW50LWZvcmJpZGRlbi1wYXR0ZXJucyIsICJjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyIiwgImNvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXIiLCAiZG9jcy1zaXRlIiwgImVudi10b2dnbGUiLCAiZm9yYmlkZGVuLXBhdHRlcm5zIiwgImxpYnJhcnktYnVpbGQiLCAibGluay1jaGVjay1za2lwIiwgIm5hbm8tc3RhZ2VkLWNvbmZpZyIsICJucG0tcHVibGlzaCIsICJucG0tcnVuIiwgInBhY2thZ2UtbG9jay1pbnRlZ3JpdHkiLCAicGFja2FnZS1tYW5hZ2VyIiwgInJlbGVhc2VkLWlzc3VlcyIsICJyZXBvLXBhdGhzIiwgInNoYXJlZC1jb25maWctZmlsZXMiLCAidGVzdC1ydW5uZXJzIiwgInVwc3RyZWFtLXN5bmMiLCAidXBzdHJlYW0tc3luYy1jbGkiLCAidmFsaWRhdGUtZGVjbGFyYXRpb25zIiwgInZhbGlkYXRlLWRlcGVuZGVuY2llcyJdCn0K
@@ -6,6 +6,9 @@
6
6
  export * as 'build' from './build.cjs';
7
7
  export * as 'bulk-concurrency' from './bulk-concurrency.cjs';
8
8
  export * as 'bundlers' from './bundlers/index.cjs';
9
+ export * as 'changelog-grouping' from './changelog-grouping.cjs';
10
+ export * as 'changelog-rewrite-cli' from './changelog-rewrite-cli.cjs';
11
+ export * as 'changelog-rewrite' from './changelog-rewrite.cjs';
9
12
  export * as 'check-project-types' from './check-project-types.cjs';
10
13
  export * as 'cli-utils' from './cli-utils.cjs';
11
14
  export * as 'code-generator' from './code-generator.cjs';