@flowlist/js-core 4.0.1-beta.0 → 4.0.3-beta.0
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 +22 -21
- package/dist/index.d.ts +22 -21
- package/dist/index.global.js +36 -10
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +36 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +36 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -1
package/dist/index.d.mts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
type ObjectKey = string | number;
|
|
5
5
|
/**
|
|
6
6
|
* 通用键值对映射 - 使用 Record 以保持灵活性和性能
|
|
7
|
+
* 通过索引签名支持动态属性访问
|
|
7
8
|
*/
|
|
8
9
|
type KeyMap = Record<string, unknown>;
|
|
9
10
|
/**
|
|
@@ -62,7 +63,8 @@ type FetchType = 'jump' | 'sinceId' | 'page' | 'seenIds' | 'auto';
|
|
|
62
63
|
/**
|
|
63
64
|
* 请求参数的基础约束
|
|
64
65
|
*/
|
|
65
|
-
interface RequestParams
|
|
66
|
+
interface RequestParams {
|
|
67
|
+
[key: string]: unknown;
|
|
66
68
|
__refresh__?: boolean;
|
|
67
69
|
__reload__?: boolean;
|
|
68
70
|
is_up?: 0 | 1 | boolean;
|
|
@@ -105,75 +107,74 @@ type FetchResultCallback<P, R> = (_obj: {
|
|
|
105
107
|
data: ApiResponse<R>;
|
|
106
108
|
refresh: boolean;
|
|
107
109
|
}) => void;
|
|
108
|
-
interface CommonParams<P
|
|
110
|
+
interface CommonParams<P = RequestParams, R = ResultType> {
|
|
109
111
|
readonly func: ApiContract<P, R>;
|
|
110
112
|
readonly type?: FetchType;
|
|
111
113
|
readonly query?: P;
|
|
112
114
|
readonly uniqueKey?: string;
|
|
113
115
|
readonly callback?: FetchResultCallback<P, R>;
|
|
114
116
|
}
|
|
115
|
-
interface BaseFetchConfig<P
|
|
117
|
+
interface BaseFetchConfig<P = RequestParams, R = ResultType> extends CommonParams<P, R> {
|
|
116
118
|
readonly getter: FieldGetter;
|
|
117
119
|
readonly setter: FieldSetter;
|
|
118
120
|
}
|
|
119
121
|
/**
|
|
120
122
|
* 初始化状态的参数对外接口
|
|
121
123
|
*/
|
|
122
|
-
interface InitStateParams<P
|
|
124
|
+
interface InitStateParams<P = RequestParams, R = ResultType> {
|
|
123
125
|
readonly func: ApiContract<P, R>;
|
|
124
|
-
readonly type: FetchType;
|
|
125
126
|
readonly query?: P;
|
|
126
127
|
readonly opts?: Partial<DefaultField>;
|
|
127
128
|
}
|
|
128
129
|
/**
|
|
129
130
|
* 初始化状态的参数(内部)
|
|
130
131
|
*/
|
|
131
|
-
interface InitStateType<P
|
|
132
|
+
interface InitStateType<P = RequestParams, R = ResultType> extends InitStateParams<P, R> {
|
|
132
133
|
readonly getter: FieldGetter;
|
|
133
134
|
readonly setter: FieldSetter;
|
|
134
135
|
}
|
|
135
136
|
/**
|
|
136
137
|
* 初始化数据的参数对外接口
|
|
137
138
|
*/
|
|
138
|
-
type InitDataParams<P
|
|
139
|
+
type InitDataParams<P = RequestParams, R = ResultType> = CommonParams<P, R>;
|
|
139
140
|
/**
|
|
140
141
|
* 初始化数据的参数(内部)
|
|
141
142
|
*/
|
|
142
|
-
type InitDataType<P
|
|
143
|
+
type InitDataType<P = RequestParams, R = ResultType> = BaseFetchConfig<P, R>;
|
|
143
144
|
/**
|
|
144
145
|
* 加载更多的参数对外接口
|
|
145
146
|
*/
|
|
146
|
-
interface LoadMoreParams<P
|
|
147
|
+
interface LoadMoreParams<P = RequestParams, R = ResultType> extends CommonParams<P, R> {
|
|
147
148
|
readonly errorRetry?: boolean;
|
|
148
149
|
}
|
|
149
150
|
/**
|
|
150
151
|
* 加载更多的参数(内部)
|
|
151
152
|
*/
|
|
152
|
-
interface LoadMoreType<P
|
|
153
|
+
interface LoadMoreType<P = RequestParams, R = ResultType> extends BaseFetchConfig<P, R> {
|
|
153
154
|
readonly errorRetry?: boolean;
|
|
154
155
|
}
|
|
155
156
|
/**
|
|
156
157
|
* 更新状态的参数(内部使用)
|
|
157
158
|
*/
|
|
158
|
-
interface UpdateStateType<P
|
|
159
|
+
interface UpdateStateType<P = RequestParams, R = ResultType, T = KeyMap> {
|
|
159
160
|
readonly getter: FieldGetter;
|
|
160
161
|
readonly setter: FieldSetter;
|
|
161
162
|
readonly func: ApiContract<P, R>;
|
|
162
163
|
readonly query?: P;
|
|
163
164
|
readonly method: string;
|
|
164
|
-
readonly value: T;
|
|
165
|
+
readonly value: T | T[] | KeyMap | KeyMap[];
|
|
165
166
|
readonly id?: ObjectKey | ObjectKey[];
|
|
166
167
|
readonly changeKey?: string;
|
|
167
168
|
}
|
|
168
169
|
/**
|
|
169
170
|
* 更新状态的参数(对外接口)
|
|
170
171
|
*/
|
|
171
|
-
interface UpdateStateParams<P
|
|
172
|
+
interface UpdateStateParams<P = RequestParams, R = ResultType, T = KeyMap> {
|
|
172
173
|
readonly func: ApiContract<P, R>;
|
|
173
174
|
readonly type: FetchType;
|
|
174
175
|
readonly query?: P;
|
|
175
176
|
readonly method: string;
|
|
176
|
-
readonly value: T |
|
|
177
|
+
readonly value: T | T[] | KeyMap | KeyMap[];
|
|
177
178
|
readonly id?: ObjectKey | ObjectKey[];
|
|
178
179
|
readonly changeKey?: string;
|
|
179
180
|
readonly uniqueKey?: string;
|
|
@@ -198,14 +199,14 @@ interface SetErrorType {
|
|
|
198
199
|
readonly fieldName: string;
|
|
199
200
|
readonly error: Error | null;
|
|
200
201
|
}
|
|
201
|
-
interface ApiContract<P
|
|
202
|
+
interface ApiContract<P = RequestParams, R = ResultType> {
|
|
202
203
|
(params: P): Promise<ApiResponse<R>>;
|
|
203
204
|
readonly id: string;
|
|
204
205
|
readonly type: FetchType;
|
|
205
206
|
readonly uniqueKey: string;
|
|
206
207
|
readonly paramsIgnore: string[];
|
|
207
208
|
}
|
|
208
|
-
declare function createApi<P
|
|
209
|
+
declare function createApi<P = RequestParams, R = ResultType>(options: {
|
|
209
210
|
id: string;
|
|
210
211
|
type?: FetchType;
|
|
211
212
|
uniqueKey?: string;
|
|
@@ -213,13 +214,13 @@ declare function createApi<P extends RequestParams, R extends ResultType>(option
|
|
|
213
214
|
fetcher: (params: P) => Promise<ApiResponse<R>>;
|
|
214
215
|
}): ApiContract<P, R>;
|
|
215
216
|
|
|
216
|
-
declare const initState: <P
|
|
217
|
-
declare const initData: <P
|
|
217
|
+
declare const initState: <P = RequestParams, R = ResultType>({ getter, setter, func, query, opts }: InitStateType<P, R>) => Promise<void>;
|
|
218
|
+
declare const initData: <P = RequestParams, R = ResultType>({ getter, setter, func, query, callback }: InitDataType<P, R>) => Promise<void>;
|
|
218
219
|
/**
|
|
219
220
|
* 加载更多数据
|
|
220
221
|
*/
|
|
221
|
-
declare const loadMore: <P
|
|
222
|
-
declare const updateState: <P
|
|
222
|
+
declare const loadMore: <P = RequestParams, R = ResultType>({ getter, setter, query, func, errorRetry, callback }: LoadMoreType<P, R>) => Promise<void>;
|
|
223
|
+
declare const updateState: <P = RequestParams, R = ResultType, T = KeyMap>({ getter, setter, func, query, method, id, value, changeKey }: UpdateStateType<P, R, T>) => Promise<unknown>;
|
|
223
224
|
|
|
224
225
|
declare const isArray: (data: unknown) => data is unknown[];
|
|
225
226
|
/**
|
|
@@ -248,7 +249,7 @@ declare const isKeyMapArray: (value: unknown) => value is KeyMap[];
|
|
|
248
249
|
declare const isObjectKeyArray: (value: unknown) => value is ObjectKey[];
|
|
249
250
|
declare const isObjectResult: (data: unknown) => data is Record<string, unknown>;
|
|
250
251
|
declare const generateDefaultField: (opts?: Partial<DefaultField>) => DefaultField;
|
|
251
|
-
declare const generateFieldName: <P
|
|
252
|
+
declare const generateFieldName: <P = RequestParams, R = ResultType>({ func, query }: {
|
|
252
253
|
func: ApiContract<P, R>;
|
|
253
254
|
query?: P;
|
|
254
255
|
}) => string;
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
type ObjectKey = string | number;
|
|
5
5
|
/**
|
|
6
6
|
* 通用键值对映射 - 使用 Record 以保持灵活性和性能
|
|
7
|
+
* 通过索引签名支持动态属性访问
|
|
7
8
|
*/
|
|
8
9
|
type KeyMap = Record<string, unknown>;
|
|
9
10
|
/**
|
|
@@ -62,7 +63,8 @@ type FetchType = 'jump' | 'sinceId' | 'page' | 'seenIds' | 'auto';
|
|
|
62
63
|
/**
|
|
63
64
|
* 请求参数的基础约束
|
|
64
65
|
*/
|
|
65
|
-
interface RequestParams
|
|
66
|
+
interface RequestParams {
|
|
67
|
+
[key: string]: unknown;
|
|
66
68
|
__refresh__?: boolean;
|
|
67
69
|
__reload__?: boolean;
|
|
68
70
|
is_up?: 0 | 1 | boolean;
|
|
@@ -105,75 +107,74 @@ type FetchResultCallback<P, R> = (_obj: {
|
|
|
105
107
|
data: ApiResponse<R>;
|
|
106
108
|
refresh: boolean;
|
|
107
109
|
}) => void;
|
|
108
|
-
interface CommonParams<P
|
|
110
|
+
interface CommonParams<P = RequestParams, R = ResultType> {
|
|
109
111
|
readonly func: ApiContract<P, R>;
|
|
110
112
|
readonly type?: FetchType;
|
|
111
113
|
readonly query?: P;
|
|
112
114
|
readonly uniqueKey?: string;
|
|
113
115
|
readonly callback?: FetchResultCallback<P, R>;
|
|
114
116
|
}
|
|
115
|
-
interface BaseFetchConfig<P
|
|
117
|
+
interface BaseFetchConfig<P = RequestParams, R = ResultType> extends CommonParams<P, R> {
|
|
116
118
|
readonly getter: FieldGetter;
|
|
117
119
|
readonly setter: FieldSetter;
|
|
118
120
|
}
|
|
119
121
|
/**
|
|
120
122
|
* 初始化状态的参数对外接口
|
|
121
123
|
*/
|
|
122
|
-
interface InitStateParams<P
|
|
124
|
+
interface InitStateParams<P = RequestParams, R = ResultType> {
|
|
123
125
|
readonly func: ApiContract<P, R>;
|
|
124
|
-
readonly type: FetchType;
|
|
125
126
|
readonly query?: P;
|
|
126
127
|
readonly opts?: Partial<DefaultField>;
|
|
127
128
|
}
|
|
128
129
|
/**
|
|
129
130
|
* 初始化状态的参数(内部)
|
|
130
131
|
*/
|
|
131
|
-
interface InitStateType<P
|
|
132
|
+
interface InitStateType<P = RequestParams, R = ResultType> extends InitStateParams<P, R> {
|
|
132
133
|
readonly getter: FieldGetter;
|
|
133
134
|
readonly setter: FieldSetter;
|
|
134
135
|
}
|
|
135
136
|
/**
|
|
136
137
|
* 初始化数据的参数对外接口
|
|
137
138
|
*/
|
|
138
|
-
type InitDataParams<P
|
|
139
|
+
type InitDataParams<P = RequestParams, R = ResultType> = CommonParams<P, R>;
|
|
139
140
|
/**
|
|
140
141
|
* 初始化数据的参数(内部)
|
|
141
142
|
*/
|
|
142
|
-
type InitDataType<P
|
|
143
|
+
type InitDataType<P = RequestParams, R = ResultType> = BaseFetchConfig<P, R>;
|
|
143
144
|
/**
|
|
144
145
|
* 加载更多的参数对外接口
|
|
145
146
|
*/
|
|
146
|
-
interface LoadMoreParams<P
|
|
147
|
+
interface LoadMoreParams<P = RequestParams, R = ResultType> extends CommonParams<P, R> {
|
|
147
148
|
readonly errorRetry?: boolean;
|
|
148
149
|
}
|
|
149
150
|
/**
|
|
150
151
|
* 加载更多的参数(内部)
|
|
151
152
|
*/
|
|
152
|
-
interface LoadMoreType<P
|
|
153
|
+
interface LoadMoreType<P = RequestParams, R = ResultType> extends BaseFetchConfig<P, R> {
|
|
153
154
|
readonly errorRetry?: boolean;
|
|
154
155
|
}
|
|
155
156
|
/**
|
|
156
157
|
* 更新状态的参数(内部使用)
|
|
157
158
|
*/
|
|
158
|
-
interface UpdateStateType<P
|
|
159
|
+
interface UpdateStateType<P = RequestParams, R = ResultType, T = KeyMap> {
|
|
159
160
|
readonly getter: FieldGetter;
|
|
160
161
|
readonly setter: FieldSetter;
|
|
161
162
|
readonly func: ApiContract<P, R>;
|
|
162
163
|
readonly query?: P;
|
|
163
164
|
readonly method: string;
|
|
164
|
-
readonly value: T;
|
|
165
|
+
readonly value: T | T[] | KeyMap | KeyMap[];
|
|
165
166
|
readonly id?: ObjectKey | ObjectKey[];
|
|
166
167
|
readonly changeKey?: string;
|
|
167
168
|
}
|
|
168
169
|
/**
|
|
169
170
|
* 更新状态的参数(对外接口)
|
|
170
171
|
*/
|
|
171
|
-
interface UpdateStateParams<P
|
|
172
|
+
interface UpdateStateParams<P = RequestParams, R = ResultType, T = KeyMap> {
|
|
172
173
|
readonly func: ApiContract<P, R>;
|
|
173
174
|
readonly type: FetchType;
|
|
174
175
|
readonly query?: P;
|
|
175
176
|
readonly method: string;
|
|
176
|
-
readonly value: T |
|
|
177
|
+
readonly value: T | T[] | KeyMap | KeyMap[];
|
|
177
178
|
readonly id?: ObjectKey | ObjectKey[];
|
|
178
179
|
readonly changeKey?: string;
|
|
179
180
|
readonly uniqueKey?: string;
|
|
@@ -198,14 +199,14 @@ interface SetErrorType {
|
|
|
198
199
|
readonly fieldName: string;
|
|
199
200
|
readonly error: Error | null;
|
|
200
201
|
}
|
|
201
|
-
interface ApiContract<P
|
|
202
|
+
interface ApiContract<P = RequestParams, R = ResultType> {
|
|
202
203
|
(params: P): Promise<ApiResponse<R>>;
|
|
203
204
|
readonly id: string;
|
|
204
205
|
readonly type: FetchType;
|
|
205
206
|
readonly uniqueKey: string;
|
|
206
207
|
readonly paramsIgnore: string[];
|
|
207
208
|
}
|
|
208
|
-
declare function createApi<P
|
|
209
|
+
declare function createApi<P = RequestParams, R = ResultType>(options: {
|
|
209
210
|
id: string;
|
|
210
211
|
type?: FetchType;
|
|
211
212
|
uniqueKey?: string;
|
|
@@ -213,13 +214,13 @@ declare function createApi<P extends RequestParams, R extends ResultType>(option
|
|
|
213
214
|
fetcher: (params: P) => Promise<ApiResponse<R>>;
|
|
214
215
|
}): ApiContract<P, R>;
|
|
215
216
|
|
|
216
|
-
declare const initState: <P
|
|
217
|
-
declare const initData: <P
|
|
217
|
+
declare const initState: <P = RequestParams, R = ResultType>({ getter, setter, func, query, opts }: InitStateType<P, R>) => Promise<void>;
|
|
218
|
+
declare const initData: <P = RequestParams, R = ResultType>({ getter, setter, func, query, callback }: InitDataType<P, R>) => Promise<void>;
|
|
218
219
|
/**
|
|
219
220
|
* 加载更多数据
|
|
220
221
|
*/
|
|
221
|
-
declare const loadMore: <P
|
|
222
|
-
declare const updateState: <P
|
|
222
|
+
declare const loadMore: <P = RequestParams, R = ResultType>({ getter, setter, query, func, errorRetry, callback }: LoadMoreType<P, R>) => Promise<void>;
|
|
223
|
+
declare const updateState: <P = RequestParams, R = ResultType, T = KeyMap>({ getter, setter, func, query, method, id, value, changeKey }: UpdateStateType<P, R, T>) => Promise<unknown>;
|
|
223
224
|
|
|
224
225
|
declare const isArray: (data: unknown) => data is unknown[];
|
|
225
226
|
/**
|
|
@@ -248,7 +249,7 @@ declare const isKeyMapArray: (value: unknown) => value is KeyMap[];
|
|
|
248
249
|
declare const isObjectKeyArray: (value: unknown) => value is ObjectKey[];
|
|
249
250
|
declare const isObjectResult: (data: unknown) => data is Record<string, unknown>;
|
|
250
251
|
declare const generateDefaultField: (opts?: Partial<DefaultField>) => DefaultField;
|
|
251
|
-
declare const generateFieldName: <P
|
|
252
|
+
declare const generateFieldName: <P = RequestParams, R = ResultType>({ func, query }: {
|
|
252
253
|
func: ApiContract<P, R>;
|
|
253
254
|
query?: P;
|
|
254
255
|
}) => string;
|
package/dist/index.global.js
CHANGED
|
@@ -133,11 +133,12 @@ var FlowList = (function (exports) {
|
|
|
133
133
|
if (!query) {
|
|
134
134
|
return result;
|
|
135
135
|
}
|
|
136
|
-
const
|
|
136
|
+
const queryObj = query;
|
|
137
|
+
const filteredKeys = Object.keys(queryObj).filter((key) => !func.paramsIgnore.includes(key)).sort();
|
|
137
138
|
const len = filteredKeys.length;
|
|
138
139
|
for (let i = 0; i < len; i++) {
|
|
139
140
|
const key = filteredKeys[i];
|
|
140
|
-
const value =
|
|
141
|
+
const value = queryObj[key];
|
|
141
142
|
let safeValue;
|
|
142
143
|
if (typeof value === "object" && value !== null) {
|
|
143
144
|
safeValue = stableSerialize(value);
|
|
@@ -234,7 +235,10 @@ var FlowList = (function (exports) {
|
|
|
234
235
|
const stringifyId = String(getObjectDeepValue(col, changingKey));
|
|
235
236
|
const index = fieldArrayMap.get(stringifyId);
|
|
236
237
|
if (index !== void 0) {
|
|
237
|
-
|
|
238
|
+
const existingItem = fieldArray[index];
|
|
239
|
+
if (isKeyMap(existingItem)) {
|
|
240
|
+
Object.assign(existingItem, col);
|
|
241
|
+
}
|
|
238
242
|
}
|
|
239
243
|
}
|
|
240
244
|
} else if (isKeyMap(value)) {
|
|
@@ -245,7 +249,10 @@ var FlowList = (function (exports) {
|
|
|
245
249
|
if (!isKeyMap(col)) continue;
|
|
246
250
|
const index = fieldArrayMap.get(uniqueId);
|
|
247
251
|
if (index !== void 0) {
|
|
248
|
-
|
|
252
|
+
const existingItem = fieldArray[index];
|
|
253
|
+
if (isKeyMap(existingItem)) {
|
|
254
|
+
Object.assign(existingItem, col);
|
|
255
|
+
}
|
|
249
256
|
}
|
|
250
257
|
}
|
|
251
258
|
}
|
|
@@ -270,8 +277,25 @@ var FlowList = (function (exports) {
|
|
|
270
277
|
const valueObj = value;
|
|
271
278
|
if (isArray(value)) {
|
|
272
279
|
const currentArr = isArray(resultField) ? resultField : [];
|
|
273
|
-
|
|
274
|
-
|
|
280
|
+
if (insertBefore) {
|
|
281
|
+
if (value.length === 0) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if (currentArr.length === 0) {
|
|
285
|
+
field.result = value;
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
field.result = value.concat(currentArr);
|
|
289
|
+
} else {
|
|
290
|
+
if (value.length === 0) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
if (currentArr.length === 0) {
|
|
294
|
+
field.result = value;
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
field.result = currentArr.concat(value);
|
|
298
|
+
}
|
|
275
299
|
return;
|
|
276
300
|
}
|
|
277
301
|
let target = resultField;
|
|
@@ -499,8 +523,9 @@ var FlowList = (function (exports) {
|
|
|
499
523
|
}) => new Promise((resolve, reject) => {
|
|
500
524
|
const fieldName = generateFieldName({ func, query });
|
|
501
525
|
const fieldData = getter(fieldName);
|
|
502
|
-
const
|
|
503
|
-
const
|
|
526
|
+
const queryAsParams = query;
|
|
527
|
+
const doRefresh = !!queryAsParams?.__refresh__;
|
|
528
|
+
const needReset = !!queryAsParams?.__reload__;
|
|
504
529
|
if (fieldData && fieldData.loading) return resolve();
|
|
505
530
|
if (fieldData && fieldData.fetched && !doRefresh) return resolve();
|
|
506
531
|
const params = generateRequestParams({
|
|
@@ -577,6 +602,7 @@ var FlowList = (function (exports) {
|
|
|
577
602
|
if (fieldData.extra) {
|
|
578
603
|
params[enum_default.FIELD_DATA.EXTRA_KEY] = fieldData.extra;
|
|
579
604
|
}
|
|
605
|
+
const queryAsParams = query;
|
|
580
606
|
setter({
|
|
581
607
|
key: fieldName,
|
|
582
608
|
type: enum_default.SETTER_TYPE.MERGE,
|
|
@@ -590,7 +616,7 @@ var FlowList = (function (exports) {
|
|
|
590
616
|
fieldName,
|
|
591
617
|
type: func.type,
|
|
592
618
|
page: params.page || 0,
|
|
593
|
-
insertBefore: !!
|
|
619
|
+
insertBefore: !!queryAsParams?.is_up
|
|
594
620
|
}).then(() => {
|
|
595
621
|
callback?.({
|
|
596
622
|
params,
|
|
@@ -630,8 +656,8 @@ var FlowList = (function (exports) {
|
|
|
630
656
|
func,
|
|
631
657
|
query,
|
|
632
658
|
method,
|
|
633
|
-
value,
|
|
634
659
|
id,
|
|
660
|
+
value,
|
|
635
661
|
changeKey
|
|
636
662
|
}) => {
|
|
637
663
|
return new Promise((resolve, reject) => {
|