@flowlist/js-core 4.0.7-beta.0 → 4.0.9-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/chunk-6WOZNOYJ.mjs +79 -0
  2. package/dist/chunk-6WOZNOYJ.mjs.map +1 -0
  3. package/dist/chunk-BTOUHSDU.mjs +91 -0
  4. package/dist/chunk-BTOUHSDU.mjs.map +1 -0
  5. package/dist/chunk-C4BWSFWU.mjs +74 -0
  6. package/dist/chunk-C4BWSFWU.mjs.map +1 -0
  7. package/dist/chunk-KIQOUUEZ.mjs +3 -0
  8. package/dist/chunk-KIQOUUEZ.mjs.map +1 -0
  9. package/dist/chunk-LF6DOBID.mjs +248 -0
  10. package/dist/chunk-LF6DOBID.mjs.map +1 -0
  11. package/dist/chunk-OKKMFSGF.mjs +253 -0
  12. package/dist/chunk-OKKMFSGF.mjs.map +1 -0
  13. package/dist/chunk-PP7QTJDR.mjs +37 -0
  14. package/dist/chunk-PP7QTJDR.mjs.map +1 -0
  15. package/dist/constants.d.mts +33 -0
  16. package/dist/constants.d.ts +33 -0
  17. package/dist/constants.js +39 -0
  18. package/dist/constants.js.map +1 -0
  19. package/dist/constants.mjs +3 -0
  20. package/dist/constants.mjs.map +1 -0
  21. package/dist/core.d.mts +19 -0
  22. package/dist/core.d.ts +19 -0
  23. package/dist/core.js +446 -0
  24. package/dist/core.js.map +1 -0
  25. package/dist/core.mjs +5 -0
  26. package/dist/core.mjs.map +1 -0
  27. package/dist/index.d.mts +6 -291
  28. package/dist/index.d.ts +6 -291
  29. package/dist/index.global.js +386 -478
  30. package/dist/index.global.js.map +1 -1
  31. package/dist/index.js +386 -478
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.mjs +7 -842
  34. package/dist/index.mjs.map +1 -1
  35. package/dist/mutations/core.d.mts +10 -0
  36. package/dist/mutations/core.d.ts +10 -0
  37. package/dist/mutations/core.js +130 -0
  38. package/dist/mutations/core.js.map +1 -0
  39. package/dist/mutations/core.mjs +5 -0
  40. package/dist/mutations/core.mjs.map +1 -0
  41. package/dist/mutations/extended.d.mts +10 -0
  42. package/dist/mutations/extended.d.ts +10 -0
  43. package/dist/mutations/extended.js +172 -0
  44. package/dist/mutations/extended.js.map +1 -0
  45. package/dist/mutations/extended.mjs +5 -0
  46. package/dist/mutations/extended.mjs.map +1 -0
  47. package/dist/mutations/index.d.mts +14 -0
  48. package/dist/mutations/index.d.ts +14 -0
  49. package/dist/mutations/index.js +379 -0
  50. package/dist/mutations/index.js.map +1 -0
  51. package/dist/mutations/index.mjs +8 -0
  52. package/dist/mutations/index.mjs.map +1 -0
  53. package/dist/types.d.mts +140 -0
  54. package/dist/types.d.ts +140 -0
  55. package/dist/types.js +4 -0
  56. package/dist/types.js.map +1 -0
  57. package/dist/types.mjs +3 -0
  58. package/dist/types.mjs.map +1 -0
  59. package/package.json +67 -1
