|
43 | 43 | sideshow-term update <id> <file|-> revise a snippet (new version) |
44 | 44 | --title <t> replace title |
45 | 45 | sideshow-term list [--session <id>|--all] list snippets |
| 46 | + sideshow-term clear [--session <id>|--all] [--sessions] |
| 47 | + clear existing visualizations |
46 | 48 | sideshow-term sessions list sessions |
47 | 49 | sideshow-term comment <text> [opts] post a comment |
48 | 50 | --snippet <id> | --session <id> |
@@ -375,6 +377,37 @@ const commands = { |
375 | 377 | out(await api(`/api/sessions/${session}/snippets`)); |
376 | 378 | }, |
377 | 379 |
|
| 380 | + async clear() { |
| 381 | + const { values: flags } = parse({ |
| 382 | + options: { |
| 383 | + session: { type: "string" }, |
| 384 | + all: { type: "boolean" }, |
| 385 | + sessions: { type: "boolean" }, |
| 386 | + }, |
| 387 | + }); |
| 388 | + if (flags.all && flags.session) fail("pass either --session or --all, not both"); |
| 389 | + const sessionIds = flags.all |
| 390 | + ? (await api("/api/sessions")).map((session) => session.id) |
| 391 | + : [flags.session ?? (await resolveSession(flags))].filter(Boolean); |
| 392 | + if (sessionIds.length === 0) fail("no active session — pass --session or --all"); |
| 393 | + |
| 394 | + let visualizations = 0; |
| 395 | + let deletedSessions = 0; |
| 396 | + for (const session of sessionIds) { |
| 397 | + const snippets = await api(`/api/sessions/${session}/snippets`); |
| 398 | + for (const snippet of snippets) { |
| 399 | + await api(`/api/snippets/${snippet.id}`, { method: "DELETE" }); |
| 400 | + visualizations += 1; |
| 401 | + } |
| 402 | + if (flags.sessions) { |
| 403 | + await api(`/api/sessions/${session}`, { method: "DELETE" }); |
| 404 | + deletedSessions += 1; |
| 405 | + } |
| 406 | + } |
| 407 | + |
| 408 | + out({ ok: true, sessions: sessionIds.length, visualizations, deletedSessions }); |
| 409 | + }, |
| 410 | + |
378 | 411 | async sessions() { |
379 | 412 | parse(); |
380 | 413 | out(await api("/api/sessions")); |
|
0 commit comments