@nocoo/zhe 1.18.0 → 1.19.3
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/commands/idea/add.d.ts +22 -0
- package/dist/commands/idea/add.d.ts.map +1 -0
- package/dist/commands/idea/add.js +55 -0
- package/dist/commands/idea/add.js.map +1 -0
- package/dist/commands/idea/delete.d.ts +17 -0
- package/dist/commands/idea/delete.d.ts.map +1 -0
- package/dist/commands/idea/delete.js +47 -0
- package/dist/commands/idea/delete.js.map +1 -0
- package/dist/commands/idea/get.d.ts +12 -0
- package/dist/commands/idea/get.d.ts.map +1 -0
- package/dist/commands/idea/get.js +45 -0
- package/dist/commands/idea/get.js.map +1 -0
- package/dist/commands/idea/helpers.d.ts +13 -0
- package/dist/commands/idea/helpers.d.ts.map +1 -0
- package/dist/commands/idea/helpers.js +78 -0
- package/dist/commands/idea/helpers.js.map +1 -0
- package/dist/commands/idea/list.d.ts +22 -0
- package/dist/commands/idea/list.d.ts.map +1 -0
- package/dist/commands/idea/list.js +64 -0
- package/dist/commands/idea/list.js.map +1 -0
- package/dist/commands/idea/update.d.ts +27 -0
- package/dist/commands/idea/update.d.ts.map +1 -0
- package/dist/commands/idea/update.js +78 -0
- package/dist/commands/idea/update.js.map +1 -0
- package/dist/commands/idea.d.ts +6 -2
- package/dist/commands/idea.d.ts.map +1 -1
- package/dist/commands/idea.js +12 -393
- package/dist/commands/idea.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +97 -96
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +56 -59
- package/dist/commands/update.js.map +1 -1
- package/dist/utils/format.d.ts +27 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +157 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/resolve.d.ts +41 -0
- package/dist/utils/resolve.d.ts.map +1 -0
- package/dist/utils/resolve.js +69 -0
- package/dist/utils/resolve.js.map +1 -0
- package/dist/utils.d.ts +17 -90
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +20 -250
- package/dist/utils.js.map +1 -1
- package/package.json +10 -6
|
@@ -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,EACN,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACd,MAAM,aAAa,CAAC;AAErB,MAAM,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2FH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsGxB,CAAC"}
|
package/dist/commands/update.js
CHANGED
|
@@ -5,6 +5,61 @@ 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
7
|
import { parseLinkId, resolveFolderName, resolveTagName } from "../utils.js";
|
|
8
|
+
/** Resolve a single tag name into the addTags/removeTags array, or exit on error. */
|
|
9
|
+
async function resolveSingleTag(client, tag) {
|
|
10
|
+
const tagId = await resolveTagName(client, tag);
|
|
11
|
+
if (tagId === null)
|
|
12
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
13
|
+
return [tagId];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Build the UpdateLinkRequest from CLI args, calling the API to resolve
|
|
17
|
+
* folder/tag names where needed. Exits on invalid inputs.
|
|
18
|
+
*/
|
|
19
|
+
async function buildUpdatePayload(client, args) {
|
|
20
|
+
const data = {};
|
|
21
|
+
if (args.url !== undefined) {
|
|
22
|
+
if (!isValidUrl(args.url)) {
|
|
23
|
+
console.log(pc.red("Invalid URL format. Include protocol (https://)."));
|
|
24
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
25
|
+
}
|
|
26
|
+
data.originalUrl = args.url;
|
|
27
|
+
}
|
|
28
|
+
if (args.slug !== undefined)
|
|
29
|
+
data.slug = args.slug;
|
|
30
|
+
if (args.folder !== undefined) {
|
|
31
|
+
if (args.folder === "none") {
|
|
32
|
+
data.folderId = null;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const folderId = await resolveFolderName(client, args.folder);
|
|
36
|
+
if (folderId === null)
|
|
37
|
+
process.exit(EXIT_INVALID_ARGS);
|
|
38
|
+
data.folderId = folderId;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (args.note !== undefined)
|
|
42
|
+
data.note = args.note === "" ? null : args.note;
|
|
43
|
+
if (args.expires !== undefined) {
|
|
44
|
+
data.expiresAt = args.expires === "never" ? null : args.expires;
|
|
45
|
+
}
|
|
46
|
+
if (args.title !== undefined) {
|
|
47
|
+
data.metaTitle = args.title === "" ? null : args.title;
|
|
48
|
+
}
|
|
49
|
+
if (args.desc !== undefined) {
|
|
50
|
+
data.metaDescription = args.desc === "" ? null : args.desc;
|
|
51
|
+
}
|
|
52
|
+
if (args.screenshot !== undefined) {
|
|
53
|
+
data.screenshotUrl = args.screenshot === "" ? null : args.screenshot;
|
|
54
|
+
}
|
|
55
|
+
const addTag = args["add-tag"];
|
|
56
|
+
const removeTag = args["remove-tag"];
|
|
57
|
+
if (addTag)
|
|
58
|
+
data.addTags = await resolveSingleTag(client, addTag);
|
|
59
|
+
if (removeTag)
|
|
60
|
+
data.removeTags = await resolveSingleTag(client, removeTag);
|
|
61
|
+
return data;
|
|
62
|
+
}
|
|
8
63
|
export const updateCommand = defineCommand({
|
|
9
64
|
meta: {
|
|
10
65
|
name: "update",
|
|
@@ -81,65 +136,7 @@ export const updateCommand = defineCommand({
|
|
|
81
136
|
process.exit(EXIT_INVALID_ARGS);
|
|
82
137
|
}
|
|
83
138
|
const client = new ApiClient(apiKey);
|
|
84
|
-
|
|
85
|
-
const data = {};
|
|
86
|
-
if (args.url !== undefined) {
|
|
87
|
-
// Validate URL
|
|
88
|
-
if (!isValidUrl(args.url)) {
|
|
89
|
-
console.log(pc.red("Invalid URL format. Include protocol (https://)."));
|
|
90
|
-
process.exit(EXIT_INVALID_ARGS);
|
|
91
|
-
}
|
|
92
|
-
data.originalUrl = args.url;
|
|
93
|
-
}
|
|
94
|
-
if (args.slug !== undefined) {
|
|
95
|
-
data.slug = args.slug;
|
|
96
|
-
}
|
|
97
|
-
// Resolve folder name to ID
|
|
98
|
-
if (args.folder !== undefined) {
|
|
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
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (args.note !== undefined) {
|
|
111
|
-
data.note = args.note === "" ? null : args.note;
|
|
112
|
-
}
|
|
113
|
-
if (args.expires !== undefined) {
|
|
114
|
-
data.expiresAt = args.expires === "never" ? null : args.expires;
|
|
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
|
-
}
|
|
142
|
-
// Check if there's anything to update
|
|
139
|
+
const data = await buildUpdatePayload(client, args);
|
|
143
140
|
if (Object.keys(data).length === 0) {
|
|
144
141
|
console.log(pc.yellow("No changes specified."));
|
|
145
142
|
console.log(pc.dim("Use --url, --slug, --folder, --note, --expires, --title, --desc, --screenshot, --add-tag, or --remove-tag"));
|
|
@@ -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,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7E,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table / detail formatters for the zhe CLI.
|
|
3
|
+
* Extracted from utils.ts to keep that file small.
|
|
4
|
+
*/
|
|
5
|
+
import type { Folder, Link, Tag } from "../api/types.js";
|
|
6
|
+
export interface FormatLinksTableOptions {
|
|
7
|
+
wide?: boolean;
|
|
8
|
+
folderMap?: Map<string, string>;
|
|
9
|
+
tagMap?: Map<string, string>;
|
|
10
|
+
showTags?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** Format links as a table (wide or compact). */
|
|
13
|
+
export declare function formatLinksTable(links: Link[], options?: FormatLinksTableOptions): string;
|
|
14
|
+
/** Minimal one-link-per-line output (just short URLs). */
|
|
15
|
+
export declare function formatLinksMinimal(links: Link[]): string;
|
|
16
|
+
/**
|
|
17
|
+
* Detailed multi-line output for a single link.
|
|
18
|
+
* @param link - The link to format
|
|
19
|
+
* @param folderName - Optional folder name (if not provided, shows folder ID)
|
|
20
|
+
* @param tagMap - Optional map of tagId → name (falls back to tagId if missing)
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatLinkDetail(link: Link, folderName?: string, tagMap?: Map<string, string>): string;
|
|
23
|
+
/** Format folders as a table. */
|
|
24
|
+
export declare function formatFoldersTable(folders: Folder[]): string;
|
|
25
|
+
/** Format tags as a table. */
|
|
26
|
+
export declare function formatTagsTable(tags: Tag[]): string;
|
|
27
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAGzD,MAAM,WAAW,uBAAuB;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAyED,iDAAiD;AACjD,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,uBAA4B,GACnC,MAAM,CAyBR;AAED,0DAA0D;AAC1D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAGxD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,IAAI,EACV,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,CAmCR;AAED,iCAAiC;AACjC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAiB5D;AAED,8BAA8B;AAC9B,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAgBnD"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table / detail formatters for the zhe CLI.
|
|
3
|
+
* Extracted from utils.ts to keep that file small.
|
|
4
|
+
*/
|
|
5
|
+
import { formatDate, formatDateTime, truncate } from "../utils.js";
|
|
6
|
+
/** Render the tag column for a single link row. */
|
|
7
|
+
function renderLinkTags(link, tagMap) {
|
|
8
|
+
// Prefer embedded tags (carries names) — avoids needing a tagMap fetch
|
|
9
|
+
// from the caller when /links already returned tag details.
|
|
10
|
+
if (link.tags && link.tags.length > 0) {
|
|
11
|
+
return link.tags.map((t) => t.name).join(",");
|
|
12
|
+
}
|
|
13
|
+
const ids = link.tagIds ?? [];
|
|
14
|
+
if (ids.length === 0)
|
|
15
|
+
return "";
|
|
16
|
+
return ids.map((id) => tagMap?.get(id) ?? id.slice(0, 8)).join(",");
|
|
17
|
+
}
|
|
18
|
+
function renderLinkRowWide(link, opts) {
|
|
19
|
+
const id = String(link.id).padEnd(6);
|
|
20
|
+
const slug = link.slug.padEnd(20);
|
|
21
|
+
const url = link.originalUrl.padEnd(48);
|
|
22
|
+
const clicks = String(link.clicks).padEnd(7);
|
|
23
|
+
const created = formatDate(link.createdAt);
|
|
24
|
+
let row = `${id} ${slug} ${url} `;
|
|
25
|
+
if (opts.showFolders) {
|
|
26
|
+
const folderName = link.folderId
|
|
27
|
+
? (opts.folderMap?.get(link.folderId) ?? link.folderId.slice(0, 8))
|
|
28
|
+
: "";
|
|
29
|
+
row += `${folderName.padEnd(16)} `;
|
|
30
|
+
}
|
|
31
|
+
if (opts.showTags) {
|
|
32
|
+
row += `${renderLinkTags(link, opts.tagMap).padEnd(26)} `;
|
|
33
|
+
}
|
|
34
|
+
row += `${clicks} ${created}`;
|
|
35
|
+
return row;
|
|
36
|
+
}
|
|
37
|
+
function renderLinkRowCompact(link, opts) {
|
|
38
|
+
const id = String(link.id).padEnd(6);
|
|
39
|
+
const slug = truncate(link.slug, 10).padEnd(11);
|
|
40
|
+
const url = truncate(link.originalUrl, 32).padEnd(32);
|
|
41
|
+
const clicks = String(link.clicks).padEnd(7);
|
|
42
|
+
const created = formatDate(link.createdAt);
|
|
43
|
+
let row = `${id} ${slug} ${url} `;
|
|
44
|
+
if (opts.showFolders) {
|
|
45
|
+
const folderName = link.folderId
|
|
46
|
+
? (opts.folderMap?.get(link.folderId) ?? link.folderId.slice(0, 8))
|
|
47
|
+
: "";
|
|
48
|
+
row += `${truncate(folderName, 12).padEnd(12)} `;
|
|
49
|
+
}
|
|
50
|
+
if (opts.showTags) {
|
|
51
|
+
row += `${truncate(renderLinkTags(link, opts.tagMap), 12).padEnd(12)} `;
|
|
52
|
+
}
|
|
53
|
+
row += `${clicks} ${created}`;
|
|
54
|
+
return row;
|
|
55
|
+
}
|
|
56
|
+
/** Format links as a table (wide or compact). */
|
|
57
|
+
export function formatLinksTable(links, options = {}) {
|
|
58
|
+
if (links.length === 0)
|
|
59
|
+
return "No links found.";
|
|
60
|
+
const { wide = false, folderMap, tagMap, showTags = false } = options;
|
|
61
|
+
const showFolders = links.some((l) => l.folderId);
|
|
62
|
+
const rowOpts = { showFolders, showTags, folderMap, tagMap };
|
|
63
|
+
if (wide) {
|
|
64
|
+
let header = "ID SLUG URL ";
|
|
65
|
+
if (showFolders)
|
|
66
|
+
header += "FOLDER ";
|
|
67
|
+
if (showTags)
|
|
68
|
+
header += "TAGS ";
|
|
69
|
+
header += "CLICKS CREATED";
|
|
70
|
+
const separator = "─".repeat(header.length);
|
|
71
|
+
const rows = links.map((l) => renderLinkRowWide(l, rowOpts));
|
|
72
|
+
return [header, separator, ...rows].join("\n");
|
|
73
|
+
}
|
|
74
|
+
let header = "ID SLUG URL ";
|
|
75
|
+
if (showFolders)
|
|
76
|
+
header += "FOLDER ";
|
|
77
|
+
if (showTags)
|
|
78
|
+
header += "TAGS ";
|
|
79
|
+
header += "CLICKS CREATED";
|
|
80
|
+
const separator = "─".repeat(header.length);
|
|
81
|
+
const rows = links.map((l) => renderLinkRowCompact(l, rowOpts));
|
|
82
|
+
return [header, separator, ...rows].join("\n");
|
|
83
|
+
}
|
|
84
|
+
/** Minimal one-link-per-line output (just short URLs). */
|
|
85
|
+
export function formatLinksMinimal(links) {
|
|
86
|
+
if (links.length === 0)
|
|
87
|
+
return "";
|
|
88
|
+
return links.map((link) => `zhe.to/${link.slug}`).join("\n");
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Detailed multi-line output for a single link.
|
|
92
|
+
* @param link - The link to format
|
|
93
|
+
* @param folderName - Optional folder name (if not provided, shows folder ID)
|
|
94
|
+
* @param tagMap - Optional map of tagId → name (falls back to tagId if missing)
|
|
95
|
+
*/
|
|
96
|
+
export function formatLinkDetail(link, folderName, tagMap) {
|
|
97
|
+
const lines = [
|
|
98
|
+
`Link #${link.id}`,
|
|
99
|
+
"",
|
|
100
|
+
` Short URL: ${link.shortUrl}`,
|
|
101
|
+
` Original: ${link.originalUrl}`,
|
|
102
|
+
` Slug: ${link.slug}${link.isCustom ? " (custom)" : ""}`,
|
|
103
|
+
` Clicks: ${link.clicks}`,
|
|
104
|
+
];
|
|
105
|
+
if (link.folderId) {
|
|
106
|
+
const folderDisplay = folderName ?? link.folderId;
|
|
107
|
+
lines.push(` Folder: ${folderDisplay}`);
|
|
108
|
+
}
|
|
109
|
+
if (link.tags && link.tags.length > 0) {
|
|
110
|
+
lines.push(` Tags: ${link.tags.map((t) => t.name).join(", ")}`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
const tagIds = link.tagIds ?? [];
|
|
114
|
+
if (tagIds.length > 0) {
|
|
115
|
+
const tagDisplay = tagIds.map((id) => tagMap?.get(id) ?? id).join(", ");
|
|
116
|
+
lines.push(` Tags: ${tagDisplay}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (link.note) {
|
|
120
|
+
lines.push(` Note: ${link.note}`);
|
|
121
|
+
}
|
|
122
|
+
lines.push(` Expires: ${link.expiresAt ? formatDateTime(link.expiresAt) : "Never"}`);
|
|
123
|
+
lines.push(` Created: ${formatDateTime(link.createdAt)}`);
|
|
124
|
+
return lines.join("\n");
|
|
125
|
+
}
|
|
126
|
+
/** Format folders as a table. */
|
|
127
|
+
export function formatFoldersTable(folders) {
|
|
128
|
+
if (folders.length === 0)
|
|
129
|
+
return "No folders found.";
|
|
130
|
+
const header = "ID NAME LINKS ICON CREATED";
|
|
131
|
+
const separator = "─".repeat(header.length);
|
|
132
|
+
const rows = folders.map((folder) => {
|
|
133
|
+
const id = folder.id.padEnd(36);
|
|
134
|
+
const name = truncate(folder.name, 18).padEnd(18);
|
|
135
|
+
const links = String(folder.linkCount).padEnd(6);
|
|
136
|
+
const icon = truncate(folder.icon, 8).padEnd(8);
|
|
137
|
+
const created = formatDate(folder.createdAt);
|
|
138
|
+
return `${id} ${name} ${links} ${icon} ${created}`;
|
|
139
|
+
});
|
|
140
|
+
return [header, separator, ...rows].join("\n");
|
|
141
|
+
}
|
|
142
|
+
/** Format tags as a table. */
|
|
143
|
+
export function formatTagsTable(tags) {
|
|
144
|
+
if (tags.length === 0)
|
|
145
|
+
return "No tags found.";
|
|
146
|
+
const header = "ID NAME COLOR CREATED";
|
|
147
|
+
const separator = "─".repeat(header.length);
|
|
148
|
+
const rows = tags.map((tag) => {
|
|
149
|
+
const id = tag.id.padEnd(36);
|
|
150
|
+
const name = truncate(tag.name, 18).padEnd(18);
|
|
151
|
+
const color = tag.color.padEnd(8);
|
|
152
|
+
const created = formatDate(tag.createdAt);
|
|
153
|
+
return `${id} ${name} ${color} ${created}`;
|
|
154
|
+
});
|
|
155
|
+
return [header, separator, ...rows].join("\n");
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Name/UUID resolvers for folders and tags. Extracted from utils.ts.
|
|
3
|
+
*/
|
|
4
|
+
import type { ApiClient } from "../api/client.js";
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a folder name to folder ID via API.
|
|
7
|
+
* If input looks like a UUID, use it directly.
|
|
8
|
+
* Returns null if folder is not found (with error message printed).
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveFolderName(client: ApiClient, input: string): Promise<string | null>;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve a tag name to tag ID via API.
|
|
13
|
+
* If input looks like a UUID, use it directly.
|
|
14
|
+
* Returns null if tag is not found (with error message printed).
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveTagName(client: ApiClient, input: string): Promise<string | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a tag reference (name or UUID) to its canonical id + name.
|
|
19
|
+
*
|
|
20
|
+
* Unlike `resolveTagName`, this:
|
|
21
|
+
* - Distinguishes `not_found` (zero matches) from `ambiguous` (multiple
|
|
22
|
+
* name matches), letting callers map them to different exit codes.
|
|
23
|
+
* - For UUID input, returns immediately without calling `listTags()` so
|
|
24
|
+
* that API keys with only `tags:write` (no `tags:read`) can still
|
|
25
|
+
* update/delete by ID. The server is the source of truth for whether
|
|
26
|
+
* the tag exists. `name` is `undefined` in that case; callers should
|
|
27
|
+
* fall back to the UUID in any prompt text.
|
|
28
|
+
*
|
|
29
|
+
* Does NOT print any error itself — callers decide messaging and exit codes.
|
|
30
|
+
*/
|
|
31
|
+
export type TagRef = {
|
|
32
|
+
kind: "found";
|
|
33
|
+
id: string;
|
|
34
|
+
name: string | undefined;
|
|
35
|
+
} | {
|
|
36
|
+
kind: "not_found";
|
|
37
|
+
} | {
|
|
38
|
+
kind: "ambiguous";
|
|
39
|
+
};
|
|
40
|
+
export declare function resolveTagRef(client: ApiClient, input: string): Promise<TagRef>;
|
|
41
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/utils/resolve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAMlD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACtC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0BxB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CACnC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBxB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,MAAM,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAEzB,wBAAsB,aAAa,CAClC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Name/UUID resolvers for folders and tags. Extracted from utils.ts.
|
|
3
|
+
*/
|
|
4
|
+
import { pc } from "@nocoo/cli-base";
|
|
5
|
+
const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
6
|
+
/**
|
|
7
|
+
* Resolve a folder name to folder ID via API.
|
|
8
|
+
* If input looks like a UUID, use it directly.
|
|
9
|
+
* Returns null if folder is not found (with error message printed).
|
|
10
|
+
*/
|
|
11
|
+
export async function resolveFolderName(client, input) {
|
|
12
|
+
if (UUID_PATTERN.test(input)) {
|
|
13
|
+
return input; // Assume it's already an ID
|
|
14
|
+
}
|
|
15
|
+
const { folders } = await client.listFolders();
|
|
16
|
+
const matches = folders.filter((f) => f.name.toLowerCase() === input.toLowerCase());
|
|
17
|
+
if (matches.length === 0) {
|
|
18
|
+
console.log(pc.red(`Folder not found: ${input}`));
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
if (matches.length > 1) {
|
|
22
|
+
console.log(pc.red(`Multiple folders match "${input}". Please use the folder ID instead.`));
|
|
23
|
+
console.log(pc.dim("Use `zhe folders` to see all folder IDs."));
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return matches[0].id;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a tag name to tag ID via API.
|
|
30
|
+
* If input looks like a UUID, use it directly.
|
|
31
|
+
* Returns null if tag is not found (with error message printed).
|
|
32
|
+
*/
|
|
33
|
+
export async function resolveTagName(client, input) {
|
|
34
|
+
if (UUID_PATTERN.test(input)) {
|
|
35
|
+
return input;
|
|
36
|
+
}
|
|
37
|
+
const { tags } = await client.listTags();
|
|
38
|
+
const matches = tags.filter((t) => t.name.toLowerCase() === input.toLowerCase());
|
|
39
|
+
if (matches.length === 0) {
|
|
40
|
+
console.log(pc.red(`Tag not found: ${input}. Create it first.`));
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
if (matches.length > 1) {
|
|
44
|
+
console.log(pc.red(`Multiple tags match "${input}". Please use the tag ID or rename duplicates.`));
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return matches[0].id;
|
|
48
|
+
}
|
|
49
|
+
export async function resolveTagRef(client, input) {
|
|
50
|
+
if (UUID_PATTERN.test(input)) {
|
|
51
|
+
// Trust the UUID; let the destructive op's PATCH/DELETE be the
|
|
52
|
+
// authoritative existence check. Avoids requiring tags:read.
|
|
53
|
+
// Normalize to lowercase: tag IDs are stored lowercase, but the
|
|
54
|
+
// regex accepts uppercase (RFC 4122 allows either case in
|
|
55
|
+
// notation). The DB is `WHERE id = ?` text-equal, so an
|
|
56
|
+
// uppercase UUID would 404 on a tag that actually exists.
|
|
57
|
+
return { kind: "found", id: input.toLowerCase(), name: undefined };
|
|
58
|
+
}
|
|
59
|
+
const { tags } = await client.listTags();
|
|
60
|
+
const matches = tags.filter((t) => t.name.toLowerCase() === input.toLowerCase());
|
|
61
|
+
if (matches.length === 0) {
|
|
62
|
+
return { kind: "not_found" };
|
|
63
|
+
}
|
|
64
|
+
if (matches.length > 1) {
|
|
65
|
+
return { kind: "ambiguous" };
|
|
66
|
+
}
|
|
67
|
+
return { kind: "found", id: matches[0].id, name: matches[0].name };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/utils/resolve.ts"],"names":[],"mappings":"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"}
|