fractostate 4.7.1 → 4.7.2
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/src/devtools/MentalMap.js +1 -2
- package/dist/cjs/src/devtools/MentalMap.js.map +1 -1
- package/dist/cjs/src/proxy.js +10 -0
- package/dist/cjs/src/proxy.js.map +1 -1
- package/dist/esm/src/devtools/MentalMap.js +1 -2
- package/dist/esm/src/devtools/MentalMap.js.map +1 -1
- package/dist/esm/src/proxy.js +10 -0
- package/dist/esm/src/proxy.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/plugins.d.ts +1 -1
- package/dist/types-glPP8lSw.d.ts +216 -0
- package/package.json +1 -1
|
@@ -28,7 +28,6 @@ const MentalMap = ({ snapshot, onClose, onMinimizeChange, minimizedSide = "right
|
|
|
28
28
|
const [overlayFlow, setOverlayFlow] = React.useState(null);
|
|
29
29
|
const [searchQuery, setSearchQuery] = React.useState("");
|
|
30
30
|
const [isMinimized, setIsMinimized] = React.useState(false);
|
|
31
|
-
const [isFullscreen, setIsFullscreen] = React.useState(false);
|
|
32
31
|
const [isLedgerVisible, setIsLedgerVisible] = React.useState(true);
|
|
33
32
|
const [viewMode, setViewMode] = React.useState("live");
|
|
34
33
|
React.useEffect(() => {
|
|
@@ -165,7 +164,7 @@ const MentalMap = ({ snapshot, onClose, onMinimizeChange, minimizedSide = "right
|
|
|
165
164
|
}
|
|
166
165
|
});
|
|
167
166
|
// --- Node ACTORS (Left) ---
|
|
168
|
-
namedActors.forEach((actor,
|
|
167
|
+
namedActors.forEach((actor, _) => {
|
|
169
168
|
const actorId = `actor-${actor.label}-${key}`;
|
|
170
169
|
const isActorHot = isFlowHot && activity.actor === actor.label;
|
|
171
170
|
newNodes.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MentalMap.js","sources":["../../../../src/devtools/MentalMap.tsx"],"sourcesContent":["import { useMemo, useState, useEffect, useRef } from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n Edge,\n Node,\n useNodesState,\n useEdgesState,\n ConnectionLineType,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n Database,\n Search,\n X,\n RefreshCcw,\n Maximize2,\n Cpu,\n Minimize2,\n PanelRightClose,\n PanelRight,\n Activity,\n GitBranch,\n Network,\n} from \"lucide-react\";\nimport \"./MentalMap.css\";\nimport { MMapProps } from \"./mmap/MMapTypes\";\nimport { FlowNode, ActorNode, ListenerNode } from \"./mmap/components/FlowNodes\";\nimport { FiberEdge } from \"./MapUtils\";\nimport { MMapSidebar } from \"./mmap/components/MMapSidebar\";\nimport { MMapLedger } from \"./mmap/components/MMapLedger\";\nimport { FlowGenealogy } from \"./mmap/components/FlowGenealogy\";\n\nconst nodeTypes = {\n flow: FlowNode,\n actor: ActorNode,\n listener: ListenerNode,\n};\n\nconst edgeTypes = {\n fiber: FiberEdge,\n};\n\nexport const MentalMap = ({\n snapshot,\n onClose,\n onMinimizeChange,\n minimizedSide = \"right\",\n setIsOpen,\n}: MMapProps) => {\n const [nodes, setNodes, onNodesChange] = useNodesState<Node>([]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<Edge>([]);\n const [selectedFlow, setSelectedFlow] = useState<string | null>(null);\n const [overlayFlow, setOverlayFlow] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isMinimized, setIsMinimized] = useState(false);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [isLedgerVisible, setIsLedgerVisible] = useState(true);\n const [viewMode, setViewMode] = useState<\"live\" | \"genealogy\">(\"live\");\n\n useEffect(() => {\n onMinimizeChange?.(isMinimized);\n }, [isMinimized, onMinimizeChange]);\n\n // Logic pour le drag du logo réduit\n const [minimizedPos, setMinimizedPos] = useState({\n x: minimizedSide === \"right\" ? window.innerWidth - 100 : 40,\n y: window.innerHeight - 100,\n });\n const [isDraggingLogo, setIsDraggingLogo] = useState(false);\n const wasDragged = useRef(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n\n const handleLogoMouseDown = (e: React.MouseEvent) => {\n if (!isMinimized) return;\n setIsDraggingLogo(true);\n wasDragged.current = false;\n setDragOffset({\n x: e.clientX - minimizedPos.x,\n y: e.clientY - minimizedPos.y,\n });\n };\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (isDraggingLogo) {\n wasDragged.current = true;\n setMinimizedPos({\n x: e.clientX - dragOffset.x,\n y: e.clientY - dragOffset.y,\n });\n }\n };\n const handleMouseUp = () => {\n setTimeout(() => {\n setIsDraggingLogo(false);\n }, 0);\n };\n\n if (isDraggingLogo) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDraggingLogo, dragOffset]);\n\n const [activeFlows, setActiveFlows] = useState<Set<string>>(new Set());\n\n // Detect recent activity\n const recentActivity = useMemo(() => {\n const now = Date.now();\n const activityMap: Record<\n string,\n { active: boolean; actor?: string; type?: string }\n > = {};\n\n Object.entries(snapshot).forEach(([key, data]) => {\n const traces = data.meta.traces || [];\n const lastTrace = traces[traces.length - 1];\n if (lastTrace && now - lastTrace.timestamp < 1000) {\n activityMap[key] = {\n active: true,\n actor: lastTrace.actor,\n type: lastTrace.type,\n };\n }\n });\n return activityMap;\n }, [snapshot]);\n\n useEffect(() => {\n const active = new Set<string>();\n Object.keys(recentActivity).forEach((key) => active.add(key));\n setActiveFlows(active);\n }, [recentActivity]);\n\n const filteredFlows = useMemo(() => {\n const query = searchQuery.toLowerCase().trim();\n const entries = Object.entries(snapshot);\n if (!query) return entries;\n\n return entries.filter(([key, data]) => {\n if (key.toLowerCase().includes(query)) return true;\n const consumers = data.meta.consumers || [];\n if (consumers.some((c: any) => c.toLowerCase().includes(query)))\n return true;\n try {\n if (JSON.stringify(data.value).toLowerCase().includes(query))\n return true;\n } catch (e) {}\n return false;\n });\n }, [snapshot, searchQuery]);\n\n useEffect(() => {\n if (viewMode !== \"live\") return;\n\n const flowEntries = filteredFlows;\n const newNodes: Node[] = [];\n const newEdges: Edge[] = [];\n\n const actorX = 50;\n const flowX = 500;\n const listenerX = 950;\n\n let flowY = 100;\n let actorY = 100;\n let listenerY = 100;\n\n flowEntries.forEach(([key, data]) => {\n const activity = recentActivity[key];\n const isFlowHot = !!activity;\n\n // --- Node FLOW (Center) ---\n newNodes.push({\n id: `flow-${key}`,\n type: \"flow\",\n position: { x: flowX, y: flowY },\n data: {\n label: key.toUpperCase(),\n value: data.value,\n isActive: selectedFlow === key,\n isHot: isFlowHot,\n onClick: () => setOverlayFlow(key),\n },\n });\n\n // Split Listeners: Named (Actors) vs Anonymous (UI)\n const rawListeners = data.meta.listeners || [];\n const namedActors: any[] = [];\n const uiListeners: any[] = [];\n\n rawListeners.forEach((l: any) => {\n const isUI =\n l.label.startsWith(\"useFlow(\") || l.label === \"Anonymous Subscriber\";\n if (isUI) uiListeners.push(l);\n else namedActors.push(l);\n });\n\n // Mix in the explicit consumers (those who wrote in the past)\n const explicitConsumers = data.meta.consumers || [];\n explicitConsumers.forEach((name: string) => {\n if (!namedActors.find((a) => a.label === name)) {\n namedActors.push({ label: name, isExplicit: true });\n }\n });\n\n // --- Node ACTORS (Left) ---\n namedActors.forEach((actor, i) => {\n const actorId = `actor-${actor.label}-${key}`;\n const isActorHot = isFlowHot && activity.actor === actor.label;\n\n newNodes.push({\n id: actorId,\n type: \"actor\",\n position: { x: actorX, y: actorY },\n data: {\n label: actor.label,\n isActive: selectedFlow === key,\n isHot: isActorHot,\n },\n });\n\n newEdges.push({\n id: `edge-${actor.label}-${key}`,\n source: actorId,\n target: `flow-${key}`,\n targetHandle: \"actor-target\",\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isActorHot ? \"#fbbf24\" : \"#a855f7\",\n strokeWidth: isActorHot ? 4 : 2,\n },\n });\n\n actorY += 120;\n });\n\n // --- Node UI LISTENERS (Right) ---\n // Group UI Listeners by label to avoid redundancy\n const groupedUI = uiListeners.reduce((acc: any, curr: any) => {\n if (!acc[curr.label]) {\n acc[curr.label] = { ...curr, count: 0 };\n }\n acc[curr.label].count += 1;\n return acc;\n }, {}); \n\n Object.values(groupedUI).forEach((group: any, _: number) => {\n const listenerId = `listener-${key}-${group.label}`;\n const isListenerHot =\n isFlowHot && (activity.type === \"read\" || activity.type === \"write\");\n\n newNodes.push({\n id: listenerId,\n type: \"listener\",\n position: { x: listenerX, y: listenerY },\n data: {\n label:\n group.count > 1\n ? `${group.label} (x${group.count})`\n : group.label,\n isActive: selectedFlow === key,\n isHot: isListenerHot,\n },\n });\n\n newEdges.push({\n id: `edge-flow-listener-${key}-${group.label}`,\n source: `flow-${key}`,\n sourceHandle: \"listener-source\",\n target: listenerId,\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isListenerHot ? \"#fbbf24\" : \"#00d4ff\",\n strokeWidth: isListenerHot ? 3 : 2,\n },\n });\n\n listenerY += 100;\n });\n\n const maxRowHeight = Math.max(\n 250,\n namedActors.length * 120,\n Object.keys(groupedUI).length * 100,\n );\n flowY += maxRowHeight + 50;\n if (actorY < flowY) actorY = flowY;\n if (listenerY < flowY) listenerY = flowY;\n });\n\n setNodes(newNodes);\n setEdges(newEdges);\n }, [\n filteredFlows,\n selectedFlow,\n viewMode,\n recentActivity,\n setNodes,\n setEdges,\n ]);\n\n return (\n <motion.div\n className=\"mental-map-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n {/* ... reste du header identique ... */}\n <div\n className={`mental-map-container ${isMinimized ? \"minimized\" : \"\"}`}\n style={\n isMinimized\n ? {\n left: minimizedPos.x,\n top: minimizedPos.y,\n bottom: \"auto\",\n right: \"auto\",\n }\n : {}\n }\n onMouseDown={handleLogoMouseDown}\n onClick={() => {\n if (!wasDragged.current && isMinimized) setIsMinimized(false);\n }}\n >\n <div\n className={`m2-minimized-logo ${activeFlows.size > 0 ? \"pulse\" : \"\"}`}\n >\n F<span className=\"m2-minimized-badge\">FTE</span>\n </div>\n\n <header className=\"m2-header\">\n <div className=\"m2-logo-group\">\n <div className=\"m2-logo-icon\">\n <Cpu color=\"white\" size={28} />\n </div>\n <div className=\"m2-header-titles\">\n <h1>Mental Map & Trace Engine</h1>\n <div className=\"m2-header-meta\">\n <span className=\"m2-engine-badge\">FM2/FTE5</span>\n <span style={{ fontSize: 10, opacity: 0.5, fontWeight: 700 }}>\n NEHONIX FCE\n </span>\n </div>\n </div>\n </div>\n <div className=\"m2-controls\">\n <div\n className=\"m2-view-switcher\"\n style={{ display: \"flex\", gap: 8, marginRight: 16 }}\n >\n <button\n className={`view-toggle-btn ${viewMode === \"live\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"live\")}\n >\n <Network size={16} /> Live Graph\n </button>\n <button\n className={`view-toggle-btn ${viewMode === \"genealogy\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"genealogy\")}\n >\n <GitBranch size={16} /> Genealogy\n </button>\n </div>\n <div className=\"m2-search-wrapper\">\n <Search className=\"m2-search-icon\" size={18} />\n <input\n type=\"text\"\n className=\"m2-search-input\"\n placeholder=\"Search flows, actors or data patterns...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n <div className=\"m2-action-btns\">\n <button\n className=\"m2-icon-btn\"\n title=\"Refresh\"\n onClick={() => window.location.reload()}\n >\n <RefreshCcw size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Minimize\"\n style={{color: \"blue\"}}\n\n onClick={(e) => {\n e.stopPropagation();\n setIsMinimized(true);\n setIsOpen(false);\n }}\n >\n <Minimize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Fullscreen\"\n onClick={() => {\n if (!document.fullscreenElement)\n document.documentElement.requestFullscreen();\n else document.exitFullscreen();\n }}\n >\n <Maximize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Toggle Ledger\"\n onClick={() => setIsLedgerVisible(!isLedgerVisible)}\n >\n {isLedgerVisible ? (\n <PanelRightClose size={20} />\n ) : (\n <PanelRight size={20} />\n )}\n </button>\n <button\n className=\"m2-icon-btn m2-close-btn force-visible\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n title=\"Close\"\n >\n <X size={24} />\n </button>\n </div>\n </div>\n </header>\n\n <div className=\"m2-layout\">\n <MMapSidebar\n filteredFlows={filteredFlows}\n selectedFlow={selectedFlow}\n setSelectedFlow={setSelectedFlow}\n activeFlows={activeFlows}\n />\n <main className=\"m2-canvas\">\n {viewMode === \"live\" ? (\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n connectionLineType={ConnectionLineType.Bezier}\n onNodeClick={(_, node) => {\n if (node.type === \"flow\")\n setOverlayFlow(node.id.replace(\"flow-\", \"\"));\n }}\n fitView\n colorMode=\"dark\"\n >\n <Background color=\"#1e293b\" gap={20} />{\" \"}\n <Controls showInteractive={false} />\n </ReactFlow>\n ) : (\n <FlowGenealogy\n snapshot={snapshot}\n onSelectFlow={setOverlayFlow}\n />\n )}\n </main>\n <MMapLedger\n snapshot={snapshot}\n selectedFlow={selectedFlow}\n isLedgerVisible={isLedgerVisible}\n />\n </div>\n\n <AnimatePresence>\n {overlayFlow && (\n <motion.div\n className=\"m2-flow-overlay-backdrop\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setOverlayFlow(null)}\n >\n <div\n className=\"m2-flow-overlay\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"m2-overlay-header\">\n <div className=\"m2-overlay-title\">\n <Database color=\"#00d4ff\" size={24} />\n <h2>{overlayFlow} Activity</h2>\n </div>\n <button\n className=\"m2-icon-btn m2-close-btn\"\n onClick={() => setOverlayFlow(null)}\n >\n <X size={20} />\n </button>\n </div>\n <div className=\"m2-overlay-content\">\n {snapshot[overlayFlow].meta.traces.length === 0 ? (\n <div className=\"m2-empty-state\">\n <Activity size={48} className=\"m2-empty-icon\" />\n <h3>No Activity Detected</h3>\n <p>This flow hasn't emitted any events yet.</p>\n </div>\n ) : (\n <div className=\"m2-trace-list\">\n {[...snapshot[overlayFlow].meta.traces]\n .reverse()\n .map((trace, i) => (\n <div\n key={i}\n className={`m2-trace-card ${trace.type === \"reset\" ? \"reset\" : \"\"}`}\n >\n <div className=\"m2-trace-dot\" />\n <div className=\"m2-trace-header\">\n <span className=\"m2-trace-actor-lbl\">\n {trace.actor}\n </span>\n <span className=\"m2-trace-ts\">\n {new Date(trace.timestamp).toLocaleTimeString()}\n </span>\n </div>\n <div className=\"m2-trace-op-info\">\n <span className=\"m2-op-type\">{trace.type}</span>\n </div>\n <div className=\"m2-trace-data\">\n <pre className=\"m2-trace-json\">\n {JSON.stringify(trace.value, null, 2)}\n </pre>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </motion.div>\n );\n};\n"],"names":["FlowNode","ActorNode","ListenerNode","FiberEdge","useNodesState","useEdgesState","useState","useEffect","useRef","useMemo","_jsx","motion","_jsxs","Cpu","Network","GitBranch","Search","RefreshCcw","Minimize2","Maximize2","PanelRightClose","PanelRight","X","MMapSidebar","ReactFlow","ConnectionLineType","Background","Controls","FlowGenealogy","MMapLedger","AnimatePresence","Database","Activity"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MentalMap.js","sources":["../../../../src/devtools/MentalMap.tsx"],"sourcesContent":["import { useMemo, useState, useEffect, useRef } from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n Edge,\n Node,\n useNodesState,\n useEdgesState,\n ConnectionLineType,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n Database,\n Search,\n X,\n RefreshCcw,\n Maximize2,\n Cpu,\n Minimize2,\n PanelRightClose,\n PanelRight,\n Activity,\n GitBranch,\n Network,\n} from \"lucide-react\";\nimport \"./MentalMap.css\";\nimport { MMapProps } from \"./mmap/MMapTypes\";\nimport { FlowNode, ActorNode, ListenerNode } from \"./mmap/components/FlowNodes\";\nimport { FiberEdge } from \"./MapUtils\";\nimport { MMapSidebar } from \"./mmap/components/MMapSidebar\";\nimport { MMapLedger } from \"./mmap/components/MMapLedger\";\nimport { FlowGenealogy } from \"./mmap/components/FlowGenealogy\";\n\nconst nodeTypes = {\n flow: FlowNode,\n actor: ActorNode,\n listener: ListenerNode,\n};\n\nconst edgeTypes = {\n fiber: FiberEdge,\n};\n\nexport const MentalMap = ({\n snapshot,\n onClose,\n onMinimizeChange,\n minimizedSide = \"right\",\n setIsOpen,\n}: MMapProps) => {\n const [nodes, setNodes, onNodesChange] = useNodesState<Node>([]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<Edge>([]);\n const [selectedFlow, setSelectedFlow] = useState<string | null>(null);\n const [overlayFlow, setOverlayFlow] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isMinimized, setIsMinimized] = useState(false);\n const [isLedgerVisible, setIsLedgerVisible] = useState(true);\n const [viewMode, setViewMode] = useState<\"live\" | \"genealogy\">(\"live\");\n\n useEffect(() => {\n onMinimizeChange?.(isMinimized);\n }, [isMinimized, onMinimizeChange]);\n\n // Logic pour le drag du logo réduit\n const [minimizedPos, setMinimizedPos] = useState({\n x: minimizedSide === \"right\" ? window.innerWidth - 100 : 40,\n y: window.innerHeight - 100,\n });\n const [isDraggingLogo, setIsDraggingLogo] = useState(false);\n const wasDragged = useRef(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n\n const handleLogoMouseDown = (e: React.MouseEvent) => {\n if (!isMinimized) return;\n setIsDraggingLogo(true);\n wasDragged.current = false;\n setDragOffset({\n x: e.clientX - minimizedPos.x,\n y: e.clientY - minimizedPos.y,\n });\n };\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (isDraggingLogo) {\n wasDragged.current = true;\n setMinimizedPos({\n x: e.clientX - dragOffset.x,\n y: e.clientY - dragOffset.y,\n });\n }\n };\n const handleMouseUp = () => {\n setTimeout(() => {\n setIsDraggingLogo(false);\n }, 0);\n };\n\n if (isDraggingLogo) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDraggingLogo, dragOffset]);\n\n const [activeFlows, setActiveFlows] = useState<Set<string>>(new Set());\n\n // Detect recent activity\n const recentActivity = useMemo(() => {\n const now = Date.now();\n const activityMap: Record<\n string,\n { active: boolean; actor?: string; type?: string }\n > = {};\n\n Object.entries(snapshot).forEach(([key, data]) => {\n const traces = data.meta.traces || [];\n const lastTrace = traces[traces.length - 1];\n if (lastTrace && now - lastTrace.timestamp < 1000) {\n activityMap[key] = {\n active: true,\n actor: lastTrace.actor,\n type: lastTrace.type,\n };\n }\n });\n return activityMap;\n }, [snapshot]);\n\n useEffect(() => {\n const active = new Set<string>();\n Object.keys(recentActivity).forEach((key) => active.add(key));\n setActiveFlows(active);\n }, [recentActivity]);\n\n const filteredFlows = useMemo(() => {\n const query = searchQuery.toLowerCase().trim();\n const entries = Object.entries(snapshot);\n if (!query) return entries;\n\n return entries.filter(([key, data]) => {\n if (key.toLowerCase().includes(query)) return true;\n const consumers = data.meta.consumers || [];\n if (consumers.some((c: any) => c.toLowerCase().includes(query)))\n return true;\n try {\n if (JSON.stringify(data.value).toLowerCase().includes(query))\n return true;\n } catch (e) {}\n return false;\n });\n }, [snapshot, searchQuery]);\n\n useEffect(() => {\n if (viewMode !== \"live\") return;\n\n const flowEntries = filteredFlows;\n const newNodes: Node[] = [];\n const newEdges: Edge[] = [];\n\n const actorX = 50;\n const flowX = 500;\n const listenerX = 950;\n\n let flowY = 100;\n let actorY = 100;\n let listenerY = 100;\n\n flowEntries.forEach(([key, data]) => {\n const activity = recentActivity[key];\n const isFlowHot = !!activity;\n\n // --- Node FLOW (Center) ---\n newNodes.push({\n id: `flow-${key}`,\n type: \"flow\",\n position: { x: flowX, y: flowY },\n data: {\n label: key.toUpperCase(),\n value: data.value,\n isActive: selectedFlow === key,\n isHot: isFlowHot,\n onClick: () => setOverlayFlow(key),\n },\n });\n\n // Split Listeners: Named (Actors) vs Anonymous (UI)\n const rawListeners = data.meta.listeners || [];\n const namedActors: any[] = [];\n const uiListeners: any[] = [];\n\n rawListeners.forEach((l: any) => {\n const isUI =\n l.label.startsWith(\"useFlow(\") || l.label === \"Anonymous Subscriber\";\n if (isUI) uiListeners.push(l);\n else namedActors.push(l);\n });\n\n // Mix in the explicit consumers (those who wrote in the past)\n const explicitConsumers = data.meta.consumers || [];\n explicitConsumers.forEach((name: string) => {\n if (!namedActors.find((a) => a.label === name)) {\n namedActors.push({ label: name, isExplicit: true });\n }\n });\n\n // --- Node ACTORS (Left) ---\n namedActors.forEach((actor, _) => {\n const actorId = `actor-${actor.label}-${key}`;\n const isActorHot = isFlowHot && activity.actor === actor.label;\n\n newNodes.push({\n id: actorId,\n type: \"actor\",\n position: { x: actorX, y: actorY },\n data: {\n label: actor.label,\n isActive: selectedFlow === key,\n isHot: isActorHot,\n },\n });\n\n newEdges.push({\n id: `edge-${actor.label}-${key}`,\n source: actorId,\n target: `flow-${key}`,\n targetHandle: \"actor-target\",\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isActorHot ? \"#fbbf24\" : \"#a855f7\",\n strokeWidth: isActorHot ? 4 : 2,\n },\n });\n\n actorY += 120;\n });\n\n // --- Node UI LISTENERS (Right) ---\n // Group UI Listeners by label to avoid redundancy\n const groupedUI = uiListeners.reduce((acc: any, curr: any) => {\n if (!acc[curr.label]) {\n acc[curr.label] = { ...curr, count: 0 };\n }\n acc[curr.label].count += 1;\n return acc;\n }, {}); \n\n Object.values(groupedUI).forEach((group: any, _: number) => {\n const listenerId = `listener-${key}-${group.label}`;\n const isListenerHot =\n isFlowHot && (activity.type === \"read\" || activity.type === \"write\");\n\n newNodes.push({\n id: listenerId,\n type: \"listener\",\n position: { x: listenerX, y: listenerY },\n data: {\n label:\n group.count > 1\n ? `${group.label} (x${group.count})`\n : group.label,\n isActive: selectedFlow === key,\n isHot: isListenerHot,\n },\n });\n\n newEdges.push({\n id: `edge-flow-listener-${key}-${group.label}`,\n source: `flow-${key}`,\n sourceHandle: \"listener-source\",\n target: listenerId,\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isListenerHot ? \"#fbbf24\" : \"#00d4ff\",\n strokeWidth: isListenerHot ? 3 : 2,\n },\n });\n\n listenerY += 100;\n });\n\n const maxRowHeight = Math.max(\n 250,\n namedActors.length * 120,\n Object.keys(groupedUI).length * 100,\n );\n flowY += maxRowHeight + 50;\n if (actorY < flowY) actorY = flowY;\n if (listenerY < flowY) listenerY = flowY;\n });\n\n setNodes(newNodes);\n setEdges(newEdges);\n }, [\n filteredFlows,\n selectedFlow,\n viewMode,\n recentActivity,\n setNodes,\n setEdges,\n ]);\n\n return (\n <motion.div\n className=\"mental-map-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n {/* ... reste du header identique ... */}\n <div\n className={`mental-map-container ${isMinimized ? \"minimized\" : \"\"}`}\n style={\n isMinimized\n ? {\n left: minimizedPos.x,\n top: minimizedPos.y,\n bottom: \"auto\",\n right: \"auto\",\n }\n : {}\n }\n onMouseDown={handleLogoMouseDown}\n onClick={() => {\n if (!wasDragged.current && isMinimized) setIsMinimized(false);\n }}\n >\n <div\n className={`m2-minimized-logo ${activeFlows.size > 0 ? \"pulse\" : \"\"}`}\n >\n F<span className=\"m2-minimized-badge\">FTE</span>\n </div>\n\n <header className=\"m2-header\">\n <div className=\"m2-logo-group\">\n <div className=\"m2-logo-icon\">\n <Cpu color=\"white\" size={28} />\n </div>\n <div className=\"m2-header-titles\">\n <h1>Mental Map & Trace Engine</h1>\n <div className=\"m2-header-meta\">\n <span className=\"m2-engine-badge\">FM2/FTE5</span>\n <span style={{ fontSize: 10, opacity: 0.5, fontWeight: 700 }}>\n NEHONIX FCE\n </span>\n </div>\n </div>\n </div>\n <div className=\"m2-controls\">\n <div\n className=\"m2-view-switcher\"\n style={{ display: \"flex\", gap: 8, marginRight: 16 }}\n >\n <button\n className={`view-toggle-btn ${viewMode === \"live\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"live\")}\n >\n <Network size={16} /> Live Graph\n </button>\n <button\n className={`view-toggle-btn ${viewMode === \"genealogy\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"genealogy\")}\n >\n <GitBranch size={16} /> Genealogy\n </button>\n </div>\n <div className=\"m2-search-wrapper\">\n <Search className=\"m2-search-icon\" size={18} />\n <input\n type=\"text\"\n className=\"m2-search-input\"\n placeholder=\"Search flows, actors or data patterns...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n <div className=\"m2-action-btns\">\n <button\n className=\"m2-icon-btn\"\n title=\"Refresh\"\n onClick={() => window.location.reload()}\n >\n <RefreshCcw size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Minimize\"\n style={{color: \"blue\"}}\n\n onClick={(e) => {\n e.stopPropagation();\n setIsMinimized(true);\n setIsOpen(false);\n }}\n >\n <Minimize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Fullscreen\"\n onClick={() => {\n if (!document.fullscreenElement)\n document.documentElement.requestFullscreen();\n else document.exitFullscreen();\n }}\n >\n <Maximize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Toggle Ledger\"\n onClick={() => setIsLedgerVisible(!isLedgerVisible)}\n >\n {isLedgerVisible ? (\n <PanelRightClose size={20} />\n ) : (\n <PanelRight size={20} />\n )}\n </button>\n <button\n className=\"m2-icon-btn m2-close-btn force-visible\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n title=\"Close\"\n >\n <X size={24} />\n </button>\n </div>\n </div>\n </header>\n\n <div className=\"m2-layout\">\n <MMapSidebar\n filteredFlows={filteredFlows}\n selectedFlow={selectedFlow}\n setSelectedFlow={setSelectedFlow}\n activeFlows={activeFlows}\n />\n <main className=\"m2-canvas\">\n {viewMode === \"live\" ? (\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n connectionLineType={ConnectionLineType.Bezier}\n onNodeClick={(_, node) => {\n if (node.type === \"flow\")\n setOverlayFlow(node.id.replace(\"flow-\", \"\"));\n }}\n fitView\n colorMode=\"dark\"\n >\n <Background color=\"#1e293b\" gap={20} />{\" \"}\n <Controls showInteractive={false} />\n </ReactFlow>\n ) : (\n <FlowGenealogy\n snapshot={snapshot}\n onSelectFlow={setOverlayFlow}\n />\n )}\n </main>\n <MMapLedger\n snapshot={snapshot}\n selectedFlow={selectedFlow}\n isLedgerVisible={isLedgerVisible}\n />\n </div>\n\n <AnimatePresence>\n {overlayFlow && (\n <motion.div\n className=\"m2-flow-overlay-backdrop\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setOverlayFlow(null)}\n >\n <div\n className=\"m2-flow-overlay\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"m2-overlay-header\">\n <div className=\"m2-overlay-title\">\n <Database color=\"#00d4ff\" size={24} />\n <h2>{overlayFlow} Activity</h2>\n </div>\n <button\n className=\"m2-icon-btn m2-close-btn\"\n onClick={() => setOverlayFlow(null)}\n >\n <X size={20} />\n </button>\n </div>\n <div className=\"m2-overlay-content\">\n {snapshot[overlayFlow].meta.traces.length === 0 ? (\n <div className=\"m2-empty-state\">\n <Activity size={48} className=\"m2-empty-icon\" />\n <h3>No Activity Detected</h3>\n <p>This flow hasn't emitted any events yet.</p>\n </div>\n ) : (\n <div className=\"m2-trace-list\">\n {[...snapshot[overlayFlow].meta.traces]\n .reverse()\n .map((trace, i) => (\n <div\n key={i}\n className={`m2-trace-card ${trace.type === \"reset\" ? \"reset\" : \"\"}`}\n >\n <div className=\"m2-trace-dot\" />\n <div className=\"m2-trace-header\">\n <span className=\"m2-trace-actor-lbl\">\n {trace.actor}\n </span>\n <span className=\"m2-trace-ts\">\n {new Date(trace.timestamp).toLocaleTimeString()}\n </span>\n </div>\n <div className=\"m2-trace-op-info\">\n <span className=\"m2-op-type\">{trace.type}</span>\n </div>\n <div className=\"m2-trace-data\">\n <pre className=\"m2-trace-json\">\n {JSON.stringify(trace.value, null, 2)}\n </pre>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </motion.div>\n );\n};\n"],"names":["FlowNode","ActorNode","ListenerNode","FiberEdge","useNodesState","useEdgesState","useState","useEffect","useRef","useMemo","_jsx","motion","_jsxs","Cpu","Network","GitBranch","Search","RefreshCcw","Minimize2","Maximize2","PanelRightClose","PanelRight","X","MMapSidebar","ReactFlow","ConnectionLineType","Background","Controls","FlowGenealogy","MMapLedger","AnimatePresence","Database","Activity"],"mappings":"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"}
|
package/dist/cjs/src/proxy.js
CHANGED
|
@@ -96,6 +96,16 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
96
96
|
};
|
|
97
97
|
if (prop === "__actions__")
|
|
98
98
|
return options.actions;
|
|
99
|
+
if (prop === "_undo")
|
|
100
|
+
return () => store.store.undo(key);
|
|
101
|
+
if (prop === "_redo")
|
|
102
|
+
return () => store.store.redo(key);
|
|
103
|
+
if (prop === "_canUndo")
|
|
104
|
+
return (store.store.getHistory(key)?.length || 0) > 1;
|
|
105
|
+
if (prop === "_canRedo")
|
|
106
|
+
return (store.store.getRedoStack(key)?.length || 0) > 0;
|
|
107
|
+
if (prop === "_history")
|
|
108
|
+
return store.store.getHistory(key);
|
|
99
109
|
// Handle plugin-provided operations (e.g., _persist)
|
|
100
110
|
const pluginOps = store.store.getPluginOps(key, options);
|
|
101
111
|
if (prop in pluginOps)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\n\n// Path cache to avoid repeated array allocations\nconst pathCache = new WeakMap<string[], Map<string, string[]>>();\n\nfunction getCachedPath(path: string[], prop: string): string[] {\n let cache = pathCache.get(path);\n if (!cache) {\n cache = new Map();\n pathCache.set(path, cache);\n }\n\n let cached = cache.get(prop);\n if (!cached) {\n cached = [...path, prop];\n cache.set(prop, cached);\n }\n return cached;\n}\n\n/**\n * Creates a deep proxy that provides type-specific atomic operations for a flow.\n * The proxy tracks its path within the state tree and maps access to specific update logic.\n *\n * Reduced allocations, cached operations\n */\nexport function createDeepProxy<T = any, A = Record<string, any>>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T, A> {\n // Pre-bind commit function to avoid recreation\n const commit = (\n val: any,\n forceful: boolean,\n skipEquality = false,\n op?: string,\n ) => {\n try {\n // INTERNAL OPTIMIZATION: We fetch the RAW current state from the vault\n // without cloning it. Since we are about to produce a new IMMUTABLE state\n // using setInPath (which does structural cloning), this is safe and\n // avoiding a full deepClone of the entire tree on every tiny action\n // results in 100x performance in loops.\n const currentState = store.get(key, undefined, { bypassClone: true });\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n _op: op || (options as any)._op || \"set\",\n _path: path,\n } as any);\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // Pre-create update function\n const update = (val: any, op?: string) => {\n commit(val, false, true, op);\n };\n\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n // --- Meta-Operations (Fast path) ---\n if (prop === \"_val\") return currentVal;\n if (prop === \"_set\")\n return (val: any) => {\n commit(val, true, false, \"_set\");\n };\n if (prop === \"_patch\")\n return (val: any) => {\n commit(val, false, false, \"_patch\");\n };\n if (prop === \"__actions__\") return (options as any).actions;\n\n // Handle plugin-provided operations (e.g., _persist)\n const pluginOps = store.getPluginOps(key, options);\n if (prop in pluginOps) return pluginOps[prop];\n\n // Type check once for this level\n const valType = typeof currentVal;\n const isArray = Array.isArray(currentVal);\n\n // --- Number Operations (Optimized with cached functions) ---\n if (valType === \"number\") {\n switch (prop) {\n case \"_increment\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_increment\");\n };\n case \"_decrement\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_decrement\");\n };\n case \"_add\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_add\");\n };\n case \"_subtract\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_subtract\");\n };\n case \"_multiply\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal * amount, \"_multiply\");\n };\n case \"_divide\":\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal / amount, \"_divide\");\n };\n }\n }\n\n // --- Array Operations (Optimized with minimal allocations) ---\n if (isArray) {\n switch (prop) {\n case \"_push\":\n return (item: any) => {\n // Manual copy instead of spread for large arrays\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < len; i++) newArr[i] = currentVal[i];\n newArr[len] = item;\n update(newArr, \"_push\");\n };\n case \"_pop\":\n return () => update(currentVal.slice(0, -1), \"_pop\");\n case \"_shift\":\n return () => update(currentVal.slice(1), \"_shift\");\n case \"_unshift\":\n return (item: any) => {\n // Manual copy for better performance\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n newArr[0] = item;\n for (let i = 0; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_unshift\");\n };\n case \"_filter\":\n return (fn: any) => update(currentVal.filter(fn), \"_filter\");\n case \"_map\":\n return (fn: any) => update(currentVal.map(fn), \"_map\");\n case \"_removeAt\":\n return (index: number) => {\n // Manual filter for single index\n const len = currentVal.length;\n const newArr = new Array(len - 1);\n let j = 0;\n for (let i = 0; i < len; i++) {\n if (i !== index) newArr[j++] = currentVal[i];\n }\n update(newArr, \"_removeAt\");\n };\n case \"_insertAt\":\n return (index: number, item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < index; i++) newArr[i] = currentVal[i];\n newArr[index] = item;\n for (let i = index; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_insertAt\");\n };\n }\n }\n\n // --- String Operations ---\n if (valType === \"string\") {\n switch (prop) {\n case \"_append\":\n return (str: string) => update(currentVal + str, \"_append\");\n case \"_prepend\":\n return (str: string) => update(str + currentVal, \"_prepend\");\n case \"_uppercase\":\n return () => update(currentVal.toUpperCase(), \"_uppercase\");\n case \"_lowercase\":\n return () => update(currentVal.toLowerCase(), \"_lowercase\");\n case \"_trim\":\n return () => update(currentVal.trim(), \"_trim\");\n }\n }\n\n // --- Boolean Operations ---\n if (valType === \"boolean\") {\n if (prop === \"_toggle\") {\n return () => update(!currentVal, \"_toggle\");\n }\n }\n\n // --- Object Operations ---\n if (currentVal !== null && valType === \"object\" && !isArray) {\n if (prop === \"_merge\") {\n return (obj: any) => {\n // Object.assign faster than spread for merge\n const merged = Object.assign({}, currentVal, obj);\n update(merged, \"_merge\");\n };\n }\n if (prop === \"_delete\") {\n return (keyToDel: string) => {\n // Only copy if key exists\n if (!(keyToDel in currentVal)) return;\n const keys = Object.keys(currentVal);\n const next: any = {};\n for (const k of keys) {\n if (k !== keyToDel) next[k] = currentVal[k];\n }\n update(next, \"_delete\");\n };\n }\n }\n\n // Recursive step: create a new proxy for the child property\n // Use cached path\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n const newPath = getCachedPath(path, prop);\n return createDeepProxy(key, newPath, nextVal, options);\n },\n apply(_target, _thisArg, args) {\n if (typeof currentVal === \"function\") {\n return currentVal(...args);\n }\n console.warn(\n `[FlowProxy] Attempted to call a non-function value at path: ${path.join(\".\")}`,\n );\n },\n }) as unknown as TypeAwareOps<T, A>;\n}\n\n/**\n * Immutable update utility that sets a value at a specific path within an object/array.\n */\nexport function setInPath(obj: any, path: string[], value: any): any {\n return setInPathRecursive(obj, path, value, 0);\n}\n\nfunction setInPathRecursive(\n obj: any,\n path: string[],\n value: any,\n index: number,\n): any {\n if (index === path.length) return value;\n\n const head = path[index];\n\n if (Array.isArray(obj)) {\n const i = parseInt(head, 10);\n if (isNaN(i) || i < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n\n const len = obj.length;\n const newArr = new Array(Math.max(len, i + 1));\n\n // Fast copy with check for modified index\n for (let j = 0; j < newArr.length; j++) {\n if (j === i) {\n newArr[j] = setInPathRecursive(obj[j], path, value, index + 1);\n } else {\n newArr[j] = j < len ? obj[j] : undefined;\n }\n }\n return newArr;\n }\n\n // Object path\n const currentObj = obj ?? {};\n const keys = Object.keys(currentObj);\n const result: any = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result[key] =\n key === head\n ? setInPathRecursive(currentObj[key], path, value, index + 1)\n : currentObj[key];\n }\n\n if (!(head in currentObj)) {\n result[head] = setInPathRecursive(undefined, path, value, index + 1);\n }\n\n return result;\n}\n\n/**\n * Access utility to get a value at a specific path.\n */\nfunction getInPath(obj: any, path: string[]): any {\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (current === null || current === undefined) return undefined;\n current = current[path[i]];\n }\n return current;\n}\n"],"names":["store"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\n\n// Path cache to avoid repeated array allocations\nconst pathCache = new WeakMap<string[], Map<string, string[]>>();\n\nfunction getCachedPath(path: string[], prop: string): string[] {\n let cache = pathCache.get(path);\n if (!cache) {\n cache = new Map();\n pathCache.set(path, cache);\n }\n\n let cached = cache.get(prop);\n if (!cached) {\n cached = [...path, prop];\n cache.set(prop, cached);\n }\n return cached;\n}\n\n/**\n * Creates a deep proxy that provides type-specific atomic operations for a flow.\n * The proxy tracks its path within the state tree and maps access to specific update logic.\n *\n * Reduced allocations, cached operations\n */\nexport function createDeepProxy<T = any, A = Record<string, any>>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T, A> {\n // Pre-bind commit function to avoid recreation\n const commit = (\n val: any,\n forceful: boolean,\n skipEquality = false,\n op?: string,\n ) => {\n try {\n // INTERNAL OPTIMIZATION: We fetch the RAW current state from the vault\n // without cloning it. Since we are about to produce a new IMMUTABLE state\n // using setInPath (which does structural cloning), this is safe and\n // avoiding a full deepClone of the entire tree on every tiny action\n // results in 100x performance in loops.\n const currentState = store.get(key, undefined, { bypassClone: true });\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n _op: op || (options as any)._op || \"set\",\n _path: path,\n } as any);\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // Pre-create update function\n const update = (val: any, op?: string) => {\n commit(val, false, true, op);\n };\n\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n // --- Meta-Operations (Fast path) ---\n if (prop === \"_val\") return currentVal;\n if (prop === \"_set\")\n return (val: any) => {\n commit(val, true, false, \"_set\");\n };\n if (prop === \"_patch\")\n return (val: any) => {\n commit(val, false, false, \"_patch\");\n };\n if (prop === \"__actions__\") return (options as any).actions;\n if (prop === \"_undo\") return () => store.undo(key);\n if (prop === \"_redo\") return () => store.redo(key);\n if (prop === \"_canUndo\") return (store.getHistory(key)?.length || 0) > 1;\n if (prop === \"_canRedo\")\n return (store.getRedoStack(key)?.length || 0) > 0;\n if (prop === \"_history\") return store.getHistory(key);\n\n // Handle plugin-provided operations (e.g., _persist)\n const pluginOps = store.getPluginOps(key, options);\n if (prop in pluginOps) return pluginOps[prop];\n\n // Type check once for this level\n const valType = typeof currentVal;\n const isArray = Array.isArray(currentVal);\n\n // --- Number Operations (Optimized with cached functions) ---\n if (valType === \"number\") {\n switch (prop) {\n case \"_increment\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_increment\");\n };\n case \"_decrement\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_decrement\");\n };\n case \"_add\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_add\");\n };\n case \"_subtract\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_subtract\");\n };\n case \"_multiply\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal * amount, \"_multiply\");\n };\n case \"_divide\":\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal / amount, \"_divide\");\n };\n }\n }\n\n // --- Array Operations (Optimized with minimal allocations) ---\n if (isArray) {\n switch (prop) {\n case \"_push\":\n return (item: any) => {\n // Manual copy instead of spread for large arrays\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < len; i++) newArr[i] = currentVal[i];\n newArr[len] = item;\n update(newArr, \"_push\");\n };\n case \"_pop\":\n return () => update(currentVal.slice(0, -1), \"_pop\");\n case \"_shift\":\n return () => update(currentVal.slice(1), \"_shift\");\n case \"_unshift\":\n return (item: any) => {\n // Manual copy for better performance\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n newArr[0] = item;\n for (let i = 0; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_unshift\");\n };\n case \"_filter\":\n return (fn: any) => update(currentVal.filter(fn), \"_filter\");\n case \"_map\":\n return (fn: any) => update(currentVal.map(fn), \"_map\");\n case \"_removeAt\":\n return (index: number) => {\n // Manual filter for single index\n const len = currentVal.length;\n const newArr = new Array(len - 1);\n let j = 0;\n for (let i = 0; i < len; i++) {\n if (i !== index) newArr[j++] = currentVal[i];\n }\n update(newArr, \"_removeAt\");\n };\n case \"_insertAt\":\n return (index: number, item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < index; i++) newArr[i] = currentVal[i];\n newArr[index] = item;\n for (let i = index; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_insertAt\");\n };\n }\n }\n\n // --- String Operations ---\n if (valType === \"string\") {\n switch (prop) {\n case \"_append\":\n return (str: string) => update(currentVal + str, \"_append\");\n case \"_prepend\":\n return (str: string) => update(str + currentVal, \"_prepend\");\n case \"_uppercase\":\n return () => update(currentVal.toUpperCase(), \"_uppercase\");\n case \"_lowercase\":\n return () => update(currentVal.toLowerCase(), \"_lowercase\");\n case \"_trim\":\n return () => update(currentVal.trim(), \"_trim\");\n }\n }\n\n // --- Boolean Operations ---\n if (valType === \"boolean\") {\n if (prop === \"_toggle\") {\n return () => update(!currentVal, \"_toggle\");\n }\n }\n\n // --- Object Operations ---\n if (currentVal !== null && valType === \"object\" && !isArray) {\n if (prop === \"_merge\") {\n return (obj: any) => {\n // Object.assign faster than spread for merge\n const merged = Object.assign({}, currentVal, obj);\n update(merged, \"_merge\");\n };\n }\n if (prop === \"_delete\") {\n return (keyToDel: string) => {\n // Only copy if key exists\n if (!(keyToDel in currentVal)) return;\n const keys = Object.keys(currentVal);\n const next: any = {};\n for (const k of keys) {\n if (k !== keyToDel) next[k] = currentVal[k];\n }\n update(next, \"_delete\");\n };\n }\n }\n\n // Recursive step: create a new proxy for the child property\n // Use cached path\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n const newPath = getCachedPath(path, prop);\n return createDeepProxy(key, newPath, nextVal, options);\n },\n apply(_target, _thisArg, args) {\n if (typeof currentVal === \"function\") {\n return currentVal(...args);\n }\n console.warn(\n `[FlowProxy] Attempted to call a non-function value at path: ${path.join(\".\")}`,\n );\n },\n }) as unknown as TypeAwareOps<T, A>;\n}\n\n/**\n * Immutable update utility that sets a value at a specific path within an object/array.\n */\nexport function setInPath(obj: any, path: string[], value: any): any {\n return setInPathRecursive(obj, path, value, 0);\n}\n\nfunction setInPathRecursive(\n obj: any,\n path: string[],\n value: any,\n index: number,\n): any {\n if (index === path.length) return value;\n\n const head = path[index];\n\n if (Array.isArray(obj)) {\n const i = parseInt(head, 10);\n if (isNaN(i) || i < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n\n const len = obj.length;\n const newArr = new Array(Math.max(len, i + 1));\n\n // Fast copy with check for modified index\n for (let j = 0; j < newArr.length; j++) {\n if (j === i) {\n newArr[j] = setInPathRecursive(obj[j], path, value, index + 1);\n } else {\n newArr[j] = j < len ? obj[j] : undefined;\n }\n }\n return newArr;\n }\n\n // Object path\n const currentObj = obj ?? {};\n const keys = Object.keys(currentObj);\n const result: any = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result[key] =\n key === head\n ? setInPathRecursive(currentObj[key], path, value, index + 1)\n : currentObj[key];\n }\n\n if (!(head in currentObj)) {\n result[head] = setInPathRecursive(undefined, path, value, index + 1);\n }\n\n return result;\n}\n\n/**\n * Access utility to get a value at a specific path.\n */\nfunction getInPath(obj: any, path: string[]): any {\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (current === null || current === undefined) return undefined;\n current = current[path[i]];\n }\n return current;\n}\n"],"names":["store"],"mappings":"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"}
|
|
@@ -26,7 +26,6 @@ const MentalMap = ({ snapshot, onClose, onMinimizeChange, minimizedSide = "right
|
|
|
26
26
|
const [overlayFlow, setOverlayFlow] = useState(null);
|
|
27
27
|
const [searchQuery, setSearchQuery] = useState("");
|
|
28
28
|
const [isMinimized, setIsMinimized] = useState(false);
|
|
29
|
-
const [isFullscreen, setIsFullscreen] = useState(false);
|
|
30
29
|
const [isLedgerVisible, setIsLedgerVisible] = useState(true);
|
|
31
30
|
const [viewMode, setViewMode] = useState("live");
|
|
32
31
|
useEffect(() => {
|
|
@@ -163,7 +162,7 @@ const MentalMap = ({ snapshot, onClose, onMinimizeChange, minimizedSide = "right
|
|
|
163
162
|
}
|
|
164
163
|
});
|
|
165
164
|
// --- Node ACTORS (Left) ---
|
|
166
|
-
namedActors.forEach((actor,
|
|
165
|
+
namedActors.forEach((actor, _) => {
|
|
167
166
|
const actorId = `actor-${actor.label}-${key}`;
|
|
168
167
|
const isActorHot = isFlowHot && activity.actor === actor.label;
|
|
169
168
|
newNodes.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MentalMap.js","sources":["../../../../src/devtools/MentalMap.tsx"],"sourcesContent":["import { useMemo, useState, useEffect, useRef } from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n Edge,\n Node,\n useNodesState,\n useEdgesState,\n ConnectionLineType,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n Database,\n Search,\n X,\n RefreshCcw,\n Maximize2,\n Cpu,\n Minimize2,\n PanelRightClose,\n PanelRight,\n Activity,\n GitBranch,\n Network,\n} from \"lucide-react\";\nimport \"./MentalMap.css\";\nimport { MMapProps } from \"./mmap/MMapTypes\";\nimport { FlowNode, ActorNode, ListenerNode } from \"./mmap/components/FlowNodes\";\nimport { FiberEdge } from \"./MapUtils\";\nimport { MMapSidebar } from \"./mmap/components/MMapSidebar\";\nimport { MMapLedger } from \"./mmap/components/MMapLedger\";\nimport { FlowGenealogy } from \"./mmap/components/FlowGenealogy\";\n\nconst nodeTypes = {\n flow: FlowNode,\n actor: ActorNode,\n listener: ListenerNode,\n};\n\nconst edgeTypes = {\n fiber: FiberEdge,\n};\n\nexport const MentalMap = ({\n snapshot,\n onClose,\n onMinimizeChange,\n minimizedSide = \"right\",\n setIsOpen,\n}: MMapProps) => {\n const [nodes, setNodes, onNodesChange] = useNodesState<Node>([]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<Edge>([]);\n const [selectedFlow, setSelectedFlow] = useState<string | null>(null);\n const [overlayFlow, setOverlayFlow] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isMinimized, setIsMinimized] = useState(false);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [isLedgerVisible, setIsLedgerVisible] = useState(true);\n const [viewMode, setViewMode] = useState<\"live\" | \"genealogy\">(\"live\");\n\n useEffect(() => {\n onMinimizeChange?.(isMinimized);\n }, [isMinimized, onMinimizeChange]);\n\n // Logic pour le drag du logo réduit\n const [minimizedPos, setMinimizedPos] = useState({\n x: minimizedSide === \"right\" ? window.innerWidth - 100 : 40,\n y: window.innerHeight - 100,\n });\n const [isDraggingLogo, setIsDraggingLogo] = useState(false);\n const wasDragged = useRef(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n\n const handleLogoMouseDown = (e: React.MouseEvent) => {\n if (!isMinimized) return;\n setIsDraggingLogo(true);\n wasDragged.current = false;\n setDragOffset({\n x: e.clientX - minimizedPos.x,\n y: e.clientY - minimizedPos.y,\n });\n };\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (isDraggingLogo) {\n wasDragged.current = true;\n setMinimizedPos({\n x: e.clientX - dragOffset.x,\n y: e.clientY - dragOffset.y,\n });\n }\n };\n const handleMouseUp = () => {\n setTimeout(() => {\n setIsDraggingLogo(false);\n }, 0);\n };\n\n if (isDraggingLogo) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDraggingLogo, dragOffset]);\n\n const [activeFlows, setActiveFlows] = useState<Set<string>>(new Set());\n\n // Detect recent activity\n const recentActivity = useMemo(() => {\n const now = Date.now();\n const activityMap: Record<\n string,\n { active: boolean; actor?: string; type?: string }\n > = {};\n\n Object.entries(snapshot).forEach(([key, data]) => {\n const traces = data.meta.traces || [];\n const lastTrace = traces[traces.length - 1];\n if (lastTrace && now - lastTrace.timestamp < 1000) {\n activityMap[key] = {\n active: true,\n actor: lastTrace.actor,\n type: lastTrace.type,\n };\n }\n });\n return activityMap;\n }, [snapshot]);\n\n useEffect(() => {\n const active = new Set<string>();\n Object.keys(recentActivity).forEach((key) => active.add(key));\n setActiveFlows(active);\n }, [recentActivity]);\n\n const filteredFlows = useMemo(() => {\n const query = searchQuery.toLowerCase().trim();\n const entries = Object.entries(snapshot);\n if (!query) return entries;\n\n return entries.filter(([key, data]) => {\n if (key.toLowerCase().includes(query)) return true;\n const consumers = data.meta.consumers || [];\n if (consumers.some((c: any) => c.toLowerCase().includes(query)))\n return true;\n try {\n if (JSON.stringify(data.value).toLowerCase().includes(query))\n return true;\n } catch (e) {}\n return false;\n });\n }, [snapshot, searchQuery]);\n\n useEffect(() => {\n if (viewMode !== \"live\") return;\n\n const flowEntries = filteredFlows;\n const newNodes: Node[] = [];\n const newEdges: Edge[] = [];\n\n const actorX = 50;\n const flowX = 500;\n const listenerX = 950;\n\n let flowY = 100;\n let actorY = 100;\n let listenerY = 100;\n\n flowEntries.forEach(([key, data]) => {\n const activity = recentActivity[key];\n const isFlowHot = !!activity;\n\n // --- Node FLOW (Center) ---\n newNodes.push({\n id: `flow-${key}`,\n type: \"flow\",\n position: { x: flowX, y: flowY },\n data: {\n label: key.toUpperCase(),\n value: data.value,\n isActive: selectedFlow === key,\n isHot: isFlowHot,\n onClick: () => setOverlayFlow(key),\n },\n });\n\n // Split Listeners: Named (Actors) vs Anonymous (UI)\n const rawListeners = data.meta.listeners || [];\n const namedActors: any[] = [];\n const uiListeners: any[] = [];\n\n rawListeners.forEach((l: any) => {\n const isUI =\n l.label.startsWith(\"useFlow(\") || l.label === \"Anonymous Subscriber\";\n if (isUI) uiListeners.push(l);\n else namedActors.push(l);\n });\n\n // Mix in the explicit consumers (those who wrote in the past)\n const explicitConsumers = data.meta.consumers || [];\n explicitConsumers.forEach((name: string) => {\n if (!namedActors.find((a) => a.label === name)) {\n namedActors.push({ label: name, isExplicit: true });\n }\n });\n\n // --- Node ACTORS (Left) ---\n namedActors.forEach((actor, i) => {\n const actorId = `actor-${actor.label}-${key}`;\n const isActorHot = isFlowHot && activity.actor === actor.label;\n\n newNodes.push({\n id: actorId,\n type: \"actor\",\n position: { x: actorX, y: actorY },\n data: {\n label: actor.label,\n isActive: selectedFlow === key,\n isHot: isActorHot,\n },\n });\n\n newEdges.push({\n id: `edge-${actor.label}-${key}`,\n source: actorId,\n target: `flow-${key}`,\n targetHandle: \"actor-target\",\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isActorHot ? \"#fbbf24\" : \"#a855f7\",\n strokeWidth: isActorHot ? 4 : 2,\n },\n });\n\n actorY += 120;\n });\n\n // --- Node UI LISTENERS (Right) ---\n // Group UI Listeners by label to avoid redundancy\n const groupedUI = uiListeners.reduce((acc: any, curr: any) => {\n if (!acc[curr.label]) {\n acc[curr.label] = { ...curr, count: 0 };\n }\n acc[curr.label].count += 1;\n return acc;\n }, {}); \n\n Object.values(groupedUI).forEach((group: any, _: number) => {\n const listenerId = `listener-${key}-${group.label}`;\n const isListenerHot =\n isFlowHot && (activity.type === \"read\" || activity.type === \"write\");\n\n newNodes.push({\n id: listenerId,\n type: \"listener\",\n position: { x: listenerX, y: listenerY },\n data: {\n label:\n group.count > 1\n ? `${group.label} (x${group.count})`\n : group.label,\n isActive: selectedFlow === key,\n isHot: isListenerHot,\n },\n });\n\n newEdges.push({\n id: `edge-flow-listener-${key}-${group.label}`,\n source: `flow-${key}`,\n sourceHandle: \"listener-source\",\n target: listenerId,\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isListenerHot ? \"#fbbf24\" : \"#00d4ff\",\n strokeWidth: isListenerHot ? 3 : 2,\n },\n });\n\n listenerY += 100;\n });\n\n const maxRowHeight = Math.max(\n 250,\n namedActors.length * 120,\n Object.keys(groupedUI).length * 100,\n );\n flowY += maxRowHeight + 50;\n if (actorY < flowY) actorY = flowY;\n if (listenerY < flowY) listenerY = flowY;\n });\n\n setNodes(newNodes);\n setEdges(newEdges);\n }, [\n filteredFlows,\n selectedFlow,\n viewMode,\n recentActivity,\n setNodes,\n setEdges,\n ]);\n\n return (\n <motion.div\n className=\"mental-map-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n {/* ... reste du header identique ... */}\n <div\n className={`mental-map-container ${isMinimized ? \"minimized\" : \"\"}`}\n style={\n isMinimized\n ? {\n left: minimizedPos.x,\n top: minimizedPos.y,\n bottom: \"auto\",\n right: \"auto\",\n }\n : {}\n }\n onMouseDown={handleLogoMouseDown}\n onClick={() => {\n if (!wasDragged.current && isMinimized) setIsMinimized(false);\n }}\n >\n <div\n className={`m2-minimized-logo ${activeFlows.size > 0 ? \"pulse\" : \"\"}`}\n >\n F<span className=\"m2-minimized-badge\">FTE</span>\n </div>\n\n <header className=\"m2-header\">\n <div className=\"m2-logo-group\">\n <div className=\"m2-logo-icon\">\n <Cpu color=\"white\" size={28} />\n </div>\n <div className=\"m2-header-titles\">\n <h1>Mental Map & Trace Engine</h1>\n <div className=\"m2-header-meta\">\n <span className=\"m2-engine-badge\">FM2/FTE5</span>\n <span style={{ fontSize: 10, opacity: 0.5, fontWeight: 700 }}>\n NEHONIX FCE\n </span>\n </div>\n </div>\n </div>\n <div className=\"m2-controls\">\n <div\n className=\"m2-view-switcher\"\n style={{ display: \"flex\", gap: 8, marginRight: 16 }}\n >\n <button\n className={`view-toggle-btn ${viewMode === \"live\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"live\")}\n >\n <Network size={16} /> Live Graph\n </button>\n <button\n className={`view-toggle-btn ${viewMode === \"genealogy\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"genealogy\")}\n >\n <GitBranch size={16} /> Genealogy\n </button>\n </div>\n <div className=\"m2-search-wrapper\">\n <Search className=\"m2-search-icon\" size={18} />\n <input\n type=\"text\"\n className=\"m2-search-input\"\n placeholder=\"Search flows, actors or data patterns...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n <div className=\"m2-action-btns\">\n <button\n className=\"m2-icon-btn\"\n title=\"Refresh\"\n onClick={() => window.location.reload()}\n >\n <RefreshCcw size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Minimize\"\n style={{color: \"blue\"}}\n\n onClick={(e) => {\n e.stopPropagation();\n setIsMinimized(true);\n setIsOpen(false);\n }}\n >\n <Minimize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Fullscreen\"\n onClick={() => {\n if (!document.fullscreenElement)\n document.documentElement.requestFullscreen();\n else document.exitFullscreen();\n }}\n >\n <Maximize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Toggle Ledger\"\n onClick={() => setIsLedgerVisible(!isLedgerVisible)}\n >\n {isLedgerVisible ? (\n <PanelRightClose size={20} />\n ) : (\n <PanelRight size={20} />\n )}\n </button>\n <button\n className=\"m2-icon-btn m2-close-btn force-visible\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n title=\"Close\"\n >\n <X size={24} />\n </button>\n </div>\n </div>\n </header>\n\n <div className=\"m2-layout\">\n <MMapSidebar\n filteredFlows={filteredFlows}\n selectedFlow={selectedFlow}\n setSelectedFlow={setSelectedFlow}\n activeFlows={activeFlows}\n />\n <main className=\"m2-canvas\">\n {viewMode === \"live\" ? (\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n connectionLineType={ConnectionLineType.Bezier}\n onNodeClick={(_, node) => {\n if (node.type === \"flow\")\n setOverlayFlow(node.id.replace(\"flow-\", \"\"));\n }}\n fitView\n colorMode=\"dark\"\n >\n <Background color=\"#1e293b\" gap={20} />{\" \"}\n <Controls showInteractive={false} />\n </ReactFlow>\n ) : (\n <FlowGenealogy\n snapshot={snapshot}\n onSelectFlow={setOverlayFlow}\n />\n )}\n </main>\n <MMapLedger\n snapshot={snapshot}\n selectedFlow={selectedFlow}\n isLedgerVisible={isLedgerVisible}\n />\n </div>\n\n <AnimatePresence>\n {overlayFlow && (\n <motion.div\n className=\"m2-flow-overlay-backdrop\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setOverlayFlow(null)}\n >\n <div\n className=\"m2-flow-overlay\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"m2-overlay-header\">\n <div className=\"m2-overlay-title\">\n <Database color=\"#00d4ff\" size={24} />\n <h2>{overlayFlow} Activity</h2>\n </div>\n <button\n className=\"m2-icon-btn m2-close-btn\"\n onClick={() => setOverlayFlow(null)}\n >\n <X size={20} />\n </button>\n </div>\n <div className=\"m2-overlay-content\">\n {snapshot[overlayFlow].meta.traces.length === 0 ? (\n <div className=\"m2-empty-state\">\n <Activity size={48} className=\"m2-empty-icon\" />\n <h3>No Activity Detected</h3>\n <p>This flow hasn't emitted any events yet.</p>\n </div>\n ) : (\n <div className=\"m2-trace-list\">\n {[...snapshot[overlayFlow].meta.traces]\n .reverse()\n .map((trace, i) => (\n <div\n key={i}\n className={`m2-trace-card ${trace.type === \"reset\" ? \"reset\" : \"\"}`}\n >\n <div className=\"m2-trace-dot\" />\n <div className=\"m2-trace-header\">\n <span className=\"m2-trace-actor-lbl\">\n {trace.actor}\n </span>\n <span className=\"m2-trace-ts\">\n {new Date(trace.timestamp).toLocaleTimeString()}\n </span>\n </div>\n <div className=\"m2-trace-op-info\">\n <span className=\"m2-op-type\">{trace.type}</span>\n </div>\n <div className=\"m2-trace-data\">\n <pre className=\"m2-trace-json\">\n {JSON.stringify(trace.value, null, 2)}\n </pre>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </motion.div>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MentalMap.js","sources":["../../../../src/devtools/MentalMap.tsx"],"sourcesContent":["import { useMemo, useState, useEffect, useRef } from \"react\";\nimport {\n ReactFlow,\n Background,\n Controls,\n Edge,\n Node,\n useNodesState,\n useEdgesState,\n ConnectionLineType,\n} from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n Database,\n Search,\n X,\n RefreshCcw,\n Maximize2,\n Cpu,\n Minimize2,\n PanelRightClose,\n PanelRight,\n Activity,\n GitBranch,\n Network,\n} from \"lucide-react\";\nimport \"./MentalMap.css\";\nimport { MMapProps } from \"./mmap/MMapTypes\";\nimport { FlowNode, ActorNode, ListenerNode } from \"./mmap/components/FlowNodes\";\nimport { FiberEdge } from \"./MapUtils\";\nimport { MMapSidebar } from \"./mmap/components/MMapSidebar\";\nimport { MMapLedger } from \"./mmap/components/MMapLedger\";\nimport { FlowGenealogy } from \"./mmap/components/FlowGenealogy\";\n\nconst nodeTypes = {\n flow: FlowNode,\n actor: ActorNode,\n listener: ListenerNode,\n};\n\nconst edgeTypes = {\n fiber: FiberEdge,\n};\n\nexport const MentalMap = ({\n snapshot,\n onClose,\n onMinimizeChange,\n minimizedSide = \"right\",\n setIsOpen,\n}: MMapProps) => {\n const [nodes, setNodes, onNodesChange] = useNodesState<Node>([]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<Edge>([]);\n const [selectedFlow, setSelectedFlow] = useState<string | null>(null);\n const [overlayFlow, setOverlayFlow] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isMinimized, setIsMinimized] = useState(false);\n const [isLedgerVisible, setIsLedgerVisible] = useState(true);\n const [viewMode, setViewMode] = useState<\"live\" | \"genealogy\">(\"live\");\n\n useEffect(() => {\n onMinimizeChange?.(isMinimized);\n }, [isMinimized, onMinimizeChange]);\n\n // Logic pour le drag du logo réduit\n const [minimizedPos, setMinimizedPos] = useState({\n x: minimizedSide === \"right\" ? window.innerWidth - 100 : 40,\n y: window.innerHeight - 100,\n });\n const [isDraggingLogo, setIsDraggingLogo] = useState(false);\n const wasDragged = useRef(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n\n const handleLogoMouseDown = (e: React.MouseEvent) => {\n if (!isMinimized) return;\n setIsDraggingLogo(true);\n wasDragged.current = false;\n setDragOffset({\n x: e.clientX - minimizedPos.x,\n y: e.clientY - minimizedPos.y,\n });\n };\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (isDraggingLogo) {\n wasDragged.current = true;\n setMinimizedPos({\n x: e.clientX - dragOffset.x,\n y: e.clientY - dragOffset.y,\n });\n }\n };\n const handleMouseUp = () => {\n setTimeout(() => {\n setIsDraggingLogo(false);\n }, 0);\n };\n\n if (isDraggingLogo) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [isDraggingLogo, dragOffset]);\n\n const [activeFlows, setActiveFlows] = useState<Set<string>>(new Set());\n\n // Detect recent activity\n const recentActivity = useMemo(() => {\n const now = Date.now();\n const activityMap: Record<\n string,\n { active: boolean; actor?: string; type?: string }\n > = {};\n\n Object.entries(snapshot).forEach(([key, data]) => {\n const traces = data.meta.traces || [];\n const lastTrace = traces[traces.length - 1];\n if (lastTrace && now - lastTrace.timestamp < 1000) {\n activityMap[key] = {\n active: true,\n actor: lastTrace.actor,\n type: lastTrace.type,\n };\n }\n });\n return activityMap;\n }, [snapshot]);\n\n useEffect(() => {\n const active = new Set<string>();\n Object.keys(recentActivity).forEach((key) => active.add(key));\n setActiveFlows(active);\n }, [recentActivity]);\n\n const filteredFlows = useMemo(() => {\n const query = searchQuery.toLowerCase().trim();\n const entries = Object.entries(snapshot);\n if (!query) return entries;\n\n return entries.filter(([key, data]) => {\n if (key.toLowerCase().includes(query)) return true;\n const consumers = data.meta.consumers || [];\n if (consumers.some((c: any) => c.toLowerCase().includes(query)))\n return true;\n try {\n if (JSON.stringify(data.value).toLowerCase().includes(query))\n return true;\n } catch (e) {}\n return false;\n });\n }, [snapshot, searchQuery]);\n\n useEffect(() => {\n if (viewMode !== \"live\") return;\n\n const flowEntries = filteredFlows;\n const newNodes: Node[] = [];\n const newEdges: Edge[] = [];\n\n const actorX = 50;\n const flowX = 500;\n const listenerX = 950;\n\n let flowY = 100;\n let actorY = 100;\n let listenerY = 100;\n\n flowEntries.forEach(([key, data]) => {\n const activity = recentActivity[key];\n const isFlowHot = !!activity;\n\n // --- Node FLOW (Center) ---\n newNodes.push({\n id: `flow-${key}`,\n type: \"flow\",\n position: { x: flowX, y: flowY },\n data: {\n label: key.toUpperCase(),\n value: data.value,\n isActive: selectedFlow === key,\n isHot: isFlowHot,\n onClick: () => setOverlayFlow(key),\n },\n });\n\n // Split Listeners: Named (Actors) vs Anonymous (UI)\n const rawListeners = data.meta.listeners || [];\n const namedActors: any[] = [];\n const uiListeners: any[] = [];\n\n rawListeners.forEach((l: any) => {\n const isUI =\n l.label.startsWith(\"useFlow(\") || l.label === \"Anonymous Subscriber\";\n if (isUI) uiListeners.push(l);\n else namedActors.push(l);\n });\n\n // Mix in the explicit consumers (those who wrote in the past)\n const explicitConsumers = data.meta.consumers || [];\n explicitConsumers.forEach((name: string) => {\n if (!namedActors.find((a) => a.label === name)) {\n namedActors.push({ label: name, isExplicit: true });\n }\n });\n\n // --- Node ACTORS (Left) ---\n namedActors.forEach((actor, _) => {\n const actorId = `actor-${actor.label}-${key}`;\n const isActorHot = isFlowHot && activity.actor === actor.label;\n\n newNodes.push({\n id: actorId,\n type: \"actor\",\n position: { x: actorX, y: actorY },\n data: {\n label: actor.label,\n isActive: selectedFlow === key,\n isHot: isActorHot,\n },\n });\n\n newEdges.push({\n id: `edge-${actor.label}-${key}`,\n source: actorId,\n target: `flow-${key}`,\n targetHandle: \"actor-target\",\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isActorHot ? \"#fbbf24\" : \"#a855f7\",\n strokeWidth: isActorHot ? 4 : 2,\n },\n });\n\n actorY += 120;\n });\n\n // --- Node UI LISTENERS (Right) ---\n // Group UI Listeners by label to avoid redundancy\n const groupedUI = uiListeners.reduce((acc: any, curr: any) => {\n if (!acc[curr.label]) {\n acc[curr.label] = { ...curr, count: 0 };\n }\n acc[curr.label].count += 1;\n return acc;\n }, {}); \n\n Object.values(groupedUI).forEach((group: any, _: number) => {\n const listenerId = `listener-${key}-${group.label}`;\n const isListenerHot =\n isFlowHot && (activity.type === \"read\" || activity.type === \"write\");\n\n newNodes.push({\n id: listenerId,\n type: \"listener\",\n position: { x: listenerX, y: listenerY },\n data: {\n label:\n group.count > 1\n ? `${group.label} (x${group.count})`\n : group.label,\n isActive: selectedFlow === key,\n isHot: isListenerHot,\n },\n });\n\n newEdges.push({\n id: `edge-flow-listener-${key}-${group.label}`,\n source: `flow-${key}`,\n sourceHandle: \"listener-source\",\n target: listenerId,\n type: \"fiber\",\n animated: true,\n style: {\n stroke: isListenerHot ? \"#fbbf24\" : \"#00d4ff\",\n strokeWidth: isListenerHot ? 3 : 2,\n },\n });\n\n listenerY += 100;\n });\n\n const maxRowHeight = Math.max(\n 250,\n namedActors.length * 120,\n Object.keys(groupedUI).length * 100,\n );\n flowY += maxRowHeight + 50;\n if (actorY < flowY) actorY = flowY;\n if (listenerY < flowY) listenerY = flowY;\n });\n\n setNodes(newNodes);\n setEdges(newEdges);\n }, [\n filteredFlows,\n selectedFlow,\n viewMode,\n recentActivity,\n setNodes,\n setEdges,\n ]);\n\n return (\n <motion.div\n className=\"mental-map-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n >\n {/* ... reste du header identique ... */}\n <div\n className={`mental-map-container ${isMinimized ? \"minimized\" : \"\"}`}\n style={\n isMinimized\n ? {\n left: minimizedPos.x,\n top: minimizedPos.y,\n bottom: \"auto\",\n right: \"auto\",\n }\n : {}\n }\n onMouseDown={handleLogoMouseDown}\n onClick={() => {\n if (!wasDragged.current && isMinimized) setIsMinimized(false);\n }}\n >\n <div\n className={`m2-minimized-logo ${activeFlows.size > 0 ? \"pulse\" : \"\"}`}\n >\n F<span className=\"m2-minimized-badge\">FTE</span>\n </div>\n\n <header className=\"m2-header\">\n <div className=\"m2-logo-group\">\n <div className=\"m2-logo-icon\">\n <Cpu color=\"white\" size={28} />\n </div>\n <div className=\"m2-header-titles\">\n <h1>Mental Map & Trace Engine</h1>\n <div className=\"m2-header-meta\">\n <span className=\"m2-engine-badge\">FM2/FTE5</span>\n <span style={{ fontSize: 10, opacity: 0.5, fontWeight: 700 }}>\n NEHONIX FCE\n </span>\n </div>\n </div>\n </div>\n <div className=\"m2-controls\">\n <div\n className=\"m2-view-switcher\"\n style={{ display: \"flex\", gap: 8, marginRight: 16 }}\n >\n <button\n className={`view-toggle-btn ${viewMode === \"live\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"live\")}\n >\n <Network size={16} /> Live Graph\n </button>\n <button\n className={`view-toggle-btn ${viewMode === \"genealogy\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"genealogy\")}\n >\n <GitBranch size={16} /> Genealogy\n </button>\n </div>\n <div className=\"m2-search-wrapper\">\n <Search className=\"m2-search-icon\" size={18} />\n <input\n type=\"text\"\n className=\"m2-search-input\"\n placeholder=\"Search flows, actors or data patterns...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n <div className=\"m2-action-btns\">\n <button\n className=\"m2-icon-btn\"\n title=\"Refresh\"\n onClick={() => window.location.reload()}\n >\n <RefreshCcw size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Minimize\"\n style={{color: \"blue\"}}\n\n onClick={(e) => {\n e.stopPropagation();\n setIsMinimized(true);\n setIsOpen(false);\n }}\n >\n <Minimize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Fullscreen\"\n onClick={() => {\n if (!document.fullscreenElement)\n document.documentElement.requestFullscreen();\n else document.exitFullscreen();\n }}\n >\n <Maximize2 size={20} />\n </button>\n <button\n className=\"m2-icon-btn\"\n title=\"Toggle Ledger\"\n onClick={() => setIsLedgerVisible(!isLedgerVisible)}\n >\n {isLedgerVisible ? (\n <PanelRightClose size={20} />\n ) : (\n <PanelRight size={20} />\n )}\n </button>\n <button\n className=\"m2-icon-btn m2-close-btn force-visible\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n title=\"Close\"\n >\n <X size={24} />\n </button>\n </div>\n </div>\n </header>\n\n <div className=\"m2-layout\">\n <MMapSidebar\n filteredFlows={filteredFlows}\n selectedFlow={selectedFlow}\n setSelectedFlow={setSelectedFlow}\n activeFlows={activeFlows}\n />\n <main className=\"m2-canvas\">\n {viewMode === \"live\" ? (\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n connectionLineType={ConnectionLineType.Bezier}\n onNodeClick={(_, node) => {\n if (node.type === \"flow\")\n setOverlayFlow(node.id.replace(\"flow-\", \"\"));\n }}\n fitView\n colorMode=\"dark\"\n >\n <Background color=\"#1e293b\" gap={20} />{\" \"}\n <Controls showInteractive={false} />\n </ReactFlow>\n ) : (\n <FlowGenealogy\n snapshot={snapshot}\n onSelectFlow={setOverlayFlow}\n />\n )}\n </main>\n <MMapLedger\n snapshot={snapshot}\n selectedFlow={selectedFlow}\n isLedgerVisible={isLedgerVisible}\n />\n </div>\n\n <AnimatePresence>\n {overlayFlow && (\n <motion.div\n className=\"m2-flow-overlay-backdrop\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={() => setOverlayFlow(null)}\n >\n <div\n className=\"m2-flow-overlay\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"m2-overlay-header\">\n <div className=\"m2-overlay-title\">\n <Database color=\"#00d4ff\" size={24} />\n <h2>{overlayFlow} Activity</h2>\n </div>\n <button\n className=\"m2-icon-btn m2-close-btn\"\n onClick={() => setOverlayFlow(null)}\n >\n <X size={20} />\n </button>\n </div>\n <div className=\"m2-overlay-content\">\n {snapshot[overlayFlow].meta.traces.length === 0 ? (\n <div className=\"m2-empty-state\">\n <Activity size={48} className=\"m2-empty-icon\" />\n <h3>No Activity Detected</h3>\n <p>This flow hasn't emitted any events yet.</p>\n </div>\n ) : (\n <div className=\"m2-trace-list\">\n {[...snapshot[overlayFlow].meta.traces]\n .reverse()\n .map((trace, i) => (\n <div\n key={i}\n className={`m2-trace-card ${trace.type === \"reset\" ? \"reset\" : \"\"}`}\n >\n <div className=\"m2-trace-dot\" />\n <div className=\"m2-trace-header\">\n <span className=\"m2-trace-actor-lbl\">\n {trace.actor}\n </span>\n <span className=\"m2-trace-ts\">\n {new Date(trace.timestamp).toLocaleTimeString()}\n </span>\n </div>\n <div className=\"m2-trace-op-info\">\n <span className=\"m2-op-type\">{trace.type}</span>\n </div>\n <div className=\"m2-trace-data\">\n <pre className=\"m2-trace-json\">\n {JSON.stringify(trace.value, null, 2)}\n </pre>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </motion.div>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;;;;AAmCA,MAAM,SAAS,GAAG;AAChB,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,QAAQ,EAAE,YAAY;CACvB;AAED,MAAM,SAAS,GAAG;AAChB,IAAA,KAAK,EAAE,SAAS;CACjB;AAEM,MAAM,SAAS,GAAG,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,aAAa,GAAG,OAAO,EACvB,SAAS,GACC,KAAI;AACd,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,GAAG,aAAa,CAAO,EAAE,CAAC;AAChE,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,GAAG,aAAa,CAAO,EAAE,CAAC;IAChE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IACrE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IACnE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC5D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAuB,MAAM,CAAC;IAEtE,SAAS,CAAC,MAAK;AACb,QAAA,gBAAgB,GAAG,WAAW,CAAC;AACjC,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;;AAGnC,IAAA,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC;AAC/C,QAAA,CAAC,EAAE,aAAa,KAAK,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,GAAG,EAAE;AAC3D,QAAA,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,GAAG;AAC5B,KAAA,CAAC;IACF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC3D,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAChC,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAE5D,IAAA,MAAM,mBAAmB,GAAG,CAAC,CAAmB,KAAI;AAClD,QAAA,IAAI,CAAC,WAAW;YAAE;QAClB,iBAAiB,CAAC,IAAI,CAAC;AACvB,QAAA,UAAU,CAAC,OAAO,GAAG,KAAK;AAC1B,QAAA,aAAa,CAAC;AACZ,YAAA,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;AAC7B,YAAA,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;AAC9B,SAAA,CAAC;AACJ,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,eAAe,GAAG,CAAC,CAAa,KAAI;YACxC,IAAI,cAAc,EAAE;AAClB,gBAAA,UAAU,CAAC,OAAO,GAAG,IAAI;AACzB,gBAAA,eAAe,CAAC;AACd,oBAAA,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC;AAC3B,oBAAA,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC;AAC5B,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC;QACD,MAAM,aAAa,GAAG,MAAK;YACzB,UAAU,CAAC,MAAK;gBACd,iBAAiB,CAAC,KAAK,CAAC;YAC1B,CAAC,EAAE,CAAC,CAAC;AACP,QAAA,CAAC;QAED,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC;AACrD,YAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;QACnD;AACA,QAAA,OAAO,MAAK;AACV,YAAA,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,CAAC;AACxD,YAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC;AACtD,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAEhC,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,EAAE,CAAC;;AAGtE,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,MAAM,WAAW,GAGb,EAAE;AAEN,QAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAI;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;YACrC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,IAAI,SAAS,IAAI,GAAG,GAAG,SAAS,CAAC,SAAS,GAAG,IAAI,EAAE;gBACjD,WAAW,CAAC,GAAG,CAAC,GAAG;AACjB,oBAAA,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,IAAI,EAAE,SAAS,CAAC,IAAI;iBACrB;YACH;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAEd,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU;QAChC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7D,cAAc,CAAC,MAAM,CAAC;AACxB,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AAEpB,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;QACjC,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,OAAO;QAE1B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAI;YACpC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,IAAI;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;AAC3C,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7D,gBAAA,OAAO,IAAI;AACb,YAAA,IAAI;AACF,gBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1D,oBAAA,OAAO,IAAI;YACf;AAAE,YAAA,OAAO,CAAC,EAAE,EAAC;AACb,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE3B,SAAS,CAAC,MAAK;QACb,IAAI,QAAQ,KAAK,MAAM;YAAE;QAEzB,MAAM,WAAW,GAAG,aAAa;QACjC,MAAM,QAAQ,GAAW,EAAE;QAC3B,MAAM,QAAQ,GAAW,EAAE;QAE3B,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,KAAK,GAAG,GAAG;QACjB,MAAM,SAAS,GAAG,GAAG;QAErB,IAAI,KAAK,GAAG,GAAG;QACf,IAAI,MAAM,GAAG,GAAG;QAChB,IAAI,SAAS,GAAG,GAAG;QAEnB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAI;AAClC,YAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ;;YAG5B,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE;AACjB,gBAAA,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;AAChC,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE;oBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,YAAY,KAAK,GAAG;AAC9B,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,OAAO,EAAE,MAAM,cAAc,CAAC,GAAG,CAAC;AACnC,iBAAA;AACF,aAAA,CAAC;;YAGF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;YAC9C,MAAM,WAAW,GAAU,EAAE;YAC7B,MAAM,WAAW,GAAU,EAAE;AAE7B,YAAA,YAAY,CAAC,OAAO,CAAC,CAAC,CAAM,KAAI;AAC9B,gBAAA,MAAM,IAAI,GACR,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,sBAAsB;AACtE,gBAAA,IAAI,IAAI;AAAE,oBAAA,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;;AACxB,oBAAA,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1B,YAAA,CAAC,CAAC;;YAGF,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;AACnD,YAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAY,KAAI;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE;AAC9C,oBAAA,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;gBACrD;AACF,YAAA,CAAC,CAAC;;YAGF,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;gBAC/B,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;gBAC7C,MAAM,UAAU,GAAG,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;gBAE9D,QAAQ,CAAC,IAAI,CAAC;AACZ,oBAAA,EAAE,EAAE,OAAO;AACX,oBAAA,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE;AAClC,oBAAA,IAAI,EAAE;wBACJ,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,QAAQ,EAAE,YAAY,KAAK,GAAG;AAC9B,wBAAA,KAAK,EAAE,UAAU;AAClB,qBAAA;AACF,iBAAA,CAAC;gBAEF,QAAQ,CAAC,IAAI,CAAC;AACZ,oBAAA,EAAE,EAAE,CAAA,KAAA,EAAQ,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;AAChC,oBAAA,MAAM,EAAE,OAAO;oBACf,MAAM,EAAE,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE;AACrB,oBAAA,YAAY,EAAE,cAAc;AAC5B,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE;wBACL,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;wBAC1C,WAAW,EAAE,UAAU,GAAG,CAAC,GAAG,CAAC;AAChC,qBAAA;AACF,iBAAA,CAAC;gBAEF,MAAM,IAAI,GAAG;AACf,YAAA,CAAC,CAAC;;;YAIF,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,IAAS,KAAI;gBAC3D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpB,oBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;gBACzC;gBACA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC;AAC1B,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAE,CAAC;AAEN,YAAA,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,CAAS,KAAI;gBACzD,MAAM,UAAU,GAAG,CAAA,SAAA,EAAY,GAAG,IAAI,KAAK,CAAC,KAAK,CAAA,CAAE;AACnD,gBAAA,MAAM,aAAa,GACjB,SAAS,KAAK,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC;gBAEtE,QAAQ,CAAC,IAAI,CAAC;AACZ,oBAAA,EAAE,EAAE,UAAU;AACd,oBAAA,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE;AACxC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EACH,KAAK,CAAC,KAAK,GAAG;8BACV,GAAG,KAAK,CAAC,KAAK,CAAA,GAAA,EAAM,KAAK,CAAC,KAAK,CAAA,CAAA;8BAC/B,KAAK,CAAC,KAAK;wBACjB,QAAQ,EAAE,YAAY,KAAK,GAAG;AAC9B,wBAAA,KAAK,EAAE,aAAa;AACrB,qBAAA;AACF,iBAAA,CAAC;gBAEF,QAAQ,CAAC,IAAI,CAAC;AACZ,oBAAA,EAAE,EAAE,CAAA,mBAAA,EAAsB,GAAG,IAAI,KAAK,CAAC,KAAK,CAAA,CAAE;oBAC9C,MAAM,EAAE,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE;AACrB,oBAAA,YAAY,EAAE,iBAAiB;AAC/B,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE;wBACL,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS;wBAC7C,WAAW,EAAE,aAAa,GAAG,CAAC,GAAG,CAAC;AACnC,qBAAA;AACF,iBAAA,CAAC;gBAEF,SAAS,IAAI,GAAG;AAClB,YAAA,CAAC,CAAC;YAEF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,GAAG,EACH,WAAW,CAAC,MAAM,GAAG,GAAG,EACxB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,GAAG,CACpC;AACD,YAAA,KAAK,IAAI,YAAY,GAAG,EAAE;YAC1B,IAAI,MAAM,GAAG,KAAK;gBAAE,MAAM,GAAG,KAAK;YAClC,IAAI,SAAS,GAAG,KAAK;gBAAE,SAAS,GAAG,KAAK;AAC1C,QAAA,CAAC,CAAC;QAEF,QAAQ,CAAC,QAAQ,CAAC;QAClB,QAAQ,CAAC,QAAQ,CAAC;AACpB,IAAA,CAAC,EAAE;QACD,aAAa;QACb,YAAY;QACZ,QAAQ;QACR,cAAc;QACd,QAAQ;QACR,QAAQ;AACT,KAAA,CAAC;IAEF,QACEA,IAAC,MAAM,CAAC,GAAG,EAAA,EACT,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACvB,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACvB,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAA,QAAA,EAGpBC,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,CAAA,qBAAA,EAAwB,WAAW,GAAG,WAAW,GAAG,EAAE,CAAA,CAAE,EACnE,KAAK,EACH;AACE,kBAAE;oBACE,IAAI,EAAE,YAAY,CAAC,CAAC;oBACpB,GAAG,EAAE,YAAY,CAAC,CAAC;AACnB,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,KAAK,EAAE,MAAM;AACd;kBACD,EAAE,EAER,WAAW,EAAE,mBAAmB,EAChC,OAAO,EAAE,MAAK;AACZ,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,WAAW;oBAAE,cAAc,CAAC,KAAK,CAAC;AAC/D,YAAA,CAAC,EAAA,QAAA,EAAA,CAEDA,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,qBAAqB,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,OAAO,GAAG,EAAE,CAAA,CAAE,EAAA,QAAA,EAAA,CAAA,GAAA,EAEpED,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,KAAA,EAAA,CAAW,CAAA,EAAA,CAC5C,EAENC,IAAA,CAAA,QAAA,EAAA,EAAQ,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CAC3BA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAAA,CAC5BD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,cAAc,EAAA,QAAA,EAC3BA,IAAC,GAAG,EAAA,EAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAE,EAAE,GAAI,EAAA,CAC3B,EACNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CAC/BD,GAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,CAAkC,EAClCC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,aAC7BD,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,yBAAgB,EACjDA,GAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,EAAA,QAAA,EAAA,aAAA,EAAA,CAErD,IACH,CAAA,EAAA,CACF,CAAA,EAAA,CACF,EACNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,aAAa,EAAA,QAAA,EAAA,CAC1BA,cACE,SAAS,EAAC,kBAAkB,EAC5B,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,EAAA,QAAA,EAAA,CAEnDA,IAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,mBAAmB,QAAQ,KAAK,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAA,CAAE,EACnE,OAAO,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,EAAA,QAAA,EAAA,CAElCD,GAAA,CAAC,OAAO,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,aAAA,CAAA,EAAA,CACd,EACTC,IAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,CAAA,gBAAA,EAAmB,QAAQ,KAAK,WAAW,GAAG,QAAQ,GAAG,EAAE,CAAA,CAAE,EACxE,OAAO,EAAE,MAAM,WAAW,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,CAEvCD,GAAA,CAAC,SAAS,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,YAAA,CAAA,EAAA,CAChB,CAAA,EAAA,CACL,EACNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAChCD,GAAA,CAAC,MAAM,IAAC,SAAS,EAAC,gBAAgB,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAC/CA,GAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,iBAAiB,EAC3B,WAAW,EAAC,0CAA0C,EACtD,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA,CAC/C,IACE,EACNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAC7BD,GAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,aAAa,EACvB,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAA,QAAA,EAEvCA,IAAC,UAAU,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CACjB,EACTA,GAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,aAAa,EACvB,KAAK,EAAC,UAAU,EAChB,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC,EAEtB,OAAO,EAAE,CAAC,CAAC,KAAI;gDACb,CAAC,CAAC,eAAe,EAAE;gDACnB,cAAc,CAAC,IAAI,CAAC;gDACpB,SAAS,CAAC,KAAK,CAAC;4CAClB,CAAC,EAAA,QAAA,EAEDA,IAAC,SAAS,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CAChB,EACTA,GAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,aAAa,EACvB,KAAK,EAAC,YAAY,EAClB,OAAO,EAAE,MAAK;gDACZ,IAAI,CAAC,QAAQ,CAAC,iBAAiB;AAC7B,oDAAA,QAAQ,CAAC,eAAe,CAAC,iBAAiB,EAAE;;oDACzC,QAAQ,CAAC,cAAc,EAAE;AAChC,4CAAA,CAAC,EAAA,QAAA,EAEDA,GAAA,CAAC,SAAS,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CAChB,EACTA,GAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,aAAa,EACvB,KAAK,EAAC,eAAe,EACrB,OAAO,EAAE,MAAM,kBAAkB,CAAC,CAAC,eAAe,CAAC,EAAA,QAAA,EAElD,eAAe,IACdA,GAAA,CAAC,eAAe,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,KAE7BA,GAAA,CAAC,UAAU,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,CACzB,EAAA,CACM,EACTA,gBACE,SAAS,EAAC,wCAAwC,EAClD,OAAO,EAAE,CAAC,CAAC,KAAI;gDACb,CAAC,CAAC,eAAe,EAAE;AACnB,gDAAA,OAAO,EAAE;4CACX,CAAC,EACD,KAAK,EAAC,OAAO,YAEbA,GAAA,CAAC,CAAC,IAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CACR,IACL,CAAA,EAAA,CACF,CAAA,EAAA,CACC,EAETC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBD,IAAC,WAAW,EAAA,EACV,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,GACxB,EACFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,WAAW,EAAA,QAAA,EACxB,QAAQ,KAAK,MAAM,IAClBC,IAAA,CAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,EAC7C,WAAW,EAAE,CAAC,CAAC,EAAE,IAAI,KAAI;AACvB,oCAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;AACtB,wCAAA,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gCAChD,CAAC,EACD,OAAO,EAAA,IAAA,EACP,SAAS,EAAC,MAAM,EAAA,QAAA,EAAA,CAEhBD,GAAA,CAAC,UAAU,EAAA,EAAC,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,EAAE,EAAA,CAAI,EAAC,GAAG,EAC3CA,GAAA,CAAC,QAAQ,EAAA,EAAC,eAAe,EAAE,KAAK,EAAA,CAAI,CAAA,EAAA,CAC1B,KAEZA,GAAA,CAAC,aAAa,EAAA,EACZ,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,cAAc,EAAA,CAC5B,CACH,EAAA,CACI,EACPA,GAAA,CAAC,UAAU,EAAA,EACT,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAAA,CAChC,CAAA,EAAA,CACE,EAENA,GAAA,CAAC,eAAe,EAAA,EAAA,QAAA,EACb,WAAW,KACVA,GAAA,CAAC,MAAM,CAAC,GAAG,EAAA,EACT,SAAS,EAAC,0BAA0B,EACpC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACvB,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACvB,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACpB,OAAO,EAAE,MAAM,cAAc,CAAC,IAAI,CAAC,EAAA,QAAA,EAEnCC,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,iBAAiB,EAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,EAAA,QAAA,EAAA,CAEnCA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAChCA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CAC/BD,GAAA,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAC,SAAS,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EACtCC,wBAAK,WAAW,EAAA,WAAA,CAAA,EAAA,CAAe,CAAA,EAAA,CAC3B,EACND,GAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,0BAA0B,EACpC,OAAO,EAAE,MAAM,cAAc,CAAC,IAAI,CAAC,EAAA,QAAA,EAEnCA,GAAA,CAAC,CAAC,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CACR,CAAA,EAAA,CACL,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAChC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAC7CC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAC7BD,GAAA,CAAC,QAAQ,EAAA,EAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,eAAe,EAAA,CAAG,EAChDA,GAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,CAA6B,EAC7BA,GAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAA,0CAAA,EAAA,CAA+C,CAAA,EAAA,CAC3C,KAENA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAC3B,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM;AACnC,6CAAA,OAAO;6CACP,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,MACZC,IAAA,CAAA,KAAA,EAAA,EAEE,SAAS,EAAE,CAAA,cAAA,EAAiB,KAAK,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,GAAG,EAAE,CAAA,CAAE,EAAA,QAAA,EAAA,CAEnED,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,cAAc,EAAA,CAAG,EAChCC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CAC9BD,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,oBAAoB,EAAA,QAAA,EACjC,KAAK,CAAC,KAAK,EAAA,CACP,EACPA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,aAAa,EAAA,QAAA,EAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,EAAA,CAC1C,CAAA,EAAA,CACH,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAC/BA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,YAAY,EAAA,QAAA,EAAE,KAAK,CAAC,IAAI,EAAA,CAAQ,EAAA,CAC5C,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAC5BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAA,CACjC,EAAA,CACF,CAAA,EAAA,EAnBD,CAAC,CAoBF,CACP,CAAC,EAAA,CACA,CACP,EAAA,CACG,CAAA,EAAA,CACF,EAAA,CACK,CACd,EAAA,CACe,CAAA,EAAA,CACd,EAAA,CACK;AAEjB;;;;"}
|
package/dist/esm/src/proxy.js
CHANGED
|
@@ -94,6 +94,16 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
94
94
|
};
|
|
95
95
|
if (prop === "__actions__")
|
|
96
96
|
return options.actions;
|
|
97
|
+
if (prop === "_undo")
|
|
98
|
+
return () => store.undo(key);
|
|
99
|
+
if (prop === "_redo")
|
|
100
|
+
return () => store.redo(key);
|
|
101
|
+
if (prop === "_canUndo")
|
|
102
|
+
return (store.getHistory(key)?.length || 0) > 1;
|
|
103
|
+
if (prop === "_canRedo")
|
|
104
|
+
return (store.getRedoStack(key)?.length || 0) > 0;
|
|
105
|
+
if (prop === "_history")
|
|
106
|
+
return store.getHistory(key);
|
|
97
107
|
// Handle plugin-provided operations (e.g., _persist)
|
|
98
108
|
const pluginOps = store.getPluginOps(key, options);
|
|
99
109
|
if (prop in pluginOps)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\n\n// Path cache to avoid repeated array allocations\nconst pathCache = new WeakMap<string[], Map<string, string[]>>();\n\nfunction getCachedPath(path: string[], prop: string): string[] {\n let cache = pathCache.get(path);\n if (!cache) {\n cache = new Map();\n pathCache.set(path, cache);\n }\n\n let cached = cache.get(prop);\n if (!cached) {\n cached = [...path, prop];\n cache.set(prop, cached);\n }\n return cached;\n}\n\n/**\n * Creates a deep proxy that provides type-specific atomic operations for a flow.\n * The proxy tracks its path within the state tree and maps access to specific update logic.\n *\n * Reduced allocations, cached operations\n */\nexport function createDeepProxy<T = any, A = Record<string, any>>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T, A> {\n // Pre-bind commit function to avoid recreation\n const commit = (\n val: any,\n forceful: boolean,\n skipEquality = false,\n op?: string,\n ) => {\n try {\n // INTERNAL OPTIMIZATION: We fetch the RAW current state from the vault\n // without cloning it. Since we are about to produce a new IMMUTABLE state\n // using setInPath (which does structural cloning), this is safe and\n // avoiding a full deepClone of the entire tree on every tiny action\n // results in 100x performance in loops.\n const currentState = store.get(key, undefined, { bypassClone: true });\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n _op: op || (options as any)._op || \"set\",\n _path: path,\n } as any);\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // Pre-create update function\n const update = (val: any, op?: string) => {\n commit(val, false, true, op);\n };\n\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n // --- Meta-Operations (Fast path) ---\n if (prop === \"_val\") return currentVal;\n if (prop === \"_set\")\n return (val: any) => {\n commit(val, true, false, \"_set\");\n };\n if (prop === \"_patch\")\n return (val: any) => {\n commit(val, false, false, \"_patch\");\n };\n if (prop === \"__actions__\") return (options as any).actions;\n\n // Handle plugin-provided operations (e.g., _persist)\n const pluginOps = store.getPluginOps(key, options);\n if (prop in pluginOps) return pluginOps[prop];\n\n // Type check once for this level\n const valType = typeof currentVal;\n const isArray = Array.isArray(currentVal);\n\n // --- Number Operations (Optimized with cached functions) ---\n if (valType === \"number\") {\n switch (prop) {\n case \"_increment\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_increment\");\n };\n case \"_decrement\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_decrement\");\n };\n case \"_add\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_add\");\n };\n case \"_subtract\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_subtract\");\n };\n case \"_multiply\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal * amount, \"_multiply\");\n };\n case \"_divide\":\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal / amount, \"_divide\");\n };\n }\n }\n\n // --- Array Operations (Optimized with minimal allocations) ---\n if (isArray) {\n switch (prop) {\n case \"_push\":\n return (item: any) => {\n // Manual copy instead of spread for large arrays\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < len; i++) newArr[i] = currentVal[i];\n newArr[len] = item;\n update(newArr, \"_push\");\n };\n case \"_pop\":\n return () => update(currentVal.slice(0, -1), \"_pop\");\n case \"_shift\":\n return () => update(currentVal.slice(1), \"_shift\");\n case \"_unshift\":\n return (item: any) => {\n // Manual copy for better performance\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n newArr[0] = item;\n for (let i = 0; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_unshift\");\n };\n case \"_filter\":\n return (fn: any) => update(currentVal.filter(fn), \"_filter\");\n case \"_map\":\n return (fn: any) => update(currentVal.map(fn), \"_map\");\n case \"_removeAt\":\n return (index: number) => {\n // Manual filter for single index\n const len = currentVal.length;\n const newArr = new Array(len - 1);\n let j = 0;\n for (let i = 0; i < len; i++) {\n if (i !== index) newArr[j++] = currentVal[i];\n }\n update(newArr, \"_removeAt\");\n };\n case \"_insertAt\":\n return (index: number, item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < index; i++) newArr[i] = currentVal[i];\n newArr[index] = item;\n for (let i = index; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_insertAt\");\n };\n }\n }\n\n // --- String Operations ---\n if (valType === \"string\") {\n switch (prop) {\n case \"_append\":\n return (str: string) => update(currentVal + str, \"_append\");\n case \"_prepend\":\n return (str: string) => update(str + currentVal, \"_prepend\");\n case \"_uppercase\":\n return () => update(currentVal.toUpperCase(), \"_uppercase\");\n case \"_lowercase\":\n return () => update(currentVal.toLowerCase(), \"_lowercase\");\n case \"_trim\":\n return () => update(currentVal.trim(), \"_trim\");\n }\n }\n\n // --- Boolean Operations ---\n if (valType === \"boolean\") {\n if (prop === \"_toggle\") {\n return () => update(!currentVal, \"_toggle\");\n }\n }\n\n // --- Object Operations ---\n if (currentVal !== null && valType === \"object\" && !isArray) {\n if (prop === \"_merge\") {\n return (obj: any) => {\n // Object.assign faster than spread for merge\n const merged = Object.assign({}, currentVal, obj);\n update(merged, \"_merge\");\n };\n }\n if (prop === \"_delete\") {\n return (keyToDel: string) => {\n // Only copy if key exists\n if (!(keyToDel in currentVal)) return;\n const keys = Object.keys(currentVal);\n const next: any = {};\n for (const k of keys) {\n if (k !== keyToDel) next[k] = currentVal[k];\n }\n update(next, \"_delete\");\n };\n }\n }\n\n // Recursive step: create a new proxy for the child property\n // Use cached path\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n const newPath = getCachedPath(path, prop);\n return createDeepProxy(key, newPath, nextVal, options);\n },\n apply(_target, _thisArg, args) {\n if (typeof currentVal === \"function\") {\n return currentVal(...args);\n }\n console.warn(\n `[FlowProxy] Attempted to call a non-function value at path: ${path.join(\".\")}`,\n );\n },\n }) as unknown as TypeAwareOps<T, A>;\n}\n\n/**\n * Immutable update utility that sets a value at a specific path within an object/array.\n */\nexport function setInPath(obj: any, path: string[], value: any): any {\n return setInPathRecursive(obj, path, value, 0);\n}\n\nfunction setInPathRecursive(\n obj: any,\n path: string[],\n value: any,\n index: number,\n): any {\n if (index === path.length) return value;\n\n const head = path[index];\n\n if (Array.isArray(obj)) {\n const i = parseInt(head, 10);\n if (isNaN(i) || i < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n\n const len = obj.length;\n const newArr = new Array(Math.max(len, i + 1));\n\n // Fast copy with check for modified index\n for (let j = 0; j < newArr.length; j++) {\n if (j === i) {\n newArr[j] = setInPathRecursive(obj[j], path, value, index + 1);\n } else {\n newArr[j] = j < len ? obj[j] : undefined;\n }\n }\n return newArr;\n }\n\n // Object path\n const currentObj = obj ?? {};\n const keys = Object.keys(currentObj);\n const result: any = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result[key] =\n key === head\n ? setInPathRecursive(currentObj[key], path, value, index + 1)\n : currentObj[key];\n }\n\n if (!(head in currentObj)) {\n result[head] = setInPathRecursive(undefined, path, value, index + 1);\n }\n\n return result;\n}\n\n/**\n * Access utility to get a value at a specific path.\n */\nfunction getInPath(obj: any, path: string[]): any {\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (current === null || current === undefined) return undefined;\n current = current[path[i]];\n }\n return current;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\n\n// Path cache to avoid repeated array allocations\nconst pathCache = new WeakMap<string[], Map<string, string[]>>();\n\nfunction getCachedPath(path: string[], prop: string): string[] {\n let cache = pathCache.get(path);\n if (!cache) {\n cache = new Map();\n pathCache.set(path, cache);\n }\n\n let cached = cache.get(prop);\n if (!cached) {\n cached = [...path, prop];\n cache.set(prop, cached);\n }\n return cached;\n}\n\n/**\n * Creates a deep proxy that provides type-specific atomic operations for a flow.\n * The proxy tracks its path within the state tree and maps access to specific update logic.\n *\n * Reduced allocations, cached operations\n */\nexport function createDeepProxy<T = any, A = Record<string, any>>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T, A> {\n // Pre-bind commit function to avoid recreation\n const commit = (\n val: any,\n forceful: boolean,\n skipEquality = false,\n op?: string,\n ) => {\n try {\n // INTERNAL OPTIMIZATION: We fetch the RAW current state from the vault\n // without cloning it. Since we are about to produce a new IMMUTABLE state\n // using setInPath (which does structural cloning), this is safe and\n // avoiding a full deepClone of the entire tree on every tiny action\n // results in 100x performance in loops.\n const currentState = store.get(key, undefined, { bypassClone: true });\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n _op: op || (options as any)._op || \"set\",\n _path: path,\n } as any);\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // Pre-create update function\n const update = (val: any, op?: string) => {\n commit(val, false, true, op);\n };\n\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n // --- Meta-Operations (Fast path) ---\n if (prop === \"_val\") return currentVal;\n if (prop === \"_set\")\n return (val: any) => {\n commit(val, true, false, \"_set\");\n };\n if (prop === \"_patch\")\n return (val: any) => {\n commit(val, false, false, \"_patch\");\n };\n if (prop === \"__actions__\") return (options as any).actions;\n if (prop === \"_undo\") return () => store.undo(key);\n if (prop === \"_redo\") return () => store.redo(key);\n if (prop === \"_canUndo\") return (store.getHistory(key)?.length || 0) > 1;\n if (prop === \"_canRedo\")\n return (store.getRedoStack(key)?.length || 0) > 0;\n if (prop === \"_history\") return store.getHistory(key);\n\n // Handle plugin-provided operations (e.g., _persist)\n const pluginOps = store.getPluginOps(key, options);\n if (prop in pluginOps) return pluginOps[prop];\n\n // Type check once for this level\n const valType = typeof currentVal;\n const isArray = Array.isArray(currentVal);\n\n // --- Number Operations (Optimized with cached functions) ---\n if (valType === \"number\") {\n switch (prop) {\n case \"_increment\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_increment\");\n };\n case \"_decrement\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_decrement\");\n };\n case \"_add\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_add\");\n };\n case \"_subtract\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_subtract\");\n };\n case \"_multiply\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal * amount, \"_multiply\");\n };\n case \"_divide\":\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal / amount, \"_divide\");\n };\n }\n }\n\n // --- Array Operations (Optimized with minimal allocations) ---\n if (isArray) {\n switch (prop) {\n case \"_push\":\n return (item: any) => {\n // Manual copy instead of spread for large arrays\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < len; i++) newArr[i] = currentVal[i];\n newArr[len] = item;\n update(newArr, \"_push\");\n };\n case \"_pop\":\n return () => update(currentVal.slice(0, -1), \"_pop\");\n case \"_shift\":\n return () => update(currentVal.slice(1), \"_shift\");\n case \"_unshift\":\n return (item: any) => {\n // Manual copy for better performance\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n newArr[0] = item;\n for (let i = 0; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_unshift\");\n };\n case \"_filter\":\n return (fn: any) => update(currentVal.filter(fn), \"_filter\");\n case \"_map\":\n return (fn: any) => update(currentVal.map(fn), \"_map\");\n case \"_removeAt\":\n return (index: number) => {\n // Manual filter for single index\n const len = currentVal.length;\n const newArr = new Array(len - 1);\n let j = 0;\n for (let i = 0; i < len; i++) {\n if (i !== index) newArr[j++] = currentVal[i];\n }\n update(newArr, \"_removeAt\");\n };\n case \"_insertAt\":\n return (index: number, item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < index; i++) newArr[i] = currentVal[i];\n newArr[index] = item;\n for (let i = index; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_insertAt\");\n };\n }\n }\n\n // --- String Operations ---\n if (valType === \"string\") {\n switch (prop) {\n case \"_append\":\n return (str: string) => update(currentVal + str, \"_append\");\n case \"_prepend\":\n return (str: string) => update(str + currentVal, \"_prepend\");\n case \"_uppercase\":\n return () => update(currentVal.toUpperCase(), \"_uppercase\");\n case \"_lowercase\":\n return () => update(currentVal.toLowerCase(), \"_lowercase\");\n case \"_trim\":\n return () => update(currentVal.trim(), \"_trim\");\n }\n }\n\n // --- Boolean Operations ---\n if (valType === \"boolean\") {\n if (prop === \"_toggle\") {\n return () => update(!currentVal, \"_toggle\");\n }\n }\n\n // --- Object Operations ---\n if (currentVal !== null && valType === \"object\" && !isArray) {\n if (prop === \"_merge\") {\n return (obj: any) => {\n // Object.assign faster than spread for merge\n const merged = Object.assign({}, currentVal, obj);\n update(merged, \"_merge\");\n };\n }\n if (prop === \"_delete\") {\n return (keyToDel: string) => {\n // Only copy if key exists\n if (!(keyToDel in currentVal)) return;\n const keys = Object.keys(currentVal);\n const next: any = {};\n for (const k of keys) {\n if (k !== keyToDel) next[k] = currentVal[k];\n }\n update(next, \"_delete\");\n };\n }\n }\n\n // Recursive step: create a new proxy for the child property\n // Use cached path\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n const newPath = getCachedPath(path, prop);\n return createDeepProxy(key, newPath, nextVal, options);\n },\n apply(_target, _thisArg, args) {\n if (typeof currentVal === \"function\") {\n return currentVal(...args);\n }\n console.warn(\n `[FlowProxy] Attempted to call a non-function value at path: ${path.join(\".\")}`,\n );\n },\n }) as unknown as TypeAwareOps<T, A>;\n}\n\n/**\n * Immutable update utility that sets a value at a specific path within an object/array.\n */\nexport function setInPath(obj: any, path: string[], value: any): any {\n return setInPathRecursive(obj, path, value, 0);\n}\n\nfunction setInPathRecursive(\n obj: any,\n path: string[],\n value: any,\n index: number,\n): any {\n if (index === path.length) return value;\n\n const head = path[index];\n\n if (Array.isArray(obj)) {\n const i = parseInt(head, 10);\n if (isNaN(i) || i < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n\n const len = obj.length;\n const newArr = new Array(Math.max(len, i + 1));\n\n // Fast copy with check for modified index\n for (let j = 0; j < newArr.length; j++) {\n if (j === i) {\n newArr[j] = setInPathRecursive(obj[j], path, value, index + 1);\n } else {\n newArr[j] = j < len ? obj[j] : undefined;\n }\n }\n return newArr;\n }\n\n // Object path\n const currentObj = obj ?? {};\n const keys = Object.keys(currentObj);\n const result: any = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result[key] =\n key === head\n ? setInPathRecursive(currentObj[key], path, value, index + 1)\n : currentObj[key];\n }\n\n if (!(head in currentObj)) {\n result[head] = setInPathRecursive(undefined, path, value, index + 1);\n }\n\n return result;\n}\n\n/**\n * Access utility to get a value at a specific path.\n */\nfunction getInPath(obj: any, path: string[]): any {\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (current === null || current === undefined) return undefined;\n current = current[path[i]];\n }\n return current;\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FlowDefinition, D as DerivedFlowDefinition, C as ContextGetterOps, a as FlowOptions, A as ActionOpsObject, b as FlowOperations, U as UseFlowOptions } from './types-
|
|
2
|
-
export { c as ArrayOps, B as BaseOps, d as BooleanOps, e as BoundActions, f as FlowAction, g as FlowEffect, h as FlowOpsObject, i as FlowPlugin, N as NumberOps, O as ObjectOps, S as StringOps, T as TypeAwareOps } from './types-
|
|
1
|
+
import { F as FlowDefinition, D as DerivedFlowDefinition, C as ContextGetterOps, a as FlowOptions, A as ActionOpsObject, b as FlowOperations, U as UseFlowOptions } from './types-glPP8lSw.js';
|
|
2
|
+
export { c as ArrayOps, B as BaseOps, d as BooleanOps, e as BoundActions, f as FlowAction, g as FlowEffect, h as FlowOpsObject, i as FlowPlugin, N as NumberOps, O as ObjectOps, S as StringOps, T as TypeAwareOps } from './types-glPP8lSw.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Manually initializes a flow to ensure its effects run immediately.
|
package/dist/plugins.d.ts
CHANGED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for FractoState
|
|
3
|
+
*/
|
|
4
|
+
type TypeAwareOps<T, A = any> = [T] extends [null | undefined] ? BaseOps<T, A> : [T] extends [any[]] ? ArrayOps<T[number], A> : [T] extends [number] ? NumberOps<A> : [T] extends [string] ? StringOps<A> : [T] extends [boolean] ? BooleanOps<A> : [NonNullable<T>] extends [object] ? ObjectOps<T, A> : BaseOps<T, A>;
|
|
5
|
+
type FlowOpsObject<T, A = any> = {
|
|
6
|
+
readonly self: TypeAwareOps<T, A>;
|
|
7
|
+
readonly state: T;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Enhanced operations for actions that include the context
|
|
11
|
+
*/
|
|
12
|
+
type ActionOpsObject<T, A = any, C = undefined> = FlowOpsObject<T, A> & {
|
|
13
|
+
readonly ctx: C;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Action structure: (...args) => (ops) => Result
|
|
17
|
+
*/
|
|
18
|
+
type FlowAction<T, A = any, C = undefined> = (...args: any[]) => (ops: ActionOpsObject<T, A, C>) => any;
|
|
19
|
+
/**
|
|
20
|
+
* Transform actions for the component toolbox.
|
|
21
|
+
* Excludes internal __ctx__ property.
|
|
22
|
+
*/
|
|
23
|
+
type BoundActions<A> = {
|
|
24
|
+
[K in keyof A as K extends "__ctx__" ? never : K]: A[K] extends (...args: infer P) => (...inner: any[]) => infer R ? (...args: P) => R : never;
|
|
25
|
+
};
|
|
26
|
+
interface FlowPlugin<T = any, A = any> {
|
|
27
|
+
name: string;
|
|
28
|
+
onInit?: (ctx: {
|
|
29
|
+
key: string;
|
|
30
|
+
initial: T;
|
|
31
|
+
store: any;
|
|
32
|
+
}) => void;
|
|
33
|
+
onUpdate?: (ctx: {
|
|
34
|
+
key: string;
|
|
35
|
+
prev: T;
|
|
36
|
+
next: T;
|
|
37
|
+
store: any;
|
|
38
|
+
}) => void;
|
|
39
|
+
onHydrate?: (ctx: {
|
|
40
|
+
key: string;
|
|
41
|
+
initial: T;
|
|
42
|
+
store: any;
|
|
43
|
+
}) => T | Promise<T> | undefined;
|
|
44
|
+
/** Return methods that will be exposed under ops.self._[pluginName] */
|
|
45
|
+
getOps?: (ctx: {
|
|
46
|
+
key: string;
|
|
47
|
+
store: any;
|
|
48
|
+
}) => Record<string, Function>;
|
|
49
|
+
/** @internal Phantom type for action inference */
|
|
50
|
+
__plugin_actions__?: A;
|
|
51
|
+
}
|
|
52
|
+
interface FlowEffect<T, A = any> {
|
|
53
|
+
/** Function to run on init and when deps change */
|
|
54
|
+
run: (ops: FlowOpsObject<T, A>) => void | Promise<void>;
|
|
55
|
+
/** Optional dependencies selector. If omitted, runs only on init */
|
|
56
|
+
deps?: (state: T) => any[];
|
|
57
|
+
}
|
|
58
|
+
interface FlowOptions<T = any, A = any> {
|
|
59
|
+
timeTravel?: boolean;
|
|
60
|
+
maxHistory?: number;
|
|
61
|
+
debounce?: number;
|
|
62
|
+
middleware?: Array<(state: T) => T>;
|
|
63
|
+
plugins?: FlowPlugin<T, A>[];
|
|
64
|
+
effects?: FlowEffect<T, A>[];
|
|
65
|
+
force?: boolean;
|
|
66
|
+
skipEquality?: boolean;
|
|
67
|
+
isUndoRedo?: boolean;
|
|
68
|
+
bypassClone?: boolean;
|
|
69
|
+
/** The name of the component or module performing the update */
|
|
70
|
+
actor?: string;
|
|
71
|
+
/** Raw actions dictionary for internal binding */
|
|
72
|
+
actions?: A;
|
|
73
|
+
}
|
|
74
|
+
interface ContextGetterOps<T, A> {
|
|
75
|
+
state: T;
|
|
76
|
+
initialState: T;
|
|
77
|
+
actions: BoundActions<A>;
|
|
78
|
+
ops: FlowOpsObject<T, A>;
|
|
79
|
+
}
|
|
80
|
+
interface UseFlowOptions<T> extends FlowOptions<T> {
|
|
81
|
+
name?: string;
|
|
82
|
+
}
|
|
83
|
+
interface FlowDefinition<T, A = {}, C = undefined> {
|
|
84
|
+
key: string;
|
|
85
|
+
initial: T;
|
|
86
|
+
options?: FlowOptions<T, A> & {
|
|
87
|
+
actions?: A;
|
|
88
|
+
};
|
|
89
|
+
/** @internal Phantom type for context inference */
|
|
90
|
+
__ctx__?: C;
|
|
91
|
+
}
|
|
92
|
+
interface DerivedFlowDefinition<T, R> {
|
|
93
|
+
key: string;
|
|
94
|
+
source: FlowDefinition<T, any>;
|
|
95
|
+
selector: (state: T) => R;
|
|
96
|
+
}
|
|
97
|
+
interface FlowOperations<T, A = {}> {
|
|
98
|
+
/** The operation object for recursive state manipulation via proxies */
|
|
99
|
+
ops: FlowOpsObject<T, A>;
|
|
100
|
+
/** The actions defined in defineFlow, bound to this specific state instance */
|
|
101
|
+
actions: BoundActions<A>;
|
|
102
|
+
/** Reverts to the previous state in history (if timeTravel is enabled) */
|
|
103
|
+
_undo: () => void;
|
|
104
|
+
/** Reapplies a previously undone state (if timeTravel is enabled) */
|
|
105
|
+
_redo: () => void;
|
|
106
|
+
/** Returns the full history stack for this flow */
|
|
107
|
+
history: T[];
|
|
108
|
+
/** Boolean indicating if an undo operation is currently possible */
|
|
109
|
+
_canUndo: boolean;
|
|
110
|
+
/** Boolean indicating if a redo operation is currently possible */
|
|
111
|
+
_canRedo: boolean;
|
|
112
|
+
/** Forcefully updates the state and records history even if values are identical. Useful for triggering effects or manual snapshots. */
|
|
113
|
+
_set: (val: T | ((prev: T) => T)) => void;
|
|
114
|
+
/** Optimized update: only commits the change if the new value differs from the current one. Saves history space and render cycles. */
|
|
115
|
+
_patch: (val: T | ((prev: T) => T)) => void;
|
|
116
|
+
/** Resets the state back to its initial defined configuration */
|
|
117
|
+
_reset: () => void;
|
|
118
|
+
/** Returns the current flow configuration options */
|
|
119
|
+
cf: FlowOptions<T>;
|
|
120
|
+
/** Boolean indicating if the flow is currently loading data from a hydration plugin (e.g., localStorage) */
|
|
121
|
+
isHydrating: boolean;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Common operations available on every state node.
|
|
125
|
+
* Prefixed with underscores to avoid collisions with your nested data properties.
|
|
126
|
+
*/
|
|
127
|
+
type BaseOps<T, A = any> = {
|
|
128
|
+
/** Forcefully replace the value at this path, ignoring equality checks. Records history. */
|
|
129
|
+
_set: (value: T) => void;
|
|
130
|
+
/** Smart update: only commits the change if the value is different. */
|
|
131
|
+
_patch: (value: T) => void;
|
|
132
|
+
/** Unwraps the proxy and returns the raw value at this specific tree path. */
|
|
133
|
+
_val: T;
|
|
134
|
+
/** Access all actions defined in this flow */
|
|
135
|
+
__actions__: BoundActions<A>;
|
|
136
|
+
/** Persistence control (provided by persist plugin) */
|
|
137
|
+
_persist?: {
|
|
138
|
+
clear: () => void;
|
|
139
|
+
update: () => void;
|
|
140
|
+
refresh: () => Promise<void>;
|
|
141
|
+
getData: () => Promise<T | undefined>;
|
|
142
|
+
};
|
|
143
|
+
/** Reverts to the previous state in history (if timeTravel is enabled) - Global Effect */
|
|
144
|
+
_undo: () => void;
|
|
145
|
+
/** Reapplies a previously undone state (if timeTravel is enabled) - Global Effect */
|
|
146
|
+
_redo: () => void;
|
|
147
|
+
/** Boolean indicating if an undo operation is currently possible */
|
|
148
|
+
_canUndo: boolean;
|
|
149
|
+
/** Boolean indicating if a redo operation is currently possible */
|
|
150
|
+
_canRedo: boolean;
|
|
151
|
+
/** Returns the full history stack for this flow */
|
|
152
|
+
_history: T[];
|
|
153
|
+
};
|
|
154
|
+
/** Operations specific to numeric values */
|
|
155
|
+
type NumberOps<A = any> = BaseOps<number, A> & {
|
|
156
|
+
/** Increment by n (default 1) */
|
|
157
|
+
_increment: (n?: number) => void;
|
|
158
|
+
/** Decrement by n (default 1) */
|
|
159
|
+
_decrement: (n?: number) => void;
|
|
160
|
+
/** Add n to the value */
|
|
161
|
+
_add: (n: number) => void;
|
|
162
|
+
/** Subtract n from the value */
|
|
163
|
+
_subtract: (n: number) => void;
|
|
164
|
+
/** Multiply the value by n */
|
|
165
|
+
_multiply: (n: number) => void;
|
|
166
|
+
/** Divide the value by n */
|
|
167
|
+
_divide: (n: number) => void;
|
|
168
|
+
};
|
|
169
|
+
/** Operations specific to string values */
|
|
170
|
+
type StringOps<A = any> = BaseOps<string, A> & {
|
|
171
|
+
/** Append a string at the end */
|
|
172
|
+
_append: (s: string) => void;
|
|
173
|
+
/** Prepend a string at the beginning */
|
|
174
|
+
_prepend: (s: string) => void;
|
|
175
|
+
/** Convert value to uppercase */
|
|
176
|
+
_uppercase: () => void;
|
|
177
|
+
/** Convert value to lowercase */
|
|
178
|
+
_lowercase: () => void;
|
|
179
|
+
/** Trim whitespace from both ends */
|
|
180
|
+
_trim: () => void;
|
|
181
|
+
/** Replace occurrences matching pattern */
|
|
182
|
+
_replace: (pattern: string | RegExp, replacement: string) => void;
|
|
183
|
+
};
|
|
184
|
+
/** Operations specific to array values */
|
|
185
|
+
type ArrayOps<T, A = any> = BaseOps<T[], A> & {
|
|
186
|
+
/** Add an item to the end of the array */
|
|
187
|
+
_push: (v: T) => void;
|
|
188
|
+
/** Remove and return the last item */
|
|
189
|
+
_pop: () => void;
|
|
190
|
+
/** Remove and return the first item */
|
|
191
|
+
_shift: () => void;
|
|
192
|
+
/** Add an item to the beginning of the array */
|
|
193
|
+
_unshift: (v: T) => void;
|
|
194
|
+
/** Keep only items matching the condition */
|
|
195
|
+
_filter: (fn: (v: T, i: number) => boolean) => void;
|
|
196
|
+
/** Transform every item in the array */
|
|
197
|
+
_map: (fn: (v: T, i: number) => T) => void;
|
|
198
|
+
/** Remove item at a specific index */
|
|
199
|
+
_removeAt: (i: number) => void;
|
|
200
|
+
/** Insert an item at a specific index */
|
|
201
|
+
_insertAt: (i: number, v: T) => void;
|
|
202
|
+
};
|
|
203
|
+
/** Operations specific to object values */
|
|
204
|
+
type ObjectOps<T, A = any> = BaseOps<T, A> & {
|
|
205
|
+
/** Shallow merge the provided object into the current state */
|
|
206
|
+
_merge: (p: Partial<NonNullable<T>>) => void;
|
|
207
|
+
/** Remove a specific key from the object */
|
|
208
|
+
_delete: (k: keyof NonNullable<T>) => void;
|
|
209
|
+
} & {
|
|
210
|
+
[K in keyof NonNullable<T>]-?: TypeAwareOps<NonNullable<T>[K], A>;
|
|
211
|
+
};
|
|
212
|
+
type BooleanOps<A = any> = BaseOps<boolean, A> & {
|
|
213
|
+
_toggle: () => void;
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
export type { ActionOpsObject as A, BaseOps as B, ContextGetterOps as C, DerivedFlowDefinition as D, FlowDefinition as F, NumberOps as N, ObjectOps as O, StringOps as S, TypeAwareOps as T, UseFlowOptions as U, FlowOptions as a, FlowOperations as b, ArrayOps as c, BooleanOps as d, BoundActions as e, FlowAction as f, FlowEffect as g, FlowOpsObject as h, FlowPlugin as i };
|
package/package.json
CHANGED