bpmnlint
Advanced tools
Comparing version 7.0.1 to 7.1.0
@@ -9,2 +9,7 @@ # Changelog | ||
## 7.1.0 | ||
* `FEAT`: allow rules to skip sub-tree traversal ([#53](https://github.com/bpmn-io/bpmnlint/issues/53)) | ||
* `FEAT`: allow rules to hook into node `enter` and `leave` ([#52](https://github.com/bpmn-io/bpmnlint/issues/52)) | ||
## 7.0.1 | ||
@@ -11,0 +16,0 @@ |
@@ -37,3 +37,3 @@ const Linter = require('../linter'); | ||
const preambleCode = ` | ||
var cache = {}; | ||
const cache = {}; | ||
@@ -65,11 +65,11 @@ /** | ||
var resolver = new Resolver(); | ||
const resolver = new Resolver(); | ||
var rules = ${serializedRules}; | ||
const rules = ${serializedRules}; | ||
var config = { | ||
const config = { | ||
rules: rules | ||
}; | ||
var bundle = { | ||
const bundle = { | ||
resolver: resolver, | ||
@@ -76,0 +76,0 @@ config: config |
@@ -18,4 +18,18 @@ const traverse = require('./traverse'); | ||
const reporter = new Reporter({ rule, moddleRoot }); | ||
traverse(moddleRoot, node => rule.check(node, reporter)); | ||
const check = rule.check; | ||
const enter = check && check.enter || check; | ||
const leave = check && check.leave; | ||
if (!enter && !leave) { | ||
throw new Error('no check implemented'); | ||
} | ||
traverse(moddleRoot, { | ||
enter: enter ? (node) => enter(node, reporter) : null, | ||
leave: leave ? (node) => leave(node, reporter) : null | ||
}); | ||
return reporter.messages; | ||
}; |
@@ -6,30 +6,35 @@ /** | ||
* @param {ModdleElement} element | ||
* @param {Function} fn | ||
* @param {{ enter?: Function; leave?: Function }} options | ||
*/ | ||
module.exports = function traverse(element, fn) { | ||
fn(element); | ||
module.exports = function traverse(element, options) { | ||
var descriptor = element.$descriptor; | ||
const enter = options.enter || null; | ||
const leave = options.leave || null; | ||
if (descriptor.isGeneric) { | ||
return; | ||
} | ||
const enterSubTree = enter && enter(element); | ||
var containedProperties = descriptor.properties.filter(p => { | ||
return !p.isAttr && !p.isReference && p.type !== 'String'; | ||
}); | ||
const descriptor = element.$descriptor; | ||
containedProperties.forEach(p => { | ||
if (p.name in element) { | ||
const propertyValue = element[p.name]; | ||
if (enterSubTree !== false && !descriptor.isGeneric) { | ||
if (p.isMany) { | ||
propertyValue.forEach(child => { | ||
traverse(child, fn); | ||
}); | ||
} else { | ||
traverse(propertyValue, fn); | ||
const containedProperties = descriptor.properties.filter(p => { | ||
return !p.isAttr && !p.isReference && p.type !== 'String'; | ||
}); | ||
containedProperties.forEach(p => { | ||
if (p.name in element) { | ||
const propertyValue = element[p.name]; | ||
if (p.isMany) { | ||
propertyValue.forEach(child => { | ||
traverse(child, options); | ||
}); | ||
} else { | ||
traverse(propertyValue, options); | ||
} | ||
} | ||
} | ||
}); | ||
}); | ||
} | ||
leave && leave(element); | ||
}; |
{ | ||
"name": "bpmnlint", | ||
"description": "Validate your BPMN diagrams based on configurable lint rules", | ||
"version": "7.0.1", | ||
"version": "7.1.0", | ||
"main": "lib/index.js", | ||
@@ -6,0 +6,0 @@ "keywords": [ |
48498
1418