@navbook/cli 0.1.1 → 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/program.js +356 -0
- 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 +0 -204
- 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
package/dist/program.js
ADDED
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command tree — spec 04 §4.3: noun-verb, with one verb vocabulary shared by
|
|
3
|
+
* both entity kinds, plus root-level utilities.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync } from "node:fs";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { Command, Option } from "commander";
|
|
8
|
+
import { cmdComplete } from "./commands/complete.js";
|
|
9
|
+
import { cmdDoctor } from "./commands/doctor.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";
|
|
12
|
+
import { cmdId, cmdInit } from "./commands/init.js";
|
|
13
|
+
import { cmdInstall, cmdUninstall } from "./commands/install.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";
|
|
17
|
+
/**
|
|
18
|
+
* Read straight from package.json rather than duplicating the version as a
|
|
19
|
+
* literal: a hardcoded copy silently drifts the moment a release is cut
|
|
20
|
+
* without updating both places (which is exactly what shipped as 0.1.1).
|
|
21
|
+
* `../package.json` is the package root from both `src/` in dev and `dist/`
|
|
22
|
+
* after the build — the same relative depth either way.
|
|
23
|
+
*/
|
|
24
|
+
function readOwnVersion() {
|
|
25
|
+
const path = fileURLToPath(new URL("../package.json", import.meta.url));
|
|
26
|
+
const pkg = JSON.parse(readFileSync(path, "utf8"));
|
|
27
|
+
return pkg.version;
|
|
28
|
+
}
|
|
29
|
+
export const VERSION = readOwnVersion();
|
|
30
|
+
const QUERY_HELP = `Query terms AND together. Terms:
|
|
31
|
+
status:open|closed|merged entity status (path); 'merged' is PR-only
|
|
32
|
+
label:L L is among the entity's labels (repeatable, ANDs)
|
|
33
|
+
assignee:EMAIL assignee address, or a fragment of its domain
|
|
34
|
+
author:EMAIL author address, same matching
|
|
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
|
|
40
|
+
WORD or "some phrase" case-insensitive substring of the title,
|
|
41
|
+
description, or any comment body
|
|
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);
|
|
65
|
+
}
|
|
66
|
+
export function buildProgram(getCtx) {
|
|
67
|
+
const program = withoutHelpVerb(new Command());
|
|
68
|
+
program
|
|
69
|
+
.name("nav")
|
|
70
|
+
.description("Git-native issue and pull-request tracking, stored as files in your repository")
|
|
71
|
+
.version(VERSION, "-V, --version")
|
|
72
|
+
.showHelpAfterError()
|
|
73
|
+
.enablePositionalOptions();
|
|
74
|
+
program
|
|
75
|
+
.command("init")
|
|
76
|
+
.description("create the Navbook skeleton at the repository root")
|
|
77
|
+
.option("--commit", commitHelp())
|
|
78
|
+
.action((opts) => cmdInit(getCtx(), opts));
|
|
79
|
+
program
|
|
80
|
+
.command("id")
|
|
81
|
+
.description("mint and print a fresh Navbook ID")
|
|
82
|
+
.option("-n, --count <n>", "how many IDs to print", (value) => Number.parseInt(value, 10), 1)
|
|
83
|
+
.action((opts) => cmdId(getCtx(), opts));
|
|
84
|
+
program
|
|
85
|
+
.command("doctor")
|
|
86
|
+
.description("check the tree against the specification")
|
|
87
|
+
.option("--staged", "check only what is staged in the index (used by the pre-commit hook)")
|
|
88
|
+
.option("--fix", "apply the mechanical repairs offered by the diagnostics")
|
|
89
|
+
.option("--json", "one JSON object per diagnostic, newline-delimited")
|
|
90
|
+
.action((opts) => cmdDoctor(getCtx(), opts));
|
|
91
|
+
program
|
|
92
|
+
.command("install")
|
|
93
|
+
.description("set up the git alias, merge config, pre-commit hook and completions")
|
|
94
|
+
.addOption(new Option("--alias [name]", "git alias name (default: nav)"))
|
|
95
|
+
.option("--hooks", "install the pre-commit hook")
|
|
96
|
+
.addOption(new Option("--completions [shell]", "bash, zsh or fish (default: $SHELL)"))
|
|
97
|
+
.option("--merge-config", "set merge.directoryRenames=true in this repository")
|
|
98
|
+
.option("-y, --yes", "do not ask for confirmation")
|
|
99
|
+
.action((opts) => cmdInstall(getCtx(), opts));
|
|
100
|
+
program
|
|
101
|
+
.command("uninstall")
|
|
102
|
+
.description("remove what nav install set up")
|
|
103
|
+
.addOption(new Option("--alias [name]", "git alias name (default: nav)"))
|
|
104
|
+
.option("--hooks", "remove the pre-commit hook block")
|
|
105
|
+
.addOption(new Option("--completions [shell]", "bash, zsh or fish (default: $SHELL)"))
|
|
106
|
+
.option("--merge-config", "unset merge.directoryRenames")
|
|
107
|
+
.option("-y, --yes", "do not ask for confirmation")
|
|
108
|
+
.action((opts) => cmdUninstall(getCtx(), opts));
|
|
109
|
+
program
|
|
110
|
+
.command("__complete", { hidden: true })
|
|
111
|
+
.description("internal: print completion candidates for the words typed so far")
|
|
112
|
+
.argument("[words...]")
|
|
113
|
+
.action((words) => cmdComplete(getCtx(), words));
|
|
114
|
+
program.addCommand(buildIssueCommand(getCtx));
|
|
115
|
+
program.addCommand(buildPrCommand(getCtx));
|
|
116
|
+
program.addCommand(buildFeatureCommand(getCtx));
|
|
117
|
+
return program;
|
|
118
|
+
}
|
|
119
|
+
function buildPrCommand(getCtx) {
|
|
120
|
+
const pr = withoutHelpVerb(new Command("pr")).description("work with pull requests");
|
|
121
|
+
pr.command("open")
|
|
122
|
+
.description("open a pull request from the current branch")
|
|
123
|
+
.option("--target <branch>", "branch to merge into (default: the repository's default branch)")
|
|
124
|
+
.option("--title <text>", "one-line summary (default: the last commit's subject)")
|
|
125
|
+
.option("-m, --message <text>", "description text; without it $EDITOR is opened")
|
|
126
|
+
.option("--draft", "not yet requesting review")
|
|
127
|
+
.option("--label <label>", "add a label (repeatable)", collect, [])
|
|
128
|
+
.option("--assignee <email>", "assign to a person (repeatable)", collect, [])
|
|
129
|
+
.option("--reviewer <email>", "ask a person to review it (repeatable)", collect, [])
|
|
130
|
+
.option("--milestone <name>", "milestone")
|
|
131
|
+
.option("--feature <slug>", "attach it to a feature (repeatable)", collect, [])
|
|
132
|
+
.option("--commit", commitHelp("pr"))
|
|
133
|
+
.action((opts) => cmdPrOpen(getCtx(), opts));
|
|
134
|
+
pr.command("update")
|
|
135
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
136
|
+
.description("append a revision pinning the current HEAD")
|
|
137
|
+
.option("--commit", commitHelp("pr"))
|
|
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));
|
|
146
|
+
pr.command("review")
|
|
147
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
148
|
+
.description("review a pull request, bound to a specific revision")
|
|
149
|
+
.option("--approve", "record an approving verdict")
|
|
150
|
+
.option("--request-changes", "record a request-changes verdict")
|
|
151
|
+
.option("--comment", "record a verdict that judges nothing (the default)")
|
|
152
|
+
.option("-m, --message <text>", "review text; without it $EDITOR is opened")
|
|
153
|
+
.option("--revision <sha>", "bind to this revision instead of the latest")
|
|
154
|
+
.option("--file <path>", "anchor the comment to a file")
|
|
155
|
+
.option("--line <n|start-end>", "anchor the comment to a line or range")
|
|
156
|
+
.option("--commit", commitHelp("pr"))
|
|
157
|
+
.action((id, opts) => cmdPrReview(getCtx(), id, opts));
|
|
158
|
+
pr.command("merge")
|
|
159
|
+
.argument("[id]", "ID or unambiguous prefix")
|
|
160
|
+
.description("merge a pull request into the checked-out target branch")
|
|
161
|
+
.option("--no-ff", "always create a merge commit")
|
|
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")
|
|
164
|
+
// Commander models `--no-ff` as the negation of an implicit `--ff`.
|
|
165
|
+
.action((id, opts) => cmdPrMerge(getCtx(), id, { ...opts, noFf: opts.ff === false }));
|
|
166
|
+
addSharedVerbs(pr, "pr", getCtx, {
|
|
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: [],
|
|
170
|
+
runClose: (ctx, id, options) => cmdPrClose(ctx, id, options),
|
|
171
|
+
configureList: (command) => {
|
|
172
|
+
command.option("--all-refs", "scan all local and fetched remote branches, not just this one");
|
|
173
|
+
},
|
|
174
|
+
runList: (ctx, terms, options) => cmdPrList(ctx, terms, options),
|
|
175
|
+
});
|
|
176
|
+
return pr;
|
|
177
|
+
}
|
|
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;
|
|
242
|
+
}
|
|
243
|
+
function buildIssueCommand(getCtx) {
|
|
244
|
+
const issue = withoutHelpVerb(new Command("issue")).description("work with issues");
|
|
245
|
+
issue
|
|
246
|
+
.command("open")
|
|
247
|
+
.argument("<title>", "one-line summary")
|
|
248
|
+
.description("file a new issue")
|
|
249
|
+
.option("-m, --message <text>", "description text; without it $EDITOR is opened")
|
|
250
|
+
.option("--label <label>", "add a label (repeatable)", collect, [])
|
|
251
|
+
.option("--assignee <email>", "assign to a person (repeatable)", collect, [])
|
|
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")
|
|
260
|
+
.option("--commit", commitHelp("issue"))
|
|
261
|
+
.action((title, opts) => cmdIssueOpen(getCtx(), title, opts));
|
|
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
|
+
});
|
|
286
|
+
return issue;
|
|
287
|
+
}
|
|
288
|
+
/** Register the verbs both nouns share, so their behavior can never drift. */
|
|
289
|
+
export function addSharedVerbs(parent, kind, getCtx, shared) {
|
|
290
|
+
const noun = kind === "issue" ? "issue" : "pull request";
|
|
291
|
+
const { extraColumns } = shared;
|
|
292
|
+
const list = parent
|
|
293
|
+
.command("list")
|
|
294
|
+
.argument("[query...]", "query terms; default status:open")
|
|
295
|
+
.description(`list ${kind === "issue" ? "issues" : "pull requests"} matching a query`)
|
|
296
|
+
.addHelpText("after", `\n${QUERY_HELP}`)
|
|
297
|
+
.option("--json", "one JSON object per entity, newline-delimited");
|
|
298
|
+
shared.configureList?.(list);
|
|
299
|
+
list.action((terms, opts) => shared.runList
|
|
300
|
+
? shared.runList(getCtx(), terms, { ...opts, extraColumns })
|
|
301
|
+
: cmdList(getCtx(), kind, terms, { ...opts, extraColumns }));
|
|
302
|
+
const show = parent
|
|
303
|
+
.command("show")
|
|
304
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
305
|
+
.description(`render one ${noun} and its comments`)
|
|
306
|
+
.option("--json", "emit a single JSON object including comments");
|
|
307
|
+
shared.configureShow?.(show);
|
|
308
|
+
show.action((id, opts) => cmdShow(getCtx(), kind, id, opts));
|
|
309
|
+
parent
|
|
310
|
+
.command("edit")
|
|
311
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
312
|
+
.description(`open the ${noun}'s file in $EDITOR`)
|
|
313
|
+
.option("--commit", commitHelp(kind))
|
|
314
|
+
.action((id, opts) => cmdEdit(getCtx(), kind, id, opts));
|
|
315
|
+
parent
|
|
316
|
+
.command("comment")
|
|
317
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
318
|
+
.description(`add a comment to a ${noun}`)
|
|
319
|
+
.option("-m, --message <text>", "comment text; without it $EDITOR is opened")
|
|
320
|
+
.option("--reply-to <comment-id>", "comment this one replies to")
|
|
321
|
+
.option("--commit", commitHelp(kind))
|
|
322
|
+
.action((id, opts) => cmdComment(getCtx(), kind, id, opts));
|
|
323
|
+
parent
|
|
324
|
+
.command("close")
|
|
325
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
326
|
+
.description(`move the ${noun} to closed/`)
|
|
327
|
+
.option("--resolution <value>", "why it was closed, e.g. fixed, wontfix, duplicate")
|
|
328
|
+
.option("--duplicate-of <id>", "the entity this duplicates (implies duplicate)")
|
|
329
|
+
.option("--commit", commitHelp(kind))
|
|
330
|
+
.action((id, opts) => {
|
|
331
|
+
const options = { ...opts, duplicateOf: opts.duplicateOf };
|
|
332
|
+
if (shared.runClose)
|
|
333
|
+
shared.runClose(getCtx(), id, options);
|
|
334
|
+
else
|
|
335
|
+
cmdClose(getCtx(), kind, id, options);
|
|
336
|
+
});
|
|
337
|
+
parent
|
|
338
|
+
.command("reopen")
|
|
339
|
+
.argument("<id>", "ID or unambiguous prefix")
|
|
340
|
+
.description(`move the ${noun} back to open/ and clear its resolution`)
|
|
341
|
+
.option("--commit", commitHelp(kind))
|
|
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));
|
|
351
|
+
}
|
|
352
|
+
export function collect(value, previous) {
|
|
353
|
+
return [...previous, value];
|
|
354
|
+
}
|
|
355
|
+
export { Option };
|
|
356
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -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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"}
|