fractostate 4.8.3 → 4.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/src/proxy.js +20 -57
- package/dist/cjs/src/proxy.js.map +1 -1
- package/dist/cjs/src/store.js +41 -0
- package/dist/cjs/src/store.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/src/proxy.js +20 -57
- package/dist/esm/src/proxy.js.map +1 -1
- package/dist/esm/src/store.js +41 -0
- package/dist/esm/src/store.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/plugins.d.ts +1 -1
- package/dist/types-DgcrW93l.d.ts +288 -0
- package/package.json +2 -2
package/dist/cjs/index.js
CHANGED
|
@@ -105,7 +105,7 @@ function getFlow(def) {
|
|
|
105
105
|
};
|
|
106
106
|
if (actions) {
|
|
107
107
|
for (const [name, fn] of Object.entries(actions)) {
|
|
108
|
-
if (name === "__ctx__")
|
|
108
|
+
if (name === "__ctx__" || name === "__init__")
|
|
109
109
|
continue;
|
|
110
110
|
boundActions[name] = (...args) => fn(...args)(actionOps);
|
|
111
111
|
}
|
|
@@ -208,7 +208,7 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
208
208
|
};
|
|
209
209
|
if (actions) {
|
|
210
210
|
for (const [name, fn] of Object.entries(actions)) {
|
|
211
|
-
if (name === "__ctx__")
|
|
211
|
+
if (name === "__ctx__" || name === "__init__")
|
|
212
212
|
continue;
|
|
213
213
|
boundActions[name] = (...args) => fn(...args)(actionOps);
|
|
214
214
|
}
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n UseFlowOptions,\n FlowOpsObject,\n ActionOpsObject,\n ContextGetterOps,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\n// Connect proxy creator to store for internal effects\nstore.setProxyCreator(createDeepProxy);\n\nexport * from \"./types\";\n\n/**\n * Manually initializes a flow to ensure its effects run immediately.\n * This is useful for flows that need to start working before any component subscribes to them.\n */\nexport function initFlow<T, A, C>(flow: FlowDefinition<T, A, C>) {\n store.get(flow.key, flow.initial, flow.options);\n}\n\n/**\n * Clears the entire store, all timers, and runs cleanup for all active flow effects.\n */\nexport function clearAll() {\n store.clearAll();\n}\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n const key = derivedKey || `${source.key}_derived_${Date.now()}`;\n store.setParent(key, source.key);\n return {\n key,\n source,\n selector,\n };\n}\n\nexport function defineFlow<\n T,\n A extends Record<string, any>,\n C = A extends { __ctx__: (ops: ContextGetterOps<T, any>) => infer R }\n ? R\n : undefined,\n>(\n key: string,\n initial: T,\n options: FlowOptions<NoInfer<T>, any> & {\n actions: {\n __ctx__?: (c: ContextGetterOps<T, Record<string, any>>) => C;\n } & {\n [K in keyof A as K extends \"__ctx__\" ? never : K]: (\n ...args: any[]\n ) => (ops: ActionOpsObject<T, Record<string, any>, C>) => any;\n } & A;\n },\n): FlowDefinition<T, A, C>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>, {}>,\n): FlowDefinition<T, {}>;\nexport function defineFlow<T, A, C = undefined>(\n key: string,\n initial: T,\n options?: FlowOptions<T, A> & { actions?: A },\n): FlowDefinition<T, A, C> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Non-hook version of useFlow.\n * Useful for accessing and interacting with flows outside React components (e.g., axios interceptors).\n */\nexport function getFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n): [T, FlowOperations<T, A>] {\n const { key, initial, options: flowOptions } = def;\n store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<T, A> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n const actionOps: ActionOpsObject<T, A, any> = {\n get self() {\n return defaultOps.self;\n },\n get state() {\n return defaultOps.state;\n },\n get ctx() {\n const ctxGen = (actions as any)?.__ctx__;\n if (!ctxGen) return undefined;\n return ctxGen({\n state: store.get(key, initial),\n initialState: store.getInitial(key) ?? initial,\n actions: boundActions,\n ops: defaultOps,\n });\n },\n };\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n if (name === \"__ctx__\") continue;\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(actionOps);\n }\n }\n\n const toolbox: FlowOperations<T, A> = {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n\n const latestState = store.get(key, initial);\n return [latestState, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [snapshot, setSnapshot] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setSnapshot(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<any, any> = {\n get self() {\n return createDeepProxy<any, any>(key, [], store.get(key, initialVal), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initialVal);\n },\n };\n\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n const actionOps: ActionOpsObject<any, any, any> = {\n get self() {\n return defaultOps.self;\n },\n get state() {\n return defaultOps.state;\n },\n get ctx() {\n const ctxGen = (actions as any)?.__ctx__;\n if (!ctxGen) return undefined;\n return ctxGen({\n state: store.get(key, initialVal),\n initialState: store.getInitial(key) ?? initialVal,\n actions: boundActions,\n ops: defaultOps,\n });\n },\n };\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n if (name === \"__ctx__\") continue;\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(actionOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, snapshot, flowOptions]);\n\n const state = isDerived\n ? (keyOrDef as any).selector(store.get(key, initialVal))\n : store.get(key, initialVal);\n\n return [state, toolbox] as any;\n}\n"],"names":["store","createDeepProxy","useState","useEffect","useMemo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n FlowDefinition,\n DerivedFlowDefinition,\n FlowOptions,\n UseFlowOptions,\n FlowOpsObject,\n ActionOpsObject,\n ContextGetterOps,\n} from \"./types\";\nimport { store } from \"./store\";\nimport { createDeepProxy } from \"./proxy\";\n\n// Connect proxy creator to store for internal effects\nstore.setProxyCreator(createDeepProxy);\n\nexport * from \"./types\";\n\n/**\n * Manually initializes a flow to ensure its effects run immediately.\n * This is useful for flows that need to start working before any component subscribes to them.\n */\nexport function initFlow<T, A, C>(flow: FlowDefinition<T, A, C>) {\n store.get(flow.key, flow.initial, flow.options);\n}\n\n/**\n * Clears the entire store, all timers, and runs cleanup for all active flow effects.\n */\nexport function clearAll() {\n store.clearAll();\n}\n\n/**\n * Defines a derived flow that reacts to changes in a source flow.\n * Use this for computed values that shouldn't be manually modified.\n */\nexport function defineDerived<T, R>(\n source: FlowDefinition<T, any>,\n selector: (state: T) => R,\n derivedKey?: string,\n): DerivedFlowDefinition<T, R> {\n const key = derivedKey || `${source.key}_derived_${Date.now()}`;\n store.setParent(key, source.key);\n return {\n key,\n source,\n selector,\n };\n}\n\nexport function defineFlow<\n T,\n A extends Record<string, any>,\n C = A extends { __ctx__: (ops: ContextGetterOps<T, any>) => infer R }\n ? R\n : undefined,\n>(\n key: string,\n initial: T,\n options: FlowOptions<NoInfer<T>, any> & {\n actions: {\n __ctx__?: (c: ContextGetterOps<T, Record<string, any>>) => C;\n /**\n * Automatic initialization action.\n * Executed once when the flow is first initialized (e.g., page refresh or first use).\n * Useful for fetching initial data or setting up state before components consume it.\n */\n __init__?: () => (ops: ActionOpsObject<T, Record<string, any>, C>) => any;\n } & {\n [K in keyof A as K extends \"__ctx__\" | \"__init__\" ? never : K]: (\n ...args: any[]\n ) => (ops: ActionOpsObject<T, Record<string, any>, C>) => any;\n } & A;\n },\n): FlowDefinition<T, A, C>;\nexport function defineFlow<T>(\n key: string,\n initial: T,\n options?: FlowOptions<NoInfer<T>, {}>,\n): FlowDefinition<T, {}>;\nexport function defineFlow<T, A, C = undefined>(\n key: string,\n initial: T,\n options?: FlowOptions<T, A> & { actions?: A },\n): FlowDefinition<T, A, C> {\n return { key, initial, options: options as any };\n}\n\n/**\n * Non-hook version of useFlow.\n * Useful for accessing and interacting with flows outside React components (e.g., axios interceptors).\n */\nexport function getFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n): [T, FlowOperations<T, A>] {\n const { key, initial, options: flowOptions } = def;\n store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<T, A> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n const actionOps: ActionOpsObject<T, A, any> = {\n get self() {\n return defaultOps.self;\n },\n get state() {\n return defaultOps.state;\n },\n get ctx() {\n const ctxGen = (actions as any)?.__ctx__;\n if (!ctxGen) return undefined;\n return ctxGen({\n state: store.get(key, initial),\n initialState: store.getInitial(key) ?? initial,\n actions: boundActions,\n ops: defaultOps,\n });\n },\n };\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n if (name === \"__ctx__\" || name === \"__init__\") continue;\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(actionOps);\n }\n }\n\n const toolbox: FlowOperations<T, A> = {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n\n const latestState = store.get(key, initial);\n return [latestState, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [snapshot, setSnapshot] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setSnapshot(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<any, any> = {\n get self() {\n return createDeepProxy<any, any>(key, [], store.get(key, initialVal), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initialVal);\n },\n };\n\n const actions = (keyOrDef as any)?.options?.actions || flowOptions?.actions;\n\n const actionOps: ActionOpsObject<any, any, any> = {\n get self() {\n return defaultOps.self;\n },\n get state() {\n return defaultOps.state;\n },\n get ctx() {\n const ctxGen = (actions as any)?.__ctx__;\n if (!ctxGen) return undefined;\n return ctxGen({\n state: store.get(key, initialVal),\n initialState: store.getInitial(key) ?? initialVal,\n actions: boundActions,\n ops: defaultOps,\n });\n },\n };\n\n if (actions) {\n for (const [name, fn] of Object.entries(actions)) {\n if (name === \"__ctx__\" || name === \"__init__\") continue;\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(actionOps);\n }\n }\n\n return {\n ops: defaultOps,\n actions: boundActions,\n _undo: () => store.undo(key),\n _redo: () => store.redo(key),\n history: store.getHistory(key),\n _canUndo: store.getHistory(key).length > 1,\n _canRedo: store.getRedoStack(key).length > 0,\n _set: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: true,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _patch: (val: any) => {\n const next = typeof val === \"function\" ? val(store.get(key)) : val;\n store.set(key, next, {\n ...flowOptions,\n force: false,\n actor: flowOptions?.name || flowOptions?.actor,\n });\n },\n _reset: () => store.reset(key),\n cf: flowOptions || {},\n isHydrating: !!store.__hydrating__?.has(key),\n };\n }, [key, isDerived, snapshot, flowOptions]);\n\n const state = isDerived\n ? (keyOrDef as any).selector(store.get(key, initialVal))\n : store.get(key, initialVal);\n\n return [state, toolbox] as any;\n}\n"],"names":["store","createDeepProxy","useState","useEffect","useMemo"],"mappings":"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"}
|
package/dist/cjs/src/proxy.js
CHANGED
|
@@ -51,15 +51,11 @@ function getCachedPath(path, prop) {
|
|
|
51
51
|
*
|
|
52
52
|
* Reduced allocations, cached operations
|
|
53
53
|
*/
|
|
54
|
-
function createDeepProxy(key, path,
|
|
55
|
-
|
|
54
|
+
function createDeepProxy(key, path, _initialVal, // Kept for signature compatibility but ignored for live state
|
|
55
|
+
options) {
|
|
56
|
+
// Pre-bind commit function
|
|
56
57
|
const commit = (val, forceful, skipEquality = false, op) => {
|
|
57
58
|
try {
|
|
58
|
-
// INTERNAL OPTIMIZATION: We fetch the RAW current state from the vault
|
|
59
|
-
// without cloning it. Since we are about to produce a new IMMUTABLE state
|
|
60
|
-
// using setInPath (which does structural cloning), this is safe and
|
|
61
|
-
// avoiding a full deepClone of the entire tree on every tiny action
|
|
62
|
-
// results in 100x performance in loops.
|
|
63
59
|
const currentState = store.store.get(key, undefined, { bypassClone: true });
|
|
64
60
|
const newState = setInPath(currentState, path, val);
|
|
65
61
|
store.store.set(key, newState, {
|
|
@@ -75,7 +71,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
75
71
|
throw error;
|
|
76
72
|
}
|
|
77
73
|
};
|
|
78
|
-
// Pre-create update function
|
|
79
74
|
const update = (val, op) => {
|
|
80
75
|
commit(val, false, true, op);
|
|
81
76
|
};
|
|
@@ -83,7 +78,12 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
83
78
|
get(_target, prop) {
|
|
84
79
|
if (typeof prop === "symbol")
|
|
85
80
|
return undefined;
|
|
86
|
-
// ---
|
|
81
|
+
// --- LIVE DATA FETCH ---
|
|
82
|
+
// We fetch the latest root state and drill down to the current path.
|
|
83
|
+
// This ensures Proxies are always "live" even if reused across updates.
|
|
84
|
+
const rootState = store.store.get(key, undefined, { bypassClone: true });
|
|
85
|
+
const currentVal = path.length === 0 ? rootState : getInPath(rootState, path);
|
|
86
|
+
// --- Meta-Operations ---
|
|
87
87
|
if (prop === "_val")
|
|
88
88
|
return currentVal;
|
|
89
89
|
if (prop === "_set")
|
|
@@ -106,59 +106,29 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
106
106
|
return (store.store.getRedoStack(key)?.length || 0) > 0;
|
|
107
107
|
if (prop === "_history")
|
|
108
108
|
return store.store.getHistory(key);
|
|
109
|
-
// Handle plugin-provided operations (e.g., _persist)
|
|
110
109
|
const pluginOps = store.store.getPluginOps(key, options);
|
|
111
110
|
if (prop in pluginOps)
|
|
112
111
|
return pluginOps[prop];
|
|
113
|
-
// Type check once for this level
|
|
114
112
|
const valType = typeof currentVal;
|
|
115
113
|
const isArray = Array.isArray(currentVal);
|
|
116
|
-
// --- Number Operations
|
|
114
|
+
// --- Number Operations ---
|
|
117
115
|
if (valType === "number") {
|
|
118
116
|
switch (prop) {
|
|
119
117
|
case "_increment":
|
|
120
|
-
return (amount = 1) =>
|
|
121
|
-
const liveVal = path.length === 0
|
|
122
|
-
? store.store.get(key, undefined, { bypassClone: true })
|
|
123
|
-
: getInPath(store.store.get(key, undefined, { bypassClone: true }), path);
|
|
124
|
-
update(liveVal + amount, "_increment");
|
|
125
|
-
};
|
|
118
|
+
return (amount = 1) => update(currentVal + amount, "_increment");
|
|
126
119
|
case "_decrement":
|
|
127
|
-
return (amount = 1) =>
|
|
128
|
-
const liveVal = path.length === 0
|
|
129
|
-
? store.store.get(key, undefined, { bypassClone: true })
|
|
130
|
-
: getInPath(store.store.get(key, undefined, { bypassClone: true }), path);
|
|
131
|
-
update(liveVal - amount, "_decrement");
|
|
132
|
-
};
|
|
120
|
+
return (amount = 1) => update(currentVal - amount, "_decrement");
|
|
133
121
|
case "_add":
|
|
134
|
-
return (amount) =>
|
|
135
|
-
const liveVal = path.length === 0
|
|
136
|
-
? store.store.get(key, undefined, { bypassClone: true })
|
|
137
|
-
: getInPath(store.store.get(key, undefined, { bypassClone: true }), path);
|
|
138
|
-
update(liveVal + amount, "_add");
|
|
139
|
-
};
|
|
122
|
+
return (amount) => update(currentVal + amount, "_add");
|
|
140
123
|
case "_subtract":
|
|
141
|
-
return (amount) =>
|
|
142
|
-
const liveVal = path.length === 0
|
|
143
|
-
? store.store.get(key, undefined, { bypassClone: true })
|
|
144
|
-
: getInPath(store.store.get(key, undefined, { bypassClone: true }), path);
|
|
145
|
-
update(liveVal - amount, "_subtract");
|
|
146
|
-
};
|
|
124
|
+
return (amount) => update(currentVal - amount, "_subtract");
|
|
147
125
|
case "_multiply":
|
|
148
|
-
return (amount) =>
|
|
149
|
-
const liveVal = path.length === 0
|
|
150
|
-
? store.store.get(key, undefined, { bypassClone: true })
|
|
151
|
-
: getInPath(store.store.get(key, undefined, { bypassClone: true }), path);
|
|
152
|
-
update(liveVal * amount, "_multiply");
|
|
153
|
-
};
|
|
126
|
+
return (amount) => update(currentVal * amount, "_multiply");
|
|
154
127
|
case "_divide":
|
|
155
128
|
return (amount) => {
|
|
156
129
|
if (amount === 0)
|
|
157
130
|
throw new Error("[FlowProxy] Division by zero");
|
|
158
|
-
|
|
159
|
-
? store.store.get(key, undefined, { bypassClone: true })
|
|
160
|
-
: getInPath(store.store.get(key, undefined, { bypassClone: true }), path);
|
|
161
|
-
update(liveVal / amount, "_divide");
|
|
131
|
+
update(currentVal / amount, "_divide");
|
|
162
132
|
};
|
|
163
133
|
case "_pow":
|
|
164
134
|
return (n) => update(Math.pow(currentVal, n), "_pow");
|
|
@@ -182,12 +152,11 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
182
152
|
return (p) => update(parseFloat(currentVal.toPrecision(p)), "_toPrecision");
|
|
183
153
|
}
|
|
184
154
|
}
|
|
185
|
-
// --- Array Operations
|
|
155
|
+
// --- Array Operations ---
|
|
186
156
|
if (isArray) {
|
|
187
157
|
switch (prop) {
|
|
188
158
|
case "_push":
|
|
189
159
|
return (item) => {
|
|
190
|
-
// Manual copy instead of spread for large arrays
|
|
191
160
|
const len = currentVal.length;
|
|
192
161
|
const newArr = new Array(len + 1);
|
|
193
162
|
for (let i = 0; i < len; i++)
|
|
@@ -201,7 +170,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
201
170
|
return () => update(currentVal.slice(1), "_shift");
|
|
202
171
|
case "_unshift":
|
|
203
172
|
return (item) => {
|
|
204
|
-
// Manual copy for better performance
|
|
205
173
|
const len = currentVal.length;
|
|
206
174
|
const newArr = new Array(len + 1);
|
|
207
175
|
newArr[0] = item;
|
|
@@ -215,7 +183,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
215
183
|
return (fn) => update(currentVal.map(fn), "_map");
|
|
216
184
|
case "_removeAt":
|
|
217
185
|
return (index) => {
|
|
218
|
-
// Manual filter for single index
|
|
219
186
|
const len = currentVal.length;
|
|
220
187
|
const newArr = new Array(len - 1);
|
|
221
188
|
let j = 0;
|
|
@@ -236,7 +203,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
236
203
|
newArr[i + 1] = currentVal[i];
|
|
237
204
|
update(newArr, "_insertAt");
|
|
238
205
|
};
|
|
239
|
-
// --- New Ops (v4.8.0) ---
|
|
240
206
|
case "_splice":
|
|
241
207
|
return (s, d, ...items) => {
|
|
242
208
|
const next = [...currentVal];
|
|
@@ -266,7 +232,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
266
232
|
}
|
|
267
233
|
update(next, "_shuffle");
|
|
268
234
|
};
|
|
269
|
-
// Traversers that return a proxy to an item
|
|
270
235
|
case "_at":
|
|
271
236
|
return (i) => {
|
|
272
237
|
const idx = i < 0 ? currentVal.length + i : i;
|
|
@@ -298,7 +263,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
298
263
|
return () => update(currentVal.toLowerCase(), "_lowercase");
|
|
299
264
|
case "_trim":
|
|
300
265
|
return () => update(currentVal.trim(), "_trim");
|
|
301
|
-
// --- New Ops (v4.8.0) ---
|
|
302
266
|
case "_replace":
|
|
303
267
|
return (p, r) => update(currentVal.replace(p, r), "_replace");
|
|
304
268
|
case "_replaceAll":
|
|
@@ -331,14 +295,12 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
331
295
|
if (currentVal !== null && valType === "object" && !isArray) {
|
|
332
296
|
if (prop === "_merge") {
|
|
333
297
|
return (obj) => {
|
|
334
|
-
// Object.assign faster than spread for merge
|
|
335
298
|
const merged = Object.assign({}, currentVal, obj);
|
|
336
299
|
update(merged, "_merge");
|
|
337
300
|
};
|
|
338
301
|
}
|
|
339
302
|
if (prop === "_delete") {
|
|
340
303
|
return (keyToDel) => {
|
|
341
|
-
// Only copy if key exists
|
|
342
304
|
if (!(keyToDel in currentVal))
|
|
343
305
|
return;
|
|
344
306
|
const keys = Object.keys(currentVal);
|
|
@@ -350,7 +312,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
350
312
|
update(next, "_delete");
|
|
351
313
|
};
|
|
352
314
|
}
|
|
353
|
-
// --- New Ops (v4.8.0) ---
|
|
354
315
|
if (prop === "_pick") {
|
|
355
316
|
return (keys) => {
|
|
356
317
|
const next = {};
|
|
@@ -386,7 +347,6 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
386
347
|
}
|
|
387
348
|
}
|
|
388
349
|
// Recursive step: create a new proxy for the child property
|
|
389
|
-
// Use cached path
|
|
390
350
|
const nextVal = currentVal !== null && currentVal !== undefined
|
|
391
351
|
? currentVal[prop]
|
|
392
352
|
: undefined;
|
|
@@ -394,6 +354,9 @@ function createDeepProxy(key, path, currentVal, options) {
|
|
|
394
354
|
return createDeepProxy(key, newPath, nextVal, options);
|
|
395
355
|
},
|
|
396
356
|
apply(_target, _thisArg, args) {
|
|
357
|
+
// Re-fetch current value for apply trap too
|
|
358
|
+
const rootState = store.store.get(key, undefined, { bypassClone: true });
|
|
359
|
+
const currentVal = path.length === 0 ? rootState : getInPath(rootState, path);
|
|
397
360
|
if (typeof currentVal === "function") {
|
|
398
361
|
return currentVal(...args);
|
|
399
362
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\n\n// Path cache to avoid repeated array allocations\nconst pathCache = new WeakMap<string[], Map<string, string[]>>();\n\nfunction getCachedPath(path: string[], prop: string): string[] {\n let cache = pathCache.get(path);\n if (!cache) {\n cache = new Map();\n pathCache.set(path, cache);\n }\n\n let cached = cache.get(prop);\n if (!cached) {\n cached = [...path, prop];\n cache.set(prop, cached);\n }\n return cached;\n}\n\n/**\n * Creates a deep proxy that provides type-specific atomic operations for a flow.\n * The proxy tracks its path within the state tree and maps access to specific update logic.\n *\n * Reduced allocations, cached operations\n */\nexport function createDeepProxy<T = any, A = Record<string, any>>(\n key: string,\n path: string[],\n currentVal: any,\n options: FlowOptions<any>,\n): TypeAwareOps<T, A> {\n // Pre-bind commit function to avoid recreation\n const commit = (\n val: any,\n forceful: boolean,\n skipEquality = false,\n op?: string,\n ) => {\n try {\n // INTERNAL OPTIMIZATION: We fetch the RAW current state from the vault\n // without cloning it. Since we are about to produce a new IMMUTABLE state\n // using setInPath (which does structural cloning), this is safe and\n // avoiding a full deepClone of the entire tree on every tiny action\n // results in 100x performance in loops.\n const currentState = store.get(key, undefined, { bypassClone: true });\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n _op: op || (options as any)._op || \"set\",\n _path: path,\n } as any);\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n // Pre-create update function\n const update = (val: any, op?: string) => {\n commit(val, false, true, op);\n };\n\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n // --- Meta-Operations (Fast path) ---\n if (prop === \"_val\") return currentVal;\n if (prop === \"_set\")\n return (val: any) => {\n commit(val, true, false, \"_set\");\n };\n if (prop === \"_patch\")\n return (val: any) => {\n commit(val, false, false, \"_patch\");\n };\n if (prop === \"__actions__\") return (options as any).actions;\n if (prop === \"_undo\") return () => store.undo(key);\n if (prop === \"_redo\") return () => store.redo(key);\n if (prop === \"_canUndo\") return (store.getHistory(key)?.length || 0) > 1;\n if (prop === \"_canRedo\")\n return (store.getRedoStack(key)?.length || 0) > 0;\n if (prop === \"_history\") return store.getHistory(key);\n\n // Handle plugin-provided operations (e.g., _persist)\n const pluginOps = store.getPluginOps(key, options);\n if (prop in pluginOps) return pluginOps[prop];\n\n // Type check once for this level\n const valType = typeof currentVal;\n const isArray = Array.isArray(currentVal);\n\n // --- Number Operations (Optimized with cached functions) ---\n if (valType === \"number\") {\n switch (prop) {\n case \"_increment\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_increment\");\n };\n case \"_decrement\":\n return (amount = 1) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_decrement\");\n };\n case \"_add\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal + amount, \"_add\");\n };\n case \"_subtract\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal - amount, \"_subtract\");\n };\n case \"_multiply\":\n return (amount: number) => {\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal * amount, \"_multiply\");\n };\n case \"_divide\":\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n const liveVal =\n path.length === 0\n ? store.get(key, undefined, { bypassClone: true })\n : getInPath(\n store.get(key, undefined, { bypassClone: true }),\n path,\n );\n update(liveVal / amount, \"_divide\");\n };\n case \"_pow\":\n return (n: number) => update(Math.pow(currentVal, n), \"_pow\");\n case \"_sqrt\":\n return () => update(Math.sqrt(currentVal), \"_sqrt\");\n case \"_abs\":\n return () => update(Math.abs(currentVal), \"_abs\");\n case \"_round\":\n return () => update(Math.round(currentVal), \"_round\");\n case \"_floor\":\n return () => update(Math.floor(currentVal), \"_floor\");\n case \"_ceil\":\n return () => update(Math.ceil(currentVal), \"_ceil\");\n case \"_mod\":\n return (n: number) => update(currentVal % n, \"_mod\");\n case \"_clamp\":\n return (min: number, max: number) =>\n update(Math.min(Math.max(currentVal, min), max), \"_clamp\");\n case \"_negate\":\n return () => update(-currentVal, \"_negate\");\n case \"_toPrecision\":\n return (p: number) =>\n update(parseFloat(currentVal.toPrecision(p)), \"_toPrecision\");\n }\n }\n\n // --- Array Operations (Optimized with minimal allocations) ---\n if (isArray) {\n switch (prop) {\n case \"_push\":\n return (item: any) => {\n // Manual copy instead of spread for large arrays\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < len; i++) newArr[i] = currentVal[i];\n newArr[len] = item;\n update(newArr, \"_push\");\n };\n case \"_pop\":\n return () => update(currentVal.slice(0, -1), \"_pop\");\n case \"_shift\":\n return () => update(currentVal.slice(1), \"_shift\");\n case \"_unshift\":\n return (item: any) => {\n // Manual copy for better performance\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n newArr[0] = item;\n for (let i = 0; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_unshift\");\n };\n case \"_filter\":\n return (fn: any) => update(currentVal.filter(fn), \"_filter\");\n case \"_map\":\n return (fn: any) => update(currentVal.map(fn), \"_map\");\n case \"_removeAt\":\n return (index: number) => {\n // Manual filter for single index\n const len = currentVal.length;\n const newArr = new Array(len - 1);\n let j = 0;\n for (let i = 0; i < len; i++) {\n if (i !== index) newArr[j++] = currentVal[i];\n }\n update(newArr, \"_removeAt\");\n };\n case \"_insertAt\":\n return (index: number, item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < index; i++) newArr[i] = currentVal[i];\n newArr[index] = item;\n for (let i = index; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_insertAt\");\n };\n // --- New Ops (v4.8.0) ---\n case \"_splice\":\n return (s: number, d: number, ...items: any[]) => {\n const next = [...currentVal];\n next.splice(s, d, ...items);\n update(next, \"_splice\");\n };\n case \"_reverse\":\n return () => update([...currentVal].reverse(), \"_reverse\");\n case \"_sort\":\n return (fn: any) => update([...currentVal].sort(fn), \"_sort\");\n case \"_fill\":\n return (v: any, s?: number, e?: number) => {\n const next = [...currentVal];\n next.fill(v, s, e);\n update(next, \"_fill\");\n };\n case \"_concat\":\n return (other: any[]) =>\n update(currentVal.concat(other), \"_concat\");\n case \"_uniq\":\n return () => update(Array.from(new Set(currentVal)), \"_uniq\");\n case \"_shuffle\":\n return () => {\n const next = [...currentVal];\n for (let i = next.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [next[i], next[j]] = [next[j], next[i]];\n }\n update(next, \"_shuffle\");\n };\n // Traversers that return a proxy to an item\n case \"_at\":\n return (i: number) => {\n const idx = i < 0 ? currentVal.length + i : i;\n return createDeepProxy(\n key,\n getCachedPath(path, idx.toString()),\n currentVal[idx],\n options,\n );\n };\n case \"_first\":\n return () =>\n createDeepProxy(\n key,\n getCachedPath(path, \"0\"),\n currentVal[0],\n options,\n );\n case \"_last\":\n return () =>\n createDeepProxy(\n key,\n getCachedPath(path, (currentVal.length - 1).toString()),\n currentVal[currentVal.length - 1],\n options,\n );\n case \"_findBy\":\n return (fn: (item: any, idx: number) => boolean) => {\n const idx = currentVal.findIndex(fn);\n if (idx === -1) return undefined;\n return createDeepProxy(\n key,\n getCachedPath(path, idx.toString()),\n currentVal[idx],\n options,\n );\n };\n }\n }\n\n // --- String Operations ---\n if (valType === \"string\") {\n switch (prop) {\n case \"_append\":\n return (str: string) => update(currentVal + str, \"_append\");\n case \"_prepend\":\n return (str: string) => update(str + currentVal, \"_prepend\");\n case \"_uppercase\":\n return () => update(currentVal.toUpperCase(), \"_uppercase\");\n case \"_lowercase\":\n return () => update(currentVal.toLowerCase(), \"_lowercase\");\n case \"_trim\":\n return () => update(currentVal.trim(), \"_trim\");\n // --- New Ops (v4.8.0) ---\n case \"_replace\":\n return (p: string | RegExp, r: string) =>\n update(currentVal.replace(p, r), \"_replace\");\n case \"_replaceAll\":\n return (p: string | RegExp, r: string) =>\n update(currentVal.replaceAll(p, r), \"_replaceAll\");\n case \"_substring\":\n return (s: number, e?: number) =>\n update(currentVal.substring(s, e), \"_substring\");\n case \"_slice\":\n return (s: number, e?: number) =>\n update(currentVal.slice(s, e), \"_slice\");\n case \"_capitalize\":\n return () =>\n update(\n currentVal.charAt(0).toUpperCase() + currentVal.slice(1),\n \"_capitalize\",\n );\n case \"_truncate\":\n return (l: number, s = \"...\") =>\n update(\n currentVal.length > l\n ? currentVal.substring(0, l) + s\n : currentVal,\n \"_truncate\",\n );\n case \"_padEnd\":\n return (l: number, f?: string) =>\n update(currentVal.padEnd(l, f), \"_padEnd\");\n case \"_padStart\":\n return (l: number, f?: string) =>\n update(currentVal.padStart(l, f), \"_padStart\");\n case \"_repeat\":\n return (c: number) => update(currentVal.repeat(c), \"_repeat\");\n }\n }\n\n // --- Boolean Operations ---\n if (valType === \"boolean\") {\n if (prop === \"_toggle\") {\n return () => update(!currentVal, \"_toggle\");\n }\n }\n\n // --- Object Operations ---\n if (currentVal !== null && valType === \"object\" && !isArray) {\n if (prop === \"_merge\") {\n return (obj: any) => {\n // Object.assign faster than spread for merge\n const merged = Object.assign({}, currentVal, obj);\n update(merged, \"_merge\");\n };\n }\n if (prop === \"_delete\") {\n return (keyToDel: string) => {\n // Only copy if key exists\n if (!(keyToDel in currentVal)) return;\n const keys = Object.keys(currentVal);\n const next: any = {};\n for (const k of keys) {\n if (k !== keyToDel) next[k] = currentVal[k];\n }\n update(next, \"_delete\");\n };\n }\n // --- New Ops (v4.8.0) ---\n if (prop === \"_pick\") {\n return (keys: string[]) => {\n const next: any = {};\n keys.forEach((k) => {\n if (k in currentVal) next[k] = currentVal[k];\n });\n update(next, \"_pick\");\n };\n }\n if (prop === \"_omit\") {\n return (keys: string[]) => {\n const next = { ...currentVal };\n keys.forEach((k) => delete next[k]);\n update(next, \"_omit\");\n };\n }\n if (prop === \"_defaults\") {\n return (d: any) => update({ ...d, ...currentVal }, \"_defaults\");\n }\n if (prop === \"_clear\") return () => update({}, \"_clear\");\n if (prop === \"_clone\") return () => update({ ...currentVal }, \"_clone\");\n if (prop === \"_assign\")\n return (s: any) => update({ ...currentVal, ...s }, \"_assign\");\n if (prop === \"_mapValues\") {\n return (fn: any) => {\n const next: any = {};\n Object.keys(currentVal).forEach(\n (k) => (next[k] = fn(currentVal[k], k)),\n );\n update(next, \"_mapValues\");\n };\n }\n }\n\n // Recursive step: create a new proxy for the child property\n // Use cached path\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n const newPath = getCachedPath(path, prop);\n return createDeepProxy(key, newPath, nextVal, options);\n },\n apply(_target, _thisArg, args) {\n if (typeof currentVal === \"function\") {\n return currentVal(...args);\n }\n console.warn(\n `[FlowProxy] Attempted to call a non-function value at path: ${path.join(\".\")}`,\n );\n },\n }) as unknown as TypeAwareOps<T, A>;\n}\n\n/**\n * Immutable update utility that sets a value at a specific path within an object/array.\n */\nexport function setInPath(obj: any, path: string[], value: any): any {\n return setInPathRecursive(obj, path, value, 0);\n}\n\nfunction setInPathRecursive(\n obj: any,\n path: string[],\n value: any,\n index: number,\n): any {\n if (index === path.length) return value;\n\n const head = path[index];\n\n if (Array.isArray(obj)) {\n const i = parseInt(head, 10);\n if (isNaN(i) || i < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n\n const len = obj.length;\n const newArr = new Array(Math.max(len, i + 1));\n\n // Fast copy with check for modified index\n for (let j = 0; j < newArr.length; j++) {\n if (j === i) {\n newArr[j] = setInPathRecursive(obj[j], path, value, index + 1);\n } else {\n newArr[j] = j < len ? obj[j] : undefined;\n }\n }\n return newArr;\n }\n\n // Object path\n const currentObj = obj ?? {};\n const keys = Object.keys(currentObj);\n const result: any = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result[key] =\n key === head\n ? setInPathRecursive(currentObj[key], path, value, index + 1)\n : currentObj[key];\n }\n\n if (!(head in currentObj)) {\n result[head] = setInPathRecursive(undefined, path, value, index + 1);\n }\n\n return result;\n}\n\n/**\n * Access utility to get a value at a specific path.\n */\nfunction getInPath(obj: any, path: string[]): any {\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (current === null || current === undefined) return undefined;\n current = current[path[i]];\n }\n return current;\n}\n"],"names":["store"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sources":["../../../src/proxy.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions, TypeAwareOps } from \"./types\";\nimport { store } from \"./store\";\n\n// Path cache to avoid repeated array allocations\nconst pathCache = new WeakMap<string[], Map<string, string[]>>();\n\nfunction getCachedPath(path: string[], prop: string): string[] {\n let cache = pathCache.get(path);\n if (!cache) {\n cache = new Map();\n pathCache.set(path, cache);\n }\n\n let cached = cache.get(prop);\n if (!cached) {\n cached = [...path, prop];\n cache.set(prop, cached);\n }\n return cached;\n}\n\n/**\n * Creates a deep proxy that provides type-specific atomic operations for a flow.\n * The proxy tracks its path within the state tree and maps access to specific update logic.\n *\n * Reduced allocations, cached operations\n */\nexport function createDeepProxy<T = any, A = Record<string, any>>(\n key: string,\n path: string[],\n _initialVal: any, // Kept for signature compatibility but ignored for live state\n options: FlowOptions<any>,\n): TypeAwareOps<T, A> {\n // Pre-bind commit function\n const commit = (\n val: any,\n forceful: boolean,\n skipEquality = false,\n op?: string,\n ) => {\n try {\n const currentState = store.get(key, undefined, { bypassClone: true });\n const newState = setInPath(currentState, path, val);\n store.set(key, newState, {\n ...options,\n force: forceful,\n skipEquality,\n _op: op || (options as any)._op || \"set\",\n _path: path,\n } as any);\n } catch (error) {\n console.error(\n `[FlowProxy] Commit error at path ${path.join(\".\")}:`,\n error,\n );\n throw error;\n }\n };\n\n const update = (val: any, op?: string) => {\n commit(val, false, true, op);\n };\n\n return new Proxy(() => {}, {\n get(_target: any, prop: any) {\n if (typeof prop === \"symbol\") return undefined;\n\n // --- LIVE DATA FETCH ---\n // We fetch the latest root state and drill down to the current path.\n // This ensures Proxies are always \"live\" even if reused across updates.\n const rootState = store.get(key, undefined, { bypassClone: true });\n const currentVal =\n path.length === 0 ? rootState : getInPath(rootState, path);\n\n // --- Meta-Operations ---\n if (prop === \"_val\") return currentVal;\n if (prop === \"_set\")\n return (val: any) => {\n commit(val, true, false, \"_set\");\n };\n if (prop === \"_patch\")\n return (val: any) => {\n commit(val, false, false, \"_patch\");\n };\n if (prop === \"__actions__\") return (options as any).actions;\n if (prop === \"_undo\") return () => store.undo(key);\n if (prop === \"_redo\") return () => store.redo(key);\n if (prop === \"_canUndo\") return (store.getHistory(key)?.length || 0) > 1;\n if (prop === \"_canRedo\")\n return (store.getRedoStack(key)?.length || 0) > 0;\n if (prop === \"_history\") return store.getHistory(key);\n\n const pluginOps = store.getPluginOps(key, options);\n if (prop in pluginOps) return pluginOps[prop];\n\n const valType = typeof currentVal;\n const isArray = Array.isArray(currentVal);\n\n // --- Number Operations ---\n if (valType === \"number\") {\n switch (prop) {\n case \"_increment\":\n return (amount = 1) => update(currentVal + amount, \"_increment\");\n case \"_decrement\":\n return (amount = 1) => update(currentVal - amount, \"_decrement\");\n case \"_add\":\n return (amount: number) => update(currentVal + amount, \"_add\");\n case \"_subtract\":\n return (amount: number) => update(currentVal - amount, \"_subtract\");\n case \"_multiply\":\n return (amount: number) => update(currentVal * amount, \"_multiply\");\n case \"_divide\":\n return (amount: number) => {\n if (amount === 0) throw new Error(\"[FlowProxy] Division by zero\");\n update(currentVal / amount, \"_divide\");\n };\n case \"_pow\":\n return (n: number) => update(Math.pow(currentVal, n), \"_pow\");\n case \"_sqrt\":\n return () => update(Math.sqrt(currentVal), \"_sqrt\");\n case \"_abs\":\n return () => update(Math.abs(currentVal), \"_abs\");\n case \"_round\":\n return () => update(Math.round(currentVal), \"_round\");\n case \"_floor\":\n return () => update(Math.floor(currentVal), \"_floor\");\n case \"_ceil\":\n return () => update(Math.ceil(currentVal), \"_ceil\");\n case \"_mod\":\n return (n: number) => update(currentVal % n, \"_mod\");\n case \"_clamp\":\n return (min: number, max: number) =>\n update(Math.min(Math.max(currentVal, min), max), \"_clamp\");\n case \"_negate\":\n return () => update(-currentVal, \"_negate\");\n case \"_toPrecision\":\n return (p: number) =>\n update(parseFloat(currentVal.toPrecision(p)), \"_toPrecision\");\n }\n }\n\n // --- Array Operations ---\n if (isArray) {\n switch (prop) {\n case \"_push\":\n return (item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < len; i++) newArr[i] = currentVal[i];\n newArr[len] = item;\n update(newArr, \"_push\");\n };\n case \"_pop\":\n return () => update(currentVal.slice(0, -1), \"_pop\");\n case \"_shift\":\n return () => update(currentVal.slice(1), \"_shift\");\n case \"_unshift\":\n return (item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n newArr[0] = item;\n for (let i = 0; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_unshift\");\n };\n case \"_filter\":\n return (fn: any) => update(currentVal.filter(fn), \"_filter\");\n case \"_map\":\n return (fn: any) => update(currentVal.map(fn), \"_map\");\n case \"_removeAt\":\n return (index: number) => {\n const len = currentVal.length;\n const newArr = new Array(len - 1);\n let j = 0;\n for (let i = 0; i < len; i++) {\n if (i !== index) newArr[j++] = currentVal[i];\n }\n update(newArr, \"_removeAt\");\n };\n case \"_insertAt\":\n return (index: number, item: any) => {\n const len = currentVal.length;\n const newArr = new Array(len + 1);\n for (let i = 0; i < index; i++) newArr[i] = currentVal[i];\n newArr[index] = item;\n for (let i = index; i < len; i++) newArr[i + 1] = currentVal[i];\n update(newArr, \"_insertAt\");\n };\n case \"_splice\":\n return (s: number, d: number, ...items: any[]) => {\n const next = [...currentVal];\n next.splice(s, d, ...items);\n update(next, \"_splice\");\n };\n case \"_reverse\":\n return () => update([...currentVal].reverse(), \"_reverse\");\n case \"_sort\":\n return (fn: any) => update([...currentVal].sort(fn), \"_sort\");\n case \"_fill\":\n return (v: any, s?: number, e?: number) => {\n const next = [...currentVal];\n next.fill(v, s, e);\n update(next, \"_fill\");\n };\n case \"_concat\":\n return (other: any[]) =>\n update(currentVal.concat(other), \"_concat\");\n case \"_uniq\":\n return () => update(Array.from(new Set(currentVal)), \"_uniq\");\n case \"_shuffle\":\n return () => {\n const next = [...currentVal];\n for (let i = next.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [next[i], next[j]] = [next[j], next[i]];\n }\n update(next, \"_shuffle\");\n };\n case \"_at\":\n return (i: number) => {\n const idx = i < 0 ? currentVal.length + i : i;\n return createDeepProxy(\n key,\n getCachedPath(path, idx.toString()),\n currentVal[idx],\n options,\n );\n };\n case \"_first\":\n return () =>\n createDeepProxy(\n key,\n getCachedPath(path, \"0\"),\n currentVal[0],\n options,\n );\n case \"_last\":\n return () =>\n createDeepProxy(\n key,\n getCachedPath(path, (currentVal.length - 1).toString()),\n currentVal[currentVal.length - 1],\n options,\n );\n case \"_findBy\":\n return (fn: (item: any, idx: number) => boolean) => {\n const idx = currentVal.findIndex(fn);\n if (idx === -1) return undefined;\n return createDeepProxy(\n key,\n getCachedPath(path, idx.toString()),\n currentVal[idx],\n options,\n );\n };\n }\n }\n\n // --- String Operations ---\n if (valType === \"string\") {\n switch (prop) {\n case \"_append\":\n return (str: string) => update(currentVal + str, \"_append\");\n case \"_prepend\":\n return (str: string) => update(str + currentVal, \"_prepend\");\n case \"_uppercase\":\n return () => update(currentVal.toUpperCase(), \"_uppercase\");\n case \"_lowercase\":\n return () => update(currentVal.toLowerCase(), \"_lowercase\");\n case \"_trim\":\n return () => update(currentVal.trim(), \"_trim\");\n case \"_replace\":\n return (p: string | RegExp, r: string) =>\n update(currentVal.replace(p, r), \"_replace\");\n case \"_replaceAll\":\n return (p: string | RegExp, r: string) =>\n update(currentVal.replaceAll(p, r), \"_replaceAll\");\n case \"_substring\":\n return (s: number, e?: number) =>\n update(currentVal.substring(s, e), \"_substring\");\n case \"_slice\":\n return (s: number, e?: number) =>\n update(currentVal.slice(s, e), \"_slice\");\n case \"_capitalize\":\n return () => \n update(\n currentVal.charAt(0).toUpperCase() + currentVal.slice(1),\n \"_capitalize\",\n );\n case \"_truncate\":\n return (l: number, s = \"...\") =>\n update(\n currentVal.length > l\n ? currentVal.substring(0, l) + s\n : currentVal,\n \"_truncate\",\n );\n case \"_padEnd\":\n return (l: number, f?: string) =>\n update(currentVal.padEnd(l, f), \"_padEnd\");\n case \"_padStart\":\n return (l: number, f?: string) =>\n update(currentVal.padStart(l, f), \"_padStart\");\n case \"_repeat\":\n return (c: number) => update(currentVal.repeat(c), \"_repeat\");\n }\n }\n\n // --- Boolean Operations ---\n if (valType === \"boolean\") {\n if (prop === \"_toggle\") {\n return () => update(!currentVal, \"_toggle\");\n }\n }\n\n // --- Object Operations ---\n if (currentVal !== null && valType === \"object\" && !isArray) {\n if (prop === \"_merge\") {\n return (obj: any) => {\n const merged = Object.assign({}, currentVal, obj);\n update(merged, \"_merge\");\n };\n }\n if (prop === \"_delete\") {\n return (keyToDel: string) => {\n if (!(keyToDel in currentVal)) return;\n const keys = Object.keys(currentVal);\n const next: any = {};\n for (const k of keys) {\n if (k !== keyToDel) next[k] = currentVal[k];\n }\n update(next, \"_delete\");\n };\n }\n if (prop === \"_pick\") {\n return (keys: string[]) => {\n const next: any = {};\n keys.forEach((k) => {\n if (k in currentVal) next[k] = currentVal[k];\n });\n update(next, \"_pick\");\n };\n }\n if (prop === \"_omit\") {\n return (keys: string[]) => {\n const next = { ...currentVal };\n keys.forEach((k) => delete next[k]);\n update(next, \"_omit\");\n };\n }\n if (prop === \"_defaults\") {\n return (d: any) => update({ ...d, ...currentVal }, \"_defaults\");\n }\n if (prop === \"_clear\") return () => update({}, \"_clear\");\n if (prop === \"_clone\") return () => update({ ...currentVal }, \"_clone\");\n if (prop === \"_assign\")\n return (s: any) => update({ ...currentVal, ...s }, \"_assign\");\n if (prop === \"_mapValues\") {\n return (fn: any) => {\n const next: any = {};\n Object.keys(currentVal).forEach(\n (k) => (next[k] = fn(currentVal[k], k)),\n );\n update(next, \"_mapValues\");\n };\n }\n }\n\n // Recursive step: create a new proxy for the child property\n const nextVal =\n currentVal !== null && currentVal !== undefined\n ? currentVal[prop]\n : undefined;\n const newPath = getCachedPath(path, prop);\n return createDeepProxy(key, newPath, nextVal, options);\n },\n apply(_target, _thisArg, args) {\n // Re-fetch current value for apply trap too\n const rootState = store.get(key, undefined, { bypassClone: true });\n const currentVal =\n path.length === 0 ? rootState : getInPath(rootState, path);\n\n if (typeof currentVal === \"function\") {\n return currentVal(...args);\n }\n console.warn(\n `[FlowProxy] Attempted to call a non-function value at path: ${path.join(\".\")}`,\n );\n },\n }) as unknown as TypeAwareOps<T, A>;\n}\n\n/**\n * Immutable update utility that sets a value at a specific path within an object/array.\n */\nexport function setInPath(obj: any, path: string[], value: any): any {\n return setInPathRecursive(obj, path, value, 0);\n}\n\nfunction setInPathRecursive(\n obj: any,\n path: string[],\n value: any,\n index: number,\n): any {\n if (index === path.length) return value;\n\n const head = path[index];\n\n if (Array.isArray(obj)) {\n const i = parseInt(head, 10);\n if (isNaN(i) || i < 0)\n throw new Error(`[FlowProxy] Invalid array index: ${head}`);\n\n const len = obj.length;\n const newArr = new Array(Math.max(len, i + 1));\n\n // Fast copy with check for modified index\n for (let j = 0; j < newArr.length; j++) {\n if (j === i) {\n newArr[j] = setInPathRecursive(obj[j], path, value, index + 1);\n } else {\n newArr[j] = j < len ? obj[j] : undefined;\n }\n }\n return newArr;\n }\n\n // Object path\n const currentObj = obj ?? {};\n const keys = Object.keys(currentObj);\n const result: any = {};\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n result[key] =\n key === head\n ? setInPathRecursive(currentObj[key], path, value, index + 1)\n : currentObj[key];\n }\n\n if (!(head in currentObj)) {\n result[head] = setInPathRecursive(undefined, path, value, index + 1);\n }\n\n return result;\n}\n\n/**\n * Access utility to get a value at a specific path.\n */\nfunction getInPath(obj: any, path: string[]): any {\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (current === null || current === undefined) return undefined;\n current = current[path[i]];\n }\n return current;\n}\n"],"names":["store"],"mappings":"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"}
|
package/dist/cjs/src/store.js
CHANGED
|
@@ -274,6 +274,45 @@ class MemoryVault {
|
|
|
274
274
|
}
|
|
275
275
|
}
|
|
276
276
|
this.vault.set(key, startingValue);
|
|
277
|
+
// --- __init__ Auto-Run ---
|
|
278
|
+
// If an action named "__init__" is defined, execute it once synchronously
|
|
279
|
+
// on first initialization. It is NOT exposed in boundActions.
|
|
280
|
+
const initFn = options?.actions?.__init__;
|
|
281
|
+
if (initFn && this.proxyCreator) {
|
|
282
|
+
const vaultInstance = this;
|
|
283
|
+
const initBoundActions = {};
|
|
284
|
+
const initOps = {
|
|
285
|
+
get self() {
|
|
286
|
+
return vaultInstance.proxyCreator(key, [], vaultInstance.vault.get(key), { ...options, actions: initBoundActions });
|
|
287
|
+
},
|
|
288
|
+
get state() {
|
|
289
|
+
return vaultInstance.vault.get(key);
|
|
290
|
+
},
|
|
291
|
+
get initialState() {
|
|
292
|
+
return vaultInstance.initialValues.get(key);
|
|
293
|
+
},
|
|
294
|
+
get actions() {
|
|
295
|
+
return initBoundActions;
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
if (options?.actions) {
|
|
299
|
+
for (const [name, fn] of Object.entries(options.actions)) {
|
|
300
|
+
if (name === "__init__")
|
|
301
|
+
continue; // skip self
|
|
302
|
+
initBoundActions[name] = (...args) => fn(...args)(initOps);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Execute __init__: signature is (ops) => () => void OR () => (ops) => void
|
|
306
|
+
try {
|
|
307
|
+
const result = initFn()(initOps);
|
|
308
|
+
// If the action returns a function (thunk), call it
|
|
309
|
+
if (typeof result === "function")
|
|
310
|
+
result();
|
|
311
|
+
}
|
|
312
|
+
catch (e) {
|
|
313
|
+
console.error(`[FractoState] __init__ failed for flow "${key}":`, e);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
277
316
|
// Handle Auto-Run Effects
|
|
278
317
|
if (options?.effects && this.proxyCreator) {
|
|
279
318
|
const vaultInstance = this;
|
|
@@ -294,6 +333,8 @@ class MemoryVault {
|
|
|
294
333
|
};
|
|
295
334
|
if (options.actions) {
|
|
296
335
|
for (const [name, fn] of Object.entries(options.actions)) {
|
|
336
|
+
if (name === "__init__")
|
|
337
|
+
continue; // __init__ is internal, skip
|
|
297
338
|
boundActions[name] = (...args) => fn(...args)(dynamicOps);
|
|
298
339
|
}
|
|
299
340
|
}
|