@mnaoumov/typescript-dev-toolkit 6.2.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.
- package/bin/rewrite-changelog.mjs +8 -0
- package/dist/lib/cjs/changelog-grouping.cjs +23 -2
- package/dist/lib/cjs/changelog-grouping.d.cts +11 -0
- package/dist/lib/cjs/changelog-rewrite-cli.cjs +177 -0
- package/dist/lib/cjs/changelog-rewrite-cli.d.cts +105 -0
- package/dist/lib/cjs/changelog-rewrite.cjs +143 -0
- package/dist/lib/cjs/changelog-rewrite.d.cts +108 -0
- package/dist/lib/cjs/index.cjs +7 -1
- package/dist/lib/cjs/index.d.cts +2 -0
- package/dist/lib/cjs/version.cjs +23 -21
- package/dist/lib/cjs/version.d.cts +9 -1
- package/dist/lib/esm/changelog-grouping.d.mts +11 -0
- package/dist/lib/esm/changelog-grouping.mjs +22 -2
- package/dist/lib/esm/changelog-rewrite-cli.d.mts +105 -0
- package/dist/lib/esm/changelog-rewrite-cli.mjs +147 -0
- package/dist/lib/esm/changelog-rewrite.d.mts +108 -0
- package/dist/lib/esm/changelog-rewrite.mjs +118 -0
- package/dist/lib/esm/index.d.mts +2 -0
- package/dist/lib/esm/index.mjs +5 -1
- package/dist/lib/esm/version.d.mts +9 -1
- package/dist/lib/esm/version.mjs +22 -21
- package/package.json +2 -1
|
@@ -0,0 +1,118 @@
|
|
|
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
|
+
import { renderGroupedChangelogSection } from "./changelog-grouping.mjs";
|
|
7
|
+
import { toChangelogCommitEntry } from "./version.mjs";
|
|
8
|
+
const BULLET_PREFIX = "- ";
|
|
9
|
+
const FULL_CHANGELOG_PREFIX = "**Full Changelog**:";
|
|
10
|
+
const SECTION_HEADING_PREFIX = "## ";
|
|
11
|
+
async function rewriteChangelog(changelog, source) {
|
|
12
|
+
const lines = changelog.replaceAll("\r\n", "\n").split("\n");
|
|
13
|
+
const firstHeadingIndex = lines.findIndex((line) => line.startsWith(SECTION_HEADING_PREFIX));
|
|
14
|
+
const headerLines = firstHeadingIndex === -1 ? lines : lines.slice(0, firstHeadingIndex);
|
|
15
|
+
const sections = firstHeadingIndex === -1 ? [] : splitSections(lines.slice(firstHeadingIndex));
|
|
16
|
+
const tags = new Set(source.tags);
|
|
17
|
+
const kept = [];
|
|
18
|
+
const rewritten = [];
|
|
19
|
+
const outputBlocks = [trimTrailingBlankLines(headerLines).join("\n")];
|
|
20
|
+
for (const [index, section] of sections.entries()) {
|
|
21
|
+
const keptReason = getKeptReason(section);
|
|
22
|
+
if (keptReason) {
|
|
23
|
+
kept.push({ reason: keptReason, version: section.version });
|
|
24
|
+
outputBlocks.push(trimTrailingBlankLines(section.rawLines).join("\n"));
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const tag = toTag(section.version, tags);
|
|
28
|
+
const previousSection = sections[index + 1];
|
|
29
|
+
const previousTag = previousSection ? toTag(previousSection.version, tags) : void 0;
|
|
30
|
+
const isRangeKnown = tag !== void 0 && (previousSection === void 0 || previousTag !== void 0);
|
|
31
|
+
const commitMessages = isRangeKnown ? await source.getCommitMessages(previousTag, tag) : [];
|
|
32
|
+
const { entries, matchedCount } = matchBullets(section.bodyLines, commitMessages);
|
|
33
|
+
const oldBody = section.bodyLines.join("\n");
|
|
34
|
+
const newBody = renderGroupedChangelogSection(entries);
|
|
35
|
+
rewritten.push({ matchedCount, newBody, oldBody, tag, version: section.version });
|
|
36
|
+
outputBlocks.push(`${section.heading}
|
|
37
|
+
|
|
38
|
+
${newBody}`);
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
content: `${outputBlocks.filter((block) => block !== "").join("\n\n")}
|
|
42
|
+
`,
|
|
43
|
+
kept,
|
|
44
|
+
rewritten
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function rewriteReleaseNotes(releaseBody, section, shouldOverwriteEdited = false) {
|
|
48
|
+
const lines = releaseBody.replaceAll("\r\n", "\n").trim().split("\n");
|
|
49
|
+
const linkIndex = findLastIndex(lines, (line) => line.startsWith(FULL_CHANGELOG_PREFIX));
|
|
50
|
+
const noteLines = linkIndex === -1 ? lines : lines.slice(0, linkIndex);
|
|
51
|
+
if (!shouldOverwriteEdited && toComparable(noteLines.join("\n")) !== toComparable(section.oldBody)) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return linkIndex === -1 ? section.newBody : `${section.newBody}
|
|
55
|
+
|
|
56
|
+
${lines.slice(linkIndex).join("\n")}`;
|
|
57
|
+
}
|
|
58
|
+
function findLastIndex(lines, isMatch) {
|
|
59
|
+
return lines.map((line) => isMatch(line)).lastIndexOf(true);
|
|
60
|
+
}
|
|
61
|
+
function findMatchingEntryIndex(entries, bullet) {
|
|
62
|
+
const comparable = toComparable(bullet);
|
|
63
|
+
const renderedIndex = entries.findIndex((entry) => toComparable(toRenderedLine(entry)) === comparable);
|
|
64
|
+
return renderedIndex === -1 ? entries.findIndex((entry) => toComparable(entry.entry) === comparable) : renderedIndex;
|
|
65
|
+
}
|
|
66
|
+
function getKeptReason(section) {
|
|
67
|
+
if (section.bodyLines.length === 0) {
|
|
68
|
+
return "the section is empty";
|
|
69
|
+
}
|
|
70
|
+
if (section.bodyLines.some((line) => !line.startsWith(BULLET_PREFIX))) {
|
|
71
|
+
return "the section is not a plain bullet list, so a person wrote or edited it";
|
|
72
|
+
}
|
|
73
|
+
return void 0;
|
|
74
|
+
}
|
|
75
|
+
function matchBullets(bodyLines, commitMessages) {
|
|
76
|
+
const unused = commitMessages.map((commitMessage) => toChangelogCommitEntry(commitMessage));
|
|
77
|
+
const entries = [];
|
|
78
|
+
let matchedCount = 0;
|
|
79
|
+
for (const line of bodyLines) {
|
|
80
|
+
const bullet = line.slice(BULLET_PREFIX.length).trim();
|
|
81
|
+
const index = findMatchingEntryIndex(unused, bullet);
|
|
82
|
+
if (index === -1) {
|
|
83
|
+
entries.push({ detailLines: [], entry: bullet, hasBreakingFooter: false, references: [] });
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
matchedCount++;
|
|
87
|
+
entries.push(...unused.splice(index, 1));
|
|
88
|
+
}
|
|
89
|
+
return { entries, matchedCount };
|
|
90
|
+
}
|
|
91
|
+
function splitSections(lines) {
|
|
92
|
+
const headingIndices = lines.map((line, index) => line.startsWith(SECTION_HEADING_PREFIX) ? index : -1).filter((index) => index !== -1);
|
|
93
|
+
return headingIndices.map((headingIndex, position) => toSection(lines.slice(headingIndex, headingIndices[position + 1] ?? lines.length)));
|
|
94
|
+
}
|
|
95
|
+
function toComparable(text) {
|
|
96
|
+
return text.replaceAll(/[`\\]/g, "").replaceAll(/\s+/g, " ").trim();
|
|
97
|
+
}
|
|
98
|
+
function toRenderedLine(entry) {
|
|
99
|
+
return entry.references.length === 0 ? entry.entry : `${entry.entry} (${entry.references.join(", ")})`;
|
|
100
|
+
}
|
|
101
|
+
function toSection(rawLines) {
|
|
102
|
+
const heading = rawLines.slice(0, 1).join("");
|
|
103
|
+
const bodyLines = rawLines.slice(1).filter((line) => line.trim() !== "");
|
|
104
|
+
const version = heading.slice(SECTION_HEADING_PREFIX.length).trim().split(/\s+/, 1).join("");
|
|
105
|
+
return { bodyLines, heading, rawLines, version };
|
|
106
|
+
}
|
|
107
|
+
function toTag(version, tags) {
|
|
108
|
+
return [version, `v${version}`].find((candidate) => tags.has(candidate));
|
|
109
|
+
}
|
|
110
|
+
function trimTrailingBlankLines(lines) {
|
|
111
|
+
const lastIndex = findLastIndex(lines, (line) => line.trim() !== "");
|
|
112
|
+
return lines.slice(0, lastIndex + 1);
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
rewriteChangelog,
|
|
116
|
+
rewriteReleaseNotes
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NoYW5nZWxvZy1yZXdyaXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmV3cml0ZXMgdGhlIGFscmVhZHktcHVibGlzaGVkIHNlY3Rpb25zIG9mIGEgYENIQU5HRUxPRy5tZGAgaW50byB0aGUgYGdyb3VwZWRgIGxheW91dCBhIHJlbGVhc2Ugbm93IHdyaXRlcywgc28gYVxuICogcHJvamVjdCdzIGhpc3RvcnkgcmVhZHMgdGhlIHNhbWUgd2F5IGFzIGl0cyBuZXh0IHJlbGVhc2UuXG4gKlxuICogT25seSBhIHNlY3Rpb24gdGhhdCBpcyBzdGlsbCB0aGUgZmxhdCBsaXN0IG9mIGNvbW1pdCBzdWJqZWN0cyBhIHJlbGVhc2UgdXNlZCB0byB3cml0ZSBpcyByZXdyaXR0ZW4uIEl0cyBidWxsZXRzIGFyZVxuICogbWF0Y2hlZCBiYWNrIHRvIHRoZSBmaXJzdC1wYXJlbnQgY29tbWl0cyBvZiB0aGUgc2VjdGlvbidzIHRhZyByYW5nZSwgd2hpY2ggYnJpbmdzIGJhY2sgd2hhdCB0aGUgYnVsbGV0IGFsb25lIGxvc3Q6XG4gKiB0aGUgaXNzdWUgdGl0bGUgYW4gaXNzdWUtY2xvc2luZyBgcmUgIzxuPmAgbWVyZ2UgY2FycmllcyBpbiBpdHMgYm9keSwgYW5kIHRoZSBgQlJFQUtJTkcgQ0hBTkdFOmAgZm9vdGVyLiBBIGJ1bGxldCBub1xuICogY29tbWl0IG1hdGNoZXMgKHRoZSBoaXN0b3J5IHdhcyByZXdyaXR0ZW4sIG9yIHRoZSBidWxsZXQgd2FzIGVkaXRlZCBieSBoYW5kKSBpcyBncm91cGVkIGZyb20gaXRzIG93biB0ZXh0LiBBIHNlY3Rpb25cbiAqIHRoYXQgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGJ1bGxldCBsaXN0IHdhcyB3cml0dGVuIG9yIGVkaXRlZCBieSBhIHBlcnNvbiwgc28gaXQgaXMga2VwdCBhcyBpdCBpcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoYW5nZWxvZ0NvbW1pdEVudHJ5IH0gZnJvbSAnLi9jaGFuZ2Vsb2ctZ3JvdXBpbmcudHMnO1xuXG5pbXBvcnQgeyByZW5kZXJHcm91cGVkQ2hhbmdlbG9nU2VjdGlvbiB9IGZyb20gJy4vY2hhbmdlbG9nLWdyb3VwaW5nLnRzJztcbmltcG9ydCB7IHRvQ2hhbmdlbG9nQ29tbWl0RW50cnkgfSBmcm9tICcuL3ZlcnNpb24udHMnO1xuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIHtAbGluayByZXdyaXRlQ2hhbmdlbG9nfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2Vsb2dSZXdyaXRlUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBuZXcgYENIQU5HRUxPRy5tZGAgY29udGVudCwgd2l0aCBMRiBsaW5lIGVuZGluZ3MuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9ucyBrZXB0IGFzIHRoZXkgd2VyZSwgd2l0aCB0aGUgcmVhc29uLCBuZXdlc3QgZmlyc3QuXG4gICAqL1xuICByZWFkb25seSBrZXB0OiByZWFkb25seSBLZXB0Q2hhbmdlbG9nU2VjdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbnMgcmV3cml0dGVuLCBuZXdlc3QgZmlyc3QuXG4gICAqL1xuICByZWFkb25seSByZXdyaXR0ZW46IHJlYWRvbmx5IFJld3JpdHRlbkNoYW5nZWxvZ1NlY3Rpb25bXTtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayByZXdyaXRlQ2hhbmdlbG9nfSBuZWVkcyBmcm9tIHRoZSByZXBvc2l0b3J5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZWxvZ1Jld3JpdGVTb3VyY2Uge1xuICAvKipcbiAgICogUmVhZHMgdGhlIGZ1bGwgbWVzc2FnZXMgb2YgdGhlIGZpcnN0LXBhcmVudCBjb21taXRzIGluIGEgcmFuZ2UsIGluIGBnaXQgbG9nYCBvcmRlci5cbiAgICpcbiAgICogQHBhcmFtIGZyb21UYWcgLSBUaGUgdGFnIHRoZSByYW5nZSBzdGFydHMgYWZ0ZXIsIG9yIGB1bmRlZmluZWRgIGZvciB0aGUgd2hvbGUgaGlzdG9yeSB1cCB0byB7QGxpbmsgdG9UYWd9LlxuICAgKiBAcGFyYW0gdG9UYWcgLSBUaGUgdGFnIHRoZSByYW5nZSBlbmRzIGF0LlxuICAgKiBAcmV0dXJucyBUaGUgZnVsbCBjb21taXQgbWVzc2FnZXMuXG4gICAqL1xuICByZWFkb25seSBnZXRDb21taXRNZXNzYWdlczogKGZyb21UYWc6IHN0cmluZyB8IHVuZGVmaW5lZCwgdG9UYWc6IHN0cmluZykgPT4gUHJvbWlzZTxyZWFkb25seSBzdHJpbmdbXT47XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5J3MgdGFncy5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgc2VjdGlvbiB7QGxpbmsgcmV3cml0ZUNoYW5nZWxvZ30ga2VwdCBhcyBpdCB3YXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2VwdENoYW5nZWxvZ1NlY3Rpb24ge1xuICAvKipcbiAgICogV2h5IGl0IHdhcyBrZXB0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIGl0cyBoZWFkaW5nIG5hbWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2VjdGlvbiB7QGxpbmsgcmV3cml0ZUNoYW5nZWxvZ30gcmV3cm90ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXdyaXR0ZW5DaGFuZ2Vsb2dTZWN0aW9uIHtcbiAgLyoqXG4gICAqIEhvdyBtYW55IG9mIGl0cyBidWxsZXRzIHdlcmUgbWF0Y2hlZCB0byBhIGNvbW1pdCBvZiBpdHMgdGFnIHJhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hlZENvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBncm91cGVkIHNlY3Rpb24gYm9keSwgd2l0aG91dCBpdHMgaGVhZGluZy5cbiAgICovXG4gIHJlYWRvbmx5IG5ld0JvZHk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gYm9keSBhcyBpdCB3YXMsIHdpdGhvdXQgaXRzIGhlYWRpbmcuXG4gICAqL1xuICByZWFkb25seSBvbGRCb2R5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWcgdGhlIHZlcnNpb24gd2FzIHJlbGVhc2VkIHVuZGVyLCB3aGVuIHRoZSByZXBvc2l0b3J5IGhhcyBvbmUuXG4gICAqL1xuICByZWFkb25seSB0YWc6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gaXRzIGhlYWRpbmcgbmFtZXMuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDaGFuZ2Vsb2dTZWN0aW9uIHtcbiAgcmVhZG9ubHkgYm9keUxpbmVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgaGVhZGluZzogc3RyaW5nO1xuICByZWFkb25seSByYXdMaW5lczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIE1hdGNoZWRCdWxsZXRzIHtcbiAgcmVhZG9ubHkgZW50cmllczogcmVhZG9ubHkgQ2hhbmdlbG9nQ29tbWl0RW50cnlbXTtcbiAgcmVhZG9ubHkgbWF0Y2hlZENvdW50OiBudW1iZXI7XG59XG5cbmNvbnN0IEJVTExFVF9QUkVGSVggPSAnLSAnO1xuY29uc3QgRlVMTF9DSEFOR0VMT0dfUFJFRklYID0gJyoqRnVsbCBDaGFuZ2Vsb2cqKjonO1xuY29uc3QgU0VDVElPTl9IRUFESU5HX1BSRUZJWCA9ICcjIyAnO1xuXG4vKipcbiAqIFJld3JpdGVzIGV2ZXJ5IHJlbGVhc2VkIHNlY3Rpb24gb2YgYSBgQ0hBTkdFTE9HLm1kYCB0aGF0IGlzIHN0aWxsIGEgZmxhdCBsaXN0IG9mIGNvbW1pdCBzdWJqZWN0cyBpbnRvIHRoZSBgZ3JvdXBlZGBcbiAqIGxheW91dCwga2VlcGluZyBlYWNoIGhlYWRpbmcgYXMgaXQgaXMuXG4gKlxuICogQHBhcmFtIGNoYW5nZWxvZyAtIFRoZSBjdXJyZW50IGBDSEFOR0VMT0cubWRgIGNvbnRlbnQuXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHJlcG9zaXRvcnkncyB0YWdzIGFuZCBjb21taXRzLlxuICogQHJldHVybnMgVGhlIG5ldyBjb250ZW50IGFuZCB3aGF0IGhhcHBlbmVkIHRvIGVhY2ggc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJld3JpdGVDaGFuZ2Vsb2coY2hhbmdlbG9nOiBzdHJpbmcsIHNvdXJjZTogQ2hhbmdlbG9nUmV3cml0ZVNvdXJjZSk6IFByb21pc2U8Q2hhbmdlbG9nUmV3cml0ZVJlc3VsdD4ge1xuICBjb25zdCBsaW5lcyA9IGNoYW5nZWxvZy5yZXBsYWNlQWxsKCdcXHJcXG4nLCAnXFxuJykuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBmaXJzdEhlYWRpbmdJbmRleCA9IGxpbmVzLmZpbmRJbmRleCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKFNFQ1RJT05fSEVBRElOR19QUkVGSVgpKTtcbiAgY29uc3QgaGVhZGVyTGluZXMgPSBmaXJzdEhlYWRpbmdJbmRleCA9PT0gLTEgPyBsaW5lcyA6IGxpbmVzLnNsaWNlKDAsIGZpcnN0SGVhZGluZ0luZGV4KTtcbiAgY29uc3Qgc2VjdGlvbnMgPSBmaXJzdEhlYWRpbmdJbmRleCA9PT0gLTEgPyBbXSA6IHNwbGl0U2VjdGlvbnMobGluZXMuc2xpY2UoZmlyc3RIZWFkaW5nSW5kZXgpKTtcbiAgY29uc3QgdGFncyA9IG5ldyBTZXQoc291cmNlLnRhZ3MpO1xuXG4gIGNvbnN0IGtlcHQ6IEtlcHRDaGFuZ2Vsb2dTZWN0aW9uW10gPSBbXTtcbiAgY29uc3QgcmV3cml0dGVuOiBSZXdyaXR0ZW5DaGFuZ2Vsb2dTZWN0aW9uW10gPSBbXTtcbiAgY29uc3Qgb3V0cHV0QmxvY2tzID0gW3RyaW1UcmFpbGluZ0JsYW5rTGluZXMoaGVhZGVyTGluZXMpLmpvaW4oJ1xcbicpXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgc2VjdGlvbl0gb2Ygc2VjdGlvbnMuZW50cmllcygpKSB7XG4gICAgY29uc3Qga2VwdFJlYXNvbiA9IGdldEtlcHRSZWFzb24oc2VjdGlvbik7XG4gICAgaWYgKGtlcHRSZWFzb24pIHtcbiAgICAgIGtlcHQucHVzaCh7IHJlYXNvbjoga2VwdFJlYXNvbiwgdmVyc2lvbjogc2VjdGlvbi52ZXJzaW9uIH0pO1xuICAgICAgb3V0cHV0QmxvY2tzLnB1c2godHJpbVRyYWlsaW5nQmxhbmtMaW5lcyhzZWN0aW9uLnJhd0xpbmVzKS5qb2luKCdcXG4nKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWcgPSB0b1RhZyhzZWN0aW9uLnZlcnNpb24sIHRhZ3MpO1xuICAgIGNvbnN0IHByZXZpb3VzU2VjdGlvbiA9IHNlY3Rpb25zW2luZGV4ICsgMV07XG4gICAgY29uc3QgcHJldmlvdXNUYWcgPSBwcmV2aW91c1NlY3Rpb24gPyB0b1RhZyhwcmV2aW91c1NlY3Rpb24udmVyc2lvbiwgdGFncykgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNSYW5nZUtub3duID0gdGFnICE9PSB1bmRlZmluZWQgJiYgKHByZXZpb3VzU2VjdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzVGFnICE9PSB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGNvbW1pdE1lc3NhZ2VzID0gaXNSYW5nZUtub3duID8gYXdhaXQgc291cmNlLmdldENvbW1pdE1lc3NhZ2VzKHByZXZpb3VzVGFnLCB0YWcpIDogW107XG4gICAgY29uc3QgeyBlbnRyaWVzLCBtYXRjaGVkQ291bnQgfSA9IG1hdGNoQnVsbGV0cyhzZWN0aW9uLmJvZHlMaW5lcywgY29tbWl0TWVzc2FnZXMpO1xuICAgIGNvbnN0IG9sZEJvZHkgPSBzZWN0aW9uLmJvZHlMaW5lcy5qb2luKCdcXG4nKTtcbiAgICBjb25zdCBuZXdCb2R5ID0gcmVuZGVyR3JvdXBlZENoYW5nZWxvZ1NlY3Rpb24oZW50cmllcyk7XG4gICAgcmV3cml0dGVuLnB1c2goeyBtYXRjaGVkQ291bnQsIG5ld0JvZHksIG9sZEJvZHksIHRhZywgdmVyc2lvbjogc2VjdGlvbi52ZXJzaW9uIH0pO1xuICAgIG91dHB1dEJsb2Nrcy5wdXNoKGAke3NlY3Rpb24uaGVhZGluZ31cXG5cXG4ke25ld0JvZHl9YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbnRlbnQ6IGAke291dHB1dEJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiBibG9jayAhPT0gJycpLmpvaW4oJ1xcblxcbicpfVxcbmAsXG4gICAga2VwdCxcbiAgICByZXdyaXR0ZW5cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXdyaXRlcyB0aGUgcmVsZWFzZSBub3RlcyBvZiBhIEdpdEh1YiByZWxlYXNlIHdob3NlIGNoYW5nZWxvZyBzZWN0aW9uIHtAbGluayByZXdyaXRlQ2hhbmdlbG9nfSByZXdyb3RlLlxuICpcbiAqIEEgcmVsZWFzZSBib2R5IGEgcmVsZWFzZSB3cm90ZSBpcyBpdHMgY2hhbmdlbG9nIHNlY3Rpb24sIGEgYmxhbmsgbGluZSwgYW5kIGEgYCoqRnVsbCBDaGFuZ2Vsb2cqKmAgY29tcGFyZSBsaW5rLiBUaGVcbiAqIGJvZHkgaXMgcmV3cml0dGVuIG9ubHkgd2hlbiBpdHMgcGFydCBhYm92ZSB0aGF0IGxpbmsgaXMgc3RpbGwgdGhlIHNlY3Rpb24gYXMgaXQgd2FzLCBzbyBhIHJlbGVhc2UgZWRpdGVkIGJ5IGhhbmRcbiAqIGFmdGVyIHB1Ymxpc2hpbmcgaXMgbm90IG92ZXJ3cml0dGVuIHVubGVzcyBhc2tlZC4gVGhlIGNvbXBhcmUgbGluayBpcyBrZXB0IGFzIGl0IGlzLlxuICpcbiAqIEBwYXJhbSByZWxlYXNlQm9keSAtIFRoZSByZWxlYXNlJ3MgY3VycmVudCBub3Rlcy5cbiAqIEBwYXJhbSBzZWN0aW9uIC0gVGhlIHJld3JpdHRlbiBzZWN0aW9uLlxuICogQHBhcmFtIHNob3VsZE92ZXJ3cml0ZUVkaXRlZCAtIFdoZXRoZXIgbm90ZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHRoZSBzZWN0aW9uIGFzIGl0IHdhcyBhcmUgcmV3cml0dGVuIGFueXdheS4gVGhhdCBpc1xuICogICByaWdodCB3aGVyZSB0aGUgY2hhbmdlbG9nIHdhcyBjb3JyZWN0ZWQgYWZ0ZXIgdGhlIHJlbGVhc2UsIGZvciBleGFtcGxlIHRvIHJlbW92ZSB0ZXh0IHRoYXQgbXVzdCBub3QgYmUgcHVibGljLlxuICogQHJldHVybnMgVGhlIG5ldyBub3Rlcywgb3IgYG51bGxgIHdoZW4gdGhlIHJlbGVhc2Ugd2FzIGVkaXRlZCBhbmQgaGFzIHRvIGJlIGxlZnQgYWxvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlUmVsZWFzZU5vdGVzKHJlbGVhc2VCb2R5OiBzdHJpbmcsIHNlY3Rpb246IFJld3JpdHRlbkNoYW5nZWxvZ1NlY3Rpb24sIHNob3VsZE92ZXJ3cml0ZUVkaXRlZCA9IGZhbHNlKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gcmVsZWFzZUJvZHkucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpLnRyaW0oKS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IGxpbmtJbmRleCA9IGZpbmRMYXN0SW5kZXgobGluZXMsIChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoRlVMTF9DSEFOR0VMT0dfUFJFRklYKSk7XG4gIGNvbnN0IG5vdGVMaW5lcyA9IGxpbmtJbmRleCA9PT0gLTEgPyBsaW5lcyA6IGxpbmVzLnNsaWNlKDAsIGxpbmtJbmRleCk7XG4gIGlmICghc2hvdWxkT3ZlcndyaXRlRWRpdGVkICYmIHRvQ29tcGFyYWJsZShub3RlTGluZXMuam9pbignXFxuJykpICE9PSB0b0NvbXBhcmFibGUoc2VjdGlvbi5vbGRCb2R5KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGxpbmtJbmRleCA9PT0gLTEgPyBzZWN0aW9uLm5ld0JvZHkgOiBgJHtzZWN0aW9uLm5ld0JvZHl9XFxuXFxuJHtsaW5lcy5zbGljZShsaW5rSW5kZXgpLmpvaW4oJ1xcbicpfWA7XG59XG5cbi8vIEFycmF5LnByb3RvdHlwZS5maW5kTGFzdEluZGV4IGlzIEVTMjAyMywgYWJvdmUgdGhpcyBwYWNrYWdlJ3MgbGliLlxuZnVuY3Rpb24gZmluZExhc3RJbmRleChsaW5lczogcmVhZG9ubHkgc3RyaW5nW10sIGlzTWF0Y2g6IChsaW5lOiBzdHJpbmcpID0+IGJvb2xlYW4pOiBudW1iZXIge1xuICByZXR1cm4gbGluZXMubWFwKChsaW5lKSA9PiBpc01hdGNoKGxpbmUpKS5sYXN0SW5kZXhPZih0cnVlKTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nRW50cnlJbmRleChlbnRyaWVzOiByZWFkb25seSBDaGFuZ2Vsb2dDb21taXRFbnRyeVtdLCBidWxsZXQ6IHN0cmluZyk6IG51bWJlciB7XG4gIC8vIFRoZSBsaW5lIGEgY29tbWl0IHJlbmRlcnMgdG8gdG9kYXksIHRoZW4gaXRzIGJhcmUgZW50cnk6IGEgYnVsbGV0IGFuIG9sZGVyIHRvb2xraXQgd3JvdGUgbWF5IGxhY2sgdGhlIHJlZmVyZW5jZXMuXG4gIGNvbnN0IGNvbXBhcmFibGUgPSB0b0NvbXBhcmFibGUoYnVsbGV0KTtcbiAgY29uc3QgcmVuZGVyZWRJbmRleCA9IGVudHJpZXMuZmluZEluZGV4KChlbnRyeSkgPT4gdG9Db21wYXJhYmxlKHRvUmVuZGVyZWRMaW5lKGVudHJ5KSkgPT09IGNvbXBhcmFibGUpO1xuICByZXR1cm4gcmVuZGVyZWRJbmRleCA9PT0gLTEgPyBlbnRyaWVzLmZpbmRJbmRleCgoZW50cnkpID0+IHRvQ29tcGFyYWJsZShlbnRyeS5lbnRyeSkgPT09IGNvbXBhcmFibGUpIDogcmVuZGVyZWRJbmRleDtcbn1cblxuZnVuY3Rpb24gZ2V0S2VwdFJlYXNvbihzZWN0aW9uOiBDaGFuZ2Vsb2dTZWN0aW9uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHNlY3Rpb24uYm9keUxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAndGhlIHNlY3Rpb24gaXMgZW1wdHknO1xuICB9XG5cbiAgaWYgKHNlY3Rpb24uYm9keUxpbmVzLnNvbWUoKGxpbmUpID0+ICFsaW5lLnN0YXJ0c1dpdGgoQlVMTEVUX1BSRUZJWCkpKSB7XG4gICAgcmV0dXJuICd0aGUgc2VjdGlvbiBpcyBub3QgYSBwbGFpbiBidWxsZXQgbGlzdCwgc28gYSBwZXJzb24gd3JvdGUgb3IgZWRpdGVkIGl0JztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG1hdGNoQnVsbGV0cyhib2R5TGluZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBjb21taXRNZXNzYWdlczogcmVhZG9ubHkgc3RyaW5nW10pOiBNYXRjaGVkQnVsbGV0cyB7XG4gIGNvbnN0IHVudXNlZCA9IGNvbW1pdE1lc3NhZ2VzLm1hcCgoY29tbWl0TWVzc2FnZSkgPT4gdG9DaGFuZ2Vsb2dDb21taXRFbnRyeShjb21taXRNZXNzYWdlKSk7XG4gIGNvbnN0IGVudHJpZXM6IENoYW5nZWxvZ0NvbW1pdEVudHJ5W10gPSBbXTtcbiAgbGV0IG1hdGNoZWRDb3VudCA9IDA7XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIGJvZHlMaW5lcykge1xuICAgIGNvbnN0IGJ1bGxldCA9IGxpbmUuc2xpY2UoQlVMTEVUX1BSRUZJWC5sZW5ndGgpLnRyaW0oKTtcbiAgICBjb25zdCBpbmRleCA9IGZpbmRNYXRjaGluZ0VudHJ5SW5kZXgodW51c2VkLCBidWxsZXQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIGVudHJpZXMucHVzaCh7IGRldGFpbExpbmVzOiBbXSwgZW50cnk6IGJ1bGxldCwgaGFzQnJlYWtpbmdGb290ZXI6IGZhbHNlLCByZWZlcmVuY2VzOiBbXSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG1hdGNoZWRDb3VudCsrO1xuICAgIGVudHJpZXMucHVzaCguLi51bnVzZWQuc3BsaWNlKGluZGV4LCAxKSk7XG4gIH1cblxuICByZXR1cm4geyBlbnRyaWVzLCBtYXRjaGVkQ291bnQgfTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgdGhlIGxpbmVzIGZyb20gdGhlIGZpcnN0IHNlY3Rpb24gaGVhZGluZyBvbiBpbnRvIHNlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBsaW5lcywgdGhlIGZpcnN0IG9mIHdoaWNoIGlzIGEgc2VjdGlvbiBoZWFkaW5nLlxuICogQHJldHVybnMgVGhlIHNlY3Rpb25zLCBpbiBmaWxlIG9yZGVyLlxuICovXG5mdW5jdGlvbiBzcGxpdFNlY3Rpb25zKGxpbmVzOiByZWFkb25seSBzdHJpbmdbXSk6IENoYW5nZWxvZ1NlY3Rpb25bXSB7XG4gIGNvbnN0IGhlYWRpbmdJbmRpY2VzID0gbGluZXMubWFwKChsaW5lLCBpbmRleCkgPT4gbGluZS5zdGFydHNXaXRoKFNFQ1RJT05fSEVBRElOR19QUkVGSVgpID8gaW5kZXggOiAtMSkuZmlsdGVyKChpbmRleCkgPT4gaW5kZXggIT09IC0xKTtcbiAgcmV0dXJuIGhlYWRpbmdJbmRpY2VzLm1hcCgoaGVhZGluZ0luZGV4LCBwb3NpdGlvbikgPT4gdG9TZWN0aW9uKGxpbmVzLnNsaWNlKGhlYWRpbmdJbmRleCwgaGVhZGluZ0luZGljZXNbcG9zaXRpb24gKyAxXSA/PyBsaW5lcy5sZW5ndGgpKSk7XG59XG5cbi8qKlxuICogUmVkdWNlcyBhIGxpbmUgdG8gd2hhdCBzdXJ2aXZlcyBgbGludDptZDpmaXhgOiBhIHB1Ymxpc2hlZCBzZWN0aW9uIHdhcyBmaXhlZCBhZnRlciBpdCB3YXMgZ2VuZXJhdGVkLCB3aGljaCB3cmFwc1xuICogbmFtZXMgaW4gYmFja3RpY2tzIGFuZCBlc2NhcGVzIGJyYWNrZXRzLCBhbmQgYSBHaXRIdWIgcmVsZWFzZSBrZXB0IHRoZSB0ZXh0IGZyb20gYmVmb3JlIHRoZSBmaXguXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dC5cbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHdpdGhvdXQgYmFja3RpY2tzLCBiYWNrc2xhc2hlcyBhbmQgcmVwZWF0ZWQgd2hpdGVzcGFjZS5cbiAqL1xuZnVuY3Rpb24gdG9Db21wYXJhYmxlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoL1tgXFxcXF0vZywgJycpLnJlcGxhY2VBbGwoL1xccysvZywgJyAnKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHRvUmVuZGVyZWRMaW5lKGVudHJ5OiBDaGFuZ2Vsb2dDb21taXRFbnRyeSk6IHN0cmluZyB7XG4gIHJldHVybiBlbnRyeS5yZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCA/IGVudHJ5LmVudHJ5IDogYCR7ZW50cnkuZW50cnl9ICgke2VudHJ5LnJlZmVyZW5jZXMuam9pbignLCAnKX0pYDtcbn1cblxuZnVuY3Rpb24gdG9TZWN0aW9uKHJhd0xpbmVzOiByZWFkb25seSBzdHJpbmdbXSk6IENoYW5nZWxvZ1NlY3Rpb24ge1xuICBjb25zdCBoZWFkaW5nID0gcmF3TGluZXMuc2xpY2UoMCwgMSkuam9pbignJyk7XG4gIGNvbnN0IGJvZHlMaW5lcyA9IHJhd0xpbmVzLnNsaWNlKDEpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkgIT09ICcnKTtcbiAgY29uc3QgdmVyc2lvbiA9IGhlYWRpbmcuc2xpY2UoU0VDVElPTl9IRUFESU5HX1BSRUZJWC5sZW5ndGgpLnRyaW0oKS5zcGxpdCgvXFxzKy8sIDEpLmpvaW4oJycpO1xuICByZXR1cm4geyBib2R5TGluZXMsIGhlYWRpbmcsIHJhd0xpbmVzLCB2ZXJzaW9uIH07XG59XG5cbmZ1bmN0aW9uIHRvVGFnKHZlcnNpb246IHN0cmluZywgdGFnczogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBbdmVyc2lvbiwgYHYke3ZlcnNpb259YF0uZmluZCgoY2FuZGlkYXRlKSA9PiB0YWdzLmhhcyhjYW5kaWRhdGUpKTtcbn1cblxuZnVuY3Rpb24gdHJpbVRyYWlsaW5nQmxhbmtMaW5lcyhsaW5lczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IGxhc3RJbmRleCA9IGZpbmRMYXN0SW5kZXgobGluZXMsIChsaW5lKSA9PiBsaW5lLnRyaW0oKSAhPT0gJycpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoMCwgbGFzdEluZGV4ICsgMSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQWVBLFNBQVMscUNBQXFDO0FBQzlDLFNBQVMsOEJBQThCO0FBa0d2QyxNQUFNLGdCQUFnQjtBQUN0QixNQUFNLHdCQUF3QjtBQUM5QixNQUFNLHlCQUF5QjtBQVUvQixlQUFzQixpQkFBaUIsV0FBbUIsUUFBaUU7QUFDekgsUUFBTSxRQUFRLFVBQVUsV0FBVyxRQUFRLElBQUksRUFBRSxNQUFNLElBQUk7QUFDM0QsUUFBTSxvQkFBb0IsTUFBTSxVQUFVLENBQUMsU0FBUyxLQUFLLFdBQVcsc0JBQXNCLENBQUM7QUFDM0YsUUFBTSxjQUFjLHNCQUFzQixLQUFLLFFBQVEsTUFBTSxNQUFNLEdBQUcsaUJBQWlCO0FBQ3ZGLFFBQU0sV0FBVyxzQkFBc0IsS0FBSyxDQUFDLElBQUksY0FBYyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDN0YsUUFBTSxPQUFPLElBQUksSUFBSSxPQUFPLElBQUk7QUFFaEMsUUFBTSxPQUErQixDQUFDO0FBQ3RDLFFBQU0sWUFBeUMsQ0FBQztBQUNoRCxRQUFNLGVBQWUsQ0FBQyx1QkFBdUIsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDO0FBRXBFLGFBQVcsQ0FBQyxPQUFPLE9BQU8sS0FBSyxTQUFTLFFBQVEsR0FBRztBQUNqRCxVQUFNLGFBQWEsY0FBYyxPQUFPO0FBQ3hDLFFBQUksWUFBWTtBQUNkLFdBQUssS0FBSyxFQUFFLFFBQVEsWUFBWSxTQUFTLFFBQVEsUUFBUSxDQUFDO0FBQzFELG1CQUFhLEtBQUssdUJBQXVCLFFBQVEsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQ3JFO0FBQUEsSUFDRjtBQUVBLFVBQU0sTUFBTSxNQUFNLFFBQVEsU0FBUyxJQUFJO0FBQ3ZD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
|
package/dist/lib/esm/index.d.mts
CHANGED
|
@@ -7,6 +7,8 @@ export * as 'build' from './build.mjs';
|
|
|
7
7
|
export * as 'bulk-concurrency' from './bulk-concurrency.mjs';
|
|
8
8
|
export * as 'bundlers' from './bundlers/index.mjs';
|
|
9
9
|
export * as 'changelog-grouping' from './changelog-grouping.mjs';
|
|
10
|
+
export * as 'changelog-rewrite-cli' from './changelog-rewrite-cli.mjs';
|
|
11
|
+
export * as 'changelog-rewrite' from './changelog-rewrite.mjs';
|
|
10
12
|
export * as 'check-project-types' from './check-project-types.mjs';
|
|
11
13
|
export * as 'cli-utils' from './cli-utils.mjs';
|
|
12
14
|
export * as 'code-generator' from './code-generator.mjs';
|
package/dist/lib/esm/index.mjs
CHANGED
|
@@ -7,6 +7,8 @@ import * as build from "./build.mjs";
|
|
|
7
7
|
import * as bulk_concurrency from "./bulk-concurrency.mjs";
|
|
8
8
|
import * as bundlers from "./bundlers/index.mjs";
|
|
9
9
|
import * as changelog_grouping from "./changelog-grouping.mjs";
|
|
10
|
+
import * as changelog_rewrite_cli from "./changelog-rewrite-cli.mjs";
|
|
11
|
+
import * as changelog_rewrite from "./changelog-rewrite.mjs";
|
|
10
12
|
import * as check_project_types from "./check-project-types.mjs";
|
|
11
13
|
import * as cli_utils from "./cli-utils.mjs";
|
|
12
14
|
import * as code_generator from "./code-generator.mjs";
|
|
@@ -47,6 +49,8 @@ export {
|
|
|
47
49
|
bulk_concurrency as "bulk-concurrency",
|
|
48
50
|
bundlers,
|
|
49
51
|
changelog_grouping as "changelog-grouping",
|
|
52
|
+
changelog_rewrite as "changelog-rewrite",
|
|
53
|
+
changelog_rewrite_cli as "changelog-rewrite-cli",
|
|
50
54
|
check_project_types as "check-project-types",
|
|
51
55
|
cli_utils as "cli-utils",
|
|
52
56
|
code_generator as "code-generator",
|
|
@@ -83,4 +87,4 @@ export {
|
|
|
83
87
|
validate_dependencies as "validate-dependencies",
|
|
84
88
|
version
|
|
85
89
|
};
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2J1aWxkJyBmcm9tICcuL2J1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdidWxrLWNvbmN1cnJlbmN5JyBmcm9tICcuL2J1bGstY29uY3VycmVuY3kudHMnO1xuZXhwb3J0ICogYXMgJ2J1bmRsZXJzJyBmcm9tICcuL2J1bmRsZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjaGFuZ2Vsb2ctZ3JvdXBpbmcnIGZyb20gJy4vY2hhbmdlbG9nLWdyb3VwaW5nLnRzJztcbmV4cG9ydCAqIGFzICdjaGFuZ2Vsb2ctcmV3cml0ZS1jbGknIGZyb20gJy4vY2hhbmdlbG9nLXJld3JpdGUtY2xpLnRzJztcbmV4cG9ydCAqIGFzICdjaGFuZ2Vsb2ctcmV3cml0ZScgZnJvbSAnLi9jaGFuZ2Vsb2ctcmV3cml0ZS50cyc7XG5leHBvcnQgKiBhcyAnY2hlY2stcHJvamVjdC10eXBlcycgZnJvbSAnLi9jaGVjay1wcm9qZWN0LXR5cGVzLnRzJztcbmV4cG9ydCAqIGFzICdjbGktdXRpbHMnIGZyb20gJy4vY2xpLXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdjb2RlLWdlbmVyYXRvcicgZnJvbSAnLi9jb2RlLWdlbmVyYXRvci50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1jb25maWcnIGZyb20gJy4vY29tbWl0bGludC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zJyBmcm9tICcuL2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zLnRzJztcbmV4cG9ydCAqIGFzICdjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyJyBmcm9tICcuL2NvbW1pdGxpbnQtbGludC1tZC1oZWFkZXIudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXInIGZyb20gJy4vY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlci50cyc7XG5leHBvcnQgKiBhcyAnZG9jcy1zaXRlJyBmcm9tICcuL2RvY3Mtc2l0ZS9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZW52LXRvZ2dsZScgZnJvbSAnLi9lbnYtdG9nZ2xlLnRzJztcbmV4cG9ydCAqIGFzICdleGVjJyBmcm9tICcuL2V4ZWMudHMnO1xuZXhwb3J0ICogYXMgJ2ZvcmJpZGRlbi1wYXR0ZXJucycgZnJvbSAnLi9mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuZXhwb3J0ICogYXMgJ2Zvcm1hdHRlcnMnIGZyb20gJy4vZm9ybWF0dGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZnMnIGZyb20gJy4vZnMudHMnO1xuZXhwb3J0ICogYXMgJ2dhdGUnIGZyb20gJy4vZ2F0ZS50cyc7XG5leHBvcnQgKiBhcyAnZ2l0JyBmcm9tICcuL2dpdC50cyc7XG5leHBvcnQgKiBhcyAnanNvbicgZnJvbSAnLi9qc29uLnRzJztcbmV4cG9ydCAqIGFzICdsaWJyYXJ5LWJ1aWxkJyBmcm9tICcuL2xpYnJhcnktYnVpbGQudHMnO1xuZXhwb3J0ICogYXMgJ2xpbmstY2hlY2stc2tpcCcgZnJvbSAnLi9saW5rLWNoZWNrLXNraXAudHMnO1xuZXhwb3J0ICogYXMgJ2xpbnRlcnMnIGZyb20gJy4vbGludGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnbmFuby1zdGFnZWQtY29uZmlnJyBmcm9tICcuL25hbm8tc3RhZ2VkLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnbnBtLXB1Ymxpc2gnIGZyb20gJy4vbnBtLXB1Ymxpc2gudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1ydW4nIGZyb20gJy4vbnBtLXJ1bi50cyc7XG5leHBvcnQgKiBhcyAnbnBtJyBmcm9tICcuL25wbS50cyc7XG5leHBvcnQgKiBhcyAncGFja2FnZS1sb2NrLWludGVncml0eScgZnJvbSAnLi9wYWNrYWdlLWxvY2staW50ZWdyaXR5LnRzJztcbmV4cG9ydCAqIGFzICdwYWNrYWdlLW1hbmFnZXInIGZyb20gJy4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmV4cG9ydCAqIGFzICdyZWxlYXNlZC1pc3N1ZXMnIGZyb20gJy4vcmVsZWFzZWQtaXNzdWVzLnRzJztcbmV4cG9ydCAqIGFzICdyZXBvLXBhdGhzJyBmcm9tICcuL3JlcG8tcGF0aHMudHMnO1xuZXhwb3J0ICogYXMgJ3Jvb3QnIGZyb20gJy4vcm9vdC50cyc7XG5leHBvcnQgKiBhcyAnc2hhcmVkLWNvbmZpZy1maWxlcycgZnJvbSAnLi9zaGFyZWQtY29uZmlnLWZpbGVzLnRzJztcbmV4cG9ydCAqIGFzICd0ZXN0LXJ1bm5lcnMnIGZyb20gJy4vdGVzdC1ydW5uZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICd1cHN0cmVhbS1zeW5jLWNsaScgZnJvbSAnLi91cHN0cmVhbS1zeW5jLWNsaS50cyc7XG5leHBvcnQgKiBhcyAndXBzdHJlYW0tc3luYycgZnJvbSAnLi91cHN0cmVhbS1zeW5jLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnIGZyb20gJy4vdmFsaWRhdGUtZGVjbGFyYXRpb25zLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZXBlbmRlbmNpZXMnIGZyb20gJy4vdmFsaWRhdGUtZGVwZW5kZW5jaWVzLnRzJztcbmV4cG9ydCAqIGFzICd2ZXJzaW9uJyBmcm9tICcuL3ZlcnNpb24udHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFFQSxZQUFZLFdBQWE7QUFDekIsWUFBWUEsc0JBQXdCO0FBQ3BDLFlBQVksY0FBZ0I7QUFDNUIsWUFBWUMsd0JBQTBCO0FBQ3RDLFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMseUJBQTJCO0FBQ3ZDLFlBQVlDLGVBQWlCO0FBQzdCLFlBQVlDLG9CQUFzQjtBQUNsQyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMsbUNBQXFDO0FBQ2pELFlBQVlDLCtCQUFpQztBQUM3QyxZQUFZQyxrQ0FBb0M7QUFDaEQsWUFBWUMsZUFBaUI7QUFDN0IsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVksVUFBWTtBQUN4QixZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWSxRQUFVO0FBQ3RCLFlBQVksVUFBWTtBQUN4QixZQUFZLFNBQVc7QUFDdkIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZQyxxQkFBdUI7QUFDbkMsWUFBWSxhQUFlO0FBQzNCLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyxpQkFBbUI7QUFDL0IsWUFBWUMsYUFBZTtBQUMzQixZQUFZLFNBQVc7QUFDdkIsWUFBWUMsNEJBQThCO0FBQzFDLFlBQVlDLHFCQUF1QjtBQUNuQyxZQUFZQyxxQkFBdUI7QUFDbkMsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVksVUFBWTtBQUN4QixZQUFZQyx5QkFBMkI7QUFDdkMsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVlDLHVCQUF5QjtBQUNyQyxZQUFZQyxtQkFBcUI7QUFDakMsWUFBWUMsMkJBQTZCO0FBQ3pDLFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZLGFBQWU7IiwKICAibmFtZXMiOiBbImJ1bGstY29uY3VycmVuY3kiLCAiY2hhbmdlbG9nLWdyb3VwaW5nIiwgImNoYW5nZWxvZy1yZXdyaXRlLWNsaSIsICJjaGFuZ2Vsb2ctcmV3cml0ZSIsICJjaGVjay1wcm9qZWN0LXR5cGVzIiwgImNsaS11dGlscyIsICJjb2RlLWdlbmVyYXRvciIsICJjb21taXRsaW50LWNvbmZpZyIsICJjb21taXRsaW50LWZvcmJpZGRlbi1wYXR0ZXJucyIsICJjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyIiwgImNvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXIiLCAiZG9jcy1zaXRlIiwgImVudi10b2dnbGUiLCAiZm9yYmlkZGVuLXBhdHRlcm5zIiwgImxpYnJhcnktYnVpbGQiLCAibGluay1jaGVjay1za2lwIiwgIm5hbm8tc3RhZ2VkLWNvbmZpZyIsICJucG0tcHVibGlzaCIsICJucG0tcnVuIiwgInBhY2thZ2UtbG9jay1pbnRlZ3JpdHkiLCAicGFja2FnZS1tYW5hZ2VyIiwgInJlbGVhc2VkLWlzc3VlcyIsICJyZXBvLXBhdGhzIiwgInNoYXJlZC1jb25maWctZmlsZXMiLCAidGVzdC1ydW5uZXJzIiwgInVwc3RyZWFtLXN5bmMtY2xpIiwgInVwc3RyZWFtLXN5bmMiLCAidmFsaWRhdGUtZGVjbGFyYXRpb25zIiwgInZhbGlkYXRlLWRlcGVuZGVuY2llcyJdCn0K
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* Git operations such as tagging and pushing.
|
|
10
10
|
*/
|
|
11
11
|
import { parseArgs } from 'node:util';
|
|
12
|
-
import type { ChangelogStyle } from './changelog-grouping.mjs';
|
|
12
|
+
import type { ChangelogCommitEntry, ChangelogStyle } from './changelog-grouping.mjs';
|
|
13
13
|
/**
|
|
14
14
|
* Options for {@link addUpdatedFilesToGit}.
|
|
15
15
|
*/
|
|
@@ -427,6 +427,14 @@ export declare function parseVersionArguments($arguments: string[]): ParsedVersi
|
|
|
427
427
|
* @returns A {@link Promise} that resolves when the release has been published.
|
|
428
428
|
*/
|
|
429
429
|
export declare function publishGitHubRelease(newVersion: string, options?: PublishGitHubReleaseOptions): Promise<void>;
|
|
430
|
+
/**
|
|
431
|
+
* Reads one first-parent commit into the parts both changelog styles render: the line {@link toChangelogEntry}
|
|
432
|
+
* describes, the issue references it does not already show, and what else the body says.
|
|
433
|
+
*
|
|
434
|
+
* @param commitMessage - The full commit message.
|
|
435
|
+
* @returns The parts, with bare URLs in the entry and the detail lines autolinked.
|
|
436
|
+
*/
|
|
437
|
+
export declare function toChangelogCommitEntry(commitMessage: string): ChangelogCommitEntry;
|
|
430
438
|
/**
|
|
431
439
|
* Maps the values `parseArgs` reports for {@link VERSION_ARGUMENT_OPTIONS} onto {@link UpdateVersionOptions}.
|
|
432
440
|
*
|