diff --git a/dist/amd/builders/ruleset-builder.js b/dist/amd/builders/ruleset-builder.js index e97feef..d27c445 100644 --- a/dist/amd/builders/ruleset-builder.js +++ b/dist/amd/builders/ruleset-builder.js @@ -42,7 +42,7 @@ define(["require", "exports", "../rulesets/ruleset", "../rulesets/rule-link", ". return _this; }; this.addCompositeRule = function (compositeRule) { - _this.internalRuleset.compositeRules[compositeRule.propertyName] = compositeRule; + _this.internalRuleset.compositeRules[compositeRule.virtualPropertyName] = compositeRule; return _this; }; this.withDisplayName = function (displayName) { @@ -50,9 +50,9 @@ define(["require", "exports", "../rulesets/ruleset", "../rulesets/rule-link", ". _this.internalRuleset.propertyDisplayNames[_this.currentProperty] = displayName; return _this; }; - this.addDynamicRule = function (propertyName, validate, getMessage) { - var compositeRule = new dynamic_composite_validation_rule_1.DynamicCompositeValidationRule(propertyName, validate, getMessage); - _this.internalRuleset.compositeRules[propertyName] = compositeRule; + this.addDynamicRule = function (virtualPropertyName, validate, getMessage) { + var compositeRule = new dynamic_composite_validation_rule_1.DynamicCompositeValidationRule(virtualPropertyName, validate, getMessage); + _this.internalRuleset.compositeRules[virtualPropertyName] = compositeRule; return _this; }; this.withMessage = function (messageOverride) { diff --git a/dist/amd/index.js b/dist/amd/index.js index 8398b93..be7d557 100644 --- a/dist/amd/index.js +++ b/dist/amd/index.js @@ -1,4 +1,4 @@ -define(["require", "exports", "./exposer", "./rule-registry-setup", "./builders/reactive-validation-group-builder", "./builders/ruleset-builder", "./builders/validation-group-builder", "./events/model-state-changed-event", "./events/property-changed-event", "./events/property-state-changed-event", "./factories/model-resolver-factory", "./factories/model-watcher-factory", "./helpers/comparer-helper", "./helpers/type-helper", "./processors/field-error-processor", "./processors/field-has-error", "./processors/validation-error", "./promises/promise-counter", "./resolvers/model-resolver", "./rulesets/for-each-rule", "./rulesets/rule-link", "./rulesets/rule-resolver", "./rulesets/ruleset", "./rules/advanced-regex-rule", "./rules/date-validation-rule", "./rules/decimal-validation-rule", "./rules/email-validation-rule", "./rules/equal-validation-rule", "./rules/iso-date-validation-rule", "./rules/matches-validation-rule", "./rules/max-length-validation-rule", "./rules/max-value-validation-rule", "./rules/min-length-validation-rule", "./rules/min-value-validation-rule", "./rules/not-equal-validation-rule", "./rules/number-validation-rule", "./rules/regex-validation-rule", "./rules/required-validation-rule", "./rules/rule-registry", "./rules/step-validation-rule", "./watcher/model-watcher", "./watcher/property-watcher", "./validation-groups/reactive-validation-group", "./validation-groups/validation-group", "./rules/composite/dynamic-composite-validation-rule"], function (require, exports, exposer_1, rule_registry_setup_1, reactive_validation_group_builder_1, ruleset_builder_1, validation_group_builder_1, model_state_changed_event_1, property_changed_event_1, property_state_changed_event_1, model_resolver_factory_1, model_watcher_factory_1, comparer_helper_1, type_helper_1, field_error_processor_1, field_has_error_1, validation_error_1, promise_counter_1, model_resolver_1, for_each_rule_1, rule_link_1, rule_resolver_1, ruleset_1, advanced_regex_rule_1, date_validation_rule_1, decimal_validation_rule_1, email_validation_rule_1, equal_validation_rule_1, iso_date_validation_rule_1, matches_validation_rule_1, max_length_validation_rule_1, max_value_validation_rule_1, min_length_validation_rule_1, min_value_validation_rule_1, not_equal_validation_rule_1, number_validation_rule_1, regex_validation_rule_1, required_validation_rule_1, rule_registry_1, step_validation_rule_1, model_watcher_1, property_watcher_1, reactive_validation_group_1, validation_group_1, dynamic_composite_validation_rule_1) { +define(["require", "exports", "./exposer", "./rule-registry-setup", "./builders/reactive-validation-group-builder", "./builders/ruleset-builder", "./builders/validation-group-builder", "./events/model-state-changed-event", "./events/property-changed-event", "./events/property-state-changed-event", "./factories/model-resolver-factory", "./factories/model-watcher-factory", "./helpers/comparer-helper", "./helpers/type-helper", "./processors/field-error-processor", "./processors/field-has-error", "./processors/validation-error", "./promises/promise-counter", "./resolvers/model-resolver", "./rules/advanced-regex-rule", "./rules/date-validation-rule", "./rules/decimal-validation-rule", "./rules/email-validation-rule", "./rules/equal-validation-rule", "./rules/iso-date-validation-rule", "./rules/matches-validation-rule", "./rules/max-length-validation-rule", "./rules/max-value-validation-rule", "./rules/min-length-validation-rule", "./rules/min-value-validation-rule", "./rules/not-equal-validation-rule", "./rules/number-validation-rule", "./rules/regex-validation-rule", "./rules/required-validation-rule", "./rules/rule-registry", "./rules/step-validation-rule", "./rulesets/for-each-rule", "./rulesets/rule-link", "./rulesets/rule-resolver", "./rulesets/ruleset", "./validation-groups/reactive-validation-group", "./validation-groups/validation-group", "./watcher/model-watcher", "./watcher/property-watcher", "./rules/composite/dynamic-composite-validation-rule"], function (require, exports, exposer_1, rule_registry_setup_1, reactive_validation_group_builder_1, ruleset_builder_1, validation_group_builder_1, model_state_changed_event_1, property_changed_event_1, property_state_changed_event_1, model_resolver_factory_1, model_watcher_factory_1, comparer_helper_1, type_helper_1, field_error_processor_1, field_has_error_1, validation_error_1, promise_counter_1, model_resolver_1, advanced_regex_rule_1, date_validation_rule_1, decimal_validation_rule_1, email_validation_rule_1, equal_validation_rule_1, iso_date_validation_rule_1, matches_validation_rule_1, max_length_validation_rule_1, max_value_validation_rule_1, min_length_validation_rule_1, min_value_validation_rule_1, not_equal_validation_rule_1, number_validation_rule_1, regex_validation_rule_1, required_validation_rule_1, rule_registry_1, step_validation_rule_1, for_each_rule_1, rule_link_1, rule_resolver_1, ruleset_1, reactive_validation_group_1, validation_group_1, model_watcher_1, property_watcher_1, dynamic_composite_validation_rule_1) { "use strict"; function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; @@ -21,10 +21,6 @@ define(["require", "exports", "./exposer", "./rule-registry-setup", "./builders/ __export(validation_error_1); __export(promise_counter_1); __export(model_resolver_1); - __export(for_each_rule_1); - __export(rule_link_1); - __export(rule_resolver_1); - __export(ruleset_1); __export(advanced_regex_rule_1); __export(date_validation_rule_1); __export(decimal_validation_rule_1); @@ -42,9 +38,13 @@ define(["require", "exports", "./exposer", "./rule-registry-setup", "./builders/ __export(required_validation_rule_1); __export(rule_registry_1); __export(step_validation_rule_1); - __export(model_watcher_1); - __export(property_watcher_1); + __export(for_each_rule_1); + __export(rule_link_1); + __export(rule_resolver_1); + __export(ruleset_1); __export(reactive_validation_group_1); __export(validation_group_1); + __export(model_watcher_1); + __export(property_watcher_1); __export(dynamic_composite_validation_rule_1); }); diff --git a/dist/amd/rules/composite/dynamic-composite-validation-rule.js b/dist/amd/rules/composite/dynamic-composite-validation-rule.js index 0046e24..5d15c23 100644 --- a/dist/amd/rules/composite/dynamic-composite-validation-rule.js +++ b/dist/amd/rules/composite/dynamic-composite-validation-rule.js @@ -2,8 +2,8 @@ define(["require", "exports"], function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var DynamicCompositeValidationRule = (function () { - function DynamicCompositeValidationRule(propertyName, validate, message) { - this.propertyName = propertyName; + function DynamicCompositeValidationRule(virtualPropertyName, validate, message) { + this.virtualPropertyName = virtualPropertyName; this.validate = validate; this.message = message; } diff --git a/dist/amd/rulesets/ruleset.js b/dist/amd/rulesets/ruleset.js index 6c489b2..c1c369e 100644 --- a/dist/amd/rulesets/ruleset.js +++ b/dist/amd/rulesets/ruleset.js @@ -20,7 +20,7 @@ define(["require", "exports"], function (require, exports) { _this.createPropertyEntryIfNeeded(property); _this.rules[property].push(ruleset); }; - this.addCompositeRule = function (compositeRule) { _this.compositeRules[compositeRule.propertyName] = compositeRule; }; + this.addCompositeRule = function (compositeRule) { _this.compositeRules[compositeRule.virtualPropertyName] = compositeRule; }; this.addPropertyDisplayName = function (propertyName, displayName) { return _this.propertyDisplayNames[propertyName] = displayName; }; this.getRulesForProperty = function (property) { return _this.rules[property]; }; this.getCompositeRulesRulesForProperty = function (propertyName) { return _this.compositeRules[propertyName]; }; diff --git a/dist/amd/validation-groups/validation-group.js b/dist/amd/validation-groups/validation-group.js index 3b5f4a9..7bc8525 100644 --- a/dist/amd/validation-groups/validation-group.js +++ b/dist/amd/validation-groups/validation-group.js @@ -127,9 +127,9 @@ define(["require", "exports", "tslib", "../rulesets/rule-resolver", "../helpers/ case 1: isValid = _a.sent(); if (isValid) { - if (this.propertyErrors[compositeRule.propertyName]) { - delete this.propertyErrors[compositeRule.propertyName]; - eventArgs = new property_state_changed_event_1.PropertyStateChangedEvent(compositeRule.propertyName, true); + if (this.propertyErrors[compositeRule.virtualPropertyName]) { + delete this.propertyErrors[compositeRule.virtualPropertyName]; + eventArgs = new property_state_changed_event_1.PropertyStateChangedEvent(compositeRule.virtualPropertyName, true); this.propertyStateChangedEvent.publish(eventArgs); } stillHasErrors = hadErrors && this.hasErrors(); @@ -138,17 +138,17 @@ define(["require", "exports", "tslib", "../rulesets/rule-resolver", "../helpers/ } return [2 /*return*/]; } - previousError = this.propertyErrors[compositeRule.propertyName]; + previousError = this.propertyErrors[compositeRule.virtualPropertyName]; currentError = compositeRule.getMessage(this.modelResolver); - this.propertyErrors[compositeRule.propertyName] = currentError; + this.propertyErrors[compositeRule.virtualPropertyName] = currentError; if (currentError != previousError) { - eventArgs = new property_state_changed_event_1.PropertyStateChangedEvent(compositeRule.propertyName, false, currentError); + eventArgs = new property_state_changed_event_1.PropertyStateChangedEvent(compositeRule.virtualPropertyName, false, currentError); this.propertyStateChangedEvent.publish(eventArgs); if (!hadErrors) { this.modelStateChangedEvent.publish(new model_state_changed_event_1.ModelStateChangedEvent(false)); } } - return [2 /*return*/, this.propertyErrors[compositeRule.propertyName]]; + return [2 /*return*/, this.propertyErrors[compositeRule.virtualPropertyName]]; } }); }); }; diff --git a/dist/commonjs/builders/ruleset-builder.js b/dist/commonjs/builders/ruleset-builder.js index 9c180a6..4b11ac8 100644 --- a/dist/commonjs/builders/ruleset-builder.js +++ b/dist/commonjs/builders/ruleset-builder.js @@ -46,7 +46,7 @@ var RulesetBuilder = (function () { return _this; }; this.addCompositeRule = function (compositeRule) { - _this.internalRuleset.compositeRules[compositeRule.propertyName] = compositeRule; + _this.internalRuleset.compositeRules[compositeRule.virtualPropertyName] = compositeRule; return _this; }; this.withDisplayName = function (displayName) { @@ -54,9 +54,9 @@ var RulesetBuilder = (function () { _this.internalRuleset.propertyDisplayNames[_this.currentProperty] = displayName; return _this; }; - this.addDynamicRule = function (propertyName, validate, getMessage) { - var compositeRule = new dynamic_composite_validation_rule_1.DynamicCompositeValidationRule(propertyName, validate, getMessage); - _this.internalRuleset.compositeRules[propertyName] = compositeRule; + this.addDynamicRule = function (virtualPropertyName, validate, getMessage) { + var compositeRule = new dynamic_composite_validation_rule_1.DynamicCompositeValidationRule(virtualPropertyName, validate, getMessage); + _this.internalRuleset.compositeRules[virtualPropertyName] = compositeRule; return _this; }; this.withMessage = function (messageOverride) { diff --git a/dist/commonjs/index.js b/dist/commonjs/index.js index fde1dc8..8675a6e 100644 --- a/dist/commonjs/index.js +++ b/dist/commonjs/index.js @@ -20,10 +20,6 @@ __export(require("./processors/field-has-error")); __export(require("./processors/validation-error")); __export(require("./promises/promise-counter")); __export(require("./resolvers/model-resolver")); -__export(require("./rulesets/for-each-rule")); -__export(require("./rulesets/rule-link")); -__export(require("./rulesets/rule-resolver")); -__export(require("./rulesets/ruleset")); __export(require("./rules/advanced-regex-rule")); __export(require("./rules/date-validation-rule")); __export(require("./rules/decimal-validation-rule")); @@ -41,8 +37,12 @@ __export(require("./rules/regex-validation-rule")); __export(require("./rules/required-validation-rule")); __export(require("./rules/rule-registry")); __export(require("./rules/step-validation-rule")); -__export(require("./watcher/model-watcher")); -__export(require("./watcher/property-watcher")); +__export(require("./rulesets/for-each-rule")); +__export(require("./rulesets/rule-link")); +__export(require("./rulesets/rule-resolver")); +__export(require("./rulesets/ruleset")); __export(require("./validation-groups/reactive-validation-group")); __export(require("./validation-groups/validation-group")); +__export(require("./watcher/model-watcher")); +__export(require("./watcher/property-watcher")); __export(require("./rules/composite/dynamic-composite-validation-rule")); diff --git a/dist/commonjs/rules/composite/dynamic-composite-validation-rule.js b/dist/commonjs/rules/composite/dynamic-composite-validation-rule.js index 85822cd..ad056ca 100644 --- a/dist/commonjs/rules/composite/dynamic-composite-validation-rule.js +++ b/dist/commonjs/rules/composite/dynamic-composite-validation-rule.js @@ -1,8 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var DynamicCompositeValidationRule = (function () { - function DynamicCompositeValidationRule(propertyName, validate, message) { - this.propertyName = propertyName; + function DynamicCompositeValidationRule(virtualPropertyName, validate, message) { + this.virtualPropertyName = virtualPropertyName; this.validate = validate; this.message = message; } diff --git a/dist/commonjs/rulesets/ruleset.js b/dist/commonjs/rulesets/ruleset.js index 3c9d110..e777a60 100644 --- a/dist/commonjs/rulesets/ruleset.js +++ b/dist/commonjs/rulesets/ruleset.js @@ -19,7 +19,7 @@ var Ruleset = (function () { _this.createPropertyEntryIfNeeded(property); _this.rules[property].push(ruleset); }; - this.addCompositeRule = function (compositeRule) { _this.compositeRules[compositeRule.propertyName] = compositeRule; }; + this.addCompositeRule = function (compositeRule) { _this.compositeRules[compositeRule.virtualPropertyName] = compositeRule; }; this.addPropertyDisplayName = function (propertyName, displayName) { return _this.propertyDisplayNames[propertyName] = displayName; }; this.getRulesForProperty = function (property) { return _this.rules[property]; }; this.getCompositeRulesRulesForProperty = function (propertyName) { return _this.compositeRules[propertyName]; }; diff --git a/dist/commonjs/validation-groups/validation-group.js b/dist/commonjs/validation-groups/validation-group.js index e68ce1b..5f00d79 100644 --- a/dist/commonjs/validation-groups/validation-group.js +++ b/dist/commonjs/validation-groups/validation-group.js @@ -133,9 +133,9 @@ var ValidationGroup = (function () { case 1: isValid = _a.sent(); if (isValid) { - if (this.propertyErrors[compositeRule.propertyName]) { - delete this.propertyErrors[compositeRule.propertyName]; - eventArgs = new property_state_changed_event_1.PropertyStateChangedEvent(compositeRule.propertyName, true); + if (this.propertyErrors[compositeRule.virtualPropertyName]) { + delete this.propertyErrors[compositeRule.virtualPropertyName]; + eventArgs = new property_state_changed_event_1.PropertyStateChangedEvent(compositeRule.virtualPropertyName, true); this.propertyStateChangedEvent.publish(eventArgs); } stillHasErrors = hadErrors && this.hasErrors(); @@ -144,17 +144,17 @@ var ValidationGroup = (function () { } return [2 /*return*/]; } - previousError = this.propertyErrors[compositeRule.propertyName]; + previousError = this.propertyErrors[compositeRule.virtualPropertyName]; currentError = compositeRule.getMessage(this.modelResolver); - this.propertyErrors[compositeRule.propertyName] = currentError; + this.propertyErrors[compositeRule.virtualPropertyName] = currentError; if (currentError != previousError) { - eventArgs = new property_state_changed_event_1.PropertyStateChangedEvent(compositeRule.propertyName, false, currentError); + eventArgs = new property_state_changed_event_1.PropertyStateChangedEvent(compositeRule.virtualPropertyName, false, currentError); this.propertyStateChangedEvent.publish(eventArgs); if (!hadErrors) { this.modelStateChangedEvent.publish(new model_state_changed_event_1.ModelStateChangedEvent(false)); } } - return [2 /*return*/, this.propertyErrors[compositeRule.propertyName]]; + return [2 /*return*/, this.propertyErrors[compositeRule.virtualPropertyName]]; } }); }); }; diff --git a/dist/definitions/builders/ruleset-builder.d.ts b/dist/definitions/builders/ruleset-builder.d.ts index 0fc29a1..66d7f5a 100644 --- a/dist/definitions/builders/ruleset-builder.d.ts +++ b/dist/definitions/builders/ruleset-builder.d.ts @@ -17,7 +17,7 @@ export declare class RulesetBuilder { addRule: (rule: string, ruleOptions?: any) => RulesetBuilder; addCompositeRule: (compositeRule: ICompositeValidationRule) => RulesetBuilder; withDisplayName: (displayName: string) => RulesetBuilder; - addDynamicRule: (propertyName: string, validate: (modelResolver: IModelResolver) => Promise, getMessage: string | ((modelResolver: IModelResolver) => string)) => this; + addDynamicRule: (virtualPropertyName: string, validate: (modelResolver: IModelResolver) => Promise, getMessage: string | ((modelResolver: IModelResolver) => string)) => this; withMessage: (messageOverride: string | ((value: any, ruleOptions?: any) => string)) => RulesetBuilder; appliesIf: (appliesFunction: boolean | ((modelResolver: IModelResolver, value: any, ruleOptions?: any) => boolean)) => RulesetBuilder; addRuleForEach: (rule: string, ruleOptions?: any) => RulesetBuilder; diff --git a/dist/definitions/index.d.ts b/dist/definitions/index.d.ts index 6408393..0e53ffe 100644 --- a/dist/definitions/index.d.ts +++ b/dist/definitions/index.d.ts @@ -20,11 +20,6 @@ export * from "./promises/promise-counter"; export * from "./resolvers/imodel-resolver"; export * from "./resolvers/iproperty-resolver"; export * from "./resolvers/model-resolver"; -export * from "./rulesets/for-each-rule"; -export * from "./rulesets/irule-resolver"; -export * from "./rulesets/rule-link"; -export * from "./rulesets/rule-resolver"; -export * from "./rulesets/ruleset"; export * from "./rules/advanced-regex-rule"; export * from "./rules/date-validation-rule"; export * from "./rules/decimal-validation-rule"; @@ -43,12 +38,17 @@ export * from "./rules/regex-validation-rule"; export * from "./rules/required-validation-rule"; export * from "./rules/rule-registry"; export * from "./rules/step-validation-rule"; -export * from "./watcher/imodel-watcher"; -export * from "./watcher/model-watcher"; -export * from "./watcher/property-watcher"; +export * from "./rulesets/for-each-rule"; +export * from "./rulesets/irule-resolver"; +export * from "./rulesets/rule-link"; +export * from "./rulesets/rule-resolver"; +export * from "./rulesets/ruleset"; export * from "./validation-groups/ireactive-validation-group"; export * from "./validation-groups/ivalidation-group"; export * from "./validation-groups/reactive-validation-group"; export * from "./validation-groups/validation-group"; +export * from "./watcher/imodel-watcher"; +export * from "./watcher/model-watcher"; +export * from "./watcher/property-watcher"; export * from "./rules/composite/dynamic-composite-validation-rule"; export * from "./rules/composite/icomposite-validation-rule"; diff --git a/dist/definitions/rules/composite/dynamic-composite-validation-rule.d.ts b/dist/definitions/rules/composite/dynamic-composite-validation-rule.d.ts index 340dea0..c116906 100644 --- a/dist/definitions/rules/composite/dynamic-composite-validation-rule.d.ts +++ b/dist/definitions/rules/composite/dynamic-composite-validation-rule.d.ts @@ -1,9 +1,9 @@ import { ICompositeValidationRule } from "./icomposite-validation-rule"; import { IModelResolver } from "../../resolvers/imodel-resolver"; export declare class DynamicCompositeValidationRule implements ICompositeValidationRule { - propertyName: string; + virtualPropertyName: string; validate: ICompositeValidationRule["validate"]; private message; getMessage(modelResolver: IModelResolver): string; - constructor(propertyName: string, validate: ICompositeValidationRule["validate"], message: ICompositeValidationRule["getMessage"] | string); + constructor(virtualPropertyName: string, validate: ICompositeValidationRule["validate"], message: ICompositeValidationRule["getMessage"] | string); } diff --git a/dist/definitions/rules/composite/icomposite-validation-rule.d.ts b/dist/definitions/rules/composite/icomposite-validation-rule.d.ts index c1c5a8d..ef6125f 100644 --- a/dist/definitions/rules/composite/icomposite-validation-rule.d.ts +++ b/dist/definitions/rules/composite/icomposite-validation-rule.d.ts @@ -1,6 +1,6 @@ import { IModelResolver } from "../../resolvers/imodel-resolver"; export interface ICompositeValidationRule { - propertyName: string; + virtualPropertyName: string; validate(modelResolver: IModelResolver): Promise; getMessage(modelResolver: IModelResolver): string; } diff --git a/dist/es6/builders/ruleset-builder.js b/dist/es6/builders/ruleset-builder.js index a21ccc2..d0c3212 100644 --- a/dist/es6/builders/ruleset-builder.js +++ b/dist/es6/builders/ruleset-builder.js @@ -43,7 +43,7 @@ export class RulesetBuilder { return this; }; this.addCompositeRule = (compositeRule) => { - this.internalRuleset.compositeRules[compositeRule.propertyName] = compositeRule; + this.internalRuleset.compositeRules[compositeRule.virtualPropertyName] = compositeRule; return this; }; this.withDisplayName = (displayName) => { @@ -51,9 +51,9 @@ export class RulesetBuilder { this.internalRuleset.propertyDisplayNames[this.currentProperty] = displayName; return this; }; - this.addDynamicRule = (propertyName, validate, getMessage) => { - let compositeRule = new DynamicCompositeValidationRule(propertyName, validate, getMessage); - this.internalRuleset.compositeRules[propertyName] = compositeRule; + this.addDynamicRule = (virtualPropertyName, validate, getMessage) => { + let compositeRule = new DynamicCompositeValidationRule(virtualPropertyName, validate, getMessage); + this.internalRuleset.compositeRules[virtualPropertyName] = compositeRule; return this; }; this.withMessage = (messageOverride) => { diff --git a/dist/es6/index.js b/dist/es6/index.js index 844a666..c82e0da 100644 --- a/dist/es6/index.js +++ b/dist/es6/index.js @@ -15,10 +15,6 @@ export * from "./processors/field-has-error"; export * from "./processors/validation-error"; export * from "./promises/promise-counter"; export * from "./resolvers/model-resolver"; -export * from "./rulesets/for-each-rule"; -export * from "./rulesets/rule-link"; -export * from "./rulesets/rule-resolver"; -export * from "./rulesets/ruleset"; export * from "./rules/advanced-regex-rule"; export * from "./rules/date-validation-rule"; export * from "./rules/decimal-validation-rule"; @@ -36,8 +32,12 @@ export * from "./rules/regex-validation-rule"; export * from "./rules/required-validation-rule"; export * from "./rules/rule-registry"; export * from "./rules/step-validation-rule"; -export * from "./watcher/model-watcher"; -export * from "./watcher/property-watcher"; +export * from "./rulesets/for-each-rule"; +export * from "./rulesets/rule-link"; +export * from "./rulesets/rule-resolver"; +export * from "./rulesets/ruleset"; export * from "./validation-groups/reactive-validation-group"; export * from "./validation-groups/validation-group"; +export * from "./watcher/model-watcher"; +export * from "./watcher/property-watcher"; export * from "./rules/composite/dynamic-composite-validation-rule"; diff --git a/dist/es6/rules/composite/dynamic-composite-validation-rule.js b/dist/es6/rules/composite/dynamic-composite-validation-rule.js index 8b81378..f36e4dd 100644 --- a/dist/es6/rules/composite/dynamic-composite-validation-rule.js +++ b/dist/es6/rules/composite/dynamic-composite-validation-rule.js @@ -1,6 +1,6 @@ export class DynamicCompositeValidationRule { - constructor(propertyName, validate, message) { - this.propertyName = propertyName; + constructor(virtualPropertyName, validate, message) { + this.virtualPropertyName = virtualPropertyName; this.validate = validate; this.message = message; } diff --git a/dist/es6/rulesets/ruleset.js b/dist/es6/rulesets/ruleset.js index c5575b3..8343bf7 100644 --- a/dist/es6/rulesets/ruleset.js +++ b/dist/es6/rulesets/ruleset.js @@ -16,7 +16,7 @@ export class Ruleset { this.createPropertyEntryIfNeeded(property); this.rules[property].push(ruleset); }; - this.addCompositeRule = (compositeRule) => { this.compositeRules[compositeRule.propertyName] = compositeRule; }; + this.addCompositeRule = (compositeRule) => { this.compositeRules[compositeRule.virtualPropertyName] = compositeRule; }; this.addPropertyDisplayName = (propertyName, displayName) => { return this.propertyDisplayNames[propertyName] = displayName; }; this.getRulesForProperty = (property) => { return this.rules[property]; }; this.getCompositeRulesRulesForProperty = (propertyName) => { return this.compositeRules[propertyName]; }; diff --git a/dist/es6/validation-groups/validation-group.js b/dist/es6/validation-groups/validation-group.js index afaf028..eb40cf1 100644 --- a/dist/es6/validation-groups/validation-group.js +++ b/dist/es6/validation-groups/validation-group.js @@ -105,9 +105,9 @@ export class ValidationGroup { let hadErrors = this.hasErrors(); let isValid = await compositeRule.validate(this.modelResolver); if (isValid) { - if (this.propertyErrors[compositeRule.propertyName]) { - delete this.propertyErrors[compositeRule.propertyName]; - let eventArgs = new PropertyStateChangedEvent(compositeRule.propertyName, true); + if (this.propertyErrors[compositeRule.virtualPropertyName]) { + delete this.propertyErrors[compositeRule.virtualPropertyName]; + let eventArgs = new PropertyStateChangedEvent(compositeRule.virtualPropertyName, true); this.propertyStateChangedEvent.publish(eventArgs); } let stillHasErrors = hadErrors && this.hasErrors(); @@ -116,17 +116,17 @@ export class ValidationGroup { } return; } - let previousError = this.propertyErrors[compositeRule.propertyName]; + let previousError = this.propertyErrors[compositeRule.virtualPropertyName]; let currentError = compositeRule.getMessage(this.modelResolver); - this.propertyErrors[compositeRule.propertyName] = currentError; + this.propertyErrors[compositeRule.virtualPropertyName] = currentError; if (currentError != previousError) { - let eventArgs = new PropertyStateChangedEvent(compositeRule.propertyName, false, currentError); + let eventArgs = new PropertyStateChangedEvent(compositeRule.virtualPropertyName, false, currentError); this.propertyStateChangedEvent.publish(eventArgs); if (!hadErrors) { this.modelStateChangedEvent.publish(new ModelStateChangedEvent(false)); } } - return this.propertyErrors[compositeRule.propertyName]; + return this.propertyErrors[compositeRule.virtualPropertyName]; }; this.validateCompositeRules = async () => { for (let propertyName in this.ruleset.compositeRules) { diff --git a/docs/creating-rulesets.md b/docs/creating-rulesets.md index 25baedc..4d0ad97 100644 --- a/docs/creating-rulesets.md +++ b/docs/creating-rulesets.md @@ -40,6 +40,26 @@ the arrays. This is for use with arrays and specifies that each element within the array should be subject to the ruleset provided, so this allows for complex repeatable rules with very little effort. +### addCompositeRule(rule: ICompositeValidationRule) + +This allows you to write a rule that applies to the model, not a singular property. So if you need to validate that +3 different properties all have a specific value, you can use composite rules to do that. + +### addDynamicRule(virtualPropertyName: string, validate: ICompositeValidationRule["validate"], getMessage: ((modelResolver: IModelResolver) + +This allows you to dynamically create a composite rule on the fly, the `virtualPropertyName` passed in should not be an existing +property name, but a virtual one which is used as the unique identifier in the error list for this rule, it can be used elsewhere +i.e `getPropertyErrors` and in event subscriptions, but every dynamic/composite rule should have a unique name. The `validate` +method should provide the actual validation body to return a true or a false in a promise form, as well as the `getMessage` +argument which can be a hardcoded string or a method which returns the string to display. + +### withDisplayName(displayName: string) + +This is used to provide a hint to other treacherous libraries that the property name should be displayed as the given string, +an example of this would if you had a model field called `usersOldPassword` you may want it displayed as `Original Password` +when viewing it in validation summaries. Nothing within treacherous core uses this, but `IValidationGroup` objects expose a +way to get a display name for a property. This is mainly here for view related libraries. + ### withMessage(messageOverride: ((value: any, ruleOptions?: any) => string) | string) This allows you to override the default message for the rule, so you can provide a string or a function which would diff --git a/src/builders/ruleset-builder.ts b/src/builders/ruleset-builder.ts index d1802a3..3d18c6b 100644 --- a/src/builders/ruleset-builder.ts +++ b/src/builders/ruleset-builder.ts @@ -64,7 +64,7 @@ export class RulesetBuilder } public addCompositeRule = (compositeRule: ICompositeValidationRule): RulesetBuilder => { - this.internalRuleset.compositeRules[compositeRule.propertyName] = compositeRule; + this.internalRuleset.compositeRules[compositeRule.virtualPropertyName] = compositeRule; return this; } @@ -75,9 +75,9 @@ export class RulesetBuilder return this; } - public addDynamicRule = (propertyName: string, validate: ICompositeValidationRule["validate"], getMessage: ((modelResolver: IModelResolver) => string) | string) => { - let compositeRule = new DynamicCompositeValidationRule(propertyName, validate, getMessage); - this.internalRuleset.compositeRules[propertyName] = compositeRule; + public addDynamicRule = (virtualPropertyName: string, validate: ICompositeValidationRule["validate"], getMessage: ((modelResolver: IModelResolver) => string) | string) => { + let compositeRule = new DynamicCompositeValidationRule(virtualPropertyName, validate, getMessage); + this.internalRuleset.compositeRules[virtualPropertyName] = compositeRule; return this; } diff --git a/src/index.ts b/src/index.ts index 3212062..9acbc4a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,11 +20,6 @@ export * from "./promises/promise-counter" export * from "./resolvers/imodel-resolver" export * from "./resolvers/iproperty-resolver" export * from "./resolvers/model-resolver" -export * from "./rulesets/for-each-rule" -export * from "./rulesets/irule-resolver" -export * from "./rulesets/rule-link" -export * from "./rulesets/rule-resolver" -export * from "./rulesets/ruleset" export * from "./rules/advanced-regex-rule" export * from "./rules/date-validation-rule" export * from "./rules/decimal-validation-rule" @@ -43,12 +38,17 @@ export * from "./rules/regex-validation-rule" export * from "./rules/required-validation-rule" export * from "./rules/rule-registry" export * from "./rules/step-validation-rule" -export * from "./watcher/imodel-watcher" -export * from "./watcher/model-watcher" -export * from "./watcher/property-watcher" +export * from "./rulesets/for-each-rule" +export * from "./rulesets/irule-resolver" +export * from "./rulesets/rule-link" +export * from "./rulesets/rule-resolver" +export * from "./rulesets/ruleset" export * from "./validation-groups/ireactive-validation-group" export * from "./validation-groups/ivalidation-group" export * from "./validation-groups/reactive-validation-group" export * from "./validation-groups/validation-group" +export * from "./watcher/imodel-watcher" +export * from "./watcher/model-watcher" +export * from "./watcher/property-watcher" export * from "./rules/composite/dynamic-composite-validation-rule" export * from "./rules/composite/icomposite-validation-rule" diff --git a/src/rules/composite/dynamic-composite-validation-rule.ts b/src/rules/composite/dynamic-composite-validation-rule.ts index 65ba0ee..300d150 100644 --- a/src/rules/composite/dynamic-composite-validation-rule.ts +++ b/src/rules/composite/dynamic-composite-validation-rule.ts @@ -10,6 +10,6 @@ export class DynamicCompositeValidationRule implements ICompositeValidationRule { return this.message; } } - constructor(public propertyName: string, public validate: ICompositeValidationRule["validate"], private message: ICompositeValidationRule["getMessage"] | string){ + constructor(public virtualPropertyName: string, public validate: ICompositeValidationRule["validate"], private message: ICompositeValidationRule["getMessage"] | string){ } } \ No newline at end of file diff --git a/src/rules/composite/icomposite-validation-rule.ts b/src/rules/composite/icomposite-validation-rule.ts index 7c83b81..78bc148 100644 --- a/src/rules/composite/icomposite-validation-rule.ts +++ b/src/rules/composite/icomposite-validation-rule.ts @@ -2,7 +2,7 @@ import {IModelResolver} from "../../resolvers/imodel-resolver"; export interface ICompositeValidationRule { - propertyName: string; + virtualPropertyName: string; validate(modelResolver: IModelResolver): Promise; getMessage(modelResolver: IModelResolver): string; } \ No newline at end of file diff --git a/src/rulesets/ruleset.ts b/src/rulesets/ruleset.ts index d357087..b541d2a 100644 --- a/src/rulesets/ruleset.ts +++ b/src/rulesets/ruleset.ts @@ -25,7 +25,7 @@ export class Ruleset } public addCompositeRule = (compositeRule: ICompositeValidationRule) : void => - { this.compositeRules[compositeRule.propertyName] = compositeRule; } + { this.compositeRules[compositeRule.virtualPropertyName] = compositeRule; } public addPropertyDisplayName = (propertyName: string, displayName) : string => { return this.propertyDisplayNames[propertyName] = displayName; } diff --git a/src/validation-groups/validation-group.ts b/src/validation-groups/validation-group.ts index 43af0c4..22c2aad 100644 --- a/src/validation-groups/validation-group.ts +++ b/src/validation-groups/validation-group.ts @@ -158,10 +158,10 @@ export class ValidationGroup implements IValidationGroup if(isValid) { - if(this.propertyErrors[compositeRule.propertyName]) + if(this.propertyErrors[compositeRule.virtualPropertyName]) { - delete this.propertyErrors[compositeRule.propertyName]; - let eventArgs = new PropertyStateChangedEvent(compositeRule.propertyName, true); + delete this.propertyErrors[compositeRule.virtualPropertyName]; + let eventArgs = new PropertyStateChangedEvent(compositeRule.virtualPropertyName, true); this.propertyStateChangedEvent.publish(eventArgs); } @@ -171,20 +171,20 @@ export class ValidationGroup implements IValidationGroup return; } - let previousError = this.propertyErrors[compositeRule.propertyName]; + let previousError = this.propertyErrors[compositeRule.virtualPropertyName]; let currentError = compositeRule.getMessage(this.modelResolver); - this.propertyErrors[compositeRule.propertyName] = currentError; + this.propertyErrors[compositeRule.virtualPropertyName] = currentError; if(currentError != previousError) { - let eventArgs = new PropertyStateChangedEvent(compositeRule.propertyName, false, currentError); + let eventArgs = new PropertyStateChangedEvent(compositeRule.virtualPropertyName, false, currentError); this.propertyStateChangedEvent.publish(eventArgs); if (!hadErrors) { this.modelStateChangedEvent.publish(new ModelStateChangedEvent(false)); } } - return this.propertyErrors[compositeRule.propertyName]; + return this.propertyErrors[compositeRule.virtualPropertyName]; } protected validateCompositeRules = async () => {