diff --git a/src/shapes-graph.js b/src/shapes-graph.js index 270067b..5922d11 100644 --- a/src/shapes-graph.js +++ b/src/shapes-graph.js @@ -110,9 +110,12 @@ class Constraint { } get validationFunction() { - return this.shape.isPropertyShape + if (this.compiledFunction) return this.compiledFunction + const func = this.shape.isPropertyShape ? this.component.propertyValidationFunction : this.component.nodeValidationFunction + this.compiledFunction = func.compile(this) + return this.compiledFunction } get isValidationFunctionGeneric() { diff --git a/src/validation-engine.js b/src/validation-engine.js index b4bbfbc..84e31c0 100644 --- a/src/validation-engine.js +++ b/src/validation-engine.js @@ -124,7 +124,7 @@ class ValidationEngine { const { sh } = this.context.ns this.recordErrorsLevel++ - const validationOutput = constraint.validationFunction.execute(focusNode, valueNode, constraint) + const validationOutput = constraint.validationFunction.execute(focusNode, valueNode) const validationResults = Array.isArray(validationOutput) ? validationOutput : [validationOutput] const results = validationResults diff --git a/src/validation-function.js b/src/validation-function.js index 7b90424..047fdf7 100644 --- a/src/validation-function.js +++ b/src/validation-function.js @@ -7,9 +7,12 @@ class ValidationFunction { this.func = func } - execute(focusNode, valueNode, constraint) { - const compiled = this.func.apply(globalObject, [this.context, constraint]) - return compiled.apply(globalObject, [this.context, focusNode, valueNode]) + compile(constraint) { + return new ValidationFunction(this.context, this.funcName, this.func.apply(globalObject, [this.context, constraint])) + } + + execute(focusNode, valueNode) { + return this.func.apply(globalObject, [this.context, focusNode, valueNode]) } }