@navbook/cli 0.4.0 → 0.5.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 (78) hide show
  1. package/dist/args.d.ts +28 -0
  2. package/dist/args.js +48 -0
  3. package/dist/args.js.map +1 -0
  4. package/dist/commands/complete.d.ts +10 -0
  5. package/dist/commands/complete.js +59 -51
  6. package/dist/commands/complete.js.map +1 -1
  7. package/dist/commands/compose.d.ts +35 -0
  8. package/dist/commands/doctor.d.ts +15 -0
  9. package/dist/commands/entity.d.ts +73 -0
  10. package/dist/commands/entity.js +59 -44
  11. package/dist/commands/entity.js.map +1 -1
  12. package/dist/commands/init.d.ts +11 -0
  13. package/dist/commands/install.d.ts +17 -0
  14. package/dist/commands/install.js +6 -3
  15. package/dist/commands/install.js.map +1 -1
  16. package/dist/commands/issue.d.ts +35 -0
  17. package/dist/commands/issue.js +4 -5
  18. package/dist/commands/issue.js.map +1 -1
  19. package/dist/commands/plugin.d.ts +36 -0
  20. package/dist/commands/plugin.js +386 -0
  21. package/dist/commands/plugin.js.map +1 -0
  22. package/dist/commands/policy.d.ts +58 -0
  23. package/dist/commands/policy.js +13 -0
  24. package/dist/commands/policy.js.map +1 -1
  25. package/dist/commands/pr-elsewhere.d.ts +40 -0
  26. package/dist/commands/pr-elsewhere.js +209 -0
  27. package/dist/commands/pr-elsewhere.js.map +1 -0
  28. package/dist/commands/pr.d.ts +69 -0
  29. package/dist/commands/pr.js +86 -60
  30. package/dist/commands/pr.js.map +1 -1
  31. package/dist/context.d.ts +42 -0
  32. package/dist/context.js +2 -0
  33. package/dist/context.js.map +1 -1
  34. package/dist/editor.d.ts +23 -0
  35. package/dist/editor.js +4 -0
  36. package/dist/editor.js.map +1 -1
  37. package/dist/errors.d.ts +17 -0
  38. package/dist/install/completions.d.ts +19 -0
  39. package/dist/install/hook.d.ts +32 -0
  40. package/dist/install/hook.js +48 -4
  41. package/dist/install/hook.js.map +1 -1
  42. package/dist/main.d.ts +21 -0
  43. package/dist/main.js +112 -8
  44. package/dist/main.js.map +1 -1
  45. package/dist/plugins/commands.d.ts +69 -0
  46. package/dist/plugins/commands.js +148 -0
  47. package/dist/plugins/commands.js.map +1 -0
  48. package/dist/plugins/hint.d.ts +23 -0
  49. package/dist/plugins/hint.js +65 -0
  50. package/dist/plugins/hint.js.map +1 -0
  51. package/dist/plugins/host.d.ts +125 -0
  52. package/dist/plugins/host.js +18 -0
  53. package/dist/plugins/host.js.map +1 -0
  54. package/dist/plugins/loader.d.ts +54 -0
  55. package/dist/plugins/loader.js +165 -0
  56. package/dist/plugins/loader.js.map +1 -0
  57. package/dist/plugins/resolve.d.ts +50 -0
  58. package/dist/plugins/resolve.js +134 -0
  59. package/dist/plugins/resolve.js.map +1 -0
  60. package/dist/plugins/runtime.d.ts +69 -0
  61. package/dist/plugins/runtime.js +256 -0
  62. package/dist/plugins/runtime.js.map +1 -0
  63. package/dist/plugins/store.d.ts +96 -0
  64. package/dist/plugins/store.js +186 -0
  65. package/dist/plugins/store.js.map +1 -0
  66. package/dist/program.d.ts +49 -0
  67. package/dist/program.js +351 -113
  68. package/dist/program.js.map +1 -1
  69. package/dist/prompt.d.ts +31 -0
  70. package/dist/render/colors.d.ts +13 -0
  71. package/dist/render/detail.d.ts +22 -0
  72. package/dist/render/table.d.ts +32 -0
  73. package/dist/render/table.js +123 -13
  74. package/dist/render/table.js.map +1 -1
  75. package/dist/sort.d.ts +27 -0
  76. package/package.json +9 -2
  77. package/dist/commands/feature.js +0 -202
  78. package/dist/commands/feature.js.map +0 -1
