返回 DeepSeek-Reasonix
keyedResource.ts
根目录 / desktop / frontend / src / lib / keyedResource.ts
1 export type KeyedResourceStatus = "idle" | "refreshing" | "error";
2
3 export type KeyedResource<T> = {
4 key: string | null;
5 data: T | null;
6 status: KeyedResourceStatus;
7 requestSeq: number;
8 revision: number;
9 error: string;
10 };
11
12 export function emptyKeyedResource<T>(): KeyedResource<T> {
13 return { key: null, data: null, status: "idle", requestSeq: 0, revision: 0, error: "" };
14 }
15
16 export function beginKeyedResourceRequest<T>(
17 current: KeyedResource<T>,
18 key: string,
19 requestSeq: number,
20 revision = current.revision,
21 ): KeyedResource<T> {
22 const sameKey = current.key === key;
23 return {
24 key,
25 data: sameKey ? current.data : null,
26 status: "refreshing",
27 requestSeq,
28 revision,
29 error: "",
30 };
31 }
32
33 export function resolveKeyedResourceRequest<T>(
34 current: KeyedResource<T>,
35 key: string,
36 requestSeq: number,
37 data: T,
38 revision = current.revision,
39 ): KeyedResource<T> {
40 if (current.key !== key || current.requestSeq !== requestSeq) return current;
41 return { ...current, data, status: "idle", revision, error: "" };
42 }
43
44 export function rejectKeyedResourceRequest<T>(
45 current: KeyedResource<T>,
46 key: string,
47 requestSeq: number,
48 error: string,
49 ): KeyedResource<T> {
50 if (current.key !== key || current.requestSeq !== requestSeq) return current;
51 return { ...current, status: "error", error };
52 }
53
53 lines TYPESCRIPT