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