@xstate/graph
Advanced tools
Comparing version 1.4.0 to 1.4.1
# @xstate/graph | ||
## 1.4.1 | ||
### Patch Changes | ||
- [#2957](https://github.com/statelyai/xstate/pull/2957) [`8550ddda7`](https://github.com/statelyai/xstate/commit/8550ddda73e2ad291e19173d7fa8d13e3336fbb9) Thanks [@davidkpiano](https://github.com/davidkpiano)! - The repository links have been updated from `github.com/davidkpiano` to `github.com/statelyai`. | ||
## 1.4.0 | ||
@@ -13,3 +19,3 @@ | ||
- [`111a7d13`](https://github.com/davidkpiano/xstate/commit/111a7d138db909e969629a3c237b952850c008ca) [#1663](https://github.com/davidkpiano/xstate/pull/1663) Thanks [@davidkpiano](https://github.com/davidkpiano)! - Options passed into graph functions (e.g., `getShortestPaths(machine, options)`) can now resolve `.events` based on the `state`: | ||
- [`111a7d13`](https://github.com/statelyai/xstate/commit/111a7d138db909e969629a3c237b952850c008ca) [#1663](https://github.com/statelyai/xstate/pull/1663) Thanks [@davidkpiano](https://github.com/statelyai)! - Options passed into graph functions (e.g., `getShortestPaths(machine, options)`) can now resolve `.events` based on the `state`: | ||
@@ -62,3 +68,3 @@ ```js | ||
- [`142f54e1`](https://github.com/davidkpiano/xstate/commit/142f54e1238919a53c73a40723c415b0044774bb) [#1366](https://github.com/davidkpiano/xstate/pull/1366) Thanks [@davidkpiano](https://github.com/davidkpiano)! - The `toDirectedGraph(...)` function was added, which converts a `machine` into an object that can be used in many different graph-based and visualization tools: | ||
- [`142f54e1`](https://github.com/statelyai/xstate/commit/142f54e1238919a53c73a40723c415b0044774bb) [#1366](https://github.com/statelyai/xstate/pull/1366) Thanks [@davidkpiano](https://github.com/statelyai)! - The `toDirectedGraph(...)` function was added, which converts a `machine` into an object that can be used in many different graph-based and visualization tools: | ||
@@ -92,7 +98,7 @@ ```js | ||
- [`137b0cd`](https://github.com/davidkpiano/xstate/commit/137b0cdf71054d67f0c5ba2c11021436ec3739ed) [#1033](https://github.com/davidkpiano/xstate/pull/1033) Thanks [@ZempTime](https://github.com/ZempTime)! - Added ESM build of the package which can be loaded through modern web bundlers (instead of default CommonJS files). | ||
- [`137b0cd`](https://github.com/statelyai/xstate/commit/137b0cdf71054d67f0c5ba2c11021436ec3739ed) [#1033](https://github.com/statelyai/xstate/pull/1033) Thanks [@ZempTime](https://github.com/ZempTime)! - Added ESM build of the package which can be loaded through modern web bundlers (instead of default CommonJS files). | ||
### Patch Changes | ||
- Updated dependencies [[`f3ff150`](https://github.com/davidkpiano/xstate/commit/f3ff150f7c50f402704d25cdc053b76836e447e3), [`6c47b66`](https://github.com/davidkpiano/xstate/commit/6c47b66c3289ff161dc96d9b246873f55c9e18f2), [`1a129f0`](https://github.com/davidkpiano/xstate/commit/1a129f0f35995981c160d756a570df76396bfdbd), [`e88aa18`](https://github.com/davidkpiano/xstate/commit/e88aa18431629e1061b74dfd4a961b910e274e0b), [`88b17b2`](https://github.com/davidkpiano/xstate/commit/88b17b2476ff9a0fbe810df9d00db32c2241cd6e), [`d5f622f`](https://github.com/davidkpiano/xstate/commit/d5f622f68f4065a2615b5a4a1caae6b508b4840e)]: | ||
- Updated dependencies [[`f3ff150`](https://github.com/statelyai/xstate/commit/f3ff150f7c50f402704d25cdc053b76836e447e3), [`6c47b66`](https://github.com/statelyai/xstate/commit/6c47b66c3289ff161dc96d9b246873f55c9e18f2), [`1a129f0`](https://github.com/statelyai/xstate/commit/1a129f0f35995981c160d756a570df76396bfdbd), [`e88aa18`](https://github.com/statelyai/xstate/commit/e88aa18431629e1061b74dfd4a961b910e274e0b), [`88b17b2`](https://github.com/statelyai/xstate/commit/88b17b2476ff9a0fbe810df9d00db32c2241cd6e), [`d5f622f`](https://github.com/statelyai/xstate/commit/d5f622f68f4065a2615b5a4a1caae6b508b4840e)]: | ||
- xstate@4.9.0 |
import { StateNode, State, DefaultContext, Event, EventObject, StateMachine, AnyEventObject } from 'xstate'; | ||
import { StatePath } from '.'; | ||
import { StatePathsMap, StatePaths, AdjacencyMap, ValueAdjMapOptions, DirectedGraphNode } from './types'; | ||
import { StatePathsMap, StatePaths, AdjacencyMap, ValueAdjMapOptions, DirectedGraphNode, AnyStateNode, StatePath } from './types'; | ||
export declare function toEventObject<TEvent extends EventObject>(event: Event<TEvent>): TEvent; | ||
@@ -9,13 +8,13 @@ /** | ||
*/ | ||
export declare function getStateNodes(stateNode: StateNode | StateMachine<any, any, any>): StateNode[]; | ||
export declare function getChildren(stateNode: StateNode): StateNode[]; | ||
export declare function getStateNodes(stateNode: AnyStateNode | StateMachine<any, any, any, any, any, any, any>): AnyStateNode[]; | ||
export declare function getChildren(stateNode: AnyStateNode): AnyStateNode[]; | ||
export declare function serializeState<TContext>(state: State<TContext, any>): string; | ||
export declare function serializeEvent<TEvent extends EventObject>(event: TEvent): string; | ||
export declare function deserializeEventString<TEvent extends EventObject>(eventString: string): TEvent; | ||
export declare function getAdjacencyMap<TContext = DefaultContext, TEvent extends EventObject = AnyEventObject>(node: StateNode<TContext, any, TEvent> | StateMachine<TContext, any, TEvent>, options?: ValueAdjMapOptions<TContext, TEvent>): AdjacencyMap<TContext, TEvent>; | ||
export declare function getShortestPaths<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent>, options?: ValueAdjMapOptions<TContext, TEvent>): StatePathsMap<TContext, TEvent>; | ||
export declare function getSimplePaths<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent>, options?: ValueAdjMapOptions<TContext, TEvent>): StatePathsMap<TContext, TEvent>; | ||
export declare function getSimplePathsAsArray<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateNode<TContext, any, TEvent>, options?: ValueAdjMapOptions<TContext, TEvent>): Array<StatePaths<TContext, TEvent>>; | ||
export declare function toDirectedGraph(stateNode: StateNode): DirectedGraphNode; | ||
export declare function getPathFromEvents<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent>, events: Array<TEvent>): StatePath<TContext, TEvent>; | ||
export declare function getAdjacencyMap<TContext = DefaultContext, TEvent extends EventObject = AnyEventObject>(node: StateNode<TContext, any, TEvent, any, any, any> | StateMachine<TContext, any, TEvent, any, any, any, any>, options?: ValueAdjMapOptions<TContext, TEvent>): AdjacencyMap<TContext, TEvent>; | ||
export declare function getShortestPaths<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent, any, any, any, any>, options?: ValueAdjMapOptions<TContext, TEvent>): StatePathsMap<TContext, TEvent>; | ||
export declare function getSimplePaths<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent, any, any, any, any>, options?: ValueAdjMapOptions<TContext, TEvent>): StatePathsMap<TContext, TEvent>; | ||
export declare function getSimplePathsAsArray<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent, any, any, any, any>, options?: ValueAdjMapOptions<TContext, TEvent>): Array<StatePaths<TContext, TEvent>>; | ||
export declare function toDirectedGraph(stateNode: AnyStateNode | StateMachine<any, any, any, any, any, any, any>): DirectedGraphNode; | ||
export declare function getPathFromEvents<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent, any, any, any, any>, events: Array<TEvent>): StatePath<TContext, TEvent>; | ||
//# sourceMappingURL=graph.d.ts.map |
@@ -28,6 +28,10 @@ var __assign = (this && this.__assign) || function () { | ||
}; | ||
var __spreadArray = (this && this.__spreadArray) || function (to, from) { | ||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) | ||
to[j] = from[i]; | ||
return to; | ||
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { | ||
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { | ||
if (ar || !(i in from)) { | ||
if (!ar) ar = Array.prototype.slice.call(from, 0, i); | ||
ar[i] = from[i]; | ||
} | ||
} | ||
return to.concat(ar || Array.prototype.slice.call(from)); | ||
}; | ||
@@ -62,3 +66,3 @@ var __values = (this && this.__values) || function(o) { | ||
var childStateNodes = getStateNodes(childStateNode); | ||
accNodes.push.apply(accNodes, __spreadArray([childStateNode], __read(childStateNodes))); | ||
accNodes.push.apply(accNodes, __spreadArray([childStateNode], __read(childStateNodes), false)); | ||
return accNodes; | ||
@@ -129,3 +133,3 @@ }, []); | ||
catch (e) { | ||
throw new Error("Unable to transition from state " + stateSerializer(state) + " on event " + eventSerializer(event_1) + ": " + e.message); | ||
throw new Error("Unable to transition from state ".concat(stateSerializer(state), " on event ").concat(eventSerializer(event_1), ": ").concat(e.message)); | ||
} | ||
@@ -268,3 +272,3 @@ if ((!filter || filter(nextState)) && | ||
weight: path.length, | ||
segments: __spreadArray([], __read(path)) | ||
segments: __spreadArray([], __read(path), false) | ||
}); | ||
@@ -328,3 +332,3 @@ } | ||
var edge = { | ||
id: stateNode.id + ":" + transitionIndex + ":" + targetIndex, | ||
id: "".concat(stateNode.id, ":").concat(transitionIndex, ":").concat(targetIndex), | ||
source: stateNode, | ||
@@ -348,3 +352,3 @@ target: target, | ||
stateNode: stateNode, | ||
children: getChildren(stateNode).map(function (sn) { return toDirectedGraph(sn); }), | ||
children: getChildren(stateNode).map(toDirectedGraph), | ||
edges: edges, | ||
@@ -394,3 +398,3 @@ toJSON: function () { | ||
if (!nextSegment) { | ||
throw new Error("Invalid transition from " + stateSerial + " with " + eventSerial); | ||
throw new Error("Invalid transition from ".concat(stateSerial, " with ").concat(eventSerial)); | ||
} | ||
@@ -397,0 +401,0 @@ var nextStateSerial = stateSerializer(nextSegment.state); |
import { State, EventObject, StateValue, StateNode, TransitionDefinition } from 'xstate'; | ||
export declare type AnyStateNode = StateNode<any, any, any, any, any>; | ||
export interface TransitionMap { | ||
@@ -15,4 +16,4 @@ state: StateValue | undefined; | ||
id: string; | ||
source: StateNode; | ||
target: StateNode; | ||
source: AnyStateNode; | ||
target: AnyStateNode; | ||
label: DirectedGraphLabel; | ||
@@ -19,0 +20,0 @@ transition: TransitionDefinition<any, any>; |
import { StateNode, State, DefaultContext, Event, EventObject, StateMachine, AnyEventObject } from 'xstate'; | ||
import { StatePath } from '.'; | ||
import { StatePathsMap, StatePaths, AdjacencyMap, ValueAdjMapOptions, DirectedGraphNode } from './types'; | ||
import { StatePathsMap, StatePaths, AdjacencyMap, ValueAdjMapOptions, DirectedGraphNode, AnyStateNode, StatePath } from './types'; | ||
export declare function toEventObject<TEvent extends EventObject>(event: Event<TEvent>): TEvent; | ||
@@ -9,13 +8,13 @@ /** | ||
*/ | ||
export declare function getStateNodes(stateNode: StateNode | StateMachine<any, any, any>): StateNode[]; | ||
export declare function getChildren(stateNode: StateNode): StateNode[]; | ||
export declare function getStateNodes(stateNode: AnyStateNode | StateMachine<any, any, any, any, any, any, any>): AnyStateNode[]; | ||
export declare function getChildren(stateNode: AnyStateNode): AnyStateNode[]; | ||
export declare function serializeState<TContext>(state: State<TContext, any>): string; | ||
export declare function serializeEvent<TEvent extends EventObject>(event: TEvent): string; | ||
export declare function deserializeEventString<TEvent extends EventObject>(eventString: string): TEvent; | ||
export declare function getAdjacencyMap<TContext = DefaultContext, TEvent extends EventObject = AnyEventObject>(node: StateNode<TContext, any, TEvent> | StateMachine<TContext, any, TEvent>, options?: ValueAdjMapOptions<TContext, TEvent>): AdjacencyMap<TContext, TEvent>; | ||
export declare function getShortestPaths<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent>, options?: ValueAdjMapOptions<TContext, TEvent>): StatePathsMap<TContext, TEvent>; | ||
export declare function getSimplePaths<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent>, options?: ValueAdjMapOptions<TContext, TEvent>): StatePathsMap<TContext, TEvent>; | ||
export declare function getSimplePathsAsArray<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateNode<TContext, any, TEvent>, options?: ValueAdjMapOptions<TContext, TEvent>): Array<StatePaths<TContext, TEvent>>; | ||
export declare function toDirectedGraph(stateNode: StateNode): DirectedGraphNode; | ||
export declare function getPathFromEvents<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent>, events: Array<TEvent>): StatePath<TContext, TEvent>; | ||
export declare function getAdjacencyMap<TContext = DefaultContext, TEvent extends EventObject = AnyEventObject>(node: StateNode<TContext, any, TEvent, any, any, any> | StateMachine<TContext, any, TEvent, any, any, any, any>, options?: ValueAdjMapOptions<TContext, TEvent>): AdjacencyMap<TContext, TEvent>; | ||
export declare function getShortestPaths<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent, any, any, any, any>, options?: ValueAdjMapOptions<TContext, TEvent>): StatePathsMap<TContext, TEvent>; | ||
export declare function getSimplePaths<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent, any, any, any, any>, options?: ValueAdjMapOptions<TContext, TEvent>): StatePathsMap<TContext, TEvent>; | ||
export declare function getSimplePathsAsArray<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent, any, any, any, any>, options?: ValueAdjMapOptions<TContext, TEvent>): Array<StatePaths<TContext, TEvent>>; | ||
export declare function toDirectedGraph(stateNode: AnyStateNode | StateMachine<any, any, any, any, any, any, any>): DirectedGraphNode; | ||
export declare function getPathFromEvents<TContext = DefaultContext, TEvent extends EventObject = EventObject>(machine: StateMachine<TContext, any, TEvent, any, any, any, any>, events: Array<TEvent>): StatePath<TContext, TEvent>; | ||
//# sourceMappingURL=graph.d.ts.map |
@@ -29,6 +29,10 @@ "use strict"; | ||
}; | ||
var __spreadArray = (this && this.__spreadArray) || function (to, from) { | ||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) | ||
to[j] = from[i]; | ||
return to; | ||
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { | ||
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { | ||
if (ar || !(i in from)) { | ||
if (!ar) ar = Array.prototype.slice.call(from, 0, i); | ||
ar[i] = from[i]; | ||
} | ||
} | ||
return to.concat(ar || Array.prototype.slice.call(from)); | ||
}; | ||
@@ -63,6 +67,6 @@ var __values = (this && this.__values) || function(o) { | ||
var states = stateNode.states; | ||
var nodes = utils_1.keys(states).reduce(function (accNodes, stateKey) { | ||
var nodes = (0, utils_1.keys)(states).reduce(function (accNodes, stateKey) { | ||
var childStateNode = states[stateKey]; | ||
var childStateNodes = getStateNodes(childStateNode); | ||
accNodes.push.apply(accNodes, __spreadArray([childStateNode], __read(childStateNodes))); | ||
accNodes.push.apply(accNodes, __spreadArray([childStateNode], __read(childStateNodes), false)); | ||
return accNodes; | ||
@@ -120,3 +124,3 @@ }, []); | ||
adjacency[stateHash] = {}; | ||
var potentialEvents = utils_1.flatten(nextEvents.map(function (nextEvent) { | ||
var potentialEvents = (0, utils_1.flatten)(nextEvents.map(function (nextEvent) { | ||
var getNextEvents = events[nextEvent]; | ||
@@ -139,3 +143,3 @@ if (!getNextEvents) { | ||
catch (e) { | ||
throw new Error("Unable to transition from state " + stateSerializer(state) + " on event " + eventSerializer(event_1) + ": " + e.message); | ||
throw new Error("Unable to transition from state ".concat(stateSerializer(state), " on event ").concat(eventSerializer(event_1), ": ").concat(e.message)); | ||
} | ||
@@ -186,3 +190,3 @@ if ((!filter || filter(nextState)) && | ||
try { | ||
for (var _d = (e_3 = void 0, __values(utils_1.keys(adjacency[vertex]))), _e = _d.next(); !_e.done; _e = _d.next()) { | ||
for (var _d = (e_3 = void 0, __values((0, utils_1.keys)(adjacency[vertex]))), _e = _d.next(); !_e.done; _e = _d.next()) { | ||
var event_2 = _e.value; | ||
@@ -281,3 +285,3 @@ var nextSegment = adjacency[vertex][event_2]; | ||
weight: path.length, | ||
segments: __spreadArray([], __read(path)) | ||
segments: __spreadArray([], __read(path), false) | ||
}); | ||
@@ -287,3 +291,3 @@ } | ||
try { | ||
for (var _b = __values(utils_1.keys(adjacency[fromStateSerial])), _c = _b.next(); !_c.done; _c = _b.next()) { | ||
for (var _b = __values((0, utils_1.keys)(adjacency[fromStateSerial])), _c = _b.next(); !_c.done; _c = _b.next()) { | ||
var subEvent = _c.value; | ||
@@ -319,3 +323,3 @@ var nextSegment = adjacency[fromStateSerial][subEvent]; | ||
try { | ||
for (var _b = __values(utils_1.keys(adjacency)), _c = _b.next(); !_c.done; _c = _b.next()) { | ||
for (var _b = __values((0, utils_1.keys)(adjacency)), _c = _b.next(); !_c.done; _c = _b.next()) { | ||
var nextStateSerial = _c.value; | ||
@@ -337,11 +341,11 @@ util(machine.initialState, nextStateSerial); | ||
var result = getSimplePaths(machine, options); | ||
return utils_1.keys(result).map(function (key) { return result[key]; }); | ||
return (0, utils_1.keys)(result).map(function (key) { return result[key]; }); | ||
} | ||
exports.getSimplePathsAsArray = getSimplePathsAsArray; | ||
function toDirectedGraph(stateNode) { | ||
var edges = utils_1.flatten(stateNode.transitions.map(function (t, transitionIndex) { | ||
var edges = (0, utils_1.flatten)(stateNode.transitions.map(function (t, transitionIndex) { | ||
var targets = t.target ? t.target : [stateNode]; | ||
return targets.map(function (target, targetIndex) { | ||
var edge = { | ||
id: stateNode.id + ":" + transitionIndex + ":" + targetIndex, | ||
id: "".concat(stateNode.id, ":").concat(transitionIndex, ":").concat(targetIndex), | ||
source: stateNode, | ||
@@ -365,3 +369,3 @@ target: target, | ||
stateNode: stateNode, | ||
children: getChildren(stateNode).map(function (sn) { return toDirectedGraph(sn); }), | ||
children: getChildren(stateNode).map(toDirectedGraph), | ||
edges: edges, | ||
@@ -412,3 +416,3 @@ toJSON: function () { | ||
if (!nextSegment) { | ||
throw new Error("Invalid transition from " + stateSerial + " with " + eventSerial); | ||
throw new Error("Invalid transition from ".concat(stateSerial, " with ").concat(eventSerial)); | ||
} | ||
@@ -415,0 +419,0 @@ var nextStateSerial = stateSerializer(nextSegment.state); |
import { State, EventObject, StateValue, StateNode, TransitionDefinition } from 'xstate'; | ||
export declare type AnyStateNode = StateNode<any, any, any, any, any>; | ||
export interface TransitionMap { | ||
@@ -15,4 +16,4 @@ state: StateValue | undefined; | ||
id: string; | ||
source: StateNode; | ||
target: StateNode; | ||
source: AnyStateNode; | ||
target: AnyStateNode; | ||
label: DirectedGraphLabel; | ||
@@ -19,0 +20,0 @@ transition: TransitionDefinition<any, any>; |
{ | ||
"name": "@xstate/graph", | ||
"version": "1.4.0", | ||
"version": "1.4.1", | ||
"description": "XState graph utilities", | ||
@@ -14,3 +14,3 @@ "keywords": [ | ||
"author": "David Khourshid <davidkpiano@gmail.com>", | ||
"homepage": "https://github.com/davidkpiano/xstate/tree/main/packages/xstate-test#readme", | ||
"homepage": "https://github.com/statelyai/xstate/tree/main/packages/xstate-test#readme", | ||
"license": "MIT", | ||
@@ -29,3 +29,3 @@ "main": "lib/index.js", | ||
"type": "git", | ||
"url": "git+ssh://git@github.com/davidkpiano/xstate.git" | ||
"url": "git+ssh://git@github.com/statelyai/xstate.git" | ||
}, | ||
@@ -36,9 +36,9 @@ "scripts": { | ||
"test": "jest", | ||
"prepublish": "npm run build && npm run test" | ||
"prepare": "npm run build" | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/davidkpiano/xstate/issues" | ||
"url": "https://github.com/statelyai/xstate/issues" | ||
}, | ||
"peerDependencies": { | ||
"xstate": "^4.9.0" | ||
"xstate": "^4.29.0" | ||
}, | ||
@@ -49,3 +49,3 @@ "devDependencies": { | ||
"ts-jest": "^26.5.6", | ||
"typescript": "^4.3.5", | ||
"typescript": "^4.5.2", | ||
"xstate": "*" | ||
@@ -52,0 +52,0 @@ }, |
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
53122
1094
1