fractostate 3.1.2 → 3.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -12
- package/dist/cjs/index.js +28 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/src/devtools/FractoDevTools.js.map +1 -1
- package/dist/cjs/src/plugins/storage/StorageAdapter.js +28 -0
- package/dist/cjs/src/plugins/storage/StorageAdapter.js.map +1 -1
- package/dist/cjs/src/proxy.js +28 -0
- package/dist/cjs/src/proxy.js.map +1 -1
- package/dist/cjs/src/store.js +28 -0
- package/dist/cjs/src/store.js.map +1 -1
- package/dist/esm/index.js +28 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/src/devtools/FractoDevTools.js.map +1 -1
- package/dist/esm/src/plugins/storage/StorageAdapter.js +28 -0
- package/dist/esm/src/plugins/storage/StorageAdapter.js.map +1 -1
- package/dist/esm/src/proxy.js +28 -0
- package/dist/esm/src/proxy.js.map +1 -1
- package/dist/esm/src/store.js +28 -0
- package/dist/esm/src/store.js.map +1 -1
- package/package.json +1 -4
package/README.md
CHANGED
|
@@ -90,25 +90,25 @@ FractoState v3 introduces advanced primitives designed for enterprise-scale requ
|
|
|
90
90
|
|
|
91
91
|
Reactive, read-only state nodes derived from source flows.
|
|
92
92
|
|
|
93
|
-
- [Documentation: Computed Flows](
|
|
93
|
+
- [Documentation: Computed Flows](https://fractostate.nehonix.com/docs/computed-flows)
|
|
94
94
|
|
|
95
95
|
### Native Async Actions
|
|
96
96
|
|
|
97
97
|
Encapsulated business logic with direct access to surgical operation proxies.
|
|
98
98
|
|
|
99
|
-
- [Documentation: Async Actions](
|
|
99
|
+
- [Documentation: Async Actions](https://fractostate.nehonix.com/docs/native-async-actions)
|
|
100
100
|
|
|
101
101
|
### Extensible Plugin Interface
|
|
102
102
|
|
|
103
103
|
Unified API for state persistence, telemetry, and debugging.
|
|
104
104
|
|
|
105
|
-
- [Documentation: Plugins](
|
|
105
|
+
- [Documentation: Plugins](https://fractostate.nehonix.com/docs/plugins-and-devtools)
|
|
106
106
|
|
|
107
107
|
### Surgical DevTools
|
|
108
108
|
|
|
109
109
|
Real-time state inspector with zero-configuration overhead.
|
|
110
110
|
|
|
111
|
-
- [Documentation: DevTools](
|
|
111
|
+
- [Documentation: DevTools](https://fractostate.nehonix.com/docs/plugins-and-devtools#ghost-inspector-devtools)
|
|
112
112
|
|
|
113
113
|
## Performance Benchmarks
|
|
114
114
|
|
|
@@ -124,17 +124,17 @@ FractoState is engineered for high-throughput environments. Current benchmarks d
|
|
|
124
124
|
|
|
125
125
|
While libraries like Zustand require manual immutable spreading for deep updates, FractoState achieves similar throughput with a declarative API: `ops.registry[id].child._set(data)`. This eliminates developer error in complex state transitions without sacrificing performance.
|
|
126
126
|
|
|
127
|
-
Detailed technical analysis available in: [Performance Specifications](
|
|
127
|
+
Detailed technical analysis available in: [Performance Specifications](https://fractostate.nehonix.com/docs/benchmarks).
|
|
128
128
|
|
|
129
129
|
## Documentation Reference
|
|
130
130
|
|
|
131
|
-
- [◈ Getting Started](
|
|
132
|
-
- [◈ Computed Flows](
|
|
133
|
-
- [◈ Native Async Actions](
|
|
134
|
-
- [◈ Plugin Architecture](
|
|
135
|
-
- [◈ Advanced State Control](
|
|
136
|
-
- [◈ Surgical Update Logic](
|
|
137
|
-
- [◈ Benchmark Analysis](
|
|
131
|
+
- [◈ Getting Started](https://fractostate.nehonix.com/docs/getting-started)
|
|
132
|
+
- [◈ Computed Flows](https://fractostate.nehonix.com/docs/computed-flows)
|
|
133
|
+
- [◈ Native Async Actions](https://fractostate.nehonix.com/docs/native-async-actions)
|
|
134
|
+
- [◈ Plugin Architecture](https://fractostate.nehonix.com/docs/plugins-and-devtools)
|
|
135
|
+
- [◈ Advanced State Control](https://fractostate.nehonix.com/docs/advanced-features)
|
|
136
|
+
- [◈ Surgical Update Logic](https://fractostate.nehonix.com/docs/set-vs-patch)
|
|
137
|
+
- [◈ Benchmark Analysis](https://fractostate.nehonix.com/docs/benchmarks)
|
|
138
138
|
|
|
139
139
|
---
|
|
140
140
|
|
package/dist/cjs/index.js
CHANGED
|
@@ -4,6 +4,34 @@ var react = require('react');
|
|
|
4
4
|
var store = require('./src/store.js');
|
|
5
5
|
var proxy = require('./src/proxy.js');
|
|
6
6
|
|
|
7
|
+
/* *****************************************************************************
|
|
8
|
+
* FractoSate
|
|
9
|
+
*
|
|
10
|
+
* ACCESS RESTRICTIONS:
|
|
11
|
+
* - This software is exclusively for use by Authorized Personnel of NEHONIX
|
|
12
|
+
* - Intended for Internal Use only within NEHONIX operations
|
|
13
|
+
* - No rights granted to unauthorized individuals or entities
|
|
14
|
+
* - All modifications are works made for hire assigned to NEHONIX
|
|
15
|
+
*
|
|
16
|
+
* PROHIBITED ACTIVITIES:
|
|
17
|
+
* - Copying, distributing, or sublicensing without written permission
|
|
18
|
+
* - Reverse engineering, decompiling, or disassembling
|
|
19
|
+
* - Creating derivative works without explicit authorization
|
|
20
|
+
* - External use or commercial distribution outside NEHONIX
|
|
21
|
+
*
|
|
22
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
|
+
* SOFTWARE.
|
|
29
|
+
*
|
|
30
|
+
* For questions or permissions, contact:
|
|
31
|
+
* NEHONIX Legal Department
|
|
32
|
+
* Email: legal@nehonix.com
|
|
33
|
+
* Website: www.nehonix.com
|
|
34
|
+
***************************************************************************** */
|
|
7
35
|
/**
|
|
8
36
|
* Defines a derived flow that reacts to changes in a source flow.
|
|
9
37
|
* Use this for computed values that shouldn't be manually modified.
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n FlowOpsObject,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\nexport * from \"./types\";\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n return {\n key: derivedKey || `${source.key}_derived_${Date.now()}`,\n source,\n selector,\n };\n}\n\n/**\n * Defines a state flow with 100% type inference for state and actions.\n * @param key Unique key for the flow\n * @param initial Initial state value\n * @param options Flow configuration and optional actions\n */\nexport function defineFlow<T, A>(\n key: string,\n initial: T,\n options: FlowOptions<NoInfer<T>> & {\n actions: A & {\n [K in keyof A]: (\n ...args: any[]\n ) => (ops: FlowOpsObject<NoInfer<T>>) => any;\n };\n },\n): FlowDefinition<T, A>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>>,\n): FlowDefinition<T, {}>;\nexport function defineFlow<T, A>(\n key: string,\n initial: T,\n options?: FlowOptions<T> & { actions?: A },\n): FlowDefinition<T, A> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: FlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A>(\n def: FlowDefinition<T, A>,\n options?: FlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...options }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [state, setState] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n return store.subscribe(key, () => {\n const raw = store.get(key, initialVal);\n setState(isDerived ? (keyOrDef as any).selector(raw) : raw);\n });\n }, [key, isDerived]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const defaultOps = {\n get self() {\n return createDeepProxy(\n key,\n [],\n store.get(key, initialVal),\n flowOptions,\n );\n },\n get state() {\n return store.get(key, initialVal);\n },\n };\n\n const boundActions = {} as any;\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, { ...flowOptions, force: true });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, { ...flowOptions, force: false });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, state, flowOptions]);\n\n return [state, toolbox] as any;\n}\n"],"names":["useState","store","useEffect","useMemo","createDeepProxy"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FractoDevTools.js","sources":["../../../../src/devtools/FractoDevTools.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from \"react\";\nimport { store } from \"../store\";\nimport \"./FractoDevTools.css\";\n\ninterface FractoDevToolsProps {\n position?: \"left\" | \"right\";\n initialOpen?: boolean;\n}\n\ntype ViewMode = \"all\" | \"objects\" | \"arrays\" | \"primitives\";\n\nexport const FractoDevTools = ({\n position = \"left\",\n initialOpen = false,\n}: FractoDevToolsProps) => {\n const [isOpen, setIsOpen] = useState(initialOpen);\n const [snapshot, setSnapshot] = useState<\n Record<string, { value: any; meta: any }>\n >({});\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [viewMode, setViewMode] = useState<ViewMode>(\"all\");\n const [collapsedFlows, setCollapsedFlows] = useState<Set<string>>(new Set());\n const [copiedKey, setCopiedKey] = useState<string | null>(null);\n const [flowCount, setFlowCount] = useState(0);\n\n // Dragging state\n const [coords, setCoords] = useState({ x: 20, y: 20 });\n const [isDragging, setIsDragging] = useState(false);\n\n useEffect(() => {\n const updateCount = () => {\n setFlowCount(Object.keys(store.getDebugSnapshot()).length);\n };\n updateCount();\n return store.subscribeGlobal(updateCount);\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n\n setSnapshot(store.getDebugSnapshot());\n const unsub = store.subscribeGlobal(() => {\n setSnapshot(store.getDebugSnapshot());\n });\n\n return unsub;\n }, [isOpen]);\n\n const filteredEntries = useMemo(() => {\n let entries = Object.entries(snapshot);\n\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n entries = entries.filter(([key, data]) => {\n const keyMatch = key.toLowerCase().includes(query);\n const valueMatch = JSON.stringify(data.value)\n .toLowerCase()\n .includes(query);\n return keyMatch || valueMatch;\n });\n }\n\n if (viewMode !== \"all\") {\n entries = entries.filter(([_, data]) => {\n const value = data.value;\n if (viewMode === \"objects\") {\n return (\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n );\n }\n if (viewMode === \"arrays\") {\n return Array.isArray(value);\n }\n if (viewMode === \"primitives\") {\n return typeof value !== \"object\" || value === null;\n }\n return true;\n });\n }\n\n return entries;\n }, [snapshot, searchQuery, viewMode]);\n\n const stats = useMemo(() => {\n const entries = Object.values(snapshot);\n return {\n total: entries.length,\n objects: entries.filter(\n (d) =>\n typeof d.value === \"object\" &&\n d.value !== null &&\n !Array.isArray(d.value),\n ).length,\n arrays: entries.filter((d) => Array.isArray(d.value)).length,\n primitives: entries.filter(\n (d) => typeof d.value !== \"object\" || d.value === null,\n ).length,\n };\n }, [snapshot]);\n\n const toggleCollapse = (key: string) => {\n setCollapsedFlows((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n const collapseAll = () => {\n const keys = Object.keys(snapshot);\n setCollapsedFlows(new Set(keys));\n };\n\n const expandAll = () => {\n setCollapsedFlows(new Set());\n };\n\n const handleCopy = (key: string, value: any) => {\n navigator.clipboard.writeText(JSON.stringify(value, null, 2));\n setCopiedKey(key);\n setTimeout(() => setCopiedKey(null), 2000);\n };\n\n const getValueType = (value: any): string => {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return `array[${value.length}]`;\n if (typeof value === \"object\")\n return `object{${Object.keys(value).length}}`;\n return typeof value;\n };\n\n // Drag logic\n const handleMouseDown = (e: React.MouseEvent) => {\n setIsDragging(false);\n const startX = e.clientX;\n const startY = e.clientY;\n const initialCoords = { ...coords };\n\n const onMouseMove = (moveEvent: MouseEvent) => {\n if (\n Math.abs(moveEvent.clientX - startX) > 5 ||\n Math.abs(moveEvent.clientY - startY) > 5\n ) {\n setIsDragging(true);\n }\n\n const dx =\n position === \"left\"\n ? moveEvent.clientX - startX\n : startX - moveEvent.clientX;\n const dy = startY - moveEvent.clientY;\n\n setCoords({\n x: Math.max(0, initialCoords.x + dx),\n y: Math.max(0, initialCoords.y + dy),\n });\n };\n\n const onMouseUp = () => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n };\n\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n };\n\n const positionStyle: React.CSSProperties = {\n [position]: `${coords.x}px`,\n bottom: `${coords.y}px`,\n };\n\n if (!isOpen) {\n return (\n <button\n onMouseDown={handleMouseDown}\n onClick={() => !isDragging && setIsOpen(true)}\n className={`fracto-devtools-button position-${position}`}\n style={{ ...positionStyle, cursor: isDragging ? \"grabbing\" : \"grab\" }}\n title=\"Open FractoState DevTools (Draggable)\"\n >\n F\n {flowCount > 0 && (\n <span className=\"fracto-devtools-badge-count\">{flowCount}</span>\n )}\n </button>\n );\n }\n\n return (\n <div\n className={`fracto-devtools-panel position-${position}`}\n style={positionStyle}\n >\n <div className=\"fracto-devtools-header\">\n <div className=\"fracto-devtools-header-content\">\n <div className=\"fracto-devtools-logo\">F</div>\n <div>\n <div className=\"fracto-devtools-title\">\n Fracto<span className=\"fracto-devtools-title-state\">State</span>\n </div>\n <div className=\"fracto-devtools-subtitle\">Advanced Inspector</div>\n </div>\n </div>\n <button\n onClick={() => setIsOpen(false)}\n className=\"fracto-devtools-close\"\n >\n ×\n </button>\n </div>\n\n <div className=\"fracto-devtools-toolbar\">\n <div className=\"fracto-devtools-search-container\">\n <span className=\"fracto-devtools-search-icon\">🔍</span>\n <input\n type=\"text\"\n className=\"fracto-devtools-search\"\n placeholder=\"Search flows...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n {searchQuery && (\n <button\n className=\"fracto-devtools-clear-search\"\n onClick={() => setSearchQuery(\"\")}\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"fracto-devtools-filters\">\n <div className=\"fracto-devtools-filter-buttons\">\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"all\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"all\")}\n >\n All ({stats.total})\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"objects\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"objects\")}\n >\n Objects\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"arrays\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"arrays\")}\n >\n Arrays\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"primitives\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"primitives\")}\n >\n Primitives\n </button>\n </div>\n\n <div className=\"fracto-devtools-actions\">\n <button\n onClick={collapseAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Collapse All\"\n >\n ⇊\n </button>\n <button\n onClick={expandAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Expand All\"\n >\n ⇈\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"fracto-devtools-content\">\n {filteredEntries.length === 0 ? (\n <div className=\"fracto-devtools-empty\">No flows detected</div>\n ) : (\n filteredEntries.map(([key, data]) => (\n <div\n key={key}\n className={`fracto-devtools-flow ${collapsedFlows.has(key) ? \"collapsed\" : \"\"}`}\n >\n <div\n className=\"fracto-devtools-flow-header\"\n onClick={() => toggleCollapse(key)}\n >\n <div className=\"fracto-devtools-flow-header-left\">\n <span className=\"fracto-devtools-flow-collapse-icon\">▼</span>\n <div className=\"fracto-devtools-flow-key\">{key}</div>\n {data.meta.isDebouncing && (\n <span\n className=\"fracto-devtools-meta-tag\"\n title=\"Sync pending\"\n >\n ⏳\n </span>\n )}\n </div>\n <div className=\"fracto-devtools-flow-actions\">\n <span className=\"fracto-devtools-flow-badge\">\n {getValueType(data.value)}\n </span>\n <button\n className={`fracto-devtools-flow-action ${copiedKey === key ? \"copied\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleCopy(key, data.value);\n }}\n >\n {copiedKey === key ? \"✓\" : \"❐\"}\n </button>\n </div>\n </div>\n\n {!collapsedFlows.has(key) && (\n <div className=\"fracto-devtools-flow-expanded\">\n <div className=\"fracto-devtools-meta-grid\">\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Listeners:</span>\n <span className=\"value\">{data.meta.listeners}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">History:</span>\n <span className=\"value\">{data.meta.historySize}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Redo:</span>\n <span className=\"value\">{data.meta.redoSize}</span>\n </div>\n </div>\n <pre className=\"fracto-devtools-flow-content\">\n {JSON.stringify(data.value, null, 2)}\n </pre>\n </div>\n )}\n {copiedKey === key && (\n <div className=\"fracto-devtools-copy-toast\">Copied!</div>\n )}\n </div>\n ))\n )}\n </div>\n\n <div className=\"fracto-devtools-footer\">\n <span>FractoState Engine v1.0.2</span>\n <span className=\"fracto-devtools-footer-count\">\n {filteredEntries.length} items\n </span>\n </div>\n </div>\n );\n};\n"],"names":["useState","useEffect","store","useMemo","_jsxs","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FractoDevTools.js","sources":["../../../../src/devtools/FractoDevTools.tsx"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport { store } from \"../store\";\nimport \"./FractoDevTools.css\";\n\ninterface FractoDevToolsProps {\n position?: \"left\" | \"right\";\n initialOpen?: boolean;\n}\n\ntype ViewMode = \"all\" | \"objects\" | \"arrays\" | \"primitives\";\n\nexport const FractoDevTools = ({\n position = \"left\",\n initialOpen = false,\n}: FractoDevToolsProps) => {\n const [isOpen, setIsOpen] = useState(initialOpen);\n const [snapshot, setSnapshot] = useState<\n Record<string, { value: any; meta: any }>\n >({});\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [viewMode, setViewMode] = useState<ViewMode>(\"all\");\n const [collapsedFlows, setCollapsedFlows] = useState<Set<string>>(new Set());\n const [copiedKey, setCopiedKey] = useState<string | null>(null);\n const [flowCount, setFlowCount] = useState(0);\n\n // Dragging state\n const [coords, setCoords] = useState({ x: 20, y: 20 });\n const [isDragging, setIsDragging] = useState(false);\n\n useEffect(() => {\n const updateCount = () => {\n setFlowCount(Object.keys(store.getDebugSnapshot()).length);\n };\n updateCount();\n return store.subscribeGlobal(updateCount);\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n\n setSnapshot(store.getDebugSnapshot());\n const unsub = store.subscribeGlobal(() => {\n setSnapshot(store.getDebugSnapshot());\n });\n\n return unsub;\n }, [isOpen]);\n\n const filteredEntries = useMemo(() => {\n let entries = Object.entries(snapshot);\n\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n entries = entries.filter(([key, data]) => {\n const keyMatch = key.toLowerCase().includes(query);\n const valueMatch = JSON.stringify(data.value)\n .toLowerCase()\n .includes(query);\n return keyMatch || valueMatch;\n });\n }\n\n if (viewMode !== \"all\") {\n entries = entries.filter(([_, data]) => {\n const value = data.value;\n if (viewMode === \"objects\") {\n return (\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n );\n }\n if (viewMode === \"arrays\") {\n return Array.isArray(value);\n }\n if (viewMode === \"primitives\") {\n return typeof value !== \"object\" || value === null;\n }\n return true;\n });\n }\n\n return entries;\n }, [snapshot, searchQuery, viewMode]);\n\n const stats = useMemo(() => {\n const entries = Object.values(snapshot);\n return {\n total: entries.length,\n objects: entries.filter(\n (d) =>\n typeof d.value === \"object\" &&\n d.value !== null &&\n !Array.isArray(d.value),\n ).length,\n arrays: entries.filter((d) => Array.isArray(d.value)).length,\n primitives: entries.filter(\n (d) => typeof d.value !== \"object\" || d.value === null,\n ).length,\n };\n }, [snapshot]);\n\n const toggleCollapse = (key: string) => {\n setCollapsedFlows((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n const collapseAll = () => {\n const keys = Object.keys(snapshot);\n setCollapsedFlows(new Set(keys));\n };\n\n const expandAll = () => {\n setCollapsedFlows(new Set());\n };\n\n const handleCopy = (key: string, value: any) => {\n navigator.clipboard.writeText(JSON.stringify(value, null, 2));\n setCopiedKey(key);\n setTimeout(() => setCopiedKey(null), 2000);\n };\n\n const getValueType = (value: any): string => {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return `array[${value.length}]`;\n if (typeof value === \"object\")\n return `object{${Object.keys(value).length}}`;\n return typeof value;\n };\n\n // Drag logic\n const handleMouseDown = (e: React.MouseEvent) => {\n setIsDragging(false);\n const startX = e.clientX;\n const startY = e.clientY;\n const initialCoords = { ...coords };\n\n const onMouseMove = (moveEvent: MouseEvent) => {\n if (\n Math.abs(moveEvent.clientX - startX) > 5 ||\n Math.abs(moveEvent.clientY - startY) > 5\n ) {\n setIsDragging(true);\n }\n\n const dx =\n position === \"left\"\n ? moveEvent.clientX - startX\n : startX - moveEvent.clientX;\n const dy = startY - moveEvent.clientY;\n\n setCoords({\n x: Math.max(0, initialCoords.x + dx),\n y: Math.max(0, initialCoords.y + dy),\n });\n };\n\n const onMouseUp = () => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n };\n\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n };\n\n const positionStyle: React.CSSProperties = {\n [position]: `${coords.x}px`,\n bottom: `${coords.y}px`,\n };\n\n if (!isOpen) {\n return (\n <button\n onMouseDown={handleMouseDown}\n onClick={() => !isDragging && setIsOpen(true)}\n className={`fracto-devtools-button position-${position}`}\n style={{ ...positionStyle, cursor: isDragging ? \"grabbing\" : \"grab\" }}\n title=\"Open FractoState DevTools (Draggable)\"\n >\n F\n {flowCount > 0 && (\n <span className=\"fracto-devtools-badge-count\">{flowCount}</span>\n )}\n </button>\n );\n }\n\n return (\n <div\n className={`fracto-devtools-panel position-${position}`}\n style={positionStyle}\n >\n <div className=\"fracto-devtools-header\">\n <div className=\"fracto-devtools-header-content\">\n <div className=\"fracto-devtools-logo\">F</div>\n <div>\n <div className=\"fracto-devtools-title\">\n Fracto<span className=\"fracto-devtools-title-state\">State</span>\n </div>\n <div className=\"fracto-devtools-subtitle\">Advanced Inspector</div>\n </div>\n </div>\n <button\n onClick={() => setIsOpen(false)}\n className=\"fracto-devtools-close\"\n >\n ×\n </button>\n </div>\n\n <div className=\"fracto-devtools-toolbar\">\n <div className=\"fracto-devtools-search-container\">\n <span className=\"fracto-devtools-search-icon\">🔍</span>\n <input\n type=\"text\"\n className=\"fracto-devtools-search\"\n placeholder=\"Search flows...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n {searchQuery && (\n <button\n className=\"fracto-devtools-clear-search\"\n onClick={() => setSearchQuery(\"\")}\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"fracto-devtools-filters\">\n <div className=\"fracto-devtools-filter-buttons\">\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"all\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"all\")}\n >\n All ({stats.total})\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"objects\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"objects\")}\n >\n Objects\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"arrays\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"arrays\")}\n >\n Arrays\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"primitives\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"primitives\")}\n >\n Primitives\n </button>\n </div>\n\n <div className=\"fracto-devtools-actions\">\n <button\n onClick={collapseAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Collapse All\"\n >\n ⇊\n </button>\n <button\n onClick={expandAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Expand All\"\n >\n ⇈\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"fracto-devtools-content\">\n {filteredEntries.length === 0 ? (\n <div className=\"fracto-devtools-empty\">No flows detected</div>\n ) : (\n filteredEntries.map(([key, data]) => (\n <div\n key={key}\n className={`fracto-devtools-flow ${collapsedFlows.has(key) ? \"collapsed\" : \"\"}`}\n >\n <div\n className=\"fracto-devtools-flow-header\"\n onClick={() => toggleCollapse(key)}\n >\n <div className=\"fracto-devtools-flow-header-left\">\n <span className=\"fracto-devtools-flow-collapse-icon\">▼</span>\n <div className=\"fracto-devtools-flow-key\">{key}</div>\n {data.meta.isDebouncing && (\n <span\n className=\"fracto-devtools-meta-tag\"\n title=\"Sync pending\"\n >\n ⏳\n </span>\n )}\n </div>\n <div className=\"fracto-devtools-flow-actions\">\n <span className=\"fracto-devtools-flow-badge\">\n {getValueType(data.value)}\n </span>\n <button\n className={`fracto-devtools-flow-action ${copiedKey === key ? \"copied\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleCopy(key, data.value);\n }}\n >\n {copiedKey === key ? \"✓\" : \"❐\"}\n </button>\n </div>\n </div>\n\n {!collapsedFlows.has(key) && (\n <div className=\"fracto-devtools-flow-expanded\">\n <div className=\"fracto-devtools-meta-grid\">\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Listeners:</span>\n <span className=\"value\">{data.meta.listeners}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">History:</span>\n <span className=\"value\">{data.meta.historySize}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Redo:</span>\n <span className=\"value\">{data.meta.redoSize}</span>\n </div>\n </div>\n <pre className=\"fracto-devtools-flow-content\">\n {JSON.stringify(data.value, null, 2)}\n </pre>\n </div>\n )}\n {copiedKey === key && (\n <div className=\"fracto-devtools-copy-toast\">Copied!</div>\n )}\n </div>\n ))\n )}\n </div>\n\n <div className=\"fracto-devtools-footer\">\n <span>FractoState Engine v1.0.2</span>\n <span className=\"fracto-devtools-footer-count\">\n {filteredEntries.length} items\n </span>\n </div>\n </div>\n );\n};\n"],"names":["useState","useEffect","store","useMemo","_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
/* *****************************************************************************
|
|
4
|
+
* FractoSate
|
|
5
|
+
*
|
|
6
|
+
* ACCESS RESTRICTIONS:
|
|
7
|
+
* - This software is exclusively for use by Authorized Personnel of NEHONIX
|
|
8
|
+
* - Intended for Internal Use only within NEHONIX operations
|
|
9
|
+
* - No rights granted to unauthorized individuals or entities
|
|
10
|
+
* - All modifications are works made for hire assigned to NEHONIX
|
|
11
|
+
*
|
|
12
|
+
* PROHIBITED ACTIVITIES:
|
|
13
|
+
* - Copying, distributing, or sublicensing without written permission
|
|
14
|
+
* - Reverse engineering, decompiling, or disassembling
|
|
15
|
+
* - Creating derivative works without explicit authorization
|
|
16
|
+
* - External use or commercial distribution outside NEHONIX
|
|
17
|
+
*
|
|
18
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
* SOFTWARE.
|
|
25
|
+
*
|
|
26
|
+
* For questions or permissions, contact:
|
|
27
|
+
* NEHONIX Legal Department
|
|
28
|
+
* Email: legal@nehonix.com
|
|
29
|
+
* Website: www.nehonix.com
|
|
30
|
+
***************************************************************************** */
|
|
3
31
|
class StorageAdapter {
|
|
4
32
|
constructor() {
|
|
5
33
|
Object.defineProperty(this, "IDB_NAME", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageAdapter.js","sources":["../../../../../src/plugins/storage/StorageAdapter.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"StorageAdapter.js","sources":["../../../../../src/plugins/storage/StorageAdapter.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 { FlowPlugin } from \"../../types\";\nimport { PersistOptions } from \"../types/pluginTypes\";\n\nexport class StorageAdapter {\n private IDB_NAME = \"FractoVaultDB\";\n private STORE_NAME = \"kvp\"; // kvp = key_value_pairs\n\n private getIDB() {\n return new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this.IDB_NAME, 1);\n request.onupgradeneeded = () =>\n request.result.createObjectStore(this.STORE_NAME);\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n }\n\n private async idbGet(key: string): Promise<any> {\n const db = await this.getIDB();\n return new Promise((resolve) => {\n const req = db\n .transaction(this.STORE_NAME)\n .objectStore(this.STORE_NAME)\n .get(key);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => resolve(null);\n });\n }\n\n private async idbSet(key: string, value: any): Promise<void> {\n const db = await this.getIDB();\n return new Promise((resolve) => {\n const req = db\n .transaction(this.STORE_NAME, \"readwrite\")\n .objectStore(this.STORE_NAME)\n .put(value, key);\n req.onsuccess = () => resolve();\n });\n }\n\n public persist(\n $key: string | undefined,\n type: PersistOptions[\"storage\"],\n ): FlowPlugin {\n if (!type) throw new Error(\"No storage type provided\");\n\n return {\n name: \"persist\",\n onHydrate: ({ key: hkey, store }) => {\n const storageKey = $key || `fracto_flow_${hkey}`;\n\n // Notify engine of async task\n (store as any).__hydrating__?.add($key);\n\n const done = (val: any) => {\n (store as any).__hydrating__?.delete($key);\n return val;\n };\n\n if (type === \"indexedDB\") {\n return this.idbGet(storageKey).then((data) =>\n done(data ? JSON.parse(data) : undefined),\n );\n }\n\n if (typeof window === \"undefined\") return done(undefined);\n const raw = window[type].getItem(storageKey);\n return done(raw ? JSON.parse(raw) : undefined);\n },\n\n onUpdate: ({ key: hkey, next }) => {\n const storageKey = $key || `fracto_flow_${hkey}`;\n const json = JSON.stringify(next);\n\n if (type === \"indexedDB\") {\n this.idbSet(storageKey, json);\n } else if (typeof window !== \"undefined\") {\n window[type].setItem(storageKey, json);\n }\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/cjs/src/proxy.js
CHANGED
|
@@ -2,6 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
var store = require('./store.js');
|
|
4
4
|
|
|
5
|
+
/* *****************************************************************************
|
|
6
|
+
* FractoSate
|
|
7
|
+
*
|
|
8
|
+
* ACCESS RESTRICTIONS:
|
|
9
|
+
* - This software is exclusively for use by Authorized Personnel of NEHONIX
|
|
10
|
+
* - Intended for Internal Use only within NEHONIX operations
|
|
11
|
+
* - No rights granted to unauthorized individuals or entities
|
|
12
|
+
* - All modifications are works made for hire assigned to NEHONIX
|
|
13
|
+
*
|
|
14
|
+
* PROHIBITED ACTIVITIES:
|
|
15
|
+
* - Copying, distributing, or sublicensing without written permission
|
|
16
|
+
* - Reverse engineering, decompiling, or disassembling
|
|
17
|
+
* - Creating derivative works without explicit authorization
|
|
18
|
+
* - External use or commercial distribution outside NEHONIX
|
|
19
|
+
*
|
|
20
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
* SOFTWARE.
|
|
27
|
+
*
|
|
28
|
+
* For questions or permissions, contact:
|
|
29
|
+
* NEHONIX Legal Department
|
|
30
|
+
* Email: legal@nehonix.com
|
|
31
|
+
* Website: www.nehonix.com
|
|
32
|
+
***************************************************************************** */
|
|
5
33
|
/**
|
|
6
34
|
* Creates a deep proxy that provides type-specific atomic operations for a flow.
|
|
7
35
|
* The proxy tracks its path within the state tree and maps access to specific update logic.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.ts"],"sourcesContent":["import type { FlowOptions, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\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 */\nexport function createDeepProxy<T = any>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T> {\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n const newPath = [...path, prop];\n\n /**\n * CORE COMMITTER\n * Always resolves the freshest state from the store before applying the path update.\n * This prevents \"stale state\" issues during mass sequential updates.\n */\n const commit = (val: any, forceful: boolean, skipEquality = false) => {\n try {\n const currentState = store.get(key, undefined);\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n });\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // --- Meta-Operations ---\n\n // Read current value\n if (prop === \"_val\") return currentVal;\n\n // Generic property replacement (Forceful)\n if (prop === \"_set\") return (val: any) => commit(val, true);\n\n // Smart property replacement (Skip if equal)\n if (prop === \"_patch\") return (val: any) => commit(val, false);\n\n // Helper for type-specific operators\n const update = (val: any) => commit(val, false, true);\n\n // --- Type-Specific Atomic Operations ---\n\n // Number Operations\n if (typeof currentVal === \"number\") {\n if (prop === \"_increment\")\n return (amount = 1) => update(currentVal + amount);\n if (prop === \"_decrement\")\n return (amount = 1) => update(currentVal - amount);\n if (prop === \"_add\")\n return (amount: number) => update(currentVal + amount);\n if (prop === \"_subtract\")\n return (amount: number) => update(currentVal - amount);\n if (prop === \"_multiply\")\n return (amount: number) => update(currentVal * amount);\n if (prop === \"_divide\")\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n update(currentVal / amount);\n };\n }\n\n // Array Operations\n if (Array.isArray(currentVal)) {\n if (prop === \"_push\")\n return (item: any) => update([...currentVal, item]);\n if (prop === \"_pop\") return () => update(currentVal.slice(0, -1));\n if (prop === \"_shift\") return () => update(currentVal.slice(1));\n if (prop === \"_unshift\")\n return (item: any) => update([item, ...currentVal]);\n if (prop === \"_filter\")\n return (fn: any) => update(currentVal.filter(fn));\n if (prop === \"_map\") return (fn: any) => update(currentVal.map(fn));\n if (prop === \"_removeAt\")\n return (index: number) =>\n update(currentVal.filter((_, i) => i !== index));\n if (prop === \"_insertAt\")\n return (index: number, item: any) => {\n const next = [...currentVal];\n next.splice(index, 0, item);\n update(next);\n };\n }\n\n // String Operations\n if (typeof currentVal === \"string\") {\n if (prop === \"_append\")\n return (str: string) => update(currentVal + str);\n if (prop === \"_prepend\")\n return (str: string) => update(str + currentVal);\n if (prop === \"_uppercase\")\n return () => update(currentVal.toUpperCase());\n if (prop === \"_lowercase\")\n return () => update(currentVal.toLowerCase());\n if (prop === \"_trim\") return () => update(currentVal.trim());\n }\n\n // Object Operations\n if (\n currentVal !== null &&\n typeof currentVal === \"object\" &&\n !Array.isArray(currentVal)\n ) {\n if (prop === \"_merge\")\n return (obj: any) => update({ ...currentVal, ...obj });\n if (prop === \"_delete\")\n return (keyToDel: string) => {\n const next = { ...currentVal };\n delete next[keyToDel];\n update(next);\n };\n }\n\n // Recursive step: create a new proxy for the child property\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n 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>;\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 if (path.length === 0) return value;\n\n const [head, ...tail] = path;\n\n if (Array.isArray(obj)) {\n const index = parseInt(head, 10);\n if (isNaN(index) || index < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n const newArr = [...obj];\n if (index >= newArr.length) newArr.length = index + 1;\n newArr[index] = setInPath(newArr[index], tail, value);\n return newArr;\n }\n\n const currentObj = obj ?? {};\n return {\n ...currentObj,\n [head]: setInPath(currentObj[head], tail, value),\n };\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/**\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 */\nexport function createDeepProxy<T = any>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T> {\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n const newPath = [...path, prop];\n\n /**\n * CORE COMMITTER\n * Always resolves the freshest state from the store before applying the path update.\n * This prevents \"stale state\" issues during mass sequential updates.\n */\n const commit = (val: any, forceful: boolean, skipEquality = false) => {\n try {\n const currentState = store.get(key, undefined);\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n });\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // --- Meta-Operations ---\n\n // Read current value\n if (prop === \"_val\") return currentVal;\n\n // Generic property replacement (Forceful)\n if (prop === \"_set\") return (val: any) => commit(val, true);\n\n // Smart property replacement (Skip if equal)\n if (prop === \"_patch\") return (val: any) => commit(val, false);\n\n // Helper for type-specific operators\n const update = (val: any) => commit(val, false, true);\n\n // --- Type-Specific Atomic Operations ---\n\n // Number Operations\n if (typeof currentVal === \"number\") {\n if (prop === \"_increment\")\n return (amount = 1) => update(currentVal + amount);\n if (prop === \"_decrement\")\n return (amount = 1) => update(currentVal - amount);\n if (prop === \"_add\")\n return (amount: number) => update(currentVal + amount);\n if (prop === \"_subtract\")\n return (amount: number) => update(currentVal - amount);\n if (prop === \"_multiply\")\n return (amount: number) => update(currentVal * amount);\n if (prop === \"_divide\")\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n update(currentVal / amount);\n };\n }\n\n // Array Operations\n if (Array.isArray(currentVal)) {\n if (prop === \"_push\")\n return (item: any) => update([...currentVal, item]);\n if (prop === \"_pop\") return () => update(currentVal.slice(0, -1));\n if (prop === \"_shift\") return () => update(currentVal.slice(1));\n if (prop === \"_unshift\")\n return (item: any) => update([item, ...currentVal]);\n if (prop === \"_filter\")\n return (fn: any) => update(currentVal.filter(fn));\n if (prop === \"_map\") return (fn: any) => update(currentVal.map(fn));\n if (prop === \"_removeAt\")\n return (index: number) =>\n update(currentVal.filter((_, i) => i !== index));\n if (prop === \"_insertAt\")\n return (index: number, item: any) => {\n const next = [...currentVal];\n next.splice(index, 0, item);\n update(next);\n };\n }\n\n // String Operations\n if (typeof currentVal === \"string\") {\n if (prop === \"_append\")\n return (str: string) => update(currentVal + str);\n if (prop === \"_prepend\")\n return (str: string) => update(str + currentVal);\n if (prop === \"_uppercase\")\n return () => update(currentVal.toUpperCase());\n if (prop === \"_lowercase\")\n return () => update(currentVal.toLowerCase());\n if (prop === \"_trim\") return () => update(currentVal.trim());\n }\n\n // Object Operations\n if (\n currentVal !== null &&\n typeof currentVal === \"object\" &&\n !Array.isArray(currentVal)\n ) {\n if (prop === \"_merge\")\n return (obj: any) => update({ ...currentVal, ...obj });\n if (prop === \"_delete\")\n return (keyToDel: string) => {\n const next = { ...currentVal };\n delete next[keyToDel];\n update(next);\n };\n }\n\n // Recursive step: create a new proxy for the child property\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n 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>;\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 if (path.length === 0) return value;\n\n const [head, ...tail] = path;\n\n if (Array.isArray(obj)) {\n const index = parseInt(head, 10);\n if (isNaN(index) || index < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n const newArr = [...obj];\n if (index >= newArr.length) newArr.length = index + 1;\n newArr[index] = setInPath(newArr[index], tail, value);\n return newArr;\n }\n\n const currentObj = obj ?? {};\n return {\n ...currentObj,\n [head]: setInPath(currentObj[head], tail, value),\n };\n}\n"],"names":["store"],"mappings":"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"}
|
package/dist/cjs/src/store.js
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
/* *****************************************************************************
|
|
4
|
+
* FractoSate
|
|
5
|
+
*
|
|
6
|
+
* ACCESS RESTRICTIONS:
|
|
7
|
+
* - This software is exclusively for use by Authorized Personnel of NEHONIX
|
|
8
|
+
* - Intended for Internal Use only within NEHONIX operations
|
|
9
|
+
* - No rights granted to unauthorized individuals or entities
|
|
10
|
+
* - All modifications are works made for hire assigned to NEHONIX
|
|
11
|
+
*
|
|
12
|
+
* PROHIBITED ACTIVITIES:
|
|
13
|
+
* - Copying, distributing, or sublicensing without written permission
|
|
14
|
+
* - Reverse engineering, decompiling, or disassembling
|
|
15
|
+
* - Creating derivative works without explicit authorization
|
|
16
|
+
* - External use or commercial distribution outside NEHONIX
|
|
17
|
+
*
|
|
18
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
* SOFTWARE.
|
|
25
|
+
*
|
|
26
|
+
* For questions or permissions, contact:
|
|
27
|
+
* NEHONIX Legal Department
|
|
28
|
+
* Email: legal@nehonix.com
|
|
29
|
+
* Website: www.nehonix.com
|
|
30
|
+
***************************************************************************** */
|
|
3
31
|
/**
|
|
4
32
|
* Fast & Isolated Memory Vault
|
|
5
33
|
* Ultra-performant in-memory store with deep cloning and batching
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sources":["../../../src/store.ts"],"sourcesContent":["import type { FlowOptions } from \"./types\";\n\n/**\n * Fast & Isolated Memory Vault\n * Ultra-performant in-memory store with deep cloning and batching\n * NO PERSISTENCE - Pure memory for maximum safety and speed\n */\nclass MemoryVault {\n private vault = new Map<string, any>();\n private initialValues = new Map<string, any>();\n private listeners = new Map<string, Set<() => void>>();\n private histories = new Map<string, CircularBuffer<any>>();\n private redoStacks = new Map<string, any[]>();\n private debounceTimers = new Map<string, number>();\n private batchQueue = new Set<string>();\n private batchScheduled = false;\n\n /** Internal tracking for async hydration (plugins) */\n public __hydrating__ = new Set<string>();\n\n constructor() {\n this.setupGlobalAccess();\n this.setupAutoCleanup();\n }\n\n /**\n * Defines a global accessor for internal debugging (DevTools).\n */\n private setupGlobalAccess() {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.__FRACTO_VAULT__ = this;\n }\n }\n\n /**\n * Periodically cleans up orphaned listeners.\n */\n private setupAutoCleanup() {\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => {\n this.listeners.forEach((set, key) => {\n if (set.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n });\n }, 300000); // 5 min\n }\n }\n\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n get(key: string, initialValue?: any, options?: FlowOptions) {\n if (!this.vault.has(key)) {\n if (initialValue === undefined) return undefined;\n\n let startingValue = deepClone(initialValue);\n\n // Plugin Hook: onHydrate\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.onHydrate) {\n const hydrated = plugin.onHydrate({ key, store: this });\n if (hydrated !== undefined) {\n if (hydrated instanceof Promise) {\n hydrated.then((val) => {\n if (val !== undefined) this.set(key, val, options);\n });\n } else {\n startingValue = hydrated;\n break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\n\n // Plugin Hook: onInit\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n plugin.onInit?.({ key, initial: startingValue, store: this });\n }\n }\n }\n\n const val = this.vault.get(key);\n return val === undefined ? initialValue : val;\n }\n\n /**\n * Updates state in the vault with optional debouncing and middleware support.\n */\n set(key: string, newValue: any, options: FlowOptions = {}) {\n const prevState = this.vault.get(key);\n let stateToSet = newValue;\n\n // Apply synchronous middleware\n if (options.middleware) {\n for (const fn of options.middleware) {\n stateToSet = fn(stateToSet);\n }\n }\n\n // Skip update if state has not changed (Deep equality check) unless 'force' or 'skipEquality' is true\n if (\n !options.force &&\n !options.skipEquality &&\n deepEqual(prevState, stateToSet)\n )\n return;\n\n if (options.debounce) {\n this.debouncedSet(key, stateToSet, options);\n return;\n }\n\n this.applySet(key, stateToSet, options);\n\n // Plugin Hook: onUpdate\n if (options.plugins) {\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({\n key,\n prev: prevState,\n next: stateToSet,\n store: this,\n });\n }\n }\n }\n\n /**\n * Executes a debounced state update.\n */\n private debouncedSet(key: string, value: any, options: FlowOptions) {\n const existing = this.debounceTimers.get(key);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.applySet(key, value, options);\n\n // Plugin Hook: onUpdate (Debounced)\n if (options.plugins) {\n const prevState = this.vault.get(key); // Technically prev is lost in debounce, this is best effort\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({ key, prev: prevState, next: value, store: this });\n }\n }\n\n this.debounceTimers.delete(key);\n }, options.debounce);\n\n this.debounceTimers.set(key, timer as any);\n }\n\n /**\n * Core logic for applying a state update and managing history.\n */\n private applySet(key: string, stateToSet: any, options: FlowOptions) {\n this.vault.set(key, stateToSet);\n\n if (options.timeTravel) {\n const history = this.histories.get(key);\n if (history) history.push(deepClone(stateToSet));\n const redo = this.redoStacks.get(key);\n if (redo) redo.length = 0;\n }\n\n this.scheduleBatchNotify(key);\n }\n\n /**\n * Schedules a microtask to batch notifications and optimize React renders.\n */\n private scheduleBatchNotify(key: string) {\n this.batchQueue.add(key);\n if (this.batchScheduled) return;\n this.batchScheduled = true;\n queueMicrotask(() => this.flushBatchNotify());\n }\n\n /**\n * Flushes and notifies all queued listeners.\n */\n private flushBatchNotify() {\n const keys = Array.from(this.batchQueue);\n this.batchQueue.clear();\n this.batchScheduled = false;\n keys.forEach((key) => this.notify(key));\n }\n\n private globalListeners = new Set<() => void>();\n\n /**\n * Connects a listener to a specific flow key.\n */\n subscribe(key: string, listener: () => void) {\n if (!this.listeners.has(key)) this.listeners.set(key, new Set());\n this.listeners.get(key)!.add(listener);\n return () => {\n this.listeners.get(key)?.delete(listener);\n };\n }\n\n /**\n * Subscribe to ALL changes in the store. Strictly for DevTools.\n */\n subscribeGlobal(listener: () => void) {\n this.globalListeners.add(listener);\n return () => {\n this.globalListeners.delete(listener);\n };\n }\n\n /**\n * Returns a complete snapshot of the store state for debugging.\n */\n getDebugSnapshot() {\n const snap: Record<string, any> = {};\n for (const key of this.vault.keys()) {\n snap[key] = {\n value: this.vault.get(key),\n meta: {\n historySize: this.histories.get(key)?.length() || 0,\n redoSize: this.redoStacks.get(key)?.length || 0,\n listeners: this.listeners.get(key)?.size || 0,\n isDebouncing: this.debounceTimers.has(key),\n },\n };\n }\n return snap;\n }\n\n /**\n * Directly notifies all listeners of a specific key.\n */\n private notify(key: string) {\n this.listeners.get(key)?.forEach((l) => l());\n this.globalListeners.forEach((l) => l());\n }\n\n /**\n * Reverts the state to the previous version in history.\n */\n undo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (history && history.length() > 1) {\n const current = history.pop();\n if (current) redo?.push(current);\n const prev = history.peek();\n this.vault.set(key, prev);\n this.notify(key);\n }\n }\n\n /**\n * Restores the state to the next version in the redo stack.\n */\n redo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (redo && redo.length > 0) {\n const next = redo.pop();\n history?.push(next);\n this.vault.set(key, next);\n this.notify(key);\n }\n }\n\n /**\n * Resets a flow to its initial value.\n */\n reset(key: string) {\n const initial = this.initialValues.get(key);\n if (initial !== undefined) this.set(key, initial);\n }\n\n getHistory(key: string) {\n return this.histories.get(key)?.toArray() || [];\n }\n getRedoStack(key: string) {\n return this.redoStacks.get(key) || [];\n }\n\n /**\n * Clears the entire store and all timers.\n */\n clearAll() {\n this.debounceTimers.forEach((t) => clearTimeout(t));\n this.vault.clear();\n this.initialValues.clear();\n this.listeners.clear();\n this.histories.clear();\n this.redoStacks.clear();\n }\n}\n\n/**\n * Circular Buffer implementation for high-performance memory-efficient history.\n */\nclass CircularBuffer<T> {\n private buffer: T[];\n private head = 0;\n private size = 0;\n private maxSize: number;\n\n constructor(maxSize: number, initial: T[] = []) {\n this.maxSize = maxSize;\n this.buffer = new Array(maxSize);\n initial.forEach((i) => this.push(i));\n }\n push(item: T) {\n this.buffer[this.head] = item;\n this.head = (this.head + 1) % this.maxSize;\n if (this.size < this.maxSize) this.size++;\n }\n pop(): T | undefined {\n if (this.size <= 0) return undefined;\n this.head = (this.head - 1 + this.maxSize) % this.maxSize;\n this.size--;\n return this.buffer[this.head];\n }\n peek(): T | undefined {\n return this.size > 0\n ? this.buffer[(this.head - 1 + this.maxSize) % this.maxSize]\n : undefined;\n }\n length() {\n return this.size;\n }\n toArray(): T[] {\n const res = [];\n for (let i = 0; i < this.size; i++) {\n res.push(\n this.buffer[(this.head - this.size + i + this.maxSize) % this.maxSize],\n );\n }\n return res;\n }\n}\n\n/**\n * High-performance deep cloning utility.\n */\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n if (Array.isArray(obj)) return obj.map(deepClone) as any;\n const cloned: any = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key))\n cloned[key] = deepClone(obj[key]);\n }\n return cloned;\n}\n\n/**\n * High-performance deep equality utility.\n */\nfunction deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b || a === null || b === null) return false;\n if (typeof a === \"object\") {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return false;\n}\n\nexport const store = new MemoryVault();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sources":["../../../src/store.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\n\nimport type { FlowOptions } from \"./types\";\n\n/**\n * Fast & Isolated Memory Vault\n * Ultra-performant in-memory store with deep cloning and batching\n * NO PERSISTENCE - Pure memory for maximum safety and speed\n */\nclass MemoryVault {\n private vault = new Map<string, any>();\n private initialValues = new Map<string, any>();\n private listeners = new Map<string, Set<() => void>>();\n private histories = new Map<string, CircularBuffer<any>>();\n private redoStacks = new Map<string, any[]>();\n private debounceTimers = new Map<string, number>();\n private batchQueue = new Set<string>();\n private batchScheduled = false;\n\n /** Internal tracking for async hydration (plugins) */\n public __hydrating__ = new Set<string>();\n\n constructor() {\n this.setupGlobalAccess();\n this.setupAutoCleanup();\n }\n\n /**\n * Defines a global accessor for internal debugging (DevTools).\n */\n private setupGlobalAccess() {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.__FRACTO_VAULT__ = this;\n }\n }\n\n /**\n * Periodically cleans up orphaned listeners.\n */\n private setupAutoCleanup() {\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => {\n this.listeners.forEach((set, key) => {\n if (set.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n });\n }, 300000); // 5 min\n }\n }\n\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n get(key: string, initialValue?: any, options?: FlowOptions) {\n if (!this.vault.has(key)) {\n if (initialValue === undefined) return undefined;\n\n let startingValue = deepClone(initialValue);\n\n // Plugin Hook: onHydrate\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.onHydrate) {\n const hydrated = plugin.onHydrate({ key, store: this });\n if (hydrated !== undefined) {\n if (hydrated instanceof Promise) {\n hydrated.then((val) => {\n if (val !== undefined) this.set(key, val, options);\n });\n } else {\n startingValue = hydrated;\n break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\n\n // Plugin Hook: onInit\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n plugin.onInit?.({ key, initial: startingValue, store: this });\n }\n }\n }\n\n const val = this.vault.get(key);\n return val === undefined ? initialValue : val;\n }\n\n /**\n * Updates state in the vault with optional debouncing and middleware support.\n */\n set(key: string, newValue: any, options: FlowOptions = {}) {\n const prevState = this.vault.get(key);\n let stateToSet = newValue;\n\n // Apply synchronous middleware\n if (options.middleware) {\n for (const fn of options.middleware) {\n stateToSet = fn(stateToSet);\n }\n }\n\n // Skip update if state has not changed (Deep equality check) unless 'force' or 'skipEquality' is true\n if (\n !options.force &&\n !options.skipEquality &&\n deepEqual(prevState, stateToSet)\n )\n return;\n\n if (options.debounce) {\n this.debouncedSet(key, stateToSet, options);\n return;\n }\n\n this.applySet(key, stateToSet, options);\n\n // Plugin Hook: onUpdate\n if (options.plugins) {\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({\n key,\n prev: prevState,\n next: stateToSet,\n store: this,\n });\n }\n }\n }\n\n /**\n * Executes a debounced state update.\n */\n private debouncedSet(key: string, value: any, options: FlowOptions) {\n const existing = this.debounceTimers.get(key);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.applySet(key, value, options);\n\n // Plugin Hook: onUpdate (Debounced)\n if (options.plugins) {\n const prevState = this.vault.get(key); // Technically prev is lost in debounce, this is best effort\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({ key, prev: prevState, next: value, store: this });\n }\n }\n\n this.debounceTimers.delete(key);\n }, options.debounce);\n\n this.debounceTimers.set(key, timer as any);\n }\n\n /**\n * Core logic for applying a state update and managing history.\n */\n private applySet(key: string, stateToSet: any, options: FlowOptions) {\n this.vault.set(key, stateToSet);\n\n if (options.timeTravel) {\n const history = this.histories.get(key);\n if (history) history.push(deepClone(stateToSet));\n const redo = this.redoStacks.get(key);\n if (redo) redo.length = 0;\n }\n\n this.scheduleBatchNotify(key);\n }\n\n /**\n * Schedules a microtask to batch notifications and optimize React renders.\n */\n private scheduleBatchNotify(key: string) {\n this.batchQueue.add(key);\n if (this.batchScheduled) return;\n this.batchScheduled = true;\n queueMicrotask(() => this.flushBatchNotify());\n }\n\n /**\n * Flushes and notifies all queued listeners.\n */\n private flushBatchNotify() {\n const keys = Array.from(this.batchQueue);\n this.batchQueue.clear();\n this.batchScheduled = false;\n keys.forEach((key) => this.notify(key));\n }\n\n private globalListeners = new Set<() => void>();\n\n /**\n * Connects a listener to a specific flow key.\n */\n subscribe(key: string, listener: () => void) {\n if (!this.listeners.has(key)) this.listeners.set(key, new Set());\n this.listeners.get(key)!.add(listener);\n return () => {\n this.listeners.get(key)?.delete(listener);\n };\n }\n\n /**\n * Subscribe to ALL changes in the store. Strictly for DevTools.\n */\n subscribeGlobal(listener: () => void) {\n this.globalListeners.add(listener);\n return () => {\n this.globalListeners.delete(listener);\n };\n }\n\n /**\n * Returns a complete snapshot of the store state for debugging.\n */\n getDebugSnapshot() {\n const snap: Record<string, any> = {};\n for (const key of this.vault.keys()) {\n snap[key] = {\n value: this.vault.get(key),\n meta: {\n historySize: this.histories.get(key)?.length() || 0,\n redoSize: this.redoStacks.get(key)?.length || 0,\n listeners: this.listeners.get(key)?.size || 0,\n isDebouncing: this.debounceTimers.has(key),\n },\n };\n }\n return snap;\n }\n\n /**\n * Directly notifies all listeners of a specific key.\n */\n private notify(key: string) {\n this.listeners.get(key)?.forEach((l) => l());\n this.globalListeners.forEach((l) => l());\n }\n\n /**\n * Reverts the state to the previous version in history.\n */\n undo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (history && history.length() > 1) {\n const current = history.pop();\n if (current) redo?.push(current);\n const prev = history.peek();\n this.vault.set(key, prev);\n this.notify(key);\n }\n }\n\n /**\n * Restores the state to the next version in the redo stack.\n */\n redo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (redo && redo.length > 0) {\n const next = redo.pop();\n history?.push(next);\n this.vault.set(key, next);\n this.notify(key);\n }\n }\n\n /**\n * Resets a flow to its initial value.\n */\n reset(key: string) {\n const initial = this.initialValues.get(key);\n if (initial !== undefined) this.set(key, initial);\n }\n\n getHistory(key: string) {\n return this.histories.get(key)?.toArray() || [];\n }\n getRedoStack(key: string) {\n return this.redoStacks.get(key) || [];\n }\n\n /**\n * Clears the entire store and all timers.\n */\n clearAll() {\n this.debounceTimers.forEach((t) => clearTimeout(t));\n this.vault.clear();\n this.initialValues.clear();\n this.listeners.clear();\n this.histories.clear();\n this.redoStacks.clear();\n }\n}\n\n/**\n * Circular Buffer implementation for high-performance memory-efficient history.\n */\nclass CircularBuffer<T> {\n private buffer: T[];\n private head = 0;\n private size = 0;\n private maxSize: number;\n\n constructor(maxSize: number, initial: T[] = []) {\n this.maxSize = maxSize;\n this.buffer = new Array(maxSize);\n initial.forEach((i) => this.push(i));\n }\n push(item: T) {\n this.buffer[this.head] = item;\n this.head = (this.head + 1) % this.maxSize;\n if (this.size < this.maxSize) this.size++;\n }\n pop(): T | undefined {\n if (this.size <= 0) return undefined;\n this.head = (this.head - 1 + this.maxSize) % this.maxSize;\n this.size--;\n return this.buffer[this.head];\n }\n peek(): T | undefined {\n return this.size > 0\n ? this.buffer[(this.head - 1 + this.maxSize) % this.maxSize]\n : undefined;\n }\n length() {\n return this.size;\n }\n toArray(): T[] {\n const res = [];\n for (let i = 0; i < this.size; i++) {\n res.push(\n this.buffer[(this.head - this.size + i + this.maxSize) % this.maxSize],\n );\n }\n return res;\n }\n}\n\n/**\n * High-performance deep cloning utility.\n */\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n if (Array.isArray(obj)) return obj.map(deepClone) as any;\n const cloned: any = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key))\n cloned[key] = deepClone(obj[key]);\n }\n return cloned;\n}\n\n/**\n * High-performance deep equality utility.\n */\nfunction deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b || a === null || b === null) return false;\n if (typeof a === \"object\") {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return false;\n}\n\nexport const store = new MemoryVault();\n"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -2,6 +2,34 @@ import { useState, useEffect, useMemo } from 'react';
|
|
|
2
2
|
import { store } from './src/store.js';
|
|
3
3
|
import { createDeepProxy } from './src/proxy.js';
|
|
4
4
|
|
|
5
|
+
/* *****************************************************************************
|
|
6
|
+
* FractoSate
|
|
7
|
+
*
|
|
8
|
+
* ACCESS RESTRICTIONS:
|
|
9
|
+
* - This software is exclusively for use by Authorized Personnel of NEHONIX
|
|
10
|
+
* - Intended for Internal Use only within NEHONIX operations
|
|
11
|
+
* - No rights granted to unauthorized individuals or entities
|
|
12
|
+
* - All modifications are works made for hire assigned to NEHONIX
|
|
13
|
+
*
|
|
14
|
+
* PROHIBITED ACTIVITIES:
|
|
15
|
+
* - Copying, distributing, or sublicensing without written permission
|
|
16
|
+
* - Reverse engineering, decompiling, or disassembling
|
|
17
|
+
* - Creating derivative works without explicit authorization
|
|
18
|
+
* - External use or commercial distribution outside NEHONIX
|
|
19
|
+
*
|
|
20
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
* SOFTWARE.
|
|
27
|
+
*
|
|
28
|
+
* For questions or permissions, contact:
|
|
29
|
+
* NEHONIX Legal Department
|
|
30
|
+
* Email: legal@nehonix.com
|
|
31
|
+
* Website: www.nehonix.com
|
|
32
|
+
***************************************************************************** */
|
|
5
33
|
/**
|
|
6
34
|
* Defines a derived flow that reacts to changes in a source flow.
|
|
7
35
|
* Use this for computed values that shouldn't be manually modified.
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n FlowOpsObject,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\nexport * from \"./types\";\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n return {\n key: derivedKey || `${source.key}_derived_${Date.now()}`,\n source,\n selector,\n };\n}\n\n/**\n * Defines a state flow with 100% type inference for state and actions.\n * @param key Unique key for the flow\n * @param initial Initial state value\n * @param options Flow configuration and optional actions\n */\nexport function defineFlow<T, A>(\n key: string,\n initial: T,\n options: FlowOptions<NoInfer<T>> & {\n actions: A & {\n [K in keyof A]: (\n ...args: any[]\n ) => (ops: FlowOpsObject<NoInfer<T>>) => any;\n };\n },\n): FlowDefinition<T, A>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>>,\n): FlowDefinition<T, {}>;\nexport function defineFlow<T, A>(\n key: string,\n initial: T,\n options?: FlowOptions<T> & { actions?: A },\n): FlowDefinition<T, A> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: FlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A>(\n def: FlowDefinition<T, A>,\n options?: FlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...options }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [state, setState] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n return store.subscribe(key, () => {\n const raw = store.get(key, initialVal);\n setState(isDerived ? (keyOrDef as any).selector(raw) : raw);\n });\n }, [key, isDerived]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const defaultOps = {\n get self() {\n return createDeepProxy(\n key,\n [],\n store.get(key, initialVal),\n flowOptions,\n );\n },\n get state() {\n return store.get(key, initialVal);\n },\n };\n\n const boundActions = {} as any;\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(defaultOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, { ...flowOptions, force: true });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, { ...flowOptions, force: false });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, state, flowOptions]);\n\n return [state, toolbox] as any;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FractoDevTools.js","sources":["../../../../src/devtools/FractoDevTools.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from \"react\";\nimport { store } from \"../store\";\nimport \"./FractoDevTools.css\";\n\ninterface FractoDevToolsProps {\n position?: \"left\" | \"right\";\n initialOpen?: boolean;\n}\n\ntype ViewMode = \"all\" | \"objects\" | \"arrays\" | \"primitives\";\n\nexport const FractoDevTools = ({\n position = \"left\",\n initialOpen = false,\n}: FractoDevToolsProps) => {\n const [isOpen, setIsOpen] = useState(initialOpen);\n const [snapshot, setSnapshot] = useState<\n Record<string, { value: any; meta: any }>\n >({});\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [viewMode, setViewMode] = useState<ViewMode>(\"all\");\n const [collapsedFlows, setCollapsedFlows] = useState<Set<string>>(new Set());\n const [copiedKey, setCopiedKey] = useState<string | null>(null);\n const [flowCount, setFlowCount] = useState(0);\n\n // Dragging state\n const [coords, setCoords] = useState({ x: 20, y: 20 });\n const [isDragging, setIsDragging] = useState(false);\n\n useEffect(() => {\n const updateCount = () => {\n setFlowCount(Object.keys(store.getDebugSnapshot()).length);\n };\n updateCount();\n return store.subscribeGlobal(updateCount);\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n\n setSnapshot(store.getDebugSnapshot());\n const unsub = store.subscribeGlobal(() => {\n setSnapshot(store.getDebugSnapshot());\n });\n\n return unsub;\n }, [isOpen]);\n\n const filteredEntries = useMemo(() => {\n let entries = Object.entries(snapshot);\n\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n entries = entries.filter(([key, data]) => {\n const keyMatch = key.toLowerCase().includes(query);\n const valueMatch = JSON.stringify(data.value)\n .toLowerCase()\n .includes(query);\n return keyMatch || valueMatch;\n });\n }\n\n if (viewMode !== \"all\") {\n entries = entries.filter(([_, data]) => {\n const value = data.value;\n if (viewMode === \"objects\") {\n return (\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n );\n }\n if (viewMode === \"arrays\") {\n return Array.isArray(value);\n }\n if (viewMode === \"primitives\") {\n return typeof value !== \"object\" || value === null;\n }\n return true;\n });\n }\n\n return entries;\n }, [snapshot, searchQuery, viewMode]);\n\n const stats = useMemo(() => {\n const entries = Object.values(snapshot);\n return {\n total: entries.length,\n objects: entries.filter(\n (d) =>\n typeof d.value === \"object\" &&\n d.value !== null &&\n !Array.isArray(d.value),\n ).length,\n arrays: entries.filter((d) => Array.isArray(d.value)).length,\n primitives: entries.filter(\n (d) => typeof d.value !== \"object\" || d.value === null,\n ).length,\n };\n }, [snapshot]);\n\n const toggleCollapse = (key: string) => {\n setCollapsedFlows((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n const collapseAll = () => {\n const keys = Object.keys(snapshot);\n setCollapsedFlows(new Set(keys));\n };\n\n const expandAll = () => {\n setCollapsedFlows(new Set());\n };\n\n const handleCopy = (key: string, value: any) => {\n navigator.clipboard.writeText(JSON.stringify(value, null, 2));\n setCopiedKey(key);\n setTimeout(() => setCopiedKey(null), 2000);\n };\n\n const getValueType = (value: any): string => {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return `array[${value.length}]`;\n if (typeof value === \"object\")\n return `object{${Object.keys(value).length}}`;\n return typeof value;\n };\n\n // Drag logic\n const handleMouseDown = (e: React.MouseEvent) => {\n setIsDragging(false);\n const startX = e.clientX;\n const startY = e.clientY;\n const initialCoords = { ...coords };\n\n const onMouseMove = (moveEvent: MouseEvent) => {\n if (\n Math.abs(moveEvent.clientX - startX) > 5 ||\n Math.abs(moveEvent.clientY - startY) > 5\n ) {\n setIsDragging(true);\n }\n\n const dx =\n position === \"left\"\n ? moveEvent.clientX - startX\n : startX - moveEvent.clientX;\n const dy = startY - moveEvent.clientY;\n\n setCoords({\n x: Math.max(0, initialCoords.x + dx),\n y: Math.max(0, initialCoords.y + dy),\n });\n };\n\n const onMouseUp = () => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n };\n\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n };\n\n const positionStyle: React.CSSProperties = {\n [position]: `${coords.x}px`,\n bottom: `${coords.y}px`,\n };\n\n if (!isOpen) {\n return (\n <button\n onMouseDown={handleMouseDown}\n onClick={() => !isDragging && setIsOpen(true)}\n className={`fracto-devtools-button position-${position}`}\n style={{ ...positionStyle, cursor: isDragging ? \"grabbing\" : \"grab\" }}\n title=\"Open FractoState DevTools (Draggable)\"\n >\n F\n {flowCount > 0 && (\n <span className=\"fracto-devtools-badge-count\">{flowCount}</span>\n )}\n </button>\n );\n }\n\n return (\n <div\n className={`fracto-devtools-panel position-${position}`}\n style={positionStyle}\n >\n <div className=\"fracto-devtools-header\">\n <div className=\"fracto-devtools-header-content\">\n <div className=\"fracto-devtools-logo\">F</div>\n <div>\n <div className=\"fracto-devtools-title\">\n Fracto<span className=\"fracto-devtools-title-state\">State</span>\n </div>\n <div className=\"fracto-devtools-subtitle\">Advanced Inspector</div>\n </div>\n </div>\n <button\n onClick={() => setIsOpen(false)}\n className=\"fracto-devtools-close\"\n >\n ×\n </button>\n </div>\n\n <div className=\"fracto-devtools-toolbar\">\n <div className=\"fracto-devtools-search-container\">\n <span className=\"fracto-devtools-search-icon\">🔍</span>\n <input\n type=\"text\"\n className=\"fracto-devtools-search\"\n placeholder=\"Search flows...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n {searchQuery && (\n <button\n className=\"fracto-devtools-clear-search\"\n onClick={() => setSearchQuery(\"\")}\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"fracto-devtools-filters\">\n <div className=\"fracto-devtools-filter-buttons\">\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"all\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"all\")}\n >\n All ({stats.total})\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"objects\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"objects\")}\n >\n Objects\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"arrays\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"arrays\")}\n >\n Arrays\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"primitives\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"primitives\")}\n >\n Primitives\n </button>\n </div>\n\n <div className=\"fracto-devtools-actions\">\n <button\n onClick={collapseAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Collapse All\"\n >\n ⇊\n </button>\n <button\n onClick={expandAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Expand All\"\n >\n ⇈\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"fracto-devtools-content\">\n {filteredEntries.length === 0 ? (\n <div className=\"fracto-devtools-empty\">No flows detected</div>\n ) : (\n filteredEntries.map(([key, data]) => (\n <div\n key={key}\n className={`fracto-devtools-flow ${collapsedFlows.has(key) ? \"collapsed\" : \"\"}`}\n >\n <div\n className=\"fracto-devtools-flow-header\"\n onClick={() => toggleCollapse(key)}\n >\n <div className=\"fracto-devtools-flow-header-left\">\n <span className=\"fracto-devtools-flow-collapse-icon\">▼</span>\n <div className=\"fracto-devtools-flow-key\">{key}</div>\n {data.meta.isDebouncing && (\n <span\n className=\"fracto-devtools-meta-tag\"\n title=\"Sync pending\"\n >\n ⏳\n </span>\n )}\n </div>\n <div className=\"fracto-devtools-flow-actions\">\n <span className=\"fracto-devtools-flow-badge\">\n {getValueType(data.value)}\n </span>\n <button\n className={`fracto-devtools-flow-action ${copiedKey === key ? \"copied\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleCopy(key, data.value);\n }}\n >\n {copiedKey === key ? \"✓\" : \"❐\"}\n </button>\n </div>\n </div>\n\n {!collapsedFlows.has(key) && (\n <div className=\"fracto-devtools-flow-expanded\">\n <div className=\"fracto-devtools-meta-grid\">\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Listeners:</span>\n <span className=\"value\">{data.meta.listeners}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">History:</span>\n <span className=\"value\">{data.meta.historySize}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Redo:</span>\n <span className=\"value\">{data.meta.redoSize}</span>\n </div>\n </div>\n <pre className=\"fracto-devtools-flow-content\">\n {JSON.stringify(data.value, null, 2)}\n </pre>\n </div>\n )}\n {copiedKey === key && (\n <div className=\"fracto-devtools-copy-toast\">Copied!</div>\n )}\n </div>\n ))\n )}\n </div>\n\n <div className=\"fracto-devtools-footer\">\n <span>FractoState Engine v1.0.2</span>\n <span className=\"fracto-devtools-footer-count\">\n {filteredEntries.length} items\n </span>\n </div>\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FractoDevTools.js","sources":["../../../../src/devtools/FractoDevTools.tsx"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport { store } from \"../store\";\nimport \"./FractoDevTools.css\";\n\ninterface FractoDevToolsProps {\n position?: \"left\" | \"right\";\n initialOpen?: boolean;\n}\n\ntype ViewMode = \"all\" | \"objects\" | \"arrays\" | \"primitives\";\n\nexport const FractoDevTools = ({\n position = \"left\",\n initialOpen = false,\n}: FractoDevToolsProps) => {\n const [isOpen, setIsOpen] = useState(initialOpen);\n const [snapshot, setSnapshot] = useState<\n Record<string, { value: any; meta: any }>\n >({});\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [viewMode, setViewMode] = useState<ViewMode>(\"all\");\n const [collapsedFlows, setCollapsedFlows] = useState<Set<string>>(new Set());\n const [copiedKey, setCopiedKey] = useState<string | null>(null);\n const [flowCount, setFlowCount] = useState(0);\n\n // Dragging state\n const [coords, setCoords] = useState({ x: 20, y: 20 });\n const [isDragging, setIsDragging] = useState(false);\n\n useEffect(() => {\n const updateCount = () => {\n setFlowCount(Object.keys(store.getDebugSnapshot()).length);\n };\n updateCount();\n return store.subscribeGlobal(updateCount);\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n\n setSnapshot(store.getDebugSnapshot());\n const unsub = store.subscribeGlobal(() => {\n setSnapshot(store.getDebugSnapshot());\n });\n\n return unsub;\n }, [isOpen]);\n\n const filteredEntries = useMemo(() => {\n let entries = Object.entries(snapshot);\n\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n entries = entries.filter(([key, data]) => {\n const keyMatch = key.toLowerCase().includes(query);\n const valueMatch = JSON.stringify(data.value)\n .toLowerCase()\n .includes(query);\n return keyMatch || valueMatch;\n });\n }\n\n if (viewMode !== \"all\") {\n entries = entries.filter(([_, data]) => {\n const value = data.value;\n if (viewMode === \"objects\") {\n return (\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n );\n }\n if (viewMode === \"arrays\") {\n return Array.isArray(value);\n }\n if (viewMode === \"primitives\") {\n return typeof value !== \"object\" || value === null;\n }\n return true;\n });\n }\n\n return entries;\n }, [snapshot, searchQuery, viewMode]);\n\n const stats = useMemo(() => {\n const entries = Object.values(snapshot);\n return {\n total: entries.length,\n objects: entries.filter(\n (d) =>\n typeof d.value === \"object\" &&\n d.value !== null &&\n !Array.isArray(d.value),\n ).length,\n arrays: entries.filter((d) => Array.isArray(d.value)).length,\n primitives: entries.filter(\n (d) => typeof d.value !== \"object\" || d.value === null,\n ).length,\n };\n }, [snapshot]);\n\n const toggleCollapse = (key: string) => {\n setCollapsedFlows((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n const collapseAll = () => {\n const keys = Object.keys(snapshot);\n setCollapsedFlows(new Set(keys));\n };\n\n const expandAll = () => {\n setCollapsedFlows(new Set());\n };\n\n const handleCopy = (key: string, value: any) => {\n navigator.clipboard.writeText(JSON.stringify(value, null, 2));\n setCopiedKey(key);\n setTimeout(() => setCopiedKey(null), 2000);\n };\n\n const getValueType = (value: any): string => {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return `array[${value.length}]`;\n if (typeof value === \"object\")\n return `object{${Object.keys(value).length}}`;\n return typeof value;\n };\n\n // Drag logic\n const handleMouseDown = (e: React.MouseEvent) => {\n setIsDragging(false);\n const startX = e.clientX;\n const startY = e.clientY;\n const initialCoords = { ...coords };\n\n const onMouseMove = (moveEvent: MouseEvent) => {\n if (\n Math.abs(moveEvent.clientX - startX) > 5 ||\n Math.abs(moveEvent.clientY - startY) > 5\n ) {\n setIsDragging(true);\n }\n\n const dx =\n position === \"left\"\n ? moveEvent.clientX - startX\n : startX - moveEvent.clientX;\n const dy = startY - moveEvent.clientY;\n\n setCoords({\n x: Math.max(0, initialCoords.x + dx),\n y: Math.max(0, initialCoords.y + dy),\n });\n };\n\n const onMouseUp = () => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n };\n\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n };\n\n const positionStyle: React.CSSProperties = {\n [position]: `${coords.x}px`,\n bottom: `${coords.y}px`,\n };\n\n if (!isOpen) {\n return (\n <button\n onMouseDown={handleMouseDown}\n onClick={() => !isDragging && setIsOpen(true)}\n className={`fracto-devtools-button position-${position}`}\n style={{ ...positionStyle, cursor: isDragging ? \"grabbing\" : \"grab\" }}\n title=\"Open FractoState DevTools (Draggable)\"\n >\n F\n {flowCount > 0 && (\n <span className=\"fracto-devtools-badge-count\">{flowCount}</span>\n )}\n </button>\n );\n }\n\n return (\n <div\n className={`fracto-devtools-panel position-${position}`}\n style={positionStyle}\n >\n <div className=\"fracto-devtools-header\">\n <div className=\"fracto-devtools-header-content\">\n <div className=\"fracto-devtools-logo\">F</div>\n <div>\n <div className=\"fracto-devtools-title\">\n Fracto<span className=\"fracto-devtools-title-state\">State</span>\n </div>\n <div className=\"fracto-devtools-subtitle\">Advanced Inspector</div>\n </div>\n </div>\n <button\n onClick={() => setIsOpen(false)}\n className=\"fracto-devtools-close\"\n >\n ×\n </button>\n </div>\n\n <div className=\"fracto-devtools-toolbar\">\n <div className=\"fracto-devtools-search-container\">\n <span className=\"fracto-devtools-search-icon\">🔍</span>\n <input\n type=\"text\"\n className=\"fracto-devtools-search\"\n placeholder=\"Search flows...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n {searchQuery && (\n <button\n className=\"fracto-devtools-clear-search\"\n onClick={() => setSearchQuery(\"\")}\n >\n Clear\n </button>\n )}\n </div>\n\n <div className=\"fracto-devtools-filters\">\n <div className=\"fracto-devtools-filter-buttons\">\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"all\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"all\")}\n >\n All ({stats.total})\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"objects\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"objects\")}\n >\n Objects\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"arrays\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"arrays\")}\n >\n Arrays\n </button>\n <button\n className={`fracto-devtools-filter-button ${viewMode === \"primitives\" ? \"active\" : \"\"}`}\n onClick={() => setViewMode(\"primitives\")}\n >\n Primitives\n </button>\n </div>\n\n <div className=\"fracto-devtools-actions\">\n <button\n onClick={collapseAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Collapse All\"\n >\n ⇊\n </button>\n <button\n onClick={expandAll}\n className=\"fracto-devtools-action-btn\"\n title=\"Expand All\"\n >\n ⇈\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"fracto-devtools-content\">\n {filteredEntries.length === 0 ? (\n <div className=\"fracto-devtools-empty\">No flows detected</div>\n ) : (\n filteredEntries.map(([key, data]) => (\n <div\n key={key}\n className={`fracto-devtools-flow ${collapsedFlows.has(key) ? \"collapsed\" : \"\"}`}\n >\n <div\n className=\"fracto-devtools-flow-header\"\n onClick={() => toggleCollapse(key)}\n >\n <div className=\"fracto-devtools-flow-header-left\">\n <span className=\"fracto-devtools-flow-collapse-icon\">▼</span>\n <div className=\"fracto-devtools-flow-key\">{key}</div>\n {data.meta.isDebouncing && (\n <span\n className=\"fracto-devtools-meta-tag\"\n title=\"Sync pending\"\n >\n ⏳\n </span>\n )}\n </div>\n <div className=\"fracto-devtools-flow-actions\">\n <span className=\"fracto-devtools-flow-badge\">\n {getValueType(data.value)}\n </span>\n <button\n className={`fracto-devtools-flow-action ${copiedKey === key ? \"copied\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n handleCopy(key, data.value);\n }}\n >\n {copiedKey === key ? \"✓\" : \"❐\"}\n </button>\n </div>\n </div>\n\n {!collapsedFlows.has(key) && (\n <div className=\"fracto-devtools-flow-expanded\">\n <div className=\"fracto-devtools-meta-grid\">\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Listeners:</span>\n <span className=\"value\">{data.meta.listeners}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">History:</span>\n <span className=\"value\">{data.meta.historySize}</span>\n </div>\n <div className=\"fracto-devtools-meta-item\">\n <span className=\"label\">Redo:</span>\n <span className=\"value\">{data.meta.redoSize}</span>\n </div>\n </div>\n <pre className=\"fracto-devtools-flow-content\">\n {JSON.stringify(data.value, null, 2)}\n </pre>\n </div>\n )}\n {copiedKey === key && (\n <div className=\"fracto-devtools-copy-toast\">Copied!</div>\n )}\n </div>\n ))\n )}\n </div>\n\n <div className=\"fracto-devtools-footer\">\n <span>FractoState Engine v1.0.2</span>\n <span className=\"fracto-devtools-footer-count\">\n {filteredEntries.length} items\n </span>\n </div>\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
/* *****************************************************************************
|
|
2
|
+
* FractoSate
|
|
3
|
+
*
|
|
4
|
+
* ACCESS RESTRICTIONS:
|
|
5
|
+
* - This software is exclusively for use by Authorized Personnel of NEHONIX
|
|
6
|
+
* - Intended for Internal Use only within NEHONIX operations
|
|
7
|
+
* - No rights granted to unauthorized individuals or entities
|
|
8
|
+
* - All modifications are works made for hire assigned to NEHONIX
|
|
9
|
+
*
|
|
10
|
+
* PROHIBITED ACTIVITIES:
|
|
11
|
+
* - Copying, distributing, or sublicensing without written permission
|
|
12
|
+
* - Reverse engineering, decompiling, or disassembling
|
|
13
|
+
* - Creating derivative works without explicit authorization
|
|
14
|
+
* - External use or commercial distribution outside NEHONIX
|
|
15
|
+
*
|
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
* SOFTWARE.
|
|
23
|
+
*
|
|
24
|
+
* For questions or permissions, contact:
|
|
25
|
+
* NEHONIX Legal Department
|
|
26
|
+
* Email: legal@nehonix.com
|
|
27
|
+
* Website: www.nehonix.com
|
|
28
|
+
***************************************************************************** */
|
|
1
29
|
class StorageAdapter {
|
|
2
30
|
constructor() {
|
|
3
31
|
Object.defineProperty(this, "IDB_NAME", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageAdapter.js","sources":["../../../../../src/plugins/storage/StorageAdapter.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"StorageAdapter.js","sources":["../../../../../src/plugins/storage/StorageAdapter.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 { FlowPlugin } from \"../../types\";\nimport { PersistOptions } from \"../types/pluginTypes\";\n\nexport class StorageAdapter {\n private IDB_NAME = \"FractoVaultDB\";\n private STORE_NAME = \"kvp\"; // kvp = key_value_pairs\n\n private getIDB() {\n return new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this.IDB_NAME, 1);\n request.onupgradeneeded = () =>\n request.result.createObjectStore(this.STORE_NAME);\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n }\n\n private async idbGet(key: string): Promise<any> {\n const db = await this.getIDB();\n return new Promise((resolve) => {\n const req = db\n .transaction(this.STORE_NAME)\n .objectStore(this.STORE_NAME)\n .get(key);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => resolve(null);\n });\n }\n\n private async idbSet(key: string, value: any): Promise<void> {\n const db = await this.getIDB();\n return new Promise((resolve) => {\n const req = db\n .transaction(this.STORE_NAME, \"readwrite\")\n .objectStore(this.STORE_NAME)\n .put(value, key);\n req.onsuccess = () => resolve();\n });\n }\n\n public persist(\n $key: string | undefined,\n type: PersistOptions[\"storage\"],\n ): FlowPlugin {\n if (!type) throw new Error(\"No storage type provided\");\n\n return {\n name: \"persist\",\n onHydrate: ({ key: hkey, store }) => {\n const storageKey = $key || `fracto_flow_${hkey}`;\n\n // Notify engine of async task\n (store as any).__hydrating__?.add($key);\n\n const done = (val: any) => {\n (store as any).__hydrating__?.delete($key);\n return val;\n };\n\n if (type === \"indexedDB\") {\n return this.idbGet(storageKey).then((data) =>\n done(data ? JSON.parse(data) : undefined),\n );\n }\n\n if (typeof window === \"undefined\") return done(undefined);\n const raw = window[type].getItem(storageKey);\n return done(raw ? JSON.parse(raw) : undefined);\n },\n\n onUpdate: ({ key: hkey, next }) => {\n const storageKey = $key || `fracto_flow_${hkey}`;\n const json = JSON.stringify(next);\n\n if (type === \"indexedDB\") {\n this.idbSet(storageKey, json);\n } else if (typeof window !== \"undefined\") {\n window[type].setItem(storageKey, json);\n }\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/src/proxy.js
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
import { store } from './store.js';
|
|
2
2
|
|
|
3
|
+
/* *****************************************************************************
|
|
4
|
+
* FractoSate
|
|
5
|
+
*
|
|
6
|
+
* ACCESS RESTRICTIONS:
|
|
7
|
+
* - This software is exclusively for use by Authorized Personnel of NEHONIX
|
|
8
|
+
* - Intended for Internal Use only within NEHONIX operations
|
|
9
|
+
* - No rights granted to unauthorized individuals or entities
|
|
10
|
+
* - All modifications are works made for hire assigned to NEHONIX
|
|
11
|
+
*
|
|
12
|
+
* PROHIBITED ACTIVITIES:
|
|
13
|
+
* - Copying, distributing, or sublicensing without written permission
|
|
14
|
+
* - Reverse engineering, decompiling, or disassembling
|
|
15
|
+
* - Creating derivative works without explicit authorization
|
|
16
|
+
* - External use or commercial distribution outside NEHONIX
|
|
17
|
+
*
|
|
18
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
* SOFTWARE.
|
|
25
|
+
*
|
|
26
|
+
* For questions or permissions, contact:
|
|
27
|
+
* NEHONIX Legal Department
|
|
28
|
+
* Email: legal@nehonix.com
|
|
29
|
+
* Website: www.nehonix.com
|
|
30
|
+
***************************************************************************** */
|
|
3
31
|
/**
|
|
4
32
|
* Creates a deep proxy that provides type-specific atomic operations for a flow.
|
|
5
33
|
* The proxy tracks its path within the state tree and maps access to specific update logic.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.ts"],"sourcesContent":["import type { FlowOptions, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\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 */\nexport function createDeepProxy<T = any>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T> {\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n const newPath = [...path, prop];\n\n /**\n * CORE COMMITTER\n * Always resolves the freshest state from the store before applying the path update.\n * This prevents \"stale state\" issues during mass sequential updates.\n */\n const commit = (val: any, forceful: boolean, skipEquality = false) => {\n try {\n const currentState = store.get(key, undefined);\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n });\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // --- Meta-Operations ---\n\n // Read current value\n if (prop === \"_val\") return currentVal;\n\n // Generic property replacement (Forceful)\n if (prop === \"_set\") return (val: any) => commit(val, true);\n\n // Smart property replacement (Skip if equal)\n if (prop === \"_patch\") return (val: any) => commit(val, false);\n\n // Helper for type-specific operators\n const update = (val: any) => commit(val, false, true);\n\n // --- Type-Specific Atomic Operations ---\n\n // Number Operations\n if (typeof currentVal === \"number\") {\n if (prop === \"_increment\")\n return (amount = 1) => update(currentVal + amount);\n if (prop === \"_decrement\")\n return (amount = 1) => update(currentVal - amount);\n if (prop === \"_add\")\n return (amount: number) => update(currentVal + amount);\n if (prop === \"_subtract\")\n return (amount: number) => update(currentVal - amount);\n if (prop === \"_multiply\")\n return (amount: number) => update(currentVal * amount);\n if (prop === \"_divide\")\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n update(currentVal / amount);\n };\n }\n\n // Array Operations\n if (Array.isArray(currentVal)) {\n if (prop === \"_push\")\n return (item: any) => update([...currentVal, item]);\n if (prop === \"_pop\") return () => update(currentVal.slice(0, -1));\n if (prop === \"_shift\") return () => update(currentVal.slice(1));\n if (prop === \"_unshift\")\n return (item: any) => update([item, ...currentVal]);\n if (prop === \"_filter\")\n return (fn: any) => update(currentVal.filter(fn));\n if (prop === \"_map\") return (fn: any) => update(currentVal.map(fn));\n if (prop === \"_removeAt\")\n return (index: number) =>\n update(currentVal.filter((_, i) => i !== index));\n if (prop === \"_insertAt\")\n return (index: number, item: any) => {\n const next = [...currentVal];\n next.splice(index, 0, item);\n update(next);\n };\n }\n\n // String Operations\n if (typeof currentVal === \"string\") {\n if (prop === \"_append\")\n return (str: string) => update(currentVal + str);\n if (prop === \"_prepend\")\n return (str: string) => update(str + currentVal);\n if (prop === \"_uppercase\")\n return () => update(currentVal.toUpperCase());\n if (prop === \"_lowercase\")\n return () => update(currentVal.toLowerCase());\n if (prop === \"_trim\") return () => update(currentVal.trim());\n }\n\n // Object Operations\n if (\n currentVal !== null &&\n typeof currentVal === \"object\" &&\n !Array.isArray(currentVal)\n ) {\n if (prop === \"_merge\")\n return (obj: any) => update({ ...currentVal, ...obj });\n if (prop === \"_delete\")\n return (keyToDel: string) => {\n const next = { ...currentVal };\n delete next[keyToDel];\n update(next);\n };\n }\n\n // Recursive step: create a new proxy for the child property\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n 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>;\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 if (path.length === 0) return value;\n\n const [head, ...tail] = path;\n\n if (Array.isArray(obj)) {\n const index = parseInt(head, 10);\n if (isNaN(index) || index < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n const newArr = [...obj];\n if (index >= newArr.length) newArr.length = index + 1;\n newArr[index] = setInPath(newArr[index], tail, value);\n return newArr;\n }\n\n const currentObj = obj ?? {};\n return {\n ...currentObj,\n [head]: setInPath(currentObj[head], tail, value),\n };\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/**\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 */\nexport function createDeepProxy<T = any>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T> {\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n const newPath = [...path, prop];\n\n /**\n * CORE COMMITTER\n * Always resolves the freshest state from the store before applying the path update.\n * This prevents \"stale state\" issues during mass sequential updates.\n */\n const commit = (val: any, forceful: boolean, skipEquality = false) => {\n try {\n const currentState = store.get(key, undefined);\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n });\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // --- Meta-Operations ---\n\n // Read current value\n if (prop === \"_val\") return currentVal;\n\n // Generic property replacement (Forceful)\n if (prop === \"_set\") return (val: any) => commit(val, true);\n\n // Smart property replacement (Skip if equal)\n if (prop === \"_patch\") return (val: any) => commit(val, false);\n\n // Helper for type-specific operators\n const update = (val: any) => commit(val, false, true);\n\n // --- Type-Specific Atomic Operations ---\n\n // Number Operations\n if (typeof currentVal === \"number\") {\n if (prop === \"_increment\")\n return (amount = 1) => update(currentVal + amount);\n if (prop === \"_decrement\")\n return (amount = 1) => update(currentVal - amount);\n if (prop === \"_add\")\n return (amount: number) => update(currentVal + amount);\n if (prop === \"_subtract\")\n return (amount: number) => update(currentVal - amount);\n if (prop === \"_multiply\")\n return (amount: number) => update(currentVal * amount);\n if (prop === \"_divide\")\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n update(currentVal / amount);\n };\n }\n\n // Array Operations\n if (Array.isArray(currentVal)) {\n if (prop === \"_push\")\n return (item: any) => update([...currentVal, item]);\n if (prop === \"_pop\") return () => update(currentVal.slice(0, -1));\n if (prop === \"_shift\") return () => update(currentVal.slice(1));\n if (prop === \"_unshift\")\n return (item: any) => update([item, ...currentVal]);\n if (prop === \"_filter\")\n return (fn: any) => update(currentVal.filter(fn));\n if (prop === \"_map\") return (fn: any) => update(currentVal.map(fn));\n if (prop === \"_removeAt\")\n return (index: number) =>\n update(currentVal.filter((_, i) => i !== index));\n if (prop === \"_insertAt\")\n return (index: number, item: any) => {\n const next = [...currentVal];\n next.splice(index, 0, item);\n update(next);\n };\n }\n\n // String Operations\n if (typeof currentVal === \"string\") {\n if (prop === \"_append\")\n return (str: string) => update(currentVal + str);\n if (prop === \"_prepend\")\n return (str: string) => update(str + currentVal);\n if (prop === \"_uppercase\")\n return () => update(currentVal.toUpperCase());\n if (prop === \"_lowercase\")\n return () => update(currentVal.toLowerCase());\n if (prop === \"_trim\") return () => update(currentVal.trim());\n }\n\n // Object Operations\n if (\n currentVal !== null &&\n typeof currentVal === \"object\" &&\n !Array.isArray(currentVal)\n ) {\n if (prop === \"_merge\")\n return (obj: any) => update({ ...currentVal, ...obj });\n if (prop === \"_delete\")\n return (keyToDel: string) => {\n const next = { ...currentVal };\n delete next[keyToDel];\n update(next);\n };\n }\n\n // Recursive step: create a new proxy for the child property\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n 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>;\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 if (path.length === 0) return value;\n\n const [head, ...tail] = path;\n\n if (Array.isArray(obj)) {\n const index = parseInt(head, 10);\n if (isNaN(index) || index < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n const newArr = [...obj];\n if (index >= newArr.length) newArr.length = index + 1;\n newArr[index] = setInPath(newArr[index], tail, value);\n return newArr;\n }\n\n const currentObj = obj ?? {};\n return {\n ...currentObj,\n [head]: setInPath(currentObj[head], tail, value),\n };\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/src/store.js
CHANGED
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
/* *****************************************************************************
|
|
2
|
+
* FractoSate
|
|
3
|
+
*
|
|
4
|
+
* ACCESS RESTRICTIONS:
|
|
5
|
+
* - This software is exclusively for use by Authorized Personnel of NEHONIX
|
|
6
|
+
* - Intended for Internal Use only within NEHONIX operations
|
|
7
|
+
* - No rights granted to unauthorized individuals or entities
|
|
8
|
+
* - All modifications are works made for hire assigned to NEHONIX
|
|
9
|
+
*
|
|
10
|
+
* PROHIBITED ACTIVITIES:
|
|
11
|
+
* - Copying, distributing, or sublicensing without written permission
|
|
12
|
+
* - Reverse engineering, decompiling, or disassembling
|
|
13
|
+
* - Creating derivative works without explicit authorization
|
|
14
|
+
* - External use or commercial distribution outside NEHONIX
|
|
15
|
+
*
|
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
* SOFTWARE.
|
|
23
|
+
*
|
|
24
|
+
* For questions or permissions, contact:
|
|
25
|
+
* NEHONIX Legal Department
|
|
26
|
+
* Email: legal@nehonix.com
|
|
27
|
+
* Website: www.nehonix.com
|
|
28
|
+
***************************************************************************** */
|
|
1
29
|
/**
|
|
2
30
|
* Fast & Isolated Memory Vault
|
|
3
31
|
* Ultra-performant in-memory store with deep cloning and batching
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sources":["../../../src/store.ts"],"sourcesContent":["import type { FlowOptions } from \"./types\";\n\n/**\n * Fast & Isolated Memory Vault\n * Ultra-performant in-memory store with deep cloning and batching\n * NO PERSISTENCE - Pure memory for maximum safety and speed\n */\nclass MemoryVault {\n private vault = new Map<string, any>();\n private initialValues = new Map<string, any>();\n private listeners = new Map<string, Set<() => void>>();\n private histories = new Map<string, CircularBuffer<any>>();\n private redoStacks = new Map<string, any[]>();\n private debounceTimers = new Map<string, number>();\n private batchQueue = new Set<string>();\n private batchScheduled = false;\n\n /** Internal tracking for async hydration (plugins) */\n public __hydrating__ = new Set<string>();\n\n constructor() {\n this.setupGlobalAccess();\n this.setupAutoCleanup();\n }\n\n /**\n * Defines a global accessor for internal debugging (DevTools).\n */\n private setupGlobalAccess() {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.__FRACTO_VAULT__ = this;\n }\n }\n\n /**\n * Periodically cleans up orphaned listeners.\n */\n private setupAutoCleanup() {\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => {\n this.listeners.forEach((set, key) => {\n if (set.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n });\n }, 300000); // 5 min\n }\n }\n\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n get(key: string, initialValue?: any, options?: FlowOptions) {\n if (!this.vault.has(key)) {\n if (initialValue === undefined) return undefined;\n\n let startingValue = deepClone(initialValue);\n\n // Plugin Hook: onHydrate\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.onHydrate) {\n const hydrated = plugin.onHydrate({ key, store: this });\n if (hydrated !== undefined) {\n if (hydrated instanceof Promise) {\n hydrated.then((val) => {\n if (val !== undefined) this.set(key, val, options);\n });\n } else {\n startingValue = hydrated;\n break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\n\n // Plugin Hook: onInit\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n plugin.onInit?.({ key, initial: startingValue, store: this });\n }\n }\n }\n\n const val = this.vault.get(key);\n return val === undefined ? initialValue : val;\n }\n\n /**\n * Updates state in the vault with optional debouncing and middleware support.\n */\n set(key: string, newValue: any, options: FlowOptions = {}) {\n const prevState = this.vault.get(key);\n let stateToSet = newValue;\n\n // Apply synchronous middleware\n if (options.middleware) {\n for (const fn of options.middleware) {\n stateToSet = fn(stateToSet);\n }\n }\n\n // Skip update if state has not changed (Deep equality check) unless 'force' or 'skipEquality' is true\n if (\n !options.force &&\n !options.skipEquality &&\n deepEqual(prevState, stateToSet)\n )\n return;\n\n if (options.debounce) {\n this.debouncedSet(key, stateToSet, options);\n return;\n }\n\n this.applySet(key, stateToSet, options);\n\n // Plugin Hook: onUpdate\n if (options.plugins) {\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({\n key,\n prev: prevState,\n next: stateToSet,\n store: this,\n });\n }\n }\n }\n\n /**\n * Executes a debounced state update.\n */\n private debouncedSet(key: string, value: any, options: FlowOptions) {\n const existing = this.debounceTimers.get(key);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.applySet(key, value, options);\n\n // Plugin Hook: onUpdate (Debounced)\n if (options.plugins) {\n const prevState = this.vault.get(key); // Technically prev is lost in debounce, this is best effort\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({ key, prev: prevState, next: value, store: this });\n }\n }\n\n this.debounceTimers.delete(key);\n }, options.debounce);\n\n this.debounceTimers.set(key, timer as any);\n }\n\n /**\n * Core logic for applying a state update and managing history.\n */\n private applySet(key: string, stateToSet: any, options: FlowOptions) {\n this.vault.set(key, stateToSet);\n\n if (options.timeTravel) {\n const history = this.histories.get(key);\n if (history) history.push(deepClone(stateToSet));\n const redo = this.redoStacks.get(key);\n if (redo) redo.length = 0;\n }\n\n this.scheduleBatchNotify(key);\n }\n\n /**\n * Schedules a microtask to batch notifications and optimize React renders.\n */\n private scheduleBatchNotify(key: string) {\n this.batchQueue.add(key);\n if (this.batchScheduled) return;\n this.batchScheduled = true;\n queueMicrotask(() => this.flushBatchNotify());\n }\n\n /**\n * Flushes and notifies all queued listeners.\n */\n private flushBatchNotify() {\n const keys = Array.from(this.batchQueue);\n this.batchQueue.clear();\n this.batchScheduled = false;\n keys.forEach((key) => this.notify(key));\n }\n\n private globalListeners = new Set<() => void>();\n\n /**\n * Connects a listener to a specific flow key.\n */\n subscribe(key: string, listener: () => void) {\n if (!this.listeners.has(key)) this.listeners.set(key, new Set());\n this.listeners.get(key)!.add(listener);\n return () => {\n this.listeners.get(key)?.delete(listener);\n };\n }\n\n /**\n * Subscribe to ALL changes in the store. Strictly for DevTools.\n */\n subscribeGlobal(listener: () => void) {\n this.globalListeners.add(listener);\n return () => {\n this.globalListeners.delete(listener);\n };\n }\n\n /**\n * Returns a complete snapshot of the store state for debugging.\n */\n getDebugSnapshot() {\n const snap: Record<string, any> = {};\n for (const key of this.vault.keys()) {\n snap[key] = {\n value: this.vault.get(key),\n meta: {\n historySize: this.histories.get(key)?.length() || 0,\n redoSize: this.redoStacks.get(key)?.length || 0,\n listeners: this.listeners.get(key)?.size || 0,\n isDebouncing: this.debounceTimers.has(key),\n },\n };\n }\n return snap;\n }\n\n /**\n * Directly notifies all listeners of a specific key.\n */\n private notify(key: string) {\n this.listeners.get(key)?.forEach((l) => l());\n this.globalListeners.forEach((l) => l());\n }\n\n /**\n * Reverts the state to the previous version in history.\n */\n undo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (history && history.length() > 1) {\n const current = history.pop();\n if (current) redo?.push(current);\n const prev = history.peek();\n this.vault.set(key, prev);\n this.notify(key);\n }\n }\n\n /**\n * Restores the state to the next version in the redo stack.\n */\n redo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (redo && redo.length > 0) {\n const next = redo.pop();\n history?.push(next);\n this.vault.set(key, next);\n this.notify(key);\n }\n }\n\n /**\n * Resets a flow to its initial value.\n */\n reset(key: string) {\n const initial = this.initialValues.get(key);\n if (initial !== undefined) this.set(key, initial);\n }\n\n getHistory(key: string) {\n return this.histories.get(key)?.toArray() || [];\n }\n getRedoStack(key: string) {\n return this.redoStacks.get(key) || [];\n }\n\n /**\n * Clears the entire store and all timers.\n */\n clearAll() {\n this.debounceTimers.forEach((t) => clearTimeout(t));\n this.vault.clear();\n this.initialValues.clear();\n this.listeners.clear();\n this.histories.clear();\n this.redoStacks.clear();\n }\n}\n\n/**\n * Circular Buffer implementation for high-performance memory-efficient history.\n */\nclass CircularBuffer<T> {\n private buffer: T[];\n private head = 0;\n private size = 0;\n private maxSize: number;\n\n constructor(maxSize: number, initial: T[] = []) {\n this.maxSize = maxSize;\n this.buffer = new Array(maxSize);\n initial.forEach((i) => this.push(i));\n }\n push(item: T) {\n this.buffer[this.head] = item;\n this.head = (this.head + 1) % this.maxSize;\n if (this.size < this.maxSize) this.size++;\n }\n pop(): T | undefined {\n if (this.size <= 0) return undefined;\n this.head = (this.head - 1 + this.maxSize) % this.maxSize;\n this.size--;\n return this.buffer[this.head];\n }\n peek(): T | undefined {\n return this.size > 0\n ? this.buffer[(this.head - 1 + this.maxSize) % this.maxSize]\n : undefined;\n }\n length() {\n return this.size;\n }\n toArray(): T[] {\n const res = [];\n for (let i = 0; i < this.size; i++) {\n res.push(\n this.buffer[(this.head - this.size + i + this.maxSize) % this.maxSize],\n );\n }\n return res;\n }\n}\n\n/**\n * High-performance deep cloning utility.\n */\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n if (Array.isArray(obj)) return obj.map(deepClone) as any;\n const cloned: any = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key))\n cloned[key] = deepClone(obj[key]);\n }\n return cloned;\n}\n\n/**\n * High-performance deep equality utility.\n */\nfunction deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b || a === null || b === null) return false;\n if (typeof a === \"object\") {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return false;\n}\n\nexport const store = new MemoryVault();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sources":["../../../src/store.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\n\nimport type { FlowOptions } from \"./types\";\n\n/**\n * Fast & Isolated Memory Vault\n * Ultra-performant in-memory store with deep cloning and batching\n * NO PERSISTENCE - Pure memory for maximum safety and speed\n */\nclass MemoryVault {\n private vault = new Map<string, any>();\n private initialValues = new Map<string, any>();\n private listeners = new Map<string, Set<() => void>>();\n private histories = new Map<string, CircularBuffer<any>>();\n private redoStacks = new Map<string, any[]>();\n private debounceTimers = new Map<string, number>();\n private batchQueue = new Set<string>();\n private batchScheduled = false;\n\n /** Internal tracking for async hydration (plugins) */\n public __hydrating__ = new Set<string>();\n\n constructor() {\n this.setupGlobalAccess();\n this.setupAutoCleanup();\n }\n\n /**\n * Defines a global accessor for internal debugging (DevTools).\n */\n private setupGlobalAccess() {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.__FRACTO_VAULT__ = this;\n }\n }\n\n /**\n * Periodically cleans up orphaned listeners.\n */\n private setupAutoCleanup() {\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => {\n this.listeners.forEach((set, key) => {\n if (set.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n });\n }, 300000); // 5 min\n }\n }\n\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n get(key: string, initialValue?: any, options?: FlowOptions) {\n if (!this.vault.has(key)) {\n if (initialValue === undefined) return undefined;\n\n let startingValue = deepClone(initialValue);\n\n // Plugin Hook: onHydrate\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.onHydrate) {\n const hydrated = plugin.onHydrate({ key, store: this });\n if (hydrated !== undefined) {\n if (hydrated instanceof Promise) {\n hydrated.then((val) => {\n if (val !== undefined) this.set(key, val, options);\n });\n } else {\n startingValue = hydrated;\n break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\n\n // Plugin Hook: onInit\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n plugin.onInit?.({ key, initial: startingValue, store: this });\n }\n }\n }\n\n const val = this.vault.get(key);\n return val === undefined ? initialValue : val;\n }\n\n /**\n * Updates state in the vault with optional debouncing and middleware support.\n */\n set(key: string, newValue: any, options: FlowOptions = {}) {\n const prevState = this.vault.get(key);\n let stateToSet = newValue;\n\n // Apply synchronous middleware\n if (options.middleware) {\n for (const fn of options.middleware) {\n stateToSet = fn(stateToSet);\n }\n }\n\n // Skip update if state has not changed (Deep equality check) unless 'force' or 'skipEquality' is true\n if (\n !options.force &&\n !options.skipEquality &&\n deepEqual(prevState, stateToSet)\n )\n return;\n\n if (options.debounce) {\n this.debouncedSet(key, stateToSet, options);\n return;\n }\n\n this.applySet(key, stateToSet, options);\n\n // Plugin Hook: onUpdate\n if (options.plugins) {\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({\n key,\n prev: prevState,\n next: stateToSet,\n store: this,\n });\n }\n }\n }\n\n /**\n * Executes a debounced state update.\n */\n private debouncedSet(key: string, value: any, options: FlowOptions) {\n const existing = this.debounceTimers.get(key);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.applySet(key, value, options);\n\n // Plugin Hook: onUpdate (Debounced)\n if (options.plugins) {\n const prevState = this.vault.get(key); // Technically prev is lost in debounce, this is best effort\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({ key, prev: prevState, next: value, store: this });\n }\n }\n\n this.debounceTimers.delete(key);\n }, options.debounce);\n\n this.debounceTimers.set(key, timer as any);\n }\n\n /**\n * Core logic for applying a state update and managing history.\n */\n private applySet(key: string, stateToSet: any, options: FlowOptions) {\n this.vault.set(key, stateToSet);\n\n if (options.timeTravel) {\n const history = this.histories.get(key);\n if (history) history.push(deepClone(stateToSet));\n const redo = this.redoStacks.get(key);\n if (redo) redo.length = 0;\n }\n\n this.scheduleBatchNotify(key);\n }\n\n /**\n * Schedules a microtask to batch notifications and optimize React renders.\n */\n private scheduleBatchNotify(key: string) {\n this.batchQueue.add(key);\n if (this.batchScheduled) return;\n this.batchScheduled = true;\n queueMicrotask(() => this.flushBatchNotify());\n }\n\n /**\n * Flushes and notifies all queued listeners.\n */\n private flushBatchNotify() {\n const keys = Array.from(this.batchQueue);\n this.batchQueue.clear();\n this.batchScheduled = false;\n keys.forEach((key) => this.notify(key));\n }\n\n private globalListeners = new Set<() => void>();\n\n /**\n * Connects a listener to a specific flow key.\n */\n subscribe(key: string, listener: () => void) {\n if (!this.listeners.has(key)) this.listeners.set(key, new Set());\n this.listeners.get(key)!.add(listener);\n return () => {\n this.listeners.get(key)?.delete(listener);\n };\n }\n\n /**\n * Subscribe to ALL changes in the store. Strictly for DevTools.\n */\n subscribeGlobal(listener: () => void) {\n this.globalListeners.add(listener);\n return () => {\n this.globalListeners.delete(listener);\n };\n }\n\n /**\n * Returns a complete snapshot of the store state for debugging.\n */\n getDebugSnapshot() {\n const snap: Record<string, any> = {};\n for (const key of this.vault.keys()) {\n snap[key] = {\n value: this.vault.get(key),\n meta: {\n historySize: this.histories.get(key)?.length() || 0,\n redoSize: this.redoStacks.get(key)?.length || 0,\n listeners: this.listeners.get(key)?.size || 0,\n isDebouncing: this.debounceTimers.has(key),\n },\n };\n }\n return snap;\n }\n\n /**\n * Directly notifies all listeners of a specific key.\n */\n private notify(key: string) {\n this.listeners.get(key)?.forEach((l) => l());\n this.globalListeners.forEach((l) => l());\n }\n\n /**\n * Reverts the state to the previous version in history.\n */\n undo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (history && history.length() > 1) {\n const current = history.pop();\n if (current) redo?.push(current);\n const prev = history.peek();\n this.vault.set(key, prev);\n this.notify(key);\n }\n }\n\n /**\n * Restores the state to the next version in the redo stack.\n */\n redo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (redo && redo.length > 0) {\n const next = redo.pop();\n history?.push(next);\n this.vault.set(key, next);\n this.notify(key);\n }\n }\n\n /**\n * Resets a flow to its initial value.\n */\n reset(key: string) {\n const initial = this.initialValues.get(key);\n if (initial !== undefined) this.set(key, initial);\n }\n\n getHistory(key: string) {\n return this.histories.get(key)?.toArray() || [];\n }\n getRedoStack(key: string) {\n return this.redoStacks.get(key) || [];\n }\n\n /**\n * Clears the entire store and all timers.\n */\n clearAll() {\n this.debounceTimers.forEach((t) => clearTimeout(t));\n this.vault.clear();\n this.initialValues.clear();\n this.listeners.clear();\n this.histories.clear();\n this.redoStacks.clear();\n }\n}\n\n/**\n * Circular Buffer implementation for high-performance memory-efficient history.\n */\nclass CircularBuffer<T> {\n private buffer: T[];\n private head = 0;\n private size = 0;\n private maxSize: number;\n\n constructor(maxSize: number, initial: T[] = []) {\n this.maxSize = maxSize;\n this.buffer = new Array(maxSize);\n initial.forEach((i) => this.push(i));\n }\n push(item: T) {\n this.buffer[this.head] = item;\n this.head = (this.head + 1) % this.maxSize;\n if (this.size < this.maxSize) this.size++;\n }\n pop(): T | undefined {\n if (this.size <= 0) return undefined;\n this.head = (this.head - 1 + this.maxSize) % this.maxSize;\n this.size--;\n return this.buffer[this.head];\n }\n peek(): T | undefined {\n return this.size > 0\n ? this.buffer[(this.head - 1 + this.maxSize) % this.maxSize]\n : undefined;\n }\n length() {\n return this.size;\n }\n toArray(): T[] {\n const res = [];\n for (let i = 0; i < this.size; i++) {\n res.push(\n this.buffer[(this.head - this.size + i + this.maxSize) % this.maxSize],\n );\n }\n return res;\n }\n}\n\n/**\n * High-performance deep cloning utility.\n */\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n if (Array.isArray(obj)) return obj.map(deepClone) as any;\n const cloned: any = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key))\n cloned[key] = deepClone(obj[key]);\n }\n return cloned;\n}\n\n/**\n * High-performance deep equality utility.\n */\nfunction deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b || a === null || b === null) return false;\n if (typeof a === \"object\") {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return false;\n}\n\nexport const store = new MemoryVault();\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
"name": "Nehonix",
|
|
5
5
|
"url": "https://nehonix.com"
|
|
6
6
|
},
|
|
7
|
-
"dependencies": {
|
|
8
|
-
"react": "^18.3.1"
|
|
9
|
-
},
|
|
10
7
|
"description": "FractoState is a high-performance, decentralized state management library for React. It is engineered to provide surgical state updates with zero boilerplate, absolute type safety, and an architecture that exists independently of the React component tree.",
|
|
11
8
|
"devDependencies": {
|
|
12
9
|
"@reduxjs/toolkit": "^2.11.2",
|
|
@@ -82,5 +79,5 @@
|
|
|
82
79
|
},
|
|
83
80
|
"type": "module",
|
|
84
81
|
"types": "dist/index.d.ts",
|
|
85
|
-
"version": "3.1.
|
|
82
|
+
"version": "3.1.4"
|
|
86
83
|
}
|