@hugojosefson/cli 0.11.0 → 0.12.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/esm/deno.js +16 -8
- package/esm/node_modules/@conventional-changelog/template/LICENSE.md +21 -0
- package/esm/node_modules/@conventional-changelog/template/README.md +66 -0
- package/esm/node_modules/@conventional-changelog/template/dist/elements.d.ts +78 -0
- package/esm/node_modules/@conventional-changelog/template/dist/elements.d.ts.map +1 -0
- package/esm/node_modules/@conventional-changelog/template/dist/elements.js +132 -0
- package/esm/node_modules/@conventional-changelog/template/dist/index.d.ts +6 -0
- package/esm/node_modules/@conventional-changelog/template/dist/index.d.ts.map +1 -0
- package/esm/node_modules/@conventional-changelog/template/dist/index.js +5 -0
- package/esm/node_modules/@conventional-changelog/template/dist/legacy.d.ts +20 -0
- package/esm/node_modules/@conventional-changelog/template/dist/legacy.d.ts.map +1 -0
- package/esm/node_modules/@conventional-changelog/template/dist/legacy.js +22 -0
- package/esm/node_modules/@conventional-changelog/template/dist/references.d.ts +43 -0
- package/esm/node_modules/@conventional-changelog/template/dist/references.d.ts.map +1 -0
- package/esm/node_modules/@conventional-changelog/template/dist/references.js +82 -0
- package/esm/node_modules/@conventional-changelog/template/dist/templates.d.ts +74 -0
- package/esm/node_modules/@conventional-changelog/template/dist/templates.d.ts.map +1 -0
- package/esm/node_modules/@conventional-changelog/template/dist/templates.js +125 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/commit.d.ts +37 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/commit.d.ts.map +1 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/commit.js +2 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/context.d.ts +113 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/context.d.ts.map +1 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/context.js +2 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/index.d.ts +4 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/index.d.ts.map +1 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/index.js +2 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/utils.d.ts +2 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/utils.d.ts.map +1 -0
- package/esm/node_modules/@conventional-changelog/template/dist/types/utils.js +2 -0
- package/esm/node_modules/@conventional-changelog/template/package.json +38 -0
- package/esm/node_modules/@simple-libs/stream-utils/LICENSE +21 -0
- package/esm/node_modules/@simple-libs/stream-utils/README.md +79 -0
- package/esm/node_modules/@simple-libs/stream-utils/dist/index.d.ts +51 -0
- package/esm/node_modules/@simple-libs/stream-utils/dist/index.d.ts.map +1 -0
- package/esm/node_modules/@simple-libs/stream-utils/dist/index.js +116 -0
- package/esm/node_modules/@simple-libs/stream-utils/package.json +38 -0
- package/esm/node_modules/argue-cli/LICENSE +21 -0
- package/esm/node_modules/argue-cli/README.md +239 -0
- package/esm/node_modules/argue-cli/dist/args.d.ts +30 -0
- package/esm/node_modules/argue-cli/dist/args.d.ts.map +1 -0
- package/esm/node_modules/argue-cli/dist/argv.d.ts +14 -0
- package/esm/node_modules/argue-cli/dist/argv.d.ts.map +1 -0
- package/esm/node_modules/argue-cli/dist/core.d.ts +24 -0
- package/esm/node_modules/argue-cli/dist/core.d.ts.map +1 -0
- package/esm/node_modules/argue-cli/dist/index.d.ts +6 -0
- package/esm/node_modules/argue-cli/dist/index.d.ts.map +1 -0
- package/esm/node_modules/argue-cli/dist/index.js +254 -0
- package/esm/node_modules/argue-cli/dist/index.js.map +1 -0
- package/esm/node_modules/argue-cli/dist/options.d.ts +9 -0
- package/esm/node_modules/argue-cli/dist/options.d.ts.map +1 -0
- package/esm/node_modules/argue-cli/dist/types.d.ts +16 -0
- package/esm/node_modules/argue-cli/dist/types.d.ts.map +1 -0
- package/esm/node_modules/argue-cli/dist/utils.d.ts +24 -0
- package/esm/node_modules/argue-cli/dist/utils.d.ts.map +1 -0
- package/esm/node_modules/argue-cli/package.json +34 -0
- package/esm/node_modules/conventional-changelog-core/node_modules/conventional-changelog-writer/LICENSE.md +21 -0
- package/esm/node_modules/conventional-changelog-core/node_modules/conventional-changelog-writer/README.md +369 -0
- package/esm/node_modules/conventional-changelog-core/node_modules/conventional-changelog-writer/package.json +53 -0
- package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-filter/LICENSE +21 -0
- package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-filter/README.md +184 -0
- package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-filter/package.json +31 -0
- package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-parser/LICENSE.md +21 -0
- package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-parser/README.md +383 -0
- package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-parser/package.json +47 -0
- package/esm/node_modules/conventional-changelog-writer/README.md +49 -342
- package/esm/node_modules/conventional-changelog-writer/dist/cli/index.d.ts +3 -0
- package/esm/node_modules/conventional-changelog-writer/dist/cli/index.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/cli/index.js +68 -0
- package/esm/node_modules/conventional-changelog-writer/dist/cli/utils.d.ts +4 -0
- package/esm/node_modules/conventional-changelog-writer/dist/cli/utils.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/cli/utils.js +39 -0
- package/esm/node_modules/conventional-changelog-writer/dist/commit.d.ts +10 -0
- package/esm/node_modules/conventional-changelog-writer/dist/commit.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/commit.js +43 -0
- package/esm/node_modules/conventional-changelog-writer/dist/context.d.ts +27 -0
- package/esm/node_modules/conventional-changelog-writer/dist/context.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/context.js +134 -0
- package/esm/node_modules/conventional-changelog-writer/dist/index.d.ts +7 -0
- package/esm/node_modules/conventional-changelog-writer/dist/index.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/index.js +6 -0
- package/esm/node_modules/conventional-changelog-writer/dist/options.d.ts +25 -0
- package/esm/node_modules/conventional-changelog-writer/dist/options.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/options.js +79 -0
- package/esm/node_modules/conventional-changelog-writer/dist/template.d.ts +10 -0
- package/esm/node_modules/conventional-changelog-writer/dist/template.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/template.js +18 -0
- package/esm/node_modules/conventional-changelog-writer/dist/types/index.d.ts +8 -0
- package/esm/node_modules/conventional-changelog-writer/dist/types/index.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/types/index.js +2 -0
- package/esm/node_modules/conventional-changelog-writer/dist/types/options.d.ts +122 -0
- package/esm/node_modules/conventional-changelog-writer/dist/types/options.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/types/options.js +2 -0
- package/esm/node_modules/conventional-changelog-writer/dist/types/utils.d.ts +9 -0
- package/esm/node_modules/conventional-changelog-writer/dist/types/utils.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/types/utils.js +2 -0
- package/esm/node_modules/conventional-changelog-writer/dist/utils.d.ts +20 -0
- package/esm/node_modules/conventional-changelog-writer/dist/utils.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/utils.js +70 -0
- package/esm/node_modules/conventional-changelog-writer/dist/writers.d.ts +29 -0
- package/esm/node_modules/conventional-changelog-writer/dist/writers.d.ts.map +1 -0
- package/esm/node_modules/conventional-changelog-writer/dist/writers.js +94 -0
- package/esm/node_modules/conventional-changelog-writer/package.json +24 -26
- package/esm/node_modules/conventional-commits-filter/README.md +51 -170
- package/esm/node_modules/conventional-commits-filter/dist/RevertedCommitsFilter.d.ts +17 -0
- package/esm/node_modules/conventional-commits-filter/dist/RevertedCommitsFilter.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-filter/dist/RevertedCommitsFilter.js +46 -0
- package/esm/node_modules/conventional-commits-filter/dist/filters.d.ts +19 -0
- package/esm/node_modules/conventional-commits-filter/dist/filters.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-filter/dist/filters.js +34 -0
- package/esm/node_modules/conventional-commits-filter/dist/index.d.ts +4 -0
- package/esm/node_modules/conventional-commits-filter/dist/index.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-filter/dist/index.js +3 -0
- package/esm/node_modules/conventional-commits-filter/dist/types.d.ts +6 -0
- package/esm/node_modules/conventional-commits-filter/dist/types.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-filter/dist/types.js +2 -0
- package/esm/node_modules/conventional-commits-filter/dist/utils.d.ts +16 -0
- package/esm/node_modules/conventional-commits-filter/dist/utils.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-filter/dist/utils.js +43 -0
- package/esm/node_modules/conventional-commits-filter/package.json +22 -16
- package/esm/node_modules/conventional-commits-parser/README.md +49 -353
- package/esm/node_modules/conventional-commits-parser/dist/CommitParser.d.ts +40 -0
- package/esm/node_modules/conventional-commits-parser/dist/CommitParser.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-parser/dist/CommitParser.js +319 -0
- package/esm/node_modules/conventional-commits-parser/dist/cli/index.d.ts +3 -0
- package/esm/node_modules/conventional-commits-parser/dist/cli/index.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-parser/dist/cli/index.js +67 -0
- package/esm/node_modules/conventional-commits-parser/dist/cli/options.d.ts +3 -0
- package/esm/node_modules/conventional-commits-parser/dist/cli/options.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-parser/dist/cli/options.js +40 -0
- package/esm/node_modules/conventional-commits-parser/dist/cli/utils.d.ts +5 -0
- package/esm/node_modules/conventional-commits-parser/dist/cli/utils.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-parser/dist/cli/utils.js +49 -0
- package/esm/node_modules/conventional-commits-parser/dist/index.d.ts +4 -0
- package/esm/node_modules/conventional-commits-parser/dist/index.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-parser/dist/index.js +3 -0
- package/esm/node_modules/conventional-commits-parser/dist/options.d.ts +3 -0
- package/esm/node_modules/conventional-commits-parser/dist/options.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-parser/dist/options.js +27 -0
- package/esm/node_modules/conventional-commits-parser/dist/regex.d.ts +8 -0
- package/esm/node_modules/conventional-commits-parser/dist/regex.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-parser/dist/regex.js +63 -0
- package/esm/node_modules/conventional-commits-parser/dist/stream.d.ts +14 -0
- package/esm/node_modules/conventional-commits-parser/dist/stream.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-parser/dist/stream.js +38 -0
- package/esm/node_modules/conventional-commits-parser/dist/types.d.ts +100 -0
- package/esm/node_modules/conventional-commits-parser/dist/types.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-parser/dist/types.js +2 -0
- package/esm/node_modules/conventional-commits-parser/dist/utils.d.ts +41 -0
- package/esm/node_modules/conventional-commits-parser/dist/utils.d.ts.map +1 -0
- package/esm/node_modules/conventional-commits-parser/dist/utils.js +75 -0
- package/esm/node_modules/conventional-commits-parser/package.json +22 -23
- package/esm/src/cli/command-help.js +15 -0
- package/esm/src/cli/repair-configuration-description.js +98 -0
- package/esm/src/cli/run-changelog.js +51 -0
- package/esm/src/cli/run-cli.js +8 -0
- package/esm/src/features/built-in-feature-registry.js +2 -0
- package/esm/src/features/changelog-feature.js +155 -0
- package/esm/src/features/github-ci-artifacts.js +17 -3
- package/esm/src/features/github-ci-runtime-matrix.js +50 -0
- package/esm/src/features/github-release-publish-artifacts.js +5 -4
- package/esm/src/features/github-release-publish-feature.js +4 -0
- package/esm/src/features/github-workflow-cache.js +18 -0
- package/esm/src/features/workflow-deno.js +1 -1
- package/esm/src/release/changelog-markdown.js +41 -0
- package/esm/src/release/changelog.js +155 -7
- package/esm/src/release/format-changelog.js +15 -0
- package/esm/src/release/migrate-changelog.js +92 -0
- package/esm/src/release/publish-github.js +7 -3
- package/esm/src/release/publish-tag-prepare.js +63 -78
- package/esm/src/release/release-history.js +53 -0
- package/npm-dependencies.lock.json +115 -48
- package/package.json +5 -3
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/dependencies.js +0 -11036
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/index.d.ts +0 -1416
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/index.js +0 -100
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/licenses.md +0 -1767
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/options.js +0 -92
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/parser.js +0 -84
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/utils.js +0 -7
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/validate.js +0 -122
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/license +0 -9
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/package.json +0 -107
- package/esm/node_modules/conventional-commits-parser/node_modules/meow/readme.md +0 -314
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/cli.mjs +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/index.js +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/lib/util.js +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/templates/commit.hbs +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/templates/footer.hbs +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/templates/header.hbs +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/templates/template.hbs +0 -0
- /package/esm/node_modules/{conventional-commits-filter → conventional-changelog-core/node_modules/conventional-commits-filter}/index.js +0 -0
- /package/esm/node_modules/{conventional-commits-parser → conventional-changelog-core/node_modules/conventional-commits-parser}/cli.mjs +0 -0
- /package/esm/node_modules/{conventional-commits-parser → conventional-changelog-core/node_modules/conventional-commits-parser}/index.js +0 -0
- /package/esm/node_modules/{conventional-commits-parser → conventional-changelog-core/node_modules/conventional-commits-parser}/lib/parser.js +0 -0
- /package/esm/node_modules/{conventional-commits-parser → conventional-changelog-core/node_modules/conventional-commits-parser}/lib/regex.js +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/dependencies.js +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/index.d.ts +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/index.js +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/licenses.md +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/options.js +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/parser.js +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/utils.js +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/validate.js +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/license +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/package.json +0 -0
- /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/readme.md +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/** Read-only reconstruction of supported release sections from immutable Git ranges. */
|
|
2
|
+
import { changelogHeadings } from "./changelog-markdown.js";
|
|
3
|
+
import { parse } from "jsonc-parser";
|
|
4
|
+
import { createLegacyReleaseSection, createReleaseSection, } from "./changelog.js";
|
|
5
|
+
import { formatChangelogSection } from "./format-changelog.js";
|
|
6
|
+
import { commitMessages, releaseTags } from "./release-history.js";
|
|
7
|
+
import { selectPreviousRelease } from "./previous-release.js";
|
|
8
|
+
import { runOrThrow } from "./release-process.js";
|
|
9
|
+
import { parseSemver } from "./semver.js";
|
|
10
|
+
export async function migrateChangelog(oldText, repository, process) {
|
|
11
|
+
const headings = changelogHeadings(oldText).filter((heading) => heading.level === 2);
|
|
12
|
+
const tags = await releaseTags(process, "HEAD");
|
|
13
|
+
const seen = new Set();
|
|
14
|
+
const replacements = [];
|
|
15
|
+
for (const [index, heading] of headings.entries()) {
|
|
16
|
+
const version = heading.title;
|
|
17
|
+
if (!parseSemver(version))
|
|
18
|
+
continue;
|
|
19
|
+
if (seen.has(version)) {
|
|
20
|
+
throw new Error(`Duplicate changelog release ${version}.`);
|
|
21
|
+
}
|
|
22
|
+
seen.add(version);
|
|
23
|
+
const tag = tags.find((tag) => tag.name === version);
|
|
24
|
+
if (!tag?.lightweight || !tag.targetIsAncestor) {
|
|
25
|
+
throw new Error(`Release ${version} needs its original lightweight ancestor tag; fetch the complete Git history and tags.`);
|
|
26
|
+
}
|
|
27
|
+
const subject = (await runOrThrow(process, "git", [
|
|
28
|
+
"show",
|
|
29
|
+
"-s",
|
|
30
|
+
"--format=%s",
|
|
31
|
+
tag.target,
|
|
32
|
+
])).trimEnd();
|
|
33
|
+
const parents = (await runOrThrow(process, "git", [
|
|
34
|
+
"rev-list",
|
|
35
|
+
"--parents",
|
|
36
|
+
"-n",
|
|
37
|
+
"1",
|
|
38
|
+
tag.target,
|
|
39
|
+
])).trim().split(" ");
|
|
40
|
+
if (subject !== `chore(release): ${version}` || parents.length !== 2) {
|
|
41
|
+
throw new Error(`Release ${version} has no recognized single-parent release boundary.`);
|
|
42
|
+
}
|
|
43
|
+
const parent = parents[1];
|
|
44
|
+
const configs = [];
|
|
45
|
+
for (const path of ["deno.json", "deno.jsonc"]) {
|
|
46
|
+
const result = await process.run("git", ["show", `${parent}:${path}`]);
|
|
47
|
+
if (result.success)
|
|
48
|
+
configs.push(new TextDecoder().decode(result.stdout));
|
|
49
|
+
}
|
|
50
|
+
const errors = [];
|
|
51
|
+
const config = configs.length === 1
|
|
52
|
+
? parse(configs[0], errors, { allowTrailingComma: true })
|
|
53
|
+
: undefined;
|
|
54
|
+
if (!config || errors.length || typeof config.version !== "string") {
|
|
55
|
+
throw new Error(`Release ${version} has no unambiguous previous version config.`);
|
|
56
|
+
}
|
|
57
|
+
const previous = selectPreviousRelease(await releaseTags(process, parent), config.version);
|
|
58
|
+
if (previous.kind === "conflict" || previous.kind === "version-mismatch") {
|
|
59
|
+
throw new Error(`Release ${version} has ambiguous previous release tags.`);
|
|
60
|
+
}
|
|
61
|
+
const range = previous.kind === "tag"
|
|
62
|
+
? `${previous.tag.target}..${parent}`
|
|
63
|
+
: parent;
|
|
64
|
+
const ids = (await runOrThrow(process, "git", ["rev-list", "--reverse", range]))
|
|
65
|
+
.trim().split("\n");
|
|
66
|
+
const messages = await commitMessages(process, ids);
|
|
67
|
+
const grouped = await formatChangelogSection(process, await createReleaseSection(version, ids.map((hash, i) => ({ hash, message: messages[i] })), repository));
|
|
68
|
+
const legacy = await formatChangelogSection(process, createLegacyReleaseSection(version, messages.map((message) => message.split("\n")[0])));
|
|
69
|
+
const start = heading.offset;
|
|
70
|
+
const end = headings[index + 1]?.offset ?? oldText.length;
|
|
71
|
+
const existing = oldText.slice(start, end);
|
|
72
|
+
if (existing.trimEnd() !== legacy.trimEnd() &&
|
|
73
|
+
existing.trimEnd() !== grouped.trimEnd()) {
|
|
74
|
+
throw new Error(`Release ${version} contains custom or mismatched text. Keep extending this changelog, or reconcile that section with Git history before migration.`);
|
|
75
|
+
}
|
|
76
|
+
// Retain the section's exact separating whitespace and all non-release text.
|
|
77
|
+
replacements.push({
|
|
78
|
+
start,
|
|
79
|
+
end,
|
|
80
|
+
text: grouped.trimEnd() + existing.slice(existing.trimEnd().length),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (!seen.size) {
|
|
84
|
+
throw new Error("No supported release sections found. Keep extending this changelog; migration supports ## <SemVer> sections from hj releases.");
|
|
85
|
+
}
|
|
86
|
+
let result = oldText;
|
|
87
|
+
for (const replacement of replacements.reverse()) {
|
|
88
|
+
result = result.slice(0, replacement.start) + replacement.text +
|
|
89
|
+
result.slice(replacement.end);
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** Idempotent GitHub Release publication. */
|
|
2
|
+
import { changelogHeadings } from "./changelog-markdown.js";
|
|
1
3
|
import { processText } from "./release-process.js";
|
|
2
4
|
import { confirmPublication, } from "./confirm-publication.js";
|
|
3
5
|
import { parseSemver } from "./semver.js";
|
|
@@ -32,12 +34,14 @@ export async function publishGithub(input) {
|
|
|
32
34
|
throw new Error("GitHub Release creation was not confirmed.");
|
|
33
35
|
}
|
|
34
36
|
export function changelogSection(text, version) {
|
|
35
|
-
const
|
|
36
|
-
const matches =
|
|
37
|
+
const headings = changelogHeadings(text).filter((heading) => heading.level === 2);
|
|
38
|
+
const matches = headings.flatMap((heading, index) => heading.title === version
|
|
39
|
+
? [{ start: heading.offset, end: headings[index + 1]?.offset }]
|
|
40
|
+
: []);
|
|
37
41
|
if (matches.length !== 1) {
|
|
38
42
|
throw new TypeError("Applicable changelog section is missing or ambiguous.");
|
|
39
43
|
}
|
|
40
|
-
return matches[0][0];
|
|
44
|
+
return text.slice(matches[0].start, matches[0].end);
|
|
41
45
|
}
|
|
42
46
|
export function githubReleaseApi(process, repository) {
|
|
43
47
|
if (!/^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/.test(repository)) {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/** @module Read-only-token preparation routes for tag publication. */
|
|
2
2
|
import * as fs from "node:fs/promises";
|
|
3
|
+
import { commitMessages, releaseTags } from "./release-history.js";
|
|
4
|
+
import { formatChangelogInsertion } from "./format-changelog.js";
|
|
3
5
|
import { requiredEnvironment } from "./release-environment.js";
|
|
4
6
|
import { digestBytes } from "../repository/digest-bytes.js";
|
|
5
7
|
import { LocalFileReader } from "../repository/local-file-reader.js";
|
|
6
8
|
import { LocalGitReader } from "../repository/local-git-reader.js";
|
|
7
9
|
import { inspectDenoConfig } from "../features/deno-config.js";
|
|
8
10
|
import { githubReleasePublisherFeatures } from "../features/github-release-publish-feature.js";
|
|
9
|
-
import { applyChangelogInsertion,
|
|
11
|
+
import { applyChangelogInsertion, changelogRepositoryUrl, createLegacyChangelogInsertion, createLegacyReleaseSection, createReleaseSection, } from "./changelog.js";
|
|
10
12
|
import { validateConventionalCommits } from "./conventional-commit.js";
|
|
11
13
|
import { nextVersion } from "./fork-version.js";
|
|
12
14
|
import { validateGithubOutputSize } from "./github-output.js";
|
|
@@ -29,14 +31,14 @@ export async function publishTagPrepare(root, environment, process) {
|
|
|
29
31
|
return { output: "Source commits are valid.\n", releaseNeeded: false };
|
|
30
32
|
}
|
|
31
33
|
if (route === "recovery") {
|
|
32
|
-
return await prepareRecovery(root, environment, process);
|
|
34
|
+
return await prepareRecovery(root, environment, process, releaseRepository(environment));
|
|
33
35
|
}
|
|
34
36
|
if (route !== "usual") {
|
|
35
37
|
throw new Error("HJ_RELEASE_ROUTE must be source-validation, usual, or recovery.");
|
|
36
38
|
}
|
|
37
|
-
return await prepareUsual(root, environment, process);
|
|
39
|
+
return await prepareUsual(root, environment, process, releaseRepository(environment));
|
|
38
40
|
}
|
|
39
|
-
async function prepareUsual(root, environment, process) {
|
|
41
|
+
async function prepareUsual(root, environment, process, repository) {
|
|
40
42
|
await requireClean(process);
|
|
41
43
|
await runOrThrow(process, "git", [
|
|
42
44
|
"fetch",
|
|
@@ -55,7 +57,7 @@ async function prepareUsual(root, environment, process) {
|
|
|
55
57
|
if (config.kind !== "config" || typeof config.value.version !== "string")
|
|
56
58
|
throw new Error("One Deno config with a string version is required.");
|
|
57
59
|
const tags = await releaseTags(process, selectedSha);
|
|
58
|
-
await requireNoUntaggedRelease(root, process, selectedSha, tags);
|
|
60
|
+
await requireNoUntaggedRelease(root, process, selectedSha, tags, repository);
|
|
59
61
|
await runOrThrow(process, "git", ["switch", "--detach", selectedSha]);
|
|
60
62
|
const previous = selectPreviousRelease(tags, config.value.version);
|
|
61
63
|
if (previous.kind === "conflict") {
|
|
@@ -85,16 +87,15 @@ async function prepareUsual(root, environment, process) {
|
|
|
85
87
|
if (!releaseType)
|
|
86
88
|
throw new Error("The release range is empty.");
|
|
87
89
|
const version = await nextVersion(previousVersion, releaseType);
|
|
88
|
-
await runOrThrow(process, "deno", ["task", "all"]);
|
|
89
90
|
await requireClean(process);
|
|
90
91
|
const previousVersionText = config.text;
|
|
91
92
|
const versionText = updateDenoConfigVersion(config.path, config.text, version);
|
|
92
93
|
const changelog = await observeOptionalFile(files, changelogPath);
|
|
93
|
-
const releaseSection = createReleaseSection(version,
|
|
94
|
-
const insertion =
|
|
94
|
+
const releaseSection = await createReleaseSection(version, commits.map((hash, index) => ({ hash, message: messages[index] })), repository);
|
|
95
|
+
const insertion = await formatChangelogInsertion(process, changelog?.content ?? "", releaseSection);
|
|
95
96
|
await fs.writeFile(new URL(config.path, root), versionText);
|
|
96
97
|
await fs.writeFile(new URL(changelogPath, root), applyChangelogInsertion(changelog?.content ?? "", insertion));
|
|
97
|
-
await runOrThrow(process, "deno", ["fmt", config.path
|
|
98
|
+
await runOrThrow(process, "deno", ["fmt", config.path]);
|
|
98
99
|
const formattedVersion = await fs.readFile(new URL(config.path, root), "utf8");
|
|
99
100
|
const formattedChangelog = await fs.readFile(new URL(changelogPath, root), "utf8");
|
|
100
101
|
const formattedInsertion = retainedInsertion(changelog?.content ?? "", formattedChangelog, insertion.offset);
|
|
@@ -171,7 +172,7 @@ async function runReleaseContributions(root, files, process) {
|
|
|
171
172
|
}
|
|
172
173
|
}
|
|
173
174
|
/** Rebuilds a committed release; it intentionally never creates a ref or tag. */
|
|
174
|
-
async function prepareRecovery(root, environment, process) {
|
|
175
|
+
async function prepareRecovery(root, environment, process, repository) {
|
|
175
176
|
const version = requiredEnvironment(environment, "HJ_RELEASE_TAG");
|
|
176
177
|
if (!parseSemver(version)) {
|
|
177
178
|
throw new Error("HJ_RELEASE_TAG must be an exact nonempty SemVer value.");
|
|
@@ -205,7 +206,7 @@ async function prepareRecovery(root, environment, process) {
|
|
|
205
206
|
}
|
|
206
207
|
let bundle;
|
|
207
208
|
try {
|
|
208
|
-
bundle = await rebuildRelease(root, process, parents[1], commit);
|
|
209
|
+
bundle = await rebuildRelease(root, process, parents[1], commit, repository);
|
|
209
210
|
}
|
|
210
211
|
finally {
|
|
211
212
|
await restoreRecoveryWorktree(process, main, changelogPath);
|
|
@@ -236,7 +237,7 @@ async function prepareRecovery(root, environment, process) {
|
|
|
236
237
|
releaseNeeded: true,
|
|
237
238
|
};
|
|
238
239
|
}
|
|
239
|
-
async function requireNoUntaggedRelease(root, process, selectedSha, tags) {
|
|
240
|
+
async function requireNoUntaggedRelease(root, process, selectedSha, tags, repository) {
|
|
240
241
|
const commits = lines(await runOrThrow(process, "git", ["rev-list", "--reverse", selectedSha]));
|
|
241
242
|
const found = [];
|
|
242
243
|
for (const commit of commits) {
|
|
@@ -257,7 +258,7 @@ async function requireNoUntaggedRelease(root, process, selectedSha, tags) {
|
|
|
257
258
|
}
|
|
258
259
|
let bundle;
|
|
259
260
|
try {
|
|
260
|
-
bundle = await rebuildRelease(root, process, parents[1], commit);
|
|
261
|
+
bundle = await rebuildRelease(root, process, parents[1], commit, repository);
|
|
261
262
|
}
|
|
262
263
|
finally {
|
|
263
264
|
await restoreRecoveryWorktree(process, selectedSha, changelogPath);
|
|
@@ -279,7 +280,7 @@ async function requireNoUntaggedRelease(root, process, selectedSha, tags) {
|
|
|
279
280
|
throw new Error(`Release ${found[0].version} is untagged; start the tag workflow with ${found[0].version}.`);
|
|
280
281
|
}
|
|
281
282
|
}
|
|
282
|
-
async function rebuildRelease(root, process, parent, release) {
|
|
283
|
+
async function rebuildRelease(root, process, parent, release, repository) {
|
|
283
284
|
await runOrThrow(process, "git", ["switch", "--detach", parent]);
|
|
284
285
|
const files = new LocalFileReader(root, false);
|
|
285
286
|
const config = await inspectDenoConfig({ files });
|
|
@@ -299,29 +300,59 @@ async function rebuildRelease(root, process, parent, release) {
|
|
|
299
300
|
: previous.version;
|
|
300
301
|
const range = previousTagTarget ? `${previousTagTarget}..${parent}` : parent;
|
|
301
302
|
const commitIds = lines(await runOrThrow(process, "git", ["rev-list", "--reverse", range]));
|
|
302
|
-
const
|
|
303
|
+
const messages = await commitMessages(process, commitIds);
|
|
304
|
+
const conventional = validateConventionalCommits(messages);
|
|
303
305
|
const releaseType = selectReleaseType(conventional);
|
|
304
306
|
if (!releaseType)
|
|
305
307
|
throw new Error("Recovery release range is empty.");
|
|
306
308
|
const version = await nextVersion(previousVersion, releaseType);
|
|
307
309
|
const oldChangelog = await observeOptionalFile(files, changelogPath);
|
|
308
310
|
const versionText = updateDenoConfigVersion(config.path, config.text, version);
|
|
309
|
-
const
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
const paths = await worktreeChangedPaths(process);
|
|
311
|
+
const sections = [
|
|
312
|
+
await createReleaseSection(version, commitIds.map((hash, index) => ({
|
|
313
|
+
hash,
|
|
314
|
+
message: messages[index],
|
|
315
|
+
})), repository),
|
|
316
|
+
createLegacyReleaseSection(version, conventional.map((item) => item.subject)),
|
|
317
|
+
];
|
|
317
318
|
const expectedPaths = [config.path, changelogPath];
|
|
318
|
-
if (paths.length !== 2 || !expectedPaths.every((path) => paths.includes(path)))
|
|
319
|
-
throw new Error("Recovery candidate changed an unexpected path.");
|
|
320
|
-
const candidateDigest = await candidateTreeDigest(process, parent, expectedPaths);
|
|
321
319
|
const releaseDigest = await releaseTreeIndexDigest(process, release);
|
|
322
|
-
|
|
320
|
+
let candidate;
|
|
321
|
+
// Compatibility is exact: neither format may waive the tree or path checks.
|
|
322
|
+
for (const [index, section] of sections.entries()) {
|
|
323
|
+
const insertion = index === 0
|
|
324
|
+
? await formatChangelogInsertion(process, oldChangelog?.content ?? "", section)
|
|
325
|
+
: createLegacyChangelogInsertion(oldChangelog?.content ?? "", section);
|
|
326
|
+
await fs.writeFile(new URL(config.path, root), versionText);
|
|
327
|
+
await fs.writeFile(new URL(changelogPath, root), applyChangelogInsertion(oldChangelog?.content ?? "", insertion));
|
|
328
|
+
await runOrThrow(process, "deno", [
|
|
329
|
+
"fmt",
|
|
330
|
+
config.path,
|
|
331
|
+
...(index === 1 ? [changelogPath] : []),
|
|
332
|
+
]);
|
|
333
|
+
const formattedVersion = await fs.readFile(new URL(config.path, root), "utf8");
|
|
334
|
+
const formattedChangelog = await fs.readFile(new URL(changelogPath, root), "utf8");
|
|
335
|
+
const formattedInsertion = retainedInsertion(oldChangelog?.content ?? "", formattedChangelog, insertion.offset);
|
|
336
|
+
const paths = await worktreeChangedPaths(process);
|
|
337
|
+
if (paths.length !== 2 || !expectedPaths.every((path) => paths.includes(path))) {
|
|
338
|
+
throw new Error("Recovery candidate changed an unexpected path.");
|
|
339
|
+
}
|
|
340
|
+
const candidateDigest = await candidateTreeDigest(process, parent, expectedPaths);
|
|
341
|
+
if (candidateDigest === releaseDigest) {
|
|
342
|
+
candidate = {
|
|
343
|
+
insertion,
|
|
344
|
+
formattedVersion,
|
|
345
|
+
formattedChangelog,
|
|
346
|
+
formattedInsertion,
|
|
347
|
+
candidateDigest,
|
|
348
|
+
};
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
if (!candidate) {
|
|
323
353
|
throw new Error("Recovery release tree differs from its expected candidate.");
|
|
324
354
|
}
|
|
355
|
+
const { insertion, formattedVersion, formattedChangelog, formattedInsertion, candidateDigest, } = candidate;
|
|
325
356
|
const releasePaths = (await runOrThrow(process, "git", [
|
|
326
357
|
"diff-tree",
|
|
327
358
|
"--no-commit-id",
|
|
@@ -361,57 +392,6 @@ async function rebuildRelease(root, process, parent, release) {
|
|
|
361
392
|
treeDigest: candidateDigest,
|
|
362
393
|
};
|
|
363
394
|
}
|
|
364
|
-
async function releaseTags(process, selectedSha) {
|
|
365
|
-
const text = await runOrThrow(process, "git", [
|
|
366
|
-
"for-each-ref",
|
|
367
|
-
"--format=%(refname:strip=2)%00%(objecttype)%00%(objectname)%00%(*objectname)%00",
|
|
368
|
-
"refs/tags",
|
|
369
|
-
]);
|
|
370
|
-
const fields = text.split("\0");
|
|
371
|
-
const tags = [];
|
|
372
|
-
for (let index = 0; index + 3 < fields.length; index += 4) {
|
|
373
|
-
const name = fields[index].replace(/^\n+/, "");
|
|
374
|
-
const objectType = fields[index + 1];
|
|
375
|
-
const objectName = fields[index + 2];
|
|
376
|
-
const peeled = fields[index + 3];
|
|
377
|
-
if (!name)
|
|
378
|
-
continue;
|
|
379
|
-
const target = objectType === "commit" ? objectName : peeled;
|
|
380
|
-
if (!sha.test(target))
|
|
381
|
-
continue;
|
|
382
|
-
const ancestor = await process.run("git", [
|
|
383
|
-
"merge-base",
|
|
384
|
-
"--is-ancestor",
|
|
385
|
-
target,
|
|
386
|
-
selectedSha,
|
|
387
|
-
]);
|
|
388
|
-
if (ancestor.code !== 0 && ancestor.code !== 1) {
|
|
389
|
-
throw new Error("Could not determine release-tag ancestry.");
|
|
390
|
-
}
|
|
391
|
-
tags.push({
|
|
392
|
-
name,
|
|
393
|
-
target,
|
|
394
|
-
lightweight: objectType === "commit",
|
|
395
|
-
targetIsAncestor: ancestor.code === 0,
|
|
396
|
-
});
|
|
397
|
-
}
|
|
398
|
-
return tags;
|
|
399
|
-
}
|
|
400
|
-
async function commitMessages(process, commits) {
|
|
401
|
-
const messages = [];
|
|
402
|
-
for (const commit of commits) {
|
|
403
|
-
if (!sha.test(commit)) {
|
|
404
|
-
throw new Error("Git returned an invalid commit SHA.");
|
|
405
|
-
}
|
|
406
|
-
messages.push((await runOrThrow(process, "git", [
|
|
407
|
-
"show",
|
|
408
|
-
"--no-patch",
|
|
409
|
-
"--format=%B",
|
|
410
|
-
commit,
|
|
411
|
-
])).replace(/\n+$/, ""));
|
|
412
|
-
}
|
|
413
|
-
return messages;
|
|
414
|
-
}
|
|
415
395
|
async function requireClean(process) {
|
|
416
396
|
const status = await runOrThrow(process, "git", [
|
|
417
397
|
"status",
|
|
@@ -497,3 +477,8 @@ function lines(value) {
|
|
|
497
477
|
async function digestText(text) {
|
|
498
478
|
return await digestBytes(new TextEncoder().encode(text));
|
|
499
479
|
}
|
|
480
|
+
function releaseRepository(environment) {
|
|
481
|
+
const repository = requiredEnvironment(environment, "GITHUB_REPOSITORY");
|
|
482
|
+
changelogRepositoryUrl(repository);
|
|
483
|
+
return repository;
|
|
484
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { runOrThrow } from "./release-process.js";
|
|
2
|
+
const sha = /^[0-9a-f]{40}(?:[0-9a-f]{24})?$/;
|
|
3
|
+
export async function releaseTags(process, selectedSha) {
|
|
4
|
+
const text = await runOrThrow(process, "git", [
|
|
5
|
+
"for-each-ref",
|
|
6
|
+
"--format=%(refname:strip=2)%00%(objecttype)%00%(objectname)%00%(*objectname)%00",
|
|
7
|
+
"refs/tags",
|
|
8
|
+
]);
|
|
9
|
+
const fields = text.split("\0");
|
|
10
|
+
const tags = [];
|
|
11
|
+
for (let index = 0; index + 3 < fields.length; index += 4) {
|
|
12
|
+
const name = fields[index].replace(/^\n+/, "");
|
|
13
|
+
const objectType = fields[index + 1];
|
|
14
|
+
const objectName = fields[index + 2];
|
|
15
|
+
const peeled = fields[index + 3];
|
|
16
|
+
if (!name)
|
|
17
|
+
continue;
|
|
18
|
+
const target = objectType === "commit" ? objectName : peeled;
|
|
19
|
+
if (!sha.test(target))
|
|
20
|
+
continue;
|
|
21
|
+
const ancestor = await process.run("git", [
|
|
22
|
+
"merge-base",
|
|
23
|
+
"--is-ancestor",
|
|
24
|
+
target,
|
|
25
|
+
selectedSha,
|
|
26
|
+
]);
|
|
27
|
+
if (ancestor.code !== 0 && ancestor.code !== 1) {
|
|
28
|
+
throw new Error("Could not determine release-tag ancestry.");
|
|
29
|
+
}
|
|
30
|
+
tags.push({
|
|
31
|
+
name,
|
|
32
|
+
target,
|
|
33
|
+
lightweight: objectType === "commit",
|
|
34
|
+
targetIsAncestor: ancestor.code === 0,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return tags;
|
|
38
|
+
}
|
|
39
|
+
export async function commitMessages(process, commits) {
|
|
40
|
+
const messages = [];
|
|
41
|
+
for (const commit of commits) {
|
|
42
|
+
if (!sha.test(commit)) {
|
|
43
|
+
throw new Error("Git returned an invalid commit SHA.");
|
|
44
|
+
}
|
|
45
|
+
messages.push((await runOrThrow(process, "git", [
|
|
46
|
+
"show",
|
|
47
|
+
"--no-patch",
|
|
48
|
+
"--format=%B",
|
|
49
|
+
commit,
|
|
50
|
+
])).replace(/\n+$/, ""));
|
|
51
|
+
}
|
|
52
|
+
return messages;
|
|
53
|
+
}
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@inquirer/core": "12.0.3",
|
|
12
12
|
"@jsr/std__path": "1.1.6",
|
|
13
|
+
"conventional-changelog-writer": "9.2.1",
|
|
14
|
+
"conventional-commits-parser": "7.1.2",
|
|
13
15
|
"fork-version": "5.2.0",
|
|
14
16
|
"jsonc-parser": "3.3.1",
|
|
15
17
|
"yaml": "2.8.3"
|
|
@@ -38,6 +40,15 @@
|
|
|
38
40
|
"node": ">=6.9.0"
|
|
39
41
|
}
|
|
40
42
|
},
|
|
43
|
+
"node_modules/@conventional-changelog/template": {
|
|
44
|
+
"version": "1.4.0",
|
|
45
|
+
"resolved": "https://registry.npmjs.org/@conventional-changelog/template/-/template-1.4.0.tgz",
|
|
46
|
+
"integrity": "sha512-aalGyl7dbB5PArRebDIX43ZvBlXrYm9uWzGJ26t+4SzJVPsOuvfILGGbw5X4yX7i50YEmJ8zvbiWnqH/AAnZqg==",
|
|
47
|
+
"license": "MIT",
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=22"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
41
52
|
"node_modules/@esbuild/aix-ppc64": {
|
|
42
53
|
"version": "0.28.0",
|
|
43
54
|
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz",
|
|
@@ -537,6 +548,18 @@
|
|
|
537
548
|
"@jsr/std__internal": "^1.0.14"
|
|
538
549
|
}
|
|
539
550
|
},
|
|
551
|
+
"node_modules/@simple-libs/stream-utils": {
|
|
552
|
+
"version": "2.0.0",
|
|
553
|
+
"resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-2.0.0.tgz",
|
|
554
|
+
"integrity": "sha512-fCTuZK4QBa+39Oz9l4OGfJfz+GpwCp3AqO7Zch3to99xHPgstVsRFpeQ8LNd2o1Gv8raL2mCFwiaHh7bFSp5DQ==",
|
|
555
|
+
"license": "MIT",
|
|
556
|
+
"engines": {
|
|
557
|
+
"node": ">=22"
|
|
558
|
+
},
|
|
559
|
+
"funding": {
|
|
560
|
+
"url": "https://ko-fi.com/dangreen"
|
|
561
|
+
}
|
|
562
|
+
},
|
|
540
563
|
"node_modules/@types/normalize-package-data": {
|
|
541
564
|
"version": "2.4.4",
|
|
542
565
|
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
|
|
@@ -549,6 +572,18 @@
|
|
|
549
572
|
"integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==",
|
|
550
573
|
"license": "MIT"
|
|
551
574
|
},
|
|
575
|
+
"node_modules/argue-cli": {
|
|
576
|
+
"version": "3.2.0",
|
|
577
|
+
"resolved": "https://registry.npmjs.org/argue-cli/-/argue-cli-3.2.0.tgz",
|
|
578
|
+
"integrity": "sha512-VipTB0gXgGIFO2Rg9yEVN5wLt2AurJcZqDbgmYSwPwsykhLrQhs240/bfceev4w68lI8JshoOJIk9uW7tFzROw==",
|
|
579
|
+
"license": "MIT",
|
|
580
|
+
"engines": {
|
|
581
|
+
"node": ">=22"
|
|
582
|
+
},
|
|
583
|
+
"funding": {
|
|
584
|
+
"url": "https://ko-fi.com/dangreen"
|
|
585
|
+
}
|
|
586
|
+
},
|
|
552
587
|
"node_modules/array-ify": {
|
|
553
588
|
"version": "1.0.0",
|
|
554
589
|
"resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
|
|
@@ -731,6 +766,65 @@
|
|
|
731
766
|
"node": ">=16"
|
|
732
767
|
}
|
|
733
768
|
},
|
|
769
|
+
"node_modules/conventional-changelog-core/node_modules/conventional-changelog-writer": {
|
|
770
|
+
"version": "7.0.1",
|
|
771
|
+
"resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-7.0.1.tgz",
|
|
772
|
+
"integrity": "sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==",
|
|
773
|
+
"license": "MIT",
|
|
774
|
+
"dependencies": {
|
|
775
|
+
"conventional-commits-filter": "^4.0.0",
|
|
776
|
+
"handlebars": "^4.7.7",
|
|
777
|
+
"json-stringify-safe": "^5.0.1",
|
|
778
|
+
"meow": "^12.0.1",
|
|
779
|
+
"semver": "^7.5.2",
|
|
780
|
+
"split2": "^4.0.0"
|
|
781
|
+
},
|
|
782
|
+
"bin": {
|
|
783
|
+
"conventional-changelog-writer": "cli.mjs"
|
|
784
|
+
},
|
|
785
|
+
"engines": {
|
|
786
|
+
"node": ">=16"
|
|
787
|
+
}
|
|
788
|
+
},
|
|
789
|
+
"node_modules/conventional-changelog-core/node_modules/conventional-commits-filter": {
|
|
790
|
+
"version": "4.0.0",
|
|
791
|
+
"resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz",
|
|
792
|
+
"integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==",
|
|
793
|
+
"license": "MIT",
|
|
794
|
+
"engines": {
|
|
795
|
+
"node": ">=16"
|
|
796
|
+
}
|
|
797
|
+
},
|
|
798
|
+
"node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": {
|
|
799
|
+
"version": "5.0.0",
|
|
800
|
+
"resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz",
|
|
801
|
+
"integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==",
|
|
802
|
+
"license": "MIT",
|
|
803
|
+
"dependencies": {
|
|
804
|
+
"is-text-path": "^2.0.0",
|
|
805
|
+
"JSONStream": "^1.3.5",
|
|
806
|
+
"meow": "^12.0.1",
|
|
807
|
+
"split2": "^4.0.0"
|
|
808
|
+
},
|
|
809
|
+
"bin": {
|
|
810
|
+
"conventional-commits-parser": "cli.mjs"
|
|
811
|
+
},
|
|
812
|
+
"engines": {
|
|
813
|
+
"node": ">=16"
|
|
814
|
+
}
|
|
815
|
+
},
|
|
816
|
+
"node_modules/conventional-changelog-core/node_modules/meow": {
|
|
817
|
+
"version": "12.1.1",
|
|
818
|
+
"resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
|
|
819
|
+
"integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
|
|
820
|
+
"license": "MIT",
|
|
821
|
+
"engines": {
|
|
822
|
+
"node": ">=16.10"
|
|
823
|
+
},
|
|
824
|
+
"funding": {
|
|
825
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
826
|
+
}
|
|
827
|
+
},
|
|
734
828
|
"node_modules/conventional-changelog-ember": {
|
|
735
829
|
"version": "4.0.0",
|
|
736
830
|
"resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-4.0.0.tgz",
|
|
@@ -794,74 +888,47 @@
|
|
|
794
888
|
}
|
|
795
889
|
},
|
|
796
890
|
"node_modules/conventional-changelog-writer": {
|
|
797
|
-
"version": "
|
|
798
|
-
"resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-
|
|
799
|
-
"integrity": "sha512-
|
|
891
|
+
"version": "9.2.1",
|
|
892
|
+
"resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-9.2.1.tgz",
|
|
893
|
+
"integrity": "sha512-StlYSmW3wLedRaqohJMpP3YuWiAqtgD0/cpsai9frdDkXv7rxj0hRbpJrubPYvJxJsjplONsOobEQnPuS9UgCg==",
|
|
800
894
|
"license": "MIT",
|
|
801
895
|
"dependencies": {
|
|
802
|
-
"conventional-
|
|
803
|
-
"
|
|
804
|
-
"
|
|
805
|
-
"
|
|
806
|
-
"semver": "^7.5.2"
|
|
807
|
-
"split2": "^4.0.0"
|
|
896
|
+
"@conventional-changelog/template": "^1.3.0",
|
|
897
|
+
"@simple-libs/stream-utils": "^2.0.0",
|
|
898
|
+
"argue-cli": "^3.1.0",
|
|
899
|
+
"conventional-commits-filter": "^6.0.1",
|
|
900
|
+
"semver": "^7.5.2"
|
|
808
901
|
},
|
|
809
902
|
"bin": {
|
|
810
|
-
"conventional-changelog-writer": "cli.
|
|
903
|
+
"conventional-changelog-writer": "dist/cli/index.js"
|
|
811
904
|
},
|
|
812
905
|
"engines": {
|
|
813
|
-
"node": ">=
|
|
814
|
-
}
|
|
815
|
-
},
|
|
816
|
-
"node_modules/conventional-changelog-writer/node_modules/meow": {
|
|
817
|
-
"version": "12.1.1",
|
|
818
|
-
"resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
|
|
819
|
-
"integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
|
|
820
|
-
"license": "MIT",
|
|
821
|
-
"engines": {
|
|
822
|
-
"node": ">=16.10"
|
|
823
|
-
},
|
|
824
|
-
"funding": {
|
|
825
|
-
"url": "https://github.com/sponsors/sindresorhus"
|
|
906
|
+
"node": ">=22"
|
|
826
907
|
}
|
|
827
908
|
},
|
|
828
909
|
"node_modules/conventional-commits-filter": {
|
|
829
|
-
"version": "
|
|
830
|
-
"resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-
|
|
831
|
-
"integrity": "sha512-
|
|
910
|
+
"version": "6.0.1",
|
|
911
|
+
"resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-6.0.1.tgz",
|
|
912
|
+
"integrity": "sha512-cs+LadpH7Kpw0M3k8wurk+sOVVDAENA0iK4OBOrkL94j5lEVYRJ4j3zd2bhY9qgzyrPqthdcYT3axzRN7AliMg==",
|
|
832
913
|
"license": "MIT",
|
|
833
914
|
"engines": {
|
|
834
|
-
"node": ">=
|
|
915
|
+
"node": ">=22"
|
|
835
916
|
}
|
|
836
917
|
},
|
|
837
918
|
"node_modules/conventional-commits-parser": {
|
|
838
|
-
"version": "
|
|
839
|
-
"resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-
|
|
840
|
-
"integrity": "sha512-
|
|
919
|
+
"version": "7.1.2",
|
|
920
|
+
"resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-7.1.2.tgz",
|
|
921
|
+
"integrity": "sha512-O+x4N2yH+ijvqWlIyTHsXTAP+algNWgGbjY2duCe8w2vUMvUB95cLRslCPfTMQyLAKlet3bhZTdu6ozn4M+QJQ==",
|
|
841
922
|
"license": "MIT",
|
|
842
923
|
"dependencies": {
|
|
843
|
-
"
|
|
844
|
-
"
|
|
845
|
-
"meow": "^12.0.1",
|
|
846
|
-
"split2": "^4.0.0"
|
|
924
|
+
"@simple-libs/stream-utils": "^2.0.0",
|
|
925
|
+
"argue-cli": "^3.1.0"
|
|
847
926
|
},
|
|
848
927
|
"bin": {
|
|
849
|
-
"conventional-commits-parser": "cli.
|
|
928
|
+
"conventional-commits-parser": "dist/cli/index.js"
|
|
850
929
|
},
|
|
851
930
|
"engines": {
|
|
852
|
-
"node": ">=
|
|
853
|
-
}
|
|
854
|
-
},
|
|
855
|
-
"node_modules/conventional-commits-parser/node_modules/meow": {
|
|
856
|
-
"version": "12.1.1",
|
|
857
|
-
"resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
|
|
858
|
-
"integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
|
|
859
|
-
"license": "MIT",
|
|
860
|
-
"engines": {
|
|
861
|
-
"node": ">=16.10"
|
|
862
|
-
},
|
|
863
|
-
"funding": {
|
|
864
|
-
"url": "https://github.com/sponsors/sindresorhus"
|
|
931
|
+
"node": ">=22"
|
|
865
932
|
}
|
|
866
933
|
},
|
|
867
934
|
"node_modules/css-select": {
|