feat: 完成 rust cutover phase 8 收口

This commit is contained in:
lix-2026
2026-04-15 20:01:12 +08:00
parent 822c730cd6
commit 98db79b301
104 changed files with 18777 additions and 3025 deletions
+16 -1
View File
@@ -42,6 +42,8 @@ export type MindmapOp =
| { op: "appendNote"; uid: string; markdown: string }
| { op: "deleteNode"; uid: string };
export type MindmapOpErrorKind = "rejected" | "failed";
const createUid = () => {
const anyCrypto = globalThis.crypto as unknown as { randomUUID?: () => string } | undefined;
if (anyCrypto?.randomUUID) return anyCrypto.randomUUID();
@@ -94,6 +96,20 @@ const safeUrlOrNull = (value: unknown) => {
}
};
export const classifyMindmapOpErrors = (errors: string[]): MindmapOpErrorKind | null => {
if (!Array.isArray(errors) || errors.length === 0) return null;
const rejectedPatterns = [
"无效 op",
"找不到",
"不能删除根节点",
"不支持的 op",
];
const rejectedOnly = errors.every((error) =>
rejectedPatterns.some((pattern) => String(error || "").includes(pattern)),
);
return rejectedOnly ? "rejected" : "failed";
};
export const applyMindmapOps = (
raw: unknown,
ops: MindmapOp[],
@@ -238,4 +254,3 @@ export const applyMindmapOps = (
ensureMindmapUids(root);
return { data: root, applied, errors };
};