@iamcoder18/huly-cli 0.1.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 (75) hide show
  1. package/README.md +2576 -0
  2. package/bin/huly +9 -0
  3. package/dist/auth/cache.js +129 -0
  4. package/dist/auth/cache.js.map +1 -0
  5. package/dist/auth/client.js +192 -0
  6. package/dist/auth/client.js.map +1 -0
  7. package/dist/auth/env.js +101 -0
  8. package/dist/auth/env.js.map +1 -0
  9. package/dist/auth/prompts.js +68 -0
  10. package/dist/auth/prompts.js.map +1 -0
  11. package/dist/cli.js +1959 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/commands/dry-run.js +39 -0
  14. package/dist/commands/dry-run.js.map +1 -0
  15. package/dist/commands/login.js +92 -0
  16. package/dist/commands/login.js.map +1 -0
  17. package/dist/commands/whoami.js +64 -0
  18. package/dist/commands/whoami.js.map +1 -0
  19. package/dist/index.js +59 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/output/errors.js +99 -0
  22. package/dist/output/errors.js.map +1 -0
  23. package/dist/output/format.js +607 -0
  24. package/dist/output/format.js.map +1 -0
  25. package/dist/output/progress.js +30 -0
  26. package/dist/output/progress.js.map +1 -0
  27. package/dist/raw/api.js +67 -0
  28. package/dist/raw/api.js.map +1 -0
  29. package/dist/raw/ws.js +157 -0
  30. package/dist/raw/ws.js.map +1 -0
  31. package/dist/resources/_helpers.js +258 -0
  32. package/dist/resources/_helpers.js.map +1 -0
  33. package/dist/resources/_project-resolve.js +24 -0
  34. package/dist/resources/_project-resolve.js.map +1 -0
  35. package/dist/resources/calendar.js +659 -0
  36. package/dist/resources/calendar.js.map +1 -0
  37. package/dist/resources/card.js +358 -0
  38. package/dist/resources/card.js.map +1 -0
  39. package/dist/resources/channel.js +709 -0
  40. package/dist/resources/channel.js.map +1 -0
  41. package/dist/resources/comment.js +142 -0
  42. package/dist/resources/comment.js.map +1 -0
  43. package/dist/resources/component.js +154 -0
  44. package/dist/resources/component.js.map +1 -0
  45. package/dist/resources/document.js +584 -0
  46. package/dist/resources/document.js.map +1 -0
  47. package/dist/resources/issue-template.js +228 -0
  48. package/dist/resources/issue-template.js.map +1 -0
  49. package/dist/resources/issue.js +909 -0
  50. package/dist/resources/issue.js.map +1 -0
  51. package/dist/resources/milestone.js +177 -0
  52. package/dist/resources/milestone.js.map +1 -0
  53. package/dist/resources/misc.js +2 -0
  54. package/dist/resources/misc.js.map +1 -0
  55. package/dist/resources/project.js +341 -0
  56. package/dist/resources/project.js.map +1 -0
  57. package/dist/resources/project.parse.js +25 -0
  58. package/dist/resources/project.parse.js.map +1 -0
  59. package/dist/resources/time.js +148 -0
  60. package/dist/resources/time.js.map +1 -0
  61. package/dist/resources/todo.js +463 -0
  62. package/dist/resources/todo.js.map +1 -0
  63. package/dist/resources/user.js +131 -0
  64. package/dist/resources/user.js.map +1 -0
  65. package/dist/resources/workspace.js +252 -0
  66. package/dist/resources/workspace.js.map +1 -0
  67. package/dist/transport/identifiers.js +67 -0
  68. package/dist/transport/identifiers.js.map +1 -0
  69. package/dist/transport/ref-resolver.js +108 -0
  70. package/dist/transport/ref-resolver.js.map +1 -0
  71. package/dist/transport/sdk.js +69 -0
  72. package/dist/transport/sdk.js.map +1 -0
  73. package/dist/types.js +2 -0
  74. package/dist/types.js.map +1 -0
  75. package/package.json +40 -0
