@flowlist/js-core 3.0.9 → 3.0.11
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 +221 -38
- package/dist/index.d.mts +130 -133
- package/dist/index.d.ts +130 -133
- package/dist/index.global.js +152 -94
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +152 -94
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +152 -94
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -58,6 +58,41 @@ var enum_default = {
|
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
// src/utils.ts
|
|
61
|
+
var isArray = (data) => Array.isArray(data);
|
|
62
|
+
var stableSerialize = (value) => {
|
|
63
|
+
if (value === null || typeof value !== "object") {
|
|
64
|
+
return String(value);
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
if (Array.isArray(value)) {
|
|
68
|
+
return JSON.stringify(value);
|
|
69
|
+
}
|
|
70
|
+
const keys = Object.keys(value).sort();
|
|
71
|
+
const obj = {};
|
|
72
|
+
const len = keys.length;
|
|
73
|
+
for (let i = 0; i < len; i++) {
|
|
74
|
+
const k = keys[i];
|
|
75
|
+
obj[k] = value[k];
|
|
76
|
+
}
|
|
77
|
+
return JSON.stringify(obj);
|
|
78
|
+
} catch {
|
|
79
|
+
return "[Circular Object/Value]";
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
var extractUniqueKey = (item, uniqueKey) => {
|
|
83
|
+
if (typeof item !== "object" || item === null) return void 0;
|
|
84
|
+
const val = item[uniqueKey];
|
|
85
|
+
if (typeof val === "string" || typeof val === "number") {
|
|
86
|
+
return val;
|
|
87
|
+
}
|
|
88
|
+
if (uniqueKey.includes(".")) {
|
|
89
|
+
const deepVal = getObjectDeepValue(item, uniqueKey);
|
|
90
|
+
if (typeof deepVal === "string" || typeof deepVal === "number") {
|
|
91
|
+
return deepVal;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return void 0;
|
|
95
|
+
};
|
|
61
96
|
var isObjectResult = (data) => {
|
|
62
97
|
if (typeof data !== "object" || data === null) {
|
|
63
98
|
return false;
|
|
@@ -65,17 +100,15 @@ var isObjectResult = (data) => {
|
|
|
65
100
|
return !Object.prototype.hasOwnProperty.call(data, "result");
|
|
66
101
|
};
|
|
67
102
|
var generateDefaultField = (opts = {}) => ({
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
total: 0
|
|
78
|
-
},
|
|
103
|
+
result: [],
|
|
104
|
+
noMore: false,
|
|
105
|
+
nothing: false,
|
|
106
|
+
loading: false,
|
|
107
|
+
error: null,
|
|
108
|
+
extra: null,
|
|
109
|
+
fetched: false,
|
|
110
|
+
page: 0,
|
|
111
|
+
total: 0,
|
|
79
112
|
...opts
|
|
80
113
|
});
|
|
81
114
|
var generateFieldName = ({
|
|
@@ -83,38 +116,40 @@ var generateFieldName = ({
|
|
|
83
116
|
type,
|
|
84
117
|
query = {}
|
|
85
118
|
}) => {
|
|
86
|
-
const funcName = typeof func === "string" ? func : `api-${Math.random().toString(36).substring(2)}`;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
"__reload__"
|
|
97
|
-
].includes(key)
|
|
98
|
-
);
|
|
99
|
-
filteredKeys.sort().forEach((key) => {
|
|
119
|
+
const funcName = typeof func === "string" ? func : (typeof func === "function" ? func.name : void 0) || `api-${Math.random().toString(36).substring(2, 8)}`;
|
|
120
|
+
let result = `${funcName}-${type || "auto"}`;
|
|
121
|
+
const filteredKeys = Object.keys(query).filter((key) => {
|
|
122
|
+
const value = query[key];
|
|
123
|
+
return value !== void 0 && typeof value !== "function" && key !== "page" && key !== "is_up" && key !== "since_id" && key !== "seen_ids" && key !== "__refresh__" && key !== "__reload__";
|
|
124
|
+
});
|
|
125
|
+
filteredKeys.sort();
|
|
126
|
+
const len = filteredKeys.length;
|
|
127
|
+
for (let i = 0; i < len; i++) {
|
|
128
|
+
const key = filteredKeys[i];
|
|
100
129
|
const value = query[key];
|
|
101
|
-
|
|
130
|
+
let safeValue;
|
|
131
|
+
if (typeof value === "object" && value !== null) {
|
|
132
|
+
safeValue = stableSerialize(value);
|
|
133
|
+
} else {
|
|
134
|
+
safeValue = String(value);
|
|
135
|
+
}
|
|
102
136
|
const encoded = encodeURIComponent(safeValue);
|
|
103
137
|
result += `-${key}-${encoded}`;
|
|
104
|
-
}
|
|
138
|
+
}
|
|
105
139
|
return result;
|
|
106
140
|
};
|
|
107
|
-
var getObjectDeepValue = (field, keys
|
|
141
|
+
var getObjectDeepValue = (field, keys) => {
|
|
108
142
|
if (!keys || Array.isArray(keys) && keys.length === 0) {
|
|
109
143
|
return field;
|
|
110
144
|
}
|
|
111
145
|
const keysArr = Array.isArray(keys) ? keys : keys.split(".");
|
|
112
146
|
let result = field;
|
|
113
|
-
|
|
147
|
+
const len = keysArr.length;
|
|
148
|
+
for (let i = 0; i < len; i++) {
|
|
114
149
|
if (result == null || typeof result !== "object") {
|
|
115
150
|
return void 0;
|
|
116
151
|
}
|
|
117
|
-
result = result[
|
|
152
|
+
result = result[keysArr[i]];
|
|
118
153
|
}
|
|
119
154
|
return result;
|
|
120
155
|
};
|
|
@@ -123,8 +158,10 @@ var updateObjectDeepValue = (field, changeKey, value) => {
|
|
|
123
158
|
const keys = changeKey.split(".");
|
|
124
159
|
const lastKey = keys.pop();
|
|
125
160
|
let current = field;
|
|
126
|
-
|
|
127
|
-
|
|
161
|
+
const len = keys.length;
|
|
162
|
+
for (let i = 0; i < len; i++) {
|
|
163
|
+
const key = keys[i];
|
|
164
|
+
if (current[key] == null || typeof current[key] !== "object") {
|
|
128
165
|
current[key] = {};
|
|
129
166
|
}
|
|
130
167
|
current = current[key];
|
|
@@ -137,14 +174,12 @@ var searchValueByKey = (result, id, key) => {
|
|
|
137
174
|
if (isArray(result)) {
|
|
138
175
|
const index = computeMatchedItemIndex(id, result, key);
|
|
139
176
|
return index >= 0 ? result[index] : void 0;
|
|
140
|
-
} else {
|
|
141
|
-
return result[id];
|
|
142
177
|
}
|
|
178
|
+
return result[String(id)];
|
|
143
179
|
};
|
|
144
180
|
var computeMatchedItemIndex = (itemId, fieldArr, changingKey) => {
|
|
145
181
|
const stringifiedItemId = String(itemId);
|
|
146
|
-
const len = fieldArr
|
|
147
|
-
if (typeof len !== "number" || len <= 0) return -1;
|
|
182
|
+
const len = fieldArr.length;
|
|
148
183
|
for (let i = 0; i < len; i++) {
|
|
149
184
|
const item = fieldArr[i];
|
|
150
185
|
if (typeof item !== "object" || item === null) continue;
|
|
@@ -156,104 +191,133 @@ var computeMatchedItemIndex = (itemId, fieldArr, changingKey) => {
|
|
|
156
191
|
return -1;
|
|
157
192
|
};
|
|
158
193
|
var combineArrayData = (fieldArray, value, changingKey) => {
|
|
194
|
+
const fieldArrayMap = /* @__PURE__ */ new Map();
|
|
195
|
+
const arrLen = fieldArray.length;
|
|
196
|
+
for (let i = 0; i < arrLen; i++) {
|
|
197
|
+
const item = fieldArray[i];
|
|
198
|
+
if (typeof item !== "object" || item === null) continue;
|
|
199
|
+
const id = getObjectDeepValue(item, changingKey);
|
|
200
|
+
if (id !== void 0) {
|
|
201
|
+
fieldArrayMap.set(String(id), i);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
159
204
|
if (isArray(value)) {
|
|
160
|
-
|
|
205
|
+
const valLen = value.length;
|
|
206
|
+
for (let i = 0; i < valLen; i++) {
|
|
207
|
+
const col = value[i];
|
|
161
208
|
if (typeof col !== "object" || col === null) continue;
|
|
162
209
|
const stringifyId = String(getObjectDeepValue(col, changingKey));
|
|
163
|
-
const index =
|
|
164
|
-
|
|
165
|
-
);
|
|
166
|
-
if (index !== -1) {
|
|
210
|
+
const index = fieldArrayMap.get(stringifyId);
|
|
211
|
+
if (index !== void 0) {
|
|
167
212
|
fieldArray[index] = { ...fieldArray[index], ...col };
|
|
168
213
|
}
|
|
169
214
|
}
|
|
170
215
|
} else {
|
|
171
|
-
|
|
216
|
+
const entries = Object.entries(value);
|
|
217
|
+
const entLen = entries.length;
|
|
218
|
+
for (let i = 0; i < entLen; i++) {
|
|
219
|
+
const [uniqueId, col] = entries[i];
|
|
172
220
|
if (typeof col !== "object" || col === null) continue;
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
(item) => typeof item === "object" && item !== null && String(getObjectDeepValue(item, changingKey)) === stringifyId
|
|
176
|
-
);
|
|
177
|
-
if (index !== -1) {
|
|
221
|
+
const index = fieldArrayMap.get(uniqueId);
|
|
222
|
+
if (index !== void 0) {
|
|
178
223
|
fieldArray[index] = { ...fieldArray[index], ...col };
|
|
179
224
|
}
|
|
180
225
|
}
|
|
181
226
|
}
|
|
182
227
|
};
|
|
183
|
-
var isArray = (data) => {
|
|
184
|
-
return Array.isArray(data);
|
|
185
|
-
};
|
|
186
228
|
var setReactivityField = (field, key, value, type, insertBefore) => {
|
|
187
229
|
if (type === enum_default.FETCH_TYPE.PAGINATION) {
|
|
188
230
|
field[key] = value;
|
|
189
231
|
return;
|
|
190
232
|
}
|
|
191
|
-
if (isArray(value)) {
|
|
192
|
-
const current = field[key];
|
|
193
|
-
const currentArr = isArray(current) ? current : [];
|
|
194
|
-
const newValue = insertBefore ? value.concat(currentArr) : currentArr.concat(value);
|
|
195
|
-
field[key] = newValue;
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
233
|
if (key !== enum_default.FIELD_DATA.RESULT_KEY) {
|
|
199
|
-
|
|
234
|
+
if (isArray(value)) {
|
|
235
|
+
const current = field[key];
|
|
236
|
+
const currentArr = isArray(current) ? current : [];
|
|
237
|
+
const newValue = insertBefore ? [...value, ...currentArr] : [...currentArr, ...value];
|
|
238
|
+
field[key] = newValue;
|
|
239
|
+
} else {
|
|
240
|
+
field[key] = value;
|
|
241
|
+
}
|
|
200
242
|
return;
|
|
201
243
|
}
|
|
202
244
|
const resultField = field.result;
|
|
245
|
+
const valueObj = value;
|
|
246
|
+
if (isArray(value)) {
|
|
247
|
+
const currentArr = isArray(resultField) ? resultField : [];
|
|
248
|
+
const newValue = insertBefore ? [...value, ...currentArr] : [...currentArr, ...value];
|
|
249
|
+
field.result = newValue;
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
let target = resultField;
|
|
203
253
|
if (isArray(resultField)) {
|
|
204
|
-
|
|
254
|
+
target = {};
|
|
255
|
+
field.result = target;
|
|
256
|
+
} else if (typeof resultField !== "object" || resultField === null) {
|
|
257
|
+
target = {};
|
|
258
|
+
field.result = target;
|
|
205
259
|
}
|
|
206
|
-
const
|
|
207
|
-
const
|
|
208
|
-
|
|
260
|
+
const keys = Object.keys(valueObj);
|
|
261
|
+
const len = keys.length;
|
|
262
|
+
for (let i = 0; i < len; i++) {
|
|
263
|
+
const subKey = keys[i];
|
|
209
264
|
const existing = target[subKey];
|
|
210
265
|
const incoming = valueObj[subKey];
|
|
211
266
|
if (existing !== void 0) {
|
|
212
267
|
if (insertBefore) {
|
|
213
|
-
target[subKey] = isArray(incoming) && isArray(existing) ? incoming
|
|
268
|
+
target[subKey] = isArray(incoming) && isArray(existing) ? [...incoming, ...existing] : incoming;
|
|
214
269
|
} else {
|
|
215
|
-
target[subKey] = isArray(existing) && isArray(incoming) ? existing
|
|
270
|
+
target[subKey] = isArray(existing) && isArray(incoming) ? [...existing, ...incoming] : incoming;
|
|
216
271
|
}
|
|
217
272
|
} else {
|
|
218
273
|
target[subKey] = incoming;
|
|
219
274
|
}
|
|
220
|
-
}
|
|
275
|
+
}
|
|
221
276
|
};
|
|
222
277
|
var computeResultLength = (data) => {
|
|
223
278
|
if (isArray(data)) {
|
|
224
279
|
return data.length;
|
|
225
280
|
}
|
|
226
281
|
if (data && typeof data === "object") {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
282
|
+
let acc = 0;
|
|
283
|
+
const values = Object.values(data);
|
|
284
|
+
const len = values.length;
|
|
285
|
+
for (let i = 0; i < len; i++) {
|
|
286
|
+
if (isArray(values[i])) {
|
|
287
|
+
acc += values[i].length;
|
|
230
288
|
}
|
|
231
|
-
|
|
232
|
-
|
|
289
|
+
}
|
|
290
|
+
return acc;
|
|
233
291
|
}
|
|
234
292
|
return 0;
|
|
235
293
|
};
|
|
294
|
+
var getSeenIdsString = (arr, uniqueKey) => {
|
|
295
|
+
if (!isArray(arr)) return "";
|
|
296
|
+
const ids = [];
|
|
297
|
+
const len = arr.length;
|
|
298
|
+
for (let i = 0; i < len; i++) {
|
|
299
|
+
const id = extractUniqueKey(arr[i], uniqueKey);
|
|
300
|
+
if (id !== void 0) {
|
|
301
|
+
ids.push(id);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return ids.join(",");
|
|
305
|
+
};
|
|
236
306
|
var generateRequestParams = ({
|
|
237
307
|
field,
|
|
238
|
-
uniqueKey,
|
|
308
|
+
uniqueKey = enum_default.DEFAULT_UNIQUE_KEY_NAME,
|
|
239
309
|
query = {},
|
|
240
310
|
type
|
|
241
311
|
}) => {
|
|
242
|
-
const result = {};
|
|
243
|
-
const changing = uniqueKey || enum_default.DEFAULT_UNIQUE_KEY_NAME;
|
|
312
|
+
const result = { ...query };
|
|
244
313
|
const isFetched = field.fetched;
|
|
245
314
|
const getSafeObjectKey = (item) => {
|
|
246
|
-
|
|
247
|
-
const val = getObjectDeepValue(item, changing);
|
|
248
|
-
if (typeof val === "string" || typeof val === "number") {
|
|
249
|
-
return val;
|
|
250
|
-
}
|
|
251
|
-
return void 0;
|
|
315
|
+
return extractUniqueKey(item, uniqueKey);
|
|
252
316
|
};
|
|
253
317
|
if (isFetched) {
|
|
254
318
|
if (type === enum_default.FETCH_TYPE.AUTO) {
|
|
255
319
|
if (isArray(field.result)) {
|
|
256
|
-
result.seen_ids = field.result
|
|
320
|
+
result.seen_ids = getSeenIdsString(field.result, uniqueKey);
|
|
257
321
|
const targetIndex = query.is_up ? 0 : field.result.length - 1;
|
|
258
322
|
const targetItem = field.result[targetIndex];
|
|
259
323
|
result.since_id = getSafeObjectKey(targetItem);
|
|
@@ -262,7 +326,7 @@ var generateRequestParams = ({
|
|
|
262
326
|
result.page = typeof query.page === "number" ? query.page : field.page + 1;
|
|
263
327
|
} else if (type === enum_default.FETCH_TYPE.HAS_LOADED_IDS) {
|
|
264
328
|
if (isArray(field.result)) {
|
|
265
|
-
result.seen_ids = field.result
|
|
329
|
+
result.seen_ids = getSeenIdsString(field.result, uniqueKey);
|
|
266
330
|
}
|
|
267
331
|
} else if (type === enum_default.FETCH_TYPE.SINCE_FIRST_OR_END_ID) {
|
|
268
332
|
if (isArray(field.result)) {
|
|
@@ -293,10 +357,7 @@ var generateRequestParams = ({
|
|
|
293
357
|
result.page = 1;
|
|
294
358
|
}
|
|
295
359
|
}
|
|
296
|
-
return
|
|
297
|
-
...query,
|
|
298
|
-
...result
|
|
299
|
-
};
|
|
360
|
+
return result;
|
|
300
361
|
};
|
|
301
362
|
|
|
302
363
|
// src/setters.ts
|
|
@@ -360,9 +421,7 @@ var SET_DATA = ({
|
|
|
360
421
|
setter({
|
|
361
422
|
key: fieldName,
|
|
362
423
|
type: enum_default.SETTER_TYPE.RESET,
|
|
363
|
-
// or MUTATE if you have such type
|
|
364
424
|
value: field,
|
|
365
|
-
// same reference
|
|
366
425
|
callback: () => {
|
|
367
426
|
resolve();
|
|
368
427
|
}
|
|
@@ -510,7 +569,6 @@ var loadMore = ({
|
|
|
510
569
|
query,
|
|
511
570
|
type,
|
|
512
571
|
func,
|
|
513
|
-
// string | function
|
|
514
572
|
api,
|
|
515
573
|
uniqueKey,
|
|
516
574
|
errorRetry,
|
|
@@ -600,7 +658,6 @@ var updateState = ({
|
|
|
600
658
|
getter,
|
|
601
659
|
setter,
|
|
602
660
|
func,
|
|
603
|
-
// string only
|
|
604
661
|
type,
|
|
605
662
|
query,
|
|
606
663
|
method,
|
|
@@ -713,10 +770,7 @@ var updateState = ({
|
|
|
713
770
|
const idSet = new Set(_id);
|
|
714
771
|
modifyValue = modifyValue.filter(
|
|
715
772
|
(item) => !idSet.has(
|
|
716
|
-
getObjectDeepValue(
|
|
717
|
-
item,
|
|
718
|
-
_uniqueKey
|
|
719
|
-
)
|
|
773
|
+
getObjectDeepValue(item, _uniqueKey)
|
|
720
774
|
)
|
|
721
775
|
);
|
|
722
776
|
}
|
|
@@ -734,7 +788,11 @@ var updateState = ({
|
|
|
734
788
|
break;
|
|
735
789
|
case enum_default.CHANGE_TYPE.RESULT_LIST_MERGE:
|
|
736
790
|
if (isArray(modifyValue)) {
|
|
737
|
-
combineArrayData(
|
|
791
|
+
combineArrayData(
|
|
792
|
+
modifyValue,
|
|
793
|
+
value,
|
|
794
|
+
_uniqueKey
|
|
795
|
+
);
|
|
738
796
|
}
|
|
739
797
|
break;
|
|
740
798
|
default:
|
package/dist/index.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.js","sourcesContent":["// utils.ts\nimport ENUM from './enum'\nimport type {\n ObjectKey,\n KeyMap,\n DefaultField,\n FetchType,\n FieldKeys,\n InitDataParams,\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 = (\n opts: Partial<DefaultField> = {}\n): DefaultField => ({\n ...{\n result: [],\n noMore: false,\n nothing: false,\n loading: false,\n error: null,\n extra: null,\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}: InitDataParams): 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', '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 const value = query[key]\n const safeValue =\n typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)\n\n const encoded = encodeURIComponent(safeValue)\n\n result += `-${key}-${encoded}`\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 = (\n field: DefaultField,\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 = {} // 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 ResultType\n} from './types'\n\nexport const SET_DATA = ({\n getter,\n setter,\n data,\n fieldName,\n type,\n page,\n insertBefore\n}: SetDataType): 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\n\n let result: ResultType\n let extra: unknown\n\n if (isObjectResult(data)) {\n // data is T (object result mode)\n result = data\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\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 ApiResponse\n} from './types'\n\nexport const initState = ({\n getter,\n setter,\n func,\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,\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 apiCaller = () =>\n new Promise<ApiResponse>((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 apiCaller()\n .then((data) => {\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,\n refresh: doRefresh\n })\n }\n resolve()\n })\n }\n\n if (doRefresh && !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 (doRefresh && !needReset) {\n getData()\n } else {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: {\n ...generateDefaultField(),\n loading: true,\n error: null,\n extra: null\n },\n callback: getData\n })\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: ApiResponse) => {\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/enum.ts","../src/setters.ts","../src/actions.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// utils.ts\nimport ENUM from './enum'\nimport type {\n ObjectKey,\n KeyMap,\n DefaultField,\n FetchType,\n FieldKeys,\n InitDataParams,\n GenerateParamsType,\n GenerateParamsResp,\n ResultArrayType,\n ResultObjectType\n} from './types'\n\nexport const isArray = (data: unknown): data is unknown[] => Array.isArray(data)\n\nconst stableSerialize = (value: unknown): string => {\n if (value === null || typeof value !== 'object') {\n return String(value)\n }\n try {\n if (Array.isArray(value)) {\n return JSON.stringify(value)\n }\n const keys = Object.keys(value as Record<string, unknown>).sort()\n const obj: Record<string, unknown> = {}\n const len = keys.length\n for (let i = 0; i < len; i++) {\n const k = keys[i]\n obj[k] = (value as Record<string, unknown>)[k]\n }\n return JSON.stringify(obj)\n } catch {\n return '[Circular Object/Value]'\n }\n}\n\nconst extractUniqueKey = (\n item: unknown,\n uniqueKey: string\n): ObjectKey | undefined => {\n if (typeof item !== 'object' || item === null) return undefined\n\n const val = (item as KeyMap)[uniqueKey]\n if (typeof val === 'string' || typeof val === 'number') {\n return val\n }\n\n if (uniqueKey.includes('.')) {\n const deepVal = getObjectDeepValue(item, uniqueKey)\n if (typeof deepVal === 'string' || typeof deepVal === 'number') {\n return deepVal\n }\n }\n return undefined\n}\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\nexport const generateDefaultField = (\n opts: Partial<DefaultField> = {}\n): DefaultField => ({\n result: [],\n noMore: false,\n nothing: false,\n loading: false,\n error: null,\n extra: null,\n fetched: false,\n page: 0,\n total: 0,\n ...opts\n})\n\nexport const generateFieldName = ({\n func,\n type,\n query = {}\n}: InitDataParams): string => {\n const funcName =\n typeof func === 'string'\n ? func\n : (typeof func === 'function' ? func.name : undefined) ||\n `api-${Math.random().toString(36).substring(2, 8)}`\n let result = `${funcName}-${type || 'auto'}`\n\n const filteredKeys = Object.keys(query).filter((key) => {\n const value = query[key]\n return (\n value !== undefined &&\n typeof value !== 'function' &&\n key !== 'page' &&\n key !== 'is_up' &&\n key !== 'since_id' &&\n key !== 'seen_ids' &&\n key !== '__refresh__' &&\n key !== '__reload__'\n )\n })\n\n filteredKeys.sort()\n\n const len = filteredKeys.length\n for (let i = 0; i < len; i++) {\n const key = filteredKeys[i]\n const value = query[key]\n let safeValue: string\n\n if (typeof value === 'object' && value !== null) {\n safeValue = stableSerialize(value)\n } else {\n safeValue = String(value)\n }\n\n const encoded = encodeURIComponent(safeValue)\n result += `-${key}-${encoded}`\n }\n\n return result\n}\n\nexport const getObjectDeepValue = (\n field: unknown,\n keys: string | string[]\n): unknown => {\n if (!keys || (Array.isArray(keys) && keys.length === 0)) {\n return field\n }\n\n const keysArr = Array.isArray(keys) ? keys : keys.split('.')\n let result: unknown = field\n const len = keysArr.length\n\n for (let i = 0; i < len; i++) {\n if (result == null || typeof result !== 'object') {\n return undefined\n }\n result = (result as KeyMap)[keysArr[i]]\n }\n\n return result\n}\n\nexport const updateObjectDeepValue = (\n field: KeyMap,\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: KeyMap = field\n const len = keys.length\n\n for (let i = 0; i < len; i++) {\n const key = keys[i]\n if (current[key] == null || typeof current[key] !== 'object') {\n current[key] = {}\n }\n current = current[key] as KeyMap\n }\n\n if (current != null && typeof current === 'object') {\n current[lastKey] = value\n }\n}\n\nexport const searchValueByKey = (\n result: ResultArrayType | ResultObjectType,\n id: ObjectKey,\n key: string\n): unknown => {\n if (isArray(result)) {\n const index = computeMatchedItemIndex(id, result, key)\n return index >= 0 ? result[index] : undefined\n }\n return (result as ResultObjectType)[String(id)]\n}\n\nexport const computeMatchedItemIndex = (\n itemId: ObjectKey,\n fieldArr: ResultArrayType,\n changingKey: string\n): number => {\n const stringifiedItemId = String(itemId)\n const len = fieldArr.length\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 const fieldArrayMap = new Map<string, number>()\n const arrLen = fieldArray.length\n\n for (let i = 0; i < arrLen; i++) {\n const item = fieldArray[i]\n if (typeof item !== 'object' || item === null) continue\n const id = getObjectDeepValue(item, changingKey)\n if (id !== undefined) {\n fieldArrayMap.set(String(id), i)\n }\n }\n\n if (isArray(value)) {\n const valLen = value.length\n for (let i = 0; i < valLen; i++) {\n const col = value[i]\n if (typeof col !== 'object' || col === null) continue\n const stringifyId = String(getObjectDeepValue(col, changingKey))\n\n const index = fieldArrayMap.get(stringifyId)\n\n if (index !== undefined) {\n fieldArray[index] = { ...fieldArray[index], ...col }\n }\n }\n } else {\n const entries = Object.entries(value)\n const entLen = entries.length\n for (let i = 0; i < entLen; i++) {\n const [uniqueId, col] = entries[i]\n if (typeof col !== 'object' || col === null) continue\n\n const index = fieldArrayMap.get(uniqueId)\n\n if (index !== undefined) {\n fieldArray[index] = { ...fieldArray[index], ...col }\n }\n }\n }\n}\n\nexport const setReactivityField = (\n field: DefaultField,\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 (key !== ENUM.FIELD_DATA.RESULT_KEY) {\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, ...currentArr]\n : [...currentArr, ...value]\n ;(field as Record<FieldKeys, unknown>)[key] = newValue\n } else {\n ;(field as Record<FieldKeys, unknown>)[key] = value\n }\n return\n }\n\n const resultField = field.result\n const valueObj = value as KeyMap\n\n if (isArray(value)) {\n const currentArr = isArray(resultField) ? resultField : []\n const newValue = insertBefore\n ? [...value, ...currentArr]\n : [...currentArr, ...value]\n field.result = newValue as ResultArrayType\n return\n }\n\n let target = resultField as KeyMap\n if (isArray(resultField)) {\n target = {}\n field.result = target as ResultObjectType\n } else if (typeof resultField !== 'object' || resultField === null) {\n target = {}\n field.result = target as ResultObjectType\n }\n\n const keys = Object.keys(valueObj)\n const len = keys.length\n for (let i = 0; i < len; i++) {\n const subKey = keys[i]\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, ...existing]\n : incoming\n } else {\n target[subKey] =\n isArray(existing) && isArray(incoming)\n ? [...existing, ...incoming]\n : incoming\n }\n } else {\n target[subKey] = incoming\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 let acc = 0\n const values = Object.values(data)\n const len = values.length\n for (let i = 0; i < len; i++) {\n if (isArray(values[i])) {\n acc += (values[i] as unknown[]).length\n }\n }\n return acc\n }\n return 0\n}\n\nconst getSeenIdsString = (arr: unknown[], uniqueKey: string): string => {\n if (!isArray(arr)) return ''\n const ids: ObjectKey[] = []\n const len = arr.length\n\n for (let i = 0; i < len; i++) {\n const id = extractUniqueKey(arr[i], uniqueKey)\n if (id !== undefined) {\n ids.push(id)\n }\n }\n return ids.join(',')\n}\n\nexport const generateRequestParams = ({\n field,\n uniqueKey = ENUM.DEFAULT_UNIQUE_KEY_NAME,\n query = {},\n type\n}: GenerateParamsType): GenerateParamsResp => {\n const result: GenerateParamsResp = { ...query }\n const isFetched = field.fetched\n\n const getSafeObjectKey = (item: unknown): ObjectKey | undefined => {\n return extractUniqueKey(item, uniqueKey)\n }\n\n if (isFetched) {\n if (type === ENUM.FETCH_TYPE.AUTO) {\n if (isArray(field.result)) {\n result.seen_ids = getSeenIdsString(field.result, uniqueKey)\n\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 = getSeenIdsString(field.result, uniqueKey)\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 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 result\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 ResultType\n} from './types'\n\nexport const SET_DATA = ({\n getter,\n setter,\n data,\n fieldName,\n type,\n page,\n insertBefore\n}: SetDataType): 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 const field = fieldData as DefaultField\n\n let result: ResultType\n let extra: unknown\n\n if (isObjectResult(data)) {\n result = data as ResultType\n field.nothing = false\n field.fetched = true\n field.noMore = true\n field.page = -1\n } else {\n const apiResponse = data as ApiResponse\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 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 setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: field,\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 ApiResponse\n} from './types'\n\nexport const initState = ({\n getter,\n setter,\n func,\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,\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 apiCaller = () =>\n new Promise<ApiResponse>((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 apiCaller()\n .then((data) => {\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,\n refresh: doRefresh\n })\n }\n resolve()\n })\n }\n\n if (doRefresh && !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 (doRefresh && !needReset) {\n getData()\n } else {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: {\n ...generateDefaultField(),\n loading: true,\n error: null,\n extra: null\n },\n callback: getData\n })\n }\n })\n\nexport const loadMore = ({\n getter,\n setter,\n query,\n type,\n func,\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: ApiResponse) => {\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\nexport const updateState = <T = KeyMap>({\n getter,\n setter,\n func,\n type,\n query,\n method,\n value,\n id,\n uniqueKey,\n changeKey\n}: UpdateStateType<T>): 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 const result = searchValueByKey(\n newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as\n | ResultArrayType\n | Record<string, KeyMap[]>,\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 (newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as KeyMap[])[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 KeyMap[]\n )[matchedIndex]\n ;(newFieldData[ENUM.FIELD_DATA.RESULT_KEY] as KeyMap[])[matchedIndex] =\n {\n ...currentItem,\n ...(value as KeyMap)\n }\n }\n resolve(null)\n } else if (method === ENUM.CHANGE_TYPE.RESET_FIELD) {\n updateObjectDeepValue(\n newFieldData as unknown as KeyMap,\n _changeKey,\n value\n )\n resolve(null)\n } else {\n let modifyValue = getObjectDeepValue(\n newFieldData as unknown as KeyMap,\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 KeyMap[]).filter(\n (item) =>\n !idSet.has(\n getObjectDeepValue(item as KeyMap, _uniqueKey) 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(\n modifyValue as ResultArrayType,\n value as ResultArrayType | Record<ObjectKey, KeyMap>,\n _uniqueKey\n )\n }\n break\n default:\n resolve(null)\n return\n }\n ;(newFieldData as unknown as KeyMap)[_changeKey] = 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"]}
|