cogsbox-state 0.5.432 → 0.5.435

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/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import { create } from \"zustand\";\r\nimport { ulid } from \"ulid\";\r\nimport type {\r\n OptionsType,\r\n ReactivityType,\r\n StateKeys,\r\n SyncActionsType,\r\n SyncInfo,\r\n UpdateTypeDetail,\r\n} from \"./CogsState.js\";\r\n\r\ntype StateUpdater<StateValue> =\r\n | StateValue\r\n | ((prevValue: StateValue) => StateValue);\r\n\r\nexport type FreshValuesObject = {\r\n pathsToValues?: string[];\r\n prevValue?: any;\r\n newValue?: any;\r\n timeStamp: number;\r\n};\r\n\r\ntype SyncLogType = {\r\n timeStamp: number;\r\n};\r\ntype StateValue = any;\r\n\r\nexport type TrieNode = {\r\n subscribers: Set<string>;\r\n children: Map<string, TrieNode>;\r\n};\r\nexport type ComponentsType = {\r\n components: Map<\r\n string,\r\n {\r\n forceUpdate: () => void;\r\n paths: Set<string>;\r\n deps?: any[];\r\n depsFunction?: (state: any) => any[] | true;\r\n reactiveType: ReactivityType[] | ReactivityType;\r\n }\r\n >;\r\n};\r\nexport type FormRefStoreState = {\r\n formRefs: Map<string, React.RefObject<any>>;\r\n registerFormRef: (id: string, ref: React.RefObject<any>) => void;\r\n getFormRef: (id: string) => React.RefObject<any> | undefined;\r\n removeFormRef: (id: string) => void;\r\n // New method to get all refs for a stateKey\r\n getFormRefsByStateKey: (\r\n stateKey: string\r\n ) => Map<string, React.RefObject<any>>;\r\n};\r\n\r\nexport const formRefStore = create<FormRefStoreState>((set, get) => ({\r\n formRefs: new Map(),\r\n\r\n registerFormRef: (id, ref) =>\r\n set((state) => {\r\n const newRefs = new Map(state.formRefs);\r\n newRefs.set(id, ref);\r\n return { formRefs: newRefs };\r\n }),\r\n\r\n getFormRef: (id) => get().formRefs.get(id),\r\n\r\n removeFormRef: (id) =>\r\n set((state) => {\r\n const newRefs = new Map(state.formRefs);\r\n newRefs.delete(id);\r\n return { formRefs: newRefs };\r\n }),\r\n\r\n // Get all refs that start with the stateKey prefix\r\n getFormRefsByStateKey: (stateKey) => {\r\n const allRefs = get().formRefs;\r\n const stateKeyPrefix = stateKey + \".\";\r\n const filteredRefs = new Map();\r\n\r\n allRefs.forEach((ref, id) => {\r\n if (id.startsWith(stateKeyPrefix) || id === stateKey) {\r\n filteredRefs.set(id, ref);\r\n }\r\n });\r\n\r\n return filteredRefs;\r\n },\r\n}));\r\n\r\nexport type ShadowMetadata = {\r\n id: string;\r\n arrayKeys?: string[];\r\n virtualizer?: {\r\n itemHeight?: number;\r\n domRef?: HTMLElement | null;\r\n };\r\n syncInfo?: { status: string };\r\n lastUpdated?: number;\r\n};\r\nexport type CogsGlobalState = {\r\n // --- Shadow State and Subscription System ---\r\n shadowStateStore: Map<string, ShadowMetadata>;\r\n\r\n // These method signatures stay the same\r\n initializeShadowState: (key: string, initialState: any) => void;\r\n updateShadowAtPath: (key: string, path: string[], newValue: any) => void;\r\n insertShadowArrayElement: (\r\n key: string,\r\n arrayPath: string[],\r\n newItem: any\r\n ) => void;\r\n removeShadowArrayElement: (key: string, arrayPath: string[]) => void;\r\n getShadowMetadata: (\r\n key: string,\r\n path: string[]\r\n ) => ShadowMetadata | undefined;\r\n setShadowMetadata: (\r\n key: string,\r\n path: string[],\r\n metadata: Omit<ShadowMetadata, \"id\">\r\n ) => void;\r\n\r\n shadowStateSubscribers: Map<string, Set<() => void>>; // Stores subscribers for shadow state updates\r\n subscribeToShadowState: (key: string, callback: () => void) => () => void;\r\n\r\n selectedIndicesMap: Map<string, Map<string, number>>; // stateKey -> (parentPath -> selectedIndex)\r\n getSelectedIndex: (\r\n stateKey: string,\r\n parentPath: string\r\n ) => number | undefined;\r\n setSelectedIndex: (\r\n stateKey: string,\r\n parentPath: string,\r\n index: number | undefined\r\n ) => void;\r\n clearSelectedIndex: ({\r\n stateKey,\r\n path,\r\n }: {\r\n stateKey: string;\r\n path: string[];\r\n }) => void;\r\n clearSelectedIndexesForState: (stateKey: string) => void;\r\n\r\n // --- Core State and Updaters ---\r\n updaterState: { [key: string]: any };\r\n initialStateOptions: { [key: string]: OptionsType };\r\n cogsStateStore: { [key: string]: StateValue };\r\n isLoadingGlobal: { [key: string]: boolean };\r\n initialStateGlobal: { [key: string]: StateValue };\r\n iniitialCreatedState: { [key: string]: StateValue };\r\n serverState: { [key: string]: StateValue };\r\n\r\n getUpdaterState: (key: string) => StateUpdater<StateValue>;\r\n setUpdaterState: (key: string, newUpdater: any) => void;\r\n getKeyState: <StateKey extends StateKeys>(key: StateKey) => StateValue;\r\n getNestedState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n path: string[]\r\n ) => StateValue;\r\n setState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateUpdater<StateValue>\r\n ) => void;\r\n setInitialStates: (initialState: StateValue) => void;\r\n setCreatedState: (initialState: StateValue) => void;\r\n updateInitialStateGlobal: (key: string, newState: StateValue) => void;\r\n updateInitialCreatedState: (key: string, newState: StateValue) => void;\r\n setIsLoadingGlobal: (key: string, value: boolean) => void;\r\n setServerState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateValue\r\n ) => void;\r\n getInitialOptions: (key: string) => OptionsType | undefined;\r\n setInitialStateOptions: (key: string, value: OptionsType) => void;\r\n\r\n // --- Validation ---\r\n validationErrors: Map<string, string[]>;\r\n addValidationError: (path: string, message: string) => void;\r\n getValidationErrors: (path: string) => string[];\r\n removeValidationError: (path: string) => void;\r\n\r\n // --- Server Sync and Logging ---\r\n serverSyncActions: { [key: string]: SyncActionsType<any> };\r\n serverSyncLog: { [key: string]: SyncLogType[] };\r\n stateLog: { [key: string]: UpdateTypeDetail[] };\r\n syncInfoStore: Map<string, SyncInfo>;\r\n serverSideOrNot: { [key: string]: boolean };\r\n setServerSyncLog: (key: string, newValue: SyncLogType) => void;\r\n setServerSideOrNot: (key: string, value: boolean) => void;\r\n getServerSideOrNot: (key: string) => boolean | undefined;\r\n getThisLocalUpdate: (key: string) => UpdateTypeDetail[] | undefined;\r\n setServerSyncActions: (key: string, value: SyncActionsType<any>) => void;\r\n setStateLog: (\r\n key: string,\r\n updater: (prevUpdates: UpdateTypeDetail[]) => UpdateTypeDetail[]\r\n ) => void;\r\n setSyncInfo: (key: string, syncInfo: SyncInfo) => void;\r\n getSyncInfo: (key: string) => SyncInfo | null;\r\n\r\n // --- Component and DOM Integration ---\r\n signalDomElements: Map<\r\n string,\r\n Set<{\r\n instanceId: string;\r\n parentId: string;\r\n position: number;\r\n effect?: string;\r\n map?: string;\r\n }>\r\n >;\r\n addSignalElement: (\r\n signalId: string,\r\n elementInfo: {\r\n instanceId: string;\r\n parentId: string;\r\n position: number;\r\n effect?: string;\r\n map?: string;\r\n }\r\n ) => void;\r\n removeSignalElement: (signalId: string, instanceId: string) => void;\r\n stateComponents: Map<string, ComponentsType>;\r\n\r\n // --- Deprecated/Legacy (Review for removal) ---\r\n reRenderTriggerPrevValue: Record<string, any>;\r\n reactiveDeps: Record<\r\n string,\r\n {\r\n deps: any[];\r\n updaters: Set<() => void>;\r\n depsFunction: ((state: any) => any[] | true) | null;\r\n }\r\n >;\r\n setReactiveDeps: (\r\n key: string,\r\n record: {\r\n deps: any[];\r\n updaters: Set<() => void>;\r\n depsFunction: ((state: any) => any[] | true) | null;\r\n }\r\n ) => void;\r\n deleteReactiveDeps: (key: string) => void;\r\n subscribe: (listener: () => void) => () => void;\r\n};\r\n\r\nexport const getGlobalStore = create<CogsGlobalState>((set, get) => ({\r\n shadowStateStore: new Map(),\r\n shadowStateSubscribers: new Map(),\r\n\r\n subscribeToShadowState: (key: string, callback: () => void) => {\r\n set((state) => {\r\n const newSubs = new Map(state.shadowStateSubscribers);\r\n const subsForKey = newSubs.get(key) || new Set();\r\n subsForKey.add(callback);\r\n newSubs.set(key, subsForKey);\r\n return { shadowStateSubscribers: newSubs };\r\n });\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n set((state) => {\r\n const newSubs = new Map(state.shadowStateSubscribers);\r\n const subsForKey = newSubs.get(key);\r\n if (subsForKey) {\r\n subsForKey.delete(callback);\r\n if (subsForKey.size === 0) {\r\n newSubs.delete(key);\r\n }\r\n }\r\n return { shadowStateSubscribers: newSubs };\r\n });\r\n };\r\n },\r\n initializeShadowState: (key: string, initialState: any) => {\r\n const newShadowStore = new Map<string, ShadowMetadata>();\r\n\r\n const processValue = (value: any, path: string[]) => {\r\n const nodeKey = [key, ...path].join(\".\");\r\n\r\n if (Array.isArray(value)) {\r\n const childIds: string[] = [];\r\n\r\n value.forEach((item) => {\r\n if (typeof item === \"object\" && item !== null && !item.id) {\r\n item.id = ulid();\r\n }\r\n\r\n const itemId = `id:${item.id}`;\r\n childIds.push(itemId);\r\n\r\n const itemPath = [...path, itemId];\r\n processValue(item, itemPath);\r\n });\r\n\r\n const arrayContainerMetadata: ShadowMetadata = {\r\n id: ulid(),\r\n arrayKeys: childIds,\r\n };\r\n newShadowStore.set(nodeKey, arrayContainerMetadata);\r\n } else if (typeof value === \"object\" && value !== null) {\r\n newShadowStore.set(nodeKey, { id: ulid() });\r\n\r\n Object.keys(value).forEach((k) => {\r\n processValue(value[k], [...path, k]);\r\n });\r\n } else {\r\n newShadowStore.set(nodeKey, { id: ulid() });\r\n }\r\n };\r\n\r\n processValue(initialState, []);\r\n\r\n set({ shadowStateStore: newShadowStore });\r\n },\r\n getShadowMetadata: (key: string, path: string[]) => {\r\n const fullKey = [key, ...path].join(\".\");\r\n return get().shadowStateStore.get(fullKey);\r\n },\r\n\r\n setShadowMetadata: (key: string, path: string[], metadata: any) => {\r\n const fullKey = [key, ...path].join(\".\");\r\n const newShadowStore = new Map(get().shadowStateStore);\r\n const existing = newShadowStore.get(fullKey) || { id: ulid() };\r\n newShadowStore.set(fullKey, { ...existing, ...metadata });\r\n set({ shadowStateStore: newShadowStore });\r\n\r\n if (metadata.virtualizer?.itemHeight) {\r\n const subscribers = get().shadowStateSubscribers.get(key);\r\n subscribers?.forEach((cb) => cb());\r\n }\r\n },\r\n\r\n insertShadowArrayElement: (\r\n key: string,\r\n arrayPath: string[],\r\n newItem: any\r\n ) => {\r\n const newShadowStore = new Map(get().shadowStateStore);\r\n const arrayKey = [key, ...arrayPath].join(\".\");\r\n const parentMeta = newShadowStore.get(arrayKey);\r\n const newArrayState = get().getNestedState(key, arrayPath) as any[];\r\n\r\n if (!parentMeta || !parentMeta.arrayKeys) return;\r\n\r\n const newItemId = `id:${newItem.id}`;\r\n const newIndex = newArrayState.findIndex((item) => item.id === newItem.id);\r\n\r\n if (newIndex === -1) return;\r\n\r\n const newArrayKeys = [...parentMeta.arrayKeys];\r\n newArrayKeys.splice(newIndex, 0, newItemId);\r\n newShadowStore.set(arrayKey, { ...parentMeta, arrayKeys: newArrayKeys });\r\n\r\n const processNewItem = (value: any, path: string[]) => {\r\n const nodeKey = [key, ...path].join(\".\");\r\n if (typeof value === \"object\" && value !== null) {\r\n newShadowStore.set(nodeKey, { id: ulid() });\r\n Object.keys(value).forEach((k) => {\r\n processNewItem(value[k], [...path, k]);\r\n });\r\n } else {\r\n newShadowStore.set(nodeKey, { id: ulid() });\r\n }\r\n };\r\n\r\n processNewItem(newItem, [...arrayPath, newItemId]);\r\n\r\n set({ shadowStateStore: newShadowStore });\r\n },\r\n\r\n removeShadowArrayElement: (key: string, itemPath: string[]) => {\r\n const newShadowStore = new Map(get().shadowStateStore);\r\n const itemKey = [key, ...itemPath].join(\".\");\r\n const itemIdToRemove = itemPath[itemPath.length - 1];\r\n\r\n const parentPath = itemPath.slice(0, -1);\r\n const parentKey = [key, ...parentPath].join(\".\");\r\n const parentMeta = newShadowStore.get(parentKey);\r\n\r\n if (parentMeta && parentMeta.arrayKeys) {\r\n const newArrayKeys = parentMeta.arrayKeys.filter(\r\n (id) => id !== itemIdToRemove\r\n );\r\n newShadowStore.set(parentKey, { ...parentMeta, arrayKeys: newArrayKeys });\r\n }\r\n\r\n const prefixToDelete = itemKey + \".\";\r\n for (const k of Array.from(newShadowStore.keys())) {\r\n if (k === itemKey || k.startsWith(prefixToDelete)) {\r\n newShadowStore.delete(k);\r\n }\r\n }\r\n\r\n set({ shadowStateStore: newShadowStore });\r\n },\r\n updateShadowAtPath: (key: string, path: string[], newValue: any) => {\r\n const fullKey = [key, ...path].join(\".\");\r\n const newShadowStore = new Map(get().shadowStateStore);\r\n const existing = newShadowStore.get(fullKey) || { id: ulid() };\r\n newShadowStore.set(fullKey, { ...existing, lastUpdated: Date.now() });\r\n set({ shadowStateStore: newShadowStore });\r\n },\r\n\r\n selectedIndicesMap: new Map<string, Map<string, number>>(),\r\n\r\n // Add the new methods\r\n getSelectedIndex: (stateKey: string, parentPath: string) => {\r\n const stateMap = get().selectedIndicesMap.get(stateKey);\r\n if (!stateMap) return undefined;\r\n return stateMap.get(parentPath);\r\n },\r\n\r\n setSelectedIndex: (\r\n stateKey: string,\r\n parentPath: string,\r\n index: number | undefined\r\n ) => {\r\n set((state) => {\r\n const newMap = new Map(state.selectedIndicesMap);\r\n let stateMap = newMap.get(stateKey);\r\n\r\n if (!stateMap) {\r\n stateMap = new Map<string, number>();\r\n newMap.set(stateKey, stateMap);\r\n }\r\n\r\n if (index === undefined) {\r\n stateMap.delete(parentPath);\r\n } else {\r\n stateMap.set(parentPath, index);\r\n }\r\n\r\n return {\r\n ...state,\r\n selectedIndicesMap: newMap,\r\n };\r\n });\r\n },\r\n clearSelectedIndex: ({\r\n stateKey,\r\n path,\r\n }: {\r\n stateKey: string;\r\n path: string[];\r\n }) => {\r\n set((state) => {\r\n const newMap = new Map(state.selectedIndicesMap);\r\n const stateMap = newMap.get(stateKey);\r\n if (!stateMap) return state;\r\n const parentPath = path.join(\".\");\r\n stateMap.delete(parentPath);\r\n return {\r\n ...state,\r\n selectedIndicesMap: newMap,\r\n };\r\n });\r\n },\r\n clearSelectedIndexesForState: (stateKey: string) => {\r\n set((state) => {\r\n const newOuterMap = new Map(state.selectedIndicesMap);\r\n const changed = newOuterMap.delete(stateKey);\r\n if (changed) {\r\n console.log(\r\n `Cleared selected indices map entry for stateKey: ${stateKey}`\r\n );\r\n return { selectedIndicesMap: newOuterMap };\r\n } else {\r\n return {};\r\n }\r\n });\r\n },\r\n stateComponents: new Map(),\r\n subscribe: (listener: () => void) => {\r\n // zustand's subscribe returns an unsubscribe function\r\n return get().subscribe(listener);\r\n },\r\n\r\n reactiveDeps: {},\r\n setReactiveDeps: (key, record) =>\r\n set((state) => ({\r\n ...state,\r\n reactiveDeps: {\r\n ...state.reactiveDeps,\r\n [key]: record,\r\n },\r\n })),\r\n deleteReactiveDeps: (key) =>\r\n set((state) => {\r\n const { [key]: _, ...rest } = state.reactiveDeps;\r\n return {\r\n ...state,\r\n reactiveDeps: rest,\r\n };\r\n }),\r\n\r\n reRenderTriggerPrevValue: {},\r\n signalDomElements: new Map(),\r\n addSignalElement: (\r\n signalId: string,\r\n elementInfo: { instanceId: string; parentId: string; position: number }\r\n ) => {\r\n const current = get().signalDomElements;\r\n if (!current.has(signalId)) {\r\n current.set(signalId, new Set());\r\n }\r\n current.get(signalId)!.add(elementInfo);\r\n\r\n set({ signalDomElements: new Map(current) }); // Create new reference to trigger update\r\n },\r\n removeSignalElement: (signalId: string, instanceId: string) => {\r\n const current = get().signalDomElements;\r\n const elements = current.get(signalId);\r\n if (elements) {\r\n elements.forEach((el) => {\r\n if (el.instanceId === instanceId) {\r\n elements.delete(el);\r\n }\r\n });\r\n }\r\n set({ signalDomElements: new Map(current) });\r\n },\r\n initialStateOptions: {},\r\n updaterState: {},\r\n stateTimeline: {},\r\n cogsStateStore: {},\r\n stateLog: {},\r\n isLoadingGlobal: {},\r\n\r\n initialStateGlobal: {},\r\n iniitialCreatedState: {},\r\n updateInitialCreatedState: (key, newState) => {\r\n set((prev) => ({\r\n iniitialCreatedState: {\r\n ...prev.iniitialCreatedState,\r\n [key]: newState,\r\n },\r\n }));\r\n },\r\n\r\n validationErrors: new Map(),\r\n\r\n serverState: {},\r\n\r\n serverSyncActions: {},\r\n\r\n serverSyncLog: {},\r\n serverSideOrNot: {},\r\n setServerSyncLog: (key, newValue) => {\r\n set((state) => ({\r\n serverSyncLog: {\r\n ...state.serverSyncLog,\r\n [key]: [...(state.serverSyncLog[key] ?? []), newValue],\r\n },\r\n }));\r\n },\r\n setServerSideOrNot: (key, value) => {\r\n set((state) => ({\r\n serverSideOrNot: {\r\n ...state.serverSideOrNot,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n getServerSideOrNot: (key) => {\r\n return get().serverSideOrNot[key];\r\n },\r\n\r\n getThisLocalUpdate: (key: string) => {\r\n return get().stateLog[key];\r\n },\r\n setServerState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateValue\r\n ) => {\r\n set((prev) => ({\r\n serverState: {\r\n ...prev.serverState,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n\r\n setStateLog: (\r\n key: string,\r\n updater: (prevUpdates: UpdateTypeDetail[]) => UpdateTypeDetail[]\r\n ) => {\r\n set((prev) => {\r\n const currentUpdates = prev.stateLog[key] ?? [];\r\n const newUpdates = updater(currentUpdates);\r\n return {\r\n stateLog: {\r\n ...prev.stateLog,\r\n [key]: newUpdates,\r\n },\r\n };\r\n });\r\n },\r\n setIsLoadingGlobal: (key: string, value: boolean) => {\r\n set((prev) => ({\r\n isLoadingGlobal: {\r\n ...prev.isLoadingGlobal,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n setServerSyncActions: (key: string, value: SyncActionsType<any>) => {\r\n set((prev) => ({\r\n serverSyncActions: {\r\n ...prev.serverSyncActions,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n addValidationError: (path, message) => {\r\n console.log(\"addValidationError---\");\r\n set((prev) => {\r\n const updatedErrors = new Map(prev.validationErrors);\r\n const existingMessages = updatedErrors.get(path) || [];\r\n console.log(\"addValidationError\", path, message, existingMessages);\r\n // Append the new message instead of replacing\r\n updatedErrors.set(path, [...existingMessages, message]);\r\n return { validationErrors: updatedErrors };\r\n });\r\n },\r\n removeValidationError: (path) => {\r\n set((prev) => {\r\n const updatedErrors = new Map(prev.validationErrors);\r\n\r\n let doSomething = false;\r\n const pathArray = path.split(\".\");\r\n Array.from(updatedErrors.keys()).forEach((key) => {\r\n const keyArray = key.split(\".\");\r\n if (keyArray.length >= pathArray.length) {\r\n let match = true;\r\n for (let i = 0; i < pathArray.length; i++) {\r\n if (keyArray[i] !== pathArray[i]) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n\r\n if (match) {\r\n doSomething = true;\r\n updatedErrors.delete(key);\r\n }\r\n }\r\n });\r\n\r\n return doSomething ? { validationErrors: updatedErrors } : prev;\r\n });\r\n },\r\n getValidationErrors: (path: string) => {\r\n const errors: string[] = [];\r\n const valErrors = get().validationErrors;\r\n const pathArray = path.split(\".\");\r\n\r\n // Helper to check if an index matches either a wildcard or is in an array of indices\r\n const isIndexMatch = (pathSegment: string, keySegment: string) => {\r\n if (pathSegment === \"[*]\") return true;\r\n if (Array.isArray(pathSegment)) {\r\n return pathSegment.includes(parseInt(keySegment));\r\n }\r\n return pathSegment === keySegment;\r\n };\r\n\r\n Array.from(valErrors.keys()).forEach((key) => {\r\n const keyArray = key.split(\".\");\r\n if (keyArray.length >= pathArray.length) {\r\n let match = true;\r\n for (let i = 0; i < pathArray.length; i++) {\r\n const pathSegment = pathArray[i];\r\n const keySegment = keyArray[i]!;\r\n\r\n // If current path segment is a number or [*], we need special handling\r\n if (pathSegment === \"[*]\" || Array.isArray(pathSegment)) {\r\n // Key segment should be a number if we're using [*] or array indices\r\n const keyIndex = parseInt(keySegment);\r\n if (isNaN(keyIndex)) {\r\n match = false;\r\n break;\r\n }\r\n\r\n if (!isIndexMatch(pathSegment, keySegment)) {\r\n match = false;\r\n break;\r\n }\r\n } else if (pathSegment !== keySegment) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n\r\n if (match) {\r\n const errorMessages = valErrors.get(key);\r\n if (errorMessages) {\r\n errors.push(...errorMessages);\r\n }\r\n }\r\n }\r\n });\r\n\r\n return errors;\r\n },\r\n getInitialOptions: (key) => {\r\n return get().initialStateOptions[key];\r\n },\r\n getNestedState: (key: string, path: string[]) => {\r\n const rootState = get().cogsStateStore[key];\r\n\r\n const resolvePath = (obj: any, pathArray: string[]): any => {\r\n if (pathArray.length === 0 || obj === undefined) {\r\n return obj;\r\n }\r\n\r\n const currentSegment = pathArray[0];\r\n const remainingPath = pathArray.slice(1);\r\n\r\n // FIX: Handle ID-based array access like 'id:xyz'\r\n if (\r\n Array.isArray(obj) &&\r\n typeof currentSegment === \"string\" &&\r\n currentSegment.startsWith(\"id:\")\r\n ) {\r\n const targetId = currentSegment.split(\":\")[1];\r\n const foundItem = obj.find(\r\n (item) => item && String(item.id) === targetId\r\n );\r\n return resolvePath(foundItem, remainingPath);\r\n }\r\n\r\n // Handle wildcard array access: '[*]'\r\n if (currentSegment === \"[*]\") {\r\n if (!Array.isArray(obj)) {\r\n console.warn(\"Asterisk notation used on non-array value\");\r\n return undefined;\r\n }\r\n if (remainingPath.length === 0) return obj;\r\n const results = obj.map((item) => resolvePath(item, remainingPath));\r\n return Array.isArray(results[0]) ? results.flat() : results;\r\n }\r\n\r\n // Handle standard object property access and numeric array indices\r\n const nextObj = obj[currentSegment as keyof typeof obj];\r\n return resolvePath(nextObj, remainingPath);\r\n };\r\n\r\n return resolvePath(rootState, path);\r\n },\r\n setInitialStateOptions: (key, value) => {\r\n set((prev) => ({\r\n initialStateOptions: {\r\n ...prev.initialStateOptions,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n updateInitialStateGlobal: (key, newState) => {\r\n set((prev) => ({\r\n initialStateGlobal: {\r\n ...prev.initialStateGlobal,\r\n [key]: newState,\r\n },\r\n }));\r\n },\r\n getUpdaterState: (key) => {\r\n return get().updaterState[key];\r\n },\r\n setUpdaterState: (key, newUpdater) => {\r\n const current = get().updaterState;\r\n\r\n if (!key || !newUpdater) return;\r\n\r\n set({ updaterState: { ...(current ?? {}), [key]: newUpdater } });\r\n },\r\n getKeyState: <StateKey extends StateKeys>(key: StateKey) => {\r\n return get().cogsStateStore[key];\r\n },\r\n\r\n setState: <StateKey extends StateKeys>(key: StateKey, value: StateValue) => {\r\n set((prev) => {\r\n return {\r\n cogsStateStore: {\r\n ...prev.cogsStateStore,\r\n [key]:\r\n typeof value === \"function\"\r\n ? value(prev.cogsStateStore[key])\r\n : value,\r\n },\r\n };\r\n });\r\n },\r\n setInitialStates: <StateKey extends StateKeys>(initialState: StateValue) => {\r\n set((prev) => ({\r\n cogsStateStore: {\r\n ...prev.cogsStateStore,\r\n ...initialState,\r\n },\r\n }));\r\n },\r\n setCreatedState: (initialState: StateValue) => {\r\n set((prev) => ({\r\n iniitialCreatedState: {\r\n ...prev.cogsStateStore,\r\n ...initialState,\r\n },\r\n }));\r\n },\r\n\r\n syncInfoStore: new Map<string, SyncInfo>(),\r\n setSyncInfo: (key: string, syncInfo: SyncInfo) =>\r\n set((state) => {\r\n const newMap = new Map(state.syncInfoStore);\r\n newMap.set(key, syncInfo);\r\n return { ...state, syncInfoStore: newMap };\r\n }),\r\n getSyncInfo: (key: string) => get().syncInfoStore.get(key) || null,\r\n}));\r\n"],"names":["formRefStore","create","set","get","id","ref","state","newRefs","stateKey","allRefs","stateKeyPrefix","filteredRefs","getGlobalStore","key","callback","newSubs","subsForKey","initialState","newShadowStore","processValue","value","path","nodeKey","childIds","item","ulid","itemId","itemPath","arrayContainerMetadata","k","fullKey","metadata","existing","cb","arrayPath","newItem","arrayKey","parentMeta","newArrayState","newItemId","newIndex","newArrayKeys","processNewItem","itemKey","itemIdToRemove","parentPath","parentKey","prefixToDelete","newValue","stateMap","index","newMap","newOuterMap","listener","record","_","rest","signalId","elementInfo","current","instanceId","elements","el","newState","prev","updater","currentUpdates","newUpdates","message","updatedErrors","existingMessages","doSomething","pathArray","keyArray","match","i","errors","valErrors","isIndexMatch","pathSegment","keySegment","keyIndex","errorMessages","rootState","resolvePath","obj","currentSegment","remainingPath","targetId","foundItem","results","nextObj","newUpdater","syncInfo"],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import { create } from 'zustand';\r\nimport { ulid } from 'ulid';\r\nimport type {\r\n OptionsType,\r\n ReactivityType,\r\n StateKeys,\r\n SyncInfo,\r\n UpdateTypeDetail,\r\n} from './CogsState.js';\r\n\r\nimport type { ReactNode } from 'react';\r\n\r\ntype StateUpdater<StateValue> =\r\n | StateValue\r\n | ((prevValue: StateValue) => StateValue);\r\n\r\nexport type FreshValuesObject = {\r\n pathsToValues?: string[];\r\n prevValue?: any;\r\n newValue?: any;\r\n timeStamp: number;\r\n};\r\n\r\ntype SyncLogType = {\r\n timeStamp: number;\r\n};\r\ntype StateValue = any;\r\n\r\nexport type TrieNode = {\r\n subscribers: Set<string>;\r\n children: Map<string, TrieNode>;\r\n};\r\n\r\nexport type FormRefStoreState = {\r\n formRefs: Map<string, React.RefObject<any>>;\r\n registerFormRef: (id: string, ref: React.RefObject<any>) => void;\r\n getFormRef: (id: string) => React.RefObject<any> | undefined;\r\n removeFormRef: (id: string) => void;\r\n // New method to get all refs for a stateKey\r\n getFormRefsByStateKey: (\r\n stateKey: string\r\n ) => Map<string, React.RefObject<any>>;\r\n};\r\n\r\nexport const formRefStore = create<FormRefStoreState>((set, get) => ({\r\n formRefs: new Map(),\r\n\r\n registerFormRef: (id, ref) =>\r\n set((state) => {\r\n const newRefs = new Map(state.formRefs);\r\n newRefs.set(id, ref);\r\n return { formRefs: newRefs };\r\n }),\r\n\r\n getFormRef: (id) => get().formRefs.get(id),\r\n\r\n removeFormRef: (id) =>\r\n set((state) => {\r\n const newRefs = new Map(state.formRefs);\r\n newRefs.delete(id);\r\n return { formRefs: newRefs };\r\n }),\r\n\r\n // Get all refs that start with the stateKey prefix\r\n getFormRefsByStateKey: (stateKey) => {\r\n const allRefs = get().formRefs;\r\n const stateKeyPrefix = stateKey + '.';\r\n const filteredRefs = new Map();\r\n\r\n allRefs.forEach((ref, id) => {\r\n if (id.startsWith(stateKeyPrefix) || id === stateKey) {\r\n filteredRefs.set(id, ref);\r\n }\r\n });\r\n\r\n return filteredRefs;\r\n },\r\n}));\r\nexport type ComponentsType = {\r\n components?: Map<\r\n string,\r\n {\r\n forceUpdate: () => void;\r\n paths: Set<string>;\r\n deps?: any[];\r\n prevDeps?: any[];\r\n depsFunction?: (state: any) => any[] | true;\r\n reactiveType: ReactivityType[] | ReactivityType;\r\n }\r\n >;\r\n};\r\nexport type ShadowMetadata = {\r\n id?: string;\r\n\r\n stateSource?: 'default' | 'server' | 'localStorage';\r\n lastServerSync?: number;\r\n isDirty?: boolean;\r\n baseServerState?: any;\r\n\r\n arrayKeys?: string[];\r\n\r\n fields?: Record<string, any>;\r\n virtualizer?: {\r\n itemHeight?: number;\r\n domRef?: HTMLElement | null;\r\n };\r\n syncInfo?: { status: string };\r\n lastUpdated?: number;\r\n value?: any;\r\n classSignals?: Array<{\r\n // <-- ADD THIS BLOCK\r\n id: string;\r\n effect: string;\r\n lastClasses: string;\r\n deps: any[];\r\n }>;\r\n signals?: Array<{\r\n instanceId: string;\r\n parentId: string;\r\n position: number;\r\n effect?: string;\r\n }>;\r\n mapWrappers?: Array<{\r\n instanceId: string;\r\n path: string[];\r\n componentId: string;\r\n meta?: any;\r\n mapFn: (\r\n setter: any,\r\n index: number,\r\n\r\n arraySetter: any\r\n ) => ReactNode;\r\n containerRef: HTMLDivElement | null;\r\n rebuildStateShape: any;\r\n }>;\r\n transformCaches?: Map<\r\n string,\r\n {\r\n validIds: string[];\r\n computedAt: number;\r\n transforms: Array<{ type: 'filter' | 'sort'; fn: Function }>;\r\n }\r\n >;\r\n pathComponents?: Set<string>;\r\n streams?: Map<\r\n string,\r\n {\r\n buffer: any[];\r\n flushTimer: NodeJS.Timeout | null;\r\n }\r\n >;\r\n} & ComponentsType;\r\nexport type CogsEvent =\r\n | { type: 'INSERT'; path: string; itemKey: string; index: number }\r\n | { type: 'REMOVE'; path: string; itemKey: string }\r\n | { type: 'UPDATE'; path: string; newValue: any }\r\n | { type: 'ITEMHEIGHT'; itemKey: string; height: number } // For full re-initializations (e.g., when a component is removed)\r\n | { type: 'RELOAD'; path: string }; // For full re-initializations\r\nexport type CogsGlobalState = {\r\n // --- Shadow State and Subscription System ---\r\n shadowStateStore: Map<string, ShadowMetadata>;\r\n markAsDirty: (\r\n key: string,\r\n path: string[],\r\n options: { bubble: boolean }\r\n ) => void;\r\n // These method signatures stay the same\r\n initializeShadowState: (key: string, initialState: any) => void;\r\n updateShadowAtPath: (key: string, path: string[], newValue: any) => void;\r\n insertShadowArrayElement: (\r\n key: string,\r\n arrayPath: string[],\r\n newItem: any\r\n ) => void;\r\n removeShadowArrayElement: (key: string, arrayPath: string[]) => void;\r\n getShadowValue: (\r\n key: string,\r\n\r\n validArrayIds?: string[]\r\n ) => any;\r\n\r\n getShadowMetadata: (\r\n key: string,\r\n path: string[]\r\n ) => ShadowMetadata | undefined;\r\n setShadowMetadata: (\r\n key: string,\r\n path: string[],\r\n metadata: Omit<ShadowMetadata, 'id'>\r\n ) => void;\r\n setTransformCache: (\r\n key: string,\r\n path: string[],\r\n cacheKey: string,\r\n cacheData: any\r\n ) => void;\r\n\r\n pathSubscribers: Map<string, Set<(newValue: any) => void>>;\r\n subscribeToPath: (\r\n path: string,\r\n callback: (newValue: any) => void\r\n ) => () => void;\r\n notifyPathSubscribers: (updatedPath: string, newValue: any) => void;\r\n\r\n selectedIndicesMap: Map<string, string>; // stateKey -> (parentPath -> selectedIndex)\r\n getSelectedIndex: (stateKey: string, validArrayIds?: string[]) => number;\r\n setSelectedIndex: (key: string, itemKey: string) => void;\r\n clearSelectedIndex: ({ arrayKey }: { arrayKey: string }) => void;\r\n clearSelectedIndexesForState: (stateKey: string) => void;\r\n\r\n // --- Core State and Updaters ---\r\n\r\n initialStateOptions: { [key: string]: OptionsType };\r\n\r\n initialStateGlobal: { [key: string]: StateValue };\r\n\r\n updateInitialStateGlobal: (key: string, newState: StateValue) => void;\r\n\r\n getInitialOptions: (key: string) => OptionsType | undefined;\r\n setInitialStateOptions: (key: string, value: OptionsType) => void;\r\n\r\n // --- Validation ---\r\n validationErrors: Map<string, string[]>;\r\n addValidationError: (path: string, message: string) => void;\r\n getValidationErrors: (path: string) => string[];\r\n removeValidationError: (path: string) => void;\r\n\r\n // --- Server Sync and Logging ---\r\n\r\n serverStateUpdates: Map<\r\n string,\r\n {\r\n data: any;\r\n status: 'loading' | 'success' | 'error';\r\n timestamp: number;\r\n }\r\n >;\r\n\r\n setServerStateUpdate: (key: string, serverState: any) => void;\r\n\r\n stateLog: { [key: string]: UpdateTypeDetail[] };\r\n syncInfoStore: Map<string, SyncInfo>;\r\n\r\n setStateLog: (\r\n key: string,\r\n updater: (prevUpdates: UpdateTypeDetail[]) => UpdateTypeDetail[]\r\n ) => void;\r\n setSyncInfo: (key: string, syncInfo: SyncInfo) => void;\r\n getSyncInfo: (key: string) => SyncInfo | null;\r\n};\r\nconst isSimpleObject = (value: any): boolean => {\r\n if (value === null || typeof value !== 'object') return false;\r\n\r\n // Handle special cases that should be treated as primitives\r\n if (\r\n value instanceof Uint8Array ||\r\n value instanceof Int8Array ||\r\n value instanceof Uint16Array ||\r\n value instanceof Int16Array ||\r\n value instanceof Uint32Array ||\r\n value instanceof Int32Array ||\r\n value instanceof Float32Array ||\r\n value instanceof Float64Array ||\r\n value instanceof ArrayBuffer ||\r\n value instanceof Date ||\r\n value instanceof RegExp ||\r\n value instanceof Map ||\r\n value instanceof Set\r\n ) {\r\n return false; // Treat as primitive\r\n }\r\n\r\n // Arrays and plain objects are complex\r\n return Array.isArray(value) || value.constructor === Object;\r\n};\r\nexport const getGlobalStore = create<CogsGlobalState>((set, get) => ({\r\n markAsDirty: (key: string, path: string[], options = { bubble: true }) => {\r\n const newShadowStore = new Map(get().shadowStateStore);\r\n let changed = false;\r\n\r\n const setDirty = (currentPath: string[]) => {\r\n const fullKey = [key, ...currentPath].join('.');\r\n const meta = newShadowStore.get(fullKey);\r\n\r\n // We mark something as dirty if it isn't already.\r\n // The original data source doesn't matter.\r\n if (meta && meta.isDirty !== true) {\r\n newShadowStore.set(fullKey, { ...meta, isDirty: true });\r\n changed = true;\r\n } else if (!meta) {\r\n // If there's no metadata, create it and mark it as dirty.\r\n // This handles newly created fields within an object.\r\n newShadowStore.set(fullKey, { isDirty: true });\r\n changed = true;\r\n }\r\n };\r\n\r\n // 1. Mark the target path itself as dirty.\r\n setDirty(path);\r\n\r\n // 2. If `bubble` is true, walk up the path and mark all parents as dirty.\r\n if (options.bubble) {\r\n let parentPath = [...path];\r\n while (parentPath.length > 0) {\r\n parentPath.pop();\r\n setDirty(parentPath);\r\n }\r\n }\r\n\r\n if (changed) {\r\n set({ shadowStateStore: newShadowStore });\r\n }\r\n },\r\n serverStateUpdates: new Map(),\r\n setServerStateUpdate: (key, serverState) => {\r\n set((state) => {\r\n const newMap = new Map(state.serverStateUpdates);\r\n newMap.set(key, serverState);\r\n return { serverStateUpdates: newMap };\r\n });\r\n\r\n // Notify all subscribers for this key\r\n get().notifyPathSubscribers(key, {\r\n type: 'SERVER_STATE_UPDATE',\r\n serverState,\r\n });\r\n },\r\n shadowStateStore: new Map(),\r\n pathSubscribers: new Map<string, Set<(newValue: any) => void>>(),\r\n\r\n subscribeToPath: (path, callback) => {\r\n const subscribers = get().pathSubscribers;\r\n const subsForPath = subscribers.get(path) || new Set();\r\n subsForPath.add(callback);\r\n subscribers.set(path, subsForPath);\r\n\r\n return () => {\r\n const currentSubs = get().pathSubscribers.get(path);\r\n if (currentSubs) {\r\n currentSubs.delete(callback);\r\n if (currentSubs.size === 0) {\r\n get().pathSubscribers.delete(path);\r\n }\r\n }\r\n };\r\n },\r\n\r\n notifyPathSubscribers: (updatedPath, newValue) => {\r\n // <-- Now accepts newValue\r\n const subscribers = get().pathSubscribers;\r\n const subs = subscribers.get(updatedPath);\r\n\r\n if (subs) {\r\n // Pass the newValue to every callback\r\n subs.forEach((callback) => callback(newValue));\r\n }\r\n },\r\n initializeShadowState: (key: string, initialState: any) => {\r\n const existingShadowStore = new Map(get().shadowStateStore);\r\n\r\n const processValue = (value: any, path: string[]) => {\r\n const nodeKey = [key, ...path].join('.');\r\n\r\n if (Array.isArray(value)) {\r\n // Handle arrays as before\r\n const childIds: string[] = [];\r\n\r\n value.forEach((item) => {\r\n const itemId = `id:${ulid()}`;\r\n childIds.push(nodeKey + '.' + itemId);\r\n });\r\n\r\n existingShadowStore.set(nodeKey, { arrayKeys: childIds });\r\n\r\n value.forEach((item, index) => {\r\n const itemId = childIds[index]!.split('.').pop();\r\n processValue(item, [...path!, itemId!]);\r\n });\r\n } else if (isSimpleObject(value)) {\r\n // Only create field mappings for simple objects\r\n const fields = Object.fromEntries(\r\n Object.keys(value).map((k) => [k, nodeKey + '.' + k])\r\n );\r\n existingShadowStore.set(nodeKey, { fields });\r\n\r\n Object.keys(value).forEach((k) => {\r\n processValue(value[k], [...path, k]);\r\n });\r\n } else {\r\n // Treat everything else (including Uint8Array) as primitive values\r\n existingShadowStore.set(nodeKey, { value });\r\n }\r\n };\r\n\r\n processValue(initialState, []);\r\n set({ shadowStateStore: existingShadowStore });\r\n },\r\n\r\n getShadowValue: (fullKey: string, validArrayIds?: string[]) => {\r\n const shadowMeta = get().shadowStateStore.get(fullKey);\r\n\r\n // If no metadata found, return undefined\r\n if (!shadowMeta) {\r\n return undefined;\r\n }\r\n\r\n // For primitive values, return the value\r\n if (shadowMeta.value !== undefined) {\r\n return shadowMeta.value;\r\n }\r\n\r\n // For arrays, reconstruct with possible validArrayIds\r\n if (shadowMeta.arrayKeys) {\r\n const arrayKeys = validArrayIds ?? shadowMeta.arrayKeys;\r\n const items = arrayKeys.map((itemKey) => {\r\n // RECURSIVELY call getShadowValue for each item\r\n return get().getShadowValue(itemKey);\r\n });\r\n return items;\r\n }\r\n\r\n // For objects with fields, reconstruct object\r\n if (shadowMeta.fields) {\r\n const reconstructedObject: any = {};\r\n Object.entries(shadowMeta.fields).forEach(([key, fieldPath]) => {\r\n // RECURSIVELY call getShadowValue for each field\r\n reconstructedObject[key] = get().getShadowValue(fieldPath as string);\r\n });\r\n return reconstructedObject;\r\n }\r\n\r\n return undefined;\r\n },\r\n getShadowMetadata: (\r\n key: string,\r\n path: string[],\r\n validArrayIds?: string[]\r\n ) => {\r\n const fullKey = [key, ...path].join('.');\r\n let data = get().shadowStateStore.get(fullKey);\r\n\r\n return get().shadowStateStore.get(fullKey);\r\n },\r\n\r\n setShadowMetadata: (key: string, path: string[], metadata: any) => {\r\n const fullKey = [key, ...path].join('.');\r\n const newShadowStore = new Map(get().shadowStateStore);\r\n const existing = newShadowStore.get(fullKey) || { id: ulid() };\r\n newShadowStore.set(fullKey, { ...existing, ...metadata });\r\n set({ shadowStateStore: newShadowStore });\r\n },\r\n setTransformCache: (\r\n key: string,\r\n path: string[],\r\n cacheKey: string,\r\n cacheData: any\r\n ) => {\r\n const fullKey = [key, ...path].join('.');\r\n const newShadowStore = new Map(get().shadowStateStore);\r\n const existing = newShadowStore.get(fullKey) || {};\r\n\r\n // Initialize transformCaches if it doesn't exist\r\n if (!existing.transformCaches) {\r\n existing.transformCaches = new Map();\r\n }\r\n\r\n // Update just the specific cache entry\r\n existing.transformCaches.set(cacheKey, cacheData);\r\n\r\n // Update shadow store WITHOUT notifying path subscribers\r\n newShadowStore.set(fullKey, existing);\r\n set({ shadowStateStore: newShadowStore });\r\n\r\n // Don't call notifyPathSubscribers here - cache updates shouldn't trigger renders\r\n },\r\n insertShadowArrayElement: (\r\n key: string,\r\n arrayPath: string[],\r\n newItem: any\r\n ) => {\r\n const newShadowStore = new Map(get().shadowStateStore);\r\n const arrayKey = [key, ...arrayPath].join('.');\r\n const parentMeta = newShadowStore.get(arrayKey);\r\n\r\n if (!parentMeta || !parentMeta.arrayKeys) return;\r\n\r\n const newItemId = `id:${ulid()}`;\r\n const fullItemKey = arrayKey + '.' + newItemId;\r\n\r\n // Just add to the end (or at a specific index if provided)\r\n const newArrayKeys = [...parentMeta.arrayKeys];\r\n newArrayKeys.push(fullItemKey); // Or use splice if you have an index\r\n newShadowStore.set(arrayKey, { ...parentMeta, arrayKeys: newArrayKeys });\r\n\r\n // Process the new item - but use the correct logic\r\n const processNewItem = (value: any, path: string[]) => {\r\n const nodeKey = [key, ...path].join('.');\r\n\r\n if (Array.isArray(value)) {\r\n // Handle arrays...\r\n } else if (typeof value === 'object' && value !== null) {\r\n // Create fields mapping\r\n const fields = Object.fromEntries(\r\n Object.keys(value).map((k) => [k, nodeKey + '.' + k])\r\n );\r\n newShadowStore.set(nodeKey, { fields });\r\n\r\n // Process each field\r\n Object.entries(value).forEach(([k, v]) => {\r\n processNewItem(v, [...path, k]);\r\n });\r\n } else {\r\n // Primitive value\r\n newShadowStore.set(nodeKey, { value });\r\n }\r\n };\r\n\r\n processNewItem(newItem, [...arrayPath, newItemId]);\r\n set({ shadowStateStore: newShadowStore });\r\n\r\n get().notifyPathSubscribers(arrayKey, {\r\n type: 'INSERT',\r\n path: arrayKey,\r\n itemKey: fullItemKey,\r\n });\r\n },\r\n removeShadowArrayElement: (key: string, itemPath: string[]) => {\r\n const newShadowStore = new Map(get().shadowStateStore);\r\n\r\n // Get the full item key (e.g., \"stateKey.products.id:xxx\")\r\n const itemKey = [key, ...itemPath].join('.');\r\n\r\n // Extract parent path and item ID\r\n const parentPath = itemPath.slice(0, -1);\r\n const parentKey = [key, ...parentPath].join('.');\r\n\r\n // Get parent metadata\r\n const parentMeta = newShadowStore.get(parentKey);\r\n\r\n if (parentMeta && parentMeta.arrayKeys) {\r\n // Find the index of the item to remove\r\n const indexToRemove = parentMeta.arrayKeys.findIndex(\r\n (arrayItemKey) => arrayItemKey === itemKey\r\n );\r\n\r\n if (indexToRemove !== -1) {\r\n // Create new array keys with the item removed\r\n const newArrayKeys = parentMeta.arrayKeys.filter(\r\n (arrayItemKey) => arrayItemKey !== itemKey\r\n );\r\n\r\n // Update parent with new array keys\r\n newShadowStore.set(parentKey, {\r\n ...parentMeta,\r\n arrayKeys: newArrayKeys,\r\n });\r\n\r\n // Delete all data associated with the removed item\r\n const prefixToDelete = itemKey + '.';\r\n for (const k of Array.from(newShadowStore.keys())) {\r\n if (k === itemKey || k.startsWith(prefixToDelete)) {\r\n newShadowStore.delete(k);\r\n }\r\n }\r\n }\r\n }\r\n\r\n set({ shadowStateStore: newShadowStore });\r\n\r\n get().notifyPathSubscribers(parentKey, {\r\n type: 'REMOVE',\r\n path: parentKey,\r\n itemKey: itemKey, // The exact ID of the removed item\r\n });\r\n },\r\n updateShadowAtPath: (key, path, newValue) => {\r\n const newShadowStore = new Map(get().shadowStateStore);\r\n const fullKey = [key, ...path].join('.');\r\n\r\n const updateValue = (currentKey: string, valueToSet: any) => {\r\n const meta = newShadowStore.get(currentKey);\r\n\r\n // If it's a simple object with fields, update recursively\r\n if (isSimpleObject(valueToSet) && meta && meta.fields) {\r\n for (const fieldKey in valueToSet) {\r\n if (Object.prototype.hasOwnProperty.call(valueToSet, fieldKey)) {\r\n const childPath = meta.fields[fieldKey];\r\n const childValue = valueToSet[fieldKey];\r\n\r\n if (childPath) {\r\n updateValue(childPath as string, childValue);\r\n }\r\n }\r\n }\r\n } else {\r\n // For primitives (including Uint8Array), just replace the value\r\n // This gives you useState-like behavior\r\n const existing = newShadowStore.get(currentKey) || {};\r\n newShadowStore.set(currentKey, { ...existing, value: valueToSet });\r\n }\r\n };\r\n\r\n updateValue(fullKey, newValue);\r\n get().notifyPathSubscribers(fullKey, { type: 'UPDATE', newValue });\r\n set({ shadowStateStore: newShadowStore });\r\n },\r\n selectedIndicesMap: new Map<string, string>(),\r\n getSelectedIndex: (arrayKey: string, validIds?: string[]): number => {\r\n const itemKey = get().selectedIndicesMap.get(arrayKey);\r\n\r\n if (!itemKey) return -1;\r\n\r\n // Use validIds if provided (for filtered views), otherwise use all arrayKeys\r\n const arrayKeys =\r\n validIds ||\r\n getGlobalStore.getState().getShadowMetadata(arrayKey, [])?.arrayKeys;\r\n\r\n if (!arrayKeys) return -1;\r\n\r\n return arrayKeys.indexOf(itemKey);\r\n },\r\n\r\n setSelectedIndex: (arrayKey: string, itemKey: string | undefined) => {\r\n set((state) => {\r\n const newMap = state.selectedIndicesMap;\r\n\r\n if (itemKey === undefined) {\r\n newMap.delete(arrayKey);\r\n } else {\r\n if (newMap.has(arrayKey)) {\r\n get().notifyPathSubscribers(newMap.get(arrayKey)!, {\r\n type: 'THIS_UNSELECTED',\r\n });\r\n }\r\n newMap.set(arrayKey, itemKey);\r\n\r\n get().notifyPathSubscribers(itemKey, {\r\n type: 'THIS_SELECTED',\r\n });\r\n }\r\n get().notifyPathSubscribers(arrayKey, {\r\n type: 'GET_SELECTED',\r\n });\r\n return {\r\n ...state,\r\n selectedIndicesMap: newMap,\r\n };\r\n });\r\n },\r\n clearSelectedIndex: ({ arrayKey }: { arrayKey: string }): void => {\r\n set((state) => {\r\n const newMap = state.selectedIndicesMap;\r\n const acutalKey = newMap.get(arrayKey);\r\n if (acutalKey) {\r\n get().notifyPathSubscribers(acutalKey, {\r\n type: 'CLEAR_SELECTION',\r\n });\r\n }\r\n\r\n newMap.delete(arrayKey);\r\n get().notifyPathSubscribers(arrayKey, {\r\n type: 'CLEAR_SELECTION',\r\n });\r\n return {\r\n ...state,\r\n selectedIndicesMap: newMap,\r\n };\r\n });\r\n },\r\n clearSelectedIndexesForState: (stateKey: string) => {\r\n set((state) => {\r\n const newOuterMap = new Map(state.selectedIndicesMap);\r\n const changed = newOuterMap.delete(stateKey);\r\n if (changed) {\r\n return { selectedIndicesMap: newOuterMap };\r\n } else {\r\n return {};\r\n }\r\n });\r\n },\r\n\r\n initialStateOptions: {},\r\n\r\n stateTimeline: {},\r\n cogsStateStore: {},\r\n stateLog: {},\r\n\r\n initialStateGlobal: {},\r\n\r\n validationErrors: new Map(),\r\n\r\n setStateLog: (\r\n key: string,\r\n updater: (prevUpdates: UpdateTypeDetail[]) => UpdateTypeDetail[]\r\n ) => {\r\n set((prev) => {\r\n const currentUpdates = prev.stateLog[key] ?? [];\r\n const newUpdates = updater(currentUpdates);\r\n return {\r\n stateLog: {\r\n ...prev.stateLog,\r\n [key]: newUpdates,\r\n },\r\n };\r\n });\r\n },\r\n\r\n addValidationError: (path, message) => {\r\n set((prev) => {\r\n const updatedErrors = new Map(prev.validationErrors);\r\n const existingMessages = updatedErrors.get(path) || [];\r\n console.log('addValidationError', path, message, existingMessages);\r\n // Append the new message instead of replacing\r\n updatedErrors.set(path, [...existingMessages, message]);\r\n return { validationErrors: updatedErrors };\r\n });\r\n },\r\n removeValidationError: (path) => {\r\n set((prev) => {\r\n const updatedErrors = new Map(prev.validationErrors);\r\n\r\n let doSomething = false;\r\n const pathArray = path.split('.');\r\n Array.from(updatedErrors.keys()).forEach((key) => {\r\n const keyArray = key.split('.');\r\n if (keyArray.length >= pathArray.length) {\r\n let match = true;\r\n for (let i = 0; i < pathArray.length; i++) {\r\n if (keyArray[i] !== pathArray[i]) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n\r\n if (match) {\r\n doSomething = true;\r\n updatedErrors.delete(key);\r\n }\r\n }\r\n });\r\n\r\n return doSomething ? { validationErrors: updatedErrors } : prev;\r\n });\r\n },\r\n getValidationErrors: (path: string) => {\r\n const errors: string[] = [];\r\n const valErrors = get().validationErrors;\r\n const pathArray = path.split('.');\r\n\r\n // Helper to check if an index matches either a wildcard or is in an array of indices\r\n const isIndexMatch = (pathSegment: string, keySegment: string) => {\r\n if (pathSegment === '[*]') return true;\r\n if (Array.isArray(pathSegment)) {\r\n return pathSegment.includes(parseInt(keySegment));\r\n }\r\n return pathSegment === keySegment;\r\n };\r\n\r\n Array.from(valErrors.keys()).forEach((key) => {\r\n const keyArray = key.split('.');\r\n if (keyArray.length >= pathArray.length) {\r\n let match = true;\r\n for (let i = 0; i < pathArray.length; i++) {\r\n const pathSegment = pathArray[i];\r\n const keySegment = keyArray[i]!;\r\n\r\n // If current path segment is a number or [*], we need special handling\r\n if (pathSegment === '[*]' || Array.isArray(pathSegment)) {\r\n // Key segment should be a number if we're using [*] or array indices\r\n const keyIndex = parseInt(keySegment);\r\n if (isNaN(keyIndex)) {\r\n match = false;\r\n break;\r\n }\r\n\r\n if (!isIndexMatch(pathSegment, keySegment)) {\r\n match = false;\r\n break;\r\n }\r\n } else if (pathSegment !== keySegment) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n\r\n if (match) {\r\n const errorMessages = valErrors.get(key);\r\n if (errorMessages) {\r\n errors.push(...errorMessages);\r\n }\r\n }\r\n }\r\n });\r\n\r\n return errors;\r\n },\r\n getInitialOptions: (key) => {\r\n return get().initialStateOptions[key];\r\n },\r\n\r\n setInitialStateOptions: (key, value) => {\r\n set((prev) => ({\r\n initialStateOptions: {\r\n ...prev.initialStateOptions,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n updateInitialStateGlobal: (key, newState) => {\r\n set((prev) => ({\r\n initialStateGlobal: {\r\n ...prev.initialStateGlobal,\r\n [key]: newState,\r\n },\r\n }));\r\n },\r\n\r\n syncInfoStore: new Map<string, SyncInfo>(),\r\n setSyncInfo: (key: string, syncInfo: SyncInfo) =>\r\n set((state) => {\r\n const newMap = new Map(state.syncInfoStore);\r\n newMap.set(key, syncInfo);\r\n return { ...state, syncInfoStore: newMap };\r\n }),\r\n getSyncInfo: (key: string) => get().syncInfoStore.get(key) || null,\r\n}));\r\n"],"names":["formRefStore","create","set","get","id","ref","state","newRefs","stateKey","allRefs","stateKeyPrefix","filteredRefs","isSimpleObject","value","getGlobalStore","key","path","options","newShadowStore","changed","setDirty","currentPath","fullKey","meta","parentPath","serverState","newMap","callback","subscribers","subsForPath","currentSubs","updatedPath","newValue","subs","initialState","existingShadowStore","processValue","nodeKey","childIds","item","itemId","ulid","index","fields","k","validArrayIds","shadowMeta","itemKey","reconstructedObject","fieldPath","metadata","existing","cacheKey","cacheData","arrayPath","newItem","arrayKey","parentMeta","newItemId","fullItemKey","newArrayKeys","processNewItem","v","itemPath","parentKey","arrayItemKey","prefixToDelete","updateValue","currentKey","valueToSet","fieldKey","childPath","childValue","validIds","arrayKeys","acutalKey","newOuterMap","updater","prev","currentUpdates","newUpdates","message","updatedErrors","existingMessages","doSomething","pathArray","keyArray","match","i","errors","valErrors","isIndexMatch","pathSegment","keySegment","keyIndex","errorMessages","newState","syncInfo"],"mappings":"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"}
@@ -23,7 +23,7 @@ type ResultsState = {
23
23
  };
24
24
  export declare const useResultsStore: import('zustand').UseBoundStore<import('zustand').StoreApi<ResultsState>>;
25
25
  export default function useValidateZodPath<T extends ZodRawShape>(validationKey: string, schema: ZodObject<T>, stateKey?: string): {
26
- validateZodPath: (path: string[], data: any, results?: Record<string, ResultItem> | undefined) => "loading" | "success" | "failure" | "error";
26
+ validateZodPath: (path: string[], data: any, results?: Record<string, ResultItem> | undefined) => "loading" | "success" | "error" | "failure";
27
27
  getZodPathResults: (path: string[]) => string[] | ResultItem;
28
28
  zodPathResults: Record<string, ResultItem> | undefined;
29
29
  };
package/dist/utility.d.ts CHANGED
@@ -9,10 +9,10 @@ export declare const isDeepEqual: (object1?: Record<string, any>, object2?: Reco
9
9
  }, currentPath?: string[]) => boolean;
