@flowlist/js-core 2.3.1 → 3.0.1
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/README.md +74 -102
- package/dist/index.d.mts +263 -0
- package/dist/index.d.ts +263 -4
- package/dist/index.global.js +775 -0
- package/dist/index.global.js.map +1 -0
- package/dist/index.js +770 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +763 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +33 -30
- package/dist/js-core.es.js +0 -582
- package/dist/js-core.umd.js +0 -1
- package/src/actions.ts +0 -388
- package/src/enum.ts +0 -33
- package/src/setters.ts +0 -91
- package/src/types.ts +0 -122
- package/src/utils.ts +0 -325
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,263 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 对象的唯一标识符类型
|
|
3
|
+
*/
|
|
4
|
+
type ObjectKey = string | number;
|
|
5
|
+
/**
|
|
6
|
+
* 通用键值对映射(注意:尽管 ObjectKey 包含 number,
|
|
7
|
+
* 但在实际对象中,number 键会被转为 string。
|
|
8
|
+
* 此处使用 string 以符合 Record 的实际行为 [[3]])
|
|
9
|
+
*/
|
|
10
|
+
type KeyMap = Record<string, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* 形态数组
|
|
13
|
+
*/
|
|
14
|
+
type MorphArray = unknown[];
|
|
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
|
+
*/
|
|
30
|
+
type FetchResultCallback = (obj: {
|
|
31
|
+
params: GenerateParamsResp;
|
|
32
|
+
data: unknown;
|
|
33
|
+
refresh: boolean;
|
|
34
|
+
}) => void;
|
|
35
|
+
/**
|
|
36
|
+
* 数据获取类型枚举
|
|
37
|
+
*/
|
|
38
|
+
type FetchType = 'jump' | 'sinceId' | 'page' | 'seenIds' | 'auto';
|
|
39
|
+
/**
|
|
40
|
+
* 字段数据的关键字
|
|
41
|
+
*/
|
|
42
|
+
type FieldKeys = 'result' | 'noMore' | 'nothing' | 'loading' | 'error' | 'extra' | 'fetched' | 'page' | 'total';
|
|
43
|
+
/**
|
|
44
|
+
* 生成字段名称的参数
|
|
45
|
+
*/
|
|
46
|
+
interface GenerateFieldProps {
|
|
47
|
+
func: DataSource;
|
|
48
|
+
type: FetchType;
|
|
49
|
+
query?: KeyMap;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 生成请求参数的输入
|
|
53
|
+
*/
|
|
54
|
+
interface GenerateParamsType {
|
|
55
|
+
field: DefaultField<unknown, unknown>;
|
|
56
|
+
uniqueKey?: string;
|
|
57
|
+
query?: KeyMap;
|
|
58
|
+
type: FetchType;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 生成请求参数的输出
|
|
62
|
+
*/
|
|
63
|
+
interface GenerateParamsResp {
|
|
64
|
+
seen_ids?: string;
|
|
65
|
+
since_id?: ObjectKey;
|
|
66
|
+
is_up?: 0 | 1;
|
|
67
|
+
page?: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Setter 函数的参数
|
|
71
|
+
*/
|
|
72
|
+
interface SetterFuncParams {
|
|
73
|
+
key: string;
|
|
74
|
+
type: number;
|
|
75
|
+
value: unknown;
|
|
76
|
+
callback?: (obj?: KeyMap) => void;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 默认字段数据结构,使用泛型 T 和 E 分别代表 result 和 extra 的类型
|
|
80
|
+
*/
|
|
81
|
+
interface DefaultField<T = unknown, E = unknown> {
|
|
82
|
+
result: T;
|
|
83
|
+
noMore: boolean;
|
|
84
|
+
nothing: boolean;
|
|
85
|
+
loading: boolean;
|
|
86
|
+
error: null | Error;
|
|
87
|
+
extra: E;
|
|
88
|
+
fetched: boolean;
|
|
89
|
+
page: number;
|
|
90
|
+
total: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* API 响应结构,使用泛型 T 和 E
|
|
94
|
+
*/
|
|
95
|
+
interface ApiResponse<T = unknown, E = unknown> {
|
|
96
|
+
result: T;
|
|
97
|
+
extra?: E;
|
|
98
|
+
total?: number;
|
|
99
|
+
no_more?: boolean;
|
|
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
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 初始化状态的参数
|
|
113
|
+
*/
|
|
114
|
+
interface InitStateType {
|
|
115
|
+
getter: FieldGetter;
|
|
116
|
+
setter: FieldSetter;
|
|
117
|
+
func: DataSource;
|
|
118
|
+
type: FetchType;
|
|
119
|
+
query?: KeyMap;
|
|
120
|
+
opts?: Partial<DefaultField<unknown, unknown>>;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* 初始化数据的参数
|
|
124
|
+
*/
|
|
125
|
+
type InitDataType = BaseFetchConfig;
|
|
126
|
+
/**
|
|
127
|
+
* 加载更多的参数
|
|
128
|
+
*/
|
|
129
|
+
interface LoadMoreType extends BaseFetchConfig {
|
|
130
|
+
errorRetry?: boolean;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 更新状态的参数
|
|
134
|
+
*/
|
|
135
|
+
interface UpdateStateType<T = unknown, E = unknown> {
|
|
136
|
+
getter: FieldGetter<T, E>;
|
|
137
|
+
setter: FieldSetter;
|
|
138
|
+
func: DataSource;
|
|
139
|
+
type: FetchType;
|
|
140
|
+
query?: KeyMap;
|
|
141
|
+
method: string;
|
|
142
|
+
value: ResultArrayType$1 | Record<ObjectKey, KeyMap>;
|
|
143
|
+
id?: string | number | ObjectKey[];
|
|
144
|
+
changeKey?: string;
|
|
145
|
+
uniqueKey?: string;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 设置数据的参数
|
|
149
|
+
*/
|
|
150
|
+
interface SetDataType<T = unknown, E = unknown> {
|
|
151
|
+
getter: FieldGetter<T, E>;
|
|
152
|
+
setter: FieldSetter;
|
|
153
|
+
data: T | ApiResponse<T, E>;
|
|
154
|
+
fieldName: string;
|
|
155
|
+
type: FetchType;
|
|
156
|
+
page: number;
|
|
157
|
+
insertBefore: boolean;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 设置错误的参数
|
|
161
|
+
*/
|
|
162
|
+
interface SetErrorType {
|
|
163
|
+
setter: FieldSetter;
|
|
164
|
+
fieldName: string;
|
|
165
|
+
error: Error;
|
|
166
|
+
}
|
|
167
|
+
type ResultArrayType$1 = KeyMap[];
|
|
168
|
+
type ResultObjectType$1 = Record<ObjectKey, KeyMap[]>;
|
|
169
|
+
|
|
170
|
+
declare const initState: ({ getter, setter, func, type, query, opts }: InitStateType) => Promise<void>;
|
|
171
|
+
declare const initData: ({ getter, setter, func, type, query, api, uniqueKey, callback }: InitDataType) => Promise<void>;
|
|
172
|
+
declare const loadMore: ({ getter, setter, query, type, func, api, uniqueKey, errorRetry, callback }: LoadMoreType) => Promise<void>;
|
|
173
|
+
declare const updateState: ({ getter, setter, func, type, query, method, value, id, uniqueKey, changeKey }: UpdateStateType) => Promise<unknown>;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* 判断数据是否为对象结果(即没有 result 字段)
|
|
177
|
+
* 注意:这里我们假设 "对象结果" 指的是一个普通的对象,而不是 ApiResponse。
|
|
178
|
+
*/
|
|
179
|
+
declare const isObjectResult: (data: unknown) => data is Record<string, unknown>;
|
|
180
|
+
/**
|
|
181
|
+
* 生成默认字段
|
|
182
|
+
*/
|
|
183
|
+
declare const generateDefaultField: <T = unknown, E = unknown>(opts?: Partial<DefaultField<T, E>>) => DefaultField<T, E>;
|
|
184
|
+
/**
|
|
185
|
+
* 根据参数生成 field 的 namespace
|
|
186
|
+
*/
|
|
187
|
+
declare const generateFieldName: ({ func, type, query }: GenerateFieldProps) => string;
|
|
188
|
+
/**
|
|
189
|
+
* 根据 key 从 object 里拿 value
|
|
190
|
+
*/
|
|
191
|
+
declare const getObjectDeepValue: (field: unknown, keys?: string | string[]) => unknown;
|
|
192
|
+
/**
|
|
193
|
+
* 安全地更新对象的深层值
|
|
194
|
+
*/
|
|
195
|
+
declare const updateObjectDeepValue: (field: Record<string, unknown>, changeKey: string, value: unknown) => void;
|
|
196
|
+
type ResultArrayType = KeyMap[];
|
|
197
|
+
type ResultObjectType = Record<ObjectKey, KeyMap[]>;
|
|
198
|
+
declare const searchValueByKey: (result: ResultArrayType | ResultObjectType, id: ObjectKey, key: string) => unknown;
|
|
199
|
+
declare const computeMatchedItemIndex: (itemId: ObjectKey, fieldArr: ResultArrayType, changingKey: string) => number;
|
|
200
|
+
declare const combineArrayData: (fieldArray: ResultArrayType, value: ResultArrayType | Record<ObjectKey, KeyMap>, changingKey: string) => void;
|
|
201
|
+
/**
|
|
202
|
+
* 判断参数是否为数组
|
|
203
|
+
*/
|
|
204
|
+
declare const isArray: (data: unknown) => data is unknown[];
|
|
205
|
+
/**
|
|
206
|
+
* 设置一个响应式的数据到对象上
|
|
207
|
+
*/
|
|
208
|
+
declare const setReactivityField: <T, E>(field: DefaultField<T, E>, key: FieldKeys, value: unknown, type: FetchType, insertBefore: boolean) => void;
|
|
209
|
+
/**
|
|
210
|
+
* 计算一个数据列的长度
|
|
211
|
+
*/
|
|
212
|
+
declare const computeResultLength: (data: unknown) => number;
|
|
213
|
+
declare const generateRequestParams: ({ field, uniqueKey, query, type }: GenerateParamsType) => GenerateParamsResp;
|
|
214
|
+
|
|
215
|
+
declare const utils_combineArrayData: typeof combineArrayData;
|
|
216
|
+
declare const utils_computeMatchedItemIndex: typeof computeMatchedItemIndex;
|
|
217
|
+
declare const utils_computeResultLength: typeof computeResultLength;
|
|
218
|
+
declare const utils_generateDefaultField: typeof generateDefaultField;
|
|
219
|
+
declare const utils_generateFieldName: typeof generateFieldName;
|
|
220
|
+
declare const utils_generateRequestParams: typeof generateRequestParams;
|
|
221
|
+
declare const utils_getObjectDeepValue: typeof getObjectDeepValue;
|
|
222
|
+
declare const utils_isArray: typeof isArray;
|
|
223
|
+
declare const utils_isObjectResult: typeof isObjectResult;
|
|
224
|
+
declare const utils_searchValueByKey: typeof searchValueByKey;
|
|
225
|
+
declare const utils_setReactivityField: typeof setReactivityField;
|
|
226
|
+
declare const utils_updateObjectDeepValue: typeof updateObjectDeepValue;
|
|
227
|
+
declare namespace utils {
|
|
228
|
+
export { utils_combineArrayData as combineArrayData, utils_computeMatchedItemIndex as computeMatchedItemIndex, utils_computeResultLength as computeResultLength, utils_generateDefaultField as generateDefaultField, utils_generateFieldName as generateFieldName, utils_generateRequestParams as generateRequestParams, utils_getObjectDeepValue as getObjectDeepValue, utils_isArray as isArray, utils_isObjectResult as isObjectResult, utils_searchValueByKey as searchValueByKey, utils_setReactivityField as setReactivityField, utils_updateObjectDeepValue as updateObjectDeepValue };
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
declare const _default: {
|
|
232
|
+
readonly SETTER_TYPE: {
|
|
233
|
+
readonly RESET: 0;
|
|
234
|
+
readonly MERGE: 1;
|
|
235
|
+
};
|
|
236
|
+
readonly FETCH_TYPE_ARRAY: readonly ["jump", "sinceId", "page", "seenIds", "auto"];
|
|
237
|
+
readonly FETCH_TYPE: {
|
|
238
|
+
readonly PAGINATION: "jump";
|
|
239
|
+
readonly SINCE_FIRST_OR_END_ID: "sinceId";
|
|
240
|
+
readonly SCROLL_LOAD_MORE: "page";
|
|
241
|
+
readonly HAS_LOADED_IDS: "seenIds";
|
|
242
|
+
readonly AUTO: "auto";
|
|
243
|
+
};
|
|
244
|
+
readonly CHANGE_TYPE: {
|
|
245
|
+
readonly SEARCH_FIELD: "search";
|
|
246
|
+
readonly RESET_FIELD: "reset";
|
|
247
|
+
readonly RESULT_UPDATE_KV: "update";
|
|
248
|
+
readonly RESULT_ADD_AFTER: "push";
|
|
249
|
+
readonly RESULT_ADD_BEFORE: "unshift";
|
|
250
|
+
readonly RESULT_REMOVE_BY_ID: "delete";
|
|
251
|
+
readonly RESULT_INSERT_TO_BEFORE: "insert-before";
|
|
252
|
+
readonly RESULT_INSERT_TO_AFTER: "insert-after";
|
|
253
|
+
readonly RESULT_LIST_MERGE: "patch";
|
|
254
|
+
readonly RESULT_ITEM_MERGE: "merge";
|
|
255
|
+
};
|
|
256
|
+
readonly FIELD_DATA: {
|
|
257
|
+
readonly RESULT_KEY: "result";
|
|
258
|
+
readonly EXTRA_KEY: "extra";
|
|
259
|
+
};
|
|
260
|
+
readonly DEFAULT_UNIQUE_KEY_NAME: "id";
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
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 };
|