feat: 完成 rust cutover phase 8 收口
This commit is contained in:
@@ -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 };
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user