feishu-docs-cli 0.1.0-beta.15 → 0.1.0-beta.16
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/update.js +28 -63
- package/dist/commands/update.js.map +1 -1
- package/dist/services/block-writer.js +17 -4
- package/dist/services/block-writer.js.map +1 -1
- package/dist/services/markdown-convert.d.ts +8 -0
- package/dist/services/markdown-convert.js +17 -1
- package/dist/services/markdown-convert.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/update.js
CHANGED
|
@@ -4,15 +4,14 @@
|
|
|
4
4
|
* Uses Convert + Descendant API for writing new content.
|
|
5
5
|
* Restore uses the old children API (backup data is raw blocks, not markdown).
|
|
6
6
|
*/
|
|
7
|
-
import { readFile
|
|
7
|
+
import { readFile } from "node:fs/promises";
|
|
8
8
|
import { existsSync } from "node:fs";
|
|
9
9
|
import { resolve, normalize, sep } from "node:path";
|
|
10
|
-
import { randomUUID } from "node:crypto";
|
|
11
10
|
import { createClient, fetchWithAuth } from "../client.js";
|
|
12
11
|
import { CliError } from "../utils/errors.js";
|
|
13
|
-
import { convertAndWrite, extractMarkdownTitle, } from "../services/markdown-convert.js";
|
|
12
|
+
import { convertAndWrite, extractMarkdownTitle, sanitizeBlocks, writeDescendant, } from "../services/markdown-convert.js";
|
|
14
13
|
import { resolveDocument } from "../utils/document-resolver.js";
|
|
15
|
-
import { readBody, getDocumentInfo, clearDocument, backupDocument,
|
|
14
|
+
import { readBody, getDocumentInfo, clearDocument, backupDocument, BACKUPS_DIR, } from "../services/block-writer.js";
|
|
16
15
|
export const meta = {
|
|
17
16
|
options: {
|
|
18
17
|
body: { type: "string" },
|
|
@@ -46,7 +45,7 @@ export async function update(args, globalOpts) {
|
|
|
46
45
|
if (args.append) {
|
|
47
46
|
return appendToDocument(authInfo, documentId, bodyContent, globalOpts);
|
|
48
47
|
}
|
|
49
|
-
return overwriteDocument(authInfo, documentId, bodyContent, globalOpts);
|
|
48
|
+
return overwriteDocument(authInfo, documentId, bodyContent, globalOpts, doc.spaceId, doc.nodeToken);
|
|
50
49
|
}
|
|
51
50
|
async function appendToDocument(authInfo, documentId, bodyContent, globalOpts) {
|
|
52
51
|
const docInfo = await getDocumentInfo(authInfo, documentId);
|
|
@@ -62,7 +61,7 @@ async function appendToDocument(authInfo, documentId, bodyContent, globalOpts) {
|
|
|
62
61
|
process.stdout.write(`已追加内容到文档 ${documentId}\n`);
|
|
63
62
|
}
|
|
64
63
|
}
|
|
65
|
-
async function overwriteDocument(authInfo, documentId, bodyContent, globalOpts) {
|
|
64
|
+
async function overwriteDocument(authInfo, documentId, bodyContent, globalOpts, spaceId, nodeToken) {
|
|
66
65
|
// Extract first H1 heading as document title, strip from body
|
|
67
66
|
const { title: extractedTitle, body: strippedBody } = extractMarkdownTitle(bodyContent);
|
|
68
67
|
const contentToWrite = strippedBody.trim() || undefined;
|
|
@@ -106,22 +105,26 @@ async function overwriteDocument(authInfo, documentId, bodyContent, globalOpts)
|
|
|
106
105
|
// Update document title after successful content write
|
|
107
106
|
if (extractedTitle) {
|
|
108
107
|
try {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
if (spaceId && nodeToken) {
|
|
109
|
+
// Wiki documents use the wiki node rename API
|
|
110
|
+
await fetchWithAuth(authInfo, `/open-apis/wiki/v2/spaces/${encodeURIComponent(spaceId)}/nodes/${encodeURIComponent(nodeToken)}/update_title`, {
|
|
111
|
+
method: "POST",
|
|
112
|
+
body: { title: extractedTitle },
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// Drive documents use the docx PATCH API
|
|
117
|
+
await fetchWithAuth(authInfo, `/open-apis/docx/v1/documents/${encodeURIComponent(documentId)}`, {
|
|
118
|
+
method: "PATCH",
|
|
119
|
+
body: { title: extractedTitle },
|
|
120
|
+
});
|
|
121
|
+
}
|
|
113
122
|
}
|
|
114
123
|
catch {
|
|
115
124
|
process.stderr.write(`feishu-docs: warning: 更新文档标题失败,标题可能未同步\n`);
|
|
116
125
|
}
|
|
117
126
|
}
|
|
118
|
-
//
|
|
119
|
-
try {
|
|
120
|
-
await unlink(backupPath);
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
// Non-critical: backup file cleanup failure is silent
|
|
124
|
-
}
|
|
127
|
+
// Backup kept for undo — rotateBackups() in backupDocument handles cleanup
|
|
125
128
|
if (globalOpts.json) {
|
|
126
129
|
process.stdout.write(JSON.stringify({
|
|
127
130
|
success: true,
|
|
@@ -133,50 +136,6 @@ async function overwriteDocument(authInfo, documentId, bodyContent, globalOpts)
|
|
|
133
136
|
process.stdout.write(`已覆盖更新文档 ${documentId}\n`);
|
|
134
137
|
}
|
|
135
138
|
}
|
|
136
|
-
/**
|
|
137
|
-
* Recursively restore blocks and their descendants from a backup block map.
|
|
138
|
-
* Uses the old children API (backup data is raw blocks, not markdown).
|
|
139
|
-
*/
|
|
140
|
-
const MAX_RESTORE_DEPTH = 20;
|
|
141
|
-
async function restoreChildren(authInfo, documentId, parentBlockId, childIds, blockMap, revisionId, depth = 0) {
|
|
142
|
-
let rev = revisionId;
|
|
143
|
-
if (!childIds || childIds.length === 0)
|
|
144
|
-
return rev;
|
|
145
|
-
if (depth >= MAX_RESTORE_DEPTH) {
|
|
146
|
-
process.stderr.write(`feishu-docs: warning: 恢复深度超过 ${MAX_RESTORE_DEPTH} 层,跳过更深层级\n`);
|
|
147
|
-
return rev;
|
|
148
|
-
}
|
|
149
|
-
for (let i = 0; i < childIds.length; i += BATCH_SIZE) {
|
|
150
|
-
const batchIds = childIds.slice(i, i + BATCH_SIZE);
|
|
151
|
-
const batch = batchIds
|
|
152
|
-
.map((id) => blockMap.get(id))
|
|
153
|
-
.filter(Boolean)
|
|
154
|
-
.map((b) => {
|
|
155
|
-
const { block_id, parent_id, children, ...rest } = b;
|
|
156
|
-
return rest;
|
|
157
|
-
});
|
|
158
|
-
if (batch.length === 0)
|
|
159
|
-
continue;
|
|
160
|
-
if (i > 0)
|
|
161
|
-
await sleep(QPS_DELAY);
|
|
162
|
-
const res = await fetchWithAuth(authInfo, `/open-apis/docx/v1/documents/${encodeURIComponent(documentId)}/blocks/${encodeURIComponent(parentBlockId)}/children`, {
|
|
163
|
-
method: "POST",
|
|
164
|
-
body: { children: batch, index: i },
|
|
165
|
-
params: { document_revision_id: rev, client_token: randomUUID() },
|
|
166
|
-
});
|
|
167
|
-
const resData = res?.data;
|
|
168
|
-
rev = resData?.document_revision_id ?? rev;
|
|
169
|
-
const createdIds = (resData?.children ?? []).map((c) => c.block_id);
|
|
170
|
-
for (let j = 0; j < createdIds.length && j < batchIds.length; j++) {
|
|
171
|
-
const original = blockMap.get(batchIds[j]);
|
|
172
|
-
if (original?.children?.length && original.children.length > 0) {
|
|
173
|
-
await sleep(QPS_DELAY);
|
|
174
|
-
rev = await restoreChildren(authInfo, documentId, createdIds[j], original.children, blockMap, rev, depth + 1);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
return rev;
|
|
179
|
-
}
|
|
180
139
|
async function restoreFromBackup(authInfo, documentId, backupPath, globalOpts) {
|
|
181
140
|
const resolvedPath = resolve(normalize(backupPath));
|
|
182
141
|
const resolvedBackups = resolve(BACKUPS_DIR);
|
|
@@ -209,11 +168,17 @@ async function restoreFromBackup(authInfo, documentId, backupPath, globalOpts) {
|
|
|
209
168
|
process.stderr.write("feishu-docs: warning: 备份文件中没有可恢复的内容\n");
|
|
210
169
|
return;
|
|
211
170
|
}
|
|
212
|
-
|
|
171
|
+
// Build ConvertedBlocks for Descendant API (supports all block types)
|
|
172
|
+
const allBlocks = sanitizeBlocks(blocks.filter((b) => b.block_type !== 1));
|
|
173
|
+
const converted = {
|
|
174
|
+
blocks: allBlocks,
|
|
175
|
+
firstLevelBlockIds: topLevelIds,
|
|
176
|
+
blockIdToImageUrls: {},
|
|
177
|
+
};
|
|
213
178
|
const docInfo = await getDocumentInfo(authInfo, documentId);
|
|
214
179
|
let rev = await clearDocument(authInfo, documentId, docInfo.revisionId);
|
|
215
180
|
try {
|
|
216
|
-
rev = await
|
|
181
|
+
rev = await writeDescendant(authInfo, documentId, documentId, converted, rev);
|
|
217
182
|
}
|
|
218
183
|
catch (restoreErr) {
|
|
219
184
|
process.stderr.write(`feishu-docs: error: 恢复过程中出错: ${restoreErr.message}\n` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -113,14 +113,27 @@ export async function backupDocument(authInfo, documentId) {
|
|
|
113
113
|
await rotateBackups();
|
|
114
114
|
return { filepath, blocks };
|
|
115
115
|
}
|
|
116
|
+
const MAX_BACKUPS_PER_DOC = 10;
|
|
116
117
|
async function rotateBackups() {
|
|
117
118
|
try {
|
|
118
119
|
const files = await readdir(BACKUPS_DIR);
|
|
119
120
|
const jsonFiles = files.filter((f) => f.endsWith(".json")).sort();
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
// Group by documentId (filename format: {documentId}-{timestamp}.json)
|
|
122
|
+
const byDoc = new Map();
|
|
123
|
+
for (const f of jsonFiles) {
|
|
124
|
+
const lastDash = f.lastIndexOf("-");
|
|
125
|
+
const docId = lastDash > 0 ? f.slice(0, lastDash) : f;
|
|
126
|
+
const group = byDoc.get(docId) || [];
|
|
127
|
+
group.push(f);
|
|
128
|
+
byDoc.set(docId, group);
|
|
129
|
+
}
|
|
130
|
+
// Keep only the most recent N per document
|
|
131
|
+
for (const [, group] of byDoc) {
|
|
132
|
+
if (group.length > MAX_BACKUPS_PER_DOC) {
|
|
133
|
+
const toDelete = group.slice(0, group.length - MAX_BACKUPS_PER_DOC);
|
|
134
|
+
for (const f of toDelete) {
|
|
135
|
+
await unlink(join(BACKUPS_DIR, f));
|
|
136
|
+
}
|
|
124
137
|
}
|
|
125
138
|
}
|
|
126
139
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-writer.js","sourceRoot":"","sources":["../../src/services/block-writer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"block-writer.js","sourceRoot":"","sources":["../../src/services/block-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,14 @@ export declare function extractMarkdownTitle(markdown: string): {
|
|
|
31
31
|
title: string | null;
|
|
32
32
|
body: string;
|
|
33
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* Replace literal `\n` with `<br>` inside mermaid code blocks.
|
|
36
|
+
*
|
|
37
|
+
* Claude and other AI tools generate mermaid node labels with `\n` for
|
|
38
|
+
* line breaks (e.g. `A[Line 1\nLine 2]`), but standard mermaid syntax
|
|
39
|
+
* requires `<br>` (e.g. `A[Line 1<br>Line 2]`).
|
|
40
|
+
*/
|
|
41
|
+
export declare function normalizeMermaidLineBreaks(markdown: string): string;
|
|
34
42
|
/**
|
|
35
43
|
* Convert markdown string to Feishu block array via Convert API.
|
|
36
44
|
* Requires scope: docx:document.block:convert
|
|
@@ -73,6 +73,19 @@ export function extractMarkdownTitle(markdown) {
|
|
|
73
73
|
const body = remaining.slice(startIdx).join("\n");
|
|
74
74
|
return { title, body };
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Replace literal `\n` with `<br>` inside mermaid code blocks.
|
|
78
|
+
*
|
|
79
|
+
* Claude and other AI tools generate mermaid node labels with `\n` for
|
|
80
|
+
* line breaks (e.g. `A[Line 1\nLine 2]`), but standard mermaid syntax
|
|
81
|
+
* requires `<br>` (e.g. `A[Line 1<br>Line 2]`).
|
|
82
|
+
*/
|
|
83
|
+
export function normalizeMermaidLineBreaks(markdown) {
|
|
84
|
+
return markdown.replace(/^```mermaid\s*\n([\s\S]*?)^```/gm, (_match, block) => {
|
|
85
|
+
const fixed = block.replace(/\\n/g, "<br>");
|
|
86
|
+
return "```mermaid\n" + fixed + "```";
|
|
87
|
+
});
|
|
88
|
+
}
|
|
76
89
|
/**
|
|
77
90
|
* Convert markdown string to Feishu block array via Convert API.
|
|
78
91
|
* Requires scope: docx:document.block:convert
|
|
@@ -82,7 +95,10 @@ export function extractMarkdownTitle(markdown) {
|
|
|
82
95
|
export async function convertMarkdown(authInfo, markdown) {
|
|
83
96
|
const res = await fetchWithAuth(authInfo, "/open-apis/docx/v1/documents/blocks/convert", {
|
|
84
97
|
method: "POST",
|
|
85
|
-
body: {
|
|
98
|
+
body: {
|
|
99
|
+
content: normalizeMermaidLineBreaks(normalizeLangNames(markdown)),
|
|
100
|
+
content_type: "markdown",
|
|
101
|
+
},
|
|
86
102
|
});
|
|
87
103
|
const data = res?.data;
|
|
88
104
|
if (!data?.blocks || !data?.first_level_block_ids) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-convert.js","sourceRoot":"","sources":["../../src/services/markdown-convert.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,0DAA0D;AAC1D,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC;;;GAGG;AACH,MAAM,YAAY,GAA2B;IAC3C,aAAa,EAAE,MAAM;IACrB,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACpE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IAInD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,OAAO,KAAK,EAAE;YAAE,SAAS;QAC7B,0DAA0D;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,CAAC,sCAAsC;IAC/C,CAAC;IAED,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG;QAChB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;QAC/B,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;KACjC,CAAC;IAEF,yDAAyD;IACzD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO,QAAQ,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACxE,QAAQ,EAAE,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAkB,EAClB,QAAgB;IAEhB,MAAM,GAAG,GAAG,MAAM,aAAa,CAC7B,QAAQ,EACR,6CAA6C,EAC7C;QACE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"markdown-convert.js","sourceRoot":"","sources":["../../src/services/markdown-convert.ts"],"names":[],"mappings":"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"}
|