@navbook/cli 0.1.2 → 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/dist/commands/complete.js +124 -0
- package/dist/commands/complete.js.map +1 -0
- package/dist/{cli/commands → commands}/compose.js +5 -3
- package/dist/commands/compose.js.map +1 -0
- package/dist/commands/doctor.js +56 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/entity.js +235 -0
- package/dist/commands/entity.js.map +1 -0
- package/dist/commands/feature.js +202 -0
- package/dist/commands/feature.js.map +1 -0
- package/dist/commands/init.js +23 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/{cli/commands → commands}/install.js +1 -2
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/issue.js +89 -0
- package/dist/commands/issue.js.map +1 -0
- package/dist/commands/policy.js +49 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/pr.js +262 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/context.js +21 -0
- package/dist/context.js.map +1 -0
- package/dist/{cli/editor.js → editor.js} +1 -1
- package/dist/editor.js.map +1 -0
- package/dist/errors.js.map +1 -0
- package/dist/install/completions.js.map +1 -0
- package/dist/{cli/install → install}/hook.js +1 -1
- package/dist/install/hook.js.map +1 -0
- package/dist/{cli/main.js → main.js} +10 -0
- package/dist/main.js.map +1 -0
- package/dist/{cli/program.js → program.js} +161 -23
- package/dist/program.js.map +1 -0
- package/dist/{cli/prompt.js → prompt.js} +11 -0
- package/dist/prompt.js.map +1 -0
- package/dist/render/colors.js.map +1 -0
- package/dist/render/detail.js +197 -0
- package/dist/render/detail.js.map +1 -0
- package/dist/render/table.js.map +1 -0
- package/dist/sort.js +77 -0
- package/dist/sort.js.map +1 -0
- package/package.json +15 -21
- package/README.md +0 -165
- package/dist/cli/commands/complete.d.ts +0 -9
- package/dist/cli/commands/complete.js +0 -72
- package/dist/cli/commands/complete.js.map +0 -1
- package/dist/cli/commands/compose.d.ts +0 -27
- package/dist/cli/commands/compose.js.map +0 -1
- package/dist/cli/commands/doctor.d.ts +0 -14
- package/dist/cli/commands/doctor.js +0 -127
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/entity.d.ts +0 -55
- package/dist/cli/commands/entity.js +0 -209
- package/dist/cli/commands/entity.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -11
- package/dist/cli/commands/init.js +0 -39
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/install.d.ts +0 -17
- package/dist/cli/commands/install.js.map +0 -1
- package/dist/cli/commands/issue.d.ts +0 -12
- package/dist/cli/commands/issue.js +0 -42
- package/dist/cli/commands/issue.js.map +0 -1
- package/dist/cli/commands/pr.d.ts +0 -64
- package/dist/cli/commands/pr.js +0 -466
- package/dist/cli/commands/pr.js.map +0 -1
- package/dist/cli/commit-flow.d.ts +0 -27
- package/dist/cli/commit-flow.js +0 -47
- package/dist/cli/commit-flow.js.map +0 -1
- package/dist/cli/context.d.ts +0 -39
- package/dist/cli/context.js +0 -93
- package/dist/cli/context.js.map +0 -1
- package/dist/cli/editor.d.ts +0 -23
- package/dist/cli/editor.js.map +0 -1
- package/dist/cli/errors.d.ts +0 -17
- package/dist/cli/errors.js.map +0 -1
- package/dist/cli/history-checks.d.ts +0 -21
- package/dist/cli/history-checks.js +0 -134
- package/dist/cli/history-checks.js.map +0 -1
- package/dist/cli/install/completions.d.ts +0 -19
- package/dist/cli/install/completions.js.map +0 -1
- package/dist/cli/install/hook.d.ts +0 -20
- package/dist/cli/install/hook.js.map +0 -1
- package/dist/cli/main.d.ts +0 -14
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/program.d.ts +0 -23
- package/dist/cli/program.js.map +0 -1
- package/dist/cli/prompt.d.ts +0 -22
- package/dist/cli/prompt.js.map +0 -1
- package/dist/cli/render/colors.d.ts +0 -13
- package/dist/cli/render/colors.js.map +0 -1
- package/dist/cli/render/detail.d.ts +0 -10
- package/dist/cli/render/detail.js +0 -105
- package/dist/cli/render/detail.js.map +0 -1
- package/dist/cli/render/table.d.ts +0 -19
- package/dist/cli/render/table.js.map +0 -1
- package/dist/cli/resolve.d.ts +0 -17
- package/dist/cli/resolve.js +0 -68
- package/dist/cli/resolve.js.map +0 -1
- package/dist/cli/workspace.d.ts +0 -52
- package/dist/cli/workspace.js +0 -178
- package/dist/cli/workspace.js.map +0 -1
- package/dist/core/comments.d.ts +0 -31
- package/dist/core/comments.js +0 -80
- package/dist/core/comments.js.map +0 -1
- package/dist/core/files.d.ts +0 -88
- package/dist/core/files.js +0 -441
- package/dist/core/files.js.map +0 -1
- package/dist/core/frontmatter.d.ts +0 -63
- package/dist/core/frontmatter.js +0 -149
- package/dist/core/frontmatter.js.map +0 -1
- package/dist/core/id.d.ts +0 -46
- package/dist/core/id.js +0 -66
- package/dist/core/id.js.map +0 -1
- package/dist/core/index.d.ts +0 -19
- package/dist/core/index.js +0 -20
- package/dist/core/index.js.map +0 -1
- package/dist/core/json.d.ts +0 -18
- package/dist/core/json.js +0 -51
- package/dist/core/json.js.map +0 -1
- package/dist/core/ops.d.ts +0 -92
- package/dist/core/ops.js +0 -173
- package/dist/core/ops.js.map +0 -1
- package/dist/core/person.d.ts +0 -20
- package/dist/core/person.js +0 -50
- package/dist/core/person.js.map +0 -1
- package/dist/core/query.d.ts +0 -30
- package/dist/core/query.js +0 -106
- package/dist/core/query.js.map +0 -1
- package/dist/core/refs.d.ts +0 -12
- package/dist/core/refs.js +0 -36
- package/dist/core/refs.js.map +0 -1
- package/dist/core/slug.d.ts +0 -22
- package/dist/core/slug.js +0 -40
- package/dist/core/slug.js.map +0 -1
- package/dist/core/time.d.ts +0 -14
- package/dist/core/time.js +0 -37
- package/dist/core/time.js.map +0 -1
- package/dist/core/tree.d.ts +0 -94
- package/dist/core/tree.js +0 -237
- package/dist/core/tree.js.map +0 -1
- package/dist/core/validate.d.ts +0 -55
- package/dist/core/validate.js +0 -312
- package/dist/core/validate.js.map +0 -1
- package/dist/git/config.d.ts +0 -12
- package/dist/git/config.js +0 -27
- package/dist/git/config.js.map +0 -1
- package/dist/git/exec.d.ts +0 -35
- package/dist/git/exec.js +0 -58
- package/dist/git/exec.js.map +0 -1
- package/dist/git/history.d.ts +0 -35
- package/dist/git/history.js +0 -82
- package/dist/git/history.js.map +0 -1
- package/dist/git/index-ops.d.ts +0 -20
- package/dist/git/index-ops.js +0 -45
- package/dist/git/index-ops.js.map +0 -1
- package/dist/git/merge.d.ts +0 -27
- package/dist/git/merge.js +0 -57
- package/dist/git/merge.js.map +0 -1
- package/dist/git/refscan.d.ts +0 -32
- package/dist/git/refscan.js +0 -82
- package/dist/git/refscan.js.map +0 -1
- package/dist/git/repo.d.ts +0 -45
- package/dist/git/repo.js +0 -95
- package/dist/git/repo.js.map +0 -1
- /package/dist/{cli/errors.js → errors.js} +0 -0
- /package/dist/{cli/install → install}/completions.js +0 -0
- /package/dist/{cli/render → render}/colors.js +0 -0
- /package/dist/{cli/render → render}/table.js +0 -0
|
@@ -7,20 +7,22 @@ import { fileURLToPath } from "node:url";
|
|
|
7
7
|
import { Command, Option } from "commander";
|
|
8
8
|
import { cmdComplete } from "./commands/complete.js";
|
|
9
9
|
import { cmdDoctor } from "./commands/doctor.js";
|
|
10
|
-
import { cmdClose, cmdComment, cmdEdit, cmdList, cmdReopen, cmdShow, } from "./commands/entity.js";
|
|
10
|
+
import { cmdClose, cmdComment, cmdDelete, cmdEdit, cmdList, cmdReopen, cmdShow, } from "./commands/entity.js";
|
|
11
|
+
import { cmdFeatureEdit, cmdFeatureList, cmdFeatureOpen, cmdFeatureShow, cmdSpecAdd, cmdSpecEdit, cmdSpecList, } from "./commands/feature.js";
|
|
11
12
|
import { cmdId, cmdInit } from "./commands/init.js";
|
|
12
13
|
import { cmdInstall, cmdUninstall } from "./commands/install.js";
|
|
13
|
-
import { cmdIssueOpen } from "./commands/issue.js";
|
|
14
|
-
import { cmdPrClose, cmdPrList, cmdPrMerge, cmdPrOpen, cmdPrReview, cmdPrUpdate, } from "./commands/pr.js";
|
|
14
|
+
import { cmdIssueLink, cmdIssueOpen, cmdIssueUnlink } from "./commands/issue.js";
|
|
15
|
+
import { cmdPrClose, cmdPrList, cmdPrMerge, cmdPrOpen, cmdPrRequest, cmdPrReview, cmdPrUpdate, } from "./commands/pr.js";
|
|
16
|
+
import { DEFAULT_SORT, SORT_ORDERS } from "./sort.js";
|
|
15
17
|
/**
|
|
16
18
|
* Read straight from package.json rather than duplicating the version as a
|
|
17
19
|
* literal: a hardcoded copy silently drifts the moment a release is cut
|
|
18
20
|
* without updating both places (which is exactly what shipped as 0.1.1).
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
+
* `../package.json` is the package root from both `src/` in dev and `dist/`
|
|
22
|
+
* after the build — the same relative depth either way.
|
|
21
23
|
*/
|
|
22
24
|
function readOwnVersion() {
|
|
23
|
-
const path = fileURLToPath(new URL("
|
|
25
|
+
const path = fileURLToPath(new URL("../package.json", import.meta.url));
|
|
24
26
|
const pkg = JSON.parse(readFileSync(path, "utf8"));
|
|
25
27
|
return pkg.version;
|
|
26
28
|
}
|
|
@@ -31,16 +33,38 @@ const QUERY_HELP = `Query terms AND together. Terms:
|
|
|
31
33
|
assignee:EMAIL assignee address, or a fragment of its domain
|
|
32
34
|
author:EMAIL author address, same matching
|
|
33
35
|
milestone:M exact milestone
|
|
36
|
+
feature:SLUG SLUG is among the entity's features (repeatable, ANDs)
|
|
37
|
+
reviewer:EMAIL asked to review it; PRs only, same matching
|
|
38
|
+
review:DECISION pending, approved or changes-requested; PRs only
|
|
39
|
+
awaiting:EMAIL asked to review it and has not yet; PRs only
|
|
34
40
|
WORD or "some phrase" case-insensitive substring of the title,
|
|
35
41
|
description, or any comment body
|
|
36
|
-
Same-key terms OR for single-valued fields (status, author, milestone)
|
|
37
|
-
for multi-valued ones (label, assignee
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
Same-key terms OR for single-valued fields (status, author, milestone, review)
|
|
43
|
+
and AND for multi-valued ones (label, assignee, feature, reviewer, awaiting).
|
|
44
|
+
The default query is status:open.`;
|
|
45
|
+
/**
|
|
46
|
+
* Help for `--commit`, naming the subject the verb commits under (spec 03 §3.2).
|
|
47
|
+
*
|
|
48
|
+
* The argument is the commit's scope rather than an entity kind: `feature` is
|
|
49
|
+
* one of the scopes and is deliberately not one of the kinds.
|
|
50
|
+
*/
|
|
51
|
+
function commitHelp(scope) {
|
|
52
|
+
return `wrap the change in a 'docs${scope ? `(${scope})` : ""}:' commit`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Drop the implicit `help [command]` verb Commander gives every command that
|
|
56
|
+
* has subcommands: it prints exactly what `--help` prints, so `nav issue help
|
|
57
|
+
* open` and `nav issue open --help` are two spellings of one thing. `--help`
|
|
58
|
+
* is the one that stays.
|
|
59
|
+
*
|
|
60
|
+
* Applied at each level that has subcommands — the setting is per-command and
|
|
61
|
+
* deliberately not inherited, so the nouns do not pick it up from the root.
|
|
62
|
+
*/
|
|
63
|
+
function withoutHelpVerb(command) {
|
|
64
|
+
return command.helpCommand(false);
|
|
41
65
|
}
|
|
42
66
|
export function buildProgram(getCtx) {
|
|
43
|
-
const program = new Command();
|
|
67
|
+
const program = withoutHelpVerb(new Command());
|
|
44
68
|
program
|
|
45
69
|
.name("nav")
|
|
46
70
|
.description("Git-native issue and pull-request tracking, stored as files in your repository")
|
|
@@ -49,7 +73,7 @@ export function buildProgram(getCtx) {
|
|
|
49
73
|
.enablePositionalOptions();
|
|
50
74
|
program
|
|
51
75
|
.command("init")
|
|
52
|
-
.description("create the
|
|
76
|
+
.description("create the Navbook skeleton at the repository root")
|
|
53
77
|
.option("--commit", commitHelp())
|
|
54
78
|
.action((opts) => cmdInit(getCtx(), opts));
|
|
55
79
|
program
|
|
@@ -89,10 +113,11 @@ export function buildProgram(getCtx) {
|
|
|
89
113
|
.action((words) => cmdComplete(getCtx(), words));
|
|
90
114
|
program.addCommand(buildIssueCommand(getCtx));
|
|
91
115
|
program.addCommand(buildPrCommand(getCtx));
|
|
116
|
+
program.addCommand(buildFeatureCommand(getCtx));
|
|
92
117
|
return program;
|
|
93
118
|
}
|
|
94
119
|
function buildPrCommand(getCtx) {
|
|
95
|
-
const pr = new Command("pr").description("work with pull requests");
|
|
120
|
+
const pr = withoutHelpVerb(new Command("pr")).description("work with pull requests");
|
|
96
121
|
pr.command("open")
|
|
97
122
|
.description("open a pull request from the current branch")
|
|
98
123
|
.option("--target <branch>", "branch to merge into (default: the repository's default branch)")
|
|
@@ -101,7 +126,9 @@ function buildPrCommand(getCtx) {
|
|
|
101
126
|
.option("--draft", "not yet requesting review")
|
|
102
127
|
.option("--label <label>", "add a label (repeatable)", collect, [])
|
|
103
128
|
.option("--assignee <email>", "assign to a person (repeatable)", collect, [])
|
|
129
|
+
.option("--reviewer <email>", "ask a person to review it (repeatable)", collect, [])
|
|
104
130
|
.option("--milestone <name>", "milestone")
|
|
131
|
+
.option("--feature <slug>", "attach it to a feature (repeatable)", collect, [])
|
|
105
132
|
.option("--commit", commitHelp("pr"))
|
|
106
133
|
.action((opts) => cmdPrOpen(getCtx(), opts));
|
|
107
134
|
pr.command("update")
|
|
@@ -109,11 +136,19 @@ function buildPrCommand(getCtx) {
|
|
|
109
136
|
.description("append a revision pinning the current HEAD")
|
|
110
137
|
.option("--commit", commitHelp("pr"))
|
|
111
138
|
.action((id, opts) => cmdPrUpdate(getCtx(), id, opts));
|
|
139
|
+
pr.command("request")
|
|
140
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
141
|
+
.argument("<email...>", "who to ask")
|
|
142
|
+
.description("ask people to review a pull request")
|
|
143
|
+
.option("--remove", "take them off the reviewers instead")
|
|
144
|
+
.option("--commit", commitHelp("pr"))
|
|
145
|
+
.action((id, people, opts) => cmdPrRequest(getCtx(), id, people, opts));
|
|
112
146
|
pr.command("review")
|
|
113
147
|
.argument("<id>", "ID or unambiguous prefix")
|
|
114
148
|
.description("review a pull request, bound to a specific revision")
|
|
115
149
|
.option("--approve", "record an approving verdict")
|
|
116
150
|
.option("--request-changes", "record a request-changes verdict")
|
|
151
|
+
.option("--comment", "record a verdict that judges nothing (the default)")
|
|
117
152
|
.option("-m, --message <text>", "review text; without it $EDITOR is opened")
|
|
118
153
|
.option("--revision <sha>", "bind to this revision instead of the latest")
|
|
119
154
|
.option("--file <path>", "anchor the comment to a file")
|
|
@@ -125,10 +160,13 @@ function buildPrCommand(getCtx) {
|
|
|
125
160
|
.description("merge a pull request into the checked-out target branch")
|
|
126
161
|
.option("--no-ff", "always create a merge commit")
|
|
127
162
|
.option("--continue", "finish a merge that stopped for conflict resolution")
|
|
163
|
+
.option("-y, --yes", "merge without asking when the review policy is not met")
|
|
128
164
|
// Commander models `--no-ff` as the negation of an implicit `--ff`.
|
|
129
165
|
.action((id, opts) => cmdPrMerge(getCtx(), id, { ...opts, noFf: opts.ff === false }));
|
|
130
166
|
addSharedVerbs(pr, "pr", getCtx, {
|
|
131
|
-
|
|
167
|
+
// No extra columns here: `cmdPrList` owns the PR listing's columns, because
|
|
168
|
+
// it appends a `refs` one when scanning across branches.
|
|
169
|
+
extraColumns: [],
|
|
132
170
|
runClose: (ctx, id, options) => cmdPrClose(ctx, id, options),
|
|
133
171
|
configureList: (command) => {
|
|
134
172
|
command.option("--all-refs", "scan all local and fetched remote branches, not just this one");
|
|
@@ -137,12 +175,73 @@ function buildPrCommand(getCtx) {
|
|
|
137
175
|
});
|
|
138
176
|
return pr;
|
|
139
177
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
178
|
+
/**
|
|
179
|
+
* `nav feature` — spec 04 §4.3.
|
|
180
|
+
*
|
|
181
|
+
* None of the shared verbs appear here. A feature does not open and close, and
|
|
182
|
+
* it is not discussed: the discussion belongs to the issues attached to it. So
|
|
183
|
+
* the family is small on purpose, and `spec` groups what acts on the documents
|
|
184
|
+
* rather than on the feature itself.
|
|
185
|
+
*/
|
|
186
|
+
function buildFeatureCommand(getCtx) {
|
|
187
|
+
const feature = withoutHelpVerb(new Command("feature")).description("work with features");
|
|
188
|
+
feature
|
|
189
|
+
.command("open")
|
|
190
|
+
.argument("<title>", "one-line name for the feature")
|
|
191
|
+
.description("create a feature")
|
|
192
|
+
.option("-m, --message <text>", "summary text; without it $EDITOR is opened")
|
|
193
|
+
.option("--slug <slug>", "directory name to file it under; derived from the title otherwise")
|
|
194
|
+
.option("--commit", commitHelp("feature"))
|
|
195
|
+
.action((title, opts) => cmdFeatureOpen(getCtx(), title, opts));
|
|
196
|
+
feature
|
|
197
|
+
.command("list")
|
|
198
|
+
.description("list features, with how much work is attached to each")
|
|
199
|
+
.option("--json", "one JSON object per feature, newline-delimited")
|
|
200
|
+
.action((opts) => cmdFeatureList(getCtx(), opts));
|
|
201
|
+
feature
|
|
202
|
+
.command("show")
|
|
203
|
+
.argument("<slug>", "the feature's directory name")
|
|
204
|
+
.description("render a feature, its documents, and what has touched it")
|
|
205
|
+
.option("--json", "emit a single JSON object naming its issues and pull requests")
|
|
206
|
+
.option("--commits <n>", "recent commits to list (default 10)", (value) => value.trim() === "" ? Number.NaN : Number(value))
|
|
207
|
+
.action((slug, opts) => cmdFeatureShow(getCtx(), slug, opts));
|
|
208
|
+
feature
|
|
209
|
+
.command("edit")
|
|
210
|
+
.argument("<slug>", "the feature's directory name")
|
|
211
|
+
.description("open the feature's feature.md in $EDITOR")
|
|
212
|
+
.option("--commit", commitHelp("feature"))
|
|
213
|
+
.action((slug, opts) => cmdFeatureEdit(getCtx(), slug, opts));
|
|
214
|
+
feature.addCommand(buildSpecCommand(getCtx));
|
|
215
|
+
return feature;
|
|
216
|
+
}
|
|
217
|
+
function buildSpecCommand(getCtx) {
|
|
218
|
+
const spec = withoutHelpVerb(new Command("spec")).description("work with a feature's specification documents");
|
|
219
|
+
spec
|
|
220
|
+
.command("add")
|
|
221
|
+
.argument("<slug>", "the feature's directory name")
|
|
222
|
+
.argument("<title>", "one-line name for the document")
|
|
223
|
+
.description("add a specification document to a feature")
|
|
224
|
+
.option("-m, --message <text>", "document text; without it $EDITOR is opened")
|
|
225
|
+
.option("--file <name>", "file to write it to; derived from the title otherwise")
|
|
226
|
+
.option("--commit", commitHelp("feature"))
|
|
227
|
+
.action((slug, title, opts) => cmdSpecAdd(getCtx(), slug, title, opts));
|
|
228
|
+
spec
|
|
229
|
+
.command("edit")
|
|
230
|
+
.argument("<slug>", "the feature's directory name")
|
|
231
|
+
.argument("<file>", "the document's file name")
|
|
232
|
+
.description("open a specification document in $EDITOR")
|
|
233
|
+
.option("--commit", commitHelp("feature"))
|
|
234
|
+
.action((slug, file, opts) => cmdSpecEdit(getCtx(), slug, file, opts));
|
|
235
|
+
spec
|
|
236
|
+
.command("list")
|
|
237
|
+
.argument("<slug>", "the feature's directory name")
|
|
238
|
+
.description("list a feature's specification documents")
|
|
239
|
+
.option("--json", "one JSON object per document, newline-delimited")
|
|
240
|
+
.action((slug, opts) => cmdSpecList(getCtx(), slug, opts));
|
|
241
|
+
return spec;
|
|
143
242
|
}
|
|
144
243
|
function buildIssueCommand(getCtx) {
|
|
145
|
-
const issue = new Command("issue").description("work with issues");
|
|
244
|
+
const issue = withoutHelpVerb(new Command("issue")).description("work with issues");
|
|
146
245
|
issue
|
|
147
246
|
.command("open")
|
|
148
247
|
.argument("<title>", "one-line summary")
|
|
@@ -151,9 +250,39 @@ function buildIssueCommand(getCtx) {
|
|
|
151
250
|
.option("--label <label>", "add a label (repeatable)", collect, [])
|
|
152
251
|
.option("--assignee <email>", "assign to a person (repeatable)", collect, [])
|
|
153
252
|
.option("--milestone <name>", "milestone")
|
|
253
|
+
.option("--feature <slug>", "attach it to a feature (repeatable)", collect, [])
|
|
254
|
+
// Number rather than parseInt, and blank rather than 0, for the reason
|
|
255
|
+
// `--depth` does it: a value the command must refuse has to reach it
|
|
256
|
+
// intact rather than arrive silently rounded or defaulted.
|
|
257
|
+
.option("--rank <n>", "where it sits in the queue; lower first", (value) => value.trim() === "" ? Number.NaN : Number(value))
|
|
258
|
+
.option("--deadline <date>", "when the work is wanted, YYYY-MM-DD")
|
|
259
|
+
.option("--parent <id>", "file it as a subtask of an existing issue")
|
|
154
260
|
.option("--commit", commitHelp("issue"))
|
|
155
261
|
.action((title, opts) => cmdIssueOpen(getCtx(), title, opts));
|
|
156
|
-
|
|
262
|
+
issue
|
|
263
|
+
.command("link")
|
|
264
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
265
|
+
.description("file the issue as a subtask of another issue")
|
|
266
|
+
.requiredOption("--parent <id>", "the issue it belongs under")
|
|
267
|
+
.option("-f, --force", "move it without asking when it already has a parent")
|
|
268
|
+
.option("--commit", commitHelp("issue"))
|
|
269
|
+
.action((id, opts) => cmdIssueLink(getCtx(), id, opts));
|
|
270
|
+
issue
|
|
271
|
+
.command("unlink")
|
|
272
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
273
|
+
.description("detach the issue from its parent")
|
|
274
|
+
.option("--commit", commitHelp("issue"))
|
|
275
|
+
.action((id, opts) => cmdIssueUnlink(getCtx(), id, opts));
|
|
276
|
+
addSharedVerbs(issue, "issue", getCtx, {
|
|
277
|
+
extraColumns: [],
|
|
278
|
+
configureList: (command) => command.option("--sort <order>", `listing order: ${SORT_ORDERS.join(", ")} (default ${DEFAULT_SORT})`),
|
|
279
|
+
configureShow: (command) =>
|
|
280
|
+
// Number, not parseInt: '2.5' has to reach the command as 2.5 so it can
|
|
281
|
+
// be refused, rather than being silently rounded to something valid.
|
|
282
|
+
// No default here — `cmdShow` owns it, so every caller gets the same one.
|
|
283
|
+
command.option("--depth <n>", "levels of subtasks to render (default 1)", (value) => value.trim() === "" ? Number.NaN : Number(value)),
|
|
284
|
+
configureDelete: (command) => command.option("-r, --recursive", "delete its subtasks too, to any depth"),
|
|
285
|
+
});
|
|
157
286
|
return issue;
|
|
158
287
|
}
|
|
159
288
|
/** Register the verbs both nouns share, so their behavior can never drift. */
|
|
@@ -170,12 +299,13 @@ export function addSharedVerbs(parent, kind, getCtx, shared) {
|
|
|
170
299
|
list.action((terms, opts) => shared.runList
|
|
171
300
|
? shared.runList(getCtx(), terms, { ...opts, extraColumns })
|
|
172
301
|
: cmdList(getCtx(), kind, terms, { ...opts, extraColumns }));
|
|
173
|
-
parent
|
|
302
|
+
const show = parent
|
|
174
303
|
.command("show")
|
|
175
304
|
.argument("<id>", "ID or unambiguous prefix")
|
|
176
305
|
.description(`render one ${noun} and its comments`)
|
|
177
|
-
.option("--json", "emit a single JSON object including comments")
|
|
178
|
-
|
|
306
|
+
.option("--json", "emit a single JSON object including comments");
|
|
307
|
+
shared.configureShow?.(show);
|
|
308
|
+
show.action((id, opts) => cmdShow(getCtx(), kind, id, opts));
|
|
179
309
|
parent
|
|
180
310
|
.command("edit")
|
|
181
311
|
.argument("<id>", "ID or unambiguous prefix")
|
|
@@ -210,6 +340,14 @@ export function addSharedVerbs(parent, kind, getCtx, shared) {
|
|
|
210
340
|
.description(`move the ${noun} back to open/ and clear its resolution`)
|
|
211
341
|
.option("--commit", commitHelp(kind))
|
|
212
342
|
.action((id, opts) => cmdReopen(getCtx(), kind, id, opts));
|
|
343
|
+
const remove = parent
|
|
344
|
+
.command("delete")
|
|
345
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
346
|
+
.description(`remove the ${noun}'s directory, whatever its status`)
|
|
347
|
+
.option("-f, --force", "do not ask, even when the directory holds uncommitted changes")
|
|
348
|
+
.option("--commit", commitHelp(kind));
|
|
349
|
+
shared.configureDelete?.(remove);
|
|
350
|
+
remove.action((id, opts) => cmdDelete(getCtx(), kind, id, opts));
|
|
213
351
|
}
|
|
214
352
|
export function collect(value, previous) {
|
|
215
353
|
return [...previous, value];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,17 @@ export function confirmAndPerform(ctx, opts) {
|
|
|
23
23
|
action.perform();
|
|
24
24
|
return true;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Whether there is somebody at a terminal to answer a question.
|
|
28
|
+
*
|
|
29
|
+
* Both ends matter: the question is written to stdout and the answer is read
|
|
30
|
+
* from stdin, so a run with either one redirected has nobody to ask. A caller
|
|
31
|
+
* that would otherwise block a pipeline on a prompt uses this to decide to
|
|
32
|
+
* say its piece and carry on instead.
|
|
33
|
+
*/
|
|
34
|
+
export function isInteractive(ctx) {
|
|
35
|
+
return process.stdin.isTTY === true && ctx.stdout.isTTY === true;
|
|
36
|
+
}
|
|
26
37
|
/** Ask a yes/no question; anything but `y`/`yes` — including EOF — is a no. */
|
|
27
38
|
export function askYesNo(ctx, question) {
|
|
28
39
|
ctx.stdout.write(question);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAenC,8DAA8D;AAC9D,MAAM,UAAU,iBAAiB,CAAC,GAAQ,EAAE,IAAoB;IAC9D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IACpC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;QAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAEjF,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACpD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAQ;IACpC,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AACnE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,QAAQ,CAAC,GAAQ,EAAE,QAAgB;IACjD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK;QAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM;QACR,CAAC;QACD,IAAI,IAAI,KAAK,CAAC;YAAE,MAAM;QACtB,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/render/colors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAI5B,MAAM,UAAU,YAAY,CAAC,MAA2B,EAAE,GAAsB;IAC9E,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACpE,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,EAAE,IAAI,GAAG,CAAC,WAAW,KAAK,GAAG;QACpF,OAAO,IAAI,CAAC;IACd,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA2B,EAAE,GAAsB;IAC5E,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `show` rendering: an entity's metadata, description and comment thread.
|
|
3
|
+
*/
|
|
4
|
+
import { describeReviewPolicy, NO_REVIEW_POLICY, readAssignees, readLabels, readMerged, readRank, readRevisions, reviewSummary, threadOrder, toIsoSeconds, } from "@navbook/core";
|
|
5
|
+
/** Render one entity with its full comment thread. */
|
|
6
|
+
export function renderDetail(entity, opts) {
|
|
7
|
+
const c = opts.colors;
|
|
8
|
+
const lines = [];
|
|
9
|
+
lines.push(`${c.bold(`#${entity.id}`)} ${entity.title}`);
|
|
10
|
+
const labelWidth = 11;
|
|
11
|
+
for (const [label, value] of metadataRows(entity, opts, c)) {
|
|
12
|
+
// A continuation row (empty label) is indented to line up under the value.
|
|
13
|
+
const cell = label === "" ? " ".repeat(labelWidth) : c.dim(`${label}:`.padEnd(labelWidth));
|
|
14
|
+
lines.push(`${cell}${value}`);
|
|
15
|
+
}
|
|
16
|
+
const body = entity.body.trim();
|
|
17
|
+
if (body !== "") {
|
|
18
|
+
lines.push("");
|
|
19
|
+
lines.push(body);
|
|
20
|
+
}
|
|
21
|
+
lines.push("");
|
|
22
|
+
lines.push(c.dim(`comments (${entity.comments.length}):`));
|
|
23
|
+
if (entity.comments.length === 0) {
|
|
24
|
+
lines.push(c.dim(" none"));
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
for (const { comment, depth } of threadOrder(entity.comments)) {
|
|
28
|
+
lines.push("");
|
|
29
|
+
lines.push(...renderComment(comment, depth, c));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return lines.join("\n");
|
|
33
|
+
}
|
|
34
|
+
function metadataRows(entity, opts, c) {
|
|
35
|
+
const { navDir, links } = opts;
|
|
36
|
+
const rows = [];
|
|
37
|
+
rows.push(["status", entity.archived ? `${entity.status} (archived)` : entity.status]);
|
|
38
|
+
rows.push(["author", stringField(entity, "author")]);
|
|
39
|
+
rows.push(["created", stringField(entity, "created")]);
|
|
40
|
+
if (entity.kind === "pr") {
|
|
41
|
+
rows.push(["target", stringField(entity, "target")]);
|
|
42
|
+
const source = stringField(entity, "source");
|
|
43
|
+
if (source !== "")
|
|
44
|
+
rows.push(["source", source]);
|
|
45
|
+
if (entity.fm.draft === true)
|
|
46
|
+
rows.push(["draft", "yes"]);
|
|
47
|
+
const revisions = readRevisions(entity.fm);
|
|
48
|
+
revisions.forEach((revision, index) => {
|
|
49
|
+
rows.push([
|
|
50
|
+
index === 0 ? "revisions" : "",
|
|
51
|
+
`${index + 1}. head ${revision.head.slice(0, 12)} base ${revision.base.slice(0, 12)} ${revision.date}`,
|
|
52
|
+
]);
|
|
53
|
+
});
|
|
54
|
+
const merged = readMerged(entity.fm);
|
|
55
|
+
if (merged) {
|
|
56
|
+
rows.push(["merged", `${merged.date ?? "?"} by ${merged.by ?? "?"}`]);
|
|
57
|
+
if (typeof merged.commit === "string")
|
|
58
|
+
rows.push(["", `commit ${merged.commit.slice(0, 12)}`]);
|
|
59
|
+
}
|
|
60
|
+
rows.push(...reviewRows(entity, opts.reviewPolicy ?? NO_REVIEW_POLICY, c));
|
|
61
|
+
}
|
|
62
|
+
const labels = readLabels(entity.fm);
|
|
63
|
+
if (labels.length > 0)
|
|
64
|
+
rows.push(["labels", labels.join(", ")]);
|
|
65
|
+
const assignees = readAssignees(entity.fm);
|
|
66
|
+
if (assignees.length > 0)
|
|
67
|
+
rows.push(["assignee", assignees.join(", ")]);
|
|
68
|
+
// Not through `stringField` with the rest, because a rank is a number: what
|
|
69
|
+
// a reader wants to see for `rank: 0` is `0`, and not the blank an absent
|
|
70
|
+
// key leaves. Rendered whatever the noun is, as every row here is — the keys
|
|
71
|
+
// §2.5 keeps for an issue are a `doctor` fault on a pull request, and a
|
|
72
|
+
// reader looking at one needs to see what the file actually says.
|
|
73
|
+
const rank = readRank(entity.fm);
|
|
74
|
+
if (rank !== null)
|
|
75
|
+
rows.push(["rank", String(rank)]);
|
|
76
|
+
for (const key of ["milestone", "deadline", "resolution", "duplicate-of", "superseded-by"]) {
|
|
77
|
+
const value = stringField(entity, key);
|
|
78
|
+
if (value !== "")
|
|
79
|
+
rows.push([key, value]);
|
|
80
|
+
}
|
|
81
|
+
rows.push(...linkRows(links, c));
|
|
82
|
+
rows.push(["path", `${navDir}/${entity.dirPath}/`]);
|
|
83
|
+
return rows;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Who was asked to review, what each of them said, and what that adds up to.
|
|
87
|
+
*
|
|
88
|
+
* All of it is derived from the reviews against the latest revision (spec 02
|
|
89
|
+
* §2.7) and none of it is in the file, which is why the rows appear only when
|
|
90
|
+
* there is something to say: a pull request nobody was asked to review and
|
|
91
|
+
* nobody reviewed shows no reviewer rows at all.
|
|
92
|
+
*/
|
|
93
|
+
function reviewRows(entity, reading, c) {
|
|
94
|
+
const summary = reviewSummary(entity, reading.policy);
|
|
95
|
+
// The policy is worth stating even where nobody has reviewed: it is what
|
|
96
|
+
// this pull request will be read against, and a reader who has to guess
|
|
97
|
+
// whether one approval is enough has been told half of it.
|
|
98
|
+
const policy = reading.declared
|
|
99
|
+
? [["policy", c.dim(describeReviewPolicy(reading.policy))]]
|
|
100
|
+
: [];
|
|
101
|
+
// The count only earns its place where more than one approval is wanted;
|
|
102
|
+
// "1 of 1" beside every decision is a fact nobody was missing.
|
|
103
|
+
const { given, required } = summary.approvals;
|
|
104
|
+
const counted = required > 1 ? c.dim(` (${given} of ${required} approvals)`) : "";
|
|
105
|
+
// A count is itself something to say, so it shows the decision even where
|
|
106
|
+
// nobody was asked: under a policy wanting more than one approval, the
|
|
107
|
+
// policy is the ask, and hiding the shortfall until somebody is named would
|
|
108
|
+
// be reporting silence about the one thing standing in the way.
|
|
109
|
+
if (summary.reviewers.length === 0 && counted === "")
|
|
110
|
+
return policy;
|
|
111
|
+
const rows = [["review", `${paintDecision(summary.decision, c)}${counted}`]];
|
|
112
|
+
summary.reviewers.forEach((entry, index) => {
|
|
113
|
+
const state = paintState(entry.state, c);
|
|
114
|
+
const asked = entry.volunteer ? c.dim(" (not asked)") : "";
|
|
115
|
+
rows.push([index === 0 ? "reviewers" : "", `${entry.person} ${state}${asked}`]);
|
|
116
|
+
});
|
|
117
|
+
return [...rows, ...policy];
|
|
118
|
+
}
|
|
119
|
+
function paintDecision(decision, c) {
|
|
120
|
+
if (decision === "approved")
|
|
121
|
+
return c.green(decision);
|
|
122
|
+
return decision === "changes-requested" ? c.yellow(decision) : c.dim(decision);
|
|
123
|
+
}
|
|
124
|
+
function paintState(state, c) {
|
|
125
|
+
if (state === "approve")
|
|
126
|
+
return c.green(`[${state}]`);
|
|
127
|
+
if (state === "request-changes")
|
|
128
|
+
return c.yellow(`[${state}]`);
|
|
129
|
+
return c.dim(`[${state}]`);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The decomposition links, as the file records them.
|
|
133
|
+
*
|
|
134
|
+
* A parent named but absent, and a subtask listed but claiming another parent,
|
|
135
|
+
* are shown as written rather than quietly dropped: what the file says is the
|
|
136
|
+
* thing a reader needs to see, and `nav doctor` is what explains it.
|
|
137
|
+
*/
|
|
138
|
+
function linkRows(links, c) {
|
|
139
|
+
if (!links)
|
|
140
|
+
return [];
|
|
141
|
+
const rows = [];
|
|
142
|
+
if (links.parent)
|
|
143
|
+
rows.push(["parent", describeLink(links.parent, 0, c)]);
|
|
144
|
+
flatten(links.subtasks, 0).forEach(([node, depth], index) => {
|
|
145
|
+
rows.push([index === 0 ? "subtasks" : "", describeLink(node, depth, c)]);
|
|
146
|
+
});
|
|
147
|
+
return rows;
|
|
148
|
+
}
|
|
149
|
+
function flatten(nodes, depth) {
|
|
150
|
+
return nodes.flatMap((node) => [
|
|
151
|
+
[node, depth],
|
|
152
|
+
...flatten(node.children, depth + 1),
|
|
153
|
+
]);
|
|
154
|
+
}
|
|
155
|
+
function describeLink(node, depth, c) {
|
|
156
|
+
const head = `${" ".repeat(depth)}${c.bold(`#${node.id}`)}`;
|
|
157
|
+
if (node.notAnIssue)
|
|
158
|
+
return `${head} ${c.yellow("(a pull request, not a subtask)")}`;
|
|
159
|
+
if (!node.entity)
|
|
160
|
+
return `${head} ${c.dim("(not in this tree)")}`;
|
|
161
|
+
return `${head} ${node.entity.title} ${c.dim(`(${node.entity.status})`)}${note(node, c)}`;
|
|
162
|
+
}
|
|
163
|
+
function note(node, c) {
|
|
164
|
+
if (node.cycle)
|
|
165
|
+
return ` ${c.yellow("(loops back)")}`;
|
|
166
|
+
return node.repeated ? ` ${c.dim("(shown above)")}` : "";
|
|
167
|
+
}
|
|
168
|
+
function stringField(entity, key) {
|
|
169
|
+
const value = entity.fm[key];
|
|
170
|
+
return typeof value === "string" ? value : "";
|
|
171
|
+
}
|
|
172
|
+
function renderComment(comment, depth, c) {
|
|
173
|
+
const indent = " ".repeat(depth + 1);
|
|
174
|
+
const head = [c.bold(`#${comment.id}`), comment.author, toIsoSeconds(comment.date)];
|
|
175
|
+
const verdict = comment.parsed.fm.verdict;
|
|
176
|
+
if (typeof verdict === "string") {
|
|
177
|
+
// The third verdict judges nothing, so it is not painted as though it did.
|
|
178
|
+
const paint = verdict === "approve" ? c.green : verdict === "comment" ? c.dim : c.yellow;
|
|
179
|
+
head.push(paint(`[${verdict}]`));
|
|
180
|
+
}
|
|
181
|
+
const revision = comment.parsed.fm.revision;
|
|
182
|
+
if (typeof revision === "string")
|
|
183
|
+
head.push(c.dim(`@${revision.slice(0, 12)}`));
|
|
184
|
+
const file = comment.parsed.fm.file;
|
|
185
|
+
if (typeof file === "string") {
|
|
186
|
+
const line = comment.parsed.fm.line;
|
|
187
|
+
head.push(c.dim(`${file}${line === undefined ? "" : `:${line}`}`));
|
|
188
|
+
}
|
|
189
|
+
if (comment.replyTo)
|
|
190
|
+
head.push(c.dim(`reply to #${comment.replyTo}`));
|
|
191
|
+
const lines = [`${indent}${head.join(" ")}`];
|
|
192
|
+
for (const line of comment.body.trim().split("\n")) {
|
|
193
|
+
lines.push(line === "" ? "" : `${indent} ${line}`);
|
|
194
|
+
}
|
|
195
|
+
return lines;
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail.js","sourceRoot":"","sources":["../../src/render/detail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/render/table.ts"],"names":[],"mappings":"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"}
|