pm-changelog 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ name: string;
3
+ version: string;
4
+ activate(api: import("@unbrained/pm-cli/sdk").ExtensionApi): void;
5
+ };
6
+ export default _default;
7
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;;;AAOA,wBAgGG"}
@@ -0,0 +1,101 @@
1
+ import { createChangelog, mergeChangelog, readPmItems, writeChangelog } from "./generator.js";
2
+ const defineExtension = ((extension) => extension);
3
+ export default defineExtension({
4
+ name: "pm-changelog",
5
+ version: "0.1.0",
6
+ activate(api) {
7
+ api.registerCommand({
8
+ name: "changelog generate",
9
+ description: "Generate a CHANGELOG.md file from pm items.",
10
+ intent: "generate changelog release notes from completed pm items",
11
+ examples: [
12
+ "pm changelog generate",
13
+ "pm changelog generate --release-version 1.2.0",
14
+ "pm changelog generate --output RELEASE_NOTES.md --since 2026-05-01",
15
+ "pm changelog generate --stdout --group-by release",
16
+ "pm changelog generate --stdout --group-by milestone",
17
+ "pm changelog generate --check --mode prepend --release-version 1.2.0",
18
+ ],
19
+ flags: [
20
+ { long: "--output", value_name: "file", description: "Output file path (default: CHANGELOG.md)" },
21
+ { long: "--stdout", description: "Return markdown instead of writing a file" },
22
+ { long: "--title", value_name: "text", description: "Changelog title (default: Changelog)" },
23
+ { long: "--release-version", value_name: "version", description: "Release/version heading (default: Unreleased)" },
24
+ { long: "--date", value_name: "date", description: "Release date (default: today)" },
25
+ { long: "--since", value_name: "date", description: "Include items changed on or after this date" },
26
+ { long: "--until", value_name: "date", description: "Include items changed on or before this date" },
27
+ { long: "--status", value_name: "list", description: "Comma-separated statuses (default: closed)" },
28
+ { long: "--group-by", value_name: "mode", description: "version, release, or milestone (default: version)" },
29
+ { long: "--mode", value_name: "mode", description: "replace or prepend existing changelog (default: replace)" },
30
+ { long: "--include-empty", description: "Emit an empty release section when no items match" },
31
+ { long: "--include-links", description: "Include item URLs in generated entries (default: false)" },
32
+ { long: "--check", description: "Do not write; report whether the changelog would change" },
33
+ ],
34
+ async run(ctx) {
35
+ const output = ctx.options["output"] ?? "CHANGELOG.md";
36
+ const stdout = Boolean(ctx.options["stdout"]);
37
+ const groupByOption = stringOption(ctx.options, "group-by", "groupBy") ?? "version";
38
+ const modeOption = ctx.options["mode"] ?? "replace";
39
+ if (groupByOption !== "version" && groupByOption !== "release" && groupByOption !== "milestone") {
40
+ return { error: "--group-by must be 'version', 'release', or 'milestone'" };
41
+ }
42
+ if (modeOption !== "replace" && modeOption !== "prepend") {
43
+ return { error: "--mode must be 'replace' or 'prepend'" };
44
+ }
45
+ const groupBy = groupByOption;
46
+ const mode = modeOption;
47
+ const statuses = ctx.options["status"]
48
+ ?.split(",")
49
+ .map((status) => status.trim())
50
+ .filter(Boolean);
51
+ const items = readPmItems({ pmRoot: ctx.pm_root });
52
+ const generationOptions = {
53
+ items,
54
+ title: ctx.options["title"],
55
+ version: stringOption(ctx.options, "release-version", "releaseVersion"),
56
+ date: ctx.options["date"],
57
+ since: ctx.options["since"],
58
+ until: ctx.options["until"],
59
+ includeStatuses: statuses,
60
+ groupBy,
61
+ includeEmpty: booleanOption(ctx.options, "include-empty", "includeEmpty"),
62
+ includeLinks: booleanOption(ctx.options, "include-links", "includeLinks"),
63
+ };
64
+ const generated = createChangelog(generationOptions);
65
+ if (stdout) {
66
+ const merged = mode === "prepend"
67
+ ? mergeChangelog(undefined, generated.markdown, { title: ctx.options["title"] })
68
+ : { markdown: generated.markdown, action: "replaced", changed: true };
69
+ return {
70
+ changelog: merged.markdown,
71
+ action: merged.action,
72
+ changed: merged.changed,
73
+ item_count: generated.itemCount,
74
+ };
75
+ }
76
+ const result = writeChangelog({
77
+ ...generationOptions,
78
+ output,
79
+ mode,
80
+ check: Boolean(ctx.options["check"]),
81
+ });
82
+ return {
83
+ file: result.output,
84
+ action: result.action,
85
+ changed: result.changed,
86
+ item_count: result.itemCount,
87
+ bytes: result.bytes,
88
+ check: Boolean(ctx.options["check"]),
89
+ };
90
+ },
91
+ });
92
+ },
93
+ });
94
+ function stringOption(options, kebabKey, camelKey) {
95
+ const value = options[kebabKey] ?? options[camelKey];
96
+ return typeof value === "string" ? value : undefined;
97
+ }
98
+ function booleanOption(options, kebabKey, camelKey) {
99
+ return Boolean(options[kebabKey] ?? options[camelKey]);
100
+ }
101
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { GeneratedChangelog, GenerateChangelogOptions, MergeChangelogOptions, MergeChangelogResult, PmItem, ReadPmItemsOptions, WriteChangelogOptions, WriteChangelogResult } from "./types.js";
2
+ export declare function generateChangelog(options: GenerateChangelogOptions): string;
3
+ export declare function createChangelog(options: GenerateChangelogOptions): GeneratedChangelog;
4
+ export declare function mergeChangelog(existingMarkdown: string | undefined, generatedMarkdown: string, options?: MergeChangelogOptions): MergeChangelogResult;
5
+ export declare function readPmItems(options?: ReadPmItemsOptions): PmItem[];
6
+ export declare function writeChangelog(options: WriteChangelogOptions): WriteChangelogResult;
7
+ export declare function parsePmItemsJson(raw: string): PmItem[];
8
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,MAAM,EACN,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAiBpB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,CAE3E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,wBAAwB,GAAG,kBAAkB,CAuCrF;AAED,wBAAgB,cAAc,CAC5B,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CA4CtB;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,EAAE,CAiBtE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CAqBnF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAKtD"}
@@ -0,0 +1,353 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ const DEFAULT_TITLE = "Changelog";
5
+ const DEFAULT_STATUSES = ["closed"];
6
+ const CATEGORY_ORDER = [
7
+ "Added",
8
+ "Changed",
9
+ "Fixed",
10
+ "Removed",
11
+ "Security",
12
+ "Deprecated",
13
+ "Other",
14
+ ];
15
+ export function generateChangelog(options) {
16
+ return createChangelog(options).markdown;
17
+ }
18
+ export function createChangelog(options) {
19
+ const title = options.title ?? DEFAULT_TITLE;
20
+ const items = filterItems(options);
21
+ const sections = buildSections(items, options);
22
+ const lines = [`# ${title}`, ""];
23
+ if (sections.length === 0) {
24
+ if (options.includeEmpty) {
25
+ const heading = buildVersionHeading(options.version, options.date);
26
+ lines.push(`## ${heading}`, "", "No changes.", "");
27
+ }
28
+ return {
29
+ markdown: lines.join("\n").trimEnd() + "\n",
30
+ sections,
31
+ itemCount: items.length,
32
+ };
33
+ }
34
+ for (const section of sections) {
35
+ lines.push(`## ${section.heading}`, "");
36
+ const grouped = groupByCategory(section.items);
37
+ for (const category of CATEGORY_ORDER) {
38
+ const categoryItems = grouped.get(category);
39
+ if (!categoryItems || categoryItems.length === 0)
40
+ continue;
41
+ lines.push(`### ${category}`, "");
42
+ for (const item of categoryItems) {
43
+ lines.push(`- ${formatItem(item, options)}`);
44
+ }
45
+ lines.push("");
46
+ }
47
+ }
48
+ return {
49
+ markdown: lines.join("\n").trimEnd() + "\n",
50
+ sections,
51
+ itemCount: items.length,
52
+ };
53
+ }
54
+ export function mergeChangelog(existingMarkdown, generatedMarkdown, options = {}) {
55
+ const existing = existingMarkdown?.trimEnd();
56
+ const generated = generatedMarkdown.trimEnd();
57
+ if (!existing) {
58
+ return {
59
+ markdown: generated + "\n",
60
+ action: "created",
61
+ changed: true,
62
+ };
63
+ }
64
+ const releaseSections = extractReleaseSections(generated);
65
+ if (releaseSections.length === 0) {
66
+ const unchanged = existing + "\n";
67
+ return {
68
+ markdown: unchanged,
69
+ action: "unchanged",
70
+ changed: false,
71
+ };
72
+ }
73
+ let next = ensureTitle(existing, options.title);
74
+ let action = "unchanged";
75
+ for (const releaseSection of releaseSections) {
76
+ const replacement = releaseSection.markdown.trimEnd();
77
+ const replaced = replaceReleaseSection(next, releaseSection.heading, replacement);
78
+ if (replaced.replaced) {
79
+ next = replaced.markdown;
80
+ action = "replaced";
81
+ continue;
82
+ }
83
+ next = insertAfterTitle(next, replacement);
84
+ if (action !== "replaced")
85
+ action = "inserted";
86
+ }
87
+ next = next.trimEnd() + "\n";
88
+ return {
89
+ markdown: next,
90
+ action,
91
+ changed: next !== existing + "\n",
92
+ };
93
+ }
94
+ export function readPmItems(options = {}) {
95
+ const pmBin = options.pmBin ?? "pm";
96
+ const args = [...(options.pmArgs ?? []), "list-all", "--json"];
97
+ if (options.pmRoot) {
98
+ args.unshift("--path", options.pmRoot);
99
+ }
100
+ const result = spawnSync(pmBin, args, {
101
+ cwd: options.cwd,
102
+ env: options.env,
103
+ encoding: "utf-8",
104
+ });
105
+ if (result.status !== 0) {
106
+ throw new Error(result.stderr || `${pmBin} list-all --json failed`);
107
+ }
108
+ return parsePmItemsJson(result.stdout);
109
+ }
110
+ export function writeChangelog(options) {
111
+ const output = resolve(options.output ?? "CHANGELOG.md");
112
+ const generated = createChangelog(options);
113
+ const mode = options.mode ?? "replace";
114
+ const existing = existsSync(output) ? readFileSync(output, "utf-8") : undefined;
115
+ const merged = mode === "prepend"
116
+ ? mergeChangelog(existing, generated.markdown, { title: options.title })
117
+ : replaceChangelog(existing, generated.markdown);
118
+ if (!options.check) {
119
+ writeFileSync(output, merged.markdown, "utf-8");
120
+ }
121
+ return {
122
+ output,
123
+ markdown: merged.markdown,
124
+ action: merged.action,
125
+ changed: merged.changed,
126
+ itemCount: generated.itemCount,
127
+ bytes: Buffer.byteLength(merged.markdown, "utf-8"),
128
+ };
129
+ }
130
+ export function parsePmItemsJson(raw) {
131
+ const parsed = JSON.parse(raw);
132
+ if (Array.isArray(parsed))
133
+ return parsed;
134
+ if (isRecord(parsed) && Array.isArray(parsed.items))
135
+ return parsed.items;
136
+ throw new Error("Expected pm JSON to be an array or an object with an items array");
137
+ }
138
+ function replaceChangelog(existingMarkdown, generatedMarkdown) {
139
+ const generated = generatedMarkdown.trimEnd() + "\n";
140
+ const existing = existingMarkdown?.trimEnd();
141
+ if (!existing) {
142
+ return {
143
+ markdown: generated,
144
+ action: "created",
145
+ changed: true,
146
+ };
147
+ }
148
+ const changed = generated !== existing + "\n";
149
+ return {
150
+ markdown: generated,
151
+ action: changed ? "replaced" : "unchanged",
152
+ changed,
153
+ };
154
+ }
155
+ function filterItems(options) {
156
+ const statuses = new Set((options.includeStatuses ?? DEFAULT_STATUSES).map((status) => status.toLowerCase()));
157
+ const since = options.since ? Date.parse(options.since) : undefined;
158
+ const until = options.until ? Date.parse(options.until) : undefined;
159
+ return options.items
160
+ .filter((item) => item.title)
161
+ .filter((item) => {
162
+ if (statuses.size === 0)
163
+ return true;
164
+ return statuses.has(String(item.status ?? "").toLowerCase());
165
+ })
166
+ .filter((item) => {
167
+ const timestamp = item.closed_at ?? item.updated_at ?? item.created_at;
168
+ if (!timestamp)
169
+ return since === undefined && until === undefined;
170
+ const value = Date.parse(timestamp);
171
+ if (Number.isNaN(value))
172
+ return false;
173
+ if (since !== undefined && value < since)
174
+ return false;
175
+ if (until !== undefined && value > until)
176
+ return false;
177
+ return true;
178
+ })
179
+ .sort(compareItems);
180
+ }
181
+ function buildSections(items, options) {
182
+ if (options.groupBy === "release" && !options.version) {
183
+ return groupSectionsByMetadata(items, "release", "Unreleased");
184
+ }
185
+ if (options.groupBy === "milestone" && !options.version) {
186
+ return groupSectionsByMetadata(items, "milestone", "Unreleased");
187
+ }
188
+ return [
189
+ {
190
+ heading: buildVersionHeading(options.version, options.date),
191
+ items,
192
+ },
193
+ ];
194
+ }
195
+ function groupSectionsByMetadata(items, field, fallback) {
196
+ const grouped = new Map();
197
+ for (const item of items) {
198
+ const key = getStringField(item, field) || fallback;
199
+ const group = grouped.get(key) ?? [];
200
+ group.push(item);
201
+ grouped.set(key, group);
202
+ }
203
+ return Array.from(grouped.entries()).map(([heading, groupedItems]) => ({
204
+ heading,
205
+ items: groupedItems,
206
+ }));
207
+ }
208
+ function buildVersionHeading(version, date) {
209
+ const heading = version?.trim() || "Unreleased";
210
+ const stamp = date?.trim() || formatLocalDate(new Date());
211
+ return `${heading} - ${stamp}`;
212
+ }
213
+ function extractReleaseSections(markdown) {
214
+ const releaseHeading = /^##\s+(.+)$/gm;
215
+ const matches = Array.from(markdown.matchAll(releaseHeading));
216
+ return matches.map((match, index) => {
217
+ const start = match.index ?? 0;
218
+ const next = matches[index + 1];
219
+ const end = next?.index ?? markdown.length;
220
+ return {
221
+ heading: match[1].trim(),
222
+ markdown: markdown.slice(start, end).trimEnd(),
223
+ };
224
+ });
225
+ }
226
+ function replaceReleaseSection(markdown, heading, replacement) {
227
+ const releaseHeading = /^##\s+(.+)$/gm;
228
+ const matches = Array.from(markdown.matchAll(releaseHeading));
229
+ const matchIndex = matches.findIndex((match) => match[1].trim() === heading);
230
+ if (matchIndex === -1)
231
+ return { markdown, replaced: false };
232
+ const match = matches[matchIndex];
233
+ const start = match.index ?? 0;
234
+ const nextMatch = matches[matchIndex + 1];
235
+ const end = nextMatch?.index ?? markdown.length;
236
+ const before = markdown.slice(0, start).trimEnd();
237
+ const after = markdown.slice(end).trimStart();
238
+ const merged = after ? `${before}\n\n${replacement}\n\n${after}` : `${before}\n\n${replacement}`;
239
+ return { markdown: merged, replaced: true };
240
+ }
241
+ function ensureTitle(markdown, title) {
242
+ if (/^#\s+.+$/m.test(markdown))
243
+ return markdown;
244
+ return `# ${title ?? DEFAULT_TITLE}\n\n${markdown.trimStart()}`;
245
+ }
246
+ function insertAfterTitle(markdown, releaseSection) {
247
+ const titleMatch = markdown.match(/^#\s+.+$/m);
248
+ if (!titleMatch || titleMatch.index === undefined) {
249
+ return `${releaseSection}\n\n${markdown.trimStart()}`;
250
+ }
251
+ const titleEnd = titleMatch.index + titleMatch[0].length;
252
+ const before = markdown.slice(0, titleEnd).trimEnd();
253
+ const after = markdown.slice(titleEnd).trim();
254
+ if (!after)
255
+ return `${before}\n\n${releaseSection}`;
256
+ return `${before}\n\n${releaseSection}\n\n${after}`;
257
+ }
258
+ function groupByCategory(items) {
259
+ const grouped = new Map();
260
+ for (const item of items) {
261
+ const category = classifyItem(item);
262
+ const categoryItems = grouped.get(category) ?? [];
263
+ categoryItems.push(item);
264
+ grouped.set(category, categoryItems);
265
+ }
266
+ return grouped;
267
+ }
268
+ function classifyItem(item) {
269
+ const values = [
270
+ item.type,
271
+ ...(item.tags ?? []),
272
+ item.title,
273
+ ]
274
+ .filter(Boolean)
275
+ .join(" ")
276
+ .toLowerCase();
277
+ if (hasAny(values, ["security", "cve", "vulnerability"]))
278
+ return "Security";
279
+ if (hasAny(values, ["deprecated", "deprecation"]))
280
+ return "Deprecated";
281
+ if (hasAny(values, ["removed", "remove", "deleted", "delete"]))
282
+ return "Removed";
283
+ if (hasAny(values, ["fix", "fixed", "bug", "bugfix", "hotfix", "regression"]))
284
+ return "Fixed";
285
+ if (hasAny(values, ["feature", "feat", "added", "add", "new"]))
286
+ return "Added";
287
+ if (hasAny(values, ["change", "changed", "refactor", "update", "updated", "improve"])) {
288
+ return "Changed";
289
+ }
290
+ return "Other";
291
+ }
292
+ function hasAny(value, needles) {
293
+ return needles.some((needle) => new RegExp(`\\b${escapeRegExp(needle)}\\b`).test(value));
294
+ }
295
+ function formatItem(item, options) {
296
+ const title = escapeMarkdown(toSingleLine(item.title));
297
+ const id = item.id ? ` (${escapeMarkdown(item.id)})` : "";
298
+ const link = options.includeLinks ? formatLink(item.url) : "";
299
+ return `${title}${id}${link}`;
300
+ }
301
+ function formatLink(url) {
302
+ if (!url)
303
+ return "";
304
+ try {
305
+ const parsed = new URL(toSingleLine(url));
306
+ if (parsed.protocol !== "https:" && parsed.protocol !== "http:")
307
+ return "";
308
+ parsed.username = "";
309
+ parsed.password = "";
310
+ parsed.search = "";
311
+ parsed.hash = "";
312
+ return ` [link](${parsed.href.replace(/\)/g, "%29")})`;
313
+ }
314
+ catch {
315
+ return "";
316
+ }
317
+ }
318
+ function getStringField(item, field) {
319
+ const direct = item[field];
320
+ if (typeof direct === "string" && direct.trim())
321
+ return direct.trim();
322
+ const fromMetadata = item.metadata?.[field];
323
+ if (typeof fromMetadata === "string" && fromMetadata.trim())
324
+ return fromMetadata.trim();
325
+ return undefined;
326
+ }
327
+ function compareItems(a, b) {
328
+ const aTime = Date.parse(a.closed_at ?? a.updated_at ?? a.created_at ?? "");
329
+ const bTime = Date.parse(b.closed_at ?? b.updated_at ?? b.created_at ?? "");
330
+ if (!Number.isNaN(aTime) && !Number.isNaN(bTime) && aTime !== bTime) {
331
+ return bTime - aTime;
332
+ }
333
+ return a.title.localeCompare(b.title);
334
+ }
335
+ function escapeMarkdown(value) {
336
+ return value.replace(/([\\`*_[\]()#|>])/g, "\\$1");
337
+ }
338
+ function toSingleLine(value) {
339
+ return value.trim().replace(/\s+/g, " ");
340
+ }
341
+ function escapeRegExp(value) {
342
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
343
+ }
344
+ function isRecord(value) {
345
+ return typeof value === "object" && value !== null;
346
+ }
347
+ function formatLocalDate(date) {
348
+ const year = date.getFullYear();
349
+ const month = String(date.getMonth() + 1).padStart(2, "0");
350
+ const day = String(date.getDate()).padStart(2, "0");
351
+ return `${year}-${month}-${day}`;
352
+ }
353
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { createChangelog, generateChangelog, mergeChangelog, parsePmItemsJson, readPmItems, writeChangelog, } from "./generator.js";
2
+ export type { ChangelogGroupBy, ChangelogSection, ChangelogMergeAction, ChangelogOutputMode, GeneratedChangelog, GenerateChangelogOptions, MergeChangelogOptions, MergeChangelogResult, PmItem, PmItemStatus, ReadPmItemsOptions, WriteChangelogOptions, WriteChangelogResult, } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { createChangelog, generateChangelog, mergeChangelog, parsePmItemsJson, readPmItems, writeChangelog, } from "./generator.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,cAAc,GACf,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,71 @@
1
+ export type PmItemStatus = "open" | "in_progress" | "blocked" | "closed" | "canceled" | "draft" | string;
2
+ export interface PmItem {
3
+ id?: string;
4
+ title: string;
5
+ body?: string;
6
+ status?: PmItemStatus;
7
+ priority?: number;
8
+ type?: string;
9
+ tags?: string[];
10
+ release?: string;
11
+ milestone?: string;
12
+ metadata?: Record<string, unknown>;
13
+ url?: string;
14
+ created_at?: string;
15
+ updated_at?: string;
16
+ closed_at?: string;
17
+ due_date?: string;
18
+ }
19
+ export type ChangelogGroupBy = "version" | "release" | "milestone";
20
+ export interface GenerateChangelogOptions {
21
+ items: PmItem[];
22
+ title?: string;
23
+ version?: string;
24
+ date?: string;
25
+ since?: string;
26
+ until?: string;
27
+ includeStatuses?: string[];
28
+ groupBy?: ChangelogGroupBy;
29
+ includeEmpty?: boolean;
30
+ includeLinks?: boolean;
31
+ }
32
+ export interface GeneratedChangelog {
33
+ markdown: string;
34
+ sections: ChangelogSection[];
35
+ itemCount: number;
36
+ }
37
+ export type ChangelogOutputMode = "replace" | "prepend";
38
+ export type ChangelogMergeAction = "created" | "inserted" | "replaced" | "unchanged";
39
+ export interface MergeChangelogOptions {
40
+ title?: string;
41
+ }
42
+ export interface MergeChangelogResult {
43
+ markdown: string;
44
+ action: ChangelogMergeAction;
45
+ changed: boolean;
46
+ }
47
+ export interface ReadPmItemsOptions {
48
+ pmRoot?: string;
49
+ pmBin?: string;
50
+ pmArgs?: string[];
51
+ cwd?: string;
52
+ env?: NodeJS.ProcessEnv;
53
+ }
54
+ export interface WriteChangelogOptions extends GenerateChangelogOptions {
55
+ output?: string;
56
+ mode?: ChangelogOutputMode;
57
+ check?: boolean;
58
+ }
59
+ export interface WriteChangelogResult {
60
+ output: string;
61
+ markdown: string;
62
+ action: ChangelogMergeAction;
63
+ changed: boolean;
64
+ itemCount: number;
65
+ bytes: number;
66
+ }
67
+ export interface ChangelogSection {
68
+ heading: string;
69
+ items: PmItem[];
70
+ }
71
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}