@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.
- package/README.md +18 -0
- package/bin/rewrite-changelog.mjs +8 -0
- package/dist/lib/cjs/changelog-grouping.cjs +153 -0
- package/dist/lib/cjs/changelog-grouping.d.cts +70 -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 +10 -1
- package/dist/lib/cjs/index.d.cts +3 -0
- package/dist/lib/cjs/linters/eslint-config.cjs +4 -1
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +3 -1
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +4 -1
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +1 -0
- package/dist/lib/cjs/linters/eslint-rules/prefer-spread.cjs +114 -0
- package/dist/lib/cjs/linters/eslint-rules/prefer-spread.d.cts +12 -0
- package/dist/lib/cjs/version.cjs +57 -22
- package/dist/lib/cjs/version.d.cts +29 -0
- package/dist/lib/esm/changelog-grouping.d.mts +70 -0
- package/dist/lib/esm/changelog-grouping.mjs +126 -0
- 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 +3 -0
- package/dist/lib/esm/index.mjs +7 -1
- package/dist/lib/esm/linters/eslint-config.mjs +4 -1
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +3 -1
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +1 -0
- package/dist/lib/esm/linters/eslint-rules/index.mjs +3 -1
- package/dist/lib/esm/linters/eslint-rules/prefer-spread.d.mts +12 -0
- package/dist/lib/esm/linters/eslint-rules/prefer-spread.mjs +80 -0
- package/dist/lib/esm/version.d.mts +29 -0
- package/dist/lib/esm/version.mjs +59 -22
- package/linters/eslint-rules/prefer-spread/package.json +6 -0
- package/package.json +2 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
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;
|
|
@@ -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
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
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
|
+
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';
|
|
9
12
|
export * as 'check-project-types' from './check-project-types.mjs';
|
|
10
13
|
export * as 'cli-utils' from './cli-utils.mjs';
|
|
11
14
|
export * as 'code-generator' from './code-generator.mjs';
|
package/dist/lib/esm/index.mjs
CHANGED
|
@@ -6,6 +6,9 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
6
6
|
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
|
+
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";
|
|
9
12
|
import * as check_project_types from "./check-project-types.mjs";
|
|
10
13
|
import * as cli_utils from "./cli-utils.mjs";
|
|
11
14
|
import * as code_generator from "./code-generator.mjs";
|
|
@@ -45,6 +48,9 @@ export {
|
|
|
45
48
|
build,
|
|
46
49
|
bulk_concurrency as "bulk-concurrency",
|
|
47
50
|
bundlers,
|
|
51
|
+
changelog_grouping as "changelog-grouping",
|
|
52
|
+
changelog_rewrite as "changelog-rewrite",
|
|
53
|
+
changelog_rewrite_cli as "changelog-rewrite-cli",
|
|
48
54
|
check_project_types as "check-project-types",
|
|
49
55
|
cli_utils as "cli-utils",
|
|
50
56
|
code_generator as "code-generator",
|
|
@@ -81,4 +87,4 @@ export {
|
|
|
81
87
|
validate_dependencies as "validate-dependencies",
|
|
82
88
|
version
|
|
83
89
|
};
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2J1aWxkJyBmcm9tICcuL2J1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdidWxrLWNvbmN1cnJlbmN5JyBmcm9tICcuL2J1bGstY29uY3VycmVuY3kudHMnO1xuZXhwb3J0ICogYXMgJ2J1bmRsZXJzJyBmcm9tICcuL2J1bmRsZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjaGFuZ2Vsb2ctZ3JvdXBpbmcnIGZyb20gJy4vY2hhbmdlbG9nLWdyb3VwaW5nLnRzJztcbmV4cG9ydCAqIGFzICdjaGFuZ2Vsb2ctcmV3cml0ZS1jbGknIGZyb20gJy4vY2hhbmdlbG9nLXJld3JpdGUtY2xpLnRzJztcbmV4cG9ydCAqIGFzICdjaGFuZ2Vsb2ctcmV3cml0ZScgZnJvbSAnLi9jaGFuZ2Vsb2ctcmV3cml0ZS50cyc7XG5leHBvcnQgKiBhcyAnY2hlY2stcHJvamVjdC10eXBlcycgZnJvbSAnLi9jaGVjay1wcm9qZWN0LXR5cGVzLnRzJztcbmV4cG9ydCAqIGFzICdjbGktdXRpbHMnIGZyb20gJy4vY2xpLXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdjb2RlLWdlbmVyYXRvcicgZnJvbSAnLi9jb2RlLWdlbmVyYXRvci50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1jb25maWcnIGZyb20gJy4vY29tbWl0bGludC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zJyBmcm9tICcuL2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zLnRzJztcbmV4cG9ydCAqIGFzICdjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyJyBmcm9tICcuL2NvbW1pdGxpbnQtbGludC1tZC1oZWFkZXIudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXInIGZyb20gJy4vY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlci50cyc7XG5leHBvcnQgKiBhcyAnZG9jcy1zaXRlJyBmcm9tICcuL2RvY3Mtc2l0ZS9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZW52LXRvZ2dsZScgZnJvbSAnLi9lbnYtdG9nZ2xlLnRzJztcbmV4cG9ydCAqIGFzICdleGVjJyBmcm9tICcuL2V4ZWMudHMnO1xuZXhwb3J0ICogYXMgJ2ZvcmJpZGRlbi1wYXR0ZXJucycgZnJvbSAnLi9mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuZXhwb3J0ICogYXMgJ2Zvcm1hdHRlcnMnIGZyb20gJy4vZm9ybWF0dGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnZnMnIGZyb20gJy4vZnMudHMnO1xuZXhwb3J0ICogYXMgJ2dhdGUnIGZyb20gJy4vZ2F0ZS50cyc7XG5leHBvcnQgKiBhcyAnZ2l0JyBmcm9tICcuL2dpdC50cyc7XG5leHBvcnQgKiBhcyAnanNvbicgZnJvbSAnLi9qc29uLnRzJztcbmV4cG9ydCAqIGFzICdsaWJyYXJ5LWJ1aWxkJyBmcm9tICcuL2xpYnJhcnktYnVpbGQudHMnO1xuZXhwb3J0ICogYXMgJ2xpbmstY2hlY2stc2tpcCcgZnJvbSAnLi9saW5rLWNoZWNrLXNraXAudHMnO1xuZXhwb3J0ICogYXMgJ2xpbnRlcnMnIGZyb20gJy4vbGludGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnbmFuby1zdGFnZWQtY29uZmlnJyBmcm9tICcuL25hbm8tc3RhZ2VkLWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnbnBtLXB1Ymxpc2gnIGZyb20gJy4vbnBtLXB1Ymxpc2gudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1ydW4nIGZyb20gJy4vbnBtLXJ1bi50cyc7XG5leHBvcnQgKiBhcyAnbnBtJyBmcm9tICcuL25wbS50cyc7XG5leHBvcnQgKiBhcyAncGFja2FnZS1sb2NrLWludGVncml0eScgZnJvbSAnLi9wYWNrYWdlLWxvY2staW50ZWdyaXR5LnRzJztcbmV4cG9ydCAqIGFzICdwYWNrYWdlLW1hbmFnZXInIGZyb20gJy4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmV4cG9ydCAqIGFzICdyZWxlYXNlZC1pc3N1ZXMnIGZyb20gJy4vcmVsZWFzZWQtaXNzdWVzLnRzJztcbmV4cG9ydCAqIGFzICdyZXBvLXBhdGhzJyBmcm9tICcuL3JlcG8tcGF0aHMudHMnO1xuZXhwb3J0ICogYXMgJ3Jvb3QnIGZyb20gJy4vcm9vdC50cyc7XG5leHBvcnQgKiBhcyAnc2hhcmVkLWNvbmZpZy1maWxlcycgZnJvbSAnLi9zaGFyZWQtY29uZmlnLWZpbGVzLnRzJztcbmV4cG9ydCAqIGFzICd0ZXN0LXJ1bm5lcnMnIGZyb20gJy4vdGVzdC1ydW5uZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICd1cHN0cmVhbS1zeW5jLWNsaScgZnJvbSAnLi91cHN0cmVhbS1zeW5jLWNsaS50cyc7XG5leHBvcnQgKiBhcyAndXBzdHJlYW0tc3luYycgZnJvbSAnLi91cHN0cmVhbS1zeW5jLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnIGZyb20gJy4vdmFsaWRhdGUtZGVjbGFyYXRpb25zLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0ZS1kZXBlbmRlbmNpZXMnIGZyb20gJy4vdmFsaWRhdGUtZGVwZW5kZW5jaWVzLnRzJztcbmV4cG9ydCAqIGFzICd2ZXJzaW9uJyBmcm9tICcuL3ZlcnNpb24udHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFFQSxZQUFZLFdBQWE7QUFDekIsWUFBWUEsc0JBQXdCO0FBQ3BDLFlBQVksY0FBZ0I7QUFDNUIsWUFBWUMsd0JBQTBCO0FBQ3RDLFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMseUJBQTJCO0FBQ3ZDLFlBQVlDLGVBQWlCO0FBQzdCLFlBQVlDLG9CQUFzQjtBQUNsQyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMsbUNBQXFDO0FBQ2pELFlBQVlDLCtCQUFpQztBQUM3QyxZQUFZQyxrQ0FBb0M7QUFDaEQsWUFBWUMsZUFBaUI7QUFDN0IsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVksVUFBWTtBQUN4QixZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWSxRQUFVO0FBQ3RCLFlBQVksVUFBWTtBQUN4QixZQUFZLFNBQVc7QUFDdkIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZQyxxQkFBdUI7QUFDbkMsWUFBWSxhQUFlO0FBQzNCLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyxpQkFBbUI7QUFDL0IsWUFBWUMsYUFBZTtBQUMzQixZQUFZLFNBQVc7QUFDdkIsWUFBWUMsNEJBQThCO0FBQzFDLFlBQVlDLHFCQUF1QjtBQUNuQyxZQUFZQyxxQkFBdUI7QUFDbkMsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVksVUFBWTtBQUN4QixZQUFZQyx5QkFBMkI7QUFDdkMsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVlDLHVCQUF5QjtBQUNyQyxZQUFZQyxtQkFBcUI7QUFDakMsWUFBWUMsMkJBQTZCO0FBQ3pDLFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZLGFBQWU7IiwKICAibmFtZXMiOiBbImJ1bGstY29uY3VycmVuY3kiLCAiY2hhbmdlbG9nLWdyb3VwaW5nIiwgImNoYW5nZWxvZy1yZXdyaXRlLWNsaSIsICJjaGFuZ2Vsb2ctcmV3cml0ZSIsICJjaGVjay1wcm9qZWN0LXR5cGVzIiwgImNsaS11dGlscyIsICJjb2RlLWdlbmVyYXRvciIsICJjb21taXRsaW50LWNvbmZpZyIsICJjb21taXRsaW50LWZvcmJpZGRlbi1wYXR0ZXJucyIsICJjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyIiwgImNvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXIiLCAiZG9jcy1zaXRlIiwgImVudi10b2dnbGUiLCAiZm9yYmlkZGVuLXBhdHRlcm5zIiwgImxpYnJhcnktYnVpbGQiLCAibGluay1jaGVjay1za2lwIiwgIm5hbm8tc3RhZ2VkLWNvbmZpZyIsICJucG0tcHVibGlzaCIsICJucG0tcnVuIiwgInBhY2thZ2UtbG9jay1pbnRlZ3JpdHkiLCAicGFja2FnZS1tYW5hZ2VyIiwgInJlbGVhc2VkLWlzc3VlcyIsICJyZXBvLXBhdGhzIiwgInNoYXJlZC1jb25maWctZmlsZXMiLCAidGVzdC1ydW5uZXJzIiwgInVwc3RyZWFtLXN5bmMtY2xpIiwgInVwc3RyZWFtLXN5bmMiLCAidmFsaWRhdGUtZGVjbGFyYXRpb25zIiwgInZhbGlkYXRlLWRlcGVuZGVuY2llcyJdCn0K
|