gh-inari 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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -0
  3. package/dist/artifact.d.ts +82 -0
  4. package/dist/artifact.js +472 -0
  5. package/dist/artifact.js.map +1 -0
  6. package/dist/cli.d.ts +14 -0
  7. package/dist/cli.js +395 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/contract/index.d.ts +4 -0
  10. package/dist/contract/index.js +5 -0
  11. package/dist/contract/index.js.map +1 -0
  12. package/dist/contract/ir.d.ts +178 -0
  13. package/dist/contract/ir.js +1071 -0
  14. package/dist/contract/ir.js.map +1 -0
  15. package/dist/contract/issue-form.d.ts +38 -0
  16. package/dist/contract/issue-form.js +662 -0
  17. package/dist/contract/issue-form.js.map +1 -0
  18. package/dist/contract/schema.d.ts +48 -0
  19. package/dist/contract/schema.js +162 -0
  20. package/dist/contract/schema.js.map +1 -0
  21. package/dist/contract/validation.d.ts +24 -0
  22. package/dist/contract/validation.js +212 -0
  23. package/dist/contract/validation.js.map +1 -0
  24. package/dist/github/adapter.d.ts +48 -0
  25. package/dist/github/adapter.js +463 -0
  26. package/dist/github/adapter.js.map +1 -0
  27. package/dist/github/errors.d.ts +43 -0
  28. package/dist/github/errors.js +65 -0
  29. package/dist/github/errors.js.map +1 -0
  30. package/dist/github/index.d.ts +4 -0
  31. package/dist/github/index.js +5 -0
  32. package/dist/github/index.js.map +1 -0
  33. package/dist/github/transport.d.ts +19 -0
  34. package/dist/github/transport.js +54 -0
  35. package/dist/github/transport.js.map +1 -0
  36. package/dist/github/types.d.ts +62 -0
  37. package/dist/github/types.js +16 -0
  38. package/dist/github/types.js.map +1 -0
  39. package/dist/github.d.ts +1 -0
  40. package/dist/github.js +2 -0
  41. package/dist/github.js.map +1 -0
  42. package/dist/index.d.ts +10 -0
  43. package/dist/index.js +32 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/pr-policy.d.ts +39 -0
  46. package/dist/pr-policy.js +313 -0
  47. package/dist/pr-policy.js.map +1 -0
  48. package/dist/pull-request-template.d.ts +42 -0
  49. package/dist/pull-request-template.js +481 -0
  50. package/dist/pull-request-template.js.map +1 -0
  51. package/dist/template-discovery.d.ts +68 -0
  52. package/dist/template-discovery.js +431 -0
  53. package/dist/template-discovery.js.map +1 -0
  54. package/gh-inari +18 -0
  55. package/package.json +92 -0
