@flowlist/js-core 4.0.2-beta.0 → 4.0.4-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 -22
- package/dist/index.d.ts +22 -22
- 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,73 @@ 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
|
-
readonly type: FetchType;
|
|
174
174
|
readonly query?: P;
|
|
175
175
|
readonly method: string;
|
|
176
|
-
readonly value: T |
|
|
176
|
+
readonly value: T | T[] | KeyMap | KeyMap[];
|
|
177
177
|
readonly id?: ObjectKey | ObjectKey[];
|
|
178
178
|
readonly changeKey?: string;
|
|
179
179
|
readonly uniqueKey?: string;
|
|
@@ -198,14 +198,14 @@ interface SetErrorType {
|
|
|
198
198
|
readonly fieldName: string;
|
|
199
199
|
readonly error: Error | null;
|
|
200
200
|
}
|
|
201
|
-
interface ApiContract<P
|
|
201
|
+
interface ApiContract<P = RequestParams, R = ResultType> {
|
|
202
202
|
(params: P): Promise<ApiResponse<R>>;
|
|
203
203
|
readonly id: string;
|
|
204
204
|
readonly type: FetchType;
|
|
205
205
|
readonly uniqueKey: string;
|
|
206
206
|
readonly paramsIgnore: string[];
|
|
207
207
|
}
|
|
208
|
-
declare function createApi<P
|
|
208
|
+
declare function createApi<P = RequestParams, R = ResultType>(options: {
|
|
209
209
|
id: string;
|
|
210
210
|
type?: FetchType;
|
|
211
211
|
uniqueKey?: string;
|
|
@@ -213,13 +213,13 @@ declare function createApi<P extends RequestParams, R extends ResultType>(option
|
|
|
213
213
|
fetcher: (params: P) => Promise<ApiResponse<R>>;
|
|
214
214
|
}): ApiContract<P, R>;
|
|
215
215
|
|
|
216
|
-
declare const initState: <P
|
|
217
|
-
declare const initData: <P
|
|
216
|
+
declare const initState: <P = RequestParams, R = ResultType>({ getter, setter, func, query, opts }: InitStateType<P, R>) => Promise<void>;
|
|
217
|
+
declare const initData: <P = RequestParams, R = ResultType>({ getter, setter, func, query, callback }: InitDataType<P, R>) => Promise<void>;
|
|
218
218
|
/**
|
|
219
219
|
* 加载更多数据
|
|
220
220
|
*/
|
|
221
|
-
declare const loadMore: <P
|
|
222
|
-
declare const updateState: <P
|
|
221
|
+
declare const loadMore: <P = RequestParams, R = ResultType>({ getter, setter, query, func, errorRetry, callback }: LoadMoreType<P, R>) => Promise<void>;
|
|
222
|
+
declare const updateState: <P = RequestParams, R = ResultType, T = KeyMap>({ getter, setter, func, query, method, id, value, changeKey }: UpdateStateType<P, R, T>) => Promise<unknown>;
|
|
223
223
|
|
|
224
224
|
declare const isArray: (data: unknown) => data is unknown[];
|
|
225
225
|
/**
|
|
@@ -248,7 +248,7 @@ declare const isKeyMapArray: (value: unknown) => value is KeyMap[];
|
|
|
248
248
|
declare const isObjectKeyArray: (value: unknown) => value is ObjectKey[];
|
|
249
249
|
declare const isObjectResult: (data: unknown) => data is Record<string, unknown>;
|
|
250
250
|
declare const generateDefaultField: (opts?: Partial<DefaultField>) => DefaultField;
|
|
251
|
-
declare const generateFieldName: <P
|
|
251
|
+
declare const generateFieldName: <P = RequestParams, R = ResultType>({ func, query }: {
|
|
252
252
|
func: ApiContract<P, R>;
|
|
253
253
|
query?: P;
|
|
254
254
|
}) => 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,73 @@ 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
|
-
readonly type: FetchType;
|
|
174
174
|
readonly query?: P;
|
|
175
175
|
readonly method: string;
|
|
176
|
-
readonly value: T |
|
|
176
|
+
readonly value: T | T[] | KeyMap | KeyMap[];
|
|
177
177
|
readonly id?: ObjectKey | ObjectKey[];
|
|
178
178
|
readonly changeKey?: string;
|
|
179
179
|
readonly uniqueKey?: string;
|
|
@@ -198,14 +198,14 @@ interface SetErrorType {
|
|
|
198
198
|
readonly fieldName: string;
|
|
199
199
|
readonly error: Error | null;
|
|
200
200
|
}
|
|
201
|
-
interface ApiContract<P
|
|
201
|
+
interface ApiContract<P = RequestParams, R = ResultType> {
|
|
202
202
|
(params: P): Promise<ApiResponse<R>>;
|
|
203
203
|
readonly id: string;
|
|
204
204
|
readonly type: FetchType;
|
|
205
205
|
readonly uniqueKey: string;
|
|
206
206
|
readonly paramsIgnore: string[];
|
|
207
207
|
}
|
|
208
|
-
declare function createApi<P
|
|
208
|
+
declare function createApi<P = RequestParams, R = ResultType>(options: {
|
|
209
209
|
id: string;
|
|
210
210
|
type?: FetchType;
|
|
211
211
|
uniqueKey?: string;
|
|
@@ -213,13 +213,13 @@ declare function createApi<P extends RequestParams, R extends ResultType>(option
|
|
|
213
213
|
fetcher: (params: P) => Promise<ApiResponse<R>>;
|
|
214
214
|
}): ApiContract<P, R>;
|
|
215
215
|
|
|
216
|
-
declare const initState: <P
|
|
217
|
-
declare const initData: <P
|
|
216
|
+
declare const initState: <P = RequestParams, R = ResultType>({ getter, setter, func, query, opts }: InitStateType<P, R>) => Promise<void>;
|
|
217
|
+
declare const initData: <P = RequestParams, R = ResultType>({ getter, setter, func, query, callback }: InitDataType<P, R>) => Promise<void>;
|
|
218
218
|
/**
|
|
219
219
|
* 加载更多数据
|
|
220
220
|
*/
|
|
221
|
-
declare const loadMore: <P
|
|
222
|
-
declare const updateState: <P
|
|
221
|
+
declare const loadMore: <P = RequestParams, R = ResultType>({ getter, setter, query, func, errorRetry, callback }: LoadMoreType<P, R>) => Promise<void>;
|
|
222
|
+
declare const updateState: <P = RequestParams, R = ResultType, T = KeyMap>({ getter, setter, func, query, method, id, value, changeKey }: UpdateStateType<P, R, T>) => Promise<unknown>;
|
|
223
223
|
|
|
224
224
|
declare const isArray: (data: unknown) => data is unknown[];
|
|
225
225
|
/**
|
|
@@ -248,7 +248,7 @@ declare const isKeyMapArray: (value: unknown) => value is KeyMap[];
|
|
|
248
248
|
declare const isObjectKeyArray: (value: unknown) => value is ObjectKey[];
|
|
249
249
|
declare const isObjectResult: (data: unknown) => data is Record<string, unknown>;
|
|
250
250
|
declare const generateDefaultField: (opts?: Partial<DefaultField>) => DefaultField;
|
|
251
|
-
declare const generateFieldName: <P
|
|
251
|
+
declare const generateFieldName: <P = RequestParams, R = ResultType>({ func, query }: {
|
|
252
252
|
func: ApiContract<P, R>;
|
|
253
253
|
query?: P;
|
|
254
254
|
}) => 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) => {
|