@coherent.js/state 1.0.0-beta.6 → 1.0.0-beta.7
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/index.js.map +7 -0
- package/dist/reactive-state.js +512 -0
- package/dist/reactive-state.js.map +7 -0
- package/dist/state-manager.js +102 -0
- package/dist/state-manager.js.map +7 -0
- package/dist/state-persistence.js +472 -0
- package/dist/state-persistence.js.map +7 -0
- package/dist/state-validation.js +621 -0
- package/dist/state-validation.js.map +7 -0
- package/package.json +13 -3
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/reactive-state.js", "../src/state-manager.js", "../src/state-persistence.js", "../src/state-validation.js", "../src/enhanced-state-patterns.js", "../src/index.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * Reactive State Management System for Coherent.js\n * Provides computed properties, watchers, and reactive updates\n */\n\n// Simple error handling for this module\nexport class StateError extends Error {\n constructor(message, options = {}) {\n super(message);\n this.name = 'StateError';\n this.type = options.type || 'state';\n this.component = options.component;\n this.context = options.context;\n this.timestamp = Date.now();\n }\n}\n\nexport const globalErrorHandler = {\n handle(error, context = {}) {\n console.error('State Error:', error.message, context);\n }\n};\n\n/**\n * Observable wrapper for tracking state changes\n */\nexport class Observable {\n constructor(value, options = {}) {\n this._value = value;\n this._observers = new Set();\n this._computedDependents = new Set();\n this._options = {\n deep: options.deep !== false,\n immediate: options.immediate !== false,\n ...options\n };\n }\n\n get value() {\n // Track dependency for computed properties\n if (Observable._currentComputed) {\n this._computedDependents.add(Observable._currentComputed);\n }\n return this._value;\n }\n\n set value(newValue) {\n if (this._value === newValue && !this._options.deep) {\n return;\n }\n\n const oldValue = this._value;\n this._value = newValue;\n\n // Notify observers\n this._observers.forEach(observer => {\n try {\n observer(newValue, oldValue);\n } catch (_error) {\n globalErrorHandler.handle(_error, {\n type: 'watcher-_error',\n context: { newValue, oldValue }\n });\n }\n });\n\n // Update computed dependents\n this._computedDependents.forEach(computed => {\n computed._invalidate();\n });\n }\n\n watch(callback, options = {}) {\n if (typeof callback !== 'function') {\n throw new StateError('Watch callback must be a function');\n }\n\n const observer = (newValue, oldValue) => {\n callback(newValue, oldValue, () => this.unwatch(observer));\n };\n\n this._observers.add(observer);\n\n // Call immediately if requested\n if (options.immediate !== false) {\n observer(this._value, undefined);\n }\n\n // Return unwatch function\n return () => this.unwatch(observer);\n }\n\n unwatch(observer) {\n this._observers.delete(observer);\n }\n\n unwatchAll() {\n this._observers.clear();\n this._computedDependents.clear();\n }\n}\n\n/**\n * Computed property implementation\n */\nclass Computed extends Observable {\n constructor(getter, options = {}) {\n super(undefined, options);\n this._getter = getter;\n this._cached = false;\n this._dirty = true;\n\n if (typeof getter !== 'function') {\n throw new StateError('Computed getter must be a function');\n }\n }\n\n get value() {\n if (this._dirty || !this._cached) {\n this._compute();\n }\n return this._value;\n }\n\n set value(newValue) {\n throw new StateError('Cannot set value on computed property');\n }\n\n _compute() {\n const prevComputed = Observable._currentComputed;\n Observable._currentComputed = this;\n\n try {\n const newValue = this._getter();\n\n if (newValue !== this._value) {\n const oldValue = this._value;\n this._value = newValue;\n\n // Notify observers\n this._observers.forEach(observer => {\n observer(newValue, oldValue);\n });\n }\n\n this._cached = true;\n this._dirty = false;\n } catch (_error) {\n globalErrorHandler.handle(_error, {\n type: 'computed-_error',\n context: { getter: this._getter.toString() }\n });\n } finally {\n Observable._currentComputed = prevComputed;\n }\n }\n\n _invalidate() {\n this._dirty = true;\n this._computedDependents.forEach(computed => {\n computed._invalidate();\n });\n }\n}\n\n// Static property for tracking current computed\nObservable._currentComputed = null;\n\n/**\n * Reactive state container with advanced features\n */\nexport class ReactiveState {\n constructor(initialState = {}, options = {}) {\n this._state = new Map();\n this._computed = new Map();\n this._watchers = new Map();\n this._middleware = [];\n this._history = [];\n this._options = {\n enableHistory: options.enableHistory !== false,\n maxHistorySize: options.maxHistorySize || 50,\n enableMiddleware: options.enableMiddleware !== false,\n deep: options.deep !== false,\n ...options\n };\n\n // Initialize state\n Object.entries(initialState).forEach(([key, value]) => {\n this.set(key, value);\n });\n }\n\n /**\n * Get reactive state value\n */\n get(key) {\n const observable = this._state.get(key);\n return observable ? observable.value : undefined;\n }\n\n /**\n * Set reactive state value\n */\n set(key, value, options = {}) {\n const config = { ...this._options, ...options };\n\n // Run middleware\n if (config.enableMiddleware) {\n const middlewareResult = this._runMiddleware('set', { key, value, oldValue: this.get(key) });\n if (middlewareResult.cancelled) {\n return false;\n }\n value = middlewareResult.value !== undefined ? middlewareResult.value : value;\n }\n\n // Get or create observable\n let observable = this._state.get(key);\n if (!observable) {\n observable = new Observable(value, config);\n this._state.set(key, observable);\n } else {\n // Record history\n if (config.enableHistory) {\n this._addToHistory('set', key, observable.value, value);\n }\n\n observable.value = value;\n }\n\n return true;\n }\n\n /**\n * Check if state has a key\n */\n has(key) {\n return this._state.has(key);\n }\n\n /**\n * Delete state key\n */\n delete(key) {\n const observable = this._state.get(key);\n if (observable) {\n // Record history\n if (this._options.enableHistory) {\n this._addToHistory('delete', key, observable.value, undefined);\n }\n\n observable.unwatchAll();\n this._state.delete(key);\n return true;\n }\n return false;\n }\n\n /**\n * Clear all state\n */\n clear() {\n // Record history\n if (this._options.enableHistory) {\n this._addToHistory('clear', null, this.toObject(), {});\n }\n\n // Cleanup observables\n for (const observable of this._state.values()) {\n observable.unwatchAll();\n }\n\n this._state.clear();\n this._computed.clear();\n this._watchers.clear();\n }\n\n /**\n * Create computed property\n */\n computed(key, getter, options = {}) {\n if (typeof getter !== 'function') {\n throw new StateError(`Computed property '${key}' getter must be a function`);\n }\n\n const computed = new Computed(getter, { ...this._options, ...options });\n this._computed.set(key, computed);\n\n return computed;\n }\n\n /**\n * Get computed property value\n */\n getComputed(key) {\n const computed = this._computed.get(key);\n return computed ? computed.value : undefined;\n }\n\n /**\n * Watch state changes\n */\n watch(key, callback, options = {}) {\n if (typeof key === 'function') {\n // Watch computed expression\n return this._watchComputed(key, callback, options);\n }\n\n const observable = this._state.get(key);\n if (!observable) {\n throw new StateError(`Cannot watch undefined state key: ${key}`);\n }\n\n const unwatch = observable.watch(callback, options);\n\n // Store watcher for cleanup\n if (!this._watchers.has(key)) {\n this._watchers.set(key, new Set());\n }\n this._watchers.get(key).add(unwatch);\n\n return unwatch;\n }\n\n /**\n * Watch computed expression\n */\n _watchComputed(expression, callback, options = {}) {\n const computed = new Computed(expression, options);\n const unwatch = computed.watch(callback, options);\n\n return unwatch;\n }\n\n /**\n * Batch state updates\n */\n batch(updates) {\n if (typeof updates === 'function') {\n // Batch function updates\n const oldEnableHistory = this._options.enableHistory;\n this._options.enableHistory = false;\n\n try {\n const result = updates(this);\n\n // Record batch in history\n if (oldEnableHistory) {\n this._addToHistory('batch', null, null, this.toObject());\n }\n\n return result;\n } finally {\n this._options.enableHistory = oldEnableHistory;\n }\n } else if (typeof updates === 'object') {\n // Batch object updates\n return this.batch(() => {\n Object.entries(updates).forEach(([key, value]) => {\n this.set(key, value);\n });\n });\n }\n }\n\n /**\n * Subscribe to multiple state changes\n */\n subscribe(keys, callback, options = {}) {\n if (!Array.isArray(keys)) {\n keys = [keys];\n }\n\n const unwatchers = keys.map(key => {\n return this.watch(key, (newValue, oldValue) => {\n callback({\n key,\n newValue,\n oldValue,\n state: this.toObject()\n });\n }, options);\n });\n\n // Return unsubscribe function\n return () => {\n unwatchers.forEach(unwatch => unwatch());\n };\n }\n\n /**\n * Add middleware for state changes\n */\n use(middleware) {\n if (typeof middleware !== 'function') {\n throw new StateError('Middleware must be a function');\n }\n this._middleware.push(middleware);\n }\n\n /**\n * Run middleware chain\n */\n _runMiddleware(action, context) {\n let result = { ...context, cancelled: false };\n\n for (const middleware of this._middleware) {\n try {\n const middlewareResult = middleware(action, result);\n if (middlewareResult) {\n result = { ...result, ...middlewareResult };\n if (result.cancelled) {\n break;\n }\n }\n } catch (_error) {\n globalErrorHandler.handle(_error, {\n type: 'middleware-_error',\n context: { action, middleware: middleware.toString() }\n });\n }\n }\n\n return result;\n }\n\n /**\n * Add action to history\n */\n _addToHistory(action, key, oldValue, newValue) {\n if (!this._options.enableHistory) return;\n\n this._history.unshift({\n action,\n key,\n oldValue,\n newValue,\n timestamp: Date.now()\n });\n\n // Limit history size\n if (this._history.length > this._options.maxHistorySize) {\n this._history = this._history.slice(0, this._options.maxHistorySize);\n }\n }\n\n /**\n * Get state history\n */\n getHistory(limit = 10) {\n return this._history.slice(0, limit);\n }\n\n /**\n * Undo last action\n */\n undo() {\n const lastAction = this._history.shift();\n if (!lastAction) return false;\n\n const { action, key, oldValue } = lastAction;\n\n // Temporarily disable history\n const oldEnableHistory = this._options.enableHistory;\n this._options.enableHistory = false;\n\n try {\n switch (action) {\n case 'set':\n if (oldValue === undefined) {\n this.delete(key);\n } else {\n this.set(key, oldValue);\n }\n break;\n case 'delete':\n this.set(key, oldValue);\n break;\n case 'clear':\n this.clear();\n Object.entries(oldValue || {}).forEach(([k, v]) => {\n this.set(k, v);\n });\n break;\n }\n return true;\n } finally {\n this._options.enableHistory = oldEnableHistory;\n }\n }\n\n /**\n * Convert state to plain object\n */\n toObject() {\n const result = {};\n for (const [key, observable] of this._state.entries()) {\n result[key] = observable.value;\n }\n return result;\n }\n\n /**\n * Convert computed properties to object\n */\n getComputedValues() {\n const result = {};\n for (const [key, computed] of this._computed.entries()) {\n result[key] = computed.value;\n }\n return result;\n }\n\n /**\n * Get state statistics\n */\n getStats() {\n return {\n stateKeys: this._state.size,\n computedKeys: this._computed.size,\n watcherKeys: this._watchers.size,\n historyLength: this._history.length,\n middlewareCount: this._middleware.length\n };\n }\n\n /**\n * Cleanup and destroy\n */\n destroy() {\n // Clear all watchers\n for (const observable of this._state.values()) {\n observable.unwatchAll();\n }\n for (const computed of this._computed.values()) {\n computed.unwatchAll();\n }\n\n // Clear collections\n this._state.clear();\n this._computed.clear();\n this._watchers.clear();\n this._middleware.length = 0;\n this._history.length = 0;\n }\n}\n\n/**\n * Create reactive state store\n */\nexport function createReactiveState(initialState, options = {}) {\n return new ReactiveState(initialState, options);\n}\n\n/**\n * Create observable value\n */\nexport function observable(value, options = {}) {\n return new Observable(value, options);\n}\n\n/**\n * Create computed property\n */\nexport function computed(getter, options = {}) {\n return new Computed(getter, options);\n}\n\n/**\n * Utility functions for common state patterns\n */\nexport const stateUtils = {\n /**\n * Create a toggle state\n */\n toggle(initialValue = false) {\n const obs = observable(initialValue);\n obs.toggle = () => {\n obs.value = !obs.value;\n };\n return obs;\n },\n\n /**\n * Create a counter state\n */\n counter(initialValue = 0) {\n const obs = observable(initialValue);\n obs.increment = (by = 1) => {\n obs.value += by;\n };\n obs.decrement = (by = 1) => {\n obs.value -= by;\n };\n obs.reset = () => {\n obs.value = initialValue;\n };\n return obs;\n },\n\n /**\n * Create an array state with utilities\n */\n array(initialArray = []) {\n const obs = observable([...initialArray]);\n obs.push = (...items) => {\n obs.value = [...obs.value, ...items];\n };\n obs.pop = () => {\n const newArray = [...obs.value];\n const result = newArray.pop();\n obs.value = newArray;\n return result;\n };\n obs.filter = (predicate) => {\n obs.value = obs.value.filter(predicate);\n };\n obs.clear = () => {\n obs.value = [];\n };\n return obs;\n },\n\n /**\n * Create object state with deep reactivity\n */\n object(initialObject = {}) {\n const state = createReactiveState(initialObject, { deep: true });\n return state;\n }\n};\n\nexport default ReactiveState;\n", "/**\n * Simple state management for server-side rendering\n * This is mainly for component state during rendering\n */\n\nconst globalState = new Map();\n\n/**\n * Creates a state container for a request/render cycle\n * @param {Object} initialState - Initial state object\n * @returns {Object} State container\n */\nexport function createState(initialState = {}) {\n const state = new Map(Object.entries(initialState));\n\n return {\n get(key) {\n return state.get(key);\n },\n\n set(key, value) {\n state.set(key, value);\n return this;\n },\n\n has(key) {\n return state.has(key);\n },\n\n delete(key) {\n return state.delete(key);\n },\n\n clear() {\n state.clear();\n return this;\n },\n\n toObject() {\n return Object.fromEntries(state);\n },\n\n // For debugging\n _internal: state\n };\n}\n\n/**\n * Global state for sharing data across components during SSR\n */\nexport const globalStateManager = {\n set(key, value) {\n globalState.set(key, value);\n },\n\n get(key) {\n return globalState.get(key);\n },\n\n has(key) {\n return globalState.has(key);\n },\n\n clear() {\n globalState.clear();\n },\n\n // Create isolated state for each request\n createRequestState() {\n return createState();\n }\n};\n\n/**\n * Context stack for managing nested context providers\n */\nconst contextStacks = new Map();\n\n/**\n * Context provider for passing data down the component tree\n * @param {string} key - Context key\n * @param {*} value - Context value\n * @param {Object} children - Children to render with context\n * @returns {Object} Children with context available\n */\nexport function provideContext(key, value) {\n // Initialize context stack if it doesn't exist\n if (!contextStacks.has(key)) {\n contextStacks.set(key, []);\n }\n \n const stack = contextStacks.get(key);\n \n // Store previous value\n const previousValue = globalState.get(key);\n \n // Push previous value to stack and set new value\n stack.push(previousValue);\n globalState.set(key, value);\n}\n\n/**\n * Create a context provider component that works with the rendering system\n * @param {string} key - Context key\n * @param {*} value - Context value\n * @param {Object} children - Children to render with context\n * @returns {Function} Component function that provides context\n */\nexport function createContextProvider(key, value, children) {\n // Return a function that will render the children within the context\n return (renderFunction) => {\n try {\n // Provide context\n provideContext(key, value);\n \n // If a render function is provided, use it to render children\n // Otherwise return children to be rendered by the caller\n if (renderFunction && typeof renderFunction === 'function') {\n return renderFunction(children);\n } else {\n return children;\n }\n } finally {\n // Always restore context when done\n restoreContext(key);\n }\n };\n}\n\n/**\n * Restore context to previous value\n * @param {string} key - Context key\n */\nexport function restoreContext(key) {\n if (!contextStacks.has(key)) return;\n \n const stack = contextStacks.get(key);\n \n // Restore previous value from stack\n const previousValue = stack.pop();\n \n if (stack.length === 0) {\n // No more providers, delete the key if it was undefined before\n if (previousValue === undefined) {\n globalState.delete(key);\n } else {\n globalState.set(key, previousValue);\n }\n \n // Clean up empty stack\n contextStacks.delete(key);\n } else {\n // Restore previous value\n globalState.set(key, previousValue);\n }\n}\n\n/**\n * Clear all context stacks (useful for cleanup after rendering)\n */\nexport function clearAllContexts() {\n contextStacks.clear();\n // Note: This doesn't clear globalState as it might contain other data\n}\n\n/**\n * Context consumer to access provided context\n * @param {string} key - Context key\n * @returns {*} Context value\n */\nexport function useContext(key) {\n return globalState.get(key);\n}\n", "/**\n * @fileoverview State Persistence for Coherent.js\n * Provides persistent state management with multiple storage backends\n * @module @coherent.js/core/state/state-persistence\n */\n\n/**\n * @typedef {'localStorage'|'sessionStorage'|'indexedDB'|'memory'} StorageType\n */\n\n/**\n * @typedef {Object} PersistenceOptions\n * @property {StorageType} [storage='localStorage'] - Storage backend to use\n * @property {string} [key='coherent-state'] - Storage key prefix\n * @property {boolean} [debounce=true] - Debounce state saves\n * @property {number} [debounceDelay=300] - Debounce delay in ms\n * @property {Function} [serialize=JSON.stringify] - Serialization function\n * @property {Function} [deserialize=JSON.parse] - Deserialization function\n * @property {Array<string>} [include] - Keys to include (whitelist)\n * @property {Array<string>} [exclude] - Keys to exclude (blacklist)\n * @property {boolean} [encrypt=false] - Encrypt stored data\n * @property {string} [encryptionKey] - Encryption key\n * @property {Function} [onSave] - Callback when state is saved\n * @property {Function} [onLoad] - Callback when state is loaded\n * @property {Function} [onError] - Error callback\n * @property {boolean} [versioning=false] - Enable versioning\n * @property {string} [version='1.0.0'] - Current version\n * @property {Function} [migrate] - Migration function for version changes\n * @property {number} [ttl] - Time to live in milliseconds\n * @property {boolean} [crossTab=false] - Enable cross-tab synchronization\n */\n\n/**\n * Storage adapter interface\n * @interface StorageAdapter\n */\n\n/**\n * LocalStorage adapter\n */\nclass LocalStorageAdapter {\n constructor() {\n this.available = typeof localStorage !== 'undefined';\n }\n\n async get(key) {\n if (!this.available) return null;\n try {\n return localStorage.getItem(key);\n } catch (error) {\n console.error('LocalStorage get error:', error);\n return null;\n }\n }\n\n async set(key, value) {\n if (!this.available) return false;\n try {\n localStorage.setItem(key, value);\n return true;\n } catch (error) {\n console.error('LocalStorage set error:', error);\n return false;\n }\n }\n\n async remove(key) {\n if (!this.available) return false;\n try {\n localStorage.removeItem(key);\n return true;\n } catch (error) {\n console.error('LocalStorage remove error:', error);\n return false;\n }\n }\n\n async clear() {\n if (!this.available) return false;\n try {\n localStorage.clear();\n return true;\n } catch (error) {\n console.error('LocalStorage clear error:', error);\n return false;\n }\n }\n}\n\n/**\n * SessionStorage adapter\n */\nclass SessionStorageAdapter {\n constructor() {\n this.available = typeof sessionStorage !== 'undefined';\n }\n\n async get(key) {\n if (!this.available) return null;\n try {\n return sessionStorage.getItem(key);\n } catch (error) {\n console.error('SessionStorage get error:', error);\n return null;\n }\n }\n\n async set(key, value) {\n if (!this.available) return false;\n try {\n sessionStorage.setItem(key, value);\n return true;\n } catch (error) {\n console.error('SessionStorage set error:', error);\n return false;\n }\n }\n\n async remove(key) {\n if (!this.available) return false;\n try {\n sessionStorage.removeItem(key);\n return true;\n } catch (error) {\n console.error('SessionStorage remove error:', error);\n return false;\n }\n }\n\n async clear() {\n if (!this.available) return false;\n try {\n sessionStorage.clear();\n return true;\n } catch (error) {\n console.error('SessionStorage clear error:', error);\n return false;\n }\n }\n}\n\n/**\n * IndexedDB adapter\n */\nclass IndexedDBAdapter {\n constructor(dbName = 'coherent-db', storeName = 'state') {\n this.dbName = dbName;\n this.storeName = storeName;\n this.available = typeof indexedDB !== 'undefined';\n this.db = null;\n }\n\n async init() {\n if (!this.available) return false;\n if (this.db) return true;\n\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, 1);\n\n request.onerror = () => {\n console.error('IndexedDB open error:', request.error);\n reject(request.error);\n };\n\n request.onsuccess = () => {\n this.db = request.result;\n resolve(true);\n };\n\n request.onupgradeneeded = (event) => {\n const db = event.target.result;\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName);\n }\n };\n });\n }\n\n async get(key) {\n if (!this.available) return null;\n await this.init();\n\n return new Promise((resolve, reject) => {\n const transaction = this.db.transaction([this.storeName], 'readonly');\n const store = transaction.objectStore(this.storeName);\n const request = store.get(key);\n\n request.onerror = () => {\n console.error('IndexedDB get error:', request.error);\n reject(request.error);\n };\n\n request.onsuccess = () => {\n resolve(request.result || null);\n };\n });\n }\n\n async set(key, value) {\n if (!this.available) return false;\n await this.init();\n\n return new Promise((resolve, reject) => {\n const transaction = this.db.transaction([this.storeName], 'readwrite');\n const store = transaction.objectStore(this.storeName);\n const request = store.put(value, key);\n\n request.onerror = () => {\n console.error('IndexedDB set error:', request.error);\n reject(request.error);\n };\n\n request.onsuccess = () => {\n resolve(true);\n };\n });\n }\n\n async remove(key) {\n if (!this.available) return false;\n await this.init();\n\n return new Promise((resolve, reject) => {\n const transaction = this.db.transaction([this.storeName], 'readwrite');\n const store = transaction.objectStore(this.storeName);\n const request = store.delete(key);\n\n request.onerror = () => {\n console.error('IndexedDB remove error:', request.error);\n reject(request.error);\n };\n\n request.onsuccess = () => {\n resolve(true);\n };\n });\n }\n\n async clear() {\n if (!this.available) return false;\n await this.init();\n\n return new Promise((resolve, reject) => {\n const transaction = this.db.transaction([this.storeName], 'readwrite');\n const store = transaction.objectStore(this.storeName);\n const request = store.clear();\n\n request.onerror = () => {\n console.error('IndexedDB clear error:', request.error);\n reject(request.error);\n };\n\n request.onsuccess = () => {\n resolve(true);\n };\n });\n }\n}\n\n/**\n * Memory adapter (for testing or fallback)\n */\nclass MemoryAdapter {\n constructor() {\n this.storage = new Map();\n this.available = true;\n }\n\n async get(key) {\n return this.storage.get(key) || null;\n }\n\n async set(key, value) {\n this.storage.set(key, value);\n return true;\n }\n\n async remove(key) {\n return this.storage.delete(key);\n }\n\n async clear() {\n this.storage.clear();\n return true;\n }\n}\n\n/**\n * Simple encryption/decryption (basic XOR cipher)\n * For production, use Web Crypto API or a proper crypto library\n */\nclass SimpleEncryption {\n constructor(key) {\n this.key = key || 'default-key';\n }\n\n encrypt(text) {\n let result = '';\n for (let i = 0; i < text.length; i++) {\n result += String.fromCharCode(\n text.charCodeAt(i) ^ this.key.charCodeAt(i % this.key.length)\n );\n }\n return btoa(result);\n }\n\n decrypt(encrypted) {\n const text = atob(encrypted);\n let result = '';\n for (let i = 0; i < text.length; i++) {\n result += String.fromCharCode(\n text.charCodeAt(i) ^ this.key.charCodeAt(i % this.key.length)\n );\n }\n return result;\n }\n}\n\n/**\n * Create storage adapter\n * @param {StorageType} type - Storage type\n * @returns {StorageAdapter} Storage adapter instance\n */\nfunction createStorageAdapter(type) {\n switch (type) {\n case 'localStorage':\n return new LocalStorageAdapter();\n case 'sessionStorage':\n return new SessionStorageAdapter();\n case 'indexedDB':\n return new IndexedDBAdapter();\n case 'memory':\n return new MemoryAdapter();\n default:\n return new LocalStorageAdapter();\n }\n}\n\n/**\n * Create persistent state manager\n * @param {Object} initialState - Initial state\n * @param {PersistenceOptions} options - Persistence options\n * @returns {Object} Persistent state manager\n */\nexport function createPersistentState(initialState = {}, options = {}) {\n const opts = {\n storage: 'localStorage',\n key: 'coherent-state',\n debounce: true,\n debounceDelay: 300,\n serialize: JSON.stringify,\n deserialize: JSON.parse,\n include: null,\n exclude: null,\n encrypt: false,\n encryptionKey: null,\n onSave: null,\n onLoad: null,\n onError: null,\n versioning: false,\n version: '1.0.0',\n migrate: null,\n ttl: null,\n crossTab: false,\n ...options\n };\n\n const adapter = createStorageAdapter(opts.storage);\n const encryption = opts.encrypt ? new SimpleEncryption(opts.encryptionKey) : null;\n\n let state = { ...initialState };\n let saveTimeout = null;\n const listeners = new Set();\n\n /**\n * Filter state keys based on include/exclude options\n * @param {Object} obj - State object\n * @returns {Object} Filtered state\n */\n function filterKeys(obj) {\n if (!obj || typeof obj !== 'object') return obj;\n\n // If include list is provided, only include those keys\n if (opts.include && Array.isArray(opts.include)) {\n const filtered = {};\n opts.include.forEach(key => {\n if (key in obj) {\n filtered[key] = obj[key];\n }\n });\n return filtered;\n }\n\n // If exclude list is provided, exclude those keys\n if (opts.exclude && Array.isArray(opts.exclude)) {\n const filtered = { ...obj };\n opts.exclude.forEach(key => {\n delete filtered[key];\n });\n return filtered;\n }\n\n return obj;\n }\n\n /**\n * Save state to storage\n * @param {boolean} immediate - Save immediately without debounce\n */\n async function save(immediate = false) {\n if (opts.debounce && !immediate) {\n clearTimeout(saveTimeout);\n saveTimeout = setTimeout(() => save(true), opts.debounceDelay);\n return;\n }\n\n try {\n const filteredState = filterKeys(state);\n const serialized = opts.serialize(filteredState);\n\n // Add metadata\n const data = {\n state: serialized,\n version: opts.version,\n timestamp: Date.now(),\n ttl: opts.ttl\n };\n\n let dataString = JSON.stringify(data);\n\n // Encrypt if enabled\n if (encryption) {\n dataString = encryption.encrypt(dataString);\n }\n\n await adapter.set(opts.key, dataString);\n\n // Call onSave callback\n if (opts.onSave) {\n opts.onSave(filteredState);\n }\n\n // Broadcast to other tabs if cross-tab sync is enabled\n if (opts.crossTab && typeof BroadcastChannel !== 'undefined') {\n const channel = new BroadcastChannel('coherent-state-sync');\n channel.postMessage({ type: 'state-update', state: filteredState });\n channel.close();\n }\n } catch (error) {\n console.error('State save error:', error);\n if (opts.onError) {\n opts.onError(error);\n }\n }\n }\n\n /**\n * Load state from storage\n */\n async function load() {\n try {\n let dataString = await adapter.get(opts.key);\n if (!dataString) return null;\n\n // Decrypt if enabled\n if (encryption) {\n dataString = encryption.decrypt(dataString);\n }\n\n const data = JSON.parse(dataString);\n\n // Check TTL\n if (data.ttl && data.timestamp) {\n const age = Date.now() - data.timestamp;\n if (age > data.ttl) {\n await adapter.remove(opts.key);\n return null;\n }\n }\n\n // Check version and migrate if needed\n if (opts.versioning && data.version !== opts.version) {\n if (opts.migrate) {\n const migrated = opts.migrate(data.state, data.version, opts.version);\n return opts.deserialize(migrated);\n }\n return null;\n }\n\n const loadedState = opts.deserialize(data.state);\n\n // Call onLoad callback\n if (opts.onLoad) {\n opts.onLoad(loadedState);\n }\n\n return loadedState;\n } catch (error) {\n console.error('State load error:', error);\n if (opts.onError) {\n opts.onError(error);\n }\n return null;\n }\n }\n\n /**\n * Subscribe to state changes\n * @param {Function} listener - Change listener\n * @returns {Function} Unsubscribe function\n */\n function subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n /**\n * Notify listeners of state changes\n * @param {Object} oldState - Previous state\n * @param {Object} newState - New state\n */\n function notifyListeners(oldState, newState) {\n listeners.forEach(listener => {\n try {\n listener(newState, oldState);\n } catch (error) {\n console.error('Listener error:', error);\n }\n });\n }\n\n /**\n * Get current state\n * @param {string} [key] - State key\n * @returns {*} State value or entire state\n */\n function getState(key) {\n return key ? state[key] : { ...state };\n }\n\n /**\n * Set state\n * @param {Object|Function} updates - State updates or updater function\n * @param {boolean} persist - Persist to storage\n */\n function setState(updates, persist = true) {\n const oldState = { ...state };\n\n if (typeof updates === 'function') {\n updates = updates(oldState);\n }\n\n state = { ...state, ...updates };\n\n notifyListeners(oldState, state);\n\n if (persist) {\n save();\n }\n }\n\n /**\n * Reset state to initial values\n * @param {boolean} persist - Persist to storage\n */\n function resetState(persist = true) {\n const oldState = { ...state };\n state = { ...initialState };\n notifyListeners(oldState, state);\n\n if (persist) {\n save(true);\n }\n }\n\n /**\n * Clear persisted state\n */\n async function clearStorage() {\n await adapter.remove(opts.key);\n }\n\n /**\n * Manually trigger persistence\n */\n async function persist() {\n await save(true);\n }\n\n /**\n * Restore state from storage\n */\n async function restore() {\n const loaded = await load();\n if (loaded) {\n const oldState = { ...state };\n state = { ...state, ...loaded };\n notifyListeners(oldState, state);\n return true;\n }\n return false;\n }\n\n // Setup cross-tab synchronization\n if (opts.crossTab && typeof BroadcastChannel !== 'undefined') {\n const channel = new BroadcastChannel('coherent-state-sync');\n channel.onmessage = (event) => {\n if (event.data.type === 'state-update') {\n const oldState = { ...state };\n state = { ...state, ...event.data.state };\n notifyListeners(oldState, state);\n }\n };\n }\n\n // Auto-restore on creation\n if (opts.storage !== 'memory') {\n restore();\n }\n\n return {\n getState,\n setState,\n resetState,\n subscribe,\n persist,\n restore,\n clearStorage,\n load,\n save: () => save(true),\n get adapter() {\n return adapter;\n }\n };\n}\n\n/**\n * Create persistent state with localStorage\n * @param {Object} initialState - Initial state\n * @param {string} key - Storage key\n * @param {Partial<PersistenceOptions>} options - Additional options\n * @returns {Object} Persistent state manager\n */\nexport function withLocalStorage(initialState = {}, key = 'coherent-state', options = {}) {\n return createPersistentState(initialState, {\n ...options,\n storage: 'localStorage',\n key\n });\n}\n\n/**\n * Create persistent state with sessionStorage\n * @param {Object} initialState - Initial state\n * @param {string} key - Storage key\n * @param {Partial<PersistenceOptions>} options - Additional options\n * @returns {Object} Persistent state manager\n */\nexport function withSessionStorage(initialState = {}, key = 'coherent-state', options = {}) {\n return createPersistentState(initialState, {\n ...options,\n storage: 'sessionStorage',\n key\n });\n}\n\n/**\n * Create persistent state with IndexedDB\n * @param {Object} initialState - Initial state\n * @param {string} key - Storage key\n * @param {Partial<PersistenceOptions>} options - Additional options\n * @returns {Object} Persistent state manager\n */\nexport function withIndexedDB(initialState = {}, key = 'coherent-state', options = {}) {\n return createPersistentState(initialState, {\n ...options,\n storage: 'indexedDB',\n key\n });\n}\n\nexport default {\n createPersistentState,\n withLocalStorage,\n withSessionStorage,\n withIndexedDB,\n createStorageAdapter\n};\n", "/**\n * @fileoverview State Validation for Coherent.js\n * Provides JSON Schema validation and custom validators for state management\n * @module @coherent.js/core/state/state-validation\n */\n\n/**\n * @typedef {Object} ValidationOptions\n * @property {Object} [schema] - JSON Schema for validation\n * @property {Object<string, Function>} [validators] - Custom validator functions\n * @property {boolean} [strict=false] - Strict mode (throw on validation errors)\n * @property {boolean} [coerce=false] - Coerce types to match schema\n * @property {Function} [onError] - Validation error callback\n * @property {boolean} [validateOnSet=true] - Validate on state updates\n * @property {boolean} [validateOnGet=false] - Validate on state reads\n * @property {Array<string>} [required] - Required fields\n * @property {boolean} [allowUnknown=true] - Allow unknown properties\n */\n\n/**\n * @typedef {Object} ValidationResult\n * @property {boolean} valid - Whether validation passed\n * @property {Array<ValidationError>} errors - Array of validation errors\n * @property {*} value - Validated/coerced value\n */\n\n/**\n * @typedef {Object} ValidationError\n * @property {string} path - Property path that failed validation\n * @property {string} message - Error message\n * @property {string} type - Error type\n * @property {*} value - The invalid value\n * @property {*} expected - Expected value/type\n */\n\n/**\n * Simple JSON Schema validator\n */\nclass SchemaValidator {\n constructor(schema, options = {}) {\n this.schema = schema;\n this.options = {\n coerce: false,\n allowUnknown: true,\n ...options\n };\n }\n\n /**\n * Validate value against schema\n * @param {*} value - Value to validate\n * @param {Object} schema - Schema to validate against\n * @param {string} path - Current path in object\n * @returns {ValidationResult} Validation result\n */\n validate(value, schema = this.schema, path = '') {\n const errors = [];\n let coercedValue = value;\n\n // Type validation\n if (schema.type) {\n const typeResult = this.validateType(value, schema.type, path);\n if (!typeResult.valid) {\n errors.push(...typeResult.errors);\n if (!this.options.coerce) {\n return { valid: false, errors, value };\n }\n }\n coercedValue = typeResult.value;\n }\n\n // Enum validation\n if (schema.enum) {\n const enumResult = this.validateEnum(coercedValue, schema.enum, path);\n if (!enumResult.valid) {\n errors.push(...enumResult.errors);\n }\n }\n\n // String validations\n if (schema.type === 'string') {\n const stringResult = this.validateString(coercedValue, schema, path);\n if (!stringResult.valid) {\n errors.push(...stringResult.errors);\n }\n }\n\n // Number validations\n if (schema.type === 'number' || schema.type === 'integer') {\n const numberResult = this.validateNumber(coercedValue, schema, path);\n if (!numberResult.valid) {\n errors.push(...numberResult.errors);\n }\n }\n\n // Array validations\n if (schema.type === 'array') {\n const arrayResult = this.validateArray(coercedValue, schema, path);\n if (!arrayResult.valid) {\n errors.push(...arrayResult.errors);\n }\n coercedValue = arrayResult.value;\n }\n\n // Object validations\n if (schema.type === 'object') {\n const objectResult = this.validateObject(coercedValue, schema, path);\n if (!objectResult.valid) {\n errors.push(...objectResult.errors);\n }\n coercedValue = objectResult.value;\n }\n\n // Custom validation function\n if (schema.validate && typeof schema.validate === 'function') {\n const customResult = schema.validate(coercedValue);\n if (customResult !== true) {\n errors.push({\n path,\n message: typeof customResult === 'string' ? customResult : 'Custom validation failed',\n type: 'custom',\n value: coercedValue\n });\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n value: coercedValue\n };\n }\n\n validateType(value, type, path) {\n const actualType = Array.isArray(value) ? 'array' : typeof value;\n const errors = [];\n let coercedValue = value;\n\n // Support array of types\n const types = Array.isArray(type) ? type : [type];\n\n const isValid = types.some(t => {\n if (t === 'array') return Array.isArray(value);\n if (t === 'null') return value === null;\n if (t === 'integer') return typeof value === 'number' && Number.isInteger(value);\n return typeof value === t;\n });\n\n if (!isValid) {\n if (this.options.coerce) {\n // Try to coerce\n const primaryType = types[0];\n try {\n if (primaryType === 'string') {\n coercedValue = String(value);\n } else if (primaryType === 'number') {\n coercedValue = Number(value);\n if (isNaN(coercedValue)) {\n errors.push({\n path,\n message: `Cannot coerce \"${value}\" to number`,\n type: 'type',\n value,\n expected: primaryType\n });\n }\n } else if (primaryType === 'boolean') {\n coercedValue = Boolean(value);\n } else if (primaryType === 'integer') {\n coercedValue = parseInt(value, 10);\n if (isNaN(coercedValue)) {\n errors.push({\n path,\n message: `Cannot coerce \"${value}\" to integer`,\n type: 'type',\n value,\n expected: primaryType\n });\n }\n }\n } catch {\n errors.push({\n path,\n message: `Cannot coerce value to ${primaryType}`,\n type: 'type',\n value,\n expected: primaryType\n });\n }\n } else {\n errors.push({\n path,\n message: `Expected type ${types.join(' or ')}, got ${actualType}`,\n type: 'type',\n value,\n expected: type\n });\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n value: coercedValue\n };\n }\n\n validateEnum(value, enumValues, path) {\n const errors = [];\n if (!enumValues.includes(value)) {\n errors.push({\n path,\n message: `Value must be one of: ${enumValues.join(', ')}`,\n type: 'enum',\n value,\n expected: enumValues\n });\n }\n return { valid: errors.length === 0, errors };\n }\n\n validateString(value, schema, path) {\n const errors = [];\n\n if (schema.minLength !== undefined && value.length < schema.minLength) {\n errors.push({\n path,\n message: `String length must be >= ${schema.minLength}`,\n type: 'minLength',\n value\n });\n }\n\n if (schema.maxLength !== undefined && value.length > schema.maxLength) {\n errors.push({\n path,\n message: `String length must be <= ${schema.maxLength}`,\n type: 'maxLength',\n value\n });\n }\n\n if (schema.pattern) {\n const regex = new RegExp(schema.pattern);\n if (!regex.test(value)) {\n errors.push({\n path,\n message: `String does not match pattern: ${schema.pattern}`,\n type: 'pattern',\n value\n });\n }\n }\n\n if (schema.format) {\n const formatResult = this.validateFormat(value, schema.format, path);\n if (!formatResult.valid) {\n errors.push(...formatResult.errors);\n }\n }\n\n return { valid: errors.length === 0, errors };\n }\n\n validateFormat(value, format, path) {\n const errors = [];\n const formats = {\n email: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\n url: /^https?:\\/\\/.+/,\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\n date: /^\\d{4}-\\d{2}-\\d{2}$/,\n 'date-time': /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/\n };\n\n if (formats[format] && !formats[format].test(value)) {\n errors.push({\n path,\n message: `String does not match format: ${format}`,\n type: 'format',\n value,\n expected: format\n });\n }\n\n return { valid: errors.length === 0, errors };\n }\n\n validateNumber(value, schema, path) {\n const errors = [];\n\n if (schema.minimum !== undefined && value < schema.minimum) {\n errors.push({\n path,\n message: `Number must be >= ${schema.minimum}`,\n type: 'minimum',\n value\n });\n }\n\n if (schema.maximum !== undefined && value > schema.maximum) {\n errors.push({\n path,\n message: `Number must be <= ${schema.maximum}`,\n type: 'maximum',\n value\n });\n }\n\n if (schema.exclusiveMinimum !== undefined && value <= schema.exclusiveMinimum) {\n errors.push({\n path,\n message: `Number must be > ${schema.exclusiveMinimum}`,\n type: 'exclusiveMinimum',\n value\n });\n }\n\n if (schema.exclusiveMaximum !== undefined && value >= schema.exclusiveMaximum) {\n errors.push({\n path,\n message: `Number must be < ${schema.exclusiveMaximum}`,\n type: 'exclusiveMaximum',\n value\n });\n }\n\n if (schema.multipleOf !== undefined && value % schema.multipleOf !== 0) {\n errors.push({\n path,\n message: `Number must be multiple of ${schema.multipleOf}`,\n type: 'multipleOf',\n value\n });\n }\n\n return { valid: errors.length === 0, errors };\n }\n\n validateArray(value, schema, path) {\n const errors = [];\n const coercedValue = [...value];\n\n if (schema.minItems !== undefined && value.length < schema.minItems) {\n errors.push({\n path,\n message: `Array must have at least ${schema.minItems} items`,\n type: 'minItems',\n value\n });\n }\n\n if (schema.maxItems !== undefined && value.length > schema.maxItems) {\n errors.push({\n path,\n message: `Array must have at most ${schema.maxItems} items`,\n type: 'maxItems',\n value\n });\n }\n\n if (schema.uniqueItems) {\n const seen = new Set();\n const duplicates = [];\n value.forEach((item, index) => {\n const key = JSON.stringify(item);\n if (seen.has(key)) {\n duplicates.push(index);\n }\n seen.add(key);\n });\n if (duplicates.length > 0) {\n errors.push({\n path,\n message: 'Array items must be unique',\n type: 'uniqueItems',\n value\n });\n }\n }\n\n // Validate items\n if (schema.items) {\n value.forEach((item, index) => {\n const itemPath = `${path}[${index}]`;\n const itemResult = this.validate(item, schema.items, itemPath);\n if (!itemResult.valid) {\n errors.push(...itemResult.errors);\n }\n if (this.options.coerce) {\n coercedValue[index] = itemResult.value;\n }\n });\n }\n\n return {\n valid: errors.length === 0,\n errors,\n value: coercedValue\n };\n }\n\n validateObject(value, schema, path) {\n const errors = [];\n const coercedValue = { ...value };\n\n // Required properties\n if (schema.required) {\n schema.required.forEach(prop => {\n if (!(prop in value)) {\n errors.push({\n path: path ? `${path}.${prop}` : prop,\n message: `Required property \"${prop}\" is missing`,\n type: 'required',\n value: undefined\n });\n }\n });\n }\n\n // Validate properties\n if (schema.properties) {\n Object.entries(schema.properties).forEach(([prop, propSchema]) => {\n if (prop in value) {\n const propPath = path ? `${path}.${prop}` : prop;\n const propResult = this.validate(value[prop], propSchema, propPath);\n if (!propResult.valid) {\n errors.push(...propResult.errors);\n }\n if (this.options.coerce) {\n coercedValue[prop] = propResult.value;\n }\n }\n });\n }\n\n // Additional properties\n if (schema.additionalProperties === false && !this.options.allowUnknown) {\n const allowedProps = new Set(Object.keys(schema.properties || {}));\n Object.keys(value).forEach(prop => {\n if (!allowedProps.has(prop)) {\n errors.push({\n path: path ? `${path}.${prop}` : prop,\n message: `Unknown property \"${prop}\"`,\n type: 'additionalProperties',\n value: value[prop]\n });\n }\n });\n }\n\n // Min/max properties\n const propCount = Object.keys(value).length;\n if (schema.minProperties !== undefined && propCount < schema.minProperties) {\n errors.push({\n path,\n message: `Object must have at least ${schema.minProperties} properties`,\n type: 'minProperties',\n value\n });\n }\n\n if (schema.maxProperties !== undefined && propCount > schema.maxProperties) {\n errors.push({\n path,\n message: `Object must have at most ${schema.maxProperties} properties`,\n type: 'maxProperties',\n value\n });\n }\n\n return {\n valid: errors.length === 0,\n errors,\n value: coercedValue\n };\n }\n}\n\n/**\n * Create validated state manager\n * @param {Object} initialState - Initial state\n * @param {ValidationOptions} options - Validation options\n * @returns {Object} Validated state manager\n */\nexport function createValidatedState(initialState = {}, options = {}) {\n const opts = {\n schema: null,\n validators: {},\n strict: false,\n coerce: false,\n onError: null,\n validateOnSet: true,\n validateOnGet: false,\n required: [],\n allowUnknown: true,\n ...options\n };\n\n const schemaValidator = opts.schema ? new SchemaValidator(opts.schema, {\n coerce: opts.coerce,\n allowUnknown: opts.allowUnknown\n }) : null;\n\n let state = { ...initialState };\n const listeners = new Set();\n const validationErrors = new Map();\n\n /**\n * Validate state\n * @param {Object} value - State to validate\n * @param {string} key - State key (for partial validation)\n * @returns {ValidationResult} Validation result\n */\n function validateState(value, key = null) {\n const errors = [];\n let validatedValue = value;\n\n // JSON Schema validation\n if (schemaValidator) {\n const schema = key && opts.schema.properties\n ? opts.schema.properties[key]\n : opts.schema;\n\n const result = schemaValidator.validate(value, schema, key || '');\n if (!result.valid) {\n errors.push(...result.errors);\n }\n validatedValue = result.value;\n }\n\n // Custom validators\n if (key && opts.validators[key]) {\n const validator = opts.validators[key];\n const result = validator(value);\n if (result !== true) {\n errors.push({\n path: key,\n message: typeof result === 'string' ? result : 'Validation failed',\n type: 'custom',\n value\n });\n }\n } else if (!key) {\n // Run custom validators for all fields when validating full state\n Object.entries(opts.validators).forEach(([fieldKey, validator]) => {\n if (fieldKey in value) {\n const result = validator(value[fieldKey]);\n if (result !== true) {\n errors.push({\n path: fieldKey,\n message: typeof result === 'string' ? result : 'Validation failed',\n type: 'custom',\n value: value[fieldKey]\n });\n }\n }\n });\n }\n\n // Required fields\n if (opts.required.length > 0 && !key) {\n opts.required.forEach(field => {\n if (!(field in value)) {\n errors.push({\n path: field,\n message: `Required field \"${field}\" is missing`,\n type: 'required',\n value: undefined\n });\n }\n });\n }\n\n return {\n valid: errors.length === 0,\n errors,\n value: validatedValue\n };\n }\n\n /**\n * Get state\n * @param {string} key - State key\n * @returns {*} State value\n */\n function getState(key) {\n const value = key ? state[key] : { ...state };\n\n if (opts.validateOnGet) {\n const result = validateState(value, key);\n if (!result.valid) {\n validationErrors.set(key || '__root__', result.errors);\n if (opts.onError) {\n opts.onError(result.errors);\n }\n }\n }\n\n return value;\n }\n\n /**\n * Set state\n * @param {Object|Function} updates - State updates\n * @throws {Error} If validation fails in strict mode\n */\n function setState(updates) {\n const oldState = { ...state };\n\n if (typeof updates === 'function') {\n updates = updates(oldState);\n }\n\n // Create the new full state for validation\n const newState = { ...state, ...updates };\n\n // Validate before setting\n if (opts.validateOnSet) {\n const result = validateState(newState);\n\n if (!result.valid) {\n validationErrors.set('__root__', result.errors);\n\n if (opts.onError) {\n opts.onError(result.errors);\n }\n\n if (opts.strict) {\n const error = new Error('Validation failed');\n error.validationErrors = result.errors;\n throw error;\n }\n\n // Don't update state if validation fails in non-strict mode\n return;\n }\n\n // Use coerced value if coercion is enabled\n if (opts.coerce) {\n const updatedKeys = Object.keys(updates);\n const newUpdates = {};\n updatedKeys.forEach(key => {\n if (result.value[key] !== state[key]) {\n newUpdates[key] = result.value[key];\n }\n });\n updates = newUpdates;\n }\n\n // Clear errors on successful validation\n validationErrors.clear();\n }\n\n state = { ...state, ...updates };\n\n // Notify listeners\n listeners.forEach(listener => {\n try {\n listener(state, oldState);\n } catch (error) {\n console.error('Listener error:', error);\n }\n });\n }\n\n /**\n * Subscribe to state changes\n * @param {Function} listener - Change listener\n * @returns {Function} Unsubscribe function\n */\n function subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n /**\n * Get validation errors\n * @param {string} key - State key\n * @returns {Array<ValidationError>} Validation errors\n */\n function getErrors(key = '__root__') {\n return validationErrors.get(key) || [];\n }\n\n /**\n * Check if state is valid\n * @returns {boolean} Whether state is valid\n */\n function isValid() {\n const result = validateState(state);\n if (!result.valid) {\n validationErrors.set('__root__', result.errors);\n }\n return result.valid;\n }\n\n /**\n * Validate specific field\n * @param {string} key - Field key\n * @param {*} value - Field value\n * @returns {ValidationResult} Validation result\n */\n function validateField(key, value) {\n return validateState(value, key);\n }\n\n return {\n getState,\n setState,\n subscribe,\n getErrors,\n isValid,\n validateField,\n validate: () => validateState(state)\n };\n}\n\n/**\n * Common validators\n */\nexport const validators = {\n /**\n * Email validator\n * @param {string} value - Email to validate\n * @returns {boolean|string} True if valid, error message otherwise\n */\n email: (value) => {\n if (typeof value !== 'string') return 'Email must be a string';\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) return 'Invalid email format';\n return true;\n },\n\n /**\n * URL validator\n * @param {string} value - URL to validate\n * @returns {boolean|string} True if valid, error message otherwise\n */\n url: (value) => {\n if (typeof value !== 'string') return 'URL must be a string';\n try {\n new URL(value);\n return true;\n } catch {\n return 'Invalid URL format';\n }\n },\n\n /**\n * Range validator\n * @param {number} min - Minimum value\n * @param {number} max - Maximum value\n * @returns {Function} Validator function\n */\n range: (min, max) => (value) => {\n if (typeof value !== 'number') return 'Value must be a number';\n if (value < min || value > max) return `Value must be between ${min} and ${max}`;\n return true;\n },\n\n /**\n * Length validator\n * @param {number} min - Minimum length\n * @param {number} max - Maximum length\n * @returns {Function} Validator function\n */\n length: (min, max) => (value) => {\n if (typeof value !== 'string') return 'Value must be a string';\n if (value.length < min || value.length > max) {\n return `Length must be between ${min} and ${max}`;\n }\n return true;\n },\n\n /**\n * Pattern validator\n * @param {RegExp|string} pattern - Pattern to match\n * @returns {Function} Validator function\n */\n pattern: (pattern) => (value) => {\n if (typeof value !== 'string') return 'Value must be a string';\n const regex = typeof pattern === 'string' ? new RegExp(pattern) : pattern;\n if (!regex.test(value)) return `Value does not match pattern: ${pattern}`;\n return true;\n },\n\n /**\n * Required validator\n * @param {*} value - Value to validate\n * @returns {boolean|string} True if valid, error message otherwise\n */\n required: (value) => {\n if (value === undefined || value === null || value === '') {\n return 'Value is required';\n }\n return true;\n }\n};\n\nexport default {\n createValidatedState,\n validators,\n SchemaValidator\n};\n", "/**\n * Enhanced OOP State Patterns for Coherent.js\n *\n * Specialized state classes that encapsulate complex behaviors\n * while maintaining the hybrid FP/OOP architecture\n */\n\nimport { createReactiveState } from './reactive-state.js';\n\n/**\n * Form State - OOP encapsulation for form logic\n */\nexport class FormState {\n constructor(initialValues = {}, options = {}) {\n this._state = createReactiveState({\n values: { ...initialValues },\n errors: {},\n touched: {},\n isSubmitting: false,\n isValid: true\n }, options);\n\n this._validators = {};\n this._options = options;\n }\n\n // OOP methods for form management\n setValue(field, value) {\n this._state.set('values', {\n ...this._state.get('values'),\n [field]: value\n });\n this._validateField(field);\n this._state.set('touched', {\n ...this._state.get('touched'),\n [field]: true\n });\n }\n\n getValue(field) {\n return this._state.get('values')[field];\n }\n\n setError(field, error) {\n this._state.set('errors', {\n ...this._state.get('errors'),\n [field]: error\n });\n this._updateIsValid();\n }\n\n addValidator(field, validator) {\n this._validators[field] = validator;\n }\n\n validateAll() {\n const values = this._state.get('values');\n const errors = {};\n\n Object.entries(this._validators).forEach(([field, validator]) => {\n const error = validator(values[field], values);\n if (error) {\n errors[field] = error;\n }\n });\n\n this._state.set('errors', errors);\n this._updateIsValid();\n return Object.keys(errors).length === 0;\n }\n\n async submit(onSubmit) {\n if (!this.validateAll()) return false;\n\n this._state.set('isSubmitting', true);\n\n try {\n await onSubmit(this._state.get('values'));\n return true;\n } catch (error) {\n this.setError('_form', error.message);\n return false;\n } finally {\n this._state.set('isSubmitting', false);\n }\n }\n\n reset() {\n this._state.set('values', {});\n this._state.set('errors', {});\n this._state.set('touched', {});\n this._state.set('isSubmitting', false);\n this._state.set('isValid', true);\n }\n\n // Watch methods for FP integration\n watchValues(callback) {\n return this._state.watch('values', callback);\n }\n\n watchErrors(callback) {\n return this._state.watch('errors', callback);\n }\n\n watchSubmitting(callback) {\n return this._state.watch('isSubmitting', callback);\n }\n\n // Private methods\n _validateField(field) {\n const value = this.getValue(field);\n const validator = this._validators[field];\n\n if (validator) {\n const error = validator(value, this._state.get('values'));\n this.setError(field, error);\n }\n }\n\n _updateIsValid() {\n const hasErrors = Object.keys(this._state.get('errors')).some(key =>\n this._state.get('errors')[key]\n );\n this._state.set('isValid', !hasErrors);\n }\n}\n\n/**\n * List State - OOP for collection management\n */\nexport class ListState {\n constructor(initialItems = [], options = {}) {\n this._state = createReactiveState({\n items: [...initialItems],\n loading: false,\n error: null,\n filters: {},\n sortBy: null,\n sortOrder: 'asc',\n page: 1,\n pageSize: options.pageSize || 10\n }, options);\n\n this._options = options;\n }\n\n // OOP methods for list operations\n addItem(item) {\n this._state.set('items', [...this._state.get('items'), item]);\n }\n\n removeItem(indexOrPredicate) {\n const items = this._state.get('items');\n let newItems;\n\n if (typeof indexOrPredicate === 'number') {\n newItems = items.filter((_, i) => i !== indexOrPredicate);\n } else {\n newItems = items.filter(item => !indexOrPredicate(item));\n }\n\n this._state.set('items', newItems);\n }\n\n updateItem(indexOrPredicate, updates) {\n const items = this._state.get('items');\n const newItems = items.map((item, i) => {\n if (typeof indexOrPredicate === 'number') {\n return i === indexOrPredicate ? { ...item, ...updates } : item;\n } else {\n return indexOrPredicate(item) ? { ...item, ...updates } : item;\n }\n });\n\n this._state.set('items', newItems);\n }\n\n filter(filters) {\n this._state.set('filters', filters);\n this._state.set('page', 1); // Reset to first page\n }\n\n sort(sortBy, order = 'asc') {\n this._state.set('sortBy', sortBy);\n this._state.set('sortOrder', order);\n }\n\n setPage(page) {\n this._state.set('page', Math.max(1, page));\n }\n\n async load(loader) {\n this._state.set('loading', true);\n this._state.set('error', null);\n\n try {\n const items = await loader(this._state.get('filters'));\n this._state.set('items', items);\n return items;\n } catch (error) {\n this._state.set('error', error.message);\n return [];\n } finally {\n this._state.set('loading', false);\n }\n }\n\n // Computed properties\n get filteredItems() {\n const items = this._state.get('items');\n const filters = this._state.get('filters');\n\n return items.filter(item => {\n return Object.entries(filters).every(([key, value]) => {\n if (!value) return true;\n return String(item[key] || '').toLowerCase().includes(String(value).toLowerCase());\n });\n });\n }\n\n get sortedItems() {\n const items = this.filteredItems;\n const sortBy = this._state.get('sortBy');\n const sortOrder = this._state.get('sortOrder');\n\n if (!sortBy) return items;\n\n return [...items].sort((a, b) => {\n const aVal = a[sortBy];\n const bVal = b[sortBy];\n\n if (aVal === bVal) return 0;\n\n const comparison = aVal < bVal ? -1 : 1;\n return sortOrder === 'desc' ? -comparison : comparison;\n });\n }\n\n get paginatedItems() {\n const items = this.sortedItems;\n const page = this._state.get('page');\n const pageSize = this._state.get('pageSize');\n\n const start = (page - 1) * pageSize;\n const end = start + pageSize;\n\n return items.slice(start, end);\n }\n\n get totalPages() {\n return Math.ceil(this.sortedItems.length / this._state.get('pageSize'));\n }\n\n // Watch methods\n watchItems(callback) {\n return this._state.watch('items', callback);\n }\n\n watchLoading(callback) {\n return this._state.watch('loading', callback);\n }\n}\n\n/**\n * Modal State - OOP for modal/dialog management\n */\nexport class ModalState {\n constructor(_initialState = {}) {\n this._state = createReactiveState({\n isOpen: false,\n data: null,\n loading: false,\n error: null\n });\n\n this._resolvers = new Map();\n this._currentId = 0;\n }\n\n // OOP methods for modal control\n async open(data) {\n return new Promise((resolve) => {\n const id = ++this._currentId;\n this._resolvers.set(id, resolve);\n\n this._state.set('data', data);\n this._state.set('isOpen', true);\n this._state.set('error', null);\n });\n }\n\n close(result = null) {\n const currentId = this._currentId;\n const resolver = this._resolvers.get(currentId);\n\n if (resolver) {\n resolver(result);\n this._resolvers.delete(currentId);\n }\n\n this._state.set('isOpen', false);\n this._state.set('data', null);\n }\n\n setLoading(loading) {\n this._state.set('loading', loading);\n }\n\n setError(error) {\n this._state.set('error', error);\n }\n\n // Watch methods\n watchOpen(callback) {\n return this._state.watch('isOpen', callback);\n }\n\n watchData(callback) {\n return this._state.watch('data', callback);\n }\n}\n\n/**\n * Router State - OOP for navigation state\n */\nexport class RouterState {\n constructor(initialRoute = '/', options = {}) {\n this._state = createReactiveState({\n current: initialRoute,\n params: {},\n query: {},\n history: [initialRoute],\n canGoBack: false,\n canGoForward: false\n }, options);\n\n this._routes = new Map();\n this._options = options;\n }\n\n // OOP methods for routing\n addRoute(path, handler) {\n this._routes.set(path, handler);\n }\n\n navigate(path, params = {}, query = {}) {\n this._state.set('history', [...this._state.get('history'), path]);\n this._state.set('current', path);\n this._state.set('params', params);\n this._state.set('query', query);\n this._updateNavigationState();\n }\n\n back() {\n const history = this._state.get('history');\n if (history.length > 1) {\n const newHistory = history.slice(0, -1);\n const previousRoute = newHistory[newHistory.length - 1];\n\n this._state.set('history', newHistory);\n this._state.set('current', previousRoute);\n this._updateNavigationState();\n }\n }\n\n forward() {\n // Implementation for forward navigation\n // Would need to track forward history separately\n }\n\n // Watch methods\n watchRoute(callback) {\n return this._state.watch('current', callback);\n }\n\n watchParams(callback) {\n return this._state.watch('params', callback);\n }\n\n // Private methods\n _updateNavigationState() {\n const history = this._state.get('history');\n this._state.set('canGoBack', history.length > 1);\n this._state.set('canGoForward', false); // Simplified\n }\n}\n\n/**\n * Factory functions for creating enhanced state\n */\nexport function createFormState(initialValues, options) {\n return new FormState(initialValues, options);\n}\n\nexport function createListState(initialItems, options) {\n return new ListState(initialItems, options);\n}\n\nexport function createModalState(initialState) {\n return new ModalState(initialState);\n}\n\nexport function createRouterState(initialRoute, options) {\n return new RouterState(initialRoute, options);\n}\n\n/**\n * Demo showing hybrid FP/OOP usage\n */\nexport function demoEnhancedPatterns() {\n // OOP state management\n const userForm = createFormState({\n name: '',\n email: '',\n age: ''\n });\n\n const userList = createListState([]);\n const userModal = createModalState();\n\n // Add validators (OOP methods)\n userForm.addValidator('name', (value) => {\n if (!value || value.length < 2) {\n return 'Name must be at least 2 characters';\n }\n });\n\n userForm.addValidator('email', (value) => {\n if (!value.includes('@')) {\n return 'Invalid email address';\n }\n });\n\n // FP component that uses OOP state\n const UserForm = () => ({\n form: {\n onsubmit: async (e) => {\n e.preventDefault();\n const success = await userForm.submit(async (values) => {\n userList.addItem(values);\n userModal.close();\n });\n\n if (!success) {\n console.log('Form validation failed');\n }\n },\n children: [\n { input: {\n type: 'text',\n placeholder: 'Name',\n value: userForm.getValue('name'),\n oninput: (e) => userForm.setValue('name', e.target.value)\n }},\n { input: {\n type: 'email',\n placeholder: 'Email',\n value: userForm.getValue('email'),\n oninput: (e) => userForm.setValue('email', e.target.value)\n }},\n { button: {\n type: 'submit',\n text: userForm._state.get('isSubmitting') ? 'Saving...' : 'Save User',\n disabled: !userForm._state.get('isValid') || userForm._state.get('isSubmitting')\n }}\n ]\n }\n });\n\n return {\n UserForm,\n userForm,\n userList,\n userModal\n };\n}\n\nexport default {\n FormState,\n ListState,\n ModalState,\n RouterState,\n createFormState,\n createListState,\n createModalState,\n createRouterState,\n demoEnhancedPatterns\n};\n", "/**\n * @coherent.js/state - Reactive State Management Package\n *\n * A comprehensive state management solution for Coherent.js applications\n * providing reactive state, persistence, validation, and SSR-compatible state management.\n */\n\n// Re-export everything from reactive-state\nexport {\n Observable,\n ReactiveState,\n createReactiveState,\n observable,\n computed,\n stateUtils\n} from './reactive-state.js';\n\n// Import for default export\nimport {\n createReactiveState,\n observable,\n computed,\n stateUtils\n} from './reactive-state.js';\n\nimport {\n createState,\n globalStateManager,\n provideContext,\n createContextProvider,\n restoreContext,\n clearAllContexts,\n useContext\n} from './state-manager.js';\n\nimport {\n createPersistentState,\n withLocalStorage,\n withSessionStorage,\n withIndexedDB\n} from './state-persistence.js';\n\nimport {\n createValidatedState,\n validators\n} from './state-validation.js';\n\n// Import enhanced state patterns\nimport {\n createFormState,\n createListState,\n createModalState,\n createRouterState\n} from './enhanced-state-patterns.js';\n\n// Re-export everything from state-manager (SSR-compatible state)\nexport {\n createState,\n globalStateManager,\n provideContext,\n createContextProvider,\n restoreContext,\n clearAllContexts,\n useContext\n} from './state-manager.js';\n\n// Re-export everything from state-persistence\nexport {\n createPersistentState,\n withLocalStorage,\n withSessionStorage,\n withIndexedDB\n} from './state-persistence.js';\n\n// Re-export everything from state-validation\nexport {\n createValidatedState,\n validators\n} from './state-validation.js';\n\n// Re-export enhanced state patterns\nexport {\n createFormState,\n createListState,\n createModalState,\n createRouterState\n} from './enhanced-state-patterns.js';\n\n// Default export provides all utilities\nexport default {\n // Reactive state utilities\n createReactiveState,\n observable,\n computed,\n\n // SSR-compatible state management\n createState,\n globalStateManager,\n provideContext,\n createContextProvider,\n restoreContext,\n clearAllContexts,\n useContext,\n\n // Persistence utilities\n createPersistentState,\n withLocalStorage,\n withSessionStorage,\n withIndexedDB,\n\n // Validation utilities\n createValidatedState,\n validators,\n\n // Enhanced state patterns\n createFormState,\n createListState,\n createModalState,\n createRouterState,\n\n // State utilities\n stateUtils\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["computed", "observable", "persist"]
|
|
7
|
+
}
|