@navbook/cli 0.3.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 +28 -2
  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 +132 -68
  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 +353 -114
  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
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `nav install` / `nav uninstall` — spec 04 §4.1, §4.3, §4.5.
3
+ *
4
+ * Everything that touches the user's environment lives here, and nothing
5
+ * happens without printing the exact action first: the `git config` command to
6
+ * be run, the hook path, the completions file.
7
+ */
8
+ import type { Ctx } from "../context.ts";
9
+ export interface InstallOptions {
10
+ alias?: string | boolean;
11
+ hooks?: boolean;
12
+ completions?: string | boolean;
13
+ mergeConfig?: boolean;
14
+ yes?: boolean;
15
+ }
16
+ export declare function cmdInstall(ctx: Ctx, opts: InstallOptions): void;
17
+ export declare function cmdUninstall(ctx: Ctx, opts: InstallOptions): void;
@@ -8,7 +8,7 @@
8
8
  import { ALIAS_DEFAULT, aliasCommand, DIRECTORY_RENAMES_KEY, git, readGlobal, readLocal, setLocal, unsetGlobal, unsetLocal, } from "@navbook/core";
9
9
  import { fail } from "../errors.js";
10
10
  import { completionNote, completionPath, completionScript, detectShell, installCompletions, isShell, uninstallCompletions, } from "../install/completions.js";
11
- import { hookPath, installHook, isInstalled, uninstallHook } from "../install/hook.js";
11
+ import { hookPath, hookState, installHook, isInstalled, uninstallHook } from "../install/hook.js";
12
12
  import { confirmAndPerform } from "../prompt.js";
13
13
  /** True when the user asked for specific pieces rather than "everything". */
14
14
  function isSelective(opts) {
@@ -65,12 +65,15 @@ export function cmdInstall(ctx, opts) {
65
65
  }
66
66
  }
