@paretools/github 0.8.4 → 0.9.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/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +112 -16
- package/dist/lib/formatters.js.map +1 -1
- package/dist/lib/parsers.d.ts +33 -11
- package/dist/lib/parsers.d.ts.map +1 -1
- package/dist/lib/parsers.js +309 -24
- package/dist/lib/parsers.js.map +1 -1
- package/dist/lib/path-validation.d.ts +13 -0
- package/dist/lib/path-validation.d.ts.map +1 -0
- package/dist/lib/path-validation.js +54 -0
- package/dist/lib/path-validation.js.map +1 -0
- package/dist/schemas/index.d.ts +126 -3
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +116 -3
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/api.d.ts.map +1 -1
- package/dist/tools/api.js +135 -5
- package/dist/tools/api.js.map +1 -1
- package/dist/tools/gist-create.d.ts.map +1 -1
- package/dist/tools/gist-create.js +70 -16
- package/dist/tools/gist-create.js.map +1 -1
- package/dist/tools/issue-close.d.ts.map +1 -1
- package/dist/tools/issue-close.js +31 -5
- package/dist/tools/issue-close.js.map +1 -1
- package/dist/tools/issue-comment.d.ts.map +1 -1
- package/dist/tools/issue-comment.js +43 -6
- package/dist/tools/issue-comment.js.map +1 -1
- package/dist/tools/issue-create.d.ts.map +1 -1
- package/dist/tools/issue-create.js +69 -5
- package/dist/tools/issue-create.js.map +1 -1
- package/dist/tools/issue-list.d.ts.map +1 -1
- package/dist/tools/issue-list.js +79 -3
- package/dist/tools/issue-list.js.map +1 -1
- package/dist/tools/issue-update.d.ts.map +1 -1
- package/dist/tools/issue-update.js +102 -11
- package/dist/tools/issue-update.js.map +1 -1
- package/dist/tools/issue-view.d.ts.map +1 -1
- package/dist/tools/issue-view.js +26 -6
- package/dist/tools/issue-view.js.map +1 -1
- package/dist/tools/pr-checks.d.ts.map +1 -1
- package/dist/tools/pr-checks.js +27 -7
- package/dist/tools/pr-checks.js.map +1 -1
- package/dist/tools/pr-comment.d.ts.map +1 -1
- package/dist/tools/pr-comment.js +43 -6
- package/dist/tools/pr-comment.js.map +1 -1
- package/dist/tools/pr-create.d.ts.map +1 -1
- package/dist/tools/pr-create.js +125 -3
- package/dist/tools/pr-create.js.map +1 -1
- package/dist/tools/pr-diff.d.ts.map +1 -1
- package/dist/tools/pr-diff.js +36 -4
- package/dist/tools/pr-diff.js.map +1 -1
- package/dist/tools/pr-list.d.ts.map +1 -1
- package/dist/tools/pr-list.js +83 -3
- package/dist/tools/pr-list.js.map +1 -1
- package/dist/tools/pr-merge.d.ts.map +1 -1
- package/dist/tools/pr-merge.js +77 -6
- package/dist/tools/pr-merge.js.map +1 -1
- package/dist/tools/pr-review.d.ts.map +1 -1
- package/dist/tools/pr-review.js +43 -6
- package/dist/tools/pr-review.js.map +1 -1
- package/dist/tools/pr-update.d.ts.map +1 -1
- package/dist/tools/pr-update.js +110 -5
- package/dist/tools/pr-update.js.map +1 -1
- package/dist/tools/pr-view.d.ts.map +1 -1
- package/dist/tools/pr-view.js +27 -6
- package/dist/tools/pr-view.js.map +1 -1
- package/dist/tools/release-create.d.ts.map +1 -1
- package/dist/tools/release-create.js +79 -3
- package/dist/tools/release-create.js.map +1 -1
- package/dist/tools/release-list.d.ts.map +1 -1
- package/dist/tools/release-list.js +23 -5
- package/dist/tools/release-list.js.map +1 -1
- package/dist/tools/run-list.d.ts.map +1 -1
- package/dist/tools/run-list.js +84 -3
- package/dist/tools/run-list.js.map +1 -1
- package/dist/tools/run-rerun.d.ts.map +1 -1
- package/dist/tools/run-rerun.js +20 -4
- package/dist/tools/run-rerun.js.map +1 -1
- package/dist/tools/run-view.d.ts.map +1 -1
- package/dist/tools/run-view.js +44 -4
- package/dist/tools/run-view.js.map +1 -1
- package/package.json +2 -2
package/dist/lib/parsers.js
CHANGED
|
@@ -9,6 +9,15 @@ export function parsePrView(json) {
|
|
|
9
9
|
status: c.status || c.state || "unknown",
|
|
10
10
|
conclusion: c.conclusion ?? null,
|
|
11
11
|
}));
|
|
12
|
+
// P1-gap #147: Parse reviews array
|
|
13
|
+
const reviews = raw.reviews
|
|
14
|
+
? raw.reviews.map((r) => ({
|
|
15
|
+
author: r.author?.login ?? "unknown",
|
|
16
|
+
state: r.state,
|
|
17
|
+
body: r.body || undefined,
|
|
18
|
+
submittedAt: r.submittedAt ?? undefined,
|
|
19
|
+
}))
|
|
20
|
+
: undefined;
|
|
12
21
|
return {
|
|
13
22
|
number: raw.number,
|
|
14
23
|
state: raw.state,
|
|
@@ -23,6 +32,21 @@ export function parsePrView(json) {
|
|
|
23
32
|
additions: raw.additions ?? 0,
|
|
24
33
|
deletions: raw.deletions ?? 0,
|
|
25
34
|
changedFiles: raw.changedFiles ?? 0,
|
|
35
|
+
// S-gap fields
|
|
36
|
+
author: raw.author?.login ?? undefined,
|
|
37
|
+
labels: raw.labels ? raw.labels.map((l) => l.name) : undefined,
|
|
38
|
+
isDraft: raw.isDraft ?? undefined,
|
|
39
|
+
assignees: raw.assignees
|
|
40
|
+
? raw.assignees.map((a) => a.login)
|
|
41
|
+
: undefined,
|
|
42
|
+
createdAt: raw.createdAt ?? undefined,
|
|
43
|
+
updatedAt: raw.updatedAt ?? undefined,
|
|
44
|
+
milestone: raw.milestone?.title ?? undefined,
|
|
45
|
+
projectItems: raw.projectItems
|
|
46
|
+
? raw.projectItems.map((p) => p.title)
|
|
47
|
+
: undefined,
|
|
48
|
+
// P1-gap #147
|
|
49
|
+
reviews,
|
|
26
50
|
};
|
|
27
51
|
}
|
|
28
52
|
/**
|
|
@@ -38,6 +62,12 @@ export function parsePrList(json) {
|
|
|
38
62
|
url: pr.url,
|
|
39
63
|
headBranch: pr.headRefName,
|
|
40
64
|
author: pr.author?.login ?? "",
|
|
65
|
+
// S-gap fields
|
|
66
|
+
labels: pr.labels ? pr.labels.map((l) => l.name) : undefined,
|
|
67
|
+
isDraft: pr.isDraft ?? undefined,
|
|
68
|
+
baseBranch: pr.baseRefName ?? undefined,
|
|
69
|
+
reviewDecision: pr.reviewDecision ?? undefined,
|
|
70
|
+
mergeable: pr.mergeable ?? undefined,
|
|
41
71
|
}));
|
|
42
72
|
return { prs, total: prs.length };
|
|
43
73
|
}
|
|
@@ -63,37 +93,126 @@ export function parsePrUpdate(stdout, number) {
|
|
|
63
93
|
/**
|
|
64
94
|
* Parses `gh pr merge` output into structured data.
|
|
65
95
|
* The gh CLI prints a confirmation message with the PR URL on success.
|
|
96
|
+
* Enhanced to detect merge commit SHA, auto-merge state, and merge method.
|
|
66
97
|
*/
|
|
67
|
-
export function parsePrMerge(stdout, number, method) {
|
|
98
|
+
export function parsePrMerge(stdout, number, method, deleteBranch, auto, disableAuto) {
|
|
68
99
|
const urlMatch = stdout.match(/(https:\/\/github\.com\/[^\s]+\/pull\/\d+)/);
|
|
69
100
|
const url = urlMatch ? urlMatch[1] : "";
|
|
70
|
-
|
|
101
|
+
// S-gap: detect if branch was deleted from output
|
|
102
|
+
const branchDeleted = deleteBranch !== undefined
|
|
103
|
+
? /deleted branch|branch.*deleted/i.test(stdout)
|
|
104
|
+
? true
|
|
105
|
+
: deleteBranch
|
|
106
|
+
: undefined;
|
|
107
|
+
// Extract merge commit SHA if present in output
|
|
108
|
+
// gh pr merge may output lines like "Merge commit SHA: abc123..." or include it in the URL
|
|
109
|
+
const shaMatch = stdout.match(/\b([0-9a-f]{40})\b/);
|
|
110
|
+
const mergeCommitSha = shaMatch ? shaMatch[1] : undefined;
|
|
111
|
+
// Determine the merge state
|
|
112
|
+
let state;
|
|
113
|
+
if (disableAuto) {
|
|
114
|
+
state = "auto-merge-disabled";
|
|
115
|
+
}
|
|
116
|
+
else if (auto || /auto-merge/i.test(stdout) || /automatically merge/i.test(stdout)) {
|
|
117
|
+
state = "auto-merge-enabled";
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
state = "merged";
|
|
121
|
+
}
|
|
122
|
+
// Detect actual merge method from output text when possible
|
|
123
|
+
let detectedMethod = method;
|
|
124
|
+
if (/squashed and merged/i.test(stdout)) {
|
|
125
|
+
detectedMethod = "squash";
|
|
126
|
+
}
|
|
127
|
+
else if (/rebased and merged/i.test(stdout)) {
|
|
128
|
+
detectedMethod = "rebase";
|
|
129
|
+
}
|
|
130
|
+
else if (/merged.*pull request/i.test(stdout) && !/squashed|rebased/i.test(stdout)) {
|
|
131
|
+
detectedMethod = "merge";
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
number,
|
|
135
|
+
merged: state === "merged",
|
|
136
|
+
method: detectedMethod,
|
|
137
|
+
url,
|
|
138
|
+
branchDeleted,
|
|
139
|
+
mergeCommitSha,
|
|
140
|
+
state,
|
|
141
|
+
};
|
|
71
142
|
}
|
|
72
143
|
/**
|
|
73
144
|
* Parses `gh pr comment` / `gh issue comment` output into structured data.
|
|
74
145
|
* The gh CLI prints the new comment URL to stdout.
|
|
146
|
+
* S-gap: Enhanced to include operation type, commentId, number, and body echo.
|
|
75
147
|
*/
|
|
76
|
-
export function parseComment(stdout) {
|
|
148
|
+
export function parseComment(stdout, opts) {
|
|
77
149
|
const url = stdout.trim();
|
|
78
|
-
|
|
150
|
+
// S-gap: extract commentId from URL (e.g., #issuecomment-123456)
|
|
151
|
+
const commentIdMatch = url.match(/#issuecomment-(\d+)/);
|
|
152
|
+
const commentId = commentIdMatch ? commentIdMatch[1] : undefined;
|
|
153
|
+
return {
|
|
154
|
+
url: url || undefined,
|
|
155
|
+
operation: opts?.operation,
|
|
156
|
+
commentId,
|
|
157
|
+
issueNumber: opts?.issueNumber,
|
|
158
|
+
prNumber: opts?.prNumber,
|
|
159
|
+
body: opts?.body,
|
|
160
|
+
};
|
|
79
161
|
}
|
|
80
162
|
/**
|
|
81
163
|
* Parses `gh pr review` output into structured data.
|
|
82
164
|
* The gh CLI prints a confirmation message with the PR URL on success.
|
|
165
|
+
* S-gap: Enhanced to include reviewId, reviewDecision, and body echo.
|
|
83
166
|
*/
|
|
84
|
-
export function parsePrReview(stdout, number, event) {
|
|
167
|
+
export function parsePrReview(stdout, number, event, body, stderr) {
|
|
85
168
|
const urlMatch = stdout.match(/(https:\/\/github\.com\/[^\s]+\/pull\/\d+)/);
|
|
86
169
|
const url = urlMatch ? urlMatch[1] : "";
|
|
87
|
-
|
|
170
|
+
// P1-gap #145: Parse review event type from CLI output for confirmation
|
|
171
|
+
// Map the CLI event name to GitHub's review event type
|
|
172
|
+
const eventMap = {
|
|
173
|
+
approve: "APPROVE",
|
|
174
|
+
"request-changes": "REQUEST_CHANGES",
|
|
175
|
+
comment: "COMMENT",
|
|
176
|
+
};
|
|
177
|
+
const resolvedEvent = eventMap[event] ?? event;
|
|
178
|
+
// P1-gap #146: Classify review errors from stderr
|
|
179
|
+
const errorType = stderr ? classifyReviewError(stderr) : undefined;
|
|
180
|
+
return {
|
|
181
|
+
number,
|
|
182
|
+
event: resolvedEvent,
|
|
183
|
+
url,
|
|
184
|
+
body: body ?? undefined,
|
|
185
|
+
errorType,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Classifies review error from stderr into structured error types.
|
|
190
|
+
* P1-gap #146.
|
|
191
|
+
*/
|
|
192
|
+
function classifyReviewError(stderr) {
|
|
193
|
+
const lower = stderr.toLowerCase();
|
|
194
|
+
if (/not found|could not resolve|no pull request/i.test(lower))
|
|
195
|
+
return "not-found";
|
|
196
|
+
if (/permission|forbidden|403/i.test(lower))
|
|
197
|
+
return "permission-denied";
|
|
198
|
+
if (/already reviewed|already approved|already submitted/i.test(lower))
|
|
199
|
+
return "already-reviewed";
|
|
200
|
+
if (/draft|is a draft/i.test(lower))
|
|
201
|
+
return "draft-pr";
|
|
202
|
+
if (stderr.trim())
|
|
203
|
+
return "unknown";
|
|
204
|
+
return undefined;
|
|
88
205
|
}
|
|
89
206
|
/**
|
|
90
207
|
* Parses `gh pr checks --json ...` output into structured PR checks data.
|
|
91
208
|
* Computes summary counts by bucket (pass, fail, pending, skipping, cancel).
|
|
209
|
+
* Deduplicates entries by check name, keeping the most recent run
|
|
210
|
+
* (determined by completedAt, then startedAt, with later entries winning ties).
|
|
92
211
|
*/
|
|
93
212
|
export function parsePrChecks(json, pr) {
|
|
94
213
|
const raw = JSON.parse(json);
|
|
95
214
|
const items = Array.isArray(raw) ? raw : [];
|
|
96
|
-
const
|
|
215
|
+
const allChecks = items.map((c) => ({
|
|
97
216
|
name: c.name ?? "",
|
|
98
217
|
state: c.state ?? "",
|
|
99
218
|
bucket: c.bucket ?? "",
|
|
@@ -104,6 +223,25 @@ export function parsePrChecks(json, pr) {
|
|
|
104
223
|
startedAt: c.startedAt ?? "",
|
|
105
224
|
completedAt: c.completedAt ?? "",
|
|
106
225
|
}));
|
|
226
|
+
// Deduplicate by check name, keeping the most recent run.
|
|
227
|
+
// For checks with the same name, prefer the one with the later completedAt
|
|
228
|
+
// (or startedAt as fallback). If timestamps are equal, keep the later entry
|
|
229
|
+
// in the array (which is typically the most recent re-run).
|
|
230
|
+
const deduped = new Map();
|
|
231
|
+
for (const check of allChecks) {
|
|
232
|
+
const existing = deduped.get(check.name);
|
|
233
|
+
if (!existing) {
|
|
234
|
+
deduped.set(check.name, check);
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
// Compare by completedAt first, then startedAt
|
|
238
|
+
const existingTime = existing.completedAt || existing.startedAt || "";
|
|
239
|
+
const newTime = check.completedAt || check.startedAt || "";
|
|
240
|
+
if (newTime >= existingTime) {
|
|
241
|
+
deduped.set(check.name, check);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
const checks = Array.from(deduped.values());
|
|
107
245
|
const summary = {
|
|
108
246
|
total: checks.length,
|
|
109
247
|
passed: checks.filter((c) => c.bucket === "pass").length,
|
|
@@ -128,6 +266,16 @@ export function parseIssueView(json) {
|
|
|
128
266
|
assignees: (raw.assignees ?? []).map((a) => a.login),
|
|
129
267
|
url: raw.url,
|
|
130
268
|
createdAt: raw.createdAt ?? "",
|
|
269
|
+
// S-gap fields
|
|
270
|
+
stateReason: raw.stateReason ?? undefined,
|
|
271
|
+
author: raw.author?.login ?? undefined,
|
|
272
|
+
milestone: raw.milestone?.title ?? undefined,
|
|
273
|
+
updatedAt: raw.updatedAt ?? undefined,
|
|
274
|
+
closedAt: raw.closedAt ?? undefined,
|
|
275
|
+
isPinned: raw.isPinned ?? undefined,
|
|
276
|
+
projectItems: raw.projectItems
|
|
277
|
+
? raw.projectItems.map((p) => p.title)
|
|
278
|
+
: undefined,
|
|
131
279
|
};
|
|
132
280
|
}
|
|
133
281
|
/**
|
|
@@ -143,26 +291,57 @@ export function parseIssueList(json) {
|
|
|
143
291
|
url: issue.url,
|
|
144
292
|
labels: (issue.labels ?? []).map((l) => l.name),
|
|
145
293
|
assignees: (issue.assignees ?? []).map((a) => a.login),
|
|
294
|
+
// S-gap fields
|
|
295
|
+
author: issue.author?.login ?? undefined,
|
|
296
|
+
createdAt: issue.createdAt ?? undefined,
|
|
297
|
+
milestone: issue.milestone?.title ?? undefined,
|
|
146
298
|
}));
|
|
147
299
|
return { issues, total: issues.length };
|
|
148
300
|
}
|
|
149
301
|
/**
|
|
150
302
|
* Parses `gh issue create` output (URL on stdout) into structured data.
|
|
151
303
|
* The gh CLI prints the new issue URL to stdout. We extract the number from it.
|
|
304
|
+
* S-gap: Enhanced to echo back applied labels.
|
|
152
305
|
*/
|
|
153
|
-
export function parseIssueCreate(stdout) {
|
|
306
|
+
export function parseIssueCreate(stdout, labels) {
|
|
154
307
|
const url = stdout.trim();
|
|
155
308
|
const match = url.match(/\/issues\/(\d+)$/);
|
|
156
309
|
const number = match ? parseInt(match[1], 10) : 0;
|
|
157
|
-
return {
|
|
310
|
+
return {
|
|
311
|
+
number,
|
|
312
|
+
url,
|
|
313
|
+
labelsApplied: labels && labels.length > 0 ? labels : undefined,
|
|
314
|
+
};
|
|
158
315
|
}
|
|
159
316
|
/**
|
|
160
317
|
* Parses `gh issue close` output into structured data.
|
|
161
|
-
* The gh CLI
|
|
318
|
+
* The gh CLI may print a confirmation message plus URL to stdout.
|
|
319
|
+
* We robustly extract the issue URL using a regex rather than assuming
|
|
320
|
+
* the entire stdout is just a URL (handles extra text, whitespace, and
|
|
321
|
+
* different output formats).
|
|
322
|
+
* S-gap: Enhanced to include reason and commentUrl.
|
|
162
323
|
*/
|
|
163
|
-
export function parseIssueClose(stdout, number) {
|
|
164
|
-
|
|
165
|
-
|
|
324
|
+
export function parseIssueClose(stdout, number, reason, comment, stderr) {
|
|
325
|
+
// Robust URL extraction: find the GitHub issue URL anywhere in the output
|
|
326
|
+
const urlMatch = stdout.match(/(https:\/\/github\.com\/[^\s]+\/issues\/\d+)/);
|
|
327
|
+
const url = urlMatch ? urlMatch[1] : stdout.trim();
|
|
328
|
+
// S-gap: Extract comment URL from output if a comment was added
|
|
329
|
+
const commentUrlMatch = stdout.match(/(https:\/\/github\.com\/[^\s]+#issuecomment-\d+)/);
|
|
330
|
+
// P1-gap #144: Detect already-closed issues
|
|
331
|
+
const combined = `${stdout}\n${stderr ?? ""}`;
|
|
332
|
+
const alreadyClosed = /already closed/i.test(combined) ||
|
|
333
|
+
/issue .* is already closed/i.test(combined) ||
|
|
334
|
+
/already been closed/i.test(combined)
|
|
335
|
+
? true
|
|
336
|
+
: undefined;
|
|
337
|
+
return {
|
|
338
|
+
number,
|
|
339
|
+
state: "closed",
|
|
340
|
+
url,
|
|
341
|
+
reason: reason ?? undefined,
|
|
342
|
+
commentUrl: comment && commentUrlMatch ? commentUrlMatch[1] : undefined,
|
|
343
|
+
alreadyClosed,
|
|
344
|
+
};
|
|
166
345
|
}
|
|
167
346
|
/**
|
|
168
347
|
* Parses `gh issue edit` output into structured data.
|
|
@@ -176,6 +355,7 @@ export function parseIssueUpdate(stdout, number) {
|
|
|
176
355
|
/**
|
|
177
356
|
* Parses `gh run view --json ...` output into structured run view data.
|
|
178
357
|
* Renames gh field names (e.g., databaseId → id).
|
|
358
|
+
* S-gap: Enhanced to include job steps, headSha, event, startedAt, attempt.
|
|
179
359
|
*/
|
|
180
360
|
export function parseRunView(json) {
|
|
181
361
|
const raw = JSON.parse(json);
|
|
@@ -183,6 +363,14 @@ export function parseRunView(json) {
|
|
|
183
363
|
name: j.name,
|
|
184
364
|
status: j.status,
|
|
185
365
|
conclusion: j.conclusion ?? null,
|
|
366
|
+
// S-gap: Include steps array
|
|
367
|
+
steps: j.steps
|
|
368
|
+
? j.steps.map((s) => ({
|
|
369
|
+
name: s.name,
|
|
370
|
+
status: s.status,
|
|
371
|
+
conclusion: s.conclusion ?? null,
|
|
372
|
+
}))
|
|
373
|
+
: undefined,
|
|
186
374
|
}));
|
|
187
375
|
return {
|
|
188
376
|
id: raw.databaseId,
|
|
@@ -194,6 +382,11 @@ export function parseRunView(json) {
|
|
|
194
382
|
jobs,
|
|
195
383
|
url: raw.url,
|
|
196
384
|
createdAt: raw.createdAt ?? "",
|
|
385
|
+
// P0 enrichments
|
|
386
|
+
headSha: raw.headSha ?? undefined,
|
|
387
|
+
event: raw.event ?? undefined,
|
|
388
|
+
startedAt: raw.startedAt ?? undefined,
|
|
389
|
+
attempt: raw.attempt ?? undefined,
|
|
197
390
|
};
|
|
198
391
|
}
|
|
199
392
|
/**
|
|
@@ -211,6 +404,11 @@ export function parseRunList(json) {
|
|
|
211
404
|
headBranch: r.headBranch,
|
|
212
405
|
url: r.url,
|
|
213
406
|
createdAt: r.createdAt ?? "",
|
|
407
|
+
// P1-gap #148
|
|
408
|
+
headSha: r.headSha ?? undefined,
|
|
409
|
+
event: r.event ?? undefined,
|
|
410
|
+
startedAt: r.startedAt ?? undefined,
|
|
411
|
+
attempt: r.attempt ?? undefined,
|
|
214
412
|
}));
|
|
215
413
|
return { runs, total: runs.length };
|
|
216
414
|
}
|
|
@@ -218,31 +416,51 @@ export function parseRunList(json) {
|
|
|
218
416
|
* Parses `gh run rerun` output into structured data.
|
|
219
417
|
* The gh CLI prints a confirmation message to stderr on success.
|
|
220
418
|
* We construct the URL from the run ID and repo info.
|
|
419
|
+
* S-gap: Enhanced to include job field.
|
|
221
420
|
*/
|
|
222
|
-
export function parseRunRerun(stdout, stderr, runId, failedOnly) {
|
|
421
|
+
export function parseRunRerun(stdout, stderr, runId, failedOnly, job) {
|
|
223
422
|
// gh run rerun outputs confirmation to stderr, e.g.:
|
|
224
423
|
// "✓ Requested rerun of run 12345"
|
|
225
424
|
// Try to extract URL from stdout/stderr if present
|
|
226
425
|
const combined = `${stdout}\n${stderr}`;
|
|
227
426
|
const urlMatch = combined.match(/(https:\/\/github\.com\/[^\s]+\/actions\/runs\/\d+)/);
|
|
228
427
|
const url = urlMatch ? urlMatch[1] : "";
|
|
428
|
+
// P1-gap #149: Parse attempt number from output
|
|
429
|
+
const attemptMatch = combined.match(/attempt[\s#:]*?(\d+)/i);
|
|
430
|
+
const attempt = attemptMatch ? parseInt(attemptMatch[1], 10) : undefined;
|
|
431
|
+
// P1-gap #149: Extract new run URL if a different URL appears (for the new attempt)
|
|
432
|
+
// Sometimes gh outputs the new run URL after a rerun
|
|
433
|
+
const allUrls = combined.match(/https:\/\/github\.com\/[^\s]+\/actions\/runs\/\d+/g) ?? [];
|
|
434
|
+
const newRunUrl = allUrls.length > 1 ? allUrls[allUrls.length - 1] : undefined;
|
|
229
435
|
return {
|
|
230
436
|
runId,
|
|
231
437
|
status: "requested",
|
|
232
438
|
failedOnly,
|
|
233
439
|
url,
|
|
440
|
+
job: job ?? undefined,
|
|
441
|
+
attempt,
|
|
442
|
+
newRunUrl,
|
|
234
443
|
};
|
|
235
444
|
}
|
|
236
445
|
/**
|
|
237
446
|
* Parses `gh release create` output (URL on stdout) into structured data.
|
|
238
447
|
* The gh CLI prints the new release URL to stdout.
|
|
448
|
+
* S-gap: Enhanced to include title, assetsUploaded count.
|
|
239
449
|
*/
|
|
240
|
-
export function parseReleaseCreate(stdout, tag, draft, prerelease) {
|
|
450
|
+
export function parseReleaseCreate(stdout, tag, draft, prerelease, title, assetsCount) {
|
|
241
451
|
const url = stdout.trim();
|
|
242
|
-
return {
|
|
452
|
+
return {
|
|
453
|
+
tag,
|
|
454
|
+
url,
|
|
455
|
+
draft,
|
|
456
|
+
prerelease,
|
|
457
|
+
title: title ?? undefined,
|
|
458
|
+
assetsUploaded: assetsCount ?? undefined,
|
|
459
|
+
};
|
|
243
460
|
}
|
|
244
461
|
/**
|
|
245
462
|
* Parses `gh release list --json ...` output into structured release list data.
|
|
463
|
+
* S-gap: Enhanced to include isLatest and createdAt.
|
|
246
464
|
*/
|
|
247
465
|
export function parseReleaseList(json) {
|
|
248
466
|
const raw = JSON.parse(json);
|
|
@@ -254,34 +472,101 @@ export function parseReleaseList(json) {
|
|
|
254
472
|
prerelease: r.isPrerelease ?? false,
|
|
255
473
|
publishedAt: r.publishedAt ?? "",
|
|
256
474
|
url: r.url ?? "",
|
|
475
|
+
// S-gap fields
|
|
476
|
+
isLatest: r.isLatest ?? undefined,
|
|
477
|
+
createdAt: r.createdAt ?? undefined,
|
|
257
478
|
}));
|
|
258
479
|
return { releases, total: releases.length };
|
|
259
480
|
}
|
|
260
481
|
/**
|
|
261
482
|
* Parses `gh api` stdout into structured API result data.
|
|
262
|
-
*
|
|
483
|
+
* When `--include` is used, the output starts with HTTP headers followed by
|
|
484
|
+
* a blank line and then the response body. We parse the real HTTP status code
|
|
485
|
+
* from the status line and separate the body.
|
|
263
486
|
*/
|
|
264
|
-
export function parseApi(stdout, exitCode, endpoint, method) {
|
|
265
|
-
//
|
|
487
|
+
export function parseApi(stdout, exitCode, endpoint, method, stderr) {
|
|
488
|
+
// Default: infer status from exit code
|
|
489
|
+
let statusCode = exitCode === 0 ? 200 : 422;
|
|
490
|
+
let bodyText = stdout;
|
|
491
|
+
// When --include is passed, stdout starts with HTTP headers:
|
|
492
|
+
// HTTP/2.0 200 OK\r\n...headers...\r\n\r\nbody
|
|
493
|
+
const headerEndIndex = stdout.indexOf("\r\n\r\n");
|
|
494
|
+
if (headerEndIndex !== -1) {
|
|
495
|
+
const headerBlock = stdout.slice(0, headerEndIndex);
|
|
496
|
+
bodyText = stdout.slice(headerEndIndex + 4);
|
|
497
|
+
// Parse status code from first line: "HTTP/1.1 200 OK" or "HTTP/2.0 200 OK"
|
|
498
|
+
const statusMatch = headerBlock.match(/^HTTP\/[\d.]+ (\d+)/);
|
|
499
|
+
if (statusMatch) {
|
|
500
|
+
statusCode = parseInt(statusMatch[1], 10);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
// Also handle \n\n separator (some environments)
|
|
505
|
+
const headerEndLF = stdout.indexOf("\n\n");
|
|
506
|
+
if (headerEndLF !== -1 && /^HTTP\/[\d.]+ \d+/.test(stdout)) {
|
|
507
|
+
const headerBlock = stdout.slice(0, headerEndLF);
|
|
508
|
+
bodyText = stdout.slice(headerEndLF + 2);
|
|
509
|
+
const statusMatch = headerBlock.match(/^HTTP\/[\d.]+ (\d+)/);
|
|
510
|
+
if (statusMatch) {
|
|
511
|
+
statusCode = parseInt(statusMatch[1], 10);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
// Keep legacy `status` as before for backward compat
|
|
266
516
|
const status = exitCode === 0 ? 200 : 422;
|
|
267
517
|
let body;
|
|
268
518
|
try {
|
|
269
|
-
body = JSON.parse(
|
|
519
|
+
body = JSON.parse(bodyText);
|
|
270
520
|
}
|
|
271
521
|
catch {
|
|
272
|
-
body =
|
|
522
|
+
body = bodyText;
|
|
523
|
+
}
|
|
524
|
+
// P1-gap #141: Preserve error body for debugging when request failed
|
|
525
|
+
const errorBody = exitCode !== 0 && stderr ? parseErrorBody(stderr) : undefined;
|
|
526
|
+
return { status, statusCode, body, endpoint, method, errorBody };
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Attempts to parse error body from stderr output.
|
|
530
|
+
* gh api may output JSON error details or plain text to stderr.
|
|
531
|
+
*/
|
|
532
|
+
function parseErrorBody(stderr) {
|
|
533
|
+
const trimmed = stderr.trim();
|
|
534
|
+
if (!trimmed)
|
|
535
|
+
return undefined;
|
|
536
|
+
try {
|
|
537
|
+
return JSON.parse(trimmed);
|
|
538
|
+
}
|
|
539
|
+
catch {
|
|
540
|
+
// Check if stderr contains an embedded JSON object (e.g., after a prefix message)
|
|
541
|
+
const jsonMatch = trimmed.match(/\{[\s\S]*\}/);
|
|
542
|
+
if (jsonMatch) {
|
|
543
|
+
try {
|
|
544
|
+
return JSON.parse(jsonMatch[0]);
|
|
545
|
+
}
|
|
546
|
+
catch {
|
|
547
|
+
// fall through
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
return trimmed;
|
|
273
551
|
}
|
|
274
|
-
return { status, body, endpoint, method };
|
|
275
552
|
}
|
|
276
553
|
/**
|
|
277
554
|
* Parses `gh gist create` output (URL on stdout) into structured data.
|
|
278
555
|
* The gh CLI prints the new gist URL to stdout. We extract the ID from it.
|
|
556
|
+
* S-gap: Enhanced to include files, description, fileCount.
|
|
279
557
|
*/
|
|
280
|
-
export function parseGistCreate(stdout, isPublic) {
|
|
558
|
+
export function parseGistCreate(stdout, isPublic, files, description) {
|
|
281
559
|
const url = stdout.trim();
|
|
282
560
|
const match = url.match(/\/([a-f0-9]+)$/);
|
|
283
561
|
const id = match ? match[1] : "";
|
|
284
|
-
return {
|
|
562
|
+
return {
|
|
563
|
+
id,
|
|
564
|
+
url,
|
|
565
|
+
public: isPublic,
|
|
566
|
+
files: files ?? undefined,
|
|
567
|
+
description: description ?? undefined,
|
|
568
|
+
fileCount: files ? files.length : undefined,
|
|
569
|
+
};
|
|
285
570
|
}
|
|
286
571
|
/**
|
|
287
572
|
* Parses `gh pr diff --numstat` output into structured PR diff data.
|
package/dist/lib/parsers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"AAuBA;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAC9C,CAAC,CAMA,EAAE,EAAE,CAAC,CAAC;QACL,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS;QACtC,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,SAAS;QACxC,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;KACjC,CAAC,CACH,CAAC;IAEF,mCAAmC;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO;QACzB,CAAC,CACG,GAAG,CAAC,OAML,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,SAAS;YACpC,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;YACzB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,SAAS;SACxC,CAAC,CAAC;QACL,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;QACtB,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACrC,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE;QACxC,MAAM;QACN,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC;QAC7B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC;QAC7B,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,CAAC;QACnC,eAAe;QACf,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,SAAS;QACtC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,GAAG,CAAC,MAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QACtF,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;QACjC,SAAS,EAAE,GAAG,CAAC,SAAS;YACtB,CAAC,CAAE,GAAG,CAAC,SAAiC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YAC5D,CAAC,CAAC,SAAS;QACb,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACrC,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACrC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,SAAS;QAC5C,YAAY,EAAE,GAAG,CAAC,YAAY;YAC5B,CAAC,CAAE,GAAG,CAAC,YAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/D,CAAC,CAAC,SAAS;QACb,cAAc;QACd,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CACnB,CAAC,EAYA,EAAE,EAAE,CAAC,CAAC;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,GAAG,EAAE,EAAE,CAAC,GAAG;QACX,UAAU,EAAE,EAAE,CAAC,WAAW;QAC1B,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QAC9B,eAAe;QACf,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5D,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,SAAS;QAChC,UAAU,EAAE,EAAE,CAAC,WAAW,IAAI,SAAS;QACvC,cAAc,EAAE,EAAE,CAAC,cAAc,IAAI,SAAS;QAC9C,SAAS,EAAE,EAAE,CAAC,SAAS,IAAI,SAAS;KACrC,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAc;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,MAAc,EACd,MAAc,EACd,YAAsB,EACtB,IAAc,EACd,WAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,kDAAkD;IAClD,MAAM,aAAa,GACjB,YAAY,KAAK,SAAS;QACxB,CAAC,CAAC,iCAAiC,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9C,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,YAAY;QAChB,CAAC,CAAC,SAAS,CAAC;IAEhB,gDAAgD;IAChD,2FAA2F;IAC3F,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1D,4BAA4B;IAC5B,IAAI,KAA8D,CAAC;IACnE,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,GAAG,qBAAqB,CAAC;IAChC,CAAC;SAAM,IAAI,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACrF,KAAK,GAAG,oBAAoB,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,QAAQ,CAAC;IACnB,CAAC;IAED,4DAA4D;IAC5D,IAAI,cAAc,GAAG,MAAM,CAAC;IAC5B,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,cAAc,GAAG,QAAQ,CAAC;IAC5B,CAAC;SAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,cAAc,GAAG,QAAQ,CAAC;IAC5B,CAAC;SAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACrF,cAAc,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,MAAM;QACN,MAAM,EAAE,KAAK,KAAK,QAAQ;QAC1B,MAAM,EAAE,cAAc;QACtB,GAAG;QACH,aAAa;QACb,cAAc;QACd,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,IAKC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,iEAAiE;IACjE,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjE,OAAO;QACL,GAAG,EAAE,GAAG,IAAI,SAAS;QACrB,SAAS,EAAE,IAAI,EAAE,SAAS;QAC1B,SAAS;QACT,WAAW,EAAE,IAAI,EAAE,WAAW;QAC9B,QAAQ,EAAE,IAAI,EAAE,QAAQ;QACxB,IAAI,EAAE,IAAI,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,MAAc,EACd,KAAa,EACb,IAAa,EACb,MAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExC,wEAAwE;IACxE,uDAAuD;IACvD,MAAM,QAAQ,GAA2B;QACvC,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,iBAAiB;QACpC,OAAO,EAAE,SAAS;KACnB,CAAC;IACF,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAE/C,kDAAkD;IAClD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,OAAO;QACL,MAAM;QACN,KAAK,EAAE,aAAa;QACpB,GAAG;QACH,IAAI,EAAE,IAAI,IAAI,SAAS;QACvB,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,8CAA8C,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IACnF,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,mBAAmB,CAAC;IACxE,IAAI,sDAAsD,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAClG,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IACvD,IAAI,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,EAAU;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CACzB,CAAC,CAUA,EAAE,EAAE,CAAC,CAAC;QACL,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;QACtB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;QAChC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;QAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;QAC5B,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;KACjC,CAAC,CACH,CAAC;IAEF,0DAA0D;IAC1D,2EAA2E;IAC3E,4EAA4E;IAC5E,4DAA4D;IAC5D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsC,CAAC;IAC9D,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,+CAA+C;QAC/C,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;QAC3D,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG;QACd,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;QACxD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;QACxD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QAC5D,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;QAC7D,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;KAC9D,CAAC;IAEF,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7B,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;QACtB,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,SAAS,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;QAC9B,eAAe;QACf,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QACzC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,SAAS;QACtC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,SAAS;QAC5C,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACrC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;QACnC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;QACnC,YAAY,EAAE,GAAG,CAAC,YAAY;YAC5B,CAAC,CAAE,GAAG,CAAC,YAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/D,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CACtB,CAAC,KAUA,EAAE,EAAE,CAAC,CAAC;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,SAAS,EAAE,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACtD,eAAe;QACf,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,SAAS;QACxC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;QACvC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,IAAI,SAAS;KAC/C,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAiB;IAChE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO;QACL,MAAM;QACN,GAAG;QACH,aAAa,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KAChE,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,MAAc,EACd,MAAe,EACf,OAAgB,EAChB,MAAe;IAEf,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACnD,gEAAgE;IAChE,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACzF,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,GAAG,MAAM,KAAK,MAAM,IAAI,EAAE,EAAE,CAAC;IAC9C,MAAM,aAAa,GACjB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5C,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACL,MAAM;QACN,KAAK,EAAE,QAAQ;QACf,GAAG;QACH,MAAM,EAAE,MAAM,IAAI,SAAS;QAC3B,UAAU,EAAE,OAAO,IAAI,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QACvE,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAc;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAC/B,CAAC,CAKA,EAAE,EAAE,CAAC,CAAC;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;QAChC,6BAA6B;QAC7B,KAAK,EAAE,CAAC,CAAC,KAAK;YACZ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;aACjC,CAAC,CAAC;YACL,CAAC,CAAC,SAAS;KACd,CAAC,CACH,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,UAAU;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;QAClC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,YAAY,IAAI,EAAE;QACxC,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QACpC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,IAAI;QACJ,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;QAC9B,iBAAiB;QACjB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;QACjC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;QAC7B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACrC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;KAClC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CACpB,CAAC,CAeA,EAAE,EAAE,CAAC,CAAC;QACL,EAAE,EAAE,CAAC,CAAC,UAAU;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;QAChC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,IAAI,EAAE;QACpC,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;QAClC,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;QAC5B,cAAc;QACd,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,SAAS;QAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,SAAS;QAC3B,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS;QACnC,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,SAAS;KAChC,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,MAAc,EACd,KAAa,EACb,UAAmB,EACnB,GAAY;IAEZ,qDAAqD;IACrD,mCAAmC;IACnC,mDAAmD;IACnD,MAAM,QAAQ,GAAG,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACvF,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExC,gDAAgD;IAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzE,oFAAoF;IACpF,qDAAqD;IACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,oDAAoD,CAAC,IAAI,EAAE,CAAC;IAC3F,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/E,OAAO;QACL,KAAK;QACL,MAAM,EAAE,WAAW;QACnB,UAAU;QACV,GAAG;QACH,GAAG,EAAE,GAAG,IAAI,SAAS;QACrB,OAAO;QACP,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,GAAW,EACX,KAAc,EACd,UAAmB,EACnB,KAAc,EACd,WAAoB;IAEpB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,OAAO;QACL,GAAG;QACH,GAAG;QACH,KAAK;QACL,UAAU;QACV,KAAK,EAAE,KAAK,IAAI,SAAS;QACzB,cAAc,EAAE,WAAW,IAAI,SAAS;KACzC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CACxB,CAAC,CASA,EAAE,EAAE,CAAC,CAAC;QACL,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;QACpB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,KAAK,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK;QACzB,UAAU,EAAE,CAAC,CAAC,YAAY,IAAI,KAAK;QACnC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;QAChC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAChB,eAAe;QACf,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,SAAS;QACjC,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS;KACpC,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CACtB,MAAc,EACd,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,MAAe;IAEf,uCAAuC;IACvC,IAAI,UAAU,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5C,IAAI,QAAQ,GAAG,MAAM,CAAC;IAEtB,6DAA6D;IAC7D,+CAA+C;IAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QACpD,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QAE5C,4EAA4E;QAC5E,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC7D,IAAI,WAAW,EAAE,CAAC;YAChB,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,iDAAiD;QACjD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YACjD,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YAEzC,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC7D,IAAI,WAAW,EAAE,CAAC;gBAChB,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,MAAM,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAE1C,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,QAAQ,CAAC;IAClB,CAAC;IAED,qEAAqE;IACrE,MAAM,SAAS,GAAG,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;QAClF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,QAAiB,EACjB,KAAgB,EAChB,WAAoB;IAEpB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,OAAO;QACL,EAAE;QACF,GAAG;QACH,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,KAAK,IAAI,SAAS;QACzB,WAAW,EAAE,WAAW,IAAI,SAAS;QACrC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KAC5C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,sDAAsD;QACtD,MAAM,WAAW,GACf,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC;QAC/B,MAAM,SAAS,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEtD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,CAAC,SAAS,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,QAAQ;gBACpD,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,QAAQ;oBACR,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC;wBAChC,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,UAAU,CAA4C;YAC9D,SAAS;YACT,SAAS;YACT,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9D,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9D,UAAU,EAAE,KAAK,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates that a file path is safe to pass to `gh gist create`.
|
|
3
|
+
* Rejects paths that:
|
|
4
|
+
* - Contain `..` path traversal components
|
|
5
|
+
* - Are absolute paths outside the working directory
|
|
6
|
+
* - Are symlinks pointing outside the working directory
|
|
7
|
+
*
|
|
8
|
+
* @param filePath The user-supplied file path
|
|
9
|
+
* @param cwd The working directory used as the trust boundary
|
|
10
|
+
* @throws Error if the path is unsafe
|
|
11
|
+
*/
|
|
12
|
+
export declare function assertSafeFilePath(filePath: string, cwd: string): void;
|
|
13
|
+
//# sourceMappingURL=path-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-validation.d.ts","sourceRoot":"","sources":["../../src/lib/path-validation.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CA+CtE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { realpathSync, lstatSync } from "node:fs";
|
|
2
|
+
import { resolve, isAbsolute, relative } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Validates that a file path is safe to pass to `gh gist create`.
|
|
5
|
+
* Rejects paths that:
|
|
6
|
+
* - Contain `..` path traversal components
|
|
7
|
+
* - Are absolute paths outside the working directory
|
|
8
|
+
* - Are symlinks pointing outside the working directory
|
|
9
|
+
*
|
|
10
|
+
* @param filePath The user-supplied file path
|
|
11
|
+
* @param cwd The working directory used as the trust boundary
|
|
12
|
+
* @throws Error if the path is unsafe
|
|
13
|
+
*/
|
|
14
|
+
export function assertSafeFilePath(filePath, cwd) {
|
|
15
|
+
// Reject path traversal via ".."
|
|
16
|
+
if (filePath.includes("..")) {
|
|
17
|
+
throw new Error(`Unsafe file path "${filePath}": path traversal ("..") is not allowed. ` +
|
|
18
|
+
`Provide a relative path within the working directory.`);
|
|
19
|
+
}
|
|
20
|
+
// Resolve the path relative to cwd
|
|
21
|
+
const resolvedPath = resolve(cwd, filePath);
|
|
22
|
+
// Reject absolute paths outside the cwd
|
|
23
|
+
if (isAbsolute(filePath)) {
|
|
24
|
+
const rel = relative(cwd, resolvedPath);
|
|
25
|
+
if (rel.startsWith("..")) {
|
|
26
|
+
throw new Error(`Unsafe file path "${filePath}": absolute path is outside the working directory "${cwd}". ` +
|
|
27
|
+
`Provide a relative path within the working directory.`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Check for symlinks pointing outside cwd
|
|
31
|
+
try {
|
|
32
|
+
const stat = lstatSync(resolvedPath);
|
|
33
|
+
if (stat.isSymbolicLink()) {
|
|
34
|
+
const realTarget = realpathSync(resolvedPath);
|
|
35
|
+
// Resolve the real cwd too, to handle macOS /var -> /private/var symlinks
|
|
36
|
+
const realCwd = realpathSync(cwd);
|
|
37
|
+
const rel = relative(realCwd, realTarget);
|
|
38
|
+
if (rel.startsWith("..")) {
|
|
39
|
+
throw new Error(`Unsafe file path "${filePath}": symlink resolves to "${realTarget}" ` +
|
|
40
|
+
`which is outside the working directory "${cwd}".`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
// If the file doesn't exist yet (ENOENT), we can't check symlinks
|
|
46
|
+
// but path traversal and absolute path checks above still apply.
|
|
47
|
+
// Re-throw our own errors, ignore ENOENT.
|
|
48
|
+
if (err instanceof Error && err.message.startsWith("Unsafe file path")) {
|
|
49
|
+
throw err;
|
|
50
|
+
}
|
|
51
|
+
// File doesn't exist — path-traversal / absolute checks above are sufficient
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=path-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-validation.js","sourceRoot":"","sources":["../../src/lib/path-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,GAAW;IAC9D,iCAAiC;IACjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,2CAA2C;YACtE,uDAAuD,CAC1D,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE5C,wCAAwC;IACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,sDAAsD,GAAG,KAAK;gBACzF,uDAAuD,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YAC9C,0EAA0E;YAC1E,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC1C,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,2BAA2B,UAAU,IAAI;oBACpE,2CAA2C,GAAG,IAAI,CACrD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,kEAAkE;QAClE,iEAAiE;QACjE,0CAA0C;QAC1C,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvE,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,6EAA6E;IAC/E,CAAC;AACH,CAAC"}
|