@alejandrochaves/devflow-cli 0.1.0 → 0.2.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 +305 -0
- package/dist/colors.d.ts +9 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +13 -0
- package/dist/colors.js.map +1 -0
- package/dist/commands/amend.d.ts +4 -0
- package/dist/commands/amend.d.ts.map +1 -0
- package/dist/commands/amend.js +138 -0
- package/dist/commands/amend.js.map +1 -0
- package/dist/commands/branch.d.ts +3 -1
- package/dist/commands/branch.d.ts.map +1 -1
- package/dist/commands/branch.js +10 -5
- package/dist/commands/branch.js.map +1 -1
- package/dist/commands/changelog.d.ts +4 -0
- package/dist/commands/changelog.d.ts.map +1 -0
- package/dist/commands/changelog.js +204 -0
- package/dist/commands/changelog.js.map +1 -0
- package/dist/commands/cleanup.d.ts +4 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +121 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/commit.d.ts +3 -1
- package/dist/commands/commit.d.ts.map +1 -1
- package/dist/commands/commit.js +91 -24
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +122 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +248 -22
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pr.d.ts +3 -1
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +41 -40
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +83 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +52 -1
- package/dist/config.js.map +1 -1
- package/dist/index.js +103 -5
- package/dist/index.js.map +1 -1
- package/package.json +12 -3
package/README.md
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
# @alejandrochaves/devflow-cli
|
|
2
|
+
|
|
3
|
+
Interactive CLI for branch creation, conventional commits, and PR management.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -D @alejandrochaves/devflow-cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Initialize config in your project
|
|
15
|
+
npx devflow init
|
|
16
|
+
|
|
17
|
+
# Create a branch
|
|
18
|
+
npx devflow branch
|
|
19
|
+
|
|
20
|
+
# Stage files and commit
|
|
21
|
+
npx devflow commit
|
|
22
|
+
|
|
23
|
+
# Create or update a PR
|
|
24
|
+
npx devflow pr
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Or add scripts to your `package.json`:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"scripts": {
|
|
32
|
+
"branch": "devflow branch",
|
|
33
|
+
"commit": "devflow commit",
|
|
34
|
+
"pr": "devflow pr"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Commands
|
|
40
|
+
|
|
41
|
+
### `devflow init`
|
|
42
|
+
|
|
43
|
+
Interactive setup wizard that configures your entire project. Walks you through:
|
|
44
|
+
|
|
45
|
+
1. **Ticket base URL** — for linking tickets in PRs
|
|
46
|
+
2. **Scopes** — add project-specific scopes one by one (or use defaults)
|
|
47
|
+
3. **PR checklist** — customize or use defaults
|
|
48
|
+
4. **package.json scripts** — auto-adds `commit`, `branch`, `pr` scripts
|
|
49
|
+
5. **Commitlint** — creates config with the devflow parser preset, installs deps
|
|
50
|
+
6. **Husky** — installs, initializes, creates `commit-msg` hook
|
|
51
|
+
7. **CI workflow** — optionally generates `.github/workflows/ci.yml` (lint, typecheck, test)
|
|
52
|
+
|
|
53
|
+
### `devflow branch`
|
|
54
|
+
|
|
55
|
+
Interactive branch creation with consistent naming.
|
|
56
|
+
|
|
57
|
+
**Flow:**
|
|
58
|
+
1. Select branch type (feat, fix, chore, refactor, docs, test, release, hotfix)
|
|
59
|
+
2. Enter ticket number (or leave blank for `UNTRACKED`)
|
|
60
|
+
3. Enter short description (auto-kebab-cased)
|
|
61
|
+
4. Preview and confirm
|
|
62
|
+
|
|
63
|
+
**Branch format:**
|
|
64
|
+
```
|
|
65
|
+
type/TICKET_description
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Examples:**
|
|
69
|
+
```
|
|
70
|
+
feat/ENV-123_add-budget-sharing
|
|
71
|
+
fix/PROJ-45_correct-calculation-overflow
|
|
72
|
+
chore/UNTRACKED_update-dependencies
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### `devflow commit`
|
|
76
|
+
|
|
77
|
+
Interactive conventional commit with file staging, scope selection, and ticket inference.
|
|
78
|
+
|
|
79
|
+
**Flow:**
|
|
80
|
+
1. If no files are staged, select files to stage (checkbox selection)
|
|
81
|
+
2. Select commit type
|
|
82
|
+
3. Select or enter scope (searchable list if configured, free text otherwise)
|
|
83
|
+
4. Enter commit message
|
|
84
|
+
5. Confirm if breaking change
|
|
85
|
+
6. Preview and confirm
|
|
86
|
+
|
|
87
|
+
**Commit format:**
|
|
88
|
+
```
|
|
89
|
+
type[ticket](scope): message
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The ticket is automatically inferred from the branch name. If the branch doesn't follow the `type/TICKET_description` format, it defaults to `UNTRACKED`.
|
|
93
|
+
|
|
94
|
+
**Examples:**
|
|
95
|
+
```
|
|
96
|
+
feat[ENV-123](auth): add biometric login
|
|
97
|
+
fix[PROJ-45](budget): correct calculation overflow
|
|
98
|
+
chore[UNTRACKED](deps): update dependencies
|
|
99
|
+
refactor[ENV-200]!(api): restructure endpoints
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The `!` after the ticket indicates a breaking change.
|
|
103
|
+
|
|
104
|
+
### `devflow pr`
|
|
105
|
+
|
|
106
|
+
Create or update a pull request with an auto-filled template.
|
|
107
|
+
|
|
108
|
+
**Flow:**
|
|
109
|
+
1. Checks if a PR already exists for the current branch (offers to update)
|
|
110
|
+
2. Infers the base branch (closest remote branch by merge-base)
|
|
111
|
+
3. Enter PR title (pre-filled from branch description)
|
|
112
|
+
4. Enter optional summary
|
|
113
|
+
5. Preview PR body with template
|
|
114
|
+
6. Confirm and create/update
|
|
115
|
+
|
|
116
|
+
**Features:**
|
|
117
|
+
- Auto-detects existing PRs and offers update flow
|
|
118
|
+
- Infers base branch using `git merge-base` comparison
|
|
119
|
+
- Pre-fills commit list in the summary
|
|
120
|
+
- Auto-labels from branch type (feat → `feature`, fix → `bug`, etc.)
|
|
121
|
+
- Auto-labels from commit scopes
|
|
122
|
+
- Self-assigns with `@me`
|
|
123
|
+
- Creates as draft by default
|
|
124
|
+
- Links ticket if `ticketBaseUrl` is configured
|
|
125
|
+
|
|
126
|
+
**PR template includes:**
|
|
127
|
+
- Summary (with commit list)
|
|
128
|
+
- Ticket (linked if base URL configured)
|
|
129
|
+
- Type of Change (checkboxes, auto-checked from branch type)
|
|
130
|
+
- Screenshots table
|
|
131
|
+
- Test Plan
|
|
132
|
+
- Checklist (customizable via config)
|
|
133
|
+
|
|
134
|
+
### `devflow status`
|
|
135
|
+
|
|
136
|
+
At-a-glance view of your current branch context:
|
|
137
|
+
- Branch name, type, ticket, and description
|
|
138
|
+
- Inferred base branch
|
|
139
|
+
- Commit count with recent messages
|
|
140
|
+
- Working tree status (staged/modified/untracked)
|
|
141
|
+
- PR link and state (if exists)
|
|
142
|
+
|
|
143
|
+
### `devflow amend`
|
|
144
|
+
|
|
145
|
+
Re-edit the last commit message using the same guided prompts. Pre-fills all fields from the existing message. Also includes any staged changes in the amend.
|
|
146
|
+
|
|
147
|
+
### `devflow cleanup`
|
|
148
|
+
|
|
149
|
+
Finds and deletes local branches that are:
|
|
150
|
+
- Merged into `main`
|
|
151
|
+
- Tracking a remote branch that no longer exists
|
|
152
|
+
|
|
153
|
+
Fetches remote state first, shows checkbox selection, and asks for confirmation before force-deleting unmerged branches.
|
|
154
|
+
|
|
155
|
+
### `devflow changelog`
|
|
156
|
+
|
|
157
|
+
Generates a changelog entry from conventional commits since the last git tag:
|
|
158
|
+
- Groups by type (Features, Bug Fixes, etc.)
|
|
159
|
+
- Highlights breaking changes
|
|
160
|
+
- Auto-suggests the next version (semver bump based on commit types)
|
|
161
|
+
- Prepends to `CHANGELOG.md`
|
|
162
|
+
|
|
163
|
+
### `devflow doctor`
|
|
164
|
+
|
|
165
|
+
Checks that all devflow dependencies are properly configured:
|
|
166
|
+
- git, node (>= 18), gh CLI + auth
|
|
167
|
+
- `.devflow.json`, commitlint config, husky hooks
|
|
168
|
+
- `package.json` scripts
|
|
169
|
+
|
|
170
|
+
### `devflow completions`
|
|
171
|
+
|
|
172
|
+
Outputs shell completion scripts for tab-completion of commands:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
# zsh (add to ~/.zshrc)
|
|
176
|
+
eval "$(devflow completions --shell zsh)"
|
|
177
|
+
|
|
178
|
+
# bash (add to ~/.bashrc)
|
|
179
|
+
eval "$(devflow completions --shell bash)"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Global Options
|
|
183
|
+
|
|
184
|
+
Commands that modify git state support `--dry-run` to preview without executing:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
devflow commit --dry-run
|
|
188
|
+
devflow branch --dry-run
|
|
189
|
+
devflow pr --dry-run
|
|
190
|
+
devflow amend --dry-run
|
|
191
|
+
devflow cleanup --dry-run
|
|
192
|
+
devflow changelog --dry-run
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Configuration
|
|
196
|
+
|
|
197
|
+
Create a `.devflow.json` in your project root (or run `devflow init`):
|
|
198
|
+
|
|
199
|
+
```json
|
|
200
|
+
{
|
|
201
|
+
"ticketBaseUrl": "https://github.com/org/repo/issues",
|
|
202
|
+
"scopes": [
|
|
203
|
+
{ "value": "auth", "description": "Authentication & login", "paths": ["src/auth/**"] },
|
|
204
|
+
{ "value": "ui", "description": "UI components", "paths": ["src/components/**"] },
|
|
205
|
+
{ "value": "api", "description": "API layer", "paths": ["src/api/**", "src/services/**"] }
|
|
206
|
+
],
|
|
207
|
+
"branchTypes": ["feat", "fix", "chore", "refactor", "docs", "test", "release", "hotfix"],
|
|
208
|
+
"commitTypes": [
|
|
209
|
+
{ "value": "feat", "label": "feat: A new feature" },
|
|
210
|
+
{ "value": "fix", "label": "fix: A bug fix" }
|
|
211
|
+
],
|
|
212
|
+
"commitFormat": "{type}[{ticket}]{breaking}({scope}): {message}",
|
|
213
|
+
"checklist": [
|
|
214
|
+
"Code follows project conventions",
|
|
215
|
+
"Self-reviewed the changes",
|
|
216
|
+
"No new warnings or errors introduced"
|
|
217
|
+
],
|
|
218
|
+
"prTemplate": {
|
|
219
|
+
"sections": ["summary", "ticket", "type", "screenshots", "testPlan", "checklist"],
|
|
220
|
+
"screenshotsTable": true
|
|
221
|
+
},
|
|
222
|
+
"prReviewers": ["copilot"]
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Config Options
|
|
227
|
+
|
|
228
|
+
| Option | Description | Default |
|
|
229
|
+
|--------|-------------|---------|
|
|
230
|
+
| `ticketBaseUrl` | Base URL for linking tickets in PRs | — |
|
|
231
|
+
| `scopes` | List of scopes with `value`, `description`, and optional `paths` for auto-inference | `[]` (free text input) |
|
|
232
|
+
| `scopes[].paths` | Glob patterns to auto-suggest this scope when matching files are staged | — |
|
|
233
|
+
| `branchTypes` | Allowed branch type prefixes | `["feat", "fix", "chore", ...]` |
|
|
234
|
+
| `commitTypes` | Commit types shown in selection menu (`value` + `label`) | Standard conventional types |
|
|
235
|
+
| `commitFormat` | Commit message format with `{type}`, `{ticket}`, `{breaking}`, `{scope}`, `{message}` placeholders | `{type}[{ticket}]{breaking}({scope}): {message}` |
|
|
236
|
+
| `checklist` | PR checklist items | Basic code review items |
|
|
237
|
+
| `prTemplate.sections` | PR body sections to include | All sections |
|
|
238
|
+
| `prTemplate.screenshotsTable` | Include before/after screenshots table | `true` |
|
|
239
|
+
| `prReviewers` | Default PR reviewers (GitHub usernames) | — |
|
|
240
|
+
|
|
241
|
+
### Scopes
|
|
242
|
+
|
|
243
|
+
When `scopes` is an empty array, the commit command shows a free text input for scope. When populated, it shows a searchable list that can be filtered by typing.
|
|
244
|
+
|
|
245
|
+
**Scope inference** works in two ways (first match wins):
|
|
246
|
+
|
|
247
|
+
1. **From file paths** — if a scope has `paths` configured, staged files are matched against those glob patterns. The scope with the most matching files is suggested.
|
|
248
|
+
2. **From git history** — previous commits on the branch (`git log main..HEAD`) are parsed for existing scopes.
|
|
249
|
+
|
|
250
|
+
Example with paths:
|
|
251
|
+
```json
|
|
252
|
+
{
|
|
253
|
+
"scopes": [
|
|
254
|
+
{ "value": "auth", "description": "Authentication", "paths": ["src/auth/**", "src/hooks/useAuth*"] },
|
|
255
|
+
{ "value": "ui", "description": "UI components", "paths": ["src/components/**"] }
|
|
256
|
+
]
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
If you stage `src/auth/login.ts`, the `auth` scope is auto-suggested.
|
|
261
|
+
|
|
262
|
+
## Commitlint Integration
|
|
263
|
+
|
|
264
|
+
If you use [commitlint](https://commitlint.js.org/) to enforce commit conventions, add this parser preset to handle the `type[ticket](scope): message` format:
|
|
265
|
+
|
|
266
|
+
```javascript
|
|
267
|
+
// commitlint.config.js
|
|
268
|
+
module.exports = {
|
|
269
|
+
extends: ['@commitlint/config-conventional'],
|
|
270
|
+
parserPreset: {
|
|
271
|
+
parserOpts: {
|
|
272
|
+
headerPattern: /^(\w+)\[.*?\]!?\((.+)\): (.+)$/,
|
|
273
|
+
headerCorrespondence: ['type', 'scope', 'subject'],
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
rules: {
|
|
277
|
+
'subject-case': [0],
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Git Hooks
|
|
283
|
+
|
|
284
|
+
Pair with [husky](https://typicode.github.io/husky/) for a guided commit experience:
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
# .husky/commit-msg
|
|
288
|
+
npx --no -- commitlint --edit $1 || {
|
|
289
|
+
echo ""
|
|
290
|
+
echo " Commit message does not follow the required format."
|
|
291
|
+
echo " Use: npm run commit"
|
|
292
|
+
echo ""
|
|
293
|
+
exit 1
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## Requirements
|
|
298
|
+
|
|
299
|
+
- Node.js >= 18
|
|
300
|
+
- Git
|
|
301
|
+
- [GitHub CLI (gh)](https://cli.github.com/) — required for the `pr` command
|
|
302
|
+
|
|
303
|
+
## License
|
|
304
|
+
|
|
305
|
+
MIT
|
package/dist/colors.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const bold: (text: string) => string;
|
|
2
|
+
export declare const dim: (text: string) => string;
|
|
3
|
+
export declare const green: (text: string) => string;
|
|
4
|
+
export declare const yellow: (text: string) => string;
|
|
5
|
+
export declare const red: (text: string) => string;
|
|
6
|
+
export declare const cyan: (text: string) => string;
|
|
7
|
+
export declare const gray: (text: string) => string;
|
|
8
|
+
export declare const magenta: (text: string) => string;
|
|
9
|
+
//# sourceMappingURL=colors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,IAAI,SAJD,MAAM,WAIS,CAAC;AAChC,eAAO,MAAM,GAAG,SALA,MAAM,WAKQ,CAAC;AAC/B,eAAO,MAAM,KAAK,SANF,MAAM,WAMW,CAAC;AAClC,eAAO,MAAM,MAAM,SAPH,MAAM,WAOY,CAAC;AACnC,eAAO,MAAM,GAAG,SARA,MAAM,WAQS,CAAC;AAChC,eAAO,MAAM,IAAI,SATD,MAAM,WASU,CAAC;AACjC,eAAO,MAAM,IAAI,SAVD,MAAM,WAUU,CAAC;AACjC,eAAO,MAAM,OAAO,SAXJ,MAAM,WAWa,CAAC"}
|
package/dist/colors.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const enabled = process.stdout.isTTY !== false;
|
|
2
|
+
function wrap(code, resetCode) {
|
|
3
|
+
return (text) => enabled ? `\x1b[${code}m${text}\x1b[${resetCode}m` : text;
|
|
4
|
+
}
|
|
5
|
+
export const bold = wrap(1, 22);
|
|
6
|
+
export const dim = wrap(2, 22);
|
|
7
|
+
export const green = wrap(32, 39);
|
|
8
|
+
export const yellow = wrap(33, 39);
|
|
9
|
+
export const red = wrap(31, 39);
|
|
10
|
+
export const cyan = wrap(36, 39);
|
|
11
|
+
export const gray = wrap(90, 39);
|
|
12
|
+
export const magenta = wrap(35, 39);
|
|
13
|
+
//# sourceMappingURL=colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;AAE/C,SAAS,IAAI,CAAC,IAAY,EAAE,SAAiB;IAC3C,OAAO,CAAC,IAAY,EAAE,EAAE,CACtB,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChC,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAChC,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amend.d.ts","sourceRoot":"","sources":["../../src/commands/amend.ts"],"names":[],"mappings":"AA4CA,wBAAsB,YAAY,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2HpF"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { confirm, input, select, search } from "@inquirer/prompts";
|
|
2
|
+
import { execSync } from "child_process";
|
|
3
|
+
import { loadConfig } from "../config.js";
|
|
4
|
+
import { inferTicket } from "../git.js";
|
|
5
|
+
import { bold, dim, green, yellow, cyan } from "../colors.js";
|
|
6
|
+
function getLastCommitMessage() {
|
|
7
|
+
return execSync("git log -1 --format=%s", { encoding: "utf-8" }).trim();
|
|
8
|
+
}
|
|
9
|
+
function parseCommitMessage(msg, format) {
|
|
10
|
+
// Try to parse the default format: type[ticket]!(scope): message
|
|
11
|
+
const match = msg.match(/^(\w+)\[([^\]]*)\](!?)\(([^)]*)\): (.+)$/);
|
|
12
|
+
if (match) {
|
|
13
|
+
return {
|
|
14
|
+
type: match[1],
|
|
15
|
+
ticket: match[2],
|
|
16
|
+
breaking: match[3] === "!",
|
|
17
|
+
scope: match[4],
|
|
18
|
+
message: match[5],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// Try standard conventional commit: type(scope): message
|
|
22
|
+
const conventional = msg.match(/^(\w+)(!?)\(([^)]*)\): (.+)$/);
|
|
23
|
+
if (conventional) {
|
|
24
|
+
return {
|
|
25
|
+
type: conventional[1],
|
|
26
|
+
breaking: conventional[2] === "!",
|
|
27
|
+
scope: conventional[3],
|
|
28
|
+
message: conventional[4],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Fallback: treat whole thing as message
|
|
32
|
+
return { message: msg, breaking: false };
|
|
33
|
+
}
|
|
34
|
+
export async function amendCommand(options = {}) {
|
|
35
|
+
try {
|
|
36
|
+
const config = loadConfig();
|
|
37
|
+
const lastMessage = getLastCommitMessage();
|
|
38
|
+
const parsed = parseCommitMessage(lastMessage, config.commitFormat);
|
|
39
|
+
console.log(`\n${dim("Last commit:")} ${lastMessage}\n`);
|
|
40
|
+
const editMessage = await confirm({
|
|
41
|
+
message: "Edit commit message?",
|
|
42
|
+
default: true,
|
|
43
|
+
});
|
|
44
|
+
let newMessage = lastMessage;
|
|
45
|
+
if (editMessage) {
|
|
46
|
+
const type = await select({
|
|
47
|
+
message: "Select commit type:",
|
|
48
|
+
choices: config.commitTypes.map((t) => ({ value: t.value, name: t.label })),
|
|
49
|
+
default: parsed.type,
|
|
50
|
+
});
|
|
51
|
+
let finalScope;
|
|
52
|
+
if (config.scopes.length > 0) {
|
|
53
|
+
finalScope = await search({
|
|
54
|
+
message: parsed.scope
|
|
55
|
+
? `Select scope (current: ${cyan(parsed.scope)}):`
|
|
56
|
+
: "Select scope (type to filter):",
|
|
57
|
+
source: (term) => {
|
|
58
|
+
const filtered = config.scopes.filter((s) => !term ||
|
|
59
|
+
s.value.includes(term.toLowerCase()) ||
|
|
60
|
+
s.description.toLowerCase().includes(term.toLowerCase()));
|
|
61
|
+
if (parsed.scope) {
|
|
62
|
+
filtered.sort((a, b) => a.value === parsed.scope ? -1 : b.value === parsed.scope ? 1 : 0);
|
|
63
|
+
}
|
|
64
|
+
return filtered.map((s) => ({
|
|
65
|
+
value: s.value,
|
|
66
|
+
name: `${s.value} — ${s.description}`,
|
|
67
|
+
}));
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
finalScope = await input({
|
|
73
|
+
message: "Enter scope (optional):",
|
|
74
|
+
default: parsed.scope,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const message = await input({
|
|
78
|
+
message: "Enter commit message:",
|
|
79
|
+
default: parsed.message,
|
|
80
|
+
validate: (val) => val.trim().length > 0 || "Commit message is required",
|
|
81
|
+
});
|
|
82
|
+
const isBreaking = await confirm({
|
|
83
|
+
message: "Is this a breaking change?",
|
|
84
|
+
default: parsed.breaking,
|
|
85
|
+
});
|
|
86
|
+
const ticket = parsed.ticket || inferTicket();
|
|
87
|
+
const breaking = isBreaking ? "!" : "";
|
|
88
|
+
const scope = finalScope || "";
|
|
89
|
+
// Build using format
|
|
90
|
+
let result = config.commitFormat;
|
|
91
|
+
result = result.replace("{type}", type);
|
|
92
|
+
result = result.replace("{ticket}", ticket);
|
|
93
|
+
result = result.replace("{breaking}", breaking);
|
|
94
|
+
result = result.replace("{scope}", scope);
|
|
95
|
+
result = result.replace("{message}", message.trim());
|
|
96
|
+
result = result.replace(/\[\]/g, "");
|
|
97
|
+
result = result.replace(/\(\)/g, "");
|
|
98
|
+
newMessage = result;
|
|
99
|
+
}
|
|
100
|
+
// Check for additional staged changes
|
|
101
|
+
const staged = execSync("git diff --cached --name-only", { encoding: "utf-8" }).trim();
|
|
102
|
+
if (staged) {
|
|
103
|
+
console.log(dim("\nStaged changes will be included:"));
|
|
104
|
+
staged.split("\n").forEach((f) => console.log(dim(` ${f}`)));
|
|
105
|
+
}
|
|
106
|
+
console.log(`\n${dim("───")} ${bold("Amend Preview")} ${dim("───")}`);
|
|
107
|
+
console.log(`${dim("Before:")} ${yellow(lastMessage)}`);
|
|
108
|
+
console.log(`${dim("After:")} ${green(newMessage)}`);
|
|
109
|
+
if (staged) {
|
|
110
|
+
console.log(`${dim("Files:")} +${staged.split("\n").length} staged`);
|
|
111
|
+
}
|
|
112
|
+
console.log(`${dim("───────────────────")}\n`);
|
|
113
|
+
if (options.dryRun) {
|
|
114
|
+
console.log(dim("[dry-run] No amend performed."));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const confirmed = await confirm({
|
|
118
|
+
message: "Amend this commit?",
|
|
119
|
+
default: true,
|
|
120
|
+
});
|
|
121
|
+
if (!confirmed) {
|
|
122
|
+
console.log("Aborted.");
|
|
123
|
+
process.exit(0);
|
|
124
|
+
}
|
|
125
|
+
execSync(`git commit --amend -m ${JSON.stringify(newMessage)}`, {
|
|
126
|
+
stdio: "inherit",
|
|
127
|
+
});
|
|
128
|
+
console.log(green("✓ Commit amended successfully."));
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (error.name === "ExitPromptError") {
|
|
132
|
+
console.log("\nCancelled.");
|
|
133
|
+
process.exit(0);
|
|
134
|
+
}
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=amend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amend.js","sourceRoot":"","sources":["../../src/commands/amend.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAKA,wBAAsB,aAAa,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDrF"}
|
package/dist/commands/branch.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { select, input, confirm } from "@inquirer/prompts";
|
|
2
2
|
import { execSync } from "child_process";
|
|
3
3
|
import { loadConfig } from "../config.js";
|
|
4
|
-
|
|
4
|
+
import { bold, dim, green, cyan } from "../colors.js";
|
|
5
|
+
export async function branchCommand(options = {}) {
|
|
5
6
|
try {
|
|
6
7
|
const config = loadConfig();
|
|
7
8
|
const type = await select({
|
|
@@ -22,9 +23,13 @@ export async function branchCommand() {
|
|
|
22
23
|
.replace(/[^a-z0-9]+/g, "-")
|
|
23
24
|
.replace(/^-|-$/g, "");
|
|
24
25
|
const branchName = `${type}/${ticketPart}_${kebab}`;
|
|
25
|
-
console.log(`\n
|
|
26
|
-
console.log(branchName);
|
|
27
|
-
console.log(
|
|
26
|
+
console.log(`\n${dim("───")} ${bold("Branch Preview")} ${dim("───")}`);
|
|
27
|
+
console.log(cyan(branchName));
|
|
28
|
+
console.log(`${dim("───────────────────")}\n`);
|
|
29
|
+
if (options.dryRun) {
|
|
30
|
+
console.log(dim("[dry-run] No branch created."));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
28
33
|
const confirmed = await confirm({
|
|
29
34
|
message: "Create this branch?",
|
|
30
35
|
default: true,
|
|
@@ -34,7 +39,7 @@ export async function branchCommand() {
|
|
|
34
39
|
process.exit(0);
|
|
35
40
|
}
|
|
36
41
|
execSync(`git checkout -b ${branchName}`, { stdio: "inherit" });
|
|
37
|
-
console.log(
|
|
42
|
+
console.log(green(`✓ Branch created: ${branchName}`));
|
|
38
43
|
}
|
|
39
44
|
catch (error) {
|
|
40
45
|
if (error.name === "ExitPromptError") {
|
|
@@ -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;
|
|
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;AAEtD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAgC,EAAE;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAE5B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC;YACxB,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;SAChE,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;YACzB,OAAO,EAAE,4CAA4C;SACtD,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC;YAC9B,OAAO,EAAE,oBAAoB;YAC7B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,yBAAyB;SACtE,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC;QAChD,MAAM,KAAK,GAAG,WAAW;aACtB,IAAI,EAAE;aACN,WAAW,EAAE;aACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;aAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzB,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QAEpD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,qBAAqB;YAC9B,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,QAAQ,CAAC,mBAAmB,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC,CAAC;IACxD,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,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changelog.d.ts","sourceRoot":"","sources":["../../src/commands/changelog.ts"],"names":[],"mappings":"AAuIA,wBAAsB,gBAAgB,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsExF"}
|