@flowlist/js-core 3.0.0 → 3.0.2
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/index.d.mts +44 -37
- package/dist/index.d.ts +44 -37
- package/dist/index.global.js +32 -28
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +32 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +32 -28
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -3,16 +3,30 @@
|
|
|
3
3
|
*/
|
|
4
4
|
type ObjectKey = string | number;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* 通用键值对映射(注意:尽管 ObjectKey 包含 number,
|
|
7
|
+
* 但在实际对象中,number 键会被转为 string。
|
|
8
|
+
* 此处使用 string 以符合 Record 的实际行为 [[3]])
|
|
7
9
|
*/
|
|
8
|
-
type KeyMap = Record<
|
|
10
|
+
type KeyMap = Record<string, unknown>;
|
|
9
11
|
/**
|
|
10
12
|
* 形态数组
|
|
11
13
|
*/
|
|
12
14
|
type MorphArray = unknown[];
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* 数据源类型:可以是 API 路径字符串,或返回 Promise 的函数
|
|
17
|
+
*/
|
|
18
|
+
type DataSource = string | ((params: unknown) => Promise<unknown>);
|
|
19
|
+
/**
|
|
20
|
+
* 字段获取器:根据字段名获取状态对象
|
|
21
|
+
*/
|
|
22
|
+
type FieldGetter<T = unknown, E = unknown> = (key: string) => DefaultField<T, E> | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* 状态设置器函数类型
|
|
25
|
+
*/
|
|
26
|
+
type FieldSetter = (obj: SetterFuncParams) => void;
|
|
27
|
+
/**
|
|
28
|
+
* 获取数据后的回调函数
|
|
29
|
+
*/
|
|
16
30
|
type FetchResultCallback = (obj: {
|
|
17
31
|
params: GenerateParamsResp;
|
|
18
32
|
data: unknown;
|
|
@@ -30,7 +44,7 @@ type FieldKeys = 'result' | 'noMore' | 'nothing' | 'loading' | 'error' | 'extra'
|
|
|
30
44
|
* 生成字段名称的参数
|
|
31
45
|
*/
|
|
32
46
|
interface GenerateFieldProps {
|
|
33
|
-
func:
|
|
47
|
+
func: DataSource;
|
|
34
48
|
type: FetchType;
|
|
35
49
|
query?: KeyMap;
|
|
36
50
|
}
|
|
@@ -39,7 +53,7 @@ interface GenerateFieldProps {
|
|
|
39
53
|
*/
|
|
40
54
|
interface GenerateParamsType {
|
|
41
55
|
field: DefaultField<unknown, unknown>;
|
|
42
|
-
uniqueKey
|
|
56
|
+
uniqueKey?: string;
|
|
43
57
|
query?: KeyMap;
|
|
44
58
|
type: FetchType;
|
|
45
59
|
}
|
|
@@ -84,13 +98,23 @@ interface ApiResponse<T = unknown, E = unknown> {
|
|
|
84
98
|
total?: number;
|
|
85
99
|
no_more?: boolean;
|
|
86
100
|
}
|
|
101
|
+
interface BaseFetchConfig {
|
|
102
|
+
getter: FieldGetter;
|
|
103
|
+
setter: FieldSetter;
|
|
104
|
+
func: DataSource;
|
|
105
|
+
type: FetchType;
|
|
106
|
+
query?: KeyMap;
|
|
107
|
+
api?: KeyMap;
|
|
108
|
+
uniqueKey?: string;
|
|
109
|
+
callback?: FetchResultCallback;
|
|
110
|
+
}
|
|
87
111
|
/**
|
|
88
112
|
* 初始化状态的参数
|
|
89
113
|
*/
|
|
90
114
|
interface InitStateType {
|
|
91
|
-
getter:
|
|
92
|
-
setter:
|
|
93
|
-
func:
|
|
115
|
+
getter: FieldGetter;
|
|
116
|
+
setter: FieldSetter;
|
|
117
|
+
func: DataSource;
|
|
94
118
|
type: FetchType;
|
|
95
119
|
query?: KeyMap;
|
|
96
120
|
opts?: Partial<DefaultField<unknown, unknown>>;
|
|
@@ -98,37 +122,20 @@ interface InitStateType {
|
|
|
98
122
|
/**
|
|
99
123
|
* 初始化数据的参数
|
|
100
124
|
*/
|
|
101
|
-
|
|
102
|
-
getter: GetterType;
|
|
103
|
-
setter: SetterType;
|
|
104
|
-
func: FuncType;
|
|
105
|
-
type: FetchType;
|
|
106
|
-
query?: KeyMap;
|
|
107
|
-
api: KeyMap;
|
|
108
|
-
uniqueKey: string;
|
|
109
|
-
callback?: FetchResultCallback;
|
|
110
|
-
}
|
|
125
|
+
type InitDataType = BaseFetchConfig;
|
|
111
126
|
/**
|
|
112
127
|
* 加载更多的参数
|
|
113
128
|
*/
|
|
114
|
-
interface LoadMoreType {
|
|
115
|
-
|
|
116
|
-
setter: SetterType;
|
|
117
|
-
func: FuncType;
|
|
118
|
-
type: FetchType;
|
|
119
|
-
query?: KeyMap;
|
|
120
|
-
api: KeyMap;
|
|
121
|
-
uniqueKey: string;
|
|
122
|
-
errorRetry: boolean;
|
|
123
|
-
callback?: FetchResultCallback;
|
|
129
|
+
interface LoadMoreType extends BaseFetchConfig {
|
|
130
|
+
errorRetry?: boolean;
|
|
124
131
|
}
|
|
125
132
|
/**
|
|
126
133
|
* 更新状态的参数
|
|
127
134
|
*/
|
|
128
135
|
interface UpdateStateType<T = unknown, E = unknown> {
|
|
129
|
-
getter:
|
|
130
|
-
setter:
|
|
131
|
-
func:
|
|
136
|
+
getter: FieldGetter<T, E>;
|
|
137
|
+
setter: FieldSetter;
|
|
138
|
+
func: DataSource;
|
|
132
139
|
type: FetchType;
|
|
133
140
|
query?: KeyMap;
|
|
134
141
|
method: string;
|
|
@@ -141,8 +148,8 @@ interface UpdateStateType<T = unknown, E = unknown> {
|
|
|
141
148
|
* 设置数据的参数
|
|
142
149
|
*/
|
|
143
150
|
interface SetDataType<T = unknown, E = unknown> {
|
|
144
|
-
getter:
|
|
145
|
-
setter:
|
|
151
|
+
getter: FieldGetter<T, E>;
|
|
152
|
+
setter: FieldSetter;
|
|
146
153
|
data: T | ApiResponse<T, E>;
|
|
147
154
|
fieldName: string;
|
|
148
155
|
type: FetchType;
|
|
@@ -153,7 +160,7 @@ interface SetDataType<T = unknown, E = unknown> {
|
|
|
153
160
|
* 设置错误的参数
|
|
154
161
|
*/
|
|
155
162
|
interface SetErrorType {
|
|
156
|
-
setter:
|
|
163
|
+
setter: FieldSetter;
|
|
157
164
|
fieldName: string;
|
|
158
165
|
error: Error;
|
|
159
166
|
}
|
|
@@ -253,4 +260,4 @@ declare const _default: {
|
|
|
253
260
|
readonly DEFAULT_UNIQUE_KEY_NAME: "id";
|
|
254
261
|
};
|
|
255
262
|
|
|
256
|
-
export { type ApiResponse, type DefaultField, _default as ENUM, type FetchType, type FieldKeys, type GenerateFieldProps, type GenerateParamsResp, type GenerateParamsType, type InitDataType, type InitStateType, type KeyMap, type LoadMoreType, type MorphArray, type ObjectKey, type ResultArrayType$1 as ResultArrayType, type ResultObjectType$1 as ResultObjectType, type SetDataType, type SetErrorType, type SetterFuncParams, type UpdateStateType, initData, initState, loadMore, updateState, utils };
|
|
263
|
+
export { type ApiResponse, type DefaultField, _default as ENUM, type FetchType, type FieldGetter, type FieldKeys, type FieldSetter, type GenerateFieldProps, type GenerateParamsResp, type GenerateParamsType, type InitDataType, type InitStateType, type KeyMap, type LoadMoreType, type MorphArray, type ObjectKey, type ResultArrayType$1 as ResultArrayType, type ResultObjectType$1 as ResultObjectType, type SetDataType, type SetErrorType, type SetterFuncParams, type UpdateStateType, initData, initState, loadMore, updateState, utils };
|
package/dist/index.d.ts
CHANGED
|
@@ -3,16 +3,30 @@
|
|
|
3
3
|
*/
|
|
4
4
|
type ObjectKey = string | number;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* 通用键值对映射(注意:尽管 ObjectKey 包含 number,
|
|
7
|
+
* 但在实际对象中,number 键会被转为 string。
|
|
8
|
+
* 此处使用 string 以符合 Record 的实际行为 [[3]])
|
|
7
9
|
*/
|
|
8
|
-
type KeyMap = Record<
|
|
10
|
+
type KeyMap = Record<string, unknown>;
|
|
9
11
|
/**
|
|
10
12
|
* 形态数组
|
|
11
13
|
*/
|
|
12
14
|
type MorphArray = unknown[];
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* 数据源类型:可以是 API 路径字符串,或返回 Promise 的函数
|
|
17
|
+
*/
|
|
18
|
+
type DataSource = string | ((params: unknown) => Promise<unknown>);
|
|
19
|
+
/**
|
|
20
|
+
* 字段获取器:根据字段名获取状态对象
|
|
21
|
+
*/
|
|
22
|
+
type FieldGetter<T = unknown, E = unknown> = (key: string) => DefaultField<T, E> | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* 状态设置器函数类型
|
|
25
|
+
*/
|
|
26
|
+
type FieldSetter = (obj: SetterFuncParams) => void;
|
|
27
|
+
/**
|
|
28
|
+
* 获取数据后的回调函数
|
|
29
|
+
*/
|
|
16
30
|
type FetchResultCallback = (obj: {
|
|
17
31
|
params: GenerateParamsResp;
|
|
18
32
|
data: unknown;
|
|
@@ -30,7 +44,7 @@ type FieldKeys = 'result' | 'noMore' | 'nothing' | 'loading' | 'error' | 'extra'
|
|
|
30
44
|
* 生成字段名称的参数
|
|
31
45
|
*/
|
|
32
46
|
interface GenerateFieldProps {
|
|
33
|
-
func:
|
|
47
|
+
func: DataSource;
|
|
34
48
|
type: FetchType;
|
|
35
49
|
query?: KeyMap;
|
|
36
50
|
}
|
|
@@ -39,7 +53,7 @@ interface GenerateFieldProps {
|
|
|
39
53
|
*/
|
|
40
54
|
interface GenerateParamsType {
|
|
41
55
|
field: DefaultField<unknown, unknown>;
|
|
42
|
-
uniqueKey
|
|
56
|
+
uniqueKey?: string;
|
|
43
57
|
query?: KeyMap;
|
|
44
58
|
type: FetchType;
|
|
45
59
|
}
|
|
@@ -84,13 +98,23 @@ interface ApiResponse<T = unknown, E = unknown> {
|
|
|
84
98
|
total?: number;
|
|
85
99
|
no_more?: boolean;
|
|
86
100
|
}
|
|
101
|
+
interface BaseFetchConfig {
|
|
102
|
+
getter: FieldGetter;
|
|
103
|
+
setter: FieldSetter;
|
|
104
|
+
func: DataSource;
|
|
105
|
+
type: FetchType;
|
|
106
|
+
query?: KeyMap;
|
|
107
|
+
api?: KeyMap;
|
|
108
|
+
uniqueKey?: string;
|
|
109
|
+
callback?: FetchResultCallback;
|
|
110
|
+
}
|
|
87
111
|
/**
|
|
88
112
|
* 初始化状态的参数
|
|
89
113
|
*/
|
|
90
114
|
interface InitStateType {
|
|
91
|
-
getter:
|
|
92
|
-
setter:
|
|
93
|
-
func:
|
|
115
|
+
getter: FieldGetter;
|
|
116
|
+
setter: FieldSetter;
|
|
117
|
+
func: DataSource;
|
|
94
118
|
type: FetchType;
|
|
95
119
|
query?: KeyMap;
|
|
96
120
|
opts?: Partial<DefaultField<unknown, unknown>>;
|
|
@@ -98,37 +122,20 @@ interface InitStateType {
|
|
|
98
122
|
/**
|
|
99
123
|
* 初始化数据的参数
|
|
100
124
|
*/
|
|
101
|
-
|
|
102
|
-
getter: GetterType;
|
|
103
|
-
setter: SetterType;
|
|
104
|
-
func: FuncType;
|
|
105
|
-
type: FetchType;
|
|
106
|
-
query?: KeyMap;
|
|
107
|
-
api: KeyMap;
|
|
108
|
-
uniqueKey: string;
|
|
109
|
-
callback?: FetchResultCallback;
|
|
110
|
-
}
|
|
125
|
+
type InitDataType = BaseFetchConfig;
|
|
111
126
|
/**
|
|
112
127
|
* 加载更多的参数
|
|
113
128
|
*/
|
|
114
|
-
interface LoadMoreType {
|
|
115
|
-
|
|
116
|
-
setter: SetterType;
|
|
117
|
-
func: FuncType;
|
|
118
|
-
type: FetchType;
|
|
119
|
-
query?: KeyMap;
|
|
120
|
-
api: KeyMap;
|
|
121
|
-
uniqueKey: string;
|
|
122
|
-
errorRetry: boolean;
|
|
123
|
-
callback?: FetchResultCallback;
|
|
129
|
+
interface LoadMoreType extends BaseFetchConfig {
|
|
130
|
+
errorRetry?: boolean;
|
|
124
131
|
}
|
|
125
132
|
/**
|
|
126
133
|
* 更新状态的参数
|
|
127
134
|
*/
|
|
128
135
|
interface UpdateStateType<T = unknown, E = unknown> {
|
|
129
|
-
getter:
|
|
130
|
-
setter:
|
|
131
|
-
func:
|
|
136
|
+
getter: FieldGetter<T, E>;
|
|
137
|
+
setter: FieldSetter;
|
|
138
|
+
func: DataSource;
|
|
132
139
|
type: FetchType;
|
|
133
140
|
query?: KeyMap;
|
|
134
141
|
method: string;
|
|
@@ -141,8 +148,8 @@ interface UpdateStateType<T = unknown, E = unknown> {
|
|
|
141
148
|
* 设置数据的参数
|
|
142
149
|
*/
|
|
143
150
|
interface SetDataType<T = unknown, E = unknown> {
|
|
144
|
-
getter:
|
|
145
|
-
setter:
|
|
151
|
+
getter: FieldGetter<T, E>;
|
|
152
|
+
setter: FieldSetter;
|
|
146
153
|
data: T | ApiResponse<T, E>;
|
|
147
154
|
fieldName: string;
|
|
148
155
|
type: FetchType;
|
|
@@ -153,7 +160,7 @@ interface SetDataType<T = unknown, E = unknown> {
|
|
|
153
160
|
* 设置错误的参数
|
|
154
161
|
*/
|
|
155
162
|
interface SetErrorType {
|
|
156
|
-
setter:
|
|
163
|
+
setter: FieldSetter;
|
|
157
164
|
fieldName: string;
|
|
158
165
|
error: Error;
|
|
159
166
|
}
|
|
@@ -253,4 +260,4 @@ declare const _default: {
|
|
|
253
260
|
readonly DEFAULT_UNIQUE_KEY_NAME: "id";
|
|
254
261
|
};
|
|
255
262
|
|
|
256
|
-
export { type ApiResponse, type DefaultField, _default as ENUM, type FetchType, type FieldKeys, type GenerateFieldProps, type GenerateParamsResp, type GenerateParamsType, type InitDataType, type InitStateType, type KeyMap, type LoadMoreType, type MorphArray, type ObjectKey, type ResultArrayType$1 as ResultArrayType, type ResultObjectType$1 as ResultObjectType, type SetDataType, type SetErrorType, type SetterFuncParams, type UpdateStateType, initData, initState, loadMore, updateState, utils };
|
|
263
|
+
export { type ApiResponse, type DefaultField, _default as ENUM, type FetchType, type FieldGetter, type FieldKeys, type FieldSetter, type GenerateFieldProps, type GenerateParamsResp, type GenerateParamsType, type InitDataType, type InitStateType, type KeyMap, type LoadMoreType, type MorphArray, type ObjectKey, type ResultArrayType$1 as ResultArrayType, type ResultObjectType$1 as ResultObjectType, type SetDataType, type SetErrorType, type SetterFuncParams, type UpdateStateType, initData, initState, loadMore, updateState, utils };
|
package/dist/index.global.js
CHANGED
|
@@ -446,11 +446,13 @@ var FlowList = (function (exports) {
|
|
|
446
446
|
const getData = () => {
|
|
447
447
|
const loadData = () => new Promise((res, rej) => {
|
|
448
448
|
const getDataFromAPI = () => {
|
|
449
|
-
const funcCaller = typeof func === "string" ? api[func] : func;
|
|
450
|
-
funcCaller
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
449
|
+
const funcCaller = typeof func === "string" && api ? api[func] : func;
|
|
450
|
+
if (typeof funcCaller === "function") {
|
|
451
|
+
funcCaller(params).then(res).catch((error) => {
|
|
452
|
+
SET_ERROR({ setter, fieldName, error });
|
|
453
|
+
rej(error);
|
|
454
|
+
});
|
|
455
|
+
}
|
|
454
456
|
};
|
|
455
457
|
getDataFromAPI();
|
|
456
458
|
});
|
|
@@ -561,30 +563,32 @@ var FlowList = (function (exports) {
|
|
|
561
563
|
params[enum_default.FIELD_DATA.EXTRA_KEY] = fieldData.extra;
|
|
562
564
|
}
|
|
563
565
|
const getData = () => {
|
|
564
|
-
const funcCaller = typeof func === "string" ? api[func] : func;
|
|
565
|
-
funcCaller
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
callback
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
566
|
+
const funcCaller = typeof func === "string" && api ? api[func] : func;
|
|
567
|
+
if (typeof funcCaller === "function") {
|
|
568
|
+
funcCaller(params).then((data) => {
|
|
569
|
+
SET_DATA({
|
|
570
|
+
getter,
|
|
571
|
+
setter,
|
|
572
|
+
data,
|
|
573
|
+
fieldName,
|
|
574
|
+
type,
|
|
575
|
+
page: params.page || 0,
|
|
576
|
+
insertBefore: !!query?.is_up
|
|
577
|
+
}).then(() => {
|
|
578
|
+
if (callback) {
|
|
579
|
+
callback({
|
|
580
|
+
params,
|
|
581
|
+
data,
|
|
582
|
+
refresh: false
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
resolve();
|
|
586
|
+
});
|
|
587
|
+
}).catch((error) => {
|
|
588
|
+
SET_ERROR({ setter, fieldName, error });
|
|
589
|
+
reject(error);
|
|
583
590
|
});
|
|
584
|
-
}
|
|
585
|
-
SET_ERROR({ setter, fieldName, error });
|
|
586
|
-
reject(error);
|
|
587
|
-
});
|
|
591
|
+
}
|
|
588
592
|
};
|
|
589
593
|
setter({
|
|
590
594
|
key: fieldName,
|
package/dist/index.global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts","../src/enum.ts","../src/setters.ts","../src/actions.ts"],"names":[],"mappings":"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","file":"index.global.js","sourcesContent":["// utils.ts\nimport ENUM from './enum'\nimport type {\n ObjectKey,\n KeyMap,\n DefaultField,\n FetchType,\n FieldKeys,\n GenerateFieldProps,\n GenerateParamsType,\n GenerateParamsResp\n} from './types'\n\n/**\n * 判断数据是否为对象结果(即没有 result 字段)\n * 注意:这里我们假设 \"对象结果\" 指的是一个普通的对象,而不是 ApiResponse。\n */\nexport const isObjectResult = (\n data: unknown\n): data is Record<string, unknown> => {\n if (typeof data !== 'object' || data === null) {\n return false\n }\n return !Object.prototype.hasOwnProperty.call(data, 'result')\n}\n/**\n * 生成默认字段\n */\nexport const generateDefaultField = <T = unknown, E = unknown>(\n opts: Partial<DefaultField<T, E>> = {}\n): DefaultField<T, E> => ({\n ...{\n result: [] as T, // 用户需要确保 T 是兼容的类型,例如 T extends unknown[]\n noMore: false,\n nothing: false,\n loading: false,\n error: null,\n extra: null as E,\n fetched: false,\n page: 0,\n total: 0\n },\n ...opts\n})\n\n/**\n * 根据参数生成 field 的 namespace\n */\nexport const generateFieldName = ({\n func,\n type,\n query = {}\n}: GenerateFieldProps): string => {\n const funcName =\n typeof func === 'string'\n ? func\n : `api-${Math.random().toString(36).substring(2)}`\n const fetchType = type || 'auto'\n let result = `${funcName}-${fetchType}`\n const filteredKeys = Object.keys(query).filter(\n (key) =>\n !['undefined', 'object', 'function'].includes(typeof query[key]) &&\n ![\n 'page',\n 'is_up',\n 'since_id',\n 'seen_ids',\n '__refresh__',\n '__reload__'\n ].includes(key)\n )\n\n filteredKeys.sort().forEach((key) => {\n result += `-${key}-${query[key]}`\n })\n\n return result\n}\n\n/**\n * 根据 key 从 object 里拿 value\n */\nexport const getObjectDeepValue = (\n field: unknown,\n keys: string | string[] = ''\n): unknown => {\n // 如果 keys 为空(包括 undefined、null、''、[]),返回 field\n if (!keys || (Array.isArray(keys) && keys.length === 0)) {\n return field\n }\n\n const keysArr = Array.isArray(keys) ? keys : keys.split('.')\n\n let result: unknown = field\n\n for (const key of keysArr) {\n if (result == null || typeof result !== 'object') {\n return undefined\n }\n result = (result as Record<string, unknown>)[key]\n }\n\n return result\n}\n\n/**\n * 安全地更新对象的深层值\n */\nexport const updateObjectDeepValue = (\n field: Record<string, unknown>,\n changeKey: string,\n value: unknown\n): void => {\n if (!changeKey) return\n\n const keys = changeKey.split('.')\n const lastKey = keys.pop()!\n let current: unknown = field\n\n for (const key of keys) {\n if (current == null || typeof current !== 'object') {\n ;(current as Record<string, unknown>)[key] = {}\n }\n current = (current as Record<string, unknown>)[key]\n }\n\n if (current != null && typeof current === 'object') {\n ;(current as Record<string, unknown>)[lastKey] = value\n }\n}\n\n// --- 修正点 1: 移除 searchValueByKey 和 computeMatchedItemIndex 的泛型 ---\n// 这些函数只处理特定结构的数据:数组或 { [id: string]: any[] }\ntype ResultArrayType = KeyMap[]\ntype ResultObjectType = Record<ObjectKey, KeyMap[]>\n\nexport const searchValueByKey = (\n result: ResultArrayType | ResultObjectType,\n id: ObjectKey,\n key: string\n): unknown => {\n if (isArray(result)) {\n // result is ResultArrayType\n const index = computeMatchedItemIndex(id, result, key)\n return index >= 0 ? result[index] : undefined\n } else {\n return result[id]\n }\n}\n\nexport const computeMatchedItemIndex = (\n itemId: ObjectKey,\n fieldArr: ResultArrayType,\n changingKey: string\n): number => {\n const stringifiedItemId = String(itemId)\n\n const len = fieldArr?.length as unknown as number\n if (typeof len !== 'number' || len <= 0) return -1\n\n for (let i = 0; i < len; i++) {\n const item = fieldArr[i]\n if (typeof item !== 'object' || item === null) continue\n\n const itemValue = getObjectDeepValue(item, changingKey)\n if (String(itemValue) === stringifiedItemId) {\n return i\n }\n }\n\n return -1\n}\n\nexport const combineArrayData = (\n fieldArray: ResultArrayType,\n value: ResultArrayType | Record<ObjectKey, KeyMap>,\n changingKey: string\n): void => {\n if (isArray(value)) {\n for (const col of value) {\n if (typeof col !== 'object' || col === null) continue\n const stringifyId = String(getObjectDeepValue(col, changingKey))\n const index = fieldArray.findIndex(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n String(getObjectDeepValue(item, changingKey)) === stringifyId\n )\n if (index !== -1) {\n fieldArray[index] = { ...fieldArray[index], ...col }\n }\n }\n } else {\n for (const [uniqueId, col] of Object.entries(value)) {\n if (typeof col !== 'object' || col === null) continue\n const stringifyId = String(uniqueId)\n const index = fieldArray.findIndex(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n String(getObjectDeepValue(item, changingKey)) === stringifyId\n )\n if (index !== -1) {\n fieldArray[index] = { ...fieldArray[index], ...col }\n }\n }\n }\n}\n\n/**\n * 判断参数是否为数组\n */\nexport const isArray = (data: unknown): data is unknown[] => {\n return Array.isArray(data)\n}\n\n/**\n * 设置一个响应式的数据到对象上\n */\nexport const setReactivityField = <T, E>(\n field: DefaultField<T, E>,\n key: FieldKeys,\n value: unknown,\n type: FetchType,\n insertBefore: boolean\n): void => {\n if (type === ENUM.FETCH_TYPE.PAGINATION) {\n ;(field as Record<FieldKeys, unknown>)[key] = value\n return\n }\n\n if (isArray(value)) {\n const current = (field as Record<FieldKeys, unknown>)[key]\n const currentArr = isArray(current) ? current : []\n const newValue = insertBefore\n ? value.concat(currentArr)\n : currentArr.concat(value)\n ;(field as Record<FieldKeys, unknown>)[key] = newValue\n return\n }\n\n if (key !== ENUM.FIELD_DATA.RESULT_KEY) {\n ;(field as Record<FieldKeys, unknown>)[key] = value\n return\n }\n\n // key is 'result'\n const resultField = field.result\n if (isArray(resultField)) {\n field.result = {} as T // reset to empty object\n }\n\n // Now field.result is an object\n const valueObj = value as Record<string, unknown>\n const target = field.result as Record<string, unknown>\n\n Object.keys(valueObj).forEach((subKey) => {\n const existing = target[subKey]\n const incoming = valueObj[subKey]\n\n if (existing !== undefined) {\n if (insertBefore) {\n target[subKey] =\n isArray(incoming) && isArray(existing)\n ? incoming.concat(existing)\n : incoming\n } else {\n target[subKey] =\n isArray(existing) && isArray(incoming)\n ? existing.concat(incoming)\n : incoming\n }\n } else {\n target[subKey] = incoming\n }\n })\n}\n/**\n * 计算一个数据列的长度\n */\nexport const computeResultLength = (data: unknown): number => {\n if (isArray(data)) {\n return data.length\n }\n if (data && typeof data === 'object') {\n return Object.values(data).reduce((acc, val) => {\n if (isArray(val)) {\n return acc + val.length\n }\n return acc\n }, 0)\n }\n return 0\n}\n\n// --- 修正点 3: 修正 generateRequestParams ---\nexport const generateRequestParams = ({\n field,\n uniqueKey,\n query = {},\n type\n}: GenerateParamsType): GenerateParamsResp => {\n const result: GenerateParamsResp = {}\n const changing = uniqueKey || ENUM.DEFAULT_UNIQUE_KEY_NAME\n const isFetched = field.fetched\n\n // Helper to safely get an ObjectKey from an item\n const getSafeObjectKey = (item: unknown): ObjectKey | undefined => {\n if (typeof item !== 'object' || item === null) return undefined\n const val = getObjectDeepValue(item, changing)\n if (typeof val === 'string' || typeof val === 'number') {\n return val\n }\n return undefined\n }\n\n if (isFetched) {\n if (type === ENUM.FETCH_TYPE.AUTO) {\n if (isArray(field.result)) {\n result.seen_ids = field.result\n .map((item) => getSafeObjectKey(item))\n .filter((id): id is ObjectKey => id !== undefined)\n .join(',')\n const targetIndex = query.is_up ? 0 : field.result.length - 1\n const targetItem = field.result[targetIndex]\n result.since_id = getSafeObjectKey(targetItem)\n }\n result.is_up = query.is_up ? 1 : 0\n result.page = typeof query.page === 'number' ? query.page : field.page + 1\n } else if (type === ENUM.FETCH_TYPE.HAS_LOADED_IDS) {\n if (isArray(field.result)) {\n result.seen_ids = field.result\n .map((item) => getSafeObjectKey(item))\n .filter((id): id is ObjectKey => id !== undefined)\n .join(',')\n }\n } else if (type === ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID) {\n if (isArray(field.result)) {\n const targetIndex = query.is_up ? 0 : field.result.length - 1\n const targetItem = field.result[targetIndex]\n result.since_id = getSafeObjectKey(targetItem)\n }\n result.is_up = query.is_up ? 1 : 0\n } else if (type === ENUM.FETCH_TYPE.PAGINATION) {\n result.page = typeof query.page === 'number' ? query.page : undefined\n } else if (type === ENUM.FETCH_TYPE.SCROLL_LOAD_MORE) {\n result.page = field.page + 1\n }\n } else {\n // ... handle initial fetch ...\n if (type === ENUM.FETCH_TYPE.AUTO) {\n result.seen_ids = ''\n result.since_id =\n typeof query.sinceId === 'string' || typeof query.sinceId === 'number'\n ? query.sinceId\n : query.is_up\n ? 999999999\n : 0\n result.is_up = query.is_up ? 1 : 0\n result.page =\n typeof query.page === 'number' ? query.page : field.page || 1\n } else if (type === ENUM.FETCH_TYPE.HAS_LOADED_IDS) {\n result.seen_ids = ''\n } else if (type === ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID) {\n result.since_id =\n typeof query.sinceId === 'string' || typeof query.sinceId === 'number'\n ? query.sinceId\n : query.is_up\n ? 999999999\n : 0\n result.is_up = query.is_up ? 1 : 0\n } else if (type === ENUM.FETCH_TYPE.PAGINATION) {\n result.page = typeof query.page === 'number' ? query.page : field.page\n } else if (type === ENUM.FETCH_TYPE.SCROLL_LOAD_MORE) {\n result.page = 1\n }\n }\n\n return {\n ...query,\n ...result\n }\n}\n","// enum.ts\nconst FETCH_TYPE_ARRAY = ['jump', 'sinceId', 'page', 'seenIds', 'auto'] as const\n\nexport default {\n SETTER_TYPE: {\n RESET: 0,\n MERGE: 1\n } as const,\n FETCH_TYPE_ARRAY,\n FETCH_TYPE: {\n PAGINATION: FETCH_TYPE_ARRAY[0],\n SINCE_FIRST_OR_END_ID: FETCH_TYPE_ARRAY[1],\n SCROLL_LOAD_MORE: FETCH_TYPE_ARRAY[2],\n HAS_LOADED_IDS: FETCH_TYPE_ARRAY[3],\n AUTO: FETCH_TYPE_ARRAY[4]\n } as const,\n CHANGE_TYPE: {\n SEARCH_FIELD: 'search',\n RESET_FIELD: 'reset',\n RESULT_UPDATE_KV: 'update',\n RESULT_ADD_AFTER: 'push',\n RESULT_ADD_BEFORE: 'unshift',\n RESULT_REMOVE_BY_ID: 'delete',\n RESULT_INSERT_TO_BEFORE: 'insert-before',\n RESULT_INSERT_TO_AFTER: 'insert-after',\n RESULT_LIST_MERGE: 'patch',\n RESULT_ITEM_MERGE: 'merge'\n } as const,\n FIELD_DATA: {\n RESULT_KEY: 'result',\n EXTRA_KEY: 'extra'\n } as const,\n DEFAULT_UNIQUE_KEY_NAME: 'id'\n} as const\n","// setters.ts\nimport {\n computeResultLength,\n setReactivityField,\n isObjectResult\n} from './utils'\nimport ENUM from './enum'\nimport type {\n SetDataType,\n SetErrorType,\n DefaultField,\n ApiResponse\n} from './types'\n\nexport const SET_DATA = <T, E>({\n getter,\n setter,\n data,\n fieldName,\n type,\n page,\n insertBefore\n}: SetDataType<T, E>): Promise<void> => {\n return new Promise((resolve, reject) => {\n const fieldData = getter(fieldName)\n if (!fieldData) {\n reject(new Error(`Field ${fieldName} not found.`))\n return\n }\n\n // 类型断言:确保 fieldData 符合 DefaultField<T, E>\n const field = fieldData as DefaultField<T, E>\n\n let result: T\n let extra: E | undefined\n\n if (isObjectResult(data)) {\n // data is T (object result mode)\n result = data as T\n field.nothing = false\n field.fetched = true\n field.noMore = true\n field.page = -1\n } else {\n // data is ApiResponse<T, E>\n const apiResponse = data as ApiResponse<T, E>\n result = apiResponse.result\n extra = apiResponse.extra\n const isEmpty = computeResultLength(result) === 0\n field.nothing = field.fetched ? false : isEmpty\n field.fetched = true\n field.total = apiResponse.total || 0\n\n if (type === ENUM.FETCH_TYPE.PAGINATION) {\n field.noMore = false\n field.page = +page\n } else {\n field.noMore =\n typeof apiResponse.no_more === 'undefined'\n ? isEmpty\n : apiResponse.no_more || isEmpty\n field.page = field.page + 1\n }\n }\n\n field.loading = false\n\n // Mutate field in-place (same as old logic)\n setReactivityField(\n field,\n ENUM.FIELD_DATA.RESULT_KEY,\n result,\n type,\n insertBefore\n )\n\n if (extra !== undefined && extra !== null) {\n setReactivityField(\n field,\n ENUM.FIELD_DATA.EXTRA_KEY,\n extra,\n type,\n insertBefore\n )\n }\n\n // Notify setter that field has been mutated (not replaced)\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET, // or MUTATE if you have such type\n value: field, // same reference\n callback: () => {\n resolve()\n }\n })\n })\n}\n\nexport const SET_ERROR = ({ setter, fieldName, error }: SetErrorType): void => {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.MERGE,\n value: {\n error,\n loading: false\n }\n })\n}\n","// actions.ts\nimport {\n generateDefaultField,\n generateFieldName,\n generateRequestParams,\n computeMatchedItemIndex,\n combineArrayData,\n updateObjectDeepValue,\n getObjectDeepValue,\n computeResultLength,\n searchValueByKey,\n isArray\n} from './utils'\nimport { SET_DATA, SET_ERROR } from './setters'\nimport ENUM from './enum'\nimport type {\n ObjectKey,\n InitStateType,\n InitDataType,\n LoadMoreType,\n UpdateStateType,\n DefaultField,\n KeyMap,\n ResultArrayType,\n ResultObjectType\n} from './types'\n\n// --- initState: func is now just a string ---\nexport const initState = ({\n getter,\n setter,\n func, // string only\n type,\n query,\n opts\n}: InitStateType): Promise<void> => {\n return new Promise((resolve) => {\n const fieldName = generateFieldName({ func, type, query })\n const fieldData = getter(fieldName)\n if (fieldData) {\n resolve()\n return\n }\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: generateDefaultField(opts),\n callback: () => {\n resolve()\n }\n })\n })\n}\n\nexport const initData = ({\n getter,\n setter,\n func, // string | function\n type,\n query,\n api,\n uniqueKey,\n callback\n}: InitDataType): Promise<void> =>\n new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, type, query })\n const fieldData = getter(fieldName)\n const doRefresh = !!query?.__refresh__\n const needReset = !!query?.__reload__\n\n if (fieldData && fieldData.error && !doRefresh) {\n resolve()\n return\n }\n if (fieldData && fieldData.loading) {\n resolve()\n return\n }\n const dontFetch = fieldData && fieldData.fetched && !doRefresh\n if (dontFetch) {\n resolve()\n return\n }\n\n const params = generateRequestParams({\n field: {\n ...(fieldData || generateDefaultField()),\n fetched: false\n },\n uniqueKey,\n query,\n type\n })\n\n const getData = () => {\n const loadData = () =>\n new Promise<unknown>((res, rej) => {\n const getDataFromAPI = () => {\n const funcCaller =\n typeof func === 'string'\n ? (api[func] as (p: unknown) => Promise<unknown>)\n : func\n\n funcCaller(params)\n .then(res)\n .catch((error: Error) => {\n SET_ERROR({ setter, fieldName, error })\n rej(error)\n })\n }\n\n getDataFromAPI()\n })\n\n loadData()\n .then((data) => {\n // <-- 'data' is now properly in scope\n const setData = () => {\n SET_DATA({\n getter,\n setter,\n data,\n fieldName,\n type,\n page: params.page || 0,\n insertBefore: false\n }).then(() => {\n if (callback) {\n callback({\n params,\n data, // <-- 'data' is now properly in scope\n refresh: doRefresh\n })\n }\n resolve()\n })\n }\n\n if (needReset) {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: generateDefaultField(),\n callback: setData\n })\n } else {\n setData()\n }\n })\n .catch(reject)\n }\n\n if (!dontFetch && !needReset) {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: {\n ...generateDefaultField(),\n loading: true,\n error: null\n },\n callback: getData\n })\n } else {\n getData()\n }\n })\n\nexport const loadMore = ({\n getter,\n setter,\n query,\n type,\n func, // string | function\n api,\n uniqueKey,\n errorRetry,\n callback\n}: LoadMoreType): Promise<void> =>\n new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, type, query })\n const fieldData = getter(fieldName)\n\n if (!fieldData) {\n resolve()\n return\n }\n\n if (fieldData.loading) {\n resolve()\n return\n }\n if (fieldData.nothing) {\n resolve()\n return\n }\n if (fieldData.noMore && !errorRetry) {\n resolve()\n return\n }\n if (\n type === ENUM.FETCH_TYPE.PAGINATION &&\n query &&\n query.page != null &&\n +query.page === fieldData.page\n ) {\n resolve()\n return\n }\n\n let loadingState: Partial<DefaultField>\n if (type === ENUM.FETCH_TYPE.PAGINATION) {\n loadingState = {\n loading: true,\n error: null,\n [ENUM.FIELD_DATA.RESULT_KEY]: [],\n [ENUM.FIELD_DATA.EXTRA_KEY]: null\n }\n } else {\n loadingState = {\n loading: true,\n error: null\n }\n }\n\n const params = generateRequestParams({\n field: fieldData,\n uniqueKey,\n query,\n type\n })\n\n if ('extra' in fieldData) {\n ;(params as KeyMap)[ENUM.FIELD_DATA.EXTRA_KEY] = fieldData.extra\n }\n\n const getData = () => {\n const funcCaller =\n typeof func === 'string'\n ? (api[func] as (p: unknown) => Promise<unknown>)\n : func\n\n funcCaller(params)\n .then((data: unknown) => {\n SET_DATA({\n getter,\n setter,\n data,\n fieldName,\n type,\n page: params.page || 0,\n insertBefore: !!query?.is_up\n }).then(() => {\n if (callback) {\n callback({\n params,\n data,\n refresh: false\n })\n }\n resolve()\n })\n })\n .catch((error: Error) => {\n SET_ERROR({ setter, fieldName, error })\n reject(error)\n })\n }\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.MERGE,\n value: loadingState,\n callback: getData\n })\n })\n\n// --- updateState: func is now just a string ---\nexport const updateState = ({\n getter,\n setter,\n func, // string only\n type,\n query,\n method,\n value,\n id,\n uniqueKey,\n changeKey\n}: UpdateStateType): Promise<unknown> => {\n return new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, type, query })\n const fieldData = getter(fieldName)\n if (!fieldData) {\n reject(new Error(`Field ${fieldName} not found.`))\n return\n }\n\n if (fieldData.page === -1) {\n resolve(null)\n return\n }\n\n const _id = id\n const _uniqueKey = uniqueKey || ENUM.DEFAULT_UNIQUE_KEY_NAME\n const _changeKey = changeKey || ENUM.FIELD_DATA.RESULT_KEY\n const beforeLength = computeResultLength(\n fieldData[ENUM.FIELD_DATA.RESULT_KEY]\n )\n\n const newFieldData: DefaultField = { ...fieldData }\n\n if (method === ENUM.CHANGE_TYPE.SEARCH_FIELD) {\n if (_id == null) {\n reject(new Error('ID is required for SEARCH_FIELD.'))\n return\n }\n // --- 修正: 安全断言 ---\n const result = searchValueByKey(\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as\n | ResultArrayType\n | ResultObjectType,\n _id as ObjectKey,\n _uniqueKey\n )\n resolve(result)\n } else if (method === ENUM.CHANGE_TYPE.RESULT_UPDATE_KV) {\n if (_id == null) {\n reject(new Error('ID is required for RESULT_UPDATE_KV.'))\n return\n }\n const matchedIndex = computeMatchedItemIndex(\n _id as ObjectKey,\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as ResultArrayType,\n _uniqueKey\n )\n if (matchedIndex >= 0) {\n updateObjectDeepValue(\n (\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as Record<\n string,\n unknown\n >[]\n )[matchedIndex],\n _changeKey,\n value\n )\n }\n resolve(null)\n } else if (method === ENUM.CHANGE_TYPE.RESULT_ITEM_MERGE) {\n if (_id == null) {\n reject(new Error('ID is required for RESULT_ITEM_MERGE.'))\n return\n }\n const matchedIndex = computeMatchedItemIndex(\n _id as ObjectKey,\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as ResultArrayType,\n _uniqueKey\n )\n if (matchedIndex >= 0) {\n const currentItem = (\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as Record<string, unknown>[]\n )[matchedIndex]\n ;(\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as Record<string, unknown>[]\n )[matchedIndex] = {\n ...currentItem,\n ...(value as Record<string, unknown>)\n }\n }\n resolve(null)\n } else if (method === ENUM.CHANGE_TYPE.RESET_FIELD) {\n // Safe double assertion\n updateObjectDeepValue(\n newFieldData as unknown as Record<string, unknown>,\n _changeKey,\n value\n )\n resolve(null)\n } else {\n let modifyValue = getObjectDeepValue(\n newFieldData as unknown as Record<string, unknown>,\n _changeKey\n )\n if (modifyValue == null) {\n modifyValue = []\n }\n\n const matchedIndex =\n _id != null\n ? computeMatchedItemIndex(\n _id as ObjectKey,\n modifyValue as ResultArrayType,\n _uniqueKey\n )\n : -1\n\n switch (method) {\n case ENUM.CHANGE_TYPE.RESULT_ADD_AFTER:\n if (isArray(modifyValue)) {\n modifyValue = isArray(value)\n ? [...modifyValue, ...value]\n : [...modifyValue, value]\n }\n break\n case ENUM.CHANGE_TYPE.RESULT_ADD_BEFORE:\n if (isArray(modifyValue)) {\n modifyValue = isArray(value)\n ? [...value, ...modifyValue]\n : [value, ...modifyValue]\n }\n break\n case ENUM.CHANGE_TYPE.RESULT_REMOVE_BY_ID:\n if (isArray(modifyValue)) {\n if (matchedIndex >= 0) {\n modifyValue.splice(matchedIndex, 1)\n } else if (isArray(_id)) {\n const idSet = new Set(_id as ObjectKey[])\n modifyValue = (modifyValue as Record<string, unknown>[]).filter(\n (item) =>\n !idSet.has(\n getObjectDeepValue(\n item as Record<string, unknown>,\n _uniqueKey\n ) as ObjectKey\n )\n )\n }\n }\n break\n case ENUM.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE:\n if (isArray(modifyValue) && matchedIndex >= 0) {\n modifyValue.splice(matchedIndex, 0, value)\n }\n break\n case ENUM.CHANGE_TYPE.RESULT_INSERT_TO_AFTER:\n if (isArray(modifyValue) && matchedIndex >= 0) {\n modifyValue.splice(matchedIndex + 1, 0, value)\n }\n break\n case ENUM.CHANGE_TYPE.RESULT_LIST_MERGE:\n if (isArray(modifyValue)) {\n combineArrayData(modifyValue as ResultArrayType, value, _uniqueKey)\n }\n break\n default:\n resolve(null)\n return\n }\n ;(newFieldData as unknown as Record<string, unknown>)[_changeKey] =\n modifyValue\n resolve(null)\n }\n\n const afterLength = computeResultLength(\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY]\n )\n newFieldData.total = newFieldData.total + afterLength - beforeLength\n newFieldData.nothing = afterLength === 0\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: newFieldData,\n callback: () => {\n resolve(null)\n }\n })\n })\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/enum.ts","../src/setters.ts","../src/actions.ts"],"names":[],"mappings":"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","file":"index.global.js","sourcesContent":["// utils.ts\nimport ENUM from './enum'\nimport type {\n ObjectKey,\n KeyMap,\n DefaultField,\n FetchType,\n FieldKeys,\n GenerateFieldProps,\n GenerateParamsType,\n GenerateParamsResp\n} from './types'\n\n/**\n * 判断数据是否为对象结果(即没有 result 字段)\n * 注意:这里我们假设 \"对象结果\" 指的是一个普通的对象,而不是 ApiResponse。\n */\nexport const isObjectResult = (\n data: unknown\n): data is Record<string, unknown> => {\n if (typeof data !== 'object' || data === null) {\n return false\n }\n return !Object.prototype.hasOwnProperty.call(data, 'result')\n}\n/**\n * 生成默认字段\n */\nexport const generateDefaultField = <T = unknown, E = unknown>(\n opts: Partial<DefaultField<T, E>> = {}\n): DefaultField<T, E> => ({\n ...{\n result: [] as T, // 用户需要确保 T 是兼容的类型,例如 T extends unknown[]\n noMore: false,\n nothing: false,\n loading: false,\n error: null,\n extra: null as E,\n fetched: false,\n page: 0,\n total: 0\n },\n ...opts\n})\n\n/**\n * 根据参数生成 field 的 namespace\n */\nexport const generateFieldName = ({\n func,\n type,\n query = {}\n}: GenerateFieldProps): string => {\n const funcName =\n typeof func === 'string'\n ? func\n : `api-${Math.random().toString(36).substring(2)}`\n const fetchType = type || 'auto'\n let result = `${funcName}-${fetchType}`\n const filteredKeys = Object.keys(query).filter(\n (key) =>\n !['undefined', 'object', 'function'].includes(typeof query[key]) &&\n ![\n 'page',\n 'is_up',\n 'since_id',\n 'seen_ids',\n '__refresh__',\n '__reload__'\n ].includes(key)\n )\n\n filteredKeys.sort().forEach((key) => {\n result += `-${key}-${query[key]}`\n })\n\n return result\n}\n\n/**\n * 根据 key 从 object 里拿 value\n */\nexport const getObjectDeepValue = (\n field: unknown,\n keys: string | string[] = ''\n): unknown => {\n // 如果 keys 为空(包括 undefined、null、''、[]),返回 field\n if (!keys || (Array.isArray(keys) && keys.length === 0)) {\n return field\n }\n\n const keysArr = Array.isArray(keys) ? keys : keys.split('.')\n\n let result: unknown = field\n\n for (const key of keysArr) {\n if (result == null || typeof result !== 'object') {\n return undefined\n }\n result = (result as Record<string, unknown>)[key]\n }\n\n return result\n}\n\n/**\n * 安全地更新对象的深层值\n */\nexport const updateObjectDeepValue = (\n field: Record<string, unknown>,\n changeKey: string,\n value: unknown\n): void => {\n if (!changeKey) return\n\n const keys = changeKey.split('.')\n const lastKey = keys.pop()!\n let current: unknown = field\n\n for (const key of keys) {\n if (current == null || typeof current !== 'object') {\n ;(current as Record<string, unknown>)[key] = {}\n }\n current = (current as Record<string, unknown>)[key]\n }\n\n if (current != null && typeof current === 'object') {\n ;(current as Record<string, unknown>)[lastKey] = value\n }\n}\n\n// --- 修正点 1: 移除 searchValueByKey 和 computeMatchedItemIndex 的泛型 ---\n// 这些函数只处理特定结构的数据:数组或 { [id: string]: any[] }\ntype ResultArrayType = KeyMap[]\ntype ResultObjectType = Record<ObjectKey, KeyMap[]>\n\nexport const searchValueByKey = (\n result: ResultArrayType | ResultObjectType,\n id: ObjectKey,\n key: string\n): unknown => {\n if (isArray(result)) {\n // result is ResultArrayType\n const index = computeMatchedItemIndex(id, result, key)\n return index >= 0 ? result[index] : undefined\n } else {\n return result[id]\n }\n}\n\nexport const computeMatchedItemIndex = (\n itemId: ObjectKey,\n fieldArr: ResultArrayType,\n changingKey: string\n): number => {\n const stringifiedItemId = String(itemId)\n\n const len = fieldArr?.length as unknown as number\n if (typeof len !== 'number' || len <= 0) return -1\n\n for (let i = 0; i < len; i++) {\n const item = fieldArr[i]\n if (typeof item !== 'object' || item === null) continue\n\n const itemValue = getObjectDeepValue(item, changingKey)\n if (String(itemValue) === stringifiedItemId) {\n return i\n }\n }\n\n return -1\n}\n\nexport const combineArrayData = (\n fieldArray: ResultArrayType,\n value: ResultArrayType | Record<ObjectKey, KeyMap>,\n changingKey: string\n): void => {\n if (isArray(value)) {\n for (const col of value) {\n if (typeof col !== 'object' || col === null) continue\n const stringifyId = String(getObjectDeepValue(col, changingKey))\n const index = fieldArray.findIndex(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n String(getObjectDeepValue(item, changingKey)) === stringifyId\n )\n if (index !== -1) {\n fieldArray[index] = { ...fieldArray[index], ...col }\n }\n }\n } else {\n for (const [uniqueId, col] of Object.entries(value)) {\n if (typeof col !== 'object' || col === null) continue\n const stringifyId = String(uniqueId)\n const index = fieldArray.findIndex(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n String(getObjectDeepValue(item, changingKey)) === stringifyId\n )\n if (index !== -1) {\n fieldArray[index] = { ...fieldArray[index], ...col }\n }\n }\n }\n}\n\n/**\n * 判断参数是否为数组\n */\nexport const isArray = (data: unknown): data is unknown[] => {\n return Array.isArray(data)\n}\n\n/**\n * 设置一个响应式的数据到对象上\n */\nexport const setReactivityField = <T, E>(\n field: DefaultField<T, E>,\n key: FieldKeys,\n value: unknown,\n type: FetchType,\n insertBefore: boolean\n): void => {\n if (type === ENUM.FETCH_TYPE.PAGINATION) {\n ;(field as Record<FieldKeys, unknown>)[key] = value\n return\n }\n\n if (isArray(value)) {\n const current = (field as Record<FieldKeys, unknown>)[key]\n const currentArr = isArray(current) ? current : []\n const newValue = insertBefore\n ? value.concat(currentArr)\n : currentArr.concat(value)\n ;(field as Record<FieldKeys, unknown>)[key] = newValue\n return\n }\n\n if (key !== ENUM.FIELD_DATA.RESULT_KEY) {\n ;(field as Record<FieldKeys, unknown>)[key] = value\n return\n }\n\n // key is 'result'\n const resultField = field.result\n if (isArray(resultField)) {\n field.result = {} as T // reset to empty object\n }\n\n // Now field.result is an object\n const valueObj = value as Record<string, unknown>\n const target = field.result as Record<string, unknown>\n\n Object.keys(valueObj).forEach((subKey) => {\n const existing = target[subKey]\n const incoming = valueObj[subKey]\n\n if (existing !== undefined) {\n if (insertBefore) {\n target[subKey] =\n isArray(incoming) && isArray(existing)\n ? incoming.concat(existing)\n : incoming\n } else {\n target[subKey] =\n isArray(existing) && isArray(incoming)\n ? existing.concat(incoming)\n : incoming\n }\n } else {\n target[subKey] = incoming\n }\n })\n}\n/**\n * 计算一个数据列的长度\n */\nexport const computeResultLength = (data: unknown): number => {\n if (isArray(data)) {\n return data.length\n }\n if (data && typeof data === 'object') {\n return Object.values(data).reduce((acc, val) => {\n if (isArray(val)) {\n return acc + val.length\n }\n return acc\n }, 0)\n }\n return 0\n}\n\n// --- 修正点 3: 修正 generateRequestParams ---\nexport const generateRequestParams = ({\n field,\n uniqueKey,\n query = {},\n type\n}: GenerateParamsType): GenerateParamsResp => {\n const result: GenerateParamsResp = {}\n const changing = uniqueKey || ENUM.DEFAULT_UNIQUE_KEY_NAME\n const isFetched = field.fetched\n\n // Helper to safely get an ObjectKey from an item\n const getSafeObjectKey = (item: unknown): ObjectKey | undefined => {\n if (typeof item !== 'object' || item === null) return undefined\n const val = getObjectDeepValue(item, changing)\n if (typeof val === 'string' || typeof val === 'number') {\n return val\n }\n return undefined\n }\n\n if (isFetched) {\n if (type === ENUM.FETCH_TYPE.AUTO) {\n if (isArray(field.result)) {\n result.seen_ids = field.result\n .map((item) => getSafeObjectKey(item))\n .filter((id): id is ObjectKey => id !== undefined)\n .join(',')\n const targetIndex = query.is_up ? 0 : field.result.length - 1\n const targetItem = field.result[targetIndex]\n result.since_id = getSafeObjectKey(targetItem)\n }\n result.is_up = query.is_up ? 1 : 0\n result.page = typeof query.page === 'number' ? query.page : field.page + 1\n } else if (type === ENUM.FETCH_TYPE.HAS_LOADED_IDS) {\n if (isArray(field.result)) {\n result.seen_ids = field.result\n .map((item) => getSafeObjectKey(item))\n .filter((id): id is ObjectKey => id !== undefined)\n .join(',')\n }\n } else if (type === ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID) {\n if (isArray(field.result)) {\n const targetIndex = query.is_up ? 0 : field.result.length - 1\n const targetItem = field.result[targetIndex]\n result.since_id = getSafeObjectKey(targetItem)\n }\n result.is_up = query.is_up ? 1 : 0\n } else if (type === ENUM.FETCH_TYPE.PAGINATION) {\n result.page = typeof query.page === 'number' ? query.page : undefined\n } else if (type === ENUM.FETCH_TYPE.SCROLL_LOAD_MORE) {\n result.page = field.page + 1\n }\n } else {\n // ... handle initial fetch ...\n if (type === ENUM.FETCH_TYPE.AUTO) {\n result.seen_ids = ''\n result.since_id =\n typeof query.sinceId === 'string' || typeof query.sinceId === 'number'\n ? query.sinceId\n : query.is_up\n ? 999999999\n : 0\n result.is_up = query.is_up ? 1 : 0\n result.page =\n typeof query.page === 'number' ? query.page : field.page || 1\n } else if (type === ENUM.FETCH_TYPE.HAS_LOADED_IDS) {\n result.seen_ids = ''\n } else if (type === ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID) {\n result.since_id =\n typeof query.sinceId === 'string' || typeof query.sinceId === 'number'\n ? query.sinceId\n : query.is_up\n ? 999999999\n : 0\n result.is_up = query.is_up ? 1 : 0\n } else if (type === ENUM.FETCH_TYPE.PAGINATION) {\n result.page = typeof query.page === 'number' ? query.page : field.page\n } else if (type === ENUM.FETCH_TYPE.SCROLL_LOAD_MORE) {\n result.page = 1\n }\n }\n\n return {\n ...query,\n ...result\n }\n}\n","// enum.ts\nconst FETCH_TYPE_ARRAY = ['jump', 'sinceId', 'page', 'seenIds', 'auto'] as const\n\nexport default {\n SETTER_TYPE: {\n RESET: 0,\n MERGE: 1\n } as const,\n FETCH_TYPE_ARRAY,\n FETCH_TYPE: {\n PAGINATION: FETCH_TYPE_ARRAY[0],\n SINCE_FIRST_OR_END_ID: FETCH_TYPE_ARRAY[1],\n SCROLL_LOAD_MORE: FETCH_TYPE_ARRAY[2],\n HAS_LOADED_IDS: FETCH_TYPE_ARRAY[3],\n AUTO: FETCH_TYPE_ARRAY[4]\n } as const,\n CHANGE_TYPE: {\n SEARCH_FIELD: 'search',\n RESET_FIELD: 'reset',\n RESULT_UPDATE_KV: 'update',\n RESULT_ADD_AFTER: 'push',\n RESULT_ADD_BEFORE: 'unshift',\n RESULT_REMOVE_BY_ID: 'delete',\n RESULT_INSERT_TO_BEFORE: 'insert-before',\n RESULT_INSERT_TO_AFTER: 'insert-after',\n RESULT_LIST_MERGE: 'patch',\n RESULT_ITEM_MERGE: 'merge'\n } as const,\n FIELD_DATA: {\n RESULT_KEY: 'result',\n EXTRA_KEY: 'extra'\n } as const,\n DEFAULT_UNIQUE_KEY_NAME: 'id'\n} as const\n","// setters.ts\nimport {\n computeResultLength,\n setReactivityField,\n isObjectResult\n} from './utils'\nimport ENUM from './enum'\nimport type {\n SetDataType,\n SetErrorType,\n DefaultField,\n ApiResponse\n} from './types'\n\nexport const SET_DATA = <T, E>({\n getter,\n setter,\n data,\n fieldName,\n type,\n page,\n insertBefore\n}: SetDataType<T, E>): Promise<void> => {\n return new Promise((resolve, reject) => {\n const fieldData = getter(fieldName)\n if (!fieldData) {\n reject(new Error(`Field ${fieldName} not found.`))\n return\n }\n\n // 类型断言:确保 fieldData 符合 DefaultField<T, E>\n const field = fieldData as DefaultField<T, E>\n\n let result: T\n let extra: E | undefined\n\n if (isObjectResult(data)) {\n // data is T (object result mode)\n result = data as T\n field.nothing = false\n field.fetched = true\n field.noMore = true\n field.page = -1\n } else {\n // data is ApiResponse<T, E>\n const apiResponse = data as ApiResponse<T, E>\n result = apiResponse.result\n extra = apiResponse.extra\n const isEmpty = computeResultLength(result) === 0\n field.nothing = field.fetched ? false : isEmpty\n field.fetched = true\n field.total = apiResponse.total || 0\n\n if (type === ENUM.FETCH_TYPE.PAGINATION) {\n field.noMore = false\n field.page = +page\n } else {\n field.noMore =\n typeof apiResponse.no_more === 'undefined'\n ? isEmpty\n : apiResponse.no_more || isEmpty\n field.page = field.page + 1\n }\n }\n\n field.loading = false\n\n // Mutate field in-place (same as old logic)\n setReactivityField(\n field,\n ENUM.FIELD_DATA.RESULT_KEY,\n result,\n type,\n insertBefore\n )\n\n if (extra !== undefined && extra !== null) {\n setReactivityField(\n field,\n ENUM.FIELD_DATA.EXTRA_KEY,\n extra,\n type,\n insertBefore\n )\n }\n\n // Notify setter that field has been mutated (not replaced)\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET, // or MUTATE if you have such type\n value: field, // same reference\n callback: () => {\n resolve()\n }\n })\n })\n}\n\nexport const SET_ERROR = ({ setter, fieldName, error }: SetErrorType): void => {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.MERGE,\n value: {\n error,\n loading: false\n }\n })\n}\n","// actions.ts\nimport {\n generateDefaultField,\n generateFieldName,\n generateRequestParams,\n computeMatchedItemIndex,\n combineArrayData,\n updateObjectDeepValue,\n getObjectDeepValue,\n computeResultLength,\n searchValueByKey,\n isArray\n} from './utils'\nimport { SET_DATA, SET_ERROR } from './setters'\nimport ENUM from './enum'\nimport type {\n ObjectKey,\n InitStateType,\n InitDataType,\n LoadMoreType,\n UpdateStateType,\n DefaultField,\n KeyMap,\n ResultArrayType,\n ResultObjectType\n} from './types'\n\n// --- initState: func is now just a string ---\nexport const initState = ({\n getter,\n setter,\n func, // string only\n type,\n query,\n opts\n}: InitStateType): Promise<void> => {\n return new Promise((resolve) => {\n const fieldName = generateFieldName({ func, type, query })\n const fieldData = getter(fieldName)\n if (fieldData) {\n resolve()\n return\n }\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: generateDefaultField(opts),\n callback: () => {\n resolve()\n }\n })\n })\n}\n\nexport const initData = ({\n getter,\n setter,\n func, // string | function\n type,\n query,\n api,\n uniqueKey,\n callback\n}: InitDataType): Promise<void> =>\n new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, type, query })\n const fieldData = getter(fieldName)\n const doRefresh = !!query?.__refresh__\n const needReset = !!query?.__reload__\n\n if (fieldData && fieldData.error && !doRefresh) {\n resolve()\n return\n }\n if (fieldData && fieldData.loading) {\n resolve()\n return\n }\n const dontFetch = fieldData && fieldData.fetched && !doRefresh\n if (dontFetch) {\n resolve()\n return\n }\n\n const params = generateRequestParams({\n field: {\n ...(fieldData || generateDefaultField()),\n fetched: false\n },\n uniqueKey,\n query,\n type\n })\n\n const getData = () => {\n const loadData = () =>\n new Promise<unknown>((res, rej) => {\n const getDataFromAPI = () => {\n const funcCaller =\n typeof func === 'string' && api ? api[func] : func\n\n if (typeof funcCaller === 'function') {\n funcCaller(params)\n .then(res)\n .catch((error: Error) => {\n SET_ERROR({ setter, fieldName, error })\n rej(error)\n })\n }\n }\n\n getDataFromAPI()\n })\n\n loadData()\n .then((data) => {\n // <-- 'data' is now properly in scope\n const setData = () => {\n SET_DATA({\n getter,\n setter,\n data,\n fieldName,\n type,\n page: params.page || 0,\n insertBefore: false\n }).then(() => {\n if (callback) {\n callback({\n params,\n data, // <-- 'data' is now properly in scope\n refresh: doRefresh\n })\n }\n resolve()\n })\n }\n\n if (needReset) {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: generateDefaultField(),\n callback: setData\n })\n } else {\n setData()\n }\n })\n .catch(reject)\n }\n\n if (!dontFetch && !needReset) {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: {\n ...generateDefaultField(),\n loading: true,\n error: null\n },\n callback: getData\n })\n } else {\n getData()\n }\n })\n\nexport const loadMore = ({\n getter,\n setter,\n query,\n type,\n func, // string | function\n api,\n uniqueKey,\n errorRetry,\n callback\n}: LoadMoreType): Promise<void> =>\n new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, type, query })\n const fieldData = getter(fieldName)\n\n if (!fieldData) {\n resolve()\n return\n }\n\n if (fieldData.loading) {\n resolve()\n return\n }\n if (fieldData.nothing) {\n resolve()\n return\n }\n if (fieldData.noMore && !errorRetry) {\n resolve()\n return\n }\n if (\n type === ENUM.FETCH_TYPE.PAGINATION &&\n query &&\n query.page != null &&\n +query.page === fieldData.page\n ) {\n resolve()\n return\n }\n\n let loadingState: Partial<DefaultField>\n if (type === ENUM.FETCH_TYPE.PAGINATION) {\n loadingState = {\n loading: true,\n error: null,\n [ENUM.FIELD_DATA.RESULT_KEY]: [],\n [ENUM.FIELD_DATA.EXTRA_KEY]: null\n }\n } else {\n loadingState = {\n loading: true,\n error: null\n }\n }\n\n const params = generateRequestParams({\n field: fieldData,\n uniqueKey,\n query,\n type\n })\n\n if ('extra' in fieldData) {\n ;(params as KeyMap)[ENUM.FIELD_DATA.EXTRA_KEY] = fieldData.extra\n }\n\n const getData = () => {\n const funcCaller = typeof func === 'string' && api ? api[func] : func\n\n if (typeof funcCaller === 'function') {\n funcCaller(params)\n .then((data: unknown) => {\n SET_DATA({\n getter,\n setter,\n data,\n fieldName,\n type,\n page: params.page || 0,\n insertBefore: !!query?.is_up\n }).then(() => {\n if (callback) {\n callback({\n params,\n data,\n refresh: false\n })\n }\n resolve()\n })\n })\n .catch((error: Error) => {\n SET_ERROR({ setter, fieldName, error })\n reject(error)\n })\n }\n }\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.MERGE,\n value: loadingState,\n callback: getData\n })\n })\n\n// --- updateState: func is now just a string ---\nexport const updateState = ({\n getter,\n setter,\n func, // string only\n type,\n query,\n method,\n value,\n id,\n uniqueKey,\n changeKey\n}: UpdateStateType): Promise<unknown> => {\n return new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, type, query })\n const fieldData = getter(fieldName)\n if (!fieldData) {\n reject(new Error(`Field ${fieldName} not found.`))\n return\n }\n\n if (fieldData.page === -1) {\n resolve(null)\n return\n }\n\n const _id = id\n const _uniqueKey = uniqueKey || ENUM.DEFAULT_UNIQUE_KEY_NAME\n const _changeKey = changeKey || ENUM.FIELD_DATA.RESULT_KEY\n const beforeLength = computeResultLength(\n fieldData[ENUM.FIELD_DATA.RESULT_KEY]\n )\n\n const newFieldData: DefaultField = { ...fieldData }\n\n if (method === ENUM.CHANGE_TYPE.SEARCH_FIELD) {\n if (_id == null) {\n reject(new Error('ID is required for SEARCH_FIELD.'))\n return\n }\n // --- 修正: 安全断言 ---\n const result = searchValueByKey(\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as\n | ResultArrayType\n | ResultObjectType,\n _id as ObjectKey,\n _uniqueKey\n )\n resolve(result)\n } else if (method === ENUM.CHANGE_TYPE.RESULT_UPDATE_KV) {\n if (_id == null) {\n reject(new Error('ID is required for RESULT_UPDATE_KV.'))\n return\n }\n const matchedIndex = computeMatchedItemIndex(\n _id as ObjectKey,\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as ResultArrayType,\n _uniqueKey\n )\n if (matchedIndex >= 0) {\n updateObjectDeepValue(\n (\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as Record<\n string,\n unknown\n >[]\n )[matchedIndex],\n _changeKey,\n value\n )\n }\n resolve(null)\n } else if (method === ENUM.CHANGE_TYPE.RESULT_ITEM_MERGE) {\n if (_id == null) {\n reject(new Error('ID is required for RESULT_ITEM_MERGE.'))\n return\n }\n const matchedIndex = computeMatchedItemIndex(\n _id as ObjectKey,\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as ResultArrayType,\n _uniqueKey\n )\n if (matchedIndex >= 0) {\n const currentItem = (\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as Record<string, unknown>[]\n )[matchedIndex]\n ;(\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as Record<string, unknown>[]\n )[matchedIndex] = {\n ...currentItem,\n ...(value as Record<string, unknown>)\n }\n }\n resolve(null)\n } else if (method === ENUM.CHANGE_TYPE.RESET_FIELD) {\n // Safe double assertion\n updateObjectDeepValue(\n newFieldData as unknown as Record<string, unknown>,\n _changeKey,\n value\n )\n resolve(null)\n } else {\n let modifyValue = getObjectDeepValue(\n newFieldData as unknown as Record<string, unknown>,\n _changeKey\n )\n if (modifyValue == null) {\n modifyValue = []\n }\n\n const matchedIndex =\n _id != null\n ? computeMatchedItemIndex(\n _id as ObjectKey,\n modifyValue as ResultArrayType,\n _uniqueKey\n )\n : -1\n\n switch (method) {\n case ENUM.CHANGE_TYPE.RESULT_ADD_AFTER:\n if (isArray(modifyValue)) {\n modifyValue = isArray(value)\n ? [...modifyValue, ...value]\n : [...modifyValue, value]\n }\n break\n case ENUM.CHANGE_TYPE.RESULT_ADD_BEFORE:\n if (isArray(modifyValue)) {\n modifyValue = isArray(value)\n ? [...value, ...modifyValue]\n : [value, ...modifyValue]\n }\n break\n case ENUM.CHANGE_TYPE.RESULT_REMOVE_BY_ID:\n if (isArray(modifyValue)) {\n if (matchedIndex >= 0) {\n modifyValue.splice(matchedIndex, 1)\n } else if (isArray(_id)) {\n const idSet = new Set(_id as ObjectKey[])\n modifyValue = (modifyValue as Record<string, unknown>[]).filter(\n (item) =>\n !idSet.has(\n getObjectDeepValue(\n item as Record<string, unknown>,\n _uniqueKey\n ) as ObjectKey\n )\n )\n }\n }\n break\n case ENUM.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE:\n if (isArray(modifyValue) && matchedIndex >= 0) {\n modifyValue.splice(matchedIndex, 0, value)\n }\n break\n case ENUM.CHANGE_TYPE.RESULT_INSERT_TO_AFTER:\n if (isArray(modifyValue) && matchedIndex >= 0) {\n modifyValue.splice(matchedIndex + 1, 0, value)\n }\n break\n case ENUM.CHANGE_TYPE.RESULT_LIST_MERGE:\n if (isArray(modifyValue)) {\n combineArrayData(modifyValue as ResultArrayType, value, _uniqueKey)\n }\n break\n default:\n resolve(null)\n return\n }\n ;(newFieldData as unknown as Record<string, unknown>)[_changeKey] =\n modifyValue\n resolve(null)\n }\n\n const afterLength = computeResultLength(\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY]\n )\n newFieldData.total = newFieldData.total + afterLength - beforeLength\n newFieldData.nothing = afterLength === 0\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: newFieldData,\n callback: () => {\n resolve(null)\n }\n })\n })\n}\n"]}
|