返回 DeepSeek-Reasonix
draftValues.ts
根目录 / desktop / frontend / src / app-runtime / draftValues.ts
1 import type { PersistentComposerDraft } from "../components/Composer";
2 import type { SessionDraftSettings } from "../generated/desktopContract.generated";
3
4 export const cloneDraftContent = (content: PersistentComposerDraft) => structuredClone(content);
5 export const cloneDraftSettings = (settings: SessionDraftSettings) => structuredClone(settings);
6
7 const EMPTY_CONTENT: PersistentComposerDraft = {
8 text: "",
9 invocations: [],
10 attachments: [],
11 workspaceRefs: [],
12 pastedBlocks: [],
13 openPastedLabels: [],
14 sessionRefs: [],
15 selectedTextRefs: [],
16 };
17
18 export function parseContent(raw: string): PersistentComposerDraft {
19 try {
20 const value = JSON.parse(raw || "{}") as Partial<PersistentComposerDraft>;
21 return {
22 text: typeof value.text === "string" ? value.text : "",
23 invocations: Array.isArray(value.invocations) ? value.invocations : [],
24 attachments: Array.isArray(value.attachments) ? value.attachments.map(({ previewUrl: _previewUrl, ...attachment }) => attachment) : [],
25 workspaceRefs: Array.isArray(value.workspaceRefs) ? value.workspaceRefs : [],
26 pastedBlocks: Array.isArray(value.pastedBlocks) ? value.pastedBlocks : [],
27 openPastedLabels: Array.isArray(value.openPastedLabels) ? value.openPastedLabels : [],
28 sessionRefs: Array.isArray(value.sessionRefs) ? value.sessionRefs : [],
29 selectedTextRefs: Array.isArray(value.selectedTextRefs) ? value.selectedTextRefs : [],
30 };
31 } catch {
32 return { ...EMPTY_CONTENT };
33 }
34 }
35
36 export function contentJSON(content: PersistentComposerDraft): string {
37 return JSON.stringify({
38 ...content,
39 attachments: content.attachments.map(({ previewUrl: _previewUrl, ...attachment }) => attachment),
40 });
41 }
42
42 lines TYPESCRIPT