@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.
- package/README.md +31 -3
- package/dist/account.d.ts +76 -0
- package/dist/account.d.ts.map +1 -0
- package/dist/account.js +211 -0
- package/dist/account.js.map +1 -0
- package/dist/auth.d.ts +40 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +121 -0
- package/dist/auth.js.map +1 -0
- package/dist/canvas/api.d.ts +35 -1
- package/dist/canvas/api.d.ts.map +1 -1
- package/dist/canvas/api.js +57 -1
- package/dist/canvas/api.js.map +1 -1
- package/dist/canvas/claim.d.ts +3 -0
- package/dist/canvas/claim.d.ts.map +1 -0
- package/dist/canvas/claim.js +84 -0
- package/dist/canvas/claim.js.map +1 -0
- package/dist/canvas/delete.js +3 -3
- package/dist/canvas/delete.js.map +1 -1
- package/dist/canvas/registry.d.ts +8 -2
- package/dist/canvas/registry.d.ts.map +1 -1
- package/dist/canvas/registry.js +15 -2
- package/dist/canvas/registry.js.map +1 -1
- package/dist/canvas/write.d.ts +11 -2
- package/dist/canvas/write.d.ts.map +1 -1
- package/dist/canvas/write.js +27 -8
- package/dist/canvas/write.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/auth.d.ts +9 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +369 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/canvas.d.ts.map +1 -1
- package/dist/commands/canvas.js +162 -21
- package/dist/commands/canvas.js.map +1 -1
- package/dist/commands/render.d.ts +1 -1
- package/dist/commands/render.d.ts.map +1 -1
- package/dist/commands/render.js +6 -3
- package/dist/commands/render.js.map +1 -1
- package/dist/config-home.d.ts +4 -0
- package/dist/config-home.d.ts.map +1 -0
- package/dist/config-home.js +38 -0
- package/dist/config-home.js.map +1 -0
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/install.d.ts +5 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +83 -0
- package/dist/install.js.map +1 -0
- package/dist/skill-content.generated.d.ts +1 -1
- package/dist/skill-content.generated.d.ts.map +1 -1
- package/dist/skill-content.generated.js +1 -1
- package/dist/skill-content.generated.js.map +1 -1
- package/dist/slug.d.ts +7 -0
- package/dist/slug.d.ts.map +1 -0
- package/dist/slug.js +23 -0
- package/dist/slug.js.map +1 -0
- package/dist/terminal.d.ts +5 -0
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js +7 -0
- package/dist/terminal.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workspace.d.ts +4 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +26 -4
- package/dist/workspace.js.map +1 -1
- package/package.json +3 -3
- package/src/account.ts +302 -0
- package/src/auth.ts +183 -0
- package/src/canvas/api.ts +114 -2
- package/src/canvas/claim.ts +127 -0
- package/src/canvas/delete.ts +3 -3
- package/src/canvas/registry.ts +24 -2
- package/src/canvas/write.ts +37 -6
- package/src/cli.ts +8 -2
- package/src/commands/auth.ts +560 -0
- package/src/commands/canvas.ts +238 -18
- package/src/commands/render.ts +7 -3
- package/src/config-home.ts +45 -0
- package/src/errors.ts +5 -1
- package/src/install.ts +107 -0
- package/src/skill-content.generated.ts +1 -1
- package/src/slug.ts +26 -0
- package/src/terminal.ts +14 -0
- package/src/version.ts +1 -1
- package/src/workspace.ts +30 -4
package/dist/commands/canvas.js
CHANGED
|
@@ -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
|
|
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 = [
|
|
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
|
|
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
|
-
|
|
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] ??
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
|
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;
|
|
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"}
|
package/dist/commands/render.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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") ??
|
|
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":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAc,MAAM,2BAA2B,CAAC;AAC/G,OAAO,EAAE,iBAAiB,EAA8B,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,
|
|
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. */
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/install.js
ADDED
|
@@ -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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"}
|