10
10
  export declare function updateNestedProperty(path: string[], state: any, update: any): any;
11
11
  export declare function deleteNestedProperty(path: string[], state: any): any;
12
- export declare function getNestedValue<TStateObject extends unknown>(obj: TStateObject, pathArray: string[]): any;
13
- export declare function updateNestedPropertyIds(path: string[], state: any, newValue: any): any;
12
+ export declare function getNestedValue<TStateObject extends unknown>(obj: TStateObject, pathArray: string[], stateKey: string): any;
14
13
  type DifferencePaths = string[];
15
14
  export declare function getDifferences(obj1: any, obj2: any, currentPath?: string): DifferencePaths;
15
+ export declare function deepMerge(target: any, source: any): any;
16
16
  export declare function getDifferencesArray(obj1: any, obj2: any): string[][];
17
17
  export declare function getArrayLengthDifferences(obj1: any, obj2: any, currentPath?: string): string[];
18
18
  export declare function getArrayLengthDifferencesArray(obj1: any, obj2: any): string[][];
package/dist/utility.js CHANGED
@@ -1,247 +1,230 @@
1
- const y = (r) => r && typeof r == "object" && !Array.isArray(r) && r !== null, w = (r) => typeof r == "function", u = (r) => Array.isArray(r), d = (r, e, n = {}, i = []) => {
2
- if (y(r) && y(e)) {
3
- const t = Object.keys(r), s = Object.keys(e);
4
- if (t.length !== s.length)
1
+ import { getGlobalStore as w } from "./store.js";
2
+ const c = (n) => n && typeof n == "object" && !Array.isArray(n) && n !== null, v = (n) => typeof n == "function", d = (n) => Array.isArray(n), g = (n, e, t = {}, r = []) => {
3
+ if (c(n) && c(e)) {
4
+ const i = Object.keys(n), s = Object.keys(e);
5
+ if (i.length !== s.length)
5
6
  return !1;
6
- for (let f of t) {
7
- const l = r[f], o = e[f];
8
- if (!(f in r) || !(f in e))
7
+ for (let o of i) {
8
+ const f = n[o], l = e[o];
9
+ if (!(o in n) || !(o in e))
9
10
  return !1;
10
- const a = [...i, f];
11
- if (!d(l, o, n, a))
11
+ const a = [...r, o];
12
+ if (!g(f, l, t, a))
12
13
  return !1;
13
14
  }
14
15
  return !0;
15
- } else if (u(r) && u(e)) {
16
- if (r.length !== e.length)
16
+ } else if (d(n) && d(e)) {
17
+ if (n.length !== e.length)
17
18
  return !1;
18
- for (let t = 0; t < r.length; t++)
19
- if (!d(r[t], e[t], n, [
20
- ...i,
21
- t.toString()
19
+ for (let i = 0; i < n.length; i++)
20
+ if (!g(n[i], e[i], t, [
21
+ ...r,
22
+ i.toString()
22
23
  ]))
23
24
  return !1;
24
25
  return !0;
25
26
  } else
26
- return r === e || Number.isNaN(r) && Number.isNaN(e);
27
+ return n === e || Number.isNaN(n) && Number.isNaN(e);
27
28
  };
28
- function g(r, e, n) {
29
- if (!r || r.length === 0) return n;
30
- const i = r[0], t = r.slice(1);
29
+ function h(n, e, t) {
30
+ if (!n || n.length === 0) return t;
31
+ const r = n[0], i = n.slice(1);
31
32
  if (Array.isArray(e)) {
32
- const s = Number(i);
33
+ const s = Number(r);
33
34
  if (!isNaN(s) && s >= 0 && s < e.length)
34
35
  return [
35
36
  ...e.slice(0, s),
36
- g(t, e[s], n),
37
+ h(i, e[s], t),
37
38
  ...e.slice(s + 1)
38
39
  ];
39
- throw console.log("errorstate", e, r), new Error(
40
- `Invalid array index "${s}" in path "${r.join(".")}".`
40
+ throw console.log("errorstate", e, n), new Error(
41
+ `Invalid array index "${s}" in path "${n.join(".")}".`
41
42
  );
42
43
  } else if (typeof e == "object" && e !== null) {
43
- if (i && i in e)
44
+ if (r && r in e)
44
45
  return {
45
46
  ...e,
46
- [i]: g(t, e[i], n)
47
+ [r]: h(i, e[r], t)
47
48
  };
48
- throw console.log("Invalid property", i, t, r), new Error(
49
- `Invalid property "${i}" in path "${r.join(".")}".`
49
+ throw console.log("Invalid property", r, i, n), new Error(
50
+ `Invalid property "${r}" in path "${n.join(".")}".`
50
51
  );
51
52
  } else
52
53
  throw new Error(
53
- `Cannot update nested property at path "${r.join(".")}". The path does not exist.`
54
+ `Cannot update nested property at path "${n.join(".")}". The path does not exist.`
54
55
  );
55
56
  }
56
- function h(r, e) {
57
- if (!r || r.length === 0) return e;
58
- const n = r[0], i = r.slice(1);
57
+ function p(n, e) {
58
+ if (!n || n.length === 0) return e;
59
+ const t = n[0], r = n.slice(1);
59
60
  if (Array.isArray(e)) {
60
- const t = Number(n);
61
- if (!isNaN(t) && t >= 0 && t < e.length)
62
- return i.length === 0 ? [...e.slice(0, t), ...e.slice(t + 1)] : [
63
- ...e.slice(0, t),
64
- h(i, e[t]),
65
- ...e.slice(t + 1)
61
+ const i = Number(t);
62
+ if (!isNaN(i) && i >= 0 && i < e.length)
63
+ return r.length === 0 ? [...e.slice(0, i), ...e.slice(i + 1)] : [
64
+ ...e.slice(0, i),
65
+ p(r, e[i]),
66
+ ...e.slice(i + 1)
66
67
  ];
67
68
  throw new Error(
68
- `Invalid array index "${t}" in path "${r.join(".")}".`
69
+ `Invalid array index "${i}" in path "${n.join(".")}".`
69
70
  );
70
71
  } else if (typeof e == "object" && e !== null)
71
- if (i.length === 0) {
72
- const { [n]: t, ...s } = e;
72
+ if (r.length === 0) {
73
+ const { [t]: i, ...s } = e;
73
74
  return s;
74
75
  } else {
75
- if (n in e)
76
+ if (t in e)
76
77
  return {
77
78
  ...e,
78
- [n]: h(i, e[n])
79
+ [t]: p(r, e[t])
79
80
  };
80
81
  throw new Error(
81
- `Invalid property "${n}" in path "${r.join(".")}".`
82
+ `Invalid property "${t}" in path "${n.join(".")}".`
82
83
  );
83
84
  }
84
85
  else
85
86
  throw new Error(
86
- `Cannot delete nested property at path "${r.join(".")}". The path does not exist.`
87
+ `Cannot delete nested property at path "${n.join(".")}". The path does not exist.`
87
88
  );
88
89
  }
89
- function $(r, e) {
90
- let n = r;
90
+ function N(n, e, t) {
91
+ let r = n;
91
92
  for (let i = 0; i < e.length; i++) {
92
- const t = e[i];
93
- if (n == null)
93
+ const s = e[i];
94
+ if (r == null)
94
95
  return;
95
- if (typeof t == "string" && t.startsWith("id:")) {
96
- if (!Array.isArray(n)) {
96
+ if (typeof s == "string" && s.startsWith("id:")) {
97
+ if (!Array.isArray(r)) {
97
98
  console.error("Path segment with 'id:' requires an array.", {
98
99
  path: e,
99
- currentValue: n
100
+ currentValue: r
100
101
  });
101
102
  return;
102
103
  }
103
- const s = t.split(":")[1];
104
- n = n.find((f) => String(f.id) === s);
105
- } else Array.isArray(n) ? n = n[parseInt(t)] : n = n[t];
106
- }
107
- return n;
108
- }
109
- function m(r, e, n) {
110
- if (r.length === 0)
111
- return n;
112
- const i = Array.isArray(e) ? [...e] : { ...e };
113
- let t = i;
114
- for (let f = 0; f < r.length - 1; f++) {
115
- const l = r[f];
116
- if (typeof l == "string" && l.startsWith("id:")) {
117
- if (!Array.isArray(t))
118
- throw new Error(
119
- `Path segment "${l}" requires an array, but got a non-array.`
104
+ const o = e.slice(0, i), f = [t, ...o, s].join("."), l = [t, ...o].join("."), a = w.getState().shadowStateStore.get(l);
105
+ if (!a?.arrayKeys) {
106
+ console.error(
107
+ "No arrayKeys found in shadow state for parent path:",
108
+ l
120
109
  );
121
- const o = l.split(":")[1], a = t.findIndex(
122
- (p) => String(p.id) === o
123
- );
124
- if (a === -1)
125
- throw new Error(`Item with id "${o}" not found in array.`);
126
- t[a] = { ...t[a] }, t = t[a];
127
- } else
128
- t[l] = Array.isArray(t[l]) ? [...t[l]] : { ...t[l] }, t = t[l];
110
+ return;
111
+ }
112
+ const y = a.arrayKeys.indexOf(f);
113
+ if (y === -1) {
114
+ console.error(
115
+ `Item key ${f} not found in parent's arrayKeys:`,
116
+ a.arrayKeys
117
+ );
118
+ return;
119
+ }
120
+ r = r[y];
121
+ } else Array.isArray(r) ? r = r[parseInt(s)] : r = r[s];
129
122
  }
130
- const s = r[r.length - 1];
131
- if (typeof s == "string" && s.startsWith("id:")) {
132
- if (!Array.isArray(t))
133
- throw new Error(
134
- `Final path segment "${s}" requires an array, but got a non-array.`
135
- );
136
- const f = s.split(":")[1], l = t.findIndex(
137
- (o) => String(o.id) === f
138
- );
139
- if (l === -1)
140
- throw new Error(
141
- `Item with id "${f}" not found in array to update.`
142
- );
143
- t[l] = n;
144
- } else
145
- t[s] = n;
146
- return i;
123
+ return r;
147
124
  }
148
- function c(r, e, n = "") {
149
- let i = [];
150
- if (typeof r == "function" && typeof e == "function")
151
- return i;
152
- if (r == null || e === null || e === void 0)
153
- return r !== e ? [n] : i;
154
- if (typeof r != "object" || typeof e != "object")
155
- return r !== e ? [n] : i;
156
- if (Array.isArray(r) && Array.isArray(e)) {
157
- r.length !== e.length && i.push(`${n}`);
158
- const l = Math.min(r.length, e.length);
159
- for (let o = 0; o < l; o++)
160
- r[o] !== e[o] && (i = i.concat(
161
- c(
162
- r[o],
163
- e[o],
164
- n ? `${n}.${o}` : `${o}`
125
+ function u(n, e, t = "") {
126
+ let r = [];
127
+ if (typeof n == "function" && typeof e == "function")
128
+ return r;
129
+ if (n == null || e === null || e === void 0)
130
+ return n !== e ? [t] : r;
131
+ if (typeof n != "object" || typeof e != "object")
132
+ return n !== e ? [t] : r;
133
+ if (Array.isArray(n) && Array.isArray(e)) {
134
+ n.length !== e.length && r.push(`${t}`);
135
+ const f = Math.min(n.length, e.length);
136
+ for (let l = 0; l < f; l++)
137
+ n[l] !== e[l] && (r = r.concat(
138
+ u(
139
+ n[l],
140
+ e[l],
141
+ t ? `${t}.${l}` : `${l}`
165
142
  )
166
143
  ));
167
- if (r.length !== e.length) {
168
- const o = r.length > e.length ? r : e;
169
- for (let a = l; a < o.length; a++)
170
- i.push(n ? `${n}.${a}` : `${a}`);
144
+ if (n.length !== e.length) {
145
+ const l = n.length > e.length ? n : e;
146
+ for (let a = f; a < l.length; a++)
147
+ r.push(t ? `${t}.${a}` : `${a}`);
171
148
  }
172
- return i;
149
+ return r;
173
150
  }
174
- const t = Object.keys(r), s = Object.keys(e);
175
- return Array.from(/* @__PURE__ */ new Set([...t, ...s])).forEach((l) => {
176
- const o = n ? `${n}.${l}` : l;
177
- i = i.concat(
178
- c(r[l], e[l], o)
151
+ const i = Object.keys(n), s = Object.keys(e);
152
+ return Array.from(/* @__PURE__ */ new Set([...i, ...s])).forEach((f) => {
153
+ const l = t ? `${t}.${f}` : f;
154
+ r = r.concat(
155
+ u(n[f], e[f], l)
179
156
  );
180
- }), i;
157
+ }), r;
158
+ }
159
+ function $(n, e) {
160
+ const t = { ...n };
161
+ return c(n) && c(e) && Object.keys(e).forEach((r) => {
162
+ c(e[r]) ? r in n ? t[r] = $(n[r], e[r]) : Object.assign(t, { [r]: e[r] }) : Object.assign(t, { [r]: e[r] });
163
+ }), t;
181
164
  }
182
- function I(r, e) {
183
- return c(r, e).map(
184
- (i) => i.replace(/\[(\w+)\]/g, ".$1").split(".").filter(Boolean)
165
+ function S(n, e) {
166
+ return u(n, e).map(
167
+ (r) => r.replace(/\[(\w+)\]/g, ".$1").split(".").filter(Boolean)
185
168
  );
186
169
  }
187
- function A(r, e, n = "") {
188
- let i = [];
189
- if (r == null || e === null || e === void 0)
190
- return i;
191
- if (Array.isArray(r) && Array.isArray(e))
192
- r.length !== e.length && i.push(n);
193
- else if (typeof r == "object" && typeof e == "object") {
194
- const t = /* @__PURE__ */ new Set([...Object.keys(r), ...Object.keys(e)]);
195
- for (const s of t) {
196
- const f = n ? `${n}.${s}` : s;
197
- (Array.isArray(r[s]) || Array.isArray(e[s])) && (i = i.concat(
198
- A(r[s], e[s], f)
170
+ function A(n, e, t = "") {
171
+ let r = [];
172
+ if (n == null || e === null || e === void 0)
173
+ return r;
174
+ if (Array.isArray(n) && Array.isArray(e))
175
+ n.length !== e.length && r.push(t);
176
+ else if (typeof n == "object" && typeof e == "object") {
177
+ const i = /* @__PURE__ */ new Set([...Object.keys(n), ...Object.keys(e)]);
178
+ for (const s of i) {
179
+ const o = t ? `${t}.${s}` : s;
180
+ (Array.isArray(n[s]) || Array.isArray(e[s])) && (r = r.concat(
181
+ A(n[s], e[s], o)
199
182
  ));
200
183
  }
201
184
  }
202
- return i;
185
+ return r;
203
186
  }
204
- function v(r, e) {
205
- return A(r, e).map(
206
- (i) => i.replace(/\[(\w+)\]/g, ".$1").split(".").filter(Boolean)
187
+ function O(n, e) {
188
+ return A(n, e).map(
189
+ (r) => r.replace(/\[(\w+)\]/g, ".$1").split(".").filter(Boolean)
207
190
  );
208
191
  }
209
- function N(r) {
192
+ function I(n) {
210
193
  const e = (s) => Object.values(s).some(
211
- (f) => f?.hasOwnProperty("initialState")
194
+ (o) => o?.hasOwnProperty("initialState")
212
195
  );
213
- let n = {};
214
- const i = (s) => {
215
- const f = {};
216
- return Object.entries(s).forEach(([l, o]) => {
217
- o?.initialState ? (n = { ...n ?? {}, [l]: o }, f[l] = o.initialState) : f[l] = o;
218
- }), f;
196
+ let t = {};
197
+ const r = (s) => {
198
+ const o = {};
199
+ return Object.entries(s).forEach(([f, l]) => {
200
+ l?.initialState ? (t = { ...t ?? {}, [f]: l }, o[f] = l.initialState) : o[f] = l;
201
+ }), o;
219
202
  };
220
- return [e(r) ? i(r) : r, n];
203
+ return [e(n) ? r(n) : n, t];
221
204
  }
222
- function S(r, e) {
223
- let n = null;
224
- const i = (...t) => {
225
- n && clearTimeout(n), n = setTimeout(() => r(...t), e);
205
+ function D(n, e) {
206
+ let t = null;
207
+ const r = (...i) => {
208
+ t && clearTimeout(t), t = setTimeout(() => n(...i), e);
226
209
  };
227
- return i.cancel = () => {
228
- n && (clearTimeout(n), n = null);
229
- }, i;
210
+ return r.cancel = () => {
211
+ t && (clearTimeout(t), t = null);
212
+ }, r;
230
213
  }
231
214
  export {
232
- S as debounce,
233
- h as deleteNestedProperty,
215
+ D as debounce,
216
+ $ as deepMerge,
217
+ p as deleteNestedProperty,
234
218
  A as getArrayLengthDifferences,
235
- v as getArrayLengthDifferencesArray,
236
- c as getDifferences,
237
- I as getDifferencesArray,
238
- $ as getNestedValue,
239
- u as isArray,
240
- d as isDeepEqual,
241
- w as isFunction,
242
- y as isObject,
243
- N as transformStateFunc,
244
- g as updateNestedProperty,
245
- m as updateNestedPropertyIds
219
+ O as getArrayLengthDifferencesArray,
220
+ u as getDifferences,
221
+ S as getDifferencesArray,
222
+ N as getNestedValue,
223
+ d as isArray,
224
+ g as isDeepEqual,
225
+ v as isFunction,
226
+ c as isObject,
227
+ I as transformStateFunc,
228
+ h as updateNestedProperty
246
229
  };
247
230
  //# sourceMappingURL=utility.js.map