@@ -0,0 +1,584 @@
1
+ import pkg from '@hcengineering/api-client';
2
+ const { MarkupContent } = pkg;
3
+ import { CLASS } from '../transport/identifiers.js';
4
+ import { connectCli } from '../transport/sdk.js';
5
+ import { resolveRef, resolveRefs, buildIndex, invalidateIndex } from '../transport/ref-resolver.js';
6
+ import { shouldJson, json, table, kv, header, COLUMNS, C, relTime, isoDate, withTimeout, success, updated, bulkRemoved } from "../output/format.js";
7
+ import { withSpinner } from '../output/progress.js';
8
+ import { CliError, ExitCode } from '../output/errors.js';
9
+ import { readEnv } from '../auth/env.js';
10
+ const TEAMSPACE_CLASS = CLASS.Teamspace;
11
+ const DOCUMENT_CLASS = CLASS.Document;
12
+ const SNAPSHOT_CLASS = CLASS.DocumentSnapshot;
13
+ const DOCUMENT_SPACE = 'document:space:Document';
14
+ const TEAMSPACE_DEFAULT = 'document:space:Default';
15
+ async function readBodyText(opts) {
16
+ if (opts.body && opts.bodyFile) {
17
+ throw new CliError(ExitCode.Validation, 'ambiguous body input', 'pass only one of --body or --body-file');
18
+ }
19
+ if (opts.bodyFile) {
20
+ const fs = await import('node:fs/promises');
21
+ return (await fs.readFile(opts.bodyFile, 'utf8')).trim();
22
+ }
23
+ return opts.body;
24
+ }
25
+ async function resolveTeamspace(client, ref) {
26
+ const env = readEnv();
27
+ const candidate = ref ?? env.teamspace;
28
+ if (candidate) {
29
+ const account = await client.getAccount();
30
+ const idx = await buildIndex(client, TEAMSPACE_CLASS, account.uuid);
31
+ const hit = idx.get(candidate);
32
+ if (hit) {
33
+ const doc = await client.findOne(TEAMSPACE_CLASS, { _id: hit });
34
+ if (doc)
35
+ return doc;
36
+ }
37
+ // Fallback: try by name match
38
+ const all = (await client.findAll(TEAMSPACE_CLASS, {}));
39
+ const byName = all.find((t) => t.name === candidate);
40
+ if (byName)
41
+ return byName;
42
+ }
43
+ const all = (await client.findAll(TEAMSPACE_CLASS, {}));
44
+ if (all.length === 0) {
45
+ // No teamspaces — auto-create a default 'General' teamspace so users can
46
+ // create their first document without manual setup.
47
+ const id = await client.createDoc(TEAMSPACE_CLASS, TEAMSPACE_DEFAULT, {
48
+ name: 'General',
49
+ description: 'Default teamspace (auto-created)',
50
+ type: 'space-type:default',
51
+ private: false,
52
+ archived: false,
53
+ members: [],
54
+ rank: '0|aaaaa:'
55
+ });
56
+ const created = await client.findOne(TEAMSPACE_CLASS, { _id: id });
57
+ if (!created)
58
+ throw new CliError(ExitCode.NotFound, 'failed to auto-create default teamspace');
59
+ return created;
60
+ }
61
+ return all[0];
62
+ }
63
+ async function resolveDocumentByTitle(client, space, title) {
64
+ const docs = (await client.findAll(DOCUMENT_CLASS, { space }));
65
+ const lower = title.toLowerCase();
66
+ const hits = docs.filter((d) => String(d.title ?? '').toLowerCase() === lower);
67
+ if (hits.length === 0) {
68
+ throw new CliError(ExitCode.NotFound, `document titled "${title}" not found in teamspace`);
69
+ }
70
+ if (hits.length > 1) {
71
+ throw new CliError(ExitCode.Ambiguous, `multiple documents titled "${title}" — pass a _id ref instead`, `matches: ${hits.map((d) => d._id).join(', ')}`);
72
+ }
73
+ return hits[0];
74
+ }
75
+ // ---- teamspaces ----
76
+ export async function listTeamspaces(opts = {}) {
77
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
78
+ try {
79
+ const docs = (await withSpinner('Loading teamspaces…', () => client.findAll(TEAMSPACE_CLASS, {}), opts));
80
+ let r = docs;
81
+ if (opts.offset && opts.offset > 0)
82
+ r = r.slice(opts.offset);
83
+ if (opts.limit && opts.limit > 0)
84
+ r = r.slice(0, opts.limit);
85
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
86
+ json(r);
87
+ return;
88
+ }
89
+ table(r, [
90
+ { key: 'name', header: 'NAME' },
91
+ { key: 'description', header: 'DESCRIPTION', format: (r) => String(r.description ?? '').slice(0, 60) },
92
+ { key: 'type', header: 'TYPE' },
93
+ { key: 'private', header: 'PRIVATE', format: (r) => r != null ? (r.private ? C.red('private') : C.green('shared')) : C.muted('—') },
94
+ { key: 'archived', header: 'STATE', format: (r) => r != null ? (r.archived ? C.red('archived') : C.green('active')) : C.muted('—') },
95
+ { key: '_id', header: '_ID', format: (r) => C.id(String(r._id).slice(-12)) }
96
+ ], { count: true, title: 'teamspaces' });
97
+ }
98
+ finally {
99
+ await client.close();
100
+ }
101
+ }
102
+ export async function getTeamspace(ref, opts) {
103
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
104
+ try {
105
+ const account = await client.getAccount();
106
+ const id = await resolveRef(ref, {
107
+ client,
108
+ classId: TEAMSPACE_CLASS,
109
+ workspaceId: account.uuid
110
+ });
111
+ const doc = await client.findOne(TEAMSPACE_CLASS, { _id: id });
112
+ if (!doc)
113
+ throw new CliError(ExitCode.NotFound, `teamspace ${ref} not found`);
114
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
115
+ json(doc);
116
+ return;
117
+ }
118
+ kv([
119
+ ['name', doc.name],
120
+ ['description', doc.description !== '' ? doc.description : '(no description)'],
121
+ ['type', doc.type],
122
+ ['state', doc.archived ? 'archived' : 'active'],
123
+ ['_id', doc._id]
124
+ ], { title: `teamspace ${doc.name ?? doc._id}` });
125
+ }
126
+ finally {
127
+ await client.close();
128
+ }
129
+ }
130
+ export async function createTeamspace(opts) {
131
+ if (!opts.name)
132
+ throw new CliError(ExitCode.Validation, 'missing --name');
133
+ const data = {
134
+ name: opts.name,
135
+ description: opts.description ?? '',
136
+ type: opts.type ?? 'public',
137
+ private: opts.private ?? false,
138
+ archived: false,
139
+ members: [],
140
+ owners: []
141
+ };
142
+ if (opts.dryRun) {
143
+ console.log('would create teamspace:');
144
+ console.log(JSON.stringify({ _class: TEAMSPACE_CLASS, space: TEAMSPACE_DEFAULT, data }, null, 2));
145
+ return;
146
+ }
147
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
148
+ try {
149
+ const id = await withSpinner('Creating teamspace…', () => client.createDoc(TEAMSPACE_CLASS, TEAMSPACE_DEFAULT, data), opts);
150
+ invalidateIndex((await client.getAccount()).uuid, TEAMSPACE_CLASS);
151
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
152
+ json({ _id: id, ...data });
153
+ return;
154
+ }
155
+ success(`created teamspace`, opts.name, id);
156
+ }
157
+ finally {
158
+ await client.close();
159
+ }
160
+ }
161
+ export async function updateTeamspace(ref, opts) {
162
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
163
+ try {
164
+ const account = await client.getAccount();
165
+ const id = await resolveRef(ref, {
166
+ client,
167
+ classId: TEAMSPACE_CLASS,
168
+ workspaceId: account.uuid
169
+ });
170
+ const doc = await client.findOne(TEAMSPACE_CLASS, { _id: id });
171
+ if (!doc)
172
+ throw new CliError(ExitCode.NotFound, `teamspace ${ref} not found`);
173
+ const ops = {};
174
+ if (opts.name)
175
+ ops.name = opts.name;
176
+ if (opts.description !== undefined)
177
+ ops.description = opts.description;
178
+ if (opts.archived !== undefined)
179
+ ops.archived = opts.archived;
180
+ if (Object.keys(ops).length === 0)
181
+ throw new CliError(ExitCode.Validation, 'nothing to update', 'pass --name, --description, or --archived');
182
+ if (opts.dryRun) {
183
+ console.log(`would update teamspace ${id}:`);
184
+ console.log(JSON.stringify({ _class: TEAMSPACE_CLASS, objectId: id, ops }, null, 2));
185
+ return;
186
+ }
187
+ await withSpinner('Updating…', () => client.updateDoc(TEAMSPACE_CLASS, doc.space, id, ops), opts);
188
+ updated(`updated teamspace`, id);
189
+ }
190
+ finally {
191
+ await client.close();
192
+ }
193
+ }
194
+ export async function deleteTeamspaces(refs, opts = {}) {
195
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
196
+ try {
197
+ const account = await client.getAccount();
198
+ const ids = await resolveRefs(refs, {
199
+ client,
200
+ classId: TEAMSPACE_CLASS,
201
+ workspaceId: account.uuid
202
+ });
203
+ if (!opts.yes && ids.length > 1)
204
+ throw new CliError(ExitCode.Validation, `destructive: deleting ${ids.length} teamspaces requires --yes`, 're-run with --yes to confirm');
205
+ let deleted = 0, skipped = 0;
206
+ for (const id of ids) {
207
+ const doc = await client.findOne(TEAMSPACE_CLASS, { _id: id });
208
+ if (!doc) {
209
+ skipped++;
210
+ continue;
211
+ }
212
+ try {
213
+ await client.removeDoc(TEAMSPACE_CLASS, doc.space, id);
214
+ deleted++;
215
+ }
216
+ catch (e) {
217
+ console.error(`failed to delete ${id}: ${e.message}`);
218
+ skipped++;
219
+ }
220
+ }
221
+ bulkRemoved(deleted, skipped);
222
+ }
223
+ finally {
224
+ await client.close();
225
+ }
226
+ }
227
+ // ---- documents (expanded) ----
228
+ export async function listDocuments(opts = {}) {
229
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
230
+ try {
231
+ const query = {};
232
+ if (opts.teamspace) {
233
+ const ts = await resolveTeamspace(client, opts.teamspace);
234
+ query.space = ts._id;
235
+ }
236
+ if (opts.titleSearch)
237
+ query.title = { $regex: opts.titleSearch, $options: 'i' };
238
+ if (opts.contentSearch) {
239
+ // Best-effort: best to use searchFulltext on REST, but websocket
240
+ // client doesn't expose it. Use regex on the content field.
241
+ query.content = { $regex: opts.contentSearch, $options: 'i' };
242
+ }
243
+ const docs = (await withSpinner('Loading documents…', () => client.findAll(DOCUMENT_CLASS, query), opts));
244
+ let r = docs;
245
+ if (opts.offset && opts.offset > 0)
246
+ r = r.slice(opts.offset);
247
+ if (opts.limit && opts.limit > 0)
248
+ r = r.slice(0, opts.limit);
249
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
250
+ json(r);
251
+ return;
252
+ }
253
+ table(r, COLUMNS.document(), { count: true });
254
+ }
255
+ finally {
256
+ await client.close();
257
+ }
258
+ }
259
+ export async function getDocument(ref, opts) {
260
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
261
+ try {
262
+ const account = await client.getAccount();
263
+ const id = await resolveRef(ref, {
264
+ client,
265
+ classId: DOCUMENT_CLASS,
266
+ workspaceId: account.uuid
267
+ });
268
+ const doc = await client.findOne(DOCUMENT_CLASS, { _id: id });
269
+ if (!doc)
270
+ throw new CliError(ExitCode.NotFound, `document ${ref} not found`);
271
+ if (opts.markdown && doc.content) {
272
+ try {
273
+ const body = await withTimeout(client.fetchMarkup(DOCUMENT_CLASS, doc._id, 'content', doc.content, 'markdown'), 5000, '(body fetch timed out)');
274
+ console.log(body);
275
+ return;
276
+ }
277
+ catch {
278
+ console.log(String(doc.content));
279
+ return;
280
+ }
281
+ }
282
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
283
+ json(doc);
284
+ return;
285
+ }
286
+ // Resolve teamspace name
287
+ let teamspaceName = null;
288
+ if (doc.space) {
289
+ const t = await client.findOne(TEAMSPACE_CLASS, { _id: doc.space });
290
+ if (t)
291
+ teamspaceName = String(t.name ?? '');
292
+ }
293
+ header(`Document — ${doc.title ?? '(untitled)'}`, { subtitle: `created ${relTime(doc.createdOn)} · updated ${relTime(doc.modifiedOn)}` });
294
+ kv([
295
+ ['ID', C.emphasis(String(doc._id))],
296
+ ['Title', String(doc.title ?? '—')],
297
+ ['Teamspace', teamspaceName != null ? C.emphasis(teamspaceName) : C.muted('—')],
298
+ ['Author', String(doc.createdBy ?? '—').slice(-8)],
299
+ ['Last editor', String(doc.modifiedBy ?? '—').slice(-8)],
300
+ ['Created', doc.createdOn != null ? `${isoDate(doc.createdOn)} (${relTime(doc.createdOn)})` : C.muted('—')],
301
+ ['Modified', doc.modifiedOn != null ? `${isoDate(doc.modifiedOn)} (${relTime(doc.modifiedOn)})` : C.muted('—')],
302
+ ['Content-type', String(doc.content?.type ?? '—')],
303
+ ['_class', C.id(String(doc._class))]
304
+ ]);
305
+ if (doc.content && doc.content.text !== undefined) {
306
+ console.log();
307
+ console.log(C.emphasis('Content'));
308
+ console.log(C.muted('─'.repeat(20)));
309
+ const body = doc.content.text;
310
+ console.log(body.length > 500 ? body.slice(0, 500) + '…' : body);
311
+ }
312
+ }
313
+ finally {
314
+ await client.close();
315
+ }
316
+ }
317
+ export async function createDocument(opts) {
318
+ if (!opts.title)
319
+ throw new CliError(ExitCode.Validation, 'missing --title');
320
+ if (opts.body && opts.bodyFile)
321
+ throw new CliError(ExitCode.Validation, 'ambiguous body input', 'pass only one of --body or --body-file');
322
+ const body = await readBodyText(opts);
323
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
324
+ try {
325
+ const account = await client.getAccount();
326
+ const teamspace = await resolveTeamspace(client, opts.teamspace);
327
+ let parent = null;
328
+ if (opts.parent) {
329
+ try {
330
+ parent = await resolveRef(opts.parent, {
331
+ client,
332
+ classId: DOCUMENT_CLASS,
333
+ workspaceId: account.uuid
334
+ });
335
+ }
336
+ catch {
337
+ // try by title
338
+ const found = await resolveDocumentByTitle(client, teamspace._id, opts.parent);
339
+ parent = found._id;
340
+ }
341
+ }
342
+ // The SDK's processMarkup tries to upload MarkupContent bodies to the
343
+ // collaborator service. If the collaborator is unhealthy the upload
344
+ // throws and the whole createDoc fails — leaving the CLI unable to
345
+ // create any document. We store the body as a plain string instead.
346
+ // The platform treats string content as already-rendered markup; the
347
+ // get --markdown path returns the body directly (see Fix #2 withTimeout).
348
+ const data = {
349
+ title: opts.title,
350
+ content: body ?? '',
351
+ parent: parent,
352
+ space: teamspace._id,
353
+ archived: opts.archived ?? false,
354
+ rank: '0|aaaaa:'
355
+ };
356
+ if (opts.dryRun) {
357
+ console.log('would create document:');
358
+ console.log(JSON.stringify({ _class: DOCUMENT_CLASS, space: teamspace._id, data }, null, 2));
359
+ return;
360
+ }
361
+ const id = await withSpinner(`Creating document in ${teamspace.name}…`, () => client.createDoc(DOCUMENT_CLASS, teamspace._id, data), opts);
362
+ invalidateIndex(account.uuid, DOCUMENT_CLASS);
363
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
364
+ json({ _id: id, ...data });
365
+ return;
366
+ }
367
+ success(`created document`, opts.title, id);
368
+ }
369
+ finally {
370
+ await client.close();
371
+ }
372
+ }
373
+ export async function updateDocument(ref, opts) {
374
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
375
+ try {
376
+ const account = await client.getAccount();
377
+ const id = await resolveRef(ref, {
378
+ client,
379
+ classId: DOCUMENT_CLASS,
380
+ workspaceId: account.uuid
381
+ });
382
+ const doc = await client.findOne(DOCUMENT_CLASS, { _id: id });
383
+ if (!doc)
384
+ throw new CliError(ExitCode.NotFound, `document ${ref} not found`);
385
+ let body;
386
+ if (opts.body && opts.bodyFile) {
387
+ throw new CliError(ExitCode.Validation, 'ambiguous body input', 'pass only one of --body or --body-file');
388
+ }
389
+ if (opts.bodyFile) {
390
+ const fs = await import('node:fs/promises');
391
+ body = (await fs.readFile(opts.bodyFile, 'utf8')).trim();
392
+ }
393
+ else if (opts.body) {
394
+ body = opts.body;
395
+ }
396
+ const ops = {};
397
+ if (opts.title)
398
+ ops.title = opts.title;
399
+ if (opts.archived !== undefined)
400
+ ops.archived = opts.archived;
401
+ if (body !== undefined) {
402
+ if (opts.oldText && opts.newText !== undefined) {
403
+ throw new CliError(ExitCode.Validation, 'ambiguous: pass either --body (full replace) OR --old-text/--new-text (targeted), not both');
404
+ }
405
+ // See createDocument for why we pass the raw string instead of
406
+ // new MarkupContent(...): the SDK's processMarkup tries to upload
407
+ // MarkupContent to the collaborator, which throws on this selfhost.
408
+ ops.content = body;
409
+ }
410
+ else if (opts.oldText && opts.newText !== undefined) {
411
+ // Targeted replace — fetch current content, perform substitution.
412
+ const currentContent = doc.content;
413
+ const currentText = currentContent
414
+ ? await withTimeout(client.fetchMarkup(DOCUMENT_CLASS, doc._id, 'content', currentContent, 'markdown'), 5000, String(currentContent)).catch(() => String(currentContent))
415
+ : '';
416
+ const replaceAll = !!opts.replaceAll;
417
+ const occurrences = currentText.split(opts.oldText).length - 1;
418
+ if (occurrences === 0) {
419
+ throw new CliError(ExitCode.NotFound, `old-text not found in document`, 'pass --dry-run to inspect, or check the source body');
420
+ }
421
+ if (occurrences > 1 && !replaceAll) {
422
+ throw new CliError(ExitCode.Ambiguous, `${occurrences} occurrences of --old-text — pass --replace-all to replace all`, `otherwise narrow your --old-text to a unique substring`);
423
+ }
424
+ const newText = currentText.split(opts.oldText).join(opts.newText);
425
+ ops.content = newText;
426
+ }
427
+ if (Object.keys(ops).length === 0) {
428
+ throw new CliError(ExitCode.Validation, 'nothing to update', 'pass --body, --title, --archived, or --old-text/--new-text');
429
+ }
430
+ if (opts.dryRun) {
431
+ console.log(`would update document ${id}:`);
432
+ console.log(JSON.stringify({ _class: DOCUMENT_CLASS, objectId: id, space: doc.space, ops }, null, 2));
433
+ return;
434
+ }
435
+ await withSpinner('Updating…', () => client.updateDoc(DOCUMENT_CLASS, doc.space, id, ops), opts);
436
+ updated(`updated document`, id);
437
+ }
438
+ finally {
439
+ await client.close();
440
+ }
441
+ }
442
+ export async function deleteDocuments(refs, opts = {}) {
443
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
444
+ try {
445
+ const account = await client.getAccount();
446
+ const ids = await resolveRefs(refs, {
447
+ client,
448
+ classId: DOCUMENT_CLASS,
449
+ workspaceId: account.uuid
450
+ });
451
+ if (!opts.yes && ids.length > 1)
452
+ throw new CliError(ExitCode.Validation, `destructive: deleting ${ids.length} documents requires --yes`, 're-run with --yes to confirm');
453
+ let deleted = 0, skipped = 0;
454
+ for (const id of ids) {
455
+ const d = await client.findOne(DOCUMENT_CLASS, { _id: id });
456
+ if (!d) {
457
+ skipped++;
458
+ continue;
459
+ }
460
+ try {
461
+ await client.removeDoc(DOCUMENT_CLASS, d.space, id);
462
+ deleted++;
463
+ }
464
+ catch (e) {
465
+ console.error(`failed to delete ${id}: ${e.message}`);
466
+ skipped++;
467
+ }
468
+ }
469
+ bulkRemoved(deleted, skipped);
470
+ }
471
+ finally {
472
+ await client.close();
473
+ }
474
+ }
475
+ // ---- snapshots ----
476
+ export async function listSnapshots(ref, opts = {}) {
477
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
478
+ try {
479
+ const account = await client.getAccount();
480
+ const id = await resolveRef(ref, {
481
+ client,
482
+ classId: DOCUMENT_CLASS,
483
+ workspaceId: account.uuid
484
+ });
485
+ const snapshots = (await client.findAll(SNAPSHOT_CLASS, { parent: id }));
486
+ let r = snapshots;
487
+ if (opts.offset && opts.offset > 0)
488
+ r = r.slice(opts.offset);
489
+ if (opts.limit && opts.limit > 0)
490
+ r = r.slice(0, opts.limit);
491
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
492
+ json(r);
493
+ return;
494
+ }
495
+ table(r, [
496
+ { key: 'title', header: 'TITLE', format: (r) => C.emphasis(String(r.title ?? '')) },
497
+ { key: 'createdOn', header: 'CREATED', format: (r) => r != null ? relTime(r.createdOn) : C.muted('—') },
498
+ { key: '_id', header: '_ID', format: (r) => C.id(String(r._id).slice(-12)) }
499
+ ], { count: true, title: 'snapshots' });
500
+ }
501
+ finally {
502
+ await client.close();
503
+ }
504
+ }
505
+ export async function getSnapshot(ref, opts) {
506
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
507
+ try {
508
+ const account = await client.getAccount();
509
+ const id = await resolveRef(ref, {
510
+ client,
511
+ classId: DOCUMENT_CLASS,
512
+ workspaceId: account.uuid
513
+ });
514
+ if (!opts.snapshotId)
515
+ throw new CliError(ExitCode.Validation, 'missing --snapshot-id');
516
+ const snapId = await resolveRef(opts.snapshotId, {
517
+ client,
518
+ classId: SNAPSHOT_CLASS,
519
+ workspaceId: account.uuid
520
+ });
521
+ const snap = await client.findOne(SNAPSHOT_CLASS, { _id: snapId });
522
+ if (!snap)
523
+ throw new CliError(ExitCode.NotFound, `snapshot ${opts.snapshotId} not found`);
524
+ if (snap.parent !== id) {
525
+ throw new CliError(ExitCode.Validation, `snapshot ${opts.snapshotId} is not a child of document ${ref}`);
526
+ }
527
+ if (opts.markdown && snap.content) {
528
+ try {
529
+ const body = await withTimeout(client.fetchMarkup(SNAPSHOT_CLASS, snap._id, 'content', snap.content, 'markdown'), 5000, '(body fetch timed out)');
530
+ console.log(body);
531
+ return;
532
+ }
533
+ catch {
534
+ console.log(String(snap.content));
535
+ return;
536
+ }
537
+ }
538
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
539
+ json(snap);
540
+ return;
541
+ }
542
+ header(`Snapshot — ${snap.title ?? '(untitled)'}`, { subtitle: `created ${relTime(snap.createdOn)}` });
543
+ kv([
544
+ ['ID', C.emphasis(String(snap._id))],
545
+ ['Document', String(snap.parent ?? '—')],
546
+ ['Author', String(snap.createdBy ?? '—')],
547
+ ['Content-type', String(snap.content?.type ?? '—')],
548
+ ['Size', C.muted(`${String(snap.content ?? '').length} chars`)],
549
+ ['Created', snap.createdOn != null ? `${isoDate(snap.createdOn)} (${relTime(snap.createdOn)})` : C.muted('—')]
550
+ ]);
551
+ if (snap.content && snap.content !== '') {
552
+ console.log();
553
+ console.log(C.emphasis('Content'));
554
+ console.log(C.muted('─'.repeat(20)));
555
+ const body = String(snap.content);
556
+ console.log(body.length > 500 ? body.slice(0, 500) + '…' : body);
557
+ }
558
+ }
559
+ finally {
560
+ await client.close();
561
+ }
562
+ }
563
+ // ---- inline comments ----
564
+ export async function listInlineComments(ref, opts = {}) {
565
+ const client = await connectCli({ url: opts.url, workspace: opts.workspace });
566
+ try {
567
+ const account = await client.getAccount();
568
+ const id = await resolveRef(ref, {
569
+ client,
570
+ classId: DOCUMENT_CLASS,
571
+ workspaceId: account.uuid
572
+ });
573
+ const comments = (await client.findAll('chunter:class:ChatMessage', { attachedTo: id, attachedToClass: DOCUMENT_CLASS, collection: 'comments' }));
574
+ if (shouldJson({ json: opts.json, ci: opts.ci })) {
575
+ json(comments);
576
+ return;
577
+ }
578
+ table(comments, COLUMNS.comment(), { count: true, title: 'inline-comments' });
579
+ }
580
+ finally {
581
+ await client.close();
582
+ }
583
+ }
584
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/resources/document.ts"],"names":[],"mappings":"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"}