fractostate 4.8.0 → 4.8.1
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 +9 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +9 -5
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/types-4LME7oGG.d.ts +0 -200
- package/dist/types-8kp16WTu.d.ts +0 -206
- package/dist/types-B8PKsJu0.d.ts +0 -198
- package/dist/types-C0NWkZo2.d.ts +0 -198
- package/dist/types-DVfC_yXR.d.ts +0 -198
- package/dist/types-glPP8lSw.d.ts +0 -216
- package/dist/types-uxZZ-BGu.d.ts +0 -206
- package/dist/types-w9Mg5qmL.d.ts +0 -203
package/dist/cjs/index.js
CHANGED
|
@@ -63,7 +63,7 @@ function defineFlow(key, initial, options) {
|
|
|
63
63
|
*/
|
|
64
64
|
function getFlow(def) {
|
|
65
65
|
const { key, initial, options: flowOptions } = def;
|
|
66
|
-
|
|
66
|
+
store.store.get(key, initial, flowOptions);
|
|
67
67
|
const boundActions = {};
|
|
68
68
|
const defaultOps = {
|
|
69
69
|
get self() {
|
|
@@ -132,7 +132,8 @@ function getFlow(def) {
|
|
|
132
132
|
cf: flowOptions || {},
|
|
133
133
|
isHydrating: !!store.store.__hydrating__?.has(key),
|
|
134
134
|
};
|
|
135
|
-
|
|
135
|
+
const latestState = store.store.get(key, initial);
|
|
136
|
+
return [latestState, toolbox];
|
|
136
137
|
}
|
|
137
138
|
function useFlow(keyOrDef, initial, options) {
|
|
138
139
|
const isDerived = typeof keyOrDef === "object" && "selector" in keyOrDef;
|
|
@@ -152,7 +153,7 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
152
153
|
: isDerived
|
|
153
154
|
? keyOrDef.source.options
|
|
154
155
|
: options;
|
|
155
|
-
const [
|
|
156
|
+
const [snapshot, setSnapshot] = React.useState(() => {
|
|
156
157
|
const raw = store.store.get(key, initialVal, flowOptions);
|
|
157
158
|
return isDerived ? keyOrDef.selector(raw) : raw;
|
|
158
159
|
});
|
|
@@ -160,7 +161,7 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
160
161
|
const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;
|
|
161
162
|
return store.store.subscribe(key, () => {
|
|
162
163
|
const raw = store.store.get(key, initialVal);
|
|
163
|
-
|
|
164
|
+
setSnapshot(isDerived ? keyOrDef.selector(raw) : raw);
|
|
164
165
|
}, { label });
|
|
165
166
|
}, [key, isDerived, flowOptions?.name, flowOptions?.actor]);
|
|
166
167
|
const toolbox = React.useMemo(() => {
|
|
@@ -234,7 +235,10 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
234
235
|
cf: flowOptions || {},
|
|
235
236
|
isHydrating: !!store.store.__hydrating__?.has(key),
|
|
236
237
|
};
|
|
237
|
-
}, [key, isDerived,
|
|
238
|
+
}, [key, isDerived, snapshot, flowOptions]);
|
|
239
|
+
const state = isDerived
|
|
240
|
+
? keyOrDef.selector(store.store.get(key, initialVal))
|
|
241
|
+
: store.store.get(key, initialVal);
|
|
238
242
|
return [state, toolbox];
|
|
239
243
|
}
|
|
240
244
|
|
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 const state = store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<T, A> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n 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 return [state, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [state, setState] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setState(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: 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, state, flowOptions]);\n\n return [state, toolbox] as any;\n}\n"],"names":["store","createDeepProxy","useState","useEffect","useMemo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/* *****************************************************************************\n * FractoSate\n *\n * ACCESS RESTRICTIONS:\n * - This software is exclusively for use by Authorized Personnel of NEHONIX\n * - Intended for Internal Use only within NEHONIX operations\n * - No rights granted to unauthorized individuals or entities\n * - All modifications are works made for hire assigned to NEHONIX\n *\n * PROHIBITED ACTIVITIES:\n * - Copying, distributing, or sublicensing without written permission\n * - Reverse engineering, decompiling, or disassembling\n * - Creating derivative works without explicit authorization\n * - External use or commercial distribution outside NEHONIX\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * For questions or permissions, contact:\n * NEHONIX Legal Department\n * Email: legal@nehonix.com\n * Website: www.nehonix.com\n ***************************************************************************** */\n\nimport { useState, useEffect, useMemo } from \"react\";\nimport type {\n FlowOperations,\n 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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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -61,7 +61,7 @@ function defineFlow(key, initial, options) {
|
|
|
61
61
|
*/
|
|
62
62
|
function getFlow(def) {
|
|
63
63
|
const { key, initial, options: flowOptions } = def;
|
|
64
|
-
|
|
64
|
+
store.get(key, initial, flowOptions);
|
|
65
65
|
const boundActions = {};
|
|
66
66
|
const defaultOps = {
|
|
67
67
|
get self() {
|
|
@@ -130,7 +130,8 @@ function getFlow(def) {
|
|
|
130
130
|
cf: flowOptions || {},
|
|
131
131
|
isHydrating: !!store.__hydrating__?.has(key),
|
|
132
132
|
};
|
|
133
|
-
|
|
133
|
+
const latestState = store.get(key, initial);
|
|
134
|
+
return [latestState, toolbox];
|
|
134
135
|
}
|
|
135
136
|
function useFlow(keyOrDef, initial, options) {
|
|
136
137
|
const isDerived = typeof keyOrDef === "object" && "selector" in keyOrDef;
|
|
@@ -150,7 +151,7 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
150
151
|
: isDerived
|
|
151
152
|
? keyOrDef.source.options
|
|
152
153
|
: options;
|
|
153
|
-
const [
|
|
154
|
+
const [snapshot, setSnapshot] = useState(() => {
|
|
154
155
|
const raw = store.get(key, initialVal, flowOptions);
|
|
155
156
|
return isDerived ? keyOrDef.selector(raw) : raw;
|
|
156
157
|
});
|
|
@@ -158,7 +159,7 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
158
159
|
const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;
|
|
159
160
|
return store.subscribe(key, () => {
|
|
160
161
|
const raw = store.get(key, initialVal);
|
|
161
|
-
|
|
162
|
+
setSnapshot(isDerived ? keyOrDef.selector(raw) : raw);
|
|
162
163
|
}, { label });
|
|
163
164
|
}, [key, isDerived, flowOptions?.name, flowOptions?.actor]);
|
|
164
165
|
const toolbox = useMemo(() => {
|
|
@@ -232,7 +233,10 @@ function useFlow(keyOrDef, initial, options) {
|
|
|
232
233
|
cf: flowOptions || {},
|
|
233
234
|
isHydrating: !!store.__hydrating__?.has(key),
|
|
234
235
|
};
|
|
235
|
-
}, [key, isDerived,
|
|
236
|
+
}, [key, isDerived, snapshot, flowOptions]);
|
|
237
|
+
const state = isDerived
|
|
238
|
+
? keyOrDef.selector(store.get(key, initialVal))
|
|
239
|
+
: store.get(key, initialVal);
|
|
236
240
|
return [state, toolbox];
|
|
237
241
|
}
|
|
238
242
|
|
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 const state = store.get(key, initial, flowOptions);\n\n const boundActions = {} as any;\n const defaultOps: FlowOpsObject<T, A> = {\n get self() {\n return createDeepProxy<T, A>(key, [], store.get(key, initial), {\n ...flowOptions,\n actions: boundActions,\n actor: flowOptions?.actor,\n });\n },\n get state() {\n return store.get(key, initial);\n },\n };\n\n const actions = (def as any)?.options?.actions || flowOptions?.actions;\n\n 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 return [state, toolbox];\n}\n\n/**\n * Main hook to consume and interact with a FractoState flow.\n * Returns a tuple containing the current [State, Toolbox].\n */\nexport function useFlow<K extends string, T = any>(\n key: K,\n initial?: T,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, {}>];\n\nexport function useFlow<T, A, C>(\n def: FlowDefinition<T, A, C>,\n options?: UseFlowOptions<T>,\n): [T, FlowOperations<T, A>];\n\nexport function useFlow<T, R>(def: DerivedFlowDefinition<T, R>): [R, {}];\n\nexport function useFlow(\n keyOrDef: any,\n initial?: any,\n options?: any,\n): [any, any] {\n const isDerived = typeof keyOrDef === \"object\" && \"selector\" in keyOrDef;\n const isDef = typeof keyOrDef === \"object\" && \"key\" in keyOrDef && !isDerived;\n\n const key = isDef\n ? (keyOrDef as any).key\n : isDerived\n ? (keyOrDef as any).source.key\n : (keyOrDef as string);\n const initialVal = isDef\n ? (keyOrDef as any).initial\n : isDerived\n ? (keyOrDef as any).source.initial\n : initial;\n const flowOptions = isDef\n ? { ...((keyOrDef as any).options || {}), ...(initial || {}) }\n : isDerived\n ? (keyOrDef as any).source.options\n : options;\n\n const [state, setState] = useState(() => {\n const raw = store.get(key, initialVal, flowOptions);\n return isDerived ? (keyOrDef as any).selector(raw) : raw;\n });\n\n useEffect(() => {\n const label = flowOptions?.name || flowOptions?.actor || `useFlow(${key})`;\n return store.subscribe(\n key,\n () => {\n const raw = store.get(key, initialVal);\n setState(isDerived ? (keyOrDef as any).selector(raw) : raw);\n },\n { label },\n );\n }, [key, isDerived, flowOptions?.name, flowOptions?.actor]);\n\n const toolbox = useMemo(() => {\n if (isDerived) return {};\n\n const boundActions = {} as any;\n const defaultOps: 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, state, flowOptions]);\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 * 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/package.json
CHANGED
package/dist/types-4LME7oGG.d.ts
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
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> {
|
|
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
|
-
store: any;
|
|
42
|
-
}) => T | Promise<T> | undefined;
|
|
43
|
-
/** Return methods that will be exposed under ops.self._[pluginName] */
|
|
44
|
-
getOps?: (ctx: {
|
|
45
|
-
key: string;
|
|
46
|
-
store: any;
|
|
47
|
-
}) => Record<string, Function>;
|
|
48
|
-
}
|
|
49
|
-
interface FlowEffect<T, A = any> {
|
|
50
|
-
/** Function to run on init and when deps change */
|
|
51
|
-
run: (ops: FlowOpsObject<T, A>) => void | Promise<void>;
|
|
52
|
-
/** Optional dependencies selector. If omitted, runs only on init */
|
|
53
|
-
deps?: (state: T) => any[];
|
|
54
|
-
}
|
|
55
|
-
interface FlowOptions<T = any, A = any> {
|
|
56
|
-
timeTravel?: boolean;
|
|
57
|
-
maxHistory?: number;
|
|
58
|
-
debounce?: number;
|
|
59
|
-
middleware?: Array<(state: T) => T>;
|
|
60
|
-
plugins?: FlowPlugin<T>[];
|
|
61
|
-
effects?: FlowEffect<T, A>[];
|
|
62
|
-
force?: boolean;
|
|
63
|
-
skipEquality?: boolean;
|
|
64
|
-
isUndoRedo?: boolean;
|
|
65
|
-
bypassClone?: boolean;
|
|
66
|
-
/** The name of the component or module performing the update */
|
|
67
|
-
actor?: string;
|
|
68
|
-
/** Raw actions dictionary for internal binding */
|
|
69
|
-
actions?: A;
|
|
70
|
-
}
|
|
71
|
-
interface ContextGetterOps<T, A> {
|
|
72
|
-
state: T;
|
|
73
|
-
initialState: T;
|
|
74
|
-
actions: BoundActions<A>;
|
|
75
|
-
ops: FlowOpsObject<T, A>;
|
|
76
|
-
}
|
|
77
|
-
interface UseFlowOptions<T> extends FlowOptions<T> {
|
|
78
|
-
name?: string;
|
|
79
|
-
}
|
|
80
|
-
interface FlowDefinition<T, A = {}, C = undefined> {
|
|
81
|
-
key: string;
|
|
82
|
-
initial: T;
|
|
83
|
-
options?: FlowOptions<T, A> & {
|
|
84
|
-
actions?: A;
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
interface DerivedFlowDefinition<T, R> {
|
|
88
|
-
key: string;
|
|
89
|
-
source: FlowDefinition<T, any>;
|
|
90
|
-
selector: (state: T) => R;
|
|
91
|
-
}
|
|
92
|
-
interface FlowOperations<T, A = {}> {
|
|
93
|
-
/** The operation object for recursive state manipulation via proxies */
|
|
94
|
-
ops: FlowOpsObject<T, A>;
|
|
95
|
-
/** The actions defined in defineFlow, bound to this specific state instance */
|
|
96
|
-
actions: BoundActions<A>;
|
|
97
|
-
/** Reverts to the previous state in history (if timeTravel is enabled) */
|
|
98
|
-
_undo: () => void;
|
|
99
|
-
/** Reapplies a previously undone state (if timeTravel is enabled) */
|
|
100
|
-
_redo: () => void;
|
|
101
|
-
/** Returns the full history stack for this flow */
|
|
102
|
-
history: T[];
|
|
103
|
-
/** Boolean indicating if an undo operation is currently possible */
|
|
104
|
-
_canUndo: boolean;
|
|
105
|
-
/** Boolean indicating if a redo operation is currently possible */
|
|
106
|
-
_canRedo: boolean;
|
|
107
|
-
/** Forcefully updates the state and records history even if values are identical. Useful for triggering effects or manual snapshots. */
|
|
108
|
-
_set: (val: T | ((prev: T) => T)) => void;
|
|
109
|
-
/** Optimized update: only commits the change if the new value differs from the current one. Saves history space and render cycles. */
|
|
110
|
-
_patch: (val: T | ((prev: T) => T)) => void;
|
|
111
|
-
/** Resets the state back to its initial defined configuration */
|
|
112
|
-
_reset: () => void;
|
|
113
|
-
/** Returns the current flow configuration options */
|
|
114
|
-
cf: FlowOptions<T>;
|
|
115
|
-
/** Boolean indicating if the flow is currently loading data from a hydration plugin (e.g., localStorage) */
|
|
116
|
-
isHydrating: boolean;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Common operations available on every state node.
|
|
120
|
-
* Prefixed with underscores to avoid collisions with your nested data properties.
|
|
121
|
-
*/
|
|
122
|
-
type BaseOps<T, A = any> = {
|
|
123
|
-
/** Forcefully replace the value at this path, ignoring equality checks. Records history. */
|
|
124
|
-
_set: (value: T) => void;
|
|
125
|
-
/** Smart update: only commits the change if the value is different. */
|
|
126
|
-
_patch: (value: T) => void;
|
|
127
|
-
/** Unwraps the proxy and returns the raw value at this specific tree path. */
|
|
128
|
-
_val: T;
|
|
129
|
-
/** Access all actions defined in this flow */
|
|
130
|
-
__actions__: BoundActions<A>;
|
|
131
|
-
/** Persistence control (provided by persist plugin) */
|
|
132
|
-
_persist?: {
|
|
133
|
-
clear: () => void;
|
|
134
|
-
update: () => void;
|
|
135
|
-
refresh: () => Promise<void>;
|
|
136
|
-
};
|
|
137
|
-
};
|
|
138
|
-
/** Operations specific to numeric values */
|
|
139
|
-
type NumberOps<A = any> = BaseOps<number, A> & {
|
|
140
|
-
/** Increment by n (default 1) */
|
|
141
|
-
_increment: (n?: number) => void;
|
|
142
|
-
/** Decrement by n (default 1) */
|
|
143
|
-
_decrement: (n?: number) => void;
|
|
144
|
-
/** Add n to the value */
|
|
145
|
-
_add: (n: number) => void;
|
|
146
|
-
/** Subtract n from the value */
|
|
147
|
-
_subtract: (n: number) => void;
|
|
148
|
-
/** Multiply the value by n */
|
|
149
|
-
_multiply: (n: number) => void;
|
|
150
|
-
/** Divide the value by n */
|
|
151
|
-
_divide: (n: number) => void;
|
|
152
|
-
};
|
|
153
|
-
/** Operations specific to string values */
|
|
154
|
-
type StringOps<A = any> = BaseOps<string, A> & {
|
|
155
|
-
/** Append a string at the end */
|
|
156
|
-
_append: (s: string) => void;
|
|
157
|
-
/** Prepend a string at the beginning */
|
|
158
|
-
_prepend: (s: string) => void;
|
|
159
|
-
/** Convert value to uppercase */
|
|
160
|
-
_uppercase: () => void;
|
|
161
|
-
/** Convert value to lowercase */
|
|
162
|
-
_lowercase: () => void;
|
|
163
|
-
/** Trim whitespace from both ends */
|
|
164
|
-
_trim: () => void;
|
|
165
|
-
/** Replace occurrences matching pattern */
|
|
166
|
-
_replace: (pattern: string | RegExp, replacement: string) => void;
|
|
167
|
-
};
|
|
168
|
-
/** Operations specific to array values */
|
|
169
|
-
type ArrayOps<T, A = any> = BaseOps<T[], A> & {
|
|
170
|
-
/** Add an item to the end of the array */
|
|
171
|
-
_push: (v: T) => void;
|
|
172
|
-
/** Remove and return the last item */
|
|
173
|
-
_pop: () => void;
|
|
174
|
-
/** Remove and return the first item */
|
|
175
|
-
_shift: () => void;
|
|
176
|
-
/** Add an item to the beginning of the array */
|
|
177
|
-
_unshift: (v: T) => void;
|
|
178
|
-
/** Keep only items matching the condition */
|
|
179
|
-
_filter: (fn: (v: T, i: number) => boolean) => void;
|
|
180
|
-
/** Transform every item in the array */
|
|
181
|
-
_map: (fn: (v: T, i: number) => T) => void;
|
|
182
|
-
/** Remove item at a specific index */
|
|
183
|
-
_removeAt: (i: number) => void;
|
|
184
|
-
/** Insert an item at a specific index */
|
|
185
|
-
_insertAt: (i: number, v: T) => void;
|
|
186
|
-
};
|
|
187
|
-
/** Operations specific to object values */
|
|
188
|
-
type ObjectOps<T, A = any> = BaseOps<T, A> & {
|
|
189
|
-
/** Shallow merge the provided object into the current state */
|
|
190
|
-
_merge: (p: Partial<NonNullable<T>>) => void;
|
|
191
|
-
/** Remove a specific key from the object */
|
|
192
|
-
_delete: (k: keyof NonNullable<T>) => void;
|
|
193
|
-
} & {
|
|
194
|
-
[K in keyof NonNullable<T>]-?: TypeAwareOps<NonNullable<T>[K], A>;
|
|
195
|
-
};
|
|
196
|
-
type BooleanOps<A = any> = BaseOps<boolean, A> & {
|
|
197
|
-
_toggle: () => void;
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
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 };
|