@@ -0,0 +1,79 @@
1
+ import { isKeyMapArray, combineArrayData, isKeyMap, toObjectKey, isArray, computeMatchedItemIndex, updateObjectDeepValue, searchValueByKey } from './chunk-OKKMFSGF.mjs';
2
+ import { constants_default } from './chunk-PP7QTJDR.mjs';
3
+
4
+ // src/mutations/extended.ts
5
+ var searchHandler = (ctx) => {
6
+ const objectKeyId = toObjectKey(ctx._id);
7
+ if (objectKeyId === void 0) return;
8
+ const searchResult = ctx.resultArray ? searchValueByKey(ctx.resultArray, objectKeyId, ctx._uniqueKey) : void 0;
9
+ return { resolved: searchResult };
10
+ };
11
+ var updateKVHandler = (ctx) => {
12
+ const objectKeyId = toObjectKey(ctx._id);
13
+ if (objectKeyId === void 0 || !ctx.resultArray) return;
14
+ const matchedIndex = computeMatchedItemIndex(
15
+ objectKeyId,
16
+ ctx.resultArray,
17
+ ctx._uniqueKey
18
+ );
19
+ if (matchedIndex >= 0 && isKeyMap(ctx.resultArray[matchedIndex])) {
20
+ const newItem = { ...ctx.resultArray[matchedIndex] };
21
+ updateObjectDeepValue(newItem, ctx._changeKey, ctx.value);
22
+ ctx.resultArray[matchedIndex] = newItem;
23
+ }
24
+ };
25
+ var insertBeforeHandler = (ctx) => {
26
+ const objectKeyId = toObjectKey(ctx._id);
27
+ if (!isArray(ctx.resultArray) || objectKeyId === void 0) return void 0;
28
+ const matchedIndex = computeMatchedItemIndex(
29
+ objectKeyId,
30
+ ctx.resultArray,
31
+ ctx._uniqueKey
32
+ );
33
+ if (matchedIndex >= 0) {
34
+ const newArray = [...ctx.resultArray];
35
+ newArray.splice(matchedIndex, 0, ctx.value);
36
+ return { modifyValue: newArray };
37
+ }
38
+ return void 0;
39
+ };
40
+ var insertAfterHandler = (ctx) => {
41
+ const objectKeyId = toObjectKey(ctx._id);
42
+ if (!isArray(ctx.resultArray) || objectKeyId === void 0) return void 0;
43
+ const matchedIndex = computeMatchedItemIndex(
44
+ objectKeyId,
45
+ ctx.resultArray,
46
+ ctx._uniqueKey
47
+ );
48
+ if (matchedIndex >= 0) {
49
+ const newArray = [...ctx.resultArray];
50
+ newArray.splice(matchedIndex + 1, 0, ctx.value);
51
+ return { modifyValue: newArray };
52
+ }
53
+ return void 0;
54
+ };
55
+ var patchHandler = (ctx) => {
56
+ if (!isKeyMapArray(ctx.resultArray)) return;
57
+ const newArray = [...ctx.resultArray];
58
+ if (isKeyMapArray(ctx.value)) {
59
+ combineArrayData(newArray, ctx.value, ctx._uniqueKey);
60
+ } else if (isKeyMap(ctx.value)) {
61
+ const valueAsRecord = {};
62
+ for (const [k, v] of Object.entries(ctx.value)) {
63
+ if (isKeyMap(v)) valueAsRecord[k] = v;
64
+ }
65
+ combineArrayData(newArray, valueAsRecord, ctx._uniqueKey);
66
+ }
67
+ return { modifyValue: newArray };
68
+ };
69
+ var extendedMutations = {
70
+ [constants_default.CHANGE_TYPE.SEARCH_FIELD]: searchHandler,
71
+ [constants_default.CHANGE_TYPE.RESULT_UPDATE_KV]: updateKVHandler,
72
+ [constants_default.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE]: insertBeforeHandler,
73
+ [constants_default.CHANGE_TYPE.RESULT_INSERT_TO_AFTER]: insertAfterHandler,
74
+ [constants_default.CHANGE_TYPE.RESULT_LIST_MERGE]: patchHandler
75
+ };
76
+
77
+ export { extendedMutations, insertAfterHandler, insertBeforeHandler, patchHandler, searchHandler, updateKVHandler };
78
+ //# sourceMappingURL=chunk-6WOZNOYJ.mjs.map
79
+ //# sourceMappingURL=chunk-6WOZNOYJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mutations/extended.ts"],"names":[],"mappings":"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","file":"chunk-6WOZNOYJ.mjs","sourcesContent":["// mutations/extended.ts — 5 种扩展 mutation handler\nimport {\n combineArrayData,\n computeMatchedItemIndex,\n isArray,\n isKeyMap,\n isKeyMapArray,\n searchValueByKey,\n toObjectKey,\n updateObjectDeepValue\n} from '../_internal/utils'\nimport ENUM from '../constants'\nimport type { KeyMap, MutationHandler, ObjectKey } from '../types'\n\n// --- search: 按 ID 查找 item ---\nexport const searchHandler: MutationHandler = (ctx) => {\n const objectKeyId = toObjectKey(ctx._id)\n if (objectKeyId === undefined) return\n const searchResult = ctx.resultArray\n ? searchValueByKey(ctx.resultArray, objectKeyId, ctx._uniqueKey)\n : undefined\n return { resolved: searchResult }\n}\n\n// --- update: 深层 KV 更新 ---\nexport const updateKVHandler: MutationHandler = (ctx) => {\n const objectKeyId = toObjectKey(ctx._id)\n if (objectKeyId === undefined || !ctx.resultArray) return\n\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n ctx.resultArray,\n ctx._uniqueKey\n )\n if (matchedIndex >= 0 && isKeyMap(ctx.resultArray[matchedIndex])) {\n const newItem = { ...ctx.resultArray[matchedIndex] }\n updateObjectDeepValue(newItem, ctx._changeKey, ctx.value)\n ctx.resultArray[matchedIndex] = newItem\n }\n}\n\n// --- insert-before: 在指定 ID 前插入 ---\nexport const insertBeforeHandler: MutationHandler = (ctx) => {\n const objectKeyId = toObjectKey(ctx._id)\n if (!isArray(ctx.resultArray) || objectKeyId === undefined) return undefined\n\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n ctx.resultArray,\n ctx._uniqueKey\n )\n if (matchedIndex >= 0) {\n const newArray = [...ctx.resultArray]\n newArray.splice(matchedIndex, 0, ctx.value)\n return { modifyValue: newArray }\n }\n return undefined\n}\n\n// --- insert-after: 在指定 ID 后插入 ---\nexport const insertAfterHandler: MutationHandler = (ctx) => {\n const objectKeyId = toObjectKey(ctx._id)\n if (!isArray(ctx.resultArray) || objectKeyId === undefined) return undefined\n\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n ctx.resultArray,\n ctx._uniqueKey\n )\n if (matchedIndex >= 0) {\n const newArray = [...ctx.resultArray]\n newArray.splice(matchedIndex + 1, 0, ctx.value)\n return { modifyValue: newArray }\n }\n return undefined\n}\n\n// --- patch: 批量合并 ---\nexport const patchHandler: MutationHandler = (ctx) => {\n if (!isKeyMapArray(ctx.resultArray)) return\n\n const newArray = [...ctx.resultArray]\n if (isKeyMapArray(ctx.value)) {\n combineArrayData(newArray, ctx.value, ctx._uniqueKey)\n } else if (isKeyMap(ctx.value)) {\n const valueAsRecord: Record<ObjectKey, KeyMap> = {}\n for (const [k, v] of Object.entries(ctx.value)) {\n if (isKeyMap(v)) valueAsRecord[k] = v\n }\n combineArrayData(newArray, valueAsRecord, ctx._uniqueKey)\n }\n return { modifyValue: newArray }\n}\n\n// --- 扩展 mutation 注册表 ---\nexport const extendedMutations: Record<string, MutationHandler> = {\n [ENUM.CHANGE_TYPE.SEARCH_FIELD]: searchHandler,\n [ENUM.CHANGE_TYPE.RESULT_UPDATE_KV]: updateKVHandler,\n [ENUM.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE]: insertBeforeHandler,\n [ENUM.CHANGE_TYPE.RESULT_INSERT_TO_AFTER]: insertAfterHandler,\n [ENUM.CHANGE_TYPE.RESULT_LIST_MERGE]: patchHandler\n}\n"]}
@@ -0,0 +1,91 @@
1
+ import { generateFieldName } from './chunk-LF6DOBID.mjs';
2
+ import { coreMutations } from './chunk-C4BWSFWU.mjs';
3
+ import { extendedMutations } from './chunk-6WOZNOYJ.mjs';
4
+ import { computeResultLength, getResultAsArray, isKeyMapArray, isKeyMap } from './chunk-OKKMFSGF.mjs';
5
+ import { constants_default } from './chunk-PP7QTJDR.mjs';
6
+
7
+ // src/mutations/index.ts
8
+ var allMutations = {
9
+ ...coreMutations,
10
+ ...extendedMutations
11
+ };
12
+ var createUpdateState = (handlers = allMutations) => {
13
+ return ({
14
+ getter,
15
+ setter,
16
+ func,
17
+ query,
18
+ method,
19
+ id,
20
+ value,
21
+ changeKey
22
+ }) => {
23
+ return new Promise((resolve, reject) => {
24
+ const fieldName = generateFieldName({ func, query });
25
+ const fieldData = getter(fieldName);
26
+ if (!fieldData) {
27
+ reject(new Error(`Field ${fieldName} not found.`));
28
+ return;
29
+ }
30
+ if (fieldData.page === -1) {
31
+ resolve(null);
32
+ return;
33
+ }
34
+ const _uniqueKey = func.uniqueKey || constants_default.DEFAULT_UNIQUE_KEY_NAME;
35
+ const _changeKey = changeKey || constants_default.FIELD_DATA.RESULT_KEY;
36
+ const beforeLength = computeResultLength(
37
+ fieldData[constants_default.FIELD_DATA.RESULT_KEY]
38
+ );
39
+ const newFieldData = { ...fieldData };
40
+ let resultArray = getResultAsArray(fieldData);
41
+ if (resultArray) {
42
+ resultArray = [...resultArray];
43
+ newFieldData.result = resultArray;
44
+ }
45
+ const handler = handlers[method];
46
+ if (!handler) {
47
+ resolve(null);
48
+ return;
49
+ }
50
+ const ctx = {
51
+ resultArray,
52
+ newFieldData,
53
+ _id: id,
54
+ _uniqueKey,
55
+ _changeKey,
56
+ value
57
+ };
58
+ const handlerResult = handler(ctx);
59
+ if (handlerResult) {
60
+ if ("resolved" in handlerResult) {
61
+ resolve(handlerResult.resolved);
62
+ return;
63
+ }
64
+ if ("modifyValue" in handlerResult && handlerResult.modifyValue !== void 0) {
65
+ const modifyValue = handlerResult.modifyValue;
66
+ if (_changeKey === constants_default.FIELD_DATA.RESULT_KEY && isKeyMapArray(modifyValue)) {
67
+ newFieldData.result = modifyValue;
68
+ } else if (_changeKey === constants_default.FIELD_DATA.EXTRA_KEY && isKeyMap(modifyValue)) {
69
+ newFieldData.extra = modifyValue;
70
+ }
71
+ }
72
+ }
73
+ const afterLength = computeResultLength(
74
+ newFieldData[constants_default.FIELD_DATA.RESULT_KEY]
75
+ );
76
+ newFieldData.total = newFieldData.total + afterLength - beforeLength;
77
+ newFieldData.nothing = afterLength === 0;
78
+ setter({
79
+ key: fieldName,
80
+ type: constants_default.SETTER_TYPE.RESET,
81
+ value: newFieldData,
82
+ callback: () => resolve(null)
83
+ });
84
+ });
85
+ };
86
+ };
87
+ var updateState = createUpdateState();
88
+
89
+ export { createUpdateState, updateState };
90
+ //# sourceMappingURL=chunk-BTOUHSDU.mjs.map
91
+ //# sourceMappingURL=chunk-BTOUHSDU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mutations/index.ts"],"names":[],"mappings":"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","file":"chunk-BTOUHSDU.mjs","sourcesContent":["// mutations/index.ts — 全量 updateState(core + extended mutations)\nimport {\n computeResultLength,\n getResultAsArray,\n isKeyMap,\n isKeyMapArray\n} from '../_internal/utils'\nimport ENUM from '../constants'\nimport { generateFieldName } from '../core'\n\nimport type {\n DefaultField,\n MutationContext,\n MutationHandler,\n RequestParams,\n UpdateStateType\n} from '../types'\n\nimport { coreMutations } from './core'\nimport { extendedMutations } from './extended'\n\n// 合并全部 mutation handlers\nconst allMutations: Record<string, MutationHandler> = {\n ...coreMutations,\n ...extendedMutations\n}\n\nexport { coreMutations } from './core'\nexport { extendedMutations } from './extended'\n\n/**\n * 创建 updateState 函数,可传入自定义 mutation handlers\n */\nexport const createUpdateState = (\n handlers: Record<string, MutationHandler> = allMutations\n) => {\n return <P extends RequestParams, R>({\n getter,\n setter,\n func,\n query,\n method,\n id,\n value,\n changeKey\n }: UpdateStateType<P, R>): Promise<unknown> => {\n return new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, 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 _uniqueKey = func.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 // 创建新 field 对象\n const newFieldData: DefaultField = { ...fieldData }\n let resultArray = getResultAsArray(fieldData)\n if (resultArray) {\n resultArray = [...resultArray]\n newFieldData.result = resultArray as any\n }\n\n // 查找 handler\n const handler = handlers[method]\n if (!handler) {\n resolve(null)\n return\n }\n\n const ctx: MutationContext = {\n resultArray,\n newFieldData,\n _id: id,\n _uniqueKey,\n _changeKey,\n value\n }\n\n const handlerResult = handler(ctx)\n\n // 处理 handler 返回值\n if (handlerResult) {\n // search 等操作直接返回结果\n if ('resolved' in handlerResult) {\n resolve(handlerResult.resolved)\n return\n }\n\n // modifyValue: handler 返回了处理后的数据,需要写回\n if (\n 'modifyValue' in handlerResult &&\n handlerResult.modifyValue !== undefined\n ) {\n const modifyValue = handlerResult.modifyValue\n if (\n _changeKey === ENUM.FIELD_DATA.RESULT_KEY &&\n isKeyMapArray(modifyValue)\n ) {\n newFieldData.result = modifyValue\n } else if (\n _changeKey === ENUM.FIELD_DATA.EXTRA_KEY &&\n isKeyMap(modifyValue)\n ) {\n newFieldData.extra = modifyValue\n }\n }\n }\n\n // 更新 total 和 nothing\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: () => resolve(null)\n })\n })\n }\n}\n\n/**\n * 默认 updateState(包含全部 10 种 mutation)\n */\nexport const updateState = createUpdateState()\n"]}
@@ -0,0 +1,74 @@
1
+ import { isKeyMapArray, isKeyMap, toObjectKey, computeMatchedItemIndex, updateArrayItem, isObjectKeyArray, getObjectDeepValue, isArray } from './chunk-OKKMFSGF.mjs';
2
+ import { constants_default } from './chunk-PP7QTJDR.mjs';
3
+
4
+ // src/mutations/core.ts
5
+ var pushHandler = (ctx) => {
6
+ if (!isArray(ctx.resultArray)) return;
7
+ return {
8
+ modifyValue: isArray(ctx.value) ? [...ctx.resultArray, ...ctx.value] : [...ctx.resultArray, ctx.value]
9
+ };
10
+ };
11
+ var unshiftHandler = (ctx) => {
12
+ if (!isArray(ctx.resultArray)) return;
13
+ return {
14
+ modifyValue: isArray(ctx.value) ? [...ctx.value, ...ctx.resultArray] : [ctx.value, ...ctx.resultArray]
15
+ };
16
+ };
17
+ var deleteHandler = (ctx) => {
18
+ if (!isKeyMapArray(ctx.resultArray)) return;
19
+ const objectKeyId = toObjectKey(ctx._id);
20
+ if (objectKeyId !== void 0) {
21
+ const matchedIndex = computeMatchedItemIndex(
22
+ objectKeyId,
23
+ ctx.resultArray,
24
+ ctx._uniqueKey
25
+ );
26
+ if (matchedIndex >= 0) {
27
+ const newArray = [...ctx.resultArray];
28
+ newArray.splice(matchedIndex, 1);
29
+ return { modifyValue: newArray };
30
+ }
31
+ }
32
+ if (isObjectKeyArray(ctx._id)) {
33
+ const idSet = new Set(ctx._id);
34
+ return {
35
+ modifyValue: ctx.resultArray.filter((item) => {
36
+ const itemKey = getObjectDeepValue(item, ctx._uniqueKey);
37
+ return typeof itemKey !== "string" && typeof itemKey !== "number" ? true : !idSet.has(itemKey);
38
+ })
39
+ };
40
+ }
41
+ return void 0;
42
+ };
43
+ var mergeHandler = (ctx) => {
44
+ const objectKeyId = toObjectKey(ctx._id);
45
+ if (objectKeyId === void 0 || !ctx.resultArray || !isKeyMap(ctx.value))
46
+ return;
47
+ const matchedIndex = computeMatchedItemIndex(
48
+ objectKeyId,
49
+ ctx.resultArray,
50
+ ctx._uniqueKey
51
+ );
52
+ updateArrayItem(ctx.resultArray, matchedIndex, (item) => ({
53
+ ...item,
54
+ ...ctx.value
55
+ }));
56
+ };
57
+ var resetHandler = (ctx) => {
58
+ if (ctx._changeKey === constants_default.FIELD_DATA.RESULT_KEY && isKeyMapArray(ctx.value)) {
59
+ ctx.newFieldData.result = ctx.value;
60
+ } else if (ctx._changeKey === constants_default.FIELD_DATA.EXTRA_KEY && isKeyMap(ctx.value)) {
61
+ ctx.newFieldData.extra = ctx.value;
62
+ }
63
+ };
64
+ var coreMutations = {
65
+ [constants_default.CHANGE_TYPE.RESULT_ADD_AFTER]: pushHandler,
66
+ [constants_default.CHANGE_TYPE.RESULT_ADD_BEFORE]: unshiftHandler,
67
+ [constants_default.CHANGE_TYPE.RESULT_REMOVE_BY_ID]: deleteHandler,
68
+ [constants_default.CHANGE_TYPE.RESULT_ITEM_MERGE]: mergeHandler,
69
+ [constants_default.CHANGE_TYPE.RESET_FIELD]: resetHandler
70
+ };
71
+
72
+ export { coreMutations, deleteHandler, mergeHandler, pushHandler, resetHandler, unshiftHandler };
73
+ //# sourceMappingURL=chunk-C4BWSFWU.mjs.map
74
+ //# sourceMappingURL=chunk-C4BWSFWU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mutations/core.ts"],"names":[],"mappings":"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","file":"chunk-C4BWSFWU.mjs","sourcesContent":["// mutations/core.ts — 5 种核心 mutation handler\nimport {\n computeMatchedItemIndex,\n getObjectDeepValue,\n isArray,\n isKeyMap,\n isKeyMapArray,\n isObjectKeyArray,\n toObjectKey,\n updateArrayItem\n} from '../_internal/utils'\nimport ENUM from '../constants'\nimport type { MutationHandler, ObjectKey } from '../types'\n\n// --- push: 末尾追加 ---\nexport const pushHandler: MutationHandler = (ctx) => {\n if (!isArray(ctx.resultArray)) return\n return {\n modifyValue: isArray(ctx.value)\n ? [...ctx.resultArray, ...ctx.value]\n : [...ctx.resultArray, ctx.value]\n }\n}\n\n// --- unshift: 头部插入 ---\nexport const unshiftHandler: MutationHandler = (ctx) => {\n if (!isArray(ctx.resultArray)) return\n return {\n modifyValue: isArray(ctx.value)\n ? [...ctx.value, ...ctx.resultArray]\n : [ctx.value, ...ctx.resultArray]\n }\n}\n\n// --- delete: 按 ID 删除 ---\nexport const deleteHandler: MutationHandler = (ctx) => {\n if (!isKeyMapArray(ctx.resultArray)) return\n\n const objectKeyId = toObjectKey(ctx._id)\n\n if (objectKeyId !== undefined) {\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n ctx.resultArray,\n ctx._uniqueKey\n )\n if (matchedIndex >= 0) {\n const newArray = [...ctx.resultArray]\n newArray.splice(matchedIndex, 1)\n return { modifyValue: newArray }\n }\n }\n\n // 批量删除:id 为数组\n if (isObjectKeyArray(ctx._id)) {\n const idSet = new Set<ObjectKey>(ctx._id)\n return {\n modifyValue: ctx.resultArray.filter((item) => {\n const itemKey = getObjectDeepValue(item, ctx._uniqueKey)\n return typeof itemKey !== 'string' && typeof itemKey !== 'number'\n ? true\n : !idSet.has(itemKey as ObjectKey)\n })\n }\n }\n\n return undefined\n}\n\n// --- merge: 按 ID 合并字段 ---\nexport const mergeHandler: MutationHandler = (ctx) => {\n const objectKeyId = toObjectKey(ctx._id)\n if (objectKeyId === undefined || !ctx.resultArray || !isKeyMap(ctx.value))\n return\n\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n ctx.resultArray,\n ctx._uniqueKey\n )\n updateArrayItem(ctx.resultArray, matchedIndex, (item) => ({\n ...item,\n ...ctx.value\n }))\n}\n\n// --- reset: 整体替换 result 或 extra ---\nexport const resetHandler: MutationHandler = (ctx) => {\n if (\n ctx._changeKey === ENUM.FIELD_DATA.RESULT_KEY &&\n isKeyMapArray(ctx.value)\n ) {\n ctx.newFieldData.result = ctx.value\n } else if (\n ctx._changeKey === ENUM.FIELD_DATA.EXTRA_KEY &&\n isKeyMap(ctx.value)\n ) {\n ctx.newFieldData.extra = ctx.value\n }\n}\n\n// --- 核心 mutation 注册表 ---\nexport const coreMutations: Record<string, MutationHandler> = {\n [ENUM.CHANGE_TYPE.RESULT_ADD_AFTER]: pushHandler,\n [ENUM.CHANGE_TYPE.RESULT_ADD_BEFORE]: unshiftHandler,\n [ENUM.CHANGE_TYPE.RESULT_REMOVE_BY_ID]: deleteHandler,\n [ENUM.CHANGE_TYPE.RESULT_ITEM_MERGE]: mergeHandler,\n [ENUM.CHANGE_TYPE.RESET_FIELD]: resetHandler\n}\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-KIQOUUEZ.mjs.map
3
+ //# sourceMappingURL=chunk-KIQOUUEZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-KIQOUUEZ.mjs"}
@@ -0,0 +1,248 @@
1
+ import { stableSerialize, generateDefaultField, generateRequestParams, computeResultLength, setReactivityField } from './chunk-OKKMFSGF.mjs';
2
+ import { constants_default } from './chunk-PP7QTJDR.mjs';
3
+
4
+ // src/_internal/setters.ts
5
+ var SET_DATA = ({
6
+ getter,
7
+ setter,
8
+ data,
9
+ fieldName,
10
+ type,
11
+ page,
12
+ insertBefore
13
+ }) => {
14
+ return new Promise((resolve, reject) => {
15
+ const fieldData = getter(fieldName);
16
+ if (!fieldData) {
17
+ reject(new Error(`Field ${fieldName} not found.`));
18
+ return;
19
+ }
20
+ const field = fieldData;
21
+ let result;
22
+ let extra;
23
+ const hasResult = Object.prototype.hasOwnProperty.call(data, "result");
24
+ if (!hasResult) {
25
+ result = data;
26
+ field.nothing = false;
27
+ field.fetched = true;
28
+ field.noMore = true;
29
+ field.page = -1;
30
+ } else {
31
+ const apiResponse = data;
32
+ result = apiResponse.result;
33
+ extra = apiResponse.extra;
34
+ const isEmpty = computeResultLength(result) === 0;
35
+ field.nothing = field.fetched ? false : isEmpty;
36
+ field.fetched = true;
37
+ field.total = apiResponse.total || 0;
38
+ if (type === constants_default.FETCH_TYPE.PAGINATION) {
39
+ field.noMore = false;
40
+ field.page = +page;
41
+ } else {
42
+ field.noMore = typeof apiResponse.no_more === "undefined" ? isEmpty : apiResponse.no_more || isEmpty;
43
+ field.page = field.page + 1;
44
+ }
45
+ }
46
+ field.loading = false;
47
+ setReactivityField(
48
+ field,
49
+ constants_default.FIELD_DATA.RESULT_KEY,
50
+ result,
51
+ type,
52
+ insertBefore
53
+ );
54
+ if (extra !== void 0 && extra !== null) {
55
+ setReactivityField(
56
+ field,
57
+ constants_default.FIELD_DATA.EXTRA_KEY,
58
+ extra,
59
+ type,
60
+ insertBefore
61
+ );
62
+ }
63
+ setter({
64
+ key: fieldName,
65
+ type: constants_default.SETTER_TYPE.RESET,
66
+ value: field,
67
+ callback: () => resolve()
68
+ });
69
+ });
70
+ };
71
+ var SET_ERROR = ({ setter, fieldName, error }) => {
72
+ setter({
73
+ key: fieldName,
74
+ type: constants_default.SETTER_TYPE.MERGE,
75
+ value: { error, loading: false }
76
+ });
77
+ };
78
+
79
+ // src/core.ts
80
+ var generateFieldName = ({
81
+ func,
82
+ query
83
+ }) => {
84
+ let result = func.id;
85
+ if (!query) return result;
86
+ const queryObj = query;
87
+ const filteredKeys = Object.keys(queryObj).filter((key) => !func.paramsIgnore.includes(key)).sort();
88
+ for (const key of filteredKeys) {
89
+ const value = queryObj[key];
90
+ const safeValue = typeof value === "object" && value !== null ? stableSerialize(value) : String(value);
91
+ result += `-${key}-${encodeURIComponent(safeValue)}`;
92
+ }
93
+ return result;
94
+ };
95
+ var createApi = (options) => {
96
+ const fn = ((params) => options.fetcher(params));
97
+ const metadata = {
98
+ id: options.id,
99
+ type: options.type || constants_default.FETCH_TYPE.SCROLL_LOAD_MORE,
100
+ uniqueKey: options.uniqueKey || constants_default.DEFAULT_UNIQUE_KEY_NAME,
101
+ is_up: options.is_up || false,
102
+ paramsIgnore: [
103
+ "page",
104
+ "since_id",
105
+ "seen_ids",
106
+ "__refresh__",
107
+ "__reload__",
108
+ ...options.paramsIgnore || []
109
+ ]
110
+ };
111
+ return Object.freeze(Object.assign(fn, metadata));
112
+ };
113
+ var initState = ({
114
+ getter,
115
+ setter,
116
+ func,
117
+ query,
118
+ opts
119
+ }) => {
120
+ return new Promise((resolve) => {
121
+ const fieldName = generateFieldName({ func, query });
122
+ if (getter(fieldName)) return resolve();
123
+ setter({
124
+ key: fieldName,
125
+ type: constants_default.SETTER_TYPE.RESET,
126
+ value: generateDefaultField(opts),
127
+ callback: () => resolve()
128
+ });
129
+ });
130
+ };
131
+ var initData = ({
132
+ getter,
133
+ setter,
134
+ func,
135
+ query,
136
+ callback
137
+ }) => new Promise((resolve, reject) => {
138
+ const fieldName = generateFieldName({ func, query });
139
+ const fieldData = getter(fieldName);
140
+ const doRefresh = !!query?.__refresh__;
141
+ const needReset = !!query?.__reload__;
142
+ const directlyLoadData = doRefresh && !needReset;
143
+ if (fieldData && fieldData.error && !doRefresh) return resolve();
144
+ if (fieldData && fieldData.loading) return resolve();
145
+ if (fieldData && fieldData.fetched && !doRefresh) return resolve();
146
+ const params = generateRequestParams({
147
+ field: generateDefaultField({ ...fieldData, fetched: false }),
148
+ uniqueKey: func.uniqueKey,
149
+ type: func.type,
150
+ is_up: func.is_up,
151
+ query
152
+ });
153
+ const executeFetch = () => {
154
+ func(params).then((data) => {
155
+ const commitData = () => {
156
+ SET_DATA({
157
+ getter,
158
+ setter,
159
+ data,
160
+ fieldName,
161
+ type: func.type,
162
+ page: params.page || 0,
163
+ insertBefore: false
164
+ }).then(() => {
165
+ callback?.({ params, data, refresh: doRefresh });
166
+ resolve();
167
+ });
168
+ };
169
+ if (directlyLoadData) {
170
+ setter({
171
+ key: fieldName,
172
+ type: constants_default.SETTER_TYPE.RESET,
173
+ value: generateDefaultField(),
174
+ callback: commitData
175
+ });
176
+ } else {
177
+ commitData();
178
+ }
179
+ }).catch((error) => {
180
+ SET_ERROR({ setter, fieldName, error });
181
+ reject(error);
182
+ });
183
+ };
184
+ if (directlyLoadData) {
185
+ executeFetch();
186
+ } else {
187
+ setter({
188
+ key: fieldName,
189
+ type: constants_default.SETTER_TYPE.RESET,
190
+ value: { ...generateDefaultField(), loading: true, error: null },
191
+ callback: executeFetch
192
+ });
193
+ }
194
+ });
195
+ var loadMore = ({
196
+ getter,
197
+ setter,
198
+ query,
199
+ func,
200
+ errorRetry,
201
+ callback
202
+ }) => new Promise((resolve, reject) => {
203
+ const fieldName = generateFieldName({ func, query });
204
+ const fieldData = getter(fieldName);
205
+ if (!fieldData || fieldData.loading || fieldData.nothing) return resolve();
206
+ if (fieldData.noMore && !errorRetry) return resolve();
207
+ const type = func.type;
208
+ if (type === constants_default.FETCH_TYPE.PAGINATION && query?.page != null && Number(query.page) === fieldData.page) {
209
+ return resolve();
210
+ }
211
+ const loadingState = type === constants_default.FETCH_TYPE.PAGINATION ? { loading: true, error: null, result: [], extra: null } : { loading: true, error: null };
212
+ const params = generateRequestParams({
213
+ field: fieldData,
214
+ uniqueKey: func.uniqueKey,
215
+ type,
216
+ is_up: func.is_up,
217
+ query
218
+ });
219
+ if (fieldData.extra) params.extra = fieldData.extra;
220
+ setter({
221
+ key: fieldName,
222
+ type: constants_default.SETTER_TYPE.MERGE,
223
+ value: loadingState,
224
+ callback: () => {
225
+ func(params).then((data) => {
226
+ SET_DATA({
227
+ getter,
228
+ setter,
229
+ data,
230
+ type,
231
+ fieldName,
232
+ page: params.page || 0,
233
+ insertBefore: func.is_up
234
+ }).then(() => {
235
+ callback?.({ params, data, refresh: false });
236
+ resolve();
237
+ });
238
+ }).catch((error) => {
239
+ SET_ERROR({ setter, fieldName, error });
240
+ reject(error);
241
+ });
242
+ }
243
+ });
244
+ });
245
+
246
+ export { createApi, generateFieldName, initData, initState, loadMore };
247
+ //# sourceMappingURL=chunk-LF6DOBID.mjs.map
248
+ //# sourceMappingURL=chunk-LF6DOBID.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/_internal/setters.ts","../src/core.ts"],"names":[],"mappings":"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","file":"chunk-LF6DOBID.mjs","sourcesContent":["// _internal/setters.ts\nimport ENUM from '../constants'\nimport type { BaseApiResponse, SetDataType, SetErrorType } from '../types'\nimport { computeResultLength, setReactivityField } from './utils'\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\n let result: any\n let extra: unknown\n\n // 标准 API 响应(有 result 属性)\n const hasResult = Object.prototype.hasOwnProperty.call(data, 'result')\n if (!hasResult) {\n // 非标准:整个 data 就是 result\n result = data\n field.nothing = false\n field.fetched = true\n field.noMore = true\n field.page = -1\n } else {\n const apiResponse = data as BaseApiResponse\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: () => resolve()\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: { error, loading: false }\n })\n}\n","// core.ts — createApi / initState / initData / loadMore / generateFieldName\nimport { SET_DATA, SET_ERROR } from './_internal/setters'\nimport {\n generateDefaultField,\n generateRequestParams,\n stableSerialize\n} from './_internal/utils'\nimport ENUM from './constants'\n\nimport type {\n ApiContract,\n BaseApiResponse,\n DefaultField,\n FetchType,\n InitDataType,\n InitStateType,\n KeyMap,\n LoadMoreType,\n RequestParams\n} from './types'\n\n// --- generateFieldName ---\nexport const generateFieldName = <P extends RequestParams, R>({\n func,\n query\n}: {\n func: ApiContract<P, R>\n query?: P\n}): string => {\n let result = func.id\n if (!query) return result\n\n const queryObj = query as Record<string, unknown>\n const filteredKeys = Object.keys(queryObj)\n .filter((key) => !func.paramsIgnore.includes(key))\n .sort()\n\n for (const key of filteredKeys) {\n const value = queryObj[key]\n const safeValue =\n typeof value === 'object' && value !== null\n ? stableSerialize(value)\n : String(value)\n result += `-${key}-${encodeURIComponent(safeValue)}`\n }\n return result\n}\n\n// --- createApi ---\nexport const createApi = <P extends RequestParams, R>(options: {\n id: string\n type?: FetchType\n uniqueKey?: string\n is_up?: boolean\n paramsIgnore?: string[]\n fetcher: (params: P) => Promise<BaseApiResponse<R>>\n}): ApiContract<P, R> => {\n const fn = ((params: P) => options.fetcher(params)) as ApiContract<P, R>\n\n const metadata: Partial<ApiContract<P, R>> = {\n id: options.id,\n type: options.type || (ENUM.FETCH_TYPE.SCROLL_LOAD_MORE as FetchType),\n uniqueKey: options.uniqueKey || ENUM.DEFAULT_UNIQUE_KEY_NAME,\n is_up: options.is_up || false,\n paramsIgnore: [\n 'page',\n 'since_id',\n 'seen_ids',\n '__refresh__',\n '__reload__',\n ...(options.paramsIgnore || [])\n ]\n }\n\n return Object.freeze(Object.assign(fn, metadata))\n}\n\n// --- initState ---\nexport const initState = <P extends RequestParams, R>({\n getter,\n setter,\n func,\n query,\n opts\n}: InitStateType<P, R>): Promise<void> => {\n return new Promise((resolve) => {\n const fieldName = generateFieldName({ func, query })\n if (getter(fieldName)) return resolve()\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: generateDefaultField(opts),\n callback: () => resolve()\n })\n })\n}\n\n// --- initData ---\nexport const initData = <P extends RequestParams, R>({\n getter,\n setter,\n func,\n query,\n callback\n}: InitDataType<P, R>): Promise<void> =>\n new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, query })\n const fieldData = getter(fieldName)\n\n const doRefresh = !!query?.__refresh__\n const needReset = !!query?.__reload__\n const directlyLoadData = doRefresh && !needReset\n\n if (fieldData && fieldData.error && !doRefresh) return resolve()\n if (fieldData && fieldData.loading) return resolve()\n if (fieldData && fieldData.fetched && !doRefresh) return resolve()\n\n const params = generateRequestParams({\n field: generateDefaultField({ ...fieldData, fetched: false }),\n uniqueKey: func.uniqueKey,\n type: func.type,\n is_up: func.is_up,\n query: query as KeyMap\n })\n\n const executeFetch = () => {\n func(params as P)\n .then((data) => {\n const commitData = () => {\n SET_DATA({\n getter,\n setter,\n data: data as BaseApiResponse,\n fieldName,\n type: func.type,\n page: params.page || 0,\n insertBefore: false\n }).then(() => {\n callback?.({ params: params as P, data, refresh: doRefresh })\n resolve()\n })\n }\n\n if (directlyLoadData) {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: generateDefaultField(),\n callback: commitData\n })\n } else {\n commitData()\n }\n })\n .catch((error: Error) => {\n SET_ERROR({ setter, fieldName, error })\n reject(error)\n })\n }\n\n if (directlyLoadData) {\n executeFetch()\n } else {\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.RESET,\n value: { ...generateDefaultField(), loading: true, error: null },\n callback: executeFetch\n })\n }\n })\n\n// --- loadMore ---\nexport const loadMore = <P extends RequestParams, R>({\n getter,\n setter,\n query,\n func,\n errorRetry,\n callback\n}: LoadMoreType<P, R>): Promise<void> =>\n new Promise((resolve, reject) => {\n const fieldName = generateFieldName({ func, query })\n const fieldData = getter(fieldName)\n if (!fieldData || fieldData.loading || fieldData.nothing) return resolve()\n if (fieldData.noMore && !errorRetry) return resolve()\n\n const type = func.type\n\n if (\n type === ENUM.FETCH_TYPE.PAGINATION &&\n query?.page != null &&\n Number(query.page) === fieldData.page\n ) {\n return resolve()\n }\n\n const loadingState: Partial<DefaultField> =\n type === ENUM.FETCH_TYPE.PAGINATION\n ? { loading: true, error: null, result: [], extra: null }\n : { loading: true, error: null }\n\n const params = generateRequestParams({\n field: fieldData,\n uniqueKey: func.uniqueKey,\n type,\n is_up: func.is_up,\n query: query as KeyMap\n })\n\n if (fieldData.extra) params.extra = fieldData.extra\n\n setter({\n key: fieldName,\n type: ENUM.SETTER_TYPE.MERGE,\n value: loadingState,\n callback: () => {\n func(params as P)\n .then((data) => {\n SET_DATA({\n getter,\n setter,\n data: data as BaseApiResponse,\n type,\n fieldName,\n page: params.page || 0,\n insertBefore: func.is_up\n }).then(() => {\n callback?.({ params: params as P, data, refresh: false })\n resolve()\n })\n })\n .catch((error: Error) => {\n SET_ERROR({ setter, fieldName, error })\n reject(error)\n })\n }\n })\n })\n"]}