fractostate 4.3.3 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -76,6 +76,17 @@ function getFlow(def) {
76
76
  get state() {
77
77
  return store.store.get(key, initial);
78
78
  },
79
+ get ctx() {
80
+ if (!flowOptions?.ctx)
81
+ return undefined;
82
+ return flowOptions.ctx({
83
+ get state() {
84
+ return store.store.get(key, initial);
85
+ },
86
+ initialState: initial,
87
+ actions: boundActions,
88
+ });
89
+ },
79
90
  };
80
91
  const actions = def?.options?.actions || flowOptions?.actions;
81
92
  if (actions) {
@@ -157,6 +168,17 @@ function useFlow(keyOrDef, initial, options) {
157
168
  get state() {
158
169
  return store.store.get(key, initialVal);
159
170
  },
171
+ get ctx() {
172
+ if (!flowOptions?.ctx)
173
+ return undefined;
174
+ return flowOptions.ctx({
175
+ get state() {
176
+ return store.store.get(key, initialVal);
177
+ },
178
+ initialState: initialVal,
179
+ actions: boundActions,
180
+ });
181
+ },
160
182
  };
161
183
  const actions = keyOrDef?.options?.actions || flowOptions?.actions;
162
184
  if (actions) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n UseFlowOptions,\n FlowOpsObject,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\n// Connect proxy creator to store for internal effects\nstore.setProxyCreator(createDeepProxy);\n\nexport * from \"./types\";\n\n/**\n * Manually initializes a flow to ensure its effects run immediately.\n * This is useful for flows that need to start working before any component subscribes to them.\n */\nexport function initFlow<T, A>(flow: FlowDefinition<T, A>) {\n store.get(flow.key, flow.initial, flow.options);\n}\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n const key = derivedKey || `${source.key}_derived_${Date.now()}`;\n store.setParent(key, source.key);\n return {\n key,\n source,\n selector,\n };\n}\n\nexport function defineFlow<\n T,\n A extends Record<\n string,\n (...args: any[]) => (ops: FlowOpsObject<T, A>) => any\n >,\n>(\n key: string,\n initial: T,\n options: FlowOptions<NoInfer<T>, A> & {\n actions: A;\n },\n): FlowDefinition<T, A>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>, {}>,\n): FlowDefinition<T, {}>;\nexport function defineFlow<T, A>(\n key: string,\n initial: T,\n options?: FlowOptions<T> & { actions?: A },\n): FlowDefinition<T, A> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Non-hook version of useFlow.\n * Useful for accessing and interacting with flows outside React components (e.g., axios interceptors).\n */\nexport function getFlow<T, A>(\n def: FlowDefinition<T, A>,\n): [T, FlowOperations<T, A>] {\n const { key, initial, options: flowOptions } = def;\n const state = store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<T, A> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n const toolbox: FlowOperations<T, A> = {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n\n return [state, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A>(\n def: FlowDefinition<T, A>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [state, setState] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setState(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<any, any> = {\n get self() {\n return createDeepProxy<any, any>(key, [], store.get(key, initialVal), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initialVal);\n },\n };\n\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, state, flowOptions]);\n\n return [state, toolbox] as any;\n}\n"],"names":["store","createDeepProxy","useState","useEffect","useMemo"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowContext,\n ActionOpsObject,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n UseFlowOptions,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\n// Connect proxy creator to store for internal effects\nstore.setProxyCreator(createDeepProxy);\n\nexport * from \"./types\";\n\n/**\n * Manually initializes a flow to ensure its effects run immediately.\n * This is useful for flows that need to start working before any component subscribes to them.\n */\nexport function initFlow<T, A>(flow: FlowDefinition<T, A>) {\n store.get(flow.key, flow.initial, flow.options);\n}\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n const key = derivedKey || `${source.key}_derived_${Date.now()}`;\n store.setParent(key, source.key);\n return {\n key,\n source,\n selector,\n };\n}\n\nexport function defineFlow<T, A extends Record<string, any>, C = undefined>(\n key: string,\n initial: T,\n options: {\n actions: {\n [K in keyof A]: (\n ...args: any[]\n ) => (ops: ActionOpsObject<T, A, C>) => any;\n };\n ctx?: (context: FlowContext<T, A>) => C;\n } & Omit<FlowOptions<NoInfer<T>, NoInfer<A>, NoInfer<C>>, \"actions\" | \"ctx\">,\n): FlowDefinition<T, A, C>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>, {}, any>,\n): FlowDefinition<T, {}, any>;\nexport function defineFlow<T, A, C = any>(\n key: string,\n initial: T,\n options?: FlowOptions<T, A, C> & { actions?: A },\n): FlowDefinition<T, A, C> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Non-hook version of useFlow.\n * Useful for accessing and interacting with flows outside React components (e.g., axios interceptors).\n */\nexport function getFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n): [T, FlowOperations<T, A>] {\n const { key, initial, options: flowOptions } = def;\n const state = store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: ActionOpsObject<T, A, any> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n get ctx() {\n if (!flowOptions?.ctx) return undefined;\n return flowOptions.ctx({\n get state() {\n return store.get(key, initial);\n },\n initialState: initial,\n actions: boundActions,\n });\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n const toolbox: FlowOperations<T, A> = {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n\n return [state, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [state, setState] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setState(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: ActionOpsObject<any, any, any> = {\n get self() {\n return createDeepProxy<any, any>(key, [], store.get(key, initialVal), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initialVal);\n },\n get ctx() {\n if (!flowOptions?.ctx) return undefined;\n return flowOptions.ctx({\n get state() {\n return store.get(key, initialVal);\n },\n initialState: initialVal,\n actions: boundActions,\n });\n },\n };\n\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, state, flowOptions]);\n\n return [state, toolbox] as any;\n}\n"],"names":["store","createDeepProxy","useState","useEffect","useMemo"],"mappings":"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"}
@@ -4,7 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var react = require('@xyflow/react');
5
5
  var lucideReact = require('lucide-react');
6
6
 
7
- const FlowNode = ({ data }) => (jsxRuntime.jsxs("div", { className: `m2-node-flow nodrag ${data.isActive ? "active" : ""} ${data.isHot ? "is-hot" : ""}`, style: { cursor: "pointer" }, onClick: () => data.onClick?.(), children: [jsxRuntime.jsx(react.Handle, { type: "target", position: react.Position.Top, style: { opacity: 0 }, id: "gen-target" }), jsxRuntime.jsx(react.Handle, { type: "source", position: react.Position.Bottom, style: { opacity: 0 }, id: "gen-source" }), jsxRuntime.jsx(react.Handle, { type: "target", position: react.Position.Left, style: { opacity: 0 }, id: "actor-target" }), jsxRuntime.jsx(react.Handle, { type: "source", position: react.Position.Right, style: { opacity: 0 }, pa: true, id: "listener-source" }), jsxRuntime.jsxs("div", { className: "m2-node-flow-header", children: [jsxRuntime.jsx("div", { className: "m2-node-icon", children: jsxRuntime.jsx(lucideReact.Database, { size: 18 }) }), jsxRuntime.jsx("div", { className: "m2-node-title", children: data.label })] }), jsxRuntime.jsx("div", { className: "m2-node-preview", style: { overflowY: "hidden" }, children: data.value !== undefined ? (jsxRuntime.jsx("pre", { style: { margin: 0 }, children: JSON.stringify(data.value, null, 2).slice(0, 150) })) : (jsxRuntime.jsx("span", { style: { opacity: 0.5 }, children: "Empty state" })) })] }));
7
+ const FlowNode = ({ data }) => (jsxRuntime.jsxs("div", { className: `m2-node-flow nodrag ${data.isActive ? "active" : ""} ${data.isHot ? "is-hot" : ""}`, style: { cursor: "pointer" }, onClick: () => data.onClick?.(), children: [jsxRuntime.jsx(react.Handle, { type: "target", position: react.Position.Top, style: { opacity: 0 }, id: "gen-target" }), jsxRuntime.jsx(react.Handle, { type: "source", position: react.Position.Bottom, style: { opacity: 0 }, id: "gen-source" }), jsxRuntime.jsx(react.Handle, { type: "target", position: react.Position.Left, style: { opacity: 0 }, id: "actor-target" }), jsxRuntime.jsx(react.Handle, { type: "source", position: react.Position.Right, style: { opacity: 0 }, id: "listener-source" }), jsxRuntime.jsxs("div", { className: "m2-node-flow-header", children: [jsxRuntime.jsx("div", { className: "m2-node-icon", children: jsxRuntime.jsx(lucideReact.Database, { size: 18 }) }), jsxRuntime.jsx("div", { className: "m2-node-title", children: data.label })] }), jsxRuntime.jsx("div", { className: "m2-node-preview", style: { overflowY: "hidden" }, children: data.value !== undefined ? (jsxRuntime.jsx("pre", { style: { margin: 0 }, children: JSON.stringify(data.value, null, 2).slice(0, 150) })) : (jsxRuntime.jsx("span", { style: { opacity: 0.5 }, children: "Empty state" })) })] }));
8
8
  const ActorNode = ({ data }) => (jsxRuntime.jsxs("div", { className: `m2-node-actor nodrag ${data.isActive ? "active" : ""} ${data.isHot ? "is-hot" : ""}`, children: [jsxRuntime.jsx("div", { className: "m2-actor-avatar", children: data.isAnonymous ? (jsxRuntime.jsx(lucideReact.User, { size: 14 })) : (data.label.charAt(0).toUpperCase()) }), jsxRuntime.jsx("div", { className: "m2-actor-name", children: data.label }), jsxRuntime.jsx(react.Handle, { type: "source", position: react.Position.Right, style: { opacity: 0 } })] }));
9
9
  const ListenerNode = ({ data }) => (jsxRuntime.jsxs("div", { className: `m2-node-listener nodrag ${data.isActive ? "active" : ""} ${data.isHot ? "is-hot" : ""}`, children: [jsxRuntime.jsx(react.Handle, { type: "target", position: react.Position.Left, style: { opacity: 0 } }), jsxRuntime.jsx("div", { className: "m2-listener-icon", children: jsxRuntime.jsx(lucideReact.Zap, { size: 14, className: data.isHot ? "text-white" : "text-yellow-400" }) }), jsxRuntime.jsxs("div", { className: "m2-listener-name", children: ["-->", " ", data.label] })] }));
10
10
 
@@ -1 +1 @@
1
- {"version":3,"file":"FlowNodes.js","sources":["../../../../../../src/devtools/mmap/components/FlowNodes.tsx"],"sourcesContent":["import { Handle, Position } from \"@xyflow/react\";\nimport { Database, User, Zap } from \"lucide-react\";\n\nexport const FlowNode = ({ data }: any) => (\n <div\n className={`m2-node-flow nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n style={{ cursor: \"pointer\" }}\n onClick={() => data.onClick?.()}\n >\n {/* Genealogy Handles (Top/Bottom) */}\n <Handle\n type=\"target\"\n position={Position.Top}\n style={{ opacity: 0 }}\n id=\"gen-target\"\n />\n <Handle\n type=\"source\"\n position={Position.Bottom}\n style={{ opacity: 0 }}\n id=\"gen-source\"\n />\n\n {/* Live Graph Handles (Left/Right) */}\n {/* Actors enter from the LEFT */}\n <Handle\n type=\"target\"\n position={Position.Left}\n style={{ opacity: 0 }}\n id=\"actor-target\"\n />\n {/* Listeners exit to the RIGHT */}\n <Handle\n type=\"source\"\n position={Position.Right}\n style={{ opacity: 0 }}pa\n id=\"listener-source\"\n />\n\n <div className=\"m2-node-flow-header\">\n <div className=\"m2-node-icon\">\n <Database size={18} />\n </div>\n <div className=\"m2-node-title\">{data.label}</div>\n </div>\n\n <div className=\"m2-node-preview\" style={{overflowY: \"hidden\"}}>\n {data.value !== undefined ? (\n <pre style={{ margin: 0 }}>\n {JSON.stringify(data.value, null, 2).slice(0, 150)}\n </pre>\n ) : (\n <span style={{ opacity: 0.5 }}>Empty state</span>\n )}\n </div>\n </div>\n);\n\nexport const ActorNode = ({ data }: any) => (\n <div\n className={`m2-node-actor nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n >\n <div className=\"m2-actor-avatar\">\n {data.isAnonymous ? (\n <User size={14} />\n ) : (\n data.label.charAt(0).toUpperCase()\n )}\n </div>\n <div className=\"m2-actor-name\">{data.label}</div>\n {/* Actors connect to the flow on their RIGHT side */}\n <Handle type=\"source\" position={Position.Right} style={{ opacity: 0 }} />\n </div>\n);\n\nexport const ListenerNode = ({ data }: any) => (\n <div\n className={`m2-node-listener nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n >\n {/* Listeners receive from the flow on their LEFT side */}\n <Handle type=\"target\" position={Position.Left} style={{ opacity: 0 }} />\n <div className=\"m2-listener-icon\">\n <Zap\n size={14}\n className={data.isHot ? \"text-white\" : \"text-yellow-400\"}\n />\n </div>\n <div className=\"m2-listener-name\">{\"-->\"} {data.label}</div>\n </div>\n);\n"],"names":["_jsxs","_jsx","Handle","Position","Database","User","Zap"],"mappings":";;;;;;AAGO,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAO,MACpCA,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,CAAA,oBAAA,EAAuB,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,EAAE,CAAA,CAAE,EAC/F,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAC5B,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,IAAI,EAAA,QAAA,EAAA,CAG/BC,cAAA,CAACC,YAAM,IACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAEC,cAAQ,CAAC,GAAG,EACtB,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACrB,EAAE,EAAC,YAAY,EAAA,CACf,EACFF,cAAA,CAACC,YAAM,EAAA,EACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAEC,cAAQ,CAAC,MAAM,EACzB,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACrB,EAAE,EAAC,YAAY,EAAA,CACf,EAIFF,eAACC,YAAM,EAAA,EACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAEC,cAAQ,CAAC,IAAI,EACvB,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACrB,EAAE,EAAC,cAAc,EAAA,CACjB,EAEFF,cAAA,CAACC,YAAM,EAAA,EACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAEC,cAAQ,CAAC,KAAK,EACxB,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAC,EAAE,EAAA,IAAA,EACxB,EAAE,EAAC,iBAAiB,EAAA,CACpB,EAEFH,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAAA,CAClCC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,cAAc,EAAA,QAAA,EAC3BA,cAAA,CAACG,oBAAQ,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CAClB,EACNH,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAAE,IAAI,CAAC,KAAK,EAAA,CAAO,CAAA,EAAA,CAC7C,EAENA,wBAAK,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAC,EAAA,QAAA,EAC1D,IAAI,CAAC,KAAK,KAAK,SAAS,IACvBA,cAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAA,QAAA,EACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAA,CAC9C,KAENA,cAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA,QAAA,EAAA,aAAA,EAAA,CAAoB,CAClD,EAAA,CACG,CAAA,EAAA,CACF;AAGD,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,EAAO,MACrCD,yBACE,SAAS,EAAE,CAAA,qBAAA,EAAwB,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,EAAE,CAAA,CAAE,EAAA,QAAA,EAAA,CAEhGC,wBAAK,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAC7B,IAAI,CAAC,WAAW,IACfA,cAAA,CAACI,gBAAI,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,KAElB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CACnC,EAAA,CACG,EACNJ,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAAE,IAAI,CAAC,KAAK,EAAA,CAAO,EAEjDA,cAAA,CAACC,YAAM,EAAA,EAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAEC,cAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAA,CAAI,CAAA,EAAA,CACrE;MAGK,YAAY,GAAG,CAAC,EAAE,IAAI,EAAO,MACxCH,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,CAAA,wBAAA,EAA2B,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,EAAE,CAAA,CAAE,EAAA,QAAA,EAAA,CAGnGC,cAAA,CAACC,YAAM,EAAA,EAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAEC,cAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAA,CAAI,EACxEF,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAC/BA,cAAA,CAACK,eAAG,EAAA,EACF,IAAI,EAAE,EAAE,EACR,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,YAAY,GAAG,iBAAiB,EAAA,CACxD,EAAA,CACE,EACNN,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CAAE,KAAK,EAAA,GAAA,EAAG,IAAI,CAAC,KAAK,CAAA,EAAA,CAAO,CAAA,EAAA,CACxD;;;;;;"}
1
+ {"version":3,"file":"FlowNodes.js","sources":["../../../../../../src/devtools/mmap/components/FlowNodes.tsx"],"sourcesContent":["import { Handle, Position } from \"@xyflow/react\";\nimport { Database, User, Zap } from \"lucide-react\";\n\nexport const FlowNode = ({ data }: any) => (\n <div\n className={`m2-node-flow nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n style={{ cursor: \"pointer\" }}\n onClick={() => data.onClick?.()}\n >\n {/* Genealogy Handles (Top/Bottom) */}\n <Handle\n type=\"target\"\n position={Position.Top}\n style={{ opacity: 0 }}\n id=\"gen-target\"\n />\n <Handle\n type=\"source\"\n position={Position.Bottom}\n style={{ opacity: 0 }}\n id=\"gen-source\"\n />\n\n {/* Live Graph Handles (Left/Right) */}\n {/* Actors enter from the LEFT */}\n <Handle\n type=\"target\"\n position={Position.Left}\n style={{ opacity: 0 }}\n id=\"actor-target\"\n />\n {/* Listeners exit to the RIGHT */}\n <Handle\n type=\"source\"\n position={Position.Right}\n style={{ opacity: 0 }}\n id=\"listener-source\"\n />\n\n <div className=\"m2-node-flow-header\">\n <div className=\"m2-node-icon\">\n <Database size={18} />\n </div>\n <div className=\"m2-node-title\">{data.label}</div>\n </div>\n\n <div className=\"m2-node-preview\" style={{ overflowY: \"hidden\" }}>\n {data.value !== undefined ? (\n <pre style={{ margin: 0 }}>\n {JSON.stringify(data.value, null, 2).slice(0, 150)}\n </pre>\n ) : (\n <span style={{ opacity: 0.5 }}>Empty state</span>\n )}\n </div>\n </div>\n);\n\nexport const ActorNode = ({ data }: any) => (\n <div\n className={`m2-node-actor nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n >\n <div className=\"m2-actor-avatar\">\n {data.isAnonymous ? (\n <User size={14} />\n ) : (\n data.label.charAt(0).toUpperCase()\n )}\n </div>\n <div className=\"m2-actor-name\">{data.label}</div>\n {/* Actors connect to the flow on their RIGHT side */}\n <Handle type=\"source\" position={Position.Right} style={{ opacity: 0 }} />\n </div>\n);\n\nexport const ListenerNode = ({ data }: any) => (\n <div\n className={`m2-node-listener nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n >\n {/* Listeners receive from the flow on their LEFT side */}\n <Handle type=\"target\" position={Position.Left} style={{ opacity: 0 }} />\n <div className=\"m2-listener-icon\">\n <Zap\n size={14}\n className={data.isHot ? \"text-white\" : \"text-yellow-400\"}\n />\n </div>\n <div className=\"m2-listener-name\">\n {\"-->\"} {data.label}\n </div>\n </div>\n);\n"],"names":["_jsxs","_jsx","Handle","Position","Database","User","Zap"],"mappings":"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"}
@@ -268,9 +268,23 @@ class MemoryVault {
268
268
  return vaultInstance.vault.get(key);
269
269
  },
270
270
  };
