@nocoo/zhe 1.13.0 → 1.16.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/dist/api/client.d.ts +21 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +46 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/types.d.ts +43 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/commands/create.d.ts +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +48 -4
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/get.d.ts.map +1 -1
- package/dist/commands/get.js +29 -2
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/idea.d.ts +5 -0
- package/dist/commands/idea.d.ts.map +1 -0
- package/dist/commands/idea.js +406 -0
- package/dist/commands/idea.js.map +1 -0
- package/dist/commands/list.d.ts +21 -2
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +70 -8
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/update.d.ts +3 -3
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +27 -8
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +24 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +94 -6
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zhe idea — Manage ideas (Markdown notes)
|
|
3
|
+
*/
|
|
4
|
+
import * as readline from "node:readline";
|
|
5
|
+
import { defineCommand, pc } from "@nocoo/cli-base";
|
|
6
|
+
import { ApiClient, ApiClientError, EXIT_AUTH_REQUIRED, EXIT_ERROR, EXIT_INVALID_ARGS, EXIT_NOT_FOUND, EXIT_RATE_LIMITED, } from "../api/client.js";
|
|
7
|
+
import { getApiKey } from "../config.js";
|
|
8
|
+
// ── Helpers ──
|
|
9
|
+
function requireAuth() {
|
|
10
|
+
const apiKey = getApiKey();
|
|
11
|
+
if (!apiKey) {
|
|
12
|
+
console.log(pc.red("Not authenticated. Run `zhe login` first."));
|
|
13
|
+
process.exit(EXIT_AUTH_REQUIRED);
|
|
14
|
+
}
|
|
15
|
+
return apiKey;
|
|
16
|
+
}
|
|
17
|
+
function handleApiError(error) {
|
|
18
|
+
if (error instanceof ApiClientError) {
|
|
19
|
+
if (error.status === 400) {
|
|
20
|
+
console.log(pc.red(`Error: ${error.message}`));
|
|
21
|
+
}
|
|
22
|
+
else if (error.status === 404) {
|
|
23
|
+
console.log(pc.red("Idea not found."));
|
|
24
|
+
process.exit(EXIT_NOT_FOUND);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
console.log(pc.red(`Error: ${error.message}`));
|
|
28
|
+
}
|
|
29
|
+
if (error.status === 401) {
|
|
30
|
+
process.exit(EXIT_AUTH_REQUIRED);
|
|
31
|
+
}
|
|
32
|
+
if (error.status === 429) {
|
|
33
|
+
process.exit(EXIT_RATE_LIMITED);
|
|
34
|
+
}
|
|
35
|
+
process.exit(EXIT_ERROR);
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
function formatDate(isoDate) {
|
|
40
|
+
const date = new Date(isoDate);
|
|
41
|
+
return new Intl.DateTimeFormat("en-US", {
|
|
42
|
+
month: "short",
|
|
43
|
+
day: "numeric",
|
|
44
|
+
year: "numeric",
|
|
45
|
+
hour: "numeric",
|
|
46
|
+
minute: "2-digit",
|
|
47
|
+
}).format(date);
|
|
48
|
+
}
|
|
49
|
+
function formatTags(tags) {
|
|
50
|
+
if (tags.length === 0)
|
|
51
|
+
return "";
|
|
52
|
+
return tags.map((t) => `[${t.name}]`).join(" ");
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolve a single tag name to tag ID via API.
|
|
56
|
+
* Returns null if tag is not found or if multiple tags match (with error message printed).
|
|
57
|
+
*/
|
|
58
|
+
async function resolveTagName(client, tagName) {
|
|
59
|
+
const { tags } = await client.listTags();
|
|
60
|
+
const matches = tags.filter((t) => t.name.toLowerCase() === tagName.toLowerCase());
|
|
61
|
+
if (matches.length === 0) {
|
|
62
|
+
console.log(pc.red(`Tag not found: ${tagName}. Create it first.`));
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
if (matches.length > 1) {
|
|
66
|
+
console.log(pc.red(`Multiple tags match "${tagName}". Tag names must be unique. Please rename or delete duplicates via the web UI.`));
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
return matches[0].id;
|
|
70
|
+
}
|
|
71
|
+
async function confirm(message) {
|
|
72
|
+
return new Promise((resolve) => {
|
|
73
|
+
const rl = readline.createInterface({
|
|
74
|
+
input: process.stdin,
|
|
75
|
+
output: process.stdout,
|
|
76
|
+
});
|
|
77
|
+
rl.question(`${message} [y/N] `, (answer) => {
|
|
78
|
+
rl.close();
|
|
79
|
+
resolve(answer.toLowerCase() === "y");
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
// ── Subcommands ──
|
|
84
|
+
const listSubcommand = defineCommand({
|
|
85
|
+
meta: {
|
|
86
|
+
name: "list",
|
|
87
|
+
description: "List all ideas",
|
|
88
|
+
},
|
|
89
|
+
args: {
|
|
90
|
+
limit: {
|
|
91
|
+
type: "string",
|
|
92
|
+
alias: "l",
|
|
93
|
+
description: "Max results (default: 20)",
|
|
94
|
+
},
|
|
95
|
+
tag: {
|
|
96
|
+
type: "string",
|
|
97
|
+
alias: "t",
|
|
98
|
+
description: "Filter by tag name",
|
|
99
|
+
},
|
|
100
|
+
query: {
|
|
101
|
+
type: "string",
|
|
102
|
+
alias: "q",
|
|
103
|
+
description: "Search title and excerpt",
|
|
104
|
+
},
|
|
105
|
+
json: {
|
|
106
|
+
type: "boolean",
|
|
107
|
+
description: "Output as JSON",
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
async run({ args }) {
|
|
111
|
+
const apiKey = requireAuth();
|
|
112
|
+
const client = new ApiClient(apiKey);
|
|
113
|
+
try {
|
|
114
|
+
// Resolve tag name to ID if provided
|
|
115
|
+
let tagId;
|
|
116
|
+
if (args.tag) {
|
|
117
|
+
const resolved = await resolveTagName(client, args.tag);
|
|
118
|
+
if (resolved === null) {
|
|
119
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
120
|
+
}
|
|
121
|
+
tagId = resolved;
|
|
122
|
+
}
|
|
123
|
+
const response = await client.listIdeas({
|
|
124
|
+
limit: args.limit ? Number.parseInt(args.limit, 10) : 20,
|
|
125
|
+
tagId,
|
|
126
|
+
q: args.query,
|
|
127
|
+
});
|
|
128
|
+
if (args.json) {
|
|
129
|
+
console.log(JSON.stringify(response, null, 2));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (response.ideas.length === 0) {
|
|
133
|
+
console.log(pc.yellow("No ideas found."));
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// Table format
|
|
137
|
+
console.log(pc.dim("ID TIME TITLE TAGS"));
|
|
138
|
+
console.log(pc.dim("─".repeat(56)));
|
|
139
|
+
for (const idea of response.ideas) {
|
|
140
|
+
const time = formatDate(idea.createdAt);
|
|
141
|
+
const title = (idea.title || idea.excerpt || "(no content)").slice(0, 24);
|
|
142
|
+
const tags = formatTags(idea.tags);
|
|
143
|
+
console.log(`${pc.cyan(String(idea.id).padEnd(6))}${time.padEnd(17)}${title.padEnd(25)}${pc.yellow(tags)}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
handleApiError(error);
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
const getSubcommand = defineCommand({
|
|
152
|
+
meta: {
|
|
153
|
+
name: "get",
|
|
154
|
+
description: "Get full content of an idea",
|
|
155
|
+
},
|
|
156
|
+
args: {
|
|
157
|
+
id: {
|
|
158
|
+
type: "positional",
|
|
159
|
+
description: "Idea ID",
|
|
160
|
+
required: true,
|
|
161
|
+
},
|
|
162
|
+
json: {
|
|
163
|
+
type: "boolean",
|
|
164
|
+
description: "Output as JSON",
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
async run({ args }) {
|
|
168
|
+
const apiKey = requireAuth();
|
|
169
|
+
const client = new ApiClient(apiKey);
|
|
170
|
+
const id = Number.parseInt(args.id, 10);
|
|
171
|
+
if (Number.isNaN(id)) {
|
|
172
|
+
console.log(pc.red("Invalid idea ID."));
|
|
173
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const response = await client.getIdea(id);
|
|
177
|
+
if (args.json) {
|
|
178
|
+
console.log(JSON.stringify(response, null, 2));
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const { idea } = response;
|
|
182
|
+
const tags = formatTags(idea.tags);
|
|
183
|
+
const title = idea.title || formatDate(idea.createdAt);
|
|
184
|
+
console.log(pc.dim("─".repeat(40)));
|
|
185
|
+
console.log(`Idea ${pc.cyan(`#${idea.id}`)} — ${pc.bold(title)}`);
|
|
186
|
+
if (tags)
|
|
187
|
+
console.log(`Tags: ${pc.yellow(tags)}`);
|
|
188
|
+
console.log(pc.dim("─".repeat(40)));
|
|
189
|
+
console.log();
|
|
190
|
+
console.log(idea.content);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
handleApiError(error);
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
const addSubcommand = defineCommand({
|
|
198
|
+
meta: {
|
|
199
|
+
name: "add",
|
|
200
|
+
description: "Create a new idea",
|
|
201
|
+
},
|
|
202
|
+
args: {
|
|
203
|
+
content: {
|
|
204
|
+
type: "positional",
|
|
205
|
+
description: "Idea content (Markdown)",
|
|
206
|
+
required: true,
|
|
207
|
+
},
|
|
208
|
+
title: {
|
|
209
|
+
type: "string",
|
|
210
|
+
alias: "t",
|
|
211
|
+
description: "Optional title",
|
|
212
|
+
},
|
|
213
|
+
tag: {
|
|
214
|
+
type: "string",
|
|
215
|
+
alias: "T",
|
|
216
|
+
description: "Add tag by name",
|
|
217
|
+
},
|
|
218
|
+
json: {
|
|
219
|
+
type: "boolean",
|
|
220
|
+
description: "Output as JSON",
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
async run({ args }) {
|
|
224
|
+
const apiKey = requireAuth();
|
|
225
|
+
const client = new ApiClient(apiKey);
|
|
226
|
+
const content = args.content;
|
|
227
|
+
if (!content.trim()) {
|
|
228
|
+
console.log(pc.red("Content cannot be empty."));
|
|
229
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
// Resolve tag name to ID if provided
|
|
233
|
+
let tagIds;
|
|
234
|
+
if (args.tag) {
|
|
235
|
+
const tagId = await resolveTagName(client, args.tag);
|
|
236
|
+
if (tagId === null) {
|
|
237
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
238
|
+
}
|
|
239
|
+
tagIds = [tagId];
|
|
240
|
+
}
|
|
241
|
+
const request = {
|
|
242
|
+
content,
|
|
243
|
+
...(args.title && { title: args.title }),
|
|
244
|
+
...(tagIds && { tagIds }),
|
|
245
|
+
};
|
|
246
|
+
const response = await client.createIdea(request);
|
|
247
|
+
if (args.json) {
|
|
248
|
+
console.log(JSON.stringify(response, null, 2));
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const { idea } = response;
|
|
252
|
+
const title = idea.title || formatDate(idea.createdAt);
|
|
253
|
+
console.log(pc.green(`✓ Created idea ${pc.cyan(`#${idea.id}`)} (${title})`));
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
handleApiError(error);
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
});
|
|
260
|
+
const updateSubcommand = defineCommand({
|
|
261
|
+
meta: {
|
|
262
|
+
name: "update",
|
|
263
|
+
description: "Update an existing idea",
|
|
264
|
+
},
|
|
265
|
+
args: {
|
|
266
|
+
id: {
|
|
267
|
+
type: "positional",
|
|
268
|
+
description: "Idea ID",
|
|
269
|
+
required: true,
|
|
270
|
+
},
|
|
271
|
+
content: {
|
|
272
|
+
type: "string",
|
|
273
|
+
alias: "c",
|
|
274
|
+
description: "New content",
|
|
275
|
+
},
|
|
276
|
+
title: {
|
|
277
|
+
type: "string",
|
|
278
|
+
alias: "t",
|
|
279
|
+
description: "New title (use empty string to clear)",
|
|
280
|
+
},
|
|
281
|
+
tag: {
|
|
282
|
+
type: "string",
|
|
283
|
+
alias: "T",
|
|
284
|
+
description: "Set tag by name (replaces all existing tags)",
|
|
285
|
+
},
|
|
286
|
+
json: {
|
|
287
|
+
type: "boolean",
|
|
288
|
+
description: "Output as JSON",
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
async run({ args }) {
|
|
292
|
+
const apiKey = requireAuth();
|
|
293
|
+
const client = new ApiClient(apiKey);
|
|
294
|
+
const id = Number.parseInt(args.id, 10);
|
|
295
|
+
if (Number.isNaN(id)) {
|
|
296
|
+
console.log(pc.red("Invalid idea ID."));
|
|
297
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
298
|
+
}
|
|
299
|
+
// Build update request
|
|
300
|
+
const request = {};
|
|
301
|
+
if (args.content !== undefined)
|
|
302
|
+
request.content = args.content;
|
|
303
|
+
if (args.title !== undefined) {
|
|
304
|
+
request.title = args.title === "" ? null : args.title;
|
|
305
|
+
}
|
|
306
|
+
// Resolve tag name if provided
|
|
307
|
+
if (args.tag !== undefined) {
|
|
308
|
+
if (args.tag === "") {
|
|
309
|
+
// Empty string means clear all tags
|
|
310
|
+
request.tagIds = [];
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
const tagId = await resolveTagName(client, args.tag);
|
|
314
|
+
if (tagId === null) {
|
|
315
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
316
|
+
}
|
|
317
|
+
request.tagIds = [tagId];
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
if (Object.keys(request).length === 0) {
|
|
321
|
+
console.log(pc.yellow("No changes specified."));
|
|
322
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
323
|
+
}
|
|
324
|
+
try {
|
|
325
|
+
const response = await client.updateIdea(id, request);
|
|
326
|
+
if (args.json) {
|
|
327
|
+
console.log(JSON.stringify(response, null, 2));
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
const { idea } = response;
|
|
331
|
+
const title = idea.title || formatDate(idea.createdAt);
|
|
332
|
+
console.log(pc.green(`✓ Updated idea ${pc.cyan(`#${idea.id}`)} (${title})`));
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
handleApiError(error);
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
const deleteSubcommand = defineCommand({
|
|
340
|
+
meta: {
|
|
341
|
+
name: "delete",
|
|
342
|
+
description: "Delete an idea",
|
|
343
|
+
},
|
|
344
|
+
args: {
|
|
345
|
+
id: {
|
|
346
|
+
type: "positional",
|
|
347
|
+
description: "Idea ID",
|
|
348
|
+
required: true,
|
|
349
|
+
},
|
|
350
|
+
yes: {
|
|
351
|
+
type: "boolean",
|
|
352
|
+
alias: "y",
|
|
353
|
+
description: "Skip confirmation",
|
|
354
|
+
},
|
|
355
|
+
json: {
|
|
356
|
+
type: "boolean",
|
|
357
|
+
description: "Output as JSON",
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
async run({ args }) {
|
|
361
|
+
const apiKey = requireAuth();
|
|
362
|
+
const client = new ApiClient(apiKey);
|
|
363
|
+
const id = Number.parseInt(args.id, 10);
|
|
364
|
+
if (Number.isNaN(id)) {
|
|
365
|
+
console.log(pc.red("Invalid idea ID."));
|
|
366
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
367
|
+
}
|
|
368
|
+
try {
|
|
369
|
+
// Only fetch idea for confirmation prompt (requires ideas:read)
|
|
370
|
+
// With --yes flag, skip prefetch to allow write-only keys
|
|
371
|
+
if (!args.yes) {
|
|
372
|
+
const { idea } = await client.getIdea(id);
|
|
373
|
+
const title = idea.title || formatDate(idea.createdAt);
|
|
374
|
+
const confirmed = await confirm(`Delete idea #${id} (${title})?`);
|
|
375
|
+
if (!confirmed) {
|
|
376
|
+
console.log(pc.dim("Cancelled."));
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
await client.deleteIdea(id);
|
|
381
|
+
if (args.json) {
|
|
382
|
+
console.log(JSON.stringify({ success: true, id }, null, 2));
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
console.log(pc.green(`✓ Deleted idea ${pc.cyan(`#${id}`)}`));
|
|
386
|
+
}
|
|
387
|
+
catch (error) {
|
|
388
|
+
handleApiError(error);
|
|
389
|
+
}
|
|
390
|
+
},
|
|
391
|
+
});
|
|
392
|
+
// ── Main command ──
|
|
393
|
+
export const ideaCommand = defineCommand({
|
|
394
|
+
meta: {
|
|
395
|
+
name: "idea",
|
|
396
|
+
description: "Manage ideas (Markdown notes)",
|
|
397
|
+
},
|
|
398
|
+
subCommands: {
|
|
399
|
+
list: listSubcommand,
|
|
400
|
+
get: getSubcommand,
|
|
401
|
+
add: addSubcommand,
|
|
402
|
+
update: updateSubcommand,
|
|
403
|
+
delete: deleteSubcommand,
|
|
404
|
+
},
|
|
405
|
+
});
|
|
406
|
+
//# sourceMappingURL=idea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idea.js","sourceRoot":"","sources":["../../src/commands/idea.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/list.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare const listCommand: import("citty").CommandDef<{
|
|
|
10
10
|
readonly folder: {
|
|
11
11
|
readonly type: "string";
|
|
12
12
|
readonly alias: "f";
|
|
13
|
-
readonly description: "Filter by folder ID";
|
|
13
|
+
readonly description: "Filter by folder name or ID";
|
|
14
14
|
};
|
|
15
15
|
readonly inbox: {
|
|
16
16
|
readonly type: "boolean";
|
|
@@ -20,7 +20,16 @@ export declare const listCommand: import("citty").CommandDef<{
|
|
|
20
20
|
readonly tag: {
|
|
21
21
|
readonly type: "string";
|
|
22
22
|
readonly alias: "t";
|
|
23
|
-
readonly description: "Filter by tag ID";
|
|
23
|
+
readonly description: "Filter by tag name or ID";
|
|
24
|
+
};
|
|
25
|
+
readonly sort: {
|
|
26
|
+
readonly type: "string";
|
|
27
|
+
readonly alias: "s";
|
|
28
|
+
readonly description: "Sort by: created (default), clicks";
|
|
29
|
+
};
|
|
30
|
+
readonly order: {
|
|
31
|
+
readonly type: "string";
|
|
32
|
+
readonly description: "Sort order: desc (default), asc";
|
|
24
33
|
};
|
|
25
34
|
readonly limit: {
|
|
26
35
|
readonly type: "string";
|
|
@@ -40,5 +49,15 @@ export declare const listCommand: import("citty").CommandDef<{
|
|
|
40
49
|
readonly type: "boolean";
|
|
41
50
|
readonly description: "Output short URLs only";
|
|
42
51
|
};
|
|
52
|
+
readonly wide: {
|
|
53
|
+
readonly type: "boolean";
|
|
54
|
+
readonly alias: "w";
|
|
55
|
+
readonly description: "Show full URLs without truncation";
|
|
56
|
+
};
|
|
57
|
+
readonly count: {
|
|
58
|
+
readonly type: "boolean";
|
|
59
|
+
readonly alias: "c";
|
|
60
|
+
readonly description: "Show only the count of matching links";
|
|
61
|
+
};
|
|
43
62
|
}>;
|
|
44
63
|
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkKtB,CAAC"}
|
package/dist/commands/list.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { defineCommand, pc } from "@nocoo/cli-base";
|
|
5
5
|
import { ApiClient, ApiClientError, EXIT_AUTH_REQUIRED, EXIT_ERROR, EXIT_INVALID_ARGS, EXIT_RATE_LIMITED, } from "../api/client.js";
|
|
6
6
|
import { getApiKey, getOutputFormat } from "../config.js";
|
|
7
|
-
import { formatLinksMinimal, formatLinksTable } from "../utils.js";
|
|
7
|
+
import { formatLinksMinimal, formatLinksTable, resolveFolderName, resolveTagName, } from "../utils.js";
|
|
8
8
|
export const listCommand = defineCommand({
|
|
9
9
|
meta: {
|
|
10
10
|
name: "list",
|
|
@@ -19,7 +19,7 @@ export const listCommand = defineCommand({
|
|
|
19
19
|
folder: {
|
|
20
20
|
type: "string",
|
|
21
21
|
alias: "f",
|
|
22
|
-
description: "Filter by folder ID",
|
|
22
|
+
description: "Filter by folder name or ID",
|
|
23
23
|
},
|
|
24
24
|
inbox: {
|
|
25
25
|
type: "boolean",
|
|
@@ -29,7 +29,16 @@ export const listCommand = defineCommand({
|
|
|
29
29
|
tag: {
|
|
30
30
|
type: "string",
|
|
31
31
|
alias: "t",
|
|
32
|
-
description: "Filter by tag ID",
|
|
32
|
+
description: "Filter by tag name or ID",
|
|
33
|
+
},
|
|
34
|
+
sort: {
|
|
35
|
+
type: "string",
|
|
36
|
+
alias: "s",
|
|
37
|
+
description: "Sort by: created (default), clicks",
|
|
38
|
+
},
|
|
39
|
+
order: {
|
|
40
|
+
type: "string",
|
|
41
|
+
description: "Sort order: desc (default), asc",
|
|
33
42
|
},
|
|
34
43
|
limit: {
|
|
35
44
|
type: "string",
|
|
@@ -49,6 +58,16 @@ export const listCommand = defineCommand({
|
|
|
49
58
|
type: "boolean",
|
|
50
59
|
description: "Output short URLs only",
|
|
51
60
|
},
|
|
61
|
+
wide: {
|
|
62
|
+
type: "boolean",
|
|
63
|
+
alias: "w",
|
|
64
|
+
description: "Show full URLs without truncation",
|
|
65
|
+
},
|
|
66
|
+
count: {
|
|
67
|
+
type: "boolean",
|
|
68
|
+
alias: "c",
|
|
69
|
+
description: "Show only the count of matching links",
|
|
70
|
+
},
|
|
52
71
|
},
|
|
53
72
|
async run({ args }) {
|
|
54
73
|
const apiKey = getApiKey();
|
|
@@ -61,6 +80,16 @@ export const listCommand = defineCommand({
|
|
|
61
80
|
console.log(pc.red("Cannot use --inbox and --folder together."));
|
|
62
81
|
process.exit(EXIT_INVALID_ARGS);
|
|
63
82
|
}
|
|
83
|
+
// Validate sort option
|
|
84
|
+
if (args.sort && args.sort !== "created" && args.sort !== "clicks") {
|
|
85
|
+
console.log(pc.red("Invalid --sort value. Use 'created' or 'clicks'."));
|
|
86
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
87
|
+
}
|
|
88
|
+
// Validate order option
|
|
89
|
+
if (args.order && args.order !== "asc" && args.order !== "desc") {
|
|
90
|
+
console.log(pc.red("Invalid --order value. Use 'asc' or 'desc'."));
|
|
91
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
92
|
+
}
|
|
64
93
|
const client = new ApiClient(apiKey);
|
|
65
94
|
try {
|
|
66
95
|
// Build params object, only including defined fields
|
|
@@ -73,11 +102,44 @@ export const listCommand = defineCommand({
|
|
|
73
102
|
params.query = args.query;
|
|
74
103
|
if (args.inbox)
|
|
75
104
|
params.inbox = true;
|
|
76
|
-
if (args.
|
|
77
|
-
params.
|
|
78
|
-
if (args.
|
|
79
|
-
params.
|
|
105
|
+
if (args.sort)
|
|
106
|
+
params.sort = args.sort;
|
|
107
|
+
if (args.order)
|
|
108
|
+
params.order = args.order;
|
|
109
|
+
// Resolve folder name to ID
|
|
110
|
+
if (args.folder) {
|
|
111
|
+
const folderId = await resolveFolderName(client, args.folder);
|
|
112
|
+
if (folderId === null) {
|
|
113
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
114
|
+
}
|
|
115
|
+
params.folderId = folderId;
|
|
116
|
+
}
|
|
117
|
+
// Resolve tag name to ID
|
|
118
|
+
if (args.tag) {
|
|
119
|
+
const tagId = await resolveTagName(client, args.tag);
|
|
120
|
+
if (tagId === null) {
|
|
121
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
122
|
+
}
|
|
123
|
+
params.tagId = tagId;
|
|
124
|
+
}
|
|
80
125
|
const response = await client.listLinks(params);
|
|
126
|
+
// Count-only mode: use total from API response
|
|
127
|
+
if (args.count) {
|
|
128
|
+
console.log(response.total);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Build folder name map for table output
|
|
132
|
+
let folderMap;
|
|
133
|
+
const hasFolders = response.links.some((l) => l.folderId);
|
|
134
|
+
if (hasFolders) {
|
|
135
|
+
try {
|
|
136
|
+
const foldersResponse = await client.listFolders();
|
|
137
|
+
folderMap = new Map(foldersResponse.folders.map((f) => [f.id, f.name]));
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// If folder fetch fails, continue without folder names
|
|
141
|
+
}
|
|
142
|
+
}
|
|
81
143
|
// Determine output format
|
|
82
144
|
let format = getOutputFormat();
|
|
83
145
|
if (args.json)
|
|
@@ -92,7 +154,7 @@ export const listCommand = defineCommand({
|
|
|
92
154
|
console.log(formatLinksMinimal(response.links));
|
|
93
155
|
break;
|
|
94
156
|
default:
|
|
95
|
-
console.log(formatLinksTable(response.links));
|
|
157
|
+
console.log(formatLinksTable(response.links, { wide: args.wide, folderMap }));
|
|
96
158
|
}
|
|
97
159
|
}
|
|
98
160
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACN,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ export declare const updateCommand: import("citty").CommandDef<{
|
|
|
20
20
|
readonly folder: {
|
|
21
21
|
readonly type: "string";
|
|
22
22
|
readonly alias: "f";
|
|
23
|
-
readonly description: "
|
|
23
|
+
readonly description: "Folder name or ID (use \"none\" to remove)";
|
|
24
24
|
};
|
|
25
25
|
readonly note: {
|
|
26
26
|
readonly type: "string";
|
|
@@ -48,11 +48,11 @@ export declare const updateCommand: import("citty").CommandDef<{
|
|
|
48
48
|
};
|
|
49
49
|
readonly "add-tag": {
|
|
50
50
|
readonly type: "string";
|
|
51
|
-
readonly description: "Add tag to link (by ID)";
|
|
51
|
+
readonly description: "Add tag to link (by name or ID)";
|
|
52
52
|
};
|
|
53
53
|
readonly "remove-tag": {
|
|
54
54
|
readonly type: "string";
|
|
55
|
-
readonly description: "Remove tag from link (by ID)";
|
|
55
|
+
readonly description: "Remove tag from link (by name or ID)";
|
|
56
56
|
};
|
|
57
57
|
readonly json: {
|
|
58
58
|
readonly type: "boolean";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2KxB,CAAC"}
|