@navbook/cli 0.1.2 → 0.3.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.
Files changed (167) hide show
  1. package/dist/commands/complete.js +124 -0
  2. package/dist/commands/complete.js.map +1 -0
  3. package/dist/{cli/commands → commands}/compose.js +5 -3
  4. package/dist/commands/compose.js.map +1 -0
  5. package/dist/commands/doctor.js +56 -0
  6. package/dist/commands/doctor.js.map +1 -0
  7. package/dist/commands/entity.js +252 -0
  8. package/dist/commands/entity.js.map +1 -0
  9. package/dist/commands/feature.js +202 -0
  10. package/dist/commands/feature.js.map +1 -0
  11. package/dist/commands/init.js +23 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/{cli/commands → commands}/install.js +1 -2
  14. package/dist/commands/install.js.map +1 -0
  15. package/dist/commands/issue.js +89 -0
  16. package/dist/commands/issue.js.map +1 -0
  17. package/dist/commands/policy.js +49 -0
  18. package/dist/commands/policy.js.map +1 -0
  19. package/dist/commands/pr.js +311 -0
  20. package/dist/commands/pr.js.map +1 -0
  21. package/dist/context.js +21 -0
  22. package/dist/context.js.map +1 -0
  23. package/dist/{cli/editor.js → editor.js} +1 -1
  24. package/dist/editor.js.map +1 -0
  25. package/dist/errors.js.map +1 -0
  26. package/dist/install/completions.js.map +1 -0
  27. package/dist/{cli/install → install}/hook.js +1 -1
  28. package/dist/install/hook.js.map +1 -0
  29. package/dist/{cli/main.js → main.js} +10 -0
  30. package/dist/main.js.map +1 -0
  31. package/dist/{cli/program.js → program.js} +162 -23
  32. package/dist/program.js.map +1 -0
  33. package/dist/{cli/prompt.js → prompt.js} +11 -0
  34. package/dist/prompt.js.map +1 -0
  35. package/dist/render/colors.js.map +1 -0
  36. package/dist/render/detail.js +197 -0
  37. package/dist/render/detail.js.map +1 -0
  38. package/dist/render/table.js.map +1 -0
  39. package/dist/sort.js +77 -0
  40. package/dist/sort.js.map +1 -0
  41. package/package.json +15 -21
  42. package/README.md +0 -165
  43. package/dist/cli/commands/complete.d.ts +0 -9
  44. package/dist/cli/commands/complete.js +0 -72
  45. package/dist/cli/commands/complete.js.map +0 -1
  46. package/dist/cli/commands/compose.d.ts +0 -27
  47. package/dist/cli/commands/compose.js.map +0 -1
  48. package/dist/cli/commands/doctor.d.ts +0 -14
  49. package/dist/cli/commands/doctor.js +0 -127
  50. package/dist/cli/commands/doctor.js.map +0 -1
  51. package/dist/cli/commands/entity.d.ts +0 -55
  52. package/dist/cli/commands/entity.js +0 -209
  53. package/dist/cli/commands/entity.js.map +0 -1
  54. package/dist/cli/commands/init.d.ts +0 -11
  55. package/dist/cli/commands/init.js +0 -39
  56. package/dist/cli/commands/init.js.map +0 -1
  57. package/dist/cli/commands/install.d.ts +0 -17
  58. package/dist/cli/commands/install.js.map +0 -1
  59. package/dist/cli/commands/issue.d.ts +0 -12
  60. package/dist/cli/commands/issue.js +0 -42
  61. package/dist/cli/commands/issue.js.map +0 -1
  62. package/dist/cli/commands/pr.d.ts +0 -64
  63. package/dist/cli/commands/pr.js +0 -466
  64. package/dist/cli/commands/pr.js.map +0 -1
  65. package/dist/cli/commit-flow.d.ts +0 -27
  66. package/dist/cli/commit-flow.js +0 -47
  67. package/dist/cli/commit-flow.js.map +0 -1
  68. package/dist/cli/context.d.ts +0 -39
  69. package/dist/cli/context.js +0 -93
  70. package/dist/cli/context.js.map +0 -1
  71. package/dist/cli/editor.d.ts +0 -23
  72. package/dist/cli/editor.js.map +0 -1
  73. package/dist/cli/errors.d.ts +0 -17
  74. package/dist/cli/errors.js.map +0 -1
  75. package/dist/cli/history-checks.d.ts +0 -21
  76. package/dist/cli/history-checks.js +0 -134
  77. package/dist/cli/history-checks.js.map +0 -1
  78. package/dist/cli/install/completions.d.ts +0 -19
  79. package/dist/cli/install/completions.js.map +0 -1
  80. package/dist/cli/install/hook.d.ts +0 -20
  81. package/dist/cli/install/hook.js.map +0 -1
  82. package/dist/cli/main.d.ts +0 -14
  83. package/dist/cli/main.js.map +0 -1
  84. package/dist/cli/program.d.ts +0 -23
  85. package/dist/cli/program.js.map +0 -1
  86. package/dist/cli/prompt.d.ts +0 -22
  87. package/dist/cli/prompt.js.map +0 -1
  88. package/dist/cli/render/colors.d.ts +0 -13
  89. package/dist/cli/render/colors.js.map +0 -1
  90. package/dist/cli/render/detail.d.ts +0 -10
  91. package/dist/cli/render/detail.js +0 -105
  92. package/dist/cli/render/detail.js.map +0 -1
  93. package/dist/cli/render/table.d.ts +0 -19
  94. package/dist/cli/render/table.js.map +0 -1
  95. package/dist/cli/resolve.d.ts +0 -17
  96. package/dist/cli/resolve.js +0 -68
  97. package/dist/cli/resolve.js.map +0 -1
  98. package/dist/cli/workspace.d.ts +0 -52
  99. package/dist/cli/workspace.js +0 -178
  100. package/dist/cli/workspace.js.map +0 -1
  101. package/dist/core/comments.d.ts +0 -31
  102. package/dist/core/comments.js +0 -80
  103. package/dist/core/comments.js.map +0 -1
  104. package/dist/core/files.d.ts +0 -88
  105. package/dist/core/files.js +0 -441
  106. package/dist/core/files.js.map +0 -1
  107. package/dist/core/frontmatter.d.ts +0 -63
  108. package/dist/core/frontmatter.js +0 -149
  109. package/dist/core/frontmatter.js.map +0 -1
  110. package/dist/core/id.d.ts +0 -46
  111. package/dist/core/id.js +0 -66
  112. package/dist/core/id.js.map +0 -1
  113. package/dist/core/index.d.ts +0 -19
  114. package/dist/core/index.js +0 -20
  115. package/dist/core/index.js.map +0 -1
  116. package/dist/core/json.d.ts +0 -18
  117. package/dist/core/json.js +0 -51
  118. package/dist/core/json.js.map +0 -1
  119. package/dist/core/ops.d.ts +0 -92
  120. package/dist/core/ops.js +0 -173
  121. package/dist/core/ops.js.map +0 -1
  122. package/dist/core/person.d.ts +0 -20
  123. package/dist/core/person.js +0 -50
  124. package/dist/core/person.js.map +0 -1
  125. package/dist/core/query.d.ts +0 -30
  126. package/dist/core/query.js +0 -106
  127. package/dist/core/query.js.map +0 -1
  128. package/dist/core/refs.d.ts +0 -12
  129. package/dist/core/refs.js +0 -36
  130. package/dist/core/refs.js.map +0 -1
  131. package/dist/core/slug.d.ts +0 -22
  132. package/dist/core/slug.js +0 -40
  133. package/dist/core/slug.js.map +0 -1
  134. package/dist/core/time.d.ts +0 -14
  135. package/dist/core/time.js +0 -37
  136. package/dist/core/time.js.map +0 -1
  137. package/dist/core/tree.d.ts +0 -94
  138. package/dist/core/tree.js +0 -237
  139. package/dist/core/tree.js.map +0 -1
  140. package/dist/core/validate.d.ts +0 -55
  141. package/dist/core/validate.js +0 -312
  142. package/dist/core/validate.js.map +0 -1
  143. package/dist/git/config.d.ts +0 -12
  144. package/dist/git/config.js +0 -27
  145. package/dist/git/config.js.map +0 -1
  146. package/dist/git/exec.d.ts +0 -35
  147. package/dist/git/exec.js +0 -58
  148. package/dist/git/exec.js.map +0 -1
  149. package/dist/git/history.d.ts +0 -35
  150. package/dist/git/history.js +0 -82
  151. package/dist/git/history.js.map +0 -1
  152. package/dist/git/index-ops.d.ts +0 -20
  153. package/dist/git/index-ops.js +0 -45
  154. package/dist/git/index-ops.js.map +0 -1
  155. package/dist/git/merge.d.ts +0 -27
  156. package/dist/git/merge.js +0 -57
  157. package/dist/git/merge.js.map +0 -1
  158. package/dist/git/refscan.d.ts +0 -32
  159. package/dist/git/refscan.js +0 -82
  160. package/dist/git/refscan.js.map +0 -1
  161. package/dist/git/repo.d.ts +0 -45
  162. package/dist/git/repo.js +0 -95
  163. package/dist/git/repo.js.map +0 -1
  164. /package/dist/{cli/errors.js → errors.js} +0 -0
  165. /package/dist/{cli/install → install}/completions.js +0 -0
  166. /package/dist/{cli/render → render}/colors.js +0 -0
  167. /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
