fractostate 4.8.1 → 4.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +7 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/src/store.js +24 -2
- package/dist/cjs/src/store.js.map +1 -1
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/src/store.js +24 -2
- package/dist/esm/src/store.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/plugins.d.ts +1 -1
- package/dist/types-CrNg0-d5.d.ts +288 -0
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -41,6 +41,12 @@ store.store.setProxyCreator(proxy.createDeepProxy);
|
|
|
41
41
|
function initFlow(flow) {
|
|
42
42
|
store.store.get(flow.key, flow.initial, flow.options);
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Clears the entire store, all timers, and runs cleanup for all active flow effects.
|
|
46
|
+
*/
|
|
47
|
+
function clearAll() {
|
|
48
|
+
store.store.clearAll();
|
|
49
|
+
}
|
|
44
50
|
/**
|
|
45
51
|
* Defines a derived flow that reacts to changes in a source flow.
|
|
46
52
|
* Use this for computed values that shouldn't be manually modified.
|
|
@@ -242,6 +248,7 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
242
248
|
return [state, toolbox];
|
|
243
249
|
}
|
|
244
250
|
|
|
251
|
+
exports.clearAll = clearAll;
|
|
245
252
|
exports.defineDerived = defineDerived;
|
|
246
253
|
exports.defineFlow = defineFlow;
|
|
247
254
|
exports.getFlow = getFlow;
|
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 * 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 [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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"}
|
package/dist/cjs/src/store.js
CHANGED
|
@@ -121,6 +121,12 @@ class MemoryVault {
|
|
|
121
121
|
writable: true,
|
|
122
122
|
value: new Map()
|
|
123
123
|
}); // flowKey -> parent flowKey
|
|
124
|
+
Object.defineProperty(this, "effectStates", {
|
|
125
|
+
enumerable: true,
|
|
126
|
+
configurable: true,
|
|
127
|
+
writable: true,
|
|
128
|
+
value: new Map()
|
|
129
|
+
}); // flowKey -> effect states (with cleanups)
|
|
124
130
|
// Use Set for O(1) deduplication and fast iteration
|
|
125
131
|
Object.defineProperty(this, "batchQueue", {
|
|
126
132
|
enumerable: true,
|
|
@@ -296,13 +302,15 @@ class MemoryVault {
|
|
|
296
302
|
? effect.deps(startingValue)
|
|
297
303
|
: undefined;
|
|
298
304
|
// Run immediately (Mount)
|
|
299
|
-
effect.run(dynamicOps);
|
|
305
|
+
const possibleCleanup = effect.run(dynamicOps);
|
|
300
306
|
return {
|
|
301
307
|
prevDeps: initialDeps,
|
|
302
308
|
depsFn: effect.deps,
|
|
303
309
|
run: effect.run,
|
|
310
|
+
cleanup: typeof possibleCleanup === "function" ? possibleCleanup : undefined,
|
|
304
311
|
};
|
|
305
312
|
});
|
|
313
|
+
this.effectStates.set(key, effectStates);
|
|
306
314
|
// Subscribe for updates if explicit deps are provided
|
|
307
315
|
if (effectStates.some((e) => e.depsFn)) {
|
|
308
316
|
this.subscribe(key, () => {
|
|
@@ -312,7 +320,14 @@ class MemoryVault {
|
|
|
312
320
|
const newDeps = e.depsFn(currentState);
|
|
313
321
|
if (!deepEqual(e.prevDeps, newDeps)) {
|
|
314
322
|
e.prevDeps = newDeps;
|
|
315
|
-
|
|
323
|
+
// Cleanup previous run if needed
|
|
324
|
+
if (e.cleanup)
|
|
325
|
+
e.cleanup();
|
|
326
|
+
const possibleCleanup = e.run(dynamicOps);
|
|
327
|
+
e.cleanup =
|
|
328
|
+
typeof possibleCleanup === "function"
|
|
329
|
+
? possibleCleanup
|
|
330
|
+
: undefined;
|
|
316
331
|
}
|
|
317
332
|
}
|
|
318
333
|
});
|
|
@@ -633,6 +648,13 @@ class MemoryVault {
|
|
|
633
648
|
* Clears the entire store and all timers.
|
|
634
649
|
*/
|
|
635
650
|
clearAll() {
|
|
651
|
+
this.effectStates.forEach((states) => {
|
|
652
|
+
states.forEach((e) => {
|
|
653
|
+
if (e.cleanup)
|
|
654
|
+
e.cleanup();
|
|
655
|
+
});
|
|
656
|
+
});
|
|
657
|
+
this.effectStates.clear();
|
|
636
658
|
this.debounceTimers.forEach((t) => clearTimeout(t));
|
|
637
659
|
this.vault.clear();
|
|
638
660
|
this.initialValues.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sources":["../../../src/store.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions } from \"./types\";\n\n// Clone cache to avoid redundant deep clones\nconst cloneCache = new WeakMap<any, any>();\nconst CLONE_CACHE_SIZE = 1000;\nlet cacheSize = 0;\n\n/**\n * Fast & Isolated Memory Vault\n * Ultra-performant in-memory store with deep cloning and batching\n * NO PERSISTENCE - Pure memory for maximum safety and speed\n *\n * Reduced allocations, cached clones, faster batching\n */\nclass MemoryVault {\n private vault = new Map<string, any>();\n private initialValues = new Map<string, any>();\n private listeners = new Map<\n string,\n Map<() => void, { label: string; timestamp: number }>\n >();\n private histories = new Map<string, CircularBuffer<any>>();\n private redoStacks = new Map<string, any[]>();\n private debounceTimers = new Map<string, number>();\n private traces = new Map<\n string,\n Array<{\n actor: string;\n type: string;\n path?: string[];\n value: any;\n timestamp: number;\n }>\n >();\n private consumers = new Map<string, Set<string>>(); // flowKey -> Set of actor names\n private parents = new Map<string, string>(); // flowKey -> parent flowKey\n\n // Use Set for O(1) deduplication and fast iteration\n private batchQueue = new Set<string>();\n private batchScheduled = false;\n\n private hasGlobalListeners = false;\n private hasEventListeners = false;\n\n /** Internal tracking for async hydration (plugins) */\n public __hydrating__ = new Set<string>();\n\n private pluginLogs = new Map<\n string,\n Array<{\n plugin: string;\n action: string;\n description: string;\n timestamp: number;\n data?: any;\n }>\n >();\n\n public logPluginActivity(\n key: string,\n activity: {\n plugin: string;\n action: string;\n description: string;\n data?: any;\n },\n ) {\n let logs = this.pluginLogs.get(key);\n if (!logs) {\n logs = [];\n this.pluginLogs.set(key, logs);\n }\n logs.unshift({ ...activity, timestamp: Date.now() });\n if (logs.length > 50) logs.pop();\n this.notify(key);\n }\n\n public getPluginLogs(key: string) {\n return this.pluginLogs.get(key) || [];\n }\n\n public setParent(key: string, parentKey: string) {\n this.parents.set(key, parentKey);\n }\n\n public getParent(key: string) {\n return this.parents.get(key);\n }\n\n public getInitial(key: string) {\n return this.initialValues.get(key);\n }\n\n public getOptions(key: string) {\n return this.flowOptionsMap.get(key);\n }\n\n constructor() {\n this.setupGlobalAccess();\n this.setupAutoCleanup();\n }\n\n /**\n * Defines a global accessor for internal debugging (DevTools).\n */\n private setupGlobalAccess() {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.__FRACTO_VAULT__ = this;\n }\n }\n\n /**\n * Periodically cleans up orphaned listeners.\n */\n private setupAutoCleanup() {\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => {\n this.listeners.forEach((map, key) => {\n if (map.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n });\n }, 300000); // 5 min\n }\n }\n\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n get(key: string, initialValue?: any, options?: FlowOptions) {\n // Fast path for existing keys\n if (this.vault.has(key)) {\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n const val = this.vault.get(key);\n // BYPASS_CLONE is used internally by the proxy for performance during rapid updates\n return options?.bypassClone ? val : deepClone(val);\n }\n\n if (initialValue === undefined) return undefined;\n\n // Clone once and reuse\n let startingValue = deepClone(initialValue);\n\n // Initialize core structures BEFORE plugins run to handle re-entrancy\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n\n if (options?.timeTravel) {\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\n }\n\n // Save options for devtools early\n if (options) {\n this.flowOptionsMap.set(key, options);\n }\n\n // Plugin Hook: onInit\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n plugin.onInit?.({ key, initial: startingValue, store: this });\n }\n }\n\n // Plugin Hook: onHydrate\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.onHydrate) {\n const hydrated = plugin.onHydrate({\n key,\n store: this,\n initial: startingValue,\n });\n if (hydrated !== undefined) {\n if (hydrated instanceof Promise) {\n hydrated.then((val) => {\n if (val !== undefined) this.set(key, val, options);\n });\n } else {\n startingValue = hydrated;\n this.vault.set(key, startingValue); // Keep vault in sync\n break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n\n // Handle Auto-Run Effects\n if (options?.effects && this.proxyCreator) {\n const vaultInstance = this;\n const boundActions = {} as any;\n const dynamicOps = {\n get self() {\n return vaultInstance.proxyCreator!(\n key,\n [],\n vaultInstance.vault.get(key),\n { ...options, actions: boundActions },\n );\n },\n get state() {\n return vaultInstance.vault.get(key);\n },\n get initialState() {\n return vaultInstance.initialValues.get(key);\n },\n get actions() {\n return boundActions;\n },\n };\n\n if (options.actions) {\n for (const [name, fn] of Object.entries(options.actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(dynamicOps);\n }\n }\n\n const effectStates = options.effects.map((effect) => {\n const initialDeps = effect.deps\n ? effect.deps(startingValue)\n : undefined;\n\n // Run immediately (Mount)\n effect.run(dynamicOps as any);\n\n return {\n prevDeps: initialDeps,\n depsFn: effect.deps,\n run: effect.run,\n };\n });\n\n // Subscribe for updates if explicit deps are provided\n if (effectStates.some((e) => e.depsFn)) {\n this.subscribe(key, () => {\n const currentState = this.vault.get(key);\n effectStates.forEach((e) => {\n if (e.depsFn) {\n const newDeps = e.depsFn(currentState);\n if (!deepEqual(e.prevDeps, newDeps)) {\n e.prevDeps = newDeps;\n e.run(dynamicOps as any);\n }\n }\n });\n });\n }\n }\n\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n return startingValue;\n }\n\n /**\n * Collects operations from plugins for a specific flow.\n */\n getPluginOps(key: string, options?: FlowOptions): Record<string, any> {\n const ops: Record<string, any> = {};\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.getOps) {\n ops[`_${plugin.name}`] = plugin.getOps({ key, store: this });\n }\n }\n }\n return ops;\n }\n\n private proxyCreator: Function | null = null;\n setProxyCreator(fn: Function) {\n this.proxyCreator = fn;\n }\n\n /**\n * Updates state in the vault with optional debouncing and middleware support.\n */\n set(key: string, newValue: any, options: FlowOptions = {}) {\n const prevState = this.vault.get(key);\n let stateToSet = newValue;\n\n // Apply synchronous middleware\n if (options.middleware) {\n for (const fn of options.middleware) {\n stateToSet = fn(stateToSet);\n }\n }\n\n // Fast equality check first\n if (!options.force && !options.skipEquality) {\n if (prevState === stateToSet) return;\n if (!deepEqual(prevState, stateToSet)) {\n // Different, continue\n } else {\n return; // Equal, skip update\n }\n }\n\n if (options.debounce) {\n this.debouncedSet(key, stateToSet, options);\n return;\n }\n\n this.applySet(key, stateToSet, options);\n\n // Plugin Hook: onUpdate\n if (options.plugins) {\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({\n key,\n prev: prevState,\n next: stateToSet,\n store: this,\n });\n }\n }\n }\n\n /**\n * Executes a debounced state update.\n */\n private debouncedSet(key: string, value: any, options: FlowOptions) {\n const existing = this.debounceTimers.get(key);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.applySet(key, value, options);\n\n // Plugin Hook: onUpdate (Debounced)\n if (options.plugins) {\n const prevState = this.vault.get(key);\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({ key, prev: prevState, next: value, store: this });\n }\n }\n\n this.debounceTimers.delete(key);\n }, options.debounce);\n\n this.debounceTimers.set(key, timer as any);\n }\n\n /**\n * Core logic for applying a state update and managing history.\n */\n private applySet(key: string, stateToSet: any, options: FlowOptions) {\n this.vault.set(key, stateToSet);\n\n // Only create history if timeTravel is enabled\n if (options.timeTravel) {\n let history = this.histories.get(key);\n if (!history) {\n history = new CircularBuffer(100);\n this.histories.set(key, history);\n }\n history.push(deepClone(stateToSet));\n\n let redo = this.redoStacks.get(key);\n if (!redo) {\n redo = [];\n this.redoStacks.set(key, redo);\n }\n redo.length = 0;\n }\n\n if (this.hasEventListeners) {\n this.emitEvent(\"write\", key, {\n actor: options.actor,\n path: (options as any)._path,\n value: stateToSet,\n });\n }\n\n // Store Trace\n if (options.actor) {\n let flowTraces = this.traces.get(key);\n if (!flowTraces) {\n flowTraces = [];\n this.traces.set(key, flowTraces);\n }\n flowTraces.push({\n actor: options.actor,\n type: (options as any)._op || \"write\",\n path: (options as any)._path,\n value: stateToSet,\n timestamp: Date.now(),\n });\n // Limit traces to 50 per flow\n if (flowTraces.length > 50) flowTraces.shift();\n }\n\n this.scheduleBatchNotify(key);\n }\n\n /**\n * Schedules a microtask to batch notifications and optimize React renders.\n * Use array instead of Set for better performance\n */\n private scheduleBatchNotify(key: string) {\n this.batchQueue.add(key);\n\n if (this.batchScheduled) return;\n this.batchScheduled = true;\n queueMicrotask(() => this.flushBatchNotify());\n }\n\n /**\n * Flushes and notifies all queued listeners.\n * Direct iteration without intermediate array\n */\n private flushBatchNotify() {\n this.batchScheduled = false;\n if (this.batchQueue.size === 0) return;\n\n // Direct iteration over the Set\n this.batchQueue.forEach((key) => {\n this.notify(key);\n });\n\n this.batchQueue.clear();\n }\n\n private globalListeners = new Set<() => void>();\n private eventListeners = new Set<\n (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void\n >();\n\n /**\n * Connects a listener to a specific flow key.\n */\n subscribe(\n key: string,\n listener: () => void,\n metadataOrActor?: string | { label: string },\n ) {\n const label =\n typeof metadataOrActor === \"string\"\n ? metadataOrActor\n : metadataOrActor?.label || \"Anonymous Subscriber\";\n\n if (typeof metadataOrActor === \"string\") {\n let flowConsumers = this.consumers.get(key);\n if (!flowConsumers) {\n flowConsumers = new Set();\n this.consumers.set(key, flowConsumers);\n }\n flowConsumers.add(metadataOrActor);\n }\n\n let map = this.listeners.get(key);\n if (!map) {\n map = new Map();\n this.listeners.set(key, map);\n }\n map.set(listener, { label, timestamp: Date.now() });\n\n return () => {\n const currentMap = this.listeners.get(key);\n if (currentMap) {\n currentMap.delete(listener);\n if (currentMap.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n }\n };\n }\n\n /**\n * Subscribe to ALL changes in the store. Strictly for DevTools.\n */\n subscribeGlobal(listener: () => void) {\n this.globalListeners.add(listener);\n this.hasGlobalListeners = true;\n return () => {\n this.globalListeners.delete(listener);\n this.hasGlobalListeners = this.globalListeners.size > 0;\n };\n }\n\n /**\n * Subscribe to specific operational events.\n */\n subscribeEvents(\n listener: (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void,\n ) {\n this.eventListeners.add(listener);\n this.hasEventListeners = true;\n return () => {\n this.eventListeners.delete(listener);\n this.hasEventListeners = this.eventListeners.size > 0;\n };\n }\n\n private emitEvent(\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\",\n key: string,\n data?: { actor?: string; path?: string[]; value?: any },\n ) {\n this.eventListeners.forEach((l) => l({ type, key, ...data }));\n }\n\n /**\n * Returns a complete snapshot of the store state for debugging.\n */\n getDebugSnapshot() {\n const snap: Record<string, any> = {};\n for (const key of this.vault.keys()) {\n const val = this.vault.get(key);\n const initial = this.initialValues.get(key);\n snap[key] = {\n value: val,\n meta: {\n historySize: this.histories.get(key)?.length() || 0,\n redoSize: this.redoStacks.get(key)?.length || 0,\n listeners: Array.from(this.listeners.get(key)?.values() || []),\n isDebouncing: this.debounceTimers.has(key),\n isDirty: !deepEqual(val, initial),\n traces: this.traces.get(key) || [],\n consumers: Array.from(this.consumers.get(key) || []),\n parent: this.parents.get(key),\n plugins: this.getPluginsInfo(key),\n pluginLogs: this.getPluginLogs(key),\n },\n };\n }\n return snap;\n }\n\n /**\n * Internal helper to get plugin info for devtools.\n */\n private getPluginsInfo(\n key: string,\n ): Array<{ name: string; hasOps: boolean }> {\n // We need to keep track of flow options to know which plugins are attached.\n // Let's add a map to store flow options.\n const options = this.flowOptionsMap.get(key);\n if (!options?.plugins) return [];\n return options.plugins.map((p) => ({\n name: p.name,\n hasOps: !!p.getOps,\n }));\n }\n\n private flowOptionsMap = new Map<string, FlowOptions>();\n\n /**\n * Directly notifies all listeners of a specific key.\n */\n private notify(key: string) {\n this.listeners.get(key)?.forEach((_meta, listener) => listener());\n if (this.hasGlobalListeners) {\n this.globalListeners.forEach((l) => l());\n }\n }\n\n /**\n * Reverts the state to the previous version in history.\n */\n undo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (history && history.length() > 1) {\n const current = history.pop();\n if (current) redo?.push(current);\n const prev = history.peek();\n this.vault.set(key, prev);\n this.emitEvent(\"undo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Restores the state to the next version in the redo stack.\n */\n redo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (redo && redo.length > 0) {\n const next = redo.pop();\n history?.push(next);\n this.vault.set(key, next);\n this.emitEvent(\"redo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Resets a flow to its initial value.\n */\n reset(key: string) {\n const initial = this.initialValues.get(key);\n if (initial !== undefined) {\n this.emitEvent(\"reset\", key);\n this.set(key, initial);\n }\n }\n\n /**\n * Resets all flows in the store to their initial values.\n */\n resetAll() {\n this.initialValues.forEach((_, key) => {\n this.reset(key);\n });\n }\n\n getHistory(key: string) {\n return this.histories.get(key)?.toArray() || [];\n }\n getRedoStack(key: string) {\n return this.redoStacks.get(key) || [];\n }\n\n /**\n * Clears the entire store and all timers.\n */\n clearAll() {\n this.debounceTimers.forEach((t) => clearTimeout(t));\n this.vault.clear();\n this.initialValues.clear();\n this.listeners.clear();\n this.histories.clear();\n this.redoStacks.clear();\n // Clear clone cache\n cacheSize = 0;\n }\n}\n\n/**\n * Circular Buffer implementation for high-performance memory-efficient history.\n * Pre-allocated array\n */\nclass CircularBuffer<T> {\n private buffer: T[];\n private head = 0;\n private size = 0;\n private maxSize: number;\n\n constructor(maxSize: number, initial: T[] = []) {\n this.maxSize = maxSize;\n // Pre-allocate full buffer\n this.buffer = new Array(maxSize);\n initial.forEach((i) => this.push(i));\n }\n\n push(item: T) {\n this.buffer[this.head] = item;\n this.head = (this.head + 1) % this.maxSize;\n if (this.size < this.maxSize) this.size++;\n }\n\n pop(): T | undefined {\n if (this.size <= 0) return undefined;\n this.head = (this.head - 1 + this.maxSize) % this.maxSize;\n this.size--;\n return this.buffer[this.head];\n }\n\n peek(): T | undefined {\n return this.size > 0\n ? this.buffer[(this.head - 1 + this.maxSize) % this.maxSize]\n : undefined;\n }\n\n length() {\n return this.size;\n }\n\n toArray(): T[] {\n // Pre-allocate result array\n const res = new Array(this.size);\n for (let i = 0; i < this.size; i++) {\n res[i] =\n this.buffer[(this.head - this.size + i + this.maxSize) % this.maxSize];\n }\n return res;\n }\n}\n\n/**\n * High-performance deep cloning utility.\n * Cached clones, early returns, manual iteration\n */\nfunction deepClone<T>(obj: T): T {\n // Fast path for primitives\n if (obj === null || typeof obj !== \"object\") return obj;\n\n // Check cache first (for immutable objects)\n if (cloneCache.has(obj as any)) {\n return cloneCache.get(obj as any);\n }\n\n let cloned: any;\n\n if (Array.isArray(obj)) {\n // Manual array copy\n const len = obj.length;\n cloned = new Array(len);\n for (let i = 0; i < len; i++) {\n cloned[i] = deepClone(obj[i]);\n }\n } else {\n // Manual object copy\n cloned = {};\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cloned[key] = deepClone((obj as any)[key]);\n }\n }\n\n // Cache with size limit\n if (cacheSize < CLONE_CACHE_SIZE) {\n cloneCache.set(obj as any, cloned);\n cacheSize++;\n } else {\n // Basic LRU-ish: reset if too big to avoid memory pressure but keep performance\n cacheSize = 0;\n }\n\n return cloned;\n}\n\n/**\n * High-performance deep equality utility.\n * Early returns, fast type checks\n */\nfunction deepEqual(a: any, b: any): boolean {\n // Identity check first\n if (a === b) return true;\n\n // Fast type/null checks\n const typeA = typeof a;\n const typeB = typeof b;\n\n if (typeA !== typeB || a === null || b === null) return false;\n if (typeA !== \"object\") return false;\n\n // Array fast path\n const isArrayA = Array.isArray(a);\n const isArrayB = Array.isArray(b);\n\n if (isArrayA !== isArrayB) return false;\n\n if (isArrayA) {\n const len = a.length;\n if (len !== b.length) return false;\n for (let i = 0; i < len; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n // Object comparison with early exit\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n const len = keysA.length;\n\n if (len !== keysB.length) return false;\n\n for (let i = 0; i < len; i++) {\n const key = keysA[i];\n if (a[key] !== b[key] && !deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n}\n\nexport const store = new MemoryVault();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sources":["../../../src/store.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions } from \"./types\";\n\n// Clone cache to avoid redundant deep clones\nconst cloneCache = new WeakMap<any, any>();\nconst CLONE_CACHE_SIZE = 1000;\nlet cacheSize = 0;\n\n/**\n * Fast & Isolated Memory Vault\n * Ultra-performant in-memory store with deep cloning and batching\n * NO PERSISTENCE - Pure memory for maximum safety and speed\n *\n * Reduced allocations, cached clones, faster batching\n */\nclass MemoryVault {\n private vault = new Map<string, any>();\n private initialValues = new Map<string, any>();\n private listeners = new Map<\n string,\n Map<() => void, { label: string; timestamp: number }>\n >();\n private histories = new Map<string, CircularBuffer<any>>();\n private redoStacks = new Map<string, any[]>();\n private debounceTimers = new Map<string, number>();\n private traces = new Map<\n string,\n Array<{\n actor: string;\n type: string;\n path?: string[];\n value: any;\n timestamp: number;\n }>\n >();\n private consumers = new Map<string, Set<string>>(); // flowKey -> Set of actor names\n private parents = new Map<string, string>(); // flowKey -> parent flowKey\n private effectStates = new Map<string, any[]>(); // flowKey -> effect states (with cleanups)\n\n // Use Set for O(1) deduplication and fast iteration\n private batchQueue = new Set<string>();\n private batchScheduled = false;\n\n private hasGlobalListeners = false;\n private hasEventListeners = false;\n\n /** Internal tracking for async hydration (plugins) */\n public __hydrating__ = new Set<string>();\n\n private pluginLogs = new Map<\n string,\n Array<{\n plugin: string;\n action: string;\n description: string;\n timestamp: number;\n data?: any;\n }>\n >();\n\n public logPluginActivity(\n key: string,\n activity: {\n plugin: string;\n action: string;\n description: string;\n data?: any;\n },\n ) {\n let logs = this.pluginLogs.get(key);\n if (!logs) {\n logs = [];\n this.pluginLogs.set(key, logs);\n }\n logs.unshift({ ...activity, timestamp: Date.now() });\n if (logs.length > 50) logs.pop();\n this.notify(key);\n }\n\n public getPluginLogs(key: string) {\n return this.pluginLogs.get(key) || [];\n }\n\n public setParent(key: string, parentKey: string) {\n this.parents.set(key, parentKey);\n }\n\n public getParent(key: string) {\n return this.parents.get(key);\n }\n\n public getInitial(key: string) {\n return this.initialValues.get(key);\n }\n\n public getOptions(key: string) {\n return this.flowOptionsMap.get(key);\n }\n\n constructor() {\n this.setupGlobalAccess();\n this.setupAutoCleanup();\n }\n\n /**\n * Defines a global accessor for internal debugging (DevTools).\n */\n private setupGlobalAccess() {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.__FRACTO_VAULT__ = this;\n }\n }\n\n /**\n * Periodically cleans up orphaned listeners.\n */\n private setupAutoCleanup() {\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => {\n this.listeners.forEach((map, key) => {\n if (map.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n });\n }, 300000); // 5 min\n }\n }\n\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n get(key: string, initialValue?: any, options?: FlowOptions) {\n // Fast path for existing keys\n if (this.vault.has(key)) {\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n const val = this.vault.get(key);\n // BYPASS_CLONE is used internally by the proxy for performance during rapid updates\n return options?.bypassClone ? val : deepClone(val);\n }\n\n if (initialValue === undefined) return undefined;\n\n // Clone once and reuse\n let startingValue = deepClone(initialValue);\n\n // Initialize core structures BEFORE plugins run to handle re-entrancy\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n\n if (options?.timeTravel) {\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\n }\n\n // Save options for devtools early\n if (options) {\n this.flowOptionsMap.set(key, options);\n }\n\n // Plugin Hook: onInit\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n plugin.onInit?.({ key, initial: startingValue, store: this });\n }\n }\n\n // Plugin Hook: onHydrate\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.onHydrate) {\n const hydrated = plugin.onHydrate({\n key,\n store: this,\n initial: startingValue,\n });\n if (hydrated !== undefined) {\n if (hydrated instanceof Promise) {\n hydrated.then((val) => {\n if (val !== undefined) this.set(key, val, options);\n });\n } else {\n startingValue = hydrated;\n this.vault.set(key, startingValue); // Keep vault in sync\n break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n\n // Handle Auto-Run Effects\n if (options?.effects && this.proxyCreator) {\n const vaultInstance = this;\n const boundActions = {} as any;\n const dynamicOps = {\n get self() {\n return vaultInstance.proxyCreator!(\n key,\n [],\n vaultInstance.vault.get(key),\n { ...options, actions: boundActions },\n );\n },\n get state() {\n return vaultInstance.vault.get(key);\n },\n get initialState() {\n return vaultInstance.initialValues.get(key);\n },\n get actions() {\n return boundActions;\n },\n };\n\n if (options.actions) {\n for (const [name, fn] of Object.entries(options.actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(dynamicOps);\n }\n }\n\n const effectStates = options.effects.map((effect) => {\n const initialDeps = effect.deps\n ? effect.deps(startingValue)\n : undefined;\n\n // Run immediately (Mount)\n const possibleCleanup = effect.run(dynamicOps as any);\n\n return {\n prevDeps: initialDeps,\n depsFn: effect.deps,\n run: effect.run,\n cleanup:\n typeof possibleCleanup === \"function\" ? possibleCleanup : undefined,\n };\n });\n this.effectStates.set(key, effectStates);\n\n // Subscribe for updates if explicit deps are provided\n if (effectStates.some((e) => e.depsFn)) {\n this.subscribe(key, () => {\n const currentState = this.vault.get(key);\n effectStates.forEach((e) => {\n if (e.depsFn) {\n const newDeps = e.depsFn(currentState);\n if (!deepEqual(e.prevDeps, newDeps)) {\n e.prevDeps = newDeps;\n // Cleanup previous run if needed\n if (e.cleanup) e.cleanup();\n\n const possibleCleanup = e.run(dynamicOps as any);\n e.cleanup =\n typeof possibleCleanup === \"function\"\n ? possibleCleanup\n : undefined;\n }\n }\n });\n });\n }\n }\n\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n return startingValue;\n }\n\n /**\n * Collects operations from plugins for a specific flow.\n */\n getPluginOps(key: string, options?: FlowOptions): Record<string, any> {\n const ops: Record<string, any> = {};\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.getOps) {\n ops[`_${plugin.name}`] = plugin.getOps({ key, store: this });\n }\n }\n }\n return ops;\n }\n\n private proxyCreator: Function | null = null;\n setProxyCreator(fn: Function) {\n this.proxyCreator = fn;\n }\n\n /**\n * Updates state in the vault with optional debouncing and middleware support.\n */\n set(key: string, newValue: any, options: FlowOptions = {}) {\n const prevState = this.vault.get(key);\n let stateToSet = newValue;\n\n // Apply synchronous middleware\n if (options.middleware) {\n for (const fn of options.middleware) {\n stateToSet = fn(stateToSet);\n }\n }\n\n // Fast equality check first\n if (!options.force && !options.skipEquality) {\n if (prevState === stateToSet) return;\n if (!deepEqual(prevState, stateToSet)) {\n // Different, continue\n } else {\n return; // Equal, skip update\n }\n }\n\n if (options.debounce) {\n this.debouncedSet(key, stateToSet, options);\n return;\n }\n\n this.applySet(key, stateToSet, options);\n\n // Plugin Hook: onUpdate\n if (options.plugins) {\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({\n key,\n prev: prevState,\n next: stateToSet,\n store: this,\n });\n }\n }\n }\n\n /**\n * Executes a debounced state update.\n */\n private debouncedSet(key: string, value: any, options: FlowOptions) {\n const existing = this.debounceTimers.get(key);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.applySet(key, value, options);\n\n // Plugin Hook: onUpdate (Debounced)\n if (options.plugins) {\n const prevState = this.vault.get(key);\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({ key, prev: prevState, next: value, store: this });\n }\n }\n\n this.debounceTimers.delete(key);\n }, options.debounce);\n\n this.debounceTimers.set(key, timer as any);\n }\n\n /**\n * Core logic for applying a state update and managing history.\n */\n private applySet(key: string, stateToSet: any, options: FlowOptions) {\n this.vault.set(key, stateToSet);\n\n // Only create history if timeTravel is enabled\n if (options.timeTravel) {\n let history = this.histories.get(key);\n if (!history) {\n history = new CircularBuffer(100);\n this.histories.set(key, history);\n }\n history.push(deepClone(stateToSet));\n\n let redo = this.redoStacks.get(key);\n if (!redo) {\n redo = [];\n this.redoStacks.set(key, redo);\n }\n redo.length = 0;\n }\n\n if (this.hasEventListeners) {\n this.emitEvent(\"write\", key, {\n actor: options.actor,\n path: (options as any)._path,\n value: stateToSet,\n });\n }\n\n // Store Trace\n if (options.actor) {\n let flowTraces = this.traces.get(key);\n if (!flowTraces) {\n flowTraces = [];\n this.traces.set(key, flowTraces);\n }\n flowTraces.push({\n actor: options.actor,\n type: (options as any)._op || \"write\",\n path: (options as any)._path,\n value: stateToSet,\n timestamp: Date.now(),\n });\n // Limit traces to 50 per flow\n if (flowTraces.length > 50) flowTraces.shift();\n }\n\n this.scheduleBatchNotify(key);\n }\n\n /**\n * Schedules a microtask to batch notifications and optimize React renders.\n * Use array instead of Set for better performance\n */\n private scheduleBatchNotify(key: string) {\n this.batchQueue.add(key);\n\n if (this.batchScheduled) return;\n this.batchScheduled = true;\n queueMicrotask(() => this.flushBatchNotify());\n }\n\n /**\n * Flushes and notifies all queued listeners.\n * Direct iteration without intermediate array\n */\n private flushBatchNotify() {\n this.batchScheduled = false;\n if (this.batchQueue.size === 0) return;\n\n // Direct iteration over the Set\n this.batchQueue.forEach((key) => {\n this.notify(key);\n });\n\n this.batchQueue.clear();\n }\n\n private globalListeners = new Set<() => void>();\n private eventListeners = new Set<\n (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void\n >();\n\n /**\n * Connects a listener to a specific flow key.\n */\n subscribe(\n key: string,\n listener: () => void,\n metadataOrActor?: string | { label: string },\n ) {\n const label =\n typeof metadataOrActor === \"string\"\n ? metadataOrActor\n : metadataOrActor?.label || \"Anonymous Subscriber\";\n\n if (typeof metadataOrActor === \"string\") {\n let flowConsumers = this.consumers.get(key);\n if (!flowConsumers) {\n flowConsumers = new Set();\n this.consumers.set(key, flowConsumers);\n }\n flowConsumers.add(metadataOrActor);\n }\n\n let map = this.listeners.get(key);\n if (!map) {\n map = new Map();\n this.listeners.set(key, map);\n }\n map.set(listener, { label, timestamp: Date.now() });\n\n return () => {\n const currentMap = this.listeners.get(key);\n if (currentMap) {\n currentMap.delete(listener);\n if (currentMap.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n }\n };\n }\n\n /**\n * Subscribe to ALL changes in the store. Strictly for DevTools.\n */\n subscribeGlobal(listener: () => void) {\n this.globalListeners.add(listener);\n this.hasGlobalListeners = true;\n return () => {\n this.globalListeners.delete(listener);\n this.hasGlobalListeners = this.globalListeners.size > 0;\n };\n }\n\n /**\n * Subscribe to specific operational events.\n */\n subscribeEvents(\n listener: (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void,\n ) {\n this.eventListeners.add(listener);\n this.hasEventListeners = true;\n return () => {\n this.eventListeners.delete(listener);\n this.hasEventListeners = this.eventListeners.size > 0;\n };\n }\n\n private emitEvent(\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\",\n key: string,\n data?: { actor?: string; path?: string[]; value?: any },\n ) {\n this.eventListeners.forEach((l) => l({ type, key, ...data }));\n }\n\n /**\n * Returns a complete snapshot of the store state for debugging.\n */\n getDebugSnapshot() {\n const snap: Record<string, any> = {};\n for (const key of this.vault.keys()) {\n const val = this.vault.get(key);\n const initial = this.initialValues.get(key);\n snap[key] = {\n value: val,\n meta: {\n historySize: this.histories.get(key)?.length() || 0,\n redoSize: this.redoStacks.get(key)?.length || 0,\n listeners: Array.from(this.listeners.get(key)?.values() || []),\n isDebouncing: this.debounceTimers.has(key),\n isDirty: !deepEqual(val, initial),\n traces: this.traces.get(key) || [],\n consumers: Array.from(this.consumers.get(key) || []),\n parent: this.parents.get(key),\n plugins: this.getPluginsInfo(key),\n pluginLogs: this.getPluginLogs(key),\n },\n };\n }\n return snap;\n }\n\n /**\n * Internal helper to get plugin info for devtools.\n */\n private getPluginsInfo(\n key: string,\n ): Array<{ name: string; hasOps: boolean }> {\n // We need to keep track of flow options to know which plugins are attached.\n // Let's add a map to store flow options.\n const options = this.flowOptionsMap.get(key);\n if (!options?.plugins) return [];\n return options.plugins.map((p) => ({\n name: p.name,\n hasOps: !!p.getOps,\n }));\n }\n\n private flowOptionsMap = new Map<string, FlowOptions>();\n\n /**\n * Directly notifies all listeners of a specific key.\n */\n private notify(key: string) {\n this.listeners.get(key)?.forEach((_meta, listener) => listener());\n if (this.hasGlobalListeners) {\n this.globalListeners.forEach((l) => l());\n }\n }\n\n /**\n * Reverts the state to the previous version in history.\n */\n undo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (history && history.length() > 1) {\n const current = history.pop();\n if (current) redo?.push(current);\n const prev = history.peek();\n this.vault.set(key, prev);\n this.emitEvent(\"undo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Restores the state to the next version in the redo stack.\n */\n redo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (redo && redo.length > 0) {\n const next = redo.pop();\n history?.push(next);\n this.vault.set(key, next);\n this.emitEvent(\"redo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Resets a flow to its initial value.\n */\n reset(key: string) {\n const initial = this.initialValues.get(key);\n if (initial !== undefined) {\n this.emitEvent(\"reset\", key);\n this.set(key, initial);\n }\n }\n\n /**\n * Resets all flows in the store to their initial values.\n */\n resetAll() {\n this.initialValues.forEach((_, key) => {\n this.reset(key);\n });\n }\n\n getHistory(key: string) {\n return this.histories.get(key)?.toArray() || [];\n }\n getRedoStack(key: string) {\n return this.redoStacks.get(key) || [];\n }\n\n /**\n * Clears the entire store and all timers.\n */\n clearAll() {\n this.effectStates.forEach((states) => {\n states.forEach((e) => {\n if (e.cleanup) e.cleanup();\n });\n });\n this.effectStates.clear();\n\n this.debounceTimers.forEach((t) => clearTimeout(t));\n this.vault.clear();\n this.initialValues.clear();\n this.listeners.clear();\n this.histories.clear();\n this.redoStacks.clear();\n // Clear clone cache\n cacheSize = 0;\n }\n}\n\n/**\n * Circular Buffer implementation for high-performance memory-efficient history.\n * Pre-allocated array\n */\nclass CircularBuffer<T> {\n private buffer: T[];\n private head = 0;\n private size = 0;\n private maxSize: number;\n\n constructor(maxSize: number, initial: T[] = []) {\n this.maxSize = maxSize;\n // Pre-allocate full buffer\n this.buffer = new Array(maxSize);\n initial.forEach((i) => this.push(i));\n }\n\n push(item: T) {\n this.buffer[this.head] = item;\n this.head = (this.head + 1) % this.maxSize;\n if (this.size < this.maxSize) this.size++;\n }\n\n pop(): T | undefined {\n if (this.size <= 0) return undefined;\n this.head = (this.head - 1 + this.maxSize) % this.maxSize;\n this.size--;\n return this.buffer[this.head];\n }\n\n peek(): T | undefined {\n return this.size > 0\n ? this.buffer[(this.head - 1 + this.maxSize) % this.maxSize]\n : undefined;\n }\n\n length() {\n return this.size;\n }\n\n toArray(): T[] {\n // Pre-allocate result array\n const res = new Array(this.size);\n for (let i = 0; i < this.size; i++) {\n res[i] =\n this.buffer[(this.head - this.size + i + this.maxSize) % this.maxSize];\n }\n return res;\n }\n}\n\n/**\n * High-performance deep cloning utility.\n * Cached clones, early returns, manual iteration\n */\nfunction deepClone<T>(obj: T): T {\n // Fast path for primitives\n if (obj === null || typeof obj !== \"object\") return obj;\n\n // Check cache first (for immutable objects)\n if (cloneCache.has(obj as any)) {\n return cloneCache.get(obj as any);\n }\n\n let cloned: any;\n\n if (Array.isArray(obj)) {\n // Manual array copy\n const len = obj.length;\n cloned = new Array(len);\n for (let i = 0; i < len; i++) {\n cloned[i] = deepClone(obj[i]);\n }\n } else {\n // Manual object copy\n cloned = {};\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cloned[key] = deepClone((obj as any)[key]);\n }\n }\n\n // Cache with size limit\n if (cacheSize < CLONE_CACHE_SIZE) {\n cloneCache.set(obj as any, cloned);\n cacheSize++;\n } else {\n // Basic LRU-ish: reset if too big to avoid memory pressure but keep performance\n cacheSize = 0;\n }\n\n return cloned;\n}\n\n/**\n * High-performance deep equality utility.\n * Early returns, fast type checks\n */\nfunction deepEqual(a: any, b: any): boolean {\n // Identity check first\n if (a === b) return true;\n\n // Fast type/null checks\n const typeA = typeof a;\n const typeB = typeof b;\n\n if (typeA !== typeB || a === null || b === null) return false;\n if (typeA !== \"object\") return false;\n\n // Array fast path\n const isArrayA = Array.isArray(a);\n const isArrayB = Array.isArray(b);\n\n if (isArrayA !== isArrayB) return false;\n\n if (isArrayA) {\n const len = a.length;\n if (len !== b.length) return false;\n for (let i = 0; i < len; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n // Object comparison with early exit\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n const len = keysA.length;\n\n if (len !== keysB.length) return false;\n\n for (let i = 0; i < len; i++) {\n const key = keysA[i];\n if (a[key] !== b[key] && !deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n}\n\nexport const store = new MemoryVault();\n"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -39,6 +39,12 @@ store.setProxyCreator(createDeepProxy);
|
|
|
39
39
|
function initFlow(flow) {
|
|
40
40
|
store.get(flow.key, flow.initial, flow.options);
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Clears the entire store, all timers, and runs cleanup for all active flow effects.
|
|
44
|
+
*/
|
|
45
|
+
function clearAll() {
|
|
46
|
+
store.clearAll();
|
|
47
|
+
}
|
|
42
48
|
/**
|
|
43
49
|
* Defines a derived flow that reacts to changes in a source flow.
|
|
44
50
|
* Use this for computed values that shouldn't be manually modified.
|
|
@@ -240,5 +246,5 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
240
246
|
return [state, toolbox];
|
|
241
247
|
}
|
|
242
248
|
|
|
243
|
-
export { defineDerived, defineFlow, getFlow, initFlow, useFlow };
|
|
249
|
+
export { clearAll, defineDerived, defineFlow, getFlow, initFlow, useFlow };
|
|
244
250
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/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 * 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":[],"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 [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":[],"mappings":"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"}
|
package/dist/esm/src/store.js
CHANGED
|
@@ -119,6 +119,12 @@ class MemoryVault {
|
|
|
119
119
|
writable: true,
|
|
120
120
|
value: new Map()
|
|
121
121
|
}); // flowKey -> parent flowKey
|
|
122
|
+
Object.defineProperty(this, "effectStates", {
|
|
123
|
+
enumerable: true,
|
|
124
|
+
configurable: true,
|
|
125
|
+
writable: true,
|
|
126
|
+
value: new Map()
|
|
127
|
+
}); // flowKey -> effect states (with cleanups)
|
|
122
128
|
// Use Set for O(1) deduplication and fast iteration
|
|
123
129
|
Object.defineProperty(this, "batchQueue", {
|
|
124
130
|
enumerable: true,
|
|
@@ -294,13 +300,15 @@ class MemoryVault {
|
|
|
294
300
|
? effect.deps(startingValue)
|
|
295
301
|
: undefined;
|
|
296
302
|
// Run immediately (Mount)
|
|
297
|
-
effect.run(dynamicOps);
|
|
303
|
+
const possibleCleanup = effect.run(dynamicOps);
|
|
298
304
|
return {
|
|
299
305
|
prevDeps: initialDeps,
|
|
300
306
|
depsFn: effect.deps,
|
|
301
307
|
run: effect.run,
|
|
308
|
+
cleanup: typeof possibleCleanup === "function" ? possibleCleanup : undefined,
|
|
302
309
|
};
|
|
303
310
|
});
|
|
311
|
+
this.effectStates.set(key, effectStates);
|
|
304
312
|
// Subscribe for updates if explicit deps are provided
|
|
305
313
|
if (effectStates.some((e) => e.depsFn)) {
|
|
306
314
|
this.subscribe(key, () => {
|
|
@@ -310,7 +318,14 @@ class MemoryVault {
|
|
|
310
318
|
const newDeps = e.depsFn(currentState);
|
|
311
319
|
if (!deepEqual(e.prevDeps, newDeps)) {
|
|
312
320
|
e.prevDeps = newDeps;
|
|
313
|
-
|
|
321
|
+
// Cleanup previous run if needed
|
|
322
|
+
if (e.cleanup)
|
|
323
|
+
e.cleanup();
|
|
324
|
+
const possibleCleanup = e.run(dynamicOps);
|
|
325
|
+
e.cleanup =
|
|
326
|
+
typeof possibleCleanup === "function"
|
|
327
|
+
? possibleCleanup
|
|
328
|
+
: undefined;
|
|
314
329
|
}
|
|
315
330
|
}
|
|
316
331
|
});
|
|
@@ -631,6 +646,13 @@ class MemoryVault {
|
|
|
631
646
|
* Clears the entire store and all timers.
|
|
632
647
|
*/
|
|
633
648
|
clearAll() {
|
|
649
|
+
this.effectStates.forEach((states) => {
|
|
650
|
+
states.forEach((e) => {
|
|
651
|
+
if (e.cleanup)
|
|
652
|
+
e.cleanup();
|
|
653
|
+
});
|
|
654
|
+
});
|
|
655
|
+
this.effectStates.clear();
|
|
634
656
|
this.debounceTimers.forEach((t) => clearTimeout(t));
|
|
635
657
|
this.vault.clear();
|
|
636
658
|
this.initialValues.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sources":["../../../src/store.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions } from \"./types\";\n\n// Clone cache to avoid redundant deep clones\nconst cloneCache = new WeakMap<any, any>();\nconst CLONE_CACHE_SIZE = 1000;\nlet cacheSize = 0;\n\n/**\n * Fast & Isolated Memory Vault\n * Ultra-performant in-memory store with deep cloning and batching\n * NO PERSISTENCE - Pure memory for maximum safety and speed\n *\n * Reduced allocations, cached clones, faster batching\n */\nclass MemoryVault {\n private vault = new Map<string, any>();\n private initialValues = new Map<string, any>();\n private listeners = new Map<\n string,\n Map<() => void, { label: string; timestamp: number }>\n >();\n private histories = new Map<string, CircularBuffer<any>>();\n private redoStacks = new Map<string, any[]>();\n private debounceTimers = new Map<string, number>();\n private traces = new Map<\n string,\n Array<{\n actor: string;\n type: string;\n path?: string[];\n value: any;\n timestamp: number;\n }>\n >();\n private consumers = new Map<string, Set<string>>(); // flowKey -> Set of actor names\n private parents = new Map<string, string>(); // flowKey -> parent flowKey\n\n // Use Set for O(1) deduplication and fast iteration\n private batchQueue = new Set<string>();\n private batchScheduled = false;\n\n private hasGlobalListeners = false;\n private hasEventListeners = false;\n\n /** Internal tracking for async hydration (plugins) */\n public __hydrating__ = new Set<string>();\n\n private pluginLogs = new Map<\n string,\n Array<{\n plugin: string;\n action: string;\n description: string;\n timestamp: number;\n data?: any;\n }>\n >();\n\n public logPluginActivity(\n key: string,\n activity: {\n plugin: string;\n action: string;\n description: string;\n data?: any;\n },\n ) {\n let logs = this.pluginLogs.get(key);\n if (!logs) {\n logs = [];\n this.pluginLogs.set(key, logs);\n }\n logs.unshift({ ...activity, timestamp: Date.now() });\n if (logs.length > 50) logs.pop();\n this.notify(key);\n }\n\n public getPluginLogs(key: string) {\n return this.pluginLogs.get(key) || [];\n }\n\n public setParent(key: string, parentKey: string) {\n this.parents.set(key, parentKey);\n }\n\n public getParent(key: string) {\n return this.parents.get(key);\n }\n\n public getInitial(key: string) {\n return this.initialValues.get(key);\n }\n\n public getOptions(key: string) {\n return this.flowOptionsMap.get(key);\n }\n\n constructor() {\n this.setupGlobalAccess();\n this.setupAutoCleanup();\n }\n\n /**\n * Defines a global accessor for internal debugging (DevTools).\n */\n private setupGlobalAccess() {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.__FRACTO_VAULT__ = this;\n }\n }\n\n /**\n * Periodically cleans up orphaned listeners.\n */\n private setupAutoCleanup() {\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => {\n this.listeners.forEach((map, key) => {\n if (map.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n });\n }, 300000); // 5 min\n }\n }\n\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n get(key: string, initialValue?: any, options?: FlowOptions) {\n // Fast path for existing keys\n if (this.vault.has(key)) {\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n const val = this.vault.get(key);\n // BYPASS_CLONE is used internally by the proxy for performance during rapid updates\n return options?.bypassClone ? val : deepClone(val);\n }\n\n if (initialValue === undefined) return undefined;\n\n // Clone once and reuse\n let startingValue = deepClone(initialValue);\n\n // Initialize core structures BEFORE plugins run to handle re-entrancy\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n\n if (options?.timeTravel) {\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\n }\n\n // Save options for devtools early\n if (options) {\n this.flowOptionsMap.set(key, options);\n }\n\n // Plugin Hook: onInit\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n plugin.onInit?.({ key, initial: startingValue, store: this });\n }\n }\n\n // Plugin Hook: onHydrate\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.onHydrate) {\n const hydrated = plugin.onHydrate({\n key,\n store: this,\n initial: startingValue,\n });\n if (hydrated !== undefined) {\n if (hydrated instanceof Promise) {\n hydrated.then((val) => {\n if (val !== undefined) this.set(key, val, options);\n });\n } else {\n startingValue = hydrated;\n this.vault.set(key, startingValue); // Keep vault in sync\n break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n\n // Handle Auto-Run Effects\n if (options?.effects && this.proxyCreator) {\n const vaultInstance = this;\n const boundActions = {} as any;\n const dynamicOps = {\n get self() {\n return vaultInstance.proxyCreator!(\n key,\n [],\n vaultInstance.vault.get(key),\n { ...options, actions: boundActions },\n );\n },\n get state() {\n return vaultInstance.vault.get(key);\n },\n get initialState() {\n return vaultInstance.initialValues.get(key);\n },\n get actions() {\n return boundActions;\n },\n };\n\n if (options.actions) {\n for (const [name, fn] of Object.entries(options.actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(dynamicOps);\n }\n }\n\n const effectStates = options.effects.map((effect) => {\n const initialDeps = effect.deps\n ? effect.deps(startingValue)\n : undefined;\n\n // Run immediately (Mount)\n effect.run(dynamicOps as any);\n\n return {\n prevDeps: initialDeps,\n depsFn: effect.deps,\n run: effect.run,\n };\n });\n\n // Subscribe for updates if explicit deps are provided\n if (effectStates.some((e) => e.depsFn)) {\n this.subscribe(key, () => {\n const currentState = this.vault.get(key);\n effectStates.forEach((e) => {\n if (e.depsFn) {\n const newDeps = e.depsFn(currentState);\n if (!deepEqual(e.prevDeps, newDeps)) {\n e.prevDeps = newDeps;\n e.run(dynamicOps as any);\n }\n }\n });\n });\n }\n }\n\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n return startingValue;\n }\n\n /**\n * Collects operations from plugins for a specific flow.\n */\n getPluginOps(key: string, options?: FlowOptions): Record<string, any> {\n const ops: Record<string, any> = {};\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.getOps) {\n ops[`_${plugin.name}`] = plugin.getOps({ key, store: this });\n }\n }\n }\n return ops;\n }\n\n private proxyCreator: Function | null = null;\n setProxyCreator(fn: Function) {\n this.proxyCreator = fn;\n }\n\n /**\n * Updates state in the vault with optional debouncing and middleware support.\n */\n set(key: string, newValue: any, options: FlowOptions = {}) {\n const prevState = this.vault.get(key);\n let stateToSet = newValue;\n\n // Apply synchronous middleware\n if (options.middleware) {\n for (const fn of options.middleware) {\n stateToSet = fn(stateToSet);\n }\n }\n\n // Fast equality check first\n if (!options.force && !options.skipEquality) {\n if (prevState === stateToSet) return;\n if (!deepEqual(prevState, stateToSet)) {\n // Different, continue\n } else {\n return; // Equal, skip update\n }\n }\n\n if (options.debounce) {\n this.debouncedSet(key, stateToSet, options);\n return;\n }\n\n this.applySet(key, stateToSet, options);\n\n // Plugin Hook: onUpdate\n if (options.plugins) {\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({\n key,\n prev: prevState,\n next: stateToSet,\n store: this,\n });\n }\n }\n }\n\n /**\n * Executes a debounced state update.\n */\n private debouncedSet(key: string, value: any, options: FlowOptions) {\n const existing = this.debounceTimers.get(key);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.applySet(key, value, options);\n\n // Plugin Hook: onUpdate (Debounced)\n if (options.plugins) {\n const prevState = this.vault.get(key);\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({ key, prev: prevState, next: value, store: this });\n }\n }\n\n this.debounceTimers.delete(key);\n }, options.debounce);\n\n this.debounceTimers.set(key, timer as any);\n }\n\n /**\n * Core logic for applying a state update and managing history.\n */\n private applySet(key: string, stateToSet: any, options: FlowOptions) {\n this.vault.set(key, stateToSet);\n\n // Only create history if timeTravel is enabled\n if (options.timeTravel) {\n let history = this.histories.get(key);\n if (!history) {\n history = new CircularBuffer(100);\n this.histories.set(key, history);\n }\n history.push(deepClone(stateToSet));\n\n let redo = this.redoStacks.get(key);\n if (!redo) {\n redo = [];\n this.redoStacks.set(key, redo);\n }\n redo.length = 0;\n }\n\n if (this.hasEventListeners) {\n this.emitEvent(\"write\", key, {\n actor: options.actor,\n path: (options as any)._path,\n value: stateToSet,\n });\n }\n\n // Store Trace\n if (options.actor) {\n let flowTraces = this.traces.get(key);\n if (!flowTraces) {\n flowTraces = [];\n this.traces.set(key, flowTraces);\n }\n flowTraces.push({\n actor: options.actor,\n type: (options as any)._op || \"write\",\n path: (options as any)._path,\n value: stateToSet,\n timestamp: Date.now(),\n });\n // Limit traces to 50 per flow\n if (flowTraces.length > 50) flowTraces.shift();\n }\n\n this.scheduleBatchNotify(key);\n }\n\n /**\n * Schedules a microtask to batch notifications and optimize React renders.\n * Use array instead of Set for better performance\n */\n private scheduleBatchNotify(key: string) {\n this.batchQueue.add(key);\n\n if (this.batchScheduled) return;\n this.batchScheduled = true;\n queueMicrotask(() => this.flushBatchNotify());\n }\n\n /**\n * Flushes and notifies all queued listeners.\n * Direct iteration without intermediate array\n */\n private flushBatchNotify() {\n this.batchScheduled = false;\n if (this.batchQueue.size === 0) return;\n\n // Direct iteration over the Set\n this.batchQueue.forEach((key) => {\n this.notify(key);\n });\n\n this.batchQueue.clear();\n }\n\n private globalListeners = new Set<() => void>();\n private eventListeners = new Set<\n (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void\n >();\n\n /**\n * Connects a listener to a specific flow key.\n */\n subscribe(\n key: string,\n listener: () => void,\n metadataOrActor?: string | { label: string },\n ) {\n const label =\n typeof metadataOrActor === \"string\"\n ? metadataOrActor\n : metadataOrActor?.label || \"Anonymous Subscriber\";\n\n if (typeof metadataOrActor === \"string\") {\n let flowConsumers = this.consumers.get(key);\n if (!flowConsumers) {\n flowConsumers = new Set();\n this.consumers.set(key, flowConsumers);\n }\n flowConsumers.add(metadataOrActor);\n }\n\n let map = this.listeners.get(key);\n if (!map) {\n map = new Map();\n this.listeners.set(key, map);\n }\n map.set(listener, { label, timestamp: Date.now() });\n\n return () => {\n const currentMap = this.listeners.get(key);\n if (currentMap) {\n currentMap.delete(listener);\n if (currentMap.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n }\n };\n }\n\n /**\n * Subscribe to ALL changes in the store. Strictly for DevTools.\n */\n subscribeGlobal(listener: () => void) {\n this.globalListeners.add(listener);\n this.hasGlobalListeners = true;\n return () => {\n this.globalListeners.delete(listener);\n this.hasGlobalListeners = this.globalListeners.size > 0;\n };\n }\n\n /**\n * Subscribe to specific operational events.\n */\n subscribeEvents(\n listener: (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void,\n ) {\n this.eventListeners.add(listener);\n this.hasEventListeners = true;\n return () => {\n this.eventListeners.delete(listener);\n this.hasEventListeners = this.eventListeners.size > 0;\n };\n }\n\n private emitEvent(\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\",\n key: string,\n data?: { actor?: string; path?: string[]; value?: any },\n ) {\n this.eventListeners.forEach((l) => l({ type, key, ...data }));\n }\n\n /**\n * Returns a complete snapshot of the store state for debugging.\n */\n getDebugSnapshot() {\n const snap: Record<string, any> = {};\n for (const key of this.vault.keys()) {\n const val = this.vault.get(key);\n const initial = this.initialValues.get(key);\n snap[key] = {\n value: val,\n meta: {\n historySize: this.histories.get(key)?.length() || 0,\n redoSize: this.redoStacks.get(key)?.length || 0,\n listeners: Array.from(this.listeners.get(key)?.values() || []),\n isDebouncing: this.debounceTimers.has(key),\n isDirty: !deepEqual(val, initial),\n traces: this.traces.get(key) || [],\n consumers: Array.from(this.consumers.get(key) || []),\n parent: this.parents.get(key),\n plugins: this.getPluginsInfo(key),\n pluginLogs: this.getPluginLogs(key),\n },\n };\n }\n return snap;\n }\n\n /**\n * Internal helper to get plugin info for devtools.\n */\n private getPluginsInfo(\n key: string,\n ): Array<{ name: string; hasOps: boolean }> {\n // We need to keep track of flow options to know which plugins are attached.\n // Let's add a map to store flow options.\n const options = this.flowOptionsMap.get(key);\n if (!options?.plugins) return [];\n return options.plugins.map((p) => ({\n name: p.name,\n hasOps: !!p.getOps,\n }));\n }\n\n private flowOptionsMap = new Map<string, FlowOptions>();\n\n /**\n * Directly notifies all listeners of a specific key.\n */\n private notify(key: string) {\n this.listeners.get(key)?.forEach((_meta, listener) => listener());\n if (this.hasGlobalListeners) {\n this.globalListeners.forEach((l) => l());\n }\n }\n\n /**\n * Reverts the state to the previous version in history.\n */\n undo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (history && history.length() > 1) {\n const current = history.pop();\n if (current) redo?.push(current);\n const prev = history.peek();\n this.vault.set(key, prev);\n this.emitEvent(\"undo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Restores the state to the next version in the redo stack.\n */\n redo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (redo && redo.length > 0) {\n const next = redo.pop();\n history?.push(next);\n this.vault.set(key, next);\n this.emitEvent(\"redo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Resets a flow to its initial value.\n */\n reset(key: string) {\n const initial = this.initialValues.get(key);\n if (initial !== undefined) {\n this.emitEvent(\"reset\", key);\n this.set(key, initial);\n }\n }\n\n /**\n * Resets all flows in the store to their initial values.\n */\n resetAll() {\n this.initialValues.forEach((_, key) => {\n this.reset(key);\n });\n }\n\n getHistory(key: string) {\n return this.histories.get(key)?.toArray() || [];\n }\n getRedoStack(key: string) {\n return this.redoStacks.get(key) || [];\n }\n\n /**\n * Clears the entire store and all timers.\n */\n clearAll() {\n this.debounceTimers.forEach((t) => clearTimeout(t));\n this.vault.clear();\n this.initialValues.clear();\n this.listeners.clear();\n this.histories.clear();\n this.redoStacks.clear();\n // Clear clone cache\n cacheSize = 0;\n }\n}\n\n/**\n * Circular Buffer implementation for high-performance memory-efficient history.\n * Pre-allocated array\n */\nclass CircularBuffer<T> {\n private buffer: T[];\n private head = 0;\n private size = 0;\n private maxSize: number;\n\n constructor(maxSize: number, initial: T[] = []) {\n this.maxSize = maxSize;\n // Pre-allocate full buffer\n this.buffer = new Array(maxSize);\n initial.forEach((i) => this.push(i));\n }\n\n push(item: T) {\n this.buffer[this.head] = item;\n this.head = (this.head + 1) % this.maxSize;\n if (this.size < this.maxSize) this.size++;\n }\n\n pop(): T | undefined {\n if (this.size <= 0) return undefined;\n this.head = (this.head - 1 + this.maxSize) % this.maxSize;\n this.size--;\n return this.buffer[this.head];\n }\n\n peek(): T | undefined {\n return this.size > 0\n ? this.buffer[(this.head - 1 + this.maxSize) % this.maxSize]\n : undefined;\n }\n\n length() {\n return this.size;\n }\n\n toArray(): T[] {\n // Pre-allocate result array\n const res = new Array(this.size);\n for (let i = 0; i < this.size; i++) {\n res[i] =\n this.buffer[(this.head - this.size + i + this.maxSize) % this.maxSize];\n }\n return res;\n }\n}\n\n/**\n * High-performance deep cloning utility.\n * Cached clones, early returns, manual iteration\n */\nfunction deepClone<T>(obj: T): T {\n // Fast path for primitives\n if (obj === null || typeof obj !== \"object\") return obj;\n\n // Check cache first (for immutable objects)\n if (cloneCache.has(obj as any)) {\n return cloneCache.get(obj as any);\n }\n\n let cloned: any;\n\n if (Array.isArray(obj)) {\n // Manual array copy\n const len = obj.length;\n cloned = new Array(len);\n for (let i = 0; i < len; i++) {\n cloned[i] = deepClone(obj[i]);\n }\n } else {\n // Manual object copy\n cloned = {};\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cloned[key] = deepClone((obj as any)[key]);\n }\n }\n\n // Cache with size limit\n if (cacheSize < CLONE_CACHE_SIZE) {\n cloneCache.set(obj as any, cloned);\n cacheSize++;\n } else {\n // Basic LRU-ish: reset if too big to avoid memory pressure but keep performance\n cacheSize = 0;\n }\n\n return cloned;\n}\n\n/**\n * High-performance deep equality utility.\n * Early returns, fast type checks\n */\nfunction deepEqual(a: any, b: any): boolean {\n // Identity check first\n if (a === b) return true;\n\n // Fast type/null checks\n const typeA = typeof a;\n const typeB = typeof b;\n\n if (typeA !== typeB || a === null || b === null) return false;\n if (typeA !== \"object\") return false;\n\n // Array fast path\n const isArrayA = Array.isArray(a);\n const isArrayB = Array.isArray(b);\n\n if (isArrayA !== isArrayB) return false;\n\n if (isArrayA) {\n const len = a.length;\n if (len !== b.length) return false;\n for (let i = 0; i < len; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n // Object comparison with early exit\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n const len = keysA.length;\n\n if (len !== keysB.length) return false;\n\n for (let i = 0; i < len; i++) {\n const key = keysA[i];\n if (a[key] !== b[key] && !deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n}\n\nexport const store = new MemoryVault();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sources":["../../../src/store.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport type { FlowOptions } from \"./types\";\n\n// Clone cache to avoid redundant deep clones\nconst cloneCache = new WeakMap<any, any>();\nconst CLONE_CACHE_SIZE = 1000;\nlet cacheSize = 0;\n\n/**\n * Fast & Isolated Memory Vault\n * Ultra-performant in-memory store with deep cloning and batching\n * NO PERSISTENCE - Pure memory for maximum safety and speed\n *\n * Reduced allocations, cached clones, faster batching\n */\nclass MemoryVault {\n private vault = new Map<string, any>();\n private initialValues = new Map<string, any>();\n private listeners = new Map<\n string,\n Map<() => void, { label: string; timestamp: number }>\n >();\n private histories = new Map<string, CircularBuffer<any>>();\n private redoStacks = new Map<string, any[]>();\n private debounceTimers = new Map<string, number>();\n private traces = new Map<\n string,\n Array<{\n actor: string;\n type: string;\n path?: string[];\n value: any;\n timestamp: number;\n }>\n >();\n private consumers = new Map<string, Set<string>>(); // flowKey -> Set of actor names\n private parents = new Map<string, string>(); // flowKey -> parent flowKey\n private effectStates = new Map<string, any[]>(); // flowKey -> effect states (with cleanups)\n\n // Use Set for O(1) deduplication and fast iteration\n private batchQueue = new Set<string>();\n private batchScheduled = false;\n\n private hasGlobalListeners = false;\n private hasEventListeners = false;\n\n /** Internal tracking for async hydration (plugins) */\n public __hydrating__ = new Set<string>();\n\n private pluginLogs = new Map<\n string,\n Array<{\n plugin: string;\n action: string;\n description: string;\n timestamp: number;\n data?: any;\n }>\n >();\n\n public logPluginActivity(\n key: string,\n activity: {\n plugin: string;\n action: string;\n description: string;\n data?: any;\n },\n ) {\n let logs = this.pluginLogs.get(key);\n if (!logs) {\n logs = [];\n this.pluginLogs.set(key, logs);\n }\n logs.unshift({ ...activity, timestamp: Date.now() });\n if (logs.length > 50) logs.pop();\n this.notify(key);\n }\n\n public getPluginLogs(key: string) {\n return this.pluginLogs.get(key) || [];\n }\n\n public setParent(key: string, parentKey: string) {\n this.parents.set(key, parentKey);\n }\n\n public getParent(key: string) {\n return this.parents.get(key);\n }\n\n public getInitial(key: string) {\n return this.initialValues.get(key);\n }\n\n public getOptions(key: string) {\n return this.flowOptionsMap.get(key);\n }\n\n constructor() {\n this.setupGlobalAccess();\n this.setupAutoCleanup();\n }\n\n /**\n * Defines a global accessor for internal debugging (DevTools).\n */\n private setupGlobalAccess() {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.__FRACTO_VAULT__ = this;\n }\n }\n\n /**\n * Periodically cleans up orphaned listeners.\n */\n private setupAutoCleanup() {\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => {\n this.listeners.forEach((map, key) => {\n if (map.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n });\n }, 300000); // 5 min\n }\n }\n\n /**\n * Retrieves state from the vault. Initializes if a value is provided and the key is missing.\n */\n get(key: string, initialValue?: any, options?: FlowOptions) {\n // Fast path for existing keys\n if (this.vault.has(key)) {\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n const val = this.vault.get(key);\n // BYPASS_CLONE is used internally by the proxy for performance during rapid updates\n return options?.bypassClone ? val : deepClone(val);\n }\n\n if (initialValue === undefined) return undefined;\n\n // Clone once and reuse\n let startingValue = deepClone(initialValue);\n\n // Initialize core structures BEFORE plugins run to handle re-entrancy\n this.vault.set(key, startingValue);\n this.initialValues.set(key, deepClone(startingValue));\n\n if (options?.timeTravel) {\n this.histories.set(key, new CircularBuffer(100, [startingValue]));\n this.redoStacks.set(key, []);\n }\n\n // Save options for devtools early\n if (options) {\n this.flowOptionsMap.set(key, options);\n }\n\n // Plugin Hook: onInit\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n plugin.onInit?.({ key, initial: startingValue, store: this });\n }\n }\n\n // Plugin Hook: onHydrate\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.onHydrate) {\n const hydrated = plugin.onHydrate({\n key,\n store: this,\n initial: startingValue,\n });\n if (hydrated !== undefined) {\n if (hydrated instanceof Promise) {\n hydrated.then((val) => {\n if (val !== undefined) this.set(key, val, options);\n });\n } else {\n startingValue = hydrated;\n this.vault.set(key, startingValue); // Keep vault in sync\n break;\n }\n }\n }\n }\n }\n\n this.vault.set(key, startingValue);\n\n // Handle Auto-Run Effects\n if (options?.effects && this.proxyCreator) {\n const vaultInstance = this;\n const boundActions = {} as any;\n const dynamicOps = {\n get self() {\n return vaultInstance.proxyCreator!(\n key,\n [],\n vaultInstance.vault.get(key),\n { ...options, actions: boundActions },\n );\n },\n get state() {\n return vaultInstance.vault.get(key);\n },\n get initialState() {\n return vaultInstance.initialValues.get(key);\n },\n get actions() {\n return boundActions;\n },\n };\n\n if (options.actions) {\n for (const [name, fn] of Object.entries(options.actions)) {\n boundActions[name] = (...args: any[]) =>\n (fn as Function)(...args)(dynamicOps);\n }\n }\n\n const effectStates = options.effects.map((effect) => {\n const initialDeps = effect.deps\n ? effect.deps(startingValue)\n : undefined;\n\n // Run immediately (Mount)\n const possibleCleanup = effect.run(dynamicOps as any);\n\n return {\n prevDeps: initialDeps,\n depsFn: effect.deps,\n run: effect.run,\n cleanup:\n typeof possibleCleanup === \"function\" ? possibleCleanup : undefined,\n };\n });\n this.effectStates.set(key, effectStates);\n\n // Subscribe for updates if explicit deps are provided\n if (effectStates.some((e) => e.depsFn)) {\n this.subscribe(key, () => {\n const currentState = this.vault.get(key);\n effectStates.forEach((e) => {\n if (e.depsFn) {\n const newDeps = e.depsFn(currentState);\n if (!deepEqual(e.prevDeps, newDeps)) {\n e.prevDeps = newDeps;\n // Cleanup previous run if needed\n if (e.cleanup) e.cleanup();\n\n const possibleCleanup = e.run(dynamicOps as any);\n e.cleanup =\n typeof possibleCleanup === \"function\"\n ? possibleCleanup\n : undefined;\n }\n }\n });\n });\n }\n }\n\n if (this.hasEventListeners) this.emitEvent(\"read\", key);\n return startingValue;\n }\n\n /**\n * Collects operations from plugins for a specific flow.\n */\n getPluginOps(key: string, options?: FlowOptions): Record<string, any> {\n const ops: Record<string, any> = {};\n if (options?.plugins) {\n for (const plugin of options.plugins) {\n if (plugin.getOps) {\n ops[`_${plugin.name}`] = plugin.getOps({ key, store: this });\n }\n }\n }\n return ops;\n }\n\n private proxyCreator: Function | null = null;\n setProxyCreator(fn: Function) {\n this.proxyCreator = fn;\n }\n\n /**\n * Updates state in the vault with optional debouncing and middleware support.\n */\n set(key: string, newValue: any, options: FlowOptions = {}) {\n const prevState = this.vault.get(key);\n let stateToSet = newValue;\n\n // Apply synchronous middleware\n if (options.middleware) {\n for (const fn of options.middleware) {\n stateToSet = fn(stateToSet);\n }\n }\n\n // Fast equality check first\n if (!options.force && !options.skipEquality) {\n if (prevState === stateToSet) return;\n if (!deepEqual(prevState, stateToSet)) {\n // Different, continue\n } else {\n return; // Equal, skip update\n }\n }\n\n if (options.debounce) {\n this.debouncedSet(key, stateToSet, options);\n return;\n }\n\n this.applySet(key, stateToSet, options);\n\n // Plugin Hook: onUpdate\n if (options.plugins) {\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({\n key,\n prev: prevState,\n next: stateToSet,\n store: this,\n });\n }\n }\n }\n\n /**\n * Executes a debounced state update.\n */\n private debouncedSet(key: string, value: any, options: FlowOptions) {\n const existing = this.debounceTimers.get(key);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.applySet(key, value, options);\n\n // Plugin Hook: onUpdate (Debounced)\n if (options.plugins) {\n const prevState = this.vault.get(key);\n for (const plugin of options.plugins) {\n plugin.onUpdate?.({ key, prev: prevState, next: value, store: this });\n }\n }\n\n this.debounceTimers.delete(key);\n }, options.debounce);\n\n this.debounceTimers.set(key, timer as any);\n }\n\n /**\n * Core logic for applying a state update and managing history.\n */\n private applySet(key: string, stateToSet: any, options: FlowOptions) {\n this.vault.set(key, stateToSet);\n\n // Only create history if timeTravel is enabled\n if (options.timeTravel) {\n let history = this.histories.get(key);\n if (!history) {\n history = new CircularBuffer(100);\n this.histories.set(key, history);\n }\n history.push(deepClone(stateToSet));\n\n let redo = this.redoStacks.get(key);\n if (!redo) {\n redo = [];\n this.redoStacks.set(key, redo);\n }\n redo.length = 0;\n }\n\n if (this.hasEventListeners) {\n this.emitEvent(\"write\", key, {\n actor: options.actor,\n path: (options as any)._path,\n value: stateToSet,\n });\n }\n\n // Store Trace\n if (options.actor) {\n let flowTraces = this.traces.get(key);\n if (!flowTraces) {\n flowTraces = [];\n this.traces.set(key, flowTraces);\n }\n flowTraces.push({\n actor: options.actor,\n type: (options as any)._op || \"write\",\n path: (options as any)._path,\n value: stateToSet,\n timestamp: Date.now(),\n });\n // Limit traces to 50 per flow\n if (flowTraces.length > 50) flowTraces.shift();\n }\n\n this.scheduleBatchNotify(key);\n }\n\n /**\n * Schedules a microtask to batch notifications and optimize React renders.\n * Use array instead of Set for better performance\n */\n private scheduleBatchNotify(key: string) {\n this.batchQueue.add(key);\n\n if (this.batchScheduled) return;\n this.batchScheduled = true;\n queueMicrotask(() => this.flushBatchNotify());\n }\n\n /**\n * Flushes and notifies all queued listeners.\n * Direct iteration without intermediate array\n */\n private flushBatchNotify() {\n this.batchScheduled = false;\n if (this.batchQueue.size === 0) return;\n\n // Direct iteration over the Set\n this.batchQueue.forEach((key) => {\n this.notify(key);\n });\n\n this.batchQueue.clear();\n }\n\n private globalListeners = new Set<() => void>();\n private eventListeners = new Set<\n (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void\n >();\n\n /**\n * Connects a listener to a specific flow key.\n */\n subscribe(\n key: string,\n listener: () => void,\n metadataOrActor?: string | { label: string },\n ) {\n const label =\n typeof metadataOrActor === \"string\"\n ? metadataOrActor\n : metadataOrActor?.label || \"Anonymous Subscriber\";\n\n if (typeof metadataOrActor === \"string\") {\n let flowConsumers = this.consumers.get(key);\n if (!flowConsumers) {\n flowConsumers = new Set();\n this.consumers.set(key, flowConsumers);\n }\n flowConsumers.add(metadataOrActor);\n }\n\n let map = this.listeners.get(key);\n if (!map) {\n map = new Map();\n this.listeners.set(key, map);\n }\n map.set(listener, { label, timestamp: Date.now() });\n\n return () => {\n const currentMap = this.listeners.get(key);\n if (currentMap) {\n currentMap.delete(listener);\n if (currentMap.size === 0 && !this.vault.has(key)) {\n this.listeners.delete(key);\n }\n }\n };\n }\n\n /**\n * Subscribe to ALL changes in the store. Strictly for DevTools.\n */\n subscribeGlobal(listener: () => void) {\n this.globalListeners.add(listener);\n this.hasGlobalListeners = true;\n return () => {\n this.globalListeners.delete(listener);\n this.hasGlobalListeners = this.globalListeners.size > 0;\n };\n }\n\n /**\n * Subscribe to specific operational events.\n */\n subscribeEvents(\n listener: (event: {\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\";\n key: string;\n actor?: string;\n path?: string[];\n value?: any;\n }) => void,\n ) {\n this.eventListeners.add(listener);\n this.hasEventListeners = true;\n return () => {\n this.eventListeners.delete(listener);\n this.hasEventListeners = this.eventListeners.size > 0;\n };\n }\n\n private emitEvent(\n type: \"read\" | \"write\" | \"reset\" | \"undo\" | \"redo\",\n key: string,\n data?: { actor?: string; path?: string[]; value?: any },\n ) {\n this.eventListeners.forEach((l) => l({ type, key, ...data }));\n }\n\n /**\n * Returns a complete snapshot of the store state for debugging.\n */\n getDebugSnapshot() {\n const snap: Record<string, any> = {};\n for (const key of this.vault.keys()) {\n const val = this.vault.get(key);\n const initial = this.initialValues.get(key);\n snap[key] = {\n value: val,\n meta: {\n historySize: this.histories.get(key)?.length() || 0,\n redoSize: this.redoStacks.get(key)?.length || 0,\n listeners: Array.from(this.listeners.get(key)?.values() || []),\n isDebouncing: this.debounceTimers.has(key),\n isDirty: !deepEqual(val, initial),\n traces: this.traces.get(key) || [],\n consumers: Array.from(this.consumers.get(key) || []),\n parent: this.parents.get(key),\n plugins: this.getPluginsInfo(key),\n pluginLogs: this.getPluginLogs(key),\n },\n };\n }\n return snap;\n }\n\n /**\n * Internal helper to get plugin info for devtools.\n */\n private getPluginsInfo(\n key: string,\n ): Array<{ name: string; hasOps: boolean }> {\n // We need to keep track of flow options to know which plugins are attached.\n // Let's add a map to store flow options.\n const options = this.flowOptionsMap.get(key);\n if (!options?.plugins) return [];\n return options.plugins.map((p) => ({\n name: p.name,\n hasOps: !!p.getOps,\n }));\n }\n\n private flowOptionsMap = new Map<string, FlowOptions>();\n\n /**\n * Directly notifies all listeners of a specific key.\n */\n private notify(key: string) {\n this.listeners.get(key)?.forEach((_meta, listener) => listener());\n if (this.hasGlobalListeners) {\n this.globalListeners.forEach((l) => l());\n }\n }\n\n /**\n * Reverts the state to the previous version in history.\n */\n undo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (history && history.length() > 1) {\n const current = history.pop();\n if (current) redo?.push(current);\n const prev = history.peek();\n this.vault.set(key, prev);\n this.emitEvent(\"undo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Restores the state to the next version in the redo stack.\n */\n redo(key: string) {\n const history = this.histories.get(key);\n const redo = this.redoStacks.get(key);\n if (redo && redo.length > 0) {\n const next = redo.pop();\n history?.push(next);\n this.vault.set(key, next);\n this.emitEvent(\"redo\", key);\n this.notify(key);\n }\n }\n\n /**\n * Resets a flow to its initial value.\n */\n reset(key: string) {\n const initial = this.initialValues.get(key);\n if (initial !== undefined) {\n this.emitEvent(\"reset\", key);\n this.set(key, initial);\n }\n }\n\n /**\n * Resets all flows in the store to their initial values.\n */\n resetAll() {\n this.initialValues.forEach((_, key) => {\n this.reset(key);\n });\n }\n\n getHistory(key: string) {\n return this.histories.get(key)?.toArray() || [];\n }\n getRedoStack(key: string) {\n return this.redoStacks.get(key) || [];\n }\n\n /**\n * Clears the entire store and all timers.\n */\n clearAll() {\n this.effectStates.forEach((states) => {\n states.forEach((e) => {\n if (e.cleanup) e.cleanup();\n });\n });\n this.effectStates.clear();\n\n this.debounceTimers.forEach((t) => clearTimeout(t));\n this.vault.clear();\n this.initialValues.clear();\n this.listeners.clear();\n this.histories.clear();\n this.redoStacks.clear();\n // Clear clone cache\n cacheSize = 0;\n }\n}\n\n/**\n * Circular Buffer implementation for high-performance memory-efficient history.\n * Pre-allocated array\n */\nclass CircularBuffer<T> {\n private buffer: T[];\n private head = 0;\n private size = 0;\n private maxSize: number;\n\n constructor(maxSize: number, initial: T[] = []) {\n this.maxSize = maxSize;\n // Pre-allocate full buffer\n this.buffer = new Array(maxSize);\n initial.forEach((i) => this.push(i));\n }\n\n push(item: T) {\n this.buffer[this.head] = item;\n this.head = (this.head + 1) % this.maxSize;\n if (this.size < this.maxSize) this.size++;\n }\n\n pop(): T | undefined {\n if (this.size <= 0) return undefined;\n this.head = (this.head - 1 + this.maxSize) % this.maxSize;\n this.size--;\n return this.buffer[this.head];\n }\n\n peek(): T | undefined {\n return this.size > 0\n ? this.buffer[(this.head - 1 + this.maxSize) % this.maxSize]\n : undefined;\n }\n\n length() {\n return this.size;\n }\n\n toArray(): T[] {\n // Pre-allocate result array\n const res = new Array(this.size);\n for (let i = 0; i < this.size; i++) {\n res[i] =\n this.buffer[(this.head - this.size + i + this.maxSize) % this.maxSize];\n }\n return res;\n }\n}\n\n/**\n * High-performance deep cloning utility.\n * Cached clones, early returns, manual iteration\n */\nfunction deepClone<T>(obj: T): T {\n // Fast path for primitives\n if (obj === null || typeof obj !== \"object\") return obj;\n\n // Check cache first (for immutable objects)\n if (cloneCache.has(obj as any)) {\n return cloneCache.get(obj as any);\n }\n\n let cloned: any;\n\n if (Array.isArray(obj)) {\n // Manual array copy\n const len = obj.length;\n cloned = new Array(len);\n for (let i = 0; i < len; i++) {\n cloned[i] = deepClone(obj[i]);\n }\n } else {\n // Manual object copy\n cloned = {};\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cloned[key] = deepClone((obj as any)[key]);\n }\n }\n\n // Cache with size limit\n if (cacheSize < CLONE_CACHE_SIZE) {\n cloneCache.set(obj as any, cloned);\n cacheSize++;\n } else {\n // Basic LRU-ish: reset if too big to avoid memory pressure but keep performance\n cacheSize = 0;\n }\n\n return cloned;\n}\n\n/**\n * High-performance deep equality utility.\n * Early returns, fast type checks\n */\nfunction deepEqual(a: any, b: any): boolean {\n // Identity check first\n if (a === b) return true;\n\n // Fast type/null checks\n const typeA = typeof a;\n const typeB = typeof b;\n\n if (typeA !== typeB || a === null || b === null) return false;\n if (typeA !== \"object\") return false;\n\n // Array fast path\n const isArrayA = Array.isArray(a);\n const isArrayB = Array.isArray(b);\n\n if (isArrayA !== isArrayB) return false;\n\n if (isArrayA) {\n const len = a.length;\n if (len !== b.length) return false;\n for (let i = 0; i < len; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n // Object comparison with early exit\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n const len = keysA.length;\n\n if (len !== keysB.length) return false;\n\n for (let i = 0; i < len; i++) {\n const key = keysA[i];\n if (a[key] !== b[key] && !deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n}\n\nexport const store = new MemoryVault();\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BiF;AAIjF;AACA,MAAM,UAAU,GAAG,IAAI,OAAO,EAAY;AAC1C,MAAM,gBAAgB,GAAG,IAAI;AAC7B,IAAI,SAAS,GAAG,CAAC;AAEjB;;;;;;AAMG;AACH,MAAM,WAAW,CAAA;IA6CR,iBAAiB,CACtB,GAAW,EACX,QAKC,EAAA;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,GAAG,EAAE;YACT,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;QAChC;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AACpD,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;YAAE,IAAI,CAAC,GAAG,EAAE;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAClB;AAEO,IAAA,aAAa,CAAC,GAAW,EAAA;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;IACvC;IAEO,SAAS,CAAC,GAAW,EAAE,SAAiB,EAAA;QAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;IAClC;AAEO,IAAA,SAAS,CAAC,GAAW,EAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9B;AAEO,IAAA,UAAU,CAAC,GAAW,EAAA;QAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;IACpC;AAEO,IAAA,UAAU,CAAC,GAAW,EAAA;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;IACrC;AAEA,IAAA,WAAA,GAAA;AAnFQ,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;;;AAAQ,YAAA,KAAA,EAAA,IAAI,GAAG;AAAgB,SAAA,CAAA;AAC/B,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,eAAA,EAAA;;;;AAAgB,YAAA,KAAA,EAAA,IAAI,GAAG;AAAgB,SAAA,CAAA;AACvC,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,WAAA,EAAA;;;;AAAY,YAAA,KAAA,EAAA,IAAI,GAAG;AAGvB,SAAA,CAAA;AACI,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,WAAA,EAAA;;;;AAAY,YAAA,KAAA,EAAA,IAAI,GAAG;AAAgC,SAAA,CAAA;AACnD,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA;;;;AAAa,YAAA,KAAA,EAAA,IAAI,GAAG;AAAkB,SAAA,CAAA;AACtC,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,gBAAA,EAAA;;;;AAAiB,YAAA,KAAA,EAAA,IAAI,GAAG;AAAmB,SAAA,CAAA;AAC3C,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,QAAA,EAAA;;;;AAAS,YAAA,KAAA,EAAA,IAAI,GAAG;AASpB,SAAA,CAAA;AACI,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,WAAA,EAAA;;;;AAAY,YAAA,KAAA,EAAA,IAAI,GAAG;AAAwB,SAAA,CAAA,CAAA;AAC3C,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,SAAA,EAAA;;;;AAAU,YAAA,KAAA,EAAA,IAAI,GAAG;AAAmB,SAAA,CAAA,CAAA;AACpC,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,cAAA,EAAA;;;;AAAe,YAAA,KAAA,EAAA,IAAI,GAAG;AAAkB,SAAA,CAAA,CAAA;;AAGxC,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA;;;;AAAa,YAAA,KAAA,EAAA,IAAI,GAAG;AAAW,SAAA,CAAA;AAC/B,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,gBAAA,EAAA;;;;mBAAiB;AAAM,SAAA,CAAA;AAEvB,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,oBAAA,EAAA;;;;mBAAqB;AAAM,SAAA,CAAA;AAC3B,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,mBAAA,EAAA;;;;mBAAoB;AAAM,SAAA,CAAA;;AAG3B,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,eAAA,EAAA;;;;AAAgB,YAAA,KAAA,EAAA,IAAI,GAAG;AAAW,SAAA,CAAA;AAEjC,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA;;;;AAAa,YAAA,KAAA,EAAA,IAAI,GAAG;AASxB,SAAA,CAAA;AAmOI,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,cAAA,EAAA;;;;mBAAgC;AAAK,SAAA,CAAA;AAyJrC,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,iBAAA,EAAA;;;;AAAkB,YAAA,KAAA,EAAA,IAAI,GAAG;AAAe,SAAA,CAAA;AACxC,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,gBAAA,EAAA;;;;AAAiB,YAAA,KAAA,EAAA,IAAI,GAAG;AAQ5B,SAAA,CAAA;AA6HI,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,gBAAA,EAAA;;;;AAAiB,YAAA,KAAA,EAAA,IAAI,GAAG;AAAwB,SAAA,CAAA;QAxdtD,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;;AAEjC,YAAA,MAAM,CAAC,gBAAgB,GAAG,IAAI;QAChC;IACF;AAEA;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;YACtC,WAAW,CAAC,MAAK;gBACf,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AAClC,oBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1C,wBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;oBAC5B;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC;QACb;IACF;AAEA;;AAEG;AACH,IAAA,GAAG,CAAC,GAAW,EAAE,YAAkB,EAAE,OAAqB,EAAA;;QAExD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACvB,IAAI,IAAI,CAAC,iBAAiB;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;;AAE/B,YAAA,OAAO,OAAO,EAAE,WAAW,GAAG,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;QACpD;QAEA,IAAI,YAAY,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;;AAGhD,QAAA,IAAI,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC;;QAG3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;AAErD,QAAA,IAAI,OAAO,EAAE,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QAC9B;;QAGA,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;QACvC;;AAGA,QAAA,IAAI,OAAO,EAAE,OAAO,EAAE;AACpB,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;AACpC,gBAAA,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC/D;QACF;;AAGA,QAAA,IAAI,OAAO,EAAE,OAAO,EAAE;AACpB,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;AACpC,gBAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;wBAChC,GAAG;AACH,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,OAAO,EAAE,aAAa;AACvB,qBAAA,CAAC;AACF,oBAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,wBAAA,IAAI,QAAQ,YAAY,OAAO,EAAE;AAC/B,4BAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;gCACpB,IAAI,GAAG,KAAK,SAAS;oCAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;AACpD,4BAAA,CAAC,CAAC;wBACJ;6BAAO;4BACL,aAAa,GAAG,QAAQ;4BACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;4BACnC;wBACF;oBACF;gBACF;YACF;QACF;QAEA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC;;QAGlC,IAAI,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE;YACzC,MAAM,aAAa,GAAG,IAAI;YAC1B,MAAM,YAAY,GAAG,EAAS;AAC9B,YAAA,MAAM,UAAU,GAAG;AACjB,gBAAA,IAAI,IAAI,GAAA;oBACN,OAAO,aAAa,CAAC,YAAa,CAChC,GAAG,EACH,EAAE,EACF,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAC5B,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CACtC;gBACH,CAAC;AACD,gBAAA,IAAI,KAAK,GAAA;oBACP,OAAO,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBACrC,CAAC;AACD,gBAAA,IAAI,YAAY,GAAA;oBACd,OAAO,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC7C,CAAC;AACD,gBAAA,IAAI,OAAO,GAAA;AACT,oBAAA,OAAO,YAAY;gBACrB,CAAC;aACF;AAED,YAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,gBAAA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACxD,oBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAW,KACjC,EAAe,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC;gBACzC;YACF;YAEA,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AAClD,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC;AACzB,sBAAE,MAAM,CAAC,IAAI,CAAC,aAAa;sBACzB,SAAS;;gBAGb,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,UAAiB,CAAC;gBAErD,OAAO;AACL,oBAAA,QAAQ,EAAE,WAAW;oBACrB,MAAM,EAAE,MAAM,CAAC,IAAI;oBACnB,GAAG,EAAE,MAAM,CAAC,GAAG;AACf,oBAAA,OAAO,EACL,OAAO,eAAe,KAAK,UAAU,GAAG,eAAe,GAAG,SAAS;iBACtE;AACH,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC;;AAGxC,YAAA,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE;AACtC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAK;oBACvB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACxC,oBAAA,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACzB,wBAAA,IAAI,CAAC,CAAC,MAAM,EAAE;4BACZ,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;4BACtC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;AACnC,gCAAA,CAAC,CAAC,QAAQ,GAAG,OAAO;;gCAEpB,IAAI,CAAC,CAAC,OAAO;oCAAE,CAAC,CAAC,OAAO,EAAE;gCAE1B,MAAM,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,UAAiB,CAAC;AAChD,gCAAA,CAAC,CAAC,OAAO;oCACP,OAAO,eAAe,KAAK;AACzB,0CAAE;0CACA,SAAS;4BACjB;wBACF;AACF,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;YACJ;QACF;QAEA,IAAI,IAAI,CAAC,iBAAiB;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;AACvD,QAAA,OAAO,aAAa;IACtB;AAEA;;AAEG;IACH,YAAY,CAAC,GAAW,EAAE,OAAqB,EAAA;QAC7C,MAAM,GAAG,GAAwB,EAAE;AACnC,QAAA,IAAI,OAAO,EAAE,OAAO,EAAE;AACpB,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;AACpC,gBAAA,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjB,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAA,CAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBAC9D;YACF;QACF;AACA,QAAA,OAAO,GAAG;IACZ;AAGA,IAAA,eAAe,CAAC,EAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IACxB;AAEA;;AAEG;AACH,IAAA,GAAG,CAAC,GAAW,EAAE,QAAa,EAAE,UAAuB,EAAE,EAAA;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QACrC,IAAI,UAAU,GAAG,QAAQ;;AAGzB,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AACtB,YAAA,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,UAAU,EAAE;AACnC,gBAAA,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;YAC7B;QACF;;QAGA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YAC3C,IAAI,SAAS,KAAK,UAAU;gBAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;iBAEhC;AACL,gBAAA,OAAO;YACT;QACF;AAEA,QAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC;YAC3C;QACF;QAEA,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC;;AAGvC,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;gBACpC,MAAM,CAAC,QAAQ,GAAG;oBAChB,GAAG;AACH,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA,CAAC;YACJ;QACF;IACF;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,GAAW,EAAE,KAAU,EAAE,OAAoB,EAAA;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;AAC7C,QAAA,IAAI,QAAQ;YAAE,YAAY,CAAC,QAAQ,CAAC;AAEpC,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAK;YAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC;;AAGlC,YAAA,IAAI,OAAO,CAAC,OAAO,EAAE;gBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACrC,gBAAA,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;oBACpC,MAAM,CAAC,QAAQ,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBACvE;YACF;AAEA,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;AACjC,QAAA,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC;QAEpB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAY,CAAC;IAC5C;AAEA;;AAEG;AACK,IAAA,QAAQ,CAAC,GAAW,EAAE,UAAe,EAAE,OAAoB,EAAA;QACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;;AAG/B,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,OAAO,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC;gBACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;YAClC;YACA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAEnC,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,GAAG,EAAE;gBACT,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;YAChC;AACA,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC;QACjB;AAEA,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAG,OAAe,CAAC,KAAK;AAC5B,gBAAA,KAAK,EAAE,UAAU;AAClB,aAAA,CAAC;QACJ;;AAGA,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YACrC,IAAI,CAAC,UAAU,EAAE;gBACf,UAAU,GAAG,EAAE;gBACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;YAClC;YACA,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,gBAAA,IAAI,EAAG,OAAe,CAAC,GAAG,IAAI,OAAO;gBACrC,IAAI,EAAG,OAAe,CAAC,KAAK;AAC5B,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACtB,aAAA,CAAC;;AAEF,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE;gBAAE,UAAU,CAAC,KAAK,EAAE;QAChD;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;IAC/B;AAEA;;;AAGG;AACK,IAAA,mBAAmB,CAAC,GAAW,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAExB,IAAI,IAAI,CAAC,cAAc;YAAE;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC1B,cAAc,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC/C;AAEA;;;AAGG;IACK,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;YAAE;;QAGhC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC9B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAClB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACzB;AAaA;;AAEG;AACH,IAAA,SAAS,CACP,GAAW,EACX,QAAoB,EACpB,eAA4C,EAAA;AAE5C,QAAA,MAAM,KAAK,GACT,OAAO,eAAe,KAAK;AACzB,cAAE;AACF,cAAE,eAAe,EAAE,KAAK,IAAI,sBAAsB;AAEtD,QAAA,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE;YACvC,IAAI,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAC3C,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,aAAa,GAAG,IAAI,GAAG,EAAE;gBACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC;YACxC;AACA,YAAA,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC;QACpC;QAEA,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,GAAG,GAAG,IAAI,GAAG,EAAE;YACf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;QAC9B;AACA,QAAA,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAEnD,QAAA,OAAO,MAAK;YACV,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAC1C,IAAI,UAAU,EAAE;AACd,gBAAA,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3B,gBAAA,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACjD,oBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC5B;YACF;AACF,QAAA,CAAC;IACH;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,QAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;YACrC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC;AACzD,QAAA,CAAC;IACH;AAEA;;AAEG;AACH,IAAA,eAAe,CACb,QAMU,EAAA;AAEV,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC;AACvD,QAAA,CAAC;IACH;AAEQ,IAAA,SAAS,CACf,IAAkD,EAClD,GAAW,EACX,IAAuD,EAAA;QAEvD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAC/D;AAEA;;AAEG;IACH,gBAAgB,GAAA;QACd,MAAM,IAAI,GAAwB,EAAE;QACpC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,GAAG;AACV,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,IAAI,EAAE;AACJ,oBAAA,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC;AACnD,oBAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;AAC/C,oBAAA,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;oBAC9D,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,oBAAA,OAAO,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;oBACjC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;AAClC,oBAAA,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oBACpD,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAC7B,oBAAA,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACjC,oBAAA,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;AACpC,iBAAA;aACF;QACH;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACK,IAAA,cAAc,CACpB,GAAW,EAAA;;;QAIX,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,OAAO;AAAE,YAAA,OAAO,EAAE;QAChC,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;YACjC,IAAI,EAAE,CAAC,CAAC,IAAI;AACZ,YAAA,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;AACnB,SAAA,CAAC,CAAC;IACL;AAIA;;AAEG;AACK,IAAA,MAAM,CAAC,GAAW,EAAA;QACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;AACjE,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C;IACF;AAEA;;AAEG;AACH,IAAA,IAAI,CAAC,GAAW,EAAA;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QACrC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;AACnC,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;AAC7B,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;AAChC,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE;YAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAClB;IACF;AAEA;;AAEG;AACH,IAAA,IAAI,CAAC,GAAW,EAAA;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QACrC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAClB;IACF;AAEA;;AAEG;AACH,IAAA,KAAK,CAAC,GAAW,EAAA;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC;AAC5B,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;QACxB;IACF;AAEA;;AAEG;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;AACpC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACjB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;IACjD;AACA,IAAA,YAAY,CAAC,GAAW,EAAA;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;IACvC;AAEA;;AAEG;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACnC,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBACnB,IAAI,CAAC,CAAC,OAAO;oBAAE,CAAC,CAAC,OAAO,EAAE;AAC5B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAEzB,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;QAEvB,SAAS,GAAG,CAAC;IACf;AACD;AAED;;;AAGG;AACH,MAAM,cAAc,CAAA;IAMlB,WAAA,CAAY,OAAe,EAAE,OAAA,GAAe,EAAE,EAAA;AALtC,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,QAAA,EAAA;;;;;AAAY,SAAA,CAAA;AACZ,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,MAAA,EAAA;;;;mBAAO;AAAE,SAAA,CAAA;AACT,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,MAAA,EAAA;;;;mBAAO;AAAE,SAAA,CAAA;AACT,QAAA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,SAAA,EAAA;;;;;AAAgB,SAAA,CAAA;AAGtB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;QAEtB,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC;AAChC,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC;AAEA,IAAA,IAAI,CAAC,IAAO,EAAA;QACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO;AAC1C,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,EAAE;IAC3C;IAEA,GAAG,GAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AAAE,YAAA,OAAO,SAAS;AACpC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;QACzD,IAAI,CAAC,IAAI,EAAE;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B;IAEA,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,GAAG;cACf,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;cACzD,SAAS;IACf;IAEA,MAAM,GAAA;QACJ,OAAO,IAAI,CAAC,IAAI;IAClB;IAEA,OAAO,GAAA;;QAEL,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAClC,GAAG,CAAC,CAAC,CAAC;gBACJ,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;QAC1E;AACA,QAAA,OAAO,GAAG;IACZ;AACD;AAED;;;AAGG;AACH,SAAS,SAAS,CAAI,GAAM,EAAA;;AAE1B,IAAA,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,QAAA,OAAO,GAAG;;AAGvD,IAAA,IAAI,UAAU,CAAC,GAAG,CAAC,GAAU,CAAC,EAAE;AAC9B,QAAA,OAAO,UAAU,CAAC,GAAG,CAAC,GAAU,CAAC;IACnC;AAEA,IAAA,IAAI,MAAW;AAEf,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;;AAEtB,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM;AACtB,QAAA,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B;IACF;SAAO;;QAEL,MAAM,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAE,GAAW,CAAC,GAAG,CAAC,CAAC;QAC5C;IACF;;AAGA,IAAA,IAAI,SAAS,GAAG,gBAAgB,EAAE;AAChC,QAAA,UAAU,CAAC,GAAG,CAAC,GAAU,EAAE,MAAM,CAAC;AAClC,QAAA,SAAS,EAAE;IACb;SAAO;;QAEL,SAAS,GAAG,CAAC;IACf;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;;AAGG;AACH,SAAS,SAAS,CAAC,CAAM,EAAE,CAAM,EAAA;;IAE/B,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;;AAGxB,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC;AACtB,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC;IAEtB,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;AAAE,QAAA,OAAO,KAAK;IAC7D,IAAI,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,KAAK;;IAGpC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjC,IAAI,QAAQ,KAAK,QAAQ;AAAE,QAAA,OAAO,KAAK;IAEvC,IAAI,QAAQ,EAAE;AACZ,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM;AACpB,QAAA,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AAClC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,KAAK;QAC1C;AACA,QAAA,OAAO,IAAI;IACb;;IAGA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM;AAExB,IAAA,IAAI,GAAG,KAAK,KAAK,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;AAEtC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;IACnE;AAEA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,KAAK,GAAG,IAAI,WAAW;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { F as FlowDefinition, D as DerivedFlowDefinition, C as ContextGetterOps, a as FlowOptions, A as ActionOpsObject, b as FlowOperations, U as UseFlowOptions } from './types-
|
|
2
|
-
export { c as ArrayOps, B as BaseOps, d as BooleanOps, e as BoundActions, f as FlowAction, g as FlowEffect, h as FlowOpsObject, i as FlowPlugin, N as NumberOps, O as ObjectOps, S as StringOps, T as TypeAwareOps } from './types-
|
|
1
|
+
import { F as FlowDefinition, D as DerivedFlowDefinition, C as ContextGetterOps, a as FlowOptions, A as ActionOpsObject, b as FlowOperations, U as UseFlowOptions } from './types-CrNg0-d5.js';
|
|
2
|
+
export { c as ArrayOps, B as BaseOps, d as BooleanOps, e as BoundActions, f as FlowAction, g as FlowEffect, h as FlowOpsObject, i as FlowPlugin, N as NumberOps, O as ObjectOps, S as StringOps, T as TypeAwareOps } from './types-CrNg0-d5.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Manually initializes a flow to ensure its effects run immediately.
|
|
6
6
|
* This is useful for flows that need to start working before any component subscribes to them.
|
|
7
7
|
*/
|
|
8
8
|
declare function initFlow<T, A, C>(flow: FlowDefinition<T, A, C>): void;
|
|
9
|
+
/**
|
|
10
|
+
* Clears the entire store, all timers, and runs cleanup for all active flow effects.
|
|
11
|
+
*/
|
|
12
|
+
declare function clearAll(): void;
|
|
9
13
|
/**
|
|
10
14
|
* Defines a derived flow that reacts to changes in a source flow.
|
|
11
15
|
* Use this for computed values that shouldn't be manually modified.
|
|
@@ -34,4 +38,4 @@ declare function useFlow<K extends string, T = any>(key: K, initial?: T, options
|
|
|
34
38
|
declare function useFlow<T, A, C>(def: FlowDefinition<T, A, C>, options?: UseFlowOptions<T>): [T, FlowOperations<T, A>];
|
|
35
39
|
declare function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];
|
|
36
40
|
|
|
37
|
-
export { ActionOpsObject, ContextGetterOps, DerivedFlowDefinition, FlowDefinition, FlowOperations, FlowOptions, UseFlowOptions, defineDerived, defineFlow, getFlow, initFlow, useFlow };
|
|
41
|
+
export { ActionOpsObject, ContextGetterOps, DerivedFlowDefinition, FlowDefinition, FlowOperations, FlowOptions, UseFlowOptions, clearAll, defineDerived, defineFlow, getFlow, initFlow, useFlow };
|
package/dist/plugins.d.ts
CHANGED
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for FractoState
|
|
3
|
+
*/
|
|
4
|
+
type TypeAwareOps<T, A = any> = [T] extends [null | undefined] ? BaseOps<T, A> : [T] extends [any[]] ? ArrayOps<T[number], A> : [T] extends [number] ? NumberOps<A> : [T] extends [string] ? StringOps<A> : [T] extends [boolean] ? BooleanOps<A> : [NonNullable<T>] extends [object] ? ObjectOps<T, A> : BaseOps<T, A>;
|
|
5
|
+
type FlowOpsObject<T, A = any> = {
|
|
6
|
+
readonly self: TypeAwareOps<T, A>;
|
|
7
|
+
readonly state: T;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Enhanced operations for actions that include the context
|
|
11
|
+
*/
|
|
12
|
+
type ActionOpsObject<T, A = any, C = undefined> = FlowOpsObject<T, A> & {
|
|
13
|
+
readonly ctx: C;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Action structure: (...args) => (ops) => Result
|
|
17
|
+
*/
|
|
18
|
+
type FlowAction<T, A = any, C = undefined> = (...args: any[]) => (ops: ActionOpsObject<T, A, C>) => any;
|
|
19
|
+
/**
|
|
20
|
+
* Transform actions for the component toolbox.
|
|
21
|
+
* Excludes internal __ctx__ property.
|
|
22
|
+
*/
|
|
23
|
+
type BoundActions<A> = {
|
|
24
|
+
[K in keyof A as K extends "__ctx__" ? never : K]: A[K] extends (...args: infer P) => (...inner: any[]) => infer R ? (...args: P) => R : never;
|
|
25
|
+
};
|
|
26
|
+
interface FlowPlugin<T = any, A = any> {
|
|
27
|
+
name: string;
|
|
28
|
+
onInit?: (ctx: {
|
|
29
|
+
key: string;
|
|
30
|
+
initial: T;
|
|
31
|
+
store: any;
|
|
32
|
+
}) => void;
|
|
33
|
+
onUpdate?: (ctx: {
|
|
34
|
+
key: string;
|
|
35
|
+
prev: T;
|
|
36
|
+
next: T;
|
|
37
|
+
store: any;
|
|
38
|
+
}) => void;
|
|
39
|
+
onHydrate?: (ctx: {
|
|
40
|
+
key: string;
|
|
41
|
+
initial: T;
|
|
42
|
+
store: any;
|
|
43
|
+
}) => T | Promise<T> | undefined;
|
|
44
|
+
/** Return methods that will be exposed under ops.self._[pluginName] */
|
|
45
|
+
getOps?: (ctx: {
|
|
46
|
+
key: string;
|
|
47
|
+
store: any;
|
|
48
|
+
}) => Record<string, Function>;
|
|
49
|
+
/** @internal Phantom type for action inference */
|
|
50
|
+
__plugin_actions__?: A;
|
|
51
|
+
}
|
|
52
|
+
interface FlowEffect<T, A = any> {
|
|
53
|
+
/** Function to run on init and when deps change. Can return a cleanup function. */
|
|
54
|
+
run: (ops: FlowOpsObject<T, A>) => void | (() => void) | Promise<void>;
|
|
55
|
+
/** Optional dependencies selector. If omitted, runs only on init */
|
|
56
|
+
deps?: (state: T) => any[];
|
|
57
|
+
}
|
|
58
|
+
interface FlowOptions<T = any, A = any> {
|
|
59
|
+
timeTravel?: boolean;
|
|
60
|
+
maxHistory?: number;
|
|
61
|
+
debounce?: number;
|
|
62
|
+
middleware?: Array<(state: T) => T>;
|
|
63
|
+
plugins?: FlowPlugin<T, A>[];
|
|
64
|
+
effects?: FlowEffect<T, A>[];
|
|
65
|
+
force?: boolean;
|
|
66
|
+
skipEquality?: boolean;
|
|
67
|
+
isUndoRedo?: boolean;
|
|
68
|
+
bypassClone?: boolean;
|
|
69
|
+
/** The name of the component or module performing the update */
|
|
70
|
+
actor?: string;
|
|
71
|
+
/** Raw actions dictionary for internal binding */
|
|
72
|
+
actions?: A;
|
|
73
|
+
}
|
|
74
|
+
interface ContextGetterOps<T, A> {
|
|
75
|
+
state: T;
|
|
76
|
+
initialState: T;
|
|
77
|
+
actions: BoundActions<A>;
|
|
78
|
+
ops: FlowOpsObject<T, A>;
|
|
79
|
+
}
|
|
80
|
+
interface UseFlowOptions<T> extends FlowOptions<T> {
|
|
81
|
+
name?: string;
|
|
82
|
+
}
|
|
83
|
+
interface FlowDefinition<T, A = {}, C = undefined> {
|
|
84
|
+
key: string;
|
|
85
|
+
initial: T;
|
|
86
|
+
options?: FlowOptions<T, A> & {
|
|
87
|
+
actions?: A;
|
|
88
|
+
};
|
|
89
|
+
/** @internal Phantom type for context inference */
|
|
90
|
+
__ctx__?: C;
|
|
91
|
+
}
|
|
92
|
+
interface DerivedFlowDefinition<T, R> {
|
|
93
|
+
key: string;
|
|
94
|
+
source: FlowDefinition<T, any>;
|
|
95
|
+
selector: (state: T) => R;
|
|
96
|
+
}
|
|
97
|
+
interface FlowOperations<T, A = {}> {
|
|
98
|
+
/** The operation object for recursive state manipulation via proxies */
|
|
99
|
+
ops: FlowOpsObject<T, A>;
|
|
100
|
+
/** The actions defined in defineFlow, bound to this specific state instance */
|
|
101
|
+
actions: BoundActions<A>;
|
|
102
|
+
/** Reverts to the previous state in history (if timeTravel is enabled) */
|
|
103
|
+
_undo: () => void;
|
|
104
|
+
/** Reapplies a previously undone state (if timeTravel is enabled) */
|
|
105
|
+
_redo: () => void;
|
|
106
|
+
/** Returns the full history stack for this flow */
|
|
107
|
+
history: T[];
|
|
108
|
+
/** Boolean indicating if an undo operation is currently possible */
|
|
109
|
+
_canUndo: boolean;
|
|
110
|
+
/** Boolean indicating if a redo operation is currently possible */
|
|
111
|
+
_canRedo: boolean;
|
|
112
|
+
/** Forcefully updates the state and records history even if values are identical. Useful for triggering effects or manual snapshots. */
|
|
113
|
+
_set: (val: T | ((prev: T) => T)) => void;
|
|
114
|
+
/** Optimized update: only commits the change if the new value differs from the current one. Saves history space and render cycles. */
|
|
115
|
+
_patch: (val: T | ((prev: T) => T)) => void;
|
|
116
|
+
/** Resets the state back to its initial defined configuration */
|
|
117
|
+
_reset: () => void;
|
|
118
|
+
/** Returns the current flow configuration options */
|
|
119
|
+
cf: FlowOptions<T>;
|
|
120
|
+
/** Boolean indicating if the flow is currently loading data from a hydration plugin (e.g., localStorage) */
|
|
121
|
+
isHydrating: boolean;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Common operations available on every state node.
|
|
125
|
+
* Prefixed with underscores to avoid collisions with your nested data properties.
|
|
126
|
+
*/
|
|
127
|
+
type BaseOps<T, A = any> = {
|
|
128
|
+
/** Forcefully replace the value at this path, ignoring equality checks. Records history. */
|
|
129
|
+
_set: (value: T) => void;
|
|
130
|
+
/** Smart update: only commits the change if the value is different. */
|
|
131
|
+
_patch: (value: T) => void;
|
|
132
|
+
/** Unwraps the proxy and returns the raw value at this specific tree path. */
|
|
133
|
+
_val: T;
|
|
134
|
+
/** Access all actions defined in this flow */
|
|
135
|
+
__actions__: BoundActions<A>;
|
|
136
|
+
/** Persistence control (provided by persist plugin) */
|
|
137
|
+
_persist?: {
|
|
138
|
+
clear: () => void;
|
|
139
|
+
update: () => void;
|
|
140
|
+
refresh: () => Promise<void>;
|
|
141
|
+
getData: () => Promise<T | undefined>;
|
|
142
|
+
};
|
|
143
|
+
/** Reverts to the previous state in history (if timeTravel is enabled) - Global Effect */
|
|
144
|
+
_undo: () => void;
|
|
145
|
+
/** Reapplies a previously undone state (if timeTravel is enabled) - Global Effect */
|
|
146
|
+
_redo: () => void;
|
|
147
|
+
/** Boolean indicating if an undo operation is currently possible */
|
|
148
|
+
_canUndo: boolean;
|
|
149
|
+
/** Boolean indicating if a redo operation is currently possible */
|
|
150
|
+
_canRedo: boolean;
|
|
151
|
+
/** Returns the full history stack for this flow */
|
|
152
|
+
_history: T[];
|
|
153
|
+
};
|
|
154
|
+
/** Operations specific to numeric values */
|
|
155
|
+
type NumberOps<A = any> = BaseOps<number, A> & {
|
|
156
|
+
/** Increment by n (default 1) */
|
|
157
|
+
_increment: (n?: number) => void;
|
|
158
|
+
/** Decrement by n (default 1) */
|
|
159
|
+
_decrement: (n?: number) => void;
|
|
160
|
+
/** Add n to the value */
|
|
161
|
+
_add: (n: number) => void;
|
|
162
|
+
/** Subtract n from the value */
|
|
163
|
+
_subtract: (n: number) => void;
|
|
164
|
+
/** Multiply the value by n */
|
|
165
|
+
_multiply: (n: number) => void;
|
|
166
|
+
/** Divide the value by n */
|
|
167
|
+
_divide: (n: number) => void;
|
|
168
|
+
/** Raise to the power of n */
|
|
169
|
+
_pow: (n: number) => void;
|
|
170
|
+
/** Calculate square root */
|
|
171
|
+
_sqrt: () => void;
|
|
172
|
+
/** Set to absolute value */
|
|
173
|
+
_abs: () => void;
|
|
174
|
+
/** Round to the nearest integer */
|
|
175
|
+
_round: () => void;
|
|
176
|
+
/** Round down to the nearest integer */
|
|
177
|
+
_floor: () => void;
|
|
178
|
+
/** Round up to the nearest integer */
|
|
179
|
+
_ceil: () => void;
|
|
180
|
+
/** Modulo operation */
|
|
181
|
+
_mod: (n: number) => void;
|
|
182
|
+
/** Clamp value between min and max */
|
|
183
|
+
_clamp: (min: number, max: number) => void;
|
|
184
|
+
/** Negate the value */
|
|
185
|
+
_negate: () => void;
|
|
186
|
+
/** Format to fixed precision (updates value to parsed float) */
|
|
187
|
+
_toPrecision: (precision: number) => void;
|
|
188
|
+
};
|
|
189
|
+
/** Operations specific to string values */
|
|
190
|
+
type StringOps<A = any> = BaseOps<string, A> & {
|
|
191
|
+
/** Append a string at the end */
|
|
192
|
+
_append: (s: string) => void;
|
|
193
|
+
/** Prepend a string at the beginning */
|
|
194
|
+
_prepend: (s: string) => void;
|
|
195
|
+
/** Convert value to uppercase */
|
|
196
|
+
_uppercase: () => void;
|
|
197
|
+
/** Convert value to lowercase */
|
|
198
|
+
_lowercase: () => void;
|
|
199
|
+
/** Trim whitespace from both ends */
|
|
200
|
+
_trim: () => void;
|
|
201
|
+
/** Replace first occurrence matching pattern */
|
|
202
|
+
_replace: (pattern: string | RegExp, replacement: string) => void;
|
|
203
|
+
/** Replace all occurrences matching pattern */
|
|
204
|
+
_replaceAll: (pattern: string | RegExp, replacement: string) => void;
|
|
205
|
+
/** Extract substring */
|
|
206
|
+
_substring: (start: number, end?: number) => void;
|
|
207
|
+
/** Extract section of string */
|
|
208
|
+
_slice: (start: number, end?: number) => void;
|
|
209
|
+
/** Capitalize first letter */
|
|
210
|
+
_capitalize: () => void;
|
|
211
|
+
/** Truncate string to length with suffix */
|
|
212
|
+
_truncate: (length: number, suffix?: string) => void;
|
|
213
|
+
/** Pad end of string */
|
|
214
|
+
_padEnd: (length: number, fill?: string) => void;
|
|
215
|
+
/** Pad start of string */
|
|
216
|
+
_padStart: (length: number, fill?: string) => void;
|
|
217
|
+
/** Repeat string count times */
|
|
218
|
+
_repeat: (count: number) => void;
|
|
219
|
+
};
|
|
220
|
+
/** Operations specific to array values */
|
|
221
|
+
type ArrayOps<T, A = any> = BaseOps<T[], A> & {
|
|
222
|
+
/** Add an item to the end of the array */
|
|
223
|
+
_push: (v: T) => void;
|
|
224
|
+
/** Remove and return the last item */
|
|
225
|
+
_pop: () => void;
|
|
226
|
+
/** Remove and return the first item */
|
|
227
|
+
_shift: () => void;
|
|
228
|
+
/** Add an item to the beginning of the array */
|
|
229
|
+
_unshift: (v: T) => void;
|
|
230
|
+
/** Keep only items matching the condition */
|
|
231
|
+
_filter: (fn: (v: T, i: number) => boolean) => void;
|
|
232
|
+
/** Transform every item in the array */
|
|
233
|
+
_map: (fn: (v: T, i: number) => T) => void;
|
|
234
|
+
/** Remove item at a specific index */
|
|
235
|
+
_removeAt: (i: number) => void;
|
|
236
|
+
/** Insert an item at a specific index */
|
|
237
|
+
_insertAt: (i: number, v: T) => void;
|
|
238
|
+
/** Splice the array (items removed/replaced) */
|
|
239
|
+
_splice: (start: number, deleteCount: number, ...items: T[]) => void;
|
|
240
|
+
/** Reverse the array */
|
|
241
|
+
_reverse: () => void;
|
|
242
|
+
/** Sort the array */
|
|
243
|
+
_sort: (compareFn?: (a: T, b: T) => number) => void;
|
|
244
|
+
/** Fill the array with a static value */
|
|
245
|
+
_fill: (value: T, start?: number, end?: number) => void;
|
|
246
|
+
/** Concatenate with another array */
|
|
247
|
+
_concat: (other: T[]) => void;
|
|
248
|
+
/** Remove duplicates */
|
|
249
|
+
_uniq: () => void;
|
|
250
|
+
/** Randomly shuffle the array */
|
|
251
|
+
_shuffle: () => void;
|
|
252
|
+
/** Access item at index (supports negative index) */
|
|
253
|
+
_at: (i: number) => TypeAwareOps<T, A>;
|
|
254
|
+
/** Access the first item */
|
|
255
|
+
_first: () => TypeAwareOps<T, A>;
|
|
256
|
+
/** Access the last item */
|
|
257
|
+
_last: () => TypeAwareOps<T, A>;
|
|
258
|
+
/** Find item by predicate and return its proxy */
|
|
259
|
+
_findBy: (predicate: (item: T, index: number) => boolean) => TypeAwareOps<T, A> | undefined;
|
|
260
|
+
};
|
|
261
|
+
/** Operations specific to object values */
|
|
262
|
+
type ObjectOps<T, A = any> = BaseOps<T, A> & {
|
|
263
|
+
/** Shallow merge the provided object into the current state */
|
|
264
|
+
_merge: (p: Partial<NonNullable<T>>) => void;
|
|
265
|
+
/** Remove a specific key from the object */
|
|
266
|
+
_delete: (k: keyof NonNullable<T>) => void;
|
|
267
|
+
/** Pick only specific keys (removes others) */
|
|
268
|
+
_pick: (keys: (keyof NonNullable<T>)[]) => void;
|
|
269
|
+
/** Omit specific keys */
|
|
270
|
+
_omit: (keys: (keyof NonNullable<T>)[]) => void;
|
|
271
|
+
/** Set default values for undefined keys */
|
|
272
|
+
_defaults: (defaults: Partial<NonNullable<T>>) => void;
|
|
273
|
+
/** Clear all keys (empty object) */
|
|
274
|
+
_clear: () => void;
|
|
275
|
+
/** Deep clone (re-assigns self) */
|
|
276
|
+
_clone: () => void;
|
|
277
|
+
/** Assign properties from source (alias to merge) */
|
|
278
|
+
_assign: (source: Partial<NonNullable<T>>) => void;
|
|
279
|
+
/** Map over values and update */
|
|
280
|
+
_mapValues: (fn: (value: any, key: keyof T) => any) => void;
|
|
281
|
+
} & {
|
|
282
|
+
[K in keyof NonNullable<T>]-?: TypeAwareOps<NonNullable<T>[K], A>;
|
|
283
|
+
};
|
|
284
|
+
type BooleanOps<A = any> = BaseOps<boolean, A> & {
|
|
285
|
+
_toggle: () => void;
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
export type { ActionOpsObject as A, BaseOps as B, ContextGetterOps as C, DerivedFlowDefinition as D, FlowDefinition as F, NumberOps as N, ObjectOps as O, StringOps as S, TypeAwareOps as T, UseFlowOptions as U, FlowOptions as a, FlowOperations as b, ArrayOps as c, BooleanOps as d, BoundActions as e, FlowAction as f, FlowEffect as g, FlowOpsObject as h, FlowPlugin as i };
|
package/package.json
CHANGED