67
67
  if (!selective || opts.hooks !== undefined) {
68
- if (isInstalled(ctx.repoRoot)) {
68
+ const state = hookState(ctx.repoRoot);
69
+ if (state === "current") {
69
70
  notes.push("the pre-commit hook is already installed");
70
71
  }
71
72
  else {
72
73
  actions.push({
73
- description: `append the navbook block to ${hookPath(ctx.repoRoot)}`,
74
+ description: state === "outdated"
75
+ ? `update the navbook block in ${hookPath(ctx.repoRoot)} to this nav's`
76
+ : `append the navbook block to ${hookPath(ctx.repoRoot)}`,
74
77
  perform: () => installHook(ctx.repoRoot),
75
78
  });
76
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * `nav issue <verb>` — spec 04 §4.3.
3
+ */
4
+ import type { Ctx } from "../context.ts";
5
+ import type { GlobalFlags } from "./entity.ts";
6
+ export interface IssueOpenOptions extends GlobalFlags {
7
+ message?: string;
8
+ label?: string[];
9
+ assignee?: string[];
10
+ milestone?: string;
11
+ rank?: number;
12
+ deadline?: string;
13
+ parent?: string;
14
+ /**
15
+ * Frontmatter a plugin contributed, from an option it declared (§2.12).
16
+ *
17
+ * Written by the same composer that writes the format's own keys, so a
18
+ * plugin's value lands in the file exactly as a built-in one would.
19
+ */
20
+ ext?: Record<string, string | readonly string[]>;
21
+ }
22
+ export declare function cmdIssueOpen(ctx: Ctx, title: string, opts: IssueOpenOptions): void;
23
+ export interface IssueLinkOptions extends GlobalFlags {
24
+ parent: string;
25
+ force?: boolean;
26
+ }
27
+ /**
28
+ * File one issue under another — spec 04 §4.3.
29
+ *
30
+ * An issue that already has a parent is being moved, not merely linked, and
31
+ * that changes a structure somebody else may be reading, so it is confirmed
32
+ * first. As everywhere else, an unanswerable question counts as "no".
33
+ */
34
+ export declare function cmdIssueLink(ctx: Ctx, prefix: string, opts: IssueLinkOptions): void;
35
+ export declare function cmdIssueUnlink(ctx: Ctx, prefix: string, opts: GlobalFlags): void;
@@ -10,9 +10,8 @@ export function cmdIssueOpen(ctx, title, opts) {
10
10
  fail("an issue needs a title");
11
11
  // Refused here rather than left to the file's own validation, for the reason
12
12
  // `--parent` is resolved here: being told a flag will not do is worth much
13
- // more before an editor has been filled in than after.
14
- if (opts.rank !== undefined && !Number.isFinite(opts.rank))
15
- fail("--rank must be a number");
13
+ // more before an editor has been filled in than after. `--rank` is refused
14
+ // earlier still, by its parser (args.ts).
16
15
  if (opts.deadline !== undefined && !isCalendarDate(opts.deadline)) {
17
16
  fail("--deadline must be a calendar date, as YYYY-MM-DD");
18
17
  }
@@ -32,12 +31,12 @@ export function cmdIssueOpen(ctx, title, opts) {
32
31
  labels: opts.label,
33
32
  assignee: opts.assignee,
34
33
  milestone: opts.milestone,
35
- features: opts.feature,
34
+ ...(opts.ext ? { ext: opts.ext } : {}),
36
35
  rank: opts.rank,
37
36
  deadline: opts.deadline,
38
37
  parent: parent?.id,
39
38
  }),
40
- validate: validateIssue,
39
+ validate: (parsed) => validateIssue(parsed, ctx.ext),
41
40
  });
42
41
  const result = openIssue(ctx, { content: composed.content, fallbackTitle: title }, { commit: opts.commit });
43
42
  const { id, dirPath, run } = result;
@@ -1 +1 @@
1
- {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * `nav plugin install | remove | update | list` — spec 04 §4.3.
3
+ *
4
+ * The verbs that put a plugin on a machine, and the one place in Navbook that
5
+ * fetches anything. Two rules shape all of it:
6
+ *
7
+ * - **Installing is explicit.** `install` with no argument reads the
8
+ * repository's declaration and offers to install what is missing; it never
9
+ * acts on it without being told. The declaration says what a tree contains,
10
+ * not what this machine should run.
11
+ * - **What arrives is checked.** npm will happily install any package by that
12
+ * name. Before a package is recorded as a plugin, its name, its keyword and
13
+ * its manifest are checked, and a package that fails is uninstalled again
14
+ * rather than left in a store that claims it is a plugin.
15
+ */
16
+ import type { Ctx } from "../context.ts";
17
+ import { type IndexedPlugin } from "../plugins/store.ts";
18
+ export interface PluginInstallOptions {
19
+ yes?: boolean;
20
+ }
21
+ export interface PluginListOptions {
22
+ json?: boolean;
23
+ }
24
+ /**
25
+ * Install plugins, or the ones the repository declares and this machine lacks.
26
+ *
27
+ * The npm command is printed before it runs, so what the user agrees to is the
28
+ * command rather than a summary of it — the `nav install` rule (spec 04 §4.3).
29
+ */
30
+ export declare function cmdPluginInstall(ctx: Ctx, names: string[], opts: PluginInstallOptions): void;
31
+ export declare function cmdPluginRemove(ctx: Ctx, names: string[], opts: PluginInstallOptions): void;
32
+ export declare function cmdPluginUpdate(ctx: Ctx, names: string[], opts: PluginInstallOptions): void;
33
+ export declare function cmdPluginList(ctx: Ctx, opts: PluginListOptions): void;
34
+ /** Names in the store's `node_modules`, for a caller that wants to look. */
35
+ export declare function installedNames(env: NodeJS.ProcessEnv): string[];
36
+ export type { IndexedPlugin };
@@ -0,0 +1,386 @@
1
+ /**
2
+ * `nav plugin install | remove | update | list` — spec 04 §4.3.
3
+ *
4
+ * The verbs that put a plugin on a machine, and the one place in Navbook that
5
+ * fetches anything. Two rules shape all of it:
6
+ *
7
+ * - **Installing is explicit.** `install` with no argument reads the
8
+ * repository's declaration and offers to install what is missing; it never
9
+ * acts on it without being told. The declaration says what a tree contains,
10
+ * not what this machine should run.
11
+ * - **What arrives is checked.** npm will happily install any package by that
12
+ * name. Before a package is recorded as a plugin, its name, its keyword and
13
+ * its manifest are checked, and a package that fails is uninstalled again
14
+ * rather than left in a store that claims it is a plugin.
15
+ */
16
+ import { readdirSync, readFileSync } from "node:fs";
17
+ import { join, resolve } from "node:path";
18
+ import { expandPluginName, hasPluginKeyword, isPluginPackageName } from "@navbook/core";
19
+ import { fail } from "../errors.js";
20
+ import { resolvePlugins } from "../plugins/resolve.js";
21
+ import { installCommand, npmInstall, npmRemove, packageDir, readIndex, readPluginAt, storeDependencies, storeDir, writeIndex, } from "../plugins/store.js";
22
+ import { confirmAndPerform } from "../prompt.js";
23
+ /**
24
+ * Install plugins, or the ones the repository declares and this machine lacks.
25
+ *
26
+ * The npm command is printed before it runs, so what the user agrees to is the
27
+ * command rather than a summary of it — the `nav install` rule (spec 04 §4.3).
28
+ */
29
+ export function cmdPluginInstall(ctx, names, opts) {
30
+ const choices = names.length > 0 ? names.map((name) => resolveName(ctx, name)) : declared(ctx).map((n) => [n]);
31
+ const wanted = choices.flat();
32
+ if (wanted.length === 0) {
33
+ ctx.stdout.write(ctx.hasNavbook
34
+ ? "Nothing to do: every plugin this repository declares is installed.\n"
35
+ : "Nothing to do: name a plugin to install.\n");
36
+ return;
37
+ }
38
+ // What the store held before npm ran. Comparing it with what it holds after
39
+ // is the only reliable account of what this install changed: a typed spec
40
+ // is not a directory name (`@navbook/plugin-kb@2.0.0`, a tarball, a folder),
41
+ // and a new version of a plugin already installed adds no new name.
42
+ const before = storeDependencies(ctx.env);
43
+ // The specs npm was actually given: a short name's fallback only when the
44
+ // first name was not found, so a plugin installed long ago under the other
45
+ // name is not reported as installed by this run.
46
+ const ran = [];
47
+ const agreed = confirmAndPerform(ctx, {
48
+ title: "nav plugin install will:",
49
+ actions: installActions(ctx, choices, ran),
50
+ assumeYes: opts.yes,
51
+ });
52
+ if (!agreed)
53
+ return;
54
+ const index = readIndex(ctx.env) ?? { version: 1, plugins: {} };
55
+ // What npm actually installed, by its real name: every dependency this run
56
+ // added or changed, plus any it left as it was but was asked for by name or
57
+ // path (a reinstall of the same version, or of a folder rebuilt in place).
58
+ // Only those: the store's manifest lists everything it has, and reporting a
59
+ // plugin installed months ago as installed now would be a lie in the output
60
+ // of a command that installed something else.
61
+ const after = storeDependencies(ctx.env);
62
+ const resolved = new Set(Object.entries(after)
63
+ .filter(([name, saved]) => before[name] !== saved || ran.some((spec) => asksFor(ctx, spec, name, saved)))
64
+ .map(([name]) => name));
65
+ const kept = [];
66
+ const rejected = [];
67
+ for (const name of resolved) {
68
+ const problem = record(ctx, index, name);
69
+ if (problem === null)
70
+ kept.push(name);
71
+ else {
72
+ rejected.push(name);
73
+ ctx.stderr.write(`nav: ${problem}\n`);
74
+ }
75
+ }
76
+ if (rejected.length > 0) {
77
+ // A package that is not a plugin must not be left in the store looking
78
+ // like one. Removing it is the only way `nav plugin list` stays truthful —
79
+ // and that includes the index entry of a plugin it replaced.
80
+ npmRemove(ctx.env, rejected);
81
+ for (const name of rejected)
82
+ delete index.plugins[name];
83
+ }
84
+ writeIndex(ctx.env, index);
85
+ for (const name of kept) {
86
+ const plugin = index.plugins[name];
87
+ ctx.stdout.write(`Installed ${name}@${plugin?.version ?? "?"}\n`);
88
+ }
89
+ if (kept.length > 0 && ctx.hasNavbook) {
90
+ const undeclaredNow = kept.filter((name) => !isDeclared(ctx, name));
91
+ for (const name of undeclaredNow) {
92
+ ctx.stdout.write(`Note: ${ctx.navDir}/navbook.json does not declare ${name}; add it so every clone knows.\n`);
93
+ }
94
+ }
95
+ if (kept.length === 0)
96
+ fail("nothing was installed");
97
+ }
98
+ /**
99
+ * The npm runs an install takes: one for every spec that means exactly one
100
+ * package, and one per short name, which falls back to its second expansion.
101
+ *
102
+ * A short name means `@navbook/plugin-<name>` or else `navbook-plugin-<name>`
103
+ * (spec 04 §4.3), and only the registry knows which exists. Asking it before
104
+ * the user has agreed would be a network call nobody consented to, so the
105
+ * fallback happens inside the agreed action — and the confirmation says so,
106
+ * naming both commands, so what runs is still what was shown.
107
+ */
108
+ function installActions(ctx, choices, ran) {
109
+ const exact = choices.filter((specs) => specs.length === 1).flat();
110
+ const actions = [];
111
+ if (exact.length > 0) {
112
+ actions.push({
113
+ description: `run ${installCommand(exact)}`,
114
+ perform: () => {
115
+ ran.push(...exact);
116
+ const result = npmInstall(ctx.env, exact);
117
+ if (!result.ok)
118
+ fail("npm could not install the plugin", result.output.split("\n"));
119
+ },
120
+ });
121
+ }
122
+ for (const [first, second] of choices.filter((specs) => specs.length > 1)) {
123
+ const primary = first;
124
+ const fallback = second;
125
+ actions.push({
126
+ description: `run ${installCommand([primary])}, or ${installCommand([fallback])} if npm has no ${packageNameOf(primary)}`,
127
+ perform: () => {
128
+ ran.push(primary);
129
+ const tried = npmInstall(ctx.env, [primary]);
130
+ if (tried.ok)
131
+ return;
132
+ // Only a package that does not exist sends npm to the other name: any
133
+ // other failure (the network, a broken tarball) would fail the same
134
+ // way twice, and hiding the first behind the second helps nobody.
135
+ if (!isNotFound(tried.output, packageNameOf(primary))) {
136
+ fail("npm could not install the plugin", tried.output.split("\n"));
137
+ }
138
+ ran.push(fallback);
139
+ const result = npmInstall(ctx.env, [fallback]);
140
+ if (!result.ok) {
141
+ fail(`npm has neither ${packageNameOf(primary)} nor ${packageNameOf(fallback)}`, [
142
+ ...result.output.split("\n"),
143
+ ]);
144
+ }
145
+ },
146
+ });
147
+ }
148
+ return actions;
149
+ }
150
+ /**
151
+ * Whether npm failed because the registry has no package by this name — not
152
+ * because the package exists and one of its own dependencies does not.
153
+ */
154
+ function isNotFound(output, name) {
155
+ if (!/\bE404\b|\b404 Not Found\b/.test(output))
156
+ return false;
157
+ // The name itself, as npm writes it — `'@scope/name@*'`, or URL-encoded in
158
+ // the GET line — and not merely a dependency whose name begins with it.
159
+ const literal = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
160
+ return [name, name.replace("/", "%2f"), name.replace("/", "%2F")].some((form) => new RegExp(`(^|[/'\\s])${literal(form)}(?=[@'\\s]|$)`, "m").test(output));
161
+ }
162
+ /** Check what npm fetched, and record it in the index. Returns a fault, or null. */
163
+ function record(ctx, index, name) {
164
+ const dir = packageDir(ctx.env, name);
165
+ const read = readPluginAt(dir);
166
+ if ("error" in read)
167
+ return read.error;
168
+ if (!isPluginPackageName(read.name)) {
169
+ return `${read.name} is not named as a plugin (spec 04 §4.3)`;
170
+ }
171
+ if (!hasKeyword(dir)) {
172
+ return `${read.name} does not carry the 'navbook-plugin' keyword`;
173
+ }
174
+ index.plugins[read.name] = read;
175
+ return null;
176
+ }
177
+ function hasKeyword(dir) {
178
+ try {
179
+ return hasPluginKeyword(JSON.parse(readFileSync(join(dir, "package.json"), "utf8")));
180
+ }
181
+ catch {
182
+ return false;
183
+ }
184
+ }
185
+ /**
186
+ * Whether a spec the user typed names the package npm saved as `name`.
187
+ *
188
+ * A registry spec names it by its package name, with or without a version or
189
+ * tag. A local one names it by where it is, which npm saves as a `file:` path
190
+ * relative to the store; a git URL is saved as typed.
191
+ */
192
+ function asksFor(ctx, spec, name, saved) {
193
+ if (!looksLocal(spec))
194
+ return packageNameOf(spec) === name;
195
+ if (hasScheme(spec) || !saved.startsWith("file:"))
196
+ return saved === spec;
197
+ const typed = spec.startsWith("file:") ? spec.slice("file:".length) : spec;
198
+ return resolve(storeDir(ctx.env), saved.slice("file:".length)) === resolve(ctx.cwd, typed);
199
+ }
200
+ /** The package name in a registry spec: `@scope/name@^2` is `@scope/name`. */
201
+ function packageNameOf(spec) {
202
+ const at = spec.indexOf("@", spec.startsWith("@") ? 1 : 0);
203
+ return at === -1 ? spec : spec.slice(0, at);
204
+ }
205
+ /**
206
+ * Expand what was typed to the specs it may mean, in the order to try them,
207
+ * refusing a name that is not a plugin's.
208
+ */
209
+ function resolveName(ctx, name) {
210
+ // npm runs in the store, so a relative path must be made absolute here or
211
+ // npm would look for it there rather than where the user typed it.
212
+ if (looksLocal(name) && !hasScheme(name)) {
213
+ const path = name.startsWith("file:") ? name.slice("file:".length) : name;
214
+ return [resolve(ctx.cwd, path)];
215
+ }
216
+ // A URL is npm's to fetch as typed; what it turns out to be is checked by
217
+ // name and keyword once it is in the store, as a folder or a tarball is.
218
+ if (hasScheme(name))
219
+ return [name];
220
+ // The name is checked without its version or tag, which npm takes as typed:
221
+ // `kb@^2` is `@navbook/plugin-kb@^2`, then `navbook-plugin-kb@^2`.
222
+ const base = packageNameOf(name);
223
+ const version = name.slice(base.length);
224
+ const candidates = expandPluginName(base);
225
+ const only = candidates[0];
226
+ if (candidates.length === 1) {
227
+ if (!isPluginPackageName(only)) {
228
+ fail(`${only} is not named as a plugin`, [
229
+ "a plugin is @navbook/plugin-<name>, navbook-plugin-<name>, or @scope/navbook-plugin-<name>",
230
+ ]);
231
+ }
232
+ return [`${only}${version}`];
233
+ }
234
+ // A short name: which of the candidates exists is npm's to find out, inside
235
+ // the action the user agreed to (see `installActions`).
236
+ return candidates.map((candidate) => `${candidate}${version}`);
237
+ }
238
+ /**
239
+ * True for a URL — `https:`, `git+ssh:` — which npm fetches as typed. `file:`
240
+ * is the one scheme that names a path here, and is made absolute like one.
241
+ */
242
+ function hasScheme(spec) {
243
+ return /^[a-z][a-z0-9+.-]*:/i.test(spec) && !spec.startsWith("file:");
244
+ }
245
+ /** True for a specifier npm reads as a path or a URL rather than a package name. */
246
+ function looksLocal(spec) {
247
+ return (spec.startsWith(".") ||
248
+ spec.startsWith("/") ||
249
+ spec.startsWith("file:") ||
250
+ spec.startsWith("git+") ||
251
+ spec.endsWith(".tgz"));
252
+ }
253
+ /** The declared plugins this machine does not have. */
254
+ function declared(ctx) {
255
+ if (!ctx.hasNavbook)
256
+ return [];
257
+ return resolvePlugins(ctx, ctx.env).missing;
258
+ }
259
+ function isDeclared(ctx, name) {
260
+ return resolvePlugins(ctx, ctx.env).declaration.plugins.has(name);
261
+ }
262
+ export function cmdPluginRemove(ctx, names, opts) {
263
+ const index = readIndex(ctx.env);
264
+ const known = [...new Set(names.flatMap((name) => installedAs(index, name) ?? []))];
265
+ const unknown = names.filter((name) => installedAs(index, name) === null);
266
+ for (const name of unknown)
267
+ ctx.stderr.write(`nav: ${name} is not installed\n`);
268
+ if (known.length === 0)
269
+ fail("nothing to remove");
270
+ const removed = confirmAndPerform(ctx, {
271
+ title: "nav plugin remove will:",
272
+ actions: known.map((name) => ({
273
+ description: `remove ${name} from ${storeDir(ctx.env)}`,
274
+ perform: () => {
275
+ const result = npmRemove(ctx.env, [name]);
276
+ if (!result.ok)
277
+ fail(`npm could not remove ${name}`, result.output.split("\n"));
278
+ },
279
+ })),
280
+ assumeYes: opts.yes,
281
+ });
282
+ if (!removed || index === null)
283
+ return;
284
+ for (const name of known)
285
+ delete index.plugins[name];
286
+ writeIndex(ctx.env, index);
287
+ for (const name of known)
288
+ ctx.stdout.write(`Removed ${name}\n`);
289
+ // Deliberately silent about the declaration: what a repository says its tree
290
+ // contains is a property of the tree, and one machine's uninstall does not
291
+ // change it (spec 04 §4.3).
292
+ }
293
+ export function cmdPluginUpdate(ctx, names, opts) {
294
+ const index = readIndex(ctx.env);
295
+ const installed = Object.keys(index?.plugins ?? {});
296
+ const unknown = names.filter((name) => installedAs(index, name) === null);
297
+ if (unknown.length > 0)
298
+ fail(`not installed: ${unknown.join(", ")}`);
299
+ const wanted = names.length > 0
300
+ ? [...new Set(names.map((name) => installedAs(index, name)))]
301
+ : installed;
302
+ if (wanted.length === 0) {
303
+ ctx.stdout.write("Nothing to do: no plugins are installed.\n");
304
+ return;
305
+ }
306
+ const updated = confirmAndPerform(ctx, {
307
+ title: "nav plugin update will:",
308
+ actions: [
309
+ {
310
+ description: `run ${installCommand(wanted.map((name) => `${name}@latest`))}`,
311
+ perform: () => {
312
+ const result = npmInstall(ctx.env, wanted.map((name) => `${name}@latest`));
313
+ if (!result.ok)
314
+ fail("npm could not update the plugins", result.output.split("\n"));
315
+ },
316
+ },
317
+ ],
318
+ assumeYes: opts.yes,
319
+ });
320
+ if (!updated || index === null)
321
+ return;
322
+ for (const name of wanted) {
323
+ const before = index.plugins[name]?.version;
324
+ const problem = record(ctx, index, name);
325
+ if (problem !== null) {
326
+ ctx.stderr.write(`nav: ${problem}\n`);
327
+ continue;
328
+ }
329
+ const after = index.plugins[name]?.version;
330
+ ctx.stdout.write(before === after ? `${name} is already ${after}\n` : `Updated ${name} ${before} → ${after}\n`);
331
+ }
332
+ writeIndex(ctx.env, index);
333
+ }
334
+ /**
335
+ * The installed plugin a name means, or null when none is.
336
+ *
337
+ * The short name `install` accepts is accepted here too, and expanded the
338
+ * same way, so `nav plugin remove kb` undoes `nav plugin install kb`. Of its
339
+ * two expansions, the one the index holds is the one meant.
340
+ */
341
+ function installedAs(index, name) {
342
+ return (expandPluginName(name).find((candidate) => index?.plugins[candidate] !== undefined) ?? null);
343
+ }
344
+ export function cmdPluginList(ctx, opts) {
345
+ const resolved = resolvePlugins(ctx, ctx.env);
346
+ const rows = resolved.active.map((plugin) => ({
347
+ name: plugin.name,
348
+ version: plugin.version,
349
+ declared: plugin.declared,
350
+ source: plugin.fromPath ? "path" : "store",
351
+ dir: plugin.dir,
352
+ }));
353
+ if (opts.json) {
354
+ for (const row of rows)
355
+ ctx.stdout.write(`${JSON.stringify(row)}\n`);
356
+ for (const name of resolved.missing) {
357
+ ctx.stdout.write(`${JSON.stringify({ name, declared: true, missing: true })}\n`);
358
+ }
359
+ return;
360
+ }
361
+ if (rows.length === 0 && resolved.missing.length === 0) {
362
+ ctx.stdout.write(`No plugins installed. The store is ${storeDir(ctx.env)}\n`);
363
+ return;
364
+ }
365
+ for (const row of rows) {
366
+ const where = row.source === "path" ? ` (${row.dir})` : "";
367
+ const state = row.declared ? "declared" : "not declared here";
368
+ ctx.stdout.write(`${row.name} ${row.version} ${state}${where}\n`);
369
+ }
370
+ for (const name of resolved.missing) {
371
+ ctx.stdout.write(`${name} — declared, not installed\n`);
372
+ }
373
+ for (const { name, reason } of resolved.skipped) {
374
+ ctx.stderr.write(`nav: plugin ${name} skipped: ${reason}\n`);
375
+ }
376
+ }
377
+ /** Names in the store's `node_modules`, for a caller that wants to look. */
378
+ export function installedNames(env) {
379
+ try {
380
+ return readdirSync(`${storeDir(env)}/node_modules`).filter((name) => !name.startsWith("."));
381
+ }
382
+ catch {
383
+ return [];
384
+ }
385
+ }
386
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"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"}