fractostate 4.8.1 → 4.8.4
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/cjs/index.js +7 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/src/proxy.js +20 -57
- package/dist/cjs/src/proxy.js.map +1 -1
- package/dist/cjs/src/store.js +24 -2
- package/dist/cjs/src/store.js.map +1 -1
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/src/proxy.js +20 -57
- package/dist/esm/src/proxy.js.map +1 -1
- package/dist/esm/src/store.js +24 -2
- package/dist/esm/src/store.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/plugins.d.ts +1 -1
- package/dist/types-CrNg0-d5.d.ts +288 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sources":["../../../src/store.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions } from \"./types\";\n\n// Clone cache to avoid redundant deep clones\nconst cloneCache = new WeakMap<any, any>();\nconst CLONE_CACHE_SIZE = 1000;\nlet cacheSize = 0;\n\n/**\n * Fast & Isolated Memory Vault\n * Ultra-performant in-memory store with deep cloning and batching\n * NO PERSISTENCE - Pure memory for maximum safety and speed\n *\n * Reduced allocations, cached clones, faster batching\n */\nclass MemoryVault {\n private vault = new Map<string, any>();\n private initialValues = new Map<string, any>();\n private listeners = new Map<\n string,\n Map<() => void, { label: string; timestamp: number }>\n >();\n private histories = new Map<string, CircularBuffer<any>>();\n private redoStacks = new Map<string, any[]>();\n private debounceTimers = new Map<string, number>();\n private traces = new Map<\n string,\n Array<{\n actor: string;\n type: string;\n path?: string[];\n value: any;\n timestamp: number;\n }>\n >();\n private consumers = new Map<string, Set<string>>(); // flowKey -> Set of actor names\n private parents = new Map<string, string>(); // flowKey -> parent flowKey\n\n // Use Set for O(1) deduplication and fast iteration\n private batchQueue = new Set<string>();\n private batchScheduled = false;\n\n private hasGlobalListeners = false;\n private hasEventListeners = false;\n\n /** Internal tracking for async hydration (plugins) */\n public __hydrating__ = new Set<string>();\n\n private pluginLogs = new Map<\n string,\n Array<{\n plugin: string;\n action: string;\n description: string;\n timestamp: number;\n data?: any;\n }>\n >();\n\n public logPluginActivity(\n key: string,\n activity: {\n plugin: string;\n action: string;\n description: string;\n data?: any;\n },\n ) {\n let logs = this.pluginLogs.get(key);\n if (!logs) {\n logs = [];\n this.pluginLogs.set(key, logs);\n }\n logs.unshift({ ...activity, timestamp: Date.now() });\n if (logs.length > 50) logs.pop();\n this.notify(key);\n }\n\n public getPluginLogs(key: string) {\n return this.pluginLogs.get(key) || [];\n }\n\n public setParent(key: string, parentKey: string) {\n this.parents.set(key, parentKey);\n }\n\n public getParent(key: string) {\n return this.parents.get(key);\n }\n\n public getInitial(key: string) {\n return this.initialValues.get(key);\n }\n\n public getOptions(key: string) {\n return this.flowOptionsMap.get(key);\n }\n\n constructor() {\n this.setupGlobalAccess();\n this.setupAutoCleanup();\n }\n\n /**\n * Defines a global accessor for internal debugging (DevTools).\n */\n private setupGlobalAccess() {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.__FRACTO_VAULT__ = this;\n }\n }\n\n /**\n * Periodically cleans up orphaned listeners.\n */\n private setupAutoCleanup() {\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => {\n this.listeners.forEach((map, key) => {\n if (map.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n });\n }, 300000); // 5 min\n }\n }\n\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n get(key: string, initialValue?: any, options?: FlowOptions) {\n // Fast path for existing keys\n if (this.vault.has(key)) {\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n const val = this.vault.get(key);\n // BYPASS_CLONE is used internally by the proxy for performance during rapid updates\n return options?.bypassClone ? val : deepClone(val);\n }\n\n if (initialValue === undefined) return undefined;\n\n // Clone once and reuse\n let startingValue = deepClone(initialValue);\n\n // Initialize core structures BEFORE plugins run to handle re-entrancy\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n\n if (options?.timeTravel) {\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\n }\n\n // Save options for devtools early\n if (options) {\n this.flowOptionsMap.set(key, options);\n }\n\n // Plugin Hook: onInit\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n plugin.onInit?.({ key, initial: startingValue, store: this });\n }\n }\n\n // Plugin Hook: onHydrate\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.onHydrate) {\n const hydrated = plugin.onHydrate({\n key,\n store: this,\n initial: startingValue,\n });\n if (hydrated !== undefined) {\n if (hydrated instanceof Promise) {\n hydrated.then((val) => {\n if (val !== undefined) this.set(key, val, options);\n });\n } else {\n startingValue = hydrated;\n this.vault.set(key, startingValue); // Keep vault in sync\n break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n\n // Handle Auto-Run Effects\n if (options?.effects && this.proxyCreator) {\n const vaultInstance = this;\n const boundActions = {} as any;\n const dynamicOps = {\n get self() {\n return vaultInstance.proxyCreator!(\n key,\n [],\n vaultInstance.vault.get(key),\n { ...options, actions: boundActions },\n );\n },\n get state() {\n return vaultInstance.vault.get(key);\n },\n get initialState() {\n return vaultInstance.initialValues.get(key);\n },\n get actions() {\n return boundActions;\n },\n };\n\n if (options.actions) {\n for (const [name, fn] of Object.entries(options.actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(dynamicOps);\n }\n }\n\n const effectStates = options.effects.map((effect) => {\n const initialDeps = effect.deps\n ? effect.deps(startingValue)\n : undefined;\n\n // Run immediately (Mount)\n effect.run(dynamicOps as any);\n\n return {\n prevDeps: initialDeps,\n depsFn: effect.deps,\n run: effect.run,\n };\n });\n\n // Subscribe for updates if explicit deps are provided\n if (effectStates.some((e) => e.depsFn)) {\n this.subscribe(key, () => {\n const currentState = this.vault.get(key);\n effectStates.forEach((e) => {\n if (e.depsFn) {\n const newDeps = e.depsFn(currentState);\n if (!deepEqual(e.prevDeps, newDeps)) {\n e.prevDeps = newDeps;\n e.run(dynamicOps as any);\n }\n }\n });\n });\n }\n }\n\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n return startingValue;\n }\n\n /**\n * Collects operations from plugins for a specific flow.\n */\n getPluginOps(key: string, options?: FlowOptions): Record<string, any> {\n const ops: Record<string, any> = {};\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.getOps) {\n ops[`_${plugin.name}`] = plugin.getOps({ key, store: this });\n }\n }\n }\n return ops;\n }\n\n private proxyCreator: Function | null = null;\n setProxyCreator(fn: Function) {\n this.proxyCreator = fn;\n }\n\n /**\n * Updates state in the vault with optional debouncing and middleware support.\n */\n set(key: string, newValue: any, options: FlowOptions = {}) {\n const prevState = this.vault.get(key);\n let stateToSet = newValue;\n\n // Apply synchronous middleware\n if (options.middleware) {\n for (const fn of options.middleware) {\n stateToSet = fn(stateToSet);\n }\n }\n\n // Fast equality check first\n if (!options.force && !options.skipEquality) {\n if (prevState === stateToSet) return;\n if (!deepEqual(prevState, stateToSet)) {\n // Different, continue\n } else {\n return; // Equal, skip update\n }\n }\n\n if (options.debounce) {\n this.debouncedSet(key, stateToSet, options);\n return;\n }\n\n this.applySet(key, stateToSet, options);\n\n // Plugin Hook: onUpdate\n if (options.plugins) {\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({\n key,\n prev: prevState,\n next: stateToSet,\n store: this,\n });\n }\n }\n }\n\n /**\n * Executes a debounced state update.\n */\n private debouncedSet(key: string, value: any, options: FlowOptions) {\n const existing = this.debounceTimers.get(key);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.applySet(key, value, options);\n\n // Plugin Hook: onUpdate (Debounced)\n if (options.plugins) {\n const prevState = this.vault.get(key);\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({ key, prev: prevState, next: value, store: this });\n }\n }\n\n this.debounceTimers.delete(key);\n }, options.debounce);\n\n this.debounceTimers.set(key, timer as any);\n }\n\n /**\n * Core logic for applying a state update and managing history.\n */\n private applySet(key: string, stateToSet: any, options: FlowOptions) {\n this.vault.set(key, stateToSet);\n\n // Only create history if timeTravel is enabled\n if (options.timeTravel) {\n let history = this.histories.get(key);\n if (!history) {\n history = new CircularBuffer(100);\n this.histories.set(key, history);\n }\n history.push(deepClone(stateToSet));\n\n let redo = this.redoStacks.get(key);\n if (!redo) {\n redo = [];\n this.redoStacks.set(key, redo);\n }\n redo.length = 0;\n }\n\n if (this.hasEventListeners) {\n this.emitEvent(\"write\", key, {\n actor: options.actor,\n path: (options as any)._path,\n value: stateToSet,\n });\n }\n\n // Store Trace\n if (options.actor) {\n let flowTraces = this.traces.get(key);\n if (!flowTraces) {\n flowTraces = [];\n this.traces.set(key, flowTraces);\n }\n flowTraces.push({\n actor: options.actor,\n type: (options as any)._op || \"write\",\n path: (options as any)._path,\n value: stateToSet,\n timestamp: Date.now(),\n });\n // Limit traces to 50 per flow\n if (flowTraces.length > 50) flowTraces.shift();\n }\n\n this.scheduleBatchNotify(key);\n }\n\n /**\n * Schedules a microtask to batch notifications and optimize React renders.\n * Use array instead of Set for better performance\n */\n private scheduleBatchNotify(key: string) {\n this.batchQueue.add(key);\n\n if (this.batchScheduled) return;\n this.batchScheduled = true;\n queueMicrotask(() => this.flushBatchNotify());\n }\n\n /**\n * Flushes and notifies all queued listeners.\n * Direct iteration without intermediate array\n */\n private flushBatchNotify() {\n this.batchScheduled = false;\n if (this.batchQueue.size === 0) return;\n\n // Direct iteration over the Set\n this.batchQueue.forEach((key) => {\n this.notify(key);\n });\n\n this.batchQueue.clear();\n }\n\n private globalListeners = new Set<() => void>();\n private eventListeners = new Set<\n (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void\n >();\n\n /**\n * Connects a listener to a specific flow key.\n */\n subscribe(\n key: string,\n listener: () => void,\n metadataOrActor?: string | { label: string },\n ) {\n const label =\n typeof metadataOrActor === \"string\"\n ? metadataOrActor\n : metadataOrActor?.label || \"Anonymous Subscriber\";\n\n if (typeof metadataOrActor === \"string\") {\n let flowConsumers = this.consumers.get(key);\n if (!flowConsumers) {\n flowConsumers = new Set();\n this.consumers.set(key, flowConsumers);\n }\n flowConsumers.add(metadataOrActor);\n }\n\n let map = this.listeners.get(key);\n if (!map) {\n map = new Map();\n this.listeners.set(key, map);\n }\n map.set(listener, { label, timestamp: Date.now() });\n\n return () => {\n const currentMap = this.listeners.get(key);\n if (currentMap) {\n currentMap.delete(listener);\n if (currentMap.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n }\n };\n }\n\n /**\n * Subscribe to ALL changes in the store. Strictly for DevTools.\n */\n subscribeGlobal(listener: () => void) {\n this.globalListeners.add(listener);\n this.hasGlobalListeners = true;\n return () => {\n this.globalListeners.delete(listener);\n this.hasGlobalListeners = this.globalListeners.size > 0;\n };\n }\n\n /**\n * Subscribe to specific operational events.\n */\n subscribeEvents(\n listener: (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void,\n ) {\n this.eventListeners.add(listener);\n this.hasEventListeners = true;\n return () => {\n this.eventListeners.delete(listener);\n this.hasEventListeners = this.eventListeners.size > 0;\n };\n }\n\n private emitEvent(\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\",\n key: string,\n data?: { actor?: string; path?: string[]; value?: any },\n ) {\n this.eventListeners.forEach((l) => l({ type, key, ...data }));\n }\n\n /**\n * Returns a complete snapshot of the store state for debugging.\n */\n getDebugSnapshot() {\n const snap: Record<string, any> = {};\n for (const key of this.vault.keys()) {\n const val = this.vault.get(key);\n const initial = this.initialValues.get(key);\n snap[key] = {\n value: val,\n meta: {\n historySize: this.histories.get(key)?.length() || 0,\n redoSize: this.redoStacks.get(key)?.length || 0,\n listeners: Array.from(this.listeners.get(key)?.values() || []),\n isDebouncing: this.debounceTimers.has(key),\n isDirty: !deepEqual(val, initial),\n traces: this.traces.get(key) || [],\n consumers: Array.from(this.consumers.get(key) || []),\n parent: this.parents.get(key),\n plugins: this.getPluginsInfo(key),\n pluginLogs: this.getPluginLogs(key),\n },\n };\n }\n return snap;\n }\n\n /**\n * Internal helper to get plugin info for devtools.\n */\n private getPluginsInfo(\n key: string,\n ): Array<{ name: string; hasOps: boolean }> {\n // We need to keep track of flow options to know which plugins are attached.\n // Let's add a map to store flow options.\n const options = this.flowOptionsMap.get(key);\n if (!options?.plugins) return [];\n return options.plugins.map((p) => ({\n name: p.name,\n hasOps: !!p.getOps,\n }));\n }\n\n private flowOptionsMap = new Map<string, FlowOptions>();\n\n /**\n * Directly notifies all listeners of a specific key.\n */\n private notify(key: string) {\n this.listeners.get(key)?.forEach((_meta, listener) => listener());\n if (this.hasGlobalListeners) {\n this.globalListeners.forEach((l) => l());\n }\n }\n\n /**\n * Reverts the state to the previous version in history.\n */\n undo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (history && history.length() > 1) {\n const current = history.pop();\n if (current) redo?.push(current);\n const prev = history.peek();\n this.vault.set(key, prev);\n this.emitEvent(\"undo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Restores the state to the next version in the redo stack.\n */\n redo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (redo && redo.length > 0) {\n const next = redo.pop();\n history?.push(next);\n this.vault.set(key, next);\n this.emitEvent(\"redo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Resets a flow to its initial value.\n */\n reset(key: string) {\n const initial = this.initialValues.get(key);\n if (initial !== undefined) {\n this.emitEvent(\"reset\", key);\n this.set(key, initial);\n }\n }\n\n /**\n * Resets all flows in the store to their initial values.\n */\n resetAll() {\n this.initialValues.forEach((_, key) => {\n this.reset(key);\n });\n }\n\n getHistory(key: string) {\n return this.histories.get(key)?.toArray() || [];\n }\n getRedoStack(key: string) {\n return this.redoStacks.get(key) || [];\n }\n\n /**\n * Clears the entire store and all timers.\n */\n clearAll() {\n this.debounceTimers.forEach((t) => clearTimeout(t));\n this.vault.clear();\n this.initialValues.clear();\n this.listeners.clear();\n this.histories.clear();\n this.redoStacks.clear();\n // Clear clone cache\n cacheSize = 0;\n }\n}\n\n/**\n * Circular Buffer implementation for high-performance memory-efficient history.\n * Pre-allocated array\n */\nclass CircularBuffer<T> {\n private buffer: T[];\n private head = 0;\n private size = 0;\n private maxSize: number;\n\n constructor(maxSize: number, initial: T[] = []) {\n this.maxSize = maxSize;\n // Pre-allocate full buffer\n this.buffer = new Array(maxSize);\n initial.forEach((i) => this.push(i));\n }\n\n push(item: T) {\n this.buffer[this.head] = item;\n this.head = (this.head + 1) % this.maxSize;\n if (this.size < this.maxSize) this.size++;\n }\n\n pop(): T | undefined {\n if (this.size <= 0) return undefined;\n this.head = (this.head - 1 + this.maxSize) % this.maxSize;\n this.size--;\n return this.buffer[this.head];\n }\n\n peek(): T | undefined {\n return this.size > 0\n ? this.buffer[(this.head - 1 + this.maxSize) % this.maxSize]\n : undefined;\n }\n\n length() {\n return this.size;\n }\n\n toArray(): T[] {\n // Pre-allocate result array\n const res = new Array(this.size);\n for (let i = 0; i < this.size; i++) {\n res[i] =\n this.buffer[(this.head - this.size + i + this.maxSize) % this.maxSize];\n }\n return res;\n }\n}\n\n/**\n * High-performance deep cloning utility.\n * Cached clones, early returns, manual iteration\n */\nfunction deepClone<T>(obj: T): T {\n // Fast path for primitives\n if (obj === null || typeof obj !== \"object\") return obj;\n\n // Check cache first (for immutable objects)\n if (cloneCache.has(obj as any)) {\n return cloneCache.get(obj as any);\n }\n\n let cloned: any;\n\n if (Array.isArray(obj)) {\n // Manual array copy\n const len = obj.length;\n cloned = new Array(len);\n for (let i = 0; i < len; i++) {\n cloned[i] = deepClone(obj[i]);\n }\n } else {\n // Manual object copy\n cloned = {};\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cloned[key] = deepClone((obj as any)[key]);\n }\n }\n\n // Cache with size limit\n if (cacheSize < CLONE_CACHE_SIZE) {\n cloneCache.set(obj as any, cloned);\n cacheSize++;\n } else {\n // Basic LRU-ish: reset if too big to avoid memory pressure but keep performance\n cacheSize = 0;\n }\n\n return cloned;\n}\n\n/**\n * High-performance deep equality utility.\n * Early returns, fast type checks\n */\nfunction deepEqual(a: any, b: any): boolean {\n // Identity check first\n if (a === b) return true;\n\n // Fast type/null checks\n const typeA = typeof a;\n const typeB = typeof b;\n\n if (typeA !== typeB || a === null || b === null) return false;\n if (typeA !== \"object\") return false;\n\n // Array fast path\n const isArrayA = Array.isArray(a);\n const isArrayB = Array.isArray(b);\n\n if (isArrayA !== isArrayB) return false;\n\n if (isArrayA) {\n const len = a.length;\n if (len !== b.length) return false;\n for (let i = 0; i < len; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n // Object comparison with early exit\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n const len = keysA.length;\n\n if (len !== keysB.length) return false;\n\n for (let i = 0; i < len; i++) {\n const key = keysA[i];\n if (a[key] !== b[key] && !deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n}\n\nexport const store = new MemoryVault();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sources":["../../../src/store.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions } from \"./types\";\n\n// Clone cache to avoid redundant deep clones\nconst cloneCache = new WeakMap<any, any>();\nconst CLONE_CACHE_SIZE = 1000;\nlet cacheSize = 0;\n\n/**\n * Fast & Isolated Memory Vault\n * Ultra-performant in-memory store with deep cloning and batching\n * NO PERSISTENCE - Pure memory for maximum safety and speed\n *\n * Reduced allocations, cached clones, faster batching\n */\nclass MemoryVault {\n private vault = new Map<string, any>();\n private initialValues = new Map<string, any>();\n private listeners = new Map<\n string,\n Map<() => void, { label: string; timestamp: number }>\n >();\n private histories = new Map<string, CircularBuffer<any>>();\n private redoStacks = new Map<string, any[]>();\n private debounceTimers = new Map<string, number>();\n private traces = new Map<\n string,\n Array<{\n actor: string;\n type: string;\n path?: string[];\n value: any;\n timestamp: number;\n }>\n >();\n private consumers = new Map<string, Set<string>>(); // flowKey -> Set of actor names\n private parents = new Map<string, string>(); // flowKey -> parent flowKey\n private effectStates = new Map<string, any[]>(); // flowKey -> effect states (with cleanups)\n\n // Use Set for O(1) deduplication and fast iteration\n private batchQueue = new Set<string>();\n private batchScheduled = false;\n\n private hasGlobalListeners = false;\n private hasEventListeners = false;\n\n /** Internal tracking for async hydration (plugins) */\n public __hydrating__ = new Set<string>();\n\n private pluginLogs = new Map<\n string,\n Array<{\n plugin: string;\n action: string;\n description: string;\n timestamp: number;\n data?: any;\n }>\n >();\n\n public logPluginActivity(\n key: string,\n activity: {\n plugin: string;\n action: string;\n description: string;\n data?: any;\n },\n ) {\n let logs = this.pluginLogs.get(key);\n if (!logs) {\n logs = [];\n this.pluginLogs.set(key, logs);\n }\n logs.unshift({ ...activity, timestamp: Date.now() });\n if (logs.length > 50) logs.pop();\n this.notify(key);\n }\n\n public getPluginLogs(key: string) {\n return this.pluginLogs.get(key) || [];\n }\n\n public setParent(key: string, parentKey: string) {\n this.parents.set(key, parentKey);\n }\n\n public getParent(key: string) {\n return this.parents.get(key);\n }\n\n public getInitial(key: string) {\n return this.initialValues.get(key);\n }\n\n public getOptions(key: string) {\n return this.flowOptionsMap.get(key);\n }\n\n constructor() {\n this.setupGlobalAccess();\n this.setupAutoCleanup();\n }\n\n /**\n * Defines a global accessor for internal debugging (DevTools).\n */\n private setupGlobalAccess() {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.__FRACTO_VAULT__ = this;\n }\n }\n\n /**\n * Periodically cleans up orphaned listeners.\n */\n private setupAutoCleanup() {\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => {\n this.listeners.forEach((map, key) => {\n if (map.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n });\n }, 300000); // 5 min\n }\n }\n\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n get(key: string, initialValue?: any, options?: FlowOptions) {\n // Fast path for existing keys\n if (this.vault.has(key)) {\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n const val = this.vault.get(key);\n // BYPASS_CLONE is used internally by the proxy for performance during rapid updates\n return options?.bypassClone ? val : deepClone(val);\n }\n\n if (initialValue === undefined) return undefined;\n\n // Clone once and reuse\n let startingValue = deepClone(initialValue);\n\n // Initialize core structures BEFORE plugins run to handle re-entrancy\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n\n if (options?.timeTravel) {\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\n }\n\n // Save options for devtools early\n if (options) {\n this.flowOptionsMap.set(key, options);\n }\n\n // Plugin Hook: onInit\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n plugin.onInit?.({ key, initial: startingValue, store: this });\n }\n }\n\n // Plugin Hook: onHydrate\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.onHydrate) {\n const hydrated = plugin.onHydrate({\n key,\n store: this,\n initial: startingValue,\n });\n if (hydrated !== undefined) {\n if (hydrated instanceof Promise) {\n hydrated.then((val) => {\n if (val !== undefined) this.set(key, val, options);\n });\n } else {\n startingValue = hydrated;\n this.vault.set(key, startingValue); // Keep vault in sync\n break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n\n // Handle Auto-Run Effects\n if (options?.effects && this.proxyCreator) {\n const vaultInstance = this;\n const boundActions = {} as any;\n const dynamicOps = {\n get self() {\n return vaultInstance.proxyCreator!(\n key,\n [],\n vaultInstance.vault.get(key),\n { ...options, actions: boundActions },\n );\n },\n get state() {\n return vaultInstance.vault.get(key);\n },\n get initialState() {\n return vaultInstance.initialValues.get(key);\n },\n get actions() {\n return boundActions;\n },\n };\n\n if (options.actions) {\n for (const [name, fn] of Object.entries(options.actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(dynamicOps);\n }\n }\n\n const effectStates = options.effects.map((effect) => {\n const initialDeps = effect.deps\n ? effect.deps(startingValue)\n : undefined;\n\n // Run immediately (Mount)\n const possibleCleanup = effect.run(dynamicOps as any);\n\n return {\n prevDeps: initialDeps,\n depsFn: effect.deps,\n run: effect.run,\n cleanup:\n typeof possibleCleanup === \"function\" ? possibleCleanup : undefined,\n };\n });\n this.effectStates.set(key, effectStates);\n\n // Subscribe for updates if explicit deps are provided\n if (effectStates.some((e) => e.depsFn)) {\n this.subscribe(key, () => {\n const currentState = this.vault.get(key);\n effectStates.forEach((e) => {\n if (e.depsFn) {\n const newDeps = e.depsFn(currentState);\n if (!deepEqual(e.prevDeps, newDeps)) {\n e.prevDeps = newDeps;\n // Cleanup previous run if needed\n if (e.cleanup) e.cleanup();\n\n const possibleCleanup = e.run(dynamicOps as any);\n e.cleanup =\n typeof possibleCleanup === \"function\"\n ? possibleCleanup\n : undefined;\n }\n }\n });\n });\n }\n }\n\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n return startingValue;\n }\n\n /**\n * Collects operations from plugins for a specific flow.\n */\n getPluginOps(key: string, options?: FlowOptions): Record<string, any> {\n const ops: Record<string, any> = {};\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.getOps) {\n ops[`_${plugin.name}`] = plugin.getOps({ key, store: this });\n }\n }\n }\n return ops;\n }\n\n private proxyCreator: Function | null = null;\n setProxyCreator(fn: Function) {\n this.proxyCreator = fn;\n }\n\n /**\n * Updates state in the vault with optional debouncing and middleware support.\n */\n set(key: string, newValue: any, options: FlowOptions = {}) {\n const prevState = this.vault.get(key);\n let stateToSet = newValue;\n\n // Apply synchronous middleware\n if (options.middleware) {\n for (const fn of options.middleware) {\n stateToSet = fn(stateToSet);\n }\n }\n\n // Fast equality check first\n if (!options.force && !options.skipEquality) {\n if (prevState === stateToSet) return;\n if (!deepEqual(prevState, stateToSet)) {\n // Different, continue\n } else {\n return; // Equal, skip update\n }\n }\n\n if (options.debounce) {\n this.debouncedSet(key, stateToSet, options);\n return;\n }\n\n this.applySet(key, stateToSet, options);\n\n // Plugin Hook: onUpdate\n if (options.plugins) {\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({\n key,\n prev: prevState,\n next: stateToSet,\n store: this,\n });\n }\n }\n }\n\n /**\n * Executes a debounced state update.\n */\n private debouncedSet(key: string, value: any, options: FlowOptions) {\n const existing = this.debounceTimers.get(key);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.applySet(key, value, options);\n\n // Plugin Hook: onUpdate (Debounced)\n if (options.plugins) {\n const prevState = this.vault.get(key);\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({ key, prev: prevState, next: value, store: this });\n }\n }\n\n this.debounceTimers.delete(key);\n }, options.debounce);\n\n this.debounceTimers.set(key, timer as any);\n }\n\n /**\n * Core logic for applying a state update and managing history.\n */\n private applySet(key: string, stateToSet: any, options: FlowOptions) {\n this.vault.set(key, stateToSet);\n\n // Only create history if timeTravel is enabled\n if (options.timeTravel) {\n let history = this.histories.get(key);\n if (!history) {\n history = new CircularBuffer(100);\n this.histories.set(key, history);\n }\n history.push(deepClone(stateToSet));\n\n let redo = this.redoStacks.get(key);\n if (!redo) {\n redo = [];\n this.redoStacks.set(key, redo);\n }\n redo.length = 0;\n }\n\n if (this.hasEventListeners) {\n this.emitEvent(\"write\", key, {\n actor: options.actor,\n path: (options as any)._path,\n value: stateToSet,\n });\n }\n\n // Store Trace\n if (options.actor) {\n let flowTraces = this.traces.get(key);\n if (!flowTraces) {\n flowTraces = [];\n this.traces.set(key, flowTraces);\n }\n flowTraces.push({\n actor: options.actor,\n type: (options as any)._op || \"write\",\n path: (options as any)._path,\n value: stateToSet,\n timestamp: Date.now(),\n });\n // Limit traces to 50 per flow\n if (flowTraces.length > 50) flowTraces.shift();\n }\n\n this.scheduleBatchNotify(key);\n }\n\n /**\n * Schedules a microtask to batch notifications and optimize React renders.\n * Use array instead of Set for better performance\n */\n private scheduleBatchNotify(key: string) {\n this.batchQueue.add(key);\n\n if (this.batchScheduled) return;\n this.batchScheduled = true;\n queueMicrotask(() => this.flushBatchNotify());\n }\n\n /**\n * Flushes and notifies all queued listeners.\n * Direct iteration without intermediate array\n */\n private flushBatchNotify() {\n this.batchScheduled = false;\n if (this.batchQueue.size === 0) return;\n\n // Direct iteration over the Set\n this.batchQueue.forEach((key) => {\n this.notify(key);\n });\n\n this.batchQueue.clear();\n }\n\n private globalListeners = new Set<() => void>();\n private eventListeners = new Set<\n (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void\n >();\n\n /**\n * Connects a listener to a specific flow key.\n */\n subscribe(\n key: string,\n listener: () => void,\n metadataOrActor?: string | { label: string },\n ) {\n const label =\n typeof metadataOrActor === \"string\"\n ? metadataOrActor\n : metadataOrActor?.label || \"Anonymous Subscriber\";\n\n if (typeof metadataOrActor === \"string\") {\n let flowConsumers = this.consumers.get(key);\n if (!flowConsumers) {\n flowConsumers = new Set();\n this.consumers.set(key, flowConsumers);\n }\n flowConsumers.add(metadataOrActor);\n }\n\n let map = this.listeners.get(key);\n if (!map) {\n map = new Map();\n this.listeners.set(key, map);\n }\n map.set(listener, { label, timestamp: Date.now() });\n\n return () => {\n const currentMap = this.listeners.get(key);\n if (currentMap) {\n currentMap.delete(listener);\n if (currentMap.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n }\n };\n }\n\n /**\n * Subscribe to ALL changes in the store. Strictly for DevTools.\n */\n subscribeGlobal(listener: () => void) {\n this.globalListeners.add(listener);\n this.hasGlobalListeners = true;\n return () => {\n this.globalListeners.delete(listener);\n this.hasGlobalListeners = this.globalListeners.size > 0;\n };\n }\n\n /**\n * Subscribe to specific operational events.\n */\n subscribeEvents(\n listener: (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void,\n ) {\n this.eventListeners.add(listener);\n this.hasEventListeners = true;\n return () => {\n this.eventListeners.delete(listener);\n this.hasEventListeners = this.eventListeners.size > 0;\n };\n }\n\n private emitEvent(\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\",\n key: string,\n data?: { actor?: string; path?: string[]; value?: any },\n ) {\n this.eventListeners.forEach((l) => l({ type, key, ...data }));\n }\n\n /**\n * Returns a complete snapshot of the store state for debugging.\n */\n getDebugSnapshot() {\n const snap: Record<string, any> = {};\n for (const key of this.vault.keys()) {\n const val = this.vault.get(key);\n const initial = this.initialValues.get(key);\n snap[key] = {\n value: val,\n meta: {\n historySize: this.histories.get(key)?.length() || 0,\n redoSize: this.redoStacks.get(key)?.length || 0,\n listeners: Array.from(this.listeners.get(key)?.values() || []),\n isDebouncing: this.debounceTimers.has(key),\n isDirty: !deepEqual(val, initial),\n traces: this.traces.get(key) || [],\n consumers: Array.from(this.consumers.get(key) || []),\n parent: this.parents.get(key),\n plugins: this.getPluginsInfo(key),\n pluginLogs: this.getPluginLogs(key),\n },\n };\n }\n return snap;\n }\n\n /**\n * Internal helper to get plugin info for devtools.\n */\n private getPluginsInfo(\n key: string,\n ): Array<{ name: string; hasOps: boolean }> {\n // We need to keep track of flow options to know which plugins are attached.\n // Let's add a map to store flow options.\n const options = this.flowOptionsMap.get(key);\n if (!options?.plugins) return [];\n return options.plugins.map((p) => ({\n name: p.name,\n hasOps: !!p.getOps,\n }));\n }\n\n private flowOptionsMap = new Map<string, FlowOptions>();\n\n /**\n * Directly notifies all listeners of a specific key.\n */\n private notify(key: string) {\n this.listeners.get(key)?.forEach((_meta, listener) => listener());\n if (this.hasGlobalListeners) {\n this.globalListeners.forEach((l) => l());\n }\n }\n\n /**\n * Reverts the state to the previous version in history.\n */\n undo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (history && history.length() > 1) {\n const current = history.pop();\n if (current) redo?.push(current);\n const prev = history.peek();\n this.vault.set(key, prev);\n this.emitEvent(\"undo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Restores the state to the next version in the redo stack.\n */\n redo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (redo && redo.length > 0) {\n const next = redo.pop();\n history?.push(next);\n this.vault.set(key, next);\n this.emitEvent(\"redo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Resets a flow to its initial value.\n */\n reset(key: string) {\n const initial = this.initialValues.get(key);\n if (initial !== undefined) {\n this.emitEvent(\"reset\", key);\n this.set(key, initial);\n }\n }\n\n /**\n * Resets all flows in the store to their initial values.\n */\n resetAll() {\n this.initialValues.forEach((_, key) => {\n this.reset(key);\n });\n }\n\n getHistory(key: string) {\n return this.histories.get(key)?.toArray() || [];\n }\n getRedoStack(key: string) {\n return this.redoStacks.get(key) || [];\n }\n\n /**\n * Clears the entire store and all timers.\n */\n clearAll() {\n this.effectStates.forEach((states) => {\n states.forEach((e) => {\n if (e.cleanup) e.cleanup();\n });\n });\n this.effectStates.clear();\n\n this.debounceTimers.forEach((t) => clearTimeout(t));\n this.vault.clear();\n this.initialValues.clear();\n this.listeners.clear();\n this.histories.clear();\n this.redoStacks.clear();\n // Clear clone cache\n cacheSize = 0;\n }\n}\n\n/**\n * Circular Buffer implementation for high-performance memory-efficient history.\n * Pre-allocated array\n */\nclass CircularBuffer<T> {\n private buffer: T[];\n private head = 0;\n private size = 0;\n private maxSize: number;\n\n constructor(maxSize: number, initial: T[] = []) {\n this.maxSize = maxSize;\n // Pre-allocate full buffer\n this.buffer = new Array(maxSize);\n initial.forEach((i) => this.push(i));\n }\n\n push(item: T) {\n this.buffer[this.head] = item;\n this.head = (this.head + 1) % this.maxSize;\n if (this.size < this.maxSize) this.size++;\n }\n\n pop(): T | undefined {\n if (this.size <= 0) return undefined;\n this.head = (this.head - 1 + this.maxSize) % this.maxSize;\n this.size--;\n return this.buffer[this.head];\n }\n\n peek(): T | undefined {\n return this.size > 0\n ? this.buffer[(this.head - 1 + this.maxSize) % this.maxSize]\n : undefined;\n }\n\n length() {\n return this.size;\n }\n\n toArray(): T[] {\n // Pre-allocate result array\n const res = new Array(this.size);\n for (let i = 0; i < this.size; i++) {\n res[i] =\n this.buffer[(this.head - this.size + i + this.maxSize) % this.maxSize];\n }\n return res;\n }\n}\n\n/**\n * High-performance deep cloning utility.\n * Cached clones, early returns, manual iteration\n */\nfunction deepClone<T>(obj: T): T {\n // Fast path for primitives\n if (obj === null || typeof obj !== \"object\") return obj;\n\n // Check cache first (for immutable objects)\n if (cloneCache.has(obj as any)) {\n return cloneCache.get(obj as any);\n }\n\n let cloned: any;\n\n if (Array.isArray(obj)) {\n // Manual array copy\n const len = obj.length;\n cloned = new Array(len);\n for (let i = 0; i < len; i++) {\n cloned[i] = deepClone(obj[i]);\n }\n } else {\n // Manual object copy\n cloned = {};\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cloned[key] = deepClone((obj as any)[key]);\n }\n }\n\n // Cache with size limit\n if (cacheSize < CLONE_CACHE_SIZE) {\n cloneCache.set(obj as any, cloned);\n cacheSize++;\n } else {\n // Basic LRU-ish: reset if too big to avoid memory pressure but keep performance\n cacheSize = 0;\n }\n\n return cloned;\n}\n\n/**\n * High-performance deep equality utility.\n * Early returns, fast type checks\n */\nfunction deepEqual(a: any, b: any): boolean {\n // Identity check first\n if (a === b) return true;\n\n // Fast type/null checks\n const typeA = typeof a;\n const typeB = typeof b;\n\n if (typeA !== typeB || a === null || b === null) return false;\n if (typeA !== \"object\") return false;\n\n // Array fast path\n const isArrayA = Array.isArray(a);\n const isArrayB = Array.isArray(b);\n\n if (isArrayA !== isArrayB) return false;\n\n if (isArrayA) {\n const len = a.length;\n if (len !== b.length) return false;\n for (let i = 0; i < len; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n // Object comparison with early exit\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n const len = keysA.length;\n\n if (len !== keysB.length) return false;\n\n for (let i = 0; i < len; i++) {\n const key = keysA[i];\n if (a[key] !== b[key] && !deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n}\n\nexport const store = new MemoryVault();\n"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -39,6 +39,12 @@ store.setProxyCreator(createDeepProxy);
|
|
|
39
39
|
function initFlow(flow) {
|
|
40
40
|
store.get(flow.key, flow.initial, flow.options);
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Clears the entire store, all timers, and runs cleanup for all active flow effects.
|
|
44
|
+
*/
|
|
45
|
+
function clearAll() {
|
|
46
|
+
store.clearAll();
|
|
47
|
+
}
|
|
42
48
|
/**
|
|
43
49
|
* Defines a derived flow that reacts to changes in a source flow.
|
|
44
50
|
* Use this for computed values that shouldn't be manually modified.
|
|
@@ -240,5 +246,5 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
240
246
|
return [state, toolbox];
|
|
241
247
|
}
|
|
242
248
|
|
|
243
|
-
export { defineDerived, defineFlow, getFlow, initFlow, useFlow };
|
|
249
|
+
export { clearAll, defineDerived, defineFlow, getFlow, initFlow, useFlow };
|
|
244
250
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n UseFlowOptions,\n FlowOpsObject,\n ActionOpsObject,\n ContextGetterOps,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\n// Connect proxy creator to store for internal effects\nstore.setProxyCreator(createDeepProxy);\n\nexport * from \"./types\";\n\n/**\n * Manually initializes a flow to ensure its effects run immediately.\n * This is useful for flows that need to start working before any component subscribes to them.\n */\nexport function initFlow<T, A, C>(flow: FlowDefinition<T, A, C>) {\n store.get(flow.key, flow.initial, flow.options);\n}\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n const key = derivedKey || `${source.key}_derived_${Date.now()}`;\n store.setParent(key, source.key);\n return {\n key,\n source,\n selector,\n };\n}\n\nexport function defineFlow<\n T,\n A extends Record<string, any>,\n C = A extends { __ctx__: (ops: ContextGetterOps<T, any>) => infer R }\n ? R\n : undefined,\n>(\n key: string,\n initial: T,\n options: FlowOptions<NoInfer<T>, any> & {\n actions: {\n __ctx__?: (c: ContextGetterOps<T, Record<string, any>>) => C;\n } & {\n [K in keyof A as K extends \"__ctx__\" ? never : K]: (\n ...args: any[]\n ) => (ops: ActionOpsObject<T, Record<string, any>, C>) => any;\n } & A;\n },\n): FlowDefinition<T, A, C>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>, {}>,\n): FlowDefinition<T, {}>;\nexport function defineFlow<T, A, C = undefined>(\n key: string,\n initial: T,\n options?: FlowOptions<T, A> & { actions?: A },\n): FlowDefinition<T, A, C> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Non-hook version of useFlow.\n * Useful for accessing and interacting with flows outside React components (e.g., axios interceptors).\n */\nexport function getFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n): [T, FlowOperations<T, A>] {\n const { key, initial, options: flowOptions } = def;\n store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<T, A> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n const actionOps: ActionOpsObject<T, A, any> = {\n get self() {\n return defaultOps.self;\n },\n get state() {\n return defaultOps.state;\n },\n get ctx() {\n const ctxGen = (actions as any)?.__ctx__;\n if (!ctxGen) return undefined;\n return ctxGen({\n state: store.get(key, initial),\n initialState: store.getInitial(key) ?? initial,\n actions: boundActions,\n ops: defaultOps,\n });\n },\n };\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n if (name === \"__ctx__\") continue;\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(actionOps);\n }\n }\n\n const toolbox: FlowOperations<T, A> = {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n\n const latestState = store.get(key, initial);\n return [latestState, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [snapshot, setSnapshot] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setSnapshot(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<any, any> = {\n get self() {\n return createDeepProxy<any, any>(key, [], store.get(key, initialVal), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initialVal);\n },\n };\n\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n const actionOps: ActionOpsObject<any, any, any> = {\n get self() {\n return defaultOps.self;\n },\n get state() {\n return defaultOps.state;\n },\n get ctx() {\n const ctxGen = (actions as any)?.__ctx__;\n if (!ctxGen) return undefined;\n return ctxGen({\n state: store.get(key, initialVal),\n initialState: store.getInitial(key) ?? initialVal,\n actions: boundActions,\n ops: defaultOps,\n });\n },\n };\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n if (name === \"__ctx__\") continue;\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(actionOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, snapshot, flowOptions]);\n\n const state = isDerived\n ? (keyOrDef as any).selector(store.get(key, initialVal))\n : store.get(key, initialVal);\n\n return [state, toolbox] as any;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n UseFlowOptions,\n FlowOpsObject,\n ActionOpsObject,\n ContextGetterOps,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\n// Connect proxy creator to store for internal effects\nstore.setProxyCreator(createDeepProxy);\n\nexport * from \"./types\";\n\n/**\n * Manually initializes a flow to ensure its effects run immediately.\n * This is useful for flows that need to start working before any component subscribes to them.\n */\nexport function initFlow<T, A, C>(flow: FlowDefinition<T, A, C>) {\n store.get(flow.key, flow.initial, flow.options);\n}\n\n/**\n * Clears the entire store, all timers, and runs cleanup for all active flow effects.\n */\nexport function clearAll() {\n store.clearAll();\n}\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n const key = derivedKey || `${source.key}_derived_${Date.now()}`;\n store.setParent(key, source.key);\n return {\n key,\n source,\n selector,\n };\n}\n\nexport function defineFlow<\n T,\n A extends Record<string, any>,\n C = A extends { __ctx__: (ops: ContextGetterOps<T, any>) => infer R }\n ? R\n : undefined,\n>(\n key: string,\n initial: T,\n options: FlowOptions<NoInfer<T>, any> & {\n actions: {\n __ctx__?: (c: ContextGetterOps<T, Record<string, any>>) => C;\n } & {\n [K in keyof A as K extends \"__ctx__\" ? never : K]: (\n ...args: any[]\n ) => (ops: ActionOpsObject<T, Record<string, any>, C>) => any;\n } & A;\n },\n): FlowDefinition<T, A, C>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>, {}>,\n): FlowDefinition<T, {}>;\nexport function defineFlow<T, A, C = undefined>(\n key: string,\n initial: T,\n options?: FlowOptions<T, A> & { actions?: A },\n): FlowDefinition<T, A, C> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Non-hook version of useFlow.\n * Useful for accessing and interacting with flows outside React components (e.g., axios interceptors).\n */\nexport function getFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n): [T, FlowOperations<T, A>] {\n const { key, initial, options: flowOptions } = def;\n store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<T, A> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n const actionOps: ActionOpsObject<T, A, any> = {\n get self() {\n return defaultOps.self;\n },\n get state() {\n return defaultOps.state;\n },\n get ctx() {\n const ctxGen = (actions as any)?.__ctx__;\n if (!ctxGen) return undefined;\n return ctxGen({\n state: store.get(key, initial),\n initialState: store.getInitial(key) ?? initial,\n actions: boundActions,\n ops: defaultOps,\n });\n },\n };\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n if (name === \"__ctx__\") continue;\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(actionOps);\n }\n }\n\n const toolbox: FlowOperations<T, A> = {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n\n const latestState = store.get(key, initial);\n return [latestState, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [snapshot, setSnapshot] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setSnapshot(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<any, any> = {\n get self() {\n return createDeepProxy<any, any>(key, [], store.get(key, initialVal), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initialVal);\n },\n };\n\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n const actionOps: ActionOpsObject<any, any, any> = {\n get self() {\n return defaultOps.self;\n },\n get state() {\n return defaultOps.state;\n },\n get ctx() {\n const ctxGen = (actions as any)?.__ctx__;\n if (!ctxGen) return undefined;\n return ctxGen({\n state: store.get(key, initialVal),\n initialState: store.getInitial(key) ?? initialVal,\n actions: boundActions,\n ops: defaultOps,\n });\n },\n };\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n if (name === \"__ctx__\") continue;\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(actionOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, snapshot, flowOptions]);\n\n const state = isDerived\n ? (keyOrDef as any).selector(store.get(key, initialVal))\n : store.get(key, initialVal);\n\n return [state, toolbox] as any;\n}\n"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BiF;AAgBjF;AACA,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC;AAItC;;;AAGG;AACG,SAAU,QAAQ,CAAU,IAA6B,EAAA;AAC7D,IAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;AACjD;AAEA;;AAEG;SACa,QAAQ,GAAA;IACtB,KAAK,CAAC,QAAQ,EAAE;AAClB;AAEA;;;AAGG;SACa,aAAa,CAC3B,MAA8B,EAC9B,QAAyB,EACzB,UAAmB,EAAA;AAEnB,IAAA,MAAM,GAAG,GAAG,UAAU,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA,SAAA,EAAY,IAAI,CAAC,GAAG,EAAE,EAAE;IAC/D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;IAChC,OAAO;QACL,GAAG;QACH,MAAM;QACN,QAAQ;KACT;AACH;SA0BgB,UAAU,CACxB,GAAW,EACX,OAAU,EACV,OAA6C,EAAA;IAE7C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAc,EAAE;AAClD;AAEA;;;AAGG;AACG,SAAU,OAAO,CACrB,GAA4B,EAAA;IAE5B,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,GAAG;IAClD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC;IAEpC,MAAM,YAAY,GAAG,EAAS;AAC9B,IAAA,MAAM,UAAU,GAAwB;AACtC,QAAA,IAAI,IAAI,GAAA;AACN,YAAA,OAAO,eAAe,CAAO,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;AAC7D,gBAAA,GAAG,WAAW;AACd,gBAAA,OAAO,EAAE,YAAY;gBACrB,KAAK,EAAE,WAAW,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ,CAAC;AACD,QAAA,IAAI,KAAK,GAAA;YACP,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;QAChC,CAAC;KACF;IAED,MAAM,OAAO,GAAI,GAAW,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO;AAEtE,IAAA,MAAM,SAAS,GAA+B;AAC5C,QAAA,IAAI,IAAI,GAAA;YACN,OAAO,UAAU,CAAC,IAAI;QACxB,CAAC;AACD,QAAA,IAAI,KAAK,GAAA;YACP,OAAO,UAAU,CAAC,KAAK;QACzB,CAAC;AACD,QAAA,IAAI,GAAG,GAAA;AACL,YAAA,MAAM,MAAM,GAAI,OAAe,EAAE,OAAO;AACxC,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,SAAS;AAC7B,YAAA,OAAO,MAAM,CAAC;gBACZ,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;gBAC9B,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO;AAC9C,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,GAAG,EAAE,UAAU;AAChB,aAAA,CAAC;QACJ,CAAC;KACF;IAED,IAAI,OAAO,EAAE;AACX,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAChD,IAAI,IAAI,KAAK,SAAS;gBAAE;AACxB,YAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAW,KACjC,EAAe,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC;QACxC;IACF;AAEA,IAAA,MAAM,OAAO,GAAyB;AACpC,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,QAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9B,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;QAC1C,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AAC5C,QAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;YACjB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,YAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,gBAAA,GAAG,WAAW;AACd,gBAAA,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,WAAW,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ,CAAC;AACD,QAAA,MAAM,EAAE,CAAC,GAAQ,KAAI;YACnB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,YAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,gBAAA,GAAG,WAAW;AACd,gBAAA,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,WAAW,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QAC9B,EAAE,EAAE,WAAW,IAAI,EAAE;QACrB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC;KAC7C;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;AAC3C,IAAA,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;AAC/B;SAmBgB,OAAO,CACrB,QAAa,EACb,OAAa,EACb,OAAa,EAAA;IAEb,MAAM,SAAS,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,UAAU,IAAI,QAAQ;AACxE,IAAA,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,CAAC,SAAS;IAE7E,MAAM,GAAG,GAAG;UACP,QAAgB,CAAC;AACpB,UAAE;AACA,cAAG,QAAgB,CAAC,MAAM,CAAC;cACxB,QAAmB;IAC1B,MAAM,UAAU,GAAG;UACd,QAAgB,CAAC;AACpB,UAAE;AACA,cAAG,QAAgB,CAAC,MAAM,CAAC;cACzB,OAAO;IACb,MAAM,WAAW,GAAG;AAClB,UAAE,EAAE,IAAK,QAAgB,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC;AAC5D,UAAE;AACA,cAAG,QAAgB,CAAC,MAAM,CAAC;cACzB,OAAO;IAEb,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC;AACnD,QAAA,OAAO,SAAS,GAAI,QAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG;AAC1D,IAAA,CAAC,CAAC;IAEF,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,KAAK,GAAG,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK,IAAI,CAAA,QAAA,EAAW,GAAG,GAAG;AAC1E,QAAA,OAAO,KAAK,CAAC,SAAS,CACpB,GAAG,EACH,MAAK;YACH,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;AACtC,YAAA,WAAW,CAAC,SAAS,GAAI,QAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAChE,QAAA,CAAC,EACD,EAAE,KAAK,EAAE,CACV;AACH,IAAA,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAE3D,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAK;AAC3B,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,EAAE;QAExB,MAAM,YAAY,GAAG,EAAS;AAC9B,QAAA,MAAM,UAAU,GAA4B;AAC1C,YAAA,IAAI,IAAI,GAAA;AACN,gBAAA,OAAO,eAAe,CAAW,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE;AACpE,oBAAA,GAAG,WAAW;AACd,oBAAA,OAAO,EAAE,YAAY;AACrB,oBAAA,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK;AAC/C,iBAAA,CAAC;YACJ,CAAC;AACD,YAAA,IAAI,KAAK,GAAA;gBACP,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;YACnC,CAAC;SACF;QAED,MAAM,OAAO,GAAI,QAAgB,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO;AAE3E,QAAA,MAAM,SAAS,GAAmC;AAChD,YAAA,IAAI,IAAI,GAAA;gBACN,OAAO,UAAU,CAAC,IAAI;YACxB,CAAC;AACD,YAAA,IAAI,KAAK,GAAA;gBACP,OAAO,UAAU,CAAC,KAAK;YACzB,CAAC;AACD,YAAA,IAAI,GAAG,GAAA;AACL,gBAAA,MAAM,MAAM,GAAI,OAAe,EAAE,OAAO;AACxC,gBAAA,IAAI,CAAC,MAAM;AAAE,oBAAA,OAAO,SAAS;AAC7B,gBAAA,OAAO,MAAM,CAAC;oBACZ,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;oBACjC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU;AACjD,oBAAA,OAAO,EAAE,YAAY;AACrB,oBAAA,GAAG,EAAE,UAAU;AAChB,iBAAA,CAAC;YACJ,CAAC;SACF;QAED,IAAI,OAAO,EAAE;AACX,YAAA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAChD,IAAI,IAAI,KAAK,SAAS;oBAAE;AACxB,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAW,KACjC,EAAe,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC;YACxC;QACF;QAEA,OAAO;AACL,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5B,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,YAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAC9B,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;YAC1C,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AAC5C,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;gBACjB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,oBAAA,GAAG,WAAW;AACd,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK;AAC/C,iBAAA,CAAC;YACJ,CAAC;AACD,YAAA,MAAM,EAAE,CAAC,GAAQ,KAAI;gBACnB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,oBAAA,GAAG,WAAW;AACd,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK;AAC/C,iBAAA,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B,EAAE,EAAE,WAAW,IAAI,EAAE;YACrB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC;SAC7C;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE3C,MAAM,KAAK,GAAG;AACZ,UAAG,QAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;UACrD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;AAE9B,IAAA,OAAO,CAAC,KAAK,EAAE,OAAO,CAAQ;AAChC;;;;"}
|
package/dist/esm/src/proxy.js
CHANGED
|
@@ -49,15 +49,11 @@ function getCachedPath(path, prop) {
|
|
|
49
49
|
*
|
|
50
50
|
* Reduced allocations, cached operations
|
|
51
51
|
*/
|
|
52
|
-
function createDeepProxy(key, path,
|
|
53
|
-
|
|
52
|
+
function createDeepProxy(key, path, _initialVal, // Kept for signature compatibility but ignored for live state
|
|
53
|
+
options) {
|
|
54
|
+
// Pre-bind commit function
|
|
54
55
|
const commit = (val, forceful, skipEquality = false, op) => {
|
|
55
56
|
try {
|
|
56
|
-
// INTERNAL OPTIMIZATION: We fetch the RAW current state from the vault
|
|
57
|
-
// without cloning it. Since we are about to produce a new IMMUTABLE state
|
|
58
|
-
// using setInPath (which does structural cloning), this is safe and
|
|
59
|
-
// avoiding a full deepClone of the entire tree on every tiny action
|
|
60
|
-
// results in 100x performance in loops.
|
|
61
57
|
const currentState = store.get(key, undefined, { bypassClone: true });
|
|
62
58
|
const newState = setInPath(currentState, path, val);
|
|
63
59
|
store.set(key, newState, {
|
|
@@ -73,7 +69,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
73
69
|
throw error;
|
|
74
70
|
}
|
|
75
71
|
};
|
|
76
|
-
// Pre-create update function
|
|
77
72
|
const update = (val, op) => {
|
|
78
73
|
commit(val, false, true, op);
|
|
79
74
|
};
|
|
@@ -81,7 +76,12 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
81
76
|
get(_target, prop) {
|
|
82
77
|
if (typeof prop === "symbol")
|
|
83
78
|
return undefined;
|
|
84
|
-
// ---
|
|
79
|
+
// --- LIVE DATA FETCH ---
|
|
80
|
+
// We fetch the latest root state and drill down to the current path.
|
|
81
|
+
// This ensures Proxies are always "live" even if reused across updates.
|
|
82
|
+
const rootState = store.get(key, undefined, { bypassClone: true });
|
|
83
|
+
const currentVal = path.length === 0 ? rootState : getInPath(rootState, path);
|
|
84
|
+
// --- Meta-Operations ---
|
|
85
85
|
if (prop === "_val")
|
|
86
86
|
return currentVal;
|
|
87
87
|
if (prop === "_set")
|
|
@@ -104,59 +104,29 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
104
104
|
return (store.getRedoStack(key)?.length || 0) > 0;
|
|
105
105
|
if (prop === "_history")
|
|
106
106
|
return store.getHistory(key);
|
|
107
|
-
// Handle plugin-provided operations (e.g., _persist)
|
|
108
107
|
const pluginOps = store.getPluginOps(key, options);
|
|
109
108
|
if (prop in pluginOps)
|
|
110
109
|
return pluginOps[prop];
|
|
111
|
-
// Type check once for this level
|
|
112
110
|
const valType = typeof currentVal;
|
|
113
111
|
const isArray = Array.isArray(currentVal);
|
|
114
|
-
// --- Number Operations
|
|
112
|
+
// --- Number Operations ---
|
|
115
113
|
if (valType === "number") {
|
|
116
114
|
switch (prop) {
|
|
117
115
|
case "_increment":
|
|
118
|
-
return (amount = 1) =>
|
|
119
|
-
const liveVal = path.length === 0
|
|
120
|
-
? store.get(key, undefined, { bypassClone: true })
|
|
121
|
-
: getInPath(store.get(key, undefined, { bypassClone: true }), path);
|
|
122
|
-
update(liveVal + amount, "_increment");
|
|
123
|
-
};
|
|
116
|
+
return (amount = 1) => update(currentVal + amount, "_increment");
|
|
124
117
|
case "_decrement":
|
|
125
|
-
return (amount = 1) =>
|
|
126
|
-
const liveVal = path.length === 0
|
|
127
|
-
? store.get(key, undefined, { bypassClone: true })
|
|
128
|
-
: getInPath(store.get(key, undefined, { bypassClone: true }), path);
|
|
129
|
-
update(liveVal - amount, "_decrement");
|
|
130
|
-
};
|
|
118
|
+
return (amount = 1) => update(currentVal - amount, "_decrement");
|
|
131
119
|
case "_add":
|
|
132
|
-
return (amount) =>
|
|
133
|
-
const liveVal = path.length === 0
|
|
134
|
-
? store.get(key, undefined, { bypassClone: true })
|
|
135
|
-
: getInPath(store.get(key, undefined, { bypassClone: true }), path);
|
|
136
|
-
update(liveVal + amount, "_add");
|
|
137
|
-
};
|
|
120
|
+
return (amount) => update(currentVal + amount, "_add");
|
|
138
121
|
case "_subtract":
|
|
139
|
-
return (amount) =>
|
|
140
|
-
const liveVal = path.length === 0
|
|
141
|
-
? store.get(key, undefined, { bypassClone: true })
|
|
142
|
-
: getInPath(store.get(key, undefined, { bypassClone: true }), path);
|
|
143
|
-
update(liveVal - amount, "_subtract");
|
|
144
|
-
};
|
|
122
|
+
return (amount) => update(currentVal - amount, "_subtract");
|
|
145
123
|
case "_multiply":
|
|
146
|
-
return (amount) =>
|
|
147
|
-
const liveVal = path.length === 0
|
|
148
|
-
? store.get(key, undefined, { bypassClone: true })
|
|
149
|
-
: getInPath(store.get(key, undefined, { bypassClone: true }), path);
|
|
150
|
-
update(liveVal * amount, "_multiply");
|
|
151
|
-
};
|
|
124
|
+
return (amount) => update(currentVal * amount, "_multiply");
|
|
152
125
|
case "_divide":
|
|
153
126
|
return (amount) => {
|
|
154
127
|
if (amount === 0)
|
|
155
128
|
throw new Error("[FlowProxy] Division by zero");
|
|
156
|
-
|
|
157
|
-
? store.get(key, undefined, { bypassClone: true })
|
|
158
|
-
: getInPath(store.get(key, undefined, { bypassClone: true }), path);
|
|
159
|
-
update(liveVal / amount, "_divide");
|
|
129
|
+
update(currentVal / amount, "_divide");
|
|
160
130
|
};
|
|
161
131
|
case "_pow":
|
|
162
132
|
return (n) => update(Math.pow(currentVal, n), "_pow");
|
|
@@ -180,12 +150,11 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
180
150
|
return (p) => update(parseFloat(currentVal.toPrecision(p)), "_toPrecision");
|
|
181
151
|
}
|
|
182
152
|
}
|
|
183
|
-
// --- Array Operations
|
|
153
|
+
// --- Array Operations ---
|
|
184
154
|
if (isArray) {
|
|
185
155
|
switch (prop) {
|
|
186
156
|
case "_push":
|
|
187
157
|
return (item) => {
|
|
188
|
-
// Manual copy instead of spread for large arrays
|
|
189
158
|
const len = currentVal.length;
|
|
190
159
|
const newArr = new Array(len + 1);
|
|
191
160
|
for (let i = 0; i < len; i++)
|
|
@@ -199,7 +168,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
199
168
|
return () => update(currentVal.slice(1), "_shift");
|
|
200
169
|
case "_unshift":
|
|
201
170
|
return (item) => {
|
|
202
|
-
// Manual copy for better performance
|
|
203
171
|
const len = currentVal.length;
|
|
204
172
|
const newArr = new Array(len + 1);
|
|
205
173
|
newArr[0] = item;
|
|
@@ -213,7 +181,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
213
181
|
return (fn) => update(currentVal.map(fn), "_map");
|
|
214
182
|
case "_removeAt":
|
|
215
183
|
return (index) => {
|
|
216
|
-
// Manual filter for single index
|
|
217
184
|
const len = currentVal.length;
|
|
218
185
|
const newArr = new Array(len - 1);
|
|
219
186
|
let j = 0;
|
|
@@ -234,7 +201,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
234
201
|
newArr[i + 1] = currentVal[i];
|
|
235
202
|
update(newArr, "_insertAt");
|
|
236
203
|
};
|
|
237
|
-
// --- New Ops (v4.8.0) ---
|
|
238
204
|
case "_splice":
|
|
239
205
|
return (s, d, ...items) => {
|
|
240
206
|
const next = [...currentVal];
|
|
@@ -264,7 +230,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
264
230
|
}
|
|
265
231
|
update(next, "_shuffle");
|
|
266
232
|
};
|
|
267
|
-
// Traversers that return a proxy to an item
|
|
268
233
|
case "_at":
|
|
269
234
|
return (i) => {
|
|
270
235
|
const idx = i < 0 ? currentVal.length + i : i;
|
|
@@ -296,7 +261,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
296
261
|
return () => update(currentVal.toLowerCase(), "_lowercase");
|
|
297
262
|
case "_trim":
|
|
298
263
|
return () => update(currentVal.trim(), "_trim");
|
|
299
|
-
// --- New Ops (v4.8.0) ---
|
|
300
264
|
case "_replace":
|
|
301
265
|
return (p, r) => update(currentVal.replace(p, r), "_replace");
|
|
302
266
|
case "_replaceAll":
|
|
@@ -329,14 +293,12 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
329
293
|
if (currentVal !== null && valType === "object" && !isArray) {
|
|
330
294
|
if (prop === "_merge") {
|
|
331
295
|
return (obj) => {
|
|
332
|
-
// Object.assign faster than spread for merge
|
|
333
296
|
const merged = Object.assign({}, currentVal, obj);
|
|
334
297
|
update(merged, "_merge");
|
|
335
298
|
};
|
|
336
299
|
}
|
|
337
300
|
if (prop === "_delete") {
|
|
338
301
|
return (keyToDel) => {
|
|
339
|
-
// Only copy if key exists
|
|
340
302
|
if (!(keyToDel in currentVal))
|
|
341
303
|
return;
|
|
342
304
|
const keys = Object.keys(currentVal);
|
|
@@ -348,7 +310,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
348
310
|
update(next, "_delete");
|
|
349
311
|
};
|
|
350
312
|
}
|
|
351
|
-
// --- New Ops (v4.8.0) ---
|
|
352
313
|
if (prop === "_pick") {
|
|
353
314
|
return (keys) => {
|
|
354
315
|
const next = {};
|
|
@@ -384,7 +345,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
384
345
|
}
|
|
385
346
|
}
|
|
386
347
|
// Recursive step: create a new proxy for the child property
|
|
387
|
-
// Use cached path
|
|
388
348
|
const nextVal = currentVal !== null && currentVal !== undefined
|
|
389
349
|
? currentVal[prop]
|
|
390
350
|
: undefined;
|
|
@@ -392,6 +352,9 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
392
352
|
return createDeepProxy(key, newPath, nextVal, options);
|
|
393
353
|
},
|
|
394
354
|
apply(_target, _thisArg, args) {
|
|
355
|
+
// Re-fetch current value for apply trap too
|
|
356
|
+
const rootState = store.get(key, undefined, { bypassClone: true });
|
|
357
|
+
const currentVal = path.length === 0 ? rootState : getInPath(rootState, path);
|
|
395
358
|
if (typeof currentVal === "function") {
|
|
396
359
|
return currentVal(...args);
|
|
397
360
|
}
|