@servisbot/npm-sb-flow-validation
Advanced tools
Comparing version
organization=servisbot | ||
projectKey=servisbot:npm-sb-flow-validation | ||
serverUrl=https://sonarcloud.io | ||
serverVersion=7.7.0.22010 | ||
serverVersion=7.7.0.22107 | ||
dashboardUrl=https://sonarcloud.io/dashboard?id=servisbot%3Anpm-sb-flow-validation | ||
ceTaskId=AWkG4ZhsII5E_8RgclJ8 | ||
ceTaskUrl=https://sonarcloud.io/api/ce/task?id=AWkG4ZhsII5E_8RgclJ8 | ||
ceTaskId=AWkKbMgZzuesSb3rwBbI | ||
ceTaskUrl=https://sonarcloud.io/api/ce/task?id=AWkKbMgZzuesSb3rwBbI |
{ | ||
"name": "@servisbot/npm-sb-flow-validation", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "Validates node red flows", | ||
@@ -5,0 +5,0 @@ "main": "src/index.js", |
# npm-sb-flow-validation | ||
Validates a flow | ||
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 | ||
const flow = { body: [...flow nodes] } | ||
// Returns true / false | ||
const hasCycles = detectCyclesInFlow(flow); | ||
console.log('Has Cycles : ', hasCycles); | ||
``` | ||
### 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 |
401464
0.44%67
2133.33%