@@ -0,0 +1,481 @@
1
+ import { readFile as readFileAsync } from "node:fs/promises";
2
+ import { readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { assertCanonicalContract, CANONICAL_IR_VERSION, CONTRACT_SCHEMA_VERSION, } from "./contract/ir.js";
5
+ import { discoverTemplates, discoverTemplatesSync, selectPullRequestTemplate, } from "./template-discovery.js";
6
+ /** A typed failure raised when the supported PR-template subset cannot be represented safely. */
7
+ export class PullRequestTemplateError extends Error {
8
+ code;
9
+ details;
10
+ constructor(code, message, details = {}, options) {
11
+ super(message, options);
12
+ this.name = "PullRequestTemplateError";
13
+ this.code = code;
14
+ this.details = details;
15
+ }
16
+ toJSON() {
17
+ return { code: this.code, message: this.message, details: this.details };
18
+ }
19
+ }
20
+ /**
21
+ * Parse one repository-native PR template into the existing canonical IR.
22
+ *
23
+ * The identity is deliberately the discovery-layer identity. This keeps
24
+ * filesystem discovery and parsing as separate concerns while ensuring the
25
+ * compiled contract cannot be detached from a native template path.
26
+ */
27
+ export function parsePullRequestTemplate(markdown, identity) {
28
+ assertPullRequestIdentity(identity);
29
+ if (typeof markdown !== "string") {
30
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", "Pull request template content must be a string.", { reason: "non-string template content" });
31
+ }
32
+ const lines = normalizeSource(markdown).split("\n");
33
+ const lexedLines = lexLines(lines);
34
+ assertNoUnsupportedTaskContexts(lexedLines);
35
+ const headings = findHeadings(lexedLines);
36
+ const sections = [];
37
+ const usedIds = new Set();
38
+ if (headings.length === 0) {
39
+ const content = trimBlankLines(lines.join("\n"));
40
+ if (content === undefined) {
41
+ throw new PullRequestTemplateError("PR_TEMPLATE_EMPTY", "Pull request template contains no renderable content.");
42
+ }
43
+ if (containsTopLevelTask(lexedLines)) {
44
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", "A top-level checklist requires a heading section in the supported PR-template representation.", { construct: "top-level checklist" });
45
+ }
46
+ sections.push(createDocumentationSection(content, 0, usedIds));
47
+ }
48
+ else {
49
+ const preamble = trimBlankLines(lines.slice(0, headings[0]?.start ?? 0).join("\n"));
50
+ if (preamble !== undefined)
51
+ sections.push(createDocumentationSection(preamble, sections.length, usedIds, "preamble_content"));
52
+ headings.forEach((heading, headingIndex) => {
53
+ const nextHeading = headings[headingIndex + 1];
54
+ const bodyStart = heading.end + 1;
55
+ const bodyEnd = nextHeading?.start ?? lines.length;
56
+ const body = lexedLines.slice(bodyStart, bodyEnd);
57
+ sections.push(...createInputSections(heading, body, sections.length, usedIds));
58
+ });
59
+ }
60
+ const contract = {
61
+ irVersion: CANONICAL_IR_VERSION,
62
+ schemaVersion: CONTRACT_SCHEMA_VERSION,
63
+ artifactKind: "pull_request",
64
+ templateIdentity: {
65
+ id: toCanonicalIdentifier(identity.id, "template"),
66
+ name: identity.name,
67
+ path: identity.path,
68
+ source: "pull_request_template",
69
+ },
70
+ nativeMetadata: {
71
+ source: "pull_request_template",
72
+ path: identity.path,
73
+ },
74
+ sections,
75
+ supplementalConstraints: { fields: [] },
76
+ };
77
+ assertCanonicalContract(contract);
78
+ return contract;
79
+ }
80
+ /** Compile one discovered native PR template from a repository root. */
81
+ export async function compilePullRequestTemplate(repositoryRoot = process.cwd(), selector) {
82
+ const discovery = await discoverTemplates(repositoryRoot);
83
+ const identity = selectPullRequestTemplate(discovery, selector);
84
+ return parsePullRequestTemplate(await readTemplate(discovery.repositoryRoot, identity), identity);
85
+ }
86
+ /** Synchronous counterpart for callers that already operate synchronously. */
87
+ export function compilePullRequestTemplateSync(repositoryRoot = process.cwd(), selector) {
88
+ const discovery = discoverTemplatesSync(repositoryRoot);
89
+ const identity = selectPullRequestTemplate(discovery, selector);
90
+ return parsePullRequestTemplate(readTemplateSync(discovery.repositoryRoot, identity), identity);
91
+ }
92
+ /** Compile all native PR templates in the discovery layer's stable order. */
93
+ export async function compilePullRequestTemplates(repositoryRoot = process.cwd()) {
94
+ const discovery = await discoverTemplates(repositoryRoot);
95
+ return Promise.all(discovery.pullRequestTemplates.map(async (identity) => parsePullRequestTemplate(await readTemplate(discovery.repositoryRoot, identity), identity)));
96
+ }
97
+ /** Synchronous counterpart of compilePullRequestTemplates. */
98
+ export function compilePullRequestTemplatesSync(repositoryRoot = process.cwd()) {
99
+ const discovery = discoverTemplatesSync(repositoryRoot);
100
+ return discovery.pullRequestTemplates.map((identity) => parsePullRequestTemplate(readTemplateSync(discovery.repositoryRoot, identity), identity));
101
+ }
102
+ /**
103
+ * Render the structural portion of a validated PR contract as canonical GFM.
104
+ * No placeholder, requirement, or policy is invented when the IR does not
105
+ * contain one.
106
+ */
107
+ export function renderPullRequestTemplate(input) {
108
+ assertCanonicalContract(input);
109
+ if (input.artifactKind !== "pull_request") {
110
+ throw new PullRequestTemplateError("PR_TEMPLATE_NOT_PULL_REQUEST", "Only pull request contracts can be rendered as pull request templates.");
111
+ }
112
+ const blocks = input.sections.map(renderSection).filter((block) => block.length > 0);
113
+ if (blocks.length === 0) {
114
+ throw new PullRequestTemplateError("PR_TEMPLATE_EMPTY", "Pull request contract contains no renderable sections.");
115
+ }
116
+ return `${blocks.join("\n\n")}\n`;
117
+ }
118
+ function createDocumentationSection(content, order, usedIds, base = "content") {
119
+ const id = uniqueOrThrow(toCanonicalIdentifier(base, "content"), usedIds, undefined, "literal content section");
120
+ return {
121
+ id,
122
+ kind: "documentation",
123
+ content,
124
+ render: { order },
125
+ nativeMetadata: { elementType: "markdown", sourceId: id, markdown: content },
126
+ fields: [],
127
+ };
128
+ }
129
+ function createInputSections(heading, body, order, usedIds) {
130
+ const id = uniqueOrThrow(toCanonicalIdentifier(heading.title, "section"), usedIds, heading.line, "heading section");
131
+ const checklist = parseChecklistBody(body);
132
+ const field = checklist === undefined
133
+ ? createStringField(id, heading.title, body)
134
+ : createChecklistField(id, heading.title, checklist);
135
+ const sections = [
136
+ {
137
+ id,
138
+ title: heading.title,
139
+ kind: "input",
140
+ render: { order, headingLevel: heading.level },
141
+ nativeMetadata: { elementType: "heading", sourceId: id, headingLevel: heading.level },
142
+ fields: [field],
143
+ },
144
+ ];
145
+ if (checklist?.trailingContent !== undefined) {
146
+ sections.push(createDocumentationSection(checklist.trailingContent, order + 1, usedIds, `content_after_${id}`));
147
+ }
148
+ return sections;
149
+ }
150
+ function createStringField(id, label, body) {
151
+ const placeholder = trimBlankLines(body.map((line) => line.text).join("\n"));
152
+ return {
153
+ id,
154
+ label,
155
+ type: "string",
156
+ required: "unknown",
157
+ render: { order: 0 },
158
+ nativeMetadata: {
159
+ elementType: "pr_section",
160
+ sourceId: id,
161
+ ...(placeholder === undefined ? {} : { placeholder }),
162
+ },
163
+ };
164
+ }
165
+ function createChecklistField(id, label, body) {
166
+ const items = [];
167
+ const itemIds = new Set();
168
+ const checked = [];
169
+ body.items.forEach((item, index) => {
170
+ const itemId = toCanonicalIdentifier(item.label, "item", index + 1);
171
+ if (itemIds.has(itemId)) {
172
+ throw new PullRequestTemplateError("PR_TEMPLATE_AMBIGUOUS_STRUCTURE", `Checklist item labels produce duplicate structural identity "${itemId}".`, { line: item.line, construct: "checklist item identity" });
173
+ }
174
+ itemIds.add(itemId);
175
+ items.push({ id: itemId, label: item.label, required: false });
176
+ if (item.checked)
177
+ checked.push(itemId);
178
+ });
179
+ const defaultValue = checked.length === 0 ? undefined : checked;
180
+ return {
181
+ id,
182
+ label,
183
+ type: "checklist",
184
+ required: "unknown",
185
+ items,
186
+ render: { order: 0 },
187
+ nativeMetadata: {
188
+ elementType: "pr_section",
189
+ sourceId: id,
190
+ ...(body.placeholder === undefined ? {} : { placeholder: body.placeholder }),
191
+ ...(defaultValue === undefined ? {} : { defaultValue }),
192
+ options: items.map((item) => ({ value: item.id })),
193
+ },
194
+ ...(defaultValue === undefined ? {} : { defaultValue }),
195
+ };
196
+ }
197
+ function parseChecklistBody(body) {
198
+ const tasks = [];
199
+ body.forEach((line, sourceIndex) => {
200
+ if (line.protected || line.text.trim().length === 0)
201
+ return;
202
+ const listItem = parseListItem(line.text);
203
+ if (listItem === undefined)
204
+ return;
205
+ if (listItem.indent > 0 && listItem.task !== undefined) {
206
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", "Nested task lists are not representable in the canonical PR section model.", { line: line.line, construct: "nested checklist" });
207
+ }
208
+ if (listItem.task === undefined) {
209
+ return;
210
+ }
211
+ if (listItem.indent > 0) {
212
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", "Indented checklist items are not representable in the canonical PR section model.", { line: line.line, construct: "nested checklist" });
213
+ }
214
+ tasks.push({
215
+ line: line.line,
216
+ sourceIndex,
217
+ checked: listItem.task.checked,
218
+ label: listItem.task.label,
219
+ });
220
+ });
221
+ if (tasks.length === 0)
222
+ return undefined;
223
+ const firstTask = tasks[0];
224
+ const lastTask = tasks[tasks.length - 1];
225
+ if (firstTask === undefined || lastTask === undefined)
226
+ return undefined;
227
+ for (let index = firstTask.sourceIndex + 1; index < lastTask.sourceIndex; index += 1) {
228
+ const line = body[index];
229
+ if (line !== undefined &&
230
+ !line.protected &&
231
+ line.text.trim().length > 0 &&
232
+ parseListItem(line.text)?.task === undefined) {
233
+ throw new PullRequestTemplateError("PR_TEMPLATE_AMBIGUOUS_STRUCTURE", "Checklist items must form one contiguous structural block.", { line: line.line, construct: "checklist block" });
234
+ }
235
+ }
236
+ const placeholder = trimBlankLines(body
237
+ .slice(0, firstTask.sourceIndex)
238
+ .map((line) => line.text)
239
+ .join("\n"));
240
+ const trailingContent = trimBlankLines(body
241
+ .slice(lastTask.sourceIndex + 1)
242
+ .map((line) => line.text)
243
+ .join("\n"));
244
+ return {
245
+ items: tasks,
246
+ ...(placeholder === undefined ? {} : { placeholder }),
247
+ ...(trailingContent === undefined ? {} : { trailingContent }),
248
+ };
249
+ }
250
+ function parseListItem(text) {
251
+ const match = /^(?<indent>[ \t]*)(?<marker>[-+*]|\d+[.)])(?:[ \t]+)(?<rest>.*)$/u.exec(text);
252
+ if (match === null)
253
+ return undefined;
254
+ const indentText = match.groups?.indent ?? "";
255
+ const indent = [...indentText].reduce((total, character) => total + (character === "\t" ? 4 : 1), 0);
256
+ const rest = match.groups?.rest ?? "";
257
+ const taskMatch = /^\[([ xX])\](?:[ \t]+(.+)|[ \t]*)$/u.exec(rest);
258
+ if (taskMatch === null)
259
+ return { indent };
260
+ const label = taskMatch[2]?.trim() ?? "";
261
+ if (label.length === 0) {
262
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", "Checklist items must contain a non-empty label.", { construct: "empty checklist item" });
263
+ }
264
+ return { indent, task: { checked: taskMatch[1]?.toLowerCase() === "x", label } };
265
+ }
266
+ function containsTopLevelTask(lexed) {
267
+ return lexed.some((line) => !line.protected && parseListItem(line.text)?.task !== undefined);
268
+ }
269
+ function assertNoUnsupportedTaskContexts(lines) {
270
+ for (const line of lines) {
271
+ if (!line.protected && /^ {0,3}>[ \t]+(?:[-+*]|\d+[.)])[ \t]+\[[ xX]\]/u.test(line.text)) {
272
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", "Checklist items inside blockquotes are not representable in the canonical PR section model.", { line: line.line, construct: "blockquote checklist" });
273
+ }
274
+ }
275
+ }
276
+ function findHeadings(lines) {
277
+ const headings = [];
278
+ for (let index = 0; index < lines.length; index += 1) {
279
+ const line = lines[index];
280
+ if (line === undefined || line.protected)
281
+ continue;
282
+ const atx = parseAtxHeading(line.text);
283
+ if (atx !== undefined) {
284
+ headings.push({ start: index, end: index, line: line.line, level: atx.level, title: atx.title });
285
+ continue;
286
+ }
287
+ if (/^[ \t]+#{1,6}(?:[ \t]+|$)/u.test(line.text)) {
288
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", "Indented headings are not supported because their list/block context is ambiguous.", { line: line.line, construct: "indented heading" });
289
+ }
290
+ const underline = lines[index + 1];
291
+ if (underline === undefined || underline.protected || !/^([=-])\1{1,}[ \t]*$/u.test(underline.text))
292
+ continue;
293
+ const title = line.text.trim();
294
+ if (title.length === 0 || isBlockLikeLine(line.text))
295
+ continue;
296
+ const level = underline.text.trimStart().startsWith("=") ? 1 : 2;
297
+ headings.push({ start: index, end: index + 1, line: line.line, level, title });
298
+ index += 1;
299
+ }
300
+ return headings;
301
+ }
302
+ function parseAtxHeading(text) {
303
+ const match = /^(?<marks>#{1,6})(?:[ \t]+(?<title>.*?)|[ \t]*)$/u.exec(text);
304
+ if (match === null)
305
+ return undefined;
306
+ let title = (match.groups?.title ?? "").trim();
307
+ title = title.replace(/[ \t]+#+[ \t]*$/u, "").trim();
308
+ if (title.length === 0) {
309
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", "Headings must contain a title.", {
310
+ construct: "empty heading",
311
+ });
312
+ }
313
+ return { level: match.groups?.marks?.length ?? 1, title };
314
+ }
315
+ function isBlockLikeLine(text) {
316
+ return /^(?:[ \t]*)(?:[-+*]|\d+[.)])[ \t]+|[ \t]*>|[ \t]*```|[ \t]*~~~|[ \t]*#/u.test(text);
317
+ }
318
+ function lexLines(lines) {
319
+ const lexed = [];
320
+ let fence;
321
+ let commentStart;
322
+ let commentOpen = false;
323
+ lines.forEach((text, index) => {
324
+ const line = index + 1;
325
+ if (fence !== undefined) {
326
+ lexed.push({ text, line, protected: true });
327
+ if (isClosingFence(text, fence))
328
+ fence = undefined;
329
+ return;
330
+ }
331
+ if (commentOpen) {
332
+ lexed.push({ text, line, protected: true });
333
+ if (text.includes("-->") === true)
334
+ commentOpen = false;
335
+ return;
336
+ }
337
+ const openingFence = parseOpeningFence(text);
338
+ if (openingFence !== undefined) {
339
+ fence = openingFence;
340
+ lexed.push({ text, line, protected: true });
341
+ return;
342
+ }
343
+ const commentIndex = text.indexOf("<!--");
344
+ if (commentIndex >= 0) {
345
+ lexed.push({ text, line, protected: true });
346
+ if (text.indexOf("-->", commentIndex + 4) < 0) {
347
+ commentOpen = true;
348
+ commentStart = line;
349
+ }
350
+ return;
351
+ }
352
+ lexed.push({ text, line, protected: false });
353
+ });
354
+ if (commentOpen) {
355
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", "HTML comment is not closed.", {
356
+ line: commentStart,
357
+ construct: "unclosed HTML comment",
358
+ });
359
+ }
360
+ return lexed;
361
+ }
362
+ function parseOpeningFence(text) {
363
+ const match = /^(?: {0,3})(?<marker>`{3,}|~{3,})/u.exec(text);
364
+ if (match === null)
365
+ return undefined;
366
+ const marker = match.groups?.marker;
367
+ if (marker === undefined)
368
+ return undefined;
369
+ return { character: marker[0], length: marker.length };
370
+ }
371
+ function isClosingFence(text, fence) {
372
+ const escapedCharacter = fence.character === "`" ? "`" : "~";
373
+ const pattern = new RegExp(`^ {0,3}${escapedCharacter}{${fence.length},}[ \\t]*$`, "u");
374
+ return pattern.test(text);
375
+ }
376
+ function normalizeSource(markdown) {
377
+ return markdown.replace(/^\uFEFF/u, "").replace(/\r\n?/gu, "\n");
378
+ }
379
+ function trimBlankLines(value) {
380
+ const lines = value.split("\n");
381
+ while (lines[0] !== undefined && lines[0].trim().length === 0)
382
+ lines.shift();
383
+ while (lines.at(-1) !== undefined && lines.at(-1)?.trim().length === 0)
384
+ lines.pop();
385
+ if (lines.length === 0)
386
+ return undefined;
387
+ const result = lines.join("\n");
388
+ return result.length === 0 ? undefined : result;
389
+ }
390
+ function uniqueOrThrow(base, usedIds, line, construct) {
391
+ if (usedIds.has(base)) {
392
+ throw new PullRequestTemplateError("PR_TEMPLATE_AMBIGUOUS_STRUCTURE", `Structural identity "${base}" is not unique in the template.`, { line, construct });
393
+ }
394
+ usedIds.add(base);
395
+ return base;
396
+ }
397
+ function toCanonicalIdentifier(value, prefix, fallbackIndex) {
398
+ let identifier = "";
399
+ for (const character of value.normalize("NFKC")) {
400
+ if (/^[A-Za-z0-9_-]$/u.test(character)) {
401
+ identifier += character.toLocaleLowerCase("en-US");
402
+ }
403
+ else if (/^[\u0000-\u007F]$/u.test(character)) {
404
+ if (!identifier.endsWith("_"))
405
+ identifier += "_";
406
+ }
407
+ else {
408
+ const codePoint = character.codePointAt(0);
409
+ identifier += `_${(codePoint ?? 0).toString(16)}_`;
410
+ }
411
+ }
412
+ identifier = identifier.replace(/^_+|_+$/gu, "");
413
+ if (identifier.length === 0)
414
+ identifier = `${prefix}_${fallbackIndex ?? 1}`;
415
+ if (!/^[A-Za-z]/u.test(identifier))
416
+ identifier = `${prefix}_${identifier}`;
417
+ return identifier;
418
+ }
419
+ function assertPullRequestIdentity(identity) {
420
+ if (identity.kind !== "pull-request") {
421
+ throw new PullRequestTemplateError("PR_TEMPLATE_NOT_PULL_REQUEST", "Only repository-native pull request template identities can be compiled.", { path: identity.path, reason: "identity kind is not pull-request" });
422
+ }
423
+ }
424
+ async function readTemplate(repositoryRoot, identity) {
425
+ try {
426
+ return await readFileAsync(path.join(repositoryRoot, identity.path), "utf8");
427
+ }
428
+ catch (error) {
429
+ throw new PullRequestTemplateError("PR_TEMPLATE_READ_FAILED", `Cannot read pull request template ${identity.path}.`, { path: identity.path, reason: "filesystem read failed" }, { cause: error });
430
+ }
431
+ }
432
+ function readTemplateSync(repositoryRoot, identity) {
433
+ try {
434
+ return readFileSync(path.join(repositoryRoot, identity.path), "utf8");
435
+ }
436
+ catch (error) {
437
+ throw new PullRequestTemplateError("PR_TEMPLATE_READ_FAILED", `Cannot read pull request template ${identity.path}.`, { path: identity.path, reason: "filesystem read failed" }, { cause: error });
438
+ }
439
+ }
440
+ function renderSection(section) {
441
+ if (section.kind === "documentation") {
442
+ const content = trimBlankLines(section.content ?? "");
443
+ if (content === undefined)
444
+ return "";
445
+ if (section.title === undefined)
446
+ return content;
447
+ const level = section.render.headingLevel ?? section.nativeMetadata.headingLevel;
448
+ if (level === undefined) {
449
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", `Documentation section "${section.id}" has a title but no heading level.`, { construct: "documentation heading" });
450
+ }
451
+ return [`${"#".repeat(level)} ${section.title}`, content].join("\n\n");
452
+ }
453
+ if (section.title === undefined) {
454
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", `Input section "${section.id}" has no heading title.`, { construct: "input section heading" });
455
+ }
456
+ const level = section.render.headingLevel ?? section.nativeMetadata.headingLevel;
457
+ if (level === undefined) {
458
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", `Input section "${section.id}" has no heading level.`, { construct: "input section heading" });
459
+ }
460
+ const blocks = [`${"#".repeat(level)} ${section.title}`];
461
+ section.fields.forEach((field) => {
462
+ if (field.type === "string") {
463
+ appendOptionalBlock(blocks, field.nativeMetadata.placeholder);
464
+ return;
465
+ }
466
+ if (field.type === "checklist") {
467
+ appendOptionalBlock(blocks, field.nativeMetadata.placeholder);
468
+ const checked = new Set(field.defaultValue ?? []);
469
+ blocks.push(field.items.map((item) => `- [${checked.has(item.id) ? "x" : " "}] ${item.label}`).join("\n"));
470
+ return;
471
+ }
472
+ throw new PullRequestTemplateError("PR_TEMPLATE_UNSUPPORTED_CONSTRUCT", `Field type "${field.type}" cannot be rendered by the PR-template compiler.`, { construct: "non-structural PR field" });
473
+ });
474
+ return blocks.join("\n\n");
475
+ }
476
+ function appendOptionalBlock(blocks, value) {
477
+ const block = value === undefined ? undefined : trimBlankLines(value);
478
+ if (block !== undefined)
479
+ blocks.push(block);
480
+ }
481
+ //# sourceMappingURL=pull-request-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-request-template.js","sourceRoot":"","sources":["../src/pull-request-template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export type TemplateType = "issue-form" | "issue-markdown" | "pull-request-default" | "pull-request";
2
+ export type TemplateKind = "issue" | "pull-request";
3
+ export interface TemplateIdentity {
4
+ readonly id: string;
5
+ readonly type: TemplateType;
6
+ readonly kind: TemplateKind;
7
+ readonly name: string;
8
+ readonly path: string;
9
+ }
10
+ export interface TemplateDiscoveryResult {
11
+ readonly repositoryRoot: string;
12
+ readonly templates: readonly TemplateIdentity[];
13
+ readonly issueTemplates: readonly TemplateIdentity[];
14
+ readonly pullRequestTemplates: readonly TemplateIdentity[];
15
+ }
16
+ export interface TemplateSelector {
17
+ readonly id?: string;
18
+ readonly type?: TemplateType;
19
+ readonly kind?: TemplateKind;
20
+ readonly name?: string;
21
+ readonly path?: string;
22
+ }
23
+ export type TemplateDiscoveryErrorCode = "TEMPLATE_FILESYSTEM_MALFORMED" | "TEMPLATE_ID_CONFLICT" | "TEMPLATE_NOT_FOUND" | "TEMPLATE_SELECTION_AMBIGUOUS" | "TEMPLATE_NAME_CONFLICT" | "INVALID_TEMPLATE_SELECTOR";
24
+ export interface TemplateDiscoveryErrorDetails {
25
+ readonly path?: string;
26
+ readonly reason?: string;
27
+ readonly selector?: string | TemplateSelector;
28
+ readonly candidates?: readonly TemplateIdentity[];
29
+ }
30
+ export declare class TemplateDiscoveryError extends Error {
31
+ readonly code: TemplateDiscoveryErrorCode;
32
+ readonly details: TemplateDiscoveryErrorDetails;
33
+ constructor(code: TemplateDiscoveryErrorCode, message: string, details?: TemplateDiscoveryErrorDetails, options?: ErrorOptions);
34
+ toJSON(): {
35
+ code: TemplateDiscoveryErrorCode;
36
+ message: string;
37
+ details: TemplateDiscoveryErrorDetails;
38
+ };
39
+ }
40
+ export declare class TemplateFilesystemError extends TemplateDiscoveryError {
41
+ constructor(message: string, details?: TemplateDiscoveryErrorDetails, cause?: unknown);
42
+ }
43
+ export declare class TemplateNotFoundError extends TemplateDiscoveryError {
44
+ constructor(selector: string | TemplateSelector | undefined, candidates: readonly TemplateIdentity[]);
45
+ }
46
+ export declare class TemplateSelectionAmbiguousError extends TemplateDiscoveryError {
47
+ constructor(selector: string | TemplateSelector | undefined, candidates: readonly TemplateIdentity[]);
48
+ }
49
+ export declare class TemplateNameConflictError extends TemplateDiscoveryError {
50
+ constructor(selector: string | TemplateSelector, candidates: readonly TemplateIdentity[]);
51
+ }
52
+ export declare class InvalidTemplateSelectorError extends TemplateDiscoveryError {
53
+ constructor(selector: unknown);
54
+ }
55
+ /**
56
+ * Discover only the repository-native paths GitHub uses for the MVP.
57
+ * Template contents are intentionally not read; parsing belongs to later layers.
58
+ */
59
+ export declare function discoverTemplates(repositoryRoot?: string | URL): Promise<TemplateDiscoveryResult>;
60
+ /** Synchronous counterpart for callers that already operate synchronously. */
61
+ export declare function discoverTemplatesSync(repositoryRoot?: string | URL): TemplateDiscoveryResult;
62
+ /**
63
+ * Select one identity. A string first means an exact ID or path, then a name;
64
+ * name selection is case-insensitive and fails closed when it is not unique.
65
+ */
66
+ export declare function selectTemplate(discovery: TemplateDiscoveryResult, selector?: string | TemplateSelector): TemplateIdentity;
67
+ export declare function selectIssueTemplate(discovery: TemplateDiscoveryResult, selector?: string | TemplateSelector): TemplateIdentity;
68
+ export declare function selectPullRequestTemplate(discovery: TemplateDiscoveryResult, selector?: string | TemplateSelector): TemplateIdentity;