271
+ const actionOps = {
272
+ ...dynamicOps,
273
+ get ctx() {
274
+ if (!options.ctx)
275
+ return undefined;
276
+ return options.ctx({
277
+ get state() {
278
+ return vaultInstance.vault.get(key);
279
+ },
280
+ initialState: startingValue,
281
+ actions: boundActions,
282
+ });
283
+ },
284
+ };
271
285
  if (options.actions) {
272
286
  for (const [name, fn] of Object.entries(options.actions)) {
273
- boundActions[name] = (...args) => fn(...args)(dynamicOps);
287
+ boundActions[name] = (...args) => fn(...args)(actionOps);
274
288
  }
275
289
  }
276
290
  const effectStates = options.effects.map((effect) => {
@@ -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 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 // Save options for devtools\n if (options) {\n this.flowOptionsMap.set(key, options);\n }\n\n // Clone once and reuse\n let startingValue = deepClone(initialValue);\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({ key, store: this });\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 break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n\n // Lazy initialization of history/redo\n if (options?.timeTravel) {\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\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 // 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 };\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, ActionOpsObject } 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 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 // Save options for devtools\n if (options) {\n this.flowOptionsMap.set(key, options);\n }\n\n // Clone once and reuse\n let startingValue = deepClone(initialValue);\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({ key, store: this });\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 break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n\n // Lazy initialization of history/redo\n if (options?.timeTravel) {\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\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 // 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 };\n\n const actionOps: ActionOpsObject<any, any, any> = {\n ...dynamicOps,\n get ctx() {\n if (!options.ctx) return undefined;\n return options.ctx({\n get state() {\n return vaultInstance.vault.get(key);\n },\n initialState: startingValue,\n actions: boundActions,\n });\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)(actionOps);\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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"}
package/dist/esm/index.js CHANGED
@@ -74,6 +74,17 @@ function getFlow(def) {
74
74
  get state() {
75
75
  return store.get(key, initial);
76
76
  },
77
+ get ctx() {
78
+ if (!flowOptions?.ctx)
79
+ return undefined;
80
+ return flowOptions.ctx({
81
+ get state() {
82
+ return store.get(key, initial);
83
+ },
84
+ initialState: initial,
85
+ actions: boundActions,
86
+ });
87
+ },
77
88
  };
78
89
  const actions = def?.options?.actions || flowOptions?.actions;
79
90
  if (actions) {
@@ -155,6 +166,17 @@ function useFlow(keyOrDef, initial, options) {
155
166
  get state() {
156
167
  return store.get(key, initialVal);
157
168
  },
169
+ get ctx() {
170
+ if (!flowOptions?.ctx)
171
+ return undefined;
172
+ return flowOptions.ctx({
173
+ get state() {
174
+ return store.get(key, initialVal);
175
+ },
176
+ initialState: initialVal,
177
+ actions: boundActions,
178
+ });
179
+ },
158
180
  };
159
181
  const actions = keyOrDef?.options?.actions || flowOptions?.actions;
160
182
  if (actions) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n UseFlowOptions,\n FlowOpsObject,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\n// Connect proxy creator to store for internal effects\nstore.setProxyCreator(createDeepProxy);\n\nexport * from \"./types\";\n\n/**\n * Manually initializes a flow to ensure its effects run immediately.\n * This is useful for flows that need to start working before any component subscribes to them.\n */\nexport function initFlow<T, A>(flow: FlowDefinition<T, A>) {\n store.get(flow.key, flow.initial, flow.options);\n}\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n const key = derivedKey || `${source.key}_derived_${Date.now()}`;\n store.setParent(key, source.key);\n return {\n key,\n source,\n selector,\n };\n}\n\nexport function defineFlow<\n T,\n A extends Record<\n string,\n (...args: any[]) => (ops: FlowOpsObject<T, A>) => any\n >,\n>(\n key: string,\n initial: T,\n options: FlowOptions<NoInfer<T>, A> & {\n actions: A;\n },\n): FlowDefinition<T, A>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>, {}>,\n): FlowDefinition<T, {}>;\nexport function defineFlow<T, A>(\n key: string,\n initial: T,\n options?: FlowOptions<T> & { actions?: A },\n): FlowDefinition<T, A> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Non-hook version of useFlow.\n * Useful for accessing and interacting with flows outside React components (e.g., axios interceptors).\n */\nexport function getFlow<T, A>(\n def: FlowDefinition<T, A>,\n): [T, FlowOperations<T, A>] {\n const { key, initial, options: flowOptions } = def;\n const state = store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<T, A> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n const toolbox: FlowOperations<T, A> = {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n\n return [state, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A>(\n def: FlowDefinition<T, A>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [state, setState] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setState(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<any, any> = {\n get self() {\n return createDeepProxy<any, any>(key, [], store.get(key, initialVal), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initialVal);\n },\n };\n\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, state, flowOptions]);\n\n return [state, toolbox] as any;\n}\n"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BiF;AAcjF;AACA,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC;AAItC;;;AAGG;AACG,SAAU,QAAQ,CAAO,IAA0B,EAAA;AACvD,IAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;AACjD;AAEA;;;AAGG;SACa,aAAa,CAC3B,MAA8B,EAC9B,QAAyB,EACzB,UAAmB,EAAA;AAEnB,IAAA,MAAM,GAAG,GAAG,UAAU,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA,SAAA,EAAY,IAAI,CAAC,GAAG,EAAE,EAAE;IAC/D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;IAChC,OAAO;QACL,GAAG;QACH,MAAM;QACN,QAAQ;KACT;AACH;SAoBgB,UAAU,CACxB,GAAW,EACX,OAAU,EACV,OAA0C,EAAA;IAE1C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAc,EAAE;AAClD;AAEA;;;AAGG;AACG,SAAU,OAAO,CACrB,GAAyB,EAAA;IAEzB,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,GAAG;AAClD,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC;IAElD,MAAM,YAAY,GAAG,EAAS;AAC9B,IAAA,MAAM,UAAU,GAAwB;AACtC,QAAA,IAAI,IAAI,GAAA;AACN,YAAA,OAAO,eAAe,CAAO,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;AAC7D,gBAAA,GAAG,WAAW;AACd,gBAAA,OAAO,EAAE,YAAY;gBACrB,KAAK,EAAE,WAAW,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ,CAAC;AACD,QAAA,IAAI,KAAK,GAAA;YACP,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;QAChC,CAAC;KACF;IAED,MAAM,OAAO,GAAI,GAAW,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO;IAEtE,IAAI,OAAO,EAAE;AACX,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAChD,YAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAW,KACjC,EAAe,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC;QACzC;IACF;AAEA,IAAA,MAAM,OAAO,GAAyB;AACpC,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,QAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9B,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;QAC1C,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AAC5C,QAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;YACjB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,YAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,gBAAA,GAAG,WAAW;AACd,gBAAA,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,WAAW,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ,CAAC;AACD,QAAA,MAAM,EAAE,CAAC,GAAQ,KAAI;YACnB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,YAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,gBAAA,GAAG,WAAW;AACd,gBAAA,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,WAAW,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QAC9B,EAAE,EAAE,WAAW,IAAI,EAAE;QACrB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC;KAC7C;AAED,IAAA,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AACzB;SAmBgB,OAAO,CACrB,QAAa,EACb,OAAa,EACb,OAAa,EAAA;IAEb,MAAM,SAAS,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,UAAU,IAAI,QAAQ;AACxE,IAAA,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,CAAC,SAAS;IAE7E,MAAM,GAAG,GAAG;UACP,QAAgB,CAAC;AACpB,UAAE;AACA,cAAG,QAAgB,CAAC,MAAM,CAAC;cACxB,QAAmB;IAC1B,MAAM,UAAU,GAAG;UACd,QAAgB,CAAC;AACpB,UAAE;AACA,cAAG,QAAgB,CAAC,MAAM,CAAC;cACzB,OAAO;IACb,MAAM,WAAW,GAAG;AAClB,UAAE,EAAE,IAAK,QAAgB,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC;AAC5D,UAAE;AACA,cAAG,QAAgB,CAAC,MAAM,CAAC;cACzB,OAAO;IAEb,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC;AACnD,QAAA,OAAO,SAAS,GAAI,QAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG;AAC1D,IAAA,CAAC,CAAC;IAEF,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,KAAK,GAAG,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK,IAAI,CAAA,QAAA,EAAW,GAAG,GAAG;AAC1E,QAAA,OAAO,KAAK,CAAC,SAAS,CACpB,GAAG,EACH,MAAK;YACH,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;AACtC,YAAA,QAAQ,CAAC,SAAS,GAAI,QAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAC7D,QAAA,CAAC,EACD,EAAE,KAAK,EAAE,CACV;AACH,IAAA,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAE3D,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAK;AAC3B,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,EAAE;QAExB,MAAM,YAAY,GAAG,EAAS;AAC9B,QAAA,MAAM,UAAU,GAA4B;AAC1C,YAAA,IAAI,IAAI,GAAA;AACN,gBAAA,OAAO,eAAe,CAAW,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE;AACpE,oBAAA,GAAG,WAAW;AACd,oBAAA,OAAO,EAAE,YAAY;AACrB,oBAAA,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK;AAC/C,iBAAA,CAAC;YACJ,CAAC;AACD,YAAA,IAAI,KAAK,GAAA;gBACP,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;YACnC,CAAC;SACF;QAED,MAAM,OAAO,GAAI,QAAgB,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO;QAE3E,IAAI,OAAO,EAAE;AACX,YAAA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAChD,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAW,KACjC,EAAe,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC;YACzC;QACF;QAEA,OAAO;AACL,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5B,KAAK,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,YAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAC9B,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;YAC1C,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AAC5C,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;gBACjB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,oBAAA,GAAG,WAAW;AACd,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK;AAC/C,iBAAA,CAAC;YACJ,CAAC;AACD,YAAA,MAAM,EAAE,CAAC,GAAQ,KAAI;gBACnB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AAClE,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AACnB,oBAAA,GAAG,WAAW;AACd,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,WAAW,EAAE,KAAK;AAC/C,iBAAA,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B,EAAE,EAAE,WAAW,IAAI,EAAE;YACrB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC;SAC7C;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AAExC,IAAA,OAAO,CAAC,KAAK,EAAE,OAAO,CAAQ;AAChC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowContext,\n ActionOpsObject,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n UseFlowOptions,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\n// Connect proxy creator to store for internal effects\nstore.setProxyCreator(createDeepProxy);\n\nexport * from \"./types\";\n\n/**\n * Manually initializes a flow to ensure its effects run immediately.\n * This is useful for flows that need to start working before any component subscribes to them.\n */\nexport function initFlow<T, A>(flow: FlowDefinition<T, A>) {\n store.get(flow.key, flow.initial, flow.options);\n}\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n const key = derivedKey || `${source.key}_derived_${Date.now()}`;\n store.setParent(key, source.key);\n return {\n key,\n source,\n selector,\n };\n}\n\nexport function defineFlow<T, A extends Record<string, any>, C = undefined>(\n key: string,\n initial: T,\n options: {\n actions: {\n [K in keyof A]: (\n ...args: any[]\n ) => (ops: ActionOpsObject<T, A, C>) => any;\n };\n ctx?: (context: FlowContext<T, A>) => C;\n } & Omit<FlowOptions<NoInfer<T>, NoInfer<A>, NoInfer<C>>, \"actions\" | \"ctx\">,\n): FlowDefinition<T, A, C>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>, {}, any>,\n): FlowDefinition<T, {}, any>;\nexport function defineFlow<T, A, C = any>(\n key: string,\n initial: T,\n options?: FlowOptions<T, A, C> & { actions?: A },\n): FlowDefinition<T, A, C> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Non-hook version of useFlow.\n * Useful for accessing and interacting with flows outside React components (e.g., axios interceptors).\n */\nexport function getFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n): [T, FlowOperations<T, A>] {\n const { key, initial, options: flowOptions } = def;\n const state = store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: ActionOpsObject<T, A, any> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n get ctx() {\n if (!flowOptions?.ctx) return undefined;\n return flowOptions.ctx({\n get state() {\n return store.get(key, initial);\n },\n initialState: initial,\n actions: boundActions,\n });\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n const toolbox: FlowOperations<T, A> = {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n\n return [state, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [state, setState] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setState(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: ActionOpsObject<any, any, any> = {\n get self() {\n return createDeepProxy<any, any>(key, [], store.get(key, initialVal), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initialVal);\n },\n get ctx() {\n if (!flowOptions?.ctx) return undefined;\n return flowOptions.ctx({\n get state() {\n return store.get(key, initialVal);\n },\n initialState: initialVal,\n actions: boundActions,\n });\n },\n };\n\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, state, flowOptions]);\n\n return [state, toolbox] as any;\n}\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Handle, Position } from '@xyflow/react';
3
3
  import { Zap, User, Database } from 'lucide-react';
4
4
 
5
- const FlowNode = ({ data }) => (jsxs("div", { className: `m2-node-flow nodrag ${data.isActive ? "active" : ""} ${data.isHot ? "is-hot" : ""}`, style: { cursor: "pointer" }, onClick: () => data.onClick?.(), children: [jsx(Handle, { type: "target", position: Position.Top, style: { opacity: 0 }, id: "gen-target" }), jsx(Handle, { type: "source", position: Position.Bottom, style: { opacity: 0 }, id: "gen-source" }), jsx(Handle, { type: "target", position: Position.Left, style: { opacity: 0 }, id: "actor-target" }), jsx(Handle, { type: "source", position: Position.Right, style: { opacity: 0 }, pa: true, id: "listener-source" }), jsxs("div", { className: "m2-node-flow-header", children: [jsx("div", { className: "m2-node-icon", children: jsx(Database, { size: 18 }) }), jsx("div", { className: "m2-node-title", children: data.label })] }), jsx("div", { className: "m2-node-preview", style: { overflowY: "hidden" }, children: data.value !== undefined ? (jsx("pre", { style: { margin: 0 }, children: JSON.stringify(data.value, null, 2).slice(0, 150) })) : (jsx("span", { style: { opacity: 0.5 }, children: "Empty state" })) })] }));
5
+ const FlowNode = ({ data }) => (jsxs("div", { className: `m2-node-flow nodrag ${data.isActive ? "active" : ""} ${data.isHot ? "is-hot" : ""}`, style: { cursor: "pointer" }, onClick: () => data.onClick?.(), children: [jsx(Handle, { type: "target", position: Position.Top, style: { opacity: 0 }, id: "gen-target" }), jsx(Handle, { type: "source", position: Position.Bottom, style: { opacity: 0 }, id: "gen-source" }), jsx(Handle, { type: "target", position: Position.Left, style: { opacity: 0 }, id: "actor-target" }), jsx(Handle, { type: "source", position: Position.Right, style: { opacity: 0 }, id: "listener-source" }), jsxs("div", { className: "m2-node-flow-header", children: [jsx("div", { className: "m2-node-icon", children: jsx(Database, { size: 18 }) }), jsx("div", { className: "m2-node-title", children: data.label })] }), jsx("div", { className: "m2-node-preview", style: { overflowY: "hidden" }, children: data.value !== undefined ? (jsx("pre", { style: { margin: 0 }, children: JSON.stringify(data.value, null, 2).slice(0, 150) })) : (jsx("span", { style: { opacity: 0.5 }, children: "Empty state" })) })] }));
6
6
  const ActorNode = ({ data }) => (jsxs("div", { className: `m2-node-actor nodrag ${data.isActive ? "active" : ""} ${data.isHot ? "is-hot" : ""}`, children: [jsx("div", { className: "m2-actor-avatar", children: data.isAnonymous ? (jsx(User, { size: 14 })) : (data.label.charAt(0).toUpperCase()) }), jsx("div", { className: "m2-actor-name", children: data.label }), jsx(Handle, { type: "source", position: Position.Right, style: { opacity: 0 } })] }));
7
7
  const ListenerNode = ({ data }) => (jsxs("div", { className: `m2-node-listener nodrag ${data.isActive ? "active" : ""} ${data.isHot ? "is-hot" : ""}`, children: [jsx(Handle, { type: "target", position: Position.Left, style: { opacity: 0 } }), jsx("div", { className: "m2-listener-icon", children: jsx(Zap, { size: 14, className: data.isHot ? "text-white" : "text-yellow-400" }) }), jsxs("div", { className: "m2-listener-name", children: ["-->", " ", data.label] })] }));
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"FlowNodes.js","sources":["../../../../../../src/devtools/mmap/components/FlowNodes.tsx"],"sourcesContent":["import { Handle, Position } from \"@xyflow/react\";\nimport { Database, User, Zap } from \"lucide-react\";\n\nexport const FlowNode = ({ data }: any) => (\n <div\n className={`m2-node-flow nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n style={{ cursor: \"pointer\" }}\n onClick={() => data.onClick?.()}\n >\n {/* Genealogy Handles (Top/Bottom) */}\n <Handle\n type=\"target\"\n position={Position.Top}\n style={{ opacity: 0 }}\n id=\"gen-target\"\n />\n <Handle\n type=\"source\"\n position={Position.Bottom}\n style={{ opacity: 0 }}\n id=\"gen-source\"\n />\n\n {/* Live Graph Handles (Left/Right) */}\n {/* Actors enter from the LEFT */}\n <Handle\n type=\"target\"\n position={Position.Left}\n style={{ opacity: 0 }}\n id=\"actor-target\"\n />\n {/* Listeners exit to the RIGHT */}\n <Handle\n type=\"source\"\n position={Position.Right}\n style={{ opacity: 0 }}pa\n id=\"listener-source\"\n />\n\n <div className=\"m2-node-flow-header\">\n <div className=\"m2-node-icon\">\n <Database size={18} />\n </div>\n <div className=\"m2-node-title\">{data.label}</div>\n </div>\n\n <div className=\"m2-node-preview\" style={{overflowY: \"hidden\"}}>\n {data.value !== undefined ? (\n <pre style={{ margin: 0 }}>\n {JSON.stringify(data.value, null, 2).slice(0, 150)}\n </pre>\n ) : (\n <span style={{ opacity: 0.5 }}>Empty state</span>\n )}\n </div>\n </div>\n);\n\nexport const ActorNode = ({ data }: any) => (\n <div\n className={`m2-node-actor nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n >\n <div className=\"m2-actor-avatar\">\n {data.isAnonymous ? (\n <User size={14} />\n ) : (\n data.label.charAt(0).toUpperCase()\n )}\n </div>\n <div className=\"m2-actor-name\">{data.label}</div>\n {/* Actors connect to the flow on their RIGHT side */}\n <Handle type=\"source\" position={Position.Right} style={{ opacity: 0 }} />\n </div>\n);\n\nexport const ListenerNode = ({ data }: any) => (\n <div\n className={`m2-node-listener nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n >\n {/* Listeners receive from the flow on their LEFT side */}\n <Handle type=\"target\" position={Position.Left} style={{ opacity: 0 }} />\n <div className=\"m2-listener-icon\">\n <Zap\n size={14}\n className={data.isHot ? \"text-white\" : \"text-yellow-400\"}\n />\n </div>\n <div className=\"m2-listener-name\">{\"-->\"} {data.label}</div>\n </div>\n);\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"FlowNodes.js","sources":["../../../../../../src/devtools/mmap/components/FlowNodes.tsx"],"sourcesContent":["import { Handle, Position } from \"@xyflow/react\";\nimport { Database, User, Zap } from \"lucide-react\";\n\nexport const FlowNode = ({ data }: any) => (\n <div\n className={`m2-node-flow nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n style={{ cursor: \"pointer\" }}\n onClick={() => data.onClick?.()}\n >\n {/* Genealogy Handles (Top/Bottom) */}\n <Handle\n type=\"target\"\n position={Position.Top}\n style={{ opacity: 0 }}\n id=\"gen-target\"\n />\n <Handle\n type=\"source\"\n position={Position.Bottom}\n style={{ opacity: 0 }}\n id=\"gen-source\"\n />\n\n {/* Live Graph Handles (Left/Right) */}\n {/* Actors enter from the LEFT */}\n <Handle\n type=\"target\"\n position={Position.Left}\n style={{ opacity: 0 }}\n id=\"actor-target\"\n />\n {/* Listeners exit to the RIGHT */}\n <Handle\n type=\"source\"\n position={Position.Right}\n style={{ opacity: 0 }}\n id=\"listener-source\"\n />\n\n <div className=\"m2-node-flow-header\">\n <div className=\"m2-node-icon\">\n <Database size={18} />\n </div>\n <div className=\"m2-node-title\">{data.label}</div>\n </div>\n\n <div className=\"m2-node-preview\" style={{ overflowY: \"hidden\" }}>\n {data.value !== undefined ? (\n <pre style={{ margin: 0 }}>\n {JSON.stringify(data.value, null, 2).slice(0, 150)}\n </pre>\n ) : (\n <span style={{ opacity: 0.5 }}>Empty state</span>\n )}\n </div>\n </div>\n);\n\nexport const ActorNode = ({ data }: any) => (\n <div\n className={`m2-node-actor nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n >\n <div className=\"m2-actor-avatar\">\n {data.isAnonymous ? (\n <User size={14} />\n ) : (\n data.label.charAt(0).toUpperCase()\n )}\n </div>\n <div className=\"m2-actor-name\">{data.label}</div>\n {/* Actors connect to the flow on their RIGHT side */}\n <Handle type=\"source\" position={Position.Right} style={{ opacity: 0 }} />\n </div>\n);\n\nexport const ListenerNode = ({ data }: any) => (\n <div\n className={`m2-node-listener nodrag ${data.isActive ? \"active\" : \"\"} ${data.isHot ? \"is-hot\" : \"\"}`}\n >\n {/* Listeners receive from the flow on their LEFT side */}\n <Handle type=\"target\" position={Position.Left} style={{ opacity: 0 }} />\n <div className=\"m2-listener-icon\">\n <Zap\n size={14}\n className={data.isHot ? \"text-white\" : \"text-yellow-400\"}\n />\n </div>\n <div className=\"m2-listener-name\">\n {\"-->\"} {data.label}\n </div>\n </div>\n);\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -266,9 +266,23 @@ class MemoryVault {
266
266
  return vaultInstance.vault.get(key);
267
267
  },
268
268
  };
269
+ const actionOps = {
270
+ ...dynamicOps,
271
+ get ctx() {
272
+ if (!options.ctx)
273
+ return undefined;
274
+ return options.ctx({
275
+ get state() {
276
+ return vaultInstance.vault.get(key);
277
+ },
278
+ initialState: startingValue,
279
+ actions: boundActions,
280
+ });
281
+ },
282
+ };
269
283
  if (options.actions) {
270
284
  for (const [name, fn] of Object.entries(options.actions)) {
271
- boundActions[name] = (...args) => fn(...args)(dynamicOps);
285
+ boundActions[name] = (...args) => fn(...args)(actionOps);
272
286
  }
273
287
  }
274
288
  const effectStates = options.effects.map((effect) => {