@zag-js/core
Advanced tools
Comparing version 0.0.0-dev-20220526103846 to 0.0.0-dev-20220526115355
import { StateMachine as S } from "./types"; | ||
declare function or<TContext, TEvent extends S.EventObject>(...conditions: Array<S.Guard<TContext, TEvent>>): S.GuardHelper<TContext, TEvent>; | ||
declare function and<TContext, TEvent extends S.EventObject>(...conditions: Array<S.Guard<TContext, TEvent>>): S.GuardHelper<TContext, TEvent>; | ||
declare function not<TContext, TEvent extends S.EventObject>(condition: S.Guard<TContext, TEvent>): S.GuardHelper<TContext, TEvent>; | ||
declare function or<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(...conditions: Array<S.Guard<TContext, TState, TEvent>>): S.GuardHelper<TContext, TState, TEvent>; | ||
declare function and<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(...conditions: Array<S.Guard<TContext, TState, TEvent>>): S.GuardHelper<TContext, TState, TEvent>; | ||
declare function not<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(condition: S.Guard<TContext, TState, TEvent>): S.GuardHelper<TContext, TState, TEvent>; | ||
declare function isIn<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(...values: TState["value"][]): S.GuardExpression<TContext, TState, TEvent>; | ||
export declare const guards: { | ||
@@ -9,10 +10,11 @@ or: typeof or; | ||
not: typeof not; | ||
isIn: typeof isIn; | ||
}; | ||
export declare function choose<TContext, TState extends S.StateSchema, TEvent extends S.EventObject = S.AnyEventObject>(actions: Array<{ | ||
guard?: S.Guard<TContext, TEvent>; | ||
guard?: S.Guard<TContext, TState, TEvent>; | ||
actions: S.PureActions<TContext, TState, TEvent>; | ||
}>): S.ChooseHelper<TContext, TState, TEvent>; | ||
export declare function determineGuardFn<TContext, TEvent extends S.EventObject>(guard: S.Guard<TContext, TEvent> | undefined, guardMap: S.GuardMap<TContext, TEvent>): (context: TContext, event: TEvent) => boolean; | ||
export declare function determineActionsFn<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(values: S.Actions<TContext, TState, TEvent> | undefined, guardMap: S.GuardMap<TContext, TEvent>): (context: TContext, event: TEvent) => string | S.ExpressionWithMeta<TContext, TState, TEvent, void> | S.Action<TContext, TState, TEvent>[]; | ||
export declare function determineGuardFn<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(guard: S.Guard<TContext, TState, TEvent> | undefined, guardMap: S.GuardMap<TContext, TState, TEvent>): (context: TContext, event: TEvent, meta: S.GuardMeta<TContext, TState, TEvent>) => boolean; | ||
export declare function determineActionsFn<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(values: S.Actions<TContext, TState, TEvent> | undefined, guardMap: S.GuardMap<TContext, TState, TEvent>): (context: TContext, event: TEvent, meta: S.GuardMeta<TContext, TState, TEvent>) => string | S.ExpressionWithMeta<TContext, TState, TEvent, void> | S.Action<TContext, TState, TEvent>[]; | ||
export {}; | ||
//# sourceMappingURL=guard-utils.d.ts.map |
@@ -5,4 +5,4 @@ export { proxy, ref, snapshot, subscribe } from "valtio/vanilla"; | ||
export { mergeProps } from "./merge-props"; | ||
export type { StateFrom, ContextFrom, ServiceFrom, EventFrom } from "./type-utils"; | ||
export type { StateFrom, ContextFrom, EventFrom } from "./type-utils"; | ||
export type { StateMachine } from "./types"; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -124,12 +124,12 @@ var __defProp = Object.defineProperty; | ||
var Truthy = () => true; | ||
function exec(guardMap, ctx, event) { | ||
function exec(guardMap, ctx, event, meta) { | ||
return (guard) => { | ||
var _a; | ||
if (isString(guard)) { | ||
return !!((_a = guardMap[guard]) == null ? void 0 : _a.call(guardMap, ctx, event)); | ||
return !!((_a = guardMap[guard]) == null ? void 0 : _a.call(guardMap, ctx, event, meta)); | ||
} | ||
if (isFunction(guard)) { | ||
return guard(ctx, event); | ||
return guard(ctx, event, meta); | ||
} | ||
return guard.predicate(guardMap)(ctx, event); | ||
return guard.predicate(guardMap)(ctx, event, meta); | ||
}; | ||
@@ -139,3 +139,3 @@ } | ||
return { | ||
predicate: (guardMap) => (ctx, event) => conditions.map(exec(guardMap, ctx, event)).some(Boolean) | ||
predicate: (guardMap) => (ctx, event, meta) => conditions.map(exec(guardMap, ctx, event, meta)).some(Boolean) | ||
}; | ||
@@ -145,3 +145,3 @@ } | ||
return { | ||
predicate: (guardMap) => (ctx, event) => conditions.map(exec(guardMap, ctx, event)).every(Boolean) | ||
predicate: (guardMap) => (ctx, event, meta) => conditions.map(exec(guardMap, ctx, event, meta)).every(Boolean) | ||
}; | ||
@@ -151,11 +151,14 @@ } | ||
return { | ||
predicate: (guardMap) => (ctx, event) => { | ||
return !exec(guardMap, ctx, event)(condition); | ||
predicate: (guardMap) => (ctx, event, meta) => { | ||
return !exec(guardMap, ctx, event, meta)(condition); | ||
} | ||
}; | ||
} | ||
var guards = { or, and, not }; | ||
function isIn(...values) { | ||
return (_ctx, _evt, meta) => meta.state.matches(...values); | ||
} | ||
var guards = { or, and, not, isIn }; | ||
function choose(actions) { | ||
return { | ||
predicate: (guardMap) => (ctx, event) => { | ||
predicate: (guardMap) => (ctx, event, meta) => { | ||
var _a; | ||
@@ -165,3 +168,3 @@ return (_a = actions.find((def) => { | ||
const guard = (_a2 = def.guard) != null ? _a2 : Truthy; | ||
return exec(guardMap, ctx, event)(guard); | ||
return exec(guardMap, ctx, event, meta)(guard); | ||
})) == null ? void 0 : _a.actions; | ||
@@ -173,17 +176,17 @@ } | ||
guard = guard != null ? guard : Truthy; | ||
return (context, event) => { | ||
return (context, event, meta) => { | ||
if (isString(guard)) { | ||
const value = guardMap[guard]; | ||
return isFunction(value) ? value(context, event) : value; | ||
return isFunction(value) ? value(context, event, meta) : value; | ||
} | ||
if (isGuardHelper(guard)) { | ||
return guard.predicate(guardMap)(context, event); | ||
return guard.predicate(guardMap)(context, event, meta); | ||
} | ||
return guard == null ? void 0 : guard(context, event); | ||
return guard == null ? void 0 : guard(context, event, meta); | ||
}; | ||
} | ||
function determineActionsFn(values, guardMap) { | ||
return (context, event) => { | ||
return (context, event, meta) => { | ||
if (isGuardHelper(values)) { | ||
return values.predicate(guardMap)(context, event); | ||
return values.predicate(guardMap)(context, event, meta); | ||
} | ||
@@ -263,7 +266,7 @@ return values; | ||
function determineTransitionFn(transitions, guardMap) { | ||
return (context, event) => { | ||
return (context, event, meta) => { | ||
return toArray(transitions).map(toTarget).find((transition) => { | ||
var _a; | ||
const determineGuard = determineGuardFn(transition.guard, guardMap); | ||
const guard = determineGuard(context, event); | ||
const guard = determineGuard(context, event, meta); | ||
return (_a = guard != null ? guard : transition.target) != null ? _a : transition.actions; | ||
@@ -535,3 +538,3 @@ }); | ||
var _a; | ||
const _actions = determineActionsFn(actions, this.guardMap)(this.contextSnapshot, event); | ||
const _actions = determineActionsFn(actions, this.guardMap)(this.contextSnapshot, event, this.guardMeta); | ||
for (const action of toArray(_actions)) { | ||
@@ -566,3 +569,3 @@ const fn = isString(action) ? (_a = this.actionMap) == null ? void 0 : _a[action] : action; | ||
const determineGuard = determineGuardFn(t.guard, this.guardMap); | ||
const guard = determineGuard(this.contextSnapshot, event); | ||
const guard = determineGuard(this.contextSnapshot, event, this.guardMeta); | ||
return guard != null ? guard : t.delay; | ||
@@ -607,3 +610,3 @@ }); | ||
this.stopActivities(currentState); | ||
const _exit = determineActionsFn(stateNode == null ? void 0 : stateNode.exit, this.guardMap)(this.contextSnapshot, event); | ||
const _exit = determineActionsFn(stateNode == null ? void 0 : stateNode.exit, this.guardMap)(this.contextSnapshot, event, this.guardMeta); | ||
const exitActions = toArray(_exit); | ||
@@ -626,3 +629,3 @@ const afterExitActions = this.delayedEvents.get(currentState); | ||
} | ||
const _entry = determineActionsFn(stateNode == null ? void 0 : stateNode.entry, this.guardMap)(this.contextSnapshot, event); | ||
const _entry = determineActionsFn(stateNode == null ? void 0 : stateNode.entry, this.guardMap)(this.contextSnapshot, event, this.guardMeta); | ||
const entryActions = toArray(_entry); | ||
@@ -663,3 +666,3 @@ const afterActions = this.getDelayedEventActions(next); | ||
const fn = determineTransitionFn(transition, this.guardMap); | ||
return fn == null ? void 0 : fn(this.contextSnapshot, event); | ||
return fn == null ? void 0 : fn(this.contextSnapshot, event, this.guardMeta); | ||
}; | ||
@@ -765,2 +768,7 @@ this.sendParent = (evt) => { | ||
} | ||
get guardMeta() { | ||
return { | ||
state: this.stateSnapshot | ||
}; | ||
} | ||
get [Symbol.toStringTag]() { | ||
@@ -767,0 +775,0 @@ return "Machine"; |
@@ -73,2 +73,3 @@ import { Dict, MachineStatus, MachineType, StateMachine as S, Writable } from "./types"; | ||
private get meta(); | ||
private get guardMeta(); | ||
/** | ||
@@ -75,0 +76,0 @@ * Function to executes defined actions. It can accept actions as string |
@@ -13,4 +13,4 @@ import type { StateMachine as S } from "./types"; | ||
export declare function toTarget<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(target: S.Transition<TContext, TState, TEvent>): S.TransitionDefinition<TContext, TState, TEvent>; | ||
export declare function determineTransitionFn<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(transitions: S.Transitions<TContext, TState, TEvent> | undefined, guardMap: S.GuardMap<TContext, TEvent>): (context: TContext, event: TEvent) => S.TransitionDefinition<TContext, TState, TEvent>; | ||
export declare function determineTransitionFn<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(transitions: S.Transitions<TContext, TState, TEvent> | undefined, guardMap: S.GuardMap<TContext, TState, TEvent>): (context: TContext, event: TEvent, meta: S.GuardMeta<TContext, TState, TEvent>) => S.TransitionDefinition<TContext, TState, TEvent>; | ||
export declare function toTransition<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(transition: S.Transitions<TContext, TState, TEvent> | undefined, current?: TState["value"] | null): S.TransitionDefinition<TContext, TState, TEvent> | S.TransitionDefinition<TContext, TState, TEvent>[]; | ||
//# sourceMappingURL=transition-utils.d.ts.map |
@@ -41,3 +41,3 @@ export declare type Dict<T = any> = Record<string, T>; | ||
getAction: (key: string) => ExpressionWithMeta<TContext, TState, TEvent, void>; | ||
getGuard: (key: string) => GuardExpression<TContext, TEvent>; | ||
getGuard: (key: string) => GuardExpression<TContext, TState, TEvent>; | ||
}; | ||
@@ -59,3 +59,3 @@ type ExpressionWithMeta<TContext extends Dict, TState extends StateSchema, TEvent extends EventObject, TReturn> = (context: TContext, event: TEvent, meta: Meta<TContext, TState, TEvent>) => TReturn; | ||
actions?: Actions<TContext, TState, TEvent>; | ||
guard?: Guard<TContext, TEvent>; | ||
guard?: Guard<TContext, TState, TEvent>; | ||
}; | ||
@@ -129,15 +129,18 @@ type DelayExpression<TContext, TEvent extends EventObject> = Expression<TContext, TEvent, number>; | ||
actions: Actions<TContext, TState, TEvent>; | ||
guard?: Guard<TContext, TEvent>; | ||
guard?: Guard<TContext, TState, TEvent>; | ||
}>; | ||
} | ||
type GuardExpression<TContext, TEvent extends EventObject> = Expression<TContext, TEvent, boolean>; | ||
type GuardHelper<TContext extends Dict, TEvent extends EventObject> = { | ||
predicate: (guards: Dict) => GuardExpression<TContext, TEvent>; | ||
type GuardMeta<TContext extends Dict, TState extends StateSchema, TEvent extends EventObject> = { | ||
state: State<TContext, TState, TEvent>; | ||
}; | ||
type GuardExpression<TContext, TState extends StateSchema, TEvent extends EventObject, TReturn = boolean> = (context: TContext, event: TEvent, guardMeta: GuardMeta<TContext, TState, TEvent>) => TReturn; | ||
type GuardHelper<TContext extends Dict, TState extends StateSchema, TEvent extends EventObject> = { | ||
predicate: (guards: Dict) => GuardExpression<TContext, TState, TEvent>; | ||
}; | ||
type ChooseHelper<TContext extends Dict, TState extends StateSchema, TEvent extends EventObject> = { | ||
predicate: (guards: Dict) => Expression<TContext, TEvent, PureActions<TContext, TState, TEvent> | undefined>; | ||
predicate: (guards: Dict) => GuardExpression<TContext, TState, TEvent, PureActions<TContext, TState, TEvent> | undefined>; | ||
}; | ||
type Guard<TContext extends Dict, TEvent extends EventObject> = string | GuardExpression<TContext, TEvent> | GuardHelper<TContext, TEvent>; | ||
type GuardMap<TContext extends Dict, TEvent extends EventObject> = { | ||
[guard: string]: GuardExpression<TContext, TEvent>; | ||
type Guard<TContext extends Dict, TState extends StateSchema, TEvent extends EventObject> = string | GuardExpression<TContext, TState, TEvent> | GuardHelper<TContext, TState, TEvent>; | ||
type GuardMap<TContext extends Dict, TState extends StateSchema, TEvent extends EventObject> = { | ||
[guard: string]: GuardExpression<TContext, TState, TEvent>; | ||
}; | ||
@@ -228,3 +231,3 @@ type StateSchema = { | ||
interface MachineOptions<TContext extends Dict, TState extends StateSchema, TEvent extends EventObject> { | ||
guards?: GuardMap<TContext, TEvent>; | ||
guards?: GuardMap<TContext, TState, TEvent>; | ||
actions?: ActionMap<TContext, TState, TEvent>; | ||
@@ -231,0 +234,0 @@ delays?: DelayMap<TContext, TEvent>; |
@@ -1,8 +0,8 @@ | ||
import type { StateMachine as S } from "./types"; | ||
import type { Dict, StateMachine as S } from "./types"; | ||
export declare function toEvent<T extends S.EventObject>(event: S.Event<T>): T; | ||
export declare function toArray<T>(value: T | T[] | undefined): T[]; | ||
export declare function isGuardHelper(value: any): value is { | ||
predicate: Function; | ||
predicate: (guards: Dict) => any; | ||
}; | ||
export declare function subscribeKey<T extends object, K extends keyof T>(obj: T, key: K, fn: (value: T[K]) => void, sync?: boolean): () => void; | ||
//# sourceMappingURL=utils.d.ts.map |
{ | ||
"name": "@zag-js/core", | ||
"version": "0.0.0-dev-20220526103846", | ||
"version": "0.0.0-dev-20220526115355", | ||
"description": "A minimal implementation of xstate fsm for UI machines", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
230340
2027