@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.
- package/dist/chunk-6WOZNOYJ.mjs +79 -0
- package/dist/chunk-6WOZNOYJ.mjs.map +1 -0
- package/dist/chunk-BTOUHSDU.mjs +91 -0
- package/dist/chunk-BTOUHSDU.mjs.map +1 -0
- package/dist/chunk-C4BWSFWU.mjs +74 -0
- package/dist/chunk-C4BWSFWU.mjs.map +1 -0
- package/dist/chunk-KIQOUUEZ.mjs +3 -0
- package/dist/chunk-KIQOUUEZ.mjs.map +1 -0
- package/dist/chunk-LF6DOBID.mjs +248 -0
- package/dist/chunk-LF6DOBID.mjs.map +1 -0
- package/dist/chunk-OKKMFSGF.mjs +253 -0
- package/dist/chunk-OKKMFSGF.mjs.map +1 -0
- package/dist/chunk-PP7QTJDR.mjs +37 -0
- package/dist/chunk-PP7QTJDR.mjs.map +1 -0
- package/dist/constants.d.mts +33 -0
- package/dist/constants.d.ts +33 -0
- package/dist/constants.js +39 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.mjs +3 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/core.d.mts +19 -0
- package/dist/core.d.ts +19 -0
- package/dist/core.js +446 -0
- package/dist/core.js.map +1 -0
- package/dist/core.mjs +5 -0
- package/dist/core.mjs.map +1 -0
- package/dist/index.d.mts +6 -291
- package/dist/index.d.ts +6 -291
- package/dist/index.global.js +386 -478
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +386 -478
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -842
- package/dist/index.mjs.map +1 -1
- package/dist/mutations/core.d.mts +10 -0
- package/dist/mutations/core.d.ts +10 -0
- package/dist/mutations/core.js +130 -0
- package/dist/mutations/core.js.map +1 -0
- package/dist/mutations/core.mjs +5 -0
- package/dist/mutations/core.mjs.map +1 -0
- package/dist/mutations/extended.d.mts +10 -0
- package/dist/mutations/extended.d.ts +10 -0
- package/dist/mutations/extended.js +172 -0
- package/dist/mutations/extended.js.map +1 -0
- package/dist/mutations/extended.mjs +5 -0
- package/dist/mutations/extended.mjs.map +1 -0
- package/dist/mutations/index.d.mts +14 -0
- package/dist/mutations/index.d.ts +14 -0
- package/dist/mutations/index.js +379 -0
- package/dist/mutations/index.js.map +1 -0
- package/dist/mutations/index.mjs +8 -0
- package/dist/mutations/index.mjs.map +1 -0
- package/dist/types.d.mts +140 -0
- package/dist/types.d.ts +140 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +3 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +67 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/enum.ts","../src/utils.ts","../src/setters.ts","../src/actions.ts"],"names":["generateFieldName"],"mappings":"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","file":"index.mjs","sourcesContent":["// 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","// utils.ts\nimport ENUM from './enum'\nimport type {\n ApiContract,\n DefaultField,\n FetchType,\n FieldKeys,\n GenerateParamsResp,\n GenerateParamsType,\n KeyMap,\n ObjectKey,\n RequestParams\n} from './types'\n\n// ========== 类型守卫函数 ==========\n\nexport const isArray = (data: unknown): data is any[] => Array.isArray(data)\n\n/**\n * 检查是否为对象结果\n */\nexport const isResultObject = (data: unknown): data is Record<string, any> =>\n !isArray(data) && typeof data === 'object' && data !== null\n\n/**\n * 检查是否为 ObjectKey\n */\nexport const isObjectKey = (value: unknown): value is ObjectKey =>\n typeof value === 'string' || typeof value === 'number'\n\n/**\n * 检查是否为 KeyMap\n */\nexport const isKeyMap = (value: unknown): value is KeyMap =>\n typeof value === 'object' && value !== null && !isArray(value)\n\n/**\n * 检查是否为 KeyMap 数组\n */\nexport const isKeyMapArray = (value: unknown): value is KeyMap[] =>\n isArray(value) &&\n value.every((item) => typeof item === 'object' && item !== null)\n\n/**\n * 检查是否为 ObjectKey 数组\n */\nexport const isObjectKeyArray = (value: unknown): value is ObjectKey[] =>\n isArray(value) &&\n value.every((item) => typeof item === 'string' || typeof item === 'number')\n\nexport const stableSerialize = (value: unknown): string => {\n if (value === null || typeof value !== 'object') {\n return String(value)\n }\n try {\n if (isArray(value)) {\n return JSON.stringify(value)\n }\n if (isKeyMap(value)) {\n const keys = Object.keys(value).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[k]\n }\n return JSON.stringify(obj)\n }\n return '[Unsupported Object]'\n } catch {\n return '[Circular Object/Value]'\n }\n}\n\nconst extractUniqueKey = (\n item: KeyMap,\n uniqueKey: string\n): ObjectKey | undefined => {\n if (!isKeyMap(item)) return undefined\n\n const val = item[uniqueKey]\n if (isObjectKey(val)) {\n return val\n }\n\n if (uniqueKey.includes('.')) {\n const deepVal = getObjectDeepValue(item, uniqueKey)\n if (isObjectKey(deepVal)) {\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 // 这是一个比较特定的检查,检查是否 *没有* 'result' 属性且是对象\n // 原逻辑保留,但通常 API 响应应该包含 result\n return !Object.prototype.hasOwnProperty.call(data, 'result')\n}\n\nexport const generateDefaultField = <T = any>(\n opts: Partial<DefaultField<T>> = {}\n): DefaultField<T> => ({\n result: [] as unknown as T, // 默认为空数组,但强制转换为泛型 T\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 = <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) {\n return result\n }\n // 强制转换为 Record 以便遍历\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 const len = filteredKeys.length\n for (let i = 0; i < len; i++) {\n const key = filteredKeys[i]\n const value = queryObj[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 || (isArray(keys) && keys.length === 0)) {\n return field\n }\n\n const keysArr = isArray(keys) ? keys : keys.split('.')\n let result: any = 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 // 这里不再严格检查 isKeyMap,因为只要是对象就可以取值\n result = result[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 if (!lastKey) return\n\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 const currentVal = current[key]\n if (currentVal == null || typeof currentVal !== 'object') {\n current[key] = {}\n }\n const next = current[key]\n if (isKeyMap(next)) {\n current = next\n } else {\n return\n }\n }\n\n if (current != null && typeof current === 'object') {\n current[lastKey] = value\n }\n}\n\nexport const searchValueByKey = (\n result: any[] | Record<string, any>,\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 if (isResultObject(result)) {\n return result[String(id)]\n }\n return undefined\n}\n\nexport const computeMatchedItemIndex = (\n itemId: ObjectKey,\n fieldArr: any[],\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 (!isKeyMap(item)) 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: any[],\n value: any[] | 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 (!isKeyMap(item)) 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 (!isKeyMap(col)) continue\n const stringifyId = String(getObjectDeepValue(col, changingKey))\n\n const index = fieldArrayMap.get(stringifyId)\n\n if (index !== undefined) {\n const existingItem = fieldArray[index]\n if (isKeyMap(existingItem)) {\n Object.assign(existingItem, col)\n }\n }\n }\n } else if (isKeyMap(value)) {\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 (!isKeyMap(col)) continue\n\n const index = fieldArrayMap.get(uniqueId)\n\n if (index !== undefined) {\n const existingItem = fieldArray[index]\n if (isKeyMap(existingItem)) {\n Object.assign(existingItem, col)\n }\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 const fieldAny = field as any // 为了动态赋值,暂时断言为 any\n\n if (type === ENUM.FETCH_TYPE.PAGINATION) {\n fieldAny[key] = value\n return\n }\n\n if (key !== ENUM.FIELD_DATA.RESULT_KEY) {\n if (isArray(value)) {\n const current = fieldAny[key]\n const currentArr = isArray(current) ? current : []\n const newValue = insertBefore\n ? [...value, ...currentArr]\n : [...currentArr, ...value]\n fieldAny[key] = newValue\n } else {\n fieldAny[key] = value\n }\n return\n }\n\n // Handle Result Logic\n const resultField = field.result\n const valueObj = value as KeyMap\n\n if (isArray(value)) {\n const currentArr = isArray(resultField) ? resultField : []\n const valueArr = value as KeyMap[]\n\n if (insertBefore) {\n if (valueArr.length === 0) return\n if (currentArr.length === 0) {\n field.result = valueArr as any\n return\n }\n field.result = valueArr.concat(currentArr) as any\n } else {\n if (valueArr.length === 0) return\n if (currentArr.length === 0) {\n field.result = valueArr as any\n return\n }\n field.result = currentArr.concat(valueArr) as any\n }\n return\n }\n\n // Handle Object Result Logic\n let target = resultField as Record<string, any>\n if (isArray(resultField)) {\n target = {}\n field.result = target as any\n } else if (typeof resultField !== 'object' || resultField === null) {\n target = {}\n field.result = target as any\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 (isKeyMap(data)) {\n let acc = 0\n const values = Object.values(data)\n const len = values.length\n for (let i = 0; i < len; i++) {\n const val = values[i]\n if (isArray(val)) {\n acc += val.length\n }\n }\n return acc\n }\n return 0\n}\n\nconst getSeenIdsString = (arr: any[], 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 is_up = false,\n type\n}: GenerateParamsType): GenerateParamsResp => {\n const result: GenerateParamsResp = { ...query }\n const isFetched = field.fetched\n const fieldResultAny = field.result as any // 内部逻辑断言\n\n const getSafeObjectKey = (item: unknown): ObjectKey | undefined => {\n return extractUniqueKey(item as KeyMap, uniqueKey)\n }\n\n if (isFetched) {\n if (type === ENUM.FETCH_TYPE.AUTO) {\n if (isArray(fieldResultAny)) {\n result.seen_ids = getSeenIdsString(fieldResultAny, uniqueKey)\n const targetIndex = is_up ? 0 : fieldResultAny.length - 1\n const targetItem = fieldResultAny[targetIndex]\n result.since_id = getSafeObjectKey(targetItem)\n }\n result.is_up = 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(fieldResultAny)) {\n result.seen_ids = getSeenIdsString(fieldResultAny, uniqueKey)\n }\n } else if (type === ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID) {\n if (isArray(fieldResultAny)) {\n const targetIndex = is_up ? 0 : fieldResultAny.length - 1\n const targetItem = fieldResultAny[targetIndex]\n result.since_id = getSafeObjectKey(targetItem)\n }\n result.is_up = 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 = isObjectKey(query.sinceId) ? query.sinceId : ''\n result.is_up = 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 = isObjectKey(query.sinceId) ? query.sinceId : ''\n result.is_up = 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\nexport const toObjectKey = (\n id: ObjectKey | ObjectKey[] | undefined\n): ObjectKey | undefined => {\n if (id === undefined) return undefined\n if (isObjectKey(id)) return id\n if (isObjectKeyArray(id) && id.length > 0) return id[0]\n return undefined\n}\n\nexport const getResultAsArray = (field: DefaultField): any[] | null => {\n const result = field[ENUM.FIELD_DATA.RESULT_KEY]\n return isArray(result) ? result : null\n}\n\nexport const updateArrayItem = (\n arr: any[],\n index: number,\n updater: (item: KeyMap) => KeyMap\n): void => {\n if (index >= 0 && index < arr.length) {\n const item = arr[index]\n if (isKeyMap(item)) {\n arr[index] = updater(item)\n }\n }\n}\n","// setters.ts\nimport ENUM from './enum'\nimport {\n computeResultLength,\n isObjectResult,\n setReactivityField\n} from './utils'\n\nimport type { BaseApiResponse, SetDataType, SetErrorType } 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 // 强制类型转换以进行写入\n const field = fieldData\n\n let result: any\n let extra: unknown\n\n if (isObjectResult(data)) {\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: () => {\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","import ENUM from './enum'\nimport { SET_DATA, SET_ERROR } from './setters'\nimport {\n combineArrayData,\n computeMatchedItemIndex,\n computeResultLength,\n generateDefaultField,\n generateRequestParams,\n getObjectDeepValue,\n getResultAsArray,\n isArray,\n isKeyMap,\n isKeyMapArray,\n isObjectKey,\n isObjectKeyArray,\n searchValueByKey,\n stableSerialize,\n toObjectKey,\n updateArrayItem,\n updateObjectDeepValue\n} from './utils'\n\nimport type {\n ApiContract,\n BaseApiResponse,\n DefaultField,\n FetchType,\n InitDataType,\n InitStateType,\n KeyMap,\n LoadMoreType,\n ObjectKey,\n RequestParams,\n UpdateStateType\n} from './types'\n\n// --- 辅助函数:生成字段名 ---\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// --- API 构造器 ---\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// --- 核心 Action: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// --- 核心 Action: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// --- 核心 Action: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 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\n// --- 核心 Action:updateState ---\nexport const updateState = <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 _id = id\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 const newFieldData: DefaultField = { ...fieldData }\n const resultArray = getResultAsArray(newFieldData)\n\n if (method === ENUM.CHANGE_TYPE.SEARCH_FIELD) {\n const objectKeyId = toObjectKey(_id)\n if (objectKeyId === undefined) {\n reject(new Error('ID is required for SEARCH_FIELD.'))\n return\n }\n const searchResult = resultArray\n ? searchValueByKey(resultArray, objectKeyId, _uniqueKey)\n : undefined\n resolve(searchResult)\n return // 搜索操作不需要更新状态\n } else if (method === ENUM.CHANGE_TYPE.RESULT_UPDATE_KV) {\n const objectKeyId = toObjectKey(_id)\n if (objectKeyId === undefined) {\n reject(new Error('ID is required for RESULT_UPDATE_KV.'))\n return\n }\n if (resultArray) {\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n resultArray,\n _uniqueKey\n )\n if (matchedIndex >= 0 && isKeyMap(resultArray[matchedIndex])) {\n updateObjectDeepValue(resultArray[matchedIndex], _changeKey, value)\n }\n }\n resolve(null)\n } else if (method === ENUM.CHANGE_TYPE.RESULT_ITEM_MERGE) {\n const objectKeyId = toObjectKey(_id)\n if (objectKeyId === undefined) {\n reject(new Error('ID is required for RESULT_ITEM_MERGE.'))\n return\n }\n if (resultArray && isKeyMap(value)) {\n const matchedIndex = computeMatchedItemIndex(\n objectKeyId,\n resultArray,\n _uniqueKey\n )\n updateArrayItem(resultArray, matchedIndex, (item) => ({\n ...item,\n ...value\n }))\n }\n resolve(null)\n } else if (method === ENUM.CHANGE_TYPE.RESET_FIELD) {\n // 使用特定字段更新而不是通用 KeyMap\n if (_changeKey === ENUM.FIELD_DATA.RESULT_KEY && isKeyMapArray(value)) {\n newFieldData.result = value\n } else if (_changeKey === ENUM.FIELD_DATA.EXTRA_KEY && isKeyMap(value)) {\n newFieldData.extra = value\n }\n resolve(null)\n } else {\n // 获取要修改的值\n let modifyValue: unknown\n if (_changeKey === ENUM.FIELD_DATA.RESULT_KEY) {\n modifyValue = newFieldData.result\n } else if (_changeKey === ENUM.FIELD_DATA.EXTRA_KEY) {\n modifyValue = newFieldData.extra\n } else {\n modifyValue = getObjectDeepValue(newFieldData, _changeKey)\n }\n if (modifyValue == null) {\n modifyValue = []\n }\n\n const objectKeyId = toObjectKey(_id)\n const matchedIndex =\n objectKeyId !== undefined && isKeyMapArray(modifyValue)\n ? computeMatchedItemIndex(objectKeyId, modifyValue, _uniqueKey)\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 (isKeyMapArray(modifyValue)) {\n if (matchedIndex >= 0) {\n modifyValue.splice(matchedIndex, 1)\n } else if (isObjectKeyArray(_id)) {\n const idSet = new Set<ObjectKey>(_id)\n modifyValue = modifyValue.filter((item) => {\n const itemKey = getObjectDeepValue(item, _uniqueKey)\n return !isObjectKey(itemKey) || !idSet.has(itemKey)\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 (isKeyMapArray(modifyValue)) {\n if (isKeyMapArray(value)) {\n combineArrayData(modifyValue, value, _uniqueKey)\n } else if (isKeyMap(value)) {\n // value 是 KeyMap,需要检查是否为 Record<ObjectKey, KeyMap>\n const valueAsRecord: Record<ObjectKey, KeyMap> = {}\n for (const [k, v] of Object.entries(value)) {\n if (isKeyMap(v)) {\n valueAsRecord[k] = v\n }\n }\n combineArrayData(modifyValue, valueAsRecord, _uniqueKey)\n }\n }\n break\n default:\n resolve(null)\n return\n }\n // 更新对应字段的值\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 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":[],"names":[],"mappings":"","file":"index.mjs"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MutationHandler } from '../types.mjs';
|
|
2
|
+
|
|
3
|
+
declare const pushHandler: MutationHandler;
|
|
4
|
+
declare const unshiftHandler: MutationHandler;
|
|
5
|
+
declare const deleteHandler: MutationHandler;
|
|
6
|
+
declare const mergeHandler: MutationHandler;
|
|
7
|
+
declare const resetHandler: MutationHandler;
|
|
8
|
+
declare const coreMutations: Record<string, MutationHandler>;
|
|
9
|
+
|
|
10
|
+
export { coreMutations, deleteHandler, mergeHandler, pushHandler, resetHandler, unshiftHandler };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MutationHandler } from '../types.js';
|
|
2
|
+
|
|
3
|
+
declare const pushHandler: MutationHandler;
|
|
4
|
+
declare const unshiftHandler: MutationHandler;
|
|
5
|
+
declare const deleteHandler: MutationHandler;
|
|
6
|
+
declare const mergeHandler: MutationHandler;
|
|
7
|
+
declare const resetHandler: MutationHandler;
|
|
8
|
+
declare const coreMutations: Record<string, MutationHandler>;
|
|
9
|
+
|
|
10
|
+
export { coreMutations, deleteHandler, mergeHandler, pushHandler, resetHandler, unshiftHandler };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/constants.ts
|
|
4
|
+
var constants_default = {
|
|
5
|
+
CHANGE_TYPE: {
|
|
6
|
+
RESET_FIELD: "reset",
|
|
7
|
+
RESULT_ADD_AFTER: "push",
|
|
8
|
+
RESULT_ADD_BEFORE: "unshift",
|
|
9
|
+
RESULT_REMOVE_BY_ID: "delete",
|
|
10
|
+
RESULT_ITEM_MERGE: "merge"
|
|
11
|
+
},
|
|
12
|
+
FIELD_DATA: {
|
|
13
|
+
RESULT_KEY: "result",
|
|
14
|
+
EXTRA_KEY: "extra"
|
|
15
|
+
}};
|
|
16
|
+
|
|
17
|
+
// src/_internal/utils.ts
|
|
18
|
+
var isArray = (data) => Array.isArray(data);
|
|
19
|
+
var isObjectKey = (value) => typeof value === "string" || typeof value === "number";
|
|
20
|
+
var isKeyMap = (value) => typeof value === "object" && value !== null && !isArray(value);
|
|
21
|
+
var isKeyMapArray = (value) => isArray(value) && value.every((item) => typeof item === "object" && item !== null);
|
|
22
|
+
var isObjectKeyArray = (value) => isArray(value) && value.every((item) => typeof item === "string" || typeof item === "number");
|
|
23
|
+
var getObjectDeepValue = (field, keys) => {
|
|
24
|
+
if (!keys || isArray(keys) && keys.length === 0) return field;
|
|
25
|
+
const keysArr = isArray(keys) ? keys : keys.split(".");
|
|
26
|
+
let cur = field;
|
|
27
|
+
for (let i = 0; i < keysArr.length; i++) {
|
|
28
|
+
if (cur == null || typeof cur !== "object") return void 0;
|
|
29
|
+
cur = cur[keysArr[i]];
|
|
30
|
+
}
|
|
31
|
+
return cur;
|
|
32
|
+
};
|
|
33
|
+
var computeMatchedItemIndex = (itemId, fieldArr, changingKey) => {
|
|
34
|
+
const stringId = String(itemId);
|
|
35
|
+
for (let i = 0; i < fieldArr.length; i++) {
|
|
36
|
+
const item = fieldArr[i];
|
|
37
|
+
if (!isKeyMap(item)) continue;
|
|
38
|
+
const val = getObjectDeepValue(item, changingKey);
|
|
39
|
+
if (String(val) === stringId) return i;
|
|
40
|
+
}
|
|
41
|
+
return -1;
|
|
42
|
+
};
|
|
43
|
+
var toObjectKey = (id) => {
|
|
44
|
+
if (id === void 0) return void 0;
|
|
45
|
+
if (isObjectKey(id)) return id;
|
|
46
|
+
if (isObjectKeyArray(id) && id.length > 0) return id[0];
|
|
47
|
+
return void 0;
|
|
48
|
+
};
|
|
49
|
+
var updateArrayItem = (arr, index, updater) => {
|
|
50
|
+
if (index >= 0 && index < arr.length && isKeyMap(arr[index])) {
|
|
51
|
+
arr[index] = updater(arr[index]);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// src/mutations/core.ts
|
|
56
|
+
var pushHandler = (ctx) => {
|
|
57
|
+
if (!isArray(ctx.resultArray)) return;
|
|
58
|
+
return {
|
|
59
|
+
modifyValue: isArray(ctx.value) ? [...ctx.resultArray, ...ctx.value] : [...ctx.resultArray, ctx.value]
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
var unshiftHandler = (ctx) => {
|
|
63
|
+
if (!isArray(ctx.resultArray)) return;
|
|
64
|
+
return {
|
|
65
|
+
modifyValue: isArray(ctx.value) ? [...ctx.value, ...ctx.resultArray] : [ctx.value, ...ctx.resultArray]
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
var deleteHandler = (ctx) => {
|
|
69
|
+
if (!isKeyMapArray(ctx.resultArray)) return;
|
|
70
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
71
|
+
if (objectKeyId !== void 0) {
|
|
72
|
+
const matchedIndex = computeMatchedItemIndex(
|
|
73
|
+
objectKeyId,
|
|
74
|
+
ctx.resultArray,
|
|
75
|
+
ctx._uniqueKey
|
|
76
|
+
);
|
|
77
|
+
if (matchedIndex >= 0) {
|
|
78
|
+
const newArray = [...ctx.resultArray];
|
|
79
|
+
newArray.splice(matchedIndex, 1);
|
|
80
|
+
return { modifyValue: newArray };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (isObjectKeyArray(ctx._id)) {
|
|
84
|
+
const idSet = new Set(ctx._id);
|
|
85
|
+
return {
|
|
86
|
+
modifyValue: ctx.resultArray.filter((item) => {
|
|
87
|
+
const itemKey = getObjectDeepValue(item, ctx._uniqueKey);
|
|
88
|
+
return typeof itemKey !== "string" && typeof itemKey !== "number" ? true : !idSet.has(itemKey);
|
|
89
|
+
})
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return void 0;
|
|
93
|
+
};
|
|
94
|
+
var mergeHandler = (ctx) => {
|
|
95
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
96
|
+
if (objectKeyId === void 0 || !ctx.resultArray || !isKeyMap(ctx.value))
|
|
97
|
+
return;
|
|
98
|
+
const matchedIndex = computeMatchedItemIndex(
|
|
99
|
+
objectKeyId,
|
|
100
|
+
ctx.resultArray,
|
|
101
|
+
ctx._uniqueKey
|
|
102
|
+
);
|
|
103
|
+
updateArrayItem(ctx.resultArray, matchedIndex, (item) => ({
|
|
104
|
+
...item,
|
|
105
|
+
...ctx.value
|
|
106
|
+
}));
|
|
107
|
+
};
|
|
108
|
+
var resetHandler = (ctx) => {
|
|
109
|
+
if (ctx._changeKey === constants_default.FIELD_DATA.RESULT_KEY && isKeyMapArray(ctx.value)) {
|
|
110
|
+
ctx.newFieldData.result = ctx.value;
|
|
111
|
+
} else if (ctx._changeKey === constants_default.FIELD_DATA.EXTRA_KEY && isKeyMap(ctx.value)) {
|
|
112
|
+
ctx.newFieldData.extra = ctx.value;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var coreMutations = {
|
|
116
|
+
[constants_default.CHANGE_TYPE.RESULT_ADD_AFTER]: pushHandler,
|
|
117
|
+
[constants_default.CHANGE_TYPE.RESULT_ADD_BEFORE]: unshiftHandler,
|
|
118
|
+
[constants_default.CHANGE_TYPE.RESULT_REMOVE_BY_ID]: deleteHandler,
|
|
119
|
+
[constants_default.CHANGE_TYPE.RESULT_ITEM_MERGE]: mergeHandler,
|
|
120
|
+
[constants_default.CHANGE_TYPE.RESET_FIELD]: resetHandler
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
exports.coreMutations = coreMutations;
|
|
124
|
+
exports.deleteHandler = deleteHandler;
|
|
125
|
+
exports.mergeHandler = mergeHandler;
|
|
126
|
+
exports.pushHandler = pushHandler;
|
|
127
|
+
exports.resetHandler = resetHandler;
|
|
128
|
+
exports.unshiftHandler = unshiftHandler;
|
|
129
|
+
//# sourceMappingURL=core.js.map
|
|
130
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/constants.ts","../../src/_internal/utils.ts","../../src/mutations/core.ts"],"names":[],"mappings":"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","file":"core.js","sourcesContent":["// constants.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","// _internal/utils.ts\nimport ENUM from '../constants'\nimport type {\n DefaultField,\n FetchType,\n FieldKeys,\n GenerateParamsResp,\n GenerateParamsType,\n KeyMap,\n ObjectKey\n} from '../types'\n\n// ========== 类型守卫 ==========\n\nexport const isArray = (data: unknown): data is any[] => Array.isArray(data)\n\nexport const isObjectKey = (value: unknown): value is ObjectKey =>\n typeof value === 'string' || typeof value === 'number'\n\nexport const isKeyMap = (value: unknown): value is KeyMap =>\n typeof value === 'object' && value !== null && !isArray(value)\n\nexport const isKeyMapArray = (value: unknown): value is KeyMap[] =>\n isArray(value) &&\n value.every((item) => typeof item === 'object' && item !== null)\n\nexport const isObjectKeyArray = (value: unknown): value is ObjectKey[] =>\n isArray(value) &&\n value.every((item) => typeof item === 'string' || typeof item === 'number')\n\n// ========== 序列化 ==========\n\nexport const stableSerialize = (value: unknown): string => {\n if (value === null || typeof value !== 'object') return String(value)\n try {\n if (isArray(value)) return JSON.stringify(value)\n return JSON.stringify(\n Object.fromEntries(\n Object.entries(value as Record<string, unknown>).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n )\n )\n } catch {\n return '[Circular]'\n }\n}\n\n// ========== 深度访问 ==========\n\nexport const getObjectDeepValue = (\n field: unknown,\n keys: string | string[]\n): unknown => {\n if (!keys || (isArray(keys) && keys.length === 0)) return field\n const keysArr = isArray(keys) ? keys : (keys as string).split('.')\n let cur: any = field\n for (let i = 0; i < keysArr.length; i++) {\n if (cur == null || typeof cur !== 'object') return undefined\n cur = cur[keysArr[i]]\n }\n return cur\n}\n\nexport const updateObjectDeepValue = (\n field: KeyMap,\n changeKey: string,\n value: unknown\n): void => {\n const keys = changeKey.split('.')\n const lastKey = keys.pop()\n if (!lastKey) return\n\n let current: KeyMap = field\n for (const key of keys) {\n if (current[key] == null || typeof current[key] !== 'object') {\n current[key] = {}\n }\n if (!isKeyMap(current[key])) return\n current = current[key] as KeyMap\n }\n current[lastKey] = value\n}\n\n// ========== uniqueKey 提取 ==========\n\nconst extractUniqueKey = (\n item: KeyMap,\n uniqueKey: string\n): ObjectKey | undefined => {\n if (!isKeyMap(item)) return undefined\n const val = item[uniqueKey]\n if (isObjectKey(val)) return val\n if (uniqueKey.includes('.')) {\n const deepVal = getObjectDeepValue(item, uniqueKey)\n if (isObjectKey(deepVal)) return deepVal\n }\n return undefined\n}\n\n// ========== 核心工具 ==========\n\nexport const generateDefaultField = <T = any>(\n opts: Partial<DefaultField<T>> = {}\n): DefaultField<T> => ({\n result: [] as unknown as T,\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 computeMatchedItemIndex = (\n itemId: ObjectKey,\n fieldArr: any[],\n changingKey: string\n): number => {\n const stringId = String(itemId)\n for (let i = 0; i < fieldArr.length; i++) {\n const item = fieldArr[i]\n if (!isKeyMap(item)) continue\n const val = getObjectDeepValue(item, changingKey)\n if (String(val) === stringId) return i\n }\n return -1\n}\n\nexport const computeResultLength = (data: unknown): number => {\n if (isArray(data)) return data.length\n return 0\n}\n\nexport const toObjectKey = (\n id: ObjectKey | ObjectKey[] | undefined\n): ObjectKey | undefined => {\n if (id === undefined) return undefined\n if (isObjectKey(id)) return id\n if (isObjectKeyArray(id) && id.length > 0) return id[0]\n return undefined\n}\n\nexport const getResultAsArray = (field: DefaultField): any[] | null => {\n const result = field[ENUM.FIELD_DATA.RESULT_KEY]\n return isArray(result) ? result : null\n}\n\nexport const updateArrayItem = (\n arr: any[],\n index: number,\n updater: (item: KeyMap) => KeyMap\n): void => {\n if (index >= 0 && index < arr.length && isKeyMap(arr[index])) {\n arr[index] = updater(arr[index])\n }\n}\n\n// ========== 搜索 ==========\n\nexport const searchValueByKey = (\n result: any[] | Record<string, any>,\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 if (isKeyMap(result)) return result[String(id)]\n return undefined\n}\n\n// ========== 批量合并 ==========\n\nexport const combineArrayData = (\n fieldArray: any[],\n value: any[] | Record<ObjectKey, KeyMap>,\n changingKey: string\n): void => {\n const indexMap = new Map<string, number>()\n for (let i = 0; i < fieldArray.length; i++) {\n const item = fieldArray[i]\n if (!isKeyMap(item)) continue\n const id = getObjectDeepValue(item, changingKey)\n if (id !== undefined) indexMap.set(String(id), i)\n }\n\n const mergeItem = (uniqueId: string, col: KeyMap) => {\n const index = indexMap.get(uniqueId)\n if (index !== undefined && isKeyMap(fieldArray[index])) {\n fieldArray[index] = { ...fieldArray[index], ...col }\n }\n }\n\n if (isArray(value)) {\n for (const col of value) {\n if (!isKeyMap(col)) continue\n mergeItem(String(getObjectDeepValue(col, changingKey)), col)\n }\n } else if (isKeyMap(value)) {\n for (const [uniqueId, col] of Object.entries(value)) {\n if (isKeyMap(col)) mergeItem(uniqueId, col)\n }\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 const fieldAny = field as any\n\n // 分页模式直接赋值\n if (type === ENUM.FETCH_TYPE.PAGINATION) {\n fieldAny[key] = value\n return\n }\n\n // 非 result 字段\n if (key !== ENUM.FIELD_DATA.RESULT_KEY) {\n if (isArray(value)) {\n const current = isArray(fieldAny[key]) ? fieldAny[key] : []\n fieldAny[key] = insertBefore\n ? [...(value as any[]), ...current]\n : [...current, ...(value as any[])]\n } else {\n fieldAny[key] = value\n }\n return\n }\n\n // result 字段 — 数组\n if (isArray(value)) {\n if ((value as any[]).length === 0) return\n const current = isArray(field.result) ? (field.result as any[]) : []\n if (current.length === 0) {\n field.result = value as any\n return\n }\n field.result = (\n insertBefore\n ? [...(value as any[]), ...current]\n : [...current, ...(value as any[])]\n ) as any\n return\n }\n\n // result 字段 — 对象(按 key 分组场景)\n const valueObj = value as KeyMap\n let target = field.result as Record<string, any>\n if (\n isArray(field.result) ||\n typeof field.result !== 'object' ||\n field.result === null\n ) {\n target = {}\n field.result = target as any\n }\n\n for (const subKey of Object.keys(valueObj)) {\n const existing = target[subKey]\n const incoming = valueObj[subKey]\n if (existing !== undefined && isArray(existing) && isArray(incoming)) {\n target[subKey] = insertBefore\n ? [...incoming, ...existing]\n : [...existing, ...incoming]\n } else {\n target[subKey] = incoming\n }\n }\n}\n\n// ========== 请求参数生成 ==========\n\nconst getSeenIdsString = (arr: any[], uniqueKey: string): string => {\n if (!isArray(arr)) return ''\n const ids: ObjectKey[] = []\n for (const item of arr) {\n const id = extractUniqueKey(item, uniqueKey)\n if (id !== undefined) ids.push(id)\n }\n return ids.join(',')\n}\n\nexport const generateRequestParams = ({\n field,\n uniqueKey = ENUM.DEFAULT_UNIQUE_KEY_NAME,\n query = {},\n is_up = false,\n type\n}: GenerateParamsType): GenerateParamsResp => {\n const result: GenerateParamsResp = { ...query }\n const isFetched = field.fetched\n const fieldResult = field.result as any\n\n const getSafeObjectKey = (item: unknown): ObjectKey | undefined =>\n extractUniqueKey(item as KeyMap, uniqueKey)\n\n if (isFetched) {\n switch (type) {\n case ENUM.FETCH_TYPE.AUTO:\n if (isArray(fieldResult)) {\n result.seen_ids = getSeenIdsString(fieldResult, uniqueKey)\n result.since_id = getSafeObjectKey(\n fieldResult[is_up ? 0 : fieldResult.length - 1]\n )\n }\n result.is_up = is_up ? 1 : 0\n result.page =\n typeof query.page === 'number' ? query.page : field.page + 1\n break\n case ENUM.FETCH_TYPE.HAS_LOADED_IDS:\n if (isArray(fieldResult)) {\n result.seen_ids = getSeenIdsString(fieldResult, uniqueKey)\n }\n break\n case ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID:\n if (isArray(fieldResult)) {\n result.since_id = getSafeObjectKey(\n fieldResult[is_up ? 0 : fieldResult.length - 1]\n )\n }\n result.is_up = is_up ? 1 : 0\n break\n case ENUM.FETCH_TYPE.PAGINATION:\n result.page = typeof query.page === 'number' ? query.page : undefined\n break\n case ENUM.FETCH_TYPE.SCROLL_LOAD_MORE:\n result.page = field.page + 1\n break\n }\n } else {\n switch (type) {\n case ENUM.FETCH_TYPE.AUTO:\n result.seen_ids = ''\n result.since_id = isObjectKey(query.sinceId) ? query.sinceId : ''\n result.is_up = is_up ? 1 : 0\n result.page =\n typeof query.page === 'number' ? query.page : field.page || 1\n break\n case ENUM.FETCH_TYPE.HAS_LOADED_IDS:\n result.seen_ids = ''\n break\n case ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID:\n result.since_id = isObjectKey(query.sinceId) ? query.sinceId : ''\n result.is_up = is_up ? 1 : 0\n break\n case ENUM.FETCH_TYPE.PAGINATION:\n result.page = typeof query.page === 'number' ? query.page : field.page\n break\n case ENUM.FETCH_TYPE.SCROLL_LOAD_MORE:\n result.page = 1\n break\n }\n }\n\n return result\n}\n","// 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 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"core.mjs"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MutationHandler } from '../types.mjs';
|
|
2
|
+
|
|
3
|
+
declare const searchHandler: MutationHandler;
|
|
4
|
+
declare const updateKVHandler: MutationHandler;
|
|
5
|
+
declare const insertBeforeHandler: MutationHandler;
|
|
6
|
+
declare const insertAfterHandler: MutationHandler;
|
|
7
|
+
declare const patchHandler: MutationHandler;
|
|
8
|
+
declare const extendedMutations: Record<string, MutationHandler>;
|
|
9
|
+
|
|
10
|
+
export { extendedMutations, insertAfterHandler, insertBeforeHandler, patchHandler, searchHandler, updateKVHandler };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MutationHandler } from '../types.js';
|
|
2
|
+
|
|
3
|
+
declare const searchHandler: MutationHandler;
|
|
4
|
+
declare const updateKVHandler: MutationHandler;
|
|
5
|
+
declare const insertBeforeHandler: MutationHandler;
|
|
6
|
+
declare const insertAfterHandler: MutationHandler;
|
|
7
|
+
declare const patchHandler: MutationHandler;
|
|
8
|
+
declare const extendedMutations: Record<string, MutationHandler>;
|
|
9
|
+
|
|
10
|
+
export { extendedMutations, insertAfterHandler, insertBeforeHandler, patchHandler, searchHandler, updateKVHandler };
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/constants.ts
|
|
4
|
+
var constants_default = {
|
|
5
|
+
CHANGE_TYPE: {
|
|
6
|
+
SEARCH_FIELD: "search",
|
|
7
|
+
RESULT_UPDATE_KV: "update",
|
|
8
|
+
RESULT_INSERT_TO_BEFORE: "insert-before",
|
|
9
|
+
RESULT_INSERT_TO_AFTER: "insert-after",
|
|
10
|
+
RESULT_LIST_MERGE: "patch"}};
|
|
11
|
+
|
|
12
|
+
// src/_internal/utils.ts
|
|
13
|
+
var isArray = (data) => Array.isArray(data);
|
|
14
|
+
var isObjectKey = (value) => typeof value === "string" || typeof value === "number";
|
|
15
|
+
var isKeyMap = (value) => typeof value === "object" && value !== null && !isArray(value);
|
|
16
|
+
var isKeyMapArray = (value) => isArray(value) && value.every((item) => typeof item === "object" && item !== null);
|
|
17
|
+
var isObjectKeyArray = (value) => isArray(value) && value.every((item) => typeof item === "string" || typeof item === "number");
|
|
18
|
+
var getObjectDeepValue = (field, keys) => {
|
|
19
|
+
if (!keys || isArray(keys) && keys.length === 0) return field;
|
|
20
|
+
const keysArr = isArray(keys) ? keys : keys.split(".");
|
|
21
|
+
let cur = field;
|
|
22
|
+
for (let i = 0; i < keysArr.length; i++) {
|
|
23
|
+
if (cur == null || typeof cur !== "object") return void 0;
|
|
24
|
+
cur = cur[keysArr[i]];
|
|
25
|
+
}
|
|
26
|
+
return cur;
|
|
27
|
+
};
|
|
28
|
+
var updateObjectDeepValue = (field, changeKey, value) => {
|
|
29
|
+
const keys = changeKey.split(".");
|
|
30
|
+
const lastKey = keys.pop();
|
|
31
|
+
if (!lastKey) return;
|
|
32
|
+
let current = field;
|
|
33
|
+
for (const key of keys) {
|
|
34
|
+
if (current[key] == null || typeof current[key] !== "object") {
|
|
35
|
+
current[key] = {};
|
|
36
|
+
}
|
|
37
|
+
if (!isKeyMap(current[key])) return;
|
|
38
|
+
current = current[key];
|
|
39
|
+
}
|
|
40
|
+
current[lastKey] = value;
|
|
41
|
+
};
|
|
42
|
+
var computeMatchedItemIndex = (itemId, fieldArr, changingKey) => {
|
|
43
|
+
const stringId = String(itemId);
|
|
44
|
+
for (let i = 0; i < fieldArr.length; i++) {
|
|
45
|
+
const item = fieldArr[i];
|
|
46
|
+
if (!isKeyMap(item)) continue;
|
|
47
|
+
const val = getObjectDeepValue(item, changingKey);
|
|
48
|
+
if (String(val) === stringId) return i;
|
|
49
|
+
}
|
|
50
|
+
return -1;
|
|
51
|
+
};
|
|
52
|
+
var toObjectKey = (id) => {
|
|
53
|
+
if (id === void 0) return void 0;
|
|
54
|
+
if (isObjectKey(id)) return id;
|
|
55
|
+
if (isObjectKeyArray(id) && id.length > 0) return id[0];
|
|
56
|
+
return void 0;
|
|
57
|
+
};
|
|
58
|
+
var searchValueByKey = (result, id, key) => {
|
|
59
|
+
if (isArray(result)) {
|
|
60
|
+
const index = computeMatchedItemIndex(id, result, key);
|
|
61
|
+
return index >= 0 ? result[index] : void 0;
|
|
62
|
+
}
|
|
63
|
+
if (isKeyMap(result)) return result[String(id)];
|
|
64
|
+
return void 0;
|
|
65
|
+
};
|
|
66
|
+
var combineArrayData = (fieldArray, value, changingKey) => {
|
|
67
|
+
const indexMap = /* @__PURE__ */ new Map();
|
|
68
|
+
for (let i = 0; i < fieldArray.length; i++) {
|
|
69
|
+
const item = fieldArray[i];
|
|
70
|
+
if (!isKeyMap(item)) continue;
|
|
71
|
+
const id = getObjectDeepValue(item, changingKey);
|
|
72
|
+
if (id !== void 0) indexMap.set(String(id), i);
|
|
73
|
+
}
|
|
74
|
+
const mergeItem = (uniqueId, col) => {
|
|
75
|
+
const index = indexMap.get(uniqueId);
|
|
76
|
+
if (index !== void 0 && isKeyMap(fieldArray[index])) {
|
|
77
|
+
fieldArray[index] = { ...fieldArray[index], ...col };
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
if (isArray(value)) {
|
|
81
|
+
for (const col of value) {
|
|
82
|
+
if (!isKeyMap(col)) continue;
|
|
83
|
+
mergeItem(String(getObjectDeepValue(col, changingKey)), col);
|
|
84
|
+
}
|
|
85
|
+
} else if (isKeyMap(value)) {
|
|
86
|
+
for (const [uniqueId, col] of Object.entries(value)) {
|
|
87
|
+
if (isKeyMap(col)) mergeItem(uniqueId, col);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// src/mutations/extended.ts
|
|
93
|
+
var searchHandler = (ctx) => {
|
|
94
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
95
|
+
if (objectKeyId === void 0) return;
|
|
96
|
+
const searchResult = ctx.resultArray ? searchValueByKey(ctx.resultArray, objectKeyId, ctx._uniqueKey) : void 0;
|
|
97
|
+
return { resolved: searchResult };
|
|
98
|
+
};
|
|
99
|
+
var updateKVHandler = (ctx) => {
|
|
100
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
101
|
+
if (objectKeyId === void 0 || !ctx.resultArray) return;
|
|
102
|
+
const matchedIndex = computeMatchedItemIndex(
|
|
103
|
+
objectKeyId,
|
|
104
|
+
ctx.resultArray,
|
|
105
|
+
ctx._uniqueKey
|
|
106
|
+
);
|
|
107
|
+
if (matchedIndex >= 0 && isKeyMap(ctx.resultArray[matchedIndex])) {
|
|
108
|
+
const newItem = { ...ctx.resultArray[matchedIndex] };
|
|
109
|
+
updateObjectDeepValue(newItem, ctx._changeKey, ctx.value);
|
|
110
|
+
ctx.resultArray[matchedIndex] = newItem;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
var insertBeforeHandler = (ctx) => {
|
|
114
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
115
|
+
if (!isArray(ctx.resultArray) || objectKeyId === void 0) return void 0;
|
|
116
|
+
const matchedIndex = computeMatchedItemIndex(
|
|
117
|
+
objectKeyId,
|
|
118
|
+
ctx.resultArray,
|
|
119
|
+
ctx._uniqueKey
|
|
120
|
+
);
|
|
121
|
+
if (matchedIndex >= 0) {
|
|
122
|
+
const newArray = [...ctx.resultArray];
|
|
123
|
+
newArray.splice(matchedIndex, 0, ctx.value);
|
|
124
|
+
return { modifyValue: newArray };
|
|
125
|
+
}
|
|
126
|
+
return void 0;
|
|
127
|
+
};
|
|
128
|
+
var insertAfterHandler = (ctx) => {
|
|
129
|
+
const objectKeyId = toObjectKey(ctx._id);
|
|
130
|
+
if (!isArray(ctx.resultArray) || objectKeyId === void 0) return void 0;
|
|
131
|
+
const matchedIndex = computeMatchedItemIndex(
|
|
132
|
+
objectKeyId,
|
|
133
|
+
ctx.resultArray,
|
|
134
|
+
ctx._uniqueKey
|
|
135
|
+
);
|
|
136
|
+
if (matchedIndex >= 0) {
|
|
137
|
+
const newArray = [...ctx.resultArray];
|
|
138
|
+
newArray.splice(matchedIndex + 1, 0, ctx.value);
|
|
139
|
+
return { modifyValue: newArray };
|
|
140
|
+
}
|
|
141
|
+
return void 0;
|
|
142
|
+
};
|
|
143
|
+
var patchHandler = (ctx) => {
|
|
144
|
+
if (!isKeyMapArray(ctx.resultArray)) return;
|
|
145
|
+
const newArray = [...ctx.resultArray];
|
|
146
|
+
if (isKeyMapArray(ctx.value)) {
|
|
147
|
+
combineArrayData(newArray, ctx.value, ctx._uniqueKey);
|
|
148
|
+
} else if (isKeyMap(ctx.value)) {
|
|
149
|
+
const valueAsRecord = {};
|
|
150
|
+
for (const [k, v] of Object.entries(ctx.value)) {
|
|
151
|
+
if (isKeyMap(v)) valueAsRecord[k] = v;
|
|
152
|
+
}
|
|
153
|
+
combineArrayData(newArray, valueAsRecord, ctx._uniqueKey);
|
|
154
|
+
}
|
|
155
|
+
return { modifyValue: newArray };
|
|
156
|
+
};
|
|
157
|
+
var extendedMutations = {
|
|
158
|
+
[constants_default.CHANGE_TYPE.SEARCH_FIELD]: searchHandler,
|
|
159
|
+
[constants_default.CHANGE_TYPE.RESULT_UPDATE_KV]: updateKVHandler,
|
|
160
|
+
[constants_default.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE]: insertBeforeHandler,
|
|
161
|
+
[constants_default.CHANGE_TYPE.RESULT_INSERT_TO_AFTER]: insertAfterHandler,
|
|
162
|
+
[constants_default.CHANGE_TYPE.RESULT_LIST_MERGE]: patchHandler
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
exports.extendedMutations = extendedMutations;
|
|
166
|
+
exports.insertAfterHandler = insertAfterHandler;
|
|
167
|
+
exports.insertBeforeHandler = insertBeforeHandler;
|
|
168
|
+
exports.patchHandler = patchHandler;
|
|
169
|
+
exports.searchHandler = searchHandler;
|
|
170
|
+
exports.updateKVHandler = updateKVHandler;
|
|
171
|
+
//# sourceMappingURL=extended.js.map
|
|
172
|
+
//# sourceMappingURL=extended.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/constants.ts","../../src/_internal/utils.ts","../../src/mutations/extended.ts"],"names":[],"mappings":"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","file":"extended.js","sourcesContent":["// constants.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","// _internal/utils.ts\nimport ENUM from '../constants'\nimport type {\n DefaultField,\n FetchType,\n FieldKeys,\n GenerateParamsResp,\n GenerateParamsType,\n KeyMap,\n ObjectKey\n} from '../types'\n\n// ========== 类型守卫 ==========\n\nexport const isArray = (data: unknown): data is any[] => Array.isArray(data)\n\nexport const isObjectKey = (value: unknown): value is ObjectKey =>\n typeof value === 'string' || typeof value === 'number'\n\nexport const isKeyMap = (value: unknown): value is KeyMap =>\n typeof value === 'object' && value !== null && !isArray(value)\n\nexport const isKeyMapArray = (value: unknown): value is KeyMap[] =>\n isArray(value) &&\n value.every((item) => typeof item === 'object' && item !== null)\n\nexport const isObjectKeyArray = (value: unknown): value is ObjectKey[] =>\n isArray(value) &&\n value.every((item) => typeof item === 'string' || typeof item === 'number')\n\n// ========== 序列化 ==========\n\nexport const stableSerialize = (value: unknown): string => {\n if (value === null || typeof value !== 'object') return String(value)\n try {\n if (isArray(value)) return JSON.stringify(value)\n return JSON.stringify(\n Object.fromEntries(\n Object.entries(value as Record<string, unknown>).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n )\n )\n } catch {\n return '[Circular]'\n }\n}\n\n// ========== 深度访问 ==========\n\nexport const getObjectDeepValue = (\n field: unknown,\n keys: string | string[]\n): unknown => {\n if (!keys || (isArray(keys) && keys.length === 0)) return field\n const keysArr = isArray(keys) ? keys : (keys as string).split('.')\n let cur: any = field\n for (let i = 0; i < keysArr.length; i++) {\n if (cur == null || typeof cur !== 'object') return undefined\n cur = cur[keysArr[i]]\n }\n return cur\n}\n\nexport const updateObjectDeepValue = (\n field: KeyMap,\n changeKey: string,\n value: unknown\n): void => {\n const keys = changeKey.split('.')\n const lastKey = keys.pop()\n if (!lastKey) return\n\n let current: KeyMap = field\n for (const key of keys) {\n if (current[key] == null || typeof current[key] !== 'object') {\n current[key] = {}\n }\n if (!isKeyMap(current[key])) return\n current = current[key] as KeyMap\n }\n current[lastKey] = value\n}\n\n// ========== uniqueKey 提取 ==========\n\nconst extractUniqueKey = (\n item: KeyMap,\n uniqueKey: string\n): ObjectKey | undefined => {\n if (!isKeyMap(item)) return undefined\n const val = item[uniqueKey]\n if (isObjectKey(val)) return val\n if (uniqueKey.includes('.')) {\n const deepVal = getObjectDeepValue(item, uniqueKey)\n if (isObjectKey(deepVal)) return deepVal\n }\n return undefined\n}\n\n// ========== 核心工具 ==========\n\nexport const generateDefaultField = <T = any>(\n opts: Partial<DefaultField<T>> = {}\n): DefaultField<T> => ({\n result: [] as unknown as T,\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 computeMatchedItemIndex = (\n itemId: ObjectKey,\n fieldArr: any[],\n changingKey: string\n): number => {\n const stringId = String(itemId)\n for (let i = 0; i < fieldArr.length; i++) {\n const item = fieldArr[i]\n if (!isKeyMap(item)) continue\n const val = getObjectDeepValue(item, changingKey)\n if (String(val) === stringId) return i\n }\n return -1\n}\n\nexport const computeResultLength = (data: unknown): number => {\n if (isArray(data)) return data.length\n return 0\n}\n\nexport const toObjectKey = (\n id: ObjectKey | ObjectKey[] | undefined\n): ObjectKey | undefined => {\n if (id === undefined) return undefined\n if (isObjectKey(id)) return id\n if (isObjectKeyArray(id) && id.length > 0) return id[0]\n return undefined\n}\n\nexport const getResultAsArray = (field: DefaultField): any[] | null => {\n const result = field[ENUM.FIELD_DATA.RESULT_KEY]\n return isArray(result) ? result : null\n}\n\nexport const updateArrayItem = (\n arr: any[],\n index: number,\n updater: (item: KeyMap) => KeyMap\n): void => {\n if (index >= 0 && index < arr.length && isKeyMap(arr[index])) {\n arr[index] = updater(arr[index])\n }\n}\n\n// ========== 搜索 ==========\n\nexport const searchValueByKey = (\n result: any[] | Record<string, any>,\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 if (isKeyMap(result)) return result[String(id)]\n return undefined\n}\n\n// ========== 批量合并 ==========\n\nexport const combineArrayData = (\n fieldArray: any[],\n value: any[] | Record<ObjectKey, KeyMap>,\n changingKey: string\n): void => {\n const indexMap = new Map<string, number>()\n for (let i = 0; i < fieldArray.length; i++) {\n const item = fieldArray[i]\n if (!isKeyMap(item)) continue\n const id = getObjectDeepValue(item, changingKey)\n if (id !== undefined) indexMap.set(String(id), i)\n }\n\n const mergeItem = (uniqueId: string, col: KeyMap) => {\n const index = indexMap.get(uniqueId)\n if (index !== undefined && isKeyMap(fieldArray[index])) {\n fieldArray[index] = { ...fieldArray[index], ...col }\n }\n }\n\n if (isArray(value)) {\n for (const col of value) {\n if (!isKeyMap(col)) continue\n mergeItem(String(getObjectDeepValue(col, changingKey)), col)\n }\n } else if (isKeyMap(value)) {\n for (const [uniqueId, col] of Object.entries(value)) {\n if (isKeyMap(col)) mergeItem(uniqueId, col)\n }\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 const fieldAny = field as any\n\n // 分页模式直接赋值\n if (type === ENUM.FETCH_TYPE.PAGINATION) {\n fieldAny[key] = value\n return\n }\n\n // 非 result 字段\n if (key !== ENUM.FIELD_DATA.RESULT_KEY) {\n if (isArray(value)) {\n const current = isArray(fieldAny[key]) ? fieldAny[key] : []\n fieldAny[key] = insertBefore\n ? [...(value as any[]), ...current]\n : [...current, ...(value as any[])]\n } else {\n fieldAny[key] = value\n }\n return\n }\n\n // result 字段 — 数组\n if (isArray(value)) {\n if ((value as any[]).length === 0) return\n const current = isArray(field.result) ? (field.result as any[]) : []\n if (current.length === 0) {\n field.result = value as any\n return\n }\n field.result = (\n insertBefore\n ? [...(value as any[]), ...current]\n : [...current, ...(value as any[])]\n ) as any\n return\n }\n\n // result 字段 — 对象(按 key 分组场景)\n const valueObj = value as KeyMap\n let target = field.result as Record<string, any>\n if (\n isArray(field.result) ||\n typeof field.result !== 'object' ||\n field.result === null\n ) {\n target = {}\n field.result = target as any\n }\n\n for (const subKey of Object.keys(valueObj)) {\n const existing = target[subKey]\n const incoming = valueObj[subKey]\n if (existing !== undefined && isArray(existing) && isArray(incoming)) {\n target[subKey] = insertBefore\n ? [...incoming, ...existing]\n : [...existing, ...incoming]\n } else {\n target[subKey] = incoming\n }\n }\n}\n\n// ========== 请求参数生成 ==========\n\nconst getSeenIdsString = (arr: any[], uniqueKey: string): string => {\n if (!isArray(arr)) return ''\n const ids: ObjectKey[] = []\n for (const item of arr) {\n const id = extractUniqueKey(item, uniqueKey)\n if (id !== undefined) ids.push(id)\n }\n return ids.join(',')\n}\n\nexport const generateRequestParams = ({\n field,\n uniqueKey = ENUM.DEFAULT_UNIQUE_KEY_NAME,\n query = {},\n is_up = false,\n type\n}: GenerateParamsType): GenerateParamsResp => {\n const result: GenerateParamsResp = { ...query }\n const isFetched = field.fetched\n const fieldResult = field.result as any\n\n const getSafeObjectKey = (item: unknown): ObjectKey | undefined =>\n extractUniqueKey(item as KeyMap, uniqueKey)\n\n if (isFetched) {\n switch (type) {\n case ENUM.FETCH_TYPE.AUTO:\n if (isArray(fieldResult)) {\n result.seen_ids = getSeenIdsString(fieldResult, uniqueKey)\n result.since_id = getSafeObjectKey(\n fieldResult[is_up ? 0 : fieldResult.length - 1]\n )\n }\n result.is_up = is_up ? 1 : 0\n result.page =\n typeof query.page === 'number' ? query.page : field.page + 1\n break\n case ENUM.FETCH_TYPE.HAS_LOADED_IDS:\n if (isArray(fieldResult)) {\n result.seen_ids = getSeenIdsString(fieldResult, uniqueKey)\n }\n break\n case ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID:\n if (isArray(fieldResult)) {\n result.since_id = getSafeObjectKey(\n fieldResult[is_up ? 0 : fieldResult.length - 1]\n )\n }\n result.is_up = is_up ? 1 : 0\n break\n case ENUM.FETCH_TYPE.PAGINATION:\n result.page = typeof query.page === 'number' ? query.page : undefined\n break\n case ENUM.FETCH_TYPE.SCROLL_LOAD_MORE:\n result.page = field.page + 1\n break\n }\n } else {\n switch (type) {\n case ENUM.FETCH_TYPE.AUTO:\n result.seen_ids = ''\n result.since_id = isObjectKey(query.sinceId) ? query.sinceId : ''\n result.is_up = is_up ? 1 : 0\n result.page =\n typeof query.page === 'number' ? query.page : field.page || 1\n break\n case ENUM.FETCH_TYPE.HAS_LOADED_IDS:\n result.seen_ids = ''\n break\n case ENUM.FETCH_TYPE.SINCE_FIRST_OR_END_ID:\n result.since_id = isObjectKey(query.sinceId) ? query.sinceId : ''\n result.is_up = is_up ? 1 : 0\n break\n case ENUM.FETCH_TYPE.PAGINATION:\n result.page = typeof query.page === 'number' ? query.page : field.page\n break\n case ENUM.FETCH_TYPE.SCROLL_LOAD_MORE:\n result.page = 1\n break\n }\n }\n\n return result\n}\n","// 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,5 @@
|
|
|
1
|
+
export { extendedMutations, insertAfterHandler, insertBeforeHandler, patchHandler, searchHandler, updateKVHandler } from '../chunk-6WOZNOYJ.mjs';
|
|
2
|
+
import '../chunk-OKKMFSGF.mjs';
|
|
3
|
+
import '../chunk-PP7QTJDR.mjs';
|
|
4
|
+
//# sourceMappingURL=extended.mjs.map
|
|
5
|
+
//# sourceMappingURL=extended.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"extended.mjs"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MutationHandler, RequestParams, UpdateStateType } from '../types.mjs';
|
|
2
|
+
export { coreMutations } from './core.mjs';
|
|
3
|
+
export { extendedMutations } from './extended.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 创建 updateState 函数,可传入自定义 mutation handlers
|
|
7
|
+
*/
|
|
8
|
+
declare const createUpdateState: (handlers?: Record<string, MutationHandler>) => <P extends RequestParams, R>({ getter, setter, func, query, method, id, value, changeKey }: UpdateStateType<P, R>) => Promise<unknown>;
|
|
9
|
+
/**
|
|
10
|
+
* 默认 updateState(包含全部 10 种 mutation)
|
|
11
|
+
*/
|
|
12
|
+
declare const updateState: <P extends RequestParams, R>({ getter, setter, func, query, method, id, value, changeKey }: UpdateStateType<P, R>) => Promise<unknown>;
|
|
13
|
+
|
|
14
|
+
export { createUpdateState, updateState };
|