npm-sb-flow-validation
Determines wether a flow contains a cycle.
Get started
Install the npm module
npm install --save @servisbot/npm-sb-flow-validation
Implement the code
const detectCyclesInFlow = require('@servisbot/npm-sb-flow-validation');
// Expects the following flow structure, which is the Data object from the worker
const flow = { worker.Data }
// Returns true / false
const result = detectCyclesInFlow(flow);
console.log('Has Cycles : ', !!result); // will give a true/false value
console.log('Found cycle at node id', result) // if the above is true, result will be the vertex
Tests
Run all test suites
npm run test
Run unit tests
npm run test-unit
Run integration tests
npm run test-integration
Black list
If you do not want to detect cycles that contain specific nodes eg. input node, you can add the node type to the /src/nodeBlacklist.js file and the node will be ignored.
Eg. use case: dialog node -> input node -> dialog node, this is regarded as a valid cycle and will be ignored as it's currently declared within the blacklist.
What this will detect
Designed to detect cycles within multiple flows and subflows.
Sample flows that contain cycles
- Flow: start -> dialogA -> dialogB -> dialogA
- Flow: start -> dialogA -> SubFlow -> dialogB
Subflow: input -> dialogC -> dialogD
-> dialogC
-> output
- Flow: start -> dialogA -> Flow2
Flow2: input -> dialogB -> output -> Flow1
- Flow: start -> dialogA -> SubFlow -> dialogA
Subflow: input -> dialogB -> output
Sample flows that do not contain cycles
- FLow: start -> dialogA -> Input -> dialogA
- Flow: start -> dialogA -> input -> Flow2
Flow2: input -> dialogB -> output -> Flow1
- Flow: start -> dialogA -> SubFlow -> dialogB
Subflow: input -> dialogC -> Input
-> dialogC
-> output