- * `../../package.json` is the package root from both `src/cli/` in dev and
20
- * `dist/cli/` after the build — the same relative depth either way.
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("../../package.json", import.meta.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) and AND
37
- for multi-valued ones (label, assignee). The default query is status:open.`;
38
- /** Help for `--commit`, naming the subject the verb commits under (spec 03 §3.2). */
39
- function commitHelp(kind) {
40
- return `wrap the change in a 'docs${kind ? `(${kind})` : ""}:' commit`;
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 .navbook/ skeleton at the repository root")
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,14 @@ 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")
164
+ .option("--no-sync-source", "leave the source branch behind instead of fast-forwarding it")
128
165
  // Commander models `--no-ff` as the negation of an implicit `--ff`.
129
166
  .action((id, opts) => cmdPrMerge(getCtx(), id, { ...opts, noFf: opts.ff === false }));
130
167
  addSharedVerbs(pr, "pr", getCtx, {
131
- extraColumns: [{ header: "target", value: (entity) => stringOf(entity, "target") }],
168
+ // No extra columns here: `cmdPrList` owns the PR listing's columns, because
169
+ // it appends a `refs` one when scanning across branches.
170
+ extraColumns: [],
132
171
  runClose: (ctx, id, options) => cmdPrClose(ctx, id, options),
133
172
  configureList: (command) => {
134
173
  command.option("--all-refs", "scan all local and fetched remote branches, not just this one");
@@ -137,12 +176,73 @@ function buildPrCommand(getCtx) {
137
176
  });
138
177
  return pr;
139
178
  }
140
- function stringOf(entity, key) {
141
- const value = entity.fm[key];
142
- return typeof value === "string" ? value : "";
179
+ /**
180
+ * `nav feature` — spec 04 §4.3.
181
+ *
182
+ * None of the shared verbs appear here. A feature does not open and close, and
183
+ * it is not discussed: the discussion belongs to the issues attached to it. So
184
+ * the family is small on purpose, and `spec` groups what acts on the documents
185
+ * rather than on the feature itself.
186
+ */
187
+ function buildFeatureCommand(getCtx) {
188
+ const feature = withoutHelpVerb(new Command("feature")).description("work with features");
189
+ feature
190
+ .command("open")
191
+ .argument("<title>", "one-line name for the feature")
192
+ .description("create a feature")
193
+ .option("-m, --message <text>", "summary text; without it $EDITOR is opened")
194
+ .option("--slug <slug>", "directory name to file it under; derived from the title otherwise")
195
+ .option("--commit", commitHelp("feature"))
196
+ .action((title, opts) => cmdFeatureOpen(getCtx(), title, opts));
197
+ feature
198
+ .command("list")
199
+ .description("list features, with how much work is attached to each")
200
+ .option("--json", "one JSON object per feature, newline-delimited")
201
+ .action((opts) => cmdFeatureList(getCtx(), opts));
202
+ feature
203
+ .command("show")
204
+ .argument("<slug>", "the feature's directory name")
205
+ .description("render a feature, its documents, and what has touched it")
206
+ .option("--json", "emit a single JSON object naming its issues and pull requests")
207
+ .option("--commits <n>", "recent commits to list (default 10)", (value) => value.trim() === "" ? Number.NaN : Number(value))
208
+ .action((slug, opts) => cmdFeatureShow(getCtx(), slug, opts));
209
+ feature
210
+ .command("edit")
211
+ .argument("<slug>", "the feature's directory name")
212
+ .description("open the feature's feature.md in $EDITOR")
213
+ .option("--commit", commitHelp("feature"))
214
+ .action((slug, opts) => cmdFeatureEdit(getCtx(), slug, opts));
215
+ feature.addCommand(buildSpecCommand(getCtx));
216
+ return feature;
217
+ }
218
+ function buildSpecCommand(getCtx) {
219
+ const spec = withoutHelpVerb(new Command("spec")).description("work with a feature's specification documents");
220
+ spec
221
+ .command("add")
222
+ .argument("<slug>", "the feature's directory name")
223
+ .argument("<title>", "one-line name for the document")
224
+ .description("add a specification document to a feature")
225
+ .option("-m, --message <text>", "document text; without it $EDITOR is opened")
226
+ .option("--file <name>", "file to write it to; derived from the title otherwise")
227
+ .option("--commit", commitHelp("feature"))
228
+ .action((slug, title, opts) => cmdSpecAdd(getCtx(), slug, title, opts));
229
+ spec
230
+ .command("edit")
231
+ .argument("<slug>", "the feature's directory name")
232
+ .argument("<file>", "the document's file name")
233
+ .description("open a specification document in $EDITOR")
234
+ .option("--commit", commitHelp("feature"))
235
+ .action((slug, file, opts) => cmdSpecEdit(getCtx(), slug, file, opts));
236
+ spec
237
+ .command("list")
238
+ .argument("<slug>", "the feature's directory name")
239
+ .description("list a feature's specification documents")
240
+ .option("--json", "one JSON object per document, newline-delimited")
241
+ .action((slug, opts) => cmdSpecList(getCtx(), slug, opts));
242
+ return spec;
143
243
  }
144
244
  function buildIssueCommand(getCtx) {
145
- const issue = new Command("issue").description("work with issues");
245
+ const issue = withoutHelpVerb(new Command("issue")).description("work with issues");
146
246
  issue
147
247
  .command("open")
148
248
  .argument("<title>", "one-line summary")
@@ -151,9 +251,39 @@ function buildIssueCommand(getCtx) {
151
251
  .option("--label <label>", "add a label (repeatable)", collect, [])
152
252
  .option("--assignee <email>", "assign to a person (repeatable)", collect, [])
153
253
  .option("--milestone <name>", "milestone")
254
+ .option("--feature <slug>", "attach it to a feature (repeatable)", collect, [])
255
+ // Number rather than parseInt, and blank rather than 0, for the reason
256
+ // `--depth` does it: a value the command must refuse has to reach it
257
+ // intact rather than arrive silently rounded or defaulted.
258
+ .option("--rank <n>", "where it sits in the queue; lower first", (value) => value.trim() === "" ? Number.NaN : Number(value))
259
+ .option("--deadline <date>", "when the work is wanted, YYYY-MM-DD")
260
+ .option("--parent <id>", "file it as a subtask of an existing issue")
154
261
  .option("--commit", commitHelp("issue"))
155
262
  .action((title, opts) => cmdIssueOpen(getCtx(), title, opts));
156
- addSharedVerbs(issue, "issue", getCtx, { extraColumns: [] });
263
+ issue
264
+ .command("link")
265
+ .argument("<id>", "ID or unambiguous prefix")
266
+ .description("file the issue as a subtask of another issue")
267
+ .requiredOption("--parent <id>", "the issue it belongs under")
268
+ .option("-f, --force", "move it without asking when it already has a parent")
269
+ .option("--commit", commitHelp("issue"))
270
+ .action((id, opts) => cmdIssueLink(getCtx(), id, opts));
271
+ issue
272
+ .command("unlink")
273
+ .argument("<id>", "ID or unambiguous prefix")
274
+ .description("detach the issue from its parent")
275
+ .option("--commit", commitHelp("issue"))
276
+ .action((id, opts) => cmdIssueUnlink(getCtx(), id, opts));
277
+ addSharedVerbs(issue, "issue", getCtx, {
278
+ extraColumns: [],
279
+ configureList: (command) => command.option("--sort <order>", `listing order: ${SORT_ORDERS.join(", ")} (default ${DEFAULT_SORT})`),
280
+ configureShow: (command) =>
281
+ // Number, not parseInt: '2.5' has to reach the command as 2.5 so it can
282
+ // be refused, rather than being silently rounded to something valid.
283
+ // No default here — `cmdShow` owns it, so every caller gets the same one.
284
+ command.option("--depth <n>", "levels of subtasks to render (default 1)", (value) => value.trim() === "" ? Number.NaN : Number(value)),
285
+ configureDelete: (command) => command.option("-r, --recursive", "delete its subtasks too, to any depth"),
286
+ });
157
287
  return issue;
158
288
  }
159
289
  /** Register the verbs both nouns share, so their behavior can never drift. */
@@ -170,12 +300,13 @@ export function addSharedVerbs(parent, kind, getCtx, shared) {
170
300
  list.action((terms, opts) => shared.runList
171
301
  ? shared.runList(getCtx(), terms, { ...opts, extraColumns })
172
302
  : cmdList(getCtx(), kind, terms, { ...opts, extraColumns }));
173
- parent
303
+ const show = parent
174
304
  .command("show")
175
305
  .argument("<id>", "ID or unambiguous prefix")
176
306
  .description(`render one ${noun} and its comments`)
177
- .option("--json", "emit a single JSON object including comments")
178
- .action((id, opts) => cmdShow(getCtx(), kind, id, opts));
307
+ .option("--json", "emit a single JSON object including comments");
308
+ shared.configureShow?.(show);
309
+ show.action((id, opts) => cmdShow(getCtx(), kind, id, opts));
179
310
  parent
180
311
  .command("edit")
181
312
  .argument("<id>", "ID or unambiguous prefix")
@@ -210,6 +341,14 @@ export function addSharedVerbs(parent, kind, getCtx, shared) {
210
341
  .description(`move the ${noun} back to open/ and clear its resolution`)
211
342
  .option("--commit", commitHelp(kind))
212
343
  .action((id, opts) => cmdReopen(getCtx(), kind, id, opts));
344
+ const remove = parent
345
+ .command("delete")
346
+ .argument("<id>", "ID or unambiguous prefix")
347
+ .description(`remove the ${noun}'s directory, whatever its status`)
348
+ .option("-f, --force", "do not ask, even when the directory holds uncommitted changes")
349
+ .option("--commit", commitHelp(kind));
350
+ shared.configureDelete?.(remove);
351
+ remove.action((id, opts) => cmdDelete(getCtx(), kind, id, opts));
213
352
  }
214
353
  export function collect(value, previous) {
215
354
  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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"}