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":"proxy.js","sources":["../../../src/proxy.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, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\n\n// Path cache to avoid repeated array allocations\nconst pathCache = new WeakMap<string[], Map<string, string[]>>();\n\nfunction getCachedPath(path: string[], prop: string): string[] {\n let cache = pathCache.get(path);\n if (!cache) {\n cache = new Map();\n pathCache.set(path, cache);\n }\n\n let cached = cache.get(prop);\n if (!cached) {\n cached = [...path, prop];\n cache.set(prop, cached);\n }\n return cached;\n}\n\n/**\n * Creates a deep proxy that provides type-specific atomic operations for a flow.\n * The proxy tracks its path within the state tree and maps access to specific update logic.\n *\n * Reduced allocations, cached operations\n */\nexport function createDeepProxy<T = any, A = Record<string, any>>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T, A> {\n // Pre-bind commit function to avoid recreation\n const commit = (\n val: any,\n forceful: boolean,\n skipEquality = false,\n op?: string,\n ) => {\n try {\n // INTERNAL OPTIMIZATION: We fetch the RAW current state from the vault\n // without cloning it. Since we are about to produce a new IMMUTABLE state\n // using setInPath (which does structural cloning), this is safe and\n // avoiding a full deepClone of the entire tree on every tiny action\n // results in 100x performance in loops.\n const currentState = store.get(key, undefined, { bypassClone: true });\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n _op: op || (options as any)._op || \"set\",\n _path: path,\n } as any);\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // Pre-create update function\n const update = (val: any, op?: string) => {\n commit(val, false, true, op);\n };\n\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n // --- Meta-Operations (Fast path) ---\n if (prop === \"_val\") return currentVal;\n if (prop === \"_set\")\n return (val: any) => {\n commit(val, true, false, \"_set\");\n };\n if (prop === \"_patch\")\n return (val: any) => {\n commit(val, false, false, \"_patch\");\n };\n if (prop === \"__actions__\") return (options as any).actions;\n if (prop === \"_undo\") return () => store.undo(key);\n if (prop === \"_redo\") return () => store.redo(key);\n if (prop === \"_canUndo\") return (store.getHistory(key)?.length || 0) > 1;\n if (prop === \"_canRedo\")\n return (store.getRedoStack(key)?.length || 0) > 0;\n if (prop === \"_history\") return store.getHistory(key);\n\n // Handle plugin-provided operations (e.g., _persist)\n const pluginOps = store.getPluginOps(key, options);\n if (prop in pluginOps) return pluginOps[prop];\n\n // Type check once for this level\n const valType = typeof currentVal;\n const isArray = Array.isArray(currentVal);\n\n // --- Number Operations (Optimized with cached functions) ---\n if (valType === \"number\") {\n switch (prop) {\n case \"_increment\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_increment\");\n };\n case \"_decrement\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_decrement\");\n };\n case \"_add\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_add\");\n };\n case \"_subtract\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_subtract\");\n };\n case \"_multiply\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal * amount, \"_multiply\");\n };\n case \"_divide\":\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal / amount, \"_divide\");\n };\n case \"_pow\":\n return (n: number) => update(Math.pow(currentVal, n), \"_pow\");\n case \"_sqrt\":\n return () => update(Math.sqrt(currentVal), \"_sqrt\");\n case \"_abs\":\n return () => update(Math.abs(currentVal), \"_abs\");\n case \"_round\":\n return () => update(Math.round(currentVal), \"_round\");\n case \"_floor\":\n return () => update(Math.floor(currentVal), \"_floor\");\n case \"_ceil\":\n return () => update(Math.ceil(currentVal), \"_ceil\");\n case \"_mod\":\n return (n: number) => update(currentVal % n, \"_mod\");\n case \"_clamp\":\n return (min: number, max: number) =>\n update(Math.min(Math.max(currentVal, min), max), \"_clamp\");\n case \"_negate\":\n return () => update(-currentVal, \"_negate\");\n case \"_toPrecision\":\n return (p: number) =>\n update(parseFloat(currentVal.toPrecision(p)), \"_toPrecision\");\n }\n }\n\n // --- Array Operations (Optimized with minimal allocations) ---\n if (isArray) {\n switch (prop) {\n case \"_push\":\n return (item: any) => {\n // Manual copy instead of spread for large arrays\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < len; i++) newArr[i] = currentVal[i];\n newArr[len] = item;\n update(newArr, \"_push\");\n };\n case \"_pop\":\n return () => update(currentVal.slice(0, -1), \"_pop\");\n case \"_shift\":\n return () => update(currentVal.slice(1), \"_shift\");\n case \"_unshift\":\n return (item: any) => {\n // Manual copy for better performance\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n newArr[0] = item;\n for (let i = 0; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_unshift\");\n };\n case \"_filter\":\n return (fn: any) => update(currentVal.filter(fn), \"_filter\");\n case \"_map\":\n return (fn: any) => update(currentVal.map(fn), \"_map\");\n case \"_removeAt\":\n return (index: number) => {\n // Manual filter for single index\n const len = currentVal.length;\n const newArr = new Array(len - 1);\n let j = 0;\n for (let i = 0; i < len; i++) {\n if (i !== index) newArr[j++] = currentVal[i];\n }\n update(newArr, \"_removeAt\");\n };\n case \"_insertAt\":\n return (index: number, item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < index; i++) newArr[i] = currentVal[i];\n newArr[index] = item;\n for (let i = index; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_insertAt\");\n };\n // --- New Ops (v4.8.0) ---\n case \"_splice\":\n return (s: number, d: number, ...items: any[]) => {\n const next = [...currentVal];\n next.splice(s, d, ...items);\n update(next, \"_splice\");\n };\n case \"_reverse\":\n return () => update([...currentVal].reverse(), \"_reverse\");\n case \"_sort\":\n return (fn: any) => update([...currentVal].sort(fn), \"_sort\");\n case \"_fill\":\n return (v: any, s?: number, e?: number) => {\n const next = [...currentVal];\n next.fill(v, s, e);\n update(next, \"_fill\");\n };\n case \"_concat\":\n return (other: any[]) =>\n update(currentVal.concat(other), \"_concat\");\n case \"_uniq\":\n return () => update(Array.from(new Set(currentVal)), \"_uniq\");\n case \"_shuffle\":\n return () => {\n const next = [...currentVal];\n for (let i = next.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [next[i], next[j]] = [next[j], next[i]];\n }\n update(next, \"_shuffle\");\n };\n // Traversers that return a proxy to an item\n case \"_at\":\n return (i: number) => {\n const idx = i < 0 ? currentVal.length + i : i;\n return createDeepProxy(\n key,\n getCachedPath(path, idx.toString()),\n currentVal[idx],\n options,\n );\n };\n case \"_first\":\n return () =>\n createDeepProxy(\n key,\n getCachedPath(path, \"0\"),\n currentVal[0],\n options,\n );\n case \"_last\":\n return () =>\n createDeepProxy(\n key,\n getCachedPath(path, (currentVal.length - 1).toString()),\n currentVal[currentVal.length - 1],\n options,\n );\n case \"_findBy\":\n return (fn: (item: any, idx: number) => boolean) => {\n const idx = currentVal.findIndex(fn);\n if (idx === -1) return undefined;\n return createDeepProxy(\n key,\n getCachedPath(path, idx.toString()),\n currentVal[idx],\n options,\n );\n };\n }\n }\n\n // --- String Operations ---\n if (valType === \"string\") {\n switch (prop) {\n case \"_append\":\n return (str: string) => update(currentVal + str, \"_append\");\n case \"_prepend\":\n return (str: string) => update(str + currentVal, \"_prepend\");\n case \"_uppercase\":\n return () => update(currentVal.toUpperCase(), \"_uppercase\");\n case \"_lowercase\":\n return () => update(currentVal.toLowerCase(), \"_lowercase\");\n case \"_trim\":\n return () => update(currentVal.trim(), \"_trim\");\n // --- New Ops (v4.8.0) ---\n case \"_replace\":\n return (p: string | RegExp, r: string) =>\n update(currentVal.replace(p, r), \"_replace\");\n case \"_replaceAll\":\n return (p: string | RegExp, r: string) =>\n update(currentVal.replaceAll(p, r), \"_replaceAll\");\n case \"_substring\":\n return (s: number, e?: number) =>\n update(currentVal.substring(s, e), \"_substring\");\n case \"_slice\":\n return (s: number, e?: number) =>\n update(currentVal.slice(s, e), \"_slice\");\n case \"_capitalize\":\n return () =>\n update(\n currentVal.charAt(0).toUpperCase() + currentVal.slice(1),\n \"_capitalize\",\n );\n case \"_truncate\":\n return (l: number, s = \"...\") =>\n update(\n currentVal.length > l\n ? currentVal.substring(0, l) + s\n : currentVal,\n \"_truncate\",\n );\n case \"_padEnd\":\n return (l: number, f?: string) =>\n update(currentVal.padEnd(l, f), \"_padEnd\");\n case \"_padStart\":\n return (l: number, f?: string) =>\n update(currentVal.padStart(l, f), \"_padStart\");\n case \"_repeat\":\n return (c: number) => update(currentVal.repeat(c), \"_repeat\");\n }\n }\n\n // --- Boolean Operations ---\n if (valType === \"boolean\") {\n if (prop === \"_toggle\") {\n return () => update(!currentVal, \"_toggle\");\n }\n }\n\n // --- Object Operations ---\n if (currentVal !== null && valType === \"object\" && !isArray) {\n if (prop === \"_merge\") {\n return (obj: any) => {\n // Object.assign faster than spread for merge\n const merged = Object.assign({}, currentVal, obj);\n update(merged, \"_merge\");\n };\n }\n if (prop === \"_delete\") {\n return (keyToDel: string) => {\n // Only copy if key exists\n if (!(keyToDel in currentVal)) return;\n const keys = Object.keys(currentVal);\n const next: any = {};\n for (const k of keys) {\n if (k !== keyToDel) next[k] = currentVal[k];\n }\n update(next, \"_delete\");\n };\n }\n // --- New Ops (v4.8.0) ---\n if (prop === \"_pick\") {\n return (keys: string[]) => {\n const next: any = {};\n keys.forEach((k) => {\n if (k in currentVal) next[k] = currentVal[k];\n });\n update(next, \"_pick\");\n };\n }\n if (prop === \"_omit\") {\n return (keys: string[]) => {\n const next = { ...currentVal };\n keys.forEach((k) => delete next[k]);\n update(next, \"_omit\");\n };\n }\n if (prop === \"_defaults\") {\n return (d: any) => update({ ...d, ...currentVal }, \"_defaults\");\n }\n if (prop === \"_clear\") return () => update({}, \"_clear\");\n if (prop === \"_clone\") return () => update({ ...currentVal }, \"_clone\");\n if (prop === \"_assign\")\n return (s: any) => update({ ...currentVal, ...s }, \"_assign\");\n if (prop === \"_mapValues\") {\n return (fn: any) => {\n const next: any = {};\n Object.keys(currentVal).forEach(\n (k) => (next[k] = fn(currentVal[k], k)),\n );\n update(next, \"_mapValues\");\n };\n }\n }\n\n // Recursive step: create a new proxy for the child property\n // Use cached path\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n const newPath = getCachedPath(path, prop);\n return createDeepProxy(key, newPath, nextVal, options);\n },\n apply(_target, _thisArg, args) {\n if (typeof currentVal === \"function\") {\n return currentVal(...args);\n }\n console.warn(\n `[FlowProxy] Attempted to call a non-function value at path: ${path.join(\".\")}`,\n );\n },\n }) as unknown as TypeAwareOps<T, A>;\n}\n\n/**\n * Immutable update utility that sets a value at a specific path within an object/array.\n */\nexport function setInPath(obj: any, path: string[], value: any): any {\n return setInPathRecursive(obj, path, value, 0);\n}\n\nfunction setInPathRecursive(\n obj: any,\n path: string[],\n value: any,\n index: number,\n): any {\n if (index === path.length) return value;\n\n const head = path[index];\n\n if (Array.isArray(obj)) {\n const i = parseInt(head, 10);\n if (isNaN(i) || i < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n\n const len = obj.length;\n const newArr = new Array(Math.max(len, i + 1));\n\n // Fast copy with check for modified index\n for (let j = 0; j < newArr.length; j++) {\n if (j === i) {\n newArr[j] = setInPathRecursive(obj[j], path, value, index + 1);\n } else {\n newArr[j] = j < len ? obj[j] : undefined;\n }\n }\n return newArr;\n }\n\n // Object path\n const currentObj = obj ?? {};\n const keys = Object.keys(currentObj);\n const result: any = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result[key] =\n key === head\n ? setInPathRecursive(currentObj[key], path, value, index + 1)\n : currentObj[key];\n }\n\n if (!(head in currentObj)) {\n result[head] = setInPathRecursive(undefined, path, value, index + 1);\n }\n\n return result;\n}\n\n/**\n * Access utility to get a value at a specific path.\n */\nfunction getInPath(obj: any, path: string[]): any {\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (current === null || current === undefined) return undefined;\n current = current[path[i]];\n }\n return current;\n}\n"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BiF;AAKjF;AACA,MAAM,SAAS,GAAG,IAAI,OAAO,EAAmC;AAEhE,SAAS,aAAa,CAAC,IAAc,EAAE,IAAY,EAAA;IACjD,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,KAAK,GAAG,IAAI,GAAG,EAAE;AACjB,QAAA,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IAC5B;IAEA,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC;AACxB,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;IACzB;AACA,IAAA,OAAO,MAAM;AACf;AAEA;;;;;AAKG;AACG,SAAU,eAAe,CAC7B,GAAW,EACX,IAAc,EACd,UAAe,EACf,OAAyB,EAAA;;AAGzB,IAAA,MAAM,MAAM,GAAG,CACb,GAAQ,EACR,QAAiB,EACjB,YAAY,GAAG,KAAK,EACpB,EAAW,KACT;AACF,QAAA,IAAI;;;;;;AAMF,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC;AACnD,YAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE;AACvB,gBAAA,GAAG,OAAO;AACV,gBAAA,KAAK,EAAE,QAAQ;gBACf,YAAY;AACZ,gBAAA,GAAG,EAAE,EAAE,IAAK,OAAe,CAAC,GAAG,IAAI,KAAK;AACxC,gBAAA,KAAK,EAAE,IAAI;AACL,aAAA,CAAC;QACX;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CACX,CAAA,iCAAA,EAAoC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,EACrD,KAAK,CACN;AACD,YAAA,MAAM,KAAK;QACb;AACF,IAAA,CAAC;;AAGD,IAAA,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,EAAW,KAAI;QACvC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;AAC9B,IAAA,CAAC;AAED,IAAA,OAAO,IAAI,KAAK,CAAC,MAAK,EAAE,CAAC,EAAE;QACzB,GAAG,CAAC,OAAY,EAAE,IAAS,EAAA;YACzB,IAAI,OAAO,IAAI,KAAK,QAAQ;AAAE,gBAAA,OAAO,SAAS;;YAG9C,IAAI,IAAI,KAAK,MAAM;AAAE,gBAAA,OAAO,UAAU;YACtC,IAAI,IAAI,KAAK,MAAM;gBACjB,OAAO,CAAC,GAAQ,KAAI;oBAClB,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;AAClC,gBAAA,CAAC;YACH,IAAI,IAAI,KAAK,QAAQ;gBACnB,OAAO,CAAC,GAAQ,KAAI;oBAClB,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;AACrC,gBAAA,CAAC;YACH,IAAI,IAAI,KAAK,aAAa;gBAAE,OAAQ,OAAe,CAAC,OAAO;YAC3D,IAAI,IAAI,KAAK,OAAO;gBAAE,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAClD,IAAI,IAAI,KAAK,OAAO;gBAAE,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAClD,IAAI,IAAI,KAAK,UAAU;AAAE,gBAAA,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;YACxE,IAAI,IAAI,KAAK,UAAU;AACrB,gBAAA,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;YACnD,IAAI,IAAI,KAAK,UAAU;AAAE,gBAAA,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;;YAGrD,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC;YAClD,IAAI,IAAI,IAAI,SAAS;AAAE,gBAAA,OAAO,SAAS,CAAC,IAAI,CAAC;;AAG7C,YAAA,MAAM,OAAO,GAAG,OAAO,UAAU;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;;AAGzC,YAAA,IAAI,OAAO,KAAK,QAAQ,EAAE;gBACxB,QAAQ,IAAI;AACV,oBAAA,KAAK,YAAY;AACf,wBAAA,OAAO,CAAC,MAAM,GAAG,CAAC,KAAI;AACpB,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACP,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,YAAY,CAAC;AACxC,wBAAA,CAAC;AACH,oBAAA,KAAK,YAAY;AACf,wBAAA,OAAO,CAAC,MAAM,GAAG,CAAC,KAAI;AACpB,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACP,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,YAAY,CAAC;AACxC,wBAAA,CAAC;AACH,oBAAA,KAAK,MAAM;wBACT,OAAO,CAAC,MAAc,KAAI;AACxB,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACP,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,MAAM,CAAC;AAClC,wBAAA,CAAC;AACH,oBAAA,KAAK,WAAW;wBACd,OAAO,CAAC,MAAc,KAAI;AACxB,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACP,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,WAAW,CAAC;AACvC,wBAAA,CAAC;AACH,oBAAA,KAAK,WAAW;wBACd,OAAO,CAAC,MAAc,KAAI;AACxB,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACP,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,WAAW,CAAC;AACvC,wBAAA,CAAC;AACH,oBAAA,KAAK,SAAS;wBACZ,OAAO,CAAC,MAAc,KAAI;4BACxB,IAAI,MAAM,KAAK,CAAC;AAAE,gCAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;AACjE,4BAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK;AACd,kCAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;kCAC/C,SAAS,CACP,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAChD,IAAI,CACL;AACP,4BAAA,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,SAAS,CAAC;AACrC,wBAAA,CAAC;AACH,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,CAAC,CAAS,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;AAC/D,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;AACrD,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;AACnD,oBAAA,KAAK,QAAQ;AACX,wBAAA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;AACvD,oBAAA,KAAK,QAAQ;AACX,wBAAA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;AACvD,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;AACrD,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,CAAC,CAAS,KAAK,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,MAAM,CAAC;AACtD,oBAAA,KAAK,QAAQ;wBACX,OAAO,CAAC,GAAW,EAAE,GAAW,KAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC;AAC9D,oBAAA,KAAK,SAAS;wBACZ,OAAO,MAAM,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC;AAC7C,oBAAA,KAAK,cAAc;AACjB,wBAAA,OAAO,CAAC,CAAS,KACf,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC;;YAErE;;YAGA,IAAI,OAAO,EAAE;gBACX,QAAQ,IAAI;AACV,oBAAA,KAAK,OAAO;wBACV,OAAO,CAAC,IAAS,KAAI;;AAEnB,4BAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;4BAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;4BACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gCAAE,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AACvD,4BAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;AAClB,4BAAA,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;AACzB,wBAAA,CAAC;AACH,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;AACtD,oBAAA,KAAK,QAAQ;AACX,wBAAA,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AACpD,oBAAA,KAAK,UAAU;wBACb,OAAO,CAAC,IAAS,KAAI;;AAEnB,4BAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;4BAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AACjC,4BAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;4BAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gCAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AAC3D,4BAAA,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;AAC5B,wBAAA,CAAC;AACH,oBAAA,KAAK,SAAS;AACZ,wBAAA,OAAO,CAAC,EAAO,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;AAC9D,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,CAAC,EAAO,KAAK,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;AACxD,oBAAA,KAAK,WAAW;wBACd,OAAO,CAAC,KAAa,KAAI;;AAEvB,4BAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;4BAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;4BACjC,IAAI,CAAC,GAAG,CAAC;AACT,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gCAC5B,IAAI,CAAC,KAAK,KAAK;oCAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;4BAC9C;AACA,4BAAA,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7B,wBAAA,CAAC;AACH,oBAAA,KAAK,WAAW;AACd,wBAAA,OAAO,CAAC,KAAa,EAAE,IAAS,KAAI;AAClC,4BAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;4BAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;4BACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gCAAE,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AACzD,4BAAA,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI;4BACpB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gCAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AAC/D,4BAAA,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7B,wBAAA,CAAC;;AAEH,oBAAA,KAAK,SAAS;wBACZ,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,GAAG,KAAY,KAAI;AAC/C,4BAAA,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC;4BAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;AAC3B,4BAAA,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;AACzB,wBAAA,CAAC;AACH,oBAAA,KAAK,UAAU;AACb,wBAAA,OAAO,MAAM,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC;AAC5D,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,CAAC,EAAO,KAAK,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;AAC/D,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,CAAC,CAAM,EAAE,CAAU,EAAE,CAAU,KAAI;AACxC,4BAAA,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC;4BAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClB,4BAAA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;AACvB,wBAAA,CAAC;AACH,oBAAA,KAAK,SAAS;AACZ,wBAAA,OAAO,CAAC,KAAY,KAClB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;AAC/C,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;AAC/D,oBAAA,KAAK,UAAU;AACb,wBAAA,OAAO,MAAK;AACV,4BAAA,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC;AAC5B,4BAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,gCAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC7C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;4BACzC;AACA,4BAAA,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;AAC1B,wBAAA,CAAC;;AAEH,oBAAA,KAAK,KAAK;wBACR,OAAO,CAAC,CAAS,KAAI;AACnB,4BAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;4BAC7C,OAAO,eAAe,CACpB,GAAG,EACH,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,EACnC,UAAU,CAAC,GAAG,CAAC,EACf,OAAO,CACR;AACH,wBAAA,CAAC;AACH,oBAAA,KAAK,QAAQ;wBACX,OAAO,MACL,eAAe,CACb,GAAG,EACH,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,EACxB,UAAU,CAAC,CAAC,CAAC,EACb,OAAO,CACR;AACL,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,MACL,eAAe,CACb,GAAG,EACH,aAAa,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,EACvD,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EACjC,OAAO,CACR;AACL,oBAAA,KAAK,SAAS;wBACZ,OAAO,CAAC,EAAuC,KAAI;4BACjD,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;4BACpC,IAAI,GAAG,KAAK,EAAE;AAAE,gCAAA,OAAO,SAAS;4BAChC,OAAO,eAAe,CACpB,GAAG,EACH,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,EACnC,UAAU,CAAC,GAAG,CAAC,EACf,OAAO,CACR;AACH,wBAAA,CAAC;;YAEP;;AAGA,YAAA,IAAI,OAAO,KAAK,QAAQ,EAAE;gBACxB,QAAQ,IAAI;AACV,oBAAA,KAAK,SAAS;AACZ,wBAAA,OAAO,CAAC,GAAW,KAAK,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE,SAAS,CAAC;AAC7D,oBAAA,KAAK,UAAU;AACb,wBAAA,OAAO,CAAC,GAAW,KAAK,MAAM,CAAC,GAAG,GAAG,UAAU,EAAE,UAAU,CAAC;AAC9D,oBAAA,KAAK,YAAY;AACf,wBAAA,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC;AAC7D,oBAAA,KAAK,YAAY;AACf,wBAAA,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC;AAC7D,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC;;AAEjD,oBAAA,KAAK,UAAU;wBACb,OAAO,CAAC,CAAkB,EAAE,CAAS,KACnC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC;AAChD,oBAAA,KAAK,aAAa;wBAChB,OAAO,CAAC,CAAkB,EAAE,CAAS,KACnC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC;AACtD,oBAAA,KAAK,YAAY;wBACf,OAAO,CAAC,CAAS,EAAE,CAAU,KAC3B,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC;AACpD,oBAAA,KAAK,QAAQ;wBACX,OAAO,CAAC,CAAS,EAAE,CAAU,KAC3B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC5C,oBAAA,KAAK,aAAa;wBAChB,OAAO,MACL,MAAM,CACJ,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EACxD,aAAa,CACd;AACL,oBAAA,KAAK,WAAW;AACd,wBAAA,OAAO,CAAC,CAAS,EAAE,CAAC,GAAG,KAAK,KAC1B,MAAM,CACJ,UAAU,CAAC,MAAM,GAAG;8BAChB,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;AAC/B,8BAAE,UAAU,EACd,WAAW,CACZ;AACL,oBAAA,KAAK,SAAS;wBACZ,OAAO,CAAC,CAAS,EAAE,CAAU,KAC3B,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC;AAC9C,oBAAA,KAAK,WAAW;wBACd,OAAO,CAAC,CAAS,EAAE,CAAU,KAC3B,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC;AAClD,oBAAA,KAAK,SAAS;AACZ,wBAAA,OAAO,CAAC,CAAS,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;;YAEnE;;AAGA,YAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,OAAO,MAAM,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC;gBAC7C;YACF;;YAGA,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE;AAC3D,gBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACrB,OAAO,CAAC,GAAQ,KAAI;;AAElB,wBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC;AACjD,wBAAA,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC1B,oBAAA,CAAC;gBACH;AACA,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,OAAO,CAAC,QAAgB,KAAI;;AAE1B,wBAAA,IAAI,EAAE,QAAQ,IAAI,UAAU,CAAC;4BAAE;wBAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;wBACpC,MAAM,IAAI,GAAQ,EAAE;AACpB,wBAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;4BACpB,IAAI,CAAC,KAAK,QAAQ;gCAAE,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;wBAC7C;AACA,wBAAA,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;AACzB,oBAAA,CAAC;gBACH;;AAEA,gBAAA,IAAI,IAAI,KAAK,OAAO,EAAE;oBACpB,OAAO,CAAC,IAAc,KAAI;wBACxB,MAAM,IAAI,GAAQ,EAAE;AACpB,wBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;4BACjB,IAAI,CAAC,IAAI,UAAU;gCAAE,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AAC9C,wBAAA,CAAC,CAAC;AACF,wBAAA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;AACvB,oBAAA,CAAC;gBACH;AACA,gBAAA,IAAI,IAAI,KAAK,OAAO,EAAE;oBACpB,OAAO,CAAC,IAAc,KAAI;AACxB,wBAAA,MAAM,IAAI,GAAG,EAAE,GAAG,UAAU,EAAE;AAC9B,wBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,wBAAA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;AACvB,oBAAA,CAAC;gBACH;AACA,gBAAA,IAAI,IAAI,KAAK,WAAW,EAAE;AACxB,oBAAA,OAAO,CAAC,CAAM,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,WAAW,CAAC;gBACjE;gBACA,IAAI,IAAI,KAAK,QAAQ;oBAAE,OAAO,MAAM,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC;gBACxD,IAAI,IAAI,KAAK,QAAQ;AAAE,oBAAA,OAAO,MAAM,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,QAAQ,CAAC;gBACvE,IAAI,IAAI,KAAK,SAAS;AACpB,oBAAA,OAAO,CAAC,CAAM,KAAK,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC;AAC/D,gBAAA,IAAI,IAAI,KAAK,YAAY,EAAE;oBACzB,OAAO,CAAC,EAAO,KAAI;wBACjB,MAAM,IAAI,GAAQ,EAAE;AACpB,wBAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAC7B,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACxC;AACD,wBAAA,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;AAC5B,oBAAA,CAAC;gBACH;YACF;;;YAIA,MAAM,OAAO,GACX,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK;AACpC,kBAAE,UAAU,CAAC,IAAI;kBACf,SAAS;YACf,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;YACzC,OAAO,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,CAAC;AACD,QAAA,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAA;AAC3B,YAAA,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;AACpC,gBAAA,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;YAC5B;AACA,YAAA,OAAO,CAAC,IAAI,CACV,CAAA,4DAAA,EAA+D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CAChF;QACH,CAAC;AACF,KAAA,CAAkC;AACrC;AAEA;;AAEG;SACa,SAAS,CAAC,GAAQ,EAAE,IAAc,EAAE,KAAU,EAAA;IAC5D,OAAO,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAChD;AAEA,SAAS,kBAAkB,CACzB,GAAQ,EACR,IAAc,EACd,KAAU,EACV,KAAa,EAAA;AAEb,IAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;AAEvC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AAExB,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;AAC5B,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAA,CAAE,CAAC;AAE7D,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;;AAG9C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;YAChE;iBAAO;AACL,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;YAC1C;QACF;AACA,QAAA,OAAO,MAAM;IACf;;AAGA,IAAA,MAAM,UAAU,GAAG,GAAG,IAAI,EAAE;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;IACpC,MAAM,MAAM,GAAQ,EAAE;AAEtB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC;AACT,YAAA,GAAG,KAAK;AACN,kBAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC;AAC5D,kBAAE,UAAU,CAAC,GAAG,CAAC;IACvB;AAEA,IAAA,IAAI,EAAE,IAAI,IAAI,UAAU,CAAC,EAAE;AACzB,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;IACtE;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;AAEG;AACH,SAAS,SAAS,CAAC,GAAQ,EAAE,IAAc,EAAA;IACzC,IAAI,OAAO,GAAG,GAAG;AACjB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;QAC/D,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B;AACA,IAAA,OAAO,OAAO;AAChB;;;;"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.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, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\n\n// Path cache to avoid repeated array allocations\nconst pathCache = new WeakMap<string[], Map<string, string[]>>();\n\nfunction getCachedPath(path: string[], prop: string): string[] {\n let cache = pathCache.get(path);\n if (!cache) {\n cache = new Map();\n pathCache.set(path, cache);\n }\n\n let cached = cache.get(prop);\n if (!cached) {\n cached = [...path, prop];\n cache.set(prop, cached);\n }\n return cached;\n}\n\n/**\n * Creates a deep proxy that provides type-specific atomic operations for a flow.\n * The proxy tracks its path within the state tree and maps access to specific update logic.\n *\n * Reduced allocations, cached operations\n */\nexport function createDeepProxy<T = any, A = Record<string, any>>(\n key: string,\n path: string[],\n _initialVal: any, // Kept for signature compatibility but ignored for live state\n options: FlowOptions<any>,\n): TypeAwareOps<T, A> {\n // Pre-bind commit function\n const commit = (\n val: any,\n forceful: boolean,\n skipEquality = false,\n op?: string,\n ) => {\n try {\n const currentState = store.get(key, undefined, { bypassClone: true });\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n _op: op || (options as any)._op || \"set\",\n _path: path,\n } as any);\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n const update = (val: any, op?: string) => {\n commit(val, false, true, op);\n };\n\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n // --- LIVE DATA FETCH ---\n // We fetch the latest root state and drill down to the current path.\n // This ensures Proxies are always \"live\" even if reused across updates.\n const rootState = store.get(key, undefined, { bypassClone: true });\n const currentVal =\n path.length === 0 ? rootState : getInPath(rootState, path);\n\n // --- Meta-Operations ---\n if (prop === \"_val\") return currentVal;\n if (prop === \"_set\")\n return (val: any) => {\n commit(val, true, false, \"_set\");\n };\n if (prop === \"_patch\")\n return (val: any) => {\n commit(val, false, false, \"_patch\");\n };\n if (prop === \"__actions__\") return (options as any).actions;\n if (prop === \"_undo\") return () => store.undo(key);\n if (prop === \"_redo\") return () => store.redo(key);\n if (prop === \"_canUndo\") return (store.getHistory(key)?.length || 0) > 1;\n if (prop === \"_canRedo\")\n return (store.getRedoStack(key)?.length || 0) > 0;\n if (prop === \"_history\") return store.getHistory(key);\n\n const pluginOps = store.getPluginOps(key, options);\n if (prop in pluginOps) return pluginOps[prop];\n\n const valType = typeof currentVal;\n const isArray = Array.isArray(currentVal);\n\n // --- Number Operations ---\n if (valType === \"number\") {\n switch (prop) {\n case \"_increment\":\n return (amount = 1) => update(currentVal + amount, \"_increment\");\n case \"_decrement\":\n return (amount = 1) => update(currentVal - amount, \"_decrement\");\n case \"_add\":\n return (amount: number) => update(currentVal + amount, \"_add\");\n case \"_subtract\":\n return (amount: number) => update(currentVal - amount, \"_subtract\");\n case \"_multiply\":\n return (amount: number) => update(currentVal * amount, \"_multiply\");\n case \"_divide\":\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n update(currentVal / amount, \"_divide\");\n };\n case \"_pow\":\n return (n: number) => update(Math.pow(currentVal, n), \"_pow\");\n case \"_sqrt\":\n return () => update(Math.sqrt(currentVal), \"_sqrt\");\n case \"_abs\":\n return () => update(Math.abs(currentVal), \"_abs\");\n case \"_round\":\n return () => update(Math.round(currentVal), \"_round\");\n case \"_floor\":\n return () => update(Math.floor(currentVal), \"_floor\");\n case \"_ceil\":\n return () => update(Math.ceil(currentVal), \"_ceil\");\n case \"_mod\":\n return (n: number) => update(currentVal % n, \"_mod\");\n case \"_clamp\":\n return (min: number, max: number) =>\n update(Math.min(Math.max(currentVal, min), max), \"_clamp\");\n case \"_negate\":\n return () => update(-currentVal, \"_negate\");\n case \"_toPrecision\":\n return (p: number) =>\n update(parseFloat(currentVal.toPrecision(p)), \"_toPrecision\");\n }\n }\n\n // --- Array Operations ---\n if (isArray) {\n switch (prop) {\n case \"_push\":\n return (item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < len; i++) newArr[i] = currentVal[i];\n newArr[len] = item;\n update(newArr, \"_push\");\n };\n case \"_pop\":\n return () => update(currentVal.slice(0, -1), \"_pop\");\n case \"_shift\":\n return () => update(currentVal.slice(1), \"_shift\");\n case \"_unshift\":\n return (item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n newArr[0] = item;\n for (let i = 0; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_unshift\");\n };\n case \"_filter\":\n return (fn: any) => update(currentVal.filter(fn), \"_filter\");\n case \"_map\":\n return (fn: any) => update(currentVal.map(fn), \"_map\");\n case \"_removeAt\":\n return (index: number) => {\n const len = currentVal.length;\n const newArr = new Array(len - 1);\n let j = 0;\n for (let i = 0; i < len; i++) {\n if (i !== index) newArr[j++] = currentVal[i];\n }\n update(newArr, \"_removeAt\");\n };\n case \"_insertAt\":\n return (index: number, item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < index; i++) newArr[i] = currentVal[i];\n newArr[index] = item;\n for (let i = index; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_insertAt\");\n };\n case \"_splice\":\n return (s: number, d: number, ...items: any[]) => {\n const next = [...currentVal];\n next.splice(s, d, ...items);\n update(next, \"_splice\");\n };\n case \"_reverse\":\n return () => update([...currentVal].reverse(), \"_reverse\");\n case \"_sort\":\n return (fn: any) => update([...currentVal].sort(fn), \"_sort\");\n case \"_fill\":\n return (v: any, s?: number, e?: number) => {\n const next = [...currentVal];\n next.fill(v, s, e);\n update(next, \"_fill\");\n };\n case \"_concat\":\n return (other: any[]) =>\n update(currentVal.concat(other), \"_concat\");\n case \"_uniq\":\n return () => update(Array.from(new Set(currentVal)), \"_uniq\");\n case \"_shuffle\":\n return () => {\n const next = [...currentVal];\n for (let i = next.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [next[i], next[j]] = [next[j], next[i]];\n }\n update(next, \"_shuffle\");\n };\n case \"_at\":\n return (i: number) => {\n const idx = i < 0 ? currentVal.length + i : i;\n return createDeepProxy(\n key,\n getCachedPath(path, idx.toString()),\n currentVal[idx],\n options,\n );\n };\n case \"_first\":\n return () =>\n createDeepProxy(\n key,\n getCachedPath(path, \"0\"),\n currentVal[0],\n options,\n );\n case \"_last\":\n return () =>\n createDeepProxy(\n key,\n getCachedPath(path, (currentVal.length - 1).toString()),\n currentVal[currentVal.length - 1],\n options,\n );\n case \"_findBy\":\n return (fn: (item: any, idx: number) => boolean) => {\n const idx = currentVal.findIndex(fn);\n if (idx === -1) return undefined;\n return createDeepProxy(\n key,\n getCachedPath(path, idx.toString()),\n currentVal[idx],\n options,\n );\n };\n }\n }\n\n // --- String Operations ---\n if (valType === \"string\") {\n switch (prop) {\n case \"_append\":\n return (str: string) => update(currentVal + str, \"_append\");\n case \"_prepend\":\n return (str: string) => update(str + currentVal, \"_prepend\");\n case \"_uppercase\":\n return () => update(currentVal.toUpperCase(), \"_uppercase\");\n case \"_lowercase\":\n return () => update(currentVal.toLowerCase(), \"_lowercase\");\n case \"_trim\":\n return () => update(currentVal.trim(), \"_trim\");\n case \"_replace\":\n return (p: string | RegExp, r: string) =>\n update(currentVal.replace(p, r), \"_replace\");\n case \"_replaceAll\":\n return (p: string | RegExp, r: string) =>\n update(currentVal.replaceAll(p, r), \"_replaceAll\");\n case \"_substring\":\n return (s: number, e?: number) =>\n update(currentVal.substring(s, e), \"_substring\");\n case \"_slice\":\n return (s: number, e?: number) =>\n update(currentVal.slice(s, e), \"_slice\");\n case \"_capitalize\":\n return () =>\n update(\n currentVal.charAt(0).toUpperCase() + currentVal.slice(1),\n \"_capitalize\",\n );\n case \"_truncate\":\n return (l: number, s = \"...\") =>\n update(\n currentVal.length > l\n ? currentVal.substring(0, l) + s\n : currentVal,\n \"_truncate\",\n );\n case \"_padEnd\":\n return (l: number, f?: string) =>\n update(currentVal.padEnd(l, f), \"_padEnd\");\n case \"_padStart\":\n return (l: number, f?: string) =>\n update(currentVal.padStart(l, f), \"_padStart\");\n case \"_repeat\":\n return (c: number) => update(currentVal.repeat(c), \"_repeat\");\n }\n }\n\n // --- Boolean Operations ---\n if (valType === \"boolean\") {\n if (prop === \"_toggle\") {\n return () => update(!currentVal, \"_toggle\");\n }\n }\n\n // --- Object Operations ---\n if (currentVal !== null && valType === \"object\" && !isArray) {\n if (prop === \"_merge\") {\n return (obj: any) => {\n const merged = Object.assign({}, currentVal, obj);\n update(merged, \"_merge\");\n };\n }\n if (prop === \"_delete\") {\n return (keyToDel: string) => {\n if (!(keyToDel in currentVal)) return;\n const keys = Object.keys(currentVal);\n const next: any = {};\n for (const k of keys) {\n if (k !== keyToDel) next[k] = currentVal[k];\n }\n update(next, \"_delete\");\n };\n }\n if (prop === \"_pick\") {\n return (keys: string[]) => {\n const next: any = {};\n keys.forEach((k) => {\n if (k in currentVal) next[k] = currentVal[k];\n });\n update(next, \"_pick\");\n };\n }\n if (prop === \"_omit\") {\n return (keys: string[]) => {\n const next = { ...currentVal };\n keys.forEach((k) => delete next[k]);\n update(next, \"_omit\");\n };\n }\n if (prop === \"_defaults\") {\n return (d: any) => update({ ...d, ...currentVal }, \"_defaults\");\n }\n if (prop === \"_clear\") return () => update({}, \"_clear\");\n if (prop === \"_clone\") return () => update({ ...currentVal }, \"_clone\");\n if (prop === \"_assign\")\n return (s: any) => update({ ...currentVal, ...s }, \"_assign\");\n if (prop === \"_mapValues\") {\n return (fn: any) => {\n const next: any = {};\n Object.keys(currentVal).forEach(\n (k) => (next[k] = fn(currentVal[k], k)),\n );\n update(next, \"_mapValues\");\n };\n }\n }\n\n // Recursive step: create a new proxy for the child property\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n const newPath = getCachedPath(path, prop);\n return createDeepProxy(key, newPath, nextVal, options);\n },\n apply(_target, _thisArg, args) {\n // Re-fetch current value for apply trap too\n const rootState = store.get(key, undefined, { bypassClone: true });\n const currentVal =\n path.length === 0 ? rootState : getInPath(rootState, path);\n\n if (typeof currentVal === \"function\") {\n return currentVal(...args);\n }\n console.warn(\n `[FlowProxy] Attempted to call a non-function value at path: ${path.join(\".\")}`,\n );\n },\n }) as unknown as TypeAwareOps<T, A>;\n}\n\n/**\n * Immutable update utility that sets a value at a specific path within an object/array.\n */\nexport function setInPath(obj: any, path: string[], value: any): any {\n return setInPathRecursive(obj, path, value, 0);\n}\n\nfunction setInPathRecursive(\n obj: any,\n path: string[],\n value: any,\n index: number,\n): any {\n if (index === path.length) return value;\n\n const head = path[index];\n\n if (Array.isArray(obj)) {\n const i = parseInt(head, 10);\n if (isNaN(i) || i < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n\n const len = obj.length;\n const newArr = new Array(Math.max(len, i + 1));\n\n // Fast copy with check for modified index\n for (let j = 0; j < newArr.length; j++) {\n if (j === i) {\n newArr[j] = setInPathRecursive(obj[j], path, value, index + 1);\n } else {\n newArr[j] = j < len ? obj[j] : undefined;\n }\n }\n return newArr;\n }\n\n // Object path\n const currentObj = obj ?? {};\n const keys = Object.keys(currentObj);\n const result: any = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result[key] =\n key === head\n ? setInPathRecursive(currentObj[key], path, value, index + 1)\n : currentObj[key];\n }\n\n if (!(head in currentObj)) {\n result[head] = setInPathRecursive(undefined, path, value, index + 1);\n }\n\n return result;\n}\n\n/**\n * Access utility to get a value at a specific path.\n */\nfunction getInPath(obj: any, path: string[]): any {\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (current === null || current === undefined) return undefined;\n current = current[path[i]];\n }\n return current;\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/src/store.js
CHANGED
|
@@ -119,6 +119,12 @@ class MemoryVault {
|
|
|
119
119
|
writable: true,
|
|
120
120
|
value: new Map()
|
|
121
121
|
}); // flowKey -> parent flowKey
|
|
122
|
+
Object.defineProperty(this, "effectStates", {
|
|
123
|
+
enumerable: true,
|
|
124
|
+
configurable: true,
|
|
125
|
+
writable: true,
|
|
126
|
+
value: new Map()
|
|
127
|
+
}); // flowKey -> effect states (with cleanups)
|
|
122
128
|
// Use Set for O(1) deduplication and fast iteration
|
|
123
129
|
Object.defineProperty(this, "batchQueue", {
|
|
124
130
|
enumerable: true,
|
|
@@ -294,13 +300,15 @@ class MemoryVault {
|
|
|
294
300
|
? effect.deps(startingValue)
|
|
295
301
|
: undefined;
|
|
296
302
|
// Run immediately (Mount)
|
|
297
|
-
effect.run(dynamicOps);
|
|
303
|
+
const possibleCleanup = effect.run(dynamicOps);
|
|
298
304
|
return {
|
|
299
305
|
prevDeps: initialDeps,
|
|
300
306
|
depsFn: effect.deps,
|
|
301
307
|
run: effect.run,
|
|
308
|
+
cleanup: typeof possibleCleanup === "function" ? possibleCleanup : undefined,
|
|
302
309
|
};
|
|
303
310
|
});
|
|
311
|
+
this.effectStates.set(key, effectStates);
|
|
304
312
|
// Subscribe for updates if explicit deps are provided
|
|
305
313
|
if (effectStates.some((e) => e.depsFn)) {
|
|
306
314
|
this.subscribe(key, () => {
|
|
@@ -310,7 +318,14 @@ class MemoryVault {
|
|
|
310
318
|
const newDeps = e.depsFn(currentState);
|
|
311
319
|
if (!deepEqual(e.prevDeps, newDeps)) {
|
|
312
320
|
e.prevDeps = newDeps;
|
|
313
|
-
|
|
321
|
+
// Cleanup previous run if needed
|
|
322
|
+
if (e.cleanup)
|
|
323
|
+
e.cleanup();
|
|
324
|
+
const possibleCleanup = e.run(dynamicOps);
|
|
325
|
+
e.cleanup =
|
|
326
|
+
typeof possibleCleanup === "function"
|
|
327
|
+
? possibleCleanup
|
|
328
|
+
: undefined;
|
|
314
329
|
}
|
|
315
330
|
}
|
|
316
331
|
});
|
|
@@ -631,6 +646,13 @@ class MemoryVault {
|
|
|
631
646
|
* Clears the entire store and all timers.
|
|
632
647
|
*/
|
|
633
648
|
clearAll() {
|
|
649
|
+
this.effectStates.forEach((states) => {
|
|
650
|
+
states.forEach((e) => {
|
|
651
|
+
if (e.cleanup)
|
|
652
|
+
e.cleanup();
|
|
653
|
+
});
|
|
654
|
+
});
|
|
655
|
+
this.effectStates.clear();
|
|
634
656
|
this.debounceTimers.forEach((t) => clearTimeout(t));
|
|
635
657
|
this.vault.clear();
|
|
636
658
|
this.initialValues.clear();
|
|
@@ -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/index.d.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { F as FlowDefinition, D as DerivedFlowDefinition, C as ContextGetterOps, a as FlowOptions, A as ActionOpsObject, b as FlowOperations, U as UseFlowOptions } from './types-
|
|
2
|
-
export { c as ArrayOps, B as BaseOps, d as BooleanOps, e as BoundActions, f as FlowAction, g as FlowEffect, h as FlowOpsObject, i as FlowPlugin, N as NumberOps, O as ObjectOps, S as StringOps, T as TypeAwareOps } from './types-
|
|
1
|
+
import { F as FlowDefinition, D as DerivedFlowDefinition, C as ContextGetterOps, a as FlowOptions, A as ActionOpsObject, b as FlowOperations, U as UseFlowOptions } from './types-CrNg0-d5.js';
|
|
2
|
+
export { c as ArrayOps, B as BaseOps, d as BooleanOps, e as BoundActions, f as FlowAction, g as FlowEffect, h as FlowOpsObject, i as FlowPlugin, N as NumberOps, O as ObjectOps, S as StringOps, T as TypeAwareOps } from './types-CrNg0-d5.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Manually initializes a flow to ensure its effects run immediately.
|
|
6
6
|
* This is useful for flows that need to start working before any component subscribes to them.
|
|
7
7
|
*/
|
|
8
8
|
declare function initFlow<T, A, C>(flow: FlowDefinition<T, A, C>): void;
|
|
9
|
+
/**
|
|
10
|
+
* Clears the entire store, all timers, and runs cleanup for all active flow effects.
|
|
11
|
+
*/
|
|
12
|
+
declare function clearAll(): void;
|
|
9
13
|
/**
|
|
10
14
|
* Defines a derived flow that reacts to changes in a source flow.
|
|
11
15
|
* Use this for computed values that shouldn't be manually modified.
|
|
@@ -34,4 +38,4 @@ declare function useFlow<K extends string, T = any>(key: K, initial?: T, options
|
|
|
34
38
|
declare function useFlow<T, A, C>(def: FlowDefinition<T, A, C>, options?: UseFlowOptions<T>): [T, FlowOperations<T, A>];
|
|
35
39
|
declare function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];
|
|
36
40
|
|
|
37
|
-
export { ActionOpsObject, ContextGetterOps, DerivedFlowDefinition, FlowDefinition, FlowOperations, FlowOptions, UseFlowOptions, defineDerived, defineFlow, getFlow, initFlow, useFlow };
|
|
41
|
+
export { ActionOpsObject, ContextGetterOps, DerivedFlowDefinition, FlowDefinition, FlowOperations, FlowOptions, UseFlowOptions, clearAll, defineDerived, defineFlow, getFlow, initFlow, useFlow };
|
package/dist/plugins.d.ts
CHANGED