package/dist/args.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Numeric option values, refused where they are read.
3
+ *
4
+ * Commander catches an `InvalidArgumentError` thrown by a parser and reports
5
+ * it as a usage error, so a bad value never reaches a command. That keeps a
6
+ * flag's validation beside its declaration rather than in whichever command
7
+ * happens to read it — which is how `nav feature show --commits 2.5` came to
8
+ * report an empty history instead of a mistake (#kw143sq9).
9
+ *
10
+ * Both read plain decimal notation only. `Number` alone would also take
11
+ * `0x10`, `0b11` and `1e3`, none of which anybody means by a count of levels
12
+ * or a place in a queue, and `Number("")` is 0.
13
+ *
14
+ * Commander prints the message after its own "option '--x <n>' argument 'v'
15
+ * is invalid.", so each one is a sentence of its own and names the unit.
16
+ */
17
+ /**
18
+ * A count: a whole number no smaller than `min`.
19
+ *
20
+ * `unit` is null for a plugin's option, whose manifest says it is a count but
21
+ * not of what.
22
+ */
23
+ export declare function wholeNumber(unit: string | null, min?: number): (value: string) => number;
24
+ /**
25
+ * A position rather than a count: any finite decimal, negatives and zero
26
+ * included (spec 02 §2.5), so it must not be folded into `wholeNumber`.
27
+ */
28
+ export declare function finiteNumber(value: string): number;
package/dist/args.js ADDED
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Numeric option values, refused where they are read.
3
+ *
4
+ * Commander catches an `InvalidArgumentError` thrown by a parser and reports
5
+ * it as a usage error, so a bad value never reaches a command. That keeps a
6
+ * flag's validation beside its declaration rather than in whichever command
7
+ * happens to read it — which is how `nav feature show --commits 2.5` came to
8
+ * report an empty history instead of a mistake (#kw143sq9).
9
+ *
10
+ * Both read plain decimal notation only. `Number` alone would also take
11
+ * `0x10`, `0b11` and `1e3`, none of which anybody means by a count of levels
12
+ * or a place in a queue, and `Number("")` is 0.
13
+ *
14
+ * Commander prints the message after its own "option '--x <n>' argument 'v'
15
+ * is invalid.", so each one is a sentence of its own and names the unit.
16
+ */
17
+ import { InvalidArgumentError } from "commander";
18
+ const DIGITS = /^\s*\d+\s*$/;
19
+ const DECIMAL = /^\s*[-+]?(\d+(\.\d*)?|\.\d+)\s*$/;
20
+ /**
21
+ * A count: a whole number no smaller than `min`.
22
+ *
23
+ * `unit` is null for a plugin's option, whose manifest says it is a count but
24
+ * not of what.
25
+ */
26
+ export function wholeNumber(unit, min = 0) {
27
+ return (value) => {
28
+ const parsed = Number(value);
29
+ if (!DIGITS.test(value) || !Number.isSafeInteger(parsed) || parsed < min) {
30
+ const floor = min > 0 ? `, at least ${min}` : "";
31
+ const of = unit === null ? "" : ` of ${unit}`;
32
+ throw new InvalidArgumentError(`Expected a whole number${of}${floor}.`);
33
+ }
34
+ return parsed;
35
+ };
36
+ }
37
+ /**
38
+ * A position rather than a count: any finite decimal, negatives and zero
39
+ * included (spec 02 §2.5), so it must not be folded into `wholeNumber`.
40
+ */
41
+ export function finiteNumber(value) {
42
+ const parsed = Number(value);
43
+ if (!DECIMAL.test(value) || !Number.isFinite(parsed)) {
44
+ throw new InvalidArgumentError("Expected a number.");
45
+ }
46
+ return parsed;
47
+ }
48
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,MAAM,GAAG,aAAa,CAAC;AAC7B,MAAM,OAAO,GAAG,kCAAkC,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAmB,EAAE,GAAG,GAAG,CAAC;IACtD,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;YACzE,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;YAC9C,MAAM,IAAI,oBAAoB,CAAC,0BAA0B,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `nav __complete` — the completion backend the shell scripts call.
3
+ *
4
+ * Given the words typed so far (without the leading `nav`), it prints one
5
+ * candidate per line. Keeping the logic here rather than in three shell
6
+ * dialects is what makes ID and slug completion possible at all.
7
+ */
8
+ import type { Ctx } from "../context.ts";
9
+ import type { PluginRuntime } from "../plugins/runtime.ts";
10
+ export declare function cmdComplete(ctx: Ctx, words: string[], plugins?: PluginRuntime): Promise<void>;
@@ -5,31 +5,35 @@
5
5
  * candidate per line. Keeping the logic here rather than in three shell
6
6
  * dialects is what makes ID and slug completion possible at all.
7
7
  */
8
- import { allEntities, loadRepo } from "@navbook/core";
9
- import { featureSlugs } from "./feature.js";
10
- const ROOT_COMMANDS = ["issue", "pr", "feature", "init", "id", "doctor", "install", "uninstall"];
8
+ import { allEntities, loadRepo, queryTermsFor, } from "@navbook/core";
9
+ const ROOT_COMMANDS = ["issue", "pr", "plugin", "init", "id", "doctor", "install", "uninstall"];
10
+ const PLUGIN_VERBS = ["install", "remove", "update", "list"];
11
11
  const SHARED_VERBS = ["open", "list", "show", "edit", "comment", "close", "reopen", "delete"];
12
12
  const ISSUE_VERBS = [...SHARED_VERBS, "link", "unlink"];
13
13
  const PR_VERBS = [...SHARED_VERBS, "update", "request", "review", "merge"];
14
- const FEATURE_VERBS = ["open", "list", "show", "edit", "spec"];
15
- const SPEC_VERBS = ["add", "edit", "list"];
16
- const QUERY_KEYS = ["status:", "label:", "assignee:", "author:", "milestone:", "feature:"];
17
- /** Terms only a pull request has (spec 04 §4.3), offered only where they work. */
18
- const PR_QUERY_KEYS = ["reviewer:", "review:", "awaiting:"];
19
- /** And the one only an issue has (spec 02 §2.5). */
20
- const ISSUE_QUERY_KEYS = ["deadline:"];
21
- export function cmdComplete(ctx, words) {
22
- for (const candidate of completionsFor(ctx, words))
14
+ export async function cmdComplete(ctx, words, plugins) {
15
+ for (const candidate of await completionsFor(ctx, words, plugins)) {
23
16
  ctx.stdout.write(`${candidate}\n`);
17
+ }
24
18
  }
25
- function completionsFor(ctx, words) {
19
+ async function completionsFor(ctx, words, plugins) {
20
+ // Plugin nouns and verbs come from manifests, so completion costs no import
21
+ // however many plugins are installed (spec 04 §4.3).
22
+ const pluginNouns = [...(plugins?.commands.nouns.keys() ?? [])];
23
+ const rootCommands = [...ROOT_COMMANDS, ...pluginNouns];
26
24
  const [noun, verb] = words;
27
25
  if (noun === undefined)
28
- return ROOT_COMMANDS;
29
- if (noun === "feature")
30
- return featureCompletions(ctx, words);
26
+ return rootCommands;
27
+ if (noun === "plugin")
28
+ return verb === undefined ? PLUGIN_VERBS : [];
29
+ if (plugins?.commands.nouns.has(noun)) {
30
+ const owner = plugins.commands.nouns.get(noun);
31
+ return owner === undefined
32
+ ? []
33
+ : pluginCompletions(ctx, plugins, owner.plugin, owner.spec, words.slice(1));
34
+ }
31
35
  if (noun !== "issue" && noun !== "pr") {
32
- return words.length === 1 ? ROOT_COMMANDS : [];
36
+ return words.length === 1 ? rootCommands : [];
33
37
  }
34
38
  const kind = noun === "issue" ? "issue" : "pr";
35
39
  const verbs = kind === "issue" ? ISSUE_VERBS : PR_VERBS;
@@ -38,8 +42,16 @@ function completionsFor(ctx, words) {
38
42
  if (!verbs.includes(verb))
39
43
  return [];
40
44
  if (verb === "list") {
41
- const keys = kind === "pr" ? [...QUERY_KEYS, ...PR_QUERY_KEYS] : [...QUERY_KEYS, ...ISSUE_QUERY_KEYS];
42
- return [...keys, ...labels(ctx), ...features(ctx)];
45
+ // Only the terms this noun has (spec 04 §4.3), offered only where they
46
+ // work; a plugin's come from its manifest. A plugin's *values* cost an
47
+ // import, and only for a verb whose manifest declared `completions` — so
48
+ // completing `nav pr list` loads nothing when no plugin contributes there.
49
+ return [
50
+ ...queryTermsFor(kind).map((term) => `${term.key}:`),
51
+ ...(plugins?.queryKeys(kind) ?? []).map((key) => `${key.key}:`),
52
+ ...(await pluginListValues(ctx, kind, plugins)),
53
+ ...labels(ctx),
54
+ ];
43
55
  }
44
56
  if (verb === "open")
45
57
  return [];
@@ -47,45 +59,41 @@ function completionsFor(ctx, words) {
47
59
  return words.length === 2 ? entityCandidates(ctx, kind) : [];
48
60
  }
49
61
  /**
50
- * `nav feature …`, whose second word may be a verb or the `spec` group.
62
+ * Verbs a plugin's noun offers, walked down whatever has been typed so far.
51
63
  *
52
- * Slugs are offered wherever one is expected, and document names once the
53
- * feature is known — which is the whole reason completion is written here
54
- * rather than in three shell dialects.
64
+ * Declarations only. A plugin's *values* — the slugs and ids its arguments
65
+ * take — need the plugin itself, and are offered through a completer it
66
+ * registers; those cost an import and are asked for only once the noun and
67
+ * the verb are on the line.
55
68
  */
56
- function featureCompletions(ctx, words) {
57
- const [, verb, third] = words;
58
- if (verb === undefined)
59
- return FEATURE_VERBS;
60
- if (verb === "spec") {
61
- if (third === undefined)
62
- return SPEC_VERBS;
63
- if (!SPEC_VERBS.includes(third))
64
- return [];
65
- if (words.length === 3)
66
- return featureSlugs(ctx);
67
- // `spec edit <slug> <file>` is the one place a document name is wanted.
68
- if (third === "edit" && words.length === 4)
69
- return specNames(ctx, words[3]);
70
- return [];
69
+ async function pluginCompletions(ctx, plugins, plugin, spec, rest) {
70
+ const children = spec.commands ?? [];
71
+ const [next, ...deeper] = rest;
72
+ // Still walking down the verb tree: the names come from the manifest, so
73
+ // nothing is loaded to offer them.
74
+ if (children.length > 0) {
75
+ if (next === undefined)
76
+ return children.map((child) => child.name);
77
+ const child = children.find((candidate) => candidate.name === next);
78
+ return child === undefined ? [] : pluginCompletions(ctx, plugins, plugin, child, deeper);
71
79
  }
72
- if (!FEATURE_VERBS.includes(verb))
73
- return [];
74
- if (verb === "list" || verb === "open")
80
+ // At a leaf. The argument being typed is the one at this position, and it
81
+ // offers values only if the manifest named a completer for it — which is
82
+ // what makes asking the plugin a declared cost rather than a surprise.
83
+ const argument = (spec.arguments ?? [])[rest.length];
84
+ if (argument?.complete === undefined)
75
85
  return [];
76
- return words.length === 2 ? featureSlugs(ctx) : [];
86
+ return plugins.completions(ctx, plugin, argument.complete, [...rest]);
77
87
  }
78
- function specNames(ctx, slug) {
79
- try {
80
- const feature = loadRepo(ctx, { comments: "none" }).featureBySlug.get(slug);
81
- return feature ? feature.specs.map((spec) => spec.fileName) : [];
82
- }
83
- catch {
88
+ /** Values plugins offer for this listing's terms; loads their CLI entries. */
89
+ async function pluginListValues(ctx, kind, plugins) {
90
+ if (plugins === undefined)
84
91
  return [];
92
+ const out = [];
93
+ for (const handlers of await plugins.handlersFor(ctx, `${kind} list`)) {
94
+ out.push(...(handlers.listCompletions?.() ?? []));
85
95
  }
86
- }
87
- function features(ctx) {
88
- return featureSlugs(ctx).map((slug) => `feature:${slug}`);
96
+ return out;
89
97
  }
90
98
  /**
91
99
  * Bare IDs and full directory names, so a user can complete either the short
@@ -1 +1 @@
1
- {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../src/commands/complete.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../src/commands/complete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Producing the text of a new Navbook file, from `-m` or from `$EDITOR`.
3
+ *
4
+ * Both paths end in the same place: a complete file that has been parsed and
5
+ * validated before anything is written into `.navbook/`. The editor buffer is
6
+ * the whole file — frontmatter included — so an author can set the title,
7
+ * labels and body in one pass, and an abort leaves nothing behind.
8
+ */
9
+ import { type ParsedFile, type Problem } from "@navbook/core";
10
+ import type { Ctx } from "../context.ts";
11
+ export interface ComposeOptions {
12
+ /** Text supplied with `-m`; when absent the editor is opened. */
13
+ message?: string;
14
+ /** Name of the scratch buffer inside the git directory. */
15
+ bufferName: string;
16
+ /** Render the complete file from a body. */
17
+ render: (body: string) => string;
18
+ /** Schema check applied to the finished file. */
19
+ validate: (parsed: ParsedFile) => Problem[];
20
+ /** Noun used in error messages, e.g. "issue" or "comment". */
21
+ noun: string;
22
+ /**
23
+ * Accept a file with no body.
24
+ *
25
+ * An issue with no description says nothing, but a feature is named by its
26
+ * title and described by the documents beside it, so an empty summary is a
27
+ * reasonable thing to commit (spec 02 §2.11).
28
+ */
29
+ allowEmptyBody?: boolean;
30
+ }
31
+ export interface Composed {
32
+ content: string;
33
+ parsed: ParsedFile;
34
+ }
35
+ export declare function composeFile(ctx: Ctx, opts: ComposeOptions): Composed;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `nav doctor` — spec 04 §4.3.
3
+ *
4
+ * Doctor enforces the specification, not a house style: hand edits that are
5
+ * unusual but valid must pass. Errors (exit 2) are format violations; warnings
6
+ * (exit 0) are things worth a look that may be perfectly deliberate. Deciding
7
+ * which is which is `core`'s job; deciding what an exit code is, is this file's.
8
+ */
9
+ import type { Ctx } from "../context.ts";
10
+ export interface DoctorOptions {
11
+ staged?: boolean;
12
+ fix?: boolean;
13
+ json?: boolean;
14
+ }
15
+ export declare function cmdDoctor(ctx: Ctx, opts: DoctorOptions): void;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * The verbs issues and pull requests share — spec 04 §4.3.
3
+ *
4
+ * One implementation serves both nouns; the entity kind only selects which
5
+ * collection is searched, which file name is edited, and which words appear in
6
+ * the report. The work itself is in `ops/entity.ts` — what is left here is
7
+ * gathering what the user typed and phrasing what came back.
8
+ */
9
+ import { type CloseInput, type EntityKind, type EntityRecord, type NewCommentInput, type Repo } from "@navbook/core";
10
+ import type { Ctx } from "../context.ts";
11
+ import { type PrWriteOptions } from "./pr-elsewhere.ts";
12
+ export interface GlobalFlags {
13
+ json?: boolean;
14
+ commit?: boolean;
15
+ }
16
+ export interface ExtraColumn {
17
+ header: string;
18
+ value: (entity: EntityRecord) => string;
19
+ /** Shown only when this holds of some entity listed; always, when absent. */
20
+ when?: (entities: readonly EntityRecord[]) => boolean;
21
+ /** Grown to fill the terminal, like `title`, rather than sized to content. */
22
+ flexible?: boolean;
23
+ }
24
+ export interface ListOptions extends GlobalFlags {
25
+ /** One of the orders of spec 02 §2.5; `newest` when nobody asks (§4.2). */
26
+ sort?: string;
27
+ /** Columns appended by PR-specific listings. */
28
+ extraColumns?: ExtraColumn[];
29
+ /** Pre-collected entities, used by `nav pr list --all-refs`. */
30
+ entities?: EntityRecord[];
31
+ /** Extra JSON keys per entity, keyed by entity identity. */
32
+ jsonExtra?: (entity: EntityRecord) => Record<string, unknown>;
33
+ }
34
+ export declare function cmdList(ctx: Ctx, kind: EntityKind, terms: string[], opts: ListOptions): void;
35
+ /** Render a listing whose entities have already been collected. */
36
+ export declare function reportList(ctx: Ctx, kind: EntityKind, matched: readonly EntityRecord[], opts: ListOptions): void;
37
+ export interface ShowOptions extends GlobalFlags {
38
+ /** Levels of subtasks to render; issue-only, one by default. */
39
+ depth?: number;
40
+ /** Extra JSON keys, merged into the `--json` object (spec 02 §2.12). */
41
+ jsonExtra?: (entity: EntityRecord) => Record<string, unknown>;
42
+ /** Sections plugins append after the built-in detail. */
43
+ sections?: ((entity: EntityRecord, repo: Repo) => string[])[];
44
+ }
45
+ export declare function cmdShow(ctx: Ctx, kind: EntityKind, prefix: string, opts: ShowOptions): void;
46
+ export interface EditOptions extends GlobalFlags, PrWriteOptions {
47
+ }
48
+ export declare function cmdEdit(ctx: Ctx, kind: EntityKind, prefix: string, opts: EditOptions): void;
49
+ export interface CommentOptions extends GlobalFlags, PrWriteOptions {
50
+ message?: string;
51
+ replyTo?: string;
52
+ /** Review fields, supplied by `nav pr review`. */
53
+ review?: Pick<NewCommentInput, "verdict" | "revision" | "file" | "line">;
54
+ }
55
+ export declare function cmdComment(ctx: Ctx, kind: EntityKind, prefix: string, opts: CommentOptions): void;
56
+ export interface CloseOptions extends GlobalFlags, CloseInput {
57
+ }
58
+ export declare function cmdClose(ctx: Ctx, kind: EntityKind, prefix: string, opts: CloseOptions): void;
59
+ export declare function cmdReopen(ctx: Ctx, kind: EntityKind, prefix: string, opts: GlobalFlags): void;
60
+ export interface DeleteCommandOptions extends GlobalFlags {
61
+ force?: boolean;
62
+ /** Take the issue's subtasks with it, to any depth; issue-only. */
63
+ recursive?: boolean;
64
+ }
65
+ /**
66
+ * Remove an entity's directory — spec 04 §4.3.
67
+ *
68
+ * Closing records how work ended; deleting says it should never have been
69
+ * filed. Whatever git already holds can be recovered from history, so the
70
+ * command only stops to ask when it would destroy something git could not give
71
+ * back.
72
+ */
73
+ export declare function cmdDelete(ctx: Ctx, kind: EntityKind, prefix: string, opts: DeleteCommandOptions): void;
@@ -6,15 +6,16 @@
6
6
  * the report. The work itself is in `ops/entity.ts` — what is left here is
7
7
  * gathering what the user typed and phrasing what came back.
8
8
  */
9
- import { absPath, applyComment, applyEntityEdit, closeEntity, commentJson, commitReport, currentAuthor, entityJson, executeEntityDelete, findEntity, findPrToWrite, listEntities, loadRepo, newCommentFile, parentNode, parseListQuery, planEntityDelete, readAssignees, readDeadline, readLabels, readPr, readRank, reopenEntity, resolveComment, resolveEntity, revalidateEntityFile, reviewSummary, subtaskTree, toNdjson, uncommittedUnder, validateComment, } from "@navbook/core";
9
+ import { absPath, applyComment, applyEntityEdit, closeEntity, commentJson, commitReport, currentAuthor, entityJson, executeEntityDelete, findEntity, listEntities, loadRepo, newCommentFile, parentNode, parseListQuery, planEntityDelete, readAssignees, readDeadline, readLabels, readPr, readRank, reopenEntity, resolveComment, resolveEntity, revalidateEntityFile, reviewSummary, subtaskTree, toNdjson, uncommittedUnder, validateComment, } from "@navbook/core";
10
10
  import { openInEditor } from "../editor.js";
11
11
  import { fail } from "../errors.js";
12
12
  import { askYesNo } from "../prompt.js";
13
13
  import { renderDetail } from "../render/detail.js";
14
- import { renderTable } from "../render/table.js";
14
+ import { renderTable, terminalWidth } from "../render/table.js";
15
15
  import { parseSortOrder, sortListing } from "../sort.js";
16
16
  import { composeFile } from "./compose.js";
17
17
  import { warnPolicyProblems } from "./policy.js";
18
+ import { withPrWriteSite } from "./pr-elsewhere.js";
18
19
  const PLURAL = { issue: "issues", pr: "pull requests" };
19
20
  export function cmdList(ctx, kind, terms, opts) {
20
21
  const query = parseListQuery(ctx, terms, kind);
@@ -85,11 +86,7 @@ function renderList(ctx, entities, extra) {
85
86
  values.push((e) => readDeadline(e.fm) ?? "");
86
87
  }
87
88
  const rows = entities.map((entity) => values.map((value) => value(entity)));
88
- return renderTable(columns, rows, { colors: ctx.colors, width: terminalWidth(ctx) });
89
- }
90
- function terminalWidth(ctx) {
91
- const columns = ctx.stdout.columns;
92
- return typeof columns === "number" && columns > 20 ? columns : undefined;
89
+ return renderTable(columns, rows, { colors: ctx.colors, width: terminalWidth(ctx.stdout) });
93
90
  }
94
91
  export function cmdShow(ctx, kind, prefix, opts) {
95
92
  const repo = loadRepo(ctx);
@@ -108,6 +105,10 @@ export function cmdShow(ctx, kind, prefix, opts) {
108
105
  // §2.7, and it is here rather than in `list` because `show` is the command
109
106
  // that has already read every comment it is computed from.
110
107
  ctx.stdout.write(`${JSON.stringify(entityJson(ctx.navDir, entity, {
108
+ // A plugin's keys first, so the ones `show` adds below win over
109
+ // them. The entity's own keys it cannot name at all: those are
110
+ // dropped where the contributions are merged (`mergedJsonExtra`).
111
+ ...(opts.jsonExtra?.(entity) ?? {}),
111
112
  ...(kind === "pr"
112
113
  ? {
113
114
  ...(ref === null ? {} : { refs: [ref] }),
@@ -124,8 +125,6 @@ export function cmdShow(ctx, kind, prefix, opts) {
124
125
  return;
125
126
  }
126
127
  const depth = opts.depth ?? 1;
127
- if (!Number.isInteger(depth) || depth < 0)
128
- fail("--depth takes a whole number of levels");
129
128
  // To stderr, so the detail itself reads the same wherever it came from.
130
129
  if (ref !== null) {
131
130
  ctx.stderr.write(`${ctx.colors.dim(`read from '${ref}'; this checkout does not hold #${entity.id}`)}\n`);
@@ -139,49 +138,65 @@ export function cmdShow(ctx, kind, prefix, opts) {
139
138
  }
140
139
  : { reviewPolicy: reading }),
141
140
  })}\n`);
141
+ // After the detail rather than woven into it: a plugin's section is its own
142
+ // to lay out, and one that could interleave with the built-in fields would
143
+ // make the rendering depend on which plugins are installed.
144
+ for (const section of opts.sections ?? []) {
145
+ const lines = section(entity, repo);
146
+ if (lines.length > 0)
147
+ ctx.stdout.write(`\n${lines.join("\n")}\n`);
148
+ }
142
149
  }
143
- /* --------------------------------------------------------------------- edit */
144
150
  export function cmdEdit(ctx, kind, prefix, opts) {
145
- const entity = writeTarget(ctx, kind, prefix);
146
- const path = absPath(ctx, entity.filePath);
147
- openInEditor(ctx, path);
148
- for (const problem of revalidateEntityFile(path, kind)) {
149
- ctx.stderr.write(`${ctx.colors.yellow("warning:")} ${entity.filePath}: ${problem}\n`);
150
- }
151
- const result = applyEntityEdit(ctx, entity, { commit: opts.commit });
152
- ctx.stdout.write(`Edited #${entity.id} ${ctx.navDir}/${entity.filePath}\n`);
153
- if (opts.commit)
154
- ctx.stdout.write(`${commitReport(result)}\n`);
151
+ withWriteTarget(ctx, kind, prefix, opts, (at, entity) => {
152
+ const path = absPath(at, entity.filePath);
153
+ openInEditor(at, path);
154
+ for (const problem of revalidateEntityFile(at, path, kind)) {
155
+ ctx.stderr.write(`${ctx.colors.yellow("warning:")} ${entity.filePath}: ${problem}\n`);
156
+ }
157
+ const result = applyEntityEdit(at, entity, { commit: opts.commit });
158
+ ctx.stdout.write(`Edited #${entity.id} ${at.navDir}/${entity.filePath}\n`);
159
+ if (opts.commit)
160
+ ctx.stdout.write(`${commitReport(result)}\n`);
161
+ });
155
162
  }
156
163
  export function cmdComment(ctx, kind, prefix, opts) {
157
- const entity = writeTarget(ctx, kind, prefix);
158
- const replyTo = opts.replyTo ? resolveComment(entity, opts.replyTo) : undefined;
159
- const isReview = opts.review?.verdict !== undefined;
160
- const noun = isReview ? "review" : "comment";
161
- const base = {
162
- author: currentAuthor(ctx),
163
- body: "",
164
- ...(replyTo ? { replyTo } : {}),
165
- ...(opts.review ?? {}),
166
- };
167
- const composed = composeFile(ctx, {
168
- message: opts.message,
169
- bufferName: "NAVBOOK_COMMENT.md",
170
- noun,
171
- render: (body) => newCommentFile({ ...base, body }),
172
- validate: (parsed) => validateComment(parsed, { onPr: kind === "pr" }),
164
+ withWriteTarget(ctx, kind, prefix, opts, (at, entity) => {
165
+ const replyTo = opts.replyTo ? resolveComment(entity, opts.replyTo) : undefined;
166
+ const isReview = opts.review?.verdict !== undefined;
167
+ const noun = isReview ? "review" : "comment";
168
+ const base = {
169
+ author: currentAuthor(at),
170
+ body: "",
171
+ ...(replyTo ? { replyTo } : {}),
172
+ ...(opts.review ?? {}),
173
+ };
174
+ const composed = composeFile(ctx, {
175
+ message: opts.message,
176
+ bufferName: "NAVBOOK_COMMENT.md",
177
+ noun,
178
+ render: (body) => newCommentFile({ ...base, body }),
179
+ validate: (parsed) => validateComment(parsed, { onPr: kind === "pr" }),
180
+ });
181
+ const { id, path, run } = applyComment(at, entity, { content: composed.content, review: isReview }, { commit: opts.commit });
182
+ ctx.stdout.write(`${isReview ? "Reviewed" : "Commented on"} #${entity.id} ${at.navDir}/${path} (#${id})\n`);
183
+ if (opts.commit)
184
+ ctx.stdout.write(`${commitReport(run)}\n`);
173
185
  });
174
- const { id, path, run } = applyComment(ctx, entity, { content: composed.content, review: isReview }, { commit: opts.commit });
175
- ctx.stdout.write(`${isReview ? "Reviewed" : "Commented on"} #${entity.id} ${ctx.navDir}/${path} (#${id})\n`);
176
- if (opts.commit)
177
- ctx.stdout.write(`${commitReport(run)}\n`);
178
186
  }
179
187
  /**
180
- * The entity a verb writes into. A pull request that only another branch holds
181
- * is refused with where it lives, rather than reported as not existing.
188
+ * Run a write against the entity it names, in the checkout it belongs in.
189
+ *
190
+ * An issue is written here. A pull request that only another branch holds
191
+ * cannot be: the write moves to a worktree on that branch when somebody agrees
192
+ * to it, and otherwise this is core's refusal naming where it lives, rather
193
+ * than a report that it does not exist.
182
194
  */
183
- function writeTarget(ctx, kind, prefix) {
184
- return kind === "pr" ? findPrToWrite(ctx, prefix) : findEntity(ctx, kind, prefix);
195
+ function withWriteTarget(ctx, kind, prefix, opts, write) {
196
+ if (kind === "pr")
197
+ withPrWriteSite(ctx, prefix, opts, write);
198
+ else
199
+ write(ctx, findEntity(ctx, kind, prefix));
185
200
  }
186
201
  export function cmdClose(ctx, kind, prefix, opts) {
187
202
  const { entity, destination, run } = closeEntity(ctx, kind, prefix, opts, {
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/commands/entity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,OAAO,EACP,YAAY,EACZ,eAAe,EAEf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EAIb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,YAAY,EACZ,QAAQ,EAER,cAAc,EACd,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAe,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAOjD,MAAM,MAAM,GAA+B,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC;AAwBpF,MAAM,UAAU,OAAO,CAAC,GAAQ,EAAE,IAAgB,EAAE,KAAe,EAAE,IAAiB;IACpF,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;QAC7C,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC,CAAC;IACH,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,OAAgC,EAAE,IAAiB;IAClE,OAAO,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,UAAU,CACxB,GAAQ,EACR,IAAgB,EAChB,OAAgC,EAChC,IAAiB;IAEjB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACrC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAC/D,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,UAAU,CACjB,GAAQ,EACR,QAAiC,EACjC,KAA6B;IAE7B,MAAM,OAAO,GAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAAyC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1F,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QACpD,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,4EAA4E;IAC5E,iEAAiE;IACjE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,aAAa,CAAC,GAAQ;IAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IACnC,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AASD,MAAM,UAAU,OAAO,CAAC,GAAQ,EAAE,IAAgB,EAAE,MAAc,EAAE,IAAiB;IACnF,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GACnB,IAAI,KAAK,IAAI;QACX,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC;QAC3B,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;IAClC,IAAI,IAAI,KAAK,IAAI;QAAE,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,sEAAsE;QACtE,uEAAuE;QACvE,0EAA0E;QAC1E,2EAA2E;QAC3E,2DAA2D;QAC3D,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,GAAG,IAAI,CAAC,SAAS,CACf,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE;YAC7B,GAAG,CAAC,IAAI,KAAK,IAAI;gBACf,CAAC,CAAC;oBACE,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;oBAC7C,YAAY,EAAE;wBACZ,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU;wBACrC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY;wBACzC,QAAQ,EAAE,OAAO,CAAC,QAAQ;qBAC3B;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SAC7E,CAAC,CACH,IAAI,CACN,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAC1F,wEAAwE;IACxE,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,GAAG,mCAAmC,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CACvF,CAAC;IACJ,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,GAAG,YAAY,CAAC,MAAM,EAAE;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,GAAG,CAAC,IAAI,KAAK,OAAO;YAClB,CAAC,CAAC;gBACE,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;aACxF;YACH,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;KAC/B,CAAC,IAAI,CACP,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,MAAM,UAAU,OAAO,CAAC,GAAQ,EAAE,IAAgB,EAAE,MAAc,EAAE,IAAiB;IACnF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAExB,KAAK,MAAM,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC7E,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAWD,MAAM,UAAU,UAAU,CAAC,GAAQ,EAAE,IAAgB,EAAE,MAAc,EAAE,IAAoB;IACzF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7C,MAAM,IAAI,GAAoB;QAC5B,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;QAC1B,IAAI,EAAE,EAAE;QACR,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;KACvB,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,UAAU,EAAE,oBAAoB;QAChC,IAAI;QACJ,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;QACnD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC;KACvE,CAAC,CAAC;IAEH,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,YAAY,CACpC,GAAG,EACH,MAAM,EACN,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAC/C,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CACxB,CAAC;IAEF,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,KAAK,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,IAAI,IAAI,OAAO,EAAE,KAAK,CAC7F,CAAC;IACF,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,GAAQ,EAAE,IAAgB,EAAE,MAAc;IAC7D,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACpF,CAAC;AAMD,MAAM,UAAU,QAAQ,CAAC,GAAQ,EAAE,IAAgB,EAAE,MAAc,EAAE,IAAkB;IACrF,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QACxE,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IACH,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,IAAI,WAAW,KAAK,CAAC,CAAC;IAC1E,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAQ,EAAE,IAAgB,EAAE,MAAc,EAAE,IAAiB;IACrF,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9F,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,IAAI,WAAW,KAAK,CAAC,CAAC;IAC5E,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CACvB,GAAQ,EACR,IAAgB,EAChB,MAAc,EACd,IAA0B;IAE1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;QACnD,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;IACnD,yEAAyE;IACzE,qEAAqE;IACrE,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE7E,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;IAC9E,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;IAChF,CAAC;IACD,0EAA0E;IAC1E,6DAA6D;IAC7D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,yCAAyC,CAAC,CAAC;QAC9E,KAAK,MAAM,KAAK,IAAI,QAAQ;YAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,4DAA4D;AAC5D,SAAS,WAAW,CAAC,GAAQ,EAAE,QAA0B,EAAE,WAA8B;IACvF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACrC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;IACzC,MAAM,IAAI,GACR,WAAW,CAAC,MAAM,KAAK,CAAC;QACtB,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,EAAE;QACjB,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,YAAY,WAAW,CAAC,MAAM,aAAa,CAAC;IAE/D,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,GAAG,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,oCAAoC,CACzF,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,WAAW;QAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAClE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC7F,MAAM,MAAM,GACV,WAAW,CAAC,MAAM,KAAK,CAAC;QACtB,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,GAAG;QACpC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,SAAS,WAAW,CAAC,MAAM,OAAO,CAAC;IACxE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,MAAM,iBAAiB,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/commands/entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `nav init` and `nav id` — the repository-level utilities of spec 04 §4.3.
3
+ */
4
+ import type { Ctx } from "../context.ts";
5
+ import type { GlobalFlags } from "./entity.ts";
6
+ /** Create the Navbook skeleton. */
7
+ export declare function cmdInit(ctx: Ctx, opts: GlobalFlags): void;
8
+ /** Mint and print fresh IDs, for hand-editors and scripts. */
9
+ export declare function cmdId(ctx: Ctx, opts: {
10
+ count?: number;
11
+ }): void;