@nocoo/zhe 1.11.3 → 1.15.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.
- package/dist/api/client.d.ts +29 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +65 -2
- package/dist/api/client.js.map +1 -1
- package/dist/api/types.d.ts +70 -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/folders.d.ts +10 -0
- package/dist/commands/folders.d.ts.map +1 -0
- package/dist/commands/folders.js +58 -0
- package/dist/commands/folders.js.map +1 -0
- 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/inbox.d.ts +19 -0
- package/dist/commands/inbox.d.ts.map +1 -0
- package/dist/commands/inbox.js +81 -0
- package/dist/commands/inbox.js.map +1 -0
- package/dist/commands/list.d.ts +26 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +71 -6
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/tags.d.ts +10 -0
- package/dist/commands/tags.d.ts.map +1 -0
- package/dist/commands/tags.js +58 -0
- package/dist/commands/tags.js.map +1 -0
- package/dist/commands/update.d.ts +23 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +63 -5
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +33 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +128 -4
- package/dist/utils.js.map +1 -1
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +28 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
package/dist/commands/list.js
CHANGED
|
@@ -2,19 +2,34 @@
|
|
|
2
2
|
* zhe list — List all links
|
|
3
3
|
*/
|
|
4
4
|
import { defineCommand, pc } from "@nocoo/cli-base";
|
|
5
|
-
import { ApiClient, ApiClientError, EXIT_AUTH_REQUIRED, EXIT_ERROR, EXIT_RATE_LIMITED, } from "../api/client.js";
|
|
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",
|
|
11
11
|
description: "List all links",
|
|
12
12
|
},
|
|
13
13
|
args: {
|
|
14
|
+
query: {
|
|
15
|
+
type: "string",
|
|
16
|
+
alias: "q",
|
|
17
|
+
description: "Search by slug, URL, note, or title",
|
|
18
|
+
},
|
|
14
19
|
folder: {
|
|
15
20
|
type: "string",
|
|
16
21
|
alias: "f",
|
|
17
|
-
description: "Filter by folder ID",
|
|
22
|
+
description: "Filter by folder name or ID",
|
|
23
|
+
},
|
|
24
|
+
inbox: {
|
|
25
|
+
type: "boolean",
|
|
26
|
+
alias: "i",
|
|
27
|
+
description: "Show uncategorized links only (no folder)",
|
|
28
|
+
},
|
|
29
|
+
tag: {
|
|
30
|
+
type: "string",
|
|
31
|
+
alias: "t",
|
|
32
|
+
description: "Filter by tag name or ID",
|
|
18
33
|
},
|
|
19
34
|
limit: {
|
|
20
35
|
type: "string",
|
|
@@ -34,6 +49,16 @@ export const listCommand = defineCommand({
|
|
|
34
49
|
type: "boolean",
|
|
35
50
|
description: "Output short URLs only",
|
|
36
51
|
},
|
|
52
|
+
wide: {
|
|
53
|
+
type: "boolean",
|
|
54
|
+
alias: "w",
|
|
55
|
+
description: "Show full URLs without truncation",
|
|
56
|
+
},
|
|
57
|
+
count: {
|
|
58
|
+
type: "boolean",
|
|
59
|
+
alias: "c",
|
|
60
|
+
description: "Show only the count of matching links",
|
|
61
|
+
},
|
|
37
62
|
},
|
|
38
63
|
async run({ args }) {
|
|
39
64
|
const apiKey = getApiKey();
|
|
@@ -41,6 +66,11 @@ export const listCommand = defineCommand({
|
|
|
41
66
|
console.log(pc.red("Not authenticated. Run `zhe login` first."));
|
|
42
67
|
process.exit(EXIT_AUTH_REQUIRED);
|
|
43
68
|
}
|
|
69
|
+
// Validate mutually exclusive options
|
|
70
|
+
if (args.inbox && args.folder) {
|
|
71
|
+
console.log(pc.red("Cannot use --inbox and --folder together."));
|
|
72
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
73
|
+
}
|
|
44
74
|
const client = new ApiClient(apiKey);
|
|
45
75
|
try {
|
|
46
76
|
// Build params object, only including defined fields
|
|
@@ -49,9 +79,44 @@ export const listCommand = defineCommand({
|
|
|
49
79
|
params.limit = Number.parseInt(args.limit, 10);
|
|
50
80
|
if (args.offset)
|
|
51
81
|
params.offset = Number.parseInt(args.offset, 10);
|
|
52
|
-
if (args.
|
|
53
|
-
params.
|
|
82
|
+
if (args.query)
|
|
83
|
+
params.query = args.query;
|
|
84
|
+
if (args.inbox)
|
|
85
|
+
params.inbox = true;
|
|
86
|
+
// Resolve folder name to ID
|
|
87
|
+
if (args.folder) {
|
|
88
|
+
const folderId = await resolveFolderName(client, args.folder);
|
|
89
|
+
if (folderId === null) {
|
|
90
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
91
|
+
}
|
|
92
|
+
params.folderId = folderId;
|
|
93
|
+
}
|
|
94
|
+
// Resolve tag name to ID
|
|
95
|
+
if (args.tag) {
|
|
96
|
+
const tagId = await resolveTagName(client, args.tag);
|
|
97
|
+
if (tagId === null) {
|
|
98
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
99
|
+
}
|
|
100
|
+
params.tagId = tagId;
|
|
101
|
+
}
|
|
54
102
|
const response = await client.listLinks(params);
|
|
103
|
+
// Count-only mode: use total from API response
|
|
104
|
+
if (args.count) {
|
|
105
|
+
console.log(response.total);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Build folder name map for table output
|
|
109
|
+
let folderMap;
|
|
110
|
+
const hasFolders = response.links.some((l) => l.folderId);
|
|
111
|
+
if (hasFolders) {
|
|
112
|
+
try {
|
|
113
|
+
const foldersResponse = await client.listFolders();
|
|
114
|
+
folderMap = new Map(foldersResponse.folders.map((f) => [f.id, f.name]));
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// If folder fetch fails, continue without folder names
|
|
118
|
+
}
|
|
119
|
+
}
|
|
55
120
|
// Determine output format
|
|
56
121
|
let format = getOutputFormat();
|
|
57
122
|
if (args.json)
|
|
@@ -66,7 +131,7 @@ export const listCommand = defineCommand({
|
|
|
66
131
|
console.log(formatLinksMinimal(response.links));
|
|
67
132
|
break;
|
|
68
133
|
default:
|
|
69
|
-
console.log(formatLinksTable(response.links));
|
|
134
|
+
console.log(formatLinksTable(response.links, { wide: args.wide, folderMap }));
|
|
70
135
|
}
|
|
71
136
|
}
|
|
72
137
|
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,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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/commands/tags.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,eAAO,MAAM,WAAW;;;;;EAoCtB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zhe tags — List all tags
|
|
3
|
+
*/
|
|
4
|
+
import { defineCommand, pc } from "@nocoo/cli-base";
|
|
5
|
+
import { ApiClient, ApiClientError, EXIT_AUTH_REQUIRED, EXIT_ERROR, EXIT_RATE_LIMITED, } from "../api/client.js";
|
|
6
|
+
import { getApiKey } from "../config.js";
|
|
7
|
+
import { formatTagsTable } from "../utils.js";
|
|
8
|
+
export const tagsCommand = defineCommand({
|
|
9
|
+
meta: {
|
|
10
|
+
name: "tags",
|
|
11
|
+
description: "List all tags",
|
|
12
|
+
},
|
|
13
|
+
args: {
|
|
14
|
+
json: {
|
|
15
|
+
type: "boolean",
|
|
16
|
+
description: "Output as JSON",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
async run({ args }) {
|
|
20
|
+
const apiKey = getApiKey();
|
|
21
|
+
if (!apiKey) {
|
|
22
|
+
console.log(pc.red("Not authenticated. Run `zhe login` first."));
|
|
23
|
+
process.exit(EXIT_AUTH_REQUIRED);
|
|
24
|
+
}
|
|
25
|
+
const client = new ApiClient(apiKey);
|
|
26
|
+
try {
|
|
27
|
+
const response = await client.listTags();
|
|
28
|
+
if (args.json) {
|
|
29
|
+
console.log(JSON.stringify(response, null, 2));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
if (response.tags.length === 0) {
|
|
33
|
+
console.log(pc.dim("No tags found."));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log(formatTagsTable(response.tags));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
handleApiError(error);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
function handleApiError(error) {
|
|
46
|
+
if (error instanceof ApiClientError) {
|
|
47
|
+
console.log(pc.red(`Error: ${error.message}`));
|
|
48
|
+
if (error.status === 401) {
|
|
49
|
+
process.exit(EXIT_AUTH_REQUIRED);
|
|
50
|
+
}
|
|
51
|
+
if (error.status === 429) {
|
|
52
|
+
process.exit(EXIT_RATE_LIMITED);
|
|
53
|
+
}
|
|
54
|
+
process.exit(EXIT_ERROR);
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/commands/tags.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,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE;QACL,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,eAAe;KAC5B;IACD,IAAI,EAAE;QACL,IAAI,EAAE;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,gBAAgB;SAC7B;KACD;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;YAEzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACP,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7C,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,cAAc,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACF,CAAC;CACD,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,KAAc;IACrC,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,KAAK,CAAC;AACb,CAAC"}
|
|
@@ -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";
|
|
@@ -32,6 +32,28 @@ export declare const updateCommand: import("citty").CommandDef<{
|
|
|
32
32
|
readonly alias: "e";
|
|
33
33
|
readonly description: "New expiration (use \"never\" to remove)";
|
|
34
34
|
};
|
|
35
|
+
readonly title: {
|
|
36
|
+
readonly type: "string";
|
|
37
|
+
readonly alias: "t";
|
|
38
|
+
readonly description: "Meta title (use \"\" to clear)";
|
|
39
|
+
};
|
|
40
|
+
readonly desc: {
|
|
41
|
+
readonly type: "string";
|
|
42
|
+
readonly alias: "d";
|
|
43
|
+
readonly description: "Meta description (use \"\" to clear)";
|
|
44
|
+
};
|
|
45
|
+
readonly screenshot: {
|
|
46
|
+
readonly type: "string";
|
|
47
|
+
readonly description: "Screenshot URL (use \"\" to clear)";
|
|
48
|
+
};
|
|
49
|
+
readonly "add-tag": {
|
|
50
|
+
readonly type: "string";
|
|
51
|
+
readonly description: "Add tag to link (by name or ID)";
|
|
52
|
+
};
|
|
53
|
+
readonly "remove-tag": {
|
|
54
|
+
readonly type: "string";
|
|
55
|
+
readonly description: "Remove tag from link (by name or ID)";
|
|
56
|
+
};
|
|
35
57
|
readonly json: {
|
|
36
58
|
readonly type: "boolean";
|
|
37
59
|
readonly description: "Output as JSON";
|
|
@@ -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"}
|
package/dist/commands/update.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_NOT_FOUND, EXIT_RATE_LIMITED, } from "../api/client.js";
|
|
6
6
|
import { getApiKey } from "../config.js";
|
|
7
|
-
import { parseLinkId } from "../utils.js";
|
|
7
|
+
import { parseLinkId, resolveFolderName, resolveTagName } from "../utils.js";
|
|
8
8
|
export const updateCommand = defineCommand({
|
|
9
9
|
meta: {
|
|
10
10
|
name: "update",
|
|
@@ -29,7 +29,7 @@ export const updateCommand = defineCommand({
|
|
|
29
29
|
folder: {
|
|
30
30
|
type: "string",
|
|
31
31
|
alias: "f",
|
|
32
|
-
description: '
|
|
32
|
+
description: 'Folder name or ID (use "none" to remove)',
|
|
33
33
|
},
|
|
34
34
|
note: {
|
|
35
35
|
type: "string",
|
|
@@ -41,6 +41,28 @@ export const updateCommand = defineCommand({
|
|
|
41
41
|
alias: "e",
|
|
42
42
|
description: 'New expiration (use "never" to remove)',
|
|
43
43
|
},
|
|
44
|
+
title: {
|
|
45
|
+
type: "string",
|
|
46
|
+
alias: "t",
|
|
47
|
+
description: 'Meta title (use "" to clear)',
|
|
48
|
+
},
|
|
49
|
+
desc: {
|
|
50
|
+
type: "string",
|
|
51
|
+
alias: "d",
|
|
52
|
+
description: 'Meta description (use "" to clear)',
|
|
53
|
+
},
|
|
54
|
+
screenshot: {
|
|
55
|
+
type: "string",
|
|
56
|
+
description: 'Screenshot URL (use "" to clear)',
|
|
57
|
+
},
|
|
58
|
+
"add-tag": {
|
|
59
|
+
type: "string",
|
|
60
|
+
description: "Add tag to link (by name or ID)",
|
|
61
|
+
},
|
|
62
|
+
"remove-tag": {
|
|
63
|
+
type: "string",
|
|
64
|
+
description: "Remove tag from link (by name or ID)",
|
|
65
|
+
},
|
|
44
66
|
json: {
|
|
45
67
|
type: "boolean",
|
|
46
68
|
description: "Output as JSON",
|
|
@@ -58,6 +80,7 @@ export const updateCommand = defineCommand({
|
|
|
58
80
|
console.log(pc.red("Invalid link ID. Must be a number."));
|
|
59
81
|
process.exit(EXIT_INVALID_ARGS);
|
|
60
82
|
}
|
|
83
|
+
const client = new ApiClient(apiKey);
|
|
61
84
|
// Build update payload
|
|
62
85
|
const data = {};
|
|
63
86
|
if (args.url !== undefined) {
|
|
@@ -71,8 +94,18 @@ export const updateCommand = defineCommand({
|
|
|
71
94
|
if (args.slug !== undefined) {
|
|
72
95
|
data.slug = args.slug;
|
|
73
96
|
}
|
|
97
|
+
// Resolve folder name to ID
|
|
74
98
|
if (args.folder !== undefined) {
|
|
75
|
-
|
|
99
|
+
if (args.folder === "none") {
|
|
100
|
+
data.folderId = null;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
const folderId = await resolveFolderName(client, args.folder);
|
|
104
|
+
if (folderId === null) {
|
|
105
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
106
|
+
}
|
|
107
|
+
data.folderId = folderId;
|
|
108
|
+
}
|
|
76
109
|
}
|
|
77
110
|
if (args.note !== undefined) {
|
|
78
111
|
data.note = args.note === "" ? null : args.note;
|
|
@@ -80,13 +113,38 @@ export const updateCommand = defineCommand({
|
|
|
80
113
|
if (args.expires !== undefined) {
|
|
81
114
|
data.expiresAt = args.expires === "never" ? null : args.expires;
|
|
82
115
|
}
|
|
116
|
+
if (args.title !== undefined) {
|
|
117
|
+
data.metaTitle = args.title === "" ? null : args.title;
|
|
118
|
+
}
|
|
119
|
+
if (args.desc !== undefined) {
|
|
120
|
+
data.metaDescription = args.desc === "" ? null : args.desc;
|
|
121
|
+
}
|
|
122
|
+
if (args.screenshot !== undefined) {
|
|
123
|
+
data.screenshotUrl = args.screenshot === "" ? null : args.screenshot;
|
|
124
|
+
}
|
|
125
|
+
// Resolve tag names to IDs
|
|
126
|
+
const addTag = args["add-tag"];
|
|
127
|
+
const removeTag = args["remove-tag"];
|
|
128
|
+
if (addTag) {
|
|
129
|
+
const tagId = await resolveTagName(client, addTag);
|
|
130
|
+
if (tagId === null) {
|
|
131
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
132
|
+
}
|
|
133
|
+
data.addTags = [tagId];
|
|
134
|
+
}
|
|
135
|
+
if (removeTag) {
|
|
136
|
+
const tagId = await resolveTagName(client, removeTag);
|
|
137
|
+
if (tagId === null) {
|
|
138
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
139
|
+
}
|
|
140
|
+
data.removeTags = [tagId];
|
|
141
|
+
}
|
|
83
142
|
// Check if there's anything to update
|
|
84
143
|
if (Object.keys(data).length === 0) {
|
|
85
144
|
console.log(pc.yellow("No changes specified."));
|
|
86
|
-
console.log(pc.dim("Use --url, --slug, --folder, --note, or --
|
|
145
|
+
console.log(pc.dim("Use --url, --slug, --folder, --note, --expires, --title, --desc, --screenshot, --add-tag, or --remove-tag"));
|
|
87
146
|
process.exit(EXIT_INVALID_ARGS);
|
|
88
147
|
}
|
|
89
|
-
const client = new ApiClient(apiKey);
|
|
90
148
|
try {
|
|
91
149
|
const response = await client.updateLink(id, data);
|
|
92
150
|
if (args.json) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.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,cAAc,EACd,iBAAiB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,22 +5,31 @@
|
|
|
5
5
|
import { defineCommand, runMain } from "@nocoo/cli-base";
|
|
6
6
|
import { createCommand } from "./commands/create.js";
|
|
7
7
|
import { deleteCommand } from "./commands/delete.js";
|
|
8
|
+
import { foldersCommand } from "./commands/folders.js";
|
|
8
9
|
import { getCommand } from "./commands/get.js";
|
|
10
|
+
import { ideaCommand } from "./commands/idea.js";
|
|
11
|
+
import { inboxCommand } from "./commands/inbox.js";
|
|
9
12
|
import { listCommand } from "./commands/list.js";
|
|
10
13
|
import { loginCommand } from "./commands/login.js";
|
|
11
14
|
import { logoutCommand } from "./commands/logout.js";
|
|
12
15
|
import { openCommand } from "./commands/open.js";
|
|
16
|
+
import { tagsCommand } from "./commands/tags.js";
|
|
13
17
|
import { updateCommand } from "./commands/update.js";
|
|
18
|
+
import { CLI_VERSION } from "./version.js";
|
|
14
19
|
const main = defineCommand({
|
|
15
20
|
meta: {
|
|
16
21
|
name: "zhe",
|
|
17
|
-
version:
|
|
22
|
+
version: CLI_VERSION,
|
|
18
23
|
description: "CLI for managing zhe.to short links",
|
|
19
24
|
},
|
|
20
25
|
subCommands: {
|
|
21
26
|
login: loginCommand,
|
|
22
27
|
logout: logoutCommand,
|
|
23
28
|
list: listCommand,
|
|
29
|
+
inbox: inboxCommand,
|
|
30
|
+
folders: foldersCommand,
|
|
31
|
+
tags: tagsCommand,
|
|
32
|
+
idea: ideaCommand,
|
|
24
33
|
create: createCommand,
|
|
25
34
|
get: getCommand,
|
|
26
35
|
update: updateCommand,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,IAAI,GAAG,aAAa,CAAC;IAC1B,IAAI,EAAE;QACL,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,qCAAqC;KAClD;IACD,WAAW,EAAE;QACZ,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,aAAa;QACrB,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,WAAW;KACjB;CACD,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared utilities for zhe CLI
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
4
|
+
import type { ApiClient } from "./api/client.js";
|
|
5
|
+
import type { Folder, Link, Tag } from "./api/types.js";
|
|
5
6
|
/**
|
|
6
7
|
* Mask an API key for display: zhe_abcd...wxyz
|
|
7
8
|
*/
|
|
@@ -22,20 +23,49 @@ export declare function formatDateTime(isoDate: string): string;
|
|
|
22
23
|
* Truncate a string to a max length with ellipsis
|
|
23
24
|
*/
|
|
24
25
|
export declare function truncate(str: string, maxLength: number): string;
|
|
26
|
+
/**
|
|
27
|
+
* Options for formatLinksTable
|
|
28
|
+
*/
|
|
29
|
+
export interface FormatLinksTableOptions {
|
|
30
|
+
wide?: boolean;
|
|
31
|
+
folderMap?: Map<string, string>;
|
|
32
|
+
}
|
|
25
33
|
/**
|
|
26
34
|
* Format links as a table
|
|
27
35
|
*/
|
|
28
|
-
export declare function formatLinksTable(links: Link[]): string;
|
|
36
|
+
export declare function formatLinksTable(links: Link[], options?: FormatLinksTableOptions): string;
|
|
29
37
|
/**
|
|
30
38
|
* Format links as minimal output (just short URLs)
|
|
31
39
|
*/
|
|
32
40
|
export declare function formatLinksMinimal(links: Link[]): string;
|
|
33
41
|
/**
|
|
34
42
|
* Format a single link for detailed display
|
|
43
|
+
* @param link - The link to format
|
|
44
|
+
* @param folderName - Optional folder name (if not provided, shows folder ID)
|
|
35
45
|
*/
|
|
36
|
-
export declare function formatLinkDetail(link: Link): string;
|
|
46
|
+
export declare function formatLinkDetail(link: Link, folderName?: string): string;
|
|
37
47
|
/**
|
|
38
48
|
* Parse a link ID from string, return null if invalid
|
|
39
49
|
*/
|
|
40
50
|
export declare function parseLinkId(input: string): number | null;
|
|
51
|
+
/**
|
|
52
|
+
* Format folders as a table
|
|
53
|
+
*/
|
|
54
|
+
export declare function formatFoldersTable(folders: Folder[]): string;
|
|
55
|
+
/**
|
|
56
|
+
* Format tags as a table
|
|
57
|
+
*/
|
|
58
|
+
export declare function formatTagsTable(tags: Tag[]): string;
|
|
59
|
+
/**
|
|
60
|
+
* Resolve a folder name to folder ID via API.
|
|
61
|
+
* If input looks like a UUID, use it directly.
|
|
62
|
+
* Returns null if folder is not found (with error message printed).
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveFolderName(client: ApiClient, input: string): Promise<string | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Resolve a tag name to tag ID via API.
|
|
67
|
+
* If input looks like a UUID, use it directly.
|
|
68
|
+
* Returns null if tag is not found (with error message printed).
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveTagName(client: ApiClient, input: string): Promise<string | null>;
|
|
41
71
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,uBAA4B,GACnC,MAAM,CAyDR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAKxD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBxE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMxD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAmB5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAkBnD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACtC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8BxB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CACnC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4BxB"}
|