@coldtea/pr-lens-cli 0.7.0 → 0.8.1

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 (90) hide show
  1. package/README.md +31 -3
  2. package/dist/account.d.ts +76 -0
  3. package/dist/account.d.ts.map +1 -0
  4. package/dist/account.js +211 -0
  5. package/dist/account.js.map +1 -0
  6. package/dist/auth.d.ts +40 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +121 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/canvas/api.d.ts +35 -1
  11. package/dist/canvas/api.d.ts.map +1 -1
  12. package/dist/canvas/api.js +57 -1
  13. package/dist/canvas/api.js.map +1 -1
  14. package/dist/canvas/claim.d.ts +3 -0
  15. package/dist/canvas/claim.d.ts.map +1 -0
  16. package/dist/canvas/claim.js +84 -0
  17. package/dist/canvas/claim.js.map +1 -0
  18. package/dist/canvas/delete.js +3 -3
  19. package/dist/canvas/delete.js.map +1 -1
  20. package/dist/canvas/registry.d.ts +8 -2
  21. package/dist/canvas/registry.d.ts.map +1 -1
  22. package/dist/canvas/registry.js +15 -2
  23. package/dist/canvas/registry.js.map +1 -1
  24. package/dist/canvas/write.d.ts +11 -2
  25. package/dist/canvas/write.d.ts.map +1 -1
  26. package/dist/canvas/write.js +27 -8
  27. package/dist/canvas/write.js.map +1 -1
  28. package/dist/cli.d.ts.map +1 -1
  29. package/dist/cli.js +8 -2
  30. package/dist/cli.js.map +1 -1
  31. package/dist/commands/auth.d.ts +9 -0
  32. package/dist/commands/auth.d.ts.map +1 -0
  33. package/dist/commands/auth.js +369 -0
  34. package/dist/commands/auth.js.map +1 -0
  35. package/dist/commands/canvas.d.ts.map +1 -1
  36. package/dist/commands/canvas.js +162 -21
  37. package/dist/commands/canvas.js.map +1 -1
  38. package/dist/commands/render.d.ts +1 -1
  39. package/dist/commands/render.d.ts.map +1 -1
  40. package/dist/commands/render.js +6 -3
  41. package/dist/commands/render.js.map +1 -1
  42. package/dist/config-home.d.ts +4 -0
  43. package/dist/config-home.d.ts.map +1 -0
  44. package/dist/config-home.js +38 -0
  45. package/dist/config-home.js.map +1 -0
  46. package/dist/errors.d.ts +1 -1
  47. package/dist/errors.d.ts.map +1 -1
  48. package/dist/errors.js.map +1 -1
  49. package/dist/install.d.ts +5 -0
  50. package/dist/install.d.ts.map +1 -0
  51. package/dist/install.js +83 -0
  52. package/dist/install.js.map +1 -0
  53. package/dist/skill-content.generated.d.ts +1 -1
  54. package/dist/skill-content.generated.d.ts.map +1 -1
  55. package/dist/skill-content.generated.js +1 -1
  56. package/dist/skill-content.generated.js.map +1 -1
  57. package/dist/slug.d.ts +7 -0
  58. package/dist/slug.d.ts.map +1 -0
  59. package/dist/slug.js +23 -0
  60. package/dist/slug.js.map +1 -0
  61. package/dist/terminal.d.ts +5 -0
  62. package/dist/terminal.d.ts.map +1 -1
  63. package/dist/terminal.js +7 -0
  64. package/dist/terminal.js.map +1 -1
  65. package/dist/version.d.ts +1 -1
  66. package/dist/version.js +1 -1
  67. package/dist/workspace.d.ts +4 -0
  68. package/dist/workspace.d.ts.map +1 -1
  69. package/dist/workspace.js +26 -4
  70. package/dist/workspace.js.map +1 -1
  71. package/package.json +3 -3
  72. package/src/account.ts +302 -0
  73. package/src/auth.ts +183 -0
  74. package/src/canvas/api.ts +114 -2
  75. package/src/canvas/claim.ts +127 -0
  76. package/src/canvas/delete.ts +3 -3
  77. package/src/canvas/registry.ts +24 -2
  78. package/src/canvas/write.ts +37 -6
  79. package/src/cli.ts +8 -2
  80. package/src/commands/auth.ts +560 -0
  81. package/src/commands/canvas.ts +238 -18
  82. package/src/commands/render.ts +7 -3
  83. package/src/config-home.ts +45 -0
  84. package/src/errors.ts +5 -1
  85. package/src/install.ts +107 -0
  86. package/src/skill-content.generated.ts +1 -1
  87. package/src/slug.ts +26 -0
  88. package/src/terminal.ts +14 -0
  89. package/src/version.ts +1 -1
  90. package/src/workspace.ts +30 -4
@@ -1,25 +1,43 @@
1
1
  import { assertNever } from "@coldtea/pr-lens-schema";
2
- import { fetchCanvas, mintCanvas, pushCanvas, verifyWriteToken, } from "../canvas/api.js";
3
- import { ensureRegistryHome, findBySource, findCanvas, isCanvasId, mintWriteToken, selectCanvas, isReservedRegistryTarget, readRegistry, REGISTRY_PATH, sourceKey, updateRegistry, withRegistryLock, writeRegistry, } from "../canvas/registry.js";
2
+ import { fetchCanvas, listOwnedCanvases, mintCanvas, pushCanvas, verifyWriteToken, } from "../canvas/api.js";
3
+ import { ensureRegistryHome, findBySource, findByTitle, findCanvas, isCanvasId, mintWriteToken, selectCanvas, isReservedRegistryTarget, readRegistry, REGISTRY_PATH, sourceKey, updateRegistry, withRegistryLock, writeRegistry, } from "../canvas/registry.js";
4
4
  import { writeJsonFile } from "../io.js";
5
+ import { readInstallId } from "../install.js";
5
6
  import { readGraphDoc } from "../document.js";
6
- import { WORKSPACE_DIR } from "../workspace.js";
7
+ import { drawings, WORKSPACE_DIR } from "../workspace.js";
8
+ import { readToken, requireToken } from "../auth.js";
9
+ import { claimCommand } from "../canvas/claim.js";
7
10
  import { deleteCommand } from "../canvas/delete.js";
8
- import { parseOptions, readString } from "../args.js";
11
+ import { parseOptions, readBoolean, readString } from "../args.js";
9
12
  import { PrLensCliError, usageError } from "../errors.js";
10
- import { DEFAULT_API, API_ENV, readApi, requireSameApi, requireWriteToken, settleRotation, settlePendingRotation } from "../canvas/write.js";
11
- const DEFAULT_SOURCE = `${WORKSPACE_DIR}/drawn.graph.json`;
13
+ import { DEFAULT_API, API_ENV, readApi, requireSameApi, requireWriteToken, settleRotation, settlePendingRotation, writeCredential } from "../canvas/write.js";
14
+ const DRAWN = "drawn.graph.json";
15
+ /** Where 0.7.0 rendered; its registry entries still name this path. */
16
+ const LEGACY_SOURCE = `${WORKSPACE_DIR}/${DRAWN}`;
12
17
  const DEFAULT_OUT = `${WORKSPACE_DIR}/graph.json`;
13
- const SUBCOMMANDS = ["push", "pull", "rotate", "delete"];
18
+ const SUBCOMMANDS = [
19
+ "list",
20
+ "push",
21
+ "pull",
22
+ "claim",
23
+ "rotate",
24
+ "delete",
25
+ ];
14
26
  const isSubcommand = (value) => SUBCOMMANDS.some((subcommand) => subcommand === value);
15
- export const USAGE = `pr-lens canvas <push | pull | rotate | delete> [options]
27
+ export const USAGE = `pr-lens canvas <list | push | pull | claim | rotate | delete> [options]
16
28
 
17
29
  Keeps a graph document on the PR Lens app as a canvas: a page anyone you share
18
30
  it with can read, and an SVG a README can embed. The write token lands in
19
31
  ${REGISTRY_PATH}, which git ignores; the edit link carries the same token
20
32
  in its fragment, so share the view link and keep the edit link to yourself.
21
33
 
22
- pr-lens canvas push [graph.json] send the document (default ${DEFAULT_SOURCE})
34
+ pr-lens canvas list every canvas this checkout knows
35
+ --remote add every canvas the signed-in account owns
36
+ --api <url> only the canvases at that app
37
+ --json the same listing, for scripts
38
+
39
+ pr-lens canvas push [graph.json] send the document (default the checkout's
40
+ only drawing, under ${WORKSPACE_DIR}/)
23
41
  --canvas <id|name> which canvas (default the one this document
24
42
  was pushed to before, else a new one)
25
43
  --name <name> what to call a new canvas (default the document's title)
@@ -28,6 +46,10 @@ in its fragment, so share the view link and keep the edit link to yourself.
28
46
  --canvas <id|name> which canvas, when no url or id is given
29
47
  -o, --out <file> where to write it (default ${DEFAULT_OUT})
30
48
 
49
+ pr-lens canvas claim <id|name> take a canvas onto the account this machine
50
+ is signed in to, proving it with the write
51
+ token; that token is retired in the same step
52
+
31
53
  pr-lens canvas rotate mint a new write token; the old edit link stops working
32
54
  --canvas <id|name> which canvas (default the checkout's only canvas)
33
55
 
@@ -74,7 +96,8 @@ const recordPull = (current, pull) => {
74
96
  current.canvases[pull.id] = {
75
97
  name: entry?.name ?? pull.fetched?.title ?? pull.id,
76
98
  source: entry?.source ??
77
- (pull.fetched === undefined ? DEFAULT_SOURCE : sourceKey(pull.out)),
99
+ // No document, so no source a bare push could resolve to.
100
+ (pull.fetched === undefined ? undefined : sourceKey(pull.out)),
78
101
  api: pull.api,
79
102
  ...(pending === undefined ? {} : { pending }),
80
103
  ...(kept === undefined ? {} : { writeToken: kept }),
@@ -108,6 +131,23 @@ const tellRecorded = (recorded, id, terminal) => {
108
131
  return assertNever(recorded, "Unhandled record outcome");
109
132
  }
110
133
  };
134
+ /** Like `onlyCanvas`: none or several is reported, never guessed at. */
135
+ const onlyDrawing = async () => {
136
+ const found = await drawings();
137
+ const [only, ...more] = found;
138
+ if (only === undefined)
139
+ throw usageError(`no drawing in ${WORKSPACE_DIR}/`, "pr-lens render <graph.json> draws one, or name the document to push");
140
+ if (more.length > 0)
141
+ throw usageError(`${found.length} drawings in ${WORKSPACE_DIR}/`, `name the one to push: ${found.join(", ")}`);
142
+ return only;
143
+ };
144
+ /**
145
+ * Without this, the first push after upgrading from 0.7.0 would orphan the
146
+ * old canvas. The push records the new path, so it is adopted once.
147
+ */
148
+ const adoptLegacy = (registry, source) => sourceKey(source) === sourceKey(LEGACY_SOURCE)
149
+ ? undefined
150
+ : findBySource(registry, LEGACY_SOURCE);
111
151
  const push = async (args, terminal, env) => {
112
152
  const { values, positionals } = parseOptions(args, {
113
153
  canvas: { type: "string" },
@@ -116,14 +156,17 @@ const push = async (args, terminal, env) => {
116
156
  });
117
157
  if (positionals.length > 1)
118
158
  throw usageError(`push takes one graph document, got ${positionals.length}`);
119
- const source = positionals[0] ?? DEFAULT_SOURCE;
159
+ const source = positionals[0] ?? (await onlyDrawing());
120
160
  const document = await readGraphDoc(source);
121
161
  const api = readApi(values.api, env);
122
162
  await ensureRegistryHome(terminal);
123
163
  const registry = await readRegistry();
124
164
  const ref = readString(values.canvas, "canvas");
165
+ // A push onto a known path updates, so a redraw moves the canvas on a revision.
125
166
  const known = ref === undefined
126
- ? findBySource(registry, source)
167
+ ? findBySource(registry, source) ??
168
+ adoptLegacy(registry, source) ??
169
+ findByTitle(registry, document.title)
127
170
  : findCanvas(registry, ref);
128
171
  const registered = known ??
129
172
  // Under the lock, so a racing push of the same file finds this entry
@@ -133,7 +176,8 @@ const push = async (args, terminal, env) => {
133
176
  const meanwhile = ref === undefined ? findBySource(current, source) : undefined;
134
177
  if (meanwhile !== undefined)
135
178
  return meanwhile;
136
- const minted = await mintCanvas(api);
179
+ // Only a mint names the machine.
180
+ const minted = await mintCanvas(api, await readInstallId(env, api), await readToken(env, api));
137
181
  const entry = {
138
182
  name: readString(values.name, "name") ?? document.title,
139
183
  source: sourceKey(source),
@@ -159,8 +203,8 @@ const push = async (args, terminal, env) => {
159
203
  }
160
204
  return { id: minted.id, entry };
161
205
  }));
162
- const target = await settlePendingRotation(api, registered, terminal);
163
- const pushed = await pushCanvas(api, target.id, requireWriteToken(target), target.entry.rev, document);
206
+ const target = await settlePendingRotation(api, registered, terminal, env);
207
+ const pushed = await pushCanvas(api, target.id, await writeCredential(target, env, api), target.entry.rev, document);
164
208
  await updateRegistry((current) => {
165
209
  current.canvases[target.id] = {
166
210
  ...(current.canvases[target.id] ?? target.entry),
@@ -243,7 +287,12 @@ const rotate = async (args, terminal, env) => {
243
287
  await ensureRegistryHome(terminal);
244
288
  const registry = await readRegistry();
245
289
  const ref = readString(values.canvas, "canvas");
246
- const { id } = selectCanvas(registry, ref);
290
+ const selected = selectCanvas(registry, ref);
291
+ const { id } = selected;
292
+ // Checked before the pending token is saved, or an unauthorised rotation
293
+ // would leave one behind for the next push to carry out.
294
+ requireSameApi(api, selected);
295
+ await writeCredential(selected, env, api);
247
296
  // Saved before the request, so a lost answer cannot lose it; chosen under
248
297
  // the lock, so two rotations at once finish the same one.
249
298
  let pending;
@@ -251,10 +300,7 @@ const rotate = async (args, terminal, env) => {
251
300
  const entry = current.canvases[id];
252
301
  if (entry === undefined)
253
302
  return;
254
- // Without a token, a pending rotation would be carried out by whatever
255
- // token arrives next, retiring the very link that brought it.
256
303
  requireSameApi(api, { id, entry });
257
- requireWriteToken({ id, entry });
258
304
  pending = {
259
305
  id,
260
306
  entry: { ...entry, pending: entry.pending ?? mintWriteToken() },
@@ -263,23 +309,118 @@ const rotate = async (args, terminal, env) => {
263
309
  }, terminal);
264
310
  if (pending === undefined || pending.entry.pending === undefined)
265
311
  throw new PrLensCliError("CANVAS_UNREGISTERED", `${id} is no longer in ${REGISTRY_PATH}`);
266
- const { editUrl } = await settleRotation(api, pending, pending.entry.pending, terminal);
312
+ const { editUrl } = await settleRotation(api, pending, pending.entry.pending, terminal, env);
267
313
  const view = new URL(editUrl);
268
314
  view.hash = "";
269
315
  terminal.out(`✓ new edit link for ${view.href}: ${editUrl}`);
270
316
  terminal.out(" the old edit link no longer works");
271
317
  };
318
+ const byNameThenId = (a, b) => a.name.localeCompare(b.name) || a.id.localeCompare(b.id);
319
+ /** Not spread: the entry carries write tokens, which must not be listed. */
320
+ const listed = (registry) => Object.entries(registry.canvases)
321
+ .map(([id, entry]) => ({
322
+ id,
323
+ name: entry.name,
324
+ api: entry.api,
325
+ rev: entry.rev,
326
+ editHere: entry.writeToken !== undefined,
327
+ }))
328
+ .sort(byNameThenId);
329
+ const previewName = (preview) => {
330
+ switch (preview.type) {
331
+ case "drawn":
332
+ return preview.title;
333
+ case "not_drawn":
334
+ case "unreadable":
335
+ return undefined;
336
+ default:
337
+ return assertNever(preview, "Unhandled canvas preview");
338
+ }
339
+ };
340
+ /**
341
+ * The app owns names; only the registry knows whether the write token is
342
+ * here. Keyed by app too, since an id at another app is another canvas.
343
+ */
344
+ const merged = (local, api, owned) => {
345
+ const rows = new Map(local.map((canvas) => [`${canvas.api}\n${canvas.id}`, canvas]));
346
+ for (const canvas of owned) {
347
+ const key = `${api}\n${canvas.id}`;
348
+ const here = rows.get(key);
349
+ rows.set(key, {
350
+ id: canvas.id,
351
+ name: previewName(canvas.preview) ?? here?.name ?? canvas.id,
352
+ api,
353
+ rev: canvas.rev,
354
+ editHere: here?.editHere ?? false,
355
+ });
356
+ }
357
+ return [...rows.values()].sort(byNameThenId);
358
+ };
359
+ const HEADINGS = ["ID", "NAME", "REV", "EDIT HERE"];
360
+ const row = (cells, widths) => ` ${cells.map((cell, column) => cell.padEnd(widths[column] ?? 0)).join(" ")}`.trimEnd();
361
+ const tally = (canvases) => {
362
+ const count = `${canvases.length} ${canvases.length === 1 ? "canvas" : "canvases"}`;
363
+ const readOnly = canvases.filter((canvas) => !canvas.editHere).length;
364
+ return readOnly === 0
365
+ ? count
366
+ : `${count} · ${readOnly} this checkout cannot edit`;
367
+ };
368
+ const list = async (args, terminal, env) => {
369
+ const { values, positionals } = parseOptions(args, {
370
+ json: { type: "boolean" },
371
+ remote: { type: "boolean" },
372
+ api: { type: "string" },
373
+ });
374
+ if (positionals.length > 0)
375
+ throw usageError(`list takes no positional arguments, got ${positionals.join(" ")}`);
376
+ const remote = readBoolean(values.remote);
377
+ // Only the flag filters. $PR_LENS_API_URL is read only when asking an app,
378
+ // so a local listing neither hides canvases nor fails on a bad value.
379
+ const narrowed = readString(values.api, "api") !== undefined;
380
+ const api = readApi(values.api, remote || narrowed ? env : {});
381
+ const local = listed(await readRegistry()).filter((canvas) => !narrowed || canvas.api === api);
382
+ const canvases = remote
383
+ ? merged(local, api, await listOwnedCanvases(api, await requireToken(env, api)))
384
+ : local;
385
+ if (readBoolean(values.json)) {
386
+ terminal.out(JSON.stringify({ canvases }, null, 2));
387
+ return;
388
+ }
389
+ if (canvases.length === 0) {
390
+ terminal.out(remote
391
+ ? `no canvases at ${new URL(api).host} for this account, and none in ${REGISTRY_PATH}`
392
+ : `no canvases in ${REGISTRY_PATH} yet`);
393
+ terminal.out(" pr-lens canvas push mints one");
394
+ return;
395
+ }
396
+ const rows = canvases.map((canvas) => [
397
+ canvas.id,
398
+ canvas.name,
399
+ String(canvas.rev),
400
+ canvas.editHere ? "yes" : "no",
401
+ ]);
402
+ const widths = HEADINGS.map((heading, column) => Math.max(heading.length, ...rows.map((cells) => cells[column]?.length ?? 0)));
403
+ terminal.out(row(HEADINGS, widths));
404
+ for (const cells of rows)
405
+ terminal.out(row(cells, widths));
406
+ terminal.out("");
407
+ terminal.out(` ${tally(canvases)}`);
408
+ };
272
409
  export const canvasCommand = async (args, terminal, env) => {
273
410
  const [name, ...rest] = args;
274
411
  if (name === undefined)
275
- throw usageError("canvas needs a subcommand: push, pull, rotate or delete");
412
+ throw usageError("canvas needs a subcommand: list, push, pull, claim, rotate or delete");
276
413
  if (!isSubcommand(name))
277
414
  throw usageError(`unknown canvas subcommand ${JSON.stringify(name)}`);
278
415
  switch (name) {
416
+ case "list":
417
+ return list(rest, terminal, env);
279
418
  case "push":
280
419
  return push(rest, terminal, env);
281
420
  case "pull":
282
421
  return pull(rest, terminal, env);
422
+ case "claim":
423
+ return claimCommand(rest, terminal, env);
283
424
  case "delete":
284
425
  return deleteCommand(rest, terminal, env);
285
426
  case "rotate":
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/commands/canvas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/commands/canvas.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { Terminal } from "../terminal.js";
2
- export declare const USAGE = "pr-lens render <graph.json> [options]\n\nDraws the document as self-contained SVGs \u2014 one per drill-down section per\nlens, in light and dark \u2014 and writes the manifest describing them. A document\nwith no sections gets one diagram per lens it declares.\n\n -o, --out <dir> where the SVGs and the manifest go (default .pr-lens/)\n --theme <theme> light | dark | both (default both)\n --config <file> corrections to draw with (default the repository's, if any)\n --no-config ignore the repository's corrections";
2
+ export declare const USAGE = "pr-lens render <graph.json> [options]\n\nDraws the document as self-contained SVGs \u2014 one per drill-down section per\nlens, in light and dark \u2014 and writes the manifest describing them. A document\nwith no sections gets one diagram per lens it declares.\n\n -o, --out <dir> where the SVGs, the document and the manifest go\n (default .pr-lens/<title>/, one directory per drawing)\n --theme <theme> light | dark | both (default both)\n --config <file> corrections to draw with (default the repository's, if any)\n --no-config ignore the repository's corrections";
3
3
  export declare const renderCommand: (args: readonly string[], terminal: Terminal) => Promise<void>;
4
4
  //# sourceMappingURL=render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAiB/C,eAAO,MAAM,KAAK,siBASyC,CAAC;AA6B5D,eAAO,MAAM,aAAa,SAAgB,SAAS,MAAM,EAAE,YAAY,QAAQ,KAAG,OAAO,CAAC,IAAI,CA8D7F,CAAC"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAoB/C,eAAO,MAAM,KAAK,+mBAUyC,CAAC;AA6B5D,eAAO,MAAM,aAAa,SAAgB,SAAS,MAAM,EAAE,YAAY,QAAQ,KAAG,OAAO,CAAC,IAAI,CA8D7F,CAAC"}
@@ -8,8 +8,10 @@ import { readGraphDoc } from "../document.js";
8
8
  import { PrLensCliError, usageError } from "../errors.js";
9
9
  import { repositoryRoot } from "../git.js";
10
10
  import { writeJsonFile, writeTextFile } from "../io.js";
11
+ import { slugify } from "../slug.js";
11
12
  import { prepareWorkspace, WORKSPACE_DIR } from "../workspace.js";
12
- const DEFAULT_OUT = WORKSPACE_DIR;
13
+ /** Same title, same directory, so a redraw updates its canvas instead of minting one. */
14
+ const defaultOut = (title) => join(WORKSPACE_DIR, slugify(title));
13
15
  const MANIFEST = "manifest.json";
14
16
  /**
15
17
  * The document as it was drawn, written beside the manifest.
@@ -27,7 +29,8 @@ Draws the document as self-contained SVGs — one per drill-down section per
27
29
  lens, in light and dark — and writes the manifest describing them. A document
28
30
  with no sections gets one diagram per lens it declares.
29
31
 
30
- -o, --out <dir> where the SVGs and the manifest go (default ${DEFAULT_OUT}/)
32
+ -o, --out <dir> where the SVGs, the document and the manifest go
33
+ (default ${WORKSPACE_DIR}/<title>/, one directory per drawing)
31
34
  --theme <theme> light | dark | both (default both)
32
35
  --config <file> corrections to draw with (default the repository's, if any)
33
36
  --no-config ignore the repository's corrections`;
@@ -66,7 +69,7 @@ export const renderCommand = async (args, terminal) => {
66
69
  "no-config": { type: "boolean" },
67
70
  });
68
71
  const graph = await readGraphDoc(expectOne(positionals, "one graph document to render"));
69
- const out = readString(values.out, "out") ?? DEFAULT_OUT;
72
+ const out = readString(values.out, "out") ?? defaultOut(graph.title);
70
73
  const configPath = readString(values.config, "config");
71
74
  const configured = readBoolean(values["no-config"])
72
75
  ? undefined
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Takes `env` from the caller so tests never write to the real home directory. */
2
+ export declare const configHome: (env: Record<string, string | undefined>) => string | undefined;
3
+ export declare const originPath: (env: Record<string, string | undefined>, folder: string, api: string) => string | undefined;
4
+ //# sourceMappingURL=config-home.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-home.d.ts","sourceRoot":"","sources":["../src/config-home.ts"],"names":[],"mappings":"AASA,mFAAmF;AACnF,eAAO,MAAM,UAAU,QAChB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KACtC,MAAM,GAAG,SAMX,CAAC;AAgBF,eAAO,MAAM,UAAU,QAChB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,UAC/B,MAAM,OACT,MAAM,KACV,MAAM,GAAG,SAMX,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Per-machine state: the install id and the sign-in credential. Either one
3
+ * can act as this machine, so each store gets its own file and neither can
4
+ * reach the wrong `--api`.
5
+ */
6
+ import { join } from "node:path";
7
+ const DIRECTORY = "pr-lens";
8
+ /** Takes `env` from the caller so tests never write to the real home directory. */
9
+ export const configHome = (env) => {
10
+ const xdg = env.XDG_CONFIG_HOME;
11
+ if (xdg)
12
+ return xdg;
13
+ const home = env.HOME || env.USERPROFILE;
14
+ return home ? join(home, ".config") : undefined;
15
+ };
16
+ /**
17
+ * http and https only: other schemes have the origin "null", which would put
18
+ * unrelated stores in one file.
19
+ */
20
+ const fileFor = (api) => {
21
+ try {
22
+ const { protocol, origin } = new URL(api);
23
+ if (protocol !== "http:" && protocol !== "https:")
24
+ return undefined;
25
+ return `${encodeURIComponent(origin)}.json`;
26
+ }
27
+ catch {
28
+ return undefined;
29
+ }
30
+ };
31
+ export const originPath = (env, folder, api) => {
32
+ const home = configHome(env);
33
+ const file = fileFor(api);
34
+ return home === undefined || file === undefined
35
+ ? undefined
36
+ : join(home, DIRECTORY, folder, file);
37
+ };
38
+ //# sourceMappingURL=config-home.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-home.js","sourceRoot":"","sources":["../src/config-home.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC;AAE5B,mFAAmF;AACnF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,GAAuC,EACnB,EAAE;IACtB,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC;IAChC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAEpB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC;IACzC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,GAAG,CAAC,GAAW,EAAsB,EAAE;IAClD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACpE,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,GAAuC,EACvC,MAAc,EACd,GAAW,EACS,EAAE;IACtB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAC7C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAC"}
package/dist/errors.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * step, or a future command — can branch on. Messages are for humans and may
4
4
  * be reworded; codes are the contract.
5
5
  */
6
- export type CliErrorCode = "USAGE" | "UNREADABLE_FILE" | "UNKNOWN_DOCUMENT" | "INVALID_DOCUMENT" | "GIT_FAILED" | "EMPTY_DIFF" | "REPOSITORY_UNKNOWN" | "MISSING_API_KEY" | "PROVIDER_FAILED" | "MODEL_OUTPUT_INVALID" | "RENDER_FAILED" | "CANVAS_UNREGISTERED" | "CANVAS_UNKNOWN" | "CANVAS_CONFLICT" | "CANVAS_REJECTED" | "CANVAS_RATE_LIMITED" | "CANVAS_UNAVAILABLE" | "CANVAS_REGISTRY_EXPOSED";
6
+ export type CliErrorCode = "USAGE" | "UNREADABLE_FILE" | "UNKNOWN_DOCUMENT" | "INVALID_DOCUMENT" | "GIT_FAILED" | "EMPTY_DIFF" | "REPOSITORY_UNKNOWN" | "MISSING_API_KEY" | "PROVIDER_FAILED" | "MODEL_OUTPUT_INVALID" | "RENDER_FAILED" | "CANVAS_UNREGISTERED" | "CANVAS_UNKNOWN" | "CANVAS_OWNED" | "CANVAS_CONFLICT" | "CANVAS_REJECTED" | "CANVAS_RATE_LIMITED" | "CANVAS_UNAVAILABLE" | "CANVAS_REGISTRY_EXPOSED" | "AUTH_REQUIRED" | "MACHINE_REVOKED" | "APP_UNAVAILABLE";
7
7
  export declare class PrLensCliError extends Error {
8
8
  readonly code: CliErrorCode;
9
9
  /** Extra lines printed under the message: validation issues, a git stderr, a hint. */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,oBAAoB,GACpB,iBAAiB,GACjB,iBAAiB,GACjB,sBAAsB,GACtB,eAAe,GACf,qBAAqB,GACrB,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,qBAAqB,GACrB,oBAAoB,GACpB,yBAAyB,CAAC;AAE9B,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,YAAY,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAKhE;CACF;AAED,eAAO,MAAM,UAAU,YAAa,MAAM,YAAY,MAAM,KAAG,cAChB,CAAC;AAEhD,eAAO,MAAM,WAAW,UAAW,cAAc,KAAG,MACkD,CAAC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,oBAAoB,GACpB,iBAAiB,GACjB,iBAAiB,GACjB,sBAAsB,GACtB,eAAe,GACf,qBAAqB,GACrB,gBAAgB,GAChB,cAAc,GACd,iBAAiB,GACjB,iBAAiB,GACjB,qBAAqB,GACrB,oBAAoB,GACpB,yBAAyB,GACzB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,CAAC;AAEtB,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,YAAY,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAKhE;CACF;AAED,eAAO,MAAM,UAAU,YAAa,MAAM,YAAY,MAAM,KAAG,cAChB,CAAC;AAEhD,eAAO,MAAM,WAAW,UAAW,cAAc,KAAG,MACkD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAyBA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAe;IAC5B,sFAAsF;IAC7E,OAAO,CAAqB;IAErC,YAAY,IAAkB,EAAE,OAAe,EAAE,OAAgB;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,OAAgB,EAAkB,EAAE,CAC9E,IAAI,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAqB,EAAU,EAAE,CAC3D,CAAC,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AA6BA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAe;IAC5B,sFAAsF;IAC7E,OAAO,CAAqB;IAErC,YAAY,IAAkB,EAAE,OAAe,EAAE,OAAgB;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,OAAgB,EAAkB,EAAE,CAC9E,IAAI,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAqB,EAAU,EAAE,CAC3D,CAAC,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const installPath: (env: Record<string, string | undefined>, api: string) => string | undefined;
2
+ export declare const readStoredInstallId: (env: Record<string, string | undefined>, api: string) => Promise<string | undefined>;
3
+ /** Failures answer undefined: attribution is never worth breaking a push. */
4
+ export declare const readInstallId: (env: Record<string, string | undefined>, api: string) => Promise<string | undefined>;
5
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,WAAW,QACjB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,OAClC,MAAM,KACV,MAAM,GAAG,SAA2C,CAAC;AAsBxD,eAAO,MAAM,mBAAmB,QACzB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,OAClC,MAAM,KACV,OAAO,CAAC,MAAM,GAAG,SAAS,CAG5B,CAAC;AAgDF,6EAA6E;AAC7E,eAAO,MAAM,aAAa,QACnB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,OAClC,MAAM,KACV,OAAO,CAAC,MAAM,GAAG,SAAS,CAK5B,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Names this machine to a store so a later sign-in can claim what it pushed.
3
+ *
4
+ * Kept per store, since whoever holds the id can have this machine's canvases
5
+ * attributed to them. Never put in a link, unlike a write token.
6
+ */
7
+ import { dirname } from "node:path";
8
+ import { randomBytes } from "node:crypto";
9
+ import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
10
+ import { originPath } from "./config-home.js";
11
+ const INSTALLS = "installs";
12
+ const PREFIX = "prl_i_";
13
+ const INSTALL_ID = /^prl_i_[A-Za-z0-9_-]{22}$/;
14
+ export const installPath = (env, api) => originPath(env, INSTALLS, api);
15
+ const idIn = (text) => {
16
+ const contents = (() => {
17
+ try {
18
+ return JSON.parse(text);
19
+ }
20
+ catch {
21
+ return undefined;
22
+ }
23
+ })();
24
+ if (typeof contents !== "object" || contents === null)
25
+ return undefined;
26
+ const { installId } = contents;
27
+ return typeof installId === "string" && INSTALL_ID.test(installId)
28
+ ? installId
29
+ : undefined;
30
+ };
31
+ /** Unreadable counts as absent: a machine with no id still pushes. */
32
+ const storedId = (path) => readFile(path, "utf8").then(idIn, () => undefined);
33
+ export const readStoredInstallId = async (env, api) => {
34
+ const path = installPath(env, api);
35
+ return path === undefined ? undefined : storedId(path);
36
+ };
37
+ const write = async (path) => {
38
+ const minted = `${PREFIX}${randomBytes(16).toString("base64url")}`;
39
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
40
+ await writeFile(path, `${JSON.stringify({ installId: minted }, null, 2)}\n`, {
41
+ encoding: "utf8",
42
+ mode: 0o600,
43
+ flag: "wx",
44
+ });
45
+ return minted;
46
+ };
47
+ const alreadyThere = (error) => typeof error === "object" &&
48
+ error !== null &&
49
+ "code" in error &&
50
+ error.code === "EEXIST";
51
+ /**
52
+ * Exclusive create settles two first runs without a lock: the loser reads the
53
+ * winner's id. Repairing a junk file can race under concurrency; accepted as rare.
54
+ */
55
+ const create = async (path) => {
56
+ try {
57
+ return await write(path);
58
+ }
59
+ catch (error) {
60
+ if (!alreadyThere(error))
61
+ return undefined;
62
+ // One read, so a peer's repair cannot land between two.
63
+ const text = await readFile(path, "utf8").catch(() => undefined);
64
+ // An unreadable file may hold an id the app already has; never delete it.
65
+ if (text === undefined)
66
+ return undefined;
67
+ const won = idIn(text);
68
+ if (won !== undefined)
69
+ return won;
70
+ const cleared = await rm(path, { force: true }).then(() => true, () => false);
71
+ if (!cleared)
72
+ return undefined;
73
+ return write(path).catch(() => storedId(path));
74
+ }
75
+ };
76
+ /** Failures answer undefined: attribution is never worth breaking a push. */
77
+ export const readInstallId = async (env, api) => {
78
+ const path = installPath(env, api);
79
+ if (path === undefined)
80
+ return undefined;
81
+ return (await storedId(path)) ?? (await create(path));
82
+ };
83
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}