@alejandrochaves/devflow-cli 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -0
- package/dist/commands/branch.d.ts +6 -0
- package/dist/commands/branch.d.ts.map +1 -1
- package/dist/commands/branch.js +100 -12
- package/dist/commands/branch.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +37 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/issue.d.ts +4 -0
- package/dist/commands/issue.d.ts.map +1 -0
- package/dist/commands/issue.js +259 -0
- package/dist/commands/issue.js.map +1 -0
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +17 -2
- package/dist/commands/pr.js.map +1 -1
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +292 -1
- package/dist/config.js.map +1 -1
- package/dist/git.d.ts +6 -8
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +36 -8
- package/dist/git.js.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/providers/tickets.d.ts +26 -0
- package/dist/providers/tickets.d.ts.map +1 -0
- package/dist/providers/tickets.js +80 -0
- package/dist/providers/tickets.js.map +1 -0
- package/package.json +1 -2
package/README.md
CHANGED
|
@@ -198,6 +198,53 @@ devflow comments --number 303
|
|
|
198
198
|
|
|
199
199
|
Requires `gh` CLI.
|
|
200
200
|
|
|
201
|
+
### `devflow issue` (alias: `i`)
|
|
202
|
+
|
|
203
|
+
Create GitHub issues using Scrum-style templates with an interactive flow.
|
|
204
|
+
|
|
205
|
+
**Issue Types:**
|
|
206
|
+
|
|
207
|
+
| Type | Label | Branch Type |
|
|
208
|
+
|------|-------|-------------|
|
|
209
|
+
| User Story | `feature` | `feat/` |
|
|
210
|
+
| Bug | `bug` | `fix/` |
|
|
211
|
+
| Task | `task` | `chore/` |
|
|
212
|
+
| Spike | `spike` | `chore/` |
|
|
213
|
+
| Tech Debt | `tech-debt` | `refactor/` |
|
|
214
|
+
|
|
215
|
+
**Flow:**
|
|
216
|
+
1. Select issue type
|
|
217
|
+
2. Fill in type-specific fields (guided prompts)
|
|
218
|
+
3. Preview the issue
|
|
219
|
+
4. Confirm and create via `gh issue create`
|
|
220
|
+
5. Optionally create a branch and start working
|
|
221
|
+
|
|
222
|
+
**Example:**
|
|
223
|
+
```
|
|
224
|
+
$ devflow issue
|
|
225
|
+
? Select issue type: › User Story
|
|
226
|
+
? As a: › logged-in user
|
|
227
|
+
? I want to: › export my data as CSV
|
|
228
|
+
? So that: › I can use it in spreadsheets
|
|
229
|
+
? Acceptance criteria:
|
|
230
|
+
1. CSV includes all user data
|
|
231
|
+
2. (blank to finish)
|
|
232
|
+
|
|
233
|
+
─── Issue Preview ───
|
|
234
|
+
Type: User Story
|
|
235
|
+
Title: export my data as CSV
|
|
236
|
+
Labels: feature
|
|
237
|
+
|
|
238
|
+
? Create this issue? › Yes
|
|
239
|
+
✓ Issue created: https://github.com/owner/repo/issues/42
|
|
240
|
+
|
|
241
|
+
? Create a branch and start working on this issue? › Yes
|
|
242
|
+
? Short branch description: › export-csv
|
|
243
|
+
✓ Branch created: feat/#42_export-csv
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Requires `gh` CLI.
|
|
247
|
+
|
|
201
248
|
### `devflow stash` (alias: `st`)
|
|
202
249
|
|
|
203
250
|
Named stash management with an interactive interface.
|
|
@@ -340,6 +387,7 @@ eval "$(devflow completions --shell bash)"
|
|
|
340
387
|
| `devflow release` | `devflow rel` |
|
|
341
388
|
| `devflow review` | `devflow rv` |
|
|
342
389
|
| `devflow comments` | `devflow cm` |
|
|
390
|
+
| `devflow issue` | `devflow i` |
|
|
343
391
|
| `devflow stash` | `devflow st` |
|
|
344
392
|
| `devflow worktree` | `devflow wt` |
|
|
345
393
|
| `devflow log` | `devflow l` |
|
|
@@ -361,6 +409,7 @@ devflow fixup --dry-run
|
|
|
361
409
|
devflow merge --dry-run
|
|
362
410
|
devflow cleanup --dry-run
|
|
363
411
|
devflow changelog --dry-run
|
|
412
|
+
devflow issue --dry-run
|
|
364
413
|
```
|
|
365
414
|
|
|
366
415
|
## Configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../src/commands/branch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../src/commands/branch.ts"],"names":[],"mappings":"AAOA,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E,MAAM,CAaR;AAkBD,wBAAsB,aAAa,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgJrF"}
|
package/dist/commands/branch.js
CHANGED
|
@@ -1,29 +1,117 @@
|
|
|
1
1
|
import { select, input, confirm } from "@inquirer/prompts";
|
|
2
2
|
import { execSync } from "child_process";
|
|
3
3
|
import { loadConfig } from "../config.js";
|
|
4
|
-
import { bold, dim, green, cyan } from "../colors.js";
|
|
4
|
+
import { bold, dim, green, cyan, gray } from "../colors.js";
|
|
5
5
|
import { setTestPlan } from "../test-plan.js";
|
|
6
|
+
import { createTicketProvider, inferBranchTypeFromLabels } from "../providers/tickets.js";
|
|
7
|
+
export function formatBranchName(format, vars) {
|
|
8
|
+
let result = format;
|
|
9
|
+
result = result.replace("{type}", vars.type);
|
|
10
|
+
result = result.replace("{ticket}", vars.ticket || "");
|
|
11
|
+
result = result.replace("{description}", vars.description);
|
|
12
|
+
result = result.replace("{scope}", vars.scope || "");
|
|
13
|
+
// Clean up empty parts: double slashes, leading/trailing slashes
|
|
14
|
+
result = result.replace(/\/\//g, "/").replace(/^\/|\/$/g, "");
|
|
15
|
+
// Clean up empty parts: double underscores, leading/trailing underscores
|
|
16
|
+
result = result.replace(/__+/g, "_").replace(/^_|_$/g, "");
|
|
17
|
+
// Clean up underscore next to slash
|
|
18
|
+
result = result.replace(/\/_/g, "/").replace(/_\//g, "/");
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
function toKebabCase(str) {
|
|
22
|
+
return str
|
|
23
|
+
.trim()
|
|
24
|
+
.toLowerCase()
|
|
25
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
26
|
+
.replace(/^-|-$/g, "");
|
|
27
|
+
}
|
|
28
|
+
function formatIssueChoice(ticket) {
|
|
29
|
+
const labels = ticket.labels.length > 0 ? gray(` (${ticket.labels.join(", ")})`) : "";
|
|
30
|
+
return {
|
|
31
|
+
value: ticket,
|
|
32
|
+
name: `#${ticket.id} ${ticket.title}${labels}`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
6
35
|
export async function branchCommand(options = {}) {
|
|
7
36
|
try {
|
|
8
37
|
const config = loadConfig();
|
|
38
|
+
const branchFormat = config.branchFormat;
|
|
39
|
+
const needsTicket = branchFormat.includes("{ticket}");
|
|
40
|
+
// Check if ticket provider is configured
|
|
41
|
+
const ticketProvider = createTicketProvider(config.ticketProvider);
|
|
42
|
+
let ticket;
|
|
43
|
+
let selectedIssue;
|
|
44
|
+
let inferredType;
|
|
45
|
+
let suggestedDescription;
|
|
46
|
+
// If provider is configured and format needs ticket, offer issue picker
|
|
47
|
+
if (ticketProvider && needsTicket) {
|
|
48
|
+
const ticketMethod = await select({
|
|
49
|
+
message: "How do you want to select the ticket?",
|
|
50
|
+
choices: [
|
|
51
|
+
{ value: "pick", name: "Pick from open issues (assigned to me)" },
|
|
52
|
+
{ value: "manual", name: "Enter manually" },
|
|
53
|
+
{ value: "skip", name: "Skip (UNTRACKED)" },
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
if (ticketMethod === "pick") {
|
|
57
|
+
const issues = ticketProvider.listOpen({ assignee: "@me" });
|
|
58
|
+
if (issues.length === 0) {
|
|
59
|
+
console.log(dim("No open issues assigned to you. Falling back to manual input."));
|
|
60
|
+
ticket = await input({
|
|
61
|
+
message: "Ticket number (leave blank for UNTRACKED):",
|
|
62
|
+
});
|
|
63
|
+
ticket = ticket.trim() || "UNTRACKED";
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
selectedIssue = await select({
|
|
67
|
+
message: "Select an issue:",
|
|
68
|
+
choices: issues.map(formatIssueChoice),
|
|
69
|
+
});
|
|
70
|
+
ticket = selectedIssue.id;
|
|
71
|
+
inferredType = inferBranchTypeFromLabels(selectedIssue.labels);
|
|
72
|
+
suggestedDescription = toKebabCase(selectedIssue.title);
|
|
73
|
+
if (inferredType) {
|
|
74
|
+
console.log(dim(` Inferred type from labels: ${cyan(inferredType)}`));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (ticketMethod === "manual") {
|
|
79
|
+
ticket = await input({
|
|
80
|
+
message: "Ticket number (leave blank for UNTRACKED):",
|
|
81
|
+
});
|
|
82
|
+
ticket = ticket.trim() || "UNTRACKED";
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
ticket = "UNTRACKED";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (needsTicket) {
|
|
89
|
+
// No provider, use manual input
|
|
90
|
+
ticket = await input({
|
|
91
|
+
message: "Ticket number (leave blank for UNTRACKED):",
|
|
92
|
+
});
|
|
93
|
+
ticket = ticket.trim() || "UNTRACKED";
|
|
94
|
+
}
|
|
95
|
+
// Select branch type (with inferred default if available)
|
|
96
|
+
const typeChoices = config.branchTypes.map((t) => ({ value: t, name: t }));
|
|
97
|
+
const defaultType = inferredType && config.branchTypes.includes(inferredType) ? inferredType : undefined;
|
|
9
98
|
const type = await select({
|
|
10
99
|
message: "Select branch type:",
|
|
11
|
-
choices:
|
|
12
|
-
|
|
13
|
-
const ticket = await input({
|
|
14
|
-
message: "Ticket number (leave blank for UNTRACKED):",
|
|
100
|
+
choices: typeChoices,
|
|
101
|
+
default: defaultType,
|
|
15
102
|
});
|
|
103
|
+
// Get description (with suggested default if available)
|
|
16
104
|
const description = await input({
|
|
17
105
|
message: "Short description:",
|
|
106
|
+
default: suggestedDescription,
|
|
18
107
|
validate: (val) => val.trim().length > 0 || "Description is required",
|
|
19
108
|
});
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const branchName = `${type}/${ticketPart}_${kebab}`;
|
|
109
|
+
const kebab = toKebabCase(description);
|
|
110
|
+
const branchName = formatBranchName(branchFormat, {
|
|
111
|
+
type,
|
|
112
|
+
ticket,
|
|
113
|
+
description: kebab,
|
|
114
|
+
});
|
|
27
115
|
console.log(`\n${dim("───")} ${bold("Branch Preview")} ${dim("───")}`);
|
|
28
116
|
console.log(cyan(branchName));
|
|
29
117
|
console.log(`${dim("───────────────────")}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../src/commands/branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../src/commands/branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAgCA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA4UjD"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
2
2
|
import { resolve } from "path";
|
|
3
|
-
import { confirm, input } from "@inquirer/prompts";
|
|
3
|
+
import { confirm, input, select } from "@inquirer/prompts";
|
|
4
4
|
import { execSync } from "child_process";
|
|
5
|
+
import { PRESETS } from "../config.js";
|
|
5
6
|
const DEFAULT_CHECKLIST = [
|
|
6
7
|
"Code follows project conventions",
|
|
7
8
|
"Self-reviewed the changes",
|
|
@@ -37,10 +38,31 @@ export async function initCommand() {
|
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
console.log("\n devflow setup\n");
|
|
40
|
-
//
|
|
41
|
-
const
|
|
42
|
-
message: "
|
|
41
|
+
// 0. Preset selection
|
|
42
|
+
const preset = await select({
|
|
43
|
+
message: "Select a workflow preset:",
|
|
44
|
+
choices: [
|
|
45
|
+
{ value: "scrum", name: "Scrum - User stories, sprints, acceptance criteria" },
|
|
46
|
+
{ value: "kanban", name: "Kanban - Simple flow-based workflow" },
|
|
47
|
+
{ value: "simple", name: "Simple - Minimal configuration, no ticket required" },
|
|
48
|
+
{ value: "custom", name: "Custom - Configure everything manually" },
|
|
49
|
+
],
|
|
43
50
|
});
|
|
51
|
+
const presetConfig = PRESETS[preset];
|
|
52
|
+
console.log("");
|
|
53
|
+
// 1. Ticket base URL (skip for simple preset since no tickets)
|
|
54
|
+
let ticketBaseUrl = "";
|
|
55
|
+
let useGitHubIssues = false;
|
|
56
|
+
if (preset !== "simple") {
|
|
57
|
+
ticketBaseUrl = await input({
|
|
58
|
+
message: "Ticket base URL (e.g., https://github.com/org/repo/issues):",
|
|
59
|
+
});
|
|
60
|
+
// 1b. GitHub Issues integration
|
|
61
|
+
useGitHubIssues = await confirm({
|
|
62
|
+
message: "Use GitHub Issues for ticket tracking? (enables issue picker in branch command)",
|
|
63
|
+
default: ticketBaseUrl.includes("github.com"),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
44
66
|
// 2. Scopes
|
|
45
67
|
console.log("\nLet's define your project scopes for commits.");
|
|
46
68
|
console.log("Add scopes one at a time. Press Enter with empty name to finish.\n");
|
|
@@ -100,12 +122,23 @@ export async function initCommand() {
|
|
|
100
122
|
}
|
|
101
123
|
// Write .devflow.json
|
|
102
124
|
const config = {
|
|
125
|
+
preset,
|
|
126
|
+
branchFormat: presetConfig.branchFormat,
|
|
103
127
|
scopes,
|
|
104
128
|
checklist,
|
|
105
129
|
};
|
|
106
130
|
if (ticketBaseUrl.trim()) {
|
|
107
131
|
config.ticketBaseUrl = ticketBaseUrl.trim();
|
|
108
132
|
}
|
|
133
|
+
// Add ticket provider if GitHub Issues is enabled
|
|
134
|
+
if (useGitHubIssues) {
|
|
135
|
+
config.ticketProvider = { type: "github" };
|
|
136
|
+
}
|
|
137
|
+
// Only include issueTypes and prTemplate for custom preset or if user wants to customize
|
|
138
|
+
if (preset === "custom") {
|
|
139
|
+
config.issueTypes = presetConfig.issueTypes;
|
|
140
|
+
config.prTemplate = presetConfig.prTemplate;
|
|
141
|
+
}
|
|
109
142
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
110
143
|
console.log("\n✓ Created .devflow.json");
|
|
111
144
|
// 4. Add scripts to package.json
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"AA8JA,wBAAsB,YAAY,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgJpF"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { select, input, confirm, editor } from "@inquirer/prompts";
|
|
2
|
+
import { execSync } from "child_process";
|
|
3
|
+
import { loadConfig } from "../config.js";
|
|
4
|
+
import { bold, dim, green, cyan, gray } from "../colors.js";
|
|
5
|
+
import { checkGhInstalled } from "../git.js";
|
|
6
|
+
import { setTestPlan } from "../test-plan.js";
|
|
7
|
+
import { formatBranchName } from "./branch.js";
|
|
8
|
+
async function collectList(prompt) {
|
|
9
|
+
console.log(dim(`\n${prompt} (one per line). Empty line to finish:\n`));
|
|
10
|
+
const items = [];
|
|
11
|
+
let adding = true;
|
|
12
|
+
while (adding) {
|
|
13
|
+
const item = await input({
|
|
14
|
+
message: ` ${items.length + 1}.${items.length > 0 ? " (blank to finish)" : ""}`,
|
|
15
|
+
});
|
|
16
|
+
if (!item.trim()) {
|
|
17
|
+
adding = false;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
items.push(item.trim());
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return items;
|
|
24
|
+
}
|
|
25
|
+
async function collectFieldValue(field) {
|
|
26
|
+
switch (field.type) {
|
|
27
|
+
case "input":
|
|
28
|
+
return await input({
|
|
29
|
+
message: field.prompt,
|
|
30
|
+
validate: field.required ? (val) => val.trim().length > 0 || "Required" : undefined,
|
|
31
|
+
});
|
|
32
|
+
case "multiline":
|
|
33
|
+
return await editor({
|
|
34
|
+
message: field.prompt,
|
|
35
|
+
validate: field.required ? (val) => val.trim().length > 0 || "Required" : undefined,
|
|
36
|
+
});
|
|
37
|
+
case "select":
|
|
38
|
+
if (!field.options || field.options.length === 0) {
|
|
39
|
+
return await input({ message: field.prompt });
|
|
40
|
+
}
|
|
41
|
+
return await select({
|
|
42
|
+
message: field.prompt,
|
|
43
|
+
choices: field.options.map((opt) => ({ value: opt, name: opt })),
|
|
44
|
+
});
|
|
45
|
+
case "list":
|
|
46
|
+
return await collectList(field.prompt);
|
|
47
|
+
default:
|
|
48
|
+
return await input({ message: field.prompt });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function applyTemplate(template, values) {
|
|
52
|
+
let result = template;
|
|
53
|
+
// Handle conditional sections: {field:section:Title}
|
|
54
|
+
// These only appear if the field has a value
|
|
55
|
+
const sectionRegex = /\{(\w+):section:([^}]+)\}/g;
|
|
56
|
+
result = result.replace(sectionRegex, (_, fieldName, sectionTitle) => {
|
|
57
|
+
const value = values[fieldName];
|
|
58
|
+
if (!value || (Array.isArray(value) && value.length === 0) || (typeof value === "string" && !value.trim())) {
|
|
59
|
+
return "";
|
|
60
|
+
}
|
|
61
|
+
if (Array.isArray(value)) {
|
|
62
|
+
return `\n### ${sectionTitle}\n${value.map((v, i) => `${i + 1}. ${v}`).join("\n")}`;
|
|
63
|
+
}
|
|
64
|
+
return `\n### ${sectionTitle}\n${value}`;
|
|
65
|
+
});
|
|
66
|
+
// Handle list as checkboxes: {field:checkbox}
|
|
67
|
+
const checkboxRegex = /\{(\w+):checkbox\}/g;
|
|
68
|
+
result = result.replace(checkboxRegex, (_, fieldName) => {
|
|
69
|
+
const value = values[fieldName];
|
|
70
|
+
if (!value || (Array.isArray(value) && value.length === 0)) {
|
|
71
|
+
return "";
|
|
72
|
+
}
|
|
73
|
+
if (Array.isArray(value)) {
|
|
74
|
+
return value.map((v) => `- [ ] ${v}`).join("\n");
|
|
75
|
+
}
|
|
76
|
+
return `- [ ] ${value}`;
|
|
77
|
+
});
|
|
78
|
+
// Handle list as numbered: {field:numbered}
|
|
79
|
+
const numberedRegex = /\{(\w+):numbered\}/g;
|
|
80
|
+
result = result.replace(numberedRegex, (_, fieldName) => {
|
|
81
|
+
const value = values[fieldName];
|
|
82
|
+
if (!value || (Array.isArray(value) && value.length === 0)) {
|
|
83
|
+
return "";
|
|
84
|
+
}
|
|
85
|
+
if (Array.isArray(value)) {
|
|
86
|
+
return value.map((v, i) => `${i + 1}. ${v}`).join("\n");
|
|
87
|
+
}
|
|
88
|
+
return `1. ${value}`;
|
|
89
|
+
});
|
|
90
|
+
// Handle simple placeholders: {field}
|
|
91
|
+
const simpleRegex = /\{(\w+)\}/g;
|
|
92
|
+
result = result.replace(simpleRegex, (_, fieldName) => {
|
|
93
|
+
const value = values[fieldName];
|
|
94
|
+
if (value === undefined || value === null)
|
|
95
|
+
return "";
|
|
96
|
+
if (Array.isArray(value)) {
|
|
97
|
+
return value.join("\n");
|
|
98
|
+
}
|
|
99
|
+
return String(value);
|
|
100
|
+
});
|
|
101
|
+
// Clean up multiple blank lines
|
|
102
|
+
result = result.replace(/\n{3,}/g, "\n\n").trim();
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
async function collectIssueData(issueType) {
|
|
106
|
+
const values = {};
|
|
107
|
+
for (const field of issueType.fields) {
|
|
108
|
+
values[field.name] = await collectFieldValue(field);
|
|
109
|
+
}
|
|
110
|
+
// Apply template with collected values
|
|
111
|
+
const body = applyTemplate(issueType.template, values);
|
|
112
|
+
// Determine title: use first required field or first field
|
|
113
|
+
const titleField = issueType.fields.find((f) => f.required) || issueType.fields[0];
|
|
114
|
+
const titleValue = values[titleField?.name || ""];
|
|
115
|
+
const title = Array.isArray(titleValue) ? titleValue[0] || "" : String(titleValue || "").trim();
|
|
116
|
+
return { title, body };
|
|
117
|
+
}
|
|
118
|
+
function formatIssuePreview(data) {
|
|
119
|
+
const lines = [
|
|
120
|
+
`${dim("───")} ${bold("Issue Preview")} ${dim("───")}`,
|
|
121
|
+
"",
|
|
122
|
+
`${bold("Type:")} ${data.type.label}`,
|
|
123
|
+
`${bold("Title:")} ${cyan(data.title)}`,
|
|
124
|
+
`${bold("Labels:")} ${data.labels.join(", ")}`,
|
|
125
|
+
"",
|
|
126
|
+
gray("─── Body ───"),
|
|
127
|
+
"",
|
|
128
|
+
data.body,
|
|
129
|
+
"",
|
|
130
|
+
dim("─────────────────────"),
|
|
131
|
+
];
|
|
132
|
+
return lines.join("\n");
|
|
133
|
+
}
|
|
134
|
+
export async function issueCommand(options = {}) {
|
|
135
|
+
try {
|
|
136
|
+
checkGhInstalled();
|
|
137
|
+
const config = loadConfig();
|
|
138
|
+
const issueTypes = config.issueTypes;
|
|
139
|
+
const branchFormat = config.branchFormat;
|
|
140
|
+
// Select issue type
|
|
141
|
+
const issueType = await select({
|
|
142
|
+
message: "Select issue type:",
|
|
143
|
+
choices: issueTypes.map((t) => ({
|
|
144
|
+
value: t,
|
|
145
|
+
name: t.label,
|
|
146
|
+
})),
|
|
147
|
+
});
|
|
148
|
+
// Collect type-specific data
|
|
149
|
+
console.log("");
|
|
150
|
+
const { title, body } = await collectIssueData(issueType);
|
|
151
|
+
// Determine labels
|
|
152
|
+
const labels = [issueType.labelColor];
|
|
153
|
+
// Build issue data
|
|
154
|
+
const issueData = {
|
|
155
|
+
type: issueType,
|
|
156
|
+
title,
|
|
157
|
+
body,
|
|
158
|
+
labels,
|
|
159
|
+
};
|
|
160
|
+
// Preview
|
|
161
|
+
console.log("\n" + formatIssuePreview(issueData));
|
|
162
|
+
if (options.dryRun) {
|
|
163
|
+
console.log(dim("[dry-run] No issue created."));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const confirmed = await confirm({
|
|
167
|
+
message: "Create this issue?",
|
|
168
|
+
default: true,
|
|
169
|
+
});
|
|
170
|
+
if (!confirmed) {
|
|
171
|
+
console.log("Aborted.");
|
|
172
|
+
process.exit(0);
|
|
173
|
+
}
|
|
174
|
+
// Create the issue using gh CLI
|
|
175
|
+
const labelArg = labels.length > 0 ? `--label "${labels.join(",")}"` : "";
|
|
176
|
+
const cmd = `gh issue create --title ${JSON.stringify(title)} --body ${JSON.stringify(body)} ${labelArg}`;
|
|
177
|
+
const result = execSync(cmd, { encoding: "utf-8" }).trim();
|
|
178
|
+
// Extract issue number from URL (format: https://github.com/owner/repo/issues/123)
|
|
179
|
+
const issueUrlMatch = result.match(/\/issues\/(\d+)/);
|
|
180
|
+
const issueNumber = issueUrlMatch ? issueUrlMatch[1] : null;
|
|
181
|
+
console.log(green(`\n✓ Issue created: ${result}`));
|
|
182
|
+
// Offer to create a branch
|
|
183
|
+
const createBranch = await confirm({
|
|
184
|
+
message: "Create a branch and start working on this issue?",
|
|
185
|
+
default: true,
|
|
186
|
+
});
|
|
187
|
+
if (createBranch) {
|
|
188
|
+
const description = await input({
|
|
189
|
+
message: "Short branch description:",
|
|
190
|
+
default: title
|
|
191
|
+
.toLowerCase()
|
|
192
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
193
|
+
.replace(/^-|-$/g, "")
|
|
194
|
+
.slice(0, 50),
|
|
195
|
+
validate: (val) => val.trim().length > 0 || "Description is required",
|
|
196
|
+
});
|
|
197
|
+
const kebab = description
|
|
198
|
+
.trim()
|
|
199
|
+
.toLowerCase()
|
|
200
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
201
|
+
.replace(/^-|-$/g, "");
|
|
202
|
+
// Use configurable branch format
|
|
203
|
+
const ticketPart = issueNumber ? `#${issueNumber}` : "UNTRACKED";
|
|
204
|
+
const branchName = formatBranchName(branchFormat, {
|
|
205
|
+
type: issueType.branchType,
|
|
206
|
+
ticket: ticketPart,
|
|
207
|
+
description: kebab,
|
|
208
|
+
});
|
|
209
|
+
console.log(`\n${dim("Branch:")} ${cyan(branchName)}`);
|
|
210
|
+
const confirmBranch = await confirm({
|
|
211
|
+
message: "Create this branch?",
|
|
212
|
+
default: true,
|
|
213
|
+
});
|
|
214
|
+
if (confirmBranch) {
|
|
215
|
+
execSync(`git checkout -b ${branchName}`, { stdio: "inherit" });
|
|
216
|
+
console.log(green(`✓ Branch created: ${branchName}`));
|
|
217
|
+
// Offer test plan for feature-like issues (user-story, feature) and bugs
|
|
218
|
+
const isFeatureType = issueType.value === "user-story" || issueType.value === "feature";
|
|
219
|
+
const isBugType = issueType.value === "bug";
|
|
220
|
+
if (isFeatureType || isBugType) {
|
|
221
|
+
const addTestPlan = await confirm({
|
|
222
|
+
message: "Add test plan steps?",
|
|
223
|
+
default: false,
|
|
224
|
+
});
|
|
225
|
+
if (addTestPlan) {
|
|
226
|
+
const steps = [];
|
|
227
|
+
console.log(dim("\nAdd testing steps. Empty line to finish.\n"));
|
|
228
|
+
let adding = true;
|
|
229
|
+
while (adding) {
|
|
230
|
+
const step = await input({
|
|
231
|
+
message: `Step ${steps.length + 1}${steps.length > 0 ? " (blank to finish)" : ""}:`,
|
|
232
|
+
});
|
|
233
|
+
if (!step.trim()) {
|
|
234
|
+
adding = false;
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
steps.push(step.trim());
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (steps.length > 0) {
|
|
241
|
+
setTestPlan(branchName, steps);
|
|
242
|
+
console.log(green(`✓ Saved ${steps.length} test plan step${steps.length > 1 ? "s" : ""}`));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
console.log(dim("\nYou're ready to start working!"));
|
|
247
|
+
console.log(dim(` Make changes, then: ${cyan("devflow commit")}`));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
if (error.name === "ExitPromptError") {
|
|
253
|
+
console.log("\nCancelled.");
|
|
254
|
+
process.exit(0);
|
|
255
|
+
}
|
|
256
|
+
throw error;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAyB,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAS/C,KAAK,UAAU,WAAW,CAAC,MAAc;IACvC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,0CAA0C,CAAC,CAAC,CAAC;IACxE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,OAAO,MAAM,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC;YACvB,OAAO,EAAE,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE;SACjF,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,KAAiB;IAChD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,MAAM,KAAK,CAAC;gBACjB,OAAO,EAAE,KAAK,CAAC,MAAM;gBACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,SAAS;aACpF,CAAC,CAAC;QAEL,KAAK,WAAW;YACd,OAAO,MAAM,MAAM,CAAC;gBAClB,OAAO,EAAE,KAAK,CAAC,MAAM;gBACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,SAAS;aACpF,CAAC,CAAC;QAEL,KAAK,QAAQ;YACX,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjD,OAAO,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,MAAM,MAAM,CAAC;gBAClB,OAAO,EAAE,KAAK,CAAC,MAAM;gBACrB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;aACjE,CAAC,CAAC;QAEL,KAAK,MAAM;YACT,OAAO,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzC;YACE,OAAO,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,MAAyC;IAChF,IAAI,MAAM,GAAG,QAAQ,CAAC;IAEtB,qDAAqD;IACrD,6CAA6C;IAC7C,MAAM,YAAY,GAAG,4BAA4B,CAAC;IAClD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3G,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,SAAS,YAAY,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtF,CAAC;QACD,OAAO,SAAS,YAAY,KAAK,KAAK,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,8CAA8C;IAC9C,MAAM,aAAa,GAAG,qBAAqB,CAAC;IAC5C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,SAAS,KAAK,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,MAAM,aAAa,GAAG,qBAAqB,CAAC;IAC5C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,MAAM,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,MAAM,WAAW,GAAG,YAAY,CAAC;IACjC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QACrD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,SAAoB;IAClD,MAAM,MAAM,GAAsC,EAAE,CAAC;IAErD,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,uCAAuC;IACvC,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEvD,2DAA2D;IAC3D,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEhG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAe;IACzC,MAAM,KAAK,GAAG;QACZ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE;QACtD,EAAE;QACF,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QACvC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACxC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC9C,EAAE;QACF,IAAI,CAAC,cAAc,CAAC;QACpB,EAAE;QACF,IAAI,CAAC,IAAI;QACT,EAAE;QACF,GAAG,CAAC,uBAAuB,CAAC;KAC7B,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAgC,EAAE;IACnE,IAAI,CAAC;QACH,gBAAgB,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAEzC,oBAAoB;QACpB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC;YAC7B,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9B,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,CAAC,CAAC,KAAK;aACd,CAAC,CAAC;SACJ,CAAC,CAAC;QAEH,6BAA6B;QAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAE1D,mBAAmB;QACnB,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAEtC,mBAAmB;QACnB,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,SAAS;YACf,KAAK;YACL,IAAI;YACJ,MAAM;SACP,CAAC;QAEF,UAAU;QACV,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;QAElD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,GAAG,GAAG,2BAA2B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QAE1G,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE3D,mFAAmF;QACnF,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC,CAAC;QAEnD,2BAA2B;QAC3B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC;YACjC,OAAO,EAAE,kDAAkD;YAC3D,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC;gBAC9B,OAAO,EAAE,2BAA2B;gBACpC,OAAO,EAAE,KAAK;qBACX,WAAW,EAAE;qBACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;qBAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;qBACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBACf,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,yBAAyB;aACtE,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,WAAW;iBACtB,IAAI,EAAE;iBACN,WAAW,EAAE;iBACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;iBAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAEzB,iCAAiC;YACjC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;YACjE,MAAM,UAAU,GAAG,gBAAgB,CAAC,YAAY,EAAE;gBAChD,IAAI,EAAE,SAAS,CAAC,UAAU;gBAC1B,MAAM,EAAE,UAAU;gBAClB,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAEvD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC;gBAClC,OAAO,EAAE,qBAAqB;gBAC9B,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YAEH,IAAI,aAAa,EAAE,CAAC;gBAClB,QAAQ,CAAC,mBAAmB,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC,CAAC;gBAEtD,yEAAyE;gBACzE,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,KAAK,YAAY,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC;gBACxF,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC;gBAC5C,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;oBAC/B,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC;wBAChC,OAAO,EAAE,sBAAsB;wBAC/B,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;oBAEH,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,KAAK,GAAa,EAAE,CAAC;wBAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;wBACjE,IAAI,MAAM,GAAG,IAAI,CAAC;wBAClB,OAAO,MAAM,EAAE,CAAC;4BACd,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC;gCACvB,OAAO,EAAE,QAAQ,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,GAAG;6BACpF,CAAC,CAAC;4BACH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gCACjB,MAAM,GAAG,KAAK,CAAC;4BACjB,CAAC;iCAAM,CAAC;gCACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;4BAC1B,CAAC;wBACH,CAAC;wBACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACrB,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;4BAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,MAAM,kBAAkB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBAC7F,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAAe,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"AAyIA,wBAAsB,SAAS,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA0IjF"}
|