@mnaoumov/typescript-dev-toolkit 6.0.2 → 6.2.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 +36 -0
- package/dist/lib/cjs/changelog-grouping.cjs +132 -0
- package/dist/lib/cjs/changelog-grouping.d.cts +59 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -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 +111 -23
- package/dist/lib/cjs/version.d.cts +41 -0
- package/dist/lib/esm/changelog-grouping.d.mts +59 -0
- package/dist/lib/esm/changelog-grouping.mjs +106 -0
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -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 +41 -0
- package/dist/lib/esm/version.mjs +114 -23
- package/linters/eslint-rules/prefer-spread/package.json +6 -0
- package/package.json +21 -21
|
@@ -9,6 +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.cjs';
|
|
12
13
|
/**
|
|
13
14
|
* Options for {@link addUpdatedFilesToGit}.
|
|
14
15
|
*/
|
|
@@ -53,6 +54,13 @@ export interface PublishGitHubReleaseOptions {
|
|
|
53
54
|
* @default `true`
|
|
54
55
|
*/
|
|
55
56
|
readonly shouldCloseReleasedIssues?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Whether to require every asset to exist, require an existing remote tag, and verify the published
|
|
59
|
+
* non-draft release and its uploaded assets before closing issues.
|
|
60
|
+
*
|
|
61
|
+
* @default `false`
|
|
62
|
+
*/
|
|
63
|
+
readonly shouldVerifyRelease?: boolean;
|
|
56
64
|
}
|
|
57
65
|
/**
|
|
58
66
|
* Options for {@link updateChangelog}.
|
|
@@ -69,6 +77,16 @@ export interface UpdateChangelogOptions {
|
|
|
69
77
|
* @default the first-parent commit subjects since the previous version
|
|
70
78
|
*/
|
|
71
79
|
readonly changelogFilePath?: string | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* How the section generated from the commit messages is laid out: `grouped` sorts the entries under plain-language
|
|
82
|
+
* headings and counts the maintenance commits instead of listing them, `commits` writes one bullet per first-parent
|
|
83
|
+
* commit. See {@link ChangelogStyle}.
|
|
84
|
+
*
|
|
85
|
+
* Ignored when {@link changelogFilePath} is set.
|
|
86
|
+
*
|
|
87
|
+
* @default `'grouped'`
|
|
88
|
+
*/
|
|
89
|
+
readonly changelogStyle?: ChangelogStyle | undefined;
|
|
72
90
|
/**
|
|
73
91
|
* Whether to open the generated changelog in the editor for an interactive review. When `false`,
|
|
74
92
|
* the changelog is still generated from commit messages, but it is not opened in the editor for
|
|
@@ -95,6 +113,12 @@ export interface UpdateVersionOptions {
|
|
|
95
113
|
* @default the first-parent commit subjects since the previous version
|
|
96
114
|
*/
|
|
97
115
|
readonly changelogFilePath?: string | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* How the section generated from the commit messages is laid out. See {@link UpdateChangelogOptions.changelogStyle}.
|
|
118
|
+
*
|
|
119
|
+
* @default `'grouped'`
|
|
120
|
+
*/
|
|
121
|
+
readonly changelogStyle?: ChangelogStyle | undefined;
|
|
98
122
|
/**
|
|
99
123
|
* Returns the files to attach to the GitHub release. See {@link PublishGitHubReleaseOptions.getReleaseAssetPaths}.
|
|
100
124
|
*/
|
|
@@ -133,6 +157,16 @@ export interface UpdateVersionOptions {
|
|
|
133
157
|
* @default `true`
|
|
134
158
|
*/
|
|
135
159
|
readonly shouldEditChangelog?: boolean;
|
|
160
|
+
/**
|
|
161
|
+
* Whether to publish and verify the GitHub release before pushing the version commit to the branch.
|
|
162
|
+
* Preparation and asset validation happen before any push. Only the release tag is pushed first;
|
|
163
|
+
* a failed preparation, publication or verification leaves the remote branch unchanged.
|
|
164
|
+
* Uses the `origin` remote and pushes the verified commit to the original branch without force.
|
|
165
|
+
* Ignored when {@link shouldRelease} is `false`.
|
|
166
|
+
*
|
|
167
|
+
* @default `false`
|
|
168
|
+
*/
|
|
169
|
+
readonly shouldPublishBeforePush?: boolean;
|
|
136
170
|
/**
|
|
137
171
|
* Whether to publish the release. When `false`, all local steps are executed (version bump,
|
|
138
172
|
* changelog, commit, tag), but the changes are not pushed and no GitHub release is published.
|
|
@@ -317,6 +351,9 @@ export declare const VERSION_ARGUMENT_OPTIONS: {
|
|
|
317
351
|
readonly 'changelog-file': {
|
|
318
352
|
readonly type: "string";
|
|
319
353
|
};
|
|
354
|
+
readonly 'changelog-style': {
|
|
355
|
+
readonly type: "string";
|
|
356
|
+
};
|
|
320
357
|
readonly 'no-build': {
|
|
321
358
|
readonly type: "boolean";
|
|
322
359
|
};
|
|
@@ -364,6 +401,7 @@ export declare function isPreRelease(version: string): boolean;
|
|
|
364
401
|
* value instead and has no default. Recognized flags:
|
|
365
402
|
* - `--changelog-file=<path>` — use this file's contents as the new version's changelog section instead of
|
|
366
403
|
* the commit-derived bullets, and skip the interactive review entirely.
|
|
404
|
+
* - `--changelog-style=<grouped|commits>` — how the commit-derived section is laid out (default `grouped`).
|
|
367
405
|
* - `--no-build` — skip the build step (only safe when the build output already matches the current code).
|
|
368
406
|
* - `--no-changelog-editing` — generate the changelog without opening it for manual review.
|
|
369
407
|
* - `--no-checks` — skip the clean-repo check, format, spellcheck, lint, over-exposure analysis, and tests (the build still runs).
|
|
@@ -431,6 +469,9 @@ export declare function updateChangelog(newVersion: string, options?: UpdateChan
|
|
|
431
469
|
* 11. Prepares and publishes a GitHub release.
|
|
432
470
|
* 12. Closes the issues the release carries, with a link to it.
|
|
433
471
|
*
|
|
472
|
+
* With {@link UpdateVersionOptions.shouldPublishBeforePush}, preparation and asset validation precede
|
|
473
|
+
* the tag push. Publication and verification then precede the branch push, and issue closing remains last.
|
|
474
|
+
*
|
|
434
475
|
* @param versionUpdateType - The type of version update to perform (major, minor, patch, premajor, preminor, prepatch, prerelease, or x.y.z[-suffix]).
|
|
435
476
|
* @param options - The {@link UpdateVersionOptions} controlling the release behavior.
|
|
436
477
|
* @returns A {@link Promise} that resolves when the version update is complete.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Groups the commit-derived entries of a new changelog section into plain-language sections, so the release notes a
|
|
6
|
+
* release writes with nobody reviewing them can be scanned rather than read commit by commit.
|
|
7
|
+
*
|
|
8
|
+
* The input is still the first-parent commit history, so this is a deterministic transformation of what the author
|
|
9
|
+
* already wrote: it sorts entries by their Conventional-Commits type, leaves out the commit types that do not change
|
|
10
|
+
* what a user gets, merges entries that say the same thing, and swaps a `re #<n>` subject for the issue title its body
|
|
11
|
+
* carries. Prose a human (or an agent) writes still goes in through `--changelog-file`.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* How the generated changelog section of a release is laid out.
|
|
15
|
+
*
|
|
16
|
+
* - `grouped` — a one-line summary, then the entries under `### Breaking changes`, `### New`, `### Fixed`,
|
|
17
|
+
* `### Improved`, `### Documentation` and `### Other changes`, with maintenance commits counted rather than listed.
|
|
18
|
+
* - `commits` — one bullet per first-parent commit, in history order, as every release wrote before `grouped` existed.
|
|
19
|
+
*/
|
|
20
|
+
export type ChangelogStyle = 'commits' | 'grouped';
|
|
21
|
+
/**
|
|
22
|
+
* Every {@link ChangelogStyle}, in the order the `--changelog-style` error lists them.
|
|
23
|
+
*/
|
|
24
|
+
export declare const CHANGELOG_STYLES: readonly ChangelogStyle[];
|
|
25
|
+
/**
|
|
26
|
+
* One first-parent commit, as {@link renderGroupedChangelogSection} takes it.
|
|
27
|
+
*/
|
|
28
|
+
export interface ChangelogCommitEntry {
|
|
29
|
+
/**
|
|
30
|
+
* The body lines that are neither the entry itself nor an issue reference line nor a breaking-change footer, in
|
|
31
|
+
* order. The first of them is the issue title an issue-closing `re #<n>` merge carries.
|
|
32
|
+
*/
|
|
33
|
+
readonly detailLines: readonly string[];
|
|
34
|
+
/**
|
|
35
|
+
* The changelog line the commit produces before grouping: its subject, or the body line lifted onto a default merge
|
|
36
|
+
* subject.
|
|
37
|
+
*/
|
|
38
|
+
readonly entry: string;
|
|
39
|
+
/**
|
|
40
|
+
* Whether the commit carries a `BREAKING CHANGE:` footer. The `!` marker is read off {@link entry} itself.
|
|
41
|
+
*/
|
|
42
|
+
readonly hasBreakingFooter: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* The issue references the body names that {@link entry} does not already show, rendered as the line shows them.
|
|
45
|
+
*/
|
|
46
|
+
readonly references: readonly string[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The commit types that change nothing a user of the release gets, so the grouped section counts them instead of
|
|
50
|
+
* listing them. A commit of one of these types that is marked breaking is still listed, under breaking changes.
|
|
51
|
+
*/
|
|
52
|
+
export declare const MAINTENANCE_COMMIT_TYPES: ReadonlySet<string>;
|
|
53
|
+
/**
|
|
54
|
+
* Renders the body of a new changelog section in the {@link ChangelogStyle} `grouped` layout.
|
|
55
|
+
*
|
|
56
|
+
* @param entries - The first-parent commits since the previous release, in `git log` order.
|
|
57
|
+
* @returns The section body, without its `## <version>` heading and without a trailing newline.
|
|
58
|
+
*/
|
|
59
|
+
export declare function renderGroupedChangelogSection(entries: readonly ChangelogCommitEntry[]): string;
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
+
const CHANGELOG_STYLES = ["grouped", "commits"];
|
|
7
|
+
const MAINTENANCE_COMMIT_TYPES = /* @__PURE__ */ new Set(["build", "chore", "ci", "refactor", "style", "test"]);
|
|
8
|
+
const BREAKING_SECTION = { heading: "Breaking changes", plural: "breaking changes", singular: "breaking change" };
|
|
9
|
+
const NEW_SECTION = { heading: "New", plural: "new features", singular: "new feature" };
|
|
10
|
+
const FIXED_SECTION = { heading: "Fixed", plural: "fixes", singular: "fix" };
|
|
11
|
+
const IMPROVED_SECTION = { heading: "Improved", plural: "improvements", singular: "improvement" };
|
|
12
|
+
const DOCUMENTATION_SECTION = { heading: "Documentation", plural: "documentation changes", singular: "documentation change" };
|
|
13
|
+
const OTHER_SECTION = { heading: "Other changes", plural: "other changes", singular: "other change" };
|
|
14
|
+
const SECTIONS = [BREAKING_SECTION, NEW_SECTION, FIXED_SECTION, IMPROVED_SECTION, DOCUMENTATION_SECTION, OTHER_SECTION];
|
|
15
|
+
const SECTIONS_BY_TYPE = /* @__PURE__ */ new Map([
|
|
16
|
+
["docs", DOCUMENTATION_SECTION],
|
|
17
|
+
["feat", NEW_SECTION],
|
|
18
|
+
["fix", FIXED_SECTION],
|
|
19
|
+
["perf", IMPROVED_SECTION]
|
|
20
|
+
]);
|
|
21
|
+
const CONVENTIONAL_ENTRY_REG_EXP = /^(?<type>[a-z]+)(?:\((?<scope>[^()]*)\))?(?<breaking>!)?:\s+(?<description>\S.*)$/i;
|
|
22
|
+
const ISSUE_ONLY_DESCRIPTION_REG_EXP = /^re (?<issue>#\d+)$/i;
|
|
23
|
+
function renderGroupedChangelogSection(entries) {
|
|
24
|
+
const sectionEntries = /* @__PURE__ */ new Map();
|
|
25
|
+
let maintenanceCount = 0;
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
const classified = classifyEntry(entry);
|
|
28
|
+
if (!classified) {
|
|
29
|
+
maintenanceCount++;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const list = sectionEntries.get(classified.section) ?? [];
|
|
33
|
+
sectionEntries.set(classified.section, list);
|
|
34
|
+
const existing = list.find((sectionEntry) => sectionEntry.text === classified.text);
|
|
35
|
+
if (!existing) {
|
|
36
|
+
list.push({ references: [...classified.references], text: classified.text });
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
existing.references = [.../* @__PURE__ */ new Set([...existing.references, ...classified.references])];
|
|
40
|
+
}
|
|
41
|
+
const blocks = [toSummaryLine(sectionEntries, maintenanceCount)];
|
|
42
|
+
for (const section of SECTIONS) {
|
|
43
|
+
const list = sectionEntries.get(section);
|
|
44
|
+
if (!list) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
blocks.push(`### ${section.heading}`, list.map((sectionEntry) => `- ${toEntryLine(sectionEntry)}`).join("\n"));
|
|
48
|
+
}
|
|
49
|
+
return blocks.join("\n\n");
|
|
50
|
+
}
|
|
51
|
+
function classifyEntry(entry) {
|
|
52
|
+
const groups = CONVENTIONAL_ENTRY_REG_EXP.exec(entry.entry)?.groups;
|
|
53
|
+
if (!groups) {
|
|
54
|
+
return { references: entry.references, section: entry.hasBreakingFooter ? BREAKING_SECTION : OTHER_SECTION, text: entry.entry };
|
|
55
|
+
}
|
|
56
|
+
const type = String(groups["type"]).toLowerCase();
|
|
57
|
+
const isBreaking = groups["breaking"] !== void 0 || entry.hasBreakingFooter;
|
|
58
|
+
const section = isBreaking ? BREAKING_SECTION : toTypeSection(type);
|
|
59
|
+
if (!section) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const description = String(groups["description"]);
|
|
63
|
+
const issue = ISSUE_ONLY_DESCRIPTION_REG_EXP.exec(description)?.groups?.["issue"];
|
|
64
|
+
const issueTitle = entry.detailLines[0];
|
|
65
|
+
const isIssueTitleUsed = issue !== void 0 && issueTitle !== void 0;
|
|
66
|
+
const text = isIssueTitleUsed ? issueTitle : description;
|
|
67
|
+
const references = isIssueTitleUsed ? [issue, ...entry.references] : entry.references;
|
|
68
|
+
const scope = groups["scope"];
|
|
69
|
+
return {
|
|
70
|
+
references,
|
|
71
|
+
section,
|
|
72
|
+
text: scope ? `**${scope}:** ${text}` : text
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function countPhrase(count, section) {
|
|
76
|
+
return `${String(count)} ${count === 1 ? section.singular : section.plural}`;
|
|
77
|
+
}
|
|
78
|
+
function joinPhrases(phrases) {
|
|
79
|
+
const last = phrases.slice(-1).join("");
|
|
80
|
+
return phrases.length === 1 ? last : `${phrases.slice(0, -1).join(", ")} and ${last}`;
|
|
81
|
+
}
|
|
82
|
+
function toEntryLine(sectionEntry) {
|
|
83
|
+
return sectionEntry.references.length === 0 ? sectionEntry.text : `${sectionEntry.text} (${sectionEntry.references.join(", ")})`;
|
|
84
|
+
}
|
|
85
|
+
function toSummaryLine(sectionEntries, maintenanceCount) {
|
|
86
|
+
const phrases = SECTIONS.map((section) => ({ count: sectionEntries.get(section)?.length ?? 0, section })).filter(({ count }) => count > 0).map(({ count, section }) => countPhrase(count, section));
|
|
87
|
+
const isOne = maintenanceCount === 1;
|
|
88
|
+
const maintenance = maintenanceCount === 0 ? "" : ` ${String(maintenanceCount)} maintenance ${isOne ? "commit" : "commits"} (tests, build, CI, refactoring, dependencies) ${isOne ? "is" : "are"} not listed.`;
|
|
89
|
+
if (phrases.length > 0) {
|
|
90
|
+
return `This release has ${joinPhrases(phrases)}.${maintenance}`;
|
|
91
|
+
}
|
|
92
|
+
return maintenanceCount === 0 ? "This release has no changes." : `This release has maintenance changes only.${maintenance}`;
|
|
93
|
+
}
|
|
94
|
+
function toTypeSection(type) {
|
|
95
|
+
const section = SECTIONS_BY_TYPE.get(type);
|
|
96
|
+
if (section) {
|
|
97
|
+
return section;
|
|
98
|
+
}
|
|
99
|
+
return MAINTENANCE_COMMIT_TYPES.has(type) ? null : OTHER_SECTION;
|
|
100
|
+
}
|
|
101
|
+
export {
|
|
102
|
+
CHANGELOG_STYLES,
|
|
103
|
+
MAINTENANCE_COMMIT_TYPES,
|
|
104
|
+
renderGroupedChangelogSection
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NoYW5nZWxvZy1ncm91cGluZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEdyb3VwcyB0aGUgY29tbWl0LWRlcml2ZWQgZW50cmllcyBvZiBhIG5ldyBjaGFuZ2Vsb2cgc2VjdGlvbiBpbnRvIHBsYWluLWxhbmd1YWdlIHNlY3Rpb25zLCBzbyB0aGUgcmVsZWFzZSBub3RlcyBhXG4gKiByZWxlYXNlIHdyaXRlcyB3aXRoIG5vYm9keSByZXZpZXdpbmcgdGhlbSBjYW4gYmUgc2Nhbm5lZCByYXRoZXIgdGhhbiByZWFkIGNvbW1pdCBieSBjb21taXQuXG4gKlxuICogVGhlIGlucHV0IGlzIHN0aWxsIHRoZSBmaXJzdC1wYXJlbnQgY29tbWl0IGhpc3RvcnksIHNvIHRoaXMgaXMgYSBkZXRlcm1pbmlzdGljIHRyYW5zZm9ybWF0aW9uIG9mIHdoYXQgdGhlIGF1dGhvclxuICogYWxyZWFkeSB3cm90ZTogaXQgc29ydHMgZW50cmllcyBieSB0aGVpciBDb252ZW50aW9uYWwtQ29tbWl0cyB0eXBlLCBsZWF2ZXMgb3V0IHRoZSBjb21taXQgdHlwZXMgdGhhdCBkbyBub3QgY2hhbmdlXG4gKiB3aGF0IGEgdXNlciBnZXRzLCBtZXJnZXMgZW50cmllcyB0aGF0IHNheSB0aGUgc2FtZSB0aGluZywgYW5kIHN3YXBzIGEgYHJlICM8bj5gIHN1YmplY3QgZm9yIHRoZSBpc3N1ZSB0aXRsZSBpdHMgYm9keVxuICogY2Fycmllcy4gUHJvc2UgYSBodW1hbiAob3IgYW4gYWdlbnQpIHdyaXRlcyBzdGlsbCBnb2VzIGluIHRocm91Z2ggYC0tY2hhbmdlbG9nLWZpbGVgLlxuICovXG5cbi8qKlxuICogSG93IHRoZSBnZW5lcmF0ZWQgY2hhbmdlbG9nIHNlY3Rpb24gb2YgYSByZWxlYXNlIGlzIGxhaWQgb3V0LlxuICpcbiAqIC0gYGdyb3VwZWRgIFx1MjAxNCBhIG9uZS1saW5lIHN1bW1hcnksIHRoZW4gdGhlIGVudHJpZXMgdW5kZXIgYCMjIyBCcmVha2luZyBjaGFuZ2VzYCwgYCMjIyBOZXdgLCBgIyMjIEZpeGVkYCxcbiAqICAgYCMjIyBJbXByb3ZlZGAsIGAjIyMgRG9jdW1lbnRhdGlvbmAgYW5kIGAjIyMgT3RoZXIgY2hhbmdlc2AsIHdpdGggbWFpbnRlbmFuY2UgY29tbWl0cyBjb3VudGVkIHJhdGhlciB0aGFuIGxpc3RlZC5cbiAqIC0gYGNvbW1pdHNgIFx1MjAxNCBvbmUgYnVsbGV0IHBlciBmaXJzdC1wYXJlbnQgY29tbWl0LCBpbiBoaXN0b3J5IG9yZGVyLCBhcyBldmVyeSByZWxlYXNlIHdyb3RlIGJlZm9yZSBgZ3JvdXBlZGAgZXhpc3RlZC5cbiAqL1xuZXhwb3J0IHR5cGUgQ2hhbmdlbG9nU3R5bGUgPSAnY29tbWl0cycgfCAnZ3JvdXBlZCc7XG5cbi8qKlxuICogRXZlcnkge0BsaW5rIENoYW5nZWxvZ1N0eWxlfSwgaW4gdGhlIG9yZGVyIHRoZSBgLS1jaGFuZ2Vsb2ctc3R5bGVgIGVycm9yIGxpc3RzIHRoZW0uXG4gKi9cbmV4cG9ydCBjb25zdCBDSEFOR0VMT0dfU1RZTEVTOiByZWFkb25seSBDaGFuZ2Vsb2dTdHlsZVtdID0gWydncm91cGVkJywgJ2NvbW1pdHMnXTtcblxuLyoqXG4gKiBPbmUgZmlyc3QtcGFyZW50IGNvbW1pdCwgYXMge0BsaW5rIHJlbmRlckdyb3VwZWRDaGFuZ2Vsb2dTZWN0aW9ufSB0YWtlcyBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2Vsb2dDb21taXRFbnRyeSB7XG4gIC8qKlxuICAgKiBUaGUgYm9keSBsaW5lcyB0aGF0IGFyZSBuZWl0aGVyIHRoZSBlbnRyeSBpdHNlbGYgbm9yIGFuIGlzc3VlIHJlZmVyZW5jZSBsaW5lIG5vciBhIGJyZWFraW5nLWNoYW5nZSBmb290ZXIsIGluXG4gICAqIG9yZGVyLiBUaGUgZmlyc3Qgb2YgdGhlbSBpcyB0aGUgaXNzdWUgdGl0bGUgYW4gaXNzdWUtY2xvc2luZyBgcmUgIzxuPmAgbWVyZ2UgY2Fycmllcy5cbiAgICovXG4gIHJlYWRvbmx5IGRldGFpbExpbmVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNoYW5nZWxvZyBsaW5lIHRoZSBjb21taXQgcHJvZHVjZXMgYmVmb3JlIGdyb3VwaW5nOiBpdHMgc3ViamVjdCwgb3IgdGhlIGJvZHkgbGluZSBsaWZ0ZWQgb250byBhIGRlZmF1bHQgbWVyZ2VcbiAgICogc3ViamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbW1pdCBjYXJyaWVzIGEgYEJSRUFLSU5HIENIQU5HRTpgIGZvb3Rlci4gVGhlIGAhYCBtYXJrZXIgaXMgcmVhZCBvZmYge0BsaW5rIGVudHJ5fSBpdHNlbGYuXG4gICAqL1xuICByZWFkb25seSBoYXNCcmVha2luZ0Zvb3RlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGlzc3VlIHJlZmVyZW5jZXMgdGhlIGJvZHkgbmFtZXMgdGhhdCB7QGxpbmsgZW50cnl9IGRvZXMgbm90IGFscmVhZHkgc2hvdywgcmVuZGVyZWQgYXMgdGhlIGxpbmUgc2hvd3MgdGhlbS5cbiAgICovXG4gIHJlYWRvbmx5IHJlZmVyZW5jZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBjb21taXQgdHlwZXMgdGhhdCBjaGFuZ2Ugbm90aGluZyBhIHVzZXIgb2YgdGhlIHJlbGVhc2UgZ2V0cywgc28gdGhlIGdyb3VwZWQgc2VjdGlvbiBjb3VudHMgdGhlbSBpbnN0ZWFkIG9mXG4gKiBsaXN0aW5nIHRoZW0uIEEgY29tbWl0IG9mIG9uZSBvZiB0aGVzZSB0eXBlcyB0aGF0IGlzIG1hcmtlZCBicmVha2luZyBpcyBzdGlsbCBsaXN0ZWQsIHVuZGVyIGJyZWFraW5nIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBNQUlOVEVOQU5DRV9DT01NSVRfVFlQRVM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFsnYnVpbGQnLCAnY2hvcmUnLCAnY2knLCAncmVmYWN0b3InLCAnc3R5bGUnLCAndGVzdCddKTtcblxuaW50ZXJmYWNlIENsYXNzaWZpZWRFbnRyeSB7XG4gIHJlYWRvbmx5IHJlZmVyZW5jZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICByZWFkb25seSBzZWN0aW9uOiBTZWN0aW9uRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU2VjdGlvbkRlZmluaXRpb24ge1xuICByZWFkb25seSBoZWFkaW5nOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdXJhbDogc3RyaW5nO1xuICByZWFkb25seSBzaW5ndWxhcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU2VjdGlvbkVudHJ5IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMgLS0gTWVyZ2VkIGVudHJpZXMgY29sbGVjdCByZWZlcmVuY2VzIGluIHBsYWNlLlxuICByZWZlcmVuY2VzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xufVxuXG5jb25zdCBCUkVBS0lOR19TRUNUSU9OOiBTZWN0aW9uRGVmaW5pdGlvbiA9IHsgaGVhZGluZzogJ0JyZWFraW5nIGNoYW5nZXMnLCBwbHVyYWw6ICdicmVha2luZyBjaGFuZ2VzJywgc2luZ3VsYXI6ICdicmVha2luZyBjaGFuZ2UnIH07XG5jb25zdCBORVdfU0VDVElPTjogU2VjdGlvbkRlZmluaXRpb24gPSB7IGhlYWRpbmc6ICdOZXcnLCBwbHVyYWw6ICduZXcgZmVhdHVyZXMnLCBzaW5ndWxhcjogJ25ldyBmZWF0dXJlJyB9O1xuY29uc3QgRklYRURfU0VDVElPTjogU2VjdGlvbkRlZmluaXRpb24gPSB7IGhlYWRpbmc6ICdGaXhlZCcsIHBsdXJhbDogJ2ZpeGVzJywgc2luZ3VsYXI6ICdmaXgnIH07XG5jb25zdCBJTVBST1ZFRF9TRUNUSU9OOiBTZWN0aW9uRGVmaW5pdGlvbiA9IHsgaGVhZGluZzogJ0ltcHJvdmVkJywgcGx1cmFsOiAnaW1wcm92ZW1lbnRzJywgc2luZ3VsYXI6ICdpbXByb3ZlbWVudCcgfTtcbmNvbnN0IERPQ1VNRU5UQVRJT05fU0VDVElPTjogU2VjdGlvbkRlZmluaXRpb24gPSB7IGhlYWRpbmc6ICdEb2N1bWVudGF0aW9uJywgcGx1cmFsOiAnZG9jdW1lbnRhdGlvbiBjaGFuZ2VzJywgc2luZ3VsYXI6ICdkb2N1bWVudGF0aW9uIGNoYW5nZScgfTtcbmNvbnN0IE9USEVSX1NFQ1RJT046IFNlY3Rpb25EZWZpbml0aW9uID0geyBoZWFkaW5nOiAnT3RoZXIgY2hhbmdlcycsIHBsdXJhbDogJ290aGVyIGNoYW5nZXMnLCBzaW5ndWxhcjogJ290aGVyIGNoYW5nZScgfTtcblxuLyoqXG4gKiBUaGUgc2VjdGlvbnMsIGluIHRoZSBvcmRlciB0aGV5IGFyZSByZW5kZXJlZCBhbmQgc3VtbWFyaXplZC5cbiAqL1xuY29uc3QgU0VDVElPTlM6IHJlYWRvbmx5IFNlY3Rpb25EZWZpbml0aW9uW10gPSBbQlJFQUtJTkdfU0VDVElPTiwgTkVXX1NFQ1RJT04sIEZJWEVEX1NFQ1RJT04sIElNUFJPVkVEX1NFQ1RJT04sIERPQ1VNRU5UQVRJT05fU0VDVElPTiwgT1RIRVJfU0VDVElPTl07XG5cbmNvbnN0IFNFQ1RJT05TX0JZX1RZUEUgPSBuZXcgTWFwPHN0cmluZywgU2VjdGlvbkRlZmluaXRpb24+KFtcbiAgWydkb2NzJywgRE9DVU1FTlRBVElPTl9TRUNUSU9OXSxcbiAgWydmZWF0JywgTkVXX1NFQ1RJT05dLFxuICBbJ2ZpeCcsIEZJWEVEX1NFQ1RJT05dLFxuICBbJ3BlcmYnLCBJTVBST1ZFRF9TRUNUSU9OXVxuXSk7XG5cbmNvbnN0IENPTlZFTlRJT05BTF9FTlRSWV9SRUdfRVhQID0gL14oPzx0eXBlPlthLXpdKykoPzpcXCgoPzxzY29wZT5bXigpXSopXFwpKT8oPzxicmVha2luZz4hKT86XFxzKyg/PGRlc2NyaXB0aW9uPlxcUy4qKSQvaTtcblxuLyoqXG4gKiBBbiBpc3N1ZS1jbG9zaW5nIG1lcmdlIHN1YmplY3QsIHdob3NlIHJlYWRhYmxlIGhhbGYgaXMgdGhlIGlzc3VlIHRpdGxlIG9uIHRoZSBib2R5J3MgZmlyc3QgbGluZS5cbiAqL1xuY29uc3QgSVNTVUVfT05MWV9ERVNDUklQVElPTl9SRUdfRVhQID0gL15yZSAoPzxpc3N1ZT4jXFxkKykkL2k7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgYm9keSBvZiBhIG5ldyBjaGFuZ2Vsb2cgc2VjdGlvbiBpbiB0aGUge0BsaW5rIENoYW5nZWxvZ1N0eWxlfSBgZ3JvdXBlZGAgbGF5b3V0LlxuICpcbiAqIEBwYXJhbSBlbnRyaWVzIC0gVGhlIGZpcnN0LXBhcmVudCBjb21taXRzIHNpbmNlIHRoZSBwcmV2aW91cyByZWxlYXNlLCBpbiBgZ2l0IGxvZ2Agb3JkZXIuXG4gKiBAcmV0dXJucyBUaGUgc2VjdGlvbiBib2R5LCB3aXRob3V0IGl0cyBgIyMgPHZlcnNpb24+YCBoZWFkaW5nIGFuZCB3aXRob3V0IGEgdHJhaWxpbmcgbmV3bGluZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckdyb3VwZWRDaGFuZ2Vsb2dTZWN0aW9uKGVudHJpZXM6IHJlYWRvbmx5IENoYW5nZWxvZ0NvbW1pdEVudHJ5W10pOiBzdHJpbmcge1xuICBjb25zdCBzZWN0aW9uRW50cmllcyA9IG5ldyBNYXA8U2VjdGlvbkRlZmluaXRpb24sIFNlY3Rpb25FbnRyeVtdPigpO1xuICBsZXQgbWFpbnRlbmFuY2VDb3VudCA9IDA7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgY2xhc3NpZmllZCA9IGNsYXNzaWZ5RW50cnkoZW50cnkpO1xuICAgIGlmICghY2xhc3NpZmllZCkge1xuICAgICAgbWFpbnRlbmFuY2VDb3VudCsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdCA9IHNlY3Rpb25FbnRyaWVzLmdldChjbGFzc2lmaWVkLnNlY3Rpb24pID8/IFtdO1xuICAgIHNlY3Rpb25FbnRyaWVzLnNldChjbGFzc2lmaWVkLnNlY3Rpb24sIGxpc3QpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gbGlzdC5maW5kKChzZWN0aW9uRW50cnkpID0+IHNlY3Rpb25FbnRyeS50ZXh0ID09PSBjbGFzc2lmaWVkLnRleHQpO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIGxpc3QucHVzaCh7IHJlZmVyZW5jZXM6IFsuLi5jbGFzc2lmaWVkLnJlZmVyZW5jZXNdLCB0ZXh0OiBjbGFzc2lmaWVkLnRleHQgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBleGlzdGluZy5yZWZlcmVuY2VzID0gWy4uLm5ldyBTZXQoWy4uLmV4aXN0aW5nLnJlZmVyZW5jZXMsIC4uLmNsYXNzaWZpZWQucmVmZXJlbmNlc10pXTtcbiAgfVxuXG4gIGNvbnN0IGJsb2NrcyA9IFt0b1N1bW1hcnlMaW5lKHNlY3Rpb25FbnRyaWVzLCBtYWludGVuYW5jZUNvdW50KV07XG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBTRUNUSU9OUykge1xuICAgIGNvbnN0IGxpc3QgPSBzZWN0aW9uRW50cmllcy5nZXQoc2VjdGlvbik7XG4gICAgaWYgKCFsaXN0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBibG9ja3MucHVzaChgIyMjICR7c2VjdGlvbi5oZWFkaW5nfWAsIGxpc3QubWFwKChzZWN0aW9uRW50cnkpID0+IGAtICR7dG9FbnRyeUxpbmUoc2VjdGlvbkVudHJ5KX1gKS5qb2luKCdcXG4nKSk7XG4gIH1cblxuICByZXR1cm4gYmxvY2tzLmpvaW4oJ1xcblxcbicpO1xufVxuXG5mdW5jdGlvbiBjbGFzc2lmeUVudHJ5KGVudHJ5OiBDaGFuZ2Vsb2dDb21taXRFbnRyeSk6IENsYXNzaWZpZWRFbnRyeSB8IG51bGwge1xuICBjb25zdCBncm91cHMgPSBDT05WRU5USU9OQUxfRU5UUllfUkVHX0VYUC5leGVjKGVudHJ5LmVudHJ5KT8uZ3JvdXBzO1xuICBpZiAoIWdyb3Vwcykge1xuICAgIHJldHVybiB7IHJlZmVyZW5jZXM6IGVudHJ5LnJlZmVyZW5jZXMsIHNlY3Rpb246IGVudHJ5Lmhhc0JyZWFraW5nRm9vdGVyID8gQlJFQUtJTkdfU0VDVElPTiA6IE9USEVSX1NFQ1RJT04sIHRleHQ6IGVudHJ5LmVudHJ5IH07XG4gIH1cblxuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uJ3MgYHR5cGVgIGFuZCBgZGVzY3JpcHRpb25gIGdyb3VwcyBhcmUgbm90IG9wdGlvbmFsLCBzbyBhIG1hdGNoIGFsd2F5cyBmaWxscyB0aGVtLlxuICBjb25zdCB0eXBlID0gU3RyaW5nKGdyb3Vwc1sndHlwZSddKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBpc0JyZWFraW5nID0gZ3JvdXBzWydicmVha2luZyddICE9PSB1bmRlZmluZWQgfHwgZW50cnkuaGFzQnJlYWtpbmdGb290ZXI7XG4gIGNvbnN0IHNlY3Rpb24gPSBpc0JyZWFraW5nID8gQlJFQUtJTkdfU0VDVElPTiA6IHRvVHlwZVNlY3Rpb24odHlwZSk7XG4gIGlmICghc2VjdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGVzY3JpcHRpb24gPSBTdHJpbmcoZ3JvdXBzWydkZXNjcmlwdGlvbiddKTtcbiAgY29uc3QgaXNzdWUgPSBJU1NVRV9PTkxZX0RFU0NSSVBUSU9OX1JFR19FWFAuZXhlYyhkZXNjcmlwdGlvbik/Lmdyb3Vwcz8uWydpc3N1ZSddO1xuICBjb25zdCBpc3N1ZVRpdGxlID0gZW50cnkuZGV0YWlsTGluZXNbMF07XG4gIGNvbnN0IGlzSXNzdWVUaXRsZVVzZWQgPSBpc3N1ZSAhPT0gdW5kZWZpbmVkICYmIGlzc3VlVGl0bGUgIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgdGV4dCA9IGlzSXNzdWVUaXRsZVVzZWQgPyBpc3N1ZVRpdGxlIDogZGVzY3JpcHRpb247XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBpc0lzc3VlVGl0bGVVc2VkID8gW2lzc3VlLCAuLi5lbnRyeS5yZWZlcmVuY2VzXSA6IGVudHJ5LnJlZmVyZW5jZXM7XG4gIGNvbnN0IHNjb3BlID0gZ3JvdXBzWydzY29wZSddO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZXMsXG4gICAgc2VjdGlvbixcbiAgICB0ZXh0OiBzY29wZSA/IGAqKiR7c2NvcGV9OioqICR7dGV4dH1gIDogdGV4dFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb3VudFBocmFzZShjb3VudDogbnVtYmVyLCBzZWN0aW9uOiBTZWN0aW9uRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTdHJpbmcoY291bnQpfSAke2NvdW50ID09PSAxID8gc2VjdGlvbi5zaW5ndWxhciA6IHNlY3Rpb24ucGx1cmFsfWA7XG59XG5cbmZ1bmN0aW9uIGpvaW5QaHJhc2VzKHBocmFzZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgbGFzdCA9IHBocmFzZXMuc2xpY2UoLTEpLmpvaW4oJycpO1xuICByZXR1cm4gcGhyYXNlcy5sZW5ndGggPT09IDEgPyBsYXN0IDogYCR7cGhyYXNlcy5zbGljZSgwLCAtMSkuam9pbignLCAnKX0gYW5kICR7bGFzdH1gO1xufVxuXG5mdW5jdGlvbiB0b0VudHJ5TGluZShzZWN0aW9uRW50cnk6IFNlY3Rpb25FbnRyeSk6IHN0cmluZyB7XG4gIHJldHVybiBzZWN0aW9uRW50cnkucmVmZXJlbmNlcy5sZW5ndGggPT09IDAgPyBzZWN0aW9uRW50cnkudGV4dCA6IGAke3NlY3Rpb25FbnRyeS50ZXh0fSAoJHtzZWN0aW9uRW50cnkucmVmZXJlbmNlcy5qb2luKCcsICcpfSlgO1xufVxuXG5mdW5jdGlvbiB0b1N1bW1hcnlMaW5lKHNlY3Rpb25FbnRyaWVzOiBSZWFkb25seU1hcDxTZWN0aW9uRGVmaW5pdGlvbiwgcmVhZG9ubHkgU2VjdGlvbkVudHJ5W10+LCBtYWludGVuYW5jZUNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBwaHJhc2VzID0gU0VDVElPTlNcbiAgICAubWFwKChzZWN0aW9uKSA9PiAoeyBjb3VudDogc2VjdGlvbkVudHJpZXMuZ2V0KHNlY3Rpb24pPy5sZW5ndGggPz8gMCwgc2VjdGlvbiB9KSlcbiAgICAuZmlsdGVyKCh7IGNvdW50IH0pID0+IGNvdW50ID4gMClcbiAgICAubWFwKCh7IGNvdW50LCBzZWN0aW9uIH0pID0+IGNvdW50UGhyYXNlKGNvdW50LCBzZWN0aW9uKSk7XG4gIGNvbnN0IGlzT25lID0gbWFpbnRlbmFuY2VDb3VudCA9PT0gMTtcbiAgY29uc3QgbWFpbnRlbmFuY2UgPSBtYWludGVuYW5jZUNvdW50ID09PSAwXG4gICAgPyAnJ1xuICAgIDogYCAke1N0cmluZyhtYWludGVuYW5jZUNvdW50KX0gbWFpbnRlbmFuY2UgJHtpc09uZSA/ICdjb21taXQnIDogJ2NvbW1pdHMnfSAodGVzdHMsIGJ1aWxkLCBDSSwgcmVmYWN0b3JpbmcsIGRlcGVuZGVuY2llcykgJHtpc09uZSA/ICdpcycgOiAnYXJlJ30gbm90IGxpc3RlZC5gO1xuXG4gIGlmIChwaHJhc2VzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gYFRoaXMgcmVsZWFzZSBoYXMgJHtqb2luUGhyYXNlcyhwaHJhc2VzKX0uJHttYWludGVuYW5jZX1gO1xuICB9XG5cbiAgcmV0dXJuIG1haW50ZW5hbmNlQ291bnQgPT09IDAgPyAnVGhpcyByZWxlYXNlIGhhcyBubyBjaGFuZ2VzLicgOiBgVGhpcyByZWxlYXNlIGhhcyBtYWludGVuYW5jZSBjaGFuZ2VzIG9ubHkuJHttYWludGVuYW5jZX1gO1xufVxuXG5mdW5jdGlvbiB0b1R5cGVTZWN0aW9uKHR5cGU6IHN0cmluZyk6IG51bGwgfCBTZWN0aW9uRGVmaW5pdGlvbiB7XG4gIGNvbnN0IHNlY3Rpb24gPSBTRUNUSU9OU19CWV9UWVBFLmdldCh0eXBlKTtcbiAgaWYgKHNlY3Rpb24pIHtcbiAgICByZXR1cm4gc2VjdGlvbjtcbiAgfVxuXG4gIHJldHVybiBNQUlOVEVOQU5DRV9DT01NSVRfVFlQRVMuaGFzKHR5cGUpID8gbnVsbCA6IE9USEVS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
|
package/dist/lib/esm/index.d.mts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
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';
|
|
9
10
|
export * as 'check-project-types' from './check-project-types.mjs';
|
|
10
11
|
export * as 'cli-utils' from './cli-utils.mjs';
|
|
11
12
|
export * as 'code-generator' from './code-generator.mjs';
|
package/dist/lib/esm/index.mjs
CHANGED
|
@@ -6,6 +6,7 @@ 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";
|
|
9
10
|
import * as check_project_types from "./check-project-types.mjs";
|
|
10
11
|
import * as cli_utils from "./cli-utils.mjs";
|
|
11
12
|
import * as code_generator from "./code-generator.mjs";
|
|
@@ -45,6 +46,7 @@ export {
|
|
|
45
46
|
build,
|
|
46
47
|
bulk_concurrency as "bulk-concurrency",
|
|
47
48
|
bundlers,
|
|
49
|
+
changelog_grouping as "changelog-grouping",
|
|
48
50
|
check_project_types as "check-project-types",
|
|
49
51
|
cli_utils as "cli-utils",
|
|
50
52
|
code_generator as "code-generator",
|
|
@@ -81,4 +83,4 @@ export {
|
|
|
81
83
|
validate_dependencies as "validate-dependencies",
|
|
82
84
|
version
|
|
83
85
|
};
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2J1aWxkJyBmcm9tICcuL2J1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdidWxrLWNvbmN1cnJlbmN5JyBmcm9tICcuL2J1bGstY29uY3VycmVuY3kudHMnO1xuZXhwb3J0ICogYXMgJ2J1bmRsZXJzJyBmcm9tICcuL2J1bmRsZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjaGFuZ2Vsb2ctZ3JvdXBpbmcnIGZyb20gJy4vY2hhbmdlbG9nLWdyb3VwaW5nLnRzJztcbmV4cG9ydCAqIGFzICdjaGVjay1wcm9qZWN0LXR5cGVzJyBmcm9tICcuL2NoZWNrLXByb2plY3QtdHlwZXMudHMnO1xuZXhwb3J0ICogYXMgJ2NsaS11dGlscycgZnJvbSAnLi9jbGktdXRpbHMudHMnO1xuZXhwb3J0ICogYXMgJ2NvZGUtZ2VuZXJhdG9yJyBmcm9tICcuL2NvZGUtZ2VuZXJhdG9yLnRzJztcbmV4cG9ydCAqIGFzICdjb21taXRsaW50LWNvbmZpZycgZnJvbSAnLi9jb21taXRsaW50LWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1mb3JiaWRkZW4tcGF0dGVybnMnIGZyb20gJy4vY29tbWl0bGludC1mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtbGludC1tZC1oZWFkZXInIGZyb20gJy4vY29tbWl0bGludC1saW50LW1kLWhlYWRlci50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlcicgZnJvbSAnLi9jb21taXRsaW50LXNwZWxsY2hlY2staGVhZGVyLnRzJztcbmV4cG9ydCAqIGFzICdkb2NzLXNpdGUnIGZyb20gJy4vZG9jcy1zaXRlL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdlbnYtdG9nZ2xlJyBmcm9tICcuL2Vudi10b2dnbGUudHMnO1xuZXhwb3J0ICogYXMgJ2V4ZWMnIGZyb20gJy4vZXhlYy50cyc7XG5leHBvcnQgKiBhcyAnZm9yYmlkZGVuLXBhdHRlcm5zJyBmcm9tICcuL2ZvcmJpZGRlbi1wYXR0ZXJucy50cyc7XG5leHBvcnQgKiBhcyAnZm9ybWF0dGVycycgZnJvbSAnLi9mb3JtYXR0ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdmcycgZnJvbSAnLi9mcy50cyc7XG5leHBvcnQgKiBhcyAnZ2F0ZScgZnJvbSAnLi9nYXRlLnRzJztcbmV4cG9ydCAqIGFzICdnaXQnIGZyb20gJy4vZ2l0LnRzJztcbmV4cG9ydCAqIGFzICdqc29uJyBmcm9tICcuL2pzb24udHMnO1xuZXhwb3J0ICogYXMgJ2xpYnJhcnktYnVpbGQnIGZyb20gJy4vbGlicmFyeS1idWlsZC50cyc7XG5leHBvcnQgKiBhcyAnbGluay1jaGVjay1za2lwJyBmcm9tICcuL2xpbmstY2hlY2stc2tpcC50cyc7XG5leHBvcnQgKiBhcyAnbGludGVycycgZnJvbSAnLi9saW50ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICduYW5vLXN0YWdlZC1jb25maWcnIGZyb20gJy4vbmFuby1zdGFnZWQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICducG0tcHVibGlzaCcgZnJvbSAnLi9ucG0tcHVibGlzaC50cyc7XG5leHBvcnQgKiBhcyAnbnBtLXJ1bicgZnJvbSAnLi9ucG0tcnVuLnRzJztcbmV4cG9ydCAqIGFzICducG0nIGZyb20gJy4vbnBtLnRzJztcbmV4cG9ydCAqIGFzICdwYWNrYWdlLWxvY2staW50ZWdyaXR5JyBmcm9tICcuL3BhY2thZ2UtbG9jay1pbnRlZ3JpdHkudHMnO1xuZXhwb3J0ICogYXMgJ3BhY2thZ2UtbWFuYWdlcicgZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuZXhwb3J0ICogYXMgJ3JlbGVhc2VkLWlzc3VlcycgZnJvbSAnLi9yZWxlYXNlZC1pc3N1ZXMudHMnO1xuZXhwb3J0ICogYXMgJ3JlcG8tcGF0aHMnIGZyb20gJy4vcmVwby1wYXRocy50cyc7XG5leHBvcnQgKiBhcyAncm9vdCcgZnJvbSAnLi9yb290LnRzJztcbmV4cG9ydCAqIGFzICdzaGFyZWQtY29uZmlnLWZpbGVzJyBmcm9tICcuL3NoYXJlZC1jb25maWctZmlsZXMudHMnO1xuZXhwb3J0ICogYXMgJ3Rlc3QtcnVubmVycycgZnJvbSAnLi90ZXN0LXJ1bm5lcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3Vwc3RyZWFtLXN5bmMtY2xpJyBmcm9tICcuL3Vwc3RyZWFtLXN5bmMtY2xpLnRzJztcbmV4cG9ydCAqIGFzICd1cHN0cmVhbS1zeW5jJyBmcm9tICcuL3Vwc3RyZWFtLXN5bmMudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlY2xhcmF0aW9ucycgZnJvbSAnLi92YWxpZGF0ZS1kZWNsYXJhdGlvbnMudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlcGVuZGVuY2llcycgZnJvbSAnLi92YWxpZGF0ZS1kZXBlbmRlbmNpZXMudHMnO1xuZXhwb3J0ICogYXMgJ3ZlcnNpb24nIGZyb20gJy4vdmVyc2lvbi50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVksV0FBYTtBQUN6QixZQUFZQSxzQkFBd0I7QUFDcEMsWUFBWSxjQUFnQjtBQUM1QixZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWUMseUJBQTJCO0FBQ3ZDLFlBQVlDLGVBQWlCO0FBQzdCLFlBQVlDLG9CQUFzQjtBQUNsQyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMsbUNBQXFDO0FBQ2pELFlBQVlDLCtCQUFpQztBQUM3QyxZQUFZQyxrQ0FBb0M7QUFDaEQsWUFBWUMsZUFBaUI7QUFDN0IsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVksVUFBWTtBQUN4QixZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWSxRQUFVO0FBQ3RCLFlBQVksVUFBWTtBQUN4QixZQUFZLFNBQVc7QUFDdkIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZQyxxQkFBdUI7QUFDbkMsWUFBWSxhQUFlO0FBQzNCLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyxpQkFBbUI7QUFDL0IsWUFBWUMsYUFBZTtBQUMzQixZQUFZLFNBQVc7QUFDdkIsWUFBWUMsNEJBQThCO0FBQzFDLFlBQVlDLHFCQUF1QjtBQUNuQyxZQUFZQyxxQkFBdUI7QUFDbkMsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVksVUFBWTtBQUN4QixZQUFZQyx5QkFBMkI7QUFDdkMsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVlDLHVCQUF5QjtBQUNyQyxZQUFZQyxtQkFBcUI7QUFDakMsWUFBWUMsMkJBQTZCO0FBQ3pDLFlBQVlDLDJCQUE2QjtBQUN6QyxZQUFZLGFBQWU7IiwKICAibmFtZXMiOiBbImJ1bGstY29uY3VycmVuY3kiLCAiY2hhbmdlbG9nLWdyb3VwaW5nIiwgImNoZWNrLXByb2plY3QtdHlwZXMiLCAiY2xpLXV0aWxzIiwgImNvZGUtZ2VuZXJhdG9yIiwgImNvbW1pdGxpbnQtY29uZmlnIiwgImNvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zIiwgImNvbW1pdGxpbnQtbGludC1tZC1oZWFkZXIiLCAiY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlciIsICJkb2NzLXNpdGUiLCAiZW52LXRvZ2dsZSIsICJmb3JiaWRkZW4tcGF0dGVybnMiLCAibGlicmFyeS1idWlsZCIsICJsaW5rLWNoZWNrLXNraXAiLCAibmFuby1zdGFnZWQtY29uZmlnIiwgIm5wbS1wdWJsaXNoIiwgIm5wbS1ydW4iLCAicGFja2FnZS1sb2NrLWludGVncml0eSIsICJwYWNrYWdlLW1hbmFnZXIiLCAicmVsZWFzZWQtaXNzdWVzIiwgInJlcG8tcGF0aHMiLCAic2hhcmVkLWNvbmZpZy1maWxlcyIsICJ0ZXN0LXJ1bm5lcnMiLCAidXBzdHJlYW0tc3luYy1jbGkiLCAidXBzdHJlYW0tc3luYyIsICJ2YWxpZGF0ZS1kZWNsYXJhdGlvbnMiLCAidmFsaWRhdGUtZGVwZW5kZW5jaWVzIl